diff --git a/.eslintignore b/.eslintignore index 8ab4750abd1..5941496e1a6 100644 --- a/.eslintignore +++ b/.eslintignore @@ -7,4 +7,5 @@ tools/icu tools/lint-md/lint-md.mjs benchmark/tmp doc/**/*.js +!doc/api_assets/*.js !.eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js index 787da541c3a..0f11677ccab 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -260,6 +260,7 @@ module.exports = { 'no-useless-concat': 'error', 'no-useless-constructor': 'error', 'no-useless-return': 'error', + 'no-var': 'error', 'no-void': 'error', 'no-whitespace-before-property': 'error', 'object-curly-newline': 'error', @@ -319,6 +320,7 @@ module.exports = { 'node-core/no-duplicate-requires': 'error', }, globals: { + CustomEvent: 'readable', Crypto: 'readable', CryptoKey: 'readable', fetch: 'readable', diff --git a/.gitattributes b/.gitattributes index 9f7d9377eaf..82563e5d2fc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,6 @@ test/fixtures/* -text vcbuild.bat text eol=crlf +deps/npm/bin/npm text eol=lf +deps/npm/bin/npx text eol=lf +deps/corepack/shims/corepack text eol=lf tools/msvs/find_python.cmd text eol=crlf diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4170038a0ac..48691479c44 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -108,7 +108,8 @@ /benchmark/misc/startup.js @nodejs/startup /src/node.cc @nodejs/startup /src/node_code_cache_stub.cc @nodejs/startup -/src/node_native_module* @nodejs/startup +/src/node_builtins* @nodejs/startup +/src/node_snapshot* @nodejs/startup /lib/internal/bootstrap/* @nodejs/startup /tools/code_cache/* @nodejs/startup /tools/snapshot/* @nodejs/startup diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.yml b/.github/ISSUE_TEMPLATE/1-bug-report.yml index 3edac8d807d..c40644bfc6d 100644 --- a/.github/ISSUE_TEMPLATE/1-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/1-bug-report.yml @@ -19,7 +19,7 @@ body: label: Platform description: | UNIX: output of `uname -a` - Windows: output of `"$([Environment]::OSVersion | ForEach-Object VersionString) $(if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" })"` in PowerShell console + Windows: output of `"$([Environment]::OSVersion.VersionString) $(('x86', 'x64')[[Environment]::Is64BitOperatingSystem])"` in PowerShell console - type: input attributes: label: Subsystem diff --git a/.github/ISSUE_TEMPLATE/4-report-a-flaky-test.yml b/.github/ISSUE_TEMPLATE/4-report-a-flaky-test.yml index dd6fa5091e3..8dc099fb40a 100644 --- a/.github/ISSUE_TEMPLATE/4-report-a-flaky-test.yml +++ b/.github/ISSUE_TEMPLATE/4-report-a-flaky-test.yml @@ -19,11 +19,24 @@ body: placeholder: e.g. `test-fs-stat-bigint` validations: required: true - - type: input + - type: dropdown attributes: label: Platform description: The platform the test is flaky on. - placeholder: e.g. `macos` or `linux` + multiple: true + options: + - AIX + - FreeBSD + - Linux ARM64 + - Linux ARMv7 + - Linux PPC64LE + - Linux s390x + - Linux x64 + - macOS ARM64 + - macOS x64 + - SmartOS + - Windows + - Other - type: textarea attributes: label: Console output diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 428bbf678a3..df5f12bb934 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,4 @@ -blank_issues_enabled: false +blank_issues_enabled: true contact_links: - name: ⁉️ Need help with Node.js? url: https://github.com/nodejs/help diff --git a/.github/label-pr-config.yml b/.github/label-pr-config.yml index a8d22980f6d..796877434b4 100644 --- a/.github/label-pr-config.yml +++ b/.github/label-pr-config.yml @@ -26,7 +26,7 @@ subSystemLabels: /^src\/.*win32.*/: c++, windows /^src\/node_zlib/: c++, zlib /^src\/tracing/: c++, tracing - /^src\/node_api/: c++, node-api + /^src\/(?:node_api|js_native_api)/: c++, node-api /^src\/node_http2/: c++, http2 /^src\/node_report/: c++, report /^src\/node_wasi/: c++, wasi @@ -67,7 +67,7 @@ subSystemLabels: /^tools\/make-v8/: tools, v8 engine, needs-ci /^tools\/v8_gypfiles/: tools, v8 engine, needs-ci /^tools\/(code_cache|snapshot)/: needs-ci - /^tools\/build-addons.js/: needs-ci + /^tools\/build-addons.mjs/: needs-ci # all other tool changes should be marked as such /^tools\//: tools /^\.eslint|\.remark|\.editorconfig/: tools @@ -101,6 +101,8 @@ subSystemLabels: /^lib\/worker_threads.js$/: worker /^lib\/internal\/url\.js$/: whatwg-url /^lib\/internal\/modules\/esm/: esm + /^lib\/internal\/webstreams/: web streams + /^lib\/internal\/test_runner/: dont-land-on-v14.x # All other lib/ files map directly /^lib\/_(\w+)_\w+\.js?$/: $1 # e.g. _(stream)_wrap @@ -117,11 +119,13 @@ exlusiveLabels: /^test\/inspector\//: test, inspector /^test\/cctest\/test_inspector/: test, inspector /^test\/cctest\/test_url/: test, whatwg-url - /^test\/addons-napi\//: test, node-api + /^test\/node-api\//: test, node-api + /^test\/js-native-api\//: test, node-api /^test\/async-hooks\//: test, async_hooks /^test\/report\//: test, report /^test\/fixtures\/es-module/: test, esm /^test\/es-module\//: test, esm + /^test\/fixtures\/wpt\/streams//: test, web streams /^test\//: test diff --git a/.github/workflows/authors.yml b/.github/workflows/authors.yml index 75fec53a549..ee5e814ce76 100644 --- a/.github/workflows/authors.yml +++ b/.github/workflows/authors.yml @@ -6,17 +6,22 @@ on: workflow_dispatch: +permissions: + contents: read + jobs: authors_update: if: github.repository == 'nodejs/node' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: '0' # This is required to actually get all the authors persist-credentials: false - - run: tools/update-authors.js # Run the AUTHORS tool - - uses: gr2m/create-or-update-pull-request-action@v1 # Create a PR or update the Action's existing PR + - run: tools/update-authors.mjs # Run the AUTHORS tool + - uses: gr2m/create-or-update-pull-request-action@dc1726cbf4dd3ce766af4ec29cfb660e0125e8ee + # Creates a PR or update the Action's existing PR, or + # no-op if the base branch is already up-to-date. env: GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }} with: @@ -24,7 +29,7 @@ jobs: body: > Here are some new additions to the AUTHORS file. This is an automatically generated PR by the - `authors.yml` GitHub Action, which runs `tools/update-authors.js`. + `authors.yml` GitHub Action, which runs `tools/update-authors.mjs`. branch: actions/authors-update # Custom branch *just* for this Action. commit-message: 'meta: update AUTHORS' labels: meta diff --git a/.github/workflows/auto-start-ci.yml b/.github/workflows/auto-start-ci.yml index 2416561ab7e..98f562fd00b 100644 --- a/.github/workflows/auto-start-ci.yml +++ b/.github/workflows/auto-start-ci.yml @@ -13,8 +13,13 @@ concurrency: ${{ github.workflow }} env: NODE_VERSION: lts/* +permissions: + contents: read + jobs: get-prs-for-ci: + permissions: + pull-requests: read if: github.repository == 'nodejs/node' runs-on: ubuntu-latest outputs: @@ -32,16 +37,19 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} start-ci: + permissions: + contents: read + pull-requests: write needs: get-prs-for-ci if: needs.get-prs-for-ci.outputs.numbers != '' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Install Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} diff --git a/.github/workflows/build-tarball.yml b/.github/workflows/build-tarball.yml index 38a8922c093..0f0da5f0cdb 100644 --- a/.github/workflows/build-tarball.yml +++ b/.github/workflows/build-tarball.yml @@ -12,7 +12,6 @@ on: - '!.github/workflows/build-tarball.yml' push: branches: - - master - main - v[0-9]+.x-staging - v[0-9]+.x @@ -29,19 +28,22 @@ concurrency: cancel-in-progress: true env: - PYTHON_VERSION: '3.10' - FLAKY_TESTS: dontcare + PYTHON_VERSION: '3.11' + FLAKY_TESTS: keep_retrying + +permissions: + contents: read jobs: build-tarball: - if: github.event.pull_request.draft == false + if: github.event.pull_request.draft == false && false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information @@ -55,7 +57,7 @@ jobs: mkdir tarballs mv *.tar.gz tarballs - name: Upload tarball artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: tarballs path: tarballs @@ -63,17 +65,17 @@ jobs: needs: build-tarball runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information run: npx envinfo - name: Download tarball - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: tarballs path: tarballs @@ -92,4 +94,4 @@ jobs: - name: Test run: | cd $TAR_DIR - make run-ci -j2 V=1 TEST_CI_ARGS="-p dots" + make run-ci -j2 V=1 TEST_CI_ARGS="-p dots --measure-flakiness 9" diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 2312d10d33f..6fc7935bdc1 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -9,7 +9,6 @@ on: types: [opened, synchronize, reopened, ready_for_review] push: branches: - - master - main - canary - v[0-9]+.x-staging @@ -24,19 +23,22 @@ concurrency: cancel-in-progress: true env: - PYTHON_VERSION: '3.10' - FLAKY_TESTS: dontcare + PYTHON_VERSION: '3.11' + FLAKY_TESTS: keep_retrying + +permissions: + contents: read jobs: build-windows: - if: github.event.pull_request.draft == false + if: github.event.pull_request.draft == false && false runs-on: windows-2019 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Install deps diff --git a/.github/workflows/close-stale-feature-requests.yml b/.github/workflows/close-stale-feature-requests.yml index 0b482ed8ae0..834c4c84c28 100644 --- a/.github/workflows/close-stale-feature-requests.yml +++ b/.github/workflows/close-stale-feature-requests.yml @@ -1,12 +1,9 @@ name: Close stale feature requests on: workflow_dispatch: - inputs: - daysBeforeStale: - description: Idle number of days before marking feature requests stale - required: true - default: 906 - type: number + schedule: + # Run every day at 1:00 AM UTC. + - cron: 0 1 * * * # yamllint disable rule:empty-lines env: @@ -31,15 +28,21 @@ env: [feature request management document](https://github.com/nodejs/node/blob/HEAD/doc/contributing/feature-request-management.md). # yamllint enable +permissions: + contents: read + jobs: stale: + permissions: + issues: write # for actions/stale to close stale issues + pull-requests: write # for actions/stale to close stale PRs if: github.repository == 'nodejs/node' runs-on: ubuntu-latest steps: - uses: actions/stale@v4 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - days-before-stale: ${{ github.event.inputs.daysBeforeStale }} + days-before-stale: 180 days-before-close: 30 stale-issue-label: stale close-issue-message: ${{ env.CLOSE_MESSAGE }} diff --git a/.github/workflows/close-stalled.yml b/.github/workflows/close-stalled.yml index 347b22bd70c..509d79056f9 100644 --- a/.github/workflows/close-stalled.yml +++ b/.github/workflows/close-stalled.yml @@ -9,8 +9,14 @@ env: is still relevant, or to ping the collaborator who labelled it stalled if you have any questions. +permissions: + contents: read + jobs: stale: + permissions: + issues: write # for actions/stale to close stale issues + pull-requests: write # for actions/stale to close stale PRs if: github.repository == 'nodejs/node' runs-on: ubuntu-latest steps: diff --git a/.github/workflows/comment-labeled.yml b/.github/workflows/comment-labeled.yml index 5c529000a63..5f59a48bb5a 100644 --- a/.github/workflows/comment-labeled.yml +++ b/.github/workflows/comment-labeled.yml @@ -11,8 +11,14 @@ env: If it should remain open, please leave a comment explaining why it should remain open. FAST_TRACK_MESSAGE: Fast-track has been requested by @${{ github.actor }}. Please 👍 to approve. +permissions: + contents: read + jobs: stale-comment: + permissions: + issues: write + pull-requests: write if: github.repository == 'nodejs/node' && github.event.label.name == 'stalled' runs-on: ubuntu-latest steps: @@ -23,6 +29,8 @@ jobs: run: gh issue comment "$NUMBER" --repo ${{ github.repository }} --body "$STALE_MESSAGE" fast-track: + permissions: + pull-requests: write if: github.repository == 'nodejs/node' && github.event_name == 'pull_request_target' && github.event.label.name == 'fast-track' runs-on: ubuntu-latest steps: diff --git a/.github/workflows/commit-lint.yml b/.github/workflows/commit-lint.yml index d0754d56035..738a034aecb 100644 --- a/.github/workflows/commit-lint.yml +++ b/.github/workflows/commit-lint.yml @@ -5,6 +5,9 @@ on: [pull_request] env: NODE_VERSION: lts/* +permissions: + contents: read + jobs: lint-commit-message: runs-on: ubuntu-latest @@ -14,13 +17,13 @@ jobs: run: | echo "::set-output name=plusOne::$((${{ github.event.pull_request.commits }} + 1))" echo "::set-output name=minusOne::$((${{ github.event.pull_request.commits }} - 1))" - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: ${{ steps.nb-of-commits.outputs.plusOne }} persist-credentials: false - run: git reset HEAD^2 - name: Install Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} - name: Validate commit message diff --git a/.github/workflows/commit-queue.yml b/.github/workflows/commit-queue.yml index bbaf67a0e7e..ac57fbb0e01 100644 --- a/.github/workflows/commit-queue.yml +++ b/.github/workflows/commit-queue.yml @@ -18,8 +18,13 @@ concurrency: ${{ github.workflow }} env: NODE_VERSION: lts/* +permissions: + contents: read + jobs: get_mergeable_prs: + permissions: + pull-requests: read if: github.repository == 'nodejs/node' runs-on: ubuntu-latest outputs: @@ -42,7 +47,7 @@ jobs: if: needs.get_mergeable_prs.outputs.numbers != '' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: # Needs the whole git history for ncu to work # See https://github.com/nodejs/node-core-utils/pull/486 @@ -55,7 +60,7 @@ jobs: # Install dependencies - name: Install Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} - name: Install node-core-utils diff --git a/.github/workflows/coverage-linux.yml b/.github/workflows/coverage-linux.yml index 65004c243f3..640c76c9ddd 100644 --- a/.github/workflows/coverage-linux.yml +++ b/.github/workflows/coverage-linux.yml @@ -11,7 +11,8 @@ on: - .github/** - '!.github/workflows/coverage-linux.yml' push: - branches: [master, main] + branches: + - main paths-ignore: - '**.md' - benchmark/** @@ -25,19 +26,22 @@ concurrency: cancel-in-progress: true env: - PYTHON_VERSION: '3.10' - FLAKY_TESTS: dontcare + PYTHON_VERSION: '3.11' + FLAKY_TESTS: keep_retrying + +permissions: + contents: read jobs: coverage-linux: - if: github.event.pull_request.draft == false + if: github.event.pull_request.draft == false && false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information @@ -49,7 +53,7 @@ jobs: # TODO(bcoe): fix the couple tests that fail with the inspector enabled. # The cause is most likely coverage's use of the inspector. - name: Test - run: NODE_V8_COVERAGE=coverage/tmp make test-cov -j2 V=1 TEST_CI_ARGS="-p dots" || exit 0 + run: NODE_V8_COVERAGE=coverage/tmp make test-cov -j2 V=1 TEST_CI_ARGS="-p dots --measure-flakiness 9" || exit 0 - name: Report JS run: npx c8 report --check-coverage env: @@ -60,6 +64,6 @@ jobs: - name: Clean tmp run: rm -rf coverage/tmp && rm -rf out - name: Upload - uses: codecov/codecov-action@v1 + uses: codecov/codecov-action@v3 with: directory: ./coverage diff --git a/.github/workflows/coverage-windows.yml b/.github/workflows/coverage-windows.yml index 550b4424e50..b0235744e4e 100644 --- a/.github/workflows/coverage-windows.yml +++ b/.github/workflows/coverage-windows.yml @@ -12,7 +12,8 @@ on: - .github/** - '!.github/workflows/coverage-windows.yml' push: - branches: [master, main] + branches: + - main paths-ignore: - '**.md' - benchmark/** @@ -27,19 +28,22 @@ concurrency: cancel-in-progress: true env: - PYTHON_VERSION: '3.10' - FLAKY_TESTS: dontcare + PYTHON_VERSION: '3.11' + FLAKY_TESTS: keep_retrying + +permissions: + contents: read jobs: coverage-windows: - if: github.event.pull_request.draft == false + if: github.event.pull_request.draft == false && false runs-on: windows-2019 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Install deps @@ -61,6 +65,6 @@ jobs: - name: Clean tmp run: npx rimraf ./coverage/tmp - name: Upload - uses: codecov/codecov-action@v1 + uses: codecov/codecov-action@v3 with: directory: ./coverage diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index 79294ca966d..f14bde4c7fb 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -8,17 +8,20 @@ on: env: NODE_VERSION: lts/* +permissions: + contents: read + jobs: build-lto: runs-on: ubuntu-latest # not working on gcc-8 and gcc-9 see https://github.com/nodejs/node/issues/38570 container: gcc:11 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} - name: Environment Information diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 9bb872f3538..b38c12618ae 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -5,7 +5,6 @@ on: types: [opened, synchronize, reopened, ready_for_review] push: branches: - - master - main - v[0-9]+.x-staging - v[0-9]+.x @@ -17,25 +16,28 @@ concurrency: env: NODE_VERSION: lts/* +permissions: + contents: read + jobs: build-docs: - if: github.event.pull_request.draft == false + if: github.event.pull_request.draft == false && false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} - name: Environment Information run: npx envinfo - name: Build run: NODE=$(command -v node) make doc-only - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: docs path: out/doc - name: Test - run: NODE=$(command -v node) make test-doc-ci TEST_CI_ARGS="-p actions" + run: NODE=$(command -v node) make test-doc-ci TEST_CI_ARGS="-p actions --measure-flakiness 9" diff --git a/.github/workflows/find-inactive-collaborators.yml b/.github/workflows/find-inactive-collaborators.yml index 21f0f0297d5..8fa954fd0f8 100644 --- a/.github/workflows/find-inactive-collaborators.yml +++ b/.github/workflows/find-inactive-collaborators.yml @@ -10,19 +10,22 @@ on: env: NODE_VERSION: lts/* +permissions: + contents: read + jobs: find: if: github.repository == 'nodejs/node' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 0 persist-credentials: false - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} @@ -30,7 +33,9 @@ jobs: run: tools/find-inactive-collaborators.mjs - name: Open pull request - uses: gr2m/create-or-update-pull-request-action@v1 + uses: gr2m/create-or-update-pull-request-action@dc1726cbf4dd3ce766af4ec29cfb660e0125e8ee + # Creates a PR or update the Action's existing PR, or + # no-op if the base branch is already up-to-date. env: GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }} with: diff --git a/.github/workflows/find-inactive-tsc.yml b/.github/workflows/find-inactive-tsc.yml index 9276de8b6a5..b4af0876fbd 100644 --- a/.github/workflows/find-inactive-tsc.yml +++ b/.github/workflows/find-inactive-tsc.yml @@ -10,6 +10,9 @@ on: env: NODE_VERSION: lts/* +permissions: + contents: read + jobs: find: if: github.repository == 'nodejs/node' @@ -17,13 +20,13 @@ jobs: steps: - name: Checkout the repo - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 persist-credentials: false - name: Clone nodejs/TSC repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 path: .tmp @@ -31,7 +34,7 @@ jobs: repository: nodejs/TSC - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} @@ -39,7 +42,9 @@ jobs: run: tools/find-inactive-tsc.mjs >> $GITHUB_ENV - name: Open pull request - uses: gr2m/create-or-update-pull-request-action@v1 + uses: gr2m/create-or-update-pull-request-action@dc1726cbf4dd3ce766af4ec29cfb660e0125e8ee + # Creates a PR or update the Action's existing PR, or + # no-op if the base branch is already up-to-date. env: GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }} with: diff --git a/.github/workflows/label-flaky-test-issue.yml b/.github/workflows/label-flaky-test-issue.yml new file mode 100644 index 00000000000..490d0826fb5 --- /dev/null +++ b/.github/workflows/label-flaky-test-issue.yml @@ -0,0 +1,50 @@ +name: Label Flaky Test Issues + +on: + issues: + types: [opened, labeled] + +jobs: + label: + if: github.event.label.name == 'flaky-test' + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: Extract labels + id: extract-labels + env: + BODY: ${{ github.event.issue.body }} + run: | + BODY="${BODY//$'\n'/'\n'}" + + declare -A platform2label + + platform2label["AIX"]="aix"; + platform2label["FreeBSD"]="freebsd"; + platform2label["Linux ARM64"]="linux"; + platform2label["Linux ARMv7"]="arm"; + platform2label["Linux PPC64LE"]="ppc"; + platform2label["Linux s390x"]="s390"; + platform2label["Linux x64"]="linux"; + platform2label["macOS ARM64"]="macos"; + platform2label["macOS x64"]="macos"; + platform2label["SmartOS"]="smartos"; + platform2label["Windows"]="windows"; + + # sed is cleaning up the edges + PLATFORMS=$(echo $BODY | sed 's/^.*Platform\\n\\n//' | sed 's/\(, Other\)\?\\n\\n.*$//') 2> /dev/null + readarray -d , -t list <<< "$PLATFORMS" + labels= + for row in "${list[@]}"; do \ + platform=$(echo $row | xargs); \ + labels="${labels}${platform2label[$platform]},"; \ + done; + + echo "::set-output name=LABELS::${labels::-1}" + + - name: Add labels + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NUMBER: ${{ github.event.issue.number }} + run: gh issue edit "$NUMBER" --repo ${{ github.repository }} --add-label "${{ steps.extract-labels.outputs.LABELS }}" diff --git a/.github/workflows/label-pr.yml b/.github/workflows/label-pr.yml index 58e9b226dab..922a9359f5e 100644 --- a/.github/workflows/label-pr.yml +++ b/.github/workflows/label-pr.yml @@ -4,6 +4,9 @@ on: pull_request_target: types: [opened] +permissions: + contents: read + jobs: label: runs-on: ubuntu-latest diff --git a/.github/workflows/license-builder.yml b/.github/workflows/license-builder.yml index 6ccb3b2f743..a58e0bf8bbb 100644 --- a/.github/workflows/license-builder.yml +++ b/.github/workflows/license-builder.yml @@ -6,16 +6,24 @@ on: - cron: 0 0 * * 1 workflow_dispatch: +permissions: + contents: read + jobs: update_license: + permissions: + contents: write # for gr2m/create-or-update-pull-request-action to push local changes + pull-requests: write # for gr2m/create-or-update-pull-request-action to create a PR if: github.repository == 'nodejs/node' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - run: ./tools/license-builder.sh # Run the license builder tool - - uses: gr2m/create-or-update-pull-request-action@v1.x # Create a PR or update the Action's existing PR + - uses: gr2m/create-or-update-pull-request-action@dc1726cbf4dd3ce766af4ec29cfb660e0125e8ee + # Creates a PR or update the Action's existing PR, or + # no-op if the base branch is already up-to-date. env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index b8bc5ecb92e..65895c786ad 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -5,7 +5,6 @@ on: types: [opened, synchronize, reopened, ready_for_review] push: branches: - - master - main - v[0-9]+.x-staging - v[0-9]+.x @@ -15,19 +14,22 @@ concurrency: cancel-in-progress: true env: - PYTHON_VERSION: '3.10' + PYTHON_VERSION: '3.11' NODE_VERSION: lts/* +permissions: + contents: read + jobs: lint-addon-docs: if: github.event.pull_request.draft == false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} - name: Environment Information @@ -38,65 +40,89 @@ jobs: if: github.event.pull_request.draft == false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information run: npx envinfo - name: Lint C/C++ files run: make lint-cpp - lint-md: - if: github.event.pull_request.draft == false + format-cpp: + if: ${{ github.event.pull_request && github.event.pull_request.draft == false && github.base_ref == github.event.repository.default_branch }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: + fetch-depth: 0 persist-credentials: false - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} + - name: Set up Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@v3 + with: + python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information run: npx envinfo - - name: Get release version numbers - if: ${{ github.event.pull_request && github.event.pull_request.base.ref == github.event.pull_request.base.repo.default_branch }} - id: get-released-versions - run: ./tools/lint-md/list-released-versions-from-changelogs.mjs - - name: Lint docs + - name: Format C/C++ files run: | - echo "::add-matcher::.github/workflows/remark-lint-problem-matcher.json" - NODE=$(command -v node) make lint-md - env: - NODE_RELEASED_VERSIONS: ${{ steps.get-released-versions.outputs.NODE_RELEASED_VERSIONS }} - - lint-js: + make format-cpp-build + # The `make format-cpp` error code is intentionally ignored here + # because it is irrelevant. We already check if the formatter produced + # a diff in the next line. + # Refs: https://github.com/nodejs/node/pull/42764 + CLANG_FORMAT_START="$(git merge-base HEAD refs/remotes/origin/$GITHUB_BASE_REF)" \ + make format-cpp || true + git --no-pager diff --exit-code && EXIT_CODE="$?" || EXIT_CODE="$?" + if [ "$EXIT_CODE" != "0" ] + then + echo + echo 'ERROR: Please run:' + echo + echo " CLANG_FORMAT_START="$\(git merge-base HEAD ${GITHUB_BASE_REF}\)" make format-cpp" + echo + echo 'to format the commits in your branch.' + exit "$EXIT_CODE" + fi + lint-js-and-md: if: github.event.pull_request.draft == false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} - name: Environment Information run: npx envinfo - name: Lint JavaScript files run: NODE=$(command -v node) make lint-js + - name: Get release version numbers + if: ${{ github.event.pull_request && github.event.pull_request.base.ref == github.event.pull_request.base.repo.default_branch }} + id: get-released-versions + run: ./tools/lint-md/list-released-versions-from-changelogs.mjs + - name: Lint markdown files + run: | + echo "::add-matcher::.github/workflows/remark-lint-problem-matcher.json" + NODE=$(command -v node) make lint-md + env: + NODE_RELEASED_VERSIONS: ${{ steps.get-released-versions.outputs.NODE_RELEASED_VERSIONS }} lint-py: if: github.event.pull_request.draft == false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information @@ -109,11 +135,11 @@ jobs: if: github.event.pull_request.draft == false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Use Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information @@ -127,27 +153,27 @@ jobs: if: github.event.pull_request.draft == false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - run: shellcheck -V - name: Lint Shell scripts - run: tools/lint-sh.js . + run: tools/lint-sh.mjs . lint-codeowners: if: github.event.pull_request.draft == false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - - uses: mszostok/codeowners-validator@v0.6.0 + - uses: mszostok/codeowners-validator@7f3f5e28c6d7b8dfae5731e54ce2272ca384592f with: checks: files,duppatterns lint-pr-url: if: ${{ github.event.pull_request }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 2 persist-credentials: false diff --git a/.github/workflows/notify-force-push.yml b/.github/workflows/notify-force-push.yml index dac2d50ae26..69aacc8524f 100644 --- a/.github/workflows/notify-force-push.yml +++ b/.github/workflows/notify-force-push.yml @@ -1,10 +1,12 @@ on: push: branches: - - master - main name: Notify on Force Push +permissions: + contents: read + jobs: slackNotification: name: Slack Notification @@ -12,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Slack Notification - uses: rtCamp/action-slack-notify@master + uses: rtCamp/action-slack-notify@12e36fc18b0689399306c2e0b3e0f2978b7f1ee7 env: SLACK_COLOR: '#DE512A' SLACK_ICON: https://github.com/nodejs.png?size=48 diff --git a/.github/workflows/test-asan.yml b/.github/workflows/test-asan.yml index 5f2f1c93c3d..5c35918b21e 100644 --- a/.github/workflows/test-asan.yml +++ b/.github/workflows/test-asan.yml @@ -12,7 +12,6 @@ on: - '!.github/workflows/test-asan.yml' push: branches: - - master - main - canary - v[0-9]+.x-staging @@ -30,24 +29,28 @@ concurrency: cancel-in-progress: true env: - PYTHON_VERSION: '3.10' - FLAKY_TESTS: dontcare + ASAN_OPTIONS: intercept_tls_get_addr=0 + PYTHON_VERSION: '3.11' + FLAKY_TESTS: keep_retrying + +permissions: + contents: read jobs: test-asan: - if: github.event.pull_request.draft == false - runs-on: ubuntu-latest + if: github.event.pull_request.draft == false && false + runs-on: ubuntu-20.04 env: CC: clang CXX: clang++ LINK: clang++ CONFIG_FLAGS: --enable-asan steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information @@ -55,4 +58,4 @@ jobs: - name: Build run: make build-ci -j2 V=1 - name: Test - run: make run-ci -j2 V=1 TEST_CI_ARGS="-p actions -t 300" + run: make run-ci -j2 V=1 TEST_CI_ARGS="-p actions -t 300 --measure-flakiness 9" diff --git a/.github/workflows/test-internet.yml b/.github/workflows/test-internet.yml index 9b504980301..ced20cf0814 100644 --- a/.github/workflows/test-internet.yml +++ b/.github/workflows/test-internet.yml @@ -10,7 +10,6 @@ on: paths: [test/internet/**] push: branches: - - master - main - canary - v[0-9]+.x-staging @@ -22,18 +21,22 @@ concurrency: cancel-in-progress: true env: - PYTHON_VERSION: '3.10' - FLAKY_TESTS: dontcare + PYTHON_VERSION: '3.11' + FLAKY_TESTS: keep_retrying + +permissions: + contents: read jobs: test-internet: + if: github.repository == 'nodejs/node' || github.event_name != 'schedule' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information diff --git a/.github/workflows/test-linux.yml b/.github/workflows/test-linux.yml index 22b5e9a35d3..e4e2477b244 100644 --- a/.github/workflows/test-linux.yml +++ b/.github/workflows/test-linux.yml @@ -9,7 +9,6 @@ on: types: [opened, synchronize, reopened, ready_for_review] push: branches: - - master - main - canary - v[0-9]+.x-staging @@ -24,19 +23,22 @@ concurrency: cancel-in-progress: true env: - PYTHON_VERSION: '3.10' - FLAKY_TESTS: dontcare + PYTHON_VERSION: '3.11' + FLAKY_TESTS: keep_retrying + +permissions: + contents: read jobs: test-linux: - if: github.event.pull_request.draft == false + if: github.event.pull_request.draft == false && false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information @@ -44,4 +46,4 @@ jobs: - name: Build run: make build-ci -j2 V=1 CONFIG_FLAGS="--error-on-warn" - name: Test - run: make run-ci -j2 V=1 TEST_CI_ARGS="-p actions" + run: make run-ci -j2 V=1 TEST_CI_ARGS="-p actions --measure-flakiness 9" diff --git a/.github/workflows/test-macos.yml b/.github/workflows/test-macos.yml index 40885bd9e65..e90f3bbd6b8 100644 --- a/.github/workflows/test-macos.yml +++ b/.github/workflows/test-macos.yml @@ -12,7 +12,6 @@ on: - '!.github/workflows/test-macos.yml' push: branches: - - master - main - canary - v[0-9]+.x-staging @@ -30,19 +29,22 @@ concurrency: cancel-in-progress: true env: - PYTHON_VERSION: '3.10' - FLAKY_TESTS: dontcare + PYTHON_VERSION: '3.11' + FLAKY_TESTS: keep_retrying + +permissions: + contents: read jobs: test-macOS: - if: github.event.pull_request.draft == false + if: github.event.pull_request.draft == false && false runs-on: macos-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information @@ -58,4 +60,4 @@ jobs: - name: Build run: make build-ci -j2 V=1 CONFIG_FLAGS="--error-on-warn" - name: Test - run: make run-ci -j2 V=1 TEST_CI_ARGS="-p actions" + run: make run-ci -j2 V=1 TEST_CI_ARGS="-p actions --measure-flakiness 9" diff --git a/.github/workflows/timezone-update.yml b/.github/workflows/timezone-update.yml new file mode 100644 index 00000000000..27cbfd2946a --- /dev/null +++ b/.github/workflows/timezone-update.yml @@ -0,0 +1,61 @@ +name: Timezone update +on: + schedule: + # Run once a week at 00:05 AM UTC on Sunday. + - cron: 5 0 * * 0 + + workflow_dispatch: + +permissions: + contents: read + +jobs: + timezone_update: + permissions: + contents: write # to push local changes (gr2m/create-or-update-pull-request-action) + pull-requests: write # to create a PR (gr2m/create-or-update-pull-request-action) + + if: github.repository == 'nodejs/node' + runs-on: ubuntu-latest + + steps: + - name: Checkout nodejs/node + uses: actions/checkout@v3 + with: + persist-credentials: false + + - name: Checkout unicode-org/icu-data + uses: actions/checkout@v3 + with: + path: icu-data + persist-credentials: false + repository: unicode-org/icu-data + + - name: Record new version + run: echo "new_version=$(ls icu-data/tzdata/icunew | tail -1)" >> $GITHUB_ENV + + - run: ./tools/update-timezone.mjs + + - name: Update the expected timezone version in test + run: echo "${{ env.new_version }}" > test/fixtures/tz-version.txt + + - name: Open Pull Request + uses: gr2m/create-or-update-pull-request-action@dc1726cbf4dd3ce766af4ec29cfb660e0125e8ee # Create a PR or update the Action's existing PR + env: + GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }} + with: + author: Node.js GitHub Bot + body: | + This PR was generated by tools/timezone-update.yml. + + Updates the ICU files as per the instructions present in https://github.com/nodejs/node/blob/main/doc/contributing/maintaining-icu.md#time-zone-data + + To test, build node off this branch & log the version of tz using + ```js + console.log(process.versions.tz) + ``` + branch: actions/timezone-update + commit-message: 'deps: update timezone to ${{ env.new_version }}' + labels: dependencies + title: 'deps: update timezone to ${{ env.new_version }}' + reviewers: \@nodejs/i18n-api diff --git a/.github/workflows/tools.yml b/.github/workflows/tools.yml index a9ae1372e42..ee3c2bd1c0b 100644 --- a/.github/workflows/tools.yml +++ b/.github/workflows/tools.yml @@ -6,6 +6,9 @@ on: workflow_dispatch: +permissions: + contents: read + jobs: tools-update: if: github.repository == 'nodejs/node' @@ -58,11 +61,13 @@ jobs: npm install --ignore-scripts fi steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - run: ${{ matrix.run }} - - uses: gr2m/create-or-update-pull-request-action@v1 # Create a PR or update the Action's existing PR + - uses: gr2m/create-or-update-pull-request-action@dc1726cbf4dd3ce766af4ec29cfb660e0125e8ee + # Creates a PR or update the Action's existing PR, or + # no-op if the base branch is already up-to-date. env: GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }} with: diff --git a/.gitignore b/.gitignore index bc986b3c4c0..6e58d14c32a 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ !.github !.gitignore !.gitkeep +!.gitpod.yml !.mailmap !.nycrc !.yamllint.yaml diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 00000000000..e01e98fab5a --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,11 @@ +# Ref: https://github.com/gitpod-io/gitpod/issues/6283#issuecomment-1001043454 +tasks: + - init: ./configure && timeout 50m make -j16 || true + +# Ref: https://www.gitpod.io/docs/prebuilds#github-specific-configuration +github: + prebuilds: + # enable for pull requests coming from this repo (defaults to true) + pullRequests: false + # add a check to pull requests (defaults to true) + addCheck: false diff --git a/.mailmap b/.mailmap index ea89c8e96c1..4a42b718f44 100644 --- a/.mailmap +++ b/.mailmap @@ -50,6 +50,7 @@ Ashley Maceli Ashok Suthar Ashutosh Kumar Singh Atsuo Fukaya +Austin Kelleher Azard <330815461@qq.com> Ben Lugavere Ben Noordhuis @@ -66,7 +67,8 @@ Benjamin Waters Bert Belder Bert Belder Bert Belder -Beth Griggs +Beth Griggs +Beth Griggs Bidisha Pyne bl-ue <54780737+bl-ue@users.noreply.github.com> Brad Decker @@ -82,11 +84,14 @@ Brian White Caleb Boyd Calvin Metcalf Calvin Metcalf +Camillo Bruni Caralyn Reisle Charles Charles Rudolph Chen Gang Chen Gang <13298548+MoonBall@users.noreply.github.com> +Chengzhong Wu +Chengzhong Wu Chew Choon Keat Chris Andrews Chris Johnson @@ -132,6 +137,7 @@ David Mark Clements David Siegel DC Deepjyoti Mondal +dnlup Domenic Denicola Domenic Denicola Doug Wade @@ -196,8 +202,6 @@ Hassaan Pasha Hendrik Schwalm Henry Chin Herbert Vojčík -himself65 -himself65 Hitesh Kanwathirtha Icer Liang Igor Savin @@ -219,9 +223,10 @@ James Beavers James Bromwell <943160+thw0rted@users.noreply.github.com> James Hartig James Ide +James Ide James M Snell James Nimlos -James Sumners +James Sumners Jan Krems Jem Bezooyen Jem Bezooyen @@ -239,7 +244,7 @@ Jesús Leganés-Combarro 'piranna Jimb Esser Jithil P Ponnan Jithil P Ponnan -Jochen Eisinger +Jochen Eisinger Joe Shaw Johan Bergström Johan Dahlberg @@ -283,6 +288,8 @@ Ke Ding Keith M Wesolowski Kelsey Breseman Kevin Millikin +Keyhan Vakil <60900335+airtable-keyhanvakil@users.noreply.github.com> +Keyhan Vakil Khaidi Chu Khaidi Chu Kimberly Wilber @@ -298,6 +305,7 @@ Lakshmi Swetha Gopireddy Lasse R.H. Nielsen Leeseean Chiu +LiviaMedeiros <74449973+LiviaMedeiros@users.noreply.github.com> Lucas Pardue Luke Bayes Lydia Kats @@ -356,6 +364,9 @@ Mitar Milutinovic Mithun Sasidharan Mohammed Keyvanzadeh Mohammed Keyvanzadeh <62040526+VoltrexMaster@users.noreply.github.com> +Morgan Roderick +Morgan Roderick <20321+mroderick@users.noreply.github.com> +MURAKAMI Masahiko Myles Borins Myles Borins Myles Borins @@ -363,6 +374,7 @@ Nam Nguyen Nebu Pookins Netto Farah Nicholas Kinsey +Nick Sia <31839263+nicksia-vgw@users.noreply.github.com> Nick Soggin Nigel Kibodeaux Nikola Glavina @@ -371,10 +383,17 @@ Nils Kuhnhenn Nitzan Uziely Nitzan Uziely Noah Rose Ledesma +npm team +npm team +npm team +npm team Oliver Chang Oluwaseun Omoyajowo +OneNail Onne Gorter Oscar Martinez +Paolo Insogna +Paolo Insogna Paul Graham Paul Querna Pedro Lima @@ -414,6 +433,8 @@ Ron Korving Ruben Bridgewater Ruben Bridgewater Russell Dempsey +Ruy Adorno +Ruy Adorno Ryan Dahl Ryan Emery Ryan Mahan @@ -438,6 +459,7 @@ Saúl Ibarra Corretgé Scott Blomquist Segu Riluvan Sergey Kryzhanovsky +Sergey Petushkov Sergey Zelenov Shannen Saez Shaopeng Zhang @@ -477,6 +499,7 @@ Tarun Batra Taylor Woll Ted Young Teppei Sato +theanarkh <2923878201@qq.com> Theotime Poisseau Thomas Hunter II Thomas Lee @@ -527,6 +550,7 @@ Vladimir de Turckheim vsemozhetbyt Vyacheslav Egorov Wang Xinyong +Wayne Zhang Wei-Wei Wu Weijia Wang Weijia Wang <381152119@qq.com> @@ -538,6 +562,7 @@ Wyatt Preul Xavier J Ortiz xiaoyu <306766053@qq.com> Xu Meng +Xuguang Mei Yael Hermon Yang Guo Yash Ladha <18033231+yashLadha@users.noreply.github.com> @@ -556,6 +581,8 @@ Yuta Hiroto Zach Bjornson Zachary Scott Zachary Vacura +Zeyu "Alex" Yang +Zeyu "Alex" Yang Zoran Tomicic Сковорода Никита Андреевич 隋鑫磊 diff --git a/AUTHORS b/AUTHORS index f213b402b5d..f5184d00a06 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1048,7 +1048,7 @@ Joran Siu Vitaly Tomilov Ratikesh Misra Alex Perkins -Beth Griggs +Beth Griggs Joe Esposito Erin Spiceland Ravindra Barthwal @@ -1183,7 +1183,7 @@ ikasumi_wt Yoshiya Hinosawa Syuhei Kobayashi YutamaKotaro -MURAKAMI Masahiko +MURAKAMI Masahiko Thomas Watson Daijiro Yamada Kelvin Jin @@ -1784,7 +1784,7 @@ Christopher Sidebottom Edward Andrew Robinson Shakeel Mohamed Tobias Kieslich -Ruy Adorno +Ruy Adorno Stefania Sharp Pawel Golda Steven Scott @@ -2310,12 +2310,12 @@ Dzmitry_Prudnikau Ian McKellar Jennifer Bland Kyle Fuller -Camillo Bruni +Camillo Bruni Yongsheng Zhang Neeraj Laad Scott Van Gilder Yaniv Friedensohn -Lucas Woo +Chengzhong Wu Troels Liebe Bentsen pranshuchittora lakamsani @@ -2686,7 +2686,7 @@ Alexander Sattelmaier Avi ד Thomas Aymen Naghmouchi -himself65 +Zeyu "Alex" Yang Patrick Gansterer Nicolas Moteau Anthony Tuininga @@ -2694,7 +2694,7 @@ Yann Hamon Ben Swinburne Colin Prince TJKoury -dnlup +dnlup Hang Jiang Vladislav Kaminsky Daiki Ihara @@ -3260,7 +3260,6 @@ Siddharth Cactysman David Brownman Michael Rommel -Chengzhong Wu Andres Jayden Seric divlo @@ -3288,7 +3287,7 @@ pengjie <37610029@qq.com> Philip julianjany <54538266+julianjany@users.noreply.github.com> bl-ue -npm-robot +npm team Shaun Keys Simone Busoli Derevianchenko Maksym <32910350+maks-white@users.noreply.github.com> @@ -3414,7 +3413,7 @@ Tony Gorez ofirbarak Bar Admoni ofir -Xuguang Mei +Xuguang Mei Elad Nava Balakrishna Avulapati Aaron Xie @@ -3430,9 +3429,8 @@ Derek Wolpert <48101033+derekwolpert@users.noreply.github.com> wbt Alexandru Comanescu madflow -Austin Kelleher +Austin Kelleher apeltop -Livia Medeiros <74449973+LiviaMedeiros@users.noreply.github.com> Nikolaos Papaspyrou Matt Probert <1196252+mattpr@users.noreply.github.com> Roch Devost @@ -3443,6 +3441,92 @@ Damjan Cvetko Randall Leeds Khoo Hao Yit <40757009+KhooHaoYit@users.noreply.github.com> Aroyan <43630681+aroyan@users.noreply.github.com> -theanarkh <2923878201@qq.com> +theanarkh +Vladimir Morozov +Anupama Codippily <47591753+AnupamaCodippily@users.noreply.github.com> +Greg Poole +Eliaz Bobadilla +Daeyeon Jeong +Daniel Roe +Niyas Sait +K.C.Ashish Kumar <703559+kcak11@users.noreply.github.com> +Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> +Liviu Ionescu +HE Shi-Jun +Yagiz Nizipli +liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> +Sergey Nazaryev +William Marlow +Keyhan Vakil +Feng Yu +pupilTong +rikapo +Meek Simbule <55823259+meekdenzo@users.noreply.github.com> +Michael Ficarra +hiroki osame +Eugene Chapko +Sergey Petushkov +Caleb Everett +JialuZhang-intel +Moshe Atlow +rubikscraft +James Scott-Brown +supriyo-biswas +Giacomo Gregoletto +italo jose +Kazuma Ohashi +Douglas Wilson <67512+dougwilson@users.noreply.github.com> +0xSanyam <108138884+0xSanyam@users.noreply.github.com> +Alena Khineika +Basit <1305718+mabaasit@users.noreply.github.com> +Kid <44045911+kidonng@users.noreply.github.com> +Jeremy Rose +Facundo Tuesca +Dan Castillo +Varun Sharma +txxnano +Jannis R +John Gee +Hrishikesh Kadam +KrayzeeKev +Airing +jiahao.si +Rhys +Mark S. Miller +Jianru Lin +Lenvin Gonsalves <41874033+98lenvi@users.noreply.github.com> +Andreu Botella +shhh7612 <82669765+shhh7612@users.noreply.github.com> +Dominic Saadi +ywave620 <60539365+ywave620@users.noreply.github.com> +NicoNekoru <66227158+NicoNekoru@users.noreply.github.com> +SADIK KUZU +flakey5 <73616808+flakey5@users.noreply.github.com> +Saurabh Daware +BuShe +Nick Sia +Basit Chonka +Jeremiah Gowdy +Matthew Peveler +Wing +Hana +Jeff Dickey <216188+jdxcode@users.noreply.github.com> +Matías Zúñiga +metonym +Brian Evans <53117772+mrbrianevans@users.noreply.github.com> +falsandtru +东灯 <43312495+Lampese@users.noreply.github.com> +Fabian Meyer <3982806+meyfa@users.noreply.github.com> +StefanStojanovic +Claudio Wunder +Shrujal Shah +Taha-Chaudhry <46199675+Taha-Chaudhry@users.noreply.github.com> +smitley +Brian Muenzenmeyer +sidwebworks +Connor Burton +chexiongsheng +Lucas Santos +“Pooja -# Generated by tools/update-authors.js +# Generated by tools/update-authors.mjs diff --git a/BUILDING.md b/BUILDING.md index d6ca30104b7..8ddd996e9fc 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -37,7 +37,7 @@ file a new issue. * [Option 1: Manual install](#option-1-manual-install) * [Option 2: Automated install with Boxstarter](#option-2-automated-install-with-boxstarter) * [Building Node.js](#building-nodejs-2) - * [Android/Android-based devices (e.g. Firefox OS)](#androidandroid-based-devices-eg-firefox-os) + * [Android](#android) * [`Intl` (ECMA-402) support](#intl-ecma-402-support) * [Build with full ICU support (all locales supported by ICU)](#build-with-full-icu-support-all-locales-supported-by-icu) * [Unix/macOS](#unixmacos) @@ -52,6 +52,7 @@ file a new issue. * [Build with a specific ICU](#build-with-a-specific-icu) * [Unix/macOS](#unixmacos-3) * [Windows](#windows-4) +* [Configuring OpenSSL config appname](#configure-openssl-appname) * [Building Node.js with FIPS-compliant OpenSSL](#building-nodejs-with-fips-compliant-openssl) * [Building Node.js with external core modules](#building-nodejs-with-external-core-modules) * [Unix/macOS](#unixmacos-4) @@ -236,7 +237,7 @@ The Node.js project supports Python >= 3 for building and testing. * `gcc` and `g++` >= 8.3 or newer * GNU Make 3.81 or newer -* Python 3.6, 3.7, 3.8, 3.9, or 3.10 (see note above) +* Python >=3.6 <=3.11 (see note above) * For test coverage, your Python installation must include pip. Installation via Linux package manager can be achieved with: @@ -252,7 +253,7 @@ FreeBSD and OpenBSD users may also need to install `libexecinfo`. #### macOS prerequisites * Xcode Command Line Tools >= 11 for macOS -* Python 3.6, 3.7, 3.8, 3.9, or 3.10 (see note above) +* Python >=3.6 <=3.11 (see note above) * For test coverage, your Python installation must include pip. macOS users can install the `Xcode Command Line Tools` by running @@ -336,13 +337,14 @@ You can execute the entire suite of tests for a given subsystem by providing the name of a subsystem: ```text -$ tools/test.py -J child-process +$ tools/test.py child-process ``` -You can also execute the tests in a tests directory (such as `test/message`): +You can also execute the tests in a test suite directory +(such as `test/message`): ```text -$ tools/test.py -J test/message +$ tools/test.py test/message ``` If you want to check the other options, please refer to the help by using @@ -550,7 +552,7 @@ When modifying only the JS layer in `lib`, it is possible to externally load it without modifying the executable: ```console -$ ./configure --node-builtin-modules-path $(pwd) +$ ./configure --node-builtin-modules-path "$(pwd)" ``` The resulting binary won't include any JS files and will try to load them from @@ -575,11 +577,11 @@ to run it again before invoking `make -j4`. ##### Option 1: Manual install -* [Python 3.10](https://www.microsoft.com/en-us/p/python-310/9pjpw5ldxlz5) +* [Python 3.11](https://apps.microsoft.com/store/detail/python-311/9NRWMJP3717K) * The "Desktop development with C++" workload from - [Visual Studio 2019](https://visualstudio.microsoft.com/downloads/) or + [Visual Studio 2019](https://visualstudio.microsoft.com/vs/older-downloads/#visual-studio-2019-and-other-products) or the "C++ build tools" workload from the - [Build Tools](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019), + [Build Tools](https://aka.ms/vs/16/release/vs_buildtools.exe), with the default optional components * Basic Unix tools required for some tests, [Git for Windows](https://git-scm.com/download/win) includes Git Bash @@ -619,7 +621,7 @@ packages: * [NetWide Assembler](https://chocolatey.org/packages/nasm) To install Node.js prerequisites using -[Boxstarter WebLauncher](https://boxstarter.org/WebLauncher), open +[Boxstarter WebLauncher](https://boxstarter.org/weblauncher), open with Internet Explorer or Edge browser on the target machine. @@ -631,6 +633,7 @@ Set-ExecutionPolicy Unrestricted -Force iex ((New-Object System.Net.WebClient).DownloadString('https://boxstarter.org/bootstrapper.ps1')) get-boxstarter -Force Install-BoxstarterPackage https://raw.githubusercontent.com/nodejs/node/HEAD/tools/bootstrap/windows_boxstarter -DisableReboots +refreshenv ``` The entire installation using Boxstarter will take up approximately 10 GB of @@ -657,7 +660,7 @@ To test if Node.js was built correctly: > Release\node -e "console.log('Hello from Node.js', process.version)" ``` -### Android/Android-based devices (e.g. Firefox OS) +### Android Android is not a supported platform. Patches to improve the Android build are welcome. There is no testing on Android in the current continuous integration @@ -665,14 +668,17 @@ environment. The participation of people dedicated and determined to improve Android building, testing, and support is encouraged. Be sure you have downloaded and extracted -[Android NDK](https://developer.android.com/tools/sdk/ndk/index.html) before in +[Android NDK](https://developer.android.com/ndk) before in a folder. Then run: ```console -$ ./android-configure /path/to/your/android-ndk -$ make +$ source ./android-configure /path/to/your/android-ndk target_arch android_sdk_version +$ make -j4 ``` +The Android SDK version should be at least 24 (Android 7.0) and the target +architecture supports \[arm, arm64/aarch64, x86, x86\_64]. + ## `Intl` (ECMA-402) support [Intl](https://github.com/nodejs/node/blob/HEAD/doc/api/intl.md) support is @@ -779,6 +785,19 @@ as `deps/icu` (You'll have: `deps/icu/source/...`) > .\vcbuild full-icu ``` +### Configure OpenSSL appname + +Node.js can use an OpenSSL configuration file by specifying the environment +variable `OPENSSL_CONF`, or using the command line option `--openssl-conf`, and +if none of those are specified will default to reading the default OpenSSL +configuration file `openssl.cnf`. Node.js will only read a section that is by +default named `nodejs_conf`, but this name can be overridden using the following +configure option: + +```console +$ ./configure --openssl-conf-name= +``` + ## Building Node.js with FIPS-compliant OpenSSL The current version of Node.js supports FIPS when statically and diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c2fb8940c7..8ae0355bf81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,14 +26,19 @@ release. - `); + } else { + tableHeader = /`); + } else { + tableHeader = new RegExp(``); + } + assert.match(mainChangelog, tableHeader); + // Check the table contains a link to the release in the appropriate CHANGELOG_V*.md file. + const linkToVersion = new RegExp(`${versionForRegex}
`); + assert.match(mainChangelog, linkToVersion); +} diff --git a/test/parallel/test-repl-history-navigation.js b/test/parallel/test-repl-history-navigation.js index 29cb7816f0f..39ccc3732c3 100644 --- a/test/parallel/test-repl-history-navigation.js +++ b/test/parallel/test-repl-history-navigation.js @@ -74,6 +74,7 @@ const tests = [ env: { NODE_REPL_HISTORY: defaultHistoryPath }, test: [ 'let ab = 45', ENTER, '555 + 909', ENTER, + 'let autocompleteMe = 123', ENTER, '{key : {key2 :[] }}', ENTER, 'Array(100).fill(1).map((e, i) => i ** i)', LEFT, LEFT, DELETE, '2', ENTER], @@ -82,7 +83,7 @@ const tests = [ }, { env: { NODE_REPL_HISTORY: defaultHistoryPath }, - test: [UP, UP, UP, UP, UP, DOWN, DOWN, DOWN, DOWN, DOWN], + test: [UP, UP, UP, UP, UP, UP, DOWN, DOWN, DOWN, DOWN, DOWN, DOWN], expected: [prompt, `${prompt}Array(100).fill(1).map((e, i) => i ** 2)`, prev && '\n// [ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, ' + @@ -92,6 +93,7 @@ const tests = [ ' 2025, 2116, 2209,...', `${prompt}{key : {key2 :[] }}`, prev && '\n// { key: { key2: [] } }', + `${prompt}let autocompleteMe = 123`, `${prompt}555 + 909`, prev && '\n// 1464', `${prompt}let ab = 45`, @@ -99,6 +101,7 @@ const tests = [ `${prompt}let ab = 45`, `${prompt}555 + 909`, prev && '\n// 1464', + `${prompt}let autocompleteMe = 123`, `${prompt}{key : {key2 :[] }}`, prev && '\n// { key: { key2: [] } }', `${prompt}Array(100).fill(1).map((e, i) => i ** 2)`, @@ -128,7 +131,7 @@ const tests = [ preview: false, showEscapeCodes: true, test: [ - '55', UP, UP, UP, UP, UP, UP, ENTER, + '55', UP, UP, UP, UP, UP, UP, UP, ENTER, ], expected: [ '\x1B[1G', '\x1B[0J', prompt, '\x1B[3G', @@ -185,10 +188,10 @@ const tests = [ ENTER, 'veryLongName'.repeat(30), ENTER, - `${'\x1B[90m \x1B[39m'.repeat(235)} fun`, + `${'\x1B[90m \x1B[39m'.repeat(229)} aut`, ESCAPE, ENTER, - `${' '.repeat(236)} fun`, + `${' '.repeat(230)} aut`, ESCAPE, ENTER, ], @@ -236,19 +239,20 @@ const tests = [ prompt, '\x1B[3G', // 1. UP // This exceeds the maximum columns (250): - // Whitespace + prompt + ' // '.length + 'function'.length - // 236 + 2 + 4 + 8 + // Whitespace + prompt + ' // '.length + 'autocompleteMe'.length + // 230 + 2 + 4 + 14 '\x1B[1G', '\x1B[0J', - `${prompt}${' '.repeat(236)} fun`, '\x1B[243G', - ' // ction', '\x1B[243G', - ' // ction', '\x1B[243G', + `${prompt}${' '.repeat(230)} aut`, '\x1B[237G', + ' // ocompleteMe', '\x1B[237G', + '\n// 123', '\x1B[237G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', '\x1B[0K', // 2. UP '\x1B[1G', '\x1B[0J', - `${prompt}${' '.repeat(235)} fun`, '\x1B[242G', - // TODO(BridgeAR): Investigate why the preview is generated twice. - ' // ction', '\x1B[242G', - ' // ction', '\x1B[242G', + `${prompt}${' '.repeat(229)} aut`, '\x1B[236G', + ' // ocompleteMe', '\x1B[236G', + '\n// 123', '\x1B[236G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', // Preview cleanup '\x1B[0K', // 3. UP @@ -326,8 +330,8 @@ const tests = [ skip: !process.features.inspector, checkTotal: true, test: [ - 'fu', - 'n', + 'au', + 't', RIGHT, BACKSPACE, LEFT, @@ -353,74 +357,93 @@ const tests = [ // K = Erase in line; 0 = right; 1 = left; 2 = total expected: [ // 0. - // 'f' - '\x1B[1G', '\x1B[0J', prompt, '\x1B[3G', 'f', + // 'a' + '\x1B[1G', '\x1B[0J', prompt, '\x1B[3G', 'a', // 'u' - 'u', ' // nction', '\x1B[5G', - // 'n' - Cleanup + 'u', ' // tocompleteMe', '\x1B[5G', + '\n// 123', '\x1B[5G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', + // 't' - Cleanup '\x1B[0K', - 'n', ' // ction', '\x1B[6G', + 't', ' // ocompleteMe', '\x1B[6G', + '\n// 123', '\x1B[6G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', // 1. Right. Cleanup '\x1B[0K', - 'ction', + 'ocompleteMe', + '\n// 123', '\x1B[17G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', // 2. Backspace. Refresh - '\x1B[1G', '\x1B[0J', `${prompt}functio`, '\x1B[10G', + '\x1B[1G', '\x1B[0J', `${prompt}autocompleteM`, '\x1B[16G', // Autocomplete and refresh? - ' // n', '\x1B[10G', ' // n', '\x1B[10G', + ' // e', '\x1B[16G', + '\n// 123', '\x1B[16G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', // 3. Left. Cleanup '\x1B[0K', - '\x1B[1D', '\x1B[10G', ' // n', '\x1B[9G', + '\x1B[1D', '\x1B[16G', ' // e', '\x1B[15G', // 4. Left. Cleanup - '\x1B[10G', '\x1B[0K', '\x1B[9G', - '\x1B[1D', '\x1B[10G', ' // n', '\x1B[8G', + '\x1B[16G', '\x1B[0K', '\x1B[15G', + '\x1B[1D', '\x1B[16G', ' // e', '\x1B[14G', // 5. 'A' - Cleanup - '\x1B[10G', '\x1B[0K', '\x1B[8G', + '\x1B[16G', '\x1B[0K', '\x1B[14G', // Refresh - '\x1B[1G', '\x1B[0J', `${prompt}functAio`, '\x1B[9G', + '\x1B[1G', '\x1B[0J', `${prompt}autocompletAeM`, '\x1B[15G', // 6. Backspace. Refresh - '\x1B[1G', '\x1B[0J', `${prompt}functio`, '\x1B[8G', '\x1B[10G', ' // n', - '\x1B[8G', '\x1B[10G', ' // n', - '\x1B[8G', '\x1B[10G', + '\x1B[1G', '\x1B[0J', `${prompt}autocompleteM`, + '\x1B[14G', '\x1B[16G', ' // e', + '\x1B[14G', '\x1B[16G', ' // e', + '\x1B[14G', '\x1B[16G', // 7. Go to end. Cleanup - '\x1B[0K', '\x1B[8G', '\x1B[2C', - 'n', + '\x1B[0K', '\x1B[14G', '\x1B[2C', + 'e', + '\n// 123', '\x1B[17G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', // 8. Backspace. Refresh - '\x1B[1G', '\x1B[0J', `${prompt}functio`, '\x1B[10G', + '\x1B[1G', '\x1B[0J', `${prompt}autocompleteM`, '\x1B[16G', // Autocomplete - ' // n', '\x1B[10G', ' // n', '\x1B[10G', + ' // e', '\x1B[16G', + '\n// 123', '\x1B[16G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', // 9. Word left. Cleanup - '\x1B[0K', '\x1B[7D', '\x1B[10G', ' // n', '\x1B[3G', '\x1B[10G', + '\x1B[0K', '\x1B[13D', '\x1B[16G', ' // e', '\x1B[3G', '\x1B[16G', // 10. Word right. Cleanup - '\x1B[0K', '\x1B[3G', '\x1B[7C', ' // n', '\x1B[10G', + '\x1B[0K', '\x1B[3G', '\x1B[13C', ' // e', '\x1B[16G', + '\n// 123', '\x1B[16G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', // 11. ESCAPE '\x1B[0K', // 12. ENTER '\r\n', - 'Uncaught ReferenceError: functio is not defined\n', + 'Uncaught ReferenceError: autocompleteM is not defined\n', '\x1B[1G', '\x1B[0J', // 13. UP prompt, '\x1B[3G', '\x1B[1G', '\x1B[0J', - `${prompt}functio`, '\x1B[10G', - ' // n', '\x1B[10G', - ' // n', '\x1B[10G', + `${prompt}autocompleteM`, '\x1B[16G', + ' // e', '\x1B[16G', + '\n// 123', '\x1B[16G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', // 14. LEFT - '\x1B[0K', '\x1B[1D', - '\x1B[10G', ' // n', '\x1B[9G', '\x1B[10G', + '\x1B[0K', '\x1B[1D', '\x1B[16G', + ' // e', '\x1B[15G', '\x1B[16G', // 15. ENTER - '\x1B[0K', '\x1B[9G', '\x1B[1C', + '\x1B[0K', '\x1B[15G', '\x1B[1C', '\r\n', - 'Uncaught ReferenceError: functio is not defined\n', + 'Uncaught ReferenceError: autocompleteM is not defined\n', '\x1B[1G', '\x1B[0J', - '> ', '\x1B[3G', + prompt, '\x1B[3G', // 16. UP '\x1B[1G', '\x1B[0J', - '> functio', '\x1B[10G', - ' // n', '\x1B[10G', - ' // n', '\x1B[10G', '\x1B[0K', + `${prompt}autocompleteM`, '\x1B[16G', + ' // e', '\x1B[16G', + '\n// 123', '\x1B[16G', + '\x1B[1A', '\x1B[1B', '\x1B[2K', '\x1B[1A', + '\x1B[0K', // 17. ENTER - 'n', '\r\n', + 'e', '\r\n', + '123\n', '\x1B[1G', '\x1B[0J', - '... ', '\x1B[5G', + prompt, '\x1B[3G', '\r\n', ], clean: true diff --git a/test/parallel/test-repl-preprocess-top-level-await.js b/test/parallel/test-repl-preprocess-top-level-await.js index 51b15e107f5..bdd1c6fe8a4 100644 --- a/test/parallel/test-repl-preprocess-top-level-await.js +++ b/test/parallel/test-repl-preprocess-top-level-await.js @@ -17,25 +17,25 @@ const testCases = [ [ '0', null ], [ 'await 0', - '(async () => { return (await 0) })()' ], + '(async () => { return { value: (await 0) } })()' ], [ `await ${surrogate}`, - `(async () => { return (await ${surrogate}) })()` ], + `(async () => { return { value: (await ${surrogate}) } })()` ], [ 'await 0;', - '(async () => { return (await 0); })()' ], + '(async () => { return { value: (await 0) }; })()' ], [ 'await 0;;;', - '(async () => { return (await 0);;; })()' ], + '(async () => { return { value: (await 0) };;; })()' ], [ `await ${surrogate};`, - `(async () => { return (await ${surrogate}); })()` ], + `(async () => { return { value: (await ${surrogate}) }; })()` ], [ `await ${surrogate};`, - `(async () => { return (await ${surrogate}); })()` ], + `(async () => { return { value: (await ${surrogate}) }; })()` ], [ '(await 0)', - '(async () => { return ((await 0)) })()' ], + '(async () => { return ({ value: (await 0) }) })()' ], [ `(await ${surrogate})`, - `(async () => { return ((await ${surrogate})) })()` ], + `(async () => { return ({ value: (await ${surrogate}) }) })()` ], [ '(await 0);', - '(async () => { return ((await 0)); })()' ], + '(async () => { return ({ value: (await 0) }); })()' ], [ `(await ${surrogate});`, - `(async () => { return ((await ${surrogate})); })()` ], + `(async () => { return ({ value: (await ${surrogate}) }); })()` ], [ 'async function foo() { await 0; }', null ], [ 'async () => await 0', @@ -45,7 +45,7 @@ const testCases = [ [ 'await 0; return 0;', null ], [ `await ${surrogate}; await ${surrogate};`, - `(async () => { await ${surrogate}; return (await ${surrogate}); })()` ], + `(async () => { await ${surrogate}; return { value: (await ${surrogate}) }; })()` ], [ 'var a = await 1', 'var a; (async () => { void (a = await 1) })()' ], [ `var a = await ${surrogate}`, @@ -71,7 +71,7 @@ const testCases = [ ' ([{d}] = [{d: 3}])) })()'], /* eslint-disable no-template-curly-in-string */ [ 'console.log(`${(await { a: 1 }).a}`)', - '(async () => { return (console.log(`${(await { a: 1 }).a}`)) })()' ], + '(async () => { return { value: (console.log(`${(await { a: 1 }).a}`)) } })()' ], /* eslint-enable no-template-curly-in-string */ [ 'await 0; function foo() {}', 'var foo; (async () => { await 0; this.foo = foo; function foo() {} })()' ], @@ -92,15 +92,15 @@ const testCases = [ [ 'let o = await 1, p', 'let o, p; (async () => { void ( (o = await 1), (p=undefined)) })()' ], [ 'await (async () => { let p = await 1; return p; })()', - '(async () => { return (await (async () => ' + - '{ let p = await 1; return p; })()) })()' ], + '(async () => { return { value: (await (async () => ' + + '{ let p = await 1; return p; })()) } })()' ], [ '{ let p = await 1; }', '(async () => { { let p = await 1; } })()' ], [ 'var p = await 1', 'var p; (async () => { void (p = await 1) })()' ], [ 'await (async () => { var p = await 1; return p; })()', - '(async () => { return (await (async () => ' + - '{ var p = await 1; return p; })()) })()' ], + '(async () => { return { value: (await (async () => ' + + '{ var p = await 1; return p; })()) } })()' ], [ '{ var p = await 1; }', 'var p; (async () => { { void (p = await 1); } })()' ], [ 'for await (var i of asyncIterable) { i; }', @@ -140,6 +140,10 @@ const testCases = [ [ 'var x = await foo(); async function foo() { return Promise.resolve(1);}', 'var x; var foo; (async () => { void (x = await foo()); this.foo = foo; ' + 'async function foo() { return Promise.resolve(1);} })()'], + [ '(await x).y', + '(async () => { return { value: ((await x).y) } })()'], + [ 'await (await x).y', + '(async () => { return { value: (await (await x).y) } })()'], ]; for (const [input, expected] of testCases) { diff --git a/test/parallel/test-repl-preview.js b/test/parallel/test-repl-preview.js index 620f41296e9..6eb2a169918 100644 --- a/test/parallel/test-repl-preview.js +++ b/test/parallel/test-repl-preview.js @@ -2,6 +2,7 @@ const common = require('../common'); const assert = require('assert'); +const events = require('events'); const { REPLServer } = require('repl'); const { Stream } = require('stream'); const { inspect } = require('util'); @@ -32,26 +33,16 @@ class REPLStream extends Stream { if (chunkLines.length > 1) { this.lines.push(...chunkLines.slice(1)); } - this.emit('line'); + this.emit('line', this.lines[this.lines.length - 1]); return true; } - wait() { + async wait() { this.lines = ['']; - return new Promise((resolve, reject) => { - const onError = (err) => { - this.removeListener('line', onLine); - reject(err); - }; - const onLine = () => { - if (this.lines[this.lines.length - 1].includes(PROMPT)) { - this.removeListener('error', onError); - this.removeListener('line', onLine); - resolve(this.lines); - } - }; - this.once('error', onError); - this.on('line', onLine); - }); + for await (const [line] of events.on(this, 'line')) { + if (line.includes(PROMPT)) { + return this.lines; + } + } } pause() {} resume() {} diff --git a/test/parallel/test-repl-reverse-search.js b/test/parallel/test-repl-reverse-search.js index 5165dc2820d..2808c953431 100644 --- a/test/parallel/test-repl-reverse-search.js +++ b/test/parallel/test-repl-reverse-search.js @@ -212,9 +212,7 @@ const tests = [ expected: [ '\x1B[1G', '\x1B[0J', prompt, '\x1B[3G', - 'f', 'u', ' // nction', - '\x1B[5G', '\x1B[0K', - '\nbck-i-search: _', '\x1B[1A', '\x1B[5G', + 'f', 'u', '\nbck-i-search: _', '\x1B[1A', '\x1B[5G', '\x1B[3G', '\x1B[0J', '{key : {key2 :[] }}\nbck-i-search: }_', '\x1B[1A', '\x1B[21G', '\x1B[3G', '\x1B[0J', diff --git a/test/parallel/test-repl-stdin-push-null.js b/test/parallel/test-repl-stdin-push-null.js new file mode 100644 index 00000000000..53ba9ff7c33 --- /dev/null +++ b/test/parallel/test-repl-stdin-push-null.js @@ -0,0 +1,9 @@ +'use strict'; +const common = require('../common'); + +if (!process.stdin.isTTY) { + common.skip('does not apply on non-TTY stdin'); +} + +process.stdin.destroy(); +process.stdin.setRawMode(true); diff --git a/test/parallel/test-repl-tab-complete-import.js b/test/parallel/test-repl-tab-complete-import.js index 1968caa5acc..e328d95db59 100644 --- a/test/parallel/test-repl-tab-complete-import.js +++ b/test/parallel/test-repl-tab-complete-import.js @@ -53,14 +53,18 @@ testMe.complete("import\t( 'n", common.mustCall((error, data) => { assert.strictEqual(data[1], 'n'); const completions = data[0]; // import(...) completions include `node:` URL modules: - publicModules.forEach((lib, index) => - assert.strictEqual(completions[index], `node:${lib}`)); - assert.strictEqual(completions[publicModules.length], ''); + let lastIndex = -1; + + publicModules.forEach((lib, index) => { + lastIndex = completions.indexOf(`node:${lib}`); + assert.notStrictEqual(lastIndex, -1); + }); + assert.strictEqual(completions[lastIndex + 1], ''); // There is only one Node.js module that starts with n: - assert.strictEqual(completions[publicModules.length + 1], 'net'); - assert.strictEqual(completions[publicModules.length + 2], ''); + assert.strictEqual(completions[lastIndex + 2], 'net'); + assert.strictEqual(completions[lastIndex + 3], ''); // It's possible to pick up non-core modules too - completions.slice(publicModules.length + 3).forEach((completion) => { + completions.slice(lastIndex + 4).forEach((completion) => { assert.match(completion, /^n/); }); })); diff --git a/test/parallel/test-repl-tab-complete-on-editor-mode.js b/test/parallel/test-repl-tab-complete-on-editor-mode.js new file mode 100644 index 00000000000..610724de2a2 --- /dev/null +++ b/test/parallel/test-repl-tab-complete-on-editor-mode.js @@ -0,0 +1,21 @@ +'use strict'; + +require('../common'); +const ArrayStream = require('../common/arraystream'); +const repl = require('repl'); + +const stream = new ArrayStream(); +const replServer = repl.start({ + input: stream, + output: stream, + terminal: true, +}); + +// Editor mode +replServer.write('.editor\n'); + +// Regression test for https://github.com/nodejs/node/issues/43528 +replServer.write('a'); +replServer.write(null, { name: 'tab' }); // Should not throw + +replServer.close(); diff --git a/test/parallel/test-repl-tab-complete.js b/test/parallel/test-repl-tab-complete.js index 270fb768b03..cc211d6da8a 100644 --- a/test/parallel/test-repl-tab-complete.js +++ b/test/parallel/test-repl-tab-complete.js @@ -205,6 +205,38 @@ testMe.complete('str.len', common.mustCall(function(error, data) { putIn.run(['.clear']); +// Tab completion should be case-insensitive if member part is lower-case +putIn.run([ + 'var foo = { barBar: 1, BARbuz: 2, barBLA: 3 };', +]); +testMe.complete( + 'foo.b', + common.mustCall(function(error, data) { + assert.deepStrictEqual(data, [ + ['foo.BARbuz', 'foo.barBLA', 'foo.barBar'], + 'foo.b', + ]); + }) +); + +putIn.run(['.clear']); + +// Tab completion should be case-insensitive if member part is upper-case +putIn.run([ + 'var foo = { barBar: 1, BARbuz: 2, barBLA: 3 };', +]); +testMe.complete( + 'foo.B', + common.mustCall(function(error, data) { + assert.deepStrictEqual(data, [ + ['foo.BARbuz', 'foo.barBLA', 'foo.barBar'], + 'foo.B', + ]); + }) +); + +putIn.run(['.clear']); + // Tab completion should not break on spaces const spaceTimeout = setTimeout(function() { throw new Error('timeout'); @@ -261,14 +293,18 @@ testMe.complete("require\t( 'n", common.mustCall(function(error, data) { assert.strictEqual(data.length, 2); assert.strictEqual(data[1], 'n'); // require(...) completions include `node:`-prefixed modules: - publicModules.forEach((lib, index) => - assert.strictEqual(data[0][index], `node:${lib}`)); - assert.strictEqual(data[0][publicModules.length], ''); + let lastIndex = -1; + + publicModules.forEach((lib, index) => { + lastIndex = data[0].indexOf(`node:${lib}`); + assert.notStrictEqual(lastIndex, -1); + }); + assert.strictEqual(data[0][lastIndex + 1], ''); // There is only one Node.js module that starts with n: - assert.strictEqual(data[0][publicModules.length + 1], 'net'); - assert.strictEqual(data[0][publicModules.length + 2], ''); + assert.strictEqual(data[0][lastIndex + 2], 'net'); + assert.strictEqual(data[0][lastIndex + 3], ''); // It's possible to pick up non-core modules too - data[0].slice(publicModules.length + 3).forEach((completion) => { + data[0].slice(lastIndex + 4).forEach((completion) => { assert.match(completion, /^n/); }); })); @@ -584,12 +620,27 @@ const testNonGlobal = repl.start({ useGlobal: false }); -const builtins = [['Infinity', 'Int16Array', 'Int32Array', - 'Int8Array'], 'I']; +const builtins = [ + [ + 'if', + 'import', + 'in', + 'instanceof', + '', + 'Infinity', + 'Int16Array', + 'Int32Array', + 'Int8Array', + ...(common.hasIntl ? ['Intl'] : []), + 'inspector', + 'isFinite', + 'isNaN', + '', + 'isPrototypeOf', + ], + 'I', +]; -if (common.hasIntl) { - builtins[0].push('Intl'); -} testNonGlobal.complete('I', common.mustCall((error, data) => { assert.deepStrictEqual(data, builtins); })); diff --git a/test/parallel/test-repl-top-level-await.js b/test/parallel/test-repl-top-level-await.js index a7c3811d5e1..1abcca75f1e 100644 --- a/test/parallel/test-repl-top-level-await.js +++ b/test/parallel/test-repl-top-level-await.js @@ -3,6 +3,7 @@ const common = require('../common'); const ArrayStream = require('../common/arraystream'); const assert = require('assert'); +const events = require('events'); const { stripVTControlCharacters } = require('internal/util/inspect'); const repl = require('repl'); @@ -27,31 +28,21 @@ class REPLStream extends ArrayStream { if (chunkLines.length > 1) { this.lines.push(...chunkLines.slice(1)); } - this.emit('line'); + this.emit('line', this.lines[this.lines.length - 1]); if (callback) callback(); return true; } - wait() { + async wait() { if (this.waitingForResponse) { throw new Error('Currently waiting for response to another command'); } this.lines = ['']; - return new Promise((resolve, reject) => { - const onError = (err) => { - this.removeListener('line', onLine); - reject(err); - }; - const onLine = () => { - if (this.lines[this.lines.length - 1].includes(PROMPT)) { - this.removeListener('error', onError); - this.removeListener('line', onLine); - resolve(this.lines); - } - }; - this.once('error', onError); - this.on('line', onLine); - }); + for await (const [line] of events.on(this, 'line')) { + if (line.includes(PROMPT)) { + return this.lines; + } + } } } @@ -182,6 +173,10 @@ async function ordinaryTests() { '3', 'undefined', ]], + // Regression test for https://github.com/nodejs/node/issues/43777. + ['await Promise.resolve(123), Promise.resolve(456)', 'Promise {', { line: 0 }], + ['await Promise.resolve(123), await Promise.resolve(456)', '456'], + ['await (Promise.resolve(123), Promise.resolve(456))', '456'], ]; for (const [input, expected = [`${input}\r`], options = {}] of testCases) { diff --git a/test/parallel/test-repl-unsupported-option.js b/test/parallel/test-repl-unsupported-option.js new file mode 100644 index 00000000000..c5b23461498 --- /dev/null +++ b/test/parallel/test-repl-unsupported-option.js @@ -0,0 +1,10 @@ +'use strict'; + +require('../common'); + +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +const result = spawnSync(process.execPath, ['-i', '--input-type=module']); + +assert.match(result.stderr.toString(), /Cannot specify --input-type for REPL/); diff --git a/test/parallel/test-repl.js b/test/parallel/test-repl.js index c1f87345c8e..266e966540f 100644 --- a/test/parallel/test-repl.js +++ b/test/parallel/test-repl.js @@ -835,7 +835,8 @@ const tcpTests = [ socket.end(); } - common.allowGlobals(...Object.values(global)); + common.allowGlobals(global.invoke_me, global.message, global.a, global.blah, + global.I, global.f, global.path, global.x, global.name, global.foo); })().then(common.mustCall()); function startTCPRepl() { diff --git a/test/parallel/test-require-resolve.js b/test/parallel/test-require-resolve.js index e7125e39faf..ab58033e2c9 100644 --- a/test/parallel/test-require-resolve.js +++ b/test/parallel/test-require-resolve.js @@ -80,3 +80,13 @@ require(fixtures.path('resolve-paths', 'default', 'verify-paths.js')); assert.strictEqual(resolvedPaths.includes('/node_modules'), false); }); } + +{ + assert.strictEqual(require.resolve('node:test'), 'node:test'); + assert.strictEqual(require.resolve('node:fs'), 'node:fs'); + + assert.throws( + () => require.resolve('node:unknown'), + { code: 'MODULE_NOT_FOUND' }, + ); +} diff --git a/test/parallel/test-runner-cli.js b/test/parallel/test-runner-cli.js new file mode 100644 index 00000000000..8c1f6b3b0be --- /dev/null +++ b/test/parallel/test-runner-cli.js @@ -0,0 +1,117 @@ +'use strict'; +require('../common'); +const assert = require('assert'); +const { spawnSync } = require('child_process'); +const { join } = require('path'); +const fixtures = require('../common/fixtures'); +const testFixtures = fixtures.path('test-runner'); + +{ + // File not found. + const args = ['--test', 'a-random-file-that-does-not-exist.js']; + const child = spawnSync(process.execPath, args); + + assert.strictEqual(child.status, 1); + assert.strictEqual(child.signal, null); + assert.strictEqual(child.stdout.toString(), ''); + assert.match(child.stderr.toString(), /^Could not find/); +} + +{ + // Default behavior. node_modules is ignored. Files that don't match the + // pattern are ignored except in test/ directories. + const args = ['--test', testFixtures]; + const child = spawnSync(process.execPath, args); + + assert.strictEqual(child.status, 1); + assert.strictEqual(child.signal, null); + assert.strictEqual(child.stderr.toString(), ''); + const stdout = child.stdout.toString(); + assert.match(stdout, /ok 1 - .+index\.test\.js/); + assert.match(stdout, /not ok 2 - .+random\.test\.mjs/); + assert.match(stdout, /not ok 1 - this should fail/); + assert.match(stdout, /ok 3 - .+subdir.+subdir_test\.js/); + assert.match(stdout, /ok 4 - .+random\.cjs/); +} + +{ + // Same but with a prototype mutation in require scripts. + const args = ['--require', join(testFixtures, 'protoMutation.js'), '--test', testFixtures]; + const child = spawnSync(process.execPath, args); + + const stdout = child.stdout.toString(); + assert.match(stdout, /ok 1 - .+index\.test\.js/); + assert.match(stdout, /not ok 2 - .+random\.test\.mjs/); + assert.match(stdout, /not ok 1 - this should fail/); + assert.match(stdout, /ok 3 - .+subdir.+subdir_test\.js/); + assert.match(stdout, /ok 4 - .+random\.cjs/); + assert.strictEqual(child.status, 1); + assert.strictEqual(child.signal, null); + assert.strictEqual(child.stderr.toString(), ''); +} + +{ + // User specified files that don't match the pattern are still run. + const args = ['--test', testFixtures, join(testFixtures, 'index.js')]; + const child = spawnSync(process.execPath, args); + + assert.strictEqual(child.status, 1); + assert.strictEqual(child.signal, null); + assert.strictEqual(child.stderr.toString(), ''); + const stdout = child.stdout.toString(); + assert.match(stdout, /not ok 1 - .+index\.js/); + assert.match(stdout, /ok 2 - .+index\.test\.js/); + assert.match(stdout, /not ok 3 - .+random\.test\.mjs/); + assert.match(stdout, /not ok 1 - this should fail/); + assert.match(stdout, /ok 4 - .+subdir.+subdir_test\.js/); +} + +{ + // Searches node_modules if specified. + const args = ['--test', join(testFixtures, 'node_modules')]; + const child = spawnSync(process.execPath, args); + + assert.strictEqual(child.status, 1); + assert.strictEqual(child.signal, null); + assert.strictEqual(child.stderr.toString(), ''); + const stdout = child.stdout.toString(); + assert.match(stdout, /not ok 1 - .+test-nm\.js/); +} + +{ + // The current directory is used by default. + const args = ['--test']; + const options = { cwd: testFixtures }; + const child = spawnSync(process.execPath, args, options); + + assert.strictEqual(child.status, 1); + assert.strictEqual(child.signal, null); + assert.strictEqual(child.stderr.toString(), ''); + const stdout = child.stdout.toString(); + assert.match(stdout, /ok 1 - .+index\.test\.js/); + assert.match(stdout, /not ok 2 - .+random\.test\.mjs/); + assert.match(stdout, /not ok 1 - this should fail/); + assert.match(stdout, /ok 3 - .+subdir.+subdir_test\.js/); + assert.match(stdout, /ok 4 - .+random\.cjs/); +} + +{ + // Flags that cannot be combined with --test. + const flags = [ + ['--check', '--test'], + ['--interactive', '--test'], + ['--eval', 'console.log("should not print")', '--test'], + ['--print', 'console.log("should not print")', '--test'], + ]; + + + flags.forEach((args) => { + const child = spawnSync(process.execPath, args); + + assert.notStrictEqual(child.status, 0); + assert.strictEqual(child.signal, null); + assert.strictEqual(child.stdout.toString(), ''); + const stderr = child.stderr.toString(); + assert.match(stderr, /--test/); + }); +} diff --git a/test/parallel/test-runner-concurrency.js b/test/parallel/test-runner-concurrency.js new file mode 100644 index 00000000000..8d756971d68 --- /dev/null +++ b/test/parallel/test-runner-concurrency.js @@ -0,0 +1,64 @@ +'use strict'; +const common = require('../common'); +const { describe, it, test } = require('node:test'); +const assert = require('assert'); + +describe('Concurrency option (boolean) = true ', { concurrency: true }, () => { + let isFirstTestOver = false; + it('should start the first test', () => new Promise((resolve) => { + setImmediate(() => { isFirstTestOver = true; resolve(); }); + })); + it('should start before the previous test ends', () => { + // Should work even on single core CPUs + assert.strictEqual(isFirstTestOver, false); + }); +}); + +describe( + 'Concurrency option (boolean) = false ', + { concurrency: false }, + () => { + let isFirstTestOver = false; + it('should start the first test', () => new Promise((resolve) => { + setImmediate(() => { isFirstTestOver = true; resolve(); }); + })); + it('should start after the previous test ends', () => { + assert.strictEqual(isFirstTestOver, true); + }); + } +); + +{ + // Make sure tests run in order when root concurrency is 1 (default) + const tree = []; + const expectedTestTree = common.mustCall(() => { + assert.deepStrictEqual(tree, [ + 'suite 1', 'nested', 'suite 2', + '1', '2', 'nested 1', 'nested 2', + 'test', 'test 1', 'test 2', + ]); + }); + + describe('suite 1', () => { + tree.push('suite 1'); + it('1', () => tree.push('1')); + it('2', () => tree.push('2')); + + describe('nested', () => { + tree.push('nested'); + it('nested 1', () => tree.push('nested 1')); + it('nested 2', () => tree.push('nested 2')); + }); + }); + + test('test', async (t) => { + tree.push('test'); + await t.test('test1', () => tree.push('test 1')); + await t.test('test 2', () => tree.push('test 2')); + }); + + describe('suite 2', () => { + tree.push('suite 2'); + it('should run after other suites', expectedTestTree); + }); +} diff --git a/test/parallel/test-runner-exit-code.js b/test/parallel/test-runner-exit-code.js new file mode 100644 index 00000000000..1833fa00f7f --- /dev/null +++ b/test/parallel/test-runner-exit-code.js @@ -0,0 +1,57 @@ +'use strict'; +const common = require('../common'); +const fixtures = require('../common/fixtures'); +const assert = require('assert'); +const { spawnSync, spawn } = require('child_process'); +const { once } = require('events'); +const { finished } = require('stream/promises'); + +async function runAndKill(file) { + if (common.isWindows) { + common.printSkipMessage(`signals are not supported in windows, skipping ${file}`); + return; + } + let stdout = ''; + const child = spawn(process.execPath, ['--test', file]); + child.stdout.setEncoding('utf8'); + child.stdout.on('data', (chunk) => { + if (!stdout.length) child.kill('SIGINT'); + stdout += chunk; + }); + const [code, signal] = await once(child, 'exit'); + await finished(child.stdout); + assert.match(stdout, /not ok 1/); + assert.match(stdout, /# cancelled 1\n/); + assert.strictEqual(signal, null); + assert.strictEqual(code, 1); +} + +if (process.argv[2] === 'child') { + const test = require('node:test'); + + if (process.argv[3] === 'pass') { + test('passing test', () => { + assert.strictEqual(true, true); + }); + } else if (process.argv[3] === 'fail') { + assert.strictEqual(process.argv[3], 'fail'); + test('failing test', () => { + assert.strictEqual(true, false); + }); + } else assert.fail('unreachable'); +} else { + let child = spawnSync(process.execPath, [__filename, 'child', 'pass']); + assert.strictEqual(child.status, 0); + assert.strictEqual(child.signal, null); + + child = spawnSync(process.execPath, ['--test', fixtures.path('test-runner', 'subdir', 'subdir_test.js')]); + assert.strictEqual(child.status, 0); + assert.strictEqual(child.signal, null); + + child = spawnSync(process.execPath, [__filename, 'child', 'fail']); + assert.strictEqual(child.status, 1); + assert.strictEqual(child.signal, null); + + runAndKill(fixtures.path('test-runner', 'never_ending_sync.js')).then(common.mustCall()); + runAndKill(fixtures.path('test-runner', 'never_ending_async.js')).then(common.mustCall()); +} diff --git a/test/parallel/test-runner-import-no-scheme.js b/test/parallel/test-runner-import-no-scheme.js new file mode 100644 index 00000000000..45dd83d0251 --- /dev/null +++ b/test/parallel/test-runner-import-no-scheme.js @@ -0,0 +1,51 @@ +'use strict'; +const common = require('../common'); +const tmpdir = require('../common/tmpdir'); +const assert = require('assert'); +const { spawnSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const { createRequire } = require('module'); + +assert.throws( + () => require('test'), + common.expectsError({ code: 'MODULE_NOT_FOUND' }), +); + +(async () => { + await assert.rejects( + async () => import('test'), + common.expectsError({ code: 'ERR_MODULE_NOT_FOUND' }), + ); +})().then(common.mustCall()); + +assert.throws( + () => require.resolve('test'), + common.expectsError({ code: 'MODULE_NOT_FOUND' }), +); + +// Verify that files in node_modules can be resolved. +tmpdir.refresh(); + +const packageRoot = path.join(tmpdir.path, 'node_modules', 'test'); +const indexFile = path.join(packageRoot, 'index.js'); + +fs.mkdirSync(packageRoot, { recursive: true }); +fs.writeFileSync(indexFile, 'module.exports = { marker: 1 };'); + +function test(argv) { + const child = spawnSync(process.execPath, argv, { cwd: tmpdir.path }); + assert.strictEqual(child.status, 0); + assert.strictEqual(child.stdout.toString().trim(), '{ marker: 1 }'); +} + +test(['-e', 'console.log(require("test"))']); +test(['-e', 'import("test").then(m=>console.log(m.default))']); +test(['--input-type=module', '-e', 'import test from "test";console.log(test)']); +test(['--input-type=module', '-e', 'console.log((await import("test")).default)']); + +{ + const dummyFile = path.join(tmpdir.path, 'file.js'); + const require = createRequire(dummyFile); + assert.strictEqual(require.resolve('test'), indexFile); +} diff --git a/test/parallel/test-runner-inspect.mjs b/test/parallel/test-runner-inspect.mjs new file mode 100644 index 00000000000..67095291e2a --- /dev/null +++ b/test/parallel/test-runner-inspect.mjs @@ -0,0 +1,54 @@ +import * as common from '../common/index.mjs'; +import * as tmpdir from '../common/tmpdir.js'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; +import { NodeInstance } from '../common/inspector-helper.js'; + + +common.skipIfInspectorDisabled(); +tmpdir.refresh(); + +{ + const child = new NodeInstance(['--test', '--inspect-brk=0'], undefined, fixtures.path('test-runner/index.test.js')); + + let stdout = ''; + let stderr = ''; + child.on('stdout', (line) => stdout += line); + child.on('stderr', (line) => stderr += line); + + const session = await child.connectInspectorSession(); + + await session.send([ + { method: 'Runtime.enable' }, + { method: 'Runtime.runIfWaitingForDebugger' }]); + + session.disconnect(); + assert.match(stderr, + /Warning: Using the inspector with --test forces running at a concurrency of 1\. Use the inspectPort option to run with concurrency/); +} + + +{ + const args = ['--test', '--inspect=0', fixtures.path('test-runner/index.js')]; + const { stderr, stdout, code, signal } = await common.spawnPromisified(process.execPath, args); + + assert.match(stderr, + /Warning: Using the inspector with --test forces running at a concurrency of 1\. Use the inspectPort option to run with concurrency/); + assert.match(stdout, /not ok 1 - .+index\.js/); + assert.match(stdout, /stderr: \|-\r?\n\s+Debugger listening on/); + assert.strictEqual(code, 1); + assert.strictEqual(signal, null); +} + + +{ + // File not found. + const args = ['--test', '--inspect=0', 'a-random-file-that-does-not-exist.js']; + const { stderr, stdout, code, signal } = await common.spawnPromisified(process.execPath, args); + + assert.strictEqual(stdout, ''); + assert.match(stderr, /^Could not find/); + assert.doesNotMatch(stderr, /Warning: Using the inspector with --test forces running at a concurrency of 1\. Use the inspectPort option to run with concurrency/); + assert.strictEqual(code, 1); + assert.strictEqual(signal, null); +} diff --git a/test/parallel/test-runner-misc.js b/test/parallel/test-runner-misc.js new file mode 100644 index 00000000000..34abaf5c120 --- /dev/null +++ b/test/parallel/test-runner-misc.js @@ -0,0 +1,33 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const { spawnSync } = require('child_process'); +const { setTimeout } = require('timers/promises'); + +if (process.argv[2] === 'child') { + const test = require('node:test'); + + if (process.argv[3] === 'abortSignal') { + assert.throws(() => test({ signal: {} }), { + code: 'ERR_INVALID_ARG_TYPE', + name: 'TypeError' + }); + + let testSignal; + test({ timeout: 10 }, common.mustCall(async ({ signal }) => { + assert.strictEqual(signal.aborted, false); + testSignal = signal; + await setTimeout(50); + })).finally(common.mustCall(() => { + test(() => assert.strictEqual(testSignal.aborted, true)); + })); + } else assert.fail('unreachable'); +} else { + const child = spawnSync(process.execPath, [__filename, 'child', 'abortSignal']); + const stdout = child.stdout.toString(); + assert.match(stdout, /^# pass 1$/m); + assert.match(stdout, /^# fail 0$/m); + assert.match(stdout, /^# cancelled 1$/m); + assert.strictEqual(child.status, 1); + assert.strictEqual(child.signal, null); +} diff --git a/test/parallel/test-runner-option-validation.js b/test/parallel/test-runner-option-validation.js new file mode 100644 index 00000000000..9d012925361 --- /dev/null +++ b/test/parallel/test-runner-option-validation.js @@ -0,0 +1,26 @@ +'use strict'; +require('../common'); +const assert = require('assert'); +const test = require('node:test'); + +[Symbol(), {}, [], () => {}, 1n, true, '1'].forEach((timeout) => { + assert.throws(() => test({ timeout }), { code: 'ERR_INVALID_ARG_TYPE' }); +}); +[-1, -Infinity, NaN, 2 ** 33, Number.MAX_SAFE_INTEGER].forEach((timeout) => { + assert.throws(() => test({ timeout }), { code: 'ERR_OUT_OF_RANGE' }); +}); +[null, undefined, Infinity, 0, 1, 1.1].forEach((timeout) => { + // Valid values should not throw. + test({ timeout }); +}); + +[Symbol(), {}, [], () => {}, 1n, '1'].forEach((concurrency) => { + assert.throws(() => test({ concurrency }), { code: 'ERR_INVALID_ARG_TYPE' }); +}); +[-1, 0, 1.1, -Infinity, NaN, 2 ** 33, Number.MAX_SAFE_INTEGER].forEach((concurrency) => { + assert.throws(() => test({ concurrency }), { code: 'ERR_OUT_OF_RANGE' }); +}); +[null, undefined, 1, 2 ** 31, true, false].forEach((concurrency) => { + // Valid values should not throw. + test({ concurrency }); +}); diff --git a/test/parallel/test-runner-run.mjs b/test/parallel/test-runner-run.mjs new file mode 100644 index 00000000000..4a0d4f025bf --- /dev/null +++ b/test/parallel/test-runner-run.mjs @@ -0,0 +1,69 @@ +import * as common from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import { join } from 'node:path'; +import { describe, it, run } from 'node:test'; +import assert from 'node:assert'; + +const testFixtures = fixtures.path('test-runner'); + +describe('require(\'node:test\').run', { concurrency: true }, () => { + + it('should run with no tests', async () => { + const stream = run({ files: [] }); + stream.setEncoding('utf8'); + stream.on('test:fail', common.mustNotCall()); + stream.on('test:pass', common.mustNotCall()); + // eslint-disable-next-line no-unused-vars + for await (const _ of stream); // TODO(MoLow): assert.snapshot + }); + + it('should fail with non existing file', async () => { + const stream = run({ files: ['a-random-file-that-does-not-exist.js'] }); + stream.on('test:fail', common.mustCall(1)); + stream.on('test:pass', common.mustNotCall()); + // eslint-disable-next-line no-unused-vars + for await (const _ of stream); // TODO(MoLow): assert.snapshot + }); + + it('should succeed with a file', async () => { + const stream = run({ files: [join(testFixtures, 'test/random.cjs')] }); + stream.on('test:fail', common.mustNotCall()); + stream.on('test:pass', common.mustCall(1)); + // eslint-disable-next-line no-unused-vars + for await (const _ of stream); // TODO(MoLow): assert.snapshot + }); + + it('should run same file twice', async () => { + const stream = run({ files: [join(testFixtures, 'test/random.cjs'), join(testFixtures, 'test/random.cjs')] }); + stream.on('test:fail', common.mustNotCall()); + stream.on('test:pass', common.mustCall(2)); + // eslint-disable-next-line no-unused-vars + for await (const _ of stream); // TODO(MoLow): assert.snapshot + }); + + it('should run a failed test', async () => { + const stream = run({ files: [testFixtures] }); + stream.on('test:fail', common.mustCall(1)); + stream.on('test:pass', common.mustNotCall()); + // eslint-disable-next-line no-unused-vars + for await (const _ of stream); // TODO(MoLow): assert.snapshot + }); + + it('should support timeout', async () => { + const stream = run({ timeout: 50, files: [ + fixtures.path('test-runner', 'never_ending_sync.js'), + fixtures.path('test-runner', 'never_ending_async.js'), + ] }); + stream.on('test:fail', common.mustCall(2)); + stream.on('test:pass', common.mustNotCall()); + // eslint-disable-next-line no-unused-vars + for await (const _ of stream); // TODO(MoLow): assert.snapshot + }); + + it('should validate files', async () => { + [Symbol(), {}, () => {}, 0, 1, 0n, 1n, '', '1', Promise.resolve([]), true, false] + .forEach((files) => assert.throws(() => run({ files }), { + code: 'ERR_INVALID_ARG_TYPE' + })); + }); +}); diff --git a/test/parallel/test-runner-test-filter.js b/test/parallel/test-runner-test-filter.js new file mode 100644 index 00000000000..b6afba22a2e --- /dev/null +++ b/test/parallel/test-runner-test-filter.js @@ -0,0 +1,42 @@ +// Flags: --expose-internals +'use strict'; +require('../common'); +const assert = require('assert'); +const { doesPathMatchFilter } = require('internal/test_runner/utils'); + +// Paths expected to match +[ + 'test.js', + 'test.cjs', + 'test.mjs', + 'test-foo.js', + 'test-foo.cjs', + 'test-foo.mjs', + 'foo.test.js', + 'foo.test.cjs', + 'foo.test.mjs', + 'foo-test.js', + 'foo-test.cjs', + 'foo-test.mjs', + 'foo_test.js', + 'foo_test.cjs', + 'foo_test.mjs', +].forEach((p) => { + assert.strictEqual(doesPathMatchFilter(p), true); +}); + +// Paths expected not to match +[ + 'test', + 'test.djs', + 'test.cs', + 'test.mj', + 'foo.js', + 'test-foo.sj', + 'test.foo.js', + 'test_foo.js', + 'testfoo.js', + 'foo-test1.mjs', +].forEach((p) => { + assert.strictEqual(doesPathMatchFilter(p), false); +}); diff --git a/test/parallel/test-socketaddress.js b/test/parallel/test-socketaddress.js index 4caf46dd3ee..b6d9946271f 100644 --- a/test/parallel/test-socketaddress.js +++ b/test/parallel/test-socketaddress.js @@ -1,3 +1,4 @@ +// Flags: --expose-internals 'use strict'; const common = require('../common'); @@ -10,6 +11,15 @@ const { SocketAddress, } = require('net'); +const { + InternalSocketAddress, +} = require('internal/socketaddress'); +const { internalBinding } = require('internal/test/binding'); +const { + SocketAddress: _SocketAddress, + AF_INET +} = internalBinding('block_list'); + { const sa = new SocketAddress(); strictEqual(sa.address, '127.0.0.1'); @@ -108,3 +118,20 @@ const { throws(() => new SocketAddress({ flowlabel: -1 }), { code: 'ERR_OUT_OF_RANGE' }); + +{ + // Test that the internal helper class InternalSocketAddress correctly + // inherits from SocketAddress and that it does not throw when its properties + // are accessed. + + const address = '127.0.0.1'; + const port = 8080; + const flowlabel = 0; + const handle = new _SocketAddress(address, port, AF_INET, flowlabel); + const addr = new InternalSocketAddress(handle); + ok(addr instanceof SocketAddress); + strictEqual(addr.address, address); + strictEqual(addr.port, port); + strictEqual(addr.family, 'ipv4'); + strictEqual(addr.flowlabel, flowlabel); +} diff --git a/test/parallel/test-source-map-api.js b/test/parallel/test-source-map-api.js index b8ff59e365e..f66a9af9478 100644 --- a/test/parallel/test-source-map-api.js +++ b/test/parallel/test-source-map-api.js @@ -99,6 +99,20 @@ const { readFileSync } = require('fs'); assert.notStrictEqual(payload.sources, sourceMap.payload.sources); } +// findEntry() must return empty object instead error when +// receive a malformed mappings. +{ + const payload = JSON.parse(readFileSync( + require.resolve('../fixtures/source-map/disk.map'), 'utf8' + )); + payload.mappings = ';;;;;;;;;'; + + const sourceMap = new SourceMap(payload); + const result = sourceMap.findEntry(0, 5); + assert.strictEqual(typeof result, 'object'); + assert.strictEqual(Object.keys(result).length, 0); +} + // Test various known decodings to ensure decodeVLQ works correctly. { function makeMinimalMap(column) { diff --git a/test/parallel/test-source-map-enable.js b/test/parallel/test-source-map-enable.js index 8e4f8e3a028..dc00cf624ae 100644 --- a/test/parallel/test-source-map-enable.js +++ b/test/parallel/test-source-map-enable.js @@ -343,6 +343,22 @@ function nextdir() { assert.ok(sourceMap); } +// Does not include null for async/await with esm +// Refs: https://github.com/nodejs/node/issues/42417 +{ + const output = spawnSync(process.execPath, [ + '--enable-source-maps', + require.resolve('../fixtures/source-map/throw-async.mjs'), + ]); + // Error in original context of source content: + assert.match( + output.stderr.toString(), + /throw new Error\(message\)\r?\n.*\^/ + ); + // Rewritten stack trace: + assert.match(output.stderr.toString(), /at Throw \([^)]+throw-async\.ts:4:9\)/); +} + function getSourceMapFromCache(fixtureFile, coverageDirectory) { const jsonFiles = fs.readdirSync(coverageDirectory); for (const jsonFile of jsonFiles) { diff --git a/test/parallel/test-stack-size-limit.js b/test/parallel/test-stack-size-limit.js new file mode 100644 index 00000000000..f66fe8527c8 --- /dev/null +++ b/test/parallel/test-stack-size-limit.js @@ -0,0 +1,26 @@ +'use strict'; + +require('../common'); + +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +// The default --stack-size is 984, which is below Windows' default stack size +// limit of 1 MiB. However, even a slight increase would cause node to exceed +// the 1 MiB limit and thus to crash with the exit code STATUS_STACK_OVERFLOW. +// Newer versions of Node.js allow the stack size to grow to up to 8 MiB, which +// better aligns with default limits on other platforms and which is commonly +// used for browsers on Windows. +// See https://github.com/nodejs/node/issues/43630. + +const { status, signal, stderr } = spawnSync(process.execPath, [ + '--stack-size=2000', + '-e', + '(function explode() { return explode(); })()', +], { + encoding: 'utf8' +}); + +assert.strictEqual(status, 1); +assert.strictEqual(signal, null); +assert.match(stderr, /Maximum call stack size exceeded/); diff --git a/test/parallel/test-startup-empty-regexp-statics.js b/test/parallel/test-startup-empty-regexp-statics.js new file mode 100644 index 00000000000..80f6bef5a5a --- /dev/null +++ b/test/parallel/test-startup-empty-regexp-statics.js @@ -0,0 +1,68 @@ +'use strict'; + +const common = require('../common'); +const assert = require('node:assert'); +const { spawnSync, spawn } = require('node:child_process'); + +assert.strictEqual(RegExp.$_, ''); +assert.strictEqual(RegExp.$0, undefined); +assert.strictEqual(RegExp.$1, ''); +assert.strictEqual(RegExp.$2, ''); +assert.strictEqual(RegExp.$3, ''); +assert.strictEqual(RegExp.$4, ''); +assert.strictEqual(RegExp.$5, ''); +assert.strictEqual(RegExp.$6, ''); +assert.strictEqual(RegExp.$7, ''); +assert.strictEqual(RegExp.$8, ''); +assert.strictEqual(RegExp.$9, ''); +assert.strictEqual(RegExp.input, ''); +assert.strictEqual(RegExp.lastMatch, ''); +assert.strictEqual(RegExp.lastParen, ''); +assert.strictEqual(RegExp.leftContext, ''); +assert.strictEqual(RegExp.rightContext, ''); +assert.strictEqual(RegExp['$&'], ''); +assert.strictEqual(RegExp['$`'], ''); +assert.strictEqual(RegExp['$+'], ''); +assert.strictEqual(RegExp["$'"], ''); + +const allRegExpStatics = + 'RegExp.$_ + RegExp["$&"] + RegExp["$`"] + RegExp["$+"] + RegExp["$\'"] + ' + + 'RegExp.input + RegExp.lastMatch + RegExp.lastParen + ' + + 'RegExp.leftContext + RegExp.rightContext + ' + + Array.from({ length: 10 }, (_, i) => `RegExp.$${i}`).join(' + '); + +{ + const child = spawnSync(process.execPath, + [ '-p', allRegExpStatics ], + { stdio: ['inherit', 'pipe', 'inherit'] }); + assert.match(child.stdout.toString(), /^undefined\r?\n$/); + assert.strictEqual(child.status, 0); + assert.strictEqual(child.signal, null); +} + +{ + const child = spawnSync(process.execPath, + [ '-e', `console.log(${allRegExpStatics})`, '--input-type=module' ], + { stdio: ['inherit', 'pipe', 'inherit'] }); + assert.match(child.stdout.toString(), /^undefined\r?\n$/); + assert.strictEqual(child.status, 0); + assert.strictEqual(child.signal, null); +} + +{ + const child = spawn(process.execPath, [], { stdio: ['pipe', 'pipe', 'inherit'], encoding: 'utf8' }); + + let stdout = ''; + child.stdout.on('data', (chunk) => { + stdout += chunk; + }); + + child.on('exit', common.mustCall((status, signal) => { + assert.match(stdout, /^undefined\r?\n$/); + assert.strictEqual(status, 0); + assert.strictEqual(signal, null); + })); + child.on('error', common.mustNotCall()); + + child.stdin.end(`console.log(${allRegExpStatics});\n`); +} diff --git a/test/parallel/test-startup-empty-regexp-statics.mjs b/test/parallel/test-startup-empty-regexp-statics.mjs new file mode 100644 index 00000000000..1f3869372b9 --- /dev/null +++ b/test/parallel/test-startup-empty-regexp-statics.mjs @@ -0,0 +1,26 @@ +// We must load the CJS version here because the ESM wrapper call `hasIPv6` +// which compiles a RegEx. +// eslint-disable-next-line node-core/require-common-first +import '../common/index.js'; +import assert from 'node:assert'; + +assert.strictEqual(RegExp.$_, ''); +assert.strictEqual(RegExp.$0, undefined); +assert.strictEqual(RegExp.$1, ''); +assert.strictEqual(RegExp.$2, ''); +assert.strictEqual(RegExp.$3, ''); +assert.strictEqual(RegExp.$4, ''); +assert.strictEqual(RegExp.$5, ''); +assert.strictEqual(RegExp.$6, ''); +assert.strictEqual(RegExp.$7, ''); +assert.strictEqual(RegExp.$8, ''); +assert.strictEqual(RegExp.$9, ''); +assert.strictEqual(RegExp.input, ''); +assert.strictEqual(RegExp.lastMatch, ''); +assert.strictEqual(RegExp.lastParen, ''); +assert.strictEqual(RegExp.leftContext, ''); +assert.strictEqual(RegExp.rightContext, ''); +assert.strictEqual(RegExp['$&'], ''); +assert.strictEqual(RegExp['$`'], ''); +assert.strictEqual(RegExp['$+'], ''); +assert.strictEqual(RegExp["$'"], ''); diff --git a/test/parallel/test-stream-asIndexedPairs.mjs b/test/parallel/test-stream-asIndexedPairs.mjs index 382ec7a8af0..6f577caefd2 100644 --- a/test/parallel/test-stream-asIndexedPairs.mjs +++ b/test/parallel/test-stream-asIndexedPairs.mjs @@ -1,6 +1,6 @@ import '../common/index.mjs'; import { Readable } from 'stream'; -import { deepStrictEqual, rejects } from 'assert'; +import { deepStrictEqual, rejects, throws } from 'assert'; { // asIndexedPairs with a synchronous stream @@ -45,3 +45,9 @@ import { deepStrictEqual, rejects } from 'assert'; await Readable.from([1, 2, 3]).asIndexedPairs({ signal }).toArray(); }, /AbortError/); } + +{ + // Error cases + throws(() => Readable.from([1]).asIndexedPairs(1), /ERR_INVALID_ARG_TYPE/); + throws(() => Readable.from([1]).asIndexedPairs({ signal: true }), /ERR_INVALID_ARG_TYPE/); +} diff --git a/test/parallel/test-stream-drop-take.js b/test/parallel/test-stream-drop-take.js index ddeb6054a78..cb55a4f7ee1 100644 --- a/test/parallel/test-stream-drop-take.js +++ b/test/parallel/test-stream-drop-take.js @@ -93,4 +93,10 @@ const naturals = () => from(async function*() { for (const example of invalidArgs) { throws(() => from([]).take(example).toArray(), /ERR_OUT_OF_RANGE/); } + + throws(() => Readable.from([1]).drop(1, 1), /ERR_INVALID_ARG_TYPE/); + throws(() => Readable.from([1]).drop(1, { signal: true }), /ERR_INVALID_ARG_TYPE/); + + throws(() => Readable.from([1]).take(1, 1), /ERR_INVALID_ARG_TYPE/); + throws(() => Readable.from([1]).take(1, { signal: true }), /ERR_INVALID_ARG_TYPE/); } diff --git a/test/parallel/test-stream-duplex-from.js b/test/parallel/test-stream-duplex-from.js index 6c9c59a5c82..ce3806ce75f 100644 --- a/test/parallel/test-stream-duplex-from.js +++ b/test/parallel/test-stream-duplex-from.js @@ -3,6 +3,7 @@ const common = require('../common'); const assert = require('assert'); const { Duplex, Readable, Writable, pipeline } = require('stream'); +const { Blob } = require('buffer'); { const d = Duplex.from({ @@ -144,3 +145,124 @@ const { Duplex, Readable, Writable, pipeline } = require('stream'); common.mustCall(() => {}), ); } + + +// Ensure that isDuplexNodeStream was called +{ + const duplex = new Duplex(); + assert.strictEqual(Duplex.from(duplex), duplex); +} + +// Ensure that Duplex.from works for blobs +{ + const blob = new Blob(['blob']); + const expectedByteLength = blob.size; + const duplex = Duplex.from(blob); + duplex.on('data', common.mustCall((arrayBuffer) => { + assert.strictEqual(arrayBuffer.byteLength, expectedByteLength); + })); +} + +// Ensure that given a promise rejection it emits an error +{ + const myErrorMessage = 'myCustomError'; + Duplex.from(Promise.reject(myErrorMessage)) + .on('error', common.mustCall((error) => { + assert.strictEqual(error, myErrorMessage); + })); +} + +// Ensure that given a promise rejection on an async function it emits an error +{ + const myErrorMessage = 'myCustomError'; + async function asyncFn() { + return Promise.reject(myErrorMessage); + } + + Duplex.from(asyncFn) + .on('error', common.mustCall((error) => { + assert.strictEqual(error, myErrorMessage); + })); +} + +// Ensure that Duplex.from throws an Invalid return value when function is void +{ + assert.throws(() => Duplex.from(() => {}), { + code: 'ERR_INVALID_RETURN_VALUE', + }); +} + +// Ensure data if a sub object has a readable stream it's duplexified +{ + const msg = Buffer.from('hello'); + const duplex = Duplex.from({ + readable: Readable({ + read() { + this.push(msg); + this.push(null); + } + }) + }).on('data', common.mustCall((data) => { + assert.strictEqual(data, msg); + })); + + assert.strictEqual(duplex.writable, false); +} + +// Ensure data if a sub object has a writable stream it's duplexified +{ + const msg = Buffer.from('hello'); + const duplex = Duplex.from({ + writable: Writable({ + write: common.mustCall((data) => { + assert.strictEqual(data, msg); + }) + }) + }); + + duplex.write(msg); + assert.strictEqual(duplex.readable, false); +} + +// Ensure data if a sub object has a writable and readable stream it's duplexified +{ + const msg = Buffer.from('hello'); + + const duplex = Duplex.from({ + readable: Readable({ + read() { + this.push(msg); + this.push(null); + } + }), + writable: Writable({ + write: common.mustCall((data) => { + assert.strictEqual(data, msg); + }) + }) + }); + + duplex.pipe(duplex) + .on('data', common.mustCall((data) => { + assert.strictEqual(data, msg); + assert.strictEqual(duplex.readable, true); + assert.strictEqual(duplex.writable, true); + })) + .on('end', common.mustCall()); +} + +// Ensure that given writable stream that throws an error it calls destroy +{ + const myErrorMessage = 'error!'; + const duplex = Duplex.from(Writable({ + write(chunk, enc, cb) { + cb(myErrorMessage); + } + })); + + duplex.on('error', common.mustCall((msg) => { + assert.strictEqual(msg, myErrorMessage); + })); + + duplex.write('test'); +} diff --git a/test/parallel/test-stream-filter.js b/test/parallel/test-stream-filter.js index 494c94f02f8..e434eb8c84e 100644 --- a/test/parallel/test-stream-filter.js +++ b/test/parallel/test-stream-filter.js @@ -5,6 +5,7 @@ const { Readable, } = require('stream'); const assert = require('assert'); +const { once } = require('events'); const { setTimeout } = require('timers/promises'); { @@ -46,13 +47,80 @@ const { setTimeout } = require('timers/promises'); })().then(common.mustCall()); } +{ + // Filter works on an infinite stream + const stream = Readable.from(async function* () { + while (true) yield 1; + }()).filter(common.mustCall(async (x) => { + return x < 3; + }, 5)); + (async () => { + let i = 1; + for await (const item of stream) { + assert.strictEqual(item, 1); + if (++i === 5) break; + } + })().then(common.mustCall()); +} + +{ + // Filter works on constructor created streams + let i = 0; + const stream = new Readable({ + read() { + if (i === 10) { + this.push(null); + return; + } + this.push(Uint8Array.from([i])); + i++; + }, + highWaterMark: 0, + }).filter(common.mustCall(async ([x]) => { + return x !== 5; + }, 10)); + (async () => { + const result = (await stream.toArray()).map((x) => x[0]); + const expected = [...Array(10).keys()].filter((x) => x !== 5); + assert.deepStrictEqual(result, expected); + })().then(common.mustCall()); +} + +{ + // Throwing an error during `filter` (sync) + const stream = Readable.from([1, 2, 3, 4, 5]).filter((x) => { + if (x === 3) { + throw new Error('boom'); + } + return true; + }); + assert.rejects( + stream.map((x) => x + x).toArray(), + /boom/, + ).then(common.mustCall()); +} + +{ + // Throwing an error during `filter` (async) + const stream = Readable.from([1, 2, 3, 4, 5]).filter(async (x) => { + if (x === 3) { + throw new Error('boom'); + } + return true; + }); + assert.rejects( + stream.filter(() => true).toArray(), + /boom/, + ).then(common.mustCall()); +} + { // Concurrency + AbortSignal const ac = new AbortController(); let calls = 0; const stream = Readable.from([1, 2, 3, 4]).filter(async (_, { signal }) => { calls++; - await setTimeout(100, { signal }); + await once(signal, 'abort'); }, { signal: ac.signal, concurrency: 2 }); // pump assert.rejects(async () => { @@ -98,3 +166,11 @@ const { setTimeout } = require('timers/promises'); const stream = Readable.from([1, 2, 3, 4, 5]).filter((x) => true); assert.strictEqual(stream.readable, true); } +{ + const stream = Readable.from([1, 2, 3, 4, 5]); + Object.defineProperty(stream, 'map', { + value: common.mustNotCall(() => {}), + }); + // Check that map isn't getting called. + stream.filter(() => true); +} diff --git a/test/parallel/test-stream-flatMap.js b/test/parallel/test-stream-flatMap.js index 952043b07b3..07c534a9c1f 100644 --- a/test/parallel/test-stream-flatMap.js +++ b/test/parallel/test-stream-flatMap.js @@ -114,9 +114,18 @@ function oneTo5() { concurrency: 'Foo' }), /ERR_OUT_OF_RANGE/); assert.throws(() => Readable.from([1]).flatMap((x) => x, 1), /ERR_INVALID_ARG_TYPE/); + assert.throws(() => Readable.from([1]).flatMap((x) => x, { signal: true }), /ERR_INVALID_ARG_TYPE/); } { // Test result is a Readable const stream = oneTo5().flatMap((x) => x); assert.strictEqual(stream.readable, true); } +{ + const stream = oneTo5(); + Object.defineProperty(stream, 'map', { + value: common.mustNotCall(() => {}), + }); + // Check that map isn't getting called. + stream.flatMap(() => true); +} diff --git a/test/parallel/test-stream-forEach.js b/test/parallel/test-stream-forEach.js index ae9dfd431f9..e3678352c41 100644 --- a/test/parallel/test-stream-forEach.js +++ b/test/parallel/test-stream-forEach.js @@ -129,3 +129,11 @@ const { once } = require('events'); const stream = Readable.from([1, 2, 3, 4, 5]).forEach((_) => true); assert.strictEqual(typeof stream.then, 'function'); } +{ + const stream = Readable.from([1, 2, 3, 4, 5]); + Object.defineProperty(stream, 'map', { + value: common.mustNotCall(() => {}), + }); + // Check that map isn't getting called. + stream.forEach(() => true); +} diff --git a/test/parallel/test-stream-iterator-helpers-test262-tests.mjs b/test/parallel/test-stream-iterator-helpers-test262-tests.mjs new file mode 100644 index 00000000000..8a153fc2fc2 --- /dev/null +++ b/test/parallel/test-stream-iterator-helpers-test262-tests.mjs @@ -0,0 +1,168 @@ +import { mustCall } from '../common/index.mjs'; +import { Readable } from 'stream'; +import assert from 'assert'; + +// These tests are manually ported from the draft PR for the test262 test suite +// Authored by Rick Waldron in https://github.com/tc39/test262/pull/2818/files + +// test262 license: +// The << Software identified by reference to the Ecma Standard* ("Software)">> +// is protected by copyright and is being made available under the +// "BSD License", included below. This Software may be subject to third party +// rights (rights from parties other than Ecma International), including patent +// rights, and no licenses under such third party rights are granted under this +// license even if the third party concerned is a member of Ecma International. +// SEE THE ECMA CODE OF CONDUCT IN PATENT MATTERS AVAILABLE AT +// http://www.ecma-international.org/memento/codeofconduct.htm FOR INFORMATION +// REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO IMPLEMENT ECMA +// INTERNATIONAL STANDARDS* + +// Copyright (C) 2012-2013 Ecma International +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. Neither the name of the authors nor Ecma International may be used to +// endorse or promote products derived from this software without specific +// prior written permission. + +// THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS +// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN +// NO EVENT SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// * Ecma International Standards hereafter means Ecma International Standards +// as well as Ecma Technical Reports + + +// Note all the tests that check AsyncIterator's prototype itself and things +// that happen before stream conversion were not ported. +{ + // asIndexedPairs/is-function + assert.strictEqual(typeof Readable.prototype.asIndexedPairs, 'function'); + // asIndexedPairs/indexed-pairs.js + const iterator = Readable.from([0, 1]); + const indexedPairs = iterator.asIndexedPairs(); + + for await (const [i, v] of indexedPairs) { + assert.strictEqual(i, v); + } + // asIndexedPairs/length.js + assert.strictEqual(Readable.prototype.asIndexedPairs.length, 0); + // asIndexedPairs/name.js + assert.strictEqual(Readable.prototype.asIndexedPairs.name, 'asIndexedPairs'); + const descriptor = Object.getOwnPropertyDescriptor( + Readable.prototype, + 'asIndexedPairs' + ); + assert.strictEqual(descriptor.enumerable, false); + assert.strictEqual(descriptor.configurable, true); + assert.strictEqual(descriptor.writable, true); +} +{ + // drop/length + assert.strictEqual(Readable.prototype.drop.length, 1); + const descriptor = Object.getOwnPropertyDescriptor( + Readable.prototype, + 'drop' + ); + assert.strictEqual(descriptor.enumerable, false); + assert.strictEqual(descriptor.configurable, true); + assert.strictEqual(descriptor.writable, true); + // drop/limit-equals-total + const iterator = Readable.from([1, 2]).drop(2); + const result = await iterator[Symbol.asyncIterator]().next(); + assert.deepStrictEqual(result, { done: true, value: undefined }); + // drop/limit-greater-than-total.js + const iterator2 = Readable.from([1, 2]).drop(3); + const result2 = await iterator2[Symbol.asyncIterator]().next(); + assert.deepStrictEqual(result2, { done: true, value: undefined }); + // drop/limit-less-than-total.js + const iterator3 = Readable.from([1, 2]).drop(1); + const result3 = await iterator3[Symbol.asyncIterator]().next(); + assert.deepStrictEqual(result3, { done: false, value: 2 }); + // drop/limit-rangeerror + assert.throws(() => Readable.from([1]).drop(-1), RangeError); + assert.throws(() => { + Readable.from([1]).drop({ + valueOf() { + throw new Error('boom'); + } + }); + }, /boom/); + // drop/limit-tointeger + const two = await Readable.from([1, 2]).drop({ valueOf: () => 1 }).toArray(); + assert.deepStrictEqual(two, [2]); + // drop/name + assert.strictEqual(Readable.prototype.drop.name, 'drop'); + // drop/non-constructible + assert.throws(() => new Readable.prototype.drop(1), TypeError); + // drop/proto + const proto = Object.getPrototypeOf(Readable.prototype.drop); + assert.strictEqual(proto, Function.prototype); +} +{ + // every/abrupt-iterator-close + const stream = Readable.from([1, 2, 3]); + const e = new Error(); + await assert.rejects(stream.every(mustCall(() => { + throw e; + }, 1)), e); +} +{ + // every/callable-fn + await assert.rejects(Readable.from([1, 2]).every({}), TypeError); +} +{ + // every/callable + Readable.prototype.every.call(Readable.from([]), () => {}); + // eslint-disable-next-line array-callback-return + Readable.from([]).every(() => {}); + assert.throws(() => { + const r = Readable.from([]); + new r.every(() => {}); + }, TypeError); +} + +{ + // every/false + const iterator = Readable.from([1, 2, 3]); + const result = await iterator.every((v) => v === 1); + assert.strictEqual(result, false); +} +{ + // every/every + const iterator = Readable.from([1, 2, 3]); + const result = await iterator.every((v) => true); + assert.strictEqual(result, true); +} + +{ + // every/is-function + assert.strictEqual(typeof Readable.prototype.every, 'function'); +} +{ + // every/length + assert.strictEqual(Readable.prototype.every.length, 1); + // every/name + assert.strictEqual(Readable.prototype.every.name, 'every'); + // every/propdesc + const descriptor = Object.getOwnPropertyDescriptor( + Readable.prototype, + 'every' + ); + assert.strictEqual(descriptor.enumerable, false); + assert.strictEqual(descriptor.configurable, true); + assert.strictEqual(descriptor.writable, true); +} diff --git a/test/parallel/test-stream-map.js b/test/parallel/test-stream-map.js index 22e7e7f4e0d..ba3f1584219 100644 --- a/test/parallel/test-stream-map.js +++ b/test/parallel/test-stream-map.js @@ -91,6 +91,7 @@ const { setTimeout } = require('timers/promises'); concurrency: 'Foo' }), /ERR_OUT_OF_RANGE/); assert.throws(() => Readable.from([1]).map((x) => x, 1), /ERR_INVALID_ARG_TYPE/); + assert.throws(() => Readable.from([1]).map((x) => x, { signal: true }), /ERR_INVALID_ARG_TYPE/); } { // Test result is a Readable diff --git a/test/parallel/test-stream-passthrough-drain.js b/test/parallel/test-stream-passthrough-drain.js index f5c98947e21..244bf874073 100644 --- a/test/parallel/test-stream-passthrough-drain.js +++ b/test/parallel/test-stream-passthrough-drain.js @@ -1,8 +1,10 @@ 'use strict'; const common = require('../common'); +const assert = require('assert'); const { PassThrough } = require('stream'); const pt = new PassThrough({ highWaterMark: 0 }); pt.on('drain', common.mustCall()); -pt.write('hello'); +assert(!pt.write('hello1')); +pt.read(); pt.read(); diff --git a/test/parallel/test-stream-readable-async-iterators.js b/test/parallel/test-stream-readable-async-iterators.js index 3bbb4dbd69a..285d6131c7e 100644 --- a/test/parallel/test-stream-readable-async-iterators.js +++ b/test/parallel/test-stream-readable-async-iterators.js @@ -62,7 +62,7 @@ async function tests() { }); await (async () => { - for await (const d of readable) { // eslint-disable-line no-unused-vars + for await (const d of readable) { return; } })(); diff --git a/test/parallel/test-stream-readable-reading-readingMore.js b/test/parallel/test-stream-readable-reading-readingMore.js index 968bf5c63ae..5e39c86dcba 100644 --- a/test/parallel/test-stream-readable-reading-readingMore.js +++ b/test/parallel/test-stream-readable-reading-readingMore.js @@ -124,7 +124,7 @@ const Readable = require('stream').Readable; assert.strictEqual(state.reading, false); assert.strictEqual(state.readingMore, false); - const onReadable = common.mustNotCall; + const onReadable = common.mustNotCall(); readable.on('readable', onReadable); diff --git a/test/parallel/test-stream-reduce.js b/test/parallel/test-stream-reduce.js index a8b41efa284..56271c5e232 100644 --- a/test/parallel/test-stream-reduce.js +++ b/test/parallel/test-stream-reduce.js @@ -121,6 +121,8 @@ function sum(p, c) { // Error cases assert.rejects(() => Readable.from([]).reduce(1), /TypeError/); assert.rejects(() => Readable.from([]).reduce('5'), /TypeError/); + assert.rejects(() => Readable.from([]).reduce((x, y) => x + y, 0, 1), /ERR_INVALID_ARG_TYPE/); + assert.rejects(() => Readable.from([]).reduce((x, y) => x + y, 0, { signal: true }), /ERR_INVALID_ARG_TYPE/); } { diff --git a/test/parallel/test-stream-some-every.js b/test/parallel/test-stream-some-every.js deleted file mode 100644 index c2be5ea955b..00000000000 --- a/test/parallel/test-stream-some-every.js +++ /dev/null @@ -1,95 +0,0 @@ -'use strict'; - -const common = require('../common'); -const { - Readable, -} = require('stream'); -const assert = require('assert'); - -function oneTo5() { - return Readable.from([1, 2, 3, 4, 5]); -} - -function oneTo5Async() { - return oneTo5().map(async (x) => { - await Promise.resolve(); - return x; - }); -} -{ - // Some and every work with a synchronous stream and predicate - (async () => { - assert.strictEqual(await oneTo5().some((x) => x > 3), true); - assert.strictEqual(await oneTo5().every((x) => x > 3), false); - assert.strictEqual(await oneTo5().some((x) => x > 6), false); - assert.strictEqual(await oneTo5().every((x) => x < 6), true); - assert.strictEqual(await Readable.from([]).some((x) => true), false); - assert.strictEqual(await Readable.from([]).every((x) => true), true); - })().then(common.mustCall()); -} - -{ - // Some and every work with an asynchronous stream and synchronous predicate - (async () => { - assert.strictEqual(await oneTo5Async().some((x) => x > 3), true); - assert.strictEqual(await oneTo5Async().every((x) => x > 3), false); - assert.strictEqual(await oneTo5Async().some((x) => x > 6), false); - assert.strictEqual(await oneTo5Async().every((x) => x < 6), true); - })().then(common.mustCall()); -} - -{ - // Some and every work on asynchronous streams with an asynchronous predicate - (async () => { - assert.strictEqual(await oneTo5().some(async (x) => x > 3), true); - assert.strictEqual(await oneTo5().every(async (x) => x > 3), false); - assert.strictEqual(await oneTo5().some(async (x) => x > 6), false); - assert.strictEqual(await oneTo5().every(async (x) => x < 6), true); - })().then(common.mustCall()); -} - -{ - // Some and every short circuit - (async () => { - await oneTo5().some(common.mustCall((x) => x > 2, 3)); - await oneTo5().every(common.mustCall((x) => x < 3, 3)); - // When short circuit isn't possible the whole stream is iterated - await oneTo5().some(common.mustCall((x) => x > 6, 5)); - // The stream is destroyed afterwards - const stream = oneTo5(); - await stream.some(common.mustCall((x) => x > 2, 3)); - assert.strictEqual(stream.destroyed, true); - })().then(common.mustCall()); -} - -{ - // Support for AbortSignal - const ac = new AbortController(); - assert.rejects(Readable.from([1, 2, 3]).some( - () => new Promise(() => {}), - { signal: ac.signal } - ), { - name: 'AbortError', - }).then(common.mustCall()); - ac.abort(); -} -{ - // Support for pre-aborted AbortSignal - assert.rejects(Readable.from([1, 2, 3]).some( - () => new Promise(() => {}), - { signal: AbortSignal.abort() } - ), { - name: 'AbortError', - }).then(common.mustCall()); -} -{ - // Error cases - assert.rejects(async () => { - await Readable.from([1]).every(1); - }, /ERR_INVALID_ARG_TYPE/).then(common.mustCall()); - assert.rejects(async () => { - await Readable.from([1]).every((x) => x, { - concurrency: 'Foo' - }); - }, /ERR_OUT_OF_RANGE/).then(common.mustCall()); -} diff --git a/test/parallel/test-stream-some-find-every.mjs b/test/parallel/test-stream-some-find-every.mjs new file mode 100644 index 00000000000..c4637d41deb --- /dev/null +++ b/test/parallel/test-stream-some-find-every.mjs @@ -0,0 +1,172 @@ +import * as common from '../common/index.mjs'; +import { setTimeout } from 'timers/promises'; +import { Readable } from 'stream'; +import assert from 'assert'; + + +function oneTo5() { + return Readable.from([1, 2, 3, 4, 5]); +} + +function oneTo5Async() { + return oneTo5().map(async (x) => { + await Promise.resolve(); + return x; + }); +} +{ + // Some, find, and every work with a synchronous stream and predicate + assert.strictEqual(await oneTo5().some((x) => x > 3), true); + assert.strictEqual(await oneTo5().every((x) => x > 3), false); + assert.strictEqual(await oneTo5().find((x) => x > 3), 4); + assert.strictEqual(await oneTo5().some((x) => x > 6), false); + assert.strictEqual(await oneTo5().every((x) => x < 6), true); + assert.strictEqual(await oneTo5().find((x) => x > 6), undefined); + assert.strictEqual(await Readable.from([]).some(() => true), false); + assert.strictEqual(await Readable.from([]).every(() => true), true); + assert.strictEqual(await Readable.from([]).find(() => true), undefined); +} + +{ + // Some, find, and every work with an asynchronous stream and synchronous predicate + assert.strictEqual(await oneTo5Async().some((x) => x > 3), true); + assert.strictEqual(await oneTo5Async().every((x) => x > 3), false); + assert.strictEqual(await oneTo5Async().find((x) => x > 3), 4); + assert.strictEqual(await oneTo5Async().some((x) => x > 6), false); + assert.strictEqual(await oneTo5Async().every((x) => x < 6), true); + assert.strictEqual(await oneTo5Async().find((x) => x > 6), undefined); +} + +{ + // Some, find, and every work on synchronous streams with an asynchronous predicate + assert.strictEqual(await oneTo5().some(async (x) => x > 3), true); + assert.strictEqual(await oneTo5().every(async (x) => x > 3), false); + assert.strictEqual(await oneTo5().find(async (x) => x > 3), 4); + assert.strictEqual(await oneTo5().some(async (x) => x > 6), false); + assert.strictEqual(await oneTo5().every(async (x) => x < 6), true); + assert.strictEqual(await oneTo5().find(async (x) => x > 6), undefined); +} + +{ + // Some, find, and every work on asynchronous streams with an asynchronous predicate + assert.strictEqual(await oneTo5Async().some(async (x) => x > 3), true); + assert.strictEqual(await oneTo5Async().every(async (x) => x > 3), false); + assert.strictEqual(await oneTo5Async().find(async (x) => x > 3), 4); + assert.strictEqual(await oneTo5Async().some(async (x) => x > 6), false); + assert.strictEqual(await oneTo5Async().every(async (x) => x < 6), true); + assert.strictEqual(await oneTo5Async().find(async (x) => x > 6), undefined); +} + +{ + async function checkDestroyed(stream) { + await setTimeout(); + assert.strictEqual(stream.destroyed, true); + } + + { + // Some, find, and every short circuit + const someStream = oneTo5(); + await someStream.some(common.mustCall((x) => x > 2, 3)); + await checkDestroyed(someStream); + + const everyStream = oneTo5(); + await everyStream.every(common.mustCall((x) => x < 3, 3)); + await checkDestroyed(everyStream); + + const findStream = oneTo5(); + await findStream.find(common.mustCall((x) => x > 1, 2)); + await checkDestroyed(findStream); + + // When short circuit isn't possible the whole stream is iterated + await oneTo5().some(common.mustCall(() => false, 5)); + await oneTo5().every(common.mustCall(() => true, 5)); + await oneTo5().find(common.mustCall(() => false, 5)); + } + + { + // Some, find, and every short circuit async stream/predicate + const someStream = oneTo5Async(); + await someStream.some(common.mustCall(async (x) => x > 2, 3)); + await checkDestroyed(someStream); + + const everyStream = oneTo5Async(); + await everyStream.every(common.mustCall(async (x) => x < 3, 3)); + await checkDestroyed(everyStream); + + const findStream = oneTo5Async(); + await findStream.find(common.mustCall(async (x) => x > 1, 2)); + await checkDestroyed(findStream); + + // When short circuit isn't possible the whole stream is iterated + await oneTo5Async().some(common.mustCall(async () => false, 5)); + await oneTo5Async().every(common.mustCall(async () => true, 5)); + await oneTo5Async().find(common.mustCall(async () => false, 5)); + } +} + +{ + // Concurrency doesn't affect which value is found. + const found = await Readable.from([1, 2]).find(async (val) => { + if (val === 1) { + await setTimeout(100); + } + return true; + }, { concurrency: 2 }); + assert.strictEqual(found, 1); +} + +{ + // Support for AbortSignal + for (const op of ['some', 'every', 'find']) { + { + const ac = new AbortController(); + assert.rejects(Readable.from([1, 2, 3])[op]( + () => new Promise(() => { }), + { signal: ac.signal } + ), { + name: 'AbortError', + }, `${op} should abort correctly with sync abort`).then(common.mustCall()); + ac.abort(); + } + { + // Support for pre-aborted AbortSignal + assert.rejects(Readable.from([1, 2, 3])[op]( + () => new Promise(() => { }), + { signal: AbortSignal.abort() } + ), { + name: 'AbortError', + }, `${op} should abort with pre-aborted abort controller`).then(common.mustCall()); + } + } +} +{ + // Error cases + for (const op of ['some', 'every', 'find']) { + assert.rejects(async () => { + await Readable.from([1])[op](1); + }, /ERR_INVALID_ARG_TYPE/, `${op} should throw for invalid function`).then(common.mustCall()); + assert.rejects(async () => { + await Readable.from([1])[op]((x) => x, { + concurrency: 'Foo' + }); + }, /ERR_OUT_OF_RANGE/, `${op} should throw for invalid concurrency`).then(common.mustCall()); + assert.rejects(async () => { + await Readable.from([1])[op]((x) => x, 1); + }, /ERR_INVALID_ARG_TYPE/, `${op} should throw for invalid concurrency`).then(common.mustCall()); + assert.rejects(async () => { + await Readable.from([1])[op]((x) => x, { + signal: true + }); + }, /ERR_INVALID_ARG_TYPE/, `${op} should throw for invalid signal`).then(common.mustCall()); + } +} +{ + for (const op of ['some', 'every', 'find']) { + const stream = oneTo5(); + Object.defineProperty(stream, 'map', { + value: common.mustNotCall(() => {}), + }); + // Check that map isn't getting called. + stream[op](() => {}); + } +} diff --git a/test/parallel/test-stream-toArray.js b/test/parallel/test-stream-toArray.js index 3bd15e7c0fb..5c86410ed74 100644 --- a/test/parallel/test-stream-toArray.js +++ b/test/parallel/test-stream-toArray.js @@ -24,14 +24,16 @@ const assert = require('assert'); } { - // Works on a non-object-mode stream and flattens it + // Works on a non-object-mode stream (async () => { + const firstBuffer = Buffer.from([1, 2, 3]); + const secondBuffer = Buffer.from([4, 5, 6]); const stream = Readable.from( - [Buffer.from([1, 2, 3]), Buffer.from([4, 5, 6])] - , { objectMode: false }); + [firstBuffer, secondBuffer], + { objectMode: false }); const result = await stream.toArray(); - assert.strictEqual(Buffer.isBuffer(result), true); - assert.deepStrictEqual(Array.from(result), [1, 2, 3, 4, 5, 6]); + assert.strictEqual(Array.isArray(result), true); + assert.deepStrictEqual(result, [firstBuffer, secondBuffer]); })().then(common.mustCall()); } @@ -67,7 +69,7 @@ const assert = require('assert'); }, { name: 'AbortError', }).then(common.mustCall(() => { - // Only stops toArray, does not destory the stream + // Only stops toArray, does not destroy the stream assert(stream.destroyed, false); })); ac.abort(); @@ -77,3 +79,15 @@ const assert = require('assert'); const result = Readable.from([1, 2, 3, 4, 5]).toArray(); assert.strictEqual(result instanceof Promise, true); } +{ + // Error cases + assert.rejects(async () => { + await Readable.from([1]).toArray(1); + }, /ERR_INVALID_ARG_TYPE/).then(common.mustCall()); + + assert.rejects(async () => { + await Readable.from([1]).toArray({ + signal: true + }); + }, /ERR_INVALID_ARG_TYPE/).then(common.mustCall()); +} diff --git a/test/parallel/test-stream-transform-hwm0.js b/test/parallel/test-stream-transform-hwm0.js new file mode 100644 index 00000000000..8e8971f21fa --- /dev/null +++ b/test/parallel/test-stream-transform-hwm0.js @@ -0,0 +1,28 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const { Transform } = require('stream'); + +const t = new Transform({ + objectMode: true, highWaterMark: 0, + transform(chunk, enc, callback) { + process.nextTick(() => callback(null, chunk, enc)); + } +}); + +assert.strictEqual(t.write(1), false); +t.on('drain', common.mustCall(() => { + assert.strictEqual(t.write(2), false); + t.end(); +})); + +t.once('readable', common.mustCall(() => { + assert.strictEqual(t.read(), 1); + setImmediate(common.mustCall(() => { + assert.strictEqual(t.read(), null); + t.once('readable', common.mustCall(() => { + assert.strictEqual(t.read(), 2); + })); + })); +})); diff --git a/test/parallel/test-stream-transform-split-highwatermark.js b/test/parallel/test-stream-transform-split-highwatermark.js index 22d13fd3c3b..b6255c70471 100644 --- a/test/parallel/test-stream-transform-split-highwatermark.js +++ b/test/parallel/test-stream-transform-split-highwatermark.js @@ -20,10 +20,6 @@ testTransform(666, 777, { writableHighWaterMark: 777, }); -// test 0 overriding defaultHwm -testTransform(0, DEFAULT, { readableHighWaterMark: 0 }); -testTransform(DEFAULT, 0, { writableHighWaterMark: 0 }); - // Test highWaterMark overriding testTransform(555, 555, { highWaterMark: 555, @@ -39,21 +35,6 @@ testTransform(555, 555, { writableHighWaterMark: 777, }); -// Test highWaterMark = 0 overriding -testTransform(0, 0, { - highWaterMark: 0, - readableHighWaterMark: 666, -}); -testTransform(0, 0, { - highWaterMark: 0, - writableHighWaterMark: 777, -}); -testTransform(0, 0, { - highWaterMark: 0, - readableHighWaterMark: 666, - writableHighWaterMark: 777, -}); - // Test undefined, null [undefined, null].forEach((v) => { testTransform(DEFAULT, DEFAULT, { readableHighWaterMark: v }); diff --git a/test/parallel/test-stream-writable-aborted.js b/test/parallel/test-stream-writable-aborted.js new file mode 100644 index 00000000000..01d638115bd --- /dev/null +++ b/test/parallel/test-stream-writable-aborted.js @@ -0,0 +1,26 @@ +'use strict'; + +require('../common'); +const assert = require('assert'); +const { Writable } = require('stream'); + +{ + const writable = new Writable({ + write() { + } + }); + assert.strictEqual(writable.writableAborted, false); + writable.destroy(); + assert.strictEqual(writable.writableAborted, true); +} + +{ + const writable = new Writable({ + write() { + } + }); + assert.strictEqual(writable.writableAborted, false); + writable.end(); + writable.destroy(); + assert.strictEqual(writable.writableAborted, true); +} diff --git a/test/parallel/test-stream-writable-callback-twice.js b/test/parallel/test-stream-writable-callback-twice.js deleted file mode 100644 index 25e7579a2d4..00000000000 --- a/test/parallel/test-stream-writable-callback-twice.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; -const common = require('../common'); -const { Writable } = require('stream'); -const stream = new Writable({ - write(chunk, enc, cb) { cb(); cb(); } -}); - -stream.on('error', common.expectsError({ - name: 'Error', - message: 'Callback called multiple times', - code: 'ERR_MULTIPLE_CALLBACK' -})); - -stream.write('foo'); diff --git a/test/parallel/test-stream-writable-change-default-encoding.js b/test/parallel/test-stream-writable-change-default-encoding.js index 3fb9796251c..94a892567c1 100644 --- a/test/parallel/test-stream-writable-change-default-encoding.js +++ b/test/parallel/test-stream-writable-change-default-encoding.js @@ -68,7 +68,7 @@ assert.throws(() => { message: 'Unknown encoding: {}' }); -(function checkVairableCaseEncoding() { +(function checkVariableCaseEncoding() { const m = new MyWritable(function(isBuffer, type, enc) { assert.strictEqual(enc, 'ascii'); }, { decodeStrings: false }); diff --git a/test/parallel/test-timers-immediate-promisified.js b/test/parallel/test-timers-immediate-promisified.js index 65c8411f1b2..5808312b564 100644 --- a/test/parallel/test-timers-immediate-promisified.js +++ b/test/parallel/test-timers-immediate-promisified.js @@ -97,3 +97,10 @@ process.on('multipleResolves', common.mustNotCall()); assert.strictEqual(stderr, ''); })); } + +(async () => { + const signal = AbortSignal.abort('boom'); + await assert.rejects(timerPromises.setImmediate(undefined, { signal }), { + cause: 'boom', + }); +})().then(common.mustCall()); diff --git a/test/parallel/test-timers-interval-promisified.js b/test/parallel/test-timers-interval-promisified.js index 28a0d0b47cd..e6550445f14 100644 --- a/test/parallel/test-timers-interval-promisified.js +++ b/test/parallel/test-timers-interval-promisified.js @@ -246,3 +246,15 @@ process.on('multipleResolves', common.mustNotCall()); setPromiseTimeout(time_unit * 3).then(() => post = true), ]).then(common.mustCall()); } + +(async () => { + const signal = AbortSignal.abort('boom'); + try { + const iterable = timerPromises.setInterval(2, undefined, { signal }); + // eslint-disable-next-line no-unused-vars, no-empty + for await (const _ of iterable) { } + assert.fail('should have failed'); + } catch (err) { + assert.strictEqual(err.cause, 'boom'); + } +})().then(common.mustCall()); diff --git a/test/parallel/test-timers-timeout-promisified.js b/test/parallel/test-timers-timeout-promisified.js index 0b9a6b6f19a..4e3881acec1 100644 --- a/test/parallel/test-timers-timeout-promisified.js +++ b/test/parallel/test-timers-timeout-promisified.js @@ -97,3 +97,10 @@ process.on('multipleResolves', common.mustNotCall()); assert.strictEqual(stderr, ''); })); } + +(async () => { + const signal = AbortSignal.abort('boom'); + await assert.rejects(timerPromises.setTimeout(1, undefined, { signal }), { + cause: 'boom', + }); +})().then(common.mustCall()); diff --git a/test/parallel/test-tls-basic-validations.js b/test/parallel/test-tls-basic-validations.js index 67058daf158..4a3aab31468 100644 --- a/test/parallel/test-tls-basic-validations.js +++ b/test/parallel/test-tls-basic-validations.js @@ -103,8 +103,11 @@ assert.throws( const inputBuffer = Buffer.from(arrayBufferViewStr.repeat(8), 'utf8'); for (const expectView of common.getArrayBufferViews(inputBuffer)) { const out = {}; + const expected = Buffer.from(expectView.buffer.slice(), + expectView.byteOffset, + expectView.byteLength); tls.convertALPNProtocols(expectView, out); - assert(out.ALPNProtocols.equals(Buffer.from(expectView))); + assert(out.ALPNProtocols.equals(expected)); } } diff --git a/test/parallel/test-tls-client-getephemeralkeyinfo.js b/test/parallel/test-tls-client-getephemeralkeyinfo.js index 73ac215102d..95f232de637 100644 --- a/test/parallel/test-tls-client-getephemeralkeyinfo.js +++ b/test/parallel/test-tls-client-getephemeralkeyinfo.js @@ -23,7 +23,8 @@ function test(size, type, name, cipher) { const options = { key: key, cert: cert, - ciphers: cipher + ciphers: cipher, + maxVersion: 'TLSv1.2', }; if (name) options.ecdhCurve = name; diff --git a/test/parallel/test-tls-client-mindhsize.js b/test/parallel/test-tls-client-mindhsize.js index a6fbc67bd88..2b243575071 100644 --- a/test/parallel/test-tls-client-mindhsize.js +++ b/test/parallel/test-tls-client-mindhsize.js @@ -41,7 +41,8 @@ function test(size, err, next) { const client = tls.connect({ minDHSize: 2048, port: this.address().port, - rejectUnauthorized: false + rejectUnauthorized: false, + maxVersion: 'TLSv1.2', }, function() { nsuccess++; server.close(); diff --git a/test/parallel/test-tls-dhe.js b/test/parallel/test-tls-dhe.js index ef645ce1b6c..0d531a3d6f0 100644 --- a/test/parallel/test-tls-dhe.js +++ b/test/parallel/test-tls-dhe.js @@ -53,7 +53,8 @@ function test(keylen, expectedCipher, cb) { key: key, cert: cert, ciphers: ciphers, - dhparam: loadDHParam(keylen) + dhparam: loadDHParam(keylen), + maxVersion: 'TLSv1.2', }; const server = tls.createServer(options, function(conn) { diff --git a/test/parallel/test-tls-ecdh-auto.js b/test/parallel/test-tls-ecdh-auto.js index 7b535ecd3a1..1ca5c22335c 100644 --- a/test/parallel/test-tls-ecdh-auto.js +++ b/test/parallel/test-tls-ecdh-auto.js @@ -23,7 +23,8 @@ const options = { key: loadPEM('agent2-key'), cert: loadPEM('agent2-cert'), ciphers: '-ALL:ECDHE-RSA-AES128-SHA256', - ecdhCurve: 'auto' + ecdhCurve: 'auto', + maxVersion: 'TLSv1.2', }; const reply = 'I AM THE WALRUS'; // Something recognizable diff --git a/test/parallel/test-tls-ecdh-multiple.js b/test/parallel/test-tls-ecdh-multiple.js index 25e6314a54a..3cf02701f4d 100644 --- a/test/parallel/test-tls-ecdh-multiple.js +++ b/test/parallel/test-tls-ecdh-multiple.js @@ -23,7 +23,8 @@ const options = { key: loadPEM('agent2-key'), cert: loadPEM('agent2-cert'), ciphers: '-ALL:ECDHE-RSA-AES128-SHA256', - ecdhCurve: 'secp256k1:prime256v1:secp521r1' + ecdhCurve: 'secp256k1:prime256v1:secp521r1', + maxVersion: 'TLSv1.2', }; const reply = 'I AM THE WALRUS'; // Something recognizable diff --git a/test/parallel/test-tls-ecdh.js b/test/parallel/test-tls-ecdh.js index c0d2625a9a6..8c879f850c9 100644 --- a/test/parallel/test-tls-ecdh.js +++ b/test/parallel/test-tls-ecdh.js @@ -38,7 +38,8 @@ const options = { key: fixtures.readKey('agent2-key.pem'), cert: fixtures.readKey('agent2-cert.pem'), ciphers: '-ALL:ECDHE-RSA-AES128-SHA256', - ecdhCurve: 'prime256v1' + ecdhCurve: 'prime256v1', + maxVersion: 'TLSv1.2' }; const reply = 'I AM THE WALRUS'; // Something recognizable diff --git a/test/parallel/test-tls-env-extra-ca-file-load.js b/test/parallel/test-tls-env-extra-ca-file-load.js index 75d7c17c1f1..c66499a55d0 100644 --- a/test/parallel/test-tls-env-extra-ca-file-load.js +++ b/test/parallel/test-tls-env-extra-ca-file-load.js @@ -20,6 +20,8 @@ if (process.argv[2] !== 'child') { const NODE_EXTRA_CA_CERTS = fixtures.path('keys', 'ca1-cert.pem'); const extendsEnv = (obj) => ({ ...process.env, ...obj }); + // Remove any pre-existing extra CA certs. + delete process.env.NODE_EXTRA_CA_CERTS; [ extendsEnv({ CHILD_USE_EXTRA_CA_CERTS: 'yes', NODE_EXTRA_CA_CERTS }), extendsEnv({ CHILD_USE_EXTRA_CA_CERTS: 'no' }), diff --git a/test/parallel/test-tls-getcipher.js b/test/parallel/test-tls-getcipher.js index 744276aa59b..2a234d59016 100644 --- a/test/parallel/test-tls-getcipher.js +++ b/test/parallel/test-tls-getcipher.js @@ -48,7 +48,8 @@ server.listen(0, '127.0.0.1', common.mustCall(function() { host: '127.0.0.1', port: this.address().port, ciphers: 'AES128-SHA256', - rejectUnauthorized: false + rejectUnauthorized: false, + maxVersion: 'TLSv1.2', }, common.mustCall(function() { const cipher = this.getCipher(); assert.strictEqual(cipher.name, 'AES128-SHA256'); @@ -62,7 +63,8 @@ server.listen(0, '127.0.0.1', common.mustCall(function() { host: '127.0.0.1', port: this.address().port, ciphers: 'ECDHE-RSA-AES128-GCM-SHA256', - rejectUnauthorized: false + rejectUnauthorized: false, + maxVersion: 'TLSv1.2', }, common.mustCall(function() { const cipher = this.getCipher(); assert.strictEqual(cipher.name, 'ECDHE-RSA-AES128-GCM-SHA256'); diff --git a/test/parallel/test-tls-min-max-version.js b/test/parallel/test-tls-min-max-version.js index 8dbef1fa37a..ff337961f9a 100644 --- a/test/parallel/test-tls-min-max-version.js +++ b/test/parallel/test-tls-min-max-version.js @@ -97,6 +97,11 @@ test(U, U, 'hokey-pokey', U, U, U, test(U, U, U, U, U, 'hokey-pokey', U, U, 'ERR_TLS_INVALID_PROTOCOL_METHOD'); +// Regression test: this should not crash because node should not pass the error +// message (including unsanitized user input) to a printf-like function. +test(U, U, U, U, U, '%s_method', + U, U, 'ERR_TLS_INVALID_PROTOCOL_METHOD'); + // Cannot use secureProtocol and min/max versions simultaneously. test(U, U, U, U, 'TLSv1.2', 'TLS1_2_method', U, U, 'ERR_TLS_PROTOCOL_VERSION_CONFLICT'); diff --git a/test/parallel/test-tls-multi-key.js b/test/parallel/test-tls-multi-key.js index b9eaa05d59f..22a80d9d377 100644 --- a/test/parallel/test-tls-multi-key.js +++ b/test/parallel/test-tls-multi-key.js @@ -154,11 +154,12 @@ function test(options) { rejectUnauthorized: true, ca: clientTrustRoots, checkServerIdentity: (_, c) => assert.strictEqual(c.subject.CN, eccCN), + maxVersion: 'TLSv1.2' }, common.mustCall(function() { assert.deepStrictEqual(ecdsa.getCipher(), { name: 'ECDHE-ECDSA-AES256-GCM-SHA384', standardName: 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384', - version: 'TLSv1.2' + version: 'TLSv1.2', }); assert.strictEqual(ecdsa.getPeerCertificate().subject.CN, eccCN); assert.strictEqual(ecdsa.getPeerCertificate().asn1Curve, 'prime256v1'); @@ -173,11 +174,12 @@ function test(options) { rejectUnauthorized: true, ca: clientTrustRoots, checkServerIdentity: (_, c) => assert.strictEqual(c.subject.CN, rsaCN), + maxVersion: 'TLSv1.2', }, common.mustCall(function() { assert.deepStrictEqual(rsa.getCipher(), { name: 'ECDHE-RSA-AES256-GCM-SHA384', standardName: 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384', - version: 'TLSv1.2' + version: 'TLSv1.2', }); assert.strictEqual(rsa.getPeerCertificate().subject.CN, rsaCN); assert(rsa.getPeerCertificate().exponent, 'cert for an RSA key'); diff --git a/test/parallel/test-tls-multi-pfx.js b/test/parallel/test-tls-multi-pfx.js index f353183ce2f..80bd0d37281 100644 --- a/test/parallel/test-tls-multi-pfx.js +++ b/test/parallel/test-tls-multi-pfx.js @@ -24,12 +24,14 @@ const server = tls.createServer(options, function(conn) { }).listen(0, function() { const ecdsa = tls.connect(this.address().port, { ciphers: 'ECDHE-ECDSA-AES256-GCM-SHA384', - rejectUnauthorized: false + maxVersion: 'TLSv1.2', + rejectUnauthorized: false, }, common.mustCall(function() { ciphers.push(ecdsa.getCipher()); const rsa = tls.connect(server.address().port, { ciphers: 'ECDHE-RSA-AES256-GCM-SHA384', - rejectUnauthorized: false + maxVersion: 'TLSv1.2', + rejectUnauthorized: false, }, common.mustCall(function() { ciphers.push(rsa.getCipher()); ecdsa.end(); diff --git a/test/parallel/test-tls-securepair-leak.js b/test/parallel/test-tls-securepair-leak.js index 4cd927d64ac..98bdcde76ec 100644 --- a/test/parallel/test-tls-securepair-leak.js +++ b/test/parallel/test-tls-securepair-leak.js @@ -20,9 +20,9 @@ setImmediate(() => { global.gc(); const after = process.memoryUsage().external; - // It's not an exact science but a SecurePair grows .external by about 45 kB. + // It's not an exact science but a SecurePair grows .external by about 45 KiB. // Unless AdjustAmountOfExternalAllocatedMemory() is called on destruction, - // 10,000 instances make it grow by well over 400 MB. Allow for some slop + // 10,000 instances make it grow by well over 400 MiB. Allow for some slop // because objects like buffers also affect the external limit. assert(after - before < 25 << 20); }); diff --git a/test/parallel/test-tls-set-ciphers.js b/test/parallel/test-tls-set-ciphers.js index f08af9b089a..c2d9740201d 100644 --- a/test/parallel/test-tls-set-ciphers.js +++ b/test/parallel/test-tls-set-ciphers.js @@ -13,19 +13,31 @@ const { } = require(fixtures.path('tls-connect')); -function test(cciphers, sciphers, cipher, cerr, serr) { +function test(cciphers, sciphers, cipher, cerr, serr, options) { assert(cipher || cerr || serr, 'test missing any expectations'); const where = inspect(new Error()).split('\n')[2].replace(/[^(]*/, ''); + + const max_tls_ver = (ciphers, options) => { + if (options instanceof Object && Object.hasOwn(options, 'maxVersion')) + return options.maxVersion; + if ((typeof ciphers === 'string' || ciphers instanceof String) && ciphers.length > 0 && !ciphers.includes('TLS_')) + return 'TLSv1.2'; + + return 'TLSv1.3'; + }; + connect({ client: { checkServerIdentity: (servername, cert) => { }, ca: `${keys.agent1.cert}\n${keys.agent6.ca}`, ciphers: cciphers, + maxVersion: max_tls_ver(cciphers, options), }, server: { cert: keys.agent6.cert, key: keys.agent6.key, ciphers: sciphers, + maxVersion: max_tls_ver(sciphers, options), }, }, common.mustCall((err, pair, cleanup) => { function u(_) { return _ === undefined ? 'U' : _; } @@ -87,6 +99,13 @@ test('AES128-SHA:TLS_AES_256_GCM_SHA384', test('AES256-SHA:TLS_AES_256_GCM_SHA384', U, 'TLS_AES_256_GCM_SHA384'); test(U, 'AES256-SHA:TLS_AES_256_GCM_SHA384', 'TLS_AES_256_GCM_SHA384'); +// Cipher order ignored, TLS1.3 before TLS1.2 and +// cipher suites are not disabled if TLS ciphers are set only +// TODO: maybe these tests should be reworked so maxVersion clamping +// is done explicitly and not implicitly in the test() function +test('AES256-SHA', U, 'TLS_AES_256_GCM_SHA384', U, U, { maxVersion: 'TLSv1.3' }); +test(U, 'AES256-SHA', 'TLS_AES_256_GCM_SHA384', U, U, { maxVersion: 'TLSv1.3' }); + // TLS_AES_128_CCM_8_SHA256 & TLS_AES_128_CCM_SHA256 are not enabled by // default, but work. test('TLS_AES_128_CCM_8_SHA256', U, diff --git a/test/parallel/test-tls-set-secure-context.js b/test/parallel/test-tls-set-secure-context.js index d62b6b9f94f..c056875e14d 100644 --- a/test/parallel/test-tls-set-secure-context.js +++ b/test/parallel/test-tls-set-secure-context.js @@ -9,7 +9,9 @@ if (!common.hasCrypto) // secure context is changed. const assert = require('assert'); +const events = require('events'); const https = require('https'); +const timers = require('timers/promises'); const fixtures = require('../common/fixtures'); const credentialOptions = [ { @@ -43,10 +45,10 @@ server.listen(0, common.mustCall(() => { const { port } = server.address(); const firstRequest = makeRequest(port, 1); - async function makeRemainingRequests() { + (async function makeRemainingRequests() { // Wait until the first request is guaranteed to have been handled. - if (!firstResponse) { - return setImmediate(makeRemainingRequests); + while (!firstResponse) { + await timers.setImmediate(); } assert.strictEqual(await makeRequest(port, 2), 'success'); @@ -56,53 +58,38 @@ server.listen(0, common.mustCall(() => { const errorMessageRegex = common.hasOpenSSL3 ? /^Error: self-signed certificate$/ : /^Error: self signed certificate$/; - await assert.rejects(async () => { - await makeRequest(port, 3); - }, errorMessageRegex); + await assert.rejects(makeRequest(port, 3), errorMessageRegex); server.setSecureContext(credentialOptions[0]); assert.strictEqual(await makeRequest(port, 4), 'success'); server.setSecureContext(credentialOptions[1]); firstResponse.end('fun!'); - await assert.rejects(async () => { - await makeRequest(port, 5); - }, errorMessageRegex); + await assert.rejects(makeRequest(port, 5), errorMessageRegex); assert.strictEqual(await firstRequest, 'multi-request-success-fun!'); server.close(); - } - - makeRemainingRequests(); + })().then(common.mustCall()); })); -function makeRequest(port, id) { - return new Promise((resolve, reject) => { - const options = { - rejectUnauthorized: true, - ca: credentialOptions[0].ca, - servername: 'agent1', - headers: { id } - }; - - let errored = false; - https.get(`https://localhost:${port}`, options, (res) => { - let response = ''; - - res.setEncoding('utf8'); - - res.on('data', (chunk) => { - response += chunk; - }); - - res.on('end', common.mustCall(() => { - resolve(response); - })); - }).on('error', (err) => { - errored = true; - reject(err); - }).on('finish', () => { - assert.strictEqual(errored, false); - }); - }); +async function makeRequest(port, id) { + const options = { + rejectUnauthorized: true, + ca: credentialOptions[0].ca, + servername: 'agent1', + headers: { id }, + agent: new https.Agent() + }; + + const req = https.get(`https://localhost:${port}`, options); + + let errored = false; + req.on('error', () => errored = true); + req.on('finish', () => assert.strictEqual(errored, false)); + + const [res] = await events.once(req, 'response'); + res.setEncoding('utf8'); + let response = ''; + for await (const chunk of res) response += chunk; + return response; } diff --git a/test/parallel/test-trace-events-fs-async.js b/test/parallel/test-trace-events-fs-async.js new file mode 100644 index 00000000000..693214832a9 --- /dev/null +++ b/test/parallel/test-trace-events-fs-async.js @@ -0,0 +1,341 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const cp = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const util = require('util'); + +const tests = Object.create(null); + +let gid = 1; +let uid = 1; + +if (!common.isWindows) { + gid = process.getgid(); + uid = process.getuid(); +} + +function wrapper(func, args) { + return `(${func.toString()})(${JSON.stringify(args)})`; +} + +function access() { + const fs = require('fs'); + fs.writeFileSync('fs0.txt', '123', 'utf8'); + fs.access('fs0.txt', () => { + fs.unlinkSync('fs0.txt'); + }); +} + +function chmod() { + const fs = require('fs'); + fs.writeFileSync('fs1.txt', '123', 'utf8'); + fs.chmod('fs1.txt', 100, () => { + fs.unlinkSync('fs1.txt'); + }); +} + +function chown({ uid, gid }) { + const fs = require('fs'); + fs.writeFileSync('fs2.txt', '123', 'utf8'); + fs.chown('fs2.txt', uid, gid, () => { + fs.unlinkSync('fs2.txt'); + }); +} + +function close() { + const fs = require('fs'); + fs.writeFile('fs3.txt', '123', 'utf8', () => { + fs.unlinkSync('fs3.txt'); + }); +} + +function copyfile() { + const fs = require('fs'); + fs.writeFileSync('fs4.txt', '123', 'utf8'); + fs.copyFile('fs4.txt', 'a.txt', () => { + fs.unlinkSync('fs4.txt'); + fs.unlinkSync('a.txt'); + }); +} + +function fchmod() { + const fs = require('fs'); + fs.writeFileSync('fs5.txt', '123', 'utf8'); + const fd = fs.openSync('fs5.txt', 'r+'); + fs.fchmod(fd, 100, () => { + fs.unlinkSync('fs5.txt'); + }); +} + +function fchown({ uid, gid }) { + const fs = require('fs'); + fs.writeFileSync('fs6.txt', '123', 'utf8'); + const fd = fs.openSync('fs6.txt', 'r+'); + fs.fchown(fd, uid, gid, () => { + fs.unlinkSync('fs6.txt'); + }); +} + +function fdatasync() { + const fs = require('fs'); + fs.writeFileSync('fs7.txt', '123', 'utf8'); + const fd = fs.openSync('fs7.txt', 'r+'); + fs.fdatasync(fd, () => { + fs.unlinkSync('fs7.txt'); + }); +} + +function fstat() { + const fs = require('fs'); + fs.writeFileSync('fs8.txt', '123', 'utf8'); + fs.readFile('fs8.txt', () => { + fs.unlinkSync('fs8.txt'); + }); +} + +function fsync() { + const fs = require('fs'); + fs.writeFileSync('fs9.txt', '123', 'utf8'); + const fd = fs.openSync('fs9.txt', 'r+'); + fs.fsync(fd, () => { + fs.unlinkSync('fs9.txt'); + }); +} + +function ftruncate() { + const fs = require('fs'); + fs.writeFileSync('fs10.txt', '123', 'utf8'); + const fd = fs.openSync('fs10.txt', 'r+'); + fs.ftruncate(fd, 1, () => { + fs.unlinkSync('fs10.txt'); + }); +} + +function futime() { + const fs = require('fs'); + fs.writeFileSync('fs11.txt', '123', 'utf8'); + const fd = fs.openSync('fs11.txt', 'r+'); + fs.futimes(fd, 1, 1, () => { + fs.unlinkSync('fs11.txt'); + }); +} + +function lutime() { + const fs = require('fs'); + fs.writeFileSync('fs111.txt', '123', 'utf8'); + fs.lutimes('fs111.txt', 1, 1, () => { + fs.unlinkSync('fs111.txt'); + }); +} + +function lchown({ uid, gid }) { + const fs = require('fs'); + fs.writeFileSync('fs12.txt', '123', 'utf8'); + fs.lchown('fs12.txt', uid, gid, () => { + fs.unlinkSync('fs12.txt'); + }); +} + +function link() { + const fs = require('fs'); + fs.writeFileSync('fs13.txt', '123', 'utf8'); + fs.link('fs13.txt', 'fs14.txt', () => { + fs.unlinkSync('fs13.txt'); + fs.unlinkSync('fs14.txt'); + }); +} + +function lstat() { + const fs = require('fs'); + fs.writeFileSync('fs15.txt', '123', 'utf8'); + fs.lstat('fs15.txt', () => { + fs.unlinkSync('fs15.txt'); + }); +} + +function mkdir() { + const fs = require('fs'); + fs.mkdir('fstemp0', () => { + fs.rmdir('fstemp0', () => {}); + }); +} + +function mktmp() { + fs.mkdtemp('fstemp1', (err, fp) => { + fs.rmdir(fp, () => {}); + }); +} + +function open() { + const fs = require('fs'); + fs.writeFile('fs16.txt', '123', 'utf8', () => { + fs.unlinkSync('fs16.txt'); + }); +} + +function read() { + const fs = require('fs'); + fs.writeFileSync('fs17.txt', '123', 'utf8'); + fs.readFile('fs17.txt', () => { + fs.unlinkSync('fs17.txt'); + }); +} + +function readdir() { + const fs = require('fs'); + fs.readdir('./', () => {}); +} + +function opendir() { + const fs = require('fs'); + fs.opendir('./', () => {}); +} + +function realpath() { + const fs = require('fs'); + fs.writeFileSync('fs18.txt', '123', 'utf8'); + fs.linkSync('fs18.txt', 'fs19.txt'); + fs.realpath.native('fs19.txt', () => { + fs.unlinkSync('fs18.txt'); + fs.unlinkSync('fs19.txt'); + }); +} + +function rename() { + const fs = require('fs'); + fs.writeFileSync('fs20.txt', '123', 'utf8'); + fs.rename('fs20.txt', 'fs21.txt', () => { + fs.unlinkSync('fs21.txt'); + }); +} + +function rmdir() { + const fs = require('fs'); + fs.mkdirSync('fstemp2'); + fs.rmdir('fstemp2', () => {}); +} + +function stat() { + const fs = require('fs'); + fs.writeFileSync('fs22.txt', '123', 'utf8'); + fs.stat('fs22.txt', () => { + fs.unlinkSync('fs22.txt'); + }); +} + +function unlink() { + const fs = require('fs'); + fs.writeFileSync('fs23.txt', '123', 'utf8'); + fs.linkSync('fs23.txt', 'fs24.txt'); + fs.unlink('fs23.txt', () => {}); + fs.unlink('fs24.txt', () => {}); +} + +function utime() { + const fs = require('fs'); + fs.writeFileSync('fs25.txt', '123', 'utf8'); + fs.utimes('fs25.txt', 1, 1, () => { + fs.unlinkSync('fs25.txt'); + }); +} + +function write() { + const fs = require('fs'); + fs.writeFile('fs26.txt', '123', 'utf8', () => { + fs.unlinkSync('fs26.txt'); + }); +} + +function symlink() { + const fs = require('fs'); + fs.writeFileSync('fs27.txt', '123', 'utf8'); + fs.symlink('fs27.txt', 'fs28.txt', () => { + fs.unlinkSync('fs27.txt'); + fs.unlinkSync('fs28.txt'); + }); +} + +function readlink() { + const fs = require('fs'); + fs.writeFileSync('fs29.txt', '123', 'utf8'); + fs.symlinkSync('fs29.txt', 'fs30.txt'); + fs.readlink('fs30.txt', () => { + fs.unlinkSync('fs29.txt'); + fs.unlinkSync('fs30.txt'); + }); +} +// The key defined in get_fs_name_by_type function in node_file.cc and node_dir.cc +tests.access = wrapper(access); +tests.chmod = wrapper(chmod); +tests.chown = wrapper(chown, { uid, gid }); +tests.close = wrapper(close); +tests.copyfile = wrapper(copyfile); +tests.fchmod = wrapper(fchmod); +tests.fchown = wrapper(fchown, { uid, gid }); +tests.fdatasync = wrapper(fdatasync); +tests.fstat = wrapper(fstat); +tests.fsync = wrapper(fsync); +tests.ftruncate = wrapper(ftruncate); +tests.futime = wrapper(futime); +tests.lutime = wrapper(lutime); +tests.lchown = wrapper(lchown, { uid, gid }); +tests.link = wrapper(link); +tests.lstat = wrapper(lstat); +tests.mkdir = wrapper(mkdir); +tests.mkdtemp = wrapper(mktmp); +tests.open = wrapper(open); +tests.read = wrapper(read); +tests.scandir = wrapper(readdir); +tests.opendir = wrapper(opendir); +tests.realpath = wrapper(realpath); +tests.rename = wrapper(rename); +tests.rmdir = wrapper(rmdir); +tests.stat = wrapper(stat); +tests.unlink = wrapper(unlink); +tests.utime = wrapper(utime); +tests.write = wrapper(write); + +// On windows, we need permissions to test symlink and readlink. +// We'll only try to run these tests if we have enough privileges. +if (common.canCreateSymLink()) { + tests.symlink = wrapper(symlink); + tests.readlink = wrapper(readlink); +} +const tmpdir = require('../common/tmpdir'); +tmpdir.refresh(); +const traceFile = path.join(tmpdir.path, 'node_trace.1.log'); + +for (const tr in tests) { + const proc = cp.spawnSync(process.execPath, + [ '--trace-events-enabled', + '--trace-event-categories', 'node.fs_dir.async,node.fs.async', + '-e', tests[tr] ], + { cwd: tmpdir.path, encoding: 'utf8' }); + + // Make sure the operation is successful. + // Don't use assert with a custom message here. Otherwise the + // inspection in the message is done eagerly and wastes a lot of CPU + // time. + if (proc.status !== 0) { + throw new Error(`${tr}:\n${util.inspect(proc)}`); + } + + // Confirm that trace log file is created. + assert(fs.existsSync(traceFile)); + const data = fs.readFileSync(traceFile); + const { traceEvents } = JSON.parse(data.toString()); + // Confirm that the data we want is produced + const traces = traceEvents.filter((item) => { + return [ + 'node,node.fs,node.fs.async', + 'node,node.fs_dir,node.fs_dir.async', + ].includes(item.cat); + }); + // Confirm that the data we want is produced + assert(traces.length > 0); + assert(traces.some((trace) => { + return trace.name === tr; + })); +} diff --git a/test/parallel/test-trace-events-fs-sync.js b/test/parallel/test-trace-events-fs-sync.js index 78a5059bc91..14c6a122dd2 100644 --- a/test/parallel/test-trace-events-fs-sync.js +++ b/test/parallel/test-trace-events-fs-sync.js @@ -6,7 +6,7 @@ const fs = require('fs'); const path = require('path'); const util = require('util'); -const tests = new Array(); +const tests = Object.create(null); let gid = 1; let uid = 1; @@ -16,102 +16,102 @@ if (!common.isWindows) { uid = process.getuid(); } -tests['fs.sync.access'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.accessSync("fs.txt");' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.chmod'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.chmodSync("fs.txt",100);' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.chown'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - `fs.chownSync("fs.txt", ${uid}, ${gid});` + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.close'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.copyfile'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.copyFileSync("fs.txt","a.txt");' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.fchmod'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'const fd = fs.openSync("fs.txt", "r+");' + +tests['fs.sync.access'] = 'fs.writeFileSync("fs0.txt", "123", "utf8");' + + 'fs.accessSync("fs0.txt");' + + 'fs.unlinkSync("fs0.txt")'; +tests['fs.sync.chmod'] = 'fs.writeFileSync("fs1.txt", "123", "utf8");' + + 'fs.chmodSync("fs1.txt",100);' + + 'fs.unlinkSync("fs1.txt")'; +tests['fs.sync.chown'] = 'fs.writeFileSync("fs2.txt", "123", "utf8");' + + `fs.chownSync("fs2.txt", ${uid}, ${gid});` + + 'fs.unlinkSync("fs2.txt")'; +tests['fs.sync.close'] = 'fs.writeFileSync("fs3.txt", "123", "utf8");' + + 'fs.unlinkSync("fs3.txt")'; +tests['fs.sync.copyfile'] = 'fs.writeFileSync("fs4.txt", "123", "utf8");' + + 'fs.copyFileSync("fs4.txt","a.txt");' + + 'fs.unlinkSync("fs4.txt")'; +tests['fs.sync.fchmod'] = 'fs.writeFileSync("fs5.txt", "123", "utf8");' + + 'const fd = fs.openSync("fs5.txt", "r+");' + 'fs.fchmodSync(fd,100);' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.fchown'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'const fd = fs.openSync("fs.txt", "r+");' + + 'fs.unlinkSync("fs5.txt")'; +tests['fs.sync.fchown'] = 'fs.writeFileSync("fs6.txt", "123", "utf8");' + + 'const fd = fs.openSync("fs6.txt", "r+");' + `fs.fchownSync(fd, ${uid}, ${gid});` + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.fdatasync'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'const fd = fs.openSync("fs.txt", "r+");' + + 'fs.unlinkSync("fs6.txt")'; +tests['fs.sync.fdatasync'] = 'fs.writeFileSync("fs7.txt", "123", "utf8");' + + 'const fd = fs.openSync("fs7.txt", "r+");' + 'fs.fdatasyncSync(fd);' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.fstat'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.readFileSync("fs.txt");' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.fsync'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'const fd = fs.openSync("fs.txt", "r+");' + + 'fs.unlinkSync("fs7.txt")'; +tests['fs.sync.fstat'] = 'fs.writeFileSync("fs8.txt", "123", "utf8");' + + 'fs.readFileSync("fs8.txt");' + + 'fs.unlinkSync("fs8.txt")'; +tests['fs.sync.fsync'] = 'fs.writeFileSync("fs9.txt", "123", "utf8");' + + 'const fd = fs.openSync("fs9.txt", "r+");' + 'fs.fsyncSync(fd);' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.ftruncate'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'const fd = fs.openSync("fs.txt", "r+");' + + 'fs.unlinkSync("fs9.txt")'; +tests['fs.sync.ftruncate'] = 'fs.writeFileSync("fs10.txt", "123", "utf8");' + + 'const fd = fs.openSync("fs10.txt", "r+");' + 'fs.ftruncateSync(fd, 1);' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.futimes'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'const fd = fs.openSync("fs.txt", "r+");' + + 'fs.unlinkSync("fs10.txt")'; +tests['fs.sync.futimes'] = 'fs.writeFileSync("fs11.txt", "123", "utf8");' + + 'const fd = fs.openSync("fs11.txt", "r+");' + 'fs.futimesSync(fd,1,1);' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.lchown'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - `fs.lchownSync("fs.txt", ${uid}, ${gid});` + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.link'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.linkSync("fs.txt", "linkx");' + - 'fs.unlinkSync("linkx");' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.lstat'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.lstatSync("fs.txt");' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.mkdir'] = 'fs.mkdirSync("fstemp");' + - 'fs.rmdirSync("fstemp")'; -tests['fs.sync.mkdtemp'] = 'const fp = fs.mkdtempSync("fstest");' + + 'fs.unlinkSync("fs11.txt")'; +tests['fs.sync.lchown'] = 'fs.writeFileSync("fs12.txt", "123", "utf8");' + + `fs.lchownSync("fs12.txt", ${uid}, ${gid});` + + 'fs.unlinkSync("fs12.txt")'; +tests['fs.sync.link'] = 'fs.writeFileSync("fs13.txt", "123", "utf8");' + + 'fs.linkSync("fs13.txt", "fs14.txt");' + + 'fs.unlinkSync("fs13.txt");' + + 'fs.unlinkSync("fs14.txt")'; +tests['fs.sync.lstat'] = 'fs.writeFileSync("fs15.txt", "123", "utf8");' + + 'fs.lstatSync("fs15.txt");' + + 'fs.unlinkSync("fs15.txt")'; +tests['fs.sync.mkdir'] = 'fs.mkdirSync("fstemp0");' + + 'fs.rmdirSync("fstemp0")'; +tests['fs.sync.mkdtemp'] = 'const fp = fs.mkdtempSync("fstemp1");' + 'fs.rmdirSync(fp)'; -tests['fs.sync.open'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.read'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.readFileSync("fs.txt");' + - 'fs.unlinkSync("fs.txt")'; +tests['fs.sync.open'] = 'fs.writeFileSync("fs16.txt", "123", "utf8");' + + 'fs.unlinkSync("fs16.txt")'; +tests['fs.sync.read'] = 'fs.writeFileSync("fs17.txt", "123", "utf8");' + + 'fs.readFileSync("fs17.txt");' + + 'fs.unlinkSync("fs17.txt")'; tests['fs.sync.readdir'] = 'fs.readdirSync("./")'; -tests['fs.sync.realpath'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.linkSync("fs.txt", "linkx");' + - 'fs.realpathSync.native("linkx");' + - 'fs.unlinkSync("linkx");' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.rename'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.renameSync("fs.txt","xyz.txt"); ' + - 'fs.unlinkSync("xyz.txt")'; -tests['fs.sync.rmdir'] = 'fs.mkdirSync("fstemp");' + - 'fs.rmdirSync("fstemp")'; -tests['fs.sync.stat'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.statSync("fs.txt");' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.unlink'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.linkSync("fs.txt", "linkx");' + - 'fs.unlinkSync("linkx");' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.utimes'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.utimesSync("fs.txt",1,1);' + - 'fs.unlinkSync("fs.txt")'; -tests['fs.sync.write'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.unlinkSync("fs.txt")'; +tests['fs.sync.realpath'] = 'fs.writeFileSync("fs18.txt", "123", "utf8");' + + 'fs.linkSync("fs18.txt", "fs19.txt");' + + 'fs.realpathSync.native("fs19.txt");' + + 'fs.unlinkSync("fs18.txt");' + + 'fs.unlinkSync("fs19.txt")'; +tests['fs.sync.rename'] = 'fs.writeFileSync("fs20.txt", "123", "utf8");' + + 'fs.renameSync("fs20.txt","fs21.txt"); ' + + 'fs.unlinkSync("fs21.txt")'; +tests['fs.sync.rmdir'] = 'fs.mkdirSync("fstemp2");' + + 'fs.rmdirSync("fstemp2")'; +tests['fs.sync.stat'] = 'fs.writeFileSync("fs22.txt", "123", "utf8");' + + 'fs.statSync("fs22.txt");' + + 'fs.unlinkSync("fs22.txt")'; +tests['fs.sync.unlink'] = 'fs.writeFileSync("fs23.txt", "123", "utf8");' + + 'fs.linkSync("fs23.txt", "fs24.txt");' + + 'fs.unlinkSync("fs23.txt");' + + 'fs.unlinkSync("fs24.txt")'; +tests['fs.sync.utimes'] = 'fs.writeFileSync("fs25.txt", "123", "utf8");' + + 'fs.utimesSync("fs25.txt",1,1);' + + 'fs.unlinkSync("fs25.txt")'; +tests['fs.sync.write'] = 'fs.writeFileSync("fs26.txt", "123", "utf8");' + + 'fs.unlinkSync("fs26.txt")'; // On windows, we need permissions to test symlink and readlink. // We'll only try to run these tests if we have enough privileges. if (common.canCreateSymLink()) { - tests['fs.sync.symlink'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.symlinkSync("fs.txt", "linkx");' + - 'fs.unlinkSync("linkx");' + - 'fs.unlinkSync("fs.txt")'; - tests['fs.sync.readlink'] = 'fs.writeFileSync("fs.txt", "123", "utf8");' + - 'fs.symlinkSync("fs.txt", "linkx");' + - 'fs.readlinkSync("linkx");' + - 'fs.unlinkSync("linkx");' + - 'fs.unlinkSync("fs.txt")'; + tests['fs.sync.symlink'] = 'fs.writeFileSync("fs27.txt", "123", "utf8");' + + 'fs.symlinkSync("fs27.txt", "fs28.txt");' + + 'fs.unlinkSync("fs27.txt");' + + 'fs.unlinkSync("fs28.txt")'; + tests['fs.sync.readlink'] = 'fs.writeFileSync("fs29.txt", "123", "utf8");' + + 'fs.symlinkSync("fs29.txt", "fs30.txt");' + + 'fs.readlinkSync("fs30.txt");' + + 'fs.unlinkSync("fs29.txt");' + + 'fs.unlinkSync("fs30.txt")'; } const tmpdir = require('../common/tmpdir'); diff --git a/test/parallel/test-trace-events-http.js b/test/parallel/test-trace-events-http.js new file mode 100644 index 00000000000..54e3d4f06e4 --- /dev/null +++ b/test/parallel/test-trace-events-http.js @@ -0,0 +1,44 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const cp = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const tmpdir = require('../common/tmpdir'); + +const CODE = ` + const http = require('http'); + const server = http.createServer((req, res) => { + res.end('ok'); + server.close(); + }).listen(0, () => { + http.get({port: server.address().port}); + }); +`; + +tmpdir.refresh(); +const FILE_NAME = path.join(tmpdir.path, 'node_trace.1.log'); + +const proc = cp.spawn(process.execPath, + [ '--trace-events-enabled', + '--trace-event-categories', 'node.http', + '-e', CODE ], + { cwd: tmpdir.path }); + +proc.once('exit', common.mustCall(() => { + assert(fs.existsSync(FILE_NAME)); + fs.readFile(FILE_NAME, common.mustCall((err, data) => { + assert(!err); + const traces = JSON.parse(data.toString()).traceEvents; + assert(traces.length > 0); + let count = 0; + traces.forEach((trace) => { + if (trace.cat === 'node,node.http' && + ['http.server.request', 'http.client.request'].includes(trace.name)) { + count++; + } + }); + // Two begin, two end + assert.strictEqual(count, 4); + })); +})); diff --git a/test/parallel/test-trace-events-net.js b/test/parallel/test-trace-events-net.js new file mode 100644 index 00000000000..227c168c013 --- /dev/null +++ b/test/parallel/test-trace-events-net.js @@ -0,0 +1,45 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const cp = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const tmpdir = require('../common/tmpdir'); + +const CODE = ` + const net = require('net'); + const socket = net.connect('${common.PIPE}'); + socket.on('error', () => {}); + const server = net.createServer((socket) => { + socket.destroy(); + server.close(); + }).listen(0, () => { + net.connect(server.address().port); + }); +`; + +tmpdir.refresh(); +const FILE_NAME = path.join(tmpdir.path, 'node_trace.1.log'); + +const proc = cp.spawn(process.execPath, + [ '--trace-events-enabled', + '--trace-event-categories', 'node.net.native', + '-e', CODE ], + { cwd: tmpdir.path }); + +proc.once('exit', common.mustCall(() => { + assert(fs.existsSync(FILE_NAME)); + fs.readFile(FILE_NAME, common.mustCall((err, data) => { + const traces = JSON.parse(data.toString()).traceEvents; + assert(traces.length > 0); + let count = 0; + traces.forEach((trace) => { + if (trace.cat === 'node,node.net,node.net.native' && + trace.name === 'connect') { + count++; + } + }); + // Two begin, two end + assert.strictEqual(count, 4); + })); +})); diff --git a/test/parallel/test-trace-events-vm.js b/test/parallel/test-trace-events-vm.js index b3d3a403bec..e7c5fb0bc0e 100644 --- a/test/parallel/test-trace-events-vm.js +++ b/test/parallel/test-trace-events-vm.js @@ -8,7 +8,6 @@ const tmpdir = require('../common/tmpdir'); const names = [ 'ContextifyScript::New', - 'RunInThisContext', 'RunInContext', ]; diff --git a/test/parallel/test-tz-version.js b/test/parallel/test-tz-version.js new file mode 100644 index 00000000000..6e4b14e1ac1 --- /dev/null +++ b/test/parallel/test-tz-version.js @@ -0,0 +1,28 @@ +'use strict'; + +const common = require('../common'); + +if (!common.hasIntl) { + common.skip('missing Intl'); +} + +// Refs: https://github.com/nodejs/node/blob/1af63a90ca3a59ca05b3a12ad7dbea04008db7d9/configure.py#L1694-L1711 +if (process.config.variables.icu_path !== 'deps/icu-small') { + // If Node.js is configured to use its built-in ICU, it uses a strict subset + // of ICU formed using `tools/icu/shrink-icu-src.py`, which is present in + // `deps/icu-small`. It is not the same as configuring the build with + // `./configure --with-intl=small-icu`. The latter only uses a subset of the + // locales, i.e., it uses the English locale, `root,en`, by default and other + // locales can also be specified using the `--with-icu-locales` option. + common.skip('not using the icu data file present in deps/icu-small/source/data/in/icudt##l.dat.bz2'); +} + +const fixtures = require('../common/fixtures'); + +// This test ensures the correctness of the automated timezone upgrade PRs. + +const { strictEqual } = require('assert'); +const { readFileSync } = require('fs'); + +const expectedVersion = readFileSync(fixtures.path('tz-version.txt'), 'utf8').trim(); +strictEqual(process.versions.tz, expectedVersion); diff --git a/test/parallel/test-util-inspect-proxy.js b/test/parallel/test-util-inspect-proxy.js index 3e1341fadfc..6344adae990 100644 --- a/test/parallel/test-util-inspect-proxy.js +++ b/test/parallel/test-util-inspect-proxy.js @@ -57,6 +57,27 @@ assert.strictEqual(handler, details[1]); details = processUtil.getProxyDetails(proxyObj, false); assert.strictEqual(target, details); +details = processUtil.getProxyDetails({}, true); +assert.strictEqual(details, undefined); + +const r = Proxy.revocable({}, {}); +r.revoke(); + +details = processUtil.getProxyDetails(r.proxy, true); +assert.strictEqual(details[0], null); +assert.strictEqual(details[1], null); + +details = processUtil.getProxyDetails(r.proxy, false); +assert.strictEqual(details, null); + +assert.strictEqual(util.inspect(r.proxy), ''); +assert.strictEqual( + util.inspect(r, { showProxy: true }), + '{ proxy: , revoke: [Function (anonymous)] }', +); + +assert.strictEqual(util.format('%s', r.proxy), ''); + assert.strictEqual( util.inspect(proxyObj, opts), 'Proxy [\n' + diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js index 43913c3ab4c..57f8dd06400 100644 --- a/test/parallel/test-util-inspect.js +++ b/test/parallel/test-util-inspect.js @@ -30,6 +30,7 @@ const v8 = require('v8'); const { previewEntries } = internalBinding('util'); const { inspect } = util; const { MessageChannel } = require('worker_threads'); +const url = require('url'); assert.strictEqual(util.inspect(1), '1'); assert.strictEqual(util.inspect(false), 'false'); @@ -897,7 +898,7 @@ assert.strictEqual(util.inspect(Object.create(Date.prototype)), 'Date {}'); // Test util.inspect.styles and util.inspect.colors. { - function testColorStyle(style, input, implicit) { + function testColorStyle(style, input) { const colorName = util.inspect.styles[style]; let color = ['', '']; if (util.inspect.colors[colorName]) @@ -1171,6 +1172,7 @@ if (typeof Symbol !== 'undefined') { { assert.strictEqual(util.inspect(new Set()), 'Set(0) {}'); assert.strictEqual(util.inspect(new Set([1, 2, 3])), 'Set(3) { 1, 2, 3 }'); + assert.strictEqual(util.inspect(new Set([1, 2, 3]), { maxArrayLength: 1 }), 'Set(3) { 1, ... 2 more items }'); const set = new Set(['foo']); set.bar = 42; assert.strictEqual( @@ -1191,6 +1193,8 @@ if (typeof Symbol !== 'undefined') { assert.strictEqual(util.inspect(new Map()), 'Map(0) {}'); assert.strictEqual(util.inspect(new Map([[1, 'a'], [2, 'b'], [3, 'c']])), "Map(3) { 1 => 'a', 2 => 'b', 3 => 'c' }"); + assert.strictEqual(util.inspect(new Map([[1, 'a'], [2, 'b'], [3, 'c']]), { maxArrayLength: 1 }), + "Map(3) { 1 => 'a', ... 2 more items }"); const map = new Map([['foo', null]]); map.bar = 42; assert.strictEqual(util.inspect(map, true), @@ -1396,6 +1400,9 @@ if (typeof Symbol !== 'undefined') { class SetSubclass extends Set {} class MapSubclass extends Map {} class PromiseSubclass extends Promise {} + class SymbolNameClass { + static name = Symbol('name'); + } const x = new ObjectSubclass(); x.foo = 42; @@ -1409,6 +1416,8 @@ if (typeof Symbol !== 'undefined') { "MapSubclass(1) [Map] { 'foo' => 42 }"); assert.strictEqual(util.inspect(new PromiseSubclass(() => {})), 'PromiseSubclass [Promise] { }'); + assert.strictEqual(util.inspect(new SymbolNameClass()), + 'Symbol(name) {}'); assert.strictEqual( util.inspect({ a: { b: new ArraySubclass([1, [2], 3]) } }, { depth: 1 }), '{ a: { b: [ArraySubclass] } }' @@ -2806,9 +2815,15 @@ assert.strictEqual( } { + const originalCWD = process.cwd(); + + process.cwd = () => (process.platform === 'win32' ? + 'C:\\workspace\\node-test-binary-windows js-suites-%percent-encoded\\node' : + '/home/user directory/repository%encoded/node'); + // Use a fake stack to verify the expected colored outcome. const stack = [ - 'TypedError: Wonderful message!', + 'Error: CWD is grayed out, even cwd that are percent encoded!', ' at A. (/test/node_modules/foo/node_modules/bar/baz.js:2:7)', ' at Module._compile (node:internal/modules/cjs/loader:827:30)', ' at Fancy (node:vm:697:32)', @@ -2818,23 +2833,78 @@ assert.strictEqual( // This file is not an actual Node.js core file. ' at Module.require [as weird/name] (node:internal/aaaaa/loader:735:19)', ' at require (node:internal/modules/cjs/helpers:14:16)', + ' at Array.forEach ()', + ` at ${process.cwd()}/test/parallel/test-util-inspect.js:2760:12`, + ` at Object. (${process.cwd()}/node_modules/hyper_module/folder/file.js:2753:10)`, ' at /test/test-util-inspect.js:2239:9', ' at getActual (node:assert:592:5)', ]; - const isNodeCoreFile = [ - false, false, true, true, false, true, false, true, false, true, - ]; - const err = new TypeError('Wonderful message!'); + const err = new Error('CWD is grayed out, even cwd that are percent encoded!'); err.stack = stack.join('\n'); + if (process.platform === 'win32') { + err.stack = stack.map((frame) => (frame.includes('node:') ? + frame : + frame.replaceAll('/', '\\')) + ).join('\n'); + } + const escapedCWD = util.inspect(process.cwd()).slice(1, -1); util.inspect(err, { colors: true }).split('\n').forEach((line, i) => { - let actual = stack[i].replace(/node_modules\/([a-z]+)/g, (a, m) => { + let expected = stack[i].replace(/node_modules\/([^/]+)/gi, (_, m) => { return `node_modules/\u001b[4m${m}\u001b[24m`; + }).replaceAll(new RegExp(`(\\(?${escapedCWD}(\\\\|/))`, 'gi'), (_, m) => { + return `\x1B[90m${m}\x1B[39m`; }); - if (isNodeCoreFile[i]) { - actual = `\u001b[90m${actual}\u001b[39m`; + if (expected.includes(process.cwd()) && expected.endsWith(')')) { + expected = `${expected.slice(0, -1)}\x1B[90m)\x1B[39m`; } - assert.strictEqual(actual, line); + if (line.includes('node:')) { + if (!line.includes('foo') && !line.includes('aaa')) { + expected = `\u001b[90m${expected}\u001b[39m`; + } + } else if (process.platform === 'win32') { + expected = expected.replaceAll('/', '\\'); + } + assert.strictEqual(line, expected); }); + + // Check ESM + const encodedCwd = url.pathToFileURL(process.cwd()); + const sl = process.platform === 'win32' ? '\\' : '/'; + + // Use a fake stack to verify the expected colored outcome. + err.stack = 'Error: ESM and CJS mixed are both grayed out!\n' + + ` at ${encodedCwd}/test/parallel/test-esm.mjs:2760:12\n` + + ` at Object. (${encodedCwd}/node_modules/esm_module/folder/file.js:2753:10)\n` + + ` at ${process.cwd()}${sl}test${sl}parallel${sl}test-cjs.js:2760:12\n` + + ` at Object. (${process.cwd()}${sl}node_modules${sl}cjs_module${sl}folder${sl}file.js:2753:10)`; + + let actual = util.inspect(err, { colors: true }); + let expected = 'Error: ESM and CJS mixed are both grayed out!\n' + + ` at \x1B[90m${encodedCwd}/\x1B[39mtest/parallel/test-esm.mjs:2760:12\n` + + ` at Object. \x1B[90m(${encodedCwd}/\x1B[39mnode_modules/\x1B[4mesm_module\x1B[24m/folder/file.js:2753:10\x1B[90m)\x1B[39m\n` + + ` at \x1B[90m${process.cwd()}${sl}\x1B[39mtest${sl}parallel${sl}test-cjs.js:2760:12\n` + + ` at Object. \x1B[90m(${process.cwd()}${sl}\x1B[39mnode_modules${sl}\x1B[4mcjs_module\x1B[24m${sl}folder${sl}file.js:2753:10\x1B[90m)\x1B[39m`; + + assert.strictEqual(actual, expected); + + // ESM without need for encoding + process.cwd = () => (process.platform === 'win32' ? + 'C:\\workspace\\node-test-binary-windows-js-suites\\node' : + '/home/user/repository/node'); + let expectedCwd = process.cwd(); + if (process.platform === 'win32') { + expectedCwd = `/${expectedCwd.replaceAll('\\', '/')}`; + } + // Use a fake stack to verify the expected colored outcome. + err.stack = 'Error: ESM without need for encoding!\n' + + ` at file://${expectedCwd}/file.js:15:15`; + + actual = util.inspect(err, { colors: true }); + expected = 'Error: ESM without need for encoding!\n' + + ` at \x1B[90mfile://${expectedCwd}/\x1B[39mfile.js:15:15`; + assert.strictEqual(actual, expected); + + process.cwd = originalCWD; } { @@ -3235,3 +3305,12 @@ assert.strictEqual( '-123_456_789.123_456_78' ); } + +// Regression test for https://github.com/nodejs/node/issues/41244 +{ + assert.strictEqual(util.inspect({ + get [Symbol.iterator]() { + throw new Error(); + } + }), '{ [Symbol(Symbol.iterator)]: [Getter] }'); +} diff --git a/test/parallel/test-util-promisify-custom-names.mjs b/test/parallel/test-util-promisify-custom-names.mjs new file mode 100644 index 00000000000..3ff05d907b5 --- /dev/null +++ b/test/parallel/test-util-promisify-custom-names.mjs @@ -0,0 +1,40 @@ +import '../common/index.mjs'; +import assert from 'node:assert'; +import { promisify } from 'node:util'; + +// Test that customly promisified methods in [util.promisify.custom] +// have appropriate names + +import fs from 'node:fs'; +import readline from 'node:readline'; +import stream from 'node:stream'; +import timers from 'node:timers'; + + +assert.strictEqual( + promisify(fs.exists).name, + 'exists' +); + +assert.strictEqual( + promisify(readline.Interface.prototype.question).name, + 'question', +); + +assert.strictEqual( + promisify(stream.finished).name, + 'finished' +); +assert.strictEqual( + promisify(stream.pipeline).name, + 'pipeline' +); + +assert.strictEqual( + promisify(timers.setImmediate).name, + 'setImmediate' +); +assert.strictEqual( + promisify(timers.setTimeout).name, + 'setTimeout' +); diff --git a/test/parallel/test-uv-errno.js b/test/parallel/test-uv-errno.js index e46b365e4b6..f30518fb474 100644 --- a/test/parallel/test-uv-errno.js +++ b/test/parallel/test-uv-errno.js @@ -12,6 +12,8 @@ const { internalBinding } = require('internal/test/binding'); const uv = internalBinding('uv'); const keys = Object.keys(uv); +assert.strictEqual(uv.errname(-111111), 'Unknown system error -111111'); + keys.forEach((key) => { if (!key.startsWith('UV_')) return; diff --git a/test/parallel/test-v8-serdes.js b/test/parallel/test-v8-serdes.js index 4dffedd3c32..ef9ef5945db 100644 --- a/test/parallel/test-v8-serdes.js +++ b/test/parallel/test-v8-serdes.js @@ -14,10 +14,18 @@ circular.circular = circular; const objects = [ { foo: 'bar' }, { bar: 'baz' }, + new Int8Array([1, 2, 3, 4]), new Uint8Array([1, 2, 3, 4]), + new Int16Array([1, 2, 3, 4]), + new Uint16Array([1, 2, 3, 4]), + new Int32Array([1, 2, 3, 4]), new Uint32Array([1, 2, 3, 4]), + new Float32Array([1, 2, 3, 4]), + new Float64Array([1, 2, 3, 4]), new DataView(new ArrayBuffer(42)), Buffer.from([1, 2, 3, 4]), + new BigInt64Array([42n]), + new BigUint64Array([42n]), undefined, null, 42, diff --git a/test/parallel/test-v8-serialize-leak.js b/test/parallel/test-v8-serialize-leak.js new file mode 100644 index 00000000000..a90c398adcd --- /dev/null +++ b/test/parallel/test-v8-serialize-leak.js @@ -0,0 +1,27 @@ +'use strict'; +// Flags: --expose-gc + +const common = require('../common'); + +// On IBMi, the rss memory always returns zero +if (common.isIBMi) + common.skip('On IBMi, the rss memory always returns zero'); + +const v8 = require('v8'); +const assert = require('assert'); + +const before = process.memoryUsage.rss(); + +for (let i = 0; i < 1000000; i++) { + v8.serialize(''); +} + +global.gc(); + +const after = process.memoryUsage.rss(); + +if (process.config.variables.asan) { + assert(after < before * 10, `asan: before=${before} after=${after}`); +} else { + assert(after < before * 2, `before=${before} after=${after}`); +} diff --git a/test/parallel/test-v8-stats.js b/test/parallel/test-v8-stats.js index 2093343859f..7503a08c5a6 100644 --- a/test/parallel/test-v8-stats.js +++ b/test/parallel/test-v8-stats.js @@ -6,15 +6,18 @@ const v8 = require('v8'); const s = v8.getHeapStatistics(); const keys = [ 'does_zap_garbage', + 'external_memory', 'heap_size_limit', 'malloced_memory', 'number_of_detached_contexts', 'number_of_native_contexts', 'peak_malloced_memory', 'total_available_size', + 'total_global_handles_size', 'total_heap_size', 'total_heap_size_executable', 'total_physical_size', + 'used_global_handles_size', 'used_heap_size']; assert.deepStrictEqual(Object.keys(s).sort(), keys); keys.forEach(function(key) { diff --git a/test/parallel/test-v8-untrusted-code-mitigations.js b/test/parallel/test-v8-untrusted-code-mitigations.js deleted file mode 100644 index cb6360beb74..00000000000 --- a/test/parallel/test-v8-untrusted-code-mitigations.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -require('../common'); -const assert = require('assert'); -const { execFileSync } = require('child_process'); - -// This test checks that untrusted code mitigations in V8 are disabled -// by default. - -const v8Options = execFileSync(process.execPath, ['--v8-options']).toString(); - -const untrustedFlag = v8Options.indexOf('--untrusted-code-mitigations'); -assert.notStrictEqual(untrustedFlag, -1); - -const nextFlag = v8Options.indexOf('--', untrustedFlag + 2); -const slice = v8Options.substring(untrustedFlag, nextFlag); - -// eslint-disable-next-line no-regex-spaces -assert(slice.match(/type: bool default: false/)); diff --git a/test/parallel/test-validators.js b/test/parallel/test-validators.js index 6b0d49c6997..63cf42e3066 100644 --- a/test/parallel/test-validators.js +++ b/test/parallel/test-validators.js @@ -10,6 +10,8 @@ const { validateNumber, validateObject, validateString, + validateInt32, + validateUint32, } = require('internal/validators'); const { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } = Number; const outOfRangeError = { @@ -41,6 +43,34 @@ const invalidArgValueError = { // validateInteger() works with unsafe integers. validateInteger(MAX_SAFE_INTEGER + 1, 'foo', 0, MAX_SAFE_INTEGER + 1); validateInteger(MIN_SAFE_INTEGER - 1, 'foo', MIN_SAFE_INTEGER - 1); + + // validateInt32() and validateUint32() + [ + Symbol(), 1n, {}, [], false, true, undefined, null, () => {}, '', '1', + ].forEach((val) => assert.throws(() => validateInt32(val, 'name'), { + code: 'ERR_INVALID_ARG_TYPE' + })); + [ + 2147483647 + 1, -2147483648 - 1, NaN, + ].forEach((val) => assert.throws(() => validateInt32(val, 'name'), { + code: 'ERR_OUT_OF_RANGE' + })); + [ + 0, 1, -1, + ].forEach((val) => validateInt32(val, 'name')); + [ + Symbol(), 1n, {}, [], false, true, undefined, null, () => {}, '', '1', + ].forEach((val) => assert.throws(() => validateUint32(val, 'name'), { + code: 'ERR_INVALID_ARG_TYPE' + })); + [ + 4294967296, -1, NaN, + ].forEach((val) => assert.throws(() => validateUint32(val, 'name'), { + code: 'ERR_OUT_OF_RANGE' + })); + [ + 0, 1, + ].forEach((val) => validateUint32(val, 'name')); } { @@ -75,6 +105,10 @@ const invalidArgValueError = { { // validateObject tests. + Object.prototype.nullable = true; + Object.prototype.allowArray = true; + Object.prototype.allowFunction = true; + validateObject({}, 'foo'); validateObject({ a: 42, b: 'foo' }, 'foo'); @@ -89,6 +123,15 @@ const invalidArgValueError = { validateObject(null, 'foo', { nullable: true }); validateObject([], 'foo', { allowArray: true }); validateObject(() => {}, 'foo', { allowFunction: true }); + + // validateObject should not be affected by Object.prototype tampering. + assert.throws(() => validateObject(null, 'foo', { allowArray: true }), invalidArgTypeError); + assert.throws(() => validateObject([], 'foo', { nullable: true }), invalidArgTypeError); + assert.throws(() => validateObject(() => {}, 'foo', { nullable: true }), invalidArgTypeError); + + delete Object.prototype.nullable; + delete Object.prototype.allowArray; + delete Object.prototype.allowFunction; } { diff --git a/test/parallel/test-vm-measure-memory-multi-context.js b/test/parallel/test-vm-measure-memory-multi-context.js index 3a3065a8edb..aa9888d5f04 100644 --- a/test/parallel/test-vm-measure-memory-multi-context.js +++ b/test/parallel/test-vm-measure-memory-multi-context.js @@ -23,6 +23,6 @@ expectExperimentalWarning(); // We must hold on to the contexts here so that they // don't get GC'ed until the measurement is complete assert.strictEqual(arr.length, count); - assertDetailedShape(result, count); + assertDetailedShape(result, count + common.isWindows); })); } diff --git a/test/parallel/test-vm-measure-memory.js b/test/parallel/test-vm-measure-memory.js index 6b18db9be7a..75625cb82f5 100644 --- a/test/parallel/test-vm-measure-memory.js +++ b/test/parallel/test-vm-measure-memory.js @@ -15,8 +15,10 @@ expectExperimentalWarning(); vm.measureMemory({ execution: 'eager' }) .then(common.mustCall(assertSummaryShape)); - vm.measureMemory({ mode: 'detailed', execution: 'eager' }) - .then(common.mustCall(assertSingleDetailedShape)); + if (!common.isWindows) { + vm.measureMemory({ mode: 'detailed', execution: 'eager' }) + .then(common.mustCall(assertSingleDetailedShape)); + } vm.measureMemory({ mode: 'summary', execution: 'eager' }) .then(common.mustCall(assertSummaryShape)); diff --git a/test/parallel/test-vm-module-errors.js b/test/parallel/test-vm-module-errors.js index 888250cef84..bec8258a414 100644 --- a/test/parallel/test-vm-module-errors.js +++ b/test/parallel/test-vm-module-errors.js @@ -139,20 +139,25 @@ async function checkLinking() { code: 'ERR_VM_MODULE_DIFFERENT_CONTEXT' }); + const error = new Error(); await assert.rejects(async () => { - const erroredModule = new SourceTextModule('import "foo";'); + globalThis.error = error; + const erroredModule = new SourceTextModule('throw error;'); + await erroredModule.link(common.mustNotCall()); try { - await erroredModule.link(common.mustCall(() => ({}))); + await erroredModule.evaluate(); } catch { // ignored - } finally { - assert.strictEqual(erroredModule.status, 'errored'); } + delete globalThis.error; + + assert.strictEqual(erroredModule.status, 'errored'); const rootModule = new SourceTextModule('import "errored";'); await rootModule.link(common.mustCall(() => erroredModule)); }, { - code: 'ERR_VM_MODULE_LINKING_ERRORED' + code: 'ERR_VM_MODULE_LINK_FAILURE', + cause: error, }); } diff --git a/test/parallel/test-vm-timeout-escape-promise-2.js b/test/parallel/test-vm-timeout-escape-promise-2.js index a3cb3dbc7fd..db40d0ef1cc 100644 --- a/test/parallel/test-vm-timeout-escape-promise-2.js +++ b/test/parallel/test-vm-timeout-escape-promise-2.js @@ -16,7 +16,7 @@ function loop() { while (1) { const current = hrtime(); const span = (current - start) / NS_PER_MS; - if (span >= 100n) { + if (span >= 2000n) { throw new Error( `escaped timeout at ${span} milliseconds!`); } diff --git a/test/parallel/test-vm-timeout-escape-promise-module.js b/test/parallel/test-vm-timeout-escape-promise-module.js index 3451c0af71c..0687b3b3c81 100644 --- a/test/parallel/test-vm-timeout-escape-promise-module.js +++ b/test/parallel/test-vm-timeout-escape-promise-module.js @@ -18,7 +18,7 @@ function loop() { while (1) { const current = hrtime(); const span = (current - start) / NS_PER_MS; - if (span >= 100n) { + if (span >= 2000n) { throw new Error( `escaped timeout at ${span} milliseconds!`); } diff --git a/test/parallel/test-vm-timeout-escape-promise.js b/test/parallel/test-vm-timeout-escape-promise.js index 0e82ab8c86a..36a76001af3 100644 --- a/test/parallel/test-vm-timeout-escape-promise.js +++ b/test/parallel/test-vm-timeout-escape-promise.js @@ -17,7 +17,7 @@ function loop() { while (1) { const current = hrtime(); const span = (current - start) / NS_PER_MS; - if (span >= 100n) { + if (span >= 2000n) { throw new Error( `escaped timeout at ${span} milliseconds!`); } diff --git a/test/parallel/test-watch-mode-files_watcher.mjs b/test/parallel/test-watch-mode-files_watcher.mjs new file mode 100644 index 00000000000..1c3088800bd --- /dev/null +++ b/test/parallel/test-watch-mode-files_watcher.mjs @@ -0,0 +1,162 @@ +// Flags: --expose-internals +import * as common from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import tmpdir from '../common/tmpdir.js'; +import path from 'node:path'; +import assert from 'node:assert'; +import process from 'node:process'; +import os from 'node:os'; +import { describe, it, beforeEach, afterEach } from 'node:test'; +import { writeFileSync, mkdirSync } from 'node:fs'; +import { setTimeout } from 'node:timers/promises'; +import { once } from 'node:events'; +import { spawn } from 'node:child_process'; +import watcher from 'internal/watch_mode/files_watcher'; + +if (common.isIBMi) + common.skip('IBMi does not support `fs.watch()`'); + +const supportsRecursiveWatching = common.isOSX || common.isWindows; + +const { FilesWatcher } = watcher; +tmpdir.refresh(); + +describe('watch mode file watcher', () => { + let watcher; + let changesCount; + + beforeEach(() => { + changesCount = 0; + watcher = new FilesWatcher({ throttle: 100 }); + watcher.on('changed', () => changesCount++); + }); + + afterEach(() => watcher.clear()); + + let counter = 0; + function writeAndWaitForChanges(watcher, file) { + return new Promise((resolve) => { + const interval = setInterval(() => writeFileSync(file, `write ${counter++}`), 100); + watcher.once('changed', () => { + clearInterval(interval); + resolve(); + }); + }); + } + + it('should watch changed files', async () => { + const file = path.join(tmpdir.path, 'file1'); + writeFileSync(file, 'written'); + watcher.filterFile(file); + await writeAndWaitForChanges(watcher, file); + assert.strictEqual(changesCount, 1); + }); + + it('should throttle changes', async () => { + const file = path.join(tmpdir.path, 'file2'); + writeFileSync(file, 'written'); + watcher.filterFile(file); + await writeAndWaitForChanges(watcher, file); + + writeFileSync(file, '1'); + writeFileSync(file, '2'); + writeFileSync(file, '3'); + writeFileSync(file, '4'); + await setTimeout(200); // throttle * 2 + writeFileSync(file, '5'); + const changed = once(watcher, 'changed'); + writeFileSync(file, 'after'); + await changed; + // Unfortunately testing that changesCount === 2 is flaky + assert.ok(changesCount < 5); + }); + + it('should ignore files in watched directory if they are not filtered', + { skip: !supportsRecursiveWatching }, async () => { + watcher.on('changed', common.mustNotCall()); + watcher.watchPath(tmpdir.path); + writeFileSync(path.join(tmpdir.path, 'file3'), '1'); + // Wait for this long to make sure changes are not triggered + await setTimeout(1000); + }); + + it('should allow clearing filters', async () => { + const file = path.join(tmpdir.path, 'file4'); + writeFileSync(file, 'written'); + watcher.filterFile(file); + await writeAndWaitForChanges(watcher, file); + + writeFileSync(file, '1'); + + await setTimeout(200); // avoid throttling + watcher.clearFileFilters(); + writeFileSync(file, '2'); + // Wait for this long to make sure changes are triggered only once + await setTimeout(1000); + assert.strictEqual(changesCount, 1); + }); + + it('should watch all files in watched path when in "all" mode', + { skip: !supportsRecursiveWatching }, async () => { + watcher = new FilesWatcher({ throttle: 100, mode: 'all' }); + watcher.on('changed', () => changesCount++); + + const file = path.join(tmpdir.path, 'file5'); + watcher.watchPath(tmpdir.path); + + const changed = once(watcher, 'changed'); + writeFileSync(file, 'changed'); + await changed; + assert.strictEqual(changesCount, 1); + }); + + it('should ruse existing watcher if it exists', + { skip: !supportsRecursiveWatching }, () => { + assert.deepStrictEqual(watcher.watchedPaths, []); + watcher.watchPath(tmpdir.path); + assert.deepStrictEqual(watcher.watchedPaths, [tmpdir.path]); + watcher.watchPath(tmpdir.path); + assert.deepStrictEqual(watcher.watchedPaths, [tmpdir.path]); + }); + + it('should ruse existing watcher of a parent directory', + { skip: !supportsRecursiveWatching }, () => { + assert.deepStrictEqual(watcher.watchedPaths, []); + watcher.watchPath(tmpdir.path); + assert.deepStrictEqual(watcher.watchedPaths, [tmpdir.path]); + watcher.watchPath(path.join(tmpdir.path, 'subdirectory')); + assert.deepStrictEqual(watcher.watchedPaths, [tmpdir.path]); + }); + + it('should remove existing watcher if adding a parent directory watcher', + { skip: !supportsRecursiveWatching }, () => { + assert.deepStrictEqual(watcher.watchedPaths, []); + const subdirectory = path.join(tmpdir.path, 'subdirectory'); + mkdirSync(subdirectory); + watcher.watchPath(subdirectory); + assert.deepStrictEqual(watcher.watchedPaths, [subdirectory]); + watcher.watchPath(tmpdir.path); + assert.deepStrictEqual(watcher.watchedPaths, [tmpdir.path]); + }); + + it('should clear all watchers when calling clear', + { skip: !supportsRecursiveWatching }, () => { + assert.deepStrictEqual(watcher.watchedPaths, []); + watcher.watchPath(tmpdir.path); + assert.deepStrictEqual(watcher.watchedPaths, [tmpdir.path]); + watcher.clear(); + assert.deepStrictEqual(watcher.watchedPaths, []); + }); + + it('should watch files from subprocess IPC events', async () => { + const file = fixtures.path('watch-mode/ipc.js'); + const child = spawn(process.execPath, [file], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'], encoding: 'utf8' }); + watcher.watchChildProcessModules(child); + await once(child, 'exit'); + let expected = [file, path.join(os.tmpdir(), 'file')]; + if (supportsRecursiveWatching) { + expected = expected.map((file) => path.dirname(file)); + } + assert.deepStrictEqual(watcher.watchedPaths, expected); + }); +}); diff --git a/test/parallel/test-webcrypto-constructors.js b/test/parallel/test-webcrypto-constructors.js new file mode 100644 index 00000000000..ddc4e8cb079 --- /dev/null +++ b/test/parallel/test-webcrypto-constructors.js @@ -0,0 +1,159 @@ +// Flags: --experimental-global-webcrypto +'use strict'; + +const common = require('../common'); + +if (!common.hasCrypto) + common.skip('missing crypto'); + +const assert = require('assert'); + +// Test CryptoKey constructor +{ + assert.throws(() => new CryptoKey(), { + name: 'TypeError', message: 'Illegal constructor', code: 'ERR_ILLEGAL_CONSTRUCTOR' + }); +} + +// Test SubtleCrypto constructor +{ + assert.throws(() => new SubtleCrypto(), { + name: 'TypeError', message: 'Illegal constructor', code: 'ERR_ILLEGAL_CONSTRUCTOR' + }); +} + +// Test Crypto constructor +{ + assert.throws(() => new Crypto(), { + name: 'TypeError', message: 'Illegal constructor', code: 'ERR_ILLEGAL_CONSTRUCTOR' + }); +} + +const notCrypto = Reflect.construct(function() {}, [], Crypto); +const notSubtle = Reflect.construct(function() {}, [], SubtleCrypto); + +// Test Crypto.prototype.subtle +{ + assert.throws(() => notCrypto.subtle, { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }); +} + +// Test Crypto.prototype.randomUUID +{ + assert.throws(() => notCrypto.randomUUID(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }); +} + +// Test Crypto.prototype.getRandomValues +{ + assert.throws(() => notCrypto.getRandomValues(new Uint8Array(12)), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }); +} + +// Test SubtleCrypto.prototype.encrypt +{ + assert.rejects(() => notSubtle.encrypt(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.decrypt +{ + assert.rejects(() => notSubtle.decrypt(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.sign +{ + assert.rejects(() => notSubtle.sign(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.verify +{ + assert.rejects(() => notSubtle.verify(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.digest +{ + assert.rejects(() => notSubtle.digest(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.generateKey +{ + assert.rejects(() => notSubtle.generateKey(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.deriveKey +{ + assert.rejects(() => notSubtle.deriveKey(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.deriveBits +{ + assert.rejects(() => notSubtle.deriveBits(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.importKey +{ + assert.rejects(() => notSubtle.importKey(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.exportKey +{ + assert.rejects(() => notSubtle.exportKey(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.wrapKey +{ + assert.rejects(() => notSubtle.wrapKey(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +// Test SubtleCrypto.prototype.unwrapKey +{ + assert.rejects(() => notSubtle.unwrapKey(), { + name: 'TypeError', code: 'ERR_INVALID_THIS', + }).then(common.mustCall()); +} + +{ + globalThis.crypto.subtle.importKey( + 'raw', + globalThis.crypto.getRandomValues(new Uint8Array(4)), + 'PBKDF2', + false, + ['deriveKey'], + ).then((key) => { + globalThis.crypto.subtle.importKey = common.mustNotCall(); + return globalThis.crypto.subtle.deriveKey({ + name: 'PBKDF2', + hash: 'SHA-512', + salt: globalThis.crypto.getRandomValues(new Uint8Array()), + iterations: 5, + }, key, { + name: 'AES-GCM', + length: 256 + }, true, ['encrypt', 'decrypt']); + }).then(common.mustCall()); +} diff --git a/test/parallel/test-webcrypto-derivebits-cfrg.js b/test/parallel/test-webcrypto-derivebits-cfrg.js new file mode 100644 index 00000000000..2233d1a2d27 --- /dev/null +++ b/test/parallel/test-webcrypto-derivebits-cfrg.js @@ -0,0 +1,213 @@ +'use strict'; + +const common = require('../common'); + +if (!common.hasCrypto) + common.skip('missing crypto'); + +const assert = require('assert'); +const { webcrypto } = require('crypto'); +const { subtle } = webcrypto; + +const kTests = [ + { + name: 'X25519', + size: 32, + pkcs8: '302e020100300506032b656e04220420c8838e76d057dfb7d8c95a69e138160ad' + + 'd6373fd71a4d276bb56e3a81b64ff61', + spki: '302a300506032b656e0321001cf2b1e6022ec537371ed7f53e54fa1154d83e98eb' + + '64ea51fae5b3307cfe9706', + result: '2768409dfab99ec23b8c89b93ff5880295f76176088f89e43dfebe7ea1950008' + }, + { + name: 'X448', + size: 56, + pkcs8: '3046020100300506032b656f043a043858c7d29a3eb519b29d00cfb191bb64fc6' + + 'd8a42d8f17176272b89f2272d1819295c6525c0829671b052ef0727530f188e31' + + 'd0cc53bf26929e', + spki: '3042300506032b656f033900b604a1d1a5cd1d9426d561ef630a9eb16cbe69d5b9' + + 'ca615edc53633efb52ea31e6e6a0a1dbacc6e76cbce6482d7e4ba3d55d9e802765' + + 'ce6f', + result: 'f0f6c5f17f94f4291eab7178866d37ec8906dd6c514143dc85be7cf28deff39b' + + '726e0f6dcf810eb594dca97b4882bd44c43ea7dc67f49a4e', + }, +]; + +async function prepareKeys() { + const keys = {}; + await Promise.all( + kTests.map(async ({ name, size, pkcs8, spki, result }) => { + const [ + privateKey, + publicKey, + ] = await Promise.all([ + subtle.importKey( + 'pkcs8', + Buffer.from(pkcs8, 'hex'), + { name }, + true, + ['deriveKey', 'deriveBits']), + subtle.importKey( + 'spki', + Buffer.from(spki, 'hex'), + { name }, + true, + ['deriveKey', 'deriveBits']), + ]); + keys[name] = { + privateKey, + publicKey, + size, + result, + }; + })); + return keys; +} + +(async function() { + const keys = await prepareKeys(); + + await Promise.all( + Object.keys(keys).map(async (name) => { + const { size, result, privateKey, publicKey } = keys[name]; + + { + // Good parameters + const bits = await subtle.deriveBits({ + name, + public: publicKey + }, privateKey, 8 * size); + + assert(bits instanceof ArrayBuffer); + assert.strictEqual(Buffer.from(bits).toString('hex'), result); + } + + { + // Case insensitivity + const bits = await subtle.deriveBits({ + name: name.toLowerCase(), + public: publicKey + }, privateKey, 8 * size); + + assert.strictEqual(Buffer.from(bits).toString('hex'), result); + } + + { + // Null length + const bits = await subtle.deriveBits({ + name, + public: publicKey + }, privateKey, null); + + assert.strictEqual(Buffer.from(bits).toString('hex'), result); + } + + { + // Short Result + const bits = await subtle.deriveBits({ + name, + public: publicKey + }, privateKey, 8 * size - 32); + + assert.strictEqual( + Buffer.from(bits).toString('hex'), + result.slice(0, -8)); + } + + { + // Too long result + await assert.rejects(subtle.deriveBits({ + name, + public: publicKey + }, privateKey, 8 * size + 8), { + message: /derived bit length is too small/ + }); + } + + { + // Non-multiple of 8 + const bits = await subtle.deriveBits({ + name, + public: publicKey + }, privateKey, 8 * size - 11); + + assert.strictEqual( + Buffer.from(bits).toString('hex'), + result.slice(0, -2)); + } + })); + + // Error tests + { + // Missing public property + await assert.rejects( + subtle.deriveBits( + { name: 'X448' }, + keys.X448.privateKey, + 8 * keys.X448.size), + { code: 'ERR_INVALID_ARG_TYPE' }); + } + + { + // The public property is not a CryptoKey + await assert.rejects( + subtle.deriveBits( + { + name: 'X448', + public: { message: 'Not a CryptoKey' } + }, + keys.X448.privateKey, + 8 * keys.X448.size), + { code: 'ERR_INVALID_ARG_TYPE' }); + } + + { + // Mismatched types + await assert.rejects( + subtle.deriveBits( + { + name: 'X448', + public: keys.X25519.publicKey + }, + keys.X448.privateKey, + 8 * keys.X448.size), + { message: 'The public and private keys must be of the same type' }); + } + + { + // Base key is not a private key + await assert.rejects(subtle.deriveBits({ + name: 'X448', + public: keys.X448.publicKey + }, keys.X448.publicKey, null), { + message: /baseKey must be a private key/ + }); + } + + { + // Base key is not a private key + await assert.rejects(subtle.deriveBits({ + name: 'X448', + public: keys.X448.privateKey + }, keys.X448.publicKey, null), { + message: /algorithm\.public must be a public key/ + }); + } + + { + // Public is a secret key + const keyData = webcrypto.getRandomValues(new Uint8Array(32)); + const key = await subtle.importKey( + 'raw', + keyData, + { name: 'AES-CBC', length: 256 }, + false, ['encrypt']); + + await assert.rejects(subtle.deriveBits({ + name: 'X448', + public: key + }, keys.X448.publicKey, null), { + message: /algorithm\.public must be a public key/ + }); + } +})().then(common.mustCall()); diff --git a/test/parallel/test-webcrypto-derivebits-ecdh.js b/test/parallel/test-webcrypto-derivebits-ecdh.js index 166da81e3e4..739155fba47 100644 --- a/test/parallel/test-webcrypto-derivebits-ecdh.js +++ b/test/parallel/test-webcrypto-derivebits-ecdh.js @@ -154,7 +154,7 @@ async function prepareKeys() { assert.strictEqual( Buffer.from(bits).toString('hex'), - result.slice(0, -4)); + result.slice(0, -2)); } })); @@ -201,13 +201,13 @@ async function prepareKeys() { { name: 'ECDSA', namedCurve: 'P-521' - }, false, ['verify']); + }, false, ['sign', 'verify']); await assert.rejects(subtle.deriveBits({ name: 'ECDH', public: publicKey }, keys['P-521'].privateKey, null), { - message: /Keys must be ECDH keys/ + message: /Keys must be ECDH, X25519, or X448 keys/ }); } diff --git a/test/parallel/test-webcrypto-derivebits-hkdf.js b/test/parallel/test-webcrypto-derivebits-hkdf.js index 42d958e5f5f..922c1b347e3 100644 --- a/test/parallel/test-webcrypto-derivebits-hkdf.js +++ b/test/parallel/test-webcrypto-derivebits-hkdf.js @@ -31,7 +31,7 @@ const kDerivedKeys = { short: '5040737377307264', long: '55736572732073686f756c64207069636b206c6f6e6720706173737068726' + '173657320286e6f74207573652073686f72742070617373776f7264732921', - // empty: '' + empty: '' }; const kSalts = { @@ -259,15 +259,18 @@ async function testDeriveBitsBadLengths( return Promise.all([ assert.rejects( subtle.deriveBits(algorithm, baseKeys[size], 0), { - message: /length cannot be zero/ + message: /length cannot be zero/, + name: 'OperationError', }), assert.rejects( subtle.deriveBits(algorithm, baseKeys[size], null), { - code: 'ERR_INVALID_ARG_TYPE' + message: 'length cannot be null', + name: 'OperationError', }), assert.rejects( subtle.deriveBits(algorithm, baseKeys[size], 15), { - message: /length must be a multiple of 8/ + message: /length must be a multiple of 8/, + name: 'OperationError', }), ]); } diff --git a/test/parallel/test-webcrypto-derivebits-node-dh.js b/test/parallel/test-webcrypto-derivebits-node-dh.js deleted file mode 100644 index 2503bc17032..00000000000 --- a/test/parallel/test-webcrypto-derivebits-node-dh.js +++ /dev/null @@ -1,219 +0,0 @@ -'use strict'; - -const common = require('../common'); - -if (!common.hasCrypto) - common.skip('missing crypto'); - -const assert = require('assert'); -const { subtle } = require('crypto').webcrypto; - -const kTestData = { - pkcs8: '308203260201003082019706092a864886f70d010301308201880282018100ff' + - 'ffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc7402' + - '0bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374f' + - 'e1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee' + - '386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598' + - 'da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9e' + - 'd529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be3' + - '9e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf69558171839' + - '95497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a8' + - '5521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7ab' + - 'f5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d8' + - '7602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208' + - 'e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff02' + - '010204820184028201806ba21bec44fe29bee2d1f6f5d717b9af1c62973b342c' + - '28b850d2e39b31abf3ce7f58a26da0cdf538b3328648ee8738e49434bdf697ff' + - '2ac5da64d308fa0abbd75f0554bcef58fd1a688bf93af00ffbdb9ba05558a8e6' + - '16db9818769e2c7e37ba0c07bca10fffd19cb7aa44876170f0a8fe0c1bdba2f9' + - 'b0606d479796e1b6bdab153188b03f684584fd909814c5055fc184eaf05577f7' + - 'f447fcc2dd90889ab853830993d8fbf087f942d8e7a9f331570e7eee5954fb7a' + - 'a6920f4df2f8a33d5cb59961162b1216a4382f984cce02512f0100e20f15e480' + - 'a9d19bb01414a75c74d0854595e58ed060f7bb0f4b451f82b476dc039cc1bb8c' + - '1a05999e6abb20915a3cfca40f314538c00f42d0c4f2070cb163788d6dea0adb' + - '03c75d8001c7057ef61e60b407272adffc2669b82e634ebebda45826229bb2f8' + - 'ed742ee97429e34de06c41c25563025285d5f8a43acdc57cf12779222ae125d5' + - '438857d6bf6341815b9aebf6878fd23944cfd240e74caea13419163fde5ec1ec' + - 'fe2fb2e740b9301a9c04', - spki: '308203253082019706092a864886f70d010301308201880282018100fffffffff' + - 'fffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b' + - '139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d5' + - '1c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a89' + - '9fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d' + - '39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed52907709696' + - '6d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e860' + - '39b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae5' + - '15d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64e' + - 'cfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e' + - '8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521' + - 'f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db' + - '5bfce0fd108e4b82d120a93ad2caffffffffffffffff020102038201860002820' + - '1810098b01807f77a722cd30fe0390f8cdd0b3f7e0fb33fd3e0ca3d573a7b481e' + - 'dc0fc9f7bc58bfc4509f34efe118ba48bcefbbd57c4878e87b4d0fbb4b661d771' + - '19055cf190b5e8ad05c4821ff0445f4e12049e708ee83e2272c2c269b8b3bfa1b' + - '37df8dc4ec77a430ed6b89beb69093ceeca48497d8ab3ceac25429df58e96d2df' + - 'd01a94b1d164697b93475ed3d5962fd7c300de959474568aecc15c880c36b14a7' + - '9c2144ad4207c9760c11fbcc9ccbb29727a7f5a7789d47f1fa7a154289f83c528' + - '1fb97e01c37f937a25b4057017961ebd52b936f6b8f6d9ad35e3e094c3850cde2' + - '9e98895eaa9b56bff17dc6d8c03edce51c0aa009864da9cbe49a2063bddc64f11' + - '67beb0ab1c5d9bccf9a10078d0236237986f53c4074f30399deb829c544026fe0' + - '532e54e1bc9d933bd4db8dbfd43cf7839a9f64c135d2188896294d54cb7812e6e' + - '9586a03e91893edf7240011e8cda8f59a4dde0ce6d3c40d85847a3985fa25967f' + - 'a2c9598b269ac28da067704f15eb5bb4d8afdea8c67f56f9b604e172bc', - result: '42e77c77568f4387858771b006bebf213a2894efed8efdcfe23640bbd6df765' + - '1b2afa9f5acfba5b1d3db5401fd3427cd9226f6c2fdbd2b8fd7948e12cc7e016' + - 'eb2ed0e0fb02ce434c68c5d511ded05c1150718cf4c8b9db0adcc639a8b52b74' + - 'c2c90e2df5f6f55462d38e2d2769b4bd23bf0db8b4a82253addc1d5d6d19289d' + - '9e60ddabe1203aa3f45956f4dd32683f55fc2f7400e92712e5bb4dea737e03ad' + - '4b94640ccd63a0b8485dfa63f3b98232a34354aa91aebb3e86bb67a48b50ac21' + - 'e62dbce80c0913a9dba92c1c2333f4a43efe9c6c24ce23c252c7ff37e9e74a78' + - '6a8c5b82453fda8b6b40463461d22765e26d4f444272254ee6a492d3e6737e52' + - 'a94440aeddde3c0b449c52ca64bdc698f683ba6cb27794b84edcab7694cadfe8' + - 'f76ce94bf127ca42323b1995a863bcecab455f5d6283eb0eed44942aad3d1a46' + - '79713ed4757917f95d1a61ecae45b9978a863b16e199418bfe6e98435ad146a4' + - '7bd9c8cad9f787a29888954ae58fa683ea163921eb9d3e7a5aa2f52f74ec15333', -}; - -async function prepareKeys() { - const [ - privateKey, - publicKey, - ] = await Promise.all([ - subtle.importKey( - 'pkcs8', - Buffer.from(kTestData.pkcs8, 'hex'), - { name: 'NODE-DH' }, - true, - ['deriveKey', 'deriveBits']), - subtle.importKey( - 'spki', - Buffer.from(kTestData.spki, 'hex'), - { name: 'NODE-DH' }, - true, []), - ]); - return { - privateKey, - publicKey, - result: kTestData.result, - }; -} - -(async function() { - const { - publicKey, - privateKey, - result - } = await prepareKeys(); - - { - // Good parameters - const bits = await subtle.deriveBits({ - name: 'NODE-DH', - public: publicKey - }, privateKey, null); - - assert(bits instanceof ArrayBuffer); - assert.strictEqual(Buffer.from(bits).toString('hex'), result); - } - - { - // Case insensitivity - const bits = await subtle.deriveBits({ - name: 'node-dH', - public: publicKey - }, privateKey, null); - - assert.strictEqual(Buffer.from(bits).toString('hex'), result); - } - - { - // Short Result - const bits = await subtle.deriveBits({ - name: 'NODE-DH', - public: publicKey - }, privateKey, 16); - - assert.strictEqual( - Buffer.from(bits).toString('hex'), - result.slice(0, 4)); - } - - { - // Too long result - await assert.rejects(subtle.deriveBits({ - name: 'NODE-DH', - public: publicKey - }, privateKey, result.length * 16), { - message: /derived bit length is too small/ - }); - } - - { - // Non-multiple of 8 - const bits = await subtle.deriveBits({ - name: 'NODE-DH', - public: publicKey - }, privateKey, 15); - - assert.strictEqual( - Buffer.from(bits).toString('hex'), - result.slice(0, 2)); - } - - // Error tests - { - // Missing public property - await assert.rejects( - subtle.deriveBits( - { name: 'NODE-DH' }, - privateKey, - null), - { code: 'ERR_INVALID_ARG_TYPE' }); - } - - { - // The public property is not a CryptoKey - await assert.rejects( - subtle.deriveBits( - { - name: 'NODE-DH', - public: { message: 'Not a CryptoKey' } - }, - privateKey, - null), - { code: 'ERR_INVALID_ARG_TYPE' }); - } - - { - // Incorrect public key algorithm - const { publicKey } = await subtle.generateKey( - { - name: 'ECDSA', - namedCurve: 'P-521' - }, false, ['verify']); - - await assert.rejects(subtle.deriveBits({ - name: 'NODE-DH', - public: publicKey - }, privateKey, null), { - message: /Keys must be DH keys/ - }); - } - - { - // Private key does not have correct usages - const privateKey = await subtle.importKey( - 'pkcs8', - Buffer.from(kTestData.pkcs8, 'hex'), - { - name: 'NODE-DH', - }, false, ['deriveKey']); - - await assert.rejects(subtle.deriveBits({ - name: 'NODE-DH', - public: publicKey, - }, privateKey, null), { - message: /baseKey does not have deriveBits usage/ - }); - } -})().then(common.mustCall()); diff --git a/test/parallel/test-webcrypto-derivebits.js b/test/parallel/test-webcrypto-derivebits.js index 95c38f454fb..442423954b1 100644 --- a/test/parallel/test-webcrypto-derivebits.js +++ b/test/parallel/test-webcrypto-derivebits.js @@ -9,8 +9,6 @@ if (!common.hasCrypto) const assert = require('assert'); const { subtle } = require('crypto').webcrypto; -const { internalBinding } = require('internal/test/binding'); - // This is only a partial test. The WebCrypto Web Platform Tests // will provide much greater coverage. @@ -103,32 +101,28 @@ const { internalBinding } = require('internal/test/binding'); tests.then(common.mustCall()); } -// Test Scrypt bit derivation -if (typeof internalBinding('crypto').ScryptJob === 'function') { - async function test(pass, salt, length, expected) { - const ec = new TextEncoder(); - const key = await subtle.importKey( - 'raw', - ec.encode(pass), - { name: 'NODE-SCRYPT' }, - false, ['deriveBits']); - const secret = await subtle.deriveBits({ - name: 'NODE-SCRYPT', - salt: ec.encode(salt), - }, key, length); - assert(secret instanceof ArrayBuffer); - assert.strictEqual(Buffer.from(secret).toString('hex'), expected); - } +// Test X25519 and X448 bit derivation +{ + async function test(name) { + const [alice, bob] = await Promise.all([ + subtle.generateKey({ name }, true, ['deriveBits']), + subtle.generateKey({ name }, true, ['deriveBits']), + ]); - const kTests = [ - ['hello', 'there', 512, - '30ddda6feabaac788eb81cc38f496cd5d9a165d320c537ea05331fe720db1061b3a27' + - 'b91a8428e49d44078c1fa395cb1c6db336ba44ccb80faa6d74918769374'], - ['hello', 'there', 128, - '30ddda6feabaac788eb81cc38f496cd5'], - ]; + const [secret1, secret2] = await Promise.all([ + subtle.deriveBits({ + name, public: alice.publicKey + }, bob.privateKey, 128), + subtle.deriveBits({ + name, public: bob.publicKey + }, alice.privateKey, 128), + ]); - const tests = Promise.all(kTests.map((args) => test(...args))); + assert(secret1 instanceof ArrayBuffer); + assert(secret2 instanceof ArrayBuffer); + assert.deepStrictEqual(secret1, secret2); + } - tests.then(common.mustCall()); + test('X25519').then(common.mustCall()); + test('X448').then(common.mustCall()); } diff --git a/test/parallel/test-webcrypto-derivekey-cfrg.js b/test/parallel/test-webcrypto-derivekey-cfrg.js new file mode 100644 index 00000000000..ddf51626a89 --- /dev/null +++ b/test/parallel/test-webcrypto-derivekey-cfrg.js @@ -0,0 +1,188 @@ +'use strict'; + +const common = require('../common'); + +if (!common.hasCrypto) + common.skip('missing crypto'); + +const assert = require('assert'); +const { webcrypto } = require('crypto'); +const { subtle } = webcrypto; + +const kTests = [ + { + name: 'X25519', + size: 32, + pkcs8: '302e020100300506032b656e04220420c8838e76d057dfb7d8c95a69e138160ad' + + 'd6373fd71a4d276bb56e3a81b64ff61', + spki: '302a300506032b656e0321001cf2b1e6022ec537371ed7f53e54fa1154d83e98eb' + + '64ea51fae5b3307cfe9706', + result: '2768409dfab99ec23b8c89b93ff5880295f76176088f89e43dfebe7ea1950008' + }, + { + name: 'X448', + size: 56, + pkcs8: '3046020100300506032b656f043a043858c7d29a3eb519b29d00cfb191bb64fc6' + + 'd8a42d8f17176272b89f2272d1819295c6525c0829671b052ef0727530f188e31' + + 'd0cc53bf26929e', + spki: '3042300506032b656f033900b604a1d1a5cd1d9426d561ef630a9eb16cbe69d5b9' + + 'ca615edc53633efb52ea31e6e6a0a1dbacc6e76cbce6482d7e4ba3d55d9e802765' + + 'ce6f', + result: 'f0f6c5f17f94f4291eab7178866d37ec8906dd6c514143dc85be7cf28deff39b' + }, +]; + +async function prepareKeys() { + const keys = {}; + await Promise.all( + kTests.map(async ({ name, size, pkcs8, spki, result }) => { + const [ + privateKey, + publicKey, + ] = await Promise.all([ + subtle.importKey( + 'pkcs8', + Buffer.from(pkcs8, 'hex'), + { name }, + true, + ['deriveKey', 'deriveBits']), + subtle.importKey( + 'spki', + Buffer.from(spki, 'hex'), + { name }, + true, + ['deriveKey', 'deriveBits']), + ]); + keys[name] = { + privateKey, + publicKey, + size, + result, + }; + })); + return keys; +} + +(async function() { + const keys = await prepareKeys(); + const otherArgs = [ + { name: 'HMAC', hash: 'SHA-256', length: 256 }, + true, + ['sign', 'verify']]; + + await Promise.all( + Object.keys(keys).map(async (name) => { + const { result, privateKey, publicKey } = keys[name]; + + { + // Good parameters + const key = await subtle.deriveKey({ + name, + public: publicKey + }, privateKey, ...otherArgs); + + const raw = await subtle.exportKey('raw', key); + + assert.strictEqual(Buffer.from(raw).toString('hex'), result); + } + + { + // Case insensitivity + const key = await subtle.deriveKey({ + name: name.toLowerCase(), + public: publicKey + }, privateKey, { + name: 'HmAc', + hash: 'SHA-256', + length: 256 + }, true, ['sign', 'verify']); + + const raw = await subtle.exportKey('raw', key); + + assert.strictEqual(Buffer.from(raw).toString('hex'), result); + } + })); + + // Error tests + { + // Missing public property + await assert.rejects( + subtle.deriveKey( + { name: 'X448' }, + keys.X448.privateKey, + ...otherArgs), + { code: 'ERR_INVALID_ARG_TYPE' }); + } + + { + // The public property is not a CryptoKey + await assert.rejects( + subtle.deriveKey( + { + name: 'X448', + public: { message: 'Not a CryptoKey' } + }, + keys.X448.privateKey, + ...otherArgs), + { code: 'ERR_INVALID_ARG_TYPE' }); + } + + { + // Mismatched named curves + await assert.rejects( + subtle.deriveKey( + { + name: 'X448', + public: keys.X25519.publicKey + }, + keys.X448.privateKey, + ...otherArgs), + { message: 'The public and private keys must be of the same type' }); + } + + { + // Base key is not a private key + await assert.rejects( + subtle.deriveKey( + { + name: 'X448', + public: keys.X448.publicKey + }, + keys.X448.publicKey, + ...otherArgs), + { message: /baseKey must be a private key/ }); + } + + { + // Base key is not a private key + await assert.rejects( + subtle.deriveKey( + { + name: 'X448', + public: keys.X448.privateKey + }, + keys.X448.publicKey, + ...otherArgs), + { message: /algorithm\.public must be a public key/ }); + } + + { + // Public is a secret key + const keyData = webcrypto.getRandomValues(new Uint8Array(32)); + const key = await subtle.importKey( + 'raw', + keyData, + { name: 'AES-CBC', length: 256 }, + false, ['encrypt']); + + await assert.rejects( + subtle.deriveKey( + { + name: 'X448', + public: key + }, + keys.X448.publicKey, + ...otherArgs), + { message: /algorithm\.public must be a public key/ }); + } +})().then(common.mustCall()); diff --git a/test/parallel/test-webcrypto-derivekey-ecdh.js b/test/parallel/test-webcrypto-derivekey-ecdh.js index 42c8d250f42..2ca54957a55 100644 --- a/test/parallel/test-webcrypto-derivekey-ecdh.js +++ b/test/parallel/test-webcrypto-derivekey-ecdh.js @@ -165,7 +165,7 @@ async function prepareKeys() { namedCurve: 'P-521' }, false, - ['verify']); + ['sign', 'verify']); await assert.rejects( subtle.deriveKey( @@ -175,7 +175,7 @@ async function prepareKeys() { }, keys['P-521'].privateKey, ...otherArgs), - { message: /Keys must be ECDH keys/ }); + { message: /Keys must be ECDH, X25519, or X448 keys/ }); } { diff --git a/test/parallel/test-webcrypto-derivekey.js b/test/parallel/test-webcrypto-derivekey.js index ee48a61f4ac..f8eb996000e 100644 --- a/test/parallel/test-webcrypto-derivekey.js +++ b/test/parallel/test-webcrypto-derivekey.js @@ -7,14 +7,12 @@ if (!common.hasCrypto) common.skip('missing crypto'); const assert = require('assert'); -const { subtle } = require('crypto').webcrypto; - -const { internalBinding } = require('internal/test/binding'); +const { webcrypto: { subtle }, KeyObject } = require('crypto'); // This is only a partial test. The WebCrypto Web Platform Tests // will provide much greater coverage. -// Test ECDH bit derivation +// Test ECDH key derivation { async function test(namedCurve) { const [alice, bob] = await Promise.all([ @@ -48,7 +46,7 @@ const { internalBinding } = require('internal/test/binding'); test('P-521').then(common.mustCall()); } -// Test HKDF bit derivation +// Test HKDF key derivation { async function test(pass, info, salt, hash, expected) { const ec = new TextEncoder(); @@ -85,7 +83,7 @@ const { internalBinding } = require('internal/test/binding'); tests.then(common.mustCall()); } -// Test PBKDF2 bit derivation +// Test PBKDF2 key derivation { async function test(pass, salt, iterations, hash, expected) { const ec = new TextEncoder(); @@ -121,34 +119,69 @@ const { internalBinding } = require('internal/test/binding'); tests.then(common.mustCall()); } -// Test Scrypt bit derivation -if (typeof internalBinding('crypto').ScryptJob === 'function') { - async function test(pass, salt, expected) { - const ec = new TextEncoder(); - const key = await subtle.importKey( - 'raw', - ec.encode(pass), - { name: 'NODE-SCRYPT' }, - false, ['deriveKey']); - const secret = await subtle.deriveKey({ - name: 'NODE-SCRYPT', - salt: ec.encode(salt), - }, key, { - name: 'AES-CTR', - length: 256 - }, true, ['encrypt']); +// Test default key lengths +{ + const vectors = [ + ['PBKDF2', 'deriveKey', 528], + ['HKDF', 'deriveKey', 528], + [{ name: 'HMAC', hash: 'SHA-1' }, 'sign', 160], + [{ name: 'HMAC', hash: 'SHA-256' }, 'sign', 256], + [{ name: 'HMAC', hash: 'SHA-384' }, 'sign', 384], + [{ name: 'HMAC', hash: 'SHA-512' }, 'sign', 512], + ]; - const raw = await subtle.exportKey('raw', secret); + (async () => { + const keyPair = await subtle.generateKey({ name: 'ECDH', namedCurve: 'P-521' }, false, ['deriveKey']); + for (const [derivedKeyAlgorithm, usage, expected] of vectors) { + const derived = await subtle.deriveKey( + { name: 'ECDH', public: keyPair.publicKey }, + keyPair.privateKey, + derivedKeyAlgorithm, + false, + [usage]); + + if (derived.algorithm.name === 'HMAC') { + assert.strictEqual(derived.algorithm.length, expected); + } else { + // KDFs cannot be exportable and do not indicate their length + const secretKey = KeyObject.from(derived); + assert.strictEqual(secretKey.symmetricKeySize, expected / 8); + } + } + })().then(common.mustCall()); +} - assert.strictEqual(Buffer.from(raw).toString('hex'), expected); - } +// Test X25519 and X448 key derivation +{ + async function test(name) { + const [alice, bob] = await Promise.all([ + subtle.generateKey({ name }, true, ['deriveKey']), + subtle.generateKey({ name }, true, ['deriveKey']), + ]); - const kTests = [ - ['hello', 'there', - '30ddda6feabaac788eb81cc38f496cd5d9a165d320c537ea05331fe720db1061'], - ]; + const [secret1, secret2] = await Promise.all([ + subtle.deriveKey({ + name, public: alice.publicKey + }, bob.privateKey, { + name: 'AES-CBC', + length: 256 + }, true, ['encrypt']), + subtle.deriveKey({ + name, public: bob.publicKey + }, alice.privateKey, { + name: 'AES-CBC', + length: 256 + }, true, ['encrypt']), + ]); - const tests = Promise.all(kTests.map((args) => test(...args))); + const [raw1, raw2] = await Promise.all([ + subtle.exportKey('raw', secret1), + subtle.exportKey('raw', secret2), + ]); - tests.then(common.mustCall()); + assert.deepStrictEqual(raw1, raw2); + } + + test('X25519').then(common.mustCall()); + test('X448').then(common.mustCall()); } diff --git a/test/parallel/test-webcrypto-digest.js b/test/parallel/test-webcrypto-digest.js index 78b12ea6a55..b8680564d1a 100644 --- a/test/parallel/test-webcrypto-digest.js +++ b/test/parallel/test-webcrypto-digest.js @@ -168,3 +168,9 @@ async function testDigest(size, name) { await Promise.all(variations); })().then(common.mustCall()); + +(async () => { + await assert.rejects(subtle.digest('RSA-OAEP', Buffer.alloc(1)), { + name: 'NotSupportedError', + }); +})().then(common.mustCall()); diff --git a/test/parallel/test-webcrypto-ed25519-ed448.js b/test/parallel/test-webcrypto-ed25519-ed448.js deleted file mode 100644 index b18f3f9d3b4..00000000000 --- a/test/parallel/test-webcrypto-ed25519-ed448.js +++ /dev/null @@ -1,485 +0,0 @@ -// Flags: --expose-internals -'use strict'; - -const common = require('../common'); - -if (!common.hasCrypto) - common.skip('missing crypto'); - -const assert = require('assert'); -const { - generateKeyPairSync, - webcrypto: { subtle } -} = require('crypto'); - -const { internalBinding } = require('internal/test/binding'); -const { DOMException } = internalBinding('messaging'); - -async function generateKey(namedCurve) { - return subtle.generateKey( - { - name: namedCurve, - namedCurve - }, - true, - ['sign', 'verify']); -} - -async function test1(namedCurve) { - const { - publicKey, - privateKey, - } = await generateKey(namedCurve); - - const data = Buffer.from('hello world'); - - assert(publicKey); - assert(privateKey); - - const sig = await subtle.sign( - { name: namedCurve }, - privateKey, - data - ); - - assert(sig); - - assert(await subtle.verify( - { name: namedCurve }, - publicKey, - sig, - data - )); -} - -Promise.all([ - test1('NODE-ED25519'), - test1('NODE-ED448'), -]).then(common.mustCall()); - -assert.rejects( - subtle.importKey( - 'raw', - Buffer.alloc(10), - { - name: 'NODE-ED25519', - namedCurve: 'NODE-ED25519' - }, - false, - ['sign']), - { - message: /NODE-ED25519 raw keys must be exactly 32-bytes/ - }).then(common.mustCall()); - -assert.rejects( - subtle.importKey( - 'raw', - Buffer.alloc(10), - { - name: 'NODE-ED448', - namedCurve: 'NODE-ED448' - }, - false, - ['sign']), - { - message: /NODE-ED448 raw keys must be exactly 57-bytes/ - }).then(common.mustCall()); - -const testVectors = { - 'NODE-ED25519': [ - { - privateKey: - Buffer.from( - '9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60', - 'hex'), - publicKey: - Buffer.from( - 'd75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a', - 'hex'), - message: Buffer.alloc(0), - sig: - Buffer.from( - 'e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e06522490155' + - '5fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b', - 'hex'), - crv: 'Ed25519', - }, - { - privateKey: - Buffer.from( - '4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb', - 'hex'), - publicKey: - Buffer.from( - '3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c', - 'hex'), - message: Buffer.from('72', 'hex'), - sig: - Buffer.from( - '92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da' + - '085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00', - 'hex'), - crv: 'Ed25519', - }, - { - privateKey: - Buffer.from( - 'c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7', - 'hex'), - publicKey: - Buffer.from( - 'fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025', - 'hex'), - message: Buffer.from('af82', 'hex'), - sig: - Buffer.from( - '6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac' + - '18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a', - 'hex'), - crv: 'Ed25519', - }, - { - privateKey: - Buffer.from( - 'f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5', - 'hex'), - publicKey: - Buffer.from( - '278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e', - 'hex'), - message: Buffer.from( - '08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98' + - 'fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d8' + - '79de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d' + - '658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc' + - '1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4fe' + - 'ba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e' + - '06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbef' + - 'efd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7' + - 'aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed1' + - '85ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2' + - 'd17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24' + - '554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f270' + - '88d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc' + - '2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b07' + - '07e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128ba' + - 'b27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51a' + - 'ddd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429e' + - 'c96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb7' + - '51fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c' + - '42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8' + - 'ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34df' + - 'f7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08' + - 'd78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649' + - 'de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e4' + - '88acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a3' + - '2ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e' + - '6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5f' + - 'b93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b5' + - '0d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1' + - '369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380d' + - 'b2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c' + - '0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0', - 'hex'), - sig: Buffer.from( - '0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350' + - 'aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03', - 'hex'), - crv: 'Ed25519', - }, - ], - 'NODE-ED448': [ - { - privateKey: - Buffer.from( - '6c82a562cb808d10d632be89c8513ebf6c929f34ddfa8c9f63c9960ef6e348a3' + - '528c8a3fcc2f044e39a3fc5b94492f8f032e7549a20098f95b', 'hex'), - publicKey: - Buffer.from( - '5fd7449b59b461fd2ce787ec616ad46a1da1342485a70e1f8a0ea75d80e96778' + - 'edf124769b46c7061bd6783df1e50f6cd1fa1abeafe8256180', 'hex'), - message: Buffer.alloc(0), - sig: - Buffer.from( - '533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f' + - '2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a' + - '9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4db' + - 'b61149f05a7363268c71d95808ff2e652600', 'hex'), - crv: 'Ed448', - }, - { - privateKey: - Buffer.from( - 'c4eab05d357007c632f3dbb48489924d552b08fe0c353a0d4a1f00acda2c463a' + - 'fbea67c5e8d2877c5e3bc397a659949ef8021e954e0a12274e', 'hex'), - publicKey: - Buffer.from( - '43ba28f430cdff456ae531545f7ecd0ac834a55d9358c0372bfa0c6c6798c086' + - '6aea01eb00742802b8438ea4cb82169c235160627b4c3a9480', 'hex'), - message: Buffer.from('03', 'hex'), - sig: - Buffer.from( - '26b8f91727bd62897af15e41eb43c377efb9c610d48f2335cb0bd0087810f435' + - '2541b143c4b981b7e18f62de8ccdf633fc1bf037ab7cd779805e0dbcc0aae1cb' + - 'cee1afb2e027df36bc04dcecbf154336c19f0af7e0a6472905e799f1953d2a0f' + - 'f3348ab21aa4adafd1d234441cf807c03a00', 'hex'), - crv: 'Ed448', - }, - { - privateKey: - Buffer.from( - 'cd23d24f714274e744343237b93290f511f6425f98e64459ff203e8985083ffd' + - 'f60500553abc0e05cd02184bdb89c4ccd67e187951267eb328', 'hex'), - publicKey: - Buffer.from( - 'dcea9e78f35a1bf3499a831b10b86c90aac01cd84b67a0109b55a36e9328b1e3' + - '65fce161d71ce7131a543ea4cb5f7e9f1d8b00696447001400', 'hex'), - message: Buffer.from('0c3e544074ec63b0265e0c', 'hex'), - sig: - Buffer.from( - '1f0a8888ce25e8d458a21130879b840a9089d999aaba039eaf3e3afa090a09d3' + - '89dba82c4ff2ae8ac5cdfb7c55e94d5d961a29fe0109941e00b8dbdeea6d3b05' + - '1068df7254c0cdc129cbe62db2dc957dbb47b51fd3f213fb8698f064774250a5' + - '028961c9bf8ffd973fe5d5c206492b140e00', 'hex'), - crv: 'Ed448', - }, - ] -}; - -async function test2(namedCurve) { - const vectors = testVectors[namedCurve]; - await Promise.all(vectors.map(async (vector) => { - const [ - privateKey, - publicKey, - ] = await Promise.all([ - subtle.importKey( - 'raw', - vector.privateKey, - { - name: namedCurve, - namedCurve - }, - true, ['sign']), - subtle.importKey( - 'raw', - vector.publicKey, - { - name: namedCurve, - namedCurve, - public: true - }, - true, ['verify']), - ]); - - const rawPublicKey = await subtle.exportKey('raw', publicKey); - assert.deepStrictEqual(Buffer.from(rawPublicKey), vector.publicKey); - - assert.rejects(subtle.exportKey('raw', privateKey), { - message: new RegExp(`Unable to export a raw ${namedCurve} private key`) - }).then(common.mustCall()); - - const sig = await subtle.sign( - { name: namedCurve }, - privateKey, - vector.message - ); - - assert(sig); - - assert(await subtle.verify( - { name: namedCurve }, - publicKey, - vector.sig, - vector.message - )); - - const [ - publicKeyJwk, - privateKeyJwk, - ] = await Promise.all([ - subtle.exportKey('jwk', publicKey), - subtle.exportKey('jwk', privateKey), - ]); - assert.strictEqual(publicKeyJwk.kty, 'OKP'); - assert.strictEqual(privateKeyJwk.kty, 'OKP'); - assert.strictEqual(publicKeyJwk.crv, vector.crv); - assert.strictEqual(privateKeyJwk.crv, vector.crv); - assert.deepStrictEqual( - Buffer.from(publicKeyJwk.x, 'base64'), - vector.publicKey); - assert.deepStrictEqual( - Buffer.from(privateKeyJwk.x, 'base64'), - vector.publicKey); - assert.deepStrictEqual( - Buffer.from(privateKeyJwk.d, 'base64'), - vector.privateKey); - })); -} - -Promise.all([ - test2('NODE-ED25519'), - test2('NODE-ED448'), -]).then(common.mustCall()); - -assert.rejects( - subtle.generateKey( - { - name: 'ECDSA', - namedCurve: 'NODE-X25519' - }, - true, - ['sign', 'verify']), - { - message: /Unsupported named curves for ECDSA/ - }).then(common.mustCall()); - -assert.rejects( - subtle.generateKey( - { - name: 'ECDSA', - namedCurve: 'NODE-X448' - }, - true, - ['sign', 'verify']), - { - message: /Unsupported named curves for ECDSA/ - }).then(common.mustCall()); - -assert.rejects( - subtle.generateKey( - { - name: 'ECDSA', - namedCurve: 'NODE-ED25519' - }, - true, - ['sign', 'verify']), - { - message: /Unsupported named curves for ECDSA/ - }).then(common.mustCall()); - -assert.rejects( - subtle.generateKey( - { - name: 'ECDSA', - namedCurve: 'NODE-ED448' - }, - true, - ['sign', 'verify']), - { - message: /Unsupported named curves for ECDSA/ - }).then(common.mustCall()); - -{ - for (const asymmetricKeyType of ['ed25519', 'ed448']) { - const { publicKey, privateKey } = generateKeyPairSync(asymmetricKeyType); - for (const keyObject of [publicKey, privateKey]) { - const namedCurve = `NODE-${asymmetricKeyType.toUpperCase()}`; - subtle.importKey( - 'node.keyObject', - keyObject, - { name: namedCurve, namedCurve }, - true, - keyObject.type === 'private' ? ['sign'] : ['verify'], - ).then((cryptoKey) => { - assert.strictEqual(cryptoKey.type, keyObject.type); - assert.strictEqual(cryptoKey.algorithm.name, namedCurve); - }, common.mustNotCall()); - - subtle.importKey( - keyObject.type === 'private' ? 'pkcs8' : 'spki', - keyObject.export({ - format: 'der', - type: keyObject.type === 'private' ? 'pkcs8' : 'spki', - }), - { name: namedCurve, namedCurve }, - true, - keyObject.type === 'private' ? ['sign'] : ['verify'], - ).then((cryptoKey) => { - assert.strictEqual(cryptoKey.type, keyObject.type); - assert.strictEqual(cryptoKey.algorithm.name, namedCurve); - assert.strictEqual(cryptoKey.algorithm.namedCurve, namedCurve); - }, common.mustNotCall()); - - assert.rejects( - subtle.importKey( - 'node.keyObject', - keyObject, - { - name: 'ECDSA', - namedCurve, - }, - true, - keyObject.type === 'private' ? ['sign'] : ['verify'] - ), - { - message: /Invalid algorithm name/ - }).then(common.mustCall()); - - assert.rejects( - subtle.importKey( - 'node.keyObject', - keyObject, - { - name: 'ECDH', - namedCurve, - }, - true, - keyObject.type === 'private' ? ['deriveBits', 'deriveKey'] : [], - ), - { - message: /Invalid algorithm name/ - }).then(common.mustCall()); - } - } -} - -{ - // See: https://github.com/nodejs/node/pull/40300 - for (const namedCurve of ['NODE-ED25519', 'NODE-ED448']) { - assert.rejects( - (async () => { - const { privateKey } = await generateKey(namedCurve); - return subtle.sign( - { - name: namedCurve, - hash: 'SHA-256' - }, - privateKey, - Buffer.from('abc') - ); - })(), - (err) => { - assert.strictEqual(err.message, `Hash is not permitted for ${namedCurve}`); - assert(err instanceof DOMException); - return true; - }).then(common.mustCall()); - - assert.rejects( - (async () => { - const { publicKey, privateKey } = await generateKey(namedCurve); - const signature = await subtle.sign( - { - name: namedCurve, - }, - privateKey, - Buffer.from('abc') - ).catch(common.mustNotCall()); - - return subtle.verify( - { - name: namedCurve, - hash: 'SHA-256', - }, - publicKey, - signature, - Buffer.from('abc') - ); - })(), - (err) => { - assert.strictEqual(err.message, `Hash is not permitted for ${namedCurve}`); - assert(err instanceof DOMException); - return true; - }).then(common.mustCall()); - } -} diff --git a/test/parallel/test-webcrypto-encrypt-decrypt-aes.js b/test/parallel/test-webcrypto-encrypt-decrypt-aes.js index 885cded906b..5dfae1c5d55 100644 --- a/test/parallel/test-webcrypto-encrypt-decrypt-aes.js +++ b/test/parallel/test-webcrypto-encrypt-decrypt-aes.js @@ -119,7 +119,7 @@ async function testDecrypt({ keyBuffer, algorithm, result }) { decryptionFailing.forEach((vector) => { variations.push(assert.rejects(testDecrypt(vector), { - message: /bad decrypt/ + name: 'OperationError' })); }); @@ -158,7 +158,7 @@ async function testDecrypt({ keyBuffer, algorithm, result }) { decryptionFailing.forEach((vector) => { variations.push(assert.rejects(testDecrypt(vector), { - message: /bad decrypt/ + name: 'OperationError' })); }); @@ -195,7 +195,7 @@ async function testDecrypt({ keyBuffer, algorithm, result }) { decryptionFailing.forEach((vector) => { variations.push(assert.rejects(testDecrypt(vector), { - message: /bad decrypt/ + name: 'OperationError' })); }); diff --git a/test/parallel/test-webcrypto-encrypt-decrypt-rsa.js b/test/parallel/test-webcrypto-encrypt-decrypt-rsa.js index 151eebd36c9..6af0fa72796 100644 --- a/test/parallel/test-webcrypto-encrypt-decrypt-rsa.js +++ b/test/parallel/test-webcrypto-encrypt-decrypt-rsa.js @@ -127,7 +127,7 @@ async function testEncryptionLongPlaintext({ algorithm, return assert.rejects( subtle.encrypt(algorithm, publicKey, newplaintext), { - message: /data too large/ + name: 'OperationError' }); } diff --git a/test/parallel/test-webcrypto-export-import-cfrg.js b/test/parallel/test-webcrypto-export-import-cfrg.js new file mode 100644 index 00000000000..6d162ac61c2 --- /dev/null +++ b/test/parallel/test-webcrypto-export-import-cfrg.js @@ -0,0 +1,333 @@ +'use strict'; + +const common = require('../common'); +const fixtures = require('../common/fixtures'); + +if (!common.hasCrypto) + common.skip('missing crypto'); + +const assert = require('assert'); +const crypto = require('crypto'); +const { subtle } = crypto.webcrypto; + +const keyData = { + 'Ed25519': { + jwsAlg: 'EdDSA', + spki: Buffer.from( + '302a300506032b6570032100a054b618c12b26c8d43595a5c38dd2b0140b944a' + + '151f75003278c2b6c58ec08f', 'hex'), + pkcs8: Buffer.from( + '302e020100300506032b657004220420d53150bdcd17b4d4b21ae756d4965639' + + 'd75b28f56ff9111b1f88326913e445bc', 'hex'), + jwk: { + kty: 'OKP', + crv: 'Ed25519', + x: 'oFS2GMErJsjUNZWlw43SsBQLlEoVH3UAMnjCtsWOwI8', + d: '1TFQvc0XtNSyGudW1JZWOddbKPVv-REbH4gyaRPkRbw' + } + }, + 'Ed448': { + jwsAlg: 'EdDSA', + spki: Buffer.from( + '3043300506032b6571033a0008cc38160c85bca5656ac4924af7ea97a9161b20' + + '2528273dcb84afd2eeb99ac912a401b34ef15ef4d9486406a6eecc31e5909219' + + 'bd54866800', 'hex'), + pkcs8: Buffer.from( + '3047020100300506032b6571043b0439afd05b2fbb153b47c18dfa66baaed0de' + + 'fb4e88c651487cdee0fafc40fa3d048fe1cd145a44143243c0468166b5bc161a' + + '82e3b904f3e2fcaaf9', 'hex'), + jwk: { + kty: 'OKP', + crv: 'Ed448', + x: 'CMw4FgyFvKVlasSSSvfql6kWGyAlKCc9y4Sv0u65mskSpAGzTvFe9NlIZAam7' + + 'swx5ZCSGb1UhmgA', + d: 'r9BbL7sVO0fBjfpmuq7Q3vtOiMZRSHze4Pr8QPo9BI_hzRRaRBQyQ8BGgWa1v' + + 'BYaguO5BPPi_Kr5' + } + }, + 'X25519': { + jwsAlg: 'ECDH-ES', + spki: Buffer.from( + '302a300506032b656e032100f38d9f4e621a44e0428176a4c8a534b34f07f8db' + + '30152f9ca0167aabf598fe65', 'hex'), + pkcs8: Buffer.from( + '302e020100300506032b656e04220420a8327850317b4b03a5a8b4e923413b1d' + + 'a4a642e0d6f7a72cf4d16a549e628a5f', 'hex'), + jwk: { + kty: 'OKP', + crv: 'X25519', + x: '842fTmIaROBCgXakyKU0s08H-NswFS-coBZ6q_WY_mU', + d: 'qDJ4UDF7SwOlqLTpI0E7HaSmQuDW96cs9NFqVJ5iil8' + } + }, + 'X448': { + jwsAlg: 'ECDH-ES', + spki: Buffer.from( + '3042300506032b656f0339001d451c8c0c369a42eadfc2875cd44953caeb46c4' + + '66dc86568280bfdbbb01f4709a1b0b1e0dd66cf7b11c84119ddc98890db72891' + + '29e30da4', 'hex'), + pkcs8: Buffer.from( + '3046020100300506032b656f043a0438fc818f6546a81f963c27765dc1c05bfd' + + 'b169667e5e0cf45318ed1cb93872217ab0d9004e0c7dd0dcb00192f72039cc1a' + + '1dff750ec31c8afb', 'hex'), + jwk: { + kty: 'OKP', + crv: 'X448', + x: 'HUUcjAw2mkLq38KHXNRJU8rrRsRm3IZWgoC_27sB9HCaGwseDdZs97EchBGd3' + + 'JiJDbcokSnjDaQ', + d: '_IGPZUaoH5Y8J3ZdwcBb_bFpZn5eDPRTGO0cuThyIXqw2QBODH3Q3LABkvcgO' + + 'cwaHf91DsMcivs' + } + } +}; + +const testVectors = [ + { + name: 'Ed25519', + privateUsages: ['sign'], + publicUsages: ['verify'] + }, + { + name: 'Ed448', + privateUsages: ['sign'], + publicUsages: ['verify'] + }, + { + name: 'X25519', + privateUsages: ['deriveKey', 'deriveBits'], + publicUsages: [] + }, + { + name: 'X448', + privateUsages: ['deriveKey', 'deriveBits'], + publicUsages: [] + }, +]; + +async function testImportSpki({ name, publicUsages }, extractable) { + const key = await subtle.importKey( + 'spki', + keyData[name].spki, + { name }, + extractable, + publicUsages); + assert.strictEqual(key.type, 'public'); + assert.strictEqual(key.extractable, extractable); + assert.deepStrictEqual(key.usages, publicUsages); + assert.deepStrictEqual(key.algorithm.name, name); + + if (extractable) { + // Test the roundtrip + const spki = await subtle.exportKey('spki', key); + assert.strictEqual( + Buffer.from(spki).toString('hex'), + keyData[name].spki.toString('hex')); + } else { + await assert.rejects( + subtle.exportKey('spki', key), { + message: /key is not extractable/ + }); + } + + // Bad usage + await assert.rejects( + subtle.importKey( + 'spki', + keyData[name].spki, + { name }, + extractable, + ['wrapKey']), + { message: /Unsupported key usage/ }); +} + +async function testImportPkcs8({ name, privateUsages }, extractable) { + const key = await subtle.importKey( + 'pkcs8', + keyData[name].pkcs8, + { name }, + extractable, + privateUsages); + assert.strictEqual(key.type, 'private'); + assert.strictEqual(key.extractable, extractable); + assert.deepStrictEqual(key.usages, privateUsages); + assert.deepStrictEqual(key.algorithm.name, name); + + if (extractable) { + // Test the roundtrip + const pkcs8 = await subtle.exportKey('pkcs8', key); + assert.strictEqual( + Buffer.from(pkcs8).toString('hex'), + keyData[name].pkcs8.toString('hex')); + } else { + await assert.rejects( + subtle.exportKey('pkcs8', key), { + message: /key is not extractable/ + }); + } +} + +async function testImportJwk({ name, publicUsages, privateUsages }, extractable) { + + const jwk = keyData[name].jwk; + + const [ + publicKey, + privateKey, + ] = await Promise.all([ + subtle.importKey( + 'jwk', + { + kty: jwk.kty, + crv: jwk.crv, + x: jwk.x, + }, + { name }, + extractable, publicUsages), + subtle.importKey( + 'jwk', + jwk, + { name }, + extractable, + privateUsages), + subtle.importKey( + 'jwk', + { + alg: keyData[name].jwsAlg, + kty: jwk.kty, + crv: jwk.crv, + x: jwk.x, + }, + { name }, + extractable, publicUsages), + subtle.importKey( + 'jwk', + { + ...jwk, + alg: keyData[name].jwsAlg, + }, + { name }, + extractable, + privateUsages), + ]); + + assert.strictEqual(publicKey.type, 'public'); + assert.strictEqual(privateKey.type, 'private'); + assert.strictEqual(publicKey.extractable, extractable); + assert.strictEqual(privateKey.extractable, extractable); + assert.deepStrictEqual(publicKey.usages, publicUsages); + assert.deepStrictEqual(privateKey.usages, privateUsages); + assert.strictEqual(publicKey.algorithm.name, name); + assert.strictEqual(privateKey.algorithm.name, name); + + if (extractable) { + // Test the round trip + const [ + pubJwk, + pvtJwk, + ] = await Promise.all([ + subtle.exportKey('jwk', publicKey), + subtle.exportKey('jwk', privateKey), + ]); + + assert.deepStrictEqual(pubJwk.key_ops, publicUsages); + assert.strictEqual(pubJwk.ext, true); + assert.strictEqual(pubJwk.kty, 'OKP'); + assert.strictEqual(pubJwk.x, jwk.x); + assert.strictEqual(pubJwk.crv, jwk.crv); + + assert.deepStrictEqual(pvtJwk.key_ops, privateUsages); + assert.strictEqual(pvtJwk.ext, true); + assert.strictEqual(pvtJwk.kty, 'OKP'); + assert.strictEqual(pvtJwk.x, jwk.x); + assert.strictEqual(pvtJwk.crv, jwk.crv); + assert.strictEqual(pvtJwk.d, jwk.d); + + if (jwk.crv.startsWith('Ed')) { + assert.strictEqual(pubJwk.alg, 'EdDSA'); + assert.strictEqual(pvtJwk.alg, 'EdDSA'); + } else { + assert.strictEqual(pubJwk.alg, undefined); + assert.strictEqual(pvtJwk.alg, undefined); + } + } else { + await assert.rejects( + subtle.exportKey('jwk', publicKey), { + message: /key is not extractable/ + }); + await assert.rejects( + subtle.exportKey('jwk', privateKey), { + message: /key is not extractable/ + }); + } + + for (const crv of [undefined, name === 'Ed25519' ? 'Ed448' : 'Ed25519']) { + await assert.rejects( + subtle.importKey( + 'jwk', + { kty: jwk.kty, x: jwk.x, y: jwk.y, crv }, + { name }, + extractable, + publicUsages), + { message: /Subtype mismatch/ }); + + await assert.rejects( + subtle.importKey( + 'jwk', + { kty: jwk.kty, d: jwk.d, x: jwk.x, y: jwk.y, crv }, + { name }, + extractable, + publicUsages), + { message: /Subtype mismatch/ }); + } +} + +async function testImportRaw({ name, publicUsages }) { + const jwk = keyData[name].jwk; + + const publicKey = await subtle.importKey( + 'raw', + Buffer.from(jwk.x, 'base64url'), + { name }, + true, publicUsages); + + assert.strictEqual(publicKey.type, 'public'); + assert.deepStrictEqual(publicKey.usages, publicUsages); + assert.strictEqual(publicKey.algorithm.name, name); +} + +(async function() { + const tests = []; + testVectors.forEach((vector) => { + [true, false].forEach((extractable) => { + tests.push(testImportSpki(vector, extractable)); + tests.push(testImportPkcs8(vector, extractable)); + tests.push(testImportJwk(vector, extractable)); + }); + tests.push(testImportRaw(vector)); + }); + + await Promise.all(tests); +})().then(common.mustCall()); + +{ + const rsaPublic = crypto.createPublicKey( + fixtures.readKey('rsa_public_2048.pem')); + const rsaPrivate = crypto.createPrivateKey( + fixtures.readKey('rsa_private_2048.pem')); + + for (const [name, [publicUsage, privateUsage]] of Object.entries({ + 'Ed25519': ['verify', 'sign'], + 'X448': ['deriveBits', 'deriveBits'], + })) { + assert.rejects(subtle.importKey( + 'spki', + rsaPublic.export({ format: 'der', type: 'spki' }), + { name }, + true, [publicUsage]), { message: /Invalid key type/ }); + assert.rejects(subtle.importKey( + 'pkcs8', + rsaPrivate.export({ format: 'der', type: 'pkcs8' }), + { name }, + true, [privateUsage]), { message: /Invalid key type/ }); + } +} diff --git a/test/parallel/test-webcrypto-export-import-dsa.js b/test/parallel/test-webcrypto-export-import-dsa.js deleted file mode 100644 index 01e31d74794..00000000000 --- a/test/parallel/test-webcrypto-export-import-dsa.js +++ /dev/null @@ -1,164 +0,0 @@ -'use strict'; - -const common = require('../common'); -const fixtures = require('../common/fixtures'); - -if (!common.hasCrypto) - common.skip('missing crypto'); - -const assert = require('assert'); -const crypto = require('crypto'); -const { subtle } = crypto.webcrypto; - -const sizes = [1024]; - -const hashes = [ - 'SHA-1', - 'SHA-256', - 'SHA-384', - 'SHA-512', -]; - -const keyData = { - 1024: { - spki: Buffer.from( - '308201c03082013406072a8648ce3804013082012702818100d5f35aa5730e26166fd' + - '3ea81f8f0eeb05bd1250e164b7c76b180b6dae95096d13dee6956e15a9aea7cf18a0d' + - 'f7c5dc326ccef1cbf97636d22f870b76f2607f9a867db2756aecf65505aa48fdea5f5' + - 'ee54f508a05d9dae76bf262b4ca3662cc176b7c628c7bee2076df07f9a64e0402630d' + - 'fee63eaf0ed64d48b469fe1c9ac4a1021d00b14213226cfcfb59e3a0379e559c74ff8' + - 'a7383eb4c41cecb6f3732b702818100a0865b7f8954e7ae587c8e6a89e391e82657c5' + - '8f05ccd94de61748e89e217efab3d9b5fa842ebc62525966916ad2b7af422a9b24078' + - '17a5b382b6581434fd1a169c75ad4d0e3862a3f484e9f9f2a816f943a8e6060f26fe2' + - '7c533587b765e57948439084e76fd6a4fd004f5c78d972cf7f100ec9494a902645bac' + - 'a4b4c6f399303818500028181009a8df69f2fe321869e2094e387bc1dc2b5f3bff2a2' + - 'e23cfba51d3c119fba6b4c15a49485fa811b6955d91d28c9e2e0445a79ddc5426b2fe' + - '44e00a6c9254c776f13fd10dbc934262077b1df72c16bc848817c61fb6a607abe60c7' + - 'd11528ab9bdf55de45495733a047bd75a48b8166f1aa3deab681a2574a4f35106f0d7' + - '8b641d7', 'hex'), - pkcs8: Buffer.from( - '3082015b0201003082013406072a8648ce3804013082012702818100d5f35aa5730e2' + - '6166fd3ea81f8f0eeb05bd1250e164b7c76b180b6dae95096d13dee6956e15a9aea7c' + - 'f18a0df7c5dc326ccef1cbf97636d22f870b76f2607f9a867db2756aecf65505aa48f' + - 'dea5f5ee54f508a05d9dae76bf262b4ca3662cc176b7c628c7bee2076df07f9a64e04' + - '02630dfee63eaf0ed64d48b469fe1c9ac4a1021d00b14213226cfcfb59e3a0379e559' + - 'c74ff8a7383eb4c41cecb6f3732b702818100a0865b7f8954e7ae587c8e6a89e391e8' + - '2657c58f05ccd94de61748e89e217efab3d9b5fa842ebc62525966916ad2b7af422a9' + - 'b2407817a5b382b6581434fd1a169c75ad4d0e3862a3f484e9f9f2a816f943a8e6060' + - 'f26fe27c533587b765e57948439084e76fd6a4fd004f5c78d972cf7f100ec9494a902' + - '645baca4b4c6f3993041e021c600daa0a9c4cc674c98bb07956374c84ac1c33af8816' + - '3ea7e2587876', 'hex'), - }, -}; - -async function testImportSpki({ name, publicUsages }, size, hash, extractable) { - const key = await subtle.importKey( - 'spki', - keyData[size].spki, - { name, hash }, - extractable, - publicUsages); - - assert.strictEqual(key.type, 'public'); - assert.strictEqual(key.extractable, extractable); - assert.deepStrictEqual(key.usages, publicUsages); - assert.strictEqual(key.algorithm.name, name); - assert.strictEqual(key.algorithm.modulusLength, size); - assert.strictEqual(key.algorithm.hash.name, hash); - - if (extractable) { - const spki = await subtle.exportKey('spki', key); - assert.strictEqual( - Buffer.from(spki).toString('hex'), - keyData[size].spki.toString('hex')); - } else { - await assert.rejects( - subtle.exportKey('spki', key), { - message: /key is not extractable/ - }); - } -} - -async function testImportPkcs8( - { name, privateUsages }, - size, - hash, - extractable) { - const key = await subtle.importKey( - 'pkcs8', - keyData[size].pkcs8, - { name, hash }, - extractable, - privateUsages); - - assert.strictEqual(key.type, 'private'); - assert.strictEqual(key.extractable, extractable); - assert.deepStrictEqual(key.usages, privateUsages); - assert.strictEqual(key.algorithm.name, name); - assert.strictEqual(key.algorithm.modulusLength, size); - assert.strictEqual(key.algorithm.hash.name, hash); - - if (extractable) { - const pkcs8 = await subtle.exportKey('pkcs8', key); - assert.strictEqual( - Buffer.from(pkcs8).toString('hex'), - keyData[size].pkcs8.toString('hex')); - } else { - await assert.rejects( - subtle.exportKey('pkcs8', key), { - message: /key is not extractable/ - }); - } -} - -// combinations to test -const testVectors = [ - { - name: 'NODE-DSA', - privateUsages: ['sign'], - publicUsages: ['verify'] - }, -]; - -(async function() { - const variations = []; - sizes.forEach((size) => { - hashes.forEach((hash) => { - [true, false].forEach((extractable) => { - testVectors.forEach((vector) => { - variations.push(testImportSpki(vector, size, hash, extractable)); - variations.push(testImportPkcs8(vector, size, hash, extractable)); - }); - }); - }); - }); - await Promise.all(variations); -})().then(common.mustCall()); - -{ - const ecPublic = crypto.createPublicKey( - fixtures.readKey('ec_p256_public.pem')); - const ecPrivate = crypto.createPrivateKey( - fixtures.readKey('ec_p256_private.pem')); - - assert.rejects(subtle.importKey( - 'node.keyObject', - ecPublic, - { name: 'NODE-DSA', hash: 'SHA-256' }, - true, ['verify']), { message: /Invalid key type/ }); - assert.rejects(subtle.importKey( - 'node.keyObject', - ecPrivate, - { name: 'NODE-DSA', hash: 'SHA-256' }, - true, ['sign']), { message: /Invalid key type/ }); - assert.rejects(subtle.importKey( - 'spki', - ecPublic.export({ format: 'der', type: 'spki' }), - { name: 'NODE-DSA', hash: 'SHA-256' }, - true, ['verify']), { message: /Invalid key type/ }); - assert.rejects(subtle.importKey( - 'pkcs8', - ecPrivate.export({ format: 'der', type: 'pkcs8' }), - { name: 'NODE-DSA', hash: 'SHA-256' }, - true, ['sign']), { message: /Invalid key type/ }); -} diff --git a/test/parallel/test-webcrypto-export-import-ec.js b/test/parallel/test-webcrypto-export-import-ec.js index 682d5f54be5..79f82a3d4ad 100644 --- a/test/parallel/test-webcrypto-export-import-ec.js +++ b/test/parallel/test-webcrypto-export-import-ec.js @@ -260,6 +260,55 @@ async function testImportJwk( message: /key is not extractable/ }); } + + for (const crv of [undefined, namedCurve === 'P-256' ? 'P-384' : 'P-256']) { + await assert.rejects( + subtle.importKey( + 'jwk', + { kty: jwk.kty, x: jwk.x, y: jwk.y, crv }, + { name, namedCurve }, + extractable, + publicUsages), + { message: /Named curve mismatch/ }); + + await assert.rejects( + subtle.importKey( + 'jwk', + { kty: jwk.kty, d: jwk.d, x: jwk.x, y: jwk.y, crv }, + { name, namedCurve }, + extractable, + publicUsages), + { message: /Named curve mismatch/ }); + } +} + +async function testImportRaw({ name, publicUsages }, namedCurve) { + const jwk = keyData[namedCurve].jwk; + + const [publicKey] = await Promise.all([ + subtle.importKey( + 'raw', + Buffer.concat([ + Buffer.alloc(1, 0x04), + Buffer.from(jwk.x, 'base64url'), + Buffer.from(jwk.y, 'base64url'), + ]), + { name, namedCurve }, + true, publicUsages), + subtle.importKey( + 'raw', + Buffer.concat([ + Buffer.alloc(1, 0x03), + Buffer.from(jwk.x, 'base64url'), + ]), + { name, namedCurve }, + true, publicUsages), + ]); + + assert.strictEqual(publicKey.type, 'public'); + assert.deepStrictEqual(publicKey.usages, publicUsages); + assert.strictEqual(publicKey.algorithm.name, name); + assert.strictEqual(publicKey.algorithm.namedCurve, namedCurve); } (async function() { @@ -271,6 +320,7 @@ async function testImportJwk( tests.push(testImportPkcs8(vector, namedCurve, extractable)); tests.push(testImportJwk(vector, namedCurve, extractable)); }); + tests.push(testImportRaw(vector, namedCurve)); }); }); @@ -287,16 +337,6 @@ async function testImportJwk( 'ECDSA': ['verify', 'sign'], 'ECDH': ['deriveBits', 'deriveBits'], })) { - assert.rejects(subtle.importKey( - 'node.keyObject', - rsaPublic, - { name, hash: 'SHA-256', namedCurve: 'P-256' }, - true, [publicUsage]), { message: /Invalid key type/ }); - assert.rejects(subtle.importKey( - 'node.keyObject', - rsaPrivate, - { name, hash: 'SHA-256', namedCurve: 'P-256' }, - true, [privateUsage]), { message: /Invalid key type/ }); assert.rejects(subtle.importKey( 'spki', rsaPublic.export({ format: 'der', type: 'spki' }), diff --git a/test/parallel/test-webcrypto-export-import-rsa.js b/test/parallel/test-webcrypto-export-import-rsa.js index ab7aa77394a..1efc69b70aa 100644 --- a/test/parallel/test-webcrypto-export-import-rsa.js +++ b/test/parallel/test-webcrypto-export-import-rsa.js @@ -481,48 +481,6 @@ const testVectors = [ await Promise.all(variations); })().then(common.mustCall()); -{ - const publicPem = fixtures.readKey('rsa_pss_public_2048.pem', 'ascii'); - const privatePem = fixtures.readKey('rsa_pss_private_2048.pem', 'ascii'); - - const publicDer = Buffer.from( - publicPem.replace( - /(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g, - '' - ), - 'base64' - ); - const privateDer = Buffer.from( - privatePem.replace( - /(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g, - '' - ), - 'base64' - ); - - (async () => { - const key = await subtle.importKey( - 'spki', - publicDer, - { name: 'RSA-PSS', hash: 'SHA-256' }, - true, - ['verify']); - const jwk = await subtle.exportKey('jwk', key); - assert.strictEqual(jwk.alg, 'PS256'); - })().then(common.mustCall()); - - (async () => { - const key = await subtle.importKey( - 'pkcs8', - privateDer, - { name: 'RSA-PSS', hash: 'SHA-256' }, - true, - ['sign']); - const jwk = await subtle.exportKey('jwk', key); - assert.strictEqual(jwk.alg, 'PS256'); - })().then(common.mustCall()); -} - { const ecPublic = crypto.createPublicKey( fixtures.readKey('ec_p256_public.pem')); @@ -534,16 +492,6 @@ const testVectors = [ 'RSASSA-PKCS1-v1_5': ['verify', 'sign'], 'RSA-OAEP': ['encrypt', 'decrypt'], })) { - assert.rejects(subtle.importKey( - 'node.keyObject', - ecPublic, - { name, hash: 'SHA-256' }, - true, [publicUsage]), { message: /Invalid key type/ }); - assert.rejects(subtle.importKey( - 'node.keyObject', - ecPrivate, - { name, hash: 'SHA-256' }, - true, [privateUsage]), { message: /Invalid key type/ }); assert.rejects(subtle.importKey( 'spki', ecPublic.export({ format: 'der', type: 'spki' }), diff --git a/test/parallel/test-webcrypto-export-import.js b/test/parallel/test-webcrypto-export-import.js index b4fd26b0cda..02e178f7262 100644 --- a/test/parallel/test-webcrypto-export-import.js +++ b/test/parallel/test-webcrypto-export-import.js @@ -42,13 +42,6 @@ const { subtle } = webcrypto; name: 'SyntaxError', message: 'Unsupported key usage for an HMAC key' }); - await assert.rejects( - subtle.importKey('node.keyObject', '', { - name: 'HMAC', - hash: 'SHA-256' - }, false, ['sign', 'verify']), { - code: 'ERR_INVALID_ARG_TYPE' - }); await assert.rejects( subtle.importKey('raw', keyData, { name: 'HMAC', diff --git a/test/parallel/test-webcrypto-keygen.js b/test/parallel/test-webcrypto-keygen.js index 502c86cf32a..5acea2debdd 100644 --- a/test/parallel/test-webcrypto-keygen.js +++ b/test/parallel/test-webcrypto-keygen.js @@ -1,3 +1,4 @@ +// Flags: --expose-internals 'use strict'; const common = require('../common'); @@ -10,8 +11,11 @@ const { types: { isCryptoKey } } = require('util'); const { webcrypto: { subtle, CryptoKey }, createSecretKey, + KeyObject, } = require('crypto'); +const { bigIntArrayToUnsignedBigInt } = require('internal/crypto/util'); + const allUsages = [ 'encrypt', 'decrypt', @@ -25,49 +29,49 @@ const allUsages = [ const vectors = { 'AES-CTR': { algorithm: { length: 256 }, + result: 'CryptoKey', usages: [ 'encrypt', 'decrypt', 'wrapKey', 'unwrapKey', ], - mandatoryUsages: [] }, 'AES-CBC': { algorithm: { length: 256 }, + result: 'CryptoKey', usages: [ 'encrypt', 'decrypt', 'wrapKey', 'unwrapKey', ], - mandatoryUsages: [] }, 'AES-GCM': { algorithm: { length: 256 }, + result: 'CryptoKey', usages: [ 'encrypt', 'decrypt', 'wrapKey', 'unwrapKey', ], - mandatoryUsages: [] }, 'AES-KW': { algorithm: { length: 256 }, + result: 'CryptoKey', usages: [ 'wrapKey', 'unwrapKey', ], - mandatoryUsages: [] }, 'HMAC': { algorithm: { length: 256, hash: 'SHA-256' }, + result: 'CryptoKey', usages: [ 'sign', 'verify', ], - mandatoryUsages: [] }, 'RSASSA-PKCS1-v1_5': { algorithm: { @@ -75,11 +79,11 @@ const vectors = { publicExponent: new Uint8Array([1, 0, 1]), hash: 'SHA-256' }, + result: 'CryptoKeyPair', usages: [ 'sign', 'verify', ], - mandatoryUsages: ['sign'], }, 'RSA-PSS': { algorithm: { @@ -87,11 +91,11 @@ const vectors = { publicExponent: new Uint8Array([1, 0, 1]), hash: 'SHA-256' }, + result: 'CryptoKeyPair', usages: [ 'sign', 'verify', ], - mandatoryUsages: ['sign'] }, 'RSA-OAEP': { algorithm: { @@ -99,47 +103,58 @@ const vectors = { publicExponent: new Uint8Array([1, 0, 1]), hash: 'SHA-256' }, + result: 'CryptoKeyPair', usages: [ 'encrypt', 'decrypt', 'wrapKey', 'unwrapKey', ], - mandatoryUsages: [ - 'decrypt', - 'unwrapKey', - ] }, 'ECDSA': { algorithm: { namedCurve: 'P-521' }, + result: 'CryptoKeyPair', usages: [ 'sign', 'verify', ], - mandatoryUsages: ['sign'] }, 'ECDH': { algorithm: { namedCurve: 'P-521' }, + result: 'CryptoKeyPair', usages: [ 'deriveKey', 'deriveBits', ], - mandatoryUsages: [ - 'deriveKey', - 'deriveBits', - ] }, - 'NODE-DSA': { - algorithm: { modulusLength: 1024, hash: 'SHA-256' }, + 'Ed25519': { + result: 'CryptoKeyPair', usages: [ 'sign', 'verify', ], - mandatoryUsages: [ + }, + 'Ed448': { + result: 'CryptoKeyPair', + usages: [ 'sign', 'verify', - ] - } + ], + }, + 'X25519': { + result: 'CryptoKeyPair', + usages: [ + 'deriveKey', + 'deriveBits', + ], + }, + 'X448': { + result: 'CryptoKeyPair', + usages: [ + 'deriveKey', + 'deriveBits', + ], + }, }; // Test invalid algorithms @@ -183,19 +198,49 @@ const vectors = { // Test bad usages { async function test(name) { - const invalidUsages = []; - allUsages.forEach((usage) => { - if (!vectors[name].usages.includes(usage)) - invalidUsages.push(usage); - }); - return assert.rejects( + await assert.rejects( subtle.generateKey( { name, ...vectors[name].algorithm }, true, - invalidUsages), - { message: /Unsupported key usage/ }); + []), + { message: /Usages cannot be empty/ }); + + // For CryptoKeyPair results the private key + // usages must not be empty. + // - ECDH(-like) algorithm key pairs only have private key usages + // - Signing algorithm key pairs may pass a non-empty array but + // with only a public key usage + if ( + vectors[name].result === 'CryptoKeyPair' && + vectors[name].usages.includes('verify') + ) { + await assert.rejects( + subtle.generateKey( + { + name, ...vectors[name].algorithm + }, + true, + ['verify']), + { message: /Usages cannot be empty/ }); + } + + const invalidUsages = []; + allUsages.forEach((usage) => { + if (!vectors[name].usages.includes(usage)) + invalidUsages.push(usage); + }); + for (const invalidUsage of invalidUsages) { + await assert.rejects( + subtle.generateKey( + { + name, ...vectors[name].algorithm + }, + true, + [...vectors[name].usages, invalidUsage]), + { message: /Unsupported key usage/ }); + } } const tests = Object.keys(vectors).map(test); @@ -239,10 +284,16 @@ const vectors = { assert.strictEqual(publicKey.algorithm.name, name); assert.strictEqual(publicKey.algorithm.modulusLength, modulusLength); assert.deepStrictEqual(publicKey.algorithm.publicExponent, publicExponent); + assert.strictEqual( + KeyObject.from(publicKey).asymmetricKeyDetails.publicExponent, + bigIntArrayToUnsignedBigInt(publicExponent)); assert.strictEqual(publicKey.algorithm.hash.name, hash); assert.strictEqual(privateKey.algorithm.name, name); assert.strictEqual(privateKey.algorithm.modulusLength, modulusLength); assert.deepStrictEqual(privateKey.algorithm.publicExponent, publicExponent); + assert.strictEqual( + KeyObject.from(privateKey).asymmetricKeyDetails.publicExponent, + bigIntArrayToUnsignedBigInt(publicExponent)); assert.strictEqual(privateKey.algorithm.hash.name, hash); // Missing parameters @@ -319,6 +370,17 @@ const vectors = { code: 'ERR_INVALID_ARG_TYPE' }); })); + + await Promise.all([[1], [1, 0, 0]].map((publicExponent) => { + return assert.rejects(subtle.generateKey({ + name, + modulusLength, + publicExponent: new Uint8Array(publicExponent), + hash + }, true, usages), { + name: 'OperationError', + }); + })); } const kTests = [ @@ -390,7 +452,7 @@ const vectors = { [1, true, {}, [], undefined, null].forEach(async (namedCurve) => { await assert.rejects( subtle.generateKey({ name, namedCurve }, true, privateUsages), { - code: 'ERR_INVALID_ARG_TYPE' + name: 'NotSupportedError' }); }); } @@ -450,14 +512,14 @@ const vectors = { [1, 100, 257].forEach(async (length) => { await assert.rejects( subtle.generateKey({ name, length }, true, usages), { - code: 'ERR_INVALID_ARG_VALUE' + name: 'OperationError' }); }); ['', {}, [], false, null, undefined].forEach(async (length) => { await assert.rejects( subtle.generateKey({ name, length }, true, usages), { - code: 'ERR_INVALID_ARG_TYPE' + name: 'OperationError', }); }); } @@ -535,21 +597,29 @@ const vectors = { tests.then(common.mustCall()); } -// Test NODE-DSA key generation +// End user code cannot create CryptoKey directly +assert.throws(() => new CryptoKey(), { code: 'ERR_ILLEGAL_CONSTRUCTOR' }); + +{ + const buffer = Buffer.from('Hello World'); + const keyObject = createSecretKey(buffer); + assert(!isCryptoKey(buffer)); + assert(!isCryptoKey(keyObject)); +} + +// Test OKP Key Generation { async function test( name, - modulusLength, - hash, privateUsages, publicUsages = privateUsages) { + let usages = privateUsages; if (publicUsages !== privateUsages) usages = usages.concat(publicUsages); + const { publicKey, privateKey } = await subtle.generateKey({ name, - modulusLength, - hash }, true, usages); assert(publicKey); @@ -564,104 +634,35 @@ const vectors = { assert.deepStrictEqual(publicKey.usages, publicUsages); assert.deepStrictEqual(privateKey.usages, privateUsages); assert.strictEqual(publicKey.algorithm.name, name); - assert.strictEqual(publicKey.algorithm.modulusLength, modulusLength); - assert.strictEqual(publicKey.algorithm.hash.name, hash); assert.strictEqual(privateKey.algorithm.name, name); - assert.strictEqual(privateKey.algorithm.modulusLength, modulusLength); - assert.strictEqual(privateKey.algorithm.hash.name, hash); - - // Missing parameters - await assert.rejects( - subtle.generateKey({ name, hash }, true, usages), { - code: 'ERR_INVALID_ARG_TYPE' - }); - - await assert.rejects( - subtle.generateKey({ name, modulusLength }, true, usages), { - code: 'ERR_MISSING_OPTION' - }); - - await Promise.all(['', true, {}].map((modulusLength) => { - return assert.rejects(subtle.generateKey({ - name, - modulusLength, - hash - }, true, usages), { - code: 'ERR_INVALID_ARG_TYPE' - }); - })); - - await Promise.all([true, {}, 1, []].map((hash) => { - return assert.rejects(subtle.generateKey({ - name, - modulusLength, - hash - }, true, usages), { - message: /Unrecognized name/ - }); - })); - - await Promise.all(['', {}, 1, []].map((extractable) => { - return assert.rejects(subtle.generateKey({ - name, - modulusLength, - hash - }, extractable, usages), { - code: 'ERR_INVALID_ARG_TYPE' - }); - })); - - await Promise.all(['', {}, 1, false].map((usages) => { - return assert.rejects(subtle.generateKey({ - name, - modulusLength, - hash - }, true, usages), { - code: 'ERR_INVALID_ARG_TYPE' - }); - })); } const kTests = [ [ - 'NODE-DSA', - 1024, - 'SHA-256', + 'Ed25519', ['sign'], ['verify'], ], + [ + 'Ed448', + ['sign'], + ['verify'], + ], + [ + 'X25519', + ['deriveKey', 'deriveBits'], + [], + ], + [ + 'X448', + ['deriveKey', 'deriveBits'], + [], + ], ]; const tests = kTests.map((args) => test(...args)); - Promise.all(tests).then(common.mustCall()); -} - -// Test NODE-DH key generation -(async function() { - const { publicKey, privateKey } = - await subtle.generateKey({ - name: 'NODE-DH', - group: 'modp15' - }, true, ['deriveKey']); - assert(publicKey); - assert(privateKey); - assert(isCryptoKey(publicKey)); - assert(isCryptoKey(privateKey)); - assert.strictEqual(publicKey.type, 'public'); - assert.strictEqual(privateKey.type, 'private'); - assert.strictEqual(publicKey.algorithm.name, 'NODE-DH'); - assert.strictEqual(privateKey.algorithm.name, 'NODE-DH'); - assert.strictEqual(publicKey.algorithm.group, 'modp15'); - assert.strictEqual(privateKey.algorithm.group, 'modp15'); -})().then(common.mustCall()); - -// End user code cannot create CryptoKey directly -assert.throws(() => new CryptoKey(), { code: 'ERR_ILLEGAL_CONSTRUCTOR' }); + // Test bad parameters -{ - const buffer = Buffer.from('Hello World'); - const keyObject = createSecretKey(buffer); - assert(!isCryptoKey(buffer)); - assert(!isCryptoKey(keyObject)); + Promise.all(tests).then(common.mustCall()); } diff --git a/test/parallel/test-webcrypto-random.js b/test/parallel/test-webcrypto-random.js index c3fc6aaab2e..73089fe7b49 100644 --- a/test/parallel/test-webcrypto-random.js +++ b/test/parallel/test-webcrypto-random.js @@ -47,10 +47,10 @@ for (const ctor of intTypedConstructors) { } { - const buf = new Uint16Array(10); - const before = Buffer.from(buf).toString('hex'); + const buf = Buffer.alloc(10); + const before = buf.toString('hex'); webcrypto.getRandomValues(buf); - const after = Buffer.from(buf).toString('hex'); + const after = buf.toString('hex'); assert.notStrictEqual(before, after); } diff --git a/test/parallel/test-webcrypto-rsa-pss-params.js b/test/parallel/test-webcrypto-rsa-pss-params.js deleted file mode 100644 index 964eaf32e89..00000000000 --- a/test/parallel/test-webcrypto-rsa-pss-params.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -const common = require('../common'); - -if (!common.hasCrypto) - common.skip('missing crypto'); - -const { - createPrivateKey, - createPublicKey, - webcrypto: { - subtle - } -} = require('crypto'); - -const fixtures = require('../common/fixtures'); - -{ - const rsaPssKeyWithoutParams = fixtures.readKey('rsa_pss_private_2048.pem'); - - const pkcs8 = createPrivateKey(rsaPssKeyWithoutParams).export({ - type: 'pkcs8', - format: 'der' - }); - const spki = createPublicKey(rsaPssKeyWithoutParams).export({ - type: 'spki', - format: 'der' - }); - - const hashes = ['SHA-1', 'SHA-256', 'SHA-384', 'SHA-512']; - - const tasks = []; - for (const hash of hashes) { - const algorithm = { name: 'RSA-PSS', hash }; - tasks.push(subtle.importKey('pkcs8', pkcs8, algorithm, true, ['sign'])); - tasks.push(subtle.importKey('spki', spki, algorithm, true, ['verify'])); - } - - Promise.all(tasks).then(common.mustCall()); -} diff --git a/test/parallel/test-webcrypto-sign-verify-ecdsa.js b/test/parallel/test-webcrypto-sign-verify-ecdsa.js index 2f8f3a2fd22..4e79e4d4f84 100644 --- a/test/parallel/test-webcrypto-sign-verify-ecdsa.js +++ b/test/parallel/test-webcrypto-sign-verify-ecdsa.js @@ -23,6 +23,7 @@ async function testVerify({ name, privateKey, hmacKey, rsaKeys, + okpKeys, ] = await Promise.all([ subtle.importKey( 'spki', @@ -55,6 +56,12 @@ async function testVerify({ name, }, false, ['sign']), + subtle.generateKey( + { + name: 'Ed25519', + }, + false, + ['sign']), ]); assert(await subtle.verify({ name, hash }, publicKey, signature, plaintext)); @@ -89,6 +96,11 @@ async function testVerify({ name, message: /Unable to use this key to verify/ }); + await assert.rejects( + subtle.verify({ name, hash }, okpKeys.publicKey, signature, plaintext), { + message: /Unable to use this key to verify/ + }); + // Test failure when signature is altered { const copy = Buffer.from(signature); @@ -140,6 +152,7 @@ async function testSign({ name, privateKey, hmacKey, rsaKeys, + okpKeys, ] = await Promise.all([ subtle.importKey( 'spki', @@ -172,6 +185,12 @@ async function testSign({ name, }, false, ['sign']), + subtle.generateKey( + { + name: 'Ed25519', + }, + false, + ['sign']), ]); { @@ -210,6 +229,11 @@ async function testSign({ name, subtle.sign({ name, hash }, rsaKeys.privateKey, plaintext), { message: /Unable to use this key to sign/ }); + + await assert.rejects( + subtle.sign({ name, hash }, okpKeys.privateKey, plaintext), { + message: /Unable to use this key to sign/ + }); } (async function() { diff --git a/test/parallel/test-webcrypto-sign-verify-eddsa.js b/test/parallel/test-webcrypto-sign-verify-eddsa.js new file mode 100644 index 00000000000..cec4f57a41a --- /dev/null +++ b/test/parallel/test-webcrypto-sign-verify-eddsa.js @@ -0,0 +1,263 @@ +'use strict'; + +const common = require('../common'); + +if (!common.hasCrypto) + common.skip('missing crypto'); + +const assert = require('assert'); +const { subtle } = require('crypto').webcrypto; + +const vectors = require('../fixtures/crypto/eddsa')(); + +async function testVerify({ name, + publicKeyBuffer, + privateKeyBuffer, + signature, + data }) { + const [ + publicKey, + noVerifyPublicKey, + privateKey, + hmacKey, + rsaKeys, + ecKeys, + ] = await Promise.all([ + subtle.importKey( + 'spki', + publicKeyBuffer, + { name }, + false, + ['verify']), + subtle.importKey( + 'spki', + publicKeyBuffer, + { name }, + false, + [ /* No usages */ ]), + subtle.importKey( + 'pkcs8', + privateKeyBuffer, + { name }, + false, + ['sign']), + subtle.generateKey( + { name: 'HMAC', hash: 'SHA-256' }, + false, + ['sign']), + subtle.generateKey( + { + name: 'RSA-PSS', + modulusLength: 1024, + publicExponent: new Uint8Array([1, 0, 1]), + hash: 'SHA-256', + }, + false, + ['sign']), + subtle.generateKey( + { + name: 'ECDSA', + namedCurve: 'P-256' + }, + false, + ['sign']), + ]); + + assert(await subtle.verify({ name }, publicKey, signature, data)); + + // Test verification with altered buffers + const copy = Buffer.from(data); + const sigcopy = Buffer.from(signature); + const p = subtle.verify({ name }, publicKey, sigcopy, copy); + copy[0] = 255 - copy[0]; + sigcopy[0] = 255 - sigcopy[0]; + assert(await p); + + // Test failure when using wrong key + await assert.rejects( + subtle.verify({ name }, privateKey, signature, data), { + message: /Unable to use this key to verify/ + }); + + await assert.rejects( + subtle.verify({ name }, noVerifyPublicKey, signature, data), { + message: /Unable to use this key to verify/ + }); + + // Test failure when using the wrong algorithms + await assert.rejects( + subtle.verify({ name }, hmacKey, signature, data), { + message: /Unable to use this key to verify/ + }); + + await assert.rejects( + subtle.verify({ name }, rsaKeys.publicKey, signature, data), { + message: /Unable to use this key to verify/ + }); + + await assert.rejects( + subtle.verify({ name }, ecKeys.publicKey, signature, data), { + message: /Unable to use this key to verify/ + }); + + // Test failure when signature is altered + { + const copy = Buffer.from(signature); + copy[0] = 255 - copy[0]; + assert(!(await subtle.verify( + { name }, + publicKey, + copy, + data))); + assert(!(await subtle.verify( + { name }, + publicKey, + copy.slice(1), + data))); + } + + // Test failure when data is altered + { + const copy = Buffer.from(data); + copy[0] = 255 - copy[0]; + assert(!(await subtle.verify({ name }, publicKey, signature, copy))); + } +} + +async function testSign({ name, + publicKeyBuffer, + privateKeyBuffer, + signature, + data }) { + const [ + publicKey, + noSignPrivateKey, + privateKey, + hmacKey, + rsaKeys, + ecKeys, + ] = await Promise.all([ + subtle.importKey( + 'spki', + publicKeyBuffer, + { name }, + false, + ['verify']), + subtle.importKey( + 'pkcs8', + privateKeyBuffer, + { name }, + false, + [ /* No usages */ ]), + subtle.importKey( + 'pkcs8', + privateKeyBuffer, + { name }, + false, + ['sign']), + subtle.generateKey( + { name: 'HMAC', hash: 'SHA-256' }, + false, + ['sign']), + subtle.generateKey( + { + name: 'RSA-PSS', + modulusLength: 1024, + publicExponent: new Uint8Array([1, 0, 1]), + hash: 'SHA-256', + }, + false, + ['sign']), + subtle.generateKey( + { + name: 'ECDSA', + namedCurve: 'P-256' + }, + false, + ['sign']), + ]); + + { + const sig = await subtle.sign({ name }, privateKey, data); + assert.strictEqual(sig.byteLength, signature.byteLength); + assert(await subtle.verify({ name }, publicKey, sig, data)); + } + + { + const copy = Buffer.from(data); + const p = subtle.sign({ name }, privateKey, copy); + copy[0] = 255 - copy[0]; + const sig = await p; + assert(await subtle.verify({ name }, publicKey, sig, data)); + } + + // Test failure when using wrong key + await assert.rejects( + subtle.sign({ name }, publicKey, data), { + message: /Unable to use this key to sign/ + }); + + // Test failure when no sign usage + await assert.rejects( + subtle.sign({ name }, noSignPrivateKey, data), { + message: /Unable to use this key to sign/ + }); + + // Test failure when using the wrong algorithms + await assert.rejects( + subtle.sign({ name }, hmacKey, data), { + message: /Unable to use this key to sign/ + }); + + await assert.rejects( + subtle.sign({ name }, rsaKeys.privateKey, data), { + message: /Unable to use this key to sign/ + }); + + await assert.rejects( + subtle.sign({ name }, ecKeys.privateKey, data), { + message: /Unable to use this key to sign/ + }); +} + +(async function() { + const variations = []; + + vectors.forEach((vector) => { + variations.push(testVerify(vector)); + variations.push(testSign(vector)); + }); + + await Promise.all(variations); +})().then(common.mustCall()); + +// Ed448 context +{ + const vector = vectors.find(({ name }) => name === 'Ed448'); + Promise.all([ + subtle.importKey( + 'pkcs8', + vector.privateKeyBuffer, + { name: 'Ed448' }, + false, + ['sign']), + subtle.importKey( + 'spki', + vector.publicKeyBuffer, + { name: 'Ed448' }, + false, + ['verify']), + ]).then(async ([privateKey, publicKey]) => { + const sig = await subtle.sign({ name: 'Ed448', context: Buffer.alloc(0) }, privateKey, vector.data); + assert.deepStrictEqual(Buffer.from(sig), vector.signature); + assert.strictEqual( + await subtle.verify({ name: 'Ed448', context: Buffer.alloc(0) }, publicKey, sig, vector.data), true); + + await assert.rejects(subtle.sign({ name: 'Ed448', context: Buffer.alloc(1) }, privateKey, vector.data), { + message: /Non zero-length context is not yet supported/ + }); + await assert.rejects(subtle.verify({ name: 'Ed448', context: Buffer.alloc(1) }, publicKey, sig, vector.data), { + message: /Non zero-length context is not yet supported/ + }); + }).then(common.mustCall()); +} diff --git a/test/parallel/test-webcrypto-sign-verify-hmac.js b/test/parallel/test-webcrypto-sign-verify-hmac.js index 3028816054c..0962773b132 100644 --- a/test/parallel/test-webcrypto-sign-verify-hmac.js +++ b/test/parallel/test-webcrypto-sign-verify-hmac.js @@ -153,7 +153,7 @@ async function testSign({ hash, } await assert.rejects( - subtle.generateKey({ name }, false, []), { + subtle.generateKey({ name }, false, ['sign', 'verify']), { name: 'TypeError', code: 'ERR_MISSING_OPTION', message: 'algorithm.hash is required' diff --git a/test/parallel/test-webcrypto-sign-verify-node-dsa.js b/test/parallel/test-webcrypto-sign-verify-node-dsa.js deleted file mode 100644 index 73b006b9236..00000000000 --- a/test/parallel/test-webcrypto-sign-verify-node-dsa.js +++ /dev/null @@ -1,220 +0,0 @@ -'use strict'; - -const common = require('../common'); - -if (!common.hasCrypto) - common.skip('missing crypto'); - -const assert = require('assert'); -const { subtle } = require('crypto').webcrypto; - -const dsa = require('../fixtures/crypto/dsa'); - -async function testVerify({ algorithm, - hash, - publicKeyBuffer, - privateKeyBuffer, - signature, - plaintext }) { - const [ - publicKey, - noVerifyPublicKey, - privateKey, - hmacKey, - wrongKeys, - ] = await Promise.all([ - subtle.importKey( - 'spki', - publicKeyBuffer, - { name: algorithm.name, hash }, - false, - ['verify']), - subtle.importKey( - 'spki', - publicKeyBuffer, - { name: algorithm.name, hash }, - false, - [ /* No usages */ ]), - subtle.importKey( - 'pkcs8', - privateKeyBuffer, - { name: algorithm.name, hash }, - false, - ['sign']), - subtle.generateKey( - { name: 'HMAC', hash: 'SHA-256' }, - false, - ['sign']), - subtle.generateKey( - { - name: 'ECDSA', - namedCurve: 'P-521', - hash: 'SHA-256', - }, - false, - ['sign']), - ]); - - assert(await subtle.verify(algorithm, publicKey, signature, plaintext)); - - // Test verification with altered buffers - const copy = Buffer.from(plaintext); - const sigcopy = Buffer.from(signature); - const p = subtle.verify(algorithm, publicKey, sigcopy, copy); - copy[0] = 255 - copy[0]; - sigcopy[0] = 255 - sigcopy[0]; - assert(await p); - - // Test failure when using wrong key - await assert.rejects( - subtle.verify(algorithm, privateKey, signature, plaintext), { - message: /Unable to use this key to verify/ - }); - - await assert.rejects( - subtle.verify(algorithm, noVerifyPublicKey, signature, plaintext), { - message: /Unable to use this key to verify/ - }); - - // Test failure when using the wrong algorithms - await assert.rejects( - subtle.verify(algorithm, hmacKey, signature, plaintext), { - message: /Unable to use this key to verify/ - }); - - await assert.rejects( - subtle.verify(algorithm, wrongKeys.publicKey, signature, plaintext), { - message: /Unable to use this key to verify/ - }); - - // Test failure when signature is altered - { - const copy = Buffer.from(signature); - copy[0] = 255 - copy[0]; - assert(!(await subtle.verify(algorithm, publicKey, copy, plaintext))); - assert(!(await subtle.verify( - algorithm, - publicKey, - copy.slice(1), - plaintext))); - } - - // Test failure when data is altered - { - const copy = Buffer.from(plaintext); - copy[0] = 255 - copy[0]; - assert(!(await subtle.verify(algorithm, publicKey, signature, copy))); - } - - // Test failure when wrong hash is used - { - const otherhash = hash === 'SHA-1' ? 'SHA-256' : 'SHA-1'; - assert(!(await subtle.verify({ - ...algorithm, - hash: otherhash - }, publicKey, signature, copy))); - } - - await assert.rejects( - subtle.verify( - { ...algorithm, hash: 'sha256' }, - publicKey, - signature, - copy), - { message: /Unrecognized name/ }); -} - -async function testSign({ - algorithm, - hash, - publicKeyBuffer, - privateKeyBuffer, - signature, - plaintext, -}) { - const [ - publicKey, - noSignPrivateKey, - privateKey, - hmacKey, - wrongKeys, - ] = await Promise.all([ - subtle.importKey( - 'spki', - publicKeyBuffer, - { name: algorithm.name, hash }, - false, - ['verify']), - subtle.importKey( - 'pkcs8', - privateKeyBuffer, - { name: algorithm.name, hash }, - false, - [ /* No usages */ ]), - subtle.importKey( - 'pkcs8', - privateKeyBuffer, - { name: algorithm.name, hash }, - false, - ['sign']), - subtle.generateKey( - { name: 'HMAC', hash: 'SHA-256' }, - false, - ['sign']), - subtle.generateKey( - { - name: 'ECDSA', - namedCurve: 'P-521', - hash: 'SHA-256', - }, - false, - ['sign']), - ]); - - { - const sig = await subtle.sign(algorithm, privateKey, plaintext); - assert(await subtle.verify(algorithm, publicKey, sig, plaintext)); - } - - { - const copy = Buffer.from(plaintext); - const p = subtle.sign(algorithm, privateKey, copy); - copy[0] = 255 - copy[0]; - const sig = await p; - assert(await subtle.verify(algorithm, publicKey, sig, plaintext)); - } - - // Test failure when using wrong key - await assert.rejects( - subtle.sign(algorithm, publicKey, plaintext), { - message: /Unable to use this key to sign/ - }); - - // Test failure when no sign usage - await assert.rejects( - subtle.sign(algorithm, noSignPrivateKey, plaintext), { - message: /Unable to use this key to sign/ - }); - - // Test failure when using the wrong algorithms - await assert.rejects( - subtle.sign(algorithm, hmacKey, plaintext), { - message: /Unable to use this key to sign/ - }); - - await assert.rejects( - subtle.sign(algorithm, wrongKeys.privateKey, plaintext), { - message: /Unable to use this key to sign/ - }); -} - -(async function() { - const variations = []; - - dsa().forEach((vector) => { - variations.push(testVerify(vector)); - variations.push(testSign(vector)); - }); - - await Promise.all(variations); -})().then(common.mustCall()); diff --git a/test/parallel/test-webcrypto-sign-verify.js b/test/parallel/test-webcrypto-sign-verify.js index 71e357fedb7..6c6b1578154 100644 --- a/test/parallel/test-webcrypto-sign-verify.js +++ b/test/parallel/test-webcrypto-sign-verify.js @@ -104,3 +104,43 @@ const { subtle } = require('crypto').webcrypto; test('hello world').then(common.mustCall()); } + +// Test Sign/Verify Ed25519 +{ + async function test(data) { + const ec = new TextEncoder(); + const { publicKey, privateKey } = await subtle.generateKey({ + name: 'Ed25519', + }, true, ['sign', 'verify']); + + const signature = await subtle.sign({ + name: 'Ed25519', + }, privateKey, ec.encode(data)); + + assert(await subtle.verify({ + name: 'Ed25519', + }, publicKey, signature, ec.encode(data))); + } + + test('hello world').then(common.mustCall()); +} + +// Test Sign/Verify Ed448 +{ + async function test(data) { + const ec = new TextEncoder(); + const { publicKey, privateKey } = await subtle.generateKey({ + name: 'Ed448', + }, true, ['sign', 'verify']); + + const signature = await subtle.sign({ + name: 'Ed448', + }, privateKey, ec.encode(data)); + + assert(await subtle.verify({ + name: 'Ed448', + }, publicKey, signature, ec.encode(data))); + } + + test('hello world').then(common.mustCall()); +} diff --git a/test/parallel/test-webcrypto-util.js b/test/parallel/test-webcrypto-util.js new file mode 100644 index 00000000000..4bb14a7f914 --- /dev/null +++ b/test/parallel/test-webcrypto-util.js @@ -0,0 +1,25 @@ +// Flags: --expose-internals +'use strict'; + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); + +const assert = require('assert'); + +const { + normalizeAlgorithm, +} = require('internal/crypto/util'); + +{ + // Check that normalizeAlgorithm does not add an undefined hash property. + assert.strictEqual('hash' in normalizeAlgorithm({ name: 'ECDH' }), false); + assert.strictEqual('hash' in normalizeAlgorithm('ECDH'), false); +} + +{ + // Check that normalizeAlgorithm does not mutate object inputs. + const algorithm = { name: 'ECDH', hash: 'SHA-256' }; + assert.strictEqual(normalizeAlgorithm(algorithm) !== algorithm, true); + assert.deepStrictEqual(algorithm, { name: 'ECDH', hash: 'SHA-256' }); +} diff --git a/test/parallel/test-webcrypto-x25519-x448.js b/test/parallel/test-webcrypto-x25519-x448.js deleted file mode 100644 index 89716e5d302..00000000000 --- a/test/parallel/test-webcrypto-x25519-x448.js +++ /dev/null @@ -1,315 +0,0 @@ -'use strict'; - -const common = require('../common'); - -if (!common.hasCrypto) - common.skip('missing crypto'); - -const assert = require('assert'); - -const { - generateKeyPairSync, - webcrypto: { subtle } -} = require('crypto'); - -// X25519 and X448 are ECDH named curves that should work -// with the existing ECDH mechanisms with no additional -// changes. - -async function generateKeys(namedCurve, ...usages) { - return subtle.generateKey( - { - name: 'ECDH', - namedCurve - }, - true, - usages); -} - -async function deriveKey(publicKey, privateKey, length = 256) { - return subtle.deriveKey( - { - name: 'ECDH', - public: publicKey, - }, - privateKey, - { - name: 'HMAC', - length, - hash: 'SHA-512', - }, - true, - ['sign', 'verify'] - ); -} - -async function exportKey(secretKey) { - return subtle.exportKey('raw', secretKey); -} - -async function importKey(namedCurve, keyData, isPublic = false) { - return subtle.importKey( - 'raw', - keyData, - { name: 'ECDH', namedCurve, public: isPublic }, - true, - ['deriveKey'] - ); -} - -assert.rejects(importKey('NODE-X25519', Buffer.alloc(10), true), { - message: /NODE-X25519 raw keys must be exactly 32-bytes/ -}).then(common.mustCall()); -assert.rejects(importKey('NODE-X448', Buffer.alloc(10), true), { - message: /NODE-X448 raw keys must be exactly 56-bytes/ -}).then(common.mustCall()); - -async function test1(namedCurve) { - const { - publicKey: publicKey1, - privateKey: privateKey1, - } = await generateKeys(namedCurve, 'deriveKey', 'deriveBits'); - - const { - publicKey: publicKey2, - privateKey: privateKey2, - } = await generateKeys(namedCurve, 'deriveKey', 'deriveBits'); - - assert(publicKey1); - assert(privateKey1); - assert(publicKey2); - assert(privateKey2); - - assert.strictEqual(publicKey1.algorithm.namedCurve, namedCurve); - assert.strictEqual(privateKey1.algorithm.namedCurve, namedCurve); - assert.strictEqual(publicKey2.algorithm.namedCurve, namedCurve); - assert.strictEqual(privateKey2.algorithm.namedCurve, namedCurve); - - const [key1, key2] = await Promise.all([ - deriveKey(publicKey1, privateKey2), - deriveKey(publicKey2, privateKey1), - ]); - - assert(key1); - assert(key2); - - const [secret1, secret2] = await Promise.all([ - exportKey(key1), - exportKey(key2), - ]); - - assert.deepStrictEqual(secret1, secret2); -} - -Promise.all([ - test1('NODE-X25519'), - test1('NODE-X448'), -]).then(common.mustCall()); - -const testVectors = { - 'NODE-X25519': { - alice: { - privateKey: - Buffer.from( - '77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a', - 'hex'), - publicKey: - Buffer.from( - '8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a', - 'hex'), - }, - bob: { - privateKey: - Buffer.from( - '5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb', - 'hex'), - publicKey: - Buffer.from( - 'de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f', - 'hex'), - }, - sharedSecret: - Buffer.from( - '4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742', - 'hex'), - }, - 'NODE-X448': { - alice: { - privateKey: - Buffer.from( - '9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28d' + - 'd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726b', - 'hex'), - publicKey: - Buffer.from( - '9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c' + - '22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0', - 'hex'), - }, - bob: { - privateKey: - Buffer.from( - '1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d' + - '6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992d', - 'hex'), - publicKey: - Buffer.from( - '3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b430' + - '27d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609', - 'hex'), - }, - sharedSecret: - Buffer.from( - '07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282b' + - 'b60c0b56fd2464c335543936521c24403085d59a449a5037514a879d', - 'hex'), - }, -}; - -async function test2(namedCurve, length) { - const [ - publicKey1, - publicKey2, - privateKey1, - privateKey2, - ] = await Promise.all([ - importKey(namedCurve, testVectors[namedCurve].alice.publicKey, true), - importKey(namedCurve, testVectors[namedCurve].bob.publicKey, true), - importKey(namedCurve, testVectors[namedCurve].alice.privateKey), - importKey(namedCurve, testVectors[namedCurve].bob.privateKey), - ]); - - const [key1, key2] = await Promise.all([ - deriveKey(publicKey1, privateKey2, length), - deriveKey(publicKey2, privateKey1, length), - ]); - - assert(key1); - assert(key2); - - const [secret1, secret2] = await Promise.all([ - exportKey(key1), - exportKey(key2), - ]); - - assert.deepStrictEqual(secret1, secret2); - - assert.deepStrictEqual( - Buffer.from(secret1), - testVectors[namedCurve].sharedSecret); - - const [ - publicKeyJwk, - privateKeyJwk, - ] = await Promise.all([ - subtle.exportKey('jwk', publicKey1), - subtle.exportKey('jwk', privateKey1), - ]); - assert.strictEqual(publicKeyJwk.kty, 'OKP'); - assert.strictEqual(privateKeyJwk.kty, 'OKP'); - assert.strictEqual(publicKeyJwk.crv, namedCurve.slice(5)); - assert.strictEqual(privateKeyJwk.crv, namedCurve.slice(5)); - assert.deepStrictEqual( - Buffer.from(publicKeyJwk.x, 'base64'), - testVectors[namedCurve].alice.publicKey); - assert.deepStrictEqual( - Buffer.from(privateKeyJwk.x, 'base64'), - testVectors[namedCurve].alice.publicKey); - assert.deepStrictEqual( - Buffer.from(privateKeyJwk.d, 'base64'), - testVectors[namedCurve].alice.privateKey); -} - -Promise.all([ - test2('NODE-X25519', 256), - test2('NODE-X448', 448), -]).then(common.mustCall()); - -assert.rejects( - subtle.generateKey( - { - name: 'ECDH', - namedCurve: 'NODE-ED25519' - }, - true, - ['deriveBits']), - { - message: /Unsupported named curves for ECDH/ - }).then(common.mustCall()); - -assert.rejects( - subtle.generateKey( - { - name: 'ECDH', - namedCurve: 'NODE-ED448' - }, - true, - ['deriveBits']), - { - message: /Unsupported named curves for ECDH/ - }).then(common.mustCall()); - -{ - // Private JWK import - subtle.importKey( - 'jwk', - { - crv: 'X25519', - d: '8CE-XY7cvbR-Pu7mILHq8YZ4hLGAA2-RD01he5q2wUA', - x: '42IbTo34ZYANub5o42547vB6OxdEd44ztwZewoRch0Q', - kty: 'OKP' - }, - { - name: 'ECDH', - namedCurve: 'NODE-X25519' - }, - true, - ['deriveBits']).then(common.mustCall(), common.mustNotCall()); - - // Public JWK import - subtle.importKey( - 'jwk', - { - crv: 'X25519', - x: '42IbTo34ZYANub5o42547vB6OxdEd44ztwZewoRch0Q', - kty: 'OKP' - }, - { - name: 'ECDH', - namedCurve: 'NODE-X25519' - }, - true, - []).then(common.mustCall(), common.mustNotCall()); - - for (const asymmetricKeyType of ['x25519', 'x448']) { - const { publicKey, privateKey } = generateKeyPairSync(asymmetricKeyType); - for (const keyObject of [publicKey, privateKey]) { - const namedCurve = `NODE-${asymmetricKeyType.toUpperCase()}`; - subtle.importKey( - 'node.keyObject', - keyObject, - { name: 'ECDH', namedCurve }, - true, - keyObject.type === 'private' ? ['deriveBits', 'deriveKey'] : [], - ).then((cryptoKey) => { - assert.strictEqual(cryptoKey.type, keyObject.type); - assert.strictEqual(cryptoKey.algorithm.name, 'ECDH'); - }, common.mustNotCall()); - - subtle.importKey( - keyObject.type === 'private' ? 'pkcs8' : 'spki', - keyObject.export({ - format: 'der', - type: keyObject.type === 'private' ? 'pkcs8' : 'spki', - }), - { name: 'ECDH', namedCurve }, - true, - keyObject.type === 'private' ? ['deriveBits'] : [], - ).then((cryptoKey) => { - assert.strictEqual(cryptoKey.type, keyObject.type); - assert.strictEqual(cryptoKey.algorithm.name, 'ECDH'); - assert.strictEqual(cryptoKey.algorithm.namedCurve, namedCurve); - }, common.mustNotCall()); - } - } -} diff --git a/test/parallel/test-webstream-encoding-inspect.js b/test/parallel/test-webstream-encoding-inspect.js new file mode 100644 index 00000000000..69c947ebc6d --- /dev/null +++ b/test/parallel/test-webstream-encoding-inspect.js @@ -0,0 +1,35 @@ +'use strict'; + +require('../common'); + +const { TextEncoderStream, TextDecoderStream } = require('stream/web'); +const util = require('util'); +const assert = require('assert'); + +const textEncoderStream = new TextEncoderStream(); +assert.strictEqual( + util.inspect(textEncoderStream), + `TextEncoderStream { + encoding: 'utf-8', + readable: ReadableStream { locked: false, state: 'readable', supportsBYOB: false }, + writable: WritableStream { locked: false, state: 'writable' } +}` +); +assert.throws(() => textEncoderStream[util.inspect.custom].call(), { + code: 'ERR_INVALID_THIS', +}); + +const textDecoderStream = new TextDecoderStream(); +assert.strictEqual( + util.inspect(textDecoderStream), + `TextDecoderStream { + encoding: 'utf-8', + fatal: false, + ignoreBOM: false, + readable: ReadableStream { locked: false, state: 'readable', supportsBYOB: false }, + writable: WritableStream { locked: false, state: 'writable' } +}` +); +assert.throws(() => textDecoderStream[util.inspect.custom].call(), { + code: 'ERR_INVALID_THIS', +}); diff --git a/test/parallel/test-whatwg-encoding-custom-textdecoder.js b/test/parallel/test-whatwg-encoding-custom-textdecoder.js index 1fa65164c70..74c6a002223 100644 --- a/test/parallel/test-whatwg-encoding-custom-textdecoder.js +++ b/test/parallel/test-whatwg-encoding-custom-textdecoder.js @@ -199,3 +199,15 @@ if (common.hasIntl) { const str = decoder.decode(chunk); assert.strictEqual(str, 'foo\ufffd'); } + +if (common.hasIntl) { + try { + const decoder = new TextDecoder('Shift_JIS'); + const chunk = new Uint8Array([-1]); + const str = decoder.decode(chunk); + assert.strictEqual(str, '\ufffd'); + } catch (e) { + // Encoding may not be available, e.g. small-icu builds + assert.strictEqual(e.code, 'ERR_ENCODING_NOT_SUPPORTED'); + } +} diff --git a/test/parallel/test-eventtarget-whatwg-passive.js b/test/parallel/test-whatwg-events-add-event-listener-options-passive.js similarity index 100% rename from test/parallel/test-eventtarget-whatwg-passive.js rename to test/parallel/test-whatwg-events-add-event-listener-options-passive.js diff --git a/test/parallel/test-eventtarget-whatwg-signal.js b/test/parallel/test-whatwg-events-add-event-listener-options-signal.js similarity index 100% rename from test/parallel/test-eventtarget-whatwg-signal.js rename to test/parallel/test-whatwg-events-add-event-listener-options-signal.js diff --git a/test/parallel/test-eventtarget-whatwg-customevent.js b/test/parallel/test-whatwg-events-customevent.js similarity index 100% rename from test/parallel/test-eventtarget-whatwg-customevent.js rename to test/parallel/test-whatwg-events-customevent.js diff --git a/test/parallel/test-whatwg-events-event-constructors.js b/test/parallel/test-whatwg-events-event-constructors.js new file mode 100644 index 00000000000..7880b10043e --- /dev/null +++ b/test/parallel/test-whatwg-events-event-constructors.js @@ -0,0 +1,29 @@ +'use strict'; + +require('../common'); +const { test, assert_equals, assert_array_equals } = + require('../common/wpt').harness; + +// Source: https://github.com/web-platform-tests/wpt/blob/6cef1d2087d6a07d7cc6cee8cf207eec92e27c5f/dom/events/Event-constructors.any.js#L91-L112 +test(function() { + const called = []; + const ev = new Event('Xx', { + get cancelable() { + called.push('cancelable'); + return false; + }, + get bubbles() { + called.push('bubbles'); + return true; + }, + get sweet() { + called.push('sweet'); + return 'x'; + }, + }); + assert_array_equals(called, ['bubbles', 'cancelable']); + assert_equals(ev.type, 'Xx'); + assert_equals(ev.bubbles, true); + assert_equals(ev.cancelable, false); + assert_equals(ev.sweet, undefined); +}); diff --git a/test/parallel/test-whatwg-events-eventtarget-this-of-listener.js b/test/parallel/test-whatwg-events-eventtarget-this-of-listener.js new file mode 100644 index 00000000000..16ee14feabe --- /dev/null +++ b/test/parallel/test-whatwg-events-eventtarget-this-of-listener.js @@ -0,0 +1,119 @@ +'use strict'; + +require('../common'); +const { test, assert_equals, assert_unreached } = + require('../common/wpt').harness; + +// Manually ported from: https://github.com/web-platform-tests/wpt/blob/6cef1d2087d6a07d7cc6cee8cf207eec92e27c5f/dom/events/EventTarget-this-of-listener.html + +// Mock document +const document = { + createElement: () => new EventTarget(), + createTextNode: () => new EventTarget(), + createDocumentFragment: () => new EventTarget(), + createComment: () => new EventTarget(), + createProcessingInstruction: () => new EventTarget(), +}; + +test(() => { + const nodes = [ + document.createElement('p'), + document.createTextNode('some text'), + document.createDocumentFragment(), + document.createComment('a comment'), + document.createProcessingInstruction('target', 'data'), + ]; + + let callCount = 0; + for (const node of nodes) { + node.addEventListener('someevent', function() { + ++callCount; + assert_equals(this, node); + }); + + node.dispatchEvent(new Event('someevent')); + } + + assert_equals(callCount, nodes.length); +}, 'the this value inside the event listener callback should be the node'); + +test(() => { + const nodes = [ + document.createElement('p'), + document.createTextNode('some text'), + document.createDocumentFragment(), + document.createComment('a comment'), + document.createProcessingInstruction('target', 'data'), + ]; + + let callCount = 0; + for (const node of nodes) { + const handler = {}; + + node.addEventListener('someevent', handler); + handler.handleEvent = function() { + ++callCount; + assert_equals(this, handler); + }; + + node.dispatchEvent(new Event('someevent')); + } + + assert_equals(callCount, nodes.length); +}, 'addEventListener should not require handleEvent to be defined on object listeners'); + +test(() => { + const nodes = [ + document.createElement('p'), + document.createTextNode('some text'), + document.createDocumentFragment(), + document.createComment('a comment'), + document.createProcessingInstruction('target', 'data'), + ]; + + let callCount = 0; + for (const node of nodes) { + function handler() { + ++callCount; + assert_equals(this, node); + } + + handler.handleEvent = () => { + assert_unreached('should not call the handleEvent method on a function'); + }; + + node.addEventListener('someevent', handler); + + node.dispatchEvent(new Event('someevent')); + } + + assert_equals(callCount, nodes.length); +}, 'handleEvent properties added to a function before addEventListener are not reached'); + +test(() => { + const nodes = [ + document.createElement('p'), + document.createTextNode('some text'), + document.createDocumentFragment(), + document.createComment('a comment'), + document.createProcessingInstruction('target', 'data'), + ]; + + let callCount = 0; + for (const node of nodes) { + function handler() { + ++callCount; + assert_equals(this, node); + } + + node.addEventListener('someevent', handler); + + handler.handleEvent = () => { + assert_unreached('should not call the handleEvent method on a function'); + }; + + node.dispatchEvent(new Event('someevent')); + } + + assert_equals(callCount, nodes.length); +}, 'handleEvent properties added to a function after addEventListener are not reached'); diff --git a/test/parallel/test-whatwg-readablebytestream.js b/test/parallel/test-whatwg-readablebytestream.js index 83ec85fae61..6b305a0d836 100644 --- a/test/parallel/test-whatwg-readablebytestream.js +++ b/test/parallel/test-whatwg-readablebytestream.js @@ -65,6 +65,9 @@ const { defaultReader.releaseLock(); const byobReader = r.getReader({ mode: 'byob' }); assert(byobReader instanceof ReadableStreamBYOBReader); + assert.match( + inspect(byobReader, { depth: 0 }), + /ReadableStreamBYOBReader/); } class Source { @@ -233,6 +236,19 @@ class Source { }); } +{ + let controller; + new ReadableStream({ + type: 'bytes', + start(c) { controller = c; } + }); + controller.enqueue(new Uint8Array(10)); + controller.close(); + assert.throws(() => controller.enqueue(new Uint8Array(10)), { + code: 'ERR_INVALID_STATE', + }); +} + { const stream = new ReadableStream({ type: 'bytes', diff --git a/test/parallel/test-whatwg-readablestream.js b/test/parallel/test-whatwg-readablestream.js index cef3eca6ed2..c798c73500f 100644 --- a/test/parallel/test-whatwg-readablestream.js +++ b/test/parallel/test-whatwg-readablestream.js @@ -32,6 +32,7 @@ const { readableStreamDefaultControllerCanCloseOrEnqueue, readableByteStreamControllerClose, readableByteStreamControllerRespond, + readableStreamReaderGenericRelease, } = require('internal/webstreams/readablestream'); const { @@ -371,6 +372,24 @@ assert.throws(() => { }); } +{ + const stream = new ReadableStream(); + const iterable = stream.values(); + readableStreamReaderGenericRelease(stream[kState].reader); + assert.rejects(iterable.next(), { + code: 'ERR_INVALID_STATE', + }).then(common.mustCall()); +} + +{ + const stream = new ReadableStream(); + const iterable = stream.values(); + readableStreamReaderGenericRelease(stream[kState].reader); + assert.rejects(iterable.return(), { + code: 'ERR_INVALID_STATE', + }).then(common.mustCall()); +} + { const stream = new ReadableStream({ start(controller) { @@ -1285,7 +1304,6 @@ class Source { }); async function read(stream) { - // eslint-disable-next-line no-unused-vars for await (const _ of stream.values({ preventCancel: true })) return; } @@ -1300,7 +1318,6 @@ class Source { const stream = new ReadableStream(source); async function read(stream) { - // eslint-disable-next-line no-unused-vars for await (const _ of stream.values({ preventCancel: false })) return; } @@ -1357,6 +1374,9 @@ class Source { assert.throws(() => ReadableStream.prototype.tee.call({}), { code: 'ERR_INVALID_THIS', }); + assert.throws(() => ReadableStream.prototype.values.call({}), { + code: 'ERR_INVALID_THIS', + }); assert.throws(() => ReadableStream.prototype[kTransfer].call({}), { code: 'ERR_INVALID_THIS', }); @@ -1551,7 +1571,7 @@ class Source { assert(!readableStreamDefaultControllerCanCloseOrEnqueue(controller)); readableStreamDefaultControllerEnqueue(controller); readableByteStreamControllerClose(controller); - readableByteStreamControllerEnqueue(controller); + readableByteStreamControllerEnqueue(controller, new Uint8Array(1)); } { diff --git a/test/parallel/test-whatwg-readablestream.mjs b/test/parallel/test-whatwg-readablestream.mjs index a3693f62439..57ebed60454 100644 --- a/test/parallel/test-whatwg-readablestream.mjs +++ b/test/parallel/test-whatwg-readablestream.mjs @@ -34,3 +34,37 @@ import assert from 'assert'; assert.strictEqual(dataReader2, 'foobar'); })().then(mustCall()); } + +{ + // Test ReadableByteStream.tee() with close in the nextTick after enqueue + async function read(stream) { + const chunks = []; + for await (const chunk of stream) + chunks.push(chunk); + return Buffer.concat(chunks).toString(); + } + + const [r1, r2] = new ReadableStream({ + type: 'bytes', + start(controller) { + process.nextTick(() => { + controller.enqueue(new Uint8Array([102, 111, 111, 98, 97, 114])); + + process.nextTick(() => { + controller.close(); + }); + }); + } + }).tee(); + + (async () => { + const [dataReader1, dataReader2] = await Promise.all([ + read(r1), + read(r2), + ]); + + assert.strictEqual(dataReader1, dataReader2); + assert.strictEqual(dataReader1, 'foobar'); + assert.strictEqual(dataReader2, 'foobar'); + })().then(mustCall()); +} diff --git a/test/parallel/test-whatwg-url-constructor.js b/test/parallel/test-whatwg-url-constructor.js deleted file mode 100644 index 3dc1c598602..00000000000 --- a/test/parallel/test-whatwg-url-constructor.js +++ /dev/null @@ -1,144 +0,0 @@ -'use strict'; -const common = require('../common'); -if (!common.hasIntl) { - // A handful of the tests fail when ICU is not included. - common.skip('missing Intl'); -} - -const fixtures = require('../common/fixtures'); -const { test, assert_equals, assert_true, assert_throws } = - require('../common/wpt').harness; - -const request = { - response: require( - fixtures.path('wpt', 'url', 'resources', 'urltestdata.json') - ) -}; - -// The following tests are copied from WPT. Modifications to them should be -// upstreamed first. -// Refs: https://github.com/w3c/web-platform-tests/blob/8791bed/url/url-constructor.html -// License: http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html - -/* eslint-disable */ -function runURLConstructorTests() { - // var setup = async_test("Loading data…") - // setup.step(function() { - // var request = new XMLHttpRequest() - // request.open("GET", "urltestdata.json") - // request.send() - // request.responseType = "json" - // request.onload = setup.step_func(function() { - runURLTests(request.response) - // setup.done() - // }) - // }) -} - -function bURL(url, base) { - return new URL(url, base || "about:blank") -} - - -function runURLTests(urltests) { - for(var i = 0, l = urltests.length; i < l; i++) { - var expected = urltests[i] - if (typeof expected === "string") continue // skip comments - - test(function() { - if (expected.failure) { - assert_throws(new TypeError(), function() { - bURL(expected.input, expected.base) - }) - return - } - - var url = bURL(expected.input, expected.base) - assert_equals(url.href, expected.href, "href") - assert_equals(url.protocol, expected.protocol, "protocol") - assert_equals(url.username, expected.username, "username") - assert_equals(url.password, expected.password, "password") - assert_equals(url.host, expected.host, "host") - assert_equals(url.hostname, expected.hostname, "hostname") - assert_equals(url.port, expected.port, "port") - assert_equals(url.pathname, expected.pathname, "pathname") - assert_equals(url.search, expected.search, "search") - if ("searchParams" in expected) { - assert_true("searchParams" in url) - assert_equals(url.searchParams.toString(), expected.searchParams, "searchParams") - } - assert_equals(url.hash, expected.hash, "hash") - }, "Parsing: <" + expected.input + "> against <" + expected.base + ">") - } -} - -function runURLSearchParamTests() { - test(function() { - var url = bURL('http://example.org/?a=b') - assert_true("searchParams" in url) - var searchParams = url.searchParams - assert_true(url.searchParams === searchParams, 'Object identity should hold.') - }, 'URL.searchParams getter') - - test(function() { - var url = bURL('http://example.org/?a=b') - assert_true("searchParams" in url) - var searchParams = url.searchParams - assert_equals(searchParams.toString(), 'a=b') - - searchParams.set('a', 'b') - assert_equals(url.searchParams.toString(), 'a=b') - assert_equals(url.search, '?a=b') - url.search = '' - assert_equals(url.searchParams.toString(), '') - assert_equals(url.search, '') - assert_equals(searchParams.toString(), '') - }, 'URL.searchParams updating, clearing') - - test(function() { - 'use strict' - var urlString = 'http://example.org' - var url = bURL(urlString) - assert_throws(TypeError(), function() { url.searchParams = new URLSearchParams(urlString) }) - }, 'URL.searchParams setter, invalid values') - - test(function() { - var url = bURL('http://example.org/file?a=b&c=d') - assert_true("searchParams" in url) - var searchParams = url.searchParams - assert_equals(url.search, '?a=b&c=d') - assert_equals(searchParams.toString(), 'a=b&c=d') - - // Test that setting 'search' propagates to the URL object's query object. - url.search = 'e=f&g=h' - assert_equals(url.search, '?e=f&g=h') - assert_equals(searchParams.toString(), 'e=f&g=h') - - // ..and same but with a leading '?'. - url.search = '?e=f&g=h' - assert_equals(url.search, '?e=f&g=h') - assert_equals(searchParams.toString(), 'e=f&g=h') - - // And in the other direction, altering searchParams propagates - // back to 'search'. - searchParams.append('i', ' j ') - assert_equals(url.search, '?e=f&g=h&i=+j+') - assert_equals(url.searchParams.toString(), 'e=f&g=h&i=+j+') - assert_equals(searchParams.get('i'), ' j ') - - searchParams.set('e', 'updated') - assert_equals(url.search, '?e=updated&g=h&i=+j+') - assert_equals(searchParams.get('e'), 'updated') - - var url2 = bURL('http://example.org/file??a=b&c=d') - assert_equals(url2.search, '??a=b&c=d') - assert_equals(url2.searchParams.toString(), '%3Fa=b&c=d') - - url2.href = 'http://example.org/file??a=b' - assert_equals(url2.search, '??a=b') - assert_equals(url2.searchParams.toString(), '%3Fa=b') - }, 'URL.searchParams and URL.search setters, update propagation') -} -runURLSearchParamTests() -runURLConstructorTests() -/* eslint-enable */ diff --git a/test/parallel/test-whatwg-url-custom-searchparams-inspect.js b/test/parallel/test-whatwg-url-custom-searchparams-inspect.js index c03890938d9..7729a36eb8f 100644 --- a/test/parallel/test-whatwg-url-custom-searchparams-inspect.js +++ b/test/parallel/test-whatwg-url-custom-searchparams-inspect.js @@ -9,12 +9,20 @@ const util = require('util'); const sp = new URLSearchParams('?a=a&b=b&b=c'); assert.strictEqual(util.inspect(sp), "URLSearchParams { 'a' => 'a', 'b' => 'b', 'b' => 'c' }"); +assert.strictEqual(util.inspect(sp, { depth: -1 }), '[Object]'); +assert.strictEqual( + util.inspect(sp, { breakLength: 1 }), + "URLSearchParams {\n 'a' => 'a',\n 'b' => 'b',\n 'b' => 'c' }" +); assert.strictEqual(util.inspect(sp.keys()), "URLSearchParams Iterator { 'a', 'b', 'b' }"); assert.strictEqual(util.inspect(sp.values()), "URLSearchParams Iterator { 'a', 'b', 'c' }"); assert.strictEqual(util.inspect(sp.keys(), { breakLength: 1 }), "URLSearchParams Iterator {\n 'a',\n 'b',\n 'b' }"); +assert.throws(() => sp[util.inspect.custom].call(), { + code: 'ERR_INVALID_THIS', +}); const iterator = sp.entries(); assert.strictEqual(util.inspect(iterator), @@ -27,3 +35,5 @@ iterator.next(); iterator.next(); assert.strictEqual(util.inspect(iterator), 'URLSearchParams Iterator { }'); +const emptySp = new URLSearchParams(); +assert.strictEqual(util.inspect(emptySp), 'URLSearchParams {}'); diff --git a/test/parallel/test-whatwg-url-origin.js b/test/parallel/test-whatwg-url-origin.js deleted file mode 100644 index 532ff06bb11..00000000000 --- a/test/parallel/test-whatwg-url-origin.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; -const common = require('../common'); -if (!common.hasIntl) { - // A handful of the tests fail when ICU is not included. - common.skip('missing Intl'); -} - -const fixtures = require('../common/fixtures'); -const { test, assert_equals } = require('../common/wpt').harness; - -const request = { - response: require( - fixtures.path('wpt', 'url', 'resources', 'urltestdata.json') - ) -}; - -// The following tests are copied from WPT. Modifications to them should be -// upstreamed first. -// Refs: https://github.com/w3c/web-platform-tests/blob/8791bed/url/url-origin.html -// License: http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html - -/* eslint-disable */ -function runURLOriginTests() { - // var setup = async_test("Loading data…") - // setup.step(function() { - // var request = new XMLHttpRequest() - // request.open("GET", "urltestdata.json") - // request.send() - // request.responseType = "json" - // request.onload = setup.step_func(function() { - runURLTests(request.response) - // setup.done() - // }) - // }) -} - -function bURL(url, base) { - return new URL(url, base || "about:blank") -} - -function runURLTests(urltests) { - for(var i = 0, l = urltests.length; i < l; i++) { - var expected = urltests[i] - if (typeof expected === "string" || !("origin" in expected)) continue - test(function() { - var url = bURL(expected.input, expected.base) - assert_equals(url.origin, expected.origin, "origin") - }, "Origin parsing: <" + expected.input + "> against <" + expected.base + ">") - } -} - -runURLOriginTests() -/* eslint-enable */ diff --git a/test/parallel/test-whatwg-url-setters.js b/test/parallel/test-whatwg-url-setters.js deleted file mode 100644 index 8742ab8ed37..00000000000 --- a/test/parallel/test-whatwg-url-setters.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; - -const common = require('../common'); -if (!common.hasIntl) { - // A handful of the tests fail when ICU is not included. - common.skip('missing Intl'); -} - -const { test, assert_equals } = require('../common/wpt').harness; -const fixtures = require('../common/fixtures'); - -const request = { - response: require(fixtures.path( - 'wpt', 'url', 'resources', 'setters_tests.json' - )) -}; - -// The following tests are copied from WPT. Modifications to them should be -// upstreamed first. -// Refs: https://github.com/w3c/web-platform-tests/blob/8791bed/url/url-setters.html -// License: http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html - -/* eslint-disable */ -function startURLSettersTests() { -// var setup = async_test("Loading data…") -// setup.step(function() { -// var request = new XMLHttpRequest() -// request.open("GET", "setters_tests.json") -// request.send() -// request.responseType = "json" -// request.onload = setup.step_func(function() { - runURLSettersTests(request.response) -// setup.done() -// }) -// }) -} - -function runURLSettersTests(all_test_cases) { - for (var attribute_to_be_set in all_test_cases) { - if (attribute_to_be_set == "comment") { - continue; - } - var test_cases = all_test_cases[attribute_to_be_set]; - for(var i = 0, l = test_cases.length; i < l; i++) { - var test_case = test_cases[i]; - var name = `Setting <${test_case.href}>.${attribute_to_be_set}` + - ` = '${test_case.new_value}'`; - if ("comment" in test_case) { - name += ` ${test_case.comment}`; - } - test(function() { - var url = new URL(test_case.href); - url[attribute_to_be_set] = test_case.new_value; - for (var attribute in test_case.expected) { - assert_equals(url[attribute], test_case.expected[attribute]) - } - }, `URL: ${name}`); - // test(function() { - // var url = document.createElement("a"); - // url.href = test_case.href; - // url[attribute_to_be_set] = test_case.new_value; - // for (var attribute in test_case.expected) { - // assert_equals(url[attribute], test_case.expected[attribute]) - // } - // }, ": " + name) - // test(function() { - // var url = document.createElement("area"); - // url.href = test_case.href; - // url[attribute_to_be_set] = test_case.new_value; - // for (var attribute in test_case.expected) { - // assert_equals(url[attribute], test_case.expected[attribute]) - // } - // }, ": " + name) - } - } -} - -startURLSettersTests() -/* eslint-enable */ diff --git a/test/parallel/test-worker-exit-heapsnapshot.js b/test/parallel/test-worker-exit-heapsnapshot.js new file mode 100644 index 00000000000..a7b7b26ecae --- /dev/null +++ b/test/parallel/test-worker-exit-heapsnapshot.js @@ -0,0 +1,17 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const { getHeapSnapshot } = require('v8'); +const { isMainThread, Worker } = require('worker_threads'); + +// Checks taking heap snapshot at the exit event listener of Worker doesn't +// crash the process. +// Regression for https://github.com/nodejs/node/issues/43122. +if (isMainThread) { + const worker = new Worker(__filename); + + worker.once('exit', common.mustCall((code) => { + assert.strictEqual(code, 0); + getHeapSnapshot().pipe(process.stdout); + })); +} diff --git a/test/parallel/test-worker-hasref.js b/test/parallel/test-worker-hasref.js new file mode 100644 index 00000000000..51593b14725 --- /dev/null +++ b/test/parallel/test-worker-hasref.js @@ -0,0 +1,33 @@ +'use strict'; +const common = require('../common'); + +const { Worker } = require('worker_threads'); +const { createHook } = require('async_hooks'); +const { strictEqual } = require('assert'); + +let handle; + +createHook({ + init(asyncId, type, triggerAsyncId, resource) { + if (type === 'WORKER') { + handle = resource; + this.disable(); + } + } +}).enable(); + +const w = new Worker('', { eval: true }); + +strictEqual(handle.hasRef(), true); +w.unref(); +strictEqual(handle.hasRef(), false); +w.ref(); +strictEqual(handle.hasRef(), true); + +w.on('exit', common.mustCall((exitCode) => { + strictEqual(exitCode, 0); + strictEqual(handle.hasRef(), true); + setTimeout(common.mustCall(() => { + strictEqual(handle.hasRef(), undefined); + }), 0); +})); diff --git a/test/parallel/test-worker-init-failure.js b/test/parallel/test-worker-init-failure.js index a15d8a75617..078329ee688 100644 --- a/test/parallel/test-worker-init-failure.js +++ b/test/parallel/test-worker-init-failure.js @@ -10,6 +10,10 @@ if (common.isWindows) { common.skip('ulimit does not work on Windows.'); } +if (process.config.variables.node_builtin_modules_path) { + common.skip('this test cannot pass when Node.js is built with --node-builtin-modules-path'); +} + // A reasonably low fd count. An empty node process // creates around 30 fds for its internal purposes, // so making it too low will crash the process early, diff --git a/test/parallel/test-worker-message-port.js b/test/parallel/test-worker-message-port.js index ca28f6ccb73..2663dde2a1b 100644 --- a/test/parallel/test-worker-message-port.js +++ b/test/parallel/test-worker-message-port.js @@ -179,7 +179,7 @@ const { MessageChannel, MessagePort } = require('worker_threads'); assert.deepStrictEqual( Object.getOwnPropertyNames(MessagePort.prototype).sort(), [ - 'close', 'constructor', 'onmessage', 'onmessageerror', 'postMessage', - 'ref', 'start', 'unref', + 'close', 'constructor', 'hasRef', 'onmessage', 'onmessageerror', + 'postMessage', 'ref', 'start', 'unref', ]); } diff --git a/test/parallel/test-worker-messageport-hasref.js b/test/parallel/test-worker-messageport-hasref.js new file mode 100644 index 00000000000..448787742e3 --- /dev/null +++ b/test/parallel/test-worker-messageport-hasref.js @@ -0,0 +1,45 @@ +'use strict'; +const common = require('../common'); + +const { Worker } = require('worker_threads'); +const { createHook } = require('async_hooks'); +const { deepStrictEqual, strictEqual } = require('assert'); + +const m = new Map(); +createHook({ + init(asyncId, type, triggerAsyncId, resource) { + if (['WORKER', 'MESSAGEPORT'].includes(type)) { + m.set(asyncId, { type, resource }); + } + }, + destroy(asyncId) { + m.delete(asyncId); + } +}).enable(); + +function getActiveWorkerAndMessagePortTypes() { + const activeWorkerAndMessagePortTypes = []; + for (const asyncId of m.keys()) { + const { type, resource } = m.get(asyncId); + // Same logic as https://github.com/mafintosh/why-is-node-running/blob/24fb4c878753390a05d00959e6173d0d3c31fddd/index.js#L31-L32. + if (typeof resource.hasRef !== 'function' || resource.hasRef() === true) { + activeWorkerAndMessagePortTypes.push(type); + } + } + return activeWorkerAndMessagePortTypes; +} + +const w = new Worker('', { eval: true }); +deepStrictEqual(getActiveWorkerAndMessagePortTypes(), ['WORKER']); +w.unref(); +deepStrictEqual(getActiveWorkerAndMessagePortTypes(), []); +w.ref(); +deepStrictEqual(getActiveWorkerAndMessagePortTypes(), ['WORKER', 'MESSAGEPORT']); + +w.on('exit', common.mustCall((exitCode) => { + strictEqual(exitCode, 0); + deepStrictEqual(getActiveWorkerAndMessagePortTypes(), ['WORKER']); + setTimeout(common.mustCall(() => { + deepStrictEqual(getActiveWorkerAndMessagePortTypes(), []); + }), 0); +})); diff --git a/test/parallel/test-worker-nearheaplimit-deadlock.js b/test/parallel/test-worker-nearheaplimit-deadlock.js index 1f38bc074da..cf4c0d972c8 100644 --- a/test/parallel/test-worker-nearheaplimit-deadlock.js +++ b/test/parallel/test-worker-nearheaplimit-deadlock.js @@ -10,7 +10,11 @@ if (!process.env.HAS_STARTED_WORKER) { resourceLimits: { maxYoungGenerationSizeMb: 0, maxOldGenerationSizeMb: 0 - } + }, + // With node snapshot the OOM can occur during the deserialization of + // the context, so disable it since we want the OOM to occur during + // the creation of the message port. + execArgv: [ ...process.execArgv, '--no-node-snapshot'] }; const worker = new Worker(__filename, opts); diff --git a/test/parallel/test-worker-process-exit-async-module.js b/test/parallel/test-worker-process-exit-async-module.js new file mode 100644 index 00000000000..38d4ad74c7b --- /dev/null +++ b/test/parallel/test-worker-process-exit-async-module.js @@ -0,0 +1,11 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const { Worker } = require('worker_threads'); + +// Regression for https://github.com/nodejs/node/issues/43182. +const w = new Worker(new URL('data:text/javascript,process.exit(1);await new Promise(()=>{ process.exit(2); })')); +w.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 1); +})); diff --git a/test/parallel/test-worker-resource-limits.js b/test/parallel/test-worker-resource-limits.js index ffda452f6c6..f79c31b2a18 100644 --- a/test/parallel/test-worker-resource-limits.js +++ b/test/parallel/test-worker-resource-limits.js @@ -35,10 +35,10 @@ if (!process.env.HAS_STARTED_WORKER) { assert.deepStrictEqual(resourceLimits, testResourceLimits); const array = []; while (true) { - // Leave 10% wiggle room here, and 20% on debug builds. - const wiggleRoom = common.buildType === 'Release' ? 1.1 : 1.2; const usedMB = v8.getHeapStatistics().used_heap_size / 1024 / 1024; - assert(usedMB < resourceLimits.maxOldGenerationSizeMb * wiggleRoom); + const maxReservedSize = resourceLimits.maxOldGenerationSizeMb + + resourceLimits.maxYoungGenerationSizeMb; + assert(usedMB < maxReservedSize); let seenSpaces = 0; for (const { space_name, space_size } of v8.getHeapSpaceStatistics()) { diff --git a/test/parallel/test-zlib-dictionary-fail.js b/test/parallel/test-zlib-dictionary-fail.js index 269b733e2c6..9546954841f 100644 --- a/test/parallel/test-zlib-dictionary-fail.js +++ b/test/parallel/test-zlib-dictionary-fail.js @@ -53,7 +53,7 @@ const input = Buffer.from([0x78, 0xBB, 0x04, 0x09, 0x01, 0xA5]); stream.on('error', common.mustCall(function(err) { // It's not possible to separate invalid dict and invalid data when using // the raw format - assert.match(err.message, /invalid/); + assert.match(err.message, /(invalid|Operation-Ending-Supplemental Code is 0x12)/); })); stream.write(input); diff --git a/test/parallel/test-zlib-flush-drain-longblock.js b/test/parallel/test-zlib-flush-drain-longblock.js index 94d1d9d04d9..e2f56ec7629 100644 --- a/test/parallel/test-zlib-flush-drain-longblock.js +++ b/test/parallel/test-zlib-flush-drain-longblock.js @@ -16,7 +16,7 @@ zipper.write('A'.repeat(17000)); zipper.flush(); let received = 0; -unzipper.on('data', common.mustCall((d) => { +unzipper.on('data', common.mustCallAtLeast((d) => { received += d.length; }, 2)); diff --git a/test/parallel/test-zlib-from-string.js b/test/parallel/test-zlib-from-string.js index fa96623536d..92b6f866466 100644 --- a/test/parallel/test-zlib-from-string.js +++ b/test/parallel/test-zlib-from-string.js @@ -55,7 +55,9 @@ const expectedBase64Gzip = 'H4sIAAAAAAAAA11RS05DMQy8yhzg6d2BPSAkJPZu4laWkjiN4' + 'sHnHNzRtagj5AQAA'; zlib.deflate(inputString, common.mustCall((err, buffer) => { - assert.strictEqual(buffer.toString('base64'), expectedBase64Deflate); + zlib.inflate(buffer, common.mustCall((err, inflated) => { + assert.strictEqual(inflated.toString(), inputString); + })); })); zlib.gzip(inputString, common.mustCall((err, buffer) => { diff --git a/test/parallel/test-zlib-invalid-input.js b/test/parallel/test-zlib-invalid-input.js index 67793984a99..7aa44dfe709 100644 --- a/test/parallel/test-zlib-invalid-input.js +++ b/test/parallel/test-zlib-invalid-input.js @@ -53,7 +53,7 @@ nonStringInputs.forEach(common.mustCall((input) => { unzips.forEach(common.mustCall((uz, i) => { uz.on('error', common.mustCall()); - uz.on('end', common.mustNotCall); + uz.on('end', common.mustNotCall()); // This will trigger error event uz.write('this is not valid compressed data.'); diff --git a/test/parallel/test-zlib-sync-no-event.js b/test/parallel/test-zlib-sync-no-event.js index 479aa1c411b..e7f25c8476e 100644 --- a/test/parallel/test-zlib-sync-no-event.js +++ b/test/parallel/test-zlib-sync-no-event.js @@ -7,12 +7,12 @@ const message = 'Come on, Fhqwhgads.'; const buffer = Buffer.from(message); const zipper = new zlib.Gzip(); -zipper.on('close', common.mustNotCall); +zipper.on('close', common.mustNotCall()); const zipped = zipper._processChunk(buffer, zlib.constants.Z_FINISH); const unzipper = new zlib.Gunzip(); -unzipper.on('close', common.mustNotCall); +unzipper.on('close', common.mustNotCall()); const unzipped = unzipper._processChunk(zipped, zlib.constants.Z_FINISH); assert.notStrictEqual(zipped.toString(), message); diff --git a/test/pseudo-tty/test-handle-wrap-isrefed-tty.out b/test/pgo/temp.strrrc similarity index 100% rename from test/pseudo-tty/test-handle-wrap-isrefed-tty.out rename to test/pgo/temp.strrrc diff --git a/test/pgo/test-require_cache_reader_writer.js b/test/pgo/test-require_cache_reader_writer.js new file mode 100644 index 00000000000..22a45241cc4 --- /dev/null +++ b/test/pgo/test-require_cache_reader_writer.js @@ -0,0 +1,76 @@ +'use strict'; +require('../common'); + +if (require('os').platform() !== 'linux') { + return; +} + +const assert = require('assert'); +const cp = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const { RequireCacheReader, RequireCacheWriter } = require('alinode/relational_require_cache'); +const vm = require('vm'); + +if (process.argv[2] === 'writer') { + const writer = new RequireCacheWriter([ '/tmp', '/etc' ]); + writer.addRelation('/tmp/a.js', 'b.js', '/etc/b.js'); + writer.addRelation('/etc/a.js', 'b.js', '/tmp/b.js'); + writer.addRelation('/a.js', 'b.js', '/b.js'); + writer.addCode('/etc/b.js', 'var a = 1;'); + writer.addCode('/tmp/b.js', 'var a = 1;', { shouldWrap: true, bytecode: true }); + writer.addCode('/b.js', 'var b = 1;', { shouldWrap: true, bytecode: false }); + writer.dump(path.join(__dirname, 'temp.strrrc')); + + assert.throws(() => { + new RequireCacheReader([ '/tmp/etc' ]); + }, /only one RequireCacheReader or RequireCacheWriter can be created in one process\./); + + return; +} else if (process.argv[2] === 'reader') { + const reader = new RequireCacheReader(path.join(__dirname, 'temp.strrrc'), [ '/hello', '/world' ]); + + assert.strictEqual(reader.queryRelation('/hello/a.js', 'b.js'), '/world/b.js'); + assert.strictEqual(reader.queryRelation('/world/a.js', 'b.js'), '/hello/b.js'); + assert.strictEqual(reader.queryRelation('/a.js', 'b.js'), '/b.js'); + assert.strictEqual(reader.queryRelation('/hello/a.js', 'a.js'), null); + + assert.deepStrictEqual(reader.getCode('/world/b.js'), { + sourcecode: 'var a = 1;', + bytecode: null, + }); + + assert.deepStrictEqual(reader.getCode('/b.js'), { + sourcecode: '(function (exports, require, module, __filename, __dirname) { var b = 1;\n});', + bytecode: null, + }); + + const temp = reader.getCode('/hello/b.js'); + assert.strictEqual(temp.sourcecode, '(function (exports, require, module, __filename, __dirname) { var a = 1;\n});'); + + const script = new vm.Script(temp.sourcecode, { + filename: '/hello/b.js', + lineOffset: 0, + displayErrors: true, + cachedData: temp.bytecode, + }); + assert(!script.cachedDataRejected); + + assert.strictEqual(reader.getCode('/a', 'b'), null); + + process.on('exit', () => { + fs.unlinkSync(path.join(__dirname, 'temp.strrrc')); + }); + + return; +} + +let ret = cp.spawnSync(process.execPath, [ __filename, 'writer' ]); +assert.strictEqual(ret.status, 0, formatStdout(ret.stdout, ret.stderr)); + +ret = cp.spawnSync(process.execPath, [ __filename, 'reader' ]); +assert.strictEqual(ret.status, 0, formatStdout(ret.stdout, ret.stderr)); + +function formatStdout(stdout, stderr) { + return '\n### stdout:\n' + stdout.toString() + '\n\n\n### stderr:\n' + stderr.toString() + '\n===\n\n'; +} diff --git a/test/pgo/testcfg.py b/test/pgo/testcfg.py new file mode 100644 index 00000000000..0cfea24bc8c --- /dev/null +++ b/test/pgo/testcfg.py @@ -0,0 +1,6 @@ +import sys, os +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) +import testpy + +def GetConfiguration(context, root): + return testpy.SimpleTestConfiguration(context, root, 'pgo') diff --git a/test/pseudo-tty/console_colors.out b/test/pseudo-tty/console_colors.out index 8766302ffd7..006eb9edfe6 100644 --- a/test/pseudo-tty/console_colors.out +++ b/test/pseudo-tty/console_colors.out @@ -1,38 +1,38 @@ -{ foo: *[32m'bar'*[39m } +{ foo: [32m'bar'[39m } string q -{ foo: *[32m'bar'*[39m } with object format param +{ foo: [32m'bar'[39m } with object format param Error: test at abc (../fixtures/node_modules/bar.js:4:4) foobar - at * (*console_colors.js:*:*) -*[90m at * (node:internal*:*:*)*[39m -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m + at Object. [90m(*[39m*console_colors.js:*:*[90m)[39m +[90m at * (node:internal*:*:*)[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m Error: Should not ever get here. - at * (*node_modules*[4m*node_modules*[24m*bar.js:*:*) -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m - at * (*console_colors.js:*:*) -*[90m at *[39m -*[90m at *[39m + at Object. [90m(*node_modules*[4m*node_modules*[24m*bar.js:*:*[90m)[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m + at Object. [90m(*console_colors.js:*:*[90m)[39m +[90m at *[39m +[90m at *[39m Error at evalmachine.:*:* -*[90m at Script.runInThisContext (node:vm:*:*)*[39m -*[90m at Object.runInThisContext (node:vm:*:*)*[39m - at * (*console_colors.js:*:*) -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m -*[90m at *[39m +[90m at Script.runInThisContext (node:vm:*:*)[39m +[90m at Object.runInThisContext (node:vm:*:*)[39m + at Object. [90m(*[39m*console_colors.js:*:*[90m)[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m +[90m at *[39m diff --git a/test/pseudo-tty/test-fatal-error.out b/test/pseudo-tty/test-fatal-error.out index b6eeca17f55..c6c93adfb6a 100644 --- a/test/pseudo-tty/test-fatal-error.out +++ b/test/pseudo-tty/test-fatal-error.out @@ -3,12 +3,12 @@ throw err; ^ TypeError: foobar - at Object. (*test-fatal-error.js:*) -*[90m at *(node:internal*loader:*:*)*[39m -*[90m at *(node:internal*loader:*:*)*[39m -*[90m at *(node:internal*loader:*:*)*[39m -*[90m at *(node:internal*loader:*:*)*[39m -*[90m at *[39m -*[90m at *[39m { - bla: *[33mtrue*[39m + at Object. [90m(*test-fatal-error.js:*:*[90m)[39m +[90m at *(node:internal*loader:*:*)[39m +[90m at *(node:internal*loader:*:*)[39m +[90m at *(node:internal*loader:*:*)[39m +[90m at *(node:internal*loader:*:*)[39m +[90m at *[39m +[90m at *[39m { + bla: [33mtrue[39m } diff --git a/test/pseudo-tty/test-handle-wrap-hasref-tty.js b/test/pseudo-tty/test-handle-wrap-hasref-tty.js new file mode 100644 index 00000000000..16eb7199cf9 --- /dev/null +++ b/test/pseudo-tty/test-handle-wrap-hasref-tty.js @@ -0,0 +1,23 @@ +// Flags: --expose-internals --no-warnings +'use strict'; + +// See also test/parallel/test-handle-wrap-hasref.js + +const common = require('../common'); +const strictEqual = require('assert').strictEqual; +const ReadStream = require('tty').ReadStream; +const tty = new ReadStream(0); +const { internalBinding } = require('internal/test/binding'); +const isTTY = internalBinding('tty_wrap').isTTY; +strictEqual(isTTY(0), true, 'tty_wrap: stdin is not a TTY'); +strictEqual(tty._handle.hasRef(), + true, 'tty_wrap: not initially refed'); +tty.unref(); +strictEqual(tty._handle.hasRef(), + false, 'tty_wrap: unref() ineffective'); +tty.ref(); +strictEqual(tty._handle.hasRef(), + true, 'tty_wrap: ref() ineffective'); +tty._handle.close(common.mustCall(() => + strictEqual(tty._handle.hasRef(), + false, 'tty_wrap: not unrefed on close'))); diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/Scope.js b/test/pseudo-tty/test-handle-wrap-hasref-tty.out similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/types/lib/converters/Scope.js rename to test/pseudo-tty/test-handle-wrap-hasref-tty.out diff --git a/test/pseudo-tty/test-handle-wrap-isrefed-tty.js b/test/pseudo-tty/test-handle-wrap-isrefed-tty.js deleted file mode 100644 index aa6ae341b4b..00000000000 --- a/test/pseudo-tty/test-handle-wrap-isrefed-tty.js +++ /dev/null @@ -1,23 +0,0 @@ -// Flags: --expose-internals --no-warnings -'use strict'; - -// See also test/parallel/test-handle-wrap-isrefed.js - -const common = require('../common'); -const strictEqual = require('assert').strictEqual; -const ReadStream = require('tty').ReadStream; -const tty = new ReadStream(0); -const { internalBinding } = require('internal/test/binding'); -const isTTY = internalBinding('tty_wrap').isTTY; -strictEqual(isTTY(0), true, 'tty_wrap: stdin is not a TTY'); -strictEqual(tty._handle.hasRef(), - true, 'tty_wrap: not initially refed'); -tty.unref(); -strictEqual(tty._handle.hasRef(), - false, 'tty_wrap: unref() ineffective'); -tty.ref(); -strictEqual(tty._handle.hasRef(), - true, 'tty_wrap: ref() ineffective'); -tty._handle.close(common.mustCall(() => - strictEqual(tty._handle.hasRef(), - false, 'tty_wrap: not unrefed on close'))); diff --git a/test/pummel/pummel.status b/test/pummel/pummel.status index 73ed079f66a..143450986e4 100644 --- a/test/pummel/pummel.status +++ b/test/pummel/pummel.status @@ -19,6 +19,8 @@ test-crypto-timing-safe-equal-benchmarks: PASS,FLAKY [$arch==arm || $arch==arm64] [$system==solaris] # Also applies to SmartOS +# https://github.com/nodejs/node/issues/43457 +test-heapsnapshot-near-heap-limit: PASS,FLAKY [$system==freebsd] diff --git a/test/pummel/test-crypto-dh-hash-modp18.js b/test/pummel/test-crypto-dh-hash-modp18.js index e2a7f43c450..ceb4cbd885c 100644 --- a/test/pummel/test-crypto-dh-hash-modp18.js +++ b/test/pummel/test-crypto-dh-hash-modp18.js @@ -26,8 +26,8 @@ if (!common.hasCrypto) { common.skip('node compiled without OpenSSL.'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } const assert = require('assert'); diff --git a/test/pummel/test-crypto-dh-hash.js b/test/pummel/test-crypto-dh-hash.js index a5932eb7647..a912504bebd 100644 --- a/test/pummel/test-crypto-dh-hash.js +++ b/test/pummel/test-crypto-dh-hash.js @@ -26,8 +26,8 @@ if (!common.hasCrypto) { common.skip('node compiled without OpenSSL.'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } const assert = require('assert'); @@ -45,10 +45,10 @@ const hashes = { for (const name in hashes) { const group = crypto.getDiffieHellman(name); - const private_key = group.getPrime('hex'); + const prime = group.getPrime('hex'); const hash1 = hashes[name]; const hash2 = crypto.createHash('sha1') - .update(private_key.toUpperCase()).digest('hex'); + .update(prime.toUpperCase()).digest('hex'); assert.strictEqual(hash1, hash2); assert.strictEqual(group.getGenerator('hex'), '02'); } diff --git a/test/pummel/test-crypto-dh-keys.js b/test/pummel/test-crypto-dh-keys.js index 99be0e517fd..2caa4e244a9 100644 --- a/test/pummel/test-crypto-dh-keys.js +++ b/test/pummel/test-crypto-dh-keys.js @@ -26,8 +26,8 @@ if (!common.hasCrypto) { common.skip('node compiled without OpenSSL.'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } const assert = require('assert'); diff --git a/test/pummel/test-dh-regr.js b/test/pummel/test-dh-regr.js index c55b7ff54d9..096b32f7150 100644 --- a/test/pummel/test-dh-regr.js +++ b/test/pummel/test-dh-regr.js @@ -26,8 +26,8 @@ if (!common.hasCrypto) { common.skip('missing crypto'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } const assert = require('assert'); diff --git a/test/pummel/test-fs-readfile-tostring-fail.js b/test/pummel/test-fs-readfile-tostring-fail.js index 1a1e7d62175..eb12ed3d8c5 100644 --- a/test/pummel/test-fs-readfile-tostring-fail.js +++ b/test/pummel/test-fs-readfile-tostring-fail.js @@ -25,13 +25,17 @@ stream.on('error', (err) => { throw err; }); const size = kStringMaxLength / 200; const a = Buffer.alloc(size, 'a'); +let expectedSize = 0; for (let i = 0; i < 201; i++) { - stream.write(a); + stream.write(a, (err) => { assert.ifError(err); }); + expectedSize += a.length; } stream.end(); stream.on('finish', common.mustCall(function() { + assert.strictEqual(stream.bytesWritten, expectedSize, + `${stream.bytesWritten} bytes written (expected ${expectedSize} bytes).`); fs.readFile(file, 'utf8', common.mustCall(function(err, buf) { assert.ok(err instanceof Error); if (err.message !== 'Array buffer allocation failed') { diff --git a/test/pummel/test-fs-watch-system-limit.js b/test/pummel/test-fs-watch-system-limit.js index 20995c514fa..3486f5372b8 100644 --- a/test/pummel/test-fs-watch-system-limit.js +++ b/test/pummel/test-fs-watch-system-limit.js @@ -9,8 +9,8 @@ if (!common.isLinux) { common.skip('The fs watch limit is OS-dependent'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } try { diff --git a/test/pummel/test-hash-seed.js b/test/pummel/test-hash-seed.js index 42b626b079e..274183d8ce9 100644 --- a/test/pummel/test-hash-seed.js +++ b/test/pummel/test-hash-seed.js @@ -3,8 +3,8 @@ // Check that spawn child doesn't create duplicated entries const common = require('../common'); -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } const kRepetitions = 2; diff --git a/test/pummel/test-heapdump-worker.js b/test/pummel/test-heapdump-worker.js index 0e8322affb5..d494de50922 100644 --- a/test/pummel/test-heapdump-worker.js +++ b/test/pummel/test-heapdump-worker.js @@ -6,14 +6,6 @@ const { Worker } = require('worker_threads'); validateSnapshotNodes('Node / Worker', []); const worker = new Worker('setInterval(() => {}, 100);', { eval: true }); -validateSnapshotNodes('Node / Worker', [ - { - children: [ - { node_name: 'Node / MessagePort', edge_name: 'parent_port' }, - { node_name: 'Worker', edge_name: 'wrapped' }, - ] - }, -]); validateSnapshotNodes('Node / MessagePort', [ { children: [ diff --git a/test/pummel/test-heapsnapshot-near-heap-limit-bounded.js b/test/pummel/test-heapsnapshot-near-heap-limit-bounded.js index faf5c4755aa..dd7497d975a 100644 --- a/test/pummel/test-heapsnapshot-near-heap-limit-bounded.js +++ b/test/pummel/test-heapsnapshot-near-heap-limit-bounded.js @@ -2,8 +2,8 @@ const common = require('../common'); -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } const tmpdir = require('../common/tmpdir'); diff --git a/test/pummel/test-heapsnapshot-near-heap-limit-by-api.js b/test/pummel/test-heapsnapshot-near-heap-limit-by-api.js new file mode 100644 index 00000000000..b8b87139126 --- /dev/null +++ b/test/pummel/test-heapsnapshot-near-heap-limit-by-api.js @@ -0,0 +1,144 @@ +// Copy from test-heapsnapshot-near-heap-limit.js +'use strict'; + +const common = require('../common'); + +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); +} + +const tmpdir = require('../common/tmpdir'); +const assert = require('assert'); +const { spawnSync } = require('child_process'); +const fixtures = require('../common/fixtures'); +const fs = require('fs'); +const v8 = require('v8'); + +const invalidValues = [-1, '', {}, NaN, undefined]; +for (let i = 0; i < invalidValues.length; i++) { + assert.throws(() => v8.setHeapSnapshotNearHeapLimit(invalidValues[i]), + /ERR_INVALID_ARG_TYPE|ERR_OUT_OF_RANGE/); +} + +// Set twice +v8.setHeapSnapshotNearHeapLimit(1); +v8.setHeapSnapshotNearHeapLimit(2); + +const env = { + ...process.env, + NODE_DEBUG_NATIVE: 'diagnostics', +}; + +{ + console.log('\nTesting set by cmd option and api'); + tmpdir.refresh(); + const child = spawnSync(process.execPath, [ + '--trace-gc', + '--heapsnapshot-near-heap-limit=1', + '--max-old-space-size=50', + fixtures.path('workload', 'grow-and-set-near-heap-limit.js'), + ], { + cwd: tmpdir.path, + env: { + ...env, + limit: 2, + }, + }); + console.log(child.stdout.toString()); + const stderr = child.stderr.toString(); + console.log(stderr); + assert(common.nodeProcessAborted(child.status, child.signal), + 'process should have aborted, but did not'); + const list = fs.readdirSync(tmpdir.path) + .filter((file) => file.endsWith('.heapsnapshot')); + const risky = [...stderr.matchAll( + /Not generating snapshots because it's too risky/g)].length; + assert(list.length + risky > 0 && list.length <= 1, + `Generated ${list.length} snapshots ` + + `and ${risky} was too risky`); +} + +{ + console.log('\nTesting limit = 1'); + tmpdir.refresh(); + const child = spawnSync(process.execPath, [ + '--trace-gc', + '--max-old-space-size=50', + fixtures.path('workload', 'grow-and-set-near-heap-limit.js'), + ], { + cwd: tmpdir.path, + env: { + ...env, + limit: 1, + }, + }); + console.log(child.stdout.toString()); + const stderr = child.stderr.toString(); + console.log(stderr); + assert(common.nodeProcessAborted(child.status, child.signal), + 'process should have aborted, but did not'); + const list = fs.readdirSync(tmpdir.path) + .filter((file) => file.endsWith('.heapsnapshot')); + const risky = [...stderr.matchAll( + /Not generating snapshots because it's too risky/g)].length; + assert(list.length + risky > 0 && list.length <= 1, + `Generated ${list.length} snapshots ` + + `and ${risky} was too risky`); +} + +{ + console.log('\nTesting set limit twice'); + tmpdir.refresh(); + const child = spawnSync(process.execPath, [ + '--trace-gc', + '--max-old-space-size=50', + fixtures.path('workload', 'grow-and-set-near-heap-limit.js'), + ], { + cwd: tmpdir.path, + env: { + ...env, + limit: 1, + limit2: 2 + }, + }); + console.log(child.stdout.toString()); + const stderr = child.stderr.toString(); + console.log(stderr); + assert(common.nodeProcessAborted(child.status, child.signal), + 'process should have aborted, but did not'); + const list = fs.readdirSync(tmpdir.path) + .filter((file) => file.endsWith('.heapsnapshot')); + const risky = [...stderr.matchAll( + /Not generating snapshots because it's too risky/g)].length; + assert(list.length + risky > 0 && list.length <= 1, + `Generated ${list.length} snapshots ` + + `and ${risky} was too risky`); +} + +{ + console.log('\nTesting limit = 3'); + tmpdir.refresh(); + const child = spawnSync(process.execPath, [ + '--trace-gc', + '--max-old-space-size=50', + fixtures.path('workload', 'grow-and-set-near-heap-limit.js'), + ], { + cwd: tmpdir.path, + env: { + ...env, + limit: 3, + }, + }); + console.log(child.stdout.toString()); + const stderr = child.stderr.toString(); + console.log(stderr); + assert(common.nodeProcessAborted(child.status, child.signal), + 'process should have aborted, but did not'); + const list = fs.readdirSync(tmpdir.path) + .filter((file) => file.endsWith('.heapsnapshot')); + const risky = [...stderr.matchAll( + /Not generating snapshots because it's too risky/g)].length; + assert(list.length + risky > 0 && list.length <= 3, + `Generated ${list.length} snapshots ` + + `and ${risky} was too risky`); +} diff --git a/test/pummel/test-heapsnapshot-near-heap-limit.js b/test/pummel/test-heapsnapshot-near-heap-limit.js index 420ba042059..7677fe64ad8 100644 --- a/test/pummel/test-heapsnapshot-near-heap-limit.js +++ b/test/pummel/test-heapsnapshot-near-heap-limit.js @@ -2,8 +2,8 @@ const common = require('../common'); -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } const tmpdir = require('../common/tmpdir'); @@ -71,7 +71,7 @@ const env = { .filter((file) => file.endsWith('.heapsnapshot')); const risky = [...stderr.matchAll( /Not generating snapshots because it's too risky/g)].length; - assert(list.length + risky > 0 && list.length <= 3, + assert(list.length + risky > 0 && list.length <= 1, `Generated ${list.length} snapshots ` + `and ${risky} was too risky`); } diff --git a/test/pummel/test-http-upload-timeout.js b/test/pummel/test-http-upload-timeout.js index c3ec3ad19d5..6c071f8d7f5 100644 --- a/test/pummel/test-http-upload-timeout.js +++ b/test/pummel/test-http-upload-timeout.js @@ -23,19 +23,20 @@ // This tests setTimeout() by having multiple clients connecting and sending // data in random intervals. Clients are also randomly disconnecting until there // are no more clients left. If no false timeout occurs, this test has passed. -require('../common'); +const common = require('../common'); const http = require('http'); const server = http.createServer(); let connections = 0; +const ontimeout = common.mustNotCall('Unexpected timeout'); + server.on('request', function(req, res) { req.socket.setTimeout(1000); - req.socket.on('timeout', function() { - throw new Error('Unexpected timeout'); - }); + req.socket.on('timeout', ontimeout); req.on('end', function() { connections--; res.writeHead(200); + req.socket.off('timeout', ontimeout); res.end('done\n'); if (connections === 0) { server.close(); @@ -47,7 +48,7 @@ server.on('request', function(req, res) { server.listen(0, '127.0.0.1', function() { for (let i = 0; i < 10; i++) { connections++; - + let count = 0; setTimeout(function() { const request = http.request({ port: server.address().port, @@ -56,13 +57,12 @@ server.listen(0, '127.0.0.1', function() { }); function ping() { - const nextPing = (Math.random() * 900).toFixed(); - if (nextPing > 600) { + if (++count === 10) { request.end(); return; } request.write('ping'); - setTimeout(ping, nextPing); + setTimeout(ping, 300); } ping(); }, i * 50); diff --git a/test/pummel/test-net-bytes-per-incoming-chunk-overhead.js b/test/pummel/test-net-bytes-per-incoming-chunk-overhead.js index f556e9881f7..b3613110ab5 100644 --- a/test/pummel/test-net-bytes-per-incoming-chunk-overhead.js +++ b/test/pummel/test-net-bytes-per-incoming-chunk-overhead.js @@ -7,8 +7,8 @@ if (process.config.variables.asan) { common.skip('ASAN messes with memory measurements'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } const assert = require('assert'); diff --git a/test/pummel/test-next-tick-infinite-calls.js b/test/pummel/test-next-tick-infinite-calls.js index bf837f5ebc9..d1131066977 100644 --- a/test/pummel/test-next-tick-infinite-calls.js +++ b/test/pummel/test-next-tick-infinite-calls.js @@ -22,8 +22,8 @@ 'use strict'; const common = require('../common'); -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } let complete = 0; diff --git a/test/pummel/test-policy-integrity-dep.js b/test/pummel/test-policy-integrity-dep.js index ec58462335c..02f24d02a23 100644 --- a/test/pummel/test-policy-integrity-dep.js +++ b/test/pummel/test-policy-integrity-dep.js @@ -6,8 +6,8 @@ if (!common.hasCrypto) { common.skip('missing crypto'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } common.requireNoPackageJSONAbove(); diff --git a/test/pummel/test-policy-integrity-parent-commonjs.js b/test/pummel/test-policy-integrity-parent-commonjs.js index 39febab73ee..425abe38ebd 100644 --- a/test/pummel/test-policy-integrity-parent-commonjs.js +++ b/test/pummel/test-policy-integrity-parent-commonjs.js @@ -6,8 +6,8 @@ if (!common.hasCrypto) { common.skip('missing crypto'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } common.requireNoPackageJSONAbove(); diff --git a/test/pummel/test-policy-integrity-parent-module.js b/test/pummel/test-policy-integrity-parent-module.js index e60a606ea32..dda800dc365 100644 --- a/test/pummel/test-policy-integrity-parent-module.js +++ b/test/pummel/test-policy-integrity-parent-module.js @@ -6,8 +6,8 @@ if (!common.hasCrypto) { common.skip('missing crypto'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } common.requireNoPackageJSONAbove(); diff --git a/test/pummel/test-policy-integrity-parent-no-package-json.js b/test/pummel/test-policy-integrity-parent-no-package-json.js index f2208744447..a722263e1e4 100644 --- a/test/pummel/test-policy-integrity-parent-no-package-json.js +++ b/test/pummel/test-policy-integrity-parent-no-package-json.js @@ -6,8 +6,8 @@ if (!common.hasCrypto) { common.skip('missing crypto'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } common.requireNoPackageJSONAbove(); diff --git a/test/pummel/test-policy-integrity-worker-commonjs.js b/test/pummel/test-policy-integrity-worker-commonjs.js index 22a7d762466..b5d49222a2f 100644 --- a/test/pummel/test-policy-integrity-worker-commonjs.js +++ b/test/pummel/test-policy-integrity-worker-commonjs.js @@ -6,8 +6,8 @@ if (!common.hasCrypto) { common.skip('missing crypto'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } common.requireNoPackageJSONAbove(); diff --git a/test/pummel/test-policy-integrity-worker-module.js b/test/pummel/test-policy-integrity-worker-module.js index e5d4e4cd45d..a8a4fb2c295 100644 --- a/test/pummel/test-policy-integrity-worker-module.js +++ b/test/pummel/test-policy-integrity-worker-module.js @@ -6,8 +6,8 @@ if (!common.hasCrypto) { common.skip('missing crypto'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } common.requireNoPackageJSONAbove(); diff --git a/test/pummel/test-policy-integrity-worker-no-package-json.js b/test/pummel/test-policy-integrity-worker-no-package-json.js index 808687f40ea..e5b3e3ccfab 100644 --- a/test/pummel/test-policy-integrity-worker-no-package-json.js +++ b/test/pummel/test-policy-integrity-worker-no-package-json.js @@ -6,8 +6,8 @@ if (!common.hasCrypto) { common.skip('missing crypto'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } common.requireNoPackageJSONAbove(); diff --git a/test/pummel/test-webcrypto-derivebits-pbkdf2.js b/test/pummel/test-webcrypto-derivebits-pbkdf2.js index 512662025c6..6e3e7f532ba 100644 --- a/test/pummel/test-webcrypto-derivebits-pbkdf2.js +++ b/test/pummel/test-webcrypto-derivebits-pbkdf2.js @@ -6,8 +6,8 @@ if (!common.hasCrypto) { common.skip('missing crypto'); } -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } const assert = require('assert'); @@ -37,8 +37,7 @@ const kPasswords = { long: '55736572732073686f756c64207069636b206c6f6' + 'e6720706173737068726173657320286e6f742075' + '73652073686f72742070617373776f7264732921', - // TODO(@jasnell): Zero-length password not currently supported - // empty: '' + empty: '' }; const kSalts = { @@ -256,110 +255,110 @@ const kDerivations = { } } }, - // empty: { - // short: { - // 'SHA-384': { - // '1': 'e9f0da1e97dfa455f858ce6b9af1ecc0299' + - // 'f125ff1a847eb5d4955866f43e604', - // '1000': '7ff7954aeddf41795fc8300666786d49' + - // '74269aa91cc7e93811c953331d56d609', - // '100000': '1c73132b6a55e9d9de2cdbfe1f55bf' + - // '0ab59fd91f78f109c50096038b8557b147' - // }, - // 'SHA-512': { - // '1': 'e7e2b41f4887421bcb764eb4a56f63d2502' + - // 'e33c764fbdf60626ad42ed9672342', - // '1000': 'd561c4c84e9c60ba4752a2d383bf55ef' + - // 'f643fc9e452252d6821e39449350cf72', - // '100000': 'efd00752bc9ffafb5a399dd1d5834e' + - // '8d2c2b676ecd4b2063fb1fe581d0f1380b' - // }, - // 'SHA-1': { - // '1': 'a667da47b8f857b7c65f70a6c8e7a06ce0d' + - // '25211a2b6ebaf58dcaaf268b46b1d', - // '1000': '72c92bbd3ddab4789e88e42ad1cda83c' + - // 'c0729e6cb5106a577e50d5cf61782481', - // '100000': '06e19e1b83e6480b1554df2b31a2c9' + - // '2d1bfcf9bc1bdbc8751ff8685bdeef7dc9' - // }, - // 'SHA-256': { - // '1': '2ddb49243eb3b5912cb260cdd87fb04ef0d' + - // '111bfa44d40a45e02a8a5c3c1518d', - // '1000': '2835f3ed53565420c90951509b0c1173' + - // 'b645174f1546ab3ac3e6c85cb471b53b', - // '100000': '80aed905ca32ae0bb2a9d8f532f048' + - // 'a0e672463eef9f83dfa7d88bca726553ea' - // } - // }, - // long: { - // 'SHA-384': { - // '1': '7b0bcca81dd637a3b3398666619716c5f2b1' + - // 'f4a5c24e85c18a9955559e4d7692', - // '1000': '8bb89cf71972fe5acc16fdc5f8cffd2c2' + - // 'e7178c086b3bbe61cc1314619135958', - // '100000': '26c6a8ae4bd1fbe715ae478efff3eca' + - // 'e83afa617ed35bd4a3f63c3da76a42d22' - // }, - // 'SHA-512': { - // '1': 'bb73f8168a8f391d3d54ca892fb72b8e603' + - // '5e37f891e5a70491b94dc05510bc4', - // '1000': '5cacc16cdfbe052cfd73a9891b8c0e78' + - // 'b19b2e07eae2423d48fed5e08aa8494b', - // '100000': '87fdfc293392cbf33ecc9b5141a2fe' + - // 'fa74d150499756863c484c0a78b6274d7f' - // }, - // 'SHA-1': { - // '1': '1f46b40cf2fb3dc41a3d9ced8897b861050' + - // '36810e2bfac7040814bd65d428d67', - // '1000': 'cc5748ecc41288a0e13368543aaa2ef6' + - // '2c97ba7518fa88f6e11c35763fc930b4', - // '100000': '33e2993bf4729dc993fff66e69cc55' + - // '777135ebfabce533575bce4a96645a742c' - // }, - // 'SHA-256': { - // '1': '61c935c462c3321c89663545d13a4f6b52b' + - // '5191cfb7479e58dcfe6444d43106c', - // '1000': '1353f7458237ab332ee052e29f829a2a' + - // 'b90e72630ea10493b4eecffb9ff89e1d', - // '100000': '79baf80ec582920538801e9d929ce0' + - // '7084277987488d733a026852c452f06fb4' - // } - // }, - // empty: { - // 'SHA-384': { - // '1': '4bb042a5c28cee6f66f991c717fd7702677' + - // '87e2bb3031eae270d87d63ad99534', - // '1000': '9cbfe72d194da34e17c821dd1569ef50' + - // 'a86eb4d893591776adc6a5c21e0031cf', - // '100000': 'ed6bd7282567abe48d542d067d09f4' + - // '04bd044ae2cefe11dacc531c4764cd35cd' - // }, - // 'SHA-512': { - // '1': '6d2ecbbbfb2e6dcd7056faf9af6aa06eae5' + - // '94391db983279a6bf27e0eb228614', - // '1000': 'cb93096c3a02beeb1c5fac36765c9011' + - // 'fe99f8d8ea62366048fc98cb98dfea8f', - // '100000': '89e16254ebad5cba72e0aebe1614c7' + - // 'f9b795a7505f2637206ce10a3449a2b8bb' - // }, - // 'SHA-1': { - // '1': '1e437a1c79d75be61e91141dae20affc489' + - // '2cc99abcc3fe753887bccc8920176', - // '1000': '6e40910ac02ec89cebb9d898b13a09d1' + - // 'cd7adf6f8cc08cc473302c8973aa2e19', - // '100000': 'a9e1bebb36bc26d7c997d5483cbc8d' + - // 'e4a419d1e706571342632586ec330a7290' - // }, - // 'SHA-256': { - // '1': 'f7ce0b653d2d72a4108cf5abe912ffdd777' + - // '616dbbb27a70e8204f3ae2d0f6fad', - // '1000': '4fc58a21c100ce1835b8f9991d738b56' + - // '965d14b24e1761fbdffc69ac5e0b667a', - // '100000': '64a868d4b23af696d3734d0b814d04' + - // 'cdd1ac280128e97653a05f32b49c13a29a' - // } - // } - // } + empty: { + short: { + 'SHA-384': { + '1': 'e9f0da1e97dfa455f858ce6b9af1ecc0299' + + 'f125ff1a847eb5d4955866f43e604', + '1000': '7ff7954aeddf41795fc8300666786d49' + + '74269aa91cc7e93811c953331d56d609', + '100000': '1c73132b6a55e9d9de2cdbfe1f55bf' + + '0ab59fd91f78f109c50096038b8557b147' + }, + 'SHA-512': { + '1': 'e7e2b41f4887421bcb764eb4a56f63d2502' + + 'e33c764fbdf60626ad42ed9672342', + '1000': 'd561c4c84e9c60ba4752a2d383bf55ef' + + 'f643fc9e452252d6821e39449350cf72', + '100000': 'efd00752bc9ffafb5a399dd1d5834e' + + '8d2c2b676ecd4b2063fb1fe581d0f1380b' + }, + 'SHA-1': { + '1': 'a667da47b8f857b7c65f70a6c8e7a06ce0d' + + '25211a2b6ebaf58dcaaf268b46b1d', + '1000': '72c92bbd3ddab4789e88e42ad1cda83c' + + 'c0729e6cb5106a577e50d5cf61782481', + '100000': '06e19e1b83e6480b1554df2b31a2c9' + + '2d1bfcf9bc1bdbc8751ff8685bdeef7dc9' + }, + 'SHA-256': { + '1': '2ddb49243eb3b5912cb260cdd87fb04ef0d' + + '111bfa44d40a45e02a8a5c3c1518d', + '1000': '2835f3ed53565420c90951509b0c1173' + + 'b645174f1546ab3ac3e6c85cb471b53b', + '100000': '80aed905ca32ae0bb2a9d8f532f048' + + 'a0e672463eef9f83dfa7d88bca726553ea' + } + }, + long: { + 'SHA-384': { + '1': '7b0bcca81dd637a3b3398666619716c5f2b1' + + 'f4a5c24e85c18a9955559e4d7692', + '1000': '8bb89cf71972fe5acc16fdc5f8cffd2c2' + + 'e7178c086b3bbe61cc1314619135958', + '100000': '26c6a8ae4bd1fbe715ae478efff3eca' + + 'e83afa617ed35bd4a3f63c3da76a42d22' + }, + 'SHA-512': { + '1': 'bb73f8168a8f391d3d54ca892fb72b8e603' + + '5e37f891e5a70491b94dc05510bc4', + '1000': '5cacc16cdfbe052cfd73a9891b8c0e78' + + 'b19b2e07eae2423d48fed5e08aa8494b', + '100000': '87fdfc293392cbf33ecc9b5141a2fe' + + 'fa74d150499756863c484c0a78b6274d7f' + }, + 'SHA-1': { + '1': '1f46b40cf2fb3dc41a3d9ced8897b861050' + + '36810e2bfac7040814bd65d428d67', + '1000': 'cc5748ecc41288a0e13368543aaa2ef6' + + '2c97ba7518fa88f6e11c35763fc930b4', + '100000': '33e2993bf4729dc993fff66e69cc55' + + '777135ebfabce533575bce4a96645a742c' + }, + 'SHA-256': { + '1': '61c935c462c3321c89663545d13a4f6b52b' + + '5191cfb7479e58dcfe6444d43106c', + '1000': '1353f7458237ab332ee052e29f829a2a' + + 'b90e72630ea10493b4eecffb9ff89e1d', + '100000': '79baf80ec582920538801e9d929ce0' + + '7084277987488d733a026852c452f06fb4' + } + }, + empty: { + 'SHA-384': { + '1': '4bb042a5c28cee6f66f991c717fd7702677' + + '87e2bb3031eae270d87d63ad99534', + '1000': '9cbfe72d194da34e17c821dd1569ef50' + + 'a86eb4d893591776adc6a5c21e0031cf', + '100000': 'ed6bd7282567abe48d542d067d09f4' + + '04bd044ae2cefe11dacc531c4764cd35cd' + }, + 'SHA-512': { + '1': '6d2ecbbbfb2e6dcd7056faf9af6aa06eae5' + + '94391db983279a6bf27e0eb228614', + '1000': 'cb93096c3a02beeb1c5fac36765c9011' + + 'fe99f8d8ea62366048fc98cb98dfea8f', + '100000': '89e16254ebad5cba72e0aebe1614c7' + + 'f9b795a7505f2637206ce10a3449a2b8bb' + }, + 'SHA-1': { + '1': '1e437a1c79d75be61e91141dae20affc489' + + '2cc99abcc3fe753887bccc8920176', + '1000': '6e40910ac02ec89cebb9d898b13a09d1' + + 'cd7adf6f8cc08cc473302c8973aa2e19', + '100000': 'a9e1bebb36bc26d7c997d5483cbc8d' + + 'e4a419d1e706571342632586ec330a7290' + }, + 'SHA-256': { + '1': 'f7ce0b653d2d72a4108cf5abe912ffdd777' + + '616dbbb27a70e8204f3ae2d0f6fad', + '1000': '4fc58a21c100ce1835b8f9991d738b56' + + '965d14b24e1761fbdffc69ac5e0b667a', + '100000': '64a868d4b23af696d3734d0b814d04' + + 'cdd1ac280128e97653a05f32b49c13a29a' + } + } + } }; async function setupBaseKeys() { @@ -448,15 +447,18 @@ async function testDeriveBitsBadLengths( return Promise.all([ assert.rejects( subtle.deriveBits(algorithm, baseKeys[size], 0), { - message: /length cannot be zero/ + message: /length cannot be zero/, + name: 'OperationError', }), assert.rejects( subtle.deriveBits(algorithm, baseKeys[size], null), { - code: 'ERR_INVALID_ARG_TYPE' + message: 'length cannot be null', + name: 'OperationError', }), assert.rejects( subtle.deriveBits(algorithm, baseKeys[size], 15), { - message: /length must be a multiple of 8/ + message: /length must be a multiple of 8/, + name: 'OperationError', }), ]); } diff --git a/test/report/report.status b/test/report/report.status new file mode 100644 index 00000000000..7ef99b5c8ed --- /dev/null +++ b/test/report/report.status @@ -0,0 +1,11 @@ +prefix report + +# To mark a test as flaky, list the test name in the appropriate section +# below, without ".js", followed by ": PASS,FLAKY". Example: +# sample-test : PASS,FLAKY + +[true] # This section applies to all platforms + +[$system==solaris] # Also applies to SmartOS +# https://github.com/nodejs/node/issues/43457 +test-report-fatal-error: PASS, FLAKY diff --git a/test/report/test-report-fatal-error.js b/test/report/test-report-fatal-error.js deleted file mode 100644 index c913240c4bc..00000000000 --- a/test/report/test-report-fatal-error.js +++ /dev/null @@ -1,121 +0,0 @@ -'use strict'; - -// Testcases for situations involving fatal errors, like Javascript heap OOM - -require('../common'); -const assert = require('assert'); -const fs = require('fs'); -const helper = require('../common/report.js'); -const spawnSync = require('child_process').spawnSync; -const tmpdir = require('../common/tmpdir'); - -if (process.argv[2] === 'child') { - - const list = []; - while (true) { - const record = new MyRecord(); - list.push(record); - } - - function MyRecord() { - this.name = 'foo'; - this.id = 128; - this.account = 98454324; - } -} - -// Common args that will cause an out-of-memory error for child process. -const ARGS = [ - '--max-old-space-size=20', - __filename, - 'child', -]; - -{ - // Verify that --report-on-fatalerror is respected when set. - tmpdir.refresh(); - const args = ['--report-on-fatalerror', ...ARGS]; - const child = spawnSync(process.execPath, args, { cwd: tmpdir.path }); - assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); - - const reports = helper.findReports(child.pid, tmpdir.path); - assert.strictEqual(reports.length, 1); - - const report = reports[0]; - helper.validate(report); - - // Errors occur in a context where env is not available, so thread ID is - // unknown. Assert this, to verify that the underlying env-less situation is - // actually reached. - assert.strictEqual(require(report).header.threadId, null); -} - -{ - // Verify that --report-on-fatalerror is respected when not set. - const args = ARGS; - const child = spawnSync(process.execPath, args, { cwd: tmpdir.path }); - assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); - const reports = helper.findReports(child.pid, tmpdir.path); - assert.strictEqual(reports.length, 0); -} - -{ - // Verify that --report-directory is respected when set. - // Verify that --report-compact is respected when not set. - tmpdir.refresh(); - const dir = '--report-directory=' + tmpdir.path; - const args = ['--report-on-fatalerror', dir, ...ARGS]; - const child = spawnSync(process.execPath, args, { }); - assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); - - const reports = helper.findReports(child.pid, tmpdir.path); - assert.strictEqual(reports.length, 1); - - const report = reports[0]; - helper.validate(report); - assert.strictEqual(require(report).header.threadId, null); - const lines = fs.readFileSync(report, 'utf8').split('\n').length - 1; - assert(lines > 10); -} - -{ - // Verify that --report-compact is respected when set. - tmpdir.refresh(); - const args = ['--report-on-fatalerror', '--report-compact', ...ARGS]; - const child = spawnSync(process.execPath, args, { cwd: tmpdir.path }); - assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); - - const reports = helper.findReports(child.pid, tmpdir.path); - assert.strictEqual(reports.length, 1); - - const report = reports[0]; - helper.validate(report); - assert.strictEqual(require(report).header.threadId, null); - // Subtract 1 because "xx\n".split("\n") => [ 'xx', '' ]. - const lines = fs.readFileSync(report, 'utf8').split('\n').length - 1; - assert.strictEqual(lines, 1); -} - -{ - // Verify that --report-compact is respected when set. - // Verify that --report-filename is respected when set. - tmpdir.refresh(); - const args = [ - '--report-on-fatalerror', - '--report-compact', - '--report-filename=stderr', - ...ARGS, - ]; - const child = spawnSync(process.execPath, args, { encoding: 'utf8' }); - assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); - - const reports = helper.findReports(child.pid, tmpdir.path); - assert.strictEqual(reports.length, 0); - - const lines = child.stderr.split('\n'); - // Skip over unavoidable free-form output and gc log from V8. - const report = lines.find((i) => i.startsWith('{')); - const json = JSON.parse(report); - - assert.strictEqual(json.header.threadId, null); -} diff --git a/test/report/test-report-fatalerror-oomerror-compact.js b/test/report/test-report-fatalerror-oomerror-compact.js new file mode 100644 index 00000000000..66bc1fa88e6 --- /dev/null +++ b/test/report/test-report-fatalerror-oomerror-compact.js @@ -0,0 +1,39 @@ +'use strict'; + +// Testcases for situations involving fatal errors, like Javascript heap OOM + +require('../common'); +const assert = require('assert'); +const fs = require('fs'); +const helper = require('../common/report.js'); +const spawnSync = require('child_process').spawnSync; +const tmpdir = require('../common/tmpdir'); +const fixtures = require('../common/fixtures'); + +// Common args that will cause an out-of-memory error for child process. +const ARGS = [ + '--max-heap-size=20', + fixtures.path('report-oom'), +]; +const REPORT_FIELDS = [ + ['header.trigger', 'OOMError'], + ['javascriptHeap.memoryLimit', 20 * 1024 * 1024 /* 20MB */], +]; + +{ + // Verify that --report-compact is respected when set. + tmpdir.refresh(); + const args = ['--report-on-fatalerror', '--report-compact', ...ARGS]; + const child = spawnSync(process.execPath, args, { cwd: tmpdir.path }); + assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); + + const reports = helper.findReports(child.pid, tmpdir.path); + assert.strictEqual(reports.length, 1); + + const report = reports[0]; + helper.validate(report, REPORT_FIELDS); + + // Subtract 1 because "xx\n".split("\n") => [ 'xx', '' ]. + const lines = fs.readFileSync(report, 'utf8').split('\n').length - 1; + assert.strictEqual(lines, 1); +} diff --git a/test/report/test-report-fatalerror-oomerror-directory.js b/test/report/test-report-fatalerror-oomerror-directory.js new file mode 100644 index 00000000000..39ba7a1ca4b --- /dev/null +++ b/test/report/test-report-fatalerror-oomerror-directory.js @@ -0,0 +1,40 @@ +'use strict'; + +// Testcases for situations involving fatal errors, like Javascript heap OOM + +require('../common'); +const assert = require('assert'); +const fs = require('fs'); +const helper = require('../common/report.js'); +const spawnSync = require('child_process').spawnSync; +const tmpdir = require('../common/tmpdir'); +const fixtures = require('../common/fixtures'); + +// Common args that will cause an out-of-memory error for child process. +const ARGS = [ + '--max-heap-size=20', + fixtures.path('report-oom'), +]; +const REPORT_FIELDS = [ + ['header.trigger', 'OOMError'], + ['javascriptHeap.memoryLimit', 20 * 1024 * 1024 /* 20MB */], +]; + +{ + // Verify that --report-directory is respected when set. + // Verify that --report-compact is respected when not set. + tmpdir.refresh(); + const dir = '--report-directory=' + tmpdir.path; + const args = ['--report-on-fatalerror', dir, ...ARGS]; + const child = spawnSync(process.execPath, args, { }); + assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); + + const reports = helper.findReports(child.pid, tmpdir.path); + assert.strictEqual(reports.length, 1); + + const report = reports[0]; + helper.validate(report, REPORT_FIELDS); + + const lines = fs.readFileSync(report, 'utf8').split('\n').length - 1; + assert(lines > 10); +} diff --git a/test/report/test-report-fatalerror-oomerror-filename.js b/test/report/test-report-fatalerror-oomerror-filename.js new file mode 100644 index 00000000000..9c3bb7e4d1a --- /dev/null +++ b/test/report/test-report-fatalerror-oomerror-filename.js @@ -0,0 +1,42 @@ +'use strict'; + +// Testcases for situations involving fatal errors, like Javascript heap OOM + +require('../common'); +const assert = require('assert'); +const helper = require('../common/report.js'); +const spawnSync = require('child_process').spawnSync; +const tmpdir = require('../common/tmpdir'); +const fixtures = require('../common/fixtures'); + +// Common args that will cause an out-of-memory error for child process. +const ARGS = [ + '--max-heap-size=20', + fixtures.path('report-oom'), +]; +const REPORT_FIELDS = [ + ['header.trigger', 'OOMError'], + ['javascriptHeap.memoryLimit', 20 * 1024 * 1024 /* 20MB */], +]; + +{ + // Verify that --report-compact is respected when set. + // Verify that --report-filename is respected when set. + tmpdir.refresh(); + const args = [ + '--report-on-fatalerror', + '--report-compact', + '--report-filename=stderr', + ...ARGS, + ]; + const child = spawnSync(process.execPath, args, { encoding: 'utf8' }); + assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); + + const reports = helper.findReports(child.pid, tmpdir.path); + assert.strictEqual(reports.length, 0); + + const lines = child.stderr.split('\n'); + // Skip over unavoidable free-form output and gc log from V8. + const report = lines.find((i) => i.startsWith('{')); + helper.validateContent(report, REPORT_FIELDS); +} diff --git a/test/report/test-report-fatalerror-oomerror-not-set.js b/test/report/test-report-fatalerror-oomerror-not-set.js new file mode 100644 index 00000000000..a54003ac719 --- /dev/null +++ b/test/report/test-report-fatalerror-oomerror-not-set.js @@ -0,0 +1,26 @@ +'use strict'; + +// Testcases for situations involving fatal errors, like Javascript heap OOM + +require('../common'); +const assert = require('assert'); +const helper = require('../common/report.js'); +const spawnSync = require('child_process').spawnSync; +const tmpdir = require('../common/tmpdir'); +const fixtures = require('../common/fixtures'); + +// Common args that will cause an out-of-memory error for child process. +const ARGS = [ + '--max-heap-size=20', + fixtures.path('report-oom'), +]; + +{ + tmpdir.refresh(); + // Verify that --report-on-fatalerror is respected when not set. + const args = ARGS; + const child = spawnSync(process.execPath, args, { cwd: tmpdir.path }); + assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); + const reports = helper.findReports(child.pid, tmpdir.path); + assert.strictEqual(reports.length, 0); +} diff --git a/test/report/test-report-fatalerror-oomerror-set.js b/test/report/test-report-fatalerror-oomerror-set.js new file mode 100644 index 00000000000..1a05f83d4e3 --- /dev/null +++ b/test/report/test-report-fatalerror-oomerror-set.js @@ -0,0 +1,34 @@ +'use strict'; + +// Testcases for situations involving fatal errors, like Javascript heap OOM + +require('../common'); +const assert = require('assert'); +const helper = require('../common/report.js'); +const spawnSync = require('child_process').spawnSync; +const tmpdir = require('../common/tmpdir'); +const fixtures = require('../common/fixtures'); + +// Common args that will cause an out-of-memory error for child process. +const ARGS = [ + '--max-heap-size=20', + fixtures.path('report-oom'), +]; +const REPORT_FIELDS = [ + ['header.trigger', 'OOMError'], + ['javascriptHeap.memoryLimit', 20 * 1024 * 1024 /* 20MB */], +]; + +{ + // Verify that --report-on-fatalerror is respected when set. + tmpdir.refresh(); + const args = ['--report-on-fatalerror', ...ARGS]; + const child = spawnSync(process.execPath, args, { cwd: tmpdir.path }); + assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); + + const reports = helper.findReports(child.pid, tmpdir.path); + assert.strictEqual(reports.length, 1); + + const report = reports[0]; + helper.validate(report, REPORT_FIELDS); +} diff --git a/test/report/test-report-uncaught-exception-compat.js b/test/report/test-report-uncaught-exception-compat.js index 9fe690595e8..91989f6ecda 100644 --- a/test/report/test-report-uncaught-exception-compat.js +++ b/test/report/test-report-uncaught-exception-compat.js @@ -1,5 +1,32 @@ -// Flags: --experimental-report --report-uncaught-exception --report-compact 'use strict'; -// Test producing a compact report on uncaught exception. -require('../common'); -require('./test-report-uncaught-exception.js'); +// Test producing a report on uncaught exception. +const common = require('../common'); +const assert = require('assert'); +const childProcess = require('child_process'); +const helper = require('../common/report'); +const tmpdir = require('../common/tmpdir'); + +if (process.argv[2] === 'child') { + throw new Error('test error'); +} + +tmpdir.refresh(); +const child = childProcess.spawn(process.execPath, [ + '--report-uncaught-exception', + '--report-compact', + __filename, + 'child', +], { + cwd: tmpdir.path +}); +child.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 1); + const reports = helper.findReports(child.pid, tmpdir.path); + assert.strictEqual(reports.length, 1); + + helper.validate(reports[0], [ + ['header.event', 'Exception'], + ['header.trigger', 'Exception'], + ['javascriptStack.message', 'Error: test error'], + ]); +})); diff --git a/test/report/test-report-uncaught-exception-handled.js b/test/report/test-report-uncaught-exception-handled.js new file mode 100644 index 00000000000..fffe5ef333f --- /dev/null +++ b/test/report/test-report-uncaught-exception-handled.js @@ -0,0 +1,23 @@ +// Flags: --report-uncaught-exception +'use strict'; +// Test report is suppressed on uncaught exception hook. +const common = require('../common'); +const assert = require('assert'); +const helper = require('../common/report'); +const tmpdir = require('../common/tmpdir'); +const error = new Error('test error'); + +tmpdir.refresh(); +process.report.directory = tmpdir.path; + +// Make sure the uncaughtException listener is called. +process.on('uncaughtException', common.mustCall()); + +process.on('exit', (code) => { + assert.strictEqual(code, 0); + // Make sure no reports are generated. + const reports = helper.findReports(process.pid, tmpdir.path); + assert.strictEqual(reports.length, 0); +}); + +throw error; diff --git a/test/report/test-report-uncaught-exception-override.js b/test/report/test-report-uncaught-exception-override.js index df4f8a19581..007e8a234cf 100644 --- a/test/report/test-report-uncaught-exception-override.js +++ b/test/report/test-report-uncaught-exception-override.js @@ -12,9 +12,7 @@ process.report.directory = tmpdir.path; // First, install an uncaught exception hook. process.setUncaughtExceptionCaptureCallback(common.mustCall()); - -// Make sure this is ignored due to the above override. -process.on('uncaughtException', common.mustNotCall()); +// Do not install process uncaughtException handler. process.on('exit', (code) => { assert.strictEqual(code, 0); diff --git a/test/report/test-report-uncaught-exception-primitives.js b/test/report/test-report-uncaught-exception-primitives.js index 8de67eeb6a2..8e78ad3317d 100644 --- a/test/report/test-report-uncaught-exception-primitives.js +++ b/test/report/test-report-uncaught-exception-primitives.js @@ -1,25 +1,32 @@ -// Flags: --report-uncaught-exception 'use strict'; // Test producing a report on uncaught exception. const common = require('../common'); const assert = require('assert'); +const childProcess = require('child_process'); const helper = require('../common/report'); const tmpdir = require('../common/tmpdir'); -const exception = 1; +if (process.argv[2] === 'child') { + // eslint-disable-next-line no-throw-literal + throw 1; +} tmpdir.refresh(); -process.report.directory = tmpdir.path; - -process.on('uncaughtException', common.mustCall((err) => { - assert.strictEqual(err, exception); - const reports = helper.findReports(process.pid, tmpdir.path); +const child = childProcess.spawn(process.execPath, [ + '--report-uncaught-exception', + __filename, + 'child', +], { + cwd: tmpdir.path, +}); +child.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 1); + const reports = helper.findReports(child.pid, tmpdir.path); assert.strictEqual(reports.length, 1); helper.validate(reports[0], [ ['header.event', 'Exception'], - ['javascriptStack.message', `${exception}`], + ['header.trigger', 'Exception'], + ['javascriptStack.message', '1'], ]); })); - -throw exception; diff --git a/test/report/test-report-uncaught-exception-symbols.js b/test/report/test-report-uncaught-exception-symbols.js index b1656172851..09dd4653609 100644 --- a/test/report/test-report-uncaught-exception-symbols.js +++ b/test/report/test-report-uncaught-exception-symbols.js @@ -1,25 +1,31 @@ -// Flags: --report-uncaught-exception 'use strict'; // Test producing a report on uncaught exception. const common = require('../common'); const assert = require('assert'); +const childProcess = require('child_process'); const helper = require('../common/report'); const tmpdir = require('../common/tmpdir'); -const exception = Symbol('foobar'); +if (process.argv[2] === 'child') { + throw Symbol('foobar'); +} tmpdir.refresh(); -process.report.directory = tmpdir.path; - -process.on('uncaughtException', common.mustCall((err) => { - assert.strictEqual(err, exception); - const reports = helper.findReports(process.pid, tmpdir.path); +const child = childProcess.spawn(process.execPath, [ + '--report-uncaught-exception', + __filename, + 'child', +], { + cwd: tmpdir.path, +}); +child.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 1); + const reports = helper.findReports(child.pid, tmpdir.path); assert.strictEqual(reports.length, 1); helper.validate(reports[0], [ ['header.event', 'Exception'], + ['header.trigger', 'Exception'], ['javascriptStack.message', 'Symbol(foobar)'], ]); })); - -throw exception; diff --git a/test/report/test-report-uncaught-exception.js b/test/report/test-report-uncaught-exception.js index 10dcccb0900..5809104165b 100644 --- a/test/report/test-report-uncaught-exception.js +++ b/test/report/test-report-uncaught-exception.js @@ -1,20 +1,31 @@ -// Flags: --report-uncaught-exception 'use strict'; // Test producing a report on uncaught exception. const common = require('../common'); const assert = require('assert'); +const childProcess = require('child_process'); const helper = require('../common/report'); const tmpdir = require('../common/tmpdir'); -const error = new Error('test error'); -tmpdir.refresh(); -process.report.directory = tmpdir.path; +if (process.argv[2] === 'child') { + throw new Error('test error'); +} -process.on('uncaughtException', common.mustCall((err) => { - assert.strictEqual(err, error); - const reports = helper.findReports(process.pid, tmpdir.path); +tmpdir.refresh(); +const child = childProcess.spawn(process.execPath, [ + '--report-uncaught-exception', + __filename, + 'child', +], { + cwd: tmpdir.path, +}); +child.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 1); + const reports = helper.findReports(child.pid, tmpdir.path); assert.strictEqual(reports.length, 1); - helper.validate(reports[0]); -})); -throw error; + helper.validate(reports[0], [ + ['header.event', 'Exception'], + ['header.trigger', 'Exception'], + ['javascriptStack.message', 'Error: test error'], + ]); +})); diff --git a/test/report/test-report-uv-handles.js b/test/report/test-report-uv-handles.js index daa2cc2c8f5..eff3cbe841b 100644 --- a/test/report/test-report-uv-handles.js +++ b/test/report/test-report-uv-handles.js @@ -260,6 +260,8 @@ if (process.argv[2] === 'child') { found_udp.push('connected'); } assert(handle.is_referenced); + assert.strictEqual(handle.writeQueueSize, 0); + assert.strictEqual(handle.writeQueueCount, 0); }, 2), }; diff --git a/test/sequential/sequential.status b/test/sequential/sequential.status index 56f9667d7a3..5d88747b706 100644 --- a/test/sequential/sequential.status +++ b/test/sequential/sequential.status @@ -7,6 +7,9 @@ prefix sequential [true] # This section applies to all platforms # https://github.com/nodejs/node/issues/27611#issuecomment-613100468 test-cpu-prof-dir-worker: PASS, FLAKY +# https://github.com/nodejs/node/issues/44898 +test-watch-mode: PASS, FLAKY +test-watch-mode-inspect: PASS, FLAKY [$system==win32] diff --git a/test/sequential/test-child-process-execsync.js b/test/sequential/test-child-process-execsync.js index 5512eaeed7a..75acbc34a90 100644 --- a/test/sequential/test-child-process-execsync.js +++ b/test/sequential/test-child-process-execsync.js @@ -30,7 +30,13 @@ const { execFileSync, execSync, spawnSync } = require('child_process'); const { getSystemErrorName } = require('util'); const TIMER = 200; -const SLEEP = 2000; +let SLEEP = 2000; +if (common.isWindows) { + // Some of the windows machines in the CI need more time to launch + // and receive output from child processes. + // https://github.com/nodejs/build/issues/3014 + SLEEP = 10000; +} const execOpts = { encoding: 'utf8', shell: true }; diff --git a/test/sequential/test-child-process-pass-fd.js b/test/sequential/test-child-process-pass-fd.js index ad4e5d693ee..86092f56da8 100644 --- a/test/sequential/test-child-process-pass-fd.js +++ b/test/sequential/test-child-process-pass-fd.js @@ -9,8 +9,8 @@ const common = require('../common'); // This test is basically `test-cluster-net-send` but creating lots of workers // so the issue reproduces on OS X consistently. -if (process.config.variables.arm_version === '7') { - common.skip('Too slow for armv7 bots'); +if (common.isPi) { + common.skip('Too slow for Raspberry Pi devices'); } const assert = require('assert'); diff --git a/test/sequential/test-crypto-timing-safe-equal.js b/test/sequential/test-crypto-timing-safe-equal.js index a8bd3abf4cf..13190692b84 100644 --- a/test/sequential/test-crypto-timing-safe-equal.js +++ b/test/sequential/test-crypto-timing-safe-equal.js @@ -32,6 +32,41 @@ assert.strictEqual( } } +{ + // When the inputs are floating-point numbers, timingSafeEqual neither has + // equality nor SameValue semantics. It just compares the underlying bytes, + // ignoring the TypedArray type completely. + + const cmp = (fn) => (a, b) => a.every((x, i) => fn(x, b[i])); + const eq = cmp((a, b) => a === b); + const is = cmp(Object.is); + + function test(a, b, { equal, sameValue, timingSafeEqual }) { + assert.strictEqual(eq(a, b), equal); + assert.strictEqual(is(a, b), sameValue); + assert.strictEqual(crypto.timingSafeEqual(a, b), timingSafeEqual); + } + + test(new Float32Array([NaN]), new Float32Array([NaN]), { + equal: false, + sameValue: true, + timingSafeEqual: true + }); + + test(new Float64Array([0]), new Float64Array([-0]), { + equal: true, + sameValue: false, + timingSafeEqual: false + }); + + const x = new BigInt64Array([0x7ff0000000000001n, 0xfff0000000000001n]); + test(new Float64Array(x.buffer), new Float64Array([NaN, NaN]), { + equal: false, + sameValue: true, + timingSafeEqual: false + }); +} + assert.throws( () => crypto.timingSafeEqual(Buffer.from([1, 2, 3]), Buffer.from([1, 2])), { diff --git a/test/sequential/test-debugger-auto-resume.js b/test/sequential/test-debugger-auto-resume.js deleted file mode 100644 index 8a25f5fc804..00000000000 --- a/test/sequential/test-debugger-auto-resume.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; -const common = require('../common'); - -common.skipIfInspectorDisabled(); - -const fixtures = require('../common/fixtures'); -const startCLI = require('../common/debugger'); -const { addLibraryPath } = require('../common/shared-lib-util'); - -const assert = require('assert'); -const path = require('path'); - -addLibraryPath(process.env); - -// Auto-resume on start if the environment variable is defined. -{ - const scriptFullPath = fixtures.path('debugger', 'break.js'); - const script = path.relative(process.cwd(), scriptFullPath); - - const env = { ...process.env }; - env.NODE_INSPECT_RESUME_ON_START = '1'; - - const cli = startCLI([script], [], { env }); - - cli.waitForInitialBreak() - .then(() => { - assert.deepStrictEqual( - cli.breakInfo, - { filename: script, line: 10 }, - ); - }) - .then(() => cli.quit()) - .then((code) => { - assert.strictEqual(code, 0); - }); -} diff --git a/test/sequential/test-debugger-auto-resume.mjs b/test/sequential/test-debugger-auto-resume.mjs new file mode 100644 index 00000000000..e2f18d6e2bc --- /dev/null +++ b/test/sequential/test-debugger-auto-resume.mjs @@ -0,0 +1,35 @@ +import { skipIfInspectorDisabled } from '../common/index.mjs'; + +skipIfInspectorDisabled(); + +import { path as _path } from '../common/fixtures.js'; +import startCLI from '../common/debugger.js'; +import { addLibraryPath } from '../common/shared-lib-util.js'; + +import { deepStrictEqual, strictEqual } from 'assert'; +import { relative } from 'path'; + +addLibraryPath(process.env); + +// Auto-resume on start if the environment variable is defined. +{ + const scriptFullPath = _path('debugger', 'break.js'); + const script = relative(process.cwd(), scriptFullPath); + + const env = { + ...process.env, + }; + env.NODE_INSPECT_RESUME_ON_START = '1'; + + const cli = startCLI([script], [], { + env, + }); + + await cli.waitForInitialBreak(); + deepStrictEqual(cli.breakInfo, { + filename: script, + line: 10, + }); + const code = await cli.quit(); + strictEqual(code, 0); +} diff --git a/test/sequential/test-debugger-backtrace.js b/test/sequential/test-debugger-backtrace.js index f362e98068f..c189cb3f5b2 100644 --- a/test/sequential/test-debugger-backtrace.js +++ b/test/sequential/test-debugger-backtrace.js @@ -15,22 +15,19 @@ const path = require('path'); const script = path.relative(process.cwd(), scriptFullPath); const cli = startCLI([script]); - function onFatal(error) { - cli.quit(); - throw error; - } - - return cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => cli.stepCommand('c')) - .then(() => cli.command('bt')) - .then(() => { + async function runTest() { + try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.stepCommand('c'); + await cli.command('bt'); assert.ok(cli.output.includes(`#0 topFn ${script}:7:2`)); - }) - .then(() => cli.command('backtrace')) - .then(() => { + await cli.command('backtrace'); assert.ok(cli.output.includes(`#0 topFn ${script}:7:2`)); - }) - .then(() => cli.quit()) - .then(null, onFatal); + } finally { + await cli.quit(); + } + } + + runTest(); } diff --git a/test/sequential/test-debugger-breakpoint-exists.js b/test/sequential/test-debugger-breakpoint-exists.js index 7be0ba657fa..e2efa8182e4 100644 --- a/test/sequential/test-debugger-breakpoint-exists.js +++ b/test/sequential/test-debugger-breakpoint-exists.js @@ -8,20 +8,17 @@ const fixtures = require('../common/fixtures'); const startCLI = require('../common/debugger'); // Test for "Breakpoint at specified location already exists" error. -{ - const script = fixtures.path('debugger', 'three-lines.js'); - const cli = startCLI([script]); +const script = fixtures.path('debugger', 'three-lines.js'); +const cli = startCLI([script]); - function onFatal(error) { - cli.quit(); - throw error; +(async () => { + try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('setBreakpoint(1)'); + await cli.command('setBreakpoint(1)'); + await cli.waitFor(/Breakpoint at specified location already exists/); + } finally { + await cli.quit(); } - - cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => cli.command('setBreakpoint(1)')) - .then(() => cli.command('setBreakpoint(1)')) - .then(() => cli.waitFor(/Breakpoint at specified location already exists/)) - .then(() => cli.quit()) - .then(null, onFatal); -} +})().then(common.mustCall()); diff --git a/test/sequential/test-debugger-custom-port.js b/test/sequential/test-debugger-custom-port.js index e6cee10ffa5..7c8abdc0c55 100644 --- a/test/sequential/test-debugger-custom-port.js +++ b/test/sequential/test-debugger-custom-port.js @@ -9,22 +9,20 @@ const startCLI = require('../common/debugger'); const assert = require('assert'); // Custom port. -{ - const script = fixtures.path('debugger', 'three-lines.js'); +const script = fixtures.path('debugger', 'three-lines.js'); - const cli = startCLI([`--port=${common.PORT}`, script]); - - cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => { - assert.match(cli.output, /debug>/, 'prints a prompt'); - assert.match( - cli.output, - new RegExp(`< Debugger listening on [^\n]*${common.PORT}`), - 'forwards child output'); - }) - .then(() => cli.quit()) - .then((code) => { - assert.strictEqual(code, 0); - }); -} +const cli = startCLI([`--port=${common.PORT}`, script]); +(async function() { + try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + assert.match(cli.output, /debug>/, 'prints a prompt'); + assert.match( + cli.output, + new RegExp(`< Debugger listening on [^\n]*${common.PORT}`), + 'forwards child output'); + } finally { + const code = await cli.quit(); + assert.strictEqual(code, 0); + } +})().then(common.mustCall()); diff --git a/test/sequential/test-debugger-exec-scope.js b/test/sequential/test-debugger-exec-scope.js deleted file mode 100644 index 9e5d2ac7eba..00000000000 --- a/test/sequential/test-debugger-exec-scope.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; -const common = require('../common'); - -common.skipIfInspectorDisabled(); - -const fixtures = require('../common/fixtures'); -const startCLI = require('../common/debugger'); - -const assert = require('assert'); - -// exec .scope -{ - const cli = startCLI([fixtures.path('debugger/backtrace.js')]); - - function onFatal(error) { - cli.quit(); - throw error; - } - - cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => cli.stepCommand('c')) - .then(() => cli.command('exec .scope')) - .then(() => { - assert.match( - cli.output, - /'moduleScoped'/, 'displays closure from module body'); - assert.match(cli.output, /'a'/, 'displays local / function arg'); - assert.match(cli.output, /'l1'/, 'displays local scope'); - assert.doesNotMatch( - cli.output, - /'encodeURIComponent'/, - 'omits global scope' - ); - }) - .then(() => cli.quit()) - .then(null, onFatal); -} diff --git a/test/sequential/test-debugger-exec-scope.mjs b/test/sequential/test-debugger-exec-scope.mjs new file mode 100644 index 00000000000..08b37e27955 --- /dev/null +++ b/test/sequential/test-debugger-exec-scope.mjs @@ -0,0 +1,23 @@ +import { skipIfInspectorDisabled } from '../common/index.mjs'; + +skipIfInspectorDisabled(); + +import { path } from '../common/fixtures.mjs'; +import startCLI from '../common/debugger.js'; + +import assert from 'assert'; + +const cli = startCLI([path('debugger/backtrace.js')]); + +try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.stepCommand('c'); + await cli.command('exec .scope'); + assert.match(cli.output, /'moduleScoped'/, 'displays closure from module body'); + assert.match(cli.output, /'a'/, 'displays local / function arg'); + assert.match(cli.output, /'l1'/, 'displays local scope'); + assert.doesNotMatch(cli.output, /'encodeURIComponent'/, 'omits global scope'); +} finally { + await cli.quit(); +} diff --git a/test/sequential/test-debugger-exec.js b/test/sequential/test-debugger-exec.js index 4057dd03785..3d4bb9ff63a 100644 --- a/test/sequential/test-debugger-exec.js +++ b/test/sequential/test-debugger-exec.js @@ -8,76 +8,61 @@ const startCLI = require('../common/debugger'); const assert = require('assert'); -{ +const cli = startCLI([fixtures.path('debugger/alive.js')]); - const cli = startCLI([fixtures.path('debugger/alive.js')]); +async function waitInitialBreak() { + try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('exec [typeof heartbeat, typeof process.exit]'); + assert.match(cli.output, /\[ 'function', 'function' \]/, 'works w/o paren'); - function onFatal(error) { - cli.quit(); - throw error; - } + await cli.command('p [typeof heartbeat, typeof process.exit]'); + assert.match( + cli.output, + /\[ 'function', 'function' \]/, + 'works w/o paren, short' + ); + + await cli.command('repl'); + assert.match( + cli.output, + /Press Ctrl\+C to leave debug repl\n+> /, + 'shows hint for how to leave repl' + ); + assert.doesNotMatch(cli.output, /debug>/, 'changes the repl style'); + + await cli.command('[typeof heartbeat, typeof process.exit]'); + await cli.waitFor(/function/); + await cli.waitForPrompt(); + assert.match( + cli.output, + /\[ 'function', 'function' \]/, + 'can evaluate in the repl' + ); + assert.match(cli.output, /> $/); - cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => cli.command('exec [typeof heartbeat, typeof process.exit]')) - .then(() => { - assert.match( - cli.output, - /\[ 'function', 'function' \]/, - 'works w/o paren' - ); - }) - .then(() => cli.command('p [typeof heartbeat, typeof process.exit]')) - .then(() => { - assert.match( - cli.output, - /\[ 'function', 'function' \]/, - 'works w/o paren, short' - ); - }) - .then(() => cli.command('repl')) - .then(() => { - assert.match( - cli.output, - /Press Ctrl\+C to leave debug repl\n+> /, - 'shows hint for how to leave repl'); - assert.doesNotMatch(cli.output, /debug>/, 'changes the repl style'); - }) - .then(() => cli.command('[typeof heartbeat, typeof process.exit]')) - .then(() => cli.waitFor(/function/)) - .then(() => cli.waitForPrompt()) - .then(() => { - assert.match( - cli.output, - /\[ 'function', 'function' \]/, 'can evaluate in the repl'); - assert.match(cli.output, /> $/); - }) - .then(() => cli.ctrlC()) - .then(() => cli.waitFor(/debug> $/)) - .then(() => cli.command('exec("[typeof heartbeat, typeof process.exit]")')) - .then(() => { - assert.match( - cli.output, - /\[ 'function', 'function' \]/, - 'works w/ paren' - ); - }) - .then(() => cli.command('p("[typeof heartbeat, typeof process.exit]")')) - .then(() => { - assert.match( - cli.output, - /\[ 'function', 'function' \]/, - 'works w/ paren, short' - ); - }) - .then(() => cli.command('cont')) - .then(() => cli.command('exec [typeof heartbeat, typeof process.exit]')) - .then(() => { - assert.match( - cli.output, - /\[ 'undefined', 'function' \]/, - 'non-paused exec can see global but not module-scope values'); - }) - .then(() => cli.quit()) - .then(null, onFatal); + await cli.ctrlC(); + await cli.waitFor(/debug> $/); + await cli.command('exec("[typeof heartbeat, typeof process.exit]")'); + assert.match(cli.output, /\[ 'function', 'function' \]/, 'works w/ paren'); + await cli.command('p("[typeof heartbeat, typeof process.exit]")'); + assert.match( + cli.output, + /\[ 'function', 'function' \]/, + 'works w/ paren, short' + ); + + await cli.command('cont'); + await cli.command('exec [typeof heartbeat, typeof process.exit]'); + assert.match( + cli.output, + /\[ 'undefined', 'function' \]/, + 'non-paused exec can see global but not module-scope values' + ); + } finally { + await cli.quit(); + } } + +waitInitialBreak(); diff --git a/test/sequential/test-debugger-invalid-args.js b/test/sequential/test-debugger-invalid-args.js index 36f8e588b04..b137ed04255 100644 --- a/test/sequential/test-debugger-invalid-args.js +++ b/test/sequential/test-debugger-invalid-args.js @@ -8,24 +8,20 @@ const startCLI = require('../common/debugger'); const assert = require('assert'); // Launch CLI w/o args. -{ +(async () => { const cli = startCLI([]); - cli.quit() - .then((code) => { - assert.strictEqual(code, 1); - assert.match(cli.output, /^Usage:/, 'Prints usage info'); - }); -} + const code = await cli.quit(); + assert.strictEqual(code, 1); + assert.match(cli.output, /^Usage:/, 'Prints usage info'); +})().then(common.mustCall()); // Launch w/ invalid host:port. -{ +(async () => { const cli = startCLI([`localhost:${common.PORT}`]); - cli.quit() - .then((code) => { - assert.match( - cli.output, - /failed to connect/, - 'Tells the user that the connection failed'); - assert.strictEqual(code, 1); - }); -} + const code = await cli.quit(); + assert.match( + cli.output, + /failed to connect/, + 'Tells the user that the connection failed'); + assert.strictEqual(code, 1); +})().then(common.mustCall()); diff --git a/test/sequential/test-debugger-launch.js b/test/sequential/test-debugger-launch.js deleted file mode 100644 index 3bfe541ecca..00000000000 --- a/test/sequential/test-debugger-launch.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; -const common = require('../common'); - -common.skipIfInspectorDisabled(); - -const fixtures = require('../common/fixtures'); -const startCLI = require('../common/debugger'); - -const assert = require('assert'); - -{ - const script = fixtures.path('debugger', 'three-lines.js'); - const cli = startCLI([script]); - - cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => { - assert.match(cli.output, /debug>/, 'prints a prompt'); - assert.match( - cli.output, - /< Debugger listening on [^\n]*9229/, - 'forwards child output'); - }) - .then(() => cli.command('["hello", "world"].join(" ")')) - .then(() => { - assert.match(cli.output, /hello world/, 'prints the result'); - }) - .then(() => cli.command('')) - .then(() => { - assert.match( - cli.output, - /hello world/, - 'repeats the last command on ' - ); - }) - .then(() => cli.command('version')) - .then(() => { - assert.ok( - cli.output.includes(process.versions.v8), - 'version prints the v8 version' - ); - }) - .then(() => cli.quit()) - .then((code) => { - assert.strictEqual(code, 0); - }); -} diff --git a/test/sequential/test-debugger-launch.mjs b/test/sequential/test-debugger-launch.mjs new file mode 100644 index 00000000000..9d4016c1f5d --- /dev/null +++ b/test/sequential/test-debugger-launch.mjs @@ -0,0 +1,36 @@ +import { skipIfInspectorDisabled } from '../common/index.mjs'; +skipIfInspectorDisabled(); + +import { path } from '../common/fixtures.mjs'; +import startCLI from '../common/debugger.js'; + +import assert from 'assert'; + +const script = path('debugger', 'three-lines.js'); +const cli = startCLI([script]); +try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + assert.match(cli.output, /debug>/, 'prints a prompt'); + assert.match( + cli.output, + /< Debugger listening on [^\n]*9229/, + 'forwards child output' + ); + await cli.command('["hello", "world"].join(" ")'); + assert.match(cli.output, /hello world/, 'prints the result'); + await cli.command(''); + assert.match( + cli.output, + /hello world/, + 'repeats the last command on ' + ); + await cli.command('version'); + assert.ok( + cli.output.includes(process.versions.v8), + 'version prints the v8 version' + ); +} finally { + const code = await cli.quit(); + assert.strictEqual(code, 0); +} diff --git a/test/sequential/test-debugger-list.js b/test/sequential/test-debugger-list.js new file mode 100644 index 00000000000..594874e140b --- /dev/null +++ b/test/sequential/test-debugger-list.js @@ -0,0 +1,30 @@ +'use strict'; +const common = require('../common'); + +common.skipIfInspectorDisabled(); + +const fixtures = require('../common/fixtures'); +const startCLI = require('../common/debugger'); + +const assert = require('assert'); + +const cli = startCLI([fixtures.path('debugger/three-lines.js')]); + +(async () => { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('list(0)'); + assert.match(cli.output, /> 1 let x = 1;/); + await cli.command('list(1)'); + assert.match(cli.output, /> 1 let x = 1;\r?\n {2}2 x = x \+ 1;/); + await cli.command('list(10)'); + assert.match(cli.output, /> 1 let x = 1;\r?\n {2}2 x = x \+ 1;\r?\n {2}3 module\.exports = x;\r?\n {2}4 /); + await cli.command('c'); + await cli.waitFor(/disconnect/); + await cli.waitFor(/debug> $/); + await cli.command('list()'); + await cli.waitFor(/ERR_DEBUGGER_ERROR/); + assert.match(cli.output, /Uncaught Error \[ERR_DEBUGGER_ERROR\]: Requires execution to be paused/); +})() +.finally(() => cli.quit()) +.then(common.mustCall()); diff --git a/test/sequential/test-debugger-low-level.js b/test/sequential/test-debugger-low-level.js index f6d97f2dfe1..93c8e1b6255 100644 --- a/test/sequential/test-debugger-low-level.js +++ b/test/sequential/test-debugger-low-level.js @@ -12,28 +12,24 @@ const assert = require('assert'); const cli = startCLI([fixtures.path('debugger/three-lines.js')]); const scriptPattern = /^\* (\d+): \S+debugger(?:\/|\\)three-lines\.js/m; - function onFatal(error) { - cli.quit(); - throw error; - } - - return cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => cli.command('scripts')) - .then(() => { + async function testDebuggerLowLevel() { + try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('scripts'); const [, scriptId] = cli.output.match(scriptPattern); - return cli.command( + await cli.command( `Debugger.getScriptSource({ scriptId: '${scriptId}' })` ); - }) - .then(() => { assert.match( cli.output, /scriptSource:[ \n]*'(?:\(function \(|let x = 1)/); assert.match( cli.output, /let x = 1;/); - }) - .then(() => cli.quit()) - .then(null, onFatal); + } finally { + await cli.quit(); + } + } + testDebuggerLowLevel(); } diff --git a/test/sequential/test-debugger-object-type-remote-object.js b/test/sequential/test-debugger-object-type-remote-object.js new file mode 100644 index 00000000000..7404eae3963 --- /dev/null +++ b/test/sequential/test-debugger-object-type-remote-object.js @@ -0,0 +1,42 @@ +'use strict'; +const common = require('../common'); + +common.skipIfInspectorDisabled(); + +const fixtures = require('../common/fixtures'); +const startCLI = require('../common/debugger'); + +const assert = require('assert'); + +const cli = startCLI([fixtures.path('debugger/empty.js')]); + +(async () => { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('exec new Date(0)'); + assert.match(cli.output, /1970-01-01T00:00:00\.000Z/); + await cli.command('exec null'); + assert.match(cli.output, /null/); + await cli.command('exec /regex/g'); + assert.match(cli.output, /\/regex\/g/); + await cli.command('exec new Map()'); + assert.match(cli.output, /Map\(0\) {}/); + await cli.command('exec new Map([["a",1],["b",2]])'); + assert.match(cli.output, /Map\(2\) { a => 1, b => 2 }/); + await cli.command('exec new Set()'); + assert.match(cli.output, /Set\(0\) {}/); + await cli.command('exec new Set([1,2])'); + assert.match(cli.output, /Set\(2\) { 1, 2 }/); + await cli.command('exec new Set([{a:1},new Set([1])])'); + assert.match(cli.output, /Set\(2\) { { a: 1 }, Set\(1\) { \.\.\. } }/); + await cli.command('exec a={}; a'); + assert.match(cli.output, /{}/); + await cli.command('exec a={a:1,b:{c:1}}; a'); + assert.match(cli.output, /{ a: 1, b: Object }/); + await cli.command('exec a=[]; a'); + assert.match(cli.output, /\[\]/); + await cli.command('exec a=[1,2]; a'); + assert.match(cli.output, /\[ 1, 2 \]/); +})() +.finally(() => cli.quit()) +.then(common.mustCall()); diff --git a/test/sequential/test-debugger-preserve-breaks.js b/test/sequential/test-debugger-preserve-breaks.js index fbc463af96a..bb0eba96143 100644 --- a/test/sequential/test-debugger-preserve-breaks.js +++ b/test/sequential/test-debugger-preserve-breaks.js @@ -9,54 +9,39 @@ const startCLI = require('../common/debugger'); const assert = require('assert'); const path = require('path'); +const scriptFullPath = fixtures.path('debugger', 'three-lines.js'); +const script = path.relative(process.cwd(), scriptFullPath); + // Run after quit. -{ - const scriptFullPath = fixtures.path('debugger', 'three-lines.js'); - const script = path.relative(process.cwd(), scriptFullPath); +const runTest = async () => { const cli = startCLI([script]); - - function onFatal(error) { - cli.quit(); - throw error; + try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('breakpoints'); + assert.match(cli.output, /No breakpoints yet/); + await cli.command('sb(2)'); + await cli.command('sb(3)'); + await cli.command('breakpoints'); + assert.ok(cli.output.includes(`#0 ${script}:2`)); + assert.ok(cli.output.includes(`#1 ${script}:3`)); + await cli.stepCommand('c'); // hit line 2 + await cli.stepCommand('c'); // hit line 3 + assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 3 }); + await cli.command('restart'); + await cli.waitForInitialBreak(); + assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 1 }); + await cli.stepCommand('c'); + assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 2 }); + await cli.stepCommand('c'); + assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 3 }); + await cli.command('breakpoints'); + const msg = `SCRIPT: ${script}, OUTPUT: ${cli.output}`; + assert.ok(cli.output.includes(`#0 ${script}:2`), msg); + assert.ok(cli.output.includes(`#1 ${script}:3`), msg); + } finally { + await cli.quit(); } +}; - return cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => cli.command('breakpoints')) - .then(() => { - assert.match(cli.output, /No breakpoints yet/); - }) - .then(() => cli.command('sb(2)')) - .then(() => cli.command('sb(3)')) - .then(() => cli.command('breakpoints')) - .then(() => { - assert.ok(cli.output.includes(`#0 ${script}:2`)); - assert.ok(cli.output.includes(`#1 ${script}:3`)); - }) - .then(() => cli.stepCommand('c')) // hit line 2 - .then(() => cli.stepCommand('c')) // hit line 3 - .then(() => { - assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 3 }); - }) - .then(() => cli.command('restart')) - .then(() => cli.waitForInitialBreak()) - .then(() => { - assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 1 }); - }) - .then(() => cli.stepCommand('c')) - .then(() => { - assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 2 }); - }) - .then(() => cli.stepCommand('c')) - .then(() => { - assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 3 }); - }) - .then(() => cli.command('breakpoints')) - .then(() => { - const msg = `SCRIPT: ${script}, OUTPUT: ${cli.output}`; - assert.ok(cli.output.includes(`#0 ${script}:2`), msg); - assert.ok(cli.output.includes(`#1 ${script}:3`), msg); - }) - .then(() => cli.quit()) - .then(null, onFatal); -} +runTest(); diff --git a/test/sequential/test-debugger-profile-command.js b/test/sequential/test-debugger-profile-command.js new file mode 100644 index 00000000000..06818c2132d --- /dev/null +++ b/test/sequential/test-debugger-profile-command.js @@ -0,0 +1,35 @@ +'use strict'; +const common = require('../common'); + +common.skipIfInspectorDisabled(); + +const fixtures = require('../common/fixtures'); +const startCLI = require('../common/debugger'); + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); + +const cli = startCLI([fixtures.path('debugger/empty.js')]); + +const rootDir = path.resolve(__dirname, '..', '..'); + +(async () => { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('profile'); + await cli.command('profileEnd'); + assert.match(cli.output, /\[Profile \d+μs\]/); + await cli.command('profiles'); + assert.match(cli.output, /\[ \[Profile \d+μs\] \]/); + await cli.command('profiles[0].save()'); + assert.match(cli.output, /Saved profile to .*node\.cpuprofile/); + + const cpuprofile = path.resolve(rootDir, 'node.cpuprofile'); + const data = JSON.parse(fs.readFileSync(cpuprofile, 'utf8')); + assert.strictEqual(Array.isArray(data.nodes), true); + + fs.rmSync(cpuprofile); +})() +.then(common.mustCall()) +.finally(() => cli.quit()); diff --git a/test/sequential/test-debugger-profile.js b/test/sequential/test-debugger-profile.js index 992c6f71c00..bf4a6972002 100644 --- a/test/sequential/test-debugger-profile.js +++ b/test/sequential/test-debugger-profile.js @@ -21,18 +21,21 @@ function delay(ms) { throw error; } - return cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => cli.command('exec console.profile()')) - .then(() => { + try { + (async () => { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('exec console.profile()'); assert.match(cli.output, /undefined/); - }) - .then(() => cli.command('exec console.profileEnd()')) - .then(() => delay(250)) - .then(() => { + await cli.command('exec console.profileEnd()'); + await delay(250); assert.match(cli.output, /undefined/); assert.match(cli.output, /Captured new CPU profile\./); - }) - .then(() => cli.quit()) - .then(null, onFatal); + await cli.quit(); + })() + .then(common.mustCall()); + } catch (error) { + return onFatal(error); + } + } diff --git a/test/sequential/test-debugger-restart-message.js b/test/sequential/test-debugger-restart-message.js index bcd06b4e230..190d0c18ccc 100644 --- a/test/sequential/test-debugger-restart-message.js +++ b/test/sequential/test-debugger-restart-message.js @@ -16,24 +16,22 @@ const startCLI = require('../common/debugger'); const script = fixtures.path('debugger', 'three-lines.js'); const cli = startCLI([script]); - function onFatal(error) { - cli.quit(); - throw error; - } - const listeningRegExp = /Debugger listening on/g; - cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => { + async function onWaitForInitialBreak() { + try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); assert.strictEqual(cli.output.match(listeningRegExp).length, 1); - }) - .then(async () => { + for (let i = 0; i < RESTARTS; i++) { await cli.stepCommand('restart'); assert.strictEqual(cli.output.match(listeningRegExp).length, 1); } - }) - .then(() => cli.quit()) - .then(null, onFatal); + } finally { + await cli.quit(); + } + } + + onWaitForInitialBreak(); } diff --git a/test/sequential/test-debugger-sb-before-load.js b/test/sequential/test-debugger-sb-before-load.js index 586687800e8..e2267156b74 100644 --- a/test/sequential/test-debugger-sb-before-load.js +++ b/test/sequential/test-debugger-sb-before-load.js @@ -10,35 +10,24 @@ const assert = require('assert'); const path = require('path'); // Using sb before loading file. -{ - const scriptFullPath = fixtures.path('debugger', 'cjs', 'index.js'); - const script = path.relative(process.cwd(), scriptFullPath); - - const otherScriptFullPath = fixtures.path('debugger', 'cjs', 'other.js'); - const otherScript = path.relative(process.cwd(), otherScriptFullPath); - - const cli = startCLI([script]); - - function onFatal(error) { - cli.quit(); - throw error; - } - - cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => cli.command('sb("other.js", 2)')) - .then(() => { - assert.match( - cli.output, - /not loaded yet/, - 'warns that the script was not loaded yet'); - }) - .then(() => cli.stepCommand('cont')) - .then(() => { - assert.ok( - cli.output.includes(`break in ${otherScript}:2`), - 'found breakpoint in file that was not loaded yet'); - }) - .then(() => cli.quit()) - .then(null, onFatal); -} + +const scriptFullPath = fixtures.path('debugger', 'cjs', 'index.js'); +const script = path.relative(process.cwd(), scriptFullPath); + +const otherScriptFullPath = fixtures.path('debugger', 'cjs', 'other.js'); +const otherScript = path.relative(process.cwd(), otherScriptFullPath); + +const cli = startCLI([script]); + +(async () => { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('sb("other.js", 2)'); + assert.match(cli.output, /not loaded yet/, + 'warns that the script was not loaded yet'); + await cli.stepCommand('cont'); + assert.ok(cli.output.includes(`break in ${otherScript}:2`), + 'found breakpoint in file that was not loaded yet'); +})() +.then(common.mustCall()) +.finally(() => cli.quit()); diff --git a/test/sequential/test-debugger-watchers.js b/test/sequential/test-debugger-watchers.js deleted file mode 100644 index e856132b74e..00000000000 --- a/test/sequential/test-debugger-watchers.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; -const common = require('../common'); - -common.skipIfInspectorDisabled(); - -const fixtures = require('../common/fixtures'); -const startCLI = require('../common/debugger'); - -const assert = require('assert'); - -// Stepping through breakpoints. -{ - const cli = startCLI([fixtures.path('debugger/break.js')]); - - function onFatal(error) { - cli.quit(); - throw error; - } - - return cli.waitForInitialBreak() - .then(() => cli.waitForPrompt()) - .then(() => cli.command('watch("x")')) - .then(() => cli.command('watch("\\"Hello\\"")')) - .then(() => cli.command('watch("42")')) - .then(() => cli.command('watch("NaN")')) - .then(() => cli.command('watch("true")')) - .then(() => cli.command('watch("[1, 2]")')) - .then(() => cli.command('watch("process.env")')) - .then(() => cli.command('watchers')) - .then(() => { - assert.match(cli.output, /x is not defined/); - }) - .then(() => cli.command('unwatch("42")')) - .then(() => cli.stepCommand('n')) - .then(() => { - assert.match(cli.output, /0: x = 10/); - assert.match(cli.output, /1: "Hello" = 'Hello'/); - assert.match(cli.output, /2: NaN = NaN/); - assert.match(cli.output, /3: true = true/); - assert.match(cli.output, /4: \[1, 2\] = \[ 1, 2 \]/); - assert.match( - cli.output, - /5: process\.env =\n\s+\{[\s\S]+,\n\s+\.\.\. \}/, - 'shows "..." for process.env'); - }) - .then(() => cli.quit()) - .then(null, onFatal); -} diff --git a/test/sequential/test-debugger-watchers.mjs b/test/sequential/test-debugger-watchers.mjs new file mode 100644 index 00000000000..2c4fd11545f --- /dev/null +++ b/test/sequential/test-debugger-watchers.mjs @@ -0,0 +1,49 @@ +import { skipIfInspectorDisabled } from '../common/index.mjs'; +skipIfInspectorDisabled(); + +import { path } from '../common/fixtures.mjs'; +import startCLI from '../common/debugger.js'; + +import assert from 'assert'; + +const script = path('debugger', 'break.js'); +const cli = startCLI([script]); + +function onFatal(error) { + cli.quit(); + throw error; +} + +// Stepping through breakpoints. +try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('watch("x")'); + await cli.command('watch("\\"Hello\\"")'); + await cli.command('watch("42")'); + await cli.command('watch("NaN")'); + await cli.command('watch("true")'); + await cli.command('watch("[1, 2]")'); + await cli.command('watch("process.env")'); + await cli.command('watchers'); + + assert.match(cli.output, /x is not defined/); + + await cli.command('unwatch("42")'); + await cli.stepCommand('n'); + + assert.match(cli.output, /0: x = 10/); + assert.match(cli.output, /1: "Hello" = 'Hello'/); + assert.match(cli.output, /2: NaN = NaN/); + assert.match(cli.output, /3: true = true/); + assert.match(cli.output, /4: \[1, 2\] = \[ 1, 2 \]/); + assert.match( + cli.output, + /5: process\.env =\n\s+\{[\s\S]+,\n\s+\.\.\. \}/, + 'shows "..." for process.env' + ); + + await cli.quit(); +} catch (error) { + onFatal(error); +} diff --git a/test/sequential/test-gc-http-client-onerror.js b/test/sequential/test-gc-http-client-onerror.js index 30b272ed94a..d5ae7fbd20c 100644 --- a/test/sequential/test-gc-http-client-onerror.js +++ b/test/sequential/test-gc-http-client-onerror.js @@ -15,6 +15,7 @@ function serverHandler(req, res) { } const http = require('http'); +const numRequests = 36; let createClients = true; let done = 0; let count = 0; @@ -23,22 +24,26 @@ let countGC = 0; const server = http.createServer(serverHandler); server.listen(0, common.mustCall(() => { for (let i = 0; i < cpus; i++) - getAll(); + getAll(numRequests); })); -function getAll() { - if (createClients) { - const req = http.get({ - hostname: 'localhost', - pathname: '/', - port: server.address().port - }, cb).on('error', onerror); +function getAll(requestsRemaining) { + if (!createClients) + return; - count++; - onGC(req, { ongc }); + if (requestsRemaining <= 0) + return; - setImmediate(getAll); - } + const req = http.get({ + hostname: 'localhost', + pathname: '/', + port: server.address().port + }, cb).on('error', onerror); + + count++; + onGC(req, { ongc }); + + setImmediate(getAll, requestsRemaining - 1); } function cb(res) { diff --git a/test/sequential/test-gc-http-client.js b/test/sequential/test-gc-http-client.js index 7b9f9865ea9..34f565c315d 100644 --- a/test/sequential/test-gc-http-client.js +++ b/test/sequential/test-gc-http-client.js @@ -13,6 +13,7 @@ function serverHandler(req, res) { } const http = require('http'); +const numRequests = 36; let createClients = true; let done = 0; let count = 0; @@ -21,13 +22,16 @@ let countGC = 0; const server = http.createServer(serverHandler); server.listen(0, common.mustCall(() => { for (let i = 0; i < cpus; i++) - getAll(); + getAll(numRequests); })); -function getAll() { +function getAll(requestsRemaining) { if (!createClients) return; + if (requestsRemaining <= 0) + return; + const req = http.get({ hostname: 'localhost', pathname: '/', @@ -37,7 +41,7 @@ function getAll() { count++; onGC(req, { ongc }); - setImmediate(getAll); + setImmediate(getAll, requestsRemaining - 1); } function cb(res) { diff --git a/test/sequential/test-heap-prof.js b/test/sequential/test-heap-prof.js deleted file mode 100644 index 1dda8f36743..00000000000 --- a/test/sequential/test-heap-prof.js +++ /dev/null @@ -1,375 +0,0 @@ -'use strict'; - -// This tests that --heap-prof, --heap-prof-dir and --heap-prof-name works. - -const common = require('../common'); - -const fixtures = require('../common/fixtures'); -common.skipIfInspectorDisabled(); - -const assert = require('assert'); -const fs = require('fs'); -const path = require('path'); -const { spawnSync } = require('child_process'); - -const tmpdir = require('../common/tmpdir'); - -function getHeapProfiles(dir) { - const list = fs.readdirSync(dir); - return list - .filter((file) => file.endsWith('.heapprofile')) - .map((file) => path.join(dir, file)); -} - -function findFirstFrameInNode(root, func) { - const first = root.children.find( - (child) => child.callFrame.functionName === func - ); - if (first) { - return first; - } - for (const child of root.children) { - const first = findFirstFrameInNode(child, func); - if (first) { - return first; - } - } - return undefined; -} - -function findFirstFrame(file, func) { - const data = fs.readFileSync(file, 'utf8'); - const profile = JSON.parse(data); - const first = findFirstFrameInNode(profile.head, func); - return { frame: first, roots: profile.head.children }; -} - -function verifyFrames(output, file, func) { - const { frame, roots } = findFirstFrame(file, func); - if (!frame) { - // Show native debug output and the profile for debugging. - console.log(output.stderr.toString()); - console.log(roots); - } - assert.notStrictEqual(frame, undefined); -} - -// We need to set --heap-prof-interval to a small enough value to make -// sure we can find our workload in the samples, so we need to set -// TEST_ALLOCATION > kHeapProfInterval. -const kHeapProfInterval = 128; -const TEST_ALLOCATION = kHeapProfInterval * 2; - -const env = { - ...process.env, - TEST_ALLOCATION, - NODE_DEBUG_NATIVE: 'INSPECTOR_PROFILER' -}; - -// Test --heap-prof without --heap-prof-interval. Here we just verify that -// we manage to generate a profile. -{ - tmpdir.refresh(); - const output = spawnSync(process.execPath, [ - '--heap-prof', - fixtures.path('workload', 'allocation.js'), - ], { - cwd: tmpdir.path, - env - }); - if (output.status !== 0) { - console.log(output.stderr.toString()); - console.log(output); - } - assert.strictEqual(output.status, 0); - const profiles = getHeapProfiles(tmpdir.path); - assert.strictEqual(profiles.length, 1); -} - -// Outputs heap profile when event loop is drained. -// TODO(joyeecheung): share the fixutres with v8 coverage tests -{ - tmpdir.refresh(); - const output = spawnSync(process.execPath, [ - '--heap-prof', - '--heap-prof-interval', - kHeapProfInterval, - fixtures.path('workload', 'allocation.js'), - ], { - cwd: tmpdir.path, - env - }); - if (output.status !== 0) { - console.log(output.stderr.toString()); - console.log(output); - } - assert.strictEqual(output.status, 0); - const profiles = getHeapProfiles(tmpdir.path); - assert.strictEqual(profiles.length, 1); - verifyFrames(output, profiles[0], 'runAllocation'); -} - -// Outputs heap profile when process.exit(55) exits process. -{ - tmpdir.refresh(); - const output = spawnSync(process.execPath, [ - '--heap-prof', - '--heap-prof-interval', - kHeapProfInterval, - fixtures.path('workload', 'allocation-exit.js'), - ], { - cwd: tmpdir.path, - env - }); - if (output.status !== 55) { - console.log(output.stderr.toString()); - } - assert.strictEqual(output.status, 55); - const profiles = getHeapProfiles(tmpdir.path); - assert.strictEqual(profiles.length, 1); - verifyFrames(output, profiles[0], 'runAllocation'); -} - -// Outputs heap profile when process.kill(process.pid, "SIGINT"); exits process. -{ - tmpdir.refresh(); - const output = spawnSync(process.execPath, [ - '--heap-prof', - '--heap-prof-interval', - kHeapProfInterval, - fixtures.path('workload', 'allocation-sigint.js'), - ], { - cwd: tmpdir.path, - env - }); - if (!common.isWindows) { - if (output.signal !== 'SIGINT') { - console.log(output.stderr.toString()); - } - assert.strictEqual(output.signal, 'SIGINT'); - } - const profiles = getHeapProfiles(tmpdir.path); - assert.strictEqual(profiles.length, 1); - verifyFrames(output, profiles[0], 'runAllocation'); -} - -// Outputs heap profile from worker when execArgv is set. -{ - tmpdir.refresh(); - const output = spawnSync(process.execPath, [ - fixtures.path('workload', 'allocation-worker-argv.js'), - ], { - cwd: tmpdir.path, - env: { - ...process.env, - HEAP_PROF_INTERVAL: '128' - } - }); - if (output.status !== 0) { - console.log(output.stderr.toString()); - } - assert.strictEqual(output.status, 0); - const profiles = getHeapProfiles(tmpdir.path); - assert.strictEqual(profiles.length, 1); - verifyFrames(output, profiles[0], 'runAllocation'); -} - -// --heap-prof-name without --heap-prof -{ - tmpdir.refresh(); - const output = spawnSync(process.execPath, [ - '--heap-prof-name', - 'test.heapprofile', - fixtures.path('workload', 'allocation.js'), - ], { - cwd: tmpdir.path, - env - }); - const stderr = output.stderr.toString().trim(); - if (output.status !== 9) { - console.log(stderr); - } - assert.strictEqual(output.status, 9); - assert.strictEqual( - stderr, - `${process.execPath}: --heap-prof-name must be used with --heap-prof`); -} - -// --heap-prof-dir without --heap-prof -{ - tmpdir.refresh(); - const output = spawnSync(process.execPath, [ - '--heap-prof-dir', - 'prof', - fixtures.path('workload', 'allocation.js'), - ], { - cwd: tmpdir.path, - env - }); - const stderr = output.stderr.toString().trim(); - if (output.status !== 9) { - console.log(stderr); - } - assert.strictEqual(output.status, 9); - assert.strictEqual( - stderr, - `${process.execPath}: --heap-prof-dir must be used with --heap-prof`); -} - -// --heap-prof-interval without --heap-prof -{ - tmpdir.refresh(); - const output = spawnSync(process.execPath, [ - '--heap-prof-interval', - kHeapProfInterval, - fixtures.path('workload', 'allocation.js'), - ], { - cwd: tmpdir.path, - env - }); - const stderr = output.stderr.toString().trim(); - if (output.status !== 9) { - console.log(stderr); - } - assert.strictEqual(output.status, 9); - assert.strictEqual( - stderr, - `${process.execPath}: ` + - '--heap-prof-interval must be used with --heap-prof'); -} - -// --heap-prof-name -{ - tmpdir.refresh(); - const file = path.join(tmpdir.path, 'test.heapprofile'); - const output = spawnSync(process.execPath, [ - '--heap-prof', - '--heap-prof-name', - 'test.heapprofile', - '--heap-prof-interval', - kHeapProfInterval, - fixtures.path('workload', 'allocation.js'), - ], { - cwd: tmpdir.path, - env - }); - if (output.status !== 0) { - console.log(output.stderr.toString()); - } - assert.strictEqual(output.status, 0); - const profiles = getHeapProfiles(tmpdir.path); - assert.deepStrictEqual(profiles, [file]); - verifyFrames(output, file, 'runAllocation'); -} - -// relative --heap-prof-dir -{ - tmpdir.refresh(); - const output = spawnSync(process.execPath, [ - '--heap-prof', - '--heap-prof-dir', - 'prof', - '--heap-prof-interval', - kHeapProfInterval, - fixtures.path('workload', 'allocation.js'), - ], { - cwd: tmpdir.path, - env - }); - if (output.status !== 0) { - console.log(output.stderr.toString()); - } - assert.strictEqual(output.status, 0); - const dir = path.join(tmpdir.path, 'prof'); - assert(fs.existsSync(dir)); - const profiles = getHeapProfiles(dir); - assert.strictEqual(profiles.length, 1); - verifyFrames(output, profiles[0], 'runAllocation'); -} - -// absolute --heap-prof-dir -{ - tmpdir.refresh(); - const dir = path.join(tmpdir.path, 'prof'); - const output = spawnSync(process.execPath, [ - '--heap-prof', - '--heap-prof-dir', - dir, - '--heap-prof-interval', - kHeapProfInterval, - fixtures.path('workload', 'allocation.js'), - ], { - cwd: tmpdir.path, - env - }); - if (output.status !== 0) { - console.log(output.stderr.toString()); - } - assert.strictEqual(output.status, 0); - assert(fs.existsSync(dir)); - const profiles = getHeapProfiles(dir); - assert.strictEqual(profiles.length, 1); - verifyFrames(output, profiles[0], 'runAllocation'); -} - -// --heap-prof-dir and --heap-prof-name -{ - tmpdir.refresh(); - const dir = path.join(tmpdir.path, 'prof'); - const file = path.join(dir, 'test.heapprofile'); - const output = spawnSync(process.execPath, [ - '--heap-prof', - '--heap-prof-name', - 'test.heapprofile', - '--heap-prof-dir', - dir, - '--heap-prof-interval', - kHeapProfInterval, - fixtures.path('workload', 'allocation.js'), - ], { - cwd: tmpdir.path, - env - }); - if (output.status !== 0) { - console.log(output.stderr.toString()); - } - assert.strictEqual(output.status, 0); - assert(fs.existsSync(dir)); - const profiles = getHeapProfiles(dir); - assert.deepStrictEqual(profiles, [file]); - verifyFrames(output, file, 'runAllocation'); -} - -{ - tmpdir.refresh(); - const output = spawnSync(process.execPath, [ - '--heap-prof-interval', - kHeapProfInterval, - '--heap-prof-dir', - 'prof', - '--heap-prof', - fixtures.path('workload', 'allocation-worker.js'), - ], { - cwd: tmpdir.path, - env - }); - if (output.status !== 0) { - console.log(output.stderr.toString()); - } - assert.strictEqual(output.status, 0); - const dir = path.join(tmpdir.path, 'prof'); - assert(fs.existsSync(dir)); - const profiles = getHeapProfiles(dir); - assert.strictEqual(profiles.length, 2); - const profile1 = findFirstFrame(profiles[0], 'runAllocation'); - const profile2 = findFirstFrame(profiles[1], 'runAllocation'); - if (!profile1.frame && !profile2.frame) { - // Show native debug output and the profile for debugging. - console.log(output.stderr.toString()); - console.log('heap path: ', profiles[0]); - console.log(profile1.roots); - console.log('heap path: ', profiles[1]); - console.log(profile2.roots); - } - assert(profile1.frame || profile2.frame); -} diff --git a/test/sequential/test-inspector-open.js b/test/sequential/test-inspector-open.js index 190a99e7282..5c91446b567 100644 --- a/test/sequential/test-inspector-open.js +++ b/test/sequential/test-inspector-open.js @@ -32,13 +32,12 @@ let firstPort; function firstOpen(msg) { assert.strictEqual(msg.cmd, 'url'); const port = url.parse(msg.url).port; - ping(port, (err) => { - assert.ifError(err); + ping(port, common.mustSucceed(() => { // Inspector is already open, and won't be reopened, so args don't matter. child.send({ cmd: 'open', args: [kOpenWhileOpen] }); child.once('message', common.mustCall(tryToOpenWhenOpen)); firstPort = port; - }); + })); } function tryToOpenWhenOpen(msg) { @@ -46,11 +45,10 @@ function tryToOpenWhenOpen(msg) { const port = url.parse(msg.url).port; // Reopen didn't do anything, the port was already open, and has not changed. assert.strictEqual(port, firstPort); - ping(port, (err) => { - assert.ifError(err); + ping(port, common.mustSucceed(() => { child.send({ cmd: 'close' }); child.once('message', common.mustCall(closeWhenOpen)); - }); + })); } function closeWhenOpen(msg) { @@ -73,10 +71,9 @@ function tryToCloseWhenClosed(msg) { function reopenAfterClose(msg) { assert.strictEqual(msg.cmd, 'url'); const port = url.parse(msg.url).port; - ping(port, (err) => { - assert.ifError(err); + ping(port, common.mustSucceed(() => { process.exit(); - }); + })); } function ping(port, callback) { diff --git a/test/sequential/test-net-connect-handle-econnrefused.js b/test/sequential/test-net-connect-handle-econnrefused.js index 3cb7d014b43..4bd1b9d2a97 100644 --- a/test/sequential/test-net-connect-handle-econnrefused.js +++ b/test/sequential/test-net-connect-handle-econnrefused.js @@ -27,5 +27,6 @@ const assert = require('assert'); const c = net.createConnection(common.PORT); c.on('connect', common.mustNotCall()); c.on('error', common.mustCall((e) => { + assert.strictEqual(c.connecting, false); assert.strictEqual(e.code, 'ECONNREFUSED'); })); diff --git a/test/sequential/test-runner-run-inspect.mjs b/test/sequential/test-runner-run-inspect.mjs new file mode 100644 index 00000000000..35c380c8d4e --- /dev/null +++ b/test/sequential/test-runner-run-inspect.mjs @@ -0,0 +1,164 @@ +import * as common from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; + +common.skipIfInspectorDisabled(); + + +const debuggerPort = common.getPort(); + +async function spawnRunner({ execArgv, expectedPort, expectedHost, expectedInitialPort, inspectPort }) { + const { code, signal } = await common.spawnPromisified( + process.execPath, + ['--expose-internals', '--no-warnings', ...execArgv, fixtures.path('test-runner/run_inspect.js')], { + env: { ...process.env, + expectedPort, + inspectPort, + expectedHost, + expectedInitialPort } + }); + assert.strictEqual(code, 0); + assert.strictEqual(signal, null); +} + +let offset = 0; + +const defaultPortCase = spawnRunner({ + execArgv: ['--inspect'], + expectedPort: 9230, +}); + +await spawnRunner({ + execArgv: ['--inspect=65535'], + expectedPort: 1024, +}); + +let port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=${port}`], + expectedPort: port + 1, +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: ['--inspect', `--inspect-port=${port}`], + expectedPort: port + 1, +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: ['--inspect', `--debug-port=${port}`], + expectedPort: port + 1, +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=0.0.0.0:${port}`], + expectedPort: port + 1, expectedHost: '0.0.0.0', +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=127.0.0.1:${port}`], + expectedPort: port + 1, expectedHost: '127.0.0.1' +}); + +if (common.hasIPv6) { + port = debuggerPort + offset++ * 5; + + await spawnRunner({ + execArgv: [`--inspect=[::]:${port}`], + expectedPort: port + 1, expectedHost: '::' + }); + + port = debuggerPort + offset++ * 5; + + await spawnRunner({ + execArgv: [`--inspect=[::1]:${port}`], + expectedPort: port + 1, expectedHost: '::1' + }); +} + +// These tests check that setting inspectPort in run +// would take effect and override port incrementing behavior + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=${port}`], + inspectPort: port + 2, + expectedPort: port + 2, +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=${port}`], + inspectPort: 'addTwo', + expectedPort: port + 2, +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=${port}`], + inspectPort: 'string', +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=${port}`], + inspectPort: 'null', + expectedPort: port + 1, +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=${port}`], + inspectPort: 'bignumber', +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=${port}`], + inspectPort: 'negativenumber', +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=${port}`], + inspectPort: 'bignumberfunc' +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=${port}`], + inspectPort: 'strfunc', +}); + +port = debuggerPort + offset++ * 5; + +await spawnRunner({ + execArgv: [`--inspect=${port}`], + inspectPort: 0, + expectedInitialPort: 0, +}); + +await defaultPortCase; + +port = debuggerPort + offset++ * 5; +await spawnRunner({ + execArgv: ['--inspect'], + inspectPort: port + 2, + expectedInitialPort: port + 2, +}); diff --git a/test/sequential/test-vm-break-on-sigint.js b/test/sequential/test-vm-break-on-sigint.js new file mode 100644 index 00000000000..92fdae0c839 --- /dev/null +++ b/test/sequential/test-vm-break-on-sigint.js @@ -0,0 +1,22 @@ +'use strict'; +const common = require('../common'); + +// This test ensures that running vm with breakOnSignt option in multiple +// worker_threads does not crash. +// Issue: https://github.com/nodejs/node/issues/43699 +const { Worker } = require('worker_threads'); +const vm = require('vm'); + +// Don't use isMainThread to allow running this test inside a worker. +if (!process.env.HAS_STARTED_WORKER) { + process.env.HAS_STARTED_WORKER = 1; + for (let i = 0; i < 10; i++) { + const worker = new Worker(__filename); + worker.on('exit', common.mustCall()); + } +} else { + const ctx = vm.createContext({}); + for (let i = 0; i < 100; i++) { + vm.runInContext('console.log(1)', ctx, { breakOnSigint: true }); + } +} diff --git a/test/sequential/test-watch-mode-inspect.mjs b/test/sequential/test-watch-mode-inspect.mjs new file mode 100644 index 00000000000..76eb77fa265 --- /dev/null +++ b/test/sequential/test-watch-mode-inspect.mjs @@ -0,0 +1,73 @@ +import * as common from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; +import { describe, it } from 'node:test'; +import { writeFileSync, readFileSync } from 'node:fs'; +import { NodeInstance } from '../common/inspector-helper.js'; + + +if (common.isIBMi) + common.skip('IBMi does not support `fs.watch()`'); + +common.skipIfInspectorDisabled(); + +describe('watch mode - inspect', () => { + const silentLogger = { log: () => {}, error: () => {} }; + async function getDebuggedPid(instance, waitForLog = true) { + const session = await instance.connectInspectorSession(); + await session.send({ method: 'Runtime.enable' }); + if (waitForLog) { + await session.waitForConsoleOutput('log', 'safe to debug now'); + } + const { value: innerPid } = (await session.send({ + 'method': 'Runtime.evaluate', 'params': { 'expression': 'process.pid' } + })).result; + session.disconnect(); + return innerPid; + } + + it('should start debugger on inner process', async () => { + const file = fixtures.path('watch-mode/inspect.js'); + const instance = new NodeInstance(['--inspect=0', '--watch'], undefined, file, silentLogger); + let stderr = ''; + instance.on('stderr', (data) => { stderr += data; }); + + const pids = [instance.pid]; + pids.push(await getDebuggedPid(instance)); + instance.resetPort(); + writeFileSync(file, readFileSync(file)); + pids.push(await getDebuggedPid(instance)); + + await instance.kill(); + + // There should be 3 pids (one parent + 2 restarts). + // Message about Debugger should only appear twice. + assert.strictEqual(stderr.match(/Debugger listening on ws:\/\//g).length, 2); + assert.strictEqual(new Set(pids).size, 3); + }); + + it('should prevent attaching debugger with SIGUSR1 to outer process', { skip: common.isWindows }, async () => { + const file = fixtures.path('watch-mode/inspect_with_signal.js'); + const instance = new NodeInstance(['--inspect-port=0', '--watch'], undefined, file, silentLogger); + let stderr = ''; + instance.on('stderr', (data) => { stderr += data; }); + + const loggedPid = await new Promise((resolve) => { + instance.on('stdout', (data) => { + const matches = data.match(/pid is (\d+)/); + if (matches) resolve(Number(matches[1])); + }); + }); + + + process.kill(instance.pid, 'SIGUSR1'); + process.kill(loggedPid, 'SIGUSR1'); + const debuggedPid = await getDebuggedPid(instance, false); + + await instance.kill(); + + // Message about Debugger should only appear once in inner process. + assert.strictEqual(stderr.match(/Debugger listening on ws:\/\//g).length, 1); + assert.strictEqual(loggedPid, debuggedPid); + }); +}); diff --git a/test/sequential/test-watch-mode.mjs b/test/sequential/test-watch-mode.mjs new file mode 100644 index 00000000000..9baf3714477 --- /dev/null +++ b/test/sequential/test-watch-mode.mjs @@ -0,0 +1,225 @@ +import * as common from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import tmpdir from '../common/tmpdir.js'; +import assert from 'node:assert'; +import path from 'node:path'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; +import { spawn } from 'node:child_process'; +import { writeFileSync, readFileSync } from 'node:fs'; +import { inspect } from 'node:util'; +import { once } from 'node:events'; + +if (common.isIBMi) + common.skip('IBMi does not support `fs.watch()`'); + +function restart(file) { + // To avoid flakiness, we save the file repeatedly until test is done + writeFileSync(file, readFileSync(file)); + const timer = setInterval(() => writeFileSync(file, readFileSync(file)), 1000); + return () => clearInterval(timer); +} + +async function spawnWithRestarts({ + args, + file, + watchedFile = file, + restarts = 1, + isReady, +}) { + args ??= [file]; + const printedArgs = inspect(args.slice(args.indexOf(file)).join(' ')); + isReady ??= (data) => Boolean(data.match(new RegExp(`(Failed|Completed) running ${printedArgs.replace(/\\/g, '\\\\')}`, 'g'))?.length); + + let stderr = ''; + let stdout = ''; + let cancelRestarts; + + const child = spawn(execPath, ['--watch', '--no-warnings', ...args], { encoding: 'utf8' }); + child.stderr.on('data', (data) => { + stderr += data; + }); + child.stdout.on('data', async (data) => { + stdout += data; + const restartsCount = stdout.match(new RegExp(`Restarting ${printedArgs.replace(/\\/g, '\\\\')}`, 'g'))?.length ?? 0; + if (restarts === 0 || !isReady(data.toString())) { + return; + } + if (restartsCount >= restarts) { + cancelRestarts?.(); + child.kill(); + return; + } + cancelRestarts ??= restart(watchedFile); + }); + + await once(child, 'exit'); + cancelRestarts?.(); + return { stderr, stdout }; +} + +let tmpFiles = 0; +function createTmpFile(content = 'console.log("running");') { + const file = path.join(tmpdir.path, `${tmpFiles++}.js`); + writeFileSync(file, content); + return file; +} + +function assertRestartedCorrectly({ stdout, messages: { inner, completed, restarted } }) { + const lines = stdout.split(/\r?\n/).filter(Boolean); + + const start = [inner, completed, restarted].filter(Boolean); + const end = [restarted, inner, completed].filter(Boolean); + assert.deepStrictEqual(lines.slice(0, start.length), start); + assert.deepStrictEqual(lines.slice(-end.length), end); +} + +tmpdir.refresh(); + +// Warning: this suite can run safely with concurrency: true +// only if tests do not watch/depend on the same files +describe('watch mode', { concurrency: true, timeout: 60_0000 }, () => { + it('should watch changes to a file - event loop ended', async () => { + const file = createTmpFile(); + const { stderr, stdout } = await spawnWithRestarts({ file }); + + assert.strictEqual(stderr, ''); + assertRestartedCorrectly({ + stdout, + messages: { inner: 'running', completed: `Completed running ${inspect(file)}`, restarted: `Restarting ${inspect(file)}` }, + }); + }); + + it('should watch changes to a failing file', async () => { + const file = fixtures.path('watch-mode/failing.js'); + const { stderr, stdout } = await spawnWithRestarts({ file }); + + // Use match first to pretty print diff on failure + assert.match(stderr, /Error: fails\r?\n/); + // Test that failures happen once per restart + assert(stderr.match(/Error: fails\r?\n/g).length >= 2); + assertRestartedCorrectly({ + stdout, + messages: { completed: `Failed running ${inspect(file)}`, restarted: `Restarting ${inspect(file)}` }, + }); + }); + + it('should not watch when running an non-existing file', async () => { + const file = fixtures.path('watch-mode/non-existing.js'); + const { stderr, stdout } = await spawnWithRestarts({ file, restarts: 0 }); + + assert.match(stderr, /code: 'MODULE_NOT_FOUND'/); + assert.strictEqual(stdout, `Failed running ${inspect(file)}\n`); + }); + + it('should watch when running an non-existing file - when specified under --watch-path', { + skip: !common.isOSX && !common.isWindows + }, async () => { + const file = fixtures.path('watch-mode/subdir/non-existing.js'); + const watchedFile = fixtures.path('watch-mode/subdir/file.js'); + const { stderr, stdout } = await spawnWithRestarts({ + file, + watchedFile, + args: ['--watch-path', fixtures.path('./watch-mode/subdir/'), file], + }); + + assert.strictEqual(stderr, ''); + assertRestartedCorrectly({ + stdout, + messages: { completed: `Failed running ${inspect(file)}`, restarted: `Restarting ${inspect(file)}` }, + }); + }); + + it('should watch changes to a file - event loop blocked', async () => { + const file = fixtures.path('watch-mode/event_loop_blocked.js'); + const { stderr, stdout } = await spawnWithRestarts({ + file, + isReady: (data) => data.startsWith('running'), + }); + + assert.strictEqual(stderr, ''); + assertRestartedCorrectly({ + stdout, + messages: { inner: 'running', restarted: `Restarting ${inspect(file)}` }, + }); + }); + + it('should watch changes to dependencies - cjs', async () => { + const file = fixtures.path('watch-mode/dependant.js'); + const dependency = fixtures.path('watch-mode/dependency.js'); + const { stderr, stdout } = await spawnWithRestarts({ + file, + watchedFile: dependency, + }); + + assert.strictEqual(stderr, ''); + assertRestartedCorrectly({ + stdout, + messages: { inner: '{}', restarted: `Restarting ${inspect(file)}`, completed: `Completed running ${inspect(file)}` }, + }); + }); + + it('should watch changes to dependencies - esm', async () => { + const file = fixtures.path('watch-mode/dependant.mjs'); + const dependency = fixtures.path('watch-mode/dependency.mjs'); + const { stderr, stdout } = await spawnWithRestarts({ + file, + watchedFile: dependency, + }); + + assert.strictEqual(stderr, ''); + assertRestartedCorrectly({ + stdout, + messages: { inner: '{}', restarted: `Restarting ${inspect(file)}`, completed: `Completed running ${inspect(file)}` }, + }); + }); + + it('should restart multiple times', async () => { + const file = createTmpFile(); + const { stderr, stdout } = await spawnWithRestarts({ file, restarts: 3 }); + + assert.strictEqual(stderr, ''); + assert.strictEqual(stdout.match(new RegExp(`Restarting ${inspect(file).replace(/\\/g, '\\\\')}`, 'g')).length, 3); + }); + + it('should pass arguments to file', async () => { + const file = fixtures.path('watch-mode/parse_args.js'); + const random = Date.now().toString(); + const args = [file, '--random', random]; + const { stderr, stdout } = await spawnWithRestarts({ file, args }); + + assert.strictEqual(stderr, ''); + assertRestartedCorrectly({ + stdout, + messages: { inner: random, restarted: `Restarting ${inspect(args.join(' '))}`, completed: `Completed running ${inspect(args.join(' '))}` }, + }); + }); + + it('should not load --require modules in main process', async () => { + const file = createTmpFile(''); + const required = fixtures.path('watch-mode/process_exit.js'); + const args = ['--require', required, file]; + const { stderr, stdout } = await spawnWithRestarts({ file, args }); + + assert.strictEqual(stderr, ''); + assertRestartedCorrectly({ + stdout, + messages: { restarted: `Restarting ${inspect(file)}`, completed: `Completed running ${inspect(file)}` }, + }); + }); + + it('should not load --import modules in main process', { + skip: 'enable once --import is backported', + }, async () => { + const file = createTmpFile(''); + const imported = fixtures.fileURL('watch-mode/process_exit.js'); + const args = ['--import', imported, file]; + const { stderr, stdout } = await spawnWithRestarts({ file, args }); + + assert.strictEqual(stderr, ''); + assertRestartedCorrectly({ + stdout, + messages: { restarted: `Restarting ${inspect(file)}`, completed: `Completed running ${inspect(file)}` }, + }); + }); +}); diff --git a/test/sequential/test-worker-fshandles-error-on-termination.js b/test/sequential/test-worker-fshandles-error-on-termination.js new file mode 100644 index 00000000000..ada99a991bc --- /dev/null +++ b/test/sequential/test-worker-fshandles-error-on-termination.js @@ -0,0 +1,51 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const fs = require('fs/promises'); +const { scheduler } = require('timers/promises'); +const { parentPort, Worker } = require('worker_threads'); + +const MAX_ITERATIONS = 5; +const MAX_THREADS = 6; + +// Do not use isMainThread so that this test itself can be run inside a Worker. +if (!process.env.HAS_STARTED_WORKER) { + process.env.HAS_STARTED_WORKER = 1; + + function spinWorker(iter) { + const w = new Worker(__filename); + w.on('message', common.mustCall((msg) => { + assert.strictEqual(msg, 'terminate'); + w.terminate(); + })); + + w.on('exit', common.mustCall(() => { + if (iter < MAX_ITERATIONS) + spinWorker(++iter); + })); + } + + for (let i = 0; i < MAX_THREADS; i++) { + spinWorker(0); + } +} else { + async function open_nok() { + await assert.rejects( + fs.open('this file does not exist'), + { + code: 'ENOENT', + syscall: 'open' + } + ); + await scheduler.yield(); + await open_nok(); + } + + // These async function calls never return as they are meant to continually + // open nonexistent files until the worker is terminated. + open_nok(); + open_nok(); + + parentPort.postMessage('terminate'); +} diff --git a/test/sequential/test-worker-fshandles-open-close-on-termination.js b/test/sequential/test-worker-fshandles-open-close-on-termination.js new file mode 100644 index 00000000000..db7c0221fcc --- /dev/null +++ b/test/sequential/test-worker-fshandles-open-close-on-termination.js @@ -0,0 +1,46 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const fs = require('fs/promises'); +const { scheduler } = require('timers/promises'); +const { parentPort, Worker } = require('worker_threads'); + +const MAX_ITERATIONS = 5; +const MAX_THREADS = 6; + +// Do not use isMainThread so that this test itself can be run inside a Worker. +if (!process.env.HAS_STARTED_WORKER) { + process.env.HAS_STARTED_WORKER = 1; + + function spinWorker(iter) { + const w = new Worker(__filename); + w.on('message', common.mustCall((msg) => { + assert.strictEqual(msg, 'terminate'); + w.terminate(); + })); + + w.on('exit', common.mustCall(() => { + if (iter < MAX_ITERATIONS) + spinWorker(++iter); + })); + } + + for (let i = 0; i < MAX_THREADS; i++) { + spinWorker(0); + } +} else { + async function open_close() { + const fh = await fs.open(__filename); + await fh.close(); + await scheduler.yield(); + await open_close(); + } + + // These async function calls never return as they are meant to continually + // open and close files until the worker is terminated. + open_close(); + open_close(); + + parentPort.postMessage('terminate'); +} diff --git a/test/sequential/test-worker-http2-stream-terminate.js b/test/sequential/test-worker-http2-stream-terminate.js new file mode 100644 index 00000000000..370961bec27 --- /dev/null +++ b/test/sequential/test-worker-http2-stream-terminate.js @@ -0,0 +1,63 @@ +'use strict'; +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); +const assert = require('assert'); +const http2 = require('http2'); +const makeDuplexPair = require('../common/duplexpair'); +const { parentPort, Worker } = require('worker_threads'); + +// This test ensures that workers can be terminated without error while +// stream activity is ongoing, in particular the C++ function +// ReportWritesToJSStreamListener::OnStreamAfterReqFinished. + +const MAX_ITERATIONS = 5; +const MAX_THREADS = 6; + +// Do not use isMainThread so that this test itself can be run inside a Worker. +if (!process.env.HAS_STARTED_WORKER) { + process.env.HAS_STARTED_WORKER = 1; + + function spinWorker(iter) { + const w = new Worker(__filename); + w.on('message', common.mustCall((msg) => { + assert.strictEqual(msg, 'terminate'); + w.terminate(); + })); + + w.on('exit', common.mustCall(() => { + if (iter < MAX_ITERATIONS) + spinWorker(++iter); + })); + } + + for (let i = 0; i < MAX_THREADS; i++) { + spinWorker(0); + } +} else { + const server = http2.createServer(); + let i = 0; + server.on('stream', (stream, headers) => { + if (i === 1) { + parentPort.postMessage('terminate'); + } + i++; + + stream.end(''); + }); + + const { clientSide, serverSide } = makeDuplexPair(); + server.emit('connection', serverSide); + + const client = http2.connect('http://localhost:80', { + createConnection: () => clientSide, + }); + + function makeRequests() { + for (let i = 0; i < 3; i++) { + client.request().end(); + } + setImmediate(makeRequests); + } + makeRequests(); +} diff --git a/test/v8-updates/test-trace-gc-flag.js b/test/v8-updates/test-trace-gc-flag.js new file mode 100644 index 00000000000..d84e3595251 --- /dev/null +++ b/test/v8-updates/test-trace-gc-flag.js @@ -0,0 +1,40 @@ +'use strict'; + +// This test verifies that `--trace-gc` flag is well integrated. +// We'll check here, that the console outputs gc events properly. +require('../common'); + +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +const fixtures = require('../common/fixtures'); + +{ + const childProcess = spawnSync(process.execPath, [ + '--trace-gc', + '--expose-gc', + fixtures.path('gc.js'), + ]); + const output = childProcess.stdout.toString().trim(); + const lines = splitByLine(output); + + const scavengeRegex = /\bScavenge\b/; + const expectedOutput = [ + scavengeRegex, + scavengeRegex, + scavengeRegex, + scavengeRegex, + /\bMark-sweep\b/, + ]; + lines.forEach((line, index) => { + assert.match(line, expectedOutput[index]); + }); +} + +/** + * HELPERS + */ + +function splitByLine(str) { + return str.split(/\n/); +} diff --git a/test/wasi/test-wasi-initialize-validation.js b/test/wasi/test-wasi-initialize-validation.js index 40dfd864d18..6506e1ac4a7 100644 --- a/test/wasi/test-wasi-initialize-validation.js +++ b/test/wasi/test-wasi-initialize-validation.js @@ -47,7 +47,10 @@ const bufferSource = fixtures.readSync('simple.wasm'); Object.defineProperty(instance, 'exports', { get() { - return { _initialize: 5, memory: new Uint8Array() }; + return { + _initialize: 5, + memory: new WebAssembly.Memory({ initial: 1 }), + }; }, }); assert.throws( @@ -70,7 +73,7 @@ const bufferSource = fixtures.readSync('simple.wasm'); return { _start() {}, _initialize() {}, - memory: new Uint8Array(), + memory: new WebAssembly.Memory({ initial: 1 }), }; } }); @@ -97,55 +100,11 @@ const bufferSource = fixtures.readSync('simple.wasm'); () => { wasi.initialize(instance); }, { code: 'ERR_INVALID_ARG_TYPE', - message: /"instance\.exports\.memory" property must be of type object/ + message: /"instance\.exports\.memory" property must be a WebAssembly\.Memory object/ } ); } - { - // Verify that a non-ArrayBuffer memory.buffer is rejected. - const wasi = new WASI({}); - const wasm = await WebAssembly.compile(bufferSource); - const instance = await WebAssembly.instantiate(wasm); - - Object.defineProperty(instance, 'exports', { - get() { - return { - _initialize() {}, - memory: {}, - }; - } - }); - // The error message is a little white lie because any object - // with a .buffer property of type ArrayBuffer is accepted, - // but 99% of the time a WebAssembly.Memory object is used. - assert.throws( - () => { wasi.initialize(instance); }, - { - code: 'ERR_INVALID_ARG_TYPE', - message: /"instance\.exports\.memory\.buffer" property must be an WebAssembly\.Memory/ - } - ); - } - - { - // Verify that an argument that duck-types as a WebAssembly.Instance - // is accepted. - const wasi = new WASI({}); - const wasm = await WebAssembly.compile(bufferSource); - const instance = await WebAssembly.instantiate(wasm); - - Object.defineProperty(instance, 'exports', { - get() { - return { - _initialize() {}, - memory: { buffer: new ArrayBuffer(0) }, - }; - } - }); - wasi.initialize(instance); - } - { // Verify that a WebAssembly.Instance from another VM context is accepted. const wasi = new WASI({}); diff --git a/test/wasi/test-wasi-start-validation.js b/test/wasi/test-wasi-start-validation.js index 2059ff081e8..016479f412f 100644 --- a/test/wasi/test-wasi-start-validation.js +++ b/test/wasi/test-wasi-start-validation.js @@ -47,7 +47,7 @@ const bufferSource = fixtures.readSync('simple.wasm'); Object.defineProperty(instance, 'exports', { get() { - return { memory: new Uint8Array() }; + return { memory: new WebAssembly.Memory({ initial: 1 }) }; }, }); assert.throws( @@ -70,7 +70,7 @@ const bufferSource = fixtures.readSync('simple.wasm'); return { _start() {}, _initialize() {}, - memory: new Uint8Array(), + memory: new WebAssembly.Memory({ initial: 1 }), }; } }); @@ -97,55 +97,11 @@ const bufferSource = fixtures.readSync('simple.wasm'); () => { wasi.start(instance); }, { code: 'ERR_INVALID_ARG_TYPE', - message: /"instance\.exports\.memory" property must be of type object/ + message: /"instance\.exports\.memory" property must be a WebAssembly\.Memory object/ } ); } - { - // Verify that a non-ArrayBuffer memory.buffer is rejected. - const wasi = new WASI({}); - const wasm = await WebAssembly.compile(bufferSource); - const instance = await WebAssembly.instantiate(wasm); - - Object.defineProperty(instance, 'exports', { - get() { - return { - _start() {}, - memory: {}, - }; - } - }); - // The error message is a little white lie because any object - // with a .buffer property of type ArrayBuffer is accepted, - // but 99% of the time a WebAssembly.Memory object is used. - assert.throws( - () => { wasi.start(instance); }, - { - code: 'ERR_INVALID_ARG_TYPE', - message: /"instance\.exports\.memory\.buffer" property must be an WebAssembly\.Memory/ - } - ); - } - - { - // Verify that an argument that duck-types as a WebAssembly.Instance - // is accepted. - const wasi = new WASI({}); - const wasm = await WebAssembly.compile(bufferSource); - const instance = await WebAssembly.instantiate(wasm); - - Object.defineProperty(instance, 'exports', { - get() { - return { - _start() {}, - memory: { buffer: new ArrayBuffer(0) }, - }; - } - }); - wasi.start(instance); - } - { // Verify that a WebAssembly.Instance from another VM context is accepted. const wasi = new WASI({}); diff --git a/test/wpt/README.md b/test/wpt/README.md index b8ded27ef37..39f59d44060 100644 --- a/test/wpt/README.md +++ b/test/wpt/README.md @@ -91,7 +91,11 @@ add this to `test/wpt/status/url.json`: ```json "url-searchparams.any.js": { - "fail": "explain why the test fails, ideally with links" + "fail": { + "expected": [ + "test name in the WPT test case, e.g. second argument passed to test()" + ] + } } ``` @@ -155,8 +159,17 @@ expected failures. // Optional: the test will be skipped with the reason printed "skip": "explain why we cannot run a test that's supposed to pass", - // Optional: the test will be skipped with the reason printed - "fail": "explain why we the test is expected to fail" + // Optional: failing tests + "fail": { + "note": "You may leave an optional arbitrary note e.g. with TODOs", + "expected": [ + "test name in the WPT test case, e.g. second argument passed to test()", + "another test name" + ], + "flaky": [ + "flaky test name" + ] + } } } ``` @@ -167,4 +180,4 @@ In that case it needs to be marked with `skip` instead of `fail`. [Web Platform Tests]: https://github.com/web-platform-tests/wpt [`test/fixtures/wpt/README.md`]: ../fixtures/wpt/README.md -[git node wpt]: https://github.com/nodejs/node-core-utils/blob/master/docs/git-node.md#git-node-wpt +[git node wpt]: https://github.com/nodejs/node-core-utils/blob/HEAD/docs/git-node.md#git-node-wpt diff --git a/test/wpt/status/FileAPI/blob.json b/test/wpt/status/FileAPI/blob.json index 64163961e04..902ac232dd4 100644 --- a/test/wpt/status/FileAPI/blob.json +++ b/test/wpt/status/FileAPI/blob.json @@ -1,14 +1,47 @@ { - "Blob-constructor.any.js": { - "skip": "Depends on File API" - }, "Blob-constructor-dom.window.js": { "skip": "Depends on DOM API" }, - "Blob-slice.any.js": { - "skip": "Depends on File API" + "Blob-constructor.any.js": { + "fail": { + "note": "Depends on File API", + "expected": [ + "A plain object with @@iterator should be treated as a sequence for the blobParts argument.", + "A plain object with @@iterator and a length property should be treated as a sequence for the blobParts argument.", + "A String object should be treated as a sequence for the blobParts argument.", + "A Uint8Array object should be treated as a sequence for the blobParts argument.", + "Getters and value conversions should happen in order until an exception is thrown.", + "Changes to the blobParts array should be reflected in the returned Blob (pop).", + "Changes to the blobParts array should be reflected in the returned Blob (unshift).", + "ToString should be called on elements of the blobParts array.", + "ArrayBuffer elements of the blobParts array should be supported.", + "Passing typed arrays as elements of the blobParts array should work.", + "Passing a Float64Array as element of the blobParts array should work.", + "Array with two blobs", + "Array with two buffers", + "Array with two bufferviews", + "Array with mixed types", + "options properties should be accessed in lexicographic order.", + "Arguments should be evaluated from left to right.", + "Passing null (index 0) for options should use the defaults.", + "Passing null (index 0) for options should use the defaults (with newlines).", + "Passing undefined (index 1) for options should use the defaults.", + "Passing undefined (index 1) for options should use the defaults (with newlines).", + "Passing object \"[object Object]\" (index 2) for options should use the defaults.", + "Passing object \"[object Object]\" (index 2) for options should use the defaults (with newlines).", + "Passing object \"[object Object]\" (index 3) for options should use the defaults.", + "Passing object \"[object Object]\" (index 3) for options should use the defaults (with newlines).", + "Passing object \"/regex/\" (index 4) for options should use the defaults.", + "Passing object \"/regex/\" (index 4) for options should use the defaults (with newlines).", + "Passing function \"function() {}\" (index 5) for options should use the defaults.", + "Passing function \"function() {}\" (index 5) for options should use the defaults (with newlines)." + ] + } }, "Blob-in-worker.worker.js": { "skip": "Depends on Web Workers API" + }, + "Blob-slice.any.js": { + "skip": "Depends on File API" } } diff --git a/test/wpt/status/WebCryptoAPI.json b/test/wpt/status/WebCryptoAPI.json index 0f8489c871f..68360c9af2b 100644 --- a/test/wpt/status/WebCryptoAPI.json +++ b/test/wpt/status/WebCryptoAPI.json @@ -1,90 +1,28 @@ { - "derive_bits_keys/ecdh_bits.https.any.js": { - "fail": "Derived correct bits expected true got false" - }, - "derive_bits_keys/hkdf.https.any.js": { - "fail": "location is not defined" - }, - "derive_bits_keys/pbkdf2.https.any.js": { - "fail": "location is not defined" - }, - "digest/digest.https.any.js": { - "fail": "Expected NotSupportedError but got TypeError" - }, - "encrypt_decrypt/aes_cbc.https.any.js": { - "fail": "Expected OperationError but got Error" - }, - "encrypt_decrypt/rsa_oaep.https.any.js": { - "fail": "Expected OperationError but got Error" - }, - "generateKey/failures_AES-CBC.https.any.js": { - "fail": "Expected OperationError but got TypeError" - }, - "generateKey/failures_AES-CTR.https.any.js": { - "fail": "Expected OperationError but got TypeError" - }, - "generateKey/failures_AES-GCM.https.any.js": { - "fail": "Expected OperationError but got TypeError" - }, - "generateKey/failures_AES-KW.https.any.js": { - "fail": "Expected OperationError but got TypeError" - }, - "generateKey/failures_ECDH.https.any.js": { - "fail": "Expected NotSupportedError but got TypeError" - }, - "generateKey/failures_ECDSA.https.any.js": { - "fail": "Expected NotSupportedError but got TypeError" - }, - "generateKey/failures_HMAC.https.any.js": { - "fail": "Operation succeeded, but should not have Reached unreachable code" - }, - "generateKey/failures_RSA-OAEP.https.any.js": { - "fail": "Operation succeeded, but should not have Reached unreachable code" - }, - "generateKey/failures_RSA-PSS.https.any.js": { - "fail": "Operation succeeded, but should not have Reached unreachable code" - }, - "generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js": { - "fail": "Operation succeeded, but should not have Reached unreachable code" - }, - "generateKey/successes_AES-CBC.https.any.js": { - "fail": "location is not defined" - }, - "generateKey/successes_AES-CTR.https.any.js": { - "fail": "location is not defined" - }, - "generateKey/successes_AES-GCM.https.any.js": { - "fail": "location is not defined" - }, - "generateKey/successes_AES-KW.https.any.js": { - "fail": "location is not defined" - }, - "generateKey/successes_ECDH.https.any.js": { - "fail": "location is not defined" - }, - "generateKey/successes_ECDSA.https.any.js": { - "fail": "location is not defined" - }, - "generateKey/successes_HMAC.https.any.js": { - "fail": "location is not defined" - }, - "generateKey/successes_RSA-OAEP.https.any.js": { - "fail": "location is not defined" - }, - "generateKey/successes_RSA-PSS.https.any.js": { - "fail": "location is not defined" - }, - "generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js": { - "fail": "location is not defined" + "algorithm-discards-context.https.window.js": { + "skip": "Not relevant in Node.js context" }, "getRandomValues.any.js": { - "fail": "The data argument must be an integer-type TypedArray" + "fail": { + "expected": [ + "Float arrays", + "Large length: Int8Array", + "Large length: Int16Array", + "Large length: Int32Array", + "Large length: BigInt64Array", + "Large length: Uint8Array", + "Large length: Uint8ClampedArray", + "Large length: Uint16Array", + "Large length: Uint32Array", + "Large length: BigUint64Array", + "DataView" + ] + } }, "historical.any.js": { - "fail": "expected (undefined) undefined but got..." + "skip": "Not relevant in Node.js context" }, "idlharness.https.any.js": { - "fail": "Various non-IDL-compliant things" + "skip": "Various non-IDL-compliant things" } } - diff --git a/test/wpt/status/console.json b/test/wpt/status/console.json index d611638b924..7f8af86a083 100644 --- a/test/wpt/status/console.json +++ b/test/wpt/status/console.json @@ -1,5 +1,11 @@ { "idlharness.any.js": { - "fail": ".table, .dir and .timeLog parameter lengths are wrong" + "fail": { + "flaky": [ + "console namespace: operation assert(optional boolean, any...)", + "console namespace: operation table(optional any, optional sequence)", + "console namespace: operation dir(optional any, optional object?)" + ] + } } } diff --git a/test/wpt/status/dom/events.json b/test/wpt/status/dom/events.json new file mode 100644 index 00000000000..012b73f7000 --- /dev/null +++ b/test/wpt/status/dom/events.json @@ -0,0 +1,51 @@ +{ + "AddEventListenerOptions-passive.any.js": { + "fail": { + "expected": [ + "preventDefault should be ignored if-and-only-if the passive option is true", + "returnValue should be ignored if-and-only-if the passive option is true", + "passive behavior of one listener should be unaffected by the presence of other listeners" + ] + } + }, + "AddEventListenerOptions-signal.any.js": { + "fail": { + "expected": [ + "Passing null as the signal should throw", + "Passing null as the signal should throw (listener is also null)" + ] + } + }, + "Event-constructors.any.js": { + "fail": { + "expected": [ + "Untitled 2", + "Untitled 3" + ] + } + }, + "Event-dispatch-listener-order.window.js": { + "skip": "document is not defined" + }, + "EventListener-addEventListener.sub.window.js": { + "skip": "document is not defined" + }, + "EventTarget-removeEventListener.any.js": { + "skip": "globalThis.removeEventListener is not a function" + }, + "event-global-extra.window.js": { + "skip": "document is not defined" + }, + "event-global-set-before-handleEvent-lookup.window.js": { + "skip": "window is not defined" + }, + "event-global.worker.js": { + "skip": "importScripts is not defined" + }, + "legacy-pre-activation-behavior.window.js": { + "skip": "document is not defined" + }, + "relatedTarget.window.js": { + "skip": "document is not defined" + } +} diff --git a/test/wpt/status/encoding.json b/test/wpt/status/encoding.json index 88373a1ee38..fd05cebec9d 100644 --- a/test/wpt/status/encoding.json +++ b/test/wpt/status/encoding.json @@ -15,33 +15,32 @@ "requires": ["small-icu"] }, "textdecoder-streaming.any.js": { - "requires": ["small-icu"], - "fail": "WebAssembly.Memory does not support shared:true" + "requires": ["small-icu"] }, "textdecoder-utf16-surrogates.any.js": { "requires": ["small-icu"] }, "iso-2022-jp-decoder.any.js": { "requires": ["full-icu"], - "fail": "iso-2022-jp decoder state handling bug: https://encoding.spec.whatwg.org/#iso-2022-jp-decoder" + "skip": "iso-2022-jp decoder state handling bug: https://encoding.spec.whatwg.org/#iso-2022-jp-decoder" }, "textdecoder-byte-order-marks.any.js": { "requires": ["small-icu"] }, "textdecoder-fatal-single-byte.any.js": { "requires": ["full-icu"], - "fail": "The iso-8859-16 encoding is not supported" + "skip": "The iso-8859-16 encoding is not supported" }, "textdecoder-labels.any.js": { "requires": ["full-icu"], - "fail": "The iso-8859-16 encoding is not supported" + "skip": "The iso-8859-16 encoding is not supported" }, "textencoder-constructor-non-utf.any.js": { "requires": ["full-icu"], - "fail": "The iso-8859-16 encoding is not supported" + "skip": "The iso-8859-16 encoding is not supported" }, "idlharness.any.js": { - "fail": "No implementation of TextDecoderStream and TextEncoderStream" + "skip": "No implementation of TextDecoderStream and TextEncoderStream" }, "replacement-encodings.any.js": { "skip": "decoding-helpers.js needs XMLHttpRequest" @@ -50,13 +49,13 @@ "skip": "decoding-helpers.js needs XMLHttpRequest" }, "streams/*.js": { - "fail": "No implementation of TextDecoderStream and TextEncoderStream" + "skip": "No implementation of TextDecoderStream and TextEncoderStream" }, "encodeInto.any.js": { - "fail": "WebAssembly.Memory does not support shared:true" + "requires": ["small-icu"] }, "textdecoder-copy.any.js": { - "fail": "WebAssembly.Memory does not support shared:true" + "requires": ["small-icu"] }, "legacy-mb-schinese/gbk/gbk-decoder.any.js": { "requires": ["full-icu"], @@ -67,6 +66,12 @@ "skip": "The gb18030 encoding is not supported" }, "textdecoder-arguments.any.js": { - "fail": "Does not support flushing an incomplete sequence" + "requires": ["small-icu"] + }, + "single-byte-decoder.window.js": { + "skip": "location is not defined" + }, + "textdecoder-eof.any.js": { + "requires": ["small-icu"] } } diff --git a/test/wpt/status/hr-time.json b/test/wpt/status/hr-time.json index cb9f26a2ebc..b23a5a4e96a 100644 --- a/test/wpt/status/hr-time.json +++ b/test/wpt/status/hr-time.json @@ -3,6 +3,6 @@ "skip": "TODO: update IDL parser" }, "window-worker-timeOrigin.window.js": { - "fail": "depends on URL.createObjectURL(blob)" + "skip": "depends on URL.createObjectURL(blob)" } } diff --git a/test/wpt/status/html/webappapis/atob.json b/test/wpt/status/html/webappapis/atob.json index 65deda7312d..67345db2630 100644 --- a/test/wpt/status/html/webappapis/atob.json +++ b/test/wpt/status/html/webappapis/atob.json @@ -1,5 +1,5 @@ { "base64.any.js": { - "fail": "promise_test: Unhandled rejection with value: object \"Error: ENOENT: no such file or directory, open '/root/node/node/fetch/data-urls/resources/base64.json'\"" + "skip": "no such file or directory fetch/data-urls/resources/base64.json" } } diff --git a/test/wpt/status/html/webappapis/microtask-queuing.json b/test/wpt/status/html/webappapis/microtask-queuing.json index dc13452b991..99f9c623c7f 100644 --- a/test/wpt/status/html/webappapis/microtask-queuing.json +++ b/test/wpt/status/html/webappapis/microtask-queuing.json @@ -1,8 +1,8 @@ { "queue-microtask-exceptions.any.js": { - "fail": "Node.js does not have a global addEventListener function" + "skip": "Node.js does not have a global addEventListener function" }, "queue-microtask.window.js": { - "fail": "MutationObserver is not implemented" + "skip": "MutationObserver is not implemented" } } diff --git a/test/wpt/status/html/webappapis/timers.json b/test/wpt/status/html/webappapis/timers.json index 62476f7f106..21e77a089d5 100644 --- a/test/wpt/status/html/webappapis/timers.json +++ b/test/wpt/status/html/webappapis/timers.json @@ -1,5 +1,5 @@ { "negative-settimeout.any.js": { - "fail": "unreliable in Node.js; Refs: https://github.com/nodejs/node/issues/37672" + "skip": "unreliable in Node.js; Refs: https://github.com/nodejs/node/issues/37672" } } diff --git a/test/wpt/status/performance-timeline.json b/test/wpt/status/performance-timeline.json index 6c845c681ae..207f2287746 100644 --- a/test/wpt/status/performance-timeline.json +++ b/test/wpt/status/performance-timeline.json @@ -1,6 +1,12 @@ { "case-sensitivity.any.js": { - "fail": "resource entry type not supported" + "fail": { + "note": "resource entry type not supported", + "expected": [ + "getEntriesByType values are case sensitive", + "getEntriesByName values are case sensitive" + ] + } }, "idlharness.any.js": { "skip": "idlharness cannot recognize Node.js environment" diff --git a/test/wpt/status/streams.json b/test/wpt/status/streams.json index c1b80d69dd8..b4f9c4b66c4 100644 --- a/test/wpt/status/streams.json +++ b/test/wpt/status/streams.json @@ -6,6 +6,13 @@ "skip": "Browser-specific test" }, "readable-byte-streams/bad-buffers-and-views.any.js": { - "fail": "TODO: implement detached ArrayBuffer support" + "fail": { + "note": "TODO: implement detached ArrayBuffer support", + "expected": [ + "ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer has been detached (in the readable state)", + "ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer has been detached (in the closed state)", + "ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer is zero-length (in the readable state)" + ] + } } } diff --git a/test/wpt/status/url.json b/test/wpt/status/url.json index 812f7a9ffce..9416d6aabfe 100644 --- a/test/wpt/status/url.json +++ b/test/wpt/status/url.json @@ -10,10 +10,7 @@ "requires": ["small-icu"] }, "urlencoded-parser.any.js": { - "fail": "missing Request and Response" - }, - "urlsearchparams-constructor.any.js": { - "fail": "FormData is not defined" + "skip": "missing Request and Response" }, "url-constructor.any.js": { "requires": ["small-icu"] @@ -28,6 +25,6 @@ "skip": "already tested in url-setters.any.js" }, "idlharness.any.js": { - "fail": "Fixed in a semver-major change: https://github.com/nodejs/node/pull/39752" + "skip": "Fixed in a semver-major change: https://github.com/nodejs/node/pull/39752" } } diff --git a/test/wpt/status/webidl/ecmascript-binding/es-exceptions.json b/test/wpt/status/webidl/ecmascript-binding/es-exceptions.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/test/wpt/status/webidl/ecmascript-binding/es-exceptions.json @@ -0,0 +1 @@ +{} diff --git a/test/wpt/status/webmessaging/broadcastchannel.json b/test/wpt/status/webmessaging/broadcastchannel.json index 1cc693407a2..ce909d0a570 100644 --- a/test/wpt/status/webmessaging/broadcastchannel.json +++ b/test/wpt/status/webmessaging/broadcastchannel.json @@ -1,25 +1,28 @@ { "basics.any.js": { "fail": { - "unexpected": [ - "assert_equals: origin expected \"https://example.com\" but got \"\"", - "assert_equals: target for event 0 expected object \"[object EventTarget]\" but got object \"[object EventTarget]\"" + "expected": [ + "postMessage results in correct event", + "messages are delivered in port creation order" + ], + "flaky": [ + "Closing a channel in onmessage prevents already queued tasks from firing onmessage events" ] } }, "interface.any.js": { "fail": { - "unexpected": [ - "assert_throws_dom: function \"() => c.postMessage('')\" threw object \"Error: BroadcastChannel is closed.\" that is not a DOMException InvalidStateError: property \"code\" is equal to 0, expected 11", - "assert_not_equals: got disallowed value undefined", - "assert_throws_dom: function \"() => c.postMessage(new Symbol())\" threw object \"Error: BroadcastChannel is closed.\" that is not a DOMException InvalidStateError: property \"code\" is equal to 0, expected 11" + "expected": [ + "postMessage after close should throw", + "postMessage should throw InvalidStateError after close, even with uncloneable data", + "postMessage should throw with uncloneable data" ] } }, "origin.window.js": { "fail": { "expected": [ - "document is not defined" + "Serialization of BroadcastChannel origin" ] } } diff --git a/test/wpt/test-domexception.js b/test/wpt/test-domexception.js new file mode 100644 index 00000000000..09018a25ac5 --- /dev/null +++ b/test/wpt/test-domexception.js @@ -0,0 +1,19 @@ +'use strict'; + +require('../common'); +const { WPTRunner } = require('../common/wpt'); + +const runner = new WPTRunner('webidl/ecmascript-binding/es-exceptions'); + +runner.setFlags(['--expose-internals']); +runner.setInitScript(` + const { internalBinding } = require('internal/test/binding'); + const { DOMException } = internalBinding('messaging'); + Object.defineProperty(global, 'DOMException', { + writable: true, + configurable: true, + value: DOMException, + }); +`); + +runner.runJsTests(); diff --git a/test/wpt/test-events.js b/test/wpt/test-events.js new file mode 100644 index 00000000000..6d4a4cff2d9 --- /dev/null +++ b/test/wpt/test-events.js @@ -0,0 +1,9 @@ +'use strict'; +require('../common'); +const { WPTRunner } = require('../common/wpt'); + +const runner = new WPTRunner('dom/events'); + +runner.setFlags(['--experimental-global-customevent']); + +runner.runJsTests(); diff --git a/test/wpt/test-webcrypto.js b/test/wpt/test-webcrypto.js index c1ee6402c5a..f90ffa9ad53 100644 --- a/test/wpt/test-webcrypto.js +++ b/test/wpt/test-webcrypto.js @@ -11,4 +11,8 @@ const runner = new WPTRunner('WebCryptoAPI'); // Set Node.js flags required for the tests. runner.setFlags(['--experimental-global-webcrypto']); +runner.setInitScript(` + global.location = {}; +`); + runner.runJsTests(); diff --git a/tools/.eslintrc.yaml b/tools/.eslintrc.yaml index de30cf6d123..d9a7929836d 100644 --- a/tools/.eslintrc.yaml +++ b/tools/.eslintrc.yaml @@ -12,4 +12,3 @@ rules: - error - args: after-used prefer-arrow-callback: error - no-var: error diff --git a/tools/actions/commit-queue.sh b/tools/actions/commit-queue.sh index 16fbc7f2ef1..0df819e47ee 100755 --- a/tools/actions/commit-queue.sh +++ b/tools/actions/commit-queue.sh @@ -7,7 +7,7 @@ REPOSITORY=$2 shift 2 UPSTREAM=origin -DEFAULT_BRANCH=master +DEFAULT_BRANCH=main COMMIT_QUEUE_LABEL="commit-queue" COMMIT_QUEUE_FAILED_LABEL="commit-queue-failed" @@ -40,7 +40,7 @@ for pr in "$@"; do fi # Skip PR if CI is still running - if ncu-ci url "https://github.com/${OWNER}/${REPOSITORY}/pull/${pr}" 2>&1 | grep "^Result *PENDING"; then + if gh pr checks "$pr" | grep -q "\spending\s"; then echo "pr ${pr} skipped, CI still running" continue fi @@ -86,7 +86,7 @@ for pr in "$@"; do commit_title=$(git log -1 --pretty='format:%s') commit_body=$(git log -1 --pretty='format:%b') commit_head=$(grep 'Fetched commits as' output | cut -d. -f3 | xargs git rev-parse) - + jq -n \ --arg title "${commit_title}" \ --arg body "${commit_body}" \ diff --git a/tools/build-addons.js b/tools/build-addons.js deleted file mode 100644 index 1d4bcbc9179..00000000000 --- a/tools/build-addons.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -// Usage: e.g. node build-addons.js - -const child_process = require('child_process'); -const path = require('path'); -const fs = require('fs').promises; -const util = require('util'); - -const execFile = util.promisify(child_process.execFile); - -const parallelization = +process.env.JOBS || require('os').cpus().length; -const nodeGyp = process.argv[2]; - -async function runner(directoryQueue) { - if (directoryQueue.length === 0) - return; - - const dir = directoryQueue.shift(); - const next = () => runner(directoryQueue); - - try { - // Only run for directories that have a `binding.gyp`. - // (https://github.com/nodejs/node/issues/14843) - await fs.stat(path.join(dir, 'binding.gyp')); - } catch (err) { - if (err.code === 'ENOENT' || err.code === 'ENOTDIR') - return next(); - throw err; - } - - console.log(`Building addon in ${dir}`); - const { stdout, stderr } = - await execFile(process.execPath, [nodeGyp, 'rebuild', `--directory=${dir}`], - { - stdio: 'inherit', - env: { ...process.env, MAKEFLAGS: '-j1' } - }); - - // We buffer the output and print it out once the process is done in order - // to avoid interleaved output from multiple builds running at once. - process.stdout.write(stdout); - process.stderr.write(stderr); - - return next(); -} - -async function main(directory) { - const directoryQueue = (await fs.readdir(directory)) - .map((subdir) => path.join(directory, subdir)); - - const runners = []; - for (let i = 0; i < parallelization; ++i) - runners.push(runner(directoryQueue)); - return Promise.all(runners); -} - -main(process.argv[3]).catch((err) => setImmediate(() => { throw err; })); diff --git a/tools/build-addons.mjs b/tools/build-addons.mjs new file mode 100755 index 00000000000..9f757bd798b --- /dev/null +++ b/tools/build-addons.mjs @@ -0,0 +1,63 @@ +#!/usr/bin/env node + +// Usage: e.g. node build-addons.mjs + +import child_process from 'node:child_process'; +import path from 'node:path'; +import fs from 'node:fs/promises'; +import util from 'node:util'; +import process from 'node:process'; +import os from 'node:os'; + +const execFile = util.promisify(child_process.execFile); + +const parallelization = +process.env.JOBS || os.cpus().length; +const nodeGyp = process.argv[2]; +const directory = process.argv[3]; + +async function buildAddon(dir) { + try { + // Only run for directories that have a `binding.gyp`. + // (https://github.com/nodejs/node/issues/14843) + await fs.stat(path.join(dir, 'binding.gyp')); + } catch (err) { + if (err.code === 'ENOENT' || err.code === 'ENOTDIR') + return; + throw err; + } + + console.log(`Building addon in ${dir}`); + const { stdout, stderr } = + await execFile(process.execPath, [nodeGyp, 'rebuild', `--directory=${dir}`], + { + stdio: 'inherit', + env: { ...process.env, MAKEFLAGS: '-j1' } + }); + + // We buffer the output and print it out once the process is done in order + // to avoid interleaved output from multiple builds running at once. + process.stdout.write(stdout); + process.stderr.write(stderr); +} + +async function parallel(jobQueue, limit) { + const next = async () => { + if (jobQueue.length === 0) { + return; + } + const job = jobQueue.shift(); + await job(); + await next(); + }; + + const workerCnt = Math.min(limit, jobQueue.length); + await Promise.all(Array.from({ length: workerCnt }, next)); +} + +const jobs = []; +for await (const dirent of await fs.opendir(directory)) { + if (dirent.isDirectory()) { + jobs.push(() => buildAddon(path.join(directory, dirent.name))); + } +} +await parallel(jobs, parallelization); diff --git a/tools/certdata.txt b/tools/certdata.txt index dfaeceb89ac..7c5e55ff5b4 100644 --- a/tools/certdata.txt +++ b/tools/certdata.txt @@ -79,7 +79,7 @@ CKA_LABEL UTF8 "Mozilla Builtin Roots" # Subject: CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE # Not Valid Before: Tue Sep 01 12:00:00 1998 # Not Valid After : Fri Jan 28 12:00:00 2028 -# Fingerprint (MD5): 3E:45:52:15:09:51:92:E1:B7:5D:37:9F:B1:87:29:8A +# Fingerprint (SHA-256): EB:D4:10:40:E4:BB:3E:C7:42:C9:E3:81:D3:1E:F2:A4:1A:48:B6:68:5C:96:E7:CE:F3:C1:DF:6C:D4:33:1C:99 # Fingerprint (SHA1): B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -169,13 +169,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "GlobalSign Root CA" +# Trust for "GlobalSign Root CA" # Issuer: CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE # Serial Number:04:00:00:00:00:01:15:4b:5a:c3:94 # Subject: CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE # Not Valid Before: Tue Sep 01 12:00:00 1998 # Not Valid After : Fri Jan 28 12:00:00 2028 -# Fingerprint (MD5): 3E:45:52:15:09:51:92:E1:B7:5D:37:9F:B1:87:29:8A +# Fingerprint (SHA-256): EB:D4:10:40:E4:BB:3E:C7:42:C9:E3:81:D3:1E:F2:A4:1A:48:B6:68:5C:96:E7:CE:F3:C1:DF:6C:D4:33:1C:99 # Fingerprint (SHA1): B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -205,141 +205,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "GlobalSign Root CA - R2" -# -# Issuer: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R2 -# Serial Number:04:00:00:00:00:01:0f:86:26:e6:0d -# Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R2 -# Not Valid Before: Fri Dec 15 08:00:00 2006 -# Not Valid After : Wed Dec 15 08:00:00 2021 -# Fingerprint (MD5): 94:14:77:7E:3E:5E:FD:8F:30:BD:41:B0:CF:E7:D0:30 -# Fingerprint (SHA1): 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign Root CA - R2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\114\061\040\060\036\006\003\125\004\013\023\027\107\154\157 -\142\141\154\123\151\147\156\040\122\157\157\164\040\103\101\040 -\055\040\122\062\061\023\060\021\006\003\125\004\012\023\012\107 -\154\157\142\141\154\123\151\147\156\061\023\060\021\006\003\125 -\004\003\023\012\107\154\157\142\141\154\123\151\147\156 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\114\061\040\060\036\006\003\125\004\013\023\027\107\154\157 -\142\141\154\123\151\147\156\040\122\157\157\164\040\103\101\040 -\055\040\122\062\061\023\060\021\006\003\125\004\012\023\012\107 -\154\157\142\141\154\123\151\147\156\061\023\060\021\006\003\125 -\004\003\023\012\107\154\157\142\141\154\123\151\147\156 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\013\004\000\000\000\000\001\017\206\046\346\015 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\272\060\202\002\242\240\003\002\001\002\002\013\004 -\000\000\000\000\001\017\206\046\346\015\060\015\006\011\052\206 -\110\206\367\015\001\001\005\005\000\060\114\061\040\060\036\006 -\003\125\004\013\023\027\107\154\157\142\141\154\123\151\147\156 -\040\122\157\157\164\040\103\101\040\055\040\122\062\061\023\060 -\021\006\003\125\004\012\023\012\107\154\157\142\141\154\123\151 -\147\156\061\023\060\021\006\003\125\004\003\023\012\107\154\157 -\142\141\154\123\151\147\156\060\036\027\015\060\066\061\062\061 -\065\060\070\060\060\060\060\132\027\015\062\061\061\062\061\065 -\060\070\060\060\060\060\132\060\114\061\040\060\036\006\003\125 -\004\013\023\027\107\154\157\142\141\154\123\151\147\156\040\122 -\157\157\164\040\103\101\040\055\040\122\062\061\023\060\021\006 -\003\125\004\012\023\012\107\154\157\142\141\154\123\151\147\156 -\061\023\060\021\006\003\125\004\003\023\012\107\154\157\142\141 -\154\123\151\147\156\060\202\001\042\060\015\006\011\052\206\110 -\206\367\015\001\001\001\005\000\003\202\001\017\000\060\202\001 -\012\002\202\001\001\000\246\317\044\016\276\056\157\050\231\105 -\102\304\253\076\041\124\233\013\323\177\204\160\372\022\263\313 -\277\207\137\306\177\206\323\262\060\134\326\375\255\361\173\334 -\345\370\140\226\011\222\020\365\320\123\336\373\173\176\163\210 -\254\122\210\173\112\246\312\111\246\136\250\247\214\132\021\274 -\172\202\353\276\214\351\263\254\226\045\007\227\112\231\052\007 -\057\264\036\167\277\212\017\265\002\174\033\226\270\305\271\072 -\054\274\326\022\271\353\131\175\342\320\006\206\137\136\111\152 -\265\071\136\210\064\354\274\170\014\010\230\204\154\250\315\113 -\264\240\175\014\171\115\360\270\055\313\041\312\325\154\133\175 -\341\240\051\204\241\371\323\224\111\313\044\142\221\040\274\335 -\013\325\331\314\371\352\047\012\053\163\221\306\235\033\254\310 -\313\350\340\240\364\057\220\213\115\373\260\066\033\366\031\172 -\205\340\155\362\141\023\210\134\237\340\223\012\121\227\212\132 -\316\257\253\325\367\252\011\252\140\275\334\331\137\337\162\251 -\140\023\136\000\001\311\112\372\077\244\352\007\003\041\002\216 -\202\312\003\302\233\217\002\003\001\000\001\243\201\234\060\201 -\231\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001 -\006\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001 -\001\377\060\035\006\003\125\035\016\004\026\004\024\233\342\007 -\127\147\034\036\300\152\006\336\131\264\232\055\337\334\031\206 -\056\060\066\006\003\125\035\037\004\057\060\055\060\053\240\051 -\240\047\206\045\150\164\164\160\072\057\057\143\162\154\056\147 -\154\157\142\141\154\163\151\147\156\056\156\145\164\057\162\157 -\157\164\055\162\062\056\143\162\154\060\037\006\003\125\035\043 -\004\030\060\026\200\024\233\342\007\127\147\034\036\300\152\006 -\336\131\264\232\055\337\334\031\206\056\060\015\006\011\052\206 -\110\206\367\015\001\001\005\005\000\003\202\001\001\000\231\201 -\123\207\034\150\227\206\221\354\340\112\270\104\013\253\201\254 -\047\117\326\301\270\034\103\170\263\014\232\374\352\054\074\156 -\141\033\115\113\051\365\237\005\035\046\301\270\351\203\000\142 -\105\266\251\010\223\271\251\063\113\030\232\302\370\207\210\116 -\333\335\161\064\032\301\124\332\106\077\340\323\052\253\155\124 -\042\365\072\142\315\040\157\272\051\211\327\335\221\356\323\134 -\242\076\241\133\101\365\337\345\144\103\055\351\325\071\253\322 -\242\337\267\213\320\300\200\031\034\105\300\055\214\350\370\055 -\244\164\126\111\305\005\265\117\025\336\156\104\170\071\207\250 -\176\273\363\171\030\221\273\364\157\235\301\360\214\065\214\135 -\001\373\303\155\271\357\104\155\171\106\061\176\012\376\251\202 -\301\377\357\253\156\040\304\120\311\137\235\115\233\027\214\014 -\345\001\311\240\101\152\163\123\372\245\120\264\156\045\017\373 -\114\030\364\375\122\331\216\151\261\350\021\017\336\210\330\373 -\035\111\367\252\336\225\317\040\170\302\140\022\333\045\100\214 -\152\374\176\102\070\100\144\022\367\236\201\341\223\056 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for Certificate "GlobalSign Root CA - R2" -# Issuer: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R2 -# Serial Number:04:00:00:00:00:01:0f:86:26:e6:0d -# Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R2 -# Not Valid Before: Fri Dec 15 08:00:00 2006 -# Not Valid After : Wed Dec 15 08:00:00 2021 -# Fingerprint (MD5): 94:14:77:7E:3E:5E:FD:8F:30:BD:41:B0:CF:E7:D0:30 -# Fingerprint (SHA1): 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign Root CA - R2" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\165\340\253\266\023\205\022\047\034\004\370\137\335\336\070\344 -\267\044\056\376 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\224\024\167\176\076\136\375\217\060\275\101\260\317\347\320\060 -END -CKA_ISSUER MULTILINE_OCTAL -\060\114\061\040\060\036\006\003\125\004\013\023\027\107\154\157 -\142\141\154\123\151\147\156\040\122\157\157\164\040\103\101\040 -\055\040\122\062\061\023\060\021\006\003\125\004\012\023\012\107 -\154\157\142\141\154\123\151\147\156\061\023\060\021\006\003\125 -\004\003\023\012\107\154\157\142\141\154\123\151\147\156 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\013\004\000\000\000\000\001\017\206\046\346\015 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "Verisign Class 1 Public Primary Certification Authority - G3" # @@ -348,7 +213,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=VeriSign Class 1 Public Primary Certification Authority - G3,OU="(c) 1999 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US # Not Valid Before: Fri Oct 01 00:00:00 1999 # Not Valid After : Wed Jul 16 23:59:59 2036 -# Fingerprint (MD5): B1:47:BC:18:57:D1:18:A0:78:2D:EC:71:E8:2A:95:73 +# Fingerprint (SHA-256): CB:B5:AF:18:5E:94:2A:24:02:F9:EA:CB:C0:ED:5B:B8:76:EE:A3:C1:22:36:23:D0:04:47:E4:F3:BA:55:4B:65 # Fingerprint (SHA1): 20:42:85:DC:F7:EB:76:41:95:57:8E:13:6B:D4:B7:D1:E9:8E:46:A5 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -466,13 +331,13 @@ CKA_NSS_EMAIL_DISTRUST_AFTER MULTILINE_OCTAL \062\062\060\070\063\061\060\060\060\060\060\060\132 END -# Trust for Certificate "Verisign Class 1 Public Primary Certification Authority - G3" +# Trust for "Verisign Class 1 Public Primary Certification Authority - G3" # Issuer: CN=VeriSign Class 1 Public Primary Certification Authority - G3,OU="(c) 1999 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US # Serial Number:00:8b:5b:75:56:84:54:85:0b:00:cf:af:38:48:ce:b1:a4 # Subject: CN=VeriSign Class 1 Public Primary Certification Authority - G3,OU="(c) 1999 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US # Not Valid Before: Fri Oct 01 00:00:00 1999 # Not Valid After : Wed Jul 16 23:59:59 2036 -# Fingerprint (MD5): B1:47:BC:18:57:D1:18:A0:78:2D:EC:71:E8:2A:95:73 +# Fingerprint (SHA-256): CB:B5:AF:18:5E:94:2A:24:02:F9:EA:CB:C0:ED:5B:B8:76:EE:A3:C1:22:36:23:D0:04:47:E4:F3:BA:55:4B:65 # Fingerprint (SHA1): 20:42:85:DC:F7:EB:76:41:95:57:8E:13:6B:D4:B7:D1:E9:8E:46:A5 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -518,7 +383,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=VeriSign Class 2 Public Primary Certification Authority - G3,OU="(c) 1999 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US # Not Valid Before: Fri Oct 01 00:00:00 1999 # Not Valid After : Wed Jul 16 23:59:59 2036 -# Fingerprint (MD5): F8:BE:C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4A:2B:F6 +# Fingerprint (SHA-256): 92:A9:D9:83:3F:E1:94:4D:B3:66:E8:BF:AE:7A:95:B6:48:0C:2D:6C:6C:2A:1B:E6:5D:42:36:B6:08:FC:A1:BB # Fingerprint (SHA1): 61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -636,13 +501,13 @@ CKA_NSS_EMAIL_DISTRUST_AFTER MULTILINE_OCTAL \062\062\060\070\063\061\060\060\060\060\060\060\132 END -# Trust for Certificate "Verisign Class 2 Public Primary Certification Authority - G3" +# Trust for "Verisign Class 2 Public Primary Certification Authority - G3" # Issuer: CN=VeriSign Class 2 Public Primary Certification Authority - G3,OU="(c) 1999 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US # Serial Number:61:70:cb:49:8c:5f:98:45:29:e7:b0:a6:d9:50:5b:7a # Subject: CN=VeriSign Class 2 Public Primary Certification Authority - G3,OU="(c) 1999 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US # Not Valid Before: Fri Oct 01 00:00:00 1999 # Not Valid After : Wed Jul 16 23:59:59 2036 -# Fingerprint (MD5): F8:BE:C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4A:2B:F6 +# Fingerprint (SHA-256): 92:A9:D9:83:3F:E1:94:4D:B3:66:E8:BF:AE:7A:95:B6:48:0C:2D:6C:6C:2A:1B:E6:5D:42:36:B6:08:FC:A1:BB # Fingerprint (SHA1): 61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -688,7 +553,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Entrust.net Certification Authority (2048),OU=(c) 1999 Entrust.net Limited,OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.),O=Entrust.net # Not Valid Before: Fri Dec 24 17:50:51 1999 # Not Valid After : Tue Jul 24 14:15:12 2029 -# Fingerprint (MD5): EE:29:31:BC:32:7E:9A:E6:E8:B5:F7:51:B4:34:71:90 +# Fingerprint (SHA-256): 6D:C4:71:72:E0:1C:BC:B0:BF:62:58:0D:89:5F:E2:B8:AC:9A:D4:F8:73:80:1E:0C:10:B9:C8:37:D2:1E:B1:77 # Fingerprint (SHA1): 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -807,7 +672,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=Entrust.net Certification Authority (2048),OU=(c) 1999 Entrust.net Limited,OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.),O=Entrust.net # Not Valid Before: Fri Dec 24 17:50:51 1999 # Not Valid After : Tue Jul 24 14:15:12 2029 -# Fingerprint (MD5): EE:29:31:BC:32:7E:9A:E6:E8:B5:F7:51:B4:34:71:90 +# Fingerprint (SHA-256): 6D:C4:71:72:E0:1C:BC:B0:BF:62:58:0D:89:5F:E2:B8:AC:9A:D4:F8:73:80:1E:0C:10:B9:C8:37:D2:1E:B1:77 # Fingerprint (SHA1): 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -851,7 +716,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Baltimore CyberTrust Root,OU=CyberTrust,O=Baltimore,C=IE # Not Valid Before: Fri May 12 18:46:00 2000 # Not Valid After : Mon May 12 23:59:00 2025 -# Fingerprint (MD5): AC:B6:94:A5:9C:17:E0:D7:91:52:9B:B1:97:06:A6:E4 +# Fingerprint (SHA-256): 16:AF:57:A9:F6:76:B0:AB:12:60:95:AA:5E:BA:DE:F2:2A:B3:11:19:D6:44:AC:95:CD:4B:93:DB:F3:F2:6A:EB # Fingerprint (SHA1): D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -941,13 +806,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Baltimore CyberTrust Root" +# Trust for "Baltimore CyberTrust Root" # Issuer: CN=Baltimore CyberTrust Root,OU=CyberTrust,O=Baltimore,C=IE # Serial Number: 33554617 (0x20000b9) # Subject: CN=Baltimore CyberTrust Root,OU=CyberTrust,O=Baltimore,C=IE # Not Valid Before: Fri May 12 18:46:00 2000 # Not Valid After : Mon May 12 23:59:00 2025 -# Fingerprint (MD5): AC:B6:94:A5:9C:17:E0:D7:91:52:9B:B1:97:06:A6:E4 +# Fingerprint (SHA-256): 16:AF:57:A9:F6:76:B0:AB:12:60:95:AA:5E:BA:DE:F2:2A:B3:11:19:D6:44:AC:95:CD:4B:93:DB:F3:F2:6A:EB # Fingerprint (SHA1): D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -985,7 +850,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Entrust Root Certification Authority,OU="(c) 2006 Entrust, Inc.",OU=www.entrust.net/CPS is incorporated by reference,O="Entrust, Inc.",C=US # Not Valid Before: Mon Nov 27 20:23:42 2006 # Not Valid After : Fri Nov 27 20:53:42 2026 -# Fingerprint (MD5): D6:A5:C3:ED:5D:DD:3E:00:C1:3D:87:92:1F:1D:3F:E4 +# Fingerprint (SHA-256): 73:C1:76:43:4F:1B:C6:D5:AD:F4:5B:0E:76:E7:27:28:7C:8D:E5:76:16:C1:E6:E6:14:1A:2B:2C:BC:7D:8E:4C # Fingerprint (SHA1): B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -1105,13 +970,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Entrust Root Certification Authority" +# Trust for "Entrust Root Certification Authority" # Issuer: CN=Entrust Root Certification Authority,OU="(c) 2006 Entrust, Inc.",OU=www.entrust.net/CPS is incorporated by reference,O="Entrust, Inc.",C=US # Serial Number: 1164660820 (0x456b5054) # Subject: CN=Entrust Root Certification Authority,OU="(c) 2006 Entrust, Inc.",OU=www.entrust.net/CPS is incorporated by reference,O="Entrust, Inc.",C=US # Not Valid Before: Mon Nov 27 20:23:42 2006 # Not Valid After : Fri Nov 27 20:53:42 2026 -# Fingerprint (MD5): D6:A5:C3:ED:5D:DD:3E:00:C1:3D:87:92:1F:1D:3F:E4 +# Fingerprint (SHA-256): 73:C1:76:43:4F:1B:C6:D5:AD:F4:5B:0E:76:E7:27:28:7C:8D:E5:76:16:C1:E6:E6:14:1A:2B:2C:BC:7D:8E:4C # Fingerprint (SHA1): B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -1155,7 +1020,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Certum CA,O=Unizeto Sp. z o.o.,C=PL # Not Valid Before: Tue Jun 11 10:46:39 2002 # Not Valid After : Fri Jun 11 10:46:39 2027 -# Fingerprint (MD5): 2C:8F:9F:66:1D:18:90:B1:47:26:9D:8E:86:82:8C:A9 +# Fingerprint (SHA-256): D8:E0:FE:BC:1D:B2:E3:8D:00:94:0F:37:D2:7D:41:34:4D:99:3E:73:4B:99:D5:65:6D:97:78:D4:D8:14:36:24 # Fingerprint (SHA1): 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -1234,13 +1099,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Certum Root CA" +# Trust for "Certum Root CA" # Issuer: CN=Certum CA,O=Unizeto Sp. z o.o.,C=PL # Serial Number: 65568 (0x10020) # Subject: CN=Certum CA,O=Unizeto Sp. z o.o.,C=PL # Not Valid Before: Tue Jun 11 10:46:39 2002 # Not Valid After : Fri Jun 11 10:46:39 2027 -# Fingerprint (MD5): 2C:8F:9F:66:1D:18:90:B1:47:26:9D:8E:86:82:8C:A9 +# Fingerprint (SHA-256): D8:E0:FE:BC:1D:B2:E3:8D:00:94:0F:37:D2:7D:41:34:4D:99:3E:73:4B:99:D5:65:6D:97:78:D4:D8:14:36:24 # Fingerprint (SHA1): 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -1276,7 +1141,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=AAA Certificate Services,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB # Not Valid Before: Thu Jan 01 00:00:00 2004 # Not Valid After : Sun Dec 31 23:59:59 2028 -# Fingerprint (MD5): 49:79:04:B0:EB:87:19:AC:47:B0:BC:11:51:9B:74:D0 +# Fingerprint (SHA-256): D7:A7:A0:FB:5D:7E:27:31:D7:71:E9:48:4E:BC:DE:F7:1D:5F:0C:3E:0A:29:48:78:2B:C8:3E:E0:EA:69:9E:F4 # Fingerprint (SHA1): D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -1382,13 +1247,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Comodo AAA Services root" +# Trust for "Comodo AAA Services root" # Issuer: CN=AAA Certificate Services,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB # Serial Number: 1 (0x1) # Subject: CN=AAA Certificate Services,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB # Not Valid Before: Thu Jan 01 00:00:00 2004 # Not Valid After : Sun Dec 31 23:59:59 2028 -# Fingerprint (MD5): 49:79:04:B0:EB:87:19:AC:47:B0:BC:11:51:9B:74:D0 +# Fingerprint (SHA-256): D7:A7:A0:FB:5D:7E:27:31:D7:71:E9:48:4E:BC:DE:F7:1D:5F:0C:3E:0A:29:48:78:2B:C8:3E:E0:EA:69:9E:F4 # Fingerprint (SHA1): D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -1428,7 +1293,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=QuoVadis Root CA 2,O=QuoVadis Limited,C=BM # Not Valid Before: Fri Nov 24 18:27:00 2006 # Not Valid After : Mon Nov 24 18:23:33 2031 -# Fingerprint (MD5): 5E:39:7B:DD:F8:BA:EC:82:E9:AC:62:BA:0C:54:00:2B +# Fingerprint (SHA-256): 85:A0:DD:7D:D7:20:AD:B7:FF:05:F8:3D:54:2B:20:9D:C7:FF:45:28:F7:D6:77:B1:83:89:FE:A5:E5:C4:9E:86 # Fingerprint (SHA1): CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -1552,13 +1417,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "QuoVadis Root CA 2" +# Trust for "QuoVadis Root CA 2" # Issuer: CN=QuoVadis Root CA 2,O=QuoVadis Limited,C=BM # Serial Number: 1289 (0x509) # Subject: CN=QuoVadis Root CA 2,O=QuoVadis Limited,C=BM # Not Valid Before: Fri Nov 24 18:27:00 2006 # Not Valid After : Mon Nov 24 18:23:33 2031 -# Fingerprint (MD5): 5E:39:7B:DD:F8:BA:EC:82:E9:AC:62:BA:0C:54:00:2B +# Fingerprint (SHA-256): 85:A0:DD:7D:D7:20:AD:B7:FF:05:F8:3D:54:2B:20:9D:C7:FF:45:28:F7:D6:77:B1:83:89:FE:A5:E5:C4:9E:86 # Fingerprint (SHA1): CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -1595,7 +1460,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=QuoVadis Root CA 3,O=QuoVadis Limited,C=BM # Not Valid Before: Fri Nov 24 19:11:23 2006 # Not Valid After : Mon Nov 24 19:06:44 2031 -# Fingerprint (MD5): 31:85:3C:62:94:97:63:B9:AA:FD:89:4E:AF:6F:E0:CF +# Fingerprint (SHA-256): 18:F1:FC:7F:20:5D:F8:AD:DD:EB:7F:E0:07:DD:57:E3:AF:37:5A:9C:4D:8D:73:54:6B:F4:F1:FE:D1:E1:8D:35 # Fingerprint (SHA1): 1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -1734,13 +1599,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "QuoVadis Root CA 3" +# Trust for "QuoVadis Root CA 3" # Issuer: CN=QuoVadis Root CA 3,O=QuoVadis Limited,C=BM # Serial Number: 1478 (0x5c6) # Subject: CN=QuoVadis Root CA 3,O=QuoVadis Limited,C=BM # Not Valid Before: Fri Nov 24 19:11:23 2006 # Not Valid After : Mon Nov 24 19:06:44 2031 -# Fingerprint (MD5): 31:85:3C:62:94:97:63:B9:AA:FD:89:4E:AF:6F:E0:CF +# Fingerprint (SHA-256): 18:F1:FC:7F:20:5D:F8:AD:DD:EB:7F:E0:07:DD:57:E3:AF:37:5A:9C:4D:8D:73:54:6B:F4:F1:FE:D1:E1:8D:35 # Fingerprint (SHA1): 1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -1777,7 +1642,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: OU=Security Communication RootCA1,O=SECOM Trust.net,C=JP # Not Valid Before: Tue Sep 30 04:20:49 2003 # Not Valid After : Sat Sep 30 04:20:49 2023 -# Fingerprint (MD5): F1:BC:63:6A:54:E0:B5:27:F5:CD:E7:1A:E3:4D:6E:4A +# Fingerprint (SHA-256): E7:5E:72:ED:9F:56:0E:EC:6E:B4:80:00:73:A4:3F:C3:AD:19:19:5A:39:22:82:01:78:95:97:4A:99:02:6B:6C # Fingerprint (SHA1): 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -1865,13 +1730,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Security Communication Root CA" +# Trust for "Security Communication Root CA" # Issuer: OU=Security Communication RootCA1,O=SECOM Trust.net,C=JP # Serial Number: 0 (0x0) # Subject: OU=Security Communication RootCA1,O=SECOM Trust.net,C=JP # Not Valid Before: Tue Sep 30 04:20:49 2003 # Not Valid After : Sat Sep 30 04:20:49 2023 -# Fingerprint (MD5): F1:BC:63:6A:54:E0:B5:27:F5:CD:E7:1A:E3:4D:6E:4A +# Fingerprint (SHA-256): E7:5E:72:ED:9F:56:0E:EC:6E:B4:80:00:73:A4:3F:C3:AD:19:19:5A:39:22:82:01:78:95:97:4A:99:02:6B:6C # Fingerprint (SHA1): 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -1909,7 +1774,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Chambers of Commerce Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU # Not Valid Before: Tue Sep 30 16:13:43 2003 # Not Valid After : Wed Sep 30 16:13:44 2037 -# Fingerprint (MD5): B0:01:EE:14:D9:AF:29:18:94:76:8E:F1:69:33:2A:84 +# Fingerprint (SHA-256): 0C:25:8A:12:A5:67:4A:EF:25:F2:8B:A7:DC:FA:EC:EE:A3:48:E5:41:E6:F5:CC:4E:E6:3B:71:B3:61:60:6A:C3 # Fingerprint (SHA1): 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -2029,13 +1894,13 @@ CKA_NSS_EMAIL_DISTRUST_AFTER MULTILINE_OCTAL \062\061\060\063\060\061\060\060\060\060\060\060\132 END -# Trust for Certificate "Camerfirma Chambers of Commerce Root" +# Trust for "Camerfirma Chambers of Commerce Root" # Issuer: CN=Chambers of Commerce Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU # Serial Number: 0 (0x0) # Subject: CN=Chambers of Commerce Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU # Not Valid Before: Tue Sep 30 16:13:43 2003 # Not Valid After : Wed Sep 30 16:13:44 2037 -# Fingerprint (MD5): B0:01:EE:14:D9:AF:29:18:94:76:8E:F1:69:33:2A:84 +# Fingerprint (SHA-256): 0C:25:8A:12:A5:67:4A:EF:25:F2:8B:A7:DC:FA:EC:EE:A3:48:E5:41:E6:F5:CC:4E:E6:3B:71:B3:61:60:6A:C3 # Fingerprint (SHA1): 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -2068,170 +1933,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Camerfirma Global Chambersign Root" -# -# Issuer: CN=Global Chambersign Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU -# Serial Number: 0 (0x0) -# Subject: CN=Global Chambersign Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU -# Not Valid Before: Tue Sep 30 16:14:18 2003 -# Not Valid After : Wed Sep 30 16:14:18 2037 -# Fingerprint (MD5): C5:E6:7B:BF:06:D0:4F:43:ED:C4:7A:65:8A:FB:6B:19 -# Fingerprint (SHA1): 33:9B:6B:14:50:24:9B:55:7A:01:87:72:84:D9:E0:2F:C3:D2:D8:E9 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Camerfirma Global Chambersign Root" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\105\125\061 -\047\060\045\006\003\125\004\012\023\036\101\103\040\103\141\155 -\145\162\146\151\162\155\141\040\123\101\040\103\111\106\040\101 -\070\062\067\064\063\062\070\067\061\043\060\041\006\003\125\004 -\013\023\032\150\164\164\160\072\057\057\167\167\167\056\143\150 -\141\155\142\145\162\163\151\147\156\056\157\162\147\061\040\060 -\036\006\003\125\004\003\023\027\107\154\157\142\141\154\040\103 -\150\141\155\142\145\162\163\151\147\156\040\122\157\157\164 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\105\125\061 -\047\060\045\006\003\125\004\012\023\036\101\103\040\103\141\155 -\145\162\146\151\162\155\141\040\123\101\040\103\111\106\040\101 -\070\062\067\064\063\062\070\067\061\043\060\041\006\003\125\004 -\013\023\032\150\164\164\160\072\057\057\167\167\167\056\143\150 -\141\155\142\145\162\163\151\147\156\056\157\162\147\061\040\060 -\036\006\003\125\004\003\023\027\107\154\157\142\141\154\040\103 -\150\141\155\142\145\162\163\151\147\156\040\122\157\157\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\000 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\004\305\060\202\003\255\240\003\002\001\002\002\001\000 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\175\061\013\060\011\006\003\125\004\006\023\002\105\125\061\047 -\060\045\006\003\125\004\012\023\036\101\103\040\103\141\155\145 -\162\146\151\162\155\141\040\123\101\040\103\111\106\040\101\070 -\062\067\064\063\062\070\067\061\043\060\041\006\003\125\004\013 -\023\032\150\164\164\160\072\057\057\167\167\167\056\143\150\141 -\155\142\145\162\163\151\147\156\056\157\162\147\061\040\060\036 -\006\003\125\004\003\023\027\107\154\157\142\141\154\040\103\150 -\141\155\142\145\162\163\151\147\156\040\122\157\157\164\060\036 -\027\015\060\063\060\071\063\060\061\066\061\064\061\070\132\027 -\015\063\067\060\071\063\060\061\066\061\064\061\070\132\060\175 -\061\013\060\011\006\003\125\004\006\023\002\105\125\061\047\060 -\045\006\003\125\004\012\023\036\101\103\040\103\141\155\145\162 -\146\151\162\155\141\040\123\101\040\103\111\106\040\101\070\062 -\067\064\063\062\070\067\061\043\060\041\006\003\125\004\013\023 -\032\150\164\164\160\072\057\057\167\167\167\056\143\150\141\155 -\142\145\162\163\151\147\156\056\157\162\147\061\040\060\036\006 -\003\125\004\003\023\027\107\154\157\142\141\154\040\103\150\141 -\155\142\145\162\163\151\147\156\040\122\157\157\164\060\202\001 -\040\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000 -\003\202\001\015\000\060\202\001\010\002\202\001\001\000\242\160 -\242\320\237\102\256\133\027\307\330\175\317\024\203\374\117\311 -\241\267\023\257\212\327\236\076\004\012\222\213\140\126\372\264 -\062\057\210\115\241\140\010\364\267\011\116\240\111\057\111\326 -\323\337\235\227\132\237\224\004\160\354\077\131\331\267\314\146 -\213\230\122\050\011\002\337\305\057\204\215\172\227\167\277\354 -\100\235\045\162\253\265\077\062\230\373\267\267\374\162\204\345 -\065\207\371\125\372\243\037\016\157\056\050\335\151\240\331\102 -\020\306\370\265\104\302\320\103\177\333\274\344\242\074\152\125 -\170\012\167\251\330\352\031\062\267\057\376\134\077\033\356\261 -\230\354\312\255\172\151\105\343\226\017\125\366\346\355\165\352 -\145\350\062\126\223\106\211\250\045\212\145\006\356\153\277\171 -\007\320\361\267\257\355\054\115\222\273\300\250\137\247\147\175 -\004\362\025\010\160\254\222\326\175\004\322\063\373\114\266\013 -\013\373\032\311\304\215\003\251\176\134\362\120\253\022\245\241 -\317\110\120\245\357\322\310\032\023\372\260\177\261\202\034\167 -\152\017\137\334\013\225\217\357\103\176\346\105\011\045\002\001 -\003\243\202\001\120\060\202\001\114\060\022\006\003\125\035\023 -\001\001\377\004\010\060\006\001\001\377\002\001\014\060\077\006 -\003\125\035\037\004\070\060\066\060\064\240\062\240\060\206\056 -\150\164\164\160\072\057\057\143\162\154\056\143\150\141\155\142 -\145\162\163\151\147\156\056\157\162\147\057\143\150\141\155\142 -\145\162\163\151\147\156\162\157\157\164\056\143\162\154\060\035 -\006\003\125\035\016\004\026\004\024\103\234\066\237\260\236\060 -\115\306\316\137\255\020\253\345\003\245\372\251\024\060\016\006 -\003\125\035\017\001\001\377\004\004\003\002\001\006\060\021\006 -\011\140\206\110\001\206\370\102\001\001\004\004\003\002\000\007 -\060\052\006\003\125\035\021\004\043\060\041\201\037\143\150\141 -\155\142\145\162\163\151\147\156\162\157\157\164\100\143\150\141 -\155\142\145\162\163\151\147\156\056\157\162\147\060\052\006\003 -\125\035\022\004\043\060\041\201\037\143\150\141\155\142\145\162 -\163\151\147\156\162\157\157\164\100\143\150\141\155\142\145\162 -\163\151\147\156\056\157\162\147\060\133\006\003\125\035\040\004 -\124\060\122\060\120\006\013\053\006\001\004\001\201\207\056\012 -\001\001\060\101\060\077\006\010\053\006\001\005\005\007\002\001 -\026\063\150\164\164\160\072\057\057\143\160\163\056\143\150\141 -\155\142\145\162\163\151\147\156\056\157\162\147\057\143\160\163 -\057\143\150\141\155\142\145\162\163\151\147\156\162\157\157\164 -\056\150\164\155\154\060\015\006\011\052\206\110\206\367\015\001 -\001\005\005\000\003\202\001\001\000\074\073\160\221\371\004\124 -\047\221\341\355\355\376\150\177\141\135\345\101\145\117\062\361 -\030\005\224\152\034\336\037\160\333\076\173\062\002\064\265\014 -\154\241\212\174\245\364\217\377\324\330\255\027\325\055\004\321 -\077\130\200\342\201\131\210\276\300\343\106\223\044\376\220\275 -\046\242\060\055\350\227\046\127\065\211\164\226\030\366\025\342 -\257\044\031\126\002\002\262\272\017\024\352\306\212\146\301\206 -\105\125\213\276\222\276\234\244\004\307\111\074\236\350\051\172 -\211\327\376\257\377\150\365\245\027\220\275\254\231\314\245\206 -\127\011\147\106\333\326\026\302\106\361\344\251\120\365\217\321 -\222\025\323\137\076\306\000\111\072\156\130\262\321\321\047\015 -\045\310\062\370\040\021\315\175\062\063\110\224\124\114\335\334 -\171\304\060\237\353\216\270\125\265\327\210\134\305\152\044\075 -\262\323\005\003\121\306\007\357\314\024\162\164\075\156\162\316 -\030\050\214\112\240\167\345\011\053\105\104\107\254\267\147\177 -\001\212\005\132\223\276\241\301\377\370\347\016\147\244\107\111 -\166\135\165\220\032\365\046\217\360 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -# For Email Distrust After: Mon Mar 01 00:00:00 2021 -CKA_NSS_EMAIL_DISTRUST_AFTER MULTILINE_OCTAL -\062\061\060\063\060\061\060\060\060\060\060\060\132 -END - -# Trust for Certificate "Camerfirma Global Chambersign Root" -# Issuer: CN=Global Chambersign Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU -# Serial Number: 0 (0x0) -# Subject: CN=Global Chambersign Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU -# Not Valid Before: Tue Sep 30 16:14:18 2003 -# Not Valid After : Wed Sep 30 16:14:18 2037 -# Fingerprint (MD5): C5:E6:7B:BF:06:D0:4F:43:ED:C4:7A:65:8A:FB:6B:19 -# Fingerprint (SHA1): 33:9B:6B:14:50:24:9B:55:7A:01:87:72:84:D9:E0:2F:C3:D2:D8:E9 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Camerfirma Global Chambersign Root" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\063\233\153\024\120\044\233\125\172\001\207\162\204\331\340\057 -\303\322\330\351 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\305\346\173\277\006\320\117\103\355\304\172\145\212\373\153\031 -END -CKA_ISSUER MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\105\125\061 -\047\060\045\006\003\125\004\012\023\036\101\103\040\103\141\155 -\145\162\146\151\162\155\141\040\123\101\040\103\111\106\040\101 -\070\062\067\064\063\062\070\067\061\043\060\041\006\003\125\004 -\013\023\032\150\164\164\160\072\057\057\167\167\167\056\143\150 -\141\155\142\145\162\163\151\147\156\056\157\162\147\061\040\060 -\036\006\003\125\004\003\023\027\107\154\157\142\141\154\040\103 -\150\141\155\142\145\162\163\151\147\156\040\122\157\157\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\000 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "XRamp Global CA Root" # @@ -2240,7 +1941,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=XRamp Global Certification Authority,O=XRamp Security Services Inc,OU=www.xrampsecurity.com,C=US # Not Valid Before: Mon Nov 01 17:14:04 2004 # Not Valid After : Mon Jan 01 05:37:19 2035 -# Fingerprint (MD5): A1:0B:44:B3:CA:10:D8:00:6E:9D:0F:D8:0F:92:0A:D1 +# Fingerprint (SHA-256): CE:CD:DC:90:50:99:D8:DA:DF:C5:B1:D2:09:B7:37:CB:E2:C1:8C:FB:2C:10:C0:FF:0B:CF:0D:32:86:FC:1A:A2 # Fingerprint (SHA1): B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -2349,13 +2050,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "XRamp Global CA Root" +# Trust for "XRamp Global CA Root" # Issuer: CN=XRamp Global Certification Authority,O=XRamp Security Services Inc,OU=www.xrampsecurity.com,C=US # Serial Number:50:94:6c:ec:18:ea:d5:9c:4d:d5:97:ef:75:8f:a0:ad # Subject: CN=XRamp Global Certification Authority,O=XRamp Security Services Inc,OU=www.xrampsecurity.com,C=US # Not Valid Before: Mon Nov 01 17:14:04 2004 # Not Valid After : Mon Jan 01 05:37:19 2035 -# Fingerprint (MD5): A1:0B:44:B3:CA:10:D8:00:6E:9D:0F:D8:0F:92:0A:D1 +# Fingerprint (SHA-256): CE:CD:DC:90:50:99:D8:DA:DF:C5:B1:D2:09:B7:37:CB:E2:C1:8C:FB:2C:10:C0:FF:0B:CF:0D:32:86:FC:1A:A2 # Fingerprint (SHA1): B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -2397,7 +2098,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: OU=Go Daddy Class 2 Certification Authority,O="The Go Daddy Group, Inc.",C=US # Not Valid Before: Tue Jun 29 17:06:20 2004 # Not Valid After : Thu Jun 29 17:06:20 2034 -# Fingerprint (MD5): 91:DE:06:25:AB:DA:FD:32:17:0C:BB:25:17:2A:84:67 +# Fingerprint (SHA-256): C3:84:6B:F2:4B:9E:93:CA:64:27:4C:0E:C6:7C:1E:CC:5E:02:4F:FC:AC:D2:D7:40:19:35:0E:81:FE:54:6A:E4 # Fingerprint (SHA1): 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -2498,13 +2199,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Go Daddy Class 2 CA" +# Trust for "Go Daddy Class 2 CA" # Issuer: OU=Go Daddy Class 2 Certification Authority,O="The Go Daddy Group, Inc.",C=US # Serial Number: 0 (0x0) # Subject: OU=Go Daddy Class 2 Certification Authority,O="The Go Daddy Group, Inc.",C=US # Not Valid Before: Tue Jun 29 17:06:20 2004 # Not Valid After : Thu Jun 29 17:06:20 2034 -# Fingerprint (MD5): 91:DE:06:25:AB:DA:FD:32:17:0C:BB:25:17:2A:84:67 +# Fingerprint (SHA-256): C3:84:6B:F2:4B:9E:93:CA:64:27:4C:0E:C6:7C:1E:CC:5E:02:4F:FC:AC:D2:D7:40:19:35:0E:81:FE:54:6A:E4 # Fingerprint (SHA1): 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -2543,7 +2244,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: OU=Starfield Class 2 Certification Authority,O="Starfield Technologies, Inc.",C=US # Not Valid Before: Tue Jun 29 17:39:16 2004 # Not Valid After : Thu Jun 29 17:39:16 2034 -# Fingerprint (MD5): 32:4A:4B:BB:C8:63:69:9B:BE:74:9A:C6:DD:1D:46:24 +# Fingerprint (SHA-256): 14:65:FA:20:53:97:B8:76:FA:A6:F0:A9:95:8E:55:90:E4:0F:CC:7F:AA:4F:B7:C2:C8:67:75:21:FB:5F:B6:58 # Fingerprint (SHA1): AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -2645,13 +2346,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Starfield Class 2 CA" +# Trust for "Starfield Class 2 CA" # Issuer: OU=Starfield Class 2 Certification Authority,O="Starfield Technologies, Inc.",C=US # Serial Number: 0 (0x0) # Subject: OU=Starfield Class 2 Certification Authority,O="Starfield Technologies, Inc.",C=US # Not Valid Before: Tue Jun 29 17:39:16 2004 # Not Valid After : Thu Jun 29 17:39:16 2034 -# Fingerprint (MD5): 32:4A:4B:BB:C8:63:69:9B:BE:74:9A:C6:DD:1D:46:24 +# Fingerprint (SHA-256): 14:65:FA:20:53:97:B8:76:FA:A6:F0:A9:95:8E:55:90:E4:0F:CC:7F:AA:4F:B7:C2:C8:67:75:21:FB:5F:B6:58 # Fingerprint (SHA1): AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -2690,7 +2391,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=DigiCert Assured ID Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US # Not Valid Before: Fri Nov 10 00:00:00 2006 # Not Valid After : Mon Nov 10 00:00:00 2031 -# Fingerprint (MD5): 87:CE:0B:7B:2A:0E:49:00:E1:58:71:9B:37:A8:93:72 +# Fingerprint (SHA-256): 3E:90:99:B5:01:5E:8F:48:6C:00:BC:EA:9D:11:1E:E7:21:FA:BA:35:5A:89:BC:F1:DF:69:56:1E:3D:C6:32:5C # Fingerprint (SHA1): 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -2787,13 +2488,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "DigiCert Assured ID Root CA" +# Trust for "DigiCert Assured ID Root CA" # Issuer: CN=DigiCert Assured ID Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US # Serial Number:0c:e7:e0:e5:17:d8:46:fe:8f:e5:60:fc:1b:f0:30:39 # Subject: CN=DigiCert Assured ID Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US # Not Valid Before: Fri Nov 10 00:00:00 2006 # Not Valid After : Mon Nov 10 00:00:00 2031 -# Fingerprint (MD5): 87:CE:0B:7B:2A:0E:49:00:E1:58:71:9B:37:A8:93:72 +# Fingerprint (SHA-256): 3E:90:99:B5:01:5E:8F:48:6C:00:BC:EA:9D:11:1E:E7:21:FA:BA:35:5A:89:BC:F1:DF:69:56:1E:3D:C6:32:5C # Fingerprint (SHA1): 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -2833,7 +2534,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US # Not Valid Before: Fri Nov 10 00:00:00 2006 # Not Valid After : Mon Nov 10 00:00:00 2031 -# Fingerprint (MD5): 79:E4:A9:84:0D:7D:3A:96:D7:C0:4F:E2:43:4C:89:2E +# Fingerprint (SHA-256): 43:48:A0:E9:44:4C:78:CB:26:5E:05:8D:5E:89:44:B4:D8:4F:96:62:BD:26:DB:25:7F:89:34:A4:43:C7:01:61 # Fingerprint (SHA1): A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -2930,13 +2631,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "DigiCert Global Root CA" +# Trust for "DigiCert Global Root CA" # Issuer: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US # Serial Number:08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a # Subject: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US # Not Valid Before: Fri Nov 10 00:00:00 2006 # Not Valid After : Mon Nov 10 00:00:00 2031 -# Fingerprint (MD5): 79:E4:A9:84:0D:7D:3A:96:D7:C0:4F:E2:43:4C:89:2E +# Fingerprint (SHA-256): 43:48:A0:E9:44:4C:78:CB:26:5E:05:8D:5E:89:44:B4:D8:4F:96:62:BD:26:DB:25:7F:89:34:A4:43:C7:01:61 # Fingerprint (SHA1): A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -2976,7 +2677,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US # Not Valid Before: Fri Nov 10 00:00:00 2006 # Not Valid After : Mon Nov 10 00:00:00 2031 -# Fingerprint (MD5): D4:74:DE:57:5C:39:B2:D3:9C:85:83:C5:C0:65:49:8A +# Fingerprint (SHA-256): 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF # Fingerprint (SHA1): 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -3074,13 +2775,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "DigiCert High Assurance EV Root CA" +# Trust for "DigiCert High Assurance EV Root CA" # Issuer: CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US # Serial Number:02:ac:5c:26:6a:0b:40:9b:8f:0b:79:f2:ae:46:25:77 # Subject: CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US # Not Valid Before: Fri Nov 10 00:00:00 2006 # Not Valid After : Mon Nov 10 00:00:00 2031 -# Fingerprint (MD5): D4:74:DE:57:5C:39:B2:D3:9C:85:83:C5:C0:65:49:8A +# Fingerprint (SHA-256): 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF # Fingerprint (SHA1): 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -3112,136 +2813,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "DST Root CA X3" -# -# Issuer: CN=DST Root CA X3,O=Digital Signature Trust Co. -# Serial Number:44:af:b0:80:d6:a3:27:ba:89:30:39:86:2e:f8:40:6b -# Subject: CN=DST Root CA X3,O=Digital Signature Trust Co. -# Not Valid Before: Sat Sep 30 21:12:19 2000 -# Not Valid After : Thu Sep 30 14:01:15 2021 -# Fingerprint (MD5): 41:03:52:DC:0F:F7:50:1B:16:F0:02:8E:BA:6F:45:C5 -# Fingerprint (SHA1): DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "DST Root CA X3" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\077\061\044\060\042\006\003\125\004\012\023\033\104\151\147 -\151\164\141\154\040\123\151\147\156\141\164\165\162\145\040\124 -\162\165\163\164\040\103\157\056\061\027\060\025\006\003\125\004 -\003\023\016\104\123\124\040\122\157\157\164\040\103\101\040\130 -\063 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\077\061\044\060\042\006\003\125\004\012\023\033\104\151\147 -\151\164\141\154\040\123\151\147\156\141\164\165\162\145\040\124 -\162\165\163\164\040\103\157\056\061\027\060\025\006\003\125\004 -\003\023\016\104\123\124\040\122\157\157\164\040\103\101\040\130 -\063 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\104\257\260\200\326\243\047\272\211\060\071\206\056\370 -\100\153 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\112\060\202\002\062\240\003\002\001\002\002\020\104 -\257\260\200\326\243\047\272\211\060\071\206\056\370\100\153\060 -\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\077 -\061\044\060\042\006\003\125\004\012\023\033\104\151\147\151\164 -\141\154\040\123\151\147\156\141\164\165\162\145\040\124\162\165 -\163\164\040\103\157\056\061\027\060\025\006\003\125\004\003\023 -\016\104\123\124\040\122\157\157\164\040\103\101\040\130\063\060 -\036\027\015\060\060\060\071\063\060\062\061\061\062\061\071\132 -\027\015\062\061\060\071\063\060\061\064\060\061\061\065\132\060 -\077\061\044\060\042\006\003\125\004\012\023\033\104\151\147\151 -\164\141\154\040\123\151\147\156\141\164\165\162\145\040\124\162 -\165\163\164\040\103\157\056\061\027\060\025\006\003\125\004\003 -\023\016\104\123\124\040\122\157\157\164\040\103\101\040\130\063 -\060\202\001\042\060\015\006\011\052\206\110\206\367\015\001\001 -\001\005\000\003\202\001\017\000\060\202\001\012\002\202\001\001 -\000\337\257\351\227\120\010\203\127\264\314\142\145\366\220\202 -\354\307\323\054\153\060\312\133\354\331\303\175\307\100\301\030 -\024\213\340\350\063\166\111\052\343\077\041\111\223\254\116\016 -\257\076\110\313\145\356\374\323\041\017\145\322\052\331\062\217 -\214\345\367\167\260\022\173\265\225\300\211\243\251\272\355\163 -\056\172\014\006\062\203\242\176\212\024\060\315\021\240\341\052 -\070\271\171\012\061\375\120\275\200\145\337\267\121\143\203\310 -\342\210\141\352\113\141\201\354\122\153\271\242\342\113\032\050 -\237\110\243\236\014\332\011\216\076\027\056\036\335\040\337\133 -\306\052\212\253\056\275\160\255\305\013\032\045\220\164\162\305 -\173\152\253\064\326\060\211\377\345\150\023\173\124\013\310\326 -\256\354\132\234\222\036\075\144\263\214\306\337\277\311\101\160 -\354\026\162\325\046\354\070\125\071\103\320\374\375\030\134\100 -\361\227\353\325\232\233\215\035\272\332\045\271\306\330\337\301 -\025\002\072\253\332\156\361\076\056\365\134\010\234\074\326\203 -\151\344\020\233\031\052\266\051\127\343\345\075\233\237\360\002 -\135\002\003\001\000\001\243\102\060\100\060\017\006\003\125\035 -\023\001\001\377\004\005\060\003\001\001\377\060\016\006\003\125 -\035\017\001\001\377\004\004\003\002\001\006\060\035\006\003\125 -\035\016\004\026\004\024\304\247\261\244\173\054\161\372\333\341 -\113\220\165\377\304\025\140\205\211\020\060\015\006\011\052\206 -\110\206\367\015\001\001\005\005\000\003\202\001\001\000\243\032 -\054\233\027\000\134\251\036\356\050\146\067\072\277\203\307\077 -\113\303\011\240\225\040\135\343\331\131\104\322\076\015\076\275 -\212\113\240\164\037\316\020\202\234\164\032\035\176\230\032\335 -\313\023\113\263\040\104\344\221\351\314\374\175\245\333\152\345 -\376\346\375\340\116\335\267\000\072\265\160\111\257\362\345\353 -\002\361\321\002\213\031\313\224\072\136\110\304\030\036\130\031 -\137\036\002\132\360\014\361\261\255\251\334\131\206\213\156\351 -\221\365\206\312\372\271\146\063\252\131\133\316\342\247\026\163 -\107\313\053\314\231\260\067\110\317\343\126\113\365\317\017\014 -\162\062\207\306\360\104\273\123\162\155\103\365\046\110\232\122 -\147\267\130\253\376\147\166\161\170\333\015\242\126\024\023\071 -\044\061\205\242\250\002\132\060\107\341\335\120\007\274\002\011 -\220\000\353\144\143\140\233\026\274\210\311\022\346\322\175\221 -\213\371\075\062\215\145\264\351\174\261\127\166\352\305\266\050 -\071\277\025\145\034\310\366\167\226\152\012\215\167\013\330\221 -\013\004\216\007\333\051\266\012\356\235\202\065\065\020 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for Certificate "DST Root CA X3" -# Issuer: CN=DST Root CA X3,O=Digital Signature Trust Co. -# Serial Number:44:af:b0:80:d6:a3:27:ba:89:30:39:86:2e:f8:40:6b -# Subject: CN=DST Root CA X3,O=Digital Signature Trust Co. -# Not Valid Before: Sat Sep 30 21:12:19 2000 -# Not Valid After : Thu Sep 30 14:01:15 2021 -# Fingerprint (MD5): 41:03:52:DC:0F:F7:50:1B:16:F0:02:8E:BA:6F:45:C5 -# Fingerprint (SHA1): DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "DST Root CA X3" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\332\311\002\117\124\330\366\337\224\223\137\261\163\046\070\312 -\152\327\174\023 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\101\003\122\334\017\367\120\033\026\360\002\216\272\157\105\305 -END -CKA_ISSUER MULTILINE_OCTAL -\060\077\061\044\060\042\006\003\125\004\012\023\033\104\151\147 -\151\164\141\154\040\123\151\147\156\141\164\165\162\145\040\124 -\162\165\163\164\040\103\157\056\061\027\060\025\006\003\125\004 -\003\023\016\104\123\124\040\122\157\157\164\040\103\101\040\130 -\063 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\104\257\260\200\326\243\047\272\211\060\071\206\056\370 -\100\153 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "SwissSign Platinum CA - G2" # @@ -3250,7 +2821,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=SwissSign Platinum CA - G2,O=SwissSign AG,C=CH # Not Valid Before: Wed Oct 25 08:36:00 2006 # Not Valid After : Sat Oct 25 08:36:00 2036 -# Fingerprint (MD5): C9:98:27:77:28:1E:3D:0E:15:3C:84:00:B8:85:03:E6 +# Fingerprint (SHA-256): 3B:22:2E:56:67:11:E9:92:30:0D:C0:B1:5A:B9:47:3D:AF:DE:F8:C8:4D:0C:EF:7D:33:17:B4:C1:82:1D:14:36 # Fingerprint (SHA1): 56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -3375,13 +2946,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "SwissSign Platinum CA - G2" +# Trust for "SwissSign Platinum CA - G2" # Issuer: CN=SwissSign Platinum CA - G2,O=SwissSign AG,C=CH # Serial Number:4e:b2:00:67:0c:03:5d:4f # Subject: CN=SwissSign Platinum CA - G2,O=SwissSign AG,C=CH # Not Valid Before: Wed Oct 25 08:36:00 2006 # Not Valid After : Sat Oct 25 08:36:00 2036 -# Fingerprint (MD5): C9:98:27:77:28:1E:3D:0E:15:3C:84:00:B8:85:03:E6 +# Fingerprint (SHA-256): 3B:22:2E:56:67:11:E9:92:30:0D:C0:B1:5A:B9:47:3D:AF:DE:F8:C8:4D:0C:EF:7D:33:17:B4:C1:82:1D:14:36 # Fingerprint (SHA1): 56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -3418,7 +2989,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=SwissSign Gold CA - G2,O=SwissSign AG,C=CH # Not Valid Before: Wed Oct 25 08:30:35 2006 # Not Valid After : Sat Oct 25 08:30:35 2036 -# Fingerprint (MD5): 24:77:D9:A8:91:D1:3B:FA:88:2D:C2:FF:F8:CD:33:93 +# Fingerprint (SHA-256): 62:DD:0B:E9:B9:F5:0A:16:3E:A0:F8:E7:5C:05:3B:1E:CA:57:EA:55:C8:68:8F:64:7C:68:81:F2:C8:35:7B:95 # Fingerprint (SHA1): D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -3542,13 +3113,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "SwissSign Gold CA - G2" +# Trust for "SwissSign Gold CA - G2" # Issuer: CN=SwissSign Gold CA - G2,O=SwissSign AG,C=CH # Serial Number:00:bb:40:1c:43:f5:5e:4f:b0 # Subject: CN=SwissSign Gold CA - G2,O=SwissSign AG,C=CH # Not Valid Before: Wed Oct 25 08:30:35 2006 # Not Valid After : Sat Oct 25 08:30:35 2036 -# Fingerprint (MD5): 24:77:D9:A8:91:D1:3B:FA:88:2D:C2:FF:F8:CD:33:93 +# Fingerprint (SHA-256): 62:DD:0B:E9:B9:F5:0A:16:3E:A0:F8:E7:5C:05:3B:1E:CA:57:EA:55:C8:68:8F:64:7C:68:81:F2:C8:35:7B:95 # Fingerprint (SHA1): D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -3585,7 +3156,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=SwissSign Silver CA - G2,O=SwissSign AG,C=CH # Not Valid Before: Wed Oct 25 08:32:46 2006 # Not Valid After : Sat Oct 25 08:32:46 2036 -# Fingerprint (MD5): E0:06:A1:C9:7D:CF:C9:FC:0D:C0:56:75:96:D8:62:13 +# Fingerprint (SHA-256): BE:6C:4D:A2:BB:B9:BA:59:B6:F3:93:97:68:37:42:46:C3:C0:05:99:3F:A9:8F:02:0D:1D:ED:BE:D4:8A:81:D5 # Fingerprint (SHA1): 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -3710,13 +3281,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "SwissSign Silver CA - G2" +# Trust for "SwissSign Silver CA - G2" # Issuer: CN=SwissSign Silver CA - G2,O=SwissSign AG,C=CH # Serial Number:4f:1b:d4:2f:54:bb:2f:4b # Subject: CN=SwissSign Silver CA - G2,O=SwissSign AG,C=CH # Not Valid Before: Wed Oct 25 08:32:46 2006 # Not Valid After : Sat Oct 25 08:32:46 2036 -# Fingerprint (MD5): E0:06:A1:C9:7D:CF:C9:FC:0D:C0:56:75:96:D8:62:13 +# Fingerprint (SHA-256): BE:6C:4D:A2:BB:B9:BA:59:B6:F3:93:97:68:37:42:46:C3:C0:05:99:3F:A9:8F:02:0D:1D:ED:BE:D4:8A:81:D5 # Fingerprint (SHA1): 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -3753,7 +3324,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=SecureTrust CA,O=SecureTrust Corporation,C=US # Not Valid Before: Tue Nov 07 19:31:18 2006 # Not Valid After : Mon Dec 31 19:40:55 2029 -# Fingerprint (MD5): DC:32:C3:A7:6D:25:57:C7:68:09:9D:EA:2D:A9:A2:D1 +# Fingerprint (SHA-256): F1:C1:B5:0A:E5:A2:0D:D8:03:0E:C9:F6:BC:24:82:3D:D3:67:B5:25:57:59:B4:E7:1B:61:FC:E9:F7:37:5D:73 # Fingerprint (SHA1): 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -3846,13 +3417,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "SecureTrust CA" +# Trust for "SecureTrust CA" # Issuer: CN=SecureTrust CA,O=SecureTrust Corporation,C=US # Serial Number:0c:f0:8e:5c:08:16:a5:ad:42:7f:f0:eb:27:18:59:d0 # Subject: CN=SecureTrust CA,O=SecureTrust Corporation,C=US # Not Valid Before: Tue Nov 07 19:31:18 2006 # Not Valid After : Mon Dec 31 19:40:55 2029 -# Fingerprint (MD5): DC:32:C3:A7:6D:25:57:C7:68:09:9D:EA:2D:A9:A2:D1 +# Fingerprint (SHA-256): F1:C1:B5:0A:E5:A2:0D:D8:03:0E:C9:F6:BC:24:82:3D:D3:67:B5:25:57:59:B4:E7:1B:61:FC:E9:F7:37:5D:73 # Fingerprint (SHA1): 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -3890,7 +3461,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Secure Global CA,O=SecureTrust Corporation,C=US # Not Valid Before: Tue Nov 07 19:42:28 2006 # Not Valid After : Mon Dec 31 19:52:06 2029 -# Fingerprint (MD5): CF:F4:27:0D:D4:ED:DC:65:16:49:6D:3D:DA:BF:6E:DE +# Fingerprint (SHA-256): 42:00:F5:04:3A:C8:59:0E:BB:52:7D:20:9E:D1:50:30:29:FB:CB:D4:1C:A1:B5:06:EC:27:F1:5A:DE:7D:AC:69 # Fingerprint (SHA1): 3A:44:73:5A:E5:81:90:1F:24:86:61:46:1E:3B:9C:C4:5F:F5:3A:1B CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -3983,13 +3554,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Secure Global CA" +# Trust for "Secure Global CA" # Issuer: CN=Secure Global CA,O=SecureTrust Corporation,C=US # Serial Number:07:56:22:a4:e8:d4:8a:89:4d:f4:13:c8:f0:f8:ea:a5 # Subject: CN=Secure Global CA,O=SecureTrust Corporation,C=US # Not Valid Before: Tue Nov 07 19:42:28 2006 # Not Valid After : Mon Dec 31 19:52:06 2029 -# Fingerprint (MD5): CF:F4:27:0D:D4:ED:DC:65:16:49:6D:3D:DA:BF:6E:DE +# Fingerprint (SHA-256): 42:00:F5:04:3A:C8:59:0E:BB:52:7D:20:9E:D1:50:30:29:FB:CB:D4:1C:A1:B5:06:EC:27:F1:5A:DE:7D:AC:69 # Fingerprint (SHA1): 3A:44:73:5A:E5:81:90:1F:24:86:61:46:1E:3B:9C:C4:5F:F5:3A:1B CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -4027,7 +3598,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=COMODO Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB # Not Valid Before: Fri Dec 01 00:00:00 2006 # Not Valid After : Mon Dec 31 23:59:59 2029 -# Fingerprint (MD5): 5C:48:DC:F7:42:72:EC:56:94:6D:1C:CC:71:35:80:75 +# Fingerprint (SHA-256): 0C:2C:D6:3D:F7:80:6F:A3:99:ED:E8:09:11:6B:57:5B:F8:79:89:F0:65:18:F9:80:8C:86:05:03:17:8B:AF:66 # Fingerprint (SHA1): 66:31:BF:9E:F7:4F:9E:B6:C9:D5:A6:0C:BA:6A:BE:D1:F7:BD:EF:7B CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -4135,13 +3706,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "COMODO Certification Authority" +# Trust for "COMODO Certification Authority" # Issuer: CN=COMODO Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB # Serial Number:4e:81:2d:8a:82:65:e0:0b:02:ee:3e:35:02:46:e5:3d # Subject: CN=COMODO Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB # Not Valid Before: Fri Dec 01 00:00:00 2006 # Not Valid After : Mon Dec 31 23:59:59 2029 -# Fingerprint (MD5): 5C:48:DC:F7:42:72:EC:56:94:6D:1C:CC:71:35:80:75 +# Fingerprint (SHA-256): 0C:2C:D6:3D:F7:80:6F:A3:99:ED:E8:09:11:6B:57:5B:F8:79:89:F0:65:18:F9:80:8C:86:05:03:17:8B:AF:66 # Fingerprint (SHA1): 66:31:BF:9E:F7:4F:9E:B6:C9:D5:A6:0C:BA:6A:BE:D1:F7:BD:EF:7B CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -4183,7 +3754,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Network Solutions Certificate Authority,O=Network Solutions L.L.C.,C=US # Not Valid Before: Fri Dec 01 00:00:00 2006 # Not Valid After : Mon Dec 31 23:59:59 2029 -# Fingerprint (MD5): D3:F3:A6:16:C0:FA:6B:1D:59:B1:2D:96:4D:0E:11:2E +# Fingerprint (SHA-256): 15:F0:BA:00:A3:AC:7A:F3:AC:88:4C:07:2B:10:11:A0:77:BD:77:C0:97:F4:01:64:B2:F8:59:8A:BD:83:86:0C # Fingerprint (SHA1): 74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -4283,13 +3854,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Network Solutions Certificate Authority" +# Trust for "Network Solutions Certificate Authority" # Issuer: CN=Network Solutions Certificate Authority,O=Network Solutions L.L.C.,C=US # Serial Number:57:cb:33:6f:c2:5c:16:e6:47:16:17:e3:90:31:68:e0 # Subject: CN=Network Solutions Certificate Authority,O=Network Solutions L.L.C.,C=US # Not Valid Before: Fri Dec 01 00:00:00 2006 # Not Valid After : Mon Dec 31 23:59:59 2029 -# Fingerprint (MD5): D3:F3:A6:16:C0:FA:6B:1D:59:B1:2D:96:4D:0E:11:2E +# Fingerprint (SHA-256): 15:F0:BA:00:A3:AC:7A:F3:AC:88:4C:07:2B:10:11:A0:77:BD:77:C0:97:F4:01:64:B2:F8:59:8A:BD:83:86:0C # Fingerprint (SHA1): 74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -4329,7 +3900,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=COMODO ECC Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB # Not Valid Before: Thu Mar 06 00:00:00 2008 # Not Valid After : Mon Jan 18 23:59:59 2038 -# Fingerprint (MD5): 7C:62:FF:74:9D:31:53:5E:68:4A:D5:78:AA:1E:BF:23 +# Fingerprint (SHA-256): 17:93:92:7A:06:14:54:97:89:AD:CE:2F:8F:34:F7:F0:B6:6D:0F:3A:E3:A3:B8:4D:21:EC:15:DB:BA:4F:AD:C7 # Fingerprint (SHA1): 9F:74:4E:9F:2B:4D:BA:EC:0F:31:2C:50:B6:56:3B:8E:2D:93:C3:11 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -4411,13 +3982,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "COMODO ECC Certification Authority" +# Trust for "COMODO ECC Certification Authority" # Issuer: CN=COMODO ECC Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB # Serial Number:1f:47:af:aa:62:00:70:50:54:4c:01:9e:9b:63:99:2a # Subject: CN=COMODO ECC Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB # Not Valid Before: Thu Mar 06 00:00:00 2008 # Not Valid After : Mon Jan 18 23:59:59 2038 -# Fingerprint (MD5): 7C:62:FF:74:9D:31:53:5E:68:4A:D5:78:AA:1E:BF:23 +# Fingerprint (SHA-256): 17:93:92:7A:06:14:54:97:89:AD:CE:2F:8F:34:F7:F0:B6:6D:0F:3A:E3:A3:B8:4D:21:EC:15:DB:BA:4F:AD:C7 # Fingerprint (SHA1): 9F:74:4E:9F:2B:4D:BA:EC:0F:31:2C:50:B6:56:3B:8E:2D:93:C3:11 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -4459,7 +4030,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=OISTE WISeKey Global Root GA CA,OU=OISTE Foundation Endorsed,OU=Copyright (c) 2005,O=WISeKey,C=CH # Not Valid Before: Sun Dec 11 16:03:44 2005 # Not Valid After : Fri Dec 11 16:09:51 2037 -# Fingerprint (MD5): BC:6C:51:33:A7:E9:D3:66:63:54:15:72:1B:21:92:93 +# Fingerprint (SHA-256): 41:C9:23:86:6A:B4:CA:D6:B7:AD:57:80:81:58:2E:02:07:97:A6:CB:DF:4F:FF:78:CE:83:96:B3:89:37:D7:F5 # Fingerprint (SHA1): 59:22:A1:E1:5A:EA:16:35:21:F8:98:39:6A:46:46:B0:44:1B:0F:A9 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -4564,13 +4135,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "OISTE WISeKey Global Root GA CA" +# Trust for "OISTE WISeKey Global Root GA CA" # Issuer: CN=OISTE WISeKey Global Root GA CA,OU=OISTE Foundation Endorsed,OU=Copyright (c) 2005,O=WISeKey,C=CH # Serial Number:41:3d:72:c7:f4:6b:1f:81:43:7d:f1:d2:28:54:df:9a # Subject: CN=OISTE WISeKey Global Root GA CA,OU=OISTE Foundation Endorsed,OU=Copyright (c) 2005,O=WISeKey,C=CH # Not Valid Before: Sun Dec 11 16:03:44 2005 # Not Valid After : Fri Dec 11 16:09:51 2037 -# Fingerprint (MD5): BC:6C:51:33:A7:E9:D3:66:63:54:15:72:1B:21:92:93 +# Fingerprint (SHA-256): 41:C9:23:86:6A:B4:CA:D6:B7:AD:57:80:81:58:2E:02:07:97:A6:CB:DF:4F:FF:78:CE:83:96:B3:89:37:D7:F5 # Fingerprint (SHA1): 59:22:A1:E1:5A:EA:16:35:21:F8:98:39:6A:46:46:B0:44:1B:0F:A9 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -4612,7 +4183,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Certigna,O=Dhimyotis,C=FR # Not Valid Before: Fri Jun 29 15:13:05 2007 # Not Valid After : Tue Jun 29 15:13:05 2027 -# Fingerprint (MD5): AB:57:A6:5B:7D:42:82:19:B5:D8:58:26:28:5E:FD:FF +# Fingerprint (SHA-256): E3:B6:A2:DB:2E:D7:CE:48:84:2F:7A:C5:32:41:C7:B7:1D:54:14:4B:FB:40:C1:1F:3F:1D:0B:42:F5:EE:A1:2D # Fingerprint (SHA1): B1:2E:13:63:45:86:A4:6F:1A:B2:60:68:37:58:2D:C4:AC:FD:94:97 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -4701,13 +4272,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Certigna" +# Trust for "Certigna" # Issuer: CN=Certigna,O=Dhimyotis,C=FR # Serial Number:00:fe:dc:e3:01:0f:c9:48:ff # Subject: CN=Certigna,O=Dhimyotis,C=FR # Not Valid Before: Fri Jun 29 15:13:05 2007 # Not Valid After : Tue Jun 29 15:13:05 2027 -# Fingerprint (MD5): AB:57:A6:5B:7D:42:82:19:B5:D8:58:26:28:5E:FD:FF +# Fingerprint (SHA-256): E3:B6:A2:DB:2E:D7:CE:48:84:2F:7A:C5:32:41:C7:B7:1D:54:14:4B:FB:40:C1:1F:3F:1D:0B:42:F5:EE:A1:2D # Fingerprint (SHA1): B1:2E:13:63:45:86:A4:6F:1A:B2:60:68:37:58:2D:C4:AC:FD:94:97 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -4735,137 +4306,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Cybertrust Global Root" -# -# Issuer: CN=Cybertrust Global Root,O="Cybertrust, Inc" -# Serial Number:04:00:00:00:00:01:0f:85:aa:2d:48 -# Subject: CN=Cybertrust Global Root,O="Cybertrust, Inc" -# Not Valid Before: Fri Dec 15 08:00:00 2006 -# Not Valid After : Wed Dec 15 08:00:00 2021 -# Fingerprint (MD5): 72:E4:4A:87:E3:69:40:80:77:EA:BC:E3:F4:FF:F0:E1 -# Fingerprint (SHA1): 5F:43:E5:B1:BF:F8:78:8C:AC:1C:C7:CA:4A:9A:C6:22:2B:CC:34:C6 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Cybertrust Global Root" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\073\061\030\060\026\006\003\125\004\012\023\017\103\171\142 -\145\162\164\162\165\163\164\054\040\111\156\143\061\037\060\035 -\006\003\125\004\003\023\026\103\171\142\145\162\164\162\165\163 -\164\040\107\154\157\142\141\154\040\122\157\157\164 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\073\061\030\060\026\006\003\125\004\012\023\017\103\171\142 -\145\162\164\162\165\163\164\054\040\111\156\143\061\037\060\035 -\006\003\125\004\003\023\026\103\171\142\145\162\164\162\165\163 -\164\040\107\154\157\142\141\154\040\122\157\157\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\013\004\000\000\000\000\001\017\205\252\055\110 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\241\060\202\002\211\240\003\002\001\002\002\013\004 -\000\000\000\000\001\017\205\252\055\110\060\015\006\011\052\206 -\110\206\367\015\001\001\005\005\000\060\073\061\030\060\026\006 -\003\125\004\012\023\017\103\171\142\145\162\164\162\165\163\164 -\054\040\111\156\143\061\037\060\035\006\003\125\004\003\023\026 -\103\171\142\145\162\164\162\165\163\164\040\107\154\157\142\141 -\154\040\122\157\157\164\060\036\027\015\060\066\061\062\061\065 -\060\070\060\060\060\060\132\027\015\062\061\061\062\061\065\060 -\070\060\060\060\060\132\060\073\061\030\060\026\006\003\125\004 -\012\023\017\103\171\142\145\162\164\162\165\163\164\054\040\111 -\156\143\061\037\060\035\006\003\125\004\003\023\026\103\171\142 -\145\162\164\162\165\163\164\040\107\154\157\142\141\154\040\122 -\157\157\164\060\202\001\042\060\015\006\011\052\206\110\206\367 -\015\001\001\001\005\000\003\202\001\017\000\060\202\001\012\002 -\202\001\001\000\370\310\274\275\024\120\146\023\377\360\323\171 -\354\043\362\267\032\307\216\205\361\022\163\246\031\252\020\333 -\234\242\145\164\132\167\076\121\175\126\366\334\043\266\324\355 -\137\130\261\067\115\325\111\016\156\365\152\207\326\322\214\322 -\047\306\342\377\066\237\230\145\240\023\116\306\052\144\233\325 -\220\022\317\024\006\364\073\343\324\050\276\350\016\370\253\116 -\110\224\155\216\225\061\020\134\355\242\055\275\325\072\155\262 -\034\273\140\300\106\113\001\365\111\256\176\106\212\320\164\215 -\241\014\002\316\356\374\347\217\270\153\146\363\177\104\000\277 -\146\045\024\053\335\020\060\035\007\226\077\115\366\153\270\217 -\267\173\014\245\070\353\336\107\333\325\135\071\374\210\247\363 -\327\052\164\361\350\132\242\073\237\120\272\246\214\105\065\302 -\120\145\225\334\143\202\357\335\277\167\115\234\142\311\143\163 -\026\320\051\017\111\251\110\360\263\252\267\154\305\247\060\071 -\100\135\256\304\342\135\046\123\360\316\034\043\010\141\250\224 -\031\272\004\142\100\354\037\070\160\167\022\006\161\247\060\030 -\135\045\047\245\002\003\001\000\001\243\201\245\060\201\242\060 -\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060 -\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 -\060\035\006\003\125\035\016\004\026\004\024\266\010\173\015\172 -\314\254\040\114\206\126\062\136\317\253\156\205\055\160\127\060 -\077\006\003\125\035\037\004\070\060\066\060\064\240\062\240\060 -\206\056\150\164\164\160\072\057\057\167\167\167\062\056\160\165 -\142\154\151\143\055\164\162\165\163\164\056\143\157\155\057\143 -\162\154\057\143\164\057\143\164\162\157\157\164\056\143\162\154 -\060\037\006\003\125\035\043\004\030\060\026\200\024\266\010\173 -\015\172\314\254\040\114\206\126\062\136\317\253\156\205\055\160 -\127\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000 -\003\202\001\001\000\126\357\012\043\240\124\116\225\227\311\370 -\211\332\105\301\324\243\000\045\364\037\023\253\267\243\205\130 -\151\302\060\255\330\025\212\055\343\311\315\201\132\370\163\043 -\132\247\174\005\363\375\042\073\016\321\006\304\333\066\114\163 -\004\216\345\260\042\344\305\363\056\245\331\043\343\270\116\112 -\040\247\156\002\044\237\042\140\147\173\213\035\162\011\305\061 -\134\351\171\237\200\107\075\255\241\013\007\024\075\107\377\003 -\151\032\014\013\104\347\143\045\247\177\262\311\270\166\204\355 -\043\366\175\007\253\105\176\323\337\263\277\351\212\266\315\250 -\242\147\053\122\325\267\145\360\071\114\143\240\221\171\223\122 -\017\124\335\203\273\237\321\217\247\123\163\303\313\377\060\354 -\174\004\270\330\104\037\223\137\161\011\042\267\156\076\352\034 -\003\116\235\032\040\141\373\201\067\354\136\374\012\105\253\327 -\347\027\125\320\240\352\140\233\246\366\343\214\133\051\302\006 -\140\024\235\055\227\114\251\223\025\235\141\304\001\137\110\326 -\130\275\126\061\022\116\021\310\041\340\263\021\221\145\333\264 -\246\210\070\316\125 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for Certificate "Cybertrust Global Root" -# Issuer: CN=Cybertrust Global Root,O="Cybertrust, Inc" -# Serial Number:04:00:00:00:00:01:0f:85:aa:2d:48 -# Subject: CN=Cybertrust Global Root,O="Cybertrust, Inc" -# Not Valid Before: Fri Dec 15 08:00:00 2006 -# Not Valid After : Wed Dec 15 08:00:00 2021 -# Fingerprint (MD5): 72:E4:4A:87:E3:69:40:80:77:EA:BC:E3:F4:FF:F0:E1 -# Fingerprint (SHA1): 5F:43:E5:B1:BF:F8:78:8C:AC:1C:C7:CA:4A:9A:C6:22:2B:CC:34:C6 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Cybertrust Global Root" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\137\103\345\261\277\370\170\214\254\034\307\312\112\232\306\042 -\053\314\064\306 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\162\344\112\207\343\151\100\200\167\352\274\343\364\377\360\341 -END -CKA_ISSUER MULTILINE_OCTAL -\060\073\061\030\060\026\006\003\125\004\012\023\017\103\171\142 -\145\162\164\162\165\163\164\054\040\111\156\143\061\037\060\035 -\006\003\125\004\003\023\026\103\171\142\145\162\164\162\165\163 -\164\040\107\154\157\142\141\154\040\122\157\157\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\013\004\000\000\000\000\001\017\205\252\055\110 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "ePKI Root Certification Authority" # @@ -4874,7 +4314,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: OU=ePKI Root Certification Authority,O="Chunghwa Telecom Co., Ltd.",C=TW # Not Valid Before: Mon Dec 20 02:31:27 2004 # Not Valid After : Wed Dec 20 02:31:27 2034 -# Fingerprint (MD5): 1B:2E:00:CA:26:06:90:3D:AD:FE:6F:15:68:D3:6B:B3 +# Fingerprint (SHA-256): C0:A6:F4:DC:63:A2:4B:FD:CF:54:EF:2A:6A:08:2A:0A:72:DE:35:80:3E:2F:F5:FF:52:7A:E5:D8:72:06:DF:D5 # Fingerprint (SHA1): 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -5001,13 +4441,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "ePKI Root Certification Authority" +# Trust for "ePKI Root Certification Authority" # Issuer: OU=ePKI Root Certification Authority,O="Chunghwa Telecom Co., Ltd.",C=TW # Serial Number:15:c8:bd:65:47:5c:af:b8:97:00:5e:e4:06:d2:bc:9d # Subject: OU=ePKI Root Certification Authority,O="Chunghwa Telecom Co., Ltd.",C=TW # Not Valid Before: Mon Dec 20 02:31:27 2004 # Not Valid After : Wed Dec 20 02:31:27 2034 -# Fingerprint (MD5): 1B:2E:00:CA:26:06:90:3D:AD:FE:6F:15:68:D3:6B:B3 +# Fingerprint (SHA-256): C0:A6:F4:DC:63:A2:4B:FD:CF:54:EF:2A:6A:08:2A:0A:72:DE:35:80:3E:2F:F5:FF:52:7A:E5:D8:72:06:DF:D5 # Fingerprint (SHA1): 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -5046,7 +4486,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: OU=certSIGN ROOT CA,O=certSIGN,C=RO # Not Valid Before: Tue Jul 04 17:20:04 2006 # Not Valid After : Fri Jul 04 17:20:04 2031 -# Fingerprint (MD5): 18:98:C0:D6:E9:3A:FC:F9:B0:F5:0C:F7:4B:01:44:17 +# Fingerprint (SHA-256): EA:A9:62:C4:FA:4A:6B:AF:EB:E4:15:19:6D:35:1C:CD:88:8D:4F:53:F3:FA:8A:E6:D7:C4:66:A9:4E:60:42:BB # Fingerprint (SHA1): FA:B7:EE:36:97:26:62:FB:2D:B0:2A:F6:BF:03:FD:E8:7C:4B:2F:9B CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -5128,13 +4568,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "certSIGN ROOT CA" +# Trust for "certSIGN ROOT CA" # Issuer: OU=certSIGN ROOT CA,O=certSIGN,C=RO # Serial Number:20:06:05:16:70:02 # Subject: OU=certSIGN ROOT CA,O=certSIGN,C=RO # Not Valid Before: Tue Jul 04 17:20:04 2006 # Not Valid After : Fri Jul 04 17:20:04 2031 -# Fingerprint (MD5): 18:98:C0:D6:E9:3A:FC:F9:B0:F5:0C:F7:4B:01:44:17 +# Fingerprint (SHA-256): EA:A9:62:C4:FA:4A:6B:AF:EB:E4:15:19:6D:35:1C:CD:88:8D:4F:53:F3:FA:8A:E6:D7:C4:66:A9:4E:60:42:BB # Fingerprint (SHA1): FA:B7:EE:36:97:26:62:FB:2D:B0:2A:F6:BF:03:FD:E8:7C:4B:2F:9B CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -5170,7 +4610,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=NetLock Arany (Class Gold) F..tan..s..tv..ny,OU=Tan..s..tv..nykiad..k (Certification Services),O=NetLock Kft.,L=Budapest,C=HU # Not Valid Before: Thu Dec 11 15:08:21 2008 # Not Valid After : Wed Dec 06 15:08:21 2028 -# Fingerprint (MD5): C5:A1:B7:FF:73:DD:D6:D7:34:32:18:DF:FC:3C:AD:88 +# Fingerprint (SHA-256): 6C:61:DA:C3:A2:DE:F0:31:50:6B:E0:36:D2:A6:FE:40:19:94:FB:D1:3D:F9:C8:D4:66:59:92:74:C4:46:EC:98 # Fingerprint (SHA1): 06:08:3F:59:3F:15:A1:04:A0:69:A4:6B:A9:03:D0:06:B7:97:09:91 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -5280,13 +4720,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "NetLock Arany (Class Gold) Főtanúsítvány" +# Trust for "NetLock Arany (Class Gold) Főtanúsítvány" # Issuer: CN=NetLock Arany (Class Gold) F..tan..s..tv..ny,OU=Tan..s..tv..nykiad..k (Certification Services),O=NetLock Kft.,L=Budapest,C=HU # Serial Number:49:41:2c:e4:00:10 # Subject: CN=NetLock Arany (Class Gold) F..tan..s..tv..ny,OU=Tan..s..tv..nykiad..k (Certification Services),O=NetLock Kft.,L=Budapest,C=HU # Not Valid Before: Thu Dec 11 15:08:21 2008 # Not Valid After : Wed Dec 06 15:08:21 2028 -# Fingerprint (MD5): C5:A1:B7:FF:73:DD:D6:D7:34:32:18:DF:FC:3C:AD:88 +# Fingerprint (SHA-256): 6C:61:DA:C3:A2:DE:F0:31:50:6B:E0:36:D2:A6:FE:40:19:94:FB:D1:3D:F9:C8:D4:66:59:92:74:C4:46:EC:98 # Fingerprint (SHA1): 06:08:3F:59:3F:15:A1:04:A0:69:A4:6B:A9:03:D0:06:B7:97:09:91 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -5329,7 +4769,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Hongkong Post Root CA 1,O=Hongkong Post,C=HK # Not Valid Before: Thu May 15 05:13:14 2003 # Not Valid After : Mon May 15 04:52:29 2023 -# Fingerprint (MD5): A8:0D:6F:39:78:B9:43:6D:77:42:6D:98:5A:CC:23:CA +# Fingerprint (SHA-256): F9:E6:7D:33:6C:51:00:2A:C0:54:C6:32:02:2D:66:DD:A2:E7:E3:FF:F1:0A:D0:61:ED:31:D8:BB:B4:10:CF:B2 # Fingerprint (SHA1): D6:DA:A8:20:8D:09:D2:15:4D:24:B5:2F:CB:34:6E:B2:58:B2:8A:58 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -5413,13 +4853,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Hongkong Post Root CA 1" +# Trust for "Hongkong Post Root CA 1" # Issuer: CN=Hongkong Post Root CA 1,O=Hongkong Post,C=HK # Serial Number: 1000 (0x3e8) # Subject: CN=Hongkong Post Root CA 1,O=Hongkong Post,C=HK # Not Valid Before: Thu May 15 05:13:14 2003 # Not Valid After : Mon May 15 04:52:29 2023 -# Fingerprint (MD5): A8:0D:6F:39:78:B9:43:6D:77:42:6D:98:5A:CC:23:CA +# Fingerprint (SHA-256): F9:E6:7D:33:6C:51:00:2A:C0:54:C6:32:02:2D:66:DD:A2:E7:E3:FF:F1:0A:D0:61:ED:31:D8:BB:B4:10:CF:B2 # Fingerprint (SHA1): D6:DA:A8:20:8D:09:D2:15:4D:24:B5:2F:CB:34:6E:B2:58:B2:8A:58 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -5456,7 +4896,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=SecureSign RootCA11,O="Japan Certification Services, Inc.",C=JP # Not Valid Before: Wed Apr 08 04:56:47 2009 # Not Valid After : Sun Apr 08 04:56:47 2029 -# Fingerprint (MD5): B7:52:74:E2:92:B4:80:93:F2:75:E4:CC:D7:F2:EA:26 +# Fingerprint (SHA-256): BF:0F:EE:FB:9E:3A:58:1A:D5:F9:E9:DB:75:89:98:57:43:D2:61:08:5C:4D:31:4F:6F:5D:72:59:AA:42:16:12 # Fingerprint (SHA1): 3B:C4:9F:48:F8:F3:73:A0:9C:1E:BD:F8:5B:B1:C3:65:C7:D8:11:B3 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -5546,13 +4986,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "SecureSign RootCA11" +# Trust for "SecureSign RootCA11" # Issuer: CN=SecureSign RootCA11,O="Japan Certification Services, Inc.",C=JP # Serial Number: 1 (0x1) # Subject: CN=SecureSign RootCA11,O="Japan Certification Services, Inc.",C=JP # Not Valid Before: Wed Apr 08 04:56:47 2009 # Not Valid After : Sun Apr 08 04:56:47 2029 -# Fingerprint (MD5): B7:52:74:E2:92:B4:80:93:F2:75:E4:CC:D7:F2:EA:26 +# Fingerprint (SHA-256): BF:0F:EE:FB:9E:3A:58:1A:D5:F9:E9:DB:75:89:98:57:43:D2:61:08:5C:4D:31:4F:6F:5D:72:59:AA:42:16:12 # Fingerprint (SHA1): 3B:C4:9F:48:F8:F3:73:A0:9C:1E:BD:F8:5B:B1:C3:65:C7:D8:11:B3 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -5590,7 +5030,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: E=info@e-szigno.hu,CN=Microsec e-Szigno Root CA 2009,O=Microsec Ltd.,L=Budapest,C=HU # Not Valid Before: Tue Jun 16 11:30:18 2009 # Not Valid After : Sun Dec 30 11:30:18 2029 -# Fingerprint (MD5): F8:49:F4:03:BC:44:2D:83:BE:48:69:7D:29:64:FC:B1 +# Fingerprint (SHA-256): 3C:5F:81:FE:A5:FA:B8:2C:64:BF:A2:EA:EC:AF:CD:E8:E0:77:FC:86:20:A7:CA:E5:37:16:3D:F3:6E:DB:F3:78 # Fingerprint (SHA1): 89:DF:74:FE:5C:F4:0F:4A:80:F9:E3:37:7D:54:DA:91:E1:01:31:8E CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -5695,13 +5135,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Microsec e-Szigno Root CA 2009" +# Trust for "Microsec e-Szigno Root CA 2009" # Issuer: E=info@e-szigno.hu,CN=Microsec e-Szigno Root CA 2009,O=Microsec Ltd.,L=Budapest,C=HU # Serial Number:00:c2:7e:43:04:4e:47:3f:19 # Subject: E=info@e-szigno.hu,CN=Microsec e-Szigno Root CA 2009,O=Microsec Ltd.,L=Budapest,C=HU # Not Valid Before: Tue Jun 16 11:30:18 2009 # Not Valid After : Sun Dec 30 11:30:18 2029 -# Fingerprint (MD5): F8:49:F4:03:BC:44:2D:83:BE:48:69:7D:29:64:FC:B1 +# Fingerprint (SHA-256): 3C:5F:81:FE:A5:FA:B8:2C:64:BF:A2:EA:EC:AF:CD:E8:E0:77:FC:86:20:A7:CA:E5:37:16:3D:F3:6E:DB:F3:78 # Fingerprint (SHA1): 89:DF:74:FE:5C:F4:0F:4A:80:F9:E3:37:7D:54:DA:91:E1:01:31:8E CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -5742,7 +5182,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R3 # Not Valid Before: Wed Mar 18 10:00:00 2009 # Not Valid After : Sun Mar 18 10:00:00 2029 -# Fingerprint (MD5): C5:DF:B8:49:CA:05:13:55:EE:2D:BA:1A:C3:3E:B0:28 +# Fingerprint (SHA-256): CB:B5:22:D7:B7:F1:27:AD:6A:01:13:86:5B:DF:1C:D4:10:2E:7D:07:59:AF:63:5A:7C:F4:72:0D:C9:63:C5:3B # Fingerprint (SHA1): D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -5829,13 +5269,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "GlobalSign Root CA - R3" +# Trust for "GlobalSign Root CA - R3" # Issuer: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R3 # Serial Number:04:00:00:00:00:01:21:58:53:08:a2 # Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R3 # Not Valid Before: Wed Mar 18 10:00:00 2009 # Not Valid After : Sun Mar 18 10:00:00 2029 -# Fingerprint (MD5): C5:DF:B8:49:CA:05:13:55:EE:2D:BA:1A:C3:3E:B0:28 +# Fingerprint (SHA-256): CB:B5:22:D7:B7:F1:27:AD:6A:01:13:86:5B:DF:1C:D4:10:2E:7D:07:59:AF:63:5A:7C:F4:72:0D:C9:63:C5:3B # Fingerprint (SHA1): D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -5872,7 +5312,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068,C=ES # Not Valid Before: Wed May 20 08:38:15 2009 # Not Valid After : Tue Dec 31 08:38:15 2030 -# Fingerprint (MD5): 73:3A:74:7A:EC:BB:A3:96:A6:C2:E4:E2:C8:9B:C0:C3 +# Fingerprint (SHA-256): 04:04:80:28:BF:1F:28:64:D4:8F:9A:D4:D8:32:94:36:6A:82:88:56:55:3F:3B:14:30:3F:90:14:7F:5D:40:EF # Fingerprint (SHA1): AE:C5:FB:3F:C8:E1:BF:C4:E5:4F:03:07:5A:9A:E8:00:B7:F7:B6:FA CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -6004,13 +5444,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Trust for "Autoridad de Certificacion Firmaprofesional CIF A62634068" # Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068,C=ES # Serial Number:53:ec:3b:ee:fb:b2:48:5f # Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068,C=ES # Not Valid Before: Wed May 20 08:38:15 2009 # Not Valid After : Tue Dec 31 08:38:15 2030 -# Fingerprint (MD5): 73:3A:74:7A:EC:BB:A3:96:A6:C2:E4:E2:C8:9B:C0:C3 +# Fingerprint (SHA-256): 04:04:80:28:BF:1F:28:64:D4:8F:9A:D4:D8:32:94:36:6A:82:88:56:55:3F:3B:14:30:3F:90:14:7F:5D:40:EF # Fingerprint (SHA1): AE:C5:FB:3F:C8:E1:BF:C4:E5:4F:03:07:5A:9A:E8:00:B7:F7:B6:FA CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -6048,7 +5488,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Izenpe.com,O=IZENPE S.A.,C=ES # Not Valid Before: Thu Dec 13 13:08:28 2007 # Not Valid After : Sun Dec 13 08:27:25 2037 -# Fingerprint (MD5): A6:B0:CD:85:80:DA:5C:50:34:A3:39:90:2F:55:67:73 +# Fingerprint (SHA-256): 25:30:CC:8E:98:32:15:02:BA:D9:6F:9B:1F:BA:1B:09:9E:2D:29:9E:0F:45:48:BB:91:4F:36:3B:C0:D4:53:1F # Fingerprint (SHA1): 2F:78:3D:25:52:18:A7:4A:65:39:71:B5:2C:A2:9C:45:15:6F:E9:19 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -6175,13 +5615,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Izenpe.com" +# Trust for "Izenpe.com" # Issuer: CN=Izenpe.com,O=IZENPE S.A.,C=ES # Serial Number:00:b0:b7:5a:16:48:5f:bf:e1:cb:f5:8b:d7:19:e6:7d # Subject: CN=Izenpe.com,O=IZENPE S.A.,C=ES # Not Valid Before: Thu Dec 13 13:08:28 2007 # Not Valid After : Sun Dec 13 08:27:25 2037 -# Fingerprint (MD5): A6:B0:CD:85:80:DA:5C:50:34:A3:39:90:2F:55:67:73 +# Fingerprint (SHA-256): 25:30:CC:8E:98:32:15:02:BA:D9:6F:9B:1F:BA:1B:09:9E:2D:29:9E:0F:45:48:BB:91:4F:36:3B:C0:D4:53:1F # Fingerprint (SHA1): 2F:78:3D:25:52:18:A7:4A:65:39:71:B5:2C:A2:9C:45:15:6F:E9:19 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -6218,7 +5658,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Chambers of Commerce Root - 2008,O=AC Camerfirma S.A.,serialNumber=A82743287,L=Madrid (see current address at www.camerfirma.com/address),C=EU # Not Valid Before: Fri Aug 01 12:29:50 2008 # Not Valid After : Sat Jul 31 12:29:50 2038 -# Fingerprint (MD5): 5E:80:9E:84:5A:0E:65:0B:17:02:F3:55:18:2A:3E:D7 +# Fingerprint (SHA-256): 06:3E:4A:FA:C4:91:DF:D3:32:F3:08:9B:85:42:E9:46:17:D8:93:D7:FE:94:4E:10:A7:93:7E:E2:9D:96:93:C0 # Fingerprint (SHA1): 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -6382,13 +5822,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Chambers of Commerce Root - 2008" +# Trust for "Chambers of Commerce Root - 2008" # Issuer: CN=Chambers of Commerce Root - 2008,O=AC Camerfirma S.A.,serialNumber=A82743287,L=Madrid (see current address at www.camerfirma.com/address),C=EU # Serial Number:00:a3:da:42:7e:a4:b1:ae:da # Subject: CN=Chambers of Commerce Root - 2008,O=AC Camerfirma S.A.,serialNumber=A82743287,L=Madrid (see current address at www.camerfirma.com/address),C=EU # Not Valid Before: Fri Aug 01 12:29:50 2008 # Not Valid After : Sat Jul 31 12:29:50 2038 -# Fingerprint (MD5): 5E:80:9E:84:5A:0E:65:0B:17:02:F3:55:18:2A:3E:D7 +# Fingerprint (SHA-256): 06:3E:4A:FA:C4:91:DF:D3:32:F3:08:9B:85:42:E9:46:17:D8:93:D7:FE:94:4E:10:A7:93:7E:E2:9D:96:93:C0 # Fingerprint (SHA1): 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -6432,7 +5872,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Global Chambersign Root - 2008,O=AC Camerfirma S.A.,serialNumber=A82743287,L=Madrid (see current address at www.camerfirma.com/address),C=EU # Not Valid Before: Fri Aug 01 12:31:40 2008 # Not Valid After : Sat Jul 31 12:31:40 2038 -# Fingerprint (MD5): 9E:80:FF:78:01:0C:2E:C1:36:BD:FE:96:90:6E:08:F3 +# Fingerprint (SHA-256): 13:63:35:43:93:34:A7:69:80:16:A0:D3:24:DE:72:28:4E:07:9D:7B:52:20:BB:8F:BD:74:78:16:EE:BE:BA:CA # Fingerprint (SHA1): 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -6593,13 +6033,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Global Chambersign Root - 2008" +# Trust for "Global Chambersign Root - 2008" # Issuer: CN=Global Chambersign Root - 2008,O=AC Camerfirma S.A.,serialNumber=A82743287,L=Madrid (see current address at www.camerfirma.com/address),C=EU # Serial Number:00:c9:cd:d3:e9:d5:7d:23:ce # Subject: CN=Global Chambersign Root - 2008,O=AC Camerfirma S.A.,serialNumber=A82743287,L=Madrid (see current address at www.camerfirma.com/address),C=EU # Not Valid Before: Fri Aug 01 12:31:40 2008 # Not Valid After : Sat Jul 31 12:31:40 2038 -# Fingerprint (MD5): 9E:80:FF:78:01:0C:2E:C1:36:BD:FE:96:90:6E:08:F3 +# Fingerprint (SHA-256): 13:63:35:43:93:34:A7:69:80:16:A0:D3:24:DE:72:28:4E:07:9D:7B:52:20:BB:8F:BD:74:78:16:EE:BE:BA:CA # Fingerprint (SHA1): 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -6642,7 +6082,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Go Daddy Root Certificate Authority - G2,O="GoDaddy.com, Inc.",L=Scottsdale,ST=Arizona,C=US # Not Valid Before: Tue Sep 01 00:00:00 2009 # Not Valid After : Thu Dec 31 23:59:59 2037 -# Fingerprint (MD5): 80:3A:BC:22:C1:E6:FB:8D:9B:3B:27:4A:32:1B:9A:01 +# Fingerprint (SHA-256): 45:14:0B:32:47:EB:9C:C8:C5:B4:F0:D7:B5:30:91:F7:32:92:08:9E:6E:5A:63:E2:74:9D:D3:AC:A9:19:8E:DA # Fingerprint (SHA1): 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -6743,13 +6183,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Go Daddy Root Certificate Authority - G2" +# Trust for "Go Daddy Root Certificate Authority - G2" # Issuer: CN=Go Daddy Root Certificate Authority - G2,O="GoDaddy.com, Inc.",L=Scottsdale,ST=Arizona,C=US # Serial Number: 0 (0x0) # Subject: CN=Go Daddy Root Certificate Authority - G2,O="GoDaddy.com, Inc.",L=Scottsdale,ST=Arizona,C=US # Not Valid Before: Tue Sep 01 00:00:00 2009 # Not Valid After : Thu Dec 31 23:59:59 2037 -# Fingerprint (MD5): 80:3A:BC:22:C1:E6:FB:8D:9B:3B:27:4A:32:1B:9A:01 +# Fingerprint (SHA-256): 45:14:0B:32:47:EB:9C:C8:C5:B4:F0:D7:B5:30:91:F7:32:92:08:9E:6E:5A:63:E2:74:9D:D3:AC:A9:19:8E:DA # Fingerprint (SHA1): 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -6790,7 +6230,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Starfield Root Certificate Authority - G2,O="Starfield Technologies, Inc.",L=Scottsdale,ST=Arizona,C=US # Not Valid Before: Tue Sep 01 00:00:00 2009 # Not Valid After : Thu Dec 31 23:59:59 2037 -# Fingerprint (MD5): D6:39:81:C6:52:7E:96:69:FC:FC:CA:66:ED:05:F2:96 +# Fingerprint (SHA-256): 2C:E1:CB:0B:F9:D2:F9:E1:02:99:3F:BE:21:51:52:C3:B2:DD:0C:AB:DE:1C:68:E5:31:9B:83:91:54:DB:B7:F5 # Fingerprint (SHA1): B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -6895,13 +6335,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Starfield Root Certificate Authority - G2" +# Trust for "Starfield Root Certificate Authority - G2" # Issuer: CN=Starfield Root Certificate Authority - G2,O="Starfield Technologies, Inc.",L=Scottsdale,ST=Arizona,C=US # Serial Number: 0 (0x0) # Subject: CN=Starfield Root Certificate Authority - G2,O="Starfield Technologies, Inc.",L=Scottsdale,ST=Arizona,C=US # Not Valid Before: Tue Sep 01 00:00:00 2009 # Not Valid After : Thu Dec 31 23:59:59 2037 -# Fingerprint (MD5): D6:39:81:C6:52:7E:96:69:FC:FC:CA:66:ED:05:F2:96 +# Fingerprint (SHA-256): 2C:E1:CB:0B:F9:D2:F9:E1:02:99:3F:BE:21:51:52:C3:B2:DD:0C:AB:DE:1C:68:E5:31:9B:83:91:54:DB:B7:F5 # Fingerprint (SHA1): B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -6943,7 +6383,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Starfield Services Root Certificate Authority - G2,O="Starfield Technologies, Inc.",L=Scottsdale,ST=Arizona,C=US # Not Valid Before: Tue Sep 01 00:00:00 2009 # Not Valid After : Thu Dec 31 23:59:59 2037 -# Fingerprint (MD5): 17:35:74:AF:7B:61:1C:EB:F4:F9:3C:E2:EE:40:F9:A2 +# Fingerprint (SHA-256): 56:8D:69:05:A2:C8:87:08:A4:B3:02:51:90:ED:CF:ED:B1:97:4A:60:6A:13:C6:E5:29:0F:CB:2A:E6:3E:DA:B5 # Fingerprint (SHA1): 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -7049,13 +6489,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Starfield Services Root Certificate Authority - G2" +# Trust for "Starfield Services Root Certificate Authority - G2" # Issuer: CN=Starfield Services Root Certificate Authority - G2,O="Starfield Technologies, Inc.",L=Scottsdale,ST=Arizona,C=US # Serial Number: 0 (0x0) # Subject: CN=Starfield Services Root Certificate Authority - G2,O="Starfield Technologies, Inc.",L=Scottsdale,ST=Arizona,C=US # Not Valid Before: Tue Sep 01 00:00:00 2009 # Not Valid After : Thu Dec 31 23:59:59 2037 -# Fingerprint (MD5): 17:35:74:AF:7B:61:1C:EB:F4:F9:3C:E2:EE:40:F9:A2 +# Fingerprint (SHA-256): 56:8D:69:05:A2:C8:87:08:A4:B3:02:51:90:ED:CF:ED:B1:97:4A:60:6A:13:C6:E5:29:0F:CB:2A:E6:3E:DA:B5 # Fingerprint (SHA1): 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -7097,7 +6537,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=AffirmTrust Commercial,O=AffirmTrust,C=US # Not Valid Before: Fri Jan 29 14:06:06 2010 # Not Valid After : Tue Dec 31 14:06:06 2030 -# Fingerprint (MD5): 82:92:BA:5B:EF:CD:8A:6F:A6:3D:55:F9:84:F6:D6:B7 +# Fingerprint (SHA-256): 03:76:AB:1D:54:C5:F9:80:3C:E4:B2:E2:01:A0:EE:7E:EF:7B:57:B6:36:E8:A9:3C:9B:8D:48:60:C9:6F:5F:A7 # Fingerprint (SHA1): F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -7182,13 +6622,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "AffirmTrust Commercial" +# Trust for "AffirmTrust Commercial" # Issuer: CN=AffirmTrust Commercial,O=AffirmTrust,C=US # Serial Number:77:77:06:27:26:a9:b1:7c # Subject: CN=AffirmTrust Commercial,O=AffirmTrust,C=US # Not Valid Before: Fri Jan 29 14:06:06 2010 # Not Valid After : Tue Dec 31 14:06:06 2030 -# Fingerprint (MD5): 82:92:BA:5B:EF:CD:8A:6F:A6:3D:55:F9:84:F6:D6:B7 +# Fingerprint (SHA-256): 03:76:AB:1D:54:C5:F9:80:3C:E4:B2:E2:01:A0:EE:7E:EF:7B:57:B6:36:E8:A9:3C:9B:8D:48:60:C9:6F:5F:A7 # Fingerprint (SHA1): F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -7225,7 +6665,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=AffirmTrust Networking,O=AffirmTrust,C=US # Not Valid Before: Fri Jan 29 14:08:24 2010 # Not Valid After : Tue Dec 31 14:08:24 2030 -# Fingerprint (MD5): 42:65:CA:BE:01:9A:9A:4C:A9:8C:41:49:CD:C0:D5:7F +# Fingerprint (SHA-256): 0A:81:EC:5A:92:97:77:F1:45:90:4A:F3:8D:5D:50:9F:66:B5:E2:C5:8F:CD:B5:31:05:8B:0E:17:F3:F0:B4:1B # Fingerprint (SHA1): 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -7310,13 +6750,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "AffirmTrust Networking" +# Trust for "AffirmTrust Networking" # Issuer: CN=AffirmTrust Networking,O=AffirmTrust,C=US # Serial Number:7c:4f:04:39:1c:d4:99:2d # Subject: CN=AffirmTrust Networking,O=AffirmTrust,C=US # Not Valid Before: Fri Jan 29 14:08:24 2010 # Not Valid After : Tue Dec 31 14:08:24 2030 -# Fingerprint (MD5): 42:65:CA:BE:01:9A:9A:4C:A9:8C:41:49:CD:C0:D5:7F +# Fingerprint (SHA-256): 0A:81:EC:5A:92:97:77:F1:45:90:4A:F3:8D:5D:50:9F:66:B5:E2:C5:8F:CD:B5:31:05:8B:0E:17:F3:F0:B4:1B # Fingerprint (SHA1): 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -7353,7 +6793,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=AffirmTrust Premium,O=AffirmTrust,C=US # Not Valid Before: Fri Jan 29 14:10:36 2010 # Not Valid After : Mon Dec 31 14:10:36 2040 -# Fingerprint (MD5): C4:5D:0E:48:B6:AC:28:30:4E:0A:BC:F9:38:16:87:57 +# Fingerprint (SHA-256): 70:A7:3F:7F:37:6B:60:07:42:48:90:45:34:B1:14:82:D5:BF:0E:69:8E:CC:49:8D:F5:25:77:EB:F2:E9:3B:9A # Fingerprint (SHA1): D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -7470,13 +6910,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "AffirmTrust Premium" +# Trust for "AffirmTrust Premium" # Issuer: CN=AffirmTrust Premium,O=AffirmTrust,C=US # Serial Number:6d:8c:14:46:b1:a6:0a:ee # Subject: CN=AffirmTrust Premium,O=AffirmTrust,C=US # Not Valid Before: Fri Jan 29 14:10:36 2010 # Not Valid After : Mon Dec 31 14:10:36 2040 -# Fingerprint (MD5): C4:5D:0E:48:B6:AC:28:30:4E:0A:BC:F9:38:16:87:57 +# Fingerprint (SHA-256): 70:A7:3F:7F:37:6B:60:07:42:48:90:45:34:B1:14:82:D5:BF:0E:69:8E:CC:49:8D:F5:25:77:EB:F2:E9:3B:9A # Fingerprint (SHA1): D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -7513,7 +6953,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=AffirmTrust Premium ECC,O=AffirmTrust,C=US # Not Valid Before: Fri Jan 29 14:20:24 2010 # Not Valid After : Mon Dec 31 14:20:24 2040 -# Fingerprint (MD5): 64:B0:09:55:CF:B1:D5:99:E2:BE:13:AB:A6:5D:EA:4D +# Fingerprint (SHA-256): BD:71:FD:F6:DA:97:E4:CF:62:D1:64:7A:DD:25:81:B0:7D:79:AD:F8:39:7E:B4:EC:BA:9C:5E:84:88:82:14:23 # Fingerprint (SHA1): B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -7578,13 +7018,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "AffirmTrust Premium ECC" +# Trust for "AffirmTrust Premium ECC" # Issuer: CN=AffirmTrust Premium ECC,O=AffirmTrust,C=US # Serial Number:74:97:25:8a:c7:3f:7a:54 # Subject: CN=AffirmTrust Premium ECC,O=AffirmTrust,C=US # Not Valid Before: Fri Jan 29 14:20:24 2010 # Not Valid After : Mon Dec 31 14:20:24 2040 -# Fingerprint (MD5): 64:B0:09:55:CF:B1:D5:99:E2:BE:13:AB:A6:5D:EA:4D +# Fingerprint (SHA-256): BD:71:FD:F6:DA:97:E4:CF:62:D1:64:7A:DD:25:81:B0:7D:79:AD:F8:39:7E:B4:EC:BA:9C:5E:84:88:82:14:23 # Fingerprint (SHA1): B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -7621,7 +7061,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Certum Trusted Network CA,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL # Not Valid Before: Wed Oct 22 12:07:37 2008 # Not Valid After : Mon Dec 31 12:07:37 2029 -# Fingerprint (MD5): D5:E9:81:40:C5:18:69:FC:46:2C:89:75:62:0F:AA:78 +# Fingerprint (SHA-256): 5C:58:46:8D:55:F5:8E:49:7E:74:39:82:D2:B5:00:10:B6:D1:65:37:4A:CF:83:A7:D4:A3:2D:B7:68:C4:40:8E # Fingerprint (SHA1): 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -7719,13 +7159,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Certum Trusted Network CA" +# Trust for "Certum Trusted Network CA" # Issuer: CN=Certum Trusted Network CA,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL # Serial Number: 279744 (0x444c0) # Subject: CN=Certum Trusted Network CA,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL # Not Valid Before: Wed Oct 22 12:07:37 2008 # Not Valid After : Mon Dec 31 12:07:37 2029 -# Fingerprint (MD5): D5:E9:81:40:C5:18:69:FC:46:2C:89:75:62:0F:AA:78 +# Fingerprint (SHA-256): 5C:58:46:8D:55:F5:8E:49:7E:74:39:82:D2:B5:00:10:B6:D1:65:37:4A:CF:83:A7:D4:A3:2D:B7:68:C4:40:8E # Fingerprint (SHA1): 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -7765,7 +7205,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=TWCA Root Certification Authority,OU=Root CA,O=TAIWAN-CA,C=TW # Not Valid Before: Thu Aug 28 07:24:33 2008 # Not Valid After : Tue Dec 31 15:59:59 2030 -# Fingerprint (MD5): AA:08:8F:F6:F9:7B:B7:F2:B1:A7:1E:9B:EA:EA:BD:79 +# Fingerprint (SHA-256): BF:D8:8F:E1:10:1C:41:AE:3E:80:1B:F8:BE:56:35:0E:E9:BA:D1:A6:B9:BD:51:5E:DC:5C:6D:5B:87:11:AC:44 # Fingerprint (SHA1): CF:9E:87:6D:D3:EB:FC:42:26:97:A3:B5:A3:7A:A0:76:A9:06:23:48 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -7857,13 +7297,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "TWCA Root Certification Authority" +# Trust for "TWCA Root Certification Authority" # Issuer: CN=TWCA Root Certification Authority,OU=Root CA,O=TAIWAN-CA,C=TW # Serial Number: 1 (0x1) # Subject: CN=TWCA Root Certification Authority,OU=Root CA,O=TAIWAN-CA,C=TW # Not Valid Before: Thu Aug 28 07:24:33 2008 # Not Valid After : Tue Dec 31 15:59:59 2030 -# Fingerprint (MD5): AA:08:8F:F6:F9:7B:B7:F2:B1:A7:1E:9B:EA:EA:BD:79 +# Fingerprint (SHA-256): BF:D8:8F:E1:10:1C:41:AE:3E:80:1B:F8:BE:56:35:0E:E9:BA:D1:A6:B9:BD:51:5E:DC:5C:6D:5B:87:11:AC:44 # Fingerprint (SHA1): CF:9E:87:6D:D3:EB:FC:42:26:97:A3:B5:A3:7A:A0:76:A9:06:23:48 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -8063,187 +7503,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_NOT_TRUSTED CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_NOT_TRUSTED CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Explicitly Distrusted DigiNotar PKIoverheid G2" -# -# Issuer: CN=DigiNotar PKIoverheid CA Organisatie - G2,O=DigiNotar B.V.,C=NL -# Serial Number: 268435455 (0xfffffff) -# Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2,O=DigiNotar B.V.,C=NL -# Not Valid Before: Wed May 12 08:51:39 2010 -# Not Valid After : Mon Mar 23 09:50:05 2020 -# Fingerprint (MD5): 2E:61:A2:D1:78:CE:EE:BF:59:33:B0:23:14:0F:94:1C -# Fingerprint (SHA1): D5:F2:57:A9:BF:2D:D0:3F:8B:46:57:F9:2B:C9:A4:C6:92:E1:42:42 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Explicitly Distrusted DigiNotar PKIoverheid G2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\132\061\013\060\011\006\003\125\004\006\023\002\116\114\061 -\027\060\025\006\003\125\004\012\014\016\104\151\147\151\116\157 -\164\141\162\040\102\056\126\056\061\062\060\060\006\003\125\004 -\003\014\051\104\151\147\151\116\157\164\141\162\040\120\113\111 -\157\166\145\162\150\145\151\144\040\103\101\040\117\162\147\141 -\156\151\163\141\164\151\145\040\055\040\107\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\132\061\013\060\011\006\003\125\004\006\023\002\116\114\061 -\027\060\025\006\003\125\004\012\014\016\104\151\147\151\116\157 -\164\141\162\040\102\056\126\056\061\062\060\060\006\003\125\004 -\003\014\051\104\151\147\151\116\157\164\141\162\040\120\113\111 -\157\166\145\162\150\145\151\144\040\103\101\040\117\162\147\141 -\156\151\163\141\164\151\145\040\055\040\107\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\004\017\377\377\377 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\006\225\060\202\004\175\240\003\002\001\002\002\004\017 -\377\377\377\060\015\006\011\052\206\110\206\367\015\001\001\013 -\005\000\060\132\061\013\060\011\006\003\125\004\006\023\002\116 -\114\061\027\060\025\006\003\125\004\012\014\016\104\151\147\151 -\116\157\164\141\162\040\102\056\126\056\061\062\060\060\006\003 -\125\004\003\014\051\104\151\147\151\116\157\164\141\162\040\120 -\113\111\157\166\145\162\150\145\151\144\040\103\101\040\117\162 -\147\141\156\151\163\141\164\151\145\040\055\040\107\062\060\036 -\027\015\061\060\060\065\061\062\060\070\065\061\063\071\132\027 -\015\062\060\060\063\062\063\060\071\065\060\060\065\132\060\132 -\061\013\060\011\006\003\125\004\006\023\002\116\114\061\027\060 -\025\006\003\125\004\012\014\016\104\151\147\151\116\157\164\141 -\162\040\102\056\126\056\061\062\060\060\006\003\125\004\003\014 -\051\104\151\147\151\116\157\164\141\162\040\120\113\111\157\166 -\145\162\150\145\151\144\040\103\101\040\117\162\147\141\156\151 -\163\141\164\151\145\040\055\040\107\062\060\202\002\042\060\015 -\006\011\052\206\110\206\367\015\001\001\001\005\000\003\202\002 -\017\000\060\202\002\012\002\202\002\001\000\261\023\031\017\047 -\346\154\324\125\206\113\320\354\211\212\105\221\170\254\107\275 -\107\053\344\374\105\353\117\264\046\163\133\067\323\303\177\366 -\343\336\327\243\370\055\150\305\010\076\113\224\326\344\207\045 -\066\153\204\265\030\164\363\050\130\163\057\233\152\317\274\004 -\036\366\336\335\257\374\113\252\365\333\146\142\045\001\045\202 -\336\362\227\132\020\156\335\135\251\042\261\004\251\043\163\072 -\370\161\255\035\317\204\104\353\107\321\257\155\310\174\050\253 -\307\362\067\172\164\137\137\305\002\024\212\243\132\343\033\154 -\001\343\135\216\331\150\326\364\011\033\062\334\221\265\054\365 -\040\353\214\003\155\046\111\270\223\304\205\135\330\322\233\257 -\126\152\314\005\063\314\240\102\236\064\125\104\234\153\240\324 -\022\320\053\124\315\267\211\015\345\366\353\350\373\205\001\063 -\117\172\153\361\235\162\063\226\016\367\262\204\245\245\047\304 -\047\361\121\163\051\167\272\147\156\376\114\334\264\342\241\241 -\201\057\071\111\215\103\070\023\316\320\245\134\302\207\072\000 -\147\145\102\043\361\066\131\012\035\243\121\310\274\243\224\052 -\061\337\343\074\362\235\032\074\004\260\357\261\012\060\023\163 -\266\327\363\243\114\001\165\024\205\170\300\327\212\071\130\205 -\120\372\056\346\305\276\317\213\077\257\217\066\324\045\011\055 -\322\017\254\162\223\362\277\213\324\120\263\371\025\120\233\231 -\365\024\331\373\213\221\243\062\046\046\240\370\337\073\140\201 -\206\203\171\133\053\353\023\075\051\072\301\155\335\275\236\216 -\207\326\112\256\064\227\005\356\024\246\366\334\070\176\112\351 -\044\124\007\075\227\150\067\106\153\015\307\250\041\257\023\124 -\344\011\152\361\115\106\012\311\135\373\233\117\275\336\373\267 -\124\313\270\070\234\247\071\373\152\055\300\173\215\253\245\247 -\127\354\112\222\212\063\305\341\040\134\163\330\220\222\053\200 -\325\017\206\030\151\174\071\117\204\206\274\367\114\133\363\325 -\264\312\240\302\360\067\042\312\171\122\037\123\346\252\363\220 -\260\073\335\362\050\375\254\353\305\006\044\240\311\324\057\017 -\130\375\265\236\354\017\317\262\131\320\242\004\172\070\152\256 -\162\373\275\360\045\142\224\011\247\005\013\002\003\001\000\001 -\243\202\001\141\060\202\001\135\060\110\006\003\125\035\040\004 -\101\060\077\060\075\006\004\125\035\040\000\060\065\060\063\006 -\010\053\006\001\005\005\007\002\001\026\047\150\164\164\160\072 -\057\057\167\167\167\056\144\151\147\151\156\157\164\141\162\056 -\156\154\057\143\160\163\057\160\153\151\157\166\145\162\150\145 -\151\144\060\017\006\003\125\035\023\001\001\377\004\005\060\003 -\001\001\377\060\016\006\003\125\035\017\001\001\377\004\004\003 -\002\001\006\060\201\205\006\003\125\035\043\004\176\060\174\200 -\024\071\020\213\111\222\134\333\141\022\040\315\111\235\032\216 -\332\234\147\100\271\241\136\244\134\060\132\061\013\060\011\006 -\003\125\004\006\023\002\116\114\061\036\060\034\006\003\125\004 -\012\014\025\123\164\141\141\164\040\144\145\162\040\116\145\144 -\145\162\154\141\156\144\145\156\061\053\060\051\006\003\125\004 -\003\014\042\123\164\141\141\164\040\144\145\162\040\116\145\144 -\145\162\154\141\156\144\145\156\040\122\157\157\164\040\103\101 -\040\055\040\107\062\202\004\000\230\226\364\060\111\006\003\125 -\035\037\004\102\060\100\060\076\240\074\240\072\206\070\150\164 -\164\160\072\057\057\143\162\154\056\160\153\151\157\166\145\162 -\150\145\151\144\056\156\154\057\104\157\155\117\162\147\141\156 -\151\163\141\164\151\145\114\141\164\145\163\164\103\122\114\055 -\107\062\056\143\162\154\060\035\006\003\125\035\016\004\026\004 -\024\274\135\224\073\331\253\173\003\045\163\141\302\333\055\356 -\374\253\217\145\241\060\015\006\011\052\206\110\206\367\015\001 -\001\013\005\000\003\202\002\001\000\217\374\055\114\267\331\055 -\325\037\275\357\313\364\267\150\027\165\235\116\325\367\335\234 -\361\052\046\355\237\242\266\034\003\325\123\263\354\010\317\064 -\342\343\303\364\265\026\057\310\303\276\327\323\163\253\000\066 -\371\032\112\176\326\143\351\136\106\272\245\266\216\025\267\243 -\052\330\103\035\357\135\310\037\201\205\263\213\367\377\074\364 -\331\364\106\010\077\234\274\035\240\331\250\114\315\045\122\116 -\012\261\040\367\037\351\103\331\124\106\201\023\232\300\136\164 -\154\052\230\062\352\374\167\273\015\245\242\061\230\042\176\174 -\174\347\332\244\255\354\267\056\032\031\161\370\110\120\332\103 -\217\054\204\335\301\100\047\343\265\360\025\116\226\324\370\134 -\343\206\051\106\053\327\073\007\353\070\177\310\206\127\227\323 -\357\052\063\304\027\120\325\144\151\153\053\153\105\136\135\057 -\027\312\132\116\317\303\327\071\074\365\073\237\106\271\233\347 -\016\111\227\235\326\325\343\033\017\352\217\001\116\232\023\224 -\131\012\002\007\110\113\032\140\253\177\117\355\013\330\125\015 -\150\157\125\234\151\145\025\102\354\300\334\335\154\254\303\026 -\316\013\035\126\233\244\304\304\322\056\340\017\342\104\047\053 -\120\151\244\334\142\350\212\041\051\102\154\314\000\072\226\166 -\233\357\100\300\244\136\167\204\062\154\046\052\071\146\256\135 -\343\271\271\262\054\150\037\036\232\220\003\071\360\252\263\244 -\314\111\213\030\064\351\067\311\173\051\307\204\174\157\104\025 -\057\354\141\131\004\311\105\313\242\326\122\242\174\177\051\222 -\326\112\305\213\102\250\324\376\352\330\307\207\043\030\344\235 -\172\175\163\100\122\230\240\256\156\343\005\077\005\017\340\245 -\306\155\115\355\203\067\210\234\307\363\334\102\232\152\266\327 -\041\111\066\167\362\357\030\117\305\160\331\236\351\336\267\053 -\213\364\274\176\050\337\015\100\311\205\134\256\235\305\061\377 -\320\134\016\265\250\176\360\351\057\272\257\210\256\345\265\321 -\130\245\257\234\161\247\051\001\220\203\151\067\202\005\272\374 -\011\301\010\156\214\170\073\303\063\002\200\077\104\205\010\035 -\337\125\126\010\255\054\205\055\135\261\003\341\256\252\164\305 -\244\363\116\272\067\230\173\202\271 -END - -# Trust for Certificate "Explicitly Distrusted DigiNotar PKIoverheid G2" -# Issuer: CN=DigiNotar PKIoverheid CA Organisatie - G2,O=DigiNotar B.V.,C=NL -# Serial Number: 268435455 (0xfffffff) -# Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2,O=DigiNotar B.V.,C=NL -# Not Valid Before: Wed May 12 08:51:39 2010 -# Not Valid After : Mon Mar 23 09:50:05 2020 -# Fingerprint (MD5): 2E:61:A2:D1:78:CE:EE:BF:59:33:B0:23:14:0F:94:1C -# Fingerprint (SHA1): D5:F2:57:A9:BF:2D:D0:3F:8B:46:57:F9:2B:C9:A4:C6:92:E1:42:42 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Explicitly Distrusted DigiNotar PKIoverheid G2" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\325\362\127\251\277\055\320\077\213\106\127\371\053\311\244\306 -\222\341\102\102 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\056\141\242\321\170\316\356\277\131\063\260\043\024\017\224\034 -END -CKA_ISSUER MULTILINE_OCTAL -\060\132\061\013\060\011\006\003\125\004\006\023\002\116\114\061 -\027\060\025\006\003\125\004\012\014\016\104\151\147\151\116\157 -\164\141\162\040\102\056\126\056\061\062\060\060\006\003\125\004 -\003\014\051\104\151\147\151\116\157\164\141\162\040\120\113\111 -\157\166\145\162\150\145\151\144\040\103\101\040\117\162\147\141 -\156\151\163\141\164\151\145\040\055\040\107\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\004\017\377\377\377 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "Security Communication RootCA2" # @@ -8252,7 +7511,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: OU=Security Communication RootCA2,O="SECOM Trust Systems CO.,LTD.",C=JP # Not Valid Before: Fri May 29 05:00:39 2009 # Not Valid After : Tue May 29 05:00:39 2029 -# Fingerprint (MD5): 6C:39:7D:A4:0E:55:59:B2:3F:D6:41:B1:12:50:DE:43 +# Fingerprint (SHA-256): 51:3B:2C:EC:B8:10:D4:CD:E5:DD:85:39:1A:DF:C6:C2:DD:60:D8:7B:B7:36:D2:B5:21:48:4A:A4:7A:0E:BE:F6 # Fingerprint (SHA1): 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -8342,13 +7601,13 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for Certificate "Security Communication RootCA2" +# Trust for "Security Communication RootCA2" # Issuer: OU=Security Communication RootCA2,O="SECOM Trust Systems CO.,LTD.",C=JP # Serial Number: 0 (0x0) # Subject: OU=Security Communication RootCA2,O="SECOM Trust Systems CO.,LTD.",C=JP # Not Valid Before: Fri May 29 05:00:39 2009 # Not Valid After : Tue May 29 05:00:39 2029 -# Fingerprint (MD5): 6C:39:7D:A4:0E:55:59:B2:3F:D6:41:B1:12:50:DE:43 +# Fingerprint (SHA-256): 51:3B:2C:EC:B8:10:D4:CD:E5:DD:85:39:1A:DF:C6:C2:DD:60:D8:7B:B7:36:D2:B5:21:48:4A:A4:7A:0E:BE:F6 # Fingerprint (SHA1): 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -8386,7 +7645,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=EC-ACC,OU=Jerarquia Entitats de Certificacio Catalanes,OU=Vegeu https://www.catcert.net/verarrel (c)03,OU=Serveis Publics de Certificacio,O=Agencia Catalana de Certificacio (NIF Q-0801176-I),C=ES # Not Valid Before: Tue Jan 07 23:00:00 2003 # Not Valid After : Tue Jan 07 22:59:59 2031 -# Fingerprint (MD5): EB:F5:9D:29:0D:61:F9:42:1F:7C:C2:BA:6D:E3:15:09 +# Fingerprint (SHA-256): 88:49:7F:01:60:2F:31:54:24:6A:E2:8C:4D:5A:EF:10:F1:D8:7E:BB:76:62:6F:4A:E0:B7:F9:5B:A7:96:87:99 # Fingerprint (SHA1): 28:90:3A:63:5B:52:80:FA:E6:77:4C:0B:6D:A7:D6:BA:A6:4A:F2:E8 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -8533,13 +7792,13 @@ CKA_NSS_EMAIL_DISTRUST_AFTER MULTILINE_OCTAL \062\062\060\070\063\061\060\060\060\060\060\060\132 END -# Trust for Certificate "EC-ACC" +# Trust for "EC-ACC" # Issuer: CN=EC-ACC,OU=Jerarquia Entitats de Certificacio Catalanes,OU=Vegeu https://www.catcert.net/verarrel (c)03,OU=Serveis Publics de Certificacio,O=Agencia Catalana de Certificacio (NIF Q-0801176-I),C=ES # Serial Number:ee:2b:3d:eb:d4:21:de:14:a8:62:ac:04:f3:dd:c4:01 # Subject: CN=EC-ACC,OU=Jerarquia Entitats de Certificacio Catalanes,OU=Vegeu https://www.catcert.net/verarrel (c)03,OU=Serveis Publics de Certificacio,O=Agencia Catalana de Certificacio (NIF Q-0801176-I),C=ES # Not Valid Before: Tue Jan 07 23:00:00 2003 # Not Valid After : Tue Jan 07 22:59:59 2031 -# Fingerprint (MD5): EB:F5:9D:29:0D:61:F9:42:1F:7C:C2:BA:6D:E3:15:09 +# Fingerprint (SHA-256): 88:49:7F:01:60:2F:31:54:24:6A:E2:8C:4D:5A:EF:10:F1:D8:7E:BB:76:62:6F:4A:E0:B7:F9:5B:A7:96:87:99 # Fingerprint (SHA1): 28:90:3A:63:5B:52:80:FA:E6:77:4C:0B:6D:A7:D6:BA:A6:4A:F2:E8 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -8581,240 +7840,20 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Hellenic Academic and Research Institutions RootCA 2011" +# Certificate "Actalis Authentication Root CA" # -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011,O=Hellenic Academic and Research Institutions Cert. Authority,C=GR -# Serial Number: 0 (0x0) -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011,O=Hellenic Academic and Research Institutions Cert. Authority,C=GR -# Not Valid Before: Tue Dec 06 13:49:52 2011 -# Not Valid After : Mon Dec 01 13:49:52 2031 -# Fingerprint (MD5): 73:9F:4C:4B:73:5B:79:E9:FA:BA:1C:EF:6E:CB:D5:C9 -# Fingerprint (SHA1): FE:45:65:9B:79:03:5B:98:A1:61:B5:51:2E:AC:DA:58:09:48:22:4D +# Issuer: CN=Actalis Authentication Root CA,O=Actalis S.p.A./03358520967,L=Milan,C=IT +# Serial Number:57:0a:11:97:42:c4:e3:cc +# Subject: CN=Actalis Authentication Root CA,O=Actalis S.p.A./03358520967,L=Milan,C=IT +# Not Valid Before: Thu Sep 22 11:22:02 2011 +# Not Valid After : Sun Sep 22 11:22:02 2030 +# Fingerprint (SHA-256): 55:92:60:84:EC:96:3A:64:B9:6E:2A:BE:01:CE:0B:A8:6A:64:FB:FE:BC:C7:AA:B5:AF:C1:55:B3:7F:D7:60:66 +# Fingerprint (SHA1): F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Hellenic Academic and Research Institutions RootCA 2011" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\225\061\013\060\011\006\003\125\004\006\023\002\107\122 -\061\104\060\102\006\003\125\004\012\023\073\110\145\154\154\145 -\156\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144 -\040\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164 -\165\164\151\157\156\163\040\103\145\162\164\056\040\101\165\164 -\150\157\162\151\164\171\061\100\060\076\006\003\125\004\003\023 -\067\110\145\154\154\145\156\151\143\040\101\143\141\144\145\155 -\151\143\040\141\156\144\040\122\145\163\145\141\162\143\150\040 -\111\156\163\164\151\164\165\164\151\157\156\163\040\122\157\157 -\164\103\101\040\062\060\061\061 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\225\061\013\060\011\006\003\125\004\006\023\002\107\122 -\061\104\060\102\006\003\125\004\012\023\073\110\145\154\154\145 -\156\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144 -\040\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164 -\165\164\151\157\156\163\040\103\145\162\164\056\040\101\165\164 -\150\157\162\151\164\171\061\100\060\076\006\003\125\004\003\023 -\067\110\145\154\154\145\156\151\143\040\101\143\141\144\145\155 -\151\143\040\141\156\144\040\122\145\163\145\141\162\143\150\040 -\111\156\163\164\151\164\165\164\151\157\156\163\040\122\157\157 -\164\103\101\040\062\060\061\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\000 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\004\061\060\202\003\031\240\003\002\001\002\002\001\000 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\201\225\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\104\060\102\006\003\125\004\012\023\073\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\145\162\164\056\040\101\165\164\150 -\157\162\151\164\171\061\100\060\076\006\003\125\004\003\023\067 -\110\145\154\154\145\156\151\143\040\101\143\141\144\145\155\151 -\143\040\141\156\144\040\122\145\163\145\141\162\143\150\040\111 -\156\163\164\151\164\165\164\151\157\156\163\040\122\157\157\164 -\103\101\040\062\060\061\061\060\036\027\015\061\061\061\062\060 -\066\061\063\064\071\065\062\132\027\015\063\061\061\062\060\061 -\061\063\064\071\065\062\132\060\201\225\061\013\060\011\006\003 -\125\004\006\023\002\107\122\061\104\060\102\006\003\125\004\012 -\023\073\110\145\154\154\145\156\151\143\040\101\143\141\144\145 -\155\151\143\040\141\156\144\040\122\145\163\145\141\162\143\150 -\040\111\156\163\164\151\164\165\164\151\157\156\163\040\103\145 -\162\164\056\040\101\165\164\150\157\162\151\164\171\061\100\060 -\076\006\003\125\004\003\023\067\110\145\154\154\145\156\151\143 -\040\101\143\141\144\145\155\151\143\040\141\156\144\040\122\145 -\163\145\141\162\143\150\040\111\156\163\164\151\164\165\164\151 -\157\156\163\040\122\157\157\164\103\101\040\062\060\061\061\060 -\202\001\042\060\015\006\011\052\206\110\206\367\015\001\001\001 -\005\000\003\202\001\017\000\060\202\001\012\002\202\001\001\000 -\251\123\000\343\056\246\366\216\372\140\330\055\225\076\370\054 -\052\124\116\315\271\204\141\224\130\117\217\075\213\344\103\363 -\165\211\215\121\344\303\067\322\212\210\115\171\036\267\022\335 -\103\170\112\212\222\346\327\110\325\017\244\072\051\104\065\270 -\007\366\150\035\125\315\070\121\360\214\044\061\205\257\203\311 -\175\351\167\257\355\032\173\235\027\371\263\235\070\120\017\246 -\132\171\221\200\257\067\256\246\323\061\373\265\046\011\235\074 -\132\357\121\305\053\337\226\135\353\062\036\002\332\160\111\354 -\156\014\310\232\067\215\367\361\066\140\113\046\054\202\236\320 -\170\363\015\017\143\244\121\060\341\371\053\047\022\007\330\352 -\275\030\142\230\260\131\067\175\276\356\363\040\121\102\132\203 -\357\223\272\151\025\361\142\235\237\231\071\202\241\267\164\056 -\213\324\305\013\173\057\360\310\012\332\075\171\012\232\223\034 -\245\050\162\163\221\103\232\247\321\115\205\204\271\251\164\217 -\024\100\307\334\336\254\101\144\154\264\031\233\002\143\155\044 -\144\217\104\262\045\352\316\135\164\014\143\062\134\215\207\345 -\002\003\001\000\001\243\201\211\060\201\206\060\017\006\003\125 -\035\023\001\001\377\004\005\060\003\001\001\377\060\013\006\003 -\125\035\017\004\004\003\002\001\006\060\035\006\003\125\035\016 -\004\026\004\024\246\221\102\375\023\141\112\043\236\010\244\051 -\345\330\023\004\043\356\101\045\060\107\006\003\125\035\036\004 -\100\060\076\240\074\060\005\202\003\056\147\162\060\005\202\003 -\056\145\165\060\006\202\004\056\145\144\165\060\006\202\004\056 -\157\162\147\060\005\201\003\056\147\162\060\005\201\003\056\145 -\165\060\006\201\004\056\145\144\165\060\006\201\004\056\157\162 -\147\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000 -\003\202\001\001\000\037\357\171\101\341\173\156\077\262\214\206 -\067\102\112\116\034\067\036\215\146\272\044\201\311\117\022\017 -\041\300\003\227\206\045\155\135\323\042\051\250\154\242\015\251 -\353\075\006\133\231\072\307\314\303\232\064\177\253\016\310\116 -\034\341\372\344\334\315\015\276\277\044\376\154\347\153\302\015 -\310\006\236\116\215\141\050\246\152\375\345\366\142\352\030\074 -\116\240\123\235\262\072\234\353\245\234\221\026\266\115\202\340 -\014\005\110\251\154\365\314\370\313\235\111\264\360\002\245\375 -\160\003\355\212\041\245\256\023\206\111\303\063\163\276\207\073 -\164\213\027\105\046\114\026\221\203\376\147\175\315\115\143\147 -\372\363\003\022\226\170\006\215\261\147\355\216\077\276\237\117 -\002\365\263\011\057\363\114\207\337\052\313\225\174\001\314\254 -\066\172\277\242\163\172\367\217\301\265\232\241\024\262\217\063 -\237\015\357\042\334\146\173\204\275\105\027\006\075\074\312\271 -\167\064\217\312\352\317\077\061\076\343\210\343\200\111\045\310 -\227\265\235\232\231\115\260\074\370\112\000\233\144\335\237\071 -\113\321\047\327\270 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for Certificate "Hellenic Academic and Research Institutions RootCA 2011" -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011,O=Hellenic Academic and Research Institutions Cert. Authority,C=GR -# Serial Number: 0 (0x0) -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011,O=Hellenic Academic and Research Institutions Cert. Authority,C=GR -# Not Valid Before: Tue Dec 06 13:49:52 2011 -# Not Valid After : Mon Dec 01 13:49:52 2031 -# Fingerprint (MD5): 73:9F:4C:4B:73:5B:79:E9:FA:BA:1C:EF:6E:CB:D5:C9 -# Fingerprint (SHA1): FE:45:65:9B:79:03:5B:98:A1:61:B5:51:2E:AC:DA:58:09:48:22:4D -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Hellenic Academic and Research Institutions RootCA 2011" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\376\105\145\233\171\003\133\230\241\141\265\121\056\254\332\130 -\011\110\042\115 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\163\237\114\113\163\133\171\351\372\272\034\357\156\313\325\311 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\225\061\013\060\011\006\003\125\004\006\023\002\107\122 -\061\104\060\102\006\003\125\004\012\023\073\110\145\154\154\145 -\156\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144 -\040\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164 -\165\164\151\157\156\163\040\103\145\162\164\056\040\101\165\164 -\150\157\162\151\164\171\061\100\060\076\006\003\125\004\003\023 -\067\110\145\154\154\145\156\151\143\040\101\143\141\144\145\155 -\151\143\040\141\156\144\040\122\145\163\145\141\162\143\150\040 -\111\156\163\164\151\164\165\164\151\157\156\163\040\122\157\157 -\164\103\101\040\062\060\061\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\000 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# Explicitly Distrust "MITM subCA 1 issued by Trustwave", Bug 724929 -# Issuer: E=ca@trustwave.com,CN="Trustwave Organization Issuing CA, Level 2",O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Serial Number: 1800000005 (0x6b49d205) -# Not Before: Apr 7 15:37:15 2011 GMT -# Not After : Apr 4 15:37:15 2021 GMT -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "MITM subCA 1 issued by Trustwave" -CKA_ISSUER MULTILINE_OCTAL -\060\201\253\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\063\060\061\006\003\125\004 -\003\023\052\124\162\165\163\164\167\141\166\145\040\117\162\147 -\141\156\151\172\141\164\151\157\156\040\111\163\163\165\151\156 -\147\040\103\101\054\040\114\145\166\145\154\040\062\061\037\060 -\035\006\011\052\206\110\206\367\015\001\011\001\026\020\143\141 -\100\164\162\165\163\164\167\141\166\145\056\143\157\155 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\004\153\111\322\005 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# Explicitly Distrust "MITM subCA 2 issued by Trustwave", Bug 724929 -# Issuer: E=ca@trustwave.com,CN="Trustwave Organization Issuing CA, Level 2",O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Serial Number: 1800000006 (0x6b49d206) -# Not Before: Apr 18 21:09:30 2011 GMT -# Not After : Apr 15 21:09:30 2021 GMT -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "MITM subCA 2 issued by Trustwave" -CKA_ISSUER MULTILINE_OCTAL -\060\201\253\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\063\060\061\006\003\125\004 -\003\023\052\124\162\165\163\164\167\141\166\145\040\117\162\147 -\141\156\151\172\141\164\151\157\156\040\111\163\163\165\151\156 -\147\040\103\101\054\040\114\145\166\145\154\040\062\061\037\060 -\035\006\011\052\206\110\206\367\015\001\011\001\026\020\143\141 -\100\164\162\165\163\164\167\141\166\145\056\143\157\155 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\004\153\111\322\006 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "Actalis Authentication Root CA" -# -# Issuer: CN=Actalis Authentication Root CA,O=Actalis S.p.A./03358520967,L=Milan,C=IT -# Serial Number:57:0a:11:97:42:c4:e3:cc -# Subject: CN=Actalis Authentication Root CA,O=Actalis S.p.A./03358520967,L=Milan,C=IT -# Not Valid Before: Thu Sep 22 11:22:02 2011 -# Not Valid After : Sun Sep 22 11:22:02 2030 -# Fingerprint (MD5): 69:C1:0D:4F:07:A3:1B:C3:FE:56:3D:04:BC:11:F6:A6 -# Fingerprint (SHA1): F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Actalis Authentication Root CA" +CKA_LABEL UTF8 "Actalis Authentication Root CA" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL \060\153\061\013\060\011\006\003\125\004\006\023\002\111\124\061 @@ -8942,7 +7981,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=Actalis Authentication Root CA,O=Actalis S.p.A./03358520967,L=Milan,C=IT # Not Valid Before: Thu Sep 22 11:22:02 2011 # Not Valid After : Sun Sep 22 11:22:02 2030 -# Fingerprint (MD5): 69:C1:0D:4F:07:A3:1B:C3:FE:56:3D:04:BC:11:F6:A6 +# Fingerprint (SHA-256): 55:92:60:84:EC:96:3A:64:B9:6E:2A:BE:01:CE:0B:A8:6A:64:FB:FE:BC:C7:AA:B5:AF:C1:55:B3:7F:D7:60:66 # Fingerprint (SHA1): F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -8981,7 +8020,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Buypass Class 2 Root CA,O=Buypass AS-983163327,C=NO # Not Valid Before: Tue Oct 26 08:38:03 2010 # Not Valid After : Fri Oct 26 08:38:03 2040 -# Fingerprint (MD5): 46:A7:D2:FE:45:FB:64:5A:A8:59:90:9B:78:44:9B:29 +# Fingerprint (SHA-256): 9A:11:40:25:19:7C:5B:B9:5D:94:E6:3D:55:CD:43:79:08:47:B6:46:B2:3C:DF:11:AD:A4:A0:0E:FF:15:FB:48 # Fingerprint (SHA1): 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -9105,7 +8144,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=Buypass Class 2 Root CA,O=Buypass AS-983163327,C=NO # Not Valid Before: Tue Oct 26 08:38:03 2010 # Not Valid After : Fri Oct 26 08:38:03 2040 -# Fingerprint (MD5): 46:A7:D2:FE:45:FB:64:5A:A8:59:90:9B:78:44:9B:29 +# Fingerprint (SHA-256): 9A:11:40:25:19:7C:5B:B9:5D:94:E6:3D:55:CD:43:79:08:47:B6:46:B2:3C:DF:11:AD:A4:A0:0E:FF:15:FB:48 # Fingerprint (SHA1): 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -9142,7 +8181,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=Buypass Class 3 Root CA,O=Buypass AS-983163327,C=NO # Not Valid Before: Tue Oct 26 08:28:58 2010 # Not Valid After : Fri Oct 26 08:28:58 2040 -# Fingerprint (MD5): 3D:3B:18:9E:2C:64:5A:E8:D5:88:CE:0E:F9:37:C2:EC +# Fingerprint (SHA-256): ED:F7:EB:BC:A2:7A:2A:38:4D:38:7B:7D:40:10:C6:66:E2:ED:B4:84:3E:4C:29:B4:AE:1D:5B:93:32:E6:B2:4D # Fingerprint (SHA1): DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -9266,7 +8305,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=Buypass Class 3 Root CA,O=Buypass AS-983163327,C=NO # Not Valid Before: Tue Oct 26 08:28:58 2010 # Not Valid After : Fri Oct 26 08:28:58 2040 -# Fingerprint (MD5): 3D:3B:18:9E:2C:64:5A:E8:D5:88:CE:0E:F9:37:C2:EC +# Fingerprint (SHA-256): ED:F7:EB:BC:A2:7A:2A:38:4D:38:7B:7D:40:10:C6:66:E2:ED:B4:84:3E:4C:29:B4:AE:1D:5B:93:32:E6:B2:4D # Fingerprint (SHA1): DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -9303,7 +8342,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=T-TeleSec GlobalRoot Class 3,OU=T-Systems Trust Center,O=T-Systems Enterprise Services GmbH,C=DE # Not Valid Before: Wed Oct 01 10:29:56 2008 # Not Valid After : Sat Oct 01 23:59:59 2033 -# Fingerprint (MD5): CA:FB:40:A8:4E:39:92:8A:1D:FE:8E:2F:C4:27:EA:EF +# Fingerprint (SHA-256): FD:73:DA:D3:1C:64:4F:F1:B4:3B:EF:0C:CD:DA:96:71:0B:9C:D9:87:5E:CA:7E:31:70:7A:F3:E9:6D:52:2B:BD # Fingerprint (SHA1): 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -9410,7 +8449,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=T-TeleSec GlobalRoot Class 3,OU=T-Systems Trust Center,O=T-Systems Enterprise Services GmbH,C=DE # Not Valid Before: Wed Oct 01 10:29:56 2008 # Not Valid After : Sat Oct 01 23:59:59 2033 -# Fingerprint (MD5): CA:FB:40:A8:4E:39:92:8A:1D:FE:8E:2F:C4:27:EA:EF +# Fingerprint (SHA-256): FD:73:DA:D3:1C:64:4F:F1:B4:3B:EF:0C:CD:DA:96:71:0B:9C:D9:87:5E:CA:7E:31:70:7A:F3:E9:6D:52:2B:BD # Fingerprint (SHA1): 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -9443,74 +8482,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# Explicitly Distrust "TURKTRUST Mis-issued Intermediate CA 1", Bug 825022 -# Issuer: O=T..RKTRUST Bilgi ..leti..im ve Bili..im G..venli..i Hizmetleri A...,C=TR,CN=T..RKTRUST Elektronik Sunucu Sertifikas.. Hizmetleri -# Serial Number: 2087 (0x827) -# Subject: CN=*.EGO.GOV.TR,OU=EGO BILGI ISLEM,O=EGO,L=ANKARA,ST=ANKARA,C=TR -# Not Valid Before: Mon Aug 08 07:07:51 2011 -# Not Valid After : Tue Jul 06 07:07:51 2021 -# Fingerprint (MD5): F8:F5:25:FF:0C:31:CF:85:E1:0C:86:17:C1:CE:1F:8E -# Fingerprint (SHA1): C6:9F:28:C8:25:13:9E:65:A6:46:C4:34:AC:A5:A1:D2:00:29:5D:B1 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TURKTRUST Mis-issued Intermediate CA 1" -CKA_ISSUER MULTILINE_OCTAL -\060\201\254\061\075\060\073\006\003\125\004\003\014\064\124\303 -\234\122\113\124\122\125\123\124\040\105\154\145\153\164\162\157 -\156\151\153\040\123\165\156\165\143\165\040\123\145\162\164\151 -\146\151\153\141\163\304\261\040\110\151\172\155\145\164\154\145 -\162\151\061\013\060\011\006\003\125\004\006\023\002\124\122\061 -\136\060\134\006\003\125\004\012\014\125\124\303\234\122\113\124 -\122\125\123\124\040\102\151\154\147\151\040\304\260\154\145\164 -\151\305\237\151\155\040\166\145\040\102\151\154\151\305\237\151 -\155\040\107\303\274\166\145\156\154\151\304\237\151\040\110\151 -\172\155\145\164\154\145\162\151\040\101\056\305\236\056\040\050 -\143\051\040\113\141\163\304\261\155\040\040\062\060\060\065 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\002\010\047 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# Explicitly Distrust "TURKTRUST Mis-issued Intermediate CA 2", Bug 825022 -# Issuer: O=T..RKTRUST Bilgi ..leti..im ve Bili..im G..venli..i Hizmetleri A...,C=TR,CN=T..RKTRUST Elektronik Sunucu Sertifikas.. Hizmetleri -# Serial Number: 2148 (0x864) -# Subject: E=ileti@kktcmerkezbankasi.org,CN=e-islem.kktcmerkezbankasi.org,O=KKTC Merkez Bankasi,L=Lefkosa,ST=Lefkosa,C=TR -# Not Valid Before: Mon Aug 08 07:07:51 2011 -# Not Valid After : Thu Aug 05 07:07:51 2021 -# Fingerprint (MD5): BF:C3:EC:AD:0F:42:4F:B4:B5:38:DB:35:BF:AD:84:A2 -# Fingerprint (SHA1): F9:2B:E5:26:6C:C0:5D:B2:DC:0D:C3:F2:DC:74:E0:2D:EF:D9:49:CB -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TURKTRUST Mis-issued Intermediate CA 2" -CKA_ISSUER MULTILINE_OCTAL -\060\201\254\061\075\060\073\006\003\125\004\003\014\064\124\303 -\234\122\113\124\122\125\123\124\040\105\154\145\153\164\162\157 -\156\151\153\040\123\165\156\165\143\165\040\123\145\162\164\151 -\146\151\153\141\163\304\261\040\110\151\172\155\145\164\154\145 -\162\151\061\013\060\011\006\003\125\004\006\023\002\124\122\061 -\136\060\134\006\003\125\004\012\014\125\124\303\234\122\113\124 -\122\125\123\124\040\102\151\154\147\151\040\304\260\154\145\164 -\151\305\237\151\155\040\166\145\040\102\151\154\151\305\237\151 -\155\040\107\303\274\166\145\156\154\151\304\237\151\040\110\151 -\172\155\145\164\154\145\162\151\040\101\056\305\236\056\040\050 -\143\051\040\113\141\163\304\261\155\040\040\062\060\060\065 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\002\010\144 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_NOT_TRUSTED -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "D-TRUST Root Class 3 CA 2 2009" # @@ -9519,7 +8490,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=D-TRUST Root Class 3 CA 2 2009,O=D-Trust GmbH,C=DE # Not Valid Before: Thu Nov 05 08:35:58 2009 # Not Valid After : Mon Nov 05 08:35:58 2029 -# Fingerprint (MD5): CD:E0:25:69:8D:47:AC:9C:89:35:90:F7:FD:51:3D:2F +# Fingerprint (SHA-256): 49:E7:A4:42:AC:F0:EA:62:87:05:00:54:B5:25:64:B6:50:E4:F4:9E:42:E3:48:D6:AA:38:E0:39:E9:57:B1:C1 # Fingerprint (SHA1): 58:E8:AB:B0:36:15:33:FB:80:F7:9B:1B:6D:29:D3:FF:8D:5F:00:F0 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -9625,7 +8596,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=D-TRUST Root Class 3 CA 2 2009,O=D-Trust GmbH,C=DE # Not Valid Before: Thu Nov 05 08:35:58 2009 # Not Valid After : Mon Nov 05 08:35:58 2029 -# Fingerprint (MD5): CD:E0:25:69:8D:47:AC:9C:89:35:90:F7:FD:51:3D:2F +# Fingerprint (SHA-256): 49:E7:A4:42:AC:F0:EA:62:87:05:00:54:B5:25:64:B6:50:E4:F4:9E:42:E3:48:D6:AA:38:E0:39:E9:57:B1:C1 # Fingerprint (SHA1): 58:E8:AB:B0:36:15:33:FB:80:F7:9B:1B:6D:29:D3:FF:8D:5F:00:F0 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -9662,7 +8633,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009,O=D-Trust GmbH,C=DE # Not Valid Before: Thu Nov 05 08:50:46 2009 # Not Valid After : Mon Nov 05 08:50:46 2029 -# Fingerprint (MD5): AA:C6:43:2C:5E:2D:CD:C4:34:C0:50:4F:11:02:4F:B6 +# Fingerprint (SHA-256): EE:C5:49:6B:98:8C:E9:86:25:B9:34:09:2E:EC:29:08:BE:D0:B0:F3:16:C2:D4:73:0C:84:EA:F1:F3:D3:48:81 # Fingerprint (SHA1): 96:C9:1B:0B:95:B4:10:98:42:FA:D0:D8:22:79:FE:60:FA:B9:16:83 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -9771,7 +8742,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009,O=D-Trust GmbH,C=DE # Not Valid Before: Thu Nov 05 08:50:46 2009 # Not Valid After : Mon Nov 05 08:50:46 2029 -# Fingerprint (MD5): AA:C6:43:2C:5E:2D:CD:C4:34:C0:50:4F:11:02:4F:B6 +# Fingerprint (SHA-256): EE:C5:49:6B:98:8C:E9:86:25:B9:34:09:2E:EC:29:08:BE:D0:B0:F3:16:C2:D4:73:0C:84:EA:F1:F3:D3:48:81 # Fingerprint (SHA1): 96:C9:1B:0B:95:B4:10:98:42:FA:D0:D8:22:79:FE:60:FA:B9:16:83 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -9809,7 +8780,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=CA Disig Root R2,O=Disig a.s.,L=Bratislava,C=SK # Not Valid Before: Thu Jul 19 09:15:30 2012 # Not Valid After : Sat Jul 19 09:15:30 2042 -# Fingerprint (MD5): 26:01:FB:D8:27:A7:17:9A:45:54:38:1A:43:01:3B:03 +# Fingerprint (SHA-256): E2:3D:4A:03:6D:7B:70:E9:F5:95:B1:42:20:79:D2:B9:1E:DF:BB:1F:B6:51:A0:63:3E:AA:8A:9D:C5:F8:07:03 # Fingerprint (SHA1): B5:61:EB:EA:A4:DE:E4:25:4B:69:1A:98:A5:57:47:C2:34:C7:D9:71 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -9936,7 +8907,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=CA Disig Root R2,O=Disig a.s.,L=Bratislava,C=SK # Not Valid Before: Thu Jul 19 09:15:30 2012 # Not Valid After : Sat Jul 19 09:15:30 2042 -# Fingerprint (MD5): 26:01:FB:D8:27:A7:17:9A:45:54:38:1A:43:01:3B:03 +# Fingerprint (SHA-256): E2:3D:4A:03:6D:7B:70:E9:F5:95:B1:42:20:79:D2:B9:1E:DF:BB:1F:B6:51:A0:63:3E:AA:8A:9D:C5:F8:07:03 # Fingerprint (SHA1): B5:61:EB:EA:A4:DE:E4:25:4B:69:1A:98:A5:57:47:C2:34:C7:D9:71 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -9974,7 +8945,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: C=ES,O=ACCV,OU=PKIACCV,CN=ACCVRAIZ1 # Not Valid Before: Thu May 05 09:37:37 2011 # Not Valid After : Tue Dec 31 09:37:37 2030 -# Fingerprint (MD5): D0:A0:5A:EE:05:B6:09:94:21:A1:7D:F1:B2:29:82:02 +# Fingerprint (SHA-256): 9A:6E:C0:12:E1:A7:DA:9D:BE:34:19:4D:47:8A:D7:C0:DB:18:22:FB:07:1D:F1:29:81:49:6E:D1:04:38:41:13 # Fingerprint (SHA1): 93:05:7A:88:15:C6:4F:CE:88:2F:FA:91:16:52:28:78:BC:53:64:17 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -10138,7 +9109,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: C=ES,O=ACCV,OU=PKIACCV,CN=ACCVRAIZ1 # Not Valid Before: Thu May 05 09:37:37 2011 # Not Valid After : Tue Dec 31 09:37:37 2030 -# Fingerprint (MD5): D0:A0:5A:EE:05:B6:09:94:21:A1:7D:F1:B2:29:82:02 +# Fingerprint (SHA-256): 9A:6E:C0:12:E1:A7:DA:9D:BE:34:19:4D:47:8A:D7:C0:DB:18:22:FB:07:1D:F1:29:81:49:6E:D1:04:38:41:13 # Fingerprint (SHA1): 93:05:7A:88:15:C6:4F:CE:88:2F:FA:91:16:52:28:78:BC:53:64:17 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -10175,7 +9146,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=TWCA Global Root CA,OU=Root CA,O=TAIWAN-CA,C=TW # Not Valid Before: Wed Jun 27 06:28:33 2012 # Not Valid After : Tue Dec 31 15:59:59 2030 -# Fingerprint (MD5): F9:03:7E:CF:E6:9E:3C:73:7A:2A:90:07:69:FF:2B:96 +# Fingerprint (SHA-256): 59:76:90:07:F7:68:5D:0F:CD:50:87:2F:9F:95:D5:75:5A:5B:2B:45:7D:81:F3:69:2B:61:0A:98:67:2F:0E:1B # Fingerprint (SHA1): 9C:BB:48:53:F6:A4:F6:D3:52:A4:E8:32:52:55:60:13:F5:AD:AF:65 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -10300,7 +9271,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=TWCA Global Root CA,OU=Root CA,O=TAIWAN-CA,C=TW # Not Valid Before: Wed Jun 27 06:28:33 2012 # Not Valid After : Tue Dec 31 15:59:59 2030 -# Fingerprint (MD5): F9:03:7E:CF:E6:9E:3C:73:7A:2A:90:07:69:FF:2B:96 +# Fingerprint (SHA-256): 59:76:90:07:F7:68:5D:0F:CD:50:87:2F:9F:95:D5:75:5A:5B:2B:45:7D:81:F3:69:2B:61:0A:98:67:2F:0E:1B # Fingerprint (SHA1): 9C:BB:48:53:F6:A4:F6:D3:52:A4:E8:32:52:55:60:13:F5:AD:AF:65 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -10338,7 +9309,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=TeliaSonera Root CA v1,O=TeliaSonera # Not Valid Before: Thu Oct 18 12:00:50 2007 # Not Valid After : Mon Oct 18 12:00:50 2032 -# Fingerprint (MD5): 37:41:49:1B:18:56:9A:26:F5:AD:C2:66:FB:40:A5:4C +# Fingerprint (SHA-256): DD:69:36:FE:21:F8:F0:77:C1:23:A1:A5:21:C1:22:24:F7:22:55:B7:3E:03:A7:26:06:93:E8:A2:4B:0F:A3:89 # Fingerprint (SHA1): 43:13:BB:96:F1:D5:86:9B:C1:4E:6A:92:F6:CF:F6:34:69:87:82:37 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -10459,7 +9430,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=TeliaSonera Root CA v1,O=TeliaSonera # Not Valid Before: Thu Oct 18 12:00:50 2007 # Not Valid After : Mon Oct 18 12:00:50 2032 -# Fingerprint (MD5): 37:41:49:1B:18:56:9A:26:F5:AD:C2:66:FB:40:A5:4C +# Fingerprint (SHA-256): DD:69:36:FE:21:F8:F0:77:C1:23:A1:A5:21:C1:22:24:F7:22:55:B7:3E:03:A7:26:06:93:E8:A2:4B:0F:A3:89 # Fingerprint (SHA1): 43:13:BB:96:F1:D5:86:9B:C1:4E:6A:92:F6:CF:F6:34:69:87:82:37 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -10496,7 +9467,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=E-Tugra Certification Authority,OU=E-Tugra Sertifikasyon Merkezi,O=E-Tu..ra EBG Bili..im Teknolojileri ve Hizmetleri A....,L=Ankara,C=TR # Not Valid Before: Tue Mar 05 12:09:48 2013 # Not Valid After : Fri Mar 03 12:09:48 2023 -# Fingerprint (MD5): B8:A1:03:63:B0:BD:21:71:70:8A:6F:13:3A:BB:79:49 +# Fingerprint (SHA-256): B0:BF:D5:2B:B0:D7:D9:BD:92:BF:5D:4D:C1:3D:A2:55:C0:2C:54:2F:37:83:65:EA:89:39:11:F5:5E:55:F2:3C # Fingerprint (SHA1): 51:C6:E7:08:49:06:6E:F3:92:D4:5C:A0:0D:6D:A3:62:8F:C3:52:39 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -10649,7 +9620,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=E-Tugra Certification Authority,OU=E-Tugra Sertifikasyon Merkezi,O=E-Tu..ra EBG Bili..im Teknolojileri ve Hizmetleri A....,L=Ankara,C=TR # Not Valid Before: Tue Mar 05 12:09:48 2013 # Not Valid After : Fri Mar 03 12:09:48 2023 -# Fingerprint (MD5): B8:A1:03:63:B0:BD:21:71:70:8A:6F:13:3A:BB:79:49 +# Fingerprint (SHA-256): B0:BF:D5:2B:B0:D7:D9:BD:92:BF:5D:4D:C1:3D:A2:55:C0:2C:54:2F:37:83:65:EA:89:39:11:F5:5E:55:F2:3C # Fingerprint (SHA1): 51:C6:E7:08:49:06:6E:F3:92:D4:5C:A0:0D:6D:A3:62:8F:C3:52:39 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -10693,7 +9664,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: CN=T-TeleSec GlobalRoot Class 2,OU=T-Systems Trust Center,O=T-Systems Enterprise Services GmbH,C=DE # Not Valid Before: Wed Oct 01 10:40:14 2008 # Not Valid After : Sat Oct 01 23:59:59 2033 -# Fingerprint (MD5): 2B:9B:9E:E4:7B:6C:1F:00:72:1A:CC:C1:77:79:DF:6A +# Fingerprint (SHA-256): 91:E2:F5:78:8D:58:10:EB:A7:BA:58:73:7D:E1:54:8A:8E:CA:CD:01:45:98:BC:0B:14:3E:04:1B:17:05:25:52 # Fingerprint (SHA1): 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -10800,7 +9771,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: CN=T-TeleSec GlobalRoot Class 2,OU=T-Systems Trust Center,O=T-Systems Enterprise Services GmbH,C=DE # Not Valid Before: Wed Oct 01 10:40:14 2008 # Not Valid After : Sat Oct 01 23:59:59 2033 -# Fingerprint (MD5): 2B:9B:9E:E4:7B:6C:1F:00:72:1A:CC:C1:77:79:DF:6A +# Fingerprint (SHA-256): 91:E2:F5:78:8D:58:10:EB:A7:BA:58:73:7D:E1:54:8A:8E:CA:CD:01:45:98:BC:0B:14:3E:04:1B:17:05:25:52 # Fingerprint (SHA1): 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -10841,7 +9812,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # Subject: C=DE,O=Atos,CN=Atos TrustedRoot 2011 # Not Valid Before: Thu Jul 07 14:58:30 2011 # Not Valid After : Tue Dec 31 23:59:59 2030 -# Fingerprint (MD5): AE:B9:C4:32:4B:AC:7F:5D:66:CC:77:94:BB:2A:77:56 +# Fingerprint (SHA-256): F3:56:BE:A2:44:B7:A9:1E:B3:5D:53:CA:9A:D7:86:4A:CE:01:8E:2D:35:D5:F8:F9:6D:DF:68:A6:F4:1A:A4:74 # Fingerprint (SHA1): 2B:B1:F5:3E:55:0C:1D:C5:F1:D4:E6:B7:6A:46:4B:55:06:02:AC:21 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE @@ -10933,7 +9904,7 @@ CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE # Subject: C=DE,O=Atos,CN=Atos TrustedRoot 2011 # Not Valid Before: Thu Jul 07 14:58:30 2011 # Not Valid After : Tue Dec 31 23:59:59 2030 -# Fingerprint (MD5): AE:B9:C4:32:4B:AC:7F:5D:66:CC:77:94:BB:2A:77:56 +# Fingerprint (SHA-256): F3:56:BE:A2:44:B7:A9:1E:B3:5D:53:CA:9A:D7:86:4A:CE:01:8E:2D:35:D5:F8:F9:6D:DF:68:A6:F4:1A:A4:74 # Fingerprint (SHA1): 2B:B1:F5:3E:55:0C:1D:C5:F1:D4:E6:B7:6A:46:4B:55:06:02:AC:21 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE @@ -12646,117 +11617,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "GlobalSign ECC Root CA - R4" -# -# Issuer: CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R4 -# Serial Number:2a:38:a4:1c:96:0a:04:de:42:b2:28:a5:0b:e8:34:98:02 -# Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R4 -# Not Valid Before: Tue Nov 13 00:00:00 2012 -# Not Valid After : Tue Jan 19 03:14:07 2038 -# Fingerprint (SHA-256): BE:C9:49:11:C2:95:56:76:DB:6C:0A:55:09:86:D7:6E:3B:A0:05:66:7C:44:2C:97:62:B4:FB:B7:73:DE:22:8C -# Fingerprint (SHA1): 69:69:56:2E:40:80:F4:24:A1:E7:19:9F:14:BA:F3:EE:58:AB:6A:BB -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign ECC Root CA - R4" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\120\061\044\060\042\006\003\125\004\013\023\033\107\154\157 -\142\141\154\123\151\147\156\040\105\103\103\040\122\157\157\164 -\040\103\101\040\055\040\122\064\061\023\060\021\006\003\125\004 -\012\023\012\107\154\157\142\141\154\123\151\147\156\061\023\060 -\021\006\003\125\004\003\023\012\107\154\157\142\141\154\123\151 -\147\156 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\120\061\044\060\042\006\003\125\004\013\023\033\107\154\157 -\142\141\154\123\151\147\156\040\105\103\103\040\122\157\157\164 -\040\103\101\040\055\040\122\064\061\023\060\021\006\003\125\004 -\012\023\012\107\154\157\142\141\154\123\151\147\156\061\023\060 -\021\006\003\125\004\003\023\012\107\154\157\142\141\154\123\151 -\147\156 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\021\052\070\244\034\226\012\004\336\102\262\050\245\013\350 -\064\230\002 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\001\341\060\202\001\207\240\003\002\001\002\002\021\052 -\070\244\034\226\012\004\336\102\262\050\245\013\350\064\230\002 -\060\012\006\010\052\206\110\316\075\004\003\002\060\120\061\044 -\060\042\006\003\125\004\013\023\033\107\154\157\142\141\154\123 -\151\147\156\040\105\103\103\040\122\157\157\164\040\103\101\040 -\055\040\122\064\061\023\060\021\006\003\125\004\012\023\012\107 -\154\157\142\141\154\123\151\147\156\061\023\060\021\006\003\125 -\004\003\023\012\107\154\157\142\141\154\123\151\147\156\060\036 -\027\015\061\062\061\061\061\063\060\060\060\060\060\060\132\027 -\015\063\070\060\061\061\071\060\063\061\064\060\067\132\060\120 -\061\044\060\042\006\003\125\004\013\023\033\107\154\157\142\141 -\154\123\151\147\156\040\105\103\103\040\122\157\157\164\040\103 -\101\040\055\040\122\064\061\023\060\021\006\003\125\004\012\023 -\012\107\154\157\142\141\154\123\151\147\156\061\023\060\021\006 -\003\125\004\003\023\012\107\154\157\142\141\154\123\151\147\156 -\060\131\060\023\006\007\052\206\110\316\075\002\001\006\010\052 -\206\110\316\075\003\001\007\003\102\000\004\270\306\171\323\217 -\154\045\016\237\056\071\031\034\003\244\256\232\345\071\007\011 -\026\312\143\261\271\206\370\212\127\301\127\316\102\372\163\241 -\367\145\102\377\036\301\000\262\156\163\016\377\307\041\345\030 -\244\252\331\161\077\250\324\271\316\214\035\243\102\060\100\060 -\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060 -\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 -\060\035\006\003\125\035\016\004\026\004\024\124\260\173\255\105 -\270\342\100\177\373\012\156\373\276\063\311\074\243\204\325\060 -\012\006\010\052\206\110\316\075\004\003\002\003\110\000\060\105 -\002\041\000\334\222\241\240\023\246\317\003\260\346\304\041\227 -\220\372\024\127\055\003\354\356\074\323\156\312\250\154\166\274 -\242\336\273\002\040\047\250\205\047\065\233\126\306\243\362\107 -\322\267\156\033\002\000\027\252\147\246\025\221\336\372\224\354 -\173\013\370\237\204 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "GlobalSign ECC Root CA - R4" -# Issuer: CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R4 -# Serial Number:2a:38:a4:1c:96:0a:04:de:42:b2:28:a5:0b:e8:34:98:02 -# Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R4 -# Not Valid Before: Tue Nov 13 00:00:00 2012 -# Not Valid After : Tue Jan 19 03:14:07 2038 -# Fingerprint (SHA-256): BE:C9:49:11:C2:95:56:76:DB:6C:0A:55:09:86:D7:6E:3B:A0:05:66:7C:44:2C:97:62:B4:FB:B7:73:DE:22:8C -# Fingerprint (SHA1): 69:69:56:2E:40:80:F4:24:A1:E7:19:9F:14:BA:F3:EE:58:AB:6A:BB -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign ECC Root CA - R4" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\151\151\126\056\100\200\364\044\241\347\031\237\024\272\363\356 -\130\253\152\273 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\040\360\047\150\321\176\240\235\016\346\052\312\337\134\211\216 -END -CKA_ISSUER MULTILINE_OCTAL -\060\120\061\044\060\042\006\003\125\004\013\023\033\107\154\157 -\142\141\154\123\151\147\156\040\105\103\103\040\122\157\157\164 -\040\103\101\040\055\040\122\064\061\023\060\021\006\003\125\004 -\012\023\012\107\154\157\142\141\154\123\151\147\156\061\023\060 -\021\006\003\125\004\003\023\012\107\154\157\142\141\154\123\151 -\147\156 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\021\052\070\244\034\226\012\004\336\102\262\050\245\013\350 -\064\230\002 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "GlobalSign ECC Root CA - R5" # @@ -17845,325 +16705,321 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "GTS Root R1" +# Certificate "UCA Global G2 Root" # -# Issuer: CN=GTS Root R1,O=Google Trust Services LLC,C=US -# Serial Number:6e:47:a9:c5:4b:47:0c:0d:ec:33:d0:89:b9:1c:f4:e1 -# Subject: CN=GTS Root R1,O=Google Trust Services LLC,C=US -# Not Valid Before: Wed Jun 22 00:00:00 2016 -# Not Valid After : Sun Jun 22 00:00:00 2036 -# Fingerprint (SHA-256): 2A:57:54:71:E3:13:40:BC:21:58:1C:BD:2C:F1:3E:15:84:63:20:3E:CE:94:BC:F9:D3:CC:19:6B:F0:9A:54:72 -# Fingerprint (SHA1): E1:C9:50:E6:EF:22:F8:4C:56:45:72:8B:92:20:60:D7:D5:A7:A3:E8 +# Issuer: CN=UCA Global G2 Root,O=UniTrust,C=CN +# Serial Number:5d:df:b1:da:5a:a3:ed:5d:be:5a:65:20:65:03:90:ef +# Subject: CN=UCA Global G2 Root,O=UniTrust,C=CN +# Not Valid Before: Fri Mar 11 00:00:00 2016 +# Not Valid After : Mon Dec 31 00:00:00 2040 +# Fingerprint (SHA-256): 9B:EA:11:C9:76:FE:01:47:64:C1:BE:56:A6:F9:14:B5:A5:60:31:7A:BD:99:88:39:33:82:E5:16:1A:A0:49:3C +# Fingerprint (SHA1): 28:F9:78:16:19:7A:FF:18:25:18:AA:44:FE:C1:A0:CE:5C:B6:4C:8A CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GTS Root R1" +CKA_LABEL UTF8 "UCA Global G2 Root" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\061 +\060\075\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 +\163\164\061\033\060\031\006\003\125\004\003\014\022\125\103\101 +\040\107\154\157\142\141\154\040\107\062\040\122\157\157\164 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\061 +\060\075\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 +\163\164\061\033\060\031\006\003\125\004\003\014\022\125\103\101 +\040\107\154\157\142\141\154\040\107\062\040\122\157\157\164 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\156\107\251\305\113\107\014\015\354\063\320\211\271\034 -\364\341 +\002\020\135\337\261\332\132\243\355\135\276\132\145\040\145\003 +\220\357 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\132\060\202\003\102\240\003\002\001\002\002\020\156 -\107\251\305\113\107\014\015\354\063\320\211\271\034\364\341\060 -\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\107 -\061\013\060\011\006\003\125\004\006\023\002\125\123\061\042\060 -\040\006\003\125\004\012\023\031\107\157\157\147\154\145\040\124 -\162\165\163\164\040\123\145\162\166\151\143\145\163\040\114\114 -\103\061\024\060\022\006\003\125\004\003\023\013\107\124\123\040 -\122\157\157\164\040\122\061\060\036\027\015\061\066\060\066\062 -\062\060\060\060\060\060\060\132\027\015\063\066\060\066\062\062 -\060\060\060\060\060\060\132\060\107\061\013\060\011\006\003\125 -\004\006\023\002\125\123\061\042\060\040\006\003\125\004\012\023 -\031\107\157\157\147\154\145\040\124\162\165\163\164\040\123\145 -\162\166\151\143\145\163\040\114\114\103\061\024\060\022\006\003 -\125\004\003\023\013\107\124\123\040\122\157\157\164\040\122\061 -\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 -\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 -\000\266\021\002\213\036\343\241\167\233\073\334\277\224\076\267 -\225\247\100\074\241\375\202\371\175\062\006\202\161\366\366\214 -\177\373\350\333\274\152\056\227\227\243\214\113\371\053\366\261 -\371\316\204\035\261\371\305\227\336\357\271\362\243\351\274\022 -\211\136\247\252\122\253\370\043\047\313\244\261\234\143\333\327 -\231\176\360\012\136\353\150\246\364\306\132\107\015\115\020\063 -\343\116\261\023\243\310\030\154\113\354\374\011\220\337\235\144 -\051\045\043\007\241\264\322\075\056\140\340\317\322\011\207\273 -\315\110\360\115\302\302\172\210\212\273\272\317\131\031\326\257 -\217\260\007\260\236\061\361\202\301\300\337\056\246\155\154\031 -\016\265\330\176\046\032\105\003\075\260\171\244\224\050\255\017 -\177\046\345\250\010\376\226\350\074\150\224\123\356\203\072\210 -\053\025\226\011\262\340\172\214\056\165\326\234\353\247\126\144 -\217\226\117\150\256\075\227\302\204\217\300\274\100\300\013\134 -\275\366\207\263\065\154\254\030\120\177\204\340\114\315\222\323 -\040\351\063\274\122\231\257\062\265\051\263\045\052\264\110\371 -\162\341\312\144\367\346\202\020\215\350\235\302\212\210\372\070 -\146\212\374\143\371\001\371\170\375\173\134\167\372\166\207\372 -\354\337\261\016\171\225\127\264\275\046\357\326\001\321\353\026 -\012\273\216\013\265\305\305\212\125\253\323\254\352\221\113\051 -\314\031\244\062\045\116\052\361\145\104\320\002\316\252\316\111 -\264\352\237\174\203\260\100\173\347\103\253\247\154\243\217\175 -\211\201\372\114\245\377\325\216\303\316\113\340\265\330\263\216 -\105\317\166\300\355\100\053\375\123\017\260\247\325\073\015\261 -\212\242\003\336\061\255\314\167\352\157\173\076\326\337\221\042 -\022\346\276\372\330\062\374\020\143\024\121\162\336\135\326\026 -\223\275\051\150\063\357\072\146\354\007\212\046\337\023\327\127 -\145\170\047\336\136\111\024\000\242\000\177\232\250\041\266\251 -\261\225\260\245\271\015\026\021\332\307\154\110\074\100\340\176 -\015\132\315\126\074\321\227\005\271\313\113\355\071\113\234\304 -\077\322\125\023\156\044\260\326\161\372\364\301\272\314\355\033 -\365\376\201\101\330\000\230\075\072\310\256\172\230\067\030\005 -\225\002\003\001\000\001\243\102\060\100\060\016\006\003\125\035 -\017\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035 -\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125 -\035\016\004\026\004\024\344\257\053\046\161\032\053\110\047\205 -\057\122\146\054\357\360\211\023\161\076\060\015\006\011\052\206 -\110\206\367\015\001\001\014\005\000\003\202\002\001\000\070\226 -\012\356\075\264\226\036\137\357\235\234\013\063\237\053\340\312 -\375\322\216\012\037\101\164\245\174\252\204\324\345\362\036\346 -\067\122\062\234\013\321\141\035\277\050\301\266\104\051\065\165 -\167\230\262\174\331\275\164\254\212\150\343\251\061\011\051\001 -\140\163\343\107\174\123\250\220\112\047\357\113\327\237\223\347 -\202\066\316\232\150\014\202\347\317\324\020\026\157\137\016\231 -\134\366\037\161\175\357\357\173\057\176\352\066\326\227\160\013 -\025\356\327\134\126\152\063\245\343\111\070\014\270\175\373\215 -\205\244\261\131\136\364\152\341\335\241\366\144\104\256\346\121 -\203\041\146\306\021\076\363\316\107\356\234\050\037\045\332\377 -\254\146\225\335\065\017\134\357\040\054\142\375\221\272\251\314 -\374\132\234\223\201\203\051\227\112\174\132\162\264\071\320\267 -\167\313\171\375\151\072\222\067\355\156\070\145\106\176\351\140 -\275\171\210\227\137\070\022\364\356\257\133\202\310\206\325\341 -\231\155\214\004\362\166\272\111\366\156\351\155\036\137\240\357 -\047\202\166\100\370\246\323\130\134\017\054\102\332\102\306\173 -\210\064\307\301\330\105\233\301\076\305\141\035\331\143\120\111 -\366\064\205\152\340\030\305\156\107\253\101\102\051\233\366\140 -\015\322\061\323\143\230\043\223\132\000\201\110\264\357\315\212 -\315\311\317\231\356\331\236\252\066\341\150\113\161\111\024\066 -\050\072\075\035\316\232\217\045\346\200\161\141\053\265\173\314 -\371\045\026\201\341\061\137\241\243\176\026\244\234\026\152\227 -\030\275\166\162\245\013\236\035\066\346\057\241\057\276\160\221 -\017\250\346\332\370\304\222\100\154\045\176\173\263\011\334\262 -\027\255\200\104\360\150\245\217\224\165\377\164\132\350\250\002 -\174\014\011\342\251\113\013\240\205\013\142\271\357\241\061\222 -\373\357\366\121\004\211\154\350\251\164\241\273\027\263\265\375 -\111\017\174\074\354\203\030\040\103\116\325\223\272\264\064\261 -\037\026\066\037\014\346\144\071\026\114\334\340\376\035\310\251 -\142\075\100\352\312\305\064\002\264\256\211\210\063\065\334\054 -\023\163\330\047\361\320\162\356\165\073\042\336\230\150\146\133 -\361\306\143\107\125\034\272\245\010\121\165\246\110\045 +\060\202\005\106\060\202\003\056\240\003\002\001\002\002\020\135 +\337\261\332\132\243\355\135\276\132\145\040\145\003\220\357\060 +\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\075 +\061\013\060\011\006\003\125\004\006\023\002\103\116\061\021\060 +\017\006\003\125\004\012\014\010\125\156\151\124\162\165\163\164 +\061\033\060\031\006\003\125\004\003\014\022\125\103\101\040\107 +\154\157\142\141\154\040\107\062\040\122\157\157\164\060\036\027 +\015\061\066\060\063\061\061\060\060\060\060\060\060\132\027\015 +\064\060\061\062\063\061\060\060\060\060\060\060\132\060\075\061 +\013\060\011\006\003\125\004\006\023\002\103\116\061\021\060\017 +\006\003\125\004\012\014\010\125\156\151\124\162\165\163\164\061 +\033\060\031\006\003\125\004\003\014\022\125\103\101\040\107\154 +\157\142\141\154\040\107\062\040\122\157\157\164\060\202\002\042 +\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 +\202\002\017\000\060\202\002\012\002\202\002\001\000\305\346\053 +\157\174\357\046\005\047\243\201\044\332\157\313\001\371\231\232 +\251\062\302\042\207\141\101\221\073\313\303\150\033\006\305\114 +\251\053\301\147\027\042\035\053\355\371\051\211\223\242\170\275 +\222\153\240\243\015\242\176\312\223\263\246\321\214\065\325\165 +\371\027\366\317\105\305\345\172\354\167\223\240\217\043\256\016 +\032\003\177\276\324\320\355\056\173\253\106\043\133\377\054\346 +\124\172\224\300\052\025\360\311\215\260\172\073\044\341\327\150 +\342\061\074\006\063\106\266\124\021\246\245\057\042\124\052\130 +\015\001\002\361\372\025\121\147\154\300\372\327\266\033\177\321 +\126\210\057\032\072\215\073\273\202\021\340\107\000\320\122\207 +\253\373\206\176\017\044\153\100\235\064\147\274\215\307\055\206 +\157\171\076\216\251\074\027\113\177\260\231\343\260\161\140\334 +\013\365\144\303\316\103\274\155\161\271\322\336\047\133\212\350 +\330\306\256\341\131\175\317\050\055\065\270\225\126\032\361\262 +\130\113\267\022\067\310\174\263\355\113\200\341\215\372\062\043 +\266\157\267\110\225\010\261\104\116\205\214\072\002\124\040\057 +\337\277\127\117\073\072\220\041\327\301\046\065\124\040\354\307 +\077\107\354\357\132\277\113\172\301\255\073\027\120\134\142\330 +\017\113\112\334\053\372\156\274\163\222\315\354\307\120\350\101 +\226\327\251\176\155\330\351\035\217\212\265\271\130\222\272\112 +\222\053\014\126\375\200\353\010\360\136\051\156\033\034\014\257 +\217\223\211\255\333\275\243\236\041\312\211\031\354\337\265\303 +\032\353\026\376\170\066\114\326\156\320\076\027\034\220\027\153 +\046\272\373\172\057\277\021\034\030\016\055\163\003\217\240\345 +\065\240\132\342\114\165\035\161\341\071\070\123\170\100\314\203 +\223\327\012\236\235\133\217\212\344\345\340\110\344\110\262\107 +\315\116\052\165\052\173\362\042\366\311\276\011\221\226\127\172 +\210\210\254\356\160\254\371\334\051\343\014\034\073\022\116\104 +\326\247\116\260\046\310\363\331\032\227\221\150\352\357\215\106 +\006\322\126\105\130\232\074\014\017\203\270\005\045\303\071\317 +\073\244\064\211\267\171\022\057\107\305\347\251\227\151\374\246 +\167\147\265\337\173\361\172\145\025\344\141\126\145\002\003\001 +\000\001\243\102\060\100\060\016\006\003\125\035\017\001\001\377 +\004\004\003\002\001\006\060\017\006\003\125\035\023\001\001\377 +\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026 +\004\024\201\304\214\314\365\344\060\377\245\014\010\137\214\025 +\147\041\164\001\337\337\060\015\006\011\052\206\110\206\367\015 +\001\001\013\005\000\003\202\002\001\000\023\145\042\365\216\053 +\255\104\344\313\377\271\150\346\303\200\110\075\004\173\372\043 +\057\172\355\066\332\262\316\155\366\346\236\345\137\130\217\313 +\067\062\241\310\145\266\256\070\075\065\033\076\274\073\266\004 +\320\274\371\111\365\233\367\205\305\066\266\313\274\370\310\071 +\325\344\137\007\275\025\124\227\164\312\312\355\117\272\272\144 +\166\237\201\270\204\105\111\114\215\157\242\353\261\314\321\303 +\224\332\104\302\346\342\352\030\350\242\037\047\005\272\327\345 +\326\251\315\335\357\166\230\215\000\016\315\033\372\003\267\216 +\200\130\016\047\077\122\373\224\242\312\136\145\311\326\204\332 +\271\065\161\363\046\300\117\167\346\201\047\322\167\073\232\024 +\157\171\364\366\320\341\323\224\272\320\127\121\275\047\005\015 +\301\375\310\022\060\356\157\215\021\053\010\235\324\324\277\200 +\105\024\232\210\104\332\060\352\264\247\343\356\357\133\202\325 +\076\326\255\170\222\333\134\074\363\330\255\372\270\153\177\304 +\066\050\266\002\025\212\124\054\234\260\027\163\216\320\067\243 +\024\074\230\225\000\014\051\005\133\236\111\111\261\137\307\343 +\313\317\047\145\216\065\027\267\127\310\060\331\101\133\271\024 +\266\350\302\017\224\061\247\224\230\314\152\353\265\341\047\365 +\020\250\001\350\216\022\142\350\210\314\265\177\106\227\300\233 +\020\146\070\032\066\106\137\042\150\075\337\311\306\023\047\253 +\123\006\254\242\074\206\006\145\157\261\176\261\051\104\232\243 +\272\111\151\050\151\217\327\345\137\255\004\206\144\157\032\240 +\014\305\010\142\316\200\243\320\363\354\150\336\276\063\307\027 +\133\177\200\304\114\114\261\246\204\212\303\073\270\011\315\024 +\201\272\030\343\124\127\066\376\333\057\174\107\241\072\063\310 +\371\130\073\104\117\261\312\002\211\004\226\050\150\305\113\270 +\046\211\273\326\063\057\120\325\376\232\211\272\030\062\222\124 +\306\133\340\235\371\136\345\015\042\233\366\332\342\310\041\262 +\142\041\252\206\100\262\056\144\323\137\310\343\176\021\147\105 +\037\005\376\343\242\357\263\250\263\363\175\217\370\014\037\042 +\037\055\160\264\270\001\064\166\060\000\345\043\170\247\126\327 +\120\037\212\373\006\365\302\031\360\320 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "GTS Root R1" -# Issuer: CN=GTS Root R1,O=Google Trust Services LLC,C=US -# Serial Number:6e:47:a9:c5:4b:47:0c:0d:ec:33:d0:89:b9:1c:f4:e1 -# Subject: CN=GTS Root R1,O=Google Trust Services LLC,C=US -# Not Valid Before: Wed Jun 22 00:00:00 2016 -# Not Valid After : Sun Jun 22 00:00:00 2036 -# Fingerprint (SHA-256): 2A:57:54:71:E3:13:40:BC:21:58:1C:BD:2C:F1:3E:15:84:63:20:3E:CE:94:BC:F9:D3:CC:19:6B:F0:9A:54:72 -# Fingerprint (SHA1): E1:C9:50:E6:EF:22:F8:4C:56:45:72:8B:92:20:60:D7:D5:A7:A3:E8 +# Trust for "UCA Global G2 Root" +# Issuer: CN=UCA Global G2 Root,O=UniTrust,C=CN +# Serial Number:5d:df:b1:da:5a:a3:ed:5d:be:5a:65:20:65:03:90:ef +# Subject: CN=UCA Global G2 Root,O=UniTrust,C=CN +# Not Valid Before: Fri Mar 11 00:00:00 2016 +# Not Valid After : Mon Dec 31 00:00:00 2040 +# Fingerprint (SHA-256): 9B:EA:11:C9:76:FE:01:47:64:C1:BE:56:A6:F9:14:B5:A5:60:31:7A:BD:99:88:39:33:82:E5:16:1A:A0:49:3C +# Fingerprint (SHA1): 28:F9:78:16:19:7A:FF:18:25:18:AA:44:FE:C1:A0:CE:5C:B6:4C:8A CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GTS Root R1" +CKA_LABEL UTF8 "UCA Global G2 Root" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\341\311\120\346\357\042\370\114\126\105\162\213\222\040\140\327 -\325\247\243\350 +\050\371\170\026\031\172\377\030\045\030\252\104\376\301\240\316 +\134\266\114\212 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\202\032\357\324\322\112\362\237\342\075\227\006\024\160\162\205 +\200\376\360\304\112\360\134\142\062\237\034\272\170\251\120\370 END CKA_ISSUER MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\061 +\060\075\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 +\163\164\061\033\060\031\006\003\125\004\003\014\022\125\103\101 +\040\107\154\157\142\141\154\040\107\062\040\122\157\157\164 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\156\107\251\305\113\107\014\015\354\063\320\211\271\034 -\364\341 +\002\020\135\337\261\332\132\243\355\135\276\132\145\040\145\003 +\220\357 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "GTS Root R2" +# Certificate "UCA Extended Validation Root" # -# Issuer: CN=GTS Root R2,O=Google Trust Services LLC,C=US -# Serial Number:6e:47:a9:c6:5a:b3:e7:20:c5:30:9a:3f:68:52:f2:6f -# Subject: CN=GTS Root R2,O=Google Trust Services LLC,C=US -# Not Valid Before: Wed Jun 22 00:00:00 2016 -# Not Valid After : Sun Jun 22 00:00:00 2036 -# Fingerprint (SHA-256): C4:5D:7B:B0:8E:6D:67:E6:2E:42:35:11:0B:56:4E:5F:78:FD:92:EF:05:8C:84:0A:EA:4E:64:55:D7:58:5C:60 -# Fingerprint (SHA1): D2:73:96:2A:2A:5E:39:9F:73:3F:E1:C7:1E:64:3F:03:38:34:FC:4D +# Issuer: CN=UCA Extended Validation Root,O=UniTrust,C=CN +# Serial Number:4f:d2:2b:8f:f5:64:c8:33:9e:4f:34:58:66:23:70:60 +# Subject: CN=UCA Extended Validation Root,O=UniTrust,C=CN +# Not Valid Before: Fri Mar 13 00:00:00 2015 +# Not Valid After : Fri Dec 31 00:00:00 2038 +# Fingerprint (SHA-256): D4:3A:F9:B3:54:73:75:5C:96:84:FC:06:D7:D8:CB:70:EE:5C:28:E7:73:FB:29:4E:B4:1E:E7:17:22:92:4D:24 +# Fingerprint (SHA1): A3:A1:B0:6F:24:61:23:4A:E3:36:A5:C2:37:FC:A6:FF:DD:F0:D7:3A CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GTS Root R2" +CKA_LABEL UTF8 "UCA Extended Validation Root" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\062 +\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 +\163\164\061\045\060\043\006\003\125\004\003\014\034\125\103\101 +\040\105\170\164\145\156\144\145\144\040\126\141\154\151\144\141 +\164\151\157\156\040\122\157\157\164 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\062 +\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 +\163\164\061\045\060\043\006\003\125\004\003\014\034\125\103\101 +\040\105\170\164\145\156\144\145\144\040\126\141\154\151\144\141 +\164\151\157\156\040\122\157\157\164 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\156\107\251\306\132\263\347\040\305\060\232\077\150\122 -\362\157 +\002\020\117\322\053\217\365\144\310\063\236\117\064\130\146\043 +\160\140 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\132\060\202\003\102\240\003\002\001\002\002\020\156 -\107\251\306\132\263\347\040\305\060\232\077\150\122\362\157\060 -\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\107 -\061\013\060\011\006\003\125\004\006\023\002\125\123\061\042\060 -\040\006\003\125\004\012\023\031\107\157\157\147\154\145\040\124 -\162\165\163\164\040\123\145\162\166\151\143\145\163\040\114\114 -\103\061\024\060\022\006\003\125\004\003\023\013\107\124\123\040 -\122\157\157\164\040\122\062\060\036\027\015\061\066\060\066\062 -\062\060\060\060\060\060\060\132\027\015\063\066\060\066\062\062 +\060\202\005\132\060\202\003\102\240\003\002\001\002\002\020\117 +\322\053\217\365\144\310\063\236\117\064\130\146\043\160\140\060 +\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\107 +\061\013\060\011\006\003\125\004\006\023\002\103\116\061\021\060 +\017\006\003\125\004\012\014\010\125\156\151\124\162\165\163\164 +\061\045\060\043\006\003\125\004\003\014\034\125\103\101\040\105 +\170\164\145\156\144\145\144\040\126\141\154\151\144\141\164\151 +\157\156\040\122\157\157\164\060\036\027\015\061\065\060\063\061 +\063\060\060\060\060\060\060\132\027\015\063\070\061\062\063\061 \060\060\060\060\060\060\132\060\107\061\013\060\011\006\003\125 -\004\006\023\002\125\123\061\042\060\040\006\003\125\004\012\023 -\031\107\157\157\147\154\145\040\124\162\165\163\164\040\123\145 -\162\166\151\143\145\163\040\114\114\103\061\024\060\022\006\003 -\125\004\003\023\013\107\124\123\040\122\157\157\164\040\122\062 +\004\006\023\002\103\116\061\021\060\017\006\003\125\004\012\014 +\010\125\156\151\124\162\165\163\164\061\045\060\043\006\003\125 +\004\003\014\034\125\103\101\040\105\170\164\145\156\144\145\144 +\040\126\141\154\151\144\141\164\151\157\156\040\122\157\157\164 \060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 \001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 -\000\316\336\375\246\373\354\354\024\064\074\007\006\132\154\131 -\367\031\065\335\367\301\235\125\252\323\315\073\244\223\162\357 -\012\372\155\235\366\360\205\200\133\241\110\122\237\071\305\267 -\356\050\254\357\313\166\150\024\271\337\255\001\154\231\037\304 -\042\035\237\376\162\167\340\054\133\257\344\004\277\117\162\240 -\032\064\230\350\071\150\354\225\045\173\166\241\346\151\271\205 -\031\275\211\214\376\255\355\066\352\163\274\377\203\342\313\175 -\301\322\316\112\263\215\005\236\213\111\223\337\301\133\320\156 -\136\360\056\060\056\202\374\372\274\264\027\012\110\345\210\233 -\305\233\153\336\260\312\264\003\360\332\364\220\270\145\144\367 -\134\114\255\350\176\146\136\231\327\270\302\076\310\320\023\235 -\255\356\344\105\173\211\125\367\212\037\142\122\204\022\263\302 -\100\227\343\212\037\107\221\246\164\132\322\370\261\143\050\020 -\270\263\011\270\126\167\100\242\046\230\171\306\376\337\045\356 -\076\345\240\177\324\141\017\121\113\074\077\214\332\341\160\164 -\330\302\150\241\371\301\014\351\241\342\177\273\125\074\166\006 -\356\152\116\314\222\210\060\115\232\275\117\013\110\232\204\265 -\230\243\325\373\163\301\127\141\335\050\126\165\023\256\207\216 -\347\014\121\011\020\165\210\114\274\215\371\173\074\324\042\110 -\037\052\334\353\153\273\104\261\313\063\161\062\106\257\255\112 -\361\214\350\164\072\254\347\032\042\163\200\322\060\367\045\102 -\307\042\073\073\022\255\226\056\306\303\166\007\252\040\267\065 -\111\127\351\222\111\350\166\026\162\061\147\053\226\176\212\243 -\307\224\126\042\277\152\113\176\001\041\262\043\062\337\344\232 -\104\155\131\133\135\365\000\240\034\233\306\170\227\215\220\377 -\233\310\252\264\257\021\121\071\136\331\373\147\255\325\133\021 -\235\062\232\033\275\325\272\133\245\311\313\045\151\123\125\047 -\134\340\312\066\313\210\141\373\036\267\320\313\356\026\373\323 -\246\114\336\222\245\324\342\337\365\006\124\336\056\235\113\264 -\223\060\252\201\316\335\032\334\121\163\015\117\160\351\345\266 -\026\041\031\171\262\346\211\013\165\144\312\325\253\274\011\301 -\030\241\377\324\124\241\205\074\375\024\044\003\262\207\323\244 -\267\002\003\001\000\001\243\102\060\100\060\016\006\003\125\035 -\017\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035 -\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125 -\035\016\004\026\004\024\273\377\312\216\043\237\117\231\312\333 -\342\150\246\245\025\047\027\036\331\016\060\015\006\011\052\206 -\110\206\367\015\001\001\014\005\000\003\202\002\001\000\266\151 -\360\246\167\376\236\356\013\201\255\341\300\251\307\371\065\035 -\100\202\253\346\004\264\337\313\367\035\017\203\360\176\023\115 -\215\214\356\343\063\042\303\071\374\100\337\156\101\113\102\123 -\276\026\210\361\322\070\136\304\150\231\034\230\122\223\214\347 -\150\355\033\152\163\172\005\100\115\177\145\073\326\130\361\316 -\203\107\140\343\377\227\251\234\140\167\030\125\265\176\010\223 -\317\320\366\074\147\003\025\141\011\371\201\171\365\354\123\244 -\237\311\217\001\213\163\304\167\166\334\203\242\365\014\111\032 -\250\166\336\222\233\144\370\263\054\305\047\323\007\300\010\200 -\244\230\222\343\001\226\002\252\002\356\217\073\305\321\155\012 -\063\060\163\170\271\117\124\026\277\013\007\241\244\134\346\313 -\311\134\204\217\017\340\025\167\054\176\046\176\332\304\113\333 -\247\026\167\007\260\315\165\350\162\102\326\225\204\235\206\203 -\362\344\220\315\011\107\324\213\003\160\332\132\306\003\102\364 -\355\067\242\360\033\120\124\113\016\330\204\336\031\050\231\201 -\107\256\011\033\077\110\321\303\157\342\260\140\027\365\356\043 -\002\245\332\000\133\155\220\253\356\242\351\033\073\351\307\104 -\047\105\216\153\237\365\244\204\274\167\371\153\227\254\076\121 -\105\242\021\246\314\205\356\012\150\362\076\120\070\172\044\142 -\036\027\040\067\155\152\115\267\011\233\311\374\244\130\365\266 -\373\234\116\030\273\225\002\347\241\255\233\007\356\066\153\044 -\322\071\206\301\223\203\120\322\201\106\250\137\142\127\054\273 -\154\144\210\010\156\357\023\124\137\335\055\304\147\143\323\317 -\211\067\277\235\040\364\373\172\203\233\240\036\201\000\120\302 -\344\014\042\131\122\020\355\103\126\207\000\370\024\122\247\035 -\213\223\214\242\115\106\177\047\306\161\233\044\336\344\332\206 -\213\015\176\153\040\301\300\236\341\145\330\152\243\246\350\205 -\213\072\007\010\034\272\365\217\125\232\030\165\176\345\354\201 -\146\321\041\163\241\065\104\013\200\075\133\234\136\157\052\027 -\226\321\203\043\210\146\155\346\206\342\160\062\057\122\042\347 -\310\347\177\304\054\140\135\057\303\257\236\105\005\303\204\002 -\267\375\054\010\122\117\202\335\243\360\324\206\011\002 +\000\251\011\007\050\023\002\260\231\340\144\252\036\103\026\172 +\163\261\221\240\165\076\250\372\343\070\000\172\354\211\152\040 +\017\213\305\260\233\063\003\132\206\306\130\206\325\301\205\273 +\117\306\234\100\115\312\276\356\151\226\270\255\201\060\232\174 +\222\005\353\005\053\232\110\320\270\166\076\226\310\040\273\322 +\260\361\217\330\254\105\106\377\252\147\140\264\167\176\152\037 +\074\032\122\172\004\075\007\074\205\015\204\320\037\166\012\367 +\152\024\337\162\343\064\174\127\116\126\001\076\171\361\252\051 +\073\154\372\370\217\155\115\310\065\337\256\353\334\044\356\171 +\105\247\205\266\005\210\336\210\135\045\174\227\144\147\011\331 +\277\132\025\005\206\363\011\036\354\130\062\063\021\363\167\144 +\260\166\037\344\020\065\027\033\362\016\261\154\244\052\243\163 +\374\011\037\036\062\031\123\021\347\331\263\054\056\166\056\241 +\243\336\176\152\210\011\350\362\007\212\370\262\315\020\347\342 +\163\100\223\273\010\321\077\341\374\013\224\263\045\357\174\246 +\327\321\257\237\377\226\232\365\221\173\230\013\167\324\176\350 +\007\322\142\265\225\071\343\363\361\155\017\016\145\204\212\143 +\124\305\200\266\340\236\113\175\107\046\247\001\010\135\321\210 +\236\327\303\062\104\372\202\112\012\150\124\177\070\123\003\314 +\244\000\063\144\121\131\013\243\202\221\172\136\354\026\302\363 +\052\346\142\332\052\333\131\142\020\045\112\052\201\013\107\007 +\103\006\160\207\322\372\223\021\051\172\110\115\353\224\307\160 +\115\257\147\325\121\261\200\040\001\001\264\172\010\246\220\177 +\116\340\357\007\101\207\257\152\245\136\213\373\317\120\262\232 +\124\257\303\211\272\130\055\365\060\230\261\066\162\071\176\111 +\004\375\051\247\114\171\344\005\127\333\224\271\026\123\215\106 +\263\035\225\141\127\126\177\257\360\026\133\141\130\157\066\120 +\021\013\330\254\053\225\026\032\016\037\010\315\066\064\145\020 +\142\146\325\200\137\024\040\137\055\014\240\170\012\150\326\054 +\327\351\157\053\322\112\005\223\374\236\157\153\147\377\210\361 +\116\245\151\112\122\067\005\352\306\026\215\322\304\231\321\202 +\053\073\272\065\165\367\121\121\130\363\310\007\335\344\264\003 +\177\002\003\001\000\001\243\102\060\100\060\035\006\003\125\035 +\016\004\026\004\024\331\164\072\344\060\075\015\367\022\334\176 +\132\005\237\036\064\232\367\341\024\060\017\006\003\125\035\023 +\001\001\377\004\005\060\003\001\001\377\060\016\006\003\125\035 +\017\001\001\377\004\004\003\002\001\206\060\015\006\011\052\206 +\110\206\367\015\001\001\013\005\000\003\202\002\001\000\066\215 +\227\314\102\025\144\051\067\233\046\054\326\373\256\025\151\054 +\153\032\032\367\137\266\371\007\114\131\352\363\311\310\271\256 +\314\272\056\172\334\300\365\260\055\300\073\257\237\160\005\021 +\152\237\045\117\001\051\160\343\345\014\341\352\132\174\334\111 +\273\301\036\052\201\365\026\113\162\221\310\242\061\271\252\332 +\374\235\037\363\135\100\002\023\374\116\034\006\312\263\024\220 +\124\027\031\022\032\361\037\327\014\151\132\366\161\170\364\224 +\175\221\013\216\354\220\124\216\274\157\241\114\253\374\164\144 +\375\161\232\370\101\007\241\315\221\344\074\232\340\233\062\071 +\163\253\052\325\151\310\170\221\046\061\175\342\307\060\361\374 +\024\170\167\022\016\023\364\335\026\224\277\113\147\173\160\123 +\205\312\260\273\363\070\115\054\220\071\300\015\302\135\153\351 +\342\345\325\210\215\326\054\277\253\033\276\265\050\207\022\027 +\164\156\374\175\374\217\320\207\046\260\033\373\271\154\253\342 +\236\075\025\301\073\056\147\002\130\221\237\357\370\102\037\054 +\267\150\365\165\255\317\265\366\377\021\175\302\360\044\245\255 +\323\372\240\074\251\372\135\334\245\240\357\104\244\276\326\350 +\345\344\023\226\027\173\006\076\062\355\307\267\102\274\166\243 +\330\145\070\053\070\065\121\041\016\016\157\056\064\023\100\341 +\053\147\014\155\112\101\060\030\043\132\062\125\231\311\027\340 +\074\336\366\354\171\255\053\130\031\242\255\054\042\032\225\216 +\276\226\220\135\102\127\304\371\024\003\065\053\034\055\121\127 +\010\247\072\336\077\344\310\264\003\163\302\301\046\200\273\013 +\102\037\255\015\257\046\162\332\314\276\263\243\203\130\015\202 +\305\037\106\121\343\234\030\314\215\233\215\354\111\353\165\120 +\325\214\050\131\312\164\064\332\214\013\041\253\036\352\033\345 +\307\375\025\076\300\027\252\373\043\156\046\106\313\372\371\261 +\162\153\151\317\042\204\013\142\017\254\331\031\000\224\242\166 +\074\324\055\232\355\004\236\055\006\142\020\067\122\034\205\162 +\033\047\345\314\306\061\354\067\354\143\131\233\013\035\166\314 +\176\062\232\210\225\010\066\122\273\336\166\137\166\111\111\255 +\177\275\145\040\262\311\301\053\166\030\166\237\126\261 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "GTS Root R2" -# Issuer: CN=GTS Root R2,O=Google Trust Services LLC,C=US -# Serial Number:6e:47:a9:c6:5a:b3:e7:20:c5:30:9a:3f:68:52:f2:6f -# Subject: CN=GTS Root R2,O=Google Trust Services LLC,C=US -# Not Valid Before: Wed Jun 22 00:00:00 2016 -# Not Valid After : Sun Jun 22 00:00:00 2036 -# Fingerprint (SHA-256): C4:5D:7B:B0:8E:6D:67:E6:2E:42:35:11:0B:56:4E:5F:78:FD:92:EF:05:8C:84:0A:EA:4E:64:55:D7:58:5C:60 -# Fingerprint (SHA1): D2:73:96:2A:2A:5E:39:9F:73:3F:E1:C7:1E:64:3F:03:38:34:FC:4D +# Trust for "UCA Extended Validation Root" +# Issuer: CN=UCA Extended Validation Root,O=UniTrust,C=CN +# Serial Number:4f:d2:2b:8f:f5:64:c8:33:9e:4f:34:58:66:23:70:60 +# Subject: CN=UCA Extended Validation Root,O=UniTrust,C=CN +# Not Valid Before: Fri Mar 13 00:00:00 2015 +# Not Valid After : Fri Dec 31 00:00:00 2038 +# Fingerprint (SHA-256): D4:3A:F9:B3:54:73:75:5C:96:84:FC:06:D7:D8:CB:70:EE:5C:28:E7:73:FB:29:4E:B4:1E:E7:17:22:92:4D:24 +# Fingerprint (SHA1): A3:A1:B0:6F:24:61:23:4A:E3:36:A5:C2:37:FC:A6:FF:DD:F0:D7:3A CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GTS Root R2" +CKA_LABEL UTF8 "UCA Extended Validation Root" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\322\163\226\052\052\136\071\237\163\077\341\307\036\144\077\003 -\070\064\374\115 +\243\241\260\157\044\141\043\112\343\066\245\302\067\374\246\377 +\335\360\327\072 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\104\355\232\016\244\011\073\000\362\256\114\243\306\141\260\213 +\241\363\137\103\306\064\233\332\277\214\176\005\123\255\226\342 END CKA_ISSUER MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\062 +\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 +\163\164\061\045\060\043\006\003\125\004\003\014\034\125\103\101 +\040\105\170\164\145\156\144\145\144\040\126\141\154\151\144\141 +\164\151\157\156\040\122\157\157\164 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\156\107\251\306\132\263\347\040\305\060\232\077\150\122 -\362\157 +\002\020\117\322\053\217\365\144\310\063\236\117\064\130\146\043 +\160\140 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST @@ -18171,723 +17027,573 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "GTS Root R3" +# Certificate "Certigna Root CA" # -# Issuer: CN=GTS Root R3,O=Google Trust Services LLC,C=US -# Serial Number:6e:47:a9:c7:6c:a9:73:24:40:89:0f:03:55:dd:8d:1d -# Subject: CN=GTS Root R3,O=Google Trust Services LLC,C=US -# Not Valid Before: Wed Jun 22 00:00:00 2016 -# Not Valid After : Sun Jun 22 00:00:00 2036 -# Fingerprint (SHA-256): 15:D5:B8:77:46:19:EA:7D:54:CE:1C:A6:D0:B0:C4:03:E0:37:A9:17:F1:31:E8:A0:4E:1E:6B:7A:71:BA:BC:E5 -# Fingerprint (SHA1): 30:D4:24:6F:07:FF:DB:91:89:8A:0B:E9:49:66:11:EB:8C:5E:46:E5 +# Issuer: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR +# Serial Number:00:ca:e9:1b:89:f1:55:03:0d:a3:e6:41:6d:c4:e3:a6:e1 +# Subject: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR +# Not Valid Before: Tue Oct 01 08:32:27 2013 +# Not Valid After : Sat Oct 01 08:32:27 2033 +# Fingerprint (SHA-256): D4:8D:3D:23:EE:DB:50:A4:59:E5:51:97:60:1C:27:77:4B:9D:7B:18:C9:4D:5A:05:95:11:A1:02:50:B9:31:68 +# Fingerprint (SHA1): 2D:0D:52:14:FF:9E:AD:99:24:01:74:20:47:6E:6C:85:27:27:F5:43 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GTS Root R3" +CKA_LABEL UTF8 "Certigna Root CA" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\063 +\060\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061 +\022\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157 +\164\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060 +\060\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063 +\066\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164 +\151\147\156\141\040\122\157\157\164\040\103\101 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\063 +\060\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061 +\022\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157 +\164\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060 +\060\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063 +\066\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164 +\151\147\156\141\040\122\157\157\164\040\103\101 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\156\107\251\307\154\251\163\044\100\211\017\003\125\335 -\215\035 +\002\021\000\312\351\033\211\361\125\003\015\243\346\101\155\304 +\343\246\341 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\014\060\202\001\221\240\003\002\001\002\002\020\156 -\107\251\307\154\251\163\044\100\211\017\003\125\335\215\035\060 -\012\006\010\052\206\110\316\075\004\003\003\060\107\061\013\060 -\011\006\003\125\004\006\023\002\125\123\061\042\060\040\006\003 -\125\004\012\023\031\107\157\157\147\154\145\040\124\162\165\163 -\164\040\123\145\162\166\151\143\145\163\040\114\114\103\061\024 -\060\022\006\003\125\004\003\023\013\107\124\123\040\122\157\157 -\164\040\122\063\060\036\027\015\061\066\060\066\062\062\060\060 -\060\060\060\060\132\027\015\063\066\060\066\062\062\060\060\060 -\060\060\060\132\060\107\061\013\060\011\006\003\125\004\006\023 -\002\125\123\061\042\060\040\006\003\125\004\012\023\031\107\157 -\157\147\154\145\040\124\162\165\163\164\040\123\145\162\166\151 -\143\145\163\040\114\114\103\061\024\060\022\006\003\125\004\003 -\023\013\107\124\123\040\122\157\157\164\040\122\063\060\166\060 -\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000 -\042\003\142\000\004\037\117\063\207\063\051\212\241\204\336\313 -\307\041\130\101\211\352\126\235\053\113\205\306\035\114\047\274 -\177\046\121\162\157\342\237\326\243\312\314\105\024\106\213\255 -\357\176\206\214\354\261\176\057\377\251\161\235\030\204\105\004 -\101\125\156\053\352\046\177\273\220\001\343\113\031\272\344\124 -\226\105\011\261\325\154\221\104\255\204\023\216\232\214\015\200 -\014\062\366\340\047\243\102\060\100\060\016\006\003\125\035\017 -\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023 -\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035 -\016\004\026\004\024\301\361\046\272\240\055\256\205\201\317\323 -\361\052\022\275\270\012\147\375\274\060\012\006\010\052\206\110 -\316\075\004\003\003\003\151\000\060\146\002\061\000\200\133\244 -\174\043\300\225\245\054\334\276\211\157\043\271\243\335\145\000 -\122\136\221\254\310\235\162\164\202\123\013\175\251\100\275\150 -\140\305\341\270\124\073\301\066\027\045\330\301\275\002\061\000 -\236\065\222\164\205\045\121\365\044\354\144\122\044\120\245\037 -\333\350\313\311\166\354\354\202\156\365\205\030\123\350\270\343 -\232\051\252\226\323\203\043\311\244\173\141\263\314\002\350\135 +\060\202\006\133\060\202\004\103\240\003\002\001\002\002\021\000 +\312\351\033\211\361\125\003\015\243\346\101\155\304\343\246\341 +\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 +\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061\022 +\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157\164 +\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060\060 +\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063\066 +\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164\151 +\147\156\141\040\122\157\157\164\040\103\101\060\036\027\015\061 +\063\061\060\060\061\060\070\063\062\062\067\132\027\015\063\063 +\061\060\060\061\060\070\063\062\062\067\132\060\132\061\013\060 +\011\006\003\125\004\006\023\002\106\122\061\022\060\020\006\003 +\125\004\012\014\011\104\150\151\155\171\157\164\151\163\061\034 +\060\032\006\003\125\004\013\014\023\060\060\060\062\040\064\070 +\061\064\066\063\060\070\061\060\060\060\063\066\061\031\060\027 +\006\003\125\004\003\014\020\103\145\162\164\151\147\156\141\040 +\122\157\157\164\040\103\101\060\202\002\042\060\015\006\011\052 +\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060 +\202\002\012\002\202\002\001\000\315\030\071\145\032\131\261\352 +\144\026\016\214\224\044\225\174\203\323\305\071\046\334\014\357 +\026\127\215\327\330\254\243\102\177\202\312\355\315\133\333\016 +\267\055\355\105\010\027\262\331\263\313\326\027\122\162\050\333 +\216\116\236\212\266\013\371\236\204\232\115\166\336\042\051\134 +\322\263\322\006\076\060\071\251\164\243\222\126\034\241\157\114 +\012\040\155\237\043\172\264\306\332\054\344\035\054\334\263\050 +\320\023\362\114\116\002\111\241\124\100\236\346\345\005\240\055 +\204\310\377\230\154\320\353\212\032\204\010\036\267\150\043\356 +\043\325\160\316\155\121\151\020\356\241\172\302\321\042\061\302 +\202\205\322\362\125\166\120\174\045\172\311\204\134\013\254\335 +\102\116\053\347\202\242\044\211\313\220\262\320\356\043\272\146 +\114\273\142\244\371\123\132\144\173\174\230\372\243\110\236\017 +\225\256\247\030\364\152\354\056\003\105\257\360\164\370\052\315 +\172\135\321\276\104\046\062\051\361\361\365\154\314\176\002\041 +\013\237\157\244\077\276\235\123\342\317\175\251\054\174\130\032 +\227\341\075\067\067\030\146\050\322\100\305\121\212\214\303\055 +\316\123\210\044\130\144\060\026\305\252\340\326\012\246\100\337 +\170\366\365\004\174\151\023\204\274\321\321\247\006\317\001\367 +\150\300\250\127\273\072\141\255\004\214\223\343\255\374\360\333 +\104\155\131\334\111\131\256\254\232\231\066\060\101\173\166\063 +\042\207\243\302\222\206\156\371\160\356\256\207\207\225\033\304 +\172\275\061\363\324\322\345\231\377\276\110\354\165\365\170\026 +\035\246\160\301\177\074\033\241\222\373\317\310\074\326\305\223 +\012\217\365\125\072\166\225\316\131\230\212\011\225\167\062\232 +\203\272\054\004\072\227\275\324\057\276\327\154\233\242\312\175 +\155\046\311\125\325\317\303\171\122\010\011\231\007\044\055\144 +\045\153\246\041\151\233\152\335\164\115\153\227\172\101\275\253 +\027\371\220\027\110\217\066\371\055\325\305\333\356\252\205\105 +\101\372\315\072\105\261\150\346\066\114\233\220\127\354\043\271 +\207\010\302\304\011\361\227\206\052\050\115\342\164\300\332\304 +\214\333\337\342\241\027\131\316\044\131\164\061\332\177\375\060 +\155\331\334\341\152\341\374\137\002\003\001\000\001\243\202\001 +\032\060\202\001\026\060\017\006\003\125\035\023\001\001\377\004 +\005\060\003\001\001\377\060\016\006\003\125\035\017\001\001\377 +\004\004\003\002\001\006\060\035\006\003\125\035\016\004\026\004 +\024\030\207\126\340\156\167\356\044\065\074\116\163\232\037\326 +\341\342\171\176\053\060\037\006\003\125\035\043\004\030\060\026 +\200\024\030\207\126\340\156\167\356\044\065\074\116\163\232\037 +\326\341\342\171\176\053\060\104\006\003\125\035\040\004\075\060 +\073\060\071\006\004\125\035\040\000\060\061\060\057\006\010\053 +\006\001\005\005\007\002\001\026\043\150\164\164\160\163\072\057 +\057\167\167\167\167\056\143\145\162\164\151\147\156\141\056\146 +\162\057\141\165\164\157\162\151\164\145\163\057\060\155\006\003 +\125\035\037\004\146\060\144\060\057\240\055\240\053\206\051\150 +\164\164\160\072\057\057\143\162\154\056\143\145\162\164\151\147 +\156\141\056\146\162\057\143\145\162\164\151\147\156\141\162\157 +\157\164\143\141\056\143\162\154\060\061\240\057\240\055\206\053 +\150\164\164\160\072\057\057\143\162\154\056\144\150\151\155\171 +\157\164\151\163\056\143\157\155\057\143\145\162\164\151\147\156 +\141\162\157\157\164\143\141\056\143\162\154\060\015\006\011\052 +\206\110\206\367\015\001\001\013\005\000\003\202\002\001\000\224 +\270\236\117\360\343\225\010\042\347\315\150\101\367\034\125\325 +\174\000\342\055\072\211\135\150\070\057\121\042\013\112\215\313 +\351\273\135\076\273\134\075\261\050\376\344\123\125\023\317\241 +\220\033\002\035\137\146\106\011\063\050\341\015\044\227\160\323 +\020\037\352\144\127\226\273\135\332\347\304\214\117\114\144\106 +\035\134\207\343\131\336\102\321\233\250\176\246\211\335\217\034 +\311\060\202\355\073\234\315\300\351\031\340\152\330\002\165\067 +\253\367\064\050\050\221\362\004\012\117\065\343\140\046\001\372 +\320\021\214\371\021\152\356\257\075\303\120\323\217\137\063\171 +\074\206\250\163\105\220\214\040\266\162\163\027\043\276\007\145 +\345\170\222\015\272\001\300\353\214\034\146\277\254\206\167\001 +\224\015\234\346\351\071\215\037\246\121\214\231\014\071\167\341 +\264\233\372\034\147\127\157\152\152\216\251\053\114\127\171\172 +\127\042\317\315\137\143\106\215\134\131\072\206\370\062\107\142 +\243\147\015\030\221\334\373\246\153\365\110\141\163\043\131\216 +\002\247\274\104\352\364\111\235\361\124\130\371\140\257\332\030 +\244\057\050\105\334\172\240\210\206\135\363\073\347\377\051\065 +\200\374\144\103\224\346\343\034\157\276\255\016\052\143\231\053 +\311\176\205\366\161\350\006\003\225\376\336\217\110\034\132\324 +\222\350\053\356\347\061\333\272\004\152\207\230\347\305\137\357 +\175\247\042\367\001\330\115\371\211\320\016\232\005\131\244\236 +\230\331\157\053\312\160\276\144\302\125\243\364\351\257\303\222 +\051\334\210\026\044\231\074\215\046\230\266\133\267\314\316\267 +\067\007\375\046\331\230\205\044\377\131\043\003\232\355\235\235 +\250\344\136\070\316\327\122\015\157\322\077\155\261\005\153\111 +\316\212\221\106\163\364\366\057\360\250\163\167\016\145\254\241 +\215\146\122\151\176\113\150\014\307\036\067\047\203\245\214\307 +\002\344\024\315\111\001\260\163\263\375\306\220\072\157\322\154 +\355\073\356\354\221\276\242\103\135\213\000\112\146\045\104\160 +\336\100\017\370\174\025\367\242\316\074\327\136\023\214\201\027 +\030\027\321\275\361\167\020\072\324\145\071\301\047\254\127\054 +\045\124\377\242\332\117\212\141\071\136\256\075\112\214\275 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "GTS Root R3" -# Issuer: CN=GTS Root R3,O=Google Trust Services LLC,C=US -# Serial Number:6e:47:a9:c7:6c:a9:73:24:40:89:0f:03:55:dd:8d:1d -# Subject: CN=GTS Root R3,O=Google Trust Services LLC,C=US -# Not Valid Before: Wed Jun 22 00:00:00 2016 -# Not Valid After : Sun Jun 22 00:00:00 2036 -# Fingerprint (SHA-256): 15:D5:B8:77:46:19:EA:7D:54:CE:1C:A6:D0:B0:C4:03:E0:37:A9:17:F1:31:E8:A0:4E:1E:6B:7A:71:BA:BC:E5 -# Fingerprint (SHA1): 30:D4:24:6F:07:FF:DB:91:89:8A:0B:E9:49:66:11:EB:8C:5E:46:E5 +# Trust for "Certigna Root CA" +# Issuer: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR +# Serial Number:00:ca:e9:1b:89:f1:55:03:0d:a3:e6:41:6d:c4:e3:a6:e1 +# Subject: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR +# Not Valid Before: Tue Oct 01 08:32:27 2013 +# Not Valid After : Sat Oct 01 08:32:27 2033 +# Fingerprint (SHA-256): D4:8D:3D:23:EE:DB:50:A4:59:E5:51:97:60:1C:27:77:4B:9D:7B:18:C9:4D:5A:05:95:11:A1:02:50:B9:31:68 +# Fingerprint (SHA1): 2D:0D:52:14:FF:9E:AD:99:24:01:74:20:47:6E:6C:85:27:27:F5:43 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GTS Root R3" +CKA_LABEL UTF8 "Certigna Root CA" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\060\324\044\157\007\377\333\221\211\212\013\351\111\146\021\353 -\214\136\106\345 +\055\015\122\024\377\236\255\231\044\001\164\040\107\156\154\205 +\047\047\365\103 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\032\171\133\153\004\122\234\135\307\164\063\033\045\232\371\045 +\016\134\060\142\047\353\133\274\327\256\142\272\351\325\337\167 END CKA_ISSUER MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\063 +\060\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061 +\022\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157 +\164\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060 +\060\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063 +\066\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164 +\151\147\156\141\040\122\157\157\164\040\103\101 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\156\107\251\307\154\251\163\044\100\211\017\003\125\335 -\215\035 +\002\021\000\312\351\033\211\361\125\003\015\243\346\101\155\304 +\343\246\341 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "GTS Root R4" +# Certificate "emSign Root CA - G1" # -# Issuer: CN=GTS Root R4,O=Google Trust Services LLC,C=US -# Serial Number:6e:47:a9:c8:8b:94:b6:e8:bb:3b:2a:d8:a2:b2:c1:99 -# Subject: CN=GTS Root R4,O=Google Trust Services LLC,C=US -# Not Valid Before: Wed Jun 22 00:00:00 2016 -# Not Valid After : Sun Jun 22 00:00:00 2036 -# Fingerprint (SHA-256): 71:CC:A5:39:1F:9E:79:4B:04:80:25:30:B3:63:E1:21:DA:8A:30:43:BB:26:66:2F:EA:4D:CA:7F:C9:51:A4:BD -# Fingerprint (SHA1): 2A:1D:60:27:D9:4A:B1:0A:1C:4D:91:5C:CD:33:A0:CB:3E:2D:54:CB +# Issuer: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN +# Serial Number:31:f5:e4:62:0c:6c:58:ed:d6:d8 +# Subject: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN +# Not Valid Before: Sun Feb 18 18:30:00 2018 +# Not Valid After : Wed Feb 18 18:30:00 2043 +# Fingerprint (SHA-256): 40:F6:AF:03:46:A9:9A:A1:CD:1D:55:5A:4E:9C:CE:62:C7:F9:63:46:03:EE:40:66:15:83:3D:C8:C8:D0:03:67 +# Fingerprint (SHA1): 8A:C7:AD:8F:73:AC:4E:C1:B5:75:4D:A5:40:F4:FC:CF:7C:B5:8E:8C CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GTS Root R4" +CKA_LABEL UTF8 "emSign Root CA - G1" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\064 +\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116\061 +\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 +\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 +\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 +\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032\006 +\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157 +\164\040\103\101\040\055\040\107\061 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\064 +\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116\061 +\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 +\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 +\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 +\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032\006 +\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157 +\164\040\103\101\040\055\040\107\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\156\107\251\310\213\224\266\350\273\073\052\330\242\262 -\301\231 +\002\012\061\365\344\142\014\154\130\355\326\330 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\012\060\202\001\221\240\003\002\001\002\002\020\156 -\107\251\310\213\224\266\350\273\073\052\330\242\262\301\231\060 -\012\006\010\052\206\110\316\075\004\003\003\060\107\061\013\060 -\011\006\003\125\004\006\023\002\125\123\061\042\060\040\006\003 -\125\004\012\023\031\107\157\157\147\154\145\040\124\162\165\163 -\164\040\123\145\162\166\151\143\145\163\040\114\114\103\061\024 -\060\022\006\003\125\004\003\023\013\107\124\123\040\122\157\157 -\164\040\122\064\060\036\027\015\061\066\060\066\062\062\060\060 -\060\060\060\060\132\027\015\063\066\060\066\062\062\060\060\060 -\060\060\060\132\060\107\061\013\060\011\006\003\125\004\006\023 -\002\125\123\061\042\060\040\006\003\125\004\012\023\031\107\157 -\157\147\154\145\040\124\162\165\163\164\040\123\145\162\166\151 -\143\145\163\040\114\114\103\061\024\060\022\006\003\125\004\003 -\023\013\107\124\123\040\122\157\157\164\040\122\064\060\166\060 -\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000 -\042\003\142\000\004\363\164\163\247\150\213\140\256\103\270\065 -\305\201\060\173\113\111\235\373\301\141\316\346\336\106\275\153 -\325\141\030\065\256\100\335\163\367\211\221\060\132\353\074\356 -\205\174\242\100\166\073\251\306\270\107\330\052\347\222\221\152 -\163\351\261\162\071\237\051\237\242\230\323\137\136\130\206\145 -\017\241\204\145\006\321\334\213\311\307\163\310\214\152\057\345 -\304\253\321\035\212\243\102\060\100\060\016\006\003\125\035\017 -\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023 -\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035 -\016\004\026\004\024\200\114\326\353\164\377\111\066\243\325\330 -\374\265\076\305\152\360\224\035\214\060\012\006\010\052\206\110 -\316\075\004\003\003\003\147\000\060\144\002\060\152\120\122\164 -\010\304\160\334\236\120\164\041\350\215\172\041\303\117\226\156 -\025\321\042\065\141\055\372\010\067\356\031\155\255\333\262\314 -\175\007\064\365\140\031\054\265\064\331\157\040\002\060\003\161 -\261\272\243\140\013\206\355\232\010\152\225\150\237\342\263\341 -\223\144\174\136\223\246\337\171\055\215\205\343\224\317\043\135 -\161\314\362\260\115\326\376\231\310\224\251\165\242\343 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "GTS Root R4" -# Issuer: CN=GTS Root R4,O=Google Trust Services LLC,C=US -# Serial Number:6e:47:a9:c8:8b:94:b6:e8:bb:3b:2a:d8:a2:b2:c1:99 -# Subject: CN=GTS Root R4,O=Google Trust Services LLC,C=US -# Not Valid Before: Wed Jun 22 00:00:00 2016 -# Not Valid After : Sun Jun 22 00:00:00 2036 -# Fingerprint (SHA-256): 71:CC:A5:39:1F:9E:79:4B:04:80:25:30:B3:63:E1:21:DA:8A:30:43:BB:26:66:2F:EA:4D:CA:7F:C9:51:A4:BD -# Fingerprint (SHA1): 2A:1D:60:27:D9:4A:B1:0A:1C:4D:91:5C:CD:33:A0:CB:3E:2D:54:CB +\060\202\003\224\060\202\002\174\240\003\002\001\002\002\012\061 +\365\344\142\014\154\130\355\326\330\060\015\006\011\052\206\110 +\206\367\015\001\001\013\005\000\060\147\061\013\060\011\006\003 +\125\004\006\023\002\111\116\061\023\060\021\006\003\125\004\013 +\023\012\145\155\123\151\147\156\040\120\113\111\061\045\060\043 +\006\003\125\004\012\023\034\145\115\165\144\150\162\141\040\124 +\145\143\150\156\157\154\157\147\151\145\163\040\114\151\155\151 +\164\145\144\061\034\060\032\006\003\125\004\003\023\023\145\155 +\123\151\147\156\040\122\157\157\164\040\103\101\040\055\040\107 +\061\060\036\027\015\061\070\060\062\061\070\061\070\063\060\060 +\060\132\027\015\064\063\060\062\061\070\061\070\063\060\060\060 +\132\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116 +\061\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147 +\156\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034 +\145\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157 +\147\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032 +\006\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157 +\157\164\040\103\101\040\055\040\107\061\060\202\001\042\060\015 +\006\011\052\206\110\206\367\015\001\001\001\005\000\003\202\001 +\017\000\060\202\001\012\002\202\001\001\000\223\113\273\351\146 +\212\356\235\133\325\064\223\320\033\036\303\347\236\270\144\063 +\177\143\170\150\264\315\056\161\165\327\233\040\306\115\051\274 +\266\150\140\212\367\041\232\126\065\132\363\166\275\330\315\232 +\377\223\126\113\245\131\006\241\223\064\051\335\026\064\165\116 +\362\201\264\307\226\116\255\031\025\122\112\376\074\160\165\160 +\315\257\053\253\025\232\063\074\252\263\213\252\315\103\375\365 +\352\160\377\355\317\021\073\224\316\116\062\026\323\043\100\052 +\167\263\257\074\001\054\154\355\231\054\213\331\116\151\230\262 +\367\217\101\260\062\170\141\326\015\137\303\372\242\100\222\035 +\134\027\346\160\076\065\347\242\267\302\142\342\253\244\070\114 +\265\071\065\157\352\003\151\372\072\124\150\205\155\326\362\057 +\103\125\036\221\015\016\330\325\152\244\226\321\023\074\054\170 +\120\350\072\222\322\027\126\345\065\032\100\034\076\215\054\355 +\071\337\102\340\203\101\164\337\243\315\302\206\140\110\150\343 +\151\013\124\000\213\344\166\151\041\015\171\116\064\010\136\024 +\302\314\261\267\255\327\174\160\212\307\205\002\003\001\000\001 +\243\102\060\100\060\035\006\003\125\035\016\004\026\004\024\373 +\357\015\206\236\260\343\335\251\271\361\041\027\177\076\374\360 +\167\053\032\060\016\006\003\125\035\017\001\001\377\004\004\003 +\002\001\006\060\017\006\003\125\035\023\001\001\377\004\005\060 +\003\001\001\377\060\015\006\011\052\206\110\206\367\015\001\001 +\013\005\000\003\202\001\001\000\131\377\362\214\365\207\175\161 +\075\243\237\033\133\321\332\370\323\234\153\066\275\233\251\141 +\353\336\026\054\164\075\236\346\165\332\327\272\247\274\102\027 +\347\075\221\353\345\175\335\076\234\361\317\222\254\154\110\314 +\302\042\077\151\073\305\266\025\057\243\065\306\150\052\034\127 +\257\071\357\215\320\065\303\030\014\173\000\126\034\315\213\031 +\164\336\276\017\022\340\320\252\241\077\002\064\261\160\316\235 +\030\326\010\003\011\106\356\140\340\176\266\304\111\004\121\175 +\160\140\274\252\262\377\171\162\172\246\035\075\137\052\370\312 +\342\375\071\267\107\271\353\176\337\004\043\257\372\234\006\007 +\351\373\143\223\200\100\265\306\154\012\061\050\316\014\237\317 +\263\043\065\200\101\215\154\304\067\173\201\057\200\241\100\102 +\205\351\331\070\215\350\241\123\315\001\277\151\350\132\006\362 +\105\013\220\372\256\341\277\235\362\256\127\074\245\256\262\126 +\364\213\145\100\351\375\061\201\054\364\071\011\330\356\153\247 +\264\246\035\025\245\230\367\001\201\330\205\175\363\121\134\161 +\210\336\272\314\037\200\176\112 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "emSign Root CA - G1" +# Issuer: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN +# Serial Number:31:f5:e4:62:0c:6c:58:ed:d6:d8 +# Subject: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN +# Not Valid Before: Sun Feb 18 18:30:00 2018 +# Not Valid After : Wed Feb 18 18:30:00 2043 +# Fingerprint (SHA-256): 40:F6:AF:03:46:A9:9A:A1:CD:1D:55:5A:4E:9C:CE:62:C7:F9:63:46:03:EE:40:66:15:83:3D:C8:C8:D0:03:67 +# Fingerprint (SHA1): 8A:C7:AD:8F:73:AC:4E:C1:B5:75:4D:A5:40:F4:FC:CF:7C:B5:8E:8C CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GTS Root R4" +CKA_LABEL UTF8 "emSign Root CA - G1" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\052\035\140\047\331\112\261\012\034\115\221\134\315\063\240\313 -\076\055\124\313 +\212\307\255\217\163\254\116\301\265\165\115\245\100\364\374\317 +\174\265\216\214 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\135\266\152\304\140\027\044\152\032\231\250\113\356\136\264\046 +\234\102\204\127\335\313\013\247\056\225\255\266\363\332\274\254 END CKA_ISSUER MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 -\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 -\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 -\123\040\122\157\157\164\040\122\064 +\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116\061 +\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 +\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 +\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 +\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032\006 +\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157 +\164\040\103\101\040\055\040\107\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\156\107\251\310\213\224\266\350\273\073\052\330\242\262 -\301\231 +\002\012\061\365\344\142\014\154\130\355\326\330 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "UCA Global G2 Root" +# Certificate "emSign ECC Root CA - G3" # -# Issuer: CN=UCA Global G2 Root,O=UniTrust,C=CN -# Serial Number:5d:df:b1:da:5a:a3:ed:5d:be:5a:65:20:65:03:90:ef -# Subject: CN=UCA Global G2 Root,O=UniTrust,C=CN -# Not Valid Before: Fri Mar 11 00:00:00 2016 -# Not Valid After : Mon Dec 31 00:00:00 2040 -# Fingerprint (SHA-256): 9B:EA:11:C9:76:FE:01:47:64:C1:BE:56:A6:F9:14:B5:A5:60:31:7A:BD:99:88:39:33:82:E5:16:1A:A0:49:3C -# Fingerprint (SHA1): 28:F9:78:16:19:7A:FF:18:25:18:AA:44:FE:C1:A0:CE:5C:B6:4C:8A +# Issuer: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN +# Serial Number:3c:f6:07:a9:68:70:0e:da:8b:84 +# Subject: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN +# Not Valid Before: Sun Feb 18 18:30:00 2018 +# Not Valid After : Wed Feb 18 18:30:00 2043 +# Fingerprint (SHA-256): 86:A1:EC:BA:08:9C:4A:8D:3B:BE:27:34:C6:12:BA:34:1D:81:3E:04:3C:F9:E8:A8:62:CD:5C:57:A3:6B:BE:6B +# Fingerprint (SHA1): 30:43:FA:4F:F2:57:DC:A0:C3:80:EE:2E:58:EA:78:B2:3F:E6:BB:C1 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "UCA Global G2 Root" +CKA_LABEL UTF8 "emSign ECC Root CA - G3" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\075\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 -\163\164\061\033\060\031\006\003\125\004\003\014\022\125\103\101 -\040\107\154\157\142\141\154\040\107\062\040\122\157\157\164 +\060\153\061\013\060\011\006\003\125\004\006\023\002\111\116\061 +\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 +\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 +\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 +\151\145\163\040\114\151\155\151\164\145\144\061\040\060\036\006 +\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103 +\040\122\157\157\164\040\103\101\040\055\040\107\063 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\075\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 -\163\164\061\033\060\031\006\003\125\004\003\014\022\125\103\101 -\040\107\154\157\142\141\154\040\107\062\040\122\157\157\164 +\060\153\061\013\060\011\006\003\125\004\006\023\002\111\116\061 +\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 +\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 +\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 +\151\145\163\040\114\151\155\151\164\145\144\061\040\060\036\006 +\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103 +\040\122\157\157\164\040\103\101\040\055\040\107\063 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\135\337\261\332\132\243\355\135\276\132\145\040\145\003 -\220\357 +\002\012\074\366\007\251\150\160\016\332\213\204 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\106\060\202\003\056\240\003\002\001\002\002\020\135 -\337\261\332\132\243\355\135\276\132\145\040\145\003\220\357\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\075 -\061\013\060\011\006\003\125\004\006\023\002\103\116\061\021\060 -\017\006\003\125\004\012\014\010\125\156\151\124\162\165\163\164 -\061\033\060\031\006\003\125\004\003\014\022\125\103\101\040\107 -\154\157\142\141\154\040\107\062\040\122\157\157\164\060\036\027 -\015\061\066\060\063\061\061\060\060\060\060\060\060\132\027\015 -\064\060\061\062\063\061\060\060\060\060\060\060\132\060\075\061 -\013\060\011\006\003\125\004\006\023\002\103\116\061\021\060\017 -\006\003\125\004\012\014\010\125\156\151\124\162\165\163\164\061 -\033\060\031\006\003\125\004\003\014\022\125\103\101\040\107\154 -\157\142\141\154\040\107\062\040\122\157\157\164\060\202\002\042 -\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 -\202\002\017\000\060\202\002\012\002\202\002\001\000\305\346\053 -\157\174\357\046\005\047\243\201\044\332\157\313\001\371\231\232 -\251\062\302\042\207\141\101\221\073\313\303\150\033\006\305\114 -\251\053\301\147\027\042\035\053\355\371\051\211\223\242\170\275 -\222\153\240\243\015\242\176\312\223\263\246\321\214\065\325\165 -\371\027\366\317\105\305\345\172\354\167\223\240\217\043\256\016 -\032\003\177\276\324\320\355\056\173\253\106\043\133\377\054\346 -\124\172\224\300\052\025\360\311\215\260\172\073\044\341\327\150 -\342\061\074\006\063\106\266\124\021\246\245\057\042\124\052\130 -\015\001\002\361\372\025\121\147\154\300\372\327\266\033\177\321 -\126\210\057\032\072\215\073\273\202\021\340\107\000\320\122\207 -\253\373\206\176\017\044\153\100\235\064\147\274\215\307\055\206 -\157\171\076\216\251\074\027\113\177\260\231\343\260\161\140\334 -\013\365\144\303\316\103\274\155\161\271\322\336\047\133\212\350 -\330\306\256\341\131\175\317\050\055\065\270\225\126\032\361\262 -\130\113\267\022\067\310\174\263\355\113\200\341\215\372\062\043 -\266\157\267\110\225\010\261\104\116\205\214\072\002\124\040\057 -\337\277\127\117\073\072\220\041\327\301\046\065\124\040\354\307 -\077\107\354\357\132\277\113\172\301\255\073\027\120\134\142\330 -\017\113\112\334\053\372\156\274\163\222\315\354\307\120\350\101 -\226\327\251\176\155\330\351\035\217\212\265\271\130\222\272\112 -\222\053\014\126\375\200\353\010\360\136\051\156\033\034\014\257 -\217\223\211\255\333\275\243\236\041\312\211\031\354\337\265\303 -\032\353\026\376\170\066\114\326\156\320\076\027\034\220\027\153 -\046\272\373\172\057\277\021\034\030\016\055\163\003\217\240\345 -\065\240\132\342\114\165\035\161\341\071\070\123\170\100\314\203 -\223\327\012\236\235\133\217\212\344\345\340\110\344\110\262\107 -\315\116\052\165\052\173\362\042\366\311\276\011\221\226\127\172 -\210\210\254\356\160\254\371\334\051\343\014\034\073\022\116\104 -\326\247\116\260\046\310\363\331\032\227\221\150\352\357\215\106 -\006\322\126\105\130\232\074\014\017\203\270\005\045\303\071\317 -\073\244\064\211\267\171\022\057\107\305\347\251\227\151\374\246 -\167\147\265\337\173\361\172\145\025\344\141\126\145\002\003\001 -\000\001\243\102\060\100\060\016\006\003\125\035\017\001\001\377 -\004\004\003\002\001\006\060\017\006\003\125\035\023\001\001\377 -\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026 -\004\024\201\304\214\314\365\344\060\377\245\014\010\137\214\025 -\147\041\164\001\337\337\060\015\006\011\052\206\110\206\367\015 -\001\001\013\005\000\003\202\002\001\000\023\145\042\365\216\053 -\255\104\344\313\377\271\150\346\303\200\110\075\004\173\372\043 -\057\172\355\066\332\262\316\155\366\346\236\345\137\130\217\313 -\067\062\241\310\145\266\256\070\075\065\033\076\274\073\266\004 -\320\274\371\111\365\233\367\205\305\066\266\313\274\370\310\071 -\325\344\137\007\275\025\124\227\164\312\312\355\117\272\272\144 -\166\237\201\270\204\105\111\114\215\157\242\353\261\314\321\303 -\224\332\104\302\346\342\352\030\350\242\037\047\005\272\327\345 -\326\251\315\335\357\166\230\215\000\016\315\033\372\003\267\216 -\200\130\016\047\077\122\373\224\242\312\136\145\311\326\204\332 -\271\065\161\363\046\300\117\167\346\201\047\322\167\073\232\024 -\157\171\364\366\320\341\323\224\272\320\127\121\275\047\005\015 -\301\375\310\022\060\356\157\215\021\053\010\235\324\324\277\200 -\105\024\232\210\104\332\060\352\264\247\343\356\357\133\202\325 -\076\326\255\170\222\333\134\074\363\330\255\372\270\153\177\304 -\066\050\266\002\025\212\124\054\234\260\027\163\216\320\067\243 -\024\074\230\225\000\014\051\005\133\236\111\111\261\137\307\343 -\313\317\047\145\216\065\027\267\127\310\060\331\101\133\271\024 -\266\350\302\017\224\061\247\224\230\314\152\353\265\341\047\365 -\020\250\001\350\216\022\142\350\210\314\265\177\106\227\300\233 -\020\146\070\032\066\106\137\042\150\075\337\311\306\023\047\253 -\123\006\254\242\074\206\006\145\157\261\176\261\051\104\232\243 -\272\111\151\050\151\217\327\345\137\255\004\206\144\157\032\240 -\014\305\010\142\316\200\243\320\363\354\150\336\276\063\307\027 -\133\177\200\304\114\114\261\246\204\212\303\073\270\011\315\024 -\201\272\030\343\124\127\066\376\333\057\174\107\241\072\063\310 -\371\130\073\104\117\261\312\002\211\004\226\050\150\305\113\270 -\046\211\273\326\063\057\120\325\376\232\211\272\030\062\222\124 -\306\133\340\235\371\136\345\015\042\233\366\332\342\310\041\262 -\142\041\252\206\100\262\056\144\323\137\310\343\176\021\147\105 -\037\005\376\343\242\357\263\250\263\363\175\217\370\014\037\042 -\037\055\160\264\270\001\064\166\060\000\345\043\170\247\126\327 -\120\037\212\373\006\365\302\031\360\320 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "UCA Global G2 Root" -# Issuer: CN=UCA Global G2 Root,O=UniTrust,C=CN -# Serial Number:5d:df:b1:da:5a:a3:ed:5d:be:5a:65:20:65:03:90:ef -# Subject: CN=UCA Global G2 Root,O=UniTrust,C=CN -# Not Valid Before: Fri Mar 11 00:00:00 2016 -# Not Valid After : Mon Dec 31 00:00:00 2040 -# Fingerprint (SHA-256): 9B:EA:11:C9:76:FE:01:47:64:C1:BE:56:A6:F9:14:B5:A5:60:31:7A:BD:99:88:39:33:82:E5:16:1A:A0:49:3C -# Fingerprint (SHA1): 28:F9:78:16:19:7A:FF:18:25:18:AA:44:FE:C1:A0:CE:5C:B6:4C:8A -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "UCA Global G2 Root" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\050\371\170\026\031\172\377\030\045\030\252\104\376\301\240\316 -\134\266\114\212 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\200\376\360\304\112\360\134\142\062\237\034\272\170\251\120\370 -END -CKA_ISSUER MULTILINE_OCTAL -\060\075\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 -\163\164\061\033\060\031\006\003\125\004\003\014\022\125\103\101 -\040\107\154\157\142\141\154\040\107\062\040\122\157\157\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\135\337\261\332\132\243\355\135\276\132\145\040\145\003 -\220\357 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "UCA Extended Validation Root" -# -# Issuer: CN=UCA Extended Validation Root,O=UniTrust,C=CN -# Serial Number:4f:d2:2b:8f:f5:64:c8:33:9e:4f:34:58:66:23:70:60 -# Subject: CN=UCA Extended Validation Root,O=UniTrust,C=CN -# Not Valid Before: Fri Mar 13 00:00:00 2015 -# Not Valid After : Fri Dec 31 00:00:00 2038 -# Fingerprint (SHA-256): D4:3A:F9:B3:54:73:75:5C:96:84:FC:06:D7:D8:CB:70:EE:5C:28:E7:73:FB:29:4E:B4:1E:E7:17:22:92:4D:24 -# Fingerprint (SHA1): A3:A1:B0:6F:24:61:23:4A:E3:36:A5:C2:37:FC:A6:FF:DD:F0:D7:3A -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "UCA Extended Validation Root" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 -\163\164\061\045\060\043\006\003\125\004\003\014\034\125\103\101 -\040\105\170\164\145\156\144\145\144\040\126\141\154\151\144\141 -\164\151\157\156\040\122\157\157\164 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 -\163\164\061\045\060\043\006\003\125\004\003\014\034\125\103\101 -\040\105\170\164\145\156\144\145\144\040\126\141\154\151\144\141 -\164\151\157\156\040\122\157\157\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\117\322\053\217\365\144\310\063\236\117\064\130\146\043 -\160\140 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\132\060\202\003\102\240\003\002\001\002\002\020\117 -\322\053\217\365\144\310\063\236\117\064\130\146\043\160\140\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\107 -\061\013\060\011\006\003\125\004\006\023\002\103\116\061\021\060 -\017\006\003\125\004\012\014\010\125\156\151\124\162\165\163\164 -\061\045\060\043\006\003\125\004\003\014\034\125\103\101\040\105 -\170\164\145\156\144\145\144\040\126\141\154\151\144\141\164\151 -\157\156\040\122\157\157\164\060\036\027\015\061\065\060\063\061 -\063\060\060\060\060\060\060\132\027\015\063\070\061\062\063\061 -\060\060\060\060\060\060\132\060\107\061\013\060\011\006\003\125 -\004\006\023\002\103\116\061\021\060\017\006\003\125\004\012\014 -\010\125\156\151\124\162\165\163\164\061\045\060\043\006\003\125 -\004\003\014\034\125\103\101\040\105\170\164\145\156\144\145\144 -\040\126\141\154\151\144\141\164\151\157\156\040\122\157\157\164 -\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 -\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 -\000\251\011\007\050\023\002\260\231\340\144\252\036\103\026\172 -\163\261\221\240\165\076\250\372\343\070\000\172\354\211\152\040 -\017\213\305\260\233\063\003\132\206\306\130\206\325\301\205\273 -\117\306\234\100\115\312\276\356\151\226\270\255\201\060\232\174 -\222\005\353\005\053\232\110\320\270\166\076\226\310\040\273\322 -\260\361\217\330\254\105\106\377\252\147\140\264\167\176\152\037 -\074\032\122\172\004\075\007\074\205\015\204\320\037\166\012\367 -\152\024\337\162\343\064\174\127\116\126\001\076\171\361\252\051 -\073\154\372\370\217\155\115\310\065\337\256\353\334\044\356\171 -\105\247\205\266\005\210\336\210\135\045\174\227\144\147\011\331 -\277\132\025\005\206\363\011\036\354\130\062\063\021\363\167\144 -\260\166\037\344\020\065\027\033\362\016\261\154\244\052\243\163 -\374\011\037\036\062\031\123\021\347\331\263\054\056\166\056\241 -\243\336\176\152\210\011\350\362\007\212\370\262\315\020\347\342 -\163\100\223\273\010\321\077\341\374\013\224\263\045\357\174\246 -\327\321\257\237\377\226\232\365\221\173\230\013\167\324\176\350 -\007\322\142\265\225\071\343\363\361\155\017\016\145\204\212\143 -\124\305\200\266\340\236\113\175\107\046\247\001\010\135\321\210 -\236\327\303\062\104\372\202\112\012\150\124\177\070\123\003\314 -\244\000\063\144\121\131\013\243\202\221\172\136\354\026\302\363 -\052\346\142\332\052\333\131\142\020\045\112\052\201\013\107\007 -\103\006\160\207\322\372\223\021\051\172\110\115\353\224\307\160 -\115\257\147\325\121\261\200\040\001\001\264\172\010\246\220\177 -\116\340\357\007\101\207\257\152\245\136\213\373\317\120\262\232 -\124\257\303\211\272\130\055\365\060\230\261\066\162\071\176\111 -\004\375\051\247\114\171\344\005\127\333\224\271\026\123\215\106 -\263\035\225\141\127\126\177\257\360\026\133\141\130\157\066\120 -\021\013\330\254\053\225\026\032\016\037\010\315\066\064\145\020 -\142\146\325\200\137\024\040\137\055\014\240\170\012\150\326\054 -\327\351\157\053\322\112\005\223\374\236\157\153\147\377\210\361 -\116\245\151\112\122\067\005\352\306\026\215\322\304\231\321\202 -\053\073\272\065\165\367\121\121\130\363\310\007\335\344\264\003 -\177\002\003\001\000\001\243\102\060\100\060\035\006\003\125\035 -\016\004\026\004\024\331\164\072\344\060\075\015\367\022\334\176 -\132\005\237\036\064\232\367\341\024\060\017\006\003\125\035\023 -\001\001\377\004\005\060\003\001\001\377\060\016\006\003\125\035 -\017\001\001\377\004\004\003\002\001\206\060\015\006\011\052\206 -\110\206\367\015\001\001\013\005\000\003\202\002\001\000\066\215 -\227\314\102\025\144\051\067\233\046\054\326\373\256\025\151\054 -\153\032\032\367\137\266\371\007\114\131\352\363\311\310\271\256 -\314\272\056\172\334\300\365\260\055\300\073\257\237\160\005\021 -\152\237\045\117\001\051\160\343\345\014\341\352\132\174\334\111 -\273\301\036\052\201\365\026\113\162\221\310\242\061\271\252\332 -\374\235\037\363\135\100\002\023\374\116\034\006\312\263\024\220 -\124\027\031\022\032\361\037\327\014\151\132\366\161\170\364\224 -\175\221\013\216\354\220\124\216\274\157\241\114\253\374\164\144 -\375\161\232\370\101\007\241\315\221\344\074\232\340\233\062\071 -\163\253\052\325\151\310\170\221\046\061\175\342\307\060\361\374 -\024\170\167\022\016\023\364\335\026\224\277\113\147\173\160\123 -\205\312\260\273\363\070\115\054\220\071\300\015\302\135\153\351 -\342\345\325\210\215\326\054\277\253\033\276\265\050\207\022\027 -\164\156\374\175\374\217\320\207\046\260\033\373\271\154\253\342 -\236\075\025\301\073\056\147\002\130\221\237\357\370\102\037\054 -\267\150\365\165\255\317\265\366\377\021\175\302\360\044\245\255 -\323\372\240\074\251\372\135\334\245\240\357\104\244\276\326\350 -\345\344\023\226\027\173\006\076\062\355\307\267\102\274\166\243 -\330\145\070\053\070\065\121\041\016\016\157\056\064\023\100\341 -\053\147\014\155\112\101\060\030\043\132\062\125\231\311\027\340 -\074\336\366\354\171\255\053\130\031\242\255\054\042\032\225\216 -\276\226\220\135\102\127\304\371\024\003\065\053\034\055\121\127 -\010\247\072\336\077\344\310\264\003\163\302\301\046\200\273\013 -\102\037\255\015\257\046\162\332\314\276\263\243\203\130\015\202 -\305\037\106\121\343\234\030\314\215\233\215\354\111\353\165\120 -\325\214\050\131\312\164\064\332\214\013\041\253\036\352\033\345 -\307\375\025\076\300\027\252\373\043\156\046\106\313\372\371\261 -\162\153\151\317\042\204\013\142\017\254\331\031\000\224\242\166 -\074\324\055\232\355\004\236\055\006\142\020\067\122\034\205\162 -\033\047\345\314\306\061\354\067\354\143\131\233\013\035\166\314 -\176\062\232\210\225\010\066\122\273\336\166\137\166\111\111\255 -\177\275\145\040\262\311\301\053\166\030\166\237\126\261 +\060\202\002\116\060\202\001\323\240\003\002\001\002\002\012\074 +\366\007\251\150\160\016\332\213\204\060\012\006\010\052\206\110 +\316\075\004\003\003\060\153\061\013\060\011\006\003\125\004\006 +\023\002\111\116\061\023\060\021\006\003\125\004\013\023\012\145 +\155\123\151\147\156\040\120\113\111\061\045\060\043\006\003\125 +\004\012\023\034\145\115\165\144\150\162\141\040\124\145\143\150 +\156\157\154\157\147\151\145\163\040\114\151\155\151\164\145\144 +\061\040\060\036\006\003\125\004\003\023\027\145\155\123\151\147 +\156\040\105\103\103\040\122\157\157\164\040\103\101\040\055\040 +\107\063\060\036\027\015\061\070\060\062\061\070\061\070\063\060 +\060\060\132\027\015\064\063\060\062\061\070\061\070\063\060\060 +\060\132\060\153\061\013\060\011\006\003\125\004\006\023\002\111 +\116\061\023\060\021\006\003\125\004\013\023\012\145\155\123\151 +\147\156\040\120\113\111\061\045\060\043\006\003\125\004\012\023 +\034\145\115\165\144\150\162\141\040\124\145\143\150\156\157\154 +\157\147\151\145\163\040\114\151\155\151\164\145\144\061\040\060 +\036\006\003\125\004\003\023\027\145\155\123\151\147\156\040\105 +\103\103\040\122\157\157\164\040\103\101\040\055\040\107\063\060 +\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 +\004\000\042\003\142\000\004\043\245\014\270\055\022\365\050\363 +\261\262\335\342\002\022\200\236\071\137\111\115\237\311\045\064 +\131\164\354\273\006\034\347\300\162\257\350\256\057\341\101\124 +\207\024\250\112\262\350\174\202\346\133\152\265\334\263\165\316 +\213\006\320\206\043\277\106\325\216\017\077\004\364\327\034\222 +\176\366\245\143\302\365\137\216\056\117\241\030\031\002\053\062 +\012\202\144\175\026\223\321\243\102\060\100\060\035\006\003\125 +\035\016\004\026\004\024\174\135\002\204\023\324\314\212\233\201 +\316\027\034\056\051\036\234\110\143\102\060\016\006\003\125\035 +\017\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035 +\023\001\001\377\004\005\060\003\001\001\377\060\012\006\010\052 +\206\110\316\075\004\003\003\003\151\000\060\146\002\061\000\276 +\363\141\317\002\020\035\144\225\007\270\030\156\210\205\005\057 +\203\010\027\220\312\037\212\114\350\015\033\172\261\255\325\201 +\011\107\357\073\254\010\004\174\134\231\261\355\107\007\322\002 +\061\000\235\272\125\374\251\112\350\355\355\346\166\001\102\173 +\310\370\140\331\215\121\213\125\073\373\214\173\353\145\011\303 +\370\226\315\107\250\202\362\026\125\167\044\176\022\020\225\004 +\054\243 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "UCA Extended Validation Root" -# Issuer: CN=UCA Extended Validation Root,O=UniTrust,C=CN -# Serial Number:4f:d2:2b:8f:f5:64:c8:33:9e:4f:34:58:66:23:70:60 -# Subject: CN=UCA Extended Validation Root,O=UniTrust,C=CN -# Not Valid Before: Fri Mar 13 00:00:00 2015 -# Not Valid After : Fri Dec 31 00:00:00 2038 -# Fingerprint (SHA-256): D4:3A:F9:B3:54:73:75:5C:96:84:FC:06:D7:D8:CB:70:EE:5C:28:E7:73:FB:29:4E:B4:1E:E7:17:22:92:4D:24 -# Fingerprint (SHA1): A3:A1:B0:6F:24:61:23:4A:E3:36:A5:C2:37:FC:A6:FF:DD:F0:D7:3A +# Trust for "emSign ECC Root CA - G3" +# Issuer: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN +# Serial Number:3c:f6:07:a9:68:70:0e:da:8b:84 +# Subject: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN +# Not Valid Before: Sun Feb 18 18:30:00 2018 +# Not Valid After : Wed Feb 18 18:30:00 2043 +# Fingerprint (SHA-256): 86:A1:EC:BA:08:9C:4A:8D:3B:BE:27:34:C6:12:BA:34:1D:81:3E:04:3C:F9:E8:A8:62:CD:5C:57:A3:6B:BE:6B +# Fingerprint (SHA1): 30:43:FA:4F:F2:57:DC:A0:C3:80:EE:2E:58:EA:78:B2:3F:E6:BB:C1 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "UCA Extended Validation Root" +CKA_LABEL UTF8 "emSign ECC Root CA - G3" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\243\241\260\157\044\141\043\112\343\066\245\302\067\374\246\377 -\335\360\327\072 +\060\103\372\117\362\127\334\240\303\200\356\056\130\352\170\262 +\077\346\273\301 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\241\363\137\103\306\064\233\332\277\214\176\005\123\255\226\342 +\316\013\162\321\237\210\216\320\120\003\350\343\270\213\147\100 END CKA_ISSUER MULTILINE_OCTAL -\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165 -\163\164\061\045\060\043\006\003\125\004\003\014\034\125\103\101 -\040\105\170\164\145\156\144\145\144\040\126\141\154\151\144\141 -\164\151\157\156\040\122\157\157\164 +\060\153\061\013\060\011\006\003\125\004\006\023\002\111\116\061 +\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 +\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 +\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 +\151\145\163\040\114\151\155\151\164\145\144\061\040\060\036\006 +\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103 +\040\122\157\157\164\040\103\101\040\055\040\107\063 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\117\322\053\217\365\144\310\063\236\117\064\130\146\043 -\160\140 +\002\012\074\366\007\251\150\160\016\332\213\204 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Certigna Root CA" +# Certificate "emSign Root CA - C1" # -# Issuer: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR -# Serial Number:00:ca:e9:1b:89:f1:55:03:0d:a3:e6:41:6d:c4:e3:a6:e1 -# Subject: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR -# Not Valid Before: Tue Oct 01 08:32:27 2013 -# Not Valid After : Sat Oct 01 08:32:27 2033 -# Fingerprint (SHA-256): D4:8D:3D:23:EE:DB:50:A4:59:E5:51:97:60:1C:27:77:4B:9D:7B:18:C9:4D:5A:05:95:11:A1:02:50:B9:31:68 -# Fingerprint (SHA1): 2D:0D:52:14:FF:9E:AD:99:24:01:74:20:47:6E:6C:85:27:27:F5:43 +# Issuer: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US +# Serial Number:00:ae:cf:00:ba:c4:cf:32:f8:43:b2 +# Subject: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US +# Not Valid Before: Sun Feb 18 18:30:00 2018 +# Not Valid After : Wed Feb 18 18:30:00 2043 +# Fingerprint (SHA-256): 12:56:09:AA:30:1D:A0:A2:49:B9:7A:82:39:CB:6A:34:21:6F:44:DC:AC:9F:39:54:B1:42:92:F2:E8:C8:60:8F +# Fingerprint (SHA1): E7:2E:F1:DF:FC:B2:09:28:CF:5D:D4:D5:67:37:B1:51:CB:86:4F:01 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certigna Root CA" +CKA_LABEL UTF8 "emSign Root CA - C1" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061 -\022\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157 -\164\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060 -\060\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063 -\066\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164 -\151\147\156\141\040\122\157\157\164\040\103\101 +\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 +\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 +\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006\003 +\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157\164 +\040\103\101\040\055\040\103\061 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061 -\022\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157 -\164\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060 -\060\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063 -\066\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164 -\151\147\156\141\040\122\157\157\164\040\103\101 +\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 +\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 +\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006\003 +\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157\164 +\040\103\101\040\055\040\103\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\021\000\312\351\033\211\361\125\003\015\243\346\101\155\304 -\343\246\341 +\002\013\000\256\317\000\272\304\317\062\370\103\262 END CKA_VALUE MULTILINE_OCTAL -\060\202\006\133\060\202\004\103\240\003\002\001\002\002\021\000 -\312\351\033\211\361\125\003\015\243\346\101\155\304\343\246\341 -\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 -\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061\022 -\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157\164 -\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060\060 -\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063\066 -\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164\151 -\147\156\141\040\122\157\157\164\040\103\101\060\036\027\015\061 -\063\061\060\060\061\060\070\063\062\062\067\132\027\015\063\063 -\061\060\060\061\060\070\063\062\062\067\132\060\132\061\013\060 -\011\006\003\125\004\006\023\002\106\122\061\022\060\020\006\003 -\125\004\012\014\011\104\150\151\155\171\157\164\151\163\061\034 -\060\032\006\003\125\004\013\014\023\060\060\060\062\040\064\070 -\061\064\066\063\060\070\061\060\060\060\063\066\061\031\060\027 -\006\003\125\004\003\014\020\103\145\162\164\151\147\156\141\040 -\122\157\157\164\040\103\101\060\202\002\042\060\015\006\011\052 -\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060 -\202\002\012\002\202\002\001\000\315\030\071\145\032\131\261\352 -\144\026\016\214\224\044\225\174\203\323\305\071\046\334\014\357 -\026\127\215\327\330\254\243\102\177\202\312\355\315\133\333\016 -\267\055\355\105\010\027\262\331\263\313\326\027\122\162\050\333 -\216\116\236\212\266\013\371\236\204\232\115\166\336\042\051\134 -\322\263\322\006\076\060\071\251\164\243\222\126\034\241\157\114 -\012\040\155\237\043\172\264\306\332\054\344\035\054\334\263\050 -\320\023\362\114\116\002\111\241\124\100\236\346\345\005\240\055 -\204\310\377\230\154\320\353\212\032\204\010\036\267\150\043\356 -\043\325\160\316\155\121\151\020\356\241\172\302\321\042\061\302 -\202\205\322\362\125\166\120\174\045\172\311\204\134\013\254\335 -\102\116\053\347\202\242\044\211\313\220\262\320\356\043\272\146 -\114\273\142\244\371\123\132\144\173\174\230\372\243\110\236\017 -\225\256\247\030\364\152\354\056\003\105\257\360\164\370\052\315 -\172\135\321\276\104\046\062\051\361\361\365\154\314\176\002\041 -\013\237\157\244\077\276\235\123\342\317\175\251\054\174\130\032 -\227\341\075\067\067\030\146\050\322\100\305\121\212\214\303\055 -\316\123\210\044\130\144\060\026\305\252\340\326\012\246\100\337 -\170\366\365\004\174\151\023\204\274\321\321\247\006\317\001\367 -\150\300\250\127\273\072\141\255\004\214\223\343\255\374\360\333 -\104\155\131\334\111\131\256\254\232\231\066\060\101\173\166\063 -\042\207\243\302\222\206\156\371\160\356\256\207\207\225\033\304 -\172\275\061\363\324\322\345\231\377\276\110\354\165\365\170\026 -\035\246\160\301\177\074\033\241\222\373\317\310\074\326\305\223 -\012\217\365\125\072\166\225\316\131\230\212\011\225\167\062\232 -\203\272\054\004\072\227\275\324\057\276\327\154\233\242\312\175 -\155\046\311\125\325\317\303\171\122\010\011\231\007\044\055\144 -\045\153\246\041\151\233\152\335\164\115\153\227\172\101\275\253 -\027\371\220\027\110\217\066\371\055\325\305\333\356\252\205\105 -\101\372\315\072\105\261\150\346\066\114\233\220\127\354\043\271 -\207\010\302\304\011\361\227\206\052\050\115\342\164\300\332\304 -\214\333\337\342\241\027\131\316\044\131\164\061\332\177\375\060 -\155\331\334\341\152\341\374\137\002\003\001\000\001\243\202\001 -\032\060\202\001\026\060\017\006\003\125\035\023\001\001\377\004 -\005\060\003\001\001\377\060\016\006\003\125\035\017\001\001\377 -\004\004\003\002\001\006\060\035\006\003\125\035\016\004\026\004 -\024\030\207\126\340\156\167\356\044\065\074\116\163\232\037\326 -\341\342\171\176\053\060\037\006\003\125\035\043\004\030\060\026 -\200\024\030\207\126\340\156\167\356\044\065\074\116\163\232\037 -\326\341\342\171\176\053\060\104\006\003\125\035\040\004\075\060 -\073\060\071\006\004\125\035\040\000\060\061\060\057\006\010\053 -\006\001\005\005\007\002\001\026\043\150\164\164\160\163\072\057 -\057\167\167\167\167\056\143\145\162\164\151\147\156\141\056\146 -\162\057\141\165\164\157\162\151\164\145\163\057\060\155\006\003 -\125\035\037\004\146\060\144\060\057\240\055\240\053\206\051\150 -\164\164\160\072\057\057\143\162\154\056\143\145\162\164\151\147 -\156\141\056\146\162\057\143\145\162\164\151\147\156\141\162\157 -\157\164\143\141\056\143\162\154\060\061\240\057\240\055\206\053 -\150\164\164\160\072\057\057\143\162\154\056\144\150\151\155\171 -\157\164\151\163\056\143\157\155\057\143\145\162\164\151\147\156 -\141\162\157\157\164\143\141\056\143\162\154\060\015\006\011\052 -\206\110\206\367\015\001\001\013\005\000\003\202\002\001\000\224 -\270\236\117\360\343\225\010\042\347\315\150\101\367\034\125\325 -\174\000\342\055\072\211\135\150\070\057\121\042\013\112\215\313 -\351\273\135\076\273\134\075\261\050\376\344\123\125\023\317\241 -\220\033\002\035\137\146\106\011\063\050\341\015\044\227\160\323 -\020\037\352\144\127\226\273\135\332\347\304\214\117\114\144\106 -\035\134\207\343\131\336\102\321\233\250\176\246\211\335\217\034 -\311\060\202\355\073\234\315\300\351\031\340\152\330\002\165\067 -\253\367\064\050\050\221\362\004\012\117\065\343\140\046\001\372 -\320\021\214\371\021\152\356\257\075\303\120\323\217\137\063\171 -\074\206\250\163\105\220\214\040\266\162\163\027\043\276\007\145 -\345\170\222\015\272\001\300\353\214\034\146\277\254\206\167\001 -\224\015\234\346\351\071\215\037\246\121\214\231\014\071\167\341 -\264\233\372\034\147\127\157\152\152\216\251\053\114\127\171\172 -\127\042\317\315\137\143\106\215\134\131\072\206\370\062\107\142 -\243\147\015\030\221\334\373\246\153\365\110\141\163\043\131\216 -\002\247\274\104\352\364\111\235\361\124\130\371\140\257\332\030 -\244\057\050\105\334\172\240\210\206\135\363\073\347\377\051\065 -\200\374\144\103\224\346\343\034\157\276\255\016\052\143\231\053 -\311\176\205\366\161\350\006\003\225\376\336\217\110\034\132\324 -\222\350\053\356\347\061\333\272\004\152\207\230\347\305\137\357 -\175\247\042\367\001\330\115\371\211\320\016\232\005\131\244\236 -\230\331\157\053\312\160\276\144\302\125\243\364\351\257\303\222 -\051\334\210\026\044\231\074\215\046\230\266\133\267\314\316\267 -\067\007\375\046\331\230\205\044\377\131\043\003\232\355\235\235 -\250\344\136\070\316\327\122\015\157\322\077\155\261\005\153\111 -\316\212\221\106\163\364\366\057\360\250\163\167\016\145\254\241 -\215\146\122\151\176\113\150\014\307\036\067\047\203\245\214\307 -\002\344\024\315\111\001\260\163\263\375\306\220\072\157\322\154 -\355\073\356\354\221\276\242\103\135\213\000\112\146\045\104\160 -\336\100\017\370\174\025\367\242\316\074\327\136\023\214\201\027 -\030\027\321\275\361\167\020\072\324\145\071\301\047\254\127\054 -\045\124\377\242\332\117\212\141\071\136\256\075\112\214\275 +\060\202\003\163\060\202\002\133\240\003\002\001\002\002\013\000 +\256\317\000\272\304\317\062\370\103\262\060\015\006\011\052\206 +\110\206\367\015\001\001\013\005\000\060\126\061\013\060\011\006 +\003\125\004\006\023\002\125\123\061\023\060\021\006\003\125\004 +\013\023\012\145\155\123\151\147\156\040\120\113\111\061\024\060 +\022\006\003\125\004\012\023\013\145\115\165\144\150\162\141\040 +\111\156\143\061\034\060\032\006\003\125\004\003\023\023\145\155 +\123\151\147\156\040\122\157\157\164\040\103\101\040\055\040\103 +\061\060\036\027\015\061\070\060\062\061\070\061\070\063\060\060 +\060\132\027\015\064\063\060\062\061\070\061\070\063\060\060\060 +\132\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147 +\156\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013 +\145\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006 +\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157 +\164\040\103\101\040\055\040\103\061\060\202\001\042\060\015\006 +\011\052\206\110\206\367\015\001\001\001\005\000\003\202\001\017 +\000\060\202\001\012\002\202\001\001\000\317\353\251\271\361\231 +\005\314\330\050\041\112\363\163\064\121\204\126\020\365\240\117 +\054\022\343\372\023\232\047\320\317\371\171\032\164\137\035\171 +\071\374\133\370\160\216\340\222\122\367\344\045\371\124\203\331 +\035\323\310\132\205\077\136\307\266\007\356\076\300\316\232\257 +\254\126\102\052\071\045\160\326\277\265\173\066\255\254\366\163 +\334\315\327\035\212\203\245\373\053\220\025\067\153\034\046\107 +\334\073\051\126\223\152\263\301\152\072\235\075\365\301\227\070 +\130\005\213\034\021\343\344\264\270\135\205\035\203\376\170\137 +\013\105\150\030\110\245\106\163\064\073\376\017\310\166\273\307 +\030\363\005\321\206\363\205\355\347\271\331\062\255\125\210\316 +\246\266\221\260\117\254\176\025\043\226\366\077\360\040\064\026 +\336\012\306\304\004\105\171\177\247\375\276\322\251\245\257\234 +\305\043\052\367\074\041\154\275\257\217\116\305\072\262\363\064 +\022\374\337\200\032\111\244\324\251\225\367\236\211\136\242\211 +\254\224\313\250\150\233\257\212\145\047\315\211\356\335\214\265 +\153\051\160\103\240\151\013\344\271\017\002\003\001\000\001\243 +\102\060\100\060\035\006\003\125\035\016\004\026\004\024\376\241 +\340\160\036\052\003\071\122\132\102\276\134\221\205\172\030\252 +\115\265\060\016\006\003\125\035\017\001\001\377\004\004\003\002 +\001\006\060\017\006\003\125\035\023\001\001\377\004\005\060\003 +\001\001\377\060\015\006\011\052\206\110\206\367\015\001\001\013 +\005\000\003\202\001\001\000\302\112\126\372\025\041\173\050\242 +\351\345\035\373\370\055\304\071\226\101\114\073\047\054\304\154 +\030\025\200\306\254\257\107\131\057\046\013\343\066\260\357\073 +\376\103\227\111\062\231\022\025\133\337\021\051\377\253\123\370 +\273\301\170\017\254\234\123\257\127\275\150\214\075\151\063\360 +\243\240\043\143\073\144\147\042\104\255\325\161\313\126\052\170 +\222\243\117\022\061\066\066\342\336\376\000\304\243\140\017\047 +\255\240\260\212\265\066\172\122\241\275\047\364\040\047\142\350 +\115\224\044\023\344\012\004\351\074\253\056\310\103\011\112\306 +\141\004\345\111\064\176\323\304\310\365\017\300\252\351\272\124 +\136\363\143\053\117\117\120\324\376\271\173\231\214\075\300\056 +\274\002\053\323\304\100\344\212\007\061\036\233\316\046\231\023 +\373\021\352\232\042\014\021\031\307\136\033\201\120\060\310\226 +\022\156\347\313\101\177\221\073\242\107\267\124\200\033\334\000 +\314\232\220\352\303\303\120\006\142\014\060\300\025\110\247\250 +\131\174\341\256\042\242\342\012\172\017\372\142\253\122\114\341 +\361\337\312\276\203\015\102 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Certigna Root CA" -# Issuer: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR -# Serial Number:00:ca:e9:1b:89:f1:55:03:0d:a3:e6:41:6d:c4:e3:a6:e1 -# Subject: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR -# Not Valid Before: Tue Oct 01 08:32:27 2013 -# Not Valid After : Sat Oct 01 08:32:27 2033 -# Fingerprint (SHA-256): D4:8D:3D:23:EE:DB:50:A4:59:E5:51:97:60:1C:27:77:4B:9D:7B:18:C9:4D:5A:05:95:11:A1:02:50:B9:31:68 -# Fingerprint (SHA1): 2D:0D:52:14:FF:9E:AD:99:24:01:74:20:47:6E:6C:85:27:27:F5:43 +# Trust for "emSign Root CA - C1" +# Issuer: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US +# Serial Number:00:ae:cf:00:ba:c4:cf:32:f8:43:b2 +# Subject: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US +# Not Valid Before: Sun Feb 18 18:30:00 2018 +# Not Valid After : Wed Feb 18 18:30:00 2043 +# Fingerprint (SHA-256): 12:56:09:AA:30:1D:A0:A2:49:B9:7A:82:39:CB:6A:34:21:6F:44:DC:AC:9F:39:54:B1:42:92:F2:E8:C8:60:8F +# Fingerprint (SHA1): E7:2E:F1:DF:FC:B2:09:28:CF:5D:D4:D5:67:37:B1:51:CB:86:4F:01 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certigna Root CA" +CKA_LABEL UTF8 "emSign Root CA - C1" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\055\015\122\024\377\236\255\231\044\001\164\040\107\156\154\205 -\047\047\365\103 +\347\056\361\337\374\262\011\050\317\135\324\325\147\067\261\121 +\313\206\117\001 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\016\134\060\142\047\353\133\274\327\256\142\272\351\325\337\167 +\330\343\135\001\041\372\170\132\260\337\272\322\356\052\137\150 END CKA_ISSUER MULTILINE_OCTAL -\060\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061 -\022\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157 -\164\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060 -\060\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063 -\066\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164 -\151\147\156\141\040\122\157\157\164\040\103\101 +\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 +\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 +\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006\003 +\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157\164 +\040\103\101\040\055\040\103\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\021\000\312\351\033\211\361\125\003\015\243\346\101\155\304 -\343\246\341 +\002\013\000\256\317\000\272\304\317\062\370\103\262 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR @@ -18895,138 +17601,112 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "emSign Root CA - G1" +# Certificate "emSign ECC Root CA - C3" # -# Issuer: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN -# Serial Number:31:f5:e4:62:0c:6c:58:ed:d6:d8 -# Subject: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN +# Issuer: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US +# Serial Number:7b:71:b6:82:56:b8:12:7c:9c:a8 +# Subject: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US # Not Valid Before: Sun Feb 18 18:30:00 2018 # Not Valid After : Wed Feb 18 18:30:00 2043 -# Fingerprint (SHA-256): 40:F6:AF:03:46:A9:9A:A1:CD:1D:55:5A:4E:9C:CE:62:C7:F9:63:46:03:EE:40:66:15:83:3D:C8:C8:D0:03:67 -# Fingerprint (SHA1): 8A:C7:AD:8F:73:AC:4E:C1:B5:75:4D:A5:40:F4:FC:CF:7C:B5:8E:8C +# Fingerprint (SHA-256): BC:4D:80:9B:15:18:9D:78:DB:3E:1D:8C:F4:F9:72:6A:79:5D:A1:64:3C:A5:F1:35:8E:1D:DB:0E:DC:0D:7E:B3 +# Fingerprint (SHA1): B6:AF:43:C2:9B:81:53:7D:F6:EF:6B:C3:1F:1F:60:15:0C:EE:48:66 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "emSign Root CA - G1" +CKA_LABEL UTF8 "emSign ECC Root CA - C3" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116\061 +\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123\061 \023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 -\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 -\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032\006 -\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157 -\164\040\103\101\040\055\040\107\061 +\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 +\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006\003 +\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103\040 +\122\157\157\164\040\103\101\040\055\040\103\063 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116\061 +\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123\061 \023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 -\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 -\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032\006 -\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157 -\164\040\103\101\040\055\040\107\061 +\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 +\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006\003 +\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103\040 +\122\157\157\164\040\103\101\040\055\040\103\063 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\012\061\365\344\142\014\154\130\355\326\330 +\002\012\173\161\266\202\126\270\022\174\234\250 END CKA_VALUE MULTILINE_OCTAL -\060\202\003\224\060\202\002\174\240\003\002\001\002\002\012\061 -\365\344\142\014\154\130\355\326\330\060\015\006\011\052\206\110 -\206\367\015\001\001\013\005\000\060\147\061\013\060\011\006\003 -\125\004\006\023\002\111\116\061\023\060\021\006\003\125\004\013 -\023\012\145\155\123\151\147\156\040\120\113\111\061\045\060\043 -\006\003\125\004\012\023\034\145\115\165\144\150\162\141\040\124 -\145\143\150\156\157\154\157\147\151\145\163\040\114\151\155\151 -\164\145\144\061\034\060\032\006\003\125\004\003\023\023\145\155 -\123\151\147\156\040\122\157\157\164\040\103\101\040\055\040\107 -\061\060\036\027\015\061\070\060\062\061\070\061\070\063\060\060 +\060\202\002\053\060\202\001\261\240\003\002\001\002\002\012\173 +\161\266\202\126\270\022\174\234\250\060\012\006\010\052\206\110 +\316\075\004\003\003\060\132\061\013\060\011\006\003\125\004\006 +\023\002\125\123\061\023\060\021\006\003\125\004\013\023\012\145 +\155\123\151\147\156\040\120\113\111\061\024\060\022\006\003\125 +\004\012\023\013\145\115\165\144\150\162\141\040\111\156\143\061 +\040\060\036\006\003\125\004\003\023\027\145\155\123\151\147\156 +\040\105\103\103\040\122\157\157\164\040\103\101\040\055\040\103 +\063\060\036\027\015\061\070\060\062\061\070\061\070\063\060\060 \060\132\027\015\064\063\060\062\061\070\061\070\063\060\060\060 -\132\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116 +\132\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123 \061\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147 -\156\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034 -\145\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157 -\147\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032 -\006\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157 -\157\164\040\103\101\040\055\040\107\061\060\202\001\042\060\015 -\006\011\052\206\110\206\367\015\001\001\001\005\000\003\202\001 -\017\000\060\202\001\012\002\202\001\001\000\223\113\273\351\146 -\212\356\235\133\325\064\223\320\033\036\303\347\236\270\144\063 -\177\143\170\150\264\315\056\161\165\327\233\040\306\115\051\274 -\266\150\140\212\367\041\232\126\065\132\363\166\275\330\315\232 -\377\223\126\113\245\131\006\241\223\064\051\335\026\064\165\116 -\362\201\264\307\226\116\255\031\025\122\112\376\074\160\165\160 -\315\257\053\253\025\232\063\074\252\263\213\252\315\103\375\365 -\352\160\377\355\317\021\073\224\316\116\062\026\323\043\100\052 -\167\263\257\074\001\054\154\355\231\054\213\331\116\151\230\262 -\367\217\101\260\062\170\141\326\015\137\303\372\242\100\222\035 -\134\027\346\160\076\065\347\242\267\302\142\342\253\244\070\114 -\265\071\065\157\352\003\151\372\072\124\150\205\155\326\362\057 -\103\125\036\221\015\016\330\325\152\244\226\321\023\074\054\170 -\120\350\072\222\322\027\126\345\065\032\100\034\076\215\054\355 -\071\337\102\340\203\101\164\337\243\315\302\206\140\110\150\343 -\151\013\124\000\213\344\166\151\041\015\171\116\064\010\136\024 -\302\314\261\267\255\327\174\160\212\307\205\002\003\001\000\001 -\243\102\060\100\060\035\006\003\125\035\016\004\026\004\024\373 -\357\015\206\236\260\343\335\251\271\361\041\027\177\076\374\360 -\167\053\032\060\016\006\003\125\035\017\001\001\377\004\004\003 -\002\001\006\060\017\006\003\125\035\023\001\001\377\004\005\060 -\003\001\001\377\060\015\006\011\052\206\110\206\367\015\001\001 -\013\005\000\003\202\001\001\000\131\377\362\214\365\207\175\161 -\075\243\237\033\133\321\332\370\323\234\153\066\275\233\251\141 -\353\336\026\054\164\075\236\346\165\332\327\272\247\274\102\027 -\347\075\221\353\345\175\335\076\234\361\317\222\254\154\110\314 -\302\042\077\151\073\305\266\025\057\243\065\306\150\052\034\127 -\257\071\357\215\320\065\303\030\014\173\000\126\034\315\213\031 -\164\336\276\017\022\340\320\252\241\077\002\064\261\160\316\235 -\030\326\010\003\011\106\356\140\340\176\266\304\111\004\121\175 -\160\140\274\252\262\377\171\162\172\246\035\075\137\052\370\312 -\342\375\071\267\107\271\353\176\337\004\043\257\372\234\006\007 -\351\373\143\223\200\100\265\306\154\012\061\050\316\014\237\317 -\263\043\065\200\101\215\154\304\067\173\201\057\200\241\100\102 -\205\351\331\070\215\350\241\123\315\001\277\151\350\132\006\362 -\105\013\220\372\256\341\277\235\362\256\127\074\245\256\262\126 -\364\213\145\100\351\375\061\201\054\364\071\011\330\356\153\247 -\264\246\035\025\245\230\367\001\201\330\205\175\363\121\134\161 -\210\336\272\314\037\200\176\112 +\156\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013 +\145\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006 +\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103 +\040\122\157\157\164\040\103\101\040\055\040\103\063\060\166\060 +\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000 +\042\003\142\000\004\375\245\141\256\173\046\020\035\351\267\042 +\060\256\006\364\201\263\261\102\161\225\071\274\323\122\343\257 +\257\371\362\227\065\222\066\106\016\207\225\215\271\071\132\351 +\273\337\320\376\310\007\101\074\273\125\157\203\243\152\373\142 +\260\201\211\002\160\175\110\305\112\343\351\042\124\042\115\223 +\273\102\014\257\167\234\043\246\175\327\141\021\316\145\307\370 +\177\376\365\362\251\243\102\060\100\060\035\006\003\125\035\016 +\004\026\004\024\373\132\110\320\200\040\100\362\250\351\000\007 +\151\031\167\247\346\303\364\317\060\016\006\003\125\035\017\001 +\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023\001 +\001\377\004\005\060\003\001\001\377\060\012\006\010\052\206\110 +\316\075\004\003\003\003\150\000\060\145\002\061\000\264\330\057 +\002\211\375\266\114\142\272\103\116\023\204\162\265\256\335\034 +\336\326\265\334\126\217\130\100\132\055\336\040\114\042\203\312 +\223\250\176\356\022\100\307\326\207\117\370\337\205\002\060\034 +\024\144\344\174\226\203\021\234\260\321\132\141\113\246\017\111 +\323\000\374\241\374\344\245\377\177\255\327\060\320\307\167\177 +\276\201\007\125\060\120\040\024\365\127\070\012\250\061\121 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "emSign Root CA - G1" -# Issuer: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN -# Serial Number:31:f5:e4:62:0c:6c:58:ed:d6:d8 -# Subject: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN +# Trust for "emSign ECC Root CA - C3" +# Issuer: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US +# Serial Number:7b:71:b6:82:56:b8:12:7c:9c:a8 +# Subject: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US # Not Valid Before: Sun Feb 18 18:30:00 2018 # Not Valid After : Wed Feb 18 18:30:00 2043 -# Fingerprint (SHA-256): 40:F6:AF:03:46:A9:9A:A1:CD:1D:55:5A:4E:9C:CE:62:C7:F9:63:46:03:EE:40:66:15:83:3D:C8:C8:D0:03:67 -# Fingerprint (SHA1): 8A:C7:AD:8F:73:AC:4E:C1:B5:75:4D:A5:40:F4:FC:CF:7C:B5:8E:8C +# Fingerprint (SHA-256): BC:4D:80:9B:15:18:9D:78:DB:3E:1D:8C:F4:F9:72:6A:79:5D:A1:64:3C:A5:F1:35:8E:1D:DB:0E:DC:0D:7E:B3 +# Fingerprint (SHA1): B6:AF:43:C2:9B:81:53:7D:F6:EF:6B:C3:1F:1F:60:15:0C:EE:48:66 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "emSign Root CA - G1" +CKA_LABEL UTF8 "emSign ECC Root CA - C3" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\212\307\255\217\163\254\116\301\265\165\115\245\100\364\374\317 -\174\265\216\214 +\266\257\103\302\233\201\123\175\366\357\153\303\037\037\140\025 +\014\356\110\146 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\234\102\204\127\335\313\013\247\056\225\255\266\363\332\274\254 +\076\123\263\243\201\356\327\020\370\323\260\035\027\222\365\325 END CKA_ISSUER MULTILINE_OCTAL -\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116\061 +\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123\061 \023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 -\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 -\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032\006 -\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157 -\164\040\103\101\040\055\040\107\061 +\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 +\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006\003 +\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103\040 +\122\157\157\164\040\103\101\040\055\040\103\063 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\012\061\365\344\142\014\154\130\355\326\330 +\002\012\173\161\266\202\126\270\022\174\234\250 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR @@ -19034,365 +17714,379 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "emSign ECC Root CA - G3" +# Certificate "Hongkong Post Root CA 3" # -# Issuer: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN -# Serial Number:3c:f6:07:a9:68:70:0e:da:8b:84 -# Subject: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN -# Not Valid Before: Sun Feb 18 18:30:00 2018 -# Not Valid After : Wed Feb 18 18:30:00 2043 -# Fingerprint (SHA-256): 86:A1:EC:BA:08:9C:4A:8D:3B:BE:27:34:C6:12:BA:34:1D:81:3E:04:3C:F9:E8:A8:62:CD:5C:57:A3:6B:BE:6B -# Fingerprint (SHA1): 30:43:FA:4F:F2:57:DC:A0:C3:80:EE:2E:58:EA:78:B2:3F:E6:BB:C1 +# Issuer: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK +# Serial Number:08:16:5f:8a:4c:a5:ec:00:c9:93:40:df:c4:c6:ae:23:b8:1c:5a:a4 +# Subject: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK +# Not Valid Before: Sat Jun 03 02:29:46 2017 +# Not Valid After : Tue Jun 03 02:29:46 2042 +# Fingerprint (SHA-256): 5A:2F:C0:3F:0C:83:B0:90:BB:FA:40:60:4B:09:88:44:6C:76:36:18:3D:F9:84:6E:17:10:1A:44:7F:B8:EF:D6 +# Fingerprint (SHA1): 58:A2:D0:EC:20:52:81:5B:C1:F3:F8:64:02:24:4E:C2:8E:02:4B:02 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "emSign ECC Root CA - G3" +CKA_LABEL UTF8 "Hongkong Post Root CA 3" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\153\061\013\060\011\006\003\125\004\006\023\002\111\116\061 -\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 -\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 -\151\145\163\040\114\151\155\151\164\145\144\061\040\060\036\006 -\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103 -\040\122\157\157\164\040\103\101\040\055\040\107\063 +\060\157\061\013\060\011\006\003\125\004\006\023\002\110\113\061 +\022\060\020\006\003\125\004\010\023\011\110\157\156\147\040\113 +\157\156\147\061\022\060\020\006\003\125\004\007\023\011\110\157 +\156\147\040\113\157\156\147\061\026\060\024\006\003\125\004\012 +\023\015\110\157\156\147\153\157\156\147\040\120\157\163\164\061 +\040\060\036\006\003\125\004\003\023\027\110\157\156\147\153\157 +\156\147\040\120\157\163\164\040\122\157\157\164\040\103\101\040 +\063 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\153\061\013\060\011\006\003\125\004\006\023\002\111\116\061 -\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 -\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 -\151\145\163\040\114\151\155\151\164\145\144\061\040\060\036\006 -\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103 -\040\122\157\157\164\040\103\101\040\055\040\107\063 +\060\157\061\013\060\011\006\003\125\004\006\023\002\110\113\061 +\022\060\020\006\003\125\004\010\023\011\110\157\156\147\040\113 +\157\156\147\061\022\060\020\006\003\125\004\007\023\011\110\157 +\156\147\040\113\157\156\147\061\026\060\024\006\003\125\004\012 +\023\015\110\157\156\147\153\157\156\147\040\120\157\163\164\061 +\040\060\036\006\003\125\004\003\023\027\110\157\156\147\153\157 +\156\147\040\120\157\163\164\040\122\157\157\164\040\103\101\040 +\063 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\012\074\366\007\251\150\160\016\332\213\204 +\002\024\010\026\137\212\114\245\354\000\311\223\100\337\304\306 +\256\043\270\034\132\244 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\116\060\202\001\323\240\003\002\001\002\002\012\074 -\366\007\251\150\160\016\332\213\204\060\012\006\010\052\206\110 -\316\075\004\003\003\060\153\061\013\060\011\006\003\125\004\006 -\023\002\111\116\061\023\060\021\006\003\125\004\013\023\012\145 -\155\123\151\147\156\040\120\113\111\061\045\060\043\006\003\125 -\004\012\023\034\145\115\165\144\150\162\141\040\124\145\143\150 -\156\157\154\157\147\151\145\163\040\114\151\155\151\164\145\144 -\061\040\060\036\006\003\125\004\003\023\027\145\155\123\151\147 -\156\040\105\103\103\040\122\157\157\164\040\103\101\040\055\040 -\107\063\060\036\027\015\061\070\060\062\061\070\061\070\063\060 -\060\060\132\027\015\064\063\060\062\061\070\061\070\063\060\060 -\060\132\060\153\061\013\060\011\006\003\125\004\006\023\002\111 -\116\061\023\060\021\006\003\125\004\013\023\012\145\155\123\151 -\147\156\040\120\113\111\061\045\060\043\006\003\125\004\012\023 -\034\145\115\165\144\150\162\141\040\124\145\143\150\156\157\154 -\157\147\151\145\163\040\114\151\155\151\164\145\144\061\040\060 -\036\006\003\125\004\003\023\027\145\155\123\151\147\156\040\105 -\103\103\040\122\157\157\164\040\103\101\040\055\040\107\063\060 -\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 -\004\000\042\003\142\000\004\043\245\014\270\055\022\365\050\363 -\261\262\335\342\002\022\200\236\071\137\111\115\237\311\045\064 -\131\164\354\273\006\034\347\300\162\257\350\256\057\341\101\124 -\207\024\250\112\262\350\174\202\346\133\152\265\334\263\165\316 -\213\006\320\206\043\277\106\325\216\017\077\004\364\327\034\222 -\176\366\245\143\302\365\137\216\056\117\241\030\031\002\053\062 -\012\202\144\175\026\223\321\243\102\060\100\060\035\006\003\125 -\035\016\004\026\004\024\174\135\002\204\023\324\314\212\233\201 -\316\027\034\056\051\036\234\110\143\102\060\016\006\003\125\035 -\017\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035 -\023\001\001\377\004\005\060\003\001\001\377\060\012\006\010\052 -\206\110\316\075\004\003\003\003\151\000\060\146\002\061\000\276 -\363\141\317\002\020\035\144\225\007\270\030\156\210\205\005\057 -\203\010\027\220\312\037\212\114\350\015\033\172\261\255\325\201 -\011\107\357\073\254\010\004\174\134\231\261\355\107\007\322\002 -\061\000\235\272\125\374\251\112\350\355\355\346\166\001\102\173 -\310\370\140\331\215\121\213\125\073\373\214\173\353\145\011\303 -\370\226\315\107\250\202\362\026\125\167\044\176\022\020\225\004 -\054\243 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "emSign ECC Root CA - G3" -# Issuer: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN -# Serial Number:3c:f6:07:a9:68:70:0e:da:8b:84 -# Subject: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN -# Not Valid Before: Sun Feb 18 18:30:00 2018 -# Not Valid After : Wed Feb 18 18:30:00 2043 -# Fingerprint (SHA-256): 86:A1:EC:BA:08:9C:4A:8D:3B:BE:27:34:C6:12:BA:34:1D:81:3E:04:3C:F9:E8:A8:62:CD:5C:57:A3:6B:BE:6B -# Fingerprint (SHA1): 30:43:FA:4F:F2:57:DC:A0:C3:80:EE:2E:58:EA:78:B2:3F:E6:BB:C1 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "emSign ECC Root CA - G3" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\060\103\372\117\362\127\334\240\303\200\356\056\130\352\170\262 -\077\346\273\301 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\316\013\162\321\237\210\216\320\120\003\350\343\270\213\147\100 -END -CKA_ISSUER MULTILINE_OCTAL -\060\153\061\013\060\011\006\003\125\004\006\023\002\111\116\061 -\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145 -\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147 -\151\145\163\040\114\151\155\151\164\145\144\061\040\060\036\006 -\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103 -\040\122\157\157\164\040\103\101\040\055\040\107\063 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\012\074\366\007\251\150\160\016\332\213\204 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "emSign Root CA - C1" -# -# Issuer: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US -# Serial Number:00:ae:cf:00:ba:c4:cf:32:f8:43:b2 -# Subject: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US -# Not Valid Before: Sun Feb 18 18:30:00 2018 -# Not Valid After : Wed Feb 18 18:30:00 2043 -# Fingerprint (SHA-256): 12:56:09:AA:30:1D:A0:A2:49:B9:7A:82:39:CB:6A:34:21:6F:44:DC:AC:9F:39:54:B1:42:92:F2:E8:C8:60:8F -# Fingerprint (SHA1): E7:2E:F1:DF:FC:B2:09:28:CF:5D:D4:D5:67:37:B1:51:CB:86:4F:01 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "emSign Root CA - C1" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 -\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006\003 -\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157\164 -\040\103\101\040\055\040\103\061 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 -\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006\003 -\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157\164 -\040\103\101\040\055\040\103\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\013\000\256\317\000\272\304\317\062\370\103\262 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\163\060\202\002\133\240\003\002\001\002\002\013\000 -\256\317\000\272\304\317\062\370\103\262\060\015\006\011\052\206 -\110\206\367\015\001\001\013\005\000\060\126\061\013\060\011\006 -\003\125\004\006\023\002\125\123\061\023\060\021\006\003\125\004 -\013\023\012\145\155\123\151\147\156\040\120\113\111\061\024\060 -\022\006\003\125\004\012\023\013\145\115\165\144\150\162\141\040 -\111\156\143\061\034\060\032\006\003\125\004\003\023\023\145\155 -\123\151\147\156\040\122\157\157\164\040\103\101\040\055\040\103 -\061\060\036\027\015\061\070\060\062\061\070\061\070\063\060\060 -\060\132\027\015\064\063\060\062\061\070\061\070\063\060\060\060 -\132\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147 -\156\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013 -\145\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006 -\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157 -\164\040\103\101\040\055\040\103\061\060\202\001\042\060\015\006 -\011\052\206\110\206\367\015\001\001\001\005\000\003\202\001\017 -\000\060\202\001\012\002\202\001\001\000\317\353\251\271\361\231 -\005\314\330\050\041\112\363\163\064\121\204\126\020\365\240\117 -\054\022\343\372\023\232\047\320\317\371\171\032\164\137\035\171 -\071\374\133\370\160\216\340\222\122\367\344\045\371\124\203\331 -\035\323\310\132\205\077\136\307\266\007\356\076\300\316\232\257 -\254\126\102\052\071\045\160\326\277\265\173\066\255\254\366\163 -\334\315\327\035\212\203\245\373\053\220\025\067\153\034\046\107 -\334\073\051\126\223\152\263\301\152\072\235\075\365\301\227\070 -\130\005\213\034\021\343\344\264\270\135\205\035\203\376\170\137 -\013\105\150\030\110\245\106\163\064\073\376\017\310\166\273\307 -\030\363\005\321\206\363\205\355\347\271\331\062\255\125\210\316 -\246\266\221\260\117\254\176\025\043\226\366\077\360\040\064\026 -\336\012\306\304\004\105\171\177\247\375\276\322\251\245\257\234 -\305\043\052\367\074\041\154\275\257\217\116\305\072\262\363\064 -\022\374\337\200\032\111\244\324\251\225\367\236\211\136\242\211 -\254\224\313\250\150\233\257\212\145\047\315\211\356\335\214\265 -\153\051\160\103\240\151\013\344\271\017\002\003\001\000\001\243 -\102\060\100\060\035\006\003\125\035\016\004\026\004\024\376\241 -\340\160\036\052\003\071\122\132\102\276\134\221\205\172\030\252 -\115\265\060\016\006\003\125\035\017\001\001\377\004\004\003\002 -\001\006\060\017\006\003\125\035\023\001\001\377\004\005\060\003 -\001\001\377\060\015\006\011\052\206\110\206\367\015\001\001\013 -\005\000\003\202\001\001\000\302\112\126\372\025\041\173\050\242 -\351\345\035\373\370\055\304\071\226\101\114\073\047\054\304\154 -\030\025\200\306\254\257\107\131\057\046\013\343\066\260\357\073 -\376\103\227\111\062\231\022\025\133\337\021\051\377\253\123\370 -\273\301\170\017\254\234\123\257\127\275\150\214\075\151\063\360 -\243\240\043\143\073\144\147\042\104\255\325\161\313\126\052\170 -\222\243\117\022\061\066\066\342\336\376\000\304\243\140\017\047 -\255\240\260\212\265\066\172\122\241\275\047\364\040\047\142\350 -\115\224\044\023\344\012\004\351\074\253\056\310\103\011\112\306 -\141\004\345\111\064\176\323\304\310\365\017\300\252\351\272\124 -\136\363\143\053\117\117\120\324\376\271\173\231\214\075\300\056 -\274\002\053\323\304\100\344\212\007\061\036\233\316\046\231\023 -\373\021\352\232\042\014\021\031\307\136\033\201\120\060\310\226 -\022\156\347\313\101\177\221\073\242\107\267\124\200\033\334\000 -\314\232\220\352\303\303\120\006\142\014\060\300\025\110\247\250 -\131\174\341\256\042\242\342\012\172\017\372\142\253\122\114\341 -\361\337\312\276\203\015\102 +\060\202\005\317\060\202\003\267\240\003\002\001\002\002\024\010 +\026\137\212\114\245\354\000\311\223\100\337\304\306\256\043\270 +\034\132\244\060\015\006\011\052\206\110\206\367\015\001\001\013 +\005\000\060\157\061\013\060\011\006\003\125\004\006\023\002\110 +\113\061\022\060\020\006\003\125\004\010\023\011\110\157\156\147 +\040\113\157\156\147\061\022\060\020\006\003\125\004\007\023\011 +\110\157\156\147\040\113\157\156\147\061\026\060\024\006\003\125 +\004\012\023\015\110\157\156\147\153\157\156\147\040\120\157\163 +\164\061\040\060\036\006\003\125\004\003\023\027\110\157\156\147 +\153\157\156\147\040\120\157\163\164\040\122\157\157\164\040\103 +\101\040\063\060\036\027\015\061\067\060\066\060\063\060\062\062 +\071\064\066\132\027\015\064\062\060\066\060\063\060\062\062\071 +\064\066\132\060\157\061\013\060\011\006\003\125\004\006\023\002 +\110\113\061\022\060\020\006\003\125\004\010\023\011\110\157\156 +\147\040\113\157\156\147\061\022\060\020\006\003\125\004\007\023 +\011\110\157\156\147\040\113\157\156\147\061\026\060\024\006\003 +\125\004\012\023\015\110\157\156\147\153\157\156\147\040\120\157 +\163\164\061\040\060\036\006\003\125\004\003\023\027\110\157\156 +\147\153\157\156\147\040\120\157\163\164\040\122\157\157\164\040 +\103\101\040\063\060\202\002\042\060\015\006\011\052\206\110\206 +\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002\012 +\002\202\002\001\000\263\210\327\352\316\017\040\116\276\346\326 +\003\155\356\131\374\302\127\337\051\150\241\203\016\076\150\307 +\150\130\234\034\140\113\211\103\014\271\324\025\262\356\301\116 +\165\351\265\247\357\345\351\065\231\344\314\034\347\113\137\215 +\063\060\040\063\123\331\246\273\325\076\023\216\351\037\207\111 +\255\120\055\120\312\030\276\001\130\242\023\160\226\273\211\210 +\126\200\134\370\275\054\074\341\114\127\210\273\323\271\225\357 +\313\307\366\332\061\164\050\246\346\124\211\365\101\061\312\345 +\046\032\315\202\340\160\332\073\051\273\325\003\365\231\272\125 +\365\144\321\140\016\263\211\111\270\212\057\005\322\204\105\050 +\174\217\150\120\022\170\374\013\265\123\313\302\230\034\204\243 +\236\260\276\043\244\332\334\310\053\036\332\156\105\036\211\230 +\332\371\000\056\006\351\014\073\160\325\120\045\210\231\313\315 +\163\140\367\325\377\065\147\305\241\274\136\253\315\112\270\105 +\353\310\150\036\015\015\024\106\022\343\322\144\142\212\102\230 +\274\264\306\010\010\370\375\250\114\144\234\166\001\275\057\251 +\154\063\017\330\077\050\270\074\151\001\102\206\176\151\301\311 +\006\312\345\172\106\145\351\302\326\120\101\056\077\267\344\355 +\154\327\277\046\001\021\242\026\051\112\153\064\006\220\354\023 +\322\266\373\152\166\322\074\355\360\326\055\335\341\025\354\243 +\233\057\054\311\076\053\344\151\073\377\162\045\261\066\206\133 +\307\177\153\213\125\033\112\305\040\141\075\256\313\120\341\010 +\072\276\260\217\143\101\123\060\010\131\074\230\035\167\272\143 +\221\172\312\020\120\140\277\360\327\274\225\207\217\227\305\376 +\227\152\001\224\243\174\133\205\035\052\071\072\320\124\241\321 +\071\161\235\375\041\371\265\173\360\342\340\002\217\156\226\044 +\045\054\240\036\054\250\304\211\247\357\355\231\006\057\266\012 +\114\117\333\242\314\067\032\257\107\205\055\212\137\304\064\064 +\114\000\375\030\223\147\023\321\067\346\110\264\213\006\305\127 +\173\031\206\012\171\313\000\311\122\257\102\377\067\217\341\243 +\036\172\075\120\253\143\006\347\025\265\077\266\105\067\224\067 +\261\176\362\110\303\177\305\165\376\227\215\105\217\032\247\032 +\162\050\032\100\017\002\003\001\000\001\243\143\060\141\060\017 +\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 +\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060 +\037\006\003\125\035\043\004\030\060\026\200\024\027\235\315\036 +\213\326\071\053\160\323\134\324\240\270\037\260\000\374\305\141 +\060\035\006\003\125\035\016\004\026\004\024\027\235\315\036\213 +\326\071\053\160\323\134\324\240\270\037\260\000\374\305\141\060 +\015\006\011\052\206\110\206\367\015\001\001\013\005\000\003\202 +\002\001\000\126\325\173\156\346\042\001\322\102\233\030\325\016 +\327\146\043\134\343\376\240\307\222\322\351\224\255\113\242\306 +\354\022\174\164\325\110\322\131\024\231\300\353\271\321\353\364 +\110\060\133\255\247\127\163\231\251\323\345\267\321\056\131\044 +\130\334\150\056\056\142\330\152\344\160\013\055\040\120\040\244 +\062\225\321\000\230\273\323\375\367\062\362\111\256\306\172\340 +\107\276\156\316\313\243\162\072\055\151\135\313\310\350\105\071 +\324\372\102\301\021\114\167\135\222\373\152\377\130\104\345\353 +\201\236\257\240\231\255\276\251\001\146\313\070\035\074\337\103 +\037\364\115\156\264\272\027\106\374\175\375\207\201\171\152\015 +\063\017\372\057\370\024\271\200\263\135\115\252\227\341\371\344 +\030\305\370\325\070\214\046\074\375\362\050\342\356\132\111\210 +\054\337\171\075\216\236\220\074\275\101\112\072\335\133\366\232 +\264\316\077\045\060\177\062\175\242\003\224\320\334\172\241\122 +\336\156\223\215\030\046\375\125\254\275\217\233\322\317\257\347 +\206\054\313\037\011\157\243\157\251\204\324\163\277\115\241\164 +\033\116\043\140\362\314\016\252\177\244\234\114\045\250\262\146 +\073\070\377\331\224\060\366\162\204\276\150\125\020\017\306\163 +\054\026\151\223\007\376\261\105\355\273\242\125\152\260\332\265 +\112\002\045\047\205\327\267\267\206\104\026\211\154\200\053\076 +\227\251\234\325\176\125\114\306\336\105\020\034\352\351\073\237 +\003\123\356\356\172\001\002\026\170\324\350\302\276\106\166\210 +\023\077\042\273\110\022\035\122\000\264\002\176\041\032\036\234 +\045\364\363\075\136\036\322\034\371\263\055\266\367\067\134\306 +\313\041\116\260\367\231\107\030\205\301\053\272\125\256\006\352 +\320\007\262\334\253\320\202\226\165\316\322\120\376\231\347\317 +\057\237\347\166\321\141\052\373\041\273\061\320\252\237\107\244 +\262\042\312\026\072\120\127\304\133\103\147\305\145\142\003\111 +\001\353\103\331\330\370\236\255\317\261\143\016\105\364\240\132 +\054\233\055\305\246\300\255\250\107\364\047\114\070\015\056\033 +\111\073\122\364\350\210\203\053\124\050\324\362\065\122\264\062 +\203\142\151\144\014\221\234\237\227\352\164\026\375\037\021\006 +\232\233\364 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "emSign Root CA - C1" -# Issuer: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US -# Serial Number:00:ae:cf:00:ba:c4:cf:32:f8:43:b2 -# Subject: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US -# Not Valid Before: Sun Feb 18 18:30:00 2018 -# Not Valid After : Wed Feb 18 18:30:00 2043 -# Fingerprint (SHA-256): 12:56:09:AA:30:1D:A0:A2:49:B9:7A:82:39:CB:6A:34:21:6F:44:DC:AC:9F:39:54:B1:42:92:F2:E8:C8:60:8F -# Fingerprint (SHA1): E7:2E:F1:DF:FC:B2:09:28:CF:5D:D4:D5:67:37:B1:51:CB:86:4F:01 +# Trust for "Hongkong Post Root CA 3" +# Issuer: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK +# Serial Number:08:16:5f:8a:4c:a5:ec:00:c9:93:40:df:c4:c6:ae:23:b8:1c:5a:a4 +# Subject: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK +# Not Valid Before: Sat Jun 03 02:29:46 2017 +# Not Valid After : Tue Jun 03 02:29:46 2042 +# Fingerprint (SHA-256): 5A:2F:C0:3F:0C:83:B0:90:BB:FA:40:60:4B:09:88:44:6C:76:36:18:3D:F9:84:6E:17:10:1A:44:7F:B8:EF:D6 +# Fingerprint (SHA1): 58:A2:D0:EC:20:52:81:5B:C1:F3:F8:64:02:24:4E:C2:8E:02:4B:02 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "emSign Root CA - C1" +CKA_LABEL UTF8 "Hongkong Post Root CA 3" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\347\056\361\337\374\262\011\050\317\135\324\325\147\067\261\121 -\313\206\117\001 +\130\242\320\354\040\122\201\133\301\363\370\144\002\044\116\302 +\216\002\113\002 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\330\343\135\001\041\372\170\132\260\337\272\322\356\052\137\150 +\021\374\237\275\163\060\002\212\375\077\363\130\271\313\040\360 END CKA_ISSUER MULTILINE_OCTAL -\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 -\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006\003 -\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157\164 -\040\103\101\040\055\040\103\061 +\060\157\061\013\060\011\006\003\125\004\006\023\002\110\113\061 +\022\060\020\006\003\125\004\010\023\011\110\157\156\147\040\113 +\157\156\147\061\022\060\020\006\003\125\004\007\023\011\110\157 +\156\147\040\113\157\156\147\061\026\060\024\006\003\125\004\012 +\023\015\110\157\156\147\153\157\156\147\040\120\157\163\164\061 +\040\060\036\006\003\125\004\003\023\027\110\157\156\147\153\157 +\156\147\040\120\157\163\164\040\122\157\157\164\040\103\101\040 +\063 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\013\000\256\317\000\272\304\317\062\370\103\262 +\002\024\010\026\137\212\114\245\354\000\311\223\100\337\304\306 +\256\043\270\034\132\244 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "emSign ECC Root CA - C3" +# Certificate "Entrust Root Certification Authority - G4" # -# Issuer: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US -# Serial Number:7b:71:b6:82:56:b8:12:7c:9c:a8 -# Subject: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US -# Not Valid Before: Sun Feb 18 18:30:00 2018 -# Not Valid After : Wed Feb 18 18:30:00 2043 -# Fingerprint (SHA-256): BC:4D:80:9B:15:18:9D:78:DB:3E:1D:8C:F4:F9:72:6A:79:5D:A1:64:3C:A5:F1:35:8E:1D:DB:0E:DC:0D:7E:B3 -# Fingerprint (SHA1): B6:AF:43:C2:9B:81:53:7D:F6:EF:6B:C3:1F:1F:60:15:0C:EE:48:66 +# Issuer: CN=Entrust Root Certification Authority - G4,OU="(c) 2015 Entrust, Inc. - for authorized use only",OU=See www.entrust.net/legal-terms,O="Entrust, Inc.",C=US +# Serial Number:00:d9:b5:43:7f:af:a9:39:0f:00:00:00:00:55:65:ad:58 +# Subject: CN=Entrust Root Certification Authority - G4,OU="(c) 2015 Entrust, Inc. - for authorized use only",OU=See www.entrust.net/legal-terms,O="Entrust, Inc.",C=US +# Not Valid Before: Wed May 27 11:11:16 2015 +# Not Valid After : Sun Dec 27 11:41:16 2037 +# Fingerprint (SHA-256): DB:35:17:D1:F6:73:2A:2D:5A:B9:7C:53:3E:C7:07:79:EE:32:70:A6:2F:B4:AC:42:38:37:24:60:E6:F0:1E:88 +# Fingerprint (SHA1): 14:88:4E:86:26:37:B0:26:AF:59:62:5C:40:77:EC:35:29:BA:96:01 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "emSign ECC Root CA - C3" +CKA_LABEL UTF8 "Entrust Root Certification Authority - G4" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 -\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006\003 -\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103\040 -\122\157\157\164\040\103\101\040\055\040\103\063 +\060\201\276\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\026\060\024\006\003\125\004\012\023\015\105\156\164\162\165 +\163\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 +\013\023\037\123\145\145\040\167\167\167\056\145\156\164\162\165 +\163\164\056\156\145\164\057\154\145\147\141\154\055\164\145\162 +\155\163\061\071\060\067\006\003\125\004\013\023\060\050\143\051 +\040\062\060\061\065\040\105\156\164\162\165\163\164\054\040\111 +\156\143\056\040\055\040\146\157\162\040\141\165\164\150\157\162 +\151\172\145\144\040\165\163\145\040\157\156\154\171\061\062\060 +\060\006\003\125\004\003\023\051\105\156\164\162\165\163\164\040 +\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151 +\157\156\040\101\165\164\150\157\162\151\164\171\040\055\040\107 +\064 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 -\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006\003 -\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103\040 -\122\157\157\164\040\103\101\040\055\040\103\063 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\012\173\161\266\202\126\270\022\174\234\250 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\002\053\060\202\001\261\240\003\002\001\002\002\012\173 -\161\266\202\126\270\022\174\234\250\060\012\006\010\052\206\110 -\316\075\004\003\003\060\132\061\013\060\011\006\003\125\004\006 -\023\002\125\123\061\023\060\021\006\003\125\004\013\023\012\145 -\155\123\151\147\156\040\120\113\111\061\024\060\022\006\003\125 -\004\012\023\013\145\115\165\144\150\162\141\040\111\156\143\061 -\040\060\036\006\003\125\004\003\023\027\145\155\123\151\147\156 -\040\105\103\103\040\122\157\157\164\040\103\101\040\055\040\103 -\063\060\036\027\015\061\070\060\062\061\070\061\070\063\060\060 -\060\132\027\015\064\063\060\062\061\070\061\070\063\060\060\060 -\132\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147 -\156\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013 -\145\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006 -\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103 -\040\122\157\157\164\040\103\101\040\055\040\103\063\060\166\060 -\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000 -\042\003\142\000\004\375\245\141\256\173\046\020\035\351\267\042 -\060\256\006\364\201\263\261\102\161\225\071\274\323\122\343\257 -\257\371\362\227\065\222\066\106\016\207\225\215\271\071\132\351 -\273\337\320\376\310\007\101\074\273\125\157\203\243\152\373\142 -\260\201\211\002\160\175\110\305\112\343\351\042\124\042\115\223 -\273\102\014\257\167\234\043\246\175\327\141\021\316\145\307\370 -\177\376\365\362\251\243\102\060\100\060\035\006\003\125\035\016 -\004\026\004\024\373\132\110\320\200\040\100\362\250\351\000\007 -\151\031\167\247\346\303\364\317\060\016\006\003\125\035\017\001 -\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023\001 -\001\377\004\005\060\003\001\001\377\060\012\006\010\052\206\110 -\316\075\004\003\003\003\150\000\060\145\002\061\000\264\330\057 -\002\211\375\266\114\142\272\103\116\023\204\162\265\256\335\034 -\336\326\265\334\126\217\130\100\132\055\336\040\114\042\203\312 -\223\250\176\356\022\100\307\326\207\117\370\337\205\002\060\034 -\024\144\344\174\226\203\021\234\260\321\132\141\113\246\017\111 -\323\000\374\241\374\344\245\377\177\255\327\060\320\307\167\177 -\276\201\007\125\060\120\040\024\365\127\070\012\250\061\121 +\060\201\276\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\026\060\024\006\003\125\004\012\023\015\105\156\164\162\165 +\163\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 +\013\023\037\123\145\145\040\167\167\167\056\145\156\164\162\165 +\163\164\056\156\145\164\057\154\145\147\141\154\055\164\145\162 +\155\163\061\071\060\067\006\003\125\004\013\023\060\050\143\051 +\040\062\060\061\065\040\105\156\164\162\165\163\164\054\040\111 +\156\143\056\040\055\040\146\157\162\040\141\165\164\150\157\162 +\151\172\145\144\040\165\163\145\040\157\156\154\171\061\062\060 +\060\006\003\125\004\003\023\051\105\156\164\162\165\163\164\040 +\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151 +\157\156\040\101\165\164\150\157\162\151\164\171\040\055\040\107 +\064 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\021\000\331\265\103\177\257\251\071\017\000\000\000\000\125 +\145\255\130 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\006\113\060\202\004\063\240\003\002\001\002\002\021\000 +\331\265\103\177\257\251\071\017\000\000\000\000\125\145\255\130 +\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 +\201\276\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\026\060\024\006\003\125\004\012\023\015\105\156\164\162\165\163 +\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004\013 +\023\037\123\145\145\040\167\167\167\056\145\156\164\162\165\163 +\164\056\156\145\164\057\154\145\147\141\154\055\164\145\162\155 +\163\061\071\060\067\006\003\125\004\013\023\060\050\143\051\040 +\062\060\061\065\040\105\156\164\162\165\163\164\054\040\111\156 +\143\056\040\055\040\146\157\162\040\141\165\164\150\157\162\151 +\172\145\144\040\165\163\145\040\157\156\154\171\061\062\060\060 +\006\003\125\004\003\023\051\105\156\164\162\165\163\164\040\122 +\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171\040\055\040\107\064 +\060\036\027\015\061\065\060\065\062\067\061\061\061\061\061\066 +\132\027\015\063\067\061\062\062\067\061\061\064\061\061\066\132 +\060\201\276\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\026\060\024\006\003\125\004\012\023\015\105\156\164\162\165 +\163\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 +\013\023\037\123\145\145\040\167\167\167\056\145\156\164\162\165 +\163\164\056\156\145\164\057\154\145\147\141\154\055\164\145\162 +\155\163\061\071\060\067\006\003\125\004\013\023\060\050\143\051 +\040\062\060\061\065\040\105\156\164\162\165\163\164\054\040\111 +\156\143\056\040\055\040\146\157\162\040\141\165\164\150\157\162 +\151\172\145\144\040\165\163\145\040\157\156\154\171\061\062\060 +\060\006\003\125\004\003\023\051\105\156\164\162\165\163\164\040 +\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151 +\157\156\040\101\165\164\150\157\162\151\164\171\040\055\040\107 +\064\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001 +\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002 +\001\000\261\354\054\102\356\342\321\060\377\245\222\107\342\055 +\303\272\144\227\155\312\367\015\265\131\301\263\313\250\150\031 +\330\257\204\155\060\160\135\176\363\056\322\123\231\341\376\037 +\136\331\110\257\135\023\215\333\377\143\063\115\323\000\002\274 +\304\370\321\006\010\224\171\130\212\025\336\051\263\375\375\304 +\117\350\252\342\240\073\171\315\277\153\103\062\335\331\164\020 +\271\367\364\150\324\273\320\207\325\252\113\212\052\157\052\004 +\265\262\246\307\240\172\346\110\253\322\321\131\314\326\176\043 +\346\227\154\360\102\345\334\121\113\025\101\355\111\112\311\336 +\020\227\326\166\301\357\245\265\066\024\227\065\330\170\042\065 +\122\357\103\275\333\047\333\141\126\202\064\334\313\210\140\014 +\013\132\345\054\001\306\124\257\327\252\301\020\173\322\005\132 +\270\100\236\206\247\303\220\206\002\126\122\011\172\234\322\047 +\202\123\112\145\122\152\365\074\347\250\362\234\257\213\275\323 +\016\324\324\136\156\207\236\152\075\105\035\321\135\033\364\351 +\012\254\140\231\373\211\264\377\230\054\317\174\035\351\002\252 +\004\232\036\270\334\210\156\045\263\154\146\367\074\220\363\127 +\301\263\057\365\155\362\373\312\241\370\051\235\106\213\263\152 +\366\346\147\007\276\054\147\012\052\037\132\262\076\127\304\323 +\041\041\143\145\122\221\033\261\231\216\171\176\346\353\215\000 +\331\132\252\352\163\350\244\202\002\107\226\376\133\216\124\141 +\243\353\057\113\060\260\213\043\165\162\174\041\074\310\366\361 +\164\324\034\173\243\005\125\356\273\115\073\062\276\232\167\146 +\236\254\151\220\042\007\037\141\072\226\276\345\232\117\314\005 +\074\050\131\323\301\014\124\250\131\141\275\310\162\114\350\334 +\237\207\177\275\234\110\066\136\225\243\016\271\070\044\125\374 +\165\146\353\002\343\010\064\051\112\306\343\053\057\063\240\332 +\243\206\245\022\227\375\200\053\332\024\102\343\222\275\076\362 +\135\136\147\164\056\034\210\107\051\064\137\342\062\250\234\045 +\067\214\272\230\000\227\213\111\226\036\375\045\212\254\334\332 +\330\135\164\156\146\260\377\104\337\241\030\306\276\110\057\067 +\224\170\370\225\112\077\177\023\136\135\131\375\164\206\103\143 +\163\111\002\003\001\000\001\243\102\060\100\060\017\006\003\125 +\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006\003 +\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006\003 +\125\035\016\004\026\004\024\237\070\304\126\043\303\071\350\240 +\161\154\350\124\114\344\350\072\261\277\147\060\015\006\011\052 +\206\110\206\367\015\001\001\013\005\000\003\202\002\001\000\022 +\345\102\246\173\213\017\014\344\106\245\266\140\100\207\214\045 +\176\255\270\150\056\133\306\100\166\074\003\370\311\131\364\363 +\253\142\316\020\215\264\132\144\214\150\300\260\162\103\064\322 +\033\013\366\054\123\322\312\220\113\206\146\374\252\203\042\364 +\213\032\157\046\110\254\166\167\010\277\305\230\134\364\046\211 +\236\173\303\271\144\062\001\177\323\303\335\130\155\354\261\253 +\204\125\164\167\204\004\047\122\153\206\114\316\335\271\145\377 +\326\306\136\237\232\020\231\113\165\152\376\152\351\227\040\344 +\344\166\172\306\320\044\252\220\315\040\220\272\107\144\373\177 +\007\263\123\170\265\012\142\362\163\103\316\101\053\201\152\056 +\205\026\224\123\324\153\137\162\042\253\121\055\102\325\000\234 +\231\277\336\273\224\073\127\375\232\365\206\313\126\073\133\210 +\001\345\174\050\113\003\371\111\203\174\262\177\174\343\355\216 +\241\177\140\123\216\125\235\120\064\022\017\267\227\173\154\207 +\112\104\347\365\155\354\200\067\360\130\031\156\112\150\166\360 +\037\222\344\352\265\222\323\141\121\020\013\255\247\331\137\307 +\137\334\037\243\134\214\241\176\233\267\236\323\126\157\146\136 +\007\226\040\355\013\164\373\146\116\213\021\025\351\201\111\176 +\157\260\324\120\177\042\327\137\145\002\015\246\364\205\036\330 +\256\006\113\112\247\322\061\146\302\370\316\345\010\246\244\002 +\226\104\150\127\304\325\063\317\031\057\024\304\224\034\173\244 +\331\360\237\016\261\200\342\321\236\021\144\251\210\021\072\166 +\202\345\142\302\200\330\244\203\355\223\357\174\057\220\260\062 +\114\226\025\150\110\122\324\231\010\300\044\350\034\343\263\245 +\041\016\222\300\220\037\317\040\137\312\073\070\307\267\155\072 +\363\346\104\270\016\061\153\210\216\160\353\234\027\122\250\101 +\224\056\207\266\347\246\022\305\165\337\133\300\012\156\173\244 +\344\136\206\371\066\224\337\167\303\351\015\300\071\361\171\273 +\106\216\253\103\131\047\267\040\273\043\351\126\100\041\354\061 +\075\145\252\103\362\075\337\160\104\341\272\115\046\020\073\230 +\237\363\310\216\033\070\126\041\152\121\223\323\221\312\106\332 +\211\267\075\123\203\054\010\037\213\217\123\335\377\254\037 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "emSign ECC Root CA - C3" -# Issuer: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US -# Serial Number:7b:71:b6:82:56:b8:12:7c:9c:a8 -# Subject: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US -# Not Valid Before: Sun Feb 18 18:30:00 2018 -# Not Valid After : Wed Feb 18 18:30:00 2043 -# Fingerprint (SHA-256): BC:4D:80:9B:15:18:9D:78:DB:3E:1D:8C:F4:F9:72:6A:79:5D:A1:64:3C:A5:F1:35:8E:1D:DB:0E:DC:0D:7E:B3 -# Fingerprint (SHA1): B6:AF:43:C2:9B:81:53:7D:F6:EF:6B:C3:1F:1F:60:15:0C:EE:48:66 +# Trust for "Entrust Root Certification Authority - G4" +# Issuer: CN=Entrust Root Certification Authority - G4,OU="(c) 2015 Entrust, Inc. - for authorized use only",OU=See www.entrust.net/legal-terms,O="Entrust, Inc.",C=US +# Serial Number:00:d9:b5:43:7f:af:a9:39:0f:00:00:00:00:55:65:ad:58 +# Subject: CN=Entrust Root Certification Authority - G4,OU="(c) 2015 Entrust, Inc. - for authorized use only",OU=See www.entrust.net/legal-terms,O="Entrust, Inc.",C=US +# Not Valid Before: Wed May 27 11:11:16 2015 +# Not Valid After : Sun Dec 27 11:41:16 2037 +# Fingerprint (SHA-256): DB:35:17:D1:F6:73:2A:2D:5A:B9:7C:53:3E:C7:07:79:EE:32:70:A6:2F:B4:AC:42:38:37:24:60:E6:F0:1E:88 +# Fingerprint (SHA1): 14:88:4E:86:26:37:B0:26:AF:59:62:5C:40:77:EC:35:29:BA:96:01 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "emSign ECC Root CA - C3" +CKA_LABEL UTF8 "Entrust Root Certification Authority - G4" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\266\257\103\302\233\201\123\175\366\357\153\303\037\037\140\025 -\014\356\110\146 +\024\210\116\206\046\067\260\046\257\131\142\134\100\167\354\065 +\051\272\226\001 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\076\123\263\243\201\356\327\020\370\323\260\035\027\222\365\325 +\211\123\361\203\043\267\174\216\005\361\214\161\070\116\037\210 END CKA_ISSUER MULTILINE_OCTAL -\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156 -\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145 -\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006\003 -\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103\040 -\122\157\157\164\040\103\101\040\055\040\103\063 +\060\201\276\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\026\060\024\006\003\125\004\012\023\015\105\156\164\162\165 +\163\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 +\013\023\037\123\145\145\040\167\167\167\056\145\156\164\162\165 +\163\164\056\156\145\164\057\154\145\147\141\154\055\164\145\162 +\155\163\061\071\060\067\006\003\125\004\013\023\060\050\143\051 +\040\062\060\061\065\040\105\156\164\162\165\163\164\054\040\111 +\156\143\056\040\055\040\146\157\162\040\141\165\164\150\157\162 +\151\172\145\144\040\165\163\145\040\157\156\154\171\061\062\060 +\060\006\003\125\004\003\023\051\105\156\164\162\165\163\164\040 +\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151 +\157\156\040\101\165\164\150\157\162\151\164\171\040\055\040\107 +\064 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\012\173\161\266\202\126\270\022\174\234\250 +\002\021\000\331\265\103\177\257\251\071\017\000\000\000\000\125 +\145\255\130 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR @@ -19400,179 +18094,120 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Hongkong Post Root CA 3" +# Certificate "Microsoft ECC Root Certificate Authority 2017" # -# Issuer: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK -# Serial Number:08:16:5f:8a:4c:a5:ec:00:c9:93:40:df:c4:c6:ae:23:b8:1c:5a:a4 -# Subject: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK -# Not Valid Before: Sat Jun 03 02:29:46 2017 -# Not Valid After : Tue Jun 03 02:29:46 2042 -# Fingerprint (SHA-256): 5A:2F:C0:3F:0C:83:B0:90:BB:FA:40:60:4B:09:88:44:6C:76:36:18:3D:F9:84:6E:17:10:1A:44:7F:B8:EF:D6 -# Fingerprint (SHA1): 58:A2:D0:EC:20:52:81:5B:C1:F3:F8:64:02:24:4E:C2:8E:02:4B:02 +# Issuer: CN=Microsoft ECC Root Certificate Authority 2017,O=Microsoft Corporation,C=US +# Serial Number:66:f2:3d:af:87:de:8b:b1:4a:ea:0c:57:31:01:c2:ec +# Subject: CN=Microsoft ECC Root Certificate Authority 2017,O=Microsoft Corporation,C=US +# Not Valid Before: Wed Dec 18 23:06:45 2019 +# Not Valid After : Fri Jul 18 23:16:04 2042 +# Fingerprint (SHA-256): 35:8D:F3:9D:76:4A:F9:E1:B7:66:E9:C9:72:DF:35:2E:E1:5C:FA:C2:27:AF:6A:D1:D7:0E:8E:4A:6E:DC:BA:02 +# Fingerprint (SHA1): 99:9A:64:C3:7F:F4:7D:9F:AB:95:F1:47:69:89:14:60:EE:C4:C3:C5 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Hongkong Post Root CA 3" +CKA_LABEL UTF8 "Microsoft ECC Root Certificate Authority 2017" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\157\061\013\060\011\006\003\125\004\006\023\002\110\113\061 -\022\060\020\006\003\125\004\010\023\011\110\157\156\147\040\113 -\157\156\147\061\022\060\020\006\003\125\004\007\023\011\110\157 -\156\147\040\113\157\156\147\061\026\060\024\006\003\125\004\012 -\023\015\110\157\156\147\153\157\156\147\040\120\157\163\164\061 -\040\060\036\006\003\125\004\003\023\027\110\157\156\147\153\157 -\156\147\040\120\157\163\164\040\122\157\157\164\040\103\101\040 -\063 +\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 +\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 +\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 +\157\146\164\040\105\103\103\040\122\157\157\164\040\103\145\162 +\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 +\164\171\040\062\060\061\067 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\157\061\013\060\011\006\003\125\004\006\023\002\110\113\061 -\022\060\020\006\003\125\004\010\023\011\110\157\156\147\040\113 -\157\156\147\061\022\060\020\006\003\125\004\007\023\011\110\157 -\156\147\040\113\157\156\147\061\026\060\024\006\003\125\004\012 -\023\015\110\157\156\147\153\157\156\147\040\120\157\163\164\061 -\040\060\036\006\003\125\004\003\023\027\110\157\156\147\153\157 -\156\147\040\120\157\163\164\040\122\157\157\164\040\103\101\040 -\063 +\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 +\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 +\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 +\157\146\164\040\105\103\103\040\122\157\157\164\040\103\145\162 +\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 +\164\171\040\062\060\061\067 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\010\026\137\212\114\245\354\000\311\223\100\337\304\306 -\256\043\270\034\132\244 +\002\020\146\362\075\257\207\336\213\261\112\352\014\127\061\001 +\302\354 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\317\060\202\003\267\240\003\002\001\002\002\024\010 -\026\137\212\114\245\354\000\311\223\100\337\304\306\256\043\270 -\034\132\244\060\015\006\011\052\206\110\206\367\015\001\001\013 -\005\000\060\157\061\013\060\011\006\003\125\004\006\023\002\110 -\113\061\022\060\020\006\003\125\004\010\023\011\110\157\156\147 -\040\113\157\156\147\061\022\060\020\006\003\125\004\007\023\011 -\110\157\156\147\040\113\157\156\147\061\026\060\024\006\003\125 -\004\012\023\015\110\157\156\147\153\157\156\147\040\120\157\163 -\164\061\040\060\036\006\003\125\004\003\023\027\110\157\156\147 -\153\157\156\147\040\120\157\163\164\040\122\157\157\164\040\103 -\101\040\063\060\036\027\015\061\067\060\066\060\063\060\062\062 -\071\064\066\132\027\015\064\062\060\066\060\063\060\062\062\071 -\064\066\132\060\157\061\013\060\011\006\003\125\004\006\023\002 -\110\113\061\022\060\020\006\003\125\004\010\023\011\110\157\156 -\147\040\113\157\156\147\061\022\060\020\006\003\125\004\007\023 -\011\110\157\156\147\040\113\157\156\147\061\026\060\024\006\003 -\125\004\012\023\015\110\157\156\147\153\157\156\147\040\120\157 -\163\164\061\040\060\036\006\003\125\004\003\023\027\110\157\156 -\147\153\157\156\147\040\120\157\163\164\040\122\157\157\164\040 -\103\101\040\063\060\202\002\042\060\015\006\011\052\206\110\206 -\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002\012 -\002\202\002\001\000\263\210\327\352\316\017\040\116\276\346\326 -\003\155\356\131\374\302\127\337\051\150\241\203\016\076\150\307 -\150\130\234\034\140\113\211\103\014\271\324\025\262\356\301\116 -\165\351\265\247\357\345\351\065\231\344\314\034\347\113\137\215 -\063\060\040\063\123\331\246\273\325\076\023\216\351\037\207\111 -\255\120\055\120\312\030\276\001\130\242\023\160\226\273\211\210 -\126\200\134\370\275\054\074\341\114\127\210\273\323\271\225\357 -\313\307\366\332\061\164\050\246\346\124\211\365\101\061\312\345 -\046\032\315\202\340\160\332\073\051\273\325\003\365\231\272\125 -\365\144\321\140\016\263\211\111\270\212\057\005\322\204\105\050 -\174\217\150\120\022\170\374\013\265\123\313\302\230\034\204\243 -\236\260\276\043\244\332\334\310\053\036\332\156\105\036\211\230 -\332\371\000\056\006\351\014\073\160\325\120\045\210\231\313\315 -\163\140\367\325\377\065\147\305\241\274\136\253\315\112\270\105 -\353\310\150\036\015\015\024\106\022\343\322\144\142\212\102\230 -\274\264\306\010\010\370\375\250\114\144\234\166\001\275\057\251 -\154\063\017\330\077\050\270\074\151\001\102\206\176\151\301\311 -\006\312\345\172\106\145\351\302\326\120\101\056\077\267\344\355 -\154\327\277\046\001\021\242\026\051\112\153\064\006\220\354\023 -\322\266\373\152\166\322\074\355\360\326\055\335\341\025\354\243 -\233\057\054\311\076\053\344\151\073\377\162\045\261\066\206\133 -\307\177\153\213\125\033\112\305\040\141\075\256\313\120\341\010 -\072\276\260\217\143\101\123\060\010\131\074\230\035\167\272\143 -\221\172\312\020\120\140\277\360\327\274\225\207\217\227\305\376 -\227\152\001\224\243\174\133\205\035\052\071\072\320\124\241\321 -\071\161\235\375\041\371\265\173\360\342\340\002\217\156\226\044 -\045\054\240\036\054\250\304\211\247\357\355\231\006\057\266\012 -\114\117\333\242\314\067\032\257\107\205\055\212\137\304\064\064 -\114\000\375\030\223\147\023\321\067\346\110\264\213\006\305\127 -\173\031\206\012\171\313\000\311\122\257\102\377\067\217\341\243 -\036\172\075\120\253\143\006\347\025\265\077\266\105\067\224\067 -\261\176\362\110\303\177\305\165\376\227\215\105\217\032\247\032 -\162\050\032\100\017\002\003\001\000\001\243\143\060\141\060\017 -\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 -\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060 -\037\006\003\125\035\043\004\030\060\026\200\024\027\235\315\036 -\213\326\071\053\160\323\134\324\240\270\037\260\000\374\305\141 -\060\035\006\003\125\035\016\004\026\004\024\027\235\315\036\213 -\326\071\053\160\323\134\324\240\270\037\260\000\374\305\141\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\003\202 -\002\001\000\126\325\173\156\346\042\001\322\102\233\030\325\016 -\327\146\043\134\343\376\240\307\222\322\351\224\255\113\242\306 -\354\022\174\164\325\110\322\131\024\231\300\353\271\321\353\364 -\110\060\133\255\247\127\163\231\251\323\345\267\321\056\131\044 -\130\334\150\056\056\142\330\152\344\160\013\055\040\120\040\244 -\062\225\321\000\230\273\323\375\367\062\362\111\256\306\172\340 -\107\276\156\316\313\243\162\072\055\151\135\313\310\350\105\071 -\324\372\102\301\021\114\167\135\222\373\152\377\130\104\345\353 -\201\236\257\240\231\255\276\251\001\146\313\070\035\074\337\103 -\037\364\115\156\264\272\027\106\374\175\375\207\201\171\152\015 -\063\017\372\057\370\024\271\200\263\135\115\252\227\341\371\344 -\030\305\370\325\070\214\046\074\375\362\050\342\356\132\111\210 -\054\337\171\075\216\236\220\074\275\101\112\072\335\133\366\232 -\264\316\077\045\060\177\062\175\242\003\224\320\334\172\241\122 -\336\156\223\215\030\046\375\125\254\275\217\233\322\317\257\347 -\206\054\313\037\011\157\243\157\251\204\324\163\277\115\241\164 -\033\116\043\140\362\314\016\252\177\244\234\114\045\250\262\146 -\073\070\377\331\224\060\366\162\204\276\150\125\020\017\306\163 -\054\026\151\223\007\376\261\105\355\273\242\125\152\260\332\265 -\112\002\045\047\205\327\267\267\206\104\026\211\154\200\053\076 -\227\251\234\325\176\125\114\306\336\105\020\034\352\351\073\237 -\003\123\356\356\172\001\002\026\170\324\350\302\276\106\166\210 -\023\077\042\273\110\022\035\122\000\264\002\176\041\032\036\234 -\045\364\363\075\136\036\322\034\371\263\055\266\367\067\134\306 -\313\041\116\260\367\231\107\030\205\301\053\272\125\256\006\352 -\320\007\262\334\253\320\202\226\165\316\322\120\376\231\347\317 -\057\237\347\166\321\141\052\373\041\273\061\320\252\237\107\244 -\262\042\312\026\072\120\127\304\133\103\147\305\145\142\003\111 -\001\353\103\331\330\370\236\255\317\261\143\016\105\364\240\132 -\054\233\055\305\246\300\255\250\107\364\047\114\070\015\056\033 -\111\073\122\364\350\210\203\053\124\050\324\362\065\122\264\062 -\203\142\151\144\014\221\234\237\227\352\164\026\375\037\021\006 -\232\233\364 +\060\202\002\131\060\202\001\337\240\003\002\001\002\002\020\146 +\362\075\257\207\336\213\261\112\352\014\127\061\001\302\354\060 +\012\006\010\052\206\110\316\075\004\003\003\060\145\061\013\060 +\011\006\003\125\004\006\023\002\125\123\061\036\060\034\006\003 +\125\004\012\023\025\115\151\143\162\157\163\157\146\164\040\103 +\157\162\160\157\162\141\164\151\157\156\061\066\060\064\006\003 +\125\004\003\023\055\115\151\143\162\157\163\157\146\164\040\105 +\103\103\040\122\157\157\164\040\103\145\162\164\151\146\151\143 +\141\164\145\040\101\165\164\150\157\162\151\164\171\040\062\060 +\061\067\060\036\027\015\061\071\061\062\061\070\062\063\060\066 +\064\065\132\027\015\064\062\060\067\061\070\062\063\061\066\060 +\064\132\060\145\061\013\060\011\006\003\125\004\006\023\002\125 +\123\061\036\060\034\006\003\125\004\012\023\025\115\151\143\162 +\157\163\157\146\164\040\103\157\162\160\157\162\141\164\151\157 +\156\061\066\060\064\006\003\125\004\003\023\055\115\151\143\162 +\157\163\157\146\164\040\105\103\103\040\122\157\157\164\040\103 +\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150\157 +\162\151\164\171\040\062\060\061\067\060\166\060\020\006\007\052 +\206\110\316\075\002\001\006\005\053\201\004\000\042\003\142\000 +\004\324\274\075\002\102\165\101\023\043\315\200\004\206\002\121 +\057\152\250\201\142\013\145\314\366\312\235\036\157\112\146\121 +\242\003\331\235\221\372\266\026\261\214\156\336\174\315\333\171 +\246\057\316\273\316\161\057\345\245\253\050\354\143\004\146\231 +\370\372\362\223\020\005\341\201\050\102\343\306\150\364\346\033 +\204\140\112\211\257\355\171\017\073\316\361\366\104\365\001\170 +\300\243\124\060\122\060\016\006\003\125\035\017\001\001\377\004 +\004\003\002\001\206\060\017\006\003\125\035\023\001\001\377\004 +\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026\004 +\024\310\313\231\162\160\122\014\370\346\276\262\004\127\051\052 +\317\102\020\355\065\060\020\006\011\053\006\001\004\001\202\067 +\025\001\004\003\002\001\000\060\012\006\010\052\206\110\316\075 +\004\003\003\003\150\000\060\145\002\060\130\362\115\352\014\371 +\137\136\356\140\051\313\072\362\333\326\062\204\031\077\174\325 +\057\302\261\314\223\256\120\273\011\062\306\306\355\176\311\066 +\224\022\344\150\205\006\242\033\320\057\002\061\000\231\351\026 +\264\016\372\126\110\324\244\060\026\221\170\333\124\214\145\001 +\212\347\120\146\302\061\267\071\272\270\032\042\007\116\374\153 +\124\026\040\377\053\265\347\114\014\115\246\117\163 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Hongkong Post Root CA 3" -# Issuer: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK -# Serial Number:08:16:5f:8a:4c:a5:ec:00:c9:93:40:df:c4:c6:ae:23:b8:1c:5a:a4 -# Subject: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK -# Not Valid Before: Sat Jun 03 02:29:46 2017 -# Not Valid After : Tue Jun 03 02:29:46 2042 -# Fingerprint (SHA-256): 5A:2F:C0:3F:0C:83:B0:90:BB:FA:40:60:4B:09:88:44:6C:76:36:18:3D:F9:84:6E:17:10:1A:44:7F:B8:EF:D6 -# Fingerprint (SHA1): 58:A2:D0:EC:20:52:81:5B:C1:F3:F8:64:02:24:4E:C2:8E:02:4B:02 +# Trust for "Microsoft ECC Root Certificate Authority 2017" +# Issuer: CN=Microsoft ECC Root Certificate Authority 2017,O=Microsoft Corporation,C=US +# Serial Number:66:f2:3d:af:87:de:8b:b1:4a:ea:0c:57:31:01:c2:ec +# Subject: CN=Microsoft ECC Root Certificate Authority 2017,O=Microsoft Corporation,C=US +# Not Valid Before: Wed Dec 18 23:06:45 2019 +# Not Valid After : Fri Jul 18 23:16:04 2042 +# Fingerprint (SHA-256): 35:8D:F3:9D:76:4A:F9:E1:B7:66:E9:C9:72:DF:35:2E:E1:5C:FA:C2:27:AF:6A:D1:D7:0E:8E:4A:6E:DC:BA:02 +# Fingerprint (SHA1): 99:9A:64:C3:7F:F4:7D:9F:AB:95:F1:47:69:89:14:60:EE:C4:C3:C5 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Hongkong Post Root CA 3" +CKA_LABEL UTF8 "Microsoft ECC Root Certificate Authority 2017" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\130\242\320\354\040\122\201\133\301\363\370\144\002\044\116\302 -\216\002\113\002 +\231\232\144\303\177\364\175\237\253\225\361\107\151\211\024\140 +\356\304\303\305 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\021\374\237\275\163\060\002\212\375\077\363\130\271\313\040\360 +\335\241\003\346\112\223\020\321\277\360\031\102\313\376\355\147 END CKA_ISSUER MULTILINE_OCTAL -\060\157\061\013\060\011\006\003\125\004\006\023\002\110\113\061 -\022\060\020\006\003\125\004\010\023\011\110\157\156\147\040\113 -\157\156\147\061\022\060\020\006\003\125\004\007\023\011\110\157 -\156\147\040\113\157\156\147\061\026\060\024\006\003\125\004\012 -\023\015\110\157\156\147\153\157\156\147\040\120\157\163\164\061 -\040\060\036\006\003\125\004\003\023\027\110\157\156\147\153\157 -\156\147\040\120\157\163\164\040\122\157\157\164\040\103\101\040 -\063 +\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 +\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 +\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 +\157\146\164\040\105\103\103\040\122\157\157\164\040\103\145\162 +\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 +\164\171\040\062\060\061\067 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\010\026\137\212\114\245\354\000\311\223\100\337\304\306 -\256\043\270\034\132\244 +\002\020\146\362\075\257\207\336\213\261\112\352\014\127\061\001 +\302\354 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST @@ -19580,654 +18215,333 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Entrust Root Certification Authority - G4" +# Certificate "Microsoft RSA Root Certificate Authority 2017" # -# Issuer: CN=Entrust Root Certification Authority - G4,OU="(c) 2015 Entrust, Inc. - for authorized use only",OU=See www.entrust.net/legal-terms,O="Entrust, Inc.",C=US -# Serial Number:00:d9:b5:43:7f:af:a9:39:0f:00:00:00:00:55:65:ad:58 -# Subject: CN=Entrust Root Certification Authority - G4,OU="(c) 2015 Entrust, Inc. - for authorized use only",OU=See www.entrust.net/legal-terms,O="Entrust, Inc.",C=US -# Not Valid Before: Wed May 27 11:11:16 2015 -# Not Valid After : Sun Dec 27 11:41:16 2037 -# Fingerprint (SHA-256): DB:35:17:D1:F6:73:2A:2D:5A:B9:7C:53:3E:C7:07:79:EE:32:70:A6:2F:B4:AC:42:38:37:24:60:E6:F0:1E:88 -# Fingerprint (SHA1): 14:88:4E:86:26:37:B0:26:AF:59:62:5C:40:77:EC:35:29:BA:96:01 +# Issuer: CN=Microsoft RSA Root Certificate Authority 2017,O=Microsoft Corporation,C=US +# Serial Number:1e:d3:97:09:5f:d8:b4:b3:47:70:1e:aa:be:7f:45:b3 +# Subject: CN=Microsoft RSA Root Certificate Authority 2017,O=Microsoft Corporation,C=US +# Not Valid Before: Wed Dec 18 22:51:22 2019 +# Not Valid After : Fri Jul 18 23:00:23 2042 +# Fingerprint (SHA-256): C7:41:F7:0F:4B:2A:8D:88:BF:2E:71:C1:41:22:EF:53:EF:10:EB:A0:CF:A5:E6:4C:FA:20:F4:18:85:30:73:E0 +# Fingerprint (SHA1): 73:A5:E6:4A:3B:FF:83:16:FF:0E:DC:CC:61:8A:90:6E:4E:AE:4D:74 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Entrust Root Certification Authority - G4" +CKA_LABEL UTF8 "Microsoft RSA Root Certificate Authority 2017" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\201\276\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\026\060\024\006\003\125\004\012\023\015\105\156\164\162\165 -\163\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 -\013\023\037\123\145\145\040\167\167\167\056\145\156\164\162\165 -\163\164\056\156\145\164\057\154\145\147\141\154\055\164\145\162 -\155\163\061\071\060\067\006\003\125\004\013\023\060\050\143\051 -\040\062\060\061\065\040\105\156\164\162\165\163\164\054\040\111 -\156\143\056\040\055\040\146\157\162\040\141\165\164\150\157\162 -\151\172\145\144\040\165\163\145\040\157\156\154\171\061\062\060 -\060\006\003\125\004\003\023\051\105\156\164\162\165\163\164\040 -\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151 -\157\156\040\101\165\164\150\157\162\151\164\171\040\055\040\107 -\064 +\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 +\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 +\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 +\157\146\164\040\122\123\101\040\122\157\157\164\040\103\145\162 +\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 +\164\171\040\062\060\061\067 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\201\276\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\026\060\024\006\003\125\004\012\023\015\105\156\164\162\165 -\163\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 -\013\023\037\123\145\145\040\167\167\167\056\145\156\164\162\165 -\163\164\056\156\145\164\057\154\145\147\141\154\055\164\145\162 -\155\163\061\071\060\067\006\003\125\004\013\023\060\050\143\051 -\040\062\060\061\065\040\105\156\164\162\165\163\164\054\040\111 -\156\143\056\040\055\040\146\157\162\040\141\165\164\150\157\162 -\151\172\145\144\040\165\163\145\040\157\156\154\171\061\062\060 -\060\006\003\125\004\003\023\051\105\156\164\162\165\163\164\040 -\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151 -\157\156\040\101\165\164\150\157\162\151\164\171\040\055\040\107 -\064 +\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 +\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 +\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 +\157\146\164\040\122\123\101\040\122\157\157\164\040\103\145\162 +\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 +\164\171\040\062\060\061\067 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\021\000\331\265\103\177\257\251\071\017\000\000\000\000\125 -\145\255\130 +\002\020\036\323\227\011\137\330\264\263\107\160\036\252\276\177 +\105\263 END CKA_VALUE MULTILINE_OCTAL -\060\202\006\113\060\202\004\063\240\003\002\001\002\002\021\000 -\331\265\103\177\257\251\071\017\000\000\000\000\125\145\255\130 -\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 -\201\276\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\026\060\024\006\003\125\004\012\023\015\105\156\164\162\165\163 -\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004\013 -\023\037\123\145\145\040\167\167\167\056\145\156\164\162\165\163 -\164\056\156\145\164\057\154\145\147\141\154\055\164\145\162\155 -\163\061\071\060\067\006\003\125\004\013\023\060\050\143\051\040 -\062\060\061\065\040\105\156\164\162\165\163\164\054\040\111\156 -\143\056\040\055\040\146\157\162\040\141\165\164\150\157\162\151 -\172\145\144\040\165\163\145\040\157\156\154\171\061\062\060\060 -\006\003\125\004\003\023\051\105\156\164\162\165\163\164\040\122 -\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\040\055\040\107\064 -\060\036\027\015\061\065\060\065\062\067\061\061\061\061\061\066 -\132\027\015\063\067\061\062\062\067\061\061\064\061\061\066\132 -\060\201\276\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\026\060\024\006\003\125\004\012\023\015\105\156\164\162\165 -\163\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 -\013\023\037\123\145\145\040\167\167\167\056\145\156\164\162\165 -\163\164\056\156\145\164\057\154\145\147\141\154\055\164\145\162 -\155\163\061\071\060\067\006\003\125\004\013\023\060\050\143\051 -\040\062\060\061\065\040\105\156\164\162\165\163\164\054\040\111 -\156\143\056\040\055\040\146\157\162\040\141\165\164\150\157\162 -\151\172\145\144\040\165\163\145\040\157\156\154\171\061\062\060 -\060\006\003\125\004\003\023\051\105\156\164\162\165\163\164\040 -\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151 -\157\156\040\101\165\164\150\157\162\151\164\171\040\055\040\107 -\064\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001 -\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002 -\001\000\261\354\054\102\356\342\321\060\377\245\222\107\342\055 -\303\272\144\227\155\312\367\015\265\131\301\263\313\250\150\031 -\330\257\204\155\060\160\135\176\363\056\322\123\231\341\376\037 -\136\331\110\257\135\023\215\333\377\143\063\115\323\000\002\274 -\304\370\321\006\010\224\171\130\212\025\336\051\263\375\375\304 -\117\350\252\342\240\073\171\315\277\153\103\062\335\331\164\020 -\271\367\364\150\324\273\320\207\325\252\113\212\052\157\052\004 -\265\262\246\307\240\172\346\110\253\322\321\131\314\326\176\043 -\346\227\154\360\102\345\334\121\113\025\101\355\111\112\311\336 -\020\227\326\166\301\357\245\265\066\024\227\065\330\170\042\065 -\122\357\103\275\333\047\333\141\126\202\064\334\313\210\140\014 -\013\132\345\054\001\306\124\257\327\252\301\020\173\322\005\132 -\270\100\236\206\247\303\220\206\002\126\122\011\172\234\322\047 -\202\123\112\145\122\152\365\074\347\250\362\234\257\213\275\323 -\016\324\324\136\156\207\236\152\075\105\035\321\135\033\364\351 -\012\254\140\231\373\211\264\377\230\054\317\174\035\351\002\252 -\004\232\036\270\334\210\156\045\263\154\146\367\074\220\363\127 -\301\263\057\365\155\362\373\312\241\370\051\235\106\213\263\152 -\366\346\147\007\276\054\147\012\052\037\132\262\076\127\304\323 -\041\041\143\145\122\221\033\261\231\216\171\176\346\353\215\000 -\331\132\252\352\163\350\244\202\002\107\226\376\133\216\124\141 -\243\353\057\113\060\260\213\043\165\162\174\041\074\310\366\361 -\164\324\034\173\243\005\125\356\273\115\073\062\276\232\167\146 -\236\254\151\220\042\007\037\141\072\226\276\345\232\117\314\005 -\074\050\131\323\301\014\124\250\131\141\275\310\162\114\350\334 -\237\207\177\275\234\110\066\136\225\243\016\271\070\044\125\374 -\165\146\353\002\343\010\064\051\112\306\343\053\057\063\240\332 -\243\206\245\022\227\375\200\053\332\024\102\343\222\275\076\362 -\135\136\147\164\056\034\210\107\051\064\137\342\062\250\234\045 -\067\214\272\230\000\227\213\111\226\036\375\045\212\254\334\332 -\330\135\164\156\146\260\377\104\337\241\030\306\276\110\057\067 -\224\170\370\225\112\077\177\023\136\135\131\375\164\206\103\143 -\163\111\002\003\001\000\001\243\102\060\100\060\017\006\003\125 -\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006\003 -\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006\003 -\125\035\016\004\026\004\024\237\070\304\126\043\303\071\350\240 -\161\154\350\124\114\344\350\072\261\277\147\060\015\006\011\052 -\206\110\206\367\015\001\001\013\005\000\003\202\002\001\000\022 -\345\102\246\173\213\017\014\344\106\245\266\140\100\207\214\045 -\176\255\270\150\056\133\306\100\166\074\003\370\311\131\364\363 -\253\142\316\020\215\264\132\144\214\150\300\260\162\103\064\322 -\033\013\366\054\123\322\312\220\113\206\146\374\252\203\042\364 -\213\032\157\046\110\254\166\167\010\277\305\230\134\364\046\211 -\236\173\303\271\144\062\001\177\323\303\335\130\155\354\261\253 -\204\125\164\167\204\004\047\122\153\206\114\316\335\271\145\377 -\326\306\136\237\232\020\231\113\165\152\376\152\351\227\040\344 -\344\166\172\306\320\044\252\220\315\040\220\272\107\144\373\177 -\007\263\123\170\265\012\142\362\163\103\316\101\053\201\152\056 -\205\026\224\123\324\153\137\162\042\253\121\055\102\325\000\234 -\231\277\336\273\224\073\127\375\232\365\206\313\126\073\133\210 -\001\345\174\050\113\003\371\111\203\174\262\177\174\343\355\216 -\241\177\140\123\216\125\235\120\064\022\017\267\227\173\154\207 -\112\104\347\365\155\354\200\067\360\130\031\156\112\150\166\360 -\037\222\344\352\265\222\323\141\121\020\013\255\247\331\137\307 -\137\334\037\243\134\214\241\176\233\267\236\323\126\157\146\136 -\007\226\040\355\013\164\373\146\116\213\021\025\351\201\111\176 -\157\260\324\120\177\042\327\137\145\002\015\246\364\205\036\330 -\256\006\113\112\247\322\061\146\302\370\316\345\010\246\244\002 -\226\104\150\127\304\325\063\317\031\057\024\304\224\034\173\244 -\331\360\237\016\261\200\342\321\236\021\144\251\210\021\072\166 -\202\345\142\302\200\330\244\203\355\223\357\174\057\220\260\062 -\114\226\025\150\110\122\324\231\010\300\044\350\034\343\263\245 -\041\016\222\300\220\037\317\040\137\312\073\070\307\267\155\072 -\363\346\104\270\016\061\153\210\216\160\353\234\027\122\250\101 -\224\056\207\266\347\246\022\305\165\337\133\300\012\156\173\244 -\344\136\206\371\066\224\337\167\303\351\015\300\071\361\171\273 -\106\216\253\103\131\047\267\040\273\043\351\126\100\041\354\061 -\075\145\252\103\362\075\337\160\104\341\272\115\046\020\073\230 -\237\363\310\216\033\070\126\041\152\121\223\323\221\312\106\332 -\211\267\075\123\203\054\010\037\213\217\123\335\377\254\037 +\060\202\005\250\060\202\003\220\240\003\002\001\002\002\020\036 +\323\227\011\137\330\264\263\107\160\036\252\276\177\105\263\060 +\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\145 +\061\013\060\011\006\003\125\004\006\023\002\125\123\061\036\060 +\034\006\003\125\004\012\023\025\115\151\143\162\157\163\157\146 +\164\040\103\157\162\160\157\162\141\164\151\157\156\061\066\060 +\064\006\003\125\004\003\023\055\115\151\143\162\157\163\157\146 +\164\040\122\123\101\040\122\157\157\164\040\103\145\162\164\151 +\146\151\143\141\164\145\040\101\165\164\150\157\162\151\164\171 +\040\062\060\061\067\060\036\027\015\061\071\061\062\061\070\062 +\062\065\061\062\062\132\027\015\064\062\060\067\061\070\062\063 +\060\060\062\063\132\060\145\061\013\060\011\006\003\125\004\006 +\023\002\125\123\061\036\060\034\006\003\125\004\012\023\025\115 +\151\143\162\157\163\157\146\164\040\103\157\162\160\157\162\141 +\164\151\157\156\061\066\060\064\006\003\125\004\003\023\055\115 +\151\143\162\157\163\157\146\164\040\122\123\101\040\122\157\157 +\164\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165 +\164\150\157\162\151\164\171\040\062\060\061\067\060\202\002\042 +\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 +\202\002\017\000\060\202\002\012\002\202\002\001\000\312\133\276 +\224\063\214\051\225\221\026\012\225\275\107\142\301\211\363\231 +\066\337\106\220\311\245\355\170\152\157\107\221\150\370\047\147 +\120\063\035\241\246\373\340\345\103\243\204\002\127\001\135\234 +\110\100\202\123\020\274\277\307\073\150\220\266\202\055\345\364 +\145\320\314\155\031\314\225\371\173\254\112\224\255\016\336\113 +\103\035\207\007\222\023\220\200\203\144\065\071\004\374\345\351 +\154\263\266\037\120\224\070\145\120\134\027\106\271\266\205\265 +\034\265\027\350\326\105\235\330\262\046\260\312\304\160\112\256 +\140\244\335\263\331\354\374\073\325\127\162\274\077\310\311\262 +\336\113\153\370\043\154\003\300\005\275\225\307\315\163\073\146 +\200\144\343\032\254\056\371\107\005\362\006\266\233\163\365\170 +\063\133\307\241\373\047\052\241\264\232\221\214\221\323\072\202 +\076\166\100\264\315\122\141\121\160\050\077\305\305\132\362\311 +\214\111\273\024\133\115\310\377\147\115\114\022\226\255\365\376 +\170\250\227\207\327\375\136\040\200\334\241\113\042\373\324\211 +\255\272\316\107\227\107\125\173\217\105\310\147\050\204\225\034 +\150\060\357\357\111\340\065\173\144\347\230\260\224\332\115\205 +\073\076\125\304\050\257\127\363\236\023\333\106\047\237\036\242 +\136\104\203\244\245\312\325\023\263\113\077\304\343\302\346\206 +\141\244\122\060\271\172\040\117\157\017\070\123\313\063\014\023 +\053\217\326\232\275\052\310\055\261\034\175\113\121\312\107\321 +\110\047\162\135\207\353\325\105\346\110\145\235\257\122\220\272 +\133\242\030\145\127\022\237\150\271\324\025\153\224\304\151\042 +\230\364\063\340\355\371\121\216\101\120\311\064\117\166\220\254 +\374\070\301\330\341\173\271\343\343\224\341\106\151\313\016\012 +\120\153\023\272\254\017\067\132\267\022\265\220\201\036\126\256 +\127\042\206\331\311\322\321\327\121\343\253\073\306\125\375\036 +\016\323\164\012\321\332\252\352\151\270\227\050\217\110\304\007 +\370\122\103\072\364\312\125\065\054\260\246\152\300\234\371\362 +\201\341\022\152\300\105\331\147\263\316\377\043\242\211\012\124 +\324\024\271\052\250\327\354\371\253\315\045\130\062\171\217\220 +\133\230\071\304\010\006\301\254\177\016\075\000\245\002\003\001 +\000\001\243\124\060\122\060\016\006\003\125\035\017\001\001\377 +\004\004\003\002\001\206\060\017\006\003\125\035\023\001\001\377 +\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026 +\004\024\011\313\131\177\206\262\160\217\032\303\071\343\300\331 +\351\277\273\115\262\043\060\020\006\011\053\006\001\004\001\202 +\067\025\001\004\003\002\001\000\060\015\006\011\052\206\110\206 +\367\015\001\001\014\005\000\003\202\002\001\000\254\257\076\135 +\302\021\226\211\216\243\347\222\326\227\025\270\023\242\246\102 +\056\002\315\026\005\131\047\312\040\350\272\270\350\032\354\115 +\250\227\126\256\145\103\261\217\000\233\122\315\125\315\123\071 +\155\142\114\213\015\133\174\056\104\277\203\020\217\363\123\202 +\200\303\117\072\307\156\021\077\346\343\026\221\204\373\155\204 +\177\064\164\255\211\247\316\271\327\327\237\204\144\222\276\225 +\241\255\011\123\063\335\356\012\352\112\121\216\157\125\253\272 +\265\224\106\256\214\177\330\242\120\045\145\140\200\106\333\063 +\004\256\154\265\230\164\124\045\334\223\344\370\343\125\025\075 +\270\155\303\012\244\022\301\151\205\156\337\144\361\123\231\341 +\112\165\040\235\225\017\344\326\334\003\361\131\030\350\107\211 +\262\127\132\224\266\251\330\027\053\027\111\345\166\313\301\126 +\231\072\067\261\377\151\054\221\221\223\341\337\114\243\067\166 +\115\241\237\370\155\036\035\323\372\354\373\364\105\035\023\155 +\317\367\131\345\042\047\162\053\206\363\127\273\060\355\044\115 +\334\175\126\273\243\263\370\064\171\211\301\340\362\002\141\367 +\246\374\017\273\034\027\013\256\101\331\174\275\047\243\375\056 +\072\321\223\224\261\163\035\044\213\257\133\040\211\255\267\147 +\146\171\365\072\306\246\226\063\376\123\222\310\106\261\021\221 +\306\231\177\217\311\326\146\061\040\101\020\207\055\014\326\301 +\257\064\230\312\144\203\373\023\127\321\301\360\074\172\214\245 +\301\375\225\041\240\161\301\223\147\161\022\352\217\210\012\151 +\031\144\231\043\126\373\254\052\056\160\276\146\304\014\204\357 +\345\213\363\223\001\370\152\220\223\147\113\262\150\243\265\142 +\217\351\077\214\172\073\136\017\347\214\270\306\174\357\067\375 +\164\342\310\117\063\162\341\224\071\155\275\022\257\276\014\116 +\160\174\033\157\215\263\062\223\163\104\026\155\350\364\367\340 +\225\200\217\226\135\070\244\364\253\336\012\060\207\223\330\115 +\000\161\142\105\047\113\072\102\204\133\177\145\267\147\064\122 +\055\234\026\153\252\250\330\173\243\102\114\161\307\014\312\076 +\203\344\246\357\267\001\060\136\121\243\171\365\160\151\246\101 +\104\017\206\260\054\221\306\075\352\256\017\204 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Entrust Root Certification Authority - G4" -# Issuer: CN=Entrust Root Certification Authority - G4,OU="(c) 2015 Entrust, Inc. - for authorized use only",OU=See www.entrust.net/legal-terms,O="Entrust, Inc.",C=US -# Serial Number:00:d9:b5:43:7f:af:a9:39:0f:00:00:00:00:55:65:ad:58 -# Subject: CN=Entrust Root Certification Authority - G4,OU="(c) 2015 Entrust, Inc. - for authorized use only",OU=See www.entrust.net/legal-terms,O="Entrust, Inc.",C=US -# Not Valid Before: Wed May 27 11:11:16 2015 -# Not Valid After : Sun Dec 27 11:41:16 2037 -# Fingerprint (SHA-256): DB:35:17:D1:F6:73:2A:2D:5A:B9:7C:53:3E:C7:07:79:EE:32:70:A6:2F:B4:AC:42:38:37:24:60:E6:F0:1E:88 -# Fingerprint (SHA1): 14:88:4E:86:26:37:B0:26:AF:59:62:5C:40:77:EC:35:29:BA:96:01 +# Trust for "Microsoft RSA Root Certificate Authority 2017" +# Issuer: CN=Microsoft RSA Root Certificate Authority 2017,O=Microsoft Corporation,C=US +# Serial Number:1e:d3:97:09:5f:d8:b4:b3:47:70:1e:aa:be:7f:45:b3 +# Subject: CN=Microsoft RSA Root Certificate Authority 2017,O=Microsoft Corporation,C=US +# Not Valid Before: Wed Dec 18 22:51:22 2019 +# Not Valid After : Fri Jul 18 23:00:23 2042 +# Fingerprint (SHA-256): C7:41:F7:0F:4B:2A:8D:88:BF:2E:71:C1:41:22:EF:53:EF:10:EB:A0:CF:A5:E6:4C:FA:20:F4:18:85:30:73:E0 +# Fingerprint (SHA1): 73:A5:E6:4A:3B:FF:83:16:FF:0E:DC:CC:61:8A:90:6E:4E:AE:4D:74 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Entrust Root Certification Authority - G4" +CKA_LABEL UTF8 "Microsoft RSA Root Certificate Authority 2017" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\024\210\116\206\046\067\260\046\257\131\142\134\100\167\354\065 -\051\272\226\001 +\163\245\346\112\073\377\203\026\377\016\334\314\141\212\220\156 +\116\256\115\164 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\211\123\361\203\043\267\174\216\005\361\214\161\070\116\037\210 +\020\377\000\377\317\311\370\307\172\300\356\065\216\311\017\107 END CKA_ISSUER MULTILINE_OCTAL -\060\201\276\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\026\060\024\006\003\125\004\012\023\015\105\156\164\162\165 -\163\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 -\013\023\037\123\145\145\040\167\167\167\056\145\156\164\162\165 -\163\164\056\156\145\164\057\154\145\147\141\154\055\164\145\162 -\155\163\061\071\060\067\006\003\125\004\013\023\060\050\143\051 -\040\062\060\061\065\040\105\156\164\162\165\163\164\054\040\111 -\156\143\056\040\055\040\146\157\162\040\141\165\164\150\157\162 -\151\172\145\144\040\165\163\145\040\157\156\154\171\061\062\060 -\060\006\003\125\004\003\023\051\105\156\164\162\165\163\164\040 -\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151 -\157\156\040\101\165\164\150\157\162\151\164\171\040\055\040\107 -\064 +\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 +\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 +\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 +\157\146\164\040\122\123\101\040\122\157\157\164\040\103\145\162 +\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 +\164\171\040\062\060\061\067 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\021\000\331\265\103\177\257\251\071\017\000\000\000\000\125 -\145\255\130 +\002\020\036\323\227\011\137\330\264\263\107\160\036\252\276\177 +\105\263 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Microsoft ECC Root Certificate Authority 2017" +# Certificate "e-Szigno Root CA 2017" # -# Issuer: CN=Microsoft ECC Root Certificate Authority 2017,O=Microsoft Corporation,C=US -# Serial Number:66:f2:3d:af:87:de:8b:b1:4a:ea:0c:57:31:01:c2:ec -# Subject: CN=Microsoft ECC Root Certificate Authority 2017,O=Microsoft Corporation,C=US -# Not Valid Before: Wed Dec 18 23:06:45 2019 -# Not Valid After : Fri Jul 18 23:16:04 2042 -# Fingerprint (SHA-256): 35:8D:F3:9D:76:4A:F9:E1:B7:66:E9:C9:72:DF:35:2E:E1:5C:FA:C2:27:AF:6A:D1:D7:0E:8E:4A:6E:DC:BA:02 -# Fingerprint (SHA1): 99:9A:64:C3:7F:F4:7D:9F:AB:95:F1:47:69:89:14:60:EE:C4:C3:C5 +# Issuer: CN=e-Szigno Root CA 2017,OID.2.5.4.97=VATHU-23584497,O=Microsec Ltd.,L=Budapest,C=HU +# Serial Number:01:54:48:ef:21:fd:97:59:0d:f5:04:0a +# Subject: CN=e-Szigno Root CA 2017,OID.2.5.4.97=VATHU-23584497,O=Microsec Ltd.,L=Budapest,C=HU +# Not Valid Before: Tue Aug 22 12:07:06 2017 +# Not Valid After : Fri Aug 22 12:07:06 2042 +# Fingerprint (SHA-256): BE:B0:0B:30:83:9B:9B:C3:2C:32:E4:44:79:05:95:06:41:F2:64:21:B1:5E:D0:89:19:8B:51:8A:E2:EA:1B:99 +# Fingerprint (SHA1): 89:D4:83:03:4F:9E:9A:48:80:5F:72:37:D4:A9:A6:EF:CB:7C:1F:D1 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Microsoft ECC Root Certificate Authority 2017" +CKA_LABEL UTF8 "e-Szigno Root CA 2017" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 -\157\146\164\040\105\103\103\040\122\157\157\164\040\103\145\162 -\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 -\164\171\040\062\060\061\067 +\060\161\061\013\060\011\006\003\125\004\006\023\002\110\125\061 +\021\060\017\006\003\125\004\007\014\010\102\165\144\141\160\145 +\163\164\061\026\060\024\006\003\125\004\012\014\015\115\151\143 +\162\157\163\145\143\040\114\164\144\056\061\027\060\025\006\003 +\125\004\141\014\016\126\101\124\110\125\055\062\063\065\070\064 +\064\071\067\061\036\060\034\006\003\125\004\003\014\025\145\055 +\123\172\151\147\156\157\040\122\157\157\164\040\103\101\040\062 +\060\061\067 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 -\157\146\164\040\105\103\103\040\122\157\157\164\040\103\145\162 -\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 -\164\171\040\062\060\061\067 +\060\161\061\013\060\011\006\003\125\004\006\023\002\110\125\061 +\021\060\017\006\003\125\004\007\014\010\102\165\144\141\160\145 +\163\164\061\026\060\024\006\003\125\004\012\014\015\115\151\143 +\162\157\163\145\143\040\114\164\144\056\061\027\060\025\006\003 +\125\004\141\014\016\126\101\124\110\125\055\062\063\065\070\064 +\064\071\067\061\036\060\034\006\003\125\004\003\014\025\145\055 +\123\172\151\147\156\157\040\122\157\157\164\040\103\101\040\062 +\060\061\067 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\146\362\075\257\207\336\213\261\112\352\014\127\061\001 -\302\354 +\002\014\001\124\110\357\041\375\227\131\015\365\004\012 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\131\060\202\001\337\240\003\002\001\002\002\020\146 -\362\075\257\207\336\213\261\112\352\014\127\061\001\302\354\060 -\012\006\010\052\206\110\316\075\004\003\003\060\145\061\013\060 -\011\006\003\125\004\006\023\002\125\123\061\036\060\034\006\003 -\125\004\012\023\025\115\151\143\162\157\163\157\146\164\040\103 -\157\162\160\157\162\141\164\151\157\156\061\066\060\064\006\003 -\125\004\003\023\055\115\151\143\162\157\163\157\146\164\040\105 -\103\103\040\122\157\157\164\040\103\145\162\164\151\146\151\143 -\141\164\145\040\101\165\164\150\157\162\151\164\171\040\062\060 -\061\067\060\036\027\015\061\071\061\062\061\070\062\063\060\066 -\064\065\132\027\015\064\062\060\067\061\070\062\063\061\066\060 -\064\132\060\145\061\013\060\011\006\003\125\004\006\023\002\125 -\123\061\036\060\034\006\003\125\004\012\023\025\115\151\143\162 -\157\163\157\146\164\040\103\157\162\160\157\162\141\164\151\157 -\156\061\066\060\064\006\003\125\004\003\023\055\115\151\143\162 -\157\163\157\146\164\040\105\103\103\040\122\157\157\164\040\103 -\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150\157 -\162\151\164\171\040\062\060\061\067\060\166\060\020\006\007\052 -\206\110\316\075\002\001\006\005\053\201\004\000\042\003\142\000 -\004\324\274\075\002\102\165\101\023\043\315\200\004\206\002\121 -\057\152\250\201\142\013\145\314\366\312\235\036\157\112\146\121 -\242\003\331\235\221\372\266\026\261\214\156\336\174\315\333\171 -\246\057\316\273\316\161\057\345\245\253\050\354\143\004\146\231 -\370\372\362\223\020\005\341\201\050\102\343\306\150\364\346\033 -\204\140\112\211\257\355\171\017\073\316\361\366\104\365\001\170 -\300\243\124\060\122\060\016\006\003\125\035\017\001\001\377\004 -\004\003\002\001\206\060\017\006\003\125\035\023\001\001\377\004 -\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026\004 -\024\310\313\231\162\160\122\014\370\346\276\262\004\127\051\052 -\317\102\020\355\065\060\020\006\011\053\006\001\004\001\202\067 -\025\001\004\003\002\001\000\060\012\006\010\052\206\110\316\075 -\004\003\003\003\150\000\060\145\002\060\130\362\115\352\014\371 -\137\136\356\140\051\313\072\362\333\326\062\204\031\077\174\325 -\057\302\261\314\223\256\120\273\011\062\306\306\355\176\311\066 -\224\022\344\150\205\006\242\033\320\057\002\061\000\231\351\026 -\264\016\372\126\110\324\244\060\026\221\170\333\124\214\145\001 -\212\347\120\146\302\061\267\071\272\270\032\042\007\116\374\153 -\124\026\040\377\053\265\347\114\014\115\246\117\163 +\060\202\002\100\060\202\001\345\240\003\002\001\002\002\014\001 +\124\110\357\041\375\227\131\015\365\004\012\060\012\006\010\052 +\206\110\316\075\004\003\002\060\161\061\013\060\011\006\003\125 +\004\006\023\002\110\125\061\021\060\017\006\003\125\004\007\014 +\010\102\165\144\141\160\145\163\164\061\026\060\024\006\003\125 +\004\012\014\015\115\151\143\162\157\163\145\143\040\114\164\144 +\056\061\027\060\025\006\003\125\004\141\014\016\126\101\124\110 +\125\055\062\063\065\070\064\064\071\067\061\036\060\034\006\003 +\125\004\003\014\025\145\055\123\172\151\147\156\157\040\122\157 +\157\164\040\103\101\040\062\060\061\067\060\036\027\015\061\067 +\060\070\062\062\061\062\060\067\060\066\132\027\015\064\062\060 +\070\062\062\061\062\060\067\060\066\132\060\161\061\013\060\011 +\006\003\125\004\006\023\002\110\125\061\021\060\017\006\003\125 +\004\007\014\010\102\165\144\141\160\145\163\164\061\026\060\024 +\006\003\125\004\012\014\015\115\151\143\162\157\163\145\143\040 +\114\164\144\056\061\027\060\025\006\003\125\004\141\014\016\126 +\101\124\110\125\055\062\063\065\070\064\064\071\067\061\036\060 +\034\006\003\125\004\003\014\025\145\055\123\172\151\147\156\157 +\040\122\157\157\164\040\103\101\040\062\060\061\067\060\131\060 +\023\006\007\052\206\110\316\075\002\001\006\010\052\206\110\316 +\075\003\001\007\003\102\000\004\226\334\075\212\330\260\173\157 +\306\047\276\104\220\261\263\126\025\173\216\103\044\175\032\204 +\131\356\143\150\262\306\136\207\320\025\110\036\250\220\255\275 +\123\242\332\336\072\220\246\140\137\150\062\265\206\101\337\207 +\133\054\173\305\376\174\172\332\243\143\060\141\060\017\006\003 +\125\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006 +\003\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006 +\003\125\035\016\004\026\004\024\207\021\025\010\321\252\301\170 +\014\261\257\316\306\311\220\357\277\060\004\300\060\037\006\003 +\125\035\043\004\030\060\026\200\024\207\021\025\010\321\252\301 +\170\014\261\257\316\306\311\220\357\277\060\004\300\060\012\006 +\010\052\206\110\316\075\004\003\002\003\111\000\060\106\002\041 +\000\265\127\335\327\212\125\013\066\341\206\104\372\324\331\150 +\215\270\334\043\212\212\015\324\057\175\352\163\354\277\115\154 +\250\002\041\000\313\245\264\022\372\347\265\350\317\176\223\374 +\363\065\217\157\116\132\174\264\274\116\262\374\162\252\133\131 +\371\347\334\061 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Microsoft ECC Root Certificate Authority 2017" -# Issuer: CN=Microsoft ECC Root Certificate Authority 2017,O=Microsoft Corporation,C=US -# Serial Number:66:f2:3d:af:87:de:8b:b1:4a:ea:0c:57:31:01:c2:ec -# Subject: CN=Microsoft ECC Root Certificate Authority 2017,O=Microsoft Corporation,C=US -# Not Valid Before: Wed Dec 18 23:06:45 2019 -# Not Valid After : Fri Jul 18 23:16:04 2042 -# Fingerprint (SHA-256): 35:8D:F3:9D:76:4A:F9:E1:B7:66:E9:C9:72:DF:35:2E:E1:5C:FA:C2:27:AF:6A:D1:D7:0E:8E:4A:6E:DC:BA:02 -# Fingerprint (SHA1): 99:9A:64:C3:7F:F4:7D:9F:AB:95:F1:47:69:89:14:60:EE:C4:C3:C5 +# Trust for "e-Szigno Root CA 2017" +# Issuer: CN=e-Szigno Root CA 2017,OID.2.5.4.97=VATHU-23584497,O=Microsec Ltd.,L=Budapest,C=HU +# Serial Number:01:54:48:ef:21:fd:97:59:0d:f5:04:0a +# Subject: CN=e-Szigno Root CA 2017,OID.2.5.4.97=VATHU-23584497,O=Microsec Ltd.,L=Budapest,C=HU +# Not Valid Before: Tue Aug 22 12:07:06 2017 +# Not Valid After : Fri Aug 22 12:07:06 2042 +# Fingerprint (SHA-256): BE:B0:0B:30:83:9B:9B:C3:2C:32:E4:44:79:05:95:06:41:F2:64:21:B1:5E:D0:89:19:8B:51:8A:E2:EA:1B:99 +# Fingerprint (SHA1): 89:D4:83:03:4F:9E:9A:48:80:5F:72:37:D4:A9:A6:EF:CB:7C:1F:D1 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Microsoft ECC Root Certificate Authority 2017" +CKA_LABEL UTF8 "e-Szigno Root CA 2017" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\231\232\144\303\177\364\175\237\253\225\361\107\151\211\024\140 -\356\304\303\305 +\211\324\203\003\117\236\232\110\200\137\162\067\324\251\246\357 +\313\174\037\321 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\335\241\003\346\112\223\020\321\277\360\031\102\313\376\355\147 +\336\037\366\236\204\256\247\264\041\316\036\130\175\321\204\230 END CKA_ISSUER MULTILINE_OCTAL -\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 -\157\146\164\040\105\103\103\040\122\157\157\164\040\103\145\162 -\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 -\164\171\040\062\060\061\067 +\060\161\061\013\060\011\006\003\125\004\006\023\002\110\125\061 +\021\060\017\006\003\125\004\007\014\010\102\165\144\141\160\145 +\163\164\061\026\060\024\006\003\125\004\012\014\015\115\151\143 +\162\157\163\145\143\040\114\164\144\056\061\027\060\025\006\003 +\125\004\141\014\016\126\101\124\110\125\055\062\063\065\070\064 +\064\071\067\061\036\060\034\006\003\125\004\003\014\025\145\055 +\123\172\151\147\156\157\040\122\157\157\164\040\103\101\040\062 +\060\061\067 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\146\362\075\257\207\336\213\261\112\352\014\127\061\001 -\302\354 +\002\014\001\124\110\357\041\375\227\131\015\365\004\012 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Microsoft RSA Root Certificate Authority 2017" +# Certificate "certSIGN Root CA G2" # -# Issuer: CN=Microsoft RSA Root Certificate Authority 2017,O=Microsoft Corporation,C=US -# Serial Number:1e:d3:97:09:5f:d8:b4:b3:47:70:1e:aa:be:7f:45:b3 -# Subject: CN=Microsoft RSA Root Certificate Authority 2017,O=Microsoft Corporation,C=US -# Not Valid Before: Wed Dec 18 22:51:22 2019 -# Not Valid After : Fri Jul 18 23:00:23 2042 -# Fingerprint (SHA-256): C7:41:F7:0F:4B:2A:8D:88:BF:2E:71:C1:41:22:EF:53:EF:10:EB:A0:CF:A5:E6:4C:FA:20:F4:18:85:30:73:E0 -# Fingerprint (SHA1): 73:A5:E6:4A:3B:FF:83:16:FF:0E:DC:CC:61:8A:90:6E:4E:AE:4D:74 +# Issuer: OU=certSIGN ROOT CA G2,O=CERTSIGN SA,C=RO +# Serial Number:11:00:34:b6:4e:c6:36:2d:36 +# Subject: OU=certSIGN ROOT CA G2,O=CERTSIGN SA,C=RO +# Not Valid Before: Mon Feb 06 09:27:35 2017 +# Not Valid After : Thu Feb 06 09:27:35 2042 +# Fingerprint (SHA-256): 65:7C:FE:2F:A7:3F:AA:38:46:25:71:F3:32:A2:36:3A:46:FC:E7:02:09:51:71:07:02:CD:FB:B6:EE:DA:33:05 +# Fingerprint (SHA1): 26:F9:93:B4:ED:3D:28:27:B0:B9:4B:A7:E9:15:1D:A3:8D:92:E5:32 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Microsoft RSA Root Certificate Authority 2017" +CKA_LABEL UTF8 "certSIGN Root CA G2" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 -\157\146\164\040\122\123\101\040\122\157\157\164\040\103\145\162 -\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 -\164\171\040\062\060\061\067 +\060\101\061\013\060\011\006\003\125\004\006\023\002\122\117\061 +\024\060\022\006\003\125\004\012\023\013\103\105\122\124\123\111 +\107\116\040\123\101\061\034\060\032\006\003\125\004\013\023\023 +\143\145\162\164\123\111\107\116\040\122\117\117\124\040\103\101 +\040\107\062 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 -\157\146\164\040\122\123\101\040\122\157\157\164\040\103\145\162 -\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 -\164\171\040\062\060\061\067 +\060\101\061\013\060\011\006\003\125\004\006\023\002\122\117\061 +\024\060\022\006\003\125\004\012\023\013\103\105\122\124\123\111 +\107\116\040\123\101\061\034\060\032\006\003\125\004\013\023\023 +\143\145\162\164\123\111\107\116\040\122\117\117\124\040\103\101 +\040\107\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\036\323\227\011\137\330\264\263\107\160\036\252\276\177 -\105\263 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\250\060\202\003\220\240\003\002\001\002\002\020\036 -\323\227\011\137\330\264\263\107\160\036\252\276\177\105\263\060 -\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\145 -\061\013\060\011\006\003\125\004\006\023\002\125\123\061\036\060 -\034\006\003\125\004\012\023\025\115\151\143\162\157\163\157\146 -\164\040\103\157\162\160\157\162\141\164\151\157\156\061\066\060 -\064\006\003\125\004\003\023\055\115\151\143\162\157\163\157\146 -\164\040\122\123\101\040\122\157\157\164\040\103\145\162\164\151 -\146\151\143\141\164\145\040\101\165\164\150\157\162\151\164\171 -\040\062\060\061\067\060\036\027\015\061\071\061\062\061\070\062 -\062\065\061\062\062\132\027\015\064\062\060\067\061\070\062\063 -\060\060\062\063\132\060\145\061\013\060\011\006\003\125\004\006 -\023\002\125\123\061\036\060\034\006\003\125\004\012\023\025\115 -\151\143\162\157\163\157\146\164\040\103\157\162\160\157\162\141 -\164\151\157\156\061\066\060\064\006\003\125\004\003\023\055\115 -\151\143\162\157\163\157\146\164\040\122\123\101\040\122\157\157 -\164\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165 -\164\150\157\162\151\164\171\040\062\060\061\067\060\202\002\042 -\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 -\202\002\017\000\060\202\002\012\002\202\002\001\000\312\133\276 -\224\063\214\051\225\221\026\012\225\275\107\142\301\211\363\231 -\066\337\106\220\311\245\355\170\152\157\107\221\150\370\047\147 -\120\063\035\241\246\373\340\345\103\243\204\002\127\001\135\234 -\110\100\202\123\020\274\277\307\073\150\220\266\202\055\345\364 -\145\320\314\155\031\314\225\371\173\254\112\224\255\016\336\113 -\103\035\207\007\222\023\220\200\203\144\065\071\004\374\345\351 -\154\263\266\037\120\224\070\145\120\134\027\106\271\266\205\265 -\034\265\027\350\326\105\235\330\262\046\260\312\304\160\112\256 -\140\244\335\263\331\354\374\073\325\127\162\274\077\310\311\262 -\336\113\153\370\043\154\003\300\005\275\225\307\315\163\073\146 -\200\144\343\032\254\056\371\107\005\362\006\266\233\163\365\170 -\063\133\307\241\373\047\052\241\264\232\221\214\221\323\072\202 -\076\166\100\264\315\122\141\121\160\050\077\305\305\132\362\311 -\214\111\273\024\133\115\310\377\147\115\114\022\226\255\365\376 -\170\250\227\207\327\375\136\040\200\334\241\113\042\373\324\211 -\255\272\316\107\227\107\125\173\217\105\310\147\050\204\225\034 -\150\060\357\357\111\340\065\173\144\347\230\260\224\332\115\205 -\073\076\125\304\050\257\127\363\236\023\333\106\047\237\036\242 -\136\104\203\244\245\312\325\023\263\113\077\304\343\302\346\206 -\141\244\122\060\271\172\040\117\157\017\070\123\313\063\014\023 -\053\217\326\232\275\052\310\055\261\034\175\113\121\312\107\321 -\110\047\162\135\207\353\325\105\346\110\145\235\257\122\220\272 -\133\242\030\145\127\022\237\150\271\324\025\153\224\304\151\042 -\230\364\063\340\355\371\121\216\101\120\311\064\117\166\220\254 -\374\070\301\330\341\173\271\343\343\224\341\106\151\313\016\012 -\120\153\023\272\254\017\067\132\267\022\265\220\201\036\126\256 -\127\042\206\331\311\322\321\327\121\343\253\073\306\125\375\036 -\016\323\164\012\321\332\252\352\151\270\227\050\217\110\304\007 -\370\122\103\072\364\312\125\065\054\260\246\152\300\234\371\362 -\201\341\022\152\300\105\331\147\263\316\377\043\242\211\012\124 -\324\024\271\052\250\327\354\371\253\315\045\130\062\171\217\220 -\133\230\071\304\010\006\301\254\177\016\075\000\245\002\003\001 -\000\001\243\124\060\122\060\016\006\003\125\035\017\001\001\377 -\004\004\003\002\001\206\060\017\006\003\125\035\023\001\001\377 -\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026 -\004\024\011\313\131\177\206\262\160\217\032\303\071\343\300\331 -\351\277\273\115\262\043\060\020\006\011\053\006\001\004\001\202 -\067\025\001\004\003\002\001\000\060\015\006\011\052\206\110\206 -\367\015\001\001\014\005\000\003\202\002\001\000\254\257\076\135 -\302\021\226\211\216\243\347\222\326\227\025\270\023\242\246\102 -\056\002\315\026\005\131\047\312\040\350\272\270\350\032\354\115 -\250\227\126\256\145\103\261\217\000\233\122\315\125\315\123\071 -\155\142\114\213\015\133\174\056\104\277\203\020\217\363\123\202 -\200\303\117\072\307\156\021\077\346\343\026\221\204\373\155\204 -\177\064\164\255\211\247\316\271\327\327\237\204\144\222\276\225 -\241\255\011\123\063\335\356\012\352\112\121\216\157\125\253\272 -\265\224\106\256\214\177\330\242\120\045\145\140\200\106\333\063 -\004\256\154\265\230\164\124\045\334\223\344\370\343\125\025\075 -\270\155\303\012\244\022\301\151\205\156\337\144\361\123\231\341 -\112\165\040\235\225\017\344\326\334\003\361\131\030\350\107\211 -\262\127\132\224\266\251\330\027\053\027\111\345\166\313\301\126 -\231\072\067\261\377\151\054\221\221\223\341\337\114\243\067\166 -\115\241\237\370\155\036\035\323\372\354\373\364\105\035\023\155 -\317\367\131\345\042\047\162\053\206\363\127\273\060\355\044\115 -\334\175\126\273\243\263\370\064\171\211\301\340\362\002\141\367 -\246\374\017\273\034\027\013\256\101\331\174\275\047\243\375\056 -\072\321\223\224\261\163\035\044\213\257\133\040\211\255\267\147 -\146\171\365\072\306\246\226\063\376\123\222\310\106\261\021\221 -\306\231\177\217\311\326\146\061\040\101\020\207\055\014\326\301 -\257\064\230\312\144\203\373\023\127\321\301\360\074\172\214\245 -\301\375\225\041\240\161\301\223\147\161\022\352\217\210\012\151 -\031\144\231\043\126\373\254\052\056\160\276\146\304\014\204\357 -\345\213\363\223\001\370\152\220\223\147\113\262\150\243\265\142 -\217\351\077\214\172\073\136\017\347\214\270\306\174\357\067\375 -\164\342\310\117\063\162\341\224\071\155\275\022\257\276\014\116 -\160\174\033\157\215\263\062\223\163\104\026\155\350\364\367\340 -\225\200\217\226\135\070\244\364\253\336\012\060\207\223\330\115 -\000\161\142\105\047\113\072\102\204\133\177\145\267\147\064\122 -\055\234\026\153\252\250\330\173\243\102\114\161\307\014\312\076 -\203\344\246\357\267\001\060\136\121\243\171\365\160\151\246\101 -\104\017\206\260\054\221\306\075\352\256\017\204 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Microsoft RSA Root Certificate Authority 2017" -# Issuer: CN=Microsoft RSA Root Certificate Authority 2017,O=Microsoft Corporation,C=US -# Serial Number:1e:d3:97:09:5f:d8:b4:b3:47:70:1e:aa:be:7f:45:b3 -# Subject: CN=Microsoft RSA Root Certificate Authority 2017,O=Microsoft Corporation,C=US -# Not Valid Before: Wed Dec 18 22:51:22 2019 -# Not Valid After : Fri Jul 18 23:00:23 2042 -# Fingerprint (SHA-256): C7:41:F7:0F:4B:2A:8D:88:BF:2E:71:C1:41:22:EF:53:EF:10:EB:A0:CF:A5:E6:4C:FA:20:F4:18:85:30:73:E0 -# Fingerprint (SHA1): 73:A5:E6:4A:3B:FF:83:16:FF:0E:DC:CC:61:8A:90:6E:4E:AE:4D:74 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Microsoft RSA Root Certificate Authority 2017" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\163\245\346\112\073\377\203\026\377\016\334\314\141\212\220\156 -\116\256\115\164 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\020\377\000\377\317\311\370\307\172\300\356\065\216\311\017\107 -END -CKA_ISSUER MULTILINE_OCTAL -\060\145\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\066\060\064\006\003\125\004\003\023\055\115\151\143\162\157\163 -\157\146\164\040\122\123\101\040\122\157\157\164\040\103\145\162 -\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 -\164\171\040\062\060\061\067 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\036\323\227\011\137\330\264\263\107\160\036\252\276\177 -\105\263 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "e-Szigno Root CA 2017" -# -# Issuer: CN=e-Szigno Root CA 2017,OID.2.5.4.97=VATHU-23584497,O=Microsec Ltd.,L=Budapest,C=HU -# Serial Number:01:54:48:ef:21:fd:97:59:0d:f5:04:0a -# Subject: CN=e-Szigno Root CA 2017,OID.2.5.4.97=VATHU-23584497,O=Microsec Ltd.,L=Budapest,C=HU -# Not Valid Before: Tue Aug 22 12:07:06 2017 -# Not Valid After : Fri Aug 22 12:07:06 2042 -# Fingerprint (SHA-256): BE:B0:0B:30:83:9B:9B:C3:2C:32:E4:44:79:05:95:06:41:F2:64:21:B1:5E:D0:89:19:8B:51:8A:E2:EA:1B:99 -# Fingerprint (SHA1): 89:D4:83:03:4F:9E:9A:48:80:5F:72:37:D4:A9:A6:EF:CB:7C:1F:D1 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "e-Szigno Root CA 2017" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\161\061\013\060\011\006\003\125\004\006\023\002\110\125\061 -\021\060\017\006\003\125\004\007\014\010\102\165\144\141\160\145 -\163\164\061\026\060\024\006\003\125\004\012\014\015\115\151\143 -\162\157\163\145\143\040\114\164\144\056\061\027\060\025\006\003 -\125\004\141\014\016\126\101\124\110\125\055\062\063\065\070\064 -\064\071\067\061\036\060\034\006\003\125\004\003\014\025\145\055 -\123\172\151\147\156\157\040\122\157\157\164\040\103\101\040\062 -\060\061\067 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\161\061\013\060\011\006\003\125\004\006\023\002\110\125\061 -\021\060\017\006\003\125\004\007\014\010\102\165\144\141\160\145 -\163\164\061\026\060\024\006\003\125\004\012\014\015\115\151\143 -\162\157\163\145\143\040\114\164\144\056\061\027\060\025\006\003 -\125\004\141\014\016\126\101\124\110\125\055\062\063\065\070\064 -\064\071\067\061\036\060\034\006\003\125\004\003\014\025\145\055 -\123\172\151\147\156\157\040\122\157\157\164\040\103\101\040\062 -\060\061\067 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\014\001\124\110\357\041\375\227\131\015\365\004\012 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\002\100\060\202\001\345\240\003\002\001\002\002\014\001 -\124\110\357\041\375\227\131\015\365\004\012\060\012\006\010\052 -\206\110\316\075\004\003\002\060\161\061\013\060\011\006\003\125 -\004\006\023\002\110\125\061\021\060\017\006\003\125\004\007\014 -\010\102\165\144\141\160\145\163\164\061\026\060\024\006\003\125 -\004\012\014\015\115\151\143\162\157\163\145\143\040\114\164\144 -\056\061\027\060\025\006\003\125\004\141\014\016\126\101\124\110 -\125\055\062\063\065\070\064\064\071\067\061\036\060\034\006\003 -\125\004\003\014\025\145\055\123\172\151\147\156\157\040\122\157 -\157\164\040\103\101\040\062\060\061\067\060\036\027\015\061\067 -\060\070\062\062\061\062\060\067\060\066\132\027\015\064\062\060 -\070\062\062\061\062\060\067\060\066\132\060\161\061\013\060\011 -\006\003\125\004\006\023\002\110\125\061\021\060\017\006\003\125 -\004\007\014\010\102\165\144\141\160\145\163\164\061\026\060\024 -\006\003\125\004\012\014\015\115\151\143\162\157\163\145\143\040 -\114\164\144\056\061\027\060\025\006\003\125\004\141\014\016\126 -\101\124\110\125\055\062\063\065\070\064\064\071\067\061\036\060 -\034\006\003\125\004\003\014\025\145\055\123\172\151\147\156\157 -\040\122\157\157\164\040\103\101\040\062\060\061\067\060\131\060 -\023\006\007\052\206\110\316\075\002\001\006\010\052\206\110\316 -\075\003\001\007\003\102\000\004\226\334\075\212\330\260\173\157 -\306\047\276\104\220\261\263\126\025\173\216\103\044\175\032\204 -\131\356\143\150\262\306\136\207\320\025\110\036\250\220\255\275 -\123\242\332\336\072\220\246\140\137\150\062\265\206\101\337\207 -\133\054\173\305\376\174\172\332\243\143\060\141\060\017\006\003 -\125\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006 -\003\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006 -\003\125\035\016\004\026\004\024\207\021\025\010\321\252\301\170 -\014\261\257\316\306\311\220\357\277\060\004\300\060\037\006\003 -\125\035\043\004\030\060\026\200\024\207\021\025\010\321\252\301 -\170\014\261\257\316\306\311\220\357\277\060\004\300\060\012\006 -\010\052\206\110\316\075\004\003\002\003\111\000\060\106\002\041 -\000\265\127\335\327\212\125\013\066\341\206\104\372\324\331\150 -\215\270\334\043\212\212\015\324\057\175\352\163\354\277\115\154 -\250\002\041\000\313\245\264\022\372\347\265\350\317\176\223\374 -\363\065\217\157\116\132\174\264\274\116\262\374\162\252\133\131 -\371\347\334\061 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "e-Szigno Root CA 2017" -# Issuer: CN=e-Szigno Root CA 2017,OID.2.5.4.97=VATHU-23584497,O=Microsec Ltd.,L=Budapest,C=HU -# Serial Number:01:54:48:ef:21:fd:97:59:0d:f5:04:0a -# Subject: CN=e-Szigno Root CA 2017,OID.2.5.4.97=VATHU-23584497,O=Microsec Ltd.,L=Budapest,C=HU -# Not Valid Before: Tue Aug 22 12:07:06 2017 -# Not Valid After : Fri Aug 22 12:07:06 2042 -# Fingerprint (SHA-256): BE:B0:0B:30:83:9B:9B:C3:2C:32:E4:44:79:05:95:06:41:F2:64:21:B1:5E:D0:89:19:8B:51:8A:E2:EA:1B:99 -# Fingerprint (SHA1): 89:D4:83:03:4F:9E:9A:48:80:5F:72:37:D4:A9:A6:EF:CB:7C:1F:D1 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "e-Szigno Root CA 2017" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\211\324\203\003\117\236\232\110\200\137\162\067\324\251\246\357 -\313\174\037\321 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\336\037\366\236\204\256\247\264\041\316\036\130\175\321\204\230 -END -CKA_ISSUER MULTILINE_OCTAL -\060\161\061\013\060\011\006\003\125\004\006\023\002\110\125\061 -\021\060\017\006\003\125\004\007\014\010\102\165\144\141\160\145 -\163\164\061\026\060\024\006\003\125\004\012\014\015\115\151\143 -\162\157\163\145\143\040\114\164\144\056\061\027\060\025\006\003 -\125\004\141\014\016\126\101\124\110\125\055\062\063\065\070\064 -\064\071\067\061\036\060\034\006\003\125\004\003\014\025\145\055 -\123\172\151\147\156\157\040\122\157\157\164\040\103\101\040\062 -\060\061\067 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\014\001\124\110\357\041\375\227\131\015\365\004\012 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "certSIGN Root CA G2" -# -# Issuer: OU=certSIGN ROOT CA G2,O=CERTSIGN SA,C=RO -# Serial Number:11:00:34:b6:4e:c6:36:2d:36 -# Subject: OU=certSIGN ROOT CA G2,O=CERTSIGN SA,C=RO -# Not Valid Before: Mon Feb 06 09:27:35 2017 -# Not Valid After : Thu Feb 06 09:27:35 2042 -# Fingerprint (SHA-256): 65:7C:FE:2F:A7:3F:AA:38:46:25:71:F3:32:A2:36:3A:46:FC:E7:02:09:51:71:07:02:CD:FB:B6:EE:DA:33:05 -# Fingerprint (SHA1): 26:F9:93:B4:ED:3D:28:27:B0:B9:4B:A7:E9:15:1D:A3:8D:92:E5:32 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "certSIGN Root CA G2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\101\061\013\060\011\006\003\125\004\006\023\002\122\117\061 -\024\060\022\006\003\125\004\012\023\013\103\105\122\124\123\111 -\107\116\040\123\101\061\034\060\032\006\003\125\004\013\023\023 -\143\145\162\164\123\111\107\116\040\122\117\117\124\040\103\101 -\040\107\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\101\061\013\060\011\006\003\125\004\006\023\002\122\117\061 -\024\060\022\006\003\125\004\012\023\013\103\105\122\124\123\111 -\107\116\040\123\101\061\034\060\032\006\003\125\004\013\023\023 -\143\145\162\164\123\111\107\116\040\122\117\117\124\040\103\101 -\040\107\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\011\021\000\064\266\116\306\066\055\066 +\002\011\021\000\064\266\116\306\066\055\066 END CKA_VALUE MULTILINE_OCTAL \060\202\005\107\060\202\003\057\240\003\002\001\002\002\011\021 @@ -20320,216 +18634,2932 @@ CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "certSIGN Root CA G2" -# Issuer: OU=certSIGN ROOT CA G2,O=CERTSIGN SA,C=RO -# Serial Number:11:00:34:b6:4e:c6:36:2d:36 -# Subject: OU=certSIGN ROOT CA G2,O=CERTSIGN SA,C=RO -# Not Valid Before: Mon Feb 06 09:27:35 2017 -# Not Valid After : Thu Feb 06 09:27:35 2042 -# Fingerprint (SHA-256): 65:7C:FE:2F:A7:3F:AA:38:46:25:71:F3:32:A2:36:3A:46:FC:E7:02:09:51:71:07:02:CD:FB:B6:EE:DA:33:05 -# Fingerprint (SHA1): 26:F9:93:B4:ED:3D:28:27:B0:B9:4B:A7:E9:15:1D:A3:8D:92:E5:32 +# Trust for "certSIGN Root CA G2" +# Issuer: OU=certSIGN ROOT CA G2,O=CERTSIGN SA,C=RO +# Serial Number:11:00:34:b6:4e:c6:36:2d:36 +# Subject: OU=certSIGN ROOT CA G2,O=CERTSIGN SA,C=RO +# Not Valid Before: Mon Feb 06 09:27:35 2017 +# Not Valid After : Thu Feb 06 09:27:35 2042 +# Fingerprint (SHA-256): 65:7C:FE:2F:A7:3F:AA:38:46:25:71:F3:32:A2:36:3A:46:FC:E7:02:09:51:71:07:02:CD:FB:B6:EE:DA:33:05 +# Fingerprint (SHA1): 26:F9:93:B4:ED:3D:28:27:B0:B9:4B:A7:E9:15:1D:A3:8D:92:E5:32 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "certSIGN Root CA G2" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\046\371\223\264\355\075\050\047\260\271\113\247\351\025\035\243 +\215\222\345\062 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\214\361\165\212\306\031\317\224\267\367\145\040\207\303\227\307 +END +CKA_ISSUER MULTILINE_OCTAL +\060\101\061\013\060\011\006\003\125\004\006\023\002\122\117\061 +\024\060\022\006\003\125\004\012\023\013\103\105\122\124\123\111 +\107\116\040\123\101\061\034\060\032\006\003\125\004\013\023\023 +\143\145\162\164\123\111\107\116\040\122\117\117\124\040\103\101 +\040\107\062 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\011\021\000\064\266\116\306\066\055\066 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "Trustwave Global Certification Authority" +# +# Issuer: CN=Trustwave Global Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Serial Number:05:f7:0e:86:da:49:f3:46:35:2e:ba:b2 +# Subject: CN=Trustwave Global Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Not Valid Before: Wed Aug 23 19:34:12 2017 +# Not Valid After : Sat Aug 23 19:34:12 2042 +# Fingerprint (SHA-256): 97:55:20:15:F5:DD:FC:3C:87:88:C0:06:94:45:55:40:88:94:45:00:84:F1:00:86:70:86:BC:1A:2B:B5:8D:C8 +# Fingerprint (SHA1): 2F:8F:36:4F:E1:58:97:44:21:59:87:A5:2A:9A:D0:69:95:26:7F:B5 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Trustwave Global Certification Authority" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\201\210\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\021\060\017\006\003\125\004\010\014\010\111\154\154\151\156 +\157\151\163\061\020\060\016\006\003\125\004\007\014\007\103\150 +\151\143\141\147\157\061\041\060\037\006\003\125\004\012\014\030 +\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 +\147\163\054\040\111\156\143\056\061\061\060\057\006\003\125\004 +\003\014\050\124\162\165\163\164\167\141\166\145\040\107\154\157 +\142\141\154\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\201\210\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\021\060\017\006\003\125\004\010\014\010\111\154\154\151\156 +\157\151\163\061\020\060\016\006\003\125\004\007\014\007\103\150 +\151\143\141\147\157\061\041\060\037\006\003\125\004\012\014\030 +\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 +\147\163\054\040\111\156\143\056\061\061\060\057\006\003\125\004 +\003\014\050\124\162\165\163\164\167\141\166\145\040\107\154\157 +\142\141\154\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\014\005\367\016\206\332\111\363\106\065\056\272\262 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\332\060\202\003\302\240\003\002\001\002\002\014\005 +\367\016\206\332\111\363\106\065\056\272\262\060\015\006\011\052 +\206\110\206\367\015\001\001\013\005\000\060\201\210\061\013\060 +\011\006\003\125\004\006\023\002\125\123\061\021\060\017\006\003 +\125\004\010\014\010\111\154\154\151\156\157\151\163\061\020\060 +\016\006\003\125\004\007\014\007\103\150\151\143\141\147\157\061 +\041\060\037\006\003\125\004\012\014\030\124\162\165\163\164\167 +\141\166\145\040\110\157\154\144\151\156\147\163\054\040\111\156 +\143\056\061\061\060\057\006\003\125\004\003\014\050\124\162\165 +\163\164\167\141\166\145\040\107\154\157\142\141\154\040\103\145 +\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150 +\157\162\151\164\171\060\036\027\015\061\067\060\070\062\063\061 +\071\063\064\061\062\132\027\015\064\062\060\070\062\063\061\071 +\063\064\061\062\132\060\201\210\061\013\060\011\006\003\125\004 +\006\023\002\125\123\061\021\060\017\006\003\125\004\010\014\010 +\111\154\154\151\156\157\151\163\061\020\060\016\006\003\125\004 +\007\014\007\103\150\151\143\141\147\157\061\041\060\037\006\003 +\125\004\012\014\030\124\162\165\163\164\167\141\166\145\040\110 +\157\154\144\151\156\147\163\054\040\111\156\143\056\061\061\060 +\057\006\003\125\004\003\014\050\124\162\165\163\164\167\141\166 +\145\040\107\154\157\142\141\154\040\103\145\162\164\151\146\151 +\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 +\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 +\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 +\000\271\135\121\050\113\074\067\222\321\202\316\275\035\275\315 +\335\270\253\317\012\076\341\135\345\334\252\011\271\127\002\076 +\346\143\141\337\362\017\202\143\256\243\367\254\163\321\174\347 +\263\013\257\010\000\011\131\177\315\051\052\210\223\207\027\030 +\200\355\210\262\264\266\020\037\055\326\137\125\242\023\135\321 +\306\353\006\126\211\210\376\254\062\235\375\134\303\005\307\156 +\356\206\211\272\210\003\235\162\041\206\220\256\217\003\245\334 +\237\210\050\313\243\222\111\017\354\320\017\342\155\104\117\200 +\152\262\324\347\240\012\123\001\272\216\227\221\166\156\274\374 +\325\153\066\346\100\210\326\173\057\137\005\350\054\155\021\363 +\347\262\276\222\104\114\322\227\244\376\322\162\201\103\007\234 +\351\021\076\365\213\032\131\175\037\150\130\335\004\000\054\226 +\363\103\263\176\230\031\164\331\234\163\331\030\276\101\307\064 +\171\331\364\142\302\103\271\263\047\260\042\313\371\075\122\307 +\060\107\263\311\076\270\152\342\347\350\201\160\136\102\213\117 +\046\245\376\072\302\040\156\273\370\026\216\315\014\251\264\033 +\154\166\020\341\130\171\106\076\124\316\200\250\127\011\067\051 +\033\231\023\217\014\310\326\054\034\373\005\350\010\225\075\145 +\106\334\356\315\151\342\115\217\207\050\116\064\013\076\317\024 +\331\273\335\266\120\232\255\167\324\031\326\332\032\210\310\116 +\033\047\165\330\262\010\361\256\203\060\271\021\016\315\207\360 +\204\215\025\162\174\241\357\314\362\210\141\272\364\151\273\014 +\214\013\165\127\004\270\116\052\024\056\075\017\034\036\062\246 +\142\066\356\146\342\042\270\005\100\143\020\042\363\063\035\164 +\162\212\054\365\071\051\240\323\347\033\200\204\055\305\075\343 +\115\261\375\032\157\272\145\007\073\130\354\102\105\046\373\330 +\332\045\162\304\366\000\261\042\171\275\343\174\131\142\112\234 +\005\157\075\316\346\326\107\143\231\306\044\157\162\022\310\254 +\177\220\264\013\221\160\350\267\346\026\020\161\027\316\336\006 +\117\110\101\175\065\112\243\211\362\311\113\173\101\021\155\147 +\267\010\230\114\345\021\031\256\102\200\334\373\220\005\324\370 +\120\312\276\344\255\307\302\224\327\026\235\346\027\217\257\066 +\373\002\003\001\000\001\243\102\060\100\060\017\006\003\125\035 +\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125 +\035\016\004\026\004\024\231\340\031\147\015\142\333\166\263\332 +\075\270\133\350\375\102\322\061\016\207\060\016\006\003\125\035 +\017\001\001\377\004\004\003\002\001\006\060\015\006\011\052\206 +\110\206\367\015\001\001\013\005\000\003\202\002\001\000\230\163 +\160\342\260\323\355\071\354\114\140\331\251\022\206\027\036\226 +\320\350\124\050\073\144\055\041\246\370\235\126\023\152\110\075 +\117\307\076\051\333\155\130\203\124\075\207\175\043\005\324\344 +\034\334\350\070\145\206\305\165\247\132\333\065\005\275\167\336 +\273\051\067\100\005\007\303\224\122\237\312\144\335\361\033\053 +\334\106\012\020\002\061\375\112\150\015\007\144\220\346\036\365 +\052\241\250\273\074\135\371\243\010\013\021\014\361\077\055\020 +\224\157\376\342\064\207\203\326\317\345\033\065\155\322\003\341 +\260\015\250\240\252\106\047\202\066\247\025\266\010\246\102\124 +\127\266\231\132\342\013\171\220\327\127\022\121\065\031\210\101 +\150\045\324\067\027\204\025\373\001\162\334\225\336\122\046\040 +\230\046\342\166\365\047\157\372\000\073\112\141\331\015\313\121 +\223\052\375\026\006\226\247\043\232\043\110\376\121\275\266\304 +\260\261\124\316\336\154\101\255\026\147\176\333\375\070\315\271 +\070\116\262\301\140\313\235\027\337\130\236\172\142\262\046\217 +\164\225\233\344\133\035\322\017\335\230\034\233\131\271\043\323 +\061\240\246\377\070\335\317\040\117\351\130\126\072\147\303\321 +\366\231\231\235\272\066\266\200\057\210\107\117\206\277\104\072 +\200\344\067\034\246\272\352\227\230\021\320\204\142\107\144\036 +\252\356\100\277\064\261\234\217\116\341\362\222\117\037\216\363 +\236\227\336\363\246\171\152\211\161\117\113\047\027\110\376\354 +\364\120\017\117\111\175\314\105\343\275\172\100\305\101\334\141 +\126\047\006\151\345\162\101\201\323\266\001\211\240\057\072\162 +\171\376\072\060\277\101\354\307\142\076\221\113\307\331\061\166 +\102\371\367\074\143\354\046\214\163\014\175\032\035\352\250\174 +\207\250\302\047\174\341\063\101\017\317\317\374\000\240\042\200 +\236\112\247\157\000\260\101\105\267\042\312\150\110\305\102\242 +\256\335\035\362\340\156\116\005\130\261\300\220\026\052\244\075 +\020\100\276\217\142\143\203\251\234\202\175\055\002\351\203\060 +\174\313\047\311\375\036\146\000\260\056\323\041\057\216\063\026 +\154\230\355\020\250\007\326\314\223\317\333\321\151\034\344\312 +\311\340\266\234\351\316\161\161\336\154\077\026\244\171 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "Trustwave Global Certification Authority" +# Issuer: CN=Trustwave Global Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Serial Number:05:f7:0e:86:da:49:f3:46:35:2e:ba:b2 +# Subject: CN=Trustwave Global Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Not Valid Before: Wed Aug 23 19:34:12 2017 +# Not Valid After : Sat Aug 23 19:34:12 2042 +# Fingerprint (SHA-256): 97:55:20:15:F5:DD:FC:3C:87:88:C0:06:94:45:55:40:88:94:45:00:84:F1:00:86:70:86:BC:1A:2B:B5:8D:C8 +# Fingerprint (SHA1): 2F:8F:36:4F:E1:58:97:44:21:59:87:A5:2A:9A:D0:69:95:26:7F:B5 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Trustwave Global Certification Authority" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\057\217\066\117\341\130\227\104\041\131\207\245\052\232\320\151 +\225\046\177\265 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\370\034\030\055\057\272\137\155\241\154\274\307\253\221\307\016 +END +CKA_ISSUER MULTILINE_OCTAL +\060\201\210\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\021\060\017\006\003\125\004\010\014\010\111\154\154\151\156 +\157\151\163\061\020\060\016\006\003\125\004\007\014\007\103\150 +\151\143\141\147\157\061\041\060\037\006\003\125\004\012\014\030 +\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 +\147\163\054\040\111\156\143\056\061\061\060\057\006\003\125\004 +\003\014\050\124\162\165\163\164\167\141\166\145\040\107\154\157 +\142\141\154\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\014\005\367\016\206\332\111\363\106\065\056\272\262 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "Trustwave Global ECC P256 Certification Authority" +# +# Issuer: CN=Trustwave Global ECC P256 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Serial Number:0d:6a:5f:08:3f:28:5c:3e:51:95:df:5d +# Subject: CN=Trustwave Global ECC P256 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Not Valid Before: Wed Aug 23 19:35:10 2017 +# Not Valid After : Sat Aug 23 19:35:10 2042 +# Fingerprint (SHA-256): 94:5B:BC:82:5E:A5:54:F4:89:D1:FD:51:A7:3D:DF:2E:A6:24:AC:70:19:A0:52:05:22:5C:22:A7:8C:CF:A8:B4 +# Fingerprint (SHA1): B4:90:82:DD:45:0C:BE:8B:5B:B1:66:D3:E2:A4:08:26:CD:ED:42:CF +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Trustwave Global ECC P256 Certification Authority" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 +\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 +\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 +\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 +\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 +\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 +\142\141\154\040\105\103\103\040\120\062\065\066\040\103\145\162 +\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 +\162\151\164\171 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 +\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 +\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 +\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 +\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 +\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 +\142\141\154\040\105\103\103\040\120\062\065\066\040\103\145\162 +\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 +\162\151\164\171 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\014\015\152\137\010\077\050\134\076\121\225\337\135 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\140\060\202\002\007\240\003\002\001\002\002\014\015 +\152\137\010\077\050\134\076\121\225\337\135\060\012\006\010\052 +\206\110\316\075\004\003\002\060\201\221\061\013\060\011\006\003 +\125\004\006\023\002\125\123\061\021\060\017\006\003\125\004\010 +\023\010\111\154\154\151\156\157\151\163\061\020\060\016\006\003 +\125\004\007\023\007\103\150\151\143\141\147\157\061\041\060\037 +\006\003\125\004\012\023\030\124\162\165\163\164\167\141\166\145 +\040\110\157\154\144\151\156\147\163\054\040\111\156\143\056\061 +\072\060\070\006\003\125\004\003\023\061\124\162\165\163\164\167 +\141\166\145\040\107\154\157\142\141\154\040\105\103\103\040\120 +\062\065\066\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171\060\036\027\015\061 +\067\060\070\062\063\061\071\063\065\061\060\132\027\015\064\062 +\060\070\062\063\061\071\063\065\061\060\132\060\201\221\061\013 +\060\011\006\003\125\004\006\023\002\125\123\061\021\060\017\006 +\003\125\004\010\023\010\111\154\154\151\156\157\151\163\061\020 +\060\016\006\003\125\004\007\023\007\103\150\151\143\141\147\157 +\061\041\060\037\006\003\125\004\012\023\030\124\162\165\163\164 +\167\141\166\145\040\110\157\154\144\151\156\147\163\054\040\111 +\156\143\056\061\072\060\070\006\003\125\004\003\023\061\124\162 +\165\163\164\167\141\166\145\040\107\154\157\142\141\154\040\105 +\103\103\040\120\062\065\066\040\103\145\162\164\151\146\151\143 +\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171\060 +\131\060\023\006\007\052\206\110\316\075\002\001\006\010\052\206 +\110\316\075\003\001\007\003\102\000\004\176\373\154\346\043\343 +\163\062\010\312\140\346\123\234\272\164\215\030\260\170\220\122 +\200\335\070\300\112\035\321\250\314\223\244\227\006\070\312\015 +\025\142\306\216\001\052\145\235\252\337\064\221\056\201\301\344 +\063\222\061\304\375\011\072\246\077\255\243\103\060\101\060\017 +\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 +\017\006\003\125\035\017\001\001\377\004\005\003\003\007\006\000 +\060\035\006\003\125\035\016\004\026\004\024\243\101\006\254\220 +\155\321\112\353\165\245\112\020\231\263\261\241\213\112\367\060 +\012\006\010\052\206\110\316\075\004\003\002\003\107\000\060\104 +\002\040\007\346\124\332\016\240\132\262\256\021\237\207\305\266 +\377\151\336\045\276\370\240\267\010\363\104\316\052\337\010\041 +\014\067\002\040\055\046\003\240\005\275\153\321\366\134\370\145 +\314\206\155\263\234\064\110\143\204\011\305\215\167\032\342\314 +\234\341\164\173 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "Trustwave Global ECC P256 Certification Authority" +# Issuer: CN=Trustwave Global ECC P256 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Serial Number:0d:6a:5f:08:3f:28:5c:3e:51:95:df:5d +# Subject: CN=Trustwave Global ECC P256 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Not Valid Before: Wed Aug 23 19:35:10 2017 +# Not Valid After : Sat Aug 23 19:35:10 2042 +# Fingerprint (SHA-256): 94:5B:BC:82:5E:A5:54:F4:89:D1:FD:51:A7:3D:DF:2E:A6:24:AC:70:19:A0:52:05:22:5C:22:A7:8C:CF:A8:B4 +# Fingerprint (SHA1): B4:90:82:DD:45:0C:BE:8B:5B:B1:66:D3:E2:A4:08:26:CD:ED:42:CF +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Trustwave Global ECC P256 Certification Authority" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\264\220\202\335\105\014\276\213\133\261\146\323\342\244\010\046 +\315\355\102\317 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\133\104\343\215\135\066\206\046\350\015\005\322\131\247\203\124 +END +CKA_ISSUER MULTILINE_OCTAL +\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 +\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 +\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 +\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 +\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 +\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 +\142\141\154\040\105\103\103\040\120\062\065\066\040\103\145\162 +\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 +\162\151\164\171 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\014\015\152\137\010\077\050\134\076\121\225\337\135 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "Trustwave Global ECC P384 Certification Authority" +# +# Issuer: CN=Trustwave Global ECC P384 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Serial Number:08:bd:85:97:6c:99:27:a4:80:68:47:3b +# Subject: CN=Trustwave Global ECC P384 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Not Valid Before: Wed Aug 23 19:36:43 2017 +# Not Valid After : Sat Aug 23 19:36:43 2042 +# Fingerprint (SHA-256): 55:90:38:59:C8:C0:C3:EB:B8:75:9E:CE:4E:25:57:22:5F:F5:75:8B:BD:38:EB:D4:82:76:60:1E:1B:D5:80:97 +# Fingerprint (SHA1): E7:F3:A3:C8:CF:6F:C3:04:2E:6D:0E:67:32:C5:9E:68:95:0D:5E:D2 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Trustwave Global ECC P384 Certification Authority" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 +\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 +\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 +\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 +\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 +\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 +\142\141\154\040\105\103\103\040\120\063\070\064\040\103\145\162 +\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 +\162\151\164\171 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 +\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 +\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 +\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 +\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 +\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 +\142\141\154\040\105\103\103\040\120\063\070\064\040\103\145\162 +\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 +\162\151\164\171 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\014\010\275\205\227\154\231\047\244\200\150\107\073 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\235\060\202\002\044\240\003\002\001\002\002\014\010 +\275\205\227\154\231\047\244\200\150\107\073\060\012\006\010\052 +\206\110\316\075\004\003\003\060\201\221\061\013\060\011\006\003 +\125\004\006\023\002\125\123\061\021\060\017\006\003\125\004\010 +\023\010\111\154\154\151\156\157\151\163\061\020\060\016\006\003 +\125\004\007\023\007\103\150\151\143\141\147\157\061\041\060\037 +\006\003\125\004\012\023\030\124\162\165\163\164\167\141\166\145 +\040\110\157\154\144\151\156\147\163\054\040\111\156\143\056\061 +\072\060\070\006\003\125\004\003\023\061\124\162\165\163\164\167 +\141\166\145\040\107\154\157\142\141\154\040\105\103\103\040\120 +\063\070\064\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171\060\036\027\015\061 +\067\060\070\062\063\061\071\063\066\064\063\132\027\015\064\062 +\060\070\062\063\061\071\063\066\064\063\132\060\201\221\061\013 +\060\011\006\003\125\004\006\023\002\125\123\061\021\060\017\006 +\003\125\004\010\023\010\111\154\154\151\156\157\151\163\061\020 +\060\016\006\003\125\004\007\023\007\103\150\151\143\141\147\157 +\061\041\060\037\006\003\125\004\012\023\030\124\162\165\163\164 +\167\141\166\145\040\110\157\154\144\151\156\147\163\054\040\111 +\156\143\056\061\072\060\070\006\003\125\004\003\023\061\124\162 +\165\163\164\167\141\166\145\040\107\154\157\142\141\154\040\105 +\103\103\040\120\063\070\064\040\103\145\162\164\151\146\151\143 +\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171\060 +\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 +\004\000\042\003\142\000\004\153\332\015\165\065\010\061\107\005 +\256\105\231\125\361\021\023\056\112\370\020\061\043\243\176\203 +\323\177\050\010\072\046\032\072\317\227\202\037\200\267\047\011 +\217\321\216\060\304\012\233\016\254\130\004\253\367\066\175\224 +\043\244\233\012\212\213\253\353\375\071\045\146\361\136\376\214 +\256\215\101\171\235\011\140\316\050\251\323\212\155\363\326\105 +\324\362\230\204\070\145\240\243\103\060\101\060\017\006\003\125 +\035\023\001\001\377\004\005\060\003\001\001\377\060\017\006\003 +\125\035\017\001\001\377\004\005\003\003\007\006\000\060\035\006 +\003\125\035\016\004\026\004\024\125\251\204\211\322\301\062\275 +\030\313\154\246\007\116\310\347\235\276\202\220\060\012\006\010 +\052\206\110\316\075\004\003\003\003\147\000\060\144\002\060\067 +\001\222\227\105\022\176\240\363\076\255\031\072\162\335\364\120 +\223\003\022\276\104\322\117\101\244\214\234\235\037\243\366\302 +\222\347\110\024\376\116\233\245\221\127\256\306\067\162\273\002 +\060\147\045\012\261\014\136\356\251\143\222\157\345\220\013\376 +\146\042\312\107\375\212\061\367\203\376\172\277\020\276\030\053 +\036\217\366\051\036\224\131\357\216\041\067\313\121\230\245\156 +\113 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "Trustwave Global ECC P384 Certification Authority" +# Issuer: CN=Trustwave Global ECC P384 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Serial Number:08:bd:85:97:6c:99:27:a4:80:68:47:3b +# Subject: CN=Trustwave Global ECC P384 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US +# Not Valid Before: Wed Aug 23 19:36:43 2017 +# Not Valid After : Sat Aug 23 19:36:43 2042 +# Fingerprint (SHA-256): 55:90:38:59:C8:C0:C3:EB:B8:75:9E:CE:4E:25:57:22:5F:F5:75:8B:BD:38:EB:D4:82:76:60:1E:1B:D5:80:97 +# Fingerprint (SHA1): E7:F3:A3:C8:CF:6F:C3:04:2E:6D:0E:67:32:C5:9E:68:95:0D:5E:D2 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Trustwave Global ECC P384 Certification Authority" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\347\363\243\310\317\157\303\004\056\155\016\147\062\305\236\150 +\225\015\136\322 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\352\317\140\304\073\271\025\051\100\241\227\355\170\047\223\326 +END +CKA_ISSUER MULTILINE_OCTAL +\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 +\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 +\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 +\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 +\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 +\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 +\142\141\154\040\105\103\103\040\120\063\070\064\040\103\145\162 +\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 +\162\151\164\171 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\014\010\275\205\227\154\231\047\244\200\150\107\073 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "NAVER Global Root Certification Authority" +# +# Issuer: CN=NAVER Global Root Certification Authority,O=NAVER BUSINESS PLATFORM Corp.,C=KR +# Serial Number:01:94:30:1e:a2:0b:dd:f5:c5:33:2a:b1:43:44:71:f8:d6:50:4d:0d +# Subject: CN=NAVER Global Root Certification Authority,O=NAVER BUSINESS PLATFORM Corp.,C=KR +# Not Valid Before: Fri Aug 18 08:58:42 2017 +# Not Valid After : Tue Aug 18 23:59:59 2037 +# Fingerprint (SHA-256): 88:F4:38:DC:F8:FF:D1:FA:8F:42:91:15:FF:E5:F8:2A:E1:E0:6E:0C:70:C3:75:FA:AD:71:7B:34:A4:9E:72:65 +# Fingerprint (SHA1): 8F:6B:F2:A9:27:4A:DA:14:A0:C4:F4:8E:61:27:F9:C0:1E:78:5D:D1 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "NAVER Global Root Certification Authority" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\151\061\013\060\011\006\003\125\004\006\023\002\113\122\061 +\046\060\044\006\003\125\004\012\014\035\116\101\126\105\122\040 +\102\125\123\111\116\105\123\123\040\120\114\101\124\106\117\122 +\115\040\103\157\162\160\056\061\062\060\060\006\003\125\004\003 +\014\051\116\101\126\105\122\040\107\154\157\142\141\154\040\122 +\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\151\061\013\060\011\006\003\125\004\006\023\002\113\122\061 +\046\060\044\006\003\125\004\012\014\035\116\101\126\105\122\040 +\102\125\123\111\116\105\123\123\040\120\114\101\124\106\117\122 +\115\040\103\157\162\160\056\061\062\060\060\006\003\125\004\003 +\014\051\116\101\126\105\122\040\107\154\157\142\141\154\040\122 +\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\024\001\224\060\036\242\013\335\365\305\063\052\261\103\104 +\161\370\326\120\115\015 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\242\060\202\003\212\240\003\002\001\002\002\024\001 +\224\060\036\242\013\335\365\305\063\052\261\103\104\161\370\326 +\120\115\015\060\015\006\011\052\206\110\206\367\015\001\001\014 +\005\000\060\151\061\013\060\011\006\003\125\004\006\023\002\113 +\122\061\046\060\044\006\003\125\004\012\014\035\116\101\126\105 +\122\040\102\125\123\111\116\105\123\123\040\120\114\101\124\106 +\117\122\115\040\103\157\162\160\056\061\062\060\060\006\003\125 +\004\003\014\051\116\101\126\105\122\040\107\154\157\142\141\154 +\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 +\151\157\156\040\101\165\164\150\157\162\151\164\171\060\036\027 +\015\061\067\060\070\061\070\060\070\065\070\064\062\132\027\015 +\063\067\060\070\061\070\062\063\065\071\065\071\132\060\151\061 +\013\060\011\006\003\125\004\006\023\002\113\122\061\046\060\044 +\006\003\125\004\012\014\035\116\101\126\105\122\040\102\125\123 +\111\116\105\123\123\040\120\114\101\124\106\117\122\115\040\103 +\157\162\160\056\061\062\060\060\006\003\125\004\003\014\051\116 +\101\126\105\122\040\107\154\157\142\141\154\040\122\157\157\164 +\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040\101 +\165\164\150\157\162\151\164\171\060\202\002\042\060\015\006\011 +\052\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000 +\060\202\002\012\002\202\002\001\000\266\324\361\223\134\265\100 +\211\012\253\015\220\133\120\143\256\220\224\164\027\105\162\326 +\173\145\132\051\113\247\126\240\113\270\057\102\165\351\331\173 +\044\132\061\145\253\027\027\321\063\072\331\021\334\100\066\207 +\337\307\152\351\046\136\131\212\167\343\350\110\234\061\026\372 +\076\221\261\312\311\243\342\237\316\041\123\243\002\066\060\313 +\122\002\345\332\062\135\303\305\346\371\356\021\307\213\311\104 +\036\204\223\030\112\264\237\345\022\144\151\320\046\205\142\001 +\266\311\002\035\276\203\121\273\134\332\370\255\025\152\231\367 +\222\124\367\064\133\351\277\352\051\201\022\324\123\221\226\263 +\221\132\335\376\220\163\050\373\060\106\265\312\010\007\307\161 +\162\311\146\323\064\227\366\214\364\030\112\341\320\075\132\105 +\266\151\247\051\373\043\316\210\330\022\234\000\110\250\246\017 +\263\073\222\215\161\016\164\305\213\310\114\371\364\233\216\270 +\074\151\355\157\073\120\057\130\355\304\260\320\034\033\152\014 +\342\274\104\252\330\315\024\135\224\170\141\277\016\156\332\052 +\274\057\014\013\161\246\263\026\077\234\346\371\314\237\123\065 +\342\003\240\240\030\277\273\361\276\364\326\214\207\015\102\367 +\006\271\361\155\355\004\224\250\376\266\323\006\306\100\141\337 +\235\235\363\124\166\316\123\072\001\246\222\101\354\004\243\217 +\015\242\325\011\312\326\313\232\361\357\103\135\300\253\245\101 +\317\134\123\160\160\311\210\246\055\324\153\141\163\120\046\206 +\141\016\137\033\302\053\342\214\325\273\235\301\003\102\272\224 +\332\137\251\260\312\314\115\012\357\107\151\003\057\042\373\361 +\050\316\277\135\120\145\250\220\155\263\164\260\010\307\254\250 +\321\353\076\234\374\135\032\203\056\053\313\265\363\104\235\072 +\247\027\141\226\242\161\323\160\226\025\115\267\114\163\356\031 +\134\305\133\076\101\376\254\165\140\073\033\143\316\000\335\332 +\010\220\142\264\345\055\356\110\247\153\027\231\124\276\207\112 +\343\251\136\004\114\353\020\155\124\326\357\361\350\362\142\026 +\313\200\153\355\075\355\365\037\060\245\256\113\311\023\355\212 +\001\001\311\270\121\130\300\146\072\261\146\113\304\325\061\002 +\142\351\164\204\014\333\115\106\055\002\003\001\000\001\243\102 +\060\100\060\035\006\003\125\035\016\004\026\004\024\322\237\210 +\337\241\315\054\275\354\365\073\001\001\223\063\047\262\353\140 +\113\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001 +\006\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001 +\001\377\060\015\006\011\052\206\110\206\367\015\001\001\014\005 +\000\003\202\002\001\000\062\312\200\263\235\075\124\006\335\322 +\322\056\360\244\001\041\013\147\110\312\155\216\340\310\252\015 +\252\215\041\127\217\306\076\172\312\333\121\324\122\263\324\226 +\204\245\130\140\177\345\013\216\037\365\334\012\025\201\345\073 +\266\267\042\057\011\234\023\026\261\154\014\065\010\155\253\143 +\162\355\334\276\354\307\127\346\060\040\161\326\327\020\301\023 +\125\001\214\052\103\344\101\361\317\072\172\123\222\316\242\003 +\005\015\070\337\002\273\020\056\331\073\322\233\172\300\241\246 +\370\265\061\346\364\165\311\271\123\231\165\107\042\132\024\025 +\307\170\033\266\235\351\014\370\033\166\361\205\204\336\241\332 +\022\357\244\342\020\227\172\170\336\014\121\227\250\041\100\213 +\206\275\015\360\136\116\113\066\273\073\040\037\212\102\126\341 +\013\032\277\173\320\042\103\054\104\214\373\345\052\264\154\034 +\034\272\224\340\023\176\041\346\232\302\313\305\102\144\264\036 +\224\173\010\045\310\161\314\207\105\127\205\323\237\051\142\042 +\203\121\227\000\030\227\167\152\230\222\311\174\140\154\337\154 +\175\112\344\160\114\302\236\270\035\367\320\064\307\017\314\373 +\247\377\003\276\255\160\220\332\013\335\310\155\227\137\232\177 +\011\062\101\375\315\242\314\132\155\114\362\252\111\376\146\370 +\351\330\065\353\016\050\036\356\110\057\072\320\171\011\070\174 +\246\042\202\223\225\320\003\276\276\002\240\005\335\040\042\343 +\157\035\210\064\140\306\346\012\271\011\165\013\360\007\350\151 +\226\065\307\373\043\201\216\070\071\270\105\053\103\170\242\321 +\054\024\377\015\050\162\162\225\233\136\011\333\211\104\230\252 +\241\111\273\161\122\362\277\366\377\047\241\066\257\270\266\167 +\210\335\072\244\155\233\064\220\334\024\135\060\277\267\353\027 +\344\207\267\161\320\241\327\167\025\324\102\327\362\363\061\231 +\135\233\335\026\155\077\352\006\043\370\106\242\042\355\223\366 +\335\232\346\052\207\261\230\124\361\042\367\153\105\343\342\216 +\166\035\232\215\304\006\215\066\267\024\363\235\124\151\267\216 +\074\325\244\155\223\201\267\255\366\275\144\173\302\311\150\071 +\240\222\234\315\064\206\221\220\372\144\121\235\376\376\353\245 +\365\165\336\211\367\162 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "NAVER Global Root Certification Authority" +# Issuer: CN=NAVER Global Root Certification Authority,O=NAVER BUSINESS PLATFORM Corp.,C=KR +# Serial Number:01:94:30:1e:a2:0b:dd:f5:c5:33:2a:b1:43:44:71:f8:d6:50:4d:0d +# Subject: CN=NAVER Global Root Certification Authority,O=NAVER BUSINESS PLATFORM Corp.,C=KR +# Not Valid Before: Fri Aug 18 08:58:42 2017 +# Not Valid After : Tue Aug 18 23:59:59 2037 +# Fingerprint (SHA-256): 88:F4:38:DC:F8:FF:D1:FA:8F:42:91:15:FF:E5:F8:2A:E1:E0:6E:0C:70:C3:75:FA:AD:71:7B:34:A4:9E:72:65 +# Fingerprint (SHA1): 8F:6B:F2:A9:27:4A:DA:14:A0:C4:F4:8E:61:27:F9:C0:1E:78:5D:D1 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "NAVER Global Root Certification Authority" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\217\153\362\251\047\112\332\024\240\304\364\216\141\047\371\300 +\036\170\135\321 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\310\176\101\366\045\073\365\011\263\027\350\106\075\277\320\233 +END +CKA_ISSUER MULTILINE_OCTAL +\060\151\061\013\060\011\006\003\125\004\006\023\002\113\122\061 +\046\060\044\006\003\125\004\012\014\035\116\101\126\105\122\040 +\102\125\123\111\116\105\123\123\040\120\114\101\124\106\117\122 +\115\040\103\157\162\160\056\061\062\060\060\006\003\125\004\003 +\014\051\116\101\126\105\122\040\107\154\157\142\141\154\040\122 +\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\024\001\224\060\036\242\013\335\365\305\063\052\261\103\104 +\161\370\326\120\115\015 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +# +# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS,OID.2.5.4.97=VATES-Q2826004J,OU=Ceres,O=FNMT-RCM,C=ES +# Serial Number:62:f6:32:6c:e5:c4:e3:68:5c:1b:62:dd:9c:2e:9d:95 +# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS,OID.2.5.4.97=VATES-Q2826004J,OU=Ceres,O=FNMT-RCM,C=ES +# Not Valid Before: Thu Dec 20 09:37:33 2018 +# Not Valid After : Sun Dec 20 09:37:33 2043 +# Fingerprint (SHA-256): 55:41:53:B1:3D:2C:F9:DD:B7:53:BF:BE:1A:4E:0A:E0:8D:0A:A4:18:70:58:FE:60:A2:B8:62:B2:E4:B8:7B:CB +# Fingerprint (SHA1): 62:FF:D9:9E:C0:65:0D:03:CE:75:93:D2:ED:3F:2D:32:C9:E3:E5:4A +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\170\061\013\060\011\006\003\125\004\006\023\002\105\123\061 +\021\060\017\006\003\125\004\012\014\010\106\116\115\124\055\122 +\103\115\061\016\060\014\006\003\125\004\013\014\005\103\145\162 +\145\163\061\030\060\026\006\003\125\004\141\014\017\126\101\124 +\105\123\055\121\062\070\062\066\060\060\064\112\061\054\060\052 +\006\003\125\004\003\014\043\101\103\040\122\101\111\132\040\106 +\116\115\124\055\122\103\115\040\123\105\122\126\111\104\117\122 +\105\123\040\123\105\107\125\122\117\123 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\170\061\013\060\011\006\003\125\004\006\023\002\105\123\061 +\021\060\017\006\003\125\004\012\014\010\106\116\115\124\055\122 +\103\115\061\016\060\014\006\003\125\004\013\014\005\103\145\162 +\145\163\061\030\060\026\006\003\125\004\141\014\017\126\101\124 +\105\123\055\121\062\070\062\066\060\060\064\112\061\054\060\052 +\006\003\125\004\003\014\043\101\103\040\122\101\111\132\040\106 +\116\115\124\055\122\103\115\040\123\105\122\126\111\104\117\122 +\105\123\040\123\105\107\125\122\117\123 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\142\366\062\154\345\304\343\150\134\033\142\335\234\056 +\235\225 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\156\060\202\001\363\240\003\002\001\002\002\020\142 +\366\062\154\345\304\343\150\134\033\142\335\234\056\235\225\060 +\012\006\010\052\206\110\316\075\004\003\003\060\170\061\013\060 +\011\006\003\125\004\006\023\002\105\123\061\021\060\017\006\003 +\125\004\012\014\010\106\116\115\124\055\122\103\115\061\016\060 +\014\006\003\125\004\013\014\005\103\145\162\145\163\061\030\060 +\026\006\003\125\004\141\014\017\126\101\124\105\123\055\121\062 +\070\062\066\060\060\064\112\061\054\060\052\006\003\125\004\003 +\014\043\101\103\040\122\101\111\132\040\106\116\115\124\055\122 +\103\115\040\123\105\122\126\111\104\117\122\105\123\040\123\105 +\107\125\122\117\123\060\036\027\015\061\070\061\062\062\060\060 +\071\063\067\063\063\132\027\015\064\063\061\062\062\060\060\071 +\063\067\063\063\132\060\170\061\013\060\011\006\003\125\004\006 +\023\002\105\123\061\021\060\017\006\003\125\004\012\014\010\106 +\116\115\124\055\122\103\115\061\016\060\014\006\003\125\004\013 +\014\005\103\145\162\145\163\061\030\060\026\006\003\125\004\141 +\014\017\126\101\124\105\123\055\121\062\070\062\066\060\060\064 +\112\061\054\060\052\006\003\125\004\003\014\043\101\103\040\122 +\101\111\132\040\106\116\115\124\055\122\103\115\040\123\105\122 +\126\111\104\117\122\105\123\040\123\105\107\125\122\117\123\060 +\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 +\004\000\042\003\142\000\004\366\272\127\123\310\312\253\337\066 +\112\122\041\344\227\322\203\147\236\360\145\121\320\136\207\307 +\107\261\131\362\127\107\233\000\002\223\104\027\151\333\102\307 +\261\262\072\030\016\264\135\214\263\146\135\241\064\371\066\054 +\111\333\363\106\374\263\104\151\104\023\146\375\327\305\375\257 +\066\115\316\003\115\007\161\317\257\152\005\322\242\103\132\012 +\122\157\001\003\116\216\213\243\102\060\100\060\017\006\003\125 +\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006\003 +\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006\003 +\125\035\016\004\026\004\024\001\271\057\357\277\021\206\140\362 +\117\320\101\156\253\163\037\347\322\156\111\060\012\006\010\052 +\206\110\316\075\004\003\003\003\151\000\060\146\002\061\000\256 +\112\343\053\100\303\164\021\362\225\255\026\043\336\116\014\032 +\346\135\245\044\136\153\104\173\374\070\342\117\313\234\105\027 +\021\114\024\047\046\125\071\165\112\003\314\023\220\237\222\002 +\061\000\372\112\154\140\210\163\363\356\270\230\142\251\316\053 +\302\331\212\246\160\061\035\257\260\224\114\353\117\306\343\321 +\363\142\247\074\377\223\056\007\134\111\001\147\151\022\002\162 +\277\347 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS,OID.2.5.4.97=VATES-Q2826004J,OU=Ceres,O=FNMT-RCM,C=ES +# Serial Number:62:f6:32:6c:e5:c4:e3:68:5c:1b:62:dd:9c:2e:9d:95 +# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS,OID.2.5.4.97=VATES-Q2826004J,OU=Ceres,O=FNMT-RCM,C=ES +# Not Valid Before: Thu Dec 20 09:37:33 2018 +# Not Valid After : Sun Dec 20 09:37:33 2043 +# Fingerprint (SHA-256): 55:41:53:B1:3D:2C:F9:DD:B7:53:BF:BE:1A:4E:0A:E0:8D:0A:A4:18:70:58:FE:60:A2:B8:62:B2:E4:B8:7B:CB +# Fingerprint (SHA1): 62:FF:D9:9E:C0:65:0D:03:CE:75:93:D2:ED:3F:2D:32:C9:E3:E5:4A +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\142\377\331\236\300\145\015\003\316\165\223\322\355\077\055\062 +\311\343\345\112 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\031\066\234\122\003\057\322\321\273\043\314\335\036\022\125\273 +END +CKA_ISSUER MULTILINE_OCTAL +\060\170\061\013\060\011\006\003\125\004\006\023\002\105\123\061 +\021\060\017\006\003\125\004\012\014\010\106\116\115\124\055\122 +\103\115\061\016\060\014\006\003\125\004\013\014\005\103\145\162 +\145\163\061\030\060\026\006\003\125\004\141\014\017\126\101\124 +\105\123\055\121\062\070\062\066\060\060\064\112\061\054\060\052 +\006\003\125\004\003\014\043\101\103\040\122\101\111\132\040\106 +\116\115\124\055\122\103\115\040\123\105\122\126\111\104\117\122 +\105\123\040\123\105\107\125\122\117\123 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\142\366\062\154\345\304\343\150\134\033\142\335\234\056 +\235\225 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "GlobalSign Secure Mail Root R45" +# +# Issuer: CN=GlobalSign Secure Mail Root R45,O=GlobalSign nv-sa,C=BE +# Serial Number:76:53:fe:a8:4c:50:ab:9f:8d:32:b5:1d:03:8f:57:dc +# Subject: CN=GlobalSign Secure Mail Root R45,O=GlobalSign nv-sa,C=BE +# Not Valid Before: Wed Mar 18 00:00:00 2020 +# Not Valid After : Sat Mar 18 00:00:00 2045 +# Fingerprint (SHA-256): 31:9A:F0:A7:72:9E:6F:89:26:9C:13:1E:A6:A3:A1:6F:CD:86:38:9F:DC:AB:3C:47:A4:A6:75:C1:61:A3:F9:74 +# Fingerprint (SHA1): 76:18:D1:F3:80:24:3D:52:40:C6:11:6A:AD:57:77:09:7D:81:30:A0 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GlobalSign Secure Mail Root R45" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 +\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 +\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 +\040\122\064\065 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 +\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 +\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 +\040\122\064\065 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\166\123\376\250\114\120\253\237\215\062\265\035\003\217 +\127\334 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\160\060\202\003\130\240\003\002\001\002\002\020\166 +\123\376\250\114\120\253\237\215\062\265\035\003\217\127\334\060 +\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\122 +\061\013\060\011\006\003\125\004\006\023\002\102\105\061\031\060 +\027\006\003\125\004\012\023\020\107\154\157\142\141\154\123\151 +\147\156\040\156\166\055\163\141\061\050\060\046\006\003\125\004 +\003\023\037\107\154\157\142\141\154\123\151\147\156\040\123\145 +\143\165\162\145\040\115\141\151\154\040\122\157\157\164\040\122 +\064\065\060\036\027\015\062\060\060\063\061\070\060\060\060\060 +\060\060\132\027\015\064\065\060\063\061\070\060\060\060\060\060 +\060\132\060\122\061\013\060\011\006\003\125\004\006\023\002\102 +\105\061\031\060\027\006\003\125\004\012\023\020\107\154\157\142 +\141\154\123\151\147\156\040\156\166\055\163\141\061\050\060\046 +\006\003\125\004\003\023\037\107\154\157\142\141\154\123\151\147 +\156\040\123\145\143\165\162\145\040\115\141\151\154\040\122\157 +\157\164\040\122\064\065\060\202\002\042\060\015\006\011\052\206 +\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060\202 +\002\012\002\202\002\001\000\334\171\314\155\006\371\155\273\340 +\126\004\154\177\340\165\314\055\005\111\350\113\334\124\354\133 +\167\225\162\277\177\142\235\205\251\212\044\120\137\123\345\333 +\164\157\244\051\133\023\052\011\255\232\305\057\302\367\166\073 +\241\105\106\252\103\346\044\376\053\260\157\062\160\031\106\132 +\171\046\057\374\075\175\137\144\313\127\314\141\141\250\331\225 +\156\343\225\240\156\177\107\022\030\326\357\003\311\373\212\372 +\232\275\202\025\251\125\167\113\021\117\131\340\153\303\161\363 +\014\330\124\325\201\150\076\023\271\025\056\207\212\074\104\047 +\066\142\044\156\370\054\005\162\060\141\275\102\221\043\304\235 +\045\247\331\124\232\024\243\061\255\200\171\014\247\143\154\230 +\243\254\127\107\063\037\145\226\341\320\322\065\332\371\161\367 +\241\246\045\265\101\135\337\076\140\330\321\366\237\245\362\270 +\314\023\252\217\371\262\156\341\203\055\223\335\076\205\032\335 +\350\261\134\046\001\313\111\205\374\374\322\324\177\205\142\206 +\164\371\313\354\065\042\242\014\060\217\073\253\171\353\126\362 +\372\102\363\355\371\037\105\211\100\051\255\352\222\164\352\122 +\375\126\264\053\332\242\355\165\302\156\253\316\122\220\113\366 +\336\360\111\217\232\110\324\210\031\155\105\346\314\214\271\335 +\144\140\140\002\100\370\271\317\274\130\353\075\205\271\306\012 +\323\234\007\146\217\307\030\071\043\106\341\074\036\243\057\120 +\141\222\013\075\053\154\361\243\107\070\127\221\253\015\217\306 +\235\115\004\322\046\122\134\345\245\375\052\055\026\052\001\151 +\347\251\175\341\066\267\261\052\305\331\261\215\275\271\213\316 +\314\213\241\076\013\110\315\120\225\064\304\330\010\131\330\153 +\046\364\276\365\324\042\027\000\127\311\256\233\004\060\063\237 +\013\373\337\126\242\311\156\124\166\332\261\227\142\047\131\017 +\021\212\042\033\144\226\077\250\361\267\044\112\215\074\123\174 +\155\203\166\075\262\046\110\163\365\104\026\001\055\011\052\216 +\026\226\120\320\163\006\135\273\042\110\202\114\012\106\132\077 +\200\377\134\362\362\232\254\054\010\340\326\352\360\022\070\201 +\117\246\020\355\106\253\314\026\234\013\317\144\246\231\002\205 +\104\147\106\255\375\115\347\002\003\001\000\001\243\102\060\100 +\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001\206 +\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001 +\377\060\035\006\003\125\035\016\004\026\004\024\240\223\025\050 +\156\356\217\010\262\065\306\236\142\171\164\247\261\016\053\173 +\060\015\006\011\052\206\110\206\367\015\001\001\014\005\000\003 +\202\002\001\000\105\012\370\321\134\254\142\201\320\004\327\266 +\377\127\121\211\013\014\313\336\044\145\067\373\253\236\355\146 +\364\352\014\031\151\211\270\031\261\060\126\264\331\366\367\276 +\306\256\227\313\105\366\021\214\072\060\144\114\301\237\131\300 +\106\102\010\006\107\144\027\170\340\225\007\006\326\214\242\254 +\251\331\077\323\173\126\117\374\304\207\050\337\266\053\026\043 +\300\237\037\133\343\326\104\136\042\117\043\004\214\065\026\265 +\171\007\206\134\057\227\342\366\010\144\246\334\333\250\212\343 +\244\173\167\015\321\051\223\050\040\264\123\243\113\116\137\336 +\301\366\165\043\374\037\074\170\117\160\061\170\057\242\065\124 +\161\004\254\310\304\155\303\366\221\261\376\315\356\104\156\201 +\366\100\305\076\052\001\277\253\114\261\003\077\015\021\344\017 +\322\044\343\042\210\233\237\137\107\075\121\111\340\011\067\176 +\027\041\061\166\267\147\161\110\050\113\045\327\020\350\237\141 +\131\026\305\076\062\116\037\014\316\243\314\017\344\307\021\007 +\042\057\070\010\335\133\227\353\102\154\131\232\232\356\172\320 +\235\337\305\333\011\103\056\012\252\031\075\153\350\152\060\172 +\127\346\277\263\152\071\251\217\343\361\117\145\150\266\275\237 +\050\217\241\026\132\011\120\072\062\056\035\057\104\021\102\246 +\000\346\061\230\377\055\241\017\346\244\140\126\317\171\327\262 +\116\327\260\372\156\014\127\043\307\316\037\245\261\114\155\031 +\111\236\016\177\160\217\161\077\130\050\237\165\335\141\340\072 +\267\071\266\356\227\324\065\121\373\213\111\140\310\074\146\256 +\227\356\215\046\131\127\273\170\360\172\120\060\011\260\140\252 +\237\116\334\311\076\036\072\334\142\223\063\260\072\124\164\157 +\054\061\105\321\153\021\062\152\150\166\366\075\366\152\023\136 +\044\230\347\352\035\232\317\170\202\007\140\367\115\020\323\201 +\232\105\215\236\257\233\334\200\307\103\262\225\150\244\303\016 +\350\012\107\025\277\124\063\334\001\347\325\246\036\163\330\172 +\262\277\057\255\343\125\060\236\337\016\101\274\340\021\365\241 +\014\250\042\341\343\000\243\116\160\174\222\343\004\321\172\102 +\212\165\220\131\343\233\321\114\242\144\275\163\171\233\157\362 +\263\301\366\074 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "GlobalSign Secure Mail Root R45" +# Issuer: CN=GlobalSign Secure Mail Root R45,O=GlobalSign nv-sa,C=BE +# Serial Number:76:53:fe:a8:4c:50:ab:9f:8d:32:b5:1d:03:8f:57:dc +# Subject: CN=GlobalSign Secure Mail Root R45,O=GlobalSign nv-sa,C=BE +# Not Valid Before: Wed Mar 18 00:00:00 2020 +# Not Valid After : Sat Mar 18 00:00:00 2045 +# Fingerprint (SHA-256): 31:9A:F0:A7:72:9E:6F:89:26:9C:13:1E:A6:A3:A1:6F:CD:86:38:9F:DC:AB:3C:47:A4:A6:75:C1:61:A3:F9:74 +# Fingerprint (SHA1): 76:18:D1:F3:80:24:3D:52:40:C6:11:6A:AD:57:77:09:7D:81:30:A0 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GlobalSign Secure Mail Root R45" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\166\030\321\363\200\044\075\122\100\306\021\152\255\127\167\011 +\175\201\060\240 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\223\304\173\263\016\124\107\034\103\054\213\276\160\205\142\051 +END +CKA_ISSUER MULTILINE_OCTAL +\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 +\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 +\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 +\040\122\064\065 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\166\123\376\250\114\120\253\237\215\062\265\035\003\217 +\127\334 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "GlobalSign Secure Mail Root E45" +# +# Issuer: CN=GlobalSign Secure Mail Root E45,O=GlobalSign nv-sa,C=BE +# Serial Number:76:53:fe:aa:27:1d:95:46:5d:d6:f1:9e:e5:b8:90:0a +# Subject: CN=GlobalSign Secure Mail Root E45,O=GlobalSign nv-sa,C=BE +# Not Valid Before: Wed Mar 18 00:00:00 2020 +# Not Valid After : Sat Mar 18 00:00:00 2045 +# Fingerprint (SHA-256): 5C:BF:6F:B8:1F:D4:17:EA:41:28:CD:6F:81:72:A3:C9:40:20:94:F7:4A:B2:ED:3A:06:B4:40:5D:04:F3:0B:19 +# Fingerprint (SHA1): 18:2E:1F:32:4F:89:DF:BE:FE:88:89:F0:93:C2:C4:A0:2B:67:75:21 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GlobalSign Secure Mail Root E45" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 +\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 +\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 +\040\105\064\065 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 +\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 +\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 +\040\105\064\065 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\166\123\376\252\047\035\225\106\135\326\361\236\345\270 +\220\012 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\041\060\202\001\247\240\003\002\001\002\002\020\166 +\123\376\252\047\035\225\106\135\326\361\236\345\270\220\012\060 +\012\006\010\052\206\110\316\075\004\003\003\060\122\061\013\060 +\011\006\003\125\004\006\023\002\102\105\061\031\060\027\006\003 +\125\004\012\023\020\107\154\157\142\141\154\123\151\147\156\040 +\156\166\055\163\141\061\050\060\046\006\003\125\004\003\023\037 +\107\154\157\142\141\154\123\151\147\156\040\123\145\143\165\162 +\145\040\115\141\151\154\040\122\157\157\164\040\105\064\065\060 +\036\027\015\062\060\060\063\061\070\060\060\060\060\060\060\132 +\027\015\064\065\060\063\061\070\060\060\060\060\060\060\132\060 +\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061\031 +\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154\123 +\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003\125 +\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040\123 +\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164\040 +\105\064\065\060\166\060\020\006\007\052\206\110\316\075\002\001 +\006\005\053\201\004\000\042\003\142\000\004\371\171\213\201\107 +\067\211\226\077\105\111\120\177\032\046\013\223\062\176\056\300 +\300\247\010\232\303\156\217\233\076\013\042\354\067\123\267\157 +\212\260\274\047\067\113\155\251\106\073\331\037\377\245\241\104 +\273\055\163\277\236\101\007\134\123\233\121\010\072\132\273\157 +\070\307\026\221\170\302\112\023\151\035\202\337\132\057\000\210 +\226\242\056\034\164\371\235\176\146\067\212\243\102\060\100\060 +\016\006\003\125\035\017\001\001\377\004\004\003\002\001\206\060 +\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 +\060\035\006\003\125\035\016\004\026\004\024\337\023\136\213\137 +\302\100\002\375\126\267\224\114\266\036\325\246\261\024\226\060 +\012\006\010\052\206\110\316\075\004\003\003\003\150\000\060\145 +\002\060\023\260\276\327\161\040\076\344\253\234\316\066\022\175 +\137\114\037\052\265\151\105\063\137\323\055\132\262\344\210\307 +\336\012\066\102\062\171\235\246\153\272\341\371\104\052\173\212 +\303\022\002\061\000\240\146\034\116\207\235\207\311\355\231\114 +\033\012\356\055\140\303\067\307\035\315\265\162\260\331\306\357 +\274\362\377\077\360\122\335\010\347\252\144\171\303\344\151\127 +\221\057\244\313\174 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "GlobalSign Secure Mail Root E45" +# Issuer: CN=GlobalSign Secure Mail Root E45,O=GlobalSign nv-sa,C=BE +# Serial Number:76:53:fe:aa:27:1d:95:46:5d:d6:f1:9e:e5:b8:90:0a +# Subject: CN=GlobalSign Secure Mail Root E45,O=GlobalSign nv-sa,C=BE +# Not Valid Before: Wed Mar 18 00:00:00 2020 +# Not Valid After : Sat Mar 18 00:00:00 2045 +# Fingerprint (SHA-256): 5C:BF:6F:B8:1F:D4:17:EA:41:28:CD:6F:81:72:A3:C9:40:20:94:F7:4A:B2:ED:3A:06:B4:40:5D:04:F3:0B:19 +# Fingerprint (SHA1): 18:2E:1F:32:4F:89:DF:BE:FE:88:89:F0:93:C2:C4:A0:2B:67:75:21 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GlobalSign Secure Mail Root E45" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\030\056\037\062\117\211\337\276\376\210\211\360\223\302\304\240 +\053\147\165\041 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\305\374\306\056\237\364\122\055\052\250\244\272\373\147\062\377 +END +CKA_ISSUER MULTILINE_OCTAL +\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 +\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 +\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 +\040\105\064\065 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\166\123\376\252\047\035\225\106\135\326\361\236\345\270 +\220\012 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "GlobalSign Root R46" +# +# Issuer: CN=GlobalSign Root R46,O=GlobalSign nv-sa,C=BE +# Serial Number:11:d2:bb:b9:d7:23:18:9e:40:5f:0a:9d:2d:d0:df:25:67:d1 +# Subject: CN=GlobalSign Root R46,O=GlobalSign nv-sa,C=BE +# Not Valid Before: Wed Mar 20 00:00:00 2019 +# Not Valid After : Tue Mar 20 00:00:00 2046 +# Fingerprint (SHA-256): 4F:A3:12:6D:8D:3A:11:D1:C4:85:5A:4F:80:7C:BA:D6:CF:91:9D:3A:5A:88:B0:3B:EA:2C:63:72:D9:3C:40:C9 +# Fingerprint (SHA1): 53:A2:B0:4B:CA:6B:D6:45:E6:39:8A:8E:C4:0D:D2:BF:77:C3:A2:90 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GlobalSign Root R46" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 +\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 +\122\157\157\164\040\122\064\066 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 +\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 +\122\157\157\164\040\122\064\066 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\022\021\322\273\271\327\043\030\236\100\137\012\235\055\320 +\337\045\147\321 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\132\060\202\003\102\240\003\002\001\002\002\022\021 +\322\273\271\327\043\030\236\100\137\012\235\055\320\337\045\147 +\321\060\015\006\011\052\206\110\206\367\015\001\001\014\005\000 +\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 +\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 +\122\157\157\164\040\122\064\066\060\036\027\015\061\071\060\063 +\062\060\060\060\060\060\060\060\132\027\015\064\066\060\063\062 +\060\060\060\060\060\060\060\132\060\106\061\013\060\011\006\003 +\125\004\006\023\002\102\105\061\031\060\027\006\003\125\004\012 +\023\020\107\154\157\142\141\154\123\151\147\156\040\156\166\055 +\163\141\061\034\060\032\006\003\125\004\003\023\023\107\154\157 +\142\141\154\123\151\147\156\040\122\157\157\164\040\122\064\066 +\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 +\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 +\000\254\254\164\062\350\263\145\345\272\355\103\046\035\246\211 +\015\105\272\051\210\262\244\035\143\335\323\301\054\011\127\211 +\071\241\125\351\147\064\167\014\156\344\125\035\122\045\322\023 +\153\136\341\035\251\267\175\211\062\137\015\236\237\054\172\143 +\140\100\037\246\260\266\170\217\231\124\226\010\130\256\344\006 +\274\142\005\002\026\277\257\250\043\003\266\224\017\274\156\154 +\302\313\325\246\273\014\351\366\301\002\373\041\336\146\335\027 +\253\164\102\357\360\164\057\045\364\352\153\125\133\220\333\235 +\337\136\207\012\100\373\255\031\153\373\367\312\140\210\336\332 +\301\217\326\256\325\177\324\074\203\356\327\026\114\203\105\063 +\153\047\320\206\320\034\055\153\363\253\175\361\205\251\365\050 +\322\255\357\363\204\113\034\207\374\023\243\072\162\242\132\021 +\053\326\047\161\047\355\201\055\155\146\201\222\207\264\033\130 +\172\314\077\012\372\106\117\115\170\134\370\053\110\343\004\204 +\313\135\366\264\152\263\145\374\102\236\121\046\043\040\313\075 +\024\371\201\355\145\026\000\117\032\144\227\146\010\317\214\173 +\343\053\300\235\371\024\362\033\361\126\152\026\277\054\205\205 +\315\170\070\232\353\102\152\002\064\030\203\027\116\224\126\370 +\266\202\265\363\226\335\075\363\276\177\040\167\076\173\031\043 +\153\054\324\162\163\103\127\175\340\370\327\151\117\027\066\004 +\371\300\220\140\067\105\336\346\014\330\164\215\256\234\242\155 +\164\135\102\276\006\365\331\144\156\002\020\254\211\260\114\073 +\007\115\100\176\044\305\212\230\202\171\216\244\247\202\040\215 +\043\372\047\161\311\337\306\101\164\240\115\366\221\026\334\106 +\214\137\051\143\061\131\161\014\330\157\302\266\062\175\373\346 +\135\123\246\176\025\374\273\165\174\135\354\370\366\027\034\354 +\307\153\031\313\363\173\360\053\007\245\331\154\171\124\166\154 +\235\034\246\156\016\351\171\014\250\043\152\243\337\033\060\061 +\237\261\124\173\376\152\313\146\252\334\145\320\242\236\112\232 +\007\041\153\201\217\333\304\131\372\336\042\300\004\234\343\252 +\133\066\223\350\075\275\172\241\235\013\166\261\013\307\235\375 +\317\230\250\006\302\370\052\243\241\203\240\267\045\162\245\002 +\343\002\003\001\000\001\243\102\060\100\060\016\006\003\125\035 +\017\001\001\377\004\004\003\002\001\206\060\017\006\003\125\035 +\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125 +\035\016\004\026\004\024\003\134\253\163\201\207\250\314\260\246 +\325\224\342\066\226\111\377\005\231\054\060\015\006\011\052\206 +\110\206\367\015\001\001\014\005\000\003\202\002\001\000\174\170 +\354\366\002\054\273\133\176\222\053\135\071\334\276\330\035\242 +\102\063\115\371\357\244\052\073\104\151\036\254\331\105\243\116 +\074\247\330\044\121\262\124\034\223\116\304\357\173\223\205\140 +\046\352\011\110\340\365\273\307\351\150\322\273\152\061\161\314 +\171\256\021\250\360\231\375\345\037\274\057\250\314\127\353\166 +\304\041\246\107\123\125\115\150\277\005\244\356\327\046\253\142 +\332\103\067\113\342\306\265\345\262\203\031\072\307\323\333\115 +\236\010\172\363\356\317\076\142\373\254\350\140\314\321\307\241 +\134\203\105\304\105\314\363\027\153\024\311\004\002\076\322\044 +\246\171\351\036\316\242\347\301\131\025\237\035\342\113\232\076 +\237\166\010\055\153\330\272\127\024\332\203\352\376\214\125\351 +\320\116\251\314\167\061\261\104\021\172\134\261\076\323\024\105 +\025\030\142\044\023\322\313\115\316\134\203\301\066\362\020\265 +\016\210\155\270\341\126\237\211\336\226\146\071\107\144\054\156 +\115\256\142\173\277\140\164\031\270\126\254\222\254\026\062\355 +\255\150\125\376\230\272\323\064\336\364\311\141\303\016\206\366 +\113\204\140\356\015\173\265\062\130\171\221\125\054\201\103\263 +\164\037\172\252\045\236\035\327\241\213\271\315\102\056\004\244 +\146\203\115\211\065\266\154\250\066\112\171\041\170\042\320\102 +\274\321\100\061\220\241\276\004\317\312\147\355\365\360\200\323 +\140\311\203\052\042\005\320\007\073\122\277\014\236\252\053\371 +\273\346\037\217\045\272\205\215\027\036\002\376\135\120\004\127 +\317\376\055\274\357\134\300\032\253\266\237\044\306\337\163\150 +\110\220\054\024\364\077\122\032\344\322\313\024\303\141\151\317 +\342\371\030\305\272\063\237\024\243\004\135\271\161\367\265\224 +\330\366\063\301\132\301\064\213\174\233\335\223\072\347\023\242 +\160\141\237\257\217\353\330\305\165\370\063\146\324\164\147\072 +\067\167\234\347\335\244\017\166\103\146\212\103\362\237\373\014 +\102\170\143\321\342\017\157\173\324\241\075\164\227\205\267\110 +\071\101\326\040\374\320\072\263\372\350\157\304\212\272\161\067 +\276\213\227\261\170\061\117\263\347\266\003\023\316\124\235\256 +\045\131\314\177\065\137\010\367\100\105\061\170\052\172 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "GlobalSign Root R46" +# Issuer: CN=GlobalSign Root R46,O=GlobalSign nv-sa,C=BE +# Serial Number:11:d2:bb:b9:d7:23:18:9e:40:5f:0a:9d:2d:d0:df:25:67:d1 +# Subject: CN=GlobalSign Root R46,O=GlobalSign nv-sa,C=BE +# Not Valid Before: Wed Mar 20 00:00:00 2019 +# Not Valid After : Tue Mar 20 00:00:00 2046 +# Fingerprint (SHA-256): 4F:A3:12:6D:8D:3A:11:D1:C4:85:5A:4F:80:7C:BA:D6:CF:91:9D:3A:5A:88:B0:3B:EA:2C:63:72:D9:3C:40:C9 +# Fingerprint (SHA1): 53:A2:B0:4B:CA:6B:D6:45:E6:39:8A:8E:C4:0D:D2:BF:77:C3:A2:90 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GlobalSign Root R46" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\123\242\260\113\312\153\326\105\346\071\212\216\304\015\322\277 +\167\303\242\220 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\304\024\060\344\372\146\103\224\052\152\033\044\137\031\320\357 +END +CKA_ISSUER MULTILINE_OCTAL +\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 +\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 +\122\157\157\164\040\122\064\066 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\022\021\322\273\271\327\043\030\236\100\137\012\235\055\320 +\337\045\147\321 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "GlobalSign Root E46" +# +# Issuer: CN=GlobalSign Root E46,O=GlobalSign nv-sa,C=BE +# Serial Number:11:d2:bb:ba:33:6e:d4:bc:e6:24:68:c5:0d:84:1d:98:e8:43 +# Subject: CN=GlobalSign Root E46,O=GlobalSign nv-sa,C=BE +# Not Valid Before: Wed Mar 20 00:00:00 2019 +# Not Valid After : Tue Mar 20 00:00:00 2046 +# Fingerprint (SHA-256): CB:B9:C4:4D:84:B8:04:3E:10:50:EA:31:A6:9F:51:49:55:D7:BF:D2:E2:C6:B4:93:01:01:9A:D6:1D:9F:50:58 +# Fingerprint (SHA1): 39:B4:6C:D5:FE:80:06:EB:E2:2F:4A:BB:08:33:A0:AF:DB:B9:DD:84 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GlobalSign Root E46" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 +\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 +\122\157\157\164\040\105\064\066 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 +\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 +\122\157\157\164\040\105\064\066 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\022\021\322\273\272\063\156\324\274\346\044\150\305\015\204 +\035\230\350\103 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\013\060\202\001\221\240\003\002\001\002\002\022\021 +\322\273\272\063\156\324\274\346\044\150\305\015\204\035\230\350 +\103\060\012\006\010\052\206\110\316\075\004\003\003\060\106\061 +\013\060\011\006\003\125\004\006\023\002\102\105\061\031\060\027 +\006\003\125\004\012\023\020\107\154\157\142\141\154\123\151\147 +\156\040\156\166\055\163\141\061\034\060\032\006\003\125\004\003 +\023\023\107\154\157\142\141\154\123\151\147\156\040\122\157\157 +\164\040\105\064\066\060\036\027\015\061\071\060\063\062\060\060 +\060\060\060\060\060\132\027\015\064\066\060\063\062\060\060\060 +\060\060\060\060\132\060\106\061\013\060\011\006\003\125\004\006 +\023\002\102\105\061\031\060\027\006\003\125\004\012\023\020\107 +\154\157\142\141\154\123\151\147\156\040\156\166\055\163\141\061 +\034\060\032\006\003\125\004\003\023\023\107\154\157\142\141\154 +\123\151\147\156\040\122\157\157\164\040\105\064\066\060\166\060 +\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000 +\042\003\142\000\004\234\016\261\317\267\350\236\122\167\165\064 +\372\245\106\247\255\062\031\062\264\007\251\047\312\224\273\014 +\322\012\020\307\332\211\260\227\014\160\023\011\001\216\330\352 +\107\352\276\262\200\053\315\374\050\015\333\254\274\244\206\067 +\355\160\010\000\165\352\223\013\173\056\122\234\043\150\043\006 +\103\354\222\057\123\204\333\373\107\024\007\350\137\224\147\135 +\311\172\201\074\040\243\102\060\100\060\016\006\003\125\035\017 +\001\001\377\004\004\003\002\001\206\060\017\006\003\125\035\023 +\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035 +\016\004\026\004\024\061\012\220\217\266\306\235\322\104\113\200 +\265\242\346\037\261\022\117\033\225\060\012\006\010\052\206\110 +\316\075\004\003\003\003\150\000\060\145\002\061\000\337\124\220 +\355\233\357\213\224\002\223\027\202\231\276\263\236\054\366\013 +\221\214\237\112\024\261\366\144\274\273\150\121\023\014\003\367 +\025\213\204\140\271\213\377\122\216\347\214\274\034\002\060\074 +\371\021\324\214\116\300\301\141\302\025\114\252\253\035\013\061 +\137\073\034\342\000\227\104\061\346\376\163\226\057\332\226\323 +\376\010\007\263\064\211\274\005\237\367\036\206\356\213\160 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "GlobalSign Root E46" +# Issuer: CN=GlobalSign Root E46,O=GlobalSign nv-sa,C=BE +# Serial Number:11:d2:bb:ba:33:6e:d4:bc:e6:24:68:c5:0d:84:1d:98:e8:43 +# Subject: CN=GlobalSign Root E46,O=GlobalSign nv-sa,C=BE +# Not Valid Before: Wed Mar 20 00:00:00 2019 +# Not Valid After : Tue Mar 20 00:00:00 2046 +# Fingerprint (SHA-256): CB:B9:C4:4D:84:B8:04:3E:10:50:EA:31:A6:9F:51:49:55:D7:BF:D2:E2:C6:B4:93:01:01:9A:D6:1D:9F:50:58 +# Fingerprint (SHA1): 39:B4:6C:D5:FE:80:06:EB:E2:2F:4A:BB:08:33:A0:AF:DB:B9:DD:84 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GlobalSign Root E46" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\071\264\154\325\376\200\006\353\342\057\112\273\010\063\240\257 +\333\271\335\204 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\265\270\146\355\336\010\203\343\311\342\001\064\006\254\121\157 +END +CKA_ISSUER MULTILINE_OCTAL +\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 +\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 +\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 +\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 +\122\157\157\164\040\105\064\066 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\022\021\322\273\272\063\156\324\274\346\044\150\305\015\204 +\035\230\350\103 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "GLOBALTRUST 2020" +# +# Issuer: CN=GLOBALTRUST 2020,O=e-commerce monitoring GmbH,C=AT +# Serial Number:5a:4b:bd:5a:fb:4f:8a:5b:fa:65:e5 +# Subject: CN=GLOBALTRUST 2020,O=e-commerce monitoring GmbH,C=AT +# Not Valid Before: Mon Feb 10 00:00:00 2020 +# Not Valid After : Sun Jun 10 00:00:00 2040 +# Fingerprint (SHA-256): 9A:29:6A:51:82:D1:D4:51:A2:E3:7F:43:9B:74:DA:AF:A2:67:52:33:29:F9:0F:9A:0D:20:07:C3:34:E2:3C:9A +# Fingerprint (SHA1): D0:67:C1:13:51:01:0C:AA:D0:C7:6A:65:37:31:16:26:4F:53:71:A2 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GLOBALTRUST 2020" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\115\061\013\060\011\006\003\125\004\006\023\002\101\124\061 +\043\060\041\006\003\125\004\012\023\032\145\055\143\157\155\155 +\145\162\143\145\040\155\157\156\151\164\157\162\151\156\147\040 +\107\155\142\110\061\031\060\027\006\003\125\004\003\023\020\107 +\114\117\102\101\114\124\122\125\123\124\040\062\060\062\060 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\115\061\013\060\011\006\003\125\004\006\023\002\101\124\061 +\043\060\041\006\003\125\004\012\023\032\145\055\143\157\155\155 +\145\162\143\145\040\155\157\156\151\164\157\162\151\156\147\040 +\107\155\142\110\061\031\060\027\006\003\125\004\003\023\020\107 +\114\117\102\101\114\124\122\125\123\124\040\062\060\062\060 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\013\132\113\275\132\373\117\212\133\372\145\345 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\202\060\202\003\152\240\003\002\001\002\002\013\132 +\113\275\132\373\117\212\133\372\145\345\060\015\006\011\052\206 +\110\206\367\015\001\001\013\005\000\060\115\061\013\060\011\006 +\003\125\004\006\023\002\101\124\061\043\060\041\006\003\125\004 +\012\023\032\145\055\143\157\155\155\145\162\143\145\040\155\157 +\156\151\164\157\162\151\156\147\040\107\155\142\110\061\031\060 +\027\006\003\125\004\003\023\020\107\114\117\102\101\114\124\122 +\125\123\124\040\062\060\062\060\060\036\027\015\062\060\060\062 +\061\060\060\060\060\060\060\060\132\027\015\064\060\060\066\061 +\060\060\060\060\060\060\060\132\060\115\061\013\060\011\006\003 +\125\004\006\023\002\101\124\061\043\060\041\006\003\125\004\012 +\023\032\145\055\143\157\155\155\145\162\143\145\040\155\157\156 +\151\164\157\162\151\156\147\040\107\155\142\110\061\031\060\027 +\006\003\125\004\003\023\020\107\114\117\102\101\114\124\122\125 +\123\124\040\062\060\062\060\060\202\002\042\060\015\006\011\052 +\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060 +\202\002\012\002\202\002\001\000\256\056\126\255\033\034\357\366 +\225\217\240\167\033\053\323\143\217\204\115\105\242\017\237\133 +\105\253\131\173\121\064\371\354\213\212\170\305\335\153\257\275 +\304\337\223\105\036\277\221\070\013\256\016\026\347\101\163\370 +\333\273\321\270\121\340\313\203\073\163\070\156\167\212\017\131 +\143\046\315\247\052\316\124\373\270\342\300\174\107\316\140\174 +\077\262\163\362\300\031\266\212\222\207\065\015\220\050\242\344 +\025\004\143\076\272\257\356\174\136\314\246\213\120\262\070\367 +\101\143\312\316\377\151\217\150\016\225\066\345\314\271\214\011 +\312\113\335\061\220\226\310\314\037\375\126\226\064\333\216\034 +\352\054\276\205\056\143\335\252\251\225\323\375\051\225\023\360 +\310\230\223\331\055\026\107\220\021\203\242\072\042\242\050\127 +\242\353\376\300\214\050\240\246\175\347\052\102\073\202\200\143 +\245\143\037\031\314\174\262\146\250\302\323\155\067\157\342\176 +\006\121\331\105\204\037\022\316\044\122\144\205\013\110\200\116 +\207\261\042\042\060\252\353\256\276\340\002\340\100\350\260\102 +\200\003\121\252\264\176\252\104\327\103\141\363\242\153\026\211 +\111\244\243\244\053\212\002\304\170\364\150\212\301\344\172\066 +\261\157\033\226\033\167\111\215\324\311\006\162\217\317\123\343 +\334\027\205\040\112\334\230\047\323\221\046\053\107\036\151\007 +\257\336\242\344\344\324\153\013\263\136\174\324\044\200\107\051 +\151\073\156\350\254\375\100\353\330\355\161\161\053\362\350\130 +\035\353\101\227\042\305\037\324\071\320\047\217\207\343\030\364 +\340\251\106\015\365\164\072\202\056\320\156\054\221\243\061\134 +\073\106\352\173\004\020\126\136\200\035\365\245\145\350\202\374 +\342\007\214\142\105\365\040\336\106\160\206\241\274\223\323\036 +\164\246\154\260\054\367\003\014\210\014\313\324\162\123\206\274 +\140\106\363\230\152\302\361\277\103\371\160\040\167\312\067\101 +\171\125\122\143\215\133\022\237\305\150\304\210\235\254\362\060 +\253\267\243\061\227\147\255\217\027\017\154\307\163\355\044\224 +\153\310\203\232\320\232\067\111\004\253\261\026\310\154\111\111 +\055\253\241\320\214\222\362\101\112\171\041\045\333\143\327\266 +\234\247\176\102\151\373\072\143\002\003\001\000\001\243\143\060 +\141\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001 +\001\377\060\016\006\003\125\035\017\001\001\377\004\004\003\002 +\001\006\060\035\006\003\125\035\016\004\026\004\024\334\056\037 +\321\141\067\171\344\253\325\325\263\022\161\150\075\152\150\234 +\042\060\037\006\003\125\035\043\004\030\060\026\200\024\334\056 +\037\321\141\067\171\344\253\325\325\263\022\161\150\075\152\150 +\234\042\060\015\006\011\052\206\110\206\367\015\001\001\013\005 +\000\003\202\002\001\000\221\360\102\002\150\100\356\303\150\300 +\124\057\337\354\142\303\303\236\212\240\061\050\252\203\216\244 +\126\226\022\020\206\126\272\227\162\322\124\060\174\255\031\325 +\035\150\157\373\024\102\330\215\016\363\265\321\245\343\002\102 +\136\334\350\106\130\007\065\002\060\340\274\164\112\301\103\052 +\377\333\032\320\260\257\154\303\375\313\263\365\177\155\003\056 +\131\126\235\055\055\065\214\262\326\103\027\054\222\012\313\135 +\350\214\017\113\160\103\320\202\377\250\314\277\244\224\300\276 +\207\275\212\343\223\173\306\217\233\026\235\047\145\274\172\305 +\102\202\154\134\007\320\251\301\210\140\104\351\230\205\026\137 +\370\217\312\001\020\316\045\303\371\140\033\240\305\227\303\323 +\054\210\061\242\275\060\354\320\320\300\022\361\301\071\343\345 +\365\370\326\112\335\064\315\373\157\301\117\343\000\213\126\342 +\222\367\050\262\102\167\162\043\147\307\077\021\025\262\304\003 +\005\276\273\021\173\012\277\250\156\347\377\130\103\317\233\147 +\240\200\007\266\035\312\255\155\352\101\021\176\055\164\223\373 +\302\274\276\121\104\305\357\150\045\047\200\343\310\240\324\022 +\354\331\245\067\035\067\174\264\221\312\332\324\261\226\201\357 +\150\134\166\020\111\257\176\245\067\200\261\034\122\275\063\201 +\114\217\371\335\145\331\024\315\212\045\130\364\342\305\203\245 +\011\220\324\154\024\143\265\100\337\353\300\374\304\130\176\015 +\024\026\207\124\047\156\126\344\160\204\270\154\062\022\176\202 +\061\103\276\327\335\174\241\255\256\326\253\040\022\357\012\303 +\020\214\111\226\065\334\013\165\136\261\117\325\117\064\016\021 +\040\007\165\103\105\351\243\021\332\254\243\231\302\266\171\047 +\342\271\357\310\342\366\065\051\172\164\372\305\177\202\005\142 +\246\012\352\150\262\171\107\006\156\362\127\250\025\063\306\367 +\170\112\075\102\173\153\176\376\367\106\352\321\353\216\357\210 +\150\133\350\301\331\161\176\375\144\357\377\147\107\210\130\045 +\057\076\206\007\275\373\250\345\202\250\254\245\323\151\103\315 +\061\210\111\204\123\222\300\261\071\033\071\203\001\060\304\362 +\251\372\320\003\275\162\067\140\126\037\066\174\275\071\221\365 +\155\015\277\173\327\222 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "GLOBALTRUST 2020" +# Issuer: CN=GLOBALTRUST 2020,O=e-commerce monitoring GmbH,C=AT +# Serial Number:5a:4b:bd:5a:fb:4f:8a:5b:fa:65:e5 +# Subject: CN=GLOBALTRUST 2020,O=e-commerce monitoring GmbH,C=AT +# Not Valid Before: Mon Feb 10 00:00:00 2020 +# Not Valid After : Sun Jun 10 00:00:00 2040 +# Fingerprint (SHA-256): 9A:29:6A:51:82:D1:D4:51:A2:E3:7F:43:9B:74:DA:AF:A2:67:52:33:29:F9:0F:9A:0D:20:07:C3:34:E2:3C:9A +# Fingerprint (SHA1): D0:67:C1:13:51:01:0C:AA:D0:C7:6A:65:37:31:16:26:4F:53:71:A2 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GLOBALTRUST 2020" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\320\147\301\023\121\001\014\252\320\307\152\145\067\061\026\046 +\117\123\161\242 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\212\307\157\313\155\343\314\242\361\174\203\372\016\170\327\350 +END +CKA_ISSUER MULTILINE_OCTAL +\060\115\061\013\060\011\006\003\125\004\006\023\002\101\124\061 +\043\060\041\006\003\125\004\012\023\032\145\055\143\157\155\155 +\145\162\143\145\040\155\157\156\151\164\157\162\151\156\147\040 +\107\155\142\110\061\031\060\027\006\003\125\004\003\023\020\107 +\114\117\102\101\114\124\122\125\123\124\040\062\060\062\060 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\013\132\113\275\132\373\117\212\133\372\145\345 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "ANF Secure Server Root CA" +# +# Issuer: CN=ANF Secure Server Root CA,OU=ANF CA Raiz,O=ANF Autoridad de Certificacion,C=ES,serialNumber=G63287510 +# Serial Number:0d:d3:e3:bc:6c:f9:6b:b1 +# Subject: CN=ANF Secure Server Root CA,OU=ANF CA Raiz,O=ANF Autoridad de Certificacion,C=ES,serialNumber=G63287510 +# Not Valid Before: Wed Sep 04 10:00:38 2019 +# Not Valid After : Tue Aug 30 10:00:38 2039 +# Fingerprint (SHA-256): FB:8F:EC:75:91:69:B9:10:6B:1E:51:16:44:C6:18:C5:13:04:37:3F:6C:06:43:08:8D:8B:EF:FD:1B:99:75:99 +# Fingerprint (SHA1): 5B:6E:68:D0:CC:15:B6:A0:5F:1E:C1:5F:AE:02:FC:6B:2F:5D:6F:74 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "ANF Secure Server Root CA" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\201\204\061\022\060\020\006\003\125\004\005\023\011\107\066 +\063\062\070\067\065\061\060\061\013\060\011\006\003\125\004\006 +\023\002\105\123\061\047\060\045\006\003\125\004\012\023\036\101 +\116\106\040\101\165\164\157\162\151\144\141\144\040\144\145\040 +\103\145\162\164\151\146\151\143\141\143\151\157\156\061\024\060 +\022\006\003\125\004\013\023\013\101\116\106\040\103\101\040\122 +\141\151\172\061\042\060\040\006\003\125\004\003\023\031\101\116 +\106\040\123\145\143\165\162\145\040\123\145\162\166\145\162\040 +\122\157\157\164\040\103\101 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\201\204\061\022\060\020\006\003\125\004\005\023\011\107\066 +\063\062\070\067\065\061\060\061\013\060\011\006\003\125\004\006 +\023\002\105\123\061\047\060\045\006\003\125\004\012\023\036\101 +\116\106\040\101\165\164\157\162\151\144\141\144\040\144\145\040 +\103\145\162\164\151\146\151\143\141\143\151\157\156\061\024\060 +\022\006\003\125\004\013\023\013\101\116\106\040\103\101\040\122 +\141\151\172\061\042\060\040\006\003\125\004\003\023\031\101\116 +\106\040\123\145\143\165\162\145\040\123\145\162\166\145\162\040 +\122\157\157\164\040\103\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\015\323\343\274\154\371\153\261 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\357\060\202\003\327\240\003\002\001\002\002\010\015 +\323\343\274\154\371\153\261\060\015\006\011\052\206\110\206\367 +\015\001\001\013\005\000\060\201\204\061\022\060\020\006\003\125 +\004\005\023\011\107\066\063\062\070\067\065\061\060\061\013\060 +\011\006\003\125\004\006\023\002\105\123\061\047\060\045\006\003 +\125\004\012\023\036\101\116\106\040\101\165\164\157\162\151\144 +\141\144\040\144\145\040\103\145\162\164\151\146\151\143\141\143 +\151\157\156\061\024\060\022\006\003\125\004\013\023\013\101\116 +\106\040\103\101\040\122\141\151\172\061\042\060\040\006\003\125 +\004\003\023\031\101\116\106\040\123\145\143\165\162\145\040\123 +\145\162\166\145\162\040\122\157\157\164\040\103\101\060\036\027 +\015\061\071\060\071\060\064\061\060\060\060\063\070\132\027\015 +\063\071\060\070\063\060\061\060\060\060\063\070\132\060\201\204 +\061\022\060\020\006\003\125\004\005\023\011\107\066\063\062\070 +\067\065\061\060\061\013\060\011\006\003\125\004\006\023\002\105 +\123\061\047\060\045\006\003\125\004\012\023\036\101\116\106\040 +\101\165\164\157\162\151\144\141\144\040\144\145\040\103\145\162 +\164\151\146\151\143\141\143\151\157\156\061\024\060\022\006\003 +\125\004\013\023\013\101\116\106\040\103\101\040\122\141\151\172 +\061\042\060\040\006\003\125\004\003\023\031\101\116\106\040\123 +\145\143\165\162\145\040\123\145\162\166\145\162\040\122\157\157 +\164\040\103\101\060\202\002\042\060\015\006\011\052\206\110\206 +\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002\012 +\002\202\002\001\000\333\353\153\053\346\144\124\225\202\220\243 +\162\244\031\001\235\234\013\201\137\163\111\272\247\254\363\004 +\116\173\226\013\354\021\340\133\246\034\316\033\322\015\203\034 +\053\270\236\035\176\105\062\140\017\007\351\167\130\176\237\152 +\310\141\116\266\046\301\114\215\377\114\357\064\262\037\145\330 +\271\170\365\255\251\161\271\357\117\130\035\245\336\164\040\227 +\241\355\150\114\336\222\027\113\274\253\377\145\232\236\373\107 +\331\127\162\363\011\241\256\166\104\023\156\234\055\104\071\274 +\371\307\073\244\130\075\101\275\264\302\111\243\310\015\322\227 +\057\007\145\122\000\247\156\310\257\150\354\364\024\226\266\127 +\037\126\303\071\237\053\155\344\363\076\366\065\144\332\014\034 +\241\204\113\057\113\113\342\054\044\235\155\223\100\353\265\043 +\216\062\312\157\105\323\250\211\173\036\317\036\372\133\103\213 +\315\315\250\017\152\312\014\136\271\236\107\217\360\331\266\012 +\013\130\145\027\063\271\043\344\167\031\175\313\112\056\222\173 +\117\057\020\167\261\215\057\150\234\142\314\340\120\370\354\221 +\247\124\114\127\011\325\166\143\305\350\145\036\356\155\152\317 +\011\235\372\174\117\255\140\010\375\126\231\017\025\054\173\251 +\200\253\214\141\217\112\007\166\102\336\075\364\335\262\044\063 +\133\270\265\243\104\311\254\177\167\074\035\043\354\202\251\246 +\342\310\006\114\002\376\254\134\231\231\013\057\020\212\246\364 +\177\325\207\164\015\131\111\105\366\360\161\134\071\051\326\277 +\112\043\213\365\137\001\143\322\207\163\050\265\113\012\365\370 +\253\202\054\176\163\045\062\035\013\143\012\027\201\000\377\266 +\166\136\347\264\261\100\312\041\273\325\200\121\345\110\122\147 +\054\322\141\211\007\015\017\316\102\167\300\104\163\234\104\120 +\240\333\020\012\055\225\034\201\257\344\034\345\024\036\361\066 +\101\001\002\057\175\163\247\336\102\314\114\351\211\015\126\367 +\237\221\324\003\306\154\311\217\333\330\034\340\100\230\135\146 +\231\230\200\156\055\377\001\305\316\313\106\037\254\002\306\103 +\346\256\242\204\074\305\116\036\075\155\311\024\114\343\056\101 +\273\312\071\277\066\074\052\031\252\101\207\116\245\316\113\062 +\171\335\220\111\177\002\003\001\000\001\243\143\060\141\060\037 +\006\003\125\035\043\004\030\060\026\200\024\234\137\320\154\143 +\243\137\223\312\223\230\010\255\214\207\245\054\134\301\067\060 +\035\006\003\125\035\016\004\026\004\024\234\137\320\154\143\243 +\137\223\312\223\230\010\255\214\207\245\054\134\301\067\060\016 +\006\003\125\035\017\001\001\377\004\004\003\002\001\206\060\017 +\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 +\015\006\011\052\206\110\206\367\015\001\001\013\005\000\003\202 +\002\001\000\116\036\271\212\306\240\230\077\156\303\151\300\152 +\134\111\122\254\313\053\135\170\070\301\325\124\204\237\223\360 +\207\031\075\054\146\211\353\015\102\374\314\360\165\205\077\213 +\364\200\135\171\345\027\147\275\065\202\342\362\074\216\175\133 +\066\313\132\200\000\051\362\316\053\054\361\217\252\155\005\223 +\154\162\307\126\353\337\120\043\050\345\105\020\075\350\147\243 +\257\016\125\017\220\011\142\357\113\131\242\366\123\361\300\065 +\344\057\301\044\275\171\057\116\040\042\073\375\032\040\260\244 +\016\054\160\355\164\077\270\023\225\006\121\310\350\207\046\312 +\244\133\152\026\041\222\335\163\140\236\020\030\336\074\201\352 +\350\030\303\174\211\362\213\120\076\275\021\342\025\003\250\066 +\175\063\001\154\110\025\327\210\220\231\004\305\314\346\007\364 +\274\364\220\355\023\342\352\213\303\217\243\063\017\301\051\114 +\023\116\332\025\126\161\163\162\202\120\366\232\063\174\242\261 +\250\032\064\164\145\134\316\321\353\253\123\340\032\200\330\352 +\072\111\344\046\060\233\345\034\212\250\251\025\062\206\231\222 +\012\020\043\126\022\340\366\316\114\342\273\276\333\215\222\163 +\001\146\057\142\076\262\162\047\105\066\355\115\126\343\227\231 +\377\072\065\076\245\124\112\122\131\113\140\333\356\376\170\021 +\177\112\334\024\171\140\266\153\144\003\333\025\203\341\242\276 +\366\043\227\120\360\011\063\066\247\161\226\045\363\271\102\175 +\333\070\077\054\130\254\350\102\341\016\330\323\073\114\056\202 +\351\203\056\153\061\331\335\107\206\117\155\227\221\056\117\342 +\050\161\065\026\321\362\163\376\045\053\007\107\044\143\047\310 +\370\366\331\153\374\022\061\126\010\300\123\102\257\234\320\063 +\176\374\006\360\061\104\003\024\361\130\352\362\152\015\251\021 +\262\203\276\305\032\277\007\352\131\334\243\210\065\357\234\166 +\062\074\115\006\042\316\025\345\335\236\330\217\332\336\322\304 +\071\345\027\201\317\070\107\353\177\210\155\131\033\337\237\102 +\024\256\176\317\250\260\146\145\332\067\257\237\252\075\352\050 +\266\336\325\061\130\026\202\133\352\273\031\165\002\163\032\312 +\110\032\041\223\220\012\216\223\204\247\175\073\043\030\222\211 +\240\215\254 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "ANF Secure Server Root CA" +# Issuer: CN=ANF Secure Server Root CA,OU=ANF CA Raiz,O=ANF Autoridad de Certificacion,C=ES,serialNumber=G63287510 +# Serial Number:0d:d3:e3:bc:6c:f9:6b:b1 +# Subject: CN=ANF Secure Server Root CA,OU=ANF CA Raiz,O=ANF Autoridad de Certificacion,C=ES,serialNumber=G63287510 +# Not Valid Before: Wed Sep 04 10:00:38 2019 +# Not Valid After : Tue Aug 30 10:00:38 2039 +# Fingerprint (SHA-256): FB:8F:EC:75:91:69:B9:10:6B:1E:51:16:44:C6:18:C5:13:04:37:3F:6C:06:43:08:8D:8B:EF:FD:1B:99:75:99 +# Fingerprint (SHA1): 5B:6E:68:D0:CC:15:B6:A0:5F:1E:C1:5F:AE:02:FC:6B:2F:5D:6F:74 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "ANF Secure Server Root CA" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\133\156\150\320\314\025\266\240\137\036\301\137\256\002\374\153 +\057\135\157\164 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\046\246\104\132\331\257\116\057\262\035\266\145\260\116\350\226 +END +CKA_ISSUER MULTILINE_OCTAL +\060\201\204\061\022\060\020\006\003\125\004\005\023\011\107\066 +\063\062\070\067\065\061\060\061\013\060\011\006\003\125\004\006 +\023\002\105\123\061\047\060\045\006\003\125\004\012\023\036\101 +\116\106\040\101\165\164\157\162\151\144\141\144\040\144\145\040 +\103\145\162\164\151\146\151\143\141\143\151\157\156\061\024\060 +\022\006\003\125\004\013\023\013\101\116\106\040\103\101\040\122 +\141\151\172\061\042\060\040\006\003\125\004\003\023\031\101\116 +\106\040\123\145\143\165\162\145\040\123\145\162\166\145\162\040 +\122\157\157\164\040\103\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\015\323\343\274\154\371\153\261 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "Certum EC-384 CA" +# +# Issuer: CN=Certum EC-384 CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL +# Serial Number:78:8f:27:5c:81:12:52:20:a5:04:d0:2d:dd:ba:73:f4 +# Subject: CN=Certum EC-384 CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL +# Not Valid Before: Mon Mar 26 07:24:54 2018 +# Not Valid After : Thu Mar 26 07:24:54 2043 +# Fingerprint (SHA-256): 6B:32:80:85:62:53:18:AA:50:D1:73:C9:8D:8B:DA:09:D5:7E:27:41:3D:11:4C:F7:87:A0:F5:D0:6C:03:0C:F6 +# Fingerprint (SHA1): F3:3E:78:3C:AC:DF:F4:A2:CC:AC:67:55:69:56:D7:E5:16:3C:E1:ED +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Certum EC-384 CA" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\164\061\013\060\011\006\003\125\004\006\023\002\120\114\061 +\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 +\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 +\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 +\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171\061\031\060\027\006 +\003\125\004\003\023\020\103\145\162\164\165\155\040\105\103\055 +\063\070\064\040\103\101 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\164\061\013\060\011\006\003\125\004\006\023\002\120\114\061 +\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 +\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 +\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 +\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171\061\031\060\027\006 +\003\125\004\003\023\020\103\145\162\164\165\155\040\105\103\055 +\063\070\064\040\103\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\170\217\047\134\201\022\122\040\245\004\320\055\335\272 +\163\364 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\145\060\202\001\353\240\003\002\001\002\002\020\170 +\217\047\134\201\022\122\040\245\004\320\055\335\272\163\364\060 +\012\006\010\052\206\110\316\075\004\003\003\060\164\061\013\060 +\011\006\003\125\004\006\023\002\120\114\061\041\060\037\006\003 +\125\004\012\023\030\101\163\163\145\143\157\040\104\141\164\141 +\040\123\171\163\164\145\155\163\040\123\056\101\056\061\047\060 +\045\006\003\125\004\013\023\036\103\145\162\164\165\155\040\103 +\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164 +\150\157\162\151\164\171\061\031\060\027\006\003\125\004\003\023 +\020\103\145\162\164\165\155\040\105\103\055\063\070\064\040\103 +\101\060\036\027\015\061\070\060\063\062\066\060\067\062\064\065 +\064\132\027\015\064\063\060\063\062\066\060\067\062\064\065\064 +\132\060\164\061\013\060\011\006\003\125\004\006\023\002\120\114 +\061\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143 +\157\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123 +\056\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145 +\162\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151 +\157\156\040\101\165\164\150\157\162\151\164\171\061\031\060\027 +\006\003\125\004\003\023\020\103\145\162\164\165\155\040\105\103 +\055\063\070\064\040\103\101\060\166\060\020\006\007\052\206\110 +\316\075\002\001\006\005\053\201\004\000\042\003\142\000\004\304 +\050\216\253\030\133\152\276\156\144\067\143\344\315\354\253\072 +\367\314\241\270\016\202\111\327\206\051\237\241\224\362\343\140 +\170\230\201\170\006\115\362\354\232\016\127\140\203\237\264\346 +\027\057\032\263\135\002\133\211\043\074\302\021\005\052\247\210 +\023\030\363\120\204\327\275\064\054\047\211\125\377\316\114\347 +\337\246\037\050\304\360\124\303\271\174\267\123\255\353\302\243 +\102\060\100\060\017\006\003\125\035\023\001\001\377\004\005\060 +\003\001\001\377\060\035\006\003\125\035\016\004\026\004\024\215 +\006\146\164\044\166\072\363\211\367\274\326\275\107\175\057\274 +\020\137\113\060\016\006\003\125\035\017\001\001\377\004\004\003 +\002\001\006\060\012\006\010\052\206\110\316\075\004\003\003\003 +\150\000\060\145\002\060\003\125\055\246\346\030\304\174\357\311 +\120\156\301\047\017\234\207\257\156\325\033\010\030\275\222\051 +\301\357\224\221\170\322\072\034\125\211\142\345\033\011\036\272 +\144\153\361\166\264\324\002\061\000\264\102\204\231\377\253\347 +\236\373\221\227\047\135\334\260\133\060\161\316\136\070\032\152 +\331\045\347\352\367\141\222\126\370\352\332\066\302\207\145\226 +\056\162\045\057\177\337\303\023\311 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "Certum EC-384 CA" +# Issuer: CN=Certum EC-384 CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL +# Serial Number:78:8f:27:5c:81:12:52:20:a5:04:d0:2d:dd:ba:73:f4 +# Subject: CN=Certum EC-384 CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL +# Not Valid Before: Mon Mar 26 07:24:54 2018 +# Not Valid After : Thu Mar 26 07:24:54 2043 +# Fingerprint (SHA-256): 6B:32:80:85:62:53:18:AA:50:D1:73:C9:8D:8B:DA:09:D5:7E:27:41:3D:11:4C:F7:87:A0:F5:D0:6C:03:0C:F6 +# Fingerprint (SHA1): F3:3E:78:3C:AC:DF:F4:A2:CC:AC:67:55:69:56:D7:E5:16:3C:E1:ED +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Certum EC-384 CA" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\363\076\170\074\254\337\364\242\314\254\147\125\151\126\327\345 +\026\074\341\355 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\266\145\263\226\140\227\022\241\354\116\341\075\243\306\311\361 +END +CKA_ISSUER MULTILINE_OCTAL +\060\164\061\013\060\011\006\003\125\004\006\023\002\120\114\061 +\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 +\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 +\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 +\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171\061\031\060\027\006 +\003\125\004\003\023\020\103\145\162\164\165\155\040\105\103\055 +\063\070\064\040\103\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\170\217\047\134\201\022\122\040\245\004\320\055\335\272 +\163\364 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "Certum Trusted Root CA" +# +# Issuer: CN=Certum Trusted Root CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL +# Serial Number:1e:bf:59:50:b8:c9:80:37:4c:06:f7:eb:55:4f:b5:ed +# Subject: CN=Certum Trusted Root CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL +# Not Valid Before: Fri Mar 16 12:10:13 2018 +# Not Valid After : Mon Mar 16 12:10:13 2043 +# Fingerprint (SHA-256): FE:76:96:57:38:55:77:3E:37:A9:5E:7A:D4:D9:CC:96:C3:01:57:C1:5D:31:76:5B:A9:B1:57:04:E1:AE:78:FD +# Fingerprint (SHA1): C8:83:44:C0:18:AE:9F:CC:F1:87:B7:8F:22:D1:C5:D7:45:84:BA:E5 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Certum Trusted Root CA" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\172\061\013\060\011\006\003\125\004\006\023\002\120\114\061 +\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 +\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 +\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 +\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171\061\037\060\035\006 +\003\125\004\003\023\026\103\145\162\164\165\155\040\124\162\165 +\163\164\145\144\040\122\157\157\164\040\103\101 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\172\061\013\060\011\006\003\125\004\006\023\002\120\114\061 +\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 +\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 +\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 +\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171\061\037\060\035\006 +\003\125\004\003\023\026\103\145\162\164\165\155\040\124\162\165 +\163\164\145\144\040\122\157\157\164\040\103\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\036\277\131\120\270\311\200\067\114\006\367\353\125\117 +\265\355 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\300\060\202\003\250\240\003\002\001\002\002\020\036 +\277\131\120\270\311\200\067\114\006\367\353\125\117\265\355\060 +\015\006\011\052\206\110\206\367\015\001\001\015\005\000\060\172 +\061\013\060\011\006\003\125\004\006\023\002\120\114\061\041\060 +\037\006\003\125\004\012\023\030\101\163\163\145\143\157\040\104 +\141\164\141\040\123\171\163\164\145\155\163\040\123\056\101\056 +\061\047\060\045\006\003\125\004\013\023\036\103\145\162\164\165 +\155\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040 +\101\165\164\150\157\162\151\164\171\061\037\060\035\006\003\125 +\004\003\023\026\103\145\162\164\165\155\040\124\162\165\163\164 +\145\144\040\122\157\157\164\040\103\101\060\036\027\015\061\070 +\060\063\061\066\061\062\061\060\061\063\132\027\015\064\063\060 +\063\061\066\061\062\061\060\061\063\132\060\172\061\013\060\011 +\006\003\125\004\006\023\002\120\114\061\041\060\037\006\003\125 +\004\012\023\030\101\163\163\145\143\157\040\104\141\164\141\040 +\123\171\163\164\145\155\163\040\123\056\101\056\061\047\060\045 +\006\003\125\004\013\023\036\103\145\162\164\165\155\040\103\145 +\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150 +\157\162\151\164\171\061\037\060\035\006\003\125\004\003\023\026 +\103\145\162\164\165\155\040\124\162\165\163\164\145\144\040\122 +\157\157\164\040\103\101\060\202\002\042\060\015\006\011\052\206 +\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060\202 +\002\012\002\202\002\001\000\321\055\216\273\267\066\352\155\067 +\221\237\116\223\247\005\344\051\003\045\316\034\202\367\174\231 +\237\101\006\315\355\243\272\300\333\011\054\301\174\337\051\176 +\113\145\057\223\247\324\001\153\003\050\030\243\330\235\005\301 +\052\330\105\361\221\336\337\073\320\200\002\214\317\070\017\352 +\247\134\170\021\244\301\310\205\134\045\323\323\262\347\045\317 +\021\124\227\253\065\300\036\166\034\357\000\123\237\071\334\024 +\245\054\042\045\263\162\162\374\215\263\345\076\010\036\024\052 +\067\013\210\074\312\260\364\310\302\241\256\274\301\276\051\147 +\125\342\374\255\131\134\376\275\127\054\260\220\215\302\355\067 +\266\174\231\210\265\325\003\232\075\025\015\075\072\250\250\105 +\360\225\116\045\131\035\315\230\151\273\323\314\062\311\215\357 +\201\376\255\175\211\273\272\140\023\312\145\225\147\240\363\031 +\366\003\126\324\152\323\047\342\241\255\203\360\112\022\042\167 +\034\005\163\342\031\161\102\300\354\165\106\232\220\130\340\152 +\216\053\245\106\060\004\216\031\262\027\343\276\251\272\177\126 +\361\044\003\327\262\041\050\166\016\066\060\114\171\325\101\232 +\232\250\270\065\272\014\072\362\104\033\040\210\367\305\045\327 +\075\306\343\076\103\335\207\376\304\352\365\123\076\114\145\377 +\073\112\313\170\132\153\027\137\015\307\303\117\116\232\052\242 +\355\127\115\042\342\106\232\077\017\221\064\044\175\125\343\214 +\225\067\323\032\360\011\053\054\322\311\215\264\015\000\253\147 +\051\050\330\001\365\031\004\266\035\276\166\376\162\134\304\205 +\312\322\200\101\337\005\250\243\325\204\220\117\013\363\340\077 +\233\031\322\067\211\077\362\173\122\034\214\366\341\367\074\007 +\227\214\016\242\131\201\014\262\220\075\323\343\131\106\355\017 +\251\247\336\200\153\132\252\007\266\031\313\274\127\363\227\041 +\172\014\261\053\164\076\353\332\247\147\055\114\304\230\236\066 +\011\166\146\146\374\032\077\352\110\124\034\276\060\275\200\120 +\277\174\265\316\000\366\014\141\331\347\044\003\340\343\001\201 +\016\275\330\205\064\210\275\262\066\250\173\134\010\345\104\200 +\214\157\370\057\325\041\312\035\034\320\373\304\265\207\321\072 +\116\307\166\265\065\110\265\002\003\001\000\001\243\102\060\100 +\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001 +\377\060\035\006\003\125\035\016\004\026\004\024\214\373\034\165 +\274\002\323\237\116\056\110\331\371\140\124\252\304\263\117\372 +\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006 +\060\015\006\011\052\206\110\206\367\015\001\001\015\005\000\003 +\202\002\001\000\110\242\325\000\013\056\320\077\274\034\325\265 +\124\111\036\132\153\364\344\362\340\100\067\340\314\024\173\271 +\311\372\065\265\165\027\223\152\005\151\205\234\315\117\031\170 +\133\031\201\363\143\076\303\316\133\217\365\057\136\001\166\023 +\077\054\000\271\315\226\122\071\111\155\004\116\305\351\017\206 +\015\341\372\263\137\202\022\361\072\316\146\006\044\064\053\350 +\314\312\347\151\334\207\235\302\064\327\171\321\323\167\270\252 +\131\130\376\235\046\372\070\206\076\235\212\207\144\127\345\027 +\072\342\371\215\271\343\063\170\301\220\330\270\335\267\203\121 +\344\304\314\043\325\006\174\346\121\323\315\064\061\300\366\106 +\273\013\255\374\075\020\005\052\073\112\221\045\356\214\324\204 +\207\200\052\274\011\214\252\072\023\137\350\064\171\120\301\020 +\031\371\323\050\036\324\321\121\060\051\263\256\220\147\326\037 +\012\143\261\305\251\306\102\061\143\027\224\357\151\313\057\372 +\214\024\175\304\103\030\211\331\360\062\100\346\200\342\106\137 +\345\343\301\000\131\250\371\350\040\274\211\054\016\107\064\013 +\352\127\302\123\066\374\247\324\257\061\315\376\002\345\165\372 +\271\047\011\371\363\365\073\312\175\237\251\042\313\210\311\252 +\321\107\075\066\167\250\131\144\153\047\317\357\047\301\343\044 +\265\206\367\256\176\062\115\260\171\150\321\071\350\220\130\303 +\203\274\017\054\326\227\353\316\014\341\040\307\332\267\076\303 +\077\277\057\334\064\244\373\053\041\315\147\217\113\364\343\352 +\324\077\347\117\272\271\245\223\105\034\146\037\041\372\144\136 +\157\340\166\224\062\313\165\365\156\345\366\217\307\270\244\314 +\250\226\175\144\373\044\132\112\003\154\153\070\306\350\003\103 +\232\367\127\271\263\051\151\223\070\364\003\362\273\373\202\153 +\007\040\321\122\037\232\144\002\173\230\146\333\134\115\132\017 +\320\204\225\240\074\024\103\006\312\312\333\270\101\066\332\152 +\104\147\207\257\257\343\105\021\025\151\010\262\276\026\071\227 +\044\157\022\105\321\147\135\011\250\311\025\332\372\322\246\137 +\023\141\037\277\205\254\264\255\255\005\224\010\203\036\165\027 +\323\161\073\223\120\043\131\240\355\074\221\124\235\166\000\305 +\303\270\070\333 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "Certum Trusted Root CA" +# Issuer: CN=Certum Trusted Root CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL +# Serial Number:1e:bf:59:50:b8:c9:80:37:4c:06:f7:eb:55:4f:b5:ed +# Subject: CN=Certum Trusted Root CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL +# Not Valid Before: Fri Mar 16 12:10:13 2018 +# Not Valid After : Mon Mar 16 12:10:13 2043 +# Fingerprint (SHA-256): FE:76:96:57:38:55:77:3E:37:A9:5E:7A:D4:D9:CC:96:C3:01:57:C1:5D:31:76:5B:A9:B1:57:04:E1:AE:78:FD +# Fingerprint (SHA1): C8:83:44:C0:18:AE:9F:CC:F1:87:B7:8F:22:D1:C5:D7:45:84:BA:E5 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Certum Trusted Root CA" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\310\203\104\300\030\256\237\314\361\207\267\217\042\321\305\327 +\105\204\272\345 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\121\341\302\347\376\114\204\257\131\016\057\364\124\157\352\051 +END +CKA_ISSUER MULTILINE_OCTAL +\060\172\061\013\060\011\006\003\125\004\006\023\002\120\114\061 +\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 +\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 +\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 +\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171\061\037\060\035\006 +\003\125\004\003\023\026\103\145\162\164\165\155\040\124\162\165 +\163\164\145\144\040\122\157\157\164\040\103\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\036\277\131\120\270\311\200\067\114\006\367\353\125\117 +\265\355 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "TunTrust Root CA" +# +# Issuer: CN=TunTrust Root CA,O=Agence Nationale de Certification Electronique,C=TN +# Serial Number:13:02:d5:e2:40:4c:92:46:86:16:67:5d:b4:bb:bb:b2:6b:3e:fc:13 +# Subject: CN=TunTrust Root CA,O=Agence Nationale de Certification Electronique,C=TN +# Not Valid Before: Fri Apr 26 08:57:56 2019 +# Not Valid After : Tue Apr 26 08:57:56 2044 +# Fingerprint (SHA-256): 2E:44:10:2A:B5:8C:B8:54:19:45:1C:8E:19:D9:AC:F3:66:2C:AF:BC:61:4B:6A:53:96:0A:30:F7:D0:E2:EB:41 +# Fingerprint (SHA1): CF:E9:70:84:0F:E0:73:0F:9D:F6:0C:7F:2C:4B:EE:20:46:34:9C:BB +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "TunTrust Root CA" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\141\061\013\060\011\006\003\125\004\006\023\002\124\116\061 +\067\060\065\006\003\125\004\012\014\056\101\147\145\156\143\145 +\040\116\141\164\151\157\156\141\154\145\040\144\145\040\103\145 +\162\164\151\146\151\143\141\164\151\157\156\040\105\154\145\143 +\164\162\157\156\151\161\165\145\061\031\060\027\006\003\125\004 +\003\014\020\124\165\156\124\162\165\163\164\040\122\157\157\164 +\040\103\101 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\141\061\013\060\011\006\003\125\004\006\023\002\124\116\061 +\067\060\065\006\003\125\004\012\014\056\101\147\145\156\143\145 +\040\116\141\164\151\157\156\141\154\145\040\144\145\040\103\145 +\162\164\151\146\151\143\141\164\151\157\156\040\105\154\145\143 +\164\162\157\156\151\161\165\145\061\031\060\027\006\003\125\004 +\003\014\020\124\165\156\124\162\165\163\164\040\122\157\157\164 +\040\103\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\024\023\002\325\342\100\114\222\106\206\026\147\135\264\273 +\273\262\153\076\374\023 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\263\060\202\003\233\240\003\002\001\002\002\024\023 +\002\325\342\100\114\222\106\206\026\147\135\264\273\273\262\153 +\076\374\023\060\015\006\011\052\206\110\206\367\015\001\001\013 +\005\000\060\141\061\013\060\011\006\003\125\004\006\023\002\124 +\116\061\067\060\065\006\003\125\004\012\014\056\101\147\145\156 +\143\145\040\116\141\164\151\157\156\141\154\145\040\144\145\040 +\103\145\162\164\151\146\151\143\141\164\151\157\156\040\105\154 +\145\143\164\162\157\156\151\161\165\145\061\031\060\027\006\003 +\125\004\003\014\020\124\165\156\124\162\165\163\164\040\122\157 +\157\164\040\103\101\060\036\027\015\061\071\060\064\062\066\060 +\070\065\067\065\066\132\027\015\064\064\060\064\062\066\060\070 +\065\067\065\066\132\060\141\061\013\060\011\006\003\125\004\006 +\023\002\124\116\061\067\060\065\006\003\125\004\012\014\056\101 +\147\145\156\143\145\040\116\141\164\151\157\156\141\154\145\040 +\144\145\040\103\145\162\164\151\146\151\143\141\164\151\157\156 +\040\105\154\145\143\164\162\157\156\151\161\165\145\061\031\060 +\027\006\003\125\004\003\014\020\124\165\156\124\162\165\163\164 +\040\122\157\157\164\040\103\101\060\202\002\042\060\015\006\011 +\052\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000 +\060\202\002\012\002\202\002\001\000\303\315\323\374\275\004\123 +\335\014\040\072\325\210\056\005\113\101\365\203\202\176\367\131 +\237\236\236\143\350\163\332\366\006\251\117\037\264\371\013\037 +\071\214\232\040\320\176\006\324\354\064\331\206\274\165\133\207 +\210\360\322\331\324\243\012\262\154\033\353\111\054\076\254\135 +\330\224\003\240\354\064\345\060\304\065\175\373\046\115\033\156 +\060\124\330\365\200\105\234\071\255\234\311\045\004\115\232\220 +\076\116\100\156\212\153\315\051\147\306\314\055\340\164\350\005 +\127\012\110\120\372\172\103\332\176\354\133\232\016\142\166\376 +\352\235\035\205\162\354\021\273\065\350\037\047\277\301\241\307 +\273\110\026\335\126\327\314\116\240\341\271\254\333\325\203\031 +\032\205\321\224\227\327\312\243\145\013\363\070\371\002\256\335 +\366\147\317\311\077\365\212\054\107\032\231\157\005\015\375\320 +\035\202\061\374\051\314\000\130\227\221\114\200\000\034\063\205 +\226\057\313\101\302\213\020\204\303\011\044\211\037\265\017\331 +\331\167\107\030\222\224\140\134\307\231\003\074\376\367\225\247 +\175\120\241\200\302\251\203\255\130\226\125\041\333\206\131\324 +\257\306\274\335\201\156\007\333\140\142\376\354\020\156\332\150 +\001\364\203\033\251\076\242\133\043\327\144\306\337\334\242\175 +\330\113\272\202\322\121\370\146\277\006\106\344\171\052\046\066 +\171\217\037\116\231\035\262\217\014\016\034\377\311\135\300\375 +\220\020\246\261\067\363\315\072\044\156\264\205\220\277\200\271 +\014\214\325\233\326\310\361\126\077\032\200\211\172\251\342\033 +\062\121\054\076\362\337\173\366\135\172\051\031\216\345\310\275 +\066\161\213\135\114\302\035\077\255\130\242\317\075\160\115\246 +\120\230\045\334\043\371\270\130\101\010\161\277\117\270\204\240 +\217\000\124\025\374\221\155\130\247\226\073\353\113\226\047\315 +\153\242\241\206\254\015\174\124\346\146\114\146\137\220\276\041 +\232\002\106\055\344\203\302\200\271\317\113\076\350\177\074\001 +\354\217\136\315\177\322\050\102\001\225\212\342\227\075\020\041 +\175\366\235\034\305\064\241\354\054\016\012\122\054\022\125\160 +\044\075\313\302\024\065\103\135\047\116\276\300\275\252\174\226 +\347\374\236\141\255\104\323\000\227\002\003\001\000\001\243\143 +\060\141\060\035\006\003\125\035\016\004\026\004\024\006\232\233 +\037\123\175\361\365\244\310\323\206\076\241\163\131\264\367\104 +\041\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001 +\001\377\060\037\006\003\125\035\043\004\030\060\026\200\024\006 +\232\233\037\123\175\361\365\244\310\323\206\076\241\163\131\264 +\367\104\041\060\016\006\003\125\035\017\001\001\377\004\004\003 +\002\001\006\060\015\006\011\052\206\110\206\367\015\001\001\013 +\005\000\003\202\002\001\000\252\005\156\266\335\025\311\277\263 +\306\040\366\006\107\260\206\223\045\323\215\271\310\000\077\227 +\365\122\047\210\161\311\164\375\353\312\144\333\133\357\036\135 +\272\277\321\353\356\134\151\272\026\310\363\271\217\323\066\056 +\100\111\007\015\131\336\213\020\260\111\005\342\377\221\077\113 +\267\335\002\216\370\201\050\134\314\334\155\257\137\024\234\175 +\130\170\015\366\200\011\271\351\016\227\051\031\270\267\353\370 +\026\313\125\022\344\306\175\273\304\354\370\265\034\116\076\147 +\277\305\137\033\155\155\107\050\252\004\130\141\326\166\277\042 +\177\320\007\152\247\144\123\360\227\215\235\200\077\273\301\007 +\333\145\257\346\233\062\232\303\124\223\304\034\010\303\104\373 +\173\143\021\103\321\152\032\141\152\171\155\220\117\051\216\107 +\005\301\022\151\151\326\306\066\061\341\374\372\200\272\134\117 +\304\353\267\062\254\370\165\141\027\327\020\031\271\361\322\011 +\357\172\102\235\133\132\013\324\306\225\116\052\316\377\007\327 +\117\176\030\006\210\361\031\265\331\230\273\256\161\304\034\347 +\164\131\130\357\014\211\317\213\037\165\223\032\004\024\222\110 +\120\251\353\127\051\000\026\343\066\034\310\370\277\360\063\325 +\101\017\304\314\074\335\351\063\103\001\221\020\053\036\321\271 +\135\315\062\031\213\217\214\040\167\327\042\304\102\334\204\026 +\233\045\155\350\264\125\161\177\260\174\263\323\161\111\271\317 +\122\244\004\077\334\075\240\273\257\063\236\012\060\140\216\333 +\235\135\224\250\275\140\347\142\200\166\201\203\014\214\314\060 +\106\111\342\014\322\250\257\353\141\161\357\347\042\142\251\367 +\134\144\154\237\026\214\147\066\047\105\365\011\173\277\366\020 +\012\361\260\215\124\103\214\004\272\243\077\357\342\065\307\371 +\164\340\157\064\101\320\277\163\145\127\040\371\233\147\172\146 +\150\044\116\200\145\275\020\231\006\131\362\145\257\270\306\107 +\273\375\220\170\213\101\163\056\257\125\037\334\073\222\162\156 +\204\323\320\141\114\015\314\166\127\342\055\205\042\025\066\015 +\353\001\235\353\330\353\304\204\231\373\300\014\314\062\350\343 +\167\332\203\104\213\236\125\050\300\213\130\323\220\076\116\033 +\000\361\025\255\203\053\232 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "TunTrust Root CA" +# Issuer: CN=TunTrust Root CA,O=Agence Nationale de Certification Electronique,C=TN +# Serial Number:13:02:d5:e2:40:4c:92:46:86:16:67:5d:b4:bb:bb:b2:6b:3e:fc:13 +# Subject: CN=TunTrust Root CA,O=Agence Nationale de Certification Electronique,C=TN +# Not Valid Before: Fri Apr 26 08:57:56 2019 +# Not Valid After : Tue Apr 26 08:57:56 2044 +# Fingerprint (SHA-256): 2E:44:10:2A:B5:8C:B8:54:19:45:1C:8E:19:D9:AC:F3:66:2C:AF:BC:61:4B:6A:53:96:0A:30:F7:D0:E2:EB:41 +# Fingerprint (SHA1): CF:E9:70:84:0F:E0:73:0F:9D:F6:0C:7F:2C:4B:EE:20:46:34:9C:BB +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "TunTrust Root CA" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\317\351\160\204\017\340\163\017\235\366\014\177\054\113\356\040 +\106\064\234\273 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\205\023\271\220\133\066\134\266\136\270\132\370\340\061\127\264 +END +CKA_ISSUER MULTILINE_OCTAL +\060\141\061\013\060\011\006\003\125\004\006\023\002\124\116\061 +\067\060\065\006\003\125\004\012\014\056\101\147\145\156\143\145 +\040\116\141\164\151\157\156\141\154\145\040\144\145\040\103\145 +\162\164\151\146\151\143\141\164\151\157\156\040\105\154\145\143 +\164\162\157\156\151\161\165\145\061\031\060\027\006\003\125\004 +\003\014\020\124\165\156\124\162\165\163\164\040\122\157\157\164 +\040\103\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\024\023\002\325\342\100\114\222\106\206\026\147\135\264\273 +\273\262\153\076\374\023 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "HARICA TLS RSA Root CA 2021" +# +# Issuer: CN=HARICA TLS RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Serial Number:39:ca:93:1c:ef:43:f3:c6:8e:93:c7:f4:64:89:38:7e +# Subject: CN=HARICA TLS RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Not Valid Before: Fri Feb 19 10:55:38 2021 +# Not Valid After : Mon Feb 13 10:55:37 2045 +# Fingerprint (SHA-256): D9:5D:0E:8E:DA:79:52:5B:F9:BE:B1:1B:14:D2:10:0D:32:94:98:5F:0C:62:D9:FA:BD:9C:D9:99:EC:CB:7B:1D +# Fingerprint (SHA1): 02:2D:05:82:FA:88:CE:14:0C:06:79:DE:7F:14:10:E9:45:D7:A5:6D +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "HARICA TLS RSA Root CA 2021" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 +\003\014\033\110\101\122\111\103\101\040\124\114\123\040\122\123 +\101\040\122\157\157\164\040\103\101\040\062\060\062\061 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 +\003\014\033\110\101\122\111\103\101\040\124\114\123\040\122\123 +\101\040\122\157\157\164\040\103\101\040\062\060\062\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\071\312\223\034\357\103\363\306\216\223\307\364\144\211 +\070\176 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\244\060\202\003\214\240\003\002\001\002\002\020\071 +\312\223\034\357\103\363\306\216\223\307\364\144\211\070\176\060 +\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\154 +\061\013\060\011\006\003\125\004\006\023\002\107\122\061\067\060 +\065\006\003\125\004\012\014\056\110\145\154\154\145\156\151\143 +\040\101\143\141\144\145\155\151\143\040\141\156\144\040\122\145 +\163\145\141\162\143\150\040\111\156\163\164\151\164\165\164\151 +\157\156\163\040\103\101\061\044\060\042\006\003\125\004\003\014 +\033\110\101\122\111\103\101\040\124\114\123\040\122\123\101\040 +\122\157\157\164\040\103\101\040\062\060\062\061\060\036\027\015 +\062\061\060\062\061\071\061\060\065\065\063\070\132\027\015\064 +\065\060\062\061\063\061\060\065\065\063\067\132\060\154\061\013 +\060\011\006\003\125\004\006\023\002\107\122\061\067\060\065\006 +\003\125\004\012\014\056\110\145\154\154\145\156\151\143\040\101 +\143\141\144\145\155\151\143\040\141\156\144\040\122\145\163\145 +\141\162\143\150\040\111\156\163\164\151\164\165\164\151\157\156 +\163\040\103\101\061\044\060\042\006\003\125\004\003\014\033\110 +\101\122\111\103\101\040\124\114\123\040\122\123\101\040\122\157 +\157\164\040\103\101\040\062\060\062\061\060\202\002\042\060\015 +\006\011\052\206\110\206\367\015\001\001\001\005\000\003\202\002 +\017\000\060\202\002\012\002\202\002\001\000\213\302\347\257\145 +\233\005\147\226\311\015\044\271\320\016\144\374\316\342\044\030 +\054\204\177\167\121\313\004\021\066\270\136\355\151\161\247\236 +\344\045\011\227\147\301\107\302\317\221\026\066\142\075\070\004 +\341\121\202\377\254\322\264\151\335\056\354\021\243\105\356\153 +\153\073\114\277\214\215\244\036\235\021\271\351\070\371\172\016 +\014\230\342\043\035\321\116\143\324\347\270\101\104\373\153\257 +\153\332\037\323\305\221\210\133\244\211\222\321\201\346\214\071 +\130\240\326\151\103\251\255\230\122\130\156\333\012\373\153\317 +\150\372\343\244\136\072\105\163\230\007\352\137\002\162\336\014 +\245\263\237\256\251\035\267\035\263\374\212\131\347\156\162\145 +\255\365\060\224\043\007\363\202\026\113\065\230\234\123\273\057 +\312\344\132\331\307\215\035\374\230\231\373\054\244\202\153\360 +\052\037\216\013\137\161\134\134\256\102\173\051\211\201\313\003 +\243\231\312\210\236\013\100\011\101\063\333\346\130\172\375\256 +\231\160\300\132\017\326\023\206\161\057\166\151\374\220\335\333 +\055\156\321\362\233\365\032\153\236\157\025\214\172\360\113\050 +\240\042\070\200\044\154\066\244\073\362\060\221\363\170\023\317 +\301\077\065\253\361\035\021\043\265\103\042\236\001\222\267\030 +\002\345\021\321\202\333\025\000\314\141\067\301\052\174\232\341 +\320\272\263\120\106\356\202\254\235\061\370\373\043\342\003\000 +\110\160\243\011\046\171\025\123\140\363\070\134\255\070\352\201 +\000\143\024\271\063\136\335\013\333\240\105\007\032\063\011\370 +\115\264\247\002\246\151\364\302\131\005\210\145\205\126\256\113 +\313\340\336\074\175\055\032\310\351\373\037\243\141\112\326\052 +\023\255\167\114\032\030\233\221\017\130\330\006\124\305\227\370 +\252\077\040\212\246\205\246\167\366\246\374\034\342\356\156\224 +\063\052\203\120\204\012\345\117\206\370\120\105\170\000\201\353 +\133\150\343\046\215\314\173\134\121\364\024\054\100\276\032\140 +\035\172\162\141\035\037\143\055\210\252\316\242\105\220\010\374 +\153\276\263\120\052\132\375\250\110\030\106\326\220\100\222\220 +\012\204\136\150\061\370\353\355\015\323\035\306\175\231\030\125 +\126\047\145\056\215\105\305\044\354\316\343\002\003\001\000\001 +\243\102\060\100\060\017\006\003\125\035\023\001\001\377\004\005 +\060\003\001\001\377\060\035\006\003\125\035\016\004\026\004\024 +\012\110\043\246\140\244\222\012\063\352\223\133\305\127\352\045 +\115\275\022\356\060\016\006\003\125\035\017\001\001\377\004\004 +\003\002\001\206\060\015\006\011\052\206\110\206\367\015\001\001 +\013\005\000\003\202\002\001\000\076\220\110\252\156\142\025\045 +\146\173\014\325\214\213\211\235\327\355\116\007\357\234\320\024 +\137\136\120\275\150\226\220\244\024\021\252\150\155\011\065\071 +\100\011\332\364\011\054\064\245\173\131\204\111\051\227\164\310 +\007\036\107\155\362\316\034\120\046\343\236\075\100\123\077\367 +\177\226\166\020\305\106\245\320\040\113\120\364\065\073\030\364 +\125\152\101\033\107\006\150\074\273\011\010\142\331\137\125\102 +\252\254\123\205\254\225\126\066\126\253\344\005\214\305\250\332 +\037\243\151\275\123\017\304\377\334\312\343\176\362\114\210\206 +\107\106\032\363\000\365\200\221\242\334\103\102\224\233\040\360 +\321\315\262\353\054\123\302\123\170\112\117\004\224\101\232\217 +\047\062\301\345\111\031\277\361\362\302\213\250\012\071\061\050 +\264\175\142\066\054\115\354\037\063\266\176\167\155\176\120\360 +\237\016\327\021\217\317\030\305\343\047\376\046\357\005\235\317 +\317\067\305\320\173\332\073\260\026\204\014\072\223\326\276\027 +\333\017\076\016\031\170\011\307\251\002\162\042\113\367\067\166 +\272\165\304\205\003\132\143\325\261\165\005\302\271\275\224\255 +\214\025\231\247\223\175\366\305\363\252\164\317\004\205\224\230 +\000\364\342\371\312\044\145\277\340\142\257\310\305\372\262\311 +\236\126\110\332\171\375\226\166\025\276\243\216\126\304\263\064 +\374\276\107\364\301\264\250\374\325\060\210\150\356\313\256\311 +\143\304\166\276\254\070\030\341\136\134\317\256\072\042\121\353 +\321\213\263\363\053\063\007\124\207\372\264\262\023\173\272\123 +\004\142\001\235\361\300\117\356\341\072\324\213\040\020\372\002 +\127\346\357\301\013\267\220\106\234\031\051\214\334\157\240\112 +\151\151\224\267\044\145\240\377\254\077\316\001\373\041\056\375 +\150\370\233\362\245\317\061\070\134\025\252\346\227\000\301\337 +\132\245\247\071\252\351\204\177\074\121\250\072\331\224\133\214 +\277\117\010\161\345\333\250\134\324\322\246\376\000\243\306\026 +\307\017\350\200\316\034\050\144\164\031\010\323\102\343\316\000 +\135\177\261\334\023\260\341\005\313\321\040\252\206\164\236\071 +\347\221\375\377\133\326\367\255\246\057\003\013\155\343\127\124 +\353\166\123\030\215\021\230\272 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "HARICA TLS RSA Root CA 2021" +# Issuer: CN=HARICA TLS RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Serial Number:39:ca:93:1c:ef:43:f3:c6:8e:93:c7:f4:64:89:38:7e +# Subject: CN=HARICA TLS RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Not Valid Before: Fri Feb 19 10:55:38 2021 +# Not Valid After : Mon Feb 13 10:55:37 2045 +# Fingerprint (SHA-256): D9:5D:0E:8E:DA:79:52:5B:F9:BE:B1:1B:14:D2:10:0D:32:94:98:5F:0C:62:D9:FA:BD:9C:D9:99:EC:CB:7B:1D +# Fingerprint (SHA1): 02:2D:05:82:FA:88:CE:14:0C:06:79:DE:7F:14:10:E9:45:D7:A5:6D +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "HARICA TLS RSA Root CA 2021" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\002\055\005\202\372\210\316\024\014\006\171\336\177\024\020\351 +\105\327\245\155 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\145\107\233\130\206\335\054\360\374\242\204\037\036\226\304\221 +END +CKA_ISSUER MULTILINE_OCTAL +\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 +\003\014\033\110\101\122\111\103\101\040\124\114\123\040\122\123 +\101\040\122\157\157\164\040\103\101\040\062\060\062\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\071\312\223\034\357\103\363\306\216\223\307\364\144\211 +\070\176 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "HARICA TLS ECC Root CA 2021" +# +# Issuer: CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Serial Number:67:74:9d:8d:77:d8:3b:6a:db:22:f4:ff:59:e2:bf:ce +# Subject: CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Not Valid Before: Fri Feb 19 11:01:10 2021 +# Not Valid After : Mon Feb 13 11:01:09 2045 +# Fingerprint (SHA-256): 3F:99:CC:47:4A:CF:CE:4D:FE:D5:87:94:66:5E:47:8D:15:47:73:9F:2E:78:0F:1B:B4:CA:9B:13:30:97:D4:01 +# Fingerprint (SHA1): BC:B0:C1:9D:E9:98:92:70:19:38:57:E9:8D:A7:B4:5D:6E:EE:01:48 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "HARICA TLS ECC Root CA 2021" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 +\003\014\033\110\101\122\111\103\101\040\124\114\123\040\105\103 +\103\040\122\157\157\164\040\103\101\040\062\060\062\061 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 +\003\014\033\110\101\122\111\103\101\040\124\114\123\040\105\103 +\103\040\122\157\157\164\040\103\101\040\062\060\062\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\147\164\235\215\167\330\073\152\333\042\364\377\131\342 +\277\316 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\124\060\202\001\333\240\003\002\001\002\002\020\147 +\164\235\215\167\330\073\152\333\042\364\377\131\342\277\316\060 +\012\006\010\052\206\110\316\075\004\003\003\060\154\061\013\060 +\011\006\003\125\004\006\023\002\107\122\061\067\060\065\006\003 +\125\004\012\014\056\110\145\154\154\145\156\151\143\040\101\143 +\141\144\145\155\151\143\040\141\156\144\040\122\145\163\145\141 +\162\143\150\040\111\156\163\164\151\164\165\164\151\157\156\163 +\040\103\101\061\044\060\042\006\003\125\004\003\014\033\110\101 +\122\111\103\101\040\124\114\123\040\105\103\103\040\122\157\157 +\164\040\103\101\040\062\060\062\061\060\036\027\015\062\061\060 +\062\061\071\061\061\060\061\061\060\132\027\015\064\065\060\062 +\061\063\061\061\060\061\060\071\132\060\154\061\013\060\011\006 +\003\125\004\006\023\002\107\122\061\067\060\065\006\003\125\004 +\012\014\056\110\145\154\154\145\156\151\143\040\101\143\141\144 +\145\155\151\143\040\141\156\144\040\122\145\163\145\141\162\143 +\150\040\111\156\163\164\151\164\165\164\151\157\156\163\040\103 +\101\061\044\060\042\006\003\125\004\003\014\033\110\101\122\111 +\103\101\040\124\114\123\040\105\103\103\040\122\157\157\164\040 +\103\101\040\062\060\062\061\060\166\060\020\006\007\052\206\110 +\316\075\002\001\006\005\053\201\004\000\042\003\142\000\004\070 +\010\376\261\240\226\322\172\254\257\111\072\320\300\340\303\073 +\050\252\361\162\155\145\000\107\210\204\374\232\046\153\252\113 +\272\154\004\012\210\136\027\362\125\207\374\060\260\064\342\064 +\130\127\032\204\123\351\060\331\251\362\226\164\303\121\037\130 +\111\061\314\230\116\140\021\207\165\323\162\224\220\117\233\020 +\045\052\250\170\055\276\220\101\130\220\025\162\247\241\267\243 +\102\060\100\060\017\006\003\125\035\023\001\001\377\004\005\060 +\003\001\001\377\060\035\006\003\125\035\016\004\026\004\024\311 +\033\123\201\022\376\004\325\026\321\252\274\232\157\267\240\225 +\031\156\312\060\016\006\003\125\035\017\001\001\377\004\004\003 +\002\001\206\060\012\006\010\052\206\110\316\075\004\003\003\003 +\147\000\060\144\002\060\021\336\256\370\334\116\210\260\251\360 +\042\255\302\121\100\357\140\161\055\356\217\002\304\135\003\160 +\111\244\222\352\305\024\210\160\246\323\015\260\252\312\054\100 +\234\373\351\202\156\232\002\060\053\107\232\007\306\321\302\201 +\174\312\013\226\030\101\033\243\364\060\011\236\265\043\050\015 +\237\024\266\074\123\242\114\006\151\175\372\154\221\306\052\111 +\105\346\354\267\023\341\072\154 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "HARICA TLS ECC Root CA 2021" +# Issuer: CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Serial Number:67:74:9d:8d:77:d8:3b:6a:db:22:f4:ff:59:e2:bf:ce +# Subject: CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Not Valid Before: Fri Feb 19 11:01:10 2021 +# Not Valid After : Mon Feb 13 11:01:09 2045 +# Fingerprint (SHA-256): 3F:99:CC:47:4A:CF:CE:4D:FE:D5:87:94:66:5E:47:8D:15:47:73:9F:2E:78:0F:1B:B4:CA:9B:13:30:97:D4:01 +# Fingerprint (SHA1): BC:B0:C1:9D:E9:98:92:70:19:38:57:E9:8D:A7:B4:5D:6E:EE:01:48 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "HARICA TLS ECC Root CA 2021" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\274\260\301\235\351\230\222\160\031\070\127\351\215\247\264\135 +\156\356\001\110 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\256\367\114\345\146\065\321\267\233\214\042\223\164\323\113\260 +END +CKA_ISSUER MULTILINE_OCTAL +\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 +\003\014\033\110\101\122\111\103\101\040\124\114\123\040\105\103 +\103\040\122\157\157\164\040\103\101\040\062\060\062\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\147\164\235\215\167\330\073\152\333\042\364\377\131\342 +\277\316 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "HARICA Client RSA Root CA 2021" +# +# Issuer: CN=HARICA Client RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Serial Number:55:52:f8:1e:db:1b:24:2c:9e:bb:96:18:cd:02:28:3e +# Subject: CN=HARICA Client RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Not Valid Before: Fri Feb 19 10:58:46 2021 +# Not Valid After : Mon Feb 13 10:58:45 2045 +# Fingerprint (SHA-256): 1B:E7:AB:E3:06:86:B1:63:48:AF:D1:C6:1B:68:66:A0:EA:7F:48:21:E6:7D:5E:8A:F9:37:CF:80:11:BC:75:0D +# Fingerprint (SHA1): 46:C6:90:0A:77:3A:B6:BC:F4:65:AD:AC:FC:E3:F7:07:00:6E:DE:6E +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "HARICA Client RSA Root CA 2021" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 +\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 +\040\122\123\101\040\122\157\157\164\040\103\101\040\062\060\062 +\061 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 +\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 +\040\122\123\101\040\122\157\157\164\040\103\101\040\062\060\062 +\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\125\122\370\036\333\033\044\054\236\273\226\030\315\002 +\050\076 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\252\060\202\003\222\240\003\002\001\002\002\020\125 +\122\370\036\333\033\044\054\236\273\226\030\315\002\050\076\060 +\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\157 +\061\013\060\011\006\003\125\004\006\023\002\107\122\061\067\060 +\065\006\003\125\004\012\014\056\110\145\154\154\145\156\151\143 +\040\101\143\141\144\145\155\151\143\040\141\156\144\040\122\145 +\163\145\141\162\143\150\040\111\156\163\164\151\164\165\164\151 +\157\156\163\040\103\101\061\047\060\045\006\003\125\004\003\014 +\036\110\101\122\111\103\101\040\103\154\151\145\156\164\040\122 +\123\101\040\122\157\157\164\040\103\101\040\062\060\062\061\060 +\036\027\015\062\061\060\062\061\071\061\060\065\070\064\066\132 +\027\015\064\065\060\062\061\063\061\060\065\070\064\065\132\060 +\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061\067 +\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156\151 +\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040\122 +\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165\164 +\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004\003 +\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164\040 +\122\123\101\040\122\157\157\164\040\103\101\040\062\060\062\061 +\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 +\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 +\000\201\333\127\102\220\054\164\065\364\370\270\164\031\115\253 +\011\132\167\105\201\163\142\260\065\237\370\320\267\063\000\207 +\023\266\226\253\016\124\022\060\007\274\233\267\110\327\321\031 +\203\256\216\330\251\361\251\000\204\260\214\136\236\350\014\217 +\124\151\277\366\324\010\117\046\160\376\030\101\143\032\263\062 +\213\100\370\007\253\127\061\360\306\026\166\147\232\264\335\057 +\362\321\153\305\320\222\204\221\161\156\017\056\143\351\037\123 +\244\335\122\023\314\011\203\051\201\014\305\123\165\104\261\016 +\147\123\030\320\303\037\210\113\237\224\044\264\051\274\273\350 +\116\375\157\322\025\035\111\334\215\160\362\021\032\040\121\125 +\021\272\210\157\304\367\120\171\326\252\061\342\204\075\136\062 +\310\167\052\120\161\345\013\057\351\266\352\357\253\012\063\071 +\016\375\217\245\147\103\202\216\230\151\011\011\033\100\315\070 +\147\107\352\311\354\227\161\022\336\044\365\162\074\321\367\103 +\114\046\367\220\262\211\351\105\113\125\075\061\005\172\101\342 +\225\272\103\300\027\305\266\205\075\031\215\144\160\363\133\254 +\315\237\323\051\165\207\113\225\147\152\246\370\321\335\274\220 +\206\211\103\051\251\067\133\365\135\260\046\132\123\102\166\220 +\053\317\236\126\154\053\124\317\134\232\145\337\133\213\110\140 +\070\174\373\305\013\317\166\004\143\002\063\052\175\365\203\147 +\347\372\306\103\375\053\017\324\046\057\167\244\062\301\044\352 +\144\235\277\263\070\161\061\104\362\107\270\242\146\101\241\373 +\233\173\274\307\106\152\165\277\132\242\214\350\152\104\301\270 +\226\265\300\062\010\055\173\164\065\163\262\312\306\376\257\021 +\162\030\366\347\310\302\317\245\052\352\173\326\131\350\174\240 +\262\152\100\011\151\016\245\226\333\321\000\271\361\210\156\066 +\360\210\262\235\361\122\362\303\174\277\060\211\074\012\151\371 +\042\244\145\341\233\340\164\306\261\205\227\226\054\256\224\217 +\120\246\071\022\037\276\107\362\201\170\323\165\066\236\175\132 +\040\227\342\122\256\231\237\306\174\233\146\363\376\330\317\356 +\275\227\006\035\055\205\334\076\066\123\226\173\040\272\350\310 +\341\255\226\142\076\021\174\263\000\204\236\247\114\161\253\112 +\067\002\003\001\000\001\243\102\060\100\060\017\006\003\125\035 +\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125 +\035\016\004\026\004\024\240\326\007\075\136\044\367\173\240\104 +\056\044\122\015\031\252\053\004\221\247\060\016\006\003\125\035 +\017\001\001\377\004\004\003\002\001\206\060\015\006\011\052\206 +\110\206\367\015\001\001\013\005\000\003\202\002\001\000\015\107 +\371\011\146\061\122\354\171\356\302\250\362\150\076\355\226\105 +\313\072\246\230\143\077\352\053\115\116\003\320\034\202\341\313 +\323\345\326\253\133\147\050\274\235\376\014\231\012\200\125\247 +\316\033\043\141\015\260\127\360\376\340\312\276\346\220\333\203 +\054\276\203\216\364\171\266\376\320\015\102\247\130\037\151\352 +\201\365\005\245\376\106\150\353\154\170\311\340\352\347\346\336 +\061\305\322\325\054\202\143\050\235\135\250\032\176\210\346\347 +\053\361\054\325\320\005\236\334\055\275\067\146\324\004\242\247 +\255\277\072\302\250\073\255\377\215\235\063\340\271\232\204\241 +\207\037\166\364\202\164\327\016\371\060\110\076\133\210\076\252 +\134\153\326\057\014\350\216\163\302\030\221\203\071\266\146\132 +\320\037\140\047\135\115\343\366\072\015\146\120\234\170\173\253 +\363\023\020\256\017\057\253\350\144\263\030\040\235\106\065\144 +\045\163\352\233\020\134\130\065\211\261\106\110\247\364\254\324 +\035\236\133\314\251\245\032\023\117\044\120\252\331\033\155\261 +\100\373\235\335\130\164\304\302\157\024\162\354\333\065\237\270 +\124\165\105\303\246\310\032\050\065\072\256\145\362\251\230\316 +\257\133\311\070\214\061\073\177\314\334\226\375\342\133\326\320 +\131\364\166\272\013\313\117\203\020\307\100\320\035\140\351\052 +\345\110\130\167\014\105\151\276\031\161\004\044\342\343\044\037 +\112\310\301\076\231\365\226\230\070\110\045\241\025\260\033\327 +\342\204\030\133\366\161\065\232\150\173\100\314\030\134\014\044 +\235\324\225\365\231\252\106\352\256\254\277\364\024\031\044\350 +\214\354\343\365\274\006\150\212\052\014\005\137\012\227\165\247 +\334\176\300\375\327\172\030\337\060\321\070\113\037\260\230\160 +\277\314\174\163\360\156\304\061\245\244\227\035\254\277\316\154 +\041\112\276\047\043\147\363\006\126\201\012\221\216\266\341\003 +\005\063\054\332\064\010\115\116\120\043\255\037\245\305\324\172 +\376\352\011\354\247\050\140\213\106\174\265\352\233\335\117\371 +\347\153\025\306\210\317\103\333\345\047\334\004\126\156\157\106 +\025\361\126\055\350\134\014\163\303\043\201\070\040\313\311\014 +\151\317\054\253\073\204\140\063\031\122\375\151\024\063 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "HARICA Client RSA Root CA 2021" +# Issuer: CN=HARICA Client RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Serial Number:55:52:f8:1e:db:1b:24:2c:9e:bb:96:18:cd:02:28:3e +# Subject: CN=HARICA Client RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Not Valid Before: Fri Feb 19 10:58:46 2021 +# Not Valid After : Mon Feb 13 10:58:45 2045 +# Fingerprint (SHA-256): 1B:E7:AB:E3:06:86:B1:63:48:AF:D1:C6:1B:68:66:A0:EA:7F:48:21:E6:7D:5E:8A:F9:37:CF:80:11:BC:75:0D +# Fingerprint (SHA1): 46:C6:90:0A:77:3A:B6:BC:F4:65:AD:AC:FC:E3:F7:07:00:6E:DE:6E +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "HARICA Client RSA Root CA 2021" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\106\306\220\012\167\072\266\274\364\145\255\254\374\343\367\007 +\000\156\336\156 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\157\355\134\327\210\314\070\251\334\351\335\331\135\333\330\355 +END +CKA_ISSUER MULTILINE_OCTAL +\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 +\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 +\040\122\123\101\040\122\157\157\164\040\103\101\040\062\060\062 +\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\125\122\370\036\333\033\044\054\236\273\226\030\315\002 +\050\076 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "HARICA Client ECC Root CA 2021" +# +# Issuer: CN=HARICA Client ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Serial Number:31:68:d9:d8:e1:62:57:1e:d2:19:44:88:e6:10:7d:f0 +# Subject: CN=HARICA Client ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Not Valid Before: Fri Feb 19 11:03:34 2021 +# Not Valid After : Mon Feb 13 11:03:33 2045 +# Fingerprint (SHA-256): 8D:D4:B5:37:3C:B0:DE:36:76:9C:12:33:92:80:D8:27:46:B3:AA:6C:D4:26:E7:97:A3:1B:AB:E4:27:9C:F0:0B +# Fingerprint (SHA1): BE:64:D3:DA:14:4B:D2:6B:CD:AF:8F:DB:A6:A6:72:F8:DE:26:F9:00 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "HARICA Client ECC Root CA 2021" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 +\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 +\040\105\103\103\040\122\157\157\164\040\103\101\040\062\060\062 +\061 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 +\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 +\040\105\103\103\040\122\157\157\164\040\103\101\040\062\060\062 +\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\061\150\331\330\341\142\127\036\322\031\104\210\346\020 +\175\360 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\132\060\202\001\341\240\003\002\001\002\002\020\061 +\150\331\330\341\142\127\036\322\031\104\210\346\020\175\360\060 +\012\006\010\052\206\110\316\075\004\003\003\060\157\061\013\060 +\011\006\003\125\004\006\023\002\107\122\061\067\060\065\006\003 +\125\004\012\014\056\110\145\154\154\145\156\151\143\040\101\143 +\141\144\145\155\151\143\040\141\156\144\040\122\145\163\145\141 +\162\143\150\040\111\156\163\164\151\164\165\164\151\157\156\163 +\040\103\101\061\047\060\045\006\003\125\004\003\014\036\110\101 +\122\111\103\101\040\103\154\151\145\156\164\040\105\103\103\040 +\122\157\157\164\040\103\101\040\062\060\062\061\060\036\027\015 +\062\061\060\062\061\071\061\061\060\063\063\064\132\027\015\064 +\065\060\062\061\063\061\061\060\063\063\063\132\060\157\061\013 +\060\011\006\003\125\004\006\023\002\107\122\061\067\060\065\006 +\003\125\004\012\014\056\110\145\154\154\145\156\151\143\040\101 +\143\141\144\145\155\151\143\040\141\156\144\040\122\145\163\145 +\141\162\143\150\040\111\156\163\164\151\164\165\164\151\157\156 +\163\040\103\101\061\047\060\045\006\003\125\004\003\014\036\110 +\101\122\111\103\101\040\103\154\151\145\156\164\040\105\103\103 +\040\122\157\157\164\040\103\101\040\062\060\062\061\060\166\060 +\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000 +\042\003\142\000\004\007\030\255\225\226\224\320\134\017\202\367 +\052\100\372\002\311\311\075\066\246\243\004\152\301\155\225\001 +\210\140\022\124\154\134\242\053\156\023\072\210\225\014\034\046 +\206\066\112\211\031\267\030\336\073\350\250\120\037\312\337\133 +\277\111\200\025\333\343\060\341\035\132\307\052\212\001\007\376 +\155\054\064\357\050\050\227\274\301\371\127\206\225\213\065\317 +\236\132\321\150\225\243\102\060\100\060\017\006\003\125\035\023 +\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035 +\016\004\026\004\024\122\010\322\276\062\201\045\375\365\032\227 +\354\116\137\032\273\123\315\220\255\060\016\006\003\125\035\017 +\001\001\377\004\004\003\002\001\206\060\012\006\010\052\206\110 +\316\075\004\003\003\003\147\000\060\144\002\060\114\061\105\106 +\117\250\346\276\303\167\262\032\030\113\055\210\173\130\346\253 +\224\153\104\003\260\027\377\337\202\163\104\121\054\375\223\035 +\006\173\024\322\211\354\100\014\357\041\001\056\002\060\057\311 +\056\132\154\054\035\331\225\340\236\260\271\134\122\174\366\370 +\070\312\056\361\324\035\362\242\111\242\225\370\301\130\136\117 +\376\163\012\357\061\260\253\043\130\023\214\213\336\073 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "HARICA Client ECC Root CA 2021" +# Issuer: CN=HARICA Client ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Serial Number:31:68:d9:d8:e1:62:57:1e:d2:19:44:88:e6:10:7d:f0 +# Subject: CN=HARICA Client ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR +# Not Valid Before: Fri Feb 19 11:03:34 2021 +# Not Valid After : Mon Feb 13 11:03:33 2045 +# Fingerprint (SHA-256): 8D:D4:B5:37:3C:B0:DE:36:76:9C:12:33:92:80:D8:27:46:B3:AA:6C:D4:26:E7:97:A3:1B:AB:E4:27:9C:F0:0B +# Fingerprint (SHA1): BE:64:D3:DA:14:4B:D2:6B:CD:AF:8F:DB:A6:A6:72:F8:DE:26:F9:00 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "certSIGN Root CA G2" +CKA_LABEL UTF8 "HARICA Client ECC Root CA 2021" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\046\371\223\264\355\075\050\047\260\271\113\247\351\025\035\243 -\215\222\345\062 +\276\144\323\332\024\113\322\153\315\257\217\333\246\246\162\370 +\336\046\371\000 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\214\361\165\212\306\031\317\224\267\367\145\040\207\303\227\307 +\255\270\120\246\251\202\172\154\075\032\252\244\322\143\244\104 END CKA_ISSUER MULTILINE_OCTAL -\060\101\061\013\060\011\006\003\125\004\006\023\002\122\117\061 -\024\060\022\006\003\125\004\012\023\013\103\105\122\124\123\111 -\107\116\040\123\101\061\034\060\032\006\003\125\004\013\023\023 -\143\145\162\164\123\111\107\116\040\122\117\117\124\040\103\101 -\040\107\062 +\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 +\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 +\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 +\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 +\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 +\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 +\040\105\103\103\040\122\157\157\164\040\103\101\040\062\060\062 +\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\011\021\000\064\266\116\306\066\055\066 +\002\020\061\150\331\330\341\142\127\036\322\031\104\210\346\020 +\175\360 END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Trustwave Global Certification Authority" +# Certificate "Autoridad de Certificacion Firmaprofesional CIF A62634068" # -# Issuer: CN=Trustwave Global Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Serial Number:05:f7:0e:86:da:49:f3:46:35:2e:ba:b2 -# Subject: CN=Trustwave Global Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Not Valid Before: Wed Aug 23 19:34:12 2017 -# Not Valid After : Sat Aug 23 19:34:12 2042 -# Fingerprint (SHA-256): 97:55:20:15:F5:DD:FC:3C:87:88:C0:06:94:45:55:40:88:94:45:00:84:F1:00:86:70:86:BC:1A:2B:B5:8D:C8 -# Fingerprint (SHA1): 2F:8F:36:4F:E1:58:97:44:21:59:87:A5:2A:9A:D0:69:95:26:7F:B5 +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068,C=ES +# Serial Number:1b:70:e9:d2:ff:ae:6c:71 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068,C=ES +# Not Valid Before: Tue Sep 23 15:22:07 2014 +# Not Valid After : Mon May 05 15:22:07 2036 +# Fingerprint (SHA-256): 57:DE:05:83:EF:D2:B2:6E:03:61:DA:99:DA:9D:F4:64:8D:EF:7E:E8:44:1C:3B:72:8A:FA:9B:CD:E0:F9:B2:6A +# Fingerprint (SHA1): 0B:BE:C2:27:22:49:CB:39:AA:DB:35:5C:53:E3:8C:AE:78:FF:B6:FE CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Trustwave Global Certification Authority" +CKA_LABEL UTF8 "Autoridad de Certificacion Firmaprofesional CIF A62634068" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\201\210\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\014\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\014\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\014\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\061\060\057\006\003\125\004 -\003\014\050\124\162\165\163\164\167\141\166\145\040\107\154\157 -\142\141\154\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171 +\060\121\061\013\060\011\006\003\125\004\006\023\002\105\123\061 +\102\060\100\006\003\125\004\003\014\071\101\165\164\157\162\151 +\144\141\144\040\144\145\040\103\145\162\164\151\146\151\143\141 +\143\151\157\156\040\106\151\162\155\141\160\162\157\146\145\163 +\151\157\156\141\154\040\103\111\106\040\101\066\062\066\063\064 +\060\066\070 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\201\210\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\014\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\014\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\014\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\061\060\057\006\003\125\004 -\003\014\050\124\162\165\163\164\167\141\166\145\040\107\154\157 -\142\141\154\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171 +\060\121\061\013\060\011\006\003\125\004\006\023\002\105\123\061 +\102\060\100\006\003\125\004\003\014\071\101\165\164\157\162\151 +\144\141\144\040\144\145\040\103\145\162\164\151\146\151\143\141 +\143\151\157\156\040\106\151\162\155\141\160\162\157\146\145\163 +\151\157\156\141\154\040\103\111\106\040\101\066\062\066\063\064 +\060\066\070 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\014\005\367\016\206\332\111\363\106\065\056\272\262 +\002\010\033\160\351\322\377\256\154\161 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\332\060\202\003\302\240\003\002\001\002\002\014\005 -\367\016\206\332\111\363\106\065\056\272\262\060\015\006\011\052 -\206\110\206\367\015\001\001\013\005\000\060\201\210\061\013\060 -\011\006\003\125\004\006\023\002\125\123\061\021\060\017\006\003 -\125\004\010\014\010\111\154\154\151\156\157\151\163\061\020\060 -\016\006\003\125\004\007\014\007\103\150\151\143\141\147\157\061 -\041\060\037\006\003\125\004\012\014\030\124\162\165\163\164\167 -\141\166\145\040\110\157\154\144\151\156\147\163\054\040\111\156 -\143\056\061\061\060\057\006\003\125\004\003\014\050\124\162\165 -\163\164\167\141\166\145\040\107\154\157\142\141\154\040\103\145 -\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150 -\157\162\151\164\171\060\036\027\015\061\067\060\070\062\063\061 -\071\063\064\061\062\132\027\015\064\062\060\070\062\063\061\071 -\063\064\061\062\132\060\201\210\061\013\060\011\006\003\125\004 -\006\023\002\125\123\061\021\060\017\006\003\125\004\010\014\010 -\111\154\154\151\156\157\151\163\061\020\060\016\006\003\125\004 -\007\014\007\103\150\151\143\141\147\157\061\041\060\037\006\003 -\125\004\012\014\030\124\162\165\163\164\167\141\166\145\040\110 -\157\154\144\151\156\147\163\054\040\111\156\143\056\061\061\060 -\057\006\003\125\004\003\014\050\124\162\165\163\164\167\141\166 -\145\040\107\154\157\142\141\154\040\103\145\162\164\151\146\151 -\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 -\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 -\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 -\000\271\135\121\050\113\074\067\222\321\202\316\275\035\275\315 -\335\270\253\317\012\076\341\135\345\334\252\011\271\127\002\076 -\346\143\141\337\362\017\202\143\256\243\367\254\163\321\174\347 -\263\013\257\010\000\011\131\177\315\051\052\210\223\207\027\030 -\200\355\210\262\264\266\020\037\055\326\137\125\242\023\135\321 -\306\353\006\126\211\210\376\254\062\235\375\134\303\005\307\156 -\356\206\211\272\210\003\235\162\041\206\220\256\217\003\245\334 -\237\210\050\313\243\222\111\017\354\320\017\342\155\104\117\200 -\152\262\324\347\240\012\123\001\272\216\227\221\166\156\274\374 -\325\153\066\346\100\210\326\173\057\137\005\350\054\155\021\363 -\347\262\276\222\104\114\322\227\244\376\322\162\201\103\007\234 -\351\021\076\365\213\032\131\175\037\150\130\335\004\000\054\226 -\363\103\263\176\230\031\164\331\234\163\331\030\276\101\307\064 -\171\331\364\142\302\103\271\263\047\260\042\313\371\075\122\307 -\060\107\263\311\076\270\152\342\347\350\201\160\136\102\213\117 -\046\245\376\072\302\040\156\273\370\026\216\315\014\251\264\033 -\154\166\020\341\130\171\106\076\124\316\200\250\127\011\067\051 -\033\231\023\217\014\310\326\054\034\373\005\350\010\225\075\145 -\106\334\356\315\151\342\115\217\207\050\116\064\013\076\317\024 -\331\273\335\266\120\232\255\167\324\031\326\332\032\210\310\116 -\033\047\165\330\262\010\361\256\203\060\271\021\016\315\207\360 -\204\215\025\162\174\241\357\314\362\210\141\272\364\151\273\014 -\214\013\165\127\004\270\116\052\024\056\075\017\034\036\062\246 -\142\066\356\146\342\042\270\005\100\143\020\042\363\063\035\164 -\162\212\054\365\071\051\240\323\347\033\200\204\055\305\075\343 -\115\261\375\032\157\272\145\007\073\130\354\102\105\046\373\330 -\332\045\162\304\366\000\261\042\171\275\343\174\131\142\112\234 -\005\157\075\316\346\326\107\143\231\306\044\157\162\022\310\254 -\177\220\264\013\221\160\350\267\346\026\020\161\027\316\336\006 -\117\110\101\175\065\112\243\211\362\311\113\173\101\021\155\147 -\267\010\230\114\345\021\031\256\102\200\334\373\220\005\324\370 -\120\312\276\344\255\307\302\224\327\026\235\346\027\217\257\066 -\373\002\003\001\000\001\243\102\060\100\060\017\006\003\125\035 -\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125 -\035\016\004\026\004\024\231\340\031\147\015\142\333\166\263\332 -\075\270\133\350\375\102\322\061\016\207\060\016\006\003\125\035 -\017\001\001\377\004\004\003\002\001\006\060\015\006\011\052\206 -\110\206\367\015\001\001\013\005\000\003\202\002\001\000\230\163 -\160\342\260\323\355\071\354\114\140\331\251\022\206\027\036\226 -\320\350\124\050\073\144\055\041\246\370\235\126\023\152\110\075 -\117\307\076\051\333\155\130\203\124\075\207\175\043\005\324\344 -\034\334\350\070\145\206\305\165\247\132\333\065\005\275\167\336 -\273\051\067\100\005\007\303\224\122\237\312\144\335\361\033\053 -\334\106\012\020\002\061\375\112\150\015\007\144\220\346\036\365 -\052\241\250\273\074\135\371\243\010\013\021\014\361\077\055\020 -\224\157\376\342\064\207\203\326\317\345\033\065\155\322\003\341 -\260\015\250\240\252\106\047\202\066\247\025\266\010\246\102\124 -\127\266\231\132\342\013\171\220\327\127\022\121\065\031\210\101 -\150\045\324\067\027\204\025\373\001\162\334\225\336\122\046\040 -\230\046\342\166\365\047\157\372\000\073\112\141\331\015\313\121 -\223\052\375\026\006\226\247\043\232\043\110\376\121\275\266\304 -\260\261\124\316\336\154\101\255\026\147\176\333\375\070\315\271 -\070\116\262\301\140\313\235\027\337\130\236\172\142\262\046\217 -\164\225\233\344\133\035\322\017\335\230\034\233\131\271\043\323 -\061\240\246\377\070\335\317\040\117\351\130\126\072\147\303\321 -\366\231\231\235\272\066\266\200\057\210\107\117\206\277\104\072 -\200\344\067\034\246\272\352\227\230\021\320\204\142\107\144\036 -\252\356\100\277\064\261\234\217\116\341\362\222\117\037\216\363 -\236\227\336\363\246\171\152\211\161\117\113\047\027\110\376\354 -\364\120\017\117\111\175\314\105\343\275\172\100\305\101\334\141 -\126\047\006\151\345\162\101\201\323\266\001\211\240\057\072\162 -\171\376\072\060\277\101\354\307\142\076\221\113\307\331\061\166 -\102\371\367\074\143\354\046\214\163\014\175\032\035\352\250\174 -\207\250\302\047\174\341\063\101\017\317\317\374\000\240\042\200 -\236\112\247\157\000\260\101\105\267\042\312\150\110\305\102\242 -\256\335\035\362\340\156\116\005\130\261\300\220\026\052\244\075 -\020\100\276\217\142\143\203\251\234\202\175\055\002\351\203\060 -\174\313\047\311\375\036\146\000\260\056\323\041\057\216\063\026 -\154\230\355\020\250\007\326\314\223\317\333\321\151\034\344\312 -\311\340\266\234\351\316\161\161\336\154\077\026\244\171 +\060\202\006\024\060\202\003\374\240\003\002\001\002\002\010\033 +\160\351\322\377\256\154\161\060\015\006\011\052\206\110\206\367 +\015\001\001\013\005\000\060\121\061\013\060\011\006\003\125\004 +\006\023\002\105\123\061\102\060\100\006\003\125\004\003\014\071 +\101\165\164\157\162\151\144\141\144\040\144\145\040\103\145\162 +\164\151\146\151\143\141\143\151\157\156\040\106\151\162\155\141 +\160\162\157\146\145\163\151\157\156\141\154\040\103\111\106\040 +\101\066\062\066\063\064\060\066\070\060\036\027\015\061\064\060 +\071\062\063\061\065\062\062\060\067\132\027\015\063\066\060\065 +\060\065\061\065\062\062\060\067\132\060\121\061\013\060\011\006 +\003\125\004\006\023\002\105\123\061\102\060\100\006\003\125\004 +\003\014\071\101\165\164\157\162\151\144\141\144\040\144\145\040 +\103\145\162\164\151\146\151\143\141\143\151\157\156\040\106\151 +\162\155\141\160\162\157\146\145\163\151\157\156\141\154\040\103 +\111\106\040\101\066\062\066\063\064\060\066\070\060\202\002\042 +\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 +\202\002\017\000\060\202\002\012\002\202\002\001\000\312\226\153 +\216\352\370\373\361\242\065\340\177\114\332\340\303\122\327\175 +\266\020\310\002\136\263\103\052\304\117\152\262\312\034\135\050 +\232\170\021\032\151\131\127\257\265\040\102\344\213\017\346\337 +\133\246\003\222\057\365\021\344\142\327\062\161\070\331\004\014 +\161\253\075\121\176\017\007\337\143\005\134\351\277\224\157\301 +\051\202\300\264\332\121\260\301\074\273\255\067\112\134\312\361 +\113\066\016\044\253\277\303\204\167\375\250\120\364\261\347\306 +\057\322\055\131\215\172\012\116\226\151\122\002\252\066\230\354 +\374\372\024\203\014\067\037\311\222\067\177\327\201\055\345\304 +\271\340\076\064\376\147\364\076\146\321\323\364\100\317\136\142 +\064\017\160\006\076\040\030\132\316\367\162\033\045\154\223\164 +\024\223\243\163\261\016\252\207\020\043\131\137\040\005\031\107 +\355\150\216\222\022\312\135\374\326\053\262\222\074\040\317\341 +\137\257\040\276\240\166\177\166\345\354\032\206\141\063\076\347 +\173\264\077\240\017\216\242\271\152\157\271\207\046\157\101\154 +\210\246\120\375\152\143\013\365\223\026\033\031\217\262\355\233 +\233\311\220\365\001\014\337\031\075\017\076\070\043\311\057\217 +\014\321\002\376\033\125\326\116\320\215\074\257\117\244\363\376 +\257\052\323\005\235\171\010\241\313\127\061\264\234\310\220\262 +\147\364\030\026\223\072\374\107\330\321\170\226\061\037\272\053 +\014\137\135\231\255\143\211\132\044\040\166\330\337\375\253\116 +\246\042\252\235\136\346\047\212\175\150\051\243\347\212\270\332 +\021\273\027\055\231\235\023\044\106\367\305\342\330\237\216\177 +\307\217\164\155\132\262\350\162\365\254\356\044\020\255\057\024 +\332\377\055\232\106\161\107\276\102\337\273\001\333\364\177\323 +\050\217\061\131\133\323\311\002\246\264\122\312\156\227\373\103 +\305\010\046\157\212\364\273\375\237\050\252\015\325\105\363\023 +\072\035\330\300\170\217\101\147\074\036\224\144\256\173\013\305 +\350\331\001\210\071\032\227\206\144\101\325\073\207\014\156\372 +\017\306\275\110\024\277\071\115\324\236\101\266\217\226\035\143 +\226\223\331\225\006\170\061\150\236\067\006\073\200\211\105\141 +\071\043\307\033\104\243\025\345\034\370\222\060\273\002\003\001 +\000\001\243\201\357\060\201\354\060\035\006\003\125\035\016\004 +\026\004\024\145\315\353\253\065\036\000\076\176\325\164\300\034 +\264\163\107\016\032\144\057\060\022\006\003\125\035\023\001\001 +\377\004\010\060\006\001\001\377\002\001\001\060\201\246\006\003 +\125\035\040\004\201\236\060\201\233\060\201\230\006\004\125\035 +\040\000\060\201\217\060\057\006\010\053\006\001\005\005\007\002 +\001\026\043\150\164\164\160\072\057\057\167\167\167\056\146\151 +\162\155\141\160\162\157\146\145\163\151\157\156\141\154\056\143 +\157\155\057\143\160\163\060\134\006\010\053\006\001\005\005\007 +\002\002\060\120\036\116\000\120\000\141\000\163\000\145\000\157 +\000\040\000\144\000\145\000\040\000\154\000\141\000\040\000\102 +\000\157\000\156\000\141\000\156\000\157\000\166\000\141\000\040 +\000\064\000\067\000\040\000\102\000\141\000\162\000\143\000\145 +\000\154\000\157\000\156\000\141\000\040\000\060\000\070\000\060 +\000\061\000\067\060\016\006\003\125\035\017\001\001\377\004\004 +\003\002\001\006\060\015\006\011\052\206\110\206\367\015\001\001 +\013\005\000\003\202\002\001\000\164\207\050\002\053\167\037\146 +\211\144\355\217\164\056\106\034\273\250\370\370\013\035\203\266 +\072\247\350\105\212\007\267\340\076\040\313\341\010\333\023\010 +\370\050\241\065\262\200\263\013\121\300\323\126\232\215\063\105 +\111\257\111\360\340\075\007\172\105\023\132\377\310\227\330\323 +\030\054\175\226\370\335\242\145\103\160\223\220\025\272\220\337 +\350\031\260\333\054\212\140\017\267\157\224\007\036\035\246\311 +\205\366\275\064\370\100\170\142\020\160\072\276\175\113\071\201 +\251\020\324\226\101\273\370\137\034\013\035\010\362\261\260\211 +\172\362\367\240\340\304\217\213\170\265\073\130\245\043\216\117 +\125\376\066\073\340\014\267\312\052\060\101\040\264\200\315\256 +\374\166\146\163\250\256\156\341\174\332\003\350\224\040\346\042 +\243\320\037\220\135\040\123\024\046\127\332\124\227\337\026\104 +\020\001\036\210\146\217\162\070\223\335\040\267\064\276\327\361 +\356\143\216\107\171\050\006\374\363\131\105\045\140\042\063\033 +\243\137\250\272\052\332\032\075\315\100\352\214\356\005\025\225 +\325\245\054\040\057\247\230\050\356\105\374\361\270\210\000\054 +\217\102\332\121\325\234\345\023\150\161\105\103\213\236\013\041 +\074\113\134\005\334\032\237\230\216\332\275\042\236\162\315\255 +\012\313\314\243\147\233\050\164\304\233\327\032\074\004\130\246 +\202\235\255\307\173\157\377\200\226\351\370\215\152\275\030\220 +\035\377\111\032\220\122\067\223\057\074\002\135\202\166\013\121 +\347\026\307\127\370\070\371\247\315\233\042\124\357\143\260\025 +\155\123\145\003\112\136\112\240\262\247\216\111\000\131\070\325 +\307\364\200\144\365\156\225\120\270\021\176\025\160\070\112\260 +\177\320\304\062\160\300\031\377\311\070\055\024\054\146\364\102 +\104\346\125\166\033\200\025\127\377\300\247\247\252\071\252\330 +\323\160\320\056\272\353\224\152\372\137\064\206\347\142\265\375 +\212\360\060\205\224\311\257\044\002\057\157\326\335\147\376\343 +\260\125\117\004\230\117\244\101\126\342\223\320\152\350\326\363 +\373\145\340\316\165\304\061\131\014\356\202\310\014\140\063\112 +\031\272\204\147\047\017\274\102\135\275\044\124\015\354\035\160 +\006\137\244\274\372\040\174\125 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Trustwave Global Certification Authority" -# Issuer: CN=Trustwave Global Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Serial Number:05:f7:0e:86:da:49:f3:46:35:2e:ba:b2 -# Subject: CN=Trustwave Global Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Not Valid Before: Wed Aug 23 19:34:12 2017 -# Not Valid After : Sat Aug 23 19:34:12 2042 -# Fingerprint (SHA-256): 97:55:20:15:F5:DD:FC:3C:87:88:C0:06:94:45:55:40:88:94:45:00:84:F1:00:86:70:86:BC:1A:2B:B5:8D:C8 -# Fingerprint (SHA1): 2F:8F:36:4F:E1:58:97:44:21:59:87:A5:2A:9A:D0:69:95:26:7F:B5 +# Trust for "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068,C=ES +# Serial Number:1b:70:e9:d2:ff:ae:6c:71 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068,C=ES +# Not Valid Before: Tue Sep 23 15:22:07 2014 +# Not Valid After : Mon May 05 15:22:07 2036 +# Fingerprint (SHA-256): 57:DE:05:83:EF:D2:B2:6E:03:61:DA:99:DA:9D:F4:64:8D:EF:7E:E8:44:1C:3B:72:8A:FA:9B:CD:E0:F9:B2:6A +# Fingerprint (SHA1): 0B:BE:C2:27:22:49:CB:39:AA:DB:35:5C:53:E3:8C:AE:78:FF:B6:FE CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Trustwave Global Certification Authority" +CKA_LABEL UTF8 "Autoridad de Certificacion Firmaprofesional CIF A62634068" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\057\217\066\117\341\130\227\104\041\131\207\245\052\232\320\151 -\225\046\177\265 +\013\276\302\047\042\111\313\071\252\333\065\134\123\343\214\256 +\170\377\266\376 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\370\034\030\055\057\272\137\155\241\154\274\307\253\221\307\016 +\116\156\233\124\114\312\267\372\110\344\220\261\025\113\034\243 END CKA_ISSUER MULTILINE_OCTAL -\060\201\210\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\014\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\014\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\014\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\061\060\057\006\003\125\004 -\003\014\050\124\162\165\163\164\167\141\166\145\040\107\154\157 -\142\141\154\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171 +\060\121\061\013\060\011\006\003\125\004\006\023\002\105\123\061 +\102\060\100\006\003\125\004\003\014\071\101\165\164\157\162\151 +\144\141\144\040\144\145\040\103\145\162\164\151\146\151\143\141 +\143\151\157\156\040\106\151\162\155\141\160\162\157\146\145\163 +\151\157\156\141\154\040\103\111\106\040\101\066\062\066\063\064 +\060\066\070 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\014\005\367\016\206\332\111\363\106\065\056\272\262 +\002\010\033\160\351\322\377\256\154\161 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR @@ -20537,435 +21567,554 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Trustwave Global ECC P256 Certification Authority" +# Certificate "vTrus ECC Root CA" # -# Issuer: CN=Trustwave Global ECC P256 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Serial Number:0d:6a:5f:08:3f:28:5c:3e:51:95:df:5d -# Subject: CN=Trustwave Global ECC P256 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Not Valid Before: Wed Aug 23 19:35:10 2017 -# Not Valid After : Sat Aug 23 19:35:10 2042 -# Fingerprint (SHA-256): 94:5B:BC:82:5E:A5:54:F4:89:D1:FD:51:A7:3D:DF:2E:A6:24:AC:70:19:A0:52:05:22:5C:22:A7:8C:CF:A8:B4 -# Fingerprint (SHA1): B4:90:82:DD:45:0C:BE:8B:5B:B1:66:D3:E2:A4:08:26:CD:ED:42:CF +# Issuer: CN=vTrus ECC Root CA,O="iTrusChina Co.,Ltd.",C=CN +# Serial Number:6e:6a:bc:59:aa:53:be:98:39:67:a2:d2:6b:a4:3b:e6:6d:1c:d6:da +# Subject: CN=vTrus ECC Root CA,O="iTrusChina Co.,Ltd.",C=CN +# Not Valid Before: Tue Jul 31 07:26:44 2018 +# Not Valid After : Fri Jul 31 07:26:44 2043 +# Fingerprint (SHA-256): 30:FB:BA:2C:32:23:8E:2A:98:54:7A:F9:79:31:E5:50:42:8B:9B:3F:1C:8E:EB:66:33:DC:FA:86:C5:B2:7D:D3 +# Fingerprint (SHA1): F6:9C:DB:B0:FC:F6:02:13:B6:52:32:A6:A3:91:3F:16:70:DA:C3:E1 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Trustwave Global ECC P256 Certification Authority" +CKA_LABEL UTF8 "vTrus ECC Root CA" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 -\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 -\142\141\154\040\105\103\103\040\120\062\065\066\040\103\145\162 -\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 -\162\151\164\171 +\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\034\060\032\006\003\125\004\012\023\023\151\124\162\165\163\103 +\150\151\156\141\040\103\157\056\054\114\164\144\056\061\032\060 +\030\006\003\125\004\003\023\021\166\124\162\165\163\040\105\103 +\103\040\122\157\157\164\040\103\101 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 -\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 -\142\141\154\040\105\103\103\040\120\062\065\066\040\103\145\162 -\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 -\162\151\164\171 +\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\034\060\032\006\003\125\004\012\023\023\151\124\162\165\163\103 +\150\151\156\141\040\103\157\056\054\114\164\144\056\061\032\060 +\030\006\003\125\004\003\023\021\166\124\162\165\163\040\105\103 +\103\040\122\157\157\164\040\103\101 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\014\015\152\137\010\077\050\134\076\121\225\337\135 +\002\024\156\152\274\131\252\123\276\230\071\147\242\322\153\244 +\073\346\155\034\326\332 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\140\060\202\002\007\240\003\002\001\002\002\014\015 -\152\137\010\077\050\134\076\121\225\337\135\060\012\006\010\052 -\206\110\316\075\004\003\002\060\201\221\061\013\060\011\006\003 -\125\004\006\023\002\125\123\061\021\060\017\006\003\125\004\010 -\023\010\111\154\154\151\156\157\151\163\061\020\060\016\006\003 -\125\004\007\023\007\103\150\151\143\141\147\157\061\041\060\037 -\006\003\125\004\012\023\030\124\162\165\163\164\167\141\166\145 -\040\110\157\154\144\151\156\147\163\054\040\111\156\143\056\061 -\072\060\070\006\003\125\004\003\023\061\124\162\165\163\164\167 -\141\166\145\040\107\154\157\142\141\154\040\105\103\103\040\120 -\062\065\066\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\060\036\027\015\061 -\067\060\070\062\063\061\071\063\065\061\060\132\027\015\064\062 -\060\070\062\063\061\071\063\065\061\060\132\060\201\221\061\013 -\060\011\006\003\125\004\006\023\002\125\123\061\021\060\017\006 -\003\125\004\010\023\010\111\154\154\151\156\157\151\163\061\020 -\060\016\006\003\125\004\007\023\007\103\150\151\143\141\147\157 -\061\041\060\037\006\003\125\004\012\023\030\124\162\165\163\164 -\167\141\166\145\040\110\157\154\144\151\156\147\163\054\040\111 -\156\143\056\061\072\060\070\006\003\125\004\003\023\061\124\162 -\165\163\164\167\141\166\145\040\107\154\157\142\141\154\040\105 -\103\103\040\120\062\065\066\040\103\145\162\164\151\146\151\143 -\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171\060 -\131\060\023\006\007\052\206\110\316\075\002\001\006\010\052\206 -\110\316\075\003\001\007\003\102\000\004\176\373\154\346\043\343 -\163\062\010\312\140\346\123\234\272\164\215\030\260\170\220\122 -\200\335\070\300\112\035\321\250\314\223\244\227\006\070\312\015 -\025\142\306\216\001\052\145\235\252\337\064\221\056\201\301\344 -\063\222\061\304\375\011\072\246\077\255\243\103\060\101\060\017 -\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 -\017\006\003\125\035\017\001\001\377\004\005\003\003\007\006\000 -\060\035\006\003\125\035\016\004\026\004\024\243\101\006\254\220 -\155\321\112\353\165\245\112\020\231\263\261\241\213\112\367\060 -\012\006\010\052\206\110\316\075\004\003\002\003\107\000\060\104 -\002\040\007\346\124\332\016\240\132\262\256\021\237\207\305\266 -\377\151\336\045\276\370\240\267\010\363\104\316\052\337\010\041 -\014\067\002\040\055\046\003\240\005\275\153\321\366\134\370\145 -\314\206\155\263\234\064\110\143\204\011\305\215\167\032\342\314 -\234\341\164\173 +\060\202\002\017\060\202\001\225\240\003\002\001\002\002\024\156 +\152\274\131\252\123\276\230\071\147\242\322\153\244\073\346\155 +\034\326\332\060\012\006\010\052\206\110\316\075\004\003\003\060 +\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061\034 +\060\032\006\003\125\004\012\023\023\151\124\162\165\163\103\150 +\151\156\141\040\103\157\056\054\114\164\144\056\061\032\060\030 +\006\003\125\004\003\023\021\166\124\162\165\163\040\105\103\103 +\040\122\157\157\164\040\103\101\060\036\027\015\061\070\060\067 +\063\061\060\067\062\066\064\064\132\027\015\064\063\060\067\063 +\061\060\067\062\066\064\064\132\060\107\061\013\060\011\006\003 +\125\004\006\023\002\103\116\061\034\060\032\006\003\125\004\012 +\023\023\151\124\162\165\163\103\150\151\156\141\040\103\157\056 +\054\114\164\144\056\061\032\060\030\006\003\125\004\003\023\021 +\166\124\162\165\163\040\105\103\103\040\122\157\157\164\040\103 +\101\060\166\060\020\006\007\052\206\110\316\075\002\001\006\005 +\053\201\004\000\042\003\142\000\004\145\120\112\256\214\171\226 +\112\252\034\010\303\243\242\315\376\131\126\101\167\375\046\224 +\102\273\035\315\010\333\163\262\133\165\363\317\234\116\202\364 +\277\370\141\046\205\154\326\205\133\162\160\322\375\333\142\264 +\337\123\213\275\261\104\130\142\102\011\307\372\177\133\020\347 +\376\100\375\300\330\303\053\062\347\160\246\267\246\040\125\035 +\173\200\135\113\217\147\114\361\020\243\102\060\100\060\035\006 +\003\125\035\016\004\026\004\024\230\071\315\276\330\262\214\367 +\262\253\341\255\044\257\173\174\241\333\037\317\060\017\006\003 +\125\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006 +\003\125\035\017\001\001\377\004\004\003\002\001\006\060\012\006 +\010\052\206\110\316\075\004\003\003\003\150\000\060\145\002\060 +\127\235\335\126\361\307\343\351\270\111\120\153\233\151\303\157 +\354\303\175\045\344\127\225\023\100\233\122\323\073\363\100\031 +\274\046\307\055\006\236\265\173\066\237\365\045\324\143\153\000 +\002\061\000\351\323\306\236\126\232\052\314\241\332\077\310\146 +\053\323\130\234\040\205\372\253\221\212\160\160\021\070\140\144 +\013\142\011\221\130\000\371\115\373\064\150\332\011\255\041\006 +\030\224\316 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Trustwave Global ECC P256 Certification Authority" -# Issuer: CN=Trustwave Global ECC P256 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Serial Number:0d:6a:5f:08:3f:28:5c:3e:51:95:df:5d -# Subject: CN=Trustwave Global ECC P256 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Not Valid Before: Wed Aug 23 19:35:10 2017 -# Not Valid After : Sat Aug 23 19:35:10 2042 -# Fingerprint (SHA-256): 94:5B:BC:82:5E:A5:54:F4:89:D1:FD:51:A7:3D:DF:2E:A6:24:AC:70:19:A0:52:05:22:5C:22:A7:8C:CF:A8:B4 -# Fingerprint (SHA1): B4:90:82:DD:45:0C:BE:8B:5B:B1:66:D3:E2:A4:08:26:CD:ED:42:CF +# Trust for "vTrus ECC Root CA" +# Issuer: CN=vTrus ECC Root CA,O="iTrusChina Co.,Ltd.",C=CN +# Serial Number:6e:6a:bc:59:aa:53:be:98:39:67:a2:d2:6b:a4:3b:e6:6d:1c:d6:da +# Subject: CN=vTrus ECC Root CA,O="iTrusChina Co.,Ltd.",C=CN +# Not Valid Before: Tue Jul 31 07:26:44 2018 +# Not Valid After : Fri Jul 31 07:26:44 2043 +# Fingerprint (SHA-256): 30:FB:BA:2C:32:23:8E:2A:98:54:7A:F9:79:31:E5:50:42:8B:9B:3F:1C:8E:EB:66:33:DC:FA:86:C5:B2:7D:D3 +# Fingerprint (SHA1): F6:9C:DB:B0:FC:F6:02:13:B6:52:32:A6:A3:91:3F:16:70:DA:C3:E1 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Trustwave Global ECC P256 Certification Authority" +CKA_LABEL UTF8 "vTrus ECC Root CA" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\264\220\202\335\105\014\276\213\133\261\146\323\342\244\010\046 -\315\355\102\317 +\366\234\333\260\374\366\002\023\266\122\062\246\243\221\077\026 +\160\332\303\341 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\133\104\343\215\135\066\206\046\350\015\005\322\131\247\203\124 +\336\113\301\365\122\214\233\103\341\076\217\125\124\027\215\205 END CKA_ISSUER MULTILINE_OCTAL -\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 -\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 -\142\141\154\040\105\103\103\040\120\062\065\066\040\103\145\162 -\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 -\162\151\164\171 +\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\034\060\032\006\003\125\004\012\023\023\151\124\162\165\163\103 +\150\151\156\141\040\103\157\056\054\114\164\144\056\061\032\060 +\030\006\003\125\004\003\023\021\166\124\162\165\163\040\105\103 +\103\040\122\157\157\164\040\103\101 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\014\015\152\137\010\077\050\134\076\121\225\337\135 +\002\024\156\152\274\131\252\123\276\230\071\147\242\322\153\244 +\073\346\155\034\326\332 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Trustwave Global ECC P384 Certification Authority" +# Certificate "vTrus Root CA" # -# Issuer: CN=Trustwave Global ECC P384 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Serial Number:08:bd:85:97:6c:99:27:a4:80:68:47:3b -# Subject: CN=Trustwave Global ECC P384 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Not Valid Before: Wed Aug 23 19:36:43 2017 -# Not Valid After : Sat Aug 23 19:36:43 2042 -# Fingerprint (SHA-256): 55:90:38:59:C8:C0:C3:EB:B8:75:9E:CE:4E:25:57:22:5F:F5:75:8B:BD:38:EB:D4:82:76:60:1E:1B:D5:80:97 -# Fingerprint (SHA1): E7:F3:A3:C8:CF:6F:C3:04:2E:6D:0E:67:32:C5:9E:68:95:0D:5E:D2 +# Issuer: CN=vTrus Root CA,O="iTrusChina Co.,Ltd.",C=CN +# Serial Number:43:e3:71:13:d8:b3:59:14:5d:b7:ce:8c:fd:35:fd:6f:bc:05:8d:45 +# Subject: CN=vTrus Root CA,O="iTrusChina Co.,Ltd.",C=CN +# Not Valid Before: Tue Jul 31 07:24:05 2018 +# Not Valid After : Fri Jul 31 07:24:05 2043 +# Fingerprint (SHA-256): 8A:71:DE:65:59:33:6F:42:6C:26:E5:38:80:D0:0D:88:A1:8D:A4:C6:A9:1F:0D:CB:61:94:E2:06:C5:C9:63:87 +# Fingerprint (SHA1): 84:1A:69:FB:F5:CD:1A:25:34:13:3D:E3:F8:FC:B8:99:D0:C9:14:B7 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Trustwave Global ECC P384 Certification Authority" +CKA_LABEL UTF8 "vTrus Root CA" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 -\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 -\142\141\154\040\105\103\103\040\120\063\070\064\040\103\145\162 -\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 -\162\151\164\171 +\060\103\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\034\060\032\006\003\125\004\012\023\023\151\124\162\165\163\103 +\150\151\156\141\040\103\157\056\054\114\164\144\056\061\026\060 +\024\006\003\125\004\003\023\015\166\124\162\165\163\040\122\157 +\157\164\040\103\101 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 -\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 -\142\141\154\040\105\103\103\040\120\063\070\064\040\103\145\162 -\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 -\162\151\164\171 +\060\103\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\034\060\032\006\003\125\004\012\023\023\151\124\162\165\163\103 +\150\151\156\141\040\103\157\056\054\114\164\144\056\061\026\060 +\024\006\003\125\004\003\023\015\166\124\162\165\163\040\122\157 +\157\164\040\103\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\024\103\343\161\023\330\263\131\024\135\267\316\214\375\065 +\375\157\274\005\215\105 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\126\060\202\003\076\240\003\002\001\002\002\024\103 +\343\161\023\330\263\131\024\135\267\316\214\375\065\375\157\274 +\005\215\105\060\015\006\011\052\206\110\206\367\015\001\001\013 +\005\000\060\103\061\013\060\011\006\003\125\004\006\023\002\103 +\116\061\034\060\032\006\003\125\004\012\023\023\151\124\162\165 +\163\103\150\151\156\141\040\103\157\056\054\114\164\144\056\061 +\026\060\024\006\003\125\004\003\023\015\166\124\162\165\163\040 +\122\157\157\164\040\103\101\060\036\027\015\061\070\060\067\063 +\061\060\067\062\064\060\065\132\027\015\064\063\060\067\063\061 +\060\067\062\064\060\065\132\060\103\061\013\060\011\006\003\125 +\004\006\023\002\103\116\061\034\060\032\006\003\125\004\012\023 +\023\151\124\162\165\163\103\150\151\156\141\040\103\157\056\054 +\114\164\144\056\061\026\060\024\006\003\125\004\003\023\015\166 +\124\162\165\163\040\122\157\157\164\040\103\101\060\202\002\042 +\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 +\202\002\017\000\060\202\002\012\002\202\002\001\000\275\125\174 +\141\323\270\035\004\142\005\240\256\154\267\160\264\101\352\113 +\003\136\020\077\220\132\034\213\073\260\146\213\154\110\246\034 +\042\272\325\100\222\356\063\262\043\131\311\216\274\130\332\213 +\236\320\031\362\057\131\306\214\143\132\272\237\243\013\260\263 +\232\134\272\021\270\022\351\014\273\317\156\154\200\207\051\024 +\003\054\215\044\232\310\144\203\265\152\254\023\054\063\361\237 +\334\054\141\074\032\077\160\125\233\255\000\122\177\317\004\271 +\376\066\372\234\300\026\256\142\376\226\114\103\176\125\024\276 +\032\263\322\155\302\257\166\146\225\153\052\260\224\167\205\136 +\004\017\142\035\143\165\367\153\347\313\133\232\160\354\076\147 +\005\360\376\007\010\200\317\050\333\005\306\024\047\057\206\175 +\360\047\336\377\346\176\063\110\347\013\036\130\321\047\053\123 +\016\127\112\145\327\373\242\200\140\374\114\274\065\123\001\152 +\227\162\202\257\361\035\160\350\234\365\357\136\302\154\307\107 +\176\132\224\205\046\115\073\272\353\114\350\260\011\302\145\302 +\235\235\011\233\116\265\227\005\254\365\006\240\367\066\005\176 +\364\220\262\153\304\264\371\144\352\351\032\012\310\015\250\355 +\047\311\324\347\263\271\253\202\042\220\047\075\052\350\174\220 +\357\274\117\375\342\012\044\247\336\145\044\244\135\352\300\166 +\060\323\167\120\370\015\004\233\224\066\001\163\312\006\130\246 +\323\073\334\372\004\106\023\125\212\311\104\107\270\121\071\032 +\056\350\064\342\171\313\131\112\012\177\274\246\357\037\003\147 +\152\131\053\045\142\223\331\123\031\146\074\047\142\051\206\115 +\244\153\356\377\324\116\272\325\264\342\216\110\132\000\031\011 +\361\005\331\316\221\261\367\353\351\071\117\366\157\004\103\232 +\125\365\076\005\024\275\277\263\131\264\330\216\063\204\243\220 +\122\252\263\002\225\140\371\014\114\150\371\356\325\027\015\370 +\161\127\265\045\344\051\356\145\135\257\321\356\074\027\013\132 +\103\305\245\206\352\044\236\342\005\007\334\064\102\022\221\326 +\071\164\256\114\101\202\333\362\246\110\321\263\233\363\063\252 +\363\246\300\305\116\365\364\235\166\143\346\002\306\042\113\301 +\225\077\120\144\054\124\345\266\360\074\051\317\127\002\003\001 +\000\001\243\102\060\100\060\035\006\003\125\035\016\004\026\004 +\024\124\142\160\143\361\165\204\103\130\216\321\026\040\261\306 +\254\032\274\366\211\060\017\006\003\125\035\023\001\001\377\004 +\005\060\003\001\001\377\060\016\006\003\125\035\017\001\001\377 +\004\004\003\002\001\006\060\015\006\011\052\206\110\206\367\015 +\001\001\013\005\000\003\202\002\001\000\051\272\222\111\247\255 +\360\361\160\303\344\227\360\237\251\045\325\153\236\064\376\346 +\032\144\366\072\153\122\262\020\170\032\237\114\332\212\332\354 +\034\067\122\340\102\113\373\154\166\312\044\013\071\022\025\235 +\237\021\055\374\171\144\334\340\340\365\335\340\127\311\245\262 +\166\160\120\244\376\267\012\160\325\240\064\361\165\327\115\111 +\272\021\321\263\330\354\202\377\353\016\304\277\144\055\175\143 +\156\027\170\354\135\174\210\310\353\216\127\166\331\131\004\372 +\274\122\037\105\254\360\172\200\354\354\157\166\256\221\333\020 +\216\004\334\222\337\240\366\346\256\111\323\301\154\022\033\314 +\051\252\371\010\245\342\067\024\312\261\270\146\357\032\202\344 +\360\370\361\247\026\151\267\333\251\141\074\237\365\061\313\344 +\000\106\302\057\164\261\261\327\201\356\250\046\225\274\210\257 +\114\065\007\052\002\312\170\024\155\107\053\100\126\351\313\052 +\140\241\147\003\240\316\214\274\260\162\147\304\061\316\333\064 +\345\045\003\140\045\173\161\230\344\300\033\053\137\164\102\322 +\113\305\131\010\007\207\276\305\303\177\347\226\331\341\334\050 +\227\326\217\005\343\365\233\116\312\035\120\107\005\123\260\312 +\071\347\205\240\211\301\005\073\001\067\323\077\111\342\167\353 +\043\310\210\146\073\075\071\166\041\106\361\354\137\043\270\353 +\242\146\165\164\301\100\367\330\150\232\223\342\055\251\056\275 +\034\243\036\310\164\306\244\055\172\040\253\073\270\260\106\375 +\157\335\137\122\125\165\142\360\227\240\174\327\070\375\045\337 +\315\240\233\020\317\213\270\070\136\136\305\264\246\002\066\241 +\036\137\034\317\342\226\235\051\252\375\230\256\122\341\363\101 +\122\373\251\056\162\226\237\047\343\252\163\175\370\032\043\146 +\173\073\253\145\260\062\001\113\025\076\075\242\117\014\053\065 +\242\306\331\147\022\065\060\315\166\056\026\263\231\236\115\117 +\116\055\073\064\103\341\232\016\015\244\146\227\272\322\034\112 +\114\054\052\213\213\201\117\161\032\251\335\134\173\173\010\305 +\000\015\067\100\343\174\173\124\137\057\205\137\166\366\367\247 +\260\034\127\126\301\162\350\255\242\257\215\063\111\272\037\212 +\334\346\164\174\140\206\157\207\227\173 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "vTrus Root CA" +# Issuer: CN=vTrus Root CA,O="iTrusChina Co.,Ltd.",C=CN +# Serial Number:43:e3:71:13:d8:b3:59:14:5d:b7:ce:8c:fd:35:fd:6f:bc:05:8d:45 +# Subject: CN=vTrus Root CA,O="iTrusChina Co.,Ltd.",C=CN +# Not Valid Before: Tue Jul 31 07:24:05 2018 +# Not Valid After : Fri Jul 31 07:24:05 2043 +# Fingerprint (SHA-256): 8A:71:DE:65:59:33:6F:42:6C:26:E5:38:80:D0:0D:88:A1:8D:A4:C6:A9:1F:0D:CB:61:94:E2:06:C5:C9:63:87 +# Fingerprint (SHA1): 84:1A:69:FB:F5:CD:1A:25:34:13:3D:E3:F8:FC:B8:99:D0:C9:14:B7 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "vTrus Root CA" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\204\032\151\373\365\315\032\045\064\023\075\343\370\374\270\231 +\320\311\024\267 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\270\311\067\337\372\153\061\204\144\305\352\021\152\033\165\374 +END +CKA_ISSUER MULTILINE_OCTAL +\060\103\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\034\060\032\006\003\125\004\012\023\023\151\124\162\165\163\103 +\150\151\156\141\040\103\157\056\054\114\164\144\056\061\026\060 +\024\006\003\125\004\003\023\015\166\124\162\165\163\040\122\157 +\157\164\040\103\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\024\103\343\161\023\330\263\131\024\135\267\316\214\375\065 +\375\157\274\005\215\105 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "ISRG Root X2" +# +# Issuer: CN=ISRG Root X2,O=Internet Security Research Group,C=US +# Serial Number:41:d2:9d:d1:72:ea:ee:a7:80:c1:2c:6c:e9:2f:87:52 +# Subject: CN=ISRG Root X2,O=Internet Security Research Group,C=US +# Not Valid Before: Fri Sep 04 00:00:00 2020 +# Not Valid After : Mon Sep 17 16:00:00 2040 +# Fingerprint (SHA-256): 69:72:9B:8E:15:A8:6E:FC:17:7A:57:AF:B7:17:1D:FC:64:AD:D2:8C:2F:CA:8C:F1:50:7E:34:45:3C:CB:14:70 +# Fingerprint (SHA1): BD:B1:B9:3C:D5:97:8D:45:C6:26:14:55:F8:DB:95:C7:5A:D1:53:AF +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "ISRG Root X2" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\117\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\051\060\047\006\003\125\004\012\023\040\111\156\164\145\162\156 +\145\164\040\123\145\143\165\162\151\164\171\040\122\145\163\145 +\141\162\143\150\040\107\162\157\165\160\061\025\060\023\006\003 +\125\004\003\023\014\111\123\122\107\040\122\157\157\164\040\130 +\062 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\117\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\051\060\047\006\003\125\004\012\023\040\111\156\164\145\162\156 +\145\164\040\123\145\143\165\162\151\164\171\040\122\145\163\145 +\141\162\143\150\040\107\162\157\165\160\061\025\060\023\006\003 +\125\004\003\023\014\111\123\122\107\040\122\157\157\164\040\130 +\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\014\010\275\205\227\154\231\047\244\200\150\107\073 +\002\020\101\322\235\321\162\352\356\247\200\301\054\154\351\057 +\207\122 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\235\060\202\002\044\240\003\002\001\002\002\014\010 -\275\205\227\154\231\047\244\200\150\107\073\060\012\006\010\052 -\206\110\316\075\004\003\003\060\201\221\061\013\060\011\006\003 -\125\004\006\023\002\125\123\061\021\060\017\006\003\125\004\010 -\023\010\111\154\154\151\156\157\151\163\061\020\060\016\006\003 -\125\004\007\023\007\103\150\151\143\141\147\157\061\041\060\037 -\006\003\125\004\012\023\030\124\162\165\163\164\167\141\166\145 -\040\110\157\154\144\151\156\147\163\054\040\111\156\143\056\061 -\072\060\070\006\003\125\004\003\023\061\124\162\165\163\164\167 -\141\166\145\040\107\154\157\142\141\154\040\105\103\103\040\120 -\063\070\064\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\060\036\027\015\061 -\067\060\070\062\063\061\071\063\066\064\063\132\027\015\064\062 -\060\070\062\063\061\071\063\066\064\063\132\060\201\221\061\013 -\060\011\006\003\125\004\006\023\002\125\123\061\021\060\017\006 -\003\125\004\010\023\010\111\154\154\151\156\157\151\163\061\020 -\060\016\006\003\125\004\007\023\007\103\150\151\143\141\147\157 -\061\041\060\037\006\003\125\004\012\023\030\124\162\165\163\164 -\167\141\166\145\040\110\157\154\144\151\156\147\163\054\040\111 -\156\143\056\061\072\060\070\006\003\125\004\003\023\061\124\162 -\165\163\164\167\141\166\145\040\107\154\157\142\141\154\040\105 -\103\103\040\120\063\070\064\040\103\145\162\164\151\146\151\143 -\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171\060 -\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 -\004\000\042\003\142\000\004\153\332\015\165\065\010\061\107\005 -\256\105\231\125\361\021\023\056\112\370\020\061\043\243\176\203 -\323\177\050\010\072\046\032\072\317\227\202\037\200\267\047\011 -\217\321\216\060\304\012\233\016\254\130\004\253\367\066\175\224 -\043\244\233\012\212\213\253\353\375\071\045\146\361\136\376\214 -\256\215\101\171\235\011\140\316\050\251\323\212\155\363\326\105 -\324\362\230\204\070\145\240\243\103\060\101\060\017\006\003\125 -\035\023\001\001\377\004\005\060\003\001\001\377\060\017\006\003 -\125\035\017\001\001\377\004\005\003\003\007\006\000\060\035\006 -\003\125\035\016\004\026\004\024\125\251\204\211\322\301\062\275 -\030\313\154\246\007\116\310\347\235\276\202\220\060\012\006\010 -\052\206\110\316\075\004\003\003\003\147\000\060\144\002\060\067 -\001\222\227\105\022\176\240\363\076\255\031\072\162\335\364\120 -\223\003\022\276\104\322\117\101\244\214\234\235\037\243\366\302 -\222\347\110\024\376\116\233\245\221\127\256\306\067\162\273\002 -\060\147\045\012\261\014\136\356\251\143\222\157\345\220\013\376 -\146\042\312\107\375\212\061\367\203\376\172\277\020\276\030\053 -\036\217\366\051\036\224\131\357\216\041\067\313\121\230\245\156 -\113 +\060\202\002\033\060\202\001\241\240\003\002\001\002\002\020\101 +\322\235\321\162\352\356\247\200\301\054\154\351\057\207\122\060 +\012\006\010\052\206\110\316\075\004\003\003\060\117\061\013\060 +\011\006\003\125\004\006\023\002\125\123\061\051\060\047\006\003 +\125\004\012\023\040\111\156\164\145\162\156\145\164\040\123\145 +\143\165\162\151\164\171\040\122\145\163\145\141\162\143\150\040 +\107\162\157\165\160\061\025\060\023\006\003\125\004\003\023\014 +\111\123\122\107\040\122\157\157\164\040\130\062\060\036\027\015 +\062\060\060\071\060\064\060\060\060\060\060\060\132\027\015\064 +\060\060\071\061\067\061\066\060\060\060\060\132\060\117\061\013 +\060\011\006\003\125\004\006\023\002\125\123\061\051\060\047\006 +\003\125\004\012\023\040\111\156\164\145\162\156\145\164\040\123 +\145\143\165\162\151\164\171\040\122\145\163\145\141\162\143\150 +\040\107\162\157\165\160\061\025\060\023\006\003\125\004\003\023 +\014\111\123\122\107\040\122\157\157\164\040\130\062\060\166\060 +\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000 +\042\003\142\000\004\315\233\325\237\200\203\012\354\011\112\363 +\026\112\076\134\317\167\254\336\147\005\015\035\007\266\334\026 +\373\132\213\024\333\342\161\140\304\272\105\225\021\211\216\352 +\006\337\367\052\026\034\244\271\305\305\062\340\003\340\036\202 +\030\070\213\327\105\330\012\152\156\346\000\167\373\002\121\175 +\042\330\012\156\232\133\167\337\360\372\101\354\071\334\165\312 +\150\007\014\037\352\243\102\060\100\060\016\006\003\125\035\017 +\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023 +\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035 +\016\004\026\004\024\174\102\226\256\336\113\110\073\372\222\370 +\236\214\317\155\213\251\162\067\225\060\012\006\010\052\206\110 +\316\075\004\003\003\003\150\000\060\145\002\060\173\171\116\106 +\120\204\302\104\207\106\033\105\160\377\130\231\336\364\375\244 +\322\125\246\040\055\164\326\064\274\101\243\120\137\001\047\126 +\264\276\047\165\006\257\022\056\165\230\215\374\002\061\000\213 +\365\167\154\324\310\145\252\340\013\054\356\024\235\047\067\244 +\371\123\245\121\344\051\203\327\370\220\061\133\102\237\012\365 +\376\256\000\150\347\214\111\017\266\157\133\133\025\362\347 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Trustwave Global ECC P384 Certification Authority" -# Issuer: CN=Trustwave Global ECC P384 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Serial Number:08:bd:85:97:6c:99:27:a4:80:68:47:3b -# Subject: CN=Trustwave Global ECC P384 Certification Authority,O="Trustwave Holdings, Inc.",L=Chicago,ST=Illinois,C=US -# Not Valid Before: Wed Aug 23 19:36:43 2017 -# Not Valid After : Sat Aug 23 19:36:43 2042 -# Fingerprint (SHA-256): 55:90:38:59:C8:C0:C3:EB:B8:75:9E:CE:4E:25:57:22:5F:F5:75:8B:BD:38:EB:D4:82:76:60:1E:1B:D5:80:97 -# Fingerprint (SHA1): E7:F3:A3:C8:CF:6F:C3:04:2E:6D:0E:67:32:C5:9E:68:95:0D:5E:D2 +# Trust for "ISRG Root X2" +# Issuer: CN=ISRG Root X2,O=Internet Security Research Group,C=US +# Serial Number:41:d2:9d:d1:72:ea:ee:a7:80:c1:2c:6c:e9:2f:87:52 +# Subject: CN=ISRG Root X2,O=Internet Security Research Group,C=US +# Not Valid Before: Fri Sep 04 00:00:00 2020 +# Not Valid After : Mon Sep 17 16:00:00 2040 +# Fingerprint (SHA-256): 69:72:9B:8E:15:A8:6E:FC:17:7A:57:AF:B7:17:1D:FC:64:AD:D2:8C:2F:CA:8C:F1:50:7E:34:45:3C:CB:14:70 +# Fingerprint (SHA1): BD:B1:B9:3C:D5:97:8D:45:C6:26:14:55:F8:DB:95:C7:5A:D1:53:AF CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Trustwave Global ECC P384 Certification Authority" +CKA_LABEL UTF8 "ISRG Root X2" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\347\363\243\310\317\157\303\004\056\155\016\147\062\305\236\150 -\225\015\136\322 +\275\261\271\074\325\227\215\105\306\046\024\125\370\333\225\307 +\132\321\123\257 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\352\317\140\304\073\271\025\051\100\241\227\355\170\047\223\326 +\323\236\304\036\043\074\246\337\317\243\176\155\340\024\346\345 END CKA_ISSUER MULTILINE_OCTAL -\060\201\221\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\021\060\017\006\003\125\004\010\023\010\111\154\154\151\156 -\157\151\163\061\020\060\016\006\003\125\004\007\023\007\103\150 -\151\143\141\147\157\061\041\060\037\006\003\125\004\012\023\030 -\124\162\165\163\164\167\141\166\145\040\110\157\154\144\151\156 -\147\163\054\040\111\156\143\056\061\072\060\070\006\003\125\004 -\003\023\061\124\162\165\163\164\167\141\166\145\040\107\154\157 -\142\141\154\040\105\103\103\040\120\063\070\064\040\103\145\162 -\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 -\162\151\164\171 +\060\117\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\051\060\047\006\003\125\004\012\023\040\111\156\164\145\162\156 +\145\164\040\123\145\143\165\162\151\164\171\040\122\145\163\145 +\141\162\143\150\040\107\162\157\165\160\061\025\060\023\006\003 +\125\004\003\023\014\111\123\122\107\040\122\157\157\164\040\130 +\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\014\010\275\205\227\154\231\047\244\200\150\107\073 +\002\020\101\322\235\321\162\352\356\247\200\301\054\154\351\057 +\207\122 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "NAVER Global Root Certification Authority" +# Certificate "HiPKI Root CA - G1" # -# Issuer: CN=NAVER Global Root Certification Authority,O=NAVER BUSINESS PLATFORM Corp.,C=KR -# Serial Number:01:94:30:1e:a2:0b:dd:f5:c5:33:2a:b1:43:44:71:f8:d6:50:4d:0d -# Subject: CN=NAVER Global Root Certification Authority,O=NAVER BUSINESS PLATFORM Corp.,C=KR -# Not Valid Before: Fri Aug 18 08:58:42 2017 -# Not Valid After : Tue Aug 18 23:59:59 2037 -# Fingerprint (SHA-256): 88:F4:38:DC:F8:FF:D1:FA:8F:42:91:15:FF:E5:F8:2A:E1:E0:6E:0C:70:C3:75:FA:AD:71:7B:34:A4:9E:72:65 -# Fingerprint (SHA1): 8F:6B:F2:A9:27:4A:DA:14:A0:C4:F4:8E:61:27:F9:C0:1E:78:5D:D1 +# Issuer: CN=HiPKI Root CA - G1,O="Chunghwa Telecom Co., Ltd.",C=TW +# Serial Number:2d:dd:ac:ce:62:97:94:a1:43:e8:b0:cd:76:6a:5e:60 +# Subject: CN=HiPKI Root CA - G1,O="Chunghwa Telecom Co., Ltd.",C=TW +# Not Valid Before: Fri Feb 22 09:46:04 2019 +# Not Valid After : Thu Dec 31 15:59:59 2037 +# Fingerprint (SHA-256): F0:15:CE:3C:C2:39:BF:EF:06:4B:E9:F1:D2:C4:17:E1:A0:26:4A:0A:94:BE:1F:0C:8D:12:18:64:EB:69:49:CC +# Fingerprint (SHA1): 6A:92:E4:A8:EE:1B:EC:96:45:37:E3:29:57:49:CD:96:E3:E5:D2:60 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "NAVER Global Root Certification Authority" +CKA_LABEL UTF8 "HiPKI Root CA - G1" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\151\061\013\060\011\006\003\125\004\006\023\002\113\122\061 -\046\060\044\006\003\125\004\012\014\035\116\101\126\105\122\040 -\102\125\123\111\116\105\123\123\040\120\114\101\124\106\117\122 -\115\040\103\157\162\160\056\061\062\060\060\006\003\125\004\003 -\014\051\116\101\126\105\122\040\107\154\157\142\141\154\040\122 -\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171 +\060\117\061\013\060\011\006\003\125\004\006\023\002\124\127\061 +\043\060\041\006\003\125\004\012\014\032\103\150\165\156\147\150 +\167\141\040\124\145\154\145\143\157\155\040\103\157\056\054\040 +\114\164\144\056\061\033\060\031\006\003\125\004\003\014\022\110 +\151\120\113\111\040\122\157\157\164\040\103\101\040\055\040\107 +\061 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\151\061\013\060\011\006\003\125\004\006\023\002\113\122\061 -\046\060\044\006\003\125\004\012\014\035\116\101\126\105\122\040 -\102\125\123\111\116\105\123\123\040\120\114\101\124\106\117\122 -\115\040\103\157\162\160\056\061\062\060\060\006\003\125\004\003 -\014\051\116\101\126\105\122\040\107\154\157\142\141\154\040\122 -\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171 +\060\117\061\013\060\011\006\003\125\004\006\023\002\124\127\061 +\043\060\041\006\003\125\004\012\014\032\103\150\165\156\147\150 +\167\141\040\124\145\154\145\143\157\155\040\103\157\056\054\040 +\114\164\144\056\061\033\060\031\006\003\125\004\003\014\022\110 +\151\120\113\111\040\122\157\157\164\040\103\101\040\055\040\107 +\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\001\224\060\036\242\013\335\365\305\063\052\261\103\104 -\161\370\326\120\115\015 +\002\020\055\335\254\316\142\227\224\241\103\350\260\315\166\152 +\136\140 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\242\060\202\003\212\240\003\002\001\002\002\024\001 -\224\060\036\242\013\335\365\305\063\052\261\103\104\161\370\326 -\120\115\015\060\015\006\011\052\206\110\206\367\015\001\001\014 -\005\000\060\151\061\013\060\011\006\003\125\004\006\023\002\113 -\122\061\046\060\044\006\003\125\004\012\014\035\116\101\126\105 -\122\040\102\125\123\111\116\105\123\123\040\120\114\101\124\106 -\117\122\115\040\103\157\162\160\056\061\062\060\060\006\003\125 -\004\003\014\051\116\101\126\105\122\040\107\154\157\142\141\154 -\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\165\164\150\157\162\151\164\171\060\036\027 -\015\061\067\060\070\061\070\060\070\065\070\064\062\132\027\015 -\063\067\060\070\061\070\062\063\065\071\065\071\132\060\151\061 -\013\060\011\006\003\125\004\006\023\002\113\122\061\046\060\044 -\006\003\125\004\012\014\035\116\101\126\105\122\040\102\125\123 -\111\116\105\123\123\040\120\114\101\124\106\117\122\115\040\103 -\157\162\160\056\061\062\060\060\006\003\125\004\003\014\051\116 -\101\126\105\122\040\107\154\157\142\141\154\040\122\157\157\164 -\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040\101 -\165\164\150\157\162\151\164\171\060\202\002\042\060\015\006\011 -\052\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000 -\060\202\002\012\002\202\002\001\000\266\324\361\223\134\265\100 -\211\012\253\015\220\133\120\143\256\220\224\164\027\105\162\326 -\173\145\132\051\113\247\126\240\113\270\057\102\165\351\331\173 -\044\132\061\145\253\027\027\321\063\072\331\021\334\100\066\207 -\337\307\152\351\046\136\131\212\167\343\350\110\234\061\026\372 -\076\221\261\312\311\243\342\237\316\041\123\243\002\066\060\313 -\122\002\345\332\062\135\303\305\346\371\356\021\307\213\311\104 -\036\204\223\030\112\264\237\345\022\144\151\320\046\205\142\001 -\266\311\002\035\276\203\121\273\134\332\370\255\025\152\231\367 -\222\124\367\064\133\351\277\352\051\201\022\324\123\221\226\263 -\221\132\335\376\220\163\050\373\060\106\265\312\010\007\307\161 -\162\311\146\323\064\227\366\214\364\030\112\341\320\075\132\105 -\266\151\247\051\373\043\316\210\330\022\234\000\110\250\246\017 -\263\073\222\215\161\016\164\305\213\310\114\371\364\233\216\270 -\074\151\355\157\073\120\057\130\355\304\260\320\034\033\152\014 -\342\274\104\252\330\315\024\135\224\170\141\277\016\156\332\052 -\274\057\014\013\161\246\263\026\077\234\346\371\314\237\123\065 -\342\003\240\240\030\277\273\361\276\364\326\214\207\015\102\367 -\006\271\361\155\355\004\224\250\376\266\323\006\306\100\141\337 -\235\235\363\124\166\316\123\072\001\246\222\101\354\004\243\217 -\015\242\325\011\312\326\313\232\361\357\103\135\300\253\245\101 -\317\134\123\160\160\311\210\246\055\324\153\141\163\120\046\206 -\141\016\137\033\302\053\342\214\325\273\235\301\003\102\272\224 -\332\137\251\260\312\314\115\012\357\107\151\003\057\042\373\361 -\050\316\277\135\120\145\250\220\155\263\164\260\010\307\254\250 -\321\353\076\234\374\135\032\203\056\053\313\265\363\104\235\072 -\247\027\141\226\242\161\323\160\226\025\115\267\114\163\356\031 -\134\305\133\076\101\376\254\165\140\073\033\143\316\000\335\332 -\010\220\142\264\345\055\356\110\247\153\027\231\124\276\207\112 -\343\251\136\004\114\353\020\155\124\326\357\361\350\362\142\026 -\313\200\153\355\075\355\365\037\060\245\256\113\311\023\355\212 -\001\001\311\270\121\130\300\146\072\261\146\113\304\325\061\002 -\142\351\164\204\014\333\115\106\055\002\003\001\000\001\243\102 -\060\100\060\035\006\003\125\035\016\004\026\004\024\322\237\210 -\337\241\315\054\275\354\365\073\001\001\223\063\047\262\353\140 -\113\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001 -\006\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001 -\001\377\060\015\006\011\052\206\110\206\367\015\001\001\014\005 -\000\003\202\002\001\000\062\312\200\263\235\075\124\006\335\322 -\322\056\360\244\001\041\013\147\110\312\155\216\340\310\252\015 -\252\215\041\127\217\306\076\172\312\333\121\324\122\263\324\226 -\204\245\130\140\177\345\013\216\037\365\334\012\025\201\345\073 -\266\267\042\057\011\234\023\026\261\154\014\065\010\155\253\143 -\162\355\334\276\354\307\127\346\060\040\161\326\327\020\301\023 -\125\001\214\052\103\344\101\361\317\072\172\123\222\316\242\003 -\005\015\070\337\002\273\020\056\331\073\322\233\172\300\241\246 -\370\265\061\346\364\165\311\271\123\231\165\107\042\132\024\025 -\307\170\033\266\235\351\014\370\033\166\361\205\204\336\241\332 -\022\357\244\342\020\227\172\170\336\014\121\227\250\041\100\213 -\206\275\015\360\136\116\113\066\273\073\040\037\212\102\126\341 -\013\032\277\173\320\042\103\054\104\214\373\345\052\264\154\034 -\034\272\224\340\023\176\041\346\232\302\313\305\102\144\264\036 -\224\173\010\045\310\161\314\207\105\127\205\323\237\051\142\042 -\203\121\227\000\030\227\167\152\230\222\311\174\140\154\337\154 -\175\112\344\160\114\302\236\270\035\367\320\064\307\017\314\373 -\247\377\003\276\255\160\220\332\013\335\310\155\227\137\232\177 -\011\062\101\375\315\242\314\132\155\114\362\252\111\376\146\370 -\351\330\065\353\016\050\036\356\110\057\072\320\171\011\070\174 -\246\042\202\223\225\320\003\276\276\002\240\005\335\040\042\343 -\157\035\210\064\140\306\346\012\271\011\165\013\360\007\350\151 -\226\065\307\373\043\201\216\070\071\270\105\053\103\170\242\321 -\054\024\377\015\050\162\162\225\233\136\011\333\211\104\230\252 -\241\111\273\161\122\362\277\366\377\047\241\066\257\270\266\167 -\210\335\072\244\155\233\064\220\334\024\135\060\277\267\353\027 -\344\207\267\161\320\241\327\167\025\324\102\327\362\363\061\231 -\135\233\335\026\155\077\352\006\043\370\106\242\042\355\223\366 -\335\232\346\052\207\261\230\124\361\042\367\153\105\343\342\216 -\166\035\232\215\304\006\215\066\267\024\363\235\124\151\267\216 -\074\325\244\155\223\201\267\255\366\275\144\173\302\311\150\071 -\240\222\234\315\064\206\221\220\372\144\121\235\376\376\353\245 -\365\165\336\211\367\162 +\060\202\005\152\060\202\003\122\240\003\002\001\002\002\020\055 +\335\254\316\142\227\224\241\103\350\260\315\166\152\136\140\060 +\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\117 +\061\013\060\011\006\003\125\004\006\023\002\124\127\061\043\060 +\041\006\003\125\004\012\014\032\103\150\165\156\147\150\167\141 +\040\124\145\154\145\143\157\155\040\103\157\056\054\040\114\164 +\144\056\061\033\060\031\006\003\125\004\003\014\022\110\151\120 +\113\111\040\122\157\157\164\040\103\101\040\055\040\107\061\060 +\036\027\015\061\071\060\062\062\062\060\071\064\066\060\064\132 +\027\015\063\067\061\062\063\061\061\065\065\071\065\071\132\060 +\117\061\013\060\011\006\003\125\004\006\023\002\124\127\061\043 +\060\041\006\003\125\004\012\014\032\103\150\165\156\147\150\167 +\141\040\124\145\154\145\143\157\155\040\103\157\056\054\040\114 +\164\144\056\061\033\060\031\006\003\125\004\003\014\022\110\151 +\120\113\111\040\122\157\157\164\040\103\101\040\055\040\107\061 +\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 +\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 +\000\364\036\177\122\163\062\014\163\344\275\023\164\243\324\060 +\250\320\256\113\330\266\337\165\107\146\364\174\347\071\004\036 +\152\160\040\322\132\107\162\147\125\364\245\350\235\325\036\041 +\241\360\147\272\314\041\150\276\104\123\277\215\371\342\334\057 +\125\310\067\077\037\244\300\234\263\344\167\134\240\106\376\167 +\372\032\240\070\352\355\232\162\336\053\275\224\127\072\272\354 +\171\347\137\175\102\144\071\172\046\066\367\044\360\325\057\272 +\225\230\021\146\255\227\065\326\165\001\200\340\257\364\204\141 +\214\015\036\137\174\207\226\136\101\257\353\207\352\370\135\361 +\056\210\005\076\114\042\273\332\037\052\335\122\106\144\071\363 +\102\316\331\236\014\263\260\167\227\144\234\300\364\243\056\037 +\225\007\260\027\337\060\333\000\030\226\114\241\201\113\335\004 +\155\123\243\075\374\007\254\324\305\067\202\353\344\225\010\031 +\050\202\322\102\072\243\330\123\354\171\211\140\110\140\310\162 +\222\120\334\003\217\203\077\262\102\127\132\333\152\351\021\227 +\335\205\050\274\060\114\253\343\302\261\105\104\107\037\340\212 +\026\007\226\322\041\017\123\300\355\251\176\324\116\354\233\011 +\354\257\102\254\060\326\277\321\020\105\340\246\026\262\245\305 +\323\117\163\224\063\161\002\241\152\243\326\063\227\117\041\143 +\036\133\217\331\301\136\105\161\167\017\201\135\137\041\232\255 +\203\314\372\136\326\215\043\137\033\075\101\257\040\165\146\132 +\112\366\237\373\253\030\367\161\300\266\035\061\354\073\040\353 +\313\342\270\365\256\222\262\367\341\204\113\362\242\362\223\232 +\042\236\323\024\157\066\124\275\037\136\131\025\271\163\250\301 +\174\157\173\142\351\026\154\107\132\145\363\016\021\233\106\331 +\375\155\334\326\234\300\264\175\245\260\335\077\126\157\241\371 +\366\344\022\110\375\006\177\022\127\266\251\043\117\133\003\303 +\340\161\052\043\267\367\260\261\073\274\230\275\326\230\250\014 +\153\366\216\022\147\246\362\262\130\344\002\011\023\074\251\273 +\020\264\322\060\105\361\354\367\000\021\337\145\370\334\053\103 +\125\277\026\227\304\017\325\054\141\204\252\162\206\376\346\072 +\176\302\077\175\356\374\057\024\076\346\205\335\120\157\267\111 +\355\002\003\001\000\001\243\102\060\100\060\017\006\003\125\035 +\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125 +\035\016\004\026\004\024\362\167\027\372\136\250\376\366\075\161 +\325\150\272\311\106\014\070\330\257\260\060\016\006\003\125\035 +\017\001\001\377\004\004\003\002\001\206\060\015\006\011\052\206 +\110\206\367\015\001\001\013\005\000\003\202\002\001\000\120\121 +\360\165\334\160\004\343\377\252\165\324\161\242\313\236\217\250 +\251\323\257\165\307\124\317\072\034\004\231\042\254\304\021\342 +\357\063\112\246\043\035\016\015\107\330\067\307\157\257\064\177 +\117\201\153\065\117\351\162\245\061\342\170\347\367\116\224\030 +\133\100\175\317\153\041\124\206\346\225\172\373\306\312\352\234 +\110\116\127\011\135\057\254\364\245\264\227\063\130\325\254\171 +\251\314\137\371\205\372\122\305\215\370\221\024\353\072\015\027 +\320\122\302\173\343\302\163\216\106\170\006\070\054\350\134\332 +\146\304\364\244\360\126\031\063\051\132\145\222\005\107\106\112 +\253\204\303\036\047\241\037\021\222\231\047\165\223\017\274\066 +\073\227\127\217\046\133\014\273\234\017\324\156\060\007\324\334 +\137\066\150\146\071\203\226\047\046\212\310\304\071\376\232\041 +\157\325\162\206\351\177\142\345\227\116\320\044\320\100\260\320 +\165\010\216\275\150\356\010\327\156\174\020\160\106\033\174\340 +\210\262\236\162\206\231\001\343\277\237\111\031\264\045\276\126 +\145\256\027\143\345\036\337\350\377\107\245\277\341\046\005\204 +\344\260\300\257\347\010\231\250\014\136\046\200\105\324\370\150 +\057\226\217\256\342\112\034\234\026\014\023\157\070\207\366\273 +\310\064\137\222\003\121\171\160\246\337\313\365\231\115\171\315 +\116\274\127\237\103\116\153\056\053\030\370\152\163\214\272\305 +\065\357\071\152\101\036\317\161\250\242\262\206\007\133\072\311 +\341\357\077\145\004\200\107\062\104\160\225\116\061\147\152\164 +\133\020\105\165\352\260\237\320\346\065\376\116\237\213\314\053 +\222\105\133\156\045\140\205\106\315\321\252\260\166\146\223\167 +\226\276\203\276\070\266\044\116\046\013\314\355\172\126\032\340 +\351\132\306\144\255\114\172\000\110\104\057\271\100\273\023\076 +\276\025\170\235\205\201\112\052\127\336\325\031\103\332\333\312 +\133\107\206\203\013\077\266\015\166\170\163\171\042\136\261\200 +\037\317\276\321\077\126\020\230\053\225\207\241\037\235\144\024 +\140\071\054\263\000\125\056\344\365\263\016\127\304\221\101\000 +\234\077\350\245\337\352\366\377\310\360\255\155\122\250\027\253 +\233\141\374\022\121\065\344\045\375\257\252\152\206\071 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "NAVER Global Root Certification Authority" -# Issuer: CN=NAVER Global Root Certification Authority,O=NAVER BUSINESS PLATFORM Corp.,C=KR -# Serial Number:01:94:30:1e:a2:0b:dd:f5:c5:33:2a:b1:43:44:71:f8:d6:50:4d:0d -# Subject: CN=NAVER Global Root Certification Authority,O=NAVER BUSINESS PLATFORM Corp.,C=KR -# Not Valid Before: Fri Aug 18 08:58:42 2017 -# Not Valid After : Tue Aug 18 23:59:59 2037 -# Fingerprint (SHA-256): 88:F4:38:DC:F8:FF:D1:FA:8F:42:91:15:FF:E5:F8:2A:E1:E0:6E:0C:70:C3:75:FA:AD:71:7B:34:A4:9E:72:65 -# Fingerprint (SHA1): 8F:6B:F2:A9:27:4A:DA:14:A0:C4:F4:8E:61:27:F9:C0:1E:78:5D:D1 +# Trust for "HiPKI Root CA - G1" +# Issuer: CN=HiPKI Root CA - G1,O="Chunghwa Telecom Co., Ltd.",C=TW +# Serial Number:2d:dd:ac:ce:62:97:94:a1:43:e8:b0:cd:76:6a:5e:60 +# Subject: CN=HiPKI Root CA - G1,O="Chunghwa Telecom Co., Ltd.",C=TW +# Not Valid Before: Fri Feb 22 09:46:04 2019 +# Not Valid After : Thu Dec 31 15:59:59 2037 +# Fingerprint (SHA-256): F0:15:CE:3C:C2:39:BF:EF:06:4B:E9:F1:D2:C4:17:E1:A0:26:4A:0A:94:BE:1F:0C:8D:12:18:64:EB:69:49:CC +# Fingerprint (SHA1): 6A:92:E4:A8:EE:1B:EC:96:45:37:E3:29:57:49:CD:96:E3:E5:D2:60 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "NAVER Global Root Certification Authority" +CKA_LABEL UTF8 "HiPKI Root CA - G1" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\217\153\362\251\047\112\332\024\240\304\364\216\141\047\371\300 -\036\170\135\321 +\152\222\344\250\356\033\354\226\105\067\343\051\127\111\315\226 +\343\345\322\140 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\310\176\101\366\045\073\365\011\263\027\350\106\075\277\320\233 +\151\105\337\026\145\113\350\150\232\217\166\137\377\200\236\323 END CKA_ISSUER MULTILINE_OCTAL -\060\151\061\013\060\011\006\003\125\004\006\023\002\113\122\061 -\046\060\044\006\003\125\004\012\014\035\116\101\126\105\122\040 -\102\125\123\111\116\105\123\123\040\120\114\101\124\106\117\122 -\115\040\103\157\162\160\056\061\062\060\060\006\003\125\004\003 -\014\051\116\101\126\105\122\040\107\154\157\142\141\154\040\122 -\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171 +\060\117\061\013\060\011\006\003\125\004\006\023\002\124\127\061 +\043\060\041\006\003\125\004\012\014\032\103\150\165\156\147\150 +\167\141\040\124\145\154\145\143\157\155\040\103\157\056\054\040 +\114\164\144\056\061\033\060\031\006\003\125\004\003\014\022\110 +\151\120\113\111\040\122\157\157\164\040\103\101\040\055\040\107 +\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\001\224\060\036\242\013\335\365\305\063\052\261\103\104 -\161\370\326\120\115\015 +\002\020\055\335\254\316\142\227\224\241\103\350\260\315\166\152 +\136\140 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST @@ -20973,845 +22122,810 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +# Certificate "GlobalSign ECC Root CA - R4" # -# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS,OID.2.5.4.97=VATES-Q2826004J,OU=Ceres,O=FNMT-RCM,C=ES -# Serial Number:62:f6:32:6c:e5:c4:e3:68:5c:1b:62:dd:9c:2e:9d:95 -# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS,OID.2.5.4.97=VATES-Q2826004J,OU=Ceres,O=FNMT-RCM,C=ES -# Not Valid Before: Thu Dec 20 09:37:33 2018 -# Not Valid After : Sun Dec 20 09:37:33 2043 -# Fingerprint (SHA-256): 55:41:53:B1:3D:2C:F9:DD:B7:53:BF:BE:1A:4E:0A:E0:8D:0A:A4:18:70:58:FE:60:A2:B8:62:B2:E4:B8:7B:CB -# Fingerprint (SHA1): 62:FF:D9:9E:C0:65:0D:03:CE:75:93:D2:ED:3F:2D:32:C9:E3:E5:4A +# Issuer: CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R4 +# Serial Number:02:03:e5:7e:f5:3f:93:fd:a5:09:21:b2:a6 +# Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R4 +# Not Valid Before: Tue Nov 13 00:00:00 2012 +# Not Valid After : Tue Jan 19 03:14:07 2038 +# Fingerprint (SHA-256): B0:85:D7:0B:96:4F:19:1A:73:E4:AF:0D:54:AE:7A:0E:07:AA:FD:AF:9B:71:DD:08:62:13:8A:B7:32:5A:24:A2 +# Fingerprint (SHA1): 6B:A0:B0:98:E1:71:EF:5A:AD:FE:48:15:80:77:10:F4:BD:6F:0B:28 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +CKA_LABEL UTF8 "GlobalSign ECC Root CA - R4" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\170\061\013\060\011\006\003\125\004\006\023\002\105\123\061 -\021\060\017\006\003\125\004\012\014\010\106\116\115\124\055\122 -\103\115\061\016\060\014\006\003\125\004\013\014\005\103\145\162 -\145\163\061\030\060\026\006\003\125\004\141\014\017\126\101\124 -\105\123\055\121\062\070\062\066\060\060\064\112\061\054\060\052 -\006\003\125\004\003\014\043\101\103\040\122\101\111\132\040\106 -\116\115\124\055\122\103\115\040\123\105\122\126\111\104\117\122 -\105\123\040\123\105\107\125\122\117\123 +\060\120\061\044\060\042\006\003\125\004\013\023\033\107\154\157 +\142\141\154\123\151\147\156\040\105\103\103\040\122\157\157\164 +\040\103\101\040\055\040\122\064\061\023\060\021\006\003\125\004 +\012\023\012\107\154\157\142\141\154\123\151\147\156\061\023\060 +\021\006\003\125\004\003\023\012\107\154\157\142\141\154\123\151 +\147\156 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\170\061\013\060\011\006\003\125\004\006\023\002\105\123\061 -\021\060\017\006\003\125\004\012\014\010\106\116\115\124\055\122 -\103\115\061\016\060\014\006\003\125\004\013\014\005\103\145\162 -\145\163\061\030\060\026\006\003\125\004\141\014\017\126\101\124 -\105\123\055\121\062\070\062\066\060\060\064\112\061\054\060\052 -\006\003\125\004\003\014\043\101\103\040\122\101\111\132\040\106 -\116\115\124\055\122\103\115\040\123\105\122\126\111\104\117\122 -\105\123\040\123\105\107\125\122\117\123 +\060\120\061\044\060\042\006\003\125\004\013\023\033\107\154\157 +\142\141\154\123\151\147\156\040\105\103\103\040\122\157\157\164 +\040\103\101\040\055\040\122\064\061\023\060\021\006\003\125\004 +\012\023\012\107\154\157\142\141\154\123\151\147\156\061\023\060 +\021\006\003\125\004\003\023\012\107\154\157\142\141\154\123\151 +\147\156 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\142\366\062\154\345\304\343\150\134\033\142\335\234\056 -\235\225 +\002\015\002\003\345\176\365\077\223\375\245\011\041\262\246 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\156\060\202\001\363\240\003\002\001\002\002\020\142 -\366\062\154\345\304\343\150\134\033\142\335\234\056\235\225\060 -\012\006\010\052\206\110\316\075\004\003\003\060\170\061\013\060 -\011\006\003\125\004\006\023\002\105\123\061\021\060\017\006\003 -\125\004\012\014\010\106\116\115\124\055\122\103\115\061\016\060 -\014\006\003\125\004\013\014\005\103\145\162\145\163\061\030\060 -\026\006\003\125\004\141\014\017\126\101\124\105\123\055\121\062 -\070\062\066\060\060\064\112\061\054\060\052\006\003\125\004\003 -\014\043\101\103\040\122\101\111\132\040\106\116\115\124\055\122 -\103\115\040\123\105\122\126\111\104\117\122\105\123\040\123\105 -\107\125\122\117\123\060\036\027\015\061\070\061\062\062\060\060 -\071\063\067\063\063\132\027\015\064\063\061\062\062\060\060\071 -\063\067\063\063\132\060\170\061\013\060\011\006\003\125\004\006 -\023\002\105\123\061\021\060\017\006\003\125\004\012\014\010\106 -\116\115\124\055\122\103\115\061\016\060\014\006\003\125\004\013 -\014\005\103\145\162\145\163\061\030\060\026\006\003\125\004\141 -\014\017\126\101\124\105\123\055\121\062\070\062\066\060\060\064 -\112\061\054\060\052\006\003\125\004\003\014\043\101\103\040\122 -\101\111\132\040\106\116\115\124\055\122\103\115\040\123\105\122 -\126\111\104\117\122\105\123\040\123\105\107\125\122\117\123\060 -\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 -\004\000\042\003\142\000\004\366\272\127\123\310\312\253\337\066 -\112\122\041\344\227\322\203\147\236\360\145\121\320\136\207\307 -\107\261\131\362\127\107\233\000\002\223\104\027\151\333\102\307 -\261\262\072\030\016\264\135\214\263\146\135\241\064\371\066\054 -\111\333\363\106\374\263\104\151\104\023\146\375\327\305\375\257 -\066\115\316\003\115\007\161\317\257\152\005\322\242\103\132\012 -\122\157\001\003\116\216\213\243\102\060\100\060\017\006\003\125 -\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006\003 -\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006\003 -\125\035\016\004\026\004\024\001\271\057\357\277\021\206\140\362 -\117\320\101\156\253\163\037\347\322\156\111\060\012\006\010\052 -\206\110\316\075\004\003\003\003\151\000\060\146\002\061\000\256 -\112\343\053\100\303\164\021\362\225\255\026\043\336\116\014\032 -\346\135\245\044\136\153\104\173\374\070\342\117\313\234\105\027 -\021\114\024\047\046\125\071\165\112\003\314\023\220\237\222\002 -\061\000\372\112\154\140\210\163\363\356\270\230\142\251\316\053 -\302\331\212\246\160\061\035\257\260\224\114\353\117\306\343\321 -\363\142\247\074\377\223\056\007\134\111\001\147\151\022\002\162 -\277\347 +\060\202\001\334\060\202\001\203\240\003\002\001\002\002\015\002 +\003\345\176\365\077\223\375\245\011\041\262\246\060\012\006\010 +\052\206\110\316\075\004\003\002\060\120\061\044\060\042\006\003 +\125\004\013\023\033\107\154\157\142\141\154\123\151\147\156\040 +\105\103\103\040\122\157\157\164\040\103\101\040\055\040\122\064 +\061\023\060\021\006\003\125\004\012\023\012\107\154\157\142\141 +\154\123\151\147\156\061\023\060\021\006\003\125\004\003\023\012 +\107\154\157\142\141\154\123\151\147\156\060\036\027\015\061\062 +\061\061\061\063\060\060\060\060\060\060\132\027\015\063\070\060 +\061\061\071\060\063\061\064\060\067\132\060\120\061\044\060\042 +\006\003\125\004\013\023\033\107\154\157\142\141\154\123\151\147 +\156\040\105\103\103\040\122\157\157\164\040\103\101\040\055\040 +\122\064\061\023\060\021\006\003\125\004\012\023\012\107\154\157 +\142\141\154\123\151\147\156\061\023\060\021\006\003\125\004\003 +\023\012\107\154\157\142\141\154\123\151\147\156\060\131\060\023 +\006\007\052\206\110\316\075\002\001\006\010\052\206\110\316\075 +\003\001\007\003\102\000\004\270\306\171\323\217\154\045\016\237 +\056\071\031\034\003\244\256\232\345\071\007\011\026\312\143\261 +\271\206\370\212\127\301\127\316\102\372\163\241\367\145\102\377 +\036\301\000\262\156\163\016\377\307\041\345\030\244\252\331\161 +\077\250\324\271\316\214\035\243\102\060\100\060\016\006\003\125 +\035\017\001\001\377\004\004\003\002\001\206\060\017\006\003\125 +\035\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003 +\125\035\016\004\026\004\024\124\260\173\255\105\270\342\100\177 +\373\012\156\373\276\063\311\074\243\204\325\060\012\006\010\052 +\206\110\316\075\004\003\002\003\107\000\060\104\002\040\042\117 +\164\162\271\140\257\361\346\234\240\026\005\120\137\303\136\073 +\156\141\164\357\276\001\304\276\030\110\131\141\202\062\002\040 +\046\235\124\143\100\336\067\140\120\317\310\330\355\235\202\256 +\067\230\274\243\217\114\114\251\064\053\154\357\373\225\233\046 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" -# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS,OID.2.5.4.97=VATES-Q2826004J,OU=Ceres,O=FNMT-RCM,C=ES -# Serial Number:62:f6:32:6c:e5:c4:e3:68:5c:1b:62:dd:9c:2e:9d:95 -# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS,OID.2.5.4.97=VATES-Q2826004J,OU=Ceres,O=FNMT-RCM,C=ES -# Not Valid Before: Thu Dec 20 09:37:33 2018 -# Not Valid After : Sun Dec 20 09:37:33 2043 -# Fingerprint (SHA-256): 55:41:53:B1:3D:2C:F9:DD:B7:53:BF:BE:1A:4E:0A:E0:8D:0A:A4:18:70:58:FE:60:A2:B8:62:B2:E4:B8:7B:CB -# Fingerprint (SHA1): 62:FF:D9:9E:C0:65:0D:03:CE:75:93:D2:ED:3F:2D:32:C9:E3:E5:4A +# Trust for "GlobalSign ECC Root CA - R4" +# Issuer: CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R4 +# Serial Number:02:03:e5:7e:f5:3f:93:fd:a5:09:21:b2:a6 +# Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R4 +# Not Valid Before: Tue Nov 13 00:00:00 2012 +# Not Valid After : Tue Jan 19 03:14:07 2038 +# Fingerprint (SHA-256): B0:85:D7:0B:96:4F:19:1A:73:E4:AF:0D:54:AE:7A:0E:07:AA:FD:AF:9B:71:DD:08:62:13:8A:B7:32:5A:24:A2 +# Fingerprint (SHA1): 6B:A0:B0:98:E1:71:EF:5A:AD:FE:48:15:80:77:10:F4:BD:6F:0B:28 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +CKA_LABEL UTF8 "GlobalSign ECC Root CA - R4" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\142\377\331\236\300\145\015\003\316\165\223\322\355\077\055\062 -\311\343\345\112 +\153\240\260\230\341\161\357\132\255\376\110\025\200\167\020\364 +\275\157\013\050 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\031\066\234\122\003\057\322\321\273\043\314\335\036\022\125\273 +\046\051\370\155\341\210\277\242\145\177\252\304\315\017\177\374 END CKA_ISSUER MULTILINE_OCTAL -\060\170\061\013\060\011\006\003\125\004\006\023\002\105\123\061 -\021\060\017\006\003\125\004\012\014\010\106\116\115\124\055\122 -\103\115\061\016\060\014\006\003\125\004\013\014\005\103\145\162 -\145\163\061\030\060\026\006\003\125\004\141\014\017\126\101\124 -\105\123\055\121\062\070\062\066\060\060\064\112\061\054\060\052 -\006\003\125\004\003\014\043\101\103\040\122\101\111\132\040\106 -\116\115\124\055\122\103\115\040\123\105\122\126\111\104\117\122 -\105\123\040\123\105\107\125\122\117\123 +\060\120\061\044\060\042\006\003\125\004\013\023\033\107\154\157 +\142\141\154\123\151\147\156\040\105\103\103\040\122\157\157\164 +\040\103\101\040\055\040\122\064\061\023\060\021\006\003\125\004 +\012\023\012\107\154\157\142\141\154\123\151\147\156\061\023\060 +\021\006\003\125\004\003\023\012\107\154\157\142\141\154\123\151 +\147\156 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\142\366\062\154\345\304\343\150\134\033\142\335\234\056 -\235\225 +\002\015\002\003\345\176\365\077\223\375\245\011\041\262\246 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "GlobalSign Secure Mail Root R45" +# Certificate "GTS Root R1" # -# Issuer: CN=GlobalSign Secure Mail Root R45,O=GlobalSign nv-sa,C=BE -# Serial Number:76:53:fe:a8:4c:50:ab:9f:8d:32:b5:1d:03:8f:57:dc -# Subject: CN=GlobalSign Secure Mail Root R45,O=GlobalSign nv-sa,C=BE -# Not Valid Before: Wed Mar 18 00:00:00 2020 -# Not Valid After : Sat Mar 18 00:00:00 2045 -# Fingerprint (SHA-256): 31:9A:F0:A7:72:9E:6F:89:26:9C:13:1E:A6:A3:A1:6F:CD:86:38:9F:DC:AB:3C:47:A4:A6:75:C1:61:A3:F9:74 -# Fingerprint (SHA1): 76:18:D1:F3:80:24:3D:52:40:C6:11:6A:AD:57:77:09:7D:81:30:A0 +# Issuer: CN=GTS Root R1,O=Google Trust Services LLC,C=US +# Serial Number:02:03:e5:93:6f:31:b0:13:49:88:6b:a2:17 +# Subject: CN=GTS Root R1,O=Google Trust Services LLC,C=US +# Not Valid Before: Wed Jun 22 00:00:00 2016 +# Not Valid After : Sun Jun 22 00:00:00 2036 +# Fingerprint (SHA-256): D9:47:43:2A:BD:E7:B7:FA:90:FC:2E:6B:59:10:1B:12:80:E0:E1:C7:E4:E4:0F:A3:C6:88:7F:FF:57:A7:F4:CF +# Fingerprint (SHA1): E5:8C:1C:C4:91:3B:38:63:4B:E9:10:6E:E3:AD:8E:6B:9D:D9:81:4A CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign Secure Mail Root R45" +CKA_LABEL UTF8 "GTS Root R1" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 -\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 -\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 -\040\122\064\065 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\061 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 -\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 -\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 -\040\122\064\065 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\166\123\376\250\114\120\253\237\215\062\265\035\003\217 -\127\334 +\002\015\002\003\345\223\157\061\260\023\111\210\153\242\027 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\160\060\202\003\130\240\003\002\001\002\002\020\166 -\123\376\250\114\120\253\237\215\062\265\035\003\217\127\334\060 -\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\122 -\061\013\060\011\006\003\125\004\006\023\002\102\105\061\031\060 -\027\006\003\125\004\012\023\020\107\154\157\142\141\154\123\151 -\147\156\040\156\166\055\163\141\061\050\060\046\006\003\125\004 -\003\023\037\107\154\157\142\141\154\123\151\147\156\040\123\145 -\143\165\162\145\040\115\141\151\154\040\122\157\157\164\040\122 -\064\065\060\036\027\015\062\060\060\063\061\070\060\060\060\060 -\060\060\132\027\015\064\065\060\063\061\070\060\060\060\060\060 -\060\132\060\122\061\013\060\011\006\003\125\004\006\023\002\102 -\105\061\031\060\027\006\003\125\004\012\023\020\107\154\157\142 -\141\154\123\151\147\156\040\156\166\055\163\141\061\050\060\046 -\006\003\125\004\003\023\037\107\154\157\142\141\154\123\151\147 -\156\040\123\145\143\165\162\145\040\115\141\151\154\040\122\157 -\157\164\040\122\064\065\060\202\002\042\060\015\006\011\052\206 -\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060\202 -\002\012\002\202\002\001\000\334\171\314\155\006\371\155\273\340 -\126\004\154\177\340\165\314\055\005\111\350\113\334\124\354\133 -\167\225\162\277\177\142\235\205\251\212\044\120\137\123\345\333 -\164\157\244\051\133\023\052\011\255\232\305\057\302\367\166\073 -\241\105\106\252\103\346\044\376\053\260\157\062\160\031\106\132 -\171\046\057\374\075\175\137\144\313\127\314\141\141\250\331\225 -\156\343\225\240\156\177\107\022\030\326\357\003\311\373\212\372 -\232\275\202\025\251\125\167\113\021\117\131\340\153\303\161\363 -\014\330\124\325\201\150\076\023\271\025\056\207\212\074\104\047 -\066\142\044\156\370\054\005\162\060\141\275\102\221\043\304\235 -\045\247\331\124\232\024\243\061\255\200\171\014\247\143\154\230 -\243\254\127\107\063\037\145\226\341\320\322\065\332\371\161\367 -\241\246\045\265\101\135\337\076\140\330\321\366\237\245\362\270 -\314\023\252\217\371\262\156\341\203\055\223\335\076\205\032\335 -\350\261\134\046\001\313\111\205\374\374\322\324\177\205\142\206 -\164\371\313\354\065\042\242\014\060\217\073\253\171\353\126\362 -\372\102\363\355\371\037\105\211\100\051\255\352\222\164\352\122 -\375\126\264\053\332\242\355\165\302\156\253\316\122\220\113\366 -\336\360\111\217\232\110\324\210\031\155\105\346\314\214\271\335 -\144\140\140\002\100\370\271\317\274\130\353\075\205\271\306\012 -\323\234\007\146\217\307\030\071\043\106\341\074\036\243\057\120 -\141\222\013\075\053\154\361\243\107\070\127\221\253\015\217\306 -\235\115\004\322\046\122\134\345\245\375\052\055\026\052\001\151 -\347\251\175\341\066\267\261\052\305\331\261\215\275\271\213\316 -\314\213\241\076\013\110\315\120\225\064\304\330\010\131\330\153 -\046\364\276\365\324\042\027\000\127\311\256\233\004\060\063\237 -\013\373\337\126\242\311\156\124\166\332\261\227\142\047\131\017 -\021\212\042\033\144\226\077\250\361\267\044\112\215\074\123\174 -\155\203\166\075\262\046\110\163\365\104\026\001\055\011\052\216 -\026\226\120\320\163\006\135\273\042\110\202\114\012\106\132\077 -\200\377\134\362\362\232\254\054\010\340\326\352\360\022\070\201 -\117\246\020\355\106\253\314\026\234\013\317\144\246\231\002\205 -\104\147\106\255\375\115\347\002\003\001\000\001\243\102\060\100 -\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001\206 -\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001 -\377\060\035\006\003\125\035\016\004\026\004\024\240\223\025\050 -\156\356\217\010\262\065\306\236\142\171\164\247\261\016\053\173 -\060\015\006\011\052\206\110\206\367\015\001\001\014\005\000\003 -\202\002\001\000\105\012\370\321\134\254\142\201\320\004\327\266 -\377\127\121\211\013\014\313\336\044\145\067\373\253\236\355\146 -\364\352\014\031\151\211\270\031\261\060\126\264\331\366\367\276 -\306\256\227\313\105\366\021\214\072\060\144\114\301\237\131\300 -\106\102\010\006\107\144\027\170\340\225\007\006\326\214\242\254 -\251\331\077\323\173\126\117\374\304\207\050\337\266\053\026\043 -\300\237\037\133\343\326\104\136\042\117\043\004\214\065\026\265 -\171\007\206\134\057\227\342\366\010\144\246\334\333\250\212\343 -\244\173\167\015\321\051\223\050\040\264\123\243\113\116\137\336 -\301\366\165\043\374\037\074\170\117\160\061\170\057\242\065\124 -\161\004\254\310\304\155\303\366\221\261\376\315\356\104\156\201 -\366\100\305\076\052\001\277\253\114\261\003\077\015\021\344\017 -\322\044\343\042\210\233\237\137\107\075\121\111\340\011\067\176 -\027\041\061\166\267\147\161\110\050\113\045\327\020\350\237\141 -\131\026\305\076\062\116\037\014\316\243\314\017\344\307\021\007 -\042\057\070\010\335\133\227\353\102\154\131\232\232\356\172\320 -\235\337\305\333\011\103\056\012\252\031\075\153\350\152\060\172 -\127\346\277\263\152\071\251\217\343\361\117\145\150\266\275\237 -\050\217\241\026\132\011\120\072\062\056\035\057\104\021\102\246 -\000\346\061\230\377\055\241\017\346\244\140\126\317\171\327\262 -\116\327\260\372\156\014\127\043\307\316\037\245\261\114\155\031 -\111\236\016\177\160\217\161\077\130\050\237\165\335\141\340\072 -\267\071\266\356\227\324\065\121\373\213\111\140\310\074\146\256 -\227\356\215\046\131\127\273\170\360\172\120\060\011\260\140\252 -\237\116\334\311\076\036\072\334\142\223\063\260\072\124\164\157 -\054\061\105\321\153\021\062\152\150\166\366\075\366\152\023\136 -\044\230\347\352\035\232\317\170\202\007\140\367\115\020\323\201 -\232\105\215\236\257\233\334\200\307\103\262\225\150\244\303\016 -\350\012\107\025\277\124\063\334\001\347\325\246\036\163\330\172 -\262\277\057\255\343\125\060\236\337\016\101\274\340\021\365\241 -\014\250\042\341\343\000\243\116\160\174\222\343\004\321\172\102 -\212\165\220\131\343\233\321\114\242\144\275\163\171\233\157\362 -\263\301\366\074 +\060\202\005\127\060\202\003\077\240\003\002\001\002\002\015\002 +\003\345\223\157\061\260\023\111\210\153\242\027\060\015\006\011 +\052\206\110\206\367\015\001\001\014\005\000\060\107\061\013\060 +\011\006\003\125\004\006\023\002\125\123\061\042\060\040\006\003 +\125\004\012\023\031\107\157\157\147\154\145\040\124\162\165\163 +\164\040\123\145\162\166\151\143\145\163\040\114\114\103\061\024 +\060\022\006\003\125\004\003\023\013\107\124\123\040\122\157\157 +\164\040\122\061\060\036\027\015\061\066\060\066\062\062\060\060 +\060\060\060\060\132\027\015\063\066\060\066\062\062\060\060\060 +\060\060\060\132\060\107\061\013\060\011\006\003\125\004\006\023 +\002\125\123\061\042\060\040\006\003\125\004\012\023\031\107\157 +\157\147\154\145\040\124\162\165\163\164\040\123\145\162\166\151 +\143\145\163\040\114\114\103\061\024\060\022\006\003\125\004\003 +\023\013\107\124\123\040\122\157\157\164\040\122\061\060\202\002 +\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000 +\003\202\002\017\000\060\202\002\012\002\202\002\001\000\266\021 +\002\213\036\343\241\167\233\073\334\277\224\076\267\225\247\100 +\074\241\375\202\371\175\062\006\202\161\366\366\214\177\373\350 +\333\274\152\056\227\227\243\214\113\371\053\366\261\371\316\204 +\035\261\371\305\227\336\357\271\362\243\351\274\022\211\136\247 +\252\122\253\370\043\047\313\244\261\234\143\333\327\231\176\360 +\012\136\353\150\246\364\306\132\107\015\115\020\063\343\116\261 +\023\243\310\030\154\113\354\374\011\220\337\235\144\051\045\043 +\007\241\264\322\075\056\140\340\317\322\011\207\273\315\110\360 +\115\302\302\172\210\212\273\272\317\131\031\326\257\217\260\007 +\260\236\061\361\202\301\300\337\056\246\155\154\031\016\265\330 +\176\046\032\105\003\075\260\171\244\224\050\255\017\177\046\345 +\250\010\376\226\350\074\150\224\123\356\203\072\210\053\025\226 +\011\262\340\172\214\056\165\326\234\353\247\126\144\217\226\117 +\150\256\075\227\302\204\217\300\274\100\300\013\134\275\366\207 +\263\065\154\254\030\120\177\204\340\114\315\222\323\040\351\063 +\274\122\231\257\062\265\051\263\045\052\264\110\371\162\341\312 +\144\367\346\202\020\215\350\235\302\212\210\372\070\146\212\374 +\143\371\001\371\170\375\173\134\167\372\166\207\372\354\337\261 +\016\171\225\127\264\275\046\357\326\001\321\353\026\012\273\216 +\013\265\305\305\212\125\253\323\254\352\221\113\051\314\031\244 +\062\045\116\052\361\145\104\320\002\316\252\316\111\264\352\237 +\174\203\260\100\173\347\103\253\247\154\243\217\175\211\201\372 +\114\245\377\325\216\303\316\113\340\265\330\263\216\105\317\166 +\300\355\100\053\375\123\017\260\247\325\073\015\261\212\242\003 +\336\061\255\314\167\352\157\173\076\326\337\221\042\022\346\276 +\372\330\062\374\020\143\024\121\162\336\135\326\026\223\275\051 +\150\063\357\072\146\354\007\212\046\337\023\327\127\145\170\047 +\336\136\111\024\000\242\000\177\232\250\041\266\251\261\225\260 +\245\271\015\026\021\332\307\154\110\074\100\340\176\015\132\315 +\126\074\321\227\005\271\313\113\355\071\113\234\304\077\322\125 +\023\156\044\260\326\161\372\364\301\272\314\355\033\365\376\201 +\101\330\000\230\075\072\310\256\172\230\067\030\005\225\002\003 +\001\000\001\243\102\060\100\060\016\006\003\125\035\017\001\001 +\377\004\004\003\002\001\206\060\017\006\003\125\035\023\001\001 +\377\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004 +\026\004\024\344\257\053\046\161\032\053\110\047\205\057\122\146 +\054\357\360\211\023\161\076\060\015\006\011\052\206\110\206\367 +\015\001\001\014\005\000\003\202\002\001\000\237\252\102\046\333 +\013\233\276\377\036\226\222\056\076\242\145\112\152\230\272\042 +\313\175\301\072\330\202\012\006\306\366\245\336\300\116\207\146 +\171\241\371\246\130\234\252\371\265\346\140\347\340\350\261\036 +\102\101\063\013\067\075\316\211\160\025\312\265\044\250\317\153 +\265\322\100\041\230\317\042\064\317\073\305\042\204\340\305\016 +\212\174\135\210\344\065\044\316\233\076\032\124\036\156\333\262 +\207\247\374\363\372\201\125\024\142\012\131\251\042\005\061\076 +\202\326\356\333\127\064\274\063\225\323\027\033\350\047\242\213 +\173\116\046\032\172\132\144\266\321\254\067\361\375\240\363\070 +\354\162\360\021\165\235\313\064\122\215\346\166\153\027\306\337 +\206\253\047\216\111\053\165\146\201\020\041\246\352\076\364\256 +\045\377\174\025\336\316\214\045\077\312\142\160\012\367\057\011 +\146\007\310\077\034\374\360\333\105\060\337\142\210\301\265\017 +\235\303\237\112\336\131\131\107\305\207\042\066\346\202\247\355 +\012\271\342\007\240\215\173\172\112\074\161\322\342\003\241\037 +\062\007\335\033\344\102\316\014\000\105\141\200\265\013\040\131 +\051\170\275\371\125\313\143\305\074\114\364\266\377\333\152\137 +\061\153\231\236\054\301\153\120\244\327\346\030\024\275\205\077 +\147\253\106\237\240\377\102\247\072\177\134\313\135\260\160\035 +\053\064\365\324\166\011\014\353\170\114\131\005\363\063\102\303 +\141\025\020\033\167\115\316\042\214\324\205\362\105\175\267\123 +\352\357\100\132\224\012\134\040\137\116\100\135\142\042\166\337 +\377\316\141\275\214\043\170\322\067\002\340\216\336\321\021\067 +\211\366\277\355\111\007\142\256\222\354\100\032\257\024\011\331 +\320\116\262\242\367\276\356\356\330\377\334\032\055\336\270\066 +\161\342\374\171\267\224\045\321\110\163\133\241\065\347\263\231 +\147\165\301\031\072\053\107\116\323\102\216\375\061\310\026\146 +\332\322\014\074\333\263\216\311\241\015\200\017\173\026\167\024 +\277\377\333\011\224\262\223\274\040\130\025\351\333\161\103\363 +\336\020\303\000\334\250\052\225\266\302\326\077\220\153\166\333 +\154\376\214\274\362\160\065\014\334\231\031\065\334\327\310\106 +\143\325\066\161\256\127\373\267\202\155\334 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "GlobalSign Secure Mail Root R45" -# Issuer: CN=GlobalSign Secure Mail Root R45,O=GlobalSign nv-sa,C=BE -# Serial Number:76:53:fe:a8:4c:50:ab:9f:8d:32:b5:1d:03:8f:57:dc -# Subject: CN=GlobalSign Secure Mail Root R45,O=GlobalSign nv-sa,C=BE -# Not Valid Before: Wed Mar 18 00:00:00 2020 -# Not Valid After : Sat Mar 18 00:00:00 2045 -# Fingerprint (SHA-256): 31:9A:F0:A7:72:9E:6F:89:26:9C:13:1E:A6:A3:A1:6F:CD:86:38:9F:DC:AB:3C:47:A4:A6:75:C1:61:A3:F9:74 -# Fingerprint (SHA1): 76:18:D1:F3:80:24:3D:52:40:C6:11:6A:AD:57:77:09:7D:81:30:A0 +# Trust for "GTS Root R1" +# Issuer: CN=GTS Root R1,O=Google Trust Services LLC,C=US +# Serial Number:02:03:e5:93:6f:31:b0:13:49:88:6b:a2:17 +# Subject: CN=GTS Root R1,O=Google Trust Services LLC,C=US +# Not Valid Before: Wed Jun 22 00:00:00 2016 +# Not Valid After : Sun Jun 22 00:00:00 2036 +# Fingerprint (SHA-256): D9:47:43:2A:BD:E7:B7:FA:90:FC:2E:6B:59:10:1B:12:80:E0:E1:C7:E4:E4:0F:A3:C6:88:7F:FF:57:A7:F4:CF +# Fingerprint (SHA1): E5:8C:1C:C4:91:3B:38:63:4B:E9:10:6E:E3:AD:8E:6B:9D:D9:81:4A CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign Secure Mail Root R45" +CKA_LABEL UTF8 "GTS Root R1" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\166\030\321\363\200\044\075\122\100\306\021\152\255\127\167\011 -\175\201\060\240 +\345\214\034\304\221\073\070\143\113\351\020\156\343\255\216\153 +\235\331\201\112 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\223\304\173\263\016\124\107\034\103\054\213\276\160\205\142\051 +\005\376\320\277\161\250\243\166\143\332\001\340\330\122\334\100 END CKA_ISSUER MULTILINE_OCTAL -\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 -\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 -\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 -\040\122\064\065 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\166\123\376\250\114\120\253\237\215\062\265\035\003\217 -\127\334 +\002\015\002\003\345\223\157\061\260\023\111\210\153\242\027 END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "GlobalSign Secure Mail Root E45" +# Certificate "GTS Root R2" # -# Issuer: CN=GlobalSign Secure Mail Root E45,O=GlobalSign nv-sa,C=BE -# Serial Number:76:53:fe:aa:27:1d:95:46:5d:d6:f1:9e:e5:b8:90:0a -# Subject: CN=GlobalSign Secure Mail Root E45,O=GlobalSign nv-sa,C=BE -# Not Valid Before: Wed Mar 18 00:00:00 2020 -# Not Valid After : Sat Mar 18 00:00:00 2045 -# Fingerprint (SHA-256): 5C:BF:6F:B8:1F:D4:17:EA:41:28:CD:6F:81:72:A3:C9:40:20:94:F7:4A:B2:ED:3A:06:B4:40:5D:04:F3:0B:19 -# Fingerprint (SHA1): 18:2E:1F:32:4F:89:DF:BE:FE:88:89:F0:93:C2:C4:A0:2B:67:75:21 +# Issuer: CN=GTS Root R2,O=Google Trust Services LLC,C=US +# Serial Number:02:03:e5:ae:c5:8d:04:25:1a:ab:11:25:aa +# Subject: CN=GTS Root R2,O=Google Trust Services LLC,C=US +# Not Valid Before: Wed Jun 22 00:00:00 2016 +# Not Valid After : Sun Jun 22 00:00:00 2036 +# Fingerprint (SHA-256): 8D:25:CD:97:22:9D:BF:70:35:6B:DA:4E:B3:CC:73:40:31:E2:4C:F0:0F:AF:CF:D3:2D:C7:6E:B5:84:1C:7E:A8 +# Fingerprint (SHA1): 9A:44:49:76:32:DB:DE:FA:D0:BC:FB:5A:7B:17:BD:9E:56:09:24:94 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign Secure Mail Root E45" +CKA_LABEL UTF8 "GTS Root R2" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 -\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 -\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 -\040\105\064\065 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\062 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 -\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 -\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 -\040\105\064\065 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\166\123\376\252\047\035\225\106\135\326\361\236\345\270 -\220\012 +\002\015\002\003\345\256\305\215\004\045\032\253\021\045\252 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\041\060\202\001\247\240\003\002\001\002\002\020\166 -\123\376\252\047\035\225\106\135\326\361\236\345\270\220\012\060 -\012\006\010\052\206\110\316\075\004\003\003\060\122\061\013\060 -\011\006\003\125\004\006\023\002\102\105\061\031\060\027\006\003 -\125\004\012\023\020\107\154\157\142\141\154\123\151\147\156\040 -\156\166\055\163\141\061\050\060\046\006\003\125\004\003\023\037 -\107\154\157\142\141\154\123\151\147\156\040\123\145\143\165\162 -\145\040\115\141\151\154\040\122\157\157\164\040\105\064\065\060 -\036\027\015\062\060\060\063\061\070\060\060\060\060\060\060\132 -\027\015\064\065\060\063\061\070\060\060\060\060\060\060\132\060 -\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061\031 -\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154\123 -\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003\125 -\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040\123 -\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164\040 -\105\064\065\060\166\060\020\006\007\052\206\110\316\075\002\001 -\006\005\053\201\004\000\042\003\142\000\004\371\171\213\201\107 -\067\211\226\077\105\111\120\177\032\046\013\223\062\176\056\300 -\300\247\010\232\303\156\217\233\076\013\042\354\067\123\267\157 -\212\260\274\047\067\113\155\251\106\073\331\037\377\245\241\104 -\273\055\163\277\236\101\007\134\123\233\121\010\072\132\273\157 -\070\307\026\221\170\302\112\023\151\035\202\337\132\057\000\210 -\226\242\056\034\164\371\235\176\146\067\212\243\102\060\100\060 -\016\006\003\125\035\017\001\001\377\004\004\003\002\001\206\060 -\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 -\060\035\006\003\125\035\016\004\026\004\024\337\023\136\213\137 -\302\100\002\375\126\267\224\114\266\036\325\246\261\024\226\060 -\012\006\010\052\206\110\316\075\004\003\003\003\150\000\060\145 -\002\060\023\260\276\327\161\040\076\344\253\234\316\066\022\175 -\137\114\037\052\265\151\105\063\137\323\055\132\262\344\210\307 -\336\012\066\102\062\171\235\246\153\272\341\371\104\052\173\212 -\303\022\002\061\000\240\146\034\116\207\235\207\311\355\231\114 -\033\012\356\055\140\303\067\307\035\315\265\162\260\331\306\357 -\274\362\377\077\360\122\335\010\347\252\144\171\303\344\151\127 -\221\057\244\313\174 +\060\202\005\127\060\202\003\077\240\003\002\001\002\002\015\002 +\003\345\256\305\215\004\045\032\253\021\045\252\060\015\006\011 +\052\206\110\206\367\015\001\001\014\005\000\060\107\061\013\060 +\011\006\003\125\004\006\023\002\125\123\061\042\060\040\006\003 +\125\004\012\023\031\107\157\157\147\154\145\040\124\162\165\163 +\164\040\123\145\162\166\151\143\145\163\040\114\114\103\061\024 +\060\022\006\003\125\004\003\023\013\107\124\123\040\122\157\157 +\164\040\122\062\060\036\027\015\061\066\060\066\062\062\060\060 +\060\060\060\060\132\027\015\063\066\060\066\062\062\060\060\060 +\060\060\060\132\060\107\061\013\060\011\006\003\125\004\006\023 +\002\125\123\061\042\060\040\006\003\125\004\012\023\031\107\157 +\157\147\154\145\040\124\162\165\163\164\040\123\145\162\166\151 +\143\145\163\040\114\114\103\061\024\060\022\006\003\125\004\003 +\023\013\107\124\123\040\122\157\157\164\040\122\062\060\202\002 +\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000 +\003\202\002\017\000\060\202\002\012\002\202\002\001\000\316\336 +\375\246\373\354\354\024\064\074\007\006\132\154\131\367\031\065 +\335\367\301\235\125\252\323\315\073\244\223\162\357\012\372\155 +\235\366\360\205\200\133\241\110\122\237\071\305\267\356\050\254 +\357\313\166\150\024\271\337\255\001\154\231\037\304\042\035\237 +\376\162\167\340\054\133\257\344\004\277\117\162\240\032\064\230 +\350\071\150\354\225\045\173\166\241\346\151\271\205\031\275\211 +\214\376\255\355\066\352\163\274\377\203\342\313\175\301\322\316 +\112\263\215\005\236\213\111\223\337\301\133\320\156\136\360\056 +\060\056\202\374\372\274\264\027\012\110\345\210\233\305\233\153 +\336\260\312\264\003\360\332\364\220\270\145\144\367\134\114\255 +\350\176\146\136\231\327\270\302\076\310\320\023\235\255\356\344 +\105\173\211\125\367\212\037\142\122\204\022\263\302\100\227\343 +\212\037\107\221\246\164\132\322\370\261\143\050\020\270\263\011 +\270\126\167\100\242\046\230\171\306\376\337\045\356\076\345\240 +\177\324\141\017\121\113\074\077\214\332\341\160\164\330\302\150 +\241\371\301\014\351\241\342\177\273\125\074\166\006\356\152\116 +\314\222\210\060\115\232\275\117\013\110\232\204\265\230\243\325 +\373\163\301\127\141\335\050\126\165\023\256\207\216\347\014\121 +\011\020\165\210\114\274\215\371\173\074\324\042\110\037\052\334 +\353\153\273\104\261\313\063\161\062\106\257\255\112\361\214\350 +\164\072\254\347\032\042\163\200\322\060\367\045\102\307\042\073 +\073\022\255\226\056\306\303\166\007\252\040\267\065\111\127\351 +\222\111\350\166\026\162\061\147\053\226\176\212\243\307\224\126 +\042\277\152\113\176\001\041\262\043\062\337\344\232\104\155\131 +\133\135\365\000\240\034\233\306\170\227\215\220\377\233\310\252 +\264\257\021\121\071\136\331\373\147\255\325\133\021\235\062\232 +\033\275\325\272\133\245\311\313\045\151\123\125\047\134\340\312 +\066\313\210\141\373\036\267\320\313\356\026\373\323\246\114\336 +\222\245\324\342\337\365\006\124\336\056\235\113\264\223\060\252 +\201\316\335\032\334\121\163\015\117\160\351\345\266\026\041\031 +\171\262\346\211\013\165\144\312\325\253\274\011\301\030\241\377 +\324\124\241\205\074\375\024\044\003\262\207\323\244\267\002\003 +\001\000\001\243\102\060\100\060\016\006\003\125\035\017\001\001 +\377\004\004\003\002\001\206\060\017\006\003\125\035\023\001\001 +\377\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004 +\026\004\024\273\377\312\216\043\237\117\231\312\333\342\150\246 +\245\025\047\027\036\331\016\060\015\006\011\052\206\110\206\367 +\015\001\001\014\005\000\003\202\002\001\000\037\312\316\335\307 +\276\241\237\331\047\114\013\334\027\230\021\152\210\336\075\346 +\161\126\162\262\236\032\116\234\325\053\230\044\135\233\153\173 +\260\063\202\011\275\337\045\106\352\230\236\266\033\376\203\074 +\322\142\141\301\004\355\316\340\305\311\310\023\023\125\347\250 +\143\255\214\173\001\376\167\060\341\316\150\233\005\370\022\356 +\171\061\240\101\105\065\050\012\161\244\044\117\214\334\074\202 +\007\137\146\334\175\020\376\014\141\263\005\225\356\341\256\201 +\017\250\370\307\217\115\250\043\002\046\153\035\203\122\125\316 +\265\057\000\312\200\100\340\341\164\254\140\365\207\200\235\256 +\066\144\221\135\260\150\030\352\212\141\311\167\250\227\304\311 +\307\245\374\125\113\363\360\177\271\145\075\047\150\320\314\153 +\372\123\235\341\221\032\311\135\032\226\155\062\207\355\003\040 +\310\002\316\132\276\331\352\375\262\115\304\057\033\337\137\172 +\365\370\213\306\356\061\072\045\121\125\147\215\144\062\173\351 +\236\303\202\272\052\055\351\036\264\340\110\006\242\374\147\257 +\037\042\002\163\373\040\012\257\235\124\113\241\315\377\140\107 +\260\077\135\357\033\126\275\227\041\226\055\012\321\136\235\070 +\002\107\154\271\364\366\043\045\270\240\152\232\053\167\010\372 +\304\261\050\220\046\130\010\074\342\176\252\327\075\157\272\061 +\210\012\005\353\047\265\241\111\356\240\105\124\173\346\047\145 +\231\040\041\250\243\274\373\030\226\273\122\157\014\355\203\121 +\114\351\131\342\040\140\305\302\145\222\202\214\363\020\037\016 +\212\227\276\167\202\155\077\217\035\135\274\111\047\275\314\117 +\017\341\316\166\206\004\043\305\300\214\022\133\375\333\204\240 +\044\361\110\377\144\174\320\276\134\026\321\357\231\255\300\037 +\373\313\256\274\070\042\006\046\144\332\332\227\016\077\050\025 +\104\250\117\000\312\360\232\314\317\164\152\264\076\074\353\225 +\354\265\323\132\330\201\231\351\103\030\067\353\263\273\321\130 +\142\101\363\146\322\217\252\170\225\124\040\303\132\056\164\053 +\325\321\276\030\151\300\254\325\244\317\071\272\121\204\003\145 +\351\142\300\142\376\330\115\125\226\342\320\021\372\110\064\021 +\354\236\355\005\035\344\310\326\035\206\313 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "GlobalSign Secure Mail Root E45" -# Issuer: CN=GlobalSign Secure Mail Root E45,O=GlobalSign nv-sa,C=BE -# Serial Number:76:53:fe:aa:27:1d:95:46:5d:d6:f1:9e:e5:b8:90:0a -# Subject: CN=GlobalSign Secure Mail Root E45,O=GlobalSign nv-sa,C=BE -# Not Valid Before: Wed Mar 18 00:00:00 2020 -# Not Valid After : Sat Mar 18 00:00:00 2045 -# Fingerprint (SHA-256): 5C:BF:6F:B8:1F:D4:17:EA:41:28:CD:6F:81:72:A3:C9:40:20:94:F7:4A:B2:ED:3A:06:B4:40:5D:04:F3:0B:19 -# Fingerprint (SHA1): 18:2E:1F:32:4F:89:DF:BE:FE:88:89:F0:93:C2:C4:A0:2B:67:75:21 +# Trust for "GTS Root R2" +# Issuer: CN=GTS Root R2,O=Google Trust Services LLC,C=US +# Serial Number:02:03:e5:ae:c5:8d:04:25:1a:ab:11:25:aa +# Subject: CN=GTS Root R2,O=Google Trust Services LLC,C=US +# Not Valid Before: Wed Jun 22 00:00:00 2016 +# Not Valid After : Sun Jun 22 00:00:00 2036 +# Fingerprint (SHA-256): 8D:25:CD:97:22:9D:BF:70:35:6B:DA:4E:B3:CC:73:40:31:E2:4C:F0:0F:AF:CF:D3:2D:C7:6E:B5:84:1C:7E:A8 +# Fingerprint (SHA1): 9A:44:49:76:32:DB:DE:FA:D0:BC:FB:5A:7B:17:BD:9E:56:09:24:94 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign Secure Mail Root E45" +CKA_LABEL UTF8 "GTS Root R2" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\030\056\037\062\117\211\337\276\376\210\211\360\223\302\304\240 -\053\147\165\041 +\232\104\111\166\062\333\336\372\320\274\373\132\173\027\275\236 +\126\011\044\224 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\305\374\306\056\237\364\122\055\052\250\244\272\373\147\062\377 +\036\071\300\123\346\036\051\202\013\312\122\125\066\135\127\334 END CKA_ISSUER MULTILINE_OCTAL -\060\122\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\050\060\046\006\003 -\125\004\003\023\037\107\154\157\142\141\154\123\151\147\156\040 -\123\145\143\165\162\145\040\115\141\151\154\040\122\157\157\164 -\040\105\064\065 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\166\123\376\252\047\035\225\106\135\326\361\236\345\270 -\220\012 +\002\015\002\003\345\256\305\215\004\045\032\253\021\045\252 END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "GlobalSign Root R46" +# Certificate "GTS Root R3" # -# Issuer: CN=GlobalSign Root R46,O=GlobalSign nv-sa,C=BE -# Serial Number:11:d2:bb:b9:d7:23:18:9e:40:5f:0a:9d:2d:d0:df:25:67:d1 -# Subject: CN=GlobalSign Root R46,O=GlobalSign nv-sa,C=BE -# Not Valid Before: Wed Mar 20 00:00:00 2019 -# Not Valid After : Tue Mar 20 00:00:00 2046 -# Fingerprint (SHA-256): 4F:A3:12:6D:8D:3A:11:D1:C4:85:5A:4F:80:7C:BA:D6:CF:91:9D:3A:5A:88:B0:3B:EA:2C:63:72:D9:3C:40:C9 -# Fingerprint (SHA1): 53:A2:B0:4B:CA:6B:D6:45:E6:39:8A:8E:C4:0D:D2:BF:77:C3:A2:90 +# Issuer: CN=GTS Root R3,O=Google Trust Services LLC,C=US +# Serial Number:02:03:e5:b8:82:eb:20:f8:25:27:6d:3d:66 +# Subject: CN=GTS Root R3,O=Google Trust Services LLC,C=US +# Not Valid Before: Wed Jun 22 00:00:00 2016 +# Not Valid After : Sun Jun 22 00:00:00 2036 +# Fingerprint (SHA-256): 34:D8:A7:3E:E2:08:D9:BC:DB:0D:95:65:20:93:4B:4E:40:E6:94:82:59:6E:8B:6F:73:C8:42:6B:01:0A:6F:48 +# Fingerprint (SHA1): ED:E5:71:80:2B:C8:92:B9:5B:83:3C:D2:32:68:3F:09:CD:A0:1E:46 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign Root R46" +CKA_LABEL UTF8 "GTS Root R3" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 -\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 -\122\157\157\164\040\122\064\066 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\063 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 -\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 -\122\157\157\164\040\122\064\066 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\022\021\322\273\271\327\043\030\236\100\137\012\235\055\320 -\337\045\147\321 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\132\060\202\003\102\240\003\002\001\002\002\022\021 -\322\273\271\327\043\030\236\100\137\012\235\055\320\337\045\147 -\321\060\015\006\011\052\206\110\206\367\015\001\001\014\005\000 -\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 -\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 -\122\157\157\164\040\122\064\066\060\036\027\015\061\071\060\063 -\062\060\060\060\060\060\060\060\132\027\015\064\066\060\063\062 -\060\060\060\060\060\060\060\132\060\106\061\013\060\011\006\003 -\125\004\006\023\002\102\105\061\031\060\027\006\003\125\004\012 -\023\020\107\154\157\142\141\154\123\151\147\156\040\156\166\055 -\163\141\061\034\060\032\006\003\125\004\003\023\023\107\154\157 -\142\141\154\123\151\147\156\040\122\157\157\164\040\122\064\066 -\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 -\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 -\000\254\254\164\062\350\263\145\345\272\355\103\046\035\246\211 -\015\105\272\051\210\262\244\035\143\335\323\301\054\011\127\211 -\071\241\125\351\147\064\167\014\156\344\125\035\122\045\322\023 -\153\136\341\035\251\267\175\211\062\137\015\236\237\054\172\143 -\140\100\037\246\260\266\170\217\231\124\226\010\130\256\344\006 -\274\142\005\002\026\277\257\250\043\003\266\224\017\274\156\154 -\302\313\325\246\273\014\351\366\301\002\373\041\336\146\335\027 -\253\164\102\357\360\164\057\045\364\352\153\125\133\220\333\235 -\337\136\207\012\100\373\255\031\153\373\367\312\140\210\336\332 -\301\217\326\256\325\177\324\074\203\356\327\026\114\203\105\063 -\153\047\320\206\320\034\055\153\363\253\175\361\205\251\365\050 -\322\255\357\363\204\113\034\207\374\023\243\072\162\242\132\021 -\053\326\047\161\047\355\201\055\155\146\201\222\207\264\033\130 -\172\314\077\012\372\106\117\115\170\134\370\053\110\343\004\204 -\313\135\366\264\152\263\145\374\102\236\121\046\043\040\313\075 -\024\371\201\355\145\026\000\117\032\144\227\146\010\317\214\173 -\343\053\300\235\371\024\362\033\361\126\152\026\277\054\205\205 -\315\170\070\232\353\102\152\002\064\030\203\027\116\224\126\370 -\266\202\265\363\226\335\075\363\276\177\040\167\076\173\031\043 -\153\054\324\162\163\103\127\175\340\370\327\151\117\027\066\004 -\371\300\220\140\067\105\336\346\014\330\164\215\256\234\242\155 -\164\135\102\276\006\365\331\144\156\002\020\254\211\260\114\073 -\007\115\100\176\044\305\212\230\202\171\216\244\247\202\040\215 -\043\372\047\161\311\337\306\101\164\240\115\366\221\026\334\106 -\214\137\051\143\061\131\161\014\330\157\302\266\062\175\373\346 -\135\123\246\176\025\374\273\165\174\135\354\370\366\027\034\354 -\307\153\031\313\363\173\360\053\007\245\331\154\171\124\166\154 -\235\034\246\156\016\351\171\014\250\043\152\243\337\033\060\061 -\237\261\124\173\376\152\313\146\252\334\145\320\242\236\112\232 -\007\041\153\201\217\333\304\131\372\336\042\300\004\234\343\252 -\133\066\223\350\075\275\172\241\235\013\166\261\013\307\235\375 -\317\230\250\006\302\370\052\243\241\203\240\267\045\162\245\002 -\343\002\003\001\000\001\243\102\060\100\060\016\006\003\125\035 -\017\001\001\377\004\004\003\002\001\206\060\017\006\003\125\035 -\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125 -\035\016\004\026\004\024\003\134\253\163\201\207\250\314\260\246 -\325\224\342\066\226\111\377\005\231\054\060\015\006\011\052\206 -\110\206\367\015\001\001\014\005\000\003\202\002\001\000\174\170 -\354\366\002\054\273\133\176\222\053\135\071\334\276\330\035\242 -\102\063\115\371\357\244\052\073\104\151\036\254\331\105\243\116 -\074\247\330\044\121\262\124\034\223\116\304\357\173\223\205\140 -\046\352\011\110\340\365\273\307\351\150\322\273\152\061\161\314 -\171\256\021\250\360\231\375\345\037\274\057\250\314\127\353\166 -\304\041\246\107\123\125\115\150\277\005\244\356\327\046\253\142 -\332\103\067\113\342\306\265\345\262\203\031\072\307\323\333\115 -\236\010\172\363\356\317\076\142\373\254\350\140\314\321\307\241 -\134\203\105\304\105\314\363\027\153\024\311\004\002\076\322\044 -\246\171\351\036\316\242\347\301\131\025\237\035\342\113\232\076 -\237\166\010\055\153\330\272\127\024\332\203\352\376\214\125\351 -\320\116\251\314\167\061\261\104\021\172\134\261\076\323\024\105 -\025\030\142\044\023\322\313\115\316\134\203\301\066\362\020\265 -\016\210\155\270\341\126\237\211\336\226\146\071\107\144\054\156 -\115\256\142\173\277\140\164\031\270\126\254\222\254\026\062\355 -\255\150\125\376\230\272\323\064\336\364\311\141\303\016\206\366 -\113\204\140\356\015\173\265\062\130\171\221\125\054\201\103\263 -\164\037\172\252\045\236\035\327\241\213\271\315\102\056\004\244 -\146\203\115\211\065\266\154\250\066\112\171\041\170\042\320\102 -\274\321\100\061\220\241\276\004\317\312\147\355\365\360\200\323 -\140\311\203\052\042\005\320\007\073\122\277\014\236\252\053\371 -\273\346\037\217\045\272\205\215\027\036\002\376\135\120\004\127 -\317\376\055\274\357\134\300\032\253\266\237\044\306\337\163\150 -\110\220\054\024\364\077\122\032\344\322\313\024\303\141\151\317 -\342\371\030\305\272\063\237\024\243\004\135\271\161\367\265\224 -\330\366\063\301\132\301\064\213\174\233\335\223\072\347\023\242 -\160\141\237\257\217\353\330\305\165\370\063\146\324\164\147\072 -\067\167\234\347\335\244\017\166\103\146\212\103\362\237\373\014 -\102\170\143\321\342\017\157\173\324\241\075\164\227\205\267\110 -\071\101\326\040\374\320\072\263\372\350\157\304\212\272\161\067 -\276\213\227\261\170\061\117\263\347\266\003\023\316\124\235\256 -\045\131\314\177\065\137\010\367\100\105\061\170\052\172 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\063 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\015\002\003\345\270\202\353\040\370\045\047\155\075\146 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\011\060\202\001\216\240\003\002\001\002\002\015\002 +\003\345\270\202\353\040\370\045\047\155\075\146\060\012\006\010 +\052\206\110\316\075\004\003\003\060\107\061\013\060\011\006\003 +\125\004\006\023\002\125\123\061\042\060\040\006\003\125\004\012 +\023\031\107\157\157\147\154\145\040\124\162\165\163\164\040\123 +\145\162\166\151\143\145\163\040\114\114\103\061\024\060\022\006 +\003\125\004\003\023\013\107\124\123\040\122\157\157\164\040\122 +\063\060\036\027\015\061\066\060\066\062\062\060\060\060\060\060 +\060\132\027\015\063\066\060\066\062\062\060\060\060\060\060\060 +\132\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154 +\145\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163 +\040\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107 +\124\123\040\122\157\157\164\040\122\063\060\166\060\020\006\007 +\052\206\110\316\075\002\001\006\005\053\201\004\000\042\003\142 +\000\004\037\117\063\207\063\051\212\241\204\336\313\307\041\130 +\101\211\352\126\235\053\113\205\306\035\114\047\274\177\046\121 +\162\157\342\237\326\243\312\314\105\024\106\213\255\357\176\206 +\214\354\261\176\057\377\251\161\235\030\204\105\004\101\125\156 +\053\352\046\177\273\220\001\343\113\031\272\344\124\226\105\011 +\261\325\154\221\104\255\204\023\216\232\214\015\200\014\062\366 +\340\047\243\102\060\100\060\016\006\003\125\035\017\001\001\377 +\004\004\003\002\001\206\060\017\006\003\125\035\023\001\001\377 +\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026 +\004\024\301\361\046\272\240\055\256\205\201\317\323\361\052\022 +\275\270\012\147\375\274\060\012\006\010\052\206\110\316\075\004 +\003\003\003\151\000\060\146\002\061\000\366\341\040\225\024\173 +\124\243\220\026\021\277\204\310\352\157\153\027\236\036\106\230 +\040\233\237\323\015\331\254\323\057\315\174\370\133\056\125\273 +\277\335\222\367\244\014\334\061\341\242\002\061\000\374\227\146 +\146\345\103\026\023\203\335\307\337\057\276\024\070\355\001\316 +\261\027\032\021\165\351\275\003\217\046\176\204\345\311\140\246 +\225\327\124\131\267\347\021\054\211\324\271\356\027 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "GlobalSign Root R46" -# Issuer: CN=GlobalSign Root R46,O=GlobalSign nv-sa,C=BE -# Serial Number:11:d2:bb:b9:d7:23:18:9e:40:5f:0a:9d:2d:d0:df:25:67:d1 -# Subject: CN=GlobalSign Root R46,O=GlobalSign nv-sa,C=BE -# Not Valid Before: Wed Mar 20 00:00:00 2019 -# Not Valid After : Tue Mar 20 00:00:00 2046 -# Fingerprint (SHA-256): 4F:A3:12:6D:8D:3A:11:D1:C4:85:5A:4F:80:7C:BA:D6:CF:91:9D:3A:5A:88:B0:3B:EA:2C:63:72:D9:3C:40:C9 -# Fingerprint (SHA1): 53:A2:B0:4B:CA:6B:D6:45:E6:39:8A:8E:C4:0D:D2:BF:77:C3:A2:90 +# Trust for "GTS Root R3" +# Issuer: CN=GTS Root R3,O=Google Trust Services LLC,C=US +# Serial Number:02:03:e5:b8:82:eb:20:f8:25:27:6d:3d:66 +# Subject: CN=GTS Root R3,O=Google Trust Services LLC,C=US +# Not Valid Before: Wed Jun 22 00:00:00 2016 +# Not Valid After : Sun Jun 22 00:00:00 2036 +# Fingerprint (SHA-256): 34:D8:A7:3E:E2:08:D9:BC:DB:0D:95:65:20:93:4B:4E:40:E6:94:82:59:6E:8B:6F:73:C8:42:6B:01:0A:6F:48 +# Fingerprint (SHA1): ED:E5:71:80:2B:C8:92:B9:5B:83:3C:D2:32:68:3F:09:CD:A0:1E:46 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign Root R46" +CKA_LABEL UTF8 "GTS Root R3" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\123\242\260\113\312\153\326\105\346\071\212\216\304\015\322\277 -\167\303\242\220 +\355\345\161\200\053\310\222\271\133\203\074\322\062\150\077\011 +\315\240\036\106 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\304\024\060\344\372\146\103\224\052\152\033\044\137\031\320\357 +\076\347\235\130\002\224\106\121\224\345\340\042\112\213\347\163 END CKA_ISSUER MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 -\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 -\122\157\157\164\040\122\064\066 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\063 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\022\021\322\273\271\327\043\030\236\100\137\012\235\055\320 -\337\045\147\321 +\002\015\002\003\345\270\202\353\040\370\045\047\155\075\146 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "GlobalSign Root E46" +# Certificate "GTS Root R4" # -# Issuer: CN=GlobalSign Root E46,O=GlobalSign nv-sa,C=BE -# Serial Number:11:d2:bb:ba:33:6e:d4:bc:e6:24:68:c5:0d:84:1d:98:e8:43 -# Subject: CN=GlobalSign Root E46,O=GlobalSign nv-sa,C=BE -# Not Valid Before: Wed Mar 20 00:00:00 2019 -# Not Valid After : Tue Mar 20 00:00:00 2046 -# Fingerprint (SHA-256): CB:B9:C4:4D:84:B8:04:3E:10:50:EA:31:A6:9F:51:49:55:D7:BF:D2:E2:C6:B4:93:01:01:9A:D6:1D:9F:50:58 -# Fingerprint (SHA1): 39:B4:6C:D5:FE:80:06:EB:E2:2F:4A:BB:08:33:A0:AF:DB:B9:DD:84 +# Issuer: CN=GTS Root R4,O=Google Trust Services LLC,C=US +# Serial Number:02:03:e5:c0:68:ef:63:1a:9c:72:90:50:52 +# Subject: CN=GTS Root R4,O=Google Trust Services LLC,C=US +# Not Valid Before: Wed Jun 22 00:00:00 2016 +# Not Valid After : Sun Jun 22 00:00:00 2036 +# Fingerprint (SHA-256): 34:9D:FA:40:58:C5:E2:63:12:3B:39:8A:E7:95:57:3C:4E:13:13:C8:3F:E6:8F:93:55:6C:D5:E8:03:1B:3C:7D +# Fingerprint (SHA1): 77:D3:03:67:B5:E0:0C:15:F6:0C:38:61:DF:7C:E1:3B:92:46:4D:47 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign Root E46" +CKA_LABEL UTF8 "GTS Root R4" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 -\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 -\122\157\157\164\040\105\064\066 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\064 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 -\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 -\122\157\157\164\040\105\064\066 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\064 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\022\021\322\273\272\063\156\324\274\346\044\150\305\015\204 -\035\230\350\103 +\002\015\002\003\345\300\150\357\143\032\234\162\220\120\122 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\013\060\202\001\221\240\003\002\001\002\002\022\021 -\322\273\272\063\156\324\274\346\044\150\305\015\204\035\230\350 -\103\060\012\006\010\052\206\110\316\075\004\003\003\060\106\061 -\013\060\011\006\003\125\004\006\023\002\102\105\061\031\060\027 -\006\003\125\004\012\023\020\107\154\157\142\141\154\123\151\147 -\156\040\156\166\055\163\141\061\034\060\032\006\003\125\004\003 -\023\023\107\154\157\142\141\154\123\151\147\156\040\122\157\157 -\164\040\105\064\066\060\036\027\015\061\071\060\063\062\060\060 -\060\060\060\060\060\132\027\015\064\066\060\063\062\060\060\060 -\060\060\060\060\132\060\106\061\013\060\011\006\003\125\004\006 -\023\002\102\105\061\031\060\027\006\003\125\004\012\023\020\107 -\154\157\142\141\154\123\151\147\156\040\156\166\055\163\141\061 -\034\060\032\006\003\125\004\003\023\023\107\154\157\142\141\154 -\123\151\147\156\040\122\157\157\164\040\105\064\066\060\166\060 -\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000 -\042\003\142\000\004\234\016\261\317\267\350\236\122\167\165\064 -\372\245\106\247\255\062\031\062\264\007\251\047\312\224\273\014 -\322\012\020\307\332\211\260\227\014\160\023\011\001\216\330\352 -\107\352\276\262\200\053\315\374\050\015\333\254\274\244\206\067 -\355\160\010\000\165\352\223\013\173\056\122\234\043\150\043\006 -\103\354\222\057\123\204\333\373\107\024\007\350\137\224\147\135 -\311\172\201\074\040\243\102\060\100\060\016\006\003\125\035\017 -\001\001\377\004\004\003\002\001\206\060\017\006\003\125\035\023 -\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035 -\016\004\026\004\024\061\012\220\217\266\306\235\322\104\113\200 -\265\242\346\037\261\022\117\033\225\060\012\006\010\052\206\110 -\316\075\004\003\003\003\150\000\060\145\002\061\000\337\124\220 -\355\233\357\213\224\002\223\027\202\231\276\263\236\054\366\013 -\221\214\237\112\024\261\366\144\274\273\150\121\023\014\003\367 -\025\213\204\140\271\213\377\122\216\347\214\274\034\002\060\074 -\371\021\324\214\116\300\301\141\302\025\114\252\253\035\013\061 -\137\073\034\342\000\227\104\061\346\376\163\226\057\332\226\323 -\376\010\007\263\064\211\274\005\237\367\036\206\356\213\160 +\060\202\002\011\060\202\001\216\240\003\002\001\002\002\015\002 +\003\345\300\150\357\143\032\234\162\220\120\122\060\012\006\010 +\052\206\110\316\075\004\003\003\060\107\061\013\060\011\006\003 +\125\004\006\023\002\125\123\061\042\060\040\006\003\125\004\012 +\023\031\107\157\157\147\154\145\040\124\162\165\163\164\040\123 +\145\162\166\151\143\145\163\040\114\114\103\061\024\060\022\006 +\003\125\004\003\023\013\107\124\123\040\122\157\157\164\040\122 +\064\060\036\027\015\061\066\060\066\062\062\060\060\060\060\060 +\060\132\027\015\063\066\060\066\062\062\060\060\060\060\060\060 +\132\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154 +\145\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163 +\040\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107 +\124\123\040\122\157\157\164\040\122\064\060\166\060\020\006\007 +\052\206\110\316\075\002\001\006\005\053\201\004\000\042\003\142 +\000\004\363\164\163\247\150\213\140\256\103\270\065\305\201\060 +\173\113\111\235\373\301\141\316\346\336\106\275\153\325\141\030 +\065\256\100\335\163\367\211\221\060\132\353\074\356\205\174\242 +\100\166\073\251\306\270\107\330\052\347\222\221\152\163\351\261 +\162\071\237\051\237\242\230\323\137\136\130\206\145\017\241\204 +\145\006\321\334\213\311\307\163\310\214\152\057\345\304\253\321 +\035\212\243\102\060\100\060\016\006\003\125\035\017\001\001\377 +\004\004\003\002\001\206\060\017\006\003\125\035\023\001\001\377 +\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026 +\004\024\200\114\326\353\164\377\111\066\243\325\330\374\265\076 +\305\152\360\224\035\214\060\012\006\010\052\206\110\316\075\004 +\003\003\003\151\000\060\146\002\061\000\350\100\377\203\336\003 +\364\237\256\035\172\247\056\271\257\117\366\203\035\016\055\205 +\001\035\321\331\152\354\017\302\257\307\136\126\136\134\325\034 +\130\042\050\013\367\060\266\057\261\174\002\061\000\360\141\074 +\247\364\240\202\343\041\325\204\035\163\206\234\055\257\312\064 +\233\361\237\271\043\066\342\274\140\003\235\200\263\232\126\310 +\341\342\273\024\171\312\315\041\324\224\265\111\103 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "GlobalSign Root E46" -# Issuer: CN=GlobalSign Root E46,O=GlobalSign nv-sa,C=BE -# Serial Number:11:d2:bb:ba:33:6e:d4:bc:e6:24:68:c5:0d:84:1d:98:e8:43 -# Subject: CN=GlobalSign Root E46,O=GlobalSign nv-sa,C=BE -# Not Valid Before: Wed Mar 20 00:00:00 2019 -# Not Valid After : Tue Mar 20 00:00:00 2046 -# Fingerprint (SHA-256): CB:B9:C4:4D:84:B8:04:3E:10:50:EA:31:A6:9F:51:49:55:D7:BF:D2:E2:C6:B4:93:01:01:9A:D6:1D:9F:50:58 -# Fingerprint (SHA1): 39:B4:6C:D5:FE:80:06:EB:E2:2F:4A:BB:08:33:A0:AF:DB:B9:DD:84 +# Trust for "GTS Root R4" +# Issuer: CN=GTS Root R4,O=Google Trust Services LLC,C=US +# Serial Number:02:03:e5:c0:68:ef:63:1a:9c:72:90:50:52 +# Subject: CN=GTS Root R4,O=Google Trust Services LLC,C=US +# Not Valid Before: Wed Jun 22 00:00:00 2016 +# Not Valid After : Sun Jun 22 00:00:00 2036 +# Fingerprint (SHA-256): 34:9D:FA:40:58:C5:E2:63:12:3B:39:8A:E7:95:57:3C:4E:13:13:C8:3F:E6:8F:93:55:6C:D5:E8:03:1B:3C:7D +# Fingerprint (SHA1): 77:D3:03:67:B5:E0:0C:15:F6:0C:38:61:DF:7C:E1:3B:92:46:4D:47 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GlobalSign Root E46" +CKA_LABEL UTF8 "GTS Root R4" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\071\264\154\325\376\200\006\353\342\057\112\273\010\063\240\257 -\333\271\335\204 +\167\323\003\147\265\340\014\025\366\014\070\141\337\174\341\073 +\222\106\115\107 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\265\270\146\355\336\010\203\343\311\342\001\064\006\254\121\157 +\103\226\203\167\031\115\166\263\235\145\122\344\035\042\245\350 END CKA_ISSUER MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\102\105\061 -\031\060\027\006\003\125\004\012\023\020\107\154\157\142\141\154 -\123\151\147\156\040\156\166\055\163\141\061\034\060\032\006\003 -\125\004\003\023\023\107\154\157\142\141\154\123\151\147\156\040 -\122\157\157\164\040\105\064\066 +\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145 +\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040 +\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124 +\123\040\122\157\157\164\040\122\064 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\022\021\322\273\272\063\156\324\274\346\044\150\305\015\204 -\035\230\350\103 +\002\015\002\003\345\300\150\357\143\032\234\162\220\120\122 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "GLOBALTRUST 2020" +# Certificate "Telia Root CA v2" # -# Issuer: CN=GLOBALTRUST 2020,O=e-commerce monitoring GmbH,C=AT -# Serial Number:5a:4b:bd:5a:fb:4f:8a:5b:fa:65:e5 -# Subject: CN=GLOBALTRUST 2020,O=e-commerce monitoring GmbH,C=AT -# Not Valid Before: Mon Feb 10 00:00:00 2020 -# Not Valid After : Sun Jun 10 00:00:00 2040 -# Fingerprint (SHA-256): 9A:29:6A:51:82:D1:D4:51:A2:E3:7F:43:9B:74:DA:AF:A2:67:52:33:29:F9:0F:9A:0D:20:07:C3:34:E2:3C:9A -# Fingerprint (SHA1): D0:67:C1:13:51:01:0C:AA:D0:C7:6A:65:37:31:16:26:4F:53:71:A2 +# Issuer: CN=Telia Root CA v2,O=Telia Finland Oyj,C=FI +# Serial Number:01:67:5f:27:d6:fe:7a:e3:e4:ac:be:09:5b:05:9e +# Subject: CN=Telia Root CA v2,O=Telia Finland Oyj,C=FI +# Not Valid Before: Thu Nov 29 11:55:54 2018 +# Not Valid After : Sun Nov 29 11:55:54 2043 +# Fingerprint (SHA-256): 24:2B:69:74:2F:CB:1E:5B:2A:BF:98:89:8B:94:57:21:87:54:4E:5B:4D:99:11:78:65:73:62:1F:6A:74:B8:2C +# Fingerprint (SHA1): B9:99:CD:D1:73:50:8A:C4:47:05:08:9C:8C:88:FB:BE:A0:2B:40:CD CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GLOBALTRUST 2020" +CKA_LABEL UTF8 "Telia Root CA v2" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\115\061\013\060\011\006\003\125\004\006\023\002\101\124\061 -\043\060\041\006\003\125\004\012\023\032\145\055\143\157\155\155 -\145\162\143\145\040\155\157\156\151\164\157\162\151\156\147\040 -\107\155\142\110\061\031\060\027\006\003\125\004\003\023\020\107 -\114\117\102\101\114\124\122\125\123\124\040\062\060\062\060 +\060\104\061\013\060\011\006\003\125\004\006\023\002\106\111\061 +\032\060\030\006\003\125\004\012\014\021\124\145\154\151\141\040 +\106\151\156\154\141\156\144\040\117\171\152\061\031\060\027\006 +\003\125\004\003\014\020\124\145\154\151\141\040\122\157\157\164 +\040\103\101\040\166\062 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\115\061\013\060\011\006\003\125\004\006\023\002\101\124\061 -\043\060\041\006\003\125\004\012\023\032\145\055\143\157\155\155 -\145\162\143\145\040\155\157\156\151\164\157\162\151\156\147\040 -\107\155\142\110\061\031\060\027\006\003\125\004\003\023\020\107 -\114\117\102\101\114\124\122\125\123\124\040\062\060\062\060 +\060\104\061\013\060\011\006\003\125\004\006\023\002\106\111\061 +\032\060\030\006\003\125\004\012\014\021\124\145\154\151\141\040 +\106\151\156\154\141\156\144\040\117\171\152\061\031\060\027\006 +\003\125\004\003\014\020\124\145\154\151\141\040\122\157\157\164 +\040\103\101\040\166\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\013\132\113\275\132\373\117\212\133\372\145\345 +\002\017\001\147\137\047\326\376\172\343\344\254\276\011\133\005 +\236 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\202\060\202\003\152\240\003\002\001\002\002\013\132 -\113\275\132\373\117\212\133\372\145\345\060\015\006\011\052\206 -\110\206\367\015\001\001\013\005\000\060\115\061\013\060\011\006 -\003\125\004\006\023\002\101\124\061\043\060\041\006\003\125\004 -\012\023\032\145\055\143\157\155\155\145\162\143\145\040\155\157 -\156\151\164\157\162\151\156\147\040\107\155\142\110\061\031\060 -\027\006\003\125\004\003\023\020\107\114\117\102\101\114\124\122 -\125\123\124\040\062\060\062\060\060\036\027\015\062\060\060\062 -\061\060\060\060\060\060\060\060\132\027\015\064\060\060\066\061 -\060\060\060\060\060\060\060\132\060\115\061\013\060\011\006\003 -\125\004\006\023\002\101\124\061\043\060\041\006\003\125\004\012 -\023\032\145\055\143\157\155\155\145\162\143\145\040\155\157\156 -\151\164\157\162\151\156\147\040\107\155\142\110\061\031\060\027 -\006\003\125\004\003\023\020\107\114\117\102\101\114\124\122\125 -\123\124\040\062\060\062\060\060\202\002\042\060\015\006\011\052 -\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060 -\202\002\012\002\202\002\001\000\256\056\126\255\033\034\357\366 -\225\217\240\167\033\053\323\143\217\204\115\105\242\017\237\133 -\105\253\131\173\121\064\371\354\213\212\170\305\335\153\257\275 -\304\337\223\105\036\277\221\070\013\256\016\026\347\101\163\370 -\333\273\321\270\121\340\313\203\073\163\070\156\167\212\017\131 -\143\046\315\247\052\316\124\373\270\342\300\174\107\316\140\174 -\077\262\163\362\300\031\266\212\222\207\065\015\220\050\242\344 -\025\004\143\076\272\257\356\174\136\314\246\213\120\262\070\367 -\101\143\312\316\377\151\217\150\016\225\066\345\314\271\214\011 -\312\113\335\061\220\226\310\314\037\375\126\226\064\333\216\034 -\352\054\276\205\056\143\335\252\251\225\323\375\051\225\023\360 -\310\230\223\331\055\026\107\220\021\203\242\072\042\242\050\127 -\242\353\376\300\214\050\240\246\175\347\052\102\073\202\200\143 -\245\143\037\031\314\174\262\146\250\302\323\155\067\157\342\176 -\006\121\331\105\204\037\022\316\044\122\144\205\013\110\200\116 -\207\261\042\042\060\252\353\256\276\340\002\340\100\350\260\102 -\200\003\121\252\264\176\252\104\327\103\141\363\242\153\026\211 -\111\244\243\244\053\212\002\304\170\364\150\212\301\344\172\066 -\261\157\033\226\033\167\111\215\324\311\006\162\217\317\123\343 -\334\027\205\040\112\334\230\047\323\221\046\053\107\036\151\007 -\257\336\242\344\344\324\153\013\263\136\174\324\044\200\107\051 -\151\073\156\350\254\375\100\353\330\355\161\161\053\362\350\130 -\035\353\101\227\042\305\037\324\071\320\047\217\207\343\030\364 -\340\251\106\015\365\164\072\202\056\320\156\054\221\243\061\134 -\073\106\352\173\004\020\126\136\200\035\365\245\145\350\202\374 -\342\007\214\142\105\365\040\336\106\160\206\241\274\223\323\036 -\164\246\154\260\054\367\003\014\210\014\313\324\162\123\206\274 -\140\106\363\230\152\302\361\277\103\371\160\040\167\312\067\101 -\171\125\122\143\215\133\022\237\305\150\304\210\235\254\362\060 -\253\267\243\061\227\147\255\217\027\017\154\307\163\355\044\224 -\153\310\203\232\320\232\067\111\004\253\261\026\310\154\111\111 -\055\253\241\320\214\222\362\101\112\171\041\045\333\143\327\266 -\234\247\176\102\151\373\072\143\002\003\001\000\001\243\143\060 -\141\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001 -\001\377\060\016\006\003\125\035\017\001\001\377\004\004\003\002 -\001\006\060\035\006\003\125\035\016\004\026\004\024\334\056\037 -\321\141\067\171\344\253\325\325\263\022\161\150\075\152\150\234 -\042\060\037\006\003\125\035\043\004\030\060\026\200\024\334\056 -\037\321\141\067\171\344\253\325\325\263\022\161\150\075\152\150 -\234\042\060\015\006\011\052\206\110\206\367\015\001\001\013\005 -\000\003\202\002\001\000\221\360\102\002\150\100\356\303\150\300 -\124\057\337\354\142\303\303\236\212\240\061\050\252\203\216\244 -\126\226\022\020\206\126\272\227\162\322\124\060\174\255\031\325 -\035\150\157\373\024\102\330\215\016\363\265\321\245\343\002\102 -\136\334\350\106\130\007\065\002\060\340\274\164\112\301\103\052 -\377\333\032\320\260\257\154\303\375\313\263\365\177\155\003\056 -\131\126\235\055\055\065\214\262\326\103\027\054\222\012\313\135 -\350\214\017\113\160\103\320\202\377\250\314\277\244\224\300\276 -\207\275\212\343\223\173\306\217\233\026\235\047\145\274\172\305 -\102\202\154\134\007\320\251\301\210\140\104\351\230\205\026\137 -\370\217\312\001\020\316\045\303\371\140\033\240\305\227\303\323 -\054\210\061\242\275\060\354\320\320\300\022\361\301\071\343\345 -\365\370\326\112\335\064\315\373\157\301\117\343\000\213\126\342 -\222\367\050\262\102\167\162\043\147\307\077\021\025\262\304\003 -\005\276\273\021\173\012\277\250\156\347\377\130\103\317\233\147 -\240\200\007\266\035\312\255\155\352\101\021\176\055\164\223\373 -\302\274\276\121\104\305\357\150\045\047\200\343\310\240\324\022 -\354\331\245\067\035\067\174\264\221\312\332\324\261\226\201\357 -\150\134\166\020\111\257\176\245\067\200\261\034\122\275\063\201 -\114\217\371\335\145\331\024\315\212\045\130\364\342\305\203\245 -\011\220\324\154\024\143\265\100\337\353\300\374\304\130\176\015 -\024\026\207\124\047\156\126\344\160\204\270\154\062\022\176\202 -\061\103\276\327\335\174\241\255\256\326\253\040\022\357\012\303 -\020\214\111\226\065\334\013\165\136\261\117\325\117\064\016\021 -\040\007\165\103\105\351\243\021\332\254\243\231\302\266\171\047 -\342\271\357\310\342\366\065\051\172\164\372\305\177\202\005\142 -\246\012\352\150\262\171\107\006\156\362\127\250\025\063\306\367 -\170\112\075\102\173\153\176\376\367\106\352\321\353\216\357\210 -\150\133\350\301\331\161\176\375\144\357\377\147\107\210\130\045 -\057\076\206\007\275\373\250\345\202\250\254\245\323\151\103\315 -\061\210\111\204\123\222\300\261\071\033\071\203\001\060\304\362 -\251\372\320\003\275\162\067\140\126\037\066\174\275\071\221\365 -\155\015\277\173\327\222 +\060\202\005\164\060\202\003\134\240\003\002\001\002\002\017\001 +\147\137\047\326\376\172\343\344\254\276\011\133\005\236\060\015 +\006\011\052\206\110\206\367\015\001\001\013\005\000\060\104\061 +\013\060\011\006\003\125\004\006\023\002\106\111\061\032\060\030 +\006\003\125\004\012\014\021\124\145\154\151\141\040\106\151\156 +\154\141\156\144\040\117\171\152\061\031\060\027\006\003\125\004 +\003\014\020\124\145\154\151\141\040\122\157\157\164\040\103\101 +\040\166\062\060\036\027\015\061\070\061\061\062\071\061\061\065 +\065\065\064\132\027\015\064\063\061\061\062\071\061\061\065\065 +\065\064\132\060\104\061\013\060\011\006\003\125\004\006\023\002 +\106\111\061\032\060\030\006\003\125\004\012\014\021\124\145\154 +\151\141\040\106\151\156\154\141\156\144\040\117\171\152\061\031 +\060\027\006\003\125\004\003\014\020\124\145\154\151\141\040\122 +\157\157\164\040\103\101\040\166\062\060\202\002\042\060\015\006 +\011\052\206\110\206\367\015\001\001\001\005\000\003\202\002\017 +\000\060\202\002\012\002\202\002\001\000\262\320\077\007\274\342 +\173\320\153\231\370\342\167\151\347\316\235\244\003\274\202\155 +\241\376\201\145\037\114\047\254\216\000\272\026\173\353\060\152 +\000\300\263\164\150\176\262\257\307\325\142\263\172\077\120\312 +\214\066\104\044\143\322\066\351\014\205\366\103\166\325\114\241 +\140\162\147\342\050\063\245\313\061\270\072\042\043\064\270\175 +\275\126\042\100\235\352\364\173\003\255\150\374\262\201\117\230 +\320\164\352\215\345\175\315\143\303\243\366\336\222\302\130\031 +\340\226\273\305\304\251\075\245\164\226\376\257\371\211\252\275 +\225\027\124\330\170\104\361\014\167\025\222\340\230\102\247\244 +\326\252\040\222\315\301\240\263\226\262\072\204\102\215\175\325 +\225\344\326\333\351\142\304\130\263\171\305\214\323\065\063\203 +\237\165\241\122\047\141\070\361\131\075\216\120\340\275\171\074 +\347\154\226\376\136\331\002\145\264\216\134\320\021\064\337\135 +\277\122\247\201\000\303\177\231\105\231\025\325\027\310\012\123 +\354\143\363\231\175\314\151\022\206\302\027\360\001\236\277\204 +\274\321\122\313\033\222\146\316\244\123\345\241\277\304\333\011 +\326\346\211\126\053\310\343\174\336\343\377\211\345\065\156\050 +\350\154\013\043\121\251\045\005\353\110\370\335\261\312\372\154 +\010\121\357\267\030\154\104\312\046\341\163\306\211\006\201\345 +\212\254\260\342\051\306\271\044\263\153\104\021\364\245\103\302 +\114\103\345\160\066\214\266\063\127\172\225\056\202\240\364\134 +\020\263\141\203\366\002\005\206\056\174\055\154\334\003\106\156 +\065\223\325\172\225\057\336\040\330\133\176\224\220\004\152\272 +\131\075\004\005\165\235\067\242\016\056\075\353\301\244\122\203 +\376\320\153\324\146\216\334\306\351\022\116\035\052\127\252\020 +\274\174\136\202\175\246\246\311\362\055\271\365\027\047\255\321 +\016\211\124\053\225\372\300\255\035\230\024\170\063\102\206\012 +\251\163\265\373\164\015\267\033\060\031\304\132\016\034\047\267 +\332\030\320\377\212\310\005\272\361\252\034\242\067\267\346\110 +\244\106\054\224\352\250\166\142\107\213\020\123\007\110\127\154 +\342\222\115\266\256\005\313\334\301\112\136\217\254\075\031\116 +\302\355\140\165\053\333\301\312\102\325\002\003\001\000\001\243 +\143\060\141\060\037\006\003\125\035\043\004\030\060\026\200\024 +\162\254\344\063\171\252\105\207\366\375\254\035\236\326\307\057 +\206\330\044\071\060\035\006\003\125\035\016\004\026\004\024\162 +\254\344\063\171\252\105\207\366\375\254\035\236\326\307\057\206 +\330\044\071\060\016\006\003\125\035\017\001\001\377\004\004\003 +\002\001\006\060\017\006\003\125\035\023\001\001\377\004\005\060 +\003\001\001\377\060\015\006\011\052\206\110\206\367\015\001\001 +\013\005\000\003\202\002\001\000\240\073\131\247\011\224\076\066 +\204\322\176\057\071\245\226\227\372\021\255\374\147\363\161\011 +\362\262\211\204\147\104\257\271\357\355\226\354\234\144\333\062 +\060\157\147\232\254\176\137\262\253\001\066\176\201\372\344\204 +\136\322\254\066\340\153\142\305\175\113\016\202\155\322\166\142 +\321\376\227\370\237\060\174\030\371\264\122\167\202\035\166\333 +\323\035\251\360\301\232\000\275\155\165\330\175\347\372\307\070 +\243\234\160\350\106\171\003\257\056\164\333\165\370\156\123\014 +\003\310\231\032\211\065\031\074\323\311\124\174\250\360\054\346 +\156\007\171\157\152\341\346\352\221\202\151\012\035\303\176\131 +\242\236\153\106\025\230\133\323\257\106\035\142\310\316\200\122 +\111\021\077\311\004\022\303\023\174\077\073\212\226\333\074\240 +\036\012\264\213\124\262\044\147\015\357\202\313\276\074\175\321 +\342\177\256\026\326\126\130\271\332\040\261\203\025\241\357\212 +\115\062\157\101\057\023\122\202\224\327\032\301\170\242\121\335 +\053\160\155\267\032\371\367\260\340\147\227\126\333\174\141\123 +\011\003\050\002\100\307\263\330\375\234\160\152\306\050\303\205 +\351\342\355\032\223\240\336\113\230\242\204\076\005\167\001\226 +\075\373\264\040\017\234\162\002\172\022\057\325\243\272\121\170 +\257\052\053\104\145\116\265\375\012\350\301\315\171\207\141\053 +\336\200\127\105\277\147\361\233\221\136\245\244\354\131\110\020 +\015\070\307\260\372\303\104\155\004\365\170\120\034\222\226\133 +\332\365\270\056\272\133\317\345\360\152\235\113\057\130\163\055 +\117\055\304\034\076\364\263\077\253\025\016\073\031\101\212\244 +\301\127\022\146\161\114\372\123\343\127\353\142\225\011\236\124 +\335\321\302\074\127\074\275\070\255\230\144\267\270\003\232\123 +\126\140\135\263\330\102\033\134\113\022\212\034\353\353\175\306 +\172\151\307\047\177\244\370\213\362\344\224\146\207\113\351\224 +\007\011\022\171\212\262\353\164\004\334\316\364\104\131\340\026 +\312\305\054\130\327\074\173\317\142\206\152\120\175\065\066\146 +\247\373\067\347\050\307\330\320\255\245\151\224\217\350\301\337 +\044\370\033\007\061\207\201\330\135\366\350\050\330\112\122\200 +\254\023\356\120\024\036\230\307 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "GLOBALTRUST 2020" -# Issuer: CN=GLOBALTRUST 2020,O=e-commerce monitoring GmbH,C=AT -# Serial Number:5a:4b:bd:5a:fb:4f:8a:5b:fa:65:e5 -# Subject: CN=GLOBALTRUST 2020,O=e-commerce monitoring GmbH,C=AT -# Not Valid Before: Mon Feb 10 00:00:00 2020 -# Not Valid After : Sun Jun 10 00:00:00 2040 -# Fingerprint (SHA-256): 9A:29:6A:51:82:D1:D4:51:A2:E3:7F:43:9B:74:DA:AF:A2:67:52:33:29:F9:0F:9A:0D:20:07:C3:34:E2:3C:9A -# Fingerprint (SHA1): D0:67:C1:13:51:01:0C:AA:D0:C7:6A:65:37:31:16:26:4F:53:71:A2 +# Trust for "Telia Root CA v2" +# Issuer: CN=Telia Root CA v2,O=Telia Finland Oyj,C=FI +# Serial Number:01:67:5f:27:d6:fe:7a:e3:e4:ac:be:09:5b:05:9e +# Subject: CN=Telia Root CA v2,O=Telia Finland Oyj,C=FI +# Not Valid Before: Thu Nov 29 11:55:54 2018 +# Not Valid After : Sun Nov 29 11:55:54 2043 +# Fingerprint (SHA-256): 24:2B:69:74:2F:CB:1E:5B:2A:BF:98:89:8B:94:57:21:87:54:4E:5B:4D:99:11:78:65:73:62:1F:6A:74:B8:2C +# Fingerprint (SHA1): B9:99:CD:D1:73:50:8A:C4:47:05:08:9C:8C:88:FB:BE:A0:2B:40:CD CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GLOBALTRUST 2020" +CKA_LABEL UTF8 "Telia Root CA v2" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\320\147\301\023\121\001\014\252\320\307\152\145\067\061\026\046 -\117\123\161\242 +\271\231\315\321\163\120\212\304\107\005\010\234\214\210\373\276 +\240\053\100\315 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\212\307\157\313\155\343\314\242\361\174\203\372\016\170\327\350 +\016\217\254\252\202\337\205\261\364\334\020\034\374\231\331\110 END CKA_ISSUER MULTILINE_OCTAL -\060\115\061\013\060\011\006\003\125\004\006\023\002\101\124\061 -\043\060\041\006\003\125\004\012\023\032\145\055\143\157\155\155 -\145\162\143\145\040\155\157\156\151\164\157\162\151\156\147\040 -\107\155\142\110\061\031\060\027\006\003\125\004\003\023\020\107 -\114\117\102\101\114\124\122\125\123\124\040\062\060\062\060 +\060\104\061\013\060\011\006\003\125\004\006\023\002\106\111\061 +\032\060\030\006\003\125\004\012\014\021\124\145\154\151\141\040 +\106\151\156\154\141\156\144\040\117\171\152\061\031\060\027\006 +\003\125\004\003\014\020\124\145\154\151\141\040\122\157\157\164 +\040\103\101\040\166\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\013\132\113\275\132\373\117\212\133\372\145\345 +\002\017\001\147\137\047\326\376\172\343\344\254\276\011\133\005 +\236 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR @@ -21819,182 +22933,520 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "ANF Secure Server Root CA" +# Certificate "D-TRUST BR Root CA 1 2020" # -# Issuer: CN=ANF Secure Server Root CA,OU=ANF CA Raiz,O=ANF Autoridad de Certificacion,C=ES,serialNumber=G63287510 -# Serial Number:0d:d3:e3:bc:6c:f9:6b:b1 -# Subject: CN=ANF Secure Server Root CA,OU=ANF CA Raiz,O=ANF Autoridad de Certificacion,C=ES,serialNumber=G63287510 -# Not Valid Before: Wed Sep 04 10:00:38 2019 -# Not Valid After : Tue Aug 30 10:00:38 2039 -# Fingerprint (SHA-256): FB:8F:EC:75:91:69:B9:10:6B:1E:51:16:44:C6:18:C5:13:04:37:3F:6C:06:43:08:8D:8B:EF:FD:1B:99:75:99 -# Fingerprint (SHA1): 5B:6E:68:D0:CC:15:B6:A0:5F:1E:C1:5F:AE:02:FC:6B:2F:5D:6F:74 +# Issuer: CN=D-TRUST BR Root CA 1 2020,O=D-Trust GmbH,C=DE +# Serial Number:7c:c9:8f:2b:84:d7:df:ea:0f:c9:65:9a:d3:4b:4d:96 +# Subject: CN=D-TRUST BR Root CA 1 2020,O=D-Trust GmbH,C=DE +# Not Valid Before: Tue Feb 11 09:45:00 2020 +# Not Valid After : Sun Feb 11 09:44:59 2035 +# Fingerprint (SHA-256): E5:9A:AA:81:60:09:C2:2B:FF:5B:25:BA:D3:7D:F3:06:F0:49:79:7C:1F:81:D8:5A:B0:89:E6:57:BD:8F:00:44 +# Fingerprint (SHA1): 1F:5B:98:F0:E3:B5:F7:74:3C:ED:E6:B0:36:7D:32:CD:F4:09:41:67 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "ANF Secure Server Root CA" +CKA_LABEL UTF8 "D-TRUST BR Root CA 1 2020" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\201\204\061\022\060\020\006\003\125\004\005\023\011\107\066 -\063\062\070\067\065\061\060\061\013\060\011\006\003\125\004\006 -\023\002\105\123\061\047\060\045\006\003\125\004\012\023\036\101 -\116\106\040\101\165\164\157\162\151\144\141\144\040\144\145\040 -\103\145\162\164\151\146\151\143\141\143\151\157\156\061\024\060 -\022\006\003\125\004\013\023\013\101\116\106\040\103\101\040\122 -\141\151\172\061\042\060\040\006\003\125\004\003\023\031\101\116 -\106\040\123\145\143\165\162\145\040\123\145\162\166\145\162\040 -\122\157\157\164\040\103\101 +\060\110\061\013\060\011\006\003\125\004\006\023\002\104\105\061 +\025\060\023\006\003\125\004\012\023\014\104\055\124\162\165\163 +\164\040\107\155\142\110\061\042\060\040\006\003\125\004\003\023 +\031\104\055\124\122\125\123\124\040\102\122\040\122\157\157\164 +\040\103\101\040\061\040\062\060\062\060 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\201\204\061\022\060\020\006\003\125\004\005\023\011\107\066 -\063\062\070\067\065\061\060\061\013\060\011\006\003\125\004\006 -\023\002\105\123\061\047\060\045\006\003\125\004\012\023\036\101 -\116\106\040\101\165\164\157\162\151\144\141\144\040\144\145\040 -\103\145\162\164\151\146\151\143\141\143\151\157\156\061\024\060 -\022\006\003\125\004\013\023\013\101\116\106\040\103\101\040\122 -\141\151\172\061\042\060\040\006\003\125\004\003\023\031\101\116 -\106\040\123\145\143\165\162\145\040\123\145\162\166\145\162\040 -\122\157\157\164\040\103\101 +\060\110\061\013\060\011\006\003\125\004\006\023\002\104\105\061 +\025\060\023\006\003\125\004\012\023\014\104\055\124\162\165\163 +\164\040\107\155\142\110\061\042\060\040\006\003\125\004\003\023 +\031\104\055\124\122\125\123\124\040\102\122\040\122\157\157\164 +\040\103\101\040\061\040\062\060\062\060 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\010\015\323\343\274\154\371\153\261 +\002\020\174\311\217\053\204\327\337\352\017\311\145\232\323\113 +\115\226 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\357\060\202\003\327\240\003\002\001\002\002\010\015 -\323\343\274\154\371\153\261\060\015\006\011\052\206\110\206\367 -\015\001\001\013\005\000\060\201\204\061\022\060\020\006\003\125 -\004\005\023\011\107\066\063\062\070\067\065\061\060\061\013\060 -\011\006\003\125\004\006\023\002\105\123\061\047\060\045\006\003 -\125\004\012\023\036\101\116\106\040\101\165\164\157\162\151\144 -\141\144\040\144\145\040\103\145\162\164\151\146\151\143\141\143 -\151\157\156\061\024\060\022\006\003\125\004\013\023\013\101\116 -\106\040\103\101\040\122\141\151\172\061\042\060\040\006\003\125 -\004\003\023\031\101\116\106\040\123\145\143\165\162\145\040\123 -\145\162\166\145\162\040\122\157\157\164\040\103\101\060\036\027 -\015\061\071\060\071\060\064\061\060\060\060\063\070\132\027\015 -\063\071\060\070\063\060\061\060\060\060\063\070\132\060\201\204 -\061\022\060\020\006\003\125\004\005\023\011\107\066\063\062\070 -\067\065\061\060\061\013\060\011\006\003\125\004\006\023\002\105 -\123\061\047\060\045\006\003\125\004\012\023\036\101\116\106\040 -\101\165\164\157\162\151\144\141\144\040\144\145\040\103\145\162 -\164\151\146\151\143\141\143\151\157\156\061\024\060\022\006\003 -\125\004\013\023\013\101\116\106\040\103\101\040\122\141\151\172 -\061\042\060\040\006\003\125\004\003\023\031\101\116\106\040\123 -\145\143\165\162\145\040\123\145\162\166\145\162\040\122\157\157 -\164\040\103\101\060\202\002\042\060\015\006\011\052\206\110\206 -\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002\012 -\002\202\002\001\000\333\353\153\053\346\144\124\225\202\220\243 -\162\244\031\001\235\234\013\201\137\163\111\272\247\254\363\004 -\116\173\226\013\354\021\340\133\246\034\316\033\322\015\203\034 -\053\270\236\035\176\105\062\140\017\007\351\167\130\176\237\152 -\310\141\116\266\046\301\114\215\377\114\357\064\262\037\145\330 -\271\170\365\255\251\161\271\357\117\130\035\245\336\164\040\227 -\241\355\150\114\336\222\027\113\274\253\377\145\232\236\373\107 -\331\127\162\363\011\241\256\166\104\023\156\234\055\104\071\274 -\371\307\073\244\130\075\101\275\264\302\111\243\310\015\322\227 -\057\007\145\122\000\247\156\310\257\150\354\364\024\226\266\127 -\037\126\303\071\237\053\155\344\363\076\366\065\144\332\014\034 -\241\204\113\057\113\113\342\054\044\235\155\223\100\353\265\043 -\216\062\312\157\105\323\250\211\173\036\317\036\372\133\103\213 -\315\315\250\017\152\312\014\136\271\236\107\217\360\331\266\012 -\013\130\145\027\063\271\043\344\167\031\175\313\112\056\222\173 -\117\057\020\167\261\215\057\150\234\142\314\340\120\370\354\221 -\247\124\114\127\011\325\166\143\305\350\145\036\356\155\152\317 -\011\235\372\174\117\255\140\010\375\126\231\017\025\054\173\251 -\200\253\214\141\217\112\007\166\102\336\075\364\335\262\044\063 -\133\270\265\243\104\311\254\177\167\074\035\043\354\202\251\246 -\342\310\006\114\002\376\254\134\231\231\013\057\020\212\246\364 -\177\325\207\164\015\131\111\105\366\360\161\134\071\051\326\277 -\112\043\213\365\137\001\143\322\207\163\050\265\113\012\365\370 -\253\202\054\176\163\045\062\035\013\143\012\027\201\000\377\266 -\166\136\347\264\261\100\312\041\273\325\200\121\345\110\122\147 -\054\322\141\211\007\015\017\316\102\167\300\104\163\234\104\120 -\240\333\020\012\055\225\034\201\257\344\034\345\024\036\361\066 -\101\001\002\057\175\163\247\336\102\314\114\351\211\015\126\367 -\237\221\324\003\306\154\311\217\333\330\034\340\100\230\135\146 -\231\230\200\156\055\377\001\305\316\313\106\037\254\002\306\103 -\346\256\242\204\074\305\116\036\075\155\311\024\114\343\056\101 -\273\312\071\277\066\074\052\031\252\101\207\116\245\316\113\062 -\171\335\220\111\177\002\003\001\000\001\243\143\060\141\060\037 -\006\003\125\035\043\004\030\060\026\200\024\234\137\320\154\143 -\243\137\223\312\223\230\010\255\214\207\245\054\134\301\067\060 -\035\006\003\125\035\016\004\026\004\024\234\137\320\154\143\243 -\137\223\312\223\230\010\255\214\207\245\054\134\301\067\060\016 -\006\003\125\035\017\001\001\377\004\004\003\002\001\206\060\017 -\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\003\202 -\002\001\000\116\036\271\212\306\240\230\077\156\303\151\300\152 -\134\111\122\254\313\053\135\170\070\301\325\124\204\237\223\360 -\207\031\075\054\146\211\353\015\102\374\314\360\165\205\077\213 -\364\200\135\171\345\027\147\275\065\202\342\362\074\216\175\133 -\066\313\132\200\000\051\362\316\053\054\361\217\252\155\005\223 -\154\162\307\126\353\337\120\043\050\345\105\020\075\350\147\243 -\257\016\125\017\220\011\142\357\113\131\242\366\123\361\300\065 -\344\057\301\044\275\171\057\116\040\042\073\375\032\040\260\244 -\016\054\160\355\164\077\270\023\225\006\121\310\350\207\046\312 -\244\133\152\026\041\222\335\163\140\236\020\030\336\074\201\352 -\350\030\303\174\211\362\213\120\076\275\021\342\025\003\250\066 -\175\063\001\154\110\025\327\210\220\231\004\305\314\346\007\364 -\274\364\220\355\023\342\352\213\303\217\243\063\017\301\051\114 -\023\116\332\025\126\161\163\162\202\120\366\232\063\174\242\261 -\250\032\064\164\145\134\316\321\353\253\123\340\032\200\330\352 -\072\111\344\046\060\233\345\034\212\250\251\025\062\206\231\222 -\012\020\043\126\022\340\366\316\114\342\273\276\333\215\222\163 -\001\146\057\142\076\262\162\047\105\066\355\115\126\343\227\231 -\377\072\065\076\245\124\112\122\131\113\140\333\356\376\170\021 -\177\112\334\024\171\140\266\153\144\003\333\025\203\341\242\276 -\366\043\227\120\360\011\063\066\247\161\226\045\363\271\102\175 -\333\070\077\054\130\254\350\102\341\016\330\323\073\114\056\202 -\351\203\056\153\061\331\335\107\206\117\155\227\221\056\117\342 -\050\161\065\026\321\362\163\376\045\053\007\107\044\143\047\310 -\370\366\331\153\374\022\061\126\010\300\123\102\257\234\320\063 -\176\374\006\360\061\104\003\024\361\130\352\362\152\015\251\021 -\262\203\276\305\032\277\007\352\131\334\243\210\065\357\234\166 -\062\074\115\006\042\316\025\345\335\236\330\217\332\336\322\304 -\071\345\027\201\317\070\107\353\177\210\155\131\033\337\237\102 -\024\256\176\317\250\260\146\145\332\067\257\237\252\075\352\050 -\266\336\325\061\130\026\202\133\352\273\031\165\002\163\032\312 -\110\032\041\223\220\012\216\223\204\247\175\073\043\030\222\211 -\240\215\254 +\060\202\002\333\060\202\002\140\240\003\002\001\002\002\020\174 +\311\217\053\204\327\337\352\017\311\145\232\323\113\115\226\060 +\012\006\010\052\206\110\316\075\004\003\003\060\110\061\013\060 +\011\006\003\125\004\006\023\002\104\105\061\025\060\023\006\003 +\125\004\012\023\014\104\055\124\162\165\163\164\040\107\155\142 +\110\061\042\060\040\006\003\125\004\003\023\031\104\055\124\122 +\125\123\124\040\102\122\040\122\157\157\164\040\103\101\040\061 +\040\062\060\062\060\060\036\027\015\062\060\060\062\061\061\060 +\071\064\065\060\060\132\027\015\063\065\060\062\061\061\060\071 +\064\064\065\071\132\060\110\061\013\060\011\006\003\125\004\006 +\023\002\104\105\061\025\060\023\006\003\125\004\012\023\014\104 +\055\124\162\165\163\164\040\107\155\142\110\061\042\060\040\006 +\003\125\004\003\023\031\104\055\124\122\125\123\124\040\102\122 +\040\122\157\157\164\040\103\101\040\061\040\062\060\062\060\060 +\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 +\004\000\042\003\142\000\004\306\313\307\050\321\373\204\365\232 +\357\102\024\040\341\103\153\156\165\255\374\053\003\204\324\166 +\223\045\327\131\073\101\145\153\036\346\064\052\273\164\366\022 +\316\350\155\347\253\344\074\116\077\104\010\213\315\026\161\313 +\277\222\231\364\244\327\074\120\124\122\220\205\203\170\224\147 +\147\243\034\011\031\075\165\064\205\336\355\140\175\307\014\264 +\101\122\271\156\345\356\102\243\202\001\015\060\202\001\011\060 +\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 +\060\035\006\003\125\035\016\004\026\004\024\163\221\020\253\377 +\125\263\132\174\011\045\325\262\272\010\240\153\253\037\155\060 +\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060 +\201\306\006\003\125\035\037\004\201\276\060\201\273\060\076\240 +\074\240\072\206\070\150\164\164\160\072\057\057\143\162\154\056 +\144\055\164\162\165\163\164\056\156\145\164\057\143\162\154\057 +\144\055\164\162\165\163\164\137\142\162\137\162\157\157\164\137 +\143\141\137\061\137\062\060\062\060\056\143\162\154\060\171\240 +\167\240\165\206\163\154\144\141\160\072\057\057\144\151\162\145 +\143\164\157\162\171\056\144\055\164\162\165\163\164\056\156\145 +\164\057\103\116\075\104\055\124\122\125\123\124\045\062\060\102 +\122\045\062\060\122\157\157\164\045\062\060\103\101\045\062\060 +\061\045\062\060\062\060\062\060\054\117\075\104\055\124\162\165 +\163\164\045\062\060\107\155\142\110\054\103\075\104\105\077\143 +\145\162\164\151\146\151\143\141\164\145\162\145\166\157\143\141 +\164\151\157\156\154\151\163\164\060\012\006\010\052\206\110\316 +\075\004\003\003\003\151\000\060\146\002\061\000\224\220\055\023 +\372\341\143\370\141\143\350\255\205\170\124\221\234\270\223\070 +\076\032\101\332\100\026\123\102\010\312\057\216\361\076\201\126 +\300\252\330\355\030\304\260\256\364\076\372\046\002\061\000\363 +\050\342\306\333\053\231\373\267\121\270\044\243\244\224\172\032 +\077\346\066\342\003\127\063\212\060\313\202\307\326\024\021\325 +\165\143\133\024\225\234\037\001\317\330\325\162\247\017\073 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "D-TRUST BR Root CA 1 2020" +# Issuer: CN=D-TRUST BR Root CA 1 2020,O=D-Trust GmbH,C=DE +# Serial Number:7c:c9:8f:2b:84:d7:df:ea:0f:c9:65:9a:d3:4b:4d:96 +# Subject: CN=D-TRUST BR Root CA 1 2020,O=D-Trust GmbH,C=DE +# Not Valid Before: Tue Feb 11 09:45:00 2020 +# Not Valid After : Sun Feb 11 09:44:59 2035 +# Fingerprint (SHA-256): E5:9A:AA:81:60:09:C2:2B:FF:5B:25:BA:D3:7D:F3:06:F0:49:79:7C:1F:81:D8:5A:B0:89:E6:57:BD:8F:00:44 +# Fingerprint (SHA1): 1F:5B:98:F0:E3:B5:F7:74:3C:ED:E6:B0:36:7D:32:CD:F4:09:41:67 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "D-TRUST BR Root CA 1 2020" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\037\133\230\360\343\265\367\164\074\355\346\260\066\175\062\315 +\364\011\101\147 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\265\252\113\325\355\367\343\125\056\217\162\012\363\165\270\355 +END +CKA_ISSUER MULTILINE_OCTAL +\060\110\061\013\060\011\006\003\125\004\006\023\002\104\105\061 +\025\060\023\006\003\125\004\012\023\014\104\055\124\162\165\163 +\164\040\107\155\142\110\061\042\060\040\006\003\125\004\003\023 +\031\104\055\124\122\125\123\124\040\102\122\040\122\157\157\164 +\040\103\101\040\061\040\062\060\062\060 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\174\311\217\053\204\327\337\352\017\311\145\232\323\113 +\115\226 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "D-TRUST EV Root CA 1 2020" +# +# Issuer: CN=D-TRUST EV Root CA 1 2020,O=D-Trust GmbH,C=DE +# Serial Number:5f:02:41:d7:7a:87:7c:4c:03:a3:ac:96:8d:fb:ff:d0 +# Subject: CN=D-TRUST EV Root CA 1 2020,O=D-Trust GmbH,C=DE +# Not Valid Before: Tue Feb 11 10:00:00 2020 +# Not Valid After : Sun Feb 11 09:59:59 2035 +# Fingerprint (SHA-256): 08:17:0D:1A:A3:64:53:90:1A:2F:95:92:45:E3:47:DB:0C:8D:37:AB:AA:BC:56:B8:1A:A1:00:DC:95:89:70:DB +# Fingerprint (SHA1): 61:DB:8C:21:59:69:03:90:D8:7C:9C:12:86:54:CF:9D:3D:F4:DD:07 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "D-TRUST EV Root CA 1 2020" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\110\061\013\060\011\006\003\125\004\006\023\002\104\105\061 +\025\060\023\006\003\125\004\012\023\014\104\055\124\162\165\163 +\164\040\107\155\142\110\061\042\060\040\006\003\125\004\003\023 +\031\104\055\124\122\125\123\124\040\105\126\040\122\157\157\164 +\040\103\101\040\061\040\062\060\062\060 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\110\061\013\060\011\006\003\125\004\006\023\002\104\105\061 +\025\060\023\006\003\125\004\012\023\014\104\055\124\162\165\163 +\164\040\107\155\142\110\061\042\060\040\006\003\125\004\003\023 +\031\104\055\124\122\125\123\124\040\105\126\040\122\157\157\164 +\040\103\101\040\061\040\062\060\062\060 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\137\002\101\327\172\207\174\114\003\243\254\226\215\373 +\377\320 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\333\060\202\002\140\240\003\002\001\002\002\020\137 +\002\101\327\172\207\174\114\003\243\254\226\215\373\377\320\060 +\012\006\010\052\206\110\316\075\004\003\003\060\110\061\013\060 +\011\006\003\125\004\006\023\002\104\105\061\025\060\023\006\003 +\125\004\012\023\014\104\055\124\162\165\163\164\040\107\155\142 +\110\061\042\060\040\006\003\125\004\003\023\031\104\055\124\122 +\125\123\124\040\105\126\040\122\157\157\164\040\103\101\040\061 +\040\062\060\062\060\060\036\027\015\062\060\060\062\061\061\061 +\060\060\060\060\060\132\027\015\063\065\060\062\061\061\060\071 +\065\071\065\071\132\060\110\061\013\060\011\006\003\125\004\006 +\023\002\104\105\061\025\060\023\006\003\125\004\012\023\014\104 +\055\124\162\165\163\164\040\107\155\142\110\061\042\060\040\006 +\003\125\004\003\023\031\104\055\124\122\125\123\124\040\105\126 +\040\122\157\157\164\040\103\101\040\061\040\062\060\062\060\060 +\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 +\004\000\042\003\142\000\004\361\013\335\206\103\040\031\337\227 +\205\350\042\112\233\317\235\230\277\264\005\046\311\313\343\246 +\322\217\305\236\170\173\061\211\251\211\255\047\074\145\020\202 +\374\337\303\235\116\360\063\043\304\322\062\365\034\260\337\063 +\027\135\305\360\261\212\371\357\271\267\024\312\051\112\302\017 +\251\177\165\145\111\052\060\147\364\144\367\326\032\167\332\303 +\302\227\141\102\173\111\255\243\202\001\015\060\202\001\011\060 +\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 +\060\035\006\003\125\035\016\004\026\004\024\177\020\001\026\067 +\072\244\050\344\120\370\244\367\354\153\062\266\376\351\213\060 +\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060 +\201\306\006\003\125\035\037\004\201\276\060\201\273\060\076\240 +\074\240\072\206\070\150\164\164\160\072\057\057\143\162\154\056 +\144\055\164\162\165\163\164\056\156\145\164\057\143\162\154\057 +\144\055\164\162\165\163\164\137\145\166\137\162\157\157\164\137 +\143\141\137\061\137\062\060\062\060\056\143\162\154\060\171\240 +\167\240\165\206\163\154\144\141\160\072\057\057\144\151\162\145 +\143\164\157\162\171\056\144\055\164\162\165\163\164\056\156\145 +\164\057\103\116\075\104\055\124\122\125\123\124\045\062\060\105 +\126\045\062\060\122\157\157\164\045\062\060\103\101\045\062\060 +\061\045\062\060\062\060\062\060\054\117\075\104\055\124\162\165 +\163\164\045\062\060\107\155\142\110\054\103\075\104\105\077\143 +\145\162\164\151\146\151\143\141\164\145\162\145\166\157\143\141 +\164\151\157\156\154\151\163\164\060\012\006\010\052\206\110\316 +\075\004\003\003\003\151\000\060\146\002\061\000\312\074\306\052 +\165\302\136\165\142\071\066\000\140\132\213\301\223\231\314\331 +\333\101\073\073\207\231\027\073\325\314\117\312\042\367\240\200 +\313\371\264\261\033\126\365\162\322\374\031\321\002\061\000\221 +\367\060\223\077\020\106\053\161\244\320\073\104\233\300\051\002 +\005\262\101\167\121\363\171\132\236\216\024\240\116\102\322\133 +\201\363\064\152\003\347\042\070\120\133\355\031\117\103\026 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "D-TRUST EV Root CA 1 2020" +# Issuer: CN=D-TRUST EV Root CA 1 2020,O=D-Trust GmbH,C=DE +# Serial Number:5f:02:41:d7:7a:87:7c:4c:03:a3:ac:96:8d:fb:ff:d0 +# Subject: CN=D-TRUST EV Root CA 1 2020,O=D-Trust GmbH,C=DE +# Not Valid Before: Tue Feb 11 10:00:00 2020 +# Not Valid After : Sun Feb 11 09:59:59 2035 +# Fingerprint (SHA-256): 08:17:0D:1A:A3:64:53:90:1A:2F:95:92:45:E3:47:DB:0C:8D:37:AB:AA:BC:56:B8:1A:A1:00:DC:95:89:70:DB +# Fingerprint (SHA1): 61:DB:8C:21:59:69:03:90:D8:7C:9C:12:86:54:CF:9D:3D:F4:DD:07 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "D-TRUST EV Root CA 1 2020" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\141\333\214\041\131\151\003\220\330\174\234\022\206\124\317\235 +\075\364\335\007 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\214\055\235\160\237\110\231\021\006\021\373\351\313\060\300\156 +END +CKA_ISSUER MULTILINE_OCTAL +\060\110\061\013\060\011\006\003\125\004\006\023\002\104\105\061 +\025\060\023\006\003\125\004\012\023\014\104\055\124\162\165\163 +\164\040\107\155\142\110\061\042\060\040\006\003\125\004\003\023 +\031\104\055\124\122\125\123\124\040\105\126\040\122\157\157\164 +\040\103\101\040\061\040\062\060\062\060 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\137\002\101\327\172\207\174\114\003\243\254\226\215\373 +\377\320 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "DigiCert TLS ECC P384 Root G5" +# +# Issuer: CN=DigiCert TLS ECC P384 Root G5,O="DigiCert, Inc.",C=US +# Serial Number:09:e0:93:65:ac:f7:d9:c8:b9:3e:1c:0b:04:2a:2e:f3 +# Subject: CN=DigiCert TLS ECC P384 Root G5,O="DigiCert, Inc.",C=US +# Not Valid Before: Fri Jan 15 00:00:00 2021 +# Not Valid After : Sun Jan 14 23:59:59 2046 +# Fingerprint (SHA-256): 01:8E:13:F0:77:25:32:CF:80:9B:D1:B1:72:81:86:72:83:FC:48:C6:E1:3B:E9:C6:98:12:85:4A:49:0C:1B:05 +# Fingerprint (SHA1): 17:F3:DE:5E:9F:0F:19:E9:8E:F6:1F:32:26:6E:20:C4:07:AE:30:EE +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "DigiCert TLS ECC P384 Root G5" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\046\060\044\006\003\125\004 +\003\023\035\104\151\147\151\103\145\162\164\040\124\114\123\040 +\105\103\103\040\120\063\070\064\040\122\157\157\164\040\107\065 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\046\060\044\006\003\125\004 +\003\023\035\104\151\147\151\103\145\162\164\040\124\114\123\040 +\105\103\103\040\120\063\070\064\040\122\157\157\164\040\107\065 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\011\340\223\145\254\367\331\310\271\076\034\013\004\052 +\056\363 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\031\060\202\001\237\240\003\002\001\002\002\020\011 +\340\223\145\254\367\331\310\271\076\034\013\004\052\056\363\060 +\012\006\010\052\206\110\316\075\004\003\003\060\116\061\013\060 +\011\006\003\125\004\006\023\002\125\123\061\027\060\025\006\003 +\125\004\012\023\016\104\151\147\151\103\145\162\164\054\040\111 +\156\143\056\061\046\060\044\006\003\125\004\003\023\035\104\151 +\147\151\103\145\162\164\040\124\114\123\040\105\103\103\040\120 +\063\070\064\040\122\157\157\164\040\107\065\060\036\027\015\062 +\061\060\061\061\065\060\060\060\060\060\060\132\027\015\064\066 +\060\061\061\064\062\063\065\071\065\071\132\060\116\061\013\060 +\011\006\003\125\004\006\023\002\125\123\061\027\060\025\006\003 +\125\004\012\023\016\104\151\147\151\103\145\162\164\054\040\111 +\156\143\056\061\046\060\044\006\003\125\004\003\023\035\104\151 +\147\151\103\145\162\164\040\124\114\123\040\105\103\103\040\120 +\063\070\064\040\122\157\157\164\040\107\065\060\166\060\020\006 +\007\052\206\110\316\075\002\001\006\005\053\201\004\000\042\003 +\142\000\004\301\104\241\317\021\227\120\232\336\043\202\065\007 +\315\320\313\030\235\322\361\177\167\065\117\073\335\224\162\122 +\355\302\073\370\354\372\173\153\130\040\354\231\256\311\374\150 +\263\165\271\333\011\354\310\023\365\116\306\012\035\146\060\114 +\273\037\107\012\074\141\020\102\051\174\245\010\016\340\042\351 +\323\065\150\316\233\143\237\204\265\231\115\130\240\216\365\124 +\347\225\311\243\102\060\100\060\035\006\003\125\035\016\004\026 +\004\024\301\121\105\120\131\253\076\347\054\132\372\040\042\022 +\007\200\210\174\021\152\060\016\006\003\125\035\017\001\001\377 +\004\004\003\002\001\206\060\017\006\003\125\035\023\001\001\377 +\004\005\060\003\001\001\377\060\012\006\010\052\206\110\316\075 +\004\003\003\003\150\000\060\145\002\061\000\211\152\215\107\347 +\354\374\156\125\003\331\147\154\046\116\203\306\375\311\373\053 +\023\274\267\172\214\264\145\322\151\151\143\023\143\073\046\120 +\056\001\241\171\006\221\235\110\277\302\276\002\060\107\303\025 +\173\261\240\221\231\111\223\250\074\174\350\106\006\213\054\362 +\061\000\224\235\142\310\211\275\031\204\024\351\245\373\001\270 +\015\166\103\214\056\123\313\174\337\014\027\226\120 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "DigiCert TLS ECC P384 Root G5" +# Issuer: CN=DigiCert TLS ECC P384 Root G5,O="DigiCert, Inc.",C=US +# Serial Number:09:e0:93:65:ac:f7:d9:c8:b9:3e:1c:0b:04:2a:2e:f3 +# Subject: CN=DigiCert TLS ECC P384 Root G5,O="DigiCert, Inc.",C=US +# Not Valid Before: Fri Jan 15 00:00:00 2021 +# Not Valid After : Sun Jan 14 23:59:59 2046 +# Fingerprint (SHA-256): 01:8E:13:F0:77:25:32:CF:80:9B:D1:B1:72:81:86:72:83:FC:48:C6:E1:3B:E9:C6:98:12:85:4A:49:0C:1B:05 +# Fingerprint (SHA1): 17:F3:DE:5E:9F:0F:19:E9:8E:F6:1F:32:26:6E:20:C4:07:AE:30:EE +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "DigiCert TLS ECC P384 Root G5" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\027\363\336\136\237\017\031\351\216\366\037\062\046\156\040\304 +\007\256\060\356 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\323\161\004\152\103\034\333\246\131\341\250\243\252\305\161\355 +END +CKA_ISSUER MULTILINE_OCTAL +\060\116\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\046\060\044\006\003\125\004 +\003\023\035\104\151\147\151\103\145\162\164\040\124\114\123\040 +\105\103\103\040\120\063\070\064\040\122\157\157\164\040\107\065 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\011\340\223\145\254\367\331\310\271\076\034\013\004\052 +\056\363 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "DigiCert TLS RSA4096 Root G5" +# +# Issuer: CN=DigiCert TLS RSA4096 Root G5,O="DigiCert, Inc.",C=US +# Serial Number:08:f9:b4:78:a8:fa:7e:da:6a:33:37:89:de:7c:cf:8a +# Subject: CN=DigiCert TLS RSA4096 Root G5,O="DigiCert, Inc.",C=US +# Not Valid Before: Fri Jan 15 00:00:00 2021 +# Not Valid After : Sun Jan 14 23:59:59 2046 +# Fingerprint (SHA-256): 37:1A:00:DC:05:33:B3:72:1A:7E:EB:40:E8:41:9E:70:79:9D:2B:0A:0F:2C:1D:80:69:31:65:F7:CE:C4:AD:75 +# Fingerprint (SHA1): A7:88:49:DC:5D:7C:75:8C:8C:DE:39:98:56:B3:AA:D0:B2:A5:71:35 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "DigiCert TLS RSA4096 Root G5" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\115\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\045\060\043\006\003\125\004 +\003\023\034\104\151\147\151\103\145\162\164\040\124\114\123\040 +\122\123\101\064\060\071\066\040\122\157\157\164\040\107\065 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\115\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\045\060\043\006\003\125\004 +\003\023\034\104\151\147\151\103\145\162\164\040\124\114\123\040 +\122\123\101\064\060\071\066\040\122\157\157\164\040\107\065 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\010\371\264\170\250\372\176\332\152\063\067\211\336\174 +\317\212 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\146\060\202\003\116\240\003\002\001\002\002\020\010 +\371\264\170\250\372\176\332\152\063\067\211\336\174\317\212\060 +\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\115 +\061\013\060\011\006\003\125\004\006\023\002\125\123\061\027\060 +\025\006\003\125\004\012\023\016\104\151\147\151\103\145\162\164 +\054\040\111\156\143\056\061\045\060\043\006\003\125\004\003\023 +\034\104\151\147\151\103\145\162\164\040\124\114\123\040\122\123 +\101\064\060\071\066\040\122\157\157\164\040\107\065\060\036\027 +\015\062\061\060\061\061\065\060\060\060\060\060\060\132\027\015 +\064\066\060\061\061\064\062\063\065\071\065\071\132\060\115\061 +\013\060\011\006\003\125\004\006\023\002\125\123\061\027\060\025 +\006\003\125\004\012\023\016\104\151\147\151\103\145\162\164\054 +\040\111\156\143\056\061\045\060\043\006\003\125\004\003\023\034 +\104\151\147\151\103\145\162\164\040\124\114\123\040\122\123\101 +\064\060\071\066\040\122\157\157\164\040\107\065\060\202\002\042 +\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 +\202\002\017\000\060\202\002\012\002\202\002\001\000\263\320\364 +\311\171\021\235\375\374\146\201\347\314\325\344\274\354\201\076 +\152\065\216\056\267\347\336\257\371\007\115\317\060\235\352\011 +\013\231\275\154\127\332\030\112\270\170\254\072\071\250\246\110 +\254\056\162\345\275\353\361\032\315\347\244\003\251\077\021\264 +\330\057\211\026\373\224\001\075\273\057\370\023\005\241\170\034 +\216\050\340\105\340\203\364\131\033\225\263\256\176\003\105\345 +\276\302\102\376\356\362\074\266\205\023\230\062\235\026\250\051 +\302\013\034\070\334\237\061\167\134\277\047\243\374\047\254\267 +\053\275\164\233\027\055\362\201\332\135\260\341\043\027\076\210 +\112\022\043\320\352\317\235\336\003\027\261\102\112\240\026\114 +\244\155\223\351\077\072\356\072\174\235\130\235\364\116\217\374 +\073\043\310\155\270\342\005\332\314\353\354\303\061\364\327\247 +\051\124\200\317\104\133\114\157\060\236\363\314\335\037\224\103 +\235\115\177\160\160\015\324\072\321\067\360\154\235\233\300\024 +\223\130\357\315\101\070\165\274\023\003\225\174\177\343\134\351 +\325\015\325\342\174\020\142\252\153\360\075\166\363\077\243\350 +\260\301\375\357\252\127\115\254\206\247\030\264\051\301\054\016 +\277\144\276\051\214\330\002\055\315\134\057\362\177\357\025\364 +\014\025\254\012\260\361\323\015\117\152\115\167\227\001\240\361 +\146\267\267\316\357\316\354\354\245\165\312\254\343\341\143\367 +\270\241\004\310\274\173\077\135\055\026\042\126\355\110\111\376 +\247\057\171\060\045\233\272\153\055\077\235\073\304\027\347\035 +\056\373\362\317\246\374\343\024\054\226\230\041\214\264\221\351 +\031\140\203\362\060\053\006\163\120\325\230\073\006\351\307\212 +\014\140\214\050\370\122\233\156\341\366\115\273\006\044\233\327 +\053\046\077\375\052\057\161\365\326\044\276\177\061\236\017\155 +\350\217\117\115\243\077\377\065\352\337\111\136\101\217\206\371 +\361\167\171\113\033\264\243\136\057\373\106\002\320\146\023\136 +\136\205\117\316\330\160\210\173\316\001\265\226\227\327\315\175 +\375\202\370\302\044\301\312\001\071\117\215\242\301\024\100\037 +\234\146\325\014\011\106\326\362\320\321\110\166\126\072\103\313 +\266\012\021\071\272\214\023\154\006\265\236\317\353\002\003\001 +\000\001\243\102\060\100\060\035\006\003\125\035\016\004\026\004 +\024\121\063\034\355\066\100\257\027\323\045\315\151\150\362\257 +\116\043\076\263\101\060\016\006\003\125\035\017\001\001\377\004 +\004\003\002\001\206\060\017\006\003\125\035\023\001\001\377\004 +\005\060\003\001\001\377\060\015\006\011\052\206\110\206\367\015 +\001\001\014\005\000\003\202\002\001\000\140\246\257\133\137\127 +\332\211\333\113\120\251\304\043\065\041\377\320\141\060\204\221 +\267\077\020\317\045\216\311\277\106\064\331\301\041\046\034\160 +\031\162\036\243\311\207\376\251\103\144\226\072\310\123\004\012 +\266\101\273\304\107\000\331\237\030\030\073\262\016\363\064\352 +\044\367\335\257\040\140\256\222\050\137\066\347\135\344\336\307 +\074\333\120\071\255\273\075\050\115\226\174\166\306\133\364\301 +\333\024\245\253\031\142\007\030\100\137\227\221\334\234\307\253 +\265\121\015\346\151\123\125\314\071\175\332\305\021\125\162\305 +\073\213\211\370\064\055\244\027\345\027\346\231\175\060\210\041 +\067\315\060\027\075\270\362\274\250\165\240\103\334\076\211\113 +\220\256\155\003\340\034\243\240\226\011\273\175\243\267\052\020 +\104\113\106\007\064\143\355\061\271\004\356\243\233\232\256\346 +\061\170\364\352\044\141\073\253\130\144\377\273\207\047\142\045 +\201\337\334\241\057\366\355\247\377\172\217\121\056\060\370\244 +\001\322\205\071\137\001\231\226\157\132\133\160\031\106\376\206 +\140\076\255\200\020\011\335\071\045\057\130\177\273\322\164\360 +\367\106\037\106\071\112\330\123\320\363\056\073\161\245\324\157 +\374\363\147\344\007\217\335\046\031\341\215\133\372\243\223\021 +\233\351\310\072\303\125\150\232\222\341\122\166\070\350\341\272 +\275\373\117\325\357\263\347\110\203\061\360\202\041\343\266\276 +\247\253\157\357\237\337\114\317\001\270\142\152\043\075\347\011 +\115\200\033\173\060\244\303\335\007\177\064\276\244\046\262\366 +\101\350\011\035\343\040\230\252\067\117\377\367\361\342\051\160 +\061\107\077\164\320\024\026\372\041\212\002\325\212\011\224\167 +\056\362\131\050\213\174\120\222\012\146\170\070\203\165\304\265 +\132\250\021\306\345\301\235\146\125\317\123\304\257\327\165\205 +\251\102\023\126\354\041\167\201\223\132\014\352\226\331\111\312 +\241\010\362\227\073\155\233\004\030\044\104\216\174\001\362\334 +\045\330\136\206\232\261\071\333\365\221\062\152\321\246\160\212 +\242\367\336\244\105\205\046\250\036\214\135\051\133\310\113\330 +\232\152\003\136\160\362\205\117\154\113\150\057\312\124\366\214 +\332\062\376\303\153\203\077\070\306\176 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "ANF Secure Server Root CA" -# Issuer: CN=ANF Secure Server Root CA,OU=ANF CA Raiz,O=ANF Autoridad de Certificacion,C=ES,serialNumber=G63287510 -# Serial Number:0d:d3:e3:bc:6c:f9:6b:b1 -# Subject: CN=ANF Secure Server Root CA,OU=ANF CA Raiz,O=ANF Autoridad de Certificacion,C=ES,serialNumber=G63287510 -# Not Valid Before: Wed Sep 04 10:00:38 2019 -# Not Valid After : Tue Aug 30 10:00:38 2039 -# Fingerprint (SHA-256): FB:8F:EC:75:91:69:B9:10:6B:1E:51:16:44:C6:18:C5:13:04:37:3F:6C:06:43:08:8D:8B:EF:FD:1B:99:75:99 -# Fingerprint (SHA1): 5B:6E:68:D0:CC:15:B6:A0:5F:1E:C1:5F:AE:02:FC:6B:2F:5D:6F:74 +# Trust for "DigiCert TLS RSA4096 Root G5" +# Issuer: CN=DigiCert TLS RSA4096 Root G5,O="DigiCert, Inc.",C=US +# Serial Number:08:f9:b4:78:a8:fa:7e:da:6a:33:37:89:de:7c:cf:8a +# Subject: CN=DigiCert TLS RSA4096 Root G5,O="DigiCert, Inc.",C=US +# Not Valid Before: Fri Jan 15 00:00:00 2021 +# Not Valid After : Sun Jan 14 23:59:59 2046 +# Fingerprint (SHA-256): 37:1A:00:DC:05:33:B3:72:1A:7E:EB:40:E8:41:9E:70:79:9D:2B:0A:0F:2C:1D:80:69:31:65:F7:CE:C4:AD:75 +# Fingerprint (SHA1): A7:88:49:DC:5D:7C:75:8C:8C:DE:39:98:56:B3:AA:D0:B2:A5:71:35 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "ANF Secure Server Root CA" +CKA_LABEL UTF8 "DigiCert TLS RSA4096 Root G5" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\133\156\150\320\314\025\266\240\137\036\301\137\256\002\374\153 -\057\135\157\164 +\247\210\111\334\135\174\165\214\214\336\071\230\126\263\252\320 +\262\245\161\065 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\046\246\104\132\331\257\116\057\262\035\266\145\260\116\350\226 +\254\376\367\064\226\251\362\263\264\022\113\344\047\101\157\341 END CKA_ISSUER MULTILINE_OCTAL -\060\201\204\061\022\060\020\006\003\125\004\005\023\011\107\066 -\063\062\070\067\065\061\060\061\013\060\011\006\003\125\004\006 -\023\002\105\123\061\047\060\045\006\003\125\004\012\023\036\101 -\116\106\040\101\165\164\157\162\151\144\141\144\040\144\145\040 -\103\145\162\164\151\146\151\143\141\143\151\157\156\061\024\060 -\022\006\003\125\004\013\023\013\101\116\106\040\103\101\040\122 -\141\151\172\061\042\060\040\006\003\125\004\003\023\031\101\116 -\106\040\123\145\143\165\162\145\040\123\145\162\166\145\162\040 -\122\157\157\164\040\103\101 +\060\115\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\045\060\043\006\003\125\004 +\003\023\034\104\151\147\151\103\145\162\164\040\124\114\123\040 +\122\123\101\064\060\071\066\040\122\157\157\164\040\107\065 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\010\015\323\343\274\154\371\153\261 +\002\020\010\371\264\170\250\372\176\332\152\063\067\211\336\174 +\317\212 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST @@ -22002,478 +23454,862 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Certum EC-384 CA" +# Certificate "DigiCert SMIME ECC P384 Root G5" # -# Issuer: CN=Certum EC-384 CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL -# Serial Number:78:8f:27:5c:81:12:52:20:a5:04:d0:2d:dd:ba:73:f4 -# Subject: CN=Certum EC-384 CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL -# Not Valid Before: Mon Mar 26 07:24:54 2018 -# Not Valid After : Thu Mar 26 07:24:54 2043 -# Fingerprint (SHA-256): 6B:32:80:85:62:53:18:AA:50:D1:73:C9:8D:8B:DA:09:D5:7E:27:41:3D:11:4C:F7:87:A0:F5:D0:6C:03:0C:F6 -# Fingerprint (SHA1): F3:3E:78:3C:AC:DF:F4:A2:CC:AC:67:55:69:56:D7:E5:16:3C:E1:ED +# Issuer: CN=DigiCert SMIME ECC P384 Root G5,O="DigiCert, Inc.",C=US +# Serial Number:05:3f:6e:a0:06:01:72:7d:ed:3f:c3:a3:b6:a3:d6:ef +# Subject: CN=DigiCert SMIME ECC P384 Root G5,O="DigiCert, Inc.",C=US +# Not Valid Before: Fri Jan 15 00:00:00 2021 +# Not Valid After : Sun Jan 14 23:59:59 2046 +# Fingerprint (SHA-256): E8:E8:17:65:36:A6:0C:C2:C4:E1:01:87:C3:BE:FC:A2:0E:F2:63:49:70:18:F5:66:D5:BE:A0:F9:4D:0C:11:1B +# Fingerprint (SHA1): 1C:B8:A7:08:C9:0D:20:79:01:A0:B2:36:7F:F0:95:65:E4:53:24:FE CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certum EC-384 CA" +CKA_LABEL UTF8 "DigiCert SMIME ECC P384 Root G5" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\164\061\013\060\011\006\003\125\004\006\023\002\120\114\061 -\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 -\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 -\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 -\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\061\031\060\027\006 -\003\125\004\003\023\020\103\145\162\164\165\155\040\105\103\055 -\063\070\064\040\103\101 +\060\120\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 +\003\023\037\104\151\147\151\103\145\162\164\040\123\115\111\115 +\105\040\105\103\103\040\120\063\070\064\040\122\157\157\164\040 +\107\065 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\164\061\013\060\011\006\003\125\004\006\023\002\120\114\061 -\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 -\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 -\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 -\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\061\031\060\027\006 -\003\125\004\003\023\020\103\145\162\164\165\155\040\105\103\055 -\063\070\064\040\103\101 +\060\120\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 +\003\023\037\104\151\147\151\103\145\162\164\040\123\115\111\115 +\105\040\105\103\103\040\120\063\070\064\040\122\157\157\164\040 +\107\065 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\170\217\047\134\201\022\122\040\245\004\320\055\335\272 -\163\364 +\002\020\005\077\156\240\006\001\162\175\355\077\303\243\266\243 +\326\357 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\145\060\202\001\353\240\003\002\001\002\002\020\170 -\217\047\134\201\022\122\040\245\004\320\055\335\272\163\364\060 -\012\006\010\052\206\110\316\075\004\003\003\060\164\061\013\060 -\011\006\003\125\004\006\023\002\120\114\061\041\060\037\006\003 -\125\004\012\023\030\101\163\163\145\143\157\040\104\141\164\141 -\040\123\171\163\164\145\155\163\040\123\056\101\056\061\047\060 -\045\006\003\125\004\013\023\036\103\145\162\164\165\155\040\103 -\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164 -\150\157\162\151\164\171\061\031\060\027\006\003\125\004\003\023 -\020\103\145\162\164\165\155\040\105\103\055\063\070\064\040\103 -\101\060\036\027\015\061\070\060\063\062\066\060\067\062\064\065 -\064\132\027\015\064\063\060\063\062\066\060\067\062\064\065\064 -\132\060\164\061\013\060\011\006\003\125\004\006\023\002\120\114 -\061\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143 -\157\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123 -\056\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145 -\162\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151 -\157\156\040\101\165\164\150\157\162\151\164\171\061\031\060\027 -\006\003\125\004\003\023\020\103\145\162\164\165\155\040\105\103 -\055\063\070\064\040\103\101\060\166\060\020\006\007\052\206\110 -\316\075\002\001\006\005\053\201\004\000\042\003\142\000\004\304 -\050\216\253\030\133\152\276\156\144\067\143\344\315\354\253\072 -\367\314\241\270\016\202\111\327\206\051\237\241\224\362\343\140 -\170\230\201\170\006\115\362\354\232\016\127\140\203\237\264\346 -\027\057\032\263\135\002\133\211\043\074\302\021\005\052\247\210 -\023\030\363\120\204\327\275\064\054\047\211\125\377\316\114\347 -\337\246\037\050\304\360\124\303\271\174\267\123\255\353\302\243 -\102\060\100\060\017\006\003\125\035\023\001\001\377\004\005\060 -\003\001\001\377\060\035\006\003\125\035\016\004\026\004\024\215 -\006\146\164\044\166\072\363\211\367\274\326\275\107\175\057\274 -\020\137\113\060\016\006\003\125\035\017\001\001\377\004\004\003 -\002\001\006\060\012\006\010\052\206\110\316\075\004\003\003\003 -\150\000\060\145\002\060\003\125\055\246\346\030\304\174\357\311 -\120\156\301\047\017\234\207\257\156\325\033\010\030\275\222\051 -\301\357\224\221\170\322\072\034\125\211\142\345\033\011\036\272 -\144\153\361\166\264\324\002\061\000\264\102\204\231\377\253\347 -\236\373\221\227\047\135\334\260\133\060\161\316\136\070\032\152 -\331\045\347\352\367\141\222\126\370\352\332\066\302\207\145\226 -\056\162\045\057\177\337\303\023\311 +\060\202\002\034\060\202\001\243\240\003\002\001\002\002\020\005 +\077\156\240\006\001\162\175\355\077\303\243\266\243\326\357\060 +\012\006\010\052\206\110\316\075\004\003\003\060\120\061\013\060 +\011\006\003\125\004\006\023\002\125\123\061\027\060\025\006\003 +\125\004\012\023\016\104\151\147\151\103\145\162\164\054\040\111 +\156\143\056\061\050\060\046\006\003\125\004\003\023\037\104\151 +\147\151\103\145\162\164\040\123\115\111\115\105\040\105\103\103 +\040\120\063\070\064\040\122\157\157\164\040\107\065\060\036\027 +\015\062\061\060\061\061\065\060\060\060\060\060\060\132\027\015 +\064\066\060\061\061\064\062\063\065\071\065\071\132\060\120\061 +\013\060\011\006\003\125\004\006\023\002\125\123\061\027\060\025 +\006\003\125\004\012\023\016\104\151\147\151\103\145\162\164\054 +\040\111\156\143\056\061\050\060\046\006\003\125\004\003\023\037 +\104\151\147\151\103\145\162\164\040\123\115\111\115\105\040\105 +\103\103\040\120\063\070\064\040\122\157\157\164\040\107\065\060 +\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 +\004\000\042\003\142\000\004\026\235\125\345\266\324\373\373\147 +\153\032\324\241\252\322\167\225\076\210\345\007\237\266\160\146 +\040\050\244\210\354\160\065\257\263\062\377\067\023\112\236\274 +\001\003\336\204\301\270\306\346\145\107\211\362\023\125\277\315 +\245\036\010\140\177\255\177\350\141\222\051\317\011\107\136\013 +\034\300\037\244\277\362\133\274\230\357\231\114\314\160\153\266 +\272\320\050\035\277\276\004\243\102\060\100\060\035\006\003\125 +\035\016\004\026\004\024\163\172\153\226\333\102\007\213\122\146 +\302\144\062\027\376\340\147\220\056\255\060\016\006\003\125\035 +\017\001\001\377\004\004\003\002\001\206\060\017\006\003\125\035 +\023\001\001\377\004\005\060\003\001\001\377\060\012\006\010\052 +\206\110\316\075\004\003\003\003\147\000\060\144\002\060\067\104 +\365\062\200\343\161\353\364\155\317\174\314\221\232\303\156\161 +\330\322\043\135\222\115\202\102\155\134\141\225\366\221\365\247 +\010\366\152\227\351\234\224\055\230\160\375\063\266\011\002\060 +\007\074\057\271\130\202\136\017\243\142\250\223\147\360\040\303 +\151\277\003\054\073\120\247\073\257\101\070\311\122\110\221\326 +\016\373\274\140\060\174\144\077\022\036\105\177\121\076\364\246 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Certum EC-384 CA" -# Issuer: CN=Certum EC-384 CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL -# Serial Number:78:8f:27:5c:81:12:52:20:a5:04:d0:2d:dd:ba:73:f4 -# Subject: CN=Certum EC-384 CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL -# Not Valid Before: Mon Mar 26 07:24:54 2018 -# Not Valid After : Thu Mar 26 07:24:54 2043 -# Fingerprint (SHA-256): 6B:32:80:85:62:53:18:AA:50:D1:73:C9:8D:8B:DA:09:D5:7E:27:41:3D:11:4C:F7:87:A0:F5:D0:6C:03:0C:F6 -# Fingerprint (SHA1): F3:3E:78:3C:AC:DF:F4:A2:CC:AC:67:55:69:56:D7:E5:16:3C:E1:ED +# Trust for "DigiCert SMIME ECC P384 Root G5" +# Issuer: CN=DigiCert SMIME ECC P384 Root G5,O="DigiCert, Inc.",C=US +# Serial Number:05:3f:6e:a0:06:01:72:7d:ed:3f:c3:a3:b6:a3:d6:ef +# Subject: CN=DigiCert SMIME ECC P384 Root G5,O="DigiCert, Inc.",C=US +# Not Valid Before: Fri Jan 15 00:00:00 2021 +# Not Valid After : Sun Jan 14 23:59:59 2046 +# Fingerprint (SHA-256): E8:E8:17:65:36:A6:0C:C2:C4:E1:01:87:C3:BE:FC:A2:0E:F2:63:49:70:18:F5:66:D5:BE:A0:F9:4D:0C:11:1B +# Fingerprint (SHA1): 1C:B8:A7:08:C9:0D:20:79:01:A0:B2:36:7F:F0:95:65:E4:53:24:FE CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certum EC-384 CA" +CKA_LABEL UTF8 "DigiCert SMIME ECC P384 Root G5" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\363\076\170\074\254\337\364\242\314\254\147\125\151\126\327\345 -\026\074\341\355 +\034\270\247\010\311\015\040\171\001\240\262\066\177\360\225\145 +\344\123\044\376 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\266\145\263\226\140\227\022\241\354\116\341\075\243\306\311\361 +\246\376\364\122\066\104\330\356\015\267\003\013\357\164\263\003 END CKA_ISSUER MULTILINE_OCTAL -\060\164\061\013\060\011\006\003\125\004\006\023\002\120\114\061 -\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 -\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 -\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 -\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\061\031\060\027\006 -\003\125\004\003\023\020\103\145\162\164\165\155\040\105\103\055 -\063\070\064\040\103\101 +\060\120\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\050\060\046\006\003\125\004 +\003\023\037\104\151\147\151\103\145\162\164\040\123\115\111\115 +\105\040\105\103\103\040\120\063\070\064\040\122\157\157\164\040 +\107\065 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\170\217\047\134\201\022\122\040\245\004\320\055\335\272 -\163\364 +\002\020\005\077\156\240\006\001\162\175\355\077\303\243\266\243 +\326\357 END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Certum Trusted Root CA" +# Certificate "DigiCert SMIME RSA4096 Root G5" # -# Issuer: CN=Certum Trusted Root CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL -# Serial Number:1e:bf:59:50:b8:c9:80:37:4c:06:f7:eb:55:4f:b5:ed -# Subject: CN=Certum Trusted Root CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL -# Not Valid Before: Fri Mar 16 12:10:13 2018 -# Not Valid After : Mon Mar 16 12:10:13 2043 -# Fingerprint (SHA-256): FE:76:96:57:38:55:77:3E:37:A9:5E:7A:D4:D9:CC:96:C3:01:57:C1:5D:31:76:5B:A9:B1:57:04:E1:AE:78:FD -# Fingerprint (SHA1): C8:83:44:C0:18:AE:9F:CC:F1:87:B7:8F:22:D1:C5:D7:45:84:BA:E5 +# Issuer: CN=DigiCert SMIME RSA4096 Root G5,O="DigiCert, Inc.",C=US +# Serial Number:05:f6:ba:04:23:83:46:cb:7d:5c:e6:b9:5b:ba:1c:55 +# Subject: CN=DigiCert SMIME RSA4096 Root G5,O="DigiCert, Inc.",C=US +# Not Valid Before: Fri Jan 15 00:00:00 2021 +# Not Valid After : Sun Jan 14 23:59:59 2046 +# Fingerprint (SHA-256): 90:37:0D:3E:FA:88:BF:58:C3:01:05:BA:25:10:4A:35:84:60:A7:FA:52:DF:C2:01:1D:F2:33:A0:F4:17:91:2A +# Fingerprint (SHA1): 5B:C5:AD:E2:9A:A7:54:DA:84:89:53:A5:FE:D7:5B:46:86:D0:57:08 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certum Trusted Root CA" +CKA_LABEL UTF8 "DigiCert SMIME RSA4096 Root G5" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\172\061\013\060\011\006\003\125\004\006\023\002\120\114\061 -\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 -\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 -\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 -\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\061\037\060\035\006 -\003\125\004\003\023\026\103\145\162\164\165\155\040\124\162\165 -\163\164\145\144\040\122\157\157\164\040\103\101 +\060\117\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\047\060\045\006\003\125\004 +\003\023\036\104\151\147\151\103\145\162\164\040\123\115\111\115 +\105\040\122\123\101\064\060\071\066\040\122\157\157\164\040\107 +\065 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\172\061\013\060\011\006\003\125\004\006\023\002\120\114\061 -\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 -\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 -\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 -\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\061\037\060\035\006 -\003\125\004\003\023\026\103\145\162\164\165\155\040\124\162\165 -\163\164\145\144\040\122\157\157\164\040\103\101 +\060\117\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\047\060\045\006\003\125\004 +\003\023\036\104\151\147\151\103\145\162\164\040\123\115\111\115 +\105\040\122\123\101\064\060\071\066\040\122\157\157\164\040\107 +\065 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\036\277\131\120\270\311\200\067\114\006\367\353\125\117 -\265\355 +\002\020\005\366\272\004\043\203\106\313\175\134\346\271\133\272 +\034\125 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\300\060\202\003\250\240\003\002\001\002\002\020\036 -\277\131\120\270\311\200\067\114\006\367\353\125\117\265\355\060 -\015\006\011\052\206\110\206\367\015\001\001\015\005\000\060\172 -\061\013\060\011\006\003\125\004\006\023\002\120\114\061\041\060 -\037\006\003\125\004\012\023\030\101\163\163\145\143\157\040\104 -\141\164\141\040\123\171\163\164\145\155\163\040\123\056\101\056 -\061\047\060\045\006\003\125\004\013\023\036\103\145\162\164\165 -\155\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040 -\101\165\164\150\157\162\151\164\171\061\037\060\035\006\003\125 -\004\003\023\026\103\145\162\164\165\155\040\124\162\165\163\164 -\145\144\040\122\157\157\164\040\103\101\060\036\027\015\061\070 -\060\063\061\066\061\062\061\060\061\063\132\027\015\064\063\060 -\063\061\066\061\062\061\060\061\063\132\060\172\061\013\060\011 -\006\003\125\004\006\023\002\120\114\061\041\060\037\006\003\125 -\004\012\023\030\101\163\163\145\143\157\040\104\141\164\141\040 -\123\171\163\164\145\155\163\040\123\056\101\056\061\047\060\045 -\006\003\125\004\013\023\036\103\145\162\164\165\155\040\103\145 -\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150 -\157\162\151\164\171\061\037\060\035\006\003\125\004\003\023\026 -\103\145\162\164\165\155\040\124\162\165\163\164\145\144\040\122 -\157\157\164\040\103\101\060\202\002\042\060\015\006\011\052\206 -\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060\202 -\002\012\002\202\002\001\000\321\055\216\273\267\066\352\155\067 -\221\237\116\223\247\005\344\051\003\045\316\034\202\367\174\231 -\237\101\006\315\355\243\272\300\333\011\054\301\174\337\051\176 -\113\145\057\223\247\324\001\153\003\050\030\243\330\235\005\301 -\052\330\105\361\221\336\337\073\320\200\002\214\317\070\017\352 -\247\134\170\021\244\301\310\205\134\045\323\323\262\347\045\317 -\021\124\227\253\065\300\036\166\034\357\000\123\237\071\334\024 -\245\054\042\045\263\162\162\374\215\263\345\076\010\036\024\052 -\067\013\210\074\312\260\364\310\302\241\256\274\301\276\051\147 -\125\342\374\255\131\134\376\275\127\054\260\220\215\302\355\067 -\266\174\231\210\265\325\003\232\075\025\015\075\072\250\250\105 -\360\225\116\045\131\035\315\230\151\273\323\314\062\311\215\357 -\201\376\255\175\211\273\272\140\023\312\145\225\147\240\363\031 -\366\003\126\324\152\323\047\342\241\255\203\360\112\022\042\167 -\034\005\163\342\031\161\102\300\354\165\106\232\220\130\340\152 -\216\053\245\106\060\004\216\031\262\027\343\276\251\272\177\126 -\361\044\003\327\262\041\050\166\016\066\060\114\171\325\101\232 -\232\250\270\065\272\014\072\362\104\033\040\210\367\305\045\327 -\075\306\343\076\103\335\207\376\304\352\365\123\076\114\145\377 -\073\112\313\170\132\153\027\137\015\307\303\117\116\232\052\242 -\355\127\115\042\342\106\232\077\017\221\064\044\175\125\343\214 -\225\067\323\032\360\011\053\054\322\311\215\264\015\000\253\147 -\051\050\330\001\365\031\004\266\035\276\166\376\162\134\304\205 -\312\322\200\101\337\005\250\243\325\204\220\117\013\363\340\077 -\233\031\322\067\211\077\362\173\122\034\214\366\341\367\074\007 -\227\214\016\242\131\201\014\262\220\075\323\343\131\106\355\017 -\251\247\336\200\153\132\252\007\266\031\313\274\127\363\227\041 -\172\014\261\053\164\076\353\332\247\147\055\114\304\230\236\066 -\011\166\146\146\374\032\077\352\110\124\034\276\060\275\200\120 -\277\174\265\316\000\366\014\141\331\347\044\003\340\343\001\201 -\016\275\330\205\064\210\275\262\066\250\173\134\010\345\104\200 -\214\157\370\057\325\041\312\035\034\320\373\304\265\207\321\072 -\116\307\166\265\065\110\265\002\003\001\000\001\243\102\060\100 -\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001 -\377\060\035\006\003\125\035\016\004\026\004\024\214\373\034\165 -\274\002\323\237\116\056\110\331\371\140\124\252\304\263\117\372 -\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006 -\060\015\006\011\052\206\110\206\367\015\001\001\015\005\000\003 -\202\002\001\000\110\242\325\000\013\056\320\077\274\034\325\265 -\124\111\036\132\153\364\344\362\340\100\067\340\314\024\173\271 -\311\372\065\265\165\027\223\152\005\151\205\234\315\117\031\170 -\133\031\201\363\143\076\303\316\133\217\365\057\136\001\166\023 -\077\054\000\271\315\226\122\071\111\155\004\116\305\351\017\206 -\015\341\372\263\137\202\022\361\072\316\146\006\044\064\053\350 -\314\312\347\151\334\207\235\302\064\327\171\321\323\167\270\252 -\131\130\376\235\046\372\070\206\076\235\212\207\144\127\345\027 -\072\342\371\215\271\343\063\170\301\220\330\270\335\267\203\121 -\344\304\314\043\325\006\174\346\121\323\315\064\061\300\366\106 -\273\013\255\374\075\020\005\052\073\112\221\045\356\214\324\204 -\207\200\052\274\011\214\252\072\023\137\350\064\171\120\301\020 -\031\371\323\050\036\324\321\121\060\051\263\256\220\147\326\037 -\012\143\261\305\251\306\102\061\143\027\224\357\151\313\057\372 -\214\024\175\304\103\030\211\331\360\062\100\346\200\342\106\137 -\345\343\301\000\131\250\371\350\040\274\211\054\016\107\064\013 -\352\127\302\123\066\374\247\324\257\061\315\376\002\345\165\372 -\271\047\011\371\363\365\073\312\175\237\251\042\313\210\311\252 -\321\107\075\066\167\250\131\144\153\047\317\357\047\301\343\044 -\265\206\367\256\176\062\115\260\171\150\321\071\350\220\130\303 -\203\274\017\054\326\227\353\316\014\341\040\307\332\267\076\303 -\077\277\057\334\064\244\373\053\041\315\147\217\113\364\343\352 -\324\077\347\117\272\271\245\223\105\034\146\037\041\372\144\136 -\157\340\166\224\062\313\165\365\156\345\366\217\307\270\244\314 -\250\226\175\144\373\044\132\112\003\154\153\070\306\350\003\103 -\232\367\127\271\263\051\151\223\070\364\003\362\273\373\202\153 -\007\040\321\122\037\232\144\002\173\230\146\333\134\115\132\017 -\320\204\225\240\074\024\103\006\312\312\333\270\101\066\332\152 -\104\147\207\257\257\343\105\021\025\151\010\262\276\026\071\227 -\044\157\022\105\321\147\135\011\250\311\025\332\372\322\246\137 -\023\141\037\277\205\254\264\255\255\005\224\010\203\036\165\027 -\323\161\073\223\120\043\131\240\355\074\221\124\235\166\000\305 -\303\270\070\333 +\060\202\005\152\060\202\003\122\240\003\002\001\002\002\020\005 +\366\272\004\043\203\106\313\175\134\346\271\133\272\034\125\060 +\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\117 +\061\013\060\011\006\003\125\004\006\023\002\125\123\061\027\060 +\025\006\003\125\004\012\023\016\104\151\147\151\103\145\162\164 +\054\040\111\156\143\056\061\047\060\045\006\003\125\004\003\023 +\036\104\151\147\151\103\145\162\164\040\123\115\111\115\105\040 +\122\123\101\064\060\071\066\040\122\157\157\164\040\107\065\060 +\036\027\015\062\061\060\061\061\065\060\060\060\060\060\060\132 +\027\015\064\066\060\061\061\064\062\063\065\071\065\071\132\060 +\117\061\013\060\011\006\003\125\004\006\023\002\125\123\061\027 +\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145\162 +\164\054\040\111\156\143\056\061\047\060\045\006\003\125\004\003 +\023\036\104\151\147\151\103\145\162\164\040\123\115\111\115\105 +\040\122\123\101\064\060\071\066\040\122\157\157\164\040\107\065 +\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 +\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 +\000\340\152\133\331\370\371\175\354\265\173\357\137\335\134\064 +\330\332\135\321\313\145\165\253\041\174\133\000\324\202\157\105 +\205\101\212\251\022\002\162\062\360\024\365\003\165\273\143\227 +\111\017\100\231\013\032\036\126\247\322\320\341\253\335\345\004 +\033\343\037\024\022\002\210\365\240\200\011\366\047\232\120\360 +\272\343\242\340\254\152\024\221\265\153\070\020\172\242\061\341 +\221\033\267\271\360\053\133\310\167\011\166\267\121\304\066\012 +\231\123\124\104\045\267\011\065\206\027\005\126\223\075\101\267 +\002\327\142\037\212\222\021\207\352\021\155\352\010\021\334\261 +\170\110\111\222\366\264\121\200\170\043\330\376\341\126\032\072 +\220\023\126\064\211\325\342\225\213\137\336\262\314\373\077\070 +\267\205\367\352\236\277\056\241\056\057\115\175\152\021\056\066 +\240\377\021\010\004\225\125\340\033\073\147\223\251\224\125\352 +\062\355\006\072\177\302\177\343\255\023\047\321\064\101\263\060 +\303\277\264\210\370\003\202\244\337\076\253\170\167\240\131\223 +\161\347\335\353\000\004\173\314\110\071\050\340\036\243\025\151 +\310\066\262\241\013\227\337\125\326\357\221\234\244\366\026\367 +\121\012\356\003\043\221\334\004\377\340\335\070\366\042\003\000 +\302\007\161\032\022\311\327\106\052\224\033\315\326\273\033\356 +\277\276\115\120\130\260\013\315\060\166\051\365\317\345\266\152 +\057\166\260\260\151\152\320\155\145\030\065\176\223\274\162\027 +\301\125\102\315\057\302\045\273\364\375\035\241\144\042\124\135 +\342\236\162\101\204\156\161\226\352\105\007\266\136\172\112\206 +\235\163\144\167\070\003\322\017\123\245\125\040\304\115\377\150 +\157\125\251\352\335\161\344\117\331\205\243\174\116\051\002\236 +\013\011\362\032\123\314\000\246\335\321\064\366\015\301\060\261 +\234\002\144\254\065\355\245\260\051\261\322\225\063\017\322\040 +\063\275\354\043\113\362\031\371\332\230\144\344\054\061\037\056 +\341\215\034\004\225\050\115\214\130\315\113\345\163\202\206\214 +\354\250\326\171\134\373\144\273\334\014\114\050\366\027\257\342 +\150\326\026\206\230\333\374\001\334\061\272\370\234\016\371\050 +\106\112\341\375\226\006\105\171\021\150\027\145\134\213\046\207 +\133\002\003\001\000\001\243\102\060\100\060\035\006\003\125\035 +\016\004\026\004\024\321\243\324\127\035\117\125\333\165\114\134 +\102\236\143\026\316\264\306\073\037\060\016\006\003\125\035\017 +\001\001\377\004\004\003\002\001\206\060\017\006\003\125\035\023 +\001\001\377\004\005\060\003\001\001\377\060\015\006\011\052\206 +\110\206\367\015\001\001\014\005\000\003\202\002\001\000\007\247 +\012\336\123\273\232\353\160\277\262\066\220\315\344\247\270\361 +\014\344\135\132\035\170\145\374\311\270\036\043\021\127\174\151 +\065\155\001\377\123\120\277\007\016\272\307\001\077\130\052\224 +\165\003\253\034\013\043\334\033\212\036\067\075\035\130\217\163 +\331\263\052\157\337\020\240\133\014\247\312\260\177\271\044\242 +\001\065\062\345\136\106\101\353\330\177\163\347\102\351\244\121 +\046\167\201\012\250\353\017\012\120\235\176\212\040\147\374\013 +\216\072\021\323\305\214\140\030\331\113\261\374\324\361\264\111 +\116\256\207\341\321\373\166\241\137\363\006\317\227\226\014\351 +\236\165\201\134\123\015\042\374\066\346\111\156\164\333\000\205 +\215\174\042\240\216\373\020\114\324\142\023\133\357\113\162\046 +\213\374\116\212\217\376\227\020\123\305\170\213\102\144\033\137 +\340\211\375\273\011\177\120\340\124\205\046\021\152\035\145\371 +\111\051\334\174\066\337\373\075\367\322\254\356\062\215\156\246 +\175\071\234\105\304\312\015\365\073\264\171\123\245\057\126\307 +\121\305\212\114\144\135\220\103\043\216\153\114\027\170\314\350 +\277\365\073\344\250\110\317\255\233\014\337\062\112\323\331\022 +\216\043\170\015\055\257\237\257\236\074\011\302\227\000\355\072 +\151\034\161\077\071\337\323\217\304\146\365\357\066\224\017\363 +\335\222\266\226\137\220\246\335\163\252\246\040\224\224\045\152 +\011\014\162\344\023\043\140\114\243\312\027\056\173\147\000\333 +\320\315\352\172\037\071\046\127\211\060\167\313\116\345\225\105 +\117\137\373\066\134\075\371\040\265\072\020\045\117\223\062\132 +\356\301\226\350\351\126\004\260\111\141\115\354\170\250\235\030 +\301\377\330\352\057\126\357\225\053\173\004\136\147\343\125\100 +\355\071\004\371\013\171\365\152\214\134\017\211\232\220\307\315 +\213\336\333\046\065\241\156\315\263\102\362\242\017\073\014\216 +\223\377\024\317\374\367\223\367\344\101\010\156\031\122\021\017 +\123\031\163\170\014\317\330\205\201\370\255\125\310\260\236\106 +\143\257\234\122\356\134\277\360\300\133\067\036\011\040\322\076 +\043\306\241\025\112\016\066\176\060\305\171\152\274\042\210\331 +\014\122\100\037\335\116\017\147\046\026\322\255\027\034 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Certum Trusted Root CA" -# Issuer: CN=Certum Trusted Root CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL -# Serial Number:1e:bf:59:50:b8:c9:80:37:4c:06:f7:eb:55:4f:b5:ed -# Subject: CN=Certum Trusted Root CA,OU=Certum Certification Authority,O=Asseco Data Systems S.A.,C=PL -# Not Valid Before: Fri Mar 16 12:10:13 2018 -# Not Valid After : Mon Mar 16 12:10:13 2043 -# Fingerprint (SHA-256): FE:76:96:57:38:55:77:3E:37:A9:5E:7A:D4:D9:CC:96:C3:01:57:C1:5D:31:76:5B:A9:B1:57:04:E1:AE:78:FD -# Fingerprint (SHA1): C8:83:44:C0:18:AE:9F:CC:F1:87:B7:8F:22:D1:C5:D7:45:84:BA:E5 +# Trust for "DigiCert SMIME RSA4096 Root G5" +# Issuer: CN=DigiCert SMIME RSA4096 Root G5,O="DigiCert, Inc.",C=US +# Serial Number:05:f6:ba:04:23:83:46:cb:7d:5c:e6:b9:5b:ba:1c:55 +# Subject: CN=DigiCert SMIME RSA4096 Root G5,O="DigiCert, Inc.",C=US +# Not Valid Before: Fri Jan 15 00:00:00 2021 +# Not Valid After : Sun Jan 14 23:59:59 2046 +# Fingerprint (SHA-256): 90:37:0D:3E:FA:88:BF:58:C3:01:05:BA:25:10:4A:35:84:60:A7:FA:52:DF:C2:01:1D:F2:33:A0:F4:17:91:2A +# Fingerprint (SHA1): 5B:C5:AD:E2:9A:A7:54:DA:84:89:53:A5:FE:D7:5B:46:86:D0:57:08 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certum Trusted Root CA" +CKA_LABEL UTF8 "DigiCert SMIME RSA4096 Root G5" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\310\203\104\300\030\256\237\314\361\207\267\217\042\321\305\327 -\105\204\272\345 +\133\305\255\342\232\247\124\332\204\211\123\245\376\327\133\106 +\206\320\127\010 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\121\341\302\347\376\114\204\257\131\016\057\364\124\157\352\051 +\321\173\340\265\077\065\162\237\175\276\013\245\244\035\251\156 END CKA_ISSUER MULTILINE_OCTAL -\060\172\061\013\060\011\006\003\125\004\006\023\002\120\114\061 -\041\060\037\006\003\125\004\012\023\030\101\163\163\145\143\157 -\040\104\141\164\141\040\123\171\163\164\145\155\163\040\123\056 -\101\056\061\047\060\045\006\003\125\004\013\023\036\103\145\162 -\164\165\155\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\061\037\060\035\006 -\003\125\004\003\023\026\103\145\162\164\165\155\040\124\162\165 -\163\164\145\144\040\122\157\157\164\040\103\101 +\060\117\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\027\060\025\006\003\125\004\012\023\016\104\151\147\151\103\145 +\162\164\054\040\111\156\143\056\061\047\060\045\006\003\125\004 +\003\023\036\104\151\147\151\103\145\162\164\040\123\115\111\115 +\105\040\122\123\101\064\060\071\066\040\122\157\157\164\040\107 +\065 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\036\277\131\120\270\311\200\067\114\006\367\353\125\117 -\265\355 +\002\020\005\366\272\004\043\203\106\313\175\134\346\271\133\272 +\034\125 END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "TunTrust Root CA" +# Certificate "Certainly Root R1" # -# Issuer: CN=TunTrust Root CA,O=Agence Nationale de Certification Electronique,C=TN -# Serial Number:13:02:d5:e2:40:4c:92:46:86:16:67:5d:b4:bb:bb:b2:6b:3e:fc:13 -# Subject: CN=TunTrust Root CA,O=Agence Nationale de Certification Electronique,C=TN -# Not Valid Before: Fri Apr 26 08:57:56 2019 -# Not Valid After : Tue Apr 26 08:57:56 2044 -# Fingerprint (SHA-256): 2E:44:10:2A:B5:8C:B8:54:19:45:1C:8E:19:D9:AC:F3:66:2C:AF:BC:61:4B:6A:53:96:0A:30:F7:D0:E2:EB:41 -# Fingerprint (SHA1): CF:E9:70:84:0F:E0:73:0F:9D:F6:0C:7F:2C:4B:EE:20:46:34:9C:BB +# Issuer: CN=Certainly Root R1,O=Certainly,C=US +# Serial Number:00:8e:0f:f9:4b:90:71:68:65:33:54:f4:d4:44:39:b7:e0 +# Subject: CN=Certainly Root R1,O=Certainly,C=US +# Not Valid Before: Thu Apr 01 00:00:00 2021 +# Not Valid After : Sun Apr 01 00:00:00 2046 +# Fingerprint (SHA-256): 77:B8:2C:D8:64:4C:43:05:F7:AC:C5:CB:15:6B:45:67:50:04:03:3D:51:C6:0C:62:02:A8:E0:C3:34:67:D3:A0 +# Fingerprint (SHA1): A0:50:EE:0F:28:71:F4:27:B2:12:6D:6F:50:96:25:BA:CC:86:42:AF CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TunTrust Root CA" +CKA_LABEL UTF8 "Certainly Root R1" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\141\061\013\060\011\006\003\125\004\006\023\002\124\116\061 -\067\060\065\006\003\125\004\012\014\056\101\147\145\156\143\145 -\040\116\141\164\151\157\156\141\154\145\040\144\145\040\103\145 -\162\164\151\146\151\143\141\164\151\157\156\040\105\154\145\143 -\164\162\157\156\151\161\165\145\061\031\060\027\006\003\125\004 -\003\014\020\124\165\156\124\162\165\163\164\040\122\157\157\164 -\040\103\101 +\060\075\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\022\060\020\006\003\125\004\012\023\011\103\145\162\164\141\151 +\156\154\171\061\032\060\030\006\003\125\004\003\023\021\103\145 +\162\164\141\151\156\154\171\040\122\157\157\164\040\122\061 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\141\061\013\060\011\006\003\125\004\006\023\002\124\116\061 -\067\060\065\006\003\125\004\012\014\056\101\147\145\156\143\145 -\040\116\141\164\151\157\156\141\154\145\040\144\145\040\103\145 -\162\164\151\146\151\143\141\164\151\157\156\040\105\154\145\143 -\164\162\157\156\151\161\165\145\061\031\060\027\006\003\125\004 -\003\014\020\124\165\156\124\162\165\163\164\040\122\157\157\164 -\040\103\101 +\060\075\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\022\060\020\006\003\125\004\012\023\011\103\145\162\164\141\151 +\156\154\171\061\032\060\030\006\003\125\004\003\023\021\103\145 +\162\164\141\151\156\154\171\040\122\157\157\164\040\122\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\023\002\325\342\100\114\222\106\206\026\147\135\264\273 -\273\262\153\076\374\023 +\002\021\000\216\017\371\113\220\161\150\145\063\124\364\324\104 +\071\267\340 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\263\060\202\003\233\240\003\002\001\002\002\024\023 -\002\325\342\100\114\222\106\206\026\147\135\264\273\273\262\153 -\076\374\023\060\015\006\011\052\206\110\206\367\015\001\001\013 -\005\000\060\141\061\013\060\011\006\003\125\004\006\023\002\124 -\116\061\067\060\065\006\003\125\004\012\014\056\101\147\145\156 -\143\145\040\116\141\164\151\157\156\141\154\145\040\144\145\040 -\103\145\162\164\151\146\151\143\141\164\151\157\156\040\105\154 -\145\143\164\162\157\156\151\161\165\145\061\031\060\027\006\003 -\125\004\003\014\020\124\165\156\124\162\165\163\164\040\122\157 -\157\164\040\103\101\060\036\027\015\061\071\060\064\062\066\060 -\070\065\067\065\066\132\027\015\064\064\060\064\062\066\060\070 -\065\067\065\066\132\060\141\061\013\060\011\006\003\125\004\006 -\023\002\124\116\061\067\060\065\006\003\125\004\012\014\056\101 -\147\145\156\143\145\040\116\141\164\151\157\156\141\154\145\040 -\144\145\040\103\145\162\164\151\146\151\143\141\164\151\157\156 -\040\105\154\145\143\164\162\157\156\151\161\165\145\061\031\060 -\027\006\003\125\004\003\014\020\124\165\156\124\162\165\163\164 -\040\122\157\157\164\040\103\101\060\202\002\042\060\015\006\011 +\060\202\005\107\060\202\003\057\240\003\002\001\002\002\021\000 +\216\017\371\113\220\161\150\145\063\124\364\324\104\071\267\340 +\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 +\075\061\013\060\011\006\003\125\004\006\023\002\125\123\061\022 +\060\020\006\003\125\004\012\023\011\103\145\162\164\141\151\156 +\154\171\061\032\060\030\006\003\125\004\003\023\021\103\145\162 +\164\141\151\156\154\171\040\122\157\157\164\040\122\061\060\036 +\027\015\062\061\060\064\060\061\060\060\060\060\060\060\132\027 +\015\064\066\060\064\060\061\060\060\060\060\060\060\132\060\075 +\061\013\060\011\006\003\125\004\006\023\002\125\123\061\022\060 +\020\006\003\125\004\012\023\011\103\145\162\164\141\151\156\154 +\171\061\032\060\030\006\003\125\004\003\023\021\103\145\162\164 +\141\151\156\154\171\040\122\157\157\164\040\122\061\060\202\002 +\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000 +\003\202\002\017\000\060\202\002\012\002\202\002\001\000\320\066 +\324\037\352\335\253\344\321\266\346\373\042\300\335\023\015\152 +\173\042\023\034\227\074\150\143\146\062\234\003\265\215\244\201 +\203\332\170\060\021\317\334\262\053\276\222\277\216\344\304\023 +\276\244\150\114\332\002\150\026\164\276\262\335\004\344\153\052 +\335\067\037\140\054\333\365\367\241\174\225\267\014\160\206\056 +\361\072\357\122\367\314\323\233\371\213\276\016\337\061\267\235 +\150\134\222\246\365\345\363\012\064\265\377\173\242\344\207\241 +\306\257\027\000\357\003\221\355\251\034\116\161\075\322\213\154 +\211\364\170\206\346\152\111\240\316\265\322\260\253\233\366\364 +\324\056\343\162\371\066\306\353\025\267\045\214\072\374\045\015 +\263\042\163\041\164\310\112\226\141\222\365\057\013\030\245\364 +\255\342\356\101\275\001\171\372\226\214\215\027\002\060\264\371 +\257\170\032\214\264\066\020\020\007\005\160\320\364\061\220\212 +\121\305\206\046\171\262\021\210\136\305\360\012\124\315\111\246 +\277\002\234\322\104\247\355\343\170\357\106\136\155\161\321\171 +\160\034\106\137\121\351\311\067\334\137\176\151\173\101\337\064 +\105\340\073\204\364\241\212\012\066\236\067\314\142\122\341\211 +\015\050\371\172\043\261\015\075\075\232\375\235\201\357\054\220 +\300\173\104\116\273\111\340\016\112\126\222\274\313\265\335\171 +\027\211\221\336\141\211\164\222\250\343\062\205\276\116\205\244 +\113\131\313\053\305\170\216\161\124\320\002\067\231\214\345\111 +\352\340\124\162\244\021\006\057\013\214\301\133\276\265\241\260 +\123\156\234\270\140\221\037\131\153\371\055\364\224\012\227\265 +\354\305\166\003\124\033\145\122\272\114\222\126\121\065\240\100 +\330\051\333\256\122\166\073\055\060\100\233\212\320\102\126\264 +\267\210\001\244\207\073\123\226\315\243\026\217\363\146\252\027 +\261\307\140\340\301\103\005\014\356\233\133\140\157\006\134\207 +\133\047\371\100\021\236\234\063\301\267\345\065\127\005\177\047 +\316\027\040\214\034\374\361\373\332\061\051\111\355\365\013\204 +\247\117\301\366\116\302\050\234\372\356\340\257\007\373\063\021 +\172\041\117\013\041\020\266\100\072\253\042\072\004\234\213\233 +\204\206\162\232\322\247\245\304\264\165\221\251\053\043\002\003 +\001\000\001\243\102\060\100\060\016\006\003\125\035\017\001\001 +\377\004\004\003\002\001\006\060\017\006\003\125\035\023\001\001 +\377\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004 +\026\004\024\340\252\077\045\215\237\104\134\301\072\350\056\256 +\167\114\204\076\147\014\364\060\015\006\011\052\206\110\206\367 +\015\001\001\013\005\000\003\202\002\001\000\271\127\257\270\022 +\332\127\203\217\150\013\063\035\003\123\125\364\225\160\344\053 +\075\260\071\353\372\211\142\375\367\326\030\004\057\041\064\335 +\361\150\360\325\226\132\336\302\200\243\301\215\306\152\367\131 +\167\256\025\144\317\133\171\005\167\146\352\214\323\153\015\335 +\361\131\054\301\063\245\060\200\025\105\007\105\032\061\042\266 +\222\000\253\231\115\072\217\167\257\251\042\312\057\143\312\025 +\326\307\306\360\075\154\374\034\015\230\020\141\236\021\242\042 +\327\012\362\221\172\153\071\016\057\060\303\066\111\237\340\351 +\017\002\104\120\067\224\125\175\352\237\366\073\272\224\245\114 +\351\274\076\121\264\350\312\222\066\124\155\134\045\050\332\335 +\255\024\375\323\356\342\042\005\353\320\362\267\150\022\327\132 +\212\101\032\306\222\245\132\073\143\105\117\277\341\072\167\042 +\057\134\277\106\371\132\003\205\023\102\137\312\336\123\327\142 +\265\246\065\004\302\107\377\231\375\204\337\134\316\351\136\200 +\050\101\362\175\347\036\220\330\117\166\076\202\074\015\374\245 +\003\372\173\032\331\105\036\140\332\304\216\371\374\053\311\173 +\225\305\052\377\252\211\337\202\061\017\162\377\014\047\327\012 +\036\126\000\120\036\014\220\301\226\265\330\024\205\273\247\015 +\026\301\370\007\044\033\272\205\241\032\005\011\200\272\225\143 +\311\072\354\045\237\177\235\272\244\107\025\233\104\160\361\152 +\113\326\070\136\103\363\030\176\120\156\351\132\050\346\145\346 +\167\033\072\375\035\276\003\046\243\333\324\341\273\176\226\047 +\053\035\356\244\373\332\045\124\023\003\336\071\306\303\037\115 +\220\354\217\033\112\322\034\355\205\225\070\120\171\106\326\301 +\220\120\061\251\134\232\156\035\365\063\126\213\247\231\322\362 +\310\054\063\223\222\060\307\116\214\145\063\020\144\027\375\044 +\027\226\321\215\302\072\152\053\353\023\213\104\362\041\363\112 +\032\267\167\137\327\355\210\244\162\345\071\037\225\235\276\147 +\301\160\021\075\273\364\370\111\267\343\046\227\072\237\322\137 +\174\373\300\231\174\071\051\340\173\035\277\015\247\217\322\051 +\064\156\044\025\313\336\220\136\277\032\304\146\352\302\346\272 +\071\137\212\231\251\101\131\007\260\054\257 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "Certainly Root R1" +# Issuer: CN=Certainly Root R1,O=Certainly,C=US +# Serial Number:00:8e:0f:f9:4b:90:71:68:65:33:54:f4:d4:44:39:b7:e0 +# Subject: CN=Certainly Root R1,O=Certainly,C=US +# Not Valid Before: Thu Apr 01 00:00:00 2021 +# Not Valid After : Sun Apr 01 00:00:00 2046 +# Fingerprint (SHA-256): 77:B8:2C:D8:64:4C:43:05:F7:AC:C5:CB:15:6B:45:67:50:04:03:3D:51:C6:0C:62:02:A8:E0:C3:34:67:D3:A0 +# Fingerprint (SHA1): A0:50:EE:0F:28:71:F4:27:B2:12:6D:6F:50:96:25:BA:CC:86:42:AF +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Certainly Root R1" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\240\120\356\017\050\161\364\047\262\022\155\157\120\226\045\272 +\314\206\102\257 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\007\160\324\076\202\207\240\372\063\066\023\364\372\063\347\022 +END +CKA_ISSUER MULTILINE_OCTAL +\060\075\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\022\060\020\006\003\125\004\012\023\011\103\145\162\164\141\151 +\156\154\171\061\032\060\030\006\003\125\004\003\023\021\103\145 +\162\164\141\151\156\154\171\040\122\157\157\164\040\122\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\021\000\216\017\371\113\220\161\150\145\063\124\364\324\104 +\071\267\340 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "Certainly Root E1" +# +# Issuer: CN=Certainly Root E1,O=Certainly,C=US +# Serial Number:06:25:33:b1:47:03:33:27:5c:f9:8d:9a:b9:bf:cc:f8 +# Subject: CN=Certainly Root E1,O=Certainly,C=US +# Not Valid Before: Thu Apr 01 00:00:00 2021 +# Not Valid After : Sun Apr 01 00:00:00 2046 +# Fingerprint (SHA-256): B4:58:5F:22:E4:AC:75:6A:4E:86:12:A1:36:1C:5D:9D:03:1A:93:FD:84:FE:BB:77:8F:A3:06:8B:0F:C4:2D:C2 +# Fingerprint (SHA1): F9:E1:6D:DC:01:89:CF:D5:82:45:63:3E:C5:37:7D:C2:EB:93:6F:2B +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Certainly Root E1" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\075\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\022\060\020\006\003\125\004\012\023\011\103\145\162\164\141\151 +\156\154\171\061\032\060\030\006\003\125\004\003\023\021\103\145 +\162\164\141\151\156\154\171\040\122\157\157\164\040\105\061 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\075\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\022\060\020\006\003\125\004\012\023\011\103\145\162\164\141\151 +\156\154\171\061\032\060\030\006\003\125\004\003\023\021\103\145 +\162\164\141\151\156\154\171\040\122\157\157\164\040\105\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\006\045\063\261\107\003\063\047\134\371\215\232\271\277 +\314\370 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\001\367\060\202\001\175\240\003\002\001\002\002\020\006 +\045\063\261\107\003\063\047\134\371\215\232\271\277\314\370\060 +\012\006\010\052\206\110\316\075\004\003\003\060\075\061\013\060 +\011\006\003\125\004\006\023\002\125\123\061\022\060\020\006\003 +\125\004\012\023\011\103\145\162\164\141\151\156\154\171\061\032 +\060\030\006\003\125\004\003\023\021\103\145\162\164\141\151\156 +\154\171\040\122\157\157\164\040\105\061\060\036\027\015\062\061 +\060\064\060\061\060\060\060\060\060\060\132\027\015\064\066\060 +\064\060\061\060\060\060\060\060\060\132\060\075\061\013\060\011 +\006\003\125\004\006\023\002\125\123\061\022\060\020\006\003\125 +\004\012\023\011\103\145\162\164\141\151\156\154\171\061\032\060 +\030\006\003\125\004\003\023\021\103\145\162\164\141\151\156\154 +\171\040\122\157\157\164\040\105\061\060\166\060\020\006\007\052 +\206\110\316\075\002\001\006\005\053\201\004\000\042\003\142\000 +\004\336\157\370\177\034\337\355\371\107\207\206\261\244\300\212 +\370\202\227\200\352\217\310\112\136\052\175\210\150\247\001\142 +\024\221\044\172\134\236\243\027\175\212\206\041\064\030\120\033 +\020\336\320\067\113\046\307\031\140\200\351\064\275\140\031\066 +\100\326\051\207\011\074\221\172\366\274\023\043\335\131\116\004 +\136\317\310\002\034\030\123\301\061\330\332\040\351\104\215\344 +\166\243\102\060\100\060\016\006\003\125\035\017\001\001\377\004 +\004\003\002\001\006\060\017\006\003\125\035\023\001\001\377\004 +\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026\004 +\024\363\050\030\313\144\165\356\051\052\353\355\256\043\130\070 +\205\353\310\042\007\060\012\006\010\052\206\110\316\075\004\003 +\003\003\150\000\060\145\002\061\000\261\216\132\040\303\262\031 +\142\115\336\260\117\337\156\322\160\212\361\237\176\152\214\346 +\272\336\203\151\312\151\263\251\005\265\226\222\027\207\302\322 +\352\320\173\316\330\101\133\174\256\002\060\106\336\352\313\135 +\232\354\062\302\145\026\260\114\060\134\060\363\332\116\163\206 +\006\330\316\211\004\110\067\067\370\335\063\121\235\160\257\173 +\125\330\001\056\175\005\144\016\206\270\221 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "Certainly Root E1" +# Issuer: CN=Certainly Root E1,O=Certainly,C=US +# Serial Number:06:25:33:b1:47:03:33:27:5c:f9:8d:9a:b9:bf:cc:f8 +# Subject: CN=Certainly Root E1,O=Certainly,C=US +# Not Valid Before: Thu Apr 01 00:00:00 2021 +# Not Valid After : Sun Apr 01 00:00:00 2046 +# Fingerprint (SHA-256): B4:58:5F:22:E4:AC:75:6A:4E:86:12:A1:36:1C:5D:9D:03:1A:93:FD:84:FE:BB:77:8F:A3:06:8B:0F:C4:2D:C2 +# Fingerprint (SHA1): F9:E1:6D:DC:01:89:CF:D5:82:45:63:3E:C5:37:7D:C2:EB:93:6F:2B +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "Certainly Root E1" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\371\341\155\334\001\211\317\325\202\105\143\076\305\067\175\302 +\353\223\157\053 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\012\236\312\315\076\122\120\306\066\363\113\243\355\247\123\351 +END +CKA_ISSUER MULTILINE_OCTAL +\060\075\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\022\060\020\006\003\125\004\012\023\011\103\145\162\164\141\151 +\156\154\171\061\032\060\030\006\003\125\004\003\023\021\103\145 +\162\164\141\151\156\154\171\040\122\157\157\164\040\105\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\006\045\063\261\107\003\063\047\134\371\215\232\271\277 +\314\370 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "E-Tugra Global Root CA RSA v3" +# +# Issuer: CN=E-Tugra Global Root CA RSA v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR +# Serial Number:0d:4d:c5:cd:16:22:95:96:08:7e:b8:0b:7f:15:06:34:fb:79:10:34 +# Subject: CN=E-Tugra Global Root CA RSA v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR +# Not Valid Before: Wed Mar 18 09:07:17 2020 +# Not Valid After : Sun Mar 12 09:07:17 2045 +# Fingerprint (SHA-256): EF:66:B0:B1:0A:3C:DB:9F:2E:36:48:C7:6B:D2:AF:18:EA:D2:BF:E6:F1:17:65:5E:28:C4:06:0D:A1:A3:F4:C2 +# Fingerprint (SHA1): E9:A8:5D:22:14:52:1C:5B:AA:0A:B4:BE:24:6A:23:8A:C9:BA:E2:A9 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "E-Tugra Global Root CA RSA v3" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\201\200\061\013\060\011\006\003\125\004\006\023\002\124\122 +\061\017\060\015\006\003\125\004\007\023\006\101\156\153\141\162 +\141\061\031\060\027\006\003\125\004\012\023\020\105\055\124\165 +\147\162\141\040\105\102\107\040\101\056\123\056\061\035\060\033 +\006\003\125\004\013\023\024\105\055\124\165\147\162\141\040\124 +\162\165\163\164\040\103\145\156\164\145\162\061\046\060\044\006 +\003\125\004\003\023\035\105\055\124\165\147\162\141\040\107\154 +\157\142\141\154\040\122\157\157\164\040\103\101\040\122\123\101 +\040\166\063 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\201\200\061\013\060\011\006\003\125\004\006\023\002\124\122 +\061\017\060\015\006\003\125\004\007\023\006\101\156\153\141\162 +\141\061\031\060\027\006\003\125\004\012\023\020\105\055\124\165 +\147\162\141\040\105\102\107\040\101\056\123\056\061\035\060\033 +\006\003\125\004\013\023\024\105\055\124\165\147\162\141\040\124 +\162\165\163\164\040\103\145\156\164\145\162\061\046\060\044\006 +\003\125\004\003\023\035\105\055\124\165\147\162\141\040\107\154 +\157\142\141\154\040\122\157\157\164\040\103\101\040\122\123\101 +\040\166\063 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\024\015\115\305\315\026\042\225\226\010\176\270\013\177\025 +\006\064\373\171\020\064 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\363\060\202\003\333\240\003\002\001\002\002\024\015 +\115\305\315\026\042\225\226\010\176\270\013\177\025\006\064\373 +\171\020\064\060\015\006\011\052\206\110\206\367\015\001\001\013 +\005\000\060\201\200\061\013\060\011\006\003\125\004\006\023\002 +\124\122\061\017\060\015\006\003\125\004\007\023\006\101\156\153 +\141\162\141\061\031\060\027\006\003\125\004\012\023\020\105\055 +\124\165\147\162\141\040\105\102\107\040\101\056\123\056\061\035 +\060\033\006\003\125\004\013\023\024\105\055\124\165\147\162\141 +\040\124\162\165\163\164\040\103\145\156\164\145\162\061\046\060 +\044\006\003\125\004\003\023\035\105\055\124\165\147\162\141\040 +\107\154\157\142\141\154\040\122\157\157\164\040\103\101\040\122 +\123\101\040\166\063\060\036\027\015\062\060\060\063\061\070\060 +\071\060\067\061\067\132\027\015\064\065\060\063\061\062\060\071 +\060\067\061\067\132\060\201\200\061\013\060\011\006\003\125\004 +\006\023\002\124\122\061\017\060\015\006\003\125\004\007\023\006 +\101\156\153\141\162\141\061\031\060\027\006\003\125\004\012\023 +\020\105\055\124\165\147\162\141\040\105\102\107\040\101\056\123 +\056\061\035\060\033\006\003\125\004\013\023\024\105\055\124\165 +\147\162\141\040\124\162\165\163\164\040\103\145\156\164\145\162 +\061\046\060\044\006\003\125\004\003\023\035\105\055\124\165\147 +\162\141\040\107\154\157\142\141\154\040\122\157\157\164\040\103 +\101\040\122\123\101\040\166\063\060\202\002\042\060\015\006\011 \052\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000 -\060\202\002\012\002\202\002\001\000\303\315\323\374\275\004\123 -\335\014\040\072\325\210\056\005\113\101\365\203\202\176\367\131 -\237\236\236\143\350\163\332\366\006\251\117\037\264\371\013\037 -\071\214\232\040\320\176\006\324\354\064\331\206\274\165\133\207 -\210\360\322\331\324\243\012\262\154\033\353\111\054\076\254\135 -\330\224\003\240\354\064\345\060\304\065\175\373\046\115\033\156 -\060\124\330\365\200\105\234\071\255\234\311\045\004\115\232\220 -\076\116\100\156\212\153\315\051\147\306\314\055\340\164\350\005 -\127\012\110\120\372\172\103\332\176\354\133\232\016\142\166\376 -\352\235\035\205\162\354\021\273\065\350\037\047\277\301\241\307 -\273\110\026\335\126\327\314\116\240\341\271\254\333\325\203\031 -\032\205\321\224\227\327\312\243\145\013\363\070\371\002\256\335 -\366\147\317\311\077\365\212\054\107\032\231\157\005\015\375\320 -\035\202\061\374\051\314\000\130\227\221\114\200\000\034\063\205 -\226\057\313\101\302\213\020\204\303\011\044\211\037\265\017\331 -\331\167\107\030\222\224\140\134\307\231\003\074\376\367\225\247 -\175\120\241\200\302\251\203\255\130\226\125\041\333\206\131\324 -\257\306\274\335\201\156\007\333\140\142\376\354\020\156\332\150 -\001\364\203\033\251\076\242\133\043\327\144\306\337\334\242\175 -\330\113\272\202\322\121\370\146\277\006\106\344\171\052\046\066 -\171\217\037\116\231\035\262\217\014\016\034\377\311\135\300\375 -\220\020\246\261\067\363\315\072\044\156\264\205\220\277\200\271 -\014\214\325\233\326\310\361\126\077\032\200\211\172\251\342\033 -\062\121\054\076\362\337\173\366\135\172\051\031\216\345\310\275 -\066\161\213\135\114\302\035\077\255\130\242\317\075\160\115\246 -\120\230\045\334\043\371\270\130\101\010\161\277\117\270\204\240 -\217\000\124\025\374\221\155\130\247\226\073\353\113\226\047\315 -\153\242\241\206\254\015\174\124\346\146\114\146\137\220\276\041 -\232\002\106\055\344\203\302\200\271\317\113\076\350\177\074\001 -\354\217\136\315\177\322\050\102\001\225\212\342\227\075\020\041 -\175\366\235\034\305\064\241\354\054\016\012\122\054\022\125\160 -\044\075\313\302\024\065\103\135\047\116\276\300\275\252\174\226 -\347\374\236\141\255\104\323\000\227\002\003\001\000\001\243\143 -\060\141\060\035\006\003\125\035\016\004\026\004\024\006\232\233 -\037\123\175\361\365\244\310\323\206\076\241\163\131\264\367\104 -\041\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001 -\001\377\060\037\006\003\125\035\043\004\030\060\026\200\024\006 -\232\233\037\123\175\361\365\244\310\323\206\076\241\163\131\264 -\367\104\041\060\016\006\003\125\035\017\001\001\377\004\004\003 +\060\202\002\012\002\202\002\001\000\242\146\360\211\267\162\173 +\356\011\311\143\322\323\103\335\136\303\246\204\070\112\361\215 +\201\273\024\275\107\350\100\027\363\075\303\170\105\162\246\056 +\220\336\232\072\324\040\161\312\274\237\035\113\227\012\307\061 +\272\076\327\376\045\251\052\216\066\364\321\057\307\267\251\135 +\063\334\060\160\370\100\154\113\262\246\061\141\321\064\074\075 +\061\172\307\257\304\247\247\204\341\227\244\350\113\366\027\174 +\356\074\007\355\342\212\127\334\266\373\370\103\045\120\352\047 +\201\250\206\274\217\122\112\226\072\140\032\226\273\375\163\364 +\205\375\203\375\177\204\155\064\154\177\152\267\113\001\003\277 +\255\151\267\327\062\331\365\127\152\351\206\202\076\245\146\061 +\263\026\075\302\363\046\140\062\323\122\036\260\154\244\067\076 +\364\365\257\353\341\337\200\006\317\052\101\347\146\011\341\113 +\227\347\167\275\041\155\051\266\147\303\055\176\355\326\171\145 +\321\317\072\266\321\261\136\126\141\120\172\132\316\116\120\061 +\200\003\230\107\347\344\030\174\104\132\306\244\263\073\306\306 +\303\072\360\154\303\213\310\244\221\005\363\365\331\266\252\006 +\241\267\253\344\261\352\041\024\134\203\244\374\377\266\120\323 +\214\022\046\231\166\160\351\300\017\246\164\374\273\320\033\170 +\316\162\222\342\050\234\274\346\351\011\330\072\323\211\346\276 +\056\167\337\001\012\157\226\366\345\215\074\115\122\166\032\126 +\341\163\176\027\254\075\255\154\243\122\022\030\160\346\200\116 +\063\362\176\046\062\254\005\215\070\244\346\166\074\237\020\151 +\016\155\235\322\301\171\040\153\133\317\063\215\321\224\166\065 +\347\135\125\307\267\254\050\253\106\314\347\073\041\265\012\012 +\344\112\131\334\201\065\113\104\225\022\012\147\245\241\377\133 +\000\007\322\300\314\371\077\374\237\063\362\000\370\214\154\207 +\235\006\055\361\357\343\346\006\372\305\146\023\133\374\120\007 +\236\161\206\262\332\157\164\060\317\223\123\350\334\042\326\336 +\040\037\141\215\243\056\243\170\062\220\154\334\254\062\265\005 +\344\365\074\063\015\326\340\207\167\027\114\235\260\330\011\250 +\015\127\367\104\205\360\310\004\276\134\135\132\343\027\216\124 +\143\151\177\111\164\144\005\214\243\002\003\001\000\001\243\143 +\060\141\060\017\006\003\125\035\023\001\001\377\004\005\060\003 +\001\001\377\060\037\006\003\125\035\043\004\030\060\026\200\024 +\262\264\256\346\055\367\046\325\252\165\055\166\113\300\033\123 +\041\320\110\357\060\035\006\003\125\035\016\004\026\004\024\262 +\264\256\346\055\367\046\325\252\165\055\166\113\300\033\123\041 +\320\110\357\060\016\006\003\125\035\017\001\001\377\004\004\003 \002\001\006\060\015\006\011\052\206\110\206\367\015\001\001\013 -\005\000\003\202\002\001\000\252\005\156\266\335\025\311\277\263 -\306\040\366\006\107\260\206\223\045\323\215\271\310\000\077\227 -\365\122\047\210\161\311\164\375\353\312\144\333\133\357\036\135 -\272\277\321\353\356\134\151\272\026\310\363\271\217\323\066\056 -\100\111\007\015\131\336\213\020\260\111\005\342\377\221\077\113 -\267\335\002\216\370\201\050\134\314\334\155\257\137\024\234\175 -\130\170\015\366\200\011\271\351\016\227\051\031\270\267\353\370 -\026\313\125\022\344\306\175\273\304\354\370\265\034\116\076\147 -\277\305\137\033\155\155\107\050\252\004\130\141\326\166\277\042 -\177\320\007\152\247\144\123\360\227\215\235\200\077\273\301\007 -\333\145\257\346\233\062\232\303\124\223\304\034\010\303\104\373 -\173\143\021\103\321\152\032\141\152\171\155\220\117\051\216\107 -\005\301\022\151\151\326\306\066\061\341\374\372\200\272\134\117 -\304\353\267\062\254\370\165\141\027\327\020\031\271\361\322\011 -\357\172\102\235\133\132\013\324\306\225\116\052\316\377\007\327 -\117\176\030\006\210\361\031\265\331\230\273\256\161\304\034\347 -\164\131\130\357\014\211\317\213\037\165\223\032\004\024\222\110 -\120\251\353\127\051\000\026\343\066\034\310\370\277\360\063\325 -\101\017\304\314\074\335\351\063\103\001\221\020\053\036\321\271 -\135\315\062\031\213\217\214\040\167\327\042\304\102\334\204\026 -\233\045\155\350\264\125\161\177\260\174\263\323\161\111\271\317 -\122\244\004\077\334\075\240\273\257\063\236\012\060\140\216\333 -\235\135\224\250\275\140\347\142\200\166\201\203\014\214\314\060 -\106\111\342\014\322\250\257\353\141\161\357\347\042\142\251\367 -\134\144\154\237\026\214\147\066\047\105\365\011\173\277\366\020 -\012\361\260\215\124\103\214\004\272\243\077\357\342\065\307\371 -\164\340\157\064\101\320\277\163\145\127\040\371\233\147\172\146 -\150\044\116\200\145\275\020\231\006\131\362\145\257\270\306\107 -\273\375\220\170\213\101\163\056\257\125\037\334\073\222\162\156 -\204\323\320\141\114\015\314\166\127\342\055\205\042\025\066\015 -\353\001\235\353\330\353\304\204\231\373\300\014\314\062\350\343 -\167\332\203\104\213\236\125\050\300\213\130\323\220\076\116\033 -\000\361\025\255\203\053\232 +\005\000\003\202\002\001\000\211\250\162\177\214\353\316\056\030 +\304\020\200\055\020\014\377\373\024\315\004\340\024\074\116\232 +\373\237\051\277\042\236\127\271\202\163\022\143\046\265\314\220 +\351\322\052\051\356\234\055\314\054\231\276\105\047\344\261\161 +\355\344\070\225\061\101\362\175\172\143\170\337\312\066\026\057 +\202\210\237\274\021\107\117\166\115\310\055\216\353\337\055\174 +\116\073\332\256\366\343\332\135\024\246\256\350\205\104\235\006 +\156\216\373\357\172\112\152\055\053\050\030\376\277\220\054\165 +\026\237\017\352\226\175\005\356\233\023\245\104\154\370\003\320 +\335\043\341\375\003\022\022\010\364\030\064\263\340\067\013\167 +\021\001\110\277\141\264\265\370\031\331\313\115\352\243\214\357 +\375\360\006\265\155\222\364\112\141\120\204\355\354\111\323\344 +\276\150\346\056\343\061\013\124\013\032\222\326\202\330\266\242 +\145\074\146\004\371\125\332\154\373\333\265\024\146\115\224\203 +\073\315\036\246\053\262\376\167\100\206\253\347\337\012\311\375 +\366\335\207\126\030\330\260\054\125\140\226\372\010\176\122\220 +\365\113\246\056\207\174\313\040\333\006\076\240\135\003\167\175 +\242\074\023\033\051\242\023\125\240\075\024\042\257\157\270\320 +\232\033\162\335\005\001\215\206\140\277\244\147\356\265\245\015 +\321\177\346\032\053\142\146\303\007\272\347\240\110\034\070\303 +\351\105\373\247\177\374\355\002\150\032\312\167\022\167\246\000 +\125\050\024\354\326\307\022\242\033\145\102\351\221\350\313\076 +\207\211\124\135\331\257\235\227\234\151\347\012\377\017\132\170 +\213\143\052\114\175\107\224\077\336\113\351\123\320\060\361\305 +\366\236\111\337\073\240\221\243\243\376\315\130\314\352\337\257 +\157\050\073\240\151\233\217\354\254\256\053\124\235\233\004\261 +\107\040\257\226\022\076\143\224\035\004\347\056\273\206\307\014 +\232\210\277\166\107\357\367\260\013\227\146\322\104\317\140\122 +\007\341\325\054\112\072\047\141\167\312\327\217\347\207\016\060 +\377\014\273\004\342\141\303\242\310\227\141\216\264\060\152\074 +\155\302\007\137\112\163\057\077\371\026\212\001\146\357\272\221 +\312\122\127\173\256\324\346\017\335\013\172\177\213\236\046\040 +\317\073\357\201\161\203\131 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "E-Tugra Global Root CA RSA v3" +# Issuer: CN=E-Tugra Global Root CA RSA v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR +# Serial Number:0d:4d:c5:cd:16:22:95:96:08:7e:b8:0b:7f:15:06:34:fb:79:10:34 +# Subject: CN=E-Tugra Global Root CA RSA v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR +# Not Valid Before: Wed Mar 18 09:07:17 2020 +# Not Valid After : Sun Mar 12 09:07:17 2045 +# Fingerprint (SHA-256): EF:66:B0:B1:0A:3C:DB:9F:2E:36:48:C7:6B:D2:AF:18:EA:D2:BF:E6:F1:17:65:5E:28:C4:06:0D:A1:A3:F4:C2 +# Fingerprint (SHA1): E9:A8:5D:22:14:52:1C:5B:AA:0A:B4:BE:24:6A:23:8A:C9:BA:E2:A9 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "E-Tugra Global Root CA RSA v3" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\351\250\135\042\024\122\034\133\252\012\264\276\044\152\043\212 +\311\272\342\251 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\042\276\020\366\302\370\003\210\163\137\063\051\107\050\107\244 +END +CKA_ISSUER MULTILINE_OCTAL +\060\201\200\061\013\060\011\006\003\125\004\006\023\002\124\122 +\061\017\060\015\006\003\125\004\007\023\006\101\156\153\141\162 +\141\061\031\060\027\006\003\125\004\012\023\020\105\055\124\165 +\147\162\141\040\105\102\107\040\101\056\123\056\061\035\060\033 +\006\003\125\004\013\023\024\105\055\124\165\147\162\141\040\124 +\162\165\163\164\040\103\145\156\164\145\162\061\046\060\044\006 +\003\125\004\003\023\035\105\055\124\165\147\162\141\040\107\154 +\157\142\141\154\040\122\157\157\164\040\103\101\040\122\123\101 +\040\166\063 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\024\015\115\305\315\026\042\225\226\010\176\270\013\177\025 +\006\064\373\171\020\064 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "E-Tugra Global Root CA ECC v3" +# +# Issuer: CN=E-Tugra Global Root CA ECC v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR +# Serial Number:26:46:19:77:31:e1:4f:6f:28:36:de:39:51:86:e6:d4:97:88:22:c1 +# Subject: CN=E-Tugra Global Root CA ECC v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR +# Not Valid Before: Wed Mar 18 09:46:58 2020 +# Not Valid After : Sun Mar 12 09:46:58 2045 +# Fingerprint (SHA-256): 87:3F:46:85:FA:7F:56:36:25:25:2E:6D:36:BC:D7:F1:6F:C2:49:51:F2:64:E4:7E:1B:95:4F:49:08:CD:CA:13 +# Fingerprint (SHA1): 8A:2F:AF:57:53:B1:B0:E6:A1:04:EC:5B:6A:69:71:6D:F6:1C:E2:84 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "E-Tugra Global Root CA ECC v3" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\201\200\061\013\060\011\006\003\125\004\006\023\002\124\122 +\061\017\060\015\006\003\125\004\007\023\006\101\156\153\141\162 +\141\061\031\060\027\006\003\125\004\012\023\020\105\055\124\165 +\147\162\141\040\105\102\107\040\101\056\123\056\061\035\060\033 +\006\003\125\004\013\023\024\105\055\124\165\147\162\141\040\124 +\162\165\163\164\040\103\145\156\164\145\162\061\046\060\044\006 +\003\125\004\003\023\035\105\055\124\165\147\162\141\040\107\154 +\157\142\141\154\040\122\157\157\164\040\103\101\040\105\103\103 +\040\166\063 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\201\200\061\013\060\011\006\003\125\004\006\023\002\124\122 +\061\017\060\015\006\003\125\004\007\023\006\101\156\153\141\162 +\141\061\031\060\027\006\003\125\004\012\023\020\105\055\124\165 +\147\162\141\040\105\102\107\040\101\056\123\056\061\035\060\033 +\006\003\125\004\013\023\024\105\055\124\165\147\162\141\040\124 +\162\165\163\164\040\103\145\156\164\145\162\061\046\060\044\006 +\003\125\004\003\023\035\105\055\124\165\147\162\141\040\107\154 +\157\142\141\154\040\122\157\157\164\040\103\101\040\105\103\103 +\040\166\063 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\024\046\106\031\167\061\341\117\157\050\066\336\071\121\206 +\346\324\227\210\042\301 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\245\060\202\002\052\240\003\002\001\002\002\024\046 +\106\031\167\061\341\117\157\050\066\336\071\121\206\346\324\227 +\210\042\301\060\012\006\010\052\206\110\316\075\004\003\003\060 +\201\200\061\013\060\011\006\003\125\004\006\023\002\124\122\061 +\017\060\015\006\003\125\004\007\023\006\101\156\153\141\162\141 +\061\031\060\027\006\003\125\004\012\023\020\105\055\124\165\147 +\162\141\040\105\102\107\040\101\056\123\056\061\035\060\033\006 +\003\125\004\013\023\024\105\055\124\165\147\162\141\040\124\162 +\165\163\164\040\103\145\156\164\145\162\061\046\060\044\006\003 +\125\004\003\023\035\105\055\124\165\147\162\141\040\107\154\157 +\142\141\154\040\122\157\157\164\040\103\101\040\105\103\103\040 +\166\063\060\036\027\015\062\060\060\063\061\070\060\071\064\066 +\065\070\132\027\015\064\065\060\063\061\062\060\071\064\066\065 +\070\132\060\201\200\061\013\060\011\006\003\125\004\006\023\002 +\124\122\061\017\060\015\006\003\125\004\007\023\006\101\156\153 +\141\162\141\061\031\060\027\006\003\125\004\012\023\020\105\055 +\124\165\147\162\141\040\105\102\107\040\101\056\123\056\061\035 +\060\033\006\003\125\004\013\023\024\105\055\124\165\147\162\141 +\040\124\162\165\163\164\040\103\145\156\164\145\162\061\046\060 +\044\006\003\125\004\003\023\035\105\055\124\165\147\162\141\040 +\107\154\157\142\141\154\040\122\157\157\164\040\103\101\040\105 +\103\103\040\166\063\060\166\060\020\006\007\052\206\110\316\075 +\002\001\006\005\053\201\004\000\042\003\142\000\004\216\230\051 +\277\307\020\036\047\333\253\003\314\050\054\330\136\110\031\020 +\051\314\313\131\201\314\214\270\222\027\211\203\052\222\366\303 +\244\035\114\142\325\237\326\240\106\334\034\274\166\301\343\107 +\320\133\023\332\347\245\263\146\110\347\041\232\112\117\206\012 +\175\154\352\115\062\200\012\262\172\011\233\151\113\230\201\342 +\056\354\002\160\226\037\375\365\106\316\312\334\202\243\143\060 +\141\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001 +\001\377\060\037\006\003\125\035\043\004\030\060\026\200\024\377 +\202\061\162\076\371\304\146\154\255\070\236\321\260\121\210\245 +\220\314\365\060\035\006\003\125\035\016\004\026\004\024\377\202 +\061\162\076\371\304\146\154\255\070\236\321\260\121\210\245\220 +\314\365\060\016\006\003\125\035\017\001\001\377\004\004\003\002 +\001\006\060\012\006\010\052\206\110\316\075\004\003\003\003\151 +\000\060\146\002\061\000\346\005\130\151\141\345\055\312\015\313 +\361\031\010\275\326\375\121\222\032\176\143\124\004\220\221\232 +\065\221\071\231\372\007\251\146\223\272\310\150\324\212\077\372 +\355\156\026\002\047\267\002\061\000\335\132\027\053\166\035\145 +\102\226\246\254\135\212\171\126\330\212\033\337\232\336\137\307 +\120\217\261\133\161\014\046\337\152\100\000\354\063\221\041\161 +\276\150\344\043\244\331\255\241\067 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "TunTrust Root CA" -# Issuer: CN=TunTrust Root CA,O=Agence Nationale de Certification Electronique,C=TN -# Serial Number:13:02:d5:e2:40:4c:92:46:86:16:67:5d:b4:bb:bb:b2:6b:3e:fc:13 -# Subject: CN=TunTrust Root CA,O=Agence Nationale de Certification Electronique,C=TN -# Not Valid Before: Fri Apr 26 08:57:56 2019 -# Not Valid After : Tue Apr 26 08:57:56 2044 -# Fingerprint (SHA-256): 2E:44:10:2A:B5:8C:B8:54:19:45:1C:8E:19:D9:AC:F3:66:2C:AF:BC:61:4B:6A:53:96:0A:30:F7:D0:E2:EB:41 -# Fingerprint (SHA1): CF:E9:70:84:0F:E0:73:0F:9D:F6:0C:7F:2C:4B:EE:20:46:34:9C:BB +# Trust for "E-Tugra Global Root CA ECC v3" +# Issuer: CN=E-Tugra Global Root CA ECC v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR +# Serial Number:26:46:19:77:31:e1:4f:6f:28:36:de:39:51:86:e6:d4:97:88:22:c1 +# Subject: CN=E-Tugra Global Root CA ECC v3,OU=E-Tugra Trust Center,O=E-Tugra EBG A.S.,L=Ankara,C=TR +# Not Valid Before: Wed Mar 18 09:46:58 2020 +# Not Valid After : Sun Mar 12 09:46:58 2045 +# Fingerprint (SHA-256): 87:3F:46:85:FA:7F:56:36:25:25:2E:6D:36:BC:D7:F1:6F:C2:49:51:F2:64:E4:7E:1B:95:4F:49:08:CD:CA:13 +# Fingerprint (SHA1): 8A:2F:AF:57:53:B1:B0:E6:A1:04:EC:5B:6A:69:71:6D:F6:1C:E2:84 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TunTrust Root CA" +CKA_LABEL UTF8 "E-Tugra Global Root CA ECC v3" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\317\351\160\204\017\340\163\017\235\366\014\177\054\113\356\040 -\106\064\234\273 +\212\057\257\127\123\261\260\346\241\004\354\133\152\151\161\155 +\366\034\342\204 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\205\023\271\220\133\066\134\266\136\270\132\370\340\061\127\264 +\106\274\201\273\361\265\036\367\113\226\274\024\342\347\047\144 END CKA_ISSUER MULTILINE_OCTAL -\060\141\061\013\060\011\006\003\125\004\006\023\002\124\116\061 -\067\060\065\006\003\125\004\012\014\056\101\147\145\156\143\145 -\040\116\141\164\151\157\156\141\154\145\040\144\145\040\103\145 -\162\164\151\146\151\143\141\164\151\157\156\040\105\154\145\143 -\164\162\157\156\151\161\165\145\061\031\060\027\006\003\125\004 -\003\014\020\124\165\156\124\162\165\163\164\040\122\157\157\164 -\040\103\101 +\060\201\200\061\013\060\011\006\003\125\004\006\023\002\124\122 +\061\017\060\015\006\003\125\004\007\023\006\101\156\153\141\162 +\141\061\031\060\027\006\003\125\004\012\023\020\105\055\124\165 +\147\162\141\040\105\102\107\040\101\056\123\056\061\035\060\033 +\006\003\125\004\013\023\024\105\055\124\165\147\162\141\040\124 +\162\165\163\164\040\103\145\156\164\145\162\061\046\060\044\006 +\003\125\004\003\023\035\105\055\124\165\147\162\141\040\107\154 +\157\142\141\154\040\122\157\157\164\040\103\101\040\105\103\103 +\040\166\063 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\023\002\325\342\100\114\222\106\206\026\147\135\264\273 -\273\262\153\076\374\023 +\002\024\046\106\031\167\061\341\117\157\050\066\336\071\121\206 +\346\324\227\210\042\301 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST @@ -22481,597 +24317,582 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "HARICA TLS RSA Root CA 2021" +# Certificate "DIGITALSIGN GLOBAL ROOT RSA CA" # -# Issuer: CN=HARICA TLS RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Serial Number:39:ca:93:1c:ef:43:f3:c6:8e:93:c7:f4:64:89:38:7e -# Subject: CN=HARICA TLS RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Not Valid Before: Fri Feb 19 10:55:38 2021 -# Not Valid After : Mon Feb 13 10:55:37 2045 -# Fingerprint (SHA-256): D9:5D:0E:8E:DA:79:52:5B:F9:BE:B1:1B:14:D2:10:0D:32:94:98:5F:0C:62:D9:FA:BD:9C:D9:99:EC:CB:7B:1D -# Fingerprint (SHA1): 02:2D:05:82:FA:88:CE:14:0C:06:79:DE:7F:14:10:E9:45:D7:A5:6D +# Issuer: CN=DIGITALSIGN GLOBAL ROOT RSA CA,O=DigitalSign Certificadora Digital,C=PT +# Serial Number:5d:59:c8:ca:ab:09:57:f5:e6:b5:da:29:94:04:6a:ff:c5:d4:95:87 +# Subject: CN=DIGITALSIGN GLOBAL ROOT RSA CA,O=DigitalSign Certificadora Digital,C=PT +# Not Valid Before: Thu Jan 21 10:50:34 2021 +# Not Valid After : Mon Jan 15 10:50:34 2046 +# Fingerprint (SHA-256): 82:BD:5D:85:1A:CF:7F:6E:1B:A7:BF:CB:C5:30:30:D0:E7:BC:3C:21:DF:77:2D:85:8C:AB:41:D1:99:BD:F5:95 +# Fingerprint (SHA1): B9:82:07:97:AE:52:A5:68:6F:46:07:DF:FD:03:72:3D:92:86:88:2D CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "HARICA TLS RSA Root CA 2021" +CKA_LABEL UTF8 "DIGITALSIGN GLOBAL ROOT RSA CA" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 -\003\014\033\110\101\122\111\103\101\040\124\114\123\040\122\123 -\101\040\122\157\157\164\040\103\101\040\062\060\062\061 +\060\142\061\013\060\011\006\003\125\004\006\023\002\120\124\061 +\052\060\050\006\003\125\004\012\014\041\104\151\147\151\164\141 +\154\123\151\147\156\040\103\145\162\164\151\146\151\143\141\144 +\157\162\141\040\104\151\147\151\164\141\154\061\047\060\045\006 +\003\125\004\003\014\036\104\111\107\111\124\101\114\123\111\107 +\116\040\107\114\117\102\101\114\040\122\117\117\124\040\122\123 +\101\040\103\101 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 -\003\014\033\110\101\122\111\103\101\040\124\114\123\040\122\123 -\101\040\122\157\157\164\040\103\101\040\062\060\062\061 +\060\142\061\013\060\011\006\003\125\004\006\023\002\120\124\061 +\052\060\050\006\003\125\004\012\014\041\104\151\147\151\164\141 +\154\123\151\147\156\040\103\145\162\164\151\146\151\143\141\144 +\157\162\141\040\104\151\147\151\164\141\154\061\047\060\045\006 +\003\125\004\003\014\036\104\111\107\111\124\101\114\123\111\107 +\116\040\107\114\117\102\101\114\040\122\117\117\124\040\122\123 +\101\040\103\101 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\071\312\223\034\357\103\363\306\216\223\307\364\144\211 -\070\176 +\002\024\135\131\310\312\253\011\127\365\346\265\332\051\224\004 +\152\377\305\324\225\207 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\244\060\202\003\214\240\003\002\001\002\002\020\071 -\312\223\034\357\103\363\306\216\223\307\364\144\211\070\176\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\154 -\061\013\060\011\006\003\125\004\006\023\002\107\122\061\067\060 -\065\006\003\125\004\012\014\056\110\145\154\154\145\156\151\143 -\040\101\143\141\144\145\155\151\143\040\141\156\144\040\122\145 -\163\145\141\162\143\150\040\111\156\163\164\151\164\165\164\151 -\157\156\163\040\103\101\061\044\060\042\006\003\125\004\003\014 -\033\110\101\122\111\103\101\040\124\114\123\040\122\123\101\040 -\122\157\157\164\040\103\101\040\062\060\062\061\060\036\027\015 -\062\061\060\062\061\071\061\060\065\065\063\070\132\027\015\064 -\065\060\062\061\063\061\060\065\065\063\067\132\060\154\061\013 -\060\011\006\003\125\004\006\023\002\107\122\061\067\060\065\006 -\003\125\004\012\014\056\110\145\154\154\145\156\151\143\040\101 -\143\141\144\145\155\151\143\040\141\156\144\040\122\145\163\145 -\141\162\143\150\040\111\156\163\164\151\164\165\164\151\157\156 -\163\040\103\101\061\044\060\042\006\003\125\004\003\014\033\110 -\101\122\111\103\101\040\124\114\123\040\122\123\101\040\122\157 -\157\164\040\103\101\040\062\060\062\061\060\202\002\042\060\015 +\060\202\005\265\060\202\003\235\240\003\002\001\002\002\024\135 +\131\310\312\253\011\127\365\346\265\332\051\224\004\152\377\305 +\324\225\207\060\015\006\011\052\206\110\206\367\015\001\001\015 +\005\000\060\142\061\013\060\011\006\003\125\004\006\023\002\120 +\124\061\052\060\050\006\003\125\004\012\014\041\104\151\147\151 +\164\141\154\123\151\147\156\040\103\145\162\164\151\146\151\143 +\141\144\157\162\141\040\104\151\147\151\164\141\154\061\047\060 +\045\006\003\125\004\003\014\036\104\111\107\111\124\101\114\123 +\111\107\116\040\107\114\117\102\101\114\040\122\117\117\124\040 +\122\123\101\040\103\101\060\036\027\015\062\061\060\061\062\061 +\061\060\065\060\063\064\132\027\015\064\066\060\061\061\065\061 +\060\065\060\063\064\132\060\142\061\013\060\011\006\003\125\004 +\006\023\002\120\124\061\052\060\050\006\003\125\004\012\014\041 +\104\151\147\151\164\141\154\123\151\147\156\040\103\145\162\164 +\151\146\151\143\141\144\157\162\141\040\104\151\147\151\164\141 +\154\061\047\060\045\006\003\125\004\003\014\036\104\111\107\111 +\124\101\114\123\111\107\116\040\107\114\117\102\101\114\040\122 +\117\117\124\040\122\123\101\040\103\101\060\202\002\042\060\015 \006\011\052\206\110\206\367\015\001\001\001\005\000\003\202\002 -\017\000\060\202\002\012\002\202\002\001\000\213\302\347\257\145 -\233\005\147\226\311\015\044\271\320\016\144\374\316\342\044\030 -\054\204\177\167\121\313\004\021\066\270\136\355\151\161\247\236 -\344\045\011\227\147\301\107\302\317\221\026\066\142\075\070\004 -\341\121\202\377\254\322\264\151\335\056\354\021\243\105\356\153 -\153\073\114\277\214\215\244\036\235\021\271\351\070\371\172\016 -\014\230\342\043\035\321\116\143\324\347\270\101\104\373\153\257 -\153\332\037\323\305\221\210\133\244\211\222\321\201\346\214\071 -\130\240\326\151\103\251\255\230\122\130\156\333\012\373\153\317 -\150\372\343\244\136\072\105\163\230\007\352\137\002\162\336\014 -\245\263\237\256\251\035\267\035\263\374\212\131\347\156\162\145 -\255\365\060\224\043\007\363\202\026\113\065\230\234\123\273\057 -\312\344\132\331\307\215\035\374\230\231\373\054\244\202\153\360 -\052\037\216\013\137\161\134\134\256\102\173\051\211\201\313\003 -\243\231\312\210\236\013\100\011\101\063\333\346\130\172\375\256 -\231\160\300\132\017\326\023\206\161\057\166\151\374\220\335\333 -\055\156\321\362\233\365\032\153\236\157\025\214\172\360\113\050 -\240\042\070\200\044\154\066\244\073\362\060\221\363\170\023\317 -\301\077\065\253\361\035\021\043\265\103\042\236\001\222\267\030 -\002\345\021\321\202\333\025\000\314\141\067\301\052\174\232\341 -\320\272\263\120\106\356\202\254\235\061\370\373\043\342\003\000 -\110\160\243\011\046\171\025\123\140\363\070\134\255\070\352\201 -\000\143\024\271\063\136\335\013\333\240\105\007\032\063\011\370 -\115\264\247\002\246\151\364\302\131\005\210\145\205\126\256\113 -\313\340\336\074\175\055\032\310\351\373\037\243\141\112\326\052 -\023\255\167\114\032\030\233\221\017\130\330\006\124\305\227\370 -\252\077\040\212\246\205\246\167\366\246\374\034\342\356\156\224 -\063\052\203\120\204\012\345\117\206\370\120\105\170\000\201\353 -\133\150\343\046\215\314\173\134\121\364\024\054\100\276\032\140 -\035\172\162\141\035\037\143\055\210\252\316\242\105\220\010\374 -\153\276\263\120\052\132\375\250\110\030\106\326\220\100\222\220 -\012\204\136\150\061\370\353\355\015\323\035\306\175\231\030\125 -\126\047\145\056\215\105\305\044\354\316\343\002\003\001\000\001 -\243\102\060\100\060\017\006\003\125\035\023\001\001\377\004\005 -\060\003\001\001\377\060\035\006\003\125\035\016\004\026\004\024 -\012\110\043\246\140\244\222\012\063\352\223\133\305\127\352\045 -\115\275\022\356\060\016\006\003\125\035\017\001\001\377\004\004 -\003\002\001\206\060\015\006\011\052\206\110\206\367\015\001\001 -\013\005\000\003\202\002\001\000\076\220\110\252\156\142\025\045 -\146\173\014\325\214\213\211\235\327\355\116\007\357\234\320\024 -\137\136\120\275\150\226\220\244\024\021\252\150\155\011\065\071 -\100\011\332\364\011\054\064\245\173\131\204\111\051\227\164\310 -\007\036\107\155\362\316\034\120\046\343\236\075\100\123\077\367 -\177\226\166\020\305\106\245\320\040\113\120\364\065\073\030\364 -\125\152\101\033\107\006\150\074\273\011\010\142\331\137\125\102 -\252\254\123\205\254\225\126\066\126\253\344\005\214\305\250\332 -\037\243\151\275\123\017\304\377\334\312\343\176\362\114\210\206 -\107\106\032\363\000\365\200\221\242\334\103\102\224\233\040\360 -\321\315\262\353\054\123\302\123\170\112\117\004\224\101\232\217 -\047\062\301\345\111\031\277\361\362\302\213\250\012\071\061\050 -\264\175\142\066\054\115\354\037\063\266\176\167\155\176\120\360 -\237\016\327\021\217\317\030\305\343\047\376\046\357\005\235\317 -\317\067\305\320\173\332\073\260\026\204\014\072\223\326\276\027 -\333\017\076\016\031\170\011\307\251\002\162\042\113\367\067\166 -\272\165\304\205\003\132\143\325\261\165\005\302\271\275\224\255 -\214\025\231\247\223\175\366\305\363\252\164\317\004\205\224\230 -\000\364\342\371\312\044\145\277\340\142\257\310\305\372\262\311 -\236\126\110\332\171\375\226\166\025\276\243\216\126\304\263\064 -\374\276\107\364\301\264\250\374\325\060\210\150\356\313\256\311 -\143\304\166\276\254\070\030\341\136\134\317\256\072\042\121\353 -\321\213\263\363\053\063\007\124\207\372\264\262\023\173\272\123 -\004\142\001\235\361\300\117\356\341\072\324\213\040\020\372\002 -\127\346\357\301\013\267\220\106\234\031\051\214\334\157\240\112 -\151\151\224\267\044\145\240\377\254\077\316\001\373\041\056\375 -\150\370\233\362\245\317\061\070\134\025\252\346\227\000\301\337 -\132\245\247\071\252\351\204\177\074\121\250\072\331\224\133\214 -\277\117\010\161\345\333\250\134\324\322\246\376\000\243\306\026 -\307\017\350\200\316\034\050\144\164\031\010\323\102\343\316\000 -\135\177\261\334\023\260\341\005\313\321\040\252\206\164\236\071 -\347\221\375\377\133\326\367\255\246\057\003\013\155\343\127\124 -\353\166\123\030\215\021\230\272 +\017\000\060\202\002\012\002\202\002\001\000\310\207\266\070\323 +\034\360\336\022\370\203\307\304\212\342\211\270\264\042\172\170 +\370\014\146\121\150\166\067\012\325\117\302\132\010\270\026\134 +\367\162\001\011\067\204\201\052\124\153\327\222\320\154\372\250 +\247\103\022\064\353\016\333\067\017\051\376\212\061\121\102\350 +\113\234\220\250\310\054\021\323\375\240\051\176\316\336\224\366 +\202\340\130\264\116\105\045\361\042\362\075\323\017\173\124\032 +\334\062\266\326\121\116\176\101\264\127\270\054\306\271\016\056 +\312\127\361\325\310\323\130\347\245\351\102\021\256\323\040\045 +\224\151\327\217\312\242\015\303\323\237\007\150\077\025\322\147 +\056\123\375\166\202\233\013\163\251\051\015\236\021\223\024\010 +\230\354\236\124\022\112\126\242\006\025\354\153\154\056\222\140 +\056\206\015\256\202\037\121\115\343\262\007\327\020\031\127\042 +\366\251\151\104\204\363\331\075\240\006\277\314\210\176\177\365 +\316\133\245\302\052\152\164\102\352\157\246\377\371\150\261\320 +\137\275\221\322\125\157\063\127\114\036\235\344\342\213\301\205 +\145\240\340\152\234\000\000\210\222\335\130\010\026\362\160\061 +\250\034\341\336\275\116\161\351\326\276\176\265\241\132\303\115 +\367\277\233\275\224\244\375\365\252\123\223\106\311\046\001\004 +\160\304\240\161\272\316\045\146\373\221\176\125\160\356\111\012 +\115\142\177\302\120\232\162\362\030\147\235\351\105\250\064\204 +\350\370\201\366\321\132\042\036\007\117\073\263\177\335\021\245 +\163\334\276\251\031\072\151\251\155\033\062\342\211\252\245\047 +\013\132\176\164\342\017\144\071\135\176\134\271\301\027\374\307 +\215\136\311\354\044\355\322\362\077\172\204\105\067\002\276\076 +\153\131\304\346\133\026\155\300\252\236\252\265\131\056\054\160 +\125\234\314\231\226\230\044\124\321\216\332\312\264\021\264\267 +\160\103\037\157\220\013\040\240\250\166\023\145\333\333\043\132 +\165\113\241\013\061\167\012\356\175\150\141\032\023\214\352\121 +\176\134\126\243\127\114\135\241\353\023\145\277\124\024\314\363 +\356\334\327\354\074\227\362\170\126\270\337\162\134\160\374\316 +\006\335\237\322\007\061\357\347\122\221\236\315\272\327\300\030 +\104\007\061\145\111\062\151\023\112\353\217\002\003\001\000\001 +\243\143\060\141\060\017\006\003\125\035\023\001\001\377\004\005 +\060\003\001\001\377\060\037\006\003\125\035\043\004\030\060\026 +\200\024\265\066\274\074\214\032\253\054\366\131\031\055\203\024 +\332\223\045\025\326\206\060\035\006\003\125\035\016\004\026\004 +\024\265\066\274\074\214\032\253\054\366\131\031\055\203\024\332 +\223\045\025\326\206\060\016\006\003\125\035\017\001\001\377\004 +\004\003\002\001\006\060\015\006\011\052\206\110\206\367\015\001 +\001\015\005\000\003\202\002\001\000\024\373\061\045\070\061\370 +\312\010\262\043\166\070\255\370\323\131\365\314\264\127\045\341 +\104\276\176\374\026\354\256\372\046\237\117\147\026\112\126\360 +\375\355\307\031\001\064\216\220\132\055\326\200\134\354\161\322 +\201\045\202\036\000\161\337\232\321\325\035\042\273\321\245\363 +\142\017\264\353\334\044\163\376\246\126\315\232\024\305\004\065 +\026\061\242\007\353\245\000\342\266\370\137\162\375\077\141\111 +\216\336\176\115\070\327\172\036\164\067\154\121\334\276\000\004 +\270\070\024\363\040\301\355\233\247\043\375\015\102\204\035\177 +\362\163\303\320\170\143\361\237\354\327\133\351\361\276\154\240 +\113\003\236\215\151\341\024\332\210\020\201\043\123\377\332\124 +\053\013\306\271\226\225\004\030\106\363\173\250\227\330\133\150 +\244\344\070\034\016\105\345\230\323\011\256\232\136\354\263\171 +\015\071\162\362\364\224\235\016\236\140\042\346\250\366\114\205 +\315\007\202\072\150\071\315\075\137\343\070\364\266\257\073\153 +\112\237\140\121\105\242\100\002\345\252\014\343\076\321\170\324 +\242\164\234\046\272\005\232\050\160\112\076\246\013\320\035\111 +\360\272\370\256\101\020\176\244\007\022\275\250\317\051\075\127 +\273\307\361\103\107\000\076\256\160\030\132\040\173\011\313\072 +\072\160\200\345\114\140\230\301\025\301\035\112\367\310\360\233 +\341\162\255\347\135\150\130\013\004\261\214\274\237\267\373\156 +\213\133\004\125\373\353\043\125\327\170\120\332\045\313\276\047 +\066\273\044\032\171\034\121\321\376\023\273\377\170\054\334\244 +\276\057\366\305\113\123\317\247\114\231\136\160\254\131\210\004 +\256\144\004\277\173\246\172\115\323\350\167\275\241\176\120\025 +\363\357\111\060\205\115\041\127\252\333\054\165\227\255\201\001 +\207\242\261\160\235\036\006\132\003\140\261\077\246\155\202\054 +\324\024\261\201\245\350\075\210\035\264\162\054\130\067\212\216 +\070\224\270\163\335\251\340\270\366\167\242\263\174\130\336\256 +\151\072\265\213\245\032\273\362\330\164\006\234\375\142\163\040 +\041\166\261\176\160\236\031\324\353\027\142\031\070\231\315\066 +\053\107\376\061\313\337\271\344\254\010\323\330\246\353\324\236 +\176\113\144\244\125\135\053\027\311 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "HARICA TLS RSA Root CA 2021" -# Issuer: CN=HARICA TLS RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Serial Number:39:ca:93:1c:ef:43:f3:c6:8e:93:c7:f4:64:89:38:7e -# Subject: CN=HARICA TLS RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Not Valid Before: Fri Feb 19 10:55:38 2021 -# Not Valid After : Mon Feb 13 10:55:37 2045 -# Fingerprint (SHA-256): D9:5D:0E:8E:DA:79:52:5B:F9:BE:B1:1B:14:D2:10:0D:32:94:98:5F:0C:62:D9:FA:BD:9C:D9:99:EC:CB:7B:1D -# Fingerprint (SHA1): 02:2D:05:82:FA:88:CE:14:0C:06:79:DE:7F:14:10:E9:45:D7:A5:6D +# Trust for "DIGITALSIGN GLOBAL ROOT RSA CA" +# Issuer: CN=DIGITALSIGN GLOBAL ROOT RSA CA,O=DigitalSign Certificadora Digital,C=PT +# Serial Number:5d:59:c8:ca:ab:09:57:f5:e6:b5:da:29:94:04:6a:ff:c5:d4:95:87 +# Subject: CN=DIGITALSIGN GLOBAL ROOT RSA CA,O=DigitalSign Certificadora Digital,C=PT +# Not Valid Before: Thu Jan 21 10:50:34 2021 +# Not Valid After : Mon Jan 15 10:50:34 2046 +# Fingerprint (SHA-256): 82:BD:5D:85:1A:CF:7F:6E:1B:A7:BF:CB:C5:30:30:D0:E7:BC:3C:21:DF:77:2D:85:8C:AB:41:D1:99:BD:F5:95 +# Fingerprint (SHA1): B9:82:07:97:AE:52:A5:68:6F:46:07:DF:FD:03:72:3D:92:86:88:2D CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "HARICA TLS RSA Root CA 2021" +CKA_LABEL UTF8 "DIGITALSIGN GLOBAL ROOT RSA CA" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\002\055\005\202\372\210\316\024\014\006\171\336\177\024\020\351 -\105\327\245\155 +\271\202\007\227\256\122\245\150\157\106\007\337\375\003\162\075 +\222\206\210\055 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\145\107\233\130\206\335\054\360\374\242\204\037\036\226\304\221 +\033\032\275\032\171\306\333\264\355\263\207\314\251\323\116\170 END CKA_ISSUER MULTILINE_OCTAL -\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 -\003\014\033\110\101\122\111\103\101\040\124\114\123\040\122\123 -\101\040\122\157\157\164\040\103\101\040\062\060\062\061 +\060\142\061\013\060\011\006\003\125\004\006\023\002\120\124\061 +\052\060\050\006\003\125\004\012\014\041\104\151\147\151\164\141 +\154\123\151\147\156\040\103\145\162\164\151\146\151\143\141\144 +\157\162\141\040\104\151\147\151\164\141\154\061\047\060\045\006 +\003\125\004\003\014\036\104\111\107\111\124\101\114\123\111\107 +\116\040\107\114\117\102\101\114\040\122\117\117\124\040\122\123 +\101\040\103\101 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\071\312\223\034\357\103\363\306\216\223\307\364\144\211 -\070\176 +\002\024\135\131\310\312\253\011\127\365\346\265\332\051\224\004 +\152\377\305\324\225\207 END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "HARICA TLS ECC Root CA 2021" +# Certificate "DIGITALSIGN GLOBAL ROOT ECDSA CA" # -# Issuer: CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Serial Number:67:74:9d:8d:77:d8:3b:6a:db:22:f4:ff:59:e2:bf:ce -# Subject: CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Not Valid Before: Fri Feb 19 11:01:10 2021 -# Not Valid After : Mon Feb 13 11:01:09 2045 -# Fingerprint (SHA-256): 3F:99:CC:47:4A:CF:CE:4D:FE:D5:87:94:66:5E:47:8D:15:47:73:9F:2E:78:0F:1B:B4:CA:9B:13:30:97:D4:01 -# Fingerprint (SHA1): BC:B0:C1:9D:E9:98:92:70:19:38:57:E9:8D:A7:B4:5D:6E:EE:01:48 +# Issuer: CN=DIGITALSIGN GLOBAL ROOT ECDSA CA,O=DigitalSign Certificadora Digital,C=PT +# Serial Number:36:2d:8f:72:88:a2:28:27:e4:00:ff:24:c6:2d:e4:eb:fa:9d:b6:e1 +# Subject: CN=DIGITALSIGN GLOBAL ROOT ECDSA CA,O=DigitalSign Certificadora Digital,C=PT +# Not Valid Before: Thu Jan 21 11:07:50 2021 +# Not Valid After : Mon Jan 15 11:07:50 2046 +# Fingerprint (SHA-256): 26:1D:71:14:AE:5F:8F:F2:D8:C7:20:9A:9D:E4:28:9E:6A:FC:9D:71:70:23:D8:54:50:90:91:99:F1:85:7C:FE +# Fingerprint (SHA1): 67:A8:08:EB:8F:88:F5:80:6C:05:45:1B:17:F3:D7:00:2F:D2:4A:8A CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "HARICA TLS ECC Root CA 2021" +CKA_LABEL UTF8 "DIGITALSIGN GLOBAL ROOT ECDSA CA" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 -\003\014\033\110\101\122\111\103\101\040\124\114\123\040\105\103 -\103\040\122\157\157\164\040\103\101\040\062\060\062\061 +\060\144\061\013\060\011\006\003\125\004\006\023\002\120\124\061 +\052\060\050\006\003\125\004\012\014\041\104\151\147\151\164\141 +\154\123\151\147\156\040\103\145\162\164\151\146\151\143\141\144 +\157\162\141\040\104\151\147\151\164\141\154\061\051\060\047\006 +\003\125\004\003\014\040\104\111\107\111\124\101\114\123\111\107 +\116\040\107\114\117\102\101\114\040\122\117\117\124\040\105\103 +\104\123\101\040\103\101 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 -\003\014\033\110\101\122\111\103\101\040\124\114\123\040\105\103 -\103\040\122\157\157\164\040\103\101\040\062\060\062\061 +\060\144\061\013\060\011\006\003\125\004\006\023\002\120\124\061 +\052\060\050\006\003\125\004\012\014\041\104\151\147\151\164\141 +\154\123\151\147\156\040\103\145\162\164\151\146\151\143\141\144 +\157\162\141\040\104\151\147\151\164\141\154\061\051\060\047\006 +\003\125\004\003\014\040\104\111\107\111\124\101\114\123\111\107 +\116\040\107\114\117\102\101\114\040\122\117\117\124\040\105\103 +\104\123\101\040\103\101 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\147\164\235\215\167\330\073\152\333\042\364\377\131\342 -\277\316 +\002\024\066\055\217\162\210\242\050\047\344\000\377\044\306\055 +\344\353\372\235\266\341 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\124\060\202\001\333\240\003\002\001\002\002\020\147 -\164\235\215\167\330\073\152\333\042\364\377\131\342\277\316\060 -\012\006\010\052\206\110\316\075\004\003\003\060\154\061\013\060 -\011\006\003\125\004\006\023\002\107\122\061\067\060\065\006\003 -\125\004\012\014\056\110\145\154\154\145\156\151\143\040\101\143 -\141\144\145\155\151\143\040\141\156\144\040\122\145\163\145\141 -\162\143\150\040\111\156\163\164\151\164\165\164\151\157\156\163 -\040\103\101\061\044\060\042\006\003\125\004\003\014\033\110\101 -\122\111\103\101\040\124\114\123\040\105\103\103\040\122\157\157 -\164\040\103\101\040\062\060\062\061\060\036\027\015\062\061\060 -\062\061\071\061\061\060\061\061\060\132\027\015\064\065\060\062 -\061\063\061\061\060\061\060\071\132\060\154\061\013\060\011\006 -\003\125\004\006\023\002\107\122\061\067\060\065\006\003\125\004 -\012\014\056\110\145\154\154\145\156\151\143\040\101\143\141\144 -\145\155\151\143\040\141\156\144\040\122\145\163\145\141\162\143 -\150\040\111\156\163\164\151\164\165\164\151\157\156\163\040\103 -\101\061\044\060\042\006\003\125\004\003\014\033\110\101\122\111 -\103\101\040\124\114\123\040\105\103\103\040\122\157\157\164\040 -\103\101\040\062\060\062\061\060\166\060\020\006\007\052\206\110 -\316\075\002\001\006\005\053\201\004\000\042\003\142\000\004\070 -\010\376\261\240\226\322\172\254\257\111\072\320\300\340\303\073 -\050\252\361\162\155\145\000\107\210\204\374\232\046\153\252\113 -\272\154\004\012\210\136\027\362\125\207\374\060\260\064\342\064 -\130\127\032\204\123\351\060\331\251\362\226\164\303\121\037\130 -\111\061\314\230\116\140\021\207\165\323\162\224\220\117\233\020 -\045\052\250\170\055\276\220\101\130\220\025\162\247\241\267\243 -\102\060\100\060\017\006\003\125\035\023\001\001\377\004\005\060 -\003\001\001\377\060\035\006\003\125\035\016\004\026\004\024\311 -\033\123\201\022\376\004\325\026\321\252\274\232\157\267\240\225 -\031\156\312\060\016\006\003\125\035\017\001\001\377\004\004\003 -\002\001\206\060\012\006\010\052\206\110\316\075\004\003\003\003 -\147\000\060\144\002\060\021\336\256\370\334\116\210\260\251\360 -\042\255\302\121\100\357\140\161\055\356\217\002\304\135\003\160 -\111\244\222\352\305\024\210\160\246\323\015\260\252\312\054\100 -\234\373\351\202\156\232\002\060\053\107\232\007\306\321\302\201 -\174\312\013\226\030\101\033\243\364\060\011\236\265\043\050\015 -\237\024\266\074\123\242\114\006\151\175\372\154\221\306\052\111 -\105\346\354\267\023\341\072\154 +\060\202\002\152\060\202\001\360\240\003\002\001\002\002\024\066 +\055\217\162\210\242\050\047\344\000\377\044\306\055\344\353\372 +\235\266\341\060\012\006\010\052\206\110\316\075\004\003\003\060 +\144\061\013\060\011\006\003\125\004\006\023\002\120\124\061\052 +\060\050\006\003\125\004\012\014\041\104\151\147\151\164\141\154 +\123\151\147\156\040\103\145\162\164\151\146\151\143\141\144\157 +\162\141\040\104\151\147\151\164\141\154\061\051\060\047\006\003 +\125\004\003\014\040\104\111\107\111\124\101\114\123\111\107\116 +\040\107\114\117\102\101\114\040\122\117\117\124\040\105\103\104 +\123\101\040\103\101\060\036\027\015\062\061\060\061\062\061\061 +\061\060\067\065\060\132\027\015\064\066\060\061\061\065\061\061 +\060\067\065\060\132\060\144\061\013\060\011\006\003\125\004\006 +\023\002\120\124\061\052\060\050\006\003\125\004\012\014\041\104 +\151\147\151\164\141\154\123\151\147\156\040\103\145\162\164\151 +\146\151\143\141\144\157\162\141\040\104\151\147\151\164\141\154 +\061\051\060\047\006\003\125\004\003\014\040\104\111\107\111\124 +\101\114\123\111\107\116\040\107\114\117\102\101\114\040\122\117 +\117\124\040\105\103\104\123\101\040\103\101\060\166\060\020\006 +\007\052\206\110\316\075\002\001\006\005\053\201\004\000\042\003 +\142\000\004\156\013\243\253\063\115\034\352\112\350\374\004\215 +\024\240\175\360\010\054\137\203\253\223\321\322\173\272\327\111 +\175\217\354\022\120\137\324\271\313\345\360\371\063\143\037\311 +\127\354\100\330\021\013\227\350\122\026\314\051\216\364\006\206 +\036\070\334\075\127\304\356\252\275\310\124\004\046\132\047\023 +\121\107\075\037\037\032\216\250\225\244\063\320\314\107\314\155 +\270\374\110\243\143\060\141\060\017\006\003\125\035\023\001\001 +\377\004\005\060\003\001\001\377\060\037\006\003\125\035\043\004 +\030\060\026\200\024\316\257\112\213\032\165\342\361\070\347\002 +\360\026\255\136\352\144\325\173\264\060\035\006\003\125\035\016 +\004\026\004\024\316\257\112\213\032\165\342\361\070\347\002\360 +\026\255\136\352\144\325\173\264\060\016\006\003\125\035\017\001 +\001\377\004\004\003\002\001\006\060\012\006\010\052\206\110\316 +\075\004\003\003\003\150\000\060\145\002\060\012\210\304\161\234 +\104\003\115\215\264\307\274\250\256\331\060\047\065\152\153\026 +\143\327\374\347\131\341\247\211\033\114\061\232\043\125\104\346 +\363\103\041\325\107\047\157\155\127\001\252\002\061\000\373\262 +\352\342\227\177\121\265\237\110\353\274\157\065\211\250\144\160 +\253\127\166\315\300\306\024\140\312\177\342\202\000\163\367\314 +\065\352\216\044\233\345\010\131\307\004\214\163\170\376 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "HARICA TLS ECC Root CA 2021" -# Issuer: CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Serial Number:67:74:9d:8d:77:d8:3b:6a:db:22:f4:ff:59:e2:bf:ce -# Subject: CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Not Valid Before: Fri Feb 19 11:01:10 2021 -# Not Valid After : Mon Feb 13 11:01:09 2045 -# Fingerprint (SHA-256): 3F:99:CC:47:4A:CF:CE:4D:FE:D5:87:94:66:5E:47:8D:15:47:73:9F:2E:78:0F:1B:B4:CA:9B:13:30:97:D4:01 -# Fingerprint (SHA1): BC:B0:C1:9D:E9:98:92:70:19:38:57:E9:8D:A7:B4:5D:6E:EE:01:48 +# Trust for "DIGITALSIGN GLOBAL ROOT ECDSA CA" +# Issuer: CN=DIGITALSIGN GLOBAL ROOT ECDSA CA,O=DigitalSign Certificadora Digital,C=PT +# Serial Number:36:2d:8f:72:88:a2:28:27:e4:00:ff:24:c6:2d:e4:eb:fa:9d:b6:e1 +# Subject: CN=DIGITALSIGN GLOBAL ROOT ECDSA CA,O=DigitalSign Certificadora Digital,C=PT +# Not Valid Before: Thu Jan 21 11:07:50 2021 +# Not Valid After : Mon Jan 15 11:07:50 2046 +# Fingerprint (SHA-256): 26:1D:71:14:AE:5F:8F:F2:D8:C7:20:9A:9D:E4:28:9E:6A:FC:9D:71:70:23:D8:54:50:90:91:99:F1:85:7C:FE +# Fingerprint (SHA1): 67:A8:08:EB:8F:88:F5:80:6C:05:45:1B:17:F3:D7:00:2F:D2:4A:8A CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "HARICA TLS ECC Root CA 2021" +CKA_LABEL UTF8 "DIGITALSIGN GLOBAL ROOT ECDSA CA" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\274\260\301\235\351\230\222\160\031\070\127\351\215\247\264\135 -\156\356\001\110 +\147\250\010\353\217\210\365\200\154\005\105\033\027\363\327\000 +\057\322\112\212 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\256\367\114\345\146\065\321\267\233\214\042\223\164\323\113\260 +\252\055\241\316\377\041\302\210\313\132\036\214\341\311\222\217 END CKA_ISSUER MULTILINE_OCTAL -\060\154\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\044\060\042\006\003\125\004 -\003\014\033\110\101\122\111\103\101\040\124\114\123\040\105\103 -\103\040\122\157\157\164\040\103\101\040\062\060\062\061 +\060\144\061\013\060\011\006\003\125\004\006\023\002\120\124\061 +\052\060\050\006\003\125\004\012\014\041\104\151\147\151\164\141 +\154\123\151\147\156\040\103\145\162\164\151\146\151\143\141\144 +\157\162\141\040\104\151\147\151\164\141\154\061\051\060\047\006 +\003\125\004\003\014\040\104\111\107\111\124\101\114\123\111\107 +\116\040\107\114\117\102\101\114\040\122\117\117\124\040\105\103 +\104\123\101\040\103\101 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\147\164\235\215\167\330\073\152\333\042\364\377\131\342 -\277\316 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +\002\024\066\055\217\162\210\242\050\047\344\000\377\044\306\055 +\344\353\372\235\266\341 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "HARICA Client RSA Root CA 2021" +# Certificate "Security Communication RootCA3" # -# Issuer: CN=HARICA Client RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Serial Number:55:52:f8:1e:db:1b:24:2c:9e:bb:96:18:cd:02:28:3e -# Subject: CN=HARICA Client RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Not Valid Before: Fri Feb 19 10:58:46 2021 -# Not Valid After : Mon Feb 13 10:58:45 2045 -# Fingerprint (SHA-256): 1B:E7:AB:E3:06:86:B1:63:48:AF:D1:C6:1B:68:66:A0:EA:7F:48:21:E6:7D:5E:8A:F9:37:CF:80:11:BC:75:0D -# Fingerprint (SHA1): 46:C6:90:0A:77:3A:B6:BC:F4:65:AD:AC:FC:E3:F7:07:00:6E:DE:6E +# Issuer: CN=Security Communication RootCA3,O="SECOM Trust Systems CO.,LTD.",C=JP +# Serial Number:00:e1:7c:37:40:fd:1b:fe:67 +# Subject: CN=Security Communication RootCA3,O="SECOM Trust Systems CO.,LTD.",C=JP +# Not Valid Before: Thu Jun 16 06:17:16 2016 +# Not Valid After : Mon Jan 18 06:17:16 2038 +# Fingerprint (SHA-256): 24:A5:5C:2A:B0:51:44:2D:06:17:76:65:41:23:9A:4A:D0:32:D7:C5:51:75:AA:34:FF:DE:2F:BC:4F:5C:52:94 +# Fingerprint (SHA1): C3:03:C8:22:74:92:E5:61:A2:9C:5F:79:91:2B:1E:44:13:91:30:3A CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "HARICA Client RSA Root CA 2021" +CKA_LABEL UTF8 "Security Communication RootCA3" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 -\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 -\040\122\123\101\040\122\157\157\164\040\103\101\040\062\060\062 -\061 +\060\135\061\013\060\011\006\003\125\004\006\023\002\112\120\061 +\045\060\043\006\003\125\004\012\023\034\123\105\103\117\115\040 +\124\162\165\163\164\040\123\171\163\164\145\155\163\040\103\117 +\056\054\114\124\104\056\061\047\060\045\006\003\125\004\003\023 +\036\123\145\143\165\162\151\164\171\040\103\157\155\155\165\156 +\151\143\141\164\151\157\156\040\122\157\157\164\103\101\063 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 -\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 -\040\122\123\101\040\122\157\157\164\040\103\101\040\062\060\062 -\061 +\060\135\061\013\060\011\006\003\125\004\006\023\002\112\120\061 +\045\060\043\006\003\125\004\012\023\034\123\105\103\117\115\040 +\124\162\165\163\164\040\123\171\163\164\145\155\163\040\103\117 +\056\054\114\124\104\056\061\047\060\045\006\003\125\004\003\023 +\036\123\145\143\165\162\151\164\171\040\103\157\155\155\165\156 +\151\143\141\164\151\157\156\040\122\157\157\164\103\101\063 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\125\122\370\036\333\033\044\054\236\273\226\030\315\002 -\050\076 +\002\011\000\341\174\067\100\375\033\376\147 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\252\060\202\003\222\240\003\002\001\002\002\020\125 -\122\370\036\333\033\044\054\236\273\226\030\315\002\050\076\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\157 -\061\013\060\011\006\003\125\004\006\023\002\107\122\061\067\060 -\065\006\003\125\004\012\014\056\110\145\154\154\145\156\151\143 -\040\101\143\141\144\145\155\151\143\040\141\156\144\040\122\145 -\163\145\141\162\143\150\040\111\156\163\164\151\164\165\164\151 -\157\156\163\040\103\101\061\047\060\045\006\003\125\004\003\014 -\036\110\101\122\111\103\101\040\103\154\151\145\156\164\040\122 -\123\101\040\122\157\157\164\040\103\101\040\062\060\062\061\060 -\036\027\015\062\061\060\062\061\071\061\060\065\070\064\066\132 -\027\015\064\065\060\062\061\063\061\060\065\070\064\065\132\060 -\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061\067 -\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156\151 -\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040\122 -\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165\164 -\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004\003 -\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164\040 -\122\123\101\040\122\157\157\164\040\103\101\040\062\060\062\061 -\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 -\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 -\000\201\333\127\102\220\054\164\065\364\370\270\164\031\115\253 -\011\132\167\105\201\163\142\260\065\237\370\320\267\063\000\207 -\023\266\226\253\016\124\022\060\007\274\233\267\110\327\321\031 -\203\256\216\330\251\361\251\000\204\260\214\136\236\350\014\217 -\124\151\277\366\324\010\117\046\160\376\030\101\143\032\263\062 -\213\100\370\007\253\127\061\360\306\026\166\147\232\264\335\057 -\362\321\153\305\320\222\204\221\161\156\017\056\143\351\037\123 -\244\335\122\023\314\011\203\051\201\014\305\123\165\104\261\016 -\147\123\030\320\303\037\210\113\237\224\044\264\051\274\273\350 -\116\375\157\322\025\035\111\334\215\160\362\021\032\040\121\125 -\021\272\210\157\304\367\120\171\326\252\061\342\204\075\136\062 -\310\167\052\120\161\345\013\057\351\266\352\357\253\012\063\071 -\016\375\217\245\147\103\202\216\230\151\011\011\033\100\315\070 -\147\107\352\311\354\227\161\022\336\044\365\162\074\321\367\103 -\114\046\367\220\262\211\351\105\113\125\075\061\005\172\101\342 -\225\272\103\300\027\305\266\205\075\031\215\144\160\363\133\254 -\315\237\323\051\165\207\113\225\147\152\246\370\321\335\274\220 -\206\211\103\051\251\067\133\365\135\260\046\132\123\102\166\220 -\053\317\236\126\154\053\124\317\134\232\145\337\133\213\110\140 -\070\174\373\305\013\317\166\004\143\002\063\052\175\365\203\147 -\347\372\306\103\375\053\017\324\046\057\167\244\062\301\044\352 -\144\235\277\263\070\161\061\104\362\107\270\242\146\101\241\373 -\233\173\274\307\106\152\165\277\132\242\214\350\152\104\301\270 -\226\265\300\062\010\055\173\164\065\163\262\312\306\376\257\021 -\162\030\366\347\310\302\317\245\052\352\173\326\131\350\174\240 -\262\152\100\011\151\016\245\226\333\321\000\271\361\210\156\066 -\360\210\262\235\361\122\362\303\174\277\060\211\074\012\151\371 -\042\244\145\341\233\340\164\306\261\205\227\226\054\256\224\217 -\120\246\071\022\037\276\107\362\201\170\323\165\066\236\175\132 -\040\227\342\122\256\231\237\306\174\233\146\363\376\330\317\356 -\275\227\006\035\055\205\334\076\066\123\226\173\040\272\350\310 -\341\255\226\142\076\021\174\263\000\204\236\247\114\161\253\112 -\067\002\003\001\000\001\243\102\060\100\060\017\006\003\125\035 -\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125 -\035\016\004\026\004\024\240\326\007\075\136\044\367\173\240\104 -\056\044\122\015\031\252\053\004\221\247\060\016\006\003\125\035 -\017\001\001\377\004\004\003\002\001\206\060\015\006\011\052\206 -\110\206\367\015\001\001\013\005\000\003\202\002\001\000\015\107 -\371\011\146\061\122\354\171\356\302\250\362\150\076\355\226\105 -\313\072\246\230\143\077\352\053\115\116\003\320\034\202\341\313 -\323\345\326\253\133\147\050\274\235\376\014\231\012\200\125\247 -\316\033\043\141\015\260\127\360\376\340\312\276\346\220\333\203 -\054\276\203\216\364\171\266\376\320\015\102\247\130\037\151\352 -\201\365\005\245\376\106\150\353\154\170\311\340\352\347\346\336 -\061\305\322\325\054\202\143\050\235\135\250\032\176\210\346\347 -\053\361\054\325\320\005\236\334\055\275\067\146\324\004\242\247 -\255\277\072\302\250\073\255\377\215\235\063\340\271\232\204\241 -\207\037\166\364\202\164\327\016\371\060\110\076\133\210\076\252 -\134\153\326\057\014\350\216\163\302\030\221\203\071\266\146\132 -\320\037\140\047\135\115\343\366\072\015\146\120\234\170\173\253 -\363\023\020\256\017\057\253\350\144\263\030\040\235\106\065\144 -\045\163\352\233\020\134\130\065\211\261\106\110\247\364\254\324 -\035\236\133\314\251\245\032\023\117\044\120\252\331\033\155\261 -\100\373\235\335\130\164\304\302\157\024\162\354\333\065\237\270 -\124\165\105\303\246\310\032\050\065\072\256\145\362\251\230\316 -\257\133\311\070\214\061\073\177\314\334\226\375\342\133\326\320 -\131\364\166\272\013\313\117\203\020\307\100\320\035\140\351\052 -\345\110\130\167\014\105\151\276\031\161\004\044\342\343\044\037 -\112\310\301\076\231\365\226\230\070\110\045\241\025\260\033\327 -\342\204\030\133\366\161\065\232\150\173\100\314\030\134\014\044 -\235\324\225\365\231\252\106\352\256\254\277\364\024\031\044\350 -\214\354\343\365\274\006\150\212\052\014\005\137\012\227\165\247 -\334\176\300\375\327\172\030\337\060\321\070\113\037\260\230\160 -\277\314\174\163\360\156\304\061\245\244\227\035\254\277\316\154 -\041\112\276\047\043\147\363\006\126\201\012\221\216\266\341\003 -\005\063\054\332\064\010\115\116\120\043\255\037\245\305\324\172 -\376\352\011\354\247\050\140\213\106\174\265\352\233\335\117\371 -\347\153\025\306\210\317\103\333\345\047\334\004\126\156\157\106 -\025\361\126\055\350\134\014\163\303\043\201\070\040\313\311\014 -\151\317\054\253\073\204\140\063\031\122\375\151\024\063 +\060\202\005\177\060\202\003\147\240\003\002\001\002\002\011\000 +\341\174\067\100\375\033\376\147\060\015\006\011\052\206\110\206 +\367\015\001\001\014\005\000\060\135\061\013\060\011\006\003\125 +\004\006\023\002\112\120\061\045\060\043\006\003\125\004\012\023 +\034\123\105\103\117\115\040\124\162\165\163\164\040\123\171\163 +\164\145\155\163\040\103\117\056\054\114\124\104\056\061\047\060 +\045\006\003\125\004\003\023\036\123\145\143\165\162\151\164\171 +\040\103\157\155\155\165\156\151\143\141\164\151\157\156\040\122 +\157\157\164\103\101\063\060\036\027\015\061\066\060\066\061\066 +\060\066\061\067\061\066\132\027\015\063\070\060\061\061\070\060 +\066\061\067\061\066\132\060\135\061\013\060\011\006\003\125\004 +\006\023\002\112\120\061\045\060\043\006\003\125\004\012\023\034 +\123\105\103\117\115\040\124\162\165\163\164\040\123\171\163\164 +\145\155\163\040\103\117\056\054\114\124\104\056\061\047\060\045 +\006\003\125\004\003\023\036\123\145\143\165\162\151\164\171\040 +\103\157\155\155\165\156\151\143\141\164\151\157\156\040\122\157 +\157\164\103\101\063\060\202\002\042\060\015\006\011\052\206\110 +\206\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002 +\012\002\202\002\001\000\343\311\162\111\367\060\336\011\174\251 +\100\201\130\323\264\072\335\272\141\017\223\120\156\151\074\065 +\302\356\133\163\220\033\147\114\041\354\137\065\273\071\076\053 +\012\140\357\273\155\053\206\373\161\242\310\254\344\126\224\371 +\311\257\261\162\324\040\254\164\322\270\025\255\121\376\205\164 +\241\271\020\376\005\200\371\122\223\263\100\075\165\020\254\300 +\226\267\247\176\166\274\343\033\122\031\316\021\037\013\004\064 +\365\330\365\151\074\167\363\144\364\015\252\205\336\340\011\120 +\004\027\226\204\267\310\212\274\115\162\374\034\273\317\363\006 +\115\371\237\144\367\176\246\146\206\065\161\310\021\200\114\301 +\161\100\130\036\276\240\163\366\374\076\120\341\340\057\046\075 +\176\134\043\265\171\160\336\372\340\321\245\326\014\101\161\173 +\367\352\214\034\210\307\354\213\365\321\057\125\226\106\174\132 +\073\130\073\373\272\330\055\265\045\332\172\116\317\104\256\041 +\246\236\230\312\040\156\174\273\210\205\133\373\300\020\142\273 +\362\371\047\107\357\321\211\071\103\304\337\336\341\101\277\124 +\163\040\227\055\154\332\363\324\007\243\346\271\330\157\256\374 +\214\031\056\323\147\147\053\225\333\130\134\265\152\002\363\270 +\203\136\264\153\276\101\176\127\011\165\104\120\125\315\132\021 +\141\041\012\141\302\251\210\375\023\274\055\211\057\315\141\340 +\225\276\312\265\173\341\173\064\147\013\037\266\014\307\174\036 +\031\123\312\247\261\112\025\040\126\024\160\075\053\202\054\017 +\235\025\035\107\200\107\377\170\231\016\061\257\157\076\217\355 +\206\151\036\173\030\210\024\262\302\374\202\063\056\234\113\055 +\373\160\073\161\252\053\173\046\047\363\032\302\334\373\027\270 +\241\352\313\240\264\256\323\224\176\172\320\253\303\354\070\055 +\021\056\210\277\324\077\255\022\073\102\254\217\002\156\175\314 +\321\137\141\276\241\274\072\152\110\352\046\125\042\026\135\137 +\015\377\047\063\237\030\003\164\212\133\122\040\107\153\105\115 +\042\167\214\125\047\360\257\036\214\311\203\042\124\267\232\320 +\117\331\316\374\331\056\034\226\050\261\002\323\003\275\045\122 +\034\064\146\117\043\253\364\167\202\226\035\321\127\060\010\021 +\005\375\127\321\331\307\002\003\001\000\001\243\102\060\100\060 +\035\006\003\125\035\016\004\026\004\024\144\024\174\374\130\162 +\026\246\012\051\064\025\157\052\313\274\374\257\250\253\060\016 +\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060\017 +\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 +\015\006\011\052\206\110\206\367\015\001\001\014\005\000\003\202 +\002\001\000\334\002\043\010\342\357\041\072\307\015\267\046\322 +\142\223\247\245\043\162\007\040\202\140\337\030\327\124\255\151 +\045\222\236\331\024\317\231\271\122\201\317\256\154\212\073\132 +\071\310\154\001\103\302\042\155\002\360\142\315\116\143\103\300 +\024\332\364\143\360\352\364\161\356\116\207\343\161\251\364\311 +\127\345\056\137\034\171\273\043\252\207\104\127\351\275\065\115 +\101\273\113\050\243\230\262\033\331\013\027\007\345\367\352\235 +\365\166\327\277\304\266\201\130\377\310\377\144\151\142\171\255 +\156\016\037\177\356\035\151\345\267\162\161\263\376\245\001\065 +\224\124\053\300\122\155\217\125\304\311\322\270\313\312\064\010 +\121\205\240\365\274\264\027\130\352\012\134\172\275\143\306\072 +\057\377\226\111\031\204\352\147\330\004\261\141\364\000\133\112 +\267\234\161\067\031\205\171\277\201\260\307\023\016\166\161\076 +\072\200\006\256\006\026\247\215\265\302\304\313\377\100\245\134 +\215\245\311\072\355\162\201\312\134\230\074\322\064\003\167\010 +\375\360\051\131\135\041\010\307\140\277\244\161\173\270\331\036 +\202\276\011\257\145\157\050\253\277\113\265\356\076\010\107\047 +\240\017\157\017\213\077\254\225\030\363\271\016\334\147\125\156 +\142\236\106\016\321\004\170\312\162\256\166\331\245\370\262\337 +\210\011\141\213\357\044\116\321\131\077\132\324\075\311\223\074 +\053\144\365\201\015\026\226\367\222\303\376\061\157\350\052\062 +\164\016\364\114\230\112\030\016\060\124\325\305\353\274\305\025 +\236\350\231\041\353\047\053\011\012\333\361\346\160\030\126\273 +\014\344\276\371\350\020\244\023\222\270\034\340\333\147\035\123 +\003\244\042\247\334\135\222\020\074\352\377\374\033\020\032\303 +\330\320\234\235\145\313\320\053\047\061\003\036\066\341\075\166 +\165\014\377\105\046\271\335\121\274\043\307\137\330\330\207\020 +\100\022\015\075\070\067\347\104\074\030\300\123\011\144\217\377 +\325\232\246\174\160\056\163\125\041\350\337\377\203\271\035\076 +\062\036\326\246\175\054\361\146\351\134\035\247\243\316\136\045 +\062\053\343\225\254\052\007\316\264\050\170\206\074\055\246\235 +\115\322\164\060\335\144\121\025\333\203\203\121\327\257\375\063 +\235\115\146 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "HARICA Client RSA Root CA 2021" -# Issuer: CN=HARICA Client RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Serial Number:55:52:f8:1e:db:1b:24:2c:9e:bb:96:18:cd:02:28:3e -# Subject: CN=HARICA Client RSA Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Not Valid Before: Fri Feb 19 10:58:46 2021 -# Not Valid After : Mon Feb 13 10:58:45 2045 -# Fingerprint (SHA-256): 1B:E7:AB:E3:06:86:B1:63:48:AF:D1:C6:1B:68:66:A0:EA:7F:48:21:E6:7D:5E:8A:F9:37:CF:80:11:BC:75:0D -# Fingerprint (SHA1): 46:C6:90:0A:77:3A:B6:BC:F4:65:AD:AC:FC:E3:F7:07:00:6E:DE:6E +# Trust for "Security Communication RootCA3" +# Issuer: CN=Security Communication RootCA3,O="SECOM Trust Systems CO.,LTD.",C=JP +# Serial Number:00:e1:7c:37:40:fd:1b:fe:67 +# Subject: CN=Security Communication RootCA3,O="SECOM Trust Systems CO.,LTD.",C=JP +# Not Valid Before: Thu Jun 16 06:17:16 2016 +# Not Valid After : Mon Jan 18 06:17:16 2038 +# Fingerprint (SHA-256): 24:A5:5C:2A:B0:51:44:2D:06:17:76:65:41:23:9A:4A:D0:32:D7:C5:51:75:AA:34:FF:DE:2F:BC:4F:5C:52:94 +# Fingerprint (SHA1): C3:03:C8:22:74:92:E5:61:A2:9C:5F:79:91:2B:1E:44:13:91:30:3A CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "HARICA Client RSA Root CA 2021" +CKA_LABEL UTF8 "Security Communication RootCA3" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\106\306\220\012\167\072\266\274\364\145\255\254\374\343\367\007 -\000\156\336\156 +\303\003\310\042\164\222\345\141\242\234\137\171\221\053\036\104 +\023\221\060\072 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\157\355\134\327\210\314\070\251\334\351\335\331\135\333\330\355 +\034\232\026\377\236\134\340\115\212\024\001\364\065\135\051\046 END CKA_ISSUER MULTILINE_OCTAL -\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 -\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 -\040\122\123\101\040\122\157\157\164\040\103\101\040\062\060\062 -\061 +\060\135\061\013\060\011\006\003\125\004\006\023\002\112\120\061 +\045\060\043\006\003\125\004\012\023\034\123\105\103\117\115\040 +\124\162\165\163\164\040\123\171\163\164\145\155\163\040\103\117 +\056\054\114\124\104\056\061\047\060\045\006\003\125\004\003\023 +\036\123\145\143\165\162\151\164\171\040\103\157\155\155\165\156 +\151\143\141\164\151\157\156\040\122\157\157\164\103\101\063 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\125\122\370\036\333\033\044\054\236\273\226\030\315\002 -\050\076 +\002\011\000\341\174\067\100\375\033\376\147 END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "HARICA Client ECC Root CA 2021" +# Certificate "Security Communication ECC RootCA1" # -# Issuer: CN=HARICA Client ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Serial Number:31:68:d9:d8:e1:62:57:1e:d2:19:44:88:e6:10:7d:f0 -# Subject: CN=HARICA Client ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Not Valid Before: Fri Feb 19 11:03:34 2021 -# Not Valid After : Mon Feb 13 11:03:33 2045 -# Fingerprint (SHA-256): 8D:D4:B5:37:3C:B0:DE:36:76:9C:12:33:92:80:D8:27:46:B3:AA:6C:D4:26:E7:97:A3:1B:AB:E4:27:9C:F0:0B -# Fingerprint (SHA1): BE:64:D3:DA:14:4B:D2:6B:CD:AF:8F:DB:A6:A6:72:F8:DE:26:F9:00 +# Issuer: CN=Security Communication ECC RootCA1,O="SECOM Trust Systems CO.,LTD.",C=JP +# Serial Number:00:d6:5d:9b:b3:78:81:2e:eb +# Subject: CN=Security Communication ECC RootCA1,O="SECOM Trust Systems CO.,LTD.",C=JP +# Not Valid Before: Thu Jun 16 05:15:28 2016 +# Not Valid After : Mon Jan 18 05:15:28 2038 +# Fingerprint (SHA-256): E7:4F:BD:A5:5B:D5:64:C4:73:A3:6B:44:1A:A7:99:C8:A6:8E:07:74:40:E8:28:8B:9F:A1:E5:0E:4B:BA:CA:11 +# Fingerprint (SHA1): B8:0E:26:A9:BF:D2:B2:3B:C0:EF:46:C9:BA:C7:BB:F6:1D:0D:41:41 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "HARICA Client ECC Root CA 2021" +CKA_LABEL UTF8 "Security Communication ECC RootCA1" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 -\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 -\040\105\103\103\040\122\157\157\164\040\103\101\040\062\060\062 -\061 +\060\141\061\013\060\011\006\003\125\004\006\023\002\112\120\061 +\045\060\043\006\003\125\004\012\023\034\123\105\103\117\115\040 +\124\162\165\163\164\040\123\171\163\164\145\155\163\040\103\117 +\056\054\114\124\104\056\061\053\060\051\006\003\125\004\003\023 +\042\123\145\143\165\162\151\164\171\040\103\157\155\155\165\156 +\151\143\141\164\151\157\156\040\105\103\103\040\122\157\157\164 +\103\101\061 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 -\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 -\040\105\103\103\040\122\157\157\164\040\103\101\040\062\060\062 -\061 +\060\141\061\013\060\011\006\003\125\004\006\023\002\112\120\061 +\045\060\043\006\003\125\004\012\023\034\123\105\103\117\115\040 +\124\162\165\163\164\040\123\171\163\164\145\155\163\040\103\117 +\056\054\114\124\104\056\061\053\060\051\006\003\125\004\003\023 +\042\123\145\143\165\162\151\164\171\040\103\157\155\155\165\156 +\151\143\141\164\151\157\156\040\105\103\103\040\122\157\157\164 +\103\101\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\061\150\331\330\341\142\127\036\322\031\104\210\346\020 -\175\360 +\002\011\000\326\135\233\263\170\201\056\353 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\132\060\202\001\341\240\003\002\001\002\002\020\061 -\150\331\330\341\142\127\036\322\031\104\210\346\020\175\360\060 -\012\006\010\052\206\110\316\075\004\003\003\060\157\061\013\060 -\011\006\003\125\004\006\023\002\107\122\061\067\060\065\006\003 -\125\004\012\014\056\110\145\154\154\145\156\151\143\040\101\143 -\141\144\145\155\151\143\040\141\156\144\040\122\145\163\145\141 -\162\143\150\040\111\156\163\164\151\164\165\164\151\157\156\163 -\040\103\101\061\047\060\045\006\003\125\004\003\014\036\110\101 -\122\111\103\101\040\103\154\151\145\156\164\040\105\103\103\040 -\122\157\157\164\040\103\101\040\062\060\062\061\060\036\027\015 -\062\061\060\062\061\071\061\061\060\063\063\064\132\027\015\064 -\065\060\062\061\063\061\061\060\063\063\063\132\060\157\061\013 -\060\011\006\003\125\004\006\023\002\107\122\061\067\060\065\006 -\003\125\004\012\014\056\110\145\154\154\145\156\151\143\040\101 -\143\141\144\145\155\151\143\040\141\156\144\040\122\145\163\145 -\141\162\143\150\040\111\156\163\164\151\164\165\164\151\157\156 -\163\040\103\101\061\047\060\045\006\003\125\004\003\014\036\110 -\101\122\111\103\101\040\103\154\151\145\156\164\040\105\103\103 -\040\122\157\157\164\040\103\101\040\062\060\062\061\060\166\060 -\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000 -\042\003\142\000\004\007\030\255\225\226\224\320\134\017\202\367 -\052\100\372\002\311\311\075\066\246\243\004\152\301\155\225\001 -\210\140\022\124\154\134\242\053\156\023\072\210\225\014\034\046 -\206\066\112\211\031\267\030\336\073\350\250\120\037\312\337\133 -\277\111\200\025\333\343\060\341\035\132\307\052\212\001\007\376 -\155\054\064\357\050\050\227\274\301\371\127\206\225\213\065\317 -\236\132\321\150\225\243\102\060\100\060\017\006\003\125\035\023 -\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035 -\016\004\026\004\024\122\010\322\276\062\201\045\375\365\032\227 -\354\116\137\032\273\123\315\220\255\060\016\006\003\125\035\017 -\001\001\377\004\004\003\002\001\206\060\012\006\010\052\206\110 -\316\075\004\003\003\003\147\000\060\144\002\060\114\061\105\106 -\117\250\346\276\303\167\262\032\030\113\055\210\173\130\346\253 -\224\153\104\003\260\027\377\337\202\163\104\121\054\375\223\035 -\006\173\024\322\211\354\100\014\357\041\001\056\002\060\057\311 -\056\132\154\054\035\331\225\340\236\260\271\134\122\174\366\370 -\070\312\056\361\324\035\362\242\111\242\225\370\301\130\136\117 -\376\163\012\357\061\260\253\043\130\023\214\213\336\073 +\060\202\002\070\060\202\001\276\240\003\002\001\002\002\011\000 +\326\135\233\263\170\201\056\353\060\012\006\010\052\206\110\316 +\075\004\003\003\060\141\061\013\060\011\006\003\125\004\006\023 +\002\112\120\061\045\060\043\006\003\125\004\012\023\034\123\105 +\103\117\115\040\124\162\165\163\164\040\123\171\163\164\145\155 +\163\040\103\117\056\054\114\124\104\056\061\053\060\051\006\003 +\125\004\003\023\042\123\145\143\165\162\151\164\171\040\103\157 +\155\155\165\156\151\143\141\164\151\157\156\040\105\103\103\040 +\122\157\157\164\103\101\061\060\036\027\015\061\066\060\066\061 +\066\060\065\061\065\062\070\132\027\015\063\070\060\061\061\070 +\060\065\061\065\062\070\132\060\141\061\013\060\011\006\003\125 +\004\006\023\002\112\120\061\045\060\043\006\003\125\004\012\023 +\034\123\105\103\117\115\040\124\162\165\163\164\040\123\171\163 +\164\145\155\163\040\103\117\056\054\114\124\104\056\061\053\060 +\051\006\003\125\004\003\023\042\123\145\143\165\162\151\164\171 +\040\103\157\155\155\165\156\151\143\141\164\151\157\156\040\105 +\103\103\040\122\157\157\164\103\101\061\060\166\060\020\006\007 +\052\206\110\316\075\002\001\006\005\053\201\004\000\042\003\142 +\000\004\244\245\157\140\003\003\303\275\061\364\323\027\234\053 +\204\165\254\345\375\075\127\156\327\143\277\346\004\211\222\216 +\201\234\343\351\107\156\312\220\022\310\023\340\247\235\367\145 +\164\037\154\020\262\350\344\351\357\155\205\062\231\104\261\136 +\375\314\166\020\330\133\275\242\306\371\326\102\344\127\166\334 +\220\302\065\251\113\210\074\022\107\155\134\377\111\117\032\112 +\120\261\243\102\060\100\060\035\006\003\125\035\016\004\026\004 +\024\206\034\347\376\055\245\112\213\010\376\050\021\372\276\243 +\146\370\140\131\057\060\016\006\003\125\035\017\001\001\377\004 +\004\003\002\001\006\060\017\006\003\125\035\023\001\001\377\004 +\005\060\003\001\001\377\060\012\006\010\052\206\110\316\075\004 +\003\003\003\150\000\060\145\002\060\025\135\102\075\374\266\356 +\367\073\261\066\350\236\366\304\106\050\111\063\320\130\103\052 +\143\051\314\115\261\264\172\242\271\015\070\245\135\110\052\375 +\313\262\163\135\243\210\010\307\014\002\061\000\300\253\055\016 +\155\355\030\242\333\123\351\045\333\125\010\340\120\314\337\104 +\141\026\202\253\111\260\262\201\354\163\207\170\264\114\262\142 +\033\022\372\026\115\045\113\143\275\036\067\331 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "HARICA Client ECC Root CA 2021" -# Issuer: CN=HARICA Client ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Serial Number:31:68:d9:d8:e1:62:57:1e:d2:19:44:88:e6:10:7d:f0 -# Subject: CN=HARICA Client ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR -# Not Valid Before: Fri Feb 19 11:03:34 2021 -# Not Valid After : Mon Feb 13 11:03:33 2045 -# Fingerprint (SHA-256): 8D:D4:B5:37:3C:B0:DE:36:76:9C:12:33:92:80:D8:27:46:B3:AA:6C:D4:26:E7:97:A3:1B:AB:E4:27:9C:F0:0B -# Fingerprint (SHA1): BE:64:D3:DA:14:4B:D2:6B:CD:AF:8F:DB:A6:A6:72:F8:DE:26:F9:00 +# Trust for "Security Communication ECC RootCA1" +# Issuer: CN=Security Communication ECC RootCA1,O="SECOM Trust Systems CO.,LTD.",C=JP +# Serial Number:00:d6:5d:9b:b3:78:81:2e:eb +# Subject: CN=Security Communication ECC RootCA1,O="SECOM Trust Systems CO.,LTD.",C=JP +# Not Valid Before: Thu Jun 16 05:15:28 2016 +# Not Valid After : Mon Jan 18 05:15:28 2038 +# Fingerprint (SHA-256): E7:4F:BD:A5:5B:D5:64:C4:73:A3:6B:44:1A:A7:99:C8:A6:8E:07:74:40:E8:28:8B:9F:A1:E5:0E:4B:BA:CA:11 +# Fingerprint (SHA1): B8:0E:26:A9:BF:D2:B2:3B:C0:EF:46:C9:BA:C7:BB:F6:1D:0D:41:41 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "HARICA Client ECC Root CA 2021" +CKA_LABEL UTF8 "Security Communication ECC RootCA1" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\276\144\323\332\024\113\322\153\315\257\217\333\246\246\162\370 -\336\046\371\000 +\270\016\046\251\277\322\262\073\300\357\106\311\272\307\273\366 +\035\015\101\101 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\255\270\120\246\251\202\172\154\075\032\252\244\322\143\244\104 +\176\103\260\222\150\354\005\103\114\230\253\135\065\056\176\206 END CKA_ISSUER MULTILINE_OCTAL -\060\157\061\013\060\011\006\003\125\004\006\023\002\107\122\061 -\067\060\065\006\003\125\004\012\014\056\110\145\154\154\145\156 -\151\143\040\101\143\141\144\145\155\151\143\040\141\156\144\040 -\122\145\163\145\141\162\143\150\040\111\156\163\164\151\164\165 -\164\151\157\156\163\040\103\101\061\047\060\045\006\003\125\004 -\003\014\036\110\101\122\111\103\101\040\103\154\151\145\156\164 -\040\105\103\103\040\122\157\157\164\040\103\101\040\062\060\062 -\061 +\060\141\061\013\060\011\006\003\125\004\006\023\002\112\120\061 +\045\060\043\006\003\125\004\012\023\034\123\105\103\117\115\040 +\124\162\165\163\164\040\123\171\163\164\145\155\163\040\103\117 +\056\054\114\124\104\056\061\053\060\051\006\003\125\004\003\023 +\042\123\145\143\165\162\151\164\171\040\103\157\155\155\165\156 +\151\143\141\164\151\157\156\040\105\103\103\040\122\157\157\164 +\103\101\061 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\061\150\331\330\341\142\127\036\322\031\104\210\346\020 -\175\360 +\002\011\000\326\135\233\263\170\201\056\353 END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE diff --git a/tools/clang-format/package-lock.json b/tools/clang-format/package-lock.json index 61f17967f0e..537314a7cb6 100644 --- a/tools/clang-format/package-lock.json +++ b/tools/clang-format/package-lock.json @@ -1,18 +1,196 @@ { "name": "node-core-clang-format", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "node-core-clang-format", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "clang-format": "^1.8.0" + } + }, + "node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/clang-format": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.8.0.tgz", + "integrity": "sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw==", + "dependencies": { + "async": "^3.2.3", + "glob": "^7.0.0", + "resolve": "^1.1.6" + }, + "bin": { + "check-clang-format": "bin/check-clang-format.js", + "clang-format": "index.js", + "git-clang-format": "bin/git-clang-format" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + }, "dependencies": { "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "brace-expansion": { "version": "1.1.11", @@ -24,11 +202,11 @@ } }, "clang-format": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz", - "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.8.0.tgz", + "integrity": "sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw==", "requires": { - "async": "^1.5.2", + "async": "^3.2.3", "glob": "^7.0.0", "resolve": "^1.1.6" } @@ -43,10 +221,15 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -56,6 +239,14 @@ "path-is-absolute": "^1.0.0" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -66,14 +257,22 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "requires": { + "has": "^1.0.3" + } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -97,13 +296,20 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "requires": { - "path-parse": "^1.0.5" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/tools/clang-format/package.json b/tools/clang-format/package.json index 8432296ed6f..4ae7d36a33c 100644 --- a/tools/clang-format/package.json +++ b/tools/clang-format/package.json @@ -4,6 +4,6 @@ "description": "Formatting C++ files for Node.js core", "license": "MIT", "dependencies": { - "clang-format": "1.2.3" + "clang-format": "^1.8.0" } } diff --git a/tools/code_cache/README.md b/tools/code_cache/README.md index 8feb280caae..34726451a81 100644 --- a/tools/code_cache/README.md +++ b/tools/code_cache/README.md @@ -18,8 +18,8 @@ In the default build of the Node.js executable, to embed the V8 code cache of the native modules into the Node.js executable, `libnode` is first built with these unresolved symbols: -- `node::native_module::has_code_cache` -- `node::native_module::NativeModuleEnv::InitializeCodeCache` +- `node::builtins::has_code_cache` +- `node::builtins::NativeModuleEnv::InitializeCodeCache` Then the `mkcodecache` executable is built with C++ files in this directory, as well as `src/node_code_cache_stub.cc` which defines the unresolved symbols. diff --git a/tools/code_cache/cache_builder.cc b/tools/code_cache/cache_builder.cc index 837357a0fbd..6d253d955d8 100644 --- a/tools/code_cache/cache_builder.cc +++ b/tools/code_cache/cache_builder.cc @@ -1,6 +1,7 @@ #include "cache_builder.h" #include "debug_utils-inl.h" -#include "node_native_module.h" +#include "node_builtins.h" +#include "node_builtins_env.h" #include "util.h" #include @@ -10,7 +11,7 @@ #include namespace node { -namespace native_module { +namespace builtins { using v8::Context; using v8::Local; @@ -68,12 +69,12 @@ static std::string GenerateCodeCache( const std::map& data) { std::stringstream ss; ss << R"(#include -#include "node_native_module_env.h" +#include "node_builtins_env.h" // This file is generated by mkcodecache (tools/code_cache/mkcodecache.cc) namespace node { -namespace native_module { +namespace builtins { const bool has_code_cache = true; @@ -95,9 +96,9 @@ const bool has_code_cache = true; total_str.c_str()); } - ss << R"(void NativeModuleEnv::InitializeCodeCache() { - NativeModuleCacheMap& code_cache = - *NativeModuleLoader::GetInstance()->code_cache(); + ss << R"(void BuiltinEnv::InitializeCodeCache() { + BuiltinCodeCacheMap& code_cache = + *BuiltinLoader::GetInstance()->code_cache(); CHECK(code_cache.empty()); auto policy = v8::ScriptCompiler::CachedData::BufferPolicy::BufferNotOwned; )"; @@ -110,15 +111,15 @@ const bool has_code_cache = true; ss << R"( } -} // namespace native_module +} // namespace builtins } // namespace node )"; return ss.str(); } std::string CodeCacheBuilder::Generate(Local context) { - NativeModuleLoader* loader = NativeModuleLoader::GetInstance(); - std::vector ids = loader->GetModuleIds(); + BuiltinLoader* loader = BuiltinLoader::GetInstance(); + std::vector ids = loader->GetBuiltinIds(); std::map data; @@ -128,7 +129,7 @@ std::string CodeCacheBuilder::Generate(Local context) { // are still very flexible. We should look into auto-generating // the parameters from the source somehow. if (loader->CanBeRequired(id.c_str())) { - NativeModuleLoader::Result result; + BuiltinLoader::Result result; USE(loader->CompileAsModule(context, id.c_str(), &result)); ScriptCompiler::CachedData* cached_data = loader->GetCodeCache(id.c_str()); @@ -144,5 +145,5 @@ std::string CodeCacheBuilder::Generate(Local context) { return GenerateCodeCache(data); } -} // namespace native_module +} // namespace builtins } // namespace node diff --git a/tools/code_cache/cache_builder.h b/tools/code_cache/cache_builder.h index d5a6cd4241d..11f51e463d6 100644 --- a/tools/code_cache/cache_builder.h +++ b/tools/code_cache/cache_builder.h @@ -5,12 +5,12 @@ #include "v8.h" namespace node { -namespace native_module { +namespace builtins { class CodeCacheBuilder { public: static std::string Generate(v8::Local context); }; -} // namespace native_module +} // namespace builtins } // namespace node #endif // TOOLS_CODE_CACHE_CACHE_BUILDER_H_ diff --git a/tools/code_cache/mkcodecache.cc b/tools/code_cache/mkcodecache.cc index babf8535dbb..41028784d69 100644 --- a/tools/code_cache/mkcodecache.cc +++ b/tools/code_cache/mkcodecache.cc @@ -9,7 +9,7 @@ #include "libplatform/libplatform.h" #include "v8.h" -using node::native_module::CodeCacheBuilder; +using node::builtins::CodeCacheBuilder; using v8::ArrayBuffer; using v8::Context; using v8::HandleScope; diff --git a/tools/compress_json.py b/tools/compress_json.py index dfe64063aea..fdb3d536cf3 100644 --- a/tools/compress_json.py +++ b/tools/compress_json.py @@ -21,7 +21,7 @@ # To make decompression a little easier, we prepend the compressed data # with the size of the uncompressed data as a 24 bits BE unsigned integer. - assert len(text) < 1 << 24, 'Uncompressed JSON must be < 16 MB.' + assert len(text) < 1 << 24, 'Uncompressed JSON must be < 16 MiB.' data = struct.pack('>I', len(text))[1:4] + data step = 20 diff --git a/tools/cpplint.py b/tools/cpplint.py index b4a4586caaf..06fc45abf1a 100755 --- a/tools/cpplint.py +++ b/tools/cpplint.py @@ -41,6 +41,11 @@ same line, but it is far from perfect (in either direction). """ +# cpplint predates fstrings +# pylint: disable=consider-using-f-string + +# pylint: disable=invalid-name + import codecs import copy import getopt @@ -59,7 +64,7 @@ # if empty, use defaults _valid_extensions = set([]) -__VERSION__ = '1.5.5' +__VERSION__ = '1.6.0' try: xrange # Python 2 @@ -1928,6 +1933,7 @@ def __init__(self, lines): self.raw_lines = lines self.num_lines = len(lines) self.lines_without_raw_strings = CleanseRawStrings(lines) + # # pylint: disable=consider-using-enumerate for linenum in range(len(self.lines_without_raw_strings)): self.lines.append(CleanseComments( self.lines_without_raw_strings[linenum])) @@ -5164,10 +5170,12 @@ def CheckIncludeLine(filename, clean_lines, linenum, include_state, error): # # We also make an exception for Lua headers, which follow google # naming convention but not the include convention. - match = Match(r'#include\s*"([^/]+\.h)"', line) - if match and not _THIRD_PARTY_HEADERS_PATTERN.match(match.group(1)): - error(filename, linenum, 'build/include_subdir', 4, - 'Include the directory when naming .h files') + match = Match(r'#include\s*"([^/]+\.(.*))"', line) + if match: + if (IsHeaderExtension(match.group(2)) and + not _THIRD_PARTY_HEADERS_PATTERN.match(match.group(1))): + error(filename, linenum, 'build/include_subdir', 4, + 'Include the directory when naming header files') # we shouldn't include a file more than once. actually, there are a # handful of instances where doing so is okay, but in general it's @@ -6620,7 +6628,7 @@ def ProcessConfigOverrides(filename): continue try: - with open(cfg_file) as file_handle: + with open(cfg_file, encoding='utf-8') as file_handle: for line in file_handle: line, _, _ = line.partition('#') # Remove comments. if not line.strip(): diff --git a/tools/dep_checker/README.md b/tools/dep_checker/README.md new file mode 100644 index 00000000000..84e1fab640d --- /dev/null +++ b/tools/dep_checker/README.md @@ -0,0 +1,72 @@ +# Node.js dependency vulnerability checker + +This script queries the [National Vulnerability Database (NVD)](https://nvd.nist.gov/) and +the [GitHub Advisory Database](https://github.com/advisories) for vulnerabilities found +in Node's dependencies. + +## How to use + +### Database authentication + +- In order to query the GitHub Advisory Database, + a [Personal Access Token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) + has to be created (no permissions need to be given to the token, since it's only used to query the public database). +- The NVD can be queried without authentication, but it will be rate limited to one query every six seconds. In order to + remove + that limitation [request an API key](https://nvd.nist.gov/developers/request-an-api-key) and pass it as a parameter. + +### Running the script + +Once acquired, the script can be run as follows: + +```shell +cd node/tools/dep_checker/ +pip install -r requirements.txt + +# Python >= 3.9 required +python main.py --gh-token=$PERSONAL_ACCESS_TOKEN --nvd-key=$NVD_API_KEY + +# The command can also be run without parameters +# This will skip querying the GitHub Advisory Database, and query the NVD +# using the anonymous (rate-limited) API +python main.py +``` + +## Example output + +``` +WARNING: New vulnerabilities found +- npm (version 1.2.1) : + - GHSA-v3jv-wrf4-5845: https://github.com/advisories/GHSA-v3jv-wrf4-5845 + - GHSA-93f3-23rq-pjfp: https://github.com/advisories/GHSA-93f3-23rq-pjfp + - GHSA-m6cx-g6qm-p2cx: https://github.com/advisories/GHSA-m6cx-g6qm-p2cx + - GHSA-4328-8hgf-7wjr: https://github.com/advisories/GHSA-4328-8hgf-7wjr + - GHSA-x8qc-rrcw-4r46: https://github.com/advisories/GHSA-x8qc-rrcw-4r46 + - GHSA-m5h6-hr3q-22h5: https://github.com/advisories/GHSA-m5h6-hr3q-22h5 +- acorn (version 6.0.0) : + - GHSA-6chw-6frg-f759: https://github.com/advisories/GHSA-6chw-6frg-f759 + +For each dependency and vulnerability, check the following: +- Check the vulnerability's description to see if it applies to the dependency as +used by Node. If not, the vulnerability ID (either a CVE or a GHSA) can be added to the ignore list in +dependencies.py. IMPORTANT: Only do this if certain that the vulnerability found is a false positive. +- Otherwise, the vulnerability found must be remediated by updating the dependency in the Node repo to a +non-affected version. +``` + +## Implementation details + +- For each dependency in Node's `deps/` folder, the script parses their version number and queries the databases to find + vulnerabilities for that specific version. +- The queries can return false positives ( + see [this](https://github.com/nodejs/security-wg/issues/802#issuecomment-1144207417) comment for an example). These + can be ignored by adding the vulnerability to the `ignore_list` in `dependencies.py` +- If no NVD API key is provided, the script will take a while to finish (~2 min) because queries to the NVD + are [rate-limited](https://nvd.nist.gov/developers/start-here) +- If any vulnerabilities are found, the script returns 1 and prints out a list with the ID and a link to a description + of + the vulnerability. This is the case except when the ID matches one in the ignore-list (inside `dependencies.py`) in + which case the vulnerability is ignored. + + + diff --git a/tools/dep_checker/dependencies.py b/tools/dep_checker/dependencies.py new file mode 100644 index 00000000000..b0c6943aa42 --- /dev/null +++ b/tools/dep_checker/dependencies.py @@ -0,0 +1,99 @@ +"""A list of dependencies, including their CPE, names and keywords for querying different vulnerability databases""" + +from typing import Optional +import versions_parser as vp + + +class CPE: + def __init__(self, vendor: str, product: str): + self.vendor = vendor + self.product = product + + +class Dependency: + def __init__( + self, + version: str, + cpe: Optional[CPE] = None, + npm_name: Optional[str] = None, + keyword: Optional[str] = None, + ): + self.version = version + self.cpe = cpe + self.npm_name = npm_name + self.keyword = keyword + + def get_cpe(self) -> Optional[str]: + if self.cpe: + return f"cpe:2.3:a:{self.cpe.vendor}:{self.cpe.product}:{self.version}:*:*:*:*:*:*:*" + else: + return None + + +ignore_list: list[str] = [ + "CVE-2018-25032", # zlib, already fixed in the fork Node uses (Chromium's) + "CVE-2007-5536", # openssl, old and only in combination with HP-UX + "CVE-2019-0190", # openssl, can be only triggered in combination with Apache HTTP Server version 2.4.37 +] + +dependencies: dict[str, Dependency] = { + "zlib": Dependency( + version=vp.get_zlib_version(), cpe=CPE(vendor="zlib", product="zlib") + ), + # TODO: Add V8 + # "V8": Dependency("cpe:2.3:a:google:chrome:*:*:*:*:*:*:*:*", "v8"), + "uvwasi": Dependency(version=vp.get_uvwasi_version(), cpe=None, keyword="uvwasi"), + "libuv": Dependency( + version=vp.get_libuv_version(), cpe=CPE(vendor="libuv_project", product="libuv") + ), + "undici": Dependency( + version=vp.get_undici_version(), + cpe=CPE(vendor="nodejs", product="undici"), + npm_name="undici", + ), + "OpenSSL": Dependency( + version=vp.get_openssl_version(), cpe=CPE(vendor="openssl", product="openssl") + ), + "npm": Dependency( + version=vp.get_npm_version(), + cpe=CPE(vendor="npmjs", product="npm"), + npm_name="npm", + ), + "nghttp3": Dependency( + version=vp.get_nghttp3_version(), cpe=None, keyword="nghttp3" + ), + "ngtcp2": Dependency(version=vp.get_ngtcp2_version(), cpe=None, keyword="ngtcp2"), + "nghttp2": Dependency( + version=vp.get_nghttp2_version(), cpe=CPE(vendor="nghttp2", product="nghttp2") + ), + "llhttp": Dependency( + version=vp.get_llhttp_version(), + cpe=CPE(vendor="llhttp", product="llhttp"), + npm_name="llhttp", + ), + "ICU": Dependency( + version=vp.get_icu_version(), + cpe=CPE(vendor="icu-project", product="international_components_for_unicode"), + ), + "HdrHistogram": Dependency(version="0.11.2", cpe=None, keyword="hdrhistogram"), + "corepack": Dependency( + version=vp.get_corepack_version(), + cpe=None, + keyword="corepack", + npm_name="corepack", + ), + "CJS Module Lexer": Dependency( + version=vp.get_cjs_lexer_version(), + cpe=None, + keyword="cjs-module-lexer", + npm_name="cjs-module-lexer", + ), + "c-ares": Dependency( + version=vp.get_c_ares_version(), + cpe=CPE(vendor="c-ares_project", product="c-ares"), + ), + "brotli": Dependency( + version=vp.get_brotli_version(), cpe=CPE(vendor="google", product="brotli") + ), + "acorn": Dependency(version=vp.get_acorn_version(), cpe=None, npm_name="acorn"), +} diff --git a/tools/dep_checker/main.py b/tools/dep_checker/main.py new file mode 100644 index 00000000000..6675f48f570 --- /dev/null +++ b/tools/dep_checker/main.py @@ -0,0 +1,180 @@ +""" Node.js dependency vulnerability checker + +This script queries the National Vulnerability Database (NVD) and the GitHub Advisory Database for vulnerabilities found +in Node's dependencies. + +For each dependency in Node's `deps/` folder, the script parses their version number and queries the databases to find +vulnerabilities for that specific version. + +If any vulnerabilities are found, the script returns 1 and prints out a list with the ID and a link to a description of +the vulnerability. This is the case except when the ID matches one in the ignore-list (inside `dependencies.py`) in +which case the vulnerability is ignored. +""" + +from argparse import ArgumentParser +from collections import defaultdict +from dependencies import ignore_list, dependencies +from gql import gql, Client +from gql.transport.aiohttp import AIOHTTPTransport +from nvdlib import searchCVE # type: ignore +from packaging.specifiers import SpecifierSet +from typing import Optional + + +class Vulnerability: + def __init__(self, id: str, url: str): + self.id = id + self.url = url + + +vulnerability_found_message = """For each dependency and vulnerability, check the following: +- Check that the dependency's version printed by the script corresponds to the version present in the Node repo. +If not, update dependencies.py with the actual version number and run the script again. +- If the version is correct, check the vulnerability's description to see if it applies to the dependency as +used by Node. If not, the vulnerability ID (either a CVE or a GHSA) can be added to the ignore list in +dependencies.py. IMPORTANT: Only do this if certain that the vulnerability found is a false positive. +- Otherwise, the vulnerability found must be remediated by updating the dependency in the Node repo to a +non-affected version, followed by updating dependencies.py with the new version. +""" + + +github_vulnerabilities_query = gql( + """ + query($package_name:String!) { + securityVulnerabilities(package:$package_name, last:10) { + nodes { + vulnerableVersionRange + advisory { + ghsaId + permalink + withdrawnAt + } + } + } + } +""" +) + + +def query_ghad(gh_token: str) -> dict[str, list[Vulnerability]]: + """Queries the GitHub Advisory Database for vulnerabilities reported for Node's dependencies. + + The database supports querying by package name in the NPM ecosystem, so we only send queries for the dependencies + that are also NPM packages. + """ + + deps_in_npm = { + name: dep for name, dep in dependencies.items() if dep.npm_name is not None + } + + transport = AIOHTTPTransport( + url="https://api.github.com/graphql", + headers={"Authorization": f"bearer {gh_token}"}, + ) + client = Client( + transport=transport, + fetch_schema_from_transport=True, + serialize_variables=True, + parse_results=True, + ) + + found_vulnerabilities: dict[str, list[Vulnerability]] = defaultdict(list) + for name, dep in deps_in_npm.items(): + variables_package = { + "package_name": dep.npm_name, + } + result = client.execute( + github_vulnerabilities_query, variable_values=variables_package + ) + matching_vulns = [ + v + for v in result["securityVulnerabilities"]["nodes"] + if v["advisory"]["withdrawnAt"] is None + and dep.version in SpecifierSet(v["vulnerableVersionRange"]) + and v["advisory"]["ghsaId"] not in ignore_list + ] + if matching_vulns: + found_vulnerabilities[name].extend( + [ + Vulnerability( + id=vuln["advisory"]["ghsaId"], url=vuln["advisory"]["permalink"] + ) + for vuln in matching_vulns + ] + ) + + return found_vulnerabilities + + +def query_nvd(api_key: Optional[str]) -> dict[str, list[Vulnerability]]: + """Queries the National Vulnerability Database for vulnerabilities reported for Node's dependencies. + + The database supports querying by CPE (Common Platform Enumeration) or by a keyword present in the CVE's + description. + Since some of Node's dependencies don't have an associated CPE, we use their name as a keyword in the query. + """ + deps_in_nvd = { + name: dep + for name, dep in dependencies.items() + if dep.cpe is not None or dep.keyword is not None + } + found_vulnerabilities: dict[str, list[Vulnerability]] = defaultdict(list) + for name, dep in deps_in_nvd.items(): + query_results = [ + cve + for cve in searchCVE( + cpeMatchString=dep.get_cpe(), keyword=dep.keyword, key=api_key + ) + if cve.id not in ignore_list + ] + if query_results: + found_vulnerabilities[name].extend( + [Vulnerability(id=cve.id, url=cve.url) for cve in query_results] + ) + + return found_vulnerabilities + + +def main(): + parser = ArgumentParser( + description="Query the NVD and the GitHub Advisory Database for new vulnerabilities in Node's dependencies" + ) + parser.add_argument( + "--gh-token", + help="the GitHub authentication token for querying the GH Advisory Database", + ) + parser.add_argument( + "--nvd-key", + help="the NVD API key for querying the National Vulnerability Database", + ) + gh_token = parser.parse_args().gh_token + nvd_key = parser.parse_args().nvd_key + if gh_token is None: + print( + "Warning: GitHub authentication token not provided, skipping GitHub Advisory Database queries" + ) + if nvd_key is None: + print( + "Warning: NVD API key not provided, queries will be slower due to rate limiting" + ) + ghad_vulnerabilities: dict[str, list[Vulnerability]] = ( + {} if gh_token is None else query_ghad(gh_token) + ) + nvd_vulnerabilities: dict[str, list[Vulnerability]] = query_nvd(nvd_key) + + if not ghad_vulnerabilities and not nvd_vulnerabilities: + print(f"No new vulnerabilities found ({len(ignore_list)} ignored)") + return 0 + else: + print("WARNING: New vulnerabilities found") + for source in (ghad_vulnerabilities, nvd_vulnerabilities): + for name, vulns in source.items(): + print(f"- {name} (version {dependencies[name].version}) :") + for v in vulns: + print(f"\t- {v.id}: {v.url}") + print(f"\n{vulnerability_found_message}") + return 1 + + +if __name__ == "__main__": + exit(main()) diff --git a/tools/dep_checker/requirements.txt b/tools/dep_checker/requirements.txt new file mode 100644 index 00000000000..3a41c5824b7 --- /dev/null +++ b/tools/dep_checker/requirements.txt @@ -0,0 +1,3 @@ +gql[aiohttp] +nvdlib==0.5.8 +packaging diff --git a/tools/dep_checker/versions_parser.py b/tools/dep_checker/versions_parser.py new file mode 100644 index 00000000000..3a385bf1d2d --- /dev/null +++ b/tools/dep_checker/versions_parser.py @@ -0,0 +1,169 @@ +"""Utility functions to parse version numbers from each of Node's dependencies""" + +from pathlib import Path +import re + + +def get_package_json_version(path: Path) -> str: + with open(path, "r") as f: + matches = re.search('"version": "(?P.*)"', f.read()) + if matches is None: + raise RuntimeError(f"Error extracting version number from {path}") + return matches.groupdict()["version"] + + +def get_acorn_version() -> str: + return get_package_json_version(Path("../../deps/acorn/acorn/package.json")) + + +def get_brotli_version() -> str: + with open("../../deps/brotli/c/common/version.h", "r") as f: + matches = re.search("#define BROTLI_VERSION (?P.*)", f.read()) + if matches is None: + raise RuntimeError("Error extracting version number for brotli") + hex_version = matches.groupdict()["version"] + major_version = int(hex_version, 16) >> 24 + minor_version = int(hex_version, 16) >> 12 & 0xFF + patch_version = int(hex_version, 16) & 0xFFFFF + return f"{major_version}.{minor_version}.{patch_version}" + + +def get_c_ares_version() -> str: + with open("../../deps/cares/include/ares_version.h", "r") as f: + matches = re.search('#define ARES_VERSION_STR "(?P.*)"', f.read()) + if matches is None: + raise RuntimeError("Error extracting version number for c-ares") + return matches.groupdict()["version"] + + +def get_cjs_lexer_version() -> str: + return get_package_json_version(Path("../../deps/cjs-module-lexer/package.json")) + + +def get_corepack_version() -> str: + return get_package_json_version(Path("../../deps/corepack/package.json")) + + +def get_icu_version() -> str: + with open("../../deps/icu-small/source/common/unicode/uvernum.h", "r") as f: + matches = re.search('#define U_ICU_VERSION "(?P.*)"', f.read()) + if matches is None: + raise RuntimeError("Error extracting version number for ICU") + return matches.groupdict()["version"] + + +def get_llhttp_version() -> str: + with open("../../deps/llhttp/include/llhttp.h", "r") as f: + matches = re.search( + "#define LLHTTP_VERSION_MAJOR (?P.*)\n" + "#define LLHTTP_VERSION_MINOR (?P.*)\n" + "#define LLHTTP_VERSION_PATCH (?P.*)", + f.read(), + re.MULTILINE, + ) + if matches is None: + raise RuntimeError("Error extracting version number for llhttp") + versions = matches.groupdict() + return f"{versions['major']}.{versions['minor']}.{versions['patch']}" + + +def get_nghttp2_version() -> str: + with open("../../deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h", "r") as f: + matches = re.search('#define NGHTTP2_VERSION "(?P.*)"', f.read()) + if matches is None: + raise RuntimeError("Error extracting version number for nghttp2") + return matches.groupdict()["version"] + + +def get_ngtcp2_version() -> str: + with open("../../deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h", "r") as f: + matches = re.search('#define NGTCP2_VERSION "(?P.*)"', f.read()) + if matches is None: + raise RuntimeError("Error extracting version number for ngtcp2") + return matches.groupdict()["version"] + + +def get_nghttp3_version() -> str: + with open("../../deps/ngtcp2/nghttp3/lib/includes/nghttp3/version.h", "r") as f: + matches = re.search('#define NGHTTP3_VERSION "(?P.*)"', f.read()) + if matches is None: + raise RuntimeError("Error extracting version number for nghttp3") + return matches.groupdict()["version"] + + +def get_npm_version() -> str: + return get_package_json_version(Path("../../deps/npm/package.json")) + + +def get_openssl_version() -> str: + with open("../../deps/openssl/openssl/VERSION.dat", "r") as f: + matches = re.search( + "MAJOR=(?P.*)\n" "MINOR=(?P.*)\n" "PATCH=(?P.*)", + f.read(), + re.MULTILINE, + ) + if matches is None: + raise RuntimeError("Error extracting version number for openssl") + versions = matches.groupdict() + return f"{versions['major']}.{versions['minor']}.{versions['patch']}" + + +def get_undici_version() -> str: + return get_package_json_version(Path("../../deps/undici/src/package.json")) + + +def get_libuv_version() -> str: + with open("../../deps/uv/include/uv/version.h", "r") as f: + matches = re.search( + "#define UV_VERSION_MAJOR (?P.*)\n" + "#define UV_VERSION_MINOR (?P.*)\n" + "#define UV_VERSION_PATCH (?P.*)", + f.read(), + re.MULTILINE, + ) + if matches is None: + raise RuntimeError("Error extracting version number for libuv") + versions = matches.groupdict() + return f"{versions['major']}.{versions['minor']}.{versions['patch']}" + + +def get_uvwasi_version() -> str: + with open("../../deps/uvwasi/include/uvwasi.h", "r") as f: + matches = re.search( + "#define UVWASI_VERSION_MAJOR (?P.*)\n" + "#define UVWASI_VERSION_MINOR (?P.*)\n" + "#define UVWASI_VERSION_PATCH (?P.*)", + f.read(), + re.MULTILINE, + ) + if matches is None: + raise RuntimeError("Error extracting version number for uvwasi") + versions = matches.groupdict() + return f"{versions['major']}.{versions['minor']}.{versions['patch']}" + + +def get_v8_version() -> str: + with open("../../deps/v8/include/v8-version.h", "r") as f: + matches = re.search( + "#define V8_MAJOR_VERSION (?P.*)\n" + "#define V8_MINOR_VERSION (?P.*)\n" + "#define V8_BUILD_NUMBER (?P.*)\n" + "#define V8_PATCH_LEVEL (?P.*)\n", + f.read(), + re.MULTILINE, + ) + if matches is None: + raise RuntimeError("Error extracting version number for v8") + versions = matches.groupdict() + patch_suffix = "" if versions["patch"] == "0" else f".{versions['patch']}" + return ( + f"{versions['major']}.{versions['minor']}.{versions['build']}{patch_suffix}" + ) + + +def get_zlib_version() -> str: + with open("../../deps/zlib/zlib.h", "r") as f: + matches = re.search('#define ZLIB_VERSION "(?P.*)"', f.read()) + if matches is None: + raise RuntimeError("Error extracting version number for zlib") + return matches.groupdict()["version"] diff --git a/tools/doc/allhtml.mjs b/tools/doc/allhtml.mjs index 50f145034cc..fb0b719ac8a 100644 --- a/tools/doc/allhtml.mjs +++ b/tools/doc/allhtml.mjs @@ -2,6 +2,7 @@ // of the generated html files. import fs from 'fs'; +import buildCSSForFlavoredJS from './buildCSSForFlavoredJS.mjs'; const source = new URL('../../out/doc/api/', import.meta.url); @@ -90,7 +91,14 @@ all = all.slice(0, tocStart.index + tocStart[0].length) + // Replace apicontent with the concatenated set of apicontents from each source. const apiStart = /<\w+ id="apicontent">\s*/.exec(all); const apiEnd = all.lastIndexOf(''); -all = all.slice(0, apiStart.index + apiStart[0].length) + +all = all.slice(0, apiStart.index + apiStart[0].length) + .replace( + '\n', + buildCSSForFlavoredJS(new Set(Array.from( + apicontent.matchAll(/(?<=
)/g),
+        (x) => Number(x[0])
+      ))) + '\n'
+    ) +
   apicontent +
   all.slice(apiEnd);
 
diff --git a/tools/doc/apilinks.mjs b/tools/doc/apilinks.mjs
index a1b660f1cfa..749bf7966aa 100644
--- a/tools/doc/apilinks.mjs
+++ b/tools/doc/apilinks.mjs
@@ -41,7 +41,7 @@ const remoteUrl = execSync(`git config remote.${trackingRemote}.url`);
 const repo = (remoteUrl.match(/(\w+\/\w+)\.git\r?\n?$/) ||
              ['', 'nodejs/node'])[1];
 
-const hash = execSync('git log -1 --pretty=%H') || 'master';
+const hash = execSync('git log -1 --pretty=%H') || 'main';
 const tag = execSync(`git describe --contains ${hash}`).split('\n')[0] || hash;
 
 // Extract definitions from each file specified.
diff --git a/tools/doc/buildCSSForFlavoredJS.mjs b/tools/doc/buildCSSForFlavoredJS.mjs
new file mode 100644
index 00000000000..6b355ab1760
--- /dev/null
+++ b/tools/doc/buildCSSForFlavoredJS.mjs
@@ -0,0 +1,53 @@
+const CHAR_THRESHOLD = 68; // Around 68 characters, we have to take into
+//                            account the left column that appears on screen
+//                            wider than 1024px.
+
+const ESTIMATED_CHAR_WIDTH = 8; // If the root element font-size is 16px (default value), 1ch is 7.8025px.
+const TOGGLE_WIDTH = 142; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L954
+
+const PRE_MARGIN_LEFT = 16; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L516
+const PRE_MARGIN_RIGHT = 16; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L516
+const PRE_PADDING_LEFT = 16; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L513
+const PRE_PADDING_RIGHT = 16; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L513
+
+
+const COLUMN_RIGHT_MARGIN_LEFT_LARGE_SCREEN = 234; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L653
+const COLUMN_RIGHT_MARGIN_LEFT_SMALL_SCREEN = 0; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L906
+const COLUMN_RIGHT_MARGIN_RIGHT_LARGE_SCREEN = 0;
+const COLUMN_RIGHT_MARGIN_RIGHT_SMALL_SCREEN = 0;
+const COLUMN_RIGHT_PADDING_LEFT_LARGE_SCREEN = 24; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L655
+const COLUMN_RIGHT_PADDING_LEFT_SMALL_SCREEN = 8; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L907
+const COLUMN_RIGHT_PADDING_RIGHT_LARGE_SCREEN = 32; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L654
+const COLUMN_RIGHT_PADDING_RIGHT_SMALL_SCREEN = 8; // https://github.com/nodejs/node/blob/dbd938549b16718f2e4cc2809746b8c44a191b1d/doc/api_assets/style.css#L908
+
+const getMarginLeft = (charCount) =>
+  (charCount > CHAR_THRESHOLD ?
+    COLUMN_RIGHT_MARGIN_LEFT_LARGE_SCREEN :
+    COLUMN_RIGHT_MARGIN_LEFT_SMALL_SCREEN) + PRE_MARGIN_LEFT;
+const getPaddingLeft = (charCount) =>
+  (charCount > CHAR_THRESHOLD ?
+    COLUMN_RIGHT_PADDING_LEFT_LARGE_SCREEN :
+    COLUMN_RIGHT_PADDING_LEFT_SMALL_SCREEN) + PRE_PADDING_LEFT;
+const getPaddingRight = (charCount) =>
+  (charCount > CHAR_THRESHOLD ?
+    COLUMN_RIGHT_PADDING_RIGHT_LARGE_SCREEN :
+    COLUMN_RIGHT_PADDING_RIGHT_SMALL_SCREEN) + PRE_PADDING_RIGHT;
+const getMarginRight = (charCount) =>
+  (charCount > CHAR_THRESHOLD ?
+    COLUMN_RIGHT_MARGIN_RIGHT_LARGE_SCREEN :
+    COLUMN_RIGHT_MARGIN_RIGHT_SMALL_SCREEN) + PRE_MARGIN_RIGHT;
+
+
+export default function buildCSSForFlavoredJS(dynamicSizes) {
+  if (dynamicSizes == null || dynamicSizes.length === 0) return '';
+
+  return ``;
+}
diff --git a/tools/doc/html.mjs b/tools/doc/html.mjs
index 1c5ad61182b..373f5487a31 100644
--- a/tools/doc/html.mjs
+++ b/tools/doc/html.mjs
@@ -33,6 +33,9 @@ import { visit } from 'unist-util-visit';
 
 import * as common from './common.mjs';
 import * as typeParser from './type-parser.mjs';
+import buildCSSForFlavoredJS from './buildCSSForFlavoredJS.mjs';
+
+const dynamicSizes = Object.create(null);
 
 const { highlight, getLanguage } = highlightJs;
 
@@ -90,6 +93,8 @@ function processContent(content) {
 }
 
 export function toHTML({ input, content, filename, nodeVersion, versions }) {
+  const dynamicSizesForThisFile = dynamicSizes[filename];
+
   filename = path.basename(filename, '.md');
 
   const id = filename.replace(/\W+/g, '-');
@@ -99,6 +104,7 @@ export function toHTML({ input, content, filename, nodeVersion, versions }) {
                      .replace('__SECTION__', content.section)
                      .replace(/__VERSION__/g, nodeVersion)
                      .replace(/__TOC__/g, content.toc)
+                     .replace('__JS_FLAVORED_DYNAMIC_CSS__', buildCSSForFlavoredJS(dynamicSizesForThisFile))
                      .replace(/__TOC_PICKER__/g, tocPicker(id, content))
                      .replace(/__GTOC_PICKER__/g, gtocPicker(id))
                      .replace(/__GTOC__/g, gtocHTML.replace(
@@ -228,14 +234,19 @@ export function preprocessElements({ filename }) {
           const previousNode = parent.children[index - 1] || {};
           const nextNode = parent.children[index + 1] || {};
 
+          const charCountFirstTwoLines = Math.max(...node.value.split('\n', 2).map((str) => str.length));
+
           if (!isJSFlavorSnippet(previousNode) &&
               isJSFlavorSnippet(nextNode) &&
               nextNode.lang !== node.lang) {
             // Saving the highlight code as value to be added in the next node.
             node.value = highlighted;
+            node.charCountFirstTwoLines = charCountFirstTwoLines;
           } else if (isJSFlavorSnippet(previousNode) &&
                      previousNode.lang !== node.lang) {
-            node.value = '
' +
+            const actualCharCount = Math.max(charCountFirstTwoLines, previousNode.charCountFirstTwoLines);
+            (dynamicSizes[filename] ??= new Set()).add(actualCharCount);
+            node.value = `
` +
               'Edit on GitHub`;
+  return `
  • Edit on GitHub
  • `; } function gtocPicker(id) { diff --git a/tools/doc/package-lock.json b/tools/doc/package-lock.json index 629441b0bd1..e3ea0455b45 100644 --- a/tools/doc/package-lock.json +++ b/tools/doc/package-lock.json @@ -11,7 +11,7 @@ "node-doc-generator": "generate.js" }, "devDependencies": { - "highlight.js": "^11.5.0", + "highlight.js": "^11.6.0", "js-yaml": "^4.1.0", "rehype-raw": "^6.1.1", "rehype-stringify": "^9.0.3", @@ -23,7 +23,7 @@ "to-vfile": "^7.2.3", "unified": "^10.1.2", "unist-util-select": "^4.0.1", - "unist-util-visit": "^4.1.0" + "unist-util-visit": "^4.1.1" }, "engines": { "node": ">=14.8.0" @@ -99,7 +99,7 @@ "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "node_modules/ccount": { @@ -113,9 +113,9 @@ } }, "node_modules/character-entities": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.1.tgz", - "integrity": "sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, "funding": { "type": "github", @@ -159,9 +159,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -176,9 +176,9 @@ } }, "node_modules/decode-named-character-reference": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.1.tgz", - "integrity": "sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dev": true, "dependencies": { "character-entities": "^2.0.0" @@ -189,18 +189,18 @@ } }, "node_modules/dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true, "engines": { "node": ">=0.3.1" @@ -240,7 +240,7 @@ "node_modules/format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "dev": true, "engines": { "node": ">=0.4.x" @@ -313,9 +313,9 @@ } }, "node_modules/hast-util-raw": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.1.tgz", - "integrity": "sha512-wgtppqXVdXzkDXDFclLLdAyVUJSKMYYi6LWIAbA8oFqEdwksYIcPGM3RkKV1Dfn5GElvxhaOCs0jmCOMayxd3A==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.2.tgz", + "integrity": "sha512-0x3BhhdlBcqRIKyc095lBSDvmQNMY3Eulj2PLsT5XCyKYrxssI5yr3P4Kv/PBo1s/DMkZy2voGkMXECnFCZRLQ==", "dev": true, "dependencies": { "@types/hast": "^2.0.0", @@ -416,9 +416,9 @@ } }, "node_modules/highlight.js": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.5.0.tgz", - "integrity": "sha512-SM6WDj5/C+VfIY8pZ6yW6Xa0Fm1tniYVYWYW1Q/DcMnISZFrC3aQAZZZFAAZtybKNrGId3p/DNbFTtcTXXgYBw==", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.6.0.tgz", + "integrity": "sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw==", "dev": true, "engines": { "node": ">=12.0.0" @@ -464,9 +464,9 @@ } }, "node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "engines": { "node": ">=12" @@ -488,9 +488,9 @@ } }, "node_modules/kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, "engines": { "node": ">=6" @@ -517,29 +517,14 @@ } }, "node_modules/mdast-util-definitions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz", - "integrity": "sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz", + "integrity": "sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==", "dev": true, "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "unist-util-visit": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", @@ -547,14 +532,14 @@ } }, "node_modules/mdast-util-find-and-replace": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", - "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz", + "integrity": "sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==", "dev": true, "dependencies": { "escape-string-regexp": "^5.0.0", "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", @@ -599,16 +584,18 @@ } }, "node_modules/mdast-util-gfm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.0.tgz", - "integrity": "sha512-wMwejlTN3EQADPFuvxe8lmGsay3+f6gSJKdAHR6KBJzpcxvsjJSILB9K6u6G7eQLC7iOTyVIHYGui9uBc9r1Tg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", + "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", "dev": true, "dependencies": { + "mdast-util-from-markdown": "^1.0.0", "mdast-util-gfm-autolink-literal": "^1.0.0", "mdast-util-gfm-footnote": "^1.0.0", "mdast-util-gfm-strikethrough": "^1.0.0", "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0" + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" }, "funding": { "type": "opencollective", @@ -661,12 +648,13 @@ } }, "node_modules/mdast-util-gfm-table": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.3.tgz", - "integrity": "sha512-B/tgpJjND1qIZM2WZst+NYnb0notPE6m0J+YOe3NOHXyEmvK38ytxaOsgz4BvrRPQQcNbRrTzSHMPnBkj1fCjg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz", + "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==", "dev": true, "dependencies": { "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", "mdast-util-to-markdown": "^1.3.0" }, "funding": { @@ -689,9 +677,9 @@ } }, "node_modules/mdast-util-to-hast": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz", - "integrity": "sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==", + "version": "12.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.2.1.tgz", + "integrity": "sha512-dyindR2P7qOqXO1hQirZeGtVbiX7xlNQbw7gGaAwN4A1dh4+X8xU/JyYmRoyB8Fu1uPXzp7mlL5QwW7k+knvgA==", "dev": true, "dependencies": { "@types/hast": "^2.0.0", @@ -700,6 +688,7 @@ "mdast-util-definitions": "^5.0.0", "mdurl": "^1.0.0", "micromark-util-sanitize-uri": "^1.0.0", + "trim-lines": "^3.0.0", "unist-builder": "^3.0.0", "unist-util-generated": "^2.0.0", "unist-util-position": "^4.0.0", @@ -742,7 +731,7 @@ "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, "node_modules/micromark": { @@ -867,9 +856,9 @@ } }, "node_modules/micromark-extension-gfm-footnote": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.3.tgz", - "integrity": "sha512-bn62pC5y39rIo2g1RqZk1NhF7T7cJLuJlbevunQz41U0iPVCdVOFASe5/L1kke+DFKSgfCRhv24+o42cZ1+ADw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", + "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", "dev": true, "dependencies": { "micromark-core-commonmark": "^1.0.0", @@ -878,6 +867,7 @@ "micromark-util-normalize-identifier": "^1.0.0", "micromark-util-sanitize-uri": "^1.0.0", "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", "uvu": "^0.5.0" }, "funding": { @@ -1196,9 +1186,9 @@ ] }, "node_modules/micromark-util-html-tag-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", - "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", + "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", "dev": true, "funding": [ { @@ -1340,9 +1330,9 @@ "dev": true }, "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "dependencies": { "boolbase": "^1.0.0" @@ -1500,9 +1490,9 @@ } }, "node_modules/stringify-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.2.tgz", - "integrity": "sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", "dev": true, "dependencies": { "character-entities-html4": "^2.0.0", @@ -1536,6 +1526,16 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -1599,10 +1599,13 @@ } }, "node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -1639,14 +1642,14 @@ } }, "node_modules/unist-util-visit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", - "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", "dev": true, "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "unist-util-visit-parents": "^5.1.1" }, "funding": { "type": "opencollective", @@ -1654,23 +1657,9 @@ } }, "node_modules/unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", - "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", "dev": true, "dependencies": { "@types/unist": "^2.0.0", @@ -1682,9 +1671,9 @@ } }, "node_modules/uvu": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.3.tgz", - "integrity": "sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", "dev": true, "dependencies": { "dequal": "^2.0.0", @@ -1700,9 +1689,9 @@ } }, "node_modules/vfile": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz", - "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", + "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", "dev": true, "dependencies": { "@types/unist": "^2.0.0", @@ -1831,7 +1820,7 @@ "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "ccount": { @@ -1841,9 +1830,9 @@ "dev": true }, "character-entities": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.1.tgz", - "integrity": "sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true }, "character-entities-html4": { @@ -1871,33 +1860,33 @@ "dev": true }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, "decode-named-character-reference": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.1.tgz", - "integrity": "sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dev": true, "requires": { "character-entities": "^2.0.0" } }, "dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true }, "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true }, "escape-string-regexp": { @@ -1924,7 +1913,7 @@ "format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "dev": true }, "hast-to-hyperscript": { @@ -1978,9 +1967,9 @@ } }, "hast-util-raw": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.1.tgz", - "integrity": "sha512-wgtppqXVdXzkDXDFclLLdAyVUJSKMYYi6LWIAbA8oFqEdwksYIcPGM3RkKV1Dfn5GElvxhaOCs0jmCOMayxd3A==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.2.tgz", + "integrity": "sha512-0x3BhhdlBcqRIKyc095lBSDvmQNMY3Eulj2PLsT5XCyKYrxssI5yr3P4Kv/PBo1s/DMkZy2voGkMXECnFCZRLQ==", "dev": true, "requires": { "@types/hast": "^2.0.0", @@ -2057,9 +2046,9 @@ } }, "highlight.js": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.5.0.tgz", - "integrity": "sha512-SM6WDj5/C+VfIY8pZ6yW6Xa0Fm1tniYVYWYW1Q/DcMnISZFrC3aQAZZZFAAZtybKNrGId3p/DNbFTtcTXXgYBw==", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.6.0.tgz", + "integrity": "sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw==", "dev": true }, "html-void-elements": { @@ -2081,9 +2070,9 @@ "dev": true }, "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true }, "js-yaml": { @@ -2096,9 +2085,9 @@ } }, "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true }, "longest-streak": { @@ -2114,38 +2103,25 @@ "dev": true }, "mdast-util-definitions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz", - "integrity": "sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz", + "integrity": "sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==", "dev": true, "requires": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "unist-util-visit": "^3.0.0" - }, - "dependencies": { - "unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - } - } + "unist-util-visit": "^4.0.0" } }, "mdast-util-find-and-replace": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", - "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz", + "integrity": "sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==", "dev": true, "requires": { "escape-string-regexp": "^5.0.0", "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" + "unist-util-visit-parents": "^5.0.0" } }, "mdast-util-from-markdown": { @@ -2178,16 +2154,18 @@ } }, "mdast-util-gfm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.0.tgz", - "integrity": "sha512-wMwejlTN3EQADPFuvxe8lmGsay3+f6gSJKdAHR6KBJzpcxvsjJSILB9K6u6G7eQLC7iOTyVIHYGui9uBc9r1Tg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", + "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", "dev": true, "requires": { + "mdast-util-from-markdown": "^1.0.0", "mdast-util-gfm-autolink-literal": "^1.0.0", "mdast-util-gfm-footnote": "^1.0.0", "mdast-util-gfm-strikethrough": "^1.0.0", "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0" + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" } }, "mdast-util-gfm-autolink-literal": { @@ -2224,12 +2202,13 @@ } }, "mdast-util-gfm-table": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.3.tgz", - "integrity": "sha512-B/tgpJjND1qIZM2WZst+NYnb0notPE6m0J+YOe3NOHXyEmvK38ytxaOsgz4BvrRPQQcNbRrTzSHMPnBkj1fCjg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz", + "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==", "dev": true, "requires": { "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", "mdast-util-to-markdown": "^1.3.0" } }, @@ -2244,9 +2223,9 @@ } }, "mdast-util-to-hast": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz", - "integrity": "sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==", + "version": "12.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.2.1.tgz", + "integrity": "sha512-dyindR2P7qOqXO1hQirZeGtVbiX7xlNQbw7gGaAwN4A1dh4+X8xU/JyYmRoyB8Fu1uPXzp7mlL5QwW7k+knvgA==", "dev": true, "requires": { "@types/hast": "^2.0.0", @@ -2255,6 +2234,7 @@ "mdast-util-definitions": "^5.0.0", "mdurl": "^1.0.0", "micromark-util-sanitize-uri": "^1.0.0", + "trim-lines": "^3.0.0", "unist-builder": "^3.0.0", "unist-util-generated": "^2.0.0", "unist-util-position": "^4.0.0", @@ -2285,7 +2265,7 @@ "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, "micromark": { @@ -2378,9 +2358,9 @@ } }, "micromark-extension-gfm-footnote": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.3.tgz", - "integrity": "sha512-bn62pC5y39rIo2g1RqZk1NhF7T7cJLuJlbevunQz41U0iPVCdVOFASe5/L1kke+DFKSgfCRhv24+o42cZ1+ADw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", + "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", "dev": true, "requires": { "micromark-core-commonmark": "^1.0.0", @@ -2389,6 +2369,7 @@ "micromark-util-normalize-identifier": "^1.0.0", "micromark-util-sanitize-uri": "^1.0.0", "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", "uvu": "^0.5.0" } }, @@ -2567,9 +2548,9 @@ "dev": true }, "micromark-util-html-tag-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", - "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", + "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", "dev": true }, "micromark-util-normalize-identifier": { @@ -2638,9 +2619,9 @@ "dev": true }, "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "requires": { "boolbase": "^1.0.0" @@ -2756,9 +2737,9 @@ "dev": true }, "stringify-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.2.tgz", - "integrity": "sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", "dev": true, "requires": { "character-entities-html4": "^2.0.0", @@ -2784,6 +2765,12 @@ "vfile": "^5.1.0" } }, + "trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true + }, "trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -2827,10 +2814,13 @@ "dev": true }, "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "dev": true + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } }, "unist-util-select": { "version": "4.0.1", @@ -2855,32 +2845,20 @@ } }, "unist-util-visit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", - "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", "dev": true, "requires": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "dependencies": { - "unist-util-visit-parents": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", - "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } + "unist-util-visit-parents": "^5.1.1" } }, "unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", "dev": true, "requires": { "@types/unist": "^2.0.0", @@ -2888,9 +2866,9 @@ } }, "uvu": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.3.tgz", - "integrity": "sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", "dev": true, "requires": { "dequal": "^2.0.0", @@ -2900,9 +2878,9 @@ } }, "vfile": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz", - "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", + "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", "dev": true, "requires": { "@types/unist": "^2.0.0", diff --git a/tools/doc/package.json b/tools/doc/package.json index 9856d614984..69c4d03726c 100644 --- a/tools/doc/package.json +++ b/tools/doc/package.json @@ -7,7 +7,7 @@ "node": ">=14.8.0" }, "devDependencies": { - "highlight.js": "^11.5.0", + "highlight.js": "^11.6.0", "js-yaml": "^4.1.0", "rehype-raw": "^6.1.1", "rehype-stringify": "^9.0.3", @@ -19,7 +19,7 @@ "to-vfile": "^7.2.3", "unified": "^10.1.2", "unist-util-select": "^4.0.1", - "unist-util-visit": "^4.1.0" + "unist-util-visit": "^4.1.1" }, "bin": { "node-doc-generator": "generate.js" diff --git a/tools/doc/type-parser.mjs b/tools/doc/type-parser.mjs index 71a4eb98976..da24512b52d 100644 --- a/tools/doc/type-parser.mjs +++ b/tools/doc/type-parser.mjs @@ -84,10 +84,10 @@ const customTypesMap = { 'Crypto': 'webcrypto.html#class-crypto', 'SubtleCrypto': 'webcrypto.html#class-subtlecrypto', 'RsaOaepParams': 'webcrypto.html#class-rsaoaepparams', + 'AlgorithmIdentifier': 'webcrypto.html#class-algorithmidentifier', 'AesCtrParams': 'webcrypto.html#class-aesctrparams', 'AesCbcParams': 'webcrypto.html#class-aescbcparams', 'AesGcmParams': 'webcrypto.html#class-aesgcmparams', - 'AesKwParams': 'webcrypto.html#class-aeskwparams', 'EcdhKeyDeriveParams': 'webcrypto.html#class-ecdhkeyderiveparams', 'HkdfParams': 'webcrypto.html#class-hkdfparams', 'Pbkdf2Params': 'webcrypto.html#class-pbkdf2params', @@ -100,26 +100,9 @@ const customTypesMap = { 'webcrypto.html#class-rsahashedimportparams', 'EcKeyImportParams': 'webcrypto.html#class-eckeyimportparams', 'HmacImportParams': 'webcrypto.html#class-hmacimportparams', - 'AesImportParams': 'webcrypto.html#class-aesimportparams', - 'Pbkdf2ImportParams': 'webcrypto.html#class-pbkdf2importparams', - 'HmacParams': 'webcrypto.html#class-hmacparams', 'EcdsaParams': 'webcrypto.html#class-ecdsaparams', 'RsaPssParams': 'webcrypto.html#class-rsapssparams', - 'RsaSignParams': 'webcrypto.html#class-rsasignparams', - 'NodeDhImportParams': 'webcrypto.html#class-nodedhimportparams', - 'NodeDhKeyGenParams': 'webcrypto.html#class-nodedhkeygenparams', - 'NodeDhDeriveBitsParams': - 'webcrypto.html#class-nodedhderivebitsparams', - 'NodeDsaImportParams': 'webcrypto.html#class-nodedsaimportparams', - 'NodeDsaKeyGenParams': 'webcrypto.html#class-nodedsakeygenparams', - 'NodeDsaSignParams': 'webcrypto.html#class-nodedsasignparams', - 'NodeScryptImportParams': - 'webcrypto.html#class-nodescryptimportparams', - 'NodeScryptParams': 'webcrypto.html#class-nodescryptparams', - 'NodeEdKeyImportParams': - 'webcrypto.html#class-nodeedkeyimportparams', - 'NodeEdKeyGenParams': - 'webcrypto.html#class-nodeedkeygenparams', + 'Ed448Params': 'webcrypto.html#class-ed448params', 'dgram.Socket': 'dgram.html#class-dgramsocket', @@ -134,6 +117,7 @@ const customTypesMap = { 'EventEmitter': 'events.html#class-eventemitter', 'EventTarget': 'events.html#class-eventtarget', 'Event': 'events.html#class-event', + 'CustomEvent': 'events.html#class-customevent', 'EventListener': 'events.html#event-listener', 'FileHandle': 'fs.html#class-filehandle', @@ -148,6 +132,7 @@ const customTypesMap = { 'http.Agent': 'http.html#class-httpagent', 'http.ClientRequest': 'http.html#class-httpclientrequest', 'http.IncomingMessage': 'http.html#class-httpincomingmessage', + 'http.OutgoingMessage': 'http.html#class-httpoutgoingmessage', 'http.Server': 'http.html#class-httpserver', 'http.ServerResponse': 'http.html#class-httpserverresponse', @@ -163,6 +148,7 @@ const customTypesMap = { 'Http2Session': 'http2.html#class-http2session', 'Http2Stream': 'http2.html#class-http2stream', 'ServerHttp2Stream': 'http2.html#class-serverhttp2stream', + 'ServerHttp2Session': 'http2.html#class-serverhttp2session', 'https.Server': 'https.html#class-httpsserver', @@ -215,6 +201,8 @@ const customTypesMap = { 'Timeout': 'timers.html#class-timeout', 'Timer': 'timers.html#timers', + 'TapStream': 'test.html#class-tapstream', + 'tls.SecureContext': 'tls.html#tlscreatesecurecontextoptions', 'tls.Server': 'tls.html#class-tlsserver', 'tls.TLSSocket': 'tls.html#class-tlstlssocket', diff --git a/tools/doc/versions.mjs b/tools/doc/versions.mjs index ec623a2dbd2..8f6c4ef98ad 100644 --- a/tools/doc/versions.mjs +++ b/tools/doc/versions.mjs @@ -32,7 +32,7 @@ const outFile = (process.argv.length > 2 ? process.argv[2] : undefined); async function versions() { // The CHANGELOG.md on release branches may not reference newer semver - // majors of Node.js so fetch and parse the version from the master branch. + // majors of Node.js so fetch and parse the version from the main branch. const url = 'https://raw.githubusercontent.com/nodejs/node/HEAD/CHANGELOG.md'; let changelog; diff --git a/tools/eslint-rules/avoid-prototype-pollution.js b/tools/eslint-rules/avoid-prototype-pollution.js new file mode 100644 index 00000000000..f7e7fbe7da0 --- /dev/null +++ b/tools/eslint-rules/avoid-prototype-pollution.js @@ -0,0 +1,193 @@ +'use strict'; + +const CallExpression = (fnName) => `CallExpression[callee.name=${fnName}]`; + +function checkProperties(context, node) { + if ( + node.type === 'CallExpression' && + node.callee.name === 'ObjectGetOwnPropertyDescriptors' + ) { + context.report({ + node, + message: + 'Property descriptors inherits from the Object prototype, therefore are subject to prototype pollution', + }); + } + if (node.type !== 'ObjectExpression') return; + for (const { key, value } of node.properties) { + if ( + key != null && value != null && + !(key.type === 'Identifier' && key.name === '__proto__') && + !(key.type === 'Literal' && key.value === '__proto__') + ) { + checkPropertyDescriptor(context, value); + } + } +} + +function checkPropertyDescriptor(context, node) { + if ( + node.type === 'CallExpression' && + (node.callee.name === 'ObjectGetOwnPropertyDescriptor' || + node.callee.name === 'ReflectGetOwnPropertyDescriptor') + ) { + context.report({ + node, + message: + 'Property descriptors inherits from the Object prototype, therefore are subject to prototype pollution', + suggest: [{ + desc: 'Wrap the property descriptor in a null-prototype object', + fix(fixer) { + return [ + fixer.insertTextBefore(node, '{ __proto__: null,...'), + fixer.insertTextAfter(node, ' }'), + ]; + }, + }], + }); + } + if (node.type !== 'ObjectExpression') return; + + for (const { key, value } of node.properties) { + if ( + key != null && value != null && + ((key.type === 'Identifier' && key.name === '__proto__') || + (key.type === 'Literal' && key.value === '__proto__')) && + value.type === 'Literal' && value.value === null + ) { + return true; + } + } + + context.report({ + node, + message: 'Must use null-prototype object for property descriptors', + }); +} + +function createUnsafeStringMethodReport(context, name, lookedUpProperty) { + const lastDotPosition = '$String.prototype.'.length; + const unsafePrimordialName = `StringPrototype${name.charAt(lastDotPosition).toUpperCase()}${name.slice(lastDotPosition + 1, -1)}`; + return { + [CallExpression(unsafePrimordialName)](node) { + context.report({ + node, + message: `${name} looks up the ${lookedUpProperty} property on the first argument`, + }); + } + }; +} + +function createUnsafeStringMethodOnRegexReport(context, name, lookedUpProperty) { + const dotPosition = 'Symbol.'.length; + const safePrimordialName = `RegExpPrototypeSymbol${lookedUpProperty.charAt(dotPosition).toUpperCase()}${lookedUpProperty.slice(dotPosition + 1)}`; + const lastDotPosition = '$String.prototype.'.length; + const unsafePrimordialName = `StringPrototype${name.charAt(lastDotPosition).toUpperCase()}${name.slice(lastDotPosition + 1, -1)}`; + return { + [[ + `${CallExpression(unsafePrimordialName)}[arguments.1.type=Literal][arguments.1.regex]`, + `${CallExpression(unsafePrimordialName)}[arguments.1.type=NewExpression][arguments.1.callee.name=RegExp]`, + ].join(',')](node) { + context.report({ + node, + message: `${name} looks up the ${lookedUpProperty} property of the passed regex, use ${safePrimordialName} directly`, + }); + } + }; +} + +module.exports = { + meta: { hasSuggestions: true }, + create(context) { + return { + [CallExpression(/^(Object|Reflect)DefinePropert(ies|y)$/)](node) { + switch (node.callee.name) { + case 'ObjectDefineProperties': + checkProperties(context, node.arguments[1]); + break; + case 'ReflectDefineProperty': + case 'ObjectDefineProperty': + checkPropertyDescriptor(context, node.arguments[2]); + break; + default: + throw new Error('Unreachable'); + } + }, + + [`${CallExpression('ObjectCreate')}[arguments.length=2]`](node) { + checkProperties(context, node.arguments[1]); + }, + [CallExpression('RegExpPrototypeTest')](node) { + context.report({ + node, + message: '%RegExp.prototype.test% looks up the "exec" property of `this` value', + suggest: [{ + desc: 'Use RegexpPrototypeExec instead', + fix(fixer) { + const testRange = { ...node.range }; + testRange.start = testRange.start + 'RegexpPrototype'.length; + testRange.end = testRange.start + 'Test'.length; + return [ + fixer.replaceTextRange(testRange, 'Exec'), + fixer.insertTextAfter(node, ' !== null'), + ]; + } + }], + }); + }, + [CallExpression(/^RegExpPrototypeSymbol(Match|MatchAll|Search)$/)](node) { + context.report({ + node, + message: node.callee.name + ' looks up the "exec" property of `this` value', + }); + }, + ...createUnsafeStringMethodReport(context, '%String.prototype.match%', 'Symbol.match'), + ...createUnsafeStringMethodReport(context, '%String.prototype.matchAll%', 'Symbol.matchAll'), + ...createUnsafeStringMethodOnRegexReport(context, '%String.prototype.replace%', 'Symbol.replace'), + ...createUnsafeStringMethodOnRegexReport(context, '%String.prototype.replaceAll%', 'Symbol.replace'), + ...createUnsafeStringMethodReport(context, '%String.prototype.search%', 'Symbol.search'), + ...createUnsafeStringMethodOnRegexReport(context, '%String.prototype.split%', 'Symbol.split'), + + 'NewExpression[callee.name="Proxy"][arguments.1.type="ObjectExpression"]'(node) { + for (const { key, value } of node.arguments[1].properties) { + if ( + key != null && value != null && + ((key.type === 'Identifier' && key.name === '__proto__') || + (key.type === 'Literal' && key.value === '__proto__')) && + value.type === 'Literal' && value.value === null + ) { + return; + } + } + context.report({ + node, + message: 'Proxy handler must be a null-prototype object', + }); + }, + + [CallExpression('PromisePrototypeCatch')](node) { + context.report({ + node, + message: '%Promise.prototype.catch% looks up the `then` property of ' + + 'the `this` argument, use PromisePrototypeThen instead', + }); + }, + + [CallExpression('PromisePrototypeFinally')](node) { + context.report({ + node, + message: '%Promise.prototype.finally% looks up the `then` property of ' + + 'the `this` argument, use SafePromisePrototypeFinally or ' + + 'try/finally instead', + }); + }, + + [CallExpression(/^Promise(All(Settled)?|Any|Race)/)](node) { + context.report({ + node, + message: `Use Safe${node.callee.name} instead of ${node.callee.name}`, + }); + }, + }; + }, +}; diff --git a/tools/eslint-rules/eslint-check.js b/tools/eslint-rules/eslint-check.js index 0edf7d2899c..df82257ccd1 100644 --- a/tools/eslint-rules/eslint-check.js +++ b/tools/eslint-rules/eslint-check.js @@ -12,53 +12,54 @@ const utils = require('./rules-utils.js'); const msg = 'Please add a skipIfEslintMissing() call to allow this test to ' + 'be skipped when Node.js is built from a source tarball.'; -module.exports = function(context) { - const missingCheckNodes = []; - let commonModuleNode = null; - let hasEslintCheck = false; +module.exports = { + meta: { + fixable: 'code', + }, + create: function(context) { + const missingCheckNodes = []; + let commonModuleNode = null; + let hasEslintCheck = false; - function testEslintUsage(context, node) { - if (utils.isRequired(node, ['../../tools/node_modules/eslint'])) { - missingCheckNodes.push(node); - } + function testEslintUsage(context, node) { + if (utils.isRequired(node, ['../../tools/node_modules/eslint'])) { + missingCheckNodes.push(node); + } - if (utils.isCommonModule(node)) { - commonModuleNode = node; + if (utils.isCommonModule(node)) { + commonModuleNode = node; + } } - } - function checkMemberExpression(context, node) { - if (utils.usesCommonProperty(node, ['skipIfEslintMissing'])) { - hasEslintCheck = true; + function checkMemberExpression(context, node) { + if (utils.usesCommonProperty(node, ['skipIfEslintMissing'])) { + hasEslintCheck = true; + } } - } - function reportIfMissing(context) { - if (!hasEslintCheck) { - missingCheckNodes.forEach((node) => { - context.report({ - node, - message: msg, - fix: (fixer) => { - if (commonModuleNode) { - return fixer.insertTextAfter( - commonModuleNode, - '\ncommon.skipIfEslintMissing();' - ); + function reportIfMissing(context) { + if (!hasEslintCheck) { + missingCheckNodes.forEach((node) => { + context.report({ + node, + message: msg, + fix: (fixer) => { + if (commonModuleNode) { + return fixer.insertTextAfter( + commonModuleNode, + '\ncommon.skipIfEslintMissing();' + ); + } } - } + }); }); - }); + } } - } - return { - 'CallExpression': (node) => testEslintUsage(context, node), - 'MemberExpression': (node) => checkMemberExpression(context, node), - 'Program:exit': () => reportIfMissing(context) - }; -}; - -module.exports.meta = { - fixable: 'code' + return { + 'CallExpression': (node) => testEslintUsage(context, node), + 'MemberExpression': (node) => checkMemberExpression(context, node), + 'Program:exit': () => reportIfMissing(context) + }; + } }; diff --git a/tools/eslint-rules/no-unescaped-regexp-dot.js b/tools/eslint-rules/no-unescaped-regexp-dot.js index e9349713bfa..554eb9bdfb6 100644 --- a/tools/eslint-rules/no-unescaped-regexp-dot.js +++ b/tools/eslint-rules/no-unescaped-regexp-dot.js @@ -8,123 +8,126 @@ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - const sourceCode = context.getSourceCode(); - const regexpStack = []; - let regexpBuffer = []; - let inRegExp = false; +module.exports = { + create(context) { + const sourceCode = context.getSourceCode(); + const regexpStack = []; + let regexpBuffer = []; + let inRegExp = false; - function report(node, startOffset) { - const indexOfDot = sourceCode.getIndexFromLoc(node.loc.start) + startOffset; - context.report({ - node, - loc: sourceCode.getLocFromIndex(indexOfDot), - message: 'Unescaped dot character in regular expression' - }); - } + function report(node, startOffset) { + const indexOfDot = sourceCode.getIndexFromLoc(node.loc.start) + startOffset; + context.report({ + node, + loc: sourceCode.getLocFromIndex(indexOfDot), + message: 'Unescaped dot character in regular expression' + }); + } + const allowedModifiers = ['+', '*', '?', '{']; - const allowedModifiers = ['+', '*', '?', '{']; - function checkRegExp(nodes) { - let escaping = false; - let inCharClass = false; - for (let n = 0; n < nodes.length; ++n) { - const pair = nodes[n]; - const node = pair[0]; - const str = pair[1]; - for (let i = 0; i < str.length; ++i) { - switch (str[i]) { - case '[': - if (!escaping) - inCharClass = true; - else - escaping = false; - break; - case ']': - if (!escaping) { - if (inCharClass) - inCharClass = false; - } else { - escaping = false; - } - break; - case '\\': - escaping = !escaping; - break; - case '.': - if (!escaping) { - if (!inCharClass && + function checkRegExp(nodes) { + let escaping = false; + let inCharClass = false; + for (let n = 0; n < nodes.length; ++n) { + const pair = nodes[n]; + const node = pair[0]; + const str = pair[1]; + for (let i = 0; i < str.length; ++i) { + switch (str[i]) { + case '[': + if (!escaping) + inCharClass = true; + else + escaping = false; + break; + case ']': + if (!escaping) { + if (inCharClass) + inCharClass = false; + } else { + escaping = false; + } + break; + case '\\': + escaping = !escaping; + break; + case '.': + if (!escaping) { + if (!inCharClass && ((i + 1) === str.length || allowedModifiers.indexOf(str[i + 1]) === -1)) { - report(node, i); + report(node, i); + } + } else { + escaping = false; } - } else { - escaping = false; - } - break; - default: - if (escaping) - escaping = false; + break; + default: + if (escaping) + escaping = false; + } } } } - } - function checkRegExpStart(node) { - if (node.callee && node.callee.name === 'RegExp') { - if (inRegExp) { - regexpStack.push(regexpBuffer); - regexpBuffer = []; + function checkRegExpStart(node) { + if (node.callee && node.callee.name === 'RegExp') { + if (inRegExp) { + regexpStack.push(regexpBuffer); + regexpBuffer = []; + } + inRegExp = true; } - inRegExp = true; } - } - function checkRegExpEnd(node) { - if (node.callee && node.callee.name === 'RegExp') { - checkRegExp(regexpBuffer); - if (regexpStack.length) { - regexpBuffer = regexpStack.pop(); - } else { - inRegExp = false; - regexpBuffer = []; + function checkRegExpEnd(node) { + if (node.callee && node.callee.name === 'RegExp') { + checkRegExp(regexpBuffer); + if (regexpStack.length) { + regexpBuffer = regexpStack.pop(); + } else { + inRegExp = false; + regexpBuffer = []; + } } } - } - function checkLiteral(node) { - const isTemplate = (node.type === 'TemplateLiteral' && node.quasis && + function checkLiteral(node) { + const isTemplate = (node.type === 'TemplateLiteral' && node.quasis && node.quasis.length); - if (inRegExp && + if (inRegExp && (isTemplate || (typeof node.value === 'string' && node.value.length))) { - let p = node.parent; - while (p && p.type === 'BinaryExpression') { - p = p.parent; - } - if (p && (p.type === 'NewExpression' || p.type === 'CallExpression') && + let p = node.parent; + while (p && p.type === 'BinaryExpression') { + p = p.parent; + } + if (p && (p.type === 'NewExpression' || p.type === 'CallExpression') && p.callee && p.callee.type === 'Identifier' && p.callee.name === 'RegExp') { - if (isTemplate) { - const quasis = node.quasis; - for (let i = 0; i < quasis.length; ++i) { - const el = quasis[i]; - if (el.type === 'TemplateElement' && el.value && el.value.cooked) - regexpBuffer.push([el, el.value.cooked]); + if (isTemplate) { + const quasis = node.quasis; + for (let i = 0; i < quasis.length; ++i) { + const el = quasis[i]; + if (el.type === 'TemplateElement' && el.value && el.value.cooked) + regexpBuffer.push([el, el.value.cooked]); + } + } else { + regexpBuffer.push([node, node.value]); } - } else { - regexpBuffer.push([node, node.value]); } + } else if (node.regex) { + checkRegExp([[node, node.regex.pattern]]); } - } else if (node.regex) { - checkRegExp([[node, node.regex.pattern]]); } - } - return { - 'TemplateLiteral': checkLiteral, - 'Literal': checkLiteral, - 'CallExpression': checkRegExpStart, - 'NewExpression': checkRegExpStart, - 'CallExpression:exit': checkRegExpEnd, - 'NewExpression:exit': checkRegExpEnd - }; + + return { + 'TemplateLiteral': checkLiteral, + 'Literal': checkLiteral, + 'CallExpression': checkRegExpStart, + 'NewExpression': checkRegExpStart, + 'CallExpression:exit': checkRegExpEnd, + 'NewExpression:exit': checkRegExpEnd + }; + } }; diff --git a/tools/find-inactive-collaborators.mjs b/tools/find-inactive-collaborators.mjs index 71a00b970a9..0787c634a1a 100755 --- a/tools/find-inactive-collaborators.mjs +++ b/tools/find-inactive-collaborators.mjs @@ -7,8 +7,15 @@ import cp from 'node:child_process'; import fs from 'node:fs'; import readline from 'node:readline'; +import { parseArgs } from 'node:util'; -const SINCE = process.argv[2] || '18 months ago'; +const args = parseArgs({ + allowPositionals: true, + options: { verbose: { type: 'boolean', short: 'v' } } +}); + +const verbose = args.values.verbose; +const SINCE = args.positionals[0] || '18 months ago'; async function runGitCommand(cmd, mapFn) { const childProcess = cp.spawn('/bin/sh', ['-c', cmd], { @@ -176,11 +183,12 @@ async function moveCollaboratorToEmeritus(peopleToMove) { // Get list of current collaborators from README.md. const collaborators = await getCollaboratorsFromReadme(); -console.log(`Since ${SINCE}:\n`); -console.log(`* ${authors.size.toLocaleString()} authors have made commits.`); -console.log(`* ${approvingReviewers.size.toLocaleString()} reviewers have approved landed commits.`); -console.log(`* ${collaborators.length.toLocaleString()} collaborators currently in the project.`); - +if (verbose) { + console.log(`Since ${SINCE}:\n`); + console.log(`* ${authors.size.toLocaleString()} authors have made commits.`); + console.log(`* ${approvingReviewers.size.toLocaleString()} reviewers have approved landed commits.`); + console.log(`* ${collaborators.length.toLocaleString()} collaborators currently in the project.`); +} const inactive = collaborators.filter((collaborator) => !authors.has(collaborator.mailmap) && !approvingReviewers.has(collaborator.name) diff --git a/tools/find-inactive-tsc.mjs b/tools/find-inactive-tsc.mjs index 5c4c3703898..fe204d5b673 100755 --- a/tools/find-inactive-tsc.mjs +++ b/tools/find-inactive-tsc.mjs @@ -12,8 +12,15 @@ import cp from 'node:child_process'; import fs from 'node:fs'; import path from 'node:path'; import readline from 'node:readline'; +import { parseArgs } from 'node:util'; -const SINCE = process.argv[2] || '3 months ago'; +const args = parseArgs({ + allowPositionals: true, + options: { verbose: { type: 'boolean', short: 'v' } } +}); + +const verbose = args.values.verbose; +const SINCE = args.positionals[0] || '3 months ago'; async function runGitCommand(cmd, options = {}) { const childProcess = cp.spawn('/bin/sh', ['-c', cmd], { @@ -271,3 +278,8 @@ if (inactive.length) { fs.writeFileSync(new URL('../README.md', import.meta.url), newReadmeText); } } + +if (verbose) { + console.log(attendance); + console.log(votingRecords); +} diff --git a/tools/gen_node_def.cc b/tools/gen_node_def.cc new file mode 100644 index 00000000000..f4cabbd84c1 --- /dev/null +++ b/tools/gen_node_def.cc @@ -0,0 +1,197 @@ +#include +#include +#include +#include +#include +#include +#include + +// This executable takes a Windows DLL and uses it to generate +// a module-definition file [1] which forwards all the exported +// symbols from the DLL and redirects them back to the DLL. +// This allows node.exe to export the same symbols as libnode.dll +// when building Node.js as a shared library. This is conceptually +// similary to the create_expfile.sh script used on AIX. +// +// Generating this .def file requires parsing data out of the +// PE32/PE32+ file format. Helper structs are defined in +// hence why this is an executable and not a script. See [2] for +// details on the PE format. +// +// [1]: https://docs.microsoft.com/en-us/cpp/build/reference/module-definition-dot-def-files +// [2]: https://docs.microsoft.com/en-us/windows/win32/debug/pe-format + +// The PE32 format encodes pointers as Relative Virtual Addresses +// which are 32 bit offsets from the start of the image. This helper +// class hides the mess of the pointer arithmetic +struct RelativeAddress { + uintptr_t root; + uintptr_t offset = 0; + + RelativeAddress(HMODULE handle) noexcept + : root(reinterpret_cast(handle)) {} + + RelativeAddress(HMODULE handle, uintptr_t offset) noexcept + : root(reinterpret_cast(handle)), offset(offset) {} + + RelativeAddress(uintptr_t root, uintptr_t offset) noexcept + : root(root), offset(offset) {} + + template + const T* AsPtrTo() const noexcept { + return reinterpret_cast(root + offset); + } + + template + T Read() const noexcept { + return *AsPtrTo(); + } + + RelativeAddress AtOffset(uintptr_t amount) const noexcept { + return {root, offset + amount}; + } + + RelativeAddress operator+(uintptr_t amount) const noexcept { + return {root, offset + amount}; + } + + RelativeAddress ReadRelativeAddress() const noexcept { + return {root, Read()}; + } +}; + +// A wrapper around a dynamically loaded Windows DLL. This steps through the +// PE file structure to find the export directory and pulls out a list of +// all the exported symbol names. +struct Library { + HMODULE library; + std::string libraryName; + std::vector exportedSymbols; + + Library(HMODULE library) : library(library) { + auto libnode = RelativeAddress(library); + + // At relative offset 0x3C is a 32 bit offset to the COFF signature, 4 bytes + // after that is the start of the COFF header. + auto coffHeaderPtr = + libnode.AtOffset(0x3C).ReadRelativeAddress().AtOffset(4); + auto coffHeader = coffHeaderPtr.AsPtrTo(); + + // After the coff header is the Optional Header (which is not optional). We + // don't know what type of optional header we have without examining the + // magic number + auto optionalHeaderPtr = coffHeaderPtr.AtOffset(sizeof(IMAGE_FILE_HEADER)); + auto optionalHeader = optionalHeaderPtr.AsPtrTo(); + + auto exportDirectory = + (optionalHeader->Magic == 0x20b) ? optionalHeaderPtr.AsPtrTo() + ->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT] + : optionalHeaderPtr.AsPtrTo() + ->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]; + + auto exportTable = libnode.AtOffset(exportDirectory.VirtualAddress) + .AsPtrTo(); + + // This is the name of the library without the suffix, this is more robust + // than parsing the filename as this is what the linker uses. + libraryName = libnode.AtOffset(exportTable->Name).AsPtrTo(); + libraryName = libraryName.substr(0, libraryName.size() - 4); + + const uint32_t* functionNameTable = + libnode.AtOffset(exportTable->AddressOfNames).AsPtrTo(); + + // Given an RVA, parse it as a std::string. The resulting string is empty + // if the symbol does not have a name (i.e. it is ordinal only). + auto nameRvaToName = [&](uint32_t rva) -> std::string { + auto namePtr = libnode.AtOffset(rva).AsPtrTo(); + if (namePtr == nullptr) return {}; + return {namePtr}; + }; + std::transform(functionNameTable, + functionNameTable + exportTable->NumberOfNames, + std::back_inserter(exportedSymbols), + nameRvaToName); + } + + ~Library() { FreeLibrary(library); } +}; + +bool IsPageExecutable(void* address) { + MEMORY_BASIC_INFORMATION memoryInformation; + size_t rc = VirtualQuery( + address, &memoryInformation, sizeof(MEMORY_BASIC_INFORMATION)); + + if (rc != 0 && memoryInformation.Protect != 0) { + return memoryInformation.Protect == PAGE_EXECUTE || + memoryInformation.Protect == PAGE_EXECUTE_READ || + memoryInformation.Protect == PAGE_EXECUTE_READWRITE || + memoryInformation.Protect == PAGE_EXECUTE_WRITECOPY; + } + return false; +} + +Library LoadLibraryOrExit(const char* dllPath) { + auto library = LoadLibrary(dllPath); + if (library != nullptr) return library; + + auto error = GetLastError(); + std::cerr << "ERROR: Failed to load " << dllPath << std::endl; + LPCSTR buffer = nullptr; + auto rc = FormatMessageA( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + nullptr, + error, + LANG_USER_DEFAULT, + (LPSTR)&buffer, + 0, + nullptr); + if (rc != 0) { + std::cerr << buffer << std::endl; + LocalFree((HLOCAL)buffer); + } + exit(1); +} + +int main(int argc, char** argv) { + if (argc != 3) { + std::cerr << "Usage: " << argv[0] + << " path\\to\\libnode.dll path\\to\\node.def" << std::endl; + return 1; + } + + auto libnode = LoadLibraryOrExit(argv[1]); + auto defFile = std::ofstream(argv[2]); + defFile << "EXPORTS" << std::endl; + + for (const std::string& functionName : libnode.exportedSymbols) { + // If a symbol doesn't have a name then it has been exported as an + // ordinal only. We assume that only named symbols are exported. + if (functionName.empty()) continue; + + // Every name in the exported symbols table should be resolvable + // to an address because we have actually loaded the library into + // our address space. + auto address = GetProcAddress(libnode.library, functionName.c_str()); + if (address == nullptr) { + std::cerr << "WARNING: " << functionName + << " appears in export table but is not a valid symbol" + << std::endl; + continue; + } + + defFile << " " << functionName << " = " << libnode.libraryName << "." + << functionName; + + // Nothing distinguishes exported global data from exported functions + // with C linkage. If we do not specify the DATA keyword for such symbols + // then consumers of the .def file will get a linker error. This manifests + // as nodedbg_ symbols not being found. We assert that if the symbol is in + // an executable page in this process then it is a function, not data. + if (!IsPageExecutable(address)) { + defFile << " DATA"; + } + defFile << std::endl; + } + + return 0; +} diff --git a/tools/gyp/.github/workflows/Python_tests.yml b/tools/gyp/.github/workflows/Python_tests.yml index 40ff521a6fd..76e536826b9 100644 --- a/tools/gyp/.github/workflows/Python_tests.yml +++ b/tools/gyp/.github/workflows/Python_tests.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/tools/gyp/.github/workflows/node-gyp.yml b/tools/gyp/.github/workflows/node-gyp.yml index 0c26a3d7de3..c8d2455f13e 100644 --- a/tools/gyp/.github/workflows/node-gyp.yml +++ b/tools/gyp/.github/workflows/node-gyp.yml @@ -21,10 +21,10 @@ jobs: with: repository: nodejs/node-gyp path: node-gyp - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v3 with: node-version: 14.x - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v3 with: python-version: ${{ matrix.python }} - name: Install dependencies diff --git a/tools/gyp/CHANGELOG.md b/tools/gyp/CHANGELOG.md index 57d691c1812..09ceed8d41c 100644 --- a/tools/gyp/CHANGELOG.md +++ b/tools/gyp/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +### [0.12.1](https://www.github.com/nodejs/gyp-next/compare/v0.12.0...v0.12.1) (2022-04-06) + + +### Bug Fixes + +* **msvs:** avoid fixing path for arguments with "=" ([#143](https://www.github.com/nodejs/gyp-next/issues/143)) ([7e8f16e](https://www.github.com/nodejs/gyp-next/commit/7e8f16eb165e042e64bec98fa6c2a0232a42c26b)) + +## [0.12.0](https://www.github.com/nodejs/gyp-next/compare/v0.11.0...v0.12.0) (2022-04-04) + + +### Features + +* support building shared libraries on z/OS ([#137](https://www.github.com/nodejs/gyp-next/issues/137)) ([293bcfa](https://www.github.com/nodejs/gyp-next/commit/293bcfa4c25c6adb743377adafc45a80fee492c6)) + +## [0.11.0](https://www.github.com/nodejs/gyp-next/compare/v0.10.1...v0.11.0) (2022-03-04) + + +### Features + +* Add proper support for IBM i ([#140](https://www.github.com/nodejs/gyp-next/issues/140)) ([fdda4a3](https://www.github.com/nodejs/gyp-next/commit/fdda4a3038b8a7042ad960ce7a223687c24a21b1)) + ### [0.10.1](https://www.github.com/nodejs/gyp-next/compare/v0.10.0...v0.10.1) (2021-11-24) diff --git a/tools/gyp/pylib/gyp/common.py b/tools/gyp/pylib/gyp/common.py index 9213fcc5e82..0847cdabc71 100644 --- a/tools/gyp/pylib/gyp/common.py +++ b/tools/gyp/pylib/gyp/common.py @@ -454,6 +454,8 @@ def GetFlavor(params): return "aix" if sys.platform.startswith(("os390", "zos")): return "zos" + if sys.platform == "os400": + return "os400" return "linux" @@ -463,9 +465,13 @@ def CopyTool(flavor, out_path, generator_flags={}): to |out_path|.""" # aix and solaris just need flock emulation. mac and win use more complicated # support scripts. - prefix = {"aix": "flock", "solaris": "flock", "mac": "mac", "win": "win"}.get( - flavor, None - ) + prefix = { + "aix": "flock", + "os400": "flock", + "solaris": "flock", + "mac": "mac", + "win": "win", + }.get(flavor, None) if not prefix: return diff --git a/tools/gyp/pylib/gyp/flock_tool.py b/tools/gyp/pylib/gyp/flock_tool.py index 1cb98152638..0754aff26fe 100755 --- a/tools/gyp/pylib/gyp/flock_tool.py +++ b/tools/gyp/pylib/gyp/flock_tool.py @@ -41,7 +41,7 @@ def ExecFlock(self, lockfile, *cmd_list): # with EBADF, that's why we use this F_SETLK # hack instead. fd = os.open(lockfile, os.O_WRONLY | os.O_NOCTTY | os.O_CREAT, 0o666) - if sys.platform.startswith("aix"): + if sys.platform.startswith("aix") or sys.platform == "os400": # Python on AIX is compiled with LARGEFILE support, which changes the # struct size. op = struct.pack("hhIllqq", fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0) diff --git a/tools/gyp/pylib/gyp/generator/make.py b/tools/gyp/pylib/gyp/generator/make.py index 05e1f26a63d..cddc78ba0d4 100644 --- a/tools/gyp/pylib/gyp/generator/make.py +++ b/tools/gyp/pylib/gyp/generator/make.py @@ -99,6 +99,8 @@ def CalculateVariables(default_variables, params): default_variables.setdefault("OS", operating_system) if flavor == "aix": default_variables.setdefault("SHARED_LIB_SUFFIX", ".a") + elif flavor == "zos": + default_variables.setdefault("SHARED_LIB_SUFFIX", ".x") else: default_variables.setdefault("SHARED_LIB_SUFFIX", ".so") default_variables.setdefault("SHARED_LIB_DIR", "$(builddir)/lib.$(TOOLSET)") @@ -237,6 +239,24 @@ def CalculateGeneratorInputInfo(params): """ # noqa: E501 +LINK_COMMANDS_OS400 = """\ +quiet_cmd_alink = AR($(TOOLSET)) $@ +cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) -X64 crs $@ $(filter %.o,$^) + +quiet_cmd_alink_thin = AR($(TOOLSET)) $@ +cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) -X64 crs $@ $(filter %.o,$^) + +quiet_cmd_link = LINK($(TOOLSET)) $@ +cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) + +quiet_cmd_solink = SOLINK($(TOOLSET)) $@ +cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) + +quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ +cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) +""" # noqa: E501 + + LINK_COMMANDS_OS390 = """\ quiet_cmd_alink = AR($(TOOLSET)) $@ cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) @@ -248,10 +268,10 @@ def CalculateGeneratorInputInfo(params): cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) quiet_cmd_solink = SOLINK($(TOOLSET)) $@ -cmd_solink = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) -Wl,DLL +cmd_solink = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,DLL -o $(patsubst %.x,%.so,$@) $(LD_INPUTS) $(LIBS) && if [ -f $(notdir $@) ]; then /bin/cp $(notdir $@) $@; else true; fi quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ -cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) -Wl,DLL +cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) """ # noqa: E501 @@ -400,6 +420,9 @@ def CalculateGeneratorInputInfo(params): # send stderr to /dev/null to ignore messages when linking directories. cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp %(copy_archive_args)s "$<" "$@") +quiet_cmd_symlink = SYMLINK $@ +cmd_symlink = ln -sf "$<" "$@" + %(link_commands)s """ # noqa: E501 r""" @@ -981,12 +1004,20 @@ def WriteActions( # libraries, but until everything is made cross-compile safe, also use # target libraries. # TODO(piman): when everything is cross-compile safe, remove lib.target - self.WriteLn( - "cmd_%s = LD_LIBRARY_PATH=$(builddir)/lib.host:" - "$(builddir)/lib.target:$$LD_LIBRARY_PATH; " - "export LD_LIBRARY_PATH; " - "%s%s" % (name, cd_action, command) - ) + if self.flavor == "zos" or self.flavor == "aix": + self.WriteLn( + "cmd_%s = LIBPATH=$(builddir)/lib.host:" + "$(builddir)/lib.target:$$LIBPATH; " + "export LIBPATH; " + "%s%s" % (name, cd_action, command) + ) + else: + self.WriteLn( + "cmd_%s = LD_LIBRARY_PATH=$(builddir)/lib.host:" + "$(builddir)/lib.target:$$LD_LIBRARY_PATH; " + "export LD_LIBRARY_PATH; " + "%s%s" % (name, cd_action, command) + ) self.WriteLn() outputs = [self.Absolutify(o) for o in outputs] # The makefile rules are all relative to the top dir, but the gyp actions @@ -1480,6 +1511,8 @@ def ComputeOutputBasename(self, spec): target_prefix = "lib" if self.flavor == "aix": target_ext = ".a" + elif self.flavor == "zos": + target_ext = ".x" else: target_ext = ".so" elif self.type == "none": @@ -1560,6 +1593,14 @@ def ComputeDeps(self, spec): # link_deps.extend(spec.get('libraries', [])) return (gyp.common.uniquer(deps), gyp.common.uniquer(link_deps)) + def GetSharedObjectFromSidedeck(self, sidedeck): + """Return the shared object files based on sidedeck""" + return re.sub(r"\.x$", ".so", sidedeck) + + def GetUnversionedSidedeckFromSidedeck(self, sidedeck): + """Return the shared object files based on sidedeck""" + return re.sub(r"\.\d+\.x$", ".x", sidedeck) + def WriteDependencyOnExtraOutputs(self, target, extra_outputs): self.WriteMakeRule( [self.output_binary], @@ -1798,6 +1839,11 @@ def WriteTarget( part_of_all, postbuilds=postbuilds, ) + # z/OS has a .so target as well as a sidedeck .x target + if self.flavor == "zos": + self.WriteLn('%s: %s' % ( + QuoteSpaces(self.GetSharedObjectFromSidedeck(self.output_binary)), + QuoteSpaces(self.output_binary))) elif self.type == "loadable_module": for link_dep in link_deps: assert " " not in link_dep, ( @@ -1855,7 +1901,9 @@ def WriteTarget( else: file_desc = "executable" install_path = self._InstallableTargetInstallPath() - installable_deps = [self.output] + installable_deps = [] + if self.flavor != "zos": + installable_deps.append(self.output) if ( self.flavor == "mac" and "product_dir" not in spec @@ -1880,7 +1928,23 @@ def WriteTarget( comment="Copy this to the %s output path." % file_desc, part_of_all=part_of_all, ) - installable_deps.append(install_path) + if self.flavor != "zos": + installable_deps.append(install_path) + if self.flavor == 'zos' and self.type == 'shared_library': + # lib.target/libnode.so has a dependency on $(obj).target/libnode.so + self.WriteDoCmd([self.GetSharedObjectFromSidedeck(install_path)], + [self.GetSharedObjectFromSidedeck(self.output)], 'copy', + comment='Copy this to the %s output path.' % + file_desc, part_of_all=part_of_all) + # Create a symlink of libnode.x to libnode.version.x + self.WriteDoCmd([self.GetUnversionedSidedeckFromSidedeck(install_path)], + [install_path], 'symlink', + comment='Symlnk this to the %s output path.' % + file_desc, part_of_all=part_of_all) + # Place libnode.version.so and libnode.x symlink in lib.target dir + installable_deps.append(self.GetSharedObjectFromSidedeck(install_path)) + installable_deps.append( + self.GetUnversionedSidedeckFromSidedeck(install_path)) if self.output != self.alias and self.alias != self.target: self.WriteMakeRule( [self.alias], @@ -1888,7 +1952,18 @@ def WriteTarget( comment="Short alias for building this %s." % file_desc, phony=True, ) - if part_of_all: + if self.flavor == 'zos' and self.type == 'shared_library': + # Make sure that .x symlink target is run + self.WriteMakeRule( + ['all'], + [ + self.GetUnversionedSidedeckFromSidedeck(install_path), + self.GetSharedObjectFromSidedeck(install_path) + ], + comment='Add %s to "all" target.' % file_desc, + phony=True, + ) + elif part_of_all: self.WriteMakeRule( ["all"], [install_path], @@ -2184,6 +2259,9 @@ def _InstallableTargetInstallPath(self): # # Install all shared libs into a common directory (per toolset) for # # convenient access with LD_LIBRARY_PATH. # return "$(builddir)/lib.%s/%s" % (self.toolset, self.alias) + if self.flavor == "zos" and self.type == "shared_library": + return "$(builddir)/lib.%s/%s" % (self.toolset, self.alias) + return "$(builddir)/" + self.alias @@ -2351,6 +2429,16 @@ def CalculateMakefilePath(build_file, base_name): "flock_index": 2, } ) + elif flavor == "os400": + copy_archive_arguments = "-pPRf" + header_params.update( + { + "copy_archive_args": copy_archive_arguments, + "link_commands": LINK_COMMANDS_OS400, + "flock": "./gyp-flock-tool flock", + "flock_index": 2, + } + ) build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0]) make_global_settings_array = data[build_file].get("make_global_settings", []) diff --git a/tools/gyp/pylib/gyp/generator/msvs.py b/tools/gyp/pylib/gyp/generator/msvs.py index 8308fa84333..fd950057847 100644 --- a/tools/gyp/pylib/gyp/generator/msvs.py +++ b/tools/gyp/pylib/gyp/generator/msvs.py @@ -423,12 +423,15 @@ def _BuildCommandLineForRuleRaw( command.insert(0, "call") # Fix the paths # TODO(quote): This is a really ugly heuristic, and will miss path fixing - # for arguments like "--arg=path" or "/opt:path". - # If the argument starts with a slash or dash, it's probably a command line - # switch + # for arguments like "--arg=path", arg=path, or "/opt:path". + # If the argument starts with a slash or dash, or contains an equal sign, + # it's probably a command line switch. # Return the path with forward slashes because the command using it might # not support backslashes. - arguments = [i if (i[:1] in "/-") else _FixPath(i, "/") for i in cmd[1:]] + arguments = [ + i if (i[:1] in "/-" or "=" in i) else _FixPath(i, "/") + for i in cmd[1:] + ] arguments = [i.replace("$(InputDir)", "%INPUTDIR%") for i in arguments] arguments = [MSVSSettings.FixVCMacroSlashes(i) for i in arguments] if quote_cmd: diff --git a/tools/gyp/pylib/gyp/generator/ninja.py b/tools/gyp/pylib/gyp/generator/ninja.py index d173bf22990..3db3771ac97 100644 --- a/tools/gyp/pylib/gyp/generator/ninja.py +++ b/tools/gyp/pylib/gyp/generator/ninja.py @@ -2112,8 +2112,8 @@ class MEMORYSTATUSEX(ctypes.Structure): ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat)) # VS 2015 uses 20% more working set than VS 2013 and can consume all RAM - # on a 64 GB machine. - mem_limit = max(1, stat.ullTotalPhys // (5 * (2 ** 30))) # total / 5GB + # on a 64 GiB machine. + mem_limit = max(1, stat.ullTotalPhys // (5 * (2 ** 30))) # total / 5GiB hard_cap = max(1, int(os.environ.get("GYP_LINK_CONCURRENCY_MAX", 2 ** 32))) return min(mem_limit, hard_cap) elif sys.platform.startswith("linux"): diff --git a/tools/gyp/setup.py b/tools/gyp/setup.py index 576880a7f7a..fa2eefe39f5 100644 --- a/tools/gyp/setup.py +++ b/tools/gyp/setup.py @@ -15,7 +15,7 @@ setup( name="gyp-next", - version="0.10.1", + version="0.12.1", description="A fork of the GYP build system for use in the Node.js projects", long_description=long_description, long_description_content_type="text/markdown", diff --git a/tools/gyp/test_gyp.py b/tools/gyp/test_gyp.py index 9ba264170f4..b7bb956b8ed 100755 --- a/tools/gyp/test_gyp.py +++ b/tools/gyp/test_gyp.py @@ -116,6 +116,7 @@ def main(argv=None): else: format_list = { "aix5": ["make"], + "os400": ["make"], "freebsd7": ["make"], "freebsd8": ["make"], "openbsd5": ["make"], diff --git a/tools/gyp/tools/pretty_gyp.py b/tools/gyp/tools/pretty_gyp.py index 4ffa4445518..6eef3a1bbf0 100755 --- a/tools/gyp/tools/pretty_gyp.py +++ b/tools/gyp/tools/pretty_gyp.py @@ -90,7 +90,7 @@ def count_braces(line): """ open_braces = ["[", "(", "{"] close_braces = ["]", ")", "}"] - closing_prefix_re = re.compile(r"(.*?[^\s\]\}\)]+.*?)([\]\}\)],?)\s*$") + closing_prefix_re = re.compile(r"[^\s\]\}\)]\s*[\]\}\)]+,?\s*$") cnt = 0 stripline = COMMENT_RE.sub(r"", line) stripline = QUOTE_RE.sub(r"''", stripline) diff --git a/tools/icu/README.md b/tools/icu/README.md index 2e908e2cf44..0740b718a85 100644 --- a/tools/icu/README.md +++ b/tools/icu/README.md @@ -36,4 +36,4 @@ Note: * [The ICU Homepage][ICU] [ICU]: http://icu-project.org -[ICU data slicer]: https://github.com/unicode-org/icu/blob/master/docs/userguide/icu_data/buildtool.md +[ICU data slicer]: https://github.com/unicode-org/icu/blob/HEAD/docs/userguide/icu_data/buildtool.md diff --git a/tools/icu/current_ver.dep b/tools/icu/current_ver.dep index d135e99146e..9d2ca52eda4 100644 --- a/tools/icu/current_ver.dep +++ b/tools/icu/current_ver.dep @@ -1,6 +1,6 @@ [ { - "url": "https://github.com/unicode-org/icu/releases/download/release-70-1/icu4c-70_1-src.tgz", - "md5": "65287befec8116d79af23a58aa50c60d" + "url": "https://github.com/unicode-org/icu/releases/download/release-71-1/icu4c-71_1-src.tgz", + "md5": "e06ffc96f59762bd3c929b217445aaec" } ] diff --git a/tools/inspector_protocol/encoding/encoding.h b/tools/inspector_protocol/encoding/encoding.h index 08596e9e1e4..14432484d55 100644 --- a/tools/inspector_protocol/encoding/encoding.h +++ b/tools/inspector_protocol/encoding/encoding.h @@ -167,7 +167,7 @@ namespace cbor { // must use a 32 bit wide length. // - At the top level, a message must be an indefinite length map // wrapped by an envelope. -// - Maximal size for messages is 2^32 (4 GB). +// - Maximal size for messages is 2^32 (4 GiB). // - For scalars, we support only the int32_t range, encoded as // UNSIGNED/NEGATIVE (major types 0 / 1). // - UTF16 strings, including with unbalanced surrogate pairs, are encoded diff --git a/tools/inspector_protocol/lib/encoding_h.template b/tools/inspector_protocol/lib/encoding_h.template index 2c6cfc10d59..4d9874bfbd5 100644 --- a/tools/inspector_protocol/lib/encoding_h.template +++ b/tools/inspector_protocol/lib/encoding_h.template @@ -176,7 +176,7 @@ namespace cbor { // must use a 32 bit wide length. // - At the top level, a message must be an indefinite length map // wrapped by an envelope. -// - Maximal size for messages is 2^32 (4 GB). +// - Maximal size for messages is 2^32 (4 GiB). // - For scalars, we support only the int32_t range, encoded as // UNSIGNED/NEGATIVE (major types 0 / 1). // - UTF16 strings, including with unbalanced surrogate pairs, are encoded diff --git a/tools/install.py b/tools/install.py index 8a050dfa7c8..f9f4b3c6c0f 100755 --- a/tools/install.py +++ b/tools/install.py @@ -7,6 +7,7 @@ import os import shutil import sys +import re # set at init time node_prefix = '/usr/local' # PREFIX variable from Makefile @@ -120,6 +121,17 @@ def corepack_files(action): # 'pnpx': 'dist/pnpx.js', }) + # On z/OS, we install node-gyp for convenience, as some vendors don't have + # external access and may want to build native addons. + if sys.platform == 'zos': + link_path = abspath(install_path, 'bin/node-gyp') + if action == uninstall: + action([link_path], 'bin/node-gyp') + elif action == install: + try_symlink('../lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js', link_path) + else: + assert 0 # unhandled action type + def subdir_files(path, dest, action): ret = {} for dirpath, dirnames, filenames in os.walk(path): @@ -133,20 +145,38 @@ def files(action): output_file = 'node' output_prefix = 'out/Release/' - if 'false' == variables.get('node_shared'): - if is_windows: - output_file += '.exe' - else: + if is_windows: + output_file += '.exe' + action([output_prefix + output_file], 'bin/' + output_file) + + if 'true' == variables.get('node_shared'): if is_windows: - output_file += '.dll' + action([output_prefix + 'libnode.dll'], 'bin/libnode.dll') + action([output_prefix + 'libnode.lib'], 'lib/libnode.lib') + elif sys.platform == 'zos': + # GYP will output to lib.target; see _InstallableTargetInstallPath + # function in tools/gyp/pylib/gyp/generator/make.py + output_prefix += 'lib.target/' + + output_lib = 'libnode.' + variables.get('shlib_suffix') + action([output_prefix + output_lib], 'lib/' + output_lib) + + # create libnode.x that references libnode.so (C++ addons compat) + os.system(os.path.dirname(os.path.realpath(__file__)) + + '/zos/modifysidedeck.sh ' + + abspath(install_path, 'lib/' + output_lib) + ' ' + + abspath(install_path, 'lib/libnode.x') + ' libnode.so') + + # install libnode.version.so + so_name = 'libnode.' + re.sub(r'\.x$', '.so', variables.get('shlib_suffix')) + action([output_prefix + so_name], variables.get('libdir') + '/' + so_name) + + # create symlink of libnode.so -> libnode.version.so (C++ addons compat) + link_path = abspath(install_path, 'lib/libnode.so') + try_symlink(so_name, link_path) else: - output_file = 'lib' + output_file + '.' + variables.get('shlib_suffix') - - if 'false' == variables.get('node_shared'): - action([output_prefix + output_file], 'bin/' + output_file) - else: - action([output_prefix + output_file], 'lib/' + output_file) - + output_lib = 'libnode.' + variables.get('shlib_suffix') + action([output_prefix + output_lib], variables.get('libdir') + '/' + output_lib) if 'true' == variables.get('node_use_dtrace'): action(['out/Release/node.d'], 'lib/dtrace/node.d') diff --git a/tools/js2c.py b/tools/js2c.py index d93be2123e0..e295949a185 100755 --- a/tools/js2c.py +++ b/tools/js2c.py @@ -48,24 +48,24 @@ def ReadFile(filename): TEMPLATE = """ #include "env-inl.h" -#include "node_native_module.h" +#include "node_builtins.h" #include "node_internals.h" namespace node {{ -namespace native_module {{ +namespace builtins {{ {0} -void NativeModuleLoader::LoadJavaScriptSource() {{ +void BuiltinLoader::LoadJavaScriptSource() {{ {1} }} -UnionBytes NativeModuleLoader::GetConfig() {{ +UnionBytes BuiltinLoader::GetConfig() {{ return UnionBytes(config_raw, {2}); // config.gypi }} -}} // namespace native_module +}} // namespace builtins }} // namespace node """ diff --git a/tools/license-builder.sh b/tools/license-builder.sh index 4aa7224d8e3..119fba406a0 100755 --- a/tools/license-builder.sh +++ b/tools/license-builder.sh @@ -65,7 +65,7 @@ licenseText="$(cat "${rootdir}"/deps/corepack/LICENSE.md)" addlicense "corepack" "deps/corepack" "$licenseText" licenseText="$(cat "${rootdir}"/deps/undici/LICENSE)" addlicense "undici" "deps/undici" "$licenseText" -licenseText="$(cat "${rootdir}"/deps/openssl/openssl/LICENSE.txt)" +licenseText="$(cat "${rootdir}"/deps/openssl/openssl/LICENSE)" addlicense "OpenSSL" "deps/openssl" "$licenseText" licenseText="$(curl -sL https://raw.githubusercontent.com/bestiejs/punycode.js/HEAD/LICENSE-MIT.txt)" addlicense "Punycode.js" "lib/punycode.js" "$licenseText" @@ -136,4 +136,7 @@ addlicense "nghttp3" "deps/ngtcp2/nghttp3/" "$licenseText" licenseText="$(curl -sL https://raw.githubusercontent.com/jprichardson/node-fs-extra/b34da2762a4865b025cac06d02d6a2f1f1027b65/LICENSE)" addlicense "node-fs-extra" "lib/internal/fs/cp" "$licenseText" +licenseText="$(cat "${rootdir}"/deps/base64/base64/LICENSE)" +addlicense "base64" "deps/base64/base64/" "$licenseText" + mv "$tmplicense" "$licensefile" diff --git a/tools/license2rtf.js b/tools/license2rtf.js deleted file mode 100644 index 817da81d7a6..00000000000 --- a/tools/license2rtf.js +++ /dev/null @@ -1,305 +0,0 @@ -'use strict'; - -const assert = require('assert'); -const Stream = require('stream'); - - -/* - * This filter consumes a stream of characters and emits one string per line. - */ -class LineSplitter extends Stream { - constructor() { - super(); - this.buffer = ''; - this.writable = true; - } - - write(data) { - const lines = (this.buffer + data).split(/\r\n|\n\r|\n|\r/); - for (let i = 0; i < lines.length - 1; i++) { - this.emit('data', lines[i]); - } - this.buffer = lines[lines.length - 1]; - return true; - } - - end(data) { - this.write(data || ''); - if (this.buffer) { - this.emit('data', this.buffer); - } - this.emit('end'); - } -} - - -/* - * This filter consumes lines and emits paragraph objects. - */ -class ParagraphParser extends Stream { - constructor() { - super(); - this.blockIsLicenseBlock = false; - this.writable = true; - this.resetBlock(false); - } - - write(data) { - this.parseLine(data + ''); - return true; - } - - end(data) { - if (data) - this.parseLine(data + ''); - this.flushParagraph(); - this.emit('end'); - } - - resetParagraph() { - this.paragraphLineIndent = -1; - - this.paragraph = { - li: '', - inLicenseBlock: this.blockIsLicenseBlock, - lines: [] - }; - } - - resetBlock(isLicenseBlock) { - this.blockIsLicenseBlock = isLicenseBlock; - this.blockHasCStyleComment = false; - this.resetParagraph(); - } - - flushParagraph() { - if (this.paragraph.lines.length || this.paragraph.li) { - this.emit('data', this.paragraph); - } - this.resetParagraph(); - } - - parseLine(line) { - // Strip trailing whitespace - line = line.trimRight(); - - // Detect block separator - if (/^\s*(=|"){3,}\s*$/.test(line)) { - this.flushParagraph(); - this.resetBlock(!this.blockIsLicenseBlock); - return; - } - - // Strip comments around block - if (this.blockIsLicenseBlock) { - if (!this.blockHasCStyleComment) - this.blockHasCStyleComment = /^\s*(\/\*)/.test(line); - if (this.blockHasCStyleComment) { - const prev = line; - line = line.replace(/^(\s*?)(?:\s?\*\/|\/\*\s|\s\*\s?)/, '$1'); - if (prev === line) - line = line.replace(/^\s{2}/, ''); - if (/\*\//.test(prev)) - this.blockHasCStyleComment = false; - } else { - // Strip C++ and perl style comments. - line = line.replace(/^(\s*)(?:\/\/\s?|#\s?)/, '$1'); - } - } - - // Detect blank line (paragraph separator) - if (!/\S/.test(line)) { - this.flushParagraph(); - return; - } - - // Detect separator "lines" within a block. These mark a paragraph break - // and are stripped from the output. - if (/^\s*[=*-]{5,}\s*$/.test(line)) { - this.flushParagraph(); - return; - } - - // Find out indentation level and the start of a lied or numbered list; - const result = /^(\s*)(\d+\.|\*|-)?\s*/.exec(line); - assert.ok(result); - // The number of characters that will be stripped from the beginning of - // the line. - const lineStripLength = result[0].length; - // The indentation size that will be used to detect indentation jumps. - // Fudge by 1 space. - const lineIndent = Math.floor(lineStripLength / 2) * 2; - // The indentation level that will be exported - const level = Math.floor(result[1].length / 2); - // The list indicator that precedes the actual content, if any. - const lineLi = result[2]; - - // Flush the paragraph when there is a li or an indentation jump - if (lineLi || (lineIndent !== this.paragraphLineIndent && - this.paragraphLineIndent !== -1)) { - this.flushParagraph(); - this.paragraph.li = lineLi; - } - - // Set the paragraph indent that we use to detect indentation jumps. When - // we just detected a list indicator, wait - // for the next line to arrive before setting this. - if (!lineLi && this.paragraphLineIndent !== -1) { - this.paragraphLineIndent = lineIndent; - } - - // Set the output indent level if it has not been set yet. - if (this.paragraph.level === undefined) - this.paragraph.level = level; - - // Strip leading whitespace and li. - line = line.slice(lineStripLength); - - if (line) - this.paragraph.lines.push(line); - } -} - - -/* - * This filter consumes paragraph objects and emits modified paragraph objects. - * The lines within the paragraph are unwrapped where appropriate. It also - * replaces multiple consecutive whitespace characters by a single one. - */ -class Unwrapper extends Stream { - constructor() { - super(); - this.writable = true; - } - - write(paragraph) { - const lines = paragraph.lines; - const breakAfter = []; - let i; - - for (i = 0; i < lines.length - 1; i++) { - const line = lines[i]; - - // When a line is really short, the line was probably kept separate for a - // reason. - if (line.length < 50) { - // If the first word on the next line really didn't fit after the line, - // it probably was just ordinary wrapping after all. - const nextFirstWordLength = lines[i + 1].replace(/\s.*$/, '').length; - if (line.length + nextFirstWordLength < 60) { - breakAfter[i] = true; - } - } - } - - for (i = 0; i < lines.length - 1;) { - if (!breakAfter[i]) { - lines[i] += ` ${lines.splice(i + 1, 1)[0]}`; - } else { - i++; - } - } - - for (i = 0; i < lines.length; i++) { - // Replace multiple whitespace characters by a single one, and strip - // trailing whitespace. - lines[i] = lines[i].replace(/\s+/g, ' ').replace(/\s+$/, ''); - } - - this.emit('data', paragraph); - } - - end(data) { - if (data) - this.write(data); - this.emit('end'); - } -} - -function rtfEscape(string) { - function toHex(number, length) { - return (~~number).toString(16).padStart(length, '0'); - } - - return string - .replace(/[\\{}]/g, (m) => `\\${m}`) - .replace(/\t/g, () => '\\tab ') - // eslint-disable-next-line no-control-regex - .replace(/[\x00-\x1f\x7f-\xff]/g, (m) => `\\'${toHex(m.charCodeAt(0), 2)}`) - .replace(/\ufeff/g, '') - .replace(/[\u0100-\uffff]/g, (m) => `\\u${toHex(m.charCodeAt(0), 4)}?`); -} - -/* - * This filter generates an rtf document from a stream of paragraph objects. - */ -class RtfGenerator extends Stream { - constructor() { - super(); - this.didWriteAnything = false; - this.writable = true; - } - - write({ li, level, lines, inLicenseBlock: lic }) { - if (!this.didWriteAnything) { - this.emitHeader(); - this.didWriteAnything = true; - } - - if (li) - level++; - - let rtf = '\\pard\\sa150\\sl300\\slmult1'; - if (level > 0) - rtf += `\\li${level * 240}`; - if (li) - rtf += `\\tx${level * 240}\\fi-240`; - if (lic) - rtf += '\\ri240'; - if (!lic) - rtf += '\\b'; - if (li) - rtf += ` ${li}\\tab`; - rtf += ` ${lines.map(rtfEscape).join('\\line ')}`; - if (!lic) - rtf += '\\b0'; - rtf += '\\par\n'; - - this.emit('data', rtf); - } - - end(data) { - if (data) - this.write(data); - if (this.didWriteAnything) - this.emitFooter(); - this.emit('end'); - } - - emitHeader() { - this.emit('data', '{\\rtf1\\ansi\\ansicpg1252\\uc1\\deff0\\deflang1033' + - '{\\fonttbl{\\f0\\fswiss\\fcharset0 Tahoma;}}\\fs20\n' + - '{\\*\\generator txt2rtf 0.0.1;}\n'); - } - - emitFooter() { - this.emit('data', '}'); - } -} - - -const stdin = process.stdin; -const stdout = process.stdout; -const lineSplitter = new LineSplitter(); -const paragraphParser = new ParagraphParser(); -const unwrapper = new Unwrapper(); -const rtfGenerator = new RtfGenerator(); - -stdin.setEncoding('utf-8'); -stdin.resume(); - -stdin.pipe(lineSplitter); -lineSplitter.pipe(paragraphParser); -paragraphParser.pipe(unwrapper); -unwrapper.pipe(rtfGenerator); -rtfGenerator.pipe(stdout); diff --git a/tools/license2rtf.mjs b/tools/license2rtf.mjs new file mode 100644 index 00000000000..d982e679c3e --- /dev/null +++ b/tools/license2rtf.mjs @@ -0,0 +1,303 @@ +import assert from 'node:assert'; +import Stream from 'node:stream'; +import { pipeline } from 'node:stream/promises'; +import { stdin, stdout } from 'node:process'; + +/* + * This filter consumes a stream of characters and emits one string per line. + */ +class LineSplitter extends Stream { + constructor() { + super(); + this.buffer = ''; + this.writable = true; + } + + write(data) { + const lines = (this.buffer + data).split(/\r\n|\n\r|\n|\r/); + for (let i = 0; i < lines.length - 1; i++) { + this.emit('data', lines[i]); + } + this.buffer = lines[lines.length - 1]; + return true; + } + + end(data) { + this.write(data || ''); + if (this.buffer) { + this.emit('data', this.buffer); + } + this.writable = false; + this.emit('end'); + } +} + + +/* + * This filter consumes lines and emits paragraph objects. + */ +class ParagraphParser extends Stream { + constructor() { + super(); + this.blockIsLicenseBlock = false; + this.writable = true; + this.resetBlock(false); + } + + write(data) { + this.parseLine(data + ''); + return true; + } + + end(data) { + if (data) + this.parseLine(data + ''); + this.flushParagraph(); + this.writable = false; + this.emit('end'); + } + + resetParagraph() { + this.paragraphLineIndent = -1; + + this.paragraph = { + li: '', + inLicenseBlock: this.blockIsLicenseBlock, + lines: [] + }; + } + + resetBlock(isLicenseBlock) { + this.blockIsLicenseBlock = isLicenseBlock; + this.blockHasCStyleComment = false; + this.resetParagraph(); + } + + flushParagraph() { + if (this.paragraph.lines.length || this.paragraph.li) { + this.emit('data', this.paragraph); + } + this.resetParagraph(); + } + + parseLine(line) { + // Strip trailing whitespace + line = line.trimRight(); + + // Detect block separator + if (/^\s*(=|"){3,}\s*$/.test(line)) { + this.flushParagraph(); + this.resetBlock(!this.blockIsLicenseBlock); + return; + } + + // Strip comments around block + if (this.blockIsLicenseBlock) { + if (!this.blockHasCStyleComment) + this.blockHasCStyleComment = /^\s*(\/\*)/.test(line); + if (this.blockHasCStyleComment) { + const prev = line; + line = line.replace(/^(\s*?)(?:\s?\*\/|\/\*\s|\s\*\s?)/, '$1'); + if (prev === line) + line = line.replace(/^\s{2}/, ''); + if (/\*\//.test(prev)) + this.blockHasCStyleComment = false; + } else { + // Strip C++ and perl style comments. + line = line.replace(/^(\s*)(?:\/\/\s?|#\s?)/, '$1'); + } + } + + // Detect blank line (paragraph separator) + if (!/\S/.test(line)) { + this.flushParagraph(); + return; + } + + // Detect separator "lines" within a block. These mark a paragraph break + // and are stripped from the output. + if (/^\s*[=*-]{5,}\s*$/.test(line)) { + this.flushParagraph(); + return; + } + + // Find out indentation level and the start of a lied or numbered list; + const result = /^(\s*)(\d+\.|\*|-)?\s*/.exec(line); + assert.ok(result); + // The number of characters that will be stripped from the beginning of + // the line. + const lineStripLength = result[0].length; + // The indentation size that will be used to detect indentation jumps. + // Fudge by 1 space. + const lineIndent = Math.floor(lineStripLength / 2) * 2; + // The indentation level that will be exported + const level = Math.floor(result[1].length / 2); + // The list indicator that precedes the actual content, if any. + const lineLi = result[2]; + + // Flush the paragraph when there is a li or an indentation jump + if (lineLi || (lineIndent !== this.paragraphLineIndent && + this.paragraphLineIndent !== -1)) { + this.flushParagraph(); + this.paragraph.li = lineLi; + } + + // Set the paragraph indent that we use to detect indentation jumps. When + // we just detected a list indicator, wait + // for the next line to arrive before setting this. + if (!lineLi && this.paragraphLineIndent !== -1) { + this.paragraphLineIndent = lineIndent; + } + + // Set the output indent level if it has not been set yet. + if (this.paragraph.level === undefined) + this.paragraph.level = level; + + // Strip leading whitespace and li. + line = line.slice(lineStripLength); + + if (line) + this.paragraph.lines.push(line); + } +} + + +/* + * This filter consumes paragraph objects and emits modified paragraph objects. + * The lines within the paragraph are unwrapped where appropriate. It also + * replaces multiple consecutive whitespace characters by a single one. + */ +class Unwrapper extends Stream { + constructor() { + super(); + this.writable = true; + } + + write(paragraph) { + const lines = paragraph.lines; + const breakAfter = []; + let i; + + for (i = 0; i < lines.length - 1; i++) { + const line = lines[i]; + + // When a line is really short, the line was probably kept separate for a + // reason. + if (line.length < 50) { + // If the first word on the next line really didn't fit after the line, + // it probably was just ordinary wrapping after all. + const nextFirstWordLength = lines[i + 1].replace(/\s.*$/, '').length; + if (line.length + nextFirstWordLength < 60) { + breakAfter[i] = true; + } + } + } + + for (i = 0; i < lines.length - 1;) { + if (!breakAfter[i]) { + lines[i] += ` ${lines.splice(i + 1, 1)[0]}`; + } else { + i++; + } + } + + for (i = 0; i < lines.length; i++) { + // Replace multiple whitespace characters by a single one, and strip + // trailing whitespace. + lines[i] = lines[i].replace(/\s+/g, ' ').replace(/\s+$/, ''); + } + + this.emit('data', paragraph); + } + + end(data) { + if (data) + this.write(data); + this.writable = false; + this.emit('end'); + } +} + +function rtfEscape(string) { + function toHex(number, length) { + return (~~number).toString(16).padStart(length, '0'); + } + + return string + .replace(/[\\{}]/g, (m) => `\\${m}`) + .replace(/\t/g, () => '\\tab ') + // eslint-disable-next-line no-control-regex + .replace(/[\x00-\x1f\x7f-\xff]/g, (m) => `\\'${toHex(m.charCodeAt(0), 2)}`) + .replace(/\ufeff/g, '') + .replace(/[\u0100-\uffff]/g, (m) => `\\u${toHex(m.charCodeAt(0), 4)}?`); +} + +/* + * This filter generates an rtf document from a stream of paragraph objects. + */ +class RtfGenerator extends Stream { + constructor() { + super(); + this.didWriteAnything = false; + this.writable = true; + } + + write({ li, level, lines, inLicenseBlock: lic }) { + if (!this.didWriteAnything) { + this.emitHeader(); + this.didWriteAnything = true; + } + + if (li) + level++; + + let rtf = '\\pard\\sa150\\sl300\\slmult1'; + if (level > 0) + rtf += `\\li${level * 240}`; + if (li) + rtf += `\\tx${level * 240}\\fi-240`; + if (lic) + rtf += '\\ri240'; + if (!lic) + rtf += '\\b'; + if (li) + rtf += ` ${li}\\tab`; + rtf += ` ${lines.map(rtfEscape).join('\\line ')}`; + if (!lic) + rtf += '\\b0'; + rtf += '\\par\n'; + + this.emit('data', rtf); + } + + end(data) { + if (data) + this.write(data); + if (this.didWriteAnything) + this.emitFooter(); + this.writable = false; + this.emit('end'); + } + + emitHeader() { + this.emit('data', '{\\rtf1\\ansi\\ansicpg1252\\uc1\\deff0\\deflang1033' + + '{\\fonttbl{\\f0\\fswiss\\fcharset0 Tahoma;}}\\fs20\n' + + '{\\*\\generator txt2rtf 0.0.1;}\n'); + } + + emitFooter() { + this.emit('data', '}'); + } +} + +stdin.setEncoding('utf-8'); +stdin.resume(); + +await pipeline( + stdin, + new LineSplitter(), + new ParagraphParser(), + new Unwrapper(), + new RtfGenerator(), + stdout, +); diff --git a/tools/lint-md/lint-md.mjs b/tools/lint-md/lint-md.mjs index ab6150f996e..6c881d4df38 100644 --- a/tools/lint-md/lint-md.mjs +++ b/tools/lint-md/lint-md.mjs @@ -14,10 +14,6 @@ function bail(error) { var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; -function commonjsRequire (path) { - throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); -} - /*! * Determine if an object is a Buffer * @@ -114,11 +110,11 @@ var extend$1 = function extend() { }; function isPlainObject(value) { - if (Object.prototype.toString.call(value) !== '[object Object]') { + if (typeof value !== 'object' || value === null) { return false; } const prototype = Object.getPrototypeOf(value); - return prototype === null || prototype === Object.prototype; + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value); } function trough() { @@ -1507,18 +1503,13 @@ function tokenizeCharacterEscape(effects, ok, nok) { } const characterEntities = { - AEli: 'Æ', AElig: 'Æ', - AM: '&', AMP: '&', - Aacut: 'Á', Aacute: 'Á', Abreve: 'Ă', - Acir: 'Â', Acirc: 'Â', Acy: 'А', Afr: '𝔄', - Agrav: 'À', Agrave: 'À', Alpha: 'Α', Amacr: 'Ā', @@ -1526,13 +1517,10 @@ const characterEntities = { Aogon: 'Ą', Aopf: '𝔸', ApplyFunction: '⁡', - Arin: 'Å', Aring: 'Å', Ascr: '𝒜', Assign: '≔', - Atild: 'Ã', Atilde: 'Ã', - Aum: 'Ä', Auml: 'Ä', Backslash: '∖', Barv: '⫧', @@ -1547,14 +1535,12 @@ const characterEntities = { Bscr: 'ℬ', Bumpeq: '≎', CHcy: 'Ч', - COP: '©', COPY: '©', Cacute: 'Ć', Cap: '⋒', CapitalDifferentialD: 'ⅅ', Cayleys: 'ℭ', Ccaron: 'Č', - Ccedi: 'Ç', Ccedil: 'Ç', Ccirc: 'Ĉ', Cconint: '∰', @@ -1637,17 +1623,13 @@ const characterEntities = { Dscr: '𝒟', Dstrok: 'Đ', ENG: 'Ŋ', - ET: 'Ð', ETH: 'Ð', - Eacut: 'É', Eacute: 'É', Ecaron: 'Ě', - Ecir: 'Ê', Ecirc: 'Ê', Ecy: 'Э', Edot: 'Ė', Efr: '𝔈', - Egrav: 'È', Egrave: 'È', Element: '∈', Emacr: 'Ē', @@ -1662,7 +1644,6 @@ const characterEntities = { Escr: 'ℰ', Esim: '⩳', Eta: 'Η', - Eum: 'Ë', Euml: 'Ë', Exists: '∃', ExponentialE: 'ⅇ', @@ -1675,7 +1656,6 @@ const characterEntities = { Fouriertrf: 'ℱ', Fscr: 'ℱ', GJcy: 'Ѓ', - G: '>', GT: '>', Gamma: 'Γ', Gammad: 'Ϝ', @@ -1711,14 +1691,11 @@ const characterEntities = { IEcy: 'Е', IJlig: 'IJ', IOcy: 'Ё', - Iacut: 'Í', Iacute: 'Í', - Icir: 'Î', Icirc: 'Î', Icy: 'И', Idot: 'İ', Ifr: 'ℑ', - Igrav: 'Ì', Igrave: 'Ì', Im: 'ℑ', Imacr: 'Ī', @@ -1735,7 +1712,6 @@ const characterEntities = { Iscr: 'ℐ', Itilde: 'Ĩ', Iukcy: 'І', - Ium: 'Ï', Iuml: 'Ï', Jcirc: 'Ĵ', Jcy: 'Й', @@ -1753,7 +1729,6 @@ const characterEntities = { Kopf: '𝕂', Kscr: '𝒦', LJcy: 'Љ', - L: '<', LT: '<', Lacute: 'Ĺ', Lambda: 'Λ', @@ -1890,18 +1865,14 @@ const characterEntities = { NotTildeTilde: '≉', NotVerticalBar: '∤', Nscr: '𝒩', - Ntild: 'Ñ', Ntilde: 'Ñ', Nu: 'Ν', OElig: 'Œ', - Oacut: 'Ó', Oacute: 'Ó', - Ocir: 'Ô', Ocirc: 'Ô', Ocy: 'О', Odblac: 'Ő', Ofr: '𝔒', - Ograv: 'Ò', Ograve: 'Ò', Omacr: 'Ō', Omega: 'Ω', @@ -1911,12 +1882,9 @@ const characterEntities = { OpenCurlyQuote: '‘', Or: '⩔', Oscr: '𝒪', - Oslas: 'Ø', Oslash: 'Ø', - Otild: 'Õ', Otilde: 'Õ', Otimes: '⨷', - Oum: 'Ö', Ouml: 'Ö', OverBar: '‾', OverBrace: '⏞', @@ -1941,13 +1909,11 @@ const characterEntities = { Proportional: '∝', Pscr: '𝒫', Psi: 'Ψ', - QUO: '"', QUOT: '"', Qfr: '𝔔', Qopf: 'ℚ', Qscr: '𝒬', RBarr: '⤐', - RE: '®', REG: '®', Racute: 'Ŕ', Rang: '⟫', @@ -2031,7 +1997,6 @@ const characterEntities = { Superset: '⊃', SupersetEqual: '⊇', Supset: '⋑', - THOR: 'Þ', THORN: 'Þ', TRADE: '™', TSHcy: 'Ћ', @@ -2054,18 +2019,15 @@ const characterEntities = { TripleDot: '⃛', Tscr: '𝒯', Tstrok: 'Ŧ', - Uacut: 'Ú', Uacute: 'Ú', Uarr: '↟', Uarrocir: '⥉', Ubrcy: 'Ў', Ubreve: 'Ŭ', - Ucir: 'Û', Ucirc: 'Û', Ucy: 'У', Udblac: 'Ű', Ufr: '𝔘', - Ugrav: 'Ù', Ugrave: 'Ù', Umacr: 'Ū', UnderBar: '_', @@ -2092,7 +2054,6 @@ const characterEntities = { Uring: 'Ů', Uscr: '𝒰', Utilde: 'Ũ', - Uum: 'Ü', Uuml: 'Ü', VDash: '⊫', Vbar: '⫫', @@ -2123,7 +2084,6 @@ const characterEntities = { YAcy: 'Я', YIcy: 'Ї', YUcy: 'Ю', - Yacut: 'Ý', Yacute: 'Ý', Ycirc: 'Ŷ', Ycy: 'Ы', @@ -2141,29 +2101,23 @@ const characterEntities = { Zfr: 'ℨ', Zopf: 'ℤ', Zscr: '𝒵', - aacut: 'á', aacute: 'á', abreve: 'ă', ac: '∾', acE: '∾̳', acd: '∿', - acir: 'â', acirc: 'â', - acut: '´', acute: '´', acy: 'а', - aeli: 'æ', aelig: 'æ', af: '⁡', afr: '𝔞', - agrav: 'à', agrave: 'à', alefsym: 'ℵ', aleph: 'ℵ', alpha: 'α', amacr: 'ā', amalg: '⨿', - am: '&', amp: '&', and: '∧', andand: '⩕', @@ -2198,15 +2152,12 @@ const characterEntities = { apos: "'", approx: '≈', approxeq: '≊', - arin: 'å', aring: 'å', ascr: '𝒶', ast: '*', asymp: '≈', asympeq: '≍', - atild: 'ã', atilde: 'ã', - aum: 'ä', auml: 'ä', awconint: '∳', awint: '⨑', @@ -2311,7 +2262,6 @@ const characterEntities = { boxvr: '├', bprime: '‵', breve: '˘', - brvba: '¦', brvbar: '¦', bscr: '𝒷', bsemi: '⁏', @@ -2338,16 +2288,13 @@ const characterEntities = { caron: 'ˇ', ccaps: '⩍', ccaron: 'č', - ccedi: 'ç', ccedil: 'ç', ccirc: 'ĉ', ccups: '⩌', ccupssm: '⩐', cdot: 'ċ', - cedi: '¸', cedil: '¸', cemptyv: '⦲', - cen: '¢', cent: '¢', centerdot: '·', cfr: '𝔠', @@ -2386,7 +2333,6 @@ const characterEntities = { conint: '∮', copf: '𝕔', coprod: '∐', - cop: '©', copy: '©', copysr: '℗', crarr: '↵', @@ -2416,7 +2362,6 @@ const characterEntities = { curlyeqsucc: '⋟', curlyvee: '⋎', curlywedge: '⋏', - curre: '¤', curren: '¤', curvearrowleft: '↶', curvearrowright: '↷', @@ -2440,7 +2385,6 @@ const characterEntities = { ddagger: '‡', ddarr: '⇊', ddotseq: '⩷', - de: '°', deg: '°', delta: 'δ', demptyv: '⦱', @@ -2456,7 +2400,6 @@ const characterEntities = { digamma: 'ϝ', disin: '⋲', div: '÷', - divid: '÷', divide: '÷', divideontimes: '⋇', divonx: '⋇', @@ -2493,11 +2436,10 @@ const characterEntities = { dzigrarr: '⟿', eDDot: '⩷', eDot: '≑', - eacut: 'é', eacute: 'é', easter: '⩮', ecaron: 'ě', - ecir: 'ê', + ecir: '≖', ecirc: 'ê', ecolon: '≕', ecy: 'э', @@ -2506,7 +2448,6 @@ const characterEntities = { efDot: '≒', efr: '𝔢', eg: '⪚', - egrav: 'è', egrave: 'è', egs: '⪖', egsdot: '⪘', @@ -2548,9 +2489,7 @@ const characterEntities = { esdot: '≐', esim: '≂', eta: 'η', - et: 'ð', eth: 'ð', - eum: 'ë', euml: 'ë', euro: '€', excl: '!', @@ -2575,7 +2514,6 @@ const characterEntities = { fork: '⋔', forkv: '⫙', fpartint: '⨍', - frac1: '¼', frac12: '½', frac13: '⅓', frac14: '¼', @@ -2584,7 +2522,6 @@ const characterEntities = { frac18: '⅛', frac23: '⅔', frac25: '⅖', - frac3: '¾', frac34: '¾', frac35: '⅗', frac38: '⅜', @@ -2639,7 +2576,6 @@ const characterEntities = { gsim: '≳', gsime: '⪎', gsiml: '⪐', - g: '>', gt: '>', gtcc: '⪧', gtcir: '⩺', @@ -2683,18 +2619,14 @@ const characterEntities = { hstrok: 'ħ', hybull: '⁃', hyphen: '‐', - iacut: 'í', iacute: 'í', ic: '⁣', - icir: 'î', icirc: 'î', icy: 'и', iecy: 'е', - iexc: '¡', iexcl: '¡', iff: '⇔', ifr: '𝔦', - igrav: 'ì', igrave: 'ì', ii: 'ⅈ', iiiint: '⨌', @@ -2725,7 +2657,6 @@ const characterEntities = { iopf: '𝕚', iota: 'ι', iprod: '⨼', - iques: '¿', iquest: '¿', iscr: '𝒾', isin: '∈', @@ -2737,7 +2668,6 @@ const characterEntities = { it: '⁢', itilde: 'ĩ', iukcy: 'і', - ium: 'ï', iuml: 'ï', jcirc: 'ĵ', jcy: 'й', @@ -2772,7 +2702,6 @@ const characterEntities = { langd: '⦑', langle: '⟨', lap: '⪅', - laqu: '«', laquo: '«', larr: '←', larrb: '⇤', @@ -2894,7 +2823,6 @@ const characterEntities = { lsquo: '‘', lsquor: '‚', lstrok: 'ł', - l: '<', lt: '<', ltcc: '⪦', ltcir: '⩹', @@ -2912,7 +2840,6 @@ const characterEntities = { lvertneqq: '≨︀', lvnE: '≨︀', mDDot: '∺', - mac: '¯', macr: '¯', male: '♂', malt: '✠', @@ -2929,12 +2856,10 @@ const characterEntities = { measuredangle: '∡', mfr: '𝔪', mho: '℧', - micr: 'µ', micro: 'µ', mid: '∣', midast: '*', midcir: '⫰', - middo: '·', middot: '·', minus: '−', minusb: '⊟', @@ -2973,7 +2898,6 @@ const characterEntities = { natur: '♮', natural: '♮', naturals: 'ℕ', - nbs: ' ', nbsp: ' ', nbump: '≎̸', nbumpe: '≏̸', @@ -3032,7 +2956,6 @@ const characterEntities = { nltrie: '⋬', nmid: '∤', nopf: '𝕟', - no: '¬', not: '¬', notin: '∉', notinE: '⋹̸', @@ -3089,7 +3012,6 @@ const characterEntities = { nsupseteq: '⊉', nsupseteqq: '⫆̸', ntgl: '≹', - ntild: 'ñ', ntilde: 'ñ', ntlg: '≸', ntriangleleft: '⋪', @@ -3120,10 +3042,9 @@ const characterEntities = { nwarrow: '↖', nwnear: '⤧', oS: 'Ⓢ', - oacut: 'ó', oacute: 'ó', oast: '⊛', - ocir: 'ô', + ocir: '⊚', ocirc: 'ô', ocy: 'о', odash: '⊝', @@ -3135,7 +3056,6 @@ const characterEntities = { ofcir: '⦿', ofr: '𝔬', ogon: '˛', - ograv: 'ò', ograve: 'ò', ogt: '⧁', ohbar: '⦵', @@ -3157,7 +3077,7 @@ const characterEntities = { oplus: '⊕', or: '∨', orarr: '↻', - ord: 'º', + ord: '⩝', order: 'ℴ', orderof: 'ℴ', ordf: 'ª', @@ -3167,17 +3087,14 @@ const characterEntities = { orslope: '⩗', orv: '⩛', oscr: 'ℴ', - oslas: 'ø', oslash: 'ø', osol: '⊘', - otild: 'õ', otilde: 'õ', otimes: '⊗', otimesas: '⨶', - oum: 'ö', ouml: 'ö', ovbar: '⌽', - par: '¶', + par: '∥', para: '¶', parallel: '∥', parsim: '⫳', @@ -3207,14 +3124,12 @@ const characterEntities = { plusdo: '∔', plusdu: '⨥', pluse: '⩲', - plusm: '±', plusmn: '±', plussim: '⨦', plustwo: '⨧', pm: '±', pointint: '⨕', popf: '𝕡', - poun: '£', pound: '£', pr: '≺', prE: '⪳', @@ -3254,7 +3169,6 @@ const characterEntities = { quatint: '⨖', quest: '?', questeq: '≟', - quo: '"', quot: '"', rAarr: '⇛', rArr: '⇒', @@ -3269,7 +3183,6 @@ const characterEntities = { rangd: '⦒', range: '⦥', rangle: '⟩', - raqu: '»', raquo: '»', rarr: '→', rarrap: '⥵', @@ -3308,7 +3221,6 @@ const characterEntities = { realpart: 'ℜ', reals: 'ℝ', rect: '▭', - re: '®', reg: '®', rfisht: '⥽', rfloor: '⌋', @@ -3383,7 +3295,6 @@ const characterEntities = { searhk: '⤥', searr: '↘', searrow: '↘', - sec: '§', sect: '§', semi: ';', seswar: '⤩', @@ -3397,7 +3308,6 @@ const characterEntities = { shcy: 'ш', shortmid: '∣', shortparallel: '∥', - sh: '­', shy: '­', sigma: 'σ', sigmaf: 'ς', @@ -3484,10 +3394,10 @@ const characterEntities = { succsim: '≿', sum: '∑', sung: '♪', - sup: '⊃', sup1: '¹', sup2: '²', sup3: '³', + sup: '⊃', supE: '⫆', supdot: '⪾', supdsub: '⫘', @@ -3513,7 +3423,6 @@ const characterEntities = { swarr: '↙', swarrow: '↙', swnwar: '⤪', - szli: 'ß', szlig: 'ß', target: '⌖', tau: 'τ', @@ -3534,10 +3443,8 @@ const characterEntities = { thinsp: ' ', thkap: '≈', thksim: '∼', - thor: 'þ', thorn: 'þ', tilde: '˜', - time: '×', times: '×', timesb: '⊠', timesbar: '⨱', @@ -3575,12 +3482,10 @@ const characterEntities = { twoheadrightarrow: '↠', uArr: '⇑', uHar: '⥣', - uacut: 'ú', uacute: 'ú', uarr: '↑', ubrcy: 'ў', ubreve: 'ŭ', - ucir: 'û', ucirc: 'û', ucy: 'у', udarr: '⇅', @@ -3588,7 +3493,6 @@ const characterEntities = { udhar: '⥮', ufisht: '⥾', ufr: '𝔲', - ugrav: 'ù', ugrave: 'ù', uharl: '↿', uharr: '↾', @@ -3598,7 +3502,6 @@ const characterEntities = { ulcrop: '⌏', ultri: '◸', umacr: 'ū', - um: '¨', uml: '¨', uogon: 'ų', uopf: '𝕦', @@ -3622,7 +3525,6 @@ const characterEntities = { utri: '▵', utrif: '▴', uuarr: '⇈', - uum: 'ü', uuml: 'ü', uwangle: '⦧', vArr: '⇕', @@ -3702,19 +3604,16 @@ const characterEntities = { xutri: '△', xvee: '⋁', xwedge: '⋀', - yacut: 'ý', yacute: 'ý', yacy: 'я', ycirc: 'ŷ', ycy: 'ы', - ye: '¥', yen: '¥', yfr: '𝔶', yicy: 'ї', yopf: '𝕪', yscr: '𝓎', yucy: 'ю', - yum: 'ÿ', yuml: 'ÿ', zacute: 'ź', zcaron: 'ž', @@ -4939,7 +4838,6 @@ const htmlBlockNames = [ 'p', 'param', 'section', - 'source', 'summary', 'table', 'tbody', @@ -10801,80 +10699,6 @@ function escapeStringRegexp(string) { .replace(/-/g, '\\x2d'); } -function color$1(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE = true; -const SKIP = 'skip'; -const EXIT = false; -const visitParents = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - var is = convert(test); - var step = reverse ? -1 : 1; - factory(tree, null, [])(); - function factory(node, index, parents) { - var value = typeof node === 'object' && node !== null ? node : {}; - var name; - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + - color$1(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } - return visit - function visit() { - var result = []; - var subresult; - var offset; - var grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult(visitor(node, parents)); - if (result[0] === EXIT) { - return result - } - } - if (node.children && result[0] !== SKIP) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE, value] - } - return [value] -} - const own$3 = {}.hasOwnProperty; const findAndReplace = ( @@ -10895,7 +10719,7 @@ const findAndReplace = const pairs = toPairs(schema); let pairIndex = -1; while (++pairIndex < pairs.length) { - visitParents(tree, 'text', visitor); + visitParents$1(tree, 'text', visitor); } return tree function visitor(node, parents) { @@ -10915,24 +10739,28 @@ const findAndReplace = grandparent = parent; } if (grandparent) { - return handler(node, grandparent) + return handler(node, parents) } } - function handler(node, parent) { + function handler(node, parents) { + const parent = parents[parents.length - 1]; const find = pairs[pairIndex][0]; const replace = pairs[pairIndex][1]; let start = 0; - let index = parent.children.indexOf(node); + const index = parent.children.indexOf(node); + let change = false; let nodes = []; let position; find.lastIndex = 0; let match = find.exec(node.value); while (match) { position = match.index; - let value = replace(...match, { + const matchObject = { index: match.index, - input: match.input - }); + input: match.input, + stack: [...parents, node] + }; + let value = replace(...match, matchObject); if (typeof value === 'string') { value = value.length > 0 ? {type: 'text', value} : undefined; } @@ -10949,22 +10777,22 @@ const findAndReplace = nodes.push(value); } start = position + match[0].length; + change = true; } if (!find.global) { break } match = find.exec(node.value); } - if (position === undefined) { - nodes = [node]; - index--; - } else { + if (change) { if (start < node.value.length) { nodes.push({type: 'text', value: node.value.slice(start)}); } parent.children.splice(index, 1, ...nodes); + } else { + nodes = [node]; } - return index + nodes.length + 1 + return index + nodes.length } } ); @@ -11751,6 +11579,80 @@ function location(file) { } } +function color$1(d) { + return '\u001B[33m' + d + '\u001B[39m' +} + +const CONTINUE = true; +const SKIP = 'skip'; +const EXIT = false; +const visitParents = + ( + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + visitor = test; + test = null; + } + var is = convert(test); + var step = reverse ? -1 : 1; + factory(tree, null, [])(); + function factory(node, index, parents) { + var value = typeof node === 'object' && node !== null ? node : {}; + var name; + if (typeof value.type === 'string') { + name = + typeof value.tagName === 'string' + ? value.tagName + : typeof value.name === 'string' + ? value.name + : undefined; + Object.defineProperty(visit, 'name', { + value: + 'node (' + + color$1(value.type + (name ? '<' + name + '>' : '')) + + ')' + }); + } + return visit + function visit() { + var result = []; + var subresult; + var offset; + var grandparents; + if (!test || is(node, index, parents[parents.length - 1] || null)) { + result = toResult(visitor(node, parents)); + if (result[0] === EXIT) { + return result + } + } + if (node.children && result[0] !== SKIP) { + offset = (reverse ? node.children.length : -1) + step; + grandparents = parents.concat(node); + while (offset > -1 && offset < node.children.length) { + subresult = factory(node.children[offset], offset, grandparents)(); + if (subresult[0] === EXIT) { + return subresult + } + offset = + typeof subresult[1] === 'number' ? subresult[1] : offset + step; + } + } + return result + } + } + } + ); +function toResult(value) { + if (Array.isArray(value)) { + return value + } + if (typeof value === 'number') { + return [CONTINUE, value] + } + return [value] +} + const visit = ( function (tree, test, visitor, reverse) { @@ -12204,332 +12106,336 @@ const remarkLintFinalNewline = lintRule( ); var remarkLintFinalNewline$1 = remarkLintFinalNewline; +function commonjsRequire(path) { + throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); +} + var pluralize = {exports: {}}; (function (module, exports) { -(function (root, pluralize) { - if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') { - module.exports = pluralize(); - } else { - root.pluralize = pluralize(); - } -})(commonjsGlobal, function () { - var pluralRules = []; - var singularRules = []; - var uncountables = {}; - var irregularPlurals = {}; - var irregularSingles = {}; - function sanitizeRule (rule) { - if (typeof rule === 'string') { - return new RegExp('^' + rule + '$', 'i'); - } - return rule; - } - function restoreCase (word, token) { - if (word === token) return token; - if (word === word.toLowerCase()) return token.toLowerCase(); - if (word === word.toUpperCase()) return token.toUpperCase(); - if (word[0] === word[0].toUpperCase()) { - return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase(); - } - return token.toLowerCase(); - } - function interpolate (str, args) { - return str.replace(/\$(\d{1,2})/g, function (match, index) { - return args[index] || ''; - }); - } - function replace (word, rule) { - return word.replace(rule[0], function (match, index) { - var result = interpolate(rule[1], arguments); - if (match === '') { - return restoreCase(word[index - 1], result); - } - return restoreCase(match, result); - }); - } - function sanitizeWord (token, word, rules) { - if (!token.length || uncountables.hasOwnProperty(token)) { - return word; - } - var len = rules.length; - while (len--) { - var rule = rules[len]; - if (rule[0].test(word)) return replace(word, rule); - } - return word; - } - function replaceWord (replaceMap, keepMap, rules) { - return function (word) { - var token = word.toLowerCase(); - if (keepMap.hasOwnProperty(token)) { - return restoreCase(word, token); - } - if (replaceMap.hasOwnProperty(token)) { - return restoreCase(word, replaceMap[token]); - } - return sanitizeWord(token, word, rules); - }; - } - function checkWord (replaceMap, keepMap, rules, bool) { - return function (word) { - var token = word.toLowerCase(); - if (keepMap.hasOwnProperty(token)) return true; - if (replaceMap.hasOwnProperty(token)) return false; - return sanitizeWord(token, token, rules) === token; - }; - } - function pluralize (word, count, inclusive) { - var pluralized = count === 1 - ? pluralize.singular(word) : pluralize.plural(word); - return (inclusive ? count + ' ' : '') + pluralized; - } - pluralize.plural = replaceWord( - irregularSingles, irregularPlurals, pluralRules - ); - pluralize.isPlural = checkWord( - irregularSingles, irregularPlurals, pluralRules - ); - pluralize.singular = replaceWord( - irregularPlurals, irregularSingles, singularRules - ); - pluralize.isSingular = checkWord( - irregularPlurals, irregularSingles, singularRules - ); - pluralize.addPluralRule = function (rule, replacement) { - pluralRules.push([sanitizeRule(rule), replacement]); - }; - pluralize.addSingularRule = function (rule, replacement) { - singularRules.push([sanitizeRule(rule), replacement]); - }; - pluralize.addUncountableRule = function (word) { - if (typeof word === 'string') { - uncountables[word.toLowerCase()] = true; - return; - } - pluralize.addPluralRule(word, '$0'); - pluralize.addSingularRule(word, '$0'); - }; - pluralize.addIrregularRule = function (single, plural) { - plural = plural.toLowerCase(); - single = single.toLowerCase(); - irregularSingles[single] = plural; - irregularPlurals[plural] = single; - }; - [ - ['I', 'we'], - ['me', 'us'], - ['he', 'they'], - ['she', 'they'], - ['them', 'them'], - ['myself', 'ourselves'], - ['yourself', 'yourselves'], - ['itself', 'themselves'], - ['herself', 'themselves'], - ['himself', 'themselves'], - ['themself', 'themselves'], - ['is', 'are'], - ['was', 'were'], - ['has', 'have'], - ['this', 'these'], - ['that', 'those'], - ['echo', 'echoes'], - ['dingo', 'dingoes'], - ['volcano', 'volcanoes'], - ['tornado', 'tornadoes'], - ['torpedo', 'torpedoes'], - ['genus', 'genera'], - ['viscus', 'viscera'], - ['stigma', 'stigmata'], - ['stoma', 'stomata'], - ['dogma', 'dogmata'], - ['lemma', 'lemmata'], - ['schema', 'schemata'], - ['anathema', 'anathemata'], - ['ox', 'oxen'], - ['axe', 'axes'], - ['die', 'dice'], - ['yes', 'yeses'], - ['foot', 'feet'], - ['eave', 'eaves'], - ['goose', 'geese'], - ['tooth', 'teeth'], - ['quiz', 'quizzes'], - ['human', 'humans'], - ['proof', 'proofs'], - ['carve', 'carves'], - ['valve', 'valves'], - ['looey', 'looies'], - ['thief', 'thieves'], - ['groove', 'grooves'], - ['pickaxe', 'pickaxes'], - ['passerby', 'passersby'] - ].forEach(function (rule) { - return pluralize.addIrregularRule(rule[0], rule[1]); - }); - [ - [/s?$/i, 's'], - [/[^\u0000-\u007F]$/i, '$0'], - [/([^aeiou]ese)$/i, '$1'], - [/(ax|test)is$/i, '$1es'], - [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'], - [/(e[mn]u)s?$/i, '$1s'], - [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'], - [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'], - [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'], - [/(seraph|cherub)(?:im)?$/i, '$1im'], - [/(her|at|gr)o$/i, '$1oes'], - [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'], - [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'], - [/sis$/i, 'ses'], - [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'], - [/([^aeiouy]|qu)y$/i, '$1ies'], - [/([^ch][ieo][ln])ey$/i, '$1ies'], - [/(x|ch|ss|sh|zz)$/i, '$1es'], - [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'], - [/\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'], - [/(pe)(?:rson|ople)$/i, '$1ople'], - [/(child)(?:ren)?$/i, '$1ren'], - [/eaux$/i, '$0'], - [/m[ae]n$/i, 'men'], - ['thou', 'you'] - ].forEach(function (rule) { - return pluralize.addPluralRule(rule[0], rule[1]); - }); - [ - [/s$/i, ''], - [/(ss)$/i, '$1'], - [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, '$1fe'], - [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'], - [/ies$/i, 'y'], - [/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'], - [/\b(mon|smil)ies$/i, '$1ey'], - [/\b((?:tit)?m|l)ice$/i, '$1ouse'], - [/(seraph|cherub)im$/i, '$1'], - [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'], - [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'], - [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'], - [/(test)(?:is|es)$/i, '$1is'], - [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'], - [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'], - [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'], - [/(alumn|alg|vertebr)ae$/i, '$1a'], - [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'], - [/(matr|append)ices$/i, '$1ix'], - [/(pe)(rson|ople)$/i, '$1rson'], - [/(child)ren$/i, '$1'], - [/(eau)x?$/i, '$1'], - [/men$/i, 'man'] - ].forEach(function (rule) { - return pluralize.addSingularRule(rule[0], rule[1]); - }); - [ - 'adulthood', - 'advice', - 'agenda', - 'aid', - 'aircraft', - 'alcohol', - 'ammo', - 'analytics', - 'anime', - 'athletics', - 'audio', - 'bison', - 'blood', - 'bream', - 'buffalo', - 'butter', - 'carp', - 'cash', - 'chassis', - 'chess', - 'clothing', - 'cod', - 'commerce', - 'cooperation', - 'corps', - 'debris', - 'diabetes', - 'digestion', - 'elk', - 'energy', - 'equipment', - 'excretion', - 'expertise', - 'firmware', - 'flounder', - 'fun', - 'gallows', - 'garbage', - 'graffiti', - 'hardware', - 'headquarters', - 'health', - 'herpes', - 'highjinks', - 'homework', - 'housework', - 'information', - 'jeans', - 'justice', - 'kudos', - 'labour', - 'literature', - 'machinery', - 'mackerel', - 'mail', - 'media', - 'mews', - 'moose', - 'music', - 'mud', - 'manga', - 'news', - 'only', - 'personnel', - 'pike', - 'plankton', - 'pliers', - 'police', - 'pollution', - 'premises', - 'rain', - 'research', - 'rice', - 'salmon', - 'scissors', - 'series', - 'sewage', - 'shambles', - 'shrimp', - 'software', - 'species', - 'staff', - 'swine', - 'tennis', - 'traffic', - 'transportation', - 'trout', - 'tuna', - 'wealth', - 'welfare', - 'whiting', - 'wildebeest', - 'wildlife', - 'you', - /pok[eé]mon$/i, - /[^aeiou]ese$/i, - /deer$/i, - /fish$/i, - /measles$/i, - /o[iu]s$/i, - /pox$/i, - /sheep$/i - ].forEach(pluralize.addUncountableRule); - return pluralize; -}); -}(pluralize)); + (function (root, pluralize) { + if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') { + module.exports = pluralize(); + } else { + root.pluralize = pluralize(); + } + })(commonjsGlobal, function () { + var pluralRules = []; + var singularRules = []; + var uncountables = {}; + var irregularPlurals = {}; + var irregularSingles = {}; + function sanitizeRule (rule) { + if (typeof rule === 'string') { + return new RegExp('^' + rule + '$', 'i'); + } + return rule; + } + function restoreCase (word, token) { + if (word === token) return token; + if (word === word.toLowerCase()) return token.toLowerCase(); + if (word === word.toUpperCase()) return token.toUpperCase(); + if (word[0] === word[0].toUpperCase()) { + return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase(); + } + return token.toLowerCase(); + } + function interpolate (str, args) { + return str.replace(/\$(\d{1,2})/g, function (match, index) { + return args[index] || ''; + }); + } + function replace (word, rule) { + return word.replace(rule[0], function (match, index) { + var result = interpolate(rule[1], arguments); + if (match === '') { + return restoreCase(word[index - 1], result); + } + return restoreCase(match, result); + }); + } + function sanitizeWord (token, word, rules) { + if (!token.length || uncountables.hasOwnProperty(token)) { + return word; + } + var len = rules.length; + while (len--) { + var rule = rules[len]; + if (rule[0].test(word)) return replace(word, rule); + } + return word; + } + function replaceWord (replaceMap, keepMap, rules) { + return function (word) { + var token = word.toLowerCase(); + if (keepMap.hasOwnProperty(token)) { + return restoreCase(word, token); + } + if (replaceMap.hasOwnProperty(token)) { + return restoreCase(word, replaceMap[token]); + } + return sanitizeWord(token, word, rules); + }; + } + function checkWord (replaceMap, keepMap, rules, bool) { + return function (word) { + var token = word.toLowerCase(); + if (keepMap.hasOwnProperty(token)) return true; + if (replaceMap.hasOwnProperty(token)) return false; + return sanitizeWord(token, token, rules) === token; + }; + } + function pluralize (word, count, inclusive) { + var pluralized = count === 1 + ? pluralize.singular(word) : pluralize.plural(word); + return (inclusive ? count + ' ' : '') + pluralized; + } + pluralize.plural = replaceWord( + irregularSingles, irregularPlurals, pluralRules + ); + pluralize.isPlural = checkWord( + irregularSingles, irregularPlurals, pluralRules + ); + pluralize.singular = replaceWord( + irregularPlurals, irregularSingles, singularRules + ); + pluralize.isSingular = checkWord( + irregularPlurals, irregularSingles, singularRules + ); + pluralize.addPluralRule = function (rule, replacement) { + pluralRules.push([sanitizeRule(rule), replacement]); + }; + pluralize.addSingularRule = function (rule, replacement) { + singularRules.push([sanitizeRule(rule), replacement]); + }; + pluralize.addUncountableRule = function (word) { + if (typeof word === 'string') { + uncountables[word.toLowerCase()] = true; + return; + } + pluralize.addPluralRule(word, '$0'); + pluralize.addSingularRule(word, '$0'); + }; + pluralize.addIrregularRule = function (single, plural) { + plural = plural.toLowerCase(); + single = single.toLowerCase(); + irregularSingles[single] = plural; + irregularPlurals[plural] = single; + }; + [ + ['I', 'we'], + ['me', 'us'], + ['he', 'they'], + ['she', 'they'], + ['them', 'them'], + ['myself', 'ourselves'], + ['yourself', 'yourselves'], + ['itself', 'themselves'], + ['herself', 'themselves'], + ['himself', 'themselves'], + ['themself', 'themselves'], + ['is', 'are'], + ['was', 'were'], + ['has', 'have'], + ['this', 'these'], + ['that', 'those'], + ['echo', 'echoes'], + ['dingo', 'dingoes'], + ['volcano', 'volcanoes'], + ['tornado', 'tornadoes'], + ['torpedo', 'torpedoes'], + ['genus', 'genera'], + ['viscus', 'viscera'], + ['stigma', 'stigmata'], + ['stoma', 'stomata'], + ['dogma', 'dogmata'], + ['lemma', 'lemmata'], + ['schema', 'schemata'], + ['anathema', 'anathemata'], + ['ox', 'oxen'], + ['axe', 'axes'], + ['die', 'dice'], + ['yes', 'yeses'], + ['foot', 'feet'], + ['eave', 'eaves'], + ['goose', 'geese'], + ['tooth', 'teeth'], + ['quiz', 'quizzes'], + ['human', 'humans'], + ['proof', 'proofs'], + ['carve', 'carves'], + ['valve', 'valves'], + ['looey', 'looies'], + ['thief', 'thieves'], + ['groove', 'grooves'], + ['pickaxe', 'pickaxes'], + ['passerby', 'passersby'] + ].forEach(function (rule) { + return pluralize.addIrregularRule(rule[0], rule[1]); + }); + [ + [/s?$/i, 's'], + [/[^\u0000-\u007F]$/i, '$0'], + [/([^aeiou]ese)$/i, '$1'], + [/(ax|test)is$/i, '$1es'], + [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'], + [/(e[mn]u)s?$/i, '$1s'], + [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'], + [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'], + [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'], + [/(seraph|cherub)(?:im)?$/i, '$1im'], + [/(her|at|gr)o$/i, '$1oes'], + [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'], + [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'], + [/sis$/i, 'ses'], + [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'], + [/([^aeiouy]|qu)y$/i, '$1ies'], + [/([^ch][ieo][ln])ey$/i, '$1ies'], + [/(x|ch|ss|sh|zz)$/i, '$1es'], + [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'], + [/\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'], + [/(pe)(?:rson|ople)$/i, '$1ople'], + [/(child)(?:ren)?$/i, '$1ren'], + [/eaux$/i, '$0'], + [/m[ae]n$/i, 'men'], + ['thou', 'you'] + ].forEach(function (rule) { + return pluralize.addPluralRule(rule[0], rule[1]); + }); + [ + [/s$/i, ''], + [/(ss)$/i, '$1'], + [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, '$1fe'], + [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'], + [/ies$/i, 'y'], + [/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'], + [/\b(mon|smil)ies$/i, '$1ey'], + [/\b((?:tit)?m|l)ice$/i, '$1ouse'], + [/(seraph|cherub)im$/i, '$1'], + [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'], + [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'], + [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'], + [/(test)(?:is|es)$/i, '$1is'], + [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'], + [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'], + [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'], + [/(alumn|alg|vertebr)ae$/i, '$1a'], + [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'], + [/(matr|append)ices$/i, '$1ix'], + [/(pe)(rson|ople)$/i, '$1rson'], + [/(child)ren$/i, '$1'], + [/(eau)x?$/i, '$1'], + [/men$/i, 'man'] + ].forEach(function (rule) { + return pluralize.addSingularRule(rule[0], rule[1]); + }); + [ + 'adulthood', + 'advice', + 'agenda', + 'aid', + 'aircraft', + 'alcohol', + 'ammo', + 'analytics', + 'anime', + 'athletics', + 'audio', + 'bison', + 'blood', + 'bream', + 'buffalo', + 'butter', + 'carp', + 'cash', + 'chassis', + 'chess', + 'clothing', + 'cod', + 'commerce', + 'cooperation', + 'corps', + 'debris', + 'diabetes', + 'digestion', + 'elk', + 'energy', + 'equipment', + 'excretion', + 'expertise', + 'firmware', + 'flounder', + 'fun', + 'gallows', + 'garbage', + 'graffiti', + 'hardware', + 'headquarters', + 'health', + 'herpes', + 'highjinks', + 'homework', + 'housework', + 'information', + 'jeans', + 'justice', + 'kudos', + 'labour', + 'literature', + 'machinery', + 'mackerel', + 'mail', + 'media', + 'mews', + 'moose', + 'music', + 'mud', + 'manga', + 'news', + 'only', + 'personnel', + 'pike', + 'plankton', + 'pliers', + 'police', + 'pollution', + 'premises', + 'rain', + 'research', + 'rice', + 'salmon', + 'scissors', + 'series', + 'sewage', + 'shambles', + 'shrimp', + 'software', + 'species', + 'staff', + 'swine', + 'tennis', + 'traffic', + 'transportation', + 'trout', + 'tuna', + 'wealth', + 'welfare', + 'whiting', + 'wildebeest', + 'wildlife', + 'you', + /pok[eé]mon$/i, + /[^aeiou]ese$/i, + /deer$/i, + /fish$/i, + /measles$/i, + /o[iu]s$/i, + /pox$/i, + /sheep$/i + ].forEach(pluralize.addUncountableRule); + return pluralize; + }); +} (pluralize)); var plural = pluralize.exports; /** @@ -13582,9 +13488,12 @@ var remarkLintNoShortcutReferenceLink$1 = remarkLintNoShortcutReferenceLink; * The following options (default: `undefined`) are accepted: * * * `Object` with the following fields: - * * `allow` (`Array`, default: `[]`) - * — text that you want to allowed between `[` and `]` even though it’s - * undefined + * * `allow` (`Array`, + * default: `[]`) + * — text or regex that you want to be allowed between `[` and `]` + * even though it’s undefined; regex is provided via a `RegExp` object + * or via a `{ source: string }` object where `source` is the source + * text of a case-insensitive regex * * ## Recommendation * @@ -13630,11 +13539,20 @@ var remarkLintNoShortcutReferenceLink$1 = remarkLintNoShortcutReferenceLink; * [foo]: https://example.com * * @example - * {"name": "ok-allow.md", "setting": {"allow": ["...", "…"]}} + * {"name": "ok-allow.md", "config": {"allow": ["...", "…"]}} * * > Eliding a portion of a quoted passage […] is acceptable. * * @example + * {"name": "ok-allow.md", "config": {"allow": ["a", {"source": "^b\\."}]}} + * + * [foo][b.c] + * + * [bar][a] + * + * Matching is case-insensitive: [bar][B.C] + * + * @example * {"name": "not-ok.md", "label": "input"} * * [bar] @@ -13667,6 +13585,19 @@ var remarkLintNoShortcutReferenceLink$1 = remarkLintNoShortcutReferenceLink; * 15:13-15:25: Found reference to undefined definition * 17:17-17:23: Found reference to undefined definition * 17:23-17:26: Found reference to undefined definition + * + * @example + * {"name": "not-ok.md", "label": "input", "config": {"allow": ["a", {"source": "^b\\."}]}} + * + * [foo][a.c] + * + * [bar][b] + * + * @example + * {"name": "not-ok.md", "label": "output", "config": {"allow": ["a", {"source": "^b\\."}]}} + * + * 1:1-1:11: Found reference to undefined definition + * 3:1-3:9: Found reference to undefined definition */ const remarkLintNoUndefinedReferences = lintRule( { @@ -13677,10 +13608,21 @@ const remarkLintNoUndefinedReferences = lintRule( const contents = String(file); const loc = location(file); const lineEnding = /(\r?\n|\r)[\t ]*(>[\t ]*)*/g; - const allow = new Set( - (option.allow || []).map((d) => normalizeIdentifier(d)) - ); const map = Object.create(null); + const allow = option.allow || []; + const regexes = []; + const strings = new Set(); + let index = -1; + while (++index < allow.length) { + const value = allow[index]; + if (typeof value === 'string') { + strings.add(normalizeIdentifier(value)); + } else if (value instanceof RegExp) { + regexes.push(value); + } else { + regexes.push(new RegExp(value.source, 'i')); + } + } visit$1(tree, (node) => { if ( (node.type === 'definition' || node.type === 'footnoteDefinition') && @@ -13696,7 +13638,7 @@ const remarkLintNoUndefinedReferences = lintRule( node.type === 'footnoteReference') && !generated(node) && !(normalizeIdentifier(node.identifier) in map) && - !allow.has(normalizeIdentifier(node.identifier)) + !isAllowed(node.identifier) ) { file.message('Found reference to undefined definition', node); } @@ -13799,12 +13741,19 @@ const remarkLintNoUndefinedReferences = lintRule( if ( !generated({position: pos}) && !(normalizeIdentifier(id) in map) && - !allow.has(normalizeIdentifier(id)) + !isAllowed(id) ) { file.message('Found reference to undefined definition', pos); } } } + function isAllowed(id) { + const normalized = normalizeIdentifier(id); + return ( + strings.has(normalized) || + regexes.some((regex) => regex.test(normalized)) + ) + } } ); var remarkLintNoUndefinedReferences$1 = remarkLintNoUndefinedReferences; @@ -19297,13 +19246,13 @@ var jsYaml = { const SEMVER_SPEC_VERSION = '2.0.0'; const MAX_LENGTH$2 = 256; const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || - 9007199254740991; + 9007199254740991; const MAX_SAFE_COMPONENT_LENGTH = 16; var constants = { SEMVER_SPEC_VERSION, MAX_LENGTH: MAX_LENGTH$2, MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1, - MAX_SAFE_COMPONENT_LENGTH + MAX_SAFE_COMPONENT_LENGTH, }; var re$2 = {exports: {}}; @@ -19318,106 +19267,106 @@ const debug$1 = ( var debug_1 = debug$1; (function (module, exports) { -const { MAX_SAFE_COMPONENT_LENGTH } = constants; -const debug = debug_1; -exports = module.exports = {}; -const re = exports.re = []; -const src = exports.src = []; -const t = exports.t = {}; -let R = 0; -const createToken = (name, value, isGlobal) => { - const index = R++; - debug(index, value); - t[name] = index; - src[index] = value; - re[index] = new RegExp(value, isGlobal ? 'g' : undefined); -}; -createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*'); -createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+'); -createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*'); -createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})`); -createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})`); -createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] -}|${src[t.NONNUMERICIDENTIFIER]})`); -createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] -}|${src[t.NONNUMERICIDENTIFIER]})`); -createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] -}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`); -createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] -}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`); -createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+'); -createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] -}(?:\\.${src[t.BUILDIDENTIFIER]})*))`); -createToken('FULLPLAIN', `v?${src[t.MAINVERSION] -}${src[t.PRERELEASE]}?${ - src[t.BUILD]}?`); -createToken('FULL', `^${src[t.FULLPLAIN]}$`); -createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] -}${src[t.PRERELEASELOOSE]}?${ - src[t.BUILD]}?`); -createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`); -createToken('GTLT', '((?:<|>)?=?)'); -createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); -createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`); -createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:${src[t.PRERELEASE]})?${ - src[t.BUILD]}?` + - `)?)?`); -createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:${src[t.PRERELEASELOOSE]})?${ - src[t.BUILD]}?` + - `)?)?`); -createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`); -createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`); -createToken('COERCE', `${'(^|[^\\d])' + - '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:$|[^\\d])`); -createToken('COERCERTL', src[t.COERCE], true); -createToken('LONETILDE', '(?:~>?)'); -createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true); -exports.tildeTrimReplace = '$1~'; -createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`); -createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`); -createToken('LONECARET', '(?:\\^)'); -createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true); -exports.caretTrimReplace = '$1^'; -createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`); -createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`); -createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`); -createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`); -createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] -}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true); -exports.comparatorTrimReplace = '$1$2$3'; -createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAIN]})` + - `\\s*$`); -createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAINLOOSE]})` + - `\\s*$`); -createToken('STAR', '(<|>)?=?\\s*\\*'); -createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$'); -createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$'); -}(re$2, re$2.exports)); + const { MAX_SAFE_COMPONENT_LENGTH } = constants; + const debug = debug_1; + exports = module.exports = {}; + const re = exports.re = []; + const src = exports.src = []; + const t = exports.t = {}; + let R = 0; + const createToken = (name, value, isGlobal) => { + const index = R++; + debug(name, index, value); + t[name] = index; + src[index] = value; + re[index] = new RegExp(value, isGlobal ? 'g' : undefined); + }; + createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*'); + createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+'); + createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*'); + createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`); + createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`); + createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] + }|${src[t.NONNUMERICIDENTIFIER]})`); + createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] + }|${src[t.NONNUMERICIDENTIFIER]})`); + createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] + }(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`); + createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] + }(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`); + createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+'); + createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] + }(?:\\.${src[t.BUILDIDENTIFIER]})*))`); + createToken('FULLPLAIN', `v?${src[t.MAINVERSION] + }${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`); + createToken('FULL', `^${src[t.FULLPLAIN]}$`); + createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] + }${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`); + createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`); + createToken('GTLT', '((?:<|>)?=?)'); + createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); + createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`); + createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`); + createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`); + createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`); + createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`); + createToken('COERCE', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:$|[^\\d])`); + createToken('COERCERTL', src[t.COERCE], true); + createToken('LONETILDE', '(?:~>?)'); + createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true); + exports.tildeTrimReplace = '$1~'; + createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`); + createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`); + createToken('LONECARET', '(?:\\^)'); + createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true); + exports.caretTrimReplace = '$1^'; + createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`); + createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`); + createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`); + createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`); + createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] + }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true); + exports.comparatorTrimReplace = '$1$2$3'; + createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`); + createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`); + createToken('STAR', '(<|>)?=?\\s*\\*'); + createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$'); + createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$'); +} (re$2, re$2.exports)); const opts = ['includePrerelease', 'loose', 'rtl']; const parseOptions$2 = options => !options ? {} : typeof options !== 'object' ? { loose: true } - : opts.filter(k => options[k]).reduce((options, k) => { - options[k] = true; - return options + : opts.filter(k => options[k]).reduce((o, k) => { + o[k] = true; + return o }, {}); var parseOptions_1 = parseOptions$2; @@ -19438,7 +19387,7 @@ const compareIdentifiers$1 = (a, b) => { const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a); var identifiers = { compareIdentifiers: compareIdentifiers$1, - rcompareIdentifiers + rcompareIdentifiers, }; const debug = debug_1; @@ -19652,7 +19601,7 @@ class SemVer$2 { } } if (identifier) { - if (this.prerelease[0] === identifier) { + if (compareIdentifiers(this.prerelease[0], identifier) === 0) { if (isNaN(this.prerelease[1])) { this.prerelease = [identifier, 0]; } @@ -19671,7 +19620,7 @@ class SemVer$2 { } var semver = SemVer$2; -const {MAX_LENGTH} = constants; +const { MAX_LENGTH } = constants; const { re, t } = re$2.exports; const SemVer$1 = semver; const parseOptions = parseOptions_1; @@ -20915,307 +20864,307 @@ function stripAnsi(string) { var eastasianwidth = {exports: {}}; (function (module) { -var eaw = {}; -{ - module.exports = eaw; -} -eaw.eastAsianWidth = function(character) { - var x = character.charCodeAt(0); - var y = (character.length == 2) ? character.charCodeAt(1) : 0; - var codePoint = x; - if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) { - x &= 0x3FF; - y &= 0x3FF; - codePoint = (x << 10) | y; - codePoint += 0x10000; - } - if ((0x3000 == codePoint) || - (0xFF01 <= codePoint && codePoint <= 0xFF60) || - (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) { - return 'F'; - } - if ((0x20A9 == codePoint) || - (0xFF61 <= codePoint && codePoint <= 0xFFBE) || - (0xFFC2 <= codePoint && codePoint <= 0xFFC7) || - (0xFFCA <= codePoint && codePoint <= 0xFFCF) || - (0xFFD2 <= codePoint && codePoint <= 0xFFD7) || - (0xFFDA <= codePoint && codePoint <= 0xFFDC) || - (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) { - return 'H'; - } - if ((0x1100 <= codePoint && codePoint <= 0x115F) || - (0x11A3 <= codePoint && codePoint <= 0x11A7) || - (0x11FA <= codePoint && codePoint <= 0x11FF) || - (0x2329 <= codePoint && codePoint <= 0x232A) || - (0x2E80 <= codePoint && codePoint <= 0x2E99) || - (0x2E9B <= codePoint && codePoint <= 0x2EF3) || - (0x2F00 <= codePoint && codePoint <= 0x2FD5) || - (0x2FF0 <= codePoint && codePoint <= 0x2FFB) || - (0x3001 <= codePoint && codePoint <= 0x303E) || - (0x3041 <= codePoint && codePoint <= 0x3096) || - (0x3099 <= codePoint && codePoint <= 0x30FF) || - (0x3105 <= codePoint && codePoint <= 0x312D) || - (0x3131 <= codePoint && codePoint <= 0x318E) || - (0x3190 <= codePoint && codePoint <= 0x31BA) || - (0x31C0 <= codePoint && codePoint <= 0x31E3) || - (0x31F0 <= codePoint && codePoint <= 0x321E) || - (0x3220 <= codePoint && codePoint <= 0x3247) || - (0x3250 <= codePoint && codePoint <= 0x32FE) || - (0x3300 <= codePoint && codePoint <= 0x4DBF) || - (0x4E00 <= codePoint && codePoint <= 0xA48C) || - (0xA490 <= codePoint && codePoint <= 0xA4C6) || - (0xA960 <= codePoint && codePoint <= 0xA97C) || - (0xAC00 <= codePoint && codePoint <= 0xD7A3) || - (0xD7B0 <= codePoint && codePoint <= 0xD7C6) || - (0xD7CB <= codePoint && codePoint <= 0xD7FB) || - (0xF900 <= codePoint && codePoint <= 0xFAFF) || - (0xFE10 <= codePoint && codePoint <= 0xFE19) || - (0xFE30 <= codePoint && codePoint <= 0xFE52) || - (0xFE54 <= codePoint && codePoint <= 0xFE66) || - (0xFE68 <= codePoint && codePoint <= 0xFE6B) || - (0x1B000 <= codePoint && codePoint <= 0x1B001) || - (0x1F200 <= codePoint && codePoint <= 0x1F202) || - (0x1F210 <= codePoint && codePoint <= 0x1F23A) || - (0x1F240 <= codePoint && codePoint <= 0x1F248) || - (0x1F250 <= codePoint && codePoint <= 0x1F251) || - (0x20000 <= codePoint && codePoint <= 0x2F73F) || - (0x2B740 <= codePoint && codePoint <= 0x2FFFD) || - (0x30000 <= codePoint && codePoint <= 0x3FFFD)) { - return 'W'; - } - if ((0x0020 <= codePoint && codePoint <= 0x007E) || - (0x00A2 <= codePoint && codePoint <= 0x00A3) || - (0x00A5 <= codePoint && codePoint <= 0x00A6) || - (0x00AC == codePoint) || - (0x00AF == codePoint) || - (0x27E6 <= codePoint && codePoint <= 0x27ED) || - (0x2985 <= codePoint && codePoint <= 0x2986)) { - return 'Na'; - } - if ((0x00A1 == codePoint) || - (0x00A4 == codePoint) || - (0x00A7 <= codePoint && codePoint <= 0x00A8) || - (0x00AA == codePoint) || - (0x00AD <= codePoint && codePoint <= 0x00AE) || - (0x00B0 <= codePoint && codePoint <= 0x00B4) || - (0x00B6 <= codePoint && codePoint <= 0x00BA) || - (0x00BC <= codePoint && codePoint <= 0x00BF) || - (0x00C6 == codePoint) || - (0x00D0 == codePoint) || - (0x00D7 <= codePoint && codePoint <= 0x00D8) || - (0x00DE <= codePoint && codePoint <= 0x00E1) || - (0x00E6 == codePoint) || - (0x00E8 <= codePoint && codePoint <= 0x00EA) || - (0x00EC <= codePoint && codePoint <= 0x00ED) || - (0x00F0 == codePoint) || - (0x00F2 <= codePoint && codePoint <= 0x00F3) || - (0x00F7 <= codePoint && codePoint <= 0x00FA) || - (0x00FC == codePoint) || - (0x00FE == codePoint) || - (0x0101 == codePoint) || - (0x0111 == codePoint) || - (0x0113 == codePoint) || - (0x011B == codePoint) || - (0x0126 <= codePoint && codePoint <= 0x0127) || - (0x012B == codePoint) || - (0x0131 <= codePoint && codePoint <= 0x0133) || - (0x0138 == codePoint) || - (0x013F <= codePoint && codePoint <= 0x0142) || - (0x0144 == codePoint) || - (0x0148 <= codePoint && codePoint <= 0x014B) || - (0x014D == codePoint) || - (0x0152 <= codePoint && codePoint <= 0x0153) || - (0x0166 <= codePoint && codePoint <= 0x0167) || - (0x016B == codePoint) || - (0x01CE == codePoint) || - (0x01D0 == codePoint) || - (0x01D2 == codePoint) || - (0x01D4 == codePoint) || - (0x01D6 == codePoint) || - (0x01D8 == codePoint) || - (0x01DA == codePoint) || - (0x01DC == codePoint) || - (0x0251 == codePoint) || - (0x0261 == codePoint) || - (0x02C4 == codePoint) || - (0x02C7 == codePoint) || - (0x02C9 <= codePoint && codePoint <= 0x02CB) || - (0x02CD == codePoint) || - (0x02D0 == codePoint) || - (0x02D8 <= codePoint && codePoint <= 0x02DB) || - (0x02DD == codePoint) || - (0x02DF == codePoint) || - (0x0300 <= codePoint && codePoint <= 0x036F) || - (0x0391 <= codePoint && codePoint <= 0x03A1) || - (0x03A3 <= codePoint && codePoint <= 0x03A9) || - (0x03B1 <= codePoint && codePoint <= 0x03C1) || - (0x03C3 <= codePoint && codePoint <= 0x03C9) || - (0x0401 == codePoint) || - (0x0410 <= codePoint && codePoint <= 0x044F) || - (0x0451 == codePoint) || - (0x2010 == codePoint) || - (0x2013 <= codePoint && codePoint <= 0x2016) || - (0x2018 <= codePoint && codePoint <= 0x2019) || - (0x201C <= codePoint && codePoint <= 0x201D) || - (0x2020 <= codePoint && codePoint <= 0x2022) || - (0x2024 <= codePoint && codePoint <= 0x2027) || - (0x2030 == codePoint) || - (0x2032 <= codePoint && codePoint <= 0x2033) || - (0x2035 == codePoint) || - (0x203B == codePoint) || - (0x203E == codePoint) || - (0x2074 == codePoint) || - (0x207F == codePoint) || - (0x2081 <= codePoint && codePoint <= 0x2084) || - (0x20AC == codePoint) || - (0x2103 == codePoint) || - (0x2105 == codePoint) || - (0x2109 == codePoint) || - (0x2113 == codePoint) || - (0x2116 == codePoint) || - (0x2121 <= codePoint && codePoint <= 0x2122) || - (0x2126 == codePoint) || - (0x212B == codePoint) || - (0x2153 <= codePoint && codePoint <= 0x2154) || - (0x215B <= codePoint && codePoint <= 0x215E) || - (0x2160 <= codePoint && codePoint <= 0x216B) || - (0x2170 <= codePoint && codePoint <= 0x2179) || - (0x2189 == codePoint) || - (0x2190 <= codePoint && codePoint <= 0x2199) || - (0x21B8 <= codePoint && codePoint <= 0x21B9) || - (0x21D2 == codePoint) || - (0x21D4 == codePoint) || - (0x21E7 == codePoint) || - (0x2200 == codePoint) || - (0x2202 <= codePoint && codePoint <= 0x2203) || - (0x2207 <= codePoint && codePoint <= 0x2208) || - (0x220B == codePoint) || - (0x220F == codePoint) || - (0x2211 == codePoint) || - (0x2215 == codePoint) || - (0x221A == codePoint) || - (0x221D <= codePoint && codePoint <= 0x2220) || - (0x2223 == codePoint) || - (0x2225 == codePoint) || - (0x2227 <= codePoint && codePoint <= 0x222C) || - (0x222E == codePoint) || - (0x2234 <= codePoint && codePoint <= 0x2237) || - (0x223C <= codePoint && codePoint <= 0x223D) || - (0x2248 == codePoint) || - (0x224C == codePoint) || - (0x2252 == codePoint) || - (0x2260 <= codePoint && codePoint <= 0x2261) || - (0x2264 <= codePoint && codePoint <= 0x2267) || - (0x226A <= codePoint && codePoint <= 0x226B) || - (0x226E <= codePoint && codePoint <= 0x226F) || - (0x2282 <= codePoint && codePoint <= 0x2283) || - (0x2286 <= codePoint && codePoint <= 0x2287) || - (0x2295 == codePoint) || - (0x2299 == codePoint) || - (0x22A5 == codePoint) || - (0x22BF == codePoint) || - (0x2312 == codePoint) || - (0x2460 <= codePoint && codePoint <= 0x24E9) || - (0x24EB <= codePoint && codePoint <= 0x254B) || - (0x2550 <= codePoint && codePoint <= 0x2573) || - (0x2580 <= codePoint && codePoint <= 0x258F) || - (0x2592 <= codePoint && codePoint <= 0x2595) || - (0x25A0 <= codePoint && codePoint <= 0x25A1) || - (0x25A3 <= codePoint && codePoint <= 0x25A9) || - (0x25B2 <= codePoint && codePoint <= 0x25B3) || - (0x25B6 <= codePoint && codePoint <= 0x25B7) || - (0x25BC <= codePoint && codePoint <= 0x25BD) || - (0x25C0 <= codePoint && codePoint <= 0x25C1) || - (0x25C6 <= codePoint && codePoint <= 0x25C8) || - (0x25CB == codePoint) || - (0x25CE <= codePoint && codePoint <= 0x25D1) || - (0x25E2 <= codePoint && codePoint <= 0x25E5) || - (0x25EF == codePoint) || - (0x2605 <= codePoint && codePoint <= 0x2606) || - (0x2609 == codePoint) || - (0x260E <= codePoint && codePoint <= 0x260F) || - (0x2614 <= codePoint && codePoint <= 0x2615) || - (0x261C == codePoint) || - (0x261E == codePoint) || - (0x2640 == codePoint) || - (0x2642 == codePoint) || - (0x2660 <= codePoint && codePoint <= 0x2661) || - (0x2663 <= codePoint && codePoint <= 0x2665) || - (0x2667 <= codePoint && codePoint <= 0x266A) || - (0x266C <= codePoint && codePoint <= 0x266D) || - (0x266F == codePoint) || - (0x269E <= codePoint && codePoint <= 0x269F) || - (0x26BE <= codePoint && codePoint <= 0x26BF) || - (0x26C4 <= codePoint && codePoint <= 0x26CD) || - (0x26CF <= codePoint && codePoint <= 0x26E1) || - (0x26E3 == codePoint) || - (0x26E8 <= codePoint && codePoint <= 0x26FF) || - (0x273D == codePoint) || - (0x2757 == codePoint) || - (0x2776 <= codePoint && codePoint <= 0x277F) || - (0x2B55 <= codePoint && codePoint <= 0x2B59) || - (0x3248 <= codePoint && codePoint <= 0x324F) || - (0xE000 <= codePoint && codePoint <= 0xF8FF) || - (0xFE00 <= codePoint && codePoint <= 0xFE0F) || - (0xFFFD == codePoint) || - (0x1F100 <= codePoint && codePoint <= 0x1F10A) || - (0x1F110 <= codePoint && codePoint <= 0x1F12D) || - (0x1F130 <= codePoint && codePoint <= 0x1F169) || - (0x1F170 <= codePoint && codePoint <= 0x1F19A) || - (0xE0100 <= codePoint && codePoint <= 0xE01EF) || - (0xF0000 <= codePoint && codePoint <= 0xFFFFD) || - (0x100000 <= codePoint && codePoint <= 0x10FFFD)) { - return 'A'; - } - return 'N'; -}; -eaw.characterLength = function(character) { - var code = this.eastAsianWidth(character); - if (code == 'F' || code == 'W' || code == 'A') { - return 2; - } else { - return 1; - } -}; -function stringToArray(string) { - return string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || []; -} -eaw.length = function(string) { - var characters = stringToArray(string); - var len = 0; - for (var i = 0; i < characters.length; i++) { - len = len + this.characterLength(characters[i]); - } - return len; -}; -eaw.slice = function(text, start, end) { - textLen = eaw.length(text); - start = start ? start : 0; - end = end ? end : 1; - if (start < 0) { - start = textLen + start; - } - if (end < 0) { - end = textLen + end; - } - var result = ''; - var eawLen = 0; - var chars = stringToArray(text); - for (var i = 0; i < chars.length; i++) { - var char = chars[i]; - var charLen = eaw.length(char); - if (eawLen >= start - (charLen == 2 ? 1 : 0)) { - if (eawLen + charLen <= end) { - result += char; - } else { - break; - } - } - eawLen += charLen; - } - return result; -}; -}(eastasianwidth)); + var eaw = {}; + { + module.exports = eaw; + } + eaw.eastAsianWidth = function(character) { + var x = character.charCodeAt(0); + var y = (character.length == 2) ? character.charCodeAt(1) : 0; + var codePoint = x; + if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) { + x &= 0x3FF; + y &= 0x3FF; + codePoint = (x << 10) | y; + codePoint += 0x10000; + } + if ((0x3000 == codePoint) || + (0xFF01 <= codePoint && codePoint <= 0xFF60) || + (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) { + return 'F'; + } + if ((0x20A9 == codePoint) || + (0xFF61 <= codePoint && codePoint <= 0xFFBE) || + (0xFFC2 <= codePoint && codePoint <= 0xFFC7) || + (0xFFCA <= codePoint && codePoint <= 0xFFCF) || + (0xFFD2 <= codePoint && codePoint <= 0xFFD7) || + (0xFFDA <= codePoint && codePoint <= 0xFFDC) || + (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) { + return 'H'; + } + if ((0x1100 <= codePoint && codePoint <= 0x115F) || + (0x11A3 <= codePoint && codePoint <= 0x11A7) || + (0x11FA <= codePoint && codePoint <= 0x11FF) || + (0x2329 <= codePoint && codePoint <= 0x232A) || + (0x2E80 <= codePoint && codePoint <= 0x2E99) || + (0x2E9B <= codePoint && codePoint <= 0x2EF3) || + (0x2F00 <= codePoint && codePoint <= 0x2FD5) || + (0x2FF0 <= codePoint && codePoint <= 0x2FFB) || + (0x3001 <= codePoint && codePoint <= 0x303E) || + (0x3041 <= codePoint && codePoint <= 0x3096) || + (0x3099 <= codePoint && codePoint <= 0x30FF) || + (0x3105 <= codePoint && codePoint <= 0x312D) || + (0x3131 <= codePoint && codePoint <= 0x318E) || + (0x3190 <= codePoint && codePoint <= 0x31BA) || + (0x31C0 <= codePoint && codePoint <= 0x31E3) || + (0x31F0 <= codePoint && codePoint <= 0x321E) || + (0x3220 <= codePoint && codePoint <= 0x3247) || + (0x3250 <= codePoint && codePoint <= 0x32FE) || + (0x3300 <= codePoint && codePoint <= 0x4DBF) || + (0x4E00 <= codePoint && codePoint <= 0xA48C) || + (0xA490 <= codePoint && codePoint <= 0xA4C6) || + (0xA960 <= codePoint && codePoint <= 0xA97C) || + (0xAC00 <= codePoint && codePoint <= 0xD7A3) || + (0xD7B0 <= codePoint && codePoint <= 0xD7C6) || + (0xD7CB <= codePoint && codePoint <= 0xD7FB) || + (0xF900 <= codePoint && codePoint <= 0xFAFF) || + (0xFE10 <= codePoint && codePoint <= 0xFE19) || + (0xFE30 <= codePoint && codePoint <= 0xFE52) || + (0xFE54 <= codePoint && codePoint <= 0xFE66) || + (0xFE68 <= codePoint && codePoint <= 0xFE6B) || + (0x1B000 <= codePoint && codePoint <= 0x1B001) || + (0x1F200 <= codePoint && codePoint <= 0x1F202) || + (0x1F210 <= codePoint && codePoint <= 0x1F23A) || + (0x1F240 <= codePoint && codePoint <= 0x1F248) || + (0x1F250 <= codePoint && codePoint <= 0x1F251) || + (0x20000 <= codePoint && codePoint <= 0x2F73F) || + (0x2B740 <= codePoint && codePoint <= 0x2FFFD) || + (0x30000 <= codePoint && codePoint <= 0x3FFFD)) { + return 'W'; + } + if ((0x0020 <= codePoint && codePoint <= 0x007E) || + (0x00A2 <= codePoint && codePoint <= 0x00A3) || + (0x00A5 <= codePoint && codePoint <= 0x00A6) || + (0x00AC == codePoint) || + (0x00AF == codePoint) || + (0x27E6 <= codePoint && codePoint <= 0x27ED) || + (0x2985 <= codePoint && codePoint <= 0x2986)) { + return 'Na'; + } + if ((0x00A1 == codePoint) || + (0x00A4 == codePoint) || + (0x00A7 <= codePoint && codePoint <= 0x00A8) || + (0x00AA == codePoint) || + (0x00AD <= codePoint && codePoint <= 0x00AE) || + (0x00B0 <= codePoint && codePoint <= 0x00B4) || + (0x00B6 <= codePoint && codePoint <= 0x00BA) || + (0x00BC <= codePoint && codePoint <= 0x00BF) || + (0x00C6 == codePoint) || + (0x00D0 == codePoint) || + (0x00D7 <= codePoint && codePoint <= 0x00D8) || + (0x00DE <= codePoint && codePoint <= 0x00E1) || + (0x00E6 == codePoint) || + (0x00E8 <= codePoint && codePoint <= 0x00EA) || + (0x00EC <= codePoint && codePoint <= 0x00ED) || + (0x00F0 == codePoint) || + (0x00F2 <= codePoint && codePoint <= 0x00F3) || + (0x00F7 <= codePoint && codePoint <= 0x00FA) || + (0x00FC == codePoint) || + (0x00FE == codePoint) || + (0x0101 == codePoint) || + (0x0111 == codePoint) || + (0x0113 == codePoint) || + (0x011B == codePoint) || + (0x0126 <= codePoint && codePoint <= 0x0127) || + (0x012B == codePoint) || + (0x0131 <= codePoint && codePoint <= 0x0133) || + (0x0138 == codePoint) || + (0x013F <= codePoint && codePoint <= 0x0142) || + (0x0144 == codePoint) || + (0x0148 <= codePoint && codePoint <= 0x014B) || + (0x014D == codePoint) || + (0x0152 <= codePoint && codePoint <= 0x0153) || + (0x0166 <= codePoint && codePoint <= 0x0167) || + (0x016B == codePoint) || + (0x01CE == codePoint) || + (0x01D0 == codePoint) || + (0x01D2 == codePoint) || + (0x01D4 == codePoint) || + (0x01D6 == codePoint) || + (0x01D8 == codePoint) || + (0x01DA == codePoint) || + (0x01DC == codePoint) || + (0x0251 == codePoint) || + (0x0261 == codePoint) || + (0x02C4 == codePoint) || + (0x02C7 == codePoint) || + (0x02C9 <= codePoint && codePoint <= 0x02CB) || + (0x02CD == codePoint) || + (0x02D0 == codePoint) || + (0x02D8 <= codePoint && codePoint <= 0x02DB) || + (0x02DD == codePoint) || + (0x02DF == codePoint) || + (0x0300 <= codePoint && codePoint <= 0x036F) || + (0x0391 <= codePoint && codePoint <= 0x03A1) || + (0x03A3 <= codePoint && codePoint <= 0x03A9) || + (0x03B1 <= codePoint && codePoint <= 0x03C1) || + (0x03C3 <= codePoint && codePoint <= 0x03C9) || + (0x0401 == codePoint) || + (0x0410 <= codePoint && codePoint <= 0x044F) || + (0x0451 == codePoint) || + (0x2010 == codePoint) || + (0x2013 <= codePoint && codePoint <= 0x2016) || + (0x2018 <= codePoint && codePoint <= 0x2019) || + (0x201C <= codePoint && codePoint <= 0x201D) || + (0x2020 <= codePoint && codePoint <= 0x2022) || + (0x2024 <= codePoint && codePoint <= 0x2027) || + (0x2030 == codePoint) || + (0x2032 <= codePoint && codePoint <= 0x2033) || + (0x2035 == codePoint) || + (0x203B == codePoint) || + (0x203E == codePoint) || + (0x2074 == codePoint) || + (0x207F == codePoint) || + (0x2081 <= codePoint && codePoint <= 0x2084) || + (0x20AC == codePoint) || + (0x2103 == codePoint) || + (0x2105 == codePoint) || + (0x2109 == codePoint) || + (0x2113 == codePoint) || + (0x2116 == codePoint) || + (0x2121 <= codePoint && codePoint <= 0x2122) || + (0x2126 == codePoint) || + (0x212B == codePoint) || + (0x2153 <= codePoint && codePoint <= 0x2154) || + (0x215B <= codePoint && codePoint <= 0x215E) || + (0x2160 <= codePoint && codePoint <= 0x216B) || + (0x2170 <= codePoint && codePoint <= 0x2179) || + (0x2189 == codePoint) || + (0x2190 <= codePoint && codePoint <= 0x2199) || + (0x21B8 <= codePoint && codePoint <= 0x21B9) || + (0x21D2 == codePoint) || + (0x21D4 == codePoint) || + (0x21E7 == codePoint) || + (0x2200 == codePoint) || + (0x2202 <= codePoint && codePoint <= 0x2203) || + (0x2207 <= codePoint && codePoint <= 0x2208) || + (0x220B == codePoint) || + (0x220F == codePoint) || + (0x2211 == codePoint) || + (0x2215 == codePoint) || + (0x221A == codePoint) || + (0x221D <= codePoint && codePoint <= 0x2220) || + (0x2223 == codePoint) || + (0x2225 == codePoint) || + (0x2227 <= codePoint && codePoint <= 0x222C) || + (0x222E == codePoint) || + (0x2234 <= codePoint && codePoint <= 0x2237) || + (0x223C <= codePoint && codePoint <= 0x223D) || + (0x2248 == codePoint) || + (0x224C == codePoint) || + (0x2252 == codePoint) || + (0x2260 <= codePoint && codePoint <= 0x2261) || + (0x2264 <= codePoint && codePoint <= 0x2267) || + (0x226A <= codePoint && codePoint <= 0x226B) || + (0x226E <= codePoint && codePoint <= 0x226F) || + (0x2282 <= codePoint && codePoint <= 0x2283) || + (0x2286 <= codePoint && codePoint <= 0x2287) || + (0x2295 == codePoint) || + (0x2299 == codePoint) || + (0x22A5 == codePoint) || + (0x22BF == codePoint) || + (0x2312 == codePoint) || + (0x2460 <= codePoint && codePoint <= 0x24E9) || + (0x24EB <= codePoint && codePoint <= 0x254B) || + (0x2550 <= codePoint && codePoint <= 0x2573) || + (0x2580 <= codePoint && codePoint <= 0x258F) || + (0x2592 <= codePoint && codePoint <= 0x2595) || + (0x25A0 <= codePoint && codePoint <= 0x25A1) || + (0x25A3 <= codePoint && codePoint <= 0x25A9) || + (0x25B2 <= codePoint && codePoint <= 0x25B3) || + (0x25B6 <= codePoint && codePoint <= 0x25B7) || + (0x25BC <= codePoint && codePoint <= 0x25BD) || + (0x25C0 <= codePoint && codePoint <= 0x25C1) || + (0x25C6 <= codePoint && codePoint <= 0x25C8) || + (0x25CB == codePoint) || + (0x25CE <= codePoint && codePoint <= 0x25D1) || + (0x25E2 <= codePoint && codePoint <= 0x25E5) || + (0x25EF == codePoint) || + (0x2605 <= codePoint && codePoint <= 0x2606) || + (0x2609 == codePoint) || + (0x260E <= codePoint && codePoint <= 0x260F) || + (0x2614 <= codePoint && codePoint <= 0x2615) || + (0x261C == codePoint) || + (0x261E == codePoint) || + (0x2640 == codePoint) || + (0x2642 == codePoint) || + (0x2660 <= codePoint && codePoint <= 0x2661) || + (0x2663 <= codePoint && codePoint <= 0x2665) || + (0x2667 <= codePoint && codePoint <= 0x266A) || + (0x266C <= codePoint && codePoint <= 0x266D) || + (0x266F == codePoint) || + (0x269E <= codePoint && codePoint <= 0x269F) || + (0x26BE <= codePoint && codePoint <= 0x26BF) || + (0x26C4 <= codePoint && codePoint <= 0x26CD) || + (0x26CF <= codePoint && codePoint <= 0x26E1) || + (0x26E3 == codePoint) || + (0x26E8 <= codePoint && codePoint <= 0x26FF) || + (0x273D == codePoint) || + (0x2757 == codePoint) || + (0x2776 <= codePoint && codePoint <= 0x277F) || + (0x2B55 <= codePoint && codePoint <= 0x2B59) || + (0x3248 <= codePoint && codePoint <= 0x324F) || + (0xE000 <= codePoint && codePoint <= 0xF8FF) || + (0xFE00 <= codePoint && codePoint <= 0xFE0F) || + (0xFFFD == codePoint) || + (0x1F100 <= codePoint && codePoint <= 0x1F10A) || + (0x1F110 <= codePoint && codePoint <= 0x1F12D) || + (0x1F130 <= codePoint && codePoint <= 0x1F169) || + (0x1F170 <= codePoint && codePoint <= 0x1F19A) || + (0xE0100 <= codePoint && codePoint <= 0xE01EF) || + (0xF0000 <= codePoint && codePoint <= 0xFFFFD) || + (0x100000 <= codePoint && codePoint <= 0x10FFFD)) { + return 'A'; + } + return 'N'; + }; + eaw.characterLength = function(character) { + var code = this.eastAsianWidth(character); + if (code == 'F' || code == 'W' || code == 'A') { + return 2; + } else { + return 1; + } + }; + function stringToArray(string) { + return string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || []; + } + eaw.length = function(string) { + var characters = stringToArray(string); + var len = 0; + for (var i = 0; i < characters.length; i++) { + len = len + this.characterLength(characters[i]); + } + return len; + }; + eaw.slice = function(text, start, end) { + textLen = eaw.length(text); + start = start ? start : 0; + end = end ? end : 1; + if (start < 0) { + start = textLen + start; + } + if (end < 0) { + end = textLen + end; + } + var result = ''; + var eawLen = 0; + var chars = stringToArray(text); + for (var i = 0; i < chars.length; i++) { + var char = chars[i]; + var charLen = eaw.length(char); + if (eawLen >= start - (charLen == 2 ? 1 : 0)) { + if (eawLen + charLen <= end) { + result += char; + } else { + break; + } + } + eawLen += charLen; + } + return result; + }; +} (eastasianwidth)); var eastAsianWidth = eastasianwidth.exports; var emojiRegex = function () { @@ -21446,11 +21395,11 @@ const supportsColor = { const color = supportsColor.stderr.hasBasic; +const platform = process$1.platform; + const own = {}.hasOwnProperty; const chars = - process.platform === 'win32' - ? {error: '×', warning: '‼'} - : {error: '✖', warning: '⚠'}; + platform === 'win32' ? {error: '×', warning: '‼'} : {error: '✖', warning: '⚠'}; const labels = { true: 'error', false: 'warning', diff --git a/tools/lint-md/package-lock.json b/tools/lint-md/package-lock.json index 4246a50ba64..0bddb8a278c 100644 --- a/tools/lint-md/package-lock.json +++ b/tools/lint-md/package-lock.json @@ -13,19 +13,19 @@ "remark-stringify": "^10.0.2", "to-vfile": "^7.2.3", "unified": "^10.1.2", - "vfile-reporter": "^7.0.3" + "vfile-reporter": "^7.0.4" }, "devDependencies": { - "@rollup/plugin-commonjs": "^21.0.2", - "@rollup/plugin-node-resolve": "^13.1.3", - "rollup": "^2.70.1", + "@rollup/plugin-commonjs": "^22.0.2", + "@rollup/plugin-node-resolve": "^14.1.0", + "rollup": "^2.79.1", "rollup-plugin-cleanup": "^3.2.1" } }, "node_modules/@rollup/plugin-commonjs": { - "version": "21.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.2.tgz", - "integrity": "sha512-d/OmjaLVO4j/aQX69bwpWPpbvI3TJkQuxoAk7BH8ew1PyoMBLTOuvJTjzG8oEoW7drIIqB0KCJtfFLu/2GClWg==", + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz", + "integrity": "sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -37,22 +37,22 @@ "resolve": "^1.17.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 12.0.0" }, "peerDependencies": { - "rollup": "^2.38.3" + "rollup": "^2.68.0" } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", - "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz", + "integrity": "sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", "is-module": "^1.0.0", "resolve": "^1.19.0" }, @@ -60,7 +60,7 @@ "node": ">= 10.0.0" }, "peerDependencies": { - "rollup": "^2.42.0" + "rollup": "^2.78.0" } }, "node_modules/@rollup/pluginutils": { @@ -100,9 +100,9 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, "node_modules/@types/estree-jsx": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-0.0.1.tgz", - "integrity": "sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", + "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", "dependencies": { "@types/estree": "*" } @@ -129,9 +129,9 @@ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, "node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "version": "18.7.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.20.tgz", + "integrity": "sha512-adzY4vLLr5Uivmx8+zfSJ5fbdgKxX8UMtjtl+17n0B1q1Nz8JEmE151vefMdpD+1gyh+77weN4qEhej/O7budQ==", "dev": true }, "node_modules/@types/resolve": { @@ -195,9 +195,9 @@ } }, "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, "engines": { "node": ">=6" @@ -216,9 +216,9 @@ } }, "node_modules/character-entities": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.1.tgz", - "integrity": "sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -227,18 +227,18 @@ "node_modules/co": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + "integrity": "sha512-CQsjCRiNObI8AtTsNIBDRMQ4oMR83CzEswHYahClvul7gKk+lDQiOKv+5qh7LQWf5sh6jkZNispz/QlsZxyNgA==" }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "node_modules/debug": { @@ -258,9 +258,9 @@ } }, "node_modules/decode-named-character-reference": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.1.tgz", - "integrity": "sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dependencies": { "character-entities": "^2.0.0" }, @@ -279,17 +279,17 @@ } }, "node_modules/dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "engines": { "node": ">=6" } }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "engines": { "node": ">=0.3.1" } @@ -329,7 +329,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "node_modules/fsevents": { @@ -353,15 +353,15 @@ "dev": true }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -387,7 +387,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "dependencies": { "once": "^1.3.0", @@ -422,10 +422,25 @@ "node": ">=4" } }, + "node_modules/is-builtin-module": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz", + "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -437,13 +452,13 @@ "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true }, "node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "engines": { "node": ">=12" }, @@ -486,9 +501,9 @@ } }, "node_modules/kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "engines": { "node": ">=6" } @@ -544,13 +559,13 @@ } }, "node_modules/mdast-util-find-and-replace": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", - "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz", + "integrity": "sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==", "dependencies": { "escape-string-regexp": "^5.0.0", "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", @@ -641,10 +656,11 @@ } }, "node_modules/mdast-util-gfm-table": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz", - "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.6.tgz", + "integrity": "sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==", "dependencies": { + "@types/mdast": "^3.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^1.0.0", "mdast-util-to-markdown": "^1.3.0" @@ -680,11 +696,11 @@ } }, "node_modules/mdast-util-mdx-expression": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.2.0.tgz", - "integrity": "sha512-wb36oi09XxqO9RVqgfD+xo8a7xaNgS+01+k3v0GKW0X0bYbeBmUZz22Z/IJ8SuphVlG+DNgNo9VoEaUJ3PKfJQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.0.tgz", + "integrity": "sha512-9kTO13HaL/ChfzVCIEfDRdp1m5hsvsm6+R8yr67mH+KS2ikzZ0ISGLPTbTswOFpLLlgVHO9id3cul4ajutCvCA==", "dependencies": { - "@types/estree-jsx": "^0.0.1", + "@types/estree-jsx": "^1.0.0", "@types/hast": "^2.0.0", "@types/mdast": "^3.0.0", "mdast-util-from-markdown": "^1.0.0", @@ -825,9 +841,9 @@ } }, "node_modules/micromark-extension-gfm-footnote": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.3.tgz", - "integrity": "sha512-bn62pC5y39rIo2g1RqZk1NhF7T7cJLuJlbevunQz41U0iPVCdVOFASe5/L1kke+DFKSgfCRhv24+o42cZ1+ADw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", + "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", "dependencies": { "micromark-core-commonmark": "^1.0.0", "micromark-factory-space": "^1.0.0", @@ -835,6 +851,7 @@ "micromark-util-normalize-identifier": "^1.0.0", "micromark-util-sanitize-uri": "^1.0.0", "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", "uvu": "^0.5.0" }, "funding": { @@ -1137,9 +1154,9 @@ ] }, "node_modules/micromark-util-html-tag-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", - "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", + "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", "funding": [ { "type": "GitHub Sponsors", @@ -1286,7 +1303,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { "wrappy": "1" @@ -1295,7 +1312,7 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -1916,9 +1933,9 @@ } }, "node_modules/remark-lint-no-undefined-references": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.1.1.tgz", - "integrity": "sha512-J20rKfTGflLiTI3T5JlLZSmINk6aDGmZi1y70lpU69LDfAyHAKgDK6sSW9XDeFmCPPdm8Ybxe5Gf2a70k+GcVQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.2.0.tgz", + "integrity": "sha512-EDV9B1ZXMLcKVtMQFvfvtbag4AkLcu8aUNGXoez5GJLcCAQ8Q+sG74yOtIW4xNVlVubEjl0vdkFhaKYLxvn2Sw==", "dependencies": { "@types/mdast": "^3.0.0", "micromark-util-normalize-identifier": "^1.0.0", @@ -2179,12 +2196,12 @@ } }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -2196,9 +2213,9 @@ } }, "node_modules/rollup": { - "version": "2.70.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", - "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -2253,9 +2270,9 @@ } }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2278,7 +2295,7 @@ "node_modules/sliced": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + "integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==" }, "node_modules/sourcemap-codec": { "version": "1.4.8", @@ -2317,9 +2334,9 @@ } }, "node_modules/supports-color": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", - "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.3.tgz", + "integrity": "sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA==", "engines": { "node": ">=12" }, @@ -2425,6 +2442,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unified-message-control/node_modules/unist-util-visit-parents": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", + "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-generated": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", @@ -2444,9 +2474,9 @@ } }, "node_modules/unist-util-position": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.2.tgz", - "integrity": "sha512-Y6+plxR41dOLbyyqVDLuGWgXDmxdXslCSRYQkSDagBnOT9oFsQH0J8FzhirSklUEe0xZTT0WDnAE1gXPaDFljA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", "dependencies": { "@types/unist": "^2.0.0" }, @@ -2468,13 +2498,13 @@ } }, "node_modules/unist-util-visit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", - "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "unist-util-visit-parents": "^5.1.1" }, "funding": { "type": "opencollective", @@ -2482,22 +2512,9 @@ } }, "node_modules/unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", - "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" @@ -2508,9 +2525,9 @@ } }, "node_modules/uvu": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.3.tgz", - "integrity": "sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", "dependencies": { "dequal": "^2.0.0", "diff": "^5.0.0", @@ -2525,9 +2542,9 @@ } }, "node_modules/vfile": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz", - "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.5.tgz", + "integrity": "sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ==", "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -2566,9 +2583,9 @@ } }, "node_modules/vfile-reporter": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.3.tgz", - "integrity": "sha512-q+ruTWxFHbow359TDqoNJn5THdwRDeV+XUOtzdT/OESgaGw05CjL68ImlbzRzqS5xL62Y1IaIWb8x+RbaNjayA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.4.tgz", + "integrity": "sha512-4cWalUnLrEnbeUQ+hARG5YZtaHieVK3Jp4iG5HslttkVl+MHunSGNAIrODOTLbtjWsNZJRMCkL66AhvZAYuJ9A==", "dependencies": { "@types/supports-color": "^8.0.0", "string-width": "^5.0.0", @@ -2609,7 +2626,7 @@ "node_modules/wrapped": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", - "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=", + "integrity": "sha512-ZTKuqiTu3WXtL72UKCCnQLRax2IScKH7oQ+mvjbpvNE+NJxIWIemDqqM2GxNr4N16NCjOYpIgpin5pStM7kM5g==", "dependencies": { "co": "3.1.0", "sliced": "^1.0.1" @@ -2618,7 +2635,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "node_modules/yallist": { @@ -2638,9 +2655,9 @@ }, "dependencies": { "@rollup/plugin-commonjs": { - "version": "21.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.2.tgz", - "integrity": "sha512-d/OmjaLVO4j/aQX69bwpWPpbvI3TJkQuxoAk7BH8ew1PyoMBLTOuvJTjzG8oEoW7drIIqB0KCJtfFLu/2GClWg==", + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz", + "integrity": "sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -2653,15 +2670,15 @@ } }, "@rollup/plugin-node-resolve": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", - "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz", + "integrity": "sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", "is-module": "^1.0.0", "resolve": "^1.19.0" } @@ -2699,9 +2716,9 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, "@types/estree-jsx": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-0.0.1.tgz", - "integrity": "sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", + "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", "requires": { "@types/estree": "*" } @@ -2728,9 +2745,9 @@ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, "@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "version": "18.7.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.20.tgz", + "integrity": "sha512-adzY4vLLr5Uivmx8+zfSJ5fbdgKxX8UMtjtl+17n0B1q1Nz8JEmE151vefMdpD+1gyh+77weN4qEhej/O7budQ==", "dev": true }, "@types/resolve": { @@ -2784,9 +2801,9 @@ } }, "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, "ccount": { @@ -2795,25 +2812,25 @@ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" }, "character-entities": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.1.tgz", - "integrity": "sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" }, "co": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + "integrity": "sha512-CQsjCRiNObI8AtTsNIBDRMQ4oMR83CzEswHYahClvul7gKk+lDQiOKv+5qh7LQWf5sh6jkZNispz/QlsZxyNgA==" }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "debug": { @@ -2825,9 +2842,9 @@ } }, "decode-named-character-reference": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.1.tgz", - "integrity": "sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "requires": { "character-entities": "^2.0.0" } @@ -2839,14 +2856,14 @@ "dev": true }, "dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" }, "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" }, "eastasianwidth": { "version": "0.2.0", @@ -2877,7 +2894,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "fsevents": { @@ -2894,15 +2911,15 @@ "dev": true }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -2919,7 +2936,7 @@ "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -2937,10 +2954,19 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, + "is-builtin-module": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz", + "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "requires": { "has": "^1.0.3" @@ -2949,13 +2975,13 @@ "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true }, "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" }, "is-reference": { "version": "1.2.1", @@ -2986,9 +3012,9 @@ } }, "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==" + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" }, "longest-streak": { "version": "3.0.1", @@ -3026,13 +3052,13 @@ } }, "mdast-util-find-and-replace": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", - "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz", + "integrity": "sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==", "requires": { "escape-string-regexp": "^5.0.0", "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" + "unist-util-visit-parents": "^5.0.0" } }, "mdast-util-from-markdown": { @@ -3099,10 +3125,11 @@ } }, "mdast-util-gfm-table": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz", - "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.6.tgz", + "integrity": "sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==", "requires": { + "@types/mdast": "^3.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^1.0.0", "mdast-util-to-markdown": "^1.3.0" @@ -3126,11 +3153,11 @@ } }, "mdast-util-mdx-expression": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.2.0.tgz", - "integrity": "sha512-wb36oi09XxqO9RVqgfD+xo8a7xaNgS+01+k3v0GKW0X0bYbeBmUZz22Z/IJ8SuphVlG+DNgNo9VoEaUJ3PKfJQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.0.tgz", + "integrity": "sha512-9kTO13HaL/ChfzVCIEfDRdp1m5hsvsm6+R8yr67mH+KS2ikzZ0ISGLPTbTswOFpLLlgVHO9id3cul4ajutCvCA==", "requires": { - "@types/estree-jsx": "^0.0.1", + "@types/estree-jsx": "^1.0.0", "@types/hast": "^2.0.0", "@types/mdast": "^3.0.0", "mdast-util-from-markdown": "^1.0.0", @@ -3231,9 +3258,9 @@ } }, "micromark-extension-gfm-footnote": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.3.tgz", - "integrity": "sha512-bn62pC5y39rIo2g1RqZk1NhF7T7cJLuJlbevunQz41U0iPVCdVOFASe5/L1kke+DFKSgfCRhv24+o42cZ1+ADw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", + "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", "requires": { "micromark-core-commonmark": "^1.0.0", "micromark-factory-space": "^1.0.0", @@ -3241,6 +3268,7 @@ "micromark-util-normalize-identifier": "^1.0.0", "micromark-util-sanitize-uri": "^1.0.0", "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", "uvu": "^0.5.0" } }, @@ -3403,9 +3431,9 @@ "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==" }, "micromark-util-html-tag-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", - "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", + "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==" }, "micromark-util-normalize-identifier": { "version": "1.0.0", @@ -3476,7 +3504,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" @@ -3485,7 +3513,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-parse": { @@ -3953,9 +3981,9 @@ } }, "remark-lint-no-undefined-references": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.1.1.tgz", - "integrity": "sha512-J20rKfTGflLiTI3T5JlLZSmINk6aDGmZi1y70lpU69LDfAyHAKgDK6sSW9XDeFmCPPdm8Ybxe5Gf2a70k+GcVQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.2.0.tgz", + "integrity": "sha512-EDV9B1ZXMLcKVtMQFvfvtbag4AkLcu8aUNGXoez5GJLcCAQ8Q+sG74yOtIW4xNVlVubEjl0vdkFhaKYLxvn2Sw==", "requires": { "@types/mdast": "^3.0.0", "micromark-util-normalize-identifier": "^1.0.0", @@ -4165,20 +4193,20 @@ } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } }, "rollup": { - "version": "2.70.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", - "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -4220,9 +4248,9 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "requires": { "lru-cache": "^6.0.0" } @@ -4236,7 +4264,7 @@ "sliced": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + "integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==" }, "sourcemap-codec": { "version": "1.4.8", @@ -4263,9 +4291,9 @@ } }, "supports-color": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", - "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==" + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.3.tgz", + "integrity": "sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA==" }, "supports-preserve-symlinks-flag": { "version": "1.0.0", @@ -4334,6 +4362,15 @@ "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^4.0.0" } + }, + "unist-util-visit-parents": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", + "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } } } }, @@ -4348,9 +4385,9 @@ "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, "unist-util-position": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.2.tgz", - "integrity": "sha512-Y6+plxR41dOLbyyqVDLuGWgXDmxdXslCSRYQkSDagBnOT9oFsQH0J8FzhirSklUEe0xZTT0WDnAE1gXPaDFljA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", "requires": { "@types/unist": "^2.0.0" } @@ -4364,39 +4401,28 @@ } }, "unist-util-visit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", - "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", "requires": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "dependencies": { - "unist-util-visit-parents": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", - "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } + "unist-util-visit-parents": "^5.1.1" } }, "unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", "requires": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } }, "uvu": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.3.tgz", - "integrity": "sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", "requires": { "dequal": "^2.0.0", "diff": "^5.0.0", @@ -4405,9 +4431,9 @@ } }, "vfile": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz", - "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.5.tgz", + "integrity": "sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ==", "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -4434,9 +4460,9 @@ } }, "vfile-reporter": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.3.tgz", - "integrity": "sha512-q+ruTWxFHbow359TDqoNJn5THdwRDeV+XUOtzdT/OESgaGw05CjL68ImlbzRzqS5xL62Y1IaIWb8x+RbaNjayA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.4.tgz", + "integrity": "sha512-4cWalUnLrEnbeUQ+hARG5YZtaHieVK3Jp4iG5HslttkVl+MHunSGNAIrODOTLbtjWsNZJRMCkL66AhvZAYuJ9A==", "requires": { "@types/supports-color": "^8.0.0", "string-width": "^5.0.0", @@ -4465,7 +4491,7 @@ "wrapped": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", - "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=", + "integrity": "sha512-ZTKuqiTu3WXtL72UKCCnQLRax2IScKH7oQ+mvjbpvNE+NJxIWIemDqqM2GxNr4N16NCjOYpIgpin5pStM7kM5g==", "requires": { "co": "3.1.0", "sliced": "^1.0.1" @@ -4474,7 +4500,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "yallist": { diff --git a/tools/lint-md/package.json b/tools/lint-md/package.json index 88923351e83..59dbb774da6 100644 --- a/tools/lint-md/package.json +++ b/tools/lint-md/package.json @@ -11,12 +11,12 @@ "remark-stringify": "^10.0.2", "to-vfile": "^7.2.3", "unified": "^10.1.2", - "vfile-reporter": "^7.0.3" + "vfile-reporter": "^7.0.4" }, "devDependencies": { - "@rollup/plugin-commonjs": "^21.0.2", - "@rollup/plugin-node-resolve": "^13.1.3", - "rollup": "^2.70.1", + "@rollup/plugin-commonjs": "^22.0.2", + "@rollup/plugin-node-resolve": "^14.1.0", + "rollup": "^2.79.1", "rollup-plugin-cleanup": "^3.2.1" } } diff --git a/tools/lint-pr-url.mjs b/tools/lint-pr-url.mjs index 0ebbfdd0796..c32473ccb89 100755 --- a/tools/lint-pr-url.mjs +++ b/tools/lint-pr-url.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node // Usage: -// git diff upstream/master...HEAD -G"pr-url:" -- "*.md" | \ +// git diff upstream/main...HEAD -G"pr-url:" -- "*.md" | \ // ./tools/lint-pr-url.mjs import process from 'node:process'; diff --git a/tools/lint-sh.js b/tools/lint-sh.js deleted file mode 100755 index 378cb38af28..00000000000 --- a/tools/lint-sh.js +++ /dev/null @@ -1,184 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -const { execSync, spawn } = require('child_process'); -const { promises: fs, readdirSync, statSync } = require('fs'); -const { extname, join, relative, resolve } = require('path'); - -const FIX_MODE_ENABLED = process.argv.includes('--fix'); -const USE_NPX = process.argv.includes('--from-npx'); - -const SHELLCHECK_EXE_NAME = 'shellcheck'; -const SHELLCHECK_OPTIONS = ['--shell=sh', '--severity=info', '--enable=all']; -if (FIX_MODE_ENABLED) SHELLCHECK_OPTIONS.push('--format=diff'); -else if (process.env.GITHUB_ACTIONS) SHELLCHECK_OPTIONS.push('--format=json'); - -const SPAWN_OPTIONS = { - cwd: null, - shell: false, - stdio: ['pipe', 'pipe', 'inherit'], -}; - -function* findScriptFilesRecursively(dirPath) { - const entries = readdirSync(dirPath, { withFileTypes: true }); - - for (const entry of entries) { - const path = join(dirPath, entry.name); - - if ( - entry.isDirectory() && - entry.name !== 'build' && - entry.name !== 'changelogs' && - entry.name !== 'deps' && - entry.name !== 'fixtures' && - entry.name !== 'gyp' && - entry.name !== 'inspector_protocol' && - entry.name !== 'node_modules' && - entry.name !== 'out' && - entry.name !== 'tmp' - ) { - yield* findScriptFilesRecursively(path); - } else if (entry.isFile() && extname(entry.name) === '.sh') { - yield path; - } - } -} - -const expectedHashBang = Buffer.from('#!/bin/sh\n'); -async function hasInvalidHashBang(fd) { - const { length } = expectedHashBang; - - const actual = Buffer.allocUnsafe(length); - await fd.read(actual, 0, length, 0); - - return Buffer.compare(actual, expectedHashBang); -} - -async function checkFiles(...files) { - const flags = FIX_MODE_ENABLED ? 'r+' : 'r'; - await Promise.all( - files.map(async (file) => { - const fd = await fs.open(file, flags); - if (await hasInvalidHashBang(fd)) { - if (FIX_MODE_ENABLED) { - const file = await fd.readFile(); - - const fileContent = - file[0] === '#'.charCodeAt() ? - file.subarray(file.indexOf('\n') + 1) : - file; - - const toWrite = Buffer.concat([expectedHashBang, fileContent]); - await fd.truncate(toWrite.length); - await fd.write(toWrite, 0, toWrite.length, 0); - } else { - if (!process.exitCode) process.exitCode = 1; - console.error( - (process.env.GITHUB_ACTIONS ? - `::error file=${file},line=1,col=1::` : - 'Fixable with --fix: ') + - `Invalid hashbang for ${file} (expected /bin/sh).` - ); - } - } - await fd.close(); - }) - ); - - const stdout = await new Promise((resolve, reject) => { - const SHELLCHECK_EXE = - process.env.SHELLCHECK || - execSync('command -v ' + (USE_NPX ? 'npx' : SHELLCHECK_EXE_NAME)) - .toString() - .trim(); - const NPX_OPTIONS = USE_NPX ? [SHELLCHECK_EXE_NAME] : []; - - const shellcheck = spawn( - SHELLCHECK_EXE, - [ - ...NPX_OPTIONS, - ...SHELLCHECK_OPTIONS, - ...(FIX_MODE_ENABLED ? - files.map((filePath) => relative(SPAWN_OPTIONS.cwd, filePath)) : - files), - ], - SPAWN_OPTIONS - ); - shellcheck.once('error', reject); - - let json = ''; - let childProcess = shellcheck; - if (FIX_MODE_ENABLED) { - const GIT_EXE = - process.env.GIT || execSync('command -v git').toString().trim(); - - const gitApply = spawn(GIT_EXE, ['apply'], SPAWN_OPTIONS); - shellcheck.stdout.pipe(gitApply.stdin); - shellcheck.once('exit', (code) => { - if (!process.exitCode && code) process.exitCode = code; - }); - gitApply.stdout.pipe(process.stdout); - - gitApply.once('error', reject); - childProcess = gitApply; - } else if (process.env.GITHUB_ACTIONS) { - shellcheck.stdout.on('data', (chunk) => { - json += chunk; - }); - } else { - shellcheck.stdout.pipe(process.stdout); - } - childProcess.once('exit', (code) => { - if (!process.exitCode && code) process.exitCode = code; - resolve(json); - }); - }); - - if (!FIX_MODE_ENABLED && process.env.GITHUB_ACTIONS) { - const data = JSON.parse(stdout); - for (const { file, line, column, message } of data) { - console.error( - `::error file=${file},line=${line},col=${column}::${file}:${line}:${column}: ${message}` - ); - } - } -} - -const USAGE_STR = - `Usage: ${process.argv[1]} [--fix] [--from-npx]\n` + - '\n' + - 'Environment variables:\n' + - ' - SHELLCHECK: absolute path to `shellcheck`. If not provided, the\n' + - ' script will use the result of `command -v shellcheck`, or\n' + - ' `$(command -v npx) shellcheck` if the flag `--from-npx` is provided\n' + - ' (may require an internet connection).\n' + - ' - GIT: absolute path to `git`. If not provided, the \n' + - ' script will use the result of `command -v git`.\n'; - -if ( - process.argv.length < 3 || - process.argv.includes('-h') || - process.argv.includes('--help') -) { - console.log(USAGE_STR); -} else { - console.log('Running Shell scripts checker...'); - const entryPoint = resolve(process.argv[2]); - const stats = statSync(entryPoint, { throwIfNoEntry: false }); - - const onError = (e) => { - console.log(USAGE_STR); - console.error(e); - process.exitCode = 1; - }; - if (stats?.isDirectory()) { - SPAWN_OPTIONS.cwd = entryPoint; - checkFiles(...findScriptFilesRecursively(entryPoint)).catch(onError); - } else if (stats?.isFile()) { - SPAWN_OPTIONS.cwd = process.cwd(); - checkFiles(entryPoint).catch(onError); - } else { - onError(new Error('You must provide a valid directory or file path. ' + - `Received '${process.argv[2]}'.`)); - } -} diff --git a/tools/lint-sh.mjs b/tools/lint-sh.mjs new file mode 100755 index 00000000000..681c7cd5665 --- /dev/null +++ b/tools/lint-sh.mjs @@ -0,0 +1,184 @@ +#!/usr/bin/env node + +import { execSync, spawn } from 'node:child_process'; +import { promises as fs, readdirSync, statSync } from 'node:fs'; +import { extname, join, relative, resolve } from 'node:path'; +import process from 'node:process'; + +const FIX_MODE_ENABLED = process.argv.includes('--fix'); +const USE_NPX = process.argv.includes('--from-npx'); + +const SHELLCHECK_EXE_NAME = 'shellcheck'; +const SHELLCHECK_OPTIONS = ['--shell=sh', '--severity=info', '--enable=all']; +if (FIX_MODE_ENABLED) SHELLCHECK_OPTIONS.push('--format=diff'); +else if (process.env.GITHUB_ACTIONS) SHELLCHECK_OPTIONS.push('--format=json'); + +const SPAWN_OPTIONS = { + cwd: null, + shell: false, + stdio: ['pipe', 'pipe', 'inherit'], +}; + +function* findScriptFilesRecursively(dirPath) { + const entries = readdirSync(dirPath, { withFileTypes: true }); + + for (const entry of entries) { + const path = join(dirPath, entry.name); + + if ( + entry.isDirectory() && + entry.name !== 'build' && + entry.name !== 'changelogs' && + entry.name !== 'deps' && + entry.name !== 'fixtures' && + entry.name !== 'gyp' && + entry.name !== 'inspector_protocol' && + entry.name !== 'node_modules' && + entry.name !== 'out' && + entry.name !== 'tmp' + ) { + yield* findScriptFilesRecursively(path); + } else if (entry.isFile() && extname(entry.name) === '.sh') { + yield path; + } + } +} + +const expectedHashBang = Buffer.from('#!/bin/sh\n'); +async function hasInvalidHashBang(fd) { + const { length } = expectedHashBang; + + const actual = Buffer.allocUnsafe(length); + await fd.read(actual, 0, length, 0); + + return Buffer.compare(actual, expectedHashBang); +} + +async function checkFiles(...files) { + const flags = FIX_MODE_ENABLED ? 'r+' : 'r'; + await Promise.all( + files.map(async (file) => { + const fd = await fs.open(file, flags); + if (await hasInvalidHashBang(fd)) { + if (FIX_MODE_ENABLED) { + const file = await fd.readFile(); + + const fileContent = + file[0] === '#'.charCodeAt() ? + file.subarray(file.indexOf('\n') + 1) : + file; + + const toWrite = Buffer.concat([expectedHashBang, fileContent]); + await fd.truncate(toWrite.length); + await fd.write(toWrite, 0, toWrite.length, 0); + } else { + if (!process.exitCode) process.exitCode = 1; + console.error( + (process.env.GITHUB_ACTIONS ? + `::error file=${file},line=1,col=1::` : + 'Fixable with --fix: ') + + `Invalid hashbang for ${file} (expected /bin/sh).` + ); + } + } + await fd.close(); + }) + ); + + const stdout = await new Promise((resolve, reject) => { + const SHELLCHECK_EXE = + process.env.SHELLCHECK || + execSync('command -v ' + (USE_NPX ? 'npx' : SHELLCHECK_EXE_NAME)) + .toString() + .trim(); + const NPX_OPTIONS = USE_NPX ? [SHELLCHECK_EXE_NAME] : []; + + const shellcheck = spawn( + SHELLCHECK_EXE, + [ + ...NPX_OPTIONS, + ...SHELLCHECK_OPTIONS, + ...(FIX_MODE_ENABLED ? + files.map((filePath) => relative(SPAWN_OPTIONS.cwd, filePath)) : + files), + ], + SPAWN_OPTIONS + ); + shellcheck.once('error', reject); + + let json = ''; + let childProcess = shellcheck; + if (FIX_MODE_ENABLED) { + const GIT_EXE = + process.env.GIT || execSync('command -v git').toString().trim(); + + const gitApply = spawn(GIT_EXE, ['apply'], SPAWN_OPTIONS); + shellcheck.stdout.pipe(gitApply.stdin); + shellcheck.once('exit', (code) => { + if (!process.exitCode && code) process.exitCode = code; + }); + gitApply.stdout.pipe(process.stdout); + + gitApply.once('error', reject); + childProcess = gitApply; + } else if (process.env.GITHUB_ACTIONS) { + shellcheck.stdout.on('data', (chunk) => { + json += chunk; + }); + } else { + shellcheck.stdout.pipe(process.stdout); + } + childProcess.once('exit', (code) => { + if (!process.exitCode && code) process.exitCode = code; + resolve(json); + }); + }); + + if (!FIX_MODE_ENABLED && process.env.GITHUB_ACTIONS) { + const data = JSON.parse(stdout); + for (const { file, line, column, message } of data) { + console.error( + `::error file=${file},line=${line},col=${column}::${file}:${line}:${column}: ${message}` + ); + } + } +} + +const USAGE_STR = + `Usage: ${process.argv[1]} [--fix] [--from-npx]\n` + + '\n' + + 'Environment variables:\n' + + ' - SHELLCHECK: absolute path to `shellcheck`. If not provided, the\n' + + ' script will use the result of `command -v shellcheck`, or\n' + + ' `$(command -v npx) shellcheck` if the flag `--from-npx` is provided\n' + + ' (may require an internet connection).\n' + + ' - GIT: absolute path to `git`. If not provided, the \n' + + ' script will use the result of `command -v git`.\n'; + +if ( + process.argv.length < 3 || + process.argv.includes('-h') || + process.argv.includes('--help') +) { + console.log(USAGE_STR); +} else { + console.log('Running Shell scripts checker...'); + const entryPoint = resolve(process.argv[2]); + const stats = statSync(entryPoint, { throwIfNoEntry: false }); + + const onError = (e) => { + console.log(USAGE_STR); + console.error(e); + process.exitCode = 1; + }; + if (stats?.isDirectory()) { + SPAWN_OPTIONS.cwd = entryPoint; + checkFiles(...findScriptFilesRecursively(entryPoint)).catch(onError); + } else if (stats?.isFile()) { + SPAWN_OPTIONS.cwd = process.cwd(); + checkFiles(entryPoint).catch(onError); + } else { + onError(new Error('You must provide a valid directory or file path. ' + + `Received '${process.argv[2]}'.`)); + } +} diff --git a/tools/macos-firewall.sh b/tools/macos-firewall.sh index b6050aaf345..4dfa849bc3a 100755 --- a/tools/macos-firewall.sh +++ b/tools/macos-firewall.sh @@ -3,16 +3,16 @@ # popups asking to accept incoming network connections when # running tests. SFW="/usr/libexec/ApplicationFirewall/socketfilterfw" -TOOLSDIR="`dirname \"$0\"`" -TOOLSDIR="`( cd \"$TOOLSDIR\" && pwd) `" -ROOTDIR="`( cd \"$TOOLSDIR/..\" && pwd) `" +TOOLSDIR="$(dirname "$0")" +TOOLSDIR="$(cd "$TOOLSDIR" && pwd)" +ROOTDIR="$(cd "$TOOLSDIR/.." && pwd)" OUTDIR="$TOOLSDIR/../out" # Using cd and pwd here so that the path used for socketfilterfw does not # contain a '..', which seems to cause the rules to be incorrectly added # and they are not removed when this script is re-run. Instead the new # rules are simply appended. By using pwd we can get the full path # without '..' and things work as expected. -OUTDIR="`( cd \"$OUTDIR\" && pwd) `" +OUTDIR="$(cd "$OUTDIR" && pwd)" NODE_RELEASE="$OUTDIR/Release/node" NODE_DEBUG="$OUTDIR/Debug/node" NODE_LINK="$ROOTDIR/node" diff --git a/tools/msvs/find_python.cmd b/tools/msvs/find_python.cmd index 06e41fe06cd..00fb6c9afbf 100644 --- a/tools/msvs/find_python.cmd +++ b/tools/msvs/find_python.cmd @@ -46,7 +46,7 @@ exit /b 1 :found-python echo Python found in %p%\python.exe -call :check-python %p%\python.exe +call :check-python "%p%\python.exe" if errorlevel 1 goto :no-python endlocal ^ & set "pt=%p%" ^ @@ -57,7 +57,7 @@ set "need_path_ext=" exit /b 0 :check-python -%~1 -V +%1 -V :: 9009 means error file not found if %errorlevel% equ 9009 ( echo Not an executable Python program diff --git a/tools/msvs/install_tools/install_tools.bat b/tools/msvs/install_tools/install_tools.bat index 46ba93c8b89..18f92a98100 100644 --- a/tools/msvs/install_tools/install_tools.bat +++ b/tools/msvs/install_tools/install_tools.bat @@ -13,7 +13,7 @@ echo This script will install Python and the Visual Studio Build Tools, necessar echo to compile Node.js native modules. Note that Chocolatey and required Windows echo updates will also be installed. echo. -echo This will require about 3 Gb of free disk space, plus any space necessary to +echo This will require about 3 GiB of free disk space, plus any space necessary to echo install Windows updates. This will take a while to run. echo. echo Please close all open programs for the duration of the installation. If the diff --git a/tools/node_modules/eslint/bin/eslint.js b/tools/node_modules/eslint/bin/eslint.js index d00a870c089..7094ac77bc4 100755 --- a/tools/node_modules/eslint/bin/eslint.js +++ b/tools/node_modules/eslint/bin/eslint.js @@ -9,9 +9,6 @@ "use strict"; -// to use V8's code cache to speed up instantiation time -require("v8-compile-cache"); - // must do this initialization *before* other requires in order to work if (process.argv.includes("--debug")) { require("debug").enable("eslint:*,-eslint:code-path,eslintrc:*"); @@ -69,7 +66,7 @@ function getErrorMessage(error) { // Lazy loading because this is used only if an error happened. const util = require("util"); - // Foolproof -- thirdparty module might throw non-object. + // Foolproof -- third-party module might throw non-object. if (typeof error !== "object" || error === null) { return String(error); } @@ -137,6 +134,7 @@ ${message}`); // Otherwise, call the CLI. process.exitCode = await require("../lib/cli").execute( process.argv, - process.argv.includes("--stdin") ? await readStdin() : null + process.argv.includes("--stdin") ? await readStdin() : null, + true ); }()).catch(onFatalError); diff --git a/tools/node_modules/eslint/conf/globals.js b/tools/node_modules/eslint/conf/globals.js index 076ffb2af94..6018b7af15c 100644 --- a/tools/node_modules/eslint/conf/globals.js +++ b/tools/node_modules/eslint/conf/globals.js @@ -124,6 +124,10 @@ const es2022 = { ...es2021 }; +const es2023 = { + ...es2022 +}; + //----------------------------------------------------------------------------- // Exports @@ -140,5 +144,6 @@ module.exports = { es2019, es2020, es2021, - es2022 + es2022, + es2023 }; diff --git a/tools/node_modules/eslint/lib/cli-engine/cli-engine.js b/tools/node_modules/eslint/lib/cli-engine/cli-engine.js index 92b8755783f..fdc66198809 100644 --- a/tools/node_modules/eslint/lib/cli-engine/cli-engine.js +++ b/tools/node_modules/eslint/lib/cli-engine/cli-engine.js @@ -56,6 +56,7 @@ const validFixTypes = new Set(["directive", "problem", "suggestion", "layout"]); /** @typedef {import("../shared/types").Plugin} Plugin */ /** @typedef {import("../shared/types").RuleConf} RuleConf */ /** @typedef {import("../shared/types").Rule} Rule */ +/** @typedef {import("../shared/types").FormatterFunction} FormatterFunction */ /** @typedef {ReturnType} ConfigArray */ /** @typedef {ReturnType} ExtractedConfig */ @@ -365,9 +366,7 @@ function *iterateRuleDeprecationWarnings(usedConfigArrays) { // Flatten used configs. /** @type {ExtractedConfig[]} */ - const configs = [].concat( - ...usedConfigArrays.map(getUsedExtractedConfigs) - ); + const configs = usedConfigArrays.flatMap(getUsedExtractedConfigs); // Traverse rule configs. for (const config of configs) { @@ -1002,7 +1001,7 @@ class CLIEngine { * @param {string} [format] The name of the format to load or the path to a * custom formatter. * @throws {any} As may be thrown by requiring of formatter - * @returns {(Function|null)} The formatter function or null if the `format` is not a string. + * @returns {(FormatterFunction|null)} The formatter function or null if the `format` is not a string. */ getFormatter(format) { @@ -1022,7 +1021,7 @@ class CLIEngine { let formatterPath; // if there's a slash, then it's a file (TODO: this check seems dubious for scoped npm packages) - if (!namespace && normalizedFormatName.indexOf("/") > -1) { + if (!namespace && normalizedFormatName.includes("/")) { formatterPath = path.resolve(cwd, normalizedFormatName); } else { try { diff --git a/tools/node_modules/eslint/lib/cli-engine/file-enumerator.js b/tools/node_modules/eslint/lib/cli-engine/file-enumerator.js index 674e83e540d..b65d0a20692 100644 --- a/tools/node_modules/eslint/lib/cli-engine/file-enumerator.js +++ b/tools/node_modules/eslint/lib/cli-engine/file-enumerator.js @@ -122,7 +122,8 @@ function statSafeSync(filePath) { try { return fs.statSync(filePath); } catch (error) { - /* istanbul ignore next */ + + /* c8 ignore next */ if (error.code !== "ENOENT") { throw error; } @@ -141,7 +142,8 @@ function readdirSafeSync(directoryPath) { try { return fs.readdirSync(directoryPath, { withFileTypes: true }); } catch (error) { - /* istanbul ignore next */ + + /* c8 ignore next */ if (error.code !== "ENOENT") { throw error; } diff --git a/tools/node_modules/eslint/lib/cli-engine/formatters/html.js b/tools/node_modules/eslint/lib/cli-engine/formatters/html.js index b6365997117..6e40bbe16b7 100644 --- a/tools/node_modules/eslint/lib/cli-engine/formatters/html.js +++ b/tools/node_modules/eslint/lib/cli-engine/formatters/html.js @@ -151,7 +151,7 @@ function pageTemplate(it) { -`.trimLeft(); +`.trimStart(); } /** @@ -222,7 +222,7 @@ function messageTemplate(it) { ${ruleId ? ruleId : ""}
    -`.trimLeft(); +`.trimStart(); } /** @@ -280,7 +280,7 @@ function resultTemplate(it) { ${encodeHTML(summary)} -`.trimLeft(); +`.trimStart(); } /** diff --git a/tools/node_modules/eslint/lib/cli-engine/lint-result-cache.js b/tools/node_modules/eslint/lib/cli-engine/lint-result-cache.js index 3304d429deb..e36eb74bada 100644 --- a/tools/node_modules/eslint/lib/cli-engine/lint-result-cache.js +++ b/tools/node_modules/eslint/lib/cli-engine/lint-result-cache.js @@ -36,7 +36,7 @@ const invalidCacheStrategyErrorMessage = `Cache strategy must be one of: ${valid */ function isValidCacheStrategy(cacheStrategy) { return ( - validCacheStrategies.indexOf(cacheStrategy) !== -1 + validCacheStrategies.includes(cacheStrategy) ); } diff --git a/tools/node_modules/eslint/lib/cli.js b/tools/node_modules/eslint/lib/cli.js index f09d143d255..2fca65c1908 100644 --- a/tools/node_modules/eslint/lib/cli.js +++ b/tools/node_modules/eslint/lib/cli.js @@ -6,7 +6,7 @@ "use strict"; /* - * The CLI object should *not* call process.exit() directly. It should only return + * NOTE: The CLI object should *not* call process.exit() directly. It should only return * exit codes. This allows other programs to use the CLI object and still control * when the program exits. */ @@ -19,9 +19,14 @@ const fs = require("fs"), path = require("path"), { promisify } = require("util"), { ESLint } = require("./eslint"), - CLIOptions = require("./options"), + { FlatESLint } = require("./eslint/flat-eslint"), + createCLIOptions = require("./options"), log = require("./shared/logging"), RuntimeInfo = require("./shared/runtime-info"); +const { Legacy: { naming } } = require("@eslint/eslintrc"); +const { findFlatConfigFile } = require("./eslint/flat-eslint"); +const { gitignoreToMinimatch } = require("@humanwhocodes/gitignore-to-minimatch"); +const { ModuleImporter } = require("@humanwhocodes/module-importer"); const debug = require("debug")("eslint:cli"); @@ -54,17 +59,20 @@ function quietFixPredicate(message) { } /** - * Translates the CLI options into the options expected by the CLIEngine. + * Translates the CLI options into the options expected by the ESLint constructor. * @param {ParsedCLIOptions} cliOptions The CLI options to translate. - * @returns {ESLintOptions} The options object for the CLIEngine. + * @param {"flat"|"eslintrc"} [configType="eslintrc"] The format of the + * config to generate. + * @returns {Promise} The options object for the ESLint constructor. * @private */ -function translateOptions({ +async function translateOptions({ cache, cacheFile, cacheLocation, cacheStrategy, config, + configLookup, env, errorOnUnmatchedPattern, eslintrc, @@ -85,19 +93,66 @@ function translateOptions({ resolvePluginsRelativeTo, rule, rulesdir -}) { - return { - allowInlineConfig: inlineConfig, - cache, - cacheLocation: cacheLocation || cacheFile, - cacheStrategy, - errorOnUnmatchedPattern, - extensions: ext, - fix: (fix || fixDryRun) && (quiet ? quietFixPredicate : true), - fixTypes: fixType, - ignore, - ignorePath, - overrideConfig: { +}, configType) { + + let overrideConfig, overrideConfigFile; + const importer = new ModuleImporter(); + + if (configType === "flat") { + overrideConfigFile = (typeof config === "string") ? config : !configLookup; + if (overrideConfigFile === false) { + overrideConfigFile = void 0; + } + + let globals = {}; + + if (global) { + globals = global.reduce((obj, name) => { + if (name.endsWith(":true")) { + obj[name.slice(0, -5)] = "writable"; + } else { + obj[name] = "readonly"; + } + return obj; + }, globals); + } + + overrideConfig = [{ + languageOptions: { + globals, + parserOptions: parserOptions || {} + }, + rules: rule ? rule : {} + }]; + + if (parser) { + overrideConfig[0].languageOptions.parser = await importer.import(parser); + } + + if (plugin) { + const plugins = {}; + + for (const pluginName of plugin) { + + const shortName = naming.getShorthandName(pluginName, "eslint-plugin"); + const longName = naming.normalizePackageName(pluginName, "eslint-plugin"); + + plugins[shortName] = await importer.import(longName); + } + + overrideConfig[0].plugins = plugins; + } + + if (ignorePattern) { + overrideConfig.push({ + ignores: ignorePattern.map(gitignoreToMinimatch) + }); + } + + } else { + overrideConfigFile = config; + + overrideConfig = { env: env && env.reduce((obj, name) => { obj[name] = true; return obj; @@ -115,13 +170,32 @@ function translateOptions({ parserOptions, plugins: plugin, rules: rule - }, - overrideConfigFile: config, - reportUnusedDisableDirectives: reportUnusedDisableDirectives ? "error" : void 0, - resolvePluginsRelativeTo, - rulePaths: rulesdir, - useEslintrc: eslintrc + }; + } + + const options = { + allowInlineConfig: inlineConfig, + cache, + cacheLocation: cacheLocation || cacheFile, + cacheStrategy, + errorOnUnmatchedPattern, + fix: (fix || fixDryRun) && (quiet ? quietFixPredicate : true), + fixTypes: fixType, + ignore, + ignorePath, + overrideConfig, + overrideConfigFile, + reportUnusedDisableDirectives: reportUnusedDisableDirectives ? "error" : void 0 }; + + if (configType !== "flat") { + options.resolvePluginsRelativeTo = resolvePluginsRelativeTo; + options.rulePaths = rulesdir; + options.useEslintrc = eslintrc; + options.extensions = ext; + } + + return options; } /** @@ -218,19 +292,34 @@ const cli = { * Executes the CLI based on an array of arguments that is passed in. * @param {string|Array|Object} args The arguments to process. * @param {string} [text] The text to lint (used for TTY). + * @param {boolean} [allowFlatConfig] Whether or not to allow flat config. * @returns {Promise} The exit code for the operation. */ - async execute(args, text) { + async execute(args, text, allowFlatConfig) { if (Array.isArray(args)) { debug("CLI args: %o", args.slice(2)); } + /* + * Before doing anything, we need to see if we are using a + * flat config file. If so, then we need to change the way command + * line args are parsed. This is temporary, and when we fully + * switch to flat config we can remove this logic. + */ + + const usingFlatConfig = allowFlatConfig && !!(await findFlatConfigFile(process.cwd())); + + debug("Using flat config?", usingFlatConfig); + + const CLIOptions = createCLIOptions(usingFlatConfig); + /** @type {ParsedCLIOptions} */ let options; try { options = CLIOptions.parse(args); } catch (error) { + debug("Error parsing CLI options:", error.message); log.error(error.message); return 2; } @@ -251,6 +340,7 @@ const cli = { log.info(RuntimeInfo.environment()); return 0; } catch (err) { + debug("Error retrieving environment info"); log.error(err.message); return 2; } @@ -266,7 +356,9 @@ const cli = { return 2; } - const engine = new ESLint(translateOptions(options)); + const engine = usingFlatConfig + ? new FlatESLint(await translateOptions(options, "flat")) + : new ESLint(await translateOptions(options)); const fileConfig = await engine.calculateConfigForFile(options.printConfig); @@ -289,7 +381,9 @@ const cli = { return 2; } - const engine = new ESLint(translateOptions(options)); + const ActiveESLint = usingFlatConfig ? FlatESLint : ESLint; + + const engine = new ActiveESLint(await translateOptions(options, usingFlatConfig ? "flat" : "eslintrc")); let results; if (useStdin) { @@ -303,14 +397,14 @@ const cli = { if (options.fix) { debug("Fix mode enabled - applying fixes"); - await ESLint.outputFixes(results); + await ActiveESLint.outputFixes(results); } let resultsToPrint = results; if (options.quiet) { debug("Quiet mode enabled - filtering out warnings"); - resultsToPrint = ESLint.getErrorResults(resultsToPrint); + resultsToPrint = ActiveESLint.getErrorResults(resultsToPrint); } if (await printResults(engine, resultsToPrint, options.format, options.outputFile)) { diff --git a/tools/node_modules/eslint/lib/config/default-config.js b/tools/node_modules/eslint/lib/config/default-config.js index a655a6d83ca..c48551a4f2a 100644 --- a/tools/node_modules/eslint/lib/config/default-config.js +++ b/tools/node_modules/eslint/lib/config/default-config.js @@ -15,7 +15,6 @@ const Rules = require("../rules"); // Helpers //----------------------------------------------------------------------------- - exports.defaultConfig = [ { plugins: { @@ -41,21 +40,31 @@ exports.defaultConfig = [ }) } }, - ignores: [ - "**/node_modules/**", - ".git/**" - ], languageOptions: { - ecmaVersion: "latest", sourceType: "module", + ecmaVersion: "latest", parser: "@/espree", parserOptions: {} } }, + + // default ignores are listed here + { + ignores: [ + "**/node_modules/**", + ".git/**" + ] + }, + + // intentionally empty config to ensure these files are globbed by default + { + files: ["**/*.js", "**/*.mjs"] + }, { files: ["**/*.cjs"], languageOptions: { - sourceType: "commonjs" + sourceType: "commonjs", + ecmaVersion: "latest" } } ]; diff --git a/tools/node_modules/eslint/lib/config/flat-config-array.js b/tools/node_modules/eslint/lib/config/flat-config-array.js index fbedf139d8b..ad8986f516e 100644 --- a/tools/node_modules/eslint/lib/config/flat-config-array.js +++ b/tools/node_modules/eslint/lib/config/flat-config-array.js @@ -36,6 +36,8 @@ function splitPluginIdentifier(identifier) { }; } +const originalBaseConfig = Symbol("originalBaseConfig"); + //----------------------------------------------------------------------------- // Exports //----------------------------------------------------------------------------- @@ -48,10 +50,14 @@ class FlatConfigArray extends ConfigArray { /** * Creates a new instance. * @param {*[]} configs An array of configuration information. - * @param {{basePath: string, baseConfig: FlatConfig}} options The options + * @param {{basePath: string, shouldIgnore: boolean, baseConfig: FlatConfig}} options The options * to use for the config array instance. */ - constructor(configs, { basePath, baseConfig = defaultConfig } = {}) { + constructor(configs, { + basePath, + shouldIgnore = true, + baseConfig = defaultConfig + } = {}) { super(configs, { basePath, schema: flatConfigSchema @@ -62,6 +68,22 @@ class FlatConfigArray extends ConfigArray { } else { this.unshift(baseConfig); } + + /** + * The baes config used to build the config array. + * @type {Array} + */ + this[originalBaseConfig] = baseConfig; + Object.defineProperty(this, originalBaseConfig, { writable: false }); + + /** + * Determines if `ignores` fields should be honored. + * If true, then all `ignores` fields are honored. + * if false, then only `ignores` fields in the baseConfig are honored. + * @type {boolean} + */ + this.shouldIgnore = shouldIgnore; + Object.defineProperty(this, "shouldIgnore", { writable: false }); } /* eslint-disable class-methods-use-this -- Desired as instance method */ @@ -87,6 +109,23 @@ class FlatConfigArray extends ConfigArray { return require("../../conf/eslint-all"); } + /* + * If `shouldIgnore` is false, we remove any ignore patterns specified + * in the config so long as it's not a default config and it doesn't + * have a `files` entry. + */ + if ( + !this.shouldIgnore && + !this[originalBaseConfig].includes(config) && + config.ignores && + !config.files + ) { + /* eslint-disable-next-line no-unused-vars -- need to strip off other keys */ + const { ignores, ...otherKeys } = config; + + return otherKeys; + } + return config; } @@ -100,31 +139,72 @@ class FlatConfigArray extends ConfigArray { [ConfigArraySymbol.finalizeConfig](config) { const { plugins, languageOptions, processor } = config; + let parserName, processorName; + let invalidParser = false, + invalidProcessor = false; // Check parser value - if (languageOptions && languageOptions.parser && typeof languageOptions.parser === "string") { - const { pluginName, objectName: parserName } = splitPluginIdentifier(languageOptions.parser); + if (languageOptions && languageOptions.parser) { + if (typeof languageOptions.parser === "string") { + const { pluginName, objectName: localParserName } = splitPluginIdentifier(languageOptions.parser); - if (!plugins || !plugins[pluginName] || !plugins[pluginName].parsers || !plugins[pluginName].parsers[parserName]) { - throw new TypeError(`Key "parser": Could not find "${parserName}" in plugin "${pluginName}".`); - } + parserName = languageOptions.parser; + + if (!plugins || !plugins[pluginName] || !plugins[pluginName].parsers || !plugins[pluginName].parsers[localParserName]) { + throw new TypeError(`Key "parser": Could not find "${localParserName}" in plugin "${pluginName}".`); + } - languageOptions.parser = plugins[pluginName].parsers[parserName]; + languageOptions.parser = plugins[pluginName].parsers[localParserName]; + } else { + invalidParser = true; + } } // Check processor value - if (processor && typeof processor === "string") { - const { pluginName, objectName: processorName } = splitPluginIdentifier(processor); + if (processor) { + if (typeof processor === "string") { + const { pluginName, objectName: localProcessorName } = splitPluginIdentifier(processor); - if (!plugins || !plugins[pluginName] || !plugins[pluginName].processors || !plugins[pluginName].processors[processorName]) { - throw new TypeError(`Key "processor": Could not find "${processorName}" in plugin "${pluginName}".`); - } + processorName = processor; + + if (!plugins || !plugins[pluginName] || !plugins[pluginName].processors || !plugins[pluginName].processors[localProcessorName]) { + throw new TypeError(`Key "processor": Could not find "${localProcessorName}" in plugin "${pluginName}".`); + } - config.processor = plugins[pluginName].processors[processorName]; + config.processor = plugins[pluginName].processors[localProcessorName]; + } else { + invalidProcessor = true; + } } ruleValidator.validate(config); + // apply special logic for serialization into JSON + /* eslint-disable object-shorthand -- shorthand would change "this" value */ + Object.defineProperty(config, "toJSON", { + value: function() { + + if (invalidParser) { + throw new Error("Caching is not supported when parser is an object."); + } + + if (invalidProcessor) { + throw new Error("Caching is not supported when processor is an object."); + } + + return { + ...this, + plugins: Object.keys(plugins), + languageOptions: { + ...languageOptions, + parser: parserName + }, + processor: processorName + }; + } + }); + /* eslint-enable object-shorthand -- ok to enable now */ + return config; } /* eslint-enable class-methods-use-this -- Desired as instance method */ diff --git a/tools/node_modules/eslint/lib/config/flat-config-helpers.js b/tools/node_modules/eslint/lib/config/flat-config-helpers.js index bcc4eb12082..e00c56434cd 100644 --- a/tools/node_modules/eslint/lib/config/flat-config-helpers.js +++ b/tools/node_modules/eslint/lib/config/flat-config-helpers.js @@ -20,7 +20,14 @@ function parseRuleId(ruleId) { // distinguish between core rules and plugin rules if (ruleId.includes("/")) { - pluginName = ruleId.slice(0, ruleId.lastIndexOf("/")); + + // mimic scoped npm packages + if (ruleId.startsWith("@")) { + pluginName = ruleId.slice(0, ruleId.lastIndexOf("/")); + } else { + pluginName = ruleId.slice(0, ruleId.indexOf("/")); + } + ruleName = ruleId.slice(pluginName.length + 1); } else { pluginName = "@"; @@ -47,6 +54,7 @@ function getRuleFromConfig(ruleId, config) { const plugin = config.plugins && config.plugins[pluginName]; let rule = plugin && plugin.rules && plugin.rules[ruleName]; + // normalize function rules into objects if (rule && typeof rule === "function") { rule = { diff --git a/tools/node_modules/eslint/lib/eslint/eslint-helpers.js b/tools/node_modules/eslint/lib/eslint/eslint-helpers.js new file mode 100644 index 00000000000..ead1af5fda9 --- /dev/null +++ b/tools/node_modules/eslint/lib/eslint/eslint-helpers.js @@ -0,0 +1,644 @@ +/** + * @fileoverview Helper functions for ESLint class + * @author Nicholas C. Zakas + */ + +"use strict"; + +//----------------------------------------------------------------------------- +// Requirements +//----------------------------------------------------------------------------- + +const path = require("path"); +const fs = require("fs"); +const fsp = fs.promises; +const isGlob = require("is-glob"); +const globby = require("globby"); +const hash = require("../cli-engine/hash"); +const minimatch = require("minimatch"); + +//----------------------------------------------------------------------------- +// Errors +//----------------------------------------------------------------------------- + +/** + * The error type when no files match a glob. + */ +class NoFilesFoundError extends Error { + + /** + * @param {string} pattern The glob pattern which was not found. + * @param {boolean} globEnabled If `false` then the pattern was a glob pattern, but glob was disabled. + */ + constructor(pattern, globEnabled) { + super(`No files matching '${pattern}' were found${!globEnabled ? " (glob was disabled)" : ""}.`); + this.messageTemplate = "file-not-found"; + this.messageData = { pattern, globDisabled: !globEnabled }; + } +} + +/** + * The error type when there are files matched by a glob, but all of them have been ignored. + */ +class AllFilesIgnoredError extends Error { + + /** + * @param {string} pattern The glob pattern which was not found. + */ + constructor(pattern) { + super(`All files matched by '${pattern}' are ignored.`); + this.messageTemplate = "all-files-ignored"; + this.messageData = { pattern }; + } +} + + +//----------------------------------------------------------------------------- +// General Helpers +//----------------------------------------------------------------------------- + +/** + * Check if a given value is a non-empty string or not. + * @param {any} x The value to check. + * @returns {boolean} `true` if `x` is a non-empty string. + */ +function isNonEmptyString(x) { + return typeof x === "string" && x.trim() !== ""; +} + +/** + * Check if a given value is an array of non-empty stringss or not. + * @param {any} x The value to check. + * @returns {boolean} `true` if `x` is an array of non-empty stringss. + */ +function isArrayOfNonEmptyString(x) { + return Array.isArray(x) && x.every(isNonEmptyString); +} + +//----------------------------------------------------------------------------- +// File-related Helpers +//----------------------------------------------------------------------------- + +/** + * Normalizes slashes in a file pattern to posix-style. + * @param {string} pattern The pattern to replace slashes in. + * @returns {string} The pattern with slashes normalized. + */ +function normalizeToPosix(pattern) { + return pattern.replace(/\\/gu, "/"); +} + +/** + * Check if a string is a glob pattern or not. + * @param {string} pattern A glob pattern. + * @returns {boolean} `true` if the string is a glob pattern. + */ +function isGlobPattern(pattern) { + return isGlob(path.sep === "\\" ? normalizeToPosix(pattern) : pattern); +} + +/** + * Finds all files matching the options specified. + * @param {Object} args The arguments objects. + * @param {Array} args.patterns An array of glob patterns. + * @param {boolean} args.globInputPaths true to interpret glob patterns, + * false to not interpret glob patterns. + * @param {string} args.cwd The current working directory to find from. + * @param {FlatConfigArray} args.configs The configs for the current run. + * @param {boolean} args.errorOnUnmatchedPattern Determines if an unmatched pattern + * should throw an error. + * @returns {Promise>} The fully resolved file paths. + * @throws {AllFilesIgnoredError} If there are no results due to an ignore pattern. + * @throws {NoFilesFoundError} If no files matched the given patterns. + */ +async function findFiles({ + patterns, + globInputPaths, + cwd, + configs, + errorOnUnmatchedPattern +}) { + + const results = []; + const globbyPatterns = []; + const missingPatterns = []; + + // check to see if we have explicit files and directories + const filePaths = patterns.map(filePath => path.resolve(cwd, filePath)); + const stats = await Promise.all( + filePaths.map( + filePath => fsp.stat(filePath).catch(() => { }) + ) + ); + + stats.forEach((stat, index) => { + + const filePath = filePaths[index]; + const pattern = normalizeToPosix(patterns[index]); + + if (stat) { + + // files are added directly to the list + if (stat.isFile()) { + results.push({ + filePath, + ignored: configs.isIgnored(filePath) + }); + } + + // directories need extensions attached + if (stat.isDirectory()) { + + // filePatterns are all relative to cwd + const filePatterns = configs.files + .filter(filePattern => { + + // can only do this for strings, not functions + if (typeof filePattern !== "string") { + return false; + } + + // patterns starting with ** always apply + if (filePattern.startsWith("**")) { + return true; + } + + // patterns ending with * are not used for file search + if (filePattern.endsWith("*")) { + return false; + } + + // not sure how to handle negated patterns yet + if (filePattern.startsWith("!")) { + return false; + } + + // check if the pattern would be inside the config base path or not + const fullFilePattern = path.join(cwd, filePattern); + const patternRelativeToConfigBasePath = path.relative(configs.basePath, fullFilePattern); + + if (patternRelativeToConfigBasePath.startsWith("..")) { + return false; + } + + // check if the pattern matches + if (minimatch(filePath, path.dirname(fullFilePattern), { partial: true })) { + return true; + } + + // check if the pattern is inside the directory or not + const patternRelativeToFilePath = path.relative(filePath, fullFilePattern); + + if (patternRelativeToFilePath.startsWith("..")) { + return false; + } + + return true; + }) + .map(filePattern => { + if (filePattern.startsWith("**")) { + return path.join(pattern, filePattern); + } + + // adjust the path to be relative to the cwd + return path.relative( + cwd, + path.join(configs.basePath, filePattern) + ); + }) + .map(normalizeToPosix); + + if (filePatterns.length) { + globbyPatterns.push(...filePatterns); + } + + } + + return; + } + + // save patterns for later use based on whether globs are enabled + if (globInputPaths && isGlobPattern(filePath)) { + globbyPatterns.push(pattern); + } else { + missingPatterns.push(pattern); + } + }); + + // note: globbyPatterns can be an empty array + const globbyResults = (await globby(globbyPatterns, { + cwd, + absolute: true, + ignore: configs.ignores.filter(matcher => typeof matcher === "string") + })); + + // if there are no results, tell the user why + if (!results.length && !globbyResults.length) { + + // try globby without ignoring anything + /* eslint-disable no-unreachable-loop -- We want to exit early. */ + for (const globbyPattern of globbyPatterns) { + + /* eslint-disable-next-line no-unused-vars -- Want to exit early. */ + for await (const filePath of globby.stream(globbyPattern, { cwd, absolute: true })) { + + // files were found but ignored + throw new AllFilesIgnoredError(globbyPattern); + } + + // no files were found + if (errorOnUnmatchedPattern) { + throw new NoFilesFoundError(globbyPattern, globInputPaths); + } + } + /* eslint-enable no-unreachable-loop -- Go back to normal. */ + + } + + // there were patterns that didn't match anything, tell the user + if (errorOnUnmatchedPattern && missingPatterns.length) { + throw new NoFilesFoundError(missingPatterns[0], globInputPaths); + } + + + return [ + ...results, + ...globbyResults.map(filePath => ({ + filePath: path.resolve(filePath), + ignored: false + })) + ]; +} + + +/** + * Checks whether a file exists at the given location + * @param {string} resolvedPath A path from the CWD + * @throws {Error} As thrown by `fs.statSync` or `fs.isFile`. + * @returns {boolean} `true` if a file exists + */ +function fileExists(resolvedPath) { + try { + return fs.statSync(resolvedPath).isFile(); + } catch (error) { + if (error && (error.code === "ENOENT" || error.code === "ENOTDIR")) { + return false; + } + throw error; + } +} + +/** + * Checks whether a directory exists at the given location + * @param {string} resolvedPath A path from the CWD + * @throws {Error} As thrown by `fs.statSync` or `fs.isDirectory`. + * @returns {boolean} `true` if a directory exists + */ +function directoryExists(resolvedPath) { + try { + return fs.statSync(resolvedPath).isDirectory(); + } catch (error) { + if (error && (error.code === "ENOENT" || error.code === "ENOTDIR")) { + return false; + } + throw error; + } +} + +//----------------------------------------------------------------------------- +// Results-related Helpers +//----------------------------------------------------------------------------- + +/** + * Checks if the given message is an error message. + * @param {LintMessage} message The message to check. + * @returns {boolean} Whether or not the message is an error message. + * @private + */ +function isErrorMessage(message) { + return message.severity === 2; +} + +/** + * Returns result with warning by ignore settings + * @param {string} filePath File path of checked code + * @param {string} baseDir Absolute path of base directory + * @returns {LintResult} Result with single warning + * @private + */ +function createIgnoreResult(filePath, baseDir) { + let message; + const isHidden = filePath.split(path.sep) + .find(segment => /^\./u.test(segment)); + const isInNodeModules = baseDir && path.relative(baseDir, filePath).startsWith("node_modules"); + + if (isHidden) { + message = "File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."; + } else if (isInNodeModules) { + message = "File ignored by default. Use \"--ignore-pattern '!node_modules/*'\" to override."; + } else { + message = "File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."; + } + + return { + filePath: path.resolve(filePath), + messages: [ + { + fatal: false, + severity: 1, + message + } + ], + suppressedMessages: [], + errorCount: 0, + warningCount: 1, + fatalErrorCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0 + }; +} + +//----------------------------------------------------------------------------- +// Options-related Helpers +//----------------------------------------------------------------------------- + + +/** + * Check if a given value is a valid fix type or not. + * @param {any} x The value to check. + * @returns {boolean} `true` if `x` is valid fix type. + */ +function isFixType(x) { + return x === "directive" || x === "problem" || x === "suggestion" || x === "layout"; +} + +/** + * Check if a given value is an array of fix types or not. + * @param {any} x The value to check. + * @returns {boolean} `true` if `x` is an array of fix types. + */ +function isFixTypeArray(x) { + return Array.isArray(x) && x.every(isFixType); +} + +/** + * The error for invalid options. + */ +class ESLintInvalidOptionsError extends Error { + constructor(messages) { + super(`Invalid Options:\n- ${messages.join("\n- ")}`); + this.code = "ESLINT_INVALID_OPTIONS"; + Error.captureStackTrace(this, ESLintInvalidOptionsError); + } +} + +/** + * Validates and normalizes options for the wrapped CLIEngine instance. + * @param {FlatESLintOptions} options The options to process. + * @throws {ESLintInvalidOptionsError} If of any of a variety of type errors. + * @returns {FlatESLintOptions} The normalized options. + */ +function processOptions({ + allowInlineConfig = true, // ← we cannot use `overrideConfig.noInlineConfig` instead because `allowInlineConfig` has side-effect that suppress warnings that show inline configs are ignored. + baseConfig = null, + cache = false, + cacheLocation = ".eslintcache", + cacheStrategy = "metadata", + cwd = process.cwd(), + errorOnUnmatchedPattern = true, + fix = false, + fixTypes = null, // ← should be null by default because if it's an array then it suppresses rules that don't have the `meta.type` property. + globInputPaths = true, + ignore = true, + ignorePath = null, // ← should be null by default because if it's a string then it may throw ENOENT. + ignorePatterns = null, + overrideConfig = null, + overrideConfigFile = null, + plugins = {}, + reportUnusedDisableDirectives = null, // ← should be null by default because if it's a string then it overrides the 'reportUnusedDisableDirectives' setting in config files. And we cannot use `overrideConfig.reportUnusedDisableDirectives` instead because we cannot configure the `error` severity with that. + ...unknownOptions +}) { + const errors = []; + const unknownOptionKeys = Object.keys(unknownOptions); + + if (unknownOptionKeys.length >= 1) { + errors.push(`Unknown options: ${unknownOptionKeys.join(", ")}`); + if (unknownOptionKeys.includes("cacheFile")) { + errors.push("'cacheFile' has been removed. Please use the 'cacheLocation' option instead."); + } + if (unknownOptionKeys.includes("configFile")) { + errors.push("'configFile' has been removed. Please use the 'overrideConfigFile' option instead."); + } + if (unknownOptionKeys.includes("envs")) { + errors.push("'envs' has been removed."); + } + if (unknownOptionKeys.includes("extensions")) { + errors.push("'extensions' has been removed."); + } + if (unknownOptionKeys.includes("resolvePluginsRelativeTo")) { + errors.push("'resolvePluginsRelativeTo' has been removed."); + } + if (unknownOptionKeys.includes("globals")) { + errors.push("'globals' has been removed. Please use the 'overrideConfig.languageOptions.globals' option instead."); + } + if (unknownOptionKeys.includes("ignorePattern")) { + errors.push("'ignorePattern' has been removed. Please use the 'overrideConfig.ignorePatterns' option instead."); + } + if (unknownOptionKeys.includes("parser")) { + errors.push("'parser' has been removed. Please use the 'overrideConfig.languageOptions.parser' option instead."); + } + if (unknownOptionKeys.includes("parserOptions")) { + errors.push("'parserOptions' has been removed. Please use the 'overrideConfig.languageOptions.parserOptions' option instead."); + } + if (unknownOptionKeys.includes("rules")) { + errors.push("'rules' has been removed. Please use the 'overrideConfig.rules' option instead."); + } + if (unknownOptionKeys.includes("rulePaths")) { + errors.push("'rulePaths' has been removed. Please define your rules using plugins."); + } + } + if (typeof allowInlineConfig !== "boolean") { + errors.push("'allowInlineConfig' must be a boolean."); + } + if (typeof baseConfig !== "object") { + errors.push("'baseConfig' must be an object or null."); + } + if (typeof cache !== "boolean") { + errors.push("'cache' must be a boolean."); + } + if (!isNonEmptyString(cacheLocation)) { + errors.push("'cacheLocation' must be a non-empty string."); + } + if ( + cacheStrategy !== "metadata" && + cacheStrategy !== "content" + ) { + errors.push("'cacheStrategy' must be any of \"metadata\", \"content\"."); + } + if (!isNonEmptyString(cwd) || !path.isAbsolute(cwd)) { + errors.push("'cwd' must be an absolute path."); + } + if (typeof errorOnUnmatchedPattern !== "boolean") { + errors.push("'errorOnUnmatchedPattern' must be a boolean."); + } + if (typeof fix !== "boolean" && typeof fix !== "function") { + errors.push("'fix' must be a boolean or a function."); + } + if (fixTypes !== null && !isFixTypeArray(fixTypes)) { + errors.push("'fixTypes' must be an array of any of \"directive\", \"problem\", \"suggestion\", and \"layout\"."); + } + if (typeof globInputPaths !== "boolean") { + errors.push("'globInputPaths' must be a boolean."); + } + if (typeof ignore !== "boolean") { + errors.push("'ignore' must be a boolean."); + } + if (!isNonEmptyString(ignorePath) && ignorePath !== null) { + errors.push("'ignorePath' must be a non-empty string or null."); + } + if (typeof overrideConfig !== "object") { + errors.push("'overrideConfig' must be an object or null."); + } + if (!isNonEmptyString(overrideConfigFile) && overrideConfigFile !== null && overrideConfigFile !== true) { + errors.push("'overrideConfigFile' must be a non-empty string, null, or true."); + } + if (typeof plugins !== "object") { + errors.push("'plugins' must be an object or null."); + } else if (plugins !== null && Object.keys(plugins).includes("")) { + errors.push("'plugins' must not include an empty string."); + } + if (Array.isArray(plugins)) { + errors.push("'plugins' doesn't add plugins to configuration to load. Please use the 'overrideConfig.plugins' option instead."); + } + if ( + reportUnusedDisableDirectives !== "error" && + reportUnusedDisableDirectives !== "warn" && + reportUnusedDisableDirectives !== "off" && + reportUnusedDisableDirectives !== null + ) { + errors.push("'reportUnusedDisableDirectives' must be any of \"error\", \"warn\", \"off\", and null."); + } + if (errors.length > 0) { + throw new ESLintInvalidOptionsError(errors); + } + + return { + allowInlineConfig, + baseConfig, + cache, + cacheLocation, + cacheStrategy, + + // when overrideConfigFile is true that means don't do config file lookup + configFile: overrideConfigFile === true ? false : overrideConfigFile, + overrideConfig, + cwd, + errorOnUnmatchedPattern, + fix, + fixTypes, + globInputPaths, + ignore, + ignorePath, + ignorePatterns, + reportUnusedDisableDirectives + }; +} + + +//----------------------------------------------------------------------------- +// Cache-related helpers +//----------------------------------------------------------------------------- + +/** + * return the cacheFile to be used by eslint, based on whether the provided parameter is + * a directory or looks like a directory (ends in `path.sep`), in which case the file + * name will be the `cacheFile/.cache_hashOfCWD` + * + * if cacheFile points to a file or looks like a file then in will just use that file + * @param {string} cacheFile The name of file to be used to store the cache + * @param {string} cwd Current working directory + * @returns {string} the resolved path to the cache file + */ +function getCacheFile(cacheFile, cwd) { + + /* + * make sure the path separators are normalized for the environment/os + * keeping the trailing path separator if present + */ + const normalizedCacheFile = path.normalize(cacheFile); + + const resolvedCacheFile = path.resolve(cwd, normalizedCacheFile); + const looksLikeADirectory = normalizedCacheFile.slice(-1) === path.sep; + + /** + * return the name for the cache file in case the provided parameter is a directory + * @returns {string} the resolved path to the cacheFile + */ + function getCacheFileForDirectory() { + return path.join(resolvedCacheFile, `.cache_${hash(cwd)}`); + } + + let fileStats; + + try { + fileStats = fs.lstatSync(resolvedCacheFile); + } catch { + fileStats = null; + } + + + /* + * in case the file exists we need to verify if the provided path + * is a directory or a file. If it is a directory we want to create a file + * inside that directory + */ + if (fileStats) { + + /* + * is a directory or is a file, but the original file the user provided + * looks like a directory but `path.resolve` removed the `last path.sep` + * so we need to still treat this like a directory + */ + if (fileStats.isDirectory() || looksLikeADirectory) { + return getCacheFileForDirectory(); + } + + // is file so just use that file + return resolvedCacheFile; + } + + /* + * here we known the file or directory doesn't exist, + * so we will try to infer if its a directory if it looks like a directory + * for the current operating system. + */ + + // if the last character passed is a path separator we assume is a directory + if (looksLikeADirectory) { + return getCacheFileForDirectory(); + } + + return resolvedCacheFile; +} + + +//----------------------------------------------------------------------------- +// Exports +//----------------------------------------------------------------------------- + +module.exports = { + isGlobPattern, + directoryExists, + fileExists, + findFiles, + + isNonEmptyString, + isArrayOfNonEmptyString, + + createIgnoreResult, + isErrorMessage, + + processOptions, + + getCacheFile +}; diff --git a/tools/node_modules/eslint/lib/eslint/eslint.js b/tools/node_modules/eslint/lib/eslint/eslint.js index 1e5a8f8b13f..9a3bd66e487 100644 --- a/tools/node_modules/eslint/lib/eslint/eslint.js +++ b/tools/node_modules/eslint/lib/eslint/eslint.js @@ -35,10 +35,11 @@ const { version } = require("../../package.json"); /** @typedef {import("../shared/types").SuppressedLintMessage} SuppressedLintMessage */ /** @typedef {import("../shared/types").Plugin} Plugin */ /** @typedef {import("../shared/types").Rule} Rule */ +/** @typedef {import("../shared/types").LintResult} LintResult */ /** * The main formatter object. - * @typedef Formatter + * @typedef LoadedFormatter * @property {function(LintResult[]): string | Promise} format format function. */ @@ -74,22 +75,6 @@ const { version } = require("../../package.json"); * @property {Object} definition The plugin definition. */ -/** - * A linting result. - * @typedef {Object} LintResult - * @property {string} filePath The path to the file that was linted. - * @property {LintMessage[]} messages All of the messages for the result. - * @property {SuppressedLintMessage[]} suppressedMessages All of the suppressed messages for the result. - * @property {number} errorCount Number of errors for the result. - * @property {number} fatalErrorCount Number of fatal errors for the result. - * @property {number} warningCount Number of warnings for the result. - * @property {number} fixableErrorCount Number of fixable errors for the result. - * @property {number} fixableWarningCount Number of fixable warnings for the result. - * @property {string} [source] The source code of the file that was linted. - * @property {string} [output] The source code of the file that was linted, with as many fixes applied as possible. - * @property {DeprecatedRuleInfo[]} usedDeprecatedRules The list of used deprecated rules. - */ - /** * Private members for the `ESLint` instance. * @typedef {Object} ESLintPrivateMembers @@ -119,9 +104,9 @@ function isNonEmptyString(x) { } /** - * Check if a given value is an array of non-empty stringss or not. + * Check if a given value is an array of non-empty strings or not. * @param {any} x The value to check. - * @returns {boolean} `true` if `x` is an array of non-empty stringss. + * @returns {boolean} `true` if `x` is an array of non-empty strings. */ function isArrayOfNonEmptyString(x) { return Array.isArray(x) && x.every(isNonEmptyString); @@ -614,12 +599,12 @@ class ESLint { * The following values are allowed: * - `undefined` ... Load `stylish` builtin formatter. * - A builtin formatter name ... Load the builtin formatter. - * - A thirdparty formatter name: + * - A third-party formatter name: * - `foo` → `eslint-formatter-foo` * - `@foo` → `@foo/eslint-formatter` * - `@foo/bar` → `@foo/eslint-formatter-bar` * - A file path ... Load the file. - * @returns {Promise} A promise resolving to the formatter object. + * @returns {Promise} A promise resolving to the formatter object. * This promise will be rejected if the given formatter was not found or not * a function. */ @@ -639,7 +624,7 @@ class ESLint { /** * The main formatter method. - * @param {LintResults[]} results The lint results to format. + * @param {LintResult[]} results The lint results to format. * @returns {string | Promise} The formatted lint results. */ format(results) { diff --git a/tools/node_modules/eslint/lib/eslint/flat-eslint.js b/tools/node_modules/eslint/lib/eslint/flat-eslint.js new file mode 100644 index 00000000000..e436c464014 --- /dev/null +++ b/tools/node_modules/eslint/lib/eslint/flat-eslint.js @@ -0,0 +1,1176 @@ +/** + * @fileoverview Main class using flat config + * @author Nicholas C. Zakas + */ + +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +// Note: Node.js 12 does not support fs/promises. +const fs = require("fs").promises; +const path = require("path"); +const findUp = require("find-up"); +const { version } = require("../../package.json"); +const { Linter } = require("../linter"); +const { getRuleFromConfig } = require("../config/flat-config-helpers"); +const { gitignoreToMinimatch } = require("@humanwhocodes/gitignore-to-minimatch"); +const { + Legacy: { + ConfigOps: { + getRuleSeverity + }, + ModuleResolver, + naming + } +} = require("@eslint/eslintrc"); + +const { + fileExists, + findFiles, + getCacheFile, + + isNonEmptyString, + isArrayOfNonEmptyString, + + createIgnoreResult, + isErrorMessage, + + processOptions +} = require("./eslint-helpers"); +const { pathToFileURL } = require("url"); +const { FlatConfigArray } = require("../config/flat-config-array"); +const LintResultCache = require("../cli-engine/lint-result-cache"); + +/* + * This is necessary to allow overwriting writeFile for testing purposes. + * We can just use fs/promises once we drop Node.js 12 support. + */ + +//------------------------------------------------------------------------------ +// Typedefs +//------------------------------------------------------------------------------ + +// For VSCode IntelliSense +/** @typedef {import("../shared/types").ConfigData} ConfigData */ +/** @typedef {import("../shared/types").DeprecatedRuleInfo} DeprecatedRuleInfo */ +/** @typedef {import("../shared/types").LintMessage} LintMessage */ +/** @typedef {import("../shared/types").ParserOptions} ParserOptions */ +/** @typedef {import("../shared/types").Plugin} Plugin */ +/** @typedef {import("../shared/types").RuleConf} RuleConf */ +/** @typedef {import("../shared/types").Rule} Rule */ +/** @typedef {ReturnType} ExtractedConfig */ + +/** + * The options with which to configure the ESLint instance. + * @typedef {Object} FlatESLintOptions + * @property {boolean} [allowInlineConfig] Enable or disable inline configuration comments. + * @property {ConfigData} [baseConfig] Base config object, extended by all configs used with this instance + * @property {boolean} [cache] Enable result caching. + * @property {string} [cacheLocation] The cache file to use instead of .eslintcache. + * @property {"metadata" | "content"} [cacheStrategy] The strategy used to detect changed files. + * @property {string} [cwd] The value to use for the current working directory. + * @property {boolean} [errorOnUnmatchedPattern] If `false` then `ESLint#lintFiles()` doesn't throw even if no target files found. Defaults to `true`. + * @property {boolean|Function} [fix] Execute in autofix mode. If a function, should return a boolean. + * @property {string[]} [fixTypes] Array of rule types to apply fixes for. + * @property {boolean} [globInputPaths] Set to false to skip glob resolution of input file paths to lint (default: true). If false, each input file paths is assumed to be a non-glob path to an existing file. + * @property {boolean} [ignore] False disables use of .eslintignore. + * @property {string} [ignorePath] The ignore file to use instead of .eslintignore. + * @property {string[]} [ignorePatterns] Ignore file patterns to use in addition to .eslintignore. + * @property {ConfigData} [overrideConfig] Override config object, overrides all configs used with this instance + * @property {boolean|string} [overrideConfigFile] Searches for default config file when falsy; + * doesn't do any config file lookup when `true`; considered to be a config filename + * when a string. + * @property {Record} [plugins] An array of plugin implementations. + * @property {"error" | "warn" | "off"} [reportUnusedDisableDirectives] the severity to report unused eslint-disable directives. + */ + +//------------------------------------------------------------------------------ +// Helpers +//------------------------------------------------------------------------------ + +const FLAT_CONFIG_FILENAME = "eslint.config.js"; +const debug = require("debug")("eslint:flat-eslint"); +const removedFormatters = new Set(["table", "codeframe"]); +const privateMembers = new WeakMap(); + +/** + * It will calculate the error and warning count for collection of messages per file + * @param {LintMessage[]} messages Collection of messages + * @returns {Object} Contains the stats + * @private + */ +function calculateStatsPerFile(messages) { + return messages.reduce((stat, message) => { + if (message.fatal || message.severity === 2) { + stat.errorCount++; + if (message.fatal) { + stat.fatalErrorCount++; + } + if (message.fix) { + stat.fixableErrorCount++; + } + } else { + stat.warningCount++; + if (message.fix) { + stat.fixableWarningCount++; + } + } + return stat; + }, { + errorCount: 0, + fatalErrorCount: 0, + warningCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0 + }); +} + +/** + * It will calculate the error and warning count for collection of results from all files + * @param {LintResult[]} results Collection of messages from all the files + * @returns {Object} Contains the stats + * @private + */ +function calculateStatsPerRun(results) { + return results.reduce((stat, result) => { + stat.errorCount += result.errorCount; + stat.fatalErrorCount += result.fatalErrorCount; + stat.warningCount += result.warningCount; + stat.fixableErrorCount += result.fixableErrorCount; + stat.fixableWarningCount += result.fixableWarningCount; + return stat; + }, { + errorCount: 0, + fatalErrorCount: 0, + warningCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0 + }); +} + +/** + * Loads global ignore patterns from an ignore file (usually .eslintignore). + * @param {string} filePath The filename to load. + * @returns {ignore} A function encapsulating the ignore patterns. + * @throws {Error} If the file cannot be read. + * @private + */ +async function loadIgnoreFilePatterns(filePath) { + debug(`Loading ignore file: ${filePath}`); + + try { + const ignoreFileText = await fs.readFile(filePath, { encoding: "utf8" }); + + return ignoreFileText + .split(/\r?\n/gu) + .filter(line => line.trim() !== "" && !line.startsWith("#")); + + } catch (e) { + debug(`Error reading ignore file: ${filePath}`); + e.message = `Cannot read ignore file: ${filePath}\nError: ${e.message}`; + throw e; + } +} + +/** + * Create rulesMeta object. + * @param {Map} rules a map of rules from which to generate the object. + * @returns {Object} metadata for all enabled rules. + */ +function createRulesMeta(rules) { + return Array.from(rules).reduce((retVal, [id, rule]) => { + retVal[id] = rule.meta; + return retVal; + }, {}); +} + +/** @type {WeakMap} */ +const usedDeprecatedRulesCache = new WeakMap(); + +/** + * Create used deprecated rule list. + * @param {CLIEngine} eslint The CLIEngine instance. + * @param {string} maybeFilePath The absolute path to a lint target file or `""`. + * @returns {DeprecatedRuleInfo[]} The used deprecated rule list. + */ +function getOrFindUsedDeprecatedRules(eslint, maybeFilePath) { + const { + configs, + options: { cwd } + } = privateMembers.get(eslint); + const filePath = path.isAbsolute(maybeFilePath) + ? maybeFilePath + : path.join(cwd, "__placeholder__.js"); + const config = configs.getConfig(filePath); + + // Most files use the same config, so cache it. + if (config && !usedDeprecatedRulesCache.has(config)) { + const retv = []; + + if (config.rules) { + for (const [ruleId, ruleConf] of Object.entries(config.rules)) { + if (getRuleSeverity(ruleConf) === 0) { + continue; + } + const rule = getRuleFromConfig(ruleId, config); + const meta = rule && rule.meta; + + if (meta && meta.deprecated) { + retv.push({ ruleId, replacedBy: meta.replacedBy || [] }); + } + } + } + + + usedDeprecatedRulesCache.set(config, Object.freeze(retv)); + } + + return config ? usedDeprecatedRulesCache.get(config) : Object.freeze([]); +} + +/** + * Processes the linting results generated by a CLIEngine linting report to + * match the ESLint class's API. + * @param {CLIEngine} eslint The CLIEngine instance. + * @param {CLIEngineLintReport} report The CLIEngine linting report to process. + * @returns {LintResult[]} The processed linting results. + */ +function processLintReport(eslint, { results }) { + const descriptor = { + configurable: true, + enumerable: true, + get() { + return getOrFindUsedDeprecatedRules(eslint, this.filePath); + } + }; + + for (const result of results) { + Object.defineProperty(result, "usedDeprecatedRules", descriptor); + } + + return results; +} + +/** + * An Array.prototype.sort() compatible compare function to order results by their file path. + * @param {LintResult} a The first lint result. + * @param {LintResult} b The second lint result. + * @returns {number} An integer representing the order in which the two results should occur. + */ +function compareResultsByFilePath(a, b) { + if (a.filePath < b.filePath) { + return -1; + } + + if (a.filePath > b.filePath) { + return 1; + } + + return 0; +} + +/** + * Searches from the current working directory up until finding the + * given flat config filename. + * @param {string} cwd The current working directory to search from. + * @returns {Promise} The filename if found or `null` if not. + */ +function findFlatConfigFile(cwd) { + return findUp( + FLAT_CONFIG_FILENAME, + { cwd } + ); +} + +/** + * Load the config array from the given filename. + * @param {string} filePath The filename to load from. + * @param {Object} options Options to help load the config file. + * @param {string} options.basePath The base path for the config array. + * @param {boolean} options.shouldIgnore Whether to honor ignore patterns. + * @returns {Promise} The config array loaded from the config file. + */ +async function loadFlatConfigFile(filePath, { basePath, shouldIgnore }) { + debug(`Loading config from ${filePath}`); + + const fileURL = pathToFileURL(filePath); + + debug(`Config file URL is ${fileURL}`); + + const module = await import(fileURL); + + return new FlatConfigArray(module.default, { + basePath, + shouldIgnore + }); +} + +/** + * Calculates the config array for this run based on inputs. + * @param {FlatESLint} eslint The instance to create the config array for. + * @param {import("./eslint").ESLintOptions} options The ESLint instance options. + * @returns {FlatConfigArray} The config array for `eslint``. + */ +async function calculateConfigArray(eslint, { + cwd, + overrideConfig, + configFile, + ignore: shouldIgnore, + ignorePath, + ignorePatterns +}) { + + // check for cached instance + const slots = privateMembers.get(eslint); + + if (slots.configs) { + return slots.configs; + } + + // determine where to load config file from + let configFilePath; + let basePath = cwd; + + if (typeof configFile === "string") { + debug(`Override config file path is ${configFile}`); + configFilePath = path.resolve(cwd, configFile); + } else if (configFile !== false) { + debug("Searching for eslint.config.js"); + configFilePath = await findFlatConfigFile(cwd); + + if (!configFilePath) { + throw new Error("Could not find config file."); + } + + basePath = path.resolve(path.dirname(configFilePath)); + } + + // load config array + let configs; + + if (configFilePath) { + configs = await loadFlatConfigFile(configFilePath, { + basePath, + shouldIgnore + }); + } else { + configs = new FlatConfigArray([], { basePath, shouldIgnore }); + } + + // add in any configured defaults + configs.push(...slots.defaultConfigs); + + let allIgnorePatterns = []; + let ignoreFilePath; + + // load ignore file if necessary + if (shouldIgnore) { + if (ignorePath) { + ignoreFilePath = path.resolve(cwd, ignorePath); + allIgnorePatterns = await loadIgnoreFilePatterns(ignoreFilePath); + } else { + ignoreFilePath = path.resolve(cwd, ".eslintignore"); + + // no error if .eslintignore doesn't exist` + if (fileExists(ignoreFilePath)) { + allIgnorePatterns = await loadIgnoreFilePatterns(ignoreFilePath); + } + } + } + + // append command line ignore patterns + if (ignorePatterns) { + if (typeof ignorePatterns === "string") { + allIgnorePatterns.push(ignorePatterns); + } else { + allIgnorePatterns.push(...ignorePatterns); + } + } + + /* + * If the config file basePath is different than the cwd, then + * the ignore patterns won't work correctly. Here, we adjust the + * ignore pattern to include the correct relative path. Patterns + * loaded from ignore files are always relative to the cwd, whereas + * the config file basePath can be an ancestor of the cwd. + */ + if (basePath !== cwd && allIgnorePatterns.length) { + + const relativeIgnorePath = path.relative(basePath, cwd); + + allIgnorePatterns = allIgnorePatterns.map(pattern => { + const negated = pattern.startsWith("!"); + const basePattern = negated ? pattern.slice(1) : pattern; + + /* + * Ignore patterns are considered relative to a directory + * when the pattern contains a slash in a position other + * than the last character. If that's the case, we need to + * add the relative ignore path to the current pattern to + * get the correct behavior. Otherwise, no change is needed. + */ + if (!basePattern.includes("/") || basePattern.endsWith("/")) { + return pattern; + } + + return (negated ? "!" : "") + + path.posix.join(relativeIgnorePath, basePattern); + }); + } + + if (allIgnorePatterns.length) { + + /* + * Ignore patterns are added to the end of the config array + * so they can override default ignores. + */ + configs.push({ + ignores: allIgnorePatterns.map(gitignoreToMinimatch) + }); + } + + if (overrideConfig) { + if (Array.isArray(overrideConfig)) { + configs.push(...overrideConfig); + } else { + configs.push(overrideConfig); + } + } + + await configs.normalize(); + + // cache the config array for this instance + slots.configs = configs; + + return configs; +} + +/** + * Processes an source code using ESLint. + * @param {Object} config The config object. + * @param {string} config.text The source code to verify. + * @param {string} config.cwd The path to the current working directory. + * @param {string|undefined} config.filePath The path to the file of `text`. If this is undefined, it uses ``. + * @param {FlatConfigArray} config.configs The config. + * @param {boolean} config.fix If `true` then it does fix. + * @param {boolean} config.allowInlineConfig If `true` then it uses directive comments. + * @param {boolean} config.reportUnusedDisableDirectives If `true` then it reports unused `eslint-disable` comments. + * @param {Linter} config.linter The linter instance to verify. + * @returns {LintResult} The result of linting. + * @private + */ +function verifyText({ + text, + cwd, + filePath: providedFilePath, + configs, + fix, + allowInlineConfig, + reportUnusedDisableDirectives, + linter +}) { + const filePath = providedFilePath || ""; + + debug(`Lint ${filePath}`); + + /* + * Verify. + * `config.extractConfig(filePath)` requires an absolute path, but `linter` + * doesn't know CWD, so it gives `linter` an absolute path always. + */ + const filePathToVerify = filePath === "" ? path.join(cwd, "__placeholder__.js") : filePath; + const { fixed, messages, output } = linter.verifyAndFix( + text, + configs, + { + allowInlineConfig, + filename: filePathToVerify, + fix, + reportUnusedDisableDirectives, + + /** + * Check if the linter should adopt a given code block or not. + * @param {string} blockFilename The virtual filename of a code block. + * @returns {boolean} `true` if the linter should adopt the code block. + */ + filterCodeBlock(blockFilename) { + return configs.isExplicitMatch(blockFilename); + } + } + ); + + // Tweak and return. + const result = { + filePath: filePath === "" ? filePath : path.resolve(filePath), + messages, + suppressedMessages: linter.getSuppressedMessages(), + ...calculateStatsPerFile(messages) + }; + + if (fixed) { + result.output = output; + } + + if ( + result.errorCount + result.warningCount > 0 && + typeof result.output === "undefined" + ) { + result.source = text; + } + + return result; +} + +/** + * Checks whether a message's rule type should be fixed. + * @param {LintMessage} message The message to check. + * @param {FlatConfig} config The config for the file that generated the message. + * @param {string[]} fixTypes An array of fix types to check. + * @returns {boolean} Whether the message should be fixed. + */ +function shouldMessageBeFixed(message, config, fixTypes) { + if (!message.ruleId) { + return fixTypes.has("directive"); + } + + const rule = message.ruleId && getRuleFromConfig(message.ruleId, config); + + return Boolean(rule && rule.meta && fixTypes.has(rule.meta.type)); +} + +/** + * Collect used deprecated rules. + * @param {Array} configs The configs to evaluate. + * @returns {IterableIterator} Used deprecated rules. + */ +function *iterateRuleDeprecationWarnings(configs) { + const processedRuleIds = new Set(); + + for (const config of configs) { + for (const [ruleId, ruleConfig] of Object.entries(config.rules)) { + + // Skip if it was processed. + if (processedRuleIds.has(ruleId)) { + continue; + } + processedRuleIds.add(ruleId); + + // Skip if it's not used. + if (!getRuleSeverity(ruleConfig)) { + continue; + } + const rule = getRuleFromConfig(ruleId, config); + + // Skip if it's not deprecated. + if (!(rule && rule.meta && rule.meta.deprecated)) { + continue; + } + + // This rule was used and deprecated. + yield { + ruleId, + replacedBy: rule.meta.replacedBy || [] + }; + } + } +} + +//----------------------------------------------------------------------------- +// Main API +//----------------------------------------------------------------------------- + +/** + * Primary Node.js API for ESLint. + */ +class FlatESLint { + + /** + * Creates a new instance of the main ESLint API. + * @param {FlatESLintOptions} options The options for this instance. + */ + constructor(options = {}) { + + const defaultConfigs = []; + const processedOptions = processOptions(options); + const linter = new Linter({ + cwd: processedOptions.cwd, + configType: "flat" + }); + + const cacheFilePath = getCacheFile( + processedOptions.cacheLocation, + processedOptions.cwd + ); + + const lintResultCache = processedOptions.cache + ? new LintResultCache(cacheFilePath, processedOptions.cacheStrategy) + : null; + + privateMembers.set(this, { + options: processedOptions, + linter, + cacheFilePath, + lintResultCache, + defaultConfigs, + defaultIgnores: () => false, + configs: null + }); + + /** + * If additional plugins are passed in, add that to the default + * configs for this instance. + */ + if (options.plugins) { + + const plugins = {}; + + for (const [pluginName, plugin] of Object.entries(options.plugins)) { + plugins[naming.getShorthandName(pluginName, "eslint-plugin")] = plugin; + } + + defaultConfigs.push({ + plugins + }); + } + + } + + /** + * The version text. + * @type {string} + */ + static get version() { + return version; + } + + /** + * Outputs fixes from the given results to files. + * @param {LintResult[]} results The lint results. + * @returns {Promise} Returns a promise that is used to track side effects. + */ + static async outputFixes(results) { + if (!Array.isArray(results)) { + throw new Error("'results' must be an array"); + } + + await Promise.all( + results + .filter(result => { + if (typeof result !== "object" || result === null) { + throw new Error("'results' must include only objects"); + } + return ( + typeof result.output === "string" && + path.isAbsolute(result.filePath) + ); + }) + .map(r => fs.writeFile(r.filePath, r.output)) + ); + } + + /** + * Returns results that only contains errors. + * @param {LintResult[]} results The results to filter. + * @returns {LintResult[]} The filtered results. + */ + static getErrorResults(results) { + const filtered = []; + + results.forEach(result => { + const filteredMessages = result.messages.filter(isErrorMessage); + const filteredSuppressedMessages = result.suppressedMessages.filter(isErrorMessage); + + if (filteredMessages.length > 0) { + filtered.push({ + ...result, + messages: filteredMessages, + suppressedMessages: filteredSuppressedMessages, + errorCount: filteredMessages.length, + warningCount: 0, + fixableErrorCount: result.fixableErrorCount, + fixableWarningCount: 0 + }); + } + }); + + return filtered; + } + + /** + * Returns meta objects for each rule represented in the lint results. + * @param {LintResult[]} results The results to fetch rules meta for. + * @returns {Object} A mapping of ruleIds to rule meta objects. + * @throws {TypeError} When the results object wasn't created from this ESLint instance. + * @throws {TypeError} When a plugin or rule is missing. + */ + getRulesMetaForResults(results) { + + const resultRules = new Map(); + + // short-circuit simple case + if (results.length === 0) { + return resultRules; + } + + const { configs } = privateMembers.get(this); + + /* + * We can only accurately return rules meta information for linting results if the + * results were created by this instance. Otherwise, the necessary rules data is + * not available. So if the config array doesn't already exist, just throw an error + * to let the user know we can't do anything here. + */ + if (!configs) { + throw new TypeError("Results object was not created from this ESLint instance."); + } + + for (const result of results) { + + /* + * Normalize filename for . + */ + const filePath = result.filePath === "" + ? "__placeholder__.js" : result.filePath; + + /* + * All of the plugin and rule information is contained within the + * calculated config for the given file. + */ + const config = configs.getConfig(filePath); + const allMessages = result.messages.concat(result.suppressedMessages); + + for (const { ruleId } of allMessages) { + const rule = getRuleFromConfig(ruleId, config); + + // ensure the rule exists + if (!rule) { + throw new TypeError(`Could not find the rule "${ruleId}".`); + } + + resultRules.set(ruleId, rule); + } + } + + return createRulesMeta(resultRules); + } + + /** + * Executes the current configuration on an array of file and directory names. + * @param {string|string[]} patterns An array of file and directory names. + * @returns {Promise} The results of linting the file patterns given. + */ + async lintFiles(patterns) { + if (!isNonEmptyString(patterns) && !isArrayOfNonEmptyString(patterns)) { + throw new Error("'patterns' must be a non-empty string or an array of non-empty strings"); + } + + const { + cacheFilePath, + lintResultCache, + linter, + options: eslintOptions + } = privateMembers.get(this); + const configs = await calculateConfigArray(this, eslintOptions); + const { + allowInlineConfig, + cache, + cwd, + fix, + fixTypes, + reportUnusedDisableDirectives, + globInputPaths, + errorOnUnmatchedPattern + } = eslintOptions; + const startTime = Date.now(); + const usedConfigs = []; + const fixTypesSet = fixTypes ? new Set(fixTypes) : null; + + // Delete cache file; should this be done here? + if (!cache && cacheFilePath) { + debug(`Deleting cache file at ${cacheFilePath}`); + + try { + await fs.unlink(cacheFilePath); + } catch (error) { + const errorCode = error && error.code; + + // Ignore errors when no such file exists or file system is read only (and cache file does not exist) + if (errorCode !== "ENOENT" && !(errorCode === "EROFS" && !(await fs.exists(cacheFilePath)))) { + throw error; + } + } + } + + const filePaths = await findFiles({ + patterns: typeof patterns === "string" ? [patterns] : patterns, + cwd, + globInputPaths, + configs, + errorOnUnmatchedPattern + }); + + debug(`${filePaths.length} files found in: ${Date.now() - startTime}ms`); + + /* + * Because we need to process multiple files, including reading from disk, + * it is most efficient to start by reading each file via promises so that + * they can be done in parallel. Then, we can lint the returned text. This + * ensures we are waiting the minimum amount of time in between lints. + */ + const results = await Promise.all( + + filePaths.map(({ filePath, ignored }) => { + + /* + * If a filename was entered that matches an ignore + * pattern, then notify the user. + */ + if (ignored) { + return createIgnoreResult(filePath, cwd); + } + + const config = configs.getConfig(filePath); + + /* + * Sometimes a file found through a glob pattern will + * be ignored. In this case, `config` will be undefined + * and we just silently ignore the file. + */ + if (!config) { + return void 0; + } + + /* + * Store used configs for: + * - this method uses to collect used deprecated rules. + * - `--fix-type` option uses to get the loaded rule's meta data. + */ + if (!usedConfigs.includes(config)) { + usedConfigs.push(config); + } + + // Skip if there is cached result. + if (lintResultCache) { + const cachedResult = + lintResultCache.getCachedLintResults(filePath, config); + + if (cachedResult) { + const hadMessages = + cachedResult.messages && + cachedResult.messages.length > 0; + + if (hadMessages && fix) { + debug(`Reprocessing cached file to allow autofix: ${filePath}`); + } else { + debug(`Skipping file since it hasn't changed: ${filePath}`); + return cachedResult; + } + } + } + + + // set up fixer for fixtypes if necessary + let fixer = fix; + + if (fix && fixTypesSet) { + + // save original value of options.fix in case it's a function + const originalFix = (typeof fix === "function") + ? fix : () => true; + + fixer = message => shouldMessageBeFixed(message, config, fixTypesSet) && originalFix(message); + } + + return fs.readFile(filePath, "utf8") + .then(text => { + + // do the linting + const result = verifyText({ + text, + filePath, + configs, + cwd, + fix: fixer, + allowInlineConfig, + reportUnusedDisableDirectives, + linter + }); + + /* + * Store the lint result in the LintResultCache. + * NOTE: The LintResultCache will remove the file source and any + * other properties that are difficult to serialize, and will + * hydrate those properties back in on future lint runs. + */ + if (lintResultCache) { + lintResultCache.setCachedLintResults(filePath, config, result); + } + + return result; + }); + + }) + ); + + // Persist the cache to disk. + if (lintResultCache) { + lintResultCache.reconcile(); + } + + let usedDeprecatedRules; + const finalResults = results.filter(result => !!result); + + return processLintReport(this, { + results: finalResults, + ...calculateStatsPerRun(finalResults), + + // Initialize it lazily because CLI and `ESLint` API don't use it. + get usedDeprecatedRules() { + if (!usedDeprecatedRules) { + usedDeprecatedRules = Array.from( + iterateRuleDeprecationWarnings(usedConfigs) + ); + } + return usedDeprecatedRules; + } + }); + } + + /** + * Executes the current configuration on text. + * @param {string} code A string of JavaScript code to lint. + * @param {Object} [options] The options. + * @param {string} [options.filePath] The path to the file of the source code. + * @param {boolean} [options.warnIgnored] When set to true, warn if given filePath is an ignored path. + * @returns {Promise} The results of linting the string of code given. + */ + async lintText(code, options = {}) { + + // Parameter validation + + if (typeof code !== "string") { + throw new Error("'code' must be a string"); + } + + if (typeof options !== "object") { + throw new Error("'options' must be an object, null, or undefined"); + } + + // Options validation + + const { + filePath, + warnIgnored = false, + ...unknownOptions + } = options || {}; + + const unknownOptionKeys = Object.keys(unknownOptions); + + if (unknownOptionKeys.length > 0) { + throw new Error(`'options' must not include the unknown option(s): ${unknownOptionKeys.join(", ")}`); + } + + if (filePath !== void 0 && !isNonEmptyString(filePath)) { + throw new Error("'options.filePath' must be a non-empty string or undefined"); + } + + if (typeof warnIgnored !== "boolean") { + throw new Error("'options.warnIgnored' must be a boolean or undefined"); + } + + // Now we can get down to linting + + const { + linter, + options: eslintOptions + } = privateMembers.get(this); + const configs = await calculateConfigArray(this, eslintOptions); + const { + allowInlineConfig, + cwd, + fix, + reportUnusedDisableDirectives + } = eslintOptions; + const results = []; + const startTime = Date.now(); + const resolvedFilename = path.resolve(cwd, filePath || "__placeholder__.js"); + let config; + + // Clear the last used config arrays. + if (resolvedFilename && await this.isPathIgnored(resolvedFilename)) { + if (warnIgnored) { + results.push(createIgnoreResult(resolvedFilename, cwd)); + } + } else { + + // TODO: Needed? + config = configs.getConfig(resolvedFilename); + + // Do lint. + results.push(verifyText({ + text: code, + filePath: resolvedFilename.endsWith("__placeholder__.js") ? "" : resolvedFilename, + configs, + cwd, + fix, + allowInlineConfig, + reportUnusedDisableDirectives, + linter + })); + } + + debug(`Linting complete in: ${Date.now() - startTime}ms`); + let usedDeprecatedRules; + + return processLintReport(this, { + results, + ...calculateStatsPerRun(results), + + // Initialize it lazily because CLI and `ESLint` API don't use it. + get usedDeprecatedRules() { + if (!usedDeprecatedRules) { + usedDeprecatedRules = Array.from( + iterateRuleDeprecationWarnings(config) + ); + } + return usedDeprecatedRules; + } + }); + + } + + /** + * Returns the formatter representing the given formatter name. + * @param {string} [name] The name of the formatter to load. + * The following values are allowed: + * - `undefined` ... Load `stylish` builtin formatter. + * - A builtin formatter name ... Load the builtin formatter. + * - A thirdparty formatter name: + * - `foo` → `eslint-formatter-foo` + * - `@foo` → `@foo/eslint-formatter` + * - `@foo/bar` → `@foo/eslint-formatter-bar` + * - A file path ... Load the file. + * @returns {Promise} A promise resolving to the formatter object. + * This promise will be rejected if the given formatter was not found or not + * a function. + */ + async loadFormatter(name = "stylish") { + if (typeof name !== "string") { + throw new Error("'name' must be a string"); + } + + // replace \ with / for Windows compatibility + const normalizedFormatName = name.replace(/\\/gu, "/"); + const namespace = naming.getNamespaceFromTerm(normalizedFormatName); + + // grab our options + const { cwd } = privateMembers.get(this).options; + + + let formatterPath; + + // if there's a slash, then it's a file (TODO: this check seems dubious for scoped npm packages) + if (!namespace && normalizedFormatName.includes("/")) { + formatterPath = path.resolve(cwd, normalizedFormatName); + } else { + try { + const npmFormat = naming.normalizePackageName(normalizedFormatName, "eslint-formatter"); + + // TODO: This is pretty dirty...would be nice to clean up at some point. + formatterPath = ModuleResolver.resolve(npmFormat, path.join(cwd, "__placeholder__.js")); + } catch { + formatterPath = path.resolve(__dirname, "../", "cli-engine", "formatters", `${normalizedFormatName}.js`); + } + } + + let formatter; + + try { + formatter = (await import(pathToFileURL(formatterPath))).default; + } catch (ex) { + + // check for formatters that have been removed + if (removedFormatters.has(name)) { + ex.message = `The ${name} formatter is no longer part of core ESLint. Install it manually with \`npm install -D eslint-formatter-${name}\``; + } else { + ex.message = `There was a problem loading formatter: ${formatterPath}\nError: ${ex.message}`; + } + + throw ex; + } + + + if (typeof formatter !== "function") { + throw new TypeError(`Formatter must be a function, but got a ${typeof formatter}.`); + } + + const eslint = this; + + return { + + /** + * The main formatter method. + * @param {LintResults[]} results The lint results to format. + * @returns {string} The formatted lint results. + */ + format(results) { + let rulesMeta = null; + + results.sort(compareResultsByFilePath); + + return formatter(results, { + cwd, + get rulesMeta() { + if (!rulesMeta) { + rulesMeta = eslint.getRulesMetaForResults(results); + } + + return rulesMeta; + } + }); + } + }; + } + + /** + * Returns a configuration object for the given file based on the CLI options. + * This is the same logic used by the ESLint CLI executable to determine + * configuration for each file it processes. + * @param {string} filePath The path of the file to retrieve a config object for. + * @returns {Promise} A configuration object for the file + * or `undefined` if there is no configuration data for the object. + */ + async calculateConfigForFile(filePath) { + if (!isNonEmptyString(filePath)) { + throw new Error("'filePath' must be a non-empty string"); + } + const options = privateMembers.get(this).options; + const absolutePath = path.resolve(options.cwd, filePath); + const configs = await calculateConfigArray(this, options); + + return configs.getConfig(absolutePath); + } + + /** + * Checks if a given path is ignored by ESLint. + * @param {string} filePath The path of the file to check. + * @returns {Promise} Whether or not the given path is ignored. + */ + async isPathIgnored(filePath) { + const config = await this.calculateConfigForFile(filePath); + + return config === void 0; + } +} + +//------------------------------------------------------------------------------ +// Public Interface +//------------------------------------------------------------------------------ + +module.exports = { + FlatESLint, + findFlatConfigFile +}; diff --git a/tools/node_modules/eslint/lib/eslint/index.js b/tools/node_modules/eslint/lib/eslint/index.js index c9185ee0eba..017b768ecd0 100644 --- a/tools/node_modules/eslint/lib/eslint/index.js +++ b/tools/node_modules/eslint/lib/eslint/index.js @@ -1,7 +1,9 @@ "use strict"; const { ESLint } = require("./eslint"); +const { FlatESLint } = require("./flat-eslint"); module.exports = { - ESLint + ESLint, + FlatESLint }; diff --git a/tools/node_modules/eslint/lib/linter/apply-disable-directives.js b/tools/node_modules/eslint/lib/linter/apply-disable-directives.js index f8e4aeedb29..459c8591196 100644 --- a/tools/node_modules/eslint/lib/linter/apply-disable-directives.js +++ b/tools/node_modules/eslint/lib/linter/apply-disable-directives.js @@ -66,7 +66,7 @@ function createIndividualDirectivesRemoval(directives, commentToken) { const listText = commentToken.value .slice(listStartOffset) // remove directive name and all whitespace before the list .split(/\s-{2,}\s/u)[0] // remove `-- comment`, if it exists - .trimRight(); // remove all whitespace after the list + .trimEnd(); // remove all whitespace after the list /* * We can assume that `listText` contains multiple elements. diff --git a/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path-segment.js b/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path-segment.js index fad559a2ad2..fd2726a9937 100644 --- a/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path-segment.js +++ b/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path-segment.js @@ -88,10 +88,10 @@ class CodePathSegment { } }); - /* istanbul ignore if */ + /* c8 ignore start */ if (debug.enabled) { this.internal.nodes = []; - } + }/* c8 ignore stop */ } /** @@ -100,7 +100,7 @@ class CodePathSegment { * @returns {boolean} `true` if the segment is coming from the end of a loop. */ isLoopedPrevSegment(segment) { - return this.internal.loopedPrevSegments.indexOf(segment) !== -1; + return this.internal.loopedPrevSegments.includes(segment); } /** diff --git a/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path-state.js b/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path-state.js index 118f70a1707..d187297d32b 100644 --- a/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path-state.js +++ b/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path-state.js @@ -33,7 +33,7 @@ function addToReturnedOrThrown(dest, others, all, segments) { const segment = segments[i]; dest.push(segment); - if (others.indexOf(segment) === -1) { + if (!others.includes(segment)) { all.push(segment); } } @@ -59,7 +59,7 @@ function getContinueContext(state, label) { context = context.upper; } - /* istanbul ignore next: foolproof (syntax error) */ + /* c8 ignore next */ return null; } @@ -79,7 +79,7 @@ function getBreakContext(state, label) { context = context.upper; } - /* istanbul ignore next: foolproof (syntax error) */ + /* c8 ignore next */ return null; } @@ -433,7 +433,7 @@ class CodePathState { */ return context; - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error("unreachable"); } @@ -1030,7 +1030,7 @@ class CodePathState { }; break; - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error(`unknown type: "${type}"`); } @@ -1095,7 +1095,7 @@ class CodePathState { ); break; - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error("unreachable"); } @@ -1392,11 +1392,12 @@ class CodePathState { const context = getBreakContext(this, label); - /* istanbul ignore else: foolproof (syntax error) */ + if (context) { context.brokenForkContext.add(forkContext.head); } + /* c8 ignore next */ forkContext.replaceHead(forkContext.makeUnreachable(-1, -1)); } @@ -1417,7 +1418,6 @@ class CodePathState { const context = getContinueContext(this, label); - /* istanbul ignore else: foolproof (syntax error) */ if (context) { if (context.continueDestSegments) { makeLooped(this, forkContext.head, context.continueDestSegments); diff --git a/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path.js b/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path.js index 0e666277094..a028ca69481 100644 --- a/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path.js +++ b/tools/node_modules/eslint/lib/linter/code-path-analysis/code-path.js @@ -212,7 +212,7 @@ class CodePath { } // Reset the flag of skipping if all branches have been skipped. - if (skippedSegment && segment.prevSegments.indexOf(skippedSegment) !== -1) { + if (skippedSegment && segment.prevSegments.includes(skippedSegment)) { skippedSegment = null; } visited[segment.id] = true; diff --git a/tools/node_modules/eslint/lib/linter/code-path-analysis/debug-helpers.js b/tools/node_modules/eslint/lib/linter/code-path-analysis/debug-helpers.js index ca64862db32..e06b6cde5f1 100644 --- a/tools/node_modules/eslint/lib/linter/code-path-analysis/debug-helpers.js +++ b/tools/node_modules/eslint/lib/linter/code-path-analysis/debug-helpers.js @@ -20,7 +20,7 @@ const debug = require("debug")("eslint:code-path"); * @param {CodePathSegment} segment A segment to get. * @returns {string} Id of the segment. */ -/* istanbul ignore next */ +/* c8 ignore next */ function getId(segment) { // eslint-disable-line jsdoc/require-jsdoc -- Ignoring return segment.id + (segment.reachable ? "" : "!"); } @@ -67,7 +67,7 @@ module.exports = { * @param {boolean} leaving A flag whether or not it's leaving * @returns {void} */ - dumpState: !debug.enabled ? debug : /* istanbul ignore next */ function(node, state, leaving) { + dumpState: !debug.enabled ? debug : /* c8 ignore next */ function(node, state, leaving) { for (let i = 0; i < state.currentSegments.length; ++i) { const segInternal = state.currentSegments[i].internal; @@ -98,7 +98,7 @@ module.exports = { * @see http://www.graphviz.org * @see http://www.webgraphviz.com */ - dumpDot: !debug.enabled ? debug : /* istanbul ignore next */ function(codePath) { + dumpDot: !debug.enabled ? debug : /* c8 ignore next */ function(codePath) { let text = "\n" + "digraph {\n" + diff --git a/tools/node_modules/eslint/lib/linter/code-path-analysis/id-generator.js b/tools/node_modules/eslint/lib/linter/code-path-analysis/id-generator.js index 83787a4ea5a..b580104e1ac 100644 --- a/tools/node_modules/eslint/lib/linter/code-path-analysis/id-generator.js +++ b/tools/node_modules/eslint/lib/linter/code-path-analysis/id-generator.js @@ -33,10 +33,10 @@ class IdGenerator { next() { this.n = 1 + this.n | 0; - /* istanbul ignore if */ + /* c8 ignore start */ if (this.n < 0) { this.n = 1; - } + }/* c8 ignore stop */ return this.prefix + this.n; } diff --git a/tools/node_modules/eslint/lib/linter/config-comment-parser.js b/tools/node_modules/eslint/lib/linter/config-comment-parser.js index b88c5e6c850..643de8f2d31 100644 --- a/tools/node_modules/eslint/lib/linter/config-comment-parser.js +++ b/tools/node_modules/eslint/lib/linter/config-comment-parser.js @@ -131,8 +131,7 @@ module.exports = class ConfigCommentParser { const items = {}; - // Collapse whitespace around commas - string.replace(/\s*,\s*/gu, ",").split(/,+/u).forEach(name => { + string.split(",").forEach(name => { const trimmedName = name.trim(); if (trimmedName) { diff --git a/tools/node_modules/eslint/lib/linter/linter.js b/tools/node_modules/eslint/lib/linter/linter.js index 5304a612a59..16059623472 100644 --- a/tools/node_modules/eslint/lib/linter/linter.js +++ b/tools/node_modules/eslint/lib/linter/linter.js @@ -1101,7 +1101,7 @@ function runRules(sourceCode, configuredRules, ruleMapper, parserName, languageO ) ); - const ruleListeners = createRuleListeners(rule, ruleContext); + const ruleListeners = timing.enabled ? timing.time(ruleId, createRuleListeners)(rule, ruleContext) : createRuleListeners(rule, ruleContext); /** * Include `ruleId` in error logs @@ -1119,6 +1119,10 @@ function runRules(sourceCode, configuredRules, ruleMapper, parserName, languageO }; } + if (typeof ruleListeners === "undefined" || ruleListeners === null) { + throw new Error(`The create() function for rule '${ruleId}' did not return an object.`); + } + // add all the selectors from the rule as listeners Object.keys(ruleListeners).forEach(selector => { const ruleListener = timing.enabled @@ -1506,7 +1510,31 @@ class Linter { options.filterCodeBlock || (blockFilename => blockFilename.endsWith(".js")); const originalExtname = path.extname(filename); - const messageLists = preprocess(text, filenameToExpose).map((block, i) => { + + let blocks; + + try { + blocks = preprocess(text, filenameToExpose); + } catch (ex) { + + // If the message includes a leading line number, strip it: + const message = `Preprocessing error: ${ex.message.replace(/^line \d+:/iu, "").trim()}`; + + debug("%s\n%s", message, ex.stack); + + return [ + { + ruleId: null, + fatal: true, + severity: 2, + message, + line: ex.lineNumber, + column: ex.column + } + ]; + } + + const messageLists = blocks.map((block, i) => { debug("A code block was found: %o", block.filename || "(unnamed)"); // Keep the legacy behavior. @@ -1573,12 +1601,23 @@ class Linter { languageOptions.ecmaVersion ); - // add configured globals and language globals - const configuredGlobals = { - ...(getGlobalsForEcmaVersion(languageOptions.ecmaVersion)), - ...(languageOptions.sourceType === "commonjs" ? globals.commonjs : void 0), - ...languageOptions.globals - }; + /* + * add configured globals and language globals + * + * using Object.assign instead of object spread for performance reasons + * https://github.com/eslint/eslint/issues/16302 + */ + const configuredGlobals = Object.assign( + {}, + getGlobalsForEcmaVersion(languageOptions.ecmaVersion), + languageOptions.sourceType === "commonjs" ? globals.commonjs : void 0, + languageOptions.globals + ); + + // double check that there is a parser to avoid mysterious error messages + if (!languageOptions.parser) { + throw new TypeError(`No parser specified for ${options.filename}`); + } // Espree expects this information to be passed in if (isEspree(languageOptions.parser)) { @@ -1742,12 +1781,24 @@ class Linter { debug("With flat config: %s", options.filename); // we need a filename to match configs against - const filename = options.filename || ""; + const filename = options.filename || "__placeholder__.js"; // Store the config array in order to get plugin envs and rules later. internalSlotsMap.get(this).lastConfigArray = configArray; const config = configArray.getConfig(filename); + if (!config) { + return [ + { + ruleId: null, + severity: 1, + message: `No matching configuration found for ${filename}.`, + line: 0, + column: 0 + } + ]; + } + // Verify. if (config.processor) { debug("Apply the processor: %o", config.processor); @@ -1784,13 +1835,36 @@ class Linter { const physicalFilename = options.physicalFilename || filenameToExpose; const text = ensureText(textOrSourceCode); const preprocess = options.preprocess || (rawText => [rawText]); - const postprocess = options.postprocess || (messagesList => messagesList.flat()); const filterCodeBlock = options.filterCodeBlock || (blockFilename => blockFilename.endsWith(".js")); const originalExtname = path.extname(filename); - const messageLists = preprocess(text, filenameToExpose).map((block, i) => { + + let blocks; + + try { + blocks = preprocess(text, filenameToExpose); + } catch (ex) { + + // If the message includes a leading line number, strip it: + const message = `Preprocessing error: ${ex.message.replace(/^line \d+:/iu, "").trim()}`; + + debug("%s\n%s", message, ex.stack); + + return [ + { + ruleId: null, + fatal: true, + severity: 2, + message, + line: ex.lineNumber, + column: ex.column + } + ]; + } + + const messageLists = blocks.map((block, i) => { debug("A code block was found: %o", block.filename || "(unnamed)"); // Keep the legacy behavior. diff --git a/tools/node_modules/eslint/lib/linter/timing.js b/tools/node_modules/eslint/lib/linter/timing.js index c9ab01ec649..1076ff25887 100644 --- a/tools/node_modules/eslint/lib/linter/timing.js +++ b/tools/node_modules/eslint/lib/linter/timing.js @@ -9,7 +9,7 @@ // Helpers //------------------------------------------------------------------------------ -/* istanbul ignore next */ +/* c8 ignore next */ /** * Align the string to left * @param {string} str string to evaluate @@ -22,7 +22,7 @@ function alignLeft(str, len, ch) { return str + new Array(len - str.length + 1).join(ch || " "); } -/* istanbul ignore next */ +/* c8 ignore next */ /** * Align the string to right * @param {string} str string to evaluate @@ -64,7 +64,7 @@ function getListSize() { return TIMING_ENV_VAR_AS_INTEGER > 10 ? TIMING_ENV_VAR_AS_INTEGER : MINIMUM_SIZE; } -/* istanbul ignore next */ +/* c8 ignore next */ /** * display the data * @param {Object} data Data object to be displayed @@ -119,7 +119,7 @@ function display(data) { console.log(table.join("\n")); // eslint-disable-line no-console -- Debugging function } -/* istanbul ignore next */ +/* c8 ignore next */ module.exports = (function() { const data = Object.create(null); @@ -138,10 +138,11 @@ module.exports = (function() { return function(...args) { let t = process.hrtime(); + const result = fn(...args); - fn(...args); t = process.hrtime(t); data[key] += t[0] * 1e3 + t[1] / 1e6; + return result; }; } diff --git a/tools/node_modules/eslint/lib/options.js b/tools/node_modules/eslint/lib/options.js index 6d06e3ddce1..0d95f2a6354 100644 --- a/tools/node_modules/eslint/lib/options.js +++ b/tools/node_modules/eslint/lib/options.js @@ -63,261 +63,309 @@ const optionator = require("optionator"); //------------------------------------------------------------------------------ // exports "parse(args)", "generateHelp()", and "generateHelpForOption(optionName)" -module.exports = optionator({ - prepend: "eslint [options] file.js [file.js] [dir]", - defaults: { - concatRepeatedArrays: true, - mergeRepeatedObjects: true - }, - options: [ - { - heading: "Basic configuration" - }, - { + +/** + * Creates the CLI options for ESLint. + * @param {boolean} usingFlatConfig Indicates if flat config is being used. + * @returns {Object} The opinionator instance. + */ +module.exports = function(usingFlatConfig) { + + let lookupFlag; + + if (usingFlatConfig) { + lookupFlag = { + option: "config-lookup", + type: "Boolean", + default: "true", + description: "Disable look up for eslint.config.js" + }; + } else { + lookupFlag = { option: "eslintrc", type: "Boolean", default: "true", description: "Disable use of configuration from .eslintrc.*" - }, - { - option: "config", - alias: "c", - type: "path::String", - description: "Use this configuration, overriding .eslintrc.* config options if present" - }, - { + }; + } + + let envFlag; + + if (!usingFlatConfig) { + envFlag = { option: "env", type: "[String]", description: "Specify environments" - }, - { + }; + } + + let extFlag; + + if (!usingFlatConfig) { + extFlag = { option: "ext", type: "[String]", description: "Specify JavaScript file extensions" - }, - { - option: "global", - type: "[String]", - description: "Define global variables" - }, - { - option: "parser", - type: "String", - description: "Specify the parser to be used" - }, - { - option: "parser-options", - type: "Object", - description: "Specify parser options" - }, - { + }; + } + + let resolvePluginsFlag; + + if (!usingFlatConfig) { + resolvePluginsFlag = { option: "resolve-plugins-relative-to", type: "path::String", description: "A folder where plugins should be resolved from, CWD by default" - }, - { - heading: "Specifying rules and plugins" - }, - { - option: "plugin", - type: "[String]", - description: "Specify plugins" - }, - { - option: "rule", - type: "Object", - description: "Specify rules" - }, - { + }; + } + + let rulesDirFlag; + + if (!usingFlatConfig) { + rulesDirFlag = { option: "rulesdir", type: "[path::String]", description: "Load additional rules from this directory. Deprecated: Use rules from plugins" - }, - { - heading: "Fixing problems" - }, - { - option: "fix", - type: "Boolean", - default: false, - description: "Automatically fix problems" - }, - { - option: "fix-dry-run", - type: "Boolean", - default: false, - description: "Automatically fix problems without saving the changes to the file system" - }, - { - option: "fix-type", - type: "Array", - description: "Specify the types of fixes to apply (directive, problem, suggestion, layout)" - }, - { - heading: "Ignoring files" - }, - { - option: "ignore-path", - type: "path::String", - description: "Specify path of ignore file" - }, - { - option: "ignore", - type: "Boolean", - default: "true", - description: "Disable use of ignore files and patterns" - }, - { - option: "ignore-pattern", - type: "[String]", - description: "Pattern of files to ignore (in addition to those in .eslintignore)", - concatRepeatedArrays: [true, { - oneValuePerFlag: true - }] - }, - { - heading: "Using stdin" - }, - { - option: "stdin", - type: "Boolean", - default: "false", - description: "Lint code provided on " - }, - { - option: "stdin-filename", - type: "String", - description: "Specify filename to process STDIN as" - }, - { - heading: "Handling warnings" - }, - { - option: "quiet", - type: "Boolean", - default: "false", - description: "Report errors only" - }, - { - option: "max-warnings", - type: "Int", - default: "-1", - description: "Number of warnings to trigger nonzero exit code" - }, - { - heading: "Output" - }, - { - option: "output-file", - alias: "o", - type: "path::String", - description: "Specify file to write report to" - }, - { - option: "format", - alias: "f", - type: "String", - default: "stylish", - description: "Use a specific output format" - }, - { - option: "color", - type: "Boolean", - alias: "no-color", - description: "Force enabling/disabling of color" - }, - { - heading: "Inline configuration comments" - }, - { - option: "inline-config", - type: "Boolean", - default: "true", - description: "Prevent comments from changing config or rules" - }, - { - option: "report-unused-disable-directives", - type: "Boolean", - default: void 0, - description: "Adds reported errors for unused eslint-disable directives" - }, - { - heading: "Caching" - }, - { - option: "cache", - type: "Boolean", - default: "false", - description: "Only check changed files" - }, - { - option: "cache-file", - type: "path::String", - default: ".eslintcache", - description: "Path to the cache file. Deprecated: use --cache-location" - }, - { - option: "cache-location", - type: "path::String", - description: "Path to the cache file or directory" - }, - { - option: "cache-strategy", - dependsOn: ["cache"], - type: "String", - default: "metadata", - enum: ["metadata", "content"], - description: "Strategy to use for detecting changed files in the cache" - }, - { - heading: "Miscellaneous" - }, - { - option: "init", - type: "Boolean", - default: "false", - description: "Run config initialization wizard" - }, - { - option: "env-info", - type: "Boolean", - default: "false", - description: "Output execution environment information" - }, - { - option: "error-on-unmatched-pattern", - type: "Boolean", - default: "true", - description: "Prevent errors when pattern is unmatched" - }, - { - option: "exit-on-fatal-error", - type: "Boolean", - default: "false", - description: "Exit with exit code 2 in case of fatal error" - }, - { - option: "debug", - type: "Boolean", - default: false, - description: "Output debugging information" - }, - { - option: "help", - alias: "h", - type: "Boolean", - description: "Show help" - }, - { - option: "version", - alias: "v", - type: "Boolean", - description: "Output the version number" - }, - { - option: "print-config", - type: "path::String", - description: "Print the configuration for the given file" - } - ] -}); + }; + } + + return optionator({ + prepend: "eslint [options] file.js [file.js] [dir]", + defaults: { + concatRepeatedArrays: true, + mergeRepeatedObjects: true + }, + options: [ + { + heading: "Basic configuration" + }, + lookupFlag, + { + option: "config", + alias: "c", + type: "path::String", + description: usingFlatConfig + ? "Use this configuration instead of eslint.config.js" + : "Use this configuration, overriding .eslintrc.* config options if present" + }, + envFlag, + extFlag, + { + option: "global", + type: "[String]", + description: "Define global variables" + }, + { + option: "parser", + type: "String", + description: "Specify the parser to be used" + }, + { + option: "parser-options", + type: "Object", + description: "Specify parser options" + }, + resolvePluginsFlag, + { + heading: "Specifying rules and plugins" + }, + { + option: "plugin", + type: "[String]", + description: "Specify plugins" + }, + { + option: "rule", + type: "Object", + description: "Specify rules" + }, + rulesDirFlag, + { + heading: "Fixing problems" + }, + { + option: "fix", + type: "Boolean", + default: false, + description: "Automatically fix problems" + }, + { + option: "fix-dry-run", + type: "Boolean", + default: false, + description: "Automatically fix problems without saving the changes to the file system" + }, + { + option: "fix-type", + type: "Array", + description: "Specify the types of fixes to apply (directive, problem, suggestion, layout)" + }, + { + heading: "Ignoring files" + }, + { + option: "ignore-path", + type: "path::String", + description: "Specify path of ignore file" + }, + { + option: "ignore", + type: "Boolean", + default: "true", + description: "Disable use of ignore files and patterns" + }, + { + option: "ignore-pattern", + type: "[String]", + description: "Pattern of files to ignore (in addition to those in .eslintignore)", + concatRepeatedArrays: [true, { + oneValuePerFlag: true + }] + }, + { + heading: "Using stdin" + }, + { + option: "stdin", + type: "Boolean", + default: "false", + description: "Lint code provided on " + }, + { + option: "stdin-filename", + type: "String", + description: "Specify filename to process STDIN as" + }, + { + heading: "Handling warnings" + }, + { + option: "quiet", + type: "Boolean", + default: "false", + description: "Report errors only" + }, + { + option: "max-warnings", + type: "Int", + default: "-1", + description: "Number of warnings to trigger nonzero exit code" + }, + { + heading: "Output" + }, + { + option: "output-file", + alias: "o", + type: "path::String", + description: "Specify file to write report to" + }, + { + option: "format", + alias: "f", + type: "String", + default: "stylish", + description: "Use a specific output format" + }, + { + option: "color", + type: "Boolean", + alias: "no-color", + description: "Force enabling/disabling of color" + }, + { + heading: "Inline configuration comments" + }, + { + option: "inline-config", + type: "Boolean", + default: "true", + description: "Prevent comments from changing config or rules" + }, + { + option: "report-unused-disable-directives", + type: "Boolean", + default: void 0, + description: "Adds reported errors for unused eslint-disable directives" + }, + { + heading: "Caching" + }, + { + option: "cache", + type: "Boolean", + default: "false", + description: "Only check changed files" + }, + { + option: "cache-file", + type: "path::String", + default: ".eslintcache", + description: "Path to the cache file. Deprecated: use --cache-location" + }, + { + option: "cache-location", + type: "path::String", + description: "Path to the cache file or directory" + }, + { + option: "cache-strategy", + dependsOn: ["cache"], + type: "String", + default: "metadata", + enum: ["metadata", "content"], + description: "Strategy to use for detecting changed files in the cache" + }, + { + heading: "Miscellaneous" + }, + { + option: "init", + type: "Boolean", + default: "false", + description: "Run config initialization wizard" + }, + { + option: "env-info", + type: "Boolean", + default: "false", + description: "Output execution environment information" + }, + { + option: "error-on-unmatched-pattern", + type: "Boolean", + default: "true", + description: "Prevent errors when pattern is unmatched" + }, + { + option: "exit-on-fatal-error", + type: "Boolean", + default: "false", + description: "Exit with exit code 2 in case of fatal error" + }, + { + option: "debug", + type: "Boolean", + default: false, + description: "Output debugging information" + }, + { + option: "help", + alias: "h", + type: "Boolean", + description: "Show help" + }, + { + option: "version", + alias: "v", + type: "Boolean", + description: "Output the version number" + }, + { + option: "print-config", + type: "path::String", + description: "Print the configuration for the given file" + } + ].filter(value => !!value) + }); +}; diff --git a/tools/node_modules/eslint/lib/rule-tester/flat-rule-tester.js b/tools/node_modules/eslint/lib/rule-tester/flat-rule-tester.js index b829484149a..f915924c78b 100644 --- a/tools/node_modules/eslint/lib/rule-tester/flat-rule-tester.js +++ b/tools/node_modules/eslint/lib/rule-tester/flat-rule-tester.js @@ -4,7 +4,7 @@ */ "use strict"; -/* eslint-env mocha -- Mocha/Jest wrapper */ +/* globals describe, it -- Mocha globals */ //------------------------------------------------------------------------------ // Requirements @@ -480,51 +480,54 @@ class FlatRuleTester { ].concat(scenarioErrors).join("\n")); } - const baseConfig = { - plugins: { + const baseConfig = [ + { + plugins: { - // copy root plugin over - "@": { + // copy root plugin over + "@": { - /* - * Parsers are wrapped to detect more errors, so this needs - * to be a new object for each call to run(), otherwise the - * parsers will be wrapped multiple times. - */ - parsers: { - ...defaultConfig[0].plugins["@"].parsers - }, + /* + * Parsers are wrapped to detect more errors, so this needs + * to be a new object for each call to run(), otherwise the + * parsers will be wrapped multiple times. + */ + parsers: { + ...defaultConfig[0].plugins["@"].parsers + }, - /* - * The rules key on the default plugin is a proxy to lazy-load - * just the rules that are needed. So, don't create a new object - * here, just use the default one to keep that performance - * enhancement. - */ - rules: defaultConfig[0].plugins["@"].rules - }, - "rule-to-test": { - rules: { - [ruleName]: Object.assign({}, rule, { + /* + * The rules key on the default plugin is a proxy to lazy-load + * just the rules that are needed. So, don't create a new object + * here, just use the default one to keep that performance + * enhancement. + */ + rules: defaultConfig[0].plugins["@"].rules + }, + "rule-to-test": { + rules: { + [ruleName]: Object.assign({}, rule, { - // Create a wrapper rule that freezes the `context` properties. - create(context) { - freezeDeeply(context.options); - freezeDeeply(context.settings); - freezeDeeply(context.parserOptions); + // Create a wrapper rule that freezes the `context` properties. + create(context) { + freezeDeeply(context.options); + freezeDeeply(context.settings); + freezeDeeply(context.parserOptions); - // freezeDeeply(context.languageOptions); + // freezeDeeply(context.languageOptions); - return (typeof rule === "function" ? rule : rule.create)(context); - } - }) + return (typeof rule === "function" ? rule : rule.create)(context); + } + }) + } } + }, + languageOptions: { + ...defaultConfig[0].languageOptions } }, - languageOptions: { - ...defaultConfig[0].languageOptions - } - }; + ...defaultConfig.slice(1) + ]; /** * Run the rule for the given item diff --git a/tools/node_modules/eslint/lib/rule-tester/rule-tester.js b/tools/node_modules/eslint/lib/rule-tester/rule-tester.js index 398f210135b..2af272bd25b 100644 --- a/tools/node_modules/eslint/lib/rule-tester/rule-tester.js +++ b/tools/node_modules/eslint/lib/rule-tester/rule-tester.js @@ -4,7 +4,7 @@ */ "use strict"; -/* eslint-env mocha -- Mocha wrapper */ +/* globals describe, it -- Mocha globals */ /* * This is a wrapper around mocha to allow for DRY unittests for eslint @@ -305,6 +305,36 @@ function getCommentsDeprecation() { ); } +/** + * Emit a deprecation warning if function-style format is being used. + * @param {string} ruleName Name of the rule. + * @returns {void} + */ +function emitLegacyRuleAPIWarning(ruleName) { + if (!emitLegacyRuleAPIWarning[`warned-${ruleName}`]) { + emitLegacyRuleAPIWarning[`warned-${ruleName}`] = true; + process.emitWarning( + `"${ruleName}" rule is using the deprecated function-style format and will stop working in ESLint v9. Please use object-style format: https://eslint.org/docs/developer-guide/working-with-rules`, + "DeprecationWarning" + ); + } +} + +/** + * Emit a deprecation warning if rule has options but is missing the "meta.schema" property + * @param {string} ruleName Name of the rule. + * @returns {void} + */ +function emitMissingSchemaWarning(ruleName) { + if (!emitMissingSchemaWarning[`warned-${ruleName}`]) { + emitMissingSchemaWarning[`warned-${ruleName}`] = true; + process.emitWarning( + `"${ruleName}" rule has options but is missing the "meta.schema" property and will stop working in ESLint v9. Please add a schema: https://eslint.org/docs/developer-guide/working-with-rules#options-schemas`, + "DeprecationWarning" + ); + } +} + //------------------------------------------------------------------------------ // Public Interface //------------------------------------------------------------------------------ @@ -521,6 +551,9 @@ class RuleTester { ].concat(scenarioErrors).join("\n")); } + if (typeof rule === "function") { + emitLegacyRuleAPIWarning(ruleName); + } linter.defineRule(ruleName, Object.assign({}, rule, { @@ -578,6 +611,15 @@ class RuleTester { if (hasOwnProperty(item, "options")) { assert(Array.isArray(item.options), "options must be an array"); + if ( + item.options.length > 0 && + typeof rule === "object" && + ( + !rule.meta || (rule.meta && (typeof rule.meta.schema === "undefined" || rule.meta.schema === null)) + ) + ) { + emitMissingSchemaWarning(ruleName); + } config.rules[ruleName] = [1].concat(item.options); } else { config.rules[ruleName] = 1; diff --git a/tools/node_modules/eslint/lib/rules/accessor-pairs.js b/tools/node_modules/eslint/lib/rules/accessor-pairs.js index 2fcf1535290..112d0ddb8c1 100644 --- a/tools/node_modules/eslint/lib/rules/accessor-pairs.js +++ b/tools/node_modules/eslint/lib/rules/accessor-pairs.js @@ -140,7 +140,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce getter and setter pairs in objects and classes", + description: "Enforce getter and setter pairs in objects and classes", recommended: false, url: "https://eslint.org/docs/rules/accessor-pairs" }, @@ -299,12 +299,12 @@ module.exports = { * @private */ function checkPropertyDescriptor(node) { - const namesToCheck = node.properties + const namesToCheck = new Set(node.properties .filter(p => p.type === "Property" && p.kind === "init" && !p.computed) - .map(({ key }) => key.name); + .map(({ key }) => key.name)); - const hasGetter = namesToCheck.includes("get"); - const hasSetter = namesToCheck.includes("set"); + const hasGetter = namesToCheck.has("get"); + const hasSetter = namesToCheck.has("set"); if (checkSetWithoutGet && hasSetter && !hasGetter) { report(node, "missingGetter"); diff --git a/tools/node_modules/eslint/lib/rules/array-bracket-newline.js b/tools/node_modules/eslint/lib/rules/array-bracket-newline.js index 0beb138c4e2..deeae818fb5 100644 --- a/tools/node_modules/eslint/lib/rules/array-bracket-newline.js +++ b/tools/node_modules/eslint/lib/rules/array-bracket-newline.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce linebreaks after opening and before closing array brackets", + description: "Enforce linebreaks after opening and before closing array brackets", recommended: false, url: "https://eslint.org/docs/rules/array-bracket-newline" }, diff --git a/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js b/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js index e4912ec17a1..5e7cea9ba58 100644 --- a/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js +++ b/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing inside array brackets", + description: "Enforce consistent spacing inside array brackets", recommended: false, url: "https://eslint.org/docs/rules/array-bracket-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/array-callback-return.js b/tools/node_modules/eslint/lib/rules/array-callback-return.js index fba414c1ef4..bac25b1112c 100644 --- a/tools/node_modules/eslint/lib/rules/array-callback-return.js +++ b/tools/node_modules/eslint/lib/rules/array-callback-return.js @@ -16,7 +16,7 @@ const astUtils = require("./utils/ast-utils"); //------------------------------------------------------------------------------ const TARGET_NODE_TYPE = /^(?:Arrow)?FunctionExpression$/u; -const TARGET_METHODS = /^(?:every|filter|find(?:Index)?|flatMap|forEach|map|reduce(?:Right)?|some|sort)$/u; +const TARGET_METHODS = /^(?:every|filter|find(?:Last)?(?:Index)?|flatMap|forEach|map|reduce(?:Right)?|some|sort)$/u; /** * Checks a given code path segment is reachable. @@ -125,7 +125,7 @@ function getArrayMethodName(node) { } } - /* istanbul ignore next: unreachable */ + /* c8 ignore next */ return null; } @@ -139,7 +139,7 @@ module.exports = { type: "problem", docs: { - description: "enforce `return` statements in callbacks of array methods", + description: "Enforce `return` statements in callbacks of array methods", recommended: false, url: "https://eslint.org/docs/rules/array-callback-return" }, diff --git a/tools/node_modules/eslint/lib/rules/array-element-newline.js b/tools/node_modules/eslint/lib/rules/array-element-newline.js index 77f5fc9e9ce..c762755bd83 100644 --- a/tools/node_modules/eslint/lib/rules/array-element-newline.js +++ b/tools/node_modules/eslint/lib/rules/array-element-newline.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce line breaks after each array element", + description: "Enforce line breaks after each array element", recommended: false, url: "https://eslint.org/docs/rules/array-element-newline" }, diff --git a/tools/node_modules/eslint/lib/rules/arrow-body-style.js b/tools/node_modules/eslint/lib/rules/arrow-body-style.js index 7a141b0d788..8bb9e8c4ffa 100644 --- a/tools/node_modules/eslint/lib/rules/arrow-body-style.js +++ b/tools/node_modules/eslint/lib/rules/arrow-body-style.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "require braces around arrow function bodies", + description: "Require braces around arrow function bodies", recommended: false, url: "https://eslint.org/docs/rules/arrow-body-style" }, diff --git a/tools/node_modules/eslint/lib/rules/arrow-parens.js b/tools/node_modules/eslint/lib/rules/arrow-parens.js index 779ab6fe9c9..05012fc37b7 100644 --- a/tools/node_modules/eslint/lib/rules/arrow-parens.js +++ b/tools/node_modules/eslint/lib/rules/arrow-parens.js @@ -33,7 +33,7 @@ module.exports = { type: "layout", docs: { - description: "require parentheses around arrow function arguments", + description: "Require parentheses around arrow function arguments", recommended: false, url: "https://eslint.org/docs/rules/arrow-parens" }, diff --git a/tools/node_modules/eslint/lib/rules/arrow-spacing.js b/tools/node_modules/eslint/lib/rules/arrow-spacing.js index 9fdcdd58ba7..2dcc175da06 100644 --- a/tools/node_modules/eslint/lib/rules/arrow-spacing.js +++ b/tools/node_modules/eslint/lib/rules/arrow-spacing.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before and after the arrow in arrow functions", + description: "Enforce consistent spacing before and after the arrow in arrow functions", recommended: false, url: "https://eslint.org/docs/rules/arrow-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/block-scoped-var.js b/tools/node_modules/eslint/lib/rules/block-scoped-var.js index 3a277863ef2..731d06d0f3b 100644 --- a/tools/node_modules/eslint/lib/rules/block-scoped-var.js +++ b/tools/node_modules/eslint/lib/rules/block-scoped-var.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce the use of variables within the scope they are defined", + description: "Enforce the use of variables within the scope they are defined", recommended: false, url: "https://eslint.org/docs/rules/block-scoped-var" }, diff --git a/tools/node_modules/eslint/lib/rules/block-spacing.js b/tools/node_modules/eslint/lib/rules/block-spacing.js index 53303a9b004..9fbf1594c47 100644 --- a/tools/node_modules/eslint/lib/rules/block-spacing.js +++ b/tools/node_modules/eslint/lib/rules/block-spacing.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "disallow or enforce spaces inside of blocks after opening block and before closing block", + description: "Disallow or enforce spaces inside of blocks after opening block and before closing block", recommended: false, url: "https://eslint.org/docs/rules/block-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/brace-style.js b/tools/node_modules/eslint/lib/rules/brace-style.js index f4adb9490eb..52d89201b9e 100644 --- a/tools/node_modules/eslint/lib/rules/brace-style.js +++ b/tools/node_modules/eslint/lib/rules/brace-style.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent brace style for blocks", + description: "Enforce consistent brace style for blocks", recommended: false, url: "https://eslint.org/docs/rules/brace-style" }, diff --git a/tools/node_modules/eslint/lib/rules/callback-return.js b/tools/node_modules/eslint/lib/rules/callback-return.js index 532faee4518..fe5b649b582 100644 --- a/tools/node_modules/eslint/lib/rules/callback-return.js +++ b/tools/node_modules/eslint/lib/rules/callback-return.js @@ -19,7 +19,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `return` statements after callbacks", + description: "Require `return` statements after callbacks", recommended: false, url: "https://eslint.org/docs/rules/callback-return" }, @@ -53,7 +53,7 @@ module.exports = { if (!node.parent) { return null; } - if (types.indexOf(node.parent.type) === -1) { + if (!types.includes(node.parent.type)) { return findClosestParentOfType(node.parent, types); } return node.parent; @@ -87,7 +87,7 @@ module.exports = { * @returns {boolean} Whether or not this function matches our callback name. */ function isCallback(node) { - return containsOnlyIdentifiers(node.callee) && callbacks.indexOf(sourceCode.getText(node.callee)) > -1; + return containsOnlyIdentifiers(node.callee) && callbacks.includes(sourceCode.getText(node.callee)); } /** diff --git a/tools/node_modules/eslint/lib/rules/camelcase.js b/tools/node_modules/eslint/lib/rules/camelcase.js index e4761466902..ee1b6bf598d 100644 --- a/tools/node_modules/eslint/lib/rules/camelcase.js +++ b/tools/node_modules/eslint/lib/rules/camelcase.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce camelcase naming convention", + description: "Enforce camelcase naming convention", recommended: false, url: "https://eslint.org/docs/rules/camelcase" }, diff --git a/tools/node_modules/eslint/lib/rules/capitalized-comments.js b/tools/node_modules/eslint/lib/rules/capitalized-comments.js index 6ea87a70a81..ba798d42858 100644 --- a/tools/node_modules/eslint/lib/rules/capitalized-comments.js +++ b/tools/node_modules/eslint/lib/rules/capitalized-comments.js @@ -105,7 +105,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce or disallow capitalization of the first letter of a comment", + description: "Enforce or disallow capitalization of the first letter of a comment", recommended: false, url: "https://eslint.org/docs/rules/capitalized-comments" }, @@ -185,7 +185,7 @@ module.exports = { return Boolean( previousTokenOrComment && - ["Block", "Line"].indexOf(previousTokenOrComment.type) !== -1 + ["Block", "Line"].includes(previousTokenOrComment.type) ); } diff --git a/tools/node_modules/eslint/lib/rules/class-methods-use-this.js b/tools/node_modules/eslint/lib/rules/class-methods-use-this.js index 1af6084ed8b..05a915867c3 100644 --- a/tools/node_modules/eslint/lib/rules/class-methods-use-this.js +++ b/tools/node_modules/eslint/lib/rules/class-methods-use-this.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce that class methods utilize `this`", + description: "Enforce that class methods utilize `this`", recommended: false, url: "https://eslint.org/docs/rules/class-methods-use-this" }, diff --git a/tools/node_modules/eslint/lib/rules/comma-dangle.js b/tools/node_modules/eslint/lib/rules/comma-dangle.js index 063e1cb697f..9518da90e9e 100644 --- a/tools/node_modules/eslint/lib/rules/comma-dangle.js +++ b/tools/node_modules/eslint/lib/rules/comma-dangle.js @@ -76,7 +76,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow trailing commas", + description: "Require or disallow trailing commas", recommended: false, url: "https://eslint.org/docs/rules/comma-dangle" }, diff --git a/tools/node_modules/eslint/lib/rules/comma-spacing.js b/tools/node_modules/eslint/lib/rules/comma-spacing.js index 23a51752814..76d5dc46b9c 100644 --- a/tools/node_modules/eslint/lib/rules/comma-spacing.js +++ b/tools/node_modules/eslint/lib/rules/comma-spacing.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before and after commas", + description: "Enforce consistent spacing before and after commas", recommended: false, url: "https://eslint.org/docs/rules/comma-spacing" }, @@ -103,38 +103,6 @@ module.exports = { }); } - /** - * Validates the spacing around a comma token. - * @param {Object} tokens The tokens to be validated. - * @param {Token} tokens.comma The token representing the comma. - * @param {Token} [tokens.left] The last token before the comma. - * @param {Token} [tokens.right] The first token after the comma. - * @param {Token|ASTNode} reportItem The item to use when reporting an error. - * @returns {void} - * @private - */ - function validateCommaItemSpacing(tokens, reportItem) { - if (tokens.left && astUtils.isTokenOnSameLine(tokens.left, tokens.comma) && - (options.before !== sourceCode.isSpaceBetweenTokens(tokens.left, tokens.comma)) - ) { - report(reportItem, "before", tokens.left); - } - - if (tokens.right && astUtils.isClosingParenToken(tokens.right)) { - return; - } - - if (tokens.right && !options.after && tokens.right.type === "Line") { - return; - } - - if (tokens.right && astUtils.isTokenOnSameLine(tokens.comma, tokens.right) && - (options.after !== sourceCode.isSpaceBetweenTokens(tokens.comma, tokens.right)) - ) { - report(reportItem, "after", tokens.right); - } - } - /** * Adds null elements of the given ArrayExpression or ArrayPattern node to the ignore list. * @param {ASTNode} node An ArrayExpression or ArrayPattern node. @@ -172,18 +140,44 @@ module.exports = { return; } - if (token && token.type === "JSXText") { - return; - } - const previousToken = tokensAndComments[i - 1]; const nextToken = tokensAndComments[i + 1]; - validateCommaItemSpacing({ - comma: token, - left: astUtils.isCommaToken(previousToken) || commaTokensToIgnore.includes(token) ? null : previousToken, - right: astUtils.isCommaToken(nextToken) ? null : nextToken - }, token); + if ( + previousToken && + !astUtils.isCommaToken(previousToken) && // ignore spacing between two commas + + /* + * `commaTokensToIgnore` are ending commas of `null` elements (array holes/elisions). + * In addition to spacing between two commas, this can also ignore: + * + * - Spacing after `[` (controlled by array-bracket-spacing) + * Example: [ , ] + * ^ + * - Spacing after a comment (for backwards compatibility, this was possibly unintentional) + * Example: [a, /* * / ,] + * ^ + */ + !commaTokensToIgnore.includes(token) && + + astUtils.isTokenOnSameLine(previousToken, token) && + options.before !== sourceCode.isSpaceBetweenTokens(previousToken, token) + ) { + report(token, "before", previousToken); + } + + if ( + nextToken && + !astUtils.isCommaToken(nextToken) && // ignore spacing between two commas + !astUtils.isClosingParenToken(nextToken) && // controlled by space-in-parens + !astUtils.isClosingBracketToken(nextToken) && // controlled by array-bracket-spacing + !astUtils.isClosingBraceToken(nextToken) && // controlled by object-curly-spacing + !(!options.after && nextToken.type === "Line") && // special case, allow space before line comment + astUtils.isTokenOnSameLine(token, nextToken) && + options.after !== sourceCode.isSpaceBetweenTokens(token, nextToken) + ) { + report(token, "after", nextToken); + } }); }, ArrayExpression: addNullElementsToIgnoreList, diff --git a/tools/node_modules/eslint/lib/rules/comma-style.js b/tools/node_modules/eslint/lib/rules/comma-style.js index cbcbe3ae15b..4969f59d7ef 100644 --- a/tools/node_modules/eslint/lib/rules/comma-style.js +++ b/tools/node_modules/eslint/lib/rules/comma-style.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent comma style", + description: "Enforce consistent comma style", recommended: false, url: "https://eslint.org/docs/rules/comma-style" }, diff --git a/tools/node_modules/eslint/lib/rules/complexity.js b/tools/node_modules/eslint/lib/rules/complexity.js index b2355556af9..541d3a9bb9a 100644 --- a/tools/node_modules/eslint/lib/rules/complexity.js +++ b/tools/node_modules/eslint/lib/rules/complexity.js @@ -23,7 +23,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum cyclomatic complexity allowed in a program", + description: "Enforce a maximum cyclomatic complexity allowed in a program", recommended: false, url: "https://eslint.org/docs/rules/complexity" }, diff --git a/tools/node_modules/eslint/lib/rules/computed-property-spacing.js b/tools/node_modules/eslint/lib/rules/computed-property-spacing.js index 4850a8b651f..3d033fc00bd 100644 --- a/tools/node_modules/eslint/lib/rules/computed-property-spacing.js +++ b/tools/node_modules/eslint/lib/rules/computed-property-spacing.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing inside computed property brackets", + description: "Enforce consistent spacing inside computed property brackets", recommended: false, url: "https://eslint.org/docs/rules/computed-property-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/consistent-return.js b/tools/node_modules/eslint/lib/rules/consistent-return.js index fffb4357b65..f0072974d11 100644 --- a/tools/node_modules/eslint/lib/rules/consistent-return.js +++ b/tools/node_modules/eslint/lib/rules/consistent-return.js @@ -46,7 +46,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `return` statements to either always or never specify values", + description: "Require `return` statements to either always or never specify values", recommended: false, url: "https://eslint.org/docs/rules/consistent-return" }, diff --git a/tools/node_modules/eslint/lib/rules/consistent-this.js b/tools/node_modules/eslint/lib/rules/consistent-this.js index a613f992d7a..947873b8e4a 100644 --- a/tools/node_modules/eslint/lib/rules/consistent-this.js +++ b/tools/node_modules/eslint/lib/rules/consistent-this.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce consistent naming when capturing the current execution context", + description: "Enforce consistent naming when capturing the current execution context", recommended: false, url: "https://eslint.org/docs/rules/consistent-this" }, @@ -65,7 +65,7 @@ module.exports = { function checkAssignment(node, name, value) { const isThis = value.type === "ThisExpression"; - if (aliases.indexOf(name) !== -1) { + if (aliases.includes(name)) { if (!isThis || node.operator && node.operator !== "=") { reportBadAssignment(node, name); } diff --git a/tools/node_modules/eslint/lib/rules/constructor-super.js b/tools/node_modules/eslint/lib/rules/constructor-super.js index defdb91d69d..fff658471b0 100644 --- a/tools/node_modules/eslint/lib/rules/constructor-super.js +++ b/tools/node_modules/eslint/lib/rules/constructor-super.js @@ -122,7 +122,7 @@ module.exports = { type: "problem", docs: { - description: "require `super()` calls in constructors", + description: "Require `super()` calls in constructors", recommended: true, url: "https://eslint.org/docs/rules/constructor-super" }, diff --git a/tools/node_modules/eslint/lib/rules/curly.js b/tools/node_modules/eslint/lib/rules/curly.js index 29e73953da6..7b5d140fe66 100644 --- a/tools/node_modules/eslint/lib/rules/curly.js +++ b/tools/node_modules/eslint/lib/rules/curly.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce consistent brace style for all control statements", + description: "Enforce consistent brace style for all control statements", recommended: false, url: "https://eslint.org/docs/rules/curly" }, diff --git a/tools/node_modules/eslint/lib/rules/default-case-last.js b/tools/node_modules/eslint/lib/rules/default-case-last.js index 34be2894e41..313a0d8c904 100644 --- a/tools/node_modules/eslint/lib/rules/default-case-last.js +++ b/tools/node_modules/eslint/lib/rules/default-case-last.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce default clauses in switch statements to be last", + description: "Enforce default clauses in switch statements to be last", recommended: false, url: "https://eslint.org/docs/rules/default-case-last" }, diff --git a/tools/node_modules/eslint/lib/rules/default-case.js b/tools/node_modules/eslint/lib/rules/default-case.js index 6ce238529d0..f28de1af906 100644 --- a/tools/node_modules/eslint/lib/rules/default-case.js +++ b/tools/node_modules/eslint/lib/rules/default-case.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `default` cases in `switch` statements", + description: "Require `default` cases in `switch` statements", recommended: false, url: "https://eslint.org/docs/rules/default-case" }, diff --git a/tools/node_modules/eslint/lib/rules/default-param-last.js b/tools/node_modules/eslint/lib/rules/default-param-last.js index ea12a2a558a..61df5f6d2eb 100644 --- a/tools/node_modules/eslint/lib/rules/default-param-last.js +++ b/tools/node_modules/eslint/lib/rules/default-param-last.js @@ -11,7 +11,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce default parameters to be last", + description: "Enforce default parameters to be last", recommended: false, url: "https://eslint.org/docs/rules/default-param-last" }, diff --git a/tools/node_modules/eslint/lib/rules/dot-location.js b/tools/node_modules/eslint/lib/rules/dot-location.js index 9dea4f25cf7..36b50b284cf 100644 --- a/tools/node_modules/eslint/lib/rules/dot-location.js +++ b/tools/node_modules/eslint/lib/rules/dot-location.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent newlines before and after dots", + description: "Enforce consistent newlines before and after dots", recommended: false, url: "https://eslint.org/docs/rules/dot-location" }, diff --git a/tools/node_modules/eslint/lib/rules/dot-notation.js b/tools/node_modules/eslint/lib/rules/dot-notation.js index 6f6b5166f76..5f6e818cb49 100644 --- a/tools/node_modules/eslint/lib/rules/dot-notation.js +++ b/tools/node_modules/eslint/lib/rules/dot-notation.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce dot notation whenever possible", + description: "Enforce dot notation whenever possible", recommended: false, url: "https://eslint.org/docs/rules/dot-notation" }, @@ -76,7 +76,7 @@ module.exports = { function checkComputedProperty(node, value) { if ( validIdentifier.test(value) && - (allowKeywords || keywords.indexOf(String(value)) === -1) && + (allowKeywords || !keywords.includes(String(value))) && !(allowPattern && allowPattern.test(value)) ) { const formattedValue = node.property.type === "Literal" ? JSON.stringify(value) : `\`${value}\``; @@ -142,7 +142,7 @@ module.exports = { !allowKeywords && !node.computed && node.property.type === "Identifier" && - keywords.indexOf(String(node.property.name)) !== -1 + keywords.includes(String(node.property.name)) ) { context.report({ node: node.property, diff --git a/tools/node_modules/eslint/lib/rules/eol-last.js b/tools/node_modules/eslint/lib/rules/eol-last.js index 393b934125e..fb87971fc73 100644 --- a/tools/node_modules/eslint/lib/rules/eol-last.js +++ b/tools/node_modules/eslint/lib/rules/eol-last.js @@ -14,7 +14,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow newline at the end of files", + description: "Require or disallow newline at the end of files", recommended: false, url: "https://eslint.org/docs/rules/eol-last" }, diff --git a/tools/node_modules/eslint/lib/rules/eqeqeq.js b/tools/node_modules/eslint/lib/rules/eqeqeq.js index b5d784dad6e..b3990e214d0 100644 --- a/tools/node_modules/eslint/lib/rules/eqeqeq.js +++ b/tools/node_modules/eslint/lib/rules/eqeqeq.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "require the use of `===` and `!==`", + description: "Require the use of `===` and `!==`", recommended: false, url: "https://eslint.org/docs/rules/eqeqeq" }, diff --git a/tools/node_modules/eslint/lib/rules/for-direction.js b/tools/node_modules/eslint/lib/rules/for-direction.js index d3d825a5766..7df3d7e4802 100644 --- a/tools/node_modules/eslint/lib/rules/for-direction.js +++ b/tools/node_modules/eslint/lib/rules/for-direction.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "enforce \"for\" loop update clause moving the counter in the right direction.", + description: "Enforce \"for\" loop update clause moving the counter in the right direction.", recommended: true, url: "https://eslint.org/docs/rules/for-direction" }, diff --git a/tools/node_modules/eslint/lib/rules/func-call-spacing.js b/tools/node_modules/eslint/lib/rules/func-call-spacing.js index 0391d99c763..fec6763a2cd 100644 --- a/tools/node_modules/eslint/lib/rules/func-call-spacing.js +++ b/tools/node_modules/eslint/lib/rules/func-call-spacing.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow spacing between function identifiers and their invocations", + description: "Require or disallow spacing between function identifiers and their invocations", recommended: false, url: "https://eslint.org/docs/rules/func-call-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/func-name-matching.js b/tools/node_modules/eslint/lib/rules/func-name-matching.js index 9cee5fe019a..391b2a27836 100644 --- a/tools/node_modules/eslint/lib/rules/func-name-matching.js +++ b/tools/node_modules/eslint/lib/rules/func-name-matching.js @@ -74,7 +74,7 @@ module.exports = { type: "suggestion", docs: { - description: "require function names to match the name of the variable or property to which they are assigned", + description: "Require function names to match the name of the variable or property to which they are assigned", recommended: false, url: "https://eslint.org/docs/rules/func-name-matching" }, diff --git a/tools/node_modules/eslint/lib/rules/func-names.js b/tools/node_modules/eslint/lib/rules/func-names.js index c7b2072e177..ee4664592f2 100644 --- a/tools/node_modules/eslint/lib/rules/func-names.js +++ b/tools/node_modules/eslint/lib/rules/func-names.js @@ -30,7 +30,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow named `function` expressions", + description: "Require or disallow named `function` expressions", recommended: false, url: "https://eslint.org/docs/rules/func-names" }, diff --git a/tools/node_modules/eslint/lib/rules/func-style.js b/tools/node_modules/eslint/lib/rules/func-style.js index f71574890c8..0e1ba9fab0e 100644 --- a/tools/node_modules/eslint/lib/rules/func-style.js +++ b/tools/node_modules/eslint/lib/rules/func-style.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce the consistent use of either `function` declarations or expressions", + description: "Enforce the consistent use of either `function` declarations or expressions", recommended: false, url: "https://eslint.org/docs/rules/func-style" }, diff --git a/tools/node_modules/eslint/lib/rules/function-call-argument-newline.js b/tools/node_modules/eslint/lib/rules/function-call-argument-newline.js index f3cfeee703a..46610914622 100644 --- a/tools/node_modules/eslint/lib/rules/function-call-argument-newline.js +++ b/tools/node_modules/eslint/lib/rules/function-call-argument-newline.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "enforce line breaks between arguments of a function call", + description: "Enforce line breaks between arguments of a function call", recommended: false, url: "https://eslint.org/docs/rules/function-call-argument-newline" }, diff --git a/tools/node_modules/eslint/lib/rules/function-paren-newline.js b/tools/node_modules/eslint/lib/rules/function-paren-newline.js index 898e113ee8e..e61d17be603 100644 --- a/tools/node_modules/eslint/lib/rules/function-paren-newline.js +++ b/tools/node_modules/eslint/lib/rules/function-paren-newline.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent line breaks inside function parentheses", + description: "Enforce consistent line breaks inside function parentheses", recommended: false, url: "https://eslint.org/docs/rules/function-paren-newline" }, @@ -183,7 +183,7 @@ module.exports = { /** * Gets the left paren and right paren tokens of a node. * @param {ASTNode} node The node with parens - * @throws {TypeError} Unexecpted node type. + * @throws {TypeError} Unexpected node type. * @returns {Object} An object with keys `leftParen` for the left paren token, and `rightParen` for the right paren token. * Can also return `null` if an expression has no parens (e.g. a NewExpression with no arguments, or an ArrowFunctionExpression * with a single parameter) @@ -191,10 +191,13 @@ module.exports = { function getParenTokens(node) { switch (node.type) { case "NewExpression": - if (!node.arguments.length && !( - astUtils.isOpeningParenToken(sourceCode.getLastToken(node, { skip: 1 })) && - astUtils.isClosingParenToken(sourceCode.getLastToken(node)) - )) { + if (!node.arguments.length && + !( + astUtils.isOpeningParenToken(sourceCode.getLastToken(node, { skip: 1 })) && + astUtils.isClosingParenToken(sourceCode.getLastToken(node)) && + node.callee.range[1] < node.range[1] + ) + ) { // If the NewExpression does not have parens (e.g. `new Foo`), return null. return null; diff --git a/tools/node_modules/eslint/lib/rules/generator-star-spacing.js b/tools/node_modules/eslint/lib/rules/generator-star-spacing.js index 28e81013fcb..d32b21fff5c 100644 --- a/tools/node_modules/eslint/lib/rules/generator-star-spacing.js +++ b/tools/node_modules/eslint/lib/rules/generator-star-spacing.js @@ -31,7 +31,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing around `*` operators in generator functions", + description: "Enforce consistent spacing around `*` operators in generator functions", recommended: false, url: "https://eslint.org/docs/rules/generator-star-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/getter-return.js b/tools/node_modules/eslint/lib/rules/getter-return.js index 03cfce2cf1a..5209ab1504b 100644 --- a/tools/node_modules/eslint/lib/rules/getter-return.js +++ b/tools/node_modules/eslint/lib/rules/getter-return.js @@ -35,7 +35,7 @@ module.exports = { type: "problem", docs: { - description: "enforce `return` statements in getters", + description: "Enforce `return` statements in getters", recommended: true, url: "https://eslint.org/docs/rules/getter-return" }, diff --git a/tools/node_modules/eslint/lib/rules/global-require.js b/tools/node_modules/eslint/lib/rules/global-require.js index f00ca9bf6dd..ceb0a8e8415 100644 --- a/tools/node_modules/eslint/lib/rules/global-require.js +++ b/tools/node_modules/eslint/lib/rules/global-require.js @@ -6,7 +6,7 @@ "use strict"; -const ACCEPTABLE_PARENTS = [ +const ACCEPTABLE_PARENTS = new Set([ "AssignmentExpression", "VariableDeclarator", "MemberExpression", @@ -16,7 +16,7 @@ const ACCEPTABLE_PARENTS = [ "Program", "VariableDeclaration", "ChainExpression" -]; +]); /** * Finds the eslint-scope reference in the given scope. @@ -28,10 +28,11 @@ function findReference(scope, node) { const references = scope.references.filter(reference => reference.identifier.range[0] === node.range[0] && reference.identifier.range[1] === node.range[1]); - /* istanbul ignore else: correctly returns null */ if (references.length === 1) { return references[0]; } + + /* c8 ignore next */ return null; } @@ -58,7 +59,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `require()` calls to be placed at top-level module scope", + description: "Require `require()` calls to be placed at top-level module scope", recommended: false, url: "https://eslint.org/docs/rules/global-require" }, @@ -75,7 +76,7 @@ module.exports = { const currentScope = context.getScope(); if (node.callee.name === "require" && !isShadowed(currentScope, node.callee)) { - const isGoodRequire = context.getAncestors().every(parent => ACCEPTABLE_PARENTS.indexOf(parent.type) > -1); + const isGoodRequire = context.getAncestors().every(parent => ACCEPTABLE_PARENTS.has(parent.type)); if (!isGoodRequire) { context.report({ node, messageId: "unexpected" }); diff --git a/tools/node_modules/eslint/lib/rules/grouped-accessor-pairs.js b/tools/node_modules/eslint/lib/rules/grouped-accessor-pairs.js index 0fe6f91e4db..21374be2101 100644 --- a/tools/node_modules/eslint/lib/rules/grouped-accessor-pairs.js +++ b/tools/node_modules/eslint/lib/rules/grouped-accessor-pairs.js @@ -96,7 +96,7 @@ module.exports = { type: "suggestion", docs: { - description: "require grouped accessor pairs in object literals and classes", + description: "Require grouped accessor pairs in object literals and classes", recommended: false, url: "https://eslint.org/docs/rules/grouped-accessor-pairs" }, diff --git a/tools/node_modules/eslint/lib/rules/guard-for-in.js b/tools/node_modules/eslint/lib/rules/guard-for-in.js index 1c52af7d4cd..3b99143fe21 100644 --- a/tools/node_modules/eslint/lib/rules/guard-for-in.js +++ b/tools/node_modules/eslint/lib/rules/guard-for-in.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `for-in` loops to include an `if` statement", + description: "Require `for-in` loops to include an `if` statement", recommended: false, url: "https://eslint.org/docs/rules/guard-for-in" }, diff --git a/tools/node_modules/eslint/lib/rules/handle-callback-err.js b/tools/node_modules/eslint/lib/rules/handle-callback-err.js index f370407743a..5189564b668 100644 --- a/tools/node_modules/eslint/lib/rules/handle-callback-err.js +++ b/tools/node_modules/eslint/lib/rules/handle-callback-err.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "require error handling in callbacks", + description: "Require error handling in callbacks", recommended: false, url: "https://eslint.org/docs/rules/handle-callback-err" }, diff --git a/tools/node_modules/eslint/lib/rules/id-blacklist.js b/tools/node_modules/eslint/lib/rules/id-blacklist.js index f7e04ae7376..5ea61e94f69 100644 --- a/tools/node_modules/eslint/lib/rules/id-blacklist.js +++ b/tools/node_modules/eslint/lib/rules/id-blacklist.js @@ -119,7 +119,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified identifiers", + description: "Disallow specified identifiers", recommended: false, url: "https://eslint.org/docs/rules/id-blacklist" }, diff --git a/tools/node_modules/eslint/lib/rules/id-denylist.js b/tools/node_modules/eslint/lib/rules/id-denylist.js index a0b1f416f46..fe0a0b50bd2 100644 --- a/tools/node_modules/eslint/lib/rules/id-denylist.js +++ b/tools/node_modules/eslint/lib/rules/id-denylist.js @@ -99,7 +99,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified identifiers", + description: "Disallow specified identifiers", recommended: false, url: "https://eslint.org/docs/rules/id-denylist" }, diff --git a/tools/node_modules/eslint/lib/rules/id-length.js b/tools/node_modules/eslint/lib/rules/id-length.js index 3701c66e347..99f833fc73b 100644 --- a/tools/node_modules/eslint/lib/rules/id-length.js +++ b/tools/node_modules/eslint/lib/rules/id-length.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce minimum and maximum identifier lengths", + description: "Enforce minimum and maximum identifier lengths", recommended: false, url: "https://eslint.org/docs/rules/id-length" }, diff --git a/tools/node_modules/eslint/lib/rules/id-match.js b/tools/node_modules/eslint/lib/rules/id-match.js index 8713a5f9f8b..ec87af18d5b 100644 --- a/tools/node_modules/eslint/lib/rules/id-match.js +++ b/tools/node_modules/eslint/lib/rules/id-match.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require identifiers to match a specified regular expression", + description: "Require identifiers to match a specified regular expression", recommended: false, url: "https://eslint.org/docs/rules/id-match" }, diff --git a/tools/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js b/tools/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js index 71b2437eef8..c765960267f 100644 --- a/tools/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js +++ b/tools/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "enforce the location of arrow function bodies", + description: "Enforce the location of arrow function bodies", recommended: false, url: "https://eslint.org/docs/rules/implicit-arrow-linebreak" }, diff --git a/tools/node_modules/eslint/lib/rules/indent-legacy.js b/tools/node_modules/eslint/lib/rules/indent-legacy.js index bd61f6f8431..d4793bd6360 100644 --- a/tools/node_modules/eslint/lib/rules/indent-legacy.js +++ b/tools/node_modules/eslint/lib/rules/indent-legacy.js @@ -18,15 +18,15 @@ const astUtils = require("./utils/ast-utils"); //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ - -/* istanbul ignore next: this rule has known coverage issues, but it's deprecated and shouldn't be updated in the future anyway. */ +// this rule has known coverage issues, but it's deprecated and shouldn't be updated in the future anyway. +/* c8 ignore next */ /** @type {import('../shared/types').Rule} */ module.exports = { meta: { type: "layout", docs: { - description: "enforce consistent indentation", + description: "Enforce consistent indentation", recommended: false, url: "https://eslint.org/docs/rules/indent-legacy" }, @@ -212,10 +212,10 @@ module.exports = { if (context.options[0] === "tab") { indentSize = 1; indentType = "tab"; - } else /* istanbul ignore else : this will be caught by options validation */ if (typeof context.options[0] === "number") { + } else /* c8 ignore start */ if (typeof context.options[0] === "number") { indentSize = context.options[0]; indentType = "space"; - } + }/* c8 ignore stop */ if (context.options[1]) { const opts = context.options[1]; @@ -753,7 +753,7 @@ module.exports = { if (typeof options.CallExpression.arguments === "number") { nodeIndent += options.CallExpression.arguments * indentSize; } else if (options.CallExpression.arguments === "first") { - if (parent.arguments.indexOf(node) !== -1) { + if (parent.arguments.includes(node)) { nodeIndent = parent.arguments[0].loc.start.column; } } else { @@ -840,7 +840,7 @@ module.exports = { "IfStatement", "WhileStatement", "ForStatement", "ForInStatement", "ForOfStatement", "DoWhileStatement", "ClassDeclaration", "TryStatement" ]; - if (node.parent && statementsWithProperties.indexOf(node.parent.type) !== -1 && isNodeBodyBlock(node)) { + if (node.parent && statementsWithProperties.includes(node.parent.type) && isNodeBodyBlock(node)) { indent = getNodeIndent(node.parent).goodChar; } else if (node.parent && node.parent.type === "CatchClause") { indent = getNodeIndent(node.parent.parent).goodChar; diff --git a/tools/node_modules/eslint/lib/rules/indent.js b/tools/node_modules/eslint/lib/rules/indent.js index 6152bc561f9..cda02035a1d 100644 --- a/tools/node_modules/eslint/lib/rules/indent.js +++ b/tools/node_modules/eslint/lib/rules/indent.js @@ -12,7 +12,7 @@ // Requirements //------------------------------------------------------------------------------ -const createTree = require("functional-red-black-tree"); +const { OrderedMap } = require("js-sdsl"); const astUtils = require("./utils/ast-utils"); @@ -135,7 +135,8 @@ class BinarySearchTree { * Creates an empty tree */ constructor() { - this._rbTree = createTree(); + this._orderedMap = new OrderedMap(); + this._orderedMapEnd = this._orderedMap.end(); } /** @@ -145,13 +146,7 @@ class BinarySearchTree { * @returns {void} */ insert(key, value) { - const iterator = this._rbTree.find(key); - - if (iterator.valid) { - this._rbTree = iterator.update(value); - } else { - this._rbTree = this._rbTree.insert(key, value); - } + this._orderedMap.setElement(key, value); } /** @@ -160,9 +155,13 @@ class BinarySearchTree { * @returns {{key: number, value: *}|null} The found entry, or null if no such entry exists. */ findLe(key) { - const iterator = this._rbTree.le(key); + const iterator = this._orderedMap.reverseLowerBound(key); + + if (iterator.equals(this._orderedMapEnd)) { + return {}; + } - return iterator && { key: iterator.key, value: iterator.value }; + return { key: iterator.pointer[0], value: iterator.pointer[1] }; } /** @@ -177,11 +176,20 @@ class BinarySearchTree { if (start === end) { return; } - const iterator = this._rbTree.ge(start); + const iterator = this._orderedMap.lowerBound(start); - while (iterator.valid && iterator.key < end) { - this._rbTree = this._rbTree.remove(iterator.key); - iterator.next(); + if (iterator.equals(this._orderedMapEnd)) { + return; + } + + if (end > this._orderedMap.back()[0]) { + while (!iterator.equals(this._orderedMapEnd)) { + this._orderedMap.eraseElementByIterator(iterator); + } + } else { + while (iterator.pointer[0] < end) { + this._orderedMap.eraseElementByIterator(iterator); + } } } } @@ -500,7 +508,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent indentation", + description: "Enforce consistent indentation", recommended: false, url: "https://eslint.org/docs/rules/indent" }, @@ -796,7 +804,7 @@ module.exports = { let statement = node.parent && node.parent.parent; while ( - statement.type === "UnaryExpression" && ["!", "~", "+", "-"].indexOf(statement.operator) > -1 || + statement.type === "UnaryExpression" && ["!", "~", "+", "-"].includes(statement.operator) || statement.type === "AssignmentExpression" || statement.type === "LogicalExpression" || statement.type === "SequenceExpression" || @@ -916,18 +924,6 @@ module.exports = { } offsets.setDesiredOffsets([firstBodyToken.range[0], lastBodyToken.range[1]], lastParentToken, 1); - - /* - * For blockless nodes with semicolon-first style, don't indent the semicolon. - * e.g. - * if (foo) bar() - * ; [1, 2, 3].map(foo) - */ - const lastToken = sourceCode.getLastToken(node); - - if (node.type !== "EmptyStatement" && astUtils.isSemicolonToken(lastToken)) { - offsets.setDesiredOffset(lastToken, lastParentToken, 0); - } } } @@ -1223,7 +1219,7 @@ module.exports = { } }, - "DoWhileStatement, WhileStatement, ForInStatement, ForOfStatement": node => addBlocklessNodeIndent(node.body), + "DoWhileStatement, WhileStatement, ForInStatement, ForOfStatement, WithStatement": node => addBlocklessNodeIndent(node.body), ExportNamedDeclaration(node) { if (node.declaration === null) { @@ -1271,6 +1267,50 @@ module.exports = { } }, + /* + * For blockless nodes with semicolon-first style, don't indent the semicolon. + * e.g. + * if (foo) + * bar() + * ; [1, 2, 3].map(foo) + * + * Traversal into the node sets indentation of the semicolon, so we need to override it on exit. + */ + ":matches(DoWhileStatement, ForStatement, ForInStatement, ForOfStatement, IfStatement, WhileStatement, WithStatement):exit"(node) { + let nodesToCheck; + + if (node.type === "IfStatement") { + nodesToCheck = [node.consequent]; + if (node.alternate) { + nodesToCheck.push(node.alternate); + } + } else { + nodesToCheck = [node.body]; + } + + for (const nodeToCheck of nodesToCheck) { + const lastToken = sourceCode.getLastToken(nodeToCheck); + + if (astUtils.isSemicolonToken(lastToken)) { + const tokenBeforeLast = sourceCode.getTokenBefore(lastToken); + const tokenAfterLast = sourceCode.getTokenAfter(lastToken); + + // override indentation of `;` only if its line looks like a semicolon-first style line + if ( + !astUtils.isTokenOnSameLine(tokenBeforeLast, lastToken) && + tokenAfterLast && + astUtils.isTokenOnSameLine(lastToken, tokenAfterLast) + ) { + offsets.setDesiredOffset( + lastToken, + sourceCode.getFirstToken(node), + 0 + ); + } + } + } + }, + ImportDeclaration(node) { if (node.specifiers.some(specifier => specifier.type === "ImportSpecifier")) { const openingCurly = sourceCode.getFirstToken(node, astUtils.isOpeningBraceToken); diff --git a/tools/node_modules/eslint/lib/rules/index.js b/tools/node_modules/eslint/lib/rules/index.js index 130b635c972..565648c09e8 100644 --- a/tools/node_modules/eslint/lib/rules/index.js +++ b/tools/node_modules/eslint/lib/rules/index.js @@ -72,6 +72,7 @@ module.exports = new LazyLoadingRuleMap(Object.entries({ "lines-around-comment": () => require("./lines-around-comment"), "lines-around-directive": () => require("./lines-around-directive"), "lines-between-class-members": () => require("./lines-between-class-members"), + "logical-assignment-operators": () => require("./logical-assignment-operators"), "max-classes-per-file": () => require("./max-classes-per-file"), "max-depth": () => require("./max-depth"), "max-len": () => require("./max-len"), @@ -103,6 +104,7 @@ module.exports = new LazyLoadingRuleMap(Object.entries({ "no-confusing-arrow": () => require("./no-confusing-arrow"), "no-console": () => require("./no-console"), "no-const-assign": () => require("./no-const-assign"), + "no-constant-binary-expression": () => require("./no-constant-binary-expression"), "no-constant-condition": () => require("./no-constant-condition"), "no-constructor-return": () => require("./no-constructor-return"), "no-continue": () => require("./no-continue"), diff --git a/tools/node_modules/eslint/lib/rules/init-declarations.js b/tools/node_modules/eslint/lib/rules/init-declarations.js index d952b8925ed..b2ddf64fb4b 100644 --- a/tools/node_modules/eslint/lib/rules/init-declarations.js +++ b/tools/node_modules/eslint/lib/rules/init-declarations.js @@ -48,7 +48,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow initialization in variable declarations", + description: "Require or disallow initialization in variable declarations", recommended: false, url: "https://eslint.org/docs/rules/init-declarations" }, diff --git a/tools/node_modules/eslint/lib/rules/jsx-quotes.js b/tools/node_modules/eslint/lib/rules/jsx-quotes.js index a0cdfaa62be..6745bb64b36 100644 --- a/tools/node_modules/eslint/lib/rules/jsx-quotes.js +++ b/tools/node_modules/eslint/lib/rules/jsx-quotes.js @@ -42,7 +42,7 @@ module.exports = { type: "layout", docs: { - description: "enforce the consistent use of either double or single quotes in JSX attributes", + description: "Enforce the consistent use of either double or single quotes in JSX attributes", recommended: false, url: "https://eslint.org/docs/rules/jsx-quotes" }, @@ -70,7 +70,7 @@ module.exports = { * @public */ function usesExpectedQuotes(node) { - return node.value.indexOf(setting.quote) !== -1 || astUtils.isSurroundedBy(node.raw, setting.quote); + return node.value.includes(setting.quote) || astUtils.isSurroundedBy(node.raw, setting.quote); } return { diff --git a/tools/node_modules/eslint/lib/rules/key-spacing.js b/tools/node_modules/eslint/lib/rules/key-spacing.js index ce8bad5bb35..b764b7282ef 100644 --- a/tools/node_modules/eslint/lib/rules/key-spacing.js +++ b/tools/node_modules/eslint/lib/rules/key-spacing.js @@ -9,6 +9,9 @@ //------------------------------------------------------------------------------ const astUtils = require("./utils/ast-utils"); +const GraphemeSplitter = require("grapheme-splitter"); + +const splitter = new GraphemeSplitter(); //------------------------------------------------------------------------------ // Helpers @@ -139,7 +142,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing between keys and values in object literal properties", + description: "Enforce consistent spacing between keys and values in object literal properties", recommended: false, url: "https://eslint.org/docs/rules/key-spacing" }, @@ -508,7 +511,7 @@ module.exports = { const startToken = sourceCode.getFirstToken(property); const endToken = getLastTokenBeforeColon(property.key); - return endToken.range[1] - startToken.range[0]; + return splitter.countGraphemes(sourceCode.getText().slice(startToken.range[0], endToken.range[1])); } /** diff --git a/tools/node_modules/eslint/lib/rules/keyword-spacing.js b/tools/node_modules/eslint/lib/rules/keyword-spacing.js index 16a65d78696..59a500f5bfc 100644 --- a/tools/node_modules/eslint/lib/rules/keyword-spacing.js +++ b/tools/node_modules/eslint/lib/rules/keyword-spacing.js @@ -67,7 +67,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before and after keywords", + description: "Enforce consistent spacing before and after keywords", recommended: false, url: "https://eslint.org/docs/rules/keyword-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/line-comment-position.js b/tools/node_modules/eslint/lib/rules/line-comment-position.js index 9ce2831dec6..0631ebe6f32 100644 --- a/tools/node_modules/eslint/lib/rules/line-comment-position.js +++ b/tools/node_modules/eslint/lib/rules/line-comment-position.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce position of line comments", + description: "Enforce position of line comments", recommended: false, url: "https://eslint.org/docs/rules/line-comment-position" }, diff --git a/tools/node_modules/eslint/lib/rules/linebreak-style.js b/tools/node_modules/eslint/lib/rules/linebreak-style.js index 483788aa6ef..a5dc39d7967 100644 --- a/tools/node_modules/eslint/lib/rules/linebreak-style.js +++ b/tools/node_modules/eslint/lib/rules/linebreak-style.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent linebreak style", + description: "Enforce consistent linebreak style", recommended: false, url: "https://eslint.org/docs/rules/linebreak-style" }, diff --git a/tools/node_modules/eslint/lib/rules/lines-around-comment.js b/tools/node_modules/eslint/lib/rules/lines-around-comment.js index 74df09b01bd..bd7d1cd2662 100644 --- a/tools/node_modules/eslint/lib/rules/lines-around-comment.js +++ b/tools/node_modules/eslint/lib/rules/lines-around-comment.js @@ -55,7 +55,7 @@ module.exports = { type: "layout", docs: { - description: "require empty lines around comments", + description: "Require empty lines around comments", recommended: false, url: "https://eslint.org/docs/rules/lines-around-comment" }, @@ -141,7 +141,7 @@ module.exports = { comments = sourceCode.getAllComments(), commentLines = getCommentLineNums(comments), emptyLines = getEmptyLineNums(lines), - commentAndEmptyLines = commentLines.concat(emptyLines); + commentAndEmptyLines = new Set(commentLines.concat(emptyLines)); /** * Returns whether or not comments are on lines starting with or ending with code @@ -231,9 +231,15 @@ module.exports = { const parent = getParentNodeOfToken(token); if (parent && isParentNodeType(parent, nodeType)) { - const parentStartNodeOrToken = parent.type === "StaticBlock" - ? sourceCode.getFirstToken(parent, { skip: 1 }) // opening brace of the static block - : parent; + let parentStartNodeOrToken = parent; + + if (parent.type === "StaticBlock") { + parentStartNodeOrToken = sourceCode.getFirstToken(parent, { skip: 1 }); // opening brace of the static block + } else if (parent.type === "SwitchStatement") { + parentStartNodeOrToken = sourceCode.getTokenAfter(parent.discriminant, { + filter: astUtils.isOpeningBraceToken + }); // opening brace of the switch statement + } return token.loc.start.line - parentStartNodeOrToken.loc.start.line === 1; } @@ -264,7 +270,8 @@ module.exports = { isCommentAtParentStart(token, "ClassBody") || isCommentAtParentStart(token, "BlockStatement") || isCommentAtParentStart(token, "StaticBlock") || - isCommentAtParentStart(token, "SwitchCase") + isCommentAtParentStart(token, "SwitchCase") || + isCommentAtParentStart(token, "SwitchStatement") ); } @@ -393,7 +400,7 @@ module.exports = { const nextTokenOrComment = sourceCode.getTokenAfter(token, { includeComments: true }); // check for newline before - if (!exceptionStartAllowed && before && !commentAndEmptyLines.includes(prevLineNum) && + if (!exceptionStartAllowed && before && !commentAndEmptyLines.has(prevLineNum) && !(astUtils.isCommentToken(previousTokenOrComment) && astUtils.isTokenOnSameLine(previousTokenOrComment, token))) { const lineStart = token.range[0] - token.loc.start.column; const range = [lineStart, lineStart]; @@ -408,7 +415,7 @@ module.exports = { } // check for newline after - if (!exceptionEndAllowed && after && !commentAndEmptyLines.includes(nextLineNum) && + if (!exceptionEndAllowed && after && !commentAndEmptyLines.has(nextLineNum) && !(astUtils.isCommentToken(nextTokenOrComment) && astUtils.isTokenOnSameLine(token, nextTokenOrComment))) { context.report({ node: token, diff --git a/tools/node_modules/eslint/lib/rules/lines-around-directive.js b/tools/node_modules/eslint/lib/rules/lines-around-directive.js index 21884f162e8..816efc979b7 100644 --- a/tools/node_modules/eslint/lib/rules/lines-around-directive.js +++ b/tools/node_modules/eslint/lib/rules/lines-around-directive.js @@ -18,7 +18,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow newlines around directives", + description: "Require or disallow newlines around directives", recommended: false, url: "https://eslint.org/docs/rules/lines-around-directive" }, diff --git a/tools/node_modules/eslint/lib/rules/lines-between-class-members.js b/tools/node_modules/eslint/lib/rules/lines-between-class-members.js index 1d6b7e7693e..26357aa3dde 100644 --- a/tools/node_modules/eslint/lib/rules/lines-between-class-members.js +++ b/tools/node_modules/eslint/lib/rules/lines-between-class-members.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow an empty line between class members", + description: "Require or disallow an empty line between class members", recommended: false, url: "https://eslint.org/docs/rules/lines-between-class-members" }, diff --git a/tools/node_modules/eslint/lib/rules/logical-assignment-operators.js b/tools/node_modules/eslint/lib/rules/logical-assignment-operators.js new file mode 100644 index 00000000000..bd2357acf43 --- /dev/null +++ b/tools/node_modules/eslint/lib/rules/logical-assignment-operators.js @@ -0,0 +1,474 @@ +/** + * @fileoverview Rule to replace assignment expressions with logical operator assignment + * @author Daniel Martens + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ +const astUtils = require("./utils/ast-utils.js"); + +//------------------------------------------------------------------------------ +// Helpers +//------------------------------------------------------------------------------ + +const baseTypes = new Set(["Identifier", "Super", "ThisExpression"]); + +/** + * Returns true iff either "undefined" or a void expression (eg. "void 0") + * @param {ASTNode} expression Expression to check + * @param {import('eslint-scope').Scope} scope Scope of the expression + * @returns {boolean} True iff "undefined" or "void ..." + */ +function isUndefined(expression, scope) { + if (expression.type === "Identifier" && expression.name === "undefined") { + return astUtils.isReferenceToGlobalVariable(scope, expression); + } + + return expression.type === "UnaryExpression" && + expression.operator === "void" && + expression.argument.type === "Literal" && + expression.argument.value === 0; +} + +/** + * Returns true iff the reference is either an identifier or member expression + * @param {ASTNode} expression Expression to check + * @returns {boolean} True for identifiers and member expressions + */ +function isReference(expression) { + return (expression.type === "Identifier" && expression.name !== "undefined") || + expression.type === "MemberExpression"; +} + +/** + * Returns true iff the expression checks for nullish with loose equals. + * Examples: value == null, value == void 0 + * @param {ASTNode} expression Test condition + * @param {import('eslint-scope').Scope} scope Scope of the expression + * @returns {boolean} True iff implicit nullish comparison + */ +function isImplicitNullishComparison(expression, scope) { + if (expression.type !== "BinaryExpression" || expression.operator !== "==") { + return false; + } + + const reference = isReference(expression.left) ? "left" : "right"; + const nullish = reference === "left" ? "right" : "left"; + + return isReference(expression[reference]) && + (astUtils.isNullLiteral(expression[nullish]) || isUndefined(expression[nullish], scope)); +} + +/** + * Condition with two equal comparisons. + * @param {ASTNode} expression Condition + * @returns {boolean} True iff matches ? === ? || ? === ? + */ +function isDoubleComparison(expression) { + return expression.type === "LogicalExpression" && + expression.operator === "||" && + expression.left.type === "BinaryExpression" && + expression.left.operator === "===" && + expression.right.type === "BinaryExpression" && + expression.right.operator === "==="; +} + +/** + * Returns true iff the expression checks for undefined and null. + * Example: value === null || value === undefined + * @param {ASTNode} expression Test condition + * @param {import('eslint-scope').Scope} scope Scope of the expression + * @returns {boolean} True iff explicit nullish comparison + */ +function isExplicitNullishComparison(expression, scope) { + if (!isDoubleComparison(expression)) { + return false; + } + const leftReference = isReference(expression.left.left) ? "left" : "right"; + const leftNullish = leftReference === "left" ? "right" : "left"; + const rightReference = isReference(expression.right.left) ? "left" : "right"; + const rightNullish = rightReference === "left" ? "right" : "left"; + + return astUtils.isSameReference(expression.left[leftReference], expression.right[rightReference]) && + ((astUtils.isNullLiteral(expression.left[leftNullish]) && isUndefined(expression.right[rightNullish], scope)) || + (isUndefined(expression.left[leftNullish], scope) && astUtils.isNullLiteral(expression.right[rightNullish]))); +} + +/** + * Returns true for Boolean(arg) calls + * @param {ASTNode} expression Test condition + * @param {import('eslint-scope').Scope} scope Scope of the expression + * @returns {boolean} Whether the expression is a boolean cast + */ +function isBooleanCast(expression, scope) { + return expression.type === "CallExpression" && + expression.callee.name === "Boolean" && + expression.arguments.length === 1 && + astUtils.isReferenceToGlobalVariable(scope, expression.callee); +} + +/** + * Returns true for: + * truthiness checks: value, Boolean(value), !!value + * falsyness checks: !value, !Boolean(value) + * nullish checks: value == null, value === undefined || value === null + * @param {ASTNode} expression Test condition + * @param {import('eslint-scope').Scope} scope Scope of the expression + * @returns {?{ reference: ASTNode, operator: '??'|'||'|'&&'}} Null if not a known existence + */ +function getExistence(expression, scope) { + const isNegated = expression.type === "UnaryExpression" && expression.operator === "!"; + const base = isNegated ? expression.argument : expression; + + switch (true) { + case isReference(base): + return { reference: base, operator: isNegated ? "||" : "&&" }; + case base.type === "UnaryExpression" && base.operator === "!" && isReference(base.argument): + return { reference: base.argument, operator: "&&" }; + case isBooleanCast(base, scope) && isReference(base.arguments[0]): + return { reference: base.arguments[0], operator: isNegated ? "||" : "&&" }; + case isImplicitNullishComparison(expression, scope): + return { reference: isReference(expression.left) ? expression.left : expression.right, operator: "??" }; + case isExplicitNullishComparison(expression, scope): + return { reference: isReference(expression.left.left) ? expression.left.left : expression.left.right, operator: "??" }; + default: return null; + } +} + +/** + * Returns true iff the node is inside a with block + * @param {ASTNode} node Node to check + * @returns {boolean} True iff passed node is inside a with block + */ +function isInsideWithBlock(node) { + if (node.type === "Program") { + return false; + } + + return node.parent.type === "WithStatement" && node.parent.body === node ? true : isInsideWithBlock(node.parent); +} + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ +/** @type {import('../shared/types').Rule} */ +module.exports = { + meta: { + type: "suggestion", + + docs: { + description: "Require or disallow logical assignment logical operator shorthand", + recommended: false, + url: "https://eslint.org/docs/rules/logical-assignment-operators" + }, + + schema: { + type: "array", + oneOf: [{ + items: [ + { const: "always" }, + { + type: "object", + properties: { + enforceForIfStatements: { + type: "boolean" + } + }, + additionalProperties: false + } + ], + minItems: 0, // 0 for allowing passing no options + maxItems: 2 + }, { + items: [{ const: "never" }], + minItems: 1, + maxItems: 1 + }] + }, + fixable: "code", + // eslint-disable-next-line eslint-plugin/require-meta-has-suggestions -- Does not detect conditional suggestions + hasSuggestions: true, + messages: { + assignment: "Assignment (=) can be replaced with operator assignment ({{operator}}).", + useLogicalOperator: "Convert this assignment to use the operator {{ operator }}.", + logical: "Logical expression can be replaced with an assignment ({{ operator }}).", + convertLogical: "Replace this logical expression with an assignment with the operator {{ operator }}.", + if: "'if' statement can be replaced with a logical operator assignment with operator {{ operator }}.", + convertIf: "Replace this 'if' statement with a logical assignment with operator {{ operator }}.", + unexpected: "Unexpected logical operator assignment ({{operator}}) shorthand.", + separate: "Separate the logical assignment into an assignment with a logical operator." + } + }, + + create(context) { + const mode = context.options[0] === "never" ? "never" : "always"; + const checkIf = mode === "always" && context.options.length > 1 && context.options[1].enforceForIfStatements; + const sourceCode = context.getSourceCode(); + const isStrict = context.getScope().isStrict; + + /** + * Returns false if the access could be a getter + * @param {ASTNode} node Assignment expression + * @returns {boolean} True iff the fix is safe + */ + function cannotBeGetter(node) { + return node.type === "Identifier" && + (isStrict || !isInsideWithBlock(node)); + } + + /** + * Check whether only a single property is accessed + * @param {ASTNode} node reference + * @returns {boolean} True iff a single property is accessed + */ + function accessesSingleProperty(node) { + if (!isStrict && isInsideWithBlock(node)) { + return node.type === "Identifier"; + } + + return node.type === "MemberExpression" && + baseTypes.has(node.object.type) && + (!node.computed || (node.property.type !== "MemberExpression" && node.property.type !== "ChainExpression")); + } + + /** + * Adds a fixer or suggestion whether on the fix is safe. + * @param {{ messageId: string, node: ASTNode }} descriptor Report descriptor without fix or suggest + * @param {{ messageId: string, fix: Function }} suggestion Adds the fix or the whole suggestion as only element in "suggest" to suggestion + * @param {boolean} shouldBeFixed Fix iff the condition is true + * @returns {Object} Descriptor with either an added fix or suggestion + */ + function createConditionalFixer(descriptor, suggestion, shouldBeFixed) { + if (shouldBeFixed) { + return { + ...descriptor, + fix: suggestion.fix + }; + } + + return { + ...descriptor, + suggest: [suggestion] + }; + } + + + /** + * Returns the operator token for assignments and binary expressions + * @param {ASTNode} node AssignmentExpression or BinaryExpression + * @returns {import('eslint').AST.Token} Operator token between the left and right expression + */ + function getOperatorToken(node) { + return sourceCode.getFirstTokenBetween(node.left, node.right, token => token.value === node.operator); + } + + if (mode === "never") { + return { + + // foo ||= bar + "AssignmentExpression"(assignment) { + if (!astUtils.isLogicalAssignmentOperator(assignment.operator)) { + return; + } + + const descriptor = { + messageId: "unexpected", + node: assignment, + data: { operator: assignment.operator } + }; + const suggestion = { + messageId: "separate", + *fix(ruleFixer) { + if (sourceCode.getCommentsInside(assignment).length > 0) { + return; + } + + const operatorToken = getOperatorToken(assignment); + + // -> foo = bar + yield ruleFixer.replaceText(operatorToken, "="); + + const assignmentText = sourceCode.getText(assignment.left); + const operator = assignment.operator.slice(0, -1); + + // -> foo = foo || bar + yield ruleFixer.insertTextAfter(operatorToken, ` ${assignmentText} ${operator}`); + + const precedence = astUtils.getPrecedence(assignment.right) <= astUtils.getPrecedence({ type: "LogicalExpression", operator }); + + // ?? and || / && cannot be mixed but have same precedence + const mixed = assignment.operator === "??=" && astUtils.isLogicalExpression(assignment.right); + + if (!astUtils.isParenthesised(sourceCode, assignment.right) && (precedence || mixed)) { + + // -> foo = foo || (bar) + yield ruleFixer.insertTextBefore(assignment.right, "("); + yield ruleFixer.insertTextAfter(assignment.right, ")"); + } + } + }; + + context.report(createConditionalFixer(descriptor, suggestion, cannotBeGetter(assignment.left))); + } + }; + } + + return { + + // foo = foo || bar + "AssignmentExpression[operator='='][right.type='LogicalExpression']"(assignment) { + if (!astUtils.isSameReference(assignment.left, assignment.right.left)) { + return; + } + + const descriptor = { + messageId: "assignment", + node: assignment, + data: { operator: `${assignment.right.operator}=` } + }; + const suggestion = { + messageId: "useLogicalOperator", + data: { operator: `${assignment.right.operator}=` }, + *fix(ruleFixer) { + if (sourceCode.getCommentsInside(assignment).length > 0) { + return; + } + + // No need for parenthesis around the assignment based on precedence as the precedence stays the same even with changed operator + const assignmentOperatorToken = getOperatorToken(assignment); + + // -> foo ||= foo || bar + yield ruleFixer.insertTextBefore(assignmentOperatorToken, assignment.right.operator); + + // -> foo ||= bar + const logicalOperatorToken = getOperatorToken(assignment.right); + const firstRightOperandToken = sourceCode.getTokenAfter(logicalOperatorToken); + + yield ruleFixer.removeRange([assignment.right.range[0], firstRightOperandToken.range[0]]); + } + }; + + context.report(createConditionalFixer(descriptor, suggestion, cannotBeGetter(assignment.left))); + }, + + // foo || (foo = bar) + 'LogicalExpression[right.type="AssignmentExpression"][right.operator="="]'(logical) { + + // Right side has to be parenthesized, otherwise would be parsed as (foo || foo) = bar which is illegal + if (isReference(logical.left) && astUtils.isSameReference(logical.left, logical.right.left)) { + const descriptor = { + messageId: "logical", + node: logical, + data: { operator: `${logical.operator}=` } + }; + const suggestion = { + messageId: "convertLogical", + data: { operator: `${logical.operator}=` }, + *fix(ruleFixer) { + if (sourceCode.getCommentsInside(logical).length > 0) { + return; + } + + const requiresOuterParenthesis = logical.parent.type !== "ExpressionStatement" && + (astUtils.getPrecedence({ type: "AssignmentExpression" }) < astUtils.getPrecedence(logical.parent)); + + if (!astUtils.isParenthesised(sourceCode, logical) && requiresOuterParenthesis) { + yield ruleFixer.insertTextBefore(logical, "("); + yield ruleFixer.insertTextAfter(logical, ")"); + } + + // Also removes all opening parenthesis + yield ruleFixer.removeRange([logical.range[0], logical.right.range[0]]); // -> foo = bar) + + // Also removes all ending parenthesis + yield ruleFixer.removeRange([logical.right.range[1], logical.range[1]]); // -> foo = bar + + const operatorToken = getOperatorToken(logical.right); + + yield ruleFixer.insertTextBefore(operatorToken, logical.operator); // -> foo ||= bar + } + }; + const fix = cannotBeGetter(logical.left) || accessesSingleProperty(logical.left); + + context.report(createConditionalFixer(descriptor, suggestion, fix)); + } + }, + + // if (foo) foo = bar + "IfStatement[alternate=null]"(ifNode) { + if (!checkIf) { + return; + } + + const hasBody = ifNode.consequent.type === "BlockStatement"; + + if (hasBody && ifNode.consequent.body.length !== 1) { + return; + } + + const body = hasBody ? ifNode.consequent.body[0] : ifNode.consequent; + const scope = context.getScope(); + const existence = getExistence(ifNode.test, scope); + + if ( + body.type === "ExpressionStatement" && + body.expression.type === "AssignmentExpression" && + body.expression.operator === "=" && + existence !== null && + astUtils.isSameReference(existence.reference, body.expression.left) + ) { + const descriptor = { + messageId: "if", + node: ifNode, + data: { operator: `${existence.operator}=` } + }; + const suggestion = { + messageId: "convertIf", + data: { operator: `${existence.operator}=` }, + *fix(ruleFixer) { + if (sourceCode.getCommentsInside(ifNode).length > 0) { + return; + } + + const firstBodyToken = sourceCode.getFirstToken(body); + const prevToken = sourceCode.getTokenBefore(ifNode); + + if ( + prevToken !== null && + prevToken.value !== ";" && + prevToken.value !== "{" && + firstBodyToken.type !== "Identifier" && + firstBodyToken.type !== "Keyword" + ) { + + // Do not fix if the fixed statement could be part of the previous statement (eg. fn() if (a == null) (a) = b --> fn()(a) ??= b) + return; + } + + + const operatorToken = getOperatorToken(body.expression); + + yield ruleFixer.insertTextBefore(operatorToken, existence.operator); // -> if (foo) foo ||= bar + + yield ruleFixer.removeRange([ifNode.range[0], body.range[0]]); // -> foo ||= bar + + yield ruleFixer.removeRange([body.range[1], ifNode.range[1]]); // -> foo ||= bar, only present if "if" had a body + + const nextToken = sourceCode.getTokenAfter(body.expression); + + if (hasBody && (nextToken !== null && nextToken.value !== ";")) { + yield ruleFixer.insertTextAfter(ifNode, ";"); + } + } + }; + const shouldBeFixed = cannotBeGetter(existence.reference) || + (ifNode.test.type !== "LogicalExpression" && accessesSingleProperty(existence.reference)); + + context.report(createConditionalFixer(descriptor, suggestion, shouldBeFixed)); + } + } + }; + } +}; diff --git a/tools/node_modules/eslint/lib/rules/max-classes-per-file.js b/tools/node_modules/eslint/lib/rules/max-classes-per-file.js index 2157bebe4a9..0bd626fe6e8 100644 --- a/tools/node_modules/eslint/lib/rules/max-classes-per-file.js +++ b/tools/node_modules/eslint/lib/rules/max-classes-per-file.js @@ -19,7 +19,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum number of classes per file", + description: "Enforce a maximum number of classes per file", recommended: false, url: "https://eslint.org/docs/rules/max-classes-per-file" }, diff --git a/tools/node_modules/eslint/lib/rules/max-depth.js b/tools/node_modules/eslint/lib/rules/max-depth.js index 8006ffdef75..6b428ced763 100644 --- a/tools/node_modules/eslint/lib/rules/max-depth.js +++ b/tools/node_modules/eslint/lib/rules/max-depth.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum depth that blocks can be nested", + description: "Enforce a maximum depth that blocks can be nested", recommended: false, url: "https://eslint.org/docs/rules/max-depth" }, diff --git a/tools/node_modules/eslint/lib/rules/max-len.js b/tools/node_modules/eslint/lib/rules/max-len.js index d05559e5baf..0d3b2af7026 100644 --- a/tools/node_modules/eslint/lib/rules/max-len.js +++ b/tools/node_modules/eslint/lib/rules/max-len.js @@ -69,7 +69,7 @@ module.exports = { type: "layout", docs: { - description: "enforce a maximum line length", + description: "Enforce a maximum line length", recommended: false, url: "https://eslint.org/docs/rules/max-len" }, diff --git a/tools/node_modules/eslint/lib/rules/max-lines-per-function.js b/tools/node_modules/eslint/lib/rules/max-lines-per-function.js index 5985a739e4b..fad646cc0c3 100644 --- a/tools/node_modules/eslint/lib/rules/max-lines-per-function.js +++ b/tools/node_modules/eslint/lib/rules/max-lines-per-function.js @@ -71,7 +71,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum number of lines of code in a function", + description: "Enforce a maximum number of lines of code in a function", recommended: false, url: "https://eslint.org/docs/rules/max-lines-per-function" }, diff --git a/tools/node_modules/eslint/lib/rules/max-lines.js b/tools/node_modules/eslint/lib/rules/max-lines.js index 31fc657a63c..d0e5bad3b2b 100644 --- a/tools/node_modules/eslint/lib/rules/max-lines.js +++ b/tools/node_modules/eslint/lib/rules/max-lines.js @@ -34,7 +34,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum number of lines per file", + description: "Enforce a maximum number of lines per file", recommended: false, url: "https://eslint.org/docs/rules/max-lines" }, @@ -159,10 +159,10 @@ module.exports = { if (skipComments) { const comments = sourceCode.getAllComments(); - const commentLines = comments.flatMap(getLinesWithoutCode); + const commentLines = new Set(comments.flatMap(getLinesWithoutCode)); lines = lines.filter( - l => !commentLines.includes(l.lineNumber) + l => !commentLines.has(l.lineNumber) ); } diff --git a/tools/node_modules/eslint/lib/rules/max-nested-callbacks.js b/tools/node_modules/eslint/lib/rules/max-nested-callbacks.js index 0d430507790..3764d5dee95 100644 --- a/tools/node_modules/eslint/lib/rules/max-nested-callbacks.js +++ b/tools/node_modules/eslint/lib/rules/max-nested-callbacks.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum depth that callbacks can be nested", + description: "Enforce a maximum depth that callbacks can be nested", recommended: false, url: "https://eslint.org/docs/rules/max-nested-callbacks" }, diff --git a/tools/node_modules/eslint/lib/rules/max-params.js b/tools/node_modules/eslint/lib/rules/max-params.js index 72379d217d6..8de1ab44b8a 100644 --- a/tools/node_modules/eslint/lib/rules/max-params.js +++ b/tools/node_modules/eslint/lib/rules/max-params.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum number of parameters in function definitions", + description: "Enforce a maximum number of parameters in function definitions", recommended: false, url: "https://eslint.org/docs/rules/max-params" }, diff --git a/tools/node_modules/eslint/lib/rules/max-statements-per-line.js b/tools/node_modules/eslint/lib/rules/max-statements-per-line.js index 61b508cf6cd..ada9cf0fe5e 100644 --- a/tools/node_modules/eslint/lib/rules/max-statements-per-line.js +++ b/tools/node_modules/eslint/lib/rules/max-statements-per-line.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "enforce a maximum number of statements allowed per line", + description: "Enforce a maximum number of statements allowed per line", recommended: false, url: "https://eslint.org/docs/rules/max-statements-per-line" }, diff --git a/tools/node_modules/eslint/lib/rules/max-statements.js b/tools/node_modules/eslint/lib/rules/max-statements.js index ac117e92e72..c598b1059d0 100644 --- a/tools/node_modules/eslint/lib/rules/max-statements.js +++ b/tools/node_modules/eslint/lib/rules/max-statements.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum number of statements allowed in function blocks", + description: "Enforce a maximum number of statements allowed in function blocks", recommended: false, url: "https://eslint.org/docs/rules/max-statements" }, @@ -126,7 +126,7 @@ module.exports = { /* * This rule does not apply to class static blocks, but we have to track them so - * that stataments in them do not count as statements in the enclosing function. + * that statements in them do not count as statements in the enclosing function. */ if (node.type === "StaticBlock") { return; diff --git a/tools/node_modules/eslint/lib/rules/multiline-comment-style.js b/tools/node_modules/eslint/lib/rules/multiline-comment-style.js index 7985bc86270..68cd666532d 100644 --- a/tools/node_modules/eslint/lib/rules/multiline-comment-style.js +++ b/tools/node_modules/eslint/lib/rules/multiline-comment-style.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a particular style for multiline comments", + description: "Enforce a particular style for multiline comments", recommended: false, url: "https://eslint.org/docs/rules/multiline-comment-style" }, diff --git a/tools/node_modules/eslint/lib/rules/multiline-ternary.js b/tools/node_modules/eslint/lib/rules/multiline-ternary.js index 91aa5a10031..62c84bbfed8 100644 --- a/tools/node_modules/eslint/lib/rules/multiline-ternary.js +++ b/tools/node_modules/eslint/lib/rules/multiline-ternary.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce newlines between operands of ternary expressions", + description: "Enforce newlines between operands of ternary expressions", recommended: false, url: "https://eslint.org/docs/rules/multiline-ternary" }, diff --git a/tools/node_modules/eslint/lib/rules/new-cap.js b/tools/node_modules/eslint/lib/rules/new-cap.js index 466cfd4c585..7e0b21eafb6 100644 --- a/tools/node_modules/eslint/lib/rules/new-cap.js +++ b/tools/node_modules/eslint/lib/rules/new-cap.js @@ -39,10 +39,10 @@ const CAPS_ALLOWED = [ */ function checkArray(obj, key, fallback) { - /* istanbul ignore if */ + /* c8 ignore start */ if (Object.prototype.hasOwnProperty.call(obj, key) && !Array.isArray(obj[key])) { throw new TypeError(`${key}, if provided, must be an Array`); - } + }/* c8 ignore stop */ return obj[key] || fallback; } @@ -82,7 +82,7 @@ module.exports = { type: "suggestion", docs: { - description: "require constructor names to begin with a capital letter", + description: "Require constructor names to begin with a capital letter", recommended: false, url: "https://eslint.org/docs/rules/new-cap" }, diff --git a/tools/node_modules/eslint/lib/rules/new-parens.js b/tools/node_modules/eslint/lib/rules/new-parens.js index 8ee4a2e1d19..f5a98a45d4d 100644 --- a/tools/node_modules/eslint/lib/rules/new-parens.js +++ b/tools/node_modules/eslint/lib/rules/new-parens.js @@ -25,7 +25,7 @@ module.exports = { type: "layout", docs: { - description: "enforce or disallow parentheses when invoking a constructor with no arguments", + description: "Enforce or disallow parentheses when invoking a constructor with no arguments", recommended: false, url: "https://eslint.org/docs/rules/new-parens" }, diff --git a/tools/node_modules/eslint/lib/rules/newline-after-var.js b/tools/node_modules/eslint/lib/rules/newline-after-var.js index e519a3afb6b..2b4d8584656 100644 --- a/tools/node_modules/eslint/lib/rules/newline-after-var.js +++ b/tools/node_modules/eslint/lib/rules/newline-after-var.js @@ -22,7 +22,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow an empty line after variable declarations", + description: "Require or disallow an empty line after variable declarations", recommended: false, url: "https://eslint.org/docs/rules/newline-after-var" }, diff --git a/tools/node_modules/eslint/lib/rules/newline-before-return.js b/tools/node_modules/eslint/lib/rules/newline-before-return.js index f4aa5166f0e..007d9427363 100644 --- a/tools/node_modules/eslint/lib/rules/newline-before-return.js +++ b/tools/node_modules/eslint/lib/rules/newline-before-return.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "require an empty line before `return` statements", + description: "Require an empty line before `return` statements", recommended: false, url: "https://eslint.org/docs/rules/newline-before-return" }, @@ -47,7 +47,7 @@ module.exports = { function isPrecededByTokens(node, testTokens) { const tokenBefore = sourceCode.getTokenBefore(node); - return testTokens.some(token => tokenBefore.value === token); + return testTokens.includes(tokenBefore.value); } /** diff --git a/tools/node_modules/eslint/lib/rules/newline-per-chained-call.js b/tools/node_modules/eslint/lib/rules/newline-per-chained-call.js index 818bf703d2b..83844a52b35 100644 --- a/tools/node_modules/eslint/lib/rules/newline-per-chained-call.js +++ b/tools/node_modules/eslint/lib/rules/newline-per-chained-call.js @@ -18,7 +18,7 @@ module.exports = { type: "layout", docs: { - description: "require a newline after each call in a method chain", + description: "Require a newline after each call in a method chain", recommended: false, url: "https://eslint.org/docs/rules/newline-per-chained-call" }, diff --git a/tools/node_modules/eslint/lib/rules/no-alert.js b/tools/node_modules/eslint/lib/rules/no-alert.js index c6f7ddf38db..ba0125c877b 100644 --- a/tools/node_modules/eslint/lib/rules/no-alert.js +++ b/tools/node_modules/eslint/lib/rules/no-alert.js @@ -88,7 +88,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `alert`, `confirm`, and `prompt`", + description: "Disallow the use of `alert`, `confirm`, and `prompt`", recommended: false, url: "https://eslint.org/docs/rules/no-alert" }, diff --git a/tools/node_modules/eslint/lib/rules/no-array-constructor.js b/tools/node_modules/eslint/lib/rules/no-array-constructor.js index 02e6114dadc..93b79abfd89 100644 --- a/tools/node_modules/eslint/lib/rules/no-array-constructor.js +++ b/tools/node_modules/eslint/lib/rules/no-array-constructor.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `Array` constructors", + description: "Disallow `Array` constructors", recommended: false, url: "https://eslint.org/docs/rules/no-array-constructor" }, diff --git a/tools/node_modules/eslint/lib/rules/no-async-promise-executor.js b/tools/node_modules/eslint/lib/rules/no-async-promise-executor.js index f940f152e3c..52c51862feb 100644 --- a/tools/node_modules/eslint/lib/rules/no-async-promise-executor.js +++ b/tools/node_modules/eslint/lib/rules/no-async-promise-executor.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "disallow using an async function as a Promise executor", + description: "Disallow using an async function as a Promise executor", recommended: true, url: "https://eslint.org/docs/rules/no-async-promise-executor" }, diff --git a/tools/node_modules/eslint/lib/rules/no-await-in-loop.js b/tools/node_modules/eslint/lib/rules/no-await-in-loop.js index 3aea39a16b9..905a793c830 100644 --- a/tools/node_modules/eslint/lib/rules/no-await-in-loop.js +++ b/tools/node_modules/eslint/lib/rules/no-await-in-loop.js @@ -59,7 +59,7 @@ module.exports = { type: "problem", docs: { - description: "disallow `await` inside of loops", + description: "Disallow `await` inside of loops", recommended: false, url: "https://eslint.org/docs/rules/no-await-in-loop" }, diff --git a/tools/node_modules/eslint/lib/rules/no-bitwise.js b/tools/node_modules/eslint/lib/rules/no-bitwise.js index 1de1619bffa..172ea046bbe 100644 --- a/tools/node_modules/eslint/lib/rules/no-bitwise.js +++ b/tools/node_modules/eslint/lib/rules/no-bitwise.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow bitwise operators", + description: "Disallow bitwise operators", recommended: false, url: "https://eslint.org/docs/rules/no-bitwise" }, @@ -76,7 +76,7 @@ module.exports = { * @returns {boolean} Whether or not the node has a bitwise operator. */ function hasBitwiseOperator(node) { - return BITWISE_OPERATORS.indexOf(node.operator) !== -1; + return BITWISE_OPERATORS.includes(node.operator); } /** @@ -85,7 +85,7 @@ module.exports = { * @returns {boolean} Whether or not the node has a bitwise operator. */ function allowedOperator(node) { - return allowed.indexOf(node.operator) !== -1; + return allowed.includes(node.operator); } /** diff --git a/tools/node_modules/eslint/lib/rules/no-buffer-constructor.js b/tools/node_modules/eslint/lib/rules/no-buffer-constructor.js index 678d7032ab4..93003928815 100644 --- a/tools/node_modules/eslint/lib/rules/no-buffer-constructor.js +++ b/tools/node_modules/eslint/lib/rules/no-buffer-constructor.js @@ -19,7 +19,7 @@ module.exports = { type: "problem", docs: { - description: "disallow use of the `Buffer()` constructor", + description: "Disallow use of the `Buffer()` constructor", recommended: false, url: "https://eslint.org/docs/rules/no-buffer-constructor" }, diff --git a/tools/node_modules/eslint/lib/rules/no-caller.js b/tools/node_modules/eslint/lib/rules/no-caller.js index a6ad94f2fe6..884a02bdcf6 100644 --- a/tools/node_modules/eslint/lib/rules/no-caller.js +++ b/tools/node_modules/eslint/lib/rules/no-caller.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `arguments.caller` or `arguments.callee`", + description: "Disallow the use of `arguments.caller` or `arguments.callee`", recommended: false, url: "https://eslint.org/docs/rules/no-caller" }, diff --git a/tools/node_modules/eslint/lib/rules/no-case-declarations.js b/tools/node_modules/eslint/lib/rules/no-case-declarations.js index d722f0cf584..6557ba3a03d 100644 --- a/tools/node_modules/eslint/lib/rules/no-case-declarations.js +++ b/tools/node_modules/eslint/lib/rules/no-case-declarations.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow lexical declarations in case clauses", + description: "Disallow lexical declarations in case clauses", recommended: true, url: "https://eslint.org/docs/rules/no-case-declarations" }, diff --git a/tools/node_modules/eslint/lib/rules/no-catch-shadow.js b/tools/node_modules/eslint/lib/rules/no-catch-shadow.js index d09c9134968..49f1ba9649b 100644 --- a/tools/node_modules/eslint/lib/rules/no-catch-shadow.js +++ b/tools/node_modules/eslint/lib/rules/no-catch-shadow.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `catch` clause parameters from shadowing variables in the outer scope", + description: "Disallow `catch` clause parameters from shadowing variables in the outer scope", recommended: false, url: "https://eslint.org/docs/rules/no-catch-shadow" }, diff --git a/tools/node_modules/eslint/lib/rules/no-class-assign.js b/tools/node_modules/eslint/lib/rules/no-class-assign.js index f679d4263e8..32e48e21188 100644 --- a/tools/node_modules/eslint/lib/rules/no-class-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-class-assign.js @@ -17,7 +17,7 @@ module.exports = { type: "problem", docs: { - description: "disallow reassigning class members", + description: "Disallow reassigning class members", recommended: true, url: "https://eslint.org/docs/rules/no-class-assign" }, diff --git a/tools/node_modules/eslint/lib/rules/no-compare-neg-zero.js b/tools/node_modules/eslint/lib/rules/no-compare-neg-zero.js index fb56b99c58b..9715c2f0f37 100644 --- a/tools/node_modules/eslint/lib/rules/no-compare-neg-zero.js +++ b/tools/node_modules/eslint/lib/rules/no-compare-neg-zero.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "disallow comparing against -0", + description: "Disallow comparing against -0", recommended: true, url: "https://eslint.org/docs/rules/no-compare-neg-zero" }, diff --git a/tools/node_modules/eslint/lib/rules/no-cond-assign.js b/tools/node_modules/eslint/lib/rules/no-cond-assign.js index 30d5b3bdaee..59efb341f09 100644 --- a/tools/node_modules/eslint/lib/rules/no-cond-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-cond-assign.js @@ -34,7 +34,7 @@ module.exports = { type: "problem", docs: { - description: "disallow assignment operators in conditional expressions", + description: "Disallow assignment operators in conditional expressions", recommended: true, url: "https://eslint.org/docs/rules/no-cond-assign" }, diff --git a/tools/node_modules/eslint/lib/rules/no-confusing-arrow.js b/tools/node_modules/eslint/lib/rules/no-confusing-arrow.js index 9cdd0a85dbb..d2b6641b74f 100644 --- a/tools/node_modules/eslint/lib/rules/no-confusing-arrow.js +++ b/tools/node_modules/eslint/lib/rules/no-confusing-arrow.js @@ -31,7 +31,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow arrow functions where they could be confused with comparisons", + description: "Disallow arrow functions where they could be confused with comparisons", recommended: false, url: "https://eslint.org/docs/rules/no-confusing-arrow" }, diff --git a/tools/node_modules/eslint/lib/rules/no-console.js b/tools/node_modules/eslint/lib/rules/no-console.js index c0802e23dc7..bad6b6f4ee8 100644 --- a/tools/node_modules/eslint/lib/rules/no-console.js +++ b/tools/node_modules/eslint/lib/rules/no-console.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `console`", + description: "Disallow the use of `console`", recommended: false, url: "https://eslint.org/docs/rules/no-console" }, @@ -72,7 +72,7 @@ module.exports = { function isAllowed(node) { const propertyName = astUtils.getStaticPropertyName(node); - return propertyName && allowed.indexOf(propertyName) !== -1; + return propertyName && allowed.includes(propertyName); } /** diff --git a/tools/node_modules/eslint/lib/rules/no-const-assign.js b/tools/node_modules/eslint/lib/rules/no-const-assign.js index b5f7c37a98f..55e40c8849f 100644 --- a/tools/node_modules/eslint/lib/rules/no-const-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-const-assign.js @@ -17,7 +17,7 @@ module.exports = { type: "problem", docs: { - description: "disallow reassigning `const` variables", + description: "Disallow reassigning `const` variables", recommended: true, url: "https://eslint.org/docs/rules/no-const-assign" }, diff --git a/tools/node_modules/eslint/lib/rules/no-constant-binary-expression.js b/tools/node_modules/eslint/lib/rules/no-constant-binary-expression.js new file mode 100644 index 00000000000..dccfa2f5826 --- /dev/null +++ b/tools/node_modules/eslint/lib/rules/no-constant-binary-expression.js @@ -0,0 +1,500 @@ +/** + * @fileoverview Rule to flag constant comparisons and logical expressions that always/never short circuit + * @author Jordan Eldredge + */ + +"use strict"; + +const globals = require("globals"); +const { isNullLiteral, isConstant, isReferenceToGlobalVariable, isLogicalAssignmentOperator } = require("./utils/ast-utils"); + +const NUMERIC_OR_STRING_BINARY_OPERATORS = new Set(["+", "-", "*", "/", "%", "|", "^", "&", "**", "<<", ">>", ">>>"]); + +//------------------------------------------------------------------------------ +// Helpers +//------------------------------------------------------------------------------ + +/** + * Test if an AST node has a statically knowable constant nullishness. Meaning, + * it will always resolve to a constant value of either: `null`, `undefined` + * or not `null` _or_ `undefined`. An expression that can vary between those + * three states at runtime would return `false`. + * @param {Scope} scope The scope in which the node was found. + * @param {ASTNode} node The AST node being tested. + * @returns {boolean} Does `node` have constant nullishness? + */ +function hasConstantNullishness(scope, node) { + switch (node.type) { + case "ObjectExpression": // Objects are never nullish + case "ArrayExpression": // Arrays are never nullish + case "ArrowFunctionExpression": // Functions never nullish + case "FunctionExpression": // Functions are never nullish + case "ClassExpression": // Classes are never nullish + case "NewExpression": // Objects are never nullish + case "Literal": // Nullish, or non-nullish, literals never change + case "TemplateLiteral": // A string is never nullish + case "UpdateExpression": // Numbers are never nullish + case "BinaryExpression": // Numbers, strings, or booleans are never nullish + return true; + case "CallExpression": { + if (node.callee.type !== "Identifier") { + return false; + } + const functionName = node.callee.name; + + return (functionName === "Boolean" || functionName === "String" || functionName === "Number") && + isReferenceToGlobalVariable(scope, node.callee); + } + case "AssignmentExpression": + if (node.operator === "=") { + return hasConstantNullishness(scope, node.right); + } + + /* + * Handling short-circuiting assignment operators would require + * walking the scope. We won't attempt that (for now...) / + */ + if (isLogicalAssignmentOperator(node.operator)) { + return false; + } + + /* + * The remaining assignment expressions all result in a numeric or + * string (non-nullish) value: + * "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "|=", "^=", "&=" + */ + + return true; + case "UnaryExpression": + + /* + * "void" Always returns `undefined` + * "typeof" All types are strings, and thus non-nullish + * "!" Boolean is never nullish + * "delete" Returns a boolean, which is never nullish + * Math operators always return numbers or strings, neither of which + * are non-nullish "+", "-", "~" + */ + + return true; + case "SequenceExpression": { + const last = node.expressions[node.expressions.length - 1]; + + return hasConstantNullishness(scope, last); + } + case "Identifier": + return node.name === "undefined" && isReferenceToGlobalVariable(scope, node); + case "JSXElement": // ESLint has a policy of not assuming any specific JSX behavior. + case "JSXFragment": + return false; + default: + return false; + } +} + +/** + * Test if an AST node is a boolean value that never changes. Specifically we + * test for: + * 1. Literal booleans (`true` or `false`) + * 2. Unary `!` expressions with a constant value + * 3. Constant booleans created via the `Boolean` global function + * @param {Scope} scope The scope in which the node was found. + * @param {ASTNode} node The node to test + * @returns {boolean} Is `node` guaranteed to be a boolean? + */ +function isStaticBoolean(scope, node) { + switch (node.type) { + case "Literal": + return typeof node.value === "boolean"; + case "CallExpression": + return node.callee.type === "Identifier" && node.callee.name === "Boolean" && + isReferenceToGlobalVariable(scope, node.callee) && + (node.arguments.length === 0 || isConstant(scope, node.arguments[0], true)); + case "UnaryExpression": + return node.operator === "!" && isConstant(scope, node.argument, true); + default: + return false; + } +} + + +/** + * Test if an AST node will always give the same result when compared to a + * boolean value. Note that comparison to boolean values is different than + * truthiness. + * https://262.ecma-international.org/5.1/#sec-11.9.3 + * + * Javascript `==` operator works by converting the boolean to `1` (true) or + * `+0` (false) and then checks the values `==` equality to that number. + * @param {Scope} scope The scope in which node was found. + * @param {ASTNode} node The node to test. + * @returns {boolean} Will `node` always coerce to the same boolean value? + */ +function hasConstantLooseBooleanComparison(scope, node) { + switch (node.type) { + case "ObjectExpression": + case "ClassExpression": + + /** + * In theory objects like: + * + * `{toString: () => a}` + * `{valueOf: () => a}` + * + * Or a classes like: + * + * `class { static toString() { return a } }` + * `class { static valueOf() { return a } }` + * + * Are not constant verifiably when `inBooleanPosition` is + * false, but it's an edge case we've opted not to handle. + */ + return true; + case "ArrayExpression": { + const nonSpreadElements = node.elements.filter(e => + + // Elements can be `null` in sparse arrays: `[,,]`; + e !== null && e.type !== "SpreadElement"); + + + /* + * Possible future direction if needed: We could check if the + * single value would result in variable boolean comparison. + * For now we will err on the side of caution since `[x]` could + * evaluate to `[0]` or `[1]`. + */ + return node.elements.length === 0 || nonSpreadElements.length > 1; + } + case "ArrowFunctionExpression": + case "FunctionExpression": + return true; + case "UnaryExpression": + if (node.operator === "void" || // Always returns `undefined` + node.operator === "typeof" // All `typeof` strings, when coerced to number, are not 0 or 1. + ) { + return true; + } + if (node.operator === "!") { + return isConstant(scope, node.argument, true); + } + + /* + * We won't try to reason about +, -, ~, or delete + * In theory, for the mathematical operators, we could look at the + * argument and try to determine if it coerces to a constant numeric + * value. + */ + return false; + case "NewExpression": // Objects might have custom `.valueOf` or `.toString`. + return false; + case "CallExpression": { + if (node.callee.type === "Identifier" && + node.callee.name === "Boolean" && + isReferenceToGlobalVariable(scope, node.callee) + ) { + return node.arguments.length === 0 || isConstant(scope, node.arguments[0], true); + } + return false; + } + case "Literal": // True or false, literals never change + return true; + case "Identifier": + return node.name === "undefined" && isReferenceToGlobalVariable(scope, node); + case "TemplateLiteral": + + /* + * In theory we could try to check if the quasi are sufficient to + * prove that the expression will always be true, but it would be + * tricky to get right. For example: `000.${foo}000` + */ + return node.expressions.length === 0; + case "AssignmentExpression": + if (node.operator === "=") { + return hasConstantLooseBooleanComparison(scope, node.right); + } + + /* + * Handling short-circuiting assignment operators would require + * walking the scope. We won't attempt that (for now...) + * + * The remaining assignment expressions all result in a numeric or + * string (non-nullish) values which could be truthy or falsy: + * "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "|=", "^=", "&=" + */ + return false; + case "SequenceExpression": { + const last = node.expressions[node.expressions.length - 1]; + + return hasConstantLooseBooleanComparison(scope, last); + } + case "JSXElement": // ESLint has a policy of not assuming any specific JSX behavior. + case "JSXFragment": + return false; + default: + return false; + } +} + + +/** + * Test if an AST node will always give the same result when _strictly_ compared + * to a boolean value. This can happen if the expression can never be boolean, or + * if it is always the same boolean value. + * @param {Scope} scope The scope in which the node was found. + * @param {ASTNode} node The node to test + * @returns {boolean} Will `node` always give the same result when compared to a + * static boolean value? + */ +function hasConstantStrictBooleanComparison(scope, node) { + switch (node.type) { + case "ObjectExpression": // Objects are not booleans + case "ArrayExpression": // Arrays are not booleans + case "ArrowFunctionExpression": // Functions are not booleans + case "FunctionExpression": + case "ClassExpression": // Classes are not booleans + case "NewExpression": // Objects are not booleans + case "TemplateLiteral": // Strings are not booleans + case "Literal": // True, false, or not boolean, literals never change. + case "UpdateExpression": // Numbers are not booleans + return true; + case "BinaryExpression": + return NUMERIC_OR_STRING_BINARY_OPERATORS.has(node.operator); + case "UnaryExpression": { + if (node.operator === "delete") { + return false; + } + if (node.operator === "!") { + return isConstant(scope, node.argument, true); + } + + /* + * The remaining operators return either strings or numbers, neither + * of which are boolean. + */ + return true; + } + case "SequenceExpression": { + const last = node.expressions[node.expressions.length - 1]; + + return hasConstantStrictBooleanComparison(scope, last); + } + case "Identifier": + return node.name === "undefined" && isReferenceToGlobalVariable(scope, node); + case "AssignmentExpression": + if (node.operator === "=") { + return hasConstantStrictBooleanComparison(scope, node.right); + } + + /* + * Handling short-circuiting assignment operators would require + * walking the scope. We won't attempt that (for now...) + */ + if (isLogicalAssignmentOperator(node.operator)) { + return false; + } + + /* + * The remaining assignment expressions all result in either a number + * or a string, neither of which can ever be boolean. + */ + return true; + case "CallExpression": { + if (node.callee.type !== "Identifier") { + return false; + } + const functionName = node.callee.name; + + if ( + (functionName === "String" || functionName === "Number") && + isReferenceToGlobalVariable(scope, node.callee) + ) { + return true; + } + if (functionName === "Boolean" && isReferenceToGlobalVariable(scope, node.callee)) { + return ( + node.arguments.length === 0 || isConstant(scope, node.arguments[0], true)); + } + return false; + } + case "JSXElement": // ESLint has a policy of not assuming any specific JSX behavior. + case "JSXFragment": + return false; + default: + return false; + } +} + +/** + * Test if an AST node will always result in a newly constructed object + * @param {Scope} scope The scope in which the node was found. + * @param {ASTNode} node The node to test + * @returns {boolean} Will `node` always be new? + */ +function isAlwaysNew(scope, node) { + switch (node.type) { + case "ObjectExpression": + case "ArrayExpression": + case "ArrowFunctionExpression": + case "FunctionExpression": + case "ClassExpression": + return true; + case "NewExpression": { + if (node.callee.type !== "Identifier") { + return false; + } + + /* + * All the built-in constructors are always new, but + * user-defined constructors could return a sentinel + * object. + * + * Catching these is especially useful for primitive constructures + * which return boxed values, a surprising gotcha' in JavaScript. + */ + return Object.hasOwnProperty.call(globals.builtin, node.callee.name) && + isReferenceToGlobalVariable(scope, node.callee); + } + case "Literal": + + // Regular expressions are objects, and thus always new + return typeof node.regex === "object"; + case "SequenceExpression": { + const last = node.expressions[node.expressions.length - 1]; + + return isAlwaysNew(scope, last); + } + case "AssignmentExpression": + if (node.operator === "=") { + return isAlwaysNew(scope, node.right); + } + return false; + case "ConditionalExpression": + return isAlwaysNew(scope, node.consequent) && isAlwaysNew(scope, node.alternate); + case "JSXElement": // ESLint has a policy of not assuming any specific JSX behavior. + case "JSXFragment": + return false; + default: + return false; + } +} + +/** + * Checks whether or not a node is `null` or `undefined`. Similar to the one + * found in ast-utils.js, but this one correctly handles the edge case that + * `undefined` has been redefined. + * @param {Scope} scope Scope in which the expression was found. + * @param {ASTNode} node A node to check. + * @returns {boolean} Whether or not the node is a `null` or `undefined`. + * @public + */ +function isNullOrUndefined(scope, node) { + return ( + isNullLiteral(node) || + (node.type === "Identifier" && node.name === "undefined" && isReferenceToGlobalVariable(scope, node)) || + (node.type === "UnaryExpression" && node.operator === "void") + ); +} + + +/** + * Checks if one operand will cause the result to be constant. + * @param {Scope} scope Scope in which the expression was found. + * @param {ASTNode} a One side of the expression + * @param {ASTNode} b The other side of the expression + * @param {string} operator The binary expression operator + * @returns {ASTNode | null} The node which will cause the expression to have a constant result. + */ +function findBinaryExpressionConstantOperand(scope, a, b, operator) { + if (operator === "==" || operator === "!=") { + if ( + (isNullOrUndefined(scope, a) && hasConstantNullishness(scope, b)) || + (isStaticBoolean(scope, a) && hasConstantLooseBooleanComparison(scope, b)) + ) { + return b; + } + } else if (operator === "===" || operator === "!==") { + if ( + (isNullOrUndefined(scope, a) && hasConstantNullishness(scope, b)) || + (isStaticBoolean(scope, a) && hasConstantStrictBooleanComparison(scope, b)) + ) { + return b; + } + } + return null; +} + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +/** @type {import('../shared/types').Rule} */ +module.exports = { + meta: { + type: "problem", + docs: { + description: "Disallow expressions where the operation doesn't affect the value", + recommended: false, + url: "https://eslint.org/docs/rules/no-constant-binary-expression" + }, + schema: [], + messages: { + constantBinaryOperand: "Unexpected constant binary expression. Compares constantly with the {{otherSide}}-hand side of the `{{operator}}`.", + constantShortCircuit: "Unexpected constant {{property}} on the left-hand side of a `{{operator}}` expression.", + alwaysNew: "Unexpected comparison to newly constructed object. These two values can never be equal.", + bothAlwaysNew: "Unexpected comparison of two newly constructed objects. These two values can never be equal." + } + }, + + create(context) { + return { + LogicalExpression(node) { + const { operator, left } = node; + const scope = context.getScope(); + + if ((operator === "&&" || operator === "||") && isConstant(scope, left, true)) { + context.report({ node: left, messageId: "constantShortCircuit", data: { property: "truthiness", operator } }); + } else if (operator === "??" && hasConstantNullishness(scope, left)) { + context.report({ node: left, messageId: "constantShortCircuit", data: { property: "nullishness", operator } }); + } + }, + BinaryExpression(node) { + const scope = context.getScope(); + const { right, left, operator } = node; + const rightConstantOperand = findBinaryExpressionConstantOperand(scope, left, right, operator); + const leftConstantOperand = findBinaryExpressionConstantOperand(scope, right, left, operator); + + if (rightConstantOperand) { + context.report({ node: rightConstantOperand, messageId: "constantBinaryOperand", data: { operator, otherSide: "left" } }); + } else if (leftConstantOperand) { + context.report({ node: leftConstantOperand, messageId: "constantBinaryOperand", data: { operator, otherSide: "right" } }); + } else if (operator === "===" || operator === "!==") { + if (isAlwaysNew(scope, left)) { + context.report({ node: left, messageId: "alwaysNew" }); + } else if (isAlwaysNew(scope, right)) { + context.report({ node: right, messageId: "alwaysNew" }); + } + } else if (operator === "==" || operator === "!=") { + + /* + * If both sides are "new", then both sides are objects and + * therefore they will be compared by reference even with `==` + * equality. + */ + if (isAlwaysNew(scope, left) && isAlwaysNew(scope, right)) { + context.report({ node: left, messageId: "bothAlwaysNew" }); + } + } + + } + + /* + * In theory we could handle short-circuiting assignment operators, + * for some constant values, but that would require walking the + * scope to find the value of the variable being assigned. This is + * dependant on https://github.com/eslint/eslint/issues/13776 + * + * AssignmentExpression() {}, + */ + }; + } +}; diff --git a/tools/node_modules/eslint/lib/rules/no-constant-condition.js b/tools/node_modules/eslint/lib/rules/no-constant-condition.js index 3d08c689aef..2ef687f6dca 100644 --- a/tools/node_modules/eslint/lib/rules/no-constant-condition.js +++ b/tools/node_modules/eslint/lib/rules/no-constant-condition.js @@ -5,6 +5,8 @@ "use strict"; +const { isConstant } = require("./utils/ast-utils"); + //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ @@ -19,7 +21,7 @@ module.exports = { type: "problem", docs: { - description: "disallow constant expressions in conditions", + description: "Disallow constant expressions in conditions", recommended: true, url: "https://eslint.org/docs/rules/no-constant-condition" }, @@ -53,201 +55,6 @@ module.exports = { // Helpers //-------------------------------------------------------------------------- - /** - * Returns literal's value converted to the Boolean type - * @param {ASTNode} node any `Literal` node - * @returns {boolean | null} `true` when node is truthy, `false` when node is falsy, - * `null` when it cannot be determined. - */ - function getBooleanValue(node) { - if (node.value === null) { - - /* - * it might be a null literal or bigint/regex literal in unsupported environments . - * https://github.com/estree/estree/blob/14df8a024956ea289bd55b9c2226a1d5b8a473ee/es5.md#regexpliteral - * https://github.com/estree/estree/blob/14df8a024956ea289bd55b9c2226a1d5b8a473ee/es2020.md#bigintliteral - */ - - if (node.raw === "null") { - return false; - } - - // regex is always truthy - if (typeof node.regex === "object") { - return true; - } - - return null; - } - - return !!node.value; - } - - /** - * Checks if a branch node of LogicalExpression short circuits the whole condition - * @param {ASTNode} node The branch of main condition which needs to be checked - * @param {string} operator The operator of the main LogicalExpression. - * @returns {boolean} true when condition short circuits whole condition - */ - function isLogicalIdentity(node, operator) { - switch (node.type) { - case "Literal": - return (operator === "||" && getBooleanValue(node) === true) || - (operator === "&&" && getBooleanValue(node) === false); - - case "UnaryExpression": - return (operator === "&&" && node.operator === "void"); - - case "LogicalExpression": - - /* - * handles `a && false || b` - * `false` is an identity element of `&&` but not `||` - */ - return operator === node.operator && - ( - isLogicalIdentity(node.left, operator) || - isLogicalIdentity(node.right, operator) - ); - - case "AssignmentExpression": - return ["||=", "&&="].includes(node.operator) && - operator === node.operator.slice(0, -1) && - isLogicalIdentity(node.right, operator); - - // no default - } - return false; - } - - /** - * Checks if an identifier is a reference to a global variable. - * @param {ASTNode} node An identifier node to check. - * @returns {boolean} `true` if the identifier is a reference to a global variable. - */ - function isReferenceToGlobalVariable(node) { - const scope = context.getScope(); - const reference = scope.references.find(ref => ref.identifier === node); - - return Boolean( - reference && - reference.resolved && - reference.resolved.scope.type === "global" && - reference.resolved.defs.length === 0 - ); - } - - /** - * Checks if a node has a constant truthiness value. - * @param {ASTNode} node The AST node to check. - * @param {boolean} inBooleanPosition `true` if checking the test of a - * condition. `false` in all other cases. When `false`, checks if -- for - * both string and number -- if coerced to that type, the value will - * be constant. - * @returns {Bool} true when node's truthiness is constant - * @private - */ - function isConstant(node, inBooleanPosition) { - - // node.elements can return null values in the case of sparse arrays ex. [,] - if (!node) { - return true; - } - switch (node.type) { - case "Literal": - case "ArrowFunctionExpression": - case "FunctionExpression": - return true; - case "ClassExpression": - case "ObjectExpression": - - /** - * In theory objects like: - * - * `{toString: () => a}` - * `{valueOf: () => a}` - * - * Or a classes like: - * - * `class { static toString() { return a } }` - * `class { static valueOf() { return a } }` - * - * Are not constant verifiably when `inBooleanPosition` is - * false, but it's an edge case we've opted not to handle. - */ - return true; - case "TemplateLiteral": - return (inBooleanPosition && node.quasis.some(quasi => quasi.value.cooked.length)) || - node.expressions.every(exp => isConstant(exp, false)); - - case "ArrayExpression": { - if (!inBooleanPosition) { - return node.elements.every(element => isConstant(element, false)); - } - return true; - } - - case "UnaryExpression": - if ( - node.operator === "void" || - node.operator === "typeof" && inBooleanPosition - ) { - return true; - } - - if (node.operator === "!") { - return isConstant(node.argument, true); - } - - return isConstant(node.argument, false); - - case "BinaryExpression": - return isConstant(node.left, false) && - isConstant(node.right, false) && - node.operator !== "in"; - - case "LogicalExpression": { - const isLeftConstant = isConstant(node.left, inBooleanPosition); - const isRightConstant = isConstant(node.right, inBooleanPosition); - const isLeftShortCircuit = (isLeftConstant && isLogicalIdentity(node.left, node.operator)); - const isRightShortCircuit = (inBooleanPosition && isRightConstant && isLogicalIdentity(node.right, node.operator)); - - return (isLeftConstant && isRightConstant) || - isLeftShortCircuit || - isRightShortCircuit; - } - case "NewExpression": - return inBooleanPosition; - case "AssignmentExpression": - if (node.operator === "=") { - return isConstant(node.right, inBooleanPosition); - } - - if (["||=", "&&="].includes(node.operator) && inBooleanPosition) { - return isLogicalIdentity(node.right, node.operator.slice(0, -1)); - } - - return false; - - case "SequenceExpression": - return isConstant(node.expressions[node.expressions.length - 1], inBooleanPosition); - case "SpreadElement": - return isConstant(node.argument, inBooleanPosition); - case "CallExpression": - if (node.callee.type === "Identifier" && node.callee.name === "Boolean") { - if (node.arguments.length === 0 || isConstant(node.arguments[0], true)) { - return isReferenceToGlobalVariable(node.callee); - } - } - return false; - case "Identifier": - return node.name === "undefined" && isReferenceToGlobalVariable(node); - - // no default - } - return false; - } - /** * Tracks when the given node contains a constant condition. * @param {ASTNode} node The AST node to check. @@ -255,7 +62,7 @@ module.exports = { * @private */ function trackConstantConditionLoop(node) { - if (node.test && isConstant(node.test, true)) { + if (node.test && isConstant(context.getScope(), node.test, true)) { loopsInCurrentScope.add(node); } } @@ -280,7 +87,7 @@ module.exports = { * @private */ function reportIfConstant(node) { - if (node.test && isConstant(node.test, true)) { + if (node.test && isConstant(context.getScope(), node.test, true)) { context.report({ node: node.test, messageId: "unexpected" }); } } diff --git a/tools/node_modules/eslint/lib/rules/no-constructor-return.js b/tools/node_modules/eslint/lib/rules/no-constructor-return.js index f8a717c75e5..911a32abcae 100644 --- a/tools/node_modules/eslint/lib/rules/no-constructor-return.js +++ b/tools/node_modules/eslint/lib/rules/no-constructor-return.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow returning value from constructor", + description: "Disallow returning value from constructor", recommended: false, url: "https://eslint.org/docs/rules/no-constructor-return" }, diff --git a/tools/node_modules/eslint/lib/rules/no-continue.js b/tools/node_modules/eslint/lib/rules/no-continue.js index 8658a7984bb..80381fc3f84 100644 --- a/tools/node_modules/eslint/lib/rules/no-continue.js +++ b/tools/node_modules/eslint/lib/rules/no-continue.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `continue` statements", + description: "Disallow `continue` statements", recommended: false, url: "https://eslint.org/docs/rules/no-continue" }, diff --git a/tools/node_modules/eslint/lib/rules/no-control-regex.js b/tools/node_modules/eslint/lib/rules/no-control-regex.js index 04f3449fb19..ba108437257 100644 --- a/tools/node_modules/eslint/lib/rules/no-control-regex.js +++ b/tools/node_modules/eslint/lib/rules/no-control-regex.js @@ -30,10 +30,12 @@ const collector = new (class { } } - collectControlChars(regexpStr) { + collectControlChars(regexpStr, flags) { + const uFlag = typeof flags === "string" && flags.includes("u"); + try { this._source = regexpStr; - this._validator.validatePattern(regexpStr); // Call onCharacter hook + this._validator.validatePattern(regexpStr, void 0, void 0, uFlag); // Call onCharacter hook } catch { // Ignore syntax errors in RegExp. @@ -52,7 +54,7 @@ module.exports = { type: "problem", docs: { - description: "disallow control characters in regular expressions", + description: "Disallow control characters in regular expressions", recommended: true, url: "https://eslint.org/docs/rules/no-control-regex" }, @@ -68,13 +70,15 @@ module.exports = { /** * Get the regex expression - * @param {ASTNode} node node to evaluate - * @returns {RegExp|null} Regex if found else null + * @param {ASTNode} node `Literal` node to evaluate + * @returns {{ pattern: string, flags: string | null } | null} Regex if found (the given node is either a regex literal + * or a string literal that is the pattern argument of a RegExp constructor call). Otherwise `null`. If flags cannot be determined, + * the `flags` property will be `null`. * @private */ - function getRegExpPattern(node) { + function getRegExp(node) { if (node.regex) { - return node.regex.pattern; + return node.regex; } if (typeof node.value === "string" && (node.parent.type === "NewExpression" || node.parent.type === "CallExpression") && @@ -82,7 +86,15 @@ module.exports = { node.parent.callee.name === "RegExp" && node.parent.arguments[0] === node ) { - return node.value; + const pattern = node.value; + const flags = + node.parent.arguments.length > 1 && + node.parent.arguments[1].type === "Literal" && + typeof node.parent.arguments[1].value === "string" + ? node.parent.arguments[1].value + : null; + + return { pattern, flags }; } return null; @@ -90,10 +102,11 @@ module.exports = { return { Literal(node) { - const pattern = getRegExpPattern(node); + const regExp = getRegExp(node); - if (pattern) { - const controlCharacters = collector.collectControlChars(pattern); + if (regExp) { + const { pattern, flags } = regExp; + const controlCharacters = collector.collectControlChars(pattern, flags); if (controlCharacters.length > 0) { context.report({ diff --git a/tools/node_modules/eslint/lib/rules/no-debugger.js b/tools/node_modules/eslint/lib/rules/no-debugger.js index e62db1b7393..3b88079a0fb 100644 --- a/tools/node_modules/eslint/lib/rules/no-debugger.js +++ b/tools/node_modules/eslint/lib/rules/no-debugger.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow the use of `debugger`", + description: "Disallow the use of `debugger`", recommended: true, url: "https://eslint.org/docs/rules/no-debugger" }, diff --git a/tools/node_modules/eslint/lib/rules/no-delete-var.js b/tools/node_modules/eslint/lib/rules/no-delete-var.js index 1d1c710b098..41021bd46a7 100644 --- a/tools/node_modules/eslint/lib/rules/no-delete-var.js +++ b/tools/node_modules/eslint/lib/rules/no-delete-var.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow deleting variables", + description: "Disallow deleting variables", recommended: true, url: "https://eslint.org/docs/rules/no-delete-var" }, diff --git a/tools/node_modules/eslint/lib/rules/no-div-regex.js b/tools/node_modules/eslint/lib/rules/no-div-regex.js index 175f6c20104..dd1c5782a58 100644 --- a/tools/node_modules/eslint/lib/rules/no-div-regex.js +++ b/tools/node_modules/eslint/lib/rules/no-div-regex.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow division operators explicitly at the beginning of regular expressions", + description: "Disallow division operators explicitly at the beginning of regular expressions", recommended: false, url: "https://eslint.org/docs/rules/no-div-regex" }, diff --git a/tools/node_modules/eslint/lib/rules/no-dupe-args.js b/tools/node_modules/eslint/lib/rules/no-dupe-args.js index 13090e19a87..faf253793ec 100644 --- a/tools/node_modules/eslint/lib/rules/no-dupe-args.js +++ b/tools/node_modules/eslint/lib/rules/no-dupe-args.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate arguments in `function` definitions", + description: "Disallow duplicate arguments in `function` definitions", recommended: true, url: "https://eslint.org/docs/rules/no-dupe-args" }, diff --git a/tools/node_modules/eslint/lib/rules/no-dupe-class-members.js b/tools/node_modules/eslint/lib/rules/no-dupe-class-members.js index ae61f164ca9..8eca7878a46 100644 --- a/tools/node_modules/eslint/lib/rules/no-dupe-class-members.js +++ b/tools/node_modules/eslint/lib/rules/no-dupe-class-members.js @@ -17,7 +17,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate class members", + description: "Disallow duplicate class members", recommended: true, url: "https://eslint.org/docs/rules/no-dupe-class-members" }, diff --git a/tools/node_modules/eslint/lib/rules/no-dupe-else-if.js b/tools/node_modules/eslint/lib/rules/no-dupe-else-if.js index 1e1d549185d..49db5ec7c6c 100644 --- a/tools/node_modules/eslint/lib/rules/no-dupe-else-if.js +++ b/tools/node_modules/eslint/lib/rules/no-dupe-else-if.js @@ -52,7 +52,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate conditions in if-else-if chains", + description: "Disallow duplicate conditions in if-else-if chains", recommended: true, url: "https://eslint.org/docs/rules/no-dupe-else-if" }, diff --git a/tools/node_modules/eslint/lib/rules/no-dupe-keys.js b/tools/node_modules/eslint/lib/rules/no-dupe-keys.js index dac13cf9e09..65c34bc5fd1 100644 --- a/tools/node_modules/eslint/lib/rules/no-dupe-keys.js +++ b/tools/node_modules/eslint/lib/rules/no-dupe-keys.js @@ -88,7 +88,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate keys in object literals", + description: "Disallow duplicate keys in object literals", recommended: true, url: "https://eslint.org/docs/rules/no-dupe-keys" }, diff --git a/tools/node_modules/eslint/lib/rules/no-duplicate-case.js b/tools/node_modules/eslint/lib/rules/no-duplicate-case.js index a0c0b31308b..d436afdd007 100644 --- a/tools/node_modules/eslint/lib/rules/no-duplicate-case.js +++ b/tools/node_modules/eslint/lib/rules/no-duplicate-case.js @@ -22,7 +22,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate case labels", + description: "Disallow duplicate case labels", recommended: true, url: "https://eslint.org/docs/rules/no-duplicate-case" }, diff --git a/tools/node_modules/eslint/lib/rules/no-duplicate-imports.js b/tools/node_modules/eslint/lib/rules/no-duplicate-imports.js index 947bb30c2e1..619e2588e91 100644 --- a/tools/node_modules/eslint/lib/rules/no-duplicate-imports.js +++ b/tools/node_modules/eslint/lib/rules/no-duplicate-imports.js @@ -233,7 +233,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate module imports", + description: "Disallow duplicate module imports", recommended: false, url: "https://eslint.org/docs/rules/no-duplicate-imports" }, diff --git a/tools/node_modules/eslint/lib/rules/no-else-return.js b/tools/node_modules/eslint/lib/rules/no-else-return.js index 3662fc8c6e7..d1da3aa49cb 100644 --- a/tools/node_modules/eslint/lib/rules/no-else-return.js +++ b/tools/node_modules/eslint/lib/rules/no-else-return.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `else` blocks after `return` statements in `if` statements", + description: "Disallow `else` blocks after `return` statements in `if` statements", recommended: false, url: "https://eslint.org/docs/rules/no-else-return" }, diff --git a/tools/node_modules/eslint/lib/rules/no-empty-character-class.js b/tools/node_modules/eslint/lib/rules/no-empty-character-class.js index f75f59191aa..2d294f4bded 100644 --- a/tools/node_modules/eslint/lib/rules/no-empty-character-class.js +++ b/tools/node_modules/eslint/lib/rules/no-empty-character-class.js @@ -30,7 +30,7 @@ module.exports = { type: "problem", docs: { - description: "disallow empty character classes in regular expressions", + description: "Disallow empty character classes in regular expressions", recommended: true, url: "https://eslint.org/docs/rules/no-empty-character-class" }, diff --git a/tools/node_modules/eslint/lib/rules/no-empty-function.js b/tools/node_modules/eslint/lib/rules/no-empty-function.js index 6e73d63b98a..4c9daa931e2 100644 --- a/tools/node_modules/eslint/lib/rules/no-empty-function.js +++ b/tools/node_modules/eslint/lib/rules/no-empty-function.js @@ -95,7 +95,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow empty functions", + description: "Disallow empty functions", recommended: false, url: "https://eslint.org/docs/rules/no-empty-function" }, @@ -144,7 +144,7 @@ module.exports = { filter: astUtils.isCommentToken }); - if (allowed.indexOf(kind) === -1 && + if (!allowed.includes(kind) && node.body.type === "BlockStatement" && node.body.body.length === 0 && innerComments.length === 0 diff --git a/tools/node_modules/eslint/lib/rules/no-empty-pattern.js b/tools/node_modules/eslint/lib/rules/no-empty-pattern.js index 2de575fcf08..5a497f03972 100644 --- a/tools/node_modules/eslint/lib/rules/no-empty-pattern.js +++ b/tools/node_modules/eslint/lib/rules/no-empty-pattern.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "disallow empty destructuring patterns", + description: "Disallow empty destructuring patterns", recommended: true, url: "https://eslint.org/docs/rules/no-empty-pattern" }, diff --git a/tools/node_modules/eslint/lib/rules/no-empty.js b/tools/node_modules/eslint/lib/rules/no-empty.js index f04ee2cb320..459140a2e70 100644 --- a/tools/node_modules/eslint/lib/rules/no-empty.js +++ b/tools/node_modules/eslint/lib/rules/no-empty.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow empty block statements", + description: "Disallow empty block statements", recommended: true, url: "https://eslint.org/docs/rules/no-empty" }, diff --git a/tools/node_modules/eslint/lib/rules/no-eq-null.js b/tools/node_modules/eslint/lib/rules/no-eq-null.js index b693737126d..9a886803dc5 100644 --- a/tools/node_modules/eslint/lib/rules/no-eq-null.js +++ b/tools/node_modules/eslint/lib/rules/no-eq-null.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `null` comparisons without type-checking operators", + description: "Disallow `null` comparisons without type-checking operators", recommended: false, url: "https://eslint.org/docs/rules/no-eq-null" }, diff --git a/tools/node_modules/eslint/lib/rules/no-eval.js b/tools/node_modules/eslint/lib/rules/no-eval.js index ae6d71b80c9..03f7b1f691c 100644 --- a/tools/node_modules/eslint/lib/rules/no-eval.js +++ b/tools/node_modules/eslint/lib/rules/no-eval.js @@ -43,7 +43,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `eval()`", + description: "Disallow the use of `eval()`", recommended: false, url: "https://eslint.org/docs/rules/no-eval" }, @@ -72,21 +72,25 @@ module.exports = { let funcInfo = null; /** - * Pushs a variable scope (Program or Function) information to the stack. + * Pushs a `this` scope (non-arrow function, class static block, or class field initializer) information to the stack. + * Top-level scopes are handled separately. * * This is used in order to check whether or not `this` binding is a * reference to the global object. - * @param {ASTNode} node A node of the scope. This is one of Program, - * FunctionDeclaration, FunctionExpression, and ArrowFunctionExpression. + * @param {ASTNode} node A node of the scope. + * For functions, this is one of FunctionDeclaration, FunctionExpression. + * For class static blocks, this is StaticBlock. + * For class field initializers, this can be any node that is PropertyDefinition#value. * @returns {void} */ - function enterVarScope(node) { + function enterThisScope(node) { const strict = context.getScope().isStrict; funcInfo = { upper: funcInfo, node, strict, + isTopLevelOfScript: false, defaultThis: false, initialized: strict }; @@ -96,7 +100,7 @@ module.exports = { * Pops a variable scope from the stack. * @returns {void} */ - function exitVarScope() { + function exitThisScope() { funcInfo = funcInfo.upper; } @@ -222,12 +226,14 @@ module.exports = { strict = scope.isStrict || node.sourceType === "module" || - (features.globalReturn && scope.childScopes[0].isStrict); + (features.globalReturn && scope.childScopes[0].isStrict), + isTopLevelOfScript = node.sourceType !== "module" && !features.globalReturn; funcInfo = { upper: null, node, strict, + isTopLevelOfScript, defaultThis: true, initialized: true }; @@ -236,21 +242,19 @@ module.exports = { "Program:exit"() { const globalScope = context.getScope(); - exitVarScope(); + exitThisScope(); reportAccessingEval(globalScope); reportAccessingEvalViaGlobalObject(globalScope); }, - FunctionDeclaration: enterVarScope, - "FunctionDeclaration:exit": exitVarScope, - FunctionExpression: enterVarScope, - "FunctionExpression:exit": exitVarScope, - ArrowFunctionExpression: enterVarScope, - "ArrowFunctionExpression:exit": exitVarScope, - "PropertyDefinition > *.value": enterVarScope, - "PropertyDefinition > *.value:exit": exitVarScope, - StaticBlock: enterVarScope, - "StaticBlock:exit": exitVarScope, + FunctionDeclaration: enterThisScope, + "FunctionDeclaration:exit": exitThisScope, + FunctionExpression: enterThisScope, + "FunctionExpression:exit": exitThisScope, + "PropertyDefinition > *.value": enterThisScope, + "PropertyDefinition > *.value:exit": exitThisScope, + StaticBlock: enterThisScope, + "StaticBlock:exit": exitThisScope, ThisExpression(node) { if (!isMember(node.parent, "eval")) { @@ -269,7 +273,8 @@ module.exports = { ); } - if (!funcInfo.strict && funcInfo.defaultThis) { + // `this` at the top level of scripts always refers to the global object + if (funcInfo.isTopLevelOfScript || (!funcInfo.strict && funcInfo.defaultThis)) { // `this.eval` is possible built-in `eval`. report(node.parent); diff --git a/tools/node_modules/eslint/lib/rules/no-ex-assign.js b/tools/node_modules/eslint/lib/rules/no-ex-assign.js index 3db14206b0b..4c77b1128ad 100644 --- a/tools/node_modules/eslint/lib/rules/no-ex-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-ex-assign.js @@ -17,7 +17,7 @@ module.exports = { type: "problem", docs: { - description: "disallow reassigning exceptions in `catch` clauses", + description: "Disallow reassigning exceptions in `catch` clauses", recommended: true, url: "https://eslint.org/docs/rules/no-ex-assign" }, diff --git a/tools/node_modules/eslint/lib/rules/no-extend-native.js b/tools/node_modules/eslint/lib/rules/no-extend-native.js index 771200f26f7..52c6bd31103 100644 --- a/tools/node_modules/eslint/lib/rules/no-extend-native.js +++ b/tools/node_modules/eslint/lib/rules/no-extend-native.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow extending native types", + description: "Disallow extending native types", recommended: false, url: "https://eslint.org/docs/rules/no-extend-native" }, diff --git a/tools/node_modules/eslint/lib/rules/no-extra-bind.js b/tools/node_modules/eslint/lib/rules/no-extra-bind.js index 561cb1a33f8..caf6d8b1f80 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-bind.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-bind.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary calls to `.bind()`", + description: "Disallow unnecessary calls to `.bind()`", recommended: false, url: "https://eslint.org/docs/rules/no-extra-bind" }, diff --git a/tools/node_modules/eslint/lib/rules/no-extra-boolean-cast.js b/tools/node_modules/eslint/lib/rules/no-extra-boolean-cast.js index f45ac616ed9..45252fee0e9 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-boolean-cast.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-boolean-cast.js @@ -24,7 +24,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary boolean casts", + description: "Disallow unnecessary boolean casts", recommended: true, url: "https://eslint.org/docs/rules/no-extra-boolean-cast" }, @@ -51,13 +51,13 @@ module.exports = { const sourceCode = context.getSourceCode(); // Node types which have a test which will coerce values to booleans. - const BOOLEAN_NODE_TYPES = [ + const BOOLEAN_NODE_TYPES = new Set([ "IfStatement", "DoWhileStatement", "WhileStatement", "ConditionalExpression", "ForStatement" - ]; + ]); /** * Check if a node is a Boolean function or constructor. @@ -95,7 +95,7 @@ module.exports = { (isBooleanFunctionOrConstructorCall(node.parent) && node === node.parent.arguments[0]) || - (BOOLEAN_NODE_TYPES.indexOf(node.parent.type) !== -1 && + (BOOLEAN_NODE_TYPES.has(node.parent.type) && node === node.parent.test) || // ! @@ -188,7 +188,7 @@ module.exports = { } return precedence(node) <= precedence(parent); - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error(`Unexpected parent type: ${parent.type}`); } diff --git a/tools/node_modules/eslint/lib/rules/no-extra-label.js b/tools/node_modules/eslint/lib/rules/no-extra-label.js index 9186a9faca1..bda3dd0efb0 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-label.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-label.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary labels", + description: "Disallow unnecessary labels", recommended: false, url: "https://eslint.org/docs/rules/no-extra-label" }, diff --git a/tools/node_modules/eslint/lib/rules/no-extra-parens.js b/tools/node_modules/eslint/lib/rules/no-extra-parens.js index 5b54ae26fe3..246a5a0d5e1 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-parens.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-parens.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "disallow unnecessary parentheses", + description: "Disallow unnecessary parentheses", recommended: false, url: "https://eslint.org/docs/rules/no-extra-parens" }, @@ -634,10 +634,10 @@ module.exports = { currentNode = currentNode.parent; - /* istanbul ignore if */ + /* c8 ignore start */ if (currentNode === null) { throw new Error("Nodes are not in the ancestor-descendant relationship."); - } + }/* c8 ignore stop */ path.push(currentNode); } diff --git a/tools/node_modules/eslint/lib/rules/no-extra-semi.js b/tools/node_modules/eslint/lib/rules/no-extra-semi.js index 89d9fce57f0..c61ad37dce8 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-semi.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-semi.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary semicolons", + description: "Disallow unnecessary semicolons", recommended: true, url: "https://eslint.org/docs/rules/no-extra-semi" }, @@ -98,7 +98,7 @@ module.exports = { "WithStatement" ]; - if (allowedParentTypes.indexOf(parent.type) === -1) { + if (!allowedParentTypes.includes(parent.type)) { report(node); } }, diff --git a/tools/node_modules/eslint/lib/rules/no-fallthrough.js b/tools/node_modules/eslint/lib/rules/no-fallthrough.js index f3b7c8554ad..536aa213f8a 100644 --- a/tools/node_modules/eslint/lib/rules/no-fallthrough.js +++ b/tools/node_modules/eslint/lib/rules/no-fallthrough.js @@ -64,7 +64,7 @@ module.exports = { type: "problem", docs: { - description: "disallow fallthrough of `case` statements", + description: "Disallow fallthrough of `case` statements", recommended: true, url: "https://eslint.org/docs/rules/no-fallthrough" }, @@ -76,6 +76,10 @@ module.exports = { commentPattern: { type: "string", default: "" + }, + allowEmptyCase: { + type: "boolean", + default: false } }, additionalProperties: false @@ -91,6 +95,7 @@ module.exports = { const options = context.options[0] || {}; let currentCodePath = null; const sourceCode = context.getSourceCode(); + const allowEmptyCase = options.allowEmptyCase || false; /* * We need to use leading comments of the next SwitchCase node because @@ -104,7 +109,6 @@ module.exports = { } else { fallthroughCommentPattern = DEFAULT_FALLTHROUGH_COMMENT; } - return { onCodePathStart(codePath) { currentCodePath = codePath; @@ -119,7 +123,8 @@ module.exports = { * Checks whether or not there is a fallthrough comment. * And reports the previous fallthrough node if that does not exist. */ - if (fallthroughCase && !hasFallthroughComment(fallthroughCase, node, context, fallthroughCommentPattern)) { + + if (fallthroughCase && (!hasFallthroughComment(fallthroughCase, node, context, fallthroughCommentPattern))) { context.report({ messageId: node.test ? "case" : "default", node @@ -137,7 +142,7 @@ module.exports = { * And allows empty cases and the last case. */ if (currentCodePath.currentSegments.some(isReachable) && - (node.consequent.length > 0 || hasBlankLinesBetween(node, nextToken)) && + (node.consequent.length > 0 || (!allowEmptyCase && hasBlankLinesBetween(node, nextToken))) && node.parent.cases[node.parent.cases.length - 1] !== node) { fallthroughCase = node; } diff --git a/tools/node_modules/eslint/lib/rules/no-floating-decimal.js b/tools/node_modules/eslint/lib/rules/no-floating-decimal.js index 8831bb824d0..cce50bf9dad 100644 --- a/tools/node_modules/eslint/lib/rules/no-floating-decimal.js +++ b/tools/node_modules/eslint/lib/rules/no-floating-decimal.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow leading or trailing decimal points in numeric literals", + description: "Disallow leading or trailing decimal points in numeric literals", recommended: false, url: "https://eslint.org/docs/rules/no-floating-decimal" }, diff --git a/tools/node_modules/eslint/lib/rules/no-func-assign.js b/tools/node_modules/eslint/lib/rules/no-func-assign.js index 04a7dd37055..2c8fa6a8e08 100644 --- a/tools/node_modules/eslint/lib/rules/no-func-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-func-assign.js @@ -17,7 +17,7 @@ module.exports = { type: "problem", docs: { - description: "disallow reassigning `function` declarations", + description: "Disallow reassigning `function` declarations", recommended: true, url: "https://eslint.org/docs/rules/no-func-assign" }, diff --git a/tools/node_modules/eslint/lib/rules/no-global-assign.js b/tools/node_modules/eslint/lib/rules/no-global-assign.js index 340c6c798c3..9f2f0ee3642 100644 --- a/tools/node_modules/eslint/lib/rules/no-global-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-global-assign.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow assignments to native objects or read-only global variables", + description: "Disallow assignments to native objects or read-only global variables", recommended: true, url: "https://eslint.org/docs/rules/no-global-assign" }, @@ -78,7 +78,7 @@ module.exports = { * @returns {void} */ function checkVariable(variable) { - if (variable.writeable === false && exceptions.indexOf(variable.name) === -1) { + if (variable.writeable === false && !exceptions.includes(variable.name)) { variable.references.forEach(checkReference); } } diff --git a/tools/node_modules/eslint/lib/rules/no-implicit-coercion.js b/tools/node_modules/eslint/lib/rules/no-implicit-coercion.js index f646093f555..c2367715d9d 100644 --- a/tools/node_modules/eslint/lib/rules/no-implicit-coercion.js +++ b/tools/node_modules/eslint/lib/rules/no-implicit-coercion.js @@ -30,9 +30,9 @@ function parseOptions(options) { } /** - * Checks whether or not a node is a double logical nigating. + * Checks whether or not a node is a double logical negating. * @param {ASTNode} node An UnaryExpression node to check. - * @returns {boolean} Whether or not the node is a double logical nigating. + * @returns {boolean} Whether or not the node is a double logical negating. */ function isDoubleLogicalNegating(node) { return ( @@ -173,7 +173,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow shorthand type conversions", + description: "Disallow shorthand type conversions", recommended: false, url: "https://eslint.org/docs/rules/no-implicit-coercion" }, @@ -257,7 +257,7 @@ module.exports = { let operatorAllowed; // !!foo - operatorAllowed = options.allow.indexOf("!!") >= 0; + operatorAllowed = options.allow.includes("!!"); if (!operatorAllowed && options.boolean && isDoubleLogicalNegating(node)) { const recommendation = `Boolean(${sourceCode.getText(node.argument.argument)})`; @@ -265,7 +265,7 @@ module.exports = { } // ~foo.indexOf(bar) - operatorAllowed = options.allow.indexOf("~") >= 0; + operatorAllowed = options.allow.includes("~"); if (!operatorAllowed && options.boolean && isBinaryNegatingOfIndexOf(node)) { // `foo?.indexOf(bar) !== -1` will be true (== found) if the `foo` is nullish. So use `>= 0` in that case. @@ -276,7 +276,7 @@ module.exports = { } // +foo - operatorAllowed = options.allow.indexOf("+") >= 0; + operatorAllowed = options.allow.includes("+"); if (!operatorAllowed && options.number && node.operator === "+" && !isNumeric(node.argument)) { const recommendation = `Number(${sourceCode.getText(node.argument)})`; @@ -289,7 +289,7 @@ module.exports = { let operatorAllowed; // 1 * foo - operatorAllowed = options.allow.indexOf("*") >= 0; + operatorAllowed = options.allow.includes("*"); const nonNumericOperand = !operatorAllowed && options.number && isMultiplyByOne(node) && getNonNumericOperand(node); if (nonNumericOperand) { @@ -299,7 +299,7 @@ module.exports = { } // "" + foo - operatorAllowed = options.allow.indexOf("+") >= 0; + operatorAllowed = options.allow.includes("+"); if (!operatorAllowed && options.string && isConcatWithEmptyString(node)) { const recommendation = `String(${sourceCode.getText(getNonEmptyOperand(node))})`; @@ -310,7 +310,7 @@ module.exports = { AssignmentExpression(node) { // foo += "" - const operatorAllowed = options.allow.indexOf("+") >= 0; + const operatorAllowed = options.allow.includes("+"); if (!operatorAllowed && options.string && isAppendEmptyString(node)) { const code = sourceCode.getText(getNonEmptyOperand(node)); diff --git a/tools/node_modules/eslint/lib/rules/no-implicit-globals.js b/tools/node_modules/eslint/lib/rules/no-implicit-globals.js index 5dd6aa71acd..934630ea070 100644 --- a/tools/node_modules/eslint/lib/rules/no-implicit-globals.js +++ b/tools/node_modules/eslint/lib/rules/no-implicit-globals.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow declarations in the global scope", + description: "Disallow declarations in the global scope", recommended: false, url: "https://eslint.org/docs/rules/no-implicit-globals" }, diff --git a/tools/node_modules/eslint/lib/rules/no-implied-eval.js b/tools/node_modules/eslint/lib/rules/no-implied-eval.js index 38de5b31ccc..44f146171aa 100644 --- a/tools/node_modules/eslint/lib/rules/no-implied-eval.js +++ b/tools/node_modules/eslint/lib/rules/no-implied-eval.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `eval()`-like methods", + description: "Disallow the use of `eval()`-like methods", recommended: false, url: "https://eslint.org/docs/rules/no-implied-eval" }, diff --git a/tools/node_modules/eslint/lib/rules/no-import-assign.js b/tools/node_modules/eslint/lib/rules/no-import-assign.js index 385386e9a43..fc104fe6c46 100644 --- a/tools/node_modules/eslint/lib/rules/no-import-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-import-assign.js @@ -180,7 +180,7 @@ module.exports = { type: "problem", docs: { - description: "disallow assigning to imported bindings", + description: "Disallow assigning to imported bindings", recommended: true, url: "https://eslint.org/docs/rules/no-import-assign" }, diff --git a/tools/node_modules/eslint/lib/rules/no-inline-comments.js b/tools/node_modules/eslint/lib/rules/no-inline-comments.js index 2ed7feb46b8..366f567f670 100644 --- a/tools/node_modules/eslint/lib/rules/no-inline-comments.js +++ b/tools/node_modules/eslint/lib/rules/no-inline-comments.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow inline comments after code", + description: "Disallow inline comments after code", recommended: false, url: "https://eslint.org/docs/rules/no-inline-comments" }, diff --git a/tools/node_modules/eslint/lib/rules/no-inner-declarations.js b/tools/node_modules/eslint/lib/rules/no-inner-declarations.js index 3b0feb71a3f..932816641e0 100644 --- a/tools/node_modules/eslint/lib/rules/no-inner-declarations.js +++ b/tools/node_modules/eslint/lib/rules/no-inner-declarations.js @@ -48,7 +48,7 @@ module.exports = { type: "problem", docs: { - description: "disallow variable or `function` declarations in nested blocks", + description: "Disallow variable or `function` declarations in nested blocks", recommended: true, url: "https://eslint.org/docs/rules/no-inner-declarations" }, diff --git a/tools/node_modules/eslint/lib/rules/no-invalid-regexp.js b/tools/node_modules/eslint/lib/rules/no-invalid-regexp.js index 92ac5125e60..0f1d9c7bedc 100644 --- a/tools/node_modules/eslint/lib/rules/no-invalid-regexp.js +++ b/tools/node_modules/eslint/lib/rules/no-invalid-regexp.js @@ -23,7 +23,7 @@ module.exports = { type: "problem", docs: { - description: "disallow invalid regular expression strings in `RegExp` constructors", + description: "Disallow invalid regular expression strings in `RegExp` constructors", recommended: true, url: "https://eslint.org/docs/rules/no-invalid-regexp" }, diff --git a/tools/node_modules/eslint/lib/rules/no-invalid-this.js b/tools/node_modules/eslint/lib/rules/no-invalid-this.js index 64e4d964a84..b9cb43af5d7 100644 --- a/tools/node_modules/eslint/lib/rules/no-invalid-this.js +++ b/tools/node_modules/eslint/lib/rules/no-invalid-this.js @@ -1,5 +1,5 @@ /** - * @fileoverview A rule to disallow `this` keywords outside of classes or class-like objects. + * @fileoverview A rule to disallow `this` keywords in contexts where the value of `this` is `undefined`. * @author Toru Nagashima */ @@ -36,7 +36,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `this` keywords outside of classes or class-like objects", + description: "Disallow use of `this` in contexts where the value of `this` is `undefined`", recommended: false, url: "https://eslint.org/docs/rules/no-invalid-this" }, @@ -98,11 +98,11 @@ module.exports = { const scope = context.getScope(); const features = context.parserOptions.ecmaFeatures || {}; + // `this` at the top level of scripts always refers to the global object stack.push({ init: true, node, valid: !( - scope.isStrict || node.sourceType === "module" || (features.globalReturn && scope.childScopes[0].isStrict) ) diff --git a/tools/node_modules/eslint/lib/rules/no-irregular-whitespace.js b/tools/node_modules/eslint/lib/rules/no-irregular-whitespace.js index 65c4d67285c..d1646c7b8a1 100644 --- a/tools/node_modules/eslint/lib/rules/no-irregular-whitespace.js +++ b/tools/node_modules/eslint/lib/rules/no-irregular-whitespace.js @@ -31,7 +31,7 @@ module.exports = { type: "problem", docs: { - description: "disallow irregular whitespace", + description: "Disallow irregular whitespace", recommended: true, url: "https://eslint.org/docs/rules/no-irregular-whitespace" }, diff --git a/tools/node_modules/eslint/lib/rules/no-iterator.js b/tools/node_modules/eslint/lib/rules/no-iterator.js index d11267286c8..3550c7b111b 100644 --- a/tools/node_modules/eslint/lib/rules/no-iterator.js +++ b/tools/node_modules/eslint/lib/rules/no-iterator.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of the `__iterator__` property", + description: "Disallow the use of the `__iterator__` property", recommended: false, url: "https://eslint.org/docs/rules/no-iterator" }, diff --git a/tools/node_modules/eslint/lib/rules/no-label-var.js b/tools/node_modules/eslint/lib/rules/no-label-var.js index 50211811ac8..a07d283f522 100644 --- a/tools/node_modules/eslint/lib/rules/no-label-var.js +++ b/tools/node_modules/eslint/lib/rules/no-label-var.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow labels that share a name with a variable", + description: "Disallow labels that share a name with a variable", recommended: false, url: "https://eslint.org/docs/rules/no-label-var" }, diff --git a/tools/node_modules/eslint/lib/rules/no-labels.js b/tools/node_modules/eslint/lib/rules/no-labels.js index 2e79f378a9b..7257307f0cd 100644 --- a/tools/node_modules/eslint/lib/rules/no-labels.js +++ b/tools/node_modules/eslint/lib/rules/no-labels.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow labeled statements", + description: "Disallow labeled statements", recommended: false, url: "https://eslint.org/docs/rules/no-labels" }, @@ -98,7 +98,7 @@ module.exports = { info = info.upper; } - /* istanbul ignore next: syntax error */ + /* c8 ignore next */ return "other"; } diff --git a/tools/node_modules/eslint/lib/rules/no-lone-blocks.js b/tools/node_modules/eslint/lib/rules/no-lone-blocks.js index f9fe9514dd7..eb97f958c3c 100644 --- a/tools/node_modules/eslint/lib/rules/no-lone-blocks.js +++ b/tools/node_modules/eslint/lib/rules/no-lone-blocks.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary nested blocks", + description: "Disallow unnecessary nested blocks", recommended: false, url: "https://eslint.org/docs/rules/no-lone-blocks" }, @@ -91,7 +91,7 @@ module.exports = { }; // ES6: report blocks without block-level bindings, or that's only child of another block - if (context.parserOptions.ecmaVersion >= 6) { + if (context.languageOptions.ecmaVersion >= 2015) { ruleDef = { BlockStatement(node) { if (isLoneBlock(node)) { diff --git a/tools/node_modules/eslint/lib/rules/no-lonely-if.js b/tools/node_modules/eslint/lib/rules/no-lonely-if.js index 9abd4650b56..0774b9fa30f 100644 --- a/tools/node_modules/eslint/lib/rules/no-lonely-if.js +++ b/tools/node_modules/eslint/lib/rules/no-lonely-if.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `if` statements as the only statement in `else` blocks", + description: "Disallow `if` statements as the only statement in `else` blocks", recommended: false, url: "https://eslint.org/docs/rules/no-lonely-if" }, diff --git a/tools/node_modules/eslint/lib/rules/no-loop-func.js b/tools/node_modules/eslint/lib/rules/no-loop-func.js index c5460616dc1..f81a7133680 100644 --- a/tools/node_modules/eslint/lib/rules/no-loop-func.js +++ b/tools/node_modules/eslint/lib/rules/no-loop-func.js @@ -125,7 +125,7 @@ function isSafe(loopNode, reference) { * The reference is every reference of the upper scope's variable we are * looking now. * - * It's safeafe if the reference matches one of the following condition. + * It's safe if the reference matches one of the following condition. * - is readonly. * - doesn't exist inside a local function and after the border. * @param {eslint-scope.Reference} upperRef A reference to check. @@ -154,7 +154,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow function declarations that contain unsafe references inside loop statements", + description: "Disallow function declarations that contain unsafe references inside loop statements", recommended: false, url: "https://eslint.org/docs/rules/no-loop-func" }, diff --git a/tools/node_modules/eslint/lib/rules/no-loss-of-precision.js b/tools/node_modules/eslint/lib/rules/no-loss-of-precision.js index fefc7b768fe..6dc6d864dcd 100644 --- a/tools/node_modules/eslint/lib/rules/no-loss-of-precision.js +++ b/tools/node_modules/eslint/lib/rules/no-loss-of-precision.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow literal numbers that lose precision", + description: "Disallow literal numbers that lose precision", recommended: true, url: "https://eslint.org/docs/rules/no-loss-of-precision" }, diff --git a/tools/node_modules/eslint/lib/rules/no-magic-numbers.js b/tools/node_modules/eslint/lib/rules/no-magic-numbers.js index dfcd593ecbe..9b085881556 100644 --- a/tools/node_modules/eslint/lib/rules/no-magic-numbers.js +++ b/tools/node_modules/eslint/lib/rules/no-magic-numbers.js @@ -32,7 +32,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow magic numbers", + description: "Disallow magic numbers", recommended: false, url: "https://eslint.org/docs/rules/no-magic-numbers" }, @@ -80,7 +80,7 @@ module.exports = { const config = context.options[0] || {}, detectObjects = !!config.detectObjects, enforceConst = !!config.enforceConst, - ignore = (config.ignore || []).map(normalizeIgnoreValue), + ignore = new Set((config.ignore || []).map(normalizeIgnoreValue)), ignoreArrayIndexes = !!config.ignoreArrayIndexes, ignoreDefaultValues = !!config.ignoreDefaultValues; @@ -92,7 +92,7 @@ module.exports = { * @returns {boolean} true if the value is ignored */ function isIgnoredValue(value) { - return ignore.indexOf(value) !== -1; + return ignore.has(value); } /** @@ -209,7 +209,7 @@ module.exports = { }); } } else if ( - okTypes.indexOf(parent.type) === -1 || + !okTypes.includes(parent.type) || (parent.type === "AssignmentExpression" && parent.left.type === "Identifier") ) { context.report({ diff --git a/tools/node_modules/eslint/lib/rules/no-misleading-character-class.js b/tools/node_modules/eslint/lib/rules/no-misleading-character-class.js index 94b28784a10..667d066e81c 100644 --- a/tools/node_modules/eslint/lib/rules/no-misleading-character-class.js +++ b/tools/node_modules/eslint/lib/rules/no-misleading-character-class.js @@ -4,13 +4,16 @@ "use strict"; const { CALL, CONSTRUCT, ReferenceTracker, getStringIfConstant } = require("eslint-utils"); -const { RegExpParser, visitRegExpAST } = require("regexpp"); +const { RegExpValidator, RegExpParser, visitRegExpAST } = require("regexpp"); const { isCombiningCharacter, isEmojiModifier, isRegionalIndicatorSymbol, isSurrogatePair } = require("./utils/unicode"); +const astUtils = require("./utils/ast-utils.js"); //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ +const REGEXPP_LATEST_ECMA_VERSION = 2022; + /** * Iterate character sequences of a given nodes. * @@ -104,11 +107,13 @@ module.exports = { type: "problem", docs: { - description: "disallow characters which are made with multiple code points in character class syntax", + description: "Disallow characters which are made with multiple code points in character class syntax", recommended: true, url: "https://eslint.org/docs/rules/no-misleading-character-class" }, + hasSuggestions: true, + schema: [], messages: { @@ -116,10 +121,12 @@ module.exports = { combiningClass: "Unexpected combined character in character class.", emojiModifier: "Unexpected modified Emoji in character class.", regionalIndicatorSymbol: "Unexpected national flag in character class.", - zwj: "Unexpected joined character sequence in character class." + zwj: "Unexpected joined character sequence in character class.", + suggestUnicodeFlag: "Add unicode 'u' flag to regex." } }, create(context) { + const sourceCode = context.getSourceCode(); const parser = new RegExpParser(); /** @@ -127,17 +134,10 @@ module.exports = { * @param {Node} node The node to report. * @param {string} pattern The regular expression pattern to verify. * @param {string} flags The flags of the regular expression. + * @param {Function} unicodeFixer Fixer for missing "u" flag. * @returns {void} */ - function verify(node, pattern, flags) { - const has = { - surrogatePairWithoutUFlag: false, - combiningClass: false, - variationSelector: false, - emojiModifier: false, - regionalIndicatorSymbol: false, - zwj: false - }; + function verify(node, pattern, flags, unicodeFixer) { let patternNode; try { @@ -153,26 +153,75 @@ module.exports = { return; } + const foundKinds = new Set(); + visitRegExpAST(patternNode, { onCharacterClassEnter(ccNode) { for (const chars of iterateCharacterSequence(ccNode.elements)) { for (const kind of kinds) { - has[kind] = has[kind] || hasCharacterSequence[kind](chars); + if (hasCharacterSequence[kind](chars)) { + foundKinds.add(kind); + } } } } }); - for (const kind of kinds) { - if (has[kind]) { - context.report({ node, messageId: kind }); + for (const kind of foundKinds) { + let suggest; + + if (kind === "surrogatePairWithoutUFlag") { + suggest = [{ + messageId: "suggestUnicodeFlag", + fix: unicodeFixer + }]; } + + context.report({ + node, + messageId: kind, + suggest + }); } } + /** + * Checks if the given regular expression pattern would be valid with the `u` flag. + * @param {string} pattern The regular expression pattern to verify. + * @returns {boolean} `true` if the pattern would be valid with the `u` flag. + * `false` if the pattern would be invalid with the `u` flag or the configured + * ecmaVersion doesn't support the `u` flag. + */ + function isValidWithUnicodeFlag(pattern) { + const { ecmaVersion } = context.parserOptions; + + // ecmaVersion is unknown or it doesn't support the 'u' flag + if (typeof ecmaVersion !== "number" || ecmaVersion <= 5) { + return false; + } + + const validator = new RegExpValidator({ + ecmaVersion: Math.min(ecmaVersion + 2009, REGEXPP_LATEST_ECMA_VERSION) + }); + + try { + validator.validatePattern(pattern, void 0, void 0, /* uFlag = */ true); + } catch { + return false; + } + + return true; + } + return { "Literal[regex]"(node) { - verify(node, node.regex.pattern, node.regex.flags); + verify(node, node.regex.pattern, node.regex.flags, fixer => { + if (!isValidWithUnicodeFlag(node.regex.pattern)) { + return null; + } + + return fixer.insertTextAfter(node, "u"); + }); }, "Program"() { const scope = context.getScope(); @@ -191,7 +240,31 @@ module.exports = { const flags = getStringIfConstant(flagsNode, scope); if (typeof pattern === "string") { - verify(node, pattern, flags || ""); + verify(node, pattern, flags || "", fixer => { + + if (!isValidWithUnicodeFlag(pattern)) { + return null; + } + + if (node.arguments.length === 1) { + const penultimateToken = sourceCode.getLastToken(node, { skip: 1 }); // skip closing parenthesis + + return fixer.insertTextAfter( + penultimateToken, + astUtils.isCommaToken(penultimateToken) + ? ' "u",' + : ', "u"' + ); + } + + if ((flagsNode.type === "Literal" && typeof flagsNode.value === "string") || flagsNode.type === "TemplateLiteral") { + const range = [flagsNode.range[0], flagsNode.range[1] - 1]; + + return fixer.insertTextAfterRange(range, "u"); + } + + return null; + }); } } } diff --git a/tools/node_modules/eslint/lib/rules/no-mixed-operators.js b/tools/node_modules/eslint/lib/rules/no-mixed-operators.js index c75d01147c9..cb6e9363c15 100644 --- a/tools/node_modules/eslint/lib/rules/no-mixed-operators.js +++ b/tools/node_modules/eslint/lib/rules/no-mixed-operators.js @@ -64,7 +64,7 @@ function normalizeOptions(options = {}) { * @returns {boolean} `true` if such group existed. */ function includesBothInAGroup(groups, left, right) { - return groups.some(group => group.indexOf(left) !== -1 && group.indexOf(right) !== -1); + return groups.some(group => group.includes(left) && group.includes(right)); } /** @@ -88,7 +88,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow mixed binary operators", + description: "Disallow mixed binary operators", recommended: false, url: "https://eslint.org/docs/rules/no-mixed-operators" }, diff --git a/tools/node_modules/eslint/lib/rules/no-mixed-requires.js b/tools/node_modules/eslint/lib/rules/no-mixed-requires.js index 5e05cf7a72a..4e970574416 100644 --- a/tools/node_modules/eslint/lib/rules/no-mixed-requires.js +++ b/tools/node_modules/eslint/lib/rules/no-mixed-requires.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `require` calls to be mixed with regular variable declarations", + description: "Disallow `require` calls to be mixed with regular variable declarations", recommended: false, url: "https://eslint.org/docs/rules/no-mixed-requires" }, @@ -160,7 +160,7 @@ module.exports = { return REQ_COMPUTED; } - if (BUILTIN_MODULES.indexOf(arg.value) !== -1) { + if (BUILTIN_MODULES.includes(arg.value)) { // "var fs = require('fs');" return REQ_CORE; diff --git a/tools/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js b/tools/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js index f82a352caa4..b2d5a040b84 100644 --- a/tools/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js +++ b/tools/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js @@ -14,7 +14,7 @@ module.exports = { type: "layout", docs: { - description: "disallow mixed spaces and tabs for indentation", + description: "Disallow mixed spaces and tabs for indentation", recommended: true, url: "https://eslint.org/docs/rules/no-mixed-spaces-and-tabs" }, diff --git a/tools/node_modules/eslint/lib/rules/no-multi-assign.js b/tools/node_modules/eslint/lib/rules/no-multi-assign.js index be4d41f33d6..392b33ffd2d 100644 --- a/tools/node_modules/eslint/lib/rules/no-multi-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-multi-assign.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow use of chained assignment expressions", + description: "Disallow use of chained assignment expressions", recommended: false, url: "https://eslint.org/docs/rules/no-multi-assign" }, diff --git a/tools/node_modules/eslint/lib/rules/no-multi-spaces.js b/tools/node_modules/eslint/lib/rules/no-multi-spaces.js index e37aae0a16e..d8d3c6509cc 100644 --- a/tools/node_modules/eslint/lib/rules/no-multi-spaces.js +++ b/tools/node_modules/eslint/lib/rules/no-multi-spaces.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "disallow multiple spaces", + description: "Disallow multiple spaces", recommended: false, url: "https://eslint.org/docs/rules/no-multi-spaces" }, @@ -56,7 +56,7 @@ module.exports = { const options = context.options[0] || {}; const ignoreEOLComments = options.ignoreEOLComments; const exceptions = Object.assign({ Property: true }, options.exceptions); - const hasExceptions = Object.keys(exceptions).filter(key => exceptions[key]).length > 0; + const hasExceptions = Object.keys(exceptions).some(key => exceptions[key]); /** * Formats value of given comment token for error message by truncating its length. diff --git a/tools/node_modules/eslint/lib/rules/no-multi-str.js b/tools/node_modules/eslint/lib/rules/no-multi-str.js index 6a17d581b98..c4400f45ee6 100644 --- a/tools/node_modules/eslint/lib/rules/no-multi-str.js +++ b/tools/node_modules/eslint/lib/rules/no-multi-str.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow multiline strings", + description: "Disallow multiline strings", recommended: false, url: "https://eslint.org/docs/rules/no-multi-str" }, diff --git a/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js b/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js index d012303cc33..e8b0f9859c0 100644 --- a/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js +++ b/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "disallow multiple empty lines", + description: "Disallow multiple empty lines", recommended: false, url: "https://eslint.org/docs/rules/no-multiple-empty-lines" }, diff --git a/tools/node_modules/eslint/lib/rules/no-native-reassign.js b/tools/node_modules/eslint/lib/rules/no-native-reassign.js index 1814a5b3c5b..634fea93308 100644 --- a/tools/node_modules/eslint/lib/rules/no-native-reassign.js +++ b/tools/node_modules/eslint/lib/rules/no-native-reassign.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow assignments to native objects or read-only global variables", + description: "Disallow assignments to native objects or read-only global variables", recommended: false, url: "https://eslint.org/docs/rules/no-native-reassign" }, @@ -81,7 +81,7 @@ module.exports = { * @returns {void} */ function checkVariable(variable) { - if (variable.writeable === false && exceptions.indexOf(variable.name) === -1) { + if (variable.writeable === false && !exceptions.includes(variable.name)) { variable.references.forEach(checkReference); } } diff --git a/tools/node_modules/eslint/lib/rules/no-negated-condition.js b/tools/node_modules/eslint/lib/rules/no-negated-condition.js index a2870137f57..387617767fa 100644 --- a/tools/node_modules/eslint/lib/rules/no-negated-condition.js +++ b/tools/node_modules/eslint/lib/rules/no-negated-condition.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow negated conditions", + description: "Disallow negated conditions", recommended: false, url: "https://eslint.org/docs/rules/no-negated-condition" }, diff --git a/tools/node_modules/eslint/lib/rules/no-negated-in-lhs.js b/tools/node_modules/eslint/lib/rules/no-negated-in-lhs.js index 95ab58a080f..975a8d75cb1 100644 --- a/tools/node_modules/eslint/lib/rules/no-negated-in-lhs.js +++ b/tools/node_modules/eslint/lib/rules/no-negated-in-lhs.js @@ -16,7 +16,7 @@ module.exports = { type: "problem", docs: { - description: "disallow negating the left operand in `in` expressions", + description: "Disallow negating the left operand in `in` expressions", recommended: false, url: "https://eslint.org/docs/rules/no-negated-in-lhs" }, diff --git a/tools/node_modules/eslint/lib/rules/no-nested-ternary.js b/tools/node_modules/eslint/lib/rules/no-nested-ternary.js index c87875e4040..fe97823416b 100644 --- a/tools/node_modules/eslint/lib/rules/no-nested-ternary.js +++ b/tools/node_modules/eslint/lib/rules/no-nested-ternary.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow nested ternary expressions", + description: "Disallow nested ternary expressions", recommended: false, url: "https://eslint.org/docs/rules/no-nested-ternary" }, diff --git a/tools/node_modules/eslint/lib/rules/no-new-func.js b/tools/node_modules/eslint/lib/rules/no-new-func.js index 3b599433519..4759f380b29 100644 --- a/tools/node_modules/eslint/lib/rules/no-new-func.js +++ b/tools/node_modules/eslint/lib/rules/no-new-func.js @@ -27,7 +27,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `new` operators with the `Function` object", + description: "Disallow `new` operators with the `Function` object", recommended: false, url: "https://eslint.org/docs/rules/no-new-func" }, diff --git a/tools/node_modules/eslint/lib/rules/no-new-object.js b/tools/node_modules/eslint/lib/rules/no-new-object.js index 1a5784df24d..4dbe8db7365 100644 --- a/tools/node_modules/eslint/lib/rules/no-new-object.js +++ b/tools/node_modules/eslint/lib/rules/no-new-object.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `Object` constructors", + description: "Disallow `Object` constructors", recommended: false, url: "https://eslint.org/docs/rules/no-new-object" }, @@ -29,7 +29,7 @@ module.exports = { schema: [], messages: { - preferLiteral: "The object literal notation {} is preferrable." + preferLiteral: "The object literal notation {} is preferable." } }, diff --git a/tools/node_modules/eslint/lib/rules/no-new-require.js b/tools/node_modules/eslint/lib/rules/no-new-require.js index 5dadf6c2538..63ca057b741 100644 --- a/tools/node_modules/eslint/lib/rules/no-new-require.js +++ b/tools/node_modules/eslint/lib/rules/no-new-require.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `new` operators with calls to `require`", + description: "Disallow `new` operators with calls to `require`", recommended: false, url: "https://eslint.org/docs/rules/no-new-require" }, diff --git a/tools/node_modules/eslint/lib/rules/no-new-symbol.js b/tools/node_modules/eslint/lib/rules/no-new-symbol.js index 6acfca94358..534201c0ba6 100644 --- a/tools/node_modules/eslint/lib/rules/no-new-symbol.js +++ b/tools/node_modules/eslint/lib/rules/no-new-symbol.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow `new` operators with the `Symbol` object", + description: "Disallow `new` operators with the `Symbol` object", recommended: true, url: "https://eslint.org/docs/rules/no-new-symbol" }, diff --git a/tools/node_modules/eslint/lib/rules/no-new-wrappers.js b/tools/node_modules/eslint/lib/rules/no-new-wrappers.js index 4667d581f65..ff44efc5930 100644 --- a/tools/node_modules/eslint/lib/rules/no-new-wrappers.js +++ b/tools/node_modules/eslint/lib/rules/no-new-wrappers.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `new` operators with the `String`, `Number`, and `Boolean` objects", + description: "Disallow `new` operators with the `String`, `Number`, and `Boolean` objects", recommended: false, url: "https://eslint.org/docs/rules/no-new-wrappers" }, @@ -34,7 +34,7 @@ module.exports = { NewExpression(node) { const wrapperObjects = ["String", "Number", "Boolean"]; - if (wrapperObjects.indexOf(node.callee.name) > -1) { + if (wrapperObjects.includes(node.callee.name)) { context.report({ node, messageId: "noConstructor", diff --git a/tools/node_modules/eslint/lib/rules/no-new.js b/tools/node_modules/eslint/lib/rules/no-new.js index 5b0976534d6..c4345057588 100644 --- a/tools/node_modules/eslint/lib/rules/no-new.js +++ b/tools/node_modules/eslint/lib/rules/no-new.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `new` operators outside of assignments or comparisons", + description: "Disallow `new` operators outside of assignments or comparisons", recommended: false, url: "https://eslint.org/docs/rules/no-new" }, diff --git a/tools/node_modules/eslint/lib/rules/no-nonoctal-decimal-escape.js b/tools/node_modules/eslint/lib/rules/no-nonoctal-decimal-escape.js index 3edd269faeb..63e2264b33a 100644 --- a/tools/node_modules/eslint/lib/rules/no-nonoctal-decimal-escape.js +++ b/tools/node_modules/eslint/lib/rules/no-nonoctal-decimal-escape.js @@ -30,7 +30,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `\\8` and `\\9` escape sequences in string literals", + description: "Disallow `\\8` and `\\9` escape sequences in string literals", recommended: true, url: "https://eslint.org/docs/rules/no-nonoctal-decimal-escape" }, diff --git a/tools/node_modules/eslint/lib/rules/no-obj-calls.js b/tools/node_modules/eslint/lib/rules/no-obj-calls.js index 667ba69d803..86355d85d36 100644 --- a/tools/node_modules/eslint/lib/rules/no-obj-calls.js +++ b/tools/node_modules/eslint/lib/rules/no-obj-calls.js @@ -43,7 +43,7 @@ module.exports = { type: "problem", docs: { - description: "disallow calling global object properties as functions", + description: "Disallow calling global object properties as functions", recommended: true, url: "https://eslint.org/docs/rules/no-obj-calls" }, diff --git a/tools/node_modules/eslint/lib/rules/no-octal-escape.js b/tools/node_modules/eslint/lib/rules/no-octal-escape.js index 9ac56ab7bea..81a8a74cddb 100644 --- a/tools/node_modules/eslint/lib/rules/no-octal-escape.js +++ b/tools/node_modules/eslint/lib/rules/no-octal-escape.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow octal escape sequences in string literals", + description: "Disallow octal escape sequences in string literals", recommended: false, url: "https://eslint.org/docs/rules/no-octal-escape" }, diff --git a/tools/node_modules/eslint/lib/rules/no-octal.js b/tools/node_modules/eslint/lib/rules/no-octal.js index 44df45fdacd..eec56919f1e 100644 --- a/tools/node_modules/eslint/lib/rules/no-octal.js +++ b/tools/node_modules/eslint/lib/rules/no-octal.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow octal literals", + description: "Disallow octal literals", recommended: true, url: "https://eslint.org/docs/rules/no-octal" }, @@ -23,7 +23,7 @@ module.exports = { schema: [], messages: { - noOcatal: "Octal literals should not be used." + noOctal: "Octal literals should not be used." } }, @@ -35,7 +35,7 @@ module.exports = { if (typeof node.value === "number" && /^0[0-9]/u.test(node.raw)) { context.report({ node, - messageId: "noOcatal" + messageId: "noOctal" }); } } diff --git a/tools/node_modules/eslint/lib/rules/no-param-reassign.js b/tools/node_modules/eslint/lib/rules/no-param-reassign.js index 87a6b702382..f89435c8675 100644 --- a/tools/node_modules/eslint/lib/rules/no-param-reassign.js +++ b/tools/node_modules/eslint/lib/rules/no-param-reassign.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow reassigning `function` parameters", + description: "Disallow reassigning `function` parameters", recommended: false, url: "https://eslint.org/docs/rules/no-param-reassign" }, diff --git a/tools/node_modules/eslint/lib/rules/no-path-concat.js b/tools/node_modules/eslint/lib/rules/no-path-concat.js index 8d570a3778f..8502c511ed9 100644 --- a/tools/node_modules/eslint/lib/rules/no-path-concat.js +++ b/tools/node_modules/eslint/lib/rules/no-path-concat.js @@ -19,7 +19,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow string concatenation with `__dirname` and `__filename`", + description: "Disallow string concatenation with `__dirname` and `__filename`", recommended: false, url: "https://eslint.org/docs/rules/no-path-concat" }, diff --git a/tools/node_modules/eslint/lib/rules/no-plusplus.js b/tools/node_modules/eslint/lib/rules/no-plusplus.js index 2565da43231..cda6b05bfa8 100644 --- a/tools/node_modules/eslint/lib/rules/no-plusplus.js +++ b/tools/node_modules/eslint/lib/rules/no-plusplus.js @@ -51,7 +51,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the unary operators `++` and `--`", + description: "Disallow the unary operators `++` and `--`", recommended: false, url: "https://eslint.org/docs/rules/no-plusplus" }, diff --git a/tools/node_modules/eslint/lib/rules/no-process-env.js b/tools/node_modules/eslint/lib/rules/no-process-env.js index f7c2c718fd0..5db7c94b13b 100644 --- a/tools/node_modules/eslint/lib/rules/no-process-env.js +++ b/tools/node_modules/eslint/lib/rules/no-process-env.js @@ -19,7 +19,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `process.env`", + description: "Disallow the use of `process.env`", recommended: false, url: "https://eslint.org/docs/rules/no-process-env" }, diff --git a/tools/node_modules/eslint/lib/rules/no-process-exit.js b/tools/node_modules/eslint/lib/rules/no-process-exit.js index 251044b31c9..ca3ecfe6f5f 100644 --- a/tools/node_modules/eslint/lib/rules/no-process-exit.js +++ b/tools/node_modules/eslint/lib/rules/no-process-exit.js @@ -19,7 +19,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `process.exit()`", + description: "Disallow the use of `process.exit()`", recommended: false, url: "https://eslint.org/docs/rules/no-process-exit" }, diff --git a/tools/node_modules/eslint/lib/rules/no-promise-executor-return.js b/tools/node_modules/eslint/lib/rules/no-promise-executor-return.js index e40d4bcb3f5..caa195ffa07 100644 --- a/tools/node_modules/eslint/lib/rules/no-promise-executor-return.js +++ b/tools/node_modules/eslint/lib/rules/no-promise-executor-return.js @@ -69,7 +69,7 @@ module.exports = { type: "problem", docs: { - description: "disallow returning values from Promise executor functions", + description: "Disallow returning values from Promise executor functions", recommended: false, url: "https://eslint.org/docs/rules/no-promise-executor-return" }, diff --git a/tools/node_modules/eslint/lib/rules/no-proto.js b/tools/node_modules/eslint/lib/rules/no-proto.js index e6659e59c6b..771d206a88d 100644 --- a/tools/node_modules/eslint/lib/rules/no-proto.js +++ b/tools/node_modules/eslint/lib/rules/no-proto.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of the `__proto__` property", + description: "Disallow the use of the `__proto__` property", recommended: false, url: "https://eslint.org/docs/rules/no-proto" }, diff --git a/tools/node_modules/eslint/lib/rules/no-prototype-builtins.js b/tools/node_modules/eslint/lib/rules/no-prototype-builtins.js index ae736981e71..ea2763396d0 100644 --- a/tools/node_modules/eslint/lib/rules/no-prototype-builtins.js +++ b/tools/node_modules/eslint/lib/rules/no-prototype-builtins.js @@ -20,7 +20,7 @@ module.exports = { type: "problem", docs: { - description: "disallow calling some `Object.prototype` methods directly on objects", + description: "Disallow calling some `Object.prototype` methods directly on objects", recommended: true, url: "https://eslint.org/docs/rules/no-prototype-builtins" }, @@ -33,11 +33,11 @@ module.exports = { }, create(context) { - const DISALLOWED_PROPS = [ + const DISALLOWED_PROPS = new Set([ "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable" - ]; + ]); /** * Reports if a disallowed property is used in a CallExpression @@ -54,7 +54,7 @@ module.exports = { const propName = astUtils.getStaticPropertyName(callee); - if (propName !== null && DISALLOWED_PROPS.indexOf(propName) > -1) { + if (propName !== null && DISALLOWED_PROPS.has(propName)) { context.report({ messageId: "prototypeBuildIn", loc: callee.property.loc, diff --git a/tools/node_modules/eslint/lib/rules/no-redeclare.js b/tools/node_modules/eslint/lib/rules/no-redeclare.js index cc71a612349..59749cb6643 100644 --- a/tools/node_modules/eslint/lib/rules/no-redeclare.js +++ b/tools/node_modules/eslint/lib/rules/no-redeclare.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow variable redeclaration", + description: "Disallow variable redeclaration", recommended: true, url: "https://eslint.org/docs/rules/no-redeclare" }, diff --git a/tools/node_modules/eslint/lib/rules/no-regex-spaces.js b/tools/node_modules/eslint/lib/rules/no-regex-spaces.js index 400c72b5027..6d74aabe263 100644 --- a/tools/node_modules/eslint/lib/rules/no-regex-spaces.js +++ b/tools/node_modules/eslint/lib/rules/no-regex-spaces.js @@ -39,7 +39,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow multiple spaces in regular expressions", + description: "Disallow multiple spaces in regular expressions", recommended: true, url: "https://eslint.org/docs/rules/no-regex-spaces" }, diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-exports.js b/tools/node_modules/eslint/lib/rules/no-restricted-exports.js index 5166cecaef2..d99e8928209 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-exports.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-exports.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified names in exports", + description: "Disallow specified names in exports", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-exports" }, diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-globals.js b/tools/node_modules/eslint/lib/rules/no-restricted-globals.js index 09d347890ca..b666238382d 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-globals.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-globals.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified global variables", + description: "Disallow specified global variables", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-globals" }, diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-imports.js b/tools/node_modules/eslint/lib/rules/no-restricted-imports.js index 3bb45d715ff..f4838679efc 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-imports.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-imports.js @@ -58,6 +58,14 @@ const arrayOfStringsOrObjectPatterns = { items: { type: "object", properties: { + importNames: { + type: "array", + items: { + type: "string" + }, + minItems: 1, + uniqueItems: true + }, group: { type: "array", items: { @@ -88,7 +96,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified modules when loaded by `import`", + description: "Disallow specified modules when loaded by `import`", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-imports" }, @@ -102,6 +110,14 @@ module.exports = { // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period patternWithCustomMessage: "'{{importSource}}' import is restricted from being used by a pattern. {{customMessage}}", + patternAndImportName: "'{{importName}}' import from '{{importSource}}' is restricted from being used by a pattern.", + // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period + patternAndImportNameWithCustomMessage: "'{{importName}}' import from '{{importSource}}' is restricted from being used by a pattern. {{customMessage}}", + + patternAndEverything: "* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted from being used by a pattern.", + // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period + patternAndEverythingWithCustomMessage: "* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted from being used by a pattern. {{customMessage}}", + everything: "* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted.", // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period everythingWithCustomMessage: "* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted. {{customMessage}}", @@ -159,9 +175,10 @@ module.exports = { } // relative paths are supported for this rule - const restrictedPatternGroups = restrictedPatterns.map(({ group, message, caseSensitive }) => ({ + const restrictedPatternGroups = restrictedPatterns.map(({ group, message, caseSensitive, importNames }) => ({ matcher: ignore({ allowRelativePaths: true, ignorecase: !caseSensitive }).add(group), - customMessage: message + customMessage: message, + importNames })); // if no imports are restricted we don't need to check @@ -234,20 +251,68 @@ module.exports = { /** * Report a restricted path specifically for patterns. * @param {node} node representing the restricted path reference - * @param {Object} group contains a Ignore instance for paths, and the customMessage to show if it fails + * @param {Object} group contains an Ignore instance for paths, the customMessage to show on failure, + * and any restricted import names that have been specified in the config + * @param {Map} importNames Map of import names that are being imported * @returns {void} * @private */ - function reportPathForPatterns(node, group) { + function reportPathForPatterns(node, group, importNames) { const importSource = node.source.value.trim(); - context.report({ - node, - messageId: group.customMessage ? "patternWithCustomMessage" : "patterns", - data: { - importSource, - customMessage: group.customMessage + const customMessage = group.customMessage; + const restrictedImportNames = group.importNames; + + /* + * If we are not restricting to any specific import names and just the pattern itself, + * report the error and move on + */ + if (!restrictedImportNames) { + context.report({ + node, + messageId: customMessage ? "patternWithCustomMessage" : "patterns", + data: { + importSource, + customMessage + } + }); + return; + } + + if (importNames.has("*")) { + const specifierData = importNames.get("*")[0]; + + context.report({ + node, + messageId: customMessage ? "patternAndEverythingWithCustomMessage" : "patternAndEverything", + loc: specifierData.loc, + data: { + importSource, + importNames: restrictedImportNames, + customMessage + } + }); + } + + restrictedImportNames.forEach(importName => { + if (!importNames.has(importName)) { + return; } + + const specifiers = importNames.get(importName); + + specifiers.forEach(specifier => { + context.report({ + node, + messageId: customMessage ? "patternAndImportNameWithCustomMessage" : "patternAndImportName", + loc: specifier.loc, + data: { + importSource, + customMessage, + importName + } + }); + }); }); } @@ -304,7 +369,7 @@ module.exports = { checkRestrictedPathAndReport(importSource, importNames, node); restrictedPatternGroups.forEach(group => { if (isRestrictedPattern(importSource, group)) { - reportPathForPatterns(node, group); + reportPathForPatterns(node, group, importNames); } }); } diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-modules.js b/tools/node_modules/eslint/lib/rules/no-restricted-modules.js index d92aa7a86bc..c37694f9046 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-modules.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-modules.js @@ -49,7 +49,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified modules when loaded by `require`", + description: "Disallow specified modules when loaded by `require`", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-modules" }, diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-properties.js b/tools/node_modules/eslint/lib/rules/no-restricted-properties.js index 1e8c7a89aed..7c03498563f 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-properties.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-properties.js @@ -17,7 +17,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow certain properties on certain objects", + description: "Disallow certain properties on certain objects", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-properties" }, diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-syntax.js b/tools/node_modules/eslint/lib/rules/no-restricted-syntax.js index 713d1157c4d..76369cfd539 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-syntax.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-syntax.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified syntax", + description: "Disallow specified syntax", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-syntax" }, diff --git a/tools/node_modules/eslint/lib/rules/no-return-assign.js b/tools/node_modules/eslint/lib/rules/no-return-assign.js index 4fd7a3ddba5..ccaf2c1c158 100644 --- a/tools/node_modules/eslint/lib/rules/no-return-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-return-assign.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow assignment operators in `return` statements", + description: "Disallow assignment operators in `return` statements", recommended: false, url: "https://eslint.org/docs/rules/no-return-assign" }, diff --git a/tools/node_modules/eslint/lib/rules/no-return-await.js b/tools/node_modules/eslint/lib/rules/no-return-await.js index 191bf42dcf9..3007c8c877d 100644 --- a/tools/node_modules/eslint/lib/rules/no-return-await.js +++ b/tools/node_modules/eslint/lib/rules/no-return-await.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary `return await`", + description: "Disallow unnecessary `return await`", recommended: false, diff --git a/tools/node_modules/eslint/lib/rules/no-script-url.js b/tools/node_modules/eslint/lib/rules/no-script-url.js index 0eef2541840..41479006ee9 100644 --- a/tools/node_modules/eslint/lib/rules/no-script-url.js +++ b/tools/node_modules/eslint/lib/rules/no-script-url.js @@ -18,7 +18,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `javascript:` urls", + description: "Disallow `javascript:` urls", recommended: false, url: "https://eslint.org/docs/rules/no-script-url" }, diff --git a/tools/node_modules/eslint/lib/rules/no-self-assign.js b/tools/node_modules/eslint/lib/rules/no-self-assign.js index 060cc8e353e..348ee8dfc5f 100644 --- a/tools/node_modules/eslint/lib/rules/no-self-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-self-assign.js @@ -130,7 +130,7 @@ module.exports = { type: "problem", docs: { - description: "disallow assignments where both sides are exactly the same", + description: "Disallow assignments where both sides are exactly the same", recommended: true, url: "https://eslint.org/docs/rules/no-self-assign" }, diff --git a/tools/node_modules/eslint/lib/rules/no-self-compare.js b/tools/node_modules/eslint/lib/rules/no-self-compare.js index c3512895e13..dab0db4b917 100644 --- a/tools/node_modules/eslint/lib/rules/no-self-compare.js +++ b/tools/node_modules/eslint/lib/rules/no-self-compare.js @@ -16,7 +16,7 @@ module.exports = { type: "problem", docs: { - description: "disallow comparisons where both sides are exactly the same", + description: "Disallow comparisons where both sides are exactly the same", recommended: false, url: "https://eslint.org/docs/rules/no-self-compare" }, diff --git a/tools/node_modules/eslint/lib/rules/no-sequences.js b/tools/node_modules/eslint/lib/rules/no-sequences.js index 376aec37988..2c0c27c3fea 100644 --- a/tools/node_modules/eslint/lib/rules/no-sequences.js +++ b/tools/node_modules/eslint/lib/rules/no-sequences.js @@ -29,7 +29,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow comma operators", + description: "Disallow comma operators", recommended: false, url: "https://eslint.org/docs/rules/no-sequences" }, diff --git a/tools/node_modules/eslint/lib/rules/no-setter-return.js b/tools/node_modules/eslint/lib/rules/no-setter-return.js index 7204e5c0c4d..25e8f1428b2 100644 --- a/tools/node_modules/eslint/lib/rules/no-setter-return.js +++ b/tools/node_modules/eslint/lib/rules/no-setter-return.js @@ -142,7 +142,7 @@ module.exports = { type: "problem", docs: { - description: "disallow returning values from setters", + description: "Disallow returning values from setters", recommended: true, url: "https://eslint.org/docs/rules/no-setter-return" }, diff --git a/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js b/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js index 52620e58d1c..a7d6d00f164 100644 --- a/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js +++ b/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js @@ -27,7 +27,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow identifiers from shadowing restricted names", + description: "Disallow identifiers from shadowing restricted names", recommended: true, url: "https://eslint.org/docs/rules/no-shadow-restricted-names" }, diff --git a/tools/node_modules/eslint/lib/rules/no-shadow.js b/tools/node_modules/eslint/lib/rules/no-shadow.js index 43d7d738e29..3af9354ebd7 100644 --- a/tools/node_modules/eslint/lib/rules/no-shadow.js +++ b/tools/node_modules/eslint/lib/rules/no-shadow.js @@ -15,8 +15,8 @@ const astUtils = require("./utils/ast-utils"); // Helpers //------------------------------------------------------------------------------ -const FUNC_EXPR_NODE_TYPES = ["ArrowFunctionExpression", "FunctionExpression"]; -const CALL_EXPR_NODE_TYPE = ["CallExpression"]; +const FUNC_EXPR_NODE_TYPES = new Set(["ArrowFunctionExpression", "FunctionExpression"]); +const CALL_EXPR_NODE_TYPE = new Set(["CallExpression"]); const FOR_IN_OF_TYPE = /^For(?:In|Of)Statement$/u; const SENTINEL_TYPE = /^(?:(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|CatchClause|ImportDeclaration|ExportNamedDeclaration)$/u; @@ -30,7 +30,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow variable declarations from shadowing variables declared in the outer scope", + description: "Disallow variable declarations from shadowing variables declared in the outer scope", recommended: false, url: "https://eslint.org/docs/rules/no-shadow" }, @@ -123,7 +123,7 @@ module.exports = { const { variableScope } = variable.scope; - if (!(FUNC_EXPR_NODE_TYPES.includes(variableScope.block.type) && getOuterScope(variableScope) === shadowedVariable.scope)) { + if (!(FUNC_EXPR_NODE_TYPES.has(variableScope.block.type) && getOuterScope(variableScope) === shadowedVariable.scope)) { return false; } @@ -132,7 +132,7 @@ module.exports = { const callExpression = findSelfOrAncestor( parent, - node => CALL_EXPR_NODE_TYPE.includes(node.type) + node => CALL_EXPR_NODE_TYPE.has(node.type) ); if (!callExpression) { @@ -173,7 +173,7 @@ module.exports = { * @returns {boolean} Whether or not the variable name is allowed. */ function isAllowed(variable) { - return options.allow.indexOf(variable.name) !== -1; + return options.allow.includes(variable.name); } /** diff --git a/tools/node_modules/eslint/lib/rules/no-spaced-func.js b/tools/node_modules/eslint/lib/rules/no-spaced-func.js index 1d2994333e1..97e2da06b0f 100644 --- a/tools/node_modules/eslint/lib/rules/no-spaced-func.js +++ b/tools/node_modules/eslint/lib/rules/no-spaced-func.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "disallow spacing between function identifiers and their applications (deprecated)", + description: "Disallow spacing between function identifiers and their applications (deprecated)", recommended: false, url: "https://eslint.org/docs/rules/no-spaced-func" }, diff --git a/tools/node_modules/eslint/lib/rules/no-sparse-arrays.js b/tools/node_modules/eslint/lib/rules/no-sparse-arrays.js index c95bc203c4a..0e95fe4af7b 100644 --- a/tools/node_modules/eslint/lib/rules/no-sparse-arrays.js +++ b/tools/node_modules/eslint/lib/rules/no-sparse-arrays.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "disallow sparse arrays", + description: "Disallow sparse arrays", recommended: true, url: "https://eslint.org/docs/rules/no-sparse-arrays" }, @@ -37,7 +37,7 @@ module.exports = { ArrayExpression(node) { - const emptySpot = node.elements.indexOf(null) > -1; + const emptySpot = node.elements.includes(null); if (emptySpot) { context.report({ node, messageId: "unexpectedSparseArray" }); diff --git a/tools/node_modules/eslint/lib/rules/no-sync.js b/tools/node_modules/eslint/lib/rules/no-sync.js index 3536d9f2a39..71360c6bd32 100644 --- a/tools/node_modules/eslint/lib/rules/no-sync.js +++ b/tools/node_modules/eslint/lib/rules/no-sync.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow synchronous methods", + description: "Disallow synchronous methods", recommended: false, url: "https://eslint.org/docs/rules/no-sync" }, diff --git a/tools/node_modules/eslint/lib/rules/no-tabs.js b/tools/node_modules/eslint/lib/rules/no-tabs.js index 9758b850be1..1b4834e09a7 100644 --- a/tools/node_modules/eslint/lib/rules/no-tabs.js +++ b/tools/node_modules/eslint/lib/rules/no-tabs.js @@ -22,7 +22,7 @@ module.exports = { type: "layout", docs: { - description: "disallow all tabs", + description: "Disallow all tabs", recommended: false, url: "https://eslint.org/docs/rules/no-tabs" }, diff --git a/tools/node_modules/eslint/lib/rules/no-template-curly-in-string.js b/tools/node_modules/eslint/lib/rules/no-template-curly-in-string.js index 1901460f3d2..4f4e9ee17e9 100644 --- a/tools/node_modules/eslint/lib/rules/no-template-curly-in-string.js +++ b/tools/node_modules/eslint/lib/rules/no-template-curly-in-string.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "disallow template literal placeholder syntax in regular strings", + description: "Disallow template literal placeholder syntax in regular strings", recommended: false, url: "https://eslint.org/docs/rules/no-template-curly-in-string" }, diff --git a/tools/node_modules/eslint/lib/rules/no-ternary.js b/tools/node_modules/eslint/lib/rules/no-ternary.js index b0dc626832b..a185808a69a 100644 --- a/tools/node_modules/eslint/lib/rules/no-ternary.js +++ b/tools/node_modules/eslint/lib/rules/no-ternary.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow ternary operators", + description: "Disallow ternary operators", recommended: false, url: "https://eslint.org/docs/rules/no-ternary" }, diff --git a/tools/node_modules/eslint/lib/rules/no-this-before-super.js b/tools/node_modules/eslint/lib/rules/no-this-before-super.js index 929eded2443..b4e48e86264 100644 --- a/tools/node_modules/eslint/lib/rules/no-this-before-super.js +++ b/tools/node_modules/eslint/lib/rules/no-this-before-super.js @@ -40,7 +40,7 @@ module.exports = { type: "problem", docs: { - description: "disallow `this`/`super` before calling `super()` in constructors", + description: "Disallow `this`/`super` before calling `super()` in constructors", recommended: true, url: "https://eslint.org/docs/rules/no-this-before-super" }, diff --git a/tools/node_modules/eslint/lib/rules/no-throw-literal.js b/tools/node_modules/eslint/lib/rules/no-throw-literal.js index c670ed9e5e1..3656c83a3ff 100644 --- a/tools/node_modules/eslint/lib/rules/no-throw-literal.js +++ b/tools/node_modules/eslint/lib/rules/no-throw-literal.js @@ -17,7 +17,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow throwing literals as exceptions", + description: "Disallow throwing literals as exceptions", recommended: false, url: "https://eslint.org/docs/rules/no-throw-literal" }, diff --git a/tools/node_modules/eslint/lib/rules/no-trailing-spaces.js b/tools/node_modules/eslint/lib/rules/no-trailing-spaces.js index 9e720ad32e8..a02a880e1d6 100644 --- a/tools/node_modules/eslint/lib/rules/no-trailing-spaces.js +++ b/tools/node_modules/eslint/lib/rules/no-trailing-spaces.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "disallow trailing whitespace at the end of lines", + description: "Disallow trailing whitespace at the end of lines", recommended: false, url: "https://eslint.org/docs/rules/no-trailing-spaces" }, diff --git a/tools/node_modules/eslint/lib/rules/no-undef-init.js b/tools/node_modules/eslint/lib/rules/no-undef-init.js index 2c2204cf0fe..2cb1c3f3710 100644 --- a/tools/node_modules/eslint/lib/rules/no-undef-init.js +++ b/tools/node_modules/eslint/lib/rules/no-undef-init.js @@ -17,7 +17,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow initializing variables to `undefined`", + description: "Disallow initializing variables to `undefined`", recommended: false, url: "https://eslint.org/docs/rules/no-undef-init" }, diff --git a/tools/node_modules/eslint/lib/rules/no-undef.js b/tools/node_modules/eslint/lib/rules/no-undef.js index f65903245c8..e920ce6c288 100644 --- a/tools/node_modules/eslint/lib/rules/no-undef.js +++ b/tools/node_modules/eslint/lib/rules/no-undef.js @@ -29,7 +29,7 @@ module.exports = { type: "problem", docs: { - description: "disallow the use of undeclared variables unless mentioned in `/*global */` comments", + description: "Disallow the use of undeclared variables unless mentioned in `/*global */` comments", recommended: true, url: "https://eslint.org/docs/rules/no-undef" }, diff --git a/tools/node_modules/eslint/lib/rules/no-undefined.js b/tools/node_modules/eslint/lib/rules/no-undefined.js index de396d889c0..e006320b522 100644 --- a/tools/node_modules/eslint/lib/rules/no-undefined.js +++ b/tools/node_modules/eslint/lib/rules/no-undefined.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `undefined` as an identifier", + description: "Disallow the use of `undefined` as an identifier", recommended: false, url: "https://eslint.org/docs/rules/no-undefined" }, diff --git a/tools/node_modules/eslint/lib/rules/no-underscore-dangle.js b/tools/node_modules/eslint/lib/rules/no-underscore-dangle.js index 0ab41feb03c..eb3e404a66d 100644 --- a/tools/node_modules/eslint/lib/rules/no-underscore-dangle.js +++ b/tools/node_modules/eslint/lib/rules/no-underscore-dangle.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow dangling underscores in identifiers", + description: "Disallow dangling underscores in identifiers", recommended: false, url: "https://eslint.org/docs/rules/no-underscore-dangle" }, @@ -49,6 +49,10 @@ module.exports = { allowFunctionParams: { type: "boolean", default: true + }, + enforceInClassFields: { + type: "boolean", + default: false } }, additionalProperties: false @@ -68,6 +72,7 @@ module.exports = { const allowAfterSuper = typeof options.allowAfterSuper !== "undefined" ? options.allowAfterSuper : false; const allowAfterThisConstructor = typeof options.allowAfterThisConstructor !== "undefined" ? options.allowAfterThisConstructor : false; const enforceInMethodNames = typeof options.enforceInMethodNames !== "undefined" ? options.enforceInMethodNames : false; + const enforceInClassFields = typeof options.enforceInClassFields !== "undefined" ? options.enforceInClassFields : false; const allowFunctionParams = typeof options.allowFunctionParams !== "undefined" ? options.allowFunctionParams : true; //------------------------------------------------------------------------- @@ -81,7 +86,7 @@ module.exports = { * @private */ function isAllowed(identifier) { - return ALLOWED_VARIABLES.some(ident => ident === identifier); + return ALLOWED_VARIABLES.includes(identifier); } /** @@ -261,6 +266,30 @@ module.exports = { } } + /** + * Check if a class field has a dangling underscore + * @param {ASTNode} node node to evaluate + * @returns {void} + * @private + */ + function checkForDanglingUnderscoreInClassField(node) { + const identifier = node.key.name; + + if (typeof identifier !== "undefined" && hasDanglingUnderscore(identifier) && + enforceInClassFields && + !isAllowed(identifier)) { + context.report({ + node, + messageId: "unexpectedUnderscore", + data: { + identifier: node.key.type === "PrivateIdentifier" + ? `#${identifier}` + : identifier + } + }); + } + } + //-------------------------------------------------------------------------- // Public API //-------------------------------------------------------------------------- @@ -270,7 +299,7 @@ module.exports = { VariableDeclarator: checkForDanglingUnderscoreInVariableExpression, MemberExpression: checkForDanglingUnderscoreInMemberExpression, MethodDefinition: checkForDanglingUnderscoreInMethod, - PropertyDefinition: checkForDanglingUnderscoreInMethod, + PropertyDefinition: checkForDanglingUnderscoreInClassField, Property: checkForDanglingUnderscoreInMethod, FunctionExpression: checkForDanglingUnderscoreInFunction, ArrowFunctionExpression: checkForDanglingUnderscoreInFunction diff --git a/tools/node_modules/eslint/lib/rules/no-unexpected-multiline.js b/tools/node_modules/eslint/lib/rules/no-unexpected-multiline.js index 60d8f3164cd..2ca6731bc67 100644 --- a/tools/node_modules/eslint/lib/rules/no-unexpected-multiline.js +++ b/tools/node_modules/eslint/lib/rules/no-unexpected-multiline.js @@ -20,7 +20,7 @@ module.exports = { type: "problem", docs: { - description: "disallow confusing multiline expressions", + description: "Disallow confusing multiline expressions", recommended: true, url: "https://eslint.org/docs/rules/no-unexpected-multiline" }, diff --git a/tools/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js b/tools/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js index 5b8da26f2d2..12f61e98e6a 100644 --- a/tools/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js +++ b/tools/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js @@ -162,7 +162,7 @@ module.exports = { type: "problem", docs: { - description: "disallow unmodified loop conditions", + description: "Disallow unmodified loop conditions", recommended: false, url: "https://eslint.org/docs/rules/no-unmodified-loop-condition" }, diff --git a/tools/node_modules/eslint/lib/rules/no-unneeded-ternary.js b/tools/node_modules/eslint/lib/rules/no-unneeded-ternary.js index e00d5270a2a..c193282fa70 100644 --- a/tools/node_modules/eslint/lib/rules/no-unneeded-ternary.js +++ b/tools/node_modules/eslint/lib/rules/no-unneeded-ternary.js @@ -29,7 +29,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow ternary operators when simpler alternatives exist", + description: "Disallow ternary operators when simpler alternatives exist", recommended: false, url: "https://eslint.org/docs/rules/no-unneeded-ternary" }, diff --git a/tools/node_modules/eslint/lib/rules/no-unreachable-loop.js b/tools/node_modules/eslint/lib/rules/no-unreachable-loop.js index f100263308f..c42c922e0c4 100644 --- a/tools/node_modules/eslint/lib/rules/no-unreachable-loop.js +++ b/tools/node_modules/eslint/lib/rules/no-unreachable-loop.js @@ -59,7 +59,7 @@ module.exports = { type: "problem", docs: { - description: "disallow loops with a body that allows only one iteration", + description: "Disallow loops with a body that allows only one iteration", recommended: false, url: "https://eslint.org/docs/rules/no-unreachable-loop" }, diff --git a/tools/node_modules/eslint/lib/rules/no-unreachable.js b/tools/node_modules/eslint/lib/rules/no-unreachable.js index 4dda51f11b9..dea86815aac 100644 --- a/tools/node_modules/eslint/lib/rules/no-unreachable.js +++ b/tools/node_modules/eslint/lib/rules/no-unreachable.js @@ -111,7 +111,7 @@ module.exports = { type: "problem", docs: { - description: "disallow unreachable code after `return`, `throw`, `continue`, and `break` statements", + description: "Disallow unreachable code after `return`, `throw`, `continue`, and `break` statements", recommended: true, url: "https://eslint.org/docs/rules/no-unreachable" }, diff --git a/tools/node_modules/eslint/lib/rules/no-unsafe-finally.js b/tools/node_modules/eslint/lib/rules/no-unsafe-finally.js index 26c05eab8b0..80adb0fea46 100644 --- a/tools/node_modules/eslint/lib/rules/no-unsafe-finally.js +++ b/tools/node_modules/eslint/lib/rules/no-unsafe-finally.js @@ -24,7 +24,7 @@ module.exports = { type: "problem", docs: { - description: "disallow control flow statements in `finally` blocks", + description: "Disallow control flow statements in `finally` blocks", recommended: true, url: "https://eslint.org/docs/rules/no-unsafe-finally" }, diff --git a/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js b/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js index 057b1742acc..5dd150f8788 100644 --- a/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js +++ b/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js @@ -52,7 +52,7 @@ module.exports = { type: "problem", docs: { - description: "disallow negating the left operand of relational operators", + description: "Disallow negating the left operand of relational operators", recommended: true, url: "https://eslint.org/docs/rules/no-unsafe-negation" }, diff --git a/tools/node_modules/eslint/lib/rules/no-unsafe-optional-chaining.js b/tools/node_modules/eslint/lib/rules/no-unsafe-optional-chaining.js index 8556ccbd79d..99139078198 100644 --- a/tools/node_modules/eslint/lib/rules/no-unsafe-optional-chaining.js +++ b/tools/node_modules/eslint/lib/rules/no-unsafe-optional-chaining.js @@ -24,7 +24,7 @@ module.exports = { type: "problem", docs: { - description: "disallow use of optional chaining in contexts where the `undefined` value is not allowed", + description: "Disallow use of optional chaining in contexts where the `undefined` value is not allowed", recommended: true, url: "https://eslint.org/docs/rules/no-unsafe-optional-chaining" }, diff --git a/tools/node_modules/eslint/lib/rules/no-unused-expressions.js b/tools/node_modules/eslint/lib/rules/no-unused-expressions.js index 68a7ebd5e00..d34d5844d97 100644 --- a/tools/node_modules/eslint/lib/rules/no-unused-expressions.js +++ b/tools/node_modules/eslint/lib/rules/no-unused-expressions.js @@ -30,7 +30,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unused expressions", + description: "Disallow unused expressions", recommended: false, url: "https://eslint.org/docs/rules/no-unused-expressions" }, @@ -124,7 +124,7 @@ module.exports = { */ return (parent.type === "Program" || parent.type === "BlockStatement" && (/Function/u.test(grandparent.type))) && - directives(parent).indexOf(node) >= 0; + directives(parent).includes(node); } /** diff --git a/tools/node_modules/eslint/lib/rules/no-unused-labels.js b/tools/node_modules/eslint/lib/rules/no-unused-labels.js index f309dd12b12..305226a4df2 100644 --- a/tools/node_modules/eslint/lib/rules/no-unused-labels.js +++ b/tools/node_modules/eslint/lib/rules/no-unused-labels.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unused labels", + description: "Disallow unused labels", recommended: true, url: "https://eslint.org/docs/rules/no-unused-labels" }, diff --git a/tools/node_modules/eslint/lib/rules/no-unused-private-class-members.js b/tools/node_modules/eslint/lib/rules/no-unused-private-class-members.js index 754c36002eb..e62a9ed5968 100644 --- a/tools/node_modules/eslint/lib/rules/no-unused-private-class-members.js +++ b/tools/node_modules/eslint/lib/rules/no-unused-private-class-members.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow unused private class members", + description: "Disallow unused private class members", recommended: false, url: "https://eslint.org/docs/rules/no-unused-private-class-members" }, diff --git a/tools/node_modules/eslint/lib/rules/no-unused-vars.js b/tools/node_modules/eslint/lib/rules/no-unused-vars.js index 54e33705f7f..778889a7676 100644 --- a/tools/node_modules/eslint/lib/rules/no-unused-vars.js +++ b/tools/node_modules/eslint/lib/rules/no-unused-vars.js @@ -33,7 +33,7 @@ module.exports = { type: "problem", docs: { - description: "disallow unused variables", + description: "Disallow unused variables", recommended: true, url: "https://eslint.org/docs/rules/no-unused-vars" }, @@ -259,7 +259,7 @@ module.exports = { let scope = ref.from; while (scope) { - if (nodes.indexOf(scope.block) >= 0) { + if (nodes.includes(scope.block)) { return true; } @@ -484,12 +484,12 @@ module.exports = { } /** - * Determine if an identifier is used either in for-in loops. + * Determine if an identifier is used either in for-in or for-of loops. * @param {Reference} ref The reference to check. * @returns {boolean} whether reference is used in the for-in loops * @private */ - function isForInRef(ref) { + function isForInOfRef(ref) { let target = ref.identifier.parent; @@ -498,7 +498,7 @@ module.exports = { target = target.parent.parent; } - if (target.type !== "ForInStatement") { + if (target.type !== "ForInStatement" && target.type !== "ForOfStatement") { return false; } @@ -531,7 +531,7 @@ module.exports = { let rhsNode = null; return variable.references.some(ref => { - if (isForInRef(ref)) { + if (isForInOfRef(ref)) { return true; } diff --git a/tools/node_modules/eslint/lib/rules/no-use-before-define.js b/tools/node_modules/eslint/lib/rules/no-use-before-define.js index 07d035c431f..592c083589c 100644 --- a/tools/node_modules/eslint/lib/rules/no-use-before-define.js +++ b/tools/node_modules/eslint/lib/rules/no-use-before-define.js @@ -21,6 +21,7 @@ function parseOptions(options) { let functions = true; let classes = true; let variables = true; + let allowNamedExports = false; if (typeof options === "string") { functions = (options !== "nofunc"); @@ -28,9 +29,10 @@ function parseOptions(options) { functions = options.functions !== false; classes = options.classes !== false; variables = options.variables !== false; + allowNamedExports = !!options.allowNamedExports; } - return { functions, classes, variables }; + return { functions, classes, variables, allowNamedExports }; } /** @@ -224,7 +226,7 @@ module.exports = { type: "problem", docs: { - description: "disallow the use of variables before they are defined", + description: "Disallow the use of variables before they are defined", recommended: false, url: "https://eslint.org/docs/rules/no-use-before-define" }, @@ -240,7 +242,8 @@ module.exports = { properties: { functions: { type: "boolean" }, classes: { type: "boolean" }, - variables: { type: "boolean" } + variables: { type: "boolean" }, + allowNamedExports: { type: "boolean" } }, additionalProperties: false } @@ -273,6 +276,16 @@ module.exports = { return false; } + const { identifier } = reference; + + if ( + options.allowNamedExports && + identifier.parent.type === "ExportSpecifier" && + identifier.parent.local === identifier + ) { + return false; + } + const variable = reference.resolved; if (!variable || variable.defs.length === 0) { diff --git a/tools/node_modules/eslint/lib/rules/no-useless-backreference.js b/tools/node_modules/eslint/lib/rules/no-useless-backreference.js index 1a09988b809..f23535bc359 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-backreference.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-backreference.js @@ -64,7 +64,7 @@ module.exports = { type: "problem", docs: { - description: "disallow useless backreferences in regular expressions", + description: "Disallow useless backreferences in regular expressions", recommended: true, url: "https://eslint.org/docs/rules/no-useless-backreference" }, diff --git a/tools/node_modules/eslint/lib/rules/no-useless-call.js b/tools/node_modules/eslint/lib/rules/no-useless-call.js index 8c57cd5cc9a..2d3ae4e84ae 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-call.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-call.js @@ -55,7 +55,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary calls to `.call()` and `.apply()`", + description: "Disallow unnecessary calls to `.call()` and `.apply()`", recommended: false, url: "https://eslint.org/docs/rules/no-useless-call" }, diff --git a/tools/node_modules/eslint/lib/rules/no-useless-catch.js b/tools/node_modules/eslint/lib/rules/no-useless-catch.js index 325a2e58117..36c356ecb42 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-catch.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-catch.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary `catch` clauses", + description: "Disallow unnecessary `catch` clauses", recommended: true, url: "https://eslint.org/docs/rules/no-useless-catch" }, diff --git a/tools/node_modules/eslint/lib/rules/no-useless-computed-key.js b/tools/node_modules/eslint/lib/rules/no-useless-computed-key.js index 7ebbe09de26..f7f12179b7b 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-computed-key.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-computed-key.js @@ -74,7 +74,7 @@ function hasUselessComputedKey(node) { return value !== "constructor"; - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error(`Unexpected node type: ${node.type}`); } @@ -91,7 +91,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary computed property keys in objects and classes", + description: "Disallow unnecessary computed property keys in objects and classes", recommended: false, url: "https://eslint.org/docs/rules/no-useless-computed-key" }, diff --git a/tools/node_modules/eslint/lib/rules/no-useless-concat.js b/tools/node_modules/eslint/lib/rules/no-useless-concat.js index 36ca84f90cb..26c5206df36 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-concat.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-concat.js @@ -70,7 +70,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary concatenation of literals or template literals", + description: "Disallow unnecessary concatenation of literals or template literals", recommended: false, url: "https://eslint.org/docs/rules/no-useless-concat" }, diff --git a/tools/node_modules/eslint/lib/rules/no-useless-constructor.js b/tools/node_modules/eslint/lib/rules/no-useless-constructor.js index 6512c8b1fef..38c3bc3a05c 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-constructor.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-constructor.js @@ -138,7 +138,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary constructors", + description: "Disallow unnecessary constructors", recommended: false, url: "https://eslint.org/docs/rules/no-useless-constructor" }, diff --git a/tools/node_modules/eslint/lib/rules/no-useless-escape.js b/tools/node_modules/eslint/lib/rules/no-useless-escape.js index 123bc5b8a01..2046a148a17 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-escape.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-escape.js @@ -84,7 +84,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary escape characters", + description: "Disallow unnecessary escape characters", recommended: true, url: "https://eslint.org/docs/rules/no-useless-escape" }, diff --git a/tools/node_modules/eslint/lib/rules/no-useless-rename.js b/tools/node_modules/eslint/lib/rules/no-useless-rename.js index 2489f57bcf5..908605f74cb 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-rename.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-rename.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow renaming import, export, and destructured assignments to the same name", + description: "Disallow renaming import, export, and destructured assignments to the same name", recommended: false, url: "https://eslint.org/docs/rules/no-useless-rename" }, diff --git a/tools/node_modules/eslint/lib/rules/no-useless-return.js b/tools/node_modules/eslint/lib/rules/no-useless-return.js index 0baa6b2942d..be8d4dfd3a5 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-return.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-return.js @@ -67,7 +67,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow redundant return statements", + description: "Disallow redundant return statements", recommended: false, url: "https://eslint.org/docs/rules/no-useless-return" }, diff --git a/tools/node_modules/eslint/lib/rules/no-var.js b/tools/node_modules/eslint/lib/rules/no-var.js index 83a1f62eb6f..cfb64efafcc 100644 --- a/tools/node_modules/eslint/lib/rules/no-var.js +++ b/tools/node_modules/eslint/lib/rules/no-var.js @@ -90,7 +90,7 @@ function getScopeNode(node) { } } - /* istanbul ignore next : unreachable */ + /* c8 ignore next */ return null; } @@ -185,7 +185,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `let` or `const` instead of `var`", + description: "Require `let` or `const` instead of `var`", recommended: false, url: "https://eslint.org/docs/rules/no-var" }, diff --git a/tools/node_modules/eslint/lib/rules/no-void.js b/tools/node_modules/eslint/lib/rules/no-void.js index 8631caf70cf..15c4730612d 100644 --- a/tools/node_modules/eslint/lib/rules/no-void.js +++ b/tools/node_modules/eslint/lib/rules/no-void.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `void` operators", + description: "Disallow `void` operators", recommended: false, url: "https://eslint.org/docs/rules/no-void" }, diff --git a/tools/node_modules/eslint/lib/rules/no-warning-comments.js b/tools/node_modules/eslint/lib/rules/no-warning-comments.js index 5f3ea21d7d0..9754f50880b 100644 --- a/tools/node_modules/eslint/lib/rules/no-warning-comments.js +++ b/tools/node_modules/eslint/lib/rules/no-warning-comments.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified warning terms in comments", + description: "Disallow specified warning terms in comments", recommended: false, url: "https://eslint.org/docs/rules/no-warning-comments" }, @@ -37,6 +37,15 @@ module.exports = { }, location: { enum: ["start", "anywhere"] + }, + decoration: { + type: "array", + items: { + type: "string", + pattern: "^\\S$" + }, + minItems: 1, + uniqueItems: true } }, additionalProperties: false @@ -53,6 +62,7 @@ module.exports = { configuration = context.options[0] || {}, warningTerms = configuration.terms || ["todo", "fixme", "xxx"], location = configuration.location || "start", + decoration = [...configuration.decoration || []].join(""), selfConfigRegEx = /\bno-warning-comments\b/u; /** @@ -64,59 +74,54 @@ module.exports = { */ function convertToRegExp(term) { const escaped = escapeRegExp(term); - const wordBoundary = "\\b"; - const eitherOrWordBoundary = `|${wordBoundary}`; - let prefix; + const escapedDecoration = escapeRegExp(decoration); /* - * If the term ends in a word character (a-z0-9_), ensure a word - * boundary at the end, so that substrings do not get falsely - * matched. eg "todo" in a string such as "mastodon". - * If the term ends in a non-word character, then \b won't match on - * the boundary to the next non-word character, which would likely - * be a space. For example `/\bFIX!\b/.test('FIX! blah') === false`. - * In these cases, use no bounding match. Same applies for the - * prefix, handled below. + * When matching at the start, ignore leading whitespace, and + * there's no need to worry about word boundaries. + * + * These expressions for the prefix and suffix are designed as follows: + * ^ handles any terms at the beginning of a comment. + * e.g. terms ["TODO"] matches `//TODO something` + * $ handles any terms at the end of a comment + * e.g. terms ["TODO"] matches `// something TODO` + * \b handles terms preceded/followed by word boundary + * e.g. terms: ["!FIX", "FIX!"] matches `// FIX!something` or `// something!FIX` + * terms: ["FIX"] matches `// FIX!` or `// !FIX`, but not `// fixed or affix` + * + * For location start: + * [\s]* handles optional leading spaces + * e.g. terms ["TODO"] matches `// TODO something` + * [\s\*]* (where "\*" is the escaped string of decoration) + * handles optional leading spaces or decoration characters (for "start" location only) + * e.g. terms ["TODO"] matches `/**** TODO something ... ` */ - const suffix = /\w$/u.test(term) ? "\\b" : ""; + const wordBoundary = "\\b"; - if (location === "start") { + let prefix = ""; - /* - * When matching at the start, ignore leading whitespace, and - * there's no need to worry about word boundaries. - */ - prefix = "^\\s*"; + if (location === "start") { + prefix = `^[\\s${escapedDecoration}]*`; } else if (/^\w/u.test(term)) { prefix = wordBoundary; - } else { - prefix = ""; } - if (location === "start") { - - /* - * For location "start" the regex should be - * ^\s*TERM\b. This checks the word boundary - * at the beginning of the comment. - */ - return new RegExp(prefix + escaped + suffix, "iu"); - } + const suffix = /\w$/u.test(term) ? wordBoundary : ""; + const flags = "iu"; // Case-insensitive with Unicode case folding. /* - * For location "anywhere" the regex should be - * \bTERM\b|\bTERM\b, this checks the entire comment - * for the term. + * For location "start", the typical regex is: + * /^[\s]*ESCAPED_TERM\b/iu. + * Or if decoration characters are specified (e.g. "*"), then any of + * those characters may appear in any order at the start: + * /^[\s\*]*ESCAPED_TERM\b/iu. + * + * For location "anywhere" the typical regex is + * /\bESCAPED_TERM\b/iu + * + * If it starts or ends with non-word character, the prefix and suffix are empty, respectively. */ - return new RegExp( - prefix + - escaped + - suffix + - eitherOrWordBoundary + - term + - wordBoundary, - "iu" - ); + return new RegExp(`${prefix}${escaped}${suffix}`, flags); } const warningRegExps = warningTerms.map(convertToRegExp); diff --git a/tools/node_modules/eslint/lib/rules/no-whitespace-before-property.js b/tools/node_modules/eslint/lib/rules/no-whitespace-before-property.js index 95e920f27ea..67323816f85 100644 --- a/tools/node_modules/eslint/lib/rules/no-whitespace-before-property.js +++ b/tools/node_modules/eslint/lib/rules/no-whitespace-before-property.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "disallow whitespace before properties", + description: "Disallow whitespace before properties", recommended: false, url: "https://eslint.org/docs/rules/no-whitespace-before-property" }, diff --git a/tools/node_modules/eslint/lib/rules/no-with.js b/tools/node_modules/eslint/lib/rules/no-with.js index fc93f199f87..33de68d9c05 100644 --- a/tools/node_modules/eslint/lib/rules/no-with.js +++ b/tools/node_modules/eslint/lib/rules/no-with.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `with` statements", + description: "Disallow `with` statements", recommended: true, url: "https://eslint.org/docs/rules/no-with" }, diff --git a/tools/node_modules/eslint/lib/rules/nonblock-statement-body-position.js b/tools/node_modules/eslint/lib/rules/nonblock-statement-body-position.js index c177cf34cee..cefecf302a6 100644 --- a/tools/node_modules/eslint/lib/rules/nonblock-statement-body-position.js +++ b/tools/node_modules/eslint/lib/rules/nonblock-statement-body-position.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce the location of single-line statements", + description: "Enforce the location of single-line statements", recommended: false, url: "https://eslint.org/docs/rules/nonblock-statement-body-position" }, diff --git a/tools/node_modules/eslint/lib/rules/object-curly-newline.js b/tools/node_modules/eslint/lib/rules/object-curly-newline.js index e052cd86493..2f8004918a9 100644 --- a/tools/node_modules/eslint/lib/rules/object-curly-newline.js +++ b/tools/node_modules/eslint/lib/rules/object-curly-newline.js @@ -150,7 +150,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent line breaks after opening and before closing braces", + description: "Enforce consistent line breaks after opening and before closing braces", recommended: false, url: "https://eslint.org/docs/rules/object-curly-newline" }, diff --git a/tools/node_modules/eslint/lib/rules/object-curly-spacing.js b/tools/node_modules/eslint/lib/rules/object-curly-spacing.js index 9122da3ef3d..d6a8e5956ae 100644 --- a/tools/node_modules/eslint/lib/rules/object-curly-spacing.js +++ b/tools/node_modules/eslint/lib/rules/object-curly-spacing.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing inside braces", + description: "Enforce consistent spacing inside braces", recommended: false, url: "https://eslint.org/docs/rules/object-curly-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/object-property-newline.js b/tools/node_modules/eslint/lib/rules/object-property-newline.js index dac084c3f65..bc079a16f45 100644 --- a/tools/node_modules/eslint/lib/rules/object-property-newline.js +++ b/tools/node_modules/eslint/lib/rules/object-property-newline.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "enforce placing object properties on separate lines", + description: "Enforce placing object properties on separate lines", recommended: false, url: "https://eslint.org/docs/rules/object-property-newline" }, diff --git a/tools/node_modules/eslint/lib/rules/object-shorthand.js b/tools/node_modules/eslint/lib/rules/object-shorthand.js index aa03450d071..b755aea3f48 100644 --- a/tools/node_modules/eslint/lib/rules/object-shorthand.js +++ b/tools/node_modules/eslint/lib/rules/object-shorthand.js @@ -28,7 +28,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow method and property shorthand syntax for object literals", + description: "Require or disallow method and property shorthand syntax for object literals", recommended: false, url: "https://eslint.org/docs/rules/object-shorthand" }, @@ -78,6 +78,9 @@ module.exports = { ignoreConstructors: { type: "boolean" }, + methodsIgnorePattern: { + type: "string" + }, avoidQuotes: { type: "boolean" }, @@ -115,6 +118,9 @@ module.exports = { const PARAMS = context.options[1] || {}; const IGNORE_CONSTRUCTORS = PARAMS.ignoreConstructors; + const METHODS_IGNORE_PATTERN = PARAMS.methodsIgnorePattern + ? new RegExp(PARAMS.methodsIgnorePattern, "u") + : null; const AVOID_QUOTES = PARAMS.avoidQuotes; const AVOID_EXPLICIT_RETURN_ARROWS = !!PARAMS.avoidExplicitReturnArrows; const sourceCode = context.getSourceCode(); @@ -457,6 +463,15 @@ module.exports = { if (IGNORE_CONSTRUCTORS && node.key.type === "Identifier" && isConstructor(node.key.name)) { return; } + + if (METHODS_IGNORE_PATTERN) { + const propertyName = astUtils.getStaticPropertyName(node); + + if (propertyName !== null && METHODS_IGNORE_PATTERN.test(propertyName)) { + return; + } + } + if (AVOID_QUOTES && isStringLiteral(node.key)) { return; } diff --git a/tools/node_modules/eslint/lib/rules/one-var-declaration-per-line.js b/tools/node_modules/eslint/lib/rules/one-var-declaration-per-line.js index 440146b92c1..65be0929e71 100644 --- a/tools/node_modules/eslint/lib/rules/one-var-declaration-per-line.js +++ b/tools/node_modules/eslint/lib/rules/one-var-declaration-per-line.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow newlines around variable declarations", + description: "Require or disallow newlines around variable declarations", recommended: false, url: "https://eslint.org/docs/rules/one-var-declaration-per-line" }, diff --git a/tools/node_modules/eslint/lib/rules/one-var.js b/tools/node_modules/eslint/lib/rules/one-var.js index 1818c02e6e1..a8e2a1de05a 100644 --- a/tools/node_modules/eslint/lib/rules/one-var.js +++ b/tools/node_modules/eslint/lib/rules/one-var.js @@ -34,7 +34,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce variables to be declared either together or separately in functions", + description: "Enforce variables to be declared either together or separately in functions", recommended: false, url: "https://eslint.org/docs/rules/one-var" }, diff --git a/tools/node_modules/eslint/lib/rules/operator-assignment.js b/tools/node_modules/eslint/lib/rules/operator-assignment.js index d200811634c..ed9cb963bf2 100644 --- a/tools/node_modules/eslint/lib/rules/operator-assignment.js +++ b/tools/node_modules/eslint/lib/rules/operator-assignment.js @@ -22,7 +22,7 @@ const astUtils = require("./utils/ast-utils"); * shorthand form. */ function isCommutativeOperatorWithShorthand(operator) { - return ["*", "&", "^", "|"].indexOf(operator) >= 0; + return ["*", "&", "^", "|"].includes(operator); } /** @@ -33,7 +33,7 @@ function isCommutativeOperatorWithShorthand(operator) { * a shorthand form. */ function isNonCommutativeOperatorWithShorthand(operator) { - return ["+", "-", "/", "%", "<<", ">>", ">>>", "**"].indexOf(operator) >= 0; + return ["+", "-", "/", "%", "<<", ">>", ">>>", "**"].includes(operator); } //------------------------------------------------------------------------------ @@ -63,7 +63,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow assignment operator shorthand where possible", + description: "Require or disallow assignment operator shorthand where possible", recommended: false, url: "https://eslint.org/docs/rules/operator-assignment" }, @@ -76,8 +76,8 @@ module.exports = { fixable: "code", messages: { - replaced: "Assignment (=) can be replaced with operator assignment ({{operator}}=).", - unexpected: "Unexpected operator assignment ({{operator}}=) shorthand." + replaced: "Assignment (=) can be replaced with operator assignment ({{operator}}).", + unexpected: "Unexpected operator assignment ({{operator}}) shorthand." } }, @@ -109,11 +109,13 @@ module.exports = { const operator = expr.operator; if (isCommutativeOperatorWithShorthand(operator) || isNonCommutativeOperatorWithShorthand(operator)) { + const replacementOperator = `${operator}=`; + if (astUtils.isSameReference(left, expr.left, true)) { context.report({ node, messageId: "replaced", - data: { operator }, + data: { operator: replacementOperator }, fix(fixer) { if (canBeFixed(left) && canBeFixed(expr.left)) { const equalsToken = getOperatorToken(node); @@ -126,7 +128,7 @@ module.exports = { return null; } - return fixer.replaceText(node, `${leftText}${expr.operator}=${rightText}`); + return fixer.replaceText(node, `${leftText}${replacementOperator}${rightText}`); } return null; } @@ -141,7 +143,7 @@ module.exports = { context.report({ node, messageId: "replaced", - data: { operator } + data: { operator: replacementOperator } }); } } diff --git a/tools/node_modules/eslint/lib/rules/operator-linebreak.js b/tools/node_modules/eslint/lib/rules/operator-linebreak.js index a04f85bdea9..03b603e7584 100644 --- a/tools/node_modules/eslint/lib/rules/operator-linebreak.js +++ b/tools/node_modules/eslint/lib/rules/operator-linebreak.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent linebreak style for operators", + description: "Enforce consistent linebreak style for operators", recommended: false, url: "https://eslint.org/docs/rules/operator-linebreak" }, diff --git a/tools/node_modules/eslint/lib/rules/padded-blocks.js b/tools/node_modules/eslint/lib/rules/padded-blocks.js index 336adac9a02..bc194283dea 100644 --- a/tools/node_modules/eslint/lib/rules/padded-blocks.js +++ b/tools/node_modules/eslint/lib/rules/padded-blocks.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow padding within blocks", + description: "Require or disallow padding within blocks", recommended: false, url: "https://eslint.org/docs/rules/padded-blocks" }, @@ -186,7 +186,7 @@ module.exports = { case "ClassBody": return options.classes; - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error("unreachable"); } diff --git a/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js b/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js index fe5d304dd5b..9d730bffcd9 100644 --- a/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js +++ b/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js @@ -431,7 +431,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow padding lines between statements", + description: "Require or disallow padding lines between statements", recommended: false, url: "https://eslint.org/docs/rules/padding-line-between-statements" }, @@ -450,8 +450,7 @@ module.exports = { type: "array", items: { enum: Object.keys(StatementTypes) }, minItems: 1, - uniqueItems: true, - additionalItems: false + uniqueItems: true } ] } @@ -466,8 +465,7 @@ module.exports = { }, additionalProperties: false, required: ["blankLine", "prev", "next"] - }, - additionalItems: false + } }, messages: { diff --git a/tools/node_modules/eslint/lib/rules/prefer-arrow-callback.js b/tools/node_modules/eslint/lib/rules/prefer-arrow-callback.js index 55a098a6097..8af7161a0f9 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-arrow-callback.js +++ b/tools/node_modules/eslint/lib/rules/prefer-arrow-callback.js @@ -53,7 +53,7 @@ function getVariableOfArguments(scope) { } } - /* istanbul ignore next */ + /* c8 ignore next */ return null; } @@ -126,7 +126,7 @@ function getCallbackInfo(node) { parent = parent.parent; } - /* istanbul ignore next */ + /* c8 ignore next */ throw new Error("unreachable"); } @@ -151,7 +151,7 @@ module.exports = { type: "suggestion", docs: { - description: "require using arrow functions for callbacks", + description: "Require using arrow functions for callbacks", recommended: false, url: "https://eslint.org/docs/rules/prefer-arrow-callback" }, diff --git a/tools/node_modules/eslint/lib/rules/prefer-const.js b/tools/node_modules/eslint/lib/rules/prefer-const.js index 190860019d8..e3d2db7aeb9 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-const.js +++ b/tools/node_modules/eslint/lib/rules/prefer-const.js @@ -60,7 +60,7 @@ function canBecomeVariableDeclaration(identifier) { */ function isOuterVariableInDestructing(name, initScope) { - if (initScope.through.find(ref => ref.resolved && ref.resolved.name === name)) { + if (initScope.through.some(ref => ref.resolved && ref.resolved.name === name)) { return true; } @@ -332,7 +332,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `const` declarations for variables that are never reassigned after declared", + description: "Require `const` declarations for variables that are never reassigned after declared", recommended: false, url: "https://eslint.org/docs/rules/prefer-const" }, @@ -446,7 +446,19 @@ module.exports = { reportCount += nodesToReport.length; - shouldFix = shouldFix && (reportCount === varDeclParent.declarations.length); + let totalDeclarationsCount = 0; + + varDeclParent.declarations.forEach(declaration => { + if (declaration.id.type === "ObjectPattern") { + totalDeclarationsCount += declaration.id.properties.length; + } else if (declaration.id.type === "ArrayPattern") { + totalDeclarationsCount += declaration.id.elements.length; + } else { + totalDeclarationsCount += 1; + } + }); + + shouldFix = shouldFix && (reportCount === totalDeclarationsCount); } } diff --git a/tools/node_modules/eslint/lib/rules/prefer-destructuring.js b/tools/node_modules/eslint/lib/rules/prefer-destructuring.js index 1f68313d6b1..fdf46f65f59 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-destructuring.js +++ b/tools/node_modules/eslint/lib/rules/prefer-destructuring.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "require destructuring from arrays and/or objects", + description: "Require destructuring from arrays and/or objects", recommended: false, url: "https://eslint.org/docs/rules/prefer-destructuring" }, diff --git a/tools/node_modules/eslint/lib/rules/prefer-exponentiation-operator.js b/tools/node_modules/eslint/lib/rules/prefer-exponentiation-operator.js index a291e8dec15..fec5319723e 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-exponentiation-operator.js +++ b/tools/node_modules/eslint/lib/rules/prefer-exponentiation-operator.js @@ -90,7 +90,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `Math.pow` in favor of the `**` operator", + description: "Disallow the use of `Math.pow` in favor of the `**` operator", recommended: false, url: "https://eslint.org/docs/rules/prefer-exponentiation-operator" }, diff --git a/tools/node_modules/eslint/lib/rules/prefer-named-capture-group.js b/tools/node_modules/eslint/lib/rules/prefer-named-capture-group.js index cff2d8f45d2..1a13ffa8582 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-named-capture-group.js +++ b/tools/node_modules/eslint/lib/rules/prefer-named-capture-group.js @@ -33,7 +33,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce using named capture group in regular expression", + description: "Enforce using named capture group in regular expression", recommended: false, url: "https://eslint.org/docs/rules/prefer-named-capture-group" }, diff --git a/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js b/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js index 53a51536896..5f70158126c 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js +++ b/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js @@ -45,7 +45,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals", + description: "Disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals", recommended: false, url: "https://eslint.org/docs/rules/prefer-numeric-literals" }, diff --git a/tools/node_modules/eslint/lib/rules/prefer-object-has-own.js b/tools/node_modules/eslint/lib/rules/prefer-object-has-own.js index 19abdb31565..023d0a64f4c 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-object-has-own.js +++ b/tools/node_modules/eslint/lib/rules/prefer-object-has-own.js @@ -50,7 +50,7 @@ module.exports = { type: "suggestion", docs: { description: - "disallow use of `Object.prototype.hasOwnProperty.call()` and prefer use of `Object.hasOwn()`", + "Disallow use of `Object.prototype.hasOwnProperty.call()` and prefer use of `Object.hasOwn()`", recommended: false, url: "https://eslint.org/docs/rules/prefer-object-has-own" }, diff --git a/tools/node_modules/eslint/lib/rules/prefer-object-spread.js b/tools/node_modules/eslint/lib/rules/prefer-object-spread.js index b63474ef2bd..08192001a2b 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-object-spread.js +++ b/tools/node_modules/eslint/lib/rules/prefer-object-spread.js @@ -247,7 +247,7 @@ module.exports = { docs: { description: - "disallow using Object.assign with an object literal as the first argument and prefer the use of object spread instead.", + "Disallow using Object.assign with an object literal as the first argument and prefer the use of object spread instead.", recommended: false, url: "https://eslint.org/docs/rules/prefer-object-spread" }, diff --git a/tools/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js b/tools/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js index 60e72f45101..bd7bdcbf5b7 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js +++ b/tools/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "require using Error objects as Promise rejection reasons", + description: "Require using Error objects as Promise rejection reasons", recommended: false, url: "https://eslint.org/docs/rules/prefer-promise-reject-errors" }, diff --git a/tools/node_modules/eslint/lib/rules/prefer-reflect.js b/tools/node_modules/eslint/lib/rules/prefer-reflect.js index 1367a1848df..68ffa88b352 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-reflect.js +++ b/tools/node_modules/eslint/lib/rules/prefer-reflect.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `Reflect` methods where applicable", + description: "Require `Reflect` methods where applicable", recommended: false, url: "https://eslint.org/docs/rules/prefer-reflect" }, @@ -106,7 +106,7 @@ module.exports = { const methodName = (node.callee.property || {}).name; const isReflectCall = (node.callee.object || {}).name === "Reflect"; const hasReflectSubstitute = Object.prototype.hasOwnProperty.call(reflectSubstitutes, methodName); - const userConfiguredException = exceptions.indexOf(methodName) !== -1; + const userConfiguredException = exceptions.includes(methodName); if (hasReflectSubstitute && !isReflectCall && !userConfiguredException) { report(node, existingNames[methodName], reflectSubstitutes[methodName]); @@ -115,7 +115,7 @@ module.exports = { UnaryExpression(node) { const isDeleteOperator = node.operator === "delete"; const targetsIdentifier = node.argument.type === "Identifier"; - const userConfiguredException = exceptions.indexOf("delete") !== -1; + const userConfiguredException = exceptions.includes("delete"); if (isDeleteOperator && !targetsIdentifier && !userConfiguredException) { report(node, "the delete keyword", "Reflect.deleteProperty"); diff --git a/tools/node_modules/eslint/lib/rules/prefer-regex-literals.js b/tools/node_modules/eslint/lib/rules/prefer-regex-literals.js index 158f84b940d..f30eddbf8c5 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-regex-literals.js +++ b/tools/node_modules/eslint/lib/rules/prefer-regex-literals.js @@ -47,7 +47,7 @@ function isStaticTemplateLiteral(node) { return node.type === "TemplateLiteral" && node.expressions.length === 0; } -const validPrecedingTokens = [ +const validPrecedingTokens = new Set([ "(", ";", "[", @@ -110,7 +110,7 @@ const validPrecedingTokens = [ "debugger", "case", "throw" -]; +]); //------------------------------------------------------------------------------ @@ -123,7 +123,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow use of the `RegExp` constructor in favor of regular expression literals", + description: "Disallow use of the `RegExp` constructor in favor of regular expression literals", recommended: false, url: "https://eslint.org/docs/rules/prefer-regex-literals" }, @@ -334,7 +334,7 @@ module.exports = { const tokenBefore = sourceCode.getTokenBefore(node); - if (tokenBefore && !validPrecedingTokens.includes(tokenBefore.value)) { + if (tokenBefore && !validPrecedingTokens.has(tokenBefore.value)) { noFix = true; } diff --git a/tools/node_modules/eslint/lib/rules/prefer-rest-params.js b/tools/node_modules/eslint/lib/rules/prefer-rest-params.js index 371a28964f2..14b9ae55a4b 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-rest-params.js +++ b/tools/node_modules/eslint/lib/rules/prefer-rest-params.js @@ -30,7 +30,7 @@ function getVariableOfArguments(scope) { } } - /* istanbul ignore next : unreachable */ + /* c8 ignore next */ return null; } @@ -65,7 +65,7 @@ module.exports = { type: "suggestion", docs: { - description: "require rest parameters instead of `arguments`", + description: "Require rest parameters instead of `arguments`", recommended: false, url: "https://eslint.org/docs/rules/prefer-rest-params" }, diff --git a/tools/node_modules/eslint/lib/rules/prefer-spread.js b/tools/node_modules/eslint/lib/rules/prefer-spread.js index c5f9e1e6cbf..c8909fc0612 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-spread.js +++ b/tools/node_modules/eslint/lib/rules/prefer-spread.js @@ -49,7 +49,7 @@ module.exports = { type: "suggestion", docs: { - description: "require spread operators instead of `.apply()`", + description: "Require spread operators instead of `.apply()`", recommended: false, url: "https://eslint.org/docs/rules/prefer-spread" }, diff --git a/tools/node_modules/eslint/lib/rules/prefer-template.js b/tools/node_modules/eslint/lib/rules/prefer-template.js index e61eac1d65d..167c187db6f 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-template.js +++ b/tools/node_modules/eslint/lib/rules/prefer-template.js @@ -128,7 +128,7 @@ module.exports = { type: "suggestion", docs: { - description: "require template literals instead of string concatenation", + description: "Require template literals instead of string concatenation", recommended: false, url: "https://eslint.org/docs/rules/prefer-template" }, diff --git a/tools/node_modules/eslint/lib/rules/quote-props.js b/tools/node_modules/eslint/lib/rules/quote-props.js index e57ad6eea29..db9423978bb 100644 --- a/tools/node_modules/eslint/lib/rules/quote-props.js +++ b/tools/node_modules/eslint/lib/rules/quote-props.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "require quotes around object literal property names", + description: "Require quotes around object literal property names", recommended: false, url: "https://eslint.org/docs/rules/quote-props" }, @@ -95,7 +95,7 @@ module.exports = { * @returns {boolean} `true` if it is an ES3 token. */ function isKeyword(tokenStr) { - return keywords.indexOf(tokenStr) >= 0; + return keywords.includes(tokenStr); } /** @@ -108,7 +108,7 @@ module.exports = { */ function areQuotesRedundant(rawKey, tokens, skipNumberLiterals) { return tokens.length === 1 && tokens[0].start === 0 && tokens[0].end === rawKey.length && - (["Identifier", "Keyword", "Null", "Boolean"].indexOf(tokens[0].type) >= 0 || + (["Identifier", "Keyword", "Null", "Boolean"].includes(tokens[0].type) || (tokens[0].type === "Numeric" && !skipNumberLiterals && String(+tokens[0].value) === tokens[0].value)); } diff --git a/tools/node_modules/eslint/lib/rules/quotes.js b/tools/node_modules/eslint/lib/rules/quotes.js index 41bff3c4ecf..ab7b38b90bf 100644 --- a/tools/node_modules/eslint/lib/rules/quotes.js +++ b/tools/node_modules/eslint/lib/rules/quotes.js @@ -80,7 +80,7 @@ module.exports = { type: "layout", docs: { - description: "enforce the consistent use of either backticks, double, or single quotes", + description: "Enforce the consistent use of either backticks, double, or single quotes", recommended: false, url: "https://eslint.org/docs/rules/quotes" }, @@ -283,7 +283,7 @@ module.exports = { astUtils.isSurroundedBy(rawVal, settings.quote); if (!isValid && avoidEscape) { - isValid = astUtils.isSurroundedBy(rawVal, settings.alternateQuote) && rawVal.indexOf(settings.quote) >= 0; + isValid = astUtils.isSurroundedBy(rawVal, settings.alternateQuote) && rawVal.includes(settings.quote); } if (!isValid) { diff --git a/tools/node_modules/eslint/lib/rules/radix.js b/tools/node_modules/eslint/lib/rules/radix.js index f83c762c11d..0618d9844ad 100644 --- a/tools/node_modules/eslint/lib/rules/radix.js +++ b/tools/node_modules/eslint/lib/rules/radix.js @@ -80,7 +80,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce the consistent use of the radix argument when using `parseInt()`", + description: "Enforce the consistent use of the radix argument when using `parseInt()`", recommended: false, url: "https://eslint.org/docs/rules/radix" }, diff --git a/tools/node_modules/eslint/lib/rules/require-atomic-updates.js b/tools/node_modules/eslint/lib/rules/require-atomic-updates.js index 4dbd48dfc58..7a5f822ab28 100644 --- a/tools/node_modules/eslint/lib/rules/require-atomic-updates.js +++ b/tools/node_modules/eslint/lib/rules/require-atomic-updates.js @@ -171,7 +171,7 @@ module.exports = { type: "problem", docs: { - description: "disallow assignments that can lead to race conditions due to usage of `await` or `yield`", + description: "Disallow assignments that can lead to race conditions due to usage of `await` or `yield`", recommended: false, url: "https://eslint.org/docs/rules/require-atomic-updates" }, diff --git a/tools/node_modules/eslint/lib/rules/require-await.js b/tools/node_modules/eslint/lib/rules/require-await.js index 1b17de0e197..1add2552e58 100644 --- a/tools/node_modules/eslint/lib/rules/require-await.js +++ b/tools/node_modules/eslint/lib/rules/require-await.js @@ -34,7 +34,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow async functions which have no `await` expression", + description: "Disallow async functions which have no `await` expression", recommended: false, url: "https://eslint.org/docs/rules/require-await" }, diff --git a/tools/node_modules/eslint/lib/rules/require-jsdoc.js b/tools/node_modules/eslint/lib/rules/require-jsdoc.js index 169b6f52413..755f6df5fee 100644 --- a/tools/node_modules/eslint/lib/rules/require-jsdoc.js +++ b/tools/node_modules/eslint/lib/rules/require-jsdoc.js @@ -11,7 +11,7 @@ module.exports = { type: "suggestion", docs: { - description: "require JSDoc comments", + description: "Require JSDoc comments", recommended: false, url: "https://eslint.org/docs/rules/require-jsdoc" }, diff --git a/tools/node_modules/eslint/lib/rules/require-unicode-regexp.js b/tools/node_modules/eslint/lib/rules/require-unicode-regexp.js index 577ae6cf827..4236af6db47 100644 --- a/tools/node_modules/eslint/lib/rules/require-unicode-regexp.js +++ b/tools/node_modules/eslint/lib/rules/require-unicode-regexp.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce the use of `u` flag on RegExp", + description: "Enforce the use of `u` flag on RegExp", recommended: false, url: "https://eslint.org/docs/rules/require-unicode-regexp" }, diff --git a/tools/node_modules/eslint/lib/rules/require-yield.js b/tools/node_modules/eslint/lib/rules/require-yield.js index aba06140672..b3f1341136a 100644 --- a/tools/node_modules/eslint/lib/rules/require-yield.js +++ b/tools/node_modules/eslint/lib/rules/require-yield.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require generator functions to contain `yield`", + description: "Require generator functions to contain `yield`", recommended: true, url: "https://eslint.org/docs/rules/require-yield" }, @@ -68,7 +68,6 @@ module.exports = { // Increases the count of `yield` keyword. YieldExpression() { - /* istanbul ignore else */ if (stack.length > 0) { stack[stack.length - 1] += 1; } diff --git a/tools/node_modules/eslint/lib/rules/rest-spread-spacing.js b/tools/node_modules/eslint/lib/rules/rest-spread-spacing.js index ace1ec52141..17f9aa0c3c5 100644 --- a/tools/node_modules/eslint/lib/rules/rest-spread-spacing.js +++ b/tools/node_modules/eslint/lib/rules/rest-spread-spacing.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "enforce spacing between rest and spread operators and their expressions", + description: "Enforce spacing between rest and spread operators and their expressions", recommended: false, url: "https://eslint.org/docs/rules/rest-spread-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/semi-spacing.js b/tools/node_modules/eslint/lib/rules/semi-spacing.js index 4f0afbb11a3..875cb62443d 100644 --- a/tools/node_modules/eslint/lib/rules/semi-spacing.js +++ b/tools/node_modules/eslint/lib/rules/semi-spacing.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before and after semicolons", + description: "Enforce consistent spacing before and after semicolons", recommended: false, url: "https://eslint.org/docs/rules/semi-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/semi-style.js b/tools/node_modules/eslint/lib/rules/semi-style.js index 7952a9adff1..424858b4ba1 100644 --- a/tools/node_modules/eslint/lib/rules/semi-style.js +++ b/tools/node_modules/eslint/lib/rules/semi-style.js @@ -73,7 +73,7 @@ module.exports = { type: "layout", docs: { - description: "enforce location of semicolons", + description: "Enforce location of semicolons", recommended: false, url: "https://eslint.org/docs/rules/semi-style" }, diff --git a/tools/node_modules/eslint/lib/rules/semi.js b/tools/node_modules/eslint/lib/rules/semi.js index 86ff8d74ee1..1e49273c2e9 100644 --- a/tools/node_modules/eslint/lib/rules/semi.js +++ b/tools/node_modules/eslint/lib/rules/semi.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow semicolons instead of ASI", + description: "Require or disallow semicolons instead of ASI", recommended: false, url: "https://eslint.org/docs/rules/semi" }, diff --git a/tools/node_modules/eslint/lib/rules/sort-imports.js b/tools/node_modules/eslint/lib/rules/sort-imports.js index 13cb63681cb..bfb0765baa5 100644 --- a/tools/node_modules/eslint/lib/rules/sort-imports.js +++ b/tools/node_modules/eslint/lib/rules/sort-imports.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce sorted import declarations within modules", + description: "Enforce sorted import declarations within modules", recommended: false, url: "https://eslint.org/docs/rules/sort-imports" }, diff --git a/tools/node_modules/eslint/lib/rules/sort-keys.js b/tools/node_modules/eslint/lib/rules/sort-keys.js index 2fc19635271..1523ab751a0 100644 --- a/tools/node_modules/eslint/lib/rules/sort-keys.js +++ b/tools/node_modules/eslint/lib/rules/sort-keys.js @@ -81,7 +81,7 @@ module.exports = { type: "suggestion", docs: { - description: "require object keys to be sorted", + description: "Require object keys to be sorted", recommended: false, url: "https://eslint.org/docs/rules/sort-keys" }, @@ -105,6 +105,10 @@ module.exports = { type: "integer", minimum: 2, default: 2 + }, + allowLineSeparatedGroups: { + type: "boolean", + default: false } }, additionalProperties: false @@ -124,17 +128,21 @@ module.exports = { const insensitive = options && options.caseSensitive === false; const natural = options && options.natural; const minKeys = options && options.minKeys; + const allowLineSeparatedGroups = options && options.allowLineSeparatedGroups || false; const isValidOrder = isValidOrders[ order + (insensitive ? "I" : "") + (natural ? "N" : "") ]; // The stack to save the previous property's name for each object literals. let stack = null; + const sourceCode = context.getSourceCode(); return { ObjectExpression(node) { stack = { upper: stack, + prevNode: null, + prevBlankLine: false, prevName: null, numKeys: node.properties.length }; @@ -159,10 +167,45 @@ module.exports = { const numKeys = stack.numKeys; const thisName = getPropertyName(node); + // Get tokens between current node and previous node + const tokens = stack.prevNode && sourceCode + .getTokensBetween(stack.prevNode, node, { includeComments: true }); + + let isBlankLineBetweenNodes = stack.prevBlankLine; + + if (tokens) { + + // check blank line between tokens + tokens.forEach((token, index) => { + const previousToken = tokens[index - 1]; + + if (previousToken && (token.loc.start.line - previousToken.loc.end.line > 1)) { + isBlankLineBetweenNodes = true; + } + }); + + // check blank line between the current node and the last token + if (!isBlankLineBetweenNodes && (node.loc.start.line - tokens[tokens.length - 1].loc.end.line > 1)) { + isBlankLineBetweenNodes = true; + } + + // check blank line between the first token and the previous node + if (!isBlankLineBetweenNodes && (tokens[0].loc.start.line - stack.prevNode.loc.end.line > 1)) { + isBlankLineBetweenNodes = true; + } + } + + stack.prevNode = node; + if (thisName !== null) { stack.prevName = thisName; } + if (allowLineSeparatedGroups && isBlankLineBetweenNodes) { + stack.prevBlankLine = thisName === null; + return; + } + if (prevName === null || thisName === null || numKeys < minKeys) { return; } diff --git a/tools/node_modules/eslint/lib/rules/sort-vars.js b/tools/node_modules/eslint/lib/rules/sort-vars.js index 8246558c547..ec0718ee578 100644 --- a/tools/node_modules/eslint/lib/rules/sort-vars.js +++ b/tools/node_modules/eslint/lib/rules/sort-vars.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require variables within the same declaration block to be sorted", + description: "Require variables within the same declaration block to be sorted", recommended: false, url: "https://eslint.org/docs/rules/sort-vars" }, diff --git a/tools/node_modules/eslint/lib/rules/space-before-blocks.js b/tools/node_modules/eslint/lib/rules/space-before-blocks.js index 5cc7266654f..ffd33ddcaea 100644 --- a/tools/node_modules/eslint/lib/rules/space-before-blocks.js +++ b/tools/node_modules/eslint/lib/rules/space-before-blocks.js @@ -40,7 +40,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before blocks", + description: "Enforce consistent spacing before blocks", recommended: false, url: "https://eslint.org/docs/rules/space-before-blocks" }, diff --git a/tools/node_modules/eslint/lib/rules/space-before-function-paren.js b/tools/node_modules/eslint/lib/rules/space-before-function-paren.js index fdd45be241d..b56ac3c52c7 100644 --- a/tools/node_modules/eslint/lib/rules/space-before-function-paren.js +++ b/tools/node_modules/eslint/lib/rules/space-before-function-paren.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before `function` definition opening parenthesis", + description: "Enforce consistent spacing before `function` definition opening parenthesis", recommended: false, url: "https://eslint.org/docs/rules/space-before-function-paren" }, diff --git a/tools/node_modules/eslint/lib/rules/space-in-parens.js b/tools/node_modules/eslint/lib/rules/space-in-parens.js index 1509d600f1d..42d9bb58e7e 100644 --- a/tools/node_modules/eslint/lib/rules/space-in-parens.js +++ b/tools/node_modules/eslint/lib/rules/space-in-parens.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing inside parentheses", + description: "Enforce consistent spacing inside parentheses", recommended: false, url: "https://eslint.org/docs/rules/space-in-parens" }, diff --git a/tools/node_modules/eslint/lib/rules/space-infix-ops.js b/tools/node_modules/eslint/lib/rules/space-infix-ops.js index c526b7e2b0a..141c269df6b 100644 --- a/tools/node_modules/eslint/lib/rules/space-infix-ops.js +++ b/tools/node_modules/eslint/lib/rules/space-infix-ops.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "require spacing around infix operators", + description: "Require spacing around infix operators", recommended: false, url: "https://eslint.org/docs/rules/space-infix-ops" }, diff --git a/tools/node_modules/eslint/lib/rules/space-unary-ops.js b/tools/node_modules/eslint/lib/rules/space-unary-ops.js index 04487c49e0d..1d9141d2b97 100644 --- a/tools/node_modules/eslint/lib/rules/space-unary-ops.js +++ b/tools/node_modules/eslint/lib/rules/space-unary-ops.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before or after unary operators", + description: "Enforce consistent spacing before or after unary operators", recommended: false, url: "https://eslint.org/docs/rules/space-unary-ops" }, diff --git a/tools/node_modules/eslint/lib/rules/spaced-comment.js b/tools/node_modules/eslint/lib/rules/spaced-comment.js index 674c13cf380..6aedeae871d 100644 --- a/tools/node_modules/eslint/lib/rules/spaced-comment.js +++ b/tools/node_modules/eslint/lib/rules/spaced-comment.js @@ -39,7 +39,7 @@ function escapeAndRepeat(s) { function parseMarkersOption(markers) { // `*` is a marker for JSDoc comments. - if (markers.indexOf("*") === -1) { + if (!markers.includes("*")) { return markers.concat("*"); } @@ -152,7 +152,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce consistent spacing after the `//` or `/*` in a comment", + description: "Enforce consistent spacing after the `//` or `/*` in a comment", recommended: false, url: "https://eslint.org/docs/rules/spaced-comment" }, diff --git a/tools/node_modules/eslint/lib/rules/strict.js b/tools/node_modules/eslint/lib/rules/strict.js index 0ea1da5677e..75bb561253e 100644 --- a/tools/node_modules/eslint/lib/rules/strict.js +++ b/tools/node_modules/eslint/lib/rules/strict.js @@ -69,7 +69,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow strict mode directives", + description: "Require or disallow strict mode directives", recommended: false, url: "https://eslint.org/docs/rules/strict" }, @@ -105,7 +105,7 @@ module.exports = { if (ecmaFeatures.impliedStrict) { mode = "implied"; } else if (mode === "safe") { - mode = ecmaFeatures.globalReturn ? "global" : "function"; + mode = ecmaFeatures.globalReturn || context.languageOptions.sourceType === "commonjs" ? "global" : "function"; } /** diff --git a/tools/node_modules/eslint/lib/rules/switch-colon-spacing.js b/tools/node_modules/eslint/lib/rules/switch-colon-spacing.js index cd2ca7018d2..c1df496fd94 100644 --- a/tools/node_modules/eslint/lib/rules/switch-colon-spacing.js +++ b/tools/node_modules/eslint/lib/rules/switch-colon-spacing.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "enforce spacing around colons of switch statements", + description: "Enforce spacing around colons of switch statements", recommended: false, url: "https://eslint.org/docs/rules/switch-colon-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/symbol-description.js b/tools/node_modules/eslint/lib/rules/symbol-description.js index 07bb8cd2735..1c8a364986c 100644 --- a/tools/node_modules/eslint/lib/rules/symbol-description.js +++ b/tools/node_modules/eslint/lib/rules/symbol-description.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "require symbol descriptions", + description: "Require symbol descriptions", recommended: false, url: "https://eslint.org/docs/rules/symbol-description" }, diff --git a/tools/node_modules/eslint/lib/rules/template-curly-spacing.js b/tools/node_modules/eslint/lib/rules/template-curly-spacing.js index c842b76a41f..35d4bbab4d7 100644 --- a/tools/node_modules/eslint/lib/rules/template-curly-spacing.js +++ b/tools/node_modules/eslint/lib/rules/template-curly-spacing.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow spacing around embedded expressions of template strings", + description: "Require or disallow spacing around embedded expressions of template strings", recommended: false, url: "https://eslint.org/docs/rules/template-curly-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/template-tag-spacing.js b/tools/node_modules/eslint/lib/rules/template-tag-spacing.js index fa1a613b894..3140fa0eed7 100644 --- a/tools/node_modules/eslint/lib/rules/template-tag-spacing.js +++ b/tools/node_modules/eslint/lib/rules/template-tag-spacing.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow spacing between template tags and their literals", + description: "Require or disallow spacing between template tags and their literals", recommended: false, url: "https://eslint.org/docs/rules/template-tag-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/unicode-bom.js b/tools/node_modules/eslint/lib/rules/unicode-bom.js index d480f1bcdc8..482d3bbf50b 100644 --- a/tools/node_modules/eslint/lib/rules/unicode-bom.js +++ b/tools/node_modules/eslint/lib/rules/unicode-bom.js @@ -14,7 +14,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow Unicode byte order mark (BOM)", + description: "Require or disallow Unicode byte order mark (BOM)", recommended: false, url: "https://eslint.org/docs/rules/unicode-bom" }, diff --git a/tools/node_modules/eslint/lib/rules/use-isnan.js b/tools/node_modules/eslint/lib/rules/use-isnan.js index 92903500c18..219d695374e 100644 --- a/tools/node_modules/eslint/lib/rules/use-isnan.js +++ b/tools/node_modules/eslint/lib/rules/use-isnan.js @@ -37,7 +37,7 @@ module.exports = { type: "problem", docs: { - description: "require calls to `isNaN()` when checking for `NaN`", + description: "Require calls to `isNaN()` when checking for `NaN`", recommended: true, url: "https://eslint.org/docs/rules/use-isnan" }, diff --git a/tools/node_modules/eslint/lib/rules/utils/ast-utils.js b/tools/node_modules/eslint/lib/rules/utils/ast-utils.js index ecde099fa02..f4a18cff783 100644 --- a/tools/node_modules/eslint/lib/rules/utils/ast-utils.js +++ b/tools/node_modules/eslint/lib/rules/utils/ast-utils.js @@ -32,6 +32,7 @@ const thisTagPattern = /^[\s*]*@this/mu; const COMMENTS_IGNORE_PATTERN = /^\s*(?:eslint|jshint\s+|jslint\s+|istanbul\s+|globals?\s+|exported\s+|jscs)/u; +const ESLINT_DIRECTIVE_PATTERN = /^(?:eslint[- ]|(?:globals?|exported) )/u; const LINEBREAKS = new Set(["\r\n", "\r", "\n", "\u2028", "\u2029"]); // A set of node types that can contain a list of statements @@ -788,6 +789,203 @@ function getModuleExportName(node) { return node.value; } +/** + * Returns literal's value converted to the Boolean type + * @param {ASTNode} node any `Literal` node + * @returns {boolean | null} `true` when node is truthy, `false` when node is falsy, + * `null` when it cannot be determined. + */ +function getBooleanValue(node) { + if (node.value === null) { + + /* + * it might be a null literal or bigint/regex literal in unsupported environments . + * https://github.com/estree/estree/blob/14df8a024956ea289bd55b9c2226a1d5b8a473ee/es5.md#regexpliteral + * https://github.com/estree/estree/blob/14df8a024956ea289bd55b9c2226a1d5b8a473ee/es2020.md#bigintliteral + */ + + if (node.raw === "null") { + return false; + } + + // regex is always truthy + if (typeof node.regex === "object") { + return true; + } + + return null; + } + + return !!node.value; +} + +/** + * Checks if a branch node of LogicalExpression short circuits the whole condition + * @param {ASTNode} node The branch of main condition which needs to be checked + * @param {string} operator The operator of the main LogicalExpression. + * @returns {boolean} true when condition short circuits whole condition + */ +function isLogicalIdentity(node, operator) { + switch (node.type) { + case "Literal": + return (operator === "||" && getBooleanValue(node) === true) || + (operator === "&&" && getBooleanValue(node) === false); + + case "UnaryExpression": + return (operator === "&&" && node.operator === "void"); + + case "LogicalExpression": + + /* + * handles `a && false || b` + * `false` is an identity element of `&&` but not `||` + */ + return operator === node.operator && + ( + isLogicalIdentity(node.left, operator) || + isLogicalIdentity(node.right, operator) + ); + + case "AssignmentExpression": + return ["||=", "&&="].includes(node.operator) && + operator === node.operator.slice(0, -1) && + isLogicalIdentity(node.right, operator); + + // no default + } + return false; +} + +/** + * Checks if an identifier is a reference to a global variable. + * @param {Scope} scope The scope in which the identifier is referenced. + * @param {ASTNode} node An identifier node to check. + * @returns {boolean} `true` if the identifier is a reference to a global variable. + */ +function isReferenceToGlobalVariable(scope, node) { + const reference = scope.references.find(ref => ref.identifier === node); + + return Boolean( + reference && + reference.resolved && + reference.resolved.scope.type === "global" && + reference.resolved.defs.length === 0 + ); +} + + +/** + * Checks if a node has a constant truthiness value. + * @param {Scope} scope Scope in which the node appears. + * @param {ASTNode} node The AST node to check. + * @param {boolean} inBooleanPosition `true` if checking the test of a + * condition. `false` in all other cases. When `false`, checks if -- for + * both string and number -- if coerced to that type, the value will + * be constant. + * @returns {boolean} true when node's truthiness is constant + * @private + */ +function isConstant(scope, node, inBooleanPosition) { + + // node.elements can return null values in the case of sparse arrays ex. [,] + if (!node) { + return true; + } + switch (node.type) { + case "Literal": + case "ArrowFunctionExpression": + case "FunctionExpression": + return true; + case "ClassExpression": + case "ObjectExpression": + + /** + * In theory objects like: + * + * `{toString: () => a}` + * `{valueOf: () => a}` + * + * Or a classes like: + * + * `class { static toString() { return a } }` + * `class { static valueOf() { return a } }` + * + * Are not constant verifiably when `inBooleanPosition` is + * false, but it's an edge case we've opted not to handle. + */ + return true; + case "TemplateLiteral": + return (inBooleanPosition && node.quasis.some(quasi => quasi.value.cooked.length)) || + node.expressions.every(exp => isConstant(scope, exp, false)); + + case "ArrayExpression": { + if (!inBooleanPosition) { + return node.elements.every(element => isConstant(scope, element, false)); + } + return true; + } + + case "UnaryExpression": + if ( + node.operator === "void" || + node.operator === "typeof" && inBooleanPosition + ) { + return true; + } + + if (node.operator === "!") { + return isConstant(scope, node.argument, true); + } + + return isConstant(scope, node.argument, false); + + case "BinaryExpression": + return isConstant(scope, node.left, false) && + isConstant(scope, node.right, false) && + node.operator !== "in"; + + case "LogicalExpression": { + const isLeftConstant = isConstant(scope, node.left, inBooleanPosition); + const isRightConstant = isConstant(scope, node.right, inBooleanPosition); + const isLeftShortCircuit = (isLeftConstant && isLogicalIdentity(node.left, node.operator)); + const isRightShortCircuit = (inBooleanPosition && isRightConstant && isLogicalIdentity(node.right, node.operator)); + + return (isLeftConstant && isRightConstant) || + isLeftShortCircuit || + isRightShortCircuit; + } + case "NewExpression": + return inBooleanPosition; + case "AssignmentExpression": + if (node.operator === "=") { + return isConstant(scope, node.right, inBooleanPosition); + } + + if (["||=", "&&="].includes(node.operator) && inBooleanPosition) { + return isLogicalIdentity(node.right, node.operator.slice(0, -1)); + } + + return false; + + case "SequenceExpression": + return isConstant(scope, node.expressions[node.expressions.length - 1], inBooleanPosition); + case "SpreadElement": + return isConstant(scope, node.argument, inBooleanPosition); + case "CallExpression": + if (node.callee.type === "Identifier" && node.callee.name === "Boolean") { + if (node.arguments.length === 0 || isConstant(scope, node.arguments[0], true)) { + return isReferenceToGlobalVariable(scope, node.callee); + } + } + return false; + case "Identifier": + return node.name === "undefined" && isReferenceToGlobalVariable(scope, node); + + // no default + } + return false; +} + //------------------------------------------------------------------------------ // Public Interface //------------------------------------------------------------------------------ @@ -908,12 +1106,8 @@ module.exports = { const comment = node.value.trim(); return ( - node.type === "Line" && comment.indexOf("eslint-") === 0 || - node.type === "Block" && ( - comment.indexOf("global ") === 0 || - comment.indexOf("eslint ") === 0 || - comment.indexOf("eslint-") === 0 - ) + node.type === "Line" && comment.startsWith("eslint-") || + node.type === "Block" && ESLINT_DIRECTIVE_PATTERN.test(comment) ); }, @@ -1156,7 +1350,7 @@ module.exports = { } } - /* istanbul ignore next */ + /* c8 ignore next */ return true; }, @@ -1784,7 +1978,7 @@ module.exports = { if (comments.length) { const lastComment = comments[comments.length - 1]; - if (lastComment.range[0] > leftToken.range[0]) { + if (!leftToken || lastComment.range[0] > leftToken.range[0]) { leftToken = lastComment; } } @@ -1792,7 +1986,13 @@ module.exports = { leftToken = leftValue; } - if (leftToken.type === "Shebang") { + /* + * If a hashbang comment was passed as a token object from SourceCode, + * its type will be "Shebang" because of the way ESLint itself handles hashbangs. + * If a hashbang comment was passed in a string and then tokenized in this function, + * its type will be "Hashbang" because of the way Espree tokenizes hashbangs. + */ + if (leftToken.type === "Shebang" || leftToken.type === "Hashbang") { return false; } @@ -1813,7 +2013,7 @@ module.exports = { if (comments.length) { const firstComment = comments[0]; - if (firstComment.range[0] < rightToken.range[0]) { + if (!rightToken || firstComment.range[0] < rightToken.range[0]) { rightToken = firstComment; } } @@ -1905,6 +2105,7 @@ module.exports = { return OCTAL_OR_NON_OCTAL_DECIMAL_ESCAPE_PATTERN.test(rawString); }, + isReferenceToGlobalVariable, isLogicalExpression, isCoalesceExpression, isMixedLogicalAndCoalesceExpressions, @@ -1918,5 +2119,6 @@ module.exports = { isSameReference, isLogicalAssignmentOperator, getSwitchCaseColonToken, - getModuleExportName + getModuleExportName, + isConstant }; diff --git a/tools/node_modules/eslint/lib/rules/valid-jsdoc.js b/tools/node_modules/eslint/lib/rules/valid-jsdoc.js index c118e033dd8..25be39fdd51 100644 --- a/tools/node_modules/eslint/lib/rules/valid-jsdoc.js +++ b/tools/node_modules/eslint/lib/rules/valid-jsdoc.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce valid JSDoc comments", + description: "Enforce valid JSDoc comments", recommended: false, url: "https://eslint.org/docs/rules/valid-jsdoc" }, @@ -405,7 +405,7 @@ module.exports = { loc: getAbsoluteRange(jsdocNode, param), data: { name: param.name } }); - } else if (param.name.indexOf(".") === -1) { + } else if (!param.name.includes(".")) { paramTagsByName[param.name] = param; } }); diff --git a/tools/node_modules/eslint/lib/rules/valid-typeof.js b/tools/node_modules/eslint/lib/rules/valid-typeof.js index cb85cd9cb90..908d5725e22 100644 --- a/tools/node_modules/eslint/lib/rules/valid-typeof.js +++ b/tools/node_modules/eslint/lib/rules/valid-typeof.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "enforce comparing `typeof` expressions against valid strings", + description: "Enforce comparing `typeof` expressions against valid strings", recommended: true, url: "https://eslint.org/docs/rules/valid-typeof" }, @@ -42,8 +42,8 @@ module.exports = { create(context) { - const VALID_TYPES = ["symbol", "undefined", "object", "boolean", "number", "string", "function", "bigint"], - OPERATORS = ["==", "===", "!=", "!=="]; + const VALID_TYPES = new Set(["symbol", "undefined", "object", "boolean", "number", "string", "function", "bigint"]), + OPERATORS = new Set(["==", "===", "!=", "!=="]); const requireStringLiterals = context.options[0] && context.options[0].requireStringLiterals; @@ -85,13 +85,13 @@ module.exports = { if (isTypeofExpression(node)) { const parent = context.getAncestors().pop(); - if (parent.type === "BinaryExpression" && OPERATORS.indexOf(parent.operator) !== -1) { + if (parent.type === "BinaryExpression" && OPERATORS.has(parent.operator)) { const sibling = parent.left === node ? parent.right : parent.left; if (sibling.type === "Literal" || sibling.type === "TemplateLiteral" && !sibling.expressions.length) { const value = sibling.type === "Literal" ? sibling.value : sibling.quasis[0].value.cooked; - if (VALID_TYPES.indexOf(value) === -1) { + if (!VALID_TYPES.has(value)) { context.report({ node: sibling, messageId: "invalidValue" }); } } else if (sibling.type === "Identifier" && sibling.name === "undefined" && isReferenceToGlobalVariable(sibling)) { diff --git a/tools/node_modules/eslint/lib/rules/vars-on-top.js b/tools/node_modules/eslint/lib/rules/vars-on-top.js index 09e9932b4ca..99e2b4ac0dd 100644 --- a/tools/node_modules/eslint/lib/rules/vars-on-top.js +++ b/tools/node_modules/eslint/lib/rules/vars-on-top.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `var` declarations be placed at the top of their containing scope", + description: "Require `var` declarations be placed at the top of their containing scope", recommended: false, url: "https://eslint.org/docs/rules/vars-on-top" }, diff --git a/tools/node_modules/eslint/lib/rules/wrap-iife.js b/tools/node_modules/eslint/lib/rules/wrap-iife.js index 8523796722a..4c2c9275d87 100644 --- a/tools/node_modules/eslint/lib/rules/wrap-iife.js +++ b/tools/node_modules/eslint/lib/rules/wrap-iife.js @@ -43,7 +43,7 @@ module.exports = { type: "layout", docs: { - description: "require parentheses around immediate `function` invocations", + description: "Require parentheses around immediate `function` invocations", recommended: false, url: "https://eslint.org/docs/rules/wrap-iife" }, diff --git a/tools/node_modules/eslint/lib/rules/wrap-regex.js b/tools/node_modules/eslint/lib/rules/wrap-regex.js index b10f2ec53bd..b24d36025ed 100644 --- a/tools/node_modules/eslint/lib/rules/wrap-regex.js +++ b/tools/node_modules/eslint/lib/rules/wrap-regex.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "require parenthesis around regex literals", + description: "Require parenthesis around regex literals", recommended: false, url: "https://eslint.org/docs/rules/wrap-regex" }, diff --git a/tools/node_modules/eslint/lib/rules/yield-star-spacing.js b/tools/node_modules/eslint/lib/rules/yield-star-spacing.js index 884a3a4ed01..c2e07aaaa22 100644 --- a/tools/node_modules/eslint/lib/rules/yield-star-spacing.js +++ b/tools/node_modules/eslint/lib/rules/yield-star-spacing.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow spacing around the `*` in `yield*` expressions", + description: "Require or disallow spacing around the `*` in `yield*` expressions", recommended: false, url: "https://eslint.org/docs/rules/yield-star-spacing" }, diff --git a/tools/node_modules/eslint/lib/rules/yoda.js b/tools/node_modules/eslint/lib/rules/yoda.js index f491f756d54..eb9a32ad5c3 100644 --- a/tools/node_modules/eslint/lib/rules/yoda.js +++ b/tools/node_modules/eslint/lib/rules/yoda.js @@ -39,7 +39,7 @@ function isEqualityOperator(operator) { * @returns {boolean} Whether the operator is used in range tests. */ function isRangeTestOperator(operator) { - return ["<", "<="].indexOf(operator) >= 0; + return ["<", "<="].includes(operator); } /** @@ -121,7 +121,7 @@ module.exports = { type: "suggestion", docs: { - description: 'require or disallow "Yoda" conditions', + description: 'Require or disallow "Yoda" conditions', recommended: false, url: "https://eslint.org/docs/rules/yoda" }, diff --git a/tools/node_modules/eslint/lib/shared/deprecation-warnings.js b/tools/node_modules/eslint/lib/shared/deprecation-warnings.js index 1a0501ab057..d09cafb07fe 100644 --- a/tools/node_modules/eslint/lib/shared/deprecation-warnings.js +++ b/tools/node_modules/eslint/lib/shared/deprecation-warnings.js @@ -17,14 +17,7 @@ const path = require("path"); // Definitions for deprecation warnings. const deprecationWarningMessages = { ESLINT_LEGACY_ECMAFEATURES: - "The 'ecmaFeatures' config file property is deprecated and has no effect.", - ESLINT_PERSONAL_CONFIG_LOAD: - "'~/.eslintrc.*' config files have been deprecated. " + - "Please use a config file per project or the '--config' option.", - ESLINT_PERSONAL_CONFIG_SUPPRESS: - "'~/.eslintrc.*' config files have been deprecated. " + - "Please remove it or add 'root:true' to the config files in your " + - "projects in order to avoid loading '~/.eslintrc.*' accidentally." + "The 'ecmaFeatures' config file property is deprecated and has no effect." }; const sourceFileErrorCache = new Set(); diff --git a/tools/node_modules/eslint/lib/shared/logging.js b/tools/node_modules/eslint/lib/shared/logging.js index 7f06a74e142..fd5e8a648e1 100644 --- a/tools/node_modules/eslint/lib/shared/logging.js +++ b/tools/node_modules/eslint/lib/shared/logging.js @@ -7,7 +7,7 @@ /* eslint no-console: "off" -- Logging util */ -/* istanbul ignore next */ +/* c8 ignore next */ module.exports = { /** diff --git a/tools/node_modules/eslint/lib/shared/types.js b/tools/node_modules/eslint/lib/shared/types.js index c407c4fb120..60f9f1d6afe 100644 --- a/tools/node_modules/eslint/lib/shared/types.js +++ b/tools/node_modules/eslint/lib/shared/types.js @@ -21,7 +21,7 @@ module.exports = {}; /** * @typedef {Object} ParserOptions * @property {EcmaFeatures} [ecmaFeatures] The optional features. - * @property {3|5|6|7|8|9|10|11|12|13|2015|2016|2017|2018|2019|2020|2021|2022} [ecmaVersion] The ECMAScript version (or revision number). + * @property {3|5|6|7|8|9|10|11|12|13|14|2015|2016|2017|2018|2019|2020|2021|2022|2023} [ecmaVersion] The ECMAScript version (or revision number). * @property {"script"|"module"} [sourceType] The source code type. * @property {boolean} [allowReserved] Allowing the use of reserved words as identifiers in ES3. */ @@ -136,7 +136,6 @@ module.exports = {}; /** * @typedef {Object} RuleMetaDocs - * @property {string} category The category of the rule. * @property {string} description The description of the rule. * @property {boolean} recommended If `true` then the rule is included in `eslint:recommended` preset. * @property {string} url The URL of the rule documentation. @@ -147,6 +146,7 @@ module.exports = {}; * @property {boolean} [deprecated] If `true` then the rule has been deprecated. * @property {RuleMetaDocs} docs The document information of the rule. * @property {"code"|"whitespace"} [fixable] The autofix type. + * @property {boolean} [hasSuggestions] If `true` then the rule provides suggestions. * @property {Record} [messages] The messages the rule reports. * @property {string[]} [replacedBy] The IDs of the alternative rules. * @property {Array|Object} schema The option schema of the rule. @@ -173,3 +173,27 @@ module.exports = {}; * @property {string} ruleId The rule ID. * @property {string[]} replacedBy The rule IDs that replace this deprecated rule. */ + +/** + * A linting result. + * @typedef {Object} LintResult + * @property {string} filePath The path to the file that was linted. + * @property {LintMessage[]} messages All of the messages for the result. + * @property {SuppressedLintMessage[]} suppressedMessages All of the suppressed messages for the result. + * @property {number} errorCount Number of errors for the result. + * @property {number} fatalErrorCount Number of fatal errors for the result. + * @property {number} warningCount Number of warnings for the result. + * @property {number} fixableErrorCount Number of fixable errors for the result. + * @property {number} fixableWarningCount Number of fixable warnings for the result. + * @property {string} [source] The source code of the file that was linted. + * @property {string} [output] The source code of the file that was linted, with as many fixes applied as possible. + * @property {DeprecatedRuleInfo[]} usedDeprecatedRules The list of used deprecated rules. + */ + +/** + * A formatter function. + * @callback FormatterFunction + * @param {LintResult[]} results The list of linting results. + * @param {{cwd: string, rulesMeta: Record}} [context] A context object. + * @returns {string | Promise} Formatted text. + */ diff --git a/tools/node_modules/eslint/lib/source-code/token-store/cursor.js b/tools/node_modules/eslint/lib/source-code/token-store/cursor.js index 494762acdfa..0b726006e8e 100644 --- a/tools/node_modules/eslint/lib/source-code/token-store/cursor.js +++ b/tools/node_modules/eslint/lib/source-code/token-store/cursor.js @@ -69,7 +69,7 @@ module.exports = class Cursor { * @returns {boolean} `true` if the next token exists. * @abstract */ - /* istanbul ignore next */ + /* c8 ignore next */ moveNext() { // eslint-disable-line class-methods-use-this -- Unused throw new Error("Not implemented."); } diff --git a/tools/node_modules/eslint/lib/unsupported-api.js b/tools/node_modules/eslint/lib/unsupported-api.js index 110b35a47a4..c1daf54d6ae 100644 --- a/tools/node_modules/eslint/lib/unsupported-api.js +++ b/tools/node_modules/eslint/lib/unsupported-api.js @@ -12,6 +12,8 @@ //----------------------------------------------------------------------------- const { FileEnumerator } = require("./cli-engine/file-enumerator"); +const { FlatESLint } = require("./eslint/flat-eslint"); +const FlatRuleTester = require("./rule-tester/flat-rule-tester"); //----------------------------------------------------------------------------- // Exports @@ -19,5 +21,7 @@ const { FileEnumerator } = require("./cli-engine/file-enumerator"); module.exports = { builtinRules: require("./rules"), + FlatESLint, + FlatRuleTester, FileEnumerator }; diff --git a/tools/node_modules/eslint/messages/all-files-ignored.js b/tools/node_modules/eslint/messages/all-files-ignored.js index d85828d36e7..70877a4d823 100644 --- a/tools/node_modules/eslint/messages/all-files-ignored.js +++ b/tools/node_modules/eslint/messages/all-files-ignored.js @@ -12,5 +12,5 @@ If you do want to lint these files, try the following solutions: * Check your .eslintignore file, or the eslintIgnore property in package.json, to ensure that the files are not configured to be ignored. * Explicitly list the files from this glob that you'd like to lint on the command-line, rather than providing a glob as an argument. -`.trimLeft(); +`.trimStart(); }; diff --git a/tools/node_modules/eslint/messages/extend-config-missing.js b/tools/node_modules/eslint/messages/extend-config-missing.js index db8a5c64b9f..5b3498fcda4 100644 --- a/tools/node_modules/eslint/messages/extend-config-missing.js +++ b/tools/node_modules/eslint/messages/extend-config-missing.js @@ -9,5 +9,5 @@ ESLint couldn't find the config "${configName}" to extend from. Please check tha The config "${configName}" was referenced from the config file in "${importerName}". If you still have problems, please stop by https://eslint.org/chat/help to chat with the team. -`.trimLeft(); +`.trimStart(); }; diff --git a/tools/node_modules/eslint/messages/failed-to-read-json.js b/tools/node_modules/eslint/messages/failed-to-read-json.js index 5114de30980..e7c6cb58759 100644 --- a/tools/node_modules/eslint/messages/failed-to-read-json.js +++ b/tools/node_modules/eslint/messages/failed-to-read-json.js @@ -7,5 +7,5 @@ module.exports = function(it) { Failed to read JSON file at ${path}: ${message} -`.trimLeft(); +`.trimStart(); }; diff --git a/tools/node_modules/eslint/messages/file-not-found.js b/tools/node_modules/eslint/messages/file-not-found.js index 26a5d57eff7..1a62fcf96b9 100644 --- a/tools/node_modules/eslint/messages/file-not-found.js +++ b/tools/node_modules/eslint/messages/file-not-found.js @@ -6,5 +6,5 @@ module.exports = function(it) { return ` No files matching the pattern "${pattern}"${globDisabled ? " (with disabling globs)" : ""} were found. Please check for typing mistakes in the pattern. -`.trimLeft(); +`.trimStart(); }; diff --git a/tools/node_modules/eslint/messages/no-config-found.js b/tools/node_modules/eslint/messages/no-config-found.js index c2f7ac73b40..9860410a602 100644 --- a/tools/node_modules/eslint/messages/no-config-found.js +++ b/tools/node_modules/eslint/messages/no-config-found.js @@ -11,5 +11,5 @@ ESLint couldn't find a configuration file. To set up a configuration file for th ESLint looked for configuration files in ${directoryPath} and its ancestors. If it found none, it then looked in your home directory. If you think you already have a configuration file or if you need more help, please stop by the ESLint chat room: https://eslint.org/chat/help -`.trimLeft(); +`.trimStart(); }; diff --git a/tools/node_modules/eslint/messages/plugin-invalid.js b/tools/node_modules/eslint/messages/plugin-invalid.js index 7913576f000..8b471d4a336 100644 --- a/tools/node_modules/eslint/messages/plugin-invalid.js +++ b/tools/node_modules/eslint/messages/plugin-invalid.js @@ -12,5 +12,5 @@ module.exports = function(it) { "${configName}" was referenced from the config file in "${importerName}". If you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team. -`.trimLeft(); +`.trimStart(); }; diff --git a/tools/node_modules/eslint/messages/plugin-missing.js b/tools/node_modules/eslint/messages/plugin-missing.js index f58c78ceb38..0b7d34e3aa5 100644 --- a/tools/node_modules/eslint/messages/plugin-missing.js +++ b/tools/node_modules/eslint/messages/plugin-missing.js @@ -15,5 +15,5 @@ It's likely that the plugin isn't installed correctly. Try reinstalling by runni The plugin "${pluginName}" was referenced from the config file in "${importerName}". If you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team. -`.trimLeft(); +`.trimStart(); }; diff --git a/tools/node_modules/eslint/messages/print-config-with-directory-path.js b/tools/node_modules/eslint/messages/print-config-with-directory-path.js index 6a5d571dd37..f65bdaaf770 100644 --- a/tools/node_modules/eslint/messages/print-config-with-directory-path.js +++ b/tools/node_modules/eslint/messages/print-config-with-directory-path.js @@ -4,5 +4,5 @@ module.exports = function() { return ` The '--print-config' CLI option requires a path to a source code file rather than a directory. See also: https://eslint.org/docs/user-guide/command-line-interface#--print-config -`.trimLeft(); +`.trimStart(); }; diff --git a/tools/node_modules/eslint/messages/whitespace-found.js b/tools/node_modules/eslint/messages/whitespace-found.js index 4ce49ca3a4e..8a801bcec6f 100644 --- a/tools/node_modules/eslint/messages/whitespace-found.js +++ b/tools/node_modules/eslint/messages/whitespace-found.js @@ -7,5 +7,5 @@ module.exports = function(it) { ESLint couldn't find the plugin "${pluginName}". because there is whitespace in the name. Please check your configuration and remove all whitespace from the plugin name. If you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team. -`.trimLeft(); +`.trimStart(); }; diff --git a/tools/node_modules/eslint/node_modules/.bin/browserslist-lint b/tools/node_modules/eslint/node_modules/.bin/browserslist-lint new file mode 120000 index 00000000000..b11e16f3d5c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/.bin/browserslist-lint @@ -0,0 +1 @@ +../update-browserslist-db/cli.js \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@ampproject/remapping/dist/remapping.mjs b/tools/node_modules/eslint/node_modules/@ampproject/remapping/dist/remapping.mjs index 4847e8a8134..c6e66b76f69 100644 --- a/tools/node_modules/eslint/node_modules/@ampproject/remapping/dist/remapping.mjs +++ b/tools/node_modules/eslint/node_modules/@ampproject/remapping/dist/remapping.mjs @@ -1,170 +1,99 @@ -import { traceSegment, decodedMappings, presortedDecodedMap, TraceMap, encodedMappings } from '@jridgewell/trace-mapping'; +import { decodedMappings, traceSegment, TraceMap } from '@jridgewell/trace-mapping'; +import { GenMapping, addSegment, setSourceContent, decodedMap, encodedMap } from '@jridgewell/gen-mapping'; +const SOURCELESS_MAPPING = { + source: null, + column: null, + line: null, + name: null, + content: null, +}; +const EMPTY_SOURCES = []; +function Source(map, sources, source, content) { + return { + map, + sources, + source, + content, + }; +} /** - * A "leaf" node in the sourcemap tree, representing an original, unmodified - * source file. Recursive segment tracing ends at the `OriginalSource`. + * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes + * (which may themselves be SourceMapTrees). */ -class OriginalSource { - constructor(source, content) { - this.source = source; - this.content = content; - } - /** - * Tracing a `SourceMapSegment` ends when we get to an `OriginalSource`, - * meaning this line/column location originated from this source file. - */ - originalPositionFor(line, column, name) { - return { column, line, name, source: this.source, content: this.content }; - } +function MapSource(map, sources) { + return Source(map, sources, '', null); } - /** - * Puts `key` into the backing array, if it is not already present. Returns - * the index of the `key` in the backing array. + * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive + * segment tracing ends at the `OriginalSource`. */ -let put; -/** - * FastStringArray acts like a `Set` (allowing only one occurrence of a string - * `key`), but provides the index of the `key` in the backing array. - * - * This is designed to allow synchronizing a second array with the contents of - * the backing array, like how `sourcesContent[i]` is the source content - * associated with `source[i]`, and there are never duplicates. - */ -class FastStringArray { - constructor() { - this.indexes = Object.create(null); - this.array = []; - } +function OriginalSource(source, content) { + return Source(null, EMPTY_SOURCES, source, content); } -(() => { - put = (strarr, key) => { - const { array, indexes } = strarr; - // The key may or may not be present. If it is present, it's a number. - let index = indexes[key]; - // If it's not yet present, we need to insert it and track the index in the - // indexes. - if (index === undefined) { - index = indexes[key] = array.length; - array.push(key); - } - return index; - }; -})(); - -const INVALID_MAPPING = undefined; -const SOURCELESS_MAPPING = null; /** * traceMappings is only called on the root level SourceMapTree, and begins the process of * resolving each mapping in terms of the original source files. */ -let traceMappings; +function traceMappings(tree) { + const gen = new GenMapping({ file: tree.map.file }); + const { sources: rootSources, map } = tree; + const rootNames = map.names; + const rootMappings = decodedMappings(map); + for (let i = 0; i < rootMappings.length; i++) { + const segments = rootMappings[i]; + let lastSource = null; + let lastSourceLine = null; + let lastSourceColumn = null; + for (let j = 0; j < segments.length; j++) { + const segment = segments[j]; + const genCol = segment[0]; + let traced = SOURCELESS_MAPPING; + // 1-length segments only move the current generated column, there's no source information + // to gather from it. + if (segment.length !== 1) { + const source = rootSources[segment[1]]; + traced = originalPositionFor(source, segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : ''); + // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a + // respective segment into an original source. + if (traced == null) + continue; + } + // So we traced a segment down into its original source file. Now push a + // new segment pointing to this location. + const { column, line, name, content, source } = traced; + if (line === lastSourceLine && column === lastSourceColumn && source === lastSource) { + continue; + } + lastSourceLine = line; + lastSourceColumn = column; + lastSource = source; + // Sigh, TypeScript can't figure out source/line/column are either all null, or all non-null... + addSegment(gen, i, genCol, source, line, column, name); + if (content != null) + setSourceContent(gen, source, content); + } + } + return gen; +} /** - * SourceMapTree represents a single sourcemap, with the ability to trace - * mappings into its child nodes (which may themselves be SourceMapTrees). + * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own + * child SourceMapTrees, until we find the original source map. */ -class SourceMapTree { - constructor(map, sources) { - this.map = map; - this.sources = sources; - } - /** - * originalPositionFor is only called on children SourceMapTrees. It recurses down - * into its own child SourceMapTrees, until we find the original source map. - */ - originalPositionFor(line, column, name) { - const segment = traceSegment(this.map, line, column); - // If we couldn't find a segment, then this doesn't exist in the sourcemap. - if (segment == null) - return INVALID_MAPPING; - // 1-length segments only move the current generated column, there's no source information - // to gather from it. - if (segment.length === 1) - return SOURCELESS_MAPPING; - const source = this.sources[segment[1]]; - return source.originalPositionFor(segment[2], segment[3], segment.length === 5 ? this.map.names[segment[4]] : name); +function originalPositionFor(source, line, column, name) { + if (!source.map) { + return { column, line, name, source: source.source, content: source.content }; } + const segment = traceSegment(source.map, line, column); + // If we couldn't find a segment, then this doesn't exist in the sourcemap. + if (segment == null) + return null; + // 1-length segments only move the current generated column, there's no source information + // to gather from it. + if (segment.length === 1) + return SOURCELESS_MAPPING; + return originalPositionFor(source.sources[segment[1]], segment[2], segment[3], segment.length === 5 ? source.map.names[segment[4]] : name); } -(() => { - traceMappings = (tree) => { - const mappings = []; - const names = new FastStringArray(); - const sources = new FastStringArray(); - const sourcesContent = []; - const { sources: rootSources, map } = tree; - const rootNames = map.names; - const rootMappings = decodedMappings(map); - let lastLineWithSegment = -1; - for (let i = 0; i < rootMappings.length; i++) { - const segments = rootMappings[i]; - const tracedSegments = []; - let lastSourcesIndex = -1; - let lastSourceLine = -1; - let lastSourceColumn = -1; - for (let j = 0; j < segments.length; j++) { - const segment = segments[j]; - let traced = SOURCELESS_MAPPING; - // 1-length segments only move the current generated column, there's no source information - // to gather from it. - if (segment.length !== 1) { - const source = rootSources[segment[1]]; - traced = source.originalPositionFor(segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : ''); - // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a - // respective segment into an original source. - if (traced === INVALID_MAPPING) - continue; - } - const genCol = segment[0]; - if (traced === SOURCELESS_MAPPING) { - if (lastSourcesIndex === -1) { - // This is a consecutive source-less segment, which doesn't carry any new information. - continue; - } - lastSourcesIndex = lastSourceLine = lastSourceColumn = -1; - tracedSegments.push([genCol]); - continue; - } - // So we traced a segment down into its original source file. Now push a - // new segment pointing to this location. - const { column, line, name, content, source } = traced; - // Store the source location, and ensure we keep sourcesContent up to - // date with the sources array. - const sourcesIndex = put(sources, source); - sourcesContent[sourcesIndex] = content; - if (lastSourcesIndex === sourcesIndex && - lastSourceLine === line && - lastSourceColumn === column) { - // This is a duplicate mapping pointing at the exact same starting point in the source - // file. It doesn't carry any new information, and only bloats the sourcemap. - continue; - } - lastLineWithSegment = i; - lastSourcesIndex = sourcesIndex; - lastSourceLine = line; - lastSourceColumn = column; - // This looks like unnecessary duplication, but it noticeably increases performance. If we - // were to push the nameIndex onto length-4 array, v8 would internally allocate 22 slots! - // That's 68 wasted bytes! Array literals have the same capacity as their length, saving - // memory. - tracedSegments.push(name - ? [genCol, sourcesIndex, line, column, put(names, name)] - : [genCol, sourcesIndex, line, column]); - } - mappings.push(tracedSegments); - } - if (mappings.length > lastLineWithSegment + 1) { - mappings.length = lastLineWithSegment + 1; - } - return presortedDecodedMap(Object.assign({}, tree.map, { - mappings, - // TODO: Make all sources relative to the sourceRoot. - sourceRoot: undefined, - names: names.array, - sources: sources.array, - sourcesContent, - })); - }; -})(); function asArray(value) { if (Array.isArray(value)) @@ -193,7 +122,7 @@ function buildSourceMapTree(input, loader) { } let tree = build(map, loader, '', 0); for (let i = maps.length - 1; i >= 0; i--) { - tree = new SourceMapTree(maps[i], [tree]); + tree = MapSource(maps[i], [tree]); } return tree; } @@ -215,19 +144,17 @@ function build(map, loader, importer, importerDepth) { // TODO: We should eventually support async loading of sourcemap files. const sourceMap = loader(ctx.source, ctx); const { source, content } = ctx; - // If there is no sourcemap, then it is an unmodified source file. - if (!sourceMap) { - // The contents of this unmodified source file can be overridden via the loader context, - // allowing it to be explicitly null or a string. If it remains undefined, we fall back to - // the importing sourcemap's `sourcesContent` field. - const sourceContent = content !== undefined ? content : sourcesContent ? sourcesContent[i] : null; - return new OriginalSource(source, sourceContent); - } - // Else, it's a real sourcemap, and we need to recurse into it to load its - // source files. - return build(new TraceMap(sourceMap, source), loader, source, depth); + // If there is a sourcemap, then we need to recurse into it to load its source files. + if (sourceMap) + return build(new TraceMap(sourceMap, source), loader, source, depth); + // Else, it's an an unmodified source file. + // The contents of this unmodified source file can be overridden via the loader context, + // allowing it to be explicitly null or a string. If it remains undefined, we fall back to + // the importing sourcemap's `sourcesContent` field. + const sourceContent = content !== undefined ? content : sourcesContent ? sourcesContent[i] : null; + return OriginalSource(source, sourceContent); }); - return new SourceMapTree(map, children); + return MapSource(map, children); } /** @@ -236,14 +163,15 @@ function build(map, loader, importer, importerDepth) { */ class SourceMap { constructor(map, options) { - this.version = 3; // SourceMap spec says this should be first. - this.file = map.file; - this.mappings = options.decodedMappings ? decodedMappings(map) : encodedMappings(map); - this.names = map.names; - this.sourceRoot = map.sourceRoot; - this.sources = map.sources; - if (!options.excludeContent && 'sourcesContent' in map) { - this.sourcesContent = map.sourcesContent; + const out = options.decodedMappings ? decodedMap(map) : encodedMap(map); + this.version = out.version; // SourceMap spec says this should be first. + this.file = out.file; + this.mappings = out.mappings; + this.names = out.names; + this.sourceRoot = out.sourceRoot; + this.sources = out.sources; + if (!options.excludeContent) { + this.sourcesContent = out.sourcesContent; } } toString() { diff --git a/tools/node_modules/eslint/node_modules/@ampproject/remapping/dist/remapping.umd.js b/tools/node_modules/eslint/node_modules/@ampproject/remapping/dist/remapping.umd.js index d4f3df4e320..593c61d085f 100644 --- a/tools/node_modules/eslint/node_modules/@ampproject/remapping/dist/remapping.umd.js +++ b/tools/node_modules/eslint/node_modules/@ampproject/remapping/dist/remapping.umd.js @@ -1,174 +1,102 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@jridgewell/trace-mapping')) : - typeof define === 'function' && define.amd ? define(['@jridgewell/trace-mapping'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.remapping = factory(global.traceMapping)); -})(this, (function (traceMapping) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@jridgewell/trace-mapping'), require('@jridgewell/gen-mapping')) : + typeof define === 'function' && define.amd ? define(['@jridgewell/trace-mapping', '@jridgewell/gen-mapping'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.remapping = factory(global.traceMapping, global.genMapping)); +})(this, (function (traceMapping, genMapping) { 'use strict'; + const SOURCELESS_MAPPING = { + source: null, + column: null, + line: null, + name: null, + content: null, + }; + const EMPTY_SOURCES = []; + function Source(map, sources, source, content) { + return { + map, + sources, + source, + content, + }; + } /** - * A "leaf" node in the sourcemap tree, representing an original, unmodified - * source file. Recursive segment tracing ends at the `OriginalSource`. + * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes + * (which may themselves be SourceMapTrees). */ - class OriginalSource { - constructor(source, content) { - this.source = source; - this.content = content; - } - /** - * Tracing a `SourceMapSegment` ends when we get to an `OriginalSource`, - * meaning this line/column location originated from this source file. - */ - originalPositionFor(line, column, name) { - return { column, line, name, source: this.source, content: this.content }; - } + function MapSource(map, sources) { + return Source(map, sources, '', null); } - /** - * Puts `key` into the backing array, if it is not already present. Returns - * the index of the `key` in the backing array. + * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive + * segment tracing ends at the `OriginalSource`. */ - let put; - /** - * FastStringArray acts like a `Set` (allowing only one occurrence of a string - * `key`), but provides the index of the `key` in the backing array. - * - * This is designed to allow synchronizing a second array with the contents of - * the backing array, like how `sourcesContent[i]` is the source content - * associated with `source[i]`, and there are never duplicates. - */ - class FastStringArray { - constructor() { - this.indexes = Object.create(null); - this.array = []; - } + function OriginalSource(source, content) { + return Source(null, EMPTY_SOURCES, source, content); } - (() => { - put = (strarr, key) => { - const { array, indexes } = strarr; - // The key may or may not be present. If it is present, it's a number. - let index = indexes[key]; - // If it's not yet present, we need to insert it and track the index in the - // indexes. - if (index === undefined) { - index = indexes[key] = array.length; - array.push(key); - } - return index; - }; - })(); - - const INVALID_MAPPING = undefined; - const SOURCELESS_MAPPING = null; /** * traceMappings is only called on the root level SourceMapTree, and begins the process of * resolving each mapping in terms of the original source files. */ - let traceMappings; + function traceMappings(tree) { + const gen = new genMapping.GenMapping({ file: tree.map.file }); + const { sources: rootSources, map } = tree; + const rootNames = map.names; + const rootMappings = traceMapping.decodedMappings(map); + for (let i = 0; i < rootMappings.length; i++) { + const segments = rootMappings[i]; + let lastSource = null; + let lastSourceLine = null; + let lastSourceColumn = null; + for (let j = 0; j < segments.length; j++) { + const segment = segments[j]; + const genCol = segment[0]; + let traced = SOURCELESS_MAPPING; + // 1-length segments only move the current generated column, there's no source information + // to gather from it. + if (segment.length !== 1) { + const source = rootSources[segment[1]]; + traced = originalPositionFor(source, segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : ''); + // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a + // respective segment into an original source. + if (traced == null) + continue; + } + // So we traced a segment down into its original source file. Now push a + // new segment pointing to this location. + const { column, line, name, content, source } = traced; + if (line === lastSourceLine && column === lastSourceColumn && source === lastSource) { + continue; + } + lastSourceLine = line; + lastSourceColumn = column; + lastSource = source; + // Sigh, TypeScript can't figure out source/line/column are either all null, or all non-null... + genMapping.addSegment(gen, i, genCol, source, line, column, name); + if (content != null) + genMapping.setSourceContent(gen, source, content); + } + } + return gen; + } /** - * SourceMapTree represents a single sourcemap, with the ability to trace - * mappings into its child nodes (which may themselves be SourceMapTrees). + * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own + * child SourceMapTrees, until we find the original source map. */ - class SourceMapTree { - constructor(map, sources) { - this.map = map; - this.sources = sources; - } - /** - * originalPositionFor is only called on children SourceMapTrees. It recurses down - * into its own child SourceMapTrees, until we find the original source map. - */ - originalPositionFor(line, column, name) { - const segment = traceMapping.traceSegment(this.map, line, column); - // If we couldn't find a segment, then this doesn't exist in the sourcemap. - if (segment == null) - return INVALID_MAPPING; - // 1-length segments only move the current generated column, there's no source information - // to gather from it. - if (segment.length === 1) - return SOURCELESS_MAPPING; - const source = this.sources[segment[1]]; - return source.originalPositionFor(segment[2], segment[3], segment.length === 5 ? this.map.names[segment[4]] : name); + function originalPositionFor(source, line, column, name) { + if (!source.map) { + return { column, line, name, source: source.source, content: source.content }; } + const segment = traceMapping.traceSegment(source.map, line, column); + // If we couldn't find a segment, then this doesn't exist in the sourcemap. + if (segment == null) + return null; + // 1-length segments only move the current generated column, there's no source information + // to gather from it. + if (segment.length === 1) + return SOURCELESS_MAPPING; + return originalPositionFor(source.sources[segment[1]], segment[2], segment[3], segment.length === 5 ? source.map.names[segment[4]] : name); } - (() => { - traceMappings = (tree) => { - const mappings = []; - const names = new FastStringArray(); - const sources = new FastStringArray(); - const sourcesContent = []; - const { sources: rootSources, map } = tree; - const rootNames = map.names; - const rootMappings = traceMapping.decodedMappings(map); - let lastLineWithSegment = -1; - for (let i = 0; i < rootMappings.length; i++) { - const segments = rootMappings[i]; - const tracedSegments = []; - let lastSourcesIndex = -1; - let lastSourceLine = -1; - let lastSourceColumn = -1; - for (let j = 0; j < segments.length; j++) { - const segment = segments[j]; - let traced = SOURCELESS_MAPPING; - // 1-length segments only move the current generated column, there's no source information - // to gather from it. - if (segment.length !== 1) { - const source = rootSources[segment[1]]; - traced = source.originalPositionFor(segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : ''); - // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a - // respective segment into an original source. - if (traced === INVALID_MAPPING) - continue; - } - const genCol = segment[0]; - if (traced === SOURCELESS_MAPPING) { - if (lastSourcesIndex === -1) { - // This is a consecutive source-less segment, which doesn't carry any new information. - continue; - } - lastSourcesIndex = lastSourceLine = lastSourceColumn = -1; - tracedSegments.push([genCol]); - continue; - } - // So we traced a segment down into its original source file. Now push a - // new segment pointing to this location. - const { column, line, name, content, source } = traced; - // Store the source location, and ensure we keep sourcesContent up to - // date with the sources array. - const sourcesIndex = put(sources, source); - sourcesContent[sourcesIndex] = content; - if (lastSourcesIndex === sourcesIndex && - lastSourceLine === line && - lastSourceColumn === column) { - // This is a duplicate mapping pointing at the exact same starting point in the source - // file. It doesn't carry any new information, and only bloats the sourcemap. - continue; - } - lastLineWithSegment = i; - lastSourcesIndex = sourcesIndex; - lastSourceLine = line; - lastSourceColumn = column; - // This looks like unnecessary duplication, but it noticeably increases performance. If we - // were to push the nameIndex onto length-4 array, v8 would internally allocate 22 slots! - // That's 68 wasted bytes! Array literals have the same capacity as their length, saving - // memory. - tracedSegments.push(name - ? [genCol, sourcesIndex, line, column, put(names, name)] - : [genCol, sourcesIndex, line, column]); - } - mappings.push(tracedSegments); - } - if (mappings.length > lastLineWithSegment + 1) { - mappings.length = lastLineWithSegment + 1; - } - return traceMapping.presortedDecodedMap(Object.assign({}, tree.map, { - mappings, - // TODO: Make all sources relative to the sourceRoot. - sourceRoot: undefined, - names: names.array, - sources: sources.array, - sourcesContent, - })); - }; - })(); function asArray(value) { if (Array.isArray(value)) @@ -197,7 +125,7 @@ } let tree = build(map, loader, '', 0); for (let i = maps.length - 1; i >= 0; i--) { - tree = new SourceMapTree(maps[i], [tree]); + tree = MapSource(maps[i], [tree]); } return tree; } @@ -219,19 +147,17 @@ // TODO: We should eventually support async loading of sourcemap files. const sourceMap = loader(ctx.source, ctx); const { source, content } = ctx; - // If there is no sourcemap, then it is an unmodified source file. - if (!sourceMap) { - // The contents of this unmodified source file can be overridden via the loader context, - // allowing it to be explicitly null or a string. If it remains undefined, we fall back to - // the importing sourcemap's `sourcesContent` field. - const sourceContent = content !== undefined ? content : sourcesContent ? sourcesContent[i] : null; - return new OriginalSource(source, sourceContent); - } - // Else, it's a real sourcemap, and we need to recurse into it to load its - // source files. - return build(new traceMapping.TraceMap(sourceMap, source), loader, source, depth); + // If there is a sourcemap, then we need to recurse into it to load its source files. + if (sourceMap) + return build(new traceMapping.TraceMap(sourceMap, source), loader, source, depth); + // Else, it's an an unmodified source file. + // The contents of this unmodified source file can be overridden via the loader context, + // allowing it to be explicitly null or a string. If it remains undefined, we fall back to + // the importing sourcemap's `sourcesContent` field. + const sourceContent = content !== undefined ? content : sourcesContent ? sourcesContent[i] : null; + return OriginalSource(source, sourceContent); }); - return new SourceMapTree(map, children); + return MapSource(map, children); } /** @@ -240,14 +166,15 @@ */ class SourceMap { constructor(map, options) { - this.version = 3; // SourceMap spec says this should be first. - this.file = map.file; - this.mappings = options.decodedMappings ? traceMapping.decodedMappings(map) : traceMapping.encodedMappings(map); - this.names = map.names; - this.sourceRoot = map.sourceRoot; - this.sources = map.sources; - if (!options.excludeContent && 'sourcesContent' in map) { - this.sourcesContent = map.sourcesContent; + const out = options.decodedMappings ? genMapping.decodedMap(map) : genMapping.encodedMap(map); + this.version = out.version; // SourceMap spec says this should be first. + this.file = out.file; + this.mappings = out.mappings; + this.names = out.names; + this.sourceRoot = out.sourceRoot; + this.sources = out.sources; + if (!options.excludeContent) { + this.sourcesContent = out.sourcesContent; } } toString() { diff --git a/tools/node_modules/eslint/node_modules/@ampproject/remapping/package.json b/tools/node_modules/eslint/node_modules/@ampproject/remapping/package.json index 0914a04eb44..bf97a85173a 100644 --- a/tools/node_modules/eslint/node_modules/@ampproject/remapping/package.json +++ b/tools/node_modules/eslint/node_modules/@ampproject/remapping/package.json @@ -1,6 +1,6 @@ { "name": "@ampproject/remapping", - "version": "2.1.2", + "version": "2.2.0", "description": "Remap sequential sourcemaps through transformations to point at the original source code", "keywords": [ "source", @@ -41,22 +41,23 @@ "test:watch": "jest --coverage --watch" }, "devDependencies": { - "@rollup/plugin-typescript": "8.3.0", - "@types/jest": "27.4.0", - "@typescript-eslint/eslint-plugin": "5.10.2", - "@typescript-eslint/parser": "5.10.2", - "eslint": "8.8.0", - "eslint-config-prettier": "8.3.0", - "jest": "27.4.7", - "jest-config": "27.4.7", + "@rollup/plugin-typescript": "8.3.2", + "@types/jest": "27.4.1", + "@typescript-eslint/eslint-plugin": "5.20.0", + "@typescript-eslint/parser": "5.20.0", + "eslint": "8.14.0", + "eslint-config-prettier": "8.5.0", + "jest": "27.5.1", + "jest-config": "27.5.1", "npm-run-all": "4.1.5", - "prettier": "2.5.1", - "rollup": "2.67.0", - "ts-jest": "27.1.3", - "tslib": "2.3.1", - "typescript": "4.5.5" + "prettier": "2.6.2", + "rollup": "2.70.2", + "ts-jest": "27.1.4", + "tslib": "2.4.0", + "typescript": "4.6.3" }, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" } } diff --git a/tools/node_modules/eslint/node_modules/@babel/code-frame/package.json b/tools/node_modules/eslint/node_modules/@babel/code-frame/package.json index ee1b3820a68..18d8db1229c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/code-frame/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/code-frame/package.json @@ -1,6 +1,6 @@ { "name": "@babel/code-frame", - "version": "7.16.7", + "version": "7.18.6", "description": "Generate errors that contain a code frame that point to source locations.", "author": "The Babel Team (https://babel.dev/team)", "homepage": "https://babel.dev/docs/en/next/babel-code-frame", @@ -16,7 +16,7 @@ }, "main": "./lib/index.js", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" }, "devDependencies": { "@types/chalk": "^2.0.0", @@ -25,5 +25,6 @@ }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/compat-data/data/corejs2-built-ins.json b/tools/node_modules/eslint/node_modules/@babel/compat-data/data/corejs2-built-ins.json index ab9d30be39a..b9e4cfe3715 100644 --- a/tools/node_modules/eslint/node_modules/@babel/compat-data/data/corejs2-built-ins.json +++ b/tools/node_modules/eslint/node_modules/@babel/compat-data/data/corejs2-built-ins.json @@ -17,11 +17,11 @@ "edge": "12", "firefox": "2", "safari": "3.1", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -90,11 +90,11 @@ "edge": "12", "firefox": "2", "safari": "3.1", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -114,7 +114,7 @@ "chrome": "47", "opera": "34", "edge": "14", - "firefox": "43", + "firefox": "102", "safari": "10", "node": "6", "ios": "10", @@ -127,11 +127,11 @@ "edge": "12", "firefox": "2", "safari": "3.1", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -142,11 +142,11 @@ "edge": "12", "firefox": "4", "safari": "4", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -169,11 +169,11 @@ "edge": "12", "firefox": "2", "safari": "3.1", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -207,11 +207,11 @@ "edge": "12", "firefox": "3", "safari": "4", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -222,11 +222,11 @@ "edge": "12", "firefox": "3", "safari": "4", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -248,11 +248,11 @@ "edge": "12", "firefox": "2", "safari": "3.1", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -287,11 +287,11 @@ "edge": "12", "firefox": "2", "safari": "4", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -302,11 +302,11 @@ "edge": "12", "firefox": "3.5", "safari": "4", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -317,7 +317,7 @@ "edge": "12", "firefox": "4", "safari": "10", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "10", @@ -342,11 +342,11 @@ "edge": "12", "firefox": "2", "safari": "3.1", - "node": "0.10", + "node": "0.4", "ie": "10", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -357,11 +357,11 @@ "edge": "12", "firefox": "4", "safari": "5.1", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -383,10 +383,10 @@ "edge": "14", "firefox": "2", "safari": "4", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -637,7 +637,7 @@ "edge": "12", "firefox": "16", "safari": "9", - "node": "0.12", + "node": "0.8", "android": "4.1", "ios": "9", "samsung": "1.5", @@ -662,7 +662,7 @@ "edge": "12", "firefox": "15", "safari": "9", - "node": "0.12", + "node": "0.8", "android": "4.1", "ios": "9", "samsung": "1.5", @@ -746,11 +746,11 @@ "edge": "12", "firefox": "4", "safari": "4", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -783,11 +783,11 @@ "edge": "12", "firefox": "4", "safari": "5.1", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -798,11 +798,11 @@ "edge": "12", "firefox": "4", "safari": "4", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -929,7 +929,7 @@ "edge": "12", "firefox": "22", "safari": "9", - "node": "0.12", + "node": "0.8", "android": "4.1", "ios": "9", "samsung": "1.5", @@ -1304,10 +1304,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1318,10 +1318,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1332,10 +1332,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1346,10 +1346,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1384,10 +1384,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1398,10 +1398,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1412,10 +1412,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1450,10 +1450,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1476,10 +1476,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1538,10 +1538,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1564,10 +1564,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1578,10 +1578,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1592,10 +1592,10 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.10", + "node": "0.4", "android": "4", "ios": "7", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.14", "electron": "0.20" @@ -1606,11 +1606,11 @@ "edge": "12", "firefox": "3.5", "safari": "4", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -1656,11 +1656,11 @@ "edge": "12", "firefox": "15", "safari": "5.1", - "node": "0.10", + "node": "0.4", "ie": "10", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" diff --git a/tools/node_modules/eslint/node_modules/@babel/compat-data/data/plugin-bugfixes.json b/tools/node_modules/eslint/node_modules/@babel/compat-data/data/plugin-bugfixes.json index 7fb7f179120..a16d707df06 100644 --- a/tools/node_modules/eslint/node_modules/@babel/compat-data/data/plugin-bugfixes.json +++ b/tools/node_modules/eslint/node_modules/@babel/compat-data/data/plugin-bugfixes.json @@ -1,15 +1,4 @@ { - "transform-async-to-generator": { - "chrome": "55", - "opera": "42", - "edge": "15", - "firefox": "52", - "safari": "10.1", - "node": "7.6", - "ios": "10.3", - "samsung": "6", - "electron": "1.6" - }, "bugfix/transform-async-arrows-in-class": { "chrome": "55", "opera": "42", @@ -21,17 +10,6 @@ "samsung": "6", "electron": "1.6" }, - "transform-parameters": { - "chrome": "49", - "opera": "36", - "edge": "15", - "firefox": "53", - "safari": "10", - "node": "6", - "ios": "10", - "samsung": "5", - "electron": "0.37" - }, "bugfix/transform-edge-default-parameters": { "chrome": "49", "opera": "36", @@ -43,17 +21,6 @@ "samsung": "5", "electron": "0.37" }, - "transform-function-name": { - "chrome": "51", - "opera": "38", - "edge": "14", - "firefox": "53", - "safari": "10", - "node": "6.5", - "ios": "10", - "samsung": "5", - "electron": "1.2" - }, "bugfix/transform-edge-function-name": { "chrome": "51", "opera": "38", @@ -65,17 +32,6 @@ "samsung": "5", "electron": "1.2" }, - "transform-block-scoping": { - "chrome": "49", - "opera": "36", - "edge": "14", - "firefox": "51", - "safari": "10", - "node": "6", - "ios": "10", - "samsung": "5", - "electron": "0.37" - }, "bugfix/transform-safari-block-shadowing": { "chrome": "49", "opera": "36", @@ -110,17 +66,6 @@ "samsung": "5", "electron": "0.37" }, - "transform-template-literals": { - "chrome": "41", - "opera": "28", - "edge": "13", - "firefox": "34", - "safari": "9", - "node": "4", - "ios": "9", - "samsung": "3.4", - "electron": "0.21" - }, "bugfix/transform-tagged-template-caching": { "chrome": "41", "opera": "28", @@ -133,6 +78,16 @@ "rhino": "1.7.14", "electron": "0.21" }, + "bugfix/transform-v8-spread-parameters-in-optional-chaining": { + "chrome": "91", + "opera": "77", + "edge": "91", + "firefox": "74", + "safari": "13.1", + "node": "16.9", + "ios": "13.4", + "electron": "13.0" + }, "proposal-optional-chaining": { "chrome": "80", "opera": "67", @@ -144,14 +99,59 @@ "samsung": "13", "electron": "8.0" }, - "bugfix/transform-v8-spread-parameters-in-optional-chaining": { - "chrome": "91", - "opera": "77", - "edge": "91", - "firefox": "74", - "safari": "13.1", - "node": "16.9", - "ios": "13.4", - "electron": "13.0" + "transform-parameters": { + "chrome": "49", + "opera": "36", + "edge": "15", + "firefox": "53", + "safari": "10", + "node": "6", + "ios": "10", + "samsung": "5", + "electron": "0.37" + }, + "transform-async-to-generator": { + "chrome": "55", + "opera": "42", + "edge": "15", + "firefox": "52", + "safari": "10.1", + "node": "7.6", + "ios": "10.3", + "samsung": "6", + "electron": "1.6" + }, + "transform-template-literals": { + "chrome": "41", + "opera": "28", + "edge": "13", + "firefox": "34", + "safari": "9", + "node": "4", + "ios": "9", + "samsung": "3.4", + "electron": "0.21" + }, + "transform-function-name": { + "chrome": "51", + "opera": "38", + "edge": "14", + "firefox": "53", + "safari": "10", + "node": "6.5", + "ios": "10", + "samsung": "5", + "electron": "1.2" + }, + "transform-block-scoping": { + "chrome": "49", + "opera": "36", + "edge": "14", + "firefox": "51", + "safari": "10", + "node": "6", + "ios": "10", + "samsung": "5", + "electron": "0.37" } } diff --git a/tools/node_modules/eslint/node_modules/@babel/compat-data/data/plugins.json b/tools/node_modules/eslint/node_modules/@babel/compat-data/data/plugins.json index b64714c7f0e..96c64cab34f 100644 --- a/tools/node_modules/eslint/node_modules/@babel/compat-data/data/plugins.json +++ b/tools/node_modules/eslint/node_modules/@babel/compat-data/data/plugins.json @@ -4,7 +4,8 @@ "opera": "80", "edge": "94", "firefox": "93", - "node": "16.11" + "node": "16.11", + "electron": "15.0" }, "proposal-private-property-in-object": { "chrome": "91", @@ -422,11 +423,11 @@ "edge": "12", "firefox": "2", "safari": "5.1", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -437,11 +438,11 @@ "edge": "12", "firefox": "2", "safari": "5.1", - "node": "0.10", + "node": "0.4", "ie": "9", "android": "4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" @@ -452,11 +453,11 @@ "edge": "12", "firefox": "2", "safari": "3.1", - "node": "0.10", + "node": "0.6", "ie": "9", "android": "4.4", "ios": "6", - "phantom": "2", + "phantom": "1.9", "samsung": "1", "rhino": "1.7.13", "electron": "0.20" diff --git a/tools/node_modules/eslint/node_modules/@babel/compat-data/package.json b/tools/node_modules/eslint/node_modules/@babel/compat-data/package.json index a0af97a03db..5000c9f56ba 100644 --- a/tools/node_modules/eslint/node_modules/@babel/compat-data/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/compat-data/package.json @@ -1,6 +1,6 @@ { "name": "@babel/compat-data", - "version": "7.17.0", + "version": "7.19.1", "author": "The Babel Team (https://babel.dev/team)", "license": "MIT", "description": "", @@ -30,10 +30,11 @@ ], "devDependencies": { "@mdn/browser-compat-data": "^4.0.10", - "core-js-compat": "^3.20.2", - "electron-to-chromium": "^1.3.893" + "core-js-compat": "^3.25.1", + "electron-to-chromium": "^1.4.248" }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/core/cjs-proxy.cjs b/tools/node_modules/eslint/node_modules/@babel/core/cjs-proxy.cjs new file mode 100644 index 00000000000..4bf8b5cb9ce --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/core/cjs-proxy.cjs @@ -0,0 +1,29 @@ +"use strict"; + +const babelP = import("./lib/index.js"); + +const functionNames = [ + "createConfigItem", + "loadPartialConfig", + "loadOptions", + "transform", + "transformFile", + "transformFromAst", + "parse", +]; + +for (const name of functionNames) { + exports[`${name}Sync`] = function () { + throw new Error( + `"${name}Sync" is not supported when loading @babel/core using require()` + ); + }; + exports[name] = function (...args) { + babelP.then(babel => { + babel[name](...args); + }); + }; + exports[`${name}Async`] = function (...args) { + return babelP.then(babel => babel[`${name}Async`](...args)); + }; +} diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/cache-contexts.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/cache-contexts.js index e69de29bb2d..d7c091273bd 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/cache-contexts.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/cache-contexts.js @@ -0,0 +1,3 @@ +0 && 0; + +//# sourceMappingURL=cache-contexts.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/caching.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/caching.js index 16c6e9edb9d..31e7db1747d 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/caching.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/caching.js @@ -62,8 +62,7 @@ function makeCachedFunction(CallCache, handler) { let value; if ((0, _util.isIterableIterator)(handlerResult)) { - const gen = handlerResult; - value = yield* (0, _async.onFirstPause)(gen, () => { + value = yield* (0, _async.onFirstPause)(handlerResult, () => { finishLock = setupAsyncLocks(cache, futureCache, arg); }); } else { @@ -322,4 +321,8 @@ class Lock { this._resolve(value); } -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=caching.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/config-chain.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/config-chain.js index aa5c5f22a9a..9f4d1d57158 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/config-chain.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/config-chain.js @@ -33,6 +33,10 @@ var _patternToRegex = require("./pattern-to-regex"); var _printer = require("./printer"); +var _rewriteStackTrace = require("../errors/rewrite-stack-trace"); + +var _configError = require("../errors/config-error"); + var _files = require("./files"); var _caching = require("./caching"); @@ -201,17 +205,17 @@ function babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirector const validateConfigFile = (0, _caching.makeWeakCacheSync)(file => ({ filepath: file.filepath, dirname: file.dirname, - options: (0, _options.validate)("configfile", file.options) + options: (0, _options.validate)("configfile", file.options, file.filepath) })); const validateBabelrcFile = (0, _caching.makeWeakCacheSync)(file => ({ filepath: file.filepath, dirname: file.dirname, - options: (0, _options.validate)("babelrcfile", file.options) + options: (0, _options.validate)("babelrcfile", file.options, file.filepath) })); const validateExtendFile = (0, _caching.makeWeakCacheSync)(file => ({ filepath: file.filepath, dirname: file.dirname, - options: (0, _options.validate)("extendsfile", file.options) + options: (0, _options.validate)("extendsfile", file.options, file.filepath) })); const loadProgrammaticChain = makeChainWalker({ root: input => buildRootDescriptors(input, "base", _configDescriptors.createCachedDescriptors), @@ -306,14 +310,14 @@ function makeChainWalker({ overridesEnv, createLogger }) { - return function* (input, context, files = new Set(), baseLogger) { + return function* chainWalker(input, context, files = new Set(), baseLogger) { const { dirname } = input; const flattenedConfigs = []; const rootOpts = root(input); - if (configIsApplicable(rootOpts, dirname, context)) { + if (configIsApplicable(rootOpts, dirname, context, input.filepath)) { flattenedConfigs.push({ config: rootOpts, envName: undefined, @@ -321,7 +325,7 @@ function makeChainWalker({ }); const envOpts = env(input, context.envName); - if (envOpts && configIsApplicable(envOpts, dirname, context)) { + if (envOpts && configIsApplicable(envOpts, dirname, context, input.filepath)) { flattenedConfigs.push({ config: envOpts, envName: context.envName, @@ -332,7 +336,7 @@ function makeChainWalker({ (rootOpts.options.overrides || []).forEach((_, index) => { const overrideOps = overrides(input, index); - if (configIsApplicable(overrideOps, dirname, context)) { + if (configIsApplicable(overrideOps, dirname, context, input.filepath)) { flattenedConfigs.push({ config: overrideOps, index, @@ -340,7 +344,7 @@ function makeChainWalker({ }); const overrideEnvOpts = overridesEnv(input, index, context.envName); - if (overrideEnvOpts && configIsApplicable(overrideEnvOpts, dirname, context)) { + if (overrideEnvOpts && configIsApplicable(overrideEnvOpts, dirname, context, input.filepath)) { flattenedConfigs.push({ config: overrideEnvOpts, index, @@ -492,13 +496,13 @@ function dedupDescriptors(items) { function configIsApplicable({ options -}, dirname, context) { - return (options.test === undefined || configFieldIsApplicable(context, options.test, dirname)) && (options.include === undefined || configFieldIsApplicable(context, options.include, dirname)) && (options.exclude === undefined || !configFieldIsApplicable(context, options.exclude, dirname)); +}, dirname, context, configName) { + return (options.test === undefined || configFieldIsApplicable(context, options.test, dirname, configName)) && (options.include === undefined || configFieldIsApplicable(context, options.include, dirname, configName)) && (options.exclude === undefined || !configFieldIsApplicable(context, options.exclude, dirname, configName)); } -function configFieldIsApplicable(context, test, dirname) { +function configFieldIsApplicable(context, test, dirname, configName) { const patterns = Array.isArray(test) ? test : [test]; - return matchesPatterns(context, patterns, dirname); + return matchesPatterns(context, patterns, dirname, configName); } function ignoreListReplacer(_key, value) { @@ -539,13 +543,13 @@ function shouldIgnore(context, ignore, only, dirname) { return false; } -function matchesPatterns(context, patterns, dirname) { - return patterns.some(pattern => matchPattern(pattern, dirname, context.filename, context)); +function matchesPatterns(context, patterns, dirname, configName) { + return patterns.some(pattern => matchPattern(pattern, dirname, context.filename, context, configName)); } -function matchPattern(pattern, dirname, pathToTest, context) { +function matchPattern(pattern, dirname, pathToTest, context, configName) { if (typeof pattern === "function") { - return !!pattern(pathToTest, { + return !!(0, _rewriteStackTrace.endHiddenCallStack)(pattern)(pathToTest, { dirname, envName: context.envName, caller: context.caller @@ -553,7 +557,7 @@ function matchPattern(pattern, dirname, pathToTest, context) { } if (typeof pathToTest !== "string") { - throw new Error(`Configuration contains string/RegExp pattern, but no filename was passed to Babel`); + throw new _configError.default(`Configuration contains string/RegExp pattern, but no filename was passed to Babel`, configName); } if (typeof pattern === "string") { @@ -561,4 +565,8 @@ function matchPattern(pattern, dirname, pathToTest, context) { } return pattern.test(pathToTest); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=config-chain.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/config-descriptors.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/config-descriptors.js index 2f0a7a58ed5..cbadedd90bf 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/config-descriptors.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/config-descriptors.js @@ -17,6 +17,8 @@ function _gensync() { return data; } +var _functional = require("../gensync-utils/functional"); + var _files = require("./files"); var _item = require("./item"); @@ -55,27 +57,10 @@ function createCachedDescriptors(dirname, options, alias) { } function createUncachedDescriptors(dirname, options, alias) { - let plugins; - let presets; return { options: optionsWithResolvedBrowserslistConfigFile(options, dirname), - - *plugins() { - if (!plugins) { - plugins = yield* createPluginDescriptors(options.plugins || [], dirname, alias); - } - - return plugins; - }, - - *presets() { - if (!presets) { - presets = yield* createPresetDescriptors(options.presets || [], dirname, alias, !!options.passPerPreset); - } - - return presets; - } - + plugins: (0, _functional.once)(() => createPluginDescriptors(options.plugins || [], dirname, alias)), + presets: (0, _functional.once)(() => createPresetDescriptors(options.presets || [], dirname, alias, !!options.passPerPreset)) }; } @@ -241,4 +226,8 @@ function assertNoDuplicates(items) { nameMap.add(item.name); } -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=config-descriptors.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/configuration.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/configuration.js index f6cbf0c62c7..27d4f0e03a1 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/configuration.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/configuration.js @@ -70,6 +70,8 @@ var _moduleTypes = require("./module-types"); var _patternToRegex = require("../pattern-to-regex"); +var _configError = require("../../errors/config-error"); + var fs = require("../../gensync-utils/fs"); function _module() { @@ -82,6 +84,8 @@ function _module() { return data; } +var _rewriteStackTrace = require("../../errors/rewrite-stack-trace"); + const debug = _debug()("babel:config:loading:files:configuration"); const ROOT_CONFIG_FILENAMES = ["babel.config.js", "babel.config.cjs", "babel.config.mjs", "babel.config.json"]; @@ -146,7 +150,7 @@ function* loadOneConfig(names, dirname, envName, caller, previousConfig = null) const configs = yield* _gensync().all(names.map(filename => readConfig(_path().join(dirname, filename), envName, caller))); const config = configs.reduce((previousConfig, config) => { if (config && previousConfig) { - throw new Error(`Multiple configuration files found. Please remove one:\n` + ` - ${_path().basename(previousConfig.filepath)}\n` + ` - ${config.filepath}\n` + `from ${dirname}`); + throw new _configError.default(`Multiple configuration files found. Please remove one:\n` + ` - ${_path().basename(previousConfig.filepath)}\n` + ` - ${config.filepath}\n` + `from ${dirname}`); } return config || previousConfig; @@ -175,7 +179,7 @@ function* loadConfig(name, dirname, envName, caller) { const conf = yield* readConfig(filepath, envName, caller); if (!conf) { - throw new Error(`Config file ${filepath} contains no configuration data`); + throw new _configError.default(`Config file contains no configuration data`, filepath); } debug("Loaded config %o from %o.", name, dirname); @@ -213,9 +217,6 @@ const readConfigJS = (0, _caching.makeStrongCache)(function* readConfigJS(filepa try { LOADING_CONFIGS.add(filepath); options = yield* (0, _moduleTypes.default)(filepath, "You appear to be using a native ECMAScript module configuration " + "file, which is only supported when running Babel asynchronously."); - } catch (err) { - err.message = `${filepath}: Error while loading config - ${err.message}`; - throw err; } finally { LOADING_CONFIGS.delete(filepath); } @@ -224,19 +225,19 @@ const readConfigJS = (0, _caching.makeStrongCache)(function* readConfigJS(filepa if (typeof options === "function") { yield* []; - options = options((0, _configApi.makeConfigAPI)(cache)); + options = (0, _rewriteStackTrace.endHiddenCallStack)(options)((0, _configApi.makeConfigAPI)(cache)); assertCache = true; } if (!options || typeof options !== "object" || Array.isArray(options)) { - throw new Error(`${filepath}: Configuration should be an exported JavaScript object.`); + throw new _configError.default(`Configuration should be an exported JavaScript object.`, filepath); } if (typeof options.then === "function") { - throw new Error(`You appear to be using an async configuration, ` + `which your current version of Babel does not support. ` + `We may add support for this in the future, ` + `but if you're on the most recent version of @babel/core and still ` + `seeing this error, then you'll need to synchronously return your config.`); + throw new _configError.default(`You appear to be using an async configuration, ` + `which your current version of Babel does not support. ` + `We may add support for this in the future, ` + `but if you're on the most recent version of @babel/core and still ` + `seeing this error, then you'll need to synchronously return your config.`, filepath); } - if (assertCache && !cache.configured()) throwConfigError(); + if (assertCache && !cache.configured()) throwConfigError(filepath); return { filepath, dirname: _path().dirname(filepath), @@ -248,7 +249,7 @@ const packageToBabelConfig = (0, _caching.makeWeakCacheSync)(file => { if (typeof babel === "undefined") return null; if (typeof babel !== "object" || Array.isArray(babel) || babel === null) { - throw new Error(`${file.filepath}: .babel property must be an object`); + throw new _configError.default(`.babel property must be an object`, file.filepath); } return { @@ -263,18 +264,17 @@ const readConfigJSON5 = (0, _utils.makeStaticFileCache)((filepath, content) => { try { options = _json().parse(content); } catch (err) { - err.message = `${filepath}: Error while parsing config - ${err.message}`; - throw err; + throw new _configError.default(`Error while parsing config - ${err.message}`, filepath); } - if (!options) throw new Error(`${filepath}: No config detected`); + if (!options) throw new _configError.default(`No config detected`, filepath); if (typeof options !== "object") { - throw new Error(`${filepath}: Config returned typeof ${typeof options}`); + throw new _configError.default(`Config returned typeof ${typeof options}`, filepath); } if (Array.isArray(options)) { - throw new Error(`${filepath}: Expected config object but found array`); + throw new _configError.default(`Expected config object but found array`, filepath); } delete options["$schema"]; @@ -291,7 +291,7 @@ const readIgnoreConfig = (0, _utils.makeStaticFileCache)((filepath, content) => for (const pattern of ignorePatterns) { if (pattern[0] === "!") { - throw new Error(`Negation of file paths is not supported.`); + throw new _configError.default(`Negation of file paths is not supported.`, filepath); } } @@ -320,8 +320,8 @@ function* resolveShowConfigPath(dirname) { return null; } -function throwConfigError() { - throw new Error(`\ +function throwConfigError(filepath) { + throw new _configError.default(`\ Caching was left unconfigured. Babel's plugins, presets, and .babelrc.js files can be configured for various types of caching, using the first param of their handler functions: @@ -354,5 +354,9 @@ module.exports = function(api) { // Return the value that will be cached. return { }; -};`); -} \ No newline at end of file +};`, filepath); +} + +0 && 0; + +//# sourceMappingURL=configuration.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/import-meta-resolve.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/import-meta-resolve.js index 6e1c9056507..ea52f2481f7 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/import-meta-resolve.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/import-meta-resolve.js @@ -24,7 +24,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar let import_; try { - import_ = require("./import").default; + import_ = require("./import.cjs"); } catch (_unused) {} const importMetaResolveP = import_ && process.execArgv.includes("--experimental-import-meta-resolve") ? import_("data:text/javascript,export default import.meta.resolve").then(m => m.default || _importMetaResolve.resolve, () => _importMetaResolve.resolve) : Promise.resolve(_importMetaResolve.resolve); @@ -38,4 +38,8 @@ function _resolve() { return (yield importMetaResolveP)(specifier, parent); }); return _resolve.apply(this, arguments); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=import-meta-resolve.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/import.cjs b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/import.cjs new file mode 100644 index 00000000000..c66e76cacba --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/import.cjs @@ -0,0 +1,7 @@ +module.exports = function import_(filepath) { + return import(filepath); +}; + +0 && 0; + +//# sourceMappingURL=import.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/import.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/import.js deleted file mode 100644 index c0acc2b666d..00000000000 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/import.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = import_; - -function import_(filepath) { - return import(filepath); -} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/index-browser.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/index-browser.js index c73168bfbd5..c8d1cf9b6d9 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/index-browser.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/index-browser.js @@ -64,4 +64,8 @@ function loadPlugin(name, dirname) { function loadPreset(name, dirname) { throw new Error(`Cannot load preset ${name} relative to ${dirname} in a browser`); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=index-browser.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/index.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/index.js index 075410c028c..c6acd931fff 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/index.js @@ -83,4 +83,7 @@ exports.resolvePlugin = resolvePlugin; const resolvePreset = _gensync()(plugins.resolvePreset).sync; -exports.resolvePreset = resolvePreset; \ No newline at end of file +exports.resolvePreset = resolvePreset; +0 && 0; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/module-types.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/module-types.js index 35d8220a3ff..e4435079a5b 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/module-types.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/module-types.js @@ -38,6 +38,20 @@ function _module() { return data; } +function _semver() { + const data = require("semver"); + + _semver = function () { + return data; + }; + + return data; +} + +var _rewriteStackTrace = require("../../errors/rewrite-stack-trace"); + +var _configError = require("../../errors/config-error"); + function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } @@ -45,10 +59,11 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar let import_; try { - import_ = require("./import").default; + import_ = require("./import.cjs"); } catch (_unused) {} -const supportsESM = !!import_; +const supportsESM = _semver().satisfies(process.versions.node, "^12.17 || >=13.2"); + exports.supportsESM = supportsESM; function* loadCjsOrMjsDefault(filepath, asyncError, fallbackToTranspiledModule = false) { @@ -68,7 +83,7 @@ function* loadCjsOrMjsDefault(filepath, asyncError, fallbackToTranspiledModule = return yield* (0, _async.waitFor)(loadMjsDefault(filepath)); } - throw new Error(asyncError); + throw new _configError.default(asyncError, filepath); } } @@ -86,8 +101,7 @@ function guessJSModuleType(filename) { } function loadCjsDefault(filepath, fallbackToTranspiledModule) { - const module = require(filepath); - + const module = (0, _rewriteStackTrace.endHiddenCallStack)(require)(filepath); return module != null && module.__esModule ? module.default || (fallbackToTranspiledModule ? module : undefined) : module; } @@ -98,11 +112,15 @@ function loadMjsDefault(_x) { function _loadMjsDefault() { _loadMjsDefault = _asyncToGenerator(function* (filepath) { if (!import_) { - throw new Error("Internal error: Native ECMAScript modules aren't supported" + " by this platform.\n"); + throw new _configError.default("Internal error: Native ECMAScript modules aren't supported" + " by this platform.\n", filepath); } - const module = yield import_((0, _url().pathToFileURL)(filepath)); + const module = yield (0, _rewriteStackTrace.endHiddenCallStack)(import_)((0, _url().pathToFileURL)(filepath)); return module.default; }); return _loadMjsDefault.apply(this, arguments); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=module-types.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/package.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/package.js index 0e08bfe331f..c5108b82ff0 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/package.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/package.js @@ -17,6 +17,8 @@ function _path() { var _utils = require("./utils"); +var _configError = require("../../errors/config-error"); + const PACKAGE_FILENAME = "package.json"; function* findPackageData(filepath) { @@ -54,18 +56,17 @@ const readConfigPackage = (0, _utils.makeStaticFileCache)((filepath, content) => try { options = JSON.parse(content); } catch (err) { - err.message = `${filepath}: Error while parsing JSON - ${err.message}`; - throw err; + throw new _configError.default(`Error while parsing JSON - ${err.message}`, filepath); } if (!options) throw new Error(`${filepath}: No config detected`); if (typeof options !== "object") { - throw new Error(`${filepath}: Config returned typeof ${typeof options}`); + throw new _configError.default(`Config returned typeof ${typeof options}`, filepath); } if (Array.isArray(options)) { - throw new Error(`${filepath}: Expected config object but found array`); + throw new _configError.default(`Expected config object but found array`, filepath); } return { @@ -73,4 +74,7 @@ const readConfigPackage = (0, _utils.makeStaticFileCache)((filepath, content) => dirname: _path().dirname(filepath), options }; -}); \ No newline at end of file +}); +0 && 0; + +//# sourceMappingURL=package.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/plugins.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/plugins.js index 8af6e4957c2..327eb7dc31d 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/plugins.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/plugins.js @@ -187,7 +187,7 @@ function _tryImportMetaResolve() { return _tryImportMetaResolve.apply(this, arguments); } -function resolveStandardizedNameForRequrie(type, name, dirname) { +function resolveStandardizedNameForRequire(type, name, dirname) { const it = resolveAlternativesHelper(type, name); let res = it.next(); @@ -221,20 +221,20 @@ function _resolveStandardizedNameForImport() { const resolveStandardizedName = _gensync()({ sync(type, name, dirname = process.cwd()) { - return resolveStandardizedNameForRequrie(type, name, dirname); + return resolveStandardizedNameForRequire(type, name, dirname); }, async(type, name, dirname = process.cwd()) { return _asyncToGenerator(function* () { if (!_moduleTypes.supportsESM) { - return resolveStandardizedNameForRequrie(type, name, dirname); + return resolveStandardizedNameForRequire(type, name, dirname); } try { return yield resolveStandardizedNameForImport(type, name, dirname); } catch (e) { try { - return resolveStandardizedNameForRequrie(type, name, dirname); + return resolveStandardizedNameForRequire(type, name, dirname); } catch (e2) { if (e.type === "MODULE_NOT_FOUND") throw e; if (e2.type === "MODULE_NOT_FOUND") throw e2; @@ -270,4 +270,8 @@ function* requireModule(type, name) { LOADING_MODULES.delete(name); } } -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=plugins.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/types.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/types.js index e69de29bb2d..c03b5a6fd83 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/types.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/types.js @@ -0,0 +1,3 @@ +0 && 0; + +//# sourceMappingURL=types.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/utils.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/utils.js index 6da68c0a730..e60f0bef3e4 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/utils.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/files/utils.js @@ -41,4 +41,8 @@ function fileMtime(filepath) { } return null; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=utils.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/full.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/full.js index e1df648ceed..9ed56350a38 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/full.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/full.js @@ -49,7 +49,7 @@ var _configApi = require("./helpers/config-api"); var _partial = require("./partial"); -var Context = require("./cache-contexts"); +var _configError = require("../errors/config-error"); var _default = _gensync()(function* loadFullConfig(inputOpts) { var _opts$assumptions; @@ -202,7 +202,9 @@ function enhanceError(context, fn) { return yield* fn(arg1, arg2); } catch (e) { if (!/^\[BABEL\]/.test(e.message)) { - e.message = `[BABEL] ${context.filename || "unknown"}: ${e.message}`; + var _context$filename; + + e.message = `[BABEL] ${(_context$filename = context.filename) != null ? _context$filename : "unknown file"}: ${e.message}`; } throw e; @@ -327,7 +329,7 @@ const instantiatePlugin = (0, _caching.makeWeakCache)(function* ({ const validateIfOptionNeedsFilename = (options, descriptor) => { if (options.test || options.include || options.exclude) { const formattedPresetName = descriptor.name ? `"${descriptor.name}"` : "/* your preset */"; - throw new Error([`Preset ${formattedPresetName} requires a filename to be set when babel is called directly,`, `\`\`\``, `babel.transform(code, { filename: 'file.ts', presets: [${formattedPresetName}] });`, `\`\`\``, `See https://babeljs.io/docs/en/options#filename for more information.`].join("\n")); + throw new _configError.default([`Preset ${formattedPresetName} requires a filename to be set when babel is called directly,`, `\`\`\``, `babel.transformSync(code, { filename: 'file.ts', presets: [${formattedPresetName}] });`, `\`\`\``, `See https://babeljs.io/docs/en/options#filename for more information.`].join("\n")); } }; @@ -375,4 +377,8 @@ function chain(a, b) { fn.apply(this, args); } }; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=full.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/config-api.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/config-api.js index f8dedbcb44b..8a654571b21 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/config-api.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/config-api.js @@ -21,8 +21,6 @@ var _ = require("../../"); var _caching = require("../caching"); -var Context = require("../cache-contexts"); - function makeConfigAPI(cache) { const env = value => cache.using(data => { if (typeof value === "undefined") return data.envName; @@ -31,8 +29,7 @@ function makeConfigAPI(cache) { return (0, _caching.assertSimpleType)(value(data.envName)); } - if (!Array.isArray(value)) value = [value]; - return value.some(entry => { + return (Array.isArray(value) ? value : [value]).some(entry => { if (typeof entry !== "string") { throw new Error("Unexpected non-string value"); } @@ -105,4 +102,8 @@ function assertVersion(range) { version: _.version, range }); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=config-api.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/deep-array.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/deep-array.js index 9455e32c3f8..80cc2d0662e 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/deep-array.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/deep-array.js @@ -21,4 +21,8 @@ function flattenToSet(arr) { } return result; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=deep-array.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/environment.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/environment.js index e4bfdbc7a72..c0c1caa0621 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/environment.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/helpers/environment.js @@ -7,4 +7,8 @@ exports.getEnv = getEnv; function getEnv(defaultValue = "development") { return process.env.BABEL_ENV || process.env.NODE_ENV || defaultValue; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=environment.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/index.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/index.js index 696850dba2a..dbc1c8733e9 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/index.js @@ -38,13 +38,19 @@ const loadOptionsRunner = _gensync()(function* (opts) { const createConfigItemRunner = _gensync()(_item.createConfigItem); -const maybeErrback = runner => (opts, callback) => { - if (callback === undefined && typeof opts === "function") { - callback = opts; - opts = undefined; +const maybeErrback = runner => (argOrCallback, maybeCallback) => { + let arg; + let callback; + + if (maybeCallback === undefined && typeof argOrCallback === "function") { + callback = argOrCallback; + arg = undefined; + } else { + callback = maybeCallback; + arg = argOrCallback; } - return callback ? runner.errback(opts, callback) : runner.sync(opts); + return callback ? runner.errback(arg, callback) : runner.sync(arg); }; const loadPartialConfig = maybeErrback(_partial.loadPartialConfig); @@ -72,4 +78,8 @@ function createConfigItem(target, options, callback) { } else { return createConfigItemRunner.sync(target, options); } -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/item.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/item.js index 23803546191..2620ad3e955 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/item.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/item.js @@ -73,4 +73,7 @@ class ConfigItem { } -Object.freeze(ConfigItem.prototype); \ No newline at end of file +Object.freeze(ConfigItem.prototype); +0 && 0; + +//# sourceMappingURL=item.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/partial.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/partial.js index e8c52e103b6..87b2c8135a8 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/partial.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/partial.js @@ -194,4 +194,7 @@ class PartialConfig { } -Object.freeze(PartialConfig.prototype); \ No newline at end of file +Object.freeze(PartialConfig.prototype); +0 && 0; + +//# sourceMappingURL=partial.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/pattern-to-regex.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/pattern-to-regex.js index ec5db8fd5d2..f4408a24910 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/pattern-to-regex.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/pattern-to-regex.js @@ -41,4 +41,8 @@ function pathToPattern(pattern, dirname) { return escapeRegExp(part) + (last ? endSep : sep); })].join("")); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=pattern-to-regex.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/plugin.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/plugin.js index 40e05401984..cefb645f139 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/plugin.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/plugin.js @@ -31,4 +31,7 @@ class Plugin { } -exports.default = Plugin; \ No newline at end of file +exports.default = Plugin; +0 && 0; + +//# sourceMappingURL=plugin.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/printer.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/printer.js index 229fd9a3ce7..58c97ac41e9 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/printer.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/printer.js @@ -81,7 +81,7 @@ function descriptorToConfig(d) { if (typeof d.value === "object") { name = d.value; } else if (typeof d.value === "function") { - name = `[Function: ${d.value.toString().substr(0, 50)} ... ]`; + name = `[Function: ${d.value.toString().slice(0, 50)} ... ]`; } } @@ -136,4 +136,7 @@ class ConfigPrinter { } -exports.ConfigPrinter = ConfigPrinter; \ No newline at end of file +exports.ConfigPrinter = ConfigPrinter; +0 && 0; + +//# sourceMappingURL=printer.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/resolve-targets-browser.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/resolve-targets-browser.js index cc4e5180299..8a81905af0d 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/resolve-targets-browser.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/resolve-targets-browser.js @@ -21,22 +21,29 @@ function resolveBrowserslistConfigFile(browserslistConfigFile, configFilePath) { } function resolveTargets(options, root) { - let targets = options.targets; + const optTargets = options.targets; + let targets; - if (typeof targets === "string" || Array.isArray(targets)) { + if (typeof optTargets === "string" || Array.isArray(optTargets)) { targets = { - browsers: targets + browsers: optTargets }; - } - - if (targets && targets.esmodules) { - targets = Object.assign({}, targets, { - esmodules: "intersect" - }); + } else if (optTargets) { + if ("esmodules" in optTargets) { + targets = Object.assign({}, optTargets, { + esmodules: "intersect" + }); + } else { + targets = optTargets; + } } return (0, _helperCompilationTargets().default)(targets, { ignoreBrowserslistConfig: true, browserslistEnv: options.browserslistEnv }); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=resolve-targets-browser.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/resolve-targets.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/resolve-targets.js index 973e3d57641..a08d3ab4be8 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/resolve-targets.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/resolve-targets.js @@ -33,18 +33,21 @@ function resolveBrowserslistConfigFile(browserslistConfigFile, configFileDir) { } function resolveTargets(options, root) { - let targets = options.targets; + const optTargets = options.targets; + let targets; - if (typeof targets === "string" || Array.isArray(targets)) { + if (typeof optTargets === "string" || Array.isArray(optTargets)) { targets = { - browsers: targets + browsers: optTargets }; - } - - if (targets && targets.esmodules) { - targets = Object.assign({}, targets, { - esmodules: "intersect" - }); + } else if (optTargets) { + if ("esmodules" in optTargets) { + targets = Object.assign({}, optTargets, { + esmodules: "intersect" + }); + } else { + targets = optTargets; + } } const { @@ -65,4 +68,8 @@ function resolveTargets(options, root) { configPath: root, browserslistEnv: options.browserslistEnv }); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=resolve-targets.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/util.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/util.js index 1fc2d3d79c6..0e039e99c03 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/util.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/util.js @@ -28,4 +28,8 @@ function mergeDefaultFields(target, source) { function isIterableIterator(value) { return !!value && typeof value.next === "function" && typeof value[Symbol.iterator] === "function"; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=util.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/option-assertions.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/option-assertions.js index 9a0b4a47994..cdd523784d1 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/option-assertions.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/option-assertions.js @@ -349,4 +349,8 @@ function assertAssumptions(loc, value) { } return value; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=option-assertions.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/options.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/options.js index 930278cfb9d..3bb31cf54a3 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/options.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/options.js @@ -7,12 +7,12 @@ exports.assumptionsNames = void 0; exports.checkNoUnwrappedItemOptionPairs = checkNoUnwrappedItemOptionPairs; exports.validate = validate; -var _plugin = require("../plugin"); - var _removed = require("./removed"); var _optionAssertions = require("./option-assertions"); +var _configError = require("../../errors/config-error"); + const ROOT_VALIDATORS = { cwd: _optionAssertions.assertString, root: _optionAssertions.assertString, @@ -74,18 +74,25 @@ const COMMON_VALIDATORS = { moduleId: _optionAssertions.assertString }); } -const assumptionsNames = new Set(["arrayLikeIsIterable", "constantReexports", "constantSuper", "enumerableModuleMeta", "ignoreFunctionLength", "ignoreToPrimitiveHint", "iterableIsArray", "mutableTemplateObject", "noClassCalls", "noDocumentAll", "noIncompleteNsImportDetection", "noNewArrows", "objectRestNoSymbols", "privateFieldsAsProperties", "pureGetters", "setClassMethods", "setComputedProperties", "setPublicClassFields", "setSpreadProperties", "skipForOfIteratorClosing", "superIsCallableConstructor"]); +const knownAssumptions = ["arrayLikeIsIterable", "constantReexports", "constantSuper", "enumerableModuleMeta", "ignoreFunctionLength", "ignoreToPrimitiveHint", "iterableIsArray", "mutableTemplateObject", "noClassCalls", "noDocumentAll", "noIncompleteNsImportDetection", "noNewArrows", "objectRestNoSymbols", "privateFieldsAsProperties", "pureGetters", "setClassMethods", "setComputedProperties", "setPublicClassFields", "setSpreadProperties", "skipForOfIteratorClosing", "superIsCallableConstructor"]; +const assumptionsNames = new Set(knownAssumptions); exports.assumptionsNames = assumptionsNames; function getSource(loc) { return loc.type === "root" ? loc.source : getSource(loc.parent); } -function validate(type, opts) { - return validateNested({ - type: "root", - source: type - }, opts); +function validate(type, opts, filename) { + try { + return validateNested({ + type: "root", + source: type + }, opts); + } catch (error) { + const configError = new _configError.default(error.message, filename); + if (error.code) configError.code = error.code; + throw configError; + } } function validateNested(loc, opts) { @@ -207,4 +214,8 @@ function checkNoUnwrappedItemOptionPairs(items, index, type, e) { if (lastItem.file && lastItem.options === undefined && typeof thisItem.value === "object") { e.message += `\n- Maybe you meant to use\n` + `"${type}s": [\n ["${lastItem.file.request}", ${JSON.stringify(thisItem.value, undefined, 2)}]\n]\n` + `To be a valid ${type}, its name and options should be wrapped in a pair of brackets`; } -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=options.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/plugins.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/plugins.js index a70cc676fab..ec8389665cb 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/plugins.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/plugins.js @@ -68,4 +68,8 @@ function validatePluginObject(obj) { } }); return obj; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=plugins.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/removed.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/removed.js index f0fcd7de391..57270ea93b3 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/removed.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/config/validation/removed.js @@ -63,4 +63,7 @@ var _default = { message: "The `sourceMapTarget` option has been removed because it makes more sense for the tooling " + "that calls Babel to assign `map.file` themselves." } }; -exports.default = _default; \ No newline at end of file +exports.default = _default; +0 && 0; + +//# sourceMappingURL=removed.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/errors/config-error.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/errors/config-error.js new file mode 100644 index 00000000000..ecab2dc26a0 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/errors/config-error.js @@ -0,0 +1,22 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _rewriteStackTrace = require("./rewrite-stack-trace"); + +class ConfigError extends Error { + constructor(message, filename) { + super(message); + (0, _rewriteStackTrace.expectedError)(this); + if (filename) (0, _rewriteStackTrace.injcectVirtualStackFrame)(this, filename); + } + +} + +exports.default = ConfigError; +0 && 0; + +//# sourceMappingURL=config-error.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/errors/rewrite-stack-trace.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/errors/rewrite-stack-trace.js new file mode 100644 index 00000000000..c193a636a37 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/errors/rewrite-stack-trace.js @@ -0,0 +1,111 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.beginHiddenCallStack = beginHiddenCallStack; +exports.endHiddenCallStack = endHiddenCallStack; +exports.expectedError = expectedError; +exports.injcectVirtualStackFrame = injcectVirtualStackFrame; +const ErrorToString = Function.call.bind(Error.prototype.toString); +const SUPPORTED = !!Error.captureStackTrace; +const START_HIDNG = "startHiding - secret - don't use this - v1"; +const STOP_HIDNG = "stopHiding - secret - don't use this - v1"; +const expectedErrors = new WeakSet(); +const virtualFrames = new WeakMap(); + +function CallSite(filename) { + return Object.create({ + isNative: () => false, + isConstructor: () => false, + isToplevel: () => true, + getFileName: () => filename, + getLineNumber: () => undefined, + getColumnNumber: () => undefined, + getFunctionName: () => undefined, + getMethodName: () => undefined, + getTypeName: () => undefined, + toString: () => filename + }); +} + +function injcectVirtualStackFrame(error, filename) { + if (!SUPPORTED) return; + let frames = virtualFrames.get(error); + if (!frames) virtualFrames.set(error, frames = []); + frames.push(CallSite(filename)); + return error; +} + +function expectedError(error) { + if (!SUPPORTED) return; + expectedErrors.add(error); + return error; +} + +function beginHiddenCallStack(fn) { + if (!SUPPORTED) return fn; + return Object.defineProperty(function (...args) { + setupPrepareStackTrace(); + return fn(...args); + }, "name", { + value: STOP_HIDNG + }); +} + +function endHiddenCallStack(fn) { + if (!SUPPORTED) return fn; + return Object.defineProperty(function (...args) { + return fn(...args); + }, "name", { + value: START_HIDNG + }); +} + +function setupPrepareStackTrace() { + setupPrepareStackTrace = () => {}; + + const { + prepareStackTrace = defaultPrepareStackTrace + } = Error; + const MIN_STACK_TRACE_LIMIT = 50; + Error.stackTraceLimit && (Error.stackTraceLimit = Math.max(Error.stackTraceLimit, MIN_STACK_TRACE_LIMIT)); + + Error.prepareStackTrace = function stackTraceRewriter(err, trace) { + let newTrace = []; + const isExpected = expectedErrors.has(err); + let status = isExpected ? "hiding" : "unknown"; + + for (let i = 0; i < trace.length; i++) { + const name = trace[i].getFunctionName(); + + if (name === START_HIDNG) { + status = "hiding"; + } else if (name === STOP_HIDNG) { + if (status === "hiding") { + status = "showing"; + + if (virtualFrames.has(err)) { + newTrace.unshift(...virtualFrames.get(err)); + } + } else if (status === "unknown") { + newTrace = trace; + break; + } + } else if (status !== "hiding") { + newTrace.push(trace[i]); + } + } + + return prepareStackTrace(err, newTrace); + }; +} + +function defaultPrepareStackTrace(err, trace) { + if (trace.length === 0) return ErrorToString(err); + return `${ErrorToString(err)}\n at ${trace.join("\n at ")}`; +} + +0 && 0; + +//# sourceMappingURL=rewrite-stack-trace.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/async.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/async.js index 7deb1863a12..724b0fdb979 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/async.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/async.js @@ -19,7 +19,9 @@ function _gensync() { return data; } -const id = x => x; +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } const runGenerator = _gensync()(function* (item) { return yield* item; @@ -49,7 +51,15 @@ function maybeAsync(fn, message) { const withKind = _gensync()({ sync: cb => cb("sync"), - async: cb => cb("async") + async: function () { + var _ref = _asyncToGenerator(function* (cb) { + return cb("async"); + }); + + return function async(_x) { + return _ref.apply(this, arguments); + }; + }() }); function forwardAsync(action, cb) { @@ -83,12 +93,24 @@ const onFirstPause = _gensync()({ exports.onFirstPause = onFirstPause; const waitFor = _gensync()({ - sync: id, - async: id + sync: x => x, + async: function () { + var _ref2 = _asyncToGenerator(function* (x) { + return x; + }); + + return function async(_x2) { + return _ref2.apply(this, arguments); + }; + }() }); exports.waitFor = waitFor; function isThenable(val) { return !!val && (typeof val === "object" || typeof val === "function") && !!val.then && typeof val.then === "function"; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=async.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/fs.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/fs.js index 056ae34da1b..31f49ae5508 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/fs.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/fs.js @@ -37,4 +37,7 @@ const stat = _gensync()({ errback: _fs().stat }); -exports.stat = stat; \ No newline at end of file +exports.stat = stat; +0 && 0; + +//# sourceMappingURL=fs.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/functional.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/functional.js new file mode 100644 index 00000000000..a80eaf712ac --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/gensync-utils/functional.js @@ -0,0 +1,37 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.once = once; + +var _async = require("./async"); + +function once(fn) { + let result; + let resultP; + return function* () { + if (result) return result; + if (!(yield* (0, _async.isAsync)())) return result = yield* fn(); + if (resultP) return yield* (0, _async.waitFor)(resultP); + let resolve, reject; + resultP = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + + try { + result = yield* fn(); + resultP = null; + resolve(result); + return result; + } catch (error) { + reject(error); + throw error; + } + }; +} + +0 && 0; + +//# sourceMappingURL=functional.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/index.js index f25de7340e4..7cf5758de55 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/index.js @@ -108,13 +108,13 @@ Object.defineProperty(exports, "resolvePreset", { return _files.resolvePreset; } }); -Object.defineProperty(exports, "template", { +Object.defineProperty((0, exports), "template", { enumerable: true, get: function () { return _template().default; } }); -Object.defineProperty(exports, "tokTypes", { +Object.defineProperty((0, exports), "tokTypes", { enumerable: true, get: function () { return _parser().tokTypes; @@ -174,7 +174,7 @@ Object.defineProperty(exports, "transformSync", { return _transform.transformSync; } }); -Object.defineProperty(exports, "traverse", { +Object.defineProperty((0, exports), "traverse", { enumerable: true, get: function () { return _traverse().default; @@ -200,7 +200,7 @@ function _types() { return data; } -Object.defineProperty(exports, "types", { +Object.defineProperty((0, exports), "types", { enumerable: true, get: function () { return _types(); @@ -247,14 +247,14 @@ var _transformAst = require("./transform-ast"); var _parse = require("./parse"); -const version = "7.17.5"; +const version = "7.19.1"; exports.version = version; const DEFAULT_EXTENSIONS = Object.freeze([".js", ".jsx", ".es6", ".es", ".mjs", ".cjs"]); exports.DEFAULT_EXTENSIONS = DEFAULT_EXTENSIONS; class OptionManager { init(opts) { - return (0, _config.loadOptions)(opts); + return (0, _config.loadOptionsSync)(opts); } } @@ -263,4 +263,8 @@ exports.OptionManager = OptionManager; function Plugin(alias) { throw new Error(`The (${alias}) Babel 5 plugin is being run with an unsupported Babel version.`); -} \ No newline at end of file +} + +0 && (exports.types = exports.traverse = exports.tokTypes = exports.template = 0); + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/parse.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/parse.js index 783032ab937..0c39e6af138 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/parse.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/parse.js @@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.parseSync = exports.parseAsync = exports.parse = void 0; +exports.parse = void 0; +exports.parseAsync = parseAsync; +exports.parseSync = parseSync; function _gensync() { const data = require("gensync"); @@ -21,6 +23,8 @@ var _parser = require("./parser"); var _normalizeOpts = require("./transformation/normalize-opts"); +var _rewriteStackTrace = require("./errors/rewrite-stack-trace"); + const parseRunner = _gensync()(function* parse(code, opts) { const config = yield* (0, _config.default)(opts); @@ -37,12 +41,25 @@ const parse = function parse(code, opts, callback) { opts = undefined; } - if (callback === undefined) return parseRunner.sync(code, opts); - parseRunner.errback(code, opts, callback); + if (callback === undefined) { + { + return (0, _rewriteStackTrace.beginHiddenCallStack)(parseRunner.sync)(code, opts); + } + } + + (0, _rewriteStackTrace.beginHiddenCallStack)(parseRunner.errback)(code, opts, callback); }; exports.parse = parse; -const parseSync = parseRunner.sync; -exports.parseSync = parseSync; -const parseAsync = parseRunner.async; -exports.parseAsync = parseAsync; \ No newline at end of file + +function parseSync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(parseRunner.sync)(...args); +} + +function parseAsync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(parseRunner.async)(...args); +} + +0 && 0; + +//# sourceMappingURL=parse.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/parser/index.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/parser/index.js index 254122a14c8..67d1771ffbc 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/parser/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/parser/index.js @@ -92,4 +92,8 @@ function* parser(pluginPasses, { throw err; } -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js index aa6ae3f365c..c076116e41f 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js @@ -8,283 +8,283 @@ const pluginNameMap = { asyncDoExpressions: { syntax: { name: "@babel/plugin-syntax-async-do-expressions", - url: "https://git.io/JYer8" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-do-expressions" } }, classProperties: { syntax: { name: "@babel/plugin-syntax-class-properties", - url: "https://git.io/vb4yQ" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties" }, transform: { name: "@babel/plugin-proposal-class-properties", - url: "https://git.io/vb4SL" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-class-properties" } }, classPrivateProperties: { syntax: { name: "@babel/plugin-syntax-class-properties", - url: "https://git.io/vb4yQ" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties" }, transform: { name: "@babel/plugin-proposal-class-properties", - url: "https://git.io/vb4SL" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-class-properties" } }, classPrivateMethods: { syntax: { name: "@babel/plugin-syntax-class-properties", - url: "https://git.io/vb4yQ" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties" }, transform: { name: "@babel/plugin-proposal-private-methods", - url: "https://git.io/JvpRG" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-private-methods" } }, classStaticBlock: { syntax: { name: "@babel/plugin-syntax-class-static-block", - url: "https://git.io/JTLB6" + url: "https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-syntax-class-static-block" }, transform: { name: "@babel/plugin-proposal-class-static-block", - url: "https://git.io/JTLBP" + url: "https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-class-static-block" } }, decimal: { syntax: { name: "@babel/plugin-syntax-decimal", - url: "https://git.io/JfKOH" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decimal" } }, decorators: { syntax: { name: "@babel/plugin-syntax-decorators", - url: "https://git.io/vb4y9" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decorators" }, transform: { name: "@babel/plugin-proposal-decorators", - url: "https://git.io/vb4ST" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-decorators" } }, doExpressions: { syntax: { name: "@babel/plugin-syntax-do-expressions", - url: "https://git.io/vb4yh" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-do-expressions" }, transform: { name: "@babel/plugin-proposal-do-expressions", - url: "https://git.io/vb4S3" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-do-expressions" } }, dynamicImport: { syntax: { name: "@babel/plugin-syntax-dynamic-import", - url: "https://git.io/vb4Sv" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-dynamic-import" } }, exportDefaultFrom: { syntax: { name: "@babel/plugin-syntax-export-default-from", - url: "https://git.io/vb4SO" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-default-from" }, transform: { name: "@babel/plugin-proposal-export-default-from", - url: "https://git.io/vb4yH" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-export-default-from" } }, exportNamespaceFrom: { syntax: { name: "@babel/plugin-syntax-export-namespace-from", - url: "https://git.io/vb4Sf" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-namespace-from" }, transform: { name: "@babel/plugin-proposal-export-namespace-from", - url: "https://git.io/vb4SG" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-export-namespace-from" } }, flow: { syntax: { name: "@babel/plugin-syntax-flow", - url: "https://git.io/vb4yb" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-flow" }, transform: { name: "@babel/preset-flow", - url: "https://git.io/JfeDn" + url: "https://github.com/babel/babel/tree/main/packages/babel-preset-flow" } }, functionBind: { syntax: { name: "@babel/plugin-syntax-function-bind", - url: "https://git.io/vb4y7" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-function-bind" }, transform: { name: "@babel/plugin-proposal-function-bind", - url: "https://git.io/vb4St" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-bind" } }, functionSent: { syntax: { name: "@babel/plugin-syntax-function-sent", - url: "https://git.io/vb4yN" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-function-sent" }, transform: { name: "@babel/plugin-proposal-function-sent", - url: "https://git.io/vb4SZ" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-sent" } }, importMeta: { syntax: { name: "@babel/plugin-syntax-import-meta", - url: "https://git.io/vbKK6" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-meta" } }, jsx: { syntax: { name: "@babel/plugin-syntax-jsx", - url: "https://git.io/vb4yA" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-jsx" }, transform: { name: "@babel/preset-react", - url: "https://git.io/JfeDR" + url: "https://github.com/babel/babel/tree/main/packages/babel-preset-react" } }, importAssertions: { syntax: { name: "@babel/plugin-syntax-import-assertions", - url: "https://git.io/JUbkv" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-assertions" } }, moduleStringNames: { syntax: { name: "@babel/plugin-syntax-module-string-names", - url: "https://git.io/JTL8G" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-module-string-names" } }, numericSeparator: { syntax: { name: "@babel/plugin-syntax-numeric-separator", - url: "https://git.io/vb4Sq" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-numeric-separator" }, transform: { name: "@babel/plugin-proposal-numeric-separator", - url: "https://git.io/vb4yS" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-numeric-separator" } }, optionalChaining: { syntax: { name: "@babel/plugin-syntax-optional-chaining", - url: "https://git.io/vb4Sc" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-chaining" }, transform: { name: "@babel/plugin-proposal-optional-chaining", - url: "https://git.io/vb4Sk" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-optional-chaining" } }, pipelineOperator: { syntax: { name: "@babel/plugin-syntax-pipeline-operator", - url: "https://git.io/vb4yj" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-pipeline-operator" }, transform: { name: "@babel/plugin-proposal-pipeline-operator", - url: "https://git.io/vb4SU" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-pipeline-operator" } }, privateIn: { syntax: { name: "@babel/plugin-syntax-private-property-in-object", - url: "https://git.io/JfK3q" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-private-property-in-object" }, transform: { name: "@babel/plugin-proposal-private-property-in-object", - url: "https://git.io/JfK3O" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-private-property-in-object" } }, recordAndTuple: { syntax: { name: "@babel/plugin-syntax-record-and-tuple", - url: "https://git.io/JvKp3" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-record-and-tuple" } }, regexpUnicodeSets: { syntax: { name: "@babel/plugin-syntax-unicode-sets-regex", - url: "https://git.io/J9GTd" + url: "https://github.com/babel/babel/blob/main/packages/babel-plugin-syntax-unicode-sets-regex/README.md" }, transform: { name: "@babel/plugin-proposal-unicode-sets-regex", - url: "https://git.io/J9GTQ" + url: "https://github.com/babel/babel/blob/main/packages/babel-plugin-proposalunicode-sets-regex/README.md" } }, throwExpressions: { syntax: { name: "@babel/plugin-syntax-throw-expressions", - url: "https://git.io/vb4SJ" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-throw-expressions" }, transform: { name: "@babel/plugin-proposal-throw-expressions", - url: "https://git.io/vb4yF" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-throw-expressions" } }, typescript: { syntax: { name: "@babel/plugin-syntax-typescript", - url: "https://git.io/vb4SC" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-typescript" }, transform: { name: "@babel/preset-typescript", - url: "https://git.io/JfeDz" + url: "https://github.com/babel/babel/tree/main/packages/babel-preset-typescript" } }, asyncGenerators: { syntax: { name: "@babel/plugin-syntax-async-generators", - url: "https://git.io/vb4SY" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-generators" }, transform: { name: "@babel/plugin-proposal-async-generator-functions", - url: "https://git.io/vb4yp" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-async-generator-functions" } }, logicalAssignment: { syntax: { name: "@babel/plugin-syntax-logical-assignment-operators", - url: "https://git.io/vAlBp" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-logical-assignment-operators" }, transform: { name: "@babel/plugin-proposal-logical-assignment-operators", - url: "https://git.io/vAlRe" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-logical-assignment-operators" } }, nullishCoalescingOperator: { syntax: { name: "@babel/plugin-syntax-nullish-coalescing-operator", - url: "https://git.io/vb4yx" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-nullish-coalescing-operator" }, transform: { name: "@babel/plugin-proposal-nullish-coalescing-operator", - url: "https://git.io/vb4Se" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-nullish-coalescing-opearator" } }, objectRestSpread: { syntax: { name: "@babel/plugin-syntax-object-rest-spread", - url: "https://git.io/vb4y5" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-object-rest-spread" }, transform: { name: "@babel/plugin-proposal-object-rest-spread", - url: "https://git.io/vb4Ss" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-object-rest-spread" } }, optionalCatchBinding: { syntax: { name: "@babel/plugin-syntax-optional-catch-binding", - url: "https://git.io/vb4Sn" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-catch-binding" }, transform: { name: "@babel/plugin-proposal-optional-catch-binding", - url: "https://git.io/vb4SI" + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-optional-catch-binding" } } }; @@ -320,4 +320,8 @@ If you want to leave it as-is, add ${syntaxPluginInfo} to the 'plugins' section } return helpMessage; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=missing-plugin-helper.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/tools/build-external-helpers.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/tools/build-external-helpers.js index 94d85e7e65e..0fa09dcb710 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/tools/build-external-helpers.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/tools/build-external-helpers.js @@ -161,4 +161,8 @@ function _default(allowlist, outputType = "global") { } return (0, _generator().default)(tree).code; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=build-external-helpers.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-ast.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-ast.js index 61fb2224a66..3b8e147dc8c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-ast.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-ast.js @@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.transformFromAstSync = exports.transformFromAstAsync = exports.transformFromAst = void 0; +exports.transformFromAst = void 0; +exports.transformFromAstAsync = transformFromAstAsync; +exports.transformFromAstSync = transformFromAstSync; function _gensync() { const data = require("gensync"); @@ -19,6 +21,8 @@ var _config = require("./config"); var _transformation = require("./transformation"); +var _rewriteStackTrace = require("./errors/rewrite-stack-trace"); + const transformFromAstRunner = _gensync()(function* (ast, code, opts) { const config = yield* (0, _config.default)(opts); if (config === null) return null; @@ -26,21 +30,37 @@ const transformFromAstRunner = _gensync()(function* (ast, code, opts) { return yield* (0, _transformation.run)(config, code, ast); }); -const transformFromAst = function transformFromAst(ast, code, opts, callback) { - if (typeof opts === "function") { - callback = opts; +const transformFromAst = function transformFromAst(ast, code, optsOrCallback, maybeCallback) { + let opts; + let callback; + + if (typeof optsOrCallback === "function") { + callback = optsOrCallback; opts = undefined; + } else { + opts = optsOrCallback; + callback = maybeCallback; } if (callback === undefined) { - return transformFromAstRunner.sync(ast, code, opts); + { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformFromAstRunner.sync)(ast, code, opts); + } } - transformFromAstRunner.errback(ast, code, opts, callback); + (0, _rewriteStackTrace.beginHiddenCallStack)(transformFromAstRunner.errback)(ast, code, opts, callback); }; exports.transformFromAst = transformFromAst; -const transformFromAstSync = transformFromAstRunner.sync; -exports.transformFromAstSync = transformFromAstSync; -const transformFromAstAsync = transformFromAstRunner.async; -exports.transformFromAstAsync = transformFromAstAsync; \ No newline at end of file + +function transformFromAstSync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformFromAstRunner.sync)(...args); +} + +function transformFromAstAsync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformFromAstRunner.async)(...args); +} + +0 && 0; + +//# sourceMappingURL=transform-ast.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-file-browser.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-file-browser.js index 3371a1e7921..97ad3663200 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-file-browser.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-file-browser.js @@ -23,4 +23,8 @@ function transformFileSync() { function transformFileAsync() { return Promise.reject(new Error("Transforming files is not supported in browsers")); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=transform-file-browser.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-file.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-file.js index 18075fffa7c..7edcc054742 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-file.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transform-file.js @@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.transformFileSync = exports.transformFileAsync = exports.transformFile = void 0; +exports.transformFile = transformFile; +exports.transformFileAsync = transformFileAsync; +exports.transformFileSync = transformFileSync; function _gensync() { const data = require("gensync"); @@ -33,9 +35,18 @@ const transformFileRunner = _gensync()(function* (filename, opts) { return yield* (0, _transformation.run)(config, code); }); -const transformFile = transformFileRunner.errback; -exports.transformFile = transformFile; -const transformFileSync = transformFileRunner.sync; -exports.transformFileSync = transformFileSync; -const transformFileAsync = transformFileRunner.async; -exports.transformFileAsync = transformFileAsync; \ No newline at end of file +function transformFile(...args) { + return transformFileRunner.errback(...args); +} + +function transformFileSync(...args) { + return transformFileRunner.sync(...args); +} + +function transformFileAsync(...args) { + return transformFileRunner.async(...args); +} + +0 && 0; + +//# sourceMappingURL=transform-file.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transform.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transform.js index 538c3edfe62..3a5af74c282 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transform.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transform.js @@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.transformSync = exports.transformAsync = exports.transform = void 0; +exports.transform = void 0; +exports.transformAsync = transformAsync; +exports.transformSync = transformSync; function _gensync() { const data = require("gensync"); @@ -19,24 +21,45 @@ var _config = require("./config"); var _transformation = require("./transformation"); +var _rewriteStackTrace = require("./errors/rewrite-stack-trace"); + const transformRunner = _gensync()(function* transform(code, opts) { const config = yield* (0, _config.default)(opts); if (config === null) return null; return yield* (0, _transformation.run)(config, code); }); -const transform = function transform(code, opts, callback) { - if (typeof opts === "function") { - callback = opts; +const transform = function transform(code, optsOrCallback, maybeCallback) { + let opts; + let callback; + + if (typeof optsOrCallback === "function") { + callback = optsOrCallback; opts = undefined; + } else { + opts = optsOrCallback; + callback = maybeCallback; } - if (callback === undefined) return transformRunner.sync(code, opts); - transformRunner.errback(code, opts, callback); + if (callback === undefined) { + { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformRunner.sync)(code, opts); + } + } + + (0, _rewriteStackTrace.beginHiddenCallStack)(transformRunner.errback)(code, opts, callback); }; exports.transform = transform; -const transformSync = transformRunner.sync; -exports.transformSync = transformSync; -const transformAsync = transformRunner.async; -exports.transformAsync = transformAsync; \ No newline at end of file + +function transformSync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformRunner.sync)(...args); +} + +function transformAsync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformRunner.async)(...args); +} + +0 && 0; + +//# sourceMappingURL=transform.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js index a3b0b411aeb..65745ed489c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js @@ -91,4 +91,7 @@ const blockHoistPlugin = { } } -}; \ No newline at end of file +}; +0 && 0; + +//# sourceMappingURL=block-hoist-plugin.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/file.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/file.js index 3728ec56c0c..d4f37239300 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/file.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/file.js @@ -91,12 +91,12 @@ class File { this._map = new Map(); this.opts = void 0; this.declarations = {}; - this.path = null; - this.ast = {}; + this.path = void 0; + this.ast = void 0; this.scope = void 0; this.metadata = {}; this.code = ""; - this.inputMap = null; + this.inputMap = void 0; this.hub = { file: this, getCode: () => this.code, @@ -251,4 +251,7 @@ class File { } -exports.default = File; \ No newline at end of file +exports.default = File; +0 && 0; + +//# sourceMappingURL=file.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/generate.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/generate.js index def05ca4d0d..9b7aae784ee 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/generate.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/generate.js @@ -68,11 +68,15 @@ function generateCode(pluginPasses, file) { let { code: outputCode, - map: outputMap + decodedMap: outputMap = result.map } = result; - if (outputMap && inputMap) { - outputMap = (0, _mergeMap.default)(inputMap.toObject(), outputMap, generatorOpts.sourceFileName); + if (outputMap) { + if (inputMap) { + outputMap = (0, _mergeMap.default)(inputMap.toObject(), outputMap, generatorOpts.sourceFileName); + } else { + outputMap = result.map; + } } if (opts.sourceMaps === "inline" || opts.sourceMaps === "both") { @@ -87,4 +91,8 @@ function generateCode(pluginPasses, file) { outputCode, outputMap }; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=generate.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/merge-map.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/merge-map.js index af1da890223..422ec27842e 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/merge-map.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/file/merge-map.js @@ -40,4 +40,8 @@ function rootless(map) { return Object.assign({}, map, { sourceRoot: null }); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=merge-map.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/index.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/index.js index 1f8422e2dd5..17f8e31090b 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/index.js @@ -36,7 +36,7 @@ function* run(config, code, ast) { } catch (e) { var _opts$filename; - e.message = `${(_opts$filename = opts.filename) != null ? _opts$filename : "unknown"}: ${e.message}`; + e.message = `${(_opts$filename = opts.filename) != null ? _opts$filename : "unknown file"}: ${e.message}`; if (!e.code) { e.code = "BABEL_TRANSFORM_ERROR"; @@ -57,7 +57,7 @@ function* run(config, code, ast) { } catch (e) { var _opts$filename2; - e.message = `${(_opts$filename2 = opts.filename) != null ? _opts$filename2 : "unknown"}: ${e.message}`; + e.message = `${(_opts$filename2 = opts.filename) != null ? _opts$filename2 : "unknown file"}: ${e.message}`; if (!e.code) { e.code = "BABEL_GENERATE_ERROR"; @@ -124,4 +124,8 @@ function* transformFile(file, pluginPasses) { function isThenable(val) { return !!val && (typeof val === "object" || typeof val === "function") && !!val.then && typeof val.then === "function"; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/normalize-file.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/normalize-file.js index dc434ed8c7b..98a8f0ad322 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/normalize-file.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/normalize-file.js @@ -68,7 +68,7 @@ const { const debug = _debug()("babel:transform:file"); -const LARGE_INPUT_SOURCEMAP_THRESHOLD = 1000000; +const LARGE_INPUT_SOURCEMAP_THRESHOLD = 3000000; function* normalizeFile(pluginPasses, options, code, ast) { code = `${code || ""}`; @@ -131,7 +131,7 @@ function* normalizeFile(pluginPasses, options, code, ast) { return new _file.default(options, { code, - ast, + ast: ast, inputMap }); } @@ -164,4 +164,8 @@ function extractComments(regex, ast) { [node.trailingComments, lastComment] = extractCommentsFromList(regex, node.trailingComments, lastComment); }); return lastComment; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=normalize-file.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/normalize-opts.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/normalize-opts.js index 6e2cb000ca8..1f0656e8c0b 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/normalize-opts.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/normalize-opts.js @@ -59,4 +59,8 @@ function normalizeOptions(config) { } return options; -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=normalize-opts.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/plugin-pass.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/plugin-pass.js index 920558a051a..c49cfe61758 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/plugin-pass.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/plugin-pass.js @@ -51,4 +51,7 @@ exports.default = PluginPass; PluginPass.prototype.getModuleName = function getModuleName() { return this.file.getModuleName(); }; -} \ No newline at end of file +} +0 && 0; + +//# sourceMappingURL=plugin-pass.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/util/clone-deep-browser.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/util/clone-deep-browser.js deleted file mode 100644 index a42de824d89..00000000000 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/util/clone-deep-browser.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = _default; -const serialized = "$$ babel internal serialized type" + Math.random(); - -function serialize(key, value) { - if (typeof value !== "bigint") return value; - return { - [serialized]: "BigInt", - value: value.toString() - }; -} - -function revive(key, value) { - if (!value || typeof value !== "object") return value; - if (value[serialized] !== "BigInt") return value; - return BigInt(value.value); -} - -function _default(value) { - return JSON.parse(JSON.stringify(value, serialize), revive); -} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/util/clone-deep.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/util/clone-deep.js index 35fbd093eba..bce456c9eb3 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/util/clone-deep.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/transformation/util/clone-deep.js @@ -5,22 +5,39 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = _default; -function _v() { - const data = require("v8"); +function deepClone(value, cache) { + if (value !== null) { + if (cache.has(value)) return cache.get(value); + let cloned; - _v = function () { - return data; - }; + if (Array.isArray(value)) { + cloned = new Array(value.length); - return data; -} + for (let i = 0; i < value.length; i++) { + cloned[i] = typeof value[i] !== "object" ? value[i] : deepClone(value[i], cache); + } + } else { + cloned = {}; + const keys = Object.keys(value); -var _cloneDeepBrowser = require("./clone-deep-browser"); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + cloned[key] = typeof value[key] !== "object" ? value[key] : deepClone(value[key], cache); + } + } -function _default(value) { - if (_v().deserialize && _v().serialize) { - return _v().deserialize(_v().serialize(value)); + cache.set(value, cloned); + return cloned; } - return (0, _cloneDeepBrowser.default)(value); -} \ No newline at end of file + return value; +} + +function _default(value) { + if (typeof value !== "object") return value; + return deepClone(value, new Map()); +} + +0 && 0; + +//# sourceMappingURL=clone-deep.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/lib/vendor/import-meta-resolve.js b/tools/node_modules/eslint/node_modules/@babel/core/lib/vendor/import-meta-resolve.js index ce8d403f207..637019e0330 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/lib/vendor/import-meta-resolve.js +++ b/tools/node_modules/eslint/node_modules/@babel/core/lib/vendor/import-meta-resolve.js @@ -64,13 +64,9 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } -function createCommonjsModule(fn) { - var module = { - exports: {} - }; - return fn(module, module.exports), module.exports; -} - +var re$3 = { + exports: {} +}; const SEMVER_SPEC_VERSION = '2.0.0'; const MAX_LENGTH$2 = 256; const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || 9007199254740991; @@ -81,12 +77,14 @@ var constants = { MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1, MAX_SAFE_COMPONENT_LENGTH }; -const debug = typeof process === 'object' && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error('SEMVER', ...args) : () => {}; -var debug_1 = debug; -var re_1 = createCommonjsModule(function (module, exports) { +const debug$1 = typeof process === 'object' && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error('SEMVER', ...args) : () => {}; +var debug_1 = debug$1; + +(function (module, exports) { const { MAX_SAFE_COMPONENT_LENGTH } = constants; + const debug = debug_1; exports = module.exports = {}; const re = exports.re = []; const src = exports.src = []; @@ -95,7 +93,7 @@ var re_1 = createCommonjsModule(function (module, exports) { const createToken = (name, value, isGlobal) => { const index = R++; - debug_1(index, value); + debug(name, index, value); t[name] = index; src[index] = value; re[index] = new RegExp(value, isGlobal ? 'g' : undefined); @@ -142,19 +140,20 @@ var re_1 = createCommonjsModule(function (module, exports) { createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + `\\s+-\\s+` + `(${src[t.XRANGEPLAIN]})` + `\\s*$`); createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + `\\s+-\\s+` + `(${src[t.XRANGEPLAINLOOSE]})` + `\\s*$`); createToken('STAR', '(<|>)?=?\\s*\\*'); - createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$'); - createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$'); -}); + createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$'); + createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$'); +})(re$3, re$3.exports); + const opts = ['includePrerelease', 'loose', 'rtl']; -const parseOptions = options => !options ? {} : typeof options !== 'object' ? { +const parseOptions$2 = options => !options ? {} : typeof options !== 'object' ? { loose: true -} : opts.filter(k => options[k]).reduce((options, k) => { - options[k] = true; - return options; +} : opts.filter(k => options[k]).reduce((o, k) => { + o[k] = true; + return o; }, {}); -var parseOptions_1 = parseOptions; +var parseOptions_1 = parseOptions$2; const numeric = /^[0-9]+$/; const compareIdentifiers$1 = (a, b) => { @@ -175,23 +174,25 @@ var identifiers = { compareIdentifiers: compareIdentifiers$1, rcompareIdentifiers }; +const debug = debug_1; const { MAX_LENGTH: MAX_LENGTH$1, MAX_SAFE_INTEGER } = constants; const { - re: re$4, - t: t$4 -} = re_1; + re: re$2, + t: t$2 +} = re$3.exports; +const parseOptions$1 = parseOptions_1; const { compareIdentifiers } = identifiers; -class SemVer { +class SemVer$c { constructor(version, options) { - options = parseOptions_1(options); + options = parseOptions$1(options); - if (version instanceof SemVer) { + if (version instanceof SemVer$c) { if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) { return version; } else { @@ -205,11 +206,11 @@ class SemVer { throw new TypeError(`version is longer than ${MAX_LENGTH$1} characters`); } - debug_1('SemVer', version, options); + debug('SemVer', version, options); this.options = options; this.loose = !!options.loose; this.includePrerelease = !!options.includePrerelease; - const m = version.trim().match(options.loose ? re$4[t$4.LOOSE] : re$4[t$4.FULL]); + const m = version.trim().match(options.loose ? re$2[t$2.LOOSE] : re$2[t$2.FULL]); if (!m) { throw new TypeError(`Invalid Version: ${version}`); @@ -267,14 +268,14 @@ class SemVer { } compare(other) { - debug_1('SemVer.compare', this.version, this.options, other); + debug('SemVer.compare', this.version, this.options, other); - if (!(other instanceof SemVer)) { + if (!(other instanceof SemVer$c)) { if (typeof other === 'string' && other === this.version) { return 0; } - other = new SemVer(other, this.options); + other = new SemVer$c(other, this.options); } if (other.version === this.version) { @@ -285,16 +286,16 @@ class SemVer { } compareMain(other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); + if (!(other instanceof SemVer$c)) { + other = new SemVer$c(other, this.options); } return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch); } comparePre(other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); + if (!(other instanceof SemVer$c)) { + other = new SemVer$c(other, this.options); } if (this.prerelease.length && !other.prerelease.length) { @@ -310,7 +311,7 @@ class SemVer { do { const a = this.prerelease[i]; const b = other.prerelease[i]; - debug_1('prerelease compare', i, a, b); + debug('prerelease compare', i, a, b); if (a === undefined && b === undefined) { return 0; @@ -327,8 +328,8 @@ class SemVer { } compareBuild(other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); + if (!(other instanceof SemVer$c)) { + other = new SemVer$c(other, this.options); } let i = 0; @@ -336,7 +337,7 @@ class SemVer { do { const a = this.build[i]; const b = other.build[i]; - debug_1('prerelease compare', i, a, b); + debug('prerelease compare', i, a, b); if (a === undefined && b === undefined) { return 0; @@ -429,7 +430,7 @@ class SemVer { } if (identifier) { - if (this.prerelease[0] === identifier) { + if (compareIdentifiers(this.prerelease[0], identifier) === 0) { if (isNaN(this.prerelease[1])) { this.prerelease = [identifier, 0]; } @@ -451,19 +452,21 @@ class SemVer { } -var semver$1 = SemVer; +var semver$2 = SemVer$c; const { MAX_LENGTH } = constants; const { - re: re$3, - t: t$3 -} = re_1; + re: re$1, + t: t$1 +} = re$3.exports; +const SemVer$b = semver$2; +const parseOptions = parseOptions_1; -const parse = (version, options) => { - options = parseOptions_1(options); +const parse$5 = (version, options) => { + options = parseOptions(options); - if (version instanceof semver$1) { + if (version instanceof SemVer$b) { return version; } @@ -475,34 +478,37 @@ const parse = (version, options) => { return null; } - const r = options.loose ? re$3[t$3.LOOSE] : re$3[t$3.FULL]; + const r = options.loose ? re$1[t$1.LOOSE] : re$1[t$1.FULL]; if (!r.test(version)) { return null; } try { - return new semver$1(version, options); + return new SemVer$b(version, options); } catch (er) { return null; } }; -var parse_1 = parse; +var parse_1 = parse$5; +const parse$4 = parse_1; const valid$1 = (version, options) => { - const v = parse_1(version, options); + const v = parse$4(version, options); return v ? v.version : null; }; var valid_1 = valid$1; +const parse$3 = parse_1; const clean = (version, options) => { - const s = parse_1(version.trim().replace(/^[=v]+/, ''), options); + const s = parse$3(version.trim().replace(/^[=v]+/, ''), options); return s ? s.version : null; }; var clean_1 = clean; +const SemVer$a = semver$2; const inc = (version, release, options, identifier) => { if (typeof options === 'string') { @@ -511,28 +517,32 @@ const inc = (version, release, options, identifier) => { } try { - return new semver$1(version, options).inc(release, identifier).version; + return new SemVer$a(version instanceof SemVer$a ? version.version : version, options).inc(release, identifier).version; } catch (er) { return null; } }; var inc_1 = inc; +const SemVer$9 = semver$2; -const compare = (a, b, loose) => new semver$1(a, loose).compare(new semver$1(b, loose)); +const compare$a = (a, b, loose) => new SemVer$9(a, loose).compare(new SemVer$9(b, loose)); -var compare_1 = compare; +var compare_1 = compare$a; +const compare$9 = compare_1; -const eq = (a, b, loose) => compare_1(a, b, loose) === 0; +const eq$2 = (a, b, loose) => compare$9(a, b, loose) === 0; -var eq_1 = eq; +var eq_1 = eq$2; +const parse$2 = parse_1; +const eq$1 = eq_1; const diff = (version1, version2) => { - if (eq_1(version1, version2)) { + if (eq$1(version1, version2)) { return null; } else { - const v1 = parse_1(version1); - const v2 = parse_1(version2); + const v1 = parse$2(version1); + const v2 = parse$2(version2); const hasPre = v1.prerelease.length || v2.prerelease.length; const prefix = hasPre ? 'pre' : ''; const defaultResult = hasPre ? 'prerelease' : ''; @@ -550,101 +560,133 @@ const diff = (version1, version2) => { }; var diff_1 = diff; +const SemVer$8 = semver$2; -const major = (a, loose) => new semver$1(a, loose).major; +const major = (a, loose) => new SemVer$8(a, loose).major; var major_1 = major; +const SemVer$7 = semver$2; -const minor = (a, loose) => new semver$1(a, loose).minor; +const minor = (a, loose) => new SemVer$7(a, loose).minor; var minor_1 = minor; +const SemVer$6 = semver$2; -const patch = (a, loose) => new semver$1(a, loose).patch; +const patch = (a, loose) => new SemVer$6(a, loose).patch; var patch_1 = patch; +const parse$1 = parse_1; const prerelease = (version, options) => { - const parsed = parse_1(version, options); + const parsed = parse$1(version, options); return parsed && parsed.prerelease.length ? parsed.prerelease : null; }; var prerelease_1 = prerelease; +const compare$8 = compare_1; -const rcompare = (a, b, loose) => compare_1(b, a, loose); +const rcompare = (a, b, loose) => compare$8(b, a, loose); var rcompare_1 = rcompare; +const compare$7 = compare_1; -const compareLoose = (a, b) => compare_1(a, b, true); +const compareLoose = (a, b) => compare$7(a, b, true); var compareLoose_1 = compareLoose; +const SemVer$5 = semver$2; -const compareBuild = (a, b, loose) => { - const versionA = new semver$1(a, loose); - const versionB = new semver$1(b, loose); +const compareBuild$2 = (a, b, loose) => { + const versionA = new SemVer$5(a, loose); + const versionB = new SemVer$5(b, loose); return versionA.compare(versionB) || versionA.compareBuild(versionB); }; -var compareBuild_1 = compareBuild; +var compareBuild_1 = compareBuild$2; +const compareBuild$1 = compareBuild_1; -const sort = (list, loose) => list.sort((a, b) => compareBuild_1(a, b, loose)); +const sort = (list, loose) => list.sort((a, b) => compareBuild$1(a, b, loose)); var sort_1 = sort; +const compareBuild = compareBuild_1; -const rsort = (list, loose) => list.sort((a, b) => compareBuild_1(b, a, loose)); +const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)); var rsort_1 = rsort; +const compare$6 = compare_1; -const gt = (a, b, loose) => compare_1(a, b, loose) > 0; +const gt$3 = (a, b, loose) => compare$6(a, b, loose) > 0; -var gt_1 = gt; +var gt_1 = gt$3; +const compare$5 = compare_1; -const lt = (a, b, loose) => compare_1(a, b, loose) < 0; +const lt$2 = (a, b, loose) => compare$5(a, b, loose) < 0; -var lt_1 = lt; +var lt_1 = lt$2; +const compare$4 = compare_1; -const neq = (a, b, loose) => compare_1(a, b, loose) !== 0; +const neq$1 = (a, b, loose) => compare$4(a, b, loose) !== 0; -var neq_1 = neq; +var neq_1 = neq$1; +const compare$3 = compare_1; -const gte = (a, b, loose) => compare_1(a, b, loose) >= 0; +const gte$2 = (a, b, loose) => compare$3(a, b, loose) >= 0; -var gte_1 = gte; +var gte_1 = gte$2; +const compare$2 = compare_1; -const lte = (a, b, loose) => compare_1(a, b, loose) <= 0; +const lte$2 = (a, b, loose) => compare$2(a, b, loose) <= 0; -var lte_1 = lte; +var lte_1 = lte$2; +const eq = eq_1; +const neq = neq_1; +const gt$2 = gt_1; +const gte$1 = gte_1; +const lt$1 = lt_1; +const lte$1 = lte_1; const cmp = (a, op, b, loose) => { switch (op) { case '===': - if (typeof a === 'object') a = a.version; - if (typeof b === 'object') b = b.version; + if (typeof a === 'object') { + a = a.version; + } + + if (typeof b === 'object') { + b = b.version; + } + return a === b; case '!==': - if (typeof a === 'object') a = a.version; - if (typeof b === 'object') b = b.version; + if (typeof a === 'object') { + a = a.version; + } + + if (typeof b === 'object') { + b = b.version; + } + return a !== b; case '': case '=': case '==': - return eq_1(a, b, loose); + return eq(a, b, loose); case '!=': - return neq_1(a, b, loose); + return neq(a, b, loose); case '>': - return gt_1(a, b, loose); + return gt$2(a, b, loose); case '>=': - return gte_1(a, b, loose); + return gte$1(a, b, loose); case '<': - return lt_1(a, b, loose); + return lt$1(a, b, loose); case '<=': - return lte_1(a, b, loose); + return lte$1(a, b, loose); default: throw new TypeError(`Invalid operator: ${op}`); @@ -652,13 +694,15 @@ const cmp = (a, op, b, loose) => { }; var cmp_1 = cmp; +const SemVer$4 = semver$2; +const parse = parse_1; const { - re: re$2, - t: t$2 -} = re_1; + re, + t +} = re$3.exports; const coerce = (version, options) => { - if (version instanceof semver$1) { + if (version instanceof SemVer$4) { return version; } @@ -674,1345 +718,1432 @@ const coerce = (version, options) => { let match = null; if (!options.rtl) { - match = version.match(re$2[t$2.COERCE]); + match = version.match(re[t.COERCE]); } else { let next; - while ((next = re$2[t$2.COERCERTL].exec(version)) && (!match || match.index + match[0].length !== version.length)) { + while ((next = re[t.COERCERTL].exec(version)) && (!match || match.index + match[0].length !== version.length)) { if (!match || next.index + next[0].length !== match.index + match[0].length) { match = next; } - re$2[t$2.COERCERTL].lastIndex = next.index + next[1].length + next[2].length; + re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length; } - re$2[t$2.COERCERTL].lastIndex = -1; + re[t.COERCERTL].lastIndex = -1; } - if (match === null) return null; - return parse_1(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options); + if (match === null) { + return null; + } + + return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options); }; var coerce_1 = coerce; +var iterator; +var hasRequiredIterator; -var iterator = function (Yallist) { - Yallist.prototype[Symbol.iterator] = function* () { - for (let walker = this.head; walker; walker = walker.next) { - yield walker.value; - } +function requireIterator() { + if (hasRequiredIterator) return iterator; + hasRequiredIterator = 1; + + iterator = function (Yallist) { + Yallist.prototype[Symbol.iterator] = function* () { + for (let walker = this.head; walker; walker = walker.next) { + yield walker.value; + } + }; }; -}; -var yallist = Yallist; -Yallist.Node = Node; -Yallist.create = Yallist; + return iterator; +} -function Yallist(list) { - var self = this; +var yallist; +var hasRequiredYallist; - if (!(self instanceof Yallist)) { - self = new Yallist(); - } +function requireYallist() { + if (hasRequiredYallist) return yallist; + hasRequiredYallist = 1; + yallist = Yallist; + Yallist.Node = Node; + Yallist.create = Yallist; - self.tail = null; - self.head = null; - self.length = 0; + function Yallist(list) { + var self = this; - if (list && typeof list.forEach === 'function') { - list.forEach(function (item) { - self.push(item); - }); - } else if (arguments.length > 0) { - for (var i = 0, l = arguments.length; i < l; i++) { - self.push(arguments[i]); + if (!(self instanceof Yallist)) { + self = new Yallist(); } - } - return self; -} + self.tail = null; + self.head = null; + self.length = 0; + + if (list && typeof list.forEach === 'function') { + list.forEach(function (item) { + self.push(item); + }); + } else if (arguments.length > 0) { + for (var i = 0, l = arguments.length; i < l; i++) { + self.push(arguments[i]); + } + } -Yallist.prototype.removeNode = function (node) { - if (node.list !== this) { - throw new Error('removing node which does not belong to this list'); + return self; } - var next = node.next; - var prev = node.prev; + Yallist.prototype.removeNode = function (node) { + if (node.list !== this) { + throw new Error('removing node which does not belong to this list'); + } - if (next) { - next.prev = prev; - } + var next = node.next; + var prev = node.prev; - if (prev) { - prev.next = next; - } + if (next) { + next.prev = prev; + } - if (node === this.head) { - this.head = next; - } + if (prev) { + prev.next = next; + } - if (node === this.tail) { - this.tail = prev; - } + if (node === this.head) { + this.head = next; + } - node.list.length--; - node.next = null; - node.prev = null; - node.list = null; - return next; -}; + if (node === this.tail) { + this.tail = prev; + } -Yallist.prototype.unshiftNode = function (node) { - if (node === this.head) { - return; - } + node.list.length--; + node.next = null; + node.prev = null; + node.list = null; + return next; + }; - if (node.list) { - node.list.removeNode(node); - } + Yallist.prototype.unshiftNode = function (node) { + if (node === this.head) { + return; + } - var head = this.head; - node.list = this; - node.next = head; + if (node.list) { + node.list.removeNode(node); + } - if (head) { - head.prev = node; - } + var head = this.head; + node.list = this; + node.next = head; - this.head = node; + if (head) { + head.prev = node; + } - if (!this.tail) { - this.tail = node; - } + this.head = node; - this.length++; -}; + if (!this.tail) { + this.tail = node; + } -Yallist.prototype.pushNode = function (node) { - if (node === this.tail) { - return; - } + this.length++; + }; - if (node.list) { - node.list.removeNode(node); - } + Yallist.prototype.pushNode = function (node) { + if (node === this.tail) { + return; + } - var tail = this.tail; - node.list = this; - node.prev = tail; + if (node.list) { + node.list.removeNode(node); + } - if (tail) { - tail.next = node; - } + var tail = this.tail; + node.list = this; + node.prev = tail; - this.tail = node; + if (tail) { + tail.next = node; + } - if (!this.head) { - this.head = node; - } + this.tail = node; - this.length++; -}; + if (!this.head) { + this.head = node; + } -Yallist.prototype.push = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - push(this, arguments[i]); - } + this.length++; + }; - return this.length; -}; + Yallist.prototype.push = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + push(this, arguments[i]); + } -Yallist.prototype.unshift = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - unshift(this, arguments[i]); - } + return this.length; + }; - return this.length; -}; + Yallist.prototype.unshift = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + unshift(this, arguments[i]); + } -Yallist.prototype.pop = function () { - if (!this.tail) { - return undefined; - } + return this.length; + }; - var res = this.tail.value; - this.tail = this.tail.prev; + Yallist.prototype.pop = function () { + if (!this.tail) { + return undefined; + } - if (this.tail) { - this.tail.next = null; - } else { - this.head = null; - } + var res = this.tail.value; + this.tail = this.tail.prev; - this.length--; - return res; -}; + if (this.tail) { + this.tail.next = null; + } else { + this.head = null; + } -Yallist.prototype.shift = function () { - if (!this.head) { - return undefined; - } + this.length--; + return res; + }; - var res = this.head.value; - this.head = this.head.next; + Yallist.prototype.shift = function () { + if (!this.head) { + return undefined; + } - if (this.head) { - this.head.prev = null; - } else { - this.tail = null; - } + var res = this.head.value; + this.head = this.head.next; - this.length--; - return res; -}; + if (this.head) { + this.head.prev = null; + } else { + this.tail = null; + } -Yallist.prototype.forEach = function (fn, thisp) { - thisp = thisp || this; + this.length--; + return res; + }; - for (var walker = this.head, i = 0; walker !== null; i++) { - fn.call(thisp, walker.value, i, this); - walker = walker.next; - } -}; + Yallist.prototype.forEach = function (fn, thisp) { + thisp = thisp || this; -Yallist.prototype.forEachReverse = function (fn, thisp) { - thisp = thisp || this; + for (var walker = this.head, i = 0; walker !== null; i++) { + fn.call(thisp, walker.value, i, this); + walker = walker.next; + } + }; - for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { - fn.call(thisp, walker.value, i, this); - walker = walker.prev; - } -}; + Yallist.prototype.forEachReverse = function (fn, thisp) { + thisp = thisp || this; -Yallist.prototype.get = function (n) { - for (var i = 0, walker = this.head; walker !== null && i < n; i++) { - walker = walker.next; - } + for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { + fn.call(thisp, walker.value, i, this); + walker = walker.prev; + } + }; - if (i === n && walker !== null) { - return walker.value; - } -}; + Yallist.prototype.get = function (n) { + for (var i = 0, walker = this.head; walker !== null && i < n; i++) { + walker = walker.next; + } -Yallist.prototype.getReverse = function (n) { - for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { - walker = walker.prev; - } + if (i === n && walker !== null) { + return walker.value; + } + }; - if (i === n && walker !== null) { - return walker.value; - } -}; + Yallist.prototype.getReverse = function (n) { + for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { + walker = walker.prev; + } -Yallist.prototype.map = function (fn, thisp) { - thisp = thisp || this; - var res = new Yallist(); + if (i === n && walker !== null) { + return walker.value; + } + }; - for (var walker = this.head; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)); - walker = walker.next; - } + Yallist.prototype.map = function (fn, thisp) { + thisp = thisp || this; + var res = new Yallist(); - return res; -}; + for (var walker = this.head; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)); + walker = walker.next; + } -Yallist.prototype.mapReverse = function (fn, thisp) { - thisp = thisp || this; - var res = new Yallist(); + return res; + }; - for (var walker = this.tail; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)); - walker = walker.prev; - } + Yallist.prototype.mapReverse = function (fn, thisp) { + thisp = thisp || this; + var res = new Yallist(); - return res; -}; + for (var walker = this.tail; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)); + walker = walker.prev; + } -Yallist.prototype.reduce = function (fn, initial) { - var acc; - var walker = this.head; + return res; + }; - if (arguments.length > 1) { - acc = initial; - } else if (this.head) { - walker = this.head.next; - acc = this.head.value; - } else { - throw new TypeError('Reduce of empty list with no initial value'); - } + Yallist.prototype.reduce = function (fn, initial) { + var acc; + var walker = this.head; - for (var i = 0; walker !== null; i++) { - acc = fn(acc, walker.value, i); - walker = walker.next; - } + if (arguments.length > 1) { + acc = initial; + } else if (this.head) { + walker = this.head.next; + acc = this.head.value; + } else { + throw new TypeError('Reduce of empty list with no initial value'); + } - return acc; -}; + for (var i = 0; walker !== null; i++) { + acc = fn(acc, walker.value, i); + walker = walker.next; + } -Yallist.prototype.reduceReverse = function (fn, initial) { - var acc; - var walker = this.tail; + return acc; + }; - if (arguments.length > 1) { - acc = initial; - } else if (this.tail) { - walker = this.tail.prev; - acc = this.tail.value; - } else { - throw new TypeError('Reduce of empty list with no initial value'); - } + Yallist.prototype.reduceReverse = function (fn, initial) { + var acc; + var walker = this.tail; - for (var i = this.length - 1; walker !== null; i--) { - acc = fn(acc, walker.value, i); - walker = walker.prev; - } + if (arguments.length > 1) { + acc = initial; + } else if (this.tail) { + walker = this.tail.prev; + acc = this.tail.value; + } else { + throw new TypeError('Reduce of empty list with no initial value'); + } - return acc; -}; + for (var i = this.length - 1; walker !== null; i--) { + acc = fn(acc, walker.value, i); + walker = walker.prev; + } -Yallist.prototype.toArray = function () { - var arr = new Array(this.length); + return acc; + }; - for (var i = 0, walker = this.head; walker !== null; i++) { - arr[i] = walker.value; - walker = walker.next; - } + Yallist.prototype.toArray = function () { + var arr = new Array(this.length); - return arr; -}; + for (var i = 0, walker = this.head; walker !== null; i++) { + arr[i] = walker.value; + walker = walker.next; + } -Yallist.prototype.toArrayReverse = function () { - var arr = new Array(this.length); + return arr; + }; - for (var i = 0, walker = this.tail; walker !== null; i++) { - arr[i] = walker.value; - walker = walker.prev; - } + Yallist.prototype.toArrayReverse = function () { + var arr = new Array(this.length); - return arr; -}; + for (var i = 0, walker = this.tail; walker !== null; i++) { + arr[i] = walker.value; + walker = walker.prev; + } -Yallist.prototype.slice = function (from, to) { - to = to || this.length; + return arr; + }; - if (to < 0) { - to += this.length; - } + Yallist.prototype.slice = function (from, to) { + to = to || this.length; - from = from || 0; + if (to < 0) { + to += this.length; + } - if (from < 0) { - from += this.length; - } + from = from || 0; - var ret = new Yallist(); + if (from < 0) { + from += this.length; + } - if (to < from || to < 0) { - return ret; - } + var ret = new Yallist(); - if (from < 0) { - from = 0; - } + if (to < from || to < 0) { + return ret; + } - if (to > this.length) { - to = this.length; - } + if (from < 0) { + from = 0; + } - for (var i = 0, walker = this.head; walker !== null && i < from; i++) { - walker = walker.next; - } + if (to > this.length) { + to = this.length; + } - for (; walker !== null && i < to; i++, walker = walker.next) { - ret.push(walker.value); - } + for (var i = 0, walker = this.head; walker !== null && i < from; i++) { + walker = walker.next; + } - return ret; -}; + for (; walker !== null && i < to; i++, walker = walker.next) { + ret.push(walker.value); + } -Yallist.prototype.sliceReverse = function (from, to) { - to = to || this.length; + return ret; + }; - if (to < 0) { - to += this.length; - } + Yallist.prototype.sliceReverse = function (from, to) { + to = to || this.length; - from = from || 0; + if (to < 0) { + to += this.length; + } - if (from < 0) { - from += this.length; - } + from = from || 0; - var ret = new Yallist(); + if (from < 0) { + from += this.length; + } - if (to < from || to < 0) { - return ret; - } + var ret = new Yallist(); - if (from < 0) { - from = 0; - } + if (to < from || to < 0) { + return ret; + } - if (to > this.length) { - to = this.length; - } + if (from < 0) { + from = 0; + } - for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { - walker = walker.prev; - } + if (to > this.length) { + to = this.length; + } - for (; walker !== null && i > from; i--, walker = walker.prev) { - ret.push(walker.value); - } + for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { + walker = walker.prev; + } - return ret; -}; + for (; walker !== null && i > from; i--, walker = walker.prev) { + ret.push(walker.value); + } -Yallist.prototype.splice = function (start, deleteCount, ...nodes) { - if (start > this.length) { - start = this.length - 1; - } + return ret; + }; - if (start < 0) { - start = this.length + start; - } + Yallist.prototype.splice = function (start, deleteCount, ...nodes) { + if (start > this.length) { + start = this.length - 1; + } - for (var i = 0, walker = this.head; walker !== null && i < start; i++) { - walker = walker.next; - } + if (start < 0) { + start = this.length + start; + } - var ret = []; + for (var i = 0, walker = this.head; walker !== null && i < start; i++) { + walker = walker.next; + } - for (var i = 0; walker && i < deleteCount; i++) { - ret.push(walker.value); - walker = this.removeNode(walker); - } + var ret = []; - if (walker === null) { - walker = this.tail; - } + for (var i = 0; walker && i < deleteCount; i++) { + ret.push(walker.value); + walker = this.removeNode(walker); + } - if (walker !== this.head && walker !== this.tail) { - walker = walker.prev; - } + if (walker === null) { + walker = this.tail; + } - for (var i = 0; i < nodes.length; i++) { - walker = insert(this, walker, nodes[i]); - } + if (walker !== this.head && walker !== this.tail) { + walker = walker.prev; + } - return ret; -}; + for (var i = 0; i < nodes.length; i++) { + walker = insert(this, walker, nodes[i]); + } + + return ret; + }; -Yallist.prototype.reverse = function () { - var head = this.head; - var tail = this.tail; + Yallist.prototype.reverse = function () { + var head = this.head; + var tail = this.tail; - for (var walker = head; walker !== null; walker = walker.prev) { - var p = walker.prev; - walker.prev = walker.next; - walker.next = p; - } + for (var walker = head; walker !== null; walker = walker.prev) { + var p = walker.prev; + walker.prev = walker.next; + walker.next = p; + } - this.head = tail; - this.tail = head; - return this; -}; + this.head = tail; + this.tail = head; + return this; + }; -function insert(self, node, value) { - var inserted = node === self.head ? new Node(value, null, node, self) : new Node(value, node, node.next, self); + function insert(self, node, value) { + var inserted = node === self.head ? new Node(value, null, node, self) : new Node(value, node, node.next, self); - if (inserted.next === null) { - self.tail = inserted; - } + if (inserted.next === null) { + self.tail = inserted; + } - if (inserted.prev === null) { - self.head = inserted; + if (inserted.prev === null) { + self.head = inserted; + } + + self.length++; + return inserted; } - self.length++; - return inserted; -} + function push(self, item) { + self.tail = new Node(item, self.tail, null, self); -function push(self, item) { - self.tail = new Node(item, self.tail, null, self); + if (!self.head) { + self.head = self.tail; + } - if (!self.head) { - self.head = self.tail; + self.length++; } - self.length++; -} + function unshift(self, item) { + self.head = new Node(item, null, self.head, self); -function unshift(self, item) { - self.head = new Node(item, null, self.head, self); + if (!self.tail) { + self.tail = self.head; + } - if (!self.tail) { - self.tail = self.head; + self.length++; } - self.length++; -} + function Node(value, prev, next, list) { + if (!(this instanceof Node)) { + return new Node(value, prev, next, list); + } -function Node(value, prev, next, list) { - if (!(this instanceof Node)) { - return new Node(value, prev, next, list); - } + this.list = list; + this.value = value; - this.list = list; - this.value = value; + if (prev) { + prev.next = this; + this.prev = prev; + } else { + this.prev = null; + } - if (prev) { - prev.next = this; - this.prev = prev; - } else { - this.prev = null; + if (next) { + next.prev = this; + this.next = next; + } else { + this.next = null; + } } - if (next) { - next.prev = this; - this.next = next; - } else { - this.next = null; - } + try { + requireIterator()(Yallist); + } catch (er) {} + + return yallist; } -try { - iterator(Yallist); -} catch (er) {} - -const MAX = Symbol('max'); -const LENGTH = Symbol('length'); -const LENGTH_CALCULATOR = Symbol('lengthCalculator'); -const ALLOW_STALE = Symbol('allowStale'); -const MAX_AGE = Symbol('maxAge'); -const DISPOSE = Symbol('dispose'); -const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet'); -const LRU_LIST = Symbol('lruList'); -const CACHE = Symbol('cache'); -const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet'); - -const naiveLength = () => 1; - -class LRUCache { - constructor(options) { - if (typeof options === 'number') options = { - max: options - }; - if (!options) options = {}; - if (options.max && (typeof options.max !== 'number' || options.max < 0)) throw new TypeError('max must be a non-negative number'); - this[MAX] = options.max || Infinity; - const lc = options.length || naiveLength; - this[LENGTH_CALCULATOR] = typeof lc !== 'function' ? naiveLength : lc; - this[ALLOW_STALE] = options.stale || false; - if (options.maxAge && typeof options.maxAge !== 'number') throw new TypeError('maxAge must be a number'); - this[MAX_AGE] = options.maxAge || 0; - this[DISPOSE] = options.dispose; - this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false; - this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false; - this.reset(); - } +var lruCache; +var hasRequiredLruCache; + +function requireLruCache() { + if (hasRequiredLruCache) return lruCache; + hasRequiredLruCache = 1; + const Yallist = requireYallist(); + const MAX = Symbol('max'); + const LENGTH = Symbol('length'); + const LENGTH_CALCULATOR = Symbol('lengthCalculator'); + const ALLOW_STALE = Symbol('allowStale'); + const MAX_AGE = Symbol('maxAge'); + const DISPOSE = Symbol('dispose'); + const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet'); + const LRU_LIST = Symbol('lruList'); + const CACHE = Symbol('cache'); + const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet'); + + const naiveLength = () => 1; + + class LRUCache { + constructor(options) { + if (typeof options === 'number') options = { + max: options + }; + if (!options) options = {}; + if (options.max && (typeof options.max !== 'number' || options.max < 0)) throw new TypeError('max must be a non-negative number'); + this[MAX] = options.max || Infinity; + const lc = options.length || naiveLength; + this[LENGTH_CALCULATOR] = typeof lc !== 'function' ? naiveLength : lc; + this[ALLOW_STALE] = options.stale || false; + if (options.maxAge && typeof options.maxAge !== 'number') throw new TypeError('maxAge must be a number'); + this[MAX_AGE] = options.maxAge || 0; + this[DISPOSE] = options.dispose; + this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false; + this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false; + this.reset(); + } + + set max(mL) { + if (typeof mL !== 'number' || mL < 0) throw new TypeError('max must be a non-negative number'); + this[MAX] = mL || Infinity; + trim(this); + } - set max(mL) { - if (typeof mL !== 'number' || mL < 0) throw new TypeError('max must be a non-negative number'); - this[MAX] = mL || Infinity; - trim(this); - } + get max() { + return this[MAX]; + } - get max() { - return this[MAX]; - } + set allowStale(allowStale) { + this[ALLOW_STALE] = !!allowStale; + } - set allowStale(allowStale) { - this[ALLOW_STALE] = !!allowStale; - } + get allowStale() { + return this[ALLOW_STALE]; + } - get allowStale() { - return this[ALLOW_STALE]; - } + set maxAge(mA) { + if (typeof mA !== 'number') throw new TypeError('maxAge must be a non-negative number'); + this[MAX_AGE] = mA; + trim(this); + } - set maxAge(mA) { - if (typeof mA !== 'number') throw new TypeError('maxAge must be a non-negative number'); - this[MAX_AGE] = mA; - trim(this); - } + get maxAge() { + return this[MAX_AGE]; + } - get maxAge() { - return this[MAX_AGE]; - } + set lengthCalculator(lC) { + if (typeof lC !== 'function') lC = naiveLength; - set lengthCalculator(lC) { - if (typeof lC !== 'function') lC = naiveLength; + if (lC !== this[LENGTH_CALCULATOR]) { + this[LENGTH_CALCULATOR] = lC; + this[LENGTH] = 0; + this[LRU_LIST].forEach(hit => { + hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key); + this[LENGTH] += hit.length; + }); + } - if (lC !== this[LENGTH_CALCULATOR]) { - this[LENGTH_CALCULATOR] = lC; - this[LENGTH] = 0; - this[LRU_LIST].forEach(hit => { - hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key); - this[LENGTH] += hit.length; - }); + trim(this); } - trim(this); - } + get lengthCalculator() { + return this[LENGTH_CALCULATOR]; + } - get lengthCalculator() { - return this[LENGTH_CALCULATOR]; - } + get length() { + return this[LENGTH]; + } - get length() { - return this[LENGTH]; - } + get itemCount() { + return this[LRU_LIST].length; + } - get itemCount() { - return this[LRU_LIST].length; - } + rforEach(fn, thisp) { + thisp = thisp || this; - rforEach(fn, thisp) { - thisp = thisp || this; + for (let walker = this[LRU_LIST].tail; walker !== null;) { + const prev = walker.prev; + forEachStep(this, fn, walker, thisp); + walker = prev; + } + } + + forEach(fn, thisp) { + thisp = thisp || this; - for (let walker = this[LRU_LIST].tail; walker !== null;) { - const prev = walker.prev; - forEachStep(this, fn, walker, thisp); - walker = prev; + for (let walker = this[LRU_LIST].head; walker !== null;) { + const next = walker.next; + forEachStep(this, fn, walker, thisp); + walker = next; + } } - } - forEach(fn, thisp) { - thisp = thisp || this; + keys() { + return this[LRU_LIST].toArray().map(k => k.key); + } - for (let walker = this[LRU_LIST].head; walker !== null;) { - const next = walker.next; - forEachStep(this, fn, walker, thisp); - walker = next; + values() { + return this[LRU_LIST].toArray().map(k => k.value); } - } - keys() { - return this[LRU_LIST].toArray().map(k => k.key); - } + reset() { + if (this[DISPOSE] && this[LRU_LIST] && this[LRU_LIST].length) { + this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)); + } - values() { - return this[LRU_LIST].toArray().map(k => k.value); - } + this[CACHE] = new Map(); + this[LRU_LIST] = new Yallist(); + this[LENGTH] = 0; + } - reset() { - if (this[DISPOSE] && this[LRU_LIST] && this[LRU_LIST].length) { - this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)); + dump() { + return this[LRU_LIST].map(hit => isStale(this, hit) ? false : { + k: hit.key, + v: hit.value, + e: hit.now + (hit.maxAge || 0) + }).toArray().filter(h => h); } - this[CACHE] = new Map(); - this[LRU_LIST] = new yallist(); - this[LENGTH] = 0; - } + dumpLru() { + return this[LRU_LIST]; + } - dump() { - return this[LRU_LIST].map(hit => isStale(this, hit) ? false : { - k: hit.key, - v: hit.value, - e: hit.now + (hit.maxAge || 0) - }).toArray().filter(h => h); - } + set(key, value, maxAge) { + maxAge = maxAge || this[MAX_AGE]; + if (maxAge && typeof maxAge !== 'number') throw new TypeError('maxAge must be a number'); + const now = maxAge ? Date.now() : 0; + const len = this[LENGTH_CALCULATOR](value, key); - dumpLru() { - return this[LRU_LIST]; - } + if (this[CACHE].has(key)) { + if (len > this[MAX]) { + del(this, this[CACHE].get(key)); + return false; + } - set(key, value, maxAge) { - maxAge = maxAge || this[MAX_AGE]; - if (maxAge && typeof maxAge !== 'number') throw new TypeError('maxAge must be a number'); - const now = maxAge ? Date.now() : 0; - const len = this[LENGTH_CALCULATOR](value, key); + const node = this[CACHE].get(key); + const item = node.value; - if (this[CACHE].has(key)) { - if (len > this[MAX]) { - del(this, this[CACHE].get(key)); - return false; + if (this[DISPOSE]) { + if (!this[NO_DISPOSE_ON_SET]) this[DISPOSE](key, item.value); + } + + item.now = now; + item.maxAge = maxAge; + item.value = value; + this[LENGTH] += len - item.length; + item.length = len; + this.get(key); + trim(this); + return true; } - const node = this[CACHE].get(key); - const item = node.value; + const hit = new Entry(key, value, len, now, maxAge); - if (this[DISPOSE]) { - if (!this[NO_DISPOSE_ON_SET]) this[DISPOSE](key, item.value); + if (hit.length > this[MAX]) { + if (this[DISPOSE]) this[DISPOSE](key, value); + return false; } - item.now = now; - item.maxAge = maxAge; - item.value = value; - this[LENGTH] += len - item.length; - item.length = len; - this.get(key); + this[LENGTH] += hit.length; + this[LRU_LIST].unshift(hit); + this[CACHE].set(key, this[LRU_LIST].head); trim(this); return true; } - const hit = new Entry(key, value, len, now, maxAge); + has(key) { + if (!this[CACHE].has(key)) return false; + const hit = this[CACHE].get(key).value; + return !isStale(this, hit); + } - if (hit.length > this[MAX]) { - if (this[DISPOSE]) this[DISPOSE](key, value); - return false; + get(key) { + return get(this, key, true); } - this[LENGTH] += hit.length; - this[LRU_LIST].unshift(hit); - this[CACHE].set(key, this[LRU_LIST].head); - trim(this); - return true; - } + peek(key) { + return get(this, key, false); + } - has(key) { - if (!this[CACHE].has(key)) return false; - const hit = this[CACHE].get(key).value; - return !isStale(this, hit); - } + pop() { + const node = this[LRU_LIST].tail; + if (!node) return null; + del(this, node); + return node.value; + } - get(key) { - return get(this, key, true); - } + del(key) { + del(this, this[CACHE].get(key)); + } - peek(key) { - return get(this, key, false); - } + load(arr) { + this.reset(); + const now = Date.now(); - pop() { - const node = this[LRU_LIST].tail; - if (!node) return null; - del(this, node); - return node.value; - } + for (let l = arr.length - 1; l >= 0; l--) { + const hit = arr[l]; + const expiresAt = hit.e || 0; + if (expiresAt === 0) this.set(hit.k, hit.v);else { + const maxAge = expiresAt - now; + + if (maxAge > 0) { + this.set(hit.k, hit.v, maxAge); + } + } + } + } + + prune() { + this[CACHE].forEach((value, key) => get(this, key, false)); + } - del(key) { - del(this, this[CACHE].get(key)); } - load(arr) { - this.reset(); - const now = Date.now(); + const get = (self, key, doUse) => { + const node = self[CACHE].get(key); - for (let l = arr.length - 1; l >= 0; l--) { - const hit = arr[l]; - const expiresAt = hit.e || 0; - if (expiresAt === 0) this.set(hit.k, hit.v);else { - const maxAge = expiresAt - now; + if (node) { + const hit = node.value; - if (maxAge > 0) { - this.set(hit.k, hit.v, maxAge); + if (isStale(self, hit)) { + del(self, node); + if (!self[ALLOW_STALE]) return undefined; + } else { + if (doUse) { + if (self[UPDATE_AGE_ON_GET]) node.value.now = Date.now(); + self[LRU_LIST].unshiftNode(node); } } - } - } - prune() { - this[CACHE].forEach((value, key) => get(this, key, false)); - } + return hit.value; + } + }; -} + const isStale = (self, hit) => { + if (!hit || !hit.maxAge && !self[MAX_AGE]) return false; + const diff = Date.now() - hit.now; + return hit.maxAge ? diff > hit.maxAge : self[MAX_AGE] && diff > self[MAX_AGE]; + }; -const get = (self, key, doUse) => { - const node = self[CACHE].get(key); + const trim = self => { + if (self[LENGTH] > self[MAX]) { + for (let walker = self[LRU_LIST].tail; self[LENGTH] > self[MAX] && walker !== null;) { + const prev = walker.prev; + del(self, walker); + walker = prev; + } + } + }; - if (node) { - const hit = node.value; + const del = (self, node) => { + if (node) { + const hit = node.value; + if (self[DISPOSE]) self[DISPOSE](hit.key, hit.value); + self[LENGTH] -= hit.length; + self[CACHE].delete(hit.key); + self[LRU_LIST].removeNode(node); + } + }; - if (isStale(self, hit)) { - del(self, node); - if (!self[ALLOW_STALE]) return undefined; - } else { - if (doUse) { - if (self[UPDATE_AGE_ON_GET]) node.value.now = Date.now(); - self[LRU_LIST].unshiftNode(node); - } + class Entry { + constructor(key, value, length, now, maxAge) { + this.key = key; + this.value = value; + this.length = length; + this.now = now; + this.maxAge = maxAge || 0; } - return hit.value; } -}; -const isStale = (self, hit) => { - if (!hit || !hit.maxAge && !self[MAX_AGE]) return false; - const diff = Date.now() - hit.now; - return hit.maxAge ? diff > hit.maxAge : self[MAX_AGE] && diff > self[MAX_AGE]; -}; + const forEachStep = (self, fn, node, thisp) => { + let hit = node.value; -const trim = self => { - if (self[LENGTH] > self[MAX]) { - for (let walker = self[LRU_LIST].tail; self[LENGTH] > self[MAX] && walker !== null;) { - const prev = walker.prev; - del(self, walker); - walker = prev; + if (isStale(self, hit)) { + del(self, node); + if (!self[ALLOW_STALE]) hit = undefined; } - } -}; - -const del = (self, node) => { - if (node) { - const hit = node.value; - if (self[DISPOSE]) self[DISPOSE](hit.key, hit.value); - self[LENGTH] -= hit.length; - self[CACHE].delete(hit.key); - self[LRU_LIST].removeNode(node); - } -}; -class Entry { - constructor(key, value, length, now, maxAge) { - this.key = key; - this.value = value; - this.length = length; - this.now = now; - this.maxAge = maxAge || 0; - } + if (hit) fn.call(thisp, hit.value, hit.key, self); + }; + lruCache = LRUCache; + return lruCache; } -const forEachStep = (self, fn, node, thisp) => { - let hit = node.value; +var range; +var hasRequiredRange; - if (isStale(self, hit)) { - del(self, node); - if (!self[ALLOW_STALE]) hit = undefined; - } +function requireRange() { + if (hasRequiredRange) return range; + hasRequiredRange = 1; - if (hit) fn.call(thisp, hit.value, hit.key, self); -}; + class Range { + constructor(range, options) { + options = parseOptions(options); + + if (range instanceof Range) { + if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) { + return range; + } else { + return new Range(range.raw, options); + } + } -var lruCache = LRUCache; + if (range instanceof Comparator) { + this.raw = range.value; + this.set = [[range]]; + this.format(); + return this; + } -class Range { - constructor(range, options) { - options = parseOptions_1(options); + this.options = options; + this.loose = !!options.loose; + this.includePrerelease = !!options.includePrerelease; + this.raw = range; + this.set = range.split('||').map(r => this.parseRange(r.trim())).filter(c => c.length); - if (range instanceof Range) { - if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) { - return range; - } else { - return new Range(range.raw, options); + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${range}`); + } + + if (this.set.length > 1) { + const first = this.set[0]; + this.set = this.set.filter(c => !isNullSet(c[0])); + + if (this.set.length === 0) { + this.set = [first]; + } else if (this.set.length > 1) { + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c]; + break; + } + } + } } - } - if (range instanceof comparator) { - this.raw = range.value; - this.set = [[range]]; this.format(); - return this; } - this.options = options; - this.loose = !!options.loose; - this.includePrerelease = !!options.includePrerelease; - this.raw = range; - this.set = range.split(/\s*\|\|\s*/).map(range => this.parseRange(range.trim())).filter(c => c.length); + format() { + this.range = this.set.map(comps => { + return comps.join(' ').trim(); + }).join('||').trim(); + return this.range; + } - if (!this.set.length) { - throw new TypeError(`Invalid SemVer Range: ${range}`); + toString() { + return this.range; } - if (this.set.length > 1) { - const first = this.set[0]; - this.set = this.set.filter(c => !isNullSet(c[0])); - if (this.set.length === 0) this.set = [first];else if (this.set.length > 1) { - for (const c of this.set) { - if (c.length === 1 && isAny(c[0])) { - this.set = [c]; - break; - } - } + parseRange(range) { + range = range.trim(); + const memoOpts = Object.keys(this.options).join(','); + const memoKey = `parseRange:${memoOpts}:${range}`; + const cached = cache.get(memoKey); + + if (cached) { + return cached; } - } - this.format(); - } + const loose = this.options.loose; + const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]; + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)); + debug('hyphen replace', range); + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace); + debug('comparator trim', range); + range = range.replace(re[t.TILDETRIM], tildeTrimReplace); + range = range.replace(re[t.CARETTRIM], caretTrimReplace); + range = range.split(/\s+/).join(' '); + let rangeList = range.split(' ').map(comp => parseComparator(comp, this.options)).join(' ').split(/\s+/).map(comp => replaceGTE0(comp, this.options)); + + if (loose) { + rangeList = rangeList.filter(comp => { + debug('loose invalid filter', comp, this.options); + return !!comp.match(re[t.COMPARATORLOOSE]); + }); + } - format() { - this.range = this.set.map(comps => { - return comps.join(' ').trim(); - }).join('||').trim(); - return this.range; - } + debug('range list', rangeList); + const rangeMap = new Map(); + const comparators = rangeList.map(comp => new Comparator(comp, this.options)); - toString() { - return this.range; - } - - parseRange(range) { - range = range.trim(); - const memoOpts = Object.keys(this.options).join(','); - const memoKey = `parseRange:${memoOpts}:${range}`; - const cached = cache.get(memoKey); - if (cached) return cached; - const loose = this.options.loose; - const hr = loose ? re$1[t$1.HYPHENRANGELOOSE] : re$1[t$1.HYPHENRANGE]; - range = range.replace(hr, hyphenReplace(this.options.includePrerelease)); - debug_1('hyphen replace', range); - range = range.replace(re$1[t$1.COMPARATORTRIM], comparatorTrimReplace); - debug_1('comparator trim', range, re$1[t$1.COMPARATORTRIM]); - range = range.replace(re$1[t$1.TILDETRIM], tildeTrimReplace); - range = range.replace(re$1[t$1.CARETTRIM], caretTrimReplace); - range = range.split(/\s+/).join(' '); - const compRe = loose ? re$1[t$1.COMPARATORLOOSE] : re$1[t$1.COMPARATOR]; - const rangeList = range.split(' ').map(comp => parseComparator(comp, this.options)).join(' ').split(/\s+/).map(comp => replaceGTE0(comp, this.options)).filter(this.options.loose ? comp => !!comp.match(compRe) : () => true).map(comp => new comparator(comp, this.options)); - rangeList.length; - const rangeMap = new Map(); - - for (const comp of rangeList) { - if (isNullSet(comp)) return [comp]; - rangeMap.set(comp.value, comp); - } - - if (rangeMap.size > 1 && rangeMap.has('')) rangeMap.delete(''); - const result = [...rangeMap.values()]; - cache.set(memoKey, result); - return result; - } + for (const comp of comparators) { + if (isNullSet(comp)) { + return [comp]; + } + + rangeMap.set(comp.value, comp); + } + + if (rangeMap.size > 1 && rangeMap.has('')) { + rangeMap.delete(''); + } - intersects(range, options) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required'); + const result = [...rangeMap.values()]; + cache.set(memoKey, result); + return result; } - return this.set.some(thisComparators => { - return isSatisfiable(thisComparators, options) && range.set.some(rangeComparators => { - return isSatisfiable(rangeComparators, options) && thisComparators.every(thisComparator => { - return rangeComparators.every(rangeComparator => { - return thisComparator.intersects(rangeComparator, options); + intersects(range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required'); + } + + return this.set.some(thisComparators => { + return isSatisfiable(thisComparators, options) && range.set.some(rangeComparators => { + return isSatisfiable(rangeComparators, options) && thisComparators.every(thisComparator => { + return rangeComparators.every(rangeComparator => { + return thisComparator.intersects(rangeComparator, options); + }); }); }); }); - }); - } - - test(version) { - if (!version) { - return false; } - if (typeof version === 'string') { - try { - version = new semver$1(version, this.options); - } catch (er) { + test(version) { + if (!version) { return false; } - } - for (let i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true; + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options); + } catch (er) { + return false; + } + } + + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true; + } } + + return false; } - return false; } -} - -var range = Range; -const cache = new lruCache({ - max: 1000 -}); -const { - re: re$1, - t: t$1, - comparatorTrimReplace, - tildeTrimReplace, - caretTrimReplace -} = re_1; + range = Range; + const LRU = requireLruCache(); + const cache = new LRU({ + max: 1000 + }); + const parseOptions = parseOptions_1; + const Comparator = requireComparator(); + const debug = debug_1; + const SemVer = semver$2; + const { + re, + t, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace + } = re$3.exports; -const isNullSet = c => c.value === '<0.0.0-0'; + const isNullSet = c => c.value === '<0.0.0-0'; -const isAny = c => c.value === ''; + const isAny = c => c.value === ''; -const isSatisfiable = (comparators, options) => { - let result = true; - const remainingComparators = comparators.slice(); - let testComparator = remainingComparators.pop(); + const isSatisfiable = (comparators, options) => { + let result = true; + const remainingComparators = comparators.slice(); + let testComparator = remainingComparators.pop(); - while (result && remainingComparators.length) { - result = remainingComparators.every(otherComparator => { - return testComparator.intersects(otherComparator, options); - }); - testComparator = remainingComparators.pop(); - } + while (result && remainingComparators.length) { + result = remainingComparators.every(otherComparator => { + return testComparator.intersects(otherComparator, options); + }); + testComparator = remainingComparators.pop(); + } - return result; -}; + return result; + }; -const parseComparator = (comp, options) => { - debug_1('comp', comp, options); - comp = replaceCarets(comp, options); - debug_1('caret', comp); - comp = replaceTildes(comp, options); - debug_1('tildes', comp); - comp = replaceXRanges(comp, options); - debug_1('xrange', comp); - comp = replaceStars(comp, options); - debug_1('stars', comp); - return comp; -}; + const parseComparator = (comp, options) => { + debug('comp', comp, options); + comp = replaceCarets(comp, options); + debug('caret', comp); + comp = replaceTildes(comp, options); + debug('tildes', comp); + comp = replaceXRanges(comp, options); + debug('xrange', comp); + comp = replaceStars(comp, options); + debug('stars', comp); + return comp; + }; -const isX = id => !id || id.toLowerCase() === 'x' || id === '*'; - -const replaceTildes = (comp, options) => comp.trim().split(/\s+/).map(comp => { - return replaceTilde(comp, options); -}).join(' '); - -const replaceTilde = (comp, options) => { - const r = options.loose ? re$1[t$1.TILDELOOSE] : re$1[t$1.TILDE]; - return comp.replace(r, (_, M, m, p, pr) => { - debug_1('tilde', comp, _, M, m, p, pr); - let ret; - - if (isX(M)) { - ret = ''; - } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0-0`; - } else if (isX(p)) { - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`; - } else if (pr) { - debug_1('replaceTilde pr', pr); - ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; - } else { - ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; - } + const isX = id => !id || id.toLowerCase() === 'x' || id === '*'; - debug_1('tilde return', ret); - return ret; - }); -}; + const replaceTildes = (comp, options) => comp.trim().split(/\s+/).map(c => { + return replaceTilde(c, options); + }).join(' '); -const replaceCarets = (comp, options) => comp.trim().split(/\s+/).map(comp => { - return replaceCaret(comp, options); -}).join(' '); - -const replaceCaret = (comp, options) => { - debug_1('caret', comp, options); - const r = options.loose ? re$1[t$1.CARETLOOSE] : re$1[t$1.CARET]; - const z = options.includePrerelease ? '-0' : ''; - return comp.replace(r, (_, M, m, p, pr) => { - debug_1('caret', comp, _, M, m, p, pr); - let ret; - - if (isX(M)) { - ret = ''; - } else if (isX(m)) { - ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`; - } else if (isX(p)) { - if (M === '0') { - ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`; + const replaceTilde = (comp, options) => { + const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]; + return comp.replace(r, (_, M, m, p, pr) => { + debug('tilde', comp, _, M, m, p, pr); + let ret; + + if (isX(M)) { + ret = ''; + } else if (isX(m)) { + ret = `>=${M}.0.0 <${+M + 1}.0.0-0`; + } else if (isX(p)) { + ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`; + } else if (pr) { + debug('replaceTilde pr', pr); + ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; } else { - ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`; + ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; } - } else if (pr) { - debug_1('replaceCaret pr', pr); - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`; + debug('tilde return', ret); + return ret; + }); + }; + + const replaceCarets = (comp, options) => comp.trim().split(/\s+/).map(c => { + return replaceCaret(c, options); + }).join(' '); + + const replaceCaret = (comp, options) => { + debug('caret', comp, options); + const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]; + const z = options.includePrerelease ? '-0' : ''; + return comp.replace(r, (_, M, m, p, pr) => { + debug('caret', comp, _, M, m, p, pr); + let ret; + + if (isX(M)) { + ret = ''; + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`; + } else if (isX(p)) { + if (M === '0') { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`; } else { - ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`; } - } else { - ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`; - } - } else { - debug_1('no pr'); + } else if (pr) { + debug('replaceCaret pr', pr); - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`; + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`; + } else { + ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; + } } else { - ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`; + ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`; } } else { - ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`; + debug('no pr'); + + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`; + } else { + ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`; + } + } else { + ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`; + } } - } - debug_1('caret return', ret); - return ret; - }); -}; + debug('caret return', ret); + return ret; + }); + }; -const replaceXRanges = (comp, options) => { - debug_1('replaceXRanges', comp, options); - return comp.split(/\s+/).map(comp => { - return replaceXRange(comp, options); - }).join(' '); -}; + const replaceXRanges = (comp, options) => { + debug('replaceXRanges', comp, options); + return comp.split(/\s+/).map(c => { + return replaceXRange(c, options); + }).join(' '); + }; -const replaceXRange = (comp, options) => { - comp = comp.trim(); - const r = options.loose ? re$1[t$1.XRANGELOOSE] : re$1[t$1.XRANGE]; - return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - debug_1('xRange', comp, ret, gtlt, M, m, p, pr); - const xM = isX(M); - const xm = xM || isX(m); - const xp = xm || isX(p); - const anyX = xp; + const replaceXRange = (comp, options) => { + comp = comp.trim(); + const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]; + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug('xRange', comp, ret, gtlt, M, m, p, pr); + const xM = isX(M); + const xm = xM || isX(m); + const xp = xm || isX(p); + const anyX = xp; + + if (gtlt === '=' && anyX) { + gtlt = ''; + } - if (gtlt === '=' && anyX) { - gtlt = ''; - } + pr = options.includePrerelease ? '-0' : ''; - pr = options.includePrerelease ? '-0' : ''; + if (xM) { + if (gtlt === '>' || gtlt === '<') { + ret = '<0.0.0-0'; + } else { + ret = '*'; + } + } else if (gtlt && anyX) { + if (xm) { + m = 0; + } - if (xM) { - if (gtlt === '>' || gtlt === '<') { - ret = '<0.0.0-0'; - } else { - ret = '*'; - } - } else if (gtlt && anyX) { - if (xm) { - m = 0; - } + p = 0; - p = 0; + if (gtlt === '>') { + gtlt = '>='; - if (gtlt === '>') { - gtlt = '>='; + if (xm) { + M = +M + 1; + m = 0; + p = 0; + } else { + m = +m + 1; + p = 0; + } + } else if (gtlt === '<=') { + gtlt = '<'; - if (xm) { - M = +M + 1; - m = 0; - p = 0; - } else { - m = +m + 1; - p = 0; + if (xm) { + M = +M + 1; + } else { + m = +m + 1; + } } - } else if (gtlt === '<=') { - gtlt = '<'; - if (xm) { - M = +M + 1; - } else { - m = +m + 1; + if (gtlt === '<') { + pr = '-0'; } - } - if (gtlt === '<') pr = '-0'; - ret = `${gtlt + M}.${m}.${p}${pr}`; - } else if (xm) { - ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`; - } else if (xp) { - ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`; - } + ret = `${gtlt + M}.${m}.${p}${pr}`; + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`; + } else if (xp) { + ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`; + } - debug_1('xRange return', ret); - return ret; - }); -}; + debug('xRange return', ret); + return ret; + }); + }; -const replaceStars = (comp, options) => { - debug_1('replaceStars', comp, options); - return comp.trim().replace(re$1[t$1.STAR], ''); -}; + const replaceStars = (comp, options) => { + debug('replaceStars', comp, options); + return comp.trim().replace(re[t.STAR], ''); + }; -const replaceGTE0 = (comp, options) => { - debug_1('replaceGTE0', comp, options); - return comp.trim().replace(re$1[options.includePrerelease ? t$1.GTE0PRE : t$1.GTE0], ''); -}; + const replaceGTE0 = (comp, options) => { + debug('replaceGTE0', comp, options); + return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], ''); + }; -const hyphenReplace = incPr => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr, tb) => { - if (isX(fM)) { - from = ''; - } else if (isX(fm)) { - from = `>=${fM}.0.0${incPr ? '-0' : ''}`; - } else if (isX(fp)) { - from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`; - } else if (fpr) { - from = `>=${from}`; - } else { - from = `>=${from}${incPr ? '-0' : ''}`; - } - - if (isX(tM)) { - to = ''; - } else if (isX(tm)) { - to = `<${+tM + 1}.0.0-0`; - } else if (isX(tp)) { - to = `<${tM}.${+tm + 1}.0-0`; - } else if (tpr) { - to = `<=${tM}.${tm}.${tp}-${tpr}`; - } else if (incPr) { - to = `<${tM}.${tm}.${+tp + 1}-0`; - } else { - to = `<=${to}`; - } + const hyphenReplace = incPr => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr, tb) => { + if (isX(fM)) { + from = ''; + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? '-0' : ''}`; + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`; + } else if (fpr) { + from = `>=${from}`; + } else { + from = `>=${from}${incPr ? '-0' : ''}`; + } + + if (isX(tM)) { + to = ''; + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0`; + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0`; + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}`; + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0`; + } else { + to = `<=${to}`; + } - return `${from} ${to}`.trim(); -}; + return `${from} ${to}`.trim(); + }; -const testSet = (set, version, options) => { - for (let i = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false; + const testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false; + } } - } - if (version.prerelease.length && !options.includePrerelease) { - for (let i = 0; i < set.length; i++) { - debug_1(set[i].semver); + if (version.prerelease.length && !options.includePrerelease) { + for (let i = 0; i < set.length; i++) { + debug(set[i].semver); - if (set[i].semver === comparator.ANY) { - continue; - } + if (set[i].semver === Comparator.ANY) { + continue; + } - if (set[i].semver.prerelease.length > 0) { - const allowed = set[i].semver; + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver; - if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) { - return true; + if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) { + return true; + } } } - } - return false; - } + return false; + } - return true; -}; + return true; + }; -const ANY$2 = Symbol('SemVer ANY'); + return range; +} -class Comparator { - static get ANY() { - return ANY$2; - } +var comparator; +var hasRequiredComparator; - constructor(comp, options) { - options = parseOptions_1(options); +function requireComparator() { + if (hasRequiredComparator) return comparator; + hasRequiredComparator = 1; + const ANY = Symbol('SemVer ANY'); - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp; - } else { - comp = comp.value; - } + class Comparator { + static get ANY() { + return ANY; } - debug_1('comparator', comp, options); - this.options = options; - this.loose = !!options.loose; - this.parse(comp); + constructor(comp, options) { + options = parseOptions(options); - if (this.semver === ANY$2) { - this.value = ''; - } else { - this.value = this.operator + this.semver.version; - } + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp; + } else { + comp = comp.value; + } + } - debug_1('comp', this); - } + debug('comparator', comp, options); + this.options = options; + this.loose = !!options.loose; + this.parse(comp); - parse(comp) { - const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]; - const m = comp.match(r); + if (this.semver === ANY) { + this.value = ''; + } else { + this.value = this.operator + this.semver.version; + } - if (!m) { - throw new TypeError(`Invalid comparator: ${comp}`); + debug('comp', this); } - this.operator = m[1] !== undefined ? m[1] : ''; + parse(comp) { + const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]; + const m = comp.match(r); - if (this.operator === '=') { - this.operator = ''; - } + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`); + } - if (!m[2]) { - this.semver = ANY$2; - } else { - this.semver = new semver$1(m[2], this.options.loose); - } - } + this.operator = m[1] !== undefined ? m[1] : ''; - toString() { - return this.value; - } + if (this.operator === '=') { + this.operator = ''; + } - test(version) { - debug_1('Comparator.test', version, this.options.loose); + if (!m[2]) { + this.semver = ANY; + } else { + this.semver = new SemVer(m[2], this.options.loose); + } + } - if (this.semver === ANY$2 || version === ANY$2) { - return true; + toString() { + return this.value; } - if (typeof version === 'string') { - try { - version = new semver$1(version, this.options); - } catch (er) { - return false; + test(version) { + debug('Comparator.test', version, this.options.loose); + + if (this.semver === ANY || version === ANY) { + return true; } - } - return cmp_1(version, this.operator, this.semver, this.options); - } + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options); + } catch (er) { + return false; + } + } - intersects(comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required'); + return cmp(version, this.operator, this.semver, this.options); } - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - }; - } + intersects(comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required'); + } - if (this.operator === '') { - if (this.value === '') { - return true; + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + }; } - return new range(comp.value, options).test(this.value); - } else if (comp.operator === '') { - if (comp.value === '') { - return true; + if (this.operator === '') { + if (this.value === '') { + return true; + } + + return new Range(comp.value, options).test(this.value); + } else if (comp.operator === '') { + if (comp.value === '') { + return true; + } + + return new Range(this.value, options).test(comp.semver); } - return new range(this.value, options).test(comp.semver); + const sameDirectionIncreasing = (this.operator === '>=' || this.operator === '>') && (comp.operator === '>=' || comp.operator === '>'); + const sameDirectionDecreasing = (this.operator === '<=' || this.operator === '<') && (comp.operator === '<=' || comp.operator === '<'); + const sameSemVer = this.semver.version === comp.semver.version; + const differentDirectionsInclusive = (this.operator === '>=' || this.operator === '<=') && (comp.operator === '>=' || comp.operator === '<='); + const oppositeDirectionsLessThan = cmp(this.semver, '<', comp.semver, options) && (this.operator === '>=' || this.operator === '>') && (comp.operator === '<=' || comp.operator === '<'); + const oppositeDirectionsGreaterThan = cmp(this.semver, '>', comp.semver, options) && (this.operator === '<=' || this.operator === '<') && (comp.operator === '>=' || comp.operator === '>'); + return sameDirectionIncreasing || sameDirectionDecreasing || sameSemVer && differentDirectionsInclusive || oppositeDirectionsLessThan || oppositeDirectionsGreaterThan; } - const sameDirectionIncreasing = (this.operator === '>=' || this.operator === '>') && (comp.operator === '>=' || comp.operator === '>'); - const sameDirectionDecreasing = (this.operator === '<=' || this.operator === '<') && (comp.operator === '<=' || comp.operator === '<'); - const sameSemVer = this.semver.version === comp.semver.version; - const differentDirectionsInclusive = (this.operator === '>=' || this.operator === '<=') && (comp.operator === '>=' || comp.operator === '<='); - const oppositeDirectionsLessThan = cmp_1(this.semver, '<', comp.semver, options) && (this.operator === '>=' || this.operator === '>') && (comp.operator === '<=' || comp.operator === '<'); - const oppositeDirectionsGreaterThan = cmp_1(this.semver, '>', comp.semver, options) && (this.operator === '<=' || this.operator === '<') && (comp.operator === '>=' || comp.operator === '>'); - return sameDirectionIncreasing || sameDirectionDecreasing || sameSemVer && differentDirectionsInclusive || oppositeDirectionsLessThan || oppositeDirectionsGreaterThan; } + comparator = Comparator; + const parseOptions = parseOptions_1; + const { + re, + t + } = re$3.exports; + const cmp = cmp_1; + const debug = debug_1; + const SemVer = semver$2; + const Range = requireRange(); + return comparator; } -var comparator = Comparator; -const { - re, - t -} = re_1; +const Range$8 = requireRange(); -const satisfies = (version, range$1, options) => { +const satisfies$3 = (version, range, options) => { try { - range$1 = new range(range$1, options); + range = new Range$8(range, options); } catch (er) { return false; } - return range$1.test(version); + return range.test(version); }; -var satisfies_1 = satisfies; +var satisfies_1 = satisfies$3; +const Range$7 = requireRange(); -const toComparators = (range$1, options) => new range(range$1, options).set.map(comp => comp.map(c => c.value).join(' ').trim().split(' ')); +const toComparators = (range, options) => new Range$7(range, options).set.map(comp => comp.map(c => c.value).join(' ').trim().split(' ')); var toComparators_1 = toComparators; +const SemVer$3 = semver$2; +const Range$6 = requireRange(); -const maxSatisfying = (versions, range$1, options) => { +const maxSatisfying = (versions, range, options) => { let max = null; let maxSV = null; let rangeObj = null; try { - rangeObj = new range(range$1, options); + rangeObj = new Range$6(range, options); } catch (er) { return null; } @@ -2021,7 +2152,7 @@ const maxSatisfying = (versions, range$1, options) => { if (rangeObj.test(v)) { if (!max || maxSV.compare(v) === -1) { max = v; - maxSV = new semver$1(max, options); + maxSV = new SemVer$3(max, options); } } }); @@ -2029,14 +2160,16 @@ const maxSatisfying = (versions, range$1, options) => { }; var maxSatisfying_1 = maxSatisfying; +const SemVer$2 = semver$2; +const Range$5 = requireRange(); -const minSatisfying = (versions, range$1, options) => { +const minSatisfying = (versions, range, options) => { let min = null; let minSV = null; let rangeObj = null; try { - rangeObj = new range(range$1, options); + rangeObj = new Range$5(range, options); } catch (er) { return null; } @@ -2045,7 +2178,7 @@ const minSatisfying = (versions, range$1, options) => { if (rangeObj.test(v)) { if (!min || minSV.compare(v) === 1) { min = v; - minSV = new semver$1(min, options); + minSV = new SemVer$2(min, options); } } }); @@ -2053,28 +2186,31 @@ const minSatisfying = (versions, range$1, options) => { }; var minSatisfying_1 = minSatisfying; +const SemVer$1 = semver$2; +const Range$4 = requireRange(); +const gt$1 = gt_1; -const minVersion = (range$1, loose) => { - range$1 = new range(range$1, loose); - let minver = new semver$1('0.0.0'); +const minVersion = (range, loose) => { + range = new Range$4(range, loose); + let minver = new SemVer$1('0.0.0'); - if (range$1.test(minver)) { + if (range.test(minver)) { return minver; } - minver = new semver$1('0.0.0-0'); + minver = new SemVer$1('0.0.0-0'); - if (range$1.test(minver)) { + if (range.test(minver)) { return minver; } minver = null; - for (let i = 0; i < range$1.set.length; ++i) { - const comparators = range$1.set[i]; + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i]; let setMin = null; comparators.forEach(comparator => { - const compver = new semver$1(comparator.semver.version); + const compver = new SemVer$1(comparator.semver.version); switch (comparator.operator) { case '>': @@ -2088,7 +2224,7 @@ const minVersion = (range$1, loose) => { case '': case '>=': - if (!setMin || gt_1(compver, setMin)) { + if (!setMin || gt$1(compver, setMin)) { setMin = compver; } @@ -2102,10 +2238,13 @@ const minVersion = (range$1, loose) => { throw new Error(`Unexpected operation: ${comparator.operator}`); } }); - if (setMin && (!minver || gt_1(minver, setMin))) minver = setMin; + + if (setMin && (!minver || gt$1(minver, setMin))) { + minver = setMin; + } } - if (minver && range$1.test(minver)) { + if (minver && range.test(minver)) { return minver; } @@ -2113,38 +2252,47 @@ const minVersion = (range$1, loose) => { }; var minVersion_1 = minVersion; +const Range$3 = requireRange(); -const validRange = (range$1, options) => { +const validRange = (range, options) => { try { - return new range(range$1, options).range || '*'; + return new Range$3(range, options).range || '*'; } catch (er) { return null; } }; var valid = validRange; +const SemVer = semver$2; +const Comparator$1 = requireComparator(); const { ANY: ANY$1 -} = comparator; - -const outside = (version, range$1, hilo, options) => { - version = new semver$1(version, options); - range$1 = new range(range$1, options); +} = Comparator$1; +const Range$2 = requireRange(); +const satisfies$2 = satisfies_1; +const gt = gt_1; +const lt = lt_1; +const lte = lte_1; +const gte = gte_1; + +const outside$2 = (version, range, hilo, options) => { + version = new SemVer(version, options); + range = new Range$2(range, options); let gtfn, ltefn, ltfn, comp, ecomp; switch (hilo) { case '>': - gtfn = gt_1; - ltefn = lte_1; - ltfn = lt_1; + gtfn = gt; + ltefn = lte; + ltfn = lt; comp = '>'; ecomp = '>='; break; case '<': - gtfn = lt_1; - ltefn = gte_1; - ltfn = gt_1; + gtfn = lt; + ltefn = gte; + ltfn = gt; comp = '<'; ecomp = '<='; break; @@ -2153,26 +2301,26 @@ const outside = (version, range$1, hilo, options) => { throw new TypeError('Must provide a hilo val of "<" or ">"'); } - if (satisfies_1(version, range$1, options)) { + if (satisfies$2(version, range, options)) { return false; } - for (let i = 0; i < range$1.set.length; ++i) { - const comparators = range$1.set[i]; + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i]; let high = null; let low = null; - comparators.forEach(comparator$1 => { - if (comparator$1.semver === ANY$1) { - comparator$1 = new comparator('>=0.0.0'); + comparators.forEach(comparator => { + if (comparator.semver === ANY$1) { + comparator = new Comparator$1('>=0.0.0'); } - high = high || comparator$1; - low = low || comparator$1; + high = high || comparator; + low = low || comparator; - if (gtfn(comparator$1.semver, high.semver, options)) { - high = comparator$1; - } else if (ltfn(comparator$1.semver, low.semver, options)) { - low = comparator$1; + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator; + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator; } }); @@ -2190,51 +2338,72 @@ const outside = (version, range$1, hilo, options) => { return true; }; -var outside_1 = outside; +var outside_1 = outside$2; +const outside$1 = outside_1; -const gtr = (version, range, options) => outside_1(version, range, '>', options); +const gtr = (version, range, options) => outside$1(version, range, '>', options); var gtr_1 = gtr; +const outside = outside_1; -const ltr = (version, range, options) => outside_1(version, range, '<', options); +const ltr = (version, range, options) => outside(version, range, '<', options); var ltr_1 = ltr; +const Range$1 = requireRange(); const intersects = (r1, r2, options) => { - r1 = new range(r1, options); - r2 = new range(r2, options); + r1 = new Range$1(r1, options); + r2 = new Range$1(r2, options); return r1.intersects(r2); }; var intersects_1 = intersects; +const satisfies$1 = satisfies_1; +const compare$1 = compare_1; var simplify = (versions, range, options) => { const set = []; - let min = null; + let first = null; let prev = null; - const v = versions.sort((a, b) => compare_1(a, b, options)); + const v = versions.sort((a, b) => compare$1(a, b, options)); for (const version of v) { - const included = satisfies_1(version, range, options); + const included = satisfies$1(version, range, options); if (included) { prev = version; - if (!min) min = version; + + if (!first) { + first = version; + } } else { if (prev) { - set.push([min, prev]); + set.push([first, prev]); } prev = null; - min = null; + first = null; } } - if (min) set.push([min, null]); + if (first) { + set.push([first, null]); + } + const ranges = []; for (const [min, max] of set) { - if (min === max) ranges.push(min);else if (!max && min === v[0]) ranges.push('*');else if (!max) ranges.push(`>=${min}`);else if (min === v[0]) ranges.push(`<=${max}`);else ranges.push(`${min} - ${max}`); + if (min === max) { + ranges.push(min); + } else if (!max && min === v[0]) { + ranges.push('*'); + } else if (!max) { + ranges.push(`>=${min}`); + } else if (min === v[0]) { + ranges.push(`<=${max}`); + } else { + ranges.push(`${min} - ${max}`); + } } const simplified = ranges.join(' || '); @@ -2242,61 +2411,106 @@ var simplify = (versions, range, options) => { return simplified.length < original.length ? simplified : range; }; +const Range = requireRange(); +const Comparator = requireComparator(); const { ANY -} = comparator; +} = Comparator; +const satisfies = satisfies_1; +const compare = compare_1; const subset = (sub, dom, options = {}) => { - if (sub === dom) return true; - sub = new range(sub, options); - dom = new range(dom, options); + if (sub === dom) { + return true; + } + + sub = new Range(sub, options); + dom = new Range(dom, options); let sawNonNull = false; OUTER: for (const simpleSub of sub.set) { for (const simpleDom of dom.set) { const isSub = simpleSubset(simpleSub, simpleDom, options); sawNonNull = sawNonNull || isSub !== null; - if (isSub) continue OUTER; + + if (isSub) { + continue OUTER; + } } - if (sawNonNull) return false; + if (sawNonNull) { + return false; + } } return true; }; const simpleSubset = (sub, dom, options) => { - if (sub === dom) return true; + if (sub === dom) { + return true; + } if (sub.length === 1 && sub[0].semver === ANY) { - if (dom.length === 1 && dom[0].semver === ANY) return true;else if (options.includePrerelease) sub = [new comparator('>=0.0.0-0')];else sub = [new comparator('>=0.0.0')]; + if (dom.length === 1 && dom[0].semver === ANY) { + return true; + } else if (options.includePrerelease) { + sub = [new Comparator('>=0.0.0-0')]; + } else { + sub = [new Comparator('>=0.0.0')]; + } } if (dom.length === 1 && dom[0].semver === ANY) { - if (options.includePrerelease) return true;else dom = [new comparator('>=0.0.0')]; + if (options.includePrerelease) { + return true; + } else { + dom = [new Comparator('>=0.0.0')]; + } } const eqSet = new Set(); let gt, lt; for (const c of sub) { - if (c.operator === '>' || c.operator === '>=') gt = higherGT(gt, c, options);else if (c.operator === '<' || c.operator === '<=') lt = lowerLT(lt, c, options);else eqSet.add(c.semver); + if (c.operator === '>' || c.operator === '>=') { + gt = higherGT(gt, c, options); + } else if (c.operator === '<' || c.operator === '<=') { + lt = lowerLT(lt, c, options); + } else { + eqSet.add(c.semver); + } + } + + if (eqSet.size > 1) { + return null; } - if (eqSet.size > 1) return null; let gtltComp; if (gt && lt) { - gtltComp = compare_1(gt.semver, lt.semver, options); - if (gtltComp > 0) return null;else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) return null; + gtltComp = compare(gt.semver, lt.semver, options); + + if (gtltComp > 0) { + return null; + } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) { + return null; + } } for (const eq of eqSet) { - if (gt && !satisfies_1(eq, String(gt), options)) return null; - if (lt && !satisfies_1(eq, String(lt), options)) return null; + if (gt && !satisfies(eq, String(gt), options)) { + return null; + } + + if (lt && !satisfies(eq, String(lt), options)) { + return null; + } for (const c of dom) { - if (!satisfies_1(eq, String(c), options)) return false; + if (!satisfies(eq, String(c), options)) { + return false; + } } return true; @@ -2324,8 +2538,13 @@ const simpleSubset = (sub, dom, options) => { if (c.operator === '>' || c.operator === '>=') { higher = higherGT(gt, c, options); - if (higher === c && higher !== gt) return false; - } else if (gt.operator === '>=' && !satisfies_1(gt.semver, String(c), options)) return false; + + if (higher === c && higher !== gt) { + return false; + } + } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) { + return false; + } } if (lt) { @@ -2337,38 +2556,61 @@ const simpleSubset = (sub, dom, options) => { if (c.operator === '<' || c.operator === '<=') { lower = lowerLT(lt, c, options); - if (lower === c && lower !== lt) return false; - } else if (lt.operator === '<=' && !satisfies_1(lt.semver, String(c), options)) return false; + + if (lower === c && lower !== lt) { + return false; + } + } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) { + return false; + } + } + + if (!c.operator && (lt || gt) && gtltComp !== 0) { + return false; } + } + + if (gt && hasDomLT && !lt && gtltComp !== 0) { + return false; + } + + if (lt && hasDomGT && !gt && gtltComp !== 0) { + return false; + } - if (!c.operator && (lt || gt) && gtltComp !== 0) return false; + if (needDomGTPre || needDomLTPre) { + return false; } - if (gt && hasDomLT && !lt && gtltComp !== 0) return false; - if (lt && hasDomGT && !gt && gtltComp !== 0) return false; - if (needDomGTPre || needDomLTPre) return false; return true; }; const higherGT = (a, b, options) => { - if (!a) return b; - const comp = compare_1(a.semver, b.semver, options); + if (!a) { + return b; + } + + const comp = compare(a.semver, b.semver, options); return comp > 0 ? a : comp < 0 ? b : b.operator === '>' && a.operator === '>=' ? b : a; }; const lowerLT = (a, b, options) => { - if (!a) return b; - const comp = compare_1(a.semver, b.semver, options); + if (!a) { + return b; + } + + const comp = compare(a.semver, b.semver, options); return comp < 0 ? a : comp > 0 ? b : b.operator === '<' && a.operator === '<=' ? b : a; }; var subset_1 = subset; -var semver = { - re: re_1.re, - src: re_1.src, - tokens: re_1.t, +const internalRe = re$3.exports; +var semver$1 = { + re: internalRe.re, + src: internalRe.src, + tokens: internalRe.t, SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION, - SemVer: semver$1, + SemVer: semver$2, compareIdentifiers: identifiers.compareIdentifiers, rcompareIdentifiers: identifiers.rcompareIdentifiers, parse: parse_1, @@ -2394,8 +2636,8 @@ var semver = { lte: lte_1, cmp: cmp_1, coerce: coerce_1, - Comparator: comparator, - Range: range, + Comparator: requireComparator(), + Range: requireRange(), satisfies: satisfies_1, toComparators: toComparators_1, maxSatisfying: maxSatisfying_1, @@ -2409,6 +2651,7 @@ var semver = { simplifyRange: simplify, subset: subset_1 }; +var semver = semver$1; var builtins = function ({ version = process.version, @@ -3309,4 +3552,8 @@ function _resolve() { } }); return _resolve.apply(this, arguments); -} \ No newline at end of file +} + +0 && 0; + +//# sourceMappingURL=import-meta-resolve.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/core/package.json b/tools/node_modules/eslint/node_modules/@babel/core/package.json index 86e20c3aeaf..ac98e95ea30 100644 --- a/tools/node_modules/eslint/node_modules/@babel/core/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/core/package.json @@ -1,6 +1,6 @@ { "name": "@babel/core", - "version": "7.17.5", + "version": "7.19.1", "description": "Babel compiler core.", "main": "./lib/index.js", "author": "The Babel Team (https://babel.dev/team)", @@ -41,36 +41,40 @@ "./lib/config/files/index.js": "./lib/config/files/index-browser.js", "./lib/config/resolve-targets.js": "./lib/config/resolve-targets-browser.js", "./lib/transform-file.js": "./lib/transform-file-browser.js", - "./lib/transformation/util/clone-deep.js": "./lib/transformation/util/clone-deep-browser.js", "./src/config/files/index.ts": "./src/config/files/index-browser.ts", "./src/config/resolve-targets.ts": "./src/config/resolve-targets-browser.ts", - "./src/transform-file.ts": "./src/transform-file-browser.ts", - "./src/transformation/util/clone-deep.ts": "./src/transformation/util/clone-deep-browser.ts" + "./src/transform-file.ts": "./src/transform-file-browser.ts" }, "dependencies": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.3", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-compilation-targets": "^7.19.1", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.1", "semver": "^6.3.0" }, "devDependencies": { - "@babel/helper-transform-fixture-test-runner": "^7.17.3", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@jridgewell/trace-mapping": "^0.3.4", + "@babel/helper-transform-fixture-test-runner": "^7.18.10", + "@babel/plugin-syntax-flow": "^7.18.6", + "@babel/plugin-transform-flow-strip-types": "^7.19.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/preset-env": "^7.19.1", + "@jridgewell/trace-mapping": "^0.3.8", "@types/convert-source-map": "^1.5.1", "@types/debug": "^4.1.0", + "@types/gensync": "^1.0.0", "@types/resolve": "^1.3.2", - "@types/semver": "^5.4.0" - } + "@types/semver": "^5.4.0", + "rimraf": "^3.0.0" + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/analyze-scope.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/analyze-scope.cjs index 49e3cb9d2d6..2a038450730 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/analyze-scope.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/analyze-scope.cjs @@ -12,15 +12,13 @@ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!priva function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } } -const escope = require("eslint-scope"); - const { - Definition -} = require("eslint-scope/lib/definition"); - -const OriginalPatternVisitor = require("eslint-scope/lib/pattern-visitor"); - -const OriginalReferencer = require("eslint-scope/lib/referencer"); + Definition, + PatternVisitor: OriginalPatternVisitor, + Referencer: OriginalReferencer, + Scope, + ScopeManager +} = require("@nicolo-ribaudo/eslint-scope-5-internals"); const { getKeys: fallback @@ -271,7 +269,7 @@ class Referencer extends OriginalReferencer { } const parentScope = this.scopeManager.__currentScope; - const scope = new escope.Scope(this.scopeManager, "type-parameters", parentScope, node, false); + const scope = new Scope(this.scopeManager, "type-parameters", parentScope, node, false); this.scopeManager.__nestScope(scope); @@ -383,8 +381,10 @@ module.exports = function analyzeScope(ast, parserOptions, client) { fallback }; options.childVisitorKeys = client.getVisitorKeys(); - const scopeManager = new escope.ScopeManager(options); + const scopeManager = new ScopeManager(options); const referencer = new Referencer(options, scopeManager, client); referencer.visit(ast); return scopeManager; -}; \ No newline at end of file +}; + +//# sourceMappingURL=analyze-scope.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/client.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/client.cjs index da6c2b0a185..a6ffce73a84 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/client.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/client.cjs @@ -1,4 +1,4 @@ -var _class, _worker, _signal, _temp, _worker_threads, _worker_threads_cache; +var _class, _worker, _worker_threads, _worker_threads_cache; function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; } @@ -106,20 +106,20 @@ class Client { } -exports.WorkerClient = (_temp = (_worker = new WeakMap(), _signal = new WeakMap(), _class = class WorkerClient extends Client { +exports.WorkerClient = (_worker = new WeakMap(), (_class = class WorkerClient extends Client { constructor() { super((action, payload) => { - _classPrivateFieldGet(this, _signal)[0] = 0; + const signal = new Int32Array(new SharedArrayBuffer(8)); const subChannel = new (_classStaticPrivateFieldSpecGet(WorkerClient, _class, _worker_threads).MessageChannel)(); _classPrivateFieldGet(this, _worker).postMessage({ - signal: _classPrivateFieldGet(this, _signal), + signal, port: subChannel.port1, action, payload }, [subChannel.port1]); - Atomics.wait(_classPrivateFieldGet(this, _signal), 0, 0); + Atomics.wait(signal, 0, 0); const { message @@ -135,21 +135,16 @@ exports.WorkerClient = (_temp = (_worker = new WeakMap(), _signal = new WeakMap( }) }); - _classPrivateFieldInitSpec(this, _signal, { - writable: true, - value: new Int32Array(new SharedArrayBuffer(4)) - }); - _classPrivateFieldGet(this, _worker).unref(); } -}), _worker_threads = { +}, _worker_threads = { get: _get_worker_threads, set: void 0 }, _worker_threads_cache = { writable: true, value: void 0 -}, _temp); +}, _class)); function _get_worker_threads() { var _classStaticPrivateFi2; @@ -158,9 +153,9 @@ function _get_worker_threads() { } { - var _class2, _temp2, _handleMessage; + var _class2, _handleMessage; - exports.LocalClient = (_temp2 = _class2 = class LocalClient extends Client { + exports.LocalClient = (_class2 = class LocalClient extends Client { constructor() { var _classStaticPrivateFi; @@ -173,5 +168,7 @@ function _get_worker_threads() { }, _handleMessage = { writable: true, value: void 0 - }, _temp2); -} \ No newline at end of file + }, _class2); +} + +//# sourceMappingURL=client.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/configuration.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/configuration.cjs index 03a5f884542..e4b76b2ac90 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/configuration.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/configuration.cjs @@ -19,4 +19,6 @@ exports.normalizeESLintConfig = function (options) { sourceType, requireConfigFile }, otherOptions); -}; \ No newline at end of file +}; + +//# sourceMappingURL=configuration.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertAST.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertAST.cjs index 20647938b5b..286a88a66a7 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertAST.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertAST.cjs @@ -154,4 +154,6 @@ function convertProgramNode(ast) { module.exports = function convertAST(ast, visitorKeys) { convertNodes(ast, visitorKeys); convertProgramNode(ast); -}; \ No newline at end of file +}; + +//# sourceMappingURL=convertAST.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertComments.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertComments.cjs index 61c464233fa..559cee9348c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertComments.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertComments.cjs @@ -10,4 +10,6 @@ module.exports = function convertComments(comments) { comment.range = [comment.start, comment.end]; } } -}; \ No newline at end of file +}; + +//# sourceMappingURL=convertComments.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertTokens.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertTokens.cjs index 67a4aef108d..017d5c467c6 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertTokens.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/convertTokens.cjs @@ -178,4 +178,6 @@ module.exports = function convertTokens(tokens, code, tl) { } return result; -}; \ No newline at end of file +}; + +//# sourceMappingURL=convertTokens.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/index.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/index.cjs index 63d23290bb0..3b421b5fd71 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/index.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/convert/index.cjs @@ -18,4 +18,6 @@ exports.error = function convertError(err) { } return err; -}; \ No newline at end of file +}; + +//# sourceMappingURL=index.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/experimental-worker.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/experimental-worker.cjs index 994e647187d..9fcde9d4584 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/experimental-worker.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/experimental-worker.cjs @@ -27,4 +27,6 @@ exports.parseForESLint = function (code, options = {}) { scopeManager, visitorKeys: client.getVisitorKeys() }; -}; \ No newline at end of file +}; + +//# sourceMappingURL=experimental-worker.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/index.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/index.cjs index e9eb7ba6527..a164660e5da 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/index.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/index.cjs @@ -26,4 +26,6 @@ exports.parseForESLint = function (code, options = {}) { scopeManager, visitorKeys: client.getVisitorKeys() }; -}; \ No newline at end of file +}; + +//# sourceMappingURL=index.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/parse.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/parse.cjs index 2af4be31ab9..5caa2071397 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/parse.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/parse.cjs @@ -27,7 +27,7 @@ module.exports = function parse(code, options, client) { } if (!isRunningMinSupportedCoreVersion) { - throw new Error(`@babel/eslint-parser@${"7.17.0"} does not support @babel/core@${client.getVersion()}. Please upgrade to @babel/core@${minSupportedCoreVersion}.`); + throw new Error(`@babel/eslint-parser@${"7.19.1"} does not support @babel/core@${client.getVersion()}. Please upgrade to @babel/core@${minSupportedCoreVersion}.`); } const { @@ -41,4 +41,6 @@ module.exports = function parse(code, options, client) { } catch (err) { throw convert.error(err); } -}; \ No newline at end of file +}; + +//# sourceMappingURL=parse.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/utils/eslint-version.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/utils/eslint-version.cjs index e0e48f97149..5be4b0dd67e 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/utils/eslint-version.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/utils/eslint-version.cjs @@ -1 +1,3 @@ -module.exports = parseInt(require("eslint/package.json").version, 10); \ No newline at end of file +module.exports = parseInt(require("eslint/package.json").version, 10); + +//# sourceMappingURL=eslint-version.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/ast-info.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/ast-info.cjs index 1c613777a06..adb65a9375c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/ast-info.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/ast-info.cjs @@ -30,4 +30,6 @@ exports.getTokLabels = function getTokLabels() { return tokLabels || (tokLabels = (p => p.reduce((o, [k, v]) => Object.assign({}, o, { [k]: v }), {}))(Object.entries(babel.tokTypes).map(([key, tok]) => [key, tok.label]))); -}; \ No newline at end of file +}; + +//# sourceMappingURL=ast-info.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/babel-core.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/babel-core.cjs index 5c71230b182..01d4573363a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/babel-core.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/babel-core.cjs @@ -12,4 +12,6 @@ function initialize(babel) { { initialize(require("@babel/core")); -} \ No newline at end of file +} + +//# sourceMappingURL=babel-core.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/configuration.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/configuration.cjs index 4118434a2d8..5aab1914ead 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/configuration.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/configuration.cjs @@ -80,20 +80,16 @@ function getDefaultParserOptions(options) { }); } -exports.normalizeBabelParseConfig = function () { - var _ref = _asyncToGenerator(function* (options) { - const parseOptions = normalizeParserOptions(options); - const config = yield babel.loadPartialConfigAsync(parseOptions); - return validateResolvedConfig(config, options, parseOptions); - }); - - return function (_x) { - return _ref.apply(this, arguments); - }; -}(); +exports.normalizeBabelParseConfig = _asyncToGenerator(function* (options) { + const parseOptions = normalizeParserOptions(options); + const config = yield babel.loadPartialConfigAsync(parseOptions); + return validateResolvedConfig(config, options, parseOptions); +}); exports.normalizeBabelParseConfigSync = function (options) { const parseOptions = normalizeParserOptions(options); const config = babel.loadPartialConfigSync(parseOptions); return validateResolvedConfig(config, options, parseOptions); -}; \ No newline at end of file +}; + +//# sourceMappingURL=configuration.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/extract-parser-options-plugin.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/extract-parser-options-plugin.cjs index 25f9072d419..1ddd6179bea 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/extract-parser-options-plugin.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/extract-parser-options-plugin.cjs @@ -5,4 +5,6 @@ module.exports = function extractParserOptionsPlugin() { } }; -}; \ No newline at end of file +}; + +//# sourceMappingURL=extract-parser-options-plugin.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/handle-message.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/handle-message.cjs index ff7dfb151eb..c227db8278d 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/handle-message.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/handle-message.cjs @@ -39,4 +39,6 @@ module.exports = function handleMessage(action, payload) { } throw new Error(`Unknown internal parser worker action: ${action}`); -}; \ No newline at end of file +}; + +//# sourceMappingURL=handle-message.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/index.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/index.cjs index 86ae5fee792..ea1c2a794c0 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/index.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/index.cjs @@ -10,41 +10,37 @@ const { parentPort } = require("worker_threads"); -parentPort.addListener("message", function () { - var _ref = _asyncToGenerator(function* ({ - signal, - port, - action, - payload - }) { - let response; - - try { - if (babel.init) yield babel.init; - response = { - result: yield handleMessage(action, payload) - }; - } catch (error) { - response = { - error, - errorData: Object.assign({}, error) - }; - } - - try { - port.postMessage(response); - } catch (_unused) { - port.postMessage({ - error: new Error("Cannot serialize worker response") - }); - } finally { - port.close(); - Atomics.store(signal, 0, 1); - Atomics.notify(signal, 0); - } - }); - - return function (_x) { - return _ref.apply(this, arguments); - }; -}()); \ No newline at end of file +parentPort.addListener("message", _asyncToGenerator(function* ({ + signal, + port, + action, + payload +}) { + let response; + + try { + if (babel.init) yield babel.init; + response = { + result: yield handleMessage(action, payload) + }; + } catch (error) { + response = { + error, + errorData: Object.assign({}, error) + }; + } + + try { + port.postMessage(response); + } catch (_unused) { + port.postMessage({ + error: new Error("Cannot serialize worker response") + }); + } finally { + port.close(); + Atomics.store(signal, 0, 1); + Atomics.notify(signal, 0); + } +})); + +//# sourceMappingURL=index.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/maybeParse.cjs b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/maybeParse.cjs index c8a34bc326d..aa49494d8a4 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/maybeParse.cjs +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/lib/worker/maybeParse.cjs @@ -50,4 +50,6 @@ module.exports = function maybeParse(code, options) { ast: convert.ast(ast, code, getTokLabels(), getVisitorKeys()), parserOptions: null }; -}; \ No newline at end of file +}; + +//# sourceMappingURL=maybeParse.cjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/package.json b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/package.json index 5a921953099..f1615977e14 100644 --- a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/eslint-parser/package.json @@ -1,6 +1,6 @@ { "name": "@babel/eslint-parser", - "version": "7.17.0", + "version": "7.19.1", "description": "ESLint parser that allows for linting of experimental syntax transformed by Babel", "author": "The Babel Team (https://babel.dev/team)", "license": "MIT", @@ -31,14 +31,13 @@ "eslint": "^7.5.0 || ^8.0.0" }, "dependencies": { - "eslint-scope": "^5.1.1", + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", "semver": "^6.3.0" }, "devDependencies": { - "@babel/core": "^7.17.0", + "@babel/core": "^7.19.1", "dedent": "^0.7.0", - "eslint": "^7.27.0", - "eslint-8": "npm:eslint@^8.0.0" + "eslint": "^8.22.0" } } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/buffer.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/buffer.js index 14458139690..5932f628a97 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/buffer.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/buffer.js @@ -4,108 +4,210 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; -const SPACES_RE = /^[ \t]+$/; + +function SourcePos() { + return { + identifierName: undefined, + line: undefined, + column: undefined, + filename: undefined + }; +} class Buffer { constructor(map) { this._map = null; this._buf = ""; + this._str = ""; + this._appendCount = 0; this._last = 0; this._queue = []; + this._queueCursor = 0; this._position = { line: 1, column: 0 }; - this._sourcePosition = { - identifierName: null, - line: null, - column: null, - filename: null + this._sourcePosition = SourcePos(); + this._disallowedPop = { + identifierName: undefined, + line: undefined, + column: undefined, + filename: undefined, + objectReusable: true }; - this._disallowedPop = null; this._map = map; + + this._allocQueue(); } - get() { - this._flush(); + _allocQueue() { + const queue = this._queue; - const map = this._map; - const result = { - code: this._buf.trimRight(), - map: null, - rawMappings: map == null ? void 0 : map.getRawMappings() - }; + for (let i = 0; i < 16; i++) { + queue.push({ + char: 0, + repeat: 1, + line: undefined, + column: undefined, + identifierName: undefined, + filename: "" + }); + } + } - if (map) { - Object.defineProperty(result, "map", { - configurable: true, - enumerable: true, + _pushQueue(char, repeat, line, column, identifierName, filename) { + const cursor = this._queueCursor; - get() { - return this.map = map.get(); - }, + if (cursor === this._queue.length) { + this._allocQueue(); + } - set(value) { - Object.defineProperty(this, "map", { - value, - writable: true - }); - } + const item = this._queue[cursor]; + item.char = char; + item.repeat = repeat; + item.line = line; + item.column = column; + item.identifierName = identifierName; + item.filename = filename; + this._queueCursor++; + } - }); + _popQueue() { + if (this._queueCursor === 0) { + throw new Error("Cannot pop from empty queue"); } + return this._queue[--this._queueCursor]; + } + + get() { + this._flush(); + + const map = this._map; + const result = { + code: (this._buf + this._str).trimRight(), + decodedMap: map == null ? void 0 : map.getDecoded(), + + get map() { + const resultMap = map ? map.get() : null; + result.map = resultMap; + return resultMap; + }, + + set map(value) { + Object.defineProperty(result, "map", { + value, + writable: true + }); + }, + + get rawMappings() { + const mappings = map == null ? void 0 : map.getRawMappings(); + result.rawMappings = mappings; + return mappings; + }, + + set rawMappings(value) { + Object.defineProperty(result, "rawMappings", { + value, + writable: true + }); + } + + }; return result; } - append(str) { + append(str, maybeNewline) { this._flush(); - const { - line, - column, - filename, - identifierName, - force - } = this._sourcePosition; + this._append(str, this._sourcePosition, maybeNewline); + } + + appendChar(char) { + this._flush(); - this._append(str, line, column, identifierName, filename, force); + this._appendChar(char, 1, this._sourcePosition); } - queue(str) { - if (str === "\n") { - while (this._queue.length > 0 && SPACES_RE.test(this._queue[0][0])) { - this._queue.shift(); + queue(char) { + if (char === 10) { + while (this._queueCursor !== 0) { + const char = this._queue[this._queueCursor - 1].char; + + if (char !== 32 && char !== 9) { + break; + } + + this._queueCursor--; } } - const { - line, - column, - filename, - identifierName, - force - } = this._sourcePosition; + const sourcePosition = this._sourcePosition; - this._queue.unshift([str, line, column, identifierName, filename, force]); + this._pushQueue(char, 1, sourcePosition.line, sourcePosition.column, sourcePosition.identifierName, sourcePosition.filename); + } + + queueIndentation(char, repeat) { + this._pushQueue(char, repeat, undefined, undefined, undefined, undefined); } _flush() { - let item; + const queueCursor = this._queueCursor; + const queue = this._queue; - while (item = this._queue.pop()) { - this._append(...item); + for (let i = 0; i < queueCursor; i++) { + const item = queue[i]; + + this._appendChar(item.char, item.repeat, item); } + + this._queueCursor = 0; } - _append(str, line, column, identifierName, filename, force) { - this._buf += str; - this._last = str.charCodeAt(str.length - 1); + _appendChar(char, repeat, sourcePos) { + this._last = char; + this._str += repeat > 1 ? String.fromCharCode(char).repeat(repeat) : String.fromCharCode(char); + + if (char !== 10) { + this._mark(sourcePos.line, sourcePos.column, sourcePos.identifierName, sourcePos.filename); + + this._position.column += repeat; + } else { + this._position.line++; + this._position.column = 0; + } + } + + _append(str, sourcePos, maybeNewline) { + const len = str.length; + this._last = str.charCodeAt(len - 1); + + if (++this._appendCount > 4096) { + +this._str; + this._buf += this._str; + this._str = str; + this._appendCount = 0; + } else { + this._str += str; + } + + if (!maybeNewline && !this._map) { + this._position.column += len; + return; + } + + const { + column, + identifierName, + filename + } = sourcePos; + let line = sourcePos.line; let i = str.indexOf("\n"); let last = 0; if (i !== 0) { - this._mark(line, column, identifierName, filename, force); + this._mark(line, column, identifierName, filename); } while (i !== -1) { @@ -114,7 +216,7 @@ class Buffer { last = i + 1; if (last < str.length) { - this._mark(++line, 0, identifierName, filename, force); + this._mark(++line, 0, identifierName, filename); } i = str.indexOf("\n", last); @@ -123,48 +225,43 @@ class Buffer { this._position.column += str.length - last; } - _mark(line, column, identifierName, filename, force) { + _mark(line, column, identifierName, filename) { var _this$_map; - (_this$_map = this._map) == null ? void 0 : _this$_map.mark(this._position.line, this._position.column, line, column, identifierName, filename, force); + (_this$_map = this._map) == null ? void 0 : _this$_map.mark(this._position, line, column, identifierName, filename); } removeTrailingNewline() { - if (this._queue.length > 0 && this._queue[0][0] === "\n") { - this._queue.shift(); + const queueCursor = this._queueCursor; + + if (queueCursor !== 0 && this._queue[queueCursor - 1].char === 10) { + this._queueCursor--; } } removeLastSemicolon() { - if (this._queue.length > 0 && this._queue[0][0] === ";") { - this._queue.shift(); + const queueCursor = this._queueCursor; + + if (queueCursor !== 0 && this._queue[queueCursor - 1].char === 59) { + this._queueCursor--; } } getLastChar() { - let last; - - if (this._queue.length > 0) { - const str = this._queue[0][0]; - last = str.charCodeAt(0); - } else { - last = this._last; - } - - return last; + const queueCursor = this._queueCursor; + return queueCursor !== 0 ? this._queue[queueCursor - 1].char : this._last; } endsWithCharAndNewline() { const queue = this._queue; + const queueCursor = this._queueCursor; - if (queue.length > 0) { - const last = queue[0][0]; - const lastCp = last.charCodeAt(0); + if (queueCursor !== 0) { + const lastCp = queue[queueCursor - 1].char; if (lastCp !== 10) return; - if (queue.length > 1) { - const secondLast = queue[1][0]; - return secondLast.charCodeAt(0); + if (queueCursor > 1) { + return queue[queueCursor - 2].char; } else { return this._last; } @@ -172,21 +269,22 @@ class Buffer { } hasContent() { - return this._queue.length > 0 || !!this._last; + return this._queueCursor !== 0 || !!this._last; } exactSource(loc, cb) { - this.source("start", loc, true); + if (!this._map) return cb(); + this.source("start", loc); cb(); this.source("end", loc); this._disallowPop("start", loc); } - source(prop, loc, force) { - if (prop && !loc) return; + source(prop, loc) { + if (!loc) return; - this._normalizePosition(prop, loc, this._sourcePosition, force); + this._normalizePosition(prop, loc, this._sourcePosition); } withSource(prop, loc, cb) { @@ -198,63 +296,64 @@ class Buffer { this.source(prop, loc); cb(); - if ((!this._sourcePosition.force || this._sourcePosition.line !== originalLine || this._sourcePosition.column !== originalColumn || this._sourcePosition.filename !== originalFilename) && (!this._disallowedPop || this._disallowedPop.line !== originalLine || this._disallowedPop.column !== originalColumn || this._disallowedPop.filename !== originalFilename)) { + if (this._disallowedPop.objectReusable || this._disallowedPop.line !== originalLine || this._disallowedPop.column !== originalColumn || this._disallowedPop.filename !== originalFilename) { this._sourcePosition.line = originalLine; this._sourcePosition.column = originalColumn; this._sourcePosition.filename = originalFilename; this._sourcePosition.identifierName = originalIdentifierName; - this._sourcePosition.force = false; - this._disallowedPop = null; + this._disallowedPop.objectReusable = true; } } _disallowPop(prop, loc) { - if (prop && !loc) return; - this._disallowedPop = this._normalizePosition(prop, loc); - } + if (!loc) return; + const disallowedPop = this._disallowedPop; - _normalizePosition(prop, loc, targetObj, force) { - const pos = loc ? loc[prop] : null; - - if (targetObj === undefined) { - targetObj = { - identifierName: null, - line: null, - column: null, - filename: null, - force: false - }; - } + this._normalizePosition(prop, loc, disallowedPop); - const origLine = targetObj.line; - const origColumn = targetObj.column; - const origFilename = targetObj.filename; - targetObj.identifierName = prop === "start" && (loc == null ? void 0 : loc.identifierName) || null; - targetObj.line = pos == null ? void 0 : pos.line; - targetObj.column = pos == null ? void 0 : pos.column; - targetObj.filename = loc == null ? void 0 : loc.filename; + disallowedPop.objectReusable = false; + } - if (force || targetObj.line !== origLine || targetObj.column !== origColumn || targetObj.filename !== origFilename) { - targetObj.force = force; - } + _normalizePosition(prop, loc, targetObj) { + const pos = loc[prop]; + targetObj.identifierName = prop === "start" && loc.identifierName || undefined; - return targetObj; + if (pos) { + targetObj.line = pos.line; + targetObj.column = pos.column; + targetObj.filename = loc.filename; + } else { + targetObj.line = null; + targetObj.column = null; + targetObj.filename = null; + } } getCurrentColumn() { - const extra = this._queue.reduce((acc, item) => item[0] + acc, ""); + const queue = this._queue; + let lastIndex = -1; + let len = 0; + + for (let i = 0; i < this._queueCursor; i++) { + const item = queue[i]; + + if (item.char === 10) { + lastIndex = i; + len += item.repeat; + } + } - const lastIndex = extra.lastIndexOf("\n"); - return lastIndex === -1 ? this._position.column + extra.length : extra.length - 1 - lastIndex; + return lastIndex === -1 ? this._position.column + len : len - 1 - lastIndex; } getCurrentLine() { - const extra = this._queue.reduce((acc, item) => item[0] + acc, ""); - let count = 0; + const queue = this._queue; - for (let i = 0; i < extra.length; i++) { - if (extra[i] === "\n") count++; + for (let i = 0; i < this._queueCursor; i++) { + if (queue[i].char === 10) { + count++; + } } return this._position.line + count; @@ -262,4 +361,6 @@ class Buffer { } -exports.default = Buffer; \ No newline at end of file +exports.default = Buffer; + +//# sourceMappingURL=buffer.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/base.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/base.js index be9285cc6ca..7507c4c3c04 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/base.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/base.js @@ -29,7 +29,7 @@ function Program(node) { function BlockStatement(node) { var _node$directives; - this.token("{"); + this.tokenChar(123); this.printInnerComments(node); const hasDirectives = (_node$directives = node.directives) == null ? void 0 : _node$directives.length; @@ -48,7 +48,7 @@ function BlockStatement(node) { this.rightBrace(); } else { this.source("end", node.loc); - this.token("}"); + this.tokenChar(125); } } @@ -63,7 +63,7 @@ const unescapedDoubleQuoteRE = /(?:^|[^\\])(?:\\\\)*"/; function DirectiveLiteral(node) { const raw = this.getPossibleRaw(node); - if (!this.format.minified && raw != null) { + if (!this.format.minified && raw !== undefined) { this.token(raw); return; } @@ -82,7 +82,7 @@ function DirectiveLiteral(node) { } function InterpreterDirective(node) { - this.token(`#!${node.value}\n`); + this.token(`#!${node.value}\n`, true); } function Placeholder(node) { @@ -93,4 +93,6 @@ function Placeholder(node) { if (node.expectedNode === "Statement") { this.semicolon(); } -} \ No newline at end of file +} + +//# sourceMappingURL=base.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/classes.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/classes.js index 141dfdaf1c9..f6773a0cc60 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/classes.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/classes.js @@ -21,8 +21,10 @@ const { } = _t; function ClassDeclaration(node, parent) { - if (!this.format.decoratorsBeforeExport || !isExportDefaultDeclaration(parent) && !isExportNamedDeclaration(parent)) { - this.printJoin(node.decorators, node); + { + if (!this.format.decoratorsBeforeExport || !isExportDefaultDeclaration(parent) && !isExportNamedDeclaration(parent)) { + this.printJoin(node.decorators, node); + } } if (node.declare) { @@ -65,11 +67,11 @@ function ClassDeclaration(node, parent) { } function ClassBody(node) { - this.token("{"); + this.tokenChar(123); this.printInnerComments(node); if (node.body.length === 0) { - this.token("}"); + this.tokenChar(125); } else { this.newline(); this.indent(); @@ -83,12 +85,12 @@ function ClassBody(node) { function ClassProperty(node) { this.printJoin(node.decorators, node); this.source("end", node.key.loc); - this.tsPrintClassMemberModifiers(node, true); + this.tsPrintClassMemberModifiers(node); if (node.computed) { - this.token("["); + this.tokenChar(91); this.print(node.key, node); - this.token("]"); + this.tokenChar(93); } else { this._variance(node); @@ -96,18 +98,18 @@ function ClassProperty(node) { } if (node.optional) { - this.token("?"); + this.tokenChar(63); } if (node.definite) { - this.token("!"); + this.tokenChar(33); } this.print(node.typeAnnotation, node); if (node.value) { this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(node.value, node); } @@ -118,15 +120,15 @@ function ClassProperty(node) { function ClassAccessorProperty(node) { this.printJoin(node.decorators, node); this.source("end", node.key.loc); - this.tsPrintClassMemberModifiers(node, true); + this.tsPrintClassMemberModifiers(node); this.word("accessor"); this.printInnerComments(node); this.space(); if (node.computed) { - this.token("["); + this.tokenChar(91); this.print(node.key, node); - this.token("]"); + this.tokenChar(93); } else { this._variance(node); @@ -134,18 +136,18 @@ function ClassAccessorProperty(node) { } if (node.optional) { - this.token("?"); + this.tokenChar(63); } if (node.definite) { - this.token("!"); + this.tokenChar(33); } this.print(node.typeAnnotation, node); if (node.value) { this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(node.value, node); } @@ -166,7 +168,7 @@ function ClassPrivateProperty(node) { if (node.value) { this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(node.value, node); } @@ -191,7 +193,7 @@ function ClassPrivateMethod(node) { function _classMethodHead(node) { this.printJoin(node.decorators, node); this.source("end", node.key.loc); - this.tsPrintClassMemberModifiers(node, false); + this.tsPrintClassMemberModifiers(node); this._methodHead(node); } @@ -199,10 +201,10 @@ function _classMethodHead(node) { function StaticBlock(node) { this.word("static"); this.space(); - this.token("{"); + this.tokenChar(123); if (node.body.length === 0) { - this.token("}"); + this.tokenChar(125); } else { this.newline(); this.printSequence(node.body, node, { @@ -210,4 +212,6 @@ function StaticBlock(node) { }); this.rightBrace(); } -} \ No newline at end of file +} + +//# sourceMappingURL=classes.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/expressions.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/expressions.js index aa65c5cacaf..79e3e1cd922 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/expressions.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/expressions.js @@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.LogicalExpression = exports.BinaryExpression = exports.AssignmentExpression = AssignmentExpression; exports.AssignmentPattern = AssignmentPattern; -exports.AwaitExpression = void 0; +exports.AwaitExpression = AwaitExpression; exports.BindExpression = BindExpression; exports.CallExpression = CallExpression; exports.ConditionalExpression = ConditionalExpression; @@ -28,7 +28,7 @@ exports.ThisExpression = ThisExpression; exports.UnaryExpression = UnaryExpression; exports.UpdateExpression = UpdateExpression; exports.V8IntrinsicIdentifier = V8IntrinsicIdentifier; -exports.YieldExpression = void 0; +exports.YieldExpression = YieldExpression; var _t = require("@babel/types"); @@ -64,9 +64,9 @@ function DoExpression(node) { } function ParenthesizedExpression(node) { - this.token("("); + this.tokenChar(40); this.print(node.expression, node); - this.token(")"); + this.tokenChar(41); } function UpdateExpression(node) { @@ -74,9 +74,7 @@ function UpdateExpression(node) { this.token(node.operator); this.print(node.argument, node); } else { - this.startTerminatorless(true); - this.print(node.argument, node); - this.endTerminatorless(); + this.printTerminatorless(node.argument, node, true); this.token(node.operator); } } @@ -84,11 +82,11 @@ function UpdateExpression(node) { function ConditionalExpression(node) { this.print(node.test, node); this.space(); - this.token("?"); + this.tokenChar(63); this.space(); this.print(node.consequent, node); this.space(); - this.token(":"); + this.tokenChar(58); this.space(); this.print(node.alternate, node); } @@ -111,9 +109,9 @@ function NewExpression(node, parent) { this.token("?."); } - this.token("("); + this.tokenChar(40); this.printList(node.arguments, node); - this.token(")"); + this.tokenChar(41); } function SequenceExpression(node) { @@ -128,9 +126,41 @@ function Super() { this.word("super"); } +function isDecoratorMemberExpression(node) { + switch (node.type) { + case "Identifier": + return true; + + case "MemberExpression": + return !node.computed && node.property.type === "Identifier" && isDecoratorMemberExpression(node.object); + + default: + return false; + } +} + +function shouldParenthesizeDecoratorExpression(node) { + if (node.type === "ParenthesizedExpression") { + return false; + } + + return !isDecoratorMemberExpression(node.type === "CallExpression" ? node.callee : node); +} + function Decorator(node) { - this.token("@"); - this.print(node.expression, node); + this.tokenChar(64); + const { + expression + } = node; + + if (shouldParenthesizeDecoratorExpression(expression)) { + this.tokenChar(40); + this.print(expression, node); + this.tokenChar(41); + } else { + this.print(expression, node); + } + this.newline(); } @@ -152,12 +182,12 @@ function OptionalMemberExpression(node) { } if (computed) { - this.token("["); + this.tokenChar(91); this.print(node.property, node); - this.token("]"); + this.tokenChar(93); } else { if (!node.optional) { - this.token("."); + this.tokenChar(46); } this.print(node.property, node); @@ -173,45 +203,45 @@ function OptionalCallExpression(node) { this.token("?."); } - this.token("("); + this.tokenChar(40); this.printList(node.arguments, node); - this.token(")"); + this.tokenChar(41); } function CallExpression(node) { this.print(node.callee, node); this.print(node.typeArguments, node); this.print(node.typeParameters, node); - this.token("("); + this.tokenChar(40); this.printList(node.arguments, node); - this.token(")"); + this.tokenChar(41); } function Import() { this.word("import"); } -function buildYieldAwait(keyword) { - return function (node) { - this.word(keyword); +function AwaitExpression(node) { + this.word("await"); - if (node.delegate) { - this.token("*"); - } - - if (node.argument) { - this.space(); - const terminatorState = this.startTerminatorless(); - this.print(node.argument, node); - this.endTerminatorless(terminatorState); - } - }; + if (node.argument) { + this.space(); + this.printTerminatorless(node.argument, node, false); + } } -const YieldExpression = buildYieldAwait("yield"); -exports.YieldExpression = YieldExpression; -const AwaitExpression = buildYieldAwait("await"); -exports.AwaitExpression = AwaitExpression; +function YieldExpression(node) { + this.word("yield"); + + if (node.delegate) { + this.tokenChar(42); + } + + if (node.argument) { + this.space(); + this.printTerminatorless(node.argument, node, false); + } +} function EmptyStatement() { this.semicolon(true); @@ -224,10 +254,10 @@ function ExpressionStatement(node) { function AssignmentPattern(node) { this.print(node.left, node); - if (node.left.optional) this.token("?"); + if (node.left.optional) this.tokenChar(63); this.print(node.left.typeAnnotation, node); this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(node.right, node); } @@ -236,7 +266,7 @@ function AssignmentExpression(node, parent) { const parens = this.inForStatementInitCounter && node.operator === "in" && !n.needsParens(node, parent); if (parens) { - this.token("("); + this.tokenChar(40); } this.print(node.left, node); @@ -252,7 +282,7 @@ function AssignmentExpression(node, parent) { this.print(node.right, node); if (parens) { - this.token(")"); + this.tokenChar(41); } } @@ -276,38 +306,38 @@ function MemberExpression(node) { } if (computed) { - this.token("["); + this.tokenChar(91); this.print(node.property, node); - this.token("]"); + this.tokenChar(93); } else { - this.token("."); + this.tokenChar(46); this.print(node.property, node); } } function MetaProperty(node) { this.print(node.meta, node); - this.token("."); + this.tokenChar(46); this.print(node.property, node); } function PrivateName(node) { - this.token("#"); + this.tokenChar(35); this.print(node.id, node); } function V8IntrinsicIdentifier(node) { - this.token("%"); + this.tokenChar(37); this.word(node.name); } function ModuleExpression(node) { this.word("module"); this.space(); - this.token("{"); + this.tokenChar(123); if (node.body.body.length === 0) { - this.token("}"); + this.tokenChar(125); } else { this.newline(); this.printSequence(node.body.body, node, { @@ -315,4 +345,6 @@ function ModuleExpression(node) { }); this.rightBrace(); } -} \ No newline at end of file +} + +//# sourceMappingURL=expressions.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/flow.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/flow.js index 7c0bc7d3030..ed033a975f7 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/flow.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/flow.js @@ -94,9 +94,9 @@ function AnyTypeAnnotation() { } function ArrayTypeAnnotation(node) { - this.print(node.elementType, node); - this.token("["); - this.token("]"); + this.print(node.elementType, node, true); + this.tokenChar(91); + this.tokenChar(93); } function BooleanTypeAnnotation() { @@ -143,16 +143,16 @@ function DeclareFunction(node, parent) { } function InferredPredicate() { - this.token("%"); + this.tokenChar(37); this.word("checks"); } function DeclaredPredicate(node) { - this.token("%"); + this.tokenChar(37); this.word("checks"); - this.token("("); + this.tokenChar(40); this.print(node.value, node); - this.token(")"); + this.tokenChar(41); } function DeclareInterface(node) { @@ -175,7 +175,7 @@ function DeclareModuleExports(node) { this.word("declare"); this.space(); this.word("module"); - this.token("."); + this.tokenChar(46); this.word("exports"); this.print(node.typeAnnotation, node); } @@ -219,14 +219,14 @@ function DeclareExportDeclaration(node) { this.space(); } - FlowExportDeclaration.apply(this, arguments); + FlowExportDeclaration.call(this, node); } -function DeclareExportAllDeclaration() { +function DeclareExportAllDeclaration(node) { this.word("declare"); this.space(); - _modules.ExportAllDeclaration.apply(this, arguments); + _modules.ExportAllDeclaration.call(this, node); } function EnumDeclaration(node) { @@ -307,7 +307,7 @@ function EnumDefaultedMember(node) { id } = node; this.print(id, node); - this.token(","); + this.tokenChar(44); } function enumInitializedMember(context, node) { @@ -341,7 +341,7 @@ function FlowExportDeclaration(node) { this.print(declar, node); if (!isStatement(declar)) this.semicolon(); } else { - this.token("{"); + this.tokenChar(123); if (node.specifiers.length) { this.space(); @@ -349,7 +349,7 @@ function FlowExportDeclaration(node) { this.space(); } - this.token("}"); + this.tokenChar(125); if (node.source) { this.space(); @@ -363,21 +363,21 @@ function FlowExportDeclaration(node) { } function ExistsTypeAnnotation() { - this.token("*"); + this.tokenChar(42); } function FunctionTypeAnnotation(node, parent) { this.print(node.typeParameters, node); - this.token("("); + this.tokenChar(40); if (node.this) { this.word("this"); - this.token(":"); + this.tokenChar(58); this.space(); this.print(node.this.typeAnnotation, node); if (node.params.length || node.rest) { - this.token(","); + this.tokenChar(44); this.space(); } } @@ -386,7 +386,7 @@ function FunctionTypeAnnotation(node, parent) { if (node.rest) { if (node.params.length) { - this.token(","); + this.tokenChar(44); this.space(); } @@ -394,10 +394,10 @@ function FunctionTypeAnnotation(node, parent) { this.print(node.rest, node); } - this.token(")"); + this.tokenChar(41); if (parent && (parent.type === "ObjectTypeCallProperty" || parent.type === "DeclareFunction" || parent.type === "ObjectTypeProperty" && parent.method)) { - this.token(":"); + this.tokenChar(58); } else { this.space(); this.token("=>"); @@ -409,10 +409,10 @@ function FunctionTypeAnnotation(node, parent) { function FunctionTypeParam(node) { this.print(node.name, node); - if (node.optional) this.token("?"); + if (node.optional) this.tokenChar(63); if (node.name) { - this.token(":"); + this.tokenChar(58); this.space(); } @@ -421,7 +421,7 @@ function FunctionTypeParam(node) { function InterfaceExtends(node) { this.print(node.id, node); - this.print(node.typeParameters, node); + this.print(node.typeParameters, node, true); } function _interfaceish(node) { @@ -458,9 +458,9 @@ function _interfaceish(node) { function _variance(node) { if (node.variance) { if (node.variance.kind === "plus") { - this.token("+"); + this.tokenChar(43); } else if (node.variance.kind === "minus") { - this.token("-"); + this.tokenChar(45); } } } @@ -474,7 +474,7 @@ function InterfaceDeclaration(node) { function andSeparator() { this.space(); - this.token("&"); + this.tokenChar(38); this.space(); } @@ -507,7 +507,7 @@ function EmptyTypeAnnotation() { } function NullableTypeAnnotation(node) { - this.token("?"); + this.tokenChar(63); this.print(node.typeAnnotation, node); } @@ -524,9 +524,9 @@ function ThisTypeAnnotation() { } function TupleTypeAnnotation(node) { - this.token("["); + this.tokenChar(91); this.printList(node.types, node); - this.token("]"); + this.tokenChar(93); } function TypeofTypeAnnotation(node) { @@ -541,23 +541,23 @@ function TypeAlias(node) { this.print(node.id, node); this.print(node.typeParameters, node); this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(node.right, node); this.semicolon(); } function TypeAnnotation(node) { - this.token(":"); + this.tokenChar(58); this.space(); - if (node.optional) this.token("?"); + if (node.optional) this.tokenChar(63); this.print(node.typeAnnotation, node); } function TypeParameterInstantiation(node) { - this.token("<"); + this.tokenChar(60); this.printList(node.params, node, {}); - this.token(">"); + this.tokenChar(62); } function TypeParameter(node) { @@ -571,7 +571,7 @@ function TypeParameter(node) { if (node.default) { this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(node.default, node); } @@ -586,14 +586,14 @@ function OpaqueType(node) { this.print(node.typeParameters, node); if (node.supertype) { - this.token(":"); + this.tokenChar(58); this.space(); this.print(node.supertype, node); } if (node.impltype) { this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(node.impltype, node); } @@ -605,7 +605,7 @@ function ObjectTypeAnnotation(node) { if (node.exact) { this.token("{|"); } else { - this.token("{"); + this.tokenChar(123); } const props = [...node.properties, ...(node.callProperties || []), ...(node.indexers || []), ...(node.internalSlots || [])]; @@ -621,7 +621,7 @@ function ObjectTypeAnnotation(node) { statement: true, iterator: () => { if (props.length !== 1 || node.inexact) { - this.token(","); + this.tokenChar(44); this.space(); } } @@ -643,7 +643,7 @@ function ObjectTypeAnnotation(node) { if (node.exact) { this.token("|}"); } else { - this.token("}"); + this.tokenChar(125); } } @@ -653,15 +653,15 @@ function ObjectTypeInternalSlot(node) { this.space(); } - this.token("["); - this.token("["); + this.tokenChar(91); + this.tokenChar(91); this.print(node.id, node); - this.token("]"); - this.token("]"); - if (node.optional) this.token("?"); + this.tokenChar(93); + this.tokenChar(93); + if (node.optional) this.tokenChar(63); if (!node.method) { - this.token(":"); + this.tokenChar(58); this.space(); } @@ -685,17 +685,17 @@ function ObjectTypeIndexer(node) { this._variance(node); - this.token("["); + this.tokenChar(91); if (node.id) { this.print(node.id, node); - this.token(":"); + this.tokenChar(58); this.space(); } this.print(node.key, node); - this.token("]"); - this.token(":"); + this.tokenChar(93); + this.tokenChar(58); this.space(); this.print(node.value, node); } @@ -719,10 +719,10 @@ function ObjectTypeProperty(node) { this._variance(node); this.print(node.key, node); - if (node.optional) this.token("?"); + if (node.optional) this.tokenChar(63); if (!node.method) { - this.token(":"); + this.tokenChar(58); this.space(); } @@ -736,7 +736,7 @@ function ObjectTypeSpreadProperty(node) { function QualifiedTypeIdentifier(node) { this.print(node.qualification, node); - this.token("."); + this.tokenChar(46); this.print(node.id, node); } @@ -746,7 +746,7 @@ function SymbolTypeAnnotation() { function orSeparator() { this.space(); - this.token("|"); + this.tokenChar(124); this.space(); } @@ -757,17 +757,17 @@ function UnionTypeAnnotation(node) { } function TypeCastExpression(node) { - this.token("("); + this.tokenChar(40); this.print(node.expression, node); this.print(node.typeAnnotation, node); - this.token(")"); + this.tokenChar(41); } function Variance(node) { if (node.kind === "plus") { - this.token("+"); + this.tokenChar(43); } else { - this.token("-"); + this.tokenChar(45); } } @@ -776,10 +776,10 @@ function VoidTypeAnnotation() { } function IndexedAccessType(node) { - this.print(node.objectType, node); - this.token("["); + this.print(node.objectType, node, true); + this.tokenChar(91); this.print(node.indexType, node); - this.token("]"); + this.tokenChar(93); } function OptionalIndexedAccessType(node) { @@ -789,7 +789,9 @@ function OptionalIndexedAccessType(node) { this.token("?."); } - this.token("["); + this.tokenChar(91); this.print(node.indexType, node); - this.token("]"); -} \ No newline at end of file + this.tokenChar(93); +} + +//# sourceMappingURL=flow.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/index.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/index.js index 8820db09efe..97e73ba277a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/index.js @@ -145,4 +145,6 @@ Object.keys(_typescript).forEach(function (key) { return _typescript[key]; } }); -}); \ No newline at end of file +}); + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/jsx.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/jsx.js index 3c11f59c874..363a14551dd 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/jsx.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/jsx.js @@ -23,7 +23,7 @@ function JSXAttribute(node) { this.print(node.name, node); if (node.value) { - this.token("="); + this.tokenChar(61); this.print(node.value, node); } } @@ -34,43 +34,43 @@ function JSXIdentifier(node) { function JSXNamespacedName(node) { this.print(node.namespace, node); - this.token(":"); + this.tokenChar(58); this.print(node.name, node); } function JSXMemberExpression(node) { this.print(node.object, node); - this.token("."); + this.tokenChar(46); this.print(node.property, node); } function JSXSpreadAttribute(node) { - this.token("{"); + this.tokenChar(123); this.token("..."); this.print(node.argument, node); - this.token("}"); + this.tokenChar(125); } function JSXExpressionContainer(node) { - this.token("{"); + this.tokenChar(123); this.print(node.expression, node); - this.token("}"); + this.tokenChar(125); } function JSXSpreadChild(node) { - this.token("{"); + this.tokenChar(123); this.token("..."); this.print(node.expression, node); - this.token("}"); + this.tokenChar(125); } function JSXText(node) { const raw = this.getPossibleRaw(node); - if (raw != null) { - this.token(raw); + if (raw !== undefined) { + this.token(raw, true); } else { - this.token(node.value); + this.token(node.value, true); } } @@ -93,7 +93,7 @@ function spaceSeparator() { } function JSXOpeningElement(node) { - this.token("<"); + this.tokenChar(60); this.print(node.name, node); this.print(node.typeParameters, node); @@ -108,14 +108,14 @@ function JSXOpeningElement(node) { this.space(); this.token("/>"); } else { - this.token(">"); + this.tokenChar(62); } } function JSXClosingElement(node) { this.token(""); + this.tokenChar(62); } function JSXEmptyExpression(node) { @@ -135,11 +135,13 @@ function JSXFragment(node) { } function JSXOpeningFragment() { - this.token("<"); - this.token(">"); + this.tokenChar(60); + this.tokenChar(62); } function JSXClosingFragment() { this.token(""); -} \ No newline at end of file + this.tokenChar(62); +} + +//# sourceMappingURL=jsx.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/methods.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/methods.js index d31e7fad658..1018e2152a9 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/methods.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/methods.js @@ -20,12 +20,12 @@ const { function _params(node) { this.print(node.typeParameters, node); - this.token("("); + this.tokenChar(40); this._parameters(node.params, node); - this.token(")"); - this.print(node.returnType, node); + this.tokenChar(41); + this.print(node.returnType, node, node.type === "ArrowFunctionExpression"); } function _parameters(parameters, parent) { @@ -33,7 +33,7 @@ function _parameters(parameters, parent) { this._param(parameters[i], parent); if (i < parameters.length - 1) { - this.token(","); + this.tokenChar(44); this.space(); } } @@ -42,7 +42,11 @@ function _parameters(parameters, parent) { function _param(parameter, parent) { this.printJoin(parameter.decorators, parameter); this.print(parameter, parent); - if (parameter.optional) this.token("?"); + + if (parameter.optional) { + this.tokenChar(63); + } + this.print(parameter.typeAnnotation, parameter); } @@ -64,20 +68,20 @@ function _methodHead(node) { if (kind === "method" || kind === "init") { if (node.generator) { - this.token("*"); + this.tokenChar(42); } } if (node.computed) { - this.token("["); + this.tokenChar(91); this.print(key, node); - this.token("]"); + this.tokenChar(93); } else { this.print(key, node); } if (node.optional) { - this.token("?"); + this.tokenChar(63); } this._params(node); @@ -86,7 +90,7 @@ function _methodHead(node) { function _predicate(node) { if (node.predicate) { if (!node.returnType) { - this.token(":"); + this.tokenChar(58); } this.space(); @@ -101,7 +105,7 @@ function _functionHead(node) { } this.word("function"); - if (node.generator) this.token("*"); + if (node.generator) this.tokenChar(42); this.printInnerComments(node); this.space(); @@ -111,7 +115,9 @@ function _functionHead(node) { this._params(node); - this._predicate(node); + if (node.type !== "TSDeclareFunction") { + this._predicate(node); + } } function FunctionExpression(node) { @@ -147,4 +153,6 @@ function hasTypesOrComments(node, param) { var _param$leadingComment, _param$trailingCommen; return !!(node.typeParameters || node.returnType || node.predicate || param.typeAnnotation || param.optional || (_param$leadingComment = param.leadingComments) != null && _param$leadingComment.length || (_param$trailingCommen = param.trailingComments) != null && _param$trailingCommen.length); -} \ No newline at end of file +} + +//# sourceMappingURL=methods.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/modules.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/modules.js index 7a3cc26757c..cd3ba11ebe0 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/modules.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/modules.js @@ -67,7 +67,7 @@ function ExportSpecifier(node) { } function ExportNamespaceSpecifier(node) { - this.token("*"); + this.tokenChar(42); this.space(); this.word("as"); this.space(); @@ -83,7 +83,7 @@ function ExportAllDeclaration(node) { this.space(); } - this.token("*"); + this.tokenChar(42); this.space(); this.word("from"); this.space(); @@ -93,28 +93,14 @@ function ExportAllDeclaration(node) { } function ExportNamedDeclaration(node) { - if (this.format.decoratorsBeforeExport && isClassDeclaration(node.declaration)) { - this.printJoin(node.declaration.decorators, node); - } - - this.word("export"); - this.space(); - ExportDeclaration.apply(this, arguments); -} - -function ExportDefaultDeclaration(node) { - if (this.format.decoratorsBeforeExport && isClassDeclaration(node.declaration)) { - this.printJoin(node.declaration.decorators, node); + { + if (this.format.decoratorsBeforeExport && isClassDeclaration(node.declaration)) { + this.printJoin(node.declaration.decorators, node); + } } - this.word("export"); this.space(); - this.word("default"); - this.space(); - ExportDeclaration.apply(this, arguments); -} -function ExportDeclaration(node) { if (node.declaration) { const declar = node.declaration; this.print(declar, node); @@ -136,7 +122,7 @@ function ExportDeclaration(node) { this.print(specifiers.shift(), node); if (specifiers.length) { - this.token(","); + this.tokenChar(44); this.space(); } } else { @@ -145,7 +131,7 @@ function ExportDeclaration(node) { } if (specifiers.length || !specifiers.length && !hasSpecial) { - this.token("{"); + this.tokenChar(123); if (specifiers.length) { this.space(); @@ -153,7 +139,7 @@ function ExportDeclaration(node) { this.space(); } - this.token("}"); + this.tokenChar(125); } if (node.source) { @@ -168,41 +154,61 @@ function ExportDeclaration(node) { } } +function ExportDefaultDeclaration(node) { + { + if (this.format.decoratorsBeforeExport && isClassDeclaration(node.declaration)) { + this.printJoin(node.declaration.decorators, node); + } + } + this.word("export"); + this.space(); + this.word("default"); + this.space(); + const declar = node.declaration; + this.print(declar, node); + if (!isStatement(declar)) this.semicolon(); +} + function ImportDeclaration(node) { this.word("import"); this.space(); + const isTypeKind = node.importKind === "type" || node.importKind === "typeof"; - if (node.importKind === "type" || node.importKind === "typeof") { + if (isTypeKind) { this.word(node.importKind); this.space(); } const specifiers = node.specifiers.slice(0); + const hasSpecifiers = !!specifiers.length; - if (specifiers != null && specifiers.length) { - for (;;) { - const first = specifiers[0]; + while (hasSpecifiers) { + const first = specifiers[0]; - if (isImportDefaultSpecifier(first) || isImportNamespaceSpecifier(first)) { - this.print(specifiers.shift(), node); + if (isImportDefaultSpecifier(first) || isImportNamespaceSpecifier(first)) { + this.print(specifiers.shift(), node); - if (specifiers.length) { - this.token(","); - this.space(); - } - } else { - break; + if (specifiers.length) { + this.tokenChar(44); + this.space(); } + } else { + break; } + } - if (specifiers.length) { - this.token("{"); - this.space(); - this.printList(specifiers, node); - this.space(); - this.token("}"); - } + if (specifiers.length) { + this.tokenChar(123); + this.space(); + this.printList(specifiers, node); + this.space(); + this.tokenChar(125); + } else if (isTypeKind && !hasSpecifiers) { + this.tokenChar(123); + this.tokenChar(125); + } + if (hasSpecifiers || isTypeKind) { this.space(); this.word("from"); this.space(); @@ -225,15 +231,17 @@ function ImportDeclaration(node) { function ImportAttribute(node) { this.print(node.key); - this.token(":"); + this.tokenChar(58); this.space(); this.print(node.value); } function ImportNamespaceSpecifier(node) { - this.token("*"); + this.tokenChar(42); this.space(); this.word("as"); this.space(); this.print(node.local, node); -} \ No newline at end of file +} + +//# sourceMappingURL=modules.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/statements.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/statements.js index 8b7b8fd7338..ef1777eda9e 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/statements.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/statements.js @@ -3,19 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.BreakStatement = void 0; +exports.BreakStatement = BreakStatement; exports.CatchClause = CatchClause; -exports.ContinueStatement = void 0; +exports.ContinueStatement = ContinueStatement; exports.DebuggerStatement = DebuggerStatement; exports.DoWhileStatement = DoWhileStatement; exports.ForOfStatement = exports.ForInStatement = void 0; exports.ForStatement = ForStatement; exports.IfStatement = IfStatement; exports.LabeledStatement = LabeledStatement; -exports.ReturnStatement = void 0; +exports.ReturnStatement = ReturnStatement; exports.SwitchCase = SwitchCase; exports.SwitchStatement = SwitchStatement; -exports.ThrowStatement = void 0; +exports.ThrowStatement = ThrowStatement; exports.TryStatement = TryStatement; exports.VariableDeclaration = VariableDeclaration; exports.VariableDeclarator = VariableDeclarator; @@ -34,23 +34,23 @@ const { function WithStatement(node) { this.word("with"); this.space(); - this.token("("); + this.tokenChar(40); this.print(node.object, node); - this.token(")"); + this.tokenChar(41); this.printBlock(node); } function IfStatement(node) { this.word("if"); this.space(); - this.token("("); + this.tokenChar(40); this.print(node.test, node); - this.token(")"); + this.tokenChar(41); this.space(); const needsBlock = node.alternate && isIfStatement(getLastStatement(node.consequent)); if (needsBlock) { - this.token("{"); + this.tokenChar(123); this.newline(); this.indent(); } @@ -60,7 +60,7 @@ function IfStatement(node) { if (needsBlock) { this.dedent(); this.newline(); - this.token("}"); + this.tokenChar(125); } if (node.alternate) { @@ -72,68 +72,74 @@ function IfStatement(node) { } function getLastStatement(statement) { - if (!isStatement(statement.body)) return statement; - return getLastStatement(statement.body); + const { + body + } = statement; + + if (isStatement(body) === false) { + return statement; + } + + return getLastStatement(body); } function ForStatement(node) { this.word("for"); this.space(); - this.token("("); + this.tokenChar(40); this.inForStatementInitCounter++; this.print(node.init, node); this.inForStatementInitCounter--; - this.token(";"); + this.tokenChar(59); if (node.test) { this.space(); this.print(node.test, node); } - this.token(";"); + this.tokenChar(59); if (node.update) { this.space(); this.print(node.update, node); } - this.token(")"); + this.tokenChar(41); this.printBlock(node); } function WhileStatement(node) { this.word("while"); this.space(); - this.token("("); + this.tokenChar(40); this.print(node.test, node); - this.token(")"); + this.tokenChar(41); this.printBlock(node); } -const buildForXStatement = function (op) { - return function (node) { - this.word("for"); - this.space(); - - if (op === "of" && node.await) { - this.word("await"); - this.space(); - } +function ForXStatement(node) { + this.word("for"); + this.space(); + const isForOf = node.type === "ForOfStatement"; - this.token("("); - this.print(node.left, node); - this.space(); - this.word(op); + if (isForOf && node.await) { + this.word("await"); this.space(); - this.print(node.right, node); - this.token(")"); - this.printBlock(node); - }; -}; + } + + this.tokenChar(40); + this.print(node.left, node); + this.space(); + this.word(isForOf ? "of" : "in"); + this.space(); + this.print(node.right, node); + this.tokenChar(41); + this.printBlock(node); +} -const ForInStatement = buildForXStatement("in"); +const ForInStatement = ForXStatement; exports.ForInStatement = ForInStatement; -const ForOfStatement = buildForXStatement("of"); +const ForOfStatement = ForXStatement; exports.ForOfStatement = ForOfStatement; function DoWhileStatement(node) { @@ -143,41 +149,44 @@ function DoWhileStatement(node) { this.space(); this.word("while"); this.space(); - this.token("("); + this.tokenChar(40); this.print(node.test, node); - this.token(")"); + this.tokenChar(41); this.semicolon(); } -function buildLabelStatement(prefix, key = "label") { - return function (node) { - this.word(prefix); - const label = node[key]; - - if (label) { - this.space(); - const isLabel = key == "label"; - const terminatorState = this.startTerminatorless(isLabel); - this.print(label, node); - this.endTerminatorless(terminatorState); - } +function printStatementAfterKeyword(printer, node, parent, isLabel) { + if (node) { + printer.space(); + printer.printTerminatorless(node, parent, isLabel); + } - this.semicolon(); - }; + printer.semicolon(); } -const ContinueStatement = buildLabelStatement("continue"); -exports.ContinueStatement = ContinueStatement; -const ReturnStatement = buildLabelStatement("return", "argument"); -exports.ReturnStatement = ReturnStatement; -const BreakStatement = buildLabelStatement("break"); -exports.BreakStatement = BreakStatement; -const ThrowStatement = buildLabelStatement("throw", "argument"); -exports.ThrowStatement = ThrowStatement; +function BreakStatement(node) { + this.word("break"); + printStatementAfterKeyword(this, node.label, node, true); +} + +function ContinueStatement(node) { + this.word("continue"); + printStatementAfterKeyword(this, node.label, node, true); +} + +function ReturnStatement(node) { + this.word("return"); + printStatementAfterKeyword(this, node.argument, node, false); +} + +function ThrowStatement(node) { + this.word("throw"); + printStatementAfterKeyword(this, node.argument, node, false); +} function LabeledStatement(node) { this.print(node.label, node); - this.token(":"); + this.tokenChar(58); this.space(); this.print(node.body, node); } @@ -207,10 +216,10 @@ function CatchClause(node) { this.space(); if (node.param) { - this.token("("); + this.tokenChar(40); this.print(node.param, node); this.print(node.param.typeAnnotation, node); - this.token(")"); + this.tokenChar(41); this.space(); } @@ -220,11 +229,11 @@ function CatchClause(node) { function SwitchStatement(node) { this.word("switch"); this.space(); - this.token("("); + this.tokenChar(40); this.print(node.discriminant, node); - this.token(")"); + this.tokenChar(41); this.space(); - this.token("{"); + this.tokenChar(123); this.printSequence(node.cases, node, { indent: true, @@ -233,7 +242,7 @@ function SwitchStatement(node) { } }); - this.token("}"); + this.tokenChar(125); } function SwitchCase(node) { @@ -241,10 +250,10 @@ function SwitchCase(node) { this.word("case"); this.space(); this.print(node.test, node); - this.token(":"); + this.tokenChar(58); } else { this.word("default"); - this.token(":"); + this.tokenChar(58); } if (node.consequent.length) { @@ -261,7 +270,7 @@ function DebuggerStatement() { } function variableDeclarationIndent() { - this.token(","); + this.tokenChar(44); this.newline(); if (this.endsWith(10)) { @@ -270,7 +279,7 @@ function variableDeclarationIndent() { } function constDeclarationIndent() { - this.token(","); + this.tokenChar(44); this.newline(); if (this.endsWith(10)) { @@ -319,13 +328,15 @@ function VariableDeclaration(node, parent) { function VariableDeclarator(node) { this.print(node.id, node); - if (node.definite) this.token("!"); + if (node.definite) this.tokenChar(33); this.print(node.id.typeAnnotation, node); if (node.init) { this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(node.init, node); } -} \ No newline at end of file +} + +//# sourceMappingURL=statements.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/template-literals.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/template-literals.js index 054330362d6..6d38dd8f845 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/template-literals.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/template-literals.js @@ -17,7 +17,7 @@ function TemplateElement(node, parent) { const isFirst = parent.quasis[0] === node; const isLast = parent.quasis[parent.quasis.length - 1] === node; const value = (isFirst ? "`" : "}") + node.value.raw + (isLast ? "`" : "${"); - this.token(value); + this.token(value, true); } function TemplateLiteral(node) { @@ -30,4 +30,6 @@ function TemplateLiteral(node) { this.print(node.expressions[i], node); } } -} \ No newline at end of file +} + +//# sourceMappingURL=template-literals.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/types.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/types.js index a56fb47ecc6..0c61f00f54d 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/types.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/types.js @@ -40,7 +40,7 @@ function Identifier(node) { } function ArgumentPlaceholder() { - this.token("?"); + this.tokenChar(63); } function RestElement(node) { @@ -50,7 +50,7 @@ function RestElement(node) { function ObjectExpression(node) { const props = node.properties; - this.token("{"); + this.tokenChar(123); this.printInnerComments(node); if (props.length) { @@ -62,7 +62,7 @@ function ObjectExpression(node) { this.space(); } - this.token("}"); + this.tokenChar(125); } function ObjectMethod(node) { @@ -78,9 +78,9 @@ function ObjectProperty(node) { this.printJoin(node.decorators, node); if (node.computed) { - this.token("["); + this.tokenChar(91); this.print(node.key, node); - this.token("]"); + this.tokenChar(93); } else { if (isAssignmentPattern(node.value) && isIdentifier(node.key) && node.key.name === node.value.left.name) { this.print(node.value, node); @@ -94,7 +94,7 @@ function ObjectProperty(node) { } } - this.token(":"); + this.tokenChar(58); this.space(); this.print(node.value, node); } @@ -102,7 +102,7 @@ function ObjectProperty(node) { function ArrayExpression(node) { const elems = node.elements; const len = elems.length; - this.token("["); + this.tokenChar(91); this.printInnerComments(node); for (let i = 0; i < elems.length; i++) { @@ -111,13 +111,13 @@ function ArrayExpression(node) { if (elem) { if (i > 0) this.space(); this.print(elem, node); - if (i < len - 1) this.token(","); + if (i < len - 1) this.tokenChar(44); } else { - this.token(","); + this.tokenChar(44); } } - this.token("]"); + this.tokenChar(93); } function RecordExpression(node) { @@ -128,11 +128,11 @@ function RecordExpression(node) { if (this.format.recordAndTupleSyntaxType === "bar") { startToken = "{|"; endToken = "|}"; - } else if (this.format.recordAndTupleSyntaxType === "hash") { + } else if (this.format.recordAndTupleSyntaxType !== "hash" && this.format.recordAndTupleSyntaxType != null) { + throw new Error(`The "recordAndTupleSyntaxType" generator option must be "bar" or "hash" (${JSON.stringify(this.format.recordAndTupleSyntaxType)} received).`); + } else { startToken = "#{"; endToken = "}"; - } else { - throw new Error(`The "recordAndTupleSyntaxType" generator option must be "bar" or "hash" (${JSON.stringify(this.format.recordAndTupleSyntaxType)} received).`); } this.token(startToken); @@ -175,7 +175,7 @@ function TupleExpression(node) { if (elem) { if (i > 0) this.space(); this.print(elem, node); - if (i < len - 1) this.token(","); + if (i < len - 1) this.tokenChar(44); } } @@ -213,7 +213,7 @@ function NumericLiteral(node) { function StringLiteral(node) { const raw = this.getPossibleRaw(node); - if (!this.format.minified && raw != null) { + if (!this.format.minified && raw !== undefined) { this.token(raw); return; } @@ -228,7 +228,7 @@ function StringLiteral(node) { function BigIntLiteral(node) { const raw = this.getPossibleRaw(node); - if (!this.format.minified && raw != null) { + if (!this.format.minified && raw !== undefined) { this.word(raw); return; } @@ -239,7 +239,7 @@ function BigIntLiteral(node) { function DecimalLiteral(node) { const raw = this.getPossibleRaw(node); - if (!this.format.minified && raw != null) { + if (!this.format.minified && raw !== undefined) { this.word(raw); return; } @@ -272,5 +272,7 @@ function PipelineBareFunction(node) { } function PipelinePrimaryTopicReference() { - this.token("#"); -} \ No newline at end of file + this.tokenChar(35); +} + +//# sourceMappingURL=types.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/typescript.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/typescript.js index 010d86d0a1d..aca0974530a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/typescript.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/generators/typescript.js @@ -25,6 +25,7 @@ exports.TSImportType = TSImportType; exports.TSIndexSignature = TSIndexSignature; exports.TSIndexedAccessType = TSIndexedAccessType; exports.TSInferType = TSInferType; +exports.TSInstantiationExpression = TSInstantiationExpression; exports.TSInterfaceBody = TSInterfaceBody; exports.TSInterfaceDeclaration = TSInterfaceDeclaration; exports.TSIntersectionType = TSIntersectionType; @@ -65,33 +66,41 @@ exports.TSUndefinedKeyword = TSUndefinedKeyword; exports.TSUnionType = TSUnionType; exports.TSUnknownKeyword = TSUnknownKeyword; exports.TSVoidKeyword = TSVoidKeyword; -exports.tsPrintBraced = tsPrintBraced; exports.tsPrintClassMemberModifiers = tsPrintClassMemberModifiers; exports.tsPrintFunctionOrConstructorType = tsPrintFunctionOrConstructorType; exports.tsPrintPropertyOrMethodName = tsPrintPropertyOrMethodName; exports.tsPrintSignatureDeclarationBase = tsPrintSignatureDeclarationBase; exports.tsPrintTypeLiteralOrInterfaceBody = tsPrintTypeLiteralOrInterfaceBody; -exports.tsPrintUnionOrIntersectionType = tsPrintUnionOrIntersectionType; function TSTypeAnnotation(node) { - this.token(":"); + this.tokenChar(58); this.space(); - if (node.optional) this.token("?"); + if (node.optional) this.tokenChar(63); this.print(node.typeAnnotation, node); } function TSTypeParameterInstantiation(node, parent) { - this.token("<"); + this.tokenChar(60); this.printList(node.params, node, {}); if (parent.type === "ArrowFunctionExpression" && node.params.length === 1) { - this.token(","); + this.tokenChar(44); } - this.token(">"); + this.tokenChar(62); } function TSTypeParameter(node) { + if (node.in) { + this.word("in"); + this.space(); + } + + if (node.out) { + this.word("out"); + this.space(); + } + this.word(node.name); if (node.constraint) { @@ -103,7 +112,7 @@ function TSTypeParameter(node) { if (node.default) { this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(node.default, node); } @@ -131,31 +140,31 @@ function TSDeclareFunction(node) { this._functionHead(node); - this.token(";"); + this.tokenChar(59); } function TSDeclareMethod(node) { this._classMethodHead(node); - this.token(";"); + this.tokenChar(59); } function TSQualifiedName(node) { this.print(node.left, node); - this.token("."); + this.tokenChar(46); this.print(node.right, node); } function TSCallSignatureDeclaration(node) { this.tsPrintSignatureDeclarationBase(node); - this.token(";"); + this.tokenChar(59); } function TSConstructSignatureDeclaration(node) { this.word("new"); this.space(); this.tsPrintSignatureDeclarationBase(node); - this.token(";"); + this.tokenChar(59); } function TSPropertySignature(node) { @@ -174,27 +183,27 @@ function TSPropertySignature(node) { if (initializer) { this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(initializer, node); } - this.token(";"); + this.tokenChar(59); } function tsPrintPropertyOrMethodName(node) { if (node.computed) { - this.token("["); + this.tokenChar(91); } this.print(node.key, node); if (node.computed) { - this.token("]"); + this.tokenChar(93); } if (node.optional) { - this.token("?"); + this.tokenChar(63); } } @@ -210,7 +219,7 @@ function TSMethodSignature(node) { this.tsPrintPropertyOrMethodName(node); this.tsPrintSignatureDeclarationBase(node); - this.token(";"); + this.tokenChar(59); } function TSIndexSignature(node) { @@ -229,13 +238,13 @@ function TSIndexSignature(node) { this.space(); } - this.token("["); + this.tokenChar(91); this._parameters(node.parameters, node); - this.token("]"); + this.tokenChar(93); this.print(node.typeAnnotation, node); - this.token(";"); + this.tokenChar(59); } function TSAnyKeyword() { @@ -315,11 +324,11 @@ function tsPrintFunctionOrConstructorType(node) { } = node; const parameters = node.parameters; this.print(typeParameters, node); - this.token("("); + this.tokenChar(40); this._parameters(parameters, node); - this.token(")"); + this.tokenChar(41); this.space(); this.token("=>"); this.space(); @@ -328,8 +337,8 @@ function tsPrintFunctionOrConstructorType(node) { } function TSTypeReference(node) { - this.print(node.typeName, node); - this.print(node.typeParameters, node); + this.print(node.typeName, node, true); + this.print(node.typeParameters, node, true); } function TSTypePredicate(node) { @@ -352,6 +361,10 @@ function TSTypeQuery(node) { this.word("typeof"); this.space(); this.print(node.exprName); + + if (node.typeParameters) { + this.print(node.typeParameters, node); + } } function TSTypeLiteral(node) { @@ -359,42 +372,42 @@ function TSTypeLiteral(node) { } function tsPrintTypeLiteralOrInterfaceBody(members, node) { - this.tsPrintBraced(members, node); + tsPrintBraced(this, members, node); } -function tsPrintBraced(members, node) { - this.token("{"); +function tsPrintBraced(printer, members, node) { + printer.token("{"); if (members.length) { - this.indent(); - this.newline(); + printer.indent(); + printer.newline(); for (const member of members) { - this.print(member, node); - this.newline(); + printer.print(member, node); + printer.newline(); } - this.dedent(); - this.rightBrace(); + printer.dedent(); + printer.rightBrace(); } else { - this.token("}"); + printer.token("}"); } } function TSArrayType(node) { - this.print(node.elementType, node); + this.print(node.elementType, node, true); this.token("[]"); } function TSTupleType(node) { - this.token("["); + this.tokenChar(91); this.printList(node.elementTypes, node); - this.token("]"); + this.tokenChar(93); } function TSOptionalType(node) { this.print(node.typeAnnotation, node); - this.token("?"); + this.tokenChar(63); } function TSRestType(node) { @@ -404,22 +417,22 @@ function TSRestType(node) { function TSNamedTupleMember(node) { this.print(node.label, node); - if (node.optional) this.token("?"); - this.token(":"); + if (node.optional) this.tokenChar(63); + this.tokenChar(58); this.space(); this.print(node.elementType, node); } function TSUnionType(node) { - this.tsPrintUnionOrIntersectionType(node, "|"); + tsPrintUnionOrIntersectionType(this, node, "|"); } function TSIntersectionType(node) { - this.tsPrintUnionOrIntersectionType(node, "&"); + tsPrintUnionOrIntersectionType(this, node, "&"); } -function tsPrintUnionOrIntersectionType(node, sep) { - this.printJoin(node.types, node, { +function tsPrintUnionOrIntersectionType(printer, node, sep) { + printer.printJoin(node.types, node, { separator() { this.space(); this.token(sep); @@ -436,11 +449,11 @@ function TSConditionalType(node) { this.space(); this.print(node.extendsType); this.space(); - this.token("?"); + this.tokenChar(63); this.space(); this.print(node.trueType); this.space(); - this.token(":"); + this.tokenChar(58); this.space(); this.print(node.falseType); } @@ -452,9 +465,9 @@ function TSInferType(node) { } function TSParenthesizedType(node) { - this.token("("); + this.tokenChar(40); this.print(node.typeAnnotation, node); - this.token(")"); + this.tokenChar(41); } function TSTypeOperator(node) { @@ -464,10 +477,10 @@ function TSTypeOperator(node) { } function TSIndexedAccessType(node) { - this.print(node.objectType, node); - this.token("["); + this.print(node.objectType, node, true); + this.tokenChar(91); this.print(node.indexType, node); - this.token("]"); + this.tokenChar(93); } function TSMappedType(node) { @@ -477,7 +490,7 @@ function TSMappedType(node) { readonly, typeParameter } = node; - this.token("{"); + this.tokenChar(123); this.space(); if (readonly) { @@ -486,7 +499,7 @@ function TSMappedType(node) { this.space(); } - this.token("["); + this.tokenChar(91); this.word(typeParameter.name); this.space(); this.word("in"); @@ -500,18 +513,18 @@ function TSMappedType(node) { this.print(nameType, node); } - this.token("]"); + this.tokenChar(93); if (optional) { tokenIfPlusMinus(this, optional); - this.token("?"); + this.tokenChar(63); } - this.token(":"); + this.tokenChar(58); this.space(); this.print(node.typeAnnotation, node); this.space(); - this.token("}"); + this.tokenChar(125); } function tokenIfPlusMinus(self, tok) { @@ -581,10 +594,10 @@ function TSTypeAliasDeclaration(node) { this.print(id, node); this.print(typeParameters, node); this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(typeAnnotation, node); - this.token(";"); + this.tokenChar(59); } function TSAsExpression(node) { @@ -604,13 +617,18 @@ function TSTypeAssertion(node) { typeAnnotation, expression } = node; - this.token("<"); + this.tokenChar(60); this.print(typeAnnotation, node); - this.token(">"); + this.tokenChar(62); this.space(); this.print(expression, node); } +function TSInstantiationExpression(node) { + this.print(node.expression, node); + this.print(node.typeParameters, node); +} + function TSEnumDeclaration(node) { const { declare, @@ -633,7 +651,7 @@ function TSEnumDeclaration(node) { this.space(); this.print(id, node); this.space(); - this.tsPrintBraced(members, node); + tsPrintBraced(this, members, node); } function TSEnumMember(node) { @@ -645,12 +663,12 @@ function TSEnumMember(node) { if (initializer) { this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(initializer, node); } - this.token(","); + this.tokenChar(44); } function TSModuleDeclaration(node) { @@ -672,14 +690,14 @@ function TSModuleDeclaration(node) { this.print(id, node); if (!node.body) { - this.token(";"); + this.tokenChar(59); return; } let body = node.body; while (body.type === "TSModuleDeclaration") { - this.token("."); + this.tokenChar(46); this.print(body.id, body); body = body.body; } @@ -689,7 +707,7 @@ function TSModuleDeclaration(node) { } function TSModuleBlock(node) { - this.tsPrintBraced(node.body, node); + tsPrintBraced(this, node.body, node); } function TSImportType(node) { @@ -699,12 +717,12 @@ function TSImportType(node) { typeParameters } = node; this.word("import"); - this.token("("); + this.tokenChar(40); this.print(argument, node); - this.token(")"); + this.tokenChar(41); if (qualifier) { - this.token("."); + this.tokenChar(46); this.print(qualifier, node); } @@ -729,30 +747,30 @@ function TSImportEqualsDeclaration(node) { this.space(); this.print(id, node); this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(moduleReference, node); - this.token(";"); + this.tokenChar(59); } function TSExternalModuleReference(node) { this.token("require("); this.print(node.expression, node); - this.token(")"); + this.tokenChar(41); } function TSNonNullExpression(node) { this.print(node.expression, node); - this.token("!"); + this.tokenChar(33); } function TSExportAssignment(node) { this.word("export"); this.space(); - this.token("="); + this.tokenChar(61); this.space(); this.print(node.expression, node); - this.token(";"); + this.tokenChar(59); } function TSNamespaceExportDeclaration(node) { @@ -771,16 +789,18 @@ function tsPrintSignatureDeclarationBase(node) { } = node; const parameters = node.parameters; this.print(typeParameters, node); - this.token("("); + this.tokenChar(40); this._parameters(parameters, node); - this.token(")"); + this.tokenChar(41); const returnType = node.typeAnnotation; this.print(returnType, node); } -function tsPrintClassMemberModifiers(node, isField) { +function tsPrintClassMemberModifiers(node) { + const isField = node.type === "ClassAccessorProperty" || node.type === "ClassProperty"; + if (isField && node.declare) { this.word("declare"); this.space(); @@ -810,4 +830,6 @@ function tsPrintClassMemberModifiers(node, isField) { this.word("readonly"); this.space(); } -} \ No newline at end of file +} + +//# sourceMappingURL=typescript.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/index.js index ca8a0bd7903..c2e6eab64b3 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/index.js @@ -41,7 +41,6 @@ function normalizeOptions(code, opts) { style: " ", base: 0 }, - decoratorsBeforeExport: !!opts.decoratorsBeforeExport, jsescOption: Object.assign({ quotes: "double", wrap: true, @@ -51,6 +50,7 @@ function normalizeOptions(code, opts) { topicToken: opts.topicToken }; { + format.decoratorsBeforeExport = !!opts.decoratorsBeforeExport; format.jsonCompatibleStrings = opts.jsonCompatibleStrings; } @@ -59,7 +59,7 @@ function normalizeOptions(code, opts) { format.shouldPrintComment = format.shouldPrintComment || (() => format.comments); } else { - format.shouldPrintComment = format.shouldPrintComment || (value => format.comments || value.indexOf("@license") >= 0 || value.indexOf("@preserve") >= 0); + format.shouldPrintComment = format.shouldPrintComment || (value => format.comments || value.includes("@license") || value.includes("@preserve")); } if (format.compact === "auto") { @@ -94,4 +94,6 @@ exports.CodeGenerator = CodeGenerator; function generate(ast, opts, code) { const gen = new Generator(ast, opts, code); return gen.generate(); -} \ No newline at end of file +} + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/index.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/index.js index b594ae441c0..07dc2f0fd07 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/index.js @@ -50,7 +50,6 @@ function expandAliases(obj) { const expandedParens = expandAliases(parens); const expandedWhitespaceNodes = expandAliases(whitespace.nodes); -const expandedWhitespaceList = expandAliases(whitespace.list); function find(obj, node, parent, printStack) { const fn = obj[node.type]; @@ -66,38 +65,27 @@ function isOrHasCallExpression(node) { } function needsWhitespace(node, parent, type) { - if (!node) return 0; + if (!node) return false; if (isExpressionStatement(node)) { node = node.expression; } - let linesInfo = find(expandedWhitespaceNodes, node, parent); + const flag = find(expandedWhitespaceNodes, node, parent); - if (!linesInfo) { - const items = find(expandedWhitespaceList, node, parent); - - if (items) { - for (let i = 0; i < items.length; i++) { - linesInfo = needsWhitespace(items[i], node, type); - if (linesInfo) break; - } - } + if (typeof flag === "number") { + return (flag & type) !== 0; } - if (typeof linesInfo === "object" && linesInfo !== null) { - return linesInfo[type] || 0; - } - - return 0; + return false; } function needsWhitespaceBefore(node, parent) { - return needsWhitespace(node, parent, "before"); + return needsWhitespace(node, parent, 1); } function needsWhitespaceAfter(node, parent) { - return needsWhitespace(node, parent, "after"); + return needsWhitespace(node, parent, 2); } function needsParens(node, parent, printStack) { @@ -108,4 +96,6 @@ function needsParens(node, parent, printStack) { } return find(expandedParens, node, parent, printStack); -} \ No newline at end of file +} + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/parentheses.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/parentheses.js index 5761a58d984..616797a95c8 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/parentheses.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/parentheses.js @@ -21,6 +21,7 @@ exports.OptionalCallExpression = exports.OptionalMemberExpression = OptionalMemb exports.SequenceExpression = SequenceExpression; exports.TSAsExpression = TSAsExpression; exports.TSInferType = TSInferType; +exports.TSInstantiationExpression = TSInstantiationExpression; exports.TSTypeAssertion = TSTypeAssertion; exports.TSIntersectionType = exports.TSUnionType = TSUnionType; exports.UnaryLike = UnaryLike; @@ -37,8 +38,9 @@ const { isAwaitExpression, isBinary, isBinaryExpression, + isUpdateExpression, isCallExpression, - isClassDeclaration, + isClass, isClassExpression, isConditional, isConditionalExpression, @@ -49,6 +51,7 @@ const { isForInStatement, isForOfStatement, isForStatement, + isFunctionExpression, isIfStatement, isIndexedAccessType, isIntersectionTypeAnnotation, @@ -64,6 +67,7 @@ const { isSwitchStatement, isTSArrayType, isTSAsExpression, + isTSInstantiationExpression, isTSIntersectionType, isTSNonNullExpression, isTSOptionalType, @@ -82,6 +86,7 @@ const { const PRECEDENCE = { "||": 0, "??": 0, + "|>": 0, "&&": 1, "|": 2, "^": 3, @@ -107,7 +112,9 @@ const PRECEDENCE = { "**": 10 }; -const isClassExtendsClause = (node, parent) => (isClassDeclaration(parent) || isClassExpression(parent)) && parent.superClass === node; +const isClassExtendsClause = (node, parent) => isClass(parent, { + superClass: node +}); const hasPostfixPart = (node, parent) => (isMemberExpression(parent) || isOptionalMemberExpression(parent)) && parent.object === node || (isCallExpression(parent) || isOptionalCallExpression(parent) || isNewExpression(parent)) && parent.callee === node || isTaggedTemplateExpression(parent) && parent.tag === node || isTSNonNullExpression(parent); @@ -116,6 +123,7 @@ function NullableTypeAnnotation(node, parent) { } function FunctionTypeAnnotation(node, parent, printStack) { + if (printStack.length < 3) return; return isUnionTypeAnnotation(parent) || isIntersectionTypeAnnotation(parent) || isArrayTypeAnnotation(parent) || isTypeAnnotation(parent) && isArrowFunctionExpression(printStack[printStack.length - 3]); } @@ -124,16 +132,11 @@ function UpdateExpression(node, parent) { } function ObjectExpression(node, parent, printStack) { - return isFirstInContext(printStack, { - expressionStatement: true, - arrowBody: true - }); + return isFirstInContext(printStack, 1 | 2); } function DoExpression(node, parent, printStack) { - return !node.async && isFirstInContext(printStack, { - expressionStatement: true - }); + return !node.async && isFirstInContext(printStack, 1); } function Binary(node, parent) { @@ -189,6 +192,10 @@ function TSInferType(node, parent) { return isTSArrayType(parent) || isTSOptionalType(parent); } +function TSInstantiationExpression(node, parent) { + return (isCallExpression(parent) || isOptionalCallExpression(parent) || isNewExpression(parent) || isTSInstantiationExpression(parent)) && !!parent.typeParameters; +} + function BinaryExpression(node, parent) { return node.operator === "in" && (isVariableDeclarator(parent) || isFor(parent)); } @@ -206,10 +213,7 @@ function YieldExpression(node, parent) { } function ClassExpression(node, parent, printStack) { - return isFirstInContext(printStack, { - expressionStatement: true, - exportDefault: true - }); + return isFirstInContext(printStack, 1 | 4); } function UnaryLike(node, parent) { @@ -220,10 +224,7 @@ function UnaryLike(node, parent) { } function FunctionExpression(node, parent, printStack) { - return isFirstInContext(printStack, { - expressionStatement: true, - exportDefault: true - }); + return isFirstInContext(printStack, 1 | 4); } function ArrowFunctionExpression(node, parent) { @@ -273,6 +274,14 @@ function LogicalExpression(node, parent) { } function Identifier(node, parent, printStack) { + var _node$extra; + + if ((_node$extra = node.extra) != null && _node$extra.parenthesized && isAssignmentExpression(parent, { + left: node + }) && (isFunctionExpression(parent.right) || isClassExpression(parent.right)) && parent.right.id == null) { + return true; + } + if (node.name === "let") { const isFollowedByBracket = isMemberExpression(parent, { object: node, @@ -282,26 +291,21 @@ function Identifier(node, parent, printStack) { computed: true, optional: false }); - return isFirstInContext(printStack, { - expressionStatement: isFollowedByBracket, - forHead: isFollowedByBracket, - forInHead: isFollowedByBracket, - forOfHead: true - }); + return isFirstInContext(printStack, isFollowedByBracket ? 1 | 8 | 16 | 32 : 32); } return node.name === "async" && isForOfStatement(parent) && node === parent.left; } -function isFirstInContext(printStack, { - expressionStatement = false, - arrowBody = false, - exportDefault = false, - forHead = false, - forInHead = false, - forOfHead = false -}) { +function isFirstInContext(printStack, checkParam) { + const expressionStatement = checkParam & 1; + const arrowBody = checkParam & 2; + const exportDefault = checkParam & 4; + const forHead = checkParam & 8; + const forInHead = checkParam & 16; + const forOfHead = checkParam & 32; let i = printStack.length - 1; + if (i <= 0) return; let node = printStack[i]; i--; let parent = printStack[i]; @@ -323,13 +327,13 @@ function isFirstInContext(printStack, { return true; } - if (hasPostfixPart(node, parent) && !isNewExpression(parent) || isSequenceExpression(parent) && parent.expressions[0] === node || isConditional(parent, { + if (i > 0 && (hasPostfixPart(node, parent) && !isNewExpression(parent) || isSequenceExpression(parent) && parent.expressions[0] === node || isUpdateExpression(parent) && !parent.prefix || isConditional(parent, { test: node }) || isBinary(parent, { left: node }) || isAssignmentExpression(parent, { left: node - })) { + }))) { node = parent; i--; parent = printStack[i]; @@ -339,4 +343,6 @@ function isFirstInContext(printStack, { } return false; -} \ No newline at end of file +} + +//# sourceMappingURL=parentheses.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/whitespace.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/whitespace.js index 80e2da9c498..ccb54017d34 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/whitespace.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/node/whitespace.js @@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.nodes = exports.list = void 0; +exports.nodes = void 0; var _t = require("@babel/types"); @@ -24,30 +24,42 @@ const { isStringLiteral } = _t; -function crawl(node, state = {}) { +function crawlInternal(node, state) { + if (!node) return state; + if (isMemberExpression(node) || isOptionalMemberExpression(node)) { - crawl(node.object, state); - if (node.computed) crawl(node.property, state); + crawlInternal(node.object, state); + if (node.computed) crawlInternal(node.property, state); } else if (isBinary(node) || isAssignmentExpression(node)) { - crawl(node.left, state); - crawl(node.right, state); + crawlInternal(node.left, state); + crawlInternal(node.right, state); } else if (isCallExpression(node) || isOptionalCallExpression(node)) { state.hasCall = true; - crawl(node.callee, state); + crawlInternal(node.callee, state); } else if (isFunction(node)) { state.hasFunction = true; } else if (isIdentifier(node)) { - state.hasHelper = state.hasHelper || isHelper(node.callee); + state.hasHelper = state.hasHelper || node.callee && isHelper(node.callee); } return state; } +function crawl(node) { + return crawlInternal(node, { + hasCall: false, + hasFunction: false, + hasHelper: false + }); +} + function isHelper(node) { + if (!node) return false; + if (isMemberExpression(node)) { return isHelper(node.object) || isHelper(node.property); } else if (isIdentifier(node)) { - return node.name === "require" || node.name[0] === "_"; + return node.name === "require" || node.name.charCodeAt(0) === 95; } else if (isCallExpression(node)) { return isHelper(node.callee); } else if (isBinary(node) || isAssignmentExpression(node)) { @@ -66,51 +78,35 @@ const nodes = { const state = crawl(node.right); if (state.hasCall && state.hasHelper || state.hasFunction) { - return { - before: state.hasFunction, - after: true - }; + return state.hasFunction ? 1 | 2 : 2; } }, SwitchCase(node, parent) { - return { - before: !!node.consequent.length || parent.cases[0] === node, - after: !node.consequent.length && parent.cases[parent.cases.length - 1] === node - }; + return (!!node.consequent.length || parent.cases[0] === node ? 1 : 0) | (!node.consequent.length && parent.cases[parent.cases.length - 1] === node ? 2 : 0); }, LogicalExpression(node) { if (isFunction(node.left) || isFunction(node.right)) { - return { - after: true - }; + return 2; } }, Literal(node) { if (isStringLiteral(node) && node.value === "use strict") { - return { - after: true - }; + return 2; } }, CallExpression(node) { if (isFunction(node.callee) || isHelper(node)) { - return { - before: true, - after: true - }; + return 1 | 2; } }, OptionalCallExpression(node) { if (isFunction(node.callee)) { - return { - before: true, - after: true - }; + return 1 | 2; } }, @@ -119,26 +115,20 @@ const nodes = { const declar = node.declarations[i]; let enabled = isHelper(declar.id) && !isType(declar.init); - if (!enabled) { + if (!enabled && declar.init) { const state = crawl(declar.init); enabled = isHelper(declar.init) && state.hasCall || state.hasFunction; } if (enabled) { - return { - before: true, - after: true - }; + return 1 | 2; } } }, IfStatement(node) { if (isBlockStatement(node.consequent)) { - return { - before: true, - after: true - }; + return 1 | 2; } } @@ -147,9 +137,7 @@ exports.nodes = nodes; nodes.ObjectProperty = nodes.ObjectTypeProperty = nodes.ObjectMethod = function (node, parent) { if (parent.properties[0] === node) { - return { - before: true - }; + return 1; } }; @@ -157,9 +145,7 @@ nodes.ObjectTypeCallProperty = function (node, parent) { var _parent$properties; if (parent.callProperties[0] === node && !((_parent$properties = parent.properties) != null && _parent$properties.length)) { - return { - before: true - }; + return 1; } }; @@ -167,9 +153,7 @@ nodes.ObjectTypeIndexer = function (node, parent) { var _parent$properties2, _parent$callPropertie; if (parent.indexers[0] === node && !((_parent$properties2 = parent.properties) != null && _parent$properties2.length) && !((_parent$callPropertie = parent.callProperties) != null && _parent$callPropertie.length)) { - return { - before: true - }; + return 1; } }; @@ -177,38 +161,16 @@ nodes.ObjectTypeInternalSlot = function (node, parent) { var _parent$properties3, _parent$callPropertie2, _parent$indexers; if (parent.internalSlots[0] === node && !((_parent$properties3 = parent.properties) != null && _parent$properties3.length) && !((_parent$callPropertie2 = parent.callProperties) != null && _parent$callPropertie2.length) && !((_parent$indexers = parent.indexers) != null && _parent$indexers.length)) { - return { - before: true - }; + return 1; } }; -const list = { - VariableDeclaration(node) { - return node.declarations.map(decl => decl.init); - }, - - ArrayExpression(node) { - return node.elements; - }, - - ObjectExpression(node) { - return node.properties; - } - -}; -exports.list = list; [["Function", true], ["Class", true], ["Loop", true], ["LabeledStatement", true], ["SwitchStatement", true], ["TryStatement", true]].forEach(function ([type, amounts]) { - if (typeof amounts === "boolean") { - amounts = { - after: amounts, - before: amounts - }; - } - [type].concat(FLIPPED_ALIAS_KEYS[type] || []).forEach(function (type) { - nodes[type] = function () { - return amounts; - }; + const ret = amounts ? 1 | 2 : 0; + + nodes[type] = () => ret; }); -}); \ No newline at end of file +}); + +//# sourceMappingURL=whitespace.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/printer.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/printer.js index 0decd212cb2..013d0b2440c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/printer.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/printer.js @@ -9,15 +9,8 @@ var _buffer = require("./buffer"); var n = require("./node"); -var _t = require("@babel/types"); - var generatorFunctions = require("./generators"); -const { - isProgram, - isFile, - isEmptyStatement -} = _t; const SCIENTIFIC_NOTATION = /e/i; const ZERO_DECIMAL_INTEGER = /\.0+$/; const NON_DECIMAL_LITERAL = /^0[box]/; @@ -33,15 +26,19 @@ class Printer { this.inForStatementInitCounter = 0; this._printStack = []; this._indent = 0; + this._indentChar = 0; + this._indentRepeat = 0; this._insideAux = false; this._parenPushNewlineState = null; this._noLineTerminator = false; this._printAuxAfterOnNextUserNode = false; - this._printedComments = new WeakSet(); + this._printedComments = new Set(); this._endsWithInteger = false; this._endsWithWord = false; this.format = format; this._buf = new _buffer.default(map); + this._indentChar = format.indent.style.charCodeAt(0); + this._indentRepeat = format.indent.style.length; } generate(ast) { @@ -65,7 +62,11 @@ class Printer { semicolon(force = false) { this._maybeAddAuxComment(); - this._append(";", !force); + if (force) { + this._appendChar(59); + } else { + this._queue(59); + } } rightBrace() { @@ -73,7 +74,7 @@ class Printer { this._buf.removeLastSemicolon(); } - this.token("}"); + this.tokenChar(125); } space(force = false) { @@ -91,13 +92,13 @@ class Printer { } word(str) { - if (this._endsWithWord || this.endsWith(47) && str.charCodeAt(0) === 47) { + if (this._endsWithWord || str.charCodeAt(0) === 47 && this.endsWith(47)) { this._space(); } this._maybeAddAuxComment(); - this._append(str); + this._append(str, false); this._endsWithWord = true; } @@ -107,17 +108,29 @@ class Printer { this._endsWithInteger = Number.isInteger(+str) && !NON_DECIMAL_LITERAL.test(str) && !SCIENTIFIC_NOTATION.test(str) && !ZERO_DECIMAL_INTEGER.test(str) && str.charCodeAt(str.length - 1) !== 46; } - token(str) { + token(str, maybeNewline = false) { const lastChar = this.getLastChar(); const strFirst = str.charCodeAt(0); - if (str === "--" && lastChar === 33 || strFirst === 43 && lastChar === 43 || strFirst === 45 && lastChar === 45 || strFirst === 46 && this._endsWithInteger) { + if (lastChar === 33 && str === "--" || strFirst === 43 && lastChar === 43 || strFirst === 45 && lastChar === 45 || strFirst === 46 && this._endsWithInteger) { + this._space(); + } + + this._maybeAddAuxComment(); + + this._append(str, maybeNewline); + } + + tokenChar(char) { + const lastChar = this.getLastChar(); + + if (char === 43 && lastChar === 43 || char === 45 && lastChar === 45 || char === 46 && this._endsWithInteger) { this._space(); } this._maybeAddAuxComment(); - this._append(str); + this._appendChar(char); } newline(i = 1) { @@ -177,61 +190,103 @@ class Printer { } _space() { - this._append(" ", true); + this._queue(32); } _newline() { - this._append("\n", true); + this._queue(10); } - _append(str, queue = false) { + _append(str, maybeNewline) { this._maybeAddParen(str); - this._maybeIndent(str); + this._maybeIndent(str.charCodeAt(0)); + + this._buf.append(str, maybeNewline); + + this._endsWithWord = false; + this._endsWithInteger = false; + } + + _appendChar(char) { + this._maybeAddParenChar(char); + + this._maybeIndent(char); + + this._buf.appendChar(char); + + this._endsWithWord = false; + this._endsWithInteger = false; + } + + _queue(char) { + this._maybeAddParenChar(char); + + this._maybeIndent(char); + + this._buf.queue(char); - if (queue) this._buf.queue(str);else this._buf.append(str); this._endsWithWord = false; this._endsWithInteger = false; } - _maybeIndent(str) { - if (this._indent && this.endsWith(10) && str.charCodeAt(0) !== 10) { - this._buf.queue(this._getIndent()); + _maybeIndent(firstChar) { + if (this._indent && firstChar !== 10 && this.endsWith(10)) { + this._buf.queueIndentation(this._indentChar, this._getIndent()); + } + } + + _maybeAddParenChar(char) { + const parenPushNewlineState = this._parenPushNewlineState; + if (!parenPushNewlineState) return; + + if (char === 32) { + return; } + + if (char !== 10) { + this._parenPushNewlineState = null; + return; + } + + this.tokenChar(40); + this.indent(); + parenPushNewlineState.printed = true; } _maybeAddParen(str) { const parenPushNewlineState = this._parenPushNewlineState; if (!parenPushNewlineState) return; + const len = str.length; let i; - for (i = 0; i < str.length && str[i] === " "; i++) continue; + for (i = 0; i < len && str.charCodeAt(i) === 32; i++) continue; - if (i === str.length) { + if (i === len) { return; } - const cha = str[i]; + const cha = str.charCodeAt(i); - if (cha !== "\n") { - if (cha !== "/" || i + 1 === str.length) { + if (cha !== 10) { + if (cha !== 47 || i + 1 === len) { this._parenPushNewlineState = null; return; } - const chaPost = str[i + 1]; + const chaPost = str.charCodeAt(i + 1); - if (chaPost === "*") { - if (PURE_ANNOTATION_RE.test(str.slice(i + 2, str.length - 2))) { + if (chaPost === 42) { + if (PURE_ANNOTATION_RE.test(str.slice(i + 2, len - 2))) { return; } - } else if (chaPost !== "/") { + } else if (chaPost !== 47) { this._parenPushNewlineState = null; return; } } - this.token("("); + this.tokenChar(40); this.indent(); parenPushNewlineState.printed = true; } @@ -250,73 +305,82 @@ class Printer { } _getIndent() { - return this.format.indent.style.repeat(this._indent); + return this._indentRepeat * this._indent; } - startTerminatorless(isLabel = false) { + printTerminatorless(node, parent, isLabel) { if (isLabel) { this._noLineTerminator = true; - return null; + this.print(node, parent); + this._noLineTerminator = false; } else { - return this._parenPushNewlineState = { + const terminatorState = { printed: false }; - } - } - - endTerminatorless(state) { - this._noLineTerminator = false; + this._parenPushNewlineState = terminatorState; + this.print(node, parent); - if (state != null && state.printed) { - this.dedent(); - this.newline(); - this.token(")"); + if (terminatorState.printed) { + this.dedent(); + this.newline(); + this.tokenChar(41); + } } } - print(node, parent) { + print(node, parent, noLineTerminator) { if (!node) return; - const oldConcise = this.format.concise; + const nodeType = node.type; + const format = this.format; + const oldConcise = format.concise; if (node._compact) { - this.format.concise = true; + format.concise = true; } - const printMethod = this[node.type]; + const printMethod = this[nodeType]; - if (!printMethod) { - throw new ReferenceError(`unknown node of type ${JSON.stringify(node.type)} with constructor ${JSON.stringify(node == null ? void 0 : node.constructor.name)}`); + if (printMethod === undefined) { + throw new ReferenceError(`unknown node of type ${JSON.stringify(nodeType)} with constructor ${JSON.stringify(node.constructor.name)}`); } this._printStack.push(node); const oldInAux = this._insideAux; - this._insideAux = !node.loc; + this._insideAux = node.loc == undefined; this._maybeAddAuxComment(this._insideAux && !oldInAux); - let shouldPrintParens = needsParens(node, parent, this._printStack); + let shouldPrintParens; - if (this.format.retainFunctionParens && node.type === "FunctionExpression" && node.extra && node.extra.parenthesized) { + if (format.retainFunctionParens && nodeType === "FunctionExpression" && node.extra && node.extra.parenthesized) { shouldPrintParens = true; + } else { + shouldPrintParens = needsParens(node, parent, this._printStack); } - if (shouldPrintParens) this.token("("); + if (shouldPrintParens) this.tokenChar(40); this._printLeadingComments(node); - const loc = isProgram(node) || isFile(node) ? null : node.loc; - this.withSource("start", loc, () => { - printMethod.call(this, node, parent); - }); + const loc = nodeType === "Program" || nodeType === "File" ? null : node.loc; + this.withSource("start", loc, printMethod.bind(this, node, parent)); + + if (noLineTerminator && !this._noLineTerminator) { + this._noLineTerminator = true; + + this._printTrailingComments(node); - this._printTrailingComments(node); + this._noLineTerminator = false; + } else { + this._printTrailingComments(node); + } - if (shouldPrintParens) this.token(")"); + if (shouldPrintParens) this.tokenChar(41); this._printStack.pop(); - this.format.concise = oldConcise; + format.concise = oldConcise; this._insideAux = oldInAux; } @@ -365,8 +429,9 @@ class Printer { const newlineOpts = { addNewlines: opts.addNewlines }; + const len = nodes.length; - for (let i = 0; i < nodes.length; i++) { + for (let i = 0; i < len; i++) { const node = nodes[i]; if (!node) continue; if (opts.statement) this._printNewline(true, node, parent, newlineOpts); @@ -376,7 +441,7 @@ class Printer { opts.iterator(node, i); } - if (opts.separator && i < nodes.length - 1) { + if (opts.separator && i < len - 1) { opts.separator.call(this); } @@ -396,7 +461,7 @@ class Printer { printBlock(parent) { const node = parent.body; - if (!isEmptyStatement(node)) { + if (node.type !== "EmptyStatement") { this.space(); } @@ -456,13 +521,13 @@ class Printer { } _getComments(leading, node) { - return node && (leading ? node.leadingComments : node.trailingComments) || []; + return node && (leading ? node.leadingComments : node.trailingComments) || null; } _printComment(comment, skipNewLines) { - if (!this.format.shouldPrintComment(comment.value)) return; if (comment.ignore) return; if (this._printedComments.has(comment)) return; + if (!this.format.shouldPrintComment(comment.value)) return; this._printedComments.add(comment); @@ -475,26 +540,35 @@ class Printer { this.space(); } - let val = !isBlockComment && !this._noLineTerminator ? `//${comment.value}\n` : `/*${comment.value}*/`; + let val; + let maybeNewline = false; - if (isBlockComment && this.format.indent.adjustMultilineComment) { - var _comment$loc; + if (isBlockComment) { + val = `/*${comment.value}*/`; - const offset = (_comment$loc = comment.loc) == null ? void 0 : _comment$loc.start.column; + if (this.format.indent.adjustMultilineComment) { + var _comment$loc; - if (offset) { - const newlineRegex = new RegExp("\\n\\s{1," + offset + "}", "g"); - val = val.replace(newlineRegex, "\n"); - } + const offset = (_comment$loc = comment.loc) == null ? void 0 : _comment$loc.start.column; + + if (offset) { + const newlineRegex = new RegExp("\\n\\s{1," + offset + "}", "g"); + val = val.replace(newlineRegex, "\n"); + } - const indentSize = Math.max(this._getIndent().length, this.format.retainLines ? 0 : this._buf.getCurrentColumn()); - val = val.replace(/\n(?!$)/g, `\n${" ".repeat(indentSize)}`); + const indentSize = Math.max(this._getIndent(), this.format.retainLines ? 0 : this._buf.getCurrentColumn()); + val = val.replace(/\n(?!$)/g, `\n${" ".repeat(indentSize)}`); + maybeNewline = true; + } + } else if (!this._noLineTerminator) { + val = `//${comment.value}\n`; + maybeNewline = true; + } else { + val = `/*${comment.value}*/`; } if (this.endsWith(47)) this._space(); - this.withSource("start", comment.loc, () => { - this._append(val); - }); + this.withSource("start", comment.loc, this._append.bind(this, val, maybeNewline)); if (printNewLines) this.newline(1); } @@ -517,11 +591,11 @@ class Printer { this.space(); this.word("assert"); this.space(); - this.token("{"); + this.tokenChar(123); this.space(); this.printList(node.assertions, node); this.space(); - this.token("}"); + this.tokenChar(125); } } @@ -535,6 +609,8 @@ var _default = Printer; exports.default = _default; function commaSeparator() { - this.token(","); + this.tokenChar(44); this.space(); -} \ No newline at end of file +} + +//# sourceMappingURL=printer.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/lib/source-map.js b/tools/node_modules/eslint/node_modules/@babel/generator/lib/source-map.js index 99da1defd77..ec9d0b69337 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/lib/source-map.js +++ b/tools/node_modules/eslint/node_modules/@babel/generator/lib/source-map.js @@ -5,67 +5,51 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _sourceMap = require("source-map"); +var _genMapping = require("@jridgewell/gen-mapping"); class SourceMap { constructor(opts, code) { - this._cachedMap = void 0; - this._code = void 0; - this._opts = void 0; + var _opts$sourceFileName; + + this._map = void 0; this._rawMappings = void 0; - this._lastGenLine = void 0; - this._lastSourceLine = void 0; - this._lastSourceColumn = void 0; - this._cachedMap = null; - this._code = code; - this._opts = opts; - this._rawMappings = []; - } + this._sourceFileName = void 0; + this._lastGenLine = 0; + this._lastSourceLine = 0; + this._lastSourceColumn = 0; + const map = this._map = new _genMapping.GenMapping({ + sourceRoot: opts.sourceRoot + }); + this._sourceFileName = (_opts$sourceFileName = opts.sourceFileName) == null ? void 0 : _opts$sourceFileName.replace(/\\/g, "/"); + this._rawMappings = undefined; - get() { - if (!this._cachedMap) { - const map = this._cachedMap = new _sourceMap.SourceMapGenerator({ - sourceRoot: this._opts.sourceRoot + if (typeof code === "string") { + (0, _genMapping.setSourceContent)(map, this._sourceFileName, code); + } else if (typeof code === "object") { + Object.keys(code).forEach(sourceFileName => { + (0, _genMapping.setSourceContent)(map, sourceFileName.replace(/\\/g, "/"), code[sourceFileName]); }); - const code = this._code; - - if (typeof code === "string") { - map.setSourceContent(this._opts.sourceFileName.replace(/\\/g, "/"), code); - } else if (typeof code === "object") { - Object.keys(code).forEach(sourceFileName => { - map.setSourceContent(sourceFileName.replace(/\\/g, "/"), code[sourceFileName]); - }); - } - - this._rawMappings.forEach(mapping => map.addMapping(mapping), map); } - - return this._cachedMap.toJSON(); } - getRawMappings() { - return this._rawMappings.slice(); + get() { + return (0, _genMapping.toEncodedMap)(this._map); } - mark(generatedLine, generatedColumn, line, column, identifierName, filename, force) { - if (this._lastGenLine !== generatedLine && line === null) return; - - if (!force && this._lastGenLine === generatedLine && this._lastSourceLine === line && this._lastSourceColumn === column) { - return; - } + getDecoded() { + return (0, _genMapping.toDecodedMap)(this._map); + } - this._cachedMap = null; - this._lastGenLine = generatedLine; - this._lastSourceLine = line; - this._lastSourceColumn = column; + getRawMappings() { + return this._rawMappings || (this._rawMappings = (0, _genMapping.allMappings)(this._map)); + } - this._rawMappings.push({ - name: identifierName || undefined, - generated: { - line: generatedLine, - column: generatedColumn - }, - source: line == null ? undefined : (filename || this._opts.sourceFileName).replace(/\\/g, "/"), + mark(generated, line, column, identifierName, filename) { + this._rawMappings = undefined; + (0, _genMapping.maybeAddMapping)(this._map, { + name: identifierName, + generated, + source: line == null ? undefined : (filename == null ? void 0 : filename.replace(/\\/g, "/")) || this._sourceFileName, original: line == null ? undefined : { line: line, column: column @@ -75,4 +59,6 @@ class SourceMap { } -exports.default = SourceMap; \ No newline at end of file +exports.default = SourceMap; + +//# sourceMappingURL=source-map.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/LICENSE b/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/LICENSE new file mode 100644 index 00000000000..352f0715f39 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/LICENSE @@ -0,0 +1,19 @@ +Copyright 2022 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs b/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs new file mode 100644 index 00000000000..5aeb5ccc98f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs @@ -0,0 +1,230 @@ +import { SetArray, put } from '@jridgewell/set-array'; +import { encode } from '@jridgewell/sourcemap-codec'; +import { TraceMap, decodedMappings } from '@jridgewell/trace-mapping'; + +const COLUMN = 0; +const SOURCES_INDEX = 1; +const SOURCE_LINE = 2; +const SOURCE_COLUMN = 3; +const NAMES_INDEX = 4; + +const NO_NAME = -1; +/** + * A low-level API to associate a generated position with an original source position. Line and + * column here are 0-based, unlike `addMapping`. + */ +let addSegment; +/** + * A high-level API to associate a generated position with an original source position. Line is + * 1-based, but column is 0-based, due to legacy behavior in `source-map` library. + */ +let addMapping; +/** + * Same as `addSegment`, but will only add the segment if it generates useful information in the + * resulting map. This only works correctly if segments are added **in order**, meaning you should + * not add a segment with a lower generated line/column than one that came before. + */ +let maybeAddSegment; +/** + * Same as `addMapping`, but will only add the mapping if it generates useful information in the + * resulting map. This only works correctly if mappings are added **in order**, meaning you should + * not add a mapping with a lower generated line/column than one that came before. + */ +let maybeAddMapping; +/** + * Adds/removes the content of the source file to the source map. + */ +let setSourceContent; +/** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +let toDecodedMap; +/** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +let toEncodedMap; +/** + * Constructs a new GenMapping, using the already present mappings of the input. + */ +let fromMap; +/** + * Returns an array of high-level mapping objects for every recorded segment, which could then be + * passed to the `source-map` library. + */ +let allMappings; +// This split declaration is only so that terser can elminiate the static initialization block. +let addSegmentInternal; +/** + * Provides the state to generate a sourcemap. + */ +class GenMapping { + constructor({ file, sourceRoot } = {}) { + this._names = new SetArray(); + this._sources = new SetArray(); + this._sourcesContent = []; + this._mappings = []; + this.file = file; + this.sourceRoot = sourceRoot; + } +} +(() => { + addSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { + return addSegmentInternal(false, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content); + }; + maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { + return addSegmentInternal(true, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content); + }; + addMapping = (map, mapping) => { + return addMappingInternal(false, map, mapping); + }; + maybeAddMapping = (map, mapping) => { + return addMappingInternal(true, map, mapping); + }; + setSourceContent = (map, source, content) => { + const { _sources: sources, _sourcesContent: sourcesContent } = map; + sourcesContent[put(sources, source)] = content; + }; + toDecodedMap = (map) => { + const { file, sourceRoot, _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map; + removeEmptyFinalLines(mappings); + return { + version: 3, + file: file || undefined, + names: names.array, + sourceRoot: sourceRoot || undefined, + sources: sources.array, + sourcesContent, + mappings, + }; + }; + toEncodedMap = (map) => { + const decoded = toDecodedMap(map); + return Object.assign(Object.assign({}, decoded), { mappings: encode(decoded.mappings) }); + }; + allMappings = (map) => { + const out = []; + const { _mappings: mappings, _sources: sources, _names: names } = map; + for (let i = 0; i < mappings.length; i++) { + const line = mappings[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const generated = { line: i + 1, column: seg[COLUMN] }; + let source = undefined; + let original = undefined; + let name = undefined; + if (seg.length !== 1) { + source = sources.array[seg[SOURCES_INDEX]]; + original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] }; + if (seg.length === 5) + name = names.array[seg[NAMES_INDEX]]; + } + out.push({ generated, source, original, name }); + } + } + return out; + }; + fromMap = (input) => { + const map = new TraceMap(input); + const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot }); + putAll(gen._names, map.names); + putAll(gen._sources, map.sources); + gen._sourcesContent = map.sourcesContent || map.sources.map(() => null); + gen._mappings = decodedMappings(map); + return gen; + }; + // Internal helpers + addSegmentInternal = (skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { + const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map; + const line = getLine(mappings, genLine); + const index = getColumnIndex(line, genColumn); + if (!source) { + if (skipable && skipSourceless(line, index)) + return; + return insert(line, index, [genColumn]); + } + const sourcesIndex = put(sources, source); + const namesIndex = name ? put(names, name) : NO_NAME; + if (sourcesIndex === sourcesContent.length) + sourcesContent[sourcesIndex] = content !== null && content !== void 0 ? content : null; + if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) { + return; + } + return insert(line, index, name + ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] + : [genColumn, sourcesIndex, sourceLine, sourceColumn]); + }; +})(); +function getLine(mappings, index) { + for (let i = mappings.length; i <= index; i++) { + mappings[i] = []; + } + return mappings[index]; +} +function getColumnIndex(line, genColumn) { + let index = line.length; + for (let i = index - 1; i >= 0; index = i--) { + const current = line[i]; + if (genColumn >= current[COLUMN]) + break; + } + return index; +} +function insert(array, index, value) { + for (let i = array.length; i > index; i--) { + array[i] = array[i - 1]; + } + array[index] = value; +} +function removeEmptyFinalLines(mappings) { + const { length } = mappings; + let len = length; + for (let i = len - 1; i >= 0; len = i, i--) { + if (mappings[i].length > 0) + break; + } + if (len < length) + mappings.length = len; +} +function putAll(strarr, array) { + for (let i = 0; i < array.length; i++) + put(strarr, array[i]); +} +function skipSourceless(line, index) { + // The start of a line is already sourceless, so adding a sourceless segment to the beginning + // doesn't generate any useful information. + if (index === 0) + return true; + const prev = line[index - 1]; + // If the previous segment is also sourceless, then adding another sourceless segment doesn't + // genrate any new information. Else, this segment will end the source/named segment and point to + // a sourceless position, which is useful. + return prev.length === 1; +} +function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) { + // A source/named segment at the start of a line gives position at that genColumn + if (index === 0) + return false; + const prev = line[index - 1]; + // If the previous segment is sourceless, then we're transitioning to a source. + if (prev.length === 1) + return false; + // If the previous segment maps to the exact same source position, then this segment doesn't + // provide any new position information. + return (sourcesIndex === prev[SOURCES_INDEX] && + sourceLine === prev[SOURCE_LINE] && + sourceColumn === prev[SOURCE_COLUMN] && + namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME)); +} +function addMappingInternal(skipable, map, mapping) { + const { generated, source, original, name, content } = mapping; + if (!source) { + return addSegmentInternal(skipable, map, generated.line - 1, generated.column, null, null, null, null, null); + } + const s = source; + return addSegmentInternal(skipable, map, generated.line - 1, generated.column, s, original.line - 1, original.column, name, content); +} + +export { GenMapping, addMapping, addSegment, allMappings, fromMap, maybeAddMapping, maybeAddSegment, setSourceContent, toDecodedMap, toEncodedMap }; +//# sourceMappingURL=gen-mapping.mjs.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js b/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js new file mode 100644 index 00000000000..d9fcf5cff59 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js @@ -0,0 +1,236 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@jridgewell/set-array'), require('@jridgewell/sourcemap-codec'), require('@jridgewell/trace-mapping')) : + typeof define === 'function' && define.amd ? define(['exports', '@jridgewell/set-array', '@jridgewell/sourcemap-codec', '@jridgewell/trace-mapping'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.genMapping = {}, global.setArray, global.sourcemapCodec, global.traceMapping)); +})(this, (function (exports, setArray, sourcemapCodec, traceMapping) { 'use strict'; + + const COLUMN = 0; + const SOURCES_INDEX = 1; + const SOURCE_LINE = 2; + const SOURCE_COLUMN = 3; + const NAMES_INDEX = 4; + + const NO_NAME = -1; + /** + * A low-level API to associate a generated position with an original source position. Line and + * column here are 0-based, unlike `addMapping`. + */ + exports.addSegment = void 0; + /** + * A high-level API to associate a generated position with an original source position. Line is + * 1-based, but column is 0-based, due to legacy behavior in `source-map` library. + */ + exports.addMapping = void 0; + /** + * Same as `addSegment`, but will only add the segment if it generates useful information in the + * resulting map. This only works correctly if segments are added **in order**, meaning you should + * not add a segment with a lower generated line/column than one that came before. + */ + exports.maybeAddSegment = void 0; + /** + * Same as `addMapping`, but will only add the mapping if it generates useful information in the + * resulting map. This only works correctly if mappings are added **in order**, meaning you should + * not add a mapping with a lower generated line/column than one that came before. + */ + exports.maybeAddMapping = void 0; + /** + * Adds/removes the content of the source file to the source map. + */ + exports.setSourceContent = void 0; + /** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ + exports.toDecodedMap = void 0; + /** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ + exports.toEncodedMap = void 0; + /** + * Constructs a new GenMapping, using the already present mappings of the input. + */ + exports.fromMap = void 0; + /** + * Returns an array of high-level mapping objects for every recorded segment, which could then be + * passed to the `source-map` library. + */ + exports.allMappings = void 0; + // This split declaration is only so that terser can elminiate the static initialization block. + let addSegmentInternal; + /** + * Provides the state to generate a sourcemap. + */ + class GenMapping { + constructor({ file, sourceRoot } = {}) { + this._names = new setArray.SetArray(); + this._sources = new setArray.SetArray(); + this._sourcesContent = []; + this._mappings = []; + this.file = file; + this.sourceRoot = sourceRoot; + } + } + (() => { + exports.addSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { + return addSegmentInternal(false, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content); + }; + exports.maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { + return addSegmentInternal(true, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content); + }; + exports.addMapping = (map, mapping) => { + return addMappingInternal(false, map, mapping); + }; + exports.maybeAddMapping = (map, mapping) => { + return addMappingInternal(true, map, mapping); + }; + exports.setSourceContent = (map, source, content) => { + const { _sources: sources, _sourcesContent: sourcesContent } = map; + sourcesContent[setArray.put(sources, source)] = content; + }; + exports.toDecodedMap = (map) => { + const { file, sourceRoot, _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map; + removeEmptyFinalLines(mappings); + return { + version: 3, + file: file || undefined, + names: names.array, + sourceRoot: sourceRoot || undefined, + sources: sources.array, + sourcesContent, + mappings, + }; + }; + exports.toEncodedMap = (map) => { + const decoded = exports.toDecodedMap(map); + return Object.assign(Object.assign({}, decoded), { mappings: sourcemapCodec.encode(decoded.mappings) }); + }; + exports.allMappings = (map) => { + const out = []; + const { _mappings: mappings, _sources: sources, _names: names } = map; + for (let i = 0; i < mappings.length; i++) { + const line = mappings[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const generated = { line: i + 1, column: seg[COLUMN] }; + let source = undefined; + let original = undefined; + let name = undefined; + if (seg.length !== 1) { + source = sources.array[seg[SOURCES_INDEX]]; + original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] }; + if (seg.length === 5) + name = names.array[seg[NAMES_INDEX]]; + } + out.push({ generated, source, original, name }); + } + } + return out; + }; + exports.fromMap = (input) => { + const map = new traceMapping.TraceMap(input); + const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot }); + putAll(gen._names, map.names); + putAll(gen._sources, map.sources); + gen._sourcesContent = map.sourcesContent || map.sources.map(() => null); + gen._mappings = traceMapping.decodedMappings(map); + return gen; + }; + // Internal helpers + addSegmentInternal = (skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { + const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map; + const line = getLine(mappings, genLine); + const index = getColumnIndex(line, genColumn); + if (!source) { + if (skipable && skipSourceless(line, index)) + return; + return insert(line, index, [genColumn]); + } + const sourcesIndex = setArray.put(sources, source); + const namesIndex = name ? setArray.put(names, name) : NO_NAME; + if (sourcesIndex === sourcesContent.length) + sourcesContent[sourcesIndex] = content !== null && content !== void 0 ? content : null; + if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) { + return; + } + return insert(line, index, name + ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] + : [genColumn, sourcesIndex, sourceLine, sourceColumn]); + }; + })(); + function getLine(mappings, index) { + for (let i = mappings.length; i <= index; i++) { + mappings[i] = []; + } + return mappings[index]; + } + function getColumnIndex(line, genColumn) { + let index = line.length; + for (let i = index - 1; i >= 0; index = i--) { + const current = line[i]; + if (genColumn >= current[COLUMN]) + break; + } + return index; + } + function insert(array, index, value) { + for (let i = array.length; i > index; i--) { + array[i] = array[i - 1]; + } + array[index] = value; + } + function removeEmptyFinalLines(mappings) { + const { length } = mappings; + let len = length; + for (let i = len - 1; i >= 0; len = i, i--) { + if (mappings[i].length > 0) + break; + } + if (len < length) + mappings.length = len; + } + function putAll(strarr, array) { + for (let i = 0; i < array.length; i++) + setArray.put(strarr, array[i]); + } + function skipSourceless(line, index) { + // The start of a line is already sourceless, so adding a sourceless segment to the beginning + // doesn't generate any useful information. + if (index === 0) + return true; + const prev = line[index - 1]; + // If the previous segment is also sourceless, then adding another sourceless segment doesn't + // genrate any new information. Else, this segment will end the source/named segment and point to + // a sourceless position, which is useful. + return prev.length === 1; + } + function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) { + // A source/named segment at the start of a line gives position at that genColumn + if (index === 0) + return false; + const prev = line[index - 1]; + // If the previous segment is sourceless, then we're transitioning to a source. + if (prev.length === 1) + return false; + // If the previous segment maps to the exact same source position, then this segment doesn't + // provide any new position information. + return (sourcesIndex === prev[SOURCES_INDEX] && + sourceLine === prev[SOURCE_LINE] && + sourceColumn === prev[SOURCE_COLUMN] && + namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME)); + } + function addMappingInternal(skipable, map, mapping) { + const { generated, source, original, name, content } = mapping; + if (!source) { + return addSegmentInternal(skipable, map, generated.line - 1, generated.column, null, null, null, null, null); + } + const s = source; + return addSegmentInternal(skipable, map, generated.line - 1, generated.column, s, original.line - 1, original.column, name, content); + } + + exports.GenMapping = GenMapping; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=gen-mapping.umd.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/package.json b/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/package.json new file mode 100644 index 00000000000..4934de5c7b0 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/package.json @@ -0,0 +1,78 @@ +{ + "name": "@jridgewell/gen-mapping", + "version": "0.3.2", + "description": "Generate source maps", + "keywords": [ + "source", + "map" + ], + "author": "Justin Ridgewell ", + "license": "MIT", + "repository": "https://github.com/jridgewell/gen-mapping", + "main": "dist/gen-mapping.umd.js", + "module": "dist/gen-mapping.mjs", + "typings": "dist/types/gen-mapping.d.ts", + "exports": { + ".": [ + { + "types": "./dist/types/gen-mapping.d.ts", + "browser": "./dist/gen-mapping.umd.js", + "require": "./dist/gen-mapping.umd.js", + "import": "./dist/gen-mapping.mjs" + }, + "./dist/gen-mapping.umd.js" + ], + "./package.json": "./package.json" + }, + "files": [ + "dist", + "src" + ], + "engines": { + "node": ">=6.0.0" + }, + "scripts": { + "benchmark": "run-s build:rollup benchmark:*", + "benchmark:install": "cd benchmark && npm install", + "benchmark:only": "node benchmark/index.mjs", + "prebuild": "rm -rf dist", + "build": "run-s -n build:*", + "build:rollup": "rollup -c rollup.config.js", + "build:ts": "tsc --project tsconfig.build.json", + "lint": "run-s -n lint:*", + "lint:prettier": "npm run test:lint:prettier -- --write", + "lint:ts": "npm run test:lint:ts -- --fix", + "pretest": "run-s build:rollup", + "test": "run-s -n test:lint test:coverage", + "test:debug": "mocha --inspect-brk", + "test:lint": "run-s -n test:lint:*", + "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", + "test:lint:ts": "eslint '{src,test}/**/*.ts'", + "test:only": "mocha", + "test:coverage": "c8 mocha", + "test:watch": "run-p 'build:rollup -- --watch' 'test:only -- --watch'", + "prepublishOnly": "npm run preversion", + "preversion": "run-s test build" + }, + "devDependencies": { + "@rollup/plugin-typescript": "8.3.2", + "@types/mocha": "9.1.1", + "@types/node": "17.0.29", + "@typescript-eslint/eslint-plugin": "5.21.0", + "@typescript-eslint/parser": "5.21.0", + "benchmark": "2.1.4", + "c8": "7.11.2", + "eslint": "8.14.0", + "eslint-config-prettier": "8.5.0", + "mocha": "9.2.2", + "npm-run-all": "4.1.5", + "prettier": "2.6.2", + "rollup": "2.70.2", + "typescript": "4.6.3" + }, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } +} diff --git a/tools/node_modules/eslint/node_modules/@babel/generator/package.json b/tools/node_modules/eslint/node_modules/@babel/generator/package.json index 55d477fa1d1..650e044461f 100644 --- a/tools/node_modules/eslint/node_modules/@babel/generator/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/generator/package.json @@ -1,6 +1,6 @@ { "name": "@babel/generator", - "version": "7.17.3", + "version": "7.19.0", "description": "Turns an AST into code.", "author": "The Babel Team (https://babel.dev/team)", "license": "MIT", @@ -19,19 +19,19 @@ "lib" ], "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.19.0", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" }, "devDependencies": { - "@babel/helper-fixtures": "^7.17.0", - "@babel/parser": "^7.17.3", - "@jridgewell/trace-mapping": "^0.3.4", + "@babel/helper-fixtures": "^7.18.6", + "@babel/parser": "^7.19.0", + "@jridgewell/trace-mapping": "^0.3.8", "@types/jsesc": "^2.5.0", - "@types/source-map": "^0.5.0", "charcodes": "^0.2.0" }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/debug.js b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/debug.js index 4e05fdd557e..b7a6332278c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/debug.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/debug.js @@ -30,4 +30,6 @@ function getInclusionReasons(item, targetVersions, list) { return result; }, {}); -} \ No newline at end of file +} + +//# sourceMappingURL=debug.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/filter-items.js b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/filter-items.js index f47f6050f75..4cb3fa6c815 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/filter-items.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/filter-items.js @@ -85,4 +85,6 @@ function filterItems(list, includes, excludes, targets, defaultIncludes, default } return result; -} \ No newline at end of file +} + +//# sourceMappingURL=filter-items.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/index.js index c1865996afd..952d3a3d6c0 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/index.js @@ -88,31 +88,31 @@ function validateBrowsers(browsers) { function getLowestVersions(browsers) { return browsers.reduce((all, browser) => { const [browserName, browserVersion] = browser.split(" "); - const normalizedBrowserName = _targets.browserNameMap[browserName]; + const target = _targets.browserNameMap[browserName]; - if (!normalizedBrowserName) { + if (!target) { return all; } try { const splitVersion = browserVersion.split("-")[0].toLowerCase(); - const isSplitUnreleased = (0, _utils.isUnreleasedVersion)(splitVersion, browserName); + const isSplitUnreleased = (0, _utils.isUnreleasedVersion)(splitVersion, target); - if (!all[normalizedBrowserName]) { - all[normalizedBrowserName] = isSplitUnreleased ? splitVersion : (0, _utils.semverify)(splitVersion); + if (!all[target]) { + all[target] = isSplitUnreleased ? splitVersion : (0, _utils.semverify)(splitVersion); return all; } - const version = all[normalizedBrowserName]; - const isUnreleased = (0, _utils.isUnreleasedVersion)(version, browserName); + const version = all[target]; + const isUnreleased = (0, _utils.isUnreleasedVersion)(version, target); if (isUnreleased && isSplitUnreleased) { - all[normalizedBrowserName] = (0, _utils.getLowestUnreleased)(version, splitVersion, browserName); + all[target] = (0, _utils.getLowestUnreleased)(version, splitVersion, target); } else if (isUnreleased) { - all[normalizedBrowserName] = (0, _utils.semverify)(splitVersion); + all[target] = (0, _utils.semverify)(splitVersion); } else if (!isUnreleased && !isSplitUnreleased) { const parsedBrowserVersion = (0, _utils.semverify)(splitVersion); - all[normalizedBrowserName] = (0, _utils.semverMin)(version, parsedBrowserVersion); + all[target] = (0, _utils.semverMin)(version, parsedBrowserVersion); } } catch (e) {} @@ -144,18 +144,15 @@ function semverifyTarget(target, value) { } } -const targetParserMap = { - __default(target, value) { - const version = (0, _utils.isUnreleasedVersion)(value, target) ? value.toLowerCase() : semverifyTarget(target, value); - return [target, version]; - }, - - node(target, value) { - const parsed = value === true || value === "current" ? process.versions.node : semverifyTarget(target, value); - return [target, parsed]; - } +function nodeTargetParser(value) { + const parsed = value === true || value === "current" ? process.versions.node : semverifyTarget("node", value); + return ["node", parsed]; +} -}; +function defaultTargetParser(target, value) { + const version = (0, _utils.isUnreleasedVersion)(value, target) ? value.toLowerCase() : semverifyTarget(target, value); + return [target, version]; +} function generateTargets(inputTargets) { const input = Object.assign({}, inputTargets); @@ -174,7 +171,7 @@ function resolveTargets(queries, env) { } function getTargets(inputTargets = {}, options = {}) { - var _browsers; + var _browsers, _browsers2; let { browsers, @@ -209,15 +206,16 @@ function getTargets(inputTargets = {}, options = {}) { esmodules = false; } - if (browsers) { + if ((_browsers2 = browsers) != null && _browsers2.length) { const queryBrowsers = resolveTargets(browsers, options.browserslistEnv); if (esmodules === "intersect") { for (const browser of Object.keys(queryBrowsers)) { const version = queryBrowsers[browser]; + const esmSupportVersion = ESM_SUPPORT[browser]; - if (ESM_SUPPORT[browser]) { - queryBrowsers[browser] = (0, _utils.getHighestUnreleased)(version, (0, _utils.semverify)(ESM_SUPPORT[browser]), browser); + if (esmSupportVersion) { + queryBrowsers[browser] = (0, _utils.getHighestUnreleased)(version, (0, _utils.semverify)(esmSupportVersion), browser); } else { delete queryBrowsers[browser]; } @@ -231,8 +229,6 @@ function getTargets(inputTargets = {}, options = {}) { const decimalWarnings = []; for (const target of Object.keys(targets).sort()) { - var _targetParserMap$targ; - const value = targets[target]; if (typeof value === "number" && value % 1 !== 0) { @@ -242,8 +238,7 @@ function getTargets(inputTargets = {}, options = {}) { }); } - const parser = (_targetParserMap$targ = targetParserMap[target]) != null ? _targetParserMap$targ : targetParserMap.__default; - const [parsedTarget, parsedValue] = parser(target, value); + const [parsedTarget, parsedValue] = target === "node" ? nodeTargetParser(value) : defaultTargetParser(target, value); if (parsedValue) { result[parsedTarget] = parsedValue; @@ -252,4 +247,6 @@ function getTargets(inputTargets = {}, options = {}) { outputDecimalWarning(decimalWarnings); return result; -} \ No newline at end of file +} + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/options.js b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/options.js index cbf4de04aff..921f95ad4ab 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/options.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/options.js @@ -18,4 +18,6 @@ const TargetNames = { samsung: "samsung", rhino: "rhino" }; -exports.TargetNames = TargetNames; \ No newline at end of file +exports.TargetNames = TargetNames; + +//# sourceMappingURL=options.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/pretty.js b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/pretty.js index 88df6400644..322555f33e7 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/pretty.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/pretty.js @@ -44,4 +44,6 @@ function prettifyTargets(targets) { results[target] = value; return results; }, {}); -} \ No newline at end of file +} + +//# sourceMappingURL=pretty.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/targets.js b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/targets.js index 3cbaeac98e3..03c2a765487 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/targets.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/targets.js @@ -24,4 +24,6 @@ const browserNameMap = { safari: "safari", samsung: "samsung" }; -exports.browserNameMap = browserNameMap; \ No newline at end of file +exports.browserNameMap = browserNameMap; + +//# sourceMappingURL=targets.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/types.js b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/types.js index e69de29bb2d..e1c8d91c2e2 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/types.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/types.js @@ -0,0 +1,3 @@ + + +//# sourceMappingURL=types.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/utils.js b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/utils.js index 711a84f433a..f046054d7cd 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/utils.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/lib/utils.js @@ -45,10 +45,13 @@ function isUnreleasedVersion(version, env) { function getLowestUnreleased(a, b, env) { const unreleasedLabel = _targets.unreleasedLabels[env]; - const hasUnreleased = [a, b].some(item => item === unreleasedLabel); - if (hasUnreleased) { - return a === hasUnreleased ? b : a || b; + if (a === unreleasedLabel) { + return b; + } + + if (b === unreleasedLabel) { + return a; } return semverMin(a, b); @@ -66,4 +69,6 @@ function getLowestImplementedVersion(plugin, environment) { } return result; -} \ No newline at end of file +} + +//# sourceMappingURL=utils.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/package.json index d35c3687d54..7ce3ba03d43 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-compilation-targets/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-compilation-targets", - "version": "7.16.7", + "version": "7.19.1", "author": "The Babel Team (https://babel.dev/team)", "license": "MIT", "description": "Helper functions on Babel compilation targets", @@ -22,20 +22,21 @@ "babel-plugin" ], "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "@babel/compat-data": "^7.19.1", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "peerDependencies": { "@babel/core": "^7.0.0" }, "devDependencies": { - "@babel/core": "^7.16.7", - "@babel/helper-plugin-test-runner": "^7.16.7", + "@babel/core": "^7.19.1", + "@babel/helper-plugin-test-runner": "^7.18.6", "@types/semver": "^5.5.0" }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-environment-visitor/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helper-environment-visitor/lib/index.js index e85bf132e8f..bf1a3038b93 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-environment-visitor/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-environment-visitor/lib/index.js @@ -4,35 +4,56 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; +exports.requeueComputedKeyAndDecorators = requeueComputedKeyAndDecorators; exports.skipAllButComputedKey = skipAllButComputedKey; -var _t = require("@babel/types"); - -const { - VISITOR_KEYS, - staticBlock -} = _t; - function skipAllButComputedKey(path) { - if (!path.node.computed) { - path.skip(); - return; + path.skip(); + + if (path.node.computed) { + path.context.maybeQueue(path.get("key")); } +} - const keys = VISITOR_KEYS[path.type]; +function requeueComputedKeyAndDecorators(path) { + const { + context, + node + } = path; - for (const key of keys) { - if (key !== "key") path.skipKey(key); + if (node.computed) { + context.maybeQueue(path.get("key")); + } + + if (node.decorators) { + for (const decorator of path.get("decorators")) { + context.maybeQueue(decorator); + } } } -const skipKey = (staticBlock ? "StaticBlock|" : "") + "ClassPrivateProperty|TypeAnnotation|FunctionDeclaration|FunctionExpression"; -var _default = { - [skipKey]: path => path.skip(), +const visitor = { + FunctionParent(path) { + if (path.isArrowFunctionExpression()) { + return; + } else { + path.skip(); + + if (path.isMethod()) { + requeueComputedKeyAndDecorators(path); + } + } + }, - "Method|ClassProperty"(path) { - skipAllButComputedKey(path); + Property(path) { + if (path.isObjectProperty()) { + return; + } + + path.skip(); + requeueComputedKeyAndDecorators(path); } }; +var _default = visitor; exports.default = _default; \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-environment-visitor/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-environment-visitor/package.json index ffc31a3ca89..df55f7caf85 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-environment-visitor/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-environment-visitor/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-environment-visitor", - "version": "7.16.7", + "version": "7.18.9", "description": "Helper visitor to only visit nodes in the current 'this' context", "repository": { "type": "git", @@ -17,14 +17,13 @@ ".": "./lib/index.js", "./package.json": "./package.json" }, - "dependencies": { - "@babel/types": "^7.16.7" - }, "devDependencies": { - "@babel/traverse": "^7.16.7" + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" }, - "author": "The Babel Team (https://babel.dev/team)" + "author": "The Babel Team (https://babel.dev/team)", + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-function-name/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helper-function-name/lib/index.js index 2fa33dccc3f..b90c3fc2305 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-function-name/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-function-name/lib/index.js @@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = _default; -var _helperGetFunctionArity = require("@babel/helper-get-function-arity"); - var _template = require("@babel/template"); var _t = require("@babel/types"); @@ -16,6 +14,7 @@ const { cloneNode, identifier, isAssignmentExpression, + isAssignmentPattern, isFunction, isIdentifier, isLiteral, @@ -23,11 +22,18 @@ const { isObjectMethod, isObjectProperty, isRegExpLiteral, + isRestElement, isTemplateLiteral, isVariableDeclarator, toBindingIdentifierName } = _t; -const buildPropertyMethodAssignmentWrapper = (0, _template.default)(` + +function getFunctionArity(node) { + const count = node.params.findIndex(param => isAssignmentPattern(param) || isRestElement(param)); + return count === -1 ? node.params.length : count; +} + +const buildPropertyMethodAssignmentWrapper = _template.default.statement(` (function (FUNCTION_KEY) { function FUNCTION_ID() { return FUNCTION_KEY.apply(this, arguments); @@ -40,7 +46,8 @@ const buildPropertyMethodAssignmentWrapper = (0, _template.default)(` return FUNCTION_ID; })(FUNCTION) `); -const buildGeneratorPropertyMethodAssignmentWrapper = (0, _template.default)(` + +const buildGeneratorPropertyMethodAssignmentWrapper = _template.default.statement(` (function (FUNCTION_KEY) { function* FUNCTION_ID() { return yield* FUNCTION_KEY.apply(this, arguments); @@ -53,6 +60,7 @@ const buildGeneratorPropertyMethodAssignmentWrapper = (0, _template.default)(` return FUNCTION_ID; })(FUNCTION) `); + const visitor = { "ReferencedIdentifier|BindingIdentifier"(path, state) { if (path.node.name !== state.name) return; @@ -103,7 +111,7 @@ function wrap(state, method, id, scope) { }).expression; const params = template.callee.body.body[0].params; - for (let i = 0, len = (0, _helperGetFunctionArity.default)(method); i < len; i++) { + for (let i = 0, len = getFunctionArity(method); i < len; i++) { params.push(scope.generateUidIdentifier("x")); } @@ -120,7 +128,6 @@ function visit(node, name, scope) { selfAssignment: false, selfReference: false, outerDeclar: scope.getBindingIdentifier(name), - references: [], name: name }; const binding = scope.getOwnBinding(name); @@ -185,8 +192,10 @@ function _default({ } name = toBindingIdentifierName(name); - id = identifier(name); - id[NOT_LOCAL_BINDING] = true; + const newId = identifier(name); + newId[NOT_LOCAL_BINDING] = true; const state = visit(node, name, scope); - return wrap(state, node, id, scope) || node; -} \ No newline at end of file + return wrap(state, node, newId, scope) || node; +} + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-function-name/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-function-name/package.json index 1a46e7ce760..14e690bf60d 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-function-name/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-function-name/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-function-name", - "version": "7.16.7", + "version": "7.19.0", "description": "Helper function to change the property 'name' of every function", "repository": { "type": "git", @@ -14,12 +14,12 @@ }, "main": "./lib/index.js", "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" }, - "author": "The Babel Team (https://babel.dev/team)" + "author": "The Babel Team (https://babel.dev/team)", + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-get-function-arity/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helper-get-function-arity/lib/index.js deleted file mode 100644 index 61e22edd292..00000000000 --- a/tools/node_modules/eslint/node_modules/@babel/helper-get-function-arity/lib/index.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = _default; - -var _t = require("@babel/types"); - -const { - isAssignmentPattern, - isRestElement -} = _t; - -function _default(node) { - const params = node.params; - - for (let i = 0; i < params.length; i++) { - const param = params[i]; - - if (isAssignmentPattern(param) || isRestElement(param)) { - return i; - } - } - - return params.length; -} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-get-function-arity/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-get-function-arity/package.json deleted file mode 100644 index 4ea756238ff..00000000000 --- a/tools/node_modules/eslint/node_modules/@babel/helper-get-function-arity/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@babel/helper-get-function-arity", - "version": "7.16.7", - "description": "Helper function to get function arity", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel.git", - "directory": "packages/babel-helper-get-function-arity" - }, - "homepage": "https://babel.dev/docs/en/next/babel-helper-get-function-arity", - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "main": "./lib/index.js", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "author": "The Babel Team (https://babel.dev/team)" -} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-hoist-variables/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-hoist-variables/package.json index ec99d90ed3b..0d925300296 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-hoist-variables/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-hoist-variables/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-hoist-variables", - "version": "7.16.7", + "version": "7.18.6", "description": "Helper function to hoist variables", "repository": { "type": "git", @@ -14,14 +14,15 @@ }, "main": "./lib/index.js", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "TODO": "The @babel/traverse dependency is only needed for the NodePath TS type. We can consider exporting it from @babel/core.", "devDependencies": { - "@babel/traverse": "^7.16.7" + "@babel/traverse": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, - "author": "The Babel Team (https://babel.dev/team)" + "author": "The Babel Team (https://babel.dev/team)", + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/lib/import-builder.js b/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/lib/import-builder.js index 8a1800e64cb..907f6fd2bb7 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/lib/import-builder.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/lib/import-builder.js @@ -28,8 +28,6 @@ class ImportBuilder { constructor(importedSource, scope, hub) { this._statements = []; this._resultName = null; - this._scope = null; - this._hub = null; this._importedSource = void 0; this._scope = scope; this._hub = hub; @@ -70,34 +68,38 @@ class ImportBuilder { } default(name) { - name = this._scope.generateUidIdentifier(name); + const id = this._scope.generateUidIdentifier(name); + const statement = this._statements[this._statements.length - 1]; _assert(statement.type === "ImportDeclaration"); _assert(statement.specifiers.length === 0); - statement.specifiers = [importDefaultSpecifier(name)]; - this._resultName = cloneNode(name); + statement.specifiers = [importDefaultSpecifier(id)]; + this._resultName = cloneNode(id); return this; } named(name, importName) { if (importName === "default") return this.default(name); - name = this._scope.generateUidIdentifier(name); + + const id = this._scope.generateUidIdentifier(name); + const statement = this._statements[this._statements.length - 1]; _assert(statement.type === "ImportDeclaration"); _assert(statement.specifiers.length === 0); - statement.specifiers = [importSpecifier(name, identifier(importName))]; - this._resultName = cloneNode(name); + statement.specifiers = [importSpecifier(id, identifier(importName))]; + this._resultName = cloneNode(id); return this; } var(name) { - name = this._scope.generateUidIdentifier(name); + const id = this._scope.generateUidIdentifier(name); + let statement = this._statements[this._statements.length - 1]; if (statement.type !== "ExpressionStatement") { @@ -108,8 +110,8 @@ class ImportBuilder { this._statements.push(statement); } - this._statements[this._statements.length - 1] = variableDeclaration("var", [variableDeclarator(name, statement.expression)]); - this._resultName = cloneNode(name); + this._statements[this._statements.length - 1] = variableDeclaration("var", [variableDeclarator(id, statement.expression)]); + this._resultName = cloneNode(id); return this; } diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/lib/import-injector.js b/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/lib/import-injector.js index adb9627ef39..cb3bf598590 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/lib/import-injector.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/lib/import-injector.js @@ -51,35 +51,25 @@ class ImportInjector { } addSideEffect(importedSourceIn, opts) { - return this._generateImport(this._applyDefaults(importedSourceIn, opts), false); + return this._generateImport(this._applyDefaults(importedSourceIn, opts), void 0); } _applyDefaults(importedSource, opts, isInit = false) { - const optsList = []; + let newOpts; if (typeof importedSource === "string") { - optsList.push({ + newOpts = Object.assign({}, this._defaultOpts, { importedSource - }); - optsList.push(opts); + }, opts); } else { _assert(!opts, "Unexpected secondary arguments."); - optsList.push(importedSource); + newOpts = Object.assign({}, this._defaultOpts, importedSource); } - const newOpts = Object.assign({}, this._defaultOpts); - - for (const opts of optsList) { - if (!opts) continue; - Object.keys(newOpts).forEach(key => { - if (opts[key] !== undefined) newOpts[key] = opts[key]; - }); - - if (!isInit) { - if (opts.nameHint !== undefined) newOpts.nameHint = opts.nameHint; - if (opts.blockHoist !== undefined) newOpts.blockHoist = opts.blockHoist; - } + if (!isInit && opts) { + if (opts.nameHint !== undefined) newOpts.nameHint = opts.nameHint; + if (opts.blockHoist !== undefined) newOpts.blockHoist = opts.blockHoist; } return newOpts; diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/package.json index 7814505e620..9301d3e17d9 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-module-imports/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-module-imports", - "version": "7.16.7", + "version": "7.18.6", "description": "Babel helper functions for inserting module loads", "author": "The Babel Team (https://babel.dev/team)", "homepage": "https://babel.dev/docs/en/next/babel-helper-module-imports", @@ -15,13 +15,14 @@ }, "main": "./lib/index.js", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "devDependencies": { - "@babel/core": "^7.16.7", - "@babel/traverse": "^7.16.7" + "@babel/core": "^7.18.6", + "@babel/traverse": "^7.18.6" }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/get-module-name.js b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/get-module-name.js index 87c2b83590e..b6f04634fc1 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/get-module-name.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/get-module-name.js @@ -51,4 +51,6 @@ function getModuleName(rootOpts, pluginOpts) { } else { return moduleName; } -} \ No newline at end of file +} + +//# sourceMappingURL=get-module-name.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/index.js index b9688eb6078..7eab7f9261d 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/index.js @@ -80,6 +80,7 @@ function rewriteModuleStatementsAndPrepareHeader(path, { importInterop = noInterop ? "none" : "babel", lazy, esNamespaceOnly, + filename, constantReexports = loose, enumerableModuleMeta = loose, noIncompleteNsImportDetection @@ -93,7 +94,8 @@ function rewriteModuleStatementsAndPrepareHeader(path, { importInterop, initializeReexports: constantReexports, lazy, - esNamespaceOnly + esNamespaceOnly, + filename }); if (!allowTopLevelThis) { @@ -369,7 +371,9 @@ function buildExportInitializationStatements(programPath, metadata, constantReex } else { const chunkSize = 100; - for (let i = 0, uninitializedExportNames = []; i < initStatements.length; i += chunkSize) { + for (let i = 0; i < initStatements.length; i += chunkSize) { + let uninitializedExportNames = []; + for (let j = 0; j < chunkSize && i + j < initStatements.length; j++) { const [exportName, initStatement] = initStatements[i + j]; @@ -417,4 +421,6 @@ function buildInitStatement(metadata, exportNames, initExpr) { return InitTemplate.default(params); } }, initExpr)); -} \ No newline at end of file +} + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js index f98ee95e0f7..8f57519d90c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js @@ -30,9 +30,9 @@ function validateImportInteropOption(importInterop) { return importInterop; } -function resolveImportInterop(importInterop, source) { +function resolveImportInterop(importInterop, source, filename) { if (typeof importInterop === "function") { - return validateImportInteropOption(importInterop(source)); + return validateImportInteropOption(importInterop(source, filename)); } return importInterop; @@ -42,7 +42,8 @@ function normalizeModuleAndLoadMetadata(programPath, exportName, { importInterop, initializeReexports = false, lazy = false, - esNamespaceOnly = false + esNamespaceOnly = false, + filename }) { if (!exportName) { exportName = programPath.scope.generateUidIdentifier("exports").name; @@ -65,7 +66,7 @@ function normalizeModuleAndLoadMetadata(programPath, exportName, { metadata.name = metadata.importsNamespace.values().next().value; } - const resolvedInterop = resolveImportInterop(importInterop, metadata.source); + const resolvedInterop = resolveImportInterop(importInterop, metadata.source, filename); if (resolvedInterop === "none") { metadata.interop = "none"; @@ -269,7 +270,9 @@ function getLocalExportMetadata(programPath, initializeReexports, stringSpecifie if (child.isImportDeclaration()) { kind = "import"; } else { - if (child.isExportDefaultDeclaration()) child = child.get("declaration"); + if (child.isExportDefaultDeclaration()) { + child = child.get("declaration"); + } if (child.isExportNamedDeclaration()) { if (child.node.declaration) { @@ -395,4 +398,6 @@ function removeModuleDeclarations(programPath) { child.remove(); } }); -} \ No newline at end of file +} + +//# sourceMappingURL=normalize-and-load-metadata.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/rewrite-live-references.js b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/rewrite-live-references.js index 8173fd57f24..6782ea906f3 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/rewrite-live-references.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/rewrite-live-references.js @@ -90,7 +90,7 @@ function rewriteLiveReferences(programPath, metadata) { exported }; programPath.traverse(rewriteBindingInitVisitor, rewriteBindingInitVisitorState); - (0, _helperSimpleAccess.default)(programPath, new Set([...Array.from(imported.keys()), ...Array.from(exported.keys())])); + (0, _helperSimpleAccess.default)(programPath, new Set([...Array.from(imported.keys()), ...Array.from(exported.keys())]), false); const rewriteReferencesVisitorState = { seen: new WeakSet(), metadata, @@ -102,7 +102,10 @@ function rewriteLiveReferences(programPath, metadata) { const meta = metadata.source.get(source); if (localName) { - if (meta.lazy) identNode = callExpression(identNode, []); + if (meta.lazy) { + identNode = callExpression(identNode, []); + } + return identNode; } @@ -139,7 +142,7 @@ const rewriteBindingInitVisitor = { const exportNames = exported.get(localName) || []; if (exportNames.length > 0) { - const statement = expressionStatement(buildBindingExportAssignmentExpression(metadata, exportNames, identifier(localName))); + const statement = expressionStatement(buildBindingExportAssignmentExpression(metadata, exportNames, identifier(localName), path.scope)); statement._blockHoist = path.node._blockHoist; requeueInParent(path.insertAfter(statement)[0]); } @@ -155,7 +158,7 @@ const rewriteBindingInitVisitor = { const exportNames = exported.get(localName) || []; if (exportNames.length > 0) { - const statement = expressionStatement(buildBindingExportAssignmentExpression(metadata, exportNames, identifier(localName))); + const statement = expressionStatement(buildBindingExportAssignmentExpression(metadata, exportNames, identifier(localName), path.scope)); statement._blockHoist = path.node._blockHoist; requeueInParent(path.insertAfter(statement)[0]); } @@ -164,13 +167,21 @@ const rewriteBindingInitVisitor = { }; -const buildBindingExportAssignmentExpression = (metadata, exportNames, localExpr) => { +const buildBindingExportAssignmentExpression = (metadata, exportNames, localExpr, scope) => { + const exportsObjectName = metadata.exportName; + + for (let currentScope = scope; currentScope != null; currentScope = currentScope.parent) { + if (currentScope.hasOwnBinding(exportsObjectName)) { + currentScope.rename(exportsObjectName); + } + } + return (exportNames || []).reduce((expr, exportName) => { const { stringSpecifiers } = metadata; const computed = stringSpecifiers.has(exportName); - return assignmentExpression("=", memberExpression(identifier(metadata.exportName), computed ? stringLiteral(exportName) : identifier(exportName), computed), expr); + return assignmentExpression("=", memberExpression(identifier(exportsObjectName), computed ? stringLiteral(exportName) : identifier(exportName), computed), expr); }, localExpr); }; @@ -230,6 +241,47 @@ const rewriteReferencesVisitor = { } }, + UpdateExpression(path) { + const { + scope, + seen, + imported, + exported, + requeueInParent, + buildImportReference + } = this; + if (seen.has(path.node)) return; + seen.add(path.node); + const arg = path.get("argument"); + if (arg.isMemberExpression()) return; + const update = path.node; + + if (arg.isIdentifier()) { + const localName = arg.node.name; + + if (scope.getBinding(localName) !== path.scope.getBinding(localName)) { + return; + } + + const exportedNames = exported.get(localName); + const importData = imported.get(localName); + + if ((exportedNames == null ? void 0 : exportedNames.length) > 0 || importData) { + if (importData) { + path.replaceWith(assignmentExpression(update.operator[0] + "=", buildImportReference(importData, arg.node), buildImportThrow(localName))); + } else if (update.prefix) { + path.replaceWith(buildBindingExportAssignmentExpression(this.metadata, exportedNames, cloneNode(update), path.scope)); + } else { + const ref = scope.generateDeclaredUidIdentifier(localName); + path.replaceWith(sequenceExpression([assignmentExpression("=", cloneNode(ref), cloneNode(update)), buildBindingExportAssignmentExpression(this.metadata, exportedNames, identifier(localName), path.scope), cloneNode(ref)])); + } + } + } + + requeueInParent(path); + path.skip(); + }, + AssignmentExpression: { exit(path) { const { @@ -261,11 +313,11 @@ const rewriteReferencesVisitor = { const assignment = path.node; if (importData) { - assignment.left = buildImportReference(importData, assignment.left); + assignment.left = buildImportReference(importData, left.node); assignment.right = sequenceExpression([assignment.right, buildImportThrow(localName)]); } - path.replaceWith(buildBindingExportAssignmentExpression(this.metadata, exportedNames, assignment)); + path.replaceWith(buildBindingExportAssignmentExpression(this.metadata, exportedNames, assignment, path.scope)); requeueInParent(path); } } else { @@ -282,7 +334,7 @@ const rewriteReferencesVisitor = { const exportedNames = exported.get(localName) || []; if (exportedNames.length > 0) { - items.push(buildBindingExportAssignmentExpression(this.metadata, exportedNames, identifier(localName))); + items.push(buildBindingExportAssignmentExpression(this.metadata, exportedNames, identifier(localName), path.scope)); } }); @@ -357,4 +409,6 @@ const rewriteReferencesVisitor = { } } -}; \ No newline at end of file +}; + +//# sourceMappingURL=rewrite-live-references.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/rewrite-this.js b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/rewrite-this.js index 91655399a1b..9696b5fee17 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/rewrite-this.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/lib/rewrite-this.js @@ -27,4 +27,6 @@ const rewriteThisVisitor = _traverse.default.visitors.merge([_helperEnvironmentV path.replaceWith(unaryExpression("void", numericLiteral(0), true)); } -}]); \ No newline at end of file +}]); + +//# sourceMappingURL=rewrite-this.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/package.json index 267d86bbeb4..e673508e385 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-module-transforms/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-module-transforms", - "version": "7.17.6", + "version": "7.19.0", "description": "Babel helper functions for implementing ES6 module transformations", "author": "The Babel Team (https://babel.dev/team)", "homepage": "https://babel.dev/docs/en/next/babel-helper-module-transforms", @@ -15,16 +15,17 @@ }, "main": "./lib/index.js", "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-plugin-utils/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helper-plugin-utils/lib/index.js index 0ba1be02219..5663944915b 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-plugin-utils/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-plugin-utils/lib/index.js @@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.declare = declare; +exports.declarePreset = void 0; function declare(builder) { return (api, options, dirname) => { @@ -23,6 +24,8 @@ function declare(builder) { }; } +const declarePreset = declare; +exports.declarePreset = declarePreset; const apiPolyfills = { assertVersion: api => range => { throwVersionError(range, api.version); @@ -30,7 +33,9 @@ const apiPolyfills = { targets: () => () => { return {}; }, - assumption: () => () => {} + assumption: () => () => { + return undefined; + } }; function copyApiObject(api) { @@ -87,4 +92,6 @@ function throwVersionError(range, version) { version, range }); -} \ No newline at end of file +} + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-plugin-utils/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-plugin-utils/package.json index 740d52ac360..979b172861a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-plugin-utils/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-plugin-utils/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-plugin-utils", - "version": "7.16.7", + "version": "7.19.0", "description": "General utilities for plugins to use", "author": "The Babel Team (https://babel.dev/team)", "homepage": "https://babel.dev/docs/en/next/babel-helper-plugin-utils", @@ -16,5 +16,6 @@ "main": "./lib/index.js", "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-simple-access/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helper-simple-access/lib/index.js index 69bacda62d3..0f19aea7962 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-simple-access/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-simple-access/lib/index.js @@ -19,11 +19,12 @@ const { unaryExpression } = _t; -function simplifyAccess(path, bindingNames) { +function simplifyAccess(path, bindingNames, includeUpdateExpression = true) { path.traverse(simpleAssignmentVisitor, { scope: path.scope, bindingNames, - seen: new WeakSet() + seen: new WeakSet(), + includeUpdateExpression }); } @@ -32,8 +33,14 @@ const simpleAssignmentVisitor = { exit(path) { const { scope, - bindingNames + bindingNames, + includeUpdateExpression } = this; + + if (!includeUpdateExpression) { + return; + } + const arg = path.get("argument"); if (!arg.isIdentifier()) return; const localName = arg.node.name; diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-simple-access/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-simple-access/package.json index e30c7eda747..b360910a849 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-simple-access/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-simple-access/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-simple-access", - "version": "7.16.7", + "version": "7.18.6", "description": "Babel helper for ensuring that access to a given value is performed through simple accesses", "author": "The Babel Team (https://babel.dev/team)", "homepage": "https://babel.dev/docs/en/next/babel-helper-simple-access", @@ -15,12 +15,13 @@ }, "main": "./lib/index.js", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "devDependencies": { - "@babel/traverse": "^7.16.7" + "@babel/traverse": "^7.18.6" }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-split-export-declaration/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helper-split-export-declaration/lib/index.js index 6007f89c28d..89cb62fed09 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-split-export-declaration/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-split-export-declaration/lib/index.js @@ -17,16 +17,13 @@ const { } = _t; function splitExportDeclaration(exportDeclaration) { - if (!exportDeclaration.isExportDeclaration()) { - throw new Error("Only export declarations can be split."); + if (!exportDeclaration.isExportDeclaration() || exportDeclaration.isExportAllDeclaration()) { + throw new Error("Only default and named export declarations can be split."); } - const isDefault = exportDeclaration.isExportDefaultDeclaration(); - const declaration = exportDeclaration.get("declaration"); - const isClassDeclaration = declaration.isClassDeclaration(); - - if (isDefault) { - const standaloneDeclaration = declaration.isFunctionDeclaration() || isClassDeclaration; + if (exportDeclaration.isExportDefaultDeclaration()) { + const declaration = exportDeclaration.get("declaration"); + const standaloneDeclaration = declaration.isFunctionDeclaration() || declaration.isClassDeclaration(); const scope = declaration.isScope() ? declaration.scope.parent : declaration.scope; let id = declaration.node.id; let needBindingRegistration = false; @@ -40,7 +37,7 @@ function splitExportDeclaration(exportDeclaration) { } } - const updatedDeclaration = standaloneDeclaration ? declaration : variableDeclaration("var", [variableDeclarator(cloneNode(id), declaration.node)]); + const updatedDeclaration = standaloneDeclaration ? declaration.node : variableDeclaration("var", [variableDeclarator(cloneNode(id), declaration.node)]); const updatedExportDeclaration = exportNamedDeclaration(null, [exportSpecifier(cloneNode(id), identifier("default"))]); exportDeclaration.insertAfter(updatedExportDeclaration); exportDeclaration.replaceWith(updatedDeclaration); @@ -50,12 +47,11 @@ function splitExportDeclaration(exportDeclaration) { } return exportDeclaration; - } - - if (exportDeclaration.get("specifiers").length > 0) { + } else if (exportDeclaration.get("specifiers").length > 0) { throw new Error("It doesn't make sense to split exported specifiers."); } + const declaration = exportDeclaration.get("declaration"); const bindingIdentifiers = declaration.getOuterBindingIdentifiers(); const specifiers = Object.keys(bindingIdentifiers).map(name => { return exportSpecifier(identifier(name), identifier(name)); diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-split-export-declaration/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-split-export-declaration/package.json index 3836b192d4d..d2edb7fbcd4 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-split-export-declaration/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-split-export-declaration/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-split-export-declaration", - "version": "7.16.7", + "version": "7.18.6", "description": "", "repository": { "type": "git", @@ -14,10 +14,11 @@ }, "main": "./lib/index.js", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, - "author": "The Babel Team (https://babel.dev/team)" + "author": "The Babel Team (https://babel.dev/team)", + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-get-function-arity/LICENSE b/tools/node_modules/eslint/node_modules/@babel/helper-string-parser/LICENSE similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/helper-get-function-arity/LICENSE rename to tools/node_modules/eslint/node_modules/@babel/helper-string-parser/LICENSE diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-string-parser/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helper-string-parser/lib/index.js new file mode 100644 index 00000000000..737ce62ec50 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/helper-string-parser/lib/index.js @@ -0,0 +1,328 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.readCodePoint = readCodePoint; +exports.readInt = readInt; +exports.readStringContents = readStringContents; + +var _isDigit = function isDigit(code) { + return code >= 48 && code <= 57; +}; + +const forbiddenNumericSeparatorSiblings = { + decBinOct: new Set([46, 66, 69, 79, 95, 98, 101, 111]), + hex: new Set([46, 88, 95, 120]) +}; +const isAllowedNumericSeparatorSibling = { + bin: ch => ch === 48 || ch === 49, + oct: ch => ch >= 48 && ch <= 55, + dec: ch => ch >= 48 && ch <= 57, + hex: ch => ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102 +}; + +function readStringContents(type, input, pos, lineStart, curLine, errors) { + const initialPos = pos; + const initialLineStart = lineStart; + const initialCurLine = curLine; + let out = ""; + let containsInvalid = false; + let chunkStart = pos; + const { + length + } = input; + + for (;;) { + if (pos >= length) { + errors.unterminated(initialPos, initialLineStart, initialCurLine); + out += input.slice(chunkStart, pos); + break; + } + + const ch = input.charCodeAt(pos); + + if (isStringEnd(type, ch, input, pos)) { + out += input.slice(chunkStart, pos); + break; + } + + if (ch === 92) { + out += input.slice(chunkStart, pos); + let escaped; + ({ + ch: escaped, + pos, + lineStart, + curLine + } = readEscapedChar(input, pos, lineStart, curLine, type === "template", errors)); + + if (escaped === null) { + containsInvalid = true; + } else { + out += escaped; + } + + chunkStart = pos; + } else if (ch === 8232 || ch === 8233) { + ++pos; + ++curLine; + lineStart = pos; + } else if (ch === 10 || ch === 13) { + if (type === "template") { + out += input.slice(chunkStart, pos) + "\n"; + ++pos; + + if (ch === 13 && input.charCodeAt(pos) === 10) { + ++pos; + } + + ++curLine; + chunkStart = lineStart = pos; + } else { + errors.unterminated(initialPos, initialLineStart, initialCurLine); + } + } else { + ++pos; + } + } + + return { + pos, + str: out, + containsInvalid, + lineStart, + curLine + }; +} + +function isStringEnd(type, ch, input, pos) { + if (type === "template") { + return ch === 96 || ch === 36 && input.charCodeAt(pos + 1) === 123; + } + + return ch === (type === "double" ? 34 : 39); +} + +function readEscapedChar(input, pos, lineStart, curLine, inTemplate, errors) { + const throwOnInvalid = !inTemplate; + pos++; + + const res = ch => ({ + pos, + ch, + lineStart, + curLine + }); + + const ch = input.charCodeAt(pos++); + + switch (ch) { + case 110: + return res("\n"); + + case 114: + return res("\r"); + + case 120: + { + let code; + ({ + code, + pos + } = readHexChar(input, pos, lineStart, curLine, 2, false, throwOnInvalid, errors)); + return res(code === null ? null : String.fromCharCode(code)); + } + + case 117: + { + let code; + ({ + code, + pos + } = readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors)); + return res(code === null ? null : String.fromCodePoint(code)); + } + + case 116: + return res("\t"); + + case 98: + return res("\b"); + + case 118: + return res("\u000b"); + + case 102: + return res("\f"); + + case 13: + if (input.charCodeAt(pos) === 10) { + ++pos; + } + + case 10: + lineStart = pos; + ++curLine; + + case 8232: + case 8233: + return res(""); + + case 56: + case 57: + if (inTemplate) { + return res(null); + } else { + errors.strictNumericEscape(pos - 1, lineStart, curLine); + } + + default: + if (ch >= 48 && ch <= 55) { + const startPos = pos - 1; + const match = input.slice(startPos, pos + 2).match(/^[0-7]+/); + let octalStr = match[0]; + let octal = parseInt(octalStr, 8); + + if (octal > 255) { + octalStr = octalStr.slice(0, -1); + octal = parseInt(octalStr, 8); + } + + pos += octalStr.length - 1; + const next = input.charCodeAt(pos); + + if (octalStr !== "0" || next === 56 || next === 57) { + if (inTemplate) { + return res(null); + } else { + errors.strictNumericEscape(startPos, lineStart, curLine); + } + } + + return res(String.fromCharCode(octal)); + } + + return res(String.fromCharCode(ch)); + } +} + +function readHexChar(input, pos, lineStart, curLine, len, forceLen, throwOnInvalid, errors) { + const initialPos = pos; + let n; + ({ + n, + pos + } = readInt(input, pos, lineStart, curLine, 16, len, forceLen, false, errors)); + + if (n === null) { + if (throwOnInvalid) { + errors.invalidEscapeSequence(initialPos, lineStart, curLine); + } else { + pos = initialPos - 1; + } + } + + return { + code: n, + pos + }; +} + +function readInt(input, pos, lineStart, curLine, radix, len, forceLen, allowNumSeparator, errors) { + const start = pos; + const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct; + const isAllowedSibling = radix === 16 ? isAllowedNumericSeparatorSibling.hex : radix === 10 ? isAllowedNumericSeparatorSibling.dec : radix === 8 ? isAllowedNumericSeparatorSibling.oct : isAllowedNumericSeparatorSibling.bin; + let invalid = false; + let total = 0; + + for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) { + const code = input.charCodeAt(pos); + let val; + + if (code === 95 && allowNumSeparator !== "bail") { + const prev = input.charCodeAt(pos - 1); + const next = input.charCodeAt(pos + 1); + + if (!allowNumSeparator) { + errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine); + } else if (Number.isNaN(next) || !isAllowedSibling(next) || forbiddenSiblings.has(prev) || forbiddenSiblings.has(next)) { + errors.unexpectedNumericSeparator(pos, lineStart, curLine); + } + + ++pos; + continue; + } + + if (code >= 97) { + val = code - 97 + 10; + } else if (code >= 65) { + val = code - 65 + 10; + } else if (_isDigit(code)) { + val = code - 48; + } else { + val = Infinity; + } + + if (val >= radix) { + if (val <= 9 && errors.invalidDigit(pos, lineStart, curLine, radix)) { + val = 0; + } else if (forceLen) { + val = 0; + invalid = true; + } else { + break; + } + } + + ++pos; + total = total * radix + val; + } + + if (pos === start || len != null && pos - start !== len || invalid) { + return { + n: null, + pos + }; + } + + return { + n: total, + pos + }; +} + +function readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) { + const ch = input.charCodeAt(pos); + let code; + + if (ch === 123) { + ++pos; + ({ + code, + pos + } = readHexChar(input, pos, lineStart, curLine, input.indexOf("}", pos) - pos, true, throwOnInvalid, errors)); + ++pos; + + if (code !== null && code > 0x10ffff) { + if (throwOnInvalid) { + errors.invalidCodePoint(pos, lineStart, curLine); + } else { + return { + code: null, + pos + }; + } + } + } else { + ({ + code, + pos + } = readHexChar(input, pos, lineStart, curLine, 4, false, throwOnInvalid, errors)); + } + + return { + code, + pos + }; +} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-string-parser/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-string-parser/package.json new file mode 100644 index 00000000000..b25007bfb35 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/helper-string-parser/package.json @@ -0,0 +1,28 @@ +{ + "name": "@babel/helper-string-parser", + "version": "7.18.10", + "description": "A utility package to parse strings", + "repository": { + "type": "git", + "url": "https://github.com/babel/babel.git", + "directory": "packages/babel-helper-string-parser" + }, + "homepage": "https://babel.dev/docs/en/next/babel-helper-string-parser", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "main": "./lib/index.js", + "devDependencies": { + "charcodes": "^0.2.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "author": "The Babel Team (https://babel.dev/team)", + "exports": { + ".": "./lib/index.js", + "./package.json": "./package.json" + }, + "type": "commonjs" +} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/identifier.js b/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/identifier.js index cbade222d16..3a9e335e62b 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/identifier.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/identifier.js @@ -7,12 +7,12 @@ exports.isIdentifierChar = isIdentifierChar; exports.isIdentifierName = isIdentifierName; exports.isIdentifierStart = isIdentifierStart; let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; -let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; +let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; -const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1070, 4050, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 46, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 482, 44, 11, 6, 17, 0, 322, 29, 19, 43, 1269, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4152, 8, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938]; -const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 357, 0, 62, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; +const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191]; +const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; function isInAstralSet(code, set) { let pos = 0x10000; @@ -81,4 +81,6 @@ function isIdentifierName(name) { } return !isFirst; -} \ No newline at end of file +} + +//# sourceMappingURL=identifier.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/index.js index ca9decf9c13..076eafd0a1a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/index.js @@ -54,4 +54,6 @@ Object.defineProperty(exports, "isStrictReservedWord", { var _identifier = require("./identifier"); -var _keyword = require("./keyword"); \ No newline at end of file +var _keyword = require("./keyword"); + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/keyword.js b/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/keyword.js index 0939e9a0e3d..ff6277b7edc 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/keyword.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/lib/keyword.js @@ -35,4 +35,6 @@ function isStrictBindReservedWord(word, inModule) { function isKeyword(word) { return keywords.has(word); -} \ No newline at end of file +} + +//# sourceMappingURL=keyword.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/package.json index 972fdf11d5b..6e7de1eb3eb 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-validator-identifier", - "version": "7.16.7", + "version": "7.19.1", "description": "Validate identifier/keywords name", "repository": { "type": "git", @@ -17,11 +17,12 @@ "./package.json": "./package.json" }, "devDependencies": { - "@unicode/unicode-14.0.0": "^1.2.1", + "@unicode/unicode-15.0.0": "^1.3.1", "charcodes": "^0.2.0" }, "engines": { "node": ">=6.9.0" }, - "author": "The Babel Team (https://babel.dev/team)" + "author": "The Babel Team (https://babel.dev/team)", + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js b/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js index f644d77df9f..aca8710b2a1 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js +++ b/tools/node_modules/eslint/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js @@ -2,7 +2,7 @@ // Always use the latest available version of Unicode! // https://tc39.github.io/ecma262/#sec-conformance -const version = "14.0.0"; +const version = "15.0.0"; const start = require("@unicode/unicode-" + version + diff --git a/tools/node_modules/eslint/node_modules/@babel/helper-validator-option/package.json b/tools/node_modules/eslint/node_modules/@babel/helper-validator-option/package.json index 1fe2da845ce..15eb3275250 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helper-validator-option/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helper-validator-option/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helper-validator-option", - "version": "7.16.7", + "version": "7.18.6", "description": "Validate plugin/preset options", "repository": { "type": "git", @@ -19,5 +19,6 @@ "engines": { "node": ">=6.9.0" }, - "author": "The Babel Team (https://babel.dev/team)" + "author": "The Babel Team (https://babel.dev/team)", + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers-generated.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers-generated.js index 9ef543e009a..e5d836cd1ec 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers-generated.js +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers-generated.js @@ -10,17 +10,27 @@ var _template = require("@babel/template"); function helper(minVersion, source) { return Object.freeze({ minVersion, - ast: () => _template.default.program.ast(source) + ast: () => _template.default.program.ast(source, { + preserveComments: true + }) }); } var _default = Object.freeze({ - applyDecs: helper("7.17.0", 'function createMetadataMethodsForProperty(metadataMap,kind,property){return{getMetadata:function(key){if("symbol"!=typeof key)throw new TypeError("Metadata keys must be symbols, received: "+key);var metadataForKey=metadataMap[key];if(void 0!==metadataForKey)if(1===kind){var pub=metadataForKey.public;if(void 0!==pub)return pub[property]}else if(2===kind){var priv=metadataForKey.private;if(void 0!==priv)return priv.get(property)}else if(Object.hasOwnProperty.call(metadataForKey,"constructor"))return metadataForKey.constructor},setMetadata:function(key,value){if("symbol"!=typeof key)throw new TypeError("Metadata keys must be symbols, received: "+key);var metadataForKey=metadataMap[key];if(void 0===metadataForKey&&(metadataForKey=metadataMap[key]={}),1===kind){var pub=metadataForKey.public;void 0===pub&&(pub=metadataForKey.public={}),pub[property]=value}else if(2===kind){var priv=metadataForKey.priv;void 0===priv&&(priv=metadataForKey.private=new Map),priv.set(property,value)}else metadataForKey.constructor=value}}}function convertMetadataMapToFinal(obj,metadataMap){var parentMetadataMap=obj[Symbol.metadata||Symbol.for("Symbol.metadata")],metadataKeys=Object.getOwnPropertySymbols(metadataMap);if(0!==metadataKeys.length){for(var i=0;i=0;i--){var newInit;if(void 0!==(newValue=(0,decs[i])(value,ctx)))assertValidReturnValue(kind,newValue),0===kind?newInit=newValue:1===kind?(newInit=newValue.initializer,get=newValue.get||value.get,set=newValue.set||value.set,value={get:get,set:set}):value=newValue,void 0!==newInit&&(void 0===initializer?initializer=newInit:"function"==typeof initializer?initializer=[initializer,newInit]:initializer.push(newInit))}if(0===kind||1===kind){if(void 0===initializer)initializer=function(instance,init){return init};else if("function"!=typeof initializer){var ownInitializers=initializer;initializer=function(instance,init){for(var value=init,i=0;i3,isStatic=kind>=5;if(isStatic?(base=Class,metadataMap=staticMetadataMap,kind-=5,initializers=staticInitializers):(base=Class.prototype,metadataMap=protoMetadataMap,initializers=protoInitializers),0!==kind&&!isPrivate){var existingNonFields=isStatic?existingStaticNonFields:existingProtoNonFields,existingKind=existingNonFields.get(name)||0;if(!0===existingKind||3===existingKind&&4!==kind||4===existingKind&&3!==kind)throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: "+name);!existingKind&&kind>2?existingNonFields.set(name,kind):existingNonFields.set(name,!0)}applyMemberDec(ret,base,decInfo,name,kind,isStatic,isPrivate,metadataMap,initializers)}}protoInitializers.length>0&&pushInitializers(ret,protoInitializers),staticInitializers.length>0&&pushInitializers(ret,staticInitializers)}function pushInitializers(ret,initializers){initializers.length>0?(initializers=initializers.slice(),ret.push((function(instance){for(var i=0;i=0;i--)newClass=classDecs[i](newClass,ctx)||newClass;ret.push(newClass),initializers.length>0?ret.push((function(){for(var i=0;i=0;i--){var newInit;if(void 0!==(newValue=old_memberDec(decs[i],name,desc,metadataMap,initializers,kind,isStatic,isPrivate,value)))old_assertValidReturnValue(kind,newValue),0===kind?newInit=newValue:1===kind?(newInit=old_getInit(newValue),get=newValue.get||value.get,set=newValue.set||value.set,value={get:get,set:set}):value=newValue,void 0!==newInit&&(void 0===initializer?initializer=newInit:"function"==typeof initializer?initializer=[initializer,newInit]:initializer.push(newInit))}if(0===kind||1===kind){if(void 0===initializer)initializer=function(instance,init){return init};else if("function"!=typeof initializer){var ownInitializers=initializer;initializer=function(instance,init){for(var value=init,i=0;i3,isStatic=kind>=5;if(isStatic?(base=Class,metadataMap=staticMetadataMap,0!==(kind-=5)&&(initializers=staticInitializers=staticInitializers||[])):(base=Class.prototype,metadataMap=protoMetadataMap,0!==kind&&(initializers=protoInitializers=protoInitializers||[])),0!==kind&&!isPrivate){var existingNonFields=isStatic?existingStaticNonFields:existingProtoNonFields,existingKind=existingNonFields.get(name)||0;if(!0===existingKind||3===existingKind&&4!==kind||4===existingKind&&3!==kind)throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: "+name);!existingKind&&kind>2?existingNonFields.set(name,kind):existingNonFields.set(name,!0)}old_applyMemberDec(ret,base,decInfo,name,kind,isStatic,isPrivate,metadataMap,initializers)}}old_pushInitializers(ret,protoInitializers),old_pushInitializers(ret,staticInitializers)}function old_pushInitializers(ret,initializers){initializers&&ret.push((function(instance){for(var i=0;i0){for(var initializers=[],newClass=targetClass,name=targetClass.name,i=classDecs.length-1;i>=0;i--){var decoratorFinishedRef={v:!1};try{var ctx=Object.assign({kind:"class",name:name,addInitializer:old_createAddInitializerMethod(initializers,decoratorFinishedRef)},old_createMetadataMethodsForProperty(metadataMap,0,name,decoratorFinishedRef)),nextNewClass=classDecs[i](newClass,ctx)}finally{decoratorFinishedRef.v=!0}void 0!==nextNewClass&&(old_assertValidReturnValue(10,nextNewClass),newClass=nextNewClass)}ret.push(newClass,(function(){for(var i=0;i=0;i--){var newInit;if(void 0!==(newValue=memberDec(decs[i],name,desc,initializers,kind,isStatic,isPrivate,value)))assertValidReturnValue(kind,newValue),0===kind?newInit=newValue:1===kind?(newInit=newValue.init,get=newValue.get||value.get,set=newValue.set||value.set,value={get:get,set:set}):value=newValue,void 0!==newInit&&(void 0===init?init=newInit:"function"==typeof init?init=[init,newInit]:init.push(newInit))}if(0===kind||1===kind){if(void 0===init)init=function(instance,init){return init};else if("function"!=typeof init){var ownInitializers=init;init=function(instance,init){for(var value=init,i=0;i3,isStatic=kind>=5;if(isStatic?(base=Class,0!==(kind-=5)&&(initializers=staticInitializers=staticInitializers||[])):(base=Class.prototype,0!==kind&&(initializers=protoInitializers=protoInitializers||[])),0!==kind&&!isPrivate){var existingNonFields=isStatic?existingStaticNonFields:existingProtoNonFields,existingKind=existingNonFields.get(name)||0;if(!0===existingKind||3===existingKind&&4!==kind||4===existingKind&&3!==kind)throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: "+name);!existingKind&&kind>2?existingNonFields.set(name,kind):existingNonFields.set(name,!0)}applyMemberDec(ret,base,decInfo,name,kind,isStatic,isPrivate,initializers)}}pushInitializers(ret,protoInitializers),pushInitializers(ret,staticInitializers)}function pushInitializers(ret,initializers){initializers&&ret.push((function(instance){for(var i=0;i0){for(var initializers=[],newClass=targetClass,name=targetClass.name,i=classDecs.length-1;i>=0;i--){var decoratorFinishedRef={v:!1};try{var nextNewClass=classDecs[i](newClass,{kind:"class",name:name,addInitializer:createAddInitializerMethod(initializers,decoratorFinishedRef)})}finally{decoratorFinishedRef.v=!0}void 0!==nextNewClass&&(assertValidReturnValue(10,nextNewClass),newClass=nextNewClass)}ret.push(newClass,(function(){for(var i=0;i1){for(var childArray=new Array(childrenLength),i=0;i=0;--i){var entry=this.tryEntries[i],record=entry.completion;if("root"===entry.tryLoc)return handle("end");if(entry.tryLoc<=this.prev){var hasCatch=hasOwn.call(entry,"catchLoc"),hasFinally=hasOwn.call(entry,"finallyLoc");if(hasCatch&&hasFinally){if(this.prev=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc<=this.prev&&hasOwn.call(entry,"finallyLoc")&&this.prev=0;--i){var entry=this.tryEntries[i];if(entry.finallyLoc===finallyLoc)return this.complete(entry.completion,entry.afterLoc),resetTryEntry(entry),ContinueSentinel}},catch:function(tryLoc){for(var i=this.tryEntries.length-1;i>=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc===tryLoc){var record=entry.completion;if("throw"===record.type){var thrown=record.arg;resetTryEntry(entry)}return thrown}}throw new Error("illegal catch attempt")},delegateYield:function(iterable,resultName,nextLoc){return this.delegate={iterator:values(iterable),resultName:resultName,nextLoc:nextLoc},"next"===this.method&&(this.arg=undefined),ContinueSentinel}},exports}'), typeof: helper("7.0.0-beta.0", 'export default function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}'), - wrapRegExp: helper("7.2.6", 'import setPrototypeOf from"setPrototypeOf";import inherits from"inherits";export default function _wrapRegExp(){_wrapRegExp=function(re,groups){return new BabelRegExp(re,void 0,groups)};var _super=RegExp.prototype,_groups=new WeakMap;function BabelRegExp(re,flags,groups){var _this=new RegExp(re,flags);return _groups.set(_this,groups||_groups.get(re)),setPrototypeOf(_this,BabelRegExp.prototype)}function buildGroups(result,re){var g=_groups.get(re);return Object.keys(g).reduce((function(groups,name){return groups[name]=result[g[name]],groups}),Object.create(null))}return inherits(BabelRegExp,RegExp),BabelRegExp.prototype.exec=function(str){var result=_super.exec.call(this,str);return result&&(result.groups=buildGroups(result,this)),result},BabelRegExp.prototype[Symbol.replace]=function(str,substitution){if("string"==typeof substitution){var groups=_groups.get(this);return _super[Symbol.replace].call(this,str,substitution.replace(/\\$<([^>]+)>/g,(function(_,name){return"$"+groups[name]})))}if("function"==typeof substitution){var _this=this;return _super[Symbol.replace].call(this,str,(function(){var args=arguments;return"object"!=typeof args[args.length-1]&&(args=[].slice.call(args)).push(buildGroups(args,_this)),substitution.apply(this,args)}))}return _super[Symbol.replace].call(this,str,substitution)},_wrapRegExp.apply(this,arguments)}') + wrapRegExp: helper("7.19.0", 'import setPrototypeOf from"setPrototypeOf";import inherits from"inherits";export default function _wrapRegExp(){_wrapRegExp=function(re,groups){return new BabelRegExp(re,void 0,groups)};var _super=RegExp.prototype,_groups=new WeakMap;function BabelRegExp(re,flags,groups){var _this=new RegExp(re,flags);return _groups.set(_this,groups||_groups.get(re)),setPrototypeOf(_this,BabelRegExp.prototype)}function buildGroups(result,re){var g=_groups.get(re);return Object.keys(g).reduce((function(groups,name){var i=g[name];if("number"==typeof i)groups[name]=result[i];else{for(var k=0;void 0===result[i[k]]&&k+1]+)>/g,(function(_,name){return"$"+groups[name]})))}if("function"==typeof substitution){var _this=this;return _super[Symbol.replace].call(this,str,(function(){var args=arguments;return"object"!=typeof args[args.length-1]&&(args=[].slice.call(args)).push(buildGroups(args,_this)),substitution.apply(this,args)}))}return _super[Symbol.replace].call(this,str,substitution)},_wrapRegExp.apply(this,arguments)}') }); -exports.default = _default; \ No newline at end of file +exports.default = _default; + +//# sourceMappingURL=helpers-generated.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers.js index 3b8eea2437e..64b40d49731 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers.js +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers.js @@ -20,92 +20,13 @@ const helper = minVersion => tpl => ({ ast: () => _template.default.program.ast(tpl) }); -helpers.AwaitValue = helper("7.0.0-beta.0")` - export default function _AwaitValue(value) { - this.wrapped = value; - } -`; -helpers.AsyncGenerator = helper("7.0.0-beta.0")` - import AwaitValue from "AwaitValue"; - - export default function AsyncGenerator(gen) { - var front, back; - - function send(key, arg) { - return new Promise(function (resolve, reject) { - var request = { - key: key, - arg: arg, - resolve: resolve, - reject: reject, - next: null, - }; - - if (back) { - back = back.next = request; - } else { - front = back = request; - resume(key, arg); - } - }); - } - - function resume(key, arg) { - try { - var result = gen[key](arg) - var value = result.value; - var wrappedAwait = value instanceof AwaitValue; - - Promise.resolve(wrappedAwait ? value.wrapped : value).then( - function (arg) { - if (wrappedAwait) { - resume(key === "return" ? "return" : "next", arg); - return - } - - settle(result.done ? "return" : "normal", arg); - }, - function (err) { resume("throw", err); }); - } catch (err) { - settle("throw", err); - } - } - - function settle(type, value) { - switch (type) { - case "return": - front.resolve({ value: value, done: true }); - break; - case "throw": - front.reject(value); - break; - default: - front.resolve({ value: value, done: false }); - break; - } - - front = front.next; - if (front) { - resume(front.key, front.arg); - } else { - back = null; - } - } - - this._invoke = send; - - // Hide "return" method if generator return is not supported - if (typeof gen.return !== "function") { - this.return = undefined; +{ + helpers.AwaitValue = helper("7.0.0-beta.0")` + export default function _AwaitValue(value) { + this.wrapped = value; } - } - - AsyncGenerator.prototype[typeof Symbol === "function" && Symbol.asyncIterator || "@@asyncIterator"] = function () { return this; }; - - AsyncGenerator.prototype.next = function (arg) { return this._invoke("next", arg); }; - AsyncGenerator.prototype.throw = function (arg) { return this._invoke("throw", arg); }; - AsyncGenerator.prototype.return = function (arg) { return this._invoke("return", arg); }; -`; + `; +} helpers.wrapAsyncGenerator = helper("7.0.0-beta.0")` import AsyncGenerator from "AsyncGenerator"; @@ -115,56 +36,6 @@ helpers.wrapAsyncGenerator = helper("7.0.0-beta.0")` }; } `; -helpers.awaitAsyncGenerator = helper("7.0.0-beta.0")` - import AwaitValue from "AwaitValue"; - - export default function _awaitAsyncGenerator(value) { - return new AwaitValue(value); - } -`; -helpers.asyncGeneratorDelegate = helper("7.0.0-beta.0")` - export default function _asyncGeneratorDelegate(inner, awaitWrap) { - var iter = {}, waiting = false; - - function pump(key, value) { - waiting = true; - value = new Promise(function (resolve) { resolve(inner[key](value)); }); - return { done: false, value: awaitWrap(value) }; - }; - - iter[typeof Symbol !== "undefined" && Symbol.iterator || "@@iterator"] = function () { return this; }; - - iter.next = function (value) { - if (waiting) { - waiting = false; - return value; - } - return pump("next", value); - }; - - if (typeof inner.throw === "function") { - iter.throw = function (value) { - if (waiting) { - waiting = false; - throw value; - } - return pump("throw", value); - }; - } - - if (typeof inner.return === "function") { - iter.return = function (value) { - if (waiting) { - waiting = false; - return value; - } - return pump("return", value); - }; - } - - return iter; - } -`; helpers.asyncToGenerator = helper("7.0.0-beta.0")` function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { @@ -284,7 +155,7 @@ helpers.defineProperty = helper("7.0.0-beta.0")` `; helpers.extends = helper("7.0.0-beta.0")` export default function _extends() { - _extends = Object.assign || function (target) { + _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { @@ -351,7 +222,7 @@ helpers.inheritsLoose = helper("7.0.0-beta.0")` helpers.getPrototypeOf = helper("7.0.0-beta.0")` export default function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf - ? Object.getPrototypeOf + ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; @@ -360,10 +231,12 @@ helpers.getPrototypeOf = helper("7.0.0-beta.0")` `; helpers.setPrototypeOf = helper("7.0.0-beta.0")` export default function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; + _setPrototypeOf = Object.setPrototypeOf + ? Object.setPrototypeOf.bind() + : function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; return _setPrototypeOf(o, p); } `; @@ -400,7 +273,7 @@ helpers.construct = helper("7.0.0-beta.0")` export default function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { - _construct = Reflect.construct; + _construct = Reflect.construct.bind(); } else { // NOTE: If Parent !== Class, the correct __proto__ is set *after* // calling the constructor. @@ -630,7 +503,7 @@ helpers.get = helper("7.0.0-beta.0")` export default function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { - _get = Reflect.get; + _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = superPropBase(target, property); @@ -1956,4 +1829,6 @@ helpers.identity = helper("7.17.0")` export default function _identity(x) { return x; } -`; \ No newline at end of file +`; + +//# sourceMappingURL=helpers.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/AsyncGenerator.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/AsyncGenerator.js new file mode 100644 index 00000000000..3910a80063a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/AsyncGenerator.js @@ -0,0 +1,110 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = AsyncGenerator; + +var _OverloadYield = require("OverloadYield"); + +function AsyncGenerator(gen) { + var front, back; + + function send(key, arg) { + return new Promise(function (resolve, reject) { + var request = { + key: key, + arg: arg, + resolve: resolve, + reject: reject, + next: null + }; + + if (back) { + back = back.next = request; + } else { + front = back = request; + resume(key, arg); + } + }); + } + + function resume(key, arg) { + try { + var result = gen[key](arg); + var value = result.value; + var overloaded = value instanceof _OverloadYield; + Promise.resolve(overloaded ? value.v : value).then(function (arg) { + if (overloaded) { + var nextKey = key === "return" ? "return" : "next"; + + if (!value.k || arg.done) { + return resume(nextKey, arg); + } else { + arg = gen[nextKey](arg).value; + } + } + + settle(result.done ? "return" : "normal", arg); + }, function (err) { + resume("throw", err); + }); + } catch (err) { + settle("throw", err); + } + } + + function settle(type, value) { + switch (type) { + case "return": + front.resolve({ + value: value, + done: true + }); + break; + + case "throw": + front.reject(value); + break; + + default: + front.resolve({ + value: value, + done: false + }); + break; + } + + front = front.next; + + if (front) { + resume(front.key, front.arg); + } else { + back = null; + } + } + + this._invoke = send; + + if (typeof gen.return !== "function") { + this.return = undefined; + } +} + +AsyncGenerator.prototype[typeof Symbol === "function" && Symbol.asyncIterator || "@@asyncIterator"] = function () { + return this; +}; + +AsyncGenerator.prototype.next = function (arg) { + return this._invoke("next", arg); +}; + +AsyncGenerator.prototype.throw = function (arg) { + return this._invoke("throw", arg); +}; + +AsyncGenerator.prototype.return = function (arg) { + return this._invoke("return", arg); +}; + +//# sourceMappingURL=AsyncGenerator.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/OverloadYield.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/OverloadYield.js new file mode 100644 index 00000000000..523dbeb9eaf --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/OverloadYield.js @@ -0,0 +1,13 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _OverloadYield; + +function _OverloadYield(value, kind) { + this.v = value; + this.k = kind; +} + +//# sourceMappingURL=OverloadYield.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/applyDecs.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/applyDecs.js index 27dc4e22622..98e2930d3ed 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/applyDecs.js +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/applyDecs.js @@ -5,13 +5,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = applyDecs; -function createMetadataMethodsForProperty(metadataMap, kind, property) { +function old_createMetadataMethodsForProperty(metadataMap, kind, property, decoratorFinishedRef) { return { getMetadata: function (key) { - if (typeof key !== "symbol") { - throw new TypeError("Metadata keys must be symbols, received: " + key); - } - + old_assertNotFinished(decoratorFinishedRef, "getMetadata"); + old_assertMetadataKey(key); var metadataForKey = metadataMap[key]; if (metadataForKey === void 0) return void 0; @@ -32,10 +30,8 @@ function createMetadataMethodsForProperty(metadataMap, kind, property) { } }, setMetadata: function (key, value) { - if (typeof key !== "symbol") { - throw new TypeError("Metadata keys must be symbols, received: " + key); - } - + old_assertNotFinished(decoratorFinishedRef, "setMetadata"); + old_assertMetadataKey(key); var metadataForKey = metadataMap[key]; if (metadataForKey === void 0) { @@ -65,7 +61,7 @@ function createMetadataMethodsForProperty(metadataMap, kind, property) { }; } -function convertMetadataMapToFinal(obj, metadataMap) { +function old_convertMetadataMapToFinal(obj, metadataMap) { var parentMetadataMap = obj[Symbol.metadata || Symbol.for("Symbol.metadata")]; var metadataKeys = Object.getOwnPropertySymbols(metadataMap); if (metadataKeys.length === 0) return; @@ -106,14 +102,15 @@ function convertMetadataMapToFinal(obj, metadataMap) { obj[Symbol.metadata || Symbol.for("Symbol.metadata")] = metadataMap; } -function createAddInitializerMethod(initializers) { +function old_createAddInitializerMethod(initializers, decoratorFinishedRef) { return function addInitializer(initializer) { - assertValidInitializer(initializer); + old_assertNotFinished(decoratorFinishedRef, "addInitializer"); + old_assertCallable(initializer, "An initializer"); initializers.push(initializer); }; } -function memberDecCtx(base, name, desc, metadataMap, initializers, kind, isStatic, isPrivate) { +function old_memberDec(dec, name, desc, metadataMap, initializers, kind, isStatic, isPrivate, value) { var kindStr; switch (kind) { @@ -143,9 +140,12 @@ function memberDecCtx(base, name, desc, metadataMap, initializers, kind, isStati isStatic: isStatic, isPrivate: isPrivate }; + var decoratorFinishedRef = { + v: false + }; if (kind !== 0) { - ctx.addInitializer = createAddInitializerMethod(initializers); + ctx.addInitializer = old_createAddInitializerMethod(initializers, decoratorFinishedRef); } var metadataKind, metadataName; @@ -182,32 +182,80 @@ function memberDecCtx(base, name, desc, metadataMap, initializers, kind, isStati metadataName = name; } - return Object.assign(ctx, createMetadataMethodsForProperty(metadataMap, metadataKind, metadataName)); + try { + return dec(value, Object.assign(ctx, old_createMetadataMethodsForProperty(metadataMap, metadataKind, metadataName, decoratorFinishedRef))); + } finally { + decoratorFinishedRef.v = true; + } +} + +function old_assertNotFinished(decoratorFinishedRef, fnName) { + if (decoratorFinishedRef.v) { + throw new Error("attempted to call " + fnName + " after decoration was finished"); + } } -function assertValidInitializer(initializer) { - if (typeof initializer !== "function") { - throw new Error("initializers must be functions"); +function old_assertMetadataKey(key) { + if (typeof key !== "symbol") { + throw new TypeError("Metadata keys must be symbols, received: " + key); } } -function assertValidReturnValue(kind, value) { +function old_assertCallable(fn, hint) { + if (typeof fn !== "function") { + throw new TypeError(hint + " must be a function"); + } +} + +function old_assertValidReturnValue(kind, value) { var type = typeof value; if (kind === 1) { if (type !== "object" || value === null) { - throw new Error("accessor decorators must return an object with get, set, or initializer properties or void 0"); + throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0"); + } + + if (value.get !== undefined) { + old_assertCallable(value.get, "accessor.get"); + } + + if (value.set !== undefined) { + old_assertCallable(value.set, "accessor.set"); + } + + if (value.init !== undefined) { + old_assertCallable(value.init, "accessor.init"); + } + + if (value.initializer !== undefined) { + old_assertCallable(value.initializer, "accessor.initializer"); } } else if (type !== "function") { + var hint; + if (kind === 0) { - throw new Error("field decorators must return a initializer function or void 0"); + hint = "field"; + } else if (kind === 10) { + hint = "class"; } else { - throw new Error("method decorators must return a function or void 0"); + hint = "method"; } + + throw new TypeError(hint + " decorators must return a function or void 0"); + } +} + +function old_getInit(desc) { + var initializer; + + if ((initializer = desc.init) == null && (initializer = desc.initializer) && typeof console !== "undefined") { + console.warn(".initializer has been renamed to .init as of March 2022"); } + + return initializer; } -function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, metadataMap, initializers) { +function old_applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, metadataMap, initializers) { var decs = decInfo[0]; var desc, initializer, value; @@ -247,19 +295,18 @@ function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, met value = desc.set; } - var ctx = memberDecCtx(base, name, desc, metadataMap, initializers, kind, isStatic, isPrivate); var newValue, get, set; if (typeof decs === "function") { - newValue = decs(value, ctx); + newValue = old_memberDec(decs, name, desc, metadataMap, initializers, kind, isStatic, isPrivate, value); if (newValue !== void 0) { - assertValidReturnValue(kind, newValue); + old_assertValidReturnValue(kind, newValue); if (kind === 0) { initializer = newValue; } else if (kind === 1) { - initializer = newValue.initializer; + initializer = old_getInit(newValue); get = newValue.get || value.get; set = newValue.set || value.set; value = { @@ -273,16 +320,16 @@ function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, met } else { for (var i = decs.length - 1; i >= 0; i--) { var dec = decs[i]; - newValue = dec(value, ctx); + newValue = old_memberDec(dec, name, desc, metadataMap, initializers, kind, isStatic, isPrivate, value); if (newValue !== void 0) { - assertValidReturnValue(kind, newValue); + old_assertValidReturnValue(kind, newValue); var newInit; if (kind === 0) { newInit = newValue; } else if (kind === 1) { - newInit = newValue.initializer; + newInit = old_getInit(newValue); get = newValue.get || value.get; set = newValue.set || value.set; value = { @@ -367,9 +414,9 @@ function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, met } } -function applyMemberDecs(ret, Class, protoMetadataMap, staticMetadataMap, decInfos) { - var protoInitializers = []; - var staticInitializers = []; +function old_applyMemberDecs(ret, Class, protoMetadataMap, staticMetadataMap, decInfos) { + var protoInitializers; + var staticInitializers; var existingProtoNonFields = new Map(); var existingStaticNonFields = new Map(); @@ -388,11 +435,19 @@ function applyMemberDecs(ret, Class, protoMetadataMap, staticMetadataMap, decInf base = Class; metadataMap = staticMetadataMap; kind = kind - 5; - initializers = staticInitializers; + + if (kind !== 0) { + staticInitializers = staticInitializers || []; + initializers = staticInitializers; + } } else { base = Class.prototype; metadataMap = protoMetadataMap; - initializers = protoInitializers; + + if (kind !== 0) { + protoInitializers = protoInitializers || []; + initializers = protoInitializers; + } } if (kind !== 0 && !isPrivate) { @@ -408,76 +463,70 @@ function applyMemberDecs(ret, Class, protoMetadataMap, staticMetadataMap, decInf } } - applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, metadataMap, initializers); + old_applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, metadataMap, initializers); } - if (protoInitializers.length > 0) { - pushInitializers(ret, protoInitializers); - } - - if (staticInitializers.length > 0) { - pushInitializers(ret, staticInitializers); - } + old_pushInitializers(ret, protoInitializers); + old_pushInitializers(ret, staticInitializers); } -function pushInitializers(ret, initializers) { - if (initializers.length > 0) { - initializers = initializers.slice(); +function old_pushInitializers(ret, initializers) { + if (initializers) { ret.push(function (instance) { for (var i = 0; i < initializers.length; i++) { - initializers[i].call(instance, instance); + initializers[i].call(instance); } - return instance; - }); - } else { - ret.push(function (instance) { return instance; }); } } -function applyClassDecs(ret, targetClass, metadataMap, classDecs) { - var initializers = []; - var newClass = targetClass; - var name = targetClass.name; - var ctx = Object.assign({ - kind: "class", - name: name, - addInitializer: createAddInitializerMethod(initializers) - }, createMetadataMethodsForProperty(metadataMap, 0, name)); - - for (var i = classDecs.length - 1; i >= 0; i--) { - newClass = classDecs[i](newClass, ctx) || newClass; - } +function old_applyClassDecs(ret, targetClass, metadataMap, classDecs) { + if (classDecs.length > 0) { + var initializers = []; + var newClass = targetClass; + var name = targetClass.name; + + for (var i = classDecs.length - 1; i >= 0; i--) { + var decoratorFinishedRef = { + v: false + }; - ret.push(newClass); + try { + var ctx = Object.assign({ + kind: "class", + name: name, + addInitializer: old_createAddInitializerMethod(initializers, decoratorFinishedRef) + }, old_createMetadataMethodsForProperty(metadataMap, 0, name, decoratorFinishedRef)); + var nextNewClass = classDecs[i](newClass, ctx); + } finally { + decoratorFinishedRef.v = true; + } - if (initializers.length > 0) { - ret.push(function () { + if (nextNewClass !== undefined) { + old_assertValidReturnValue(10, nextNewClass); + newClass = nextNewClass; + } + } + + ret.push(newClass, function () { for (var i = 0; i < initializers.length; i++) { - initializers[i].call(newClass, newClass); + initializers[i].call(newClass); } }); - } else { - ret.push(function () {}); } } function applyDecs(targetClass, memberDecs, classDecs) { var ret = []; var staticMetadataMap = {}; - - if (memberDecs) { - var protoMetadataMap = {}; - applyMemberDecs(ret, targetClass, protoMetadataMap, staticMetadataMap, memberDecs); - convertMetadataMapToFinal(targetClass.prototype, protoMetadataMap); - } - - if (classDecs) { - applyClassDecs(ret, targetClass, staticMetadataMap, classDecs); - } - - convertMetadataMapToFinal(targetClass, staticMetadataMap); + var protoMetadataMap = {}; + old_applyMemberDecs(ret, targetClass, protoMetadataMap, staticMetadataMap, memberDecs); + old_convertMetadataMapToFinal(targetClass.prototype, protoMetadataMap); + old_applyClassDecs(ret, targetClass, staticMetadataMap, classDecs); + old_convertMetadataMapToFinal(targetClass, staticMetadataMap); return ret; -} \ No newline at end of file +} + +//# sourceMappingURL=applyDecs.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/applyDecs2203.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/applyDecs2203.js new file mode 100644 index 00000000000..519553f9290 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/applyDecs2203.js @@ -0,0 +1,415 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = applyDecs2203; + +function createAddInitializerMethod(initializers, decoratorFinishedRef) { + return function addInitializer(initializer) { + assertNotFinished(decoratorFinishedRef, "addInitializer"); + assertCallable(initializer, "An initializer"); + initializers.push(initializer); + }; +} + +function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, value) { + var kindStr; + + switch (kind) { + case 1: + kindStr = "accessor"; + break; + + case 2: + kindStr = "method"; + break; + + case 3: + kindStr = "getter"; + break; + + case 4: + kindStr = "setter"; + break; + + default: + kindStr = "field"; + } + + var ctx = { + kind: kindStr, + name: isPrivate ? "#" + name : name, + static: isStatic, + private: isPrivate + }; + var decoratorFinishedRef = { + v: false + }; + + if (kind !== 0) { + ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef); + } + + var get, set; + + if (kind === 0) { + if (isPrivate) { + get = desc.get; + set = desc.set; + } else { + get = function () { + return this[name]; + }; + + set = function (v) { + this[name] = v; + }; + } + } else if (kind === 2) { + get = function () { + return desc.value; + }; + } else { + if (kind === 1 || kind === 3) { + get = function () { + return desc.get.call(this); + }; + } + + if (kind === 1 || kind === 4) { + set = function (v) { + desc.set.call(this, v); + }; + } + } + + ctx.access = get && set ? { + get: get, + set: set + } : get ? { + get: get + } : { + set: set + }; + + try { + return dec(value, ctx); + } finally { + decoratorFinishedRef.v = true; + } +} + +function assertNotFinished(decoratorFinishedRef, fnName) { + if (decoratorFinishedRef.v) { + throw new Error("attempted to call " + fnName + " after decoration was finished"); + } +} + +function assertCallable(fn, hint) { + if (typeof fn !== "function") { + throw new TypeError(hint + " must be a function"); + } +} + +function assertValidReturnValue(kind, value) { + var type = typeof value; + + if (kind === 1) { + if (type !== "object" || value === null) { + throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0"); + } + + if (value.get !== undefined) { + assertCallable(value.get, "accessor.get"); + } + + if (value.set !== undefined) { + assertCallable(value.set, "accessor.set"); + } + + if (value.init !== undefined) { + assertCallable(value.init, "accessor.init"); + } + } else if (type !== "function") { + var hint; + + if (kind === 0) { + hint = "field"; + } else if (kind === 10) { + hint = "class"; + } else { + hint = "method"; + } + + throw new TypeError(hint + " decorators must return a function or void 0"); + } +} + +function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers) { + var decs = decInfo[0]; + var desc, init, value; + + if (isPrivate) { + if (kind === 0 || kind === 1) { + desc = { + get: decInfo[3], + set: decInfo[4] + }; + } else if (kind === 3) { + desc = { + get: decInfo[3] + }; + } else if (kind === 4) { + desc = { + set: decInfo[3] + }; + } else { + desc = { + value: decInfo[3] + }; + } + } else if (kind !== 0) { + desc = Object.getOwnPropertyDescriptor(base, name); + } + + if (kind === 1) { + value = { + get: desc.get, + set: desc.set + }; + } else if (kind === 2) { + value = desc.value; + } else if (kind === 3) { + value = desc.get; + } else if (kind === 4) { + value = desc.set; + } + + var newValue, get, set; + + if (typeof decs === "function") { + newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, value); + + if (newValue !== void 0) { + assertValidReturnValue(kind, newValue); + + if (kind === 0) { + init = newValue; + } else if (kind === 1) { + init = newValue.init; + get = newValue.get || value.get; + set = newValue.set || value.set; + value = { + get: get, + set: set + }; + } else { + value = newValue; + } + } + } else { + for (var i = decs.length - 1; i >= 0; i--) { + var dec = decs[i]; + newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, value); + + if (newValue !== void 0) { + assertValidReturnValue(kind, newValue); + var newInit; + + if (kind === 0) { + newInit = newValue; + } else if (kind === 1) { + newInit = newValue.init; + get = newValue.get || value.get; + set = newValue.set || value.set; + value = { + get: get, + set: set + }; + } else { + value = newValue; + } + + if (newInit !== void 0) { + if (init === void 0) { + init = newInit; + } else if (typeof init === "function") { + init = [init, newInit]; + } else { + init.push(newInit); + } + } + } + } + } + + if (kind === 0 || kind === 1) { + if (init === void 0) { + init = function (instance, init) { + return init; + }; + } else if (typeof init !== "function") { + var ownInitializers = init; + + init = function (instance, init) { + var value = init; + + for (var i = 0; i < ownInitializers.length; i++) { + value = ownInitializers[i].call(instance, value); + } + + return value; + }; + } else { + var originalInitializer = init; + + init = function (instance, init) { + return originalInitializer.call(instance, init); + }; + } + + ret.push(init); + } + + if (kind !== 0) { + if (kind === 1) { + desc.get = value.get; + desc.set = value.set; + } else if (kind === 2) { + desc.value = value; + } else if (kind === 3) { + desc.get = value; + } else if (kind === 4) { + desc.set = value; + } + + if (isPrivate) { + if (kind === 1) { + ret.push(function (instance, args) { + return value.get.call(instance, args); + }); + ret.push(function (instance, args) { + return value.set.call(instance, args); + }); + } else if (kind === 2) { + ret.push(value); + } else { + ret.push(function (instance, args) { + return value.call(instance, args); + }); + } + } else { + Object.defineProperty(base, name, desc); + } + } +} + +function applyMemberDecs(ret, Class, decInfos) { + var protoInitializers; + var staticInitializers; + var existingProtoNonFields = new Map(); + var existingStaticNonFields = new Map(); + + for (var i = 0; i < decInfos.length; i++) { + var decInfo = decInfos[i]; + if (!Array.isArray(decInfo)) continue; + var kind = decInfo[1]; + var name = decInfo[2]; + var isPrivate = decInfo.length > 3; + var isStatic = kind >= 5; + var base; + var initializers; + + if (isStatic) { + base = Class; + kind = kind - 5; + + if (kind !== 0) { + staticInitializers = staticInitializers || []; + initializers = staticInitializers; + } + } else { + base = Class.prototype; + + if (kind !== 0) { + protoInitializers = protoInitializers || []; + initializers = protoInitializers; + } + } + + if (kind !== 0 && !isPrivate) { + var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields; + var existingKind = existingNonFields.get(name) || 0; + + if (existingKind === true || existingKind === 3 && kind !== 4 || existingKind === 4 && kind !== 3) { + throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + name); + } else if (!existingKind && kind > 2) { + existingNonFields.set(name, kind); + } else { + existingNonFields.set(name, true); + } + } + + applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers); + } + + pushInitializers(ret, protoInitializers); + pushInitializers(ret, staticInitializers); +} + +function pushInitializers(ret, initializers) { + if (initializers) { + ret.push(function (instance) { + for (var i = 0; i < initializers.length; i++) { + initializers[i].call(instance); + } + + return instance; + }); + } +} + +function applyClassDecs(ret, targetClass, classDecs) { + if (classDecs.length > 0) { + var initializers = []; + var newClass = targetClass; + var name = targetClass.name; + + for (var i = classDecs.length - 1; i >= 0; i--) { + var decoratorFinishedRef = { + v: false + }; + + try { + var nextNewClass = classDecs[i](newClass, { + kind: "class", + name: name, + addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef) + }); + } finally { + decoratorFinishedRef.v = true; + } + + if (nextNewClass !== undefined) { + assertValidReturnValue(10, nextNewClass); + newClass = nextNewClass; + } + } + + ret.push(newClass, function () { + for (var i = 0; i < initializers.length; i++) { + initializers[i].call(newClass); + } + }); + } +} + +function applyDecs2203(targetClass, memberDecs, classDecs) { + var ret = []; + applyMemberDecs(ret, targetClass, memberDecs); + applyClassDecs(ret, targetClass, classDecs); + return ret; +} + +//# sourceMappingURL=applyDecs2203.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/asyncGeneratorDelegate.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/asyncGeneratorDelegate.js new file mode 100644 index 00000000000..12832cfa4d5 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/asyncGeneratorDelegate.js @@ -0,0 +1,63 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _asyncGeneratorDelegate; + +var _OverloadYield = require("OverloadYield"); + +function _asyncGeneratorDelegate(inner) { + var iter = {}, + waiting = false; + + function pump(key, value) { + waiting = true; + value = new Promise(function (resolve) { + resolve(inner[key](value)); + }); + return { + done: false, + value: new _OverloadYield(value, 1) + }; + } + + iter[typeof Symbol !== "undefined" && Symbol.iterator || "@@iterator"] = function () { + return this; + }; + + iter.next = function (value) { + if (waiting) { + waiting = false; + return value; + } + + return pump("next", value); + }; + + if (typeof inner.throw === "function") { + iter.throw = function (value) { + if (waiting) { + waiting = false; + throw value; + } + + return pump("throw", value); + }; + } + + if (typeof inner.return === "function") { + iter.return = function (value) { + if (waiting) { + waiting = false; + return value; + } + + return pump("return", value); + }; + } + + return iter; +} + +//# sourceMappingURL=asyncGeneratorDelegate.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/asyncIterator.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/asyncIterator.js index 0a6d9de18a8..ee03cdbe1bd 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/asyncIterator.js +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/asyncIterator.js @@ -78,4 +78,6 @@ function AsyncFromSyncIterator(s) { } return new AsyncFromSyncIterator(s); -} \ No newline at end of file +} + +//# sourceMappingURL=asyncIterator.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/awaitAsyncGenerator.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/awaitAsyncGenerator.js new file mode 100644 index 00000000000..62017aca126 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/awaitAsyncGenerator.js @@ -0,0 +1,14 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _awaitAsyncGenerator; + +var _OverloadYield = require("OverloadYield"); + +function _awaitAsyncGenerator(value) { + return new _OverloadYield(value, 0); +} + +//# sourceMappingURL=awaitAsyncGenerator.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/jsx.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/jsx.js index 68de16843cb..bc405295133 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/jsx.js +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/jsx.js @@ -50,4 +50,6 @@ function _createRawReactElement(type, props, key, children) { props: props, _owner: null }; -} \ No newline at end of file +} + +//# sourceMappingURL=jsx.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/objectSpread2.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/objectSpread2.js index 03db0068a5d..f1531e2112f 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/objectSpread2.js +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/objectSpread2.js @@ -43,4 +43,6 @@ function _objectSpread2(target) { } return target; -} \ No newline at end of file +} + +//# sourceMappingURL=objectSpread2.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/regeneratorRuntime.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/regeneratorRuntime.js new file mode 100644 index 00000000000..6badb4ba6a1 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/regeneratorRuntime.js @@ -0,0 +1,589 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _regeneratorRuntime; + +function _regeneratorRuntime() { + "use strict"; + + exports.default = _regeneratorRuntime = function () { + return _exports; + }; + + var _exports = {}; + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined; + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + function define(obj, key, value) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + return obj[key]; + } + + try { + define({}, ""); + } catch (err) { + define = function (obj, key, value) { + return obj[key] = value; + }; + } + + function wrap(innerFn, outerFn, self, tryLocsList) { + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + generator._invoke = makeInvokeMethod(innerFn, self, context); + return generator; + } + + _exports.wrap = wrap; + + function tryCatch(fn, obj, arg) { + try { + return { + type: "normal", + arg: fn.call(obj, arg) + }; + } catch (err) { + return { + type: "throw", + arg: err + }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + var ContinueSentinel = {}; + + function Generator() {} + + function GeneratorFunction() {} + + function GeneratorFunctionPrototype() {} + + var IteratorPrototype = {}; + define(IteratorPrototype, iteratorSymbol, function () { + return this; + }); + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + + if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + IteratorPrototype = NativeIteratorPrototype; + } + + var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = GeneratorFunctionPrototype; + define(Gp, "constructor", GeneratorFunctionPrototype); + define(GeneratorFunctionPrototype, "constructor", GeneratorFunction); + GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); + + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function (method) { + define(prototype, method, function (arg) { + return this._invoke(method, arg); + }); + }); + } + + _exports.isGeneratorFunction = function (genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; + }; + + _exports.mark = function (genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + define(genFun, toStringTagSymbol, "GeneratorFunction"); + } + + genFun.prototype = Object.create(Gp); + return genFun; + }; + + _exports.awrap = function (arg) { + return { + __await: arg + }; + }; + + function AsyncIterator(generator, PromiseImpl) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + + if (value && typeof value === "object" && hasOwn.call(value, "__await")) { + return PromiseImpl.resolve(value.__await).then(function (value) { + invoke("next", value, resolve, reject); + }, function (err) { + invoke("throw", err, resolve, reject); + }); + } + + return PromiseImpl.resolve(value).then(function (unwrapped) { + result.value = unwrapped; + resolve(result); + }, function (error) { + return invoke("throw", error, resolve, reject); + }); + } + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new PromiseImpl(function (resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); + } + + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + define(AsyncIterator.prototype, asyncIteratorSymbol, function () { + return this; + }); + _exports.AsyncIterator = AsyncIterator; + + _exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { + if (PromiseImpl === void 0) PromiseImpl = Promise; + var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); + return _exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + return doneResult(); + } + + context.method = method; + context.arg = arg; + + while (true) { + var delegate = context.delegate; + + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + + if (context.method === "next") { + context.sent = context._sent = context.arg; + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + + context.dispatchException(context.arg); + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + + state = GenStateExecuting; + var record = tryCatch(innerFn, self, context); + + if (record.type === "normal") { + state = context.done ? GenStateCompleted : GenStateSuspendedYield; + + if (record.arg === ContinueSentinel) { + continue; + } + + return { + value: record.arg, + done: context.done + }; + } else if (record.type === "throw") { + state = GenStateCompleted; + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + + if (method === undefined) { + context.delegate = null; + + if (context.method === "throw") { + if (delegate.iterator["return"]) { + context.method = "return"; + context.arg = undefined; + maybeInvokeDelegate(delegate, context); + + if (context.method === "throw") { + return ContinueSentinel; + } + } + + context.method = "throw"; + context.arg = new TypeError("The iterator does not provide a 'throw' method"); + } + + return ContinueSentinel; + } + + var record = tryCatch(method, delegate.iterator, context.arg); + + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + + var info = record.arg; + + if (!info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + + if (info.done) { + context[delegate.resultName] = info.value; + context.next = delegate.nextLoc; + + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined; + } + } else { + return info; + } + + context.delegate = null; + return ContinueSentinel; + } + + defineIteratorMethods(Gp); + define(Gp, toStringTagSymbol, "Generator"); + define(Gp, iteratorSymbol, function () { + return this; + }); + define(Gp, "toString", function () { + return "[object Generator]"; + }); + + function pushTryEntry(locs) { + var entry = { + tryLoc: locs[0] + }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + + this.tryEntries.push(entry); + } + + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + + function Context(tryLocsList) { + this.tryEntries = [{ + tryLoc: "root" + }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + _exports.keys = function (object) { + var keys = []; + + for (var key in object) { + keys.push(key); + } + + keys.reverse(); + return function next() { + while (keys.length) { + var key = keys.pop(); + + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, + next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + + next.value = undefined; + next.done = true; + return next; + }; + + return next.next = next; + } + } + + return { + next: doneResult + }; + } + + _exports.values = values; + + function doneResult() { + return { + value: undefined, + done: true + }; + } + + Context.prototype = { + constructor: Context, + reset: function (skipTempReset) { + this.prev = 0; + this.next = 0; + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + this.method = "next"; + this.arg = undefined; + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + stop: function () { + this.done = true; + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + dispatchException: function (exception) { + if (this.done) { + throw exception; + } + + var context = this; + + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + + if (caught) { + context.method = "next"; + context.arg = undefined; + } + + return !!caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + abrupt: function (type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + + if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + + if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + + return this.complete(record); + }, + complete: function (record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + + return ContinueSentinel; + }, + finish: function (finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + catch: function (tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + + return thrown; + } + } + + throw new Error("illegal catch attempt"); + }, + delegateYield: function (iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + if (this.method === "next") { + this.arg = undefined; + } + + return ContinueSentinel; + } + }; + return _exports; +} + +//# sourceMappingURL=regeneratorRuntime.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/typeof.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/typeof.js index b1a728b924a..2e6cdcebf19 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/typeof.js +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/typeof.js @@ -19,4 +19,6 @@ function _typeof(obj) { } return _typeof(obj); -} \ No newline at end of file +} + +//# sourceMappingURL=typeof.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/wrapRegExp.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/wrapRegExp.js index 6375b711989..1ab8ce31c7a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/wrapRegExp.js +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/helpers/wrapRegExp.js @@ -64,10 +64,19 @@ function _wrapRegExp() { var g = _groups.get(re); return Object.keys(g).reduce(function (groups, name) { - groups[name] = result[g[name]]; + var i = g[name]; + if (typeof i === "number") groups[name] = result[i];else { + var k = 0; + + while (result[i[k]] === undefined && k + 1 < i.length) k++; + + groups[name] = result[i[k]]; + } return groups; }, Object.create(null)); } return _wrapRegExp.apply(this, arguments); -} \ No newline at end of file +} + +//# sourceMappingURL=wrapRegExp.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/index.js index 5e793d59f14..97d89ac0492 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/lib/index.js @@ -20,10 +20,8 @@ const { assignmentExpression, cloneNode, expressionStatement, - file: t_file, - identifier, - variableDeclaration, - variableDeclarator + file, + identifier } = _t; function makePath(path) { @@ -37,7 +35,7 @@ function makePath(path) { return parts.reverse().join("."); } -let fileClass = undefined; +let FileClass = undefined; function getHelperMetadata(file) { const globals = new Set(); @@ -68,14 +66,11 @@ function getHelperMetadata(file) { ExportDefaultDeclaration(child) { const decl = child.get("declaration"); - if (decl.isFunctionDeclaration()) { - if (!decl.node.id) { - throw decl.buildCodeFrameError("Helpers should give names to their exported func declaration"); - } - - exportName = decl.node.id.name; + if (!decl.isFunctionDeclaration() || !decl.node.id) { + throw decl.buildCodeFrameError("Helpers can only export named function declarations"); } + exportName = decl.node.id.name; exportPath = makePath(child); }, @@ -132,7 +127,7 @@ function getHelperMetadata(file) { }; (0, _traverse.default)(file.ast, dependencyVisitor, file.scope); (0, _traverse.default)(file.ast, referenceVisitor, file.scope); - if (!exportPath) throw new Error("Helpers must default-export something."); + if (!exportPath) throw new Error("Helpers must have a default export."); exportBindingAssignments.reverse(); return { globals: Array.from(globals), @@ -179,50 +174,37 @@ function permuteHelperAST(file, metadata, id, localBindings, getDependency) { toRename[exportName] = id.name; } - const visitor = { - Program(path) { - const exp = path.get(exportPath); - const imps = importPaths.map(p => path.get(p)); - const impsBindingRefs = importBindingsReferences.map(p => path.get(p)); - const decl = exp.get("declaration"); - - if (id.type === "Identifier") { - if (decl.isFunctionDeclaration()) { - exp.replaceWith(decl); - } else { - exp.replaceWith(variableDeclaration("var", [variableDeclarator(id, decl.node)])); - } - } else if (id.type === "MemberExpression") { - if (decl.isFunctionDeclaration()) { - exportBindingAssignments.forEach(assignPath => { - const assign = path.get(assignPath); - assign.replaceWith(assignmentExpression("=", id, assign.node)); - }); - exp.replaceWith(decl); - path.pushContainer("body", expressionStatement(assignmentExpression("=", id, identifier(exportName)))); - } else { - exp.replaceWith(expressionStatement(assignmentExpression("=", id, decl.node))); - } - } else { - throw new Error("Unexpected helper format."); - } - - Object.keys(toRename).forEach(name => { - path.scope.rename(name, toRename[name]); - }); + const { + path + } = file; + const exp = path.get(exportPath); + const imps = importPaths.map(p => path.get(p)); + const impsBindingRefs = importBindingsReferences.map(p => path.get(p)); + const decl = exp.get("declaration"); + + if (id.type === "Identifier") { + exp.replaceWith(decl); + } else if (id.type === "MemberExpression") { + exportBindingAssignments.forEach(assignPath => { + const assign = path.get(assignPath); + assign.replaceWith(assignmentExpression("=", id, assign.node)); + }); + exp.replaceWith(decl); + path.pushContainer("body", expressionStatement(assignmentExpression("=", id, identifier(exportName)))); + } else { + throw new Error("Unexpected helper format."); + } - for (const path of imps) path.remove(); + Object.keys(toRename).forEach(name => { + path.scope.rename(name, toRename[name]); + }); - for (const path of impsBindingRefs) { - const node = cloneNode(dependenciesRefs[path.node.name]); - path.replaceWith(node); - } + for (const path of imps) path.remove(); - path.stop(); - } - - }; - (0, _traverse.default)(file.ast, visitor, file.scope); + for (const path of impsBindingRefs) { + const node = cloneNode(dependenciesRefs[path.node.name]); + path.replaceWith(node); + } } const helperData = Object.create(null); @@ -239,23 +221,34 @@ function loadHelper(name) { } const fn = () => { - const file = { - ast: t_file(helper.ast()) - }; - - if (fileClass) { - return new fileClass({ - filename: `babel-helper://${name}` - }, file); + { + if (!FileClass) { + const fakeFile = { + ast: file(helper.ast()), + path: null + }; + (0, _traverse.default)(fakeFile.ast, { + Program: path => (fakeFile.path = path).stop() + }); + return fakeFile; + } } - - return file; + return new FileClass({ + filename: `babel-helper://${name}` + }, { + ast: file(helper.ast()), + code: "[internal Babel helper code]", + inputMap: null + }); }; - const metadata = getHelperMetadata(fn()); + let metadata = null; helperData[name] = { + minVersion: helper.minVersion, + build(getDependency, id, localBindings) { const file = fn(); + metadata || (metadata = getHelperMetadata(file)); permuteHelperAST(file, metadata, id, localBindings, getDependency); return { nodes: file.ast.program.body, @@ -263,11 +256,11 @@ function loadHelper(name) { }; }, - minVersion() { - return helper.minVersion; - }, + getDependencies() { + metadata || (metadata = getHelperMetadata(fn())); + return Array.from(metadata.dependencies.values()); + } - dependencies: metadata.dependencies }; } @@ -279,22 +272,21 @@ function get(name, getDependency, id, localBindings) { } function minVersion(name) { - return loadHelper(name).minVersion(); + return loadHelper(name).minVersion; } function getDependencies(name) { - return Array.from(loadHelper(name).dependencies.values()); + return loadHelper(name).getDependencies(); } function ensure(name, newFileClass) { - if (!fileClass) { - fileClass = newFileClass; - } - + FileClass || (FileClass = newFileClass); loadHelper(name); } const list = Object.keys(_helpers.default).map(name => name.replace(/^_/, "")); exports.list = list; var _default = get; -exports.default = _default; \ No newline at end of file +exports.default = _default; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/package.json b/tools/node_modules/eslint/node_modules/@babel/helpers/package.json index 95203cd51a3..c8d9ff4f7d7 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/package.json @@ -1,6 +1,6 @@ { "name": "@babel/helpers", - "version": "7.17.2", + "version": "7.19.0", "description": "Collection of helper functions used by Babel transforms.", "author": "The Babel Team (https://babel.dev/team)", "homepage": "https://babel.dev/docs/en/next/babel-helpers", @@ -15,15 +15,19 @@ }, "main": "./lib/index.js", "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" }, "devDependencies": { - "@babel/helper-plugin-test-runner": "^7.16.7", + "@babel/generator": "^7.19.0", + "@babel/helper-plugin-test-runner": "^7.18.6", + "@babel/parser": "^7.19.0", + "regenerator-runtime": "^0.13.9", "terser": "^5.9.0" }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/scripts/generate-helpers.js b/tools/node_modules/eslint/node_modules/@babel/helpers/scripts/generate-helpers.js index 1c59746df9c..e0b37019320 100644 --- a/tools/node_modules/eslint/node_modules/@babel/helpers/scripts/generate-helpers.js +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/scripts/generate-helpers.js @@ -1,7 +1,7 @@ import fs from "fs"; import { join } from "path"; import { URL, fileURLToPath } from "url"; -import { minify } from "terser"; // eslint-disable-line +import { minify } from "terser"; // eslint-disable-line import/no-extraneous-dependencies const HELPERS_FOLDER = new URL("../src/helpers", import.meta.url); const IGNORED_FILES = new Set(["package.json"]); @@ -14,10 +14,10 @@ export default async function generateHelpers() { import template from "@babel/template"; -function helper(minVersion, source) { +function helper(minVersion: string, source: string) { return Object.freeze({ minVersion, - ast: () => template.program.ast(source), + ast: () => template.program.ast(source, { preserveComments: true }), }) } diff --git a/tools/node_modules/eslint/node_modules/@babel/helpers/scripts/generate-regenerator-runtime.js b/tools/node_modules/eslint/node_modules/@babel/helpers/scripts/generate-regenerator-runtime.js new file mode 100644 index 00000000000..b6bacf65e40 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/helpers/scripts/generate-regenerator-runtime.js @@ -0,0 +1,64 @@ +/* eslint-disable import/no-extraneous-dependencies */ + +import fs from "fs"; +import { createRequire } from "module"; + +const [parse, generate] = await Promise.all([ + import("@babel/parser").then(ns => ns.parse), + import("@babel/generator").then(ns => ns.default.default || ns.default), +]).catch(error => + Promise.reject( + new Error( + "Before running generate-helpers.js you must compile @babel/parser and @babel/generator.", + { cause: error } + ) + ) +); + +const REGENERATOR_RUNTIME_IN_FILE = fs.readFileSync( + createRequire(import.meta.url).resolve("regenerator-runtime"), + "utf8" +); + +const MIN_VERSION = "7.18.0"; + +const HEADER = `/* @minVersion ${MIN_VERSION} */ +/* + * This file is auto-generated! Do not modify it directly. + * To re-generate, update the regenerator-runtime dependency of + * @babel/helpers and run 'yarn gulp generate-runtime-helpers'. + */ + +/* eslint-disable */ +`; + +const COPYRIGHT = `/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */`; + +export default function generateRegeneratorRuntimeHelper() { + const ast = parse(REGENERATOR_RUNTIME_IN_FILE, { sourceType: "script" }); + + const factoryFunction = ast.program.body[0].declarations[0].init.callee; + factoryFunction.type = "FunctionDeclaration"; + factoryFunction.id = { type: "Identifier", name: "_regeneratorRuntime" }; + factoryFunction.params = []; + factoryFunction.body.body.unshift( + ...stmts(` + ${COPYRIGHT} + _regeneratorRuntime = function () { return exports; }; + var exports = {}; + `) + ); + + const { code } = generate({ + type: "ExportDefaultDeclaration", + declaration: factoryFunction, + }); + + return HEADER + code; +} + +function stmts(code) { + return parse(`function _() { ${code} }`, { + sourceType: "script", + }).program.body[0].body.body; +} diff --git a/tools/node_modules/eslint/node_modules/@babel/highlight/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/highlight/lib/index.js index d323b399c41..856dfd9fb80 100644 --- a/tools/node_modules/eslint/node_modules/@babel/highlight/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/highlight/lib/index.js @@ -41,7 +41,7 @@ let tokenize; return "keyword"; } - if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == "=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/parser/index.cjs b/tools/node_modules/eslint/node_modules/@babel/parser/index.cjs new file mode 100644 index 00000000000..89863a9f365 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/parser/index.cjs @@ -0,0 +1,5 @@ +try { + module.exports = require("./lib/index.cjs"); +} catch { + module.exports = require("./lib/index.js"); +} diff --git a/tools/node_modules/eslint/node_modules/@babel/parser/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/parser/lib/index.js index b9559112d63..dced7d016ad 100644 --- a/tools/node_modules/eslint/node_modules/@babel/parser/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/parser/lib/index.js @@ -2,245 +2,121 @@ Object.defineProperty(exports, '__esModule', { value: true }); -class BaseParser { - constructor() { - this.sawUnambiguousESM = false; - this.ambiguousScriptDifferentAst = false; - } - - hasPlugin(pluginConfig) { - if (typeof pluginConfig === "string") { - return this.plugins.has(pluginConfig); - } else { - const [pluginName, pluginOptions] = pluginConfig; - - if (!this.hasPlugin(pluginName)) { - return false; - } - - const actualOptions = this.plugins.get(pluginName); - - for (const key of Object.keys(pluginOptions)) { - if ((actualOptions == null ? void 0 : actualOptions[key]) !== pluginOptions[key]) { - return false; - } - } - - return true; - } - } +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; - getPluginOption(plugin, name) { - var _this$plugins$get; - - return (_this$plugins$get = this.plugins.get(plugin)) == null ? void 0 : _this$plugins$get[name]; + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; } + return target; } -function setTrailingComments(node, comments) { - if (node.trailingComments === undefined) { - node.trailingComments = comments; - } else { - node.trailingComments.unshift(...comments); - } -} - -function setLeadingComments(node, comments) { - if (node.leadingComments === undefined) { - node.leadingComments = comments; - } else { - node.leadingComments.unshift(...comments); +class Position { + constructor(line, col, index) { + this.line = void 0; + this.column = void 0; + this.index = void 0; + this.line = line; + this.column = col; + this.index = index; } -} -function setInnerComments(node, comments) { - if (node.innerComments === undefined) { - node.innerComments = comments; - } else { - node.innerComments.unshift(...comments); - } } - -function adjustInnerComments(node, elements, commentWS) { - let lastElement = null; - let i = elements.length; - - while (lastElement === null && i > 0) { - lastElement = elements[--i]; +class SourceLocation { + constructor(start, end) { + this.start = void 0; + this.end = void 0; + this.filename = void 0; + this.identifierName = void 0; + this.start = start; + this.end = end; } - if (lastElement === null || lastElement.start > commentWS.start) { - setInnerComments(node, commentWS.comments); - } else { - setTrailingComments(lastElement, commentWS.comments); - } +} +function createPositionWithColumnOffset(position, columnOffset) { + const { + line, + column, + index + } = position; + return new Position(line, column + columnOffset, index + columnOffset); } -class CommentsParser extends BaseParser { - addComment(comment) { - if (this.filename) comment.loc.filename = this.filename; - this.state.comments.push(comment); - } - - processComment(node) { - const { - commentStack - } = this.state; - const commentStackLength = commentStack.length; - if (commentStackLength === 0) return; - let i = commentStackLength - 1; - const lastCommentWS = commentStack[i]; - - if (lastCommentWS.start === node.end) { - lastCommentWS.leadingNode = node; - i--; - } - - const { - start: nodeStart - } = node; - - for (; i >= 0; i--) { - const commentWS = commentStack[i]; - const commentEnd = commentWS.end; - - if (commentEnd > nodeStart) { - commentWS.containingNode = node; - this.finalizeComment(commentWS); - commentStack.splice(i, 1); - } else { - if (commentEnd === nodeStart) { - commentWS.trailingNode = node; - } - - break; - } - } - } - - finalizeComment(commentWS) { - const { - comments - } = commentWS; - - if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) { - if (commentWS.leadingNode !== null) { - setTrailingComments(commentWS.leadingNode, comments); - } - - if (commentWS.trailingNode !== null) { - setLeadingComments(commentWS.trailingNode, comments); - } - } else { - const { - containingNode: node, - start: commentStart - } = commentWS; - - if (this.input.charCodeAt(commentStart - 1) === 44) { - switch (node.type) { - case "ObjectExpression": - case "ObjectPattern": - case "RecordExpression": - adjustInnerComments(node, node.properties, commentWS); - break; - - case "CallExpression": - case "OptionalCallExpression": - adjustInnerComments(node, node.arguments, commentWS); - break; - - case "FunctionDeclaration": - case "FunctionExpression": - case "ArrowFunctionExpression": - case "ObjectMethod": - case "ClassMethod": - case "ClassPrivateMethod": - adjustInnerComments(node, node.params, commentWS); - break; - - case "ArrayExpression": - case "ArrayPattern": - case "TupleExpression": - adjustInnerComments(node, node.elements, commentWS); - break; - - case "ExportNamedDeclaration": - case "ImportDeclaration": - adjustInnerComments(node, node.specifiers, commentWS); - break; - - default: - { - setInnerComments(node, comments); - } - } - } else { - setInnerComments(node, comments); - } - } - } - - finalizeRemainingComments() { - const { - commentStack - } = this.state; +var ParseErrorCode = { + SyntaxError: "BABEL_PARSER_SYNTAX_ERROR", + SourceTypeModuleError: "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED" +}; - for (let i = commentStack.length - 1; i >= 0; i--) { - this.finalizeComment(commentStack[i]); - } +const reflect = (keys, last = keys.length - 1) => ({ + get() { + return keys.reduce((object, key) => object[key], this); + }, - this.state.commentStack = []; + set(value) { + keys.reduce((item, key, i) => i === last ? item[key] = value : item[key], this); } - resetPreviousNodeTrailingComments(node) { - const { - commentStack - } = this.state; - const { - length - } = commentStack; - if (length === 0) return; - const commentWS = commentStack[length - 1]; - - if (commentWS.leadingNode === node) { - commentWS.leadingNode = null; - } - } - - takeSurroundingComments(node, start, end) { - const { - commentStack - } = this.state; - const commentStackLength = commentStack.length; - if (commentStackLength === 0) return; - let i = commentStackLength - 1; - - for (; i >= 0; i--) { - const commentWS = commentStack[i]; - const commentEnd = commentWS.end; - const commentStart = commentWS.start; +}); - if (commentStart === end) { - commentWS.leadingNode = node; - } else if (commentEnd === start) { - commentWS.trailingNode = node; - } else if (commentEnd < start) { - break; - } - } +const instantiate = (constructor, properties, descriptors) => Object.keys(descriptors).map(key => [key, descriptors[key]]).filter(([, descriptor]) => !!descriptor).map(([key, descriptor]) => [key, typeof descriptor === "function" ? { + value: descriptor, + enumerable: false +} : typeof descriptor.reflect === "string" ? Object.assign({}, descriptor, reflect(descriptor.reflect.split("."))) : descriptor]).reduce((instance, [key, descriptor]) => Object.defineProperty(instance, key, Object.assign({ + configurable: true +}, descriptor)), Object.assign(new constructor(), properties)); + +var ModuleErrors = { + ImportMetaOutsideModule: { + message: `import.meta may appear only with 'sourceType: "module"'`, + code: ParseErrorCode.SourceTypeModuleError + }, + ImportOutsideModule: { + message: `'import' and 'export' may appear only with 'sourceType: "module"'`, + code: ParseErrorCode.SourceTypeModuleError } +}; -} +const NodeDescriptions = { + ArrayPattern: "array destructuring pattern", + AssignmentExpression: "assignment expression", + AssignmentPattern: "assignment expression", + ArrowFunctionExpression: "arrow function expression", + ConditionalExpression: "conditional expression", + CatchClause: "catch clause", + ForOfStatement: "for-of statement", + ForInStatement: "for-in statement", + ForStatement: "for-loop", + FormalParameters: "function parameter list", + Identifier: "identifier", + ImportSpecifier: "import specifier", + ImportDefaultSpecifier: "import default specifier", + ImportNamespaceSpecifier: "import namespace specifier", + ObjectPattern: "object destructuring pattern", + ParenthesizedExpression: "parenthesized expression", + RestElement: "rest element", + UpdateExpression: { + true: "prefix operation", + false: "postfix operation" + }, + VariableDeclarator: "variable declaration", + YieldExpression: "yield expression" +}; -const ErrorCodes = Object.freeze({ - SyntaxError: "BABEL_PARSER_SYNTAX_ERROR", - SourceTypeModuleError: "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED" -}); +const toNodeDescription = ({ + type, + prefix +}) => type === "UpdateExpression" ? NodeDescriptions.UpdateExpression[String(prefix)] : NodeDescriptions[type]; -const ErrorMessages = makeErrorTemplates({ - AccessorIsGenerator: "A %0ter cannot be a generator.", +var StandardErrors = { + AccessorIsGenerator: ({ + kind + }) => `A ${kind}ter cannot be a generator.`, ArgumentsInClass: "'arguments' is only allowed in functions and class methods.", AsyncFunctionInSingleStatementContext: "Async functions can only be declared at the top level or inside a block.", AwaitBindingIdentifier: "Can not use 'await' as identifier inside an async function.", @@ -256,7 +132,10 @@ const ErrorMessages = makeErrorTemplates({ ConstructorIsAccessor: "Class constructor may not be an accessor.", ConstructorIsAsync: "Constructor can't be an async function.", ConstructorIsGenerator: "Constructor can't be a generator.", - DeclarationMissingInitializer: "'%0' require an initialization value.", + DeclarationMissingInitializer: ({ + kind + }) => `Missing initializer in ${kind} declaration.`, + DecoratorArgumentsOutsideParentheses: "Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.", DecoratorBeforeExport: "Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax.", DecoratorConstructor: "Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?", DecoratorExportClass: "Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.", @@ -266,59 +145,101 @@ const ErrorMessages = makeErrorTemplates({ DestructureNamedImport: "ES2015 named imports do not destructure. Use another statement for destructuring after the import.", DuplicateConstructor: "Duplicate constructor in the same class.", DuplicateDefaultExport: "Only one default export allowed per module.", - DuplicateExport: "`%0` has already been exported. Exported identifiers must be unique.", + DuplicateExport: ({ + exportName + }) => `\`${exportName}\` has already been exported. Exported identifiers must be unique.`, DuplicateProto: "Redefinition of __proto__ property.", DuplicateRegExpFlags: "Duplicate regular expression flag.", ElementAfterRest: "Rest element must be last element.", EscapedCharNotAnIdentifier: "Invalid Unicode escape.", - ExportBindingIsString: "A string literal cannot be used as an exported binding without `from`.\n- Did you mean `export { '%0' as '%1' } from 'some-module'`?", + ExportBindingIsString: ({ + localName, + exportName + }) => `A string literal cannot be used as an exported binding without \`from\`.\n- Did you mean \`export { '${localName}' as '${exportName}' } from 'some-module'\`?`, ExportDefaultFromAsIdentifier: "'from' is not allowed as an identifier after 'export default'.", - ForInOfLoopInitializer: "'%0' loop variable declaration may not have an initializer.", + ForInOfLoopInitializer: ({ + type + }) => `'${type === "ForInStatement" ? "for-in" : "for-of"}' loop variable declaration may not have an initializer.`, ForOfAsync: "The left-hand side of a for-of loop may not be 'async'.", ForOfLet: "The left-hand side of a for-of loop may not start with 'let'.", GeneratorInSingleStatementContext: "Generators can only be declared at the top level or inside a block.", - IllegalBreakContinue: "Unsyntactic %0.", + IllegalBreakContinue: ({ + type + }) => `Unsyntactic ${type === "BreakStatement" ? "break" : "continue"}.`, IllegalLanguageModeDirective: "Illegal 'use strict' directive in function with non-simple parameter list.", IllegalReturn: "'return' outside of function.", - ImportBindingIsString: 'A string literal cannot be used as an imported binding.\n- Did you mean `import { "%0" as foo }`?', + ImportBindingIsString: ({ + importName + }) => `A string literal cannot be used as an imported binding.\n- Did you mean \`import { "${importName}" as foo }\`?`, ImportCallArgumentTrailingComma: "Trailing comma is disallowed inside import(...) arguments.", - ImportCallArity: "`import()` requires exactly %0.", + ImportCallArity: ({ + maxArgumentCount + }) => `\`import()\` requires exactly ${maxArgumentCount === 1 ? "one argument" : "one or two arguments"}.`, ImportCallNotNewExpression: "Cannot use new with import(...).", ImportCallSpreadArgument: "`...` is not allowed in `import()`.", + ImportJSONBindingNotDefault: "A JSON module can only be imported with `default`.", IncompatibleRegExpUVFlags: "The 'u' and 'v' regular expression flags cannot be enabled at the same time.", InvalidBigIntLiteral: "Invalid BigIntLiteral.", InvalidCodePoint: "Code point out of bounds.", InvalidCoverInitializedName: "Invalid shorthand property initializer.", InvalidDecimal: "Invalid decimal.", - InvalidDigit: "Expected number in radix %0.", + InvalidDigit: ({ + radix + }) => `Expected number in radix ${radix}.`, InvalidEscapeSequence: "Bad character escape sequence.", InvalidEscapeSequenceTemplate: "Invalid escape sequence in template.", - InvalidEscapedReservedWord: "Escape sequence in keyword %0.", - InvalidIdentifier: "Invalid identifier %0.", - InvalidLhs: "Invalid left-hand side in %0.", - InvalidLhsBinding: "Binding invalid left-hand side in %0.", + InvalidEscapedReservedWord: ({ + reservedWord + }) => `Escape sequence in keyword ${reservedWord}.`, + InvalidIdentifier: ({ + identifierName + }) => `Invalid identifier ${identifierName}.`, + InvalidLhs: ({ + ancestor + }) => `Invalid left-hand side in ${toNodeDescription(ancestor)}.`, + InvalidLhsBinding: ({ + ancestor + }) => `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`, InvalidNumber: "Invalid number.", InvalidOrMissingExponent: "Floating-point numbers require a valid exponent after the 'e'.", - InvalidOrUnexpectedToken: "Unexpected character '%0'.", + InvalidOrUnexpectedToken: ({ + unexpected + }) => `Unexpected character '${unexpected}'.`, InvalidParenthesizedAssignment: "Invalid parenthesized assignment pattern.", - InvalidPrivateFieldResolution: "Private name #%0 is not defined.", + InvalidPrivateFieldResolution: ({ + identifierName + }) => `Private name #${identifierName} is not defined.`, InvalidPropertyBindingPattern: "Binding member expression.", InvalidRecordProperty: "Only properties and spread elements are allowed in record definitions.", InvalidRestAssignmentPattern: "Invalid rest operator's argument.", - LabelRedeclaration: "Label '%0' is already declared.", + LabelRedeclaration: ({ + labelName + }) => `Label '${labelName}' is already declared.`, LetInLexicalBinding: "'let' is not allowed to be used as a name in 'let' or 'const' declarations.", LineTerminatorBeforeArrow: "No line break is allowed before '=>'.", MalformedRegExpFlags: "Invalid regular expression flag.", MissingClassName: "A class name is required.", MissingEqInAssignment: "Only '=' operator can be used for specifying default value.", MissingSemicolon: "Missing semicolon.", + MissingPlugin: ({ + missingPlugin + }) => `This experimental syntax requires enabling the parser plugin: ${missingPlugin.map(name => JSON.stringify(name)).join(", ")}.`, + MissingOneOfPlugins: ({ + missingPlugin + }) => `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin.map(name => JSON.stringify(name)).join(", ")}.`, MissingUnicodeEscape: "Expecting Unicode escape sequence \\uXXXX.", MixingCoalesceWithLogical: "Nullish coalescing operator(??) requires parens when mixing with logical operators.", ModuleAttributeDifferentFromType: "The only accepted module attribute is `type`.", ModuleAttributeInvalidValue: "Only string literals are allowed as module attribute values.", - ModuleAttributesWithDuplicateKeys: 'Duplicate key "%0" is not allowed in module attributes.', - ModuleExportNameHasLoneSurrogate: "An export name cannot include a lone surrogate, found '\\u%0'.", - ModuleExportUndefined: "Export '%0' is not defined.", + ModuleAttributesWithDuplicateKeys: ({ + key + }) => `Duplicate key "${key}" is not allowed in module attributes.`, + ModuleExportNameHasLoneSurrogate: ({ + surrogateCharCode + }) => `An export name cannot include a lone surrogate, found '\\u${surrogateCharCode.toString(16)}'.`, + ModuleExportUndefined: ({ + localName + }) => `Export '${localName}' is not defined.`, MultipleDefaultsInSwitch: "Multiple default clauses.", NewlineAfterThrow: "Illegal newline after throw.", NoCatchOrFinally: "Missing catch or finally clause.", @@ -331,20 +252,12 @@ const ErrorMessages = makeErrorTemplates({ ParamDupe: "Argument name clash.", PatternHasAccessor: "Object pattern can't contain getter or setter.", PatternHasMethod: "Object pattern can't contain methods.", - PipeBodyIsTighter: "Unexpected %0 after pipeline body; any %0 expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.", - PipeTopicRequiresHackPipes: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.', - PipeTopicUnbound: "Topic reference is unbound; it must be inside a pipe body.", - PipeTopicUnconfiguredToken: 'Invalid topic token %0. In order to use %0 as a topic reference, the pipelineOperator plugin must be configured with { "proposal": "hack", "topicToken": "%0" }.', - PipeTopicUnused: "Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.", - PipeUnparenthesizedBody: "Hack-style pipe body cannot be an unparenthesized %0 expression; please wrap it in parentheses.", - PipelineBodyNoArrow: 'Unexpected arrow "=>" after pipeline body; arrow function in pipeline body must be parenthesized.', - PipelineBodySequenceExpression: "Pipeline body may not be a comma-separated sequence expression.", - PipelineHeadSequenceExpression: "Pipeline head should not be a comma-separated sequence expression.", - PipelineTopicUnused: "Pipeline is in topic style but does not use topic reference.", - PrimaryTopicNotAllowed: "Topic reference was used in a lexical context without topic binding.", - PrimaryTopicRequiresSmartPipeline: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.', - PrivateInExpectedIn: "Private names are only allowed in property accesses (`obj.#%0`) or in `in` expressions (`#%0 in obj`).", - PrivateNameRedeclaration: "Duplicate private name #%0.", + PrivateInExpectedIn: ({ + identifierName + }) => `Private names are only allowed in property accesses (\`obj.#${identifierName}\`) or in \`in\` expressions (\`#${identifierName} in obj\`).`, + PrivateNameRedeclaration: ({ + identifierName + }) => `Duplicate private name #${identifierName}.`, RecordExpressionBarIncorrectEndSyntaxType: "Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.", RecordExpressionBarIncorrectStartSyntaxType: "Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.", RecordExpressionHashIncorrectStartSyntaxType: "Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.", @@ -352,13 +265,6 @@ const ErrorMessages = makeErrorTemplates({ RestTrailingComma: "Unexpected trailing comma after rest element.", SloppyFunction: "In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.", StaticPrototype: "Classes may not have static property named prototype.", - StrictDelete: "Deleting local variable in strict mode.", - StrictEvalArguments: "Assigning to '%0' in strict mode.", - StrictEvalArgumentsBinding: "Binding '%0' in strict mode.", - StrictFunction: "In strict mode code, functions can only be declared at top level or inside a block.", - StrictNumericEscape: "The only valid numeric escape in strict mode is '\\0'.", - StrictOctalLiteral: "Legacy octal literals are not allowed in strict mode.", - StrictWith: "'with' in strict mode.", SuperNotAllowed: "`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?", SuperPrivateField: "Private fields can't be accessed on super.", TrailingDecorator: "Decorators must be attached to a class element.", @@ -369,21 +275,31 @@ const ErrorMessages = makeErrorTemplates({ UnexpectedAwaitAfterPipelineBody: 'Unexpected "await" after pipeline body; await must have parentheses in minimal proposal.', UnexpectedDigitAfterHash: "Unexpected digit after hash token.", UnexpectedImportExport: "'import' and 'export' may only appear at the top level.", - UnexpectedKeyword: "Unexpected keyword '%0'.", + UnexpectedKeyword: ({ + keyword + }) => `Unexpected keyword '${keyword}'.`, UnexpectedLeadingDecorator: "Leading decorators must be attached to a class declaration.", UnexpectedLexicalDeclaration: "Lexical declaration cannot appear in a single-statement context.", UnexpectedNewTarget: "`new.target` can only be used in functions or class properties.", UnexpectedNumericSeparator: "A numeric separator is only allowed between two digits.", UnexpectedPrivateField: "Unexpected private name.", - UnexpectedReservedWord: "Unexpected reserved word '%0'.", + UnexpectedReservedWord: ({ + reservedWord + }) => `Unexpected reserved word '${reservedWord}'.`, UnexpectedSuper: "'super' is only allowed in object methods and classes.", - UnexpectedToken: "Unexpected token '%0'.", + UnexpectedToken: ({ + expected, + unexpected + }) => `Unexpected token${unexpected ? ` '${unexpected}'.` : ""}${expected ? `, expected "${expected}"` : ""}`, UnexpectedTokenUnaryExponentiation: "Illegal expression. Wrap left hand side or entire exponentiation in parentheses.", UnsupportedBind: "Binding should be performed on object property.", UnsupportedDecoratorExport: "A decorated export must export a class declaration.", UnsupportedDefaultExport: "Only expressions, functions or classes are allowed as the `default` export.", UnsupportedImport: "`import` can only be used in `import()` or `import.meta`.", - UnsupportedMetaProperty: "The only valid meta property for %0 is %0.%1.", + UnsupportedMetaProperty: ({ + target, + onlyValidPropertyName + }) => `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`, UnsupportedParameterDecorator: "Decorators cannot be used to decorate parameters.", UnsupportedPropertyDecorator: "Decorators cannot be used to decorate object literal properties.", UnsupportedSuper: "'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).", @@ -391,100 +307,135 @@ const ErrorMessages = makeErrorTemplates({ UnterminatedRegExp: "Unterminated regular expression.", UnterminatedString: "Unterminated string constant.", UnterminatedTemplate: "Unterminated template.", - VarRedeclaration: "Identifier '%0' has already been declared.", + VarRedeclaration: ({ + identifierName + }) => `Identifier '${identifierName}' has already been declared.`, YieldBindingIdentifier: "Can not use 'yield' as identifier inside a generator.", YieldInParameter: "Yield expression is not allowed in formal parameters.", ZeroDigitNumericSeparator: "Numeric separator can not be used after leading 0." -}, ErrorCodes.SyntaxError); -const SourceTypeModuleErrorMessages = makeErrorTemplates({ - ImportMetaOutsideModule: `import.meta may appear only with 'sourceType: "module"'`, - ImportOutsideModule: `'import' and 'export' may appear only with 'sourceType: "module"'` -}, ErrorCodes.SourceTypeModuleError); - -function keepReasonCodeCompat(reasonCode, syntaxPlugin) { - { - if (syntaxPlugin === "flow" && reasonCode === "PatternIsOptional") { - return "OptionalBindingPattern"; - } - } - return reasonCode; -} +}; -function makeErrorTemplates(messages, code, syntaxPlugin) { - const templates = {}; - Object.keys(messages).forEach(reasonCode => { - templates[reasonCode] = Object.freeze({ - code, - reasonCode: keepReasonCodeCompat(reasonCode, syntaxPlugin), - template: messages[reasonCode] - }); - }); - return Object.freeze(templates); -} -class ParserError extends CommentsParser { - raise({ - code, - reasonCode, - template - }, origin, ...params) { - return this.raiseWithData(origin.node ? origin.node.loc.start : origin.at, { - code, - reasonCode - }, template, ...params); - } +var StrictModeErrors = { + StrictDelete: "Deleting local variable in strict mode.", + StrictEvalArguments: ({ + referenceName + }) => `Assigning to '${referenceName}' in strict mode.`, + StrictEvalArgumentsBinding: ({ + bindingName + }) => `Binding '${bindingName}' in strict mode.`, + StrictFunction: "In strict mode code, functions can only be declared at top level or inside a block.", + StrictNumericEscape: "The only valid numeric escape in strict mode is '\\0'.", + StrictOctalLiteral: "Legacy octal literals are not allowed in strict mode.", + StrictWith: "'with' in strict mode." +}; - raiseOverwrite(loc, { - code, - template - }, ...params) { - const pos = loc.index; - const message = template.replace(/%(\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`; +const UnparenthesizedPipeBodyDescriptions = new Set(["ArrowFunctionExpression", "AssignmentExpression", "ConditionalExpression", "YieldExpression"]); +var PipelineOperatorErrors = { + PipeBodyIsTighter: "Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.", + PipeTopicRequiresHackPipes: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.', + PipeTopicUnbound: "Topic reference is unbound; it must be inside a pipe body.", + PipeTopicUnconfiguredToken: ({ + token + }) => `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { "proposal": "hack", "topicToken": "${token}" }.`, + PipeTopicUnused: "Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.", + PipeUnparenthesizedBody: ({ + type + }) => `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({ + type + })}; please wrap it in parentheses.`, + PipelineBodyNoArrow: 'Unexpected arrow "=>" after pipeline body; arrow function in pipeline body must be parenthesized.', + PipelineBodySequenceExpression: "Pipeline body may not be a comma-separated sequence expression.", + PipelineHeadSequenceExpression: "Pipeline head should not be a comma-separated sequence expression.", + PipelineTopicUnused: "Pipeline is in topic style but does not use topic reference.", + PrimaryTopicNotAllowed: "Topic reference was used in a lexical context without topic binding.", + PrimaryTopicRequiresSmartPipeline: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.' +}; - if (this.options.errorRecovery) { - const errors = this.state.errors; +const _excluded$1 = ["toMessage"], + _excluded2$1 = ["message"]; - for (let i = errors.length - 1; i >= 0; i--) { - const error = errors[i]; +function toParseErrorConstructor(_ref) { + let { + toMessage + } = _ref, + properties = _objectWithoutPropertiesLoose(_ref, _excluded$1); - if (error.pos === pos) { - return Object.assign(error, { - message + return function constructor({ + loc, + details + }) { + return instantiate(SyntaxError, Object.assign({}, properties, { + loc + }), { + clone(overrides = {}) { + const loc = overrides.loc || {}; + return constructor({ + loc: new Position("line" in loc ? loc.line : this.loc.line, "column" in loc ? loc.column : this.loc.column, "index" in loc ? loc.index : this.loc.index), + details: Object.assign({}, this.details, overrides.details) + }); + }, + + details: { + value: details, + enumerable: false + }, + message: { + get() { + return `${toMessage(this.details)} (${this.loc.line}:${this.loc.column})`; + }, + + set(value) { + Object.defineProperty(this, "message", { + value }); - } else if (error.pos < pos) { - break; } + + }, + pos: { + reflect: "loc.index", + enumerable: true + }, + missingPlugin: "missingPlugin" in details && { + reflect: "details.missingPlugin", + enumerable: true } - } + }); + }; +} - return this._raise({ - code, - loc, - pos - }, message); +function ParseErrorEnum(argument, syntaxPlugin) { + if (Array.isArray(argument)) { + return parseErrorTemplates => ParseErrorEnum(parseErrorTemplates, argument[0]); } - raiseWithData(loc, data, errorTemplate, ...params) { - const pos = loc.index; - const message = errorTemplate.replace(/%(\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`; - return this._raise(Object.assign({ - loc, - pos - }, data), message); - } + const ParseErrorConstructors = {}; - _raise(errorContext, message) { - const err = new SyntaxError(message); - Object.assign(err, errorContext); + for (const reasonCode of Object.keys(argument)) { + const template = argument[reasonCode]; - if (this.options.errorRecovery) { - if (!this.isLookahead) this.state.errors.push(err); - return err; - } else { - throw err; - } + const _ref2 = typeof template === "string" ? { + message: () => template + } : typeof template === "function" ? { + message: template + } : template, + { + message + } = _ref2, + rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1); + + const toMessage = typeof message === "string" ? () => message : message; + ParseErrorConstructors[reasonCode] = toParseErrorConstructor(Object.assign({ + code: ParseErrorCode.SyntaxError, + reasonCode, + toMessage + }, syntaxPlugin ? { + syntaxPlugin + } : {}, rest)); } + return ParseErrorConstructors; } +const Errors = Object.assign({}, ParseErrorEnum(ModuleErrors), ParseErrorEnum(StandardErrors), ParseErrorEnum(StrictModeErrors), ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors)); const { defineProperty @@ -496,12 +447,12 @@ const toUnenumerable = (object, key) => defineProperty(object, key, { }); function toESTreeLocation(node) { - toUnenumerable(node.loc.start, "index"); - toUnenumerable(node.loc.end, "index"); + node.loc.start && toUnenumerable(node.loc.start, "index"); + node.loc.end && toUnenumerable(node.loc.end, "index"); return node; } -var estree = (superClass => class extends superClass { +var estree = (superClass => class ESTreeParserMixin extends superClass { parse() { const file = toESTreeLocation(super.parse()); @@ -572,14 +523,17 @@ var estree = (superClass => class extends superClass { } directiveToStmt(directive) { - const directiveLiteral = directive.value; - const stmt = this.startNodeAt(directive.start, directive.loc.start); - const expression = this.startNodeAt(directiveLiteral.start, directiveLiteral.loc.start); - expression.value = directiveLiteral.extra.expressionValue; - expression.raw = directiveLiteral.extra.raw; - stmt.expression = this.finishNodeAt(expression, "Literal", directiveLiteral.loc.end); - stmt.directive = directiveLiteral.extra.raw.slice(1, -1); - return this.finishNodeAt(stmt, "ExpressionStatement", directive.loc.end); + const expression = directive.value; + delete directive.value; + expression.type = "Literal"; + expression.raw = expression.extra.raw; + expression.value = expression.extra.expressionValue; + const stmt = directive; + stmt.type = "ExpressionStatement"; + stmt.expression = expression; + stmt.directive = expression.extra.rawValue; + delete expression.extra; + return stmt; } initFunction(node, isAsync) { @@ -605,8 +559,8 @@ var estree = (superClass => class extends superClass { return stmt.type === "ExpressionStatement" && stmt.expression.type === "Literal" && typeof stmt.expression.value === "string" && !((_stmt$expression$extr = stmt.expression.extra) != null && _stmt$expression$extr.parenthesized); } - parseBlockBody(node, ...args) { - super.parseBlockBody(node, ...args); + parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) { + super.parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse); const directiveStatements = node.directives.map(d => this.directiveToStmt(d)); node.body = directiveStatements.concat(node.body); delete node.directives; @@ -684,8 +638,7 @@ var estree = (superClass => class extends superClass { node.computed = false; } - type = "MethodDefinition"; - return this.finishNode(node, type); + return this.finishNode(node, "MethodDefinition"); } parseClassProperty(...args) { @@ -716,7 +669,11 @@ var estree = (superClass => class extends superClass { if (node) { node.type = "Property"; - if (node.kind === "method") node.kind = "init"; + + if (node.kind === "method") { + node.kind = "init"; + } + node.shorthand = false; } @@ -734,6 +691,10 @@ var estree = (superClass => class extends superClass { return node; } + isValidLVal(type, isUnparenthesizedInAssign, binding) { + return type === "Property" ? "value" : super.isValidLVal(type, isUnparenthesizedInAssign, binding); + } + isAssignable(node, isBinding) { if (node != null && this.isObjectProperty(node)) { return this.isAssignable(node.value, isBinding); @@ -754,28 +715,27 @@ var estree = (superClass => class extends superClass { } this.toAssignable(value, isLHS); - return node; + } else { + super.toAssignable(node, isLHS); } - - return super.toAssignable(node, isLHS); } - toAssignableObjectExpressionProp(prop, ...args) { + toAssignableObjectExpressionProp(prop, isLast, isLHS) { if (prop.kind === "get" || prop.kind === "set") { - this.raise(ErrorMessages.PatternHasAccessor, { - node: prop.key + this.raise(Errors.PatternHasAccessor, { + at: prop.key }); } else if (prop.method) { - this.raise(ErrorMessages.PatternHasMethod, { - node: prop.key + this.raise(Errors.PatternHasMethod, { + at: prop.key }); } else { - super.toAssignableObjectExpressionProp(prop, ...args); + super.toAssignableObjectExpressionProp(prop, isLast, isLHS); } } - finishCallExpression(node, optional) { - super.finishCallExpression(node, optional); + finishCallExpression(unfinished, optional) { + const node = super.finishCallExpression(unfinished, optional); if (node.callee.type === "Import") { node.type = "ImportExpression"; @@ -802,8 +762,8 @@ var estree = (superClass => class extends superClass { super.toReferencedArguments(node); } - parseExport(node) { - super.parseExport(node); + parseExport(unfinished) { + const node = super.parseExport(unfinished); switch (node.type) { case "ExportAllDeclaration": @@ -867,6 +827,11 @@ var estree = (superClass => class extends superClass { return toESTreeLocation(super.finishNodeAt(node, type, endLoc)); } + resetStartLocation(node, start, startLoc) { + super.resetStartLocation(node, start, startLoc); + toESTreeLocation(node); + } + resetEndLocation(node, endLoc = this.state.lastTokEndLoc) { super.resetEndLocation(node, endLoc); toESTreeLocation(node); @@ -1005,9 +970,7 @@ const tt = { beforeExpr, startsExpr }), - braceR: createToken("}", { - beforeExpr - }), + braceR: createToken("}"), braceBarR: createToken("|}"), parenL: createToken("(", { beforeExpr, @@ -1445,44 +1408,13 @@ function getExportedToken(token) { }; } -class Position { - constructor(line, col, index) { - this.line = void 0; - this.column = void 0; - this.index = void 0; - this.line = line; - this.column = col; - this.index = index; - } - -} -class SourceLocation { - constructor(start, end) { - this.start = void 0; - this.end = void 0; - this.filename = void 0; - this.identifierName = void 0; - this.start = start; - this.end = end; - } - -} -function createPositionWithColumnOffset(position, columnOffset) { - const { - line, - column, - index - } = position; - return new Position(line, column + columnOffset, index + columnOffset); -} - let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; -let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; +let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; -const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1070, 4050, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 46, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 482, 44, 11, 6, 17, 0, 322, 29, 19, 43, 1269, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4152, 8, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938]; -const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 357, 0, 62, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; +const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191]; +const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; function isInAstralSet(code, set) { let pos = 0x10000; @@ -1572,12 +1504,13 @@ const BIND_KIND_VALUE = 0b000000000001, BIND_SCOPE_VAR = 0b000000000100, BIND_SCOPE_LEXICAL = 0b000000001000, BIND_SCOPE_FUNCTION = 0b000000010000, - BIND_FLAGS_NONE = 0b000001000000, - BIND_FLAGS_CLASS = 0b000010000000, - BIND_FLAGS_TS_ENUM = 0b000100000000, - BIND_FLAGS_TS_CONST_ENUM = 0b001000000000, - BIND_FLAGS_TS_EXPORT_ONLY = 0b010000000000, - BIND_FLAGS_FLOW_DECLARE_FN = 0b100000000000; + BIND_FLAGS_NONE = 0b0000001000000, + BIND_FLAGS_CLASS = 0b0000010000000, + BIND_FLAGS_TS_ENUM = 0b0000100000000, + BIND_FLAGS_TS_CONST_ENUM = 0b0001000000000, + BIND_FLAGS_TS_EXPORT_ONLY = 0b0010000000000, + BIND_FLAGS_FLOW_DECLARE_FN = 0b0100000000000, + BIND_FLAGS_TS_IMPORT = 0b1000000000000; const BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS, BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0, BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0, @@ -1590,6 +1523,7 @@ const BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_ BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE, BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM, BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY, + BIND_TS_TYPE_IMPORT = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_TS_IMPORT, BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN; const CLASS_ELEMENT_FLAG_STATIC = 0b100, CLASS_ELEMENT_KIND_GETTER = 0b010, @@ -1611,10 +1545,12 @@ class Scope { } class ScopeHandler { - constructor(raise, inModule) { + constructor(parser, inModule) { + this.parser = void 0; this.scopeStack = []; + this.inModule = void 0; this.undefinedExports = new Map(); - this.raise = raise; + this.parser = parser; this.inModule = inModule; } @@ -1672,11 +1608,12 @@ class ScopeHandler { } exit() { - this.scopeStack.pop(); + const scope = this.scopeStack.pop(); + return scope.flags; } treatFunctionsAsVarInScope(scope) { - return !!(scope.flags & SCOPE_FUNCTION || !this.inModule && scope.flags & SCOPE_PROGRAM); + return !!(scope.flags & (SCOPE_FUNCTION | SCOPE_STATIC_BLOCK) || !this.parser.inModule && scope.flags & SCOPE_PROGRAM); } declareName(name, bindingType, loc) { @@ -1704,22 +1641,23 @@ class ScopeHandler { } } - if (this.inModule && scope.flags & SCOPE_PROGRAM) { + if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) { this.undefinedExports.delete(name); } } maybeExportDefined(scope, name) { - if (this.inModule && scope.flags & SCOPE_PROGRAM) { + if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) { this.undefinedExports.delete(name); } } checkRedeclarationInScope(scope, name, bindingType, loc) { if (this.isRedeclaredInScope(scope, name, bindingType)) { - this.raise(ErrorMessages.VarRedeclaration, { - at: loc - }, name); + this.parser.raise(Errors.VarRedeclaration, { + at: loc, + identifierName: name + }); } } @@ -1734,89 +1672,321 @@ class ScopeHandler { return scope.lexical.has(name) || !this.treatFunctionsAsVarInScope(scope) && scope.var.has(name); } - return scope.lexical.has(name) && !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name); - } - - checkLocalExport(id) { + return scope.lexical.has(name) && !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name); + } + + checkLocalExport(id) { + const { + name + } = id; + const topLevelScope = this.scopeStack[0]; + + if (!topLevelScope.lexical.has(name) && !topLevelScope.var.has(name) && !topLevelScope.functions.has(name)) { + this.undefinedExports.set(name, id.loc.start); + } + } + + currentScope() { + return this.scopeStack[this.scopeStack.length - 1]; + } + + currentVarScopeFlags() { + for (let i = this.scopeStack.length - 1;; i--) { + const { + flags + } = this.scopeStack[i]; + + if (flags & SCOPE_VAR) { + return flags; + } + } + } + + currentThisScopeFlags() { + for (let i = this.scopeStack.length - 1;; i--) { + const { + flags + } = this.scopeStack[i]; + + if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) { + return flags; + } + } + } + +} + +class FlowScope extends Scope { + constructor(...args) { + super(...args); + this.declareFunctions = new Set(); + } + +} + +class FlowScopeHandler extends ScopeHandler { + createScope(flags) { + return new FlowScope(flags); + } + + declareName(name, bindingType, loc) { + const scope = this.currentScope(); + + if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) { + this.checkRedeclarationInScope(scope, name, bindingType, loc); + this.maybeExportDefined(scope, name); + scope.declareFunctions.add(name); + return; + } + + super.declareName(name, bindingType, loc); + } + + isRedeclaredInScope(scope, name, bindingType) { + if (super.isRedeclaredInScope(scope, name, bindingType)) return true; + + if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) { + return !scope.declareFunctions.has(name) && (scope.lexical.has(name) || scope.functions.has(name)); + } + + return false; + } + + checkLocalExport(id) { + if (!this.scopeStack[0].declareFunctions.has(id.name)) { + super.checkLocalExport(id); + } + } + +} + +class BaseParser { + constructor() { + this.sawUnambiguousESM = false; + this.ambiguousScriptDifferentAst = false; + } + + hasPlugin(pluginConfig) { + if (typeof pluginConfig === "string") { + return this.plugins.has(pluginConfig); + } else { + const [pluginName, pluginOptions] = pluginConfig; + + if (!this.hasPlugin(pluginName)) { + return false; + } + + const actualOptions = this.plugins.get(pluginName); + + for (const key of Object.keys(pluginOptions)) { + if ((actualOptions == null ? void 0 : actualOptions[key]) !== pluginOptions[key]) { + return false; + } + } + + return true; + } + } + + getPluginOption(plugin, name) { + var _this$plugins$get; + + return (_this$plugins$get = this.plugins.get(plugin)) == null ? void 0 : _this$plugins$get[name]; + } + +} + +function setTrailingComments(node, comments) { + if (node.trailingComments === undefined) { + node.trailingComments = comments; + } else { + node.trailingComments.unshift(...comments); + } +} + +function setLeadingComments(node, comments) { + if (node.leadingComments === undefined) { + node.leadingComments = comments; + } else { + node.leadingComments.unshift(...comments); + } +} + +function setInnerComments(node, comments) { + if (node.innerComments === undefined) { + node.innerComments = comments; + } else { + node.innerComments.unshift(...comments); + } +} + +function adjustInnerComments(node, elements, commentWS) { + let lastElement = null; + let i = elements.length; + + while (lastElement === null && i > 0) { + lastElement = elements[--i]; + } + + if (lastElement === null || lastElement.start > commentWS.start) { + setInnerComments(node, commentWS.comments); + } else { + setTrailingComments(lastElement, commentWS.comments); + } +} + +class CommentsParser extends BaseParser { + addComment(comment) { + if (this.filename) comment.loc.filename = this.filename; + this.state.comments.push(comment); + } + + processComment(node) { + const { + commentStack + } = this.state; + const commentStackLength = commentStack.length; + if (commentStackLength === 0) return; + let i = commentStackLength - 1; + const lastCommentWS = commentStack[i]; + + if (lastCommentWS.start === node.end) { + lastCommentWS.leadingNode = node; + i--; + } + const { - name - } = id; - const topLevelScope = this.scopeStack[0]; - - if (!topLevelScope.lexical.has(name) && !topLevelScope.var.has(name) && !topLevelScope.functions.has(name)) { - this.undefinedExports.set(name, id.loc.start); - } - } + start: nodeStart + } = node; - currentScope() { - return this.scopeStack[this.scopeStack.length - 1]; - } + for (; i >= 0; i--) { + const commentWS = commentStack[i]; + const commentEnd = commentWS.end; - currentVarScopeFlags() { - for (let i = this.scopeStack.length - 1;; i--) { - const { - flags - } = this.scopeStack[i]; + if (commentEnd > nodeStart) { + commentWS.containingNode = node; + this.finalizeComment(commentWS); + commentStack.splice(i, 1); + } else { + if (commentEnd === nodeStart) { + commentWS.trailingNode = node; + } - if (flags & SCOPE_VAR) { - return flags; + break; } } } - currentThisScopeFlags() { - for (let i = this.scopeStack.length - 1;; i--) { - const { - flags - } = this.scopeStack[i]; + finalizeComment(commentWS) { + const { + comments + } = commentWS; - if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) { - return flags; + if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) { + if (commentWS.leadingNode !== null) { + setTrailingComments(commentWS.leadingNode, comments); } - } - } -} + if (commentWS.trailingNode !== null) { + setLeadingComments(commentWS.trailingNode, comments); + } + } else { + const { + containingNode: node, + start: commentStart + } = commentWS; -class FlowScope extends Scope { - constructor(...args) { - super(...args); - this.declareFunctions = new Set(); - } + if (this.input.charCodeAt(commentStart - 1) === 44) { + switch (node.type) { + case "ObjectExpression": + case "ObjectPattern": + case "RecordExpression": + adjustInnerComments(node, node.properties, commentWS); + break; -} + case "CallExpression": + case "OptionalCallExpression": + adjustInnerComments(node, node.arguments, commentWS); + break; -class FlowScopeHandler extends ScopeHandler { - createScope(flags) { - return new FlowScope(flags); + case "FunctionDeclaration": + case "FunctionExpression": + case "ArrowFunctionExpression": + case "ObjectMethod": + case "ClassMethod": + case "ClassPrivateMethod": + adjustInnerComments(node, node.params, commentWS); + break; + + case "ArrayExpression": + case "ArrayPattern": + case "TupleExpression": + adjustInnerComments(node, node.elements, commentWS); + break; + + case "ExportNamedDeclaration": + case "ImportDeclaration": + adjustInnerComments(node, node.specifiers, commentWS); + break; + + default: + { + setInnerComments(node, comments); + } + } + } else { + setInnerComments(node, comments); + } + } } - declareName(name, bindingType, loc) { - const scope = this.currentScope(); + finalizeRemainingComments() { + const { + commentStack + } = this.state; - if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) { - this.checkRedeclarationInScope(scope, name, bindingType, loc); - this.maybeExportDefined(scope, name); - scope.declareFunctions.add(name); - return; + for (let i = commentStack.length - 1; i >= 0; i--) { + this.finalizeComment(commentStack[i]); } - super.declareName(...arguments); + this.state.commentStack = []; } - isRedeclaredInScope(scope, name, bindingType) { - if (super.isRedeclaredInScope(...arguments)) return true; + resetPreviousNodeTrailingComments(node) { + const { + commentStack + } = this.state; + const { + length + } = commentStack; + if (length === 0) return; + const commentWS = commentStack[length - 1]; - if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) { - return !scope.declareFunctions.has(name) && (scope.lexical.has(name) || scope.functions.has(name)); + if (commentWS.leadingNode === node) { + commentWS.leadingNode = null; } - - return false; } - checkLocalExport(id) { - if (!this.scopeStack[0].declareFunctions.has(id.name)) { - super.checkLocalExport(id); + takeSurroundingComments(node, start, end) { + const { + commentStack + } = this.state; + const commentStackLength = commentStack.length; + if (commentStackLength === 0) return; + let i = commentStackLength - 1; + + for (; i >= 0; i--) { + const commentWS = commentStack[i]; + const commentEnd = commentWS.end; + const commentStart = commentWS.start; + + if (commentStart === end) { + commentWS.leadingNode = node; + } else if (commentEnd === start) { + commentWS.trailingNode = node; + } else if (commentEnd < start) { + break; + } } } @@ -1886,6 +2056,7 @@ class State { this.hasFlowComment = false; this.isAmbientContext = false; this.inAbstractClass = false; + this.inDisallowConditionalTypesContext = false; this.topicContext = { maxNumOfResolvableTopics: 0, maxTopicIndex: null @@ -1923,43 +2094,356 @@ class State { this.startLoc = this.endLoc = new Position(startLine, startColumn, 0); } - curPosition() { - return new Position(this.curLine, this.pos - this.lineStart, this.pos); + curPosition() { + return new Position(this.curLine, this.pos - this.lineStart, this.pos); + } + + clone(skipArrays) { + const state = new State(); + const keys = Object.keys(this); + + for (let i = 0, length = keys.length; i < length; i++) { + const key = keys[i]; + let val = this[key]; + + if (!skipArrays && Array.isArray(val)) { + val = val.slice(); + } + + state[key] = val; + } + + return state; + } + +} + +var _isDigit = function isDigit(code) { + return code >= 48 && code <= 57; +}; + +const forbiddenNumericSeparatorSiblings = { + decBinOct: new Set([46, 66, 69, 79, 95, 98, 101, 111]), + hex: new Set([46, 88, 95, 120]) +}; +const isAllowedNumericSeparatorSibling = { + bin: ch => ch === 48 || ch === 49, + oct: ch => ch >= 48 && ch <= 55, + dec: ch => ch >= 48 && ch <= 57, + hex: ch => ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102 +}; +function readStringContents(type, input, pos, lineStart, curLine, errors) { + const initialPos = pos; + const initialLineStart = lineStart; + const initialCurLine = curLine; + let out = ""; + let containsInvalid = false; + let chunkStart = pos; + const { + length + } = input; + + for (;;) { + if (pos >= length) { + errors.unterminated(initialPos, initialLineStart, initialCurLine); + out += input.slice(chunkStart, pos); + break; + } + + const ch = input.charCodeAt(pos); + + if (isStringEnd(type, ch, input, pos)) { + out += input.slice(chunkStart, pos); + break; + } + + if (ch === 92) { + out += input.slice(chunkStart, pos); + let escaped; + ({ + ch: escaped, + pos, + lineStart, + curLine + } = readEscapedChar(input, pos, lineStart, curLine, type === "template", errors)); + + if (escaped === null) { + containsInvalid = true; + } else { + out += escaped; + } + + chunkStart = pos; + } else if (ch === 8232 || ch === 8233) { + ++pos; + ++curLine; + lineStart = pos; + } else if (ch === 10 || ch === 13) { + if (type === "template") { + out += input.slice(chunkStart, pos) + "\n"; + ++pos; + + if (ch === 13 && input.charCodeAt(pos) === 10) { + ++pos; + } + + ++curLine; + chunkStart = lineStart = pos; + } else { + errors.unterminated(initialPos, initialLineStart, initialCurLine); + } + } else { + ++pos; + } + } + + return { + pos, + str: out, + containsInvalid, + lineStart, + curLine + }; +} + +function isStringEnd(type, ch, input, pos) { + if (type === "template") { + return ch === 96 || ch === 36 && input.charCodeAt(pos + 1) === 123; + } + + return ch === (type === "double" ? 34 : 39); +} + +function readEscapedChar(input, pos, lineStart, curLine, inTemplate, errors) { + const throwOnInvalid = !inTemplate; + pos++; + + const res = ch => ({ + pos, + ch, + lineStart, + curLine + }); + + const ch = input.charCodeAt(pos++); + + switch (ch) { + case 110: + return res("\n"); + + case 114: + return res("\r"); + + case 120: + { + let code; + ({ + code, + pos + } = readHexChar(input, pos, lineStart, curLine, 2, false, throwOnInvalid, errors)); + return res(code === null ? null : String.fromCharCode(code)); + } + + case 117: + { + let code; + ({ + code, + pos + } = readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors)); + return res(code === null ? null : String.fromCodePoint(code)); + } + + case 116: + return res("\t"); + + case 98: + return res("\b"); + + case 118: + return res("\u000b"); + + case 102: + return res("\f"); + + case 13: + if (input.charCodeAt(pos) === 10) { + ++pos; + } + + case 10: + lineStart = pos; + ++curLine; + + case 8232: + case 8233: + return res(""); + + case 56: + case 57: + if (inTemplate) { + return res(null); + } else { + errors.strictNumericEscape(pos - 1, lineStart, curLine); + } + + default: + if (ch >= 48 && ch <= 55) { + const startPos = pos - 1; + const match = input.slice(startPos, pos + 2).match(/^[0-7]+/); + let octalStr = match[0]; + let octal = parseInt(octalStr, 8); + + if (octal > 255) { + octalStr = octalStr.slice(0, -1); + octal = parseInt(octalStr, 8); + } + + pos += octalStr.length - 1; + const next = input.charCodeAt(pos); + + if (octalStr !== "0" || next === 56 || next === 57) { + if (inTemplate) { + return res(null); + } else { + errors.strictNumericEscape(startPos, lineStart, curLine); + } + } + + return res(String.fromCharCode(octal)); + } + + return res(String.fromCharCode(ch)); + } +} + +function readHexChar(input, pos, lineStart, curLine, len, forceLen, throwOnInvalid, errors) { + const initialPos = pos; + let n; + ({ + n, + pos + } = readInt(input, pos, lineStart, curLine, 16, len, forceLen, false, errors)); + + if (n === null) { + if (throwOnInvalid) { + errors.invalidEscapeSequence(initialPos, lineStart, curLine); + } else { + pos = initialPos - 1; + } } - clone(skipArrays) { - const state = new State(); - const keys = Object.keys(this); + return { + code: n, + pos + }; +} - for (let i = 0, length = keys.length; i < length; i++) { - const key = keys[i]; - let val = this[key]; +function readInt(input, pos, lineStart, curLine, radix, len, forceLen, allowNumSeparator, errors) { + const start = pos; + const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct; + const isAllowedSibling = radix === 16 ? isAllowedNumericSeparatorSibling.hex : radix === 10 ? isAllowedNumericSeparatorSibling.dec : radix === 8 ? isAllowedNumericSeparatorSibling.oct : isAllowedNumericSeparatorSibling.bin; + let invalid = false; + let total = 0; - if (!skipArrays && Array.isArray(val)) { - val = val.slice(); + for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) { + const code = input.charCodeAt(pos); + let val; + + if (code === 95 && allowNumSeparator !== "bail") { + const prev = input.charCodeAt(pos - 1); + const next = input.charCodeAt(pos + 1); + + if (!allowNumSeparator) { + errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine); + } else if (Number.isNaN(next) || !isAllowedSibling(next) || forbiddenSiblings.has(prev) || forbiddenSiblings.has(next)) { + errors.unexpectedNumericSeparator(pos, lineStart, curLine); } - state[key] = val; + ++pos; + continue; } - return state; + if (code >= 97) { + val = code - 97 + 10; + } else if (code >= 65) { + val = code - 65 + 10; + } else if (_isDigit(code)) { + val = code - 48; + } else { + val = Infinity; + } + + if (val >= radix) { + if (val <= 9 && errors.invalidDigit(pos, lineStart, curLine, radix)) { + val = 0; + } else if (forceLen) { + val = 0; + invalid = true; + } else { + break; + } + } + + ++pos; + total = total * radix + val; + } + + if (pos === start || len != null && pos - start !== len || invalid) { + return { + n: null, + pos + }; } + return { + n: total, + pos + }; +} +function readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) { + const ch = input.charCodeAt(pos); + let code; + + if (ch === 123) { + ++pos; + ({ + code, + pos + } = readHexChar(input, pos, lineStart, curLine, input.indexOf("}", pos) - pos, true, throwOnInvalid, errors)); + ++pos; + + if (code !== null && code > 0x10ffff) { + if (throwOnInvalid) { + errors.invalidCodePoint(pos, lineStart, curLine); + } else { + return { + code: null, + pos + }; + } + } + } else { + ({ + code, + pos + } = readHexChar(input, pos, lineStart, curLine, 4, false, throwOnInvalid, errors)); + } + + return { + code, + pos + }; +} + +const _excluded = ["at"], + _excluded2 = ["at"]; + +function buildPosition(pos, lineStart, curLine) { + return new Position(curLine, pos - lineStart, pos); } -var _isDigit = function isDigit(code) { - return code >= 48 && code <= 57; -}; const VALID_REGEX_FLAGS = new Set([103, 109, 115, 105, 121, 117, 100, 118]); -const forbiddenNumericSeparatorSiblings = { - decBinOct: [46, 66, 69, 79, 95, 98, 101, 111], - hex: [46, 88, 95, 120] -}; -const allowedNumericSeparatorSiblings = {}; -allowedNumericSeparatorSiblings.bin = [48, 49]; -allowedNumericSeparatorSiblings.oct = [...allowedNumericSeparatorSiblings.bin, 50, 51, 52, 53, 54, 55]; -allowedNumericSeparatorSiblings.dec = [...allowedNumericSeparatorSiblings.oct, 56, 57]; -allowedNumericSeparatorSiblings.hex = [...allowedNumericSeparatorSiblings.dec, 65, 66, 67, 68, 69, 70, 97, 98, 99, 100, 101, 102]; class Token { constructor(state) { this.type = state.type; @@ -1970,11 +2454,47 @@ class Token { } } -class Tokenizer extends ParserError { +class Tokenizer extends CommentsParser { constructor(options, input) { super(); this.isLookahead = void 0; this.tokens = []; + this.errorHandlers_readInt = { + invalidDigit: (pos, lineStart, curLine, radix) => { + if (!this.options.errorRecovery) return false; + this.raise(Errors.InvalidDigit, { + at: buildPosition(pos, lineStart, curLine), + radix + }); + return true; + }, + numericSeparatorInEscapeSequence: this.errorBuilder(Errors.NumericSeparatorInEscapeSequence), + unexpectedNumericSeparator: this.errorBuilder(Errors.UnexpectedNumericSeparator) + }; + this.errorHandlers_readCodePoint = Object.assign({}, this.errorHandlers_readInt, { + invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence), + invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint) + }); + this.errorHandlers_readStringContents_string = Object.assign({}, this.errorHandlers_readCodePoint, { + strictNumericEscape: (pos, lineStart, curLine) => { + this.recordStrictModeErrors(Errors.StrictNumericEscape, { + at: buildPosition(pos, lineStart, curLine) + }); + }, + unterminated: (pos, lineStart, curLine) => { + throw this.raise(Errors.UnterminatedString, { + at: buildPosition(pos - 1, lineStart, curLine) + }); + } + }); + this.errorHandlers_readStringContents_template = Object.assign({}, this.errorHandlers_readCodePoint, { + strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape), + unterminated: (pos, lineStart, curLine) => { + throw this.raise(Errors.UnterminatedTemplate, { + at: buildPosition(pos, lineStart, curLine) + }); + } + }); this.state = new State(); this.state.init(options); this.input = input; @@ -2073,11 +2593,8 @@ class Tokenizer extends ParserError { this.state.strict = strict; if (strict) { - this.state.strictErrors.forEach(({ - message, - loc - }) => this.raise(message, { - at: loc + this.state.strictErrors.forEach(([toParseError, at]) => this.raise(toParseError, { + at })); this.state.strictErrors.clear(); } @@ -2107,7 +2624,7 @@ class Tokenizer extends ParserError { const end = this.input.indexOf("*/", start + 2); if (end === -1) { - throw this.raise(ErrorMessages.UnterminatedComment, { + throw this.raise(Errors.UnterminatedComment, { at: this.state.curPosition() }); } @@ -2255,7 +2772,7 @@ class Tokenizer extends ParserError { if (comments.length > 0) { const end = this.state.pos; - const CommentWhitespace = { + const commentWhitespace = { start: spaceStart, end, comments, @@ -2263,7 +2780,7 @@ class Tokenizer extends ParserError { trailingNode: null, containingNode: null }; - this.state.commentStack.push(CommentWhitespace); + this.state.commentStack.push(commentWhitespace); } } @@ -2293,7 +2810,7 @@ class Tokenizer extends ParserError { const next = this.codePointAtPos(nextPos); if (next >= 48 && next <= 57) { - throw this.raise(ErrorMessages.UnexpectedDigitAfterHash, { + throw this.raise(Errors.UnexpectedDigitAfterHash, { at: this.state.curPosition() }); } @@ -2301,8 +2818,8 @@ class Tokenizer extends ParserError { if (next === 123 || next === 91 && this.hasPlugin("recordAndTuple")) { this.expectPlugin("recordAndTuple"); - if (this.getPluginOption("recordAndTuple", "syntaxType") !== "hash") { - throw this.raise(next === 123 ? ErrorMessages.RecordExpressionHashIncorrectStartSyntaxType : ErrorMessages.TupleExpressionHashIncorrectStartSyntaxType, { + if (this.getPluginOption("recordAndTuple", "syntaxType") === "bar") { + throw this.raise(next === 123 ? Errors.RecordExpressionHashIncorrectStartSyntaxType : Errors.TupleExpressionHashIncorrectStartSyntaxType, { at: this.state.curPosition() }); } @@ -2408,7 +2925,7 @@ class Tokenizer extends ParserError { if (this.hasPlugin("recordAndTuple") && next === 125) { if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") { - throw this.raise(ErrorMessages.RecordExpressionBarIncorrectEndSyntaxType, { + throw this.raise(Errors.RecordExpressionBarIncorrectEndSyntaxType, { at: this.state.curPosition() }); } @@ -2420,7 +2937,7 @@ class Tokenizer extends ParserError { if (this.hasPlugin("recordAndTuple") && next === 93) { if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") { - throw this.raise(ErrorMessages.TupleExpressionBarIncorrectEndSyntaxType, { + throw this.raise(Errors.TupleExpressionBarIncorrectEndSyntaxType, { at: this.state.curPosition() }); } @@ -2602,7 +3119,7 @@ class Tokenizer extends ParserError { case 91: if (this.hasPlugin("recordAndTuple") && this.input.charCodeAt(this.state.pos + 1) === 124) { if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") { - throw this.raise(ErrorMessages.TupleExpressionBarIncorrectStartSyntaxType, { + throw this.raise(Errors.TupleExpressionBarIncorrectStartSyntaxType, { at: this.state.curPosition() }); } @@ -2624,7 +3141,7 @@ class Tokenizer extends ParserError { case 123: if (this.hasPlugin("recordAndTuple") && this.input.charCodeAt(this.state.pos + 1) === 124) { if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") { - throw this.raise(ErrorMessages.RecordExpressionBarIncorrectStartSyntaxType, { + throw this.raise(Errors.RecordExpressionBarIncorrectStartSyntaxType, { at: this.state.curPosition() }); } @@ -2758,9 +3275,10 @@ class Tokenizer extends ParserError { } - throw this.raise(ErrorMessages.InvalidOrUnexpectedToken, { - at: this.state.curPosition() - }, String.fromCodePoint(code)); + throw this.raise(Errors.InvalidOrUnexpectedToken, { + at: this.state.curPosition(), + unexpected: String.fromCodePoint(code) + }); } finishOp(type, size) { @@ -2779,7 +3297,7 @@ class Tokenizer extends ParserError { for (;; ++pos) { if (pos >= this.length) { - throw this.raise(ErrorMessages.UnterminatedRegExp, { + throw this.raise(Errors.UnterminatedRegExp, { at: createPositionWithColumnOffset(startLoc, 1) }); } @@ -2787,7 +3305,7 @@ class Tokenizer extends ParserError { const ch = this.input.charCodeAt(pos); if (isNewLine(ch)) { - throw this.raise(ErrorMessages.UnterminatedRegExp, { + throw this.raise(Errors.UnterminatedRegExp, { at: createPositionWithColumnOffset(startLoc, 1) }); } @@ -2822,25 +3340,25 @@ class Tokenizer extends ParserError { this.expectPlugin("regexpUnicodeSets", nextPos()); if (mods.includes("u")) { - this.raise(ErrorMessages.IncompatibleRegExpUVFlags, { + this.raise(Errors.IncompatibleRegExpUVFlags, { at: nextPos() }); } } else if (cp === 117) { if (mods.includes("v")) { - this.raise(ErrorMessages.IncompatibleRegExpUVFlags, { + this.raise(Errors.IncompatibleRegExpUVFlags, { at: nextPos() }); } } if (mods.includes(char)) { - this.raise(ErrorMessages.DuplicateRegExpFlags, { + this.raise(Errors.DuplicateRegExpFlags, { at: nextPos() }); } } else if (isIdentifierChar(cp) || cp === 92) { - this.raise(ErrorMessages.MalformedRegExpFlags, { + this.raise(Errors.MalformedRegExpFlags, { at: nextPos() }); } else { @@ -2858,74 +3376,13 @@ class Tokenizer extends ParserError { }); } - readInt(radix, len, forceLen, allowNumSeparator = true) { - const start = this.state.pos; - const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct; - const allowedSiblings = radix === 16 ? allowedNumericSeparatorSiblings.hex : radix === 10 ? allowedNumericSeparatorSiblings.dec : radix === 8 ? allowedNumericSeparatorSiblings.oct : allowedNumericSeparatorSiblings.bin; - let invalid = false; - let total = 0; - - for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) { - const code = this.input.charCodeAt(this.state.pos); - let val; - - if (code === 95) { - const prev = this.input.charCodeAt(this.state.pos - 1); - const next = this.input.charCodeAt(this.state.pos + 1); - - if (allowedSiblings.indexOf(next) === -1) { - this.raise(ErrorMessages.UnexpectedNumericSeparator, { - at: this.state.curPosition() - }); - } else if (forbiddenSiblings.indexOf(prev) > -1 || forbiddenSiblings.indexOf(next) > -1 || Number.isNaN(next)) { - this.raise(ErrorMessages.UnexpectedNumericSeparator, { - at: this.state.curPosition() - }); - } - - if (!allowNumSeparator) { - this.raise(ErrorMessages.NumericSeparatorInEscapeSequence, { - at: this.state.curPosition() - }); - } - - ++this.state.pos; - continue; - } - - if (code >= 97) { - val = code - 97 + 10; - } else if (code >= 65) { - val = code - 65 + 10; - } else if (_isDigit(code)) { - val = code - 48; - } else { - val = Infinity; - } - - if (val >= radix) { - if (this.options.errorRecovery && val <= 9) { - val = 0; - this.raise(ErrorMessages.InvalidDigit, { - at: this.state.curPosition() - }, radix); - } else if (forceLen) { - val = 0; - invalid = true; - } else { - break; - } - } - - ++this.state.pos; - total = total * radix + val; - } - - if (this.state.pos === start || len != null && this.state.pos - start !== len || invalid) { - return null; - } - - return total; + readInt(radix, len, forceLen = false, allowNumSeparator = true) { + const { + n, + pos + } = readInt(this.input, this.state.pos, this.state.lineStart, this.state.curLine, radix, len, forceLen, allowNumSeparator, this.errorHandlers_readInt); + this.state.pos = pos; + return n; } readRadixNumber(radix) { @@ -2935,9 +3392,10 @@ class Tokenizer extends ParserError { const val = this.readInt(radix); if (val == null) { - this.raise(ErrorMessages.InvalidDigit, { - at: createPositionWithColumnOffset(startLoc, 2) - }, radix); + this.raise(Errors.InvalidDigit, { + at: createPositionWithColumnOffset(startLoc, 2), + radix + }); } const next = this.input.charCodeAt(this.state.pos); @@ -2946,13 +3404,13 @@ class Tokenizer extends ParserError { ++this.state.pos; isBigInt = true; } else if (next === 109) { - throw this.raise(ErrorMessages.InvalidDecimal, { + throw this.raise(Errors.InvalidDecimal, { at: startLoc }); } if (isIdentifierStart(this.codePointAtPos(this.state.pos))) { - throw this.raise(ErrorMessages.NumberIdentifier, { + throw this.raise(Errors.NumberIdentifier, { at: this.state.curPosition() }); } @@ -2976,7 +3434,7 @@ class Tokenizer extends ParserError { let isOctal = false; if (!startsWithDot && this.readInt(10) === null) { - this.raise(ErrorMessages.InvalidNumber, { + this.raise(Errors.InvalidNumber, { at: this.state.curPosition() }); } @@ -2985,13 +3443,15 @@ class Tokenizer extends ParserError { if (hasLeadingZero) { const integer = this.input.slice(start, this.state.pos); - this.recordStrictModeErrors(ErrorMessages.StrictOctalLiteral, startLoc); + this.recordStrictModeErrors(Errors.StrictOctalLiteral, { + at: startLoc + }); if (!this.state.strict) { const underscorePos = integer.indexOf("_"); if (underscorePos > 0) { - this.raise(ErrorMessages.ZeroDigitNumericSeparator, { + this.raise(Errors.ZeroDigitNumericSeparator, { at: createPositionWithColumnOffset(startLoc, underscorePos) }); } @@ -3017,7 +3477,7 @@ class Tokenizer extends ParserError { } if (this.readInt(10) === null) { - this.raise(ErrorMessages.InvalidOrMissingExponent, { + this.raise(Errors.InvalidOrMissingExponent, { at: startLoc }); } @@ -3029,7 +3489,7 @@ class Tokenizer extends ParserError { if (next === 110) { if (isFloat || hasLeadingZero) { - this.raise(ErrorMessages.InvalidBigIntLiteral, { + this.raise(Errors.InvalidBigIntLiteral, { at: startLoc }); } @@ -3042,7 +3502,7 @@ class Tokenizer extends ParserError { this.expectPlugin("decimal", this.state.curPosition()); if (hasExponent || hasLeadingZero) { - this.raise(ErrorMessages.InvalidDecimal, { + this.raise(Errors.InvalidDecimal, { at: startLoc }); } @@ -3052,7 +3512,7 @@ class Tokenizer extends ParserError { } if (isIdentifierStart(this.codePointAtPos(this.state.pos))) { - throw this.raise(ErrorMessages.NumberIdentifier, { + throw this.raise(Errors.NumberIdentifier, { at: this.state.curPosition() }); } @@ -3074,257 +3534,69 @@ class Tokenizer extends ParserError { } readCodePoint(throwOnInvalid) { - const ch = this.input.charCodeAt(this.state.pos); - let code; - - if (ch === 123) { - ++this.state.pos; - code = this.readHexChar(this.input.indexOf("}", this.state.pos) - this.state.pos, true, throwOnInvalid); - ++this.state.pos; - - if (code !== null && code > 0x10ffff) { - if (throwOnInvalid) { - this.raise(ErrorMessages.InvalidCodePoint, { - at: this.state.curPosition() - }); - } else { - return null; - } - } - } else { - code = this.readHexChar(4, false, throwOnInvalid); - } - - return code; - } - - readString(quote) { - let out = "", - chunkStart = ++this.state.pos; - - for (;;) { - if (this.state.pos >= this.length) { - throw this.raise(ErrorMessages.UnterminatedString, { - at: this.state.startLoc - }); - } - - const ch = this.input.charCodeAt(this.state.pos); - if (ch === quote) break; - - if (ch === 92) { - out += this.input.slice(chunkStart, this.state.pos); - out += this.readEscapedChar(false); - chunkStart = this.state.pos; - } else if (ch === 8232 || ch === 8233) { - ++this.state.pos; - ++this.state.curLine; - this.state.lineStart = this.state.pos; - } else if (isNewLine(ch)) { - throw this.raise(ErrorMessages.UnterminatedString, { - at: this.state.startLoc - }); - } else { - ++this.state.pos; - } - } - - out += this.input.slice(chunkStart, this.state.pos++); - this.finishToken(129, out); - } - - readTemplateContinuation() { - if (!this.match(8)) { - this.unexpected(null, 8); - } - - this.state.pos--; - this.readTemplateToken(); - } - - readTemplateToken() { - let out = "", - chunkStart = this.state.pos, - containsInvalid = false; - ++this.state.pos; - - for (;;) { - if (this.state.pos >= this.length) { - throw this.raise(ErrorMessages.UnterminatedTemplate, { - at: createPositionWithColumnOffset(this.state.startLoc, 1) - }); - } - - const ch = this.input.charCodeAt(this.state.pos); - - if (ch === 96) { - ++this.state.pos; - out += this.input.slice(chunkStart, this.state.pos); - this.finishToken(24, containsInvalid ? null : out); - return; - } - - if (ch === 36 && this.input.charCodeAt(this.state.pos + 1) === 123) { - this.state.pos += 2; - out += this.input.slice(chunkStart, this.state.pos); - this.finishToken(25, containsInvalid ? null : out); - return; - } - - if (ch === 92) { - out += this.input.slice(chunkStart, this.state.pos); - const escaped = this.readEscapedChar(true); - - if (escaped === null) { - containsInvalid = true; - } else { - out += escaped; - } - - chunkStart = this.state.pos; - } else if (isNewLine(ch)) { - out += this.input.slice(chunkStart, this.state.pos); - ++this.state.pos; - - switch (ch) { - case 13: - if (this.input.charCodeAt(this.state.pos) === 10) { - ++this.state.pos; - } - - case 10: - out += "\n"; - break; - - default: - out += String.fromCharCode(ch); - break; - } - - ++this.state.curLine; - this.state.lineStart = this.state.pos; - chunkStart = this.state.pos; - } else { - ++this.state.pos; - } - } - } - - recordStrictModeErrors(message, loc) { - if (this.state.strict && !this.state.strictErrors.has(loc.index)) { - this.raise(message, { - at: loc - }); - } else { - this.state.strictErrors.set(loc.index, { - loc, - message - }); - } - } - - readEscapedChar(inTemplate) { - const throwOnInvalid = !inTemplate; - const ch = this.input.charCodeAt(++this.state.pos); - ++this.state.pos; - - switch (ch) { - case 110: - return "\n"; - - case 114: - return "\r"; - - case 120: - { - const code = this.readHexChar(2, false, throwOnInvalid); - return code === null ? null : String.fromCharCode(code); - } - - case 117: - { - const code = this.readCodePoint(throwOnInvalid); - return code === null ? null : String.fromCodePoint(code); - } - - case 116: - return "\t"; - - case 98: - return "\b"; - - case 118: - return "\u000b"; - - case 102: - return "\f"; - - case 13: - if (this.input.charCodeAt(this.state.pos) === 10) { - ++this.state.pos; - } - - case 10: - this.state.lineStart = this.state.pos; - ++this.state.curLine; - - case 8232: - case 8233: - return ""; - - case 56: - case 57: - if (inTemplate) { - return null; - } else { - this.recordStrictModeErrors(ErrorMessages.StrictNumericEscape, createPositionWithColumnOffset(this.state.curPosition(), -1)); - } - - default: - if (ch >= 48 && ch <= 55) { - const codePos = createPositionWithColumnOffset(this.state.curPosition(), -1); - const match = this.input.substr(this.state.pos - 1, 3).match(/^[0-7]+/); - let octalStr = match[0]; - let octal = parseInt(octalStr, 8); - - if (octal > 255) { - octalStr = octalStr.slice(0, -1); - octal = parseInt(octalStr, 8); - } + const { + code, + pos + } = readCodePoint(this.input, this.state.pos, this.state.lineStart, this.state.curLine, throwOnInvalid, this.errorHandlers_readCodePoint); + this.state.pos = pos; + return code; + } - this.state.pos += octalStr.length - 1; - const next = this.input.charCodeAt(this.state.pos); + readString(quote) { + const { + str, + pos, + curLine, + lineStart + } = readStringContents(quote === 34 ? "double" : "single", this.input, this.state.pos + 1, this.state.lineStart, this.state.curLine, this.errorHandlers_readStringContents_string); + this.state.pos = pos + 1; + this.state.lineStart = lineStart; + this.state.curLine = curLine; + this.finishToken(129, str); + } - if (octalStr !== "0" || next === 56 || next === 57) { - if (inTemplate) { - return null; - } else { - this.recordStrictModeErrors(ErrorMessages.StrictNumericEscape, codePos); - } - } + readTemplateContinuation() { + if (!this.match(8)) { + this.unexpected(null, 8); + } - return String.fromCharCode(octal); - } + this.state.pos--; + this.readTemplateToken(); + } - return String.fromCharCode(ch); + readTemplateToken() { + const opening = this.input[this.state.pos]; + const { + str, + containsInvalid, + pos, + curLine, + lineStart + } = readStringContents("template", this.input, this.state.pos + 1, this.state.lineStart, this.state.curLine, this.errorHandlers_readStringContents_template); + this.state.pos = pos + 1; + this.state.lineStart = lineStart; + this.state.curLine = curLine; + + if (this.input.codePointAt(pos) === 96) { + this.finishToken(24, containsInvalid ? null : opening + str + "`"); + } else { + this.state.pos++; + this.finishToken(25, containsInvalid ? null : opening + str + "${"); } } - readHexChar(len, forceLen, throwOnInvalid) { - const codeLoc = this.state.curPosition(); - const n = this.readInt(16, len, forceLen, false); + recordStrictModeErrors(toParseError, { + at + }) { + const index = at.index; - if (n === null) { - if (throwOnInvalid) { - this.raise(ErrorMessages.InvalidEscapeSequence, { - at: codeLoc - }); - } else { - this.state.pos = codeLoc.index - 1; - } + if (this.state.strict && !this.state.strictErrors.has(index)) { + this.raise(toParseError, { + at + }); + } else { + this.state.strictErrors.set(index, [toParseError, at]); } - - return n; } readWord1(firstCode) { @@ -3349,7 +3621,7 @@ class Tokenizer extends ParserError { const identifierCheck = this.state.pos === start ? isIdentifierStart : isIdentifierChar; if (this.input.charCodeAt(++this.state.pos) !== 117) { - this.raise(ErrorMessages.MissingUnicodeEscape, { + this.raise(Errors.MissingUnicodeEscape, { at: this.state.curPosition() }); chunkStart = this.state.pos - 1; @@ -3361,7 +3633,7 @@ class Tokenizer extends ParserError { if (esc !== null) { if (!identifierCheck(esc)) { - this.raise(ErrorMessages.EscapedCharNotAnIdentifier, { + this.raise(Errors.EscapedCharNotAnIdentifier, { at: escStart }); } @@ -3395,14 +3667,92 @@ class Tokenizer extends ParserError { } = this.state; if (tokenIsKeyword(type) && this.state.containsEsc) { - this.raise(ErrorMessages.InvalidEscapedReservedWord, { - at: this.state.startLoc - }, tokenLabelName(type)); + this.raise(Errors.InvalidEscapedReservedWord, { + at: this.state.startLoc, + reservedWord: tokenLabelName(type) + }); + } + } + + raise(toParseError, raiseProperties) { + const { + at + } = raiseProperties, + details = _objectWithoutPropertiesLoose(raiseProperties, _excluded); + + const loc = at instanceof Position ? at : at.loc.start; + const error = toParseError({ + loc, + details + }); + if (!this.options.errorRecovery) throw error; + if (!this.isLookahead) this.state.errors.push(error); + return error; + } + + raiseOverwrite(toParseError, raiseProperties) { + const { + at + } = raiseProperties, + details = _objectWithoutPropertiesLoose(raiseProperties, _excluded2); + + const loc = at instanceof Position ? at : at.loc.start; + const pos = loc.index; + const errors = this.state.errors; + + for (let i = errors.length - 1; i >= 0; i--) { + const error = errors[i]; + + if (error.loc.index === pos) { + return errors[i] = toParseError({ + loc, + details + }); + } + + if (error.loc.index < pos) break; } + + return this.raise(toParseError, raiseProperties); } updateContext(prevType) {} + unexpected(loc, type) { + throw this.raise(Errors.UnexpectedToken, { + expected: type ? tokenLabelName(type) : null, + at: loc != null ? loc : this.state.startLoc + }); + } + + expectPlugin(pluginName, loc) { + if (this.hasPlugin(pluginName)) { + return true; + } + + throw this.raise(Errors.MissingPlugin, { + at: loc != null ? loc : this.state.startLoc, + missingPlugin: [pluginName] + }); + } + + expectOnePlugin(pluginNames) { + if (!pluginNames.some(name => this.hasPlugin(name))) { + throw this.raise(Errors.MissingOneOfPlugins, { + at: this.state.startLoc, + missingPlugin: pluginNames + }); + } + } + + errorBuilder(error) { + return (pos, lineStart, curLine) => { + this.raise(error, { + at: buildPosition(pos, lineStart, curLine) + }); + }; + } + } class ClassScope { @@ -3414,10 +3764,11 @@ class ClassScope { } class ClassScopeHandler { - constructor(raise) { + constructor(parser) { + this.parser = void 0; this.stack = []; this.undefinedPrivateNames = new Map(); - this.raise = raise; + this.parser = parser; } current() { @@ -3438,9 +3789,10 @@ class ClassScopeHandler { current.undefinedPrivateNames.set(name, loc); } } else { - this.raise(ErrorMessages.InvalidPrivateFieldResolution, { - at: loc - }, name); + this.parser.raise(Errors.InvalidPrivateFieldResolution, { + at: loc, + identifierName: name + }); } } } @@ -3469,9 +3821,10 @@ class ClassScopeHandler { } if (redefined) { - this.raise(ErrorMessages.PrivateNameRedeclaration, { - at: loc - }, name); + this.parser.raise(Errors.PrivateNameRedeclaration, { + at: loc, + identifierName: name + }); } privateNames.add(name); @@ -3488,9 +3841,10 @@ class ClassScopeHandler { if (classScope) { classScope.undefinedPrivateNames.set(name, loc); } else { - this.raise(ErrorMessages.InvalidPrivateFieldResolution, { - at: loc - }, name); + this.parser.raise(Errors.InvalidPrivateFieldResolution, { + at: loc, + identifierName: name + }); } } @@ -3520,30 +3874,31 @@ class ExpressionScope { class ArrowHeadParsingScope extends ExpressionScope { constructor(type) { super(type); - this.errors = new Map(); + this.declarationErrors = new Map(); } - recordDeclarationError(message, loc) { - this.errors.set(loc.index, { - message, - loc - }); + recordDeclarationError(ParsingErrorClass, { + at + }) { + const index = at.index; + this.declarationErrors.set(index, [ParsingErrorClass, at]); } - clearDeclarationError(loc) { - this.errors.delete(loc.index); + clearDeclarationError(index) { + this.declarationErrors.delete(index); } iterateErrors(iterator) { - this.errors.forEach(iterator); + this.declarationErrors.forEach(iterator); } } class ExpressionScopeHandler { - constructor(raise) { + constructor(parser) { + this.parser = void 0; this.stack = [new ExpressionScope()]; - this.raise = raise; + this.parser = parser; } enter(scope) { @@ -3554,7 +3909,12 @@ class ExpressionScopeHandler { this.stack.pop(); } - recordParameterInitializerError(loc, template) { + recordParameterInitializerError(toParseError, { + at: node + }) { + const origin = { + at: node.loc.start + }; const { stack } = this; @@ -3563,7 +3923,7 @@ class ExpressionScopeHandler { while (!scope.isCertainlyParameterDeclaration()) { if (scope.canBeArrowParameterDeclaration()) { - scope.recordDeclarationError(template, loc); + scope.recordDeclarationError(toParseError, origin); } else { return; } @@ -3571,29 +3931,32 @@ class ExpressionScopeHandler { scope = stack[--i]; } - this.raise(template, { - at: loc - }); + this.parser.raise(toParseError, origin); } - recordParenthesizedIdentifierError(template, loc) { + recordArrowParemeterBindingError(error, { + at: node + }) { const { stack } = this; const scope = stack[stack.length - 1]; + const origin = { + at: node.loc.start + }; if (scope.isCertainlyParameterDeclaration()) { - this.raise(template, { - at: loc - }); + this.parser.raise(error, origin); } else if (scope.canBeArrowParameterDeclaration()) { - scope.recordDeclarationError(template, loc); + scope.recordDeclarationError(error, origin); } else { return; } } - recordAsyncArrowParametersError(template, loc) { + recordAsyncArrowParametersError({ + at + }) { const { stack } = this; @@ -3602,7 +3965,9 @@ class ExpressionScopeHandler { while (scope.canBeArrowParameterDeclaration()) { if (scope.type === kMaybeAsyncArrowParameterDeclaration) { - scope.recordDeclarationError(template, loc); + scope.recordDeclarationError(Errors.AwaitBindingIdentifier, { + at + }); } scope = stack[--i]; @@ -3615,18 +3980,15 @@ class ExpressionScopeHandler { } = this; const currentScope = stack[stack.length - 1]; if (!currentScope.canBeArrowParameterDeclaration()) return; - currentScope.iterateErrors(({ - message, - loc - }) => { - this.raise(message, { + currentScope.iterateErrors(([toParseError, loc]) => { + this.parser.raise(toParseError, { at: loc }); let i = stack.length - 2; let scope = stack[i]; while (scope.canBeArrowParameterDeclaration()) { - scope.clearDeclarationError(loc); + scope.clearDeclarationError(loc.index); scope = stack[--i]; } }); @@ -3733,10 +4095,10 @@ class UtilParser extends Tokenizer { return false; } - expectContextual(token, template) { + expectContextual(token, toParseError) { if (!this.eatContextual(token)) { - if (template != null) { - throw this.raise(template, { + if (toParseError != null) { + throw this.raise(toParseError, { at: this.state.startLoc }); } @@ -3764,7 +4126,7 @@ class UtilParser extends Tokenizer { semicolon(allowAsi = true) { if (allowAsi ? this.isLineTerminator() : this.eat(13)) return; - this.raise(ErrorMessages.MissingSemicolon, { + this.raise(Errors.MissingSemicolon, { at: this.state.lastTokEndLoc }); } @@ -3773,56 +4135,6 @@ class UtilParser extends Tokenizer { this.eat(type) || this.unexpected(loc, type); } - assertNoSpace(message = "Unexpected space.") { - if (this.state.start > this.state.lastTokEndLoc.index) { - this.raise({ - code: ErrorCodes.SyntaxError, - reasonCode: "UnexpectedSpace", - template: message - }, { - at: this.state.lastTokEndLoc - }); - } - } - - unexpected(loc, type) { - throw this.raise({ - code: ErrorCodes.SyntaxError, - reasonCode: "UnexpectedToken", - template: type != null ? `Unexpected token, expected "${tokenLabelName(type)}"` : "Unexpected token" - }, { - at: loc != null ? loc : this.state.startLoc - }); - } - - getPluginNamesFromConfigs(pluginConfigs) { - return pluginConfigs.map(c => { - if (typeof c === "string") { - return c; - } else { - return c[0]; - } - }); - } - - expectPlugin(pluginConfig, loc) { - if (!this.hasPlugin(pluginConfig)) { - throw this.raiseWithData(loc != null ? loc : this.state.startLoc, { - missingPlugin: this.getPluginNamesFromConfigs([pluginConfig]) - }, `This experimental syntax requires enabling the parser plugin: ${JSON.stringify(pluginConfig)}.`); - } - - return true; - } - - expectOnePlugin(pluginConfigs) { - if (!pluginConfigs.some(c => this.hasPlugin(c))) { - throw this.raiseWithData(this.state.startLoc, { - missingPlugin: this.getPluginNamesFromConfigs(pluginConfigs) - }, `This experimental syntax requires enabling one of the following parser plugin(s): ${pluginConfigs.map(c => JSON.stringify(c)).join(", ")}.`); - } - } - tryParse(fn, oldState = this.state.clone()) { const abortSignal = { node: null @@ -3897,19 +4209,19 @@ class UtilParser extends Tokenizer { } if (shorthandAssignLoc != null) { - this.raise(ErrorMessages.InvalidCoverInitializedName, { + this.raise(Errors.InvalidCoverInitializedName, { at: shorthandAssignLoc }); } if (doubleProtoLoc != null) { - this.raise(ErrorMessages.DuplicateProto, { + this.raise(Errors.DuplicateProto, { at: doubleProtoLoc }); } if (privateKeyLoc != null) { - this.raise(ErrorMessages.UnexpectedPrivateField, { + this.raise(Errors.UnexpectedPrivateField, { at: privateKeyLoc }); } @@ -3956,13 +4268,13 @@ class UtilParser extends Tokenizer { this.inModule = inModule; const oldScope = this.scope; const ScopeHandler = this.getScopeHandler(); - this.scope = new ScopeHandler(this.raise.bind(this), this.inModule); + this.scope = new ScopeHandler(this, inModule); const oldProdParam = this.prodParam; this.prodParam = new ProductionParameterHandler(); const oldClassScope = this.classScope; - this.classScope = new ClassScopeHandler(this.raise.bind(this)); + this.classScope = new ClassScopeHandler(this); const oldExpressionScope = this.expressionScope; - this.expressionScope = new ExpressionScopeHandler(this.raise.bind(this)); + this.expressionScope = new ExpressionScopeHandler(this); return () => { this.state.labels = oldLabels; this.exportedIdentifiers = oldExportedIdentifiers; @@ -4021,7 +4333,7 @@ class Node { const NodePrototype = Node.prototype; { NodePrototype.__clone = function () { - const newNode = new Node(); + const newNode = new Node(undefined, this.start, this.loc.start); const keys = Object.keys(this); for (let i = 0, length = keys.length; i < length; i++) { @@ -4141,24 +4453,58 @@ class NodeUtils extends UtilParser { } const reservedTypes = new Set(["_", "any", "bool", "boolean", "empty", "extends", "false", "interface", "mixed", "null", "number", "static", "string", "true", "typeof", "void"]); -const FlowErrors = makeErrorTemplates({ +const FlowErrors = ParseErrorEnum`flow`({ AmbiguousConditionalArrow: "Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.", AmbiguousDeclareModuleKind: "Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.", - AssignReservedType: "Cannot overwrite reserved type %0.", + AssignReservedType: ({ + reservedType + }) => `Cannot overwrite reserved type ${reservedType}.`, DeclareClassElement: "The `declare` modifier can only appear on class fields.", DeclareClassFieldInitializer: "Initializers are not allowed in fields with the `declare` modifier.", DuplicateDeclareModuleExports: "Duplicate `declare module.exports` statement.", - EnumBooleanMemberNotInitialized: "Boolean enum members need to be initialized. Use either `%0 = true,` or `%0 = false,` in enum `%1`.", - EnumDuplicateMemberName: "Enum member names need to be unique, but the name `%0` has already been used before in enum `%1`.", - EnumInconsistentMemberValues: "Enum `%0` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.", - EnumInvalidExplicitType: "Enum type `%1` is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.", - EnumInvalidExplicitTypeUnknownSupplied: "Supplied enum type is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.", - EnumInvalidMemberInitializerPrimaryType: "Enum `%0` has type `%2`, so the initializer of `%1` needs to be a %2 literal.", - EnumInvalidMemberInitializerSymbolType: "Symbol enum members cannot be initialized. Use `%1,` in enum `%0`.", - EnumInvalidMemberInitializerUnknownType: "The enum member initializer for `%1` needs to be a literal (either a boolean, number, or string) in enum `%0`.", - EnumInvalidMemberName: "Enum member names cannot start with lowercase 'a' through 'z'. Instead of using `%0`, consider using `%1`, in enum `%2`.", - EnumNumberMemberNotInitialized: "Number enum members need to be initialized, e.g. `%1 = 1` in enum `%0`.", - EnumStringMemberInconsistentlyInitailized: "String enum members need to consistently either all use initializers, or use no initializers, in enum `%0`.", + EnumBooleanMemberNotInitialized: ({ + memberName, + enumName + }) => `Boolean enum members need to be initialized. Use either \`${memberName} = true,\` or \`${memberName} = false,\` in enum \`${enumName}\`.`, + EnumDuplicateMemberName: ({ + memberName, + enumName + }) => `Enum member names need to be unique, but the name \`${memberName}\` has already been used before in enum \`${enumName}\`.`, + EnumInconsistentMemberValues: ({ + enumName + }) => `Enum \`${enumName}\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`, + EnumInvalidExplicitType: ({ + invalidEnumType, + enumName + }) => `Enum type \`${invalidEnumType}\` is not valid. Use one of \`boolean\`, \`number\`, \`string\`, or \`symbol\` in enum \`${enumName}\`.`, + EnumInvalidExplicitTypeUnknownSupplied: ({ + enumName + }) => `Supplied enum type is not valid. Use one of \`boolean\`, \`number\`, \`string\`, or \`symbol\` in enum \`${enumName}\`.`, + EnumInvalidMemberInitializerPrimaryType: ({ + enumName, + memberName, + explicitType + }) => `Enum \`${enumName}\` has type \`${explicitType}\`, so the initializer of \`${memberName}\` needs to be a ${explicitType} literal.`, + EnumInvalidMemberInitializerSymbolType: ({ + enumName, + memberName + }) => `Symbol enum members cannot be initialized. Use \`${memberName},\` in enum \`${enumName}\`.`, + EnumInvalidMemberInitializerUnknownType: ({ + enumName, + memberName + }) => `The enum member initializer for \`${memberName}\` needs to be a literal (either a boolean, number, or string) in enum \`${enumName}\`.`, + EnumInvalidMemberName: ({ + enumName, + memberName, + suggestion + }) => `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \`${memberName}\`, consider using \`${suggestion}\`, in enum \`${enumName}\`.`, + EnumNumberMemberNotInitialized: ({ + enumName, + memberName + }) => `Number enum members need to be initialized, e.g. \`${memberName} = 1\` in enum \`${enumName}\`.`, + EnumStringMemberInconsistentlyInitailized: ({ + enumName + }) => `String enum members need to consistently either all use initializers, or use no initializers, in enum \`${enumName}\`.`, GetterMayNotHaveThisParam: "A getter cannot have a `this` parameter.", ImportTypeShorthandOnlyInPureImport: "The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.", InexactInsideExact: "Explicit inexact syntax cannot appear inside an explicit exact object type.", @@ -4168,7 +4514,11 @@ const FlowErrors = makeErrorTemplates({ MissingTypeParamDefault: "Type parameter declaration needs a default, since a preceding type parameter declaration has a default.", NestedDeclareModule: "`declare module` cannot be used inside another `declare module`.", NestedFlowComment: "Cannot have a flow comment inside another flow comment.", - PatternIsOptional: "A binding pattern parameter cannot be optional in an implementation signature.", + PatternIsOptional: Object.assign({ + message: "A binding pattern parameter cannot be optional in an implementation signature." + }, { + reasonCode: "OptionalBindingPattern" + }), SetterMayNotHaveThisParam: "A setter cannot have a `this` parameter.", SpreadVariance: "Spread properties cannot have variance.", ThisParamAnnotationRequired: "A type annotation is required for the `this` parameter.", @@ -4179,17 +4529,22 @@ const FlowErrors = makeErrorTemplates({ TypeBeforeInitializer: "Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.", TypeCastInPattern: "The type cast expression is expected to be wrapped with parenthesis.", UnexpectedExplicitInexactInObject: "Explicit inexact syntax must appear at the end of an inexact object.", - UnexpectedReservedType: "Unexpected reserved type %0.", + UnexpectedReservedType: ({ + reservedType + }) => `Unexpected reserved type ${reservedType}.`, UnexpectedReservedUnderscore: "`_` is only allowed as a type argument to call or new.", UnexpectedSpaceBetweenModuloChecks: "Spaces between `%` and `checks` are not allowed here.", UnexpectedSpreadType: "Spread operator cannot appear in class or interface definitions.", UnexpectedSubtractionOperand: 'Unexpected token, expected "number" or "bigint".', UnexpectedTokenAfterTypeParameter: "Expected an arrow function after this type parameter declaration.", UnexpectedTypeParameterBeforeAsyncArrowFunction: "Type parameters must come after the async keyword, e.g. instead of ` async () => {}`, use `async () => {}`.", - UnsupportedDeclareExportKind: "`declare export %0` is not supported. Use `%1` instead.", + UnsupportedDeclareExportKind: ({ + unsupportedExportKind, + suggestion + }) => `\`declare export ${unsupportedExportKind}\` is not supported. Use \`${suggestion}\` instead.`, UnsupportedStatementInDeclareModule: "Only declares and type imports are allowed inside declare module.", UnterminatedFlowComment: "Unterminated flow-comment." -}, ErrorCodes.SyntaxError, "flow"); +}); function isEsModuleType(bodyElement) { return bodyElement.type === "DeclareExportAllDeclaration" || bodyElement.type === "DeclareExportDeclaration" && (!bodyElement.declaration || bodyElement.declaration.type !== "TypeAlias" && bodyElement.declaration.type !== "InterfaceDeclaration"); @@ -4222,7 +4577,7 @@ function partition(list, test) { } const FLOW_PRAGMA_REGEX = /\*?\s*@((?:no)?flow)\b/; -var flow = (superClass => class extends superClass { +var flow = (superClass => class FlowParserMixin extends superClass { constructor(...args) { super(...args); this.flowPragma = undefined; @@ -4288,7 +4643,7 @@ var flow = (superClass => class extends superClass { } if (this.eat(10)) { - node.value = this.parseExpression(); + node.value = super.parseExpression(); this.expect(11); return this.finishNode(node, "DeclaredPredicate"); } else { @@ -4395,7 +4750,7 @@ var flow = (superClass => class extends superClass { this.scope.enter(SCOPE_OTHER); if (this.match(129)) { - node.id = this.parseExprAtom(); + node.id = super.parseExprAtom(); } else { node.id = this.parseIdentifier(); } @@ -4416,7 +4771,7 @@ var flow = (superClass => class extends superClass { }); } - this.parseImport(bodyNode); + super.parseImport(bodyNode); } else { this.expectContextual(121, FlowErrors.UnsupportedStatementInDeclareModule); bodyNode = this.flowParseDeclare(bodyNode, true); @@ -4434,7 +4789,7 @@ var flow = (superClass => class extends superClass { if (isEsModuleType(bodyElement)) { if (kind === "CommonJS") { this.raise(FlowErrors.AmbiguousDeclareModuleKind, { - node: bodyElement + at: bodyElement }); } @@ -4442,13 +4797,13 @@ var flow = (superClass => class extends superClass { } else if (bodyElement.type === "DeclareModuleExports") { if (hasModuleExport) { this.raise(FlowErrors.DuplicateDeclareModuleExports, { - node: bodyElement + at: bodyElement }); } if (kind === "ES") { this.raise(FlowErrors.AmbiguousDeclareModuleKind, { - node: bodyElement + at: bodyElement }); } @@ -4476,10 +4831,11 @@ var flow = (superClass => class extends superClass { } else { if (this.match(75) || this.isLet() || (this.isContextual(126) || this.isContextual(125)) && !insideModule) { const label = this.state.value; - const suggestion = exportSuggestions[label]; throw this.raise(FlowErrors.UnsupportedDeclareExportKind, { - at: this.state.startLoc - }, label, suggestion); + at: this.state.startLoc, + unsupportedExportKind: label, + suggestion: exportSuggestions[label] + }); } if (this.match(74) || this.match(68) || this.match(80) || this.isContextual(127)) { @@ -4513,16 +4869,16 @@ var flow = (superClass => class extends superClass { flowParseDeclareTypeAlias(node) { this.next(); - this.flowParseTypeAlias(node); - node.type = "DeclareTypeAlias"; - return node; + const finished = this.flowParseTypeAlias(node); + finished.type = "DeclareTypeAlias"; + return finished; } flowParseDeclareOpaqueType(node) { this.next(); - this.flowParseOpaqueType(node, true); - node.type = "DeclareOpaqueType"; - return node; + const finished = this.flowParseOpaqueType(node, true); + finished.type = "DeclareOpaqueType"; + return finished; } flowParseDeclareInterface(node) { @@ -4605,8 +4961,9 @@ var flow = (superClass => class extends superClass { checkReservedType(word, startLoc, declaration) { if (!reservedTypes.has(word)) return; this.raise(declaration ? FlowErrors.AssignReservedType : FlowErrors.UnexpectedReservedType, { - at: startLoc - }, word); + at: startLoc, + reservedType: word + }); } flowParseRestrictedIdentifier(liberal, declaration) { @@ -4776,7 +5133,7 @@ var flow = (superClass => class extends superClass { } flowParseObjectPropertyKey() { - return this.match(130) || this.match(129) ? this.parseExprAtom() : this.parseIdentifier(true); + return this.match(130) || this.match(129) ? super.parseExprAtom() : this.parseIdentifier(true); } flowParseObjectTypeIndexer(node, isStatic, variance) { @@ -5004,7 +5361,7 @@ var flow = (superClass => class extends superClass { if (variance) { this.raise(FlowErrors.InexactVariance, { - node: variance + at: variance }); } @@ -5023,7 +5380,7 @@ var flow = (superClass => class extends superClass { if (variance) { this.raise(FlowErrors.SpreadVariance, { - node: variance + at: variance }); } @@ -5055,7 +5412,7 @@ var flow = (superClass => class extends superClass { if (!allowSpread && node.key.name === "constructor" && node.value.this) { this.raise(FlowErrors.ThisParamBannedInConstructor, { - node: node.value.this + at: node.value.this }); } } else { @@ -5081,19 +5438,19 @@ var flow = (superClass => class extends superClass { if (property.value.this) { this.raise(property.kind === "get" ? FlowErrors.GetterMayNotHaveThisParam : FlowErrors.SetterMayNotHaveThisParam, { - node: property.value.this + at: property.value.this }); } if (length !== paramCount) { - this.raise(property.kind === "get" ? ErrorMessages.BadGetterArity : ErrorMessages.BadSetterArity, { - node: property + this.raise(property.kind === "get" ? Errors.BadGetterArity : Errors.BadSetterArity, { + at: property }); } if (property.kind === "set" && property.value.rest) { - this.raise(ErrorMessages.BadSetterRestParameter, { - node: property + this.raise(Errors.BadSetterRestParameter, { + at: property }); } } @@ -5164,7 +5521,7 @@ var flow = (superClass => class extends superClass { if (lh.type === 14 || lh.type === 17) { if (isThis && !first) { this.raise(FlowErrors.ThisParamMustBeFirst, { - node + at: node }); } @@ -5175,7 +5532,7 @@ var flow = (superClass => class extends superClass { if (isThis) { this.raise(FlowErrors.ThisParamMayNotBeOptional, { - node + at: node }); } } @@ -5559,7 +5916,7 @@ var flow = (superClass => class extends superClass { } this.next(); - this.finishNode(variance, "Variance"); + return this.finishNode(variance, "Variance"); } return variance; @@ -5580,7 +5937,7 @@ var flow = (superClass => class extends superClass { node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, "TypeAnnotation") : null; } - super.parseFunctionBodyAndFinish(node, type, isMethod); + return super.parseFunctionBodyAndFinish(node, type, isMethod); } parseStatement(context, topLevel) { @@ -5834,7 +6191,7 @@ var flow = (superClass => class extends superClass { if (this.match(5)) { node.specifiers = this.parseExportSpecifiers(true); - this.parseExportFrom(node); + super.parseExportFrom(node); return null; } else { return this.flowParseTypeAlias(declarationNode); @@ -5860,7 +6217,7 @@ var flow = (superClass => class extends superClass { } eatExportStar(node) { - if (super.eatExportStar(...arguments)) return true; + if (super.eatExportStar(node)) return true; if (this.isContextual(126) && this.lookahead().type === 55) { node.exportKind = "type"; @@ -5899,7 +6256,7 @@ var flow = (superClass => class extends superClass { } = this.state; if (this.isContextual(121)) { - if (this.parseClassMemberFromModifier(classBody, member)) { + if (super.parseClassMemberFromModifier(classBody, member)) { return; } @@ -5915,7 +6272,7 @@ var flow = (superClass => class extends superClass { }); } else if (member.value) { this.raise(FlowErrors.DeclareClassFieldInitializer, { - node: member.value + at: member.value }); } } @@ -5930,9 +6287,10 @@ var flow = (superClass => class extends superClass { const fullWord = "@@" + word; if (!this.isIterator(word) || !this.state.inType) { - this.raise(ErrorMessages.InvalidIdentifier, { - at: this.state.curPosition() - }, fullWord); + this.raise(Errors.InvalidIdentifier, { + at: this.state.curPosition(), + identifierName: fullWord + }); } this.finishToken(128, fullWord); @@ -5968,11 +6326,11 @@ var flow = (superClass => class extends superClass { } toAssignable(node, isLHS = false) { - if (node.type === "TypeCastExpression") { - return super.toAssignable(this.typeCastToParameter(node), isLHS); - } else { - return super.toAssignable(node, isLHS); + if (!isLHS && node.type === "AssignmentExpression" && node.left.type === "TypeCastExpression") { + node.left = this.typeCastToParameter(node.left); } + + super.toAssignable(node, isLHS); } toAssignableList(exprList, trailingCommaLoc, isLHS) { @@ -5984,7 +6342,7 @@ var flow = (superClass => class extends superClass { } } - return super.toAssignableList(exprList, trailingCommaLoc, isLHS); + super.toAssignableList(exprList, trailingCommaLoc, isLHS); } toReferencedList(exprList, isParenthesizedExpr) { @@ -5995,7 +6353,7 @@ var flow = (superClass => class extends superClass { if (expr && expr.type === "TypeCastExpression" && !((_expr$extra = expr.extra) != null && _expr$extra.parenthesized) && (exprList.length > 1 || !isParenthesizedExpr)) { this.raise(FlowErrors.TypeCastInPattern, { - node: expr.typeAnnotation + at: expr.typeAnnotation }); } } @@ -6013,10 +6371,8 @@ var flow = (superClass => class extends superClass { return node; } - checkLVal(expr, ...args) { - if (expr.type !== "TypeCastExpression") { - return super.checkLVal(expr, ...args); - } + isValidLVal(type, isParenthesized, binding) { + return type === "TypeCastExpression" || super.isValidLVal(type, isParenthesized, binding); } parseClassProperty(node) { @@ -6065,7 +6421,7 @@ var flow = (superClass => class extends superClass { if (params.length > 0 && this.isThisParam(params[0])) { this.raise(FlowErrors.ThisParamBannedInConstructor, { - node: method + at: method }); } } else if (method.type === "MethodDefinition" && isConstructor && method.value.params) { @@ -6073,7 +6429,7 @@ var flow = (superClass => class extends superClass { if (params.length > 0 && this.isThisParam(params[0])) { this.raise(FlowErrors.ThisParamBannedInConstructor, { - node: method + at: method }); } } @@ -6128,11 +6484,11 @@ var flow = (superClass => class extends superClass { if (this.isThisParam(param) && method.kind === "get") { this.raise(FlowErrors.GetterMayNotHaveThisParam, { - node: param + at: param }); } else if (this.isThisParam(param)) { this.raise(FlowErrors.SetterMayNotHaveThisParam, { - node: param + at: param }); } } @@ -6155,24 +6511,26 @@ var flow = (superClass => class extends superClass { if (!this.match(10)) this.unexpected(); } - super.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors); + const result = super.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors); if (typeParameters) { - (prop.value || prop).typeParameters = typeParameters; + (result.value || result).typeParameters = typeParameters; } + + return result; } parseAssignableListItemTypes(param) { if (this.eat(17)) { if (param.type !== "Identifier") { this.raise(FlowErrors.PatternIsOptional, { - node: param + at: param }); } if (this.isThisParam(param)) { this.raise(FlowErrors.ThisParamMayNotBeOptional, { - node: param + at: param }); } @@ -6183,13 +6541,13 @@ var flow = (superClass => class extends superClass { param.typeAnnotation = this.flowParseTypeAnnotation(); } else if (this.isThisParam(param)) { this.raise(FlowErrors.ThisParamAnnotationRequired, { - node: param + at: param }); } if (this.match(29) && this.isThisParam(param)) { this.raise(FlowErrors.ThisParamNoDefault, { - node: param + at: param }); } @@ -6202,7 +6560,7 @@ var flow = (superClass => class extends superClass { if (node.type === "AssignmentPattern" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) { this.raise(FlowErrors.TypeBeforeInitializer, { - node: node.typeAnnotation + at: node.typeAnnotation }); } @@ -6217,10 +6575,9 @@ var flow = (superClass => class extends superClass { return isMaybeDefaultImport(this.state.type); } - parseImportSpecifierLocal(node, specifier, type, contextDescription) { + parseImportSpecifierLocal(node, specifier, type) { specifier.local = hasTypeImportKind(node) ? this.flowParseRestrictedIdentifier(true, true) : this.parseIdentifier(); - this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL); - node.specifiers.push(this.finishNode(specifier, type)); + node.specifiers.push(this.finishImportSpecifier(specifier, type)); } maybeParseDefaultImportSpecifier(node) { @@ -6252,7 +6609,7 @@ var flow = (superClass => class extends superClass { return super.maybeParseDefaultImportSpecifier(node); } - parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly) { + parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) { const firstIdent = specifier.imported; let specifierTypeKind = null; @@ -6284,9 +6641,10 @@ var flow = (superClass => class extends superClass { specifier.importKind = specifierTypeKind; } else { if (importedIsString) { - throw this.raise(ErrorMessages.ImportBindingIsString, { - node: specifier - }, firstIdent.value); + throw this.raise(Errors.ImportBindingIsString, { + at: specifier, + importName: firstIdent.value + }); } specifier.imported = firstIdent; @@ -6305,7 +6663,7 @@ var flow = (superClass => class extends superClass { if (isInTypeOnlyImport && specifierIsTypeImport) { this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, { - node: specifier + at: specifier }); } @@ -6317,8 +6675,7 @@ var flow = (superClass => class extends superClass { this.checkReservedWord(specifier.local.name, specifier.loc.start, true, true); } - this.checkLVal(specifier.local, "import specifier", BIND_LEXICAL); - return this.finishNode(specifier, "ImportSpecifier"); + return this.finishImportSpecifier(specifier, "ImportSpecifier"); } parseBindingAtom() { @@ -6412,7 +6769,7 @@ var flow = (superClass => class extends superClass { if (!arrow.error && !arrow.aborted) { if (arrow.node.async) { this.raise(FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction, { - node: typeParameters + at: typeParameters }); } @@ -6435,7 +6792,7 @@ var flow = (superClass => class extends superClass { if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error; if (arrow.thrown) throw arrow.error; throw this.raise(FlowErrors.UnexpectedTokenAfterTypeParameter, { - node: typeParameters + at: typeParameters }); } @@ -6474,7 +6831,7 @@ var flow = (superClass => class extends superClass { } } - checkParams(node, allowDuplicates, isArrowFunction) { + checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) { if (isArrowFunction && this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) { return; } @@ -6482,12 +6839,12 @@ var flow = (superClass => class extends superClass { for (let i = 0; i < node.params.length; i++) { if (this.isThisParam(node.params[i]) && i > 0) { this.raise(FlowErrors.ThisParamMustBeFirst, { - node: node.params[i] + at: node.params[i] }); } } - return super.checkParams(...arguments); + return super.checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged); } parseParenAndDistinguishExpression(canBeArrow) { @@ -6499,7 +6856,7 @@ var flow = (superClass => class extends superClass { this.next(); const node = this.startNodeAt(startPos, startLoc); node.callee = base; - node.arguments = this.parseCallExpressionArguments(11, false); + node.arguments = super.parseCallExpressionArguments(11, false); base = this.finishNode(node, "CallExpression"); } else if (base.type === "Identifier" && base.name === "async" && this.match(47)) { const state = this.state.clone(); @@ -6547,8 +6904,12 @@ var flow = (superClass => class extends superClass { const result = this.tryParse(() => { node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew(); this.expect(10); - node.arguments = this.parseCallExpressionArguments(11, false); - if (subscriptState.optionalChainMember) node.optional = false; + node.arguments = super.parseCallExpressionArguments(11, false); + + if (subscriptState.optionalChainMember) { + node.optional = false; + } + return this.finishCallExpression(node, subscriptState.optionalChainMember); }); @@ -6561,7 +6922,8 @@ var flow = (superClass => class extends superClass { return super.parseSubscript(base, startPos, startLoc, noCalls, subscriptState); } - parseNewArguments(node) { + parseNewCallee(node) { + super.parseNewCallee(node); let targs = null; if (this.shouldParseTypes() && this.match(47)) { @@ -6569,14 +6931,13 @@ var flow = (superClass => class extends superClass { } node.typeArguments = targs; - super.parseNewArguments(node); } parseAsyncArrowWithTypeParameters(startPos, startLoc) { const node = this.startNodeAt(startPos, startLoc); this.parseFunctionParams(node); if (!this.parseArrow(node)) return; - return this.parseArrowExpression(node, undefined, true); + return super.parseArrowExpression(node, undefined, true); } readToken_mult_modulo(code) { @@ -6624,8 +6985,13 @@ var flow = (superClass => class extends superClass { } this.hasFlowCommentCompletion(); - this.state.pos += this.skipFlowComment(); - this.state.hasFlowComment = true; + const commentSkip = this.skipFlowComment(); + + if (commentSkip) { + this.state.pos += commentSkip; + this.state.hasFlowComment = true; + } + return; } @@ -6633,7 +6999,7 @@ var flow = (superClass => class extends superClass { const end = this.input.indexOf("*-/", this.state.pos + 2); if (end === -1) { - throw this.raise(ErrorMessages.UnterminatedComment, { + throw this.raise(Errors.UnterminatedComment, { at: this.state.curPosition() }); } @@ -6677,7 +7043,7 @@ var flow = (superClass => class extends superClass { const end = this.input.indexOf("*/", this.state.pos); if (end === -1) { - throw this.raise(ErrorMessages.UnterminatedComment, { + throw this.raise(Errors.UnterminatedComment, { at: this.state.curPosition() }); } @@ -6688,27 +7054,16 @@ var flow = (superClass => class extends superClass { memberName }) { this.raise(FlowErrors.EnumBooleanMemberNotInitialized, { - at: loc - }, memberName, enumName); - } - - flowEnumErrorInvalidExplicitType(loc, { - enumName, - suppliedType - }) { - return this.raise(suppliedType === null ? FlowErrors.EnumInvalidExplicitTypeUnknownSupplied : FlowErrors.EnumInvalidExplicitType, { - at: loc - }, enumName, suppliedType); + at: loc, + memberName, + enumName + }); } - flowEnumErrorInvalidMemberInitializer(loc, { - enumName, - explicitType, - memberName - }) { - return this.raise(explicitType === "boolean" || explicitType === "number" || explicitType === "string" ? FlowErrors.EnumInvalidMemberInitializerPrimaryType : explicitType === "symbol" ? FlowErrors.EnumInvalidMemberInitializerSymbolType : FlowErrors.EnumInvalidMemberInitializerUnknownType, { + flowEnumErrorInvalidMemberInitializer(loc, enumContext) { + return this.raise(!enumContext.explicitType ? FlowErrors.EnumInvalidMemberInitializerUnknownType : enumContext.explicitType === "symbol" ? FlowErrors.EnumInvalidMemberInitializerSymbolType : FlowErrors.EnumInvalidMemberInitializerPrimaryType, Object.assign({ at: loc - }, enumName, memberName, explicitType); + }, enumContext)); } flowEnumErrorNumberMemberNotInitialized(loc, { @@ -6716,16 +7071,19 @@ var flow = (superClass => class extends superClass { memberName }) { this.raise(FlowErrors.EnumNumberMemberNotInitialized, { - at: loc - }, enumName, memberName); + at: loc, + enumName, + memberName + }); } flowEnumErrorStringMemberInconsistentlyInitailized(node, { enumName }) { this.raise(FlowErrors.EnumStringMemberInconsistentlyInitailized, { - node - }, enumName); + at: node, + enumName + }); } flowEnumMemberInit() { @@ -6856,14 +7214,19 @@ var flow = (superClass => class extends superClass { if (/^[a-z]/.test(memberName)) { this.raise(FlowErrors.EnumInvalidMemberName, { - node: id - }, memberName, memberName[0].toUpperCase() + memberName.slice(1), enumName); + at: id, + memberName, + suggestion: memberName[0].toUpperCase() + memberName.slice(1), + enumName + }); } if (seenNames.has(memberName)) { this.raise(FlowErrors.EnumDuplicateMemberName, { - node: id - }, memberName, enumName); + at: id, + memberName, + enumName + }); } seenNames.add(memberName); @@ -6961,30 +7324,29 @@ var flow = (superClass => class extends superClass { flowEnumParseExplicitType({ enumName }) { - if (this.eatContextual(101)) { - if (!tokenIsIdentifier(this.state.type)) { - throw this.flowEnumErrorInvalidExplicitType(this.state.startLoc, { - enumName, - suppliedType: null - }); - } + if (!this.eatContextual(101)) return null; - const { - value - } = this.state; - this.next(); + if (!tokenIsIdentifier(this.state.type)) { + throw this.raise(FlowErrors.EnumInvalidExplicitTypeUnknownSupplied, { + at: this.state.startLoc, + enumName + }); + } - if (value !== "boolean" && value !== "number" && value !== "string" && value !== "symbol") { - this.flowEnumErrorInvalidExplicitType(this.state.startLoc, { - enumName, - suppliedType: value - }); - } + const { + value + } = this.state; + this.next(); - return value; + if (value !== "boolean" && value !== "number" && value !== "string" && value !== "symbol") { + this.raise(FlowErrors.EnumInvalidExplicitType, { + at: this.state.startLoc, + enumName, + invalidEnumType: value + }); } - return null; + return value; } flowEnumBody(node, id) { @@ -7075,8 +7437,9 @@ var flow = (superClass => class extends superClass { return this.finishNode(node, "EnumNumberBody"); } else { this.raise(FlowErrors.EnumInconsistentMemberValues, { - at: nameLoc - }, enumName); + at: nameLoc, + enumName + }); return empty(); } } @@ -7108,6 +7471,7 @@ var flow = (superClass => class extends superClass { }); const entities = { + __proto__: null, quot: "\u0022", amp: "&", apos: "\u0027", @@ -7363,17 +7727,21 @@ const entities = { diams: "\u2666" }; -const HEX_NUMBER = /^[\da-fA-F]+$/; -const DECIMAL_NUMBER = /^\d+$/; -const JsxErrors = makeErrorTemplates({ +const JsxErrors = ParseErrorEnum`jsx`({ AttributeIsEmpty: "JSX attributes must only be assigned a non-empty expression.", - MissingClosingTagElement: "Expected corresponding JSX closing tag for <%0>.", + MissingClosingTagElement: ({ + openingTagName + }) => `Expected corresponding JSX closing tag for <${openingTagName}>.`, MissingClosingTagFragment: "Expected corresponding JSX closing tag for <>.", UnexpectedSequenceExpression: "Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?", + UnexpectedToken: ({ + unexpected, + HTMLEntity + }) => `Unexpected token \`${unexpected}\`. Did you mean \`${HTMLEntity}\` or \`{'${unexpected}'}\`?`, UnsupportedJsxValue: "JSX value should be either an expression or a quoted JSX text.", UnterminatedJsxContent: "Unterminated JSX contents.", UnwrappedAdjacentJSXElements: "Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...?" -}, ErrorCodes.SyntaxError, "jsx"); +}); function isFragment(object) { return object ? object.type === "JSXOpeningFragment" || object.type === "JSXClosingFragment" : false; @@ -7395,7 +7763,7 @@ function getQualifiedJSXName(object) { throw new Error("Node had unexpected type: " + object.type); } -var jsx = (superClass => class extends superClass { +var jsx = (superClass => class JSXParserMixin extends superClass { jsxReadToken() { let out = ""; let chunkStart = this.state.pos; @@ -7469,7 +7837,7 @@ var jsx = (superClass => class extends superClass { for (;;) { if (this.state.pos >= this.length) { - throw this.raise(ErrorMessages.UnterminatedString, { + throw this.raise(Errors.UnterminatedString, { at: this.state.startLoc }); } @@ -7495,46 +7863,44 @@ var jsx = (superClass => class extends superClass { } jsxReadEntity() { - let str = ""; - let count = 0; - let entity; - let ch = this.input[this.state.pos]; const startPos = ++this.state.pos; - while (this.state.pos < this.length && count++ < 10) { - ch = this.input[this.state.pos++]; + if (this.codePointAtPos(this.state.pos) === 35) { + ++this.state.pos; + let radix = 10; - if (ch === ";") { - if (str[0] === "#") { - if (str[1] === "x") { - str = str.substr(2); + if (this.codePointAtPos(this.state.pos) === 120) { + radix = 16; + ++this.state.pos; + } - if (HEX_NUMBER.test(str)) { - entity = String.fromCodePoint(parseInt(str, 16)); - } - } else { - str = str.substr(1); + const codePoint = this.readInt(radix, undefined, false, "bail"); - if (DECIMAL_NUMBER.test(str)) { - entity = String.fromCodePoint(parseInt(str, 10)); - } - } - } else { - entity = entities[str]; - } + if (codePoint !== null && this.codePointAtPos(this.state.pos) === 59) { + ++this.state.pos; + return String.fromCodePoint(codePoint); + } + } else { + let count = 0; + let semi = false; - break; + while (count++ < 10 && this.state.pos < this.length && !(semi = this.codePointAtPos(this.state.pos) == 59)) { + ++this.state.pos; } - str += ch; - } + if (semi) { + const desc = this.input.slice(startPos, this.state.pos); + const entity = entities[desc]; + ++this.state.pos; - if (!entity) { - this.state.pos = startPos; - return "&"; + if (entity) { + return entity; + } + } } - return entity; + this.state.pos = startPos; + return "&"; } jsxReadWord() { @@ -7605,7 +7971,7 @@ var jsx = (superClass => class extends superClass { if (node.expression.type === "JSXEmptyExpression") { this.raise(JsxErrors.AttributeIsEmpty, { - node + at: node }); } @@ -7631,6 +7997,7 @@ var jsx = (superClass => class extends superClass { this.next(); node.expression = this.parseExpression(); this.setContext(types.j_oTag); + this.state.canStartJSXElement = true; this.expect(8); return this.finishNode(node, "JSXSpreadChild"); } @@ -7644,6 +8011,7 @@ var jsx = (superClass => class extends superClass { } this.setContext(previousContext); + this.state.canStartJSXElement = true; this.expect(8); return this.finishNode(node, "JSXExpressionContainer"); } @@ -7657,6 +8025,7 @@ var jsx = (superClass => class extends superClass { this.expect(21); node.argument = this.parseMaybeAssignAllowIn(); this.setContext(types.j_oTag); + this.state.canStartJSXElement = true; this.expect(8); return this.finishNode(node, "JSXSpreadAttribute"); } @@ -7669,8 +8038,7 @@ var jsx = (superClass => class extends superClass { jsxParseOpeningElementAt(startPos, startLoc) { const node = this.startNodeAt(startPos, startLoc); - if (this.match(139)) { - this.expect(139); + if (this.eat(139)) { return this.finishNode(node, "JSXOpeningFragment"); } @@ -7694,8 +8062,7 @@ var jsx = (superClass => class extends superClass { jsxParseClosingElementAt(startPos, startLoc) { const node = this.startNodeAt(startPos, startLoc); - if (this.match(139)) { - this.expect(139); + if (this.eat(139)) { return this.finishNode(node, "JSXClosingFragment"); } @@ -7752,17 +8119,19 @@ var jsx = (superClass => class extends superClass { if (isFragment(openingElement) && !isFragment(closingElement) && closingElement !== null) { this.raise(JsxErrors.MissingClosingTagFragment, { - node: closingElement + at: closingElement }); } else if (!isFragment(openingElement) && isFragment(closingElement)) { this.raise(JsxErrors.MissingClosingTagElement, { - node: closingElement - }, getQualifiedJSXName(openingElement.name)); + at: closingElement, + openingTagName: getQualifiedJSXName(openingElement.name) + }); } else if (!isFragment(openingElement) && !isFragment(closingElement)) { if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) { this.raise(JsxErrors.MissingClosingTagElement, { - node: closingElement - }, getQualifiedJSXName(openingElement.name)); + at: closingElement, + openingTagName: getQualifiedJSXName(openingElement.name) + }); } } } @@ -7889,11 +8258,63 @@ class TypeScriptScope extends Scope { } class TypeScriptScopeHandler extends ScopeHandler { + constructor(...args) { + super(...args); + this.importsStack = []; + } + createScope(flags) { + this.importsStack.push(new Set()); return new TypeScriptScope(flags); } + enter(flags) { + if (flags == SCOPE_TS_MODULE) { + this.importsStack.push(new Set()); + } + + super.enter(flags); + } + + exit() { + const flags = super.exit(); + + if (flags == SCOPE_TS_MODULE) { + this.importsStack.pop(); + } + + return flags; + } + + hasImport(name, allowShadow) { + const len = this.importsStack.length; + + if (this.importsStack[len - 1].has(name)) { + return true; + } + + if (!allowShadow && len > 1) { + for (let i = 0; i < len - 1; i++) { + if (this.importsStack[i].has(name)) return true; + } + } + + return false; + } + declareName(name, bindingType, loc) { + if (bindingType & BIND_FLAGS_TS_IMPORT) { + if (this.hasImport(name, true)) { + this.parser.raise(Errors.VarRedeclaration, { + at: loc, + identifierName: name + }); + } + + this.importsStack[this.importsStack.length - 1].add(name); + return; + } + const scope = this.currentScope(); if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) { @@ -7902,7 +8323,7 @@ class TypeScriptScopeHandler extends ScopeHandler { return; } - super.declareName(...arguments); + super.declareName(name, bindingType, loc); if (bindingType & BIND_KIND_TYPE) { if (!(bindingType & BIND_KIND_VALUE)) { @@ -7941,7 +8362,7 @@ class TypeScriptScopeHandler extends ScopeHandler { return true; } - return super.isRedeclaredInScope(...arguments); + return super.isRedeclaredInScope(scope, name, bindingType); } checkLocalExport(id) { @@ -7950,13 +8371,15 @@ class TypeScriptScopeHandler extends ScopeHandler { name } = id; - if (!topLevelScope.types.has(name) && !topLevelScope.exportOnlyBindings.has(name)) { + if (!topLevelScope.types.has(name) && !topLevelScope.exportOnlyBindings.has(name) && !this.hasImport(name)) { super.checkLocalExport(id); } } } +const getOwn$1 = (object, key) => Object.hasOwnProperty.call(object, key) && object[key]; + function nonNull(x) { if (x == null) { throw new Error(`Unexpected ${x} value.`); @@ -7971,32 +8394,64 @@ function assert(x) { } } -const TSErrors = makeErrorTemplates({ - AbstractMethodHasImplementation: "Method '%0' cannot have an implementation because it is marked abstract.", - AbstractPropertyHasInitializer: "Property '%0' cannot have an initializer because it is marked abstract.", +const TSErrors = ParseErrorEnum`typescript`({ + AbstractMethodHasImplementation: ({ + methodName + }) => `Method '${methodName}' cannot have an implementation because it is marked abstract.`, + AbstractPropertyHasInitializer: ({ + propertyName + }) => `Property '${propertyName}' cannot have an initializer because it is marked abstract.`, AccesorCannotDeclareThisParameter: "'get' and 'set' accessors cannot declare 'this' parameters.", AccesorCannotHaveTypeParameters: "An accessor cannot have type parameters.", + CannotFindName: ({ + name + }) => `Cannot find name '${name}'.`, ClassMethodHasDeclare: "Class methods cannot have the 'declare' modifier.", ClassMethodHasReadonly: "Class methods cannot have the 'readonly' modifier.", + ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference: "A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.", ConstructorHasTypeParameters: "Type parameters cannot appear on a constructor declaration.", - DeclareAccessor: "'declare' is not allowed in %0ters.", + DeclareAccessor: ({ + kind + }) => `'declare' is not allowed in ${kind}ters.`, DeclareClassFieldHasInitializer: "Initializers are not allowed in ambient contexts.", DeclareFunctionHasImplementation: "An implementation cannot be declared in ambient contexts.", - DuplicateAccessibilityModifier: "Accessibility modifier already seen.", - DuplicateModifier: "Duplicate modifier: '%0'.", - EmptyHeritageClauseType: "'%0' list cannot be empty.", + DuplicateAccessibilityModifier: ({ + modifier + }) => `Accessibility modifier already seen.`, + DuplicateModifier: ({ + modifier + }) => `Duplicate modifier: '${modifier}'.`, + EmptyHeritageClauseType: ({ + token + }) => `'${token}' list cannot be empty.`, EmptyTypeArguments: "Type argument list cannot be empty.", EmptyTypeParameters: "Type parameter list cannot be empty.", ExpectedAmbientAfterExportDeclare: "'export declare' must be followed by an ambient declaration.", ImportAliasHasImportType: "An import alias can not use 'import type'.", - IncompatibleModifiers: "'%0' modifier cannot be used with '%1' modifier.", + IncompatibleModifiers: ({ + modifiers + }) => `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`, IndexSignatureHasAbstract: "Index signatures cannot have the 'abstract' modifier.", - IndexSignatureHasAccessibility: "Index signatures cannot have an accessibility modifier ('%0').", + IndexSignatureHasAccessibility: ({ + modifier + }) => `Index signatures cannot have an accessibility modifier ('${modifier}').`, IndexSignatureHasDeclare: "Index signatures cannot have the 'declare' modifier.", IndexSignatureHasOverride: "'override' modifier cannot appear on an index signature.", IndexSignatureHasStatic: "Index signatures cannot have the 'static' modifier.", - InvalidModifierOnTypeMember: "'%0' modifier cannot appear on a type member.", - InvalidModifiersOrder: "'%0' modifier must precede '%1' modifier.", + InitializerNotAllowedInAmbientContext: "Initializers are not allowed in ambient contexts.", + InvalidModifierOnTypeMember: ({ + modifier + }) => `'${modifier}' modifier cannot appear on a type member.`, + InvalidModifierOnTypeParameter: ({ + modifier + }) => `'${modifier}' modifier cannot appear on a type parameter.`, + InvalidModifierOnTypeParameterPositions: ({ + modifier + }) => `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`, + InvalidModifiersOrder: ({ + orderedModifiers + }) => `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`, + InvalidPropertyAccessAfterInstantiationExpression: "Invalid property access after an instantiation expression. " + "You can either wrap the instantiation expression in parentheses, or delete the type arguments.", InvalidTupleMemberLabel: "Tuple members must be labeled with a simple identifier.", MissingInterfaceName: "'interface' declarations must be followed by an identifier.", MixedLabeledAndUnlabeledElements: "Tuple members must all have names or all not have names.", @@ -8006,13 +8461,18 @@ const TSErrors = makeErrorTemplates({ OverrideNotInSubClass: "This member cannot have an 'override' modifier because its containing class does not extend another class.", PatternIsOptional: "A binding pattern parameter cannot be optional in an implementation signature.", PrivateElementHasAbstract: "Private elements cannot have the 'abstract' modifier.", - PrivateElementHasAccessibility: "Private elements cannot have an accessibility modifier ('%0').", + PrivateElementHasAccessibility: ({ + modifier + }) => `Private elements cannot have an accessibility modifier ('${modifier}').`, ReadonlyForMethodSignature: "'readonly' modifier can only appear on a property declaration or index signature.", ReservedArrowTypeParam: "This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `() => ...`.", ReservedTypeAssertion: "This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.", SetAccesorCannotHaveOptionalParameter: "A 'set' accessor cannot have an optional parameter.", SetAccesorCannotHaveRestParameter: "A 'set' accessor cannot have rest parameter.", SetAccesorCannotHaveReturnType: "A 'set' accessor cannot have a return type annotation.", + SingleTypeParameterWithoutTrailingComma: ({ + typeParameterName + }) => `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`, StaticBlockCannotHaveModifier: "Static class blocks cannot have any modifier.", TypeAnnotationAfterAssign: "Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.", TypeImportCannotSpecifyDefaultAndNamed: "A type-only import can specify a default import or named bindings, but not both.", @@ -8024,8 +8484,10 @@ const TSErrors = makeErrorTemplates({ UnexpectedTypeCastInParameter: "Unexpected type cast in parameter position.", UnsupportedImportTypeArgument: "Argument in a type import must be a string literal.", UnsupportedParameterPropertyKind: "A parameter property may not be declared using a binding pattern.", - UnsupportedSignatureParameterKind: "Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got %0." -}, ErrorCodes.SyntaxError, "typescript"); + UnsupportedSignatureParameterKind: ({ + type + }) => `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.` +}); function keywordTypeFromName(value) { switch (value) { @@ -8068,7 +8530,11 @@ function tsIsAccessModifier(modifier) { return modifier === "private" || modifier === "public" || modifier === "protected"; } -var typescript = (superClass => class extends superClass { +function tsIsVarianceAnnotations(modifier) { + return modifier === "in" || modifier === "out"; +} + +var typescript = (superClass => class TypeScriptParserMixin extends superClass { getScopeHandler() { return TypeScriptScopeHandler; } @@ -8087,7 +8553,7 @@ var typescript = (superClass => class extends superClass { } tsParseModifier(allowedModifiers, stopOnStartOfClassStaticBlock) { - if (!tokenIsIdentifier(this.state.type)) { + if (!tokenIsIdentifier(this.state.type) && this.state.type !== 58) { return undefined; } @@ -8106,20 +8572,28 @@ var typescript = (superClass => class extends superClass { return undefined; } - tsParseModifiers(modified, allowedModifiers, disallowedModifiers, errorTemplate, stopOnStartOfClassStaticBlock) { + tsParseModifiers({ + modified, + allowedModifiers, + disallowedModifiers, + stopOnStartOfClassStaticBlock, + errorTemplate = TSErrors.InvalidModifierOnTypeMember + }) { const enforceOrder = (loc, modifier, before, after) => { if (modifier === before && modified[after]) { this.raise(TSErrors.InvalidModifiersOrder, { - at: loc - }, before, after); + at: loc, + orderedModifiers: [before, after] + }); } }; const incompatible = (loc, modifier, mod1, mod2) => { if (modified[mod1] && modifier === mod2 || modified[mod2] && modifier === mod1) { this.raise(TSErrors.IncompatibleModifiers, { - at: loc - }, mod1, mod2); + at: loc, + modifiers: [mod1, mod2] + }); } }; @@ -8133,7 +8607,8 @@ var typescript = (superClass => class extends superClass { if (tsIsAccessModifier(modifier)) { if (modified.accessibility) { this.raise(TSErrors.DuplicateAccessibilityModifier, { - at: startLoc + at: startLoc, + modifier }); } else { enforceOrder(startLoc, modifier, modifier, "override"); @@ -8141,11 +8616,22 @@ var typescript = (superClass => class extends superClass { enforceOrder(startLoc, modifier, modifier, "readonly"); modified.accessibility = modifier; } + } else if (tsIsVarianceAnnotations(modifier)) { + if (modified[modifier]) { + this.raise(TSErrors.DuplicateModifier, { + at: startLoc, + modifier + }); + } + + modified[modifier] = true; + enforceOrder(startLoc, modifier, "in", "out"); } else { if (Object.hasOwnProperty.call(modified, modifier)) { this.raise(TSErrors.DuplicateModifier, { - at: startLoc - }, modifier); + at: startLoc, + modifier + }); } else { enforceOrder(startLoc, modifier, "static", "readonly"); enforceOrder(startLoc, modifier, "static", "override"); @@ -8160,8 +8646,9 @@ var typescript = (superClass => class extends superClass { if (disallowedModifiers != null && disallowedModifiers.includes(modifier)) { this.raise(errorTemplate, { - at: startLoc - }, modifier); + at: startLoc, + modifier + }); } } } @@ -8271,11 +8758,11 @@ var typescript = (superClass => class extends superClass { }); } - node.argument = this.parseExprAtom(); + node.argument = super.parseExprAtom(); this.expect(11); if (this.eat(16)) { - node.qualifier = this.tsParseEntityName(true); + node.qualifier = this.tsParseEntityName(); } if (this.match(47)) { @@ -8285,8 +8772,8 @@ var typescript = (superClass => class extends superClass { return this.finishNode(node, "TSImportType"); } - tsParseEntityName(allowReservedWords) { - let entity = this.parseIdentifier(); + tsParseEntityName(allowReservedWords = true) { + let entity = this.parseIdentifier(allowReservedWords); while (this.eat(16)) { const node = this.startNodeAtNode(entity); @@ -8300,7 +8787,7 @@ var typescript = (superClass => class extends superClass { tsParseTypeReference() { const node = this.startNode(); - node.typeName = this.tsParseEntityName(false); + node.typeName = this.tsParseEntityName(); if (!this.hasPrecedingLineBreak() && this.match(47)) { node.typeParameters = this.tsParseTypeArguments(); @@ -8331,27 +8818,50 @@ var typescript = (superClass => class extends superClass { if (this.match(83)) { node.exprName = this.tsParseImportType(); } else { - node.exprName = this.tsParseEntityName(true); + node.exprName = this.tsParseEntityName(); + } + + if (!this.hasPrecedingLineBreak() && this.match(47)) { + node.typeParameters = this.tsParseTypeArguments(); } return this.finishNode(node, "TSTypeQuery"); } - tsParseTypeParameter() { + tsParseInOutModifiers(node) { + this.tsParseModifiers({ + modified: node, + allowedModifiers: ["in", "out"], + disallowedModifiers: ["public", "private", "protected", "readonly", "declare", "abstract", "override"], + errorTemplate: TSErrors.InvalidModifierOnTypeParameter + }); + } + + tsParseNoneModifiers(node) { + this.tsParseModifiers({ + modified: node, + allowedModifiers: [], + disallowedModifiers: ["in", "out"], + errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions + }); + } + + tsParseTypeParameter(parseModifiers = this.tsParseNoneModifiers.bind(this)) { const node = this.startNode(); + parseModifiers(node); node.name = this.tsParseTypeParameterName(); node.constraint = this.tsEatThenParseType(81); node.default = this.tsEatThenParseType(29); return this.finishNode(node, "TSTypeParameter"); } - tsTryParseTypeParameters() { + tsTryParseTypeParameters(parseModifiers) { if (this.match(47)) { - return this.tsParseTypeParameters(); + return this.tsParseTypeParameters(parseModifiers); } } - tsParseTypeParameters() { + tsParseTypeParameters(parseModifiers) { const node = this.startNode(); if (this.match(47) || this.match(138)) { @@ -8363,11 +8873,11 @@ var typescript = (superClass => class extends superClass { const refTrailingCommaPos = { value: -1 }; - node.params = this.tsParseBracketedList("TypeParametersOrArguments", this.tsParseTypeParameter.bind(this), false, true, refTrailingCommaPos); + node.params = this.tsParseBracketedList("TypeParametersOrArguments", this.tsParseTypeParameter.bind(this, parseModifiers), false, true, refTrailingCommaPos); if (node.params.length === 0) { this.raise(TSErrors.EmptyTypeParameters, { - node + at: node }); } @@ -8379,12 +8889,18 @@ var typescript = (superClass => class extends superClass { } tsTryNextParseConstantContext() { - if (this.lookahead().type === 75) { - this.next(); - return this.tsParseTypeReference(); + if (this.lookahead().type !== 75) return null; + this.next(); + const typeReference = this.tsParseTypeReference(); + + if (typeReference.typeParameters) { + this.raise(TSErrors.CannotFindName, { + at: typeReference.typeName, + name: "const" + }); } - return null; + return typeReference; } tsFillSignature(returnToken, signature) { @@ -8403,11 +8919,12 @@ var typescript = (superClass => class extends superClass { } tsParseBindingListForSignature() { - return this.parseBindingList(11, 41).map(pattern => { + return super.parseBindingList(11, 41).map(pattern => { if (pattern.type !== "Identifier" && pattern.type !== "RestElement" && pattern.type !== "ObjectPattern" && pattern.type !== "ArrayPattern") { this.raise(TSErrors.UnsupportedSignatureParameterKind, { - node: pattern - }, pattern.type); + at: pattern, + type: pattern.type + }); } return pattern; @@ -8461,7 +8978,7 @@ var typescript = (superClass => class extends superClass { if (this.match(10) || this.match(47)) { if (readonly) { this.raise(TSErrors.ReadonlyForMethodSignature, { - node + at: node }); } @@ -8480,7 +8997,7 @@ var typescript = (superClass => class extends superClass { if (method.kind === "get") { if (method[paramsKey].length > 0) { - this.raise(ErrorMessages.BadGetterArity, { + this.raise(Errors.BadGetterArity, { at: this.state.curPosition() }); @@ -8492,7 +9009,7 @@ var typescript = (superClass => class extends superClass { } } else if (method.kind === "set") { if (method[paramsKey].length !== 1) { - this.raise(ErrorMessages.BadSetterArity, { + this.raise(Errors.BadSetterArity, { at: this.state.curPosition() }); } else { @@ -8519,7 +9036,7 @@ var typescript = (superClass => class extends superClass { if (method[returnTypeKey]) { this.raise(TSErrors.SetAccesorCannotHaveReturnType, { - node: method[returnTypeKey] + at: method[returnTypeKey] }); } } else { @@ -8556,18 +9073,22 @@ var typescript = (superClass => class extends superClass { } } - this.tsParseModifiers(node, ["readonly"], ["declare", "abstract", "private", "protected", "public", "static", "override"], TSErrors.InvalidModifierOnTypeMember); + this.tsParseModifiers({ + modified: node, + allowedModifiers: ["readonly"], + disallowedModifiers: ["declare", "abstract", "private", "protected", "public", "static", "override"] + }); const idx = this.tsTryParseIndexSignature(node); if (idx) { return idx; } - this.parsePropertyName(node); + super.parsePropertyName(node); if (!node.computed && node.key.type === "Identifier" && (node.key.name === "get" || node.key.name === "set") && this.tsTokenCanFollowModifier()) { node.kind = node.key.name; - this.parsePropertyName(node); + super.parsePropertyName(node); } return this.tsParsePropertyOrMethodSignature(node, !!node.readonly); @@ -8657,29 +9178,30 @@ var typescript = (superClass => class extends superClass { node.elementTypes.forEach(elementNode => { var _labeledElements; - let { + const { type } = elementNode; if (seenOptionalElement && type !== "TSRestType" && type !== "TSOptionalType" && !(type === "TSNamedTupleMember" && elementNode.optional)) { this.raise(TSErrors.OptionalTypeBeforeRequired, { - node: elementNode + at: elementNode }); } - seenOptionalElement = seenOptionalElement || type === "TSNamedTupleMember" && elementNode.optional || type === "TSOptionalType"; + seenOptionalElement || (seenOptionalElement = type === "TSNamedTupleMember" && elementNode.optional || type === "TSOptionalType"); + let checkType = type; if (type === "TSRestType") { elementNode = elementNode.typeAnnotation; - type = elementNode.type; + checkType = elementNode.type; } - const isLabeled = type === "TSNamedTupleMember"; - labeledElements = (_labeledElements = labeledElements) != null ? _labeledElements : isLabeled; + const isLabeled = checkType === "TSNamedTupleMember"; + (_labeledElements = labeledElements) != null ? _labeledElements : labeledElements = isLabeled; if (labeledElements !== isLabeled) { this.raise(TSErrors.MixedLabeledAndUnlabeledElements, { - node: elementNode + at: elementNode }); } }); @@ -8704,7 +9226,7 @@ var typescript = (superClass => class extends superClass { labeledNode.label = type.typeName; } else { this.raise(TSErrors.InvalidTupleMemberLabel, { - node: type + at: type }); labeledNode.label = type; } @@ -8743,7 +9265,7 @@ var typescript = (superClass => class extends superClass { this.next(); } - this.tsFillSignature(19, node); + this.tsInAllowConditionalTypesContext(() => this.tsFillSignature(19, node)); return this.finishNode(node, type); } @@ -8757,7 +9279,7 @@ var typescript = (superClass => class extends superClass { case 129: case 85: case 86: - return this.parseExprAtom(); + return super.parseExprAtom(); default: throw this.unexpected(); @@ -8769,7 +9291,7 @@ var typescript = (superClass => class extends superClass { tsParseTemplateLiteralType() { const node = this.startNode(); - node.literal = this.parseTemplate(false); + node.literal = super.parseTemplate(false); return this.finishNode(node, "TSLiteralType"); } @@ -8900,7 +9422,7 @@ var typescript = (superClass => class extends superClass { default: this.raise(TSErrors.UnexpectedReadonly, { - node + at: node }); } } @@ -8910,13 +9432,24 @@ var typescript = (superClass => class extends superClass { this.expectContextual(112); const typeParameter = this.startNode(); typeParameter.name = this.tsParseTypeParameterName(); + typeParameter.constraint = this.tsTryParse(() => this.tsParseConstraintForInferType()); node.typeParameter = this.finishNode(typeParameter, "TSTypeParameter"); return this.finishNode(node, "TSInferType"); } + tsParseConstraintForInferType() { + if (this.eat(81)) { + const constraint = this.tsInDisallowConditionalTypesContext(() => this.tsParseType()); + + if (this.state.inDisallowConditionalTypesContext || !this.match(17)) { + return constraint; + } + } + } + tsParseTypeOperatorOrHigher() { const isTypeOperator = tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc; - return isTypeOperator ? this.tsParseTypeOperator() : this.isContextual(112) ? this.tsParseInferType() : this.tsParseArrayTypeOrHigher(); + return isTypeOperator ? this.tsParseTypeOperator() : this.isContextual(112) ? this.tsParseInferType() : this.tsInAllowConditionalTypesContext(() => this.tsParseArrayTypeOrHigher()); } tsParseUnionOrIntersectionType(kind, parseConstituentType, operator) { @@ -8959,37 +9492,32 @@ var typescript = (superClass => class extends superClass { } if (this.match(5)) { - let braceStackCounter = 1; - this.next(); - - while (braceStackCounter > 0) { - if (this.match(5)) { - ++braceStackCounter; - } else if (this.match(8)) { - --braceStackCounter; - } + const { + errors + } = this.state; + const previousErrorCount = errors.length; - this.next(); + try { + this.parseObjectLike(8, true); + return errors.length === previousErrorCount; + } catch (_unused) { + return false; } - - return true; } if (this.match(0)) { - let braceStackCounter = 1; this.next(); + const { + errors + } = this.state; + const previousErrorCount = errors.length; - while (braceStackCounter > 0) { - if (this.match(0)) { - ++braceStackCounter; - } else if (this.match(3)) { - --braceStackCounter; - } - - this.next(); + try { + super.parseBindingList(3, 93, true); + return errors.length === previousErrorCount; + } catch (_unused2) { + return false; } - - return true; } return false; @@ -9100,9 +9628,10 @@ var typescript = (superClass => class extends superClass { } if (containsEsc) { - this.raise(ErrorMessages.InvalidEscapedReservedWord, { - at: this.state.lastTokStartLoc - }, "asserts"); + this.raise(Errors.InvalidEscapedReservedWord, { + at: this.state.lastTokStartLoc, + reservedWord: "asserts" + }); } return true; @@ -9120,17 +9649,17 @@ var typescript = (superClass => class extends superClass { assert(this.state.inType); const type = this.tsParseNonConditionalType(); - if (this.hasPrecedingLineBreak() || !this.eat(81)) { + if (this.state.inDisallowConditionalTypesContext || this.hasPrecedingLineBreak() || !this.eat(81)) { return type; } const node = this.startNodeAtNode(type); node.checkType = type; - node.extendsType = this.tsParseNonConditionalType(); + node.extendsType = this.tsInDisallowConditionalTypesContext(() => this.tsParseNonConditionalType()); this.expect(17); - node.trueType = this.tsParseType(); + node.trueType = this.tsInAllowConditionalTypesContext(() => this.tsParseType()); this.expect(14); - node.falseType = this.tsParseType(); + node.falseType = this.tsInAllowConditionalTypesContext(() => this.tsParseType()); return this.finishNode(node, "TSConditionalType"); } @@ -9169,34 +9698,37 @@ var typescript = (superClass => class extends superClass { return this.finishNode(node, "TSTypeAssertion"); } - tsParseHeritageClause(descriptor) { + tsParseHeritageClause(token) { const originalStartLoc = this.state.startLoc; - const delimitedList = this.tsParseDelimitedList("HeritageClauseElement", this.tsParseExpressionWithTypeArguments.bind(this)); + const delimitedList = this.tsParseDelimitedList("HeritageClauseElement", () => { + const node = this.startNode(); + node.expression = this.tsParseEntityName(); + + if (this.match(47)) { + node.typeParameters = this.tsParseTypeArguments(); + } + + return this.finishNode(node, "TSExpressionWithTypeArguments"); + }); if (!delimitedList.length) { this.raise(TSErrors.EmptyHeritageClauseType, { - at: originalStartLoc - }, descriptor); + at: originalStartLoc, + token + }); } return delimitedList; } - tsParseExpressionWithTypeArguments() { - const node = this.startNode(); - node.expression = this.tsParseEntityName(false); - - if (this.match(47)) { - node.typeParameters = this.tsParseTypeArguments(); - } - - return this.finishNode(node, "TSExpressionWithTypeArguments"); - } + tsParseInterfaceDeclaration(node, properties = {}) { + if (this.hasFollowingLineBreak()) return null; + this.expectContextual(125); + if (properties.declare) node.declare = true; - tsParseInterfaceDeclaration(node) { if (tokenIsIdentifier(this.state.type)) { node.id = this.parseIdentifier(); - this.checkLVal(node.id, "typescript interface declaration", BIND_TS_INTERFACE); + this.checkIdentifier(node.id, BIND_TS_INTERFACE); } else { node.id = null; this.raise(TSErrors.MissingInterfaceName, { @@ -9204,7 +9736,7 @@ var typescript = (superClass => class extends superClass { }); } - node.typeParameters = this.tsTryParseTypeParameters(); + node.typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutModifiers.bind(this)); if (this.eat(81)) { node.extends = this.tsParseHeritageClause("extends"); @@ -9218,9 +9750,9 @@ var typescript = (superClass => class extends superClass { tsParseTypeAliasDeclaration(node) { node.id = this.parseIdentifier(); - this.checkLVal(node.id, "typescript type alias", BIND_TS_TYPE); - node.typeParameters = this.tsTryParseTypeParameters(); + this.checkIdentifier(node.id, BIND_TS_TYPE); node.typeAnnotation = this.tsInType(() => { + node.typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutModifiers.bind(this)); this.expect(29); if (this.isContextual(111) && this.lookahead().type !== 16) { @@ -9257,6 +9789,28 @@ var typescript = (superClass => class extends superClass { } } + tsInDisallowConditionalTypesContext(cb) { + const oldInDisallowConditionalTypesContext = this.state.inDisallowConditionalTypesContext; + this.state.inDisallowConditionalTypesContext = true; + + try { + return cb(); + } finally { + this.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; + } + } + + tsInAllowConditionalTypesContext(cb) { + const oldInDisallowConditionalTypesContext = this.state.inDisallowConditionalTypesContext; + this.state.inDisallowConditionalTypesContext = false; + + try { + return cb(); + } finally { + this.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; + } + } + tsEatThenParseType(token) { return !this.match(token) ? undefined : this.tsNextThenParseType(); } @@ -9278,19 +9832,21 @@ var typescript = (superClass => class extends superClass { tsParseEnumMember() { const node = this.startNode(); - node.id = this.match(129) ? this.parseExprAtom() : this.parseIdentifier(true); + node.id = this.match(129) ? super.parseStringLiteral(this.state.value) : this.parseIdentifier(true); if (this.eat(29)) { - node.initializer = this.parseMaybeAssignAllowIn(); + node.initializer = super.parseMaybeAssignAllowIn(); } return this.finishNode(node, "TSEnumMember"); } - tsParseEnumDeclaration(node, isConst) { - if (isConst) node.const = true; + tsParseEnumDeclaration(node, properties = {}) { + if (properties.const) node.const = true; + if (properties.declare) node.declare = true; + this.expectContextual(122); node.id = this.parseIdentifier(); - this.checkLVal(node.id, "typescript enum declaration", isConst ? BIND_TS_CONST_ENUM : BIND_TS_ENUM); + this.checkIdentifier(node.id, node.const ? BIND_TS_CONST_ENUM : BIND_TS_ENUM); this.expect(5); node.members = this.tsParseDelimitedList("EnumMembers", this.tsParseEnumMember.bind(this)); this.expect(8); @@ -9301,7 +9857,7 @@ var typescript = (superClass => class extends superClass { const node = this.startNode(); this.scope.enter(SCOPE_OTHER); this.expect(5); - this.parseBlockOrModuleBlockBody(node.body = [], undefined, true, 8); + super.parseBlockOrModuleBlockBody(node.body = [], undefined, true, 8); this.scope.exit(); return this.finishNode(node, "TSModuleBlock"); } @@ -9310,7 +9866,7 @@ var typescript = (superClass => class extends superClass { node.id = this.parseIdentifier(); if (!nested) { - this.checkLVal(node.id, "module or namespace declaration", BIND_TS_NAMESPACE); + this.checkIdentifier(node.id, BIND_TS_NAMESPACE); } if (this.eat(16)) { @@ -9333,7 +9889,7 @@ var typescript = (superClass => class extends superClass { node.global = true; node.id = this.parseIdentifier(); } else if (this.match(129)) { - node.id = this.parseExprAtom(); + node.id = super.parseStringLiteral(this.state.value); } else { this.unexpected(); } @@ -9354,13 +9910,13 @@ var typescript = (superClass => class extends superClass { tsParseImportEqualsDeclaration(node, isExport) { node.isExport = isExport || false; node.id = this.parseIdentifier(); - this.checkLVal(node.id, "import equals declaration", BIND_LEXICAL); + this.checkIdentifier(node.id, BIND_LEXICAL); this.expect(29); const moduleReference = this.tsParseModuleReference(); if (node.importKind === "type" && moduleReference.type !== "TSExternalModuleReference") { this.raise(TSErrors.ImportAliasHasImportType, { - node: moduleReference + at: moduleReference }); } @@ -9386,7 +9942,7 @@ var typescript = (superClass => class extends superClass { throw this.unexpected(); } - node.expression = this.parseExprAtom(); + node.expression = super.parseExprAtom(); this.expect(11); return this.finishNode(node, "TSExternalModuleReference"); } @@ -9431,35 +9987,48 @@ var typescript = (superClass => class extends superClass { } return this.tsInAmbientContext(() => { - switch (starttype) { - case 68: - nany.declare = true; - return this.parseFunctionStatement(nany, false, true); + if (starttype === 68) { + nany.declare = true; + return super.parseFunctionStatement(nany, false, true); + } - case 80: - nany.declare = true; - return this.parseClass(nany, true, false); + if (starttype === 80) { + nany.declare = true; + return this.parseClass(nany, true, false); + } - case 75: - if (this.match(75) && this.isLookaheadContextual("enum")) { - this.expect(75); - this.expectContextual(122); - return this.tsParseEnumDeclaration(nany, true); - } + if (starttype === 122) { + return this.tsParseEnumDeclaration(nany, { + declare: true + }); + } + + if (starttype === 109) { + return this.tsParseAmbientExternalModuleDeclaration(nany); + } - case 74: - kind = kind || this.state.value; - return this.parseVarStatement(nany, kind); + if (starttype === 75 || starttype === 74) { + if (!this.match(75) || !this.isLookaheadContextual("enum")) { + nany.declare = true; + return this.parseVarStatement(nany, kind || this.state.value, true); + } - case 109: - return this.tsParseAmbientExternalModuleDeclaration(nany); + this.expect(75); + return this.tsParseEnumDeclaration(nany, { + const: true, + declare: true + }); + } - default: - { - if (tokenIsIdentifier(starttype)) { - return this.tsParseDeclaration(nany, this.state.value, true); - } - } + if (starttype === 125) { + const result = this.tsParseInterfaceDeclaration(nany, { + declare: true + }); + if (result) return result; + } + + if (tokenIsIdentifier(starttype)) { + return this.tsParseDeclaration(nany, this.state.value, true); } }); } @@ -9511,21 +10080,6 @@ var typescript = (superClass => class extends superClass { break; - case "enum": - if (next || tokenIsIdentifier(this.state.type)) { - if (next) this.next(); - return this.tsParseEnumDeclaration(node, false); - } - - break; - - case "interface": - if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) { - return this.tsParseInterfaceDeclaration(node); - } - - break; - case "module": if (this.tsCheckLineTerminator(next)) { if (this.match(129)) { @@ -9584,7 +10138,7 @@ var typescript = (superClass => class extends superClass { return undefined; } - return this.parseArrowExpression(res, null, true); + return super.parseArrowExpression(res, null, true); } tsParseTypeArgumentsInExpression() { @@ -9604,7 +10158,7 @@ var typescript = (superClass => class extends superClass { if (node.params.length === 0) { this.raise(TSErrors.EmptyTypeArguments, { - node + at: node }); } @@ -9630,7 +10184,10 @@ var typescript = (superClass => class extends superClass { if (allowModifiers !== undefined) { const modified = {}; - this.tsParseModifiers(modified, ["public", "private", "protected", "override", "readonly"]); + this.tsParseModifiers({ + modified, + allowedModifiers: ["public", "private", "protected", "override", "readonly"] + }); accessibility = modified.accessibility; override = modified.override; readonly = modified.readonly; @@ -9659,7 +10216,7 @@ var typescript = (superClass => class extends superClass { if (elt.type !== "Identifier" && elt.type !== "AssignmentPattern") { this.raise(TSErrors.UnsupportedParameterPropertyKind, { - node: pp + at: pp }); } @@ -9674,6 +10231,10 @@ var typescript = (superClass => class extends superClass { return elt; } + isSimpleParameter(node) { + return node.type === "TSParameterProperty" && super.isSimpleParameter(node.parameter) || super.isSimpleParameter(node); + } + parseFunctionBodyAndFinish(node, type, isMethod = false) { if (this.match(14)) { node.returnType = this.tsParseTypeOrTypePredicateAnnotation(14); @@ -9682,29 +10243,27 @@ var typescript = (superClass => class extends superClass { const bodilessType = type === "FunctionDeclaration" ? "TSDeclareFunction" : type === "ClassMethod" || type === "ClassPrivateMethod" ? "TSDeclareMethod" : undefined; if (bodilessType && !this.match(5) && this.isLineTerminator()) { - this.finishNode(node, bodilessType); - return; + return this.finishNode(node, bodilessType); } if (bodilessType === "TSDeclareFunction" && this.state.isAmbientContext) { this.raise(TSErrors.DeclareFunctionHasImplementation, { - node + at: node }); if (node.declare) { - super.parseFunctionBodyAndFinish(node, bodilessType, isMethod); - return; + return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod); } } - super.parseFunctionBodyAndFinish(node, type, isMethod); + return super.parseFunctionBodyAndFinish(node, type, isMethod); } registerFunctionStatementId(node) { if (!node.body && node.id) { - this.checkLVal(node.id, "function name", BIND_TS_AMBIENT); + this.checkIdentifier(node.id, BIND_TS_AMBIENT); } else { - super.registerFunctionStatementId(...arguments); + super.registerFunctionStatementId(node); } } @@ -9712,7 +10271,7 @@ var typescript = (superClass => class extends superClass { items.forEach(node => { if ((node == null ? void 0 : node.type) === "TSTypeCastExpression") { this.raise(TSErrors.UnexpectedTypeAnnotation, { - node: node.typeAnnotation + at: node.typeAnnotation }); } }); @@ -9723,8 +10282,8 @@ var typescript = (superClass => class extends superClass { return exprList; } - parseArrayLike(...args) { - const node = super.parseArrayLike(...args); + parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) { + const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors); if (node.type === "ArrayExpression") { this.tsCheckForInvalidTypeCasts(node.elements); @@ -9765,60 +10324,76 @@ var typescript = (superClass => class extends superClass { } } - const node = this.startNodeAt(startPos, startLoc); - node.callee = base; const typeArguments = this.tsParseTypeArgumentsInExpression(); + if (!typeArguments) return; - if (typeArguments) { - if (isOptionalCall && !this.match(10)) { - missingParenErrorLoc = this.state.curPosition(); - this.unexpected(); - } + if (isOptionalCall && !this.match(10)) { + missingParenErrorLoc = this.state.curPosition(); + return; + } - if (!noCalls && this.eat(10)) { - node.arguments = this.parseCallExpressionArguments(11, false); - this.tsCheckForInvalidTypeCasts(node.arguments); - node.typeParameters = typeArguments; + if (tokenIsTemplate(this.state.type)) { + const result = super.parseTaggedTemplateExpression(base, startPos, startLoc, state); + result.typeParameters = typeArguments; + return result; + } - if (state.optionalChainMember) { - node.optional = isOptionalCall; - } + if (!noCalls && this.eat(10)) { + const node = this.startNodeAt(startPos, startLoc); + node.callee = base; + node.arguments = this.parseCallExpressionArguments(11, false); + this.tsCheckForInvalidTypeCasts(node.arguments); + node.typeParameters = typeArguments; - return this.finishCallExpression(node, state.optionalChainMember); - } else if (tokenIsTemplate(this.state.type)) { - const result = this.parseTaggedTemplateExpression(base, startPos, startLoc, state); - result.typeParameters = typeArguments; - return result; + if (state.optionalChainMember) { + node.optional = isOptionalCall; } + + return this.finishCallExpression(node, state.optionalChainMember); } - this.unexpected(); + const tokenType = this.state.type; + + if (tokenType === 48 || tokenType === 52 || tokenType !== 10 && tokenCanStartExpression(tokenType) && !this.hasPrecedingLineBreak()) { + return; + } + + const node = this.startNodeAt(startPos, startLoc); + node.expression = base; + node.typeParameters = typeArguments; + return this.finishNode(node, "TSInstantiationExpression"); }); if (missingParenErrorLoc) { this.unexpected(missingParenErrorLoc, 10); } - if (result) return result; + if (result) { + if (result.type === "TSInstantiationExpression" && (this.match(16) || this.match(18) && this.lookaheadCharCode() !== 40)) { + this.raise(TSErrors.InvalidPropertyAccessAfterInstantiationExpression, { + at: this.state.startLoc + }); + } + + return result; + } } return super.parseSubscript(base, startPos, startLoc, noCalls, state); } - parseNewArguments(node) { - if (this.match(47) || this.match(51)) { - const typeParameters = this.tsTryParseAndCatch(() => { - const args = this.tsParseTypeArgumentsInExpression(); - if (!this.match(10)) this.unexpected(); - return args; - }); + parseNewCallee(node) { + var _callee$extra; - if (typeParameters) { - node.typeParameters = typeParameters; - } - } + super.parseNewCallee(node); + const { + callee + } = node; - super.parseNewArguments(node); + if (callee.type === "TSInstantiationExpression" && !((_callee$extra = callee.extra) != null && _callee$extra.parenthesized)) { + node.typeParameters = callee.typeParameters; + node.callee = callee.expression; + } } parseExprOp(left, leftStartPos, leftStartLoc, minPrec) { @@ -9842,7 +10417,11 @@ var typescript = (superClass => class extends superClass { return super.parseExprOp(left, leftStartPos, leftStartLoc, minPrec); } - checkReservedWord(word, startLoc, checkKeywords, isBinding) {} + checkReservedWord(word, startLoc, checkKeywords, isBinding) { + if (!this.state.isAmbientContext) { + super.checkReservedWord(word, startLoc, checkKeywords, isBinding); + } + } checkDuplicateExports() {} @@ -9867,7 +10446,7 @@ var typescript = (superClass => class extends superClass { if (importNode.importKind === "type" && importNode.specifiers.length > 1 && importNode.specifiers[0].type === "ImportDefaultSpecifier") { this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, { - node: importNode + at: importNode }); } @@ -9888,7 +10467,7 @@ var typescript = (superClass => class extends superClass { return this.tsParseImportEqualsDeclaration(node, true); } else if (this.eat(29)) { const assign = node; - assign.expression = this.parseExpression(); + assign.expression = super.parseExpression(); this.semicolon(); return this.finishNode(assign, "TSExportAssignment"); } else if (this.eatContextual(93)) { @@ -9918,32 +10497,62 @@ var typescript = (superClass => class extends superClass { const cls = this.startNode(); this.next(); cls.abstract = true; - this.parseClass(cls, true, true); - return cls; + return this.parseClass(cls, true, true); } if (this.match(125)) { - const interfaceNode = this.startNode(); - this.next(); - const result = this.tsParseInterfaceDeclaration(interfaceNode); + const result = this.tsParseInterfaceDeclaration(this.startNode()); if (result) return result; } return super.parseExportDefaultExpression(); } - parseStatementContent(context, topLevel) { - if (this.state.type === 75) { - const ahead = this.lookahead(); + parseVarStatement(node, kind, allowMissingInitializer = false) { + const { + isAmbientContext + } = this.state; + const declaration = super.parseVarStatement(node, kind, allowMissingInitializer || isAmbientContext); + if (!isAmbientContext) return declaration; - if (ahead.type === 122) { - const node = this.startNode(); - this.next(); - this.expectContextual(122); - return this.tsParseEnumDeclaration(node, true); + for (const { + id, + init + } of declaration.declarations) { + if (!init) continue; + + if (kind !== "const" || !!id.typeAnnotation) { + this.raise(TSErrors.InitializerNotAllowedInAmbientContext, { + at: init + }); + } else if (init.type !== "StringLiteral" && init.type !== "BooleanLiteral" && init.type !== "NumericLiteral" && init.type !== "BigIntLiteral" && (init.type !== "TemplateLiteral" || init.expressions.length > 0) && !isPossiblyLiteralEnum(init)) { + this.raise(TSErrors.ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference, { + at: init + }); } } + return declaration; + } + + parseStatementContent(context, topLevel) { + if (this.match(75) && this.isLookaheadContextual("enum")) { + const node = this.startNode(); + this.expect(75); + return this.tsParseEnumDeclaration(node, { + const: true + }); + } + + if (this.isContextual(122)) { + return this.tsParseEnumDeclaration(this.startNode()); + } + + if (this.isContextual(125)) { + const result = this.tsParseInterfaceDeclaration(this.startNode()); + if (result) return result; + } + return super.parseStatementContent(context, topLevel); } @@ -9967,7 +10576,13 @@ var typescript = (superClass => class extends superClass { parseClassMember(classBody, member, state) { const modifiers = ["declare", "private", "public", "protected", "override", "abstract", "readonly", "static"]; - this.tsParseModifiers(member, modifiers, undefined, undefined, true); + this.tsParseModifiers({ + modified: member, + allowedModifiers: modifiers, + disallowedModifiers: ["in", "out"], + stopOnStartOfClassStaticBlock: true, + errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions + }); const callParseClassMemberWithIsStatic = () => { if (this.tsIsStartOfStaticBlocks()) { @@ -9980,7 +10595,7 @@ var typescript = (superClass => class extends superClass { }); } - this.parseClassStaticBlock(classBody, member); + super.parseClassStaticBlock(classBody, member); } else { this.parseClassMemberWithIsStatic(classBody, member, state, !!member.static); } @@ -10001,25 +10616,26 @@ var typescript = (superClass => class extends superClass { if (member.abstract) { this.raise(TSErrors.IndexSignatureHasAbstract, { - node: member + at: member }); } if (member.accessibility) { this.raise(TSErrors.IndexSignatureHasAccessibility, { - node: member - }, member.accessibility); + at: member, + modifier: member.accessibility + }); } if (member.declare) { this.raise(TSErrors.IndexSignatureHasDeclare, { - node: member + at: member }); } if (member.override) { this.raise(TSErrors.IndexSignatureHasOverride, { - node: member + at: member }); } @@ -10028,14 +10644,14 @@ var typescript = (superClass => class extends superClass { if (!this.state.inAbstractClass && member.abstract) { this.raise(TSErrors.NonAbstractClassHasAbstractMethod, { - node: member + at: member }); } if (member.override) { if (!state.hadSuperClass) { this.raise(TSErrors.OverrideNotInSubClass, { - node: member + at: member }); } } @@ -10049,13 +10665,13 @@ var typescript = (superClass => class extends superClass { if (methodOrProp.readonly && this.match(10)) { this.raise(TSErrors.ClassMethodHasReadonly, { - node: methodOrProp + at: methodOrProp }); } if (methodOrProp.declare && this.match(10)) { this.raise(TSErrors.ClassMethodHasDeclare, { - node: methodOrProp + at: methodOrProp }); } } @@ -10108,6 +10724,10 @@ var typescript = (superClass => class extends superClass { } parseExportDeclaration(node) { + if (!this.state.isAmbientContext && this.isContextual(121)) { + return this.tsInAmbientContext(() => this.parseExportDeclaration(node)); + } + const startPos = this.state.start; const startLoc = this.state.startLoc; const isDeclare = this.eatContextual(121); @@ -10118,21 +10738,15 @@ var typescript = (superClass => class extends superClass { }); } - let declaration; - - if (tokenIsIdentifier(this.state.type)) { - declaration = this.tsTryParseExportDeclaration(); - } - - if (!declaration) { - declaration = super.parseExportDeclaration(node); - } + const isIdentifier = tokenIsIdentifier(this.state.type); + const declaration = isIdentifier && this.tsTryParseExportDeclaration() || super.parseExportDeclaration(node); + if (!declaration) return null; - if (declaration && (declaration.type === "TSInterfaceDeclaration" || declaration.type === "TSTypeAliasDeclaration" || isDeclare)) { + if (declaration.type === "TSInterfaceDeclaration" || declaration.type === "TSTypeAliasDeclaration" || isDeclare) { node.exportKind = "type"; } - if (declaration && isDeclare) { + if (isDeclare) { this.resetStartLocation(declaration, startPos, startLoc); declaration.declare = true; } @@ -10140,13 +10754,13 @@ var typescript = (superClass => class extends superClass { return declaration; } - parseClassId(node, isStatement, optionalId) { + parseClassId(node, isStatement, optionalId, bindingType) { if ((!isStatement || optionalId) && this.isContextual(110)) { return; } super.parseClassId(node, isStatement, optionalId, node.declare ? BIND_TS_AMBIENT : BIND_CLASS); - const typeParameters = this.tsTryParseTypeParameters(); + const typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutModifiers.bind(this)); if (typeParameters) node.typeParameters = typeParameters; } @@ -10162,7 +10776,7 @@ var typescript = (superClass => class extends superClass { parseClassProperty(node) { this.parseClassPropertyAnnotation(node); - if (this.state.isAmbientContext && this.match(29)) { + if (this.state.isAmbientContext && !(node.readonly && !node.typeAnnotation) && this.match(29)) { this.raise(TSErrors.DeclareClassFieldHasInitializer, { at: this.state.startLoc }); @@ -10173,8 +10787,9 @@ var typescript = (superClass => class extends superClass { key } = node; this.raise(TSErrors.AbstractPropertyHasInitializer, { - at: this.state.startLoc - }, key.type === "Identifier" && !node.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`); + at: this.state.startLoc, + propertyName: key.type === "Identifier" && !node.computed ? key.name : `[${this.input.slice(key.start, key.end)}]` + }); } return super.parseClassProperty(node); @@ -10183,14 +10798,15 @@ var typescript = (superClass => class extends superClass { parseClassPrivateProperty(node) { if (node.abstract) { this.raise(TSErrors.PrivateElementHasAbstract, { - node + at: node }); } if (node.accessibility) { this.raise(TSErrors.PrivateElementHasAccessibility, { - node - }, node.accessibility); + at: node, + modifier: node.accessibility + }); } this.parseClassPropertyAnnotation(node); @@ -10202,14 +10818,20 @@ var typescript = (superClass => class extends superClass { if (typeParameters && isConstructor) { this.raise(TSErrors.ConstructorHasTypeParameters, { - node: typeParameters + at: typeParameters }); } - if (method.declare && (method.kind === "get" || method.kind === "set")) { + const { + declare = false, + kind + } = method; + + if (declare && (kind === "get" || kind === "set")) { this.raise(TSErrors.DeclareAccessor, { - node: method - }, method.kind); + at: method, + kind + }); } if (typeParameters) method.typeParameters = typeParameters; @@ -10240,10 +10862,10 @@ var typescript = (superClass => class extends superClass { } } - parseObjPropValue(prop, ...args) { + parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) { const typeParameters = this.tsTryParseTypeParameters(); if (typeParameters) prop.typeParameters = typeParameters; - super.parseObjPropValue(prop, ...args); + return super.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors); } parseFunctionParams(node, allowModifiers) { @@ -10275,7 +10897,7 @@ var typescript = (superClass => class extends superClass { return super.parseAsyncArrowFromCallExpression(node, call); } - parseMaybeAssign(...args) { + parseMaybeAssign(refExpressionErrors, afterLeftParse) { var _jsx, _jsx2, _typeCast, _jsx3, _typeCast2, _jsx4, _typeCast3; let state; @@ -10284,7 +10906,7 @@ var typescript = (superClass => class extends superClass { if (this.hasPlugin("jsx") && (this.match(138) || this.match(47))) { state = this.state.clone(); - jsx = this.tryParse(() => super.parseMaybeAssign(...args), state); + jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state); if (!jsx.error) return jsx.node; const { context @@ -10297,16 +10919,16 @@ var typescript = (superClass => class extends superClass { } if (!((_jsx = jsx) != null && _jsx.error) && !this.match(47)) { - return super.parseMaybeAssign(...args); + return super.parseMaybeAssign(refExpressionErrors, afterLeftParse); } + if (!state || state === this.state) state = this.state.clone(); let typeParameters; - state = state || this.state.clone(); const arrow = this.tryParse(abort => { var _expr$extra, _typeParameters; typeParameters = this.tsParseTypeParameters(); - const expr = super.parseMaybeAssign(...args); + const expr = super.parseMaybeAssign(refExpressionErrors, afterLeftParse); if (expr.type !== "ArrowFunctionExpression" || (_expr$extra = expr.extra) != null && _expr$extra.parenthesized) { abort(); @@ -10327,7 +10949,7 @@ var typescript = (superClass => class extends superClass { if (!jsx) { assert(!this.hasPlugin("jsx")); - typeCast = this.tryParse(() => super.parseMaybeAssign(...args), state); + typeCast = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state); if (!typeCast.error) return typeCast.node; } @@ -10358,16 +10980,16 @@ var typescript = (superClass => class extends superClass { if (node.params.length === 1 && !((_node$extra = node.extra) != null && _node$extra.trailingComma) && this.getPluginOption("typescript", "disallowAmbiguousJSXLike")) { this.raise(TSErrors.ReservedArrowTypeParam, { - node + at: node }); } } - parseMaybeUnary(refExpressionErrors) { + parseMaybeUnary(refExpressionErrors, sawUnary) { if (!this.hasPlugin("jsx") && this.match(47)) { return this.tsParseTypeAssertion(); } else { - return super.parseMaybeUnary(refExpressionErrors); + return super.parseMaybeUnary(refExpressionErrors, sawUnary); } } @@ -10393,7 +11015,7 @@ var typescript = (superClass => class extends superClass { if (this.eat(17)) { if (param.type !== "Identifier" && !this.state.isAmbientContext && !this.state.inType) { this.raise(TSErrors.PatternIsOptional, { - node: param + at: param }); } @@ -10421,23 +11043,33 @@ var typescript = (superClass => class extends superClass { toAssignable(node, isLHS = false) { switch (node.type) { - case "TSTypeCastExpression": - return super.toAssignable(this.typeCastToParameter(node), isLHS); - - case "TSParameterProperty": - return super.toAssignable(node, isLHS); - case "ParenthesizedExpression": - return this.toAssignableParenthesizedExpression(node, isLHS); + this.toAssignableParenthesizedExpression(node, isLHS); + break; case "TSAsExpression": case "TSNonNullExpression": case "TSTypeAssertion": - node.expression = this.toAssignable(node.expression, isLHS); - return node; + if (isLHS) { + this.expressionScope.recordArrowParemeterBindingError(TSErrors.UnexpectedTypeCastInParameter, { + at: node + }); + } else { + this.raise(TSErrors.UnexpectedTypeCastInParameter, { + at: node + }); + } + + this.toAssignable(node.expression, isLHS); + break; + + case "AssignmentExpression": + if (!isLHS && node.left.type === "TSTypeCastExpression") { + node.left = this.typeCastToParameter(node.left); + } default: - return super.toAssignable(node, isLHS); + super.toAssignable(node, isLHS); } } @@ -10447,47 +11079,37 @@ var typescript = (superClass => class extends superClass { case "TSNonNullExpression": case "TSTypeAssertion": case "ParenthesizedExpression": - node.expression = this.toAssignable(node.expression, isLHS); - return node; + this.toAssignable(node.expression, isLHS); + break; default: - return super.toAssignable(node, isLHS); + super.toAssignable(node, isLHS); } } - checkLVal(expr, contextDescription, ...args) { - var _expr$extra2; - - switch (expr.type) { - case "TSTypeCastExpression": - return; - - case "TSParameterProperty": - this.checkLVal(expr.parameter, "parameter property", ...args); - return; - + checkToRestConversion(node, allowPattern) { + switch (node.type) { case "TSAsExpression": case "TSTypeAssertion": - if (!args[0] && contextDescription !== "parenthesized expression" && !((_expr$extra2 = expr.extra) != null && _expr$extra2.parenthesized)) { - this.raise(ErrorMessages.InvalidLhs, { - node: expr - }, contextDescription); - break; - } - - this.checkLVal(expr.expression, "parenthesized expression", ...args); - return; - case "TSNonNullExpression": - this.checkLVal(expr.expression, contextDescription, ...args); - return; + this.checkToRestConversion(node.expression, false); + break; default: - super.checkLVal(expr, contextDescription, ...args); - return; + super.checkToRestConversion(node, allowPattern); } } + isValidLVal(type, isUnparenthesizedInAssign, binding) { + return getOwn$1({ + TSTypeCastExpression: true, + TSParameterProperty: "parameter", + TSNonNullExpression: "expression", + TSAsExpression: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && ["expression", true], + TSTypeAssertion: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && ["expression", true] + }, type) || super.isValidLVal(type, isUnparenthesizedInAssign, binding); + } + parseBindingAtom() { switch (this.state.type) { case 78: @@ -10531,12 +11153,12 @@ var typescript = (superClass => class extends superClass { return this.match(35) || this.match(14) || super.isClassProperty(); } - parseMaybeDefault(...args) { - const node = super.parseMaybeDefault(...args); + parseMaybeDefault(startPos, startLoc, left) { + const node = super.parseMaybeDefault(startPos, startLoc, left); if (node.type === "AssignmentPattern" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) { this.raise(TSErrors.TypeAnnotationAfterAssign, { - node: node.typeAnnotation + at: node.typeAnnotation }); } @@ -10585,31 +11207,16 @@ var typescript = (superClass => class extends superClass { return type; } - toAssignableList(exprList) { + toAssignableList(exprList, trailingCommaLoc, isLHS) { for (let i = 0; i < exprList.length; i++) { const expr = exprList[i]; - if (!expr) continue; - - switch (expr.type) { - case "TSTypeCastExpression": - exprList[i] = this.typeCastToParameter(expr); - break; - case "TSAsExpression": - case "TSTypeAssertion": - if (!this.state.maybeInArrowParameters) { - exprList[i] = this.typeCastToParameter(expr); - } else { - this.raise(TSErrors.UnexpectedTypeCastInParameter, { - node: expr - }); - } - - break; + if ((expr == null ? void 0 : expr.type) === "TSTypeCastExpression") { + exprList[i] = this.typeCastToParameter(expr); } } - return super.toAssignableList(...arguments); + super.toAssignableList(exprList, trailingCommaLoc, isLHS); } typeCastToParameter(node) { @@ -10674,12 +11281,12 @@ var typescript = (superClass => class extends superClass { } } - parseClass(node, ...args) { + parseClass(node, isStatement, optionalId) { const oldInAbstractClass = this.state.inAbstractClass; this.state.inAbstractClass = !!node.abstract; try { - return super.parseClass(node, ...args); + return super.parseClass(node, isStatement, optionalId); } finally { this.state.inAbstractClass = oldInAbstractClass; } @@ -10693,9 +11300,8 @@ var typescript = (superClass => class extends superClass { if (!this.hasFollowingLineBreak()) { node.abstract = true; this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifer, { - node + at: node }); - this.next(); return this.tsParseInterfaceDeclaration(node); } } else { @@ -10703,8 +11309,8 @@ var typescript = (superClass => class extends superClass { } } - parseMethod(...args) { - const method = super.parseMethod(...args); + parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope) { + const method = super.parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope); if (method.abstract) { const hasBody = this.hasPlugin("estree") ? !!method.value.body : !!method.body; @@ -10714,8 +11320,9 @@ var typescript = (superClass => class extends superClass { key } = method; this.raise(TSErrors.AbstractMethodHasImplementation, { - node: method - }, key.type === "Identifier" && !method.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`); + at: method, + methodName: key.type === "Identifier" && !method.computed ? key.name : `[${this.input.slice(key.start, key.end)}]` + }); } } @@ -10757,14 +11364,14 @@ var typescript = (superClass => class extends superClass { return super.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly); } - parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly) { + parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) { if (!importedIsString && isMaybeTypeOnly) { this.parseTypeOnlyImportExportSpecifier(specifier, true, isInTypeOnlyImport); return this.finishNode(specifier, "ImportSpecifier"); } specifier.importKind = "value"; - return super.parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly); + return super.parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, isInTypeOnlyImport ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT); } parseTypeOnlyImportExportSpecifier(node, isImport, isInTypeOnlyImportExport) { @@ -10785,7 +11392,7 @@ var typescript = (superClass => class extends superClass { if (tokenIsKeywordOrIdentifier(this.state.type)) { hasTypeSpecifier = true; leftOfAs = firstAs; - rightOfAs = this.parseIdentifier(); + rightOfAs = isImport ? this.parseIdentifier() : this.parseModuleExportName(); canParseAsKeyword = false; } else { rightOfAs = secondAs; @@ -10793,14 +11400,23 @@ var typescript = (superClass => class extends superClass { } } else if (tokenIsKeywordOrIdentifier(this.state.type)) { canParseAsKeyword = false; - rightOfAs = this.parseIdentifier(); + rightOfAs = isImport ? this.parseIdentifier() : this.parseModuleExportName(); } else { hasTypeSpecifier = true; leftOfAs = firstAs; } } else if (tokenIsKeywordOrIdentifier(this.state.type)) { hasTypeSpecifier = true; - leftOfAs = this.parseIdentifier(); + + if (isImport) { + leftOfAs = this.parseIdentifier(true); + + if (!this.isContextual(93)) { + this.checkReservedWord(leftOfAs.name, leftOfAs.loc.start, true, true); + } + } else { + leftOfAs = this.parseModuleExportName(); + } } if (hasTypeSpecifier && isInTypeOnlyImportExport) { @@ -10823,23 +11439,45 @@ var typescript = (superClass => class extends superClass { } if (isImport) { - this.checkLVal(node[rightOfAsKey], "import specifier", BIND_LEXICAL); + this.checkIdentifier(node[rightOfAsKey], hasTypeSpecifier ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT); } } }); - -const PlaceholderErrors = makeErrorTemplates({ - ClassNameIsRequired: "A class name is required." -}, ErrorCodes.SyntaxError, "placeholders"); -var placeholders = (superClass => class extends superClass { + +function isPossiblyLiteralEnum(expression) { + if (expression.type !== "MemberExpression") return false; + const { + computed, + property + } = expression; + + if (computed && property.type !== "StringLiteral" && (property.type !== "TemplateLiteral" || property.expressions.length > 0)) { + return false; + } + + return isUncomputedMemberExpressionChain(expression.object); +} + +function isUncomputedMemberExpressionChain(expression) { + if (expression.type === "Identifier") return true; + if (expression.type !== "MemberExpression") return false; + if (expression.computed) return false; + return isUncomputedMemberExpressionChain(expression.object); +} + +const PlaceholderErrors = ParseErrorEnum`placeholders`({ + ClassNameIsRequired: "A class name is required.", + UnexpectedSpace: "Unexpected space in placeholder." +}); +var placeholders = (superClass => class PlaceholdersParserMixin extends superClass { parsePlaceholder(expectedNode) { if (this.match(140)) { const node = this.startNode(); this.next(); - this.assertNoSpace("Unexpected space in placeholder."); + this.assertNoSpace(); node.name = super.parseIdentifier(true); - this.assertNoSpace("Unexpected space in placeholder."); + this.assertNoSpace(); this.expect(140); return this.finishPlaceholder(node, expectedNode); } @@ -10856,36 +11494,37 @@ var placeholders = (superClass => class extends superClass { return this.finishOp(140, 2); } - return super.getTokenFromCode(...arguments); + return super.getTokenFromCode(code); } - parseExprAtom() { - return this.parsePlaceholder("Expression") || super.parseExprAtom(...arguments); + parseExprAtom(refExpressionErrors) { + return this.parsePlaceholder("Expression") || super.parseExprAtom(refExpressionErrors); } - parseIdentifier() { - return this.parsePlaceholder("Identifier") || super.parseIdentifier(...arguments); + parseIdentifier(liberal) { + return this.parsePlaceholder("Identifier") || super.parseIdentifier(liberal); } - checkReservedWord(word) { - if (word !== undefined) super.checkReservedWord(...arguments); + checkReservedWord(word, startLoc, checkKeywords, isBinding) { + if (word !== undefined) { + super.checkReservedWord(word, startLoc, checkKeywords, isBinding); + } } parseBindingAtom() { - return this.parsePlaceholder("Pattern") || super.parseBindingAtom(...arguments); + return this.parsePlaceholder("Pattern") || super.parseBindingAtom(); } - checkLVal(expr) { - if (expr.type !== "Placeholder") super.checkLVal(...arguments); + isValidLVal(type, isParenthesized, binding) { + return type === "Placeholder" || super.isValidLVal(type, isParenthesized, binding); } - toAssignable(node) { + toAssignable(node, isLHS) { if (node && node.type === "Placeholder" && node.expectedNode === "Expression") { node.expectedNode = "Pattern"; - return node; + } else { + super.toAssignable(node, isLHS); } - - return super.toAssignable(...arguments); } isLet(context) { @@ -10907,21 +11546,21 @@ var placeholders = (superClass => class extends superClass { return false; } - verifyBreakContinue(node) { + verifyBreakContinue(node, isBreak) { if (node.label && node.label.type === "Placeholder") return; - super.verifyBreakContinue(...arguments); + super.verifyBreakContinue(node, isBreak); } parseExpressionStatement(node, expr) { if (expr.type !== "Placeholder" || expr.extra && expr.extra.parenthesized) { - return super.parseExpressionStatement(...arguments); + return super.parseExpressionStatement(node, expr); } if (this.match(14)) { const stmt = node; stmt.label = this.finishPlaceholder(expr, "Identifier"); this.next(); - stmt.body = this.parseStatement("label"); + stmt.body = super.parseStatement("label"); return this.finishNode(stmt, "LabeledStatement"); } @@ -10930,12 +11569,12 @@ var placeholders = (superClass => class extends superClass { return this.finishPlaceholder(node, "Statement"); } - parseBlock() { - return this.parsePlaceholder("BlockStatement") || super.parseBlock(...arguments); + parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse) { + return this.parsePlaceholder("BlockStatement") || super.parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse); } - parseFunctionId() { - return this.parsePlaceholder("Identifier") || super.parseFunctionId(...arguments); + parseFunctionId(requireId) { + return this.parsePlaceholder("Identifier") || super.parseFunctionId(requireId); } parseClass(node, isStatement, optionalId) { @@ -10961,14 +11600,14 @@ var placeholders = (superClass => class extends superClass { this.parseClassId(node, isStatement, optionalId); } - this.parseClassSuper(node); - node.body = this.parsePlaceholder("ClassBody") || this.parseClassBody(!!node.superClass, oldStrict); + super.parseClassSuper(node); + node.body = this.parsePlaceholder("ClassBody") || super.parseClassBody(!!node.superClass, oldStrict); return this.finishNode(node, type); } parseExport(node) { const placeholder = this.parsePlaceholder("Identifier"); - if (!placeholder) return super.parseExport(...arguments); + if (!placeholder) return super.parseExport(node); if (!this.isContextual(97) && !this.match(12)) { node.specifiers = []; @@ -11003,7 +11642,7 @@ var placeholders = (superClass => class extends superClass { return true; } - return super.maybeParseExportDefaultSpecifier(...arguments); + return super.maybeParseExportDefaultSpecifier(node); } checkExport(node) { @@ -11021,7 +11660,7 @@ var placeholders = (superClass => class extends superClass { parseImport(node) { const placeholder = this.parsePlaceholder("Identifier"); - if (!placeholder) return super.parseImport(...arguments); + if (!placeholder) return super.parseImport(node); node.specifiers = []; if (!this.isContextual(97) && !this.match(12)) { @@ -11032,8 +11671,7 @@ var placeholders = (superClass => class extends superClass { const specifier = this.startNodeAtNode(placeholder); specifier.local = placeholder; - this.finishNode(specifier, "ImportDefaultSpecifier"); - node.specifiers.push(specifier); + node.specifiers.push(this.finishNode(specifier, "ImportDefaultSpecifier")); if (this.eat(12)) { const hasStarImport = this.maybeParseStarImportSpecifier(node); @@ -11047,12 +11685,20 @@ var placeholders = (superClass => class extends superClass { } parseImportSource() { - return this.parsePlaceholder("StringLiteral") || super.parseImportSource(...arguments); + return this.parsePlaceholder("StringLiteral") || super.parseImportSource(); + } + + assertNoSpace() { + if (this.state.start > this.state.lastTokEndLoc.index) { + this.raise(PlaceholderErrors.UnexpectedSpace, { + at: this.state.lastTokEndLoc + }); + } } }); -var v8intrinsic = (superClass => class extends superClass { +var v8intrinsic = (superClass => class V8IntrinsicMixin extends superClass { parseV8Intrinsic() { if (this.match(54)) { const v8IntrinsicStartLoc = this.state.startLoc; @@ -11073,8 +11719,8 @@ var v8intrinsic = (superClass => class extends superClass { } } - parseExprAtom() { - return this.parseV8Intrinsic() || super.parseExprAtom(...arguments); + parseExprAtom(refExpressionErrors) { + return this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors); } }); @@ -11112,7 +11758,7 @@ function getPluginOption(plugins, name, option) { } }); - if (plugin && Array.isArray(plugin)) { + if (plugin && Array.isArray(plugin) && plugin.length > 1) { return plugin[1][option]; } @@ -11129,11 +11775,15 @@ function validatePlugins(plugins) { const decoratorsBeforeExport = getPluginOption(plugins, "decorators", "decoratorsBeforeExport"); - if (decoratorsBeforeExport == null) { - throw new Error("The 'decorators' plugin requires a 'decoratorsBeforeExport' option," + " whose value must be a boolean. If you are migrating from" + " Babylon/Babel 6 or want to use the old decorators proposal, you" + " should use the 'decorators-legacy' plugin instead of 'decorators'."); - } else if (typeof decoratorsBeforeExport !== "boolean") { + if (decoratorsBeforeExport != null && typeof decoratorsBeforeExport !== "boolean") { throw new Error("'decoratorsBeforeExport' must be a boolean."); } + + const allowCallParenthesized = getPluginOption(plugins, "decorators", "allowCallParenthesized"); + + if (allowCallParenthesized != null && typeof allowCallParenthesized !== "boolean") { + throw new Error("'allowCallParenthesized' must be a boolean."); + } } if (hasPlugin(plugins, "flow") && hasPlugin(plugins, "typescript")) { @@ -11186,16 +11836,16 @@ function validatePlugins(plugins) { throw new Error("Cannot combine importAssertions and moduleAttributes plugins."); } - const moduleAttributesVerionPluginOption = getPluginOption(plugins, "moduleAttributes", "version"); + const moduleAttributesVersionPluginOption = getPluginOption(plugins, "moduleAttributes", "version"); - if (moduleAttributesVerionPluginOption !== "may-2020") { + if (moduleAttributesVersionPluginOption !== "may-2020") { throw new Error("The 'moduleAttributes' plugin requires a 'version' option," + " representing the last proposal update. Currently, the" + " only supported value is 'may-2020'."); } } } - if (hasPlugin(plugins, "recordAndTuple") && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, "recordAndTuple", "syntaxType"))) { - throw new Error("'recordAndTuple' requires 'syntaxType' option whose value should be one of: " + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(", ")); + if (hasPlugin(plugins, "recordAndTuple") && getPluginOption(plugins, "recordAndTuple", "syntaxType") != null && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, "recordAndTuple", "syntaxType"))) { + throw new Error("The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: " + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(", ")); } if (hasPlugin(plugins, "asyncDoExpressions") && !hasPlugin(plugins, "doExpressions")) { @@ -11242,6 +11892,8 @@ function getOptions(opts) { return options; } +const getOwn = (object, key) => Object.hasOwnProperty.call(object, key) && object[key]; + const unwrapParenthesizedExpression = node => { return node.type === "ParenthesizedExpression" ? unwrapParenthesizedExpression(node.expression) : node; }; @@ -11257,15 +11909,17 @@ class LValParser extends NodeUtils { if (isLHS) { if (parenthesized.type === "Identifier") { - this.expressionScope.recordParenthesizedIdentifierError(ErrorMessages.InvalidParenthesizedAssignment, node.loc.start); + this.expressionScope.recordArrowParemeterBindingError(Errors.InvalidParenthesizedAssignment, { + at: node + }); } else if (parenthesized.type !== "MemberExpression") { - this.raise(ErrorMessages.InvalidParenthesizedAssignment, { - node + this.raise(Errors.InvalidParenthesizedAssignment, { + at: node }); } } else { - this.raise(ErrorMessages.InvalidParenthesizedAssignment, { - node + this.raise(Errors.InvalidParenthesizedAssignment, { + at: node }); } } @@ -11289,7 +11943,7 @@ class LValParser extends NodeUtils { this.toAssignableObjectExpressionProp(prop, isLast, isLHS); if (isLast && prop.type === "RestElement" && (_node$extra2 = node.extra) != null && _node$extra2.trailingCommaLoc) { - this.raise(ErrorMessages.RestTrailingComma, { + this.raise(Errors.RestTrailingComma, { at: node.extra.trailingCommaLoc }); } @@ -11314,11 +11968,7 @@ class LValParser extends NodeUtils { case "SpreadElement": { - this.checkToRestConversion(node); - node.type = "RestElement"; - const arg = node.argument; - this.toAssignable(arg, isLHS); - break; + throw new Error("Internal @babel/parser error (this is a bug, please report it)." + " SpreadElement should be converted by .toAssignable's caller."); } case "ArrayExpression": @@ -11328,7 +11978,7 @@ class LValParser extends NodeUtils { case "AssignmentExpression": if (node.operator !== "=") { - this.raise(ErrorMessages.MissingEqInAssignment, { + this.raise(Errors.MissingEqInAssignment, { at: node.left.loc.end }); } @@ -11342,67 +11992,57 @@ class LValParser extends NodeUtils { this.toAssignable(parenthesized, isLHS); break; } - - return node; } toAssignableObjectExpressionProp(prop, isLast, isLHS) { if (prop.type === "ObjectMethod") { - this.raise(prop.kind === "get" || prop.kind === "set" ? ErrorMessages.PatternHasAccessor : ErrorMessages.PatternHasMethod, { - node: prop.key - }); - } else if (prop.type === "SpreadElement" && !isLast) { - this.raise(ErrorMessages.RestTrailingComma, { - node: prop + this.raise(prop.kind === "get" || prop.kind === "set" ? Errors.PatternHasAccessor : Errors.PatternHasMethod, { + at: prop.key }); + } else if (prop.type === "SpreadElement") { + prop.type = "RestElement"; + const arg = prop.argument; + this.checkToRestConversion(arg, false); + this.toAssignable(arg, isLHS); + + if (!isLast) { + this.raise(Errors.RestTrailingComma, { + at: prop + }); + } } else { this.toAssignable(prop, isLHS); } } toAssignableList(exprList, trailingCommaLoc, isLHS) { - let end = exprList.length; + const end = exprList.length - 1; - if (end) { - const last = exprList[end - 1]; - - if ((last == null ? void 0 : last.type) === "RestElement") { - --end; - } else if ((last == null ? void 0 : last.type) === "SpreadElement") { - last.type = "RestElement"; - let arg = last.argument; - this.toAssignable(arg, isLHS); - arg = unwrapParenthesizedExpression(arg); - - if (arg.type !== "Identifier" && arg.type !== "MemberExpression" && arg.type !== "ArrayPattern" && arg.type !== "ObjectPattern") { - this.unexpected(arg.start); - } - - if (trailingCommaLoc) { - this.raise(ErrorMessages.RestTrailingComma, { - at: trailingCommaLoc - }); - } - - --end; - } - } - - for (let i = 0; i < end; i++) { + for (let i = 0; i <= end; i++) { const elt = exprList[i]; + if (!elt) continue; - if (elt) { + if (elt.type === "SpreadElement") { + elt.type = "RestElement"; + const arg = elt.argument; + this.checkToRestConversion(arg, true); + this.toAssignable(arg, isLHS); + } else { this.toAssignable(elt, isLHS); + } - if (elt.type === "RestElement") { - this.raise(ErrorMessages.RestTrailingComma, { - node: elt + if (elt.type === "RestElement") { + if (i < end) { + this.raise(Errors.RestTrailingComma, { + at: elt + }); + } else if (trailingCommaLoc) { + this.raise(Errors.RestTrailingComma, { + at: trailingCommaLoc }); } } } - - return exprList; } isAssignable(node, isBinding) { @@ -11460,10 +12100,10 @@ class LValParser extends NodeUtils { } } - parseSpread(refExpressionErrors, refNeedsArrowPos) { + parseSpread(refExpressionErrors) { const node = this.startNode(); this.next(); - node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined, refNeedsArrowPos); + node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined); return this.finishNode(node, "SpreadElement"); } @@ -11517,7 +12157,7 @@ class LValParser extends NodeUtils { const decorators = []; if (this.match(26) && this.hasPlugin("decorators")) { - this.raise(ErrorMessages.UnsupportedParameterDecorator, { + this.raise(Errors.UnsupportedParameterDecorator, { at: this.state.startLoc }); } @@ -11559,8 +12199,7 @@ class LValParser extends NodeUtils { } prop.method = false; - this.parseObjPropValue(prop, startPos, startLoc, false, false, true, false); - return prop; + return this.parseObjPropValue(prop, startPos, startLoc, false, false, true, false); } parseAssignableListItem(allowModifiers, decorators) { @@ -11592,95 +12231,141 @@ class LValParser extends NodeUtils { return this.finishNode(node, "AssignmentPattern"); } - checkLVal(expr, contextDescription, bindingType = BIND_NONE, checkClashes, disallowLetBinding, strictModeChanged = false) { - switch (expr.type) { - case "Identifier": - { - const { - name - } = expr; - - if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(name, this.inModule) : isStrictBindOnlyReservedWord(name))) { - this.raise(bindingType === BIND_NONE ? ErrorMessages.StrictEvalArguments : ErrorMessages.StrictEvalArgumentsBinding, { - node: expr - }, name); - } + isValidLVal(type, isUnparenthesizedInAssign, binding) { + return getOwn({ + AssignmentPattern: "left", + RestElement: "argument", + ObjectProperty: "value", + ParenthesizedExpression: "expression", + ArrayPattern: "elements", + ObjectPattern: "properties" + }, type); + } + + checkLVal(expression, { + in: ancestor, + binding = BIND_NONE, + checkClashes = false, + strictModeChanged = false, + allowingSloppyLetBinding = !(binding & BIND_SCOPE_LEXICAL), + hasParenthesizedAncestor = false + }) { + var _expression$extra; - if (checkClashes) { - if (checkClashes.has(name)) { - this.raise(ErrorMessages.ParamDupe, { - node: expr - }); - } else { - checkClashes.add(name); - } - } + const type = expression.type; + if (this.isObjectMethod(expression)) return; - if (disallowLetBinding && name === "let") { - this.raise(ErrorMessages.LetInLexicalBinding, { - node: expr - }); - } + if (type === "MemberExpression") { + if (binding !== BIND_NONE) { + this.raise(Errors.InvalidPropertyBindingPattern, { + at: expression + }); + } - if (!(bindingType & BIND_NONE)) { - this.scope.declareName(name, bindingType, expr.loc.start); - } + return; + } - break; - } + if (expression.type === "Identifier") { + this.checkIdentifier(expression, binding, strictModeChanged, allowingSloppyLetBinding); + const { + name + } = expression; - case "MemberExpression": - if (bindingType !== BIND_NONE) { - this.raise(ErrorMessages.InvalidPropertyBindingPattern, { - node: expr + if (checkClashes) { + if (checkClashes.has(name)) { + this.raise(Errors.ParamDupe, { + at: expression }); + } else { + checkClashes.add(name); } + } - break; + return; + } - case "ObjectPattern": - for (let prop of expr.properties) { - if (this.isObjectProperty(prop)) prop = prop.value;else if (this.isObjectMethod(prop)) continue; - this.checkLVal(prop, "object destructuring pattern", bindingType, checkClashes, disallowLetBinding); + const validity = this.isValidLVal(expression.type, !(hasParenthesizedAncestor || (_expression$extra = expression.extra) != null && _expression$extra.parenthesized) && ancestor.type === "AssignmentExpression", binding); + if (validity === true) return; + + if (validity === false) { + const ParseErrorClass = binding === BIND_NONE ? Errors.InvalidLhs : Errors.InvalidLhsBinding; + this.raise(ParseErrorClass, { + at: expression, + ancestor: ancestor.type === "UpdateExpression" ? { + type: "UpdateExpression", + prefix: ancestor.prefix + } : { + type: ancestor.type } + }); + return; + } - break; + const [key, isParenthesizedExpression] = Array.isArray(validity) ? validity : [validity, type === "ParenthesizedExpression"]; + const nextAncestor = expression.type === "ArrayPattern" || expression.type === "ObjectPattern" || expression.type === "ParenthesizedExpression" ? expression : ancestor; - case "ArrayPattern": - for (const elem of expr.elements) { - if (elem) { - this.checkLVal(elem, "array destructuring pattern", bindingType, checkClashes, disallowLetBinding); - } - } + for (const child of [].concat(expression[key])) { + if (child) { + this.checkLVal(child, { + in: nextAncestor, + binding, + checkClashes, + allowingSloppyLetBinding, + strictModeChanged, + hasParenthesizedAncestor: isParenthesizedExpression + }); + } + } + } - break; + checkIdentifier(at, bindingType, strictModeChanged = false, allowLetBinding = !(bindingType & BIND_SCOPE_LEXICAL)) { + if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(at.name, this.inModule) : isStrictBindOnlyReservedWord(at.name))) { + if (bindingType === BIND_NONE) { + this.raise(Errors.StrictEvalArguments, { + at, + referenceName: at.name + }); + } else { + this.raise(Errors.StrictEvalArgumentsBinding, { + at, + bindingName: at.name + }); + } + } - case "AssignmentPattern": - this.checkLVal(expr.left, "assignment pattern", bindingType, checkClashes); - break; + if (!allowLetBinding && at.name === "let") { + this.raise(Errors.LetInLexicalBinding, { + at + }); + } - case "RestElement": - this.checkLVal(expr.argument, "rest element", bindingType, checkClashes); - break; + if (!(bindingType & BIND_NONE)) { + this.declareNameFromIdentifier(at, bindingType); + } + } + declareNameFromIdentifier(identifier, binding) { + this.scope.declareName(identifier.name, binding, identifier.loc.start); + } + + checkToRestConversion(node, allowPattern) { + switch (node.type) { case "ParenthesizedExpression": - this.checkLVal(expr.expression, "parenthesized expression", bindingType, checkClashes); + this.checkToRestConversion(node.expression, allowPattern); break; - default: - { - this.raise(bindingType === BIND_NONE ? ErrorMessages.InvalidLhs : ErrorMessages.InvalidLhsBinding, { - node: expr - }, contextDescription); - } - } - } + case "Identifier": + case "MemberExpression": + break; - checkToRestConversion(node) { - if (node.argument.type !== "Identifier" && node.argument.type !== "MemberExpression") { - this.raise(ErrorMessages.InvalidRestAssignmentPattern, { - node: node.argument - }); + case "ArrayExpression": + case "ObjectExpression": + if (allowPattern) break; + + default: + this.raise(Errors.InvalidRestAssignmentPattern, { + at: node + }); } } @@ -11689,7 +12374,7 @@ class LValParser extends NodeUtils { return false; } - this.raise(this.lookaheadCharCode() === close ? ErrorMessages.RestTrailingComma : ErrorMessages.ElementAfterRest, { + this.raise(this.lookaheadCharCode() === close ? Errors.RestTrailingComma : Errors.ElementAfterRest, { at: this.state.startLoc }); return true; @@ -11697,7 +12382,6 @@ class LValParser extends NodeUtils { } -const invalidHackPipeBodies = new Map([["ArrowFunctionExpression", "arrow function"], ["AssignmentExpression", "assignment"], ["ConditionalExpression", "conditional"], ["YieldExpression", "yield"]]); class ExpressionParser extends LValParser { checkProto(prop, isRecord, protoRef, refExpressionErrors) { if (prop.type === "SpreadElement" || this.isObjectMethod(prop) || prop.computed || prop.shorthand) { @@ -11709,8 +12393,8 @@ class ExpressionParser extends LValParser { if (name === "__proto__") { if (isRecord) { - this.raise(ErrorMessages.RecordNoProto, { - node: key + this.raise(Errors.RecordNoProto, { + at: key }); return; } @@ -11721,8 +12405,8 @@ class ExpressionParser extends LValParser { refExpressionErrors.doubleProtoLoc = key.loc.start; } } else { - this.raise(ErrorMessages.DuplicateProto, { - node: key + this.raise(Errors.DuplicateProto, { + at: key }); } } @@ -11842,7 +12526,8 @@ class ExpressionParser extends LValParser { node.operator = operator; if (this.match(29)) { - node.left = this.toAssignable(left, true); + this.toAssignable(left, true); + node.left = left; if (refExpressionErrors.doubleProtoLoc != null && refExpressionErrors.doubleProtoLoc.index >= startPos) { refExpressionErrors.doubleProtoLoc = null; @@ -11860,10 +12545,12 @@ class ExpressionParser extends LValParser { node.left = left; } - this.checkLVal(left, "assignment expression"); this.next(); node.right = this.parseMaybeAssign(); - return this.finishNode(node, "AssignmentExpression"); + this.checkLVal(left, { + in: this.finishNode(node, "AssignmentExpression") + }); + return node; } else if (ownExpressionErrors) { this.checkExpressionErrors(refExpressionErrors, true); } @@ -11919,9 +12606,10 @@ class ExpressionParser extends LValParser { const value = this.getPrivateNameSV(left); if (minPrec >= tokenOperatorPrecedence(58) || !this.prodParam.hasIn || !this.match(58)) { - this.raise(ErrorMessages.PrivateInExpectedIn, { - node: left - }, value); + this.raise(Errors.PrivateInExpectedIn, { + at: left, + identifierName: value + }); } this.classScope.usePrivateName(value, left.loc.start); @@ -11959,23 +12647,23 @@ class ExpressionParser extends LValParser { proposal: "minimal" }])) { if (this.state.type === 96 && this.prodParam.hasAwait) { - throw this.raise(ErrorMessages.UnexpectedAwaitAfterPipelineBody, { + throw this.raise(Errors.UnexpectedAwaitAfterPipelineBody, { at: this.state.startLoc }); } } node.right = this.parseExprOpRightExpr(op, prec); - this.finishNode(node, logical || coalesce ? "LogicalExpression" : "BinaryExpression"); + const finishedNode = this.finishNode(node, logical || coalesce ? "LogicalExpression" : "BinaryExpression"); const nextOp = this.state.type; if (coalesce && (nextOp === 41 || nextOp === 42) || logical && nextOp === 40) { - throw this.raise(ErrorMessages.MixingCoalesceWithLogical, { + throw this.raise(Errors.MixingCoalesceWithLogical, { at: this.state.startLoc }); } - return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec); + return this.parseExprOp(finishedNode, leftStartPos, leftStartLoc, minPrec); } } @@ -11997,9 +12685,9 @@ class ExpressionParser extends LValParser { case "smart": return this.withTopicBindingContext(() => { if (this.prodParam.hasYield && this.isContextual(105)) { - throw this.raise(ErrorMessages.PipeBodyIsTighter, { + throw this.raise(Errors.PipeBodyIsTighter, { at: this.state.startLoc - }, this.state.value); + }); } return this.parseSmartPipelineBodyInStyle(this.parseExprOpBaseRightExpr(op, prec), startPos, startLoc); @@ -12029,15 +12717,17 @@ class ExpressionParser extends LValParser { startLoc } = this.state; const body = this.parseMaybeAssign(); + const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(body.type); - if (invalidHackPipeBodies.has(body.type) && !((_body$extra = body.extra) != null && _body$extra.parenthesized)) { - this.raise(ErrorMessages.PipeUnparenthesizedBody, { - at: startLoc - }, invalidHackPipeBodies.get(body.type)); + if (requiredParentheses && !((_body$extra = body.extra) != null && _body$extra.parenthesized)) { + this.raise(Errors.PipeUnparenthesizedBody, { + at: startLoc, + type: body.type + }); } if (!this.topicReferenceWasUsedInCurrentContext()) { - this.raise(ErrorMessages.PipeTopicUnused, { + this.raise(Errors.PipeTopicUnused, { at: startLoc }); } @@ -12047,8 +12737,8 @@ class ExpressionParser extends LValParser { checkExponentialAfterUnary(node) { if (this.match(57)) { - this.raise(ErrorMessages.UnexpectedTokenUnaryExponentiation, { - node: node.argument + this.raise(Errors.UnexpectedTokenUnaryExponentiation, { + at: node.argument }); } } @@ -12085,18 +12775,21 @@ class ExpressionParser extends LValParser { const arg = node.argument; if (arg.type === "Identifier") { - this.raise(ErrorMessages.StrictDelete, { - node + this.raise(Errors.StrictDelete, { + at: node }); } else if (this.hasPropertyAsPrivateName(arg)) { - this.raise(ErrorMessages.DeletePrivateField, { - node + this.raise(Errors.DeletePrivateField, { + at: node }); } } if (!update) { - if (!sawUnary) this.checkExponentialAfterUnary(node); + if (!sawUnary) { + this.checkExponentialAfterUnary(node); + } + return this.finishNode(node, "UnaryExpression"); } } @@ -12110,7 +12803,9 @@ class ExpressionParser extends LValParser { const startsExpr = this.hasPlugin("v8intrinsic") ? tokenCanStartExpression(type) : tokenCanStartExpression(type) && !this.match(54); if (startsExpr && !this.isAmbiguousAwait()) { - this.raiseOverwrite(startLoc, ErrorMessages.AwaitNotInAsyncContext); + this.raiseOverwrite(Errors.AwaitNotInAsyncContext, { + at: startLoc + }); return this.parseAwait(startPos, startLoc); } } @@ -12120,8 +12815,11 @@ class ExpressionParser extends LValParser { parseUpdate(node, update, refExpressionErrors) { if (update) { - this.checkLVal(node.argument, "prefix operation"); - return this.finishNode(node, "UpdateExpression"); + const updateExpressionNode = node; + this.checkLVal(updateExpressionNode.argument, { + in: this.finishNode(updateExpressionNode, "UpdateExpression") + }); + return node; } const startPos = this.state.start; @@ -12134,9 +12832,10 @@ class ExpressionParser extends LValParser { node.operator = this.state.value; node.prefix = false; node.argument = expr; - this.checkLVal(expr, "postfix operation"); this.next(); - expr = this.finishNode(node, "UpdateExpression"); + this.checkLVal(expr, { + in: expr = this.finishNode(node, "UpdateExpression") + }); } return expr; @@ -12217,7 +12916,7 @@ class ExpressionParser extends LValParser { this.expect(3); } else if (this.match(134)) { if (base.type === "Super") { - this.raise(ErrorMessages.SuperPrivateField, { + this.raise(Errors.SuperPrivateField, { at: startLoc }); } @@ -12250,7 +12949,7 @@ class ExpressionParser extends LValParser { let refExpressionErrors = null; this.state.maybeInArrowParameters = true; this.next(); - let node = this.startNodeAt(startPos, startLoc); + const node = this.startNodeAt(startPos, startLoc); node.callee = base; const { maybeAsyncArrow, @@ -12272,25 +12971,25 @@ class ExpressionParser extends LValParser { node.arguments = this.parseCallExpressionArguments(11, base.type === "Import", base.type !== "Super", node, refExpressionErrors); } - this.finishCallExpression(node, optionalChainMember); + let finishedNode = this.finishCallExpression(node, optionalChainMember); if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) { state.stop = true; this.checkDestructuringPrivate(refExpressionErrors); this.expressionScope.validateAsPattern(); this.expressionScope.exit(); - node = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startPos, startLoc), node); + finishedNode = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startPos, startLoc), finishedNode); } else { if (maybeAsyncArrow) { this.checkExpressionErrors(refExpressionErrors, true); this.expressionScope.exit(); } - this.toReferencedArguments(node); + this.toReferencedArguments(finishedNode); } this.state.maybeInArrowParameters = oldMaybeInArrowParameters; - return node; + return finishedNode; } toReferencedArguments(node, isParenthesizedExpr) { @@ -12303,7 +13002,7 @@ class ExpressionParser extends LValParser { node.quasi = this.parseTemplate(true); if (state.optionalChainMember) { - this.raise(ErrorMessages.OptionalChainingNoTemplate, { + this.raise(Errors.OptionalChainingNoTemplate, { at: startLoc }); } @@ -12326,14 +13025,15 @@ class ExpressionParser extends LValParser { } if (node.arguments.length === 0 || node.arguments.length > 2) { - this.raise(ErrorMessages.ImportCallArity, { - node - }, this.hasPlugin("importAssertions") || this.hasPlugin("moduleAttributes") ? "one or two arguments" : "one argument"); + this.raise(Errors.ImportCallArity, { + at: node, + maxArgumentCount: this.hasPlugin("importAssertions") || this.hasPlugin("moduleAttributes") ? 2 : 1 + }); } else { for (const arg of node.arguments) { if (arg.type === "SpreadElement") { - this.raise(ErrorMessages.ImportCallSpreadArgument, { - node: arg + this.raise(Errors.ImportCallSpreadArgument, { + at: arg }); } } @@ -12357,7 +13057,7 @@ class ExpressionParser extends LValParser { if (this.match(close)) { if (dynamicImport && !this.hasPlugin("importAssertions") && !this.hasPlugin("moduleAttributes")) { - this.raise(ErrorMessages.ImportCallArgumentTrailingComma, { + this.raise(Errors.ImportCallArgumentTrailingComma, { at: this.state.lastTokStartLoc }); } @@ -12425,7 +13125,7 @@ class ExpressionParser extends LValParser { } if (!this.match(10)) { - this.raise(ErrorMessages.UnsupportedImport, { + this.raise(Errors.UnsupportedImport, { at: this.state.lastTokStartLoc }); } @@ -12526,17 +13226,18 @@ class ExpressionParser extends LValParser { if (callee.type === "MemberExpression") { return this.finishNode(node, "BindExpression"); } else { - throw this.raise(ErrorMessages.UnsupportedBind, { - node: callee + throw this.raise(Errors.UnsupportedBind, { + at: callee }); } } case 134: { - this.raise(ErrorMessages.PrivateInExpectedIn, { - at: this.state.startLoc - }, this.state.value); + this.raise(Errors.PrivateInExpectedIn, { + at: this.state.startLoc, + identifierName: this.state.value + }); return this.parsePrivateName(); } @@ -12653,7 +13354,7 @@ class ExpressionParser extends LValParser { const nodeType = pipeProposal === "smart" ? "PipelinePrimaryTopicReference" : "TopicReference"; if (!this.topicReferenceIsAllowedInCurrentContext()) { - this.raise(pipeProposal === "smart" ? ErrorMessages.PrimaryTopicNotAllowed : ErrorMessages.PipeTopicUnbound, { + this.raise(pipeProposal === "smart" ? Errors.PrimaryTopicNotAllowed : Errors.PipeTopicUnbound, { at: startLoc }); } @@ -12661,9 +13362,10 @@ class ExpressionParser extends LValParser { this.registerTopicReference(); return this.finishNode(node, nodeType); } else { - throw this.raise(ErrorMessages.PipeTopicUnconfiguredToken, { - at: startLoc - }, tokenLabelName(tokenType)); + throw this.raise(Errors.PipeTopicUnconfiguredToken, { + at: startLoc, + token: tokenLabelName(tokenType) + }); } } @@ -12680,7 +13382,7 @@ class ExpressionParser extends LValParser { return tokenType === 27; default: - throw this.raise(ErrorMessages.PipeTopicRequiresHackPipes, { + throw this.raise(Errors.PipeTopicRequiresHackPipes, { at: startLoc }); } @@ -12692,14 +13394,13 @@ class ExpressionParser extends LValParser { this.prodParam.exit(); if (this.hasPrecedingLineBreak()) { - this.raise(ErrorMessages.LineTerminatorBeforeArrow, { + this.raise(Errors.LineTerminatorBeforeArrow, { at: this.state.curPosition() }); } this.expect(19); - this.parseArrowExpression(node, params, true); - return node; + return this.parseArrowExpression(node, params, true); } parseDo(node, isAsync) { @@ -12731,18 +13432,18 @@ class ExpressionParser extends LValParser { this.next(); if (this.match(10) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) { - this.raise(ErrorMessages.SuperNotAllowed, { - node + this.raise(Errors.SuperNotAllowed, { + at: node }); } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) { - this.raise(ErrorMessages.UnexpectedSuper, { - node + this.raise(Errors.UnexpectedSuper, { + at: node }); } if (!this.match(10) && !this.match(0) && !this.match(16)) { - this.raise(ErrorMessages.UnsupportedSuper, { - node + this.raise(Errors.UnsupportedSuper, { + at: node }); } @@ -12784,9 +13485,11 @@ class ExpressionParser extends LValParser { node.property = this.parseIdentifier(true); if (node.property.name !== propertyName || containsEsc) { - this.raise(ErrorMessages.UnsupportedMetaProperty, { - node: node.property - }, meta.name, propertyName); + this.raise(Errors.UnsupportedMetaProperty, { + at: node.property, + target: meta.name, + onlyValidPropertyName: propertyName + }); } return this.finishNode(node, "MetaProperty"); @@ -12798,8 +13501,8 @@ class ExpressionParser extends LValParser { if (this.isContextual(100)) { if (!this.inModule) { - this.raise(SourceTypeModuleErrorMessages.ImportMetaOutsideModule, { - node: id + this.raise(Errors.ImportMetaOutsideModule, { + at: id }); } @@ -12936,17 +13639,20 @@ class ExpressionParser extends LValParser { val = exprList[0]; } + return this.wrapParenthesis(startPos, startLoc, val); + } + + wrapParenthesis(startPos, startLoc, expression) { if (!this.options.createParenthesizedExpressions) { - this.addExtra(val, "parenthesized", true); - this.addExtra(val, "parenStart", startPos); - this.takeSurroundingComments(val, startPos, this.state.lastTokEndLoc.index); - return val; + this.addExtra(expression, "parenthesized", true); + this.addExtra(expression, "parenStart", startPos); + this.takeSurroundingComments(expression, startPos, this.state.lastTokEndLoc.index); + return expression; } const parenExpression = this.startNodeAt(startPos, startLoc); - parenExpression.expression = val; - this.finishNode(parenExpression, "ParenthesizedExpression"); - return parenExpression; + parenExpression.expression = expression; + return this.finishNode(parenExpression, "ParenthesizedExpression"); } shouldParseArrow(params) { @@ -12973,8 +13679,8 @@ class ExpressionParser extends LValParser { const metaProp = this.parseMetaProperty(node, meta, "target"); if (!this.scope.inNonArrowFunction && !this.scope.inClass) { - this.raise(ErrorMessages.UnexpectedNewTarget, { - node: metaProp + this.raise(Errors.UnexpectedNewTarget, { + at: metaProp }); } @@ -12985,34 +13691,35 @@ class ExpressionParser extends LValParser { } parseNew(node) { + this.parseNewCallee(node); + + if (this.eat(10)) { + const args = this.parseExprList(11); + this.toReferencedList(args); + node.arguments = args; + } else { + node.arguments = []; + } + + return this.finishNode(node, "NewExpression"); + } + + parseNewCallee(node) { node.callee = this.parseNoCallExpr(); if (node.callee.type === "Import") { - this.raise(ErrorMessages.ImportCallNotNewExpression, { - node: node.callee + this.raise(Errors.ImportCallNotNewExpression, { + at: node.callee }); } else if (this.isOptionalChain(node.callee)) { - this.raise(ErrorMessages.OptionalChainingNoNew, { + this.raise(Errors.OptionalChainingNoNew, { at: this.state.lastTokEndLoc }); } else if (this.eat(18)) { - this.raise(ErrorMessages.OptionalChainingNoNew, { + this.raise(Errors.OptionalChainingNoNew, { at: this.state.startLoc }); } - - this.parseNewArguments(node); - return this.finishNode(node, "NewExpression"); - } - - parseNewArguments(node) { - if (this.eat(10)) { - const args = this.parseExprList(11); - this.toReferencedList(args); - node.arguments = args; - } else { - node.arguments = []; - } } parseTemplateElement(isTagged) { @@ -13027,7 +13734,7 @@ class ExpressionParser extends LValParser { if (value === null) { if (!isTagged) { - this.raise(ErrorMessages.InvalidEscapeSequenceTemplate, { + this.raise(Errors.InvalidEscapeSequenceTemplate, { at: createPositionWithColumnOffset(startLoc, 2) }); } @@ -13042,9 +13749,9 @@ class ExpressionParser extends LValParser { }; elem.tail = isTail; this.next(); - this.finishNode(elem, "TemplateElement"); - this.resetEndLocation(elem, createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset)); - return elem; + const finishedNode = this.finishNode(elem, "TemplateElement"); + this.resetEndLocation(finishedNode, createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset)); + return finishedNode; } parseTemplate(isTagged) { @@ -13101,8 +13808,8 @@ class ExpressionParser extends LValParser { } if (isRecord && !this.isObjectProperty(prop) && prop.type !== "SpreadElement") { - this.raise(ErrorMessages.InvalidRecordProperty, { - node: prop + this.raise(Errors.InvalidRecordProperty, { + at: prop }); } @@ -13140,7 +13847,7 @@ class ExpressionParser extends LValParser { if (this.match(26)) { if (this.hasPlugin("decorators")) { - this.raise(ErrorMessages.UnsupportedPropertyDecorator, { + this.raise(Errors.UnsupportedPropertyDecorator, { at: this.state.startLoc }); } @@ -13195,9 +13902,10 @@ class ExpressionParser extends LValParser { if (this.match(55)) { isGenerator = true; - this.raise(ErrorMessages.AccessorIsGenerator, { - at: this.state.curPosition() - }, keyName); + this.raise(Errors.AccessorIsGenerator, { + at: this.state.curPosition(), + kind: keyName + }); this.next(); } @@ -13205,8 +13913,7 @@ class ExpressionParser extends LValParser { } } - this.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, false, isAccessor, refExpressionErrors); - return prop; + return this.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, false, isAccessor, refExpressionErrors); } getGetterSetterExpectedParamCount(method) { @@ -13224,23 +13931,23 @@ class ExpressionParser extends LValParser { const params = this.getObjectOrClassMethodParams(method); if (params.length !== paramCount) { - this.raise(method.kind === "get" ? ErrorMessages.BadGetterArity : ErrorMessages.BadSetterArity, { - node: method + this.raise(method.kind === "get" ? Errors.BadGetterArity : Errors.BadSetterArity, { + at: method }); } if (method.kind === "set" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === "RestElement") { - this.raise(ErrorMessages.BadSetterRestParameter, { - node: method + this.raise(Errors.BadSetterRestParameter, { + at: method }); } } parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) { if (isAccessor) { - this.parseMethod(prop, isGenerator, false, false, false, "ObjectMethod"); - this.checkGetterSetterParams(prop); - return prop; + const finishedProp = this.parseMethod(prop, isGenerator, false, false, false, "ObjectMethod"); + this.checkGetterSetterParams(finishedProp); + return finishedProp; } if (isAsync || isGenerator || this.match(10)) { @@ -13272,7 +13979,7 @@ class ExpressionParser extends LValParser { refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc; } } else { - this.raise(ErrorMessages.InvalidCoverInitializedName, { + this.raise(Errors.InvalidCoverInitializedName, { at: shorthandAssignLoc }); } @@ -13334,7 +14041,7 @@ class ExpressionParser extends LValParser { refExpressionErrors.privateKeyLoc = privateKeyLoc; } } else { - this.raise(ErrorMessages.UnexpectedPrivateField, { + this.raise(Errors.UnexpectedPrivateField, { at: privateKeyLoc }); } @@ -13371,10 +14078,10 @@ class ExpressionParser extends LValParser { this.scope.enter(SCOPE_FUNCTION | SCOPE_SUPER | (inClassScope ? SCOPE_CLASS : 0) | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0)); this.prodParam.enter(functionFlags(isAsync, node.generator)); this.parseFunctionParams(node, allowModifiers); - this.parseFunctionBodyAndFinish(node, type, true); + const finishedNode = this.parseFunctionBodyAndFinish(node, type, true); this.prodParam.exit(); this.scope.exit(); - return node; + return finishedNode; } parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) { @@ -13417,12 +14124,13 @@ class ExpressionParser extends LValParser { } setArrowFunctionParameters(node, params, trailingCommaLoc) { - node.params = this.toAssignableList(params, trailingCommaLoc, false); + this.toAssignableList(params, trailingCommaLoc, false); + node.params = params; } parseFunctionBodyAndFinish(node, type, isMethod = false) { this.parseFunctionBody(node, false, isMethod); - this.finishNode(node, type); + return this.finishNode(node, type); } parseFunctionBody(node, allowExpression, isMethod = false) { @@ -13441,19 +14149,16 @@ class ExpressionParser extends LValParser { const nonSimple = !this.isSimpleParamList(node.params); if (hasStrictModeDirective && nonSimple) { - const errorOrigin = (node.kind === "method" || node.kind === "constructor") && !!node.key ? { - at: node.key.loc.end - } : { - node - }; - this.raise(ErrorMessages.IllegalLanguageModeDirective, errorOrigin); + this.raise(Errors.IllegalLanguageModeDirective, { + at: (node.kind === "method" || node.kind === "constructor") && !!node.key ? node.key.loc.end : node + }); } const strictModeChanged = !oldStrict && this.state.strict; this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged); if (this.state.strict && node.id) { - this.checkLVal(node.id, "function name", BIND_OUTSIDE, undefined, undefined, strictModeChanged); + this.checkIdentifier(node.id, BIND_OUTSIDE, strictModeChanged); } }); this.prodParam.exit(); @@ -13463,19 +14168,31 @@ class ExpressionParser extends LValParser { this.expressionScope.exit(); } + isSimpleParameter(node) { + return node.type === "Identifier"; + } + isSimpleParamList(params) { for (let i = 0, len = params.length; i < len; i++) { - if (params[i].type !== "Identifier") return false; + if (!this.isSimpleParameter(params[i])) return false; } return true; } checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) { - const checkClashes = new Set(); + const checkClashes = !allowDuplicates && new Set(); + const formalParameters = { + type: "FormalParameters" + }; for (const param of node.params) { - this.checkLVal(param, "function parameter list", BIND_VAR, allowDuplicates ? null : checkClashes, undefined, strictModeChanged); + this.checkLVal(param, { + in: formalParameters, + binding: BIND_VAR, + checkClashes, + strictModeChanged + }); } } @@ -13510,9 +14227,10 @@ class ExpressionParser extends LValParser { if (this.match(12)) { if (!allowEmpty) { - this.raise(ErrorMessages.UnexpectedToken, { - at: this.state.curPosition() - }, ","); + this.raise(Errors.UnexpectedToken, { + at: this.state.curPosition(), + unexpected: "," + }); } elt = null; @@ -13524,7 +14242,7 @@ class ExpressionParser extends LValParser { this.expectPlugin("partialApplication"); if (!allowPlaceholder) { - this.raise(ErrorMessages.UnexpectedArgumentPlaceholder, { + this.raise(Errors.UnexpectedArgumentPlaceholder, { at: this.state.startLoc }); } @@ -13589,30 +14307,32 @@ class ExpressionParser extends LValParser { if (word === "yield") { if (this.prodParam.hasYield) { - this.raise(ErrorMessages.YieldBindingIdentifier, { + this.raise(Errors.YieldBindingIdentifier, { at: startLoc }); return; } } else if (word === "await") { if (this.prodParam.hasAwait) { - this.raise(ErrorMessages.AwaitBindingIdentifier, { + this.raise(Errors.AwaitBindingIdentifier, { at: startLoc }); return; } if (this.scope.inStaticBlock) { - this.raise(ErrorMessages.AwaitBindingIdentifierInStaticBlock, { + this.raise(Errors.AwaitBindingIdentifierInStaticBlock, { at: startLoc }); return; } - this.expressionScope.recordAsyncArrowParametersError(ErrorMessages.AwaitBindingIdentifier, startLoc); + this.expressionScope.recordAsyncArrowParametersError({ + at: startLoc + }); } else if (word === "arguments") { if (this.scope.inClassAndNotInNonArrowFunction) { - this.raise(ErrorMessages.ArgumentsInClass, { + this.raise(Errors.ArgumentsInClass, { at: startLoc }); return; @@ -13620,18 +14340,20 @@ class ExpressionParser extends LValParser { } if (checkKeywords && isKeyword(word)) { - this.raise(ErrorMessages.UnexpectedKeyword, { - at: startLoc - }, word); + this.raise(Errors.UnexpectedKeyword, { + at: startLoc, + keyword: word + }); return; } const reservedTest = !this.state.strict ? isReservedWord : isBinding ? isStrictBindReservedWord : isStrictReservedWord; if (reservedTest(word, this.inModule)) { - this.raise(ErrorMessages.UnexpectedReservedWord, { - at: startLoc - }, word); + this.raise(Errors.UnexpectedReservedWord, { + at: startLoc, + reservedWord: word + }); } } @@ -13647,11 +14369,13 @@ class ExpressionParser extends LValParser { parseAwait(startPos, startLoc) { const node = this.startNodeAt(startPos, startLoc); - this.expressionScope.recordParameterInitializerError(node.loc.start, ErrorMessages.AwaitExpressionFormalParameter); + this.expressionScope.recordParameterInitializerError(Errors.AwaitExpressionFormalParameter, { + at: node + }); if (this.eat(55)) { - this.raise(ErrorMessages.ObsoleteAwaitStar, { - node + this.raise(Errors.ObsoleteAwaitStar, { + at: node }); } @@ -13680,7 +14404,9 @@ class ExpressionParser extends LValParser { parseYield() { const node = this.startNode(); - this.expressionScope.recordParameterInitializerError(node.loc.start, ErrorMessages.YieldInParameter); + this.expressionScope.recordParameterInitializerError(Errors.YieldInParameter, { + at: node + }); this.next(); let delegating = false; let argument = null; @@ -13714,7 +14440,7 @@ class ExpressionParser extends LValParser { proposal: "smart" }])) { if (left.type === "SequenceExpression") { - this.raise(ErrorMessages.PipelineHeadSequenceExpression, { + this.raise(Errors.PipelineHeadSequenceExpression, { at: leftStartLoc }); } @@ -13722,12 +14448,12 @@ class ExpressionParser extends LValParser { } parseSmartPipelineBodyInStyle(childExpr, startPos, startLoc) { - const bodyNode = this.startNodeAt(startPos, startLoc); - if (this.isSimpleReference(childExpr)) { + const bodyNode = this.startNodeAt(startPos, startLoc); bodyNode.callee = childExpr; return this.finishNode(bodyNode, "PipelineBareFunction"); } else { + const bodyNode = this.startNodeAt(startPos, startLoc); this.checkSmartPipeTopicBodyEarlyErrors(startLoc); bodyNode.expression = childExpr; return this.finishNode(bodyNode, "PipelineTopicExpression"); @@ -13749,13 +14475,13 @@ class ExpressionParser extends LValParser { checkSmartPipeTopicBodyEarlyErrors(startLoc) { if (this.match(19)) { - throw this.raise(ErrorMessages.PipelineBodyNoArrow, { + throw this.raise(Errors.PipelineBodyNoArrow, { at: this.state.startLoc }); } if (!this.topicReferenceWasUsedInCurrentContext()) { - this.raise(ErrorMessages.PipelineTopicUnused, { + this.raise(Errors.PipelineTopicUnused, { at: startLoc }); } @@ -14032,10 +14758,11 @@ class StatementParser extends ExpressionParser { this.parseBlockBody(program, true, true, end); if (this.inModule && !this.options.allowUndeclaredExports && this.scope.undefinedExports.size > 0) { - for (const [name, loc] of Array.from(this.scope.undefinedExports)) { - this.raise(ErrorMessages.ModuleExportUndefined, { - at: loc - }, name); + for (const [localName, at] of Array.from(this.scope.undefinedExports)) { + this.raise(Errors.ModuleExportUndefined, { + at, + localName + }); } } @@ -14144,11 +14871,11 @@ class StatementParser extends ExpressionParser { if (context) { if (this.state.strict) { - this.raise(ErrorMessages.StrictFunction, { + this.raise(Errors.StrictFunction, { at: this.state.startLoc }); } else if (context !== "if" && context !== "label") { - this.raise(ErrorMessages.SloppyFunction, { + this.raise(Errors.SloppyFunction, { at: this.state.startLoc }); } @@ -14180,7 +14907,7 @@ class StatementParser extends ExpressionParser { kind = kind || this.state.value; if (context && kind !== "var") { - this.raise(ErrorMessages.UnexpectedLexicalDeclaration, { + this.raise(Errors.UnexpectedLexicalDeclaration, { at: this.state.startLoc }); } @@ -14211,7 +14938,7 @@ class StatementParser extends ExpressionParser { case 82: { if (!this.options.allowImportExportEverywhere && !topLevel) { - this.raise(ErrorMessages.UnexpectedImportExport, { + this.raise(Errors.UnexpectedImportExport, { at: this.state.startLoc }); } @@ -14233,7 +14960,7 @@ class StatementParser extends ExpressionParser { } } - this.assertModuleNodeAllowed(node); + this.assertModuleNodeAllowed(result); return result; } @@ -14241,7 +14968,7 @@ class StatementParser extends ExpressionParser { { if (this.isAsyncFunction()) { if (context) { - this.raise(ErrorMessages.AsyncFunctionInSingleStatementContext, { + this.raise(Errors.AsyncFunctionInSingleStatementContext, { at: this.state.startLoc }); } @@ -14264,8 +14991,8 @@ class StatementParser extends ExpressionParser { assertModuleNodeAllowed(node) { if (!this.options.allowImportExportEverywhere && !this.inModule) { - this.raise(SourceTypeModuleErrorMessages.ImportOutsideModule, { - node + this.raise(Errors.ImportOutsideModule, { + at: node }); } } @@ -14298,19 +15025,19 @@ class StatementParser extends ExpressionParser { } if (this.hasPlugin("decorators") && !this.getPluginOption("decorators", "decoratorsBeforeExport")) { - this.raise(ErrorMessages.DecoratorExportClass, { + this.raise(Errors.DecoratorExportClass, { at: this.state.startLoc }); } } else if (!this.canHaveLeadingDecorator()) { - throw this.raise(ErrorMessages.UnexpectedLeadingDecorator, { + throw this.raise(Errors.UnexpectedLeadingDecorator, { at: this.state.startLoc }); } } parseDecorator() { - this.expectOnePlugin(["decorators-legacy", "decorators"]); + this.expectOnePlugin(["decorators", "decorators-legacy"]); const node = this.startNode(); this.next(); @@ -14320,22 +15047,42 @@ class StatementParser extends ExpressionParser { const startLoc = this.state.startLoc; let expr; - if (this.eat(10)) { + if (this.match(10)) { + const startPos = this.state.start; + const startLoc = this.state.startLoc; + this.next(); expr = this.parseExpression(); this.expect(11); + expr = this.wrapParenthesis(startPos, startLoc, expr); + const paramsStartLoc = this.state.startLoc; + node.expression = this.parseMaybeDecoratorArguments(expr); + + if (this.getPluginOption("decorators", "allowCallParenthesized") === false && node.expression !== expr) { + this.raise(Errors.DecoratorArgumentsOutsideParentheses, { + at: paramsStartLoc + }); + } } else { expr = this.parseIdentifier(false); while (this.eat(16)) { const node = this.startNodeAt(startPos, startLoc); node.object = expr; - node.property = this.parseIdentifier(true); + + if (this.match(134)) { + this.classScope.usePrivateName(this.state.value, this.state.startLoc); + node.property = this.parsePrivateName(); + } else { + node.property = this.parseIdentifier(true); + } + node.computed = false; expr = this.finishNode(node, "MemberExpression"); } + + node.expression = this.parseMaybeDecoratorArguments(expr); } - node.expression = this.parseMaybeDecoratorArguments(expr); this.state.decoratorStack.pop(); } else { node.expression = this.parseExprSubscripts(); @@ -14383,9 +15130,11 @@ class StatementParser extends ExpressionParser { } if (i === this.state.labels.length) { - this.raise(ErrorMessages.IllegalBreakContinue, { - node - }, isBreak ? "break" : "continue"); + const type = isBreak ? "BreakStatement" : "ContinueStatement"; + this.raise(Errors.IllegalBreakContinue, { + at: node, + type + }); } } @@ -14437,11 +15186,11 @@ class StatementParser extends ExpressionParser { const isLet = startsWithLet && this.isLetKeyword(); if (this.match(74) || this.match(75) || isLet) { - const init = this.startNode(); + const initNode = this.startNode(); const kind = isLet ? "let" : this.state.value; this.next(); - this.parseVar(init, true, kind); - this.finishNode(init, "VariableDeclaration"); + this.parseVar(initNode, true, kind); + const init = this.finishNode(initNode, "VariableDeclaration"); if ((this.match(58) || this.isContextual(101)) && init.declarations.length === 1) { return this.parseForIn(node, init, awaitAt); @@ -14461,14 +15210,14 @@ class StatementParser extends ExpressionParser { if (isForOf) { if (startsWithLet) { - this.raise(ErrorMessages.ForOfLet, { - node: init + this.raise(Errors.ForOfLet, { + at: init }); } if (awaitAt === null && startsWithAsync && init.type === "Identifier") { - this.raise(ErrorMessages.ForOfAsync, { - node: init + this.raise(Errors.ForOfAsync, { + at: init }); } } @@ -14476,8 +15225,12 @@ class StatementParser extends ExpressionParser { if (isForOf || this.match(58)) { this.checkDestructuringPrivate(refExpressionErrors); this.toAssignable(init, true); - const description = isForOf ? "for-of statement" : "for-in statement"; - this.checkLVal(init, description); + const type = isForOf ? "ForOfStatement" : "ForInStatement"; + this.checkLVal(init, { + in: { + type + } + }); return this.parseForIn(node, init, awaitAt); } else { this.checkExpressionErrors(refExpressionErrors, true); @@ -14505,7 +15258,7 @@ class StatementParser extends ExpressionParser { parseReturnStatement(node) { if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) { - this.raise(ErrorMessages.IllegalReturn, { + this.raise(Errors.IllegalReturn, { at: this.state.startLoc }); } @@ -14543,7 +15296,7 @@ class StatementParser extends ExpressionParser { cur.test = this.parseExpression(); } else { if (sawDefault) { - this.raise(ErrorMessages.MultipleDefaultsInSwitch, { + this.raise(Errors.MultipleDefaultsInSwitch, { at: this.state.lastTokStartLoc }); } @@ -14573,7 +15326,7 @@ class StatementParser extends ExpressionParser { this.next(); if (this.hasPrecedingLineBreak()) { - this.raise(ErrorMessages.NewlineAfterThrow, { + this.raise(Errors.NewlineAfterThrow, { at: this.state.lastTokEndLoc }); } @@ -14587,7 +15340,13 @@ class StatementParser extends ExpressionParser { const param = this.parseBindingAtom(); const simple = param.type === "Identifier"; this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0); - this.checkLVal(param, "catch clause", BIND_LEXICAL); + this.checkLVal(param, { + in: { + type: "CatchClause" + }, + binding: BIND_LEXICAL, + allowingSloppyLetBinding: true + }); return param; } @@ -14617,17 +15376,17 @@ class StatementParser extends ExpressionParser { node.finalizer = this.eat(67) ? this.parseBlock() : null; if (!node.handler && !node.finalizer) { - this.raise(ErrorMessages.NoCatchOrFinally, { - node + this.raise(Errors.NoCatchOrFinally, { + at: node }); } return this.finishNode(node, "TryStatement"); } - parseVarStatement(node, kind) { + parseVarStatement(node, kind, allowMissingInitializer = false) { this.next(); - this.parseVar(node, false, kind); + this.parseVar(node, false, kind, allowMissingInitializer); this.semicolon(); return this.finishNode(node, "VariableDeclaration"); } @@ -14643,7 +15402,7 @@ class StatementParser extends ExpressionParser { parseWithStatement(node) { if (this.state.strict) { - this.raise(ErrorMessages.StrictWith, { + this.raise(Errors.StrictWith, { at: this.state.startLoc }); } @@ -14662,9 +15421,10 @@ class StatementParser extends ExpressionParser { parseLabeledStatement(node, maybeName, expr, context) { for (const label of this.state.labels) { if (label.name === maybeName) { - this.raise(ErrorMessages.LabelRedeclaration, { - node: expr - }, maybeName); + this.raise(Errors.LabelRedeclaration, { + at: expr, + labelName: maybeName + }); } } @@ -14793,15 +15553,19 @@ class StatementParser extends ExpressionParser { } if (init.type === "VariableDeclaration" && init.declarations[0].init != null && (!isForIn || this.state.strict || init.kind !== "var" || init.declarations[0].id.type !== "Identifier")) { - this.raise(ErrorMessages.ForInOfLoopInitializer, { - node: init - }, isForIn ? "for-in" : "for-of"); + this.raise(Errors.ForInOfLoopInitializer, { + at: init, + type: isForIn ? "ForInStatement" : "ForOfStatement" + }); } if (init.type === "AssignmentPattern") { - this.raise(ErrorMessages.InvalidLhs, { - node: init - }, "for-loop"); + this.raise(Errors.InvalidLhs, { + at: init, + ancestor: { + type: "ForStatement" + } + }); } node.left = init; @@ -14813,31 +15577,27 @@ class StatementParser extends ExpressionParser { return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement"); } - parseVar(node, isFor, kind) { + parseVar(node, isFor, kind, allowMissingInitializer = false) { const declarations = node.declarations = []; - const isTypescript = this.hasPlugin("typescript"); node.kind = kind; for (;;) { const decl = this.startNode(); this.parseVarId(decl, kind); + decl.init = !this.eat(29) ? null : isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn(); - if (this.eat(29)) { - decl.init = isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn(); - } else { - if (kind === "const" && !(this.match(58) || this.isContextual(101))) { - if (!isTypescript) { - this.raise(ErrorMessages.DeclarationMissingInitializer, { - at: this.state.lastTokEndLoc - }, "Const declarations"); - } - } else if (decl.id.type !== "Identifier" && !(isFor && (this.match(58) || this.isContextual(101)))) { - this.raise(ErrorMessages.DeclarationMissingInitializer, { - at: this.state.lastTokEndLoc - }, "Complex binding patterns"); + if (decl.init === null && !allowMissingInitializer) { + if (decl.id.type !== "Identifier" && !(isFor && (this.match(58) || this.isContextual(101)))) { + this.raise(Errors.DeclarationMissingInitializer, { + at: this.state.lastTokEndLoc, + kind: "destructuring" + }); + } else if (kind === "const" && !(this.match(58) || this.isContextual(101))) { + this.raise(Errors.DeclarationMissingInitializer, { + at: this.state.lastTokEndLoc, + kind: "const" + }); } - - decl.init = null; } declarations.push(this.finishNode(decl, "VariableDeclarator")); @@ -14849,7 +15609,12 @@ class StatementParser extends ExpressionParser { parseVarId(decl, kind) { decl.id = this.parseBindingAtom(); - this.checkLVal(decl.id, "variable declaration", kind === "var" ? BIND_VAR : BIND_LEXICAL, undefined, kind !== "var"); + this.checkLVal(decl.id, { + in: { + type: "VariableDeclarator" + }, + binding: kind === "var" ? BIND_VAR : BIND_LEXICAL + }); } parseFunction(node, statement = FUNC_NO_FLAGS, isAsync = false) { @@ -14859,7 +15624,7 @@ class StatementParser extends ExpressionParser { this.initFunction(node, isAsync); if (this.match(55) && isHangingStatement) { - this.raise(ErrorMessages.GeneratorInSingleStatementContext, { + this.raise(Errors.GeneratorInSingleStatementContext, { at: this.state.startLoc }); } @@ -14947,7 +15712,7 @@ class StatementParser extends ExpressionParser { while (!this.match(8)) { if (this.eat(13)) { if (decorators.length > 0) { - throw this.raise(ErrorMessages.DecoratorSemicolon, { + throw this.raise(Errors.DecoratorSemicolon, { at: this.state.lastTokEndLoc }); } @@ -14971,8 +15736,8 @@ class StatementParser extends ExpressionParser { this.parseClassMember(classBody, member, state); if (member.kind === "constructor" && member.decorators && member.decorators.length > 0) { - this.raise(ErrorMessages.DecoratorConstructor, { - node: member + this.raise(Errors.DecoratorConstructor, { + at: member }); } } @@ -14981,7 +15746,7 @@ class StatementParser extends ExpressionParser { this.next(); if (decorators.length) { - throw this.raise(ErrorMessages.TrailingDecorator, { + throw this.raise(Errors.TrailingDecorator, { at: this.state.startLoc }); } @@ -15053,8 +15818,8 @@ class StatementParser extends ExpressionParser { } if (this.isNonstaticConstructor(publicMethod)) { - this.raise(ErrorMessages.ConstructorIsGenerator, { - node: publicMethod.key + this.raise(Errors.ConstructorIsGenerator, { + at: publicMethod.key }); } @@ -15083,14 +15848,14 @@ class StatementParser extends ExpressionParser { publicMethod.kind = "constructor"; if (state.hadConstructor && !this.hasPlugin("typescript")) { - this.raise(ErrorMessages.DuplicateConstructor, { - node: key + this.raise(Errors.DuplicateConstructor, { + at: key }); } if (isConstructor && this.hasPlugin("typescript") && member.override) { - this.raise(ErrorMessages.OverrideOnConstructor, { - node: key + this.raise(Errors.OverrideOnConstructor, { + at: key }); } @@ -15122,8 +15887,8 @@ class StatementParser extends ExpressionParser { this.pushClassPrivateMethod(classBody, privateMethod, isGenerator, true); } else { if (this.isNonstaticConstructor(publicMethod)) { - this.raise(ErrorMessages.ConstructorIsAsync, { - node: publicMethod.key + this.raise(Errors.ConstructorIsAsync, { + at: publicMethod.key }); } @@ -15139,8 +15904,8 @@ class StatementParser extends ExpressionParser { this.pushClassPrivateMethod(classBody, privateMethod, false, false); } else { if (this.isNonstaticConstructor(publicMethod)) { - this.raise(ErrorMessages.ConstructorIsAccessor, { - node: publicMethod.key + this.raise(Errors.ConstructorIsAccessor, { + at: publicMethod.key }); } @@ -15172,14 +15937,14 @@ class StatementParser extends ExpressionParser { } = this.state; if ((type === 128 || type === 129) && member.static && value === "prototype") { - this.raise(ErrorMessages.StaticPrototype, { + this.raise(Errors.StaticPrototype, { at: this.state.startLoc }); } if (type === 134) { if (value === "constructor") { - this.raise(ErrorMessages.ConstructorClassPrivateField, { + this.raise(Errors.ConstructorClassPrivateField, { at: this.state.startLoc }); } @@ -15207,16 +15972,16 @@ class StatementParser extends ExpressionParser { classBody.body.push(this.finishNode(member, "StaticBlock")); if ((_member$decorators = member.decorators) != null && _member$decorators.length) { - this.raise(ErrorMessages.DecoratorStaticBlock, { - node: member + this.raise(Errors.DecoratorStaticBlock, { + at: member }); } } pushClassProperty(classBody, prop) { if (!prop.computed && (prop.key.name === "constructor" || prop.key.value === "constructor")) { - this.raise(ErrorMessages.ConstructorClassField, { - node: prop.key + this.raise(Errors.ConstructorClassField, { + at: prop.key }); } @@ -15234,8 +15999,8 @@ class StatementParser extends ExpressionParser { const key = prop.key; if (key.name === "constructor" || key.value === "constructor") { - this.raise(ErrorMessages.ConstructorClassField, { - node: key + this.raise(Errors.ConstructorClassField, { + at: key }); } } @@ -15298,13 +16063,13 @@ class StatementParser extends ExpressionParser { node.id = this.parseIdentifier(); if (isStatement) { - this.checkLVal(node.id, "class name", bindingType); + this.declareNameFromIdentifier(node.id, bindingType); } } else { if (optionalId || !isStatement) { node.id = null; } else { - throw this.raise(ErrorMessages.MissingClassName, { + throw this.raise(Errors.MissingClassName, { at: this.state.startLoc }); } @@ -15447,7 +16212,7 @@ class StatementParser extends ExpressionParser { if (this.match(26)) { if (this.hasPlugin("decorators") && this.getPluginOption("decorators", "decoratorsBeforeExport")) { - this.raise(ErrorMessages.DecoratorBeforeExport, { + this.raise(Errors.DecoratorBeforeExport, { at: this.state.startLoc }); } @@ -15457,7 +16222,7 @@ class StatementParser extends ExpressionParser { } if (this.match(75) || this.match(74) || this.isLet()) { - throw this.raise(ErrorMessages.UnsupportedDefaultExport, { + throw this.raise(Errors.UnsupportedDefaultExport, { at: this.state.startLoc }); } @@ -15518,6 +16283,7 @@ class StatementParser extends ExpressionParser { if (assertions) { node.assertions = assertions; + this.checkJSONModuleImport(node); } } else if (expect) { this.unexpected(); @@ -15536,7 +16302,7 @@ class StatementParser extends ExpressionParser { if (this.hasPlugin("decorators")) { if (this.getPluginOption("decorators", "decoratorsBeforeExport")) { - throw this.raise(ErrorMessages.DecoratorBeforeExport, { + throw this.raise(Errors.DecoratorBeforeExport, { at: this.state.startLoc }); } @@ -15559,8 +16325,8 @@ class StatementParser extends ExpressionParser { const declaration = node.declaration; if (declaration.type === "Identifier" && declaration.name === "from" && declaration.end - declaration.start === 4 && !((_declaration$extra = declaration.extra) != null && _declaration$extra.parenthesized)) { - this.raise(ErrorMessages.ExportDefaultFromAsIdentifier, { - node: declaration + this.raise(Errors.ExportDefaultFromAsIdentifier, { + at: declaration }); } } @@ -15569,8 +16335,8 @@ class StatementParser extends ExpressionParser { const { exported } = specifier; - const exportedName = exported.type === "Identifier" ? exported.name : exported.value; - this.checkDuplicateExports(specifier, exportedName); + const exportName = exported.type === "Identifier" ? exported.name : exported.value; + this.checkDuplicateExports(specifier, exportName); if (!isFrom && specifier.local) { const { @@ -15578,9 +16344,11 @@ class StatementParser extends ExpressionParser { } = specifier; if (local.type !== "Identifier") { - this.raise(ErrorMessages.ExportBindingIsString, { - node: specifier - }, local.value, exportedName); + this.raise(Errors.ExportBindingIsString, { + at: specifier, + localName: local.value, + exportName + }); } else { this.checkReservedWord(local.name, local.loc.start, true, false); this.scope.checkLocalExport(local); @@ -15603,8 +16371,8 @@ class StatementParser extends ExpressionParser { const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1]; if (currentContextDecorators.length) { - throw this.raise(ErrorMessages.UnsupportedDecoratorExport, { - node + throw this.raise(Errors.UnsupportedDecoratorExport, { + at: node }); } } @@ -15631,14 +16399,21 @@ class StatementParser extends ExpressionParser { } } - checkDuplicateExports(node, name) { - if (this.exportedIdentifiers.has(name)) { - this.raise(name === "default" ? ErrorMessages.DuplicateDefaultExport : ErrorMessages.DuplicateExport, { - node - }, name); + checkDuplicateExports(node, exportName) { + if (this.exportedIdentifiers.has(exportName)) { + if (exportName === "default") { + this.raise(Errors.DuplicateDefaultExport, { + at: node + }); + } else { + this.raise(Errors.DuplicateExport, { + at: node, + exportName + }); + } } - this.exportedIdentifiers.add(name); + this.exportedIdentifiers.add(exportName); } parseExportSpecifiers(isInTypeExport) { @@ -15682,9 +16457,10 @@ class StatementParser extends ExpressionParser { const surrogate = result.value.match(loneSurrogate); if (surrogate) { - this.raise(ErrorMessages.ModuleExportNameHasLoneSurrogate, { - node: result - }, surrogate[0].charCodeAt(0).toString(16)); + this.raise(Errors.ModuleExportNameHasLoneSurrogate, { + at: result, + surrogateCharCode: surrogate[0].charCodeAt(0) + }); } return result; @@ -15693,6 +16469,49 @@ class StatementParser extends ExpressionParser { return this.parseIdentifier(true); } + isJSONModuleImport(node) { + if (node.assertions != null) { + return node.assertions.some(({ + key, + value + }) => { + return value.value === "json" && (key.type === "Identifier" ? key.name === "type" : key.value === "type"); + }); + } + + return false; + } + + checkJSONModuleImport(node) { + if (this.isJSONModuleImport(node) && node.type !== "ExportAllDeclaration") { + const { + specifiers + } = node; + + if (specifiers != null) { + const nonDefaultNamedSpecifier = specifiers.find(specifier => { + let imported; + + if (specifier.type === "ExportSpecifier") { + imported = specifier.local; + } else if (specifier.type === "ImportSpecifier") { + imported = specifier.imported; + } + + if (imported !== undefined) { + return imported.type === "Identifier" ? imported.name !== "default" : imported.value !== "default"; + } + }); + + if (nonDefaultNamedSpecifier !== undefined) { + this.raise(Errors.ImportJSONBindingNotDefault, { + at: nonDefaultNamedSpecifier.loc.start + }); + } + } + } + } + parseImport(node) { node.specifiers = []; @@ -15717,6 +16536,7 @@ class StatementParser extends ExpressionParser { } } + this.checkJSONModuleImport(node); this.semicolon(); return this.finishNode(node, "ImportDeclaration"); } @@ -15730,10 +16550,17 @@ class StatementParser extends ExpressionParser { return tokenIsIdentifier(this.state.type); } - parseImportSpecifierLocal(node, specifier, type, contextDescription) { + parseImportSpecifierLocal(node, specifier, type) { specifier.local = this.parseIdentifier(); - this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL); - node.specifiers.push(this.finishNode(specifier, type)); + node.specifiers.push(this.finishImportSpecifier(specifier, type)); + } + + finishImportSpecifier(specifier, type, bindingType = BIND_LEXICAL) { + this.checkLVal(specifier.local, { + in: specifier, + binding: bindingType + }); + return this.finishNode(specifier, type); } parseAssertEntries() { @@ -15749,9 +16576,10 @@ class StatementParser extends ExpressionParser { const keyName = this.state.value; if (attrNames.has(keyName)) { - this.raise(ErrorMessages.ModuleAttributesWithDuplicateKeys, { - at: this.state.startLoc - }, keyName); + this.raise(Errors.ModuleAttributesWithDuplicateKeys, { + at: this.state.startLoc, + key: keyName + }); } attrNames.add(keyName); @@ -15765,14 +16593,13 @@ class StatementParser extends ExpressionParser { this.expect(14); if (!this.match(129)) { - throw this.raise(ErrorMessages.ModuleAttributeInvalidValue, { + throw this.raise(Errors.ModuleAttributeInvalidValue, { at: this.state.startLoc }); } node.value = this.parseStringLiteral(this.state.value); - this.finishNode(node, "ImportAttribute"); - attrs.push(node); + attrs.push(this.finishNode(node, "ImportAttribute")); } while (this.eat(12)); return attrs; @@ -15795,22 +16622,23 @@ class StatementParser extends ExpressionParser { node.key = this.parseIdentifier(true); if (node.key.name !== "type") { - this.raise(ErrorMessages.ModuleAttributeDifferentFromType, { - node: node.key - }, node.key.name); + this.raise(Errors.ModuleAttributeDifferentFromType, { + at: node.key + }); } if (attributes.has(node.key.name)) { - this.raise(ErrorMessages.ModuleAttributesWithDuplicateKeys, { - node: node.key - }, node.key.name); + this.raise(Errors.ModuleAttributesWithDuplicateKeys, { + at: node.key, + key: node.key.name + }); } attributes.add(node.key.name); this.expect(14); if (!this.match(129)) { - throw this.raise(ErrorMessages.ModuleAttributeInvalidValue, { + throw this.raise(Errors.ModuleAttributeInvalidValue, { at: this.state.startLoc }); } @@ -15840,7 +16668,7 @@ class StatementParser extends ExpressionParser { maybeParseDefaultImportSpecifier(node) { if (this.shouldParseDefaultImport(node)) { - this.parseImportSpecifierLocal(node, this.startNode(), "ImportDefaultSpecifier", "default import specifier"); + this.parseImportSpecifierLocal(node, this.startNode(), "ImportDefaultSpecifier"); return true; } @@ -15852,7 +16680,7 @@ class StatementParser extends ExpressionParser { const specifier = this.startNode(); this.next(); this.expectContextual(93); - this.parseImportSpecifierLocal(node, specifier, "ImportNamespaceSpecifier", "import namespace specifier"); + this.parseImportSpecifierLocal(node, specifier, "ImportNamespaceSpecifier"); return true; } @@ -15868,7 +16696,7 @@ class StatementParser extends ExpressionParser { first = false; } else { if (this.eat(14)) { - throw this.raise(ErrorMessages.DestructureNamedImport, { + throw this.raise(Errors.DestructureNamedImport, { at: this.state.startLoc }); } @@ -15881,12 +16709,12 @@ class StatementParser extends ExpressionParser { const importedIsString = this.match(129); const isMaybeTypeOnly = this.isContextual(126); specifier.imported = this.parseModuleExportName(); - const importSpecifier = this.parseImportSpecifier(specifier, importedIsString, node.importKind === "type" || node.importKind === "typeof", isMaybeTypeOnly); + const importSpecifier = this.parseImportSpecifier(specifier, importedIsString, node.importKind === "type" || node.importKind === "typeof", isMaybeTypeOnly, undefined); node.specifiers.push(importSpecifier); } } - parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly) { + parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) { if (this.eatContextual(93)) { specifier.local = this.parseIdentifier(); } else { @@ -15895,9 +16723,10 @@ class StatementParser extends ExpressionParser { } = specifier; if (importedIsString) { - throw this.raise(ErrorMessages.ImportBindingIsString, { - node: specifier - }, imported.value); + throw this.raise(Errors.ImportBindingIsString, { + at: specifier, + importName: imported.value + }); } this.checkReservedWord(imported.name, specifier.loc.start, true, true); @@ -15907,8 +16736,7 @@ class StatementParser extends ExpressionParser { } } - this.checkLVal(specifier.local, "import specifier", BIND_LEXICAL); - return this.finishNode(specifier, "ImportSpecifier"); + return this.finishImportSpecifier(specifier, "ImportSpecifier", bindingType); } isThisParam(param) { diff --git a/tools/node_modules/eslint/node_modules/@babel/parser/package.json b/tools/node_modules/eslint/node_modules/@babel/parser/package.json index 4d7a1b4d589..b3f9725558d 100644 --- a/tools/node_modules/eslint/node_modules/@babel/parser/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/parser/package.json @@ -1,6 +1,6 @@ { "name": "@babel/parser", - "version": "7.17.3", + "version": "7.19.1", "description": "A JavaScript parser", "author": "The Babel Team (https://babel.dev/team)", "homepage": "https://babel.dev/docs/en/next/babel-parser", @@ -27,16 +27,20 @@ "files": [ "bin", "lib", - "typings" + "typings", + "index.cjs" ], "engines": { "node": ">=6.0.0" }, "devDependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/helper-fixtures": "^7.17.0", - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/code-frame": "^7.18.6", + "@babel/helper-check-duplicate-nodes": "^7.18.6", + "@babel/helper-fixtures": "^7.18.6", + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.19.1", "charcodes": "^0.2.0" }, - "bin": "./bin/babel-parser.js" + "bin": "./bin/babel-parser.js", + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/plugin-syntax-import-assertions/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/plugin-syntax-import-assertions/lib/index.js index b17617b9f60..8b9e9b984a5 100644 --- a/tools/node_modules/eslint/node_modules/@babel/plugin-syntax-import-assertions/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/plugin-syntax-import-assertions/lib/index.js @@ -13,7 +13,7 @@ var _default = (0, _helperPluginUtils.declare)(api => { name: "syntax-import-assertions", manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push(["importAssertions"]); + parserOpts.plugins.push("importAssertions"); } }; diff --git a/tools/node_modules/eslint/node_modules/@babel/plugin-syntax-import-assertions/package.json b/tools/node_modules/eslint/node_modules/@babel/plugin-syntax-import-assertions/package.json index ae76e86ac1c..508e5bf7f64 100644 --- a/tools/node_modules/eslint/node_modules/@babel/plugin-syntax-import-assertions/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/plugin-syntax-import-assertions/package.json @@ -1,6 +1,6 @@ { "name": "@babel/plugin-syntax-import-assertions", - "version": "7.16.7", + "version": "7.18.6", "description": "Allow parsing of the module assertion attributes in the import statement", "repository": { "type": "git", @@ -16,16 +16,17 @@ "babel-plugin" ], "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" }, "devDependencies": { - "@babel/core": "^7.16.7" + "@babel/core": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, - "author": "The Babel Team (https://babel.dev/team)" + "author": "The Babel Team (https://babel.dev/team)", + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/template/package.json b/tools/node_modules/eslint/node_modules/@babel/template/package.json index 9aca58a5a30..7e4bef15400 100644 --- a/tools/node_modules/eslint/node_modules/@babel/template/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/template/package.json @@ -1,6 +1,6 @@ { "name": "@babel/template", - "version": "7.16.7", + "version": "7.18.10", "description": "Generate an AST from a string template.", "author": "The Babel Team (https://babel.dev/team)", "homepage": "https://babel.dev/docs/en/next/babel-template", @@ -16,11 +16,12 @@ }, "main": "./lib/index.js", "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/cache.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/cache.js index 89f200777be..57e368d9ffd 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/cache.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/cache.js @@ -23,4 +23,6 @@ function clearPath() { function clearScope() { exports.scope = scope = new WeakMap(); -} \ No newline at end of file +} + +//# sourceMappingURL=cache.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/context.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/context.js index 25e2e0a7501..941e8543a0e 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/context.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/context.js @@ -31,17 +31,19 @@ class TraversalContext { if (!(keys != null && keys.length)) return false; for (const key of keys) { - if (node[key]) return true; + if (node[key]) { + return true; + } } return false; } - create(node, obj, key, listKey) { + create(node, container, key, listKey) { return _path.default.get({ parentPath: this.parentPath, parent: node, - container: obj, + container, key: key, listKey }); @@ -134,4 +136,6 @@ class TraversalContext { } -exports.default = TraversalContext; \ No newline at end of file +exports.default = TraversalContext; + +//# sourceMappingURL=context.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/hub.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/hub.js index fe139d2a8f2..5b4d9ab00fd 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/hub.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/hub.js @@ -20,4 +20,6 @@ class Hub { } -exports.default = Hub; \ No newline at end of file +exports.default = Hub; + +//# sourceMappingURL=hub.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/index.js index 44406786edf..5a206ed6892 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/index.js @@ -108,4 +108,6 @@ traverse.hasType = function (tree, type, denylistTypes) { return state.has; }; -traverse.cache = cache; \ No newline at end of file +traverse.cache = cache; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/ancestry.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/ancestry.js index 23f6720372f..ead0acecc9a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/ancestry.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/ancestry.js @@ -16,8 +16,6 @@ exports.isDescendant = isDescendant; var _t = require("@babel/types"); -var _index = require("./index"); - const { VISITOR_KEYS } = _t; @@ -177,4 +175,6 @@ function inType(...candidateTypes) { } return false; -} \ No newline at end of file +} + +//# sourceMappingURL=ancestry.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/comments.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/comments.js index d42bd29dd84..711533b49ae 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/comments.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/comments.js @@ -39,4 +39,6 @@ function addComment(type, content, line) { function addComments(type, comments) { _addComments(this.node, type, comments); -} \ No newline at end of file +} + +//# sourceMappingURL=comments.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/context.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/context.js index b11f08dc604..3088345c8d2 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/context.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/context.js @@ -129,7 +129,11 @@ function stop() { function setScope() { if (this.opts && this.opts.noScope) return; let path = this.parentPath; - if (this.key === "key" && path.isMethod()) path = path.parentPath; + + if ((this.key === "key" || this.listKey === "decorators") && path.isMethod()) { + path = path.parentPath; + } + let target; while (path && !target) { @@ -177,7 +181,10 @@ function _resyncParent() { function _resyncKey() { if (!this.container) return; - if (this.node === this.container[this.key]) return; + + if (this.node === this.container[this.key]) { + return; + } if (Array.isArray(this.container)) { for (let i = 0; i < this.container.length; i++) { @@ -260,4 +267,6 @@ function _getQueueContexts() { } return contexts; -} \ No newline at end of file +} + +//# sourceMappingURL=context.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/conversion.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/conversion.js index a019d221f5c..bb477cc16b6 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/conversion.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/conversion.js @@ -119,6 +119,10 @@ function unwrapFunctionEnvironment() { hoistFunctionEnvironment(this); } +function setType(path, type) { + path.node.type = type; +} + function arrowFunctionToExpression({ allowInsertArrow = true, specCompliant = false, @@ -133,7 +137,7 @@ function arrowFunctionToExpression({ fnPath: fn } = hoistFunctionEnvironment(this, noNewArrows, allowInsertArrow); fn.ensureBlock(); - fn.node.type = "FunctionExpression"; + setType(fn, "FunctionExpression"); if (!noNewArrows) { const checkBinding = thisBinding ? null : fn.scope.generateUidIdentifier("arrowCheckId"); @@ -147,7 +151,10 @@ function arrowFunctionToExpression({ fn.get("body").unshiftContainer("body", expressionStatement(callExpression(this.hub.addHelper("newArrowCheck"), [thisExpression(), checkBinding ? identifier(checkBinding.name) : identifier(thisBinding)]))); fn.replaceWith(callExpression(memberExpression((0, _helperFunctionName.default)(this, true) || fn.node, identifier("bind")), [checkBinding ? identifier(checkBinding.name) : thisExpression()])); + return fn.get("callee.object"); } + + return fn; } const getSuperCallsVisitor = (0, _visitors.merge)([{ @@ -251,10 +258,11 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow = const flatSuperProps = superProps.reduce((acc, superProp) => acc.concat(standardizeSuperProperty(superProp)), []); flatSuperProps.forEach(superProp => { const key = superProp.node.computed ? "" : superProp.get("property").node.name; - const isAssignment = superProp.parentPath.isAssignmentExpression({ + const superParentPath = superProp.parentPath; + const isAssignment = superParentPath.isAssignmentExpression({ left: superProp.node }); - const isCall = superProp.parentPath.isCallExpression({ + const isCall = superParentPath.isCallExpression({ callee: superProp.node }); const superBinding = getSuperPropBinding(thisEnvFn, isAssignment, key); @@ -265,18 +273,18 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow = } if (isAssignment) { - const value = superProp.parentPath.node.right; + const value = superParentPath.node.right; args.push(value); } const call = callExpression(identifier(superBinding), args); if (isCall) { - superProp.parentPath.unshiftContainer("arguments", thisExpression()); + superParentPath.unshiftContainer("arguments", thisExpression()); superProp.replaceWith(memberExpression(call, identifier("call"))); - thisPaths.push(superProp.parentPath.get("arguments.0")); + thisPaths.push(superParentPath.get("arguments.0")); } else if (isAssignment) { - superProp.parentPath.replaceWith(call); + superParentPath.replaceWith(call); } else { superProp.replaceWith(call); } @@ -528,4 +536,6 @@ function getScopeInformation(fnPath) { superProps, superCalls }; -} \ No newline at end of file +} + +//# sourceMappingURL=conversion.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/evaluation.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/evaluation.js index abbbe050f59..77f3d8491ec 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/evaluation.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/evaluation.js @@ -8,6 +8,14 @@ exports.evaluateTruthy = evaluateTruthy; const VALID_CALLEES = ["String", "Number", "Math"]; const INVALID_METHODS = ["random"]; +function isValidCallee(val) { + return VALID_CALLEES.includes(val); +} + +function isInvalidMethod(val) { + return INVALID_METHODS.includes(val); +} + function evaluateTruthy() { const res = this.evaluate(); if (res.confident) return !!res.value; @@ -211,20 +219,20 @@ function _evaluate(path, state) { } const keyPath = prop.get("key"); - let key = keyPath; + let key; if (prop.node.computed) { - key = key.evaluate(); + key = keyPath.evaluate(); if (!key.confident) { return deopt(key.deopt, state); } key = key.value; - } else if (key.isIdentifier()) { - key = key.node.name; + } else if (keyPath.isIdentifier()) { + key = keyPath.node.name; } else { - key = key.node.value; + key = keyPath.node.value; } const valuePath = prop.get("value"); @@ -259,6 +267,11 @@ function _evaluate(path, state) { state.confident = leftConfident && (!left || rightConfident); if (!state.confident) return; return left && right; + + case "??": + state.confident = leftConfident && (left != null || rightConfident); + if (!state.confident) return; + return left != null ? left : right; } } @@ -336,7 +349,7 @@ function _evaluate(path, state) { let context; let func; - if (callee.isIdentifier() && !path.scope.getBinding(callee.node.name) && VALID_CALLEES.indexOf(callee.node.name) >= 0) { + if (callee.isIdentifier() && !path.scope.getBinding(callee.node.name) && isValidCallee(callee.node.name)) { func = global[callee.node.name]; } @@ -344,7 +357,7 @@ function _evaluate(path, state) { const object = callee.get("object"); const property = callee.get("property"); - if (object.isIdentifier() && property.isIdentifier() && VALID_CALLEES.indexOf(object.node.name) >= 0 && INVALID_METHODS.indexOf(property.node.name) < 0) { + if (object.isIdentifier() && property.isIdentifier() && isValidCallee(object.node.name) && !isInvalidMethod(property.node.name)) { context = global[object.node.name]; func = context[property.node.name]; } @@ -398,4 +411,6 @@ function evaluate() { deopt: state.deoptPath, value: value }; -} \ No newline at end of file +} + +//# sourceMappingURL=evaluation.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/family.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/family.js index 6a6554bcd83..b11049bdb98 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/family.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/family.js @@ -402,6 +402,8 @@ function getBindingIdentifierPaths(duplicates = false, outerOnly = false) { return ids; } -function getOuterBindingIdentifierPaths(duplicates) { +function getOuterBindingIdentifierPaths(duplicates = false) { return this.getBindingIdentifierPaths(duplicates, true); -} \ No newline at end of file +} + +//# sourceMappingURL=family.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/asserts.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/asserts.js index bee8a438ea4..9705d0f89e2 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/asserts.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/asserts.js @@ -1,5 +1,3 @@ -"use strict"; -var t = require("@babel/types"); -var _index = require("../index"); \ No newline at end of file +//# sourceMappingURL=asserts.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/validators.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/validators.js index bee8a438ea4..9400b401c42 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/validators.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/validators.js @@ -1,5 +1,3 @@ -"use strict"; -var t = require("@babel/types"); -var _index = require("../index"); \ No newline at end of file +//# sourceMappingURL=validators.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/virtual-types.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/virtual-types.js deleted file mode 100644 index bf37ed9378a..00000000000 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/generated/virtual-types.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -var t = require("@babel/types"); \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/index.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/index.js index 93602608eee..0abc502f092 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/index.js @@ -43,6 +43,8 @@ var NodePath_family = require("./family"); var NodePath_comments = require("./comments"); +var NodePath_virtual_types_validator = require("./lib/virtual-types-validator"); + const { validate } = _t; @@ -227,6 +229,9 @@ class NodePath { } Object.assign(NodePath.prototype, NodePath_ancestry, NodePath_inference, NodePath_replacement, NodePath_evaluation, NodePath_conversion, NodePath_introspection, NodePath_context, NodePath_removal, NodePath_modification, NodePath_family, NodePath_comments); +{ + NodePath.prototype._guessExecutionStatusRelativeToDifferentFunctions = NodePath_introspection._guessExecutionStatusRelativeTo; +} for (const type of t.TYPES) { const typeKey = `is${type}`; @@ -243,15 +248,14 @@ for (const type of t.TYPES) { }; } +Object.assign(NodePath.prototype, NodePath_virtual_types_validator); + for (const type of Object.keys(virtualTypes)) { if (type[0] === "_") continue; - if (t.TYPES.indexOf(type) < 0) t.TYPES.push(type); - const virtualType = virtualTypes[type]; - - NodePath.prototype[`is${type}`] = function (opts) { - return virtualType.checkPath(this, opts); - }; + if (!t.TYPES.includes(type)) t.TYPES.push(type); } var _default = NodePath; -exports.default = _default; \ No newline at end of file +exports.default = _default; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/index.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/index.js index f7fef255a15..ee841aa56fd 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/index.js @@ -17,6 +17,7 @@ var _t = require("@babel/types"); const { anyTypeAnnotation, isAnyTypeAnnotation, + isArrayTypeAnnotation, isBooleanTypeAnnotation, isEmptyTypeAnnotation, isFlowBaseAnnotation, @@ -25,6 +26,10 @@ const { isMixedTypeAnnotation, isNumberTypeAnnotation, isStringTypeAnnotation, + isTSArrayType, + isTSTypeAnnotation, + isTSTypeReference, + isTupleTypeAnnotation, isTypeAnnotation, isUnionTypeAnnotation, isVoidTypeAnnotation, @@ -33,10 +38,20 @@ const { } = _t; function getTypeAnnotation() { - if (this.typeAnnotation) return this.typeAnnotation; - let type = this._getTypeAnnotation() || anyTypeAnnotation(); - if (isTypeAnnotation(type)) type = type.typeAnnotation; - return this.typeAnnotation = type; + let type = this.getData("typeAnnotation"); + + if (type != null) { + return type; + } + + type = this._getTypeAnnotation() || anyTypeAnnotation(); + + if (isTypeAnnotation(type) || isTSTypeAnnotation(type)) { + type = type.typeAnnotation; + } + + this.setData("typeAnnotation", type); + return type; } const typeAnnotationInferringNodes = new WeakSet(); @@ -150,7 +165,18 @@ function baseTypeStrictlyMatches(rightArg) { function isGenericType(genericName) { const type = this.getTypeAnnotation(); + + if (genericName === "Array") { + if (isTSArrayType(type) || isArrayTypeAnnotation(type) || isTupleTypeAnnotation(type)) { + return true; + } + } + return isGenericTypeAnnotation(type) && isIdentifier(type.id, { name: genericName + }) || isTSTypeReference(type) && isIdentifier(type.typeName, { + name: genericName }); -} \ No newline at end of file +} + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/inferer-reference.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/inferer-reference.js index c328dc150f4..6101cb975fd 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/inferer-reference.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/inferer-reference.js @@ -7,13 +7,11 @@ exports.default = _default; var _t = require("@babel/types"); +var _util = require("./util"); + const { BOOLEAN_NUMBER_BINARY_OPERATORS, - createFlowUnionType, - createTSUnionType, createTypeAnnotationBasedOnTypeof, - createUnionTypeAnnotation, - isTSTypeAnnotation, numberTypeAnnotation, voidTypeAnnotation } = _t; @@ -61,15 +59,7 @@ function getTypeAnnotationBindingConstantViolations(binding, path, name) { return; } - if (isTSTypeAnnotation(types[0]) && createTSUnionType) { - return createTSUnionType(types); - } - - if (createFlowUnionType) { - return createFlowUnionType(types); - } - - return createUnionTypeAnnotation(types); + return (0, _util.createUnionType)(types); } function getConstantViolationsBefore(binding, path, functions) { @@ -182,25 +172,13 @@ function getConditionalAnnotation(binding, path, name) { } if (types.length) { - if (isTSTypeAnnotation(types[0]) && createTSUnionType) { - return { - typeAnnotation: createTSUnionType(types), - ifStatement - }; - } - - if (createFlowUnionType) { - return { - typeAnnotation: createFlowUnionType(types), - ifStatement - }; - } - return { - typeAnnotation: createUnionTypeAnnotation(types), + typeAnnotation: (0, _util.createUnionType)(types), ifStatement }; } - return getConditionalAnnotation(ifStatement, name); -} \ No newline at end of file + return getConditionalAnnotation(binding, ifStatement, name); +} + +//# sourceMappingURL=inferer-reference.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/inferers.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/inferers.js index 68180ac548b..67d8eb8908c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/inferers.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/inferers.js @@ -26,6 +26,8 @@ exports.RegExpLiteral = RegExpLiteral; exports.RestElement = RestElement; exports.SequenceExpression = SequenceExpression; exports.StringLiteral = StringLiteral; +exports.TSAsExpression = TSAsExpression; +exports.TSNonNullExpression = TSNonNullExpression; exports.TaggedTemplateExpression = TaggedTemplateExpression; exports.TemplateLiteral = TemplateLiteral; exports.TypeCastExpression = TypeCastExpression; @@ -37,6 +39,8 @@ var _t = require("@babel/types"); var _infererReference = require("./inferer-reference"); +var _util = require("./util"); + const { BOOLEAN_BINARY_OPERATORS, BOOLEAN_UNARY_OPERATORS, @@ -47,37 +51,20 @@ const { arrayTypeAnnotation, booleanTypeAnnotation, buildMatchMemberExpression, - createFlowUnionType, - createTSUnionType, - createUnionTypeAnnotation, genericTypeAnnotation, identifier, - isTSTypeAnnotation, nullLiteralTypeAnnotation, numberTypeAnnotation, stringTypeAnnotation, tupleTypeAnnotation, unionTypeAnnotation, - voidTypeAnnotation + voidTypeAnnotation, + isIdentifier } = _t; function VariableDeclarator() { - var _type; - - const id = this.get("id"); - if (!id.isIdentifier()) return; - const init = this.get("init"); - let type = init.getTypeAnnotation(); - - if (((_type = type) == null ? void 0 : _type.type) === "AnyTypeAnnotation") { - if (init.isCallExpression() && init.get("callee").isIdentifier({ - name: "Array" - }) && !init.scope.hasBinding("Array", true)) { - type = ArrayExpression(); - } - } - - return type; + if (!this.get("id").isIdentifier()) return; + return this.get("init").getTypeAnnotation(); } function TypeCastExpression(node) { @@ -86,8 +73,18 @@ function TypeCastExpression(node) { TypeCastExpression.validParent = true; +function TSAsExpression(node) { + return node.typeAnnotation; +} + +TSAsExpression.validParent = true; + +function TSNonNullExpression() { + return this.get("expression").getTypeAnnotation(); +} + function NewExpression(node) { - if (this.get("callee").isIdentifier()) { + if (node.callee.type === "Identifier") { return genericTypeAnnotation(node.callee); } } @@ -133,30 +130,12 @@ function BinaryExpression(node) { function LogicalExpression() { const argumentTypes = [this.get("left").getTypeAnnotation(), this.get("right").getTypeAnnotation()]; - - if (isTSTypeAnnotation(argumentTypes[0]) && createTSUnionType) { - return createTSUnionType(argumentTypes); - } - - if (createFlowUnionType) { - return createFlowUnionType(argumentTypes); - } - - return createUnionTypeAnnotation(argumentTypes); + return (0, _util.createUnionType)(argumentTypes); } function ConditionalExpression() { const argumentTypes = [this.get("consequent").getTypeAnnotation(), this.get("alternate").getTypeAnnotation()]; - - if (isTSTypeAnnotation(argumentTypes[0]) && createTSUnionType) { - return createTSUnionType(argumentTypes); - } - - if (createFlowUnionType) { - return createFlowUnionType(argumentTypes); - } - - return createUnionTypeAnnotation(argumentTypes); + return (0, _util.createUnionType)(argumentTypes); } function SequenceExpression() { @@ -229,7 +208,9 @@ function CallExpression() { if (isObjectKeys(callee)) { return arrayTypeAnnotation(stringTypeAnnotation()); - } else if (isArrayFrom(callee) || isObjectValues(callee)) { + } else if (isArrayFrom(callee) || isObjectValues(callee) || isIdentifier(callee, { + name: "Array" + })) { return arrayTypeAnnotation(anyTypeAnnotation()); } else if (isObjectEntries(callee)) { return arrayTypeAnnotation(tupleTypeAnnotation([stringTypeAnnotation(), anyTypeAnnotation()])); @@ -246,16 +227,24 @@ function resolveCall(callee) { callee = callee.resolve(); if (callee.isFunction()) { - if (callee.is("async")) { - if (callee.is("generator")) { + const { + node + } = callee; + + if (node.async) { + if (node.generator) { return genericTypeAnnotation(identifier("AsyncIterator")); } else { return genericTypeAnnotation(identifier("Promise")); } } else { - if (callee.node.returnType) { + if (node.generator) { + return genericTypeAnnotation(identifier("Iterator")); + } else if (callee.node.returnType) { return callee.node.returnType; } else {} } } -} \ No newline at end of file +} + +//# sourceMappingURL=inferers.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/util.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/util.js new file mode 100644 index 00000000000..f781c1f4777 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/inference/util.js @@ -0,0 +1,34 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createUnionType = createUnionType; + +var _t = require("@babel/types"); + +const { + createFlowUnionType, + createTSUnionType, + createUnionTypeAnnotation, + isFlowType, + isTSType +} = _t; + +function createUnionType(types) { + { + if (isFlowType(types[0])) { + if (createFlowUnionType) { + return createFlowUnionType(types); + } + + return createUnionTypeAnnotation(types); + } else { + if (createTSUnionType) { + return createTSUnionType(types); + } + } + } +} + +//# sourceMappingURL=util.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/introspection.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/introspection.js index 48d6ef1e1ed..88ddc0de314 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/introspection.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/introspection.js @@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports._guessExecutionStatusRelativeTo = _guessExecutionStatusRelativeTo; -exports._guessExecutionStatusRelativeToDifferentFunctions = _guessExecutionStatusRelativeToDifferentFunctions; exports._resolve = _resolve; exports.canHaveVariableDeclarationOrExpression = canHaveVariableDeclarationOrExpression; exports.canSwapBetweenExpressionAndStatement = canSwapBetweenExpressionAndStatement; @@ -94,9 +93,12 @@ function isCompletionRecord(allowInsideFunction) { let first = true; do { - const container = path.container; + const { + type, + container + } = path; - if (path.isFunction() && !first) { + if (!first && (path.isFunction() || type === "StaticBlock")) { return !!allowInsideFunction; } @@ -105,7 +107,7 @@ function isCompletionRecord(allowInsideFunction) { if (Array.isArray(container) && path.key !== container.length - 1) { return false; } - } while ((path = path.parentPath) && !path.isProgram()); + } while ((path = path.parentPath) && !path.isProgram() && !path.isDoExpression()); return true; } @@ -120,7 +122,7 @@ function isStatementOrBlock() { function referencesImport(moduleSource, importName) { if (!this.isReferencedIdentifier()) { - if ((this.isMemberExpression() || this.isOptionalMemberExpression()) && (this.node.computed ? isStringLiteral(this.node.property, { + if (this.isJSXMemberExpression() && this.node.property.name === importName || (this.isMemberExpression() || this.isOptionalMemberExpression()) && (this.node.computed ? isStringLiteral(this.node.property, { value: importName }) : this.node.property.name === importName)) { const object = this.get("object"); @@ -229,20 +231,24 @@ function isExecutionUncertainInList(paths, maxIndex) { } function _guessExecutionStatusRelativeTo(target) { + return _guessExecutionStatusRelativeToCached(this, target, new Map()); +} + +function _guessExecutionStatusRelativeToCached(base, target, cache) { const funcParent = { - this: getOuterFunction(this), + this: getOuterFunction(base), target: getOuterFunction(target) }; if (funcParent.target.node !== funcParent.this.node) { - return this._guessExecutionStatusRelativeToDifferentFunctions(funcParent.target); + return _guessExecutionStatusRelativeToDifferentFunctionsCached(base, funcParent.target, cache); } const paths = { target: target.getAncestry(), - this: this.getAncestry() + this: base.getAncestry() }; - if (paths.target.indexOf(this) >= 0) return "after"; + if (paths.target.indexOf(base) >= 0) return "after"; if (paths.this.indexOf(target) >= 0) return "before"; let commonPath; const commonIndex = { @@ -286,9 +292,9 @@ function _guessExecutionStatusRelativeTo(target) { return keyPosition.target > keyPosition.this ? "before" : "after"; } -const executionOrderCheckedNodes = new WeakSet(); +const executionOrderCheckedNodes = new Set(); -function _guessExecutionStatusRelativeToDifferentFunctions(target) { +function _guessExecutionStatusRelativeToDifferentFunctionsInternal(base, target, cache) { if (!target.isFunctionDeclaration() || target.parentPath.isExportDeclaration()) { return "unknown"; } @@ -309,20 +315,37 @@ function _guessExecutionStatusRelativeToDifferentFunctions(target) { if (executionOrderCheckedNodes.has(path.node)) continue; executionOrderCheckedNodes.add(path.node); - const status = this._guessExecutionStatusRelativeTo(path); - - executionOrderCheckedNodes.delete(path.node); + try { + const status = _guessExecutionStatusRelativeToCached(base, path, cache); - if (allStatus && allStatus !== status) { - return "unknown"; - } else { - allStatus = status; + if (allStatus && allStatus !== status) { + return "unknown"; + } else { + allStatus = status; + } + } finally { + executionOrderCheckedNodes.delete(path.node); } } return allStatus; } +function _guessExecutionStatusRelativeToDifferentFunctionsCached(base, target, cache) { + let nodeMap = cache.get(base.node); + + if (!nodeMap) { + cache.set(base.node, nodeMap = new Map()); + } else if (nodeMap.has(target.node)) { + return nodeMap.get(target.node); + } + + const result = _guessExecutionStatusRelativeToDifferentFunctionsInternal(base, target, cache); + + nodeMap.set(target.node, result); + return result; +} + function resolve(dangerous, resolved) { return this._resolve(dangerous, resolved) || this; } @@ -418,13 +441,20 @@ function isInStrictMode() { sourceType: "module" })) return true; if (path.isClass()) return true; - if (!path.isProgram() && !path.isFunction()) return false; if (path.isArrowFunctionExpression() && !path.get("body").isBlockStatement()) { return false; } - const body = path.isFunction() ? path.node.body : path.node; + let body; + + if (path.isFunction()) { + body = path.node.body; + } else if (path.isProgram()) { + body = path.node; + } else { + return false; + } for (const directive of body.directives) { if (directive.value.value === "use strict") { @@ -433,4 +463,6 @@ function isInStrictMode() { } }); return !!strictParent; -} \ No newline at end of file +} + +//# sourceMappingURL=introspection.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/hoister.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/hoister.js index 536a3409741..be4f60ac050 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/hoister.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/hoister.js @@ -203,4 +203,6 @@ class PathHoister { } -exports.default = PathHoister; \ No newline at end of file +exports.default = PathHoister; + +//# sourceMappingURL=hoister.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/removal-hooks.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/removal-hooks.js index 23ec8fe6d7e..9bb2a41d472 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/removal-hooks.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/removal-hooks.js @@ -27,7 +27,7 @@ const hooks = [function (self, parent) { return true; } }, function (self, parent) { - if (parent.isIfStatement() && (self.key === "consequent" || self.key === "alternate") || self.key === "body" && (parent.isLoop() || parent.isArrowFunctionExpression())) { + if (parent.isIfStatement() && self.key === "consequent" || self.key === "body" && (parent.isLoop() || parent.isArrowFunctionExpression())) { self.replaceWith({ type: "BlockStatement", body: [] @@ -35,4 +35,6 @@ const hooks = [function (self, parent) { return true; } }]; -exports.hooks = hooks; \ No newline at end of file +exports.hooks = hooks; + +//# sourceMappingURL=removal-hooks.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/virtual-types-validator.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/virtual-types-validator.js new file mode 100644 index 00000000000..3dd9fbf3fa7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/virtual-types-validator.js @@ -0,0 +1,186 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isBindingIdentifier = isBindingIdentifier; +exports.isBlockScoped = isBlockScoped; +exports.isExistentialTypeParam = isExistentialTypeParam; +exports.isExpression = isExpression; +exports.isFlow = isFlow; +exports.isForAwaitStatement = isForAwaitStatement; +exports.isGenerated = isGenerated; +exports.isNumericLiteralTypeAnnotation = isNumericLiteralTypeAnnotation; +exports.isPure = isPure; +exports.isReferenced = isReferenced; +exports.isReferencedIdentifier = isReferencedIdentifier; +exports.isReferencedMemberExpression = isReferencedMemberExpression; +exports.isRestProperty = isRestProperty; +exports.isScope = isScope; +exports.isSpreadProperty = isSpreadProperty; +exports.isStatement = isStatement; +exports.isUser = isUser; +exports.isVar = isVar; + +var _t = require("@babel/types"); + +const { + isBinding, + isBlockScoped: nodeIsBlockScoped, + isExportDeclaration, + isExpression: nodeIsExpression, + isFlow: nodeIsFlow, + isForStatement, + isForXStatement, + isIdentifier, + isImportDeclaration, + isImportSpecifier, + isJSXIdentifier, + isJSXMemberExpression, + isMemberExpression, + isRestElement: nodeIsRestElement, + isReferenced: nodeIsReferenced, + isScope: nodeIsScope, + isStatement: nodeIsStatement, + isVar: nodeIsVar, + isVariableDeclaration, + react, + isForOfStatement +} = _t; +const { + isCompatTag +} = react; + +function isReferencedIdentifier(opts) { + const { + node, + parent + } = this; + + if (!isIdentifier(node, opts) && !isJSXMemberExpression(parent, opts)) { + if (isJSXIdentifier(node, opts)) { + if (isCompatTag(node.name)) return false; + } else { + return false; + } + } + + return nodeIsReferenced(node, parent, this.parentPath.parent); +} + +function isReferencedMemberExpression() { + const { + node, + parent + } = this; + return isMemberExpression(node) && nodeIsReferenced(node, parent); +} + +function isBindingIdentifier() { + const { + node, + parent + } = this; + const grandparent = this.parentPath.parent; + return isIdentifier(node) && isBinding(node, parent, grandparent); +} + +function isStatement() { + const { + node, + parent + } = this; + + if (nodeIsStatement(node)) { + if (isVariableDeclaration(node)) { + if (isForXStatement(parent, { + left: node + })) return false; + if (isForStatement(parent, { + init: node + })) return false; + } + + return true; + } else { + return false; + } +} + +function isExpression() { + if (this.isIdentifier()) { + return this.isReferencedIdentifier(); + } else { + return nodeIsExpression(this.node); + } +} + +function isScope() { + return nodeIsScope(this.node, this.parent); +} + +function isReferenced() { + return nodeIsReferenced(this.node, this.parent); +} + +function isBlockScoped() { + return nodeIsBlockScoped(this.node); +} + +function isVar() { + return nodeIsVar(this.node); +} + +function isUser() { + return this.node && !!this.node.loc; +} + +function isGenerated() { + return !this.isUser(); +} + +function isPure(constantsOnly) { + return this.scope.isPure(this.node, constantsOnly); +} + +function isFlow() { + const { + node + } = this; + + if (nodeIsFlow(node)) { + return true; + } else if (isImportDeclaration(node)) { + return node.importKind === "type" || node.importKind === "typeof"; + } else if (isExportDeclaration(node)) { + return node.exportKind === "type"; + } else if (isImportSpecifier(node)) { + return node.importKind === "type" || node.importKind === "typeof"; + } else { + return false; + } +} + +function isRestProperty() { + return nodeIsRestElement(this.node) && this.parentPath && this.parentPath.isObjectPattern(); +} + +function isSpreadProperty() { + return nodeIsRestElement(this.node) && this.parentPath && this.parentPath.isObjectExpression(); +} + +function isForAwaitStatement() { + return isForOfStatement(this.node, { + await: true + }); +} + +function isExistentialTypeParam() { + throw new Error("`path.isExistentialTypeParam` has been renamed to `path.isExistsTypeAnnotation()` in Babel 7."); +} + +function isNumericLiteralTypeAnnotation() { + throw new Error("`path.isNumericLiteralTypeAnnotation()` has been renamed to `path.isNumberLiteralTypeAnnotation()` in Babel 7."); +} + +//# sourceMappingURL=virtual-types-validator.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/virtual-types.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/virtual-types.js index 871cb249d37..4b8eaf00e33 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/virtual-types.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/lib/virtual-types.js @@ -4,227 +4,41 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.Var = exports.User = exports.Statement = exports.SpreadProperty = exports.Scope = exports.RestProperty = exports.ReferencedMemberExpression = exports.ReferencedIdentifier = exports.Referenced = exports.Pure = exports.NumericLiteralTypeAnnotation = exports.Generated = exports.ForAwaitStatement = exports.Flow = exports.Expression = exports.ExistentialTypeParam = exports.BlockScoped = exports.BindingIdentifier = void 0; - -var _t = require("@babel/types"); - -const { - isBinding, - isBlockScoped, - isExportDeclaration, - isExpression, - isFlow, - isForStatement, - isForXStatement, - isIdentifier, - isImportDeclaration, - isImportSpecifier, - isJSXIdentifier, - isJSXMemberExpression, - isMemberExpression, - isReferenced, - isScope, - isStatement, - isVar, - isVariableDeclaration, - react -} = _t; -const { - isCompatTag -} = react; -const ReferencedIdentifier = { - types: ["Identifier", "JSXIdentifier"], - - checkPath(path, opts) { - const { - node, - parent - } = path; - - if (!isIdentifier(node, opts) && !isJSXMemberExpression(parent, opts)) { - if (isJSXIdentifier(node, opts)) { - if (isCompatTag(node.name)) return false; - } else { - return false; - } - } - - return isReferenced(node, parent, path.parentPath.parent); - } - -}; +const ReferencedIdentifier = ["Identifier", "JSXIdentifier"]; exports.ReferencedIdentifier = ReferencedIdentifier; -const ReferencedMemberExpression = { - types: ["MemberExpression"], - - checkPath({ - node, - parent - }) { - return isMemberExpression(node) && isReferenced(node, parent); - } - -}; +const ReferencedMemberExpression = ["MemberExpression"]; exports.ReferencedMemberExpression = ReferencedMemberExpression; -const BindingIdentifier = { - types: ["Identifier"], - - checkPath(path) { - const { - node, - parent - } = path; - const grandparent = path.parentPath.parent; - return isIdentifier(node) && isBinding(node, parent, grandparent); - } - -}; +const BindingIdentifier = ["Identifier"]; exports.BindingIdentifier = BindingIdentifier; -const Statement = { - types: ["Statement"], - - checkPath({ - node, - parent - }) { - if (isStatement(node)) { - if (isVariableDeclaration(node)) { - if (isForXStatement(parent, { - left: node - })) return false; - if (isForStatement(parent, { - init: node - })) return false; - } - - return true; - } else { - return false; - } - } - -}; +const Statement = ["Statement"]; exports.Statement = Statement; -const Expression = { - types: ["Expression"], - - checkPath(path) { - if (path.isIdentifier()) { - return path.isReferencedIdentifier(); - } else { - return isExpression(path.node); - } - } - -}; +const Expression = ["Expression"]; exports.Expression = Expression; -const Scope = { - types: ["Scopable", "Pattern"], - - checkPath(path) { - return isScope(path.node, path.parent); - } - -}; +const Scope = ["Scopable", "Pattern"]; exports.Scope = Scope; -const Referenced = { - checkPath(path) { - return isReferenced(path.node, path.parent); - } - -}; +const Referenced = null; exports.Referenced = Referenced; -const BlockScoped = { - checkPath(path) { - return isBlockScoped(path.node); - } - -}; +const BlockScoped = null; exports.BlockScoped = BlockScoped; -const Var = { - types: ["VariableDeclaration"], - - checkPath(path) { - return isVar(path.node); - } - -}; +const Var = ["VariableDeclaration"]; exports.Var = Var; -const User = { - checkPath(path) { - return path.node && !!path.node.loc; - } - -}; +const User = null; exports.User = User; -const Generated = { - checkPath(path) { - return !path.isUser(); - } - -}; +const Generated = null; exports.Generated = Generated; -const Pure = { - checkPath(path, opts) { - return path.scope.isPure(path.node, opts); - } - -}; +const Pure = null; exports.Pure = Pure; -const Flow = { - types: ["Flow", "ImportDeclaration", "ExportDeclaration", "ImportSpecifier"], - - checkPath({ - node - }) { - if (isFlow(node)) { - return true; - } else if (isImportDeclaration(node)) { - return node.importKind === "type" || node.importKind === "typeof"; - } else if (isExportDeclaration(node)) { - return node.exportKind === "type"; - } else if (isImportSpecifier(node)) { - return node.importKind === "type" || node.importKind === "typeof"; - } else { - return false; - } - } - -}; +const Flow = ["Flow", "ImportDeclaration", "ExportDeclaration", "ImportSpecifier"]; exports.Flow = Flow; -const RestProperty = { - types: ["RestElement"], - - checkPath(path) { - return path.parentPath && path.parentPath.isObjectPattern(); - } - -}; +const RestProperty = ["RestElement"]; exports.RestProperty = RestProperty; -const SpreadProperty = { - types: ["RestElement"], - - checkPath(path) { - return path.parentPath && path.parentPath.isObjectExpression(); - } - -}; +const SpreadProperty = ["RestElement"]; exports.SpreadProperty = SpreadProperty; -const ExistentialTypeParam = { - types: ["ExistsTypeAnnotation"] -}; +const ExistentialTypeParam = ["ExistsTypeAnnotation"]; exports.ExistentialTypeParam = ExistentialTypeParam; -const NumericLiteralTypeAnnotation = { - types: ["NumberLiteralTypeAnnotation"] -}; +const NumericLiteralTypeAnnotation = ["NumberLiteralTypeAnnotation"]; exports.NumericLiteralTypeAnnotation = NumericLiteralTypeAnnotation; -const ForAwaitStatement = { - types: ["ForOfStatement"], - - checkPath({ - node - }) { - return node.await === true; - } +const ForAwaitStatement = ["ForOfStatement"]; +exports.ForAwaitStatement = ForAwaitStatement; -}; -exports.ForAwaitStatement = ForAwaitStatement; \ No newline at end of file +//# sourceMappingURL=virtual-types.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/modification.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/modification.js index c5de87b1c3c..2a9de12c2fe 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/modification.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/modification.js @@ -266,4 +266,6 @@ function pushContainer(listKey, nodes) { function hoist(scope = this.scope) { const hoister = new _hoister.default(this, scope); return hoister.run(); -} \ No newline at end of file +} + +//# sourceMappingURL=modification.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/removal.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/removal.js index 3e5d4fff094..c7ed8fa410e 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/removal.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/removal.js @@ -70,4 +70,6 @@ function _assertUnremoved() { if (this.removed) { throw this.buildCodeFrameError("NodePath has been removed so is read-only."); } -} \ No newline at end of file +} + +//# sourceMappingURL=removal.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/replacement.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/replacement.js index ee5cdce8e19..f12f363b886 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/replacement.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/path/replacement.js @@ -69,10 +69,11 @@ function replaceWithMultiple(nodes) { function replaceWithSourceString(replacement) { this.resync(); + let ast; try { replacement = `(${replacement})`; - replacement = (0, _parser.parse)(replacement); + ast = (0, _parser.parse)(replacement); } catch (err) { const loc = err.loc; @@ -89,23 +90,21 @@ function replaceWithSourceString(replacement) { throw err; } - replacement = replacement.program.body[0].expression; + const expressionAST = ast.program.body[0].expression; - _index.default.removeProperties(replacement); + _index.default.removeProperties(expressionAST); - return this.replaceWith(replacement); + return this.replaceWith(expressionAST); } -function replaceWith(replacement) { +function replaceWith(replacementPath) { this.resync(); if (this.removed) { throw new Error("You can't replace this node, we've already removed it"); } - if (replacement instanceof _index2.default) { - replacement = replacement.node; - } + let replacement = replacementPath instanceof _index2.default ? replacementPath.node : replacementPath; if (!replacement) { throw new Error("You passed `path.replaceWith()` a falsy node, use `path.remove()` instead"); @@ -257,4 +256,6 @@ function replaceInline(nodes) { } else { return this.replaceWith(nodes); } -} \ No newline at end of file +} + +//# sourceMappingURL=replacement.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/binding.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/binding.js index 16911ef21c0..7a522451adc 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/binding.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/binding.js @@ -72,4 +72,6 @@ class Binding { } -exports.default = Binding; \ No newline at end of file +exports.default = Binding; + +//# sourceMappingURL=binding.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/index.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/index.js index ee376a88f55..138b77ea2ca 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/index.js @@ -38,9 +38,11 @@ const { isMethod, isModuleDeclaration, isModuleSpecifier, + isNullLiteral, isObjectExpression, isProperty, isPureish, + isRegExpLiteral, isSuper, isTaggedTemplateExpression, isTemplateLiteral, @@ -53,7 +55,13 @@ const { toIdentifier, unaryExpression, variableDeclaration, - variableDeclarator + variableDeclarator, + isRecordExpression, + isTupleExpression, + isObjectProperty, + isTopicReference, + isMetaProperty, + isPrivateName } = _t; function gatherNodeParts(node, parts) { @@ -69,7 +77,7 @@ function gatherNodeParts(node, parts) { } } else if (isModuleSpecifier(node)) { gatherNodeParts(node.local, parts); - } else if (isLiteral(node)) { + } else if (isLiteral(node) && !isNullLiteral(node) && !isRegExpLiteral(node) && !isTemplateLiteral(node)) { parts.push(node.value); } @@ -179,7 +187,7 @@ function gatherNodeParts(node, parts) { break; case "JSXOpeningElement": - parts.push(node.name); + gatherNodeParts(node.name, parts); break; case "JSXFragment": @@ -362,9 +370,9 @@ class Scope { path = this.path; do { - const isKey = path.key === "key"; + const shouldSkip = path.key === "key" || path.listKey === "decorators"; path = path.parentPath; - if (isKey && path.isMethod()) path = path.parentPath; + if (shouldSkip && path.isMethod()) path = path.parentPath; if (path && path.isScope()) parent = path; } while (path && !parent); @@ -430,7 +438,7 @@ class Scope { } isStatic(node) { - if (isThisExpression(node) || isSuper(node)) { + if (isThisExpression(node) || isSuper(node) || isTopicReference(node)) { return true; } @@ -682,11 +690,19 @@ class Scope { if (!binding) return false; if (constantsOnly) return binding.constant; return true; + } else if (isThisExpression(node) || isMetaProperty(node) || isTopicReference(node) || isPrivateName(node)) { + return true; } else if (isClass(node)) { + var _node$decorators; + if (node.superClass && !this.isPure(node.superClass, constantsOnly)) { return false; } + if (((_node$decorators = node.decorators) == null ? void 0 : _node$decorators.length) > 0) { + return false; + } + return this.isPure(node.body, constantsOnly); } else if (isClassBody(node)) { for (const method of node.body) { @@ -696,25 +712,44 @@ class Scope { return true; } else if (isBinary(node)) { return this.isPure(node.left, constantsOnly) && this.isPure(node.right, constantsOnly); - } else if (isArrayExpression(node)) { + } else if (isArrayExpression(node) || isTupleExpression(node)) { for (const elem of node.elements) { - if (!this.isPure(elem, constantsOnly)) return false; + if (elem !== null && !this.isPure(elem, constantsOnly)) return false; } return true; - } else if (isObjectExpression(node)) { + } else if (isObjectExpression(node) || isRecordExpression(node)) { for (const prop of node.properties) { if (!this.isPure(prop, constantsOnly)) return false; } return true; } else if (isMethod(node)) { + var _node$decorators2; + if (node.computed && !this.isPure(node.key, constantsOnly)) return false; - if (node.kind === "get" || node.kind === "set") return false; + + if (((_node$decorators2 = node.decorators) == null ? void 0 : _node$decorators2.length) > 0) { + return false; + } + return true; } else if (isProperty(node)) { + var _node$decorators3; + if (node.computed && !this.isPure(node.key, constantsOnly)) return false; - return this.isPure(node.value, constantsOnly); + + if (((_node$decorators3 = node.decorators) == null ? void 0 : _node$decorators3.length) > 0) { + return false; + } + + if (isObjectProperty(node) || node.static) { + if (node.value !== null && !this.isPure(node.value, constantsOnly)) { + return false; + } + } + + return true; } else if (isUnaryExpression(node)) { return this.isPure(node.argument, constantsOnly); } else if (isTaggedTemplateExpression(node)) { @@ -821,7 +856,9 @@ class Scope { push(opts) { let path = this.path; - if (!path.isBlockStatement() && !path.isProgram()) { + if (path.isPattern()) { + path = this.getPatternParent().path; + } else if (!path.isBlockStatement() && !path.isProgram()) { path = this.getBlockParent().path; } @@ -888,6 +925,18 @@ class Scope { throw new Error("We couldn't find a BlockStatement, For, Switch, Function, Loop or Program..."); } + getPatternParent() { + let scope = this; + + do { + if (!scope.path.isPattern()) { + return scope.getBlockParent(); + } + } while (scope = scope.parent.parent); + + throw new Error("We couldn't find a BlockStatement, For, Switch, Function, Loop or Program..."); + } + getAllBindings() { const ids = Object.create(null); let scope = this; @@ -1015,4 +1064,6 @@ class Scope { exports.default = Scope; Scope.globals = Object.keys(_globals.builtin); -Scope.contextVariables = ["arguments", "undefined", "Infinity", "NaN"]; \ No newline at end of file +Scope.contextVariables = ["arguments", "undefined", "Infinity", "NaN"]; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/lib/renamer.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/lib/renamer.js index f11bbb70066..7f41fe611da 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/lib/renamer.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/scope/lib/renamer.js @@ -5,20 +5,12 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _binding = require("../binding"); - var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration"); -var _t = require("@babel/types"); +var t = require("@babel/types"); + +var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor"); -const { - VISITOR_KEYS, - assignmentExpression, - identifier, - toExpression, - variableDeclaration, - variableDeclarator -} = _t; const renameVisitor = { ReferencedIdentifier({ node @@ -30,7 +22,11 @@ const renameVisitor = { Scope(path, state) { if (!path.scope.bindingIdentifierEquals(state.oldName, state.binding.identifier)) { - skipAllButComputedMethodKey(path); + path.skip(); + + if (path.isMethod()) { + (0, _helperEnvironmentVisitor.requeueComputedKeyAndDecorators)(path); + } } }, @@ -59,7 +55,17 @@ class Renamer { return; } - if (maybeExportDeclar.isExportDefaultDeclaration() && !maybeExportDeclar.get("declaration").node.id) { + if (maybeExportDeclar.isExportDefaultDeclaration()) { + const { + declaration + } = maybeExportDeclar.node; + + if (t.isDeclaration(declaration) && !declaration.id) { + return; + } + } + + if (maybeExportDeclar.isExportAllDeclaration()) { return; } @@ -67,23 +73,11 @@ class Renamer { } maybeConvertFromClassFunctionDeclaration(path) { - return; - if (!path.isFunctionDeclaration() && !path.isClassDeclaration()) return; - if (this.binding.kind !== "hoisted") return; - path.node.id = identifier(this.oldName); - path.node._blockHoist = 3; - path.replaceWith(variableDeclaration("let", [variableDeclarator(identifier(this.newName), toExpression(path.node))])); + return path; } maybeConvertFromClassFunctionExpression(path) { - return; - if (!path.isFunctionExpression() && !path.isClassExpression()) return; - if (this.binding.kind !== "local") return; - path.node.id = identifier(this.oldName); - this.binding.scope.parent.push({ - id: identifier(this.newName) - }); - path.replaceWith(assignmentExpression("=", identifier(this.newName), path.node)); + return path; } rename(block) { @@ -123,8 +117,8 @@ class Renamer { } if (parentDeclar) { - this.maybeConvertFromClassFunctionDeclaration(parentDeclar); - this.maybeConvertFromClassFunctionExpression(parentDeclar); + this.maybeConvertFromClassFunctionDeclaration(path); + this.maybeConvertFromClassFunctionExpression(path); } } @@ -132,15 +126,4 @@ class Renamer { exports.default = Renamer; -function skipAllButComputedMethodKey(path) { - if (!path.isMethod() || !path.node.computed) { - path.skip(); - return; - } - - const keys = VISITOR_KEYS[path.type]; - - for (const key of keys) { - if (key !== "key") path.skipKey(key); - } -} \ No newline at end of file +//# sourceMappingURL=renamer.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/traverse-node.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/traverse-node.js index 82437b461fe..3b9f766d349 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/traverse-node.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/traverse-node.js @@ -27,4 +27,6 @@ function traverseNode(node, opts, scope, state, path, skipKeys) { } return false; -} \ No newline at end of file +} + +//# sourceMappingURL=traverse-node.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/types.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/types.js index ec17ee62fc5..e1c8d91c2e2 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/types.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/types.js @@ -1,5 +1,3 @@ -"use strict"; -var _index = require("./index"); -var _virtualTypes = require("./path/generated/virtual-types"); \ No newline at end of file +//# sourceMappingURL=types.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/visitors.js b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/visitors.js index 81d63357718..c7d15534da4 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/lib/visitors.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/lib/visitors.js @@ -17,6 +17,10 @@ const { TYPES } = _t; +function isVirtualType(type) { + return type in virtualTypes; +} + function explode(visitor) { if (visitor._exploded) return visitor; visitor._exploded = true; @@ -40,18 +44,18 @@ function explode(visitor) { for (const nodeType of Object.keys(visitor)) { if (shouldIgnoreKey(nodeType)) continue; - const wrapper = virtualTypes[nodeType]; - if (!wrapper) continue; + if (!isVirtualType(nodeType)) continue; const fns = visitor[nodeType]; for (const type of Object.keys(fns)) { - fns[type] = wrapCheck(wrapper, fns[type]); + fns[type] = wrapCheck(nodeType, fns[type]); } delete visitor[nodeType]; + const types = virtualTypes[nodeType]; - if (wrapper.types) { - for (const type of wrapper.types) { + if (types !== null) { + for (const type of types) { if (visitor[type]) { mergePair(visitor[type], fns); } else { @@ -155,7 +159,7 @@ function merge(visitors, states = [], wrapper) { visitorType = wrapWithStateOrWrapper(visitorType, state, wrapper); } - const nodeVisitor = rootVisitor[type] = rootVisitor[type] || {}; + const nodeVisitor = rootVisitor[type] || (rootVisitor[type] = {}); mergePair(nodeVisitor, visitorType); } } @@ -212,9 +216,9 @@ function ensureCallbackArrays(obj) { if (obj.exit && !Array.isArray(obj.exit)) obj.exit = [obj.exit]; } -function wrapCheck(wrapper, fn) { +function wrapCheck(nodeType, fn) { const newFn = function (path) { - if (wrapper.checkPath(path)) { + if (path[`is${nodeType}`]()) { return fn.apply(this, arguments); } }; @@ -239,4 +243,6 @@ function mergePair(dest, src) { for (const key of Object.keys(src)) { dest[key] = [].concat(dest[key] || [], src[key]); } -} \ No newline at end of file +} + +//# sourceMappingURL=visitors.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/package.json b/tools/node_modules/eslint/node_modules/@babel/traverse/package.json index 401ba251139..39fe1d20f71 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/package.json @@ -1,6 +1,6 @@ { "name": "@babel/traverse", - "version": "7.17.3", + "version": "7.19.1", "description": "The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes", "author": "The Babel Team (https://babel.dev/team)", "homepage": "https://babel.dev/docs/en/next/babel-traverse", @@ -16,21 +16,22 @@ }, "main": "./lib/index.js", "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.1", + "@babel/types": "^7.19.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "devDependencies": { - "@babel/helper-plugin-test-runner": "^7.16.7" + "@babel/helper-plugin-test-runner": "^7.18.6" }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/asserts.js b/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/asserts.js index f10b33eede2..80dad30368e 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/asserts.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/asserts.js @@ -1,12 +1,12 @@ -import t from "@babel/types"; +import * as t from "@babel/types"; export default function generateAsserts() { let output = `/* * This file is auto-generated! Do not modify it directly. * To re-generate run 'make build' */ -import * as t from "@babel/types"; -import NodePath from "../index"; +import type * as t from "@babel/types"; +import type NodePath from "../index"; export interface NodePathAssetions {`; diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/validators.js b/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/validators.js index f806fc76c72..50340de31f3 100644 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/validators.js +++ b/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/validators.js @@ -1,41 +1,26 @@ -import t from "@babel/types"; -import virtualTypes from "../../lib/path/lib/virtual-types.js"; +import * as t from "@babel/types"; export default function generateValidators() { let output = `/* * This file is auto-generated! Do not modify it directly. * To re-generate run 'make build' */ -import * as t from "@babel/types"; -import NodePath from "../index"; -import type { VirtualTypeAliases } from "./virtual-types"; +import type * as t from "@babel/types"; +import type NodePath from "../index"; +import type { VirtualTypeNodePathValidators } from "../lib/virtual-types-validator"; -export interface NodePathValidators { +interface BaseNodePathValidators { `; for (const type of [...t.TYPES].sort()) { - output += `is${type}(opts?: object): this is NodePath;`; - } - - for (const type of Object.keys(virtualTypes)) { - const { types } = virtualTypes[type]; - if (type[0] === "_") continue; - if (t.NODE_FIELDS[type] || t.FLIPPED_ALIAS_KEYS[type]) { - output += `is${type}(opts?: object): this is NodePath;`; - } else if (types /* in VirtualTypeAliases */) { - output += `is${type}(opts?: object): this is NodePath;`; - } else { - // if it don't have types, then VirtualTypeAliases[type] is t.Node - // which TS marked as always true - // eg. if (path.isBlockScope()) return; - // path resolved to `never` here - // so we have to return boolean instead of this is NodePath here - output += `is${type}(opts?: object): boolean;`; - } + output += `is${type}(this: NodePath, opts?: object): this is NodePath;`; } output += ` } + +export interface NodePathValidators + extends BaseNodePathValidators, VirtualTypeNodePathValidators {} `; return output; diff --git a/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/virtual-types.js b/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/virtual-types.js deleted file mode 100644 index 6d55f54caaf..00000000000 --- a/tools/node_modules/eslint/node_modules/@babel/traverse/scripts/generators/virtual-types.js +++ /dev/null @@ -1,24 +0,0 @@ -import virtualTypes from "../../lib/path/lib/virtual-types.js"; - -export default function generateValidators() { - let output = `/* - * This file is auto-generated! Do not modify it directly. - * To re-generate run 'make build' - */ -import * as t from "@babel/types"; - -export interface VirtualTypeAliases { -`; - - for (const type of Object.keys(virtualTypes)) { - output += ` ${type}: ${(virtualTypes[type].types || ["Node"]) - .map(t => `t.${t}`) - .join(" | ")};`; - } - - output += ` -} -`; - - return output; -} diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/asserts/assertNode.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/asserts/assertNode.js index e584e3eec60..3fd195b05e3 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/asserts/assertNode.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/asserts/assertNode.js @@ -14,4 +14,6 @@ function assertNode(node) { const type = (_node$type = node == null ? void 0 : node.type) != null ? _node$type : JSON.stringify(node); throw new TypeError(`Not a valid node of type "${type}"`); } -} \ No newline at end of file +} + +//# sourceMappingURL=assertNode.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/asserts/generated/index.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/asserts/generated/index.js index 53a55168daf..b8c36496089 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/asserts/generated/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/asserts/generated/index.js @@ -227,6 +227,7 @@ exports.assertTSImportType = assertTSImportType; exports.assertTSIndexSignature = assertTSIndexSignature; exports.assertTSIndexedAccessType = assertTSIndexedAccessType; exports.assertTSInferType = assertTSInferType; +exports.assertTSInstantiationExpression = assertTSInstantiationExpression; exports.assertTSInterfaceBody = assertTSInterfaceBody; exports.assertTSInterfaceDeclaration = assertTSInterfaceDeclaration; exports.assertTSIntersectionType = assertTSIntersectionType; @@ -1236,6 +1237,10 @@ function assertTSTypeAliasDeclaration(node, opts) { assert("TSTypeAliasDeclaration", node, opts); } +function assertTSInstantiationExpression(node, opts) { + assert("TSInstantiationExpression", node, opts); +} + function assertTSAsExpression(node, opts) { assert("TSAsExpression", node, opts); } @@ -1514,4 +1519,6 @@ function assertRestProperty(node, opts) { function assertSpreadProperty(node, opts) { console.trace("The node type SpreadProperty has been renamed to SpreadElement"); assert("SpreadProperty", node, opts); -} \ No newline at end of file +} + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/ast-types/generated/index.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/ast-types/generated/index.js index e69de29bb2d..d48e85e41de 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/ast-types/generated/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/ast-types/generated/index.js @@ -0,0 +1,3 @@ + + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/builder.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/builder.js deleted file mode 100644 index c28edb62506..00000000000 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/builder.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = builder; - -var _definitions = require("../definitions"); - -var _validate = require("../validators/validate"); - -function builder() { - const type = this; - const keys = _definitions.BUILDER_KEYS[type]; - const countArgs = arguments.length; - - if (countArgs > keys.length) { - throw new Error(`${type}: Too many arguments passed. Received ${countArgs} but can receive no more than ${keys.length}`); - } - - const node = { - type - }; - - for (let i = 0; i < keys.length; ++i) { - const key = keys[i]; - const field = _definitions.NODE_FIELDS[type][key]; - let arg; - if (i < countArgs) arg = arguments[i]; - - if (arg === undefined) { - arg = Array.isArray(field.default) ? [] : field.default; - } - - node[key] = arg; - } - - for (const key in node) { - (0, _validate.default)(node, key, node[key]); - } - - return node; -} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js index ddf20fdd3ae..bdab86aeee7 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js @@ -17,4 +17,6 @@ function createFlowUnionType(types) { } else { return (0, _generated.unionTypeAnnotation)(flattened); } -} \ No newline at end of file +} + +//# sourceMappingURL=createFlowUnionType.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js index 11dca055953..1c3c98e6e9e 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js @@ -38,4 +38,6 @@ function createTypeAnnotationBasedOnTypeof(type) { } throw new Error("Invalid typeof value: " + type); -} \ No newline at end of file +} + +//# sourceMappingURL=createTypeAnnotationBasedOnTypeof.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/generated/index.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/generated/index.js index 99851ee0bf9..c42f919c5f5 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/generated/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/generated/index.js @@ -193,6 +193,7 @@ exports.tSImportType = exports.tsImportType = tsImportType; exports.tSIndexSignature = exports.tsIndexSignature = tsIndexSignature; exports.tSIndexedAccessType = exports.tsIndexedAccessType = tsIndexedAccessType; exports.tSInferType = exports.tsInferType = tsInferType; +exports.tSInstantiationExpression = exports.tsInstantiationExpression = tsInstantiationExpression; exports.tSInterfaceBody = exports.tsInterfaceBody = tsInterfaceBody; exports.tSInterfaceDeclaration = exports.tsInterfaceDeclaration = tsInterfaceDeclaration; exports.tSIntersectionType = exports.tsIntersectionType = tsIntersectionType; @@ -255,1012 +256,1974 @@ exports.whileStatement = whileStatement; exports.withStatement = withStatement; exports.yieldExpression = yieldExpression; -var _builder = require("../builder"); +var _validateNode = require("../validateNode"); -function arrayExpression(elements) { - return _builder.default.apply("ArrayExpression", arguments); +function arrayExpression(elements = []) { + return (0, _validateNode.default)({ + type: "ArrayExpression", + elements + }); } function assignmentExpression(operator, left, right) { - return _builder.default.apply("AssignmentExpression", arguments); + return (0, _validateNode.default)({ + type: "AssignmentExpression", + operator, + left, + right + }); } function binaryExpression(operator, left, right) { - return _builder.default.apply("BinaryExpression", arguments); + return (0, _validateNode.default)({ + type: "BinaryExpression", + operator, + left, + right + }); } function interpreterDirective(value) { - return _builder.default.apply("InterpreterDirective", arguments); + return (0, _validateNode.default)({ + type: "InterpreterDirective", + value + }); } function directive(value) { - return _builder.default.apply("Directive", arguments); + return (0, _validateNode.default)({ + type: "Directive", + value + }); } function directiveLiteral(value) { - return _builder.default.apply("DirectiveLiteral", arguments); + return (0, _validateNode.default)({ + type: "DirectiveLiteral", + value + }); } -function blockStatement(body, directives) { - return _builder.default.apply("BlockStatement", arguments); +function blockStatement(body, directives = []) { + return (0, _validateNode.default)({ + type: "BlockStatement", + body, + directives + }); } -function breakStatement(label) { - return _builder.default.apply("BreakStatement", arguments); +function breakStatement(label = null) { + return (0, _validateNode.default)({ + type: "BreakStatement", + label + }); } function callExpression(callee, _arguments) { - return _builder.default.apply("CallExpression", arguments); + return (0, _validateNode.default)({ + type: "CallExpression", + callee, + arguments: _arguments + }); } -function catchClause(param, body) { - return _builder.default.apply("CatchClause", arguments); +function catchClause(param = null, body) { + return (0, _validateNode.default)({ + type: "CatchClause", + param, + body + }); } function conditionalExpression(test, consequent, alternate) { - return _builder.default.apply("ConditionalExpression", arguments); + return (0, _validateNode.default)({ + type: "ConditionalExpression", + test, + consequent, + alternate + }); } -function continueStatement(label) { - return _builder.default.apply("ContinueStatement", arguments); +function continueStatement(label = null) { + return (0, _validateNode.default)({ + type: "ContinueStatement", + label + }); } function debuggerStatement() { - return _builder.default.apply("DebuggerStatement", arguments); + return { + type: "DebuggerStatement" + }; } function doWhileStatement(test, body) { - return _builder.default.apply("DoWhileStatement", arguments); + return (0, _validateNode.default)({ + type: "DoWhileStatement", + test, + body + }); } function emptyStatement() { - return _builder.default.apply("EmptyStatement", arguments); + return { + type: "EmptyStatement" + }; } function expressionStatement(expression) { - return _builder.default.apply("ExpressionStatement", arguments); + return (0, _validateNode.default)({ + type: "ExpressionStatement", + expression + }); } -function file(program, comments, tokens) { - return _builder.default.apply("File", arguments); +function file(program, comments = null, tokens = null) { + return (0, _validateNode.default)({ + type: "File", + program, + comments, + tokens + }); } function forInStatement(left, right, body) { - return _builder.default.apply("ForInStatement", arguments); -} - -function forStatement(init, test, update, body) { - return _builder.default.apply("ForStatement", arguments); -} - -function functionDeclaration(id, params, body, generator, async) { - return _builder.default.apply("FunctionDeclaration", arguments); -} - -function functionExpression(id, params, body, generator, async) { - return _builder.default.apply("FunctionExpression", arguments); + return (0, _validateNode.default)({ + type: "ForInStatement", + left, + right, + body + }); +} + +function forStatement(init = null, test = null, update = null, body) { + return (0, _validateNode.default)({ + type: "ForStatement", + init, + test, + update, + body + }); +} + +function functionDeclaration(id = null, params, body, generator = false, async = false) { + return (0, _validateNode.default)({ + type: "FunctionDeclaration", + id, + params, + body, + generator, + async + }); +} + +function functionExpression(id = null, params, body, generator = false, async = false) { + return (0, _validateNode.default)({ + type: "FunctionExpression", + id, + params, + body, + generator, + async + }); } function identifier(name) { - return _builder.default.apply("Identifier", arguments); + return (0, _validateNode.default)({ + type: "Identifier", + name + }); } -function ifStatement(test, consequent, alternate) { - return _builder.default.apply("IfStatement", arguments); +function ifStatement(test, consequent, alternate = null) { + return (0, _validateNode.default)({ + type: "IfStatement", + test, + consequent, + alternate + }); } function labeledStatement(label, body) { - return _builder.default.apply("LabeledStatement", arguments); + return (0, _validateNode.default)({ + type: "LabeledStatement", + label, + body + }); } function stringLiteral(value) { - return _builder.default.apply("StringLiteral", arguments); + return (0, _validateNode.default)({ + type: "StringLiteral", + value + }); } function numericLiteral(value) { - return _builder.default.apply("NumericLiteral", arguments); + return (0, _validateNode.default)({ + type: "NumericLiteral", + value + }); } function nullLiteral() { - return _builder.default.apply("NullLiteral", arguments); + return { + type: "NullLiteral" + }; } function booleanLiteral(value) { - return _builder.default.apply("BooleanLiteral", arguments); + return (0, _validateNode.default)({ + type: "BooleanLiteral", + value + }); } -function regExpLiteral(pattern, flags) { - return _builder.default.apply("RegExpLiteral", arguments); +function regExpLiteral(pattern, flags = "") { + return (0, _validateNode.default)({ + type: "RegExpLiteral", + pattern, + flags + }); } function logicalExpression(operator, left, right) { - return _builder.default.apply("LogicalExpression", arguments); + return (0, _validateNode.default)({ + type: "LogicalExpression", + operator, + left, + right + }); } -function memberExpression(object, property, computed, optional) { - return _builder.default.apply("MemberExpression", arguments); +function memberExpression(object, property, computed = false, optional = null) { + return (0, _validateNode.default)({ + type: "MemberExpression", + object, + property, + computed, + optional + }); } function newExpression(callee, _arguments) { - return _builder.default.apply("NewExpression", arguments); + return (0, _validateNode.default)({ + type: "NewExpression", + callee, + arguments: _arguments + }); } -function program(body, directives, sourceType, interpreter) { - return _builder.default.apply("Program", arguments); +function program(body, directives = [], sourceType = "script", interpreter = null) { + return (0, _validateNode.default)({ + type: "Program", + body, + directives, + sourceType, + interpreter, + sourceFile: null + }); } function objectExpression(properties) { - return _builder.default.apply("ObjectExpression", arguments); -} - -function objectMethod(kind, key, params, body, computed, generator, async) { - return _builder.default.apply("ObjectMethod", arguments); -} - -function objectProperty(key, value, computed, shorthand, decorators) { - return _builder.default.apply("ObjectProperty", arguments); + return (0, _validateNode.default)({ + type: "ObjectExpression", + properties + }); +} + +function objectMethod(kind = "method", key, params, body, computed = false, generator = false, async = false) { + return (0, _validateNode.default)({ + type: "ObjectMethod", + kind, + key, + params, + body, + computed, + generator, + async + }); +} + +function objectProperty(key, value, computed = false, shorthand = false, decorators = null) { + return (0, _validateNode.default)({ + type: "ObjectProperty", + key, + value, + computed, + shorthand, + decorators + }); } function restElement(argument) { - return _builder.default.apply("RestElement", arguments); + return (0, _validateNode.default)({ + type: "RestElement", + argument + }); } -function returnStatement(argument) { - return _builder.default.apply("ReturnStatement", arguments); +function returnStatement(argument = null) { + return (0, _validateNode.default)({ + type: "ReturnStatement", + argument + }); } function sequenceExpression(expressions) { - return _builder.default.apply("SequenceExpression", arguments); + return (0, _validateNode.default)({ + type: "SequenceExpression", + expressions + }); } function parenthesizedExpression(expression) { - return _builder.default.apply("ParenthesizedExpression", arguments); + return (0, _validateNode.default)({ + type: "ParenthesizedExpression", + expression + }); } -function switchCase(test, consequent) { - return _builder.default.apply("SwitchCase", arguments); +function switchCase(test = null, consequent) { + return (0, _validateNode.default)({ + type: "SwitchCase", + test, + consequent + }); } function switchStatement(discriminant, cases) { - return _builder.default.apply("SwitchStatement", arguments); + return (0, _validateNode.default)({ + type: "SwitchStatement", + discriminant, + cases + }); } function thisExpression() { - return _builder.default.apply("ThisExpression", arguments); + return { + type: "ThisExpression" + }; } function throwStatement(argument) { - return _builder.default.apply("ThrowStatement", arguments); + return (0, _validateNode.default)({ + type: "ThrowStatement", + argument + }); } -function tryStatement(block, handler, finalizer) { - return _builder.default.apply("TryStatement", arguments); +function tryStatement(block, handler = null, finalizer = null) { + return (0, _validateNode.default)({ + type: "TryStatement", + block, + handler, + finalizer + }); } -function unaryExpression(operator, argument, prefix) { - return _builder.default.apply("UnaryExpression", arguments); +function unaryExpression(operator, argument, prefix = true) { + return (0, _validateNode.default)({ + type: "UnaryExpression", + operator, + argument, + prefix + }); } -function updateExpression(operator, argument, prefix) { - return _builder.default.apply("UpdateExpression", arguments); +function updateExpression(operator, argument, prefix = false) { + return (0, _validateNode.default)({ + type: "UpdateExpression", + operator, + argument, + prefix + }); } function variableDeclaration(kind, declarations) { - return _builder.default.apply("VariableDeclaration", arguments); + return (0, _validateNode.default)({ + type: "VariableDeclaration", + kind, + declarations + }); } -function variableDeclarator(id, init) { - return _builder.default.apply("VariableDeclarator", arguments); +function variableDeclarator(id, init = null) { + return (0, _validateNode.default)({ + type: "VariableDeclarator", + id, + init + }); } function whileStatement(test, body) { - return _builder.default.apply("WhileStatement", arguments); + return (0, _validateNode.default)({ + type: "WhileStatement", + test, + body + }); } function withStatement(object, body) { - return _builder.default.apply("WithStatement", arguments); + return (0, _validateNode.default)({ + type: "WithStatement", + object, + body + }); } function assignmentPattern(left, right) { - return _builder.default.apply("AssignmentPattern", arguments); + return (0, _validateNode.default)({ + type: "AssignmentPattern", + left, + right + }); } function arrayPattern(elements) { - return _builder.default.apply("ArrayPattern", arguments); + return (0, _validateNode.default)({ + type: "ArrayPattern", + elements + }); } -function arrowFunctionExpression(params, body, async) { - return _builder.default.apply("ArrowFunctionExpression", arguments); +function arrowFunctionExpression(params, body, async = false) { + return (0, _validateNode.default)({ + type: "ArrowFunctionExpression", + params, + body, + async, + expression: null + }); } function classBody(body) { - return _builder.default.apply("ClassBody", arguments); + return (0, _validateNode.default)({ + type: "ClassBody", + body + }); } -function classExpression(id, superClass, body, decorators) { - return _builder.default.apply("ClassExpression", arguments); +function classExpression(id = null, superClass = null, body, decorators = null) { + return (0, _validateNode.default)({ + type: "ClassExpression", + id, + superClass, + body, + decorators + }); } -function classDeclaration(id, superClass, body, decorators) { - return _builder.default.apply("ClassDeclaration", arguments); +function classDeclaration(id, superClass = null, body, decorators = null) { + return (0, _validateNode.default)({ + type: "ClassDeclaration", + id, + superClass, + body, + decorators + }); } function exportAllDeclaration(source) { - return _builder.default.apply("ExportAllDeclaration", arguments); + return (0, _validateNode.default)({ + type: "ExportAllDeclaration", + source + }); } function exportDefaultDeclaration(declaration) { - return _builder.default.apply("ExportDefaultDeclaration", arguments); + return (0, _validateNode.default)({ + type: "ExportDefaultDeclaration", + declaration + }); } -function exportNamedDeclaration(declaration, specifiers, source) { - return _builder.default.apply("ExportNamedDeclaration", arguments); +function exportNamedDeclaration(declaration = null, specifiers = [], source = null) { + return (0, _validateNode.default)({ + type: "ExportNamedDeclaration", + declaration, + specifiers, + source + }); } function exportSpecifier(local, exported) { - return _builder.default.apply("ExportSpecifier", arguments); + return (0, _validateNode.default)({ + type: "ExportSpecifier", + local, + exported + }); } -function forOfStatement(left, right, body, _await) { - return _builder.default.apply("ForOfStatement", arguments); +function forOfStatement(left, right, body, _await = false) { + return (0, _validateNode.default)({ + type: "ForOfStatement", + left, + right, + body, + await: _await + }); } function importDeclaration(specifiers, source) { - return _builder.default.apply("ImportDeclaration", arguments); + return (0, _validateNode.default)({ + type: "ImportDeclaration", + specifiers, + source + }); } function importDefaultSpecifier(local) { - return _builder.default.apply("ImportDefaultSpecifier", arguments); + return (0, _validateNode.default)({ + type: "ImportDefaultSpecifier", + local + }); } function importNamespaceSpecifier(local) { - return _builder.default.apply("ImportNamespaceSpecifier", arguments); + return (0, _validateNode.default)({ + type: "ImportNamespaceSpecifier", + local + }); } function importSpecifier(local, imported) { - return _builder.default.apply("ImportSpecifier", arguments); + return (0, _validateNode.default)({ + type: "ImportSpecifier", + local, + imported + }); } function metaProperty(meta, property) { - return _builder.default.apply("MetaProperty", arguments); -} - -function classMethod(kind, key, params, body, computed, _static, generator, async) { - return _builder.default.apply("ClassMethod", arguments); + return (0, _validateNode.default)({ + type: "MetaProperty", + meta, + property + }); +} + +function classMethod(kind = "method", key, params, body, computed = false, _static = false, generator = false, async = false) { + return (0, _validateNode.default)({ + type: "ClassMethod", + kind, + key, + params, + body, + computed, + static: _static, + generator, + async + }); } function objectPattern(properties) { - return _builder.default.apply("ObjectPattern", arguments); + return (0, _validateNode.default)({ + type: "ObjectPattern", + properties + }); } function spreadElement(argument) { - return _builder.default.apply("SpreadElement", arguments); + return (0, _validateNode.default)({ + type: "SpreadElement", + argument + }); } function _super() { - return _builder.default.apply("Super", arguments); + return { + type: "Super" + }; } function taggedTemplateExpression(tag, quasi) { - return _builder.default.apply("TaggedTemplateExpression", arguments); + return (0, _validateNode.default)({ + type: "TaggedTemplateExpression", + tag, + quasi + }); } -function templateElement(value, tail) { - return _builder.default.apply("TemplateElement", arguments); +function templateElement(value, tail = false) { + return (0, _validateNode.default)({ + type: "TemplateElement", + value, + tail + }); } function templateLiteral(quasis, expressions) { - return _builder.default.apply("TemplateLiteral", arguments); + return (0, _validateNode.default)({ + type: "TemplateLiteral", + quasis, + expressions + }); } -function yieldExpression(argument, delegate) { - return _builder.default.apply("YieldExpression", arguments); +function yieldExpression(argument = null, delegate = false) { + return (0, _validateNode.default)({ + type: "YieldExpression", + argument, + delegate + }); } function awaitExpression(argument) { - return _builder.default.apply("AwaitExpression", arguments); + return (0, _validateNode.default)({ + type: "AwaitExpression", + argument + }); } function _import() { - return _builder.default.apply("Import", arguments); + return { + type: "Import" + }; } function bigIntLiteral(value) { - return _builder.default.apply("BigIntLiteral", arguments); + return (0, _validateNode.default)({ + type: "BigIntLiteral", + value + }); } function exportNamespaceSpecifier(exported) { - return _builder.default.apply("ExportNamespaceSpecifier", arguments); + return (0, _validateNode.default)({ + type: "ExportNamespaceSpecifier", + exported + }); } -function optionalMemberExpression(object, property, computed, optional) { - return _builder.default.apply("OptionalMemberExpression", arguments); +function optionalMemberExpression(object, property, computed = false, optional) { + return (0, _validateNode.default)({ + type: "OptionalMemberExpression", + object, + property, + computed, + optional + }); } function optionalCallExpression(callee, _arguments, optional) { - return _builder.default.apply("OptionalCallExpression", arguments); -} - -function classProperty(key, value, typeAnnotation, decorators, computed, _static) { - return _builder.default.apply("ClassProperty", arguments); -} - -function classAccessorProperty(key, value, typeAnnotation, decorators, computed, _static) { - return _builder.default.apply("ClassAccessorProperty", arguments); -} - -function classPrivateProperty(key, value, decorators, _static) { - return _builder.default.apply("ClassPrivateProperty", arguments); -} - -function classPrivateMethod(kind, key, params, body, _static) { - return _builder.default.apply("ClassPrivateMethod", arguments); + return (0, _validateNode.default)({ + type: "OptionalCallExpression", + callee, + arguments: _arguments, + optional + }); +} + +function classProperty(key, value = null, typeAnnotation = null, decorators = null, computed = false, _static = false) { + return (0, _validateNode.default)({ + type: "ClassProperty", + key, + value, + typeAnnotation, + decorators, + computed, + static: _static + }); +} + +function classAccessorProperty(key, value = null, typeAnnotation = null, decorators = null, computed = false, _static = false) { + return (0, _validateNode.default)({ + type: "ClassAccessorProperty", + key, + value, + typeAnnotation, + decorators, + computed, + static: _static + }); +} + +function classPrivateProperty(key, value = null, decorators = null, _static = false) { + return (0, _validateNode.default)({ + type: "ClassPrivateProperty", + key, + value, + decorators, + static: _static + }); +} + +function classPrivateMethod(kind = "method", key, params, body, _static = false) { + return (0, _validateNode.default)({ + type: "ClassPrivateMethod", + kind, + key, + params, + body, + static: _static + }); } function privateName(id) { - return _builder.default.apply("PrivateName", arguments); + return (0, _validateNode.default)({ + type: "PrivateName", + id + }); } function staticBlock(body) { - return _builder.default.apply("StaticBlock", arguments); + return (0, _validateNode.default)({ + type: "StaticBlock", + body + }); } function anyTypeAnnotation() { - return _builder.default.apply("AnyTypeAnnotation", arguments); + return { + type: "AnyTypeAnnotation" + }; } function arrayTypeAnnotation(elementType) { - return _builder.default.apply("ArrayTypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "ArrayTypeAnnotation", + elementType + }); } function booleanTypeAnnotation() { - return _builder.default.apply("BooleanTypeAnnotation", arguments); + return { + type: "BooleanTypeAnnotation" + }; } function booleanLiteralTypeAnnotation(value) { - return _builder.default.apply("BooleanLiteralTypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "BooleanLiteralTypeAnnotation", + value + }); } function nullLiteralTypeAnnotation() { - return _builder.default.apply("NullLiteralTypeAnnotation", arguments); + return { + type: "NullLiteralTypeAnnotation" + }; } -function classImplements(id, typeParameters) { - return _builder.default.apply("ClassImplements", arguments); +function classImplements(id, typeParameters = null) { + return (0, _validateNode.default)({ + type: "ClassImplements", + id, + typeParameters + }); } -function declareClass(id, typeParameters, _extends, body) { - return _builder.default.apply("DeclareClass", arguments); +function declareClass(id, typeParameters = null, _extends = null, body) { + return (0, _validateNode.default)({ + type: "DeclareClass", + id, + typeParameters, + extends: _extends, + body + }); } function declareFunction(id) { - return _builder.default.apply("DeclareFunction", arguments); + return (0, _validateNode.default)({ + type: "DeclareFunction", + id + }); } -function declareInterface(id, typeParameters, _extends, body) { - return _builder.default.apply("DeclareInterface", arguments); +function declareInterface(id, typeParameters = null, _extends = null, body) { + return (0, _validateNode.default)({ + type: "DeclareInterface", + id, + typeParameters, + extends: _extends, + body + }); } -function declareModule(id, body, kind) { - return _builder.default.apply("DeclareModule", arguments); +function declareModule(id, body, kind = null) { + return (0, _validateNode.default)({ + type: "DeclareModule", + id, + body, + kind + }); } function declareModuleExports(typeAnnotation) { - return _builder.default.apply("DeclareModuleExports", arguments); + return (0, _validateNode.default)({ + type: "DeclareModuleExports", + typeAnnotation + }); } -function declareTypeAlias(id, typeParameters, right) { - return _builder.default.apply("DeclareTypeAlias", arguments); +function declareTypeAlias(id, typeParameters = null, right) { + return (0, _validateNode.default)({ + type: "DeclareTypeAlias", + id, + typeParameters, + right + }); } -function declareOpaqueType(id, typeParameters, supertype) { - return _builder.default.apply("DeclareOpaqueType", arguments); +function declareOpaqueType(id, typeParameters = null, supertype = null) { + return (0, _validateNode.default)({ + type: "DeclareOpaqueType", + id, + typeParameters, + supertype + }); } function declareVariable(id) { - return _builder.default.apply("DeclareVariable", arguments); + return (0, _validateNode.default)({ + type: "DeclareVariable", + id + }); } -function declareExportDeclaration(declaration, specifiers, source) { - return _builder.default.apply("DeclareExportDeclaration", arguments); +function declareExportDeclaration(declaration = null, specifiers = null, source = null) { + return (0, _validateNode.default)({ + type: "DeclareExportDeclaration", + declaration, + specifiers, + source + }); } function declareExportAllDeclaration(source) { - return _builder.default.apply("DeclareExportAllDeclaration", arguments); + return (0, _validateNode.default)({ + type: "DeclareExportAllDeclaration", + source + }); } function declaredPredicate(value) { - return _builder.default.apply("DeclaredPredicate", arguments); + return (0, _validateNode.default)({ + type: "DeclaredPredicate", + value + }); } function existsTypeAnnotation() { - return _builder.default.apply("ExistsTypeAnnotation", arguments); + return { + type: "ExistsTypeAnnotation" + }; } -function functionTypeAnnotation(typeParameters, params, rest, returnType) { - return _builder.default.apply("FunctionTypeAnnotation", arguments); +function functionTypeAnnotation(typeParameters = null, params, rest = null, returnType) { + return (0, _validateNode.default)({ + type: "FunctionTypeAnnotation", + typeParameters, + params, + rest, + returnType + }); } -function functionTypeParam(name, typeAnnotation) { - return _builder.default.apply("FunctionTypeParam", arguments); +function functionTypeParam(name = null, typeAnnotation) { + return (0, _validateNode.default)({ + type: "FunctionTypeParam", + name, + typeAnnotation + }); } -function genericTypeAnnotation(id, typeParameters) { - return _builder.default.apply("GenericTypeAnnotation", arguments); +function genericTypeAnnotation(id, typeParameters = null) { + return (0, _validateNode.default)({ + type: "GenericTypeAnnotation", + id, + typeParameters + }); } function inferredPredicate() { - return _builder.default.apply("InferredPredicate", arguments); + return { + type: "InferredPredicate" + }; } -function interfaceExtends(id, typeParameters) { - return _builder.default.apply("InterfaceExtends", arguments); +function interfaceExtends(id, typeParameters = null) { + return (0, _validateNode.default)({ + type: "InterfaceExtends", + id, + typeParameters + }); } -function interfaceDeclaration(id, typeParameters, _extends, body) { - return _builder.default.apply("InterfaceDeclaration", arguments); +function interfaceDeclaration(id, typeParameters = null, _extends = null, body) { + return (0, _validateNode.default)({ + type: "InterfaceDeclaration", + id, + typeParameters, + extends: _extends, + body + }); } -function interfaceTypeAnnotation(_extends, body) { - return _builder.default.apply("InterfaceTypeAnnotation", arguments); +function interfaceTypeAnnotation(_extends = null, body) { + return (0, _validateNode.default)({ + type: "InterfaceTypeAnnotation", + extends: _extends, + body + }); } function intersectionTypeAnnotation(types) { - return _builder.default.apply("IntersectionTypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "IntersectionTypeAnnotation", + types + }); } function mixedTypeAnnotation() { - return _builder.default.apply("MixedTypeAnnotation", arguments); + return { + type: "MixedTypeAnnotation" + }; } function emptyTypeAnnotation() { - return _builder.default.apply("EmptyTypeAnnotation", arguments); + return { + type: "EmptyTypeAnnotation" + }; } function nullableTypeAnnotation(typeAnnotation) { - return _builder.default.apply("NullableTypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "NullableTypeAnnotation", + typeAnnotation + }); } function numberLiteralTypeAnnotation(value) { - return _builder.default.apply("NumberLiteralTypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "NumberLiteralTypeAnnotation", + value + }); } function numberTypeAnnotation() { - return _builder.default.apply("NumberTypeAnnotation", arguments); + return { + type: "NumberTypeAnnotation" + }; } -function objectTypeAnnotation(properties, indexers, callProperties, internalSlots, exact) { - return _builder.default.apply("ObjectTypeAnnotation", arguments); +function objectTypeAnnotation(properties, indexers = [], callProperties = [], internalSlots = [], exact = false) { + return (0, _validateNode.default)({ + type: "ObjectTypeAnnotation", + properties, + indexers, + callProperties, + internalSlots, + exact + }); } function objectTypeInternalSlot(id, value, optional, _static, method) { - return _builder.default.apply("ObjectTypeInternalSlot", arguments); + return (0, _validateNode.default)({ + type: "ObjectTypeInternalSlot", + id, + value, + optional, + static: _static, + method + }); } function objectTypeCallProperty(value) { - return _builder.default.apply("ObjectTypeCallProperty", arguments); -} - -function objectTypeIndexer(id, key, value, variance) { - return _builder.default.apply("ObjectTypeIndexer", arguments); -} - -function objectTypeProperty(key, value, variance) { - return _builder.default.apply("ObjectTypeProperty", arguments); + return (0, _validateNode.default)({ + type: "ObjectTypeCallProperty", + value, + static: null + }); +} + +function objectTypeIndexer(id = null, key, value, variance = null) { + return (0, _validateNode.default)({ + type: "ObjectTypeIndexer", + id, + key, + value, + variance, + static: null + }); +} + +function objectTypeProperty(key, value, variance = null) { + return (0, _validateNode.default)({ + type: "ObjectTypeProperty", + key, + value, + variance, + kind: null, + method: null, + optional: null, + proto: null, + static: null + }); } function objectTypeSpreadProperty(argument) { - return _builder.default.apply("ObjectTypeSpreadProperty", arguments); + return (0, _validateNode.default)({ + type: "ObjectTypeSpreadProperty", + argument + }); } -function opaqueType(id, typeParameters, supertype, impltype) { - return _builder.default.apply("OpaqueType", arguments); +function opaqueType(id, typeParameters = null, supertype = null, impltype) { + return (0, _validateNode.default)({ + type: "OpaqueType", + id, + typeParameters, + supertype, + impltype + }); } function qualifiedTypeIdentifier(id, qualification) { - return _builder.default.apply("QualifiedTypeIdentifier", arguments); + return (0, _validateNode.default)({ + type: "QualifiedTypeIdentifier", + id, + qualification + }); } function stringLiteralTypeAnnotation(value) { - return _builder.default.apply("StringLiteralTypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "StringLiteralTypeAnnotation", + value + }); } function stringTypeAnnotation() { - return _builder.default.apply("StringTypeAnnotation", arguments); + return { + type: "StringTypeAnnotation" + }; } function symbolTypeAnnotation() { - return _builder.default.apply("SymbolTypeAnnotation", arguments); + return { + type: "SymbolTypeAnnotation" + }; } function thisTypeAnnotation() { - return _builder.default.apply("ThisTypeAnnotation", arguments); + return { + type: "ThisTypeAnnotation" + }; } function tupleTypeAnnotation(types) { - return _builder.default.apply("TupleTypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "TupleTypeAnnotation", + types + }); } function typeofTypeAnnotation(argument) { - return _builder.default.apply("TypeofTypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "TypeofTypeAnnotation", + argument + }); } -function typeAlias(id, typeParameters, right) { - return _builder.default.apply("TypeAlias", arguments); +function typeAlias(id, typeParameters = null, right) { + return (0, _validateNode.default)({ + type: "TypeAlias", + id, + typeParameters, + right + }); } function typeAnnotation(typeAnnotation) { - return _builder.default.apply("TypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "TypeAnnotation", + typeAnnotation + }); } function typeCastExpression(expression, typeAnnotation) { - return _builder.default.apply("TypeCastExpression", arguments); + return (0, _validateNode.default)({ + type: "TypeCastExpression", + expression, + typeAnnotation + }); } -function typeParameter(bound, _default, variance) { - return _builder.default.apply("TypeParameter", arguments); +function typeParameter(bound = null, _default = null, variance = null) { + return (0, _validateNode.default)({ + type: "TypeParameter", + bound, + default: _default, + variance, + name: null + }); } function typeParameterDeclaration(params) { - return _builder.default.apply("TypeParameterDeclaration", arguments); + return (0, _validateNode.default)({ + type: "TypeParameterDeclaration", + params + }); } function typeParameterInstantiation(params) { - return _builder.default.apply("TypeParameterInstantiation", arguments); + return (0, _validateNode.default)({ + type: "TypeParameterInstantiation", + params + }); } function unionTypeAnnotation(types) { - return _builder.default.apply("UnionTypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "UnionTypeAnnotation", + types + }); } function variance(kind) { - return _builder.default.apply("Variance", arguments); + return (0, _validateNode.default)({ + type: "Variance", + kind + }); } function voidTypeAnnotation() { - return _builder.default.apply("VoidTypeAnnotation", arguments); + return { + type: "VoidTypeAnnotation" + }; } function enumDeclaration(id, body) { - return _builder.default.apply("EnumDeclaration", arguments); + return (0, _validateNode.default)({ + type: "EnumDeclaration", + id, + body + }); } function enumBooleanBody(members) { - return _builder.default.apply("EnumBooleanBody", arguments); + return (0, _validateNode.default)({ + type: "EnumBooleanBody", + members, + explicitType: null, + hasUnknownMembers: null + }); } function enumNumberBody(members) { - return _builder.default.apply("EnumNumberBody", arguments); + return (0, _validateNode.default)({ + type: "EnumNumberBody", + members, + explicitType: null, + hasUnknownMembers: null + }); } function enumStringBody(members) { - return _builder.default.apply("EnumStringBody", arguments); + return (0, _validateNode.default)({ + type: "EnumStringBody", + members, + explicitType: null, + hasUnknownMembers: null + }); } function enumSymbolBody(members) { - return _builder.default.apply("EnumSymbolBody", arguments); + return (0, _validateNode.default)({ + type: "EnumSymbolBody", + members, + hasUnknownMembers: null + }); } function enumBooleanMember(id) { - return _builder.default.apply("EnumBooleanMember", arguments); + return (0, _validateNode.default)({ + type: "EnumBooleanMember", + id, + init: null + }); } function enumNumberMember(id, init) { - return _builder.default.apply("EnumNumberMember", arguments); + return (0, _validateNode.default)({ + type: "EnumNumberMember", + id, + init + }); } function enumStringMember(id, init) { - return _builder.default.apply("EnumStringMember", arguments); + return (0, _validateNode.default)({ + type: "EnumStringMember", + id, + init + }); } function enumDefaultedMember(id) { - return _builder.default.apply("EnumDefaultedMember", arguments); + return (0, _validateNode.default)({ + type: "EnumDefaultedMember", + id + }); } function indexedAccessType(objectType, indexType) { - return _builder.default.apply("IndexedAccessType", arguments); + return (0, _validateNode.default)({ + type: "IndexedAccessType", + objectType, + indexType + }); } function optionalIndexedAccessType(objectType, indexType) { - return _builder.default.apply("OptionalIndexedAccessType", arguments); + return (0, _validateNode.default)({ + type: "OptionalIndexedAccessType", + objectType, + indexType, + optional: null + }); } -function jsxAttribute(name, value) { - return _builder.default.apply("JSXAttribute", arguments); +function jsxAttribute(name, value = null) { + return (0, _validateNode.default)({ + type: "JSXAttribute", + name, + value + }); } function jsxClosingElement(name) { - return _builder.default.apply("JSXClosingElement", arguments); + return (0, _validateNode.default)({ + type: "JSXClosingElement", + name + }); } -function jsxElement(openingElement, closingElement, children, selfClosing) { - return _builder.default.apply("JSXElement", arguments); +function jsxElement(openingElement, closingElement = null, children, selfClosing = null) { + return (0, _validateNode.default)({ + type: "JSXElement", + openingElement, + closingElement, + children, + selfClosing + }); } function jsxEmptyExpression() { - return _builder.default.apply("JSXEmptyExpression", arguments); + return { + type: "JSXEmptyExpression" + }; } function jsxExpressionContainer(expression) { - return _builder.default.apply("JSXExpressionContainer", arguments); + return (0, _validateNode.default)({ + type: "JSXExpressionContainer", + expression + }); } function jsxSpreadChild(expression) { - return _builder.default.apply("JSXSpreadChild", arguments); + return (0, _validateNode.default)({ + type: "JSXSpreadChild", + expression + }); } function jsxIdentifier(name) { - return _builder.default.apply("JSXIdentifier", arguments); + return (0, _validateNode.default)({ + type: "JSXIdentifier", + name + }); } function jsxMemberExpression(object, property) { - return _builder.default.apply("JSXMemberExpression", arguments); + return (0, _validateNode.default)({ + type: "JSXMemberExpression", + object, + property + }); } function jsxNamespacedName(namespace, name) { - return _builder.default.apply("JSXNamespacedName", arguments); + return (0, _validateNode.default)({ + type: "JSXNamespacedName", + namespace, + name + }); } -function jsxOpeningElement(name, attributes, selfClosing) { - return _builder.default.apply("JSXOpeningElement", arguments); +function jsxOpeningElement(name, attributes, selfClosing = false) { + return (0, _validateNode.default)({ + type: "JSXOpeningElement", + name, + attributes, + selfClosing + }); } function jsxSpreadAttribute(argument) { - return _builder.default.apply("JSXSpreadAttribute", arguments); + return (0, _validateNode.default)({ + type: "JSXSpreadAttribute", + argument + }); } function jsxText(value) { - return _builder.default.apply("JSXText", arguments); + return (0, _validateNode.default)({ + type: "JSXText", + value + }); } function jsxFragment(openingFragment, closingFragment, children) { - return _builder.default.apply("JSXFragment", arguments); + return (0, _validateNode.default)({ + type: "JSXFragment", + openingFragment, + closingFragment, + children + }); } function jsxOpeningFragment() { - return _builder.default.apply("JSXOpeningFragment", arguments); + return { + type: "JSXOpeningFragment" + }; } function jsxClosingFragment() { - return _builder.default.apply("JSXClosingFragment", arguments); + return { + type: "JSXClosingFragment" + }; } function noop() { - return _builder.default.apply("Noop", arguments); + return { + type: "Noop" + }; } function placeholder(expectedNode, name) { - return _builder.default.apply("Placeholder", arguments); + return (0, _validateNode.default)({ + type: "Placeholder", + expectedNode, + name + }); } function v8IntrinsicIdentifier(name) { - return _builder.default.apply("V8IntrinsicIdentifier", arguments); + return (0, _validateNode.default)({ + type: "V8IntrinsicIdentifier", + name + }); } function argumentPlaceholder() { - return _builder.default.apply("ArgumentPlaceholder", arguments); + return { + type: "ArgumentPlaceholder" + }; } function bindExpression(object, callee) { - return _builder.default.apply("BindExpression", arguments); + return (0, _validateNode.default)({ + type: "BindExpression", + object, + callee + }); } function importAttribute(key, value) { - return _builder.default.apply("ImportAttribute", arguments); + return (0, _validateNode.default)({ + type: "ImportAttribute", + key, + value + }); } function decorator(expression) { - return _builder.default.apply("Decorator", arguments); + return (0, _validateNode.default)({ + type: "Decorator", + expression + }); } -function doExpression(body, async) { - return _builder.default.apply("DoExpression", arguments); +function doExpression(body, async = false) { + return (0, _validateNode.default)({ + type: "DoExpression", + body, + async + }); } function exportDefaultSpecifier(exported) { - return _builder.default.apply("ExportDefaultSpecifier", arguments); + return (0, _validateNode.default)({ + type: "ExportDefaultSpecifier", + exported + }); } function recordExpression(properties) { - return _builder.default.apply("RecordExpression", arguments); + return (0, _validateNode.default)({ + type: "RecordExpression", + properties + }); } -function tupleExpression(elements) { - return _builder.default.apply("TupleExpression", arguments); +function tupleExpression(elements = []) { + return (0, _validateNode.default)({ + type: "TupleExpression", + elements + }); } function decimalLiteral(value) { - return _builder.default.apply("DecimalLiteral", arguments); + return (0, _validateNode.default)({ + type: "DecimalLiteral", + value + }); } function moduleExpression(body) { - return _builder.default.apply("ModuleExpression", arguments); + return (0, _validateNode.default)({ + type: "ModuleExpression", + body + }); } function topicReference() { - return _builder.default.apply("TopicReference", arguments); + return { + type: "TopicReference" + }; } function pipelineTopicExpression(expression) { - return _builder.default.apply("PipelineTopicExpression", arguments); + return (0, _validateNode.default)({ + type: "PipelineTopicExpression", + expression + }); } function pipelineBareFunction(callee) { - return _builder.default.apply("PipelineBareFunction", arguments); + return (0, _validateNode.default)({ + type: "PipelineBareFunction", + callee + }); } function pipelinePrimaryTopicReference() { - return _builder.default.apply("PipelinePrimaryTopicReference", arguments); + return { + type: "PipelinePrimaryTopicReference" + }; } function tsParameterProperty(parameter) { - return _builder.default.apply("TSParameterProperty", arguments); + return (0, _validateNode.default)({ + type: "TSParameterProperty", + parameter + }); } -function tsDeclareFunction(id, typeParameters, params, returnType) { - return _builder.default.apply("TSDeclareFunction", arguments); +function tsDeclareFunction(id = null, typeParameters = null, params, returnType = null) { + return (0, _validateNode.default)({ + type: "TSDeclareFunction", + id, + typeParameters, + params, + returnType + }); } -function tsDeclareMethod(decorators, key, typeParameters, params, returnType) { - return _builder.default.apply("TSDeclareMethod", arguments); +function tsDeclareMethod(decorators = null, key, typeParameters = null, params, returnType = null) { + return (0, _validateNode.default)({ + type: "TSDeclareMethod", + decorators, + key, + typeParameters, + params, + returnType + }); } function tsQualifiedName(left, right) { - return _builder.default.apply("TSQualifiedName", arguments); -} - -function tsCallSignatureDeclaration(typeParameters, parameters, typeAnnotation) { - return _builder.default.apply("TSCallSignatureDeclaration", arguments); -} - -function tsConstructSignatureDeclaration(typeParameters, parameters, typeAnnotation) { - return _builder.default.apply("TSConstructSignatureDeclaration", arguments); -} - -function tsPropertySignature(key, typeAnnotation, initializer) { - return _builder.default.apply("TSPropertySignature", arguments); -} - -function tsMethodSignature(key, typeParameters, parameters, typeAnnotation) { - return _builder.default.apply("TSMethodSignature", arguments); -} - -function tsIndexSignature(parameters, typeAnnotation) { - return _builder.default.apply("TSIndexSignature", arguments); + return (0, _validateNode.default)({ + type: "TSQualifiedName", + left, + right + }); +} + +function tsCallSignatureDeclaration(typeParameters = null, parameters, typeAnnotation = null) { + return (0, _validateNode.default)({ + type: "TSCallSignatureDeclaration", + typeParameters, + parameters, + typeAnnotation + }); +} + +function tsConstructSignatureDeclaration(typeParameters = null, parameters, typeAnnotation = null) { + return (0, _validateNode.default)({ + type: "TSConstructSignatureDeclaration", + typeParameters, + parameters, + typeAnnotation + }); +} + +function tsPropertySignature(key, typeAnnotation = null, initializer = null) { + return (0, _validateNode.default)({ + type: "TSPropertySignature", + key, + typeAnnotation, + initializer, + kind: null + }); +} + +function tsMethodSignature(key, typeParameters = null, parameters, typeAnnotation = null) { + return (0, _validateNode.default)({ + type: "TSMethodSignature", + key, + typeParameters, + parameters, + typeAnnotation, + kind: null + }); +} + +function tsIndexSignature(parameters, typeAnnotation = null) { + return (0, _validateNode.default)({ + type: "TSIndexSignature", + parameters, + typeAnnotation + }); } function tsAnyKeyword() { - return _builder.default.apply("TSAnyKeyword", arguments); + return { + type: "TSAnyKeyword" + }; } function tsBooleanKeyword() { - return _builder.default.apply("TSBooleanKeyword", arguments); + return { + type: "TSBooleanKeyword" + }; } function tsBigIntKeyword() { - return _builder.default.apply("TSBigIntKeyword", arguments); + return { + type: "TSBigIntKeyword" + }; } function tsIntrinsicKeyword() { - return _builder.default.apply("TSIntrinsicKeyword", arguments); + return { + type: "TSIntrinsicKeyword" + }; } function tsNeverKeyword() { - return _builder.default.apply("TSNeverKeyword", arguments); + return { + type: "TSNeverKeyword" + }; } function tsNullKeyword() { - return _builder.default.apply("TSNullKeyword", arguments); + return { + type: "TSNullKeyword" + }; } function tsNumberKeyword() { - return _builder.default.apply("TSNumberKeyword", arguments); + return { + type: "TSNumberKeyword" + }; } function tsObjectKeyword() { - return _builder.default.apply("TSObjectKeyword", arguments); + return { + type: "TSObjectKeyword" + }; } function tsStringKeyword() { - return _builder.default.apply("TSStringKeyword", arguments); + return { + type: "TSStringKeyword" + }; } function tsSymbolKeyword() { - return _builder.default.apply("TSSymbolKeyword", arguments); + return { + type: "TSSymbolKeyword" + }; } function tsUndefinedKeyword() { - return _builder.default.apply("TSUndefinedKeyword", arguments); + return { + type: "TSUndefinedKeyword" + }; } function tsUnknownKeyword() { - return _builder.default.apply("TSUnknownKeyword", arguments); + return { + type: "TSUnknownKeyword" + }; } function tsVoidKeyword() { - return _builder.default.apply("TSVoidKeyword", arguments); + return { + type: "TSVoidKeyword" + }; } function tsThisType() { - return _builder.default.apply("TSThisType", arguments); + return { + type: "TSThisType" + }; } -function tsFunctionType(typeParameters, parameters, typeAnnotation) { - return _builder.default.apply("TSFunctionType", arguments); +function tsFunctionType(typeParameters = null, parameters, typeAnnotation = null) { + return (0, _validateNode.default)({ + type: "TSFunctionType", + typeParameters, + parameters, + typeAnnotation + }); } -function tsConstructorType(typeParameters, parameters, typeAnnotation) { - return _builder.default.apply("TSConstructorType", arguments); +function tsConstructorType(typeParameters = null, parameters, typeAnnotation = null) { + return (0, _validateNode.default)({ + type: "TSConstructorType", + typeParameters, + parameters, + typeAnnotation + }); } -function tsTypeReference(typeName, typeParameters) { - return _builder.default.apply("TSTypeReference", arguments); +function tsTypeReference(typeName, typeParameters = null) { + return (0, _validateNode.default)({ + type: "TSTypeReference", + typeName, + typeParameters + }); } -function tsTypePredicate(parameterName, typeAnnotation, asserts) { - return _builder.default.apply("TSTypePredicate", arguments); +function tsTypePredicate(parameterName, typeAnnotation = null, asserts = null) { + return (0, _validateNode.default)({ + type: "TSTypePredicate", + parameterName, + typeAnnotation, + asserts + }); } -function tsTypeQuery(exprName) { - return _builder.default.apply("TSTypeQuery", arguments); +function tsTypeQuery(exprName, typeParameters = null) { + return (0, _validateNode.default)({ + type: "TSTypeQuery", + exprName, + typeParameters + }); } function tsTypeLiteral(members) { - return _builder.default.apply("TSTypeLiteral", arguments); + return (0, _validateNode.default)({ + type: "TSTypeLiteral", + members + }); } function tsArrayType(elementType) { - return _builder.default.apply("TSArrayType", arguments); + return (0, _validateNode.default)({ + type: "TSArrayType", + elementType + }); } function tsTupleType(elementTypes) { - return _builder.default.apply("TSTupleType", arguments); + return (0, _validateNode.default)({ + type: "TSTupleType", + elementTypes + }); } function tsOptionalType(typeAnnotation) { - return _builder.default.apply("TSOptionalType", arguments); + return (0, _validateNode.default)({ + type: "TSOptionalType", + typeAnnotation + }); } function tsRestType(typeAnnotation) { - return _builder.default.apply("TSRestType", arguments); + return (0, _validateNode.default)({ + type: "TSRestType", + typeAnnotation + }); } -function tsNamedTupleMember(label, elementType, optional) { - return _builder.default.apply("TSNamedTupleMember", arguments); +function tsNamedTupleMember(label, elementType, optional = false) { + return (0, _validateNode.default)({ + type: "TSNamedTupleMember", + label, + elementType, + optional + }); } function tsUnionType(types) { - return _builder.default.apply("TSUnionType", arguments); + return (0, _validateNode.default)({ + type: "TSUnionType", + types + }); } function tsIntersectionType(types) { - return _builder.default.apply("TSIntersectionType", arguments); + return (0, _validateNode.default)({ + type: "TSIntersectionType", + types + }); } function tsConditionalType(checkType, extendsType, trueType, falseType) { - return _builder.default.apply("TSConditionalType", arguments); + return (0, _validateNode.default)({ + type: "TSConditionalType", + checkType, + extendsType, + trueType, + falseType + }); } function tsInferType(typeParameter) { - return _builder.default.apply("TSInferType", arguments); + return (0, _validateNode.default)({ + type: "TSInferType", + typeParameter + }); } function tsParenthesizedType(typeAnnotation) { - return _builder.default.apply("TSParenthesizedType", arguments); + return (0, _validateNode.default)({ + type: "TSParenthesizedType", + typeAnnotation + }); } function tsTypeOperator(typeAnnotation) { - return _builder.default.apply("TSTypeOperator", arguments); + return (0, _validateNode.default)({ + type: "TSTypeOperator", + typeAnnotation, + operator: null + }); } function tsIndexedAccessType(objectType, indexType) { - return _builder.default.apply("TSIndexedAccessType", arguments); + return (0, _validateNode.default)({ + type: "TSIndexedAccessType", + objectType, + indexType + }); } -function tsMappedType(typeParameter, typeAnnotation, nameType) { - return _builder.default.apply("TSMappedType", arguments); +function tsMappedType(typeParameter, typeAnnotation = null, nameType = null) { + return (0, _validateNode.default)({ + type: "TSMappedType", + typeParameter, + typeAnnotation, + nameType + }); } function tsLiteralType(literal) { - return _builder.default.apply("TSLiteralType", arguments); + return (0, _validateNode.default)({ + type: "TSLiteralType", + literal + }); } -function tsExpressionWithTypeArguments(expression, typeParameters) { - return _builder.default.apply("TSExpressionWithTypeArguments", arguments); +function tsExpressionWithTypeArguments(expression, typeParameters = null) { + return (0, _validateNode.default)({ + type: "TSExpressionWithTypeArguments", + expression, + typeParameters + }); } -function tsInterfaceDeclaration(id, typeParameters, _extends, body) { - return _builder.default.apply("TSInterfaceDeclaration", arguments); +function tsInterfaceDeclaration(id, typeParameters = null, _extends = null, body) { + return (0, _validateNode.default)({ + type: "TSInterfaceDeclaration", + id, + typeParameters, + extends: _extends, + body + }); } function tsInterfaceBody(body) { - return _builder.default.apply("TSInterfaceBody", arguments); + return (0, _validateNode.default)({ + type: "TSInterfaceBody", + body + }); } -function tsTypeAliasDeclaration(id, typeParameters, typeAnnotation) { - return _builder.default.apply("TSTypeAliasDeclaration", arguments); +function tsTypeAliasDeclaration(id, typeParameters = null, typeAnnotation) { + return (0, _validateNode.default)({ + type: "TSTypeAliasDeclaration", + id, + typeParameters, + typeAnnotation + }); +} + +function tsInstantiationExpression(expression, typeParameters = null) { + return (0, _validateNode.default)({ + type: "TSInstantiationExpression", + expression, + typeParameters + }); } function tsAsExpression(expression, typeAnnotation) { - return _builder.default.apply("TSAsExpression", arguments); + return (0, _validateNode.default)({ + type: "TSAsExpression", + expression, + typeAnnotation + }); } function tsTypeAssertion(typeAnnotation, expression) { - return _builder.default.apply("TSTypeAssertion", arguments); + return (0, _validateNode.default)({ + type: "TSTypeAssertion", + typeAnnotation, + expression + }); } function tsEnumDeclaration(id, members) { - return _builder.default.apply("TSEnumDeclaration", arguments); + return (0, _validateNode.default)({ + type: "TSEnumDeclaration", + id, + members + }); } -function tsEnumMember(id, initializer) { - return _builder.default.apply("TSEnumMember", arguments); +function tsEnumMember(id, initializer = null) { + return (0, _validateNode.default)({ + type: "TSEnumMember", + id, + initializer + }); } function tsModuleDeclaration(id, body) { - return _builder.default.apply("TSModuleDeclaration", arguments); + return (0, _validateNode.default)({ + type: "TSModuleDeclaration", + id, + body + }); } function tsModuleBlock(body) { - return _builder.default.apply("TSModuleBlock", arguments); + return (0, _validateNode.default)({ + type: "TSModuleBlock", + body + }); } -function tsImportType(argument, qualifier, typeParameters) { - return _builder.default.apply("TSImportType", arguments); +function tsImportType(argument, qualifier = null, typeParameters = null) { + return (0, _validateNode.default)({ + type: "TSImportType", + argument, + qualifier, + typeParameters + }); } function tsImportEqualsDeclaration(id, moduleReference) { - return _builder.default.apply("TSImportEqualsDeclaration", arguments); + return (0, _validateNode.default)({ + type: "TSImportEqualsDeclaration", + id, + moduleReference, + isExport: null + }); } function tsExternalModuleReference(expression) { - return _builder.default.apply("TSExternalModuleReference", arguments); + return (0, _validateNode.default)({ + type: "TSExternalModuleReference", + expression + }); } function tsNonNullExpression(expression) { - return _builder.default.apply("TSNonNullExpression", arguments); + return (0, _validateNode.default)({ + type: "TSNonNullExpression", + expression + }); } function tsExportAssignment(expression) { - return _builder.default.apply("TSExportAssignment", arguments); + return (0, _validateNode.default)({ + type: "TSExportAssignment", + expression + }); } function tsNamespaceExportDeclaration(id) { - return _builder.default.apply("TSNamespaceExportDeclaration", arguments); + return (0, _validateNode.default)({ + type: "TSNamespaceExportDeclaration", + id + }); } function tsTypeAnnotation(typeAnnotation) { - return _builder.default.apply("TSTypeAnnotation", arguments); + return (0, _validateNode.default)({ + type: "TSTypeAnnotation", + typeAnnotation + }); } function tsTypeParameterInstantiation(params) { - return _builder.default.apply("TSTypeParameterInstantiation", arguments); + return (0, _validateNode.default)({ + type: "TSTypeParameterInstantiation", + params + }); } function tsTypeParameterDeclaration(params) { - return _builder.default.apply("TSTypeParameterDeclaration", arguments); + return (0, _validateNode.default)({ + type: "TSTypeParameterDeclaration", + params + }); } -function tsTypeParameter(constraint, _default, name) { - return _builder.default.apply("TSTypeParameter", arguments); +function tsTypeParameter(constraint = null, _default = null, name) { + return (0, _validateNode.default)({ + type: "TSTypeParameter", + constraint, + default: _default, + name + }); } function NumberLiteral(value) { console.trace("The node type NumberLiteral has been renamed to NumericLiteral"); - return _builder.default.apply("NumberLiteral", arguments); + return numericLiteral(value); } -function RegexLiteral(pattern, flags) { +function RegexLiteral(pattern, flags = "") { console.trace("The node type RegexLiteral has been renamed to RegExpLiteral"); - return _builder.default.apply("RegexLiteral", arguments); + return regExpLiteral(pattern, flags); } function RestProperty(argument) { console.trace("The node type RestProperty has been renamed to RestElement"); - return _builder.default.apply("RestProperty", arguments); + return restElement(argument); } function SpreadProperty(argument) { console.trace("The node type SpreadProperty has been renamed to SpreadElement"); - return _builder.default.apply("SpreadProperty", arguments); -} \ No newline at end of file + return spreadElement(argument); +} + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/generated/uppercase.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/generated/uppercase.js index 95c9a5258a7..9a91ac34525 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/generated/uppercase.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/generated/uppercase.js @@ -1095,6 +1095,12 @@ Object.defineProperty(exports, "TSInferType", { return _index.tsInferType; } }); +Object.defineProperty(exports, "TSInstantiationExpression", { + enumerable: true, + get: function () { + return _index.tsInstantiationExpression; + } +}); Object.defineProperty(exports, "TSInterfaceBody", { enumerable: true, get: function () { @@ -1510,4 +1516,6 @@ Object.defineProperty(exports, "YieldExpression", { } }); -var _index = require("./index"); \ No newline at end of file +var _index = require("./index"); + +//# sourceMappingURL=uppercase.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/react/buildChildren.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/react/buildChildren.js index 20a194b6b9e..9019797c85b 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/react/buildChildren.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/react/buildChildren.js @@ -26,4 +26,6 @@ function buildChildren(node) { } return elements; -} \ No newline at end of file +} + +//# sourceMappingURL=buildChildren.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js index 9b53be29d32..1ff6389ce7b 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js @@ -9,8 +9,12 @@ var _generated = require("../generated"); var _removeTypeDuplicates = require("../../modifications/typescript/removeTypeDuplicates"); +var _index = require("../../validators/generated/index"); + function createTSUnionType(typeAnnotations) { - const types = typeAnnotations.map(type => type.typeAnnotation); + const types = typeAnnotations.map(type => { + return (0, _index.isTSTypeAnnotation)(type) ? type.typeAnnotation : type; + }); const flattened = (0, _removeTypeDuplicates.default)(types); if (flattened.length === 1) { @@ -18,4 +22,6 @@ function createTSUnionType(typeAnnotations) { } else { return (0, _generated.tsUnionType)(flattened); } -} \ No newline at end of file +} + +//# sourceMappingURL=createTSUnionType.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/validateNode.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/validateNode.js new file mode 100644 index 00000000000..f64001ec54c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/builders/validateNode.js @@ -0,0 +1,22 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = validateNode; + +var _validate = require("../validators/validate"); + +var _ = require(".."); + +function validateNode(node) { + const keys = _.BUILDER_KEYS[node.type]; + + for (const key of keys) { + (0, _validate.default)(node, key, node[key]); + } + + return node; +} + +//# sourceMappingURL=validateNode.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/clone.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/clone.js index e262c632d8d..8ab9af47173 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/clone.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/clone.js @@ -9,4 +9,6 @@ var _cloneNode = require("./cloneNode"); function clone(node) { return (0, _cloneNode.default)(node, false); -} \ No newline at end of file +} + +//# sourceMappingURL=clone.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneDeep.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneDeep.js index 9067e7b73d9..19149946bbf 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneDeep.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneDeep.js @@ -9,4 +9,6 @@ var _cloneNode = require("./cloneNode"); function cloneDeep(node) { return (0, _cloneNode.default)(node); -} \ No newline at end of file +} + +//# sourceMappingURL=cloneDeep.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js index a8c53dd4b1f..e010d9fd288 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js @@ -9,4 +9,6 @@ var _cloneNode = require("./cloneNode"); function cloneDeepWithoutLoc(node) { return (0, _cloneNode.default)(node, true, true); -} \ No newline at end of file +} + +//# sourceMappingURL=cloneDeepWithoutLoc.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneNode.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneNode.js index 5980f2d1ba9..57ced3ec8f0 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneNode.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneNode.js @@ -11,23 +11,27 @@ var _generated = require("../validators/generated"); const has = Function.call.bind(Object.prototype.hasOwnProperty); -function cloneIfNode(obj, deep, withoutLoc) { +function cloneIfNode(obj, deep, withoutLoc, commentsCache) { if (obj && typeof obj.type === "string") { - return cloneNode(obj, deep, withoutLoc); + return cloneNodeInternal(obj, deep, withoutLoc, commentsCache); } return obj; } -function cloneIfNodeOrArray(obj, deep, withoutLoc) { +function cloneIfNodeOrArray(obj, deep, withoutLoc, commentsCache) { if (Array.isArray(obj)) { - return obj.map(node => cloneIfNode(node, deep, withoutLoc)); + return obj.map(node => cloneIfNode(node, deep, withoutLoc, commentsCache)); } - return cloneIfNode(obj, deep, withoutLoc); + return cloneIfNode(obj, deep, withoutLoc, commentsCache); } function cloneNode(node, deep = true, withoutLoc = false) { + return cloneNodeInternal(node, deep, withoutLoc, new Map()); +} + +function cloneNodeInternal(node, deep = true, withoutLoc = false, commentsCache) { if (!node) return node; const { type @@ -44,7 +48,7 @@ function cloneNode(node, deep = true, withoutLoc = false) { } if (has(node, "typeAnnotation")) { - newNode.typeAnnotation = deep ? cloneIfNodeOrArray(node.typeAnnotation, true, withoutLoc) : node.typeAnnotation; + newNode.typeAnnotation = deep ? cloneIfNodeOrArray(node.typeAnnotation, true, withoutLoc, commentsCache) : node.typeAnnotation; } } else if (!has(_definitions.NODE_FIELDS, type)) { throw new Error(`Unknown node type: "${type}"`); @@ -52,7 +56,7 @@ function cloneNode(node, deep = true, withoutLoc = false) { for (const field of Object.keys(_definitions.NODE_FIELDS[type])) { if (has(node, field)) { if (deep) { - newNode[field] = (0, _generated.isFile)(node) && field === "comments" ? maybeCloneComments(node.comments, deep, withoutLoc) : cloneIfNodeOrArray(node[field], true, withoutLoc); + newNode[field] = (0, _generated.isFile)(node) && field === "comments" ? maybeCloneComments(node.comments, deep, withoutLoc, commentsCache) : cloneIfNodeOrArray(node[field], true, withoutLoc, commentsCache); } else { newNode[field] = node[field]; } @@ -69,15 +73,15 @@ function cloneNode(node, deep = true, withoutLoc = false) { } if (has(node, "leadingComments")) { - newNode.leadingComments = maybeCloneComments(node.leadingComments, deep, withoutLoc); + newNode.leadingComments = maybeCloneComments(node.leadingComments, deep, withoutLoc, commentsCache); } if (has(node, "innerComments")) { - newNode.innerComments = maybeCloneComments(node.innerComments, deep, withoutLoc); + newNode.innerComments = maybeCloneComments(node.innerComments, deep, withoutLoc, commentsCache); } if (has(node, "trailingComments")) { - newNode.trailingComments = maybeCloneComments(node.trailingComments, deep, withoutLoc); + newNode.trailingComments = maybeCloneComments(node.trailingComments, deep, withoutLoc, commentsCache); } if (has(node, "extra")) { @@ -87,28 +91,32 @@ function cloneNode(node, deep = true, withoutLoc = false) { return newNode; } -function maybeCloneComments(comments, deep, withoutLoc) { +function maybeCloneComments(comments, deep, withoutLoc, commentsCache) { if (!comments || !deep) { return comments; } - return comments.map(({ - type, - value, - loc - }) => { - if (withoutLoc) { - return { - type, - value, - loc: null - }; - } - - return { + return comments.map(comment => { + const cache = commentsCache.get(comment); + if (cache) return cache; + const { + type, + value, + loc + } = comment; + const ret = { type, value, loc }; + + if (withoutLoc) { + ret.loc = null; + } + + commentsCache.set(comment, ret); + return ret; }); -} \ No newline at end of file +} + +//# sourceMappingURL=cloneNode.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js index d0420b1c0de..13edfe1c78a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js @@ -9,4 +9,6 @@ var _cloneNode = require("./cloneNode"); function cloneWithoutLoc(node) { return (0, _cloneNode.default)(node, false, true); -} \ No newline at end of file +} + +//# sourceMappingURL=cloneWithoutLoc.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/addComment.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/addComment.js index de19ab74e84..888254022ac 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/addComment.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/addComment.js @@ -12,4 +12,6 @@ function addComment(node, type, content, line) { type: line ? "CommentLine" : "CommentBlock", value: content }]); -} \ No newline at end of file +} + +//# sourceMappingURL=addComment.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/addComments.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/addComments.js index 26c456fc301..b5f75c2f46c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/addComments.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/addComments.js @@ -20,4 +20,6 @@ function addComments(node, type, comments) { } return node; -} \ No newline at end of file +} + +//# sourceMappingURL=addComments.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritInnerComments.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritInnerComments.js index 4b5dc9cac2b..699aa033d59 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritInnerComments.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritInnerComments.js @@ -9,4 +9,6 @@ var _inherit = require("../utils/inherit"); function inheritInnerComments(child, parent) { (0, _inherit.default)("innerComments", child, parent); -} \ No newline at end of file +} + +//# sourceMappingURL=inheritInnerComments.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritLeadingComments.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritLeadingComments.js index 6aa2b250290..451e3e59e5c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritLeadingComments.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritLeadingComments.js @@ -9,4 +9,6 @@ var _inherit = require("../utils/inherit"); function inheritLeadingComments(child, parent) { (0, _inherit.default)("leadingComments", child, parent); -} \ No newline at end of file +} + +//# sourceMappingURL=inheritLeadingComments.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritTrailingComments.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritTrailingComments.js index 934ef0b9cad..da84aee5654 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritTrailingComments.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritTrailingComments.js @@ -9,4 +9,6 @@ var _inherit = require("../utils/inherit"); function inheritTrailingComments(child, parent) { (0, _inherit.default)("trailingComments", child, parent); -} \ No newline at end of file +} + +//# sourceMappingURL=inheritTrailingComments.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritsComments.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritsComments.js index 49476cffd95..8775ab10292 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritsComments.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/inheritsComments.js @@ -16,4 +16,6 @@ function inheritsComments(child, parent) { (0, _inheritLeadingComments.default)(child, parent); (0, _inheritInnerComments.default)(child, parent); return child; -} \ No newline at end of file +} + +//# sourceMappingURL=inheritsComments.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/removeComments.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/removeComments.js index fe34f1a8905..93470239cfb 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/removeComments.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/comments/removeComments.js @@ -13,4 +13,6 @@ function removeComments(node) { }); return node; -} \ No newline at end of file +} + +//# sourceMappingURL=removeComments.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/constants/generated/index.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/constants/generated/index.js index 1e109e6a4ae..f834e930886 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/constants/generated/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/constants/generated/index.js @@ -104,4 +104,6 @@ exports.TSTYPEELEMENT_TYPES = TSTYPEELEMENT_TYPES; const TSTYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["TSType"]; exports.TSTYPE_TYPES = TSTYPE_TYPES; const TSBASETYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["TSBaseType"]; -exports.TSBASETYPE_TYPES = TSBASETYPE_TYPES; \ No newline at end of file +exports.TSBASETYPE_TYPES = TSBASETYPE_TYPES; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/constants/index.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/constants/index.js index 3caa4387998..92484441d41 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/constants/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/constants/index.js @@ -26,7 +26,7 @@ const BOOLEAN_BINARY_OPERATORS = [...COMPARISON_BINARY_OPERATORS, ...BOOLEAN_NUM exports.BOOLEAN_BINARY_OPERATORS = BOOLEAN_BINARY_OPERATORS; const NUMBER_BINARY_OPERATORS = ["-", "/", "%", "*", "**", "&", "|", ">>", ">>>", "<<", "^"]; exports.NUMBER_BINARY_OPERATORS = NUMBER_BINARY_OPERATORS; -const BINARY_OPERATORS = ["+", ...NUMBER_BINARY_OPERATORS, ...BOOLEAN_BINARY_OPERATORS]; +const BINARY_OPERATORS = ["+", ...NUMBER_BINARY_OPERATORS, ...BOOLEAN_BINARY_OPERATORS, "|>"]; exports.BINARY_OPERATORS = BINARY_OPERATORS; const ASSIGNMENT_OPERATORS = ["=", "+=", ...NUMBER_BINARY_OPERATORS.map(op => op + "="), ...LOGICAL_OPERATORS.map(op => op + "=")]; exports.ASSIGNMENT_OPERATORS = ASSIGNMENT_OPERATORS; @@ -46,4 +46,6 @@ exports.INHERIT_KEYS = INHERIT_KEYS; const BLOCK_SCOPED_SYMBOL = Symbol.for("var used to be block scoped"); exports.BLOCK_SCOPED_SYMBOL = BLOCK_SCOPED_SYMBOL; const NOT_LOCAL_BINDING = Symbol.for("should not be considered a local binding"); -exports.NOT_LOCAL_BINDING = NOT_LOCAL_BINDING; \ No newline at end of file +exports.NOT_LOCAL_BINDING = NOT_LOCAL_BINDING; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/ensureBlock.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/ensureBlock.js index 56fdf1fdb43..2df8c63278f 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/ensureBlock.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/ensureBlock.js @@ -8,5 +8,9 @@ exports.default = ensureBlock; var _toBlock = require("./toBlock"); function ensureBlock(node, key = "body") { - return node[key] = (0, _toBlock.default)(node[key], node); -} \ No newline at end of file + const result = (0, _toBlock.default)(node[key], node); + node[key] = result; + return result; +} + +//# sourceMappingURL=ensureBlock.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js index 379e5ffe099..bd97958bf52 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js @@ -72,4 +72,6 @@ function gatherSequenceExpressions(nodes, scope, declars) { } else { return (0, _generated2.sequenceExpression)(exprs); } -} \ No newline at end of file +} + +//# sourceMappingURL=gatherSequenceExpressions.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js index 6bbce6e5578..e9a3ef138c9 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js @@ -11,4 +11,6 @@ function toBindingIdentifierName(name) { name = (0, _toIdentifier.default)(name); if (name === "eval" || name === "arguments") name = "_" + name; return name; -} \ No newline at end of file +} + +//# sourceMappingURL=toBindingIdentifierName.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toBlock.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toBlock.js index 19886833fa3..eb726d6e988 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toBlock.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toBlock.js @@ -31,4 +31,6 @@ function toBlock(node, parent) { } return (0, _generated2.blockStatement)(blockNodes); -} \ No newline at end of file +} + +//# sourceMappingURL=toBlock.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toComputedKey.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toComputedKey.js index 31e6770f6f7..4873714dfbc 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toComputedKey.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toComputedKey.js @@ -12,4 +12,6 @@ var _generated2 = require("../builders/generated"); function toComputedKey(node, key = node.key || node.property) { if (!node.computed && (0, _generated.isIdentifier)(key)) key = (0, _generated2.stringLiteral)(key.name); return key; -} \ No newline at end of file +} + +//# sourceMappingURL=toComputedKey.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toExpression.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toExpression.js index 2d944f0e98d..c1badadbb53 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toExpression.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toExpression.js @@ -30,4 +30,6 @@ function toExpression(node) { } return node; -} \ No newline at end of file +} + +//# sourceMappingURL=toExpression.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toIdentifier.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toIdentifier.js index 2fd4028d2db..2eac4ae0a64 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toIdentifier.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toIdentifier.js @@ -27,4 +27,6 @@ function toIdentifier(input) { } return name || "_"; -} \ No newline at end of file +} + +//# sourceMappingURL=toIdentifier.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toKeyAlias.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toKeyAlias.js index 49ef4b8ad64..7a804b60142 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toKeyAlias.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toKeyAlias.js @@ -43,4 +43,6 @@ toKeyAlias.increment = function () { } else { return toKeyAlias.uid++; } -}; \ No newline at end of file +}; + +//# sourceMappingURL=toKeyAlias.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toSequenceExpression.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toSequenceExpression.js index c3d3133ecf3..87702bb440e 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toSequenceExpression.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toSequenceExpression.js @@ -18,4 +18,6 @@ function toSequenceExpression(nodes, scope) { } return result; -} \ No newline at end of file +} + +//# sourceMappingURL=toSequenceExpression.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toStatement.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toStatement.js index da020a61a01..d92730735b1 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toStatement.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/toStatement.js @@ -44,4 +44,6 @@ function toStatement(node, ignore) { node.type = newType; return node; -} \ No newline at end of file +} + +//# sourceMappingURL=toStatement.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/valueToNode.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/valueToNode.js index b3e531b3551..3b9b5b76831 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/valueToNode.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/converters/valueToNode.js @@ -96,4 +96,6 @@ function valueToNode(value) { } throw new Error("don't know how to turn this value into a node"); -} \ No newline at end of file +} + +//# sourceMappingURL=valueToNode.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/core.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/core.js index 1c46733926b..643ab5825f9 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/core.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/core.js @@ -11,6 +11,8 @@ var _isValidIdentifier = require("../validators/isValidIdentifier"); var _helperValidatorIdentifier = require("@babel/helper-validator-identifier"); +var _helperStringParser = require("@babel/helper-string-parser"); + var _constants = require("../constants"); var _utils = require("./utils"); @@ -43,7 +45,7 @@ defineType("AssignmentExpression", { }() }, left: { - validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("LVal") : (0, _utils.assertNodeType)("Identifier", "MemberExpression", "ArrayPattern", "ObjectPattern") + validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("LVal") : (0, _utils.assertNodeType)("Identifier", "MemberExpression", "ArrayPattern", "ObjectPattern", "TSAsExpression", "TSTypeAssertion", "TSNonNullExpression") }, right: { validate: (0, _utils.assertNodeType)("Expression") @@ -63,13 +65,12 @@ defineType("BinaryExpression", { validate: function () { const expression = (0, _utils.assertNodeType)("Expression"); const inOp = (0, _utils.assertNodeType)("Expression", "PrivateName"); - - const validator = function (node, key, val) { + const validator = Object.assign(function (node, key, val) { const validator = node.operator === "in" ? inOp : expression; validator(node, key, val); - }; - - validator.oneOfNodeTypes = ["Expression", "PrivateName"]; + }, { + oneOfNodeTypes: ["Expression", "PrivateName"] + }); return validator; }() }, @@ -134,7 +135,7 @@ defineType("CallExpression", { aliases: ["Expression"], fields: Object.assign({ callee: { - validate: (0, _utils.assertNodeType)("Expression", "V8IntrinsicIdentifier") + validate: (0, _utils.assertNodeType)("Expression", "Super", "V8IntrinsicIdentifier") }, arguments: { validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "SpreadElement", "JSXNamespacedName", "ArgumentPlaceholder"))) @@ -248,7 +249,7 @@ defineType("ForInStatement", { aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement"], fields: { left: { - validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("VariableDeclaration", "LVal") : (0, _utils.assertNodeType)("VariableDeclaration", "Identifier", "MemberExpression", "ArrayPattern", "ObjectPattern") + validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("VariableDeclaration", "LVal") : (0, _utils.assertNodeType)("VariableDeclaration", "Identifier", "MemberExpression", "ArrayPattern", "ObjectPattern", "TSAsExpression", "TSTypeAssertion", "TSNonNullExpression") }, right: { validate: (0, _utils.assertNodeType)("Expression") @@ -279,7 +280,8 @@ defineType("ForStatement", { } } }); -const functionCommon = { + +const functionCommon = () => ({ params: { validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Identifier", "Pattern", "RestElement"))) }, @@ -289,9 +291,11 @@ const functionCommon = { async: { default: false } -}; +}); + exports.functionCommon = functionCommon; -const functionTypeAnnotationCommon = { + +const functionTypeAnnotationCommon = () => ({ returnType: { validate: (0, _utils.assertNodeType)("TypeAnnotation", "TSTypeAnnotation", "Noop"), optional: true @@ -300,9 +304,11 @@ const functionTypeAnnotationCommon = { validate: (0, _utils.assertNodeType)("TypeParameterDeclaration", "TSTypeParameterDeclaration", "Noop"), optional: true } -}; +}); + exports.functionTypeAnnotationCommon = functionTypeAnnotationCommon; -const functionDeclarationCommon = Object.assign({}, functionCommon, { + +const functionDeclarationCommon = () => Object.assign({}, functionCommon(), { declare: { validate: (0, _utils.assertValueType)("boolean"), optional: true @@ -312,13 +318,18 @@ const functionDeclarationCommon = Object.assign({}, functionCommon, { optional: true } }); + exports.functionDeclarationCommon = functionDeclarationCommon; defineType("FunctionDeclaration", { builder: ["id", "params", "body", "generator", "async"], visitor: ["id", "params", "body", "returnType", "typeParameters"], - fields: Object.assign({}, functionDeclarationCommon, functionTypeAnnotationCommon, { + fields: Object.assign({}, functionDeclarationCommon(), functionTypeAnnotationCommon(), { body: { validate: (0, _utils.assertNodeType)("BlockStatement") + }, + predicate: { + validate: (0, _utils.assertNodeType)("DeclaredPredicate", "InferredPredicate"), + optional: true } }), aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Statement", "Pureish", "Declaration"], @@ -335,31 +346,38 @@ defineType("FunctionDeclaration", { defineType("FunctionExpression", { inherits: "FunctionDeclaration", aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Expression", "Pureish"], - fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, { + fields: Object.assign({}, functionCommon(), functionTypeAnnotationCommon(), { id: { validate: (0, _utils.assertNodeType)("Identifier"), optional: true }, body: { validate: (0, _utils.assertNodeType)("BlockStatement") + }, + predicate: { + validate: (0, _utils.assertNodeType)("DeclaredPredicate", "InferredPredicate"), + optional: true } }) }); -const patternLikeCommon = { + +const patternLikeCommon = () => ({ typeAnnotation: { validate: (0, _utils.assertNodeType)("TypeAnnotation", "TSTypeAnnotation", "Noop"), optional: true }, decorators: { - validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))) + validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))), + optional: true } -}; +}); + exports.patternLikeCommon = patternLikeCommon; defineType("Identifier", { builder: ["name"], visitor: ["typeAnnotation", "decorators"], aliases: ["Expression", "PatternLike", "LVal", "TSEntityName"], - fields: Object.assign({}, patternLikeCommon, { + fields: Object.assign({}, patternLikeCommon(), { name: { validate: (0, _utils.chain)((0, _utils.assertValueType)("string"), Object.assign(function (node, key, val) { if (!process.env.BABEL_TYPES_8_BREAKING) return; @@ -514,7 +532,7 @@ defineType("MemberExpression", { aliases: ["Expression", "LVal"], fields: Object.assign({ object: { - validate: (0, _utils.assertNodeType)("Expression") + validate: (0, _utils.assertNodeType)("Expression", "Super") }, property: { validate: function () { @@ -580,7 +598,7 @@ defineType("ObjectExpression", { }); defineType("ObjectMethod", { builder: ["kind", "key", "params", "body", "computed", "generator", "async"], - fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, { + fields: Object.assign({}, functionCommon(), functionTypeAnnotationCommon(), { kind: Object.assign({ validate: (0, _utils.assertOneOf)("method", "get", "set") }, !process.env.BABEL_TYPES_8_BREAKING ? { @@ -591,7 +609,7 @@ defineType("ObjectMethod", { }, key: { validate: function () { - const normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral"); + const normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral", "BigIntLiteral"); const computed = (0, _utils.assertNodeType)("Expression"); const validator = function (node, key, val) { @@ -599,7 +617,7 @@ defineType("ObjectMethod", { validator(node, key, val); }; - validator.oneOfNodeTypes = ["Expression", "Identifier", "StringLiteral", "NumericLiteral"]; + validator.oneOfNodeTypes = ["Expression", "Identifier", "StringLiteral", "NumericLiteral", "BigIntLiteral"]; return validator; }() }, @@ -622,15 +640,14 @@ defineType("ObjectProperty", { }, key: { validate: function () { - const normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral"); + const normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral", "BigIntLiteral", "DecimalLiteral", "PrivateName"); const computed = (0, _utils.assertNodeType)("Expression"); - - const validator = function (node, key, val) { + const validator = Object.assign(function (node, key, val) { const validator = node.computed ? computed : normal; validator(node, key, val); - }; - - validator.oneOfNodeTypes = ["Expression", "Identifier", "StringLiteral", "NumericLiteral"]; + }, { + oneOfNodeTypes: ["Expression", "Identifier", "StringLiteral", "NumericLiteral", "BigIntLiteral", "DecimalLiteral", "PrivateName"] + }); return validator; }() }, @@ -663,7 +680,7 @@ defineType("ObjectProperty", { visitor: ["key", "value", "decorators"], aliases: ["UserWhitespacable", "Property", "ObjectMember"], validate: function () { - const pattern = (0, _utils.assertNodeType)("Identifier", "Pattern"); + const pattern = (0, _utils.assertNodeType)("Identifier", "Pattern", "TSAsExpression", "TSNonNullExpression", "TSTypeAssertion"); const expression = (0, _utils.assertNodeType)("Expression"); return function (parent, key, node) { if (!process.env.BABEL_TYPES_8_BREAKING) return; @@ -677,9 +694,9 @@ defineType("RestElement", { builder: ["argument"], aliases: ["LVal", "PatternLike"], deprecatedAlias: "RestProperty", - fields: Object.assign({}, patternLikeCommon, { + fields: Object.assign({}, patternLikeCommon(), { argument: { - validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("LVal") : (0, _utils.assertNodeType)("Identifier", "ArrayPattern", "ObjectPattern", "MemberExpression") + validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("LVal") : (0, _utils.assertNodeType)("Identifier", "ArrayPattern", "ObjectPattern", "MemberExpression", "TSAsExpression", "TSTypeAssertion", "TSNonNullExpression") }, optional: { validate: (0, _utils.assertValueType)("boolean"), @@ -693,7 +710,7 @@ defineType("RestElement", { if (!match) throw new Error("Internal Babel error: malformed key."); const [, listKey, index] = match; - if (parent[listKey].length > index + 1) { + if (parent[listKey].length > +index + 1) { throw new TypeError(`RestElement must be last element of ${listKey}`); } } @@ -904,9 +921,9 @@ defineType("AssignmentPattern", { visitor: ["left", "right", "decorators"], builder: ["left", "right"], aliases: ["Pattern", "PatternLike", "LVal"], - fields: Object.assign({}, patternLikeCommon, { + fields: Object.assign({}, patternLikeCommon(), { left: { - validate: (0, _utils.assertNodeType)("Identifier", "ObjectPattern", "ArrayPattern", "MemberExpression") + validate: (0, _utils.assertNodeType)("Identifier", "ObjectPattern", "ArrayPattern", "MemberExpression", "TSAsExpression", "TSTypeAssertion", "TSNonNullExpression") }, right: { validate: (0, _utils.assertNodeType)("Expression") @@ -921,9 +938,9 @@ defineType("ArrayPattern", { visitor: ["elements", "typeAnnotation"], builder: ["elements"], aliases: ["Pattern", "PatternLike", "LVal"], - fields: Object.assign({}, patternLikeCommon, { + fields: Object.assign({}, patternLikeCommon(), { elements: { - validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)("null", "PatternLike"))) + validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)("null", "PatternLike", "LVal"))) }, decorators: { validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))), @@ -939,12 +956,16 @@ defineType("ArrowFunctionExpression", { builder: ["params", "body", "async"], visitor: ["params", "body", "returnType", "typeParameters"], aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Expression", "Pureish"], - fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, { + fields: Object.assign({}, functionCommon(), functionTypeAnnotationCommon(), { expression: { validate: (0, _utils.assertValueType)("boolean") }, body: { validate: (0, _utils.assertNodeType)("BlockStatement", "Expression") + }, + predicate: { + validate: (0, _utils.assertNodeType)("DeclaredPredicate", "InferredPredicate"), + optional: true } }) }); @@ -1067,7 +1088,7 @@ defineType("ExportDefaultDeclaration", { aliases: ["Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration"], fields: { declaration: { - validate: (0, _utils.assertNodeType)("FunctionDeclaration", "TSDeclareFunction", "ClassDeclaration", "Expression") + validate: (0, _utils.assertNodeType)("TSDeclareFunction", "FunctionDeclaration", "ClassDeclaration", "Expression") }, exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("value")) } @@ -1145,7 +1166,7 @@ defineType("ForOfStatement", { } const declaration = (0, _utils.assertNodeType)("VariableDeclaration"); - const lval = (0, _utils.assertNodeType)("Identifier", "MemberExpression", "ArrayPattern", "ObjectPattern"); + const lval = (0, _utils.assertNodeType)("Identifier", "MemberExpression", "ArrayPattern", "ObjectPattern", "TSAsExpression", "TSTypeAssertion", "TSNonNullExpression"); return function (node, key, val) { if ((0, _is.default)("VariableDeclaration", val)) { declaration(node, key, val); @@ -1257,7 +1278,8 @@ defineType("MetaProperty", { } } }); -const classMethodOrPropertyCommon = { + +const classMethodOrPropertyCommon = () => ({ abstract: { validate: (0, _utils.assertValueType)("boolean"), optional: true @@ -1287,11 +1309,13 @@ const classMethodOrPropertyCommon = { const validator = node.computed ? computed : normal; validator(node, key, val); }; - }(), (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral", "Expression")) + }(), (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral", "BigIntLiteral", "Expression")) } -}; +}); + exports.classMethodOrPropertyCommon = classMethodOrPropertyCommon; -const classMethodOrDeclareMethodCommon = Object.assign({}, functionCommon, classMethodOrPropertyCommon, { + +const classMethodOrDeclareMethodCommon = () => Object.assign({}, functionCommon(), classMethodOrPropertyCommon(), { params: { validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Identifier", "Pattern", "RestElement", "TSParameterProperty"))) }, @@ -1308,12 +1332,13 @@ const classMethodOrDeclareMethodCommon = Object.assign({}, functionCommon, class optional: true } }); + exports.classMethodOrDeclareMethodCommon = classMethodOrDeclareMethodCommon; defineType("ClassMethod", { aliases: ["Function", "Scopable", "BlockParent", "FunctionParent", "Method"], builder: ["kind", "key", "params", "body", "computed", "static", "generator", "async"], visitor: ["key", "params", "body", "decorators", "returnType", "typeParameters"], - fields: Object.assign({}, classMethodOrDeclareMethodCommon, functionTypeAnnotationCommon, { + fields: Object.assign({}, classMethodOrDeclareMethodCommon(), functionTypeAnnotationCommon(), { body: { validate: (0, _utils.assertNodeType)("BlockStatement") } @@ -1323,7 +1348,7 @@ defineType("ObjectPattern", { visitor: ["properties", "typeAnnotation", "decorators"], builder: ["properties"], aliases: ["Pattern", "PatternLike", "LVal"], - fields: Object.assign({}, patternLikeCommon, { + fields: Object.assign({}, patternLikeCommon(), { properties: { validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("RestElement", "ObjectProperty"))) } @@ -1363,7 +1388,7 @@ defineType("TemplateElement", { builder: ["value", "tail"], fields: { value: { - validate: (0, _utils.assertShape)({ + validate: (0, _utils.chain)((0, _utils.assertShape)({ raw: { validate: (0, _utils.assertValueType)("string") }, @@ -1371,6 +1396,39 @@ defineType("TemplateElement", { validate: (0, _utils.assertValueType)("string"), optional: true } + }), function templateElementCookedValidator(node) { + const raw = node.value.raw; + let str, + containsInvalid, + unterminatedCalled = false; + + try { + const error = () => { + throw new Error(); + }; + + ({ + str, + containsInvalid + } = (0, _helperStringParser.readStringContents)("template", raw, 0, 0, 0, { + unterminated() { + unterminatedCalled = true; + }, + + strictNumericEscape: error, + invalidEscapeSequence: error, + numericSeparatorInEscapeSequence: error, + unexpectedNumericSeparator: error, + invalidDigit: error, + invalidCodePoint: error + })); + } catch (_unused) { + unterminatedCalled = true; + containsInvalid = true; + } + + if (!unterminatedCalled) throw new Error("Invalid raw"); + node.value.cooked = containsInvalid ? null : str; }) }, tail: { @@ -1460,13 +1518,12 @@ defineType("OptionalMemberExpression", { validate: function () { const normal = (0, _utils.assertNodeType)("Identifier"); const computed = (0, _utils.assertNodeType)("Expression"); - - const validator = function (node, key, val) { + const validator = Object.assign(function (node, key, val) { const validator = node.computed ? computed : normal; validator(node, key, val); - }; - - validator.oneOfNodeTypes = ["Expression", "Identifier"]; + }, { + oneOfNodeTypes: ["Expression", "Identifier"] + }); return validator; }() }, @@ -1506,7 +1563,7 @@ defineType("ClassProperty", { visitor: ["key", "value", "typeAnnotation", "decorators"], builder: ["key", "value", "typeAnnotation", "decorators", "computed", "static"], aliases: ["Property"], - fields: Object.assign({}, classMethodOrPropertyCommon, { + fields: Object.assign({}, classMethodOrPropertyCommon(), { value: { validate: (0, _utils.assertNodeType)("Expression"), optional: true @@ -1541,16 +1598,16 @@ defineType("ClassAccessorProperty", { visitor: ["key", "value", "typeAnnotation", "decorators"], builder: ["key", "value", "typeAnnotation", "decorators", "computed", "static"], aliases: ["Property", "Accessor"], - fields: Object.assign({}, classMethodOrPropertyCommon, { + fields: Object.assign({}, classMethodOrPropertyCommon(), { key: { validate: (0, _utils.chain)(function () { - const normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral", "PrivateName"); + const normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral", "BigIntLiteral", "PrivateName"); const computed = (0, _utils.assertNodeType)("Expression"); return function (node, key, val) { const validator = node.computed ? computed : normal; validator(node, key, val); }; - }(), (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral", "Expression", "PrivateName")) + }(), (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral", "BigIntLiteral", "Expression", "PrivateName")) }, value: { validate: (0, _utils.assertNodeType)("Expression"), @@ -1602,6 +1659,10 @@ defineType("ClassPrivateProperty", { validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))), optional: true }, + static: { + validate: (0, _utils.assertValueType)("boolean"), + default: false + }, readonly: { validate: (0, _utils.assertValueType)("boolean"), optional: true @@ -1620,7 +1681,11 @@ defineType("ClassPrivateMethod", { builder: ["kind", "key", "params", "body", "static"], visitor: ["key", "params", "body", "decorators", "returnType", "typeParameters"], aliases: ["Function", "Scopable", "BlockParent", "FunctionParent", "Method", "Private"], - fields: Object.assign({}, classMethodOrDeclareMethodCommon, functionTypeAnnotationCommon, { + fields: Object.assign({}, classMethodOrDeclareMethodCommon(), functionTypeAnnotationCommon(), { + kind: { + validate: (0, _utils.assertOneOf)("get", "set", "method"), + default: "method" + }, key: { validate: (0, _utils.assertNodeType)("PrivateName") }, @@ -1646,4 +1711,6 @@ defineType("StaticBlock", { } }, aliases: ["Scopable", "BlockParent", "FunctionParent"] -}); \ No newline at end of file +}); + +//# sourceMappingURL=core.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/experimental.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/experimental.js index be97c0d7916..7244a5b25e4 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/experimental.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/experimental.js @@ -130,4 +130,6 @@ var _utils = require("./utils"); }); (0, _utils.default)("PipelinePrimaryTopicReference", { aliases: ["Expression"] -}); \ No newline at end of file +}); + +//# sourceMappingURL=experimental.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/flow.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/flow.js index 706de242523..97dedae8b42 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/flow.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/flow.js @@ -4,14 +4,14 @@ var _utils = require("./utils"); const defineType = (0, _utils.defineAliasedType)("Flow"); -const defineInterfaceishType = (name, typeParameterType = "TypeParameterDeclaration") => { +const defineInterfaceishType = name => { defineType(name, { builder: ["id", "typeParameters", "extends", "body"], visitor: ["id", "typeParameters", "extends", "mixins", "implements", "body"], aliases: ["FlowDeclaration", "Statement", "Declaration"], fields: { id: (0, _utils.validateType)("Identifier"), - typeParameters: (0, _utils.validateOptionalType)(typeParameterType), + typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"), extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")), mixins: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")), implements: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ClassImplements")), @@ -213,9 +213,21 @@ defineType("ObjectTypeAnnotation", { builder: ["properties", "indexers", "callProperties", "internalSlots", "exact"], fields: { properties: (0, _utils.validate)((0, _utils.arrayOfType)(["ObjectTypeProperty", "ObjectTypeSpreadProperty"])), - indexers: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeIndexer")), - callProperties: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeCallProperty")), - internalSlots: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeInternalSlot")), + indexers: { + validate: (0, _utils.arrayOfType)("ObjectTypeIndexer"), + optional: true, + default: [] + }, + callProperties: { + validate: (0, _utils.arrayOfType)("ObjectTypeCallProperty"), + optional: true, + default: [] + }, + internalSlots: { + validate: (0, _utils.arrayOfType)("ObjectTypeInternalSlot"), + optional: true, + default: [] + }, exact: { validate: (0, _utils.assertValueType)("boolean"), default: false @@ -471,4 +483,6 @@ defineType("OptionalIndexedAccessType", { indexType: (0, _utils.validateType)("FlowType"), optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")) } -}); \ No newline at end of file +}); + +//# sourceMappingURL=flow.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/index.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/index.js index 9b7c92cfe76..7de34f57dac 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/index.js @@ -100,4 +100,6 @@ _toFastProperties(_placeholders.PLACEHOLDERS_ALIAS); _toFastProperties(_placeholders.PLACEHOLDERS_FLIPPED_ALIAS); const TYPES = [].concat(Object.keys(_utils.VISITOR_KEYS), Object.keys(_utils.FLIPPED_ALIAS_KEYS), Object.keys(_utils.DEPRECATED_KEYS)); -exports.TYPES = TYPES; \ No newline at end of file +exports.TYPES = TYPES; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/jsx.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/jsx.js index 4d7fb75f722..dc3af454819 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/jsx.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/jsx.js @@ -29,7 +29,7 @@ defineType("JSXElement", { builder: ["openingElement", "closingElement", "children", "selfClosing"], visitor: ["openingElement", "children", "closingElement"], aliases: ["Immutable", "Expression"], - fields: { + fields: Object.assign({ openingElement: { validate: (0, _utils.assertNodeType)("JSXOpeningElement") }, @@ -39,12 +39,13 @@ defineType("JSXElement", { }, children: { validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("JSXText", "JSXExpressionContainer", "JSXSpreadChild", "JSXElement", "JSXFragment"))) - }, + } + }, { selfClosing: { validate: (0, _utils.assertValueType)("boolean"), optional: true } - } + }) }); defineType("JSXEmptyExpression", {}); defineType("JSXExpressionContainer", { @@ -153,4 +154,6 @@ defineType("JSXOpeningFragment", { }); defineType("JSXClosingFragment", { aliases: ["Immutable"] -}); \ No newline at end of file +}); + +//# sourceMappingURL=jsx.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/misc.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/misc.js index 07898bdaf96..2c8b07a3bd1 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/misc.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/misc.js @@ -29,4 +29,6 @@ defineType("V8IntrinsicIdentifier", { validate: (0, _utils.assertValueType)("string") } } -}); \ No newline at end of file +}); + +//# sourceMappingURL=misc.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/placeholders.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/placeholders.js index 7277239ae41..5dd4f7f0d86 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/placeholders.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/placeholders.js @@ -30,4 +30,6 @@ Object.keys(PLACEHOLDERS_ALIAS).forEach(type => { PLACEHOLDERS_FLIPPED_ALIAS[alias].push(type); }); -}); \ No newline at end of file +}); + +//# sourceMappingURL=placeholders.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/typescript.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/typescript.js index 3f4382a695c..87771c99361 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/typescript.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/typescript.js @@ -8,7 +8,8 @@ var _is = require("../validators/is"); const defineType = (0, _utils.defineAliasedType)("TypeScript"); const bool = (0, _utils.assertValueType)("boolean"); -const tSFunctionTypeAnnotationCommon = { + +const tSFunctionTypeAnnotationCommon = () => ({ returnType: { validate: (0, _utils.assertNodeType)("TSTypeAnnotation", "Noop"), optional: true @@ -17,7 +18,8 @@ const tSFunctionTypeAnnotationCommon = { validate: (0, _utils.assertNodeType)("TSTypeParameterDeclaration", "Noop"), optional: true } -}; +}); + defineType("TSParameterProperty", { aliases: ["LVal"], visitor: ["parameter"], @@ -46,11 +48,11 @@ defineType("TSParameterProperty", { defineType("TSDeclareFunction", { aliases: ["Statement", "Declaration"], visitor: ["id", "typeParameters", "params", "returnType"], - fields: Object.assign({}, _core.functionDeclarationCommon, tSFunctionTypeAnnotationCommon) + fields: Object.assign({}, (0, _core.functionDeclarationCommon)(), tSFunctionTypeAnnotationCommon()) }); defineType("TSDeclareMethod", { visitor: ["decorators", "key", "typeParameters", "params", "returnType"], - fields: Object.assign({}, _core.classMethodOrDeclareMethodCommon, tSFunctionTypeAnnotationCommon) + fields: Object.assign({}, (0, _core.classMethodOrDeclareMethodCommon)(), tSFunctionTypeAnnotationCommon()) }); defineType("TSQualifiedName", { aliases: ["TSEntityName"], @@ -60,27 +62,33 @@ defineType("TSQualifiedName", { right: (0, _utils.validateType)("Identifier") } }); -const signatureDeclarationCommon = { + +const signatureDeclarationCommon = () => ({ typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterDeclaration"), ["parameters"]: (0, _utils.validateArrayOfType)(["Identifier", "RestElement"]), ["typeAnnotation"]: (0, _utils.validateOptionalType)("TSTypeAnnotation") -}; +}); + const callConstructSignatureDeclaration = { aliases: ["TSTypeElement"], visitor: ["typeParameters", "parameters", "typeAnnotation"], - fields: signatureDeclarationCommon + fields: signatureDeclarationCommon() }; defineType("TSCallSignatureDeclaration", callConstructSignatureDeclaration); defineType("TSConstructSignatureDeclaration", callConstructSignatureDeclaration); -const namedTypeElementCommon = { + +const namedTypeElementCommon = () => ({ key: (0, _utils.validateType)("Expression"), - computed: (0, _utils.validate)(bool), + computed: { + default: false + }, optional: (0, _utils.validateOptional)(bool) -}; +}); + defineType("TSPropertySignature", { aliases: ["TSTypeElement"], visitor: ["key", "typeAnnotation", "initializer"], - fields: Object.assign({}, namedTypeElementCommon, { + fields: Object.assign({}, namedTypeElementCommon(), { readonly: (0, _utils.validateOptional)(bool), typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation"), initializer: (0, _utils.validateOptionalType)("Expression"), @@ -92,7 +100,7 @@ defineType("TSPropertySignature", { defineType("TSMethodSignature", { aliases: ["TSTypeElement"], visitor: ["key", "typeParameters", "parameters", "typeAnnotation"], - fields: Object.assign({}, signatureDeclarationCommon, namedTypeElementCommon, { + fields: Object.assign({}, signatureDeclarationCommon(), namedTypeElementCommon(), { kind: { validate: (0, _utils.assertOneOf)("method", "get", "set") } @@ -128,10 +136,10 @@ const fnOrCtrBase = { visitor: ["typeParameters", "parameters", "typeAnnotation"] }; defineType("TSFunctionType", Object.assign({}, fnOrCtrBase, { - fields: signatureDeclarationCommon + fields: signatureDeclarationCommon() })); defineType("TSConstructorType", Object.assign({}, fnOrCtrBase, { - fields: Object.assign({}, signatureDeclarationCommon, { + fields: Object.assign({}, signatureDeclarationCommon(), { abstract: (0, _utils.validateOptional)(bool) }) })); @@ -155,9 +163,10 @@ defineType("TSTypePredicate", { }); defineType("TSTypeQuery", { aliases: ["TSType"], - visitor: ["exprName"], + visitor: ["exprName", "typeParameters"], fields: { - exprName: (0, _utils.validateType)(["TSEntityName", "TSImportType"]) + exprName: (0, _utils.validateType)(["TSEntityName", "TSImportType"]), + typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation") } }); defineType("TSTypeLiteral", { @@ -260,9 +269,9 @@ defineType("TSMappedType", { aliases: ["TSType"], visitor: ["typeParameter", "typeAnnotation", "nameType"], fields: { - readonly: (0, _utils.validateOptional)(bool), + readonly: (0, _utils.validateOptional)((0, _utils.assertOneOf)(true, false, "+", "-")), typeParameter: (0, _utils.validateType)("TSTypeParameter"), - optional: (0, _utils.validateOptional)(bool), + optional: (0, _utils.validateOptional)((0, _utils.assertOneOf)(true, false, "+", "-")), typeAnnotation: (0, _utils.validateOptionalType)("TSType"), nameType: (0, _utils.validateOptionalType)("TSType") } @@ -275,7 +284,7 @@ defineType("TSLiteralType", { validate: function () { const unaryExpression = (0, _utils.assertNodeType)("NumericLiteral", "BigIntLiteral"); const unaryOperator = (0, _utils.assertOneOf)("-"); - const literal = (0, _utils.assertNodeType)("NumericLiteral", "StringLiteral", "BooleanLiteral", "BigIntLiteral"); + const literal = (0, _utils.assertNodeType)("NumericLiteral", "StringLiteral", "BooleanLiteral", "BigIntLiteral", "TemplateLiteral"); function validator(parent, key, node) { if ((0, _is.default)("UnaryExpression", node)) { @@ -286,7 +295,7 @@ defineType("TSLiteralType", { } } - validator.oneOfNodeTypes = ["NumericLiteral", "StringLiteral", "BooleanLiteral", "BigIntLiteral", "UnaryExpression"]; + validator.oneOfNodeTypes = ["NumericLiteral", "StringLiteral", "BooleanLiteral", "BigIntLiteral", "TemplateLiteral", "UnaryExpression"]; return validator; }() } @@ -327,8 +336,16 @@ defineType("TSTypeAliasDeclaration", { typeAnnotation: (0, _utils.validateType)("TSType") } }); -defineType("TSAsExpression", { +defineType("TSInstantiationExpression", { aliases: ["Expression"], + visitor: ["expression", "typeParameters"], + fields: { + expression: (0, _utils.validateType)("Expression"), + typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation") + } +}); +defineType("TSAsExpression", { + aliases: ["Expression", "LVal", "PatternLike"], visitor: ["expression", "typeAnnotation"], fields: { expression: (0, _utils.validateType)("Expression"), @@ -336,7 +353,7 @@ defineType("TSAsExpression", { } }); defineType("TSTypeAssertion", { - aliases: ["Expression"], + aliases: ["Expression", "LVal", "PatternLike"], visitor: ["typeAnnotation", "expression"], fields: { typeAnnotation: (0, _utils.validateType)("TSType"), @@ -407,7 +424,7 @@ defineType("TSExternalModuleReference", { } }); defineType("TSNonNullExpression", { - aliases: ["Expression"], + aliases: ["Expression", "LVal", "PatternLike"], visitor: ["expression"], fields: { expression: (0, _utils.validateType)("Expression") @@ -458,6 +475,14 @@ defineType("TSTypeParameter", { name: { validate: (0, _utils.assertValueType)("string") }, + in: { + validate: (0, _utils.assertValueType)("boolean"), + optional: true + }, + out: { + validate: (0, _utils.assertValueType)("boolean"), + optional: true + }, constraint: { validate: (0, _utils.assertNodeType)("TSType"), optional: true @@ -467,4 +492,6 @@ defineType("TSTypeParameter", { optional: true } } -}); \ No newline at end of file +}); + +//# sourceMappingURL=typescript.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/utils.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/utils.js index 70263e5cd3a..835f4982aa3 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/utils.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/definitions/utils.js @@ -340,4 +340,6 @@ function defineType(type, opts = {}) { store[type] = opts; } -const store = {}; \ No newline at end of file +const store = {}; + +//# sourceMappingURL=utils.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/index.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/index.js index 677a3311529..1bd3c44946d 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/index.js @@ -644,4 +644,6 @@ const react = { isCompatTag: _isCompatTag.default, buildChildren: _buildChildren.default }; -exports.react = react; \ No newline at end of file +exports.react = react; + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/index.js.flow b/tools/node_modules/eslint/node_modules/@babel/types/lib/index.js.flow index 331add0f3c8..84de6bce4f6 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/index.js.flow +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/index.js.flow @@ -52,7 +52,7 @@ declare class BabelNodeAssignmentExpression extends BabelNode { declare class BabelNodeBinaryExpression extends BabelNode { type: "BinaryExpression"; - operator: "+" | "-" | "/" | "%" | "*" | "**" | "&" | "|" | ">>" | ">>>" | "<<" | "^" | "==" | "===" | "!=" | "!==" | "in" | "instanceof" | ">" | "<" | ">=" | "<="; + operator: "+" | "-" | "/" | "%" | "*" | "**" | "&" | "|" | ">>" | ">>>" | "<<" | "^" | "==" | "===" | "!=" | "!==" | "in" | "instanceof" | ">" | "<" | ">=" | "<=" | "|>"; left: BabelNodeExpression | BabelNodePrivateName; right: BabelNodeExpression; } @@ -85,7 +85,7 @@ declare class BabelNodeBreakStatement extends BabelNode { declare class BabelNodeCallExpression extends BabelNode { type: "CallExpression"; - callee: BabelNodeExpression | BabelNodeV8IntrinsicIdentifier; + callee: BabelNodeExpression | BabelNodeSuper | BabelNodeV8IntrinsicIdentifier; arguments: Array; optional?: true | false; typeArguments?: BabelNodeTypeParameterInstantiation; @@ -159,6 +159,7 @@ declare class BabelNodeFunctionDeclaration extends BabelNode { generator?: boolean; async?: boolean; declare?: boolean; + predicate?: BabelNodeDeclaredPredicate | BabelNodeInferredPredicate; returnType?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop; typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop; } @@ -170,6 +171,7 @@ declare class BabelNodeFunctionExpression extends BabelNode { body: BabelNodeBlockStatement; generator?: boolean; async?: boolean; + predicate?: BabelNodeDeclaredPredicate | BabelNodeInferredPredicate; returnType?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop; typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop; } @@ -229,7 +231,7 @@ declare class BabelNodeLogicalExpression extends BabelNode { declare class BabelNodeMemberExpression extends BabelNode { type: "MemberExpression"; - object: BabelNodeExpression; + object: BabelNodeExpression | BabelNodeSuper; property: BabelNodeExpression | BabelNodeIdentifier | BabelNodePrivateName; computed?: boolean; optional?: true | false; @@ -237,7 +239,7 @@ declare class BabelNodeMemberExpression extends BabelNode { declare class BabelNodeNewExpression extends BabelNode { type: "NewExpression"; - callee: BabelNodeExpression | BabelNodeV8IntrinsicIdentifier; + callee: BabelNodeExpression | BabelNodeSuper | BabelNodeV8IntrinsicIdentifier; arguments: Array; optional?: true | false; typeArguments?: BabelNodeTypeParameterInstantiation; @@ -261,7 +263,7 @@ declare class BabelNodeObjectExpression extends BabelNode { declare class BabelNodeObjectMethod extends BabelNode { type: "ObjectMethod"; kind?: "method" | "get" | "set"; - key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral; + key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral; params: Array; body: BabelNodeBlockStatement; computed?: boolean; @@ -274,7 +276,7 @@ declare class BabelNodeObjectMethod extends BabelNode { declare class BabelNodeObjectProperty extends BabelNode { type: "ObjectProperty"; - key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral; + key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral | BabelNodeDecimalLiteral | BabelNodePrivateName; value: BabelNodeExpression | BabelNodePatternLike; computed?: boolean; shorthand?: boolean; @@ -374,7 +376,7 @@ declare class BabelNodeWithStatement extends BabelNode { declare class BabelNodeAssignmentPattern extends BabelNode { type: "AssignmentPattern"; - left: BabelNodeIdentifier | BabelNodeObjectPattern | BabelNodeArrayPattern | BabelNodeMemberExpression; + left: BabelNodeIdentifier | BabelNodeObjectPattern | BabelNodeArrayPattern | BabelNodeMemberExpression | BabelNodeTSAsExpression | BabelNodeTSTypeAssertion | BabelNodeTSNonNullExpression; right: BabelNodeExpression; decorators?: Array; typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop; @@ -382,7 +384,7 @@ declare class BabelNodeAssignmentPattern extends BabelNode { declare class BabelNodeArrayPattern extends BabelNode { type: "ArrayPattern"; - elements: Array; + elements: Array; decorators?: Array; optional?: boolean; typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop; @@ -395,6 +397,7 @@ declare class BabelNodeArrowFunctionExpression extends BabelNode { async?: boolean; expression: boolean; generator?: boolean; + predicate?: BabelNodeDeclaredPredicate | BabelNodeInferredPredicate; returnType?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop; typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop; } @@ -437,7 +440,7 @@ declare class BabelNodeExportAllDeclaration extends BabelNode { declare class BabelNodeExportDefaultDeclaration extends BabelNode { type: "ExportDefaultDeclaration"; - declaration: BabelNodeFunctionDeclaration | BabelNodeTSDeclareFunction | BabelNodeClassDeclaration | BabelNodeExpression; + declaration: BabelNodeTSDeclareFunction | BabelNodeFunctionDeclaration | BabelNodeClassDeclaration | BabelNodeExpression; exportKind?: "value"; } @@ -498,7 +501,7 @@ declare class BabelNodeMetaProperty extends BabelNode { declare class BabelNodeClassMethod extends BabelNode { type: "ClassMethod"; kind?: "get" | "set" | "method" | "constructor"; - key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression; + key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral | BabelNodeExpression; params: Array; body: BabelNodeBlockStatement; computed?: boolean; @@ -593,7 +596,7 @@ declare class BabelNodeOptionalCallExpression extends BabelNode { declare class BabelNodeClassProperty extends BabelNode { type: "ClassProperty"; - key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression; + key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral | BabelNodeExpression; value?: BabelNodeExpression; typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop; decorators?: Array; @@ -610,7 +613,7 @@ declare class BabelNodeClassProperty extends BabelNode { declare class BabelNodeClassAccessorProperty extends BabelNode { type: "ClassAccessorProperty"; - key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression | BabelNodePrivateName; + key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral | BabelNodeExpression | BabelNodePrivateName; value?: BabelNodeExpression; typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop; decorators?: Array; @@ -638,7 +641,7 @@ declare class BabelNodeClassPrivateProperty extends BabelNode { declare class BabelNodeClassPrivateMethod extends BabelNode { type: "ClassPrivateMethod"; - kind?: "get" | "set" | "method" | "constructor"; + kind?: "get" | "set" | "method"; key: BabelNodePrivateName; params: Array; body: BabelNodeBlockStatement; @@ -1237,7 +1240,7 @@ declare class BabelNodeTSDeclareFunction extends BabelNode { declare class BabelNodeTSDeclareMethod extends BabelNode { type: "TSDeclareMethod"; decorators?: Array; - key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression; + key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral | BabelNodeExpression; typeParameters?: BabelNodeTSTypeParameterDeclaration | BabelNodeNoop; params: Array; returnType?: BabelNodeTSTypeAnnotation | BabelNodeNoop; @@ -1388,6 +1391,7 @@ declare class BabelNodeTSTypePredicate extends BabelNode { declare class BabelNodeTSTypeQuery extends BabelNode { type: "TSTypeQuery"; exprName: BabelNodeTSEntityName | BabelNodeTSImportType; + typeParameters?: BabelNodeTSTypeParameterInstantiation; } declare class BabelNodeTSTypeLiteral extends BabelNode { @@ -1467,13 +1471,13 @@ declare class BabelNodeTSMappedType extends BabelNode { typeParameter: BabelNodeTSTypeParameter; typeAnnotation?: BabelNodeTSType; nameType?: BabelNodeTSType; - optional?: boolean; - readonly?: boolean; + optional?: true | false | "+" | "-"; + readonly?: true | false | "+" | "-"; } declare class BabelNodeTSLiteralType extends BabelNode { type: "TSLiteralType"; - literal: BabelNodeNumericLiteral | BabelNodeStringLiteral | BabelNodeBooleanLiteral | BabelNodeBigIntLiteral | BabelNodeUnaryExpression; + literal: BabelNodeNumericLiteral | BabelNodeStringLiteral | BabelNodeBooleanLiteral | BabelNodeBigIntLiteral | BabelNodeTemplateLiteral | BabelNodeUnaryExpression; } declare class BabelNodeTSExpressionWithTypeArguments extends BabelNode { @@ -1503,6 +1507,12 @@ declare class BabelNodeTSTypeAliasDeclaration extends BabelNode { declare?: boolean; } +declare class BabelNodeTSInstantiationExpression extends BabelNode { + type: "TSInstantiationExpression"; + expression: BabelNodeExpression; + typeParameters?: BabelNodeTSTypeParameterInstantiation; +} + declare class BabelNodeTSAsExpression extends BabelNode { type: "TSAsExpression"; expression: BabelNodeExpression; @@ -1596,10 +1606,11 @@ declare class BabelNodeTSTypeParameter extends BabelNode { type: "TSTypeParameter"; constraint?: BabelNodeTSType; name: string; + out?: boolean; } type BabelNodeStandardized = BabelNodeArrayExpression | BabelNodeAssignmentExpression | BabelNodeBinaryExpression | BabelNodeInterpreterDirective | BabelNodeDirective | BabelNodeDirectiveLiteral | BabelNodeBlockStatement | BabelNodeBreakStatement | BabelNodeCallExpression | BabelNodeCatchClause | BabelNodeConditionalExpression | BabelNodeContinueStatement | BabelNodeDebuggerStatement | BabelNodeDoWhileStatement | BabelNodeEmptyStatement | BabelNodeExpressionStatement | BabelNodeFile | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeIdentifier | BabelNodeIfStatement | BabelNodeLabeledStatement | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeLogicalExpression | BabelNodeMemberExpression | BabelNodeNewExpression | BabelNodeProgram | BabelNodeObjectExpression | BabelNodeObjectMethod | BabelNodeObjectProperty | BabelNodeRestElement | BabelNodeReturnStatement | BabelNodeSequenceExpression | BabelNodeParenthesizedExpression | BabelNodeSwitchCase | BabelNodeSwitchStatement | BabelNodeThisExpression | BabelNodeThrowStatement | BabelNodeTryStatement | BabelNodeUnaryExpression | BabelNodeUpdateExpression | BabelNodeVariableDeclaration | BabelNodeVariableDeclarator | BabelNodeWhileStatement | BabelNodeWithStatement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeArrowFunctionExpression | BabelNodeClassBody | BabelNodeClassExpression | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeExportSpecifier | BabelNodeForOfStatement | BabelNodeImportDeclaration | BabelNodeImportDefaultSpecifier | BabelNodeImportNamespaceSpecifier | BabelNodeImportSpecifier | BabelNodeMetaProperty | BabelNodeClassMethod | BabelNodeObjectPattern | BabelNodeSpreadElement | BabelNodeSuper | BabelNodeTaggedTemplateExpression | BabelNodeTemplateElement | BabelNodeTemplateLiteral | BabelNodeYieldExpression | BabelNodeAwaitExpression | BabelNodeImport | BabelNodeBigIntLiteral | BabelNodeExportNamespaceSpecifier | BabelNodeOptionalMemberExpression | BabelNodeOptionalCallExpression | BabelNodeClassProperty | BabelNodeClassAccessorProperty | BabelNodeClassPrivateProperty | BabelNodeClassPrivateMethod | BabelNodePrivateName | BabelNodeStaticBlock; -type BabelNodeExpression = BabelNodeArrayExpression | BabelNodeAssignmentExpression | BabelNodeBinaryExpression | BabelNodeCallExpression | BabelNodeConditionalExpression | BabelNodeFunctionExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeLogicalExpression | BabelNodeMemberExpression | BabelNodeNewExpression | BabelNodeObjectExpression | BabelNodeSequenceExpression | BabelNodeParenthesizedExpression | BabelNodeThisExpression | BabelNodeUnaryExpression | BabelNodeUpdateExpression | BabelNodeArrowFunctionExpression | BabelNodeClassExpression | BabelNodeMetaProperty | BabelNodeSuper | BabelNodeTaggedTemplateExpression | BabelNodeTemplateLiteral | BabelNodeYieldExpression | BabelNodeAwaitExpression | BabelNodeImport | BabelNodeBigIntLiteral | BabelNodeOptionalMemberExpression | BabelNodeOptionalCallExpression | BabelNodeTypeCastExpression | BabelNodeJSXElement | BabelNodeJSXFragment | BabelNodeBindExpression | BabelNodeDoExpression | BabelNodeRecordExpression | BabelNodeTupleExpression | BabelNodeDecimalLiteral | BabelNodeModuleExpression | BabelNodeTopicReference | BabelNodePipelineTopicExpression | BabelNodePipelineBareFunction | BabelNodePipelinePrimaryTopicReference | BabelNodeTSAsExpression | BabelNodeTSTypeAssertion | BabelNodeTSNonNullExpression; +type BabelNodeExpression = BabelNodeArrayExpression | BabelNodeAssignmentExpression | BabelNodeBinaryExpression | BabelNodeCallExpression | BabelNodeConditionalExpression | BabelNodeFunctionExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeLogicalExpression | BabelNodeMemberExpression | BabelNodeNewExpression | BabelNodeObjectExpression | BabelNodeSequenceExpression | BabelNodeParenthesizedExpression | BabelNodeThisExpression | BabelNodeUnaryExpression | BabelNodeUpdateExpression | BabelNodeArrowFunctionExpression | BabelNodeClassExpression | BabelNodeMetaProperty | BabelNodeSuper | BabelNodeTaggedTemplateExpression | BabelNodeTemplateLiteral | BabelNodeYieldExpression | BabelNodeAwaitExpression | BabelNodeImport | BabelNodeBigIntLiteral | BabelNodeOptionalMemberExpression | BabelNodeOptionalCallExpression | BabelNodeTypeCastExpression | BabelNodeJSXElement | BabelNodeJSXFragment | BabelNodeBindExpression | BabelNodeDoExpression | BabelNodeRecordExpression | BabelNodeTupleExpression | BabelNodeDecimalLiteral | BabelNodeModuleExpression | BabelNodeTopicReference | BabelNodePipelineTopicExpression | BabelNodePipelineBareFunction | BabelNodePipelinePrimaryTopicReference | BabelNodeTSInstantiationExpression | BabelNodeTSAsExpression | BabelNodeTSTypeAssertion | BabelNodeTSNonNullExpression; type BabelNodeBinary = BabelNodeBinaryExpression | BabelNodeLogicalExpression; type BabelNodeScopable = BabelNodeBlockStatement | BabelNodeCatchClause | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeClassExpression | BabelNodeClassDeclaration | BabelNodeForOfStatement | BabelNodeClassMethod | BabelNodeClassPrivateMethod | BabelNodeStaticBlock | BabelNodeTSModuleBlock; type BabelNodeBlockParent = BabelNodeBlockStatement | BabelNodeCatchClause | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeForOfStatement | BabelNodeClassMethod | BabelNodeClassPrivateMethod | BabelNodeStaticBlock | BabelNodeTSModuleBlock; @@ -1617,8 +1628,8 @@ type BabelNodeFunction = BabelNodeFunctionDeclaration | BabelNodeFunctionExpress type BabelNodeFunctionParent = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod | BabelNodeClassPrivateMethod | BabelNodeStaticBlock; type BabelNodePureish = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeArrowFunctionExpression | BabelNodeBigIntLiteral | BabelNodeDecimalLiteral; type BabelNodeDeclaration = BabelNodeFunctionDeclaration | BabelNodeVariableDeclaration | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeOpaqueType | BabelNodeTypeAlias | BabelNodeEnumDeclaration | BabelNodeTSDeclareFunction | BabelNodeTSInterfaceDeclaration | BabelNodeTSTypeAliasDeclaration | BabelNodeTSEnumDeclaration | BabelNodeTSModuleDeclaration; -type BabelNodePatternLike = BabelNodeIdentifier | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern; -type BabelNodeLVal = BabelNodeIdentifier | BabelNodeMemberExpression | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern | BabelNodeTSParameterProperty; +type BabelNodePatternLike = BabelNodeIdentifier | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern | BabelNodeTSAsExpression | BabelNodeTSTypeAssertion | BabelNodeTSNonNullExpression; +type BabelNodeLVal = BabelNodeIdentifier | BabelNodeMemberExpression | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern | BabelNodeTSParameterProperty | BabelNodeTSAsExpression | BabelNodeTSTypeAssertion | BabelNodeTSNonNullExpression; type BabelNodeTSEntityName = BabelNodeIdentifier | BabelNodeTSQualifiedName; type BabelNodeLiteral = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeTemplateLiteral | BabelNodeBigIntLiteral | BabelNodeDecimalLiteral; type BabelNodeImmutable = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeBigIntLiteral | BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXOpeningElement | BabelNodeJSXText | BabelNodeJSXFragment | BabelNodeJSXOpeningFragment | BabelNodeJSXClosingFragment | BabelNodeDecimalLiteral; @@ -1643,7 +1654,7 @@ type BabelNodeEnumBody = BabelNodeEnumBooleanBody | BabelNodeEnumNumberBody | Ba type BabelNodeEnumMember = BabelNodeEnumBooleanMember | BabelNodeEnumNumberMember | BabelNodeEnumStringMember | BabelNodeEnumDefaultedMember; type BabelNodeJSX = BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName | BabelNodeJSXOpeningElement | BabelNodeJSXSpreadAttribute | BabelNodeJSXText | BabelNodeJSXFragment | BabelNodeJSXOpeningFragment | BabelNodeJSXClosingFragment; type BabelNodeMiscellaneous = BabelNodeNoop | BabelNodePlaceholder | BabelNodeV8IntrinsicIdentifier; -type BabelNodeTypeScript = BabelNodeTSParameterProperty | BabelNodeTSDeclareFunction | BabelNodeTSDeclareMethod | BabelNodeTSQualifiedName | BabelNodeTSCallSignatureDeclaration | BabelNodeTSConstructSignatureDeclaration | BabelNodeTSPropertySignature | BabelNodeTSMethodSignature | BabelNodeTSIndexSignature | BabelNodeTSAnyKeyword | BabelNodeTSBooleanKeyword | BabelNodeTSBigIntKeyword | BabelNodeTSIntrinsicKeyword | BabelNodeTSNeverKeyword | BabelNodeTSNullKeyword | BabelNodeTSNumberKeyword | BabelNodeTSObjectKeyword | BabelNodeTSStringKeyword | BabelNodeTSSymbolKeyword | BabelNodeTSUndefinedKeyword | BabelNodeTSUnknownKeyword | BabelNodeTSVoidKeyword | BabelNodeTSThisType | BabelNodeTSFunctionType | BabelNodeTSConstructorType | BabelNodeTSTypeReference | BabelNodeTSTypePredicate | BabelNodeTSTypeQuery | BabelNodeTSTypeLiteral | BabelNodeTSArrayType | BabelNodeTSTupleType | BabelNodeTSOptionalType | BabelNodeTSRestType | BabelNodeTSNamedTupleMember | BabelNodeTSUnionType | BabelNodeTSIntersectionType | BabelNodeTSConditionalType | BabelNodeTSInferType | BabelNodeTSParenthesizedType | BabelNodeTSTypeOperator | BabelNodeTSIndexedAccessType | BabelNodeTSMappedType | BabelNodeTSLiteralType | BabelNodeTSExpressionWithTypeArguments | BabelNodeTSInterfaceDeclaration | BabelNodeTSInterfaceBody | BabelNodeTSTypeAliasDeclaration | BabelNodeTSAsExpression | BabelNodeTSTypeAssertion | BabelNodeTSEnumDeclaration | BabelNodeTSEnumMember | BabelNodeTSModuleDeclaration | BabelNodeTSModuleBlock | BabelNodeTSImportType | BabelNodeTSImportEqualsDeclaration | BabelNodeTSExternalModuleReference | BabelNodeTSNonNullExpression | BabelNodeTSExportAssignment | BabelNodeTSNamespaceExportDeclaration | BabelNodeTSTypeAnnotation | BabelNodeTSTypeParameterInstantiation | BabelNodeTSTypeParameterDeclaration | BabelNodeTSTypeParameter; +type BabelNodeTypeScript = BabelNodeTSParameterProperty | BabelNodeTSDeclareFunction | BabelNodeTSDeclareMethod | BabelNodeTSQualifiedName | BabelNodeTSCallSignatureDeclaration | BabelNodeTSConstructSignatureDeclaration | BabelNodeTSPropertySignature | BabelNodeTSMethodSignature | BabelNodeTSIndexSignature | BabelNodeTSAnyKeyword | BabelNodeTSBooleanKeyword | BabelNodeTSBigIntKeyword | BabelNodeTSIntrinsicKeyword | BabelNodeTSNeverKeyword | BabelNodeTSNullKeyword | BabelNodeTSNumberKeyword | BabelNodeTSObjectKeyword | BabelNodeTSStringKeyword | BabelNodeTSSymbolKeyword | BabelNodeTSUndefinedKeyword | BabelNodeTSUnknownKeyword | BabelNodeTSVoidKeyword | BabelNodeTSThisType | BabelNodeTSFunctionType | BabelNodeTSConstructorType | BabelNodeTSTypeReference | BabelNodeTSTypePredicate | BabelNodeTSTypeQuery | BabelNodeTSTypeLiteral | BabelNodeTSArrayType | BabelNodeTSTupleType | BabelNodeTSOptionalType | BabelNodeTSRestType | BabelNodeTSNamedTupleMember | BabelNodeTSUnionType | BabelNodeTSIntersectionType | BabelNodeTSConditionalType | BabelNodeTSInferType | BabelNodeTSParenthesizedType | BabelNodeTSTypeOperator | BabelNodeTSIndexedAccessType | BabelNodeTSMappedType | BabelNodeTSLiteralType | BabelNodeTSExpressionWithTypeArguments | BabelNodeTSInterfaceDeclaration | BabelNodeTSInterfaceBody | BabelNodeTSTypeAliasDeclaration | BabelNodeTSInstantiationExpression | BabelNodeTSAsExpression | BabelNodeTSTypeAssertion | BabelNodeTSEnumDeclaration | BabelNodeTSEnumMember | BabelNodeTSModuleDeclaration | BabelNodeTSModuleBlock | BabelNodeTSImportType | BabelNodeTSImportEqualsDeclaration | BabelNodeTSExternalModuleReference | BabelNodeTSNonNullExpression | BabelNodeTSExportAssignment | BabelNodeTSNamespaceExportDeclaration | BabelNodeTSTypeAnnotation | BabelNodeTSTypeParameterInstantiation | BabelNodeTSTypeParameterDeclaration | BabelNodeTSTypeParameter; type BabelNodeTSTypeElement = BabelNodeTSCallSignatureDeclaration | BabelNodeTSConstructSignatureDeclaration | BabelNodeTSPropertySignature | BabelNodeTSMethodSignature | BabelNodeTSIndexSignature; type BabelNodeTSType = BabelNodeTSAnyKeyword | BabelNodeTSBooleanKeyword | BabelNodeTSBigIntKeyword | BabelNodeTSIntrinsicKeyword | BabelNodeTSNeverKeyword | BabelNodeTSNullKeyword | BabelNodeTSNumberKeyword | BabelNodeTSObjectKeyword | BabelNodeTSStringKeyword | BabelNodeTSSymbolKeyword | BabelNodeTSUndefinedKeyword | BabelNodeTSUnknownKeyword | BabelNodeTSVoidKeyword | BabelNodeTSThisType | BabelNodeTSFunctionType | BabelNodeTSConstructorType | BabelNodeTSTypeReference | BabelNodeTSTypePredicate | BabelNodeTSTypeQuery | BabelNodeTSTypeLiteral | BabelNodeTSArrayType | BabelNodeTSTupleType | BabelNodeTSOptionalType | BabelNodeTSRestType | BabelNodeTSUnionType | BabelNodeTSIntersectionType | BabelNodeTSConditionalType | BabelNodeTSInferType | BabelNodeTSParenthesizedType | BabelNodeTSTypeOperator | BabelNodeTSIndexedAccessType | BabelNodeTSMappedType | BabelNodeTSLiteralType | BabelNodeTSExpressionWithTypeArguments | BabelNodeTSImportType; type BabelNodeTSBaseType = BabelNodeTSAnyKeyword | BabelNodeTSBooleanKeyword | BabelNodeTSBigIntKeyword | BabelNodeTSIntrinsicKeyword | BabelNodeTSNeverKeyword | BabelNodeTSNullKeyword | BabelNodeTSNumberKeyword | BabelNodeTSObjectKeyword | BabelNodeTSStringKeyword | BabelNodeTSSymbolKeyword | BabelNodeTSUndefinedKeyword | BabelNodeTSUnknownKeyword | BabelNodeTSVoidKeyword | BabelNodeTSThisType | BabelNodeTSLiteralType; @@ -1651,13 +1662,13 @@ type BabelNodeTSBaseType = BabelNodeTSAnyKeyword | BabelNodeTSBooleanKeyword | B declare module "@babel/types" { declare export function arrayExpression(elements?: Array): BabelNodeArrayExpression; declare export function assignmentExpression(operator: string, left: BabelNodeLVal, right: BabelNodeExpression): BabelNodeAssignmentExpression; - declare export function binaryExpression(operator: "+" | "-" | "/" | "%" | "*" | "**" | "&" | "|" | ">>" | ">>>" | "<<" | "^" | "==" | "===" | "!=" | "!==" | "in" | "instanceof" | ">" | "<" | ">=" | "<=", left: BabelNodeExpression | BabelNodePrivateName, right: BabelNodeExpression): BabelNodeBinaryExpression; + declare export function binaryExpression(operator: "+" | "-" | "/" | "%" | "*" | "**" | "&" | "|" | ">>" | ">>>" | "<<" | "^" | "==" | "===" | "!=" | "!==" | "in" | "instanceof" | ">" | "<" | ">=" | "<=" | "|>", left: BabelNodeExpression | BabelNodePrivateName, right: BabelNodeExpression): BabelNodeBinaryExpression; declare export function interpreterDirective(value: string): BabelNodeInterpreterDirective; declare export function directive(value: BabelNodeDirectiveLiteral): BabelNodeDirective; declare export function directiveLiteral(value: string): BabelNodeDirectiveLiteral; declare export function blockStatement(body: Array, directives?: Array): BabelNodeBlockStatement; declare export function breakStatement(label?: BabelNodeIdentifier): BabelNodeBreakStatement; - declare export function callExpression(callee: BabelNodeExpression | BabelNodeV8IntrinsicIdentifier, _arguments: Array): BabelNodeCallExpression; + declare export function callExpression(callee: BabelNodeExpression | BabelNodeSuper | BabelNodeV8IntrinsicIdentifier, _arguments: Array): BabelNodeCallExpression; declare export function catchClause(param?: BabelNodeIdentifier | BabelNodeArrayPattern | BabelNodeObjectPattern, body: BabelNodeBlockStatement): BabelNodeCatchClause; declare export function conditionalExpression(test: BabelNodeExpression, consequent: BabelNodeExpression, alternate: BabelNodeExpression): BabelNodeConditionalExpression; declare export function continueStatement(label?: BabelNodeIdentifier): BabelNodeContinueStatement; @@ -1679,12 +1690,12 @@ declare module "@babel/types" { declare export function booleanLiteral(value: boolean): BabelNodeBooleanLiteral; declare export function regExpLiteral(pattern: string, flags?: string): BabelNodeRegExpLiteral; declare export function logicalExpression(operator: "||" | "&&" | "??", left: BabelNodeExpression, right: BabelNodeExpression): BabelNodeLogicalExpression; - declare export function memberExpression(object: BabelNodeExpression, property: BabelNodeExpression | BabelNodeIdentifier | BabelNodePrivateName, computed?: boolean, optional?: true | false): BabelNodeMemberExpression; - declare export function newExpression(callee: BabelNodeExpression | BabelNodeV8IntrinsicIdentifier, _arguments: Array): BabelNodeNewExpression; + declare export function memberExpression(object: BabelNodeExpression | BabelNodeSuper, property: BabelNodeExpression | BabelNodeIdentifier | BabelNodePrivateName, computed?: boolean, optional?: true | false): BabelNodeMemberExpression; + declare export function newExpression(callee: BabelNodeExpression | BabelNodeSuper | BabelNodeV8IntrinsicIdentifier, _arguments: Array): BabelNodeNewExpression; declare export function program(body: Array, directives?: Array, sourceType?: "script" | "module", interpreter?: BabelNodeInterpreterDirective): BabelNodeProgram; declare export function objectExpression(properties: Array): BabelNodeObjectExpression; - declare export function objectMethod(kind?: "method" | "get" | "set", key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral, params: Array, body: BabelNodeBlockStatement, computed?: boolean, generator?: boolean, async?: boolean): BabelNodeObjectMethod; - declare export function objectProperty(key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral, value: BabelNodeExpression | BabelNodePatternLike, computed?: boolean, shorthand?: boolean, decorators?: Array): BabelNodeObjectProperty; + declare export function objectMethod(kind?: "method" | "get" | "set", key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral, params: Array, body: BabelNodeBlockStatement, computed?: boolean, generator?: boolean, async?: boolean): BabelNodeObjectMethod; + declare export function objectProperty(key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral | BabelNodeDecimalLiteral | BabelNodePrivateName, value: BabelNodeExpression | BabelNodePatternLike, computed?: boolean, shorthand?: boolean, decorators?: Array): BabelNodeObjectProperty; declare export function restElement(argument: BabelNodeLVal): BabelNodeRestElement; declare export function returnStatement(argument?: BabelNodeExpression): BabelNodeReturnStatement; declare export function sequenceExpression(expressions: Array): BabelNodeSequenceExpression; @@ -1700,14 +1711,14 @@ declare module "@babel/types" { declare export function variableDeclarator(id: BabelNodeLVal, init?: BabelNodeExpression): BabelNodeVariableDeclarator; declare export function whileStatement(test: BabelNodeExpression, body: BabelNodeStatement): BabelNodeWhileStatement; declare export function withStatement(object: BabelNodeExpression, body: BabelNodeStatement): BabelNodeWithStatement; - declare export function assignmentPattern(left: BabelNodeIdentifier | BabelNodeObjectPattern | BabelNodeArrayPattern | BabelNodeMemberExpression, right: BabelNodeExpression): BabelNodeAssignmentPattern; - declare export function arrayPattern(elements: Array): BabelNodeArrayPattern; + declare export function assignmentPattern(left: BabelNodeIdentifier | BabelNodeObjectPattern | BabelNodeArrayPattern | BabelNodeMemberExpression | BabelNodeTSAsExpression | BabelNodeTSTypeAssertion | BabelNodeTSNonNullExpression, right: BabelNodeExpression): BabelNodeAssignmentPattern; + declare export function arrayPattern(elements: Array): BabelNodeArrayPattern; declare export function arrowFunctionExpression(params: Array, body: BabelNodeBlockStatement | BabelNodeExpression, async?: boolean): BabelNodeArrowFunctionExpression; declare export function classBody(body: Array): BabelNodeClassBody; declare export function classExpression(id?: BabelNodeIdentifier, superClass?: BabelNodeExpression, body: BabelNodeClassBody, decorators?: Array): BabelNodeClassExpression; declare export function classDeclaration(id: BabelNodeIdentifier, superClass?: BabelNodeExpression, body: BabelNodeClassBody, decorators?: Array): BabelNodeClassDeclaration; declare export function exportAllDeclaration(source: BabelNodeStringLiteral): BabelNodeExportAllDeclaration; - declare export function exportDefaultDeclaration(declaration: BabelNodeFunctionDeclaration | BabelNodeTSDeclareFunction | BabelNodeClassDeclaration | BabelNodeExpression): BabelNodeExportDefaultDeclaration; + declare export function exportDefaultDeclaration(declaration: BabelNodeTSDeclareFunction | BabelNodeFunctionDeclaration | BabelNodeClassDeclaration | BabelNodeExpression): BabelNodeExportDefaultDeclaration; declare export function exportNamedDeclaration(declaration?: BabelNodeDeclaration, specifiers?: Array, source?: BabelNodeStringLiteral): BabelNodeExportNamedDeclaration; declare export function exportSpecifier(local: BabelNodeIdentifier, exported: BabelNodeIdentifier | BabelNodeStringLiteral): BabelNodeExportSpecifier; declare export function forOfStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement, _await?: boolean): BabelNodeForOfStatement; @@ -1716,7 +1727,7 @@ declare module "@babel/types" { declare export function importNamespaceSpecifier(local: BabelNodeIdentifier): BabelNodeImportNamespaceSpecifier; declare export function importSpecifier(local: BabelNodeIdentifier, imported: BabelNodeIdentifier | BabelNodeStringLiteral): BabelNodeImportSpecifier; declare export function metaProperty(meta: BabelNodeIdentifier, property: BabelNodeIdentifier): BabelNodeMetaProperty; - declare export function classMethod(kind?: "get" | "set" | "method" | "constructor", key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression, params: Array, body: BabelNodeBlockStatement, computed?: boolean, _static?: boolean, generator?: boolean, async?: boolean): BabelNodeClassMethod; + declare export function classMethod(kind?: "get" | "set" | "method" | "constructor", key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral | BabelNodeExpression, params: Array, body: BabelNodeBlockStatement, computed?: boolean, _static?: boolean, generator?: boolean, async?: boolean): BabelNodeClassMethod; declare export function objectPattern(properties: Array): BabelNodeObjectPattern; declare export function spreadElement(argument: BabelNodeExpression): BabelNodeSpreadElement; declare function _super(): BabelNodeSuper; @@ -1732,10 +1743,10 @@ declare module "@babel/types" { declare export function exportNamespaceSpecifier(exported: BabelNodeIdentifier): BabelNodeExportNamespaceSpecifier; declare export function optionalMemberExpression(object: BabelNodeExpression, property: BabelNodeExpression | BabelNodeIdentifier, computed?: boolean, optional: boolean): BabelNodeOptionalMemberExpression; declare export function optionalCallExpression(callee: BabelNodeExpression, _arguments: Array, optional: boolean): BabelNodeOptionalCallExpression; - declare export function classProperty(key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression, value?: BabelNodeExpression, typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop, decorators?: Array, computed?: boolean, _static?: boolean): BabelNodeClassProperty; - declare export function classAccessorProperty(key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression | BabelNodePrivateName, value?: BabelNodeExpression, typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop, decorators?: Array, computed?: boolean, _static?: boolean): BabelNodeClassAccessorProperty; - declare export function classPrivateProperty(key: BabelNodePrivateName, value?: BabelNodeExpression, decorators?: Array, _static: any): BabelNodeClassPrivateProperty; - declare export function classPrivateMethod(kind?: "get" | "set" | "method" | "constructor", key: BabelNodePrivateName, params: Array, body: BabelNodeBlockStatement, _static?: boolean): BabelNodeClassPrivateMethod; + declare export function classProperty(key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral | BabelNodeExpression, value?: BabelNodeExpression, typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop, decorators?: Array, computed?: boolean, _static?: boolean): BabelNodeClassProperty; + declare export function classAccessorProperty(key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral | BabelNodeExpression | BabelNodePrivateName, value?: BabelNodeExpression, typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop, decorators?: Array, computed?: boolean, _static?: boolean): BabelNodeClassAccessorProperty; + declare export function classPrivateProperty(key: BabelNodePrivateName, value?: BabelNodeExpression, decorators?: Array, _static?: boolean): BabelNodeClassPrivateProperty; + declare export function classPrivateMethod(kind?: "get" | "set" | "method", key: BabelNodePrivateName, params: Array, body: BabelNodeBlockStatement, _static?: boolean): BabelNodeClassPrivateMethod; declare export function privateName(id: BabelNodeIdentifier): BabelNodePrivateName; declare export function staticBlock(body: Array): BabelNodeStaticBlock; declare export function anyTypeAnnotation(): BabelNodeAnyTypeAnnotation; @@ -1837,7 +1848,7 @@ declare module "@babel/types" { declare export function pipelinePrimaryTopicReference(): BabelNodePipelinePrimaryTopicReference; declare export function tsParameterProperty(parameter: BabelNodeIdentifier | BabelNodeAssignmentPattern): BabelNodeTSParameterProperty; declare export function tsDeclareFunction(id?: BabelNodeIdentifier, typeParameters?: BabelNodeTSTypeParameterDeclaration | BabelNodeNoop, params: Array, returnType?: BabelNodeTSTypeAnnotation | BabelNodeNoop): BabelNodeTSDeclareFunction; - declare export function tsDeclareMethod(decorators?: Array, key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression, typeParameters?: BabelNodeTSTypeParameterDeclaration | BabelNodeNoop, params: Array, returnType?: BabelNodeTSTypeAnnotation | BabelNodeNoop): BabelNodeTSDeclareMethod; + declare export function tsDeclareMethod(decorators?: Array, key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeBigIntLiteral | BabelNodeExpression, typeParameters?: BabelNodeTSTypeParameterDeclaration | BabelNodeNoop, params: Array, returnType?: BabelNodeTSTypeAnnotation | BabelNodeNoop): BabelNodeTSDeclareMethod; declare export function tsQualifiedName(left: BabelNodeTSEntityName, right: BabelNodeIdentifier): BabelNodeTSQualifiedName; declare export function tsCallSignatureDeclaration(typeParameters?: BabelNodeTSTypeParameterDeclaration, parameters: Array, typeAnnotation?: BabelNodeTSTypeAnnotation): BabelNodeTSCallSignatureDeclaration; declare export function tsConstructSignatureDeclaration(typeParameters?: BabelNodeTSTypeParameterDeclaration, parameters: Array, typeAnnotation?: BabelNodeTSTypeAnnotation): BabelNodeTSConstructSignatureDeclaration; @@ -1862,7 +1873,7 @@ declare module "@babel/types" { declare export function tsConstructorType(typeParameters?: BabelNodeTSTypeParameterDeclaration, parameters: Array, typeAnnotation?: BabelNodeTSTypeAnnotation): BabelNodeTSConstructorType; declare export function tsTypeReference(typeName: BabelNodeTSEntityName, typeParameters?: BabelNodeTSTypeParameterInstantiation): BabelNodeTSTypeReference; declare export function tsTypePredicate(parameterName: BabelNodeIdentifier | BabelNodeTSThisType, typeAnnotation?: BabelNodeTSTypeAnnotation, asserts?: boolean): BabelNodeTSTypePredicate; - declare export function tsTypeQuery(exprName: BabelNodeTSEntityName | BabelNodeTSImportType): BabelNodeTSTypeQuery; + declare export function tsTypeQuery(exprName: BabelNodeTSEntityName | BabelNodeTSImportType, typeParameters?: BabelNodeTSTypeParameterInstantiation): BabelNodeTSTypeQuery; declare export function tsTypeLiteral(members: Array): BabelNodeTSTypeLiteral; declare export function tsArrayType(elementType: BabelNodeTSType): BabelNodeTSArrayType; declare export function tsTupleType(elementTypes: Array): BabelNodeTSTupleType; @@ -1877,11 +1888,12 @@ declare module "@babel/types" { declare export function tsTypeOperator(typeAnnotation: BabelNodeTSType): BabelNodeTSTypeOperator; declare export function tsIndexedAccessType(objectType: BabelNodeTSType, indexType: BabelNodeTSType): BabelNodeTSIndexedAccessType; declare export function tsMappedType(typeParameter: BabelNodeTSTypeParameter, typeAnnotation?: BabelNodeTSType, nameType?: BabelNodeTSType): BabelNodeTSMappedType; - declare export function tsLiteralType(literal: BabelNodeNumericLiteral | BabelNodeStringLiteral | BabelNodeBooleanLiteral | BabelNodeBigIntLiteral | BabelNodeUnaryExpression): BabelNodeTSLiteralType; + declare export function tsLiteralType(literal: BabelNodeNumericLiteral | BabelNodeStringLiteral | BabelNodeBooleanLiteral | BabelNodeBigIntLiteral | BabelNodeTemplateLiteral | BabelNodeUnaryExpression): BabelNodeTSLiteralType; declare export function tsExpressionWithTypeArguments(expression: BabelNodeTSEntityName, typeParameters?: BabelNodeTSTypeParameterInstantiation): BabelNodeTSExpressionWithTypeArguments; declare export function tsInterfaceDeclaration(id: BabelNodeIdentifier, typeParameters?: BabelNodeTSTypeParameterDeclaration, _extends?: Array, body: BabelNodeTSInterfaceBody): BabelNodeTSInterfaceDeclaration; declare export function tsInterfaceBody(body: Array): BabelNodeTSInterfaceBody; declare export function tsTypeAliasDeclaration(id: BabelNodeIdentifier, typeParameters?: BabelNodeTSTypeParameterDeclaration, typeAnnotation: BabelNodeTSType): BabelNodeTSTypeAliasDeclaration; + declare export function tsInstantiationExpression(expression: BabelNodeExpression, typeParameters?: BabelNodeTSTypeParameterInstantiation): BabelNodeTSInstantiationExpression; declare export function tsAsExpression(expression: BabelNodeExpression, typeAnnotation: BabelNodeTSType): BabelNodeTSAsExpression; declare export function tsTypeAssertion(typeAnnotation: BabelNodeTSType, expression: BabelNodeExpression): BabelNodeTSTypeAssertion; declare export function tsEnumDeclaration(id: BabelNodeIdentifier, members: Array): BabelNodeTSEnumDeclaration; @@ -2360,6 +2372,8 @@ declare module "@babel/types" { declare export function assertTSInterfaceBody(node: ?Object, opts?: ?Object): void declare export function isTSTypeAliasDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeAliasDeclaration) declare export function assertTSTypeAliasDeclaration(node: ?Object, opts?: ?Object): void + declare export function isTSInstantiationExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSInstantiationExpression) + declare export function assertTSInstantiationExpression(node: ?Object, opts?: ?Object): void declare export function isTSAsExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSAsExpression) declare export function assertTSAsExpression(node: ?Object, opts?: ?Object): void declare export function isTSTypeAssertion(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeAssertion) diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js index 6a0ac93c5cf..cbf8db75541 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js @@ -12,4 +12,6 @@ function appendToMemberExpression(member, append, computed = false) { member.property = append; member.computed = !!computed; return member; -} \ No newline at end of file +} + +//# sourceMappingURL=appendToMemberExpression.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js index de9464d1672..f2a54779d08 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js @@ -12,8 +12,8 @@ function getQualifiedName(node) { } function removeTypeDuplicates(nodes) { - const generics = {}; - const bases = {}; + const generics = new Map(); + const bases = new Map(); const typeGroups = new Set(); const types = []; @@ -30,7 +30,7 @@ function removeTypeDuplicates(nodes) { } if ((0, _generated.isFlowBaseAnnotation)(node)) { - bases[node.type] = node; + bases.set(node.type, node); continue; } @@ -46,8 +46,8 @@ function removeTypeDuplicates(nodes) { if ((0, _generated.isGenericTypeAnnotation)(node)) { const name = getQualifiedName(node.id); - if (generics[name]) { - let existing = generics[name]; + if (generics.has(name)) { + let existing = generics.get(name); if (existing.typeParameters) { if (node.typeParameters) { @@ -57,7 +57,7 @@ function removeTypeDuplicates(nodes) { existing = node.typeParameters; } } else { - generics[name] = node; + generics.set(name, node); } continue; @@ -66,13 +66,15 @@ function removeTypeDuplicates(nodes) { types.push(node); } - for (const type of Object.keys(bases)) { - types.push(bases[type]); + for (const [, baseType] of bases) { + types.push(baseType); } - for (const name of Object.keys(generics)) { - types.push(generics[name]); + for (const [, genericName] of generics) { + types.push(genericName); } return types; -} \ No newline at end of file +} + +//# sourceMappingURL=removeTypeDuplicates.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/inherits.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/inherits.js index 8701897d0e2..bd29dc576a2 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/inherits.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/inherits.js @@ -19,7 +19,9 @@ function inherits(child, parent) { } for (const key of Object.keys(parent)) { - if (key[0] === "_" && key !== "__clone") child[key] = parent[key]; + if (key[0] === "_" && key !== "__clone") { + child[key] = parent[key]; + } } for (const key of _constants.INHERIT_KEYS.force) { @@ -28,4 +30,6 @@ function inherits(child, parent) { (0, _inheritsComments.default)(child, parent); return child; -} \ No newline at end of file +} + +//# sourceMappingURL=inherits.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js index ee6de0ec332..01049bc618b 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js @@ -7,7 +7,15 @@ exports.default = prependToMemberExpression; var _generated = require("../builders/generated"); +var _ = require(".."); + function prependToMemberExpression(member, prepend) { + if ((0, _.isSuper)(member.object)) { + throw new Error("Cannot prepend node to super property access (`super.foo`)."); + } + member.object = (0, _generated.memberExpression)(prepend, member.object); return member; -} \ No newline at end of file +} + +//# sourceMappingURL=prependToMemberExpression.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/removeProperties.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/removeProperties.js index f9cf8e6065d..1633958a552 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/removeProperties.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/removeProperties.js @@ -8,8 +8,7 @@ exports.default = removeProperties; var _constants = require("../constants"); const CLEAR_KEYS = ["tokens", "start", "end", "loc", "raw", "rawValue"]; - -const CLEAR_KEYS_PLUS_COMMENTS = _constants.COMMENT_KEYS.concat(["comments"]).concat(CLEAR_KEYS); +const CLEAR_KEYS_PLUS_COMMENTS = [..._constants.COMMENT_KEYS, "comments", ...CLEAR_KEYS]; function removeProperties(node, opts = {}) { const map = opts.preserveComments ? CLEAR_KEYS : CLEAR_KEYS_PLUS_COMMENTS; @@ -27,4 +26,6 @@ function removeProperties(node, opts = {}) { for (const sym of symbols) { node[sym] = null; } -} \ No newline at end of file +} + +//# sourceMappingURL=removeProperties.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js index e36f7558934..580b02e2485 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js @@ -12,4 +12,6 @@ var _removeProperties = require("./removeProperties"); function removePropertiesDeep(tree, opts) { (0, _traverseFast.default)(tree, _removeProperties.default, opts); return tree; -} \ No newline at end of file +} + +//# sourceMappingURL=removePropertiesDeep.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js index 25defea7ec5..c8aedeea85a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js @@ -7,9 +7,13 @@ exports.default = removeTypeDuplicates; var _generated = require("../../validators/generated"); +function getQualifiedName(node) { + return (0, _generated.isIdentifier)(node) ? node.name : `${node.right.name}.${getQualifiedName(node.left)}`; +} + function removeTypeDuplicates(nodes) { - const generics = {}; - const bases = {}; + const generics = new Map(); + const bases = new Map(); const typeGroups = new Set(); const types = []; @@ -26,7 +30,7 @@ function removeTypeDuplicates(nodes) { } if ((0, _generated.isTSBaseType)(node)) { - bases[node.type] = node; + bases.set(node.type, node); continue; } @@ -39,16 +43,38 @@ function removeTypeDuplicates(nodes) { continue; } + if ((0, _generated.isTSTypeReference)(node) && node.typeParameters) { + const name = getQualifiedName(node.typeName); + + if (generics.has(name)) { + let existing = generics.get(name); + + if (existing.typeParameters) { + if (node.typeParameters) { + existing.typeParameters.params = removeTypeDuplicates(existing.typeParameters.params.concat(node.typeParameters.params)); + } + } else { + existing = node.typeParameters; + } + } else { + generics.set(name, node); + } + + continue; + } + types.push(node); } - for (const type of Object.keys(bases)) { - types.push(bases[type]); + for (const [, baseType] of bases) { + types.push(baseType); } - for (const name of Object.keys(generics)) { - types.push(generics[name]); + for (const [, genericName] of generics) { + types.push(genericName); } return types; -} \ No newline at end of file +} + +//# sourceMappingURL=removeTypeDuplicates.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js index 4daaf8bf0fe..19516223ec2 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js @@ -8,7 +8,7 @@ exports.default = getBindingIdentifiers; var _generated = require("../validators/generated"); function getBindingIdentifiers(node, duplicates, outerOnly) { - let search = [].concat(node); + const search = [].concat(node); const ids = Object.create(null); while (search.length) { @@ -50,9 +50,10 @@ function getBindingIdentifiers(node, duplicates, outerOnly) { if (keys) { for (let i = 0; i < keys.length; i++) { const key = keys[i]; + const nodes = id[key]; - if (id[key]) { - search = search.concat(id[key]); + if (nodes) { + Array.isArray(nodes) ? search.push(...nodes) : search.push(nodes); } } } @@ -101,4 +102,6 @@ getBindingIdentifiers.keys = { ObjectPattern: ["properties"], VariableDeclaration: ["declarations"], VariableDeclarator: ["id"] -}; \ No newline at end of file +}; + +//# sourceMappingURL=getBindingIdentifiers.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js index c27cffe544d..908fcaba17b 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js @@ -12,4 +12,6 @@ exports.default = _default; function getOuterBindingIdentifiers(node, duplicates) { return (0, _getBindingIdentifiers.default)(node, duplicates, true); -} \ No newline at end of file +} + +//# sourceMappingURL=getOuterBindingIdentifiers.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/traverse/traverse.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/traverse/traverse.js index 775aed1eede..d74f9227e42 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/traverse/traverse.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/traverse/traverse.js @@ -52,4 +52,6 @@ function traverseSimpleImpl(node, enter, exit, state, ancestors) { } if (exit) exit(node, ancestors, state); -} \ No newline at end of file +} + +//# sourceMappingURL=traverse.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/traverse/traverseFast.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/traverse/traverseFast.js index f038dd835ed..f9eec049ea9 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/traverse/traverseFast.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/traverse/traverseFast.js @@ -25,4 +25,6 @@ function traverseFast(node, enter, opts) { traverseFast(subNode, enter, opts); } } -} \ No newline at end of file +} + +//# sourceMappingURL=traverseFast.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/inherit.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/inherit.js index 35f33812439..97fa990c80b 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/inherit.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/inherit.js @@ -9,4 +9,6 @@ function inherit(key, child, parent) { if (child && parent) { child[key] = Array.from(new Set([].concat(child[key], parent[key]).filter(Boolean))); } -} \ No newline at end of file +} + +//# sourceMappingURL=inherit.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js index f0ca13369be..4927d9d718a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js @@ -44,4 +44,6 @@ function cleanJSXElementLiteralChild(child, args) { } if (str) args.push((0, _generated.stringLiteral)(str)); -} \ No newline at end of file +} + +//# sourceMappingURL=cleanJSXElementLiteralChild.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/shallowEqual.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/shallowEqual.js index fae259e4fc5..3e91e7ad870 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/shallowEqual.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/utils/shallowEqual.js @@ -15,4 +15,6 @@ function shallowEqual(actual, expected) { } return true; -} \ No newline at end of file +} + +//# sourceMappingURL=shallowEqual.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js index c0064968ecd..2b569a1fb48 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js @@ -10,4 +10,6 @@ var _matchesPattern = require("./matchesPattern"); function buildMatchMemberExpression(match, allowPartial) { const parts = match.split("."); return member => (0, _matchesPattern.default)(member, parts, allowPartial); -} \ No newline at end of file +} + +//# sourceMappingURL=buildMatchMemberExpression.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/generated/index.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/generated/index.js index f2956ec0120..323e798403d 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/generated/index.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/generated/index.js @@ -227,6 +227,7 @@ exports.isTSImportType = isTSImportType; exports.isTSIndexSignature = isTSIndexSignature; exports.isTSIndexedAccessType = isTSIndexedAccessType; exports.isTSInferType = isTSInferType; +exports.isTSInstantiationExpression = isTSInstantiationExpression; exports.isTSInterfaceBody = isTSInterfaceBody; exports.isTSInterfaceDeclaration = isTSInterfaceDeclaration; exports.isTSIntersectionType = isTSIntersectionType; @@ -3771,6 +3772,21 @@ function isTSTypeAliasDeclaration(node, opts) { return false; } +function isTSInstantiationExpression(node, opts) { + if (!node) return false; + const nodeType = node.type; + + if (nodeType === "TSInstantiationExpression") { + if (typeof opts === "undefined") { + return true; + } else { + return (0, _shallowEqual.default)(node, opts); + } + } + + return false; +} + function isTSAsExpression(node, opts) { if (!node) return false; const nodeType = node.type; @@ -4030,7 +4046,7 @@ function isExpression(node, opts) { if (!node) return false; const nodeType = node.type; - if ("ArrayExpression" === nodeType || "AssignmentExpression" === nodeType || "BinaryExpression" === nodeType || "CallExpression" === nodeType || "ConditionalExpression" === nodeType || "FunctionExpression" === nodeType || "Identifier" === nodeType || "StringLiteral" === nodeType || "NumericLiteral" === nodeType || "NullLiteral" === nodeType || "BooleanLiteral" === nodeType || "RegExpLiteral" === nodeType || "LogicalExpression" === nodeType || "MemberExpression" === nodeType || "NewExpression" === nodeType || "ObjectExpression" === nodeType || "SequenceExpression" === nodeType || "ParenthesizedExpression" === nodeType || "ThisExpression" === nodeType || "UnaryExpression" === nodeType || "UpdateExpression" === nodeType || "ArrowFunctionExpression" === nodeType || "ClassExpression" === nodeType || "MetaProperty" === nodeType || "Super" === nodeType || "TaggedTemplateExpression" === nodeType || "TemplateLiteral" === nodeType || "YieldExpression" === nodeType || "AwaitExpression" === nodeType || "Import" === nodeType || "BigIntLiteral" === nodeType || "OptionalMemberExpression" === nodeType || "OptionalCallExpression" === nodeType || "TypeCastExpression" === nodeType || "JSXElement" === nodeType || "JSXFragment" === nodeType || "BindExpression" === nodeType || "DoExpression" === nodeType || "RecordExpression" === nodeType || "TupleExpression" === nodeType || "DecimalLiteral" === nodeType || "ModuleExpression" === nodeType || "TopicReference" === nodeType || "PipelineTopicExpression" === nodeType || "PipelineBareFunction" === nodeType || "PipelinePrimaryTopicReference" === nodeType || "TSAsExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSNonNullExpression" === nodeType || nodeType === "Placeholder" && ("Expression" === node.expectedNode || "Identifier" === node.expectedNode || "StringLiteral" === node.expectedNode)) { + if ("ArrayExpression" === nodeType || "AssignmentExpression" === nodeType || "BinaryExpression" === nodeType || "CallExpression" === nodeType || "ConditionalExpression" === nodeType || "FunctionExpression" === nodeType || "Identifier" === nodeType || "StringLiteral" === nodeType || "NumericLiteral" === nodeType || "NullLiteral" === nodeType || "BooleanLiteral" === nodeType || "RegExpLiteral" === nodeType || "LogicalExpression" === nodeType || "MemberExpression" === nodeType || "NewExpression" === nodeType || "ObjectExpression" === nodeType || "SequenceExpression" === nodeType || "ParenthesizedExpression" === nodeType || "ThisExpression" === nodeType || "UnaryExpression" === nodeType || "UpdateExpression" === nodeType || "ArrowFunctionExpression" === nodeType || "ClassExpression" === nodeType || "MetaProperty" === nodeType || "Super" === nodeType || "TaggedTemplateExpression" === nodeType || "TemplateLiteral" === nodeType || "YieldExpression" === nodeType || "AwaitExpression" === nodeType || "Import" === nodeType || "BigIntLiteral" === nodeType || "OptionalMemberExpression" === nodeType || "OptionalCallExpression" === nodeType || "TypeCastExpression" === nodeType || "JSXElement" === nodeType || "JSXFragment" === nodeType || "BindExpression" === nodeType || "DoExpression" === nodeType || "RecordExpression" === nodeType || "TupleExpression" === nodeType || "DecimalLiteral" === nodeType || "ModuleExpression" === nodeType || "TopicReference" === nodeType || "PipelineTopicExpression" === nodeType || "PipelineBareFunction" === nodeType || "PipelinePrimaryTopicReference" === nodeType || "TSInstantiationExpression" === nodeType || "TSAsExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSNonNullExpression" === nodeType || nodeType === "Placeholder" && ("Expression" === node.expectedNode || "Identifier" === node.expectedNode || "StringLiteral" === node.expectedNode)) { if (typeof opts === "undefined") { return true; } else { @@ -4300,7 +4316,7 @@ function isPatternLike(node, opts) { if (!node) return false; const nodeType = node.type; - if ("Identifier" === nodeType || "RestElement" === nodeType || "AssignmentPattern" === nodeType || "ArrayPattern" === nodeType || "ObjectPattern" === nodeType || nodeType === "Placeholder" && ("Pattern" === node.expectedNode || "Identifier" === node.expectedNode)) { + if ("Identifier" === nodeType || "RestElement" === nodeType || "AssignmentPattern" === nodeType || "ArrayPattern" === nodeType || "ObjectPattern" === nodeType || "TSAsExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSNonNullExpression" === nodeType || nodeType === "Placeholder" && ("Pattern" === node.expectedNode || "Identifier" === node.expectedNode)) { if (typeof opts === "undefined") { return true; } else { @@ -4315,7 +4331,7 @@ function isLVal(node, opts) { if (!node) return false; const nodeType = node.type; - if ("Identifier" === nodeType || "MemberExpression" === nodeType || "RestElement" === nodeType || "AssignmentPattern" === nodeType || "ArrayPattern" === nodeType || "ObjectPattern" === nodeType || "TSParameterProperty" === nodeType || nodeType === "Placeholder" && ("Pattern" === node.expectedNode || "Identifier" === node.expectedNode)) { + if ("Identifier" === nodeType || "MemberExpression" === nodeType || "RestElement" === nodeType || "AssignmentPattern" === nodeType || "ArrayPattern" === nodeType || "ObjectPattern" === nodeType || "TSParameterProperty" === nodeType || "TSAsExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSNonNullExpression" === nodeType || nodeType === "Placeholder" && ("Pattern" === node.expectedNode || "Identifier" === node.expectedNode)) { if (typeof opts === "undefined") { return true; } else { @@ -4690,7 +4706,7 @@ function isTypeScript(node, opts) { if (!node) return false; const nodeType = node.type; - if ("TSParameterProperty" === nodeType || "TSDeclareFunction" === nodeType || "TSDeclareMethod" === nodeType || "TSQualifiedName" === nodeType || "TSCallSignatureDeclaration" === nodeType || "TSConstructSignatureDeclaration" === nodeType || "TSPropertySignature" === nodeType || "TSMethodSignature" === nodeType || "TSIndexSignature" === nodeType || "TSAnyKeyword" === nodeType || "TSBooleanKeyword" === nodeType || "TSBigIntKeyword" === nodeType || "TSIntrinsicKeyword" === nodeType || "TSNeverKeyword" === nodeType || "TSNullKeyword" === nodeType || "TSNumberKeyword" === nodeType || "TSObjectKeyword" === nodeType || "TSStringKeyword" === nodeType || "TSSymbolKeyword" === nodeType || "TSUndefinedKeyword" === nodeType || "TSUnknownKeyword" === nodeType || "TSVoidKeyword" === nodeType || "TSThisType" === nodeType || "TSFunctionType" === nodeType || "TSConstructorType" === nodeType || "TSTypeReference" === nodeType || "TSTypePredicate" === nodeType || "TSTypeQuery" === nodeType || "TSTypeLiteral" === nodeType || "TSArrayType" === nodeType || "TSTupleType" === nodeType || "TSOptionalType" === nodeType || "TSRestType" === nodeType || "TSNamedTupleMember" === nodeType || "TSUnionType" === nodeType || "TSIntersectionType" === nodeType || "TSConditionalType" === nodeType || "TSInferType" === nodeType || "TSParenthesizedType" === nodeType || "TSTypeOperator" === nodeType || "TSIndexedAccessType" === nodeType || "TSMappedType" === nodeType || "TSLiteralType" === nodeType || "TSExpressionWithTypeArguments" === nodeType || "TSInterfaceDeclaration" === nodeType || "TSInterfaceBody" === nodeType || "TSTypeAliasDeclaration" === nodeType || "TSAsExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSEnumDeclaration" === nodeType || "TSEnumMember" === nodeType || "TSModuleDeclaration" === nodeType || "TSModuleBlock" === nodeType || "TSImportType" === nodeType || "TSImportEqualsDeclaration" === nodeType || "TSExternalModuleReference" === nodeType || "TSNonNullExpression" === nodeType || "TSExportAssignment" === nodeType || "TSNamespaceExportDeclaration" === nodeType || "TSTypeAnnotation" === nodeType || "TSTypeParameterInstantiation" === nodeType || "TSTypeParameterDeclaration" === nodeType || "TSTypeParameter" === nodeType) { + if ("TSParameterProperty" === nodeType || "TSDeclareFunction" === nodeType || "TSDeclareMethod" === nodeType || "TSQualifiedName" === nodeType || "TSCallSignatureDeclaration" === nodeType || "TSConstructSignatureDeclaration" === nodeType || "TSPropertySignature" === nodeType || "TSMethodSignature" === nodeType || "TSIndexSignature" === nodeType || "TSAnyKeyword" === nodeType || "TSBooleanKeyword" === nodeType || "TSBigIntKeyword" === nodeType || "TSIntrinsicKeyword" === nodeType || "TSNeverKeyword" === nodeType || "TSNullKeyword" === nodeType || "TSNumberKeyword" === nodeType || "TSObjectKeyword" === nodeType || "TSStringKeyword" === nodeType || "TSSymbolKeyword" === nodeType || "TSUndefinedKeyword" === nodeType || "TSUnknownKeyword" === nodeType || "TSVoidKeyword" === nodeType || "TSThisType" === nodeType || "TSFunctionType" === nodeType || "TSConstructorType" === nodeType || "TSTypeReference" === nodeType || "TSTypePredicate" === nodeType || "TSTypeQuery" === nodeType || "TSTypeLiteral" === nodeType || "TSArrayType" === nodeType || "TSTupleType" === nodeType || "TSOptionalType" === nodeType || "TSRestType" === nodeType || "TSNamedTupleMember" === nodeType || "TSUnionType" === nodeType || "TSIntersectionType" === nodeType || "TSConditionalType" === nodeType || "TSInferType" === nodeType || "TSParenthesizedType" === nodeType || "TSTypeOperator" === nodeType || "TSIndexedAccessType" === nodeType || "TSMappedType" === nodeType || "TSLiteralType" === nodeType || "TSExpressionWithTypeArguments" === nodeType || "TSInterfaceDeclaration" === nodeType || "TSInterfaceBody" === nodeType || "TSTypeAliasDeclaration" === nodeType || "TSInstantiationExpression" === nodeType || "TSAsExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSEnumDeclaration" === nodeType || "TSEnumMember" === nodeType || "TSModuleDeclaration" === nodeType || "TSModuleBlock" === nodeType || "TSImportType" === nodeType || "TSImportEqualsDeclaration" === nodeType || "TSExternalModuleReference" === nodeType || "TSNonNullExpression" === nodeType || "TSExportAssignment" === nodeType || "TSNamespaceExportDeclaration" === nodeType || "TSTypeAnnotation" === nodeType || "TSTypeParameterInstantiation" === nodeType || "TSTypeParameterDeclaration" === nodeType || "TSTypeParameter" === nodeType) { if (typeof opts === "undefined") { return true; } else { @@ -4808,4 +4824,6 @@ function isSpreadProperty(node, opts) { } return false; -} \ No newline at end of file +} + +//# sourceMappingURL=index.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/is.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/is.js index 581979fa701..a70ede0e086 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/is.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/is.js @@ -30,4 +30,6 @@ function is(type, node, opts) { } else { return (0, _shallowEqual.default)(node, opts); } -} \ No newline at end of file +} + +//# sourceMappingURL=is.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isBinding.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isBinding.js index 74c86dd0e98..61b57c7a021 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isBinding.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isBinding.js @@ -28,4 +28,6 @@ function isBinding(node, parent, grandparent) { } return false; -} \ No newline at end of file +} + +//# sourceMappingURL=isBinding.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isBlockScoped.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isBlockScoped.js index 77ec1663004..0a20a07f9d7 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isBlockScoped.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isBlockScoped.js @@ -11,4 +11,6 @@ var _isLet = require("./isLet"); function isBlockScoped(node) { return (0, _generated.isFunctionDeclaration)(node) || (0, _generated.isClassDeclaration)(node) || (0, _isLet.default)(node); -} \ No newline at end of file +} + +//# sourceMappingURL=isBlockScoped.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isImmutable.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isImmutable.js index 27754f6599e..10d6ed09db6 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isImmutable.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isImmutable.js @@ -21,4 +21,6 @@ function isImmutable(node) { } return false; -} \ No newline at end of file +} + +//# sourceMappingURL=isImmutable.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isLet.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isLet.js index 93d75628082..2e1b0d8c7e6 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isLet.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isLet.js @@ -11,4 +11,6 @@ var _constants = require("../constants"); function isLet(node) { return (0, _generated.isVariableDeclaration)(node) && (node.kind !== "var" || node[_constants.BLOCK_SCOPED_SYMBOL]); -} \ No newline at end of file +} + +//# sourceMappingURL=isLet.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isNode.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isNode.js index e88a47aac45..824b656e67e 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isNode.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isNode.js @@ -9,4 +9,6 @@ var _definitions = require("../definitions"); function isNode(node) { return !!(node && _definitions.VISITOR_KEYS[node.type]); -} \ No newline at end of file +} + +//# sourceMappingURL=isNode.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isNodesEquivalent.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isNodesEquivalent.js index f829834e910..e070b89f07c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isNodesEquivalent.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isNodesEquivalent.js @@ -20,27 +20,30 @@ function isNodesEquivalent(a, b) { const visitorKeys = _definitions.VISITOR_KEYS[a.type]; for (const field of fields) { - if (typeof a[field] !== typeof b[field]) { + const val_a = a[field]; + const val_b = b[field]; + + if (typeof val_a !== typeof val_b) { return false; } - if (a[field] == null && b[field] == null) { + if (val_a == null && val_b == null) { continue; - } else if (a[field] == null || b[field] == null) { + } else if (val_a == null || val_b == null) { return false; } - if (Array.isArray(a[field])) { - if (!Array.isArray(b[field])) { + if (Array.isArray(val_a)) { + if (!Array.isArray(val_b)) { return false; } - if (a[field].length !== b[field].length) { + if (val_a.length !== val_b.length) { return false; } - for (let i = 0; i < a[field].length; i++) { - if (!isNodesEquivalent(a[field][i], b[field][i])) { + for (let i = 0; i < val_a.length; i++) { + if (!isNodesEquivalent(val_a[i], val_b[i])) { return false; } } @@ -48,9 +51,9 @@ function isNodesEquivalent(a, b) { continue; } - if (typeof a[field] === "object" && !(visitorKeys != null && visitorKeys.includes(field))) { - for (const key of Object.keys(a[field])) { - if (a[field][key] !== b[field][key]) { + if (typeof val_a === "object" && !(visitorKeys != null && visitorKeys.includes(field))) { + for (const key of Object.keys(val_a)) { + if (val_a[key] !== val_b[key]) { return false; } } @@ -58,10 +61,12 @@ function isNodesEquivalent(a, b) { continue; } - if (!isNodesEquivalent(a[field], b[field])) { + if (!isNodesEquivalent(val_a, val_b)) { return false; } } return true; -} \ No newline at end of file +} + +//# sourceMappingURL=isNodesEquivalent.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isPlaceholderType.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isPlaceholderType.js index e8271de0b1c..2853b755018 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isPlaceholderType.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isPlaceholderType.js @@ -18,4 +18,6 @@ function isPlaceholderType(placeholderType, targetType) { } return false; -} \ No newline at end of file +} + +//# sourceMappingURL=isPlaceholderType.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isReferenced.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isReferenced.js index 471150bfc6d..113b6bc3d50 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isReferenced.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isReferenced.js @@ -125,4 +125,6 @@ function isReferenced(node, parent, grandparent) { } return true; -} \ No newline at end of file +} + +//# sourceMappingURL=isReferenced.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isScope.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isScope.js index 0f82449cce7..d317d045bab 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isScope.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isScope.js @@ -17,4 +17,6 @@ function isScope(node, parent) { } return (0, _generated.isScopable)(node); -} \ No newline at end of file +} + +//# sourceMappingURL=isScope.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isSpecifierDefault.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isSpecifierDefault.js index 25431cc2732..3cb906957e4 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isSpecifierDefault.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isSpecifierDefault.js @@ -11,4 +11,6 @@ function isSpecifierDefault(specifier) { return (0, _generated.isImportDefaultSpecifier)(specifier) || (0, _generated.isIdentifier)(specifier.imported || specifier.exported, { name: "default" }); -} \ No newline at end of file +} + +//# sourceMappingURL=isSpecifierDefault.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isType.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isType.js index 59d31dfbbfc..0706d62255c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isType.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isType.js @@ -21,4 +21,6 @@ function isType(nodeType, targetType) { } return false; -} \ No newline at end of file +} + +//# sourceMappingURL=isType.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isValidES3Identifier.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isValidES3Identifier.js index 5cef5664df0..71659705d22 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isValidES3Identifier.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isValidES3Identifier.js @@ -11,4 +11,6 @@ const RESERVED_WORDS_ES3_ONLY = new Set(["abstract", "boolean", "byte", "char", function isValidES3Identifier(name) { return (0, _isValidIdentifier.default)(name) && !RESERVED_WORDS_ES3_ONLY.has(name); -} \ No newline at end of file +} + +//# sourceMappingURL=isValidES3Identifier.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isValidIdentifier.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isValidIdentifier.js index 3fa6f98000b..4324c5f66e6 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isValidIdentifier.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isValidIdentifier.js @@ -17,4 +17,6 @@ function isValidIdentifier(name, reserved = true) { } return (0, _helperValidatorIdentifier.isIdentifierName)(name); -} \ No newline at end of file +} + +//# sourceMappingURL=isValidIdentifier.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isVar.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isVar.js index a34801d18fe..b44c52daeaa 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isVar.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/isVar.js @@ -13,4 +13,6 @@ function isVar(node) { return (0, _generated.isVariableDeclaration)(node, { kind: "var" }) && !node[_constants.BLOCK_SCOPED_SYMBOL]; -} \ No newline at end of file +} + +//# sourceMappingURL=isVar.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/matchesPattern.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/matchesPattern.js index d961f5a6ef2..b50e4f7f779 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/matchesPattern.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/matchesPattern.js @@ -39,4 +39,6 @@ function matchesPattern(member, match, allowPartial) { } return true; -} \ No newline at end of file +} + +//# sourceMappingURL=matchesPattern.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/react/isCompatTag.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/react/isCompatTag.js index 57761c2b1b1..aef0d09bb7a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/react/isCompatTag.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/react/isCompatTag.js @@ -7,4 +7,6 @@ exports.default = isCompatTag; function isCompatTag(tagName) { return !!tagName && /^[a-z]/.test(tagName); -} \ No newline at end of file +} + +//# sourceMappingURL=isCompatTag.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/react/isReactComponent.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/react/isReactComponent.js index 0dd2102589a..bf41f33a82c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/react/isReactComponent.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/react/isReactComponent.js @@ -9,4 +9,6 @@ var _buildMatchMemberExpression = require("../buildMatchMemberExpression"); const isReactComponent = (0, _buildMatchMemberExpression.default)("React.Component"); var _default = isReactComponent; -exports.default = _default; \ No newline at end of file +exports.default = _default; + +//# sourceMappingURL=isReactComponent.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/validate.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/validate.js index a2bfe3d4910..a2c16535024 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/validate.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/validators/validate.js @@ -29,4 +29,6 @@ function validateChild(node, key, val) { const validate = _definitions.NODE_PARENT_VALIDATIONS[val.type]; if (!validate) return; validate(node, key, val); -} \ No newline at end of file +} + +//# sourceMappingURL=validate.js.map diff --git a/tools/node_modules/eslint/node_modules/@babel/types/package.json b/tools/node_modules/eslint/node_modules/@babel/types/package.json index bf92dacb575..a838369c361 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/package.json +++ b/tools/node_modules/eslint/node_modules/@babel/types/package.json @@ -1,6 +1,6 @@ { "name": "@babel/types", - "version": "7.17.0", + "version": "7.19.0", "description": "Babel Types is a Lodash-esque utility library for AST nodes", "author": "The Babel Team (https://babel.dev/team)", "homepage": "https://babel.dev/docs/en/next/babel-types", @@ -24,16 +24,18 @@ } }, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" }, "devDependencies": { - "@babel/generator": "^7.17.0", - "@babel/parser": "^7.17.0", + "@babel/generator": "^7.19.0", + "@babel/parser": "^7.19.0", "chalk": "^4.1.0", - "glob": "^7.1.7" + "glob": "^7.2.0" }, "engines": { "node": ">=6.9.0" - } + }, + "type": "commonjs" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/asserts.js b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/asserts.js index bdfd94857fc..1d862e41760 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/asserts.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/asserts.js @@ -1,4 +1,4 @@ -import definitions from "../../lib/definitions/index.js"; +import * as definitions from "../../lib/definitions/index.js"; function addAssertHelper(type) { const result = diff --git a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/ast-types.js b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/ast-types.js index 3bf42869f12..92eb055e97c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/ast-types.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/ast-types.js @@ -1,5 +1,38 @@ -import t from "../../lib/index.js"; -import stringifyValidator from "../utils/stringifyValidator.js"; +import * as t from "../../lib/index.js"; +import stringifyValidator, { + isValueType, +} from "../utils/stringifyValidator.js"; + +const parentMaps = new Map([["File", new Set(["null"])]]); + +function registerParentMaps(parent, nodes) { + for (const node of nodes) { + if (!parentMaps.has(node)) { + parentMaps.set(node, new Set()); + } + parentMaps.get(node).add(parent); + } +} + +function getNodeTypesFromValidator(validator) { + if (validator === undefined) return []; + if (validator.each) { + return getNodeTypesFromValidator(validator.each); + } + if (validator.chainOf) { + return getNodeTypesFromValidator(validator.chainOf[1]); + } + let nodeTypes = []; + if (validator.oneOfNodeTypes) { + nodeTypes = validator.oneOfNodeTypes; + } + if (validator.oneOfNodeOrValueTypes) { + nodeTypes = validator.oneOfNodeOrValueTypes.filter( + type => !isValueType(type) + ); + } + return nodeTypes.flatMap(type => t.FLIPPED_ALIAS_KEYS[type] ?? type); +} export default function generateAstTypes() { let code = `// NOTE: This file is autogenerated. Do not modify. @@ -7,9 +40,11 @@ export default function generateAstTypes() { interface BaseComment { value: string; - start: number; - end: number; - loc: SourceLocation; + start?: number; + end?: number; + loc?: SourceLocation; + // generator will skip the comment if ignore is true + ignore?: boolean; type: "CommentBlock" | "CommentLine"; } @@ -36,13 +71,13 @@ export interface SourceLocation { } interface BaseNode { - leadingComments: ReadonlyArray | null; - innerComments: ReadonlyArray | null; - trailingComments: ReadonlyArray | null; - start: number | null; - end: number | null; - loc: SourceLocation | null; type: Node["type"]; + leadingComments?: Comment[] | null; + innerComments?: Comment[] | null; + trailingComments?: Comment[] | null; + start?: number | null; + end?: number | null; + loc?: SourceLocation | null; range?: [number, number]; extra?: Record; } @@ -85,6 +120,8 @@ export type Node = ${t.TYPES.filter(k => !t.FLIPPED_ALIAS_KEYS[k]) } else { struct.push(`"${fieldName}"${optional}: ${typeAnnotation};`); } + + registerParentMaps(type, getNodeTypesFromValidator(field.validate)); }); code += `export interface ${type} extends BaseNode { @@ -121,6 +158,21 @@ export interface ${deprecatedAlias[type]} extends BaseNode { t.DEPRECATED_KEYS ).join(" | ")}\n\n`; + code += "export interface ParentMaps {\n"; + + registerParentMaps("null", [...Object.keys(t.DEPRECATED_KEYS)]); + // todo: provide a better parent type for Placeholder, currently it acts + // as a catch-all parent type for an abstract NodePath, s.t NodePath.parent must + // be a Node if type has not been specified + registerParentMaps("Node", ["Placeholder"]); + + const parentMapsKeys = [...parentMaps.keys()].sort(); + for (const type of parentMapsKeys) { + const deduplicated = [...parentMaps.get(type)].sort(); + code += ` ${type}: ${deduplicated.join(" | ")};\n`; + } + code += "}\n\n"; + return code; } diff --git a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/builders.js b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/builders.js index 13e772eb43d..46566f58c4c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/builders.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/builders.js @@ -1,5 +1,5 @@ -import t from "../../lib/index.js"; -import definitions from "../../lib/definitions/index.js"; +import * as t from "../../lib/index.js"; +import * as definitions from "../../lib/definitions/index.js"; import formatBuilderName from "../utils/formatBuilderName.js"; import lowerFirst from "../utils/lowerFirst.js"; import stringifyValidator from "../utils/stringifyValidator.js"; @@ -51,20 +51,23 @@ function generateBuilderArgs(type) { } if (builderNames.includes(fieldName)) { + const field = definitions.NODE_FIELDS[type][fieldName]; + const def = JSON.stringify(field.default); const bindingIdentifierName = t.toBindingIdentifierName(fieldName); + let arg; if (areAllRemainingFieldsNullable(fieldName, builderNames, fields)) { - args.push( - `${bindingIdentifierName}${ - isNullable(field) ? "?:" : ":" - } ${typeAnnotation}` - ); + arg = `${bindingIdentifierName}${ + isNullable(field) && !def ? "?:" : ":" + } ${typeAnnotation}`; } else { - args.push( - `${bindingIdentifierName}: ${typeAnnotation}${ - isNullable(field) ? " | undefined" : "" - }` - ); + arg = `${bindingIdentifierName}: ${typeAnnotation}${ + isNullable(field) ? " | undefined" : "" + }`; } + if (def !== "null" || isNullable(field)) { + arg += `= ${def}`; + } + args.push(arg); } }); @@ -82,11 +85,8 @@ function generateLowercaseBuilders() { * This file is auto-generated! Do not modify it directly. * To re-generate run 'make build' */ -import builder from "../builder"; +import validateNode from "../validateNode"; import type * as t from "../.."; - -/* eslint-disable @typescript-eslint/no-unused-vars */ - `; const reservedNames = new Set(["super", "import"]); @@ -96,11 +96,39 @@ import type * as t from "../.."; const formatedBuilderNameLocal = reservedNames.has(formatedBuilderName) ? `_${formatedBuilderName}` : formatedBuilderName; + + const fieldNames = sortFieldNames( + Object.keys(definitions.NODE_FIELDS[type]), + type + ); + const builderNames = definitions.BUILDER_KEYS[type]; + const objectFields = [["type", JSON.stringify(type)]]; + fieldNames.forEach(fieldName => { + const field = definitions.NODE_FIELDS[type][fieldName]; + if (builderNames.includes(fieldName)) { + const bindingIdentifierName = t.toBindingIdentifierName(fieldName); + objectFields.push([fieldName, bindingIdentifierName]); + } else if (!field.optional) { + const def = JSON.stringify(field.default); + objectFields.push([fieldName, def]); + } + }); + output += `${ formatedBuilderNameLocal === formatedBuilderName ? "export " : "" - }function ${formatedBuilderNameLocal}(${defArgs.join( - ", " - )}): t.${type} { return builder.apply("${type}", arguments); }\n`; + }function ${formatedBuilderNameLocal}(${defArgs.join(", ")}): t.${type} {`; + + const nodeObjectExpression = `{\n${objectFields + .map(([k, v]) => (k === v ? ` ${k},` : ` ${k}: ${v},`)) + .join("\n")}\n }`; + + if (builderNames.length > 0) { + output += `\n return validateNode(${nodeObjectExpression});`; + } else { + output += `\n return ${nodeObjectExpression};`; + } + output += `\n}\n`; + if (formatedBuilderNameLocal !== formatedBuilderName) { output += `export { ${formatedBuilderNameLocal} as ${formatedBuilderName} };\n`; } @@ -118,10 +146,11 @@ import type * as t from "../.."; Object.keys(definitions.DEPRECATED_KEYS).forEach(type => { const newType = definitions.DEPRECATED_KEYS[type]; const formatedBuilderName = formatBuilderName(type); + const formatedNewBuilderName = formatBuilderName(newType); output += `/** @deprecated */ -function ${type}(${generateBuilderArgs(newType).join(", ")}): t.${type} { +function ${type}(${generateBuilderArgs(newType).join(", ")}) { console.trace("The node type ${type} has been renamed to ${newType}"); - return builder.apply("${type}", arguments); + return ${formatedNewBuilderName}(${t.BUILDER_KEYS[newType].join(", ")}); } export { ${type} as ${formatedBuilderName} };\n`; // This is needed for backwards compatibility. diff --git a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/constants.js b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/constants.js index 68abdbd837f..65b7a905d77 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/constants.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/constants.js @@ -1,4 +1,4 @@ -import definitions from "../../lib/definitions/index.js"; +import * as definitions from "../../lib/definitions/index.js"; export default function generateConstants() { let output = `/* diff --git a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/docs.js b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/docs.js index 95e4815fb03..528ac0b4f85 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/docs.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/docs.js @@ -2,7 +2,7 @@ import util from "util"; import stringifyValidator from "../utils/stringifyValidator.js"; import toFunctionName from "../utils/toFunctionName.js"; -import t from "../../lib/index.js"; +import * as t from "../../lib/index.js"; const readme = [ `--- @@ -176,6 +176,7 @@ function generateMapAliasToNodeTypes() { return result; } const aliasDescriptions = { + Accessor: "Deprecated. Will be removed in Babel 8.", Binary: "A cover of BinaryExpression and LogicalExpression, which share the same AST shape.", Block: "Deprecated. Will be removed in Babel 8.", diff --git a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/flow.js b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/flow.js index 7fabcc67c52..06cd388cea9 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/flow.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/flow.js @@ -1,4 +1,4 @@ -import t from "../../lib/index.js"; +import * as t from "../../lib/index.js"; import stringifyValidator from "../utils/stringifyValidator.js"; import toFunctionName from "../utils/toFunctionName.js"; diff --git a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/typescript-legacy.js b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/typescript-legacy.js index 40da48f4e7d..7701047158a 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/typescript-legacy.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/typescript-legacy.js @@ -1,4 +1,4 @@ -import t from "../../lib/index.js"; +import * as t from "../../lib/index.js"; import stringifyValidator from "../utils/stringifyValidator.js"; import toFunctionName from "../utils/toFunctionName.js"; diff --git a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/validators.js b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/validators.js index acd6da65750..85c8b4906c8 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/validators.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/scripts/generators/validators.js @@ -1,4 +1,4 @@ -import definitions from "../../lib/definitions/index.js"; +import * as definitions from "../../lib/definitions/index.js"; const has = Function.call.bind(Object.prototype.hasOwnProperty); diff --git a/tools/node_modules/eslint/node_modules/@babel/types/scripts/utils/stringifyValidator.js b/tools/node_modules/eslint/node_modules/@babel/types/scripts/utils/stringifyValidator.js index 4b8d29c12c3..a3da470ad7c 100644 --- a/tools/node_modules/eslint/node_modules/@babel/types/scripts/utils/stringifyValidator.js +++ b/tools/node_modules/eslint/node_modules/@babel/types/scripts/utils/stringifyValidator.js @@ -8,7 +8,10 @@ export default function stringifyValidator(validator, nodePrefix) { } if (validator.chainOf) { - return stringifyValidator(validator.chainOf[1], nodePrefix); + const ret = stringifyValidator(validator.chainOf[1], nodePrefix); + return Array.isArray(ret) && ret.length === 1 && ret[0] === "any" + ? stringifyValidator(validator.chainOf[0], nodePrefix) + : ret; } if (validator.oneOf) { @@ -61,6 +64,6 @@ export default function stringifyValidator(validator, nodePrefix) { * Heuristic to decide whether or not the given type is a value type (eg. "null") * or a Node type (eg. "Expression"). */ -function isValueType(type) { +export function isValueType(type) { return type.charAt(0).toLowerCase() === type.charAt(0); } diff --git a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/dist/index.cjs.cjs b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/dist/index.cjs.cjs index 4666c40ba08..f5708666719 100644 --- a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/dist/index.cjs.cjs +++ b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/dist/index.cjs.cjs @@ -28,33 +28,6 @@ const stripEncapsulatingBrackets = (container, isArr) => { container.rawType = container.rawType.replace(/^\{/u, '').replace(/\}$/u, ''); }; -/** - * Strips brackets from a tag's `rawType` values and adds `parsedType` - * @param {JsdocTag} lastTag - * @param {external:JsdocTypePrattParserMode} mode - * @returns {void} - */ - - -const cleanUpLastTag = (lastTag, mode) => { - // Strip out `}` that encapsulates and is not part of - // the type - stripEncapsulatingBrackets(lastTag); - - if (lastTag.typeLines.length) { - stripEncapsulatingBrackets(lastTag.typeLines, true); - } // With even a multiline type now in full, add parsing - - - let parsedType = null; - - try { - parsedType = jsdocTypePrattParser.parse(lastTag.rawType, mode); - } catch (err) {// Ignore - } - - lastTag.parsedType = parsedType; -}; /** * @external CommentParserJsdoc */ @@ -68,7 +41,7 @@ const cleanUpLastTag = (lastTag, mode) => { * delimiter: string, * postDelimiter: string, * rawType: string, - * start: string, + * initial: string, * type: "JsdocTypeLine" * }} JsdocTypeLine */ @@ -78,7 +51,7 @@ const cleanUpLastTag = (lastTag, mode) => { * delimiter: string, * description: string, * postDelimiter: string, - * start: string, + * initial: string, * type: "JsdocDescriptionLine" * }} JsdocDescriptionLine */ @@ -88,9 +61,9 @@ const cleanUpLastTag = (lastTag, mode) => { * delimiter: string, * description: string, * postDelimiter: string, - * start: string, + * initial: string, * tag: string, - * end: string, + * terminal: string, * type: string, * descriptionLines: JsdocDescriptionLine[], * rawType: string, @@ -104,7 +77,8 @@ const cleanUpLastTag = (lastTag, mode) => { * delimiter: string, * description: string, * descriptionLines: JsdocDescriptionLine[], - * end: string, + * initial: string, + * terminal: string, * postDelimiter: string, * lineEnd: string, * type: "JsdocBlock", @@ -114,14 +88,48 @@ const cleanUpLastTag = (lastTag, mode) => { */ /** - * + * Converts comment parser AST to ESTree format. * @param {external:CommentParserJsdoc} jsdoc * @param {external:JsdocTypePrattParserMode} mode + * @param {PlainObject} opts + * @param {throwOnTypeParsingErrors} [opts.throwOnTypeParsingErrors=false] * @returns {JsdocBlock} */ -const commentParserToESTree = (jsdoc, mode) => { +const commentParserToESTree = (jsdoc, mode, { + throwOnTypeParsingErrors = false +} = {}) => { + /** + * Strips brackets from a tag's `rawType` values and adds `parsedType` + * @param {JsdocTag} lastTag + * @returns {void} + */ + const cleanUpLastTag = lastTag => { + // Strip out `}` that encapsulates and is not part of + // the type + stripEncapsulatingBrackets(lastTag); + + if (lastTag.typeLines.length) { + stripEncapsulatingBrackets(lastTag.typeLines, true); + } // With even a multiline type now in full, add parsing + + + let parsedType = null; + + try { + parsedType = jsdocTypePrattParser.parse(lastTag.rawType, mode); + } catch (err) { + // Ignore + if (lastTag.rawType && throwOnTypeParsingErrors) { + err.message = `Tag @${lastTag.tag} with raw type ` + `\`${lastTag.rawType}\` had parsing error: ${err.message}`; + throw err; + } + } + + lastTag.parsedType = parsedType; + }; + const { source } = jsdoc; @@ -130,6 +138,7 @@ const commentParserToESTree = (jsdoc, mode) => { delimiter: delimiterRoot, lineEnd: lineEndRoot, postDelimiter: postDelimiterRoot, + start: startRoot, end: endRoot, description: descriptionRoot } @@ -139,8 +148,9 @@ const commentParserToESTree = (jsdoc, mode) => { delimiter: delimiterRoot, description: descriptionRoot, descriptionLines: [], - // `end` will be overwritten if there are other entries - end: endRoot, + initial: startRoot, + // `terminal` will be overwritten if there are other entries + terminal: endRoot, endLine, postDelimiter: postDelimiterRoot, lineEnd: lineEndRoot, @@ -157,7 +167,7 @@ const commentParserToESTree = (jsdoc, mode) => { delimiter, description, postDelimiter, - start, + start: initial, tag, end, type: rawType @@ -170,14 +180,14 @@ const commentParserToESTree = (jsdoc, mode) => { if (lastTag) { - cleanUpLastTag(lastTag, mode); + cleanUpLastTag(lastTag); } // Stop the iteration when we reach the end // but only when there is no tag earlier in the line // to still process if (end && !tag) { - ast.end = end; + ast.terminal = end; return; } @@ -185,21 +195,29 @@ const commentParserToESTree = (jsdoc, mode) => { end: ed, delimiter: de, postDelimiter: pd, + start: init, ...tkns } = tokens; if (!tokens.name) { - let i = 0; + let i = 1; while (source[idx + i]) { const { tokens: { name, - postName + postName, + postType, + tag: tg } } = source[idx + i]; + if (tg) { + break; + } + if (name) { + tkns.postType = postType; tkns.name = name; tkns.postName = postName; break; @@ -210,6 +228,7 @@ const commentParserToESTree = (jsdoc, mode) => { } const tagObj = { ...tkns, + initial: endLine ? init : '', postDelimiter: lastDescriptionLine ? pd : '', delimiter: lastDescriptionLine ? de : '', descriptionLines: [], @@ -228,13 +247,13 @@ const commentParserToESTree = (jsdoc, mode) => { delimiter, postDelimiter, rawType, - start, + initial, type: 'JsdocTypeLine' } : { delimiter: '', postDelimiter: '', rawType, - start: '', + initial: '', type: 'JsdocTypeLine' }); lastTag.rawType += lastTag.rawType ? '\n' + rawType : rawType; @@ -246,13 +265,19 @@ const commentParserToESTree = (jsdoc, mode) => { delimiter, description, postDelimiter, - start, + initial, type: 'JsdocDescriptionLine' - } : { + } : lastTag ? { delimiter: '', description, postDelimiter: '', - start: '', + initial: '', + type: 'JsdocDescriptionLine' + } : { + delimiter, + description, + postDelimiter, + initial, type: 'JsdocDescriptionLine' }); holder.description += holder.description ? '\n' + description : description; @@ -260,8 +285,8 @@ const commentParserToESTree = (jsdoc, mode) => { if (end && tag) { - ast.end = end; - cleanUpLastTag(lastTag, mode); + ast.terminal = end; + cleanUpLastTag(lastTag); } }); ast.lastDescriptionLine = lastDescriptionLine; @@ -317,10 +342,6 @@ const toCamelCase = str => { }; /* eslint-disable prefer-named-capture-group -- Temporary */ -const { - seedBlock, - seedTokens -} = commentParser.util; const { name: nameTokenizer, tag: tagTokenizer, @@ -332,6 +353,10 @@ const hasSeeWithLink = spec => { }; const defaultNoTypes = ['default', 'defaultvalue', 'see']; const defaultNoNames = ['access', 'author', 'default', 'defaultvalue', 'description', 'example', 'exception', 'kind', 'license', 'return', 'returns', 'since', 'summary', 'throws', 'version', 'variation']; +const optionalBrackets = /^\[(?[^=]*)=[^\]]*\]/u; +const preserveTypeTokenizer = typeTokenizer('preserve'); +const preserveDescriptionTokenizer = descriptionTokenizer('preserve'); +const plainNameTokenizer = nameTokenizer(); const getTokenizers = ({ noTypes = defaultNoTypes, @@ -345,14 +370,14 @@ const getTokenizers = ({ return spec; } - return typeTokenizer()(spec); + return preserveTypeTokenizer(spec); }, // Name spec => { if (spec.tag === 'template') { // const preWS = spec.postTag; const remainder = spec.source[0].tokens.description; const pos = remainder.search(/(? { - return descriptionTokenizer('preserve')(spec); + return preserveDescriptionTokenizer(spec); }]; }; /** - * + * Accepts a comment token and converts it into `comment-parser` AST. * @param {PlainObject} commentNode * @param {string} [indent=""] Whitespace * @returns {PlainObject} @@ -394,23 +427,10 @@ const getTokenizers = ({ const parseComment = (commentNode, indent = '') => { // Preserve JSDoc block start/end indentation. - return commentParser.parse(`/*${commentNode.value}*/`, { + return commentParser.parse(`${indent}/*${commentNode.value}*/`, { // @see https://github.com/yavorskiy/comment-parser/issues/21 tokenizers: getTokenizers() - })[0] || seedBlock({ - source: [{ - number: 0, - tokens: seedTokens({ - delimiter: '/**' - }) - }, { - number: 1, - tokens: seedTokens({ - end: '*/', - start: indent + ' ' - }) - }] - }); + })[0]; }; /** @@ -567,6 +587,22 @@ const getReducedASTNode = function (node, sourceCode) { case 'TSEmptyBodyFunctionExpression': case 'FunctionExpression': if (!invokedExpression.has(parent.type)) { + let token = node; + + do { + token = sourceCode.getTokenBefore(token, { + includeComments: true + }); + } while (token && token.type === 'Punctuator' && token.value === '('); + + if (token && token.type === 'Block') { + return node; + } + + if (sourceCode.getCommentsBefore(node).length) { + return node; + } + while (!sourceCode.getCommentsBefore(parent).length && !/Function/u.test(parent.type) && !allowableCommentNode.has(parent.type)) { ({ parent @@ -642,7 +678,7 @@ const findJSDocComment = (astNode, sourceCode, settings) => { break; } - if (tokenBefore.type === 'Block' && tokenBefore.value.charAt(0) === '*' && currentNode.loc.start.line - tokenBefore.loc.end.line >= minLines && currentNode.loc.start.line - tokenBefore.loc.end.line <= maxLines) { + if (tokenBefore.type === 'Block' && /^\*\s/u.test(tokenBefore.value) && currentNode.loc.start.line - tokenBefore.loc.end.line >= minLines && currentNode.loc.start.line - tokenBefore.loc.end.line <= maxLines) { return tokenBefore; } @@ -670,53 +706,56 @@ const stringifiers = { delimiter, postDelimiter, lineEnd, - end, + initial, + terminal, endLine - }, descriptionLines, tags) { - return `${delimiter}${postDelimiter}${endLine ? ` + }, opts, descriptionLines, tags) { + const alreadyHasLine = descriptionLines.length && !tags.length && descriptionLines[descriptionLines.length - 1].endsWith('\n') || tags.length && tags[tags.length - 1].endsWith('\n'); + return `${initial}${delimiter}${postDelimiter}${endLine ? ` ` : ''}${// Could use `node.description` (and `node.lineEnd`), but lines may have // been modified - descriptionLines.length ? descriptionLines.join('') + lineEnd : ''}${tags.length ? tags.join('\n') + lineEnd : ''}${endLine ? ` - ` : ''}${end}`; + descriptionLines.length ? descriptionLines.join(lineEnd + '\n') + (tags.length ? lineEnd + '\n' : '') : ''}${tags.length ? tags.join(lineEnd + '\n') : ''}${endLine && !alreadyHasLine ? `${lineEnd} + ${initial}` : endLine ? ` ${initial}` : ''}${terminal}`; }, JsdocDescriptionLine({ - start, + initial, delimiter, postDelimiter, description }) { - return `${start}${delimiter}${postDelimiter}${description}`; + return `${initial}${delimiter}${postDelimiter}${description}`; }, JsdocTypeLine({ - start, + initial, delimiter, postDelimiter, - rawType + rawType, + parsedType }) { - return `${delimiter}${postDelimiter}{${rawType}}`; + return `${initial}${delimiter}${postDelimiter}${rawType}`; }, - JsdocTag(node, parsedType, typeLines, descriptionLines) { + JsdocTag(node, opts, parsedType, typeLines, descriptionLines) { const { description, name, postName, postTag, postType, - start, + initial, delimiter, postDelimiter, tag // , rawType } = node; - return `${start}${delimiter}${postDelimiter}@${tag}${postTag}${// Could do `rawType` but may have been changed; could also do + return `${initial}${delimiter}${postDelimiter}@${tag}${postTag}${// Could do `rawType` but may have been changed; could also do // `typeLines` but not as likely to be changed // parsedType // Comment this out later in favor of `parsedType` // We can't use raw `typeLines` as first argument has delimiter on it - typeLines}${postType}${name ? `${name}${postName || (description ? '\n' : '')}` : ''}${descriptionLines.join('\n')}`; + opts.preferRawType || !parsedType ? typeLines.length ? `{${typeLines.join('\n')}}` : '' : parsedType}${postType}${name ? `${name}${postName || (description ? '\n' : '')}` : ''}${descriptionLines.join('\n')}`; } }; @@ -727,24 +766,25 @@ const visitorKeys = { ...jsdocVisitorKeys, * @todo convert for use by escodegen (until may be patched to support * custom entries?). * @param {Node} node + * @param {{preferRawType: boolean}} opts * @throws {Error} * @returns {string} */ -function estreeToString(node) { +function estreeToString(node, opts = {}) { if (Object.prototype.hasOwnProperty.call(stringifiers, node.type)) { const childNodeOrArray = visitorKeys[node.type]; const args = childNodeOrArray.map(key => { return Array.isArray(node[key]) ? node[key].map(item => { - return estreeToString(item); - }) : node[key] === undefined || node[key] === null ? [] : [estreeToString(node[key])]; + return estreeToString(item, opts); + }) : node[key] === undefined || node[key] === null ? null : estreeToString(node[key], opts); }); - return stringifiers[node.type](node, ...args); + return stringifiers[node.type](node, opts, ...args); } // We use raw type instead but it is a key as other apps may wish to traverse if (node.type.startsWith('JsdocType')) { - return ''; + return opts.preferRawType ? '' : `{${jsdocTypePrattParser.stringify(node)}}`; } throw new Error(`Unhandled node type: ${node.type}`); diff --git a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/package.json b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/package.json index 218f3670e02..a3e526ea410 100644 --- a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/package.json +++ b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/package.json @@ -1,6 +1,6 @@ { "name": "@es-joy/jsdoccomment", - "version": "0.20.1", + "version": "0.31.0", "author": "Brett Zamir ", "contributors": [], "description": "Maintained replacement for ESLint's deprecated SourceCode#getJSDocComment along with other jsdoc utilities", @@ -38,41 +38,41 @@ }, "homepage": "https://github.com/es-joy/jsdoccomment", "engines": { - "node": "^12 || ^14 || ^16 || ^17" + "node": "^14 || ^16 || ^17 || ^18" }, "dependencies": { - "comment-parser": "1.3.0", + "comment-parser": "1.3.1", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" + "jsdoc-type-pratt-parser": "~3.1.0" }, "devDependencies": { - "@babel/core": "^7.17.5", + "@babel/core": "^7.17.12", "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/preset-env": "^7.16.11", + "@babel/preset-env": "^7.17.12", "@brettz9/eslint-plugin": "^1.0.4", - "@rollup/plugin-babel": "^5.3.0", - "c8": "^7.11.0", + "@rollup/plugin-babel": "^5.3.1", + "c8": "^7.11.3", "chai": "^4.3.6", - "eslint": "^8.9.0", - "eslint-config-ash-nazg": "32.4.0", - "eslint-config-standard": "^16.0.3", + "eslint": "^8.15.0", + "eslint-config-ash-nazg": "33.1.0", + "eslint-config-standard": "^17.0.0", "eslint-plugin-array-func": "^3.1.7", "eslint-plugin-compat": "^4.0.2", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-html": "^6.2.0", - "eslint-plugin-import": "^2.25.4", - "eslint-plugin-jsdoc": "^37.9.2", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsdoc": "^39.2.9", "eslint-plugin-markdown": "^2.2.1", + "eslint-plugin-n": "^15.2.0", "eslint-plugin-no-unsanitized": "^4.0.1", "eslint-plugin-no-use-extend-native": "^0.5.0", - "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.0.0", - "eslint-plugin-sonarjs": "^0.11.0", - "eslint-plugin-unicorn": "^41.0.0", - "espree": "^9.3.1", + "eslint-plugin-sonarjs": "^0.13.0", + "eslint-plugin-unicorn": "^42.0.0", + "espree": "^9.3.2", "estraverse": "^5.3.0", - "mocha": "^9.2.0", - "rollup": "^2.67.2" + "mocha": "^10.0.0", + "rollup": "^2.74.0" }, "scripts": { "open": "open ./coverage/lcov-report/index.html", @@ -83,5 +83,5 @@ "c8": "c8 npm run mocha", "test": "npm run lint && npm run rollup && npm run c8" }, - "readme": "# @es-joy/jsdoccomment\n\n[![Node.js CI status](https://github.com/brettz9/getJSDocComment/workflows/Node.js%20CI/badge.svg)](https://github.com/brettz9/getJSDocComment/actions)\n\nThis project aims to preserve and expand upon the\n`SourceCode#getJSDocComment` functionality of the deprecated ESLint method.\n\nIt also exports a number of functions currently for working with JSDoc:\n\n## API\n\n### `parseComment`\n\nFor parsing `comment-parser` in a JSDoc-specific manner.\nMight wish to have tags with or without tags, etc. derived from a split off\nJSON file.\n\n### `commentParserToESTree`\n\nConverts [comment-parser](https://github.com/syavorsky/comment-parser)\nAST to ESTree/ESLint/Babel friendly AST. See the \"ESLint AST...\" section below.\n\n### `jsdocVisitorKeys`\n\nThe [VisitorKeys](https://github.com/eslint/eslint-visitor-keys)\nfor `JsdocBlock`, `JsdocDescriptionLine`, and `JsdocTag`. More likely to be\nsubject to change or dropped in favor of another type parser.\n\n### `jsdocTypeVisitorKeys`\n\nJust a re-export of [VisitorKeys](https://github.com/eslint/eslint-visitor-keys)\nfrom [`jsdoc-type-pratt-parser`](https://github.com/simonseyock/jsdoc-type-pratt-parser/).\n\n### `getDefaultTagStructureForMode`\n\nProvides info on JSDoc tags:\n\n- `nameContents` ('namepath-referencing'|'namepath-defining'|\n 'dual-namepath-referencing'|false) - Whether and how a name is allowed\n following any type. Tags without a proper name (value `false`) may still\n have a description (which can appear like a name); `descriptionAllowed`\n in such cases would be `true`.\n The presence of a truthy `nameContents` value is therefore only intended\n to signify whether separate parsing should occur for a name vs. a\n description, and what its nature should be.\n- `nameRequired` (boolean) - Whether a name must be present following any type.\n- `descriptionAllowed` (boolean) - Whether a description (following any name)\n is allowed.\n- `typeAllowed` (boolean) - Whether the tag accepts a curly bracketed portion.\n Even without a type, a tag may still have a name and/or description.\n- `typeRequired` (boolean) - Whether a curly bracketed type must be present.\n- `typeOrNameRequired` (boolean) - Whether either a curly bracketed type is\n required or a name, but not necessarily both.\n\n### Miscellaneous\n\nAlso currently exports these utilities, though they might be removed in the\nfuture:\n\n- `getTokenizers` - Used with `parseComment` (its main core)\n- `toCamelCase` - Convert to CamelCase.\n- `hasSeeWithLink` - A utility to detect if a tag is `@see` and has a `@link`\n- `commentHandler` - Used by `eslint-plugin-jsdoc`. Might be removed in future.\n- `commentParserToESTree`- Converts [comment-parser](https://github.com/syavorsky/comment-parser)\n AST to ESTree/ESLint/Babel friendly AST\n- `jsdocVisitorKeys` - The [VisitorKeys](https://github.com/eslint/eslint-visitor-keys)\n for `JSDocBlock`, `JSDocDescriptionLine`, and `JSDocTag`. Might change.\n- `jsdocTypeVisitorKeys` - [VisitorKeys](https://github.com/eslint/eslint-visitor-keys)\n for `jsdoc-type-pratt-parser`.\n- `getTokenizers` - A utility. Might be removed in future.\n- `toCamelCase` - A utility. Might be removed in future.\n- `hasSeeWithLink` - A utility to detect if a tag is `@see` and has a `@link`\n- `defaultNoTypes` = The tags which allow no types by default:\n `default`, `defaultvalue`, `see`;\n- `defaultNoNames` - The tags which allow no names by default:\n `access`, `author`, `default`, `defaultvalue`, `description`, `example`,\n `exception`, `kind`, `license`, `return`, `returns`, `since`, `summary`,\n `throws`, `version`, `variation`\n\n## ESLint AST produced for `comment-parser` nodes (`JsdocBlock`, `JsdocTag`, and `JsdocDescriptionLine`)\n\nNote: Although not added in this package, `@es-joy/jsdoc-eslint-parser` adds\na `jsdoc` property to other ES nodes (using this project's `getJSDocComment`\nto determine the specific comment-block that will be attached as AST).\n\n### `JsdocBlock`\n\nHas two visitable properties:\n\n1. `tags` (an array of `JsdocTag`; see below)\n2. `descriptionLines` (an array of `JsdocDescriptionLine` for multiline\n descriptions).\n\nHas the following custom non-visitable property:\n\n1. `lastDescriptionLine` - A number\n2. `endLine` - A number representing the line number with `end`\n\nMay also have the following non-visitable properties from `comment-parser`:\n\n1. `description` - Same as `descriptionLines` but as a string with newlines.\n2. `delimiter`\n3. `postDelimiter`\n4. `lineEnd`\n5. `end`\n\n### `JsdocTag`\n\nHas three visitable properties:\n\n1. `parsedType` (the `jsdoc-type-pratt-parser` AST representation of the tag's\n type (see the `jsdoc-type-pratt-parser` section below)).\n2. `descriptionLines` (an array of `JsdocDescriptionLine` for multiline\n descriptions)\n3. `typeLines` (an array of `JsdocTypeLine` for multiline type strings)\n\nMay also have the following non-visitable properties from `comment-parser`\n(note that all are included from `comment-parser` except `end` as that is only\nfor JSDoc blocks and note that `type` is renamed to `rawType`):\n\n1. `description` - Same as `descriptionLines` but as a string with newlines.\n2. `rawType` - `comment-parser` has this named as `type`, but because of a\n conflict with ESTree using `type` for Node type, we renamed it to\n `rawType`. It is otherwise the same as in `comment-parser`, i.e., a string\n with newlines, though with the initial `{` and final `}` stripped out.\n See `typeLines` for the array version of this property.\n3. `start`\n4. `delimiter`\n5. `postDelimiter`\n6. `tag` (this does differ from `comment-parser` now in terms of our stripping\n the initial `@`)\n7. `postTag`\n8. `name`\n9. `postName`\n10. `postType`\n\n### `JsdocDescriptionLine`\n\nNo visitable properties.\n\nMay also have the following non-visitable properties from `comment-parser`:\n\n1. `delimiter`\n2. `postDelimiter`\n3. `start`\n4. `description`\n\n### `JsdocTypeLine`\n\nNo visitable properties.\n\nMay also have the following non-visitable properties from `comment-parser`:\n\n1. `delimiter`\n2. `postDelimiter`\n3. `start`\n4. `rawType` - Renamed from `comment-parser` to avoid a conflict. See\n explanation under `JsdocTag`\n\n## ESLint AST produced for `jsdoc-type-pratt-parser`\n\nThe AST, including `type`, remains as is from [jsdoc-type-pratt-parser](https://github.com/simonseyock/jsdoc-type-pratt-parser/).\n\nThe type will always begin with a `JsdocType` prefix added, along with a\ncamel-cased type name, e.g., `JsdocTypeUnion`.\n\nThe `jsdoc-type-pratt-parser` visitor keys are also preserved without change.\n\n## Installation\n\n```shell\nnpm i @es-joy/jsdoccomment\n```\n\n## Changelog\n\nThe changelog can be found on the [CHANGES.md](./CHANGES.md).\n\n## Authors and license\n\n[Brett Zamir](http://brett-zamir.me/) and\n[contributors](https://github.com/es-joy/jsdoc-eslint-parser/graphs/contributors).\n\nMIT License, see the included [LICENSE-MIT.txt](LICENSE-MIT.txt) file.\n\n## To-dos\n\n1. Get complete code coverage\n" + "readme": "# @es-joy/jsdoccomment\n\n[![Node.js CI status](https://github.com/brettz9/getJSDocComment/workflows/Node.js%20CI/badge.svg)](https://github.com/brettz9/getJSDocComment/actions)\n\nThis project aims to preserve and expand upon the\n`SourceCode#getJSDocComment` functionality of the deprecated ESLint method.\n\nIt also exports a number of functions currently for working with JSDoc:\n\n## API\n\n### `parseComment`\n\nFor parsing `comment-parser` in a JSDoc-specific manner.\nMight wish to have tags with or without tags, etc. derived from a split off\nJSON file.\n\n### `commentParserToESTree`\n\nConverts [comment-parser](https://github.com/syavorsky/comment-parser)\nAST to ESTree/ESLint/Babel friendly AST. See the \"ESLint AST...\" section below.\n\n### `estreeToString`\n\nStringifies. In addition to the node argument, it accepts an optional second\noptions object with a single `preferRawType` key. If you don't need to modify\nJSDoc type AST, you might wish to set this to `true` to get the benefits of\npreserving the raw form, but for AST-based stringification of JSDoc types,\nkeep it `false` (the default).\n\n### `jsdocVisitorKeys`\n\nThe [VisitorKeys](https://github.com/eslint/eslint-visitor-keys)\nfor `JsdocBlock`, `JsdocDescriptionLine`, and `JsdocTag`. More likely to be\nsubject to change or dropped in favor of another type parser.\n\n### `jsdocTypeVisitorKeys`\n\nJust a re-export of [VisitorKeys](https://github.com/eslint/eslint-visitor-keys)\nfrom [`jsdoc-type-pratt-parser`](https://github.com/simonseyock/jsdoc-type-pratt-parser/).\n\n### `getDefaultTagStructureForMode`\n\nProvides info on JSDoc tags:\n\n- `nameContents` ('namepath-referencing'|'namepath-defining'|\n 'dual-namepath-referencing'|false) - Whether and how a name is allowed\n following any type. Tags without a proper name (value `false`) may still\n have a description (which can appear like a name); `descriptionAllowed`\n in such cases would be `true`.\n The presence of a truthy `nameContents` value is therefore only intended\n to signify whether separate parsing should occur for a name vs. a\n description, and what its nature should be.\n- `nameRequired` (boolean) - Whether a name must be present following any type.\n- `descriptionAllowed` (boolean) - Whether a description (following any name)\n is allowed.\n- `typeAllowed` (boolean) - Whether the tag accepts a curly bracketed portion.\n Even without a type, a tag may still have a name and/or description.\n- `typeRequired` (boolean) - Whether a curly bracketed type must be present.\n- `typeOrNameRequired` (boolean) - Whether either a curly bracketed type is\n required or a name, but not necessarily both.\n\n### Miscellaneous\n\nAlso currently exports these utilities, though they might be removed in the\nfuture:\n\n- `getTokenizers` - Used with `parseComment` (its main core)\n- `toCamelCase` - Convert to CamelCase.\n- `hasSeeWithLink` - A utility to detect if a tag is `@see` and has a `@link`\n- `commentHandler` - Used by `eslint-plugin-jsdoc`. Might be removed in future.\n- `commentParserToESTree`- Converts [comment-parser](https://github.com/syavorsky/comment-parser)\n AST to ESTree/ESLint/Babel friendly AST\n- `jsdocVisitorKeys` - The [VisitorKeys](https://github.com/eslint/eslint-visitor-keys)\n for `JSDocBlock`, `JSDocDescriptionLine`, and `JSDocTag`. Might change.\n- `jsdocTypeVisitorKeys` - [VisitorKeys](https://github.com/eslint/eslint-visitor-keys)\n for `jsdoc-type-pratt-parser`.\n- `getTokenizers` - A utility. Might be removed in future.\n- `toCamelCase` - A utility. Might be removed in future.\n- `hasSeeWithLink` - A utility to detect if a tag is `@see` and has a `@link`\n- `defaultNoTypes` = The tags which allow no types by default:\n `default`, `defaultvalue`, `see`;\n- `defaultNoNames` - The tags which allow no names by default:\n `access`, `author`, `default`, `defaultvalue`, `description`, `example`,\n `exception`, `kind`, `license`, `return`, `returns`, `since`, `summary`,\n `throws`, `version`, `variation`\n\n## ESLint AST produced for `comment-parser` nodes (`JsdocBlock`, `JsdocTag`, and `JsdocDescriptionLine`)\n\nNote: Although not added in this package, `@es-joy/jsdoc-eslint-parser` adds\na `jsdoc` property to other ES nodes (using this project's `getJSDocComment`\nto determine the specific comment-block that will be attached as AST).\n\n### `JsdocBlock`\n\nHas two visitable properties:\n\n1. `tags` (an array of `JsdocTag`; see below)\n2. `descriptionLines` (an array of `JsdocDescriptionLine` for multiline\n descriptions).\n\nHas the following custom non-visitable property:\n\n1. `lastDescriptionLine` - A number\n2. `endLine` - A number representing the line number with `end`/`terminal`\n\nMay also have the following non-visitable properties from `comment-parser`:\n\n1. `description` - Same as `descriptionLines` but as a string with newlines.\n2. `delimiter`\n3. `postDelimiter`\n4. `lineEnd`\n5. `initial` (from `start`)\n6. `terminal` (from `end`)\n\n### `JsdocTag`\n\nHas three visitable properties:\n\n1. `parsedType` (the `jsdoc-type-pratt-parser` AST representation of the tag's\n type (see the `jsdoc-type-pratt-parser` section below)).\n2. `descriptionLines` (an array of `JsdocDescriptionLine` for multiline\n descriptions)\n3. `typeLines` (an array of `JsdocTypeLine` for multiline type strings)\n\nMay also have the following non-visitable properties from `comment-parser`\n(note that all are included from `comment-parser` except `end` as that is only\nfor JSDoc blocks and note that `type` is renamed to `rawType` and `start` to\n`initial`):\n\n1. `description` - Same as `descriptionLines` but as a string with newlines.\n2. `rawType` - `comment-parser` has this named as `type`, but because of a\n conflict with ESTree using `type` for Node type, we renamed it to\n `rawType`. It is otherwise the same as in `comment-parser`, i.e., a string\n with newlines, though with the initial `{` and final `}` stripped out.\n See `typeLines` for the array version of this property.\n3. `initial` - Renamed from `start` to avoid potential conflicts with\n Acorn-style parser processing tools\n4. `delimiter`\n5. `postDelimiter`\n6. `tag` (this does differ from `comment-parser` now in terms of our stripping\n the initial `@`)\n7. `postTag`\n8. `name`\n9. `postName`\n10. `postType`\n\n### `JsdocDescriptionLine`\n\nNo visitable properties.\n\nMay also have the following non-visitable properties from `comment-parser`:\n\n1. `delimiter`\n2. `postDelimiter`\n3. `initial` (from `start`)\n4. `description`\n\n### `JsdocTypeLine`\n\nNo visitable properties.\n\nMay also have the following non-visitable properties from `comment-parser`:\n\n1. `delimiter`\n2. `postDelimiter`\n3. `initial` (from `start`)\n4. `rawType` - Renamed from `comment-parser` to avoid a conflict. See\n explanation under `JsdocTag`\n\n## ESLint AST produced for `jsdoc-type-pratt-parser`\n\nThe AST, including `type`, remains as is from [jsdoc-type-pratt-parser](https://github.com/simonseyock/jsdoc-type-pratt-parser/).\n\nThe type will always begin with a `JsdocType` prefix added, along with a\ncamel-cased type name, e.g., `JsdocTypeUnion`.\n\nThe `jsdoc-type-pratt-parser` visitor keys are also preserved without change.\n\n## Installation\n\n```shell\nnpm i @es-joy/jsdoccomment\n```\n\n## Changelog\n\nThe changelog can be found on the [CHANGES.md](./CHANGES.md).\n\n## Authors and license\n\n[Brett Zamir](http://brett-zamir.me/) and\n[contributors](https://github.com/es-joy/jsdoc-eslint-parser/graphs/contributors).\n\nMIT License, see the included [LICENSE-MIT.txt](LICENSE-MIT.txt) file.\n\n## To-dos\n\n1. Get complete code coverage\n2. Might add `trailing` for `JsdocBlock` to know whether it is followed by a\n line break or what not; `comment-parser` does not provide, however\n3. Fix and properly utilize `indent` argument (challenging for\n `eslint-plugin-jsdoc` but needed for `jsdoc-eslint-parser` stringifiers\n to be more faithful); should also then use the proposed `trailing` as well\n" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/commentParserToESTree.js b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/commentParserToESTree.js index 550c97c40b7..43587807406 100644 --- a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/commentParserToESTree.js +++ b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/commentParserToESTree.js @@ -23,32 +23,6 @@ const stripEncapsulatingBrackets = (container, isArr) => { ).replace(/\}$/u, ''); }; -/** - * Strips brackets from a tag's `rawType` values and adds `parsedType` - * @param {JsdocTag} lastTag - * @param {external:JsdocTypePrattParserMode} mode - * @returns {void} - */ -const cleanUpLastTag = (lastTag, mode) => { - // Strip out `}` that encapsulates and is not part of - // the type - stripEncapsulatingBrackets(lastTag); - if (lastTag.typeLines.length) { - stripEncapsulatingBrackets(lastTag.typeLines, true); - } - - // With even a multiline type now in full, add parsing - let parsedType = null; - - try { - parsedType = jsdocTypePrattParse(lastTag.rawType, mode); - } catch (err) { - // Ignore - } - - lastTag.parsedType = parsedType; -}; - /** * @external CommentParserJsdoc */ @@ -62,7 +36,7 @@ const cleanUpLastTag = (lastTag, mode) => { * delimiter: string, * postDelimiter: string, * rawType: string, - * start: string, + * initial: string, * type: "JsdocTypeLine" * }} JsdocTypeLine */ @@ -72,7 +46,7 @@ const cleanUpLastTag = (lastTag, mode) => { * delimiter: string, * description: string, * postDelimiter: string, - * start: string, + * initial: string, * type: "JsdocDescriptionLine" * }} JsdocDescriptionLine */ @@ -82,9 +56,9 @@ const cleanUpLastTag = (lastTag, mode) => { * delimiter: string, * description: string, * postDelimiter: string, - * start: string, + * initial: string, * tag: string, - * end: string, + * terminal: string, * type: string, * descriptionLines: JsdocDescriptionLine[], * rawType: string, @@ -98,7 +72,8 @@ const cleanUpLastTag = (lastTag, mode) => { * delimiter: string, * description: string, * descriptionLines: JsdocDescriptionLine[], - * end: string, + * initial: string, + * terminal: string, * postDelimiter: string, * lineEnd: string, * type: "JsdocBlock", @@ -108,18 +83,53 @@ const cleanUpLastTag = (lastTag, mode) => { */ /** - * + * Converts comment parser AST to ESTree format. * @param {external:CommentParserJsdoc} jsdoc * @param {external:JsdocTypePrattParserMode} mode + * @param {PlainObject} opts + * @param {throwOnTypeParsingErrors} [opts.throwOnTypeParsingErrors=false] * @returns {JsdocBlock} */ -const commentParserToESTree = (jsdoc, mode) => { +const commentParserToESTree = (jsdoc, mode, { + throwOnTypeParsingErrors = false +} = {}) => { + /** + * Strips brackets from a tag's `rawType` values and adds `parsedType` + * @param {JsdocTag} lastTag + * @returns {void} + */ + const cleanUpLastTag = (lastTag) => { + // Strip out `}` that encapsulates and is not part of + // the type + stripEncapsulatingBrackets(lastTag); + if (lastTag.typeLines.length) { + stripEncapsulatingBrackets(lastTag.typeLines, true); + } + + // With even a multiline type now in full, add parsing + let parsedType = null; + + try { + parsedType = jsdocTypePrattParse(lastTag.rawType, mode); + } catch (err) { + // Ignore + if (lastTag.rawType && throwOnTypeParsingErrors) { + err.message = `Tag @${lastTag.tag} with raw type ` + + `\`${lastTag.rawType}\` had parsing error: ${err.message}`; + throw err; + } + } + + lastTag.parsedType = parsedType; + }; + const {source} = jsdoc; const {tokens: { delimiter: delimiterRoot, lineEnd: lineEndRoot, postDelimiter: postDelimiterRoot, + start: startRoot, end: endRoot, description: descriptionRoot }} = source[0]; @@ -131,8 +141,9 @@ const commentParserToESTree = (jsdoc, mode) => { descriptionLines: [], - // `end` will be overwritten if there are other entries - end: endRoot, + initial: startRoot, + // `terminal` will be overwritten if there are other entries + terminal: endRoot, endLine, postDelimiter: postDelimiterRoot, lineEnd: lineEndRoot, @@ -150,7 +161,7 @@ const commentParserToESTree = (jsdoc, mode) => { delimiter, description, postDelimiter, - start, + start: initial, tag, end, type: rawType @@ -163,14 +174,14 @@ const commentParserToESTree = (jsdoc, mode) => { // Clean-up with last tag before end or new tag if (lastTag) { - cleanUpLastTag(lastTag, mode); + cleanUpLastTag(lastTag); } // Stop the iteration when we reach the end // but only when there is no tag earlier in the line // to still process if (end && !tag) { - ast.end = end; + ast.terminal = end; return; } @@ -179,17 +190,24 @@ const commentParserToESTree = (jsdoc, mode) => { end: ed, delimiter: de, postDelimiter: pd, + start: init, ...tkns } = tokens; if (!tokens.name) { - let i = 0; + let i = 1; while (source[idx + i]) { const {tokens: { name, - postName + postName, + postType, + tag: tg }} = source[idx + i]; + if (tg) { + break; + } if (name) { + tkns.postType = postType; tkns.name = name; tkns.postName = postName; break; @@ -200,6 +218,7 @@ const commentParserToESTree = (jsdoc, mode) => { const tagObj = { ...tkns, + initial: endLine ? init : '', postDelimiter: lastDescriptionLine ? pd : '', delimiter: lastDescriptionLine ? de : '', descriptionLines: [], @@ -222,14 +241,14 @@ const commentParserToESTree = (jsdoc, mode) => { delimiter, postDelimiter, rawType, - start, + initial, type: 'JsdocTypeLine' } : { delimiter: '', postDelimiter: '', rawType, - start: '', + initial: '', type: 'JsdocTypeLine' } ); @@ -244,16 +263,24 @@ const commentParserToESTree = (jsdoc, mode) => { delimiter, description, postDelimiter, - start, - type: 'JsdocDescriptionLine' - } - : { - delimiter: '', - description, - postDelimiter: '', - start: '', + initial, type: 'JsdocDescriptionLine' } + : lastTag + ? { + delimiter: '', + description, + postDelimiter: '', + initial: '', + type: 'JsdocDescriptionLine' + } + : { + delimiter, + description, + postDelimiter, + initial, + type: 'JsdocDescriptionLine' + } ); holder.description += holder.description ? '\n' + description @@ -262,9 +289,9 @@ const commentParserToESTree = (jsdoc, mode) => { // Clean-up where last line itself has tag content if (end && tag) { - ast.end = end; + ast.terminal = end; - cleanUpLastTag(lastTag, mode); + cleanUpLastTag(lastTag); } }); diff --git a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/estreeToString.js b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/estreeToString.js index a0217f69507..a2fe703e532 100644 --- a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/estreeToString.js +++ b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/estreeToString.js @@ -1,52 +1,63 @@ import { - visitorKeys as jsdocTypePrattParserVisitorKeys + visitorKeys as jsdocTypePrattParserVisitorKeys, + stringify } from 'jsdoc-type-pratt-parser'; import {jsdocVisitorKeys} from './commentParserToESTree.js'; const stringifiers = { JsdocBlock ({ - delimiter, postDelimiter, lineEnd, end, endLine - }, descriptionLines, tags) { - return `${delimiter}${postDelimiter}${endLine + delimiter, postDelimiter, lineEnd, initial, terminal, endLine + }, opts, descriptionLines, tags) { + const alreadyHasLine = + (descriptionLines.length && !tags.length && + descriptionLines[descriptionLines.length - 1].endsWith('\n')) || + (tags.length && tags[tags.length - 1].endsWith('\n')); + return `${initial}${delimiter}${postDelimiter}${endLine ? ` ` : ''}${ // Could use `node.description` (and `node.lineEnd`), but lines may have // been modified - descriptionLines.length ? descriptionLines.join('') + lineEnd : '' + descriptionLines.length + ? descriptionLines.join( + lineEnd + '\n' + ) + (tags.length ? lineEnd + '\n' : '') + : '' }${ - tags.length ? tags.join('\n') + lineEnd : '' - }${endLine - ? ` - ` - : ''}${end}`; + tags.length ? tags.join(lineEnd + '\n') : '' + }${endLine && !alreadyHasLine + ? `${lineEnd} + ${initial}` + : endLine ? ` ${initial}` : ''}${terminal}`; }, JsdocDescriptionLine ({ - start, delimiter, postDelimiter, description + initial, delimiter, postDelimiter, description }) { - return `${start}${delimiter}${postDelimiter}${description}`; + return `${initial}${delimiter}${postDelimiter}${description}`; }, JsdocTypeLine ({ - start, delimiter, postDelimiter, rawType + initial, delimiter, postDelimiter, rawType, parsedType }) { - return `${delimiter}${postDelimiter}{${rawType}}`; + return `${initial}${delimiter}${postDelimiter}${rawType}`; }, - JsdocTag (node, parsedType, typeLines, descriptionLines) { + JsdocTag (node, opts, parsedType, typeLines, descriptionLines) { const { description, name, postName, postTag, postType, - start, delimiter, postDelimiter, tag + initial, delimiter, postDelimiter, tag // , rawType } = node; - return `${start}${delimiter}${postDelimiter}@${tag}${postTag}${ + return `${initial}${delimiter}${postDelimiter}@${tag}${postTag}${ // Could do `rawType` but may have been changed; could also do // `typeLines` but not as likely to be changed // parsedType // Comment this out later in favor of `parsedType` // We can't use raw `typeLines` as first argument has delimiter on it - typeLines + (opts.preferRawType || !parsedType) + ? typeLines.length ? `{${typeLines.join('\n')}}` : '' + : parsedType }${postType}${ name ? `${name}${postName || (description ? '\n' : '')}` : '' }${descriptionLines.join('\n')}`; @@ -59,29 +70,29 @@ const visitorKeys = {...jsdocVisitorKeys, ...jsdocTypePrattParserVisitorKeys}; * @todo convert for use by escodegen (until may be patched to support * custom entries?). * @param {Node} node + * @param {{preferRawType: boolean}} opts * @throws {Error} * @returns {string} */ -function estreeToString (node) { +function estreeToString (node, opts = {}) { if (Object.prototype.hasOwnProperty.call(stringifiers, node.type)) { const childNodeOrArray = visitorKeys[node.type]; const args = childNodeOrArray.map((key) => { return Array.isArray(node[key]) ? node[key].map((item) => { - return estreeToString(item); + return estreeToString(item, opts); }) : (node[key] === undefined || node[key] === null - ? [] - : [estreeToString(node[key])]); + ? null + : estreeToString(node[key], opts)); }); - - return stringifiers[node.type](node, ...args); + return stringifiers[node.type](node, opts, ...args); } // We use raw type instead but it is a key as other apps may wish to traverse if (node.type.startsWith('JsdocType')) { - return ''; + return opts.preferRawType ? '' : `{${stringify(node)}}`; } throw new Error(`Unhandled node type: ${node.type}`); diff --git a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/jsdoccomment.js b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/jsdoccomment.js index 7f10773a007..7a20d23ca43 100644 --- a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/jsdoccomment.js +++ b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/jsdoccomment.js @@ -160,6 +160,18 @@ const getReducedASTNode = function (node, sourceCode) { if ( !invokedExpression.has(parent.type) ) { + let token = node; + do { + token = sourceCode.getTokenBefore(token, {includeComments: true}); + } while (token && token.type === 'Punctuator' && token.value === '('); + + if (token && token.type === 'Block') { + return node; + } + + if (sourceCode.getCommentsBefore(node).length) { + return node; + } while ( !sourceCode.getCommentsBefore(parent).length && !(/Function/u).test(parent.type) && @@ -233,7 +245,7 @@ const findJSDocComment = (astNode, sourceCode, settings) => { if ( tokenBefore.type === 'Block' && - tokenBefore.value.charAt(0) === '*' && + (/^\*\s/u).test(tokenBefore.value) && currentNode.loc.start.line - tokenBefore.loc.end.line >= minLines && currentNode.loc.start.line - tokenBefore.loc.end.line <= maxLines ) { diff --git a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/parseComment.js b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/parseComment.js index dd146b88358..e6a9c8283ef 100644 --- a/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/parseComment.js +++ b/tools/node_modules/eslint/node_modules/@es-joy/jsdoccomment/src/parseComment.js @@ -1,15 +1,9 @@ /* eslint-disable prefer-named-capture-group -- Temporary */ import { parse as commentParser, - tokenizers, - util + tokenizers } from 'comment-parser'; -const { - seedBlock, - seedTokens -} = util; - const { name: nameTokenizer, tag: tagTokenizer, @@ -35,6 +29,11 @@ export const defaultNoNames = [ 'version', 'variation' ]; +const optionalBrackets = /^\[(?[^=]*)=[^\]]*\]/u; +const preserveTypeTokenizer = typeTokenizer('preserve'); +const preserveDescriptionTokenizer = descriptionTokenizer('preserve'); +const plainNameTokenizer = nameTokenizer(); + const getTokenizers = ({ noTypes = defaultNoTypes, noNames = defaultNoNames @@ -50,7 +49,7 @@ const getTokenizers = ({ return spec; } - return typeTokenizer()(spec); + return preserveTypeTokenizer(spec); }, // Name @@ -61,15 +60,21 @@ const getTokenizers = ({ const pos = remainder.search(/(? -1) { [, postName, description, lineEnd] = extra.match(/(\s*)([^\r]*)(\r)?/u); } + if (optionalBrackets.test(name)) { + name = name.match(optionalBrackets)?.groups?.name; + spec.optional = true; + } else { + spec.optional = false; + } + spec.name = name; - spec.optional = false; const {tokens} = spec.source[0]; tokens.name = name; tokens.postName = postName; @@ -83,44 +88,28 @@ const getTokenizers = ({ return spec; } - return nameTokenizer()(spec); + return plainNameTokenizer(spec); }, // Description (spec) => { - return descriptionTokenizer('preserve')(spec); + return preserveDescriptionTokenizer(spec); } ]; }; /** - * + * Accepts a comment token and converts it into `comment-parser` AST. * @param {PlainObject} commentNode * @param {string} [indent=""] Whitespace * @returns {PlainObject} */ const parseComment = (commentNode, indent = '') => { // Preserve JSDoc block start/end indentation. - return commentParser(`/*${commentNode.value}*/`, { + return commentParser(`${indent}/*${commentNode.value}*/`, { // @see https://github.com/yavorskiy/comment-parser/issues/21 tokenizers: getTokenizers() - })[0] || seedBlock({ - source: [ - { - number: 0, - tokens: seedTokens({ - delimiter: '/**' - }) - }, - { - number: 1, - tokens: seedTokens({ - end: '*/', - start: indent + ' ' - }) - } - ] - }); + })[0]; }; export {getTokenizers, parseComment}; diff --git a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/LICENSE b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/LICENSE index f9556ee619d..b607bb36e96 100644 --- a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/LICENSE +++ b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/LICENSE @@ -1,6 +1,4 @@ -MIT License - -Copyright (c) 2020 ESLint +Copyright OpenJS Foundation and other contributors, Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -9,13 +7,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/dist/eslintrc.cjs b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/dist/eslintrc.cjs index 50dd6abf59d..1fa743c91e1 100644 --- a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/dist/eslintrc.cjs +++ b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/dist/eslintrc.cjs @@ -2380,7 +2380,7 @@ var ModuleResolver = { * @author Toru Nagashima */ -const require$1 = Module.createRequire((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('eslintrc.cjs', document.baseURI).href))); +const require$1 = Module.createRequire(require('url').pathToFileURL(__filename).toString()); const debug$2 = debugOrig__default["default"]("eslintrc:config-array-factory"); @@ -2454,6 +2454,9 @@ const configFilenames = [ /** @type {WeakMap} */ const internalSlotsMap$1 = new WeakMap(); +/** @type {WeakMap} */ +const normalizedPlugins = new WeakMap(); + /** * Check if a given string is a file path. * @param {string} nameOrPath A module name or file path. @@ -2730,12 +2733,25 @@ function createContext( * @returns {Plugin} The normalized plugin. */ function normalizePlugin(plugin) { - return { + + // first check the cache + let normalizedPlugin = normalizedPlugins.get(plugin); + + if (normalizedPlugin) { + return normalizedPlugin; + } + + normalizedPlugin = { configs: plugin.configs || {}, environments: plugin.environments || {}, processors: plugin.processors || {}, rules: plugin.rules || {} }; + + // save the reference for later + normalizedPlugins.set(plugin, normalizedPlugin); + + return normalizedPlugin; } //------------------------------------------------------------------------------ diff --git a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/config-array-factory.js b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/config-array-factory.js index 9553d1fde28..99851e15f9d 100644 --- a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/config-array-factory.js +++ b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/lib/config-array-factory.js @@ -129,6 +129,9 @@ const configFilenames = [ /** @type {WeakMap} */ const internalSlotsMap = new WeakMap(); +/** @type {WeakMap} */ +const normalizedPlugins = new WeakMap(); + /** * Check if a given string is a file path. * @param {string} nameOrPath A module name or file path. @@ -405,12 +408,25 @@ function createContext( * @returns {Plugin} The normalized plugin. */ function normalizePlugin(plugin) { - return { + + // first check the cache + let normalizedPlugin = normalizedPlugins.get(plugin); + + if (normalizedPlugin) { + return normalizedPlugin; + } + + normalizedPlugin = { configs: plugin.configs || {}, environments: plugin.environments || {}, processors: plugin.processors || {}, rules: plugin.rules || {} }; + + // save the reference for later + normalizedPlugins.set(plugin, normalizedPlugin); + + return normalizedPlugin; } //------------------------------------------------------------------------------ diff --git a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/package.json b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/package.json index 892991a7872..bc9989719b1 100644 --- a/tools/node_modules/eslint/node_modules/@eslint/eslintrc/package.json +++ b/tools/node_modules/eslint/node_modules/@eslint/eslintrc/package.json @@ -1,6 +1,6 @@ { "name": "@eslint/eslintrc", - "version": "1.2.1", + "version": "1.3.2", "description": "The legacy ESLintRC config file format for ESLint", "type": "module", "main": "./dist/eslintrc.cjs", @@ -38,6 +38,7 @@ "publish-release": "eslint-publish-release" }, "repository": "eslint/eslintrc", + "funding": "https://opencollective.com/eslint", "keywords": [ "ESLint", "ESLintRC", @@ -59,7 +60,7 @@ "eslint-release": "^3.2.0", "fs-teardown": "^0.1.3", "mocha": "^9.0.3", - "rollup": "^2.54.0", + "rollup": "^2.70.1", "shelljs": "^0.8.4", "sinon": "^11.1.2", "temp-dir": "^2.0.0" @@ -67,12 +68,12 @@ "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", + "espree": "^9.4.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/config-array/api.js b/tools/node_modules/eslint/node_modules/@humanwhocodes/config-array/api.js index ae64dcc09f4..c0d58fc4a2a 100644 --- a/tools/node_modules/eslint/node_modules/@humanwhocodes/config-array/api.js +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/config-array/api.js @@ -106,7 +106,7 @@ const baseSchema = Object.freeze({ const debug = createDebug('@hwc/config-array'); const MINIMATCH_OPTIONS = { - matchBase: true, + // matchBase: true, dot: true }; @@ -136,7 +136,7 @@ async function normalize(items, context, extraConfigTypes) { const allowFunctions = extraConfigTypes.includes('function'); const allowArrays = extraConfigTypes.includes('array'); - async function *flatTraverse(array) { + async function* flatTraverse(array) { for (let item of array) { if (typeof item === 'function') { if (!allowFunctions) { @@ -153,7 +153,7 @@ async function normalize(items, context, extraConfigTypes) { if (!allowArrays) { throw new TypeError('Unexpected array.'); } - yield * flatTraverse(item); + yield* flatTraverse(item); } else if (typeof item === 'function') { throw new TypeError('A config function can only return an object or array.'); } else { @@ -191,7 +191,7 @@ function normalizeSync(items, context, extraConfigTypes) { const allowFunctions = extraConfigTypes.includes('function'); const allowArrays = extraConfigTypes.includes('array'); - function *flatTraverse(array) { + function* flatTraverse(array) { for (let item of array) { if (typeof item === 'function') { @@ -211,7 +211,7 @@ function normalizeSync(items, context, extraConfigTypes) { throw new TypeError('Unexpected array.'); } - yield * flatTraverse(item); + yield* flatTraverse(item); } else if (typeof item === 'function') { throw new TypeError('A config function can only return an object or array.'); } else { @@ -233,6 +233,11 @@ function normalizeSync(items, context, extraConfigTypes) { */ function shouldIgnoreFilePath(ignores, filePath, relativeFilePath) { + // all files outside of the basePath are ignored + if (relativeFilePath.startsWith('..')) { + return true; + } + let shouldIgnore = false; for (const matcher of ignores) { @@ -285,11 +290,6 @@ function shouldIgnoreFilePath(ignores, filePath, relativeFilePath) { */ function pathMatches(filePath, basePath, config) { - // a config without `files` field always match - if (!config.files) { - return true; - } - /* * For both files and ignores, functions are passed the absolute * file path while strings are compared against the relative @@ -399,217 +399,221 @@ class ConfigArray extends Array { * definitions to use for the ConfigArray schema. * @param {Array} [options.configTypes] List of config types supported. */ - constructor(configs, - { - basePath = '', - normalized = false, - schema: customSchema, - extraConfigTypes = [] - } = {} -) { + constructor(configs, { + basePath = '', + normalized = false, + schema: customSchema, + extraConfigTypes = [] + } = {} + ) { super(); /** - * Tracks if the array has been normalized. - * @property isNormalized - * @type boolean - * @private - */ + * Tracks if the array has been normalized. + * @property isNormalized + * @type boolean + * @private + */ this[ConfigArraySymbol.isNormalized] = normalized; /** - * The schema used for validating and merging configs. - * @property schema - * @type ObjectSchema - * @private - */ - this[ConfigArraySymbol.schema] = new objectSchema.ObjectSchema({ - ...customSchema, - ...baseSchema - }); + * The schema used for validating and merging configs. + * @property schema + * @type ObjectSchema + * @private + */ + this[ConfigArraySymbol.schema] = new objectSchema.ObjectSchema( + Object.assign({}, customSchema, baseSchema) + ); /** - * The path of the config file that this array was loaded from. - * This is used to calculate filename matches. - * @property basePath - * @type string - */ + * The path of the config file that this array was loaded from. + * This is used to calculate filename matches. + * @property basePath + * @type string + */ this.basePath = basePath; assertExtraConfigTypes(extraConfigTypes); /** - * The supported config types. - * @property configTypes - * @type Array - */ + * The supported config types. + * @property configTypes + * @type Array + */ this.extraConfigTypes = Object.freeze([...extraConfigTypes]); /** - * A cache to store calculated configs for faster repeat lookup. - * @property configCache - * @type Map - * @private - */ + * A cache to store calculated configs for faster repeat lookup. + * @property configCache + * @type Map + * @private + */ this[ConfigArraySymbol.configCache] = new Map(); // init cache - dataCache.set(this, {}); + dataCache.set(this, { explicitMatches: new Map() }); // load the configs into this array if (Array.isArray(configs)) { - this.push(...configs); + this.push(...configs); } else { - this.push(configs); + this.push(configs); } } -/** + /** * Prevent normal array methods from creating a new `ConfigArray` instance. * This is to ensure that methods such as `slice()` won't try to create a * new instance of `ConfigArray` behind the scenes as doing so may throw * an error due to the different constructor signature. * @returns {Function} The `Array` constructor. */ -static get [Symbol.species]() { - return Array; -} + static get [Symbol.species]() { + return Array; + } -/** + /** * Returns the `files` globs from every config object in the array. * This can be used to determine which files will be matched by a * config array or to use as a glob pattern when no patterns are provided * for a command line interface. * @returns {Array} An array of matchers. */ -get files() { + get files() { - assertNormalized(this); + assertNormalized(this); - // if this data has been cached, retrieve it - const cache = dataCache.get(this); + // if this data has been cached, retrieve it + const cache = dataCache.get(this); - if (cache.files) { - return cache.files; - } + if (cache.files) { + return cache.files; + } - // otherwise calculate it + // otherwise calculate it - const result = []; + const result = []; - for (const config of this) { - if (config.files) { - config.files.forEach(filePattern => { - result.push(filePattern); - }); + for (const config of this) { + if (config.files) { + config.files.forEach(filePattern => { + result.push(filePattern); + }); + } } - } - // store result - cache.files = result; - dataCache.set(this, cache); + // store result + cache.files = result; + dataCache.set(this, cache); - return result; -} + return result; + } -/** + /** * Returns ignore matchers that should always be ignored regardless of * the matching `files` fields in any configs. This is necessary to mimic * the behavior of things like .gitignore and .eslintignore, allowing a * globbing operation to be faster. * @returns {string[]} An array of string patterns and functions to be ignored. */ -get ignores() { + get ignores() { - assertNormalized(this); + assertNormalized(this); - // if this data has been cached, retrieve it - const cache = dataCache.get(this); + // if this data has been cached, retrieve it + const cache = dataCache.get(this); - if (cache.ignores) { - return cache.ignores; - } + if (cache.ignores) { + return cache.ignores; + } - // otherwise calculate it + // otherwise calculate it - const result = []; + const result = []; - for (const config of this) { - if (config.ignores && !config.files) { - result.push(...config.ignores); + for (const config of this) { + + /* + * We only count ignores if there are no other keys in the object. + * In this case, it acts list a globally ignored pattern. If there + * are additional keys, then ignores act like exclusions. + */ + if (config.ignores && Object.keys(config).length === 1) { + result.push(...config.ignores); + } } - } - // store result - cache.ignores = result; - dataCache.set(this, cache); + // store result + cache.ignores = result; + dataCache.set(this, cache); - return result; -} + return result; + } -/** + /** * Indicates if the config array has been normalized. * @returns {boolean} True if the config array is normalized, false if not. */ -isNormalized() { - return this[ConfigArraySymbol.isNormalized]; -} + isNormalized() { + return this[ConfigArraySymbol.isNormalized]; + } -/** + /** * Normalizes a config array by flattening embedded arrays and executing * config functions. * @param {ConfigContext} context The context object for config functions. * @returns {Promise} The current ConfigArray instance. */ -async normalize(context = {}) { + async normalize(context = {}) { - if (!this.isNormalized()) { - const normalizedConfigs = await normalize(this, context, this.extraConfigTypes); - this.length = 0; - this.push(...normalizedConfigs.map(this[ConfigArraySymbol.preprocessConfig].bind(this))); - this[ConfigArraySymbol.isNormalized] = true; + if (!this.isNormalized()) { + const normalizedConfigs = await normalize(this, context, this.extraConfigTypes); + this.length = 0; + this.push(...normalizedConfigs.map(this[ConfigArraySymbol.preprocessConfig].bind(this))); + this[ConfigArraySymbol.isNormalized] = true; - // prevent further changes - Object.freeze(this); - } + // prevent further changes + Object.freeze(this); + } - return this; -} + return this; + } -/** + /** * Normalizes a config array by flattening embedded arrays and executing * config functions. * @param {ConfigContext} context The context object for config functions. * @returns {ConfigArray} The current ConfigArray instance. */ -normalizeSync(context = {}) { + normalizeSync(context = {}) { - if (!this.isNormalized()) { - const normalizedConfigs = normalizeSync(this, context, this.extraConfigTypes); - this.length = 0; - this.push(...normalizedConfigs.map(this[ConfigArraySymbol.preprocessConfig])); - this[ConfigArraySymbol.isNormalized] = true; + if (!this.isNormalized()) { + const normalizedConfigs = normalizeSync(this, context, this.extraConfigTypes); + this.length = 0; + this.push(...normalizedConfigs.map(this[ConfigArraySymbol.preprocessConfig].bind(this))); + this[ConfigArraySymbol.isNormalized] = true; - // prevent further changes - Object.freeze(this); - } + // prevent further changes + Object.freeze(this); + } - return this; -} + return this; + } -/** + /** * Finalizes the state of a config before being cached and returned by * `getConfig()`. Does nothing by default but is provided to be * overridden by subclasses as necessary. * @param {Object} config The config to finalize. * @returns {Object} The finalized config. */ -[ConfigArraySymbol.finalizeConfig](config) { - return config; -} + [ConfigArraySymbol.finalizeConfig](config) { + return config; + } -/** + /** * Preprocesses a config during the normalization process. This is the * method to override if you want to convert an array item before it is * validated for the first time. For example, if you want to replace a @@ -617,77 +621,155 @@ normalizeSync(context = {}) { * @param {Object} config The config to preprocess. * @returns {Object} The config to use in place of the argument. */ -[ConfigArraySymbol.preprocessConfig](config) { - return config; -} + [ConfigArraySymbol.preprocessConfig](config) { + return config; + } -/** + /** + * Determines if a given file path explicitly matches a `files` entry + * and also doesn't match an `ignores` entry. Configs that don't have + * a `files` property are not considered an explicit match. + * @param {string} filePath The complete path of a file to check. + * @returns {boolean} True if the file path matches a `files` entry + * or false if not. + */ + isExplicitMatch(filePath) { + + assertNormalized(this); + + const cache = dataCache.get(this); + + // first check the cache to avoid duplicate work + let result = cache.explicitMatches.get(filePath); + + if (typeof result == 'boolean') { + return result; + } + + // TODO: Maybe move elsewhere? Maybe combine with getConfig() logic? + const relativeFilePath = path.relative(this.basePath, filePath); + + if (shouldIgnoreFilePath(this.ignores, filePath, relativeFilePath)) { + debug(`Ignoring ${filePath}`); + + // cache and return result + cache.explicitMatches.set(filePath, false); + return false; + } + + // filePath isn't automatically ignored, so try to find a match + + for (const config of this) { + + if (!config.files) { + continue; + } + + if (pathMatches(filePath, this.basePath, config)) { + debug(`Matching config found for ${filePath}`); + cache.explicitMatches.set(filePath, true); + return true; + } + } + + return false; + } + + /** * Returns the config object for a given file path. * @param {string} filePath The complete path of a file to get a config for. * @returns {Object} The config object for this file. */ -getConfig(filePath) { + getConfig(filePath) { - assertNormalized(this); + assertNormalized(this); - // first check the cache to avoid duplicate work - let finalConfig = this[ConfigArraySymbol.configCache].get(filePath); + const cache = this[ConfigArraySymbol.configCache]; - if (finalConfig) { - return finalConfig; - } + // first check the cache for a filename match to avoid duplicate work + let finalConfig = cache.get(filePath); - // TODO: Maybe move elsewhere? - const relativeFilePath = path.relative(this.basePath, filePath); + if (finalConfig) { + return finalConfig; + } - if (shouldIgnoreFilePath(this.ignores, filePath, relativeFilePath)) { + // next check to see if the file should be ignored - // cache and return result - finalConfig is undefined at this point - this[ConfigArraySymbol.configCache].set(filePath, finalConfig); - return finalConfig; - } + // TODO: Maybe move elsewhere? + const relativeFilePath = path.relative(this.basePath, filePath); - // filePath isn't automatically ignored, so try to construct config + if (shouldIgnoreFilePath(this.ignores, filePath, relativeFilePath)) { + debug(`Ignoring ${filePath}`); - const matchingConfigs = []; + // cache and return result - finalConfig is undefined at this point + cache.set(filePath, finalConfig); + return finalConfig; + } - for (const config of this) { - if (pathMatches(filePath, this.basePath, config)) { - debug(`Matching config found for ${filePath}`); - matchingConfigs.push(config); - } else { - debug(`No matching config found for ${filePath}`); + // filePath isn't automatically ignored, so try to construct config + + const matchingConfigIndices = []; + let matchFound = false; + + this.forEach((config, index) => { + + if (!config.files) { + debug(`Universal config found for ${filePath}`); + matchingConfigIndices.push(index); + return; + } + + if (pathMatches(filePath, this.basePath, config)) { + debug(`Matching config found for ${filePath}`); + matchingConfigIndices.push(index); + matchFound = true; + return; + } + + }); + + // if matching both files and ignores, there will be no config to create + if (!matchFound) { + debug(`No matching configs found for ${filePath}`); + + // cache and return result - finalConfig is undefined at this point + cache.set(filePath, finalConfig); + return finalConfig; } - } - // if matching both files and ignores, there will be no config to create - if (matchingConfigs.length === 0) { - // cache and return result - finalConfig is undefined at this point - this[ConfigArraySymbol.configCache].set(filePath, finalConfig); - return finalConfig; - } + // check to see if there is a config cached by indices + finalConfig = cache.get(matchingConfigIndices.toString()); - // otherwise construct the config + if (finalConfig) { - finalConfig = matchingConfigs.reduce((result, config) => { - return this[ConfigArraySymbol.schema].merge(result, config); - }, {}, this); + // also store for filename for faster lookup next time + cache.set(filePath, finalConfig); - finalConfig = this[ConfigArraySymbol.finalizeConfig](finalConfig); + return finalConfig; + } - this[ConfigArraySymbol.configCache].set(filePath, finalConfig); + // otherwise construct the config - return finalConfig; -} + finalConfig = matchingConfigIndices.reduce((result, index) => { + return this[ConfigArraySymbol.schema].merge(result, this[index]); + }, {}, this); -/** + finalConfig = this[ConfigArraySymbol.finalizeConfig](finalConfig); + + cache.set(filePath, finalConfig); + cache.set(matchingConfigIndices.toString(), finalConfig); + + return finalConfig; + } + + /** * Determines if the given filepath is ignored based on the configs. * @param {string} filePath The complete path of a file to check. * @returns {boolean} True if the path is ignored, false if not. */ -isIgnored(filePath) { - return this.getConfig(filePath) === undefined; -} + isIgnored(filePath) { + return this.getConfig(filePath) === undefined; + } } diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/config-array/package.json b/tools/node_modules/eslint/node_modules/@humanwhocodes/config-array/package.json index ae21affff5c..0d0a371448c 100644 --- a/tools/node_modules/eslint/node_modules/@humanwhocodes/config-array/package.json +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/config-array/package.json @@ -1,6 +1,6 @@ { "name": "@humanwhocodes/config-array", - "version": "0.9.5", + "version": "0.10.5", "description": "Glob-based configuration matching.", "author": "Nicholas C. Zakas", "main": "api.js", @@ -28,7 +28,6 @@ }, "lint-staged": { "*.js": [ - "nitpik", "eslint --fix --ignore-pattern '!.eslintrc.js'" ] }, @@ -47,15 +46,15 @@ "minimatch": "^3.0.4" }, "devDependencies": { - "@nitpik/javascript": "^0.3.3", + "@nitpik/javascript": "0.4.0", "@nitpik/node": "0.0.5", - "chai": "^4.2.0", - "eslint": "^6.7.1", - "esm": "^3.2.25", - "lint-staged": "^10.2.8", - "mocha": "^6.2.3", - "nyc": "^14.1.1", - "rollup": "^1.12.3", - "yorkie": "^2.0.0" + "chai": "4.2.0", + "eslint": "8.23.1", + "esm": "3.2.25", + "lint-staged": "13.0.3", + "mocha": "6.2.3", + "nyc": "14.1.1", + "rollup": "1.16.6", + "yorkie": "2.0.0" } } diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/LICENSE b/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/LICENSE new file mode 100644 index 00000000000..261eeb9e9f8 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/dist/gitignore-to-minimatch.cjs b/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/dist/gitignore-to-minimatch.cjs new file mode 100644 index 00000000000..110bb2d59e8 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/dist/gitignore-to-minimatch.cjs @@ -0,0 +1,71 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +/** + * @fileoverview Utility to convert gitignore patterns to minimatch. + * @author Nicholas C. Zakas + */ + +/** + * Converts a gitignore pattern to a minimatch pattern. + * @param {string} pattern The gitignore pattern to convert. + * @returns {string} A minimatch pattern equivalent to `pattern`. + */ +function gitignoreToMinimatch(pattern) { + + if (typeof pattern !== "string") { + throw new TypeError("Argument must be a string."); + } + + // Special case: Empty string + if (!pattern) { + return pattern; + } + + // strip off negation to make life easier + const negated = pattern.startsWith("!"); + let patternToTest = negated ? pattern.slice(1) : pattern; + let result = patternToTest; + let leadingSlash = false; + + // strip off leading slash + if (patternToTest[0] === "/") { + leadingSlash = true; + result = patternToTest.slice(1); + } + + // For the most part, the first character determines what to do + switch (result[0]) { + + case "*": + if (patternToTest[1] !== "*") { + result = "**/" + result; + } + break; + + default: + if (!leadingSlash && !result.includes("/") || result.endsWith("/")) { + result = "**/" + result; + } + + // no further changes if the pattern ends with a wildcard + if (result.endsWith("*") || result.endsWith("?")) { + break; + } + + // differentiate between filenames and directory names + if (!/\.[a-z\d_-]+$/.test(result)) { + if (!result.endsWith("/")) { + result += "/"; + } + + result += "**"; + } + } + + return negated ? "!" + result : result; + +} + +exports.gitignoreToMinimatch = gitignoreToMinimatch; diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/dist/gitignore-to-minimatch.js b/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/dist/gitignore-to-minimatch.js new file mode 100644 index 00000000000..8c4d1710da7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/dist/gitignore-to-minimatch.js @@ -0,0 +1,67 @@ +/** + * @fileoverview Utility to convert gitignore patterns to minimatch. + * @author Nicholas C. Zakas + */ + +/** + * Converts a gitignore pattern to a minimatch pattern. + * @param {string} pattern The gitignore pattern to convert. + * @returns {string} A minimatch pattern equivalent to `pattern`. + */ +function gitignoreToMinimatch(pattern) { + + if (typeof pattern !== "string") { + throw new TypeError("Argument must be a string."); + } + + // Special case: Empty string + if (!pattern) { + return pattern; + } + + // strip off negation to make life easier + const negated = pattern.startsWith("!"); + let patternToTest = negated ? pattern.slice(1) : pattern; + let result = patternToTest; + let leadingSlash = false; + + // strip off leading slash + if (patternToTest[0] === "/") { + leadingSlash = true; + result = patternToTest.slice(1); + } + + // For the most part, the first character determines what to do + switch (result[0]) { + + case "*": + if (patternToTest[1] !== "*") { + result = "**/" + result; + } + break; + + default: + if (!leadingSlash && !result.includes("/") || result.endsWith("/")) { + result = "**/" + result; + } + + // no further changes if the pattern ends with a wildcard + if (result.endsWith("*") || result.endsWith("?")) { + break; + } + + // differentiate between filenames and directory names + if (!/\.[a-z\d_-]+$/.test(result)) { + if (!result.endsWith("/")) { + result += "/"; + } + + result += "**"; + } + } + + return negated ? "!" + result : result; + +} + +export { gitignoreToMinimatch }; diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/package.json b/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/package.json new file mode 100644 index 00000000000..3a6ea6b03ec --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/gitignore-to-minimatch/package.json @@ -0,0 +1,61 @@ +{ + "name": "@humanwhocodes/gitignore-to-minimatch", + "version": "1.0.2", + "description": "Utility to convert gitignore patterns to minimatch patterns", + "type": "module", + "main": "dist/gitignore-to-minimatch.cjs", + "module": "dist/gitignore-to-minimatch.js", + "types": "dist/gitignore-to-minimatch.d.ts", + "exports": { + "require": "./dist/gitignore-to-minimatch.cjs", + "import": "./dist/gitignore-to-minimatch.js" + }, + "files": [ + "dist" + ], + "publishConfig": { + "access": "public" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "lint-staged": { + "*.js": [ + "eslint --fix" + ] + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + }, + "scripts": { + "build": "rollup -c && tsc", + "prepare": "npm run build", + "lint": "eslint src/ tests/", + "lint:fix": "eslint src/ tests/", + "pretest": "npm run build", + "test:unit": "mocha tests/gitignore-to-minimatch.test.js", + "test:build": "node tests/pkg.test.cjs && node tests/pkg.test.mjs", + "test": "npm run test:unit && npm run test:build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/humanwhocodes/gitignore-to-minimatch.git" + }, + "keywords": [ + "gitignore", + "minimatch", + "glob" + ], + "author": "Nicholas C. Zaks", + "license": "Apache-2.0", + "devDependencies": { + "chai": "^4.3.4", + "eslint": "^7.32.0", + "lint-staged": "^10.4.0", + "mocha": "^9.0.3", + "rollup": "^1.20.3", + "typescript": "^4.0.3", + "yorkie": "^2.0.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/LICENSE b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/LICENSE new file mode 100644 index 00000000000..261eeb9e9f8 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/dist/module-importer.cjs b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/dist/module-importer.cjs new file mode 100644 index 00000000000..779e0cf6f5c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/dist/module-importer.cjs @@ -0,0 +1,22 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var module$1 = require('module'); +var url = require('url'); +var path = require('path'); + +/** + * @fileoverview Universal module importer + */ + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +const __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('module-importer.cjs', document.baseURI).href))); +const __dirname$1 = path.dirname(__filename$1); +const require$1 = module$1.createRequire(__dirname$1 + "/"); +const { ModuleImporter } = require$1("./module-importer.cjs"); + +exports.ModuleImporter = ModuleImporter; diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/dist/module-importer.d.cts b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/dist/module-importer.d.cts new file mode 100644 index 00000000000..a1acbb6d386 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/dist/module-importer.d.cts @@ -0,0 +1,27 @@ +export class ModuleImporter { + /** + * Creates a new instance. + * @param {string} [cwd] The current working directory to resolve from. + */ + constructor(cwd?: string); + /** + * The base directory from which paths should be resolved. + * @type {string} + */ + cwd: string; + /** + * Resolves a module based on its name or location. + * @param {string} specifier Either an npm package name or + * relative file path. + * @returns {string|undefined} The location of the import. + * @throws {Error} If specifier cannot be located. + */ + resolve(specifier: string): string | undefined; + /** + * Imports a module based on its name or location. + * @param {string} specifier Either an npm package name or + * relative file path. + * @returns {Promise} The module's object. + */ + import(specifier: string): Promise; +} diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/dist/module-importer.js b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/dist/module-importer.js new file mode 100644 index 00000000000..26e052da1f2 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/dist/module-importer.js @@ -0,0 +1,18 @@ +import { createRequire } from 'module'; +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; + +/** + * @fileoverview Universal module importer + */ + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +const require = createRequire(__dirname + "/"); +const { ModuleImporter } = require("./module-importer.cjs"); + +export { ModuleImporter }; diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/package.json b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/package.json new file mode 100644 index 00000000000..8ece071e94f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/package.json @@ -0,0 +1,65 @@ +{ + "name": "@humanwhocodes/module-importer", + "version": "1.0.1", + "description": "Universal module importer for Node.js", + "main": "src/module-importer.cjs", + "module": "src/module-importer.js", + "type": "module", + "types": "dist/module-importer.d.ts", + "exports": { + "require": "./src/module-importer.cjs", + "import": "./src/module-importer.js" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "lint-staged": { + "*.js": [ + "eslint --fix" + ] + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + }, + "scripts": { + "build": "rollup -c && tsc", + "prepare": "npm run build", + "lint": "eslint src/ tests/", + "test:unit": "c8 mocha tests/module-importer.test.js", + "test:build": "node tests/pkg.test.cjs && node tests/pkg.test.mjs", + "test": "npm run test:unit && npm run test:build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/humanwhocodes/module-importer.git" + }, + "keywords": [ + "modules", + "esm", + "commonjs" + ], + "engines": { + "node": ">=12.22" + }, + "author": "Nicholas C. Zaks", + "license": "Apache-2.0", + "devDependencies": { + "@types/node": "^18.7.6", + "c8": "7.12.0", + "chai": "4.3.6", + "eslint": "8.22.0", + "lint-staged": "13.0.3", + "mocha": "9.2.2", + "rollup": "2.78.0", + "typescript": "4.7.4", + "yorkie": "2.0.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/src/module-importer.cjs b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/src/module-importer.cjs new file mode 100644 index 00000000000..3efb095e11a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/src/module-importer.cjs @@ -0,0 +1,81 @@ +/** + * @fileoverview Universal module importer + */ + +//----------------------------------------------------------------------------- +// Imports +//----------------------------------------------------------------------------- + +const { createRequire } = require("module"); +const { pathToFileURL } = require("url"); + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +const SLASHES = new Set(["/", "\\"]); + +/** + * Normalizes directories to have a trailing slash. + * Resolve is pretty finicky -- if the directory name doesn't have + * a trailing slash then it tries to look in the parent directory. + * i.e., if the directory is "/usr/nzakas/foo" it will start the + * search in /usr/nzakas. However, if the directory is "/user/nzakas/foo/", + * then it will start the search in /user/nzakas/foo. + * @param {string} directory The directory to check. + * @returns {string} The normalized directory. + */ +function normalizeDirectory(directory) { + if (!SLASHES.has(directory[directory.length-1])) { + return directory + "/"; + } + + return directory; +} + +//----------------------------------------------------------------------------- +// Exports +//----------------------------------------------------------------------------- + +/** + * Class for importing both CommonJS and ESM modules in Node.js. + */ +exports.ModuleImporter = class ModuleImporter { + + /** + * Creates a new instance. + * @param {string} [cwd] The current working directory to resolve from. + */ + constructor(cwd = process.cwd()) { + + /** + * The base directory from which paths should be resolved. + * @type {string} + */ + this.cwd = normalizeDirectory(cwd); + } + + /** + * Resolves a module based on its name or location. + * @param {string} specifier Either an npm package name or + * relative file path. + * @returns {string|undefined} The location of the import. + * @throws {Error} If specifier cannot be located. + */ + resolve(specifier) { + const require = createRequire(this.cwd); + return require.resolve(specifier); + } + + /** + * Imports a module based on its name or location. + * @param {string} specifier Either an npm package name or + * relative file path. + * @returns {Promise} The module's object. + */ + import(specifier) { + const location = this.resolve(specifier); + return import(pathToFileURL(location).href); + } + +} diff --git a/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/src/module-importer.js b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/src/module-importer.js new file mode 100644 index 00000000000..f5464e18dec --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@humanwhocodes/module-importer/src/module-importer.js @@ -0,0 +1,22 @@ +/** + * @fileoverview Universal module importer + */ + +//----------------------------------------------------------------------------- +// Imports +//----------------------------------------------------------------------------- + +import { createRequire } from "module"; +import { fileURLToPath } from "url"; +import { dirname } from "path"; + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +const require = createRequire(__dirname + "/"); +const { ModuleImporter } = require("./module-importer.cjs"); + +export { ModuleImporter }; diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/LICENSE b/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/LICENSE new file mode 100644 index 00000000000..352f0715f39 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/LICENSE @@ -0,0 +1,19 @@ +Copyright 2022 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs b/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs new file mode 100644 index 00000000000..31f9c5c3873 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs @@ -0,0 +1,167 @@ +import { SetArray, put } from '@jridgewell/set-array'; +import { encode } from '@jridgewell/sourcemap-codec'; + +/** + * A low-level API to associate a generated position with an original source position. Line and + * column here are 0-based, unlike `addMapping`. + */ +let addSegment; +/** + * A high-level API to associate a generated position with an original source position. Line is + * 1-based, but column is 0-based, due to legacy behavior in `source-map` library. + */ +let addMapping; +/** + * Adds/removes the content of the source file to the source map. + */ +let setSourceContent; +/** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +let decodedMap; +/** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +let encodedMap; +/** + * Returns an array of high-level mapping objects for every recorded segment, which could then be + * passed to the `source-map` library. + */ +let allMappings; +/** + * Provides the state to generate a sourcemap. + */ +class GenMapping { + constructor({ file, sourceRoot } = {}) { + this._names = new SetArray(); + this._sources = new SetArray(); + this._sourcesContent = []; + this._mappings = []; + this.file = file; + this.sourceRoot = sourceRoot; + } +} +(() => { + addSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name) => { + const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map; + const line = getLine(mappings, genLine); + if (source == null) { + const seg = [genColumn]; + const index = getColumnIndex(line, genColumn, seg); + return insert(line, index, seg); + } + const sourcesIndex = put(sources, source); + const seg = name + ? [genColumn, sourcesIndex, sourceLine, sourceColumn, put(names, name)] + : [genColumn, sourcesIndex, sourceLine, sourceColumn]; + const index = getColumnIndex(line, genColumn, seg); + if (sourcesIndex === sourcesContent.length) + sourcesContent[sourcesIndex] = null; + insert(line, index, seg); + }; + addMapping = (map, mapping) => { + const { generated, source, original, name } = mapping; + return addSegment(map, generated.line - 1, generated.column, source, original == null ? undefined : original.line - 1, original === null || original === void 0 ? void 0 : original.column, name); + }; + setSourceContent = (map, source, content) => { + const { _sources: sources, _sourcesContent: sourcesContent } = map; + sourcesContent[put(sources, source)] = content; + }; + decodedMap = (map) => { + const { file, sourceRoot, _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map; + return { + version: 3, + file, + names: names.array, + sourceRoot: sourceRoot || undefined, + sources: sources.array, + sourcesContent, + mappings, + }; + }; + encodedMap = (map) => { + const decoded = decodedMap(map); + return Object.assign(Object.assign({}, decoded), { mappings: encode(decoded.mappings) }); + }; + allMappings = (map) => { + const out = []; + const { _mappings: mappings, _sources: sources, _names: names } = map; + for (let i = 0; i < mappings.length; i++) { + const line = mappings[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const generated = { line: i + 1, column: seg[0] }; + let source = undefined; + let original = undefined; + let name = undefined; + if (seg.length !== 1) { + source = sources.array[seg[1]]; + original = { line: seg[2] + 1, column: seg[3] }; + if (seg.length === 5) + name = names.array[seg[4]]; + } + out.push({ generated, source, original, name }); + } + } + return out; + }; +})(); +function getLine(mappings, index) { + for (let i = mappings.length; i <= index; i++) { + mappings[i] = []; + } + return mappings[index]; +} +function getColumnIndex(line, column, seg) { + let index = line.length; + for (let i = index - 1; i >= 0; i--, index--) { + const current = line[i]; + const col = current[0]; + if (col > column) + continue; + if (col < column) + break; + const cmp = compare(current, seg); + if (cmp === 0) + return index; + if (cmp < 0) + break; + } + return index; +} +function compare(a, b) { + let cmp = compareNum(a.length, b.length); + if (cmp !== 0) + return cmp; + // We've already checked genColumn + if (a.length === 1) + return 0; + cmp = compareNum(a[1], b[1]); + if (cmp !== 0) + return cmp; + cmp = compareNum(a[2], b[2]); + if (cmp !== 0) + return cmp; + cmp = compareNum(a[3], b[3]); + if (cmp !== 0) + return cmp; + if (a.length === 4) + return 0; + return compareNum(a[4], b[4]); +} +function compareNum(a, b) { + return a - b; +} +function insert(array, index, value) { + if (index === -1) + return; + for (let i = array.length; i > index; i--) { + array[i] = array[i - 1]; + } + array[index] = value; +} + +export { GenMapping, addMapping, addSegment, allMappings, decodedMap, encodedMap, setSourceContent }; +//# sourceMappingURL=gen-mapping.mjs.map diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js b/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js new file mode 100644 index 00000000000..46ecab77aa6 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js @@ -0,0 +1,174 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@jridgewell/set-array'), require('@jridgewell/sourcemap-codec')) : + typeof define === 'function' && define.amd ? define(['exports', '@jridgewell/set-array', '@jridgewell/sourcemap-codec'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.genMapping = {}, global.setArray, global.sourcemapCodec)); +})(this, (function (exports, setArray, sourcemapCodec) { 'use strict'; + + /** + * A low-level API to associate a generated position with an original source position. Line and + * column here are 0-based, unlike `addMapping`. + */ + exports.addSegment = void 0; + /** + * A high-level API to associate a generated position with an original source position. Line is + * 1-based, but column is 0-based, due to legacy behavior in `source-map` library. + */ + exports.addMapping = void 0; + /** + * Adds/removes the content of the source file to the source map. + */ + exports.setSourceContent = void 0; + /** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ + exports.decodedMap = void 0; + /** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ + exports.encodedMap = void 0; + /** + * Returns an array of high-level mapping objects for every recorded segment, which could then be + * passed to the `source-map` library. + */ + exports.allMappings = void 0; + /** + * Provides the state to generate a sourcemap. + */ + class GenMapping { + constructor({ file, sourceRoot } = {}) { + this._names = new setArray.SetArray(); + this._sources = new setArray.SetArray(); + this._sourcesContent = []; + this._mappings = []; + this.file = file; + this.sourceRoot = sourceRoot; + } + } + (() => { + exports.addSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name) => { + const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map; + const line = getLine(mappings, genLine); + if (source == null) { + const seg = [genColumn]; + const index = getColumnIndex(line, genColumn, seg); + return insert(line, index, seg); + } + const sourcesIndex = setArray.put(sources, source); + const seg = name + ? [genColumn, sourcesIndex, sourceLine, sourceColumn, setArray.put(names, name)] + : [genColumn, sourcesIndex, sourceLine, sourceColumn]; + const index = getColumnIndex(line, genColumn, seg); + if (sourcesIndex === sourcesContent.length) + sourcesContent[sourcesIndex] = null; + insert(line, index, seg); + }; + exports.addMapping = (map, mapping) => { + const { generated, source, original, name } = mapping; + return exports.addSegment(map, generated.line - 1, generated.column, source, original == null ? undefined : original.line - 1, original === null || original === void 0 ? void 0 : original.column, name); + }; + exports.setSourceContent = (map, source, content) => { + const { _sources: sources, _sourcesContent: sourcesContent } = map; + sourcesContent[setArray.put(sources, source)] = content; + }; + exports.decodedMap = (map) => { + const { file, sourceRoot, _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map; + return { + version: 3, + file, + names: names.array, + sourceRoot: sourceRoot || undefined, + sources: sources.array, + sourcesContent, + mappings, + }; + }; + exports.encodedMap = (map) => { + const decoded = exports.decodedMap(map); + return Object.assign(Object.assign({}, decoded), { mappings: sourcemapCodec.encode(decoded.mappings) }); + }; + exports.allMappings = (map) => { + const out = []; + const { _mappings: mappings, _sources: sources, _names: names } = map; + for (let i = 0; i < mappings.length; i++) { + const line = mappings[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const generated = { line: i + 1, column: seg[0] }; + let source = undefined; + let original = undefined; + let name = undefined; + if (seg.length !== 1) { + source = sources.array[seg[1]]; + original = { line: seg[2] + 1, column: seg[3] }; + if (seg.length === 5) + name = names.array[seg[4]]; + } + out.push({ generated, source, original, name }); + } + } + return out; + }; + })(); + function getLine(mappings, index) { + for (let i = mappings.length; i <= index; i++) { + mappings[i] = []; + } + return mappings[index]; + } + function getColumnIndex(line, column, seg) { + let index = line.length; + for (let i = index - 1; i >= 0; i--, index--) { + const current = line[i]; + const col = current[0]; + if (col > column) + continue; + if (col < column) + break; + const cmp = compare(current, seg); + if (cmp === 0) + return index; + if (cmp < 0) + break; + } + return index; + } + function compare(a, b) { + let cmp = compareNum(a.length, b.length); + if (cmp !== 0) + return cmp; + // We've already checked genColumn + if (a.length === 1) + return 0; + cmp = compareNum(a[1], b[1]); + if (cmp !== 0) + return cmp; + cmp = compareNum(a[2], b[2]); + if (cmp !== 0) + return cmp; + cmp = compareNum(a[3], b[3]); + if (cmp !== 0) + return cmp; + if (a.length === 4) + return 0; + return compareNum(a[4], b[4]); + } + function compareNum(a, b) { + return a - b; + } + function insert(array, index, value) { + if (index === -1) + return; + for (let i = array.length; i > index; i--) { + array[i] = array[i - 1]; + } + array[index] = value; + } + + exports.GenMapping = GenMapping; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=gen-mapping.umd.js.map diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/package.json b/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/package.json new file mode 100644 index 00000000000..e614b615a5e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@jridgewell/gen-mapping/package.json @@ -0,0 +1,72 @@ +{ + "name": "@jridgewell/gen-mapping", + "version": "0.1.1", + "description": "Generate source maps", + "keywords": [ + "source", + "map" + ], + "author": "Justin Ridgewell ", + "license": "MIT", + "repository": "https://github.com/jridgewell/gen-mapping", + "main": "dist/gen-mapping.umd.js", + "module": "dist/gen-mapping.mjs", + "typings": "dist/types/gen-mapping.d.ts", + "exports": { + ".": { + "browser": "./dist/gen-mapping.umd.js", + "require": "./dist/gen-mapping.umd.js", + "import": "./dist/gen-mapping.mjs" + }, + "./package.json": "./package.json" + }, + "files": [ + "dist" + ], + "engines": { + "node": ">=6.0.0" + }, + "scripts": { + "benchmark": "run-s build:rollup benchmark:*", + "benchmark:install": "cd benchmark && npm install", + "benchmark:only": "node benchmark/index.mjs", + "prebuild": "rm -rf dist", + "build": "run-s -n build:*", + "build:rollup": "rollup -c rollup.config.js", + "build:ts": "tsc --project tsconfig.build.json", + "lint": "run-s -n lint:*", + "lint:prettier": "npm run test:lint:prettier -- --write", + "lint:ts": "npm run test:lint:ts -- --fix", + "pretest": "run-s build:rollup", + "test": "run-s -n test:lint test:coverage", + "test:debug": "mocha --inspect-brk", + "test:lint": "run-s -n test:lint:*", + "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", + "test:lint:ts": "eslint '{src,test}/**/*.ts'", + "test:only": "mocha", + "test:coverage": "c8 mocha", + "test:watch": "run-p 'build:rollup -- --watch' 'test:only -- --watch'", + "prepublishOnly": "npm run preversion", + "preversion": "run-s test build" + }, + "devDependencies": { + "@rollup/plugin-typescript": "8.3.2", + "@types/mocha": "9.1.1", + "@types/node": "17.0.29", + "@typescript-eslint/eslint-plugin": "5.21.0", + "@typescript-eslint/parser": "5.21.0", + "benchmark": "2.1.4", + "c8": "7.11.2", + "eslint": "8.14.0", + "eslint-config-prettier": "8.5.0", + "mocha": "9.2.2", + "npm-run-all": "4.1.5", + "prettier": "2.6.2", + "rollup": "2.70.2", + "typescript": "4.6.3" + }, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } +} diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs b/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs index b7fa4bd8208..94d8dceb931 100644 --- a/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs +++ b/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs @@ -7,8 +7,30 @@ const schemeRegex = /^[\w+.-]+:\/\//; * 3. Host, guaranteed. * 4. Port, including ":", optional. * 5. Path, including "/", optional. + * 6. Query, including "?", optional. + * 7. Hash, including "#", optional. */ -const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?/; +const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/; +/** + * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start + * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive). + * + * 1. Host, optional. + * 2. Path, which may include "/", guaranteed. + * 3. Query, including "?", optional. + * 4. Hash, including "#", optional. + */ +const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i; +var UrlType; +(function (UrlType) { + UrlType[UrlType["Empty"] = 1] = "Empty"; + UrlType[UrlType["Hash"] = 2] = "Hash"; + UrlType[UrlType["Query"] = 3] = "Query"; + UrlType[UrlType["RelativePath"] = 4] = "RelativePath"; + UrlType[UrlType["AbsolutePath"] = 5] = "AbsolutePath"; + UrlType[UrlType["SchemeRelative"] = 6] = "SchemeRelative"; + UrlType[UrlType["Absolute"] = 7] = "Absolute"; +})(UrlType || (UrlType = {})); function isAbsoluteUrl(input) { return schemeRegex.test(input); } @@ -18,37 +40,62 @@ function isSchemeRelativeUrl(input) { function isAbsolutePath(input) { return input.startsWith('/'); } +function isFileUrl(input) { + return input.startsWith('file:'); +} +function isRelative(input) { + return /^[.?#]/.test(input); +} function parseAbsoluteUrl(input) { const match = urlRegex.exec(input); + return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || ''); +} +function parseFileUrl(input) { + const match = fileRegex.exec(input); + const path = match[2]; + return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || ''); +} +function makeUrl(scheme, user, host, port, path, query, hash) { return { - scheme: match[1], - user: match[2] || '', - host: match[3], - port: match[4] || '', - path: match[5] || '/', - relativePath: false, + scheme, + user, + host, + port, + path, + query, + hash, + type: UrlType.Absolute, }; } function parseUrl(input) { if (isSchemeRelativeUrl(input)) { const url = parseAbsoluteUrl('http:' + input); url.scheme = ''; + url.type = UrlType.SchemeRelative; return url; } if (isAbsolutePath(input)) { const url = parseAbsoluteUrl('http://foo.com' + input); url.scheme = ''; url.host = ''; + url.type = UrlType.AbsolutePath; return url; } - if (!isAbsoluteUrl(input)) { - const url = parseAbsoluteUrl('http://foo.com/' + input); - url.scheme = ''; - url.host = ''; - url.relativePath = true; - return url; - } - return parseAbsoluteUrl(input); + if (isFileUrl(input)) + return parseFileUrl(input); + if (isAbsoluteUrl(input)) + return parseAbsoluteUrl(input); + const url = parseAbsoluteUrl('http://foo.com/' + input); + url.scheme = ''; + url.host = ''; + url.type = input + ? input.startsWith('?') + ? UrlType.Query + : input.startsWith('#') + ? UrlType.Hash + : UrlType.RelativePath + : UrlType.Empty; + return url; } function stripPathFilename(path) { // If a path ends with a parent directory "..", then it's a relative path with excess parent @@ -59,10 +106,7 @@ function stripPathFilename(path) { return path.slice(0, index + 1); } function mergePaths(url, base) { - // If we're not a relative path, then we're an absolute path, and it doesn't matter what base is. - if (!url.relativePath) - return; - normalizePath(base); + normalizePath(base, base.type); // If the path is just a "/", then it was an empty path to begin with (remember, we're a relative // path). if (url.path === '/') { @@ -72,15 +116,13 @@ function mergePaths(url, base) { // Resolution happens relative to the base path's directory, not the file. url.path = stripPathFilename(base.path) + url.path; } - // If the base path is absolute, then our path is now absolute too. - url.relativePath = base.relativePath; } /** * The path can have empty directories "//", unneeded parents "foo/..", or current directory * "foo/.". We need to normalize to a standard representation. */ -function normalizePath(url) { - const { relativePath } = url; +function normalizePath(url, type) { + const rel = type <= UrlType.RelativePath; const pieces = url.path.split('/'); // We need to preserve the first piece always, so that we output a leading slash. The item at // pieces[0] is an empty string. @@ -112,7 +154,7 @@ function normalizePath(url) { positive--; pointer--; } - else if (relativePath) { + else if (rel) { // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute // URL, protocol relative URL, or an absolute path, we don't need to keep excess. pieces[pointer++] = piece; @@ -140,37 +182,60 @@ function resolve(input, base) { if (!input && !base) return ''; const url = parseUrl(input); - // If we have a base, and the input isn't already an absolute URL, then we need to merge. - if (base && !url.scheme) { + let inputType = url.type; + if (base && inputType !== UrlType.Absolute) { const baseUrl = parseUrl(base); - url.scheme = baseUrl.scheme; - // If there's no host, then we were just a path. - if (!url.host || baseUrl.scheme === 'file:') { - // The host, user, and port are joined, you can't copy one without the others. - url.user = baseUrl.user; - url.host = baseUrl.host; - url.port = baseUrl.port; + const baseType = baseUrl.type; + switch (inputType) { + case UrlType.Empty: + url.hash = baseUrl.hash; + // fall through + case UrlType.Hash: + url.query = baseUrl.query; + // fall through + case UrlType.Query: + case UrlType.RelativePath: + mergePaths(url, baseUrl); + // fall through + case UrlType.AbsolutePath: + // The host, user, and port are joined, you can't copy one without the others. + url.user = baseUrl.user; + url.host = baseUrl.host; + url.port = baseUrl.port; + // fall through + case UrlType.SchemeRelative: + // The input doesn't have a schema at least, so we need to copy at least that over. + url.scheme = baseUrl.scheme; } - mergePaths(url, baseUrl); + if (baseType > inputType) + inputType = baseType; } - normalizePath(url); - // If the input (and base, if there was one) are both relative, then we need to output a relative. - if (url.relativePath) { - // The first char is always a "/". - const path = url.path.slice(1); - if (!path) - return '.'; - // If base started with a leading ".", or there is no base and input started with a ".", then we - // need to ensure that the relative path starts with a ".". We don't know if relative starts - // with a "..", though, so check before prepending. - const keepRelative = (base || input).startsWith('.'); - return !keepRelative || path.startsWith('.') ? path : './' + path; + normalizePath(url, inputType); + const queryHash = url.query + url.hash; + switch (inputType) { + // This is impossible, because of the empty checks at the start of the function. + // case UrlType.Empty: + case UrlType.Hash: + case UrlType.Query: + return queryHash; + case UrlType.RelativePath: { + // The first char is always a "/", and we need it to be relative. + const path = url.path.slice(1); + if (!path) + return queryHash || '.'; + if (isRelative(base || input) && !isRelative(path)) { + // If base started with a leading ".", or there is no base and input started with a ".", + // then we need to ensure that the relative path starts with a ".". We don't know if + // relative starts with a "..", though, so check before prepending. + return './' + path + queryHash; + } + return path + queryHash; + } + case UrlType.AbsolutePath: + return url.path + queryHash; + default: + return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash; } - // If there's no host (and no scheme/user/port), then we need to output an absolute path. - if (!url.scheme && !url.host) - return url.path; - // We're outputting either an absolute URL, or a protocol relative one. - return `${url.scheme}//${url.user}${url.host}${url.port}${url.path}`; } export { resolve as default }; diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js b/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js index 015f1af3264..0700a2d60ce 100644 --- a/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js +++ b/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js @@ -13,8 +13,30 @@ * 3. Host, guaranteed. * 4. Port, including ":", optional. * 5. Path, including "/", optional. + * 6. Query, including "?", optional. + * 7. Hash, including "#", optional. */ - const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?/; + const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/; + /** + * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start + * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive). + * + * 1. Host, optional. + * 2. Path, which may include "/", guaranteed. + * 3. Query, including "?", optional. + * 4. Hash, including "#", optional. + */ + const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i; + var UrlType; + (function (UrlType) { + UrlType[UrlType["Empty"] = 1] = "Empty"; + UrlType[UrlType["Hash"] = 2] = "Hash"; + UrlType[UrlType["Query"] = 3] = "Query"; + UrlType[UrlType["RelativePath"] = 4] = "RelativePath"; + UrlType[UrlType["AbsolutePath"] = 5] = "AbsolutePath"; + UrlType[UrlType["SchemeRelative"] = 6] = "SchemeRelative"; + UrlType[UrlType["Absolute"] = 7] = "Absolute"; + })(UrlType || (UrlType = {})); function isAbsoluteUrl(input) { return schemeRegex.test(input); } @@ -24,37 +46,62 @@ function isAbsolutePath(input) { return input.startsWith('/'); } + function isFileUrl(input) { + return input.startsWith('file:'); + } + function isRelative(input) { + return /^[.?#]/.test(input); + } function parseAbsoluteUrl(input) { const match = urlRegex.exec(input); + return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || ''); + } + function parseFileUrl(input) { + const match = fileRegex.exec(input); + const path = match[2]; + return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || ''); + } + function makeUrl(scheme, user, host, port, path, query, hash) { return { - scheme: match[1], - user: match[2] || '', - host: match[3], - port: match[4] || '', - path: match[5] || '/', - relativePath: false, + scheme, + user, + host, + port, + path, + query, + hash, + type: UrlType.Absolute, }; } function parseUrl(input) { if (isSchemeRelativeUrl(input)) { const url = parseAbsoluteUrl('http:' + input); url.scheme = ''; + url.type = UrlType.SchemeRelative; return url; } if (isAbsolutePath(input)) { const url = parseAbsoluteUrl('http://foo.com' + input); url.scheme = ''; url.host = ''; + url.type = UrlType.AbsolutePath; return url; } - if (!isAbsoluteUrl(input)) { - const url = parseAbsoluteUrl('http://foo.com/' + input); - url.scheme = ''; - url.host = ''; - url.relativePath = true; - return url; - } - return parseAbsoluteUrl(input); + if (isFileUrl(input)) + return parseFileUrl(input); + if (isAbsoluteUrl(input)) + return parseAbsoluteUrl(input); + const url = parseAbsoluteUrl('http://foo.com/' + input); + url.scheme = ''; + url.host = ''; + url.type = input + ? input.startsWith('?') + ? UrlType.Query + : input.startsWith('#') + ? UrlType.Hash + : UrlType.RelativePath + : UrlType.Empty; + return url; } function stripPathFilename(path) { // If a path ends with a parent directory "..", then it's a relative path with excess parent @@ -65,10 +112,7 @@ return path.slice(0, index + 1); } function mergePaths(url, base) { - // If we're not a relative path, then we're an absolute path, and it doesn't matter what base is. - if (!url.relativePath) - return; - normalizePath(base); + normalizePath(base, base.type); // If the path is just a "/", then it was an empty path to begin with (remember, we're a relative // path). if (url.path === '/') { @@ -78,15 +122,13 @@ // Resolution happens relative to the base path's directory, not the file. url.path = stripPathFilename(base.path) + url.path; } - // If the base path is absolute, then our path is now absolute too. - url.relativePath = base.relativePath; } /** * The path can have empty directories "//", unneeded parents "foo/..", or current directory * "foo/.". We need to normalize to a standard representation. */ - function normalizePath(url) { - const { relativePath } = url; + function normalizePath(url, type) { + const rel = type <= UrlType.RelativePath; const pieces = url.path.split('/'); // We need to preserve the first piece always, so that we output a leading slash. The item at // pieces[0] is an empty string. @@ -118,7 +160,7 @@ positive--; pointer--; } - else if (relativePath) { + else if (rel) { // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute // URL, protocol relative URL, or an absolute path, we don't need to keep excess. pieces[pointer++] = piece; @@ -146,37 +188,60 @@ if (!input && !base) return ''; const url = parseUrl(input); - // If we have a base, and the input isn't already an absolute URL, then we need to merge. - if (base && !url.scheme) { + let inputType = url.type; + if (base && inputType !== UrlType.Absolute) { const baseUrl = parseUrl(base); - url.scheme = baseUrl.scheme; - // If there's no host, then we were just a path. - if (!url.host || baseUrl.scheme === 'file:') { - // The host, user, and port are joined, you can't copy one without the others. - url.user = baseUrl.user; - url.host = baseUrl.host; - url.port = baseUrl.port; + const baseType = baseUrl.type; + switch (inputType) { + case UrlType.Empty: + url.hash = baseUrl.hash; + // fall through + case UrlType.Hash: + url.query = baseUrl.query; + // fall through + case UrlType.Query: + case UrlType.RelativePath: + mergePaths(url, baseUrl); + // fall through + case UrlType.AbsolutePath: + // The host, user, and port are joined, you can't copy one without the others. + url.user = baseUrl.user; + url.host = baseUrl.host; + url.port = baseUrl.port; + // fall through + case UrlType.SchemeRelative: + // The input doesn't have a schema at least, so we need to copy at least that over. + url.scheme = baseUrl.scheme; } - mergePaths(url, baseUrl); + if (baseType > inputType) + inputType = baseType; } - normalizePath(url); - // If the input (and base, if there was one) are both relative, then we need to output a relative. - if (url.relativePath) { - // The first char is always a "/". - const path = url.path.slice(1); - if (!path) - return '.'; - // If base started with a leading ".", or there is no base and input started with a ".", then we - // need to ensure that the relative path starts with a ".". We don't know if relative starts - // with a "..", though, so check before prepending. - const keepRelative = (base || input).startsWith('.'); - return !keepRelative || path.startsWith('.') ? path : './' + path; + normalizePath(url, inputType); + const queryHash = url.query + url.hash; + switch (inputType) { + // This is impossible, because of the empty checks at the start of the function. + // case UrlType.Empty: + case UrlType.Hash: + case UrlType.Query: + return queryHash; + case UrlType.RelativePath: { + // The first char is always a "/", and we need it to be relative. + const path = url.path.slice(1); + if (!path) + return queryHash || '.'; + if (isRelative(base || input) && !isRelative(path)) { + // If base started with a leading ".", or there is no base and input started with a ".", + // then we need to ensure that the relative path starts with a ".". We don't know if + // relative starts with a "..", though, so check before prepending. + return './' + path + queryHash; + } + return path + queryHash; + } + case UrlType.AbsolutePath: + return url.path + queryHash; + default: + return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash; } - // If there's no host (and no scheme/user/port), then we need to output an absolute path. - if (!url.scheme && !url.host) - return url.path; - // We're outputting either an absolute URL, or a protocol relative one. - return `${url.scheme}//${url.user}${url.host}${url.port}${url.path}`; } return resolve; diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/package.json b/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/package.json index 40266386cb1..114937a0067 100644 --- a/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/package.json +++ b/tools/node_modules/eslint/node_modules/@jridgewell/resolve-uri/package.json @@ -1,6 +1,6 @@ { "name": "@jridgewell/resolve-uri", - "version": "3.0.5", + "version": "3.1.0", "description": "Resolve a URI relative to an optional base URI", "keywords": [ "resolve", @@ -15,11 +15,15 @@ "module": "dist/resolve-uri.mjs", "typings": "dist/types/resolve-uri.d.ts", "exports": { - ".": { - "browser": "./dist/resolve-uri.umd.js", - "require": "./dist/resolve-uri.umd.js", - "import": "./dist/resolve-uri.mjs" - }, + ".": [ + { + "types": "./dist/types/resolve-uri.d.ts", + "browser": "./dist/resolve-uri.umd.js", + "require": "./dist/resolve-uri.umd.js", + "import": "./dist/resolve-uri.mjs" + }, + "./dist/resolve-uri.umd.js" + ], "./package.json": "./package.json" }, "files": [ @@ -49,6 +53,7 @@ "preversion": "run-s test build" }, "devDependencies": { + "@jridgewell/resolve-uri-latest": "npm:@jridgewell/resolve-uri@*", "@rollup/plugin-typescript": "8.3.0", "@typescript-eslint/eslint-plugin": "5.10.0", "@typescript-eslint/parser": "5.10.0", diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/set-array/LICENSE b/tools/node_modules/eslint/node_modules/@jridgewell/set-array/LICENSE new file mode 100644 index 00000000000..352f0715f39 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@jridgewell/set-array/LICENSE @@ -0,0 +1,19 @@ +Copyright 2022 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/set-array/dist/set-array.mjs b/tools/node_modules/eslint/node_modules/@jridgewell/set-array/dist/set-array.mjs new file mode 100644 index 00000000000..b7f1a9cc688 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@jridgewell/set-array/dist/set-array.mjs @@ -0,0 +1,48 @@ +/** + * Gets the index associated with `key` in the backing array, if it is already present. + */ +let get; +/** + * Puts `key` into the backing array, if it is not already present. Returns + * the index of the `key` in the backing array. + */ +let put; +/** + * Pops the last added item out of the SetArray. + */ +let pop; +/** + * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the + * index of the `key` in the backing array. + * + * This is designed to allow synchronizing a second array with the contents of the backing array, + * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`, + * and there are never duplicates. + */ +class SetArray { + constructor() { + this._indexes = { __proto__: null }; + this.array = []; + } +} +(() => { + get = (strarr, key) => strarr._indexes[key]; + put = (strarr, key) => { + // The key may or may not be present. If it is present, it's a number. + const index = get(strarr, key); + if (index !== undefined) + return index; + const { array, _indexes: indexes } = strarr; + return (indexes[key] = array.push(key) - 1); + }; + pop = (strarr) => { + const { array, _indexes: indexes } = strarr; + if (array.length === 0) + return; + const last = array.pop(); + indexes[last] = undefined; + }; +})(); + +export { SetArray, get, pop, put }; +//# sourceMappingURL=set-array.mjs.map diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/set-array/dist/set-array.umd.js b/tools/node_modules/eslint/node_modules/@jridgewell/set-array/dist/set-array.umd.js new file mode 100644 index 00000000000..a1c200a1cb7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@jridgewell/set-array/dist/set-array.umd.js @@ -0,0 +1,58 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.setArray = {})); +})(this, (function (exports) { 'use strict'; + + /** + * Gets the index associated with `key` in the backing array, if it is already present. + */ + exports.get = void 0; + /** + * Puts `key` into the backing array, if it is not already present. Returns + * the index of the `key` in the backing array. + */ + exports.put = void 0; + /** + * Pops the last added item out of the SetArray. + */ + exports.pop = void 0; + /** + * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the + * index of the `key` in the backing array. + * + * This is designed to allow synchronizing a second array with the contents of the backing array, + * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`, + * and there are never duplicates. + */ + class SetArray { + constructor() { + this._indexes = { __proto__: null }; + this.array = []; + } + } + (() => { + exports.get = (strarr, key) => strarr._indexes[key]; + exports.put = (strarr, key) => { + // The key may or may not be present. If it is present, it's a number. + const index = exports.get(strarr, key); + if (index !== undefined) + return index; + const { array, _indexes: indexes } = strarr; + return (indexes[key] = array.push(key) - 1); + }; + exports.pop = (strarr) => { + const { array, _indexes: indexes } = strarr; + if (array.length === 0) + return; + const last = array.pop(); + indexes[last] = undefined; + }; + })(); + + exports.SetArray = SetArray; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=set-array.umd.js.map diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/set-array/package.json b/tools/node_modules/eslint/node_modules/@jridgewell/set-array/package.json new file mode 100644 index 00000000000..aec4ee029ef --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@jridgewell/set-array/package.json @@ -0,0 +1,66 @@ +{ + "name": "@jridgewell/set-array", + "version": "1.1.2", + "description": "Like a Set, but provides the index of the `key` in the backing array", + "keywords": [], + "author": "Justin Ridgewell ", + "license": "MIT", + "repository": "https://github.com/jridgewell/set-array", + "main": "dist/set-array.umd.js", + "module": "dist/set-array.mjs", + "typings": "dist/types/set-array.d.ts", + "exports": { + ".": [ + { + "types": "./dist/types/set-array.d.ts", + "browser": "./dist/set-array.umd.js", + "require": "./dist/set-array.umd.js", + "import": "./dist/set-array.mjs" + }, + "./dist/set-array.umd.js" + ], + "./package.json": "./package.json" + }, + "files": [ + "dist", + "src" + ], + "engines": { + "node": ">=6.0.0" + }, + "scripts": { + "prebuild": "rm -rf dist", + "build": "run-s -n build:*", + "build:rollup": "rollup -c rollup.config.js", + "build:ts": "tsc --project tsconfig.build.json", + "lint": "run-s -n lint:*", + "lint:prettier": "npm run test:lint:prettier -- --write", + "lint:ts": "npm run test:lint:ts -- --fix", + "pretest": "run-s build:rollup", + "test": "run-s -n test:lint test:only", + "test:debug": "mocha --inspect-brk", + "test:lint": "run-s -n test:lint:*", + "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", + "test:lint:ts": "eslint '{src,test}/**/*.ts'", + "test:only": "mocha", + "test:coverage": "c8 mocha", + "test:watch": "mocha --watch", + "prepublishOnly": "npm run preversion", + "preversion": "run-s test build" + }, + "devDependencies": { + "@rollup/plugin-typescript": "8.3.0", + "@types/mocha": "9.1.1", + "@types/node": "17.0.29", + "@typescript-eslint/eslint-plugin": "5.10.0", + "@typescript-eslint/parser": "5.10.0", + "c8": "7.11.0", + "eslint": "8.7.0", + "eslint-config-prettier": "8.3.0", + "mocha": "9.2.0", + "npm-run-all": "4.1.5", + "prettier": "2.5.1", + "rollup": "2.66.0", + "typescript": "4.5.5" + } +} diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs b/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs index 4e92c1e658c..3dff372170b 100644 --- a/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs +++ b/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs @@ -2,15 +2,15 @@ const comma = ','.charCodeAt(0); const semicolon = ';'.charCodeAt(0); const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; const intToChar = new Uint8Array(64); // 64 possible chars. -const charToInteger = new Uint8Array(128); // z is 122 in ASCII +const charToInt = new Uint8Array(128); // z is 122 in ASCII for (let i = 0; i < chars.length; i++) { const c = chars.charCodeAt(i); - charToInteger[c] = i; intToChar[i] = c; + charToInt[c] = i; } // Provide a fallback for older environments. const td = typeof TextDecoder !== 'undefined' - ? new TextDecoder() + ? /* #__PURE__ */ new TextDecoder() : typeof Buffer !== 'undefined' ? { decode(buf) { @@ -30,56 +30,55 @@ const td = typeof TextDecoder !== 'undefined' function decode(mappings) { const state = new Int32Array(5); const decoded = []; - let line = []; - let sorted = true; - let lastCol = 0; - for (let i = 0; i < mappings.length;) { - const c = mappings.charCodeAt(i); - if (c === comma) { - i++; - } - else if (c === semicolon) { - state[0] = lastCol = 0; - if (!sorted) - sort(line); - sorted = true; - decoded.push(line); - line = []; - i++; - } - else { - i = decodeInteger(mappings, i, state, 0); // generatedCodeColumn + let index = 0; + do { + const semi = indexOf(mappings, index); + const line = []; + let sorted = true; + let lastCol = 0; + state[0] = 0; + for (let i = index; i < semi; i++) { + let seg; + i = decodeInteger(mappings, i, state, 0); // genColumn const col = state[0]; if (col < lastCol) sorted = false; lastCol = col; - if (!hasMoreSegments(mappings, i)) { - line.push([col]); - continue; + if (hasMoreVlq(mappings, i, semi)) { + i = decodeInteger(mappings, i, state, 1); // sourcesIndex + i = decodeInteger(mappings, i, state, 2); // sourceLine + i = decodeInteger(mappings, i, state, 3); // sourceColumn + if (hasMoreVlq(mappings, i, semi)) { + i = decodeInteger(mappings, i, state, 4); // namesIndex + seg = [col, state[1], state[2], state[3], state[4]]; + } + else { + seg = [col, state[1], state[2], state[3]]; + } } - i = decodeInteger(mappings, i, state, 1); // sourceFileIndex - i = decodeInteger(mappings, i, state, 2); // sourceCodeLine - i = decodeInteger(mappings, i, state, 3); // sourceCodeColumn - if (!hasMoreSegments(mappings, i)) { - line.push([col, state[1], state[2], state[3]]); - continue; + else { + seg = [col]; } - i = decodeInteger(mappings, i, state, 4); // nameIndex - line.push([col, state[1], state[2], state[3], state[4]]); + line.push(seg); } - } - if (!sorted) - sort(line); - decoded.push(line); + if (!sorted) + sort(line); + decoded.push(line); + index = semi + 1; + } while (index <= mappings.length); return decoded; } +function indexOf(mappings, index) { + const idx = mappings.indexOf(';', index); + return idx === -1 ? mappings.length : idx; +} function decodeInteger(mappings, pos, state, j) { let value = 0; let shift = 0; let integer = 0; do { const c = mappings.charCodeAt(pos++); - integer = charToInteger[c]; + integer = charToInt[c]; value |= (integer & 31) << shift; shift += 5; } while (integer & 32); @@ -91,13 +90,10 @@ function decodeInteger(mappings, pos, state, j) { state[j] += value; return pos; } -function hasMoreSegments(mappings, i) { - if (i >= mappings.length) - return false; - const c = mappings.charCodeAt(i); - if (c === comma || c === semicolon) +function hasMoreVlq(mappings, i, length) { + if (i >= length) return false; - return true; + return mappings.charCodeAt(i) !== comma; } function sort(line) { line.sort(sortComparator); @@ -107,12 +103,19 @@ function sortComparator(a, b) { } function encode(decoded) { const state = new Int32Array(5); - let buf = new Uint8Array(1024); + const bufLength = 1024 * 16; + const subLength = bufLength - 36; + const buf = new Uint8Array(bufLength); + const sub = buf.subarray(0, subLength); let pos = 0; + let out = ''; for (let i = 0; i < decoded.length; i++) { const line = decoded[i]; if (i > 0) { - buf = reserve(buf, pos, 1); + if (pos === bufLength) { + out += td.decode(buf); + pos = 0; + } buf[pos++] = semicolon; } if (line.length === 0) @@ -122,28 +125,25 @@ function encode(decoded) { const segment = line[j]; // We can push up to 5 ints, each int can take at most 7 chars, and we // may push a comma. - buf = reserve(buf, pos, 36); + if (pos > subLength) { + out += td.decode(sub); + buf.copyWithin(0, subLength, pos); + pos -= subLength; + } if (j > 0) buf[pos++] = comma; - pos = encodeInteger(buf, pos, state, segment, 0); // generatedCodeColumn + pos = encodeInteger(buf, pos, state, segment, 0); // genColumn if (segment.length === 1) continue; - pos = encodeInteger(buf, pos, state, segment, 1); // sourceFileIndex - pos = encodeInteger(buf, pos, state, segment, 2); // sourceCodeLine - pos = encodeInteger(buf, pos, state, segment, 3); // sourceCodeColumn + pos = encodeInteger(buf, pos, state, segment, 1); // sourcesIndex + pos = encodeInteger(buf, pos, state, segment, 2); // sourceLine + pos = encodeInteger(buf, pos, state, segment, 3); // sourceColumn if (segment.length === 4) continue; - pos = encodeInteger(buf, pos, state, segment, 4); // nameIndex + pos = encodeInteger(buf, pos, state, segment, 4); // namesIndex } } - return td.decode(buf.subarray(0, pos)); -} -function reserve(buf, pos, count) { - if (buf.length > pos + count) - return buf; - const swap = new Uint8Array(buf.length * 2); - swap.set(buf); - return swap; + return out + td.decode(buf.subarray(0, pos)); } function encodeInteger(buf, pos, state, segment, j) { const next = segment[j]; diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js b/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js index b5aa0c43c3e..bec92a9c61a 100644 --- a/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js +++ b/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js @@ -8,15 +8,15 @@ const semicolon = ';'.charCodeAt(0); const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; const intToChar = new Uint8Array(64); // 64 possible chars. - const charToInteger = new Uint8Array(128); // z is 122 in ASCII + const charToInt = new Uint8Array(128); // z is 122 in ASCII for (let i = 0; i < chars.length; i++) { const c = chars.charCodeAt(i); - charToInteger[c] = i; intToChar[i] = c; + charToInt[c] = i; } // Provide a fallback for older environments. const td = typeof TextDecoder !== 'undefined' - ? new TextDecoder() + ? /* #__PURE__ */ new TextDecoder() : typeof Buffer !== 'undefined' ? { decode(buf) { @@ -36,56 +36,55 @@ function decode(mappings) { const state = new Int32Array(5); const decoded = []; - let line = []; - let sorted = true; - let lastCol = 0; - for (let i = 0; i < mappings.length;) { - const c = mappings.charCodeAt(i); - if (c === comma) { - i++; - } - else if (c === semicolon) { - state[0] = lastCol = 0; - if (!sorted) - sort(line); - sorted = true; - decoded.push(line); - line = []; - i++; - } - else { - i = decodeInteger(mappings, i, state, 0); // generatedCodeColumn + let index = 0; + do { + const semi = indexOf(mappings, index); + const line = []; + let sorted = true; + let lastCol = 0; + state[0] = 0; + for (let i = index; i < semi; i++) { + let seg; + i = decodeInteger(mappings, i, state, 0); // genColumn const col = state[0]; if (col < lastCol) sorted = false; lastCol = col; - if (!hasMoreSegments(mappings, i)) { - line.push([col]); - continue; + if (hasMoreVlq(mappings, i, semi)) { + i = decodeInteger(mappings, i, state, 1); // sourcesIndex + i = decodeInteger(mappings, i, state, 2); // sourceLine + i = decodeInteger(mappings, i, state, 3); // sourceColumn + if (hasMoreVlq(mappings, i, semi)) { + i = decodeInteger(mappings, i, state, 4); // namesIndex + seg = [col, state[1], state[2], state[3], state[4]]; + } + else { + seg = [col, state[1], state[2], state[3]]; + } } - i = decodeInteger(mappings, i, state, 1); // sourceFileIndex - i = decodeInteger(mappings, i, state, 2); // sourceCodeLine - i = decodeInteger(mappings, i, state, 3); // sourceCodeColumn - if (!hasMoreSegments(mappings, i)) { - line.push([col, state[1], state[2], state[3]]); - continue; + else { + seg = [col]; } - i = decodeInteger(mappings, i, state, 4); // nameIndex - line.push([col, state[1], state[2], state[3], state[4]]); + line.push(seg); } - } - if (!sorted) - sort(line); - decoded.push(line); + if (!sorted) + sort(line); + decoded.push(line); + index = semi + 1; + } while (index <= mappings.length); return decoded; } + function indexOf(mappings, index) { + const idx = mappings.indexOf(';', index); + return idx === -1 ? mappings.length : idx; + } function decodeInteger(mappings, pos, state, j) { let value = 0; let shift = 0; let integer = 0; do { const c = mappings.charCodeAt(pos++); - integer = charToInteger[c]; + integer = charToInt[c]; value |= (integer & 31) << shift; shift += 5; } while (integer & 32); @@ -97,13 +96,10 @@ state[j] += value; return pos; } - function hasMoreSegments(mappings, i) { - if (i >= mappings.length) - return false; - const c = mappings.charCodeAt(i); - if (c === comma || c === semicolon) + function hasMoreVlq(mappings, i, length) { + if (i >= length) return false; - return true; + return mappings.charCodeAt(i) !== comma; } function sort(line) { line.sort(sortComparator); @@ -113,12 +109,19 @@ } function encode(decoded) { const state = new Int32Array(5); - let buf = new Uint8Array(1024); + const bufLength = 1024 * 16; + const subLength = bufLength - 36; + const buf = new Uint8Array(bufLength); + const sub = buf.subarray(0, subLength); let pos = 0; + let out = ''; for (let i = 0; i < decoded.length; i++) { const line = decoded[i]; if (i > 0) { - buf = reserve(buf, pos, 1); + if (pos === bufLength) { + out += td.decode(buf); + pos = 0; + } buf[pos++] = semicolon; } if (line.length === 0) @@ -128,28 +131,25 @@ const segment = line[j]; // We can push up to 5 ints, each int can take at most 7 chars, and we // may push a comma. - buf = reserve(buf, pos, 36); + if (pos > subLength) { + out += td.decode(sub); + buf.copyWithin(0, subLength, pos); + pos -= subLength; + } if (j > 0) buf[pos++] = comma; - pos = encodeInteger(buf, pos, state, segment, 0); // generatedCodeColumn + pos = encodeInteger(buf, pos, state, segment, 0); // genColumn if (segment.length === 1) continue; - pos = encodeInteger(buf, pos, state, segment, 1); // sourceFileIndex - pos = encodeInteger(buf, pos, state, segment, 2); // sourceCodeLine - pos = encodeInteger(buf, pos, state, segment, 3); // sourceCodeColumn + pos = encodeInteger(buf, pos, state, segment, 1); // sourcesIndex + pos = encodeInteger(buf, pos, state, segment, 2); // sourceLine + pos = encodeInteger(buf, pos, state, segment, 3); // sourceColumn if (segment.length === 4) continue; - pos = encodeInteger(buf, pos, state, segment, 4); // nameIndex + pos = encodeInteger(buf, pos, state, segment, 4); // namesIndex } } - return td.decode(buf.subarray(0, pos)); - } - function reserve(buf, pos, count) { - if (buf.length > pos + count) - return buf; - const swap = new Uint8Array(buf.length * 2); - swap.set(buf); - return swap; + return out + td.decode(buf.subarray(0, pos)); } function encodeInteger(buf, pos, state, segment, j) { const next = segment[j]; diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/package.json b/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/package.json index 0dc07c91037..59450728782 100644 --- a/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/package.json +++ b/tools/node_modules/eslint/node_modules/@jridgewell/sourcemap-codec/package.json @@ -1,6 +1,6 @@ { "name": "@jridgewell/sourcemap-codec", - "version": "1.4.11", + "version": "1.4.14", "description": "Encode/decode sourcemap mappings", "keywords": [ "sourcemap", @@ -10,19 +10,25 @@ "module": "dist/sourcemap-codec.mjs", "typings": "dist/types/sourcemap-codec.d.ts", "files": [ - "dist" + "dist", + "src" ], "exports": { - ".": { - "browser": "./dist/sourcemap-codec.umd.js", - "import": "./dist/sourcemap-codec.mjs", - "require": "./dist/sourcemap-codec.umd.js" - }, + ".": [ + { + "types": "./dist/types/sourcemap-codec.d.ts", + "browser": "./dist/sourcemap-codec.umd.js", + "import": "./dist/sourcemap-codec.mjs", + "require": "./dist/sourcemap-codec.umd.js" + }, + "./dist/sourcemap-codec.umd.js" + ], "./package.json": "./package.json" }, "scripts": { - "benchmark": "run-s build:rollup benchmark:only", - "benchmark:only": "node benchmark/index.js", + "benchmark": "run-s build:rollup benchmark:*", + "benchmark:install": "cd benchmark && npm install", + "benchmark:only": "node --expose-gc benchmark/index.js", "build": "run-s -n build:*", "build:rollup": "rollup -c rollup.config.js", "build:ts": "tsc --project tsconfig.build.json", @@ -54,7 +60,7 @@ "@typescript-eslint/eslint-plugin": "5.10.0", "@typescript-eslint/parser": "5.10.0", "benchmark": "2.1.4", - "c8": "7.11.0", + "c8": "7.11.2", "eslint": "8.7.0", "eslint-config-prettier": "8.3.0", "mocha": "9.2.0", diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs b/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs index fd59d760563..594471ce30f 100644 --- a/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs +++ b/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs @@ -1,4 +1,4 @@ -import { decode, encode } from '@jridgewell/sourcemap-codec'; +import { encode, decode } from '@jridgewell/sourcemap-codec'; import resolveUri from '@jridgewell/resolve-uri'; function resolve(input, base) { @@ -20,6 +20,14 @@ function stripFilename(path) { return path.slice(0, index + 1); } +const COLUMN = 0; +const SOURCES_INDEX = 1; +const SOURCE_LINE = 2; +const SOURCE_COLUMN = 3; +const NAMES_INDEX = 4; +const REV_GENERATED_LINE = 1; +const REV_GENERATED_COLUMN = 2; + function maybeSort(mappings, owned) { const unsortedIndex = nextUnsortedSegmentLine(mappings, 0); if (unsortedIndex === mappings.length) @@ -42,7 +50,7 @@ function nextUnsortedSegmentLine(mappings, start) { } function isSorted(line) { for (let j = 1; j < line.length; j++) { - if (line[j][0] < line[j - 1][0]) { + if (line[j][COLUMN] < line[j - 1][COLUMN]) { return false; } } @@ -54,9 +62,10 @@ function sortSegments(line, owned) { return line.sort(sortComparator); } function sortComparator(a, b) { - return a[0] - b[0]; + return a[COLUMN] - b[COLUMN]; } +let found = false; /** * A binary search implementation that returns the index if a match is found. * If no match is found, then the left-index (the index associated with the item that comes just @@ -76,8 +85,9 @@ function sortComparator(a, b) { function binarySearch(haystack, needle, low, high) { while (low <= high) { const mid = low + ((high - low) >> 1); - const cmp = haystack[mid][0] - needle; + const cmp = haystack[mid][COLUMN] - needle; if (cmp === 0) { + found = true; return mid; } if (cmp < 0) { @@ -87,8 +97,23 @@ function binarySearch(haystack, needle, low, high) { high = mid - 1; } } + found = false; return low - 1; } +function upperBound(haystack, needle, index) { + for (let i = index + 1; i < haystack.length; index = i++) { + if (haystack[i][COLUMN] !== needle) + break; + } + return index; +} +function lowerBound(haystack, needle, index) { + for (let i = index - 1; i >= 0; index = i--) { + if (haystack[i][COLUMN] !== needle) + break; + } + return index; +} function memoizedState() { return { lastKey: -1, @@ -106,11 +131,12 @@ function memoizedBinarySearch(haystack, needle, state, key) { let high = haystack.length - 1; if (key === lastKey) { if (needle === lastNeedle) { + found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle; return lastIndex; } if (needle >= lastNeedle) { // lastIndex may be -1 if the previous needle was not found. - low = Math.max(lastIndex, 0); + low = lastIndex === -1 ? 0 : lastIndex; } else { high = lastIndex; @@ -121,12 +147,149 @@ function memoizedBinarySearch(haystack, needle, state, key) { return (state.lastIndex = binarySearch(haystack, needle, low, high)); } -const INVALID_MAPPING = Object.freeze({ - source: null, - line: null, - column: null, - name: null, -}); +// Rebuilds the original source files, with mappings that are ordered by source line/column instead +// of generated line/column. +function buildBySources(decoded, memos) { + const sources = memos.map(buildNullArray); + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + if (seg.length === 1) + continue; + const sourceIndex = seg[SOURCES_INDEX]; + const sourceLine = seg[SOURCE_LINE]; + const sourceColumn = seg[SOURCE_COLUMN]; + const originalSource = sources[sourceIndex]; + const originalLine = (originalSource[sourceLine] || (originalSource[sourceLine] = [])); + const memo = memos[sourceIndex]; + // The binary search either found a match, or it found the left-index just before where the + // segment should go. Either way, we want to insert after that. And there may be multiple + // generated segments associated with an original location, so there may need to move several + // indexes before we find where we need to insert. + const index = upperBound(originalLine, sourceColumn, memoizedBinarySearch(originalLine, sourceColumn, memo, sourceLine)); + insert(originalLine, (memo.lastIndex = index + 1), [sourceColumn, i, seg[COLUMN]]); + } + } + return sources; +} +function insert(array, index, value) { + for (let i = array.length; i > index; i--) { + array[i] = array[i - 1]; + } + array[index] = value; +} +// Null arrays allow us to use ordered index keys without actually allocating contiguous memory like +// a real array. We use a null-prototype object to avoid prototype pollution and deoptimizations. +// Numeric properties on objects are magically sorted in ascending order by the engine regardless of +// the insertion order. So, by setting any numeric keys, even out of order, we'll get ascending +// order when iterating with for-in. +function buildNullArray() { + return { __proto__: null }; +} + +const AnyMap = function (map, mapUrl) { + const parsed = typeof map === 'string' ? JSON.parse(map) : map; + if (!('sections' in parsed)) + return new TraceMap(parsed, mapUrl); + const mappings = []; + const sources = []; + const sourcesContent = []; + const names = []; + recurse(parsed, mapUrl, mappings, sources, sourcesContent, names, 0, 0, Infinity, Infinity); + const joined = { + version: 3, + file: parsed.file, + names, + sources, + sourcesContent, + mappings, + }; + return presortedDecodedMap(joined); +}; +function recurse(input, mapUrl, mappings, sources, sourcesContent, names, lineOffset, columnOffset, stopLine, stopColumn) { + const { sections } = input; + for (let i = 0; i < sections.length; i++) { + const { map, offset } = sections[i]; + let sl = stopLine; + let sc = stopColumn; + if (i + 1 < sections.length) { + const nextOffset = sections[i + 1].offset; + sl = Math.min(stopLine, lineOffset + nextOffset.line); + if (sl === stopLine) { + sc = Math.min(stopColumn, columnOffset + nextOffset.column); + } + else if (sl < stopLine) { + sc = columnOffset + nextOffset.column; + } + } + addSection(map, mapUrl, mappings, sources, sourcesContent, names, lineOffset + offset.line, columnOffset + offset.column, sl, sc); + } +} +function addSection(input, mapUrl, mappings, sources, sourcesContent, names, lineOffset, columnOffset, stopLine, stopColumn) { + if ('sections' in input) + return recurse(...arguments); + const map = new TraceMap(input, mapUrl); + const sourcesOffset = sources.length; + const namesOffset = names.length; + const decoded = decodedMappings(map); + const { resolvedSources, sourcesContent: contents } = map; + append(sources, resolvedSources); + append(names, map.names); + if (contents) + append(sourcesContent, contents); + else + for (let i = 0; i < resolvedSources.length; i++) + sourcesContent.push(null); + for (let i = 0; i < decoded.length; i++) { + const lineI = lineOffset + i; + // We can only add so many lines before we step into the range that the next section's map + // controls. When we get to the last line, then we'll start checking the segments to see if + // they've crossed into the column range. But it may not have any columns that overstep, so we + // still need to check that we don't overstep lines, too. + if (lineI > stopLine) + return; + // The out line may already exist in mappings (if we're continuing the line started by a + // previous section). Or, we may have jumped ahead several lines to start this section. + const out = getLine(mappings, lineI); + // On the 0th loop, the section's column offset shifts us forward. On all other lines (since the + // map can be multiple lines), it doesn't. + const cOffset = i === 0 ? columnOffset : 0; + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const column = cOffset + seg[COLUMN]; + // If this segment steps into the column range that the next section's map controls, we need + // to stop early. + if (lineI === stopLine && column >= stopColumn) + return; + if (seg.length === 1) { + out.push([column]); + continue; + } + const sourcesIndex = sourcesOffset + seg[SOURCES_INDEX]; + const sourceLine = seg[SOURCE_LINE]; + const sourceColumn = seg[SOURCE_COLUMN]; + out.push(seg.length === 4 + ? [column, sourcesIndex, sourceLine, sourceColumn] + : [column, sourcesIndex, sourceLine, sourceColumn, namesOffset + seg[NAMES_INDEX]]); + } + } +} +function append(arr, other) { + for (let i = 0; i < other.length; i++) + arr.push(other[i]); +} +function getLine(arr, index) { + for (let i = arr.length; i <= index; i++) + arr[i] = []; + return arr[index]; +} + +const LINE_GTR_ZERO = '`line` must be greater than 0 (lines start at line 1)'; +const COL_GTR_EQ_ZERO = '`column` must be greater than or equal to 0 (columns start at column 0)'; +const LEAST_UPPER_BOUND = -1; +const GREATEST_LOWER_BOUND = 1; /** * Returns the encoded (VLQ string) form of the SourceMap's mappings field. */ @@ -146,20 +309,43 @@ let traceSegment; * `source-map` library. */ let originalPositionFor; +/** + * Finds the source/line/column directly after the mapping returned by originalPositionFor, provided + * the found mapping is from the same source and line as the originalPositionFor mapping. + * + * Eg, in the code `let id = 1`, `originalPositionAfter` could find the mapping associated with `1` + * using the same needle that would return `id` when calling `originalPositionFor`. + */ +let generatedPositionFor; /** * Iterates each mapping in generated position order. */ let eachMapping; +/** + * Retrieves the source content for a particular source, if its found. Returns null if not. + */ +let sourceContentFor; /** * A helper that skips sorting of the input map's mappings array, which can be expensive for larger * maps. */ let presortedDecodedMap; +/** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +let decodedMap; +/** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +let encodedMap; class TraceMap { constructor(map, mapUrl) { - this._binarySearchMemo = memoizedState(); const isString = typeof map === 'string'; - const parsed = isString ? JSON.parse(map) : map; + if (!isString && map._decodedMemo) + return map; + const parsed = (isString ? JSON.parse(map) : map); const { version, file, names, sourceRoot, sources, sourcesContent } = parsed; this.version = version; this.file = file; @@ -167,22 +353,20 @@ class TraceMap { this.sourceRoot = sourceRoot; this.sources = sources; this.sourcesContent = sourcesContent; - if (sourceRoot || mapUrl) { - const from = resolve(sourceRoot || '', stripFilename(mapUrl)); - this.resolvedSources = sources.map((s) => resolve(s || '', from)); - } - else { - this.resolvedSources = sources.map((s) => s || ''); - } + const from = resolve(sourceRoot || '', stripFilename(mapUrl)); + this.resolvedSources = sources.map((s) => resolve(s || '', from)); const { mappings } = parsed; if (typeof mappings === 'string') { this._encoded = mappings; - this._decoded = decode(mappings); + this._decoded = undefined; } else { this._encoded = undefined; this._decoded = maybeSort(mappings, isString); } + this._decodedMemo = memoizedState(); + this._bySources = undefined; + this._bySourceMemos = undefined; } } (() => { @@ -191,42 +375,59 @@ class TraceMap { return ((_a = map._encoded) !== null && _a !== void 0 ? _a : (map._encoded = encode(map._decoded))); }; decodedMappings = (map) => { - return map._decoded; + return (map._decoded || (map._decoded = decode(map._encoded))); }; traceSegment = (map, line, column) => { - const decoded = map._decoded; + const decoded = decodedMappings(map); // It's common for parent source maps to have pointers to lines that have no // mapping (like a "//# sourceMappingURL=") at the end of the child file. if (line >= decoded.length) return null; - const segments = decoded[line]; - const index = memoizedBinarySearch(segments, column, map._binarySearchMemo, line); - // we come before any mapped segment - if (index < 0) - return null; - return segments[index]; + return traceSegmentInternal(decoded[line], map._decodedMemo, line, column, GREATEST_LOWER_BOUND); }; - originalPositionFor = (map, { line, column }) => { - if (line < 1) - throw new Error('`line` must be greater than 0 (lines start at line 1)'); - if (column < 0) { - throw new Error('`column` must be greater than or equal to 0 (columns start at column 0)'); - } - const segment = traceSegment(map, line - 1, column); + originalPositionFor = (map, { line, column, bias }) => { + line--; + if (line < 0) + throw new Error(LINE_GTR_ZERO); + if (column < 0) + throw new Error(COL_GTR_EQ_ZERO); + const decoded = decodedMappings(map); + // It's common for parent source maps to have pointers to lines that have no + // mapping (like a "//# sourceMappingURL=") at the end of the child file. + if (line >= decoded.length) + return OMapping(null, null, null, null); + const segment = traceSegmentInternal(decoded[line], map._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND); if (segment == null) - return INVALID_MAPPING; + return OMapping(null, null, null, null); if (segment.length == 1) - return INVALID_MAPPING; + return OMapping(null, null, null, null); const { names, resolvedSources } = map; - return { - source: resolvedSources[segment[1]], - line: segment[2] + 1, - column: segment[3], - name: segment.length === 5 ? names[segment[4]] : null, - }; + return OMapping(resolvedSources[segment[SOURCES_INDEX]], segment[SOURCE_LINE] + 1, segment[SOURCE_COLUMN], segment.length === 5 ? names[segment[NAMES_INDEX]] : null); + }; + generatedPositionFor = (map, { source, line, column, bias }) => { + line--; + if (line < 0) + throw new Error(LINE_GTR_ZERO); + if (column < 0) + throw new Error(COL_GTR_EQ_ZERO); + const { sources, resolvedSources } = map; + let sourceIndex = sources.indexOf(source); + if (sourceIndex === -1) + sourceIndex = resolvedSources.indexOf(source); + if (sourceIndex === -1) + return GMapping(null, null); + const generated = (map._bySources || (map._bySources = buildBySources(decodedMappings(map), (map._bySourceMemos = sources.map(memoizedState))))); + const memos = map._bySourceMemos; + const segments = generated[sourceIndex][line]; + if (segments == null) + return GMapping(null, null); + const segment = traceSegmentInternal(segments, memos[sourceIndex], line, column, bias || GREATEST_LOWER_BOUND); + if (segment == null) + return GMapping(null, null); + return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]); }; eachMapping = (map, cb) => { - const decoded = map._decoded; + const decoded = decodedMappings(map); const { names, resolvedSources } = map; for (let i = 0; i < decoded.length; i++) { const line = decoded[i]; @@ -256,14 +457,55 @@ class TraceMap { } } }; + sourceContentFor = (map, source) => { + const { sources, resolvedSources, sourcesContent } = map; + if (sourcesContent == null) + return null; + let index = sources.indexOf(source); + if (index === -1) + index = resolvedSources.indexOf(source); + return index === -1 ? null : sourcesContent[index]; + }; presortedDecodedMap = (map, mapUrl) => { - const clone = Object.assign({}, map); - clone.mappings = []; - const tracer = new TraceMap(clone, mapUrl); + const tracer = new TraceMap(clone(map, []), mapUrl); tracer._decoded = map.mappings; return tracer; }; + decodedMap = (map) => { + return clone(map, decodedMappings(map)); + }; + encodedMap = (map) => { + return clone(map, encodedMappings(map)); + }; })(); +function clone(map, mappings) { + return { + version: map.version, + file: map.file, + names: map.names, + sourceRoot: map.sourceRoot, + sources: map.sources, + sourcesContent: map.sourcesContent, + mappings, + }; +} +function OMapping(source, line, column, name) { + return { source, line, column, name }; +} +function GMapping(line, column) { + return { line, column }; +} +function traceSegmentInternal(segments, memo, line, column, bias) { + let index = memoizedBinarySearch(segments, column, memo, line); + if (found) { + index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index); + } + else if (bias === LEAST_UPPER_BOUND) + index++; + if (index === -1 || index === segments.length) + return null; + return segments[index]; +} -export { TraceMap, decodedMappings, eachMapping, encodedMappings, originalPositionFor, presortedDecodedMap, traceSegment }; +export { AnyMap, GREATEST_LOWER_BOUND, LEAST_UPPER_BOUND, TraceMap, decodedMap, decodedMappings, eachMapping, encodedMap, encodedMappings, generatedPositionFor, originalPositionFor, presortedDecodedMap, sourceContentFor, traceSegment }; //# sourceMappingURL=trace-mapping.mjs.map diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js b/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js index 19f8f26a3e3..d0741e03b61 100644 --- a/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js +++ b/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js @@ -27,6 +27,14 @@ return path.slice(0, index + 1); } + const COLUMN = 0; + const SOURCES_INDEX = 1; + const SOURCE_LINE = 2; + const SOURCE_COLUMN = 3; + const NAMES_INDEX = 4; + const REV_GENERATED_LINE = 1; + const REV_GENERATED_COLUMN = 2; + function maybeSort(mappings, owned) { const unsortedIndex = nextUnsortedSegmentLine(mappings, 0); if (unsortedIndex === mappings.length) @@ -49,7 +57,7 @@ } function isSorted(line) { for (let j = 1; j < line.length; j++) { - if (line[j][0] < line[j - 1][0]) { + if (line[j][COLUMN] < line[j - 1][COLUMN]) { return false; } } @@ -61,9 +69,10 @@ return line.sort(sortComparator); } function sortComparator(a, b) { - return a[0] - b[0]; + return a[COLUMN] - b[COLUMN]; } + let found = false; /** * A binary search implementation that returns the index if a match is found. * If no match is found, then the left-index (the index associated with the item that comes just @@ -83,8 +92,9 @@ function binarySearch(haystack, needle, low, high) { while (low <= high) { const mid = low + ((high - low) >> 1); - const cmp = haystack[mid][0] - needle; + const cmp = haystack[mid][COLUMN] - needle; if (cmp === 0) { + found = true; return mid; } if (cmp < 0) { @@ -94,8 +104,23 @@ high = mid - 1; } } + found = false; return low - 1; } + function upperBound(haystack, needle, index) { + for (let i = index + 1; i < haystack.length; index = i++) { + if (haystack[i][COLUMN] !== needle) + break; + } + return index; + } + function lowerBound(haystack, needle, index) { + for (let i = index - 1; i >= 0; index = i--) { + if (haystack[i][COLUMN] !== needle) + break; + } + return index; + } function memoizedState() { return { lastKey: -1, @@ -113,11 +138,12 @@ let high = haystack.length - 1; if (key === lastKey) { if (needle === lastNeedle) { + found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle; return lastIndex; } if (needle >= lastNeedle) { // lastIndex may be -1 if the previous needle was not found. - low = Math.max(lastIndex, 0); + low = lastIndex === -1 ? 0 : lastIndex; } else { high = lastIndex; @@ -128,12 +154,149 @@ return (state.lastIndex = binarySearch(haystack, needle, low, high)); } - const INVALID_MAPPING = Object.freeze({ - source: null, - line: null, - column: null, - name: null, - }); + // Rebuilds the original source files, with mappings that are ordered by source line/column instead + // of generated line/column. + function buildBySources(decoded, memos) { + const sources = memos.map(buildNullArray); + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + if (seg.length === 1) + continue; + const sourceIndex = seg[SOURCES_INDEX]; + const sourceLine = seg[SOURCE_LINE]; + const sourceColumn = seg[SOURCE_COLUMN]; + const originalSource = sources[sourceIndex]; + const originalLine = (originalSource[sourceLine] || (originalSource[sourceLine] = [])); + const memo = memos[sourceIndex]; + // The binary search either found a match, or it found the left-index just before where the + // segment should go. Either way, we want to insert after that. And there may be multiple + // generated segments associated with an original location, so there may need to move several + // indexes before we find where we need to insert. + const index = upperBound(originalLine, sourceColumn, memoizedBinarySearch(originalLine, sourceColumn, memo, sourceLine)); + insert(originalLine, (memo.lastIndex = index + 1), [sourceColumn, i, seg[COLUMN]]); + } + } + return sources; + } + function insert(array, index, value) { + for (let i = array.length; i > index; i--) { + array[i] = array[i - 1]; + } + array[index] = value; + } + // Null arrays allow us to use ordered index keys without actually allocating contiguous memory like + // a real array. We use a null-prototype object to avoid prototype pollution and deoptimizations. + // Numeric properties on objects are magically sorted in ascending order by the engine regardless of + // the insertion order. So, by setting any numeric keys, even out of order, we'll get ascending + // order when iterating with for-in. + function buildNullArray() { + return { __proto__: null }; + } + + const AnyMap = function (map, mapUrl) { + const parsed = typeof map === 'string' ? JSON.parse(map) : map; + if (!('sections' in parsed)) + return new TraceMap(parsed, mapUrl); + const mappings = []; + const sources = []; + const sourcesContent = []; + const names = []; + recurse(parsed, mapUrl, mappings, sources, sourcesContent, names, 0, 0, Infinity, Infinity); + const joined = { + version: 3, + file: parsed.file, + names, + sources, + sourcesContent, + mappings, + }; + return exports.presortedDecodedMap(joined); + }; + function recurse(input, mapUrl, mappings, sources, sourcesContent, names, lineOffset, columnOffset, stopLine, stopColumn) { + const { sections } = input; + for (let i = 0; i < sections.length; i++) { + const { map, offset } = sections[i]; + let sl = stopLine; + let sc = stopColumn; + if (i + 1 < sections.length) { + const nextOffset = sections[i + 1].offset; + sl = Math.min(stopLine, lineOffset + nextOffset.line); + if (sl === stopLine) { + sc = Math.min(stopColumn, columnOffset + nextOffset.column); + } + else if (sl < stopLine) { + sc = columnOffset + nextOffset.column; + } + } + addSection(map, mapUrl, mappings, sources, sourcesContent, names, lineOffset + offset.line, columnOffset + offset.column, sl, sc); + } + } + function addSection(input, mapUrl, mappings, sources, sourcesContent, names, lineOffset, columnOffset, stopLine, stopColumn) { + if ('sections' in input) + return recurse(...arguments); + const map = new TraceMap(input, mapUrl); + const sourcesOffset = sources.length; + const namesOffset = names.length; + const decoded = exports.decodedMappings(map); + const { resolvedSources, sourcesContent: contents } = map; + append(sources, resolvedSources); + append(names, map.names); + if (contents) + append(sourcesContent, contents); + else + for (let i = 0; i < resolvedSources.length; i++) + sourcesContent.push(null); + for (let i = 0; i < decoded.length; i++) { + const lineI = lineOffset + i; + // We can only add so many lines before we step into the range that the next section's map + // controls. When we get to the last line, then we'll start checking the segments to see if + // they've crossed into the column range. But it may not have any columns that overstep, so we + // still need to check that we don't overstep lines, too. + if (lineI > stopLine) + return; + // The out line may already exist in mappings (if we're continuing the line started by a + // previous section). Or, we may have jumped ahead several lines to start this section. + const out = getLine(mappings, lineI); + // On the 0th loop, the section's column offset shifts us forward. On all other lines (since the + // map can be multiple lines), it doesn't. + const cOffset = i === 0 ? columnOffset : 0; + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const column = cOffset + seg[COLUMN]; + // If this segment steps into the column range that the next section's map controls, we need + // to stop early. + if (lineI === stopLine && column >= stopColumn) + return; + if (seg.length === 1) { + out.push([column]); + continue; + } + const sourcesIndex = sourcesOffset + seg[SOURCES_INDEX]; + const sourceLine = seg[SOURCE_LINE]; + const sourceColumn = seg[SOURCE_COLUMN]; + out.push(seg.length === 4 + ? [column, sourcesIndex, sourceLine, sourceColumn] + : [column, sourcesIndex, sourceLine, sourceColumn, namesOffset + seg[NAMES_INDEX]]); + } + } + } + function append(arr, other) { + for (let i = 0; i < other.length; i++) + arr.push(other[i]); + } + function getLine(arr, index) { + for (let i = arr.length; i <= index; i++) + arr[i] = []; + return arr[index]; + } + + const LINE_GTR_ZERO = '`line` must be greater than 0 (lines start at line 1)'; + const COL_GTR_EQ_ZERO = '`column` must be greater than or equal to 0 (columns start at column 0)'; + const LEAST_UPPER_BOUND = -1; + const GREATEST_LOWER_BOUND = 1; /** * Returns the encoded (VLQ string) form of the SourceMap's mappings field. */ @@ -153,20 +316,43 @@ * `source-map` library. */ exports.originalPositionFor = void 0; + /** + * Finds the source/line/column directly after the mapping returned by originalPositionFor, provided + * the found mapping is from the same source and line as the originalPositionFor mapping. + * + * Eg, in the code `let id = 1`, `originalPositionAfter` could find the mapping associated with `1` + * using the same needle that would return `id` when calling `originalPositionFor`. + */ + exports.generatedPositionFor = void 0; /** * Iterates each mapping in generated position order. */ exports.eachMapping = void 0; + /** + * Retrieves the source content for a particular source, if its found. Returns null if not. + */ + exports.sourceContentFor = void 0; /** * A helper that skips sorting of the input map's mappings array, which can be expensive for larger * maps. */ exports.presortedDecodedMap = void 0; + /** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ + exports.decodedMap = void 0; + /** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ + exports.encodedMap = void 0; class TraceMap { constructor(map, mapUrl) { - this._binarySearchMemo = memoizedState(); const isString = typeof map === 'string'; - const parsed = isString ? JSON.parse(map) : map; + if (!isString && map._decodedMemo) + return map; + const parsed = (isString ? JSON.parse(map) : map); const { version, file, names, sourceRoot, sources, sourcesContent } = parsed; this.version = version; this.file = file; @@ -174,22 +360,20 @@ this.sourceRoot = sourceRoot; this.sources = sources; this.sourcesContent = sourcesContent; - if (sourceRoot || mapUrl) { - const from = resolve(sourceRoot || '', stripFilename(mapUrl)); - this.resolvedSources = sources.map((s) => resolve(s || '', from)); - } - else { - this.resolvedSources = sources.map((s) => s || ''); - } + const from = resolve(sourceRoot || '', stripFilename(mapUrl)); + this.resolvedSources = sources.map((s) => resolve(s || '', from)); const { mappings } = parsed; if (typeof mappings === 'string') { this._encoded = mappings; - this._decoded = sourcemapCodec.decode(mappings); + this._decoded = undefined; } else { this._encoded = undefined; this._decoded = maybeSort(mappings, isString); } + this._decodedMemo = memoizedState(); + this._bySources = undefined; + this._bySourceMemos = undefined; } } (() => { @@ -198,42 +382,59 @@ return ((_a = map._encoded) !== null && _a !== void 0 ? _a : (map._encoded = sourcemapCodec.encode(map._decoded))); }; exports.decodedMappings = (map) => { - return map._decoded; + return (map._decoded || (map._decoded = sourcemapCodec.decode(map._encoded))); }; exports.traceSegment = (map, line, column) => { - const decoded = map._decoded; + const decoded = exports.decodedMappings(map); // It's common for parent source maps to have pointers to lines that have no // mapping (like a "//# sourceMappingURL=") at the end of the child file. if (line >= decoded.length) return null; - const segments = decoded[line]; - const index = memoizedBinarySearch(segments, column, map._binarySearchMemo, line); - // we come before any mapped segment - if (index < 0) - return null; - return segments[index]; + return traceSegmentInternal(decoded[line], map._decodedMemo, line, column, GREATEST_LOWER_BOUND); }; - exports.originalPositionFor = (map, { line, column }) => { - if (line < 1) - throw new Error('`line` must be greater than 0 (lines start at line 1)'); - if (column < 0) { - throw new Error('`column` must be greater than or equal to 0 (columns start at column 0)'); - } - const segment = exports.traceSegment(map, line - 1, column); + exports.originalPositionFor = (map, { line, column, bias }) => { + line--; + if (line < 0) + throw new Error(LINE_GTR_ZERO); + if (column < 0) + throw new Error(COL_GTR_EQ_ZERO); + const decoded = exports.decodedMappings(map); + // It's common for parent source maps to have pointers to lines that have no + // mapping (like a "//# sourceMappingURL=") at the end of the child file. + if (line >= decoded.length) + return OMapping(null, null, null, null); + const segment = traceSegmentInternal(decoded[line], map._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND); if (segment == null) - return INVALID_MAPPING; + return OMapping(null, null, null, null); if (segment.length == 1) - return INVALID_MAPPING; + return OMapping(null, null, null, null); const { names, resolvedSources } = map; - return { - source: resolvedSources[segment[1]], - line: segment[2] + 1, - column: segment[3], - name: segment.length === 5 ? names[segment[4]] : null, - }; + return OMapping(resolvedSources[segment[SOURCES_INDEX]], segment[SOURCE_LINE] + 1, segment[SOURCE_COLUMN], segment.length === 5 ? names[segment[NAMES_INDEX]] : null); + }; + exports.generatedPositionFor = (map, { source, line, column, bias }) => { + line--; + if (line < 0) + throw new Error(LINE_GTR_ZERO); + if (column < 0) + throw new Error(COL_GTR_EQ_ZERO); + const { sources, resolvedSources } = map; + let sourceIndex = sources.indexOf(source); + if (sourceIndex === -1) + sourceIndex = resolvedSources.indexOf(source); + if (sourceIndex === -1) + return GMapping(null, null); + const generated = (map._bySources || (map._bySources = buildBySources(exports.decodedMappings(map), (map._bySourceMemos = sources.map(memoizedState))))); + const memos = map._bySourceMemos; + const segments = generated[sourceIndex][line]; + if (segments == null) + return GMapping(null, null); + const segment = traceSegmentInternal(segments, memos[sourceIndex], line, column, bias || GREATEST_LOWER_BOUND); + if (segment == null) + return GMapping(null, null); + return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]); }; exports.eachMapping = (map, cb) => { - const decoded = map._decoded; + const decoded = exports.decodedMappings(map); const { names, resolvedSources } = map; for (let i = 0; i < decoded.length; i++) { const line = decoded[i]; @@ -263,15 +464,59 @@ } } }; + exports.sourceContentFor = (map, source) => { + const { sources, resolvedSources, sourcesContent } = map; + if (sourcesContent == null) + return null; + let index = sources.indexOf(source); + if (index === -1) + index = resolvedSources.indexOf(source); + return index === -1 ? null : sourcesContent[index]; + }; exports.presortedDecodedMap = (map, mapUrl) => { - const clone = Object.assign({}, map); - clone.mappings = []; - const tracer = new TraceMap(clone, mapUrl); + const tracer = new TraceMap(clone(map, []), mapUrl); tracer._decoded = map.mappings; return tracer; }; + exports.decodedMap = (map) => { + return clone(map, exports.decodedMappings(map)); + }; + exports.encodedMap = (map) => { + return clone(map, exports.encodedMappings(map)); + }; })(); + function clone(map, mappings) { + return { + version: map.version, + file: map.file, + names: map.names, + sourceRoot: map.sourceRoot, + sources: map.sources, + sourcesContent: map.sourcesContent, + mappings, + }; + } + function OMapping(source, line, column, name) { + return { source, line, column, name }; + } + function GMapping(line, column) { + return { line, column }; + } + function traceSegmentInternal(segments, memo, line, column, bias) { + let index = memoizedBinarySearch(segments, column, memo, line); + if (found) { + index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index); + } + else if (bias === LEAST_UPPER_BOUND) + index++; + if (index === -1 || index === segments.length) + return null; + return segments[index]; + } + exports.AnyMap = AnyMap; + exports.GREATEST_LOWER_BOUND = GREATEST_LOWER_BOUND; + exports.LEAST_UPPER_BOUND = LEAST_UPPER_BOUND; exports.TraceMap = TraceMap; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/package.json b/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/package.json index 4e51edd88c9..c84a200894e 100644 --- a/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/package.json +++ b/tools/node_modules/eslint/node_modules/@jridgewell/trace-mapping/package.json @@ -1,6 +1,6 @@ { "name": "@jridgewell/trace-mapping", - "version": "0.3.4", + "version": "0.3.15", "description": "Trace the original position through a source map", "keywords": [ "source", @@ -13,11 +13,15 @@ "dist" ], "exports": { - ".": { - "browser": "./dist/trace-mapping.umd.js", - "require": "./dist/trace-mapping.umd.js", - "import": "./dist/trace-mapping.mjs" - }, + ".": [ + { + "types": "./dist/types/trace-mapping.d.ts", + "browser": "./dist/trace-mapping.umd.js", + "require": "./dist/trace-mapping.umd.js", + "import": "./dist/trace-mapping.mjs" + }, + "./dist/trace-mapping.umd.js" + ], "./package.json": "./package.json" }, "author": "Justin Ridgewell ", @@ -27,8 +31,9 @@ }, "license": "MIT", "scripts": { - "benchmark": "run-s build:rollup benchmark:only", - "benchmark:only": "node benchmark/index.mjs", + "benchmark": "run-s build:rollup benchmark:*", + "benchmark:install": "cd benchmark && npm install", + "benchmark:only": "node --expose-gc benchmark/index.mjs", "build": "run-s -n build:*", "build:rollup": "rollup -c rollup.config.js", "build:ts": "tsc --project tsconfig.build.json", @@ -41,28 +46,27 @@ "test": "run-s -n test:lint test:only", "test:debug": "ava debug", "test:lint": "run-s -n test:lint:*", - "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", + "test:lint:prettier": "prettier --check '{src,test}/**/*.ts' '**/*.md'", "test:lint:ts": "eslint '{src,test}/**/*.ts'", "test:only": "c8 ava", "test:watch": "ava --watch" }, "devDependencies": { - "@rollup/plugin-typescript": "8.3.0", - "@typescript-eslint/eslint-plugin": "5.10.0", - "@typescript-eslint/parser": "5.10.0", - "ava": "4.0.1", + "@rollup/plugin-typescript": "8.3.2", + "@typescript-eslint/eslint-plugin": "5.23.0", + "@typescript-eslint/parser": "5.23.0", + "ava": "4.2.0", "benchmark": "2.1.4", - "c8": "7.11.0", - "esbuild": "0.14.14", - "esbuild-node-loader": "0.6.4", - "eslint": "8.7.0", - "eslint-config-prettier": "8.3.0", + "c8": "7.11.2", + "esbuild": "0.14.38", + "esbuild-node-loader": "0.8.0", + "eslint": "8.15.0", + "eslint-config-prettier": "8.5.0", + "eslint-plugin-no-only-tests": "2.6.0", "npm-run-all": "4.1.5", - "prettier": "2.5.1", - "rollup": "2.64.0", - "source-map": "0.6.1", - "source-map-js": "1.0.2", - "typescript": "4.5.4" + "prettier": "2.6.2", + "rollup": "2.72.1", + "typescript": "4.6.4" }, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", diff --git a/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/LICENSE b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/LICENSE new file mode 100644 index 00000000000..01ce2036bbd --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/LICENSE @@ -0,0 +1,7 @@ +Copyright 2022 Nicolò Ribaudo + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/index.js b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/index.js new file mode 100644 index 00000000000..0ff6afc6a4c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/index.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = { + ...require("eslint-scope"), + Definition: require("eslint-scope/lib/definition").Definition, + PatternVisitor: require("eslint-scope/lib/pattern-visitor"), + Referencer: require("eslint-scope/lib/referencer"), +}; diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/LICENSE b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/LICENSE similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/LICENSE rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/LICENSE diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/definition.js b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/definition.js similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/definition.js rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/definition.js diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/index.js b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/index.js similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/index.js rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/index.js diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/pattern-visitor.js b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/pattern-visitor.js similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/pattern-visitor.js rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/pattern-visitor.js diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/reference.js b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/reference.js similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/reference.js rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/reference.js diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/referencer.js b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/referencer.js similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/referencer.js rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/referencer.js diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/scope-manager.js b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/scope-manager.js similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/scope-manager.js rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/scope-manager.js diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/scope.js b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/scope.js similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/scope.js rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/scope.js diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/variable.js b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/variable.js similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/lib/variable.js rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/lib/variable.js diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/package.json b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/package.json similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/eslint-scope/package.json rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope/package.json diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/estraverse/LICENSE.BSD b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse/LICENSE.BSD similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/estraverse/LICENSE.BSD rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse/LICENSE.BSD diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/estraverse/estraverse.js b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse/estraverse.js similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/estraverse/estraverse.js rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse/estraverse.js diff --git a/tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/estraverse/package.json b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse/package.json similarity index 100% rename from tools/node_modules/eslint/node_modules/@babel/eslint-parser/node_modules/estraverse/package.json rename to tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse/package.json diff --git a/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/package.json b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/package.json new file mode 100644 index 00000000000..8932502dfb4 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nicolo-ribaudo/eslint-scope-5-internals/package.json @@ -0,0 +1,14 @@ +{ + "name": "@nicolo-ribaudo/eslint-scope-5-internals", + "version": "5.1.1-v1", + "description": "Proxy package exposing internals of eslint-scope@5 for @babel/eslint-parser", + "main": "index.js", + "dependencies": { + "eslint-scope": "5.1.1" + }, + "license": "MIT", + "type": "commonjs", + "publishConfig": { + "access": "public" + } +} diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/LICENSE b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/LICENSE new file mode 100644 index 00000000000..65a99946017 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Denis Malinochkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/adapters/fs.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/adapters/fs.js new file mode 100644 index 00000000000..f0fe022023e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/adapters/fs.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0; +const fs = require("fs"); +exports.FILE_SYSTEM_ADAPTER = { + lstat: fs.lstat, + stat: fs.stat, + lstatSync: fs.lstatSync, + statSync: fs.statSync, + readdir: fs.readdir, + readdirSync: fs.readdirSync +}; +function createFileSystemAdapter(fsMethods) { + if (fsMethods === undefined) { + return exports.FILE_SYSTEM_ADAPTER; + } + return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods); +} +exports.createFileSystemAdapter = createFileSystemAdapter; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/constants.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/constants.js new file mode 100644 index 00000000000..7e3d4411f75 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/constants.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0; +const NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.'); +if (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) { + throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`); +} +const MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10); +const MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10); +const SUPPORTED_MAJOR_VERSION = 10; +const SUPPORTED_MINOR_VERSION = 10; +const IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION; +const IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION; +/** + * IS `true` for Node.js 10.10 and greater. + */ +exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/index.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/index.js new file mode 100644 index 00000000000..99c70d3d635 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/index.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Settings = exports.scandirSync = exports.scandir = void 0; +const async = require("./providers/async"); +const sync = require("./providers/sync"); +const settings_1 = require("./settings"); +exports.Settings = settings_1.default; +function scandir(path, optionsOrSettingsOrCallback, callback) { + if (typeof optionsOrSettingsOrCallback === 'function') { + async.read(path, getSettings(), optionsOrSettingsOrCallback); + return; + } + async.read(path, getSettings(optionsOrSettingsOrCallback), callback); +} +exports.scandir = scandir; +function scandirSync(path, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + return sync.read(path, settings); +} +exports.scandirSync = scandirSync; +function getSettings(settingsOrOptions = {}) { + if (settingsOrOptions instanceof settings_1.default) { + return settingsOrOptions; + } + return new settings_1.default(settingsOrOptions); +} diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/providers/async.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/providers/async.js new file mode 100644 index 00000000000..e8e2f0a9cba --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/providers/async.js @@ -0,0 +1,104 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.readdir = exports.readdirWithFileTypes = exports.read = void 0; +const fsStat = require("@nodelib/fs.stat"); +const rpl = require("run-parallel"); +const constants_1 = require("../constants"); +const utils = require("../utils"); +const common = require("./common"); +function read(directory, settings, callback) { + if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { + readdirWithFileTypes(directory, settings, callback); + return; + } + readdir(directory, settings, callback); +} +exports.read = read; +function readdirWithFileTypes(directory, settings, callback) { + settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => { + if (readdirError !== null) { + callFailureCallback(callback, readdirError); + return; + } + const entries = dirents.map((dirent) => ({ + dirent, + name: dirent.name, + path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator) + })); + if (!settings.followSymbolicLinks) { + callSuccessCallback(callback, entries); + return; + } + const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings)); + rpl(tasks, (rplError, rplEntries) => { + if (rplError !== null) { + callFailureCallback(callback, rplError); + return; + } + callSuccessCallback(callback, rplEntries); + }); + }); +} +exports.readdirWithFileTypes = readdirWithFileTypes; +function makeRplTaskEntry(entry, settings) { + return (done) => { + if (!entry.dirent.isSymbolicLink()) { + done(null, entry); + return; + } + settings.fs.stat(entry.path, (statError, stats) => { + if (statError !== null) { + if (settings.throwErrorOnBrokenSymbolicLink) { + done(statError); + return; + } + done(null, entry); + return; + } + entry.dirent = utils.fs.createDirentFromStats(entry.name, stats); + done(null, entry); + }); + }; +} +function readdir(directory, settings, callback) { + settings.fs.readdir(directory, (readdirError, names) => { + if (readdirError !== null) { + callFailureCallback(callback, readdirError); + return; + } + const tasks = names.map((name) => { + const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator); + return (done) => { + fsStat.stat(path, settings.fsStatSettings, (error, stats) => { + if (error !== null) { + done(error); + return; + } + const entry = { + name, + path, + dirent: utils.fs.createDirentFromStats(name, stats) + }; + if (settings.stats) { + entry.stats = stats; + } + done(null, entry); + }); + }; + }); + rpl(tasks, (rplError, entries) => { + if (rplError !== null) { + callFailureCallback(callback, rplError); + return; + } + callSuccessCallback(callback, entries); + }); + }); +} +exports.readdir = readdir; +function callFailureCallback(callback, error) { + callback(error); +} +function callSuccessCallback(callback, result) { + callback(null, result); +} diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/providers/common.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/providers/common.js new file mode 100644 index 00000000000..8724cb59afe --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/providers/common.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.joinPathSegments = void 0; +function joinPathSegments(a, b, separator) { + /** + * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`). + */ + if (a.endsWith(separator)) { + return a + b; + } + return a + separator + b; +} +exports.joinPathSegments = joinPathSegments; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/providers/sync.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/providers/sync.js new file mode 100644 index 00000000000..146db3434f4 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/providers/sync.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.readdir = exports.readdirWithFileTypes = exports.read = void 0; +const fsStat = require("@nodelib/fs.stat"); +const constants_1 = require("../constants"); +const utils = require("../utils"); +const common = require("./common"); +function read(directory, settings) { + if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { + return readdirWithFileTypes(directory, settings); + } + return readdir(directory, settings); +} +exports.read = read; +function readdirWithFileTypes(directory, settings) { + const dirents = settings.fs.readdirSync(directory, { withFileTypes: true }); + return dirents.map((dirent) => { + const entry = { + dirent, + name: dirent.name, + path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator) + }; + if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) { + try { + const stats = settings.fs.statSync(entry.path); + entry.dirent = utils.fs.createDirentFromStats(entry.name, stats); + } + catch (error) { + if (settings.throwErrorOnBrokenSymbolicLink) { + throw error; + } + } + } + return entry; + }); +} +exports.readdirWithFileTypes = readdirWithFileTypes; +function readdir(directory, settings) { + const names = settings.fs.readdirSync(directory); + return names.map((name) => { + const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator); + const stats = fsStat.statSync(entryPath, settings.fsStatSettings); + const entry = { + name, + path: entryPath, + dirent: utils.fs.createDirentFromStats(name, stats) + }; + if (settings.stats) { + entry.stats = stats; + } + return entry; + }); +} +exports.readdir = readdir; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/settings.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/settings.js new file mode 100644 index 00000000000..15a3e8cde77 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/settings.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const path = require("path"); +const fsStat = require("@nodelib/fs.stat"); +const fs = require("./adapters/fs"); +class Settings { + constructor(_options = {}) { + this._options = _options; + this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false); + this.fs = fs.createFileSystemAdapter(this._options.fs); + this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep); + this.stats = this._getValue(this._options.stats, false); + this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true); + this.fsStatSettings = new fsStat.Settings({ + followSymbolicLink: this.followSymbolicLinks, + fs: this.fs, + throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink + }); + } + _getValue(option, value) { + return option !== null && option !== void 0 ? option : value; + } +} +exports.default = Settings; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/types/index.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/types/index.js new file mode 100644 index 00000000000..c8ad2e549bd --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/types/index.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/utils/fs.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/utils/fs.js new file mode 100644 index 00000000000..ace7c74d63f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/utils/fs.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createDirentFromStats = void 0; +class DirentFromStats { + constructor(name, stats) { + this.name = name; + this.isBlockDevice = stats.isBlockDevice.bind(stats); + this.isCharacterDevice = stats.isCharacterDevice.bind(stats); + this.isDirectory = stats.isDirectory.bind(stats); + this.isFIFO = stats.isFIFO.bind(stats); + this.isFile = stats.isFile.bind(stats); + this.isSocket = stats.isSocket.bind(stats); + this.isSymbolicLink = stats.isSymbolicLink.bind(stats); + } +} +function createDirentFromStats(name, stats) { + return new DirentFromStats(name, stats); +} +exports.createDirentFromStats = createDirentFromStats; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/utils/index.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/utils/index.js new file mode 100644 index 00000000000..f5de129f47b --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/out/utils/index.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fs = void 0; +const fs = require("./fs"); +exports.fs = fs; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/package.json b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/package.json new file mode 100644 index 00000000000..d3a89241b3c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.scandir/package.json @@ -0,0 +1,44 @@ +{ + "name": "@nodelib/fs.scandir", + "version": "2.1.5", + "description": "List files and directories inside the specified directory", + "license": "MIT", + "repository": "https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir", + "keywords": [ + "NodeLib", + "fs", + "FileSystem", + "file system", + "scandir", + "readdir", + "dirent" + ], + "engines": { + "node": ">= 8" + }, + "files": [ + "out/**", + "!out/**/*.map", + "!out/**/*.spec.*" + ], + "main": "out/index.js", + "typings": "out/index.d.ts", + "scripts": { + "clean": "rimraf {tsconfig.tsbuildinfo,out}", + "lint": "eslint \"src/**/*.ts\" --cache", + "compile": "tsc -b .", + "compile:watch": "tsc -p . --watch --sourceMap", + "test": "mocha \"out/**/*.spec.js\" -s 0", + "build": "npm run clean && npm run compile && npm run lint && npm test", + "watch": "npm run clean && npm run compile:watch" + }, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "devDependencies": { + "@nodelib/fs.macchiato": "1.0.4", + "@types/run-parallel": "^1.1.0" + }, + "gitHead": "d6a7960d5281d3dd5f8e2efba49bb552d090f562" +} diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/LICENSE b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/LICENSE new file mode 100644 index 00000000000..65a99946017 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Denis Malinochkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/adapters/fs.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/adapters/fs.js new file mode 100644 index 00000000000..8dc08c8ca1f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/adapters/fs.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0; +const fs = require("fs"); +exports.FILE_SYSTEM_ADAPTER = { + lstat: fs.lstat, + stat: fs.stat, + lstatSync: fs.lstatSync, + statSync: fs.statSync +}; +function createFileSystemAdapter(fsMethods) { + if (fsMethods === undefined) { + return exports.FILE_SYSTEM_ADAPTER; + } + return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods); +} +exports.createFileSystemAdapter = createFileSystemAdapter; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/index.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/index.js new file mode 100644 index 00000000000..b23f7510d05 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/index.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.statSync = exports.stat = exports.Settings = void 0; +const async = require("./providers/async"); +const sync = require("./providers/sync"); +const settings_1 = require("./settings"); +exports.Settings = settings_1.default; +function stat(path, optionsOrSettingsOrCallback, callback) { + if (typeof optionsOrSettingsOrCallback === 'function') { + async.read(path, getSettings(), optionsOrSettingsOrCallback); + return; + } + async.read(path, getSettings(optionsOrSettingsOrCallback), callback); +} +exports.stat = stat; +function statSync(path, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + return sync.read(path, settings); +} +exports.statSync = statSync; +function getSettings(settingsOrOptions = {}) { + if (settingsOrOptions instanceof settings_1.default) { + return settingsOrOptions; + } + return new settings_1.default(settingsOrOptions); +} diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/providers/async.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/providers/async.js new file mode 100644 index 00000000000..983ff0e6cb7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/providers/async.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.read = void 0; +function read(path, settings, callback) { + settings.fs.lstat(path, (lstatError, lstat) => { + if (lstatError !== null) { + callFailureCallback(callback, lstatError); + return; + } + if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) { + callSuccessCallback(callback, lstat); + return; + } + settings.fs.stat(path, (statError, stat) => { + if (statError !== null) { + if (settings.throwErrorOnBrokenSymbolicLink) { + callFailureCallback(callback, statError); + return; + } + callSuccessCallback(callback, lstat); + return; + } + if (settings.markSymbolicLink) { + stat.isSymbolicLink = () => true; + } + callSuccessCallback(callback, stat); + }); + }); +} +exports.read = read; +function callFailureCallback(callback, error) { + callback(error); +} +function callSuccessCallback(callback, result) { + callback(null, result); +} diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/providers/sync.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/providers/sync.js new file mode 100644 index 00000000000..1521c3616ea --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/providers/sync.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.read = void 0; +function read(path, settings) { + const lstat = settings.fs.lstatSync(path); + if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) { + return lstat; + } + try { + const stat = settings.fs.statSync(path); + if (settings.markSymbolicLink) { + stat.isSymbolicLink = () => true; + } + return stat; + } + catch (error) { + if (!settings.throwErrorOnBrokenSymbolicLink) { + return lstat; + } + throw error; + } +} +exports.read = read; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/settings.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/settings.js new file mode 100644 index 00000000000..111ec09ca64 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/settings.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("./adapters/fs"); +class Settings { + constructor(_options = {}) { + this._options = _options; + this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true); + this.fs = fs.createFileSystemAdapter(this._options.fs); + this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false); + this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true); + } + _getValue(option, value) { + return option !== null && option !== void 0 ? option : value; + } +} +exports.default = Settings; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/types/index.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/types/index.js new file mode 100644 index 00000000000..c8ad2e549bd --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/out/types/index.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/package.json b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/package.json new file mode 100644 index 00000000000..f2540c2894e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.stat/package.json @@ -0,0 +1,37 @@ +{ + "name": "@nodelib/fs.stat", + "version": "2.0.5", + "description": "Get the status of a file with some features", + "license": "MIT", + "repository": "https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat", + "keywords": [ + "NodeLib", + "fs", + "FileSystem", + "file system", + "stat" + ], + "engines": { + "node": ">= 8" + }, + "files": [ + "out/**", + "!out/**/*.map", + "!out/**/*.spec.*" + ], + "main": "out/index.js", + "typings": "out/index.d.ts", + "scripts": { + "clean": "rimraf {tsconfig.tsbuildinfo,out}", + "lint": "eslint \"src/**/*.ts\" --cache", + "compile": "tsc -b .", + "compile:watch": "tsc -p . --watch --sourceMap", + "test": "mocha \"out/**/*.spec.js\" -s 0", + "build": "npm run clean && npm run compile && npm run lint && npm test", + "watch": "npm run clean && npm run compile:watch" + }, + "devDependencies": { + "@nodelib/fs.macchiato": "1.0.4" + }, + "gitHead": "d6a7960d5281d3dd5f8e2efba49bb552d090f562" +} diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/LICENSE b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/LICENSE new file mode 100644 index 00000000000..65a99946017 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Denis Malinochkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/index.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/index.js new file mode 100644 index 00000000000..15207874afa --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/index.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0; +const async_1 = require("./providers/async"); +const stream_1 = require("./providers/stream"); +const sync_1 = require("./providers/sync"); +const settings_1 = require("./settings"); +exports.Settings = settings_1.default; +function walk(directory, optionsOrSettingsOrCallback, callback) { + if (typeof optionsOrSettingsOrCallback === 'function') { + new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback); + return; + } + new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback); +} +exports.walk = walk; +function walkSync(directory, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + const provider = new sync_1.default(directory, settings); + return provider.read(); +} +exports.walkSync = walkSync; +function walkStream(directory, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + const provider = new stream_1.default(directory, settings); + return provider.read(); +} +exports.walkStream = walkStream; +function getSettings(settingsOrOptions = {}) { + if (settingsOrOptions instanceof settings_1.default) { + return settingsOrOptions; + } + return new settings_1.default(settingsOrOptions); +} diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/async.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/async.js new file mode 100644 index 00000000000..51d3be51a85 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/async.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const async_1 = require("../readers/async"); +class AsyncProvider { + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._reader = new async_1.default(this._root, this._settings); + this._storage = []; + } + read(callback) { + this._reader.onError((error) => { + callFailureCallback(callback, error); + }); + this._reader.onEntry((entry) => { + this._storage.push(entry); + }); + this._reader.onEnd(() => { + callSuccessCallback(callback, this._storage); + }); + this._reader.read(); + } +} +exports.default = AsyncProvider; +function callFailureCallback(callback, error) { + callback(error); +} +function callSuccessCallback(callback, entries) { + callback(null, entries); +} diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/index.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/index.js new file mode 100644 index 00000000000..4c2529ce8a3 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/index.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SyncProvider = exports.StreamProvider = exports.AsyncProvider = void 0; +const async_1 = require("./async"); +exports.AsyncProvider = async_1.default; +const stream_1 = require("./stream"); +exports.StreamProvider = stream_1.default; +const sync_1 = require("./sync"); +exports.SyncProvider = sync_1.default; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/stream.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/stream.js new file mode 100644 index 00000000000..51298b0f58f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/stream.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const stream_1 = require("stream"); +const async_1 = require("../readers/async"); +class StreamProvider { + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._reader = new async_1.default(this._root, this._settings); + this._stream = new stream_1.Readable({ + objectMode: true, + read: () => { }, + destroy: () => { + if (!this._reader.isDestroyed) { + this._reader.destroy(); + } + } + }); + } + read() { + this._reader.onError((error) => { + this._stream.emit('error', error); + }); + this._reader.onEntry((entry) => { + this._stream.push(entry); + }); + this._reader.onEnd(() => { + this._stream.push(null); + }); + this._reader.read(); + return this._stream; + } +} +exports.default = StreamProvider; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/sync.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/sync.js new file mode 100644 index 00000000000..faab6ca2ad4 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/providers/sync.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const sync_1 = require("../readers/sync"); +class SyncProvider { + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._reader = new sync_1.default(this._root, this._settings); + } + read() { + return this._reader.read(); + } +} +exports.default = SyncProvider; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/async.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/async.js new file mode 100644 index 00000000000..ebe8dd57358 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/async.js @@ -0,0 +1,97 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const events_1 = require("events"); +const fsScandir = require("@nodelib/fs.scandir"); +const fastq = require("fastq"); +const common = require("./common"); +const reader_1 = require("./reader"); +class AsyncReader extends reader_1.default { + constructor(_root, _settings) { + super(_root, _settings); + this._settings = _settings; + this._scandir = fsScandir.scandir; + this._emitter = new events_1.EventEmitter(); + this._queue = fastq(this._worker.bind(this), this._settings.concurrency); + this._isFatalError = false; + this._isDestroyed = false; + this._queue.drain = () => { + if (!this._isFatalError) { + this._emitter.emit('end'); + } + }; + } + read() { + this._isFatalError = false; + this._isDestroyed = false; + setImmediate(() => { + this._pushToQueue(this._root, this._settings.basePath); + }); + return this._emitter; + } + get isDestroyed() { + return this._isDestroyed; + } + destroy() { + if (this._isDestroyed) { + throw new Error('The reader is already destroyed'); + } + this._isDestroyed = true; + this._queue.killAndDrain(); + } + onEntry(callback) { + this._emitter.on('entry', callback); + } + onError(callback) { + this._emitter.once('error', callback); + } + onEnd(callback) { + this._emitter.once('end', callback); + } + _pushToQueue(directory, base) { + const queueItem = { directory, base }; + this._queue.push(queueItem, (error) => { + if (error !== null) { + this._handleError(error); + } + }); + } + _worker(item, done) { + this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => { + if (error !== null) { + done(error, undefined); + return; + } + for (const entry of entries) { + this._handleEntry(entry, item.base); + } + done(null, undefined); + }); + } + _handleError(error) { + if (this._isDestroyed || !common.isFatalError(this._settings, error)) { + return; + } + this._isFatalError = true; + this._isDestroyed = true; + this._emitter.emit('error', error); + } + _handleEntry(entry, base) { + if (this._isDestroyed || this._isFatalError) { + return; + } + const fullpath = entry.path; + if (base !== undefined) { + entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator); + } + if (common.isAppliedFilter(this._settings.entryFilter, entry)) { + this._emitEntry(entry); + } + if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) { + this._pushToQueue(fullpath, base === undefined ? undefined : entry.path); + } + } + _emitEntry(entry) { + this._emitter.emit('entry', entry); + } +} +exports.default = AsyncReader; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/common.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/common.js new file mode 100644 index 00000000000..a93572f48a7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/common.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0; +function isFatalError(settings, error) { + if (settings.errorFilter === null) { + return true; + } + return !settings.errorFilter(error); +} +exports.isFatalError = isFatalError; +function isAppliedFilter(filter, value) { + return filter === null || filter(value); +} +exports.isAppliedFilter = isAppliedFilter; +function replacePathSegmentSeparator(filepath, separator) { + return filepath.split(/[/\\]/).join(separator); +} +exports.replacePathSegmentSeparator = replacePathSegmentSeparator; +function joinPathSegments(a, b, separator) { + if (a === '') { + return b; + } + /** + * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`). + */ + if (a.endsWith(separator)) { + return a + b; + } + return a + separator + b; +} +exports.joinPathSegments = joinPathSegments; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/reader.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/reader.js new file mode 100644 index 00000000000..782f07cbfab --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/reader.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const common = require("./common"); +class Reader { + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator); + } +} +exports.default = Reader; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/sync.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/sync.js new file mode 100644 index 00000000000..9a8d5a6f1e1 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/readers/sync.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fsScandir = require("@nodelib/fs.scandir"); +const common = require("./common"); +const reader_1 = require("./reader"); +class SyncReader extends reader_1.default { + constructor() { + super(...arguments); + this._scandir = fsScandir.scandirSync; + this._storage = []; + this._queue = new Set(); + } + read() { + this._pushToQueue(this._root, this._settings.basePath); + this._handleQueue(); + return this._storage; + } + _pushToQueue(directory, base) { + this._queue.add({ directory, base }); + } + _handleQueue() { + for (const item of this._queue.values()) { + this._handleDirectory(item.directory, item.base); + } + } + _handleDirectory(directory, base) { + try { + const entries = this._scandir(directory, this._settings.fsScandirSettings); + for (const entry of entries) { + this._handleEntry(entry, base); + } + } + catch (error) { + this._handleError(error); + } + } + _handleError(error) { + if (!common.isFatalError(this._settings, error)) { + return; + } + throw error; + } + _handleEntry(entry, base) { + const fullpath = entry.path; + if (base !== undefined) { + entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator); + } + if (common.isAppliedFilter(this._settings.entryFilter, entry)) { + this._pushToStorage(entry); + } + if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) { + this._pushToQueue(fullpath, base === undefined ? undefined : entry.path); + } + } + _pushToStorage(entry) { + this._storage.push(entry); + } +} +exports.default = SyncReader; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/settings.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/settings.js new file mode 100644 index 00000000000..d7a85c81eee --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/settings.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const path = require("path"); +const fsScandir = require("@nodelib/fs.scandir"); +class Settings { + constructor(_options = {}) { + this._options = _options; + this.basePath = this._getValue(this._options.basePath, undefined); + this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY); + this.deepFilter = this._getValue(this._options.deepFilter, null); + this.entryFilter = this._getValue(this._options.entryFilter, null); + this.errorFilter = this._getValue(this._options.errorFilter, null); + this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep); + this.fsScandirSettings = new fsScandir.Settings({ + followSymbolicLinks: this._options.followSymbolicLinks, + fs: this._options.fs, + pathSegmentSeparator: this._options.pathSegmentSeparator, + stats: this._options.stats, + throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink + }); + } + _getValue(option, value) { + return option !== null && option !== void 0 ? option : value; + } +} +exports.default = Settings; diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/types/index.js b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/types/index.js new file mode 100644 index 00000000000..c8ad2e549bd --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/out/types/index.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/package.json b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/package.json new file mode 100644 index 00000000000..86bfce48b59 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@nodelib/fs.walk/package.json @@ -0,0 +1,44 @@ +{ + "name": "@nodelib/fs.walk", + "version": "1.2.8", + "description": "A library for efficiently walking a directory recursively", + "license": "MIT", + "repository": "https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk", + "keywords": [ + "NodeLib", + "fs", + "FileSystem", + "file system", + "walk", + "scanner", + "crawler" + ], + "engines": { + "node": ">= 8" + }, + "files": [ + "out/**", + "!out/**/*.map", + "!out/**/*.spec.*", + "!out/**/tests/**" + ], + "main": "out/index.js", + "typings": "out/index.d.ts", + "scripts": { + "clean": "rimraf {tsconfig.tsbuildinfo,out}", + "lint": "eslint \"src/**/*.ts\" --cache", + "compile": "tsc -b .", + "compile:watch": "tsc -p . --watch --sourceMap", + "test": "mocha \"out/**/*.spec.js\" -s 0", + "build": "npm run clean && npm run compile && npm run lint && npm test", + "watch": "npm run clean && npm run compile:watch" + }, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "devDependencies": { + "@nodelib/fs.macchiato": "1.0.4" + }, + "gitHead": "1e5bad48565da2b06b8600e744324ea240bf49d8" +} diff --git a/tools/node_modules/eslint/node_modules/acorn/LICENSE b/tools/node_modules/eslint/node_modules/acorn/LICENSE index d6be6db2cff..9d71cc63a35 100644 --- a/tools/node_modules/eslint/node_modules/acorn/LICENSE +++ b/tools/node_modules/eslint/node_modules/acorn/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2012-2020 by various contributors (see AUTHORS) +Copyright (C) 2012-2022 by various contributors (see AUTHORS) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tools/node_modules/eslint/node_modules/acorn/bin/acorn b/tools/node_modules/eslint/node_modules/acorn/bin/acorn index cf7df46890f..3ef3c124b08 100755 --- a/tools/node_modules/eslint/node_modules/acorn/bin/acorn +++ b/tools/node_modules/eslint/node_modules/acorn/bin/acorn @@ -1,4 +1,4 @@ #!/usr/bin/env node -'use strict'; +"use strict" -require('../dist/bin.js'); +require("../dist/bin.js") diff --git a/tools/node_modules/eslint/node_modules/acorn/dist/acorn.js b/tools/node_modules/eslint/node_modules/acorn/dist/acorn.js index 2d279e9fa84..8e8b225b0b3 100644 --- a/tools/node_modules/eslint/node_modules/acorn/dist/acorn.js +++ b/tools/node_modules/eslint/node_modules/acorn/dist/acorn.js @@ -4,6 +4,20 @@ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.acorn = {})); })(this, (function (exports) { 'use strict'; + // This file was generated. Do not modify manually! + var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 357, 0, 62, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; + + // This file was generated. Do not modify manually! + var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1070, 4050, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 46, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 482, 44, 11, 6, 17, 0, 322, 29, 19, 43, 1269, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4152, 8, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938]; + + // This file was generated. Do not modify manually! + var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; + + // This file was generated. Do not modify manually! + var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; + + // These are a run-length and offset encoded representation of the + // Reserved word lists for various dialects of the language var reservedWords = { @@ -28,31 +42,9 @@ // ## Character categories - // Big ugly regular expressions that match characters in the - // whitespace, identifier, and identifier-start categories. These - // are only applied when a character is found to actually have a - // code point above 128. - // Generated by `bin/generate-identifier-regex.js`. - var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; - var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; - var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); - nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; - - // These are a run-length and offset encoded representation of the - // >0xffff code points that are a valid part of identifiers. The - // offset starts at 0x10000, and each pair of numbers represents an - // offset to the next range, and then a size of the range. They were - // generated by bin/generate-identifier-regex.js - - // eslint-disable-next-line comma-spacing - var astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2637,96,16,1070,4050,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,46,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,482,44,11,6,17,0,322,29,19,43,1269,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4152,8,221,3,5761,15,7472,3104,541,1507,4938]; - - // eslint-disable-next-line comma-spacing - var astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,357,0,62,13,1495,6,110,6,6,9,4759,9,787719,239]; - // This has a complexity linear to the value of the code. The // assumption is that looking up astral identifier characters is // rare. @@ -287,6 +279,13 @@ return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$") } + function codePointToString(code) { + // UTF-16 Decoding + if (code <= 0xFFFF) { return String.fromCharCode(code) } + code -= 0x10000; + return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00) + } + var loneSurrogate = /(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/; // These are used when `options.locations` is on, for the @@ -328,10 +327,10 @@ var defaultOptions = { // `ecmaVersion` indicates the ECMAScript version to parse. Must be // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10 - // (2019), 11 (2020), 12 (2021), 13 (2022), or `"latest"` (the - // latest version the library supports). This influences support - // for strict mode, the set of reserved words, and support for - // new syntax features. + // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `"latest"` + // (the latest version the library supports). This influences + // support for strict mode, the set of reserved words, and support + // for new syntax features. ecmaVersion: null, // `sourceType` indicates the mode the code should be parsed in. // Can be either `"script"` or `"module"`. This influences global @@ -365,8 +364,9 @@ // When enabled, super identifiers are not constrained to // appearing in methods and do not raise an error when they appear elsewhere. allowSuperOutsideMethod: null, - // When enabled, hashbang directive in the beginning of file - // is allowed and treated as a line comment. + // When enabled, hashbang directive in the beginning of file is + // allowed and treated as a line comment. Enabled by default when + // `ecmaVersion` >= 2023. allowHashBang: false, // When `locations` is on, `loc` properties holding objects with // `start` and `end` properties in `{line, column}` form (with @@ -441,6 +441,9 @@ if (options.allowReserved == null) { options.allowReserved = options.ecmaVersion < 5; } + if (opts.allowHashBang == null) + { options.allowHashBang = options.ecmaVersion >= 14; } + if (isArray(options.onToken)) { var tokens = options.onToken; options.onToken = function (token) { return tokens.push(token); }; @@ -654,6 +657,7 @@ var literal = /^(?:'((?:\\.|[^'\\])*?)'|"((?:\\.|[^"\\])*?)")/; pp$9.strictDirective = function(start) { + if (this.options.ecmaVersion < 5) { return false } for (;;) { // Try to find string literal. skipWhiteSpace.lastIndex = start; @@ -756,21 +760,21 @@ this.raise(pos != null ? pos : this.start, "Unexpected token"); }; - function DestructuringErrors() { + var DestructuringErrors = function DestructuringErrors() { this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = this.doubleProto = -1; - } + }; pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) { if (!refDestructuringErrors) { return } if (refDestructuringErrors.trailingComma > -1) { this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); } var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind; - if (parens > -1) { this.raiseRecoverable(parens, "Parenthesized pattern"); } + if (parens > -1) { this.raiseRecoverable(parens, isAssign ? "Assigning to rvalue" : "Parenthesized pattern"); } }; pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) { @@ -1644,7 +1648,7 @@ if (this.options.ecmaVersion >= 11) { if (this.eatContextual("as")) { node.exported = this.parseModuleExportName(); - this.checkExport(exports, node.exported.name, this.lastTokStart); + this.checkExport(exports, node.exported, this.lastTokStart); } else { node.exported = null; } @@ -1678,7 +1682,7 @@ if (node.declaration.type === "VariableDeclaration") { this.checkVariableExport(exports, node.declaration.declarations); } else - { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); } + { this.checkExport(exports, node.declaration.id, node.declaration.id.start); } node.specifiers = []; node.source = null; } else { // export { x, y as z } [from '...'] @@ -1710,6 +1714,8 @@ pp$8.checkExport = function(exports, name, pos) { if (!exports) { return } + if (typeof name !== "string") + { name = name.type === "Identifier" ? name.name : name.value; } if (hasOwn(exports, name)) { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); } exports[name] = true; @@ -1718,7 +1724,7 @@ pp$8.checkPatternExport = function(exports, pat) { var type = pat.type; if (type === "Identifier") - { this.checkExport(exports, pat.name, pat.start); } + { this.checkExport(exports, pat, pat.start); } else if (type === "ObjectPattern") { for (var i = 0, list = pat.properties; i < list.length; i += 1) { @@ -1778,7 +1784,7 @@ node.exported = this.eatContextual("as") ? this.parseModuleExportName() : node.local; this.checkExport( exports, - node.exported[node.exported.type === "Identifier" ? "name" : "value"], + node.exported, node.exported.start ); nodes.push(this.finishNode(node, "ExportSpecifier")); @@ -1864,6 +1870,7 @@ }; pp$8.isDirectiveCandidate = function(statement) { return ( + this.options.ecmaVersion >= 5 && statement.type === "ExpressionStatement" && statement.expression.type === "Literal" && typeof statement.expression.value === "string" && @@ -2274,7 +2281,8 @@ { this.exprAllowed = type.beforeExpr; } }; - // Used to handle egde case when token context could not be inferred correctly in tokenize phase + // Used to handle egde cases when token context could not be inferred correctly during tokenization phase + pp$6.overrideContext = function(tokenCtx) { if (this.curContext() !== tokenCtx) { this.context[this.context.length - 1] = tokenCtx; @@ -3090,15 +3098,6 @@ } return this.finishNode(prop, "RestElement") } - // To disallow parenthesized identifier via `this.toAssignable()`. - if (this.type === types$1.parenL && refDestructuringErrors) { - if (refDestructuringErrors.parenthesizedAssign < 0) { - refDestructuringErrors.parenthesizedAssign = this.start; - } - if (refDestructuringErrors.parenthesizedBind < 0) { - refDestructuringErrors.parenthesizedBind = this.start; - } - } // Parse argument. prop.argument = this.parseMaybeAssign(false, refDestructuringErrors); // To disallow trailing comma via `this.toAssignable()`. @@ -3768,12 +3767,6 @@ return false }; - function codePointToString$1(ch) { - if (ch <= 0xFFFF) { return String.fromCharCode(ch) } - ch -= 0x10000; - return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00) - } - /** * Validate the flags part of a given RegExpLiteral. * @@ -4138,9 +4131,9 @@ pp$1.regexp_eatRegExpIdentifierName = function(state) { state.lastStringValue = ""; if (this.regexp_eatRegExpIdentifierStart(state)) { - state.lastStringValue += codePointToString$1(state.lastIntValue); + state.lastStringValue += codePointToString(state.lastIntValue); while (this.regexp_eatRegExpIdentifierPart(state)) { - state.lastStringValue += codePointToString$1(state.lastIntValue); + state.lastStringValue += codePointToString(state.lastIntValue); } return true } @@ -4492,7 +4485,7 @@ var ch = 0; state.lastStringValue = ""; while (isUnicodePropertyNameCharacter(ch = state.current())) { - state.lastStringValue += codePointToString$1(ch); + state.lastStringValue += codePointToString(ch); state.advance(); } return state.lastStringValue !== "" @@ -4507,7 +4500,7 @@ var ch = 0; state.lastStringValue = ""; while (isUnicodePropertyValueCharacter(ch = state.current())) { - state.lastStringValue += codePointToString$1(ch); + state.lastStringValue += codePointToString(ch); state.advance(); } return state.lastStringValue !== "" @@ -5290,13 +5283,6 @@ return code }; - function codePointToString(code) { - // UTF-16 Decoding - if (code <= 0xFFFF) { return String.fromCharCode(code) } - code -= 0x10000; - return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00) - } - pp.readString = function(quote) { var out = "", chunkStart = ++this.pos; for (;;) { @@ -5541,7 +5527,7 @@ // Acorn is a tiny, fast JavaScript parser written in JavaScript. - var version = "8.7.0"; + var version = "8.8.0"; Parser.acorn = { Parser: Parser, diff --git a/tools/node_modules/eslint/node_modules/acorn/dist/acorn.mjs b/tools/node_modules/eslint/node_modules/acorn/dist/acorn.mjs index e99e9b30e1b..5ae045a7f2a 100644 --- a/tools/node_modules/eslint/node_modules/acorn/dist/acorn.mjs +++ b/tools/node_modules/eslint/node_modules/acorn/dist/acorn.mjs @@ -1,3 +1,17 @@ +// This file was generated. Do not modify manually! +var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 357, 0, 62, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; + +// This file was generated. Do not modify manually! +var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1070, 4050, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 46, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 482, 44, 11, 6, 17, 0, 322, 29, 19, 43, 1269, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4152, 8, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938]; + +// This file was generated. Do not modify manually! +var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; + +// This file was generated. Do not modify manually! +var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; + +// These are a run-length and offset encoded representation of the + // Reserved word lists for various dialects of the language var reservedWords = { @@ -22,31 +36,9 @@ var keywordRelationalOperator = /^in(stanceof)?$/; // ## Character categories -// Big ugly regular expressions that match characters in the -// whitespace, identifier, and identifier-start categories. These -// are only applied when a character is found to actually have a -// code point above 128. -// Generated by `bin/generate-identifier-regex.js`. -var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; -var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; - var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); -nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; - -// These are a run-length and offset encoded representation of the -// >0xffff code points that are a valid part of identifiers. The -// offset starts at 0x10000, and each pair of numbers represents an -// offset to the next range, and then a size of the range. They were -// generated by bin/generate-identifier-regex.js - -// eslint-disable-next-line comma-spacing -var astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2637,96,16,1070,4050,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,46,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,482,44,11,6,17,0,322,29,19,43,1269,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4152,8,221,3,5761,15,7472,3104,541,1507,4938]; - -// eslint-disable-next-line comma-spacing -var astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,357,0,62,13,1495,6,110,6,6,9,4759,9,787719,239]; - // This has a complexity linear to the value of the code. The // assumption is that looking up astral identifier characters is // rare. @@ -281,6 +273,13 @@ function wordsRegexp(words) { return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$") } +function codePointToString(code) { + // UTF-16 Decoding + if (code <= 0xFFFF) { return String.fromCharCode(code) } + code -= 0x10000; + return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00) +} + var loneSurrogate = /(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/; // These are used when `options.locations` is on, for the @@ -322,10 +321,10 @@ function getLineInfo(input, offset) { var defaultOptions = { // `ecmaVersion` indicates the ECMAScript version to parse. Must be // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10 - // (2019), 11 (2020), 12 (2021), 13 (2022), or `"latest"` (the - // latest version the library supports). This influences support - // for strict mode, the set of reserved words, and support for - // new syntax features. + // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `"latest"` + // (the latest version the library supports). This influences + // support for strict mode, the set of reserved words, and support + // for new syntax features. ecmaVersion: null, // `sourceType` indicates the mode the code should be parsed in. // Can be either `"script"` or `"module"`. This influences global @@ -359,8 +358,9 @@ var defaultOptions = { // When enabled, super identifiers are not constrained to // appearing in methods and do not raise an error when they appear elsewhere. allowSuperOutsideMethod: null, - // When enabled, hashbang directive in the beginning of file - // is allowed and treated as a line comment. + // When enabled, hashbang directive in the beginning of file is + // allowed and treated as a line comment. Enabled by default when + // `ecmaVersion` >= 2023. allowHashBang: false, // When `locations` is on, `loc` properties holding objects with // `start` and `end` properties in `{line, column}` form (with @@ -435,6 +435,9 @@ function getOptions(opts) { if (options.allowReserved == null) { options.allowReserved = options.ecmaVersion < 5; } + if (opts.allowHashBang == null) + { options.allowHashBang = options.ecmaVersion >= 14; } + if (isArray(options.onToken)) { var tokens = options.onToken; options.onToken = function (token) { return tokens.push(token); }; @@ -648,6 +651,7 @@ var pp$9 = Parser.prototype; var literal = /^(?:'((?:\\.|[^'\\])*?)'|"((?:\\.|[^"\\])*?)")/; pp$9.strictDirective = function(start) { + if (this.options.ecmaVersion < 5) { return false } for (;;) { // Try to find string literal. skipWhiteSpace.lastIndex = start; @@ -750,21 +754,21 @@ pp$9.unexpected = function(pos) { this.raise(pos != null ? pos : this.start, "Unexpected token"); }; -function DestructuringErrors() { +var DestructuringErrors = function DestructuringErrors() { this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = this.doubleProto = -1; -} +}; pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) { if (!refDestructuringErrors) { return } if (refDestructuringErrors.trailingComma > -1) { this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); } var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind; - if (parens > -1) { this.raiseRecoverable(parens, "Parenthesized pattern"); } + if (parens > -1) { this.raiseRecoverable(parens, isAssign ? "Assigning to rvalue" : "Parenthesized pattern"); } }; pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) { @@ -1638,7 +1642,7 @@ pp$8.parseExport = function(node, exports) { if (this.options.ecmaVersion >= 11) { if (this.eatContextual("as")) { node.exported = this.parseModuleExportName(); - this.checkExport(exports, node.exported.name, this.lastTokStart); + this.checkExport(exports, node.exported, this.lastTokStart); } else { node.exported = null; } @@ -1672,7 +1676,7 @@ pp$8.parseExport = function(node, exports) { if (node.declaration.type === "VariableDeclaration") { this.checkVariableExport(exports, node.declaration.declarations); } else - { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); } + { this.checkExport(exports, node.declaration.id, node.declaration.id.start); } node.specifiers = []; node.source = null; } else { // export { x, y as z } [from '...'] @@ -1704,6 +1708,8 @@ pp$8.parseExport = function(node, exports) { pp$8.checkExport = function(exports, name, pos) { if (!exports) { return } + if (typeof name !== "string") + { name = name.type === "Identifier" ? name.name : name.value; } if (hasOwn(exports, name)) { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); } exports[name] = true; @@ -1712,7 +1718,7 @@ pp$8.checkExport = function(exports, name, pos) { pp$8.checkPatternExport = function(exports, pat) { var type = pat.type; if (type === "Identifier") - { this.checkExport(exports, pat.name, pat.start); } + { this.checkExport(exports, pat, pat.start); } else if (type === "ObjectPattern") { for (var i = 0, list = pat.properties; i < list.length; i += 1) { @@ -1772,7 +1778,7 @@ pp$8.parseExportSpecifiers = function(exports) { node.exported = this.eatContextual("as") ? this.parseModuleExportName() : node.local; this.checkExport( exports, - node.exported[node.exported.type === "Identifier" ? "name" : "value"], + node.exported, node.exported.start ); nodes.push(this.finishNode(node, "ExportSpecifier")); @@ -1858,6 +1864,7 @@ pp$8.adaptDirectivePrologue = function(statements) { }; pp$8.isDirectiveCandidate = function(statement) { return ( + this.options.ecmaVersion >= 5 && statement.type === "ExpressionStatement" && statement.expression.type === "Literal" && typeof statement.expression.value === "string" && @@ -2268,7 +2275,8 @@ pp$6.updateContext = function(prevType) { { this.exprAllowed = type.beforeExpr; } }; -// Used to handle egde case when token context could not be inferred correctly in tokenize phase +// Used to handle egde cases when token context could not be inferred correctly during tokenization phase + pp$6.overrideContext = function(tokenCtx) { if (this.curContext() !== tokenCtx) { this.context[this.context.length - 1] = tokenCtx; @@ -3084,15 +3092,6 @@ pp$5.parseProperty = function(isPattern, refDestructuringErrors) { } return this.finishNode(prop, "RestElement") } - // To disallow parenthesized identifier via `this.toAssignable()`. - if (this.type === types$1.parenL && refDestructuringErrors) { - if (refDestructuringErrors.parenthesizedAssign < 0) { - refDestructuringErrors.parenthesizedAssign = this.start; - } - if (refDestructuringErrors.parenthesizedBind < 0) { - refDestructuringErrors.parenthesizedBind = this.start; - } - } // Parse argument. prop.argument = this.parseMaybeAssign(false, refDestructuringErrors); // To disallow trailing comma via `this.toAssignable()`. @@ -3762,12 +3761,6 @@ RegExpValidationState.prototype.eat = function eat (ch, forceU) { return false }; -function codePointToString$1(ch) { - if (ch <= 0xFFFF) { return String.fromCharCode(ch) } - ch -= 0x10000; - return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00) -} - /** * Validate the flags part of a given RegExpLiteral. * @@ -4132,9 +4125,9 @@ pp$1.regexp_eatGroupName = function(state) { pp$1.regexp_eatRegExpIdentifierName = function(state) { state.lastStringValue = ""; if (this.regexp_eatRegExpIdentifierStart(state)) { - state.lastStringValue += codePointToString$1(state.lastIntValue); + state.lastStringValue += codePointToString(state.lastIntValue); while (this.regexp_eatRegExpIdentifierPart(state)) { - state.lastStringValue += codePointToString$1(state.lastIntValue); + state.lastStringValue += codePointToString(state.lastIntValue); } return true } @@ -4486,7 +4479,7 @@ pp$1.regexp_eatUnicodePropertyName = function(state) { var ch = 0; state.lastStringValue = ""; while (isUnicodePropertyNameCharacter(ch = state.current())) { - state.lastStringValue += codePointToString$1(ch); + state.lastStringValue += codePointToString(ch); state.advance(); } return state.lastStringValue !== "" @@ -4501,7 +4494,7 @@ pp$1.regexp_eatUnicodePropertyValue = function(state) { var ch = 0; state.lastStringValue = ""; while (isUnicodePropertyValueCharacter(ch = state.current())) { - state.lastStringValue += codePointToString$1(ch); + state.lastStringValue += codePointToString(ch); state.advance(); } return state.lastStringValue !== "" @@ -5284,13 +5277,6 @@ pp.readCodePoint = function() { return code }; -function codePointToString(code) { - // UTF-16 Decoding - if (code <= 0xFFFF) { return String.fromCharCode(code) } - code -= 0x10000; - return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00) -} - pp.readString = function(quote) { var out = "", chunkStart = ++this.pos; for (;;) { @@ -5535,7 +5521,7 @@ pp.readWord = function() { // Acorn is a tiny, fast JavaScript parser written in JavaScript. -var version = "8.7.0"; +var version = "8.8.0"; Parser.acorn = { Parser: Parser, diff --git a/tools/node_modules/eslint/node_modules/acorn/package.json b/tools/node_modules/eslint/node_modules/acorn/package.json index 8e2edc65cff..896061c412f 100644 --- a/tools/node_modules/eslint/node_modules/acorn/package.json +++ b/tools/node_modules/eslint/node_modules/acorn/package.json @@ -16,8 +16,10 @@ ], "./package.json": "./package.json" }, - "version": "8.7.0", - "engines": {"node": ">=0.4.0"}, + "version": "8.8.0", + "engines": { + "node": ">=0.4.0" + }, "maintainers": [ { "name": "Marijn Haverbeke", @@ -42,5 +44,7 @@ "scripts": { "prepare": "cd ..; npm run build:main" }, - "bin": {"acorn": "./bin/acorn"} + "bin": { + "acorn": "./bin/acorn" + } } diff --git a/tools/node_modules/eslint/node_modules/array-union/index.js b/tools/node_modules/eslint/node_modules/array-union/index.js new file mode 100644 index 00000000000..7f85d3d193a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/array-union/index.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = (...arguments_) => { + return [...new Set([].concat(...arguments_))]; +}; diff --git a/tools/node_modules/eslint/node_modules/array-union/license b/tools/node_modules/eslint/node_modules/array-union/license new file mode 100644 index 00000000000..e7af2f77107 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/array-union/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/array-union/package.json b/tools/node_modules/eslint/node_modules/array-union/package.json new file mode 100644 index 00000000000..5ad5afa7120 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/array-union/package.json @@ -0,0 +1,38 @@ +{ + "name": "array-union", + "version": "2.1.0", + "description": "Create an array of unique values, in order, from the input arrays", + "license": "MIT", + "repository": "sindresorhus/array-union", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "array", + "set", + "uniq", + "unique", + "duplicate", + "remove", + "union", + "combine", + "merge" + ], + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/array-union/readme.md b/tools/node_modules/eslint/node_modules/array-union/readme.md new file mode 100644 index 00000000000..2474a1aed16 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/array-union/readme.md @@ -0,0 +1,34 @@ +# array-union [![Build Status](https://travis-ci.org/sindresorhus/array-union.svg?branch=master)](https://travis-ci.org/sindresorhus/array-union) + +> Create an array of unique values, in order, from the input arrays + + +## Install + +``` +$ npm install array-union +``` + + +## Usage + +```js +const arrayUnion = require('array-union'); + +arrayUnion([1, 1, 2, 3], [2, 3]); +//=> [1, 2, 3] + +arrayUnion(['foo', 'foo', 'bar']); +//=> ['foo', 'bar'] + +arrayUnion(['🐱', '🦄', '🐻'], ['🦄', '🌈']); +//=> ['🐱', '🦄', '🐻', '🌈'] + +arrayUnion(['🐱', '🦄'], ['🐻', '🦄'], ['🐶', '🌈', '🌈']); +//=> ['🐱', '🦄', '🐻', '🐶', '🌈'] +``` + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/tools/node_modules/eslint/node_modules/braces/LICENSE b/tools/node_modules/eslint/node_modules/braces/LICENSE new file mode 100644 index 00000000000..d32ab4426a5 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/braces/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2018, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/braces/index.js b/tools/node_modules/eslint/node_modules/braces/index.js new file mode 100644 index 00000000000..0eee0f56704 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/braces/index.js @@ -0,0 +1,170 @@ +'use strict'; + +const stringify = require('./lib/stringify'); +const compile = require('./lib/compile'); +const expand = require('./lib/expand'); +const parse = require('./lib/parse'); + +/** + * Expand the given pattern or create a regex-compatible string. + * + * ```js + * const braces = require('braces'); + * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)'] + * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c'] + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ + +const braces = (input, options = {}) => { + let output = []; + + if (Array.isArray(input)) { + for (let pattern of input) { + let result = braces.create(pattern, options); + if (Array.isArray(result)) { + output.push(...result); + } else { + output.push(result); + } + } + } else { + output = [].concat(braces.create(input, options)); + } + + if (options && options.expand === true && options.nodupes === true) { + output = [...new Set(output)]; + } + return output; +}; + +/** + * Parse the given `str` with the given `options`. + * + * ```js + * // braces.parse(pattern, [, options]); + * const ast = braces.parse('a/{b,c}/d'); + * console.log(ast); + * ``` + * @param {String} pattern Brace pattern to parse + * @param {Object} options + * @return {Object} Returns an AST + * @api public + */ + +braces.parse = (input, options = {}) => parse(input, options); + +/** + * Creates a braces string from an AST, or an AST node. + * + * ```js + * const braces = require('braces'); + * let ast = braces.parse('foo/{a,b}/bar'); + * console.log(stringify(ast.nodes[2])); //=> '{a,b}' + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.stringify = (input, options = {}) => { + if (typeof input === 'string') { + return stringify(braces.parse(input, options), options); + } + return stringify(input, options); +}; + +/** + * Compiles a brace pattern into a regex-compatible, optimized string. + * This method is called by the main [braces](#braces) function by default. + * + * ```js + * const braces = require('braces'); + * console.log(braces.compile('a/{b,c}/d')); + * //=> ['a/(b|c)/d'] + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.compile = (input, options = {}) => { + if (typeof input === 'string') { + input = braces.parse(input, options); + } + return compile(input, options); +}; + +/** + * Expands a brace pattern into an array. This method is called by the + * main [braces](#braces) function when `options.expand` is true. Before + * using this method it's recommended that you read the [performance notes](#performance)) + * and advantages of using [.compile](#compile) instead. + * + * ```js + * const braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/b/d', 'a/c/d']; + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.expand = (input, options = {}) => { + if (typeof input === 'string') { + input = braces.parse(input, options); + } + + let result = expand(input, options); + + // filter out empty strings if specified + if (options.noempty === true) { + result = result.filter(Boolean); + } + + // filter out duplicates if specified + if (options.nodupes === true) { + result = [...new Set(result)]; + } + + return result; +}; + +/** + * Processes a brace pattern and returns either an expanded array + * (if `options.expand` is true), a highly optimized regex-compatible string. + * This method is called by the main [braces](#braces) function. + * + * ```js + * const braces = require('braces'); + * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) + * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.create = (input, options = {}) => { + if (input === '' || input.length < 3) { + return [input]; + } + + return options.expand !== true + ? braces.compile(input, options) + : braces.expand(input, options); +}; + +/** + * Expose "braces" + */ + +module.exports = braces; diff --git a/tools/node_modules/eslint/node_modules/braces/lib/compile.js b/tools/node_modules/eslint/node_modules/braces/lib/compile.js new file mode 100644 index 00000000000..3e984a4bbc2 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/braces/lib/compile.js @@ -0,0 +1,57 @@ +'use strict'; + +const fill = require('fill-range'); +const utils = require('./utils'); + +const compile = (ast, options = {}) => { + let walk = (node, parent = {}) => { + let invalidBlock = utils.isInvalidBrace(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let invalid = invalidBlock === true || invalidNode === true; + let prefix = options.escapeInvalid === true ? '\\' : ''; + let output = ''; + + if (node.isOpen === true) { + return prefix + node.value; + } + if (node.isClose === true) { + return prefix + node.value; + } + + if (node.type === 'open') { + return invalid ? (prefix + node.value) : '('; + } + + if (node.type === 'close') { + return invalid ? (prefix + node.value) : ')'; + } + + if (node.type === 'comma') { + return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|'); + } + + if (node.value) { + return node.value; + } + + if (node.nodes && node.ranges > 0) { + let args = utils.reduce(node.nodes); + let range = fill(...args, { ...options, wrap: false, toRegex: true }); + + if (range.length !== 0) { + return args.length > 1 && range.length > 1 ? `(${range})` : range; + } + } + + if (node.nodes) { + for (let child of node.nodes) { + output += walk(child, node); + } + } + return output; + }; + + return walk(ast); +}; + +module.exports = compile; diff --git a/tools/node_modules/eslint/node_modules/braces/lib/constants.js b/tools/node_modules/eslint/node_modules/braces/lib/constants.js new file mode 100644 index 00000000000..a9379436652 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/braces/lib/constants.js @@ -0,0 +1,57 @@ +'use strict'; + +module.exports = { + MAX_LENGTH: 1024 * 64, + + // Digits + CHAR_0: '0', /* 0 */ + CHAR_9: '9', /* 9 */ + + // Alphabet chars. + CHAR_UPPERCASE_A: 'A', /* A */ + CHAR_LOWERCASE_A: 'a', /* a */ + CHAR_UPPERCASE_Z: 'Z', /* Z */ + CHAR_LOWERCASE_Z: 'z', /* z */ + + CHAR_LEFT_PARENTHESES: '(', /* ( */ + CHAR_RIGHT_PARENTHESES: ')', /* ) */ + + CHAR_ASTERISK: '*', /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: '&', /* & */ + CHAR_AT: '@', /* @ */ + CHAR_BACKSLASH: '\\', /* \ */ + CHAR_BACKTICK: '`', /* ` */ + CHAR_CARRIAGE_RETURN: '\r', /* \r */ + CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */ + CHAR_COLON: ':', /* : */ + CHAR_COMMA: ',', /* , */ + CHAR_DOLLAR: '$', /* . */ + CHAR_DOT: '.', /* . */ + CHAR_DOUBLE_QUOTE: '"', /* " */ + CHAR_EQUAL: '=', /* = */ + CHAR_EXCLAMATION_MARK: '!', /* ! */ + CHAR_FORM_FEED: '\f', /* \f */ + CHAR_FORWARD_SLASH: '/', /* / */ + CHAR_HASH: '#', /* # */ + CHAR_HYPHEN_MINUS: '-', /* - */ + CHAR_LEFT_ANGLE_BRACKET: '<', /* < */ + CHAR_LEFT_CURLY_BRACE: '{', /* { */ + CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */ + CHAR_LINE_FEED: '\n', /* \n */ + CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */ + CHAR_PERCENT: '%', /* % */ + CHAR_PLUS: '+', /* + */ + CHAR_QUESTION_MARK: '?', /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */ + CHAR_RIGHT_CURLY_BRACE: '}', /* } */ + CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */ + CHAR_SEMICOLON: ';', /* ; */ + CHAR_SINGLE_QUOTE: '\'', /* ' */ + CHAR_SPACE: ' ', /* */ + CHAR_TAB: '\t', /* \t */ + CHAR_UNDERSCORE: '_', /* _ */ + CHAR_VERTICAL_LINE: '|', /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */ +}; diff --git a/tools/node_modules/eslint/node_modules/braces/lib/expand.js b/tools/node_modules/eslint/node_modules/braces/lib/expand.js new file mode 100644 index 00000000000..376c748af23 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/braces/lib/expand.js @@ -0,0 +1,113 @@ +'use strict'; + +const fill = require('fill-range'); +const stringify = require('./stringify'); +const utils = require('./utils'); + +const append = (queue = '', stash = '', enclose = false) => { + let result = []; + + queue = [].concat(queue); + stash = [].concat(stash); + + if (!stash.length) return queue; + if (!queue.length) { + return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash; + } + + for (let item of queue) { + if (Array.isArray(item)) { + for (let value of item) { + result.push(append(value, stash, enclose)); + } + } else { + for (let ele of stash) { + if (enclose === true && typeof ele === 'string') ele = `{${ele}}`; + result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele)); + } + } + } + return utils.flatten(result); +}; + +const expand = (ast, options = {}) => { + let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit; + + let walk = (node, parent = {}) => { + node.queue = []; + + let p = parent; + let q = parent.queue; + + while (p.type !== 'brace' && p.type !== 'root' && p.parent) { + p = p.parent; + q = p.queue; + } + + if (node.invalid || node.dollar) { + q.push(append(q.pop(), stringify(node, options))); + return; + } + + if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) { + q.push(append(q.pop(), ['{}'])); + return; + } + + if (node.nodes && node.ranges > 0) { + let args = utils.reduce(node.nodes); + + if (utils.exceedsLimit(...args, options.step, rangeLimit)) { + throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); + } + + let range = fill(...args, options); + if (range.length === 0) { + range = stringify(node, options); + } + + q.push(append(q.pop(), range)); + node.nodes = []; + return; + } + + let enclose = utils.encloseBrace(node); + let queue = node.queue; + let block = node; + + while (block.type !== 'brace' && block.type !== 'root' && block.parent) { + block = block.parent; + queue = block.queue; + } + + for (let i = 0; i < node.nodes.length; i++) { + let child = node.nodes[i]; + + if (child.type === 'comma' && node.type === 'brace') { + if (i === 1) queue.push(''); + queue.push(''); + continue; + } + + if (child.type === 'close') { + q.push(append(q.pop(), queue, enclose)); + continue; + } + + if (child.value && child.type !== 'open') { + queue.push(append(queue.pop(), child.value)); + continue; + } + + if (child.nodes) { + walk(child, node); + } + } + + return queue; + }; + + return utils.flatten(walk(ast)); +}; + +module.exports = expand; diff --git a/tools/node_modules/eslint/node_modules/braces/lib/parse.js b/tools/node_modules/eslint/node_modules/braces/lib/parse.js new file mode 100644 index 00000000000..145ea264806 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/braces/lib/parse.js @@ -0,0 +1,333 @@ +'use strict'; + +const stringify = require('./stringify'); + +/** + * Constants + */ + +const { + MAX_LENGTH, + CHAR_BACKSLASH, /* \ */ + CHAR_BACKTICK, /* ` */ + CHAR_COMMA, /* , */ + CHAR_DOT, /* . */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_LEFT_SQUARE_BRACKET, /* [ */ + CHAR_RIGHT_SQUARE_BRACKET, /* ] */ + CHAR_DOUBLE_QUOTE, /* " */ + CHAR_SINGLE_QUOTE, /* ' */ + CHAR_NO_BREAK_SPACE, + CHAR_ZERO_WIDTH_NOBREAK_SPACE +} = require('./constants'); + +/** + * parse + */ + +const parse = (input, options = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + let opts = options || {}; + let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + if (input.length > max) { + throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); + } + + let ast = { type: 'root', input, nodes: [] }; + let stack = [ast]; + let block = ast; + let prev = ast; + let brackets = 0; + let length = input.length; + let index = 0; + let depth = 0; + let value; + let memo = {}; + + /** + * Helpers + */ + + const advance = () => input[index++]; + const push = node => { + if (node.type === 'text' && prev.type === 'dot') { + prev.type = 'text'; + } + + if (prev && prev.type === 'text' && node.type === 'text') { + prev.value += node.value; + return; + } + + block.nodes.push(node); + node.parent = block; + node.prev = prev; + prev = node; + return node; + }; + + push({ type: 'bos' }); + + while (index < length) { + block = stack[stack.length - 1]; + value = advance(); + + /** + * Invalid chars + */ + + if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) { + continue; + } + + /** + * Escaped chars + */ + + if (value === CHAR_BACKSLASH) { + push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() }); + continue; + } + + /** + * Right square bracket (literal): ']' + */ + + if (value === CHAR_RIGHT_SQUARE_BRACKET) { + push({ type: 'text', value: '\\' + value }); + continue; + } + + /** + * Left square bracket: '[' + */ + + if (value === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + + let closed = true; + let next; + + while (index < length && (next = advance())) { + value += next; + + if (next === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + continue; + } + + if (next === CHAR_BACKSLASH) { + value += advance(); + continue; + } + + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + brackets--; + + if (brackets === 0) { + break; + } + } + } + + push({ type: 'text', value }); + continue; + } + + /** + * Parentheses + */ + + if (value === CHAR_LEFT_PARENTHESES) { + block = push({ type: 'paren', nodes: [] }); + stack.push(block); + push({ type: 'text', value }); + continue; + } + + if (value === CHAR_RIGHT_PARENTHESES) { + if (block.type !== 'paren') { + push({ type: 'text', value }); + continue; + } + block = stack.pop(); + push({ type: 'text', value }); + block = stack[stack.length - 1]; + continue; + } + + /** + * Quotes: '|"|` + */ + + if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) { + let open = value; + let next; + + if (options.keepQuotes !== true) { + value = ''; + } + + while (index < length && (next = advance())) { + if (next === CHAR_BACKSLASH) { + value += next + advance(); + continue; + } + + if (next === open) { + if (options.keepQuotes === true) value += next; + break; + } + + value += next; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Left curly brace: '{' + */ + + if (value === CHAR_LEFT_CURLY_BRACE) { + depth++; + + let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true; + let brace = { + type: 'brace', + open: true, + close: false, + dollar, + depth, + commas: 0, + ranges: 0, + nodes: [] + }; + + block = push(brace); + stack.push(block); + push({ type: 'open', value }); + continue; + } + + /** + * Right curly brace: '}' + */ + + if (value === CHAR_RIGHT_CURLY_BRACE) { + if (block.type !== 'brace') { + push({ type: 'text', value }); + continue; + } + + let type = 'close'; + block = stack.pop(); + block.close = true; + + push({ type, value }); + depth--; + + block = stack[stack.length - 1]; + continue; + } + + /** + * Comma: ',' + */ + + if (value === CHAR_COMMA && depth > 0) { + if (block.ranges > 0) { + block.ranges = 0; + let open = block.nodes.shift(); + block.nodes = [open, { type: 'text', value: stringify(block) }]; + } + + push({ type: 'comma', value }); + block.commas++; + continue; + } + + /** + * Dot: '.' + */ + + if (value === CHAR_DOT && depth > 0 && block.commas === 0) { + let siblings = block.nodes; + + if (depth === 0 || siblings.length === 0) { + push({ type: 'text', value }); + continue; + } + + if (prev.type === 'dot') { + block.range = []; + prev.value += value; + prev.type = 'range'; + + if (block.nodes.length !== 3 && block.nodes.length !== 5) { + block.invalid = true; + block.ranges = 0; + prev.type = 'text'; + continue; + } + + block.ranges++; + block.args = []; + continue; + } + + if (prev.type === 'range') { + siblings.pop(); + + let before = siblings[siblings.length - 1]; + before.value += prev.value + value; + prev = before; + block.ranges--; + continue; + } + + push({ type: 'dot', value }); + continue; + } + + /** + * Text + */ + + push({ type: 'text', value }); + } + + // Mark imbalanced braces and brackets as invalid + do { + block = stack.pop(); + + if (block.type !== 'root') { + block.nodes.forEach(node => { + if (!node.nodes) { + if (node.type === 'open') node.isOpen = true; + if (node.type === 'close') node.isClose = true; + if (!node.nodes) node.type = 'text'; + node.invalid = true; + } + }); + + // get the location of the block on parent.nodes (block's siblings) + let parent = stack[stack.length - 1]; + let index = parent.nodes.indexOf(block); + // replace the (invalid) block with it's nodes + parent.nodes.splice(index, 1, ...block.nodes); + } + } while (stack.length > 0); + + push({ type: 'eos' }); + return ast; +}; + +module.exports = parse; diff --git a/tools/node_modules/eslint/node_modules/braces/lib/stringify.js b/tools/node_modules/eslint/node_modules/braces/lib/stringify.js new file mode 100644 index 00000000000..414b7bcc6b3 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/braces/lib/stringify.js @@ -0,0 +1,32 @@ +'use strict'; + +const utils = require('./utils'); + +module.exports = (ast, options = {}) => { + let stringify = (node, parent = {}) => { + let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let output = ''; + + if (node.value) { + if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) { + return '\\' + node.value; + } + return node.value; + } + + if (node.value) { + return node.value; + } + + if (node.nodes) { + for (let child of node.nodes) { + output += stringify(child); + } + } + return output; + }; + + return stringify(ast); +}; + diff --git a/tools/node_modules/eslint/node_modules/braces/lib/utils.js b/tools/node_modules/eslint/node_modules/braces/lib/utils.js new file mode 100644 index 00000000000..e3551a67491 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/braces/lib/utils.js @@ -0,0 +1,112 @@ +'use strict'; + +exports.isInteger = num => { + if (typeof num === 'number') { + return Number.isInteger(num); + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isInteger(Number(num)); + } + return false; +}; + +/** + * Find a node of the given type + */ + +exports.find = (node, type) => node.nodes.find(node => node.type === type); + +/** + * Find a node of the given type + */ + +exports.exceedsLimit = (min, max, step = 1, limit) => { + if (limit === false) return false; + if (!exports.isInteger(min) || !exports.isInteger(max)) return false; + return ((Number(max) - Number(min)) / Number(step)) >= limit; +}; + +/** + * Escape the given node with '\\' before node.value + */ + +exports.escapeNode = (block, n = 0, type) => { + let node = block.nodes[n]; + if (!node) return; + + if ((type && node.type === type) || node.type === 'open' || node.type === 'close') { + if (node.escaped !== true) { + node.value = '\\' + node.value; + node.escaped = true; + } + } +}; + +/** + * Returns true if the given brace node should be enclosed in literal braces + */ + +exports.encloseBrace = node => { + if (node.type !== 'brace') return false; + if ((node.commas >> 0 + node.ranges >> 0) === 0) { + node.invalid = true; + return true; + } + return false; +}; + +/** + * Returns true if a brace node is invalid. + */ + +exports.isInvalidBrace = block => { + if (block.type !== 'brace') return false; + if (block.invalid === true || block.dollar) return true; + if ((block.commas >> 0 + block.ranges >> 0) === 0) { + block.invalid = true; + return true; + } + if (block.open !== true || block.close !== true) { + block.invalid = true; + return true; + } + return false; +}; + +/** + * Returns true if a node is an open or close node + */ + +exports.isOpenOrClose = node => { + if (node.type === 'open' || node.type === 'close') { + return true; + } + return node.open === true || node.close === true; +}; + +/** + * Reduce an array of text nodes. + */ + +exports.reduce = nodes => nodes.reduce((acc, node) => { + if (node.type === 'text') acc.push(node.value); + if (node.type === 'range') node.type = 'text'; + return acc; +}, []); + +/** + * Flatten an array + */ + +exports.flatten = (...args) => { + const result = []; + const flat = arr => { + for (let i = 0; i < arr.length; i++) { + let ele = arr[i]; + Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele); + } + return result; + }; + flat(args); + return result; +}; diff --git a/tools/node_modules/eslint/node_modules/braces/package.json b/tools/node_modules/eslint/node_modules/braces/package.json new file mode 100644 index 00000000000..3f52e346f61 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/braces/package.json @@ -0,0 +1,77 @@ +{ + "name": "braces", + "description": "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.", + "version": "3.0.2", + "homepage": "https://github.com/micromatch/braces", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Brian Woodward (https://twitter.com/doowb)", + "Elan Shanker (https://github.com/es128)", + "Eugene Sharygin (https://github.com/eush77)", + "hemanth.hm (http://h3manth.com)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)" + ], + "repository": "micromatch/braces", + "bugs": { + "url": "https://github.com/micromatch/braces/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "lib" + ], + "main": "index.js", + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "mocha", + "benchmark": "node benchmark" + }, + "dependencies": { + "fill-range": "^7.0.1" + }, + "devDependencies": { + "ansi-colors": "^3.2.4", + "bash-path": "^2.0.1", + "gulp-format-md": "^2.0.0", + "mocha": "^6.1.1" + }, + "keywords": [ + "alpha", + "alphabetical", + "bash", + "brace", + "braces", + "expand", + "expansion", + "filepath", + "fill", + "fs", + "glob", + "globbing", + "letter", + "match", + "matches", + "matching", + "number", + "numerical", + "path", + "range", + "ranges", + "sh" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "lint": { + "reflinks": true + }, + "plugins": [ + "gulp-format-md" + ] + } +} diff --git a/tools/node_modules/eslint/node_modules/browserslist/cli.js b/tools/node_modules/eslint/node_modules/browserslist/cli.js index e4a707656de..c54aa987928 100755 --- a/tools/node_modules/eslint/node_modules/browserslist/cli.js +++ b/tools/node_modules/eslint/node_modules/browserslist/cli.js @@ -1,9 +1,9 @@ #!/usr/bin/env node +var updateDb = require('update-browserslist-db') var fs = require('fs') var browserslist = require('./') -var updateDb = require('./update-db') var pkg = require('./package.json') var args = process.argv.slice(2) @@ -20,8 +20,7 @@ var USAGE = ' npx browserslist --env="environment name defined in config"\n' + ' npx browserslist --stats="path/to/browserlist/stats/file"\n' + ' npx browserslist --mobile-to-desktop\n' + - ' npx browserslist --ignore-unknown-versions\n' + - ' npx browserslist --update-db' + ' npx browserslist --ignore-unknown-versions\n' function isArg(arg) { return args.some(function (str) { @@ -93,7 +92,7 @@ if (isArg('--help') || isArg('-h')) { } catch (e) { if (e.name === 'BrowserslistError') { error(e.message) - } else /* c8 ignore start */ { + } /* c8 ignore start */ else { throw e } /* c8 ignore end */ } diff --git a/tools/node_modules/eslint/node_modules/browserslist/index.js b/tools/node_modules/eslint/node_modules/browserslist/index.js index 8c09141c696..739b9395b89 100644 --- a/tools/node_modules/eslint/node_modules/browserslist/index.js +++ b/tools/node_modules/eslint/node_modules/browserslist/index.js @@ -5,13 +5,13 @@ var path = require('path') var e2c = require('electron-to-chromium/versions') var BrowserslistError = require('./error') +var parse = require('./parse') var env = require('./node') // Will load browser.js in webpack var YEAR = 365.259641 * 24 * 60 * 60 * 1000 var ANDROID_EVERGREEN_FIRST = 37 -var QUERY_OR = 1 -var QUERY_AND = 2 +// Helpers function isVersionsMatch(versionA, versionB) { return (versionA + '.').indexOf(versionB + '.') === 0 @@ -71,8 +71,6 @@ function uniq(array) { return filtered } -// Helpers - function fillUsage(result, name, data) { for (var i in data) { result[name + ' ' + i] = data[i] @@ -229,7 +227,7 @@ function mapVersions(data, map) { data.versions = data.versions.map(function (i) { return map[i] || i }) - data.released = data.versions.map(function (i) { + data.released = data.released.map(function (i) { return map[i] || i }) var fixedDate = {} @@ -302,117 +300,62 @@ function filterAndroid(list, versions, context) { } } -/** - * Resolves queries into a browser list. - * @param {string|string[]} queries Queries to combine. - * Either an array of queries or a long string of queries. - * @param {object} [context] Optional arguments to - * the select function in `queries`. - * @returns {string[]} A list of browsers - */ function resolve(queries, context) { - if (Array.isArray(queries)) { - queries = flatten(queries.map(parse)) - } else { - queries = parse(queries) - } - - return queries.reduce(function (result, query, index) { - var selection = query.queryString - - var isExclude = selection.indexOf('not ') === 0 - if (isExclude) { - if (index === 0) { - throw new BrowserslistError( - 'Write any browsers query (for instance, `defaults`) ' + - 'before `' + - selection + - '`' - ) - } - selection = selection.slice(4) + return parse(QUERIES, queries).reduce(function (result, node, index) { + if (node.not && index === 0) { + throw new BrowserslistError( + 'Write any browsers query (for instance, `defaults`) ' + + 'before `' + + node.query + + '`' + ) } + var type = QUERIES[node.type] + var array = type.select.call(browserslist, context, node).map(function (j) { + var parts = j.split(' ') + if (parts[1] === '0') { + return parts[0] + ' ' + byName(parts[0], context).versions[0] + } else { + return j + } + }) - for (var i = 0; i < QUERIES.length; i++) { - var type = QUERIES[i] - var match = selection.match(type.regexp) - if (match) { - var args = [context].concat(match.slice(1)) - var array = type.select.apply(browserslist, args).map(function (j) { - var parts = j.split(' ') - if (parts[1] === '0') { - return parts[0] + ' ' + byName(parts[0], context).versions[0] - } else { - return j - } + if (node.compose === 'and') { + if (node.not) { + return result.filter(function (j) { + return array.indexOf(j) === -1 + }) + } else { + return result.filter(function (j) { + return array.indexOf(j) !== -1 + }) + } + } else { + if (node.not) { + var filter = {} + array.forEach(function (j) { + filter[j] = true + }) + return result.filter(function (j) { + return !filter[j] }) - - switch (query.type) { - case QUERY_AND: - if (isExclude) { - return result.filter(function (j) { - return array.indexOf(j) === -1 - }) - } else { - return result.filter(function (j) { - return array.indexOf(j) !== -1 - }) - } - case QUERY_OR: - default: - if (isExclude) { - var filter = {} - array.forEach(function (j) { - filter[j] = true - }) - return result.filter(function (j) { - return !filter[j] - }) - } - return result.concat(array) - } } + return result.concat(array) } - - throw unknownQuery(selection) }, []) } -var cache = {} - -/** - * Return array of browsers by selection queries. - * - * @param {(string|string[])} [queries=browserslist.defaults] Browser queries. - * @param {object} [opts] Options. - * @param {string} [opts.path="."] Path to processed file. - * It will be used to find config files. - * @param {string} [opts.env="production"] Processing environment. - * It will be used to take right - * queries from config file. - * @param {string} [opts.config] Path to config file with queries. - * @param {object} [opts.stats] Custom browser usage statistics - * for "> 1% in my stats" query. - * @param {boolean} [opts.ignoreUnknownVersions=false] Do not throw on unknown - * version in direct query. - * @param {boolean} [opts.dangerousExtend] Disable security checks - * for extend query. - * @param {boolean} [opts.throwOnMissing] Throw error on missing env. - * @param {boolean} [opts.mobileToDesktop] Alias mobile browsers to the desktop - * version when Can I Use doesn't have - * data about the specified version. - * @returns {string[]} Array with browser names in Can I Use. - * - * @example - * browserslist('IE >= 10, IE 8') //=> ['ie 11', 'ie 10', 'ie 8'] - */ -function browserslist(queries, opts) { +function prepareOpts(opts) { if (typeof opts === 'undefined') opts = {} if (typeof opts.path === 'undefined') { opts.path = path.resolve ? path.resolve('.') : '.' } + return opts +} + +function prepareQueries(queries, opts) { if (typeof queries === 'undefined' || queries === null) { var config = browserslist.loadConfig(opts) if (config) { @@ -422,11 +365,23 @@ function browserslist(queries, opts) { } } + return queries +} + +function checkQueries(queries) { if (!(typeof queries === 'string' || Array.isArray(queries))) { throw new BrowserslistError( 'Browser queries must be an array or string. Got ' + typeof queries + '.' ) } +} + +var cache = {} + +function browserslist(queries, opts) { + opts = prepareOpts(opts) + queries = prepareQueries(queries, opts) + checkQueries(queries) var context = { ignoreUnknownVersions: opts.ignoreUnknownVersions, @@ -468,48 +423,11 @@ function browserslist(queries, opts) { return result } -function parse(queries) { - var qs = [] - do { - queries = doMatch(queries, qs) - } while (queries) - return qs -} - -function doMatch(string, qs) { - var or = /^(?:,\s*|\s+or\s+)(.*)/i - var and = /^\s+and\s+(.*)/i - - return find(string, function (parsed, n, max) { - if (and.test(parsed)) { - qs.unshift({ type: QUERY_AND, queryString: parsed.match(and)[1] }) - return true - } else if (or.test(parsed)) { - qs.unshift({ type: QUERY_OR, queryString: parsed.match(or)[1] }) - return true - } else if (n === max) { - qs.unshift({ type: QUERY_OR, queryString: parsed.trim() }) - return true - } - return false - }) -} - -function find(string, predicate) { - for (var n = 1, max = string.length; n <= max; n++) { - var parsed = string.substr(-n, n) - if (predicate(parsed, n, max)) { - return string.slice(0, -n) - } - } - return '' -} - -function flatten(array) { - if (!Array.isArray(array)) return [array] - return array.reduce(function (a, b) { - return a.concat(flatten(b)) - }, []) +browserslist.parse = function (queries, opts) { + opts = prepareOpts(opts) + queries = prepareQueries(queries, opts) + checkQueries(queries) + return parse(QUERIES, queries) } // Will be filled by Can I Use data below @@ -558,20 +476,6 @@ browserslist.readConfig = env.readConfig browserslist.findConfig = env.findConfig browserslist.loadConfig = env.loadConfig -/** - * Return browsers market coverage. - * - * @param {string[]} browsers Browsers names in Can I Use. - * @param {string|object} [stats="global"] Which statistics should be used. - * Country code or custom statistics. - * Pass `"my stats"` to load statistics - * from Browserslist files. - * - * @return {number} Total market coverage for all selected browsers. - * - * @example - * browserslist.coverage(browserslist('> 1% in US'), 'US') //=> 83.1 - */ browserslist.coverage = function (browsers, stats) { var data if (typeof stats === 'undefined') { @@ -616,42 +520,44 @@ browserslist.coverage = function (browsers, stats) { }, 0) } -function nodeQuery(context, version) { +function nodeQuery(context, node) { var matched = browserslist.nodeVersions.filter(function (i) { - return isVersionsMatch(i, version) + return isVersionsMatch(i, node.version) }) if (matched.length === 0) { if (context.ignoreUnknownVersions) { return [] } else { - throw new BrowserslistError('Unknown version ' + version + ' of Node.js') + throw new BrowserslistError( + 'Unknown version ' + node.version + ' of Node.js' + ) } } return ['node ' + matched[matched.length - 1]] } -function sinceQuery(context, year, month, date) { - year = parseInt(year) - month = parseInt(month || '01') - 1 - date = parseInt(date || '01') - return filterByYear(Date.UTC(year, month, date, 0, 0, 0), context) +function sinceQuery(context, node) { + var year = parseInt(node.year) + var month = parseInt(node.month || '01') - 1 + var day = parseInt(node.day || '01') + return filterByYear(Date.UTC(year, month, day, 0, 0, 0), context) } -function coverQuery(context, coverage, statMode) { - coverage = parseFloat(coverage) +function coverQuery(context, node) { + var coverage = parseFloat(node.coverage) var usage = browserslist.usage.global - if (statMode) { - if (statMode.match(/^my\s+stats$/i)) { + if (node.place) { + if (node.place.match(/^my\s+stats$/i)) { if (!context.customUsage) { throw new BrowserslistError('Custom usage statistics was not provided') } usage = context.customUsage } else { var place - if (statMode.length === 2) { - place = statMode.toUpperCase() + if (node.place.length === 2) { + place = node.place.toUpperCase() } else { - place = statMode.toLowerCase() + place = node.place.toLowerCase() } env.loadCountry(browserslist.usage, place, browserslist.data) usage = browserslist.usage[place] @@ -673,98 +579,109 @@ function coverQuery(context, coverage, statMode) { return result } -var QUERIES = [ - { +var QUERIES = { + last_major_versions: { + matches: ['versions'], regexp: /^last\s+(\d+)\s+major\s+versions?$/i, - select: function (context, versions) { + select: function (context, node) { return Object.keys(agents).reduce(function (selected, name) { var data = byName(name, context) if (!data) return selected - var list = getMajorVersions(data.released, versions) + var list = getMajorVersions(data.released, node.versions) list = list.map(nameMapper(data.name)) if (data.name === 'android') { - list = filterAndroid(list, versions, context) + list = filterAndroid(list, node.versions, context) } return selected.concat(list) }, []) } }, - { + last_versions: { + matches: ['versions'], regexp: /^last\s+(\d+)\s+versions?$/i, - select: function (context, versions) { + select: function (context, node) { return Object.keys(agents).reduce(function (selected, name) { var data = byName(name, context) if (!data) return selected - var list = data.released.slice(-versions) + var list = data.released.slice(-node.versions) list = list.map(nameMapper(data.name)) if (data.name === 'android') { - list = filterAndroid(list, versions, context) + list = filterAndroid(list, node.versions, context) } return selected.concat(list) }, []) } }, - { + last_electron_major_versions: { + matches: ['versions'], regexp: /^last\s+(\d+)\s+electron\s+major\s+versions?$/i, - select: function (context, versions) { - var validVersions = getMajorVersions(Object.keys(e2c), versions) + select: function (context, node) { + var validVersions = getMajorVersions(Object.keys(e2c), node.versions) return validVersions.map(function (i) { return 'chrome ' + e2c[i] }) } }, - { + last_node_major_versions: { + matches: ['versions'], regexp: /^last\s+(\d+)\s+node\s+major\s+versions?$/i, - select: function (context, versions) { - return getMajorVersions(browserslist.nodeVersions, versions).map( + select: function (context, node) { + return getMajorVersions(browserslist.nodeVersions, node.versions).map( function (version) { return 'node ' + version } ) } }, - { + last_browser_major_versions: { + matches: ['versions', 'browser'], regexp: /^last\s+(\d+)\s+(\w+)\s+major\s+versions?$/i, - select: function (context, versions, name) { - var data = checkName(name, context) - var validVersions = getMajorVersions(data.released, versions) + select: function (context, node) { + var data = checkName(node.browser, context) + var validVersions = getMajorVersions(data.released, node.versions) var list = validVersions.map(nameMapper(data.name)) if (data.name === 'android') { - list = filterAndroid(list, versions, context) + list = filterAndroid(list, node.versions, context) } return list } }, - { + last_electron_versions: { + matches: ['versions'], regexp: /^last\s+(\d+)\s+electron\s+versions?$/i, - select: function (context, versions) { + select: function (context, node) { return Object.keys(e2c) - .slice(-versions) + .slice(-node.versions) .map(function (i) { return 'chrome ' + e2c[i] }) } }, - { + last_node_versions: { + matches: ['versions'], regexp: /^last\s+(\d+)\s+node\s+versions?$/i, - select: function (context, versions) { - return browserslist.nodeVersions.slice(-versions).map(function (version) { - return 'node ' + version - }) + select: function (context, node) { + return browserslist.nodeVersions + .slice(-node.versions) + .map(function (version) { + return 'node ' + version + }) } }, - { + last_browser_versions: { + matches: ['versions', 'browser'], regexp: /^last\s+(\d+)\s+(\w+)\s+versions?$/i, - select: function (context, versions, name) { - var data = checkName(name, context) - var list = data.released.slice(-versions).map(nameMapper(data.name)) + select: function (context, node) { + var data = checkName(node.browser, context) + var list = data.released.slice(-node.versions).map(nameMapper(data.name)) if (data.name === 'android') { - list = filterAndroid(list, versions, context) + list = filterAndroid(list, node.versions, context) } return list } }, - { + unreleased_versions: { + matches: [], regexp: /^unreleased\s+versions$/i, select: function (context) { return Object.keys(agents).reduce(function (selected, name) { @@ -778,16 +695,18 @@ var QUERIES = [ }, []) } }, - { + unreleased_electron_versions: { + matches: [], regexp: /^unreleased\s+electron\s+versions?$/i, select: function () { return [] } }, - { + unreleased_browser_versions: { + matches: ['browser'], regexp: /^unreleased\s+(\w+)\s+versions?$/i, - select: function (context, name) { - var data = checkName(name, context) + select: function (context, node) { + var data = checkName(node.browser, context) return data.versions .filter(function (v) { return data.released.indexOf(v) === -1 @@ -795,39 +714,44 @@ var QUERIES = [ .map(nameMapper(data.name)) } }, - { + last_years: { + matches: ['years'], regexp: /^last\s+(\d*.?\d+)\s+years?$/i, - select: function (context, years) { - return filterByYear(Date.now() - YEAR * years, context) + select: function (context, node) { + return filterByYear(Date.now() - YEAR * node.years, context) } }, - { + since_y: { + matches: ['year'], regexp: /^since (\d+)$/i, select: sinceQuery }, - { + since_y_m: { + matches: ['year', 'month'], regexp: /^since (\d+)-(\d+)$/i, select: sinceQuery }, - { + since_y_m_d: { + matches: ['year', 'month', 'day'], regexp: /^since (\d+)-(\d+)-(\d+)$/i, select: sinceQuery }, - { + popularity: { + matches: ['sign', 'popularity'], regexp: /^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%$/, - select: function (context, sign, popularity) { - popularity = parseFloat(popularity) + select: function (context, node) { + var popularity = parseFloat(node.popularity) var usage = browserslist.usage.global return Object.keys(usage).reduce(function (result, version) { - if (sign === '>') { + if (node.sign === '>') { if (usage[version] > popularity) { result.push(version) } - } else if (sign === '<') { + } else if (node.sign === '<') { if (usage[version] < popularity) { result.push(version) } - } else if (sign === '<=') { + } else if (node.sign === '<=') { if (usage[version] <= popularity) { result.push(version) } @@ -838,10 +762,11 @@ var QUERIES = [ }, []) } }, - { + popularity_in_my_stats: { + matches: ['sign', 'popularity'], regexp: /^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%\s+in\s+my\s+stats$/, - select: function (context, sign, popularity) { - popularity = parseFloat(popularity) + select: function (context, node) { + var popularity = parseFloat(node.popularity) if (!context.customUsage) { throw new BrowserslistError('Custom usage statistics was not provided') } @@ -852,15 +777,15 @@ var QUERIES = [ return result } - if (sign === '>') { + if (node.sign === '>') { if (percentage > popularity) { result.push(version) } - } else if (sign === '<') { + } else if (node.sign === '<') { if (percentage < popularity) { result.push(version) } - } else if (sign === '<=') { + } else if (node.sign === '<=') { if (percentage <= popularity) { result.push(version) } @@ -871,11 +796,12 @@ var QUERIES = [ }, []) } }, - { + popularity_in_config_stats: { + matches: ['sign', 'popularity', 'config'], regexp: /^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%\s+in\s+(\S+)\s+stats$/, - select: function (context, sign, popularity, name) { - popularity = parseFloat(popularity) - var stats = env.loadStat(context, name, browserslist.data) + select: function (context, node) { + var popularity = parseFloat(node.popularity) + var stats = env.loadStat(context, node.config, browserslist.data) if (stats) { context.customUsage = {} for (var browser in stats) { @@ -892,15 +818,15 @@ var QUERIES = [ return result } - if (sign === '>') { + if (node.sign === '>') { if (percentage > popularity) { result.push(version) } - } else if (sign === '<') { + } else if (node.sign === '<') { if (percentage < popularity) { result.push(version) } - } else if (sign === '<=') { + } else if (node.sign === '<=') { if (percentage <= popularity) { result.push(version) } @@ -911,10 +837,12 @@ var QUERIES = [ }, []) } }, - { + popularity_in_place: { + matches: ['sign', 'popularity', 'place'], regexp: /^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%\s+in\s+((alt-)?\w\w)$/, - select: function (context, sign, popularity, place) { - popularity = parseFloat(popularity) + select: function (context, node) { + var popularity = parseFloat(node.popularity) + var place = node.place if (place.length === 2) { place = place.toUpperCase() } else { @@ -928,15 +856,15 @@ var QUERIES = [ return result } - if (sign === '>') { + if (node.sign === '>') { if (percentage > popularity) { result.push(version) } - } else if (sign === '<') { + } else if (node.sign === '<') { if (percentage < popularity) { result.push(version) } - } else if (sign === '<=') { + } else if (node.sign === '<=') { if (percentage <= popularity) { result.push(version) } @@ -947,19 +875,22 @@ var QUERIES = [ }, []) } }, - { + cover: { + matches: ['coverage'], regexp: /^cover\s+(\d+|\d+\.\d+|\.\d+)%$/i, select: coverQuery }, - { + cover_in: { + matches: ['coverage', 'place'], regexp: /^cover\s+(\d+|\d+\.\d+|\.\d+)%\s+in\s+(my\s+stats|(alt-)?\w\w)$/i, select: coverQuery }, - { + supports: { + matches: ['feature'], regexp: /^supports\s+([\w-]+)$/, - select: function (context, feature) { - env.loadFeature(browserslist.cache, feature) - var features = browserslist.cache[feature] + select: function (context, node) { + env.loadFeature(browserslist.cache, node.feature) + var features = browserslist.cache[node.feature] return Object.keys(features).reduce(function (result, version) { var flags = features[version] if (flags.indexOf('y') >= 0 || flags.indexOf('a') >= 0) { @@ -969,19 +900,20 @@ var QUERIES = [ }, []) } }, - { + electron_range: { + matches: ['from', 'to'], regexp: /^electron\s+([\d.]+)\s*-\s*([\d.]+)$/i, - select: function (context, from, to) { - var fromToUse = normalizeElectron(from) - var toToUse = normalizeElectron(to) + select: function (context, node) { + var fromToUse = normalizeElectron(node.from) + var toToUse = normalizeElectron(node.to) + var from = parseFloat(node.from) + var to = parseFloat(node.to) if (!e2c[fromToUse]) { throw new BrowserslistError('Unknown version ' + from + ' of electron') } if (!e2c[toToUse]) { throw new BrowserslistError('Unknown version ' + to + ' of electron') } - from = parseFloat(from) - to = parseFloat(to) return Object.keys(e2c) .filter(function (i) { var parsed = parseFloat(i) @@ -992,23 +924,25 @@ var QUERIES = [ }) } }, - { + node_range: { + matches: ['from', 'to'], regexp: /^node\s+([\d.]+)\s*-\s*([\d.]+)$/i, - select: function (context, from, to) { + select: function (context, node) { return browserslist.nodeVersions - .filter(semverFilterLoose('>=', from)) - .filter(semverFilterLoose('<=', to)) + .filter(semverFilterLoose('>=', node.from)) + .filter(semverFilterLoose('<=', node.to)) .map(function (v) { return 'node ' + v }) } }, - { + browser_range: { + matches: ['browser', 'from', 'to'], regexp: /^(\w+)\s+([\d.]+)\s*-\s*([\d.]+)$/i, - select: function (context, name, from, to) { - var data = checkName(name, context) - from = parseFloat(normalizeVersion(data, from) || from) - to = parseFloat(normalizeVersion(data, to) || to) + select: function (context, node) { + var data = checkName(node.browser, context) + var from = parseFloat(normalizeVersion(data, node.from) || node.from) + var to = parseFloat(normalizeVersion(data, node.to) || node.to) function filter(v) { var parsed = parseFloat(v) return parsed >= from && parsed <= to @@ -1016,86 +950,96 @@ var QUERIES = [ return data.released.filter(filter).map(nameMapper(data.name)) } }, - { + electron_ray: { + matches: ['sign', 'version'], regexp: /^electron\s*(>=?|<=?)\s*([\d.]+)$/i, - select: function (context, sign, version) { - var versionToUse = normalizeElectron(version) + select: function (context, node) { + var versionToUse = normalizeElectron(node.version) return Object.keys(e2c) - .filter(generateFilter(sign, versionToUse)) + .filter(generateFilter(node.sign, versionToUse)) .map(function (i) { return 'chrome ' + e2c[i] }) } }, - { + node_ray: { + matches: ['sign', 'version'], regexp: /^node\s*(>=?|<=?)\s*([\d.]+)$/i, - select: function (context, sign, version) { + select: function (context, node) { return browserslist.nodeVersions - .filter(generateSemverFilter(sign, version)) + .filter(generateSemverFilter(node.sign, node.version)) .map(function (v) { return 'node ' + v }) } }, - { + browser_ray: { + matches: ['browser', 'sign', 'version'], regexp: /^(\w+)\s*(>=?|<=?)\s*([\d.]+)$/, - select: function (context, name, sign, version) { - var data = checkName(name, context) + select: function (context, node) { + var version = node.version + var data = checkName(node.browser, context) var alias = browserslist.versionAliases[data.name][version] - if (alias) { - version = alias - } + if (alias) version = alias return data.released - .filter(generateFilter(sign, version)) + .filter(generateFilter(node.sign, version)) .map(function (v) { return data.name + ' ' + v }) } }, - { + firefox_esr: { + matches: [], regexp: /^(firefox|ff|fx)\s+esr$/i, select: function () { - return ['firefox 91'] + return ['firefox 102'] } }, - { + opera_mini_all: { + matches: [], regexp: /(operamini|op_mini)\s+all/i, select: function () { return ['op_mini all'] } }, - { + electron_version: { + matches: ['version'], regexp: /^electron\s+([\d.]+)$/i, - select: function (context, version) { - var versionToUse = normalizeElectron(version) + select: function (context, node) { + var versionToUse = normalizeElectron(node.version) var chrome = e2c[versionToUse] if (!chrome) { throw new BrowserslistError( - 'Unknown version ' + version + ' of electron' + 'Unknown version ' + node.version + ' of electron' ) } return ['chrome ' + chrome] } }, - { + node_major_version: { + matches: ['version'], regexp: /^node\s+(\d+)$/i, select: nodeQuery }, - { + node_minor_version: { + matches: ['version'], regexp: /^node\s+(\d+\.\d+)$/i, select: nodeQuery }, - { + node_patch_version: { + matches: ['version'], regexp: /^node\s+(\d+\.\d+\.\d+)$/i, select: nodeQuery }, - { + current_node: { + matches: [], regexp: /^current\s+node$/i, select: function (context) { return [env.currentNode(resolve, context)] } }, - { + maintained_node: { + matches: [], regexp: /^maintained\s+node\s+versions$/i, select: function (context) { var now = Date.now() @@ -1113,23 +1057,27 @@ var QUERIES = [ return resolve(queries, context) } }, - { + phantomjs_1_9: { + matches: [], regexp: /^phantomjs\s+1.9$/i, select: function () { return ['safari 5'] } }, - { + phantomjs_2_1: { + matches: [], regexp: /^phantomjs\s+2.1$/i, select: function () { return ['safari 6'] } }, - { + browser_version: { + matches: ['browser', 'version'], regexp: /^(\w+)\s+(tp|[\d.]+)$/i, - select: function (context, name, version) { + select: function (context, node) { + var version = node.version if (/^tp$/i.test(version)) version = 'TP' - var data = checkName(name, context) + var data = checkName(node.browser, context) var alias = normalizeVersion(data, version) if (alias) { version = alias @@ -1146,36 +1094,41 @@ var QUERIES = [ return [] } else { throw new BrowserslistError( - 'Unknown version ' + version + ' of ' + name + 'Unknown version ' + version + ' of ' + node.browser ) } } return [data.name + ' ' + version] } }, - { + browserslist_config: { + matches: [], regexp: /^browserslist config$/i, select: function (context) { return browserslist(undefined, context) } }, - { + extends: { + matches: ['config'], regexp: /^extends (.+)$/i, - select: function (context, name) { - return resolve(env.loadQueries(context, name), context) + select: function (context, node) { + return resolve(env.loadQueries(context, node.config), context) } }, - { + defaults: { + matches: [], regexp: /^defaults$/i, select: function (context) { return resolve(browserslist.defaults, context) } }, - { + dead: { + matches: [], regexp: /^dead$/i, select: function (context) { var dead = [ - 'ie <= 10', + 'Baidu >= 0', + 'ie <= 11', 'ie_mob <= 11', 'bb <= 10', 'op_mob <= 12.1', @@ -1184,19 +1137,20 @@ var QUERIES = [ return resolve(dead, context) } }, - { + unknown: { + matches: [], regexp: /^(\w+)$/i, - select: function (context, name) { - if (byName(name, context)) { + select: function (context, node) { + if (byName(node.query, context)) { throw new BrowserslistError( - 'Specify versions in Browserslist query for browser ' + name + 'Specify versions in Browserslist query for browser ' + node.query ) } else { - throw unknownQuery(name) + throw unknownQuery(node.query) } } } -] +} // Get and convert Can I Use data diff --git a/tools/node_modules/eslint/node_modules/browserslist/node.js b/tools/node_modules/eslint/node_modules/browserslist/node.js index 8eb6b650421..a3c7ef7e5bf 100644 --- a/tools/node_modules/eslint/node_modules/browserslist/node.js +++ b/tools/node_modules/eslint/node_modules/browserslist/node.js @@ -94,7 +94,12 @@ function pickEnv(config, opts) { } function parsePackage(file) { - var config = JSON.parse(fs.readFileSync(file)) + var config = JSON.parse( + fs + .readFileSync(file) + .toString() + .replace(/^\uFEFF/m, '') + ) if (config.browserlist && !config.browserslist) { throw new BrowserslistError( '`browserlist` key instead of `browserslist` in ' + file @@ -238,7 +243,12 @@ module.exports = { loadCountry: function loadCountry(usage, country, data) { var code = country.replace(/[^\w-]/g, '') if (!usage[code]) { - var compressed = require('caniuse-lite/data/regions/' + code + '.js') + var compressed + try { + compressed = require('caniuse-lite/data/regions/' + code + '.js') + } catch (e) { + throw new BrowserslistError("Unknown region name `" + code + "`.") + } var usageData = region(compressed) normalizeUsageData(usageData, data) usage[country] = {} @@ -253,8 +263,12 @@ module.exports = { loadFeature: function loadFeature(features, name) { name = name.replace(/[^\w-]/g, '') if (features[name]) return - - var compressed = require('caniuse-lite/data/features/' + name + '.js') + var compressed + try { + compressed = require('caniuse-lite/data/features/' + name + '.js') + } catch (e) { + throw new BrowserslistError("Unknown feature name `" + name + "`.") + } var stats = feature(compressed).stats features[name] = {} for (var i in stats) { @@ -380,9 +394,9 @@ module.exports = { if (latest !== 0 && latest < halfYearAgo) { console.warn( 'Browserslist: caniuse-lite is outdated. Please run:\n' + - ' npx browserslist@latest --update-db\n' + + ' npx update-browserslist-db@latest\n' + ' Why you should do it regularly: ' + - 'https://github.com/browserslist/browserslist#browsers-data-updating' + 'https://github.com/browserslist/update-db#readme' ) } }, diff --git a/tools/node_modules/eslint/node_modules/browserslist/package.json b/tools/node_modules/eslint/node_modules/browserslist/package.json index dee90574c0f..78078626732 100644 --- a/tools/node_modules/eslint/node_modules/browserslist/package.json +++ b/tools/node_modules/eslint/node_modules/browserslist/package.json @@ -1,25 +1,30 @@ { "name": "browserslist", - "version": "4.20.0", + "version": "4.21.4", "description": "Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset", "keywords": [ "caniuse", "browsers", "target" ], - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "author": "Andrey Sitnik ", "license": "MIT", "repository": "browserslist/browserslist", "dependencies": { - "caniuse-lite": "^1.0.30001313", - "electron-to-chromium": "^1.4.76", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" diff --git a/tools/node_modules/eslint/node_modules/browserslist/parse.js b/tools/node_modules/eslint/node_modules/browserslist/parse.js new file mode 100644 index 00000000000..56b534ab4c9 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/browserslist/parse.js @@ -0,0 +1,78 @@ +var AND_REGEXP = /^\s+and\s+(.*)/i +var OR_REGEXP = /^(?:,\s*|\s+or\s+)(.*)/i + +function flatten(array) { + if (!Array.isArray(array)) return [array] + return array.reduce(function (a, b) { + return a.concat(flatten(b)) + }, []) +} + +function find(string, predicate) { + for (var n = 1, max = string.length; n <= max; n++) { + var parsed = string.substr(-n, n) + if (predicate(parsed, n, max)) { + return string.slice(0, -n) + } + } + return '' +} + +function matchQuery(all, query) { + var node = { query: query } + if (query.indexOf('not ') === 0) { + node.not = true + query = query.slice(4) + } + + for (var name in all) { + var type = all[name] + var match = query.match(type.regexp) + if (match) { + node.type = name + for (var i = 0; i < type.matches.length; i++) { + node[type.matches[i]] = match[i + 1] + } + return node + } + } + + node.type = 'unknown' + return node +} + +function matchBlock(all, string, qs) { + var node + return find(string, function (parsed, n, max) { + if (AND_REGEXP.test(parsed)) { + node = matchQuery(all, parsed.match(AND_REGEXP)[1]) + node.compose = 'and' + qs.unshift(node) + return true + } else if (OR_REGEXP.test(parsed)) { + node = matchQuery(all, parsed.match(OR_REGEXP)[1]) + node.compose = 'or' + qs.unshift(node) + return true + } else if (n === max) { + node = matchQuery(all, parsed.trim()) + node.compose = 'or' + qs.unshift(node) + return true + } + return false + }) +} + +module.exports = function parse(all, queries) { + if (!Array.isArray(queries)) queries = [queries] + return flatten( + queries.map(function (block) { + var qs = [] + do { + block = matchBlock(all, block, qs) + } while (block) + return qs + }) + ) +} diff --git a/tools/node_modules/eslint/node_modules/browserslist/update-db.js b/tools/node_modules/eslint/node_modules/browserslist/update-db.js deleted file mode 100644 index 3e69e640a64..00000000000 --- a/tools/node_modules/eslint/node_modules/browserslist/update-db.js +++ /dev/null @@ -1,317 +0,0 @@ -var childProcess = require('child_process') -var escalade = require('escalade/sync') -var pico = require('picocolors') -var path = require('path') -var fs = require('fs') - -var BrowserslistError = require('./error') - -function detectLockfile() { - var packageDir = escalade('.', function (dir, names) { - return names.indexOf('package.json') !== -1 ? dir : '' - }) - - if (!packageDir) { - throw new BrowserslistError( - 'Cannot find package.json. ' + - 'Is this the right directory to run `npx browserslist --update-db` in?' - ) - } - - var lockfileNpm = path.join(packageDir, 'package-lock.json') - var lockfileShrinkwrap = path.join(packageDir, 'npm-shrinkwrap.json') - var lockfileYarn = path.join(packageDir, 'yarn.lock') - var lockfilePnpm = path.join(packageDir, 'pnpm-lock.yaml') - - if (fs.existsSync(lockfilePnpm)) { - return { mode: 'pnpm', file: lockfilePnpm } - } else if (fs.existsSync(lockfileNpm)) { - return { mode: 'npm', file: lockfileNpm } - } else if (fs.existsSync(lockfileYarn)) { - var lock = { mode: 'yarn', file: lockfileYarn } - lock.content = fs.readFileSync(lock.file).toString() - lock.version = /# yarn lockfile v1/.test(lock.content) ? 1 : 2 - return lock - } else if (fs.existsSync(lockfileShrinkwrap)) { - return { mode: 'npm', file: lockfileShrinkwrap } - } - throw new BrowserslistError( - 'No lockfile found. Run "npm install", "yarn install" or "pnpm install"' - ) -} - -function getLatestInfo(lock) { - if (lock.mode === 'yarn') { - if (lock.version === 1) { - return JSON.parse( - childProcess.execSync('yarn info caniuse-lite --json').toString() - ).data - } else { - return JSON.parse( - childProcess.execSync('yarn npm info caniuse-lite --json').toString() - ) - } - } - return JSON.parse( - childProcess.execSync('npm show caniuse-lite --json').toString() - ) -} - -function getBrowsersList() { - return childProcess - .execSync('npx browserslist') - .toString() - .trim() - .split('\n') - .map(function (line) { - return line.trim().split(' ') - }) - .reduce(function (result, entry) { - if (!result[entry[0]]) { - result[entry[0]] = [] - } - result[entry[0]].push(entry[1]) - return result - }, {}) -} - -function diffBrowsersLists(old, current) { - var browsers = Object.keys(old).concat( - Object.keys(current).filter(function (browser) { - return old[browser] === undefined - }) - ) - return browsers - .map(function (browser) { - var oldVersions = old[browser] || [] - var currentVersions = current[browser] || [] - var intersection = oldVersions.filter(function (version) { - return currentVersions.indexOf(version) !== -1 - }) - var addedVersions = currentVersions.filter(function (version) { - return intersection.indexOf(version) === -1 - }) - var removedVersions = oldVersions.filter(function (version) { - return intersection.indexOf(version) === -1 - }) - return removedVersions - .map(function (version) { - return pico.red('- ' + browser + ' ' + version) - }) - .concat( - addedVersions.map(function (version) { - return pico.green('+ ' + browser + ' ' + version) - }) - ) - }) - .reduce(function (result, array) { - return result.concat(array) - }, []) - .join('\n') -} - -function updateNpmLockfile(lock, latest) { - var metadata = { latest: latest, versions: [] } - var content = deletePackage(JSON.parse(lock.content), metadata) - metadata.content = JSON.stringify(content, null, ' ') - return metadata -} - -function deletePackage(node, metadata) { - if (node.dependencies) { - if (node.dependencies['caniuse-lite']) { - var version = node.dependencies['caniuse-lite'].version - metadata.versions[version] = true - delete node.dependencies['caniuse-lite'] - } - for (var i in node.dependencies) { - node.dependencies[i] = deletePackage(node.dependencies[i], metadata) - } - } - return node -} - -var yarnVersionRe = /version "(.*?)"/ - -function updateYarnLockfile(lock, latest) { - var blocks = lock.content.split(/(\n{2,})/).map(function (block) { - return block.split('\n') - }) - var versions = {} - blocks.forEach(function (lines) { - if (lines[0].indexOf('caniuse-lite@') !== -1) { - var match = yarnVersionRe.exec(lines[1]) - versions[match[1]] = true - if (match[1] !== latest.version) { - lines[1] = lines[1].replace( - /version "[^"]+"/, - 'version "' + latest.version + '"' - ) - lines[2] = lines[2].replace( - /resolved "[^"]+"/, - 'resolved "' + latest.dist.tarball + '"' - ) - if (lines.length === 4) { - lines[3] = latest.dist.integrity - ? lines[3].replace( - /integrity .+/, - 'integrity ' + latest.dist.integrity - ) - : '' - } - } - } - }) - var content = blocks - .map(function (lines) { - return lines.join('\n') - }) - .join('') - return { content: content, versions: versions } -} - -function updateLockfile(lock, latest) { - if (!lock.content) lock.content = fs.readFileSync(lock.file).toString() - - if (lock.mode === 'yarn') { - return updateYarnLockfile(lock, latest) - } else { - return updateNpmLockfile(lock, latest) - } -} - -function updatePackageManually(print, lock, latest) { - var lockfileData = updateLockfile(lock, latest) - var caniuseVersions = Object.keys(lockfileData.versions).sort() - if (caniuseVersions.length === 1 && caniuseVersions[0] === latest.version) { - print( - 'Installed version: ' + - pico.bold(pico.green(latest.version)) + - '\n' + - pico.bold(pico.green('caniuse-lite is up to date')) + - '\n' - ) - return - } - - if (caniuseVersions.length === 0) { - caniuseVersions[0] = 'none' - } - print( - 'Installed version' + - (caniuseVersions.length === 1 ? ': ' : 's: ') + - pico.bold(pico.red(caniuseVersions.join(', '))) + - '\n' + - 'Removing old caniuse-lite from lock file\n' - ) - fs.writeFileSync(lock.file, lockfileData.content) - - var install = lock.mode === 'yarn' ? 'yarn add -W' : lock.mode + ' install' - print( - 'Installing new caniuse-lite version\n' + - pico.yellow('$ ' + install + ' caniuse-lite') + - '\n' - ) - try { - childProcess.execSync(install + ' caniuse-lite') - } catch (e) /* c8 ignore start */ { - print( - pico.red( - '\n' + - e.stack + - '\n\n' + - 'Problem with `' + - install + - ' caniuse-lite` call. ' + - 'Run it manually.\n' - ) - ) - process.exit(1) - } /* c8 ignore end */ - - var del = lock.mode === 'yarn' ? 'yarn remove -W' : lock.mode + ' uninstall' - print( - 'Cleaning package.json dependencies from caniuse-lite\n' + - pico.yellow('$ ' + del + ' caniuse-lite') + - '\n' - ) - childProcess.execSync(del + ' caniuse-lite') -} - -function updateWith(print, cmd) { - print('Updating caniuse-lite version\n' + pico.yellow('$ ' + cmd) + '\n') - try { - childProcess.execSync(cmd) - } catch (e) /* c8 ignore start */ { - print(pico.red(e.stdout.toString())) - print( - pico.red( - '\n' + - e.stack + - '\n\n' + - 'Problem with `' + - cmd + - '` call. ' + - 'Run it manually.\n' - ) - ) - process.exit(1) - } /* c8 ignore end */ -} - -module.exports = function updateDB(print) { - var lock = detectLockfile() - var latest = getLatestInfo(lock) - - var browsersListRetrievalError - var oldBrowsersList - try { - oldBrowsersList = getBrowsersList() - } catch (e) { - browsersListRetrievalError = e - } - - print('Latest version: ' + pico.bold(pico.green(latest.version)) + '\n') - - if (lock.mode === 'yarn' && lock.version !== 1) { - updateWith(print, 'yarn up -R caniuse-lite') - } else if (lock.mode === 'pnpm') { - updateWith(print, 'pnpm up caniuse-lite') - } else { - updatePackageManually(print, lock, latest) - } - - print('caniuse-lite has been successfully updated\n') - - var currentBrowsersList - if (!browsersListRetrievalError) { - try { - currentBrowsersList = getBrowsersList() - } catch (e) /* c8 ignore start */ { - browsersListRetrievalError = e - } /* c8 ignore end */ - } - - if (browsersListRetrievalError) { - print( - pico.red( - '\n' + - browsersListRetrievalError.stack + - '\n\n' + - 'Problem with browser list retrieval.\n' + - 'Target browser changes won’t be shown.\n' - ) - ) - } else { - var targetBrowserChanges = diffBrowsersLists( - oldBrowsersList, - currentBrowsersList - ) - if (targetBrowserChanges) { - print('\nTarget browser changes:\n') - print(targetBrowserChanges + '\n') - } else { - print('\n' + pico.green('No target browser changes') + '\n') - } - } -} diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/agents.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/agents.js index 481539603be..4a031ad7e62 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/agents.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/agents.js @@ -1 +1 @@ -module.exports={A:{A:{J:0.0131217,D:0.00621152,E:0.0395479,F:0.0593219,A:0.0263653,B:0.619584,rB:0.009298},B:"ms",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","rB","J","D","E","F","A","B","","",""],E:"IE",F:{rB:962323200,J:998870400,D:1161129600,E:1237420800,F:1300060800,A:1346716800,B:1381968000}},B:{A:{C:0.008322,K:0.004267,L:0.004268,G:0.012483,M:0.004161,N:0.012483,O:0.074898,P:0,Q:0.004298,R:0.00944,S:0.004043,V:0.004161,W:0.008322,X:0.004161,Y:0.008322,Z:0.004318,a:0.008322,b:0.004161,c:0.004161,d:0.012483,e:0.004161,f:0.008322,g:0.029127,T:0.049932,h:0.853005,H:2.98344,i:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","C","K","L","G","M","N","O","P","Q","R","S","V","W","X","Y","Z","a","b","c","d","e","f","g","T","h","H","i","","",""],E:"Edge",F:{C:1438128000,K:1447286400,L:1470096000,G:1491868800,M:1508198400,N:1525046400,O:1542067200,P:1579046400,Q:1581033600,R:1586736000,S:1590019200,V:1594857600,W:1598486400,X:1602201600,Y:1605830400,Z:1611360000,a:1614816000,b:1618358400,c:1622073600,d:1626912000,e:1630627200,f:1632441600,g:1634774400,T:1637539200,h:1641427200,H:1643932800,i:1646265600},D:{C:"ms",K:"ms",L:"ms",G:"ms",M:"ms",N:"ms",O:"ms"}},C:{A:{"0":0.009076,"1":0.004161,"2":0.004783,"3":0.004271,"4":0.004783,"5":0.00487,"6":0.005029,"7":0.0047,"8":0.04161,"9":0.008322,sB:0.008322,hB:0.004271,I:0.016644,j:0.004879,J:0.020136,D:0.005725,E:0.004525,F:0.00533,A:0.004283,B:0.004318,C:0.004471,K:0.004486,L:0.00453,G:0.008322,M:0.004417,N:0.004425,O:0.004161,k:0.004443,l:0.004283,m:0.008322,n:0.013698,o:0.004161,p:0.008786,q:0.012483,r:0.004317,s:0.004393,t:0.004418,u:0.008834,v:0.008322,w:0.008928,x:0.004471,y:0.009284,z:0.004707,AB:0.004356,BB:0.004525,CB:0.004293,DB:0.004161,EB:0.004538,FB:0.008282,GB:0.008322,HB:0.062415,IB:0.004335,JB:0.008586,KB:0.008322,LB:0.008322,MB:0.004425,NB:0.004356,iB:0.004161,OB:0.008322,jB:0.004356,PB:0.004425,QB:0.008322,U:0.00415,RB:0.004267,SB:0.008712,TB:0.004267,UB:0.008322,VB:0.00415,WB:0.004293,XB:0.004425,YB:0.008322,ZB:0.00415,aB:0.00415,bB:0.004318,cB:0.004356,dB:0.004161,eB:0.058254,P:0.008322,Q:0.004161,R:0.016644,kB:0.004161,S:0.004161,V:0.012483,W:0.004268,X:0.004161,Y:0.012483,Z:0.012483,a:0.012483,b:0.020805,c:0.099864,d:0.008322,e:0.012483,f:0.045771,g:0.045771,T:1.16508,h:2.02641,H:0.016644,i:0,tB:0.008786,uB:0.00487},B:"moz",C:["sB","hB","tB","uB","I","j","J","D","E","F","A","B","C","K","L","G","M","N","O","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","AB","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","NB","iB","OB","jB","PB","QB","U","RB","SB","TB","UB","VB","WB","XB","YB","ZB","aB","bB","cB","dB","eB","P","Q","R","kB","S","V","W","X","Y","Z","a","b","c","d","e","f","g","T","h","H","i",""],E:"Firefox",F:{"0":1421107200,"1":1424736000,"2":1428278400,"3":1431475200,"4":1435881600,"5":1439251200,"6":1442880000,"7":1446508800,"8":1450137600,"9":1453852800,sB:1161648000,hB:1213660800,tB:1246320000,uB:1264032000,I:1300752000,j:1308614400,J:1313452800,D:1317081600,E:1317081600,F:1320710400,A:1324339200,B:1327968000,C:1331596800,K:1335225600,L:1338854400,G:1342483200,M:1346112000,N:1349740800,O:1353628800,k:1357603200,l:1361232000,m:1364860800,n:1368489600,o:1372118400,p:1375747200,q:1379376000,r:1386633600,s:1391472000,t:1395100800,u:1398729600,v:1402358400,w:1405987200,x:1409616000,y:1413244800,z:1417392000,AB:1457395200,BB:1461628800,CB:1465257600,DB:1470096000,EB:1474329600,FB:1479168000,GB:1485216000,HB:1488844800,IB:1492560000,JB:1497312000,KB:1502150400,LB:1506556800,MB:1510617600,NB:1516665600,iB:1520985600,OB:1525824000,jB:1529971200,PB:1536105600,QB:1540252800,U:1544486400,RB:1548720000,SB:1552953600,TB:1558396800,UB:1562630400,VB:1567468800,WB:1571788800,XB:1575331200,YB:1578355200,ZB:1581379200,aB:1583798400,bB:1586304000,cB:1588636800,dB:1591056000,eB:1593475200,P:1595894400,Q:1598313600,R:1600732800,kB:1603152000,S:1605571200,V:1607990400,W:1611619200,X:1614038400,Y:1616457600,Z:1618790400,a:1622505600,b:1626134400,c:1628553600,d:1630972800,e:1633392000,f:1635811200,g:1638835200,T:1641859200,h:1644364800,H:null,i:null}},D:{A:{"0":0.016644,"1":0.004335,"2":0.004464,"3":0.020805,"4":0.004464,"5":0.012483,"6":0.0236,"7":0.004293,"8":0.008322,"9":0.004465,I:0.004706,j:0.004879,J:0.004879,D:0.005591,E:0.005591,F:0.005591,A:0.004534,B:0.004464,C:0.010424,K:0.0083,L:0.004706,G:0.015087,M:0.004393,N:0.004393,O:0.008652,k:0.008322,l:0.004393,m:0.004317,n:0.008322,o:0.008786,p:0.016644,q:0.004461,r:0.004141,s:0.004326,t:0.0047,u:0.004538,v:0.008322,w:0.008596,x:0.004566,y:0.008322,z:0.008322,AB:0.004642,BB:0.004891,CB:0.008322,DB:0.020805,EB:0.070737,FB:0.004293,GB:0.008322,HB:0.004161,IB:0.012483,JB:0.008322,KB:0.012483,LB:0.054093,MB:0.004161,NB:0.004161,iB:0.004161,OB:0.020805,jB:0.004161,PB:0.008322,QB:0.008322,U:0.020805,RB:0.012483,SB:0.020805,TB:0.012483,UB:0.008322,VB:0.054093,WB:0.049932,XB:0.016644,YB:0.091542,ZB:0.008322,aB:0.024966,bB:0.062415,cB:0.058254,dB:0.016644,eB:0.037449,P:0.212211,Q:0.058254,R:0.037449,S:0.104025,V:0.066576,W:0.070737,X:0.070737,Y:0.128991,Z:0.037449,a:0.062415,b:0.049932,c:0.112347,d:0.099864,e:0.262143,f:0.174762,g:0.099864,T:0.649116,h:7.14028,H:15.533,i:0.016644,vB:0.020805,wB:0.004161,xB:0},B:"webkit",C:["","","","I","j","J","D","E","F","A","B","C","K","L","G","M","N","O","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","AB","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","NB","iB","OB","jB","PB","QB","U","RB","SB","TB","UB","VB","WB","XB","YB","ZB","aB","bB","cB","dB","eB","P","Q","R","S","V","W","X","Y","Z","a","b","c","d","e","f","g","T","h","H","i","vB","wB","xB"],E:"Chrome",F:{"0":1400544000,"1":1405468800,"2":1409011200,"3":1412640000,"4":1416268800,"5":1421798400,"6":1425513600,"7":1429401600,"8":1432080000,"9":1437523200,I:1264377600,j:1274745600,J:1283385600,D:1287619200,E:1291248000,F:1296777600,A:1299542400,B:1303862400,C:1307404800,K:1312243200,L:1316131200,G:1316131200,M:1319500800,N:1323734400,O:1328659200,k:1332892800,l:1337040000,m:1340668800,n:1343692800,o:1348531200,p:1352246400,q:1357862400,r:1361404800,s:1364428800,t:1369094400,u:1374105600,v:1376956800,w:1384214400,x:1389657600,y:1392940800,z:1397001600,AB:1441152000,BB:1444780800,CB:1449014400,DB:1453248000,EB:1456963200,FB:1460592000,GB:1464134400,HB:1469059200,IB:1472601600,JB:1476230400,KB:1480550400,LB:1485302400,MB:1489017600,NB:1492560000,iB:1496707200,OB:1500940800,jB:1504569600,PB:1508198400,QB:1512518400,U:1516752000,RB:1520294400,SB:1523923200,TB:1527552000,UB:1532390400,VB:1536019200,WB:1539648000,XB:1543968000,YB:1548720000,ZB:1552348800,aB:1555977600,bB:1559606400,cB:1564444800,dB:1568073600,eB:1571702400,P:1575936000,Q:1580860800,R:1586304000,S:1589846400,V:1594684800,W:1598313600,X:1601942400,Y:1605571200,Z:1611014400,a:1614556800,b:1618272000,c:1621987200,d:1626739200,e:1630368000,f:1632268800,g:1634601600,T:1637020800,h:1641340800,H:1643673600,i:1646092800,vB:null,wB:null,xB:null}},E:{A:{I:0,j:0.008322,J:0.004656,D:0.004465,E:0.004356,F:0.004891,A:0.004425,B:0.004318,C:0.004161,K:0.049932,L:0.237177,G:0.145635,yB:0,lB:0.008692,zB:0.012483,"0B":0.00456,"1B":0.004283,"2B":0.016644,mB:0.012483,fB:0.029127,gB:0.058254,"3B":0.478515,"4B":0.877971,"5B":0.420261,nB:0.936225,oB:0.012483,"6B":0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","yB","lB","I","j","zB","J","0B","D","1B","E","F","2B","A","mB","B","fB","C","gB","K","3B","L","4B","G","5B","nB","oB","6B",""],E:"Safari",F:{yB:1205798400,lB:1226534400,I:1244419200,j:1275868800,zB:1311120000,J:1343174400,"0B":1382400000,D:1382400000,"1B":1410998400,E:1413417600,F:1443657600,"2B":1458518400,A:1474329600,mB:1490572800,B:1505779200,fB:1522281600,C:1537142400,gB:1553472000,K:1568851200,"3B":1585008000,L:1600214400,"4B":1619395200,G:1632096000,"5B":1635292800,nB:1639353600,oB:null,"6B":null}},F:{A:{"0":0.004879,"1":0.004161,"2":0.004283,"3":0.004367,"4":0.004534,"5":0.008322,"6":0.004227,"7":0.004418,"8":0.004161,"9":0.004227,F:0.0082,B:0.016581,C:0.004317,G:0.00685,M:0.00685,N:0.00685,O:0.005014,k:0.006015,l:0.004879,m:0.006597,n:0.006597,o:0.013434,p:0.006702,q:0.006015,r:0.005595,s:0.004393,t:0.004161,u:0.004879,v:0.004879,w:0.004161,x:0.005152,y:0.005014,z:0.009758,AB:0.004725,BB:0.008322,CB:0.008942,DB:0.004707,EB:0.004827,FB:0.004707,GB:0.004707,HB:0.004326,IB:0.008922,JB:0.014349,KB:0.004425,LB:0.00472,MB:0.004425,NB:0.004425,OB:0.00472,PB:0.004532,QB:0.004566,U:0.02283,RB:0.00867,SB:0.004656,TB:0.004642,UB:0.004318,VB:0.00944,WB:0.004293,XB:0.004293,YB:0.004298,ZB:0.096692,aB:0.004201,bB:0.004141,cB:0.004257,dB:0.004161,eB:0.004356,P:0.004161,Q:0.004161,R:0.008514,kB:0.228855,S:0.786429,"7B":0.00685,"8B":0.004161,"9B":0.008392,AC:0.004706,fB:0.006229,pB:0.004879,BC:0.008786,gB:0.00472},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","F","7B","8B","9B","AC","B","fB","pB","BC","C","gB","G","M","N","O","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","AB","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","NB","OB","PB","QB","U","RB","SB","TB","UB","VB","WB","XB","YB","ZB","aB","bB","cB","dB","eB","P","Q","R","kB","S","","",""],E:"Opera",F:{"0":1454371200,"1":1457308800,"2":1462320000,"3":1465344000,"4":1470096000,"5":1474329600,"6":1477267200,"7":1481587200,"8":1486425600,"9":1490054400,F:1150761600,"7B":1223424000,"8B":1251763200,"9B":1267488000,AC:1277942400,B:1292457600,fB:1302566400,pB:1309219200,BC:1323129600,C:1323129600,gB:1352073600,G:1372723200,M:1377561600,N:1381104000,O:1386288000,k:1390867200,l:1393891200,m:1399334400,n:1401753600,o:1405987200,p:1409616000,q:1413331200,r:1417132800,s:1422316800,t:1425945600,u:1430179200,v:1433808000,w:1438646400,x:1442448000,y:1445904000,z:1449100800,AB:1494374400,BB:1498003200,CB:1502236800,DB:1506470400,EB:1510099200,FB:1515024000,GB:1517961600,HB:1521676800,IB:1525910400,JB:1530144000,KB:1534982400,LB:1537833600,MB:1543363200,NB:1548201600,OB:1554768000,PB:1561593600,QB:1566259200,U:1570406400,RB:1573689600,SB:1578441600,TB:1583971200,UB:1587513600,VB:1592956800,WB:1595894400,XB:1600128000,YB:1603238400,ZB:1613520000,aB:1612224000,bB:1616544000,cB:1619568000,dB:1623715200,eB:1627948800,P:1631577600,Q:1633392000,R:1635984000,kB:1638403200,S:1642550400},D:{F:"o",B:"o",C:"o","7B":"o","8B":"o","9B":"o",AC:"o",fB:"o",pB:"o",BC:"o",gB:"o"}},G:{A:{E:0,lB:0,CC:0,qB:0.00298579,DC:0.00447869,EC:0.122417,FC:0.0194077,GC:0.00746448,HC:0.0134361,IC:0.0836022,JC:0.0388153,KC:0.0955454,LC:0.0641945,MC:0.0373224,NC:0.0373224,OC:0.559836,PC:0.0373224,QC:0.0134361,RC:0.0761377,SC:0.244835,TC:0.777799,UC:2.77828,VC:2.12738,nB:7.74216,oB:0.0403082},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","lB","CC","qB","DC","EC","FC","E","GC","HC","IC","JC","KC","LC","MC","NC","OC","PC","QC","RC","SC","TC","UC","VC","nB","oB","",""],E:"Safari on iOS",F:{lB:1270252800,CC:1283904000,qB:1299628800,DC:1331078400,EC:1359331200,FC:1394409600,E:1410912000,GC:1413763200,HC:1442361600,IC:1458518400,JC:1473724800,KC:1490572800,LC:1505779200,MC:1522281600,NC:1537142400,OC:1553472000,PC:1568851200,QC:1572220800,RC:1580169600,SC:1585008000,TC:1600214400,UC:1619395200,VC:1632096000,nB:1639353600,oB:null}},H:{A:{WC:1.03373},B:"o",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","WC","","",""],E:"Opera Mini",F:{WC:1426464000}},I:{A:{hB:0,I:0.0133463,H:0,XC:0,YC:0,ZC:0,aC:0.0133463,qB:0.0633949,bC:0,cC:0.260253},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","XC","YC","ZC","hB","I","aC","qB","bC","cC","H","","",""],E:"Android Browser",F:{XC:1256515200,YC:1274313600,ZC:1291593600,hB:1298332800,I:1318896000,aC:1341792000,qB:1374624000,bC:1386547200,cC:1401667200,H:1643673600}},J:{A:{D:0,A:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","D","A","","",""],E:"Blackberry Browser",F:{D:1325376000,A:1359504000}},K:{A:{A:0,B:0,C:0,U:0.0111391,fB:0,pB:0,gB:0},B:"o",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A","B","fB","pB","C","gB","U","","",""],E:"Opera Mobile",F:{A:1287100800,B:1300752000,fB:1314835200,pB:1318291200,C:1330300800,gB:1349740800,U:1613433600},D:{U:"webkit"}},L:{A:{H:37.2095},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","H","","",""],E:"Chrome for Android",F:{H:1643673600}},M:{A:{T:0.280272},B:"moz",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","T","","",""],E:"Firefox for Android",F:{T:1641859200}},N:{A:{A:0.0115934,B:0.022664},B:"ms",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A","B","","",""],E:"IE Mobile",F:{A:1340150400,B:1353456000}},O:{A:{dC:0.864172},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","dC","","",""],E:"UC Browser for Android",F:{dC:1471392000},D:{dC:"webkit"}},P:{A:{I:0.218332,eC:0.0103543,fC:0.010304,gC:0.0727775,hC:0.0103584,iC:0.0311903,mB:0.0105043,jC:0.0727775,kC:0.0311903,lC:0.103968,mC:0.114365,nC:0.145555,oC:2.10015},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","I","eC","fC","gC","hC","iC","mB","jC","kC","lC","mC","nC","oC","","",""],E:"Samsung Internet",F:{I:1461024000,eC:1481846400,fC:1509408000,gC:1528329600,hC:1546128000,iC:1554163200,mB:1567900800,jC:1582588800,kC:1593475200,lC:1605657600,mC:1618531200,nC:1629072000,oC:1640736000}},Q:{A:{pC:0.169331},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pC","","",""],E:"QQ Browser",F:{pC:1589846400}},R:{A:{qC:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","qC","","",""],E:"Baidu Browser",F:{qC:1491004800}},S:{A:{rC:0.099263},B:"moz",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","rC","","",""],E:"KaiOS Browser",F:{rC:1527811200}}}; +module.exports={A:{A:{J:0.0131217,D:0.00621152,E:0.0368202,F:0.0810044,A:0.00556471,B:0.45657,"4B":0.009298},B:"ms",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","4B","J","D","E","F","A","B","","",""],E:"IE",F:{"4B":962323200,J:998870400,D:1161129600,E:1237420800,F:1300060800,A:1346716800,B:1381968000}},B:{A:{C:0.003855,K:0.004267,L:0.004268,G:0.003855,M:0.003702,N:0.00771,O:0.019275,P:0,Q:0.004298,R:0.00944,S:0.004043,T:0.00771,U:0.00771,V:0.003855,W:0.003855,X:0.004318,Y:0.003855,Z:0.004118,a:0.003939,d:0.00771,e:0.004118,f:0.003939,g:0.003801,h:0.003855,i:0.003855,j:0.00771,k:0.00771,l:0.011565,m:0.04626,n:0.034695,o:1.06783,b:2.96835,H:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","C","K","L","G","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","d","e","f","g","h","i","j","k","l","m","n","o","b","H","","",""],E:"Edge",F:{C:1438128000,K:1447286400,L:1470096000,G:1491868800,M:1508198400,N:1525046400,O:1542067200,P:1579046400,Q:1581033600,R:1586736000,S:1590019200,T:1594857600,U:1598486400,V:1602201600,W:1605830400,X:1611360000,Y:1614816000,Z:1618358400,a:1622073600,d:1626912000,e:1630627200,f:1632441600,g:1634774400,h:1637539200,i:1641427200,j:1643932800,k:1646265600,l:1649635200,m:1651190400,n:1653955200,o:1655942400,b:1659657600,H:1661990400},D:{C:"ms",K:"ms",L:"ms",G:"ms",M:"ms",N:"ms",O:"ms"}},C:{A:{"0":0.008834,"1":0.008322,"2":0.008928,"3":0.004471,"4":0.009284,"5":0.004707,"6":0.009076,"7":0.00771,"8":0.004783,"9":0.004271,"5B":0.004118,oB:0.004271,I:0.019275,p:0.004879,J:0.020136,D:0.005725,E:0.004525,F:0.00533,A:0.004283,B:0.00771,C:0.004471,K:0.004486,L:0.00453,G:0.008322,M:0.004417,N:0.004425,O:0.004161,q:0.004443,r:0.004283,s:0.008322,t:0.013698,u:0.004161,v:0.008786,w:0.004118,x:0.004317,y:0.004393,z:0.004418,AB:0.004783,BB:0.00487,CB:0.005029,DB:0.0047,EB:0.02313,FB:0.00771,GB:0.003867,HB:0.004525,IB:0.004293,JB:0.003702,KB:0.004538,LB:0.008282,MB:0.011601,NB:0.057825,OB:0.011601,PB:0.00771,QB:0.003801,RB:0.00771,SB:0.011601,TB:0.003939,pB:0.003855,UB:0.003855,qB:0.004356,VB:0.004425,WB:0.008322,c:0.00415,XB:0.004267,YB:0.003801,ZB:0.004267,aB:0.00771,bB:0.00415,cB:0.004293,dB:0.004425,eB:0.003855,fB:0.00415,gB:0.00415,hB:0.004318,iB:0.004356,jB:0.003855,kB:0.03855,P:0.00771,Q:0.00771,R:0.019275,rB:0.003855,S:0.00771,T:0.00771,U:0.004268,V:0.003801,W:0.00771,X:0.00771,Y:0.00771,Z:0.00771,a:0.08481,d:0.003801,e:0.003855,f:0.02313,g:0.011565,h:0.00771,i:0.00771,j:0.00771,k:0.01542,l:0.01542,m:0.02313,n:0.096375,o:1.8504,b:0.35466,H:0.003855,sB:0,tB:0,"6B":0.008786,"7B":0.00487},B:"moz",C:["5B","oB","6B","7B","I","p","J","D","E","F","A","B","C","K","L","G","M","N","O","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","AB","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","NB","OB","PB","QB","RB","SB","TB","pB","UB","qB","VB","WB","c","XB","YB","ZB","aB","bB","cB","dB","eB","fB","gB","hB","iB","jB","kB","P","Q","R","rB","S","T","U","V","W","X","Y","Z","a","d","e","f","g","h","i","j","k","l","m","n","o","b","H","sB","tB",""],E:"Firefox",F:{"0":1398729600,"1":1402358400,"2":1405987200,"3":1409616000,"4":1413244800,"5":1417392000,"6":1421107200,"7":1424736000,"8":1428278400,"9":1431475200,"5B":1161648000,oB:1213660800,"6B":1246320000,"7B":1264032000,I:1300752000,p:1308614400,J:1313452800,D:1317081600,E:1317081600,F:1320710400,A:1324339200,B:1327968000,C:1331596800,K:1335225600,L:1338854400,G:1342483200,M:1346112000,N:1349740800,O:1353628800,q:1357603200,r:1361232000,s:1364860800,t:1368489600,u:1372118400,v:1375747200,w:1379376000,x:1386633600,y:1391472000,z:1395100800,AB:1435881600,BB:1439251200,CB:1442880000,DB:1446508800,EB:1450137600,FB:1453852800,GB:1457395200,HB:1461628800,IB:1465257600,JB:1470096000,KB:1474329600,LB:1479168000,MB:1485216000,NB:1488844800,OB:1492560000,PB:1497312000,QB:1502150400,RB:1506556800,SB:1510617600,TB:1516665600,pB:1520985600,UB:1525824000,qB:1529971200,VB:1536105600,WB:1540252800,c:1544486400,XB:1548720000,YB:1552953600,ZB:1558396800,aB:1562630400,bB:1567468800,cB:1571788800,dB:1575331200,eB:1578355200,fB:1581379200,gB:1583798400,hB:1586304000,iB:1588636800,jB:1591056000,kB:1593475200,P:1595894400,Q:1598313600,R:1600732800,rB:1603152000,S:1605571200,T:1607990400,U:1611619200,V:1614038400,W:1616457600,X:1618790400,Y:1622505600,Z:1626134400,a:1628553600,d:1630972800,e:1633392000,f:1635811200,g:1638835200,h:1641859200,i:1644364800,j:1646697600,k:1649116800,l:1651536000,m:1653955200,n:1656374400,o:1658793600,b:1661212800,H:1663632000,sB:null,tB:null}},D:{A:{"0":0.004538,"1":0.008322,"2":0.008596,"3":0.004566,"4":0.004118,"5":0.00771,"6":0.003702,"7":0.004335,"8":0.004464,"9":0.01542,I:0.004706,p:0.004879,J:0.004879,D:0.005591,E:0.005591,F:0.005591,A:0.004534,B:0.004464,C:0.010424,K:0.0083,L:0.004706,G:0.015087,M:0.004393,N:0.004393,O:0.008652,q:0.008322,r:0.004393,s:0.004317,t:0.003855,u:0.008786,v:0.003939,w:0.004461,x:0.004141,y:0.004326,z:0.0047,AB:0.003867,BB:0.01542,CB:0.003702,DB:0.007734,EB:0.00771,FB:0.003867,GB:0.003867,HB:0.003867,IB:0.00771,JB:0.019275,KB:0.05397,LB:0.003867,MB:0.003801,NB:0.00771,OB:0.00771,PB:0.003867,QB:0.003855,RB:0.042405,SB:0.003855,TB:0.003702,pB:0.003702,UB:0.011565,qB:0.011565,VB:0.003855,WB:0.011565,c:0.003855,XB:0.011565,YB:0.03084,ZB:0.011565,aB:0.00771,bB:0.06168,cB:0.034695,dB:0.01542,eB:0.034695,fB:0.011565,gB:0.034695,hB:0.042405,iB:0.04626,jB:0.01542,kB:0.034695,P:0.134925,Q:0.05397,R:0.03855,S:0.06939,T:0.06168,U:0.088665,V:0.088665,W:0.104085,X:0.02313,Y:0.042405,Z:0.026985,a:0.057825,d:0.05397,e:0.050115,f:0.04626,g:0.026985,h:0.088665,i:0.0771,j:0.080955,k:0.0771,l:0.127215,m:0.1542,n:0.31611,o:6.11789,b:15.1,H:0.05397,sB:0.019275,tB:0.00771,"8B":0},B:"webkit",C:["","","","","","I","p","J","D","E","F","A","B","C","K","L","G","M","N","O","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","AB","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","NB","OB","PB","QB","RB","SB","TB","pB","UB","qB","VB","WB","c","XB","YB","ZB","aB","bB","cB","dB","eB","fB","gB","hB","iB","jB","kB","P","Q","R","S","T","U","V","W","X","Y","Z","a","d","e","f","g","h","i","j","k","l","m","n","o","b","H","sB","tB","8B"],E:"Chrome",F:{"0":1374105600,"1":1376956800,"2":1384214400,"3":1389657600,"4":1392940800,"5":1397001600,"6":1400544000,"7":1405468800,"8":1409011200,"9":1412640000,I:1264377600,p:1274745600,J:1283385600,D:1287619200,E:1291248000,F:1296777600,A:1299542400,B:1303862400,C:1307404800,K:1312243200,L:1316131200,G:1316131200,M:1319500800,N:1323734400,O:1328659200,q:1332892800,r:1337040000,s:1340668800,t:1343692800,u:1348531200,v:1352246400,w:1357862400,x:1361404800,y:1364428800,z:1369094400,AB:1416268800,BB:1421798400,CB:1425513600,DB:1429401600,EB:1432080000,FB:1437523200,GB:1441152000,HB:1444780800,IB:1449014400,JB:1453248000,KB:1456963200,LB:1460592000,MB:1464134400,NB:1469059200,OB:1472601600,PB:1476230400,QB:1480550400,RB:1485302400,SB:1489017600,TB:1492560000,pB:1496707200,UB:1500940800,qB:1504569600,VB:1508198400,WB:1512518400,c:1516752000,XB:1520294400,YB:1523923200,ZB:1527552000,aB:1532390400,bB:1536019200,cB:1539648000,dB:1543968000,eB:1548720000,fB:1552348800,gB:1555977600,hB:1559606400,iB:1564444800,jB:1568073600,kB:1571702400,P:1575936000,Q:1580860800,R:1586304000,S:1589846400,T:1594684800,U:1598313600,V:1601942400,W:1605571200,X:1611014400,Y:1614556800,Z:1618272000,a:1621987200,d:1626739200,e:1630368000,f:1632268800,g:1634601600,h:1637020800,i:1641340800,j:1643673600,k:1646092800,l:1648512000,m:1650931200,n:1653350400,o:1655769600,b:1659398400,H:1661817600,sB:null,tB:null,"8B":null}},E:{A:{I:0,p:0.008322,J:0.004656,D:0.004465,E:0.004356,F:0.004891,A:0.004425,B:0.004318,C:0.003801,K:0.03084,L:0.11565,G:0.03084,"9B":0,uB:0.008692,AC:0.011565,BC:0.00456,CC:0.004283,DC:0.01542,vB:0.00771,lB:0.02313,mB:0.042405,wB:0.25443,EC:0.32382,FC:0.057825,xB:0.05397,yB:0.17733,zB:0.68619,"0B":1.39165,nB:0.011565,"1B":0,GC:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","9B","uB","I","p","AC","J","BC","D","CC","E","F","DC","A","vB","B","lB","C","mB","K","wB","L","EC","G","FC","xB","yB","zB","0B","nB","1B","GC",""],E:"Safari",F:{"9B":1205798400,uB:1226534400,I:1244419200,p:1275868800,AC:1311120000,J:1343174400,BC:1382400000,D:1382400000,CC:1410998400,E:1413417600,F:1443657600,DC:1458518400,A:1474329600,vB:1490572800,B:1505779200,lB:1522281600,C:1537142400,mB:1553472000,K:1568851200,wB:1585008000,L:1600214400,EC:1619395200,G:1632096000,FC:1635292800,xB:1639353600,yB:1647216000,zB:1652745600,"0B":1658275200,nB:1662940800,"1B":null,GC:null}},F:{A:{"0":0.004879,"1":0.004879,"2":0.003855,"3":0.005152,"4":0.005014,"5":0.009758,"6":0.004879,"7":0.003855,"8":0.004283,"9":0.004367,F:0.0082,B:0.016581,C:0.004317,G:0.00685,M:0.00685,N:0.00685,O:0.005014,q:0.006015,r:0.004879,s:0.006597,t:0.006597,u:0.013434,v:0.006702,w:0.006015,x:0.005595,y:0.004393,z:0.00771,AB:0.004534,BB:0.00771,CB:0.004227,DB:0.004418,EB:0.004161,FB:0.004227,GB:0.004725,HB:0.011565,IB:0.008942,JB:0.004707,KB:0.004827,LB:0.004707,MB:0.004707,NB:0.004326,OB:0.008922,PB:0.014349,QB:0.004425,RB:0.00472,SB:0.004425,TB:0.004425,UB:0.00472,VB:0.004532,WB:0.004566,c:0.02283,XB:0.00867,YB:0.004656,ZB:0.004642,aB:0.003867,bB:0.00944,cB:0.004293,dB:0.003855,eB:0.004298,fB:0.096692,gB:0.004201,hB:0.004141,iB:0.004257,jB:0.003939,kB:0.008236,P:0.003855,Q:0.003939,R:0.008514,rB:0.003939,S:0.003939,T:0.003702,U:0.01542,V:0.003855,W:0.003855,X:0.019275,Y:0.844245,Z:0.08481,a:0,HC:0.00685,IC:0,JC:0.008392,KC:0.004706,lB:0.006229,"2B":0.004879,LC:0.008786,mB:0.00472},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","F","HC","IC","JC","KC","B","lB","2B","LC","C","mB","G","M","N","O","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","AB","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","NB","OB","PB","QB","RB","SB","TB","UB","VB","WB","c","XB","YB","ZB","aB","bB","cB","dB","eB","fB","gB","hB","iB","jB","kB","P","Q","R","rB","S","T","U","V","W","X","Y","Z","a","","",""],E:"Opera",F:{"0":1430179200,"1":1433808000,"2":1438646400,"3":1442448000,"4":1445904000,"5":1449100800,"6":1454371200,"7":1457308800,"8":1462320000,"9":1465344000,F:1150761600,HC:1223424000,IC:1251763200,JC:1267488000,KC:1277942400,B:1292457600,lB:1302566400,"2B":1309219200,LC:1323129600,C:1323129600,mB:1352073600,G:1372723200,M:1377561600,N:1381104000,O:1386288000,q:1390867200,r:1393891200,s:1399334400,t:1401753600,u:1405987200,v:1409616000,w:1413331200,x:1417132800,y:1422316800,z:1425945600,AB:1470096000,BB:1474329600,CB:1477267200,DB:1481587200,EB:1486425600,FB:1490054400,GB:1494374400,HB:1498003200,IB:1502236800,JB:1506470400,KB:1510099200,LB:1515024000,MB:1517961600,NB:1521676800,OB:1525910400,PB:1530144000,QB:1534982400,RB:1537833600,SB:1543363200,TB:1548201600,UB:1554768000,VB:1561593600,WB:1566259200,c:1570406400,XB:1573689600,YB:1578441600,ZB:1583971200,aB:1587513600,bB:1592956800,cB:1595894400,dB:1600128000,eB:1603238400,fB:1613520000,gB:1612224000,hB:1616544000,iB:1619568000,jB:1623715200,kB:1627948800,P:1631577600,Q:1633392000,R:1635984000,rB:1638403200,S:1642550400,T:1644969600,U:1647993600,V:1650412800,W:1652745600,X:1654646400,Y:1657152000,Z:1660780800,a:1663113600},D:{F:"o",B:"o",C:"o",HC:"o",IC:"o",JC:"o",KC:"o",lB:"o","2B":"o",LC:"o",mB:"o"}},G:{A:{E:0,uB:0,MC:0,"3B":0.00302517,NC:0.00453776,OC:0.00453776,PC:0.0151259,QC:0.00756293,RC:0.0151259,SC:0.069579,TC:0.00756293,UC:0.0816797,VC:0.0393273,WC:0.0287392,XC:0.0302517,YC:0.47949,ZC:0.0226888,aC:0.0121007,bC:0.0499154,cC:0.158822,dC:0.482515,eC:1.06637,fC:0.287392,xB:0.4326,yB:0.638312,zB:3.16887,"0B":7.91083,nB:0.105881,"1B":0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uB","MC","3B","NC","OC","PC","E","QC","RC","SC","TC","UC","VC","WC","XC","YC","ZC","aC","bC","cC","dC","eC","fC","xB","yB","zB","0B","nB","1B","",""],E:"Safari on iOS",F:{uB:1270252800,MC:1283904000,"3B":1299628800,NC:1331078400,OC:1359331200,PC:1394409600,E:1410912000,QC:1413763200,RC:1442361600,SC:1458518400,TC:1473724800,UC:1490572800,VC:1505779200,WC:1522281600,XC:1537142400,YC:1553472000,ZC:1568851200,aC:1572220800,bC:1580169600,cC:1585008000,dC:1600214400,eC:1619395200,fC:1632096000,xB:1639353600,yB:1647216000,zB:1652659200,"0B":1658275200,nB:1662940800,"1B":null}},H:{A:{gC:1.06464},B:"o",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","gC","","",""],E:"Opera Mini",F:{gC:1426464000}},I:{A:{oB:0,I:0.0643374,H:0,hC:0,iC:0,jC:0,kC:0.0350931,"3B":0.0760351,lC:0,mC:0.309989},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","hC","iC","jC","oB","I","kC","3B","lC","mC","H","","",""],E:"Android Browser",F:{hC:1256515200,iC:1274313600,jC:1291593600,oB:1298332800,I:1318896000,kC:1341792000,"3B":1374624000,lC:1386547200,mC:1401667200,H:1662336000}},J:{A:{D:0,A:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","D","A","","",""],E:"Blackberry Browser",F:{D:1325376000,A:1359504000}},K:{A:{A:0,B:0,C:0,c:0.0111391,lB:0,"2B":0,mB:0},B:"o",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A","B","lB","2B","C","mB","c","","",""],E:"Opera Mobile",F:{A:1287100800,B:1300752000,lB:1314835200,"2B":1318291200,C:1330300800,mB:1349740800,c:1613433600},D:{c:"webkit"}},L:{A:{H:42.0211},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","H","","",""],E:"Chrome for Android",F:{H:1662336000}},M:{A:{b:0.31954},B:"moz",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","b","","",""],E:"Firefox for Android",F:{b:1661212800}},N:{A:{A:0.0115934,B:0.022664},B:"ms",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A","B","","",""],E:"IE Mobile",F:{A:1340150400,B:1353456000}},O:{A:{nC:0.743545},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","nC","","",""],E:"UC Browser for Android",F:{nC:1634688000},D:{nC:"webkit"}},P:{A:{I:0.177554,oC:0.0103543,pC:0.010304,qC:0.062666,rC:0.0103584,sC:0.0104443,vB:0.0105043,tC:0.0417773,uC:0.0208887,vC:0.062666,wC:0.062666,xC:0.0731103,nB:0.135776,yC:1.00266,zC:1.30554},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","I","oC","pC","qC","rC","sC","vB","tC","uC","vC","wC","xC","nB","yC","zC","","",""],E:"Samsung Internet",F:{I:1461024000,oC:1481846400,pC:1509408000,qC:1528329600,rC:1546128000,sC:1554163200,vB:1567900800,tC:1582588800,uC:1593475200,vC:1605657600,wC:1618531200,xC:1629072000,nB:1640736000,yC:1651708800,zC:1659657600}},Q:{A:{wB:0.141335},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","wB","","",""],E:"QQ Browser",F:{wB:1663718400}},R:{A:{"0C":0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","0C","","",""],E:"Baidu Browser",F:{"0C":1663027200}},S:{A:{"1C":0.02458},B:"moz",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","1C","","",""],E:"KaiOS Browser",F:{"1C":1527811200}}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/browserVersions.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/browserVersions.js index 4624d93a58e..0331a779edd 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/browserVersions.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/browserVersions.js @@ -1 +1 @@ -module.exports={"0":"35","1":"36","2":"37","3":"38","4":"39","5":"40","6":"41","7":"42","8":"43","9":"44",A:"10",B:"11",C:"12",D:"7",E:"8",F:"9",G:"15",H:"98",I:"4",J:"6",K:"13",L:"14",M:"16",N:"17",O:"18",P:"79",Q:"80",R:"81",S:"83",T:"96",U:"64",V:"84",W:"85",X:"86",Y:"87",Z:"88",a:"89",b:"90",c:"91",d:"92",e:"93",f:"94",g:"95",h:"97",i:"99",j:"5",k:"19",l:"20",m:"21",n:"22",o:"23",p:"24",q:"25",r:"26",s:"27",t:"28",u:"29",v:"30",w:"31",x:"32",y:"33",z:"34",AB:"45",BB:"46",CB:"47",DB:"48",EB:"49",FB:"50",GB:"51",HB:"52",IB:"53",JB:"54",KB:"55",LB:"56",MB:"57",NB:"58",OB:"60",PB:"62",QB:"63",RB:"65",SB:"66",TB:"67",UB:"68",VB:"69",WB:"70",XB:"71",YB:"72",ZB:"73",aB:"74",bB:"75",cB:"76",dB:"77",eB:"78",fB:"11.1",gB:"12.1",hB:"3",iB:"59",jB:"61",kB:"82",lB:"3.2",mB:"10.1",nB:"15.2-15.3",oB:"15.4",pB:"11.5",qB:"4.2-4.3",rB:"5.5",sB:"2",tB:"3.5",uB:"3.6",vB:"100",wB:"101",xB:"102",yB:"3.1",zB:"5.1","0B":"6.1","1B":"7.1","2B":"9.1","3B":"13.1","4B":"14.1","5B":"15.1","6B":"TP","7B":"9.5-9.6","8B":"10.0-10.1","9B":"10.5",AC:"10.6",BC:"11.6",CC:"4.0-4.1",DC:"5.0-5.1",EC:"6.0-6.1",FC:"7.0-7.1",GC:"8.1-8.4",HC:"9.0-9.2",IC:"9.3",JC:"10.0-10.2",KC:"10.3",LC:"11.0-11.2",MC:"11.3-11.4",NC:"12.0-12.1",OC:"12.2-12.5",PC:"13.0-13.1",QC:"13.2",RC:"13.3",SC:"13.4-13.7",TC:"14.0-14.4",UC:"14.5-14.8",VC:"15.0-15.1",WC:"all",XC:"2.1",YC:"2.2",ZC:"2.3",aC:"4.1",bC:"4.4",cC:"4.4.3-4.4.4",dC:"12.12",eC:"5.0-5.4",fC:"6.2-6.4",gC:"7.2-7.4",hC:"8.2",iC:"9.2",jC:"11.1-11.2",kC:"12.0",lC:"13.0",mC:"14.0",nC:"15.0",oC:"16.0",pC:"10.4",qC:"7.12",rC:"2.5"}; +module.exports={"0":"29","1":"30","2":"31","3":"32","4":"33","5":"34","6":"35","7":"36","8":"37","9":"38",A:"10",B:"11",C:"12",D:"7",E:"8",F:"9",G:"15",H:"105",I:"4",J:"6",K:"13",L:"14",M:"16",N:"17",O:"18",P:"79",Q:"80",R:"81",S:"83",T:"84",U:"85",V:"86",W:"87",X:"88",Y:"89",Z:"90",a:"91",b:"104",c:"64",d:"92",e:"93",f:"94",g:"95",h:"96",i:"97",j:"98",k:"99",l:"100",m:"101",n:"102",o:"103",p:"5",q:"19",r:"20",s:"21",t:"22",u:"23",v:"24",w:"25",x:"26",y:"27",z:"28",AB:"39",BB:"40",CB:"41",DB:"42",EB:"43",FB:"44",GB:"45",HB:"46",IB:"47",JB:"48",KB:"49",LB:"50",MB:"51",NB:"52",OB:"53",PB:"54",QB:"55",RB:"56",SB:"57",TB:"58",UB:"60",VB:"62",WB:"63",XB:"65",YB:"66",ZB:"67",aB:"68",bB:"69",cB:"70",dB:"71",eB:"72",fB:"73",gB:"74",hB:"75",iB:"76",jB:"77",kB:"78",lB:"11.1",mB:"12.1",nB:"16.0",oB:"3",pB:"59",qB:"61",rB:"82",sB:"106",tB:"107",uB:"3.2",vB:"10.1",wB:"13.1",xB:"15.2-15.3",yB:"15.4",zB:"15.5","0B":"15.6","1B":"16.1","2B":"11.5","3B":"4.2-4.3","4B":"5.5","5B":"2","6B":"3.5","7B":"3.6","8B":"108","9B":"3.1",AC:"5.1",BC:"6.1",CC:"7.1",DC:"9.1",EC:"14.1",FC:"15.1",GC:"TP",HC:"9.5-9.6",IC:"10.0-10.1",JC:"10.5",KC:"10.6",LC:"11.6",MC:"4.0-4.1",NC:"5.0-5.1",OC:"6.0-6.1",PC:"7.0-7.1",QC:"8.1-8.4",RC:"9.0-9.2",SC:"9.3",TC:"10.0-10.2",UC:"10.3",VC:"11.0-11.2",WC:"11.3-11.4",XC:"12.0-12.1",YC:"12.2-12.5",ZC:"13.0-13.1",aC:"13.2",bC:"13.3",cC:"13.4-13.7",dC:"14.0-14.4",eC:"14.5-14.8",fC:"15.0-15.1",gC:"all",hC:"2.1",iC:"2.2",jC:"2.3",kC:"4.1",lC:"4.4",mC:"4.4.3-4.4.4",nC:"13.4",oC:"5.0-5.4",pC:"6.2-6.4",qC:"7.2-7.4",rC:"8.2",sC:"9.2",tC:"11.1-11.2",uC:"12.0",vC:"13.0",wC:"14.0",xC:"15.0",yC:"17.0",zC:"18.0","0C":"13.18","1C":"2.5"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features.js index 9cd4be5d0b8..f3e4d728352 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features.js @@ -1 +1 @@ -module.exports={"aac":require("./features/aac"),"abortcontroller":require("./features/abortcontroller"),"ac3-ec3":require("./features/ac3-ec3"),"accelerometer":require("./features/accelerometer"),"addeventlistener":require("./features/addeventlistener"),"alternate-stylesheet":require("./features/alternate-stylesheet"),"ambient-light":require("./features/ambient-light"),"apng":require("./features/apng"),"array-find-index":require("./features/array-find-index"),"array-find":require("./features/array-find"),"array-flat":require("./features/array-flat"),"array-includes":require("./features/array-includes"),"arrow-functions":require("./features/arrow-functions"),"asmjs":require("./features/asmjs"),"async-clipboard":require("./features/async-clipboard"),"async-functions":require("./features/async-functions"),"atob-btoa":require("./features/atob-btoa"),"audio-api":require("./features/audio-api"),"audio":require("./features/audio"),"audiotracks":require("./features/audiotracks"),"autofocus":require("./features/autofocus"),"auxclick":require("./features/auxclick"),"av1":require("./features/av1"),"avif":require("./features/avif"),"background-attachment":require("./features/background-attachment"),"background-clip-text":require("./features/background-clip-text"),"background-img-opts":require("./features/background-img-opts"),"background-position-x-y":require("./features/background-position-x-y"),"background-repeat-round-space":require("./features/background-repeat-round-space"),"background-sync":require("./features/background-sync"),"battery-status":require("./features/battery-status"),"beacon":require("./features/beacon"),"beforeafterprint":require("./features/beforeafterprint"),"bigint":require("./features/bigint"),"blobbuilder":require("./features/blobbuilder"),"bloburls":require("./features/bloburls"),"border-image":require("./features/border-image"),"border-radius":require("./features/border-radius"),"broadcastchannel":require("./features/broadcastchannel"),"brotli":require("./features/brotli"),"calc":require("./features/calc"),"canvas-blending":require("./features/canvas-blending"),"canvas-text":require("./features/canvas-text"),"canvas":require("./features/canvas"),"ch-unit":require("./features/ch-unit"),"chacha20-poly1305":require("./features/chacha20-poly1305"),"channel-messaging":require("./features/channel-messaging"),"childnode-remove":require("./features/childnode-remove"),"classlist":require("./features/classlist"),"client-hints-dpr-width-viewport":require("./features/client-hints-dpr-width-viewport"),"clipboard":require("./features/clipboard"),"colr-v1":require("./features/colr-v1"),"colr":require("./features/colr"),"comparedocumentposition":require("./features/comparedocumentposition"),"console-basic":require("./features/console-basic"),"console-time":require("./features/console-time"),"const":require("./features/const"),"constraint-validation":require("./features/constraint-validation"),"contenteditable":require("./features/contenteditable"),"contentsecuritypolicy":require("./features/contentsecuritypolicy"),"contentsecuritypolicy2":require("./features/contentsecuritypolicy2"),"cookie-store-api":require("./features/cookie-store-api"),"cors":require("./features/cors"),"createimagebitmap":require("./features/createimagebitmap"),"credential-management":require("./features/credential-management"),"cryptography":require("./features/cryptography"),"css-all":require("./features/css-all"),"css-animation":require("./features/css-animation"),"css-any-link":require("./features/css-any-link"),"css-appearance":require("./features/css-appearance"),"css-at-counter-style":require("./features/css-at-counter-style"),"css-autofill":require("./features/css-autofill"),"css-backdrop-filter":require("./features/css-backdrop-filter"),"css-background-offsets":require("./features/css-background-offsets"),"css-backgroundblendmode":require("./features/css-backgroundblendmode"),"css-boxdecorationbreak":require("./features/css-boxdecorationbreak"),"css-boxshadow":require("./features/css-boxshadow"),"css-canvas":require("./features/css-canvas"),"css-caret-color":require("./features/css-caret-color"),"css-cascade-layers":require("./features/css-cascade-layers"),"css-case-insensitive":require("./features/css-case-insensitive"),"css-clip-path":require("./features/css-clip-path"),"css-color-adjust":require("./features/css-color-adjust"),"css-color-function":require("./features/css-color-function"),"css-conic-gradients":require("./features/css-conic-gradients"),"css-container-queries":require("./features/css-container-queries"),"css-containment":require("./features/css-containment"),"css-content-visibility":require("./features/css-content-visibility"),"css-counters":require("./features/css-counters"),"css-crisp-edges":require("./features/css-crisp-edges"),"css-cross-fade":require("./features/css-cross-fade"),"css-default-pseudo":require("./features/css-default-pseudo"),"css-descendant-gtgt":require("./features/css-descendant-gtgt"),"css-deviceadaptation":require("./features/css-deviceadaptation"),"css-dir-pseudo":require("./features/css-dir-pseudo"),"css-display-contents":require("./features/css-display-contents"),"css-element-function":require("./features/css-element-function"),"css-env-function":require("./features/css-env-function"),"css-exclusions":require("./features/css-exclusions"),"css-featurequeries":require("./features/css-featurequeries"),"css-file-selector-button":require("./features/css-file-selector-button"),"css-filter-function":require("./features/css-filter-function"),"css-filters":require("./features/css-filters"),"css-first-letter":require("./features/css-first-letter"),"css-first-line":require("./features/css-first-line"),"css-fixed":require("./features/css-fixed"),"css-focus-visible":require("./features/css-focus-visible"),"css-focus-within":require("./features/css-focus-within"),"css-font-rendering-controls":require("./features/css-font-rendering-controls"),"css-font-stretch":require("./features/css-font-stretch"),"css-gencontent":require("./features/css-gencontent"),"css-gradients":require("./features/css-gradients"),"css-grid":require("./features/css-grid"),"css-hanging-punctuation":require("./features/css-hanging-punctuation"),"css-has":require("./features/css-has"),"css-hyphenate":require("./features/css-hyphenate"),"css-hyphens":require("./features/css-hyphens"),"css-image-orientation":require("./features/css-image-orientation"),"css-image-set":require("./features/css-image-set"),"css-in-out-of-range":require("./features/css-in-out-of-range"),"css-indeterminate-pseudo":require("./features/css-indeterminate-pseudo"),"css-initial-letter":require("./features/css-initial-letter"),"css-initial-value":require("./features/css-initial-value"),"css-lch-lab":require("./features/css-lch-lab"),"css-letter-spacing":require("./features/css-letter-spacing"),"css-line-clamp":require("./features/css-line-clamp"),"css-logical-props":require("./features/css-logical-props"),"css-marker-pseudo":require("./features/css-marker-pseudo"),"css-masks":require("./features/css-masks"),"css-matches-pseudo":require("./features/css-matches-pseudo"),"css-math-functions":require("./features/css-math-functions"),"css-media-interaction":require("./features/css-media-interaction"),"css-media-resolution":require("./features/css-media-resolution"),"css-media-scripting":require("./features/css-media-scripting"),"css-mediaqueries":require("./features/css-mediaqueries"),"css-mixblendmode":require("./features/css-mixblendmode"),"css-motion-paths":require("./features/css-motion-paths"),"css-namespaces":require("./features/css-namespaces"),"css-nesting":require("./features/css-nesting"),"css-not-sel-list":require("./features/css-not-sel-list"),"css-nth-child-of":require("./features/css-nth-child-of"),"css-opacity":require("./features/css-opacity"),"css-optional-pseudo":require("./features/css-optional-pseudo"),"css-overflow-anchor":require("./features/css-overflow-anchor"),"css-overflow-overlay":require("./features/css-overflow-overlay"),"css-overflow":require("./features/css-overflow"),"css-overscroll-behavior":require("./features/css-overscroll-behavior"),"css-page-break":require("./features/css-page-break"),"css-paged-media":require("./features/css-paged-media"),"css-paint-api":require("./features/css-paint-api"),"css-placeholder-shown":require("./features/css-placeholder-shown"),"css-placeholder":require("./features/css-placeholder"),"css-read-only-write":require("./features/css-read-only-write"),"css-rebeccapurple":require("./features/css-rebeccapurple"),"css-reflections":require("./features/css-reflections"),"css-regions":require("./features/css-regions"),"css-repeating-gradients":require("./features/css-repeating-gradients"),"css-resize":require("./features/css-resize"),"css-revert-value":require("./features/css-revert-value"),"css-rrggbbaa":require("./features/css-rrggbbaa"),"css-scroll-behavior":require("./features/css-scroll-behavior"),"css-scroll-timeline":require("./features/css-scroll-timeline"),"css-scrollbar":require("./features/css-scrollbar"),"css-sel2":require("./features/css-sel2"),"css-sel3":require("./features/css-sel3"),"css-selection":require("./features/css-selection"),"css-shapes":require("./features/css-shapes"),"css-snappoints":require("./features/css-snappoints"),"css-sticky":require("./features/css-sticky"),"css-subgrid":require("./features/css-subgrid"),"css-supports-api":require("./features/css-supports-api"),"css-table":require("./features/css-table"),"css-text-align-last":require("./features/css-text-align-last"),"css-text-indent":require("./features/css-text-indent"),"css-text-justify":require("./features/css-text-justify"),"css-text-orientation":require("./features/css-text-orientation"),"css-text-spacing":require("./features/css-text-spacing"),"css-textshadow":require("./features/css-textshadow"),"css-touch-action-2":require("./features/css-touch-action-2"),"css-touch-action":require("./features/css-touch-action"),"css-transitions":require("./features/css-transitions"),"css-unicode-bidi":require("./features/css-unicode-bidi"),"css-unset-value":require("./features/css-unset-value"),"css-variables":require("./features/css-variables"),"css-when-else":require("./features/css-when-else"),"css-widows-orphans":require("./features/css-widows-orphans"),"css-width-stretch":require("./features/css-width-stretch"),"css-writing-mode":require("./features/css-writing-mode"),"css-zoom":require("./features/css-zoom"),"css3-attr":require("./features/css3-attr"),"css3-boxsizing":require("./features/css3-boxsizing"),"css3-colors":require("./features/css3-colors"),"css3-cursors-grab":require("./features/css3-cursors-grab"),"css3-cursors-newer":require("./features/css3-cursors-newer"),"css3-cursors":require("./features/css3-cursors"),"css3-tabsize":require("./features/css3-tabsize"),"currentcolor":require("./features/currentcolor"),"custom-elements":require("./features/custom-elements"),"custom-elementsv1":require("./features/custom-elementsv1"),"customevent":require("./features/customevent"),"datalist":require("./features/datalist"),"dataset":require("./features/dataset"),"datauri":require("./features/datauri"),"date-tolocaledatestring":require("./features/date-tolocaledatestring"),"decorators":require("./features/decorators"),"details":require("./features/details"),"deviceorientation":require("./features/deviceorientation"),"devicepixelratio":require("./features/devicepixelratio"),"dialog":require("./features/dialog"),"dispatchevent":require("./features/dispatchevent"),"dnssec":require("./features/dnssec"),"do-not-track":require("./features/do-not-track"),"document-currentscript":require("./features/document-currentscript"),"document-evaluate-xpath":require("./features/document-evaluate-xpath"),"document-execcommand":require("./features/document-execcommand"),"document-policy":require("./features/document-policy"),"document-scrollingelement":require("./features/document-scrollingelement"),"documenthead":require("./features/documenthead"),"dom-manip-convenience":require("./features/dom-manip-convenience"),"dom-range":require("./features/dom-range"),"domcontentloaded":require("./features/domcontentloaded"),"domfocusin-domfocusout-events":require("./features/domfocusin-domfocusout-events"),"dommatrix":require("./features/dommatrix"),"download":require("./features/download"),"dragndrop":require("./features/dragndrop"),"element-closest":require("./features/element-closest"),"element-from-point":require("./features/element-from-point"),"element-scroll-methods":require("./features/element-scroll-methods"),"eme":require("./features/eme"),"eot":require("./features/eot"),"es5":require("./features/es5"),"es6-class":require("./features/es6-class"),"es6-generators":require("./features/es6-generators"),"es6-module-dynamic-import":require("./features/es6-module-dynamic-import"),"es6-module":require("./features/es6-module"),"es6-number":require("./features/es6-number"),"es6-string-includes":require("./features/es6-string-includes"),"es6":require("./features/es6"),"eventsource":require("./features/eventsource"),"extended-system-fonts":require("./features/extended-system-fonts"),"feature-policy":require("./features/feature-policy"),"fetch":require("./features/fetch"),"fieldset-disabled":require("./features/fieldset-disabled"),"fileapi":require("./features/fileapi"),"filereader":require("./features/filereader"),"filereadersync":require("./features/filereadersync"),"filesystem":require("./features/filesystem"),"flac":require("./features/flac"),"flexbox-gap":require("./features/flexbox-gap"),"flexbox":require("./features/flexbox"),"flow-root":require("./features/flow-root"),"focusin-focusout-events":require("./features/focusin-focusout-events"),"focusoptions-preventscroll":require("./features/focusoptions-preventscroll"),"font-family-system-ui":require("./features/font-family-system-ui"),"font-feature":require("./features/font-feature"),"font-kerning":require("./features/font-kerning"),"font-loading":require("./features/font-loading"),"font-metrics-overrides":require("./features/font-metrics-overrides"),"font-size-adjust":require("./features/font-size-adjust"),"font-smooth":require("./features/font-smooth"),"font-unicode-range":require("./features/font-unicode-range"),"font-variant-alternates":require("./features/font-variant-alternates"),"font-variant-east-asian":require("./features/font-variant-east-asian"),"font-variant-numeric":require("./features/font-variant-numeric"),"fontface":require("./features/fontface"),"form-attribute":require("./features/form-attribute"),"form-submit-attributes":require("./features/form-submit-attributes"),"form-validation":require("./features/form-validation"),"forms":require("./features/forms"),"fullscreen":require("./features/fullscreen"),"gamepad":require("./features/gamepad"),"geolocation":require("./features/geolocation"),"getboundingclientrect":require("./features/getboundingclientrect"),"getcomputedstyle":require("./features/getcomputedstyle"),"getelementsbyclassname":require("./features/getelementsbyclassname"),"getrandomvalues":require("./features/getrandomvalues"),"gyroscope":require("./features/gyroscope"),"hardwareconcurrency":require("./features/hardwareconcurrency"),"hashchange":require("./features/hashchange"),"heif":require("./features/heif"),"hevc":require("./features/hevc"),"hidden":require("./features/hidden"),"high-resolution-time":require("./features/high-resolution-time"),"history":require("./features/history"),"html-media-capture":require("./features/html-media-capture"),"html5semantic":require("./features/html5semantic"),"http-live-streaming":require("./features/http-live-streaming"),"http2":require("./features/http2"),"http3":require("./features/http3"),"iframe-sandbox":require("./features/iframe-sandbox"),"iframe-seamless":require("./features/iframe-seamless"),"iframe-srcdoc":require("./features/iframe-srcdoc"),"imagecapture":require("./features/imagecapture"),"ime":require("./features/ime"),"img-naturalwidth-naturalheight":require("./features/img-naturalwidth-naturalheight"),"import-maps":require("./features/import-maps"),"imports":require("./features/imports"),"indeterminate-checkbox":require("./features/indeterminate-checkbox"),"indexeddb":require("./features/indexeddb"),"indexeddb2":require("./features/indexeddb2"),"inline-block":require("./features/inline-block"),"innertext":require("./features/innertext"),"input-autocomplete-onoff":require("./features/input-autocomplete-onoff"),"input-color":require("./features/input-color"),"input-datetime":require("./features/input-datetime"),"input-email-tel-url":require("./features/input-email-tel-url"),"input-event":require("./features/input-event"),"input-file-accept":require("./features/input-file-accept"),"input-file-directory":require("./features/input-file-directory"),"input-file-multiple":require("./features/input-file-multiple"),"input-inputmode":require("./features/input-inputmode"),"input-minlength":require("./features/input-minlength"),"input-number":require("./features/input-number"),"input-pattern":require("./features/input-pattern"),"input-placeholder":require("./features/input-placeholder"),"input-range":require("./features/input-range"),"input-search":require("./features/input-search"),"input-selection":require("./features/input-selection"),"insert-adjacent":require("./features/insert-adjacent"),"insertadjacenthtml":require("./features/insertadjacenthtml"),"internationalization":require("./features/internationalization"),"intersectionobserver-v2":require("./features/intersectionobserver-v2"),"intersectionobserver":require("./features/intersectionobserver"),"intl-pluralrules":require("./features/intl-pluralrules"),"intrinsic-width":require("./features/intrinsic-width"),"jpeg2000":require("./features/jpeg2000"),"jpegxl":require("./features/jpegxl"),"jpegxr":require("./features/jpegxr"),"js-regexp-lookbehind":require("./features/js-regexp-lookbehind"),"json":require("./features/json"),"justify-content-space-evenly":require("./features/justify-content-space-evenly"),"kerning-pairs-ligatures":require("./features/kerning-pairs-ligatures"),"keyboardevent-charcode":require("./features/keyboardevent-charcode"),"keyboardevent-code":require("./features/keyboardevent-code"),"keyboardevent-getmodifierstate":require("./features/keyboardevent-getmodifierstate"),"keyboardevent-key":require("./features/keyboardevent-key"),"keyboardevent-location":require("./features/keyboardevent-location"),"keyboardevent-which":require("./features/keyboardevent-which"),"lazyload":require("./features/lazyload"),"let":require("./features/let"),"link-icon-png":require("./features/link-icon-png"),"link-icon-svg":require("./features/link-icon-svg"),"link-rel-dns-prefetch":require("./features/link-rel-dns-prefetch"),"link-rel-modulepreload":require("./features/link-rel-modulepreload"),"link-rel-preconnect":require("./features/link-rel-preconnect"),"link-rel-prefetch":require("./features/link-rel-prefetch"),"link-rel-preload":require("./features/link-rel-preload"),"link-rel-prerender":require("./features/link-rel-prerender"),"loading-lazy-attr":require("./features/loading-lazy-attr"),"localecompare":require("./features/localecompare"),"magnetometer":require("./features/magnetometer"),"matchesselector":require("./features/matchesselector"),"matchmedia":require("./features/matchmedia"),"mathml":require("./features/mathml"),"maxlength":require("./features/maxlength"),"media-attribute":require("./features/media-attribute"),"media-fragments":require("./features/media-fragments"),"media-session-api":require("./features/media-session-api"),"mediacapture-fromelement":require("./features/mediacapture-fromelement"),"mediarecorder":require("./features/mediarecorder"),"mediasource":require("./features/mediasource"),"menu":require("./features/menu"),"meta-theme-color":require("./features/meta-theme-color"),"meter":require("./features/meter"),"midi":require("./features/midi"),"minmaxwh":require("./features/minmaxwh"),"mp3":require("./features/mp3"),"mpeg-dash":require("./features/mpeg-dash"),"mpeg4":require("./features/mpeg4"),"multibackgrounds":require("./features/multibackgrounds"),"multicolumn":require("./features/multicolumn"),"mutation-events":require("./features/mutation-events"),"mutationobserver":require("./features/mutationobserver"),"namevalue-storage":require("./features/namevalue-storage"),"native-filesystem-api":require("./features/native-filesystem-api"),"nav-timing":require("./features/nav-timing"),"navigator-language":require("./features/navigator-language"),"netinfo":require("./features/netinfo"),"notifications":require("./features/notifications"),"object-entries":require("./features/object-entries"),"object-fit":require("./features/object-fit"),"object-observe":require("./features/object-observe"),"object-values":require("./features/object-values"),"objectrtc":require("./features/objectrtc"),"offline-apps":require("./features/offline-apps"),"offscreencanvas":require("./features/offscreencanvas"),"ogg-vorbis":require("./features/ogg-vorbis"),"ogv":require("./features/ogv"),"ol-reversed":require("./features/ol-reversed"),"once-event-listener":require("./features/once-event-listener"),"online-status":require("./features/online-status"),"opus":require("./features/opus"),"orientation-sensor":require("./features/orientation-sensor"),"outline":require("./features/outline"),"pad-start-end":require("./features/pad-start-end"),"page-transition-events":require("./features/page-transition-events"),"pagevisibility":require("./features/pagevisibility"),"passive-event-listener":require("./features/passive-event-listener"),"passwordrules":require("./features/passwordrules"),"path2d":require("./features/path2d"),"payment-request":require("./features/payment-request"),"pdf-viewer":require("./features/pdf-viewer"),"permissions-api":require("./features/permissions-api"),"permissions-policy":require("./features/permissions-policy"),"picture-in-picture":require("./features/picture-in-picture"),"picture":require("./features/picture"),"ping":require("./features/ping"),"png-alpha":require("./features/png-alpha"),"pointer-events":require("./features/pointer-events"),"pointer":require("./features/pointer"),"pointerlock":require("./features/pointerlock"),"portals":require("./features/portals"),"prefers-color-scheme":require("./features/prefers-color-scheme"),"prefers-reduced-motion":require("./features/prefers-reduced-motion"),"private-class-fields":require("./features/private-class-fields"),"private-methods-and-accessors":require("./features/private-methods-and-accessors"),"progress":require("./features/progress"),"promise-finally":require("./features/promise-finally"),"promises":require("./features/promises"),"proximity":require("./features/proximity"),"proxy":require("./features/proxy"),"public-class-fields":require("./features/public-class-fields"),"publickeypinning":require("./features/publickeypinning"),"push-api":require("./features/push-api"),"queryselector":require("./features/queryselector"),"readonly-attr":require("./features/readonly-attr"),"referrer-policy":require("./features/referrer-policy"),"registerprotocolhandler":require("./features/registerprotocolhandler"),"rel-noopener":require("./features/rel-noopener"),"rel-noreferrer":require("./features/rel-noreferrer"),"rellist":require("./features/rellist"),"rem":require("./features/rem"),"requestanimationframe":require("./features/requestanimationframe"),"requestidlecallback":require("./features/requestidlecallback"),"resizeobserver":require("./features/resizeobserver"),"resource-timing":require("./features/resource-timing"),"rest-parameters":require("./features/rest-parameters"),"rtcpeerconnection":require("./features/rtcpeerconnection"),"ruby":require("./features/ruby"),"run-in":require("./features/run-in"),"same-site-cookie-attribute":require("./features/same-site-cookie-attribute"),"screen-orientation":require("./features/screen-orientation"),"script-async":require("./features/script-async"),"script-defer":require("./features/script-defer"),"scrollintoview":require("./features/scrollintoview"),"scrollintoviewifneeded":require("./features/scrollintoviewifneeded"),"sdch":require("./features/sdch"),"selection-api":require("./features/selection-api"),"server-timing":require("./features/server-timing"),"serviceworkers":require("./features/serviceworkers"),"setimmediate":require("./features/setimmediate"),"sha-2":require("./features/sha-2"),"shadowdom":require("./features/shadowdom"),"shadowdomv1":require("./features/shadowdomv1"),"sharedarraybuffer":require("./features/sharedarraybuffer"),"sharedworkers":require("./features/sharedworkers"),"sni":require("./features/sni"),"spdy":require("./features/spdy"),"speech-recognition":require("./features/speech-recognition"),"speech-synthesis":require("./features/speech-synthesis"),"spellcheck-attribute":require("./features/spellcheck-attribute"),"sql-storage":require("./features/sql-storage"),"srcset":require("./features/srcset"),"stream":require("./features/stream"),"streams":require("./features/streams"),"stricttransportsecurity":require("./features/stricttransportsecurity"),"style-scoped":require("./features/style-scoped"),"subresource-integrity":require("./features/subresource-integrity"),"svg-css":require("./features/svg-css"),"svg-filters":require("./features/svg-filters"),"svg-fonts":require("./features/svg-fonts"),"svg-fragment":require("./features/svg-fragment"),"svg-html":require("./features/svg-html"),"svg-html5":require("./features/svg-html5"),"svg-img":require("./features/svg-img"),"svg-smil":require("./features/svg-smil"),"svg":require("./features/svg"),"sxg":require("./features/sxg"),"tabindex-attr":require("./features/tabindex-attr"),"template-literals":require("./features/template-literals"),"template":require("./features/template"),"temporal":require("./features/temporal"),"testfeat":require("./features/testfeat"),"text-decoration":require("./features/text-decoration"),"text-emphasis":require("./features/text-emphasis"),"text-overflow":require("./features/text-overflow"),"text-size-adjust":require("./features/text-size-adjust"),"text-stroke":require("./features/text-stroke"),"text-underline-offset":require("./features/text-underline-offset"),"textcontent":require("./features/textcontent"),"textencoder":require("./features/textencoder"),"tls1-1":require("./features/tls1-1"),"tls1-2":require("./features/tls1-2"),"tls1-3":require("./features/tls1-3"),"token-binding":require("./features/token-binding"),"touch":require("./features/touch"),"transforms2d":require("./features/transforms2d"),"transforms3d":require("./features/transforms3d"),"trusted-types":require("./features/trusted-types"),"ttf":require("./features/ttf"),"typedarrays":require("./features/typedarrays"),"u2f":require("./features/u2f"),"unhandledrejection":require("./features/unhandledrejection"),"upgradeinsecurerequests":require("./features/upgradeinsecurerequests"),"url-scroll-to-text-fragment":require("./features/url-scroll-to-text-fragment"),"url":require("./features/url"),"urlsearchparams":require("./features/urlsearchparams"),"use-strict":require("./features/use-strict"),"user-select-none":require("./features/user-select-none"),"user-timing":require("./features/user-timing"),"variable-fonts":require("./features/variable-fonts"),"vector-effect":require("./features/vector-effect"),"vibration":require("./features/vibration"),"video":require("./features/video"),"videotracks":require("./features/videotracks"),"viewport-unit-variants":require("./features/viewport-unit-variants"),"viewport-units":require("./features/viewport-units"),"wai-aria":require("./features/wai-aria"),"wake-lock":require("./features/wake-lock"),"wasm":require("./features/wasm"),"wav":require("./features/wav"),"wbr-element":require("./features/wbr-element"),"web-animation":require("./features/web-animation"),"web-app-manifest":require("./features/web-app-manifest"),"web-bluetooth":require("./features/web-bluetooth"),"web-serial":require("./features/web-serial"),"web-share":require("./features/web-share"),"webauthn":require("./features/webauthn"),"webgl":require("./features/webgl"),"webgl2":require("./features/webgl2"),"webgpu":require("./features/webgpu"),"webhid":require("./features/webhid"),"webkit-user-drag":require("./features/webkit-user-drag"),"webm":require("./features/webm"),"webnfc":require("./features/webnfc"),"webp":require("./features/webp"),"websockets":require("./features/websockets"),"webusb":require("./features/webusb"),"webvr":require("./features/webvr"),"webvtt":require("./features/webvtt"),"webworkers":require("./features/webworkers"),"webxr":require("./features/webxr"),"will-change":require("./features/will-change"),"woff":require("./features/woff"),"woff2":require("./features/woff2"),"word-break":require("./features/word-break"),"wordwrap":require("./features/wordwrap"),"x-doc-messaging":require("./features/x-doc-messaging"),"x-frame-options":require("./features/x-frame-options"),"xhr2":require("./features/xhr2"),"xhtml":require("./features/xhtml"),"xhtmlsmil":require("./features/xhtmlsmil"),"xml-serializer":require("./features/xml-serializer")}; +module.exports={"aac":require("./features/aac"),"abortcontroller":require("./features/abortcontroller"),"ac3-ec3":require("./features/ac3-ec3"),"accelerometer":require("./features/accelerometer"),"addeventlistener":require("./features/addeventlistener"),"alternate-stylesheet":require("./features/alternate-stylesheet"),"ambient-light":require("./features/ambient-light"),"apng":require("./features/apng"),"array-find-index":require("./features/array-find-index"),"array-find":require("./features/array-find"),"array-flat":require("./features/array-flat"),"array-includes":require("./features/array-includes"),"arrow-functions":require("./features/arrow-functions"),"asmjs":require("./features/asmjs"),"async-clipboard":require("./features/async-clipboard"),"async-functions":require("./features/async-functions"),"atob-btoa":require("./features/atob-btoa"),"audio-api":require("./features/audio-api"),"audio":require("./features/audio"),"audiotracks":require("./features/audiotracks"),"autofocus":require("./features/autofocus"),"auxclick":require("./features/auxclick"),"av1":require("./features/av1"),"avif":require("./features/avif"),"background-attachment":require("./features/background-attachment"),"background-clip-text":require("./features/background-clip-text"),"background-img-opts":require("./features/background-img-opts"),"background-position-x-y":require("./features/background-position-x-y"),"background-repeat-round-space":require("./features/background-repeat-round-space"),"background-sync":require("./features/background-sync"),"battery-status":require("./features/battery-status"),"beacon":require("./features/beacon"),"beforeafterprint":require("./features/beforeafterprint"),"bigint":require("./features/bigint"),"blobbuilder":require("./features/blobbuilder"),"bloburls":require("./features/bloburls"),"border-image":require("./features/border-image"),"border-radius":require("./features/border-radius"),"broadcastchannel":require("./features/broadcastchannel"),"brotli":require("./features/brotli"),"calc":require("./features/calc"),"canvas-blending":require("./features/canvas-blending"),"canvas-text":require("./features/canvas-text"),"canvas":require("./features/canvas"),"ch-unit":require("./features/ch-unit"),"chacha20-poly1305":require("./features/chacha20-poly1305"),"channel-messaging":require("./features/channel-messaging"),"childnode-remove":require("./features/childnode-remove"),"classlist":require("./features/classlist"),"client-hints-dpr-width-viewport":require("./features/client-hints-dpr-width-viewport"),"clipboard":require("./features/clipboard"),"colr-v1":require("./features/colr-v1"),"colr":require("./features/colr"),"comparedocumentposition":require("./features/comparedocumentposition"),"console-basic":require("./features/console-basic"),"console-time":require("./features/console-time"),"const":require("./features/const"),"constraint-validation":require("./features/constraint-validation"),"contenteditable":require("./features/contenteditable"),"contentsecuritypolicy":require("./features/contentsecuritypolicy"),"contentsecuritypolicy2":require("./features/contentsecuritypolicy2"),"cookie-store-api":require("./features/cookie-store-api"),"cors":require("./features/cors"),"createimagebitmap":require("./features/createimagebitmap"),"credential-management":require("./features/credential-management"),"cryptography":require("./features/cryptography"),"css-all":require("./features/css-all"),"css-animation":require("./features/css-animation"),"css-any-link":require("./features/css-any-link"),"css-appearance":require("./features/css-appearance"),"css-at-counter-style":require("./features/css-at-counter-style"),"css-autofill":require("./features/css-autofill"),"css-backdrop-filter":require("./features/css-backdrop-filter"),"css-background-offsets":require("./features/css-background-offsets"),"css-backgroundblendmode":require("./features/css-backgroundblendmode"),"css-boxdecorationbreak":require("./features/css-boxdecorationbreak"),"css-boxshadow":require("./features/css-boxshadow"),"css-canvas":require("./features/css-canvas"),"css-caret-color":require("./features/css-caret-color"),"css-cascade-layers":require("./features/css-cascade-layers"),"css-case-insensitive":require("./features/css-case-insensitive"),"css-clip-path":require("./features/css-clip-path"),"css-color-adjust":require("./features/css-color-adjust"),"css-color-function":require("./features/css-color-function"),"css-conic-gradients":require("./features/css-conic-gradients"),"css-container-queries":require("./features/css-container-queries"),"css-container-query-units":require("./features/css-container-query-units"),"css-containment":require("./features/css-containment"),"css-content-visibility":require("./features/css-content-visibility"),"css-counters":require("./features/css-counters"),"css-crisp-edges":require("./features/css-crisp-edges"),"css-cross-fade":require("./features/css-cross-fade"),"css-default-pseudo":require("./features/css-default-pseudo"),"css-descendant-gtgt":require("./features/css-descendant-gtgt"),"css-deviceadaptation":require("./features/css-deviceadaptation"),"css-dir-pseudo":require("./features/css-dir-pseudo"),"css-display-contents":require("./features/css-display-contents"),"css-element-function":require("./features/css-element-function"),"css-env-function":require("./features/css-env-function"),"css-exclusions":require("./features/css-exclusions"),"css-featurequeries":require("./features/css-featurequeries"),"css-file-selector-button":require("./features/css-file-selector-button"),"css-filter-function":require("./features/css-filter-function"),"css-filters":require("./features/css-filters"),"css-first-letter":require("./features/css-first-letter"),"css-first-line":require("./features/css-first-line"),"css-fixed":require("./features/css-fixed"),"css-focus-visible":require("./features/css-focus-visible"),"css-focus-within":require("./features/css-focus-within"),"css-font-palette":require("./features/css-font-palette"),"css-font-rendering-controls":require("./features/css-font-rendering-controls"),"css-font-stretch":require("./features/css-font-stretch"),"css-gencontent":require("./features/css-gencontent"),"css-gradients":require("./features/css-gradients"),"css-grid-animation":require("./features/css-grid-animation"),"css-grid":require("./features/css-grid"),"css-hanging-punctuation":require("./features/css-hanging-punctuation"),"css-has":require("./features/css-has"),"css-hyphens":require("./features/css-hyphens"),"css-image-orientation":require("./features/css-image-orientation"),"css-image-set":require("./features/css-image-set"),"css-in-out-of-range":require("./features/css-in-out-of-range"),"css-indeterminate-pseudo":require("./features/css-indeterminate-pseudo"),"css-initial-letter":require("./features/css-initial-letter"),"css-initial-value":require("./features/css-initial-value"),"css-lch-lab":require("./features/css-lch-lab"),"css-letter-spacing":require("./features/css-letter-spacing"),"css-line-clamp":require("./features/css-line-clamp"),"css-logical-props":require("./features/css-logical-props"),"css-marker-pseudo":require("./features/css-marker-pseudo"),"css-masks":require("./features/css-masks"),"css-matches-pseudo":require("./features/css-matches-pseudo"),"css-math-functions":require("./features/css-math-functions"),"css-media-interaction":require("./features/css-media-interaction"),"css-media-range-syntax":require("./features/css-media-range-syntax"),"css-media-resolution":require("./features/css-media-resolution"),"css-media-scripting":require("./features/css-media-scripting"),"css-mediaqueries":require("./features/css-mediaqueries"),"css-mixblendmode":require("./features/css-mixblendmode"),"css-motion-paths":require("./features/css-motion-paths"),"css-namespaces":require("./features/css-namespaces"),"css-nesting":require("./features/css-nesting"),"css-not-sel-list":require("./features/css-not-sel-list"),"css-nth-child-of":require("./features/css-nth-child-of"),"css-opacity":require("./features/css-opacity"),"css-optional-pseudo":require("./features/css-optional-pseudo"),"css-overflow-anchor":require("./features/css-overflow-anchor"),"css-overflow-overlay":require("./features/css-overflow-overlay"),"css-overflow":require("./features/css-overflow"),"css-overscroll-behavior":require("./features/css-overscroll-behavior"),"css-page-break":require("./features/css-page-break"),"css-paged-media":require("./features/css-paged-media"),"css-paint-api":require("./features/css-paint-api"),"css-placeholder-shown":require("./features/css-placeholder-shown"),"css-placeholder":require("./features/css-placeholder"),"css-print-color-adjust":require("./features/css-print-color-adjust"),"css-read-only-write":require("./features/css-read-only-write"),"css-rebeccapurple":require("./features/css-rebeccapurple"),"css-reflections":require("./features/css-reflections"),"css-regions":require("./features/css-regions"),"css-repeating-gradients":require("./features/css-repeating-gradients"),"css-resize":require("./features/css-resize"),"css-revert-value":require("./features/css-revert-value"),"css-rrggbbaa":require("./features/css-rrggbbaa"),"css-scroll-behavior":require("./features/css-scroll-behavior"),"css-scroll-timeline":require("./features/css-scroll-timeline"),"css-scrollbar":require("./features/css-scrollbar"),"css-sel2":require("./features/css-sel2"),"css-sel3":require("./features/css-sel3"),"css-selection":require("./features/css-selection"),"css-shapes":require("./features/css-shapes"),"css-snappoints":require("./features/css-snappoints"),"css-sticky":require("./features/css-sticky"),"css-subgrid":require("./features/css-subgrid"),"css-supports-api":require("./features/css-supports-api"),"css-table":require("./features/css-table"),"css-text-align-last":require("./features/css-text-align-last"),"css-text-indent":require("./features/css-text-indent"),"css-text-justify":require("./features/css-text-justify"),"css-text-orientation":require("./features/css-text-orientation"),"css-text-spacing":require("./features/css-text-spacing"),"css-textshadow":require("./features/css-textshadow"),"css-touch-action":require("./features/css-touch-action"),"css-transitions":require("./features/css-transitions"),"css-unicode-bidi":require("./features/css-unicode-bidi"),"css-unset-value":require("./features/css-unset-value"),"css-variables":require("./features/css-variables"),"css-when-else":require("./features/css-when-else"),"css-widows-orphans":require("./features/css-widows-orphans"),"css-width-stretch":require("./features/css-width-stretch"),"css-writing-mode":require("./features/css-writing-mode"),"css-zoom":require("./features/css-zoom"),"css3-attr":require("./features/css3-attr"),"css3-boxsizing":require("./features/css3-boxsizing"),"css3-colors":require("./features/css3-colors"),"css3-cursors-grab":require("./features/css3-cursors-grab"),"css3-cursors-newer":require("./features/css3-cursors-newer"),"css3-cursors":require("./features/css3-cursors"),"css3-tabsize":require("./features/css3-tabsize"),"currentcolor":require("./features/currentcolor"),"custom-elements":require("./features/custom-elements"),"custom-elementsv1":require("./features/custom-elementsv1"),"customevent":require("./features/customevent"),"datalist":require("./features/datalist"),"dataset":require("./features/dataset"),"datauri":require("./features/datauri"),"date-tolocaledatestring":require("./features/date-tolocaledatestring"),"declarative-shadow-dom":require("./features/declarative-shadow-dom"),"decorators":require("./features/decorators"),"details":require("./features/details"),"deviceorientation":require("./features/deviceorientation"),"devicepixelratio":require("./features/devicepixelratio"),"dialog":require("./features/dialog"),"dispatchevent":require("./features/dispatchevent"),"dnssec":require("./features/dnssec"),"do-not-track":require("./features/do-not-track"),"document-currentscript":require("./features/document-currentscript"),"document-evaluate-xpath":require("./features/document-evaluate-xpath"),"document-execcommand":require("./features/document-execcommand"),"document-policy":require("./features/document-policy"),"document-scrollingelement":require("./features/document-scrollingelement"),"documenthead":require("./features/documenthead"),"dom-manip-convenience":require("./features/dom-manip-convenience"),"dom-range":require("./features/dom-range"),"domcontentloaded":require("./features/domcontentloaded"),"dommatrix":require("./features/dommatrix"),"download":require("./features/download"),"dragndrop":require("./features/dragndrop"),"element-closest":require("./features/element-closest"),"element-from-point":require("./features/element-from-point"),"element-scroll-methods":require("./features/element-scroll-methods"),"eme":require("./features/eme"),"eot":require("./features/eot"),"es5":require("./features/es5"),"es6-class":require("./features/es6-class"),"es6-generators":require("./features/es6-generators"),"es6-module-dynamic-import":require("./features/es6-module-dynamic-import"),"es6-module":require("./features/es6-module"),"es6-number":require("./features/es6-number"),"es6-string-includes":require("./features/es6-string-includes"),"es6":require("./features/es6"),"eventsource":require("./features/eventsource"),"extended-system-fonts":require("./features/extended-system-fonts"),"feature-policy":require("./features/feature-policy"),"fetch":require("./features/fetch"),"fieldset-disabled":require("./features/fieldset-disabled"),"fileapi":require("./features/fileapi"),"filereader":require("./features/filereader"),"filereadersync":require("./features/filereadersync"),"filesystem":require("./features/filesystem"),"flac":require("./features/flac"),"flexbox-gap":require("./features/flexbox-gap"),"flexbox":require("./features/flexbox"),"flow-root":require("./features/flow-root"),"focusin-focusout-events":require("./features/focusin-focusout-events"),"font-family-system-ui":require("./features/font-family-system-ui"),"font-feature":require("./features/font-feature"),"font-kerning":require("./features/font-kerning"),"font-loading":require("./features/font-loading"),"font-size-adjust":require("./features/font-size-adjust"),"font-smooth":require("./features/font-smooth"),"font-unicode-range":require("./features/font-unicode-range"),"font-variant-alternates":require("./features/font-variant-alternates"),"font-variant-numeric":require("./features/font-variant-numeric"),"fontface":require("./features/fontface"),"form-attribute":require("./features/form-attribute"),"form-submit-attributes":require("./features/form-submit-attributes"),"form-validation":require("./features/form-validation"),"forms":require("./features/forms"),"fullscreen":require("./features/fullscreen"),"gamepad":require("./features/gamepad"),"geolocation":require("./features/geolocation"),"getboundingclientrect":require("./features/getboundingclientrect"),"getcomputedstyle":require("./features/getcomputedstyle"),"getelementsbyclassname":require("./features/getelementsbyclassname"),"getrandomvalues":require("./features/getrandomvalues"),"gyroscope":require("./features/gyroscope"),"hardwareconcurrency":require("./features/hardwareconcurrency"),"hashchange":require("./features/hashchange"),"heif":require("./features/heif"),"hevc":require("./features/hevc"),"hidden":require("./features/hidden"),"high-resolution-time":require("./features/high-resolution-time"),"history":require("./features/history"),"html-media-capture":require("./features/html-media-capture"),"html5semantic":require("./features/html5semantic"),"http-live-streaming":require("./features/http-live-streaming"),"http2":require("./features/http2"),"http3":require("./features/http3"),"iframe-sandbox":require("./features/iframe-sandbox"),"iframe-seamless":require("./features/iframe-seamless"),"iframe-srcdoc":require("./features/iframe-srcdoc"),"imagecapture":require("./features/imagecapture"),"ime":require("./features/ime"),"img-naturalwidth-naturalheight":require("./features/img-naturalwidth-naturalheight"),"import-maps":require("./features/import-maps"),"imports":require("./features/imports"),"indeterminate-checkbox":require("./features/indeterminate-checkbox"),"indexeddb":require("./features/indexeddb"),"indexeddb2":require("./features/indexeddb2"),"inline-block":require("./features/inline-block"),"innertext":require("./features/innertext"),"input-autocomplete-onoff":require("./features/input-autocomplete-onoff"),"input-color":require("./features/input-color"),"input-datetime":require("./features/input-datetime"),"input-email-tel-url":require("./features/input-email-tel-url"),"input-event":require("./features/input-event"),"input-file-accept":require("./features/input-file-accept"),"input-file-directory":require("./features/input-file-directory"),"input-file-multiple":require("./features/input-file-multiple"),"input-inputmode":require("./features/input-inputmode"),"input-minlength":require("./features/input-minlength"),"input-number":require("./features/input-number"),"input-pattern":require("./features/input-pattern"),"input-placeholder":require("./features/input-placeholder"),"input-range":require("./features/input-range"),"input-search":require("./features/input-search"),"input-selection":require("./features/input-selection"),"insert-adjacent":require("./features/insert-adjacent"),"insertadjacenthtml":require("./features/insertadjacenthtml"),"internationalization":require("./features/internationalization"),"intersectionobserver-v2":require("./features/intersectionobserver-v2"),"intersectionobserver":require("./features/intersectionobserver"),"intl-pluralrules":require("./features/intl-pluralrules"),"intrinsic-width":require("./features/intrinsic-width"),"jpeg2000":require("./features/jpeg2000"),"jpegxl":require("./features/jpegxl"),"jpegxr":require("./features/jpegxr"),"js-regexp-lookbehind":require("./features/js-regexp-lookbehind"),"json":require("./features/json"),"justify-content-space-evenly":require("./features/justify-content-space-evenly"),"kerning-pairs-ligatures":require("./features/kerning-pairs-ligatures"),"keyboardevent-charcode":require("./features/keyboardevent-charcode"),"keyboardevent-code":require("./features/keyboardevent-code"),"keyboardevent-getmodifierstate":require("./features/keyboardevent-getmodifierstate"),"keyboardevent-key":require("./features/keyboardevent-key"),"keyboardevent-location":require("./features/keyboardevent-location"),"keyboardevent-which":require("./features/keyboardevent-which"),"lazyload":require("./features/lazyload"),"let":require("./features/let"),"link-icon-png":require("./features/link-icon-png"),"link-icon-svg":require("./features/link-icon-svg"),"link-rel-dns-prefetch":require("./features/link-rel-dns-prefetch"),"link-rel-modulepreload":require("./features/link-rel-modulepreload"),"link-rel-preconnect":require("./features/link-rel-preconnect"),"link-rel-prefetch":require("./features/link-rel-prefetch"),"link-rel-preload":require("./features/link-rel-preload"),"link-rel-prerender":require("./features/link-rel-prerender"),"loading-lazy-attr":require("./features/loading-lazy-attr"),"localecompare":require("./features/localecompare"),"magnetometer":require("./features/magnetometer"),"matchesselector":require("./features/matchesselector"),"matchmedia":require("./features/matchmedia"),"mathml":require("./features/mathml"),"maxlength":require("./features/maxlength"),"mdn-css-unicode-bidi-isolate-override":require("./features/mdn-css-unicode-bidi-isolate-override"),"mdn-css-unicode-bidi-isolate":require("./features/mdn-css-unicode-bidi-isolate"),"mdn-css-unicode-bidi-plaintext":require("./features/mdn-css-unicode-bidi-plaintext"),"mdn-text-decoration-color":require("./features/mdn-text-decoration-color"),"mdn-text-decoration-line":require("./features/mdn-text-decoration-line"),"mdn-text-decoration-shorthand":require("./features/mdn-text-decoration-shorthand"),"mdn-text-decoration-style":require("./features/mdn-text-decoration-style"),"media-fragments":require("./features/media-fragments"),"mediacapture-fromelement":require("./features/mediacapture-fromelement"),"mediarecorder":require("./features/mediarecorder"),"mediasource":require("./features/mediasource"),"menu":require("./features/menu"),"meta-theme-color":require("./features/meta-theme-color"),"meter":require("./features/meter"),"midi":require("./features/midi"),"minmaxwh":require("./features/minmaxwh"),"mp3":require("./features/mp3"),"mpeg-dash":require("./features/mpeg-dash"),"mpeg4":require("./features/mpeg4"),"multibackgrounds":require("./features/multibackgrounds"),"multicolumn":require("./features/multicolumn"),"mutation-events":require("./features/mutation-events"),"mutationobserver":require("./features/mutationobserver"),"namevalue-storage":require("./features/namevalue-storage"),"native-filesystem-api":require("./features/native-filesystem-api"),"nav-timing":require("./features/nav-timing"),"netinfo":require("./features/netinfo"),"notifications":require("./features/notifications"),"object-entries":require("./features/object-entries"),"object-fit":require("./features/object-fit"),"object-observe":require("./features/object-observe"),"object-values":require("./features/object-values"),"objectrtc":require("./features/objectrtc"),"offline-apps":require("./features/offline-apps"),"offscreencanvas":require("./features/offscreencanvas"),"ogg-vorbis":require("./features/ogg-vorbis"),"ogv":require("./features/ogv"),"ol-reversed":require("./features/ol-reversed"),"once-event-listener":require("./features/once-event-listener"),"online-status":require("./features/online-status"),"opus":require("./features/opus"),"orientation-sensor":require("./features/orientation-sensor"),"outline":require("./features/outline"),"pad-start-end":require("./features/pad-start-end"),"page-transition-events":require("./features/page-transition-events"),"pagevisibility":require("./features/pagevisibility"),"passive-event-listener":require("./features/passive-event-listener"),"passwordrules":require("./features/passwordrules"),"path2d":require("./features/path2d"),"payment-request":require("./features/payment-request"),"pdf-viewer":require("./features/pdf-viewer"),"permissions-api":require("./features/permissions-api"),"permissions-policy":require("./features/permissions-policy"),"picture-in-picture":require("./features/picture-in-picture"),"picture":require("./features/picture"),"ping":require("./features/ping"),"png-alpha":require("./features/png-alpha"),"pointer-events":require("./features/pointer-events"),"pointer":require("./features/pointer"),"pointerlock":require("./features/pointerlock"),"portals":require("./features/portals"),"prefers-color-scheme":require("./features/prefers-color-scheme"),"prefers-reduced-motion":require("./features/prefers-reduced-motion"),"progress":require("./features/progress"),"promise-finally":require("./features/promise-finally"),"promises":require("./features/promises"),"proximity":require("./features/proximity"),"proxy":require("./features/proxy"),"publickeypinning":require("./features/publickeypinning"),"push-api":require("./features/push-api"),"queryselector":require("./features/queryselector"),"readonly-attr":require("./features/readonly-attr"),"referrer-policy":require("./features/referrer-policy"),"registerprotocolhandler":require("./features/registerprotocolhandler"),"rel-noopener":require("./features/rel-noopener"),"rel-noreferrer":require("./features/rel-noreferrer"),"rellist":require("./features/rellist"),"rem":require("./features/rem"),"requestanimationframe":require("./features/requestanimationframe"),"requestidlecallback":require("./features/requestidlecallback"),"resizeobserver":require("./features/resizeobserver"),"resource-timing":require("./features/resource-timing"),"rest-parameters":require("./features/rest-parameters"),"rtcpeerconnection":require("./features/rtcpeerconnection"),"ruby":require("./features/ruby"),"run-in":require("./features/run-in"),"same-site-cookie-attribute":require("./features/same-site-cookie-attribute"),"screen-orientation":require("./features/screen-orientation"),"script-async":require("./features/script-async"),"script-defer":require("./features/script-defer"),"scrollintoview":require("./features/scrollintoview"),"scrollintoviewifneeded":require("./features/scrollintoviewifneeded"),"sdch":require("./features/sdch"),"selection-api":require("./features/selection-api"),"server-timing":require("./features/server-timing"),"serviceworkers":require("./features/serviceworkers"),"setimmediate":require("./features/setimmediate"),"shadowdom":require("./features/shadowdom"),"shadowdomv1":require("./features/shadowdomv1"),"sharedarraybuffer":require("./features/sharedarraybuffer"),"sharedworkers":require("./features/sharedworkers"),"sni":require("./features/sni"),"spdy":require("./features/spdy"),"speech-recognition":require("./features/speech-recognition"),"speech-synthesis":require("./features/speech-synthesis"),"spellcheck-attribute":require("./features/spellcheck-attribute"),"sql-storage":require("./features/sql-storage"),"srcset":require("./features/srcset"),"stream":require("./features/stream"),"streams":require("./features/streams"),"stricttransportsecurity":require("./features/stricttransportsecurity"),"style-scoped":require("./features/style-scoped"),"subresource-bundling":require("./features/subresource-bundling"),"subresource-integrity":require("./features/subresource-integrity"),"svg-css":require("./features/svg-css"),"svg-filters":require("./features/svg-filters"),"svg-fonts":require("./features/svg-fonts"),"svg-fragment":require("./features/svg-fragment"),"svg-html":require("./features/svg-html"),"svg-html5":require("./features/svg-html5"),"svg-img":require("./features/svg-img"),"svg-smil":require("./features/svg-smil"),"svg":require("./features/svg"),"sxg":require("./features/sxg"),"tabindex-attr":require("./features/tabindex-attr"),"template-literals":require("./features/template-literals"),"template":require("./features/template"),"temporal":require("./features/temporal"),"testfeat":require("./features/testfeat"),"text-decoration":require("./features/text-decoration"),"text-emphasis":require("./features/text-emphasis"),"text-overflow":require("./features/text-overflow"),"text-size-adjust":require("./features/text-size-adjust"),"text-stroke":require("./features/text-stroke"),"textcontent":require("./features/textcontent"),"textencoder":require("./features/textencoder"),"tls1-1":require("./features/tls1-1"),"tls1-2":require("./features/tls1-2"),"tls1-3":require("./features/tls1-3"),"touch":require("./features/touch"),"transforms2d":require("./features/transforms2d"),"transforms3d":require("./features/transforms3d"),"trusted-types":require("./features/trusted-types"),"ttf":require("./features/ttf"),"typedarrays":require("./features/typedarrays"),"u2f":require("./features/u2f"),"unhandledrejection":require("./features/unhandledrejection"),"upgradeinsecurerequests":require("./features/upgradeinsecurerequests"),"url-scroll-to-text-fragment":require("./features/url-scroll-to-text-fragment"),"url":require("./features/url"),"urlsearchparams":require("./features/urlsearchparams"),"use-strict":require("./features/use-strict"),"user-select-none":require("./features/user-select-none"),"user-timing":require("./features/user-timing"),"variable-fonts":require("./features/variable-fonts"),"vector-effect":require("./features/vector-effect"),"vibration":require("./features/vibration"),"video":require("./features/video"),"videotracks":require("./features/videotracks"),"viewport-unit-variants":require("./features/viewport-unit-variants"),"viewport-units":require("./features/viewport-units"),"wai-aria":require("./features/wai-aria"),"wake-lock":require("./features/wake-lock"),"wasm":require("./features/wasm"),"wav":require("./features/wav"),"wbr-element":require("./features/wbr-element"),"web-animation":require("./features/web-animation"),"web-app-manifest":require("./features/web-app-manifest"),"web-bluetooth":require("./features/web-bluetooth"),"web-serial":require("./features/web-serial"),"web-share":require("./features/web-share"),"webauthn":require("./features/webauthn"),"webcodecs":require("./features/webcodecs"),"webgl":require("./features/webgl"),"webgl2":require("./features/webgl2"),"webgpu":require("./features/webgpu"),"webhid":require("./features/webhid"),"webkit-user-drag":require("./features/webkit-user-drag"),"webm":require("./features/webm"),"webnfc":require("./features/webnfc"),"webp":require("./features/webp"),"websockets":require("./features/websockets"),"webtransport":require("./features/webtransport"),"webusb":require("./features/webusb"),"webvr":require("./features/webvr"),"webvtt":require("./features/webvtt"),"webworkers":require("./features/webworkers"),"webxr":require("./features/webxr"),"will-change":require("./features/will-change"),"woff":require("./features/woff"),"woff2":require("./features/woff2"),"word-break":require("./features/word-break"),"wordwrap":require("./features/wordwrap"),"x-doc-messaging":require("./features/x-doc-messaging"),"x-frame-options":require("./features/x-frame-options"),"xhr2":require("./features/xhr2"),"xhtml":require("./features/xhtml"),"xhtmlsmil":require("./features/xhtmlsmil"),"xml-serializer":require("./features/xml-serializer")}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/aac.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/aac.js index 853c5f920cc..860b6befb44 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/aac.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/aac.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m tB uB","132":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"0 1 2 3 4 5 6 7 8 9 C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F","16":"A B"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"2":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"132":"T"},N:{"1":"A","2":"B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"132":"rC"}},B:6,C:"AAC audio file format"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B","132":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F","16":"A B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"2":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"132":"b"},N:{"1":"A","2":"B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"132":"1C"}},B:6,C:"AAC audio file format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/abortcontroller.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/abortcontroller.js index db9f65ad657..becbe9010d4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/abortcontroller.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/abortcontroller.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G"},C:{"1":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB tB uB"},D:{"1":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB"},E:{"1":"K L G gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB","130":"C fB"},F:{"1":"IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB 7B 8B 9B AC fB pB BC gB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"iC mB jC kC lC mC nC oC","2":"I eC fC gC hC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"AbortController & AbortSignal"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G"},C:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB 6B 7B"},D:{"1":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB"},E:{"1":"K L G mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB","130":"C lB"},F:{"1":"OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB HC IC JC KC lB 2B LC mB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"AbortController & AbortSignal"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ac3-ec3.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ac3-ec3.js index 4780805fd4e..500adc87f1d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ac3-ec3.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ac3-ec3.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O","2":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC","132":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D","132":"A"},K:{"2":"A B C U fB pB","132":"gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"132":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"AC-3 (Dolby Digital) and EC-3 (Dolby Digital Plus) codecs"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O","2":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC","132":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D","132":"A"},K:{"2":"A B C c lB 2B","132":"mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"AC-3 (Dolby Digital) and EC-3 (Dolby Digital Plus) codecs"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/accelerometer.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/accelerometer.js index f554ba71d41..1ed6a293686 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/accelerometer.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/accelerometer.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","194":"NB iB OB jB PB QB U RB SB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"Accelerometer"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB","194":"TB pB UB qB VB WB c XB YB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"Accelerometer"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/addeventlistener.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/addeventlistener.js index 80f099a1e75..d4adbcd6ef1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/addeventlistener.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/addeventlistener.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","130":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","257":"sB hB I j J tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"EventTarget.addEventListener()"}; +module.exports={A:{A:{"1":"F A B","130":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","257":"5B oB I p J 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"EventTarget.addEventListener()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/alternate-stylesheet.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/alternate-stylesheet.js index e54569ac2e5..070f3d4a265 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/alternate-stylesheet.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/alternate-stylesheet.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"E F A B","2":"J D rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"F B C 7B 8B 9B AC fB pB BC gB","16":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"16":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"2":"U","16":"A B C fB pB gB"},L:{"16":"H"},M:{"16":"T"},N:{"16":"A B"},O:{"16":"dC"},P:{"16":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"16":"qC"},S:{"1":"rC"}},B:1,C:"Alternate stylesheet"}; +module.exports={A:{A:{"1":"E F A B","2":"J D 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"F B C HC IC JC KC lB 2B LC mB","16":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"16":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"16":"D A"},K:{"2":"c","16":"A B C lB 2B mB"},L:{"16":"H"},M:{"16":"b"},N:{"16":"A B"},O:{"16":"nC"},P:{"16":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"16":"0C"},S:{"1":"1C"}},B:1,C:"Alternate stylesheet"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ambient-light.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ambient-light.js index bf00ea9c281..235594307a2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ambient-light.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ambient-light.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K","132":"L G M N O","322":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m tB uB","132":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB","194":"OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","322":"NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB 7B 8B 9B AC fB pB BC gB","322":"ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"132":"rC"}},B:4,C:"Ambient Light Sensor"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K","132":"L G M N O","322":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B","132":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB","194":"UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB","322":"TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB HC IC JC KC lB 2B LC mB","322":"fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"132":"1C"}},B:4,C:"Ambient Light Sensor"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/apng.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/apng.js index 91905aad93e..f7a161cc9eb 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/apng.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/apng.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB"},D:{"1":"iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB"},E:{"1":"E F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B 1B"},F:{"1":"B C BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"0 1 2 3 4 5 6 7 8 9 F G M N O k l m n o p q r s t u v w x y z AB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","2":"I eC fC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:7,C:"Animated PNG (APNG)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B"},D:{"1":"pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB"},E:{"1":"E F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC CC"},F:{"1":"B C HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"0 1 2 3 4 5 6 7 8 9 F G M N O q r s t u v w x y z AB BB CB DB EB FB GB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:7,C:"Animated PNG (APNG)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-find-index.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-find-index.js index 5053e85e30f..0d44d60fca5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-find-index.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-find-index.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p tB uB"},D:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w 7B 8B 9B AC fB pB BC gB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D","16":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Array.prototype.findIndex"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v 6B 7B"},D:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB"},E:{"1":"E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC"},F:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D","16":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Array.prototype.findIndex"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-find.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-find.js index 12041d0c04e..fb8b90a0d50 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-find.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-find.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","16":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p tB uB"},D:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w 7B 8B 9B AC fB pB BC gB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D","16":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Array.prototype.find"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","16":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v 6B 7B"},D:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB"},E:{"1":"E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC"},F:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D","16":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Array.prototype.find"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-flat.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-flat.js index c3437a63f75..735ce51aa9c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-flat.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-flat.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB tB uB"},D:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB"},E:{"1":"C K L G gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB fB"},F:{"1":"LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB 7B 8B 9B AC fB pB BC gB"},G:{"1":"NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mB jC kC lC mC nC oC","2":"I eC fC gC hC iC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"flat & flatMap array methods"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB 6B 7B"},D:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB"},E:{"1":"C K L G mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB lB"},F:{"1":"RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB HC IC JC KC lB 2B LC mB"},G:{"1":"XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC sC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"flat & flatMap array methods"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-includes.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-includes.js index e3524458aee..4d1925e5cff 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-includes.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/array-includes.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K"},C:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x y 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Array.prototype.includes"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K"},C:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB 6B 7B"},D:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Array.prototype.includes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/arrow-functions.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/arrow-functions.js index 560ab90316f..69616d3e67f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/arrow-functions.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/arrow-functions.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m tB uB"},D:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Arrow functions"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B"},D:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Arrow functions"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/asmjs.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/asmjs.js index b3efed2bdc9..ad0b01aab3e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/asmjs.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/asmjs.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O","132":"P Q R S V W X Y Z a b c d e f g T h H i","322":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m tB uB"},D:{"2":"I j J D E F A B C K L G M N O k l m n o p q r s","132":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","132":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","132":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","132":"U"},L:{"132":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I","132":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"132":"pC"},R:{"132":"qC"},S:{"1":"rC"}},B:6,C:"asm.js"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O","132":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","322":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B"},D:{"2":"I p J D E F A B C K L G M N O q r s t u v w x y","132":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","132":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","132":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","132":"c"},L:{"132":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"132":"nC"},P:{"2":"I","132":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"132":"wB"},R:{"132":"0C"},S:{"1":"1C"}},B:6,C:"asm.js"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/async-clipboard.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/async-clipboard.js index 890523f2d21..227320cf63c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/async-clipboard.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/async-clipboard.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB tB uB","132":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","66":"NB iB OB jB"},E:{"1":"L G 3B 4B 5B nB oB 6B","2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB"},F:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC","260":"TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","260":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","260":"U"},L:{"1":"H"},M:{"132":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC","260":"iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"Asynchronous Clipboard API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB 6B 7B","132":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB","66":"TB pB UB qB"},E:{"1":"L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB"},F:{"1":"KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC","260":"dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","260":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","260":"c"},L:{"1":"H"},M:{"132":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC","260":"sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Asynchronous Clipboard API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/async-functions.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/async-functions.js index 866316fd526..b399e92d388 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/async-functions.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/async-functions.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K","194":"L"},C:{"1":"HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB tB uB"},D:{"1":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B","514":"mB"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC","514":"KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I eC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"Async functions"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K","194":"L"},C:{"1":"NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB 6B 7B"},D:{"1":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC","514":"vB"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB HC IC JC KC lB 2B LC mB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC","514":"UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"Async functions"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/atob-btoa.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/atob-btoa.js index 9531309d82b..2ec7fcd0de5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/atob-btoa.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/atob-btoa.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S AC fB pB BC gB","2":"F 7B 8B","16":"9B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","16":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Base64 encoding and decoding"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a KC lB 2B LC mB","2":"F HC IC","16":"JC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","16":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Base64 encoding and decoding"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audio-api.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audio-api.js index 5d3acafb496..f31ad012938 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audio-api.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audio-api.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K","33":"L G M N O k l m n o p q r s t u v w x y"},E:{"1":"G 4B 5B nB oB 6B","2":"I j yB lB zB","33":"J D E F A B C K L 0B 1B 2B mB fB gB 3B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"G M N O k l m"},G:{"1":"UC VC nB oB","2":"lB CC qB DC","33":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"Web Audio API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v 6B 7B"},D:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K","33":"0 1 2 3 4 L G M N O q r s t u v w x y z"},E:{"1":"G EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","33":"J D E F A B C K L BC CC DC vB lB mB wB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"G M N O q r s"},G:{"1":"eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","33":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"Web Audio API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audio.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audio.js index f747d8cf6e3..41aa235f31c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audio.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audio.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","132":"I j J D E F A B C K L G M N O k tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F","4":"7B 8B"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","2":"XC YC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Audio element"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","132":"I p J D E F A B C K L G M N O q 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F","4":"HC IC"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","2":"hC iC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Audio element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audiotracks.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audiotracks.js index d31b7719561..af0b839fa2c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audiotracks.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/audiotracks.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O","322":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x tB uB","194":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","322":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB"},F:{"2":"F B C G M N O k l m n o p q r s t u v w 7B 8B 9B AC fB pB BC gB","322":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"322":"H"},M:{"2":"T"},N:{"1":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"194":"rC"}},B:1,C:"Audio Tracks"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O","322":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB","322":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC"},F:{"2":"0 1 2 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","322":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"322":"H"},M:{"2":"b"},N:{"1":"A B"},O:{"322":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"322":"wB"},R:{"322":"0C"},S:{"194":"1C"}},B:1,C:"Audio Tracks"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/autofocus.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/autofocus.js index 9624cb09c80..e753599cf0a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/autofocus.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/autofocus.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"2":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:1,C:"Autofocus attribute"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"Autofocus attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/auxclick.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/auxclick.js index c07b978c657..0cf68cd6d01 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/auxclick.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/auxclick.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB tB uB","129":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"Auxclick"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB 6B 7B","129":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Auxclick"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/av1.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/av1.js index 8cace6ce037..5d347e22bfc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/av1.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/av1.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N","194":"O"},C:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB tB uB","66":"KB LB MB NB iB OB jB PB QB U","260":"RB","516":"SB"},D:{"1":"WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB","66":"TB UB VB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1090":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"kC lC mC nC oC","2":"I eC fC gC hC iC mB jC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"AV1 video format"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N","194":"O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB 6B 7B","66":"QB RB SB TB pB UB qB VB WB c","260":"XB","516":"YB"},D:{"1":"cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB","66":"ZB aB bB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1090":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"uC vC wC xC nB yC zC","2":"I oC pC qC rC sC vB tC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"AV1 video format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/avif.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/avif.js index a37b69554db..08f34b7b2de 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/avif.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/avif.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB tB uB","194":"dB eB P Q R kB S V W X Y Z a b c d","257":"e f g T h H i"},D:{"1":"W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mC nC oC","2":"I eC fC gC hC iC mB jC kC lC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"AVIF image format"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB 6B 7B","194":"jB kB P Q R rB S T U V W X Y Z a d","257":"e f g h i j k l m n o b H sB tB"},D:{"1":"U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB","516":"1B GC"},F:{"1":"dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB HC IC JC KC lB 2B LC mB"},G:{"1":"1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B","257":"nB"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"AVIF image format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-attachment.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-attachment.js index 1c61d13ba3b..95686c223f1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-attachment.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-attachment.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","132":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","132":"sB hB I j J D E F A B C K L G M N O k l m n o p tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J D E F A B C zB 0B 1B 2B mB fB gB","132":"I K yB lB 3B","2050":"L G 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","132":"F 7B 8B"},G:{"2":"lB CC qB","772":"E DC EC FC GC HC IC JC KC LC MC NC OC","2050":"PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC bC cC","132":"aC qB"},J:{"260":"D A"},K:{"1":"B C fB pB gB","2":"U","132":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"2":"I","1028":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1028":"qC"},S:{"1":"rC"}},B:4,C:"CSS background-attachment"}; +module.exports={A:{A:{"1":"F A B","132":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","132":"5B oB I p J D E F A B C K L G M N O q r s t u v 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J D E F A B C AC BC CC DC vB lB mB yB zB 0B nB 1B GC","132":"I K 9B uB wB","2050":"L G EC FC xB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","132":"F HC IC"},G:{"2":"uB MC 3B","772":"E NC OC PC QC RC SC TC UC VC WC XC YC","2050":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC lC mC","132":"kC 3B"},J:{"260":"D A"},K:{"1":"B C lB 2B mB","2":"c","132":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"2":"I","1028":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS background-attachment"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-clip-text.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-clip-text.js index 8af5dafefe5..97b5abcb328 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-clip-text.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-clip-text.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"G M N O","33":"C K L P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB tB uB"},D:{"33":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"L G 4B 5B nB oB 6B","16":"yB lB","33":"I j J D E F A B C K zB 0B 1B 2B mB fB gB 3B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"TC UC VC nB oB","16":"lB CC qB DC","33":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC"},H:{"2":"WC"},I:{"16":"hB XC YC ZC","33":"I H aC qB bC cC"},J:{"33":"D A"},K:{"16":"A B C fB pB gB","33":"U"},L:{"33":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"33":"dC"},P:{"33":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"33":"pC"},R:{"33":"qC"},S:{"1":"rC"}},B:7,C:"Background-clip: text"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"G M N O","33":"C K L P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB 6B 7B"},D:{"33":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"L G EC FC xB yB zB 0B nB 1B GC","16":"9B uB","33":"I p J D E F A B C K AC BC CC DC vB lB mB wB"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B NC","33":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC"},H:{"2":"gC"},I:{"16":"oB hC iC jC","33":"I H kC 3B lC mC"},J:{"33":"D A"},K:{"16":"A B C lB 2B mB","33":"c"},L:{"33":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"33":"nC"},P:{"33":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"33":"wB"},R:{"33":"0C"},S:{"1":"1C"}},B:7,C:"Background-clip: text"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-img-opts.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-img-opts.js index 7e42289e41d..ce845e63352 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-img-opts.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-img-opts.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB","36":"uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","516":"I j J D E F A B C K L"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","772":"I j J yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B","36":"8B"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","4":"lB CC qB EC","516":"DC"},H:{"132":"WC"},I:{"1":"H bC cC","36":"XC","516":"hB I aC qB","548":"YC ZC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS3 Background-image options"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B","36":"7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","516":"I p J D E F A B C K L"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","772":"I p J 9B uB AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC","36":"IC"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","4":"uB MC 3B OC","516":"NC"},H:{"132":"gC"},I:{"1":"H lC mC","36":"hC","516":"oB I kC 3B","548":"iC jC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS3 Background-image options"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-position-x-y.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-position-x-y.js index 2ed9b31deb4..60dee9cd2a1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-position-x-y.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-position-x-y.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:7,C:"background-position-x & background-position-y"}; +module.exports={A:{A:{"1":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"background-position-x & background-position-y"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-repeat-round-space.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-repeat-round-space.js index 837443ddceb..e1415ce3b3f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-repeat-round-space.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-repeat-round-space.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E rB","132":"F"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F G M N O 7B 8B"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:4,C:"CSS background-repeat round and space"}; +module.exports={A:{A:{"1":"A B","2":"J D E 4B","132":"F"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB 6B 7B"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F G M N O HC IC"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"CSS background-repeat round and space"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-sync.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-sync.js index 2840aaeeeb4..bfe025c362f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-sync.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/background-sync.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h tB uB","16":"H i"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Background Sync API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H 6B 7B","16":"sB tB"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"Background Sync API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/battery-status.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/battery-status.js index f0a1c1cfcc6..aca19bbcb65 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/battery-status.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/battery-status.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"8 9 AB BB CB DB EB FB GB","2":"sB hB I j J D E F HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","132":"0 1 2 3 4 5 6 7 M N O k l m n o p q r s t u v w x y z","164":"A B C K L G"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","66":"2"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"Battery Status API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"EB FB GB HB IB JB KB LB MB","2":"5B oB I p J D E F NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","132":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB","164":"A B C K L G"},D:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 I p J D E F A B C K L G M N O q r s t u v w x y z","66":"8"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Battery Status API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/beacon.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/beacon.js index 4e7761cd1fc..4a42b0d33b0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/beacon.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/beacon.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K"},C:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v tB uB"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q 7B 8B 9B AC fB pB BC gB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"Beacon API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K"},C:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w HC IC JC KC lB 2B LC mB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Beacon API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/beforeafterprint.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/beforeafterprint.js index a7d9ea2a469..51c5fb02ea0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/beforeafterprint.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/beforeafterprint.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B","16":"rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j tB uB"},D:{"1":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB"},E:{"1":"K L G 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB gB"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB 7B 8B 9B AC fB pB BC gB"},G:{"1":"PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"2":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"16":"A B"},O:{"16":"dC"},P:{"2":"eC fC gC hC iC mB jC kC lC mC nC oC","16":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:1,C:"Printing Events"}; +module.exports={A:{A:{"1":"J D E F A B","16":"4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B"},D:{"1":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB"},E:{"1":"K L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB mB"},F:{"1":"LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB HC IC JC KC lB 2B LC mB"},G:{"1":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"16":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"16":"A B"},O:{"1":"nC"},P:{"2":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","16":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Printing Events"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/bigint.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/bigint.js index d22b577dd83..7bbeec57298 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/bigint.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/bigint.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U tB uB","194":"RB SB TB"},D:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB"},E:{"1":"L G 4B 5B nB oB 6B","2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB 3B"},F:{"1":"JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB 7B 8B 9B AC fB pB BC gB"},G:{"1":"TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"iC mB jC kC lC mC nC oC","2":"I eC fC gC hC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"BigInt"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c 6B 7B","194":"XB YB ZB"},D:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB"},E:{"1":"L G EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB wB"},F:{"1":"PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB HC IC JC KC lB 2B LC mB"},G:{"1":"dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"BigInt"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/blobbuilder.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/blobbuilder.js index c392847dfff..bd15c1ab9a2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/blobbuilder.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/blobbuilder.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j tB uB","36":"J D E F A B C"},D:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D","36":"E F A B C K L G M N O k"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B C 7B 8B 9B AC fB pB BC"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC"},H:{"2":"WC"},I:{"1":"H","2":"XC YC ZC","36":"hB I aC qB bC cC"},J:{"1":"A","2":"D"},K:{"1":"U gB","2":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"Blob constructing"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B","36":"J D E F A B C"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D","36":"E F A B C K L G M N O q"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B C HC IC JC KC lB 2B LC"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC"},H:{"2":"gC"},I:{"1":"H","2":"hC iC jC","36":"oB I kC 3B lC mC"},J:{"1":"A","2":"D"},K:{"1":"c mB","2":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Blob constructing"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/bloburls.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/bloburls.js index 3356c4264f5..63e65726d31 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/bloburls.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/bloburls.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","129":"A B"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","129":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D","33":"E F A B C K L G M N O k l m n"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","33":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC","33":"EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB XC YC ZC","33":"I aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"Blob URLs"}; +module.exports={A:{A:{"2":"J D E F 4B","129":"A B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","129":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D","33":"E F A B C K L G M N O q r s t"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","33":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","33":"OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB hC iC jC","33":"I kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Blob URLs"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/border-image.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/border-image.js index 501a53beec2..a92fbe48b02 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/border-image.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/border-image.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","129":"C K"},C:{"1":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","260":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB","804":"I j J D E F A B C K L tB uB"},D:{"1":"LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","260":"GB HB IB JB KB","388":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB","1412":"G M N O k l m n o p q r s t u","1956":"I j J D E F A B C K L"},E:{"129":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","1412":"J D E F 0B 1B","1956":"I j yB lB zB"},F:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F 7B 8B","260":"3 4 5 6 7","388":"0 1 2 G M N O k l m n o p q r s t u v w x y z","1796":"9B AC","1828":"B C fB pB BC gB"},G:{"129":"IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","1412":"E EC FC GC HC","1956":"lB CC qB DC"},H:{"1828":"WC"},I:{"1":"H","388":"bC cC","1956":"hB I XC YC ZC aC qB"},J:{"1412":"A","1924":"D"},K:{"1":"U","2":"A","1828":"B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"388":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","260":"eC fC","388":"I"},Q:{"260":"pC"},R:{"260":"qC"},S:{"260":"rC"}},B:4,C:"CSS3 Border images"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","129":"C K"},C:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","260":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB","804":"I p J D E F A B C K L 6B 7B"},D:{"1":"RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","260":"MB NB OB PB QB","388":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB","1412":"0 G M N O q r s t u v w x y z","1956":"I p J D E F A B C K L"},E:{"1":"yB zB 0B nB 1B GC","129":"A B C K L G DC vB lB mB wB EC FC xB","1412":"J D E F BC CC","1956":"I p 9B uB AC"},F:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F HC IC","260":"9 AB BB CB DB","388":"0 1 2 3 4 5 6 7 8 G M N O q r s t u v w x y z","1796":"JC KC","1828":"B C lB 2B LC mB"},G:{"1":"yB zB 0B nB 1B","129":"SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB","1412":"E OC PC QC RC","1956":"uB MC 3B NC"},H:{"1828":"gC"},I:{"1":"H","388":"lC mC","1956":"oB I hC iC jC kC 3B"},J:{"1412":"A","1924":"D"},K:{"1":"c","2":"A","1828":"B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","260":"oC pC","388":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"260":"1C"}},B:4,C:"CSS3 Border images"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/border-radius.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/border-radius.js index b87b1b0f295..5bf33fad8fd 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/border-radius.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/border-radius.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","257":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB","289":"hB tB uB","292":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"I"},E:{"1":"j D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","33":"I yB lB","129":"J zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","33":"lB"},H:{"2":"WC"},I:{"1":"hB I H YC ZC aC qB bC cC","33":"XC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"257":"rC"}},B:4,C:"CSS3 Border-radius (rounded corners)"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","257":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB","289":"oB 6B 7B","292":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"I"},E:{"1":"p D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","33":"I 9B uB","129":"J AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","33":"uB"},H:{"2":"gC"},I:{"1":"oB I H iC jC kC 3B lC mC","33":"hC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"257":"1C"}},B:4,C:"CSS3 Border-radius (rounded corners)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/broadcastchannel.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/broadcastchannel.js index 76742411f6a..b95d37d6403 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/broadcastchannel.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/broadcastchannel.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},E:{"1":"oB 6B","2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","2":"I eC fC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:1,C:"BroadcastChannel"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB"},E:{"1":"yB zB 0B nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB"},F:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB HC IC JC KC lB 2B LC mB"},G:{"1":"yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"BroadcastChannel"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/brotli.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/brotli.js index 11386d3b102..84e60bc90fb 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/brotli.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/brotli.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB","194":"EB","257":"FB"},E:{"1":"K L G 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB","513":"B C fB gB"},F:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","194":"1 2"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:6,C:"Brotli Accept-Encoding/Content-Encoding"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L"},C:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB 6B 7B"},D:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB","194":"KB","257":"LB"},E:{"1":"K L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB","513":"B C lB mB"},F:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","194":"7 8"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Brotli Accept-Encoding/Content-Encoding"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/calc.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/calc.js index 757f5f18f82..8c35e4340cc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/calc.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/calc.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","260":"F","516":"A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","33":"I j J D E F A B C K L G"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O","33":"k l m n o p q"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","33":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC","33":"EC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB","132":"bC cC"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"calc() as CSS unit value"}; +module.exports={A:{A:{"2":"J D E 4B","260":"F","516":"A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","33":"I p J D E F A B C K L G"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O","33":"q r s t u v w"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","33":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","33":"OC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B","132":"lC mC"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"calc() as CSS unit value"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas-blending.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas-blending.js index 777c4b3cae4..e0b4505ac87 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas-blending.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas-blending.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M 7B 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"Canvas blend modes"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q 6B 7B"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M HC IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Canvas blend modes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas-text.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas-text.js index 7b43e8ff975..a04e38962a7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas-text.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas-text.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"rB","8":"J D E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","8":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","8":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","8":"F 7B 8B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","8":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Text API for Canvas"}; +module.exports={A:{A:{"1":"F A B","2":"4B","8":"J D E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","8":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","8":"F HC IC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","8":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Text API for Canvas"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas.js index 414634d972e..022f9168f5a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/canvas.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"rB","8":"J D E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i uB","132":"sB hB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","132":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"260":"WC"},I:{"1":"hB I H aC qB bC cC","132":"XC YC ZC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Canvas (basic support)"}; +module.exports={A:{A:{"1":"F A B","2":"4B","8":"J D E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 7B","132":"5B oB 6B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","132":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"260":"gC"},I:{"1":"oB I H kC 3B lC mC","132":"hC iC jC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Canvas (basic support)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ch-unit.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ch-unit.js index c5a99beeb86..9c10fb41f6c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ch-unit.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ch-unit.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","132":"F A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"ch (character) unit"}; +module.exports={A:{A:{"2":"J D E 4B","132":"F A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v w x"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"ch (character) unit"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/chacha20-poly1305.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/chacha20-poly1305.js index 352843715cb..0df597b2a12 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/chacha20-poly1305.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/chacha20-poly1305.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB tB uB"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x","129":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC","16":"cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"ChaCha20-Poly1305 cipher suites for TLS"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB 6B 7B"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 I p J D E F A B C K L G M N O q r s t u v w x y z","129":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC","16":"mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"ChaCha20-Poly1305 cipher suites for TLS"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/channel-messaging.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/channel-messaging.js index dcc72c375bc..b3f6523455d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/channel-messaging.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/channel-messaging.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q tB uB","194":"0 1 2 3 4 5 r s t u v w x y z"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S AC fB pB BC gB","2":"F 7B 8B","16":"9B"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Channel messaging"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w 6B 7B","194":"0 1 2 3 4 5 6 7 8 9 x y z AB BB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a KC lB 2B LC mB","2":"F HC IC","16":"JC"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Channel messaging"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/childnode-remove.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/childnode-remove.js index 861fdcbc0de..5dab3e1614d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/childnode-remove.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/childnode-remove.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","16":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","16":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"ChildNode.remove()"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","16":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","16":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"ChildNode.remove()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/classlist.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/classlist.js index b69eb29e522..e13cedafc38 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/classlist.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/classlist.js @@ -1 +1 @@ -module.exports={A:{A:{"8":"J D E F rB","1924":"A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","8":"sB hB tB","516":"p q","772":"I j J D E F A B C K L G M N O k l m n o uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","8":"I j J D","516":"p q r s","772":"o","900":"E F A B C K L G M N O k l m n"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","8":"I j yB lB","900":"J zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","8":"F B 7B 8B 9B AC fB","900":"C pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","8":"lB CC qB","900":"DC EC"},H:{"900":"WC"},I:{"1":"H bC cC","8":"XC YC ZC","900":"hB I aC qB"},J:{"1":"A","900":"D"},K:{"1":"U","8":"A B","900":"C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"900":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"classList (DOMTokenList)"}; +module.exports={A:{A:{"8":"J D E F 4B","1924":"A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","8":"5B oB 6B","516":"v w","772":"I p J D E F A B C K L G M N O q r s t u 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","8":"I p J D","516":"v w x y","772":"u","900":"E F A B C K L G M N O q r s t"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"I p 9B uB","900":"J AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","8":"F B HC IC JC KC lB","900":"C 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","8":"uB MC 3B","900":"NC OC"},H:{"900":"gC"},I:{"1":"H lC mC","8":"hC iC jC","900":"oB I kC 3B"},J:{"1":"A","900":"D"},K:{"1":"c","8":"A B","900":"C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"900":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"classList (DOMTokenList)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js index 907b3a2d7cf..01749506d09 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"2":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:6,C:"Client Hints: DPR, Width, Viewport-Width"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"Client Hints: DPR, Width, Viewport-Width"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/clipboard.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/clipboard.js index 48405b8082a..e0ae2c22717 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/clipboard.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/clipboard.js @@ -1 +1 @@ -module.exports={A:{A:{"2436":"J D E F A B rB"},B:{"260":"N O","2436":"C K L G M","8196":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m tB uB","772":"0 1 2 3 4 5 n o p q r s t u v w x y z","4100":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"I j J D E F A B C","2564":"0 1 2 3 4 5 6 7 K L G M N O k l m n o p q r s t u v w x y z","8196":"NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","10244":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB"},E:{"1":"C K L G gB 3B 4B 5B nB oB 6B","16":"yB lB","2308":"A B mB fB","2820":"I j J D E F zB 0B 1B 2B"},F:{"2":"F B 7B 8B 9B AC fB pB BC","16":"C","516":"gB","2564":"G M N O k l m n o p q r s t u","8196":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","10244":"0 1 2 3 4 5 6 7 8 9 v w x y z"},G:{"1":"NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB","2820":"E DC EC FC GC HC IC JC KC LC MC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","260":"H","2308":"bC cC"},J:{"2":"D","2308":"A"},K:{"2":"A B C fB pB","16":"gB","260":"U"},L:{"8196":"H"},M:{"1028":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2052":"eC fC","2308":"I","8196":"gC hC iC mB jC kC lC mC nC oC"},Q:{"10244":"pC"},R:{"2052":"qC"},S:{"4100":"rC"}},B:5,C:"Synchronous Clipboard API"}; +module.exports={A:{A:{"2436":"J D E F A B 4B"},B:{"260":"N O","2436":"C K L G M","8196":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B","772":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB","4100":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"I p J D E F A B C","2564":"0 1 2 3 4 5 6 7 8 9 K L G M N O q r s t u v w x y z AB BB CB DB","8196":"TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","10244":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB"},E:{"1":"C K L G mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B uB","2308":"A B vB lB","2820":"I p J D E F AC BC CC DC"},F:{"2":"F B HC IC JC KC lB 2B LC","16":"C","516":"mB","2564":"0 G M N O q r s t u v w x y z","8196":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","10244":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB"},G:{"1":"XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B","2820":"E NC OC PC QC RC SC TC UC VC WC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B","260":"H","2308":"lC mC"},J:{"2":"D","2308":"A"},K:{"2":"A B C lB 2B","16":"mB","260":"c"},L:{"8196":"H"},M:{"1028":"b"},N:{"2":"A B"},O:{"8196":"nC"},P:{"2052":"oC pC","2308":"I","8196":"qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"8196":"wB"},R:{"8196":"0C"},S:{"4100":"1C"}},B:5,C:"Synchronous Clipboard API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/colr-v1.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/colr-v1.js index 7c34954d856..69f67b144da 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/colr-v1.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/colr-v1.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"H i","2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h tB uB","258":"H i"},D:{"1":"H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a","194":"b c d e f g T h"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"2":"A B C U fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"16":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"COLR/CPAL(v1) Font Formats"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"j k l m n o b H","2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i 6B 7B","258":"j k l m n o b H sB tB"},D:{"1":"j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y","194":"Z a d e f g h i"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"16":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"16":"A B"},O:{"2":"nC"},P:{"1":"zC","2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"COLR/CPAL(v1) Font Formats"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/colr.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/colr.js index fa2a46f4089..04ceb1b4b0f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/colr.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/colr.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","257":"F A B"},B:{"1":"C K L G M N O","513":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB","513":"XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"L G 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB","129":"B C K fB gB 3B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB 7B 8B 9B AC fB pB BC gB","513":"NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"16":"A B"},O:{"1":"dC"},P:{"1":"mB jC kC lC mC nC oC","2":"I eC fC gC hC iC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"COLR/CPAL(v0) Font Formats"}; +module.exports={A:{A:{"2":"J D E 4B","257":"F A B"},B:{"1":"C K L G M N O","513":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB","513":"dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"L G EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB","129":"B C K lB mB wB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB HC IC JC KC lB 2B LC mB","513":"TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"16":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"16":"A B"},O:{"1":"nC"},P:{"1":"vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC sC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"COLR/CPAL(v0) Font Formats"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/comparedocumentposition.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/comparedocumentposition.js index be02139f7aa..5a7982b52d7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/comparedocumentposition.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/comparedocumentposition.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","16":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L","132":"G M N O k l m n o p q r s t u"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","16":"I j J yB lB","132":"D E F 0B 1B 2B","260":"zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","16":"F B 7B 8B 9B AC fB pB","132":"G M"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB","132":"E CC qB DC EC FC GC HC IC"},H:{"1":"WC"},I:{"1":"H bC cC","16":"XC YC","132":"hB I ZC aC qB"},J:{"132":"D A"},K:{"1":"C U gB","16":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Node.compareDocumentPosition()"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","16":"5B oB 6B 7B"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L","132":"0 G M N O q r s t u v w x y z"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p J 9B uB","132":"D E F BC CC DC","260":"AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","16":"F B HC IC JC KC lB 2B","132":"G M"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB","132":"E MC 3B NC OC PC QC RC SC"},H:{"1":"gC"},I:{"1":"H lC mC","16":"hC iC","132":"oB I jC kC 3B"},J:{"132":"D A"},K:{"1":"C c mB","16":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Node.compareDocumentPosition()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/console-basic.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/console-basic.js index b7d25545e70..3724a6e96ed 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/console-basic.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/console-basic.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D rB","132":"E F"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","2":"F 7B 8B 9B AC"},G:{"1":"lB CC qB DC","513":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"4097":"WC"},I:{"1025":"hB I H XC YC ZC aC qB bC cC"},J:{"258":"D A"},K:{"2":"A","258":"B C fB pB gB","1025":"U"},L:{"1025":"H"},M:{"2049":"T"},N:{"258":"A B"},O:{"258":"dC"},P:{"1025":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1025":"qC"},S:{"1":"rC"}},B:1,C:"Basic console logging functions"}; +module.exports={A:{A:{"1":"A B","2":"J D 4B","132":"E F"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","2":"F HC IC JC KC"},G:{"1":"uB MC 3B NC","513":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"4097":"gC"},I:{"1025":"oB I H hC iC jC kC 3B lC mC"},J:{"258":"D A"},K:{"2":"A","258":"B C lB 2B mB","1025":"c"},L:{"1025":"H"},M:{"2049":"b"},N:{"258":"A B"},O:{"258":"nC"},P:{"1025":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1025":"0C"},S:{"1":"1C"}},B:1,C:"Basic console logging functions"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/console-time.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/console-time.js index d1c4157d304..54cfb239986 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/console-time.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/console-time.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","2":"F 7B 8B 9B AC","16":"B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"U","16":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"console.time and console.timeEnd"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","2":"F HC IC JC KC","16":"B"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"c","16":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"console.time and console.timeEnd"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/const.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/const.js index 8c0156fbf65..e7856bbe764 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/const.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/const.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","2052":"B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","132":"sB hB I j J D E F A B C tB uB","260":"0 K L G M N O k l m n o p q r s t u v w x y z"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","260":"I j J D E F A B C K L G M N O k l","772":"0 1 2 3 4 5 m n o p q r s t u v w x y z","1028":"6 7 8 9 AB BB CB DB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","260":"I j A yB lB mB","772":"J D E F zB 0B 1B 2B"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F 7B","132":"B 8B 9B AC fB pB","644":"C BC gB","772":"G M N O k l m n o p q r s","1028":"0 t u v w x y z"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","260":"lB CC qB JC KC","772":"E DC EC FC GC HC IC"},H:{"644":"WC"},I:{"1":"H","16":"XC YC","260":"ZC","772":"hB I aC qB bC cC"},J:{"772":"D A"},K:{"1":"U","132":"A B fB pB","644":"C gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","1028":"I"},Q:{"1":"pC"},R:{"1028":"qC"},S:{"1":"rC"}},B:6,C:"const"}; +module.exports={A:{A:{"2":"J D E F A 4B","2052":"B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","132":"5B oB I p J D E F A B C 6B 7B","260":"0 1 2 3 4 5 6 K L G M N O q r s t u v w x y z"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","260":"I p J D E F A B C K L G M N O q r","772":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB","1028":"CB DB EB FB GB HB IB JB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","260":"I p A 9B uB vB","772":"J D E F AC BC CC DC"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F HC","132":"B IC JC KC lB 2B","644":"C LC mB","772":"G M N O q r s t u v w x y","1028":"0 1 2 3 4 5 6 z"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","260":"uB MC 3B TC UC","772":"E NC OC PC QC RC SC"},H:{"644":"gC"},I:{"1":"H","16":"hC iC","260":"jC","772":"oB I kC 3B lC mC"},J:{"772":"D A"},K:{"1":"c","132":"A B lB 2B","644":"C mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","1028":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"const"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/constraint-validation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/constraint-validation.js index aa1707042bf..37ecccc2b54 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/constraint-validation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/constraint-validation.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","900":"A B"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","388":"L G M","900":"C K"},C:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","260":"EB FB","388":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB","900":"I j J D E F A B C K L G M N O k l m n o p q r s t"},D:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L","388":"0 1 2 3 4 q r s t u v w x y z","900":"G M N O k l m n o p"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","16":"I j yB lB","388":"E F 1B 2B","900":"J D zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F B 7B 8B 9B AC fB pB","388":"G M N O k l m n o p q r","900":"C BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB","388":"E FC GC HC IC","900":"DC EC"},H:{"2":"WC"},I:{"1":"H","16":"hB XC YC ZC","388":"bC cC","900":"I aC qB"},J:{"16":"D","388":"A"},K:{"1":"U","16":"A B fB pB","900":"C gB"},L:{"1":"H"},M:{"1":"T"},N:{"900":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"388":"rC"}},B:1,C:"Constraint Validation API"}; +module.exports={A:{A:{"2":"J D E F 4B","900":"A B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","388":"L G M","900":"C K"},C:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","260":"KB LB","388":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB","900":"I p J D E F A B C K L G M N O q r s t u v w x y z"},D:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L","388":"0 1 2 3 4 5 6 7 8 9 w x y z AB","900":"G M N O q r s t u v"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p 9B uB","388":"E F CC DC","900":"J D AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F B HC IC JC KC lB 2B","388":"G M N O q r s t u v w x","900":"C LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B","388":"E PC QC RC SC","900":"NC OC"},H:{"2":"gC"},I:{"1":"H","16":"oB hC iC jC","388":"lC mC","900":"I kC 3B"},J:{"16":"D","388":"A"},K:{"1":"c","16":"A B lB 2B","900":"C mB"},L:{"1":"H"},M:{"1":"b"},N:{"900":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"388":"1C"}},B:1,C:"Constraint Validation API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contenteditable.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contenteditable.js index 875204f902c..ad05fef9de4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contenteditable.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contenteditable.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB","4":"hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"2":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"D A"},K:{"1":"U gB","2":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"contenteditable attribute (basic support)"}; +module.exports={A:{A:{"1":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B","4":"oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"2":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"D A"},K:{"1":"c mB","2":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"contenteditable attribute (basic support)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contentsecuritypolicy.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contentsecuritypolicy.js index 4837805ab31..7d9333eb339 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contentsecuritypolicy.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contentsecuritypolicy.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","132":"A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","129":"I j J D E F A B C K L G M N O k l m n"},D:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K","257":"L G M N O k l m n o p"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB","257":"J 0B","260":"zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB","257":"EC","260":"DC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D","257":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"257":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"Content Security Policy 1.0"}; +module.exports={A:{A:{"2":"J D E F 4B","132":"A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","129":"I p J D E F A B C K L G M N O q r s t"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K","257":"L G M N O q r s t u v"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB","257":"J BC","260":"AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B","257":"OC","260":"NC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D","257":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Content Security Policy 1.0"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js index 701fad439ac..852a7b6757d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L","32772":"G M N O"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v tB uB","132":"w x y z","260":"0","516":"1 2 3 4 5 6 7 8 9","8196":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","1028":"1 2 3","2052":"4"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n 7B 8B 9B AC fB pB BC gB","1028":"o p q","2052":"r"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"4100":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"8196":"rC"}},B:2,C:"Content Security Policy Level 2"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L","4100":"G M N O"},C:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","132":"2 3 4 5","260":"6","516":"7 8 9 AB BB CB DB EB FB"},D:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 I p J D E F A B C K L G M N O q r s t u v w x y z","1028":"7 8 9","2052":"AB"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t HC IC JC KC lB 2B LC mB","1028":"u v w","2052":"x"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"Content Security Policy Level 2"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cookie-store-api.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cookie-store-api.js index 9cb50523041..9d631e6604f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cookie-store-api.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cookie-store-api.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"Y Z a b c d e f g T h H i","2":"C K L G M N O","194":"P Q R S V W X"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB","194":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB 7B 8B 9B AC fB pB BC gB","194":"GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mC nC oC","2":"I eC fC gC hC iC mB jC kC lC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Cookie Store API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","194":"P Q R S T U V"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB","194":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB HC IC JC KC lB 2B LC mB","194":"MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"Cookie Store API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cors.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cors.js index e4e071ff611..b610ac66e79 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cors.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cors.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D rB","132":"A","260":"E F"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB","1025":"jB PB QB U RB SB TB UB VB WB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"I j J D E F A B C"},E:{"2":"yB lB","513":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","644":"I j zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC fB pB BC"},G:{"513":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","644":"lB CC qB DC"},H:{"2":"WC"},I:{"1":"H bC cC","132":"hB I XC YC ZC aC qB"},J:{"1":"A","132":"D"},K:{"1":"C U gB","2":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","132":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Cross-Origin Resource Sharing"}; +module.exports={A:{A:{"1":"B","2":"J D 4B","132":"A","260":"E F"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB","1025":"qB VB WB c XB YB ZB aB bB cB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"I p J D E F A B C"},E:{"2":"9B uB","513":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","644":"I p AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC lB 2B LC"},G:{"513":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","644":"uB MC 3B NC"},H:{"2":"gC"},I:{"1":"H lC mC","132":"oB I hC iC jC kC 3B"},J:{"1":"A","132":"D"},K:{"1":"C c mB","2":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","132":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Cross-Origin Resource Sharing"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/createimagebitmap.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/createimagebitmap.js index ab892055107..9d82d7c03c9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/createimagebitmap.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/createimagebitmap.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","3076":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB","132":"FB GB","260":"HB IB","516":"JB KB LB MB NB"},E:{"2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B 4B","516":"G 5B nB oB 6B"},F:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","132":"2 3","260":"4 5","516":"6 7 8 9 AB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC","516":"VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"3076":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","16":"I eC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"3076":"rC"}},B:1,C:"createImageBitmap"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB 6B 7B","1028":"e f g h i j k l m n o b H sB tB","3076":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d"},D:{"1":"pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB","132":"LB MB","260":"NB OB","516":"PB QB RB SB TB"},E:{"2":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB EC","4100":"G FC xB yB zB 0B nB 1B GC"},F:{"1":"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","132":"8 9","260":"AB BB","516":"CB DB EB FB GB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC","4100":"fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1028":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","16":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"3076":"1C"}},B:1,C:"createImageBitmap"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/credential-management.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/credential-management.js index dac854061d8..15f674048a1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/credential-management.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/credential-management.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB","66":"DB EB FB","129":"GB HB IB JB KB LB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","2":"I eC fC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"Credential Management API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB","66":"JB KB LB","129":"MB NB OB PB QB RB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB HC IC JC KC lB 2B LC mB"},G:{"1":"dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Credential Management API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cryptography.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cryptography.js index 93986092e91..ddec65dd409 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cryptography.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/cryptography.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"rB","8":"J D E F A","164":"B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","513":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","8":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w tB uB","66":"x y"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","8":"0 1 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","8":"I j J D yB lB zB 0B","289":"E F A 1B 2B mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","8":"F B C G M N O k l m n o 7B 8B 9B AC fB pB BC gB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","8":"lB CC qB DC EC FC","289":"E GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","8":"hB I XC YC ZC aC qB bC cC"},J:{"8":"D A"},K:{"1":"U","8":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"8":"A","164":"B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"Web Cryptography"}; +module.exports={A:{A:{"2":"4B","8":"J D E F A","164":"B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","513":"C K L G M N O"},C:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","8":"0 1 2 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","66":"3 4"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","8":"0 1 2 3 4 5 6 7 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"I p J D 9B uB AC BC","289":"E F A CC DC vB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","8":"F B C G M N O q r s t u HC IC JC KC lB 2B LC mB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","8":"uB MC 3B NC OC PC","289":"E QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","8":"oB I hC iC jC kC 3B lC mC"},J:{"8":"D A"},K:{"1":"c","8":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"8":"A","164":"B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"Web Cryptography"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-all.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-all.js index acd5ac244f1..2170e01f151 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-all.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-all.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r tB uB"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o 7B 8B 9B AC fB pB BC gB"},G:{"1":"IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC"},H:{"2":"WC"},I:{"1":"H cC","2":"hB I XC YC ZC aC qB bC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS all property"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x 6B 7B"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u HC IC JC KC lB 2B LC mB"},G:{"1":"SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC"},H:{"2":"gC"},I:{"1":"H mC","2":"oB I hC iC jC kC 3B lC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS all property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-animation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-animation.js index e014b79d7f8..417fd234492 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-animation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-animation.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I tB uB","33":"j J D E F A B C K L G"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"0 1 2 3 4 5 6 7 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB","33":"J D E zB 0B 1B","292":"I j"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC fB pB BC","33":"C G M N O k l m n o p q r s t u"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","33":"E EC FC GC","164":"lB CC qB DC"},H:{"2":"WC"},I:{"1":"H","33":"I aC qB bC cC","164":"hB XC YC ZC"},J:{"33":"D A"},K:{"1":"U gB","2":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"33":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"CSS Animation"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I 6B 7B","33":"p J D E F A B C K L G"},D:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB","33":"J D E AC BC CC","292":"I p"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC lB 2B LC","33":"0 C G M N O q r s t u v w x y z"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","33":"E OC PC QC","164":"uB MC 3B NC"},H:{"2":"gC"},I:{"1":"H","33":"I kC 3B lC mC","164":"oB hC iC jC"},J:{"33":"D A"},K:{"1":"c mB","2":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"CSS Animation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-any-link.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-any-link.js index fbfc9b662f2..3d38785cd76 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-any-link.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-any-link.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","16":"sB","33":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB tB uB"},D:{"1":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","16":"I j J yB lB zB","33":"D E 0B 1B"},F:{"1":"HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB DC","33":"E EC FC GC"},H:{"2":"WC"},I:{"1":"H","16":"hB I XC YC ZC aC qB","33":"bC cC"},J:{"16":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"33":"dC"},P:{"1":"iC mB jC kC lC mC nC oC","16":"I","33":"eC fC gC hC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"33":"rC"}},B:5,C:"CSS :any-link selector"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","16":"5B","33":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB 6B 7B"},D:{"1":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p J 9B uB AC","33":"D E BC CC"},F:{"1":"NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B NC","33":"E OC PC QC"},H:{"2":"gC"},I:{"1":"H","16":"oB I hC iC jC kC 3B","33":"lC mC"},J:{"16":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"sC vB tC uC vC wC xC nB yC zC","16":"I","33":"oC pC qC rC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"33":"1C"}},B:5,C:"CSS :any-link selector"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-appearance.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-appearance.js index 46df2ef4c5c..840f8f369a6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-appearance.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-appearance.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"V W X Y Z a b c d e f g T h H i","33":"S","164":"P Q R","388":"C K L G M N O"},C:{"1":"Q R kB S V W X Y Z a b c d e f g T h H i","164":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P","676":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"V W X Y Z a b c d e f g T h H i vB wB xB","33":"S","164":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R"},E:{"1":"oB 6B","164":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB"},F:{"1":"ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"WB XB YB","164":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB"},G:{"1":"oB","164":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB"},H:{"2":"WC"},I:{"1":"H","164":"hB I XC YC ZC aC qB bC cC"},J:{"164":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A","388":"B"},O:{"164":"dC"},P:{"164":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"164":"pC"},R:{"164":"qC"},S:{"164":"rC"}},B:5,C:"CSS Appearance"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"T U V W X Y Z a d e f g h i j k l m n o b H","33":"S","164":"P Q R","388":"C K L G M N O"},C:{"1":"Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","164":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P","676":"0 1 2 3 4 5 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"S","164":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R"},E:{"1":"yB zB 0B nB 1B GC","164":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB"},F:{"1":"fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"cB dB eB","164":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB"},G:{"1":"yB zB 0B nB 1B","164":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},H:{"2":"gC"},I:{"1":"H","164":"oB I hC iC jC kC 3B lC mC"},J:{"164":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A","388":"B"},O:{"164":"nC"},P:{"164":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"164":"wB"},R:{"1":"0C"},S:{"164":"1C"}},B:5,C:"CSS Appearance"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-at-counter-style.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-at-counter-style.js index 5ee576f6f7d..72977aaf1d8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-at-counter-style.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-at-counter-style.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b","132":"c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x tB uB","132":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b","132":"c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB 7B 8B 9B AC fB pB BC gB","132":"dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","132":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","132":"U"},L:{"132":"H"},M:{"132":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC","132":"oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"132":"rC"}},B:4,C:"CSS Counter Styles"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z","132":"a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","132":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z","132":"a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB HC IC JC KC lB 2B LC mB","132":"jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","132":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","132":"c"},L:{"132":"H"},M:{"132":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC","132":"nB yC zC"},Q:{"2":"wB"},R:{"132":"0C"},S:{"132":"1C"}},B:4,C:"CSS Counter Styles"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-autofill.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-autofill.js index 0e293ffb872..88cdf91cf9b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-autofill.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-autofill.js @@ -1 +1 @@ -module.exports={A:{D:{"1":"T h H i vB wB xB","33":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g"},L:{"1":"H"},B:{"1":"T h H i","2":"C K L G M N O","33":"P Q R S V W X Y Z a b c d e f g"},C:{"1":"X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W tB uB"},M:{"1":"T"},A:{"2":"J D E F A B rB"},F:{"1":"kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R"},K:{"2":"A B C fB pB gB","33":"U"},E:{"1":"G 5B nB oB","2":"6B","33":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B 4B"},G:{"1":"VC nB oB","33":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC"},P:{"33":"I eC fC gC hC iC mB jC kC lC mC nC oC"},I:{"1":"H","33":"hB I XC YC ZC aC qB bC cC"}},B:6,C:":autofill CSS pseudo-class"}; +module.exports={A:{D:{"33":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},L:{"33":"H"},B:{"2":"C K L G M N O","33":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U 6B 7B"},M:{"1":"b"},A:{"2":"J D E F A B 4B"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},K:{"2":"A B C lB 2B mB","33":"c"},E:{"1":"G FC xB yB zB 0B nB 1B","2":"GC","33":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB EC"},G:{"1":"fC xB yB zB 0B nB 1B","33":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC"},P:{"33":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},I:{"2":"oB I hC iC jC kC 3B","33":"H lC mC"}},B:6,C:":autofill CSS pseudo-class"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-backdrop-filter.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-backdrop-filter.js index 69246580cb1..f4361728fc8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-backdrop-filter.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-backdrop-filter.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M","257":"N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB tB uB","578":"WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB","194":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB"},E:{"2":"I j J D E yB lB zB 0B 1B","33":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x y 7B 8B 9B AC fB pB BC gB","194":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB"},G:{"2":"E lB CC qB DC EC FC GC","33":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"578":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"kC lC mC nC oC","2":"I","194":"eC fC gC hC iC mB jC"},Q:{"194":"pC"},R:{"194":"qC"},S:{"2":"rC"}},B:7,C:"CSS Backdrop Filter"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M","257":"N O"},C:{"1":"o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB 6B 7B","578":"cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n"},D:{"1":"iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB","194":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB"},E:{"2":"I p J D E 9B uB AC BC CC","33":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","194":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB"},G:{"2":"E uB MC 3B NC OC PC QC","33":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"uC vC wC xC nB yC zC","2":"I","194":"oC pC qC rC sC vB tC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"CSS Backdrop Filter"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-background-offsets.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-background-offsets.js index 3071dcb2bb8..1ca30aaec77 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-background-offsets.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-background-offsets.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS background-position edge offsets"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS background-position edge offsets"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-backgroundblendmode.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-backgroundblendmode.js index fc63ea6d2e6..1ca70daa960 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-backgroundblendmode.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-backgroundblendmode.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 AB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","260":"BB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B","132":"E F A 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m 7B 8B 9B AC fB pB BC gB","260":"y"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC","132":"E GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS background-blend-mode"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"6 7 8 9 AB BB CB DB EB FB GB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 I p J D E F A B C K L G M N O q r s t u v w x y z","260":"HB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC","132":"E F A CC DC"},F:{"1":"0 1 2 3 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s HC IC JC KC lB 2B LC mB","260":"4"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC","132":"E QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS background-blend-mode"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js index c0c23436d44..7f5c0fc9bc3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","164":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w tB uB"},D:{"2":"I j J D E F A B C K L G M N O k l m","164":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J yB lB zB","164":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F 7B 8B 9B AC","129":"B C fB pB BC gB","164":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"lB CC qB DC EC","164":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"132":"WC"},I:{"2":"hB I XC YC ZC aC qB","164":"H bC cC"},J:{"2":"D","164":"A"},K:{"2":"A","129":"B C fB pB gB","164":"U"},L:{"164":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"164":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"164":"pC"},R:{"164":"qC"},S:{"1":"rC"}},B:5,C:"CSS box-decoration-break"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","164":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"2":"I p J D E F A B C K L G M N O q r s","164":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J 9B uB AC","164":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F HC IC JC KC","129":"B C lB 2B LC mB","164":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"uB MC 3B NC OC","164":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"132":"gC"},I:{"2":"oB I hC iC jC kC 3B","164":"H lC mC"},J:{"2":"D","164":"A"},K:{"2":"A","129":"B C lB 2B mB","164":"c"},L:{"164":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"164":"nC"},P:{"164":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"164":"wB"},R:{"164":"0C"},S:{"1":"1C"}},B:4,C:"CSS box-decoration-break"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-boxshadow.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-boxshadow.js index 87e8f6e7164..f100cbfa3c4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-boxshadow.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-boxshadow.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","33":"tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"I j J D E F"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","33":"j","164":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","33":"CC qB","164":"lB"},H:{"2":"WC"},I:{"1":"I H aC qB bC cC","164":"hB XC YC ZC"},J:{"1":"A","33":"D"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS3 Box-shadow"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","33":"6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"I p J D E F"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","33":"p","164":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","33":"MC 3B","164":"uB"},H:{"2":"gC"},I:{"1":"I H kC 3B lC mC","164":"oB hC iC jC"},J:{"1":"A","33":"D"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS3 Box-shadow"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-canvas.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-canvas.js index ae28a222091..b183d4764d1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-canvas.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-canvas.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB"},E:{"2":"yB lB","33":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","33":"G M N O k l m n o p q r s t u v w x y z"},G:{"33":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"H","33":"hB I XC YC ZC aC qB bC cC"},J:{"33":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"eC fC gC hC iC mB jC kC lC mC nC oC","33":"I"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"CSS Canvas Drawings"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},E:{"2":"9B uB","33":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"6 7 8 9 F B C AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 G M N O q r s t u v w x y z"},G:{"33":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"H","33":"oB I hC iC jC kC 3B lC mC"},J:{"33":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","33":"I"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"CSS Canvas Drawings"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-caret-color.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-caret-color.js index 58ef9f2a505..cd9cfa79b55 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-caret-color.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-caret-color.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB tB uB"},D:{"1":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB"},F:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","2":"I eC fC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"CSS caret-color"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB 6B 7B"},D:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB HC IC JC KC lB 2B LC mB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:2,C:"CSS caret-color"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-cascade-layers.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-cascade-layers.js index 7793a8c78f1..d3a41e5e078 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-cascade-layers.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-cascade-layers.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g","322":"T h H i"},C:{"1":"h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e tB uB","194":"f g T"},D:{"1":"i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g","322":"T h H"},E:{"1":"oB 6B","2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Cascade Layers"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"k l m n o b H","2":"C K L G M N O P Q R S T U V W X Y Z a d e f g","322":"h i j"},C:{"1":"i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e 6B 7B","194":"f g h"},D:{"1":"k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g","322":"h i j"},E:{"1":"yB zB 0B nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB"},F:{"1":"V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U HC IC JC KC lB 2B LC mB"},G:{"1":"yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"zC","2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"CSS Cascade Layers"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-case-insensitive.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-case-insensitive.js index a8ea01d4cbe..84a55fad34e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-case-insensitive.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-case-insensitive.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB tB uB"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:5,C:"Case-insensitive CSS attribute selectors"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB 6B 7B"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Case-insensitive CSS attribute selectors"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-clip-path.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-clip-path.js index 5e456ecb866..6c9db9f9d79 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-clip-path.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-clip-path.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N","260":"P Q R S V W X Y Z a b c d e f g T h H i","3138":"O"},C:{"1":"JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","132":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB tB uB","644":"CB DB EB FB GB HB IB"},D:{"2":"I j J D E F A B C K L G M N O k l m n o","260":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","292":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},E:{"2":"I j J yB lB zB 0B","292":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","260":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","292":"0 1 2 3 4 5 6 G M N O k l m n o p q r s t u v w x y z"},G:{"2":"lB CC qB DC EC","292":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","260":"H","292":"bC cC"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","260":"U"},L:{"260":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"292":"dC"},P:{"292":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"292":"pC"},R:{"260":"qC"},S:{"644":"rC"}},B:4,C:"CSS clip-path property (for HTML)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N","260":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","3138":"O"},C:{"1":"PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","132":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB 6B 7B","644":"IB JB KB LB MB NB OB"},D:{"2":"I p J D E F A B C K L G M N O q r s t u","260":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","292":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB"},E:{"2":"I p J 9B uB AC BC","260":"L G wB EC FC xB yB zB 0B nB 1B GC","292":"D E F A B C K CC DC vB lB mB"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","260":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","292":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB"},G:{"2":"uB MC 3B NC OC","260":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","292":"E PC QC RC SC TC UC VC WC XC YC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B","260":"H","292":"lC mC"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","260":"c"},L:{"260":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"260":"nC"},P:{"292":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"260":"wB"},R:{"260":"0C"},S:{"644":"1C"}},B:4,C:"CSS clip-path property (for HTML)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-color-adjust.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-color-adjust.js index 96d4c23ac43..89cda8480fa 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-color-adjust.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-color-adjust.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","33":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB tB uB"},D:{"16":"I j J D E F A B C K L G M N O","33":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j yB lB zB","33":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"16":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"16":"hB I XC YC ZC aC qB bC cC","33":"H"},J:{"16":"D A"},K:{"2":"A B C fB pB gB","33":"U"},L:{"16":"H"},M:{"1":"T"},N:{"16":"A B"},O:{"16":"dC"},P:{"16":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"33":"pC"},R:{"16":"qC"},S:{"1":"rC"}},B:5,C:"CSS color-adjust"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","33":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB 6B 7B"},D:{"16":"I p J D E F A B C K L G M N O","33":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p 9B uB AC","33":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"16":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"16":"oB I hC iC jC kC 3B lC mC","33":"H"},J:{"16":"D A"},K:{"2":"A B C lB 2B mB","33":"c"},L:{"16":"H"},M:{"1":"b"},N:{"16":"A B"},O:{"16":"nC"},P:{"16":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"33":"wB"},R:{"16":"0C"},S:{"1":"1C"}},B:4,C:"CSS print-color-adjust"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-color-function.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-color-function.js index dded9409af1..76711afb54a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-color-function.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-color-function.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"G 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B","132":"B C K L mB fB gB 3B 4B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC","132":"KC LC MC NC OC PC QC RC SC TC UC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS color() function"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"G FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC","132":"B C K L vB lB mB wB EC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC","132":"UC VC WC XC YC ZC aC bC cC dC eC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"CSS color() function"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-conic-gradients.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-conic-gradients.js index 3698a2f6ca3..a8afcbce8d0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-conic-gradients.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-conic-gradients.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB tB uB","578":"bB cB dB eB P Q R kB"},D:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB","194":"iB OB jB PB QB U RB SB TB UB"},E:{"1":"K L G gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB"},F:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB 7B 8B 9B AC fB pB BC gB","194":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB"},G:{"1":"OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mB jC kC lC mC nC oC","2":"I eC fC gC hC iC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Conical Gradients"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB 6B 7B","578":"hB iB jB kB P Q R rB"},D:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB","194":"pB UB qB VB WB c XB YB ZB aB"},E:{"1":"K L G mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB"},F:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HC IC JC KC lB 2B LC mB","194":"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB"},G:{"1":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC sC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"CSS Conical Gradients"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-container-queries.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-container-queries.js index 5dd5f8c4abb..24e474df872 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-container-queries.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-container-queries.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d","194":"e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c","194":"e f g T h H i vB wB xB","450":"d"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB 7B 8B 9B AC fB pB BC gB","194":"P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Container Queries"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b","516":"H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a","194":"e f g h i j k l m n o b","450":"d","516":"H"},E:{"1":"nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB HC IC JC KC lB 2B LC mB","194":"P Q R rB S T U V W X Y Z","516":"a"},G:{"1":"nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","516":"H"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"516":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS Container Queries (Size)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-container-query-units.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-container-query-units.js new file mode 100644 index 00000000000..238b7534f1c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-container-query-units.js @@ -0,0 +1 @@ +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"H","2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d","194":"m n o b","450":"e f g h i j k l"},E:{"1":"nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"1":"a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB HC IC JC KC lB 2B LC mB","194":"P Q R rB S T U V W X Y Z"},G:{"1":"nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS Container Query Units"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-containment.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-containment.js index 242757ecd19..53321201413 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-containment.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-containment.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","194":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB"},D:{"1":"HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB","66":"GB"},E:{"1":"oB 6B","2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB"},F:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","66":"3 4"},G:{"1":"oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I eC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"194":"rC"}},B:2,C:"CSS Containment"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB 6B 7B","194":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB"},D:{"1":"NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","66":"MB"},E:{"1":"yB zB 0B nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB"},F:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","66":"9 AB"},G:{"1":"yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"194":"1C"}},B:2,C:"CSS Containment"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-content-visibility.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-content-visibility.js index 240b8ec1f8e..beb181c2bf9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-content-visibility.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-content-visibility.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"W X Y Z a b c d e f g T h H i","2":"C K L G M N O P Q R S V"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mC nC oC","2":"I eC fC gC hC iC mB jC kC lC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS content-visibility"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O P Q R S T"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"CSS content-visibility"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-counters.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-counters.js index bd9dd5242b6..428ed3ca6d4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-counters.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-counters.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"E F A B","2":"J D rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS Counters"}; +module.exports={A:{A:{"1":"E F A B","2":"J D 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS Counters"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-crisp-edges.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-crisp-edges.js index a0ee25b7d35..4a4de897b20 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-crisp-edges.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-crisp-edges.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J rB","2340":"D E F A B"},B:{"2":"C K L G M N O","1025":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"e f g T h H i","2":"sB hB tB","513":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d","545":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U uB"},D:{"2":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","1025":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","164":"J","4644":"D E F 0B 1B 2B"},F:{"2":"F B G M N O k l m n o p q r s 7B 8B 9B AC fB pB","545":"C BC gB","1025":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB","4260":"DC EC","4644":"E FC GC HC IC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","1025":"H"},J:{"2":"D","4260":"A"},K:{"2":"A B fB pB","545":"C gB","1025":"U"},L:{"1025":"H"},M:{"545":"T"},N:{"2340":"A B"},O:{"1":"dC"},P:{"1025":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1025":"pC"},R:{"1025":"qC"},S:{"4097":"rC"}},B:7,C:"Crisp edges/pixelated images"}; +module.exports={A:{A:{"2":"J 4B","2340":"D E F A B"},B:{"2":"C K L G M N O","1025":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"e f g h i j k l m n o b H sB tB","2":"5B oB 6B","513":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d","545":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB","1025":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","164":"J","4644":"D E F BC CC DC"},F:{"2":"F B G M N O q r s t u v w x y HC IC JC KC lB 2B","545":"C LC mB","1025":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B","4260":"NC OC","4644":"E PC QC RC SC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","1025":"H"},J:{"2":"D","4260":"A"},K:{"2":"A B lB 2B","545":"C mB","1025":"c"},L:{"1025":"H"},M:{"1":"b"},N:{"2340":"A B"},O:{"1025":"nC"},P:{"1025":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1025":"wB"},R:{"1025":"0C"},S:{"4097":"1C"}},B:4,C:"Crisp edges/pixelated images"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-cross-fade.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-cross-fade.js index 5d962ddcaea..bf53b05c53d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-cross-fade.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-cross-fade.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","33":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"I j J D E F A B C K L G M","33":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB","33":"J D E F zB 0B 1B 2B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB","33":"E DC EC FC GC HC IC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","33":"H bC cC"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","33":"U"},L:{"33":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"33":"dC"},P:{"33":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"33":"pC"},R:{"33":"qC"},S:{"2":"rC"}},B:4,C:"CSS Cross-Fade Function"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","33":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"I p J D E F A B C K L G M","33":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB","33":"J D E F AC BC CC DC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B","33":"E NC OC PC QC RC SC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B","33":"H lC mC"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","33":"c"},L:{"33":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"33":"nC"},P:{"33":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"33":"wB"},R:{"33":"0C"},S:{"2":"1C"}},B:4,C:"CSS Cross-Fade Function"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-default-pseudo.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-default-pseudo.js index 7886d00c09f..35ea2c590a1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-default-pseudo.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-default-pseudo.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","16":"sB hB tB uB"},D:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L","132":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","16":"I j yB lB","132":"J D E F A zB 0B 1B 2B"},F:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F B 7B 8B 9B AC fB pB","132":"0 1 2 G M N O k l m n o p q r s t u v w x y z","260":"C BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB DC EC","132":"E FC GC HC IC JC"},H:{"260":"WC"},I:{"1":"H","16":"hB XC YC ZC","132":"I aC qB bC cC"},J:{"16":"D","132":"A"},K:{"1":"U","16":"A B C fB pB","260":"gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"132":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","132":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:7,C:":default CSS pseudo-class"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","16":"5B oB 6B 7B"},D:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L","132":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p 9B uB","132":"J D E F A AC BC CC DC"},F:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F B HC IC JC KC lB 2B","132":"0 1 2 3 4 5 6 7 8 G M N O q r s t u v w x y z","260":"C LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B NC OC","132":"E PC QC RC SC TC"},H:{"260":"gC"},I:{"1":"H","16":"oB hC iC jC","132":"I kC 3B lC mC"},J:{"16":"D","132":"A"},K:{"1":"c","16":"A B C lB 2B","260":"mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","132":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:":default CSS pseudo-class"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-descendant-gtgt.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-descendant-gtgt.js index 3a4cdb6ecdd..3d83c80fc8e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-descendant-gtgt.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-descendant-gtgt.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O Q R S V W X Y Z a b c d e f g T h H i","16":"P"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"B","2":"I j J D E F A C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Explicit descendant combinator >>"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O Q R S T U V W X Y Z a d e f g h i j k l m n o b H","16":"P"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"B","2":"I p J D E F A C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Explicit descendant combinator >>"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-deviceadaptation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-deviceadaptation.js index 49398b01ce1..e710313bbc6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-deviceadaptation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-deviceadaptation.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","164":"A B"},B:{"66":"P Q R S V W X Y Z a b c d e f g T h H i","164":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"I j J D E F A B C K L G M N O k l m n o p q r s t","66":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","66":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"292":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A U","292":"B C fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"164":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"66":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Device Adaptation"}; +module.exports={A:{A:{"2":"J D E F 4B","164":"A B"},B:{"66":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","164":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"I p J D E F A B C K L G M N O q r s t u v w x y z","66":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB HC IC JC KC lB 2B LC mB","66":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"292":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A c","292":"B C lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"164":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"66":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS Device Adaptation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-dir-pseudo.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-dir-pseudo.js index a5e93982ae2..509a8fe9932 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-dir-pseudo.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-dir-pseudo.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M tB uB","33":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB DB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b","194":"c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"33":"rC"}},B:5,C:":dir() CSS pseudo-class"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b","194":"H"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M 6B 7B","33":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z","194":"a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B","322":"GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z HC IC JC KC lB 2B LC mB","194":"a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"33":"1C"}},B:5,C:":dir() CSS pseudo-class"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-display-contents.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-display-contents.js index aee23122b5c..cb810898359 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-display-contents.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-display-contents.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"a b c d e f g T h H i","2":"C K L G M N O","260":"P Q R S V W X Y Z"},C:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","260":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB"},D:{"1":"a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","194":"NB iB OB jB PB QB U","260":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z"},E:{"1":"oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB","260":"L G 3B 4B 5B nB","772":"C K fB gB"},F:{"1":"cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB 7B 8B 9B AC fB pB BC gB","260":"HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB"},G:{"1":"oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC","260":"SC TC UC VC nB","772":"MC NC OC PC QC RC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"nC oC","2":"I eC fC gC hC","260":"iC mB jC kC lC mC"},Q:{"260":"pC"},R:{"2":"qC"},S:{"260":"rC"}},B:5,C:"CSS display: contents"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","260":"P Q R S T U V W X"},C:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","260":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB"},D:{"1":"Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB","194":"TB pB UB qB VB WB c","260":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X"},E:{"2":"I p J D E F A B 9B uB AC BC CC DC vB","260":"L G wB EC FC xB yB zB 0B","772":"C K lB mB","2052":"1B GC","3076":"nB"},F:{"1":"iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB HC IC JC KC lB 2B LC mB","260":"NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC","260":"cC dC eC fC xB yB zB 0B","772":"WC XC YC ZC aC bC","2052":"1B","3076":"nB"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"260":"nC"},P:{"1":"xC nB yC zC","2":"I oC pC qC rC","260":"sC vB tC uC vC wC"},Q:{"260":"wB"},R:{"1":"0C"},S:{"260":"1C"}},B:4,C:"CSS display: contents"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-element-function.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-element-function.js index 62458ecb260..ce2d641c59d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-element-function.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-element-function.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"33":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","164":"sB hB tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"33":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"33":"rC"}},B:5,C:"CSS element() function"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"33":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","164":"5B oB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"33":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"33":"1C"}},B:5,C:"CSS element() function"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-env-function.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-env-function.js index 681827c7490..5201072303d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-env-function.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-env-function.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U tB uB"},D:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB","132":"B"},F:{"1":"LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB 7B 8B 9B AC fB pB BC gB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC","132":"LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mB jC kC lC mC nC oC","2":"I eC fC gC hC iC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"CSS Environment Variables env()"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c 6B 7B"},D:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB","132":"B"},F:{"1":"RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB HC IC JC KC lB 2B LC mB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC","132":"VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC sC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"CSS Environment Variables env()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-exclusions.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-exclusions.js index a587581f232..960122d7a90 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-exclusions.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-exclusions.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","33":"A B"},B:{"2":"P Q R S V W X Y Z a b c d e f g T h H i","33":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"33":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Exclusions Level 1"}; +module.exports={A:{A:{"2":"J D E F 4B","33":"A B"},B:{"2":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","33":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"33":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS Exclusions Level 1"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-featurequeries.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-featurequeries.js index 994a0bdfb9f..105a3e58ff9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-featurequeries.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-featurequeries.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B C 7B 8B 9B AC fB pB BC"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS Feature Queries"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v w x y"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B C HC IC JC KC lB 2B LC"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS Feature Queries"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-file-selector-button.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-file-selector-button.js index 630bf01b883..86a060b4c96 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-file-selector-button.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-file-selector-button.js @@ -1 +1 @@ -module.exports={A:{D:{"1":"a b c d e f g T h H i vB wB xB","33":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z"},L:{"1":"H"},B:{"1":"a b c d e f g T h H i","33":"C K L G M N O P Q R S V W X Y Z"},C:{"1":"kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R tB uB"},M:{"1":"T"},A:{"2":"J D E F rB","33":"A B"},F:{"1":"bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB"},K:{"1":"U","2":"A B C fB pB gB"},E:{"1":"G 4B 5B nB oB","2":"6B","33":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B"},G:{"1":"UC VC nB oB","33":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC"},P:{"1":"nC oC","33":"I eC fC gC hC iC mB jC kC lC mC"},I:{"1":"H","33":"hB I XC YC ZC aC qB bC cC"}},B:6,C:"::file-selector-button CSS pseudo-element"}; +module.exports={A:{D:{"1":"Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X"},L:{"1":"H"},B:{"1":"Y Z a d e f g h i j k l m n o b H","33":"C K L G M N O P Q R S T U V W X"},C:{"1":"rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R 6B 7B"},M:{"1":"b"},A:{"2":"J D E F 4B","33":"A B"},F:{"1":"hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB"},K:{"1":"c","2":"A B C lB 2B mB"},E:{"1":"G EC FC xB yB zB 0B nB 1B","2":"GC","33":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB"},G:{"1":"eC fC xB yB zB 0B nB 1B","33":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC"},P:{"1":"xC nB yC zC","33":"I oC pC qC rC sC vB tC uC vC wC"},I:{"1":"H","2":"oB I hC iC jC kC 3B","33":"lC mC"}},B:6,C:"::file-selector-button CSS pseudo-element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-filter-function.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-filter-function.js index c245bd1cf3b..a5d218dd311 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-filter-function.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-filter-function.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B","33":"F"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC","33":"HC IC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS filter() function"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC","33":"F"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC","33":"RC SC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS filter() function"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-filters.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-filters.js index 8258108b8c5..d46b72d495f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-filters.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-filters.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","1028":"K L G M N O","1346":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB","196":"z","516":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y uB"},D:{"1":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N","33":"0 1 2 3 4 5 6 7 8 9 O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","33":"J D E F 0B 1B"},F:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 G M N O k l m n o p q r s t u v w x y z"},G:{"1":"IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC","33":"E EC FC GC HC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB","33":"bC cC"},J:{"2":"D","33":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","33":"I eC fC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"CSS Filter Effects"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","1028":"K L G M N O","1346":"C"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B","196":"5","516":"0 1 2 3 4 I p J D E F A B C K L G M N O q r s t u v w x y z 7B"},D:{"1":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N","33":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","33":"J D E F BC CC"},F:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB"},G:{"1":"SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","33":"E OC PC QC RC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B","33":"lC mC"},J:{"2":"D","33":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","33":"I oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"CSS Filter Effects"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-first-letter.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-first-letter.js index 4f106f1e656..3bb3ccbb74c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-first-letter.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-first-letter.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","16":"rB","516":"E","1540":"J D"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","132":"hB","260":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"j J D E","132":"I"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"j yB","132":"I lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","16":"F 7B","260":"B 8B 9B AC fB pB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB"},H:{"1":"WC"},I:{"1":"hB I H aC qB bC cC","16":"XC YC","132":"ZC"},J:{"1":"D A"},K:{"1":"C U gB","260":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"::first-letter CSS pseudo-element selector"}; +module.exports={A:{A:{"1":"F A B","16":"4B","516":"E","1540":"J D"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","132":"oB","260":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"p J D E","132":"I"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"p 9B","132":"I uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","16":"F HC","260":"B IC JC KC lB 2B"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B"},H:{"1":"gC"},I:{"1":"oB I H kC 3B lC mC","16":"hC iC","132":"jC"},J:{"1":"D A"},K:{"1":"C c mB","260":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"::first-letter CSS pseudo-element selector"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-first-line.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-first-line.js index ce70a9a88b8..e4e1eeaf1ee 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-first-line.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-first-line.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","132":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS first-line pseudo-element"}; +module.exports={A:{A:{"1":"F A B","132":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS first-line pseudo-element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-fixed.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-fixed.js index f97dad20593..c7d9980c822 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-fixed.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-fixed.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"D E F A B","2":"rB","8":"J"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B mB fB gB 3B 4B 5B nB oB 6B","1025":"2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB","132":"DC EC FC"},H:{"2":"WC"},I:{"1":"hB H bC cC","260":"XC YC ZC","513":"I aC qB"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS position:fixed"}; +module.exports={A:{A:{"1":"D E F A B","2":"4B","8":"J"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","1025":"DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B","132":"NC OC PC"},H:{"2":"gC"},I:{"1":"oB H lC mC","260":"hC iC jC","513":"I kC 3B"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS position:fixed"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-focus-visible.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-focus-visible.js index 638ad4f7f39..984f4c76fd9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-focus-visible.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-focus-visible.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"X Y Z a b c d e f g T h H i","2":"C K L G M N O","328":"P Q R S V W"},C:{"1":"W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","161":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V"},D:{"1":"X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB","328":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W"},E:{"1":"oB 6B","2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B 4B","578":"G 5B nB"},F:{"1":"YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB 7B 8B 9B AC fB pB BC gB","328":"SB TB UB VB WB XB"},G:{"1":"oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC","578":"VC nB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mC nC oC","2":"I eC fC gC hC iC mB jC kC lC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"161":"rC"}},B:7,C:":focus-visible CSS pseudo-class"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","328":"P Q R S T U"},C:{"1":"U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","161":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T"},D:{"1":"V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB","328":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U"},E:{"1":"yB zB 0B nB 1B GC","2":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB EC","578":"G FC xB"},F:{"1":"eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB HC IC JC KC lB 2B LC mB","328":"YB ZB aB bB cB dB"},G:{"1":"yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC","578":"fC xB"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"161":"1C"}},B:5,C:":focus-visible CSS pseudo-class"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-focus-within.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-focus-within.js index 4bb3c579b63..30eaa226c0c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-focus-within.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-focus-within.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB tB uB"},D:{"1":"OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB","194":"iB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB 7B 8B 9B AC fB pB BC gB","194":"BB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC gC"},Q:{"1":"pC"},R:{"16":"qC"},S:{"2":"rC"}},B:7,C:":focus-within CSS pseudo-class"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB 6B 7B"},D:{"1":"UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB","194":"pB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HC IC JC KC lB 2B LC mB","194":"HB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:":focus-within CSS pseudo-class"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-palette.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-palette.js new file mode 100644 index 00000000000..b0ff10644e6 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-palette.js @@ -0,0 +1 @@ +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"H","2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l"},E:{"1":"yB zB 0B nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB"},F:{"1":"W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V HC IC JC KC lB 2B LC mB"},G:{"1":"yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS font-palette"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-rendering-controls.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-rendering-controls.js index 89cbf906503..9e9cd7ec76e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-rendering-controls.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-rendering-controls.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB tB uB","194":"BB CB DB EB FB GB HB IB JB KB LB MB"},D:{"1":"OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB","66":"EB FB GB HB IB JB KB LB MB NB iB"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB"},F:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","66":"1 2 3 4 5 6 7 8 9 AB BB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I","66":"eC fC gC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"194":"rC"}},B:5,C:"CSS font-display"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB 6B 7B","194":"HB IB JB KB LB MB NB OB PB QB RB SB"},D:{"1":"UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB","66":"KB LB MB NB OB PB QB RB SB TB pB"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB"},F:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","66":"7 8 9 AB BB CB DB EB FB GB HB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I","66":"oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"194":"1C"}},B:5,C:"CSS font-display"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-stretch.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-stretch.js index f1c4e14650a..1d50cb559b8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-stretch.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-font-stretch.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E tB uB"},D:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS font-stretch"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E 6B 7B"},D:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS font-stretch"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-gencontent.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-gencontent.js index a045c232ad2..e6e7ce4da9f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-gencontent.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-gencontent.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D rB","132":"E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS Generated content for pseudo-elements"}; +module.exports={A:{A:{"1":"F A B","2":"J D 4B","132":"E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS Generated content for pseudo-elements"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-gradients.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-gradients.js index 173cf2b66c2..8893d7c1c50 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-gradients.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-gradients.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB","260":"0 M N O k l m n o p q r s t u v w x y z","292":"I j J D E F A B C K L G uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"A B C K L G M N O k l m n o p q","548":"I j J D E F"},E:{"2":"yB lB","260":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","292":"J zB","804":"I j"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC","33":"C BC","164":"fB pB"},G:{"260":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","292":"DC EC","804":"lB CC qB"},H:{"2":"WC"},I:{"1":"H bC cC","33":"I aC qB","548":"hB XC YC ZC"},J:{"1":"A","548":"D"},K:{"1":"U gB","2":"A B","33":"C","164":"fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS Gradients"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B","260":"0 1 2 3 4 5 6 M N O q r s t u v w x y z","292":"I p J D E F A B C K L G 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"A B C K L G M N O q r s t u v w","548":"I p J D E F"},E:{"1":"yB zB 0B nB 1B GC","2":"9B uB","260":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB","292":"J AC","804":"I p"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC","33":"C LC","164":"lB 2B"},G:{"1":"yB zB 0B nB 1B","260":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB","292":"NC OC","804":"uB MC 3B"},H:{"2":"gC"},I:{"1":"H lC mC","33":"I kC 3B","548":"oB hC iC jC"},J:{"1":"A","548":"D"},K:{"1":"c mB","2":"A B","33":"C","164":"lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS Gradients"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-grid-animation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-grid-animation.js new file mode 100644 index 00000000000..b906864e8af --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-grid-animation.js @@ -0,0 +1 @@ +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"CSS Grid animation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-grid.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-grid.js index b05c2e91e6c..5f925f572d7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-grid.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-grid.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","8":"F","292":"A B"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","292":"C K L G"},C:{"1":"JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O tB uB","8":"0 1 2 3 4 k l m n o p q r s t u v w x y z","584":"5 6 7 8 9 AB BB CB DB EB FB GB","1025":"HB IB"},D:{"1":"NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p","8":"q r s t","200":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","1025":"MB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","8":"J D E F A 0B 1B 2B"},F:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s 7B 8B 9B AC fB pB BC gB","200":"0 1 2 3 4 5 6 7 8 t u v w x y z"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC","8":"E EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC","8":"qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"292":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"eC","8":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:4,C:"CSS Grid Layout (level 1)"}; +module.exports={A:{A:{"2":"J D E 4B","8":"F","292":"A B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","292":"C K L G"},C:{"1":"PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O 6B 7B","8":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB","584":"BB CB DB EB FB GB HB IB JB KB LB MB","1025":"NB OB"},D:{"1":"TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v","8":"w x y z","200":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB","1025":"SB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","8":"J D E F A BC CC DC"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x y HC IC JC KC lB 2B LC mB","200":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","8":"E OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC","8":"3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"292":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"oC","8":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS Grid Layout (level 1)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hanging-punctuation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hanging-punctuation.js index ac076a38fbf..4710ba64242 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hanging-punctuation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hanging-punctuation.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS hanging-punctuation"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"CSS hanging-punctuation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-has.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-has.js index 6166604ef45..243a7ccdfe2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-has.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-has.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"oB 6B","2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:":has() CSS relational pseudo-class"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"H","2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n 6B 7B","322":"o b H sB tB"},D:{"1":"H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l","194":"m n o b"},E:{"1":"yB zB 0B nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB"},F:{"1":"a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z HC IC JC KC lB 2B LC mB"},G:{"1":"yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:":has() CSS relational pseudo-class"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hyphenate.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hyphenate.js deleted file mode 100644 index 93163131ab8..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hyphenate.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"16":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","16":"C K L G M N O"},C:{"16":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},E:{"16":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"16":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"16":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"16":"WC"},I:{"16":"hB I H XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"16":"A B C U fB pB gB"},L:{"16":"H"},M:{"16":"T"},N:{"16":"A B"},O:{"16":"dC"},P:{"16":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"16":"pC"},R:{"16":"qC"},S:{"16":"rC"}},B:5,C:"CSS4 Hyphenation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hyphens.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hyphens.js index 0d14a2bb5fb..d472a6e8f9b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hyphens.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-hyphens.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","33":"A B"},B:{"33":"C K L G M N O","132":"P Q R S V W X Y","260":"Z a b c d e f g T h H i"},C:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j tB uB","33":"0 1 2 3 4 5 6 7 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},D:{"1":"Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB","132":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y"},E:{"2":"I j yB lB","33":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","132":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"lB CC","33":"E qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"4":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I","132":"eC"},Q:{"2":"pC"},R:{"132":"qC"},S:{"1":"rC"}},B:5,C:"CSS Hyphenation"}; +module.exports={A:{A:{"2":"J D E F 4B","33":"A B"},B:{"1":"H","33":"C K L G M N O","132":"P Q R S T U V W","260":"X Y Z a d e f g h i j k l m n o b"},C:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B","33":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB"},D:{"1":"X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB","132":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W"},E:{"2":"I p 9B uB","33":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB HC IC JC KC lB 2B LC mB","132":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z"},G:{"2":"uB MC","33":"E 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"4":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I","132":"oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS Hyphenation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-image-orientation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-image-orientation.js index 2bd5e64797c..23a226380d7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-image-orientation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-image-orientation.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"a b c d e f g T h H i","2":"C K L G M N O P Q","257":"R S V W X Y Z"},C:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q tB uB"},D:{"1":"a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q","257":"R S V W X Y Z"},E:{"1":"L G 3B 4B 5B nB oB 6B","2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB"},F:{"1":"UB VB WB XB YB","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB 7B 8B 9B AC fB pB BC gB","257":"ZB aB bB cB dB eB P Q R kB S"},G:{"1":"TC UC VC nB oB","132":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"lC mC nC oC","2":"I eC fC gC hC iC mB jC kC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:4,C:"CSS3 image-orientation"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O P Q","257":"R S T U V W X"},C:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w 6B 7B"},D:{"1":"Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q","257":"R S T U V W X"},E:{"1":"L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB"},F:{"1":"jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB HC IC JC KC lB 2B LC mB","257":"aB bB cB dB eB fB gB hB iB"},G:{"1":"dC eC fC xB yB zB 0B nB 1B","132":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"xC nB yC zC","2":"I oC pC qC rC sC vB tC uC","257":"vC wC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS3 image-orientation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-image-set.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-image-set.js index 0bf48627bb4..ba47de43ae9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-image-set.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-image-set.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","164":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W tB uB","66":"X Y","257":"a b c d e f g T h H i","772":"Z"},D:{"2":"I j J D E F A B C K L G M N O k l","164":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j yB lB zB","132":"A B C K mB fB gB 3B","164":"J D E F 0B 1B 2B","516":"L G 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","164":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"lB CC qB DC","132":"JC KC LC MC NC OC PC QC RC SC","164":"E EC FC GC HC IC","516":"TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","164":"H bC cC"},J:{"2":"D","164":"A"},K:{"2":"A B C fB pB gB","164":"U"},L:{"164":"H"},M:{"257":"T"},N:{"2":"A B"},O:{"164":"dC"},P:{"164":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"164":"pC"},R:{"164":"qC"},S:{"2":"rC"}},B:5,C:"CSS image-set"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","164":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U 6B 7B","66":"V W","257":"Y Z a d e f g h i j k l m n o b H sB tB","772":"X"},D:{"2":"I p J D E F A B C K L G M N O q r","164":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p 9B uB AC","132":"A B C K vB lB mB wB","164":"J D E F BC CC DC","516":"L G EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","164":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"uB MC 3B NC","132":"TC UC VC WC XC YC ZC aC bC cC","164":"E OC PC QC RC SC","516":"dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B","164":"H lC mC"},J:{"2":"D","164":"A"},K:{"2":"A B C lB 2B mB","164":"c"},L:{"164":"H"},M:{"257":"b"},N:{"2":"A B"},O:{"164":"nC"},P:{"164":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"164":"wB"},R:{"164":"0C"},S:{"2":"1C"}},B:5,C:"CSS image-set"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-in-out-of-range.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-in-out-of-range.js index 63fedbf72e0..b0d308f67f9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-in-out-of-range.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-in-out-of-range.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C","260":"K L G M N O"},C:{"1":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB","516":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB"},D:{"1":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I","16":"j J D E F A B C K L","260":"HB","772":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","16":"j","772":"J D E F A zB 0B 1B 2B"},F:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F 7B","260":"4 B C 8B 9B AC fB pB BC gB","772":"0 1 2 3 G M N O k l m n o p q r s t u v w x y z"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB","772":"E DC EC FC GC HC IC JC"},H:{"132":"WC"},I:{"1":"H","2":"hB XC YC ZC","260":"I aC qB bC cC"},J:{"2":"D","260":"A"},K:{"1":"U","260":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","260":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"516":"rC"}},B:5,C:":in-range and :out-of-range CSS pseudo-classes"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C","260":"K L G M N O"},C:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","516":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB"},D:{"1":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I","16":"p J D E F A B C K L","260":"NB","772":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","16":"p","772":"J D E F A AC BC CC DC"},F:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F HC","260":"B C AB IC JC KC lB 2B LC mB","772":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B","772":"E NC OC PC QC RC SC TC"},H:{"132":"gC"},I:{"1":"H","2":"oB hC iC jC","260":"I kC 3B lC mC"},J:{"2":"D","260":"A"},K:{"1":"c","260":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","260":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"516":"1C"}},B:5,C:":in-range and :out-of-range CSS pseudo-classes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js index 4a2eabdd08c..5b92012ea66 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","132":"A B","388":"F"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","132":"C K L G M N O"},C:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","16":"sB hB tB uB","132":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB","388":"I j"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L","132":"0 1 2 3 G M N O k l m n o p q r s t u v w x y z"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","16":"I j J yB lB","132":"D E F A 0B 1B 2B","388":"zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F B 7B 8B 9B AC fB pB","132":"G M N O k l m n o p q","516":"C BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB DC EC","132":"E FC GC HC IC JC"},H:{"516":"WC"},I:{"1":"H","16":"hB XC YC ZC cC","132":"bC","388":"I aC qB"},J:{"16":"D","132":"A"},K:{"1":"U","16":"A B C fB pB","516":"gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"132":"rC"}},B:7,C:":indeterminate CSS pseudo-class"}; +module.exports={A:{A:{"2":"J D E 4B","132":"A B","388":"F"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","132":"C K L G M N O"},C:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","16":"5B oB 6B 7B","132":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","388":"I p"},D:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L","132":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p J 9B uB","132":"D E F A BC CC DC","388":"AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F B HC IC JC KC lB 2B","132":"G M N O q r s t u v w","516":"C LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B NC OC","132":"E PC QC RC SC TC"},H:{"516":"gC"},I:{"1":"H","16":"oB hC iC jC mC","132":"lC","388":"I kC 3B"},J:{"16":"D","132":"A"},K:{"1":"c","16":"A B C lB 2B","516":"mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"132":"1C"}},B:5,C:":indeterminate CSS pseudo-class"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-initial-letter.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-initial-letter.js index c9618b44daf..f22bb961b26 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-initial-letter.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-initial-letter.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E yB lB zB 0B 1B","4":"F","164":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC","164":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Initial Letter"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E 9B uB AC BC CC","4":"F","164":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC","164":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS Initial Letter"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-initial-value.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-initial-value.js index 378c5b2adae..6d5e936ec54 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-initial-value.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-initial-value.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","33":"I j J D E F A B C K L G M N O tB uB","164":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS initial value"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","33":"I p J D E F A B C K L G M N O 6B 7B","164":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS initial value"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-lch-lab.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-lch-lab.js index 78e0d22b0af..26db36f8f5c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-lch-lab.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-lch-lab.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"G 5B nB oB 6B","2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B 4B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"LCH and Lab color values"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"G FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB EC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"LCH and Lab color values"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-letter-spacing.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-letter-spacing.js index 795f98375fb..090cf2fd1df 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-letter-spacing.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-letter-spacing.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","16":"rB","132":"J D E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"I j J D E F A B C K L G M N O k l m n o p q r s t u"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB","132":"I j J lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F 7B","132":"B C G M 8B 9B AC fB pB BC gB"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"2":"WC"},I:{"1":"H bC cC","16":"XC YC","132":"hB I ZC aC qB"},J:{"132":"D A"},K:{"1":"U","132":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"letter-spacing CSS property"}; +module.exports={A:{A:{"1":"F A B","16":"4B","132":"J D E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"0 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B","132":"I p J uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F HC","132":"B C G M IC JC KC lB 2B LC mB"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"2":"gC"},I:{"1":"H lC mC","16":"hC iC","132":"oB I jC kC 3B"},J:{"132":"D A"},K:{"1":"c","132":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"letter-spacing CSS property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-line-clamp.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-line-clamp.js index 61c5ee84851..7a829d5f630 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-line-clamp.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-line-clamp.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M","33":"P Q R S V W X Y Z a b c d e f g T h H i","129":"N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB tB uB","33":"UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"16":"I j J D E F A B C K","33":"0 1 2 3 4 5 6 7 8 9 L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I yB lB","33":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"lB CC qB","33":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"16":"XC YC","33":"hB I H ZC aC qB bC cC"},J:{"33":"D A"},K:{"2":"A B C fB pB gB","33":"U"},L:{"33":"H"},M:{"33":"T"},N:{"2":"A B"},O:{"33":"dC"},P:{"33":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"33":"pC"},R:{"33":"qC"},S:{"2":"rC"}},B:5,C:"CSS line-clamp"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M","33":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","129":"N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB 6B 7B","33":"aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"16":"I p J D E F A B C K","33":"0 1 2 3 4 5 6 7 8 9 L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I 9B uB","33":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"uB MC 3B","33":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"16":"hC iC","33":"oB I H jC kC 3B lC mC"},J:{"33":"D A"},K:{"2":"A B C lB 2B mB","33":"c"},L:{"33":"H"},M:{"33":"b"},N:{"2":"A B"},O:{"33":"nC"},P:{"33":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"33":"wB"},R:{"33":"0C"},S:{"2":"1C"}},B:5,C:"CSS line-clamp"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-logical-props.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-logical-props.js index a90df6fc24a..da547be58f3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-logical-props.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-logical-props.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"a b c d e f g T h H i","2":"C K L G M N O","1028":"Y Z","1540":"P Q R S V W X"},C:{"1":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB","164":"0 1 2 3 4 5 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","1540":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB"},D:{"1":"a b c d e f g T h H i vB wB xB","292":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB","1028":"Y Z","1540":"VB WB XB YB ZB aB bB cB dB eB P Q R S V W X"},E:{"1":"G 5B nB oB 6B","292":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB","1028":"4B","1540":"K L gB 3B"},F:{"1":"cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","292":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB","1028":"aB bB","1540":"LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB"},G:{"1":"VC nB oB","292":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC","1028":"UC","1540":"OC PC QC RC SC TC"},H:{"2":"WC"},I:{"1":"H","292":"hB I XC YC ZC aC qB bC cC"},J:{"292":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"292":"dC"},P:{"1":"nC oC","292":"I eC fC gC hC iC","1540":"mB jC kC lC mC"},Q:{"1540":"pC"},R:{"1540":"qC"},S:{"1540":"rC"}},B:5,C:"CSS Logical Properties"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","1028":"W X","1540":"P Q R S T U V"},C:{"1":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B","164":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB 6B 7B","1540":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB"},D:{"1":"Y Z a d e f g h i j k l m n o b H sB tB 8B","292":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB","1028":"W X","1540":"bB cB dB eB fB gB hB iB jB kB P Q R S T U V"},E:{"1":"G FC xB yB zB 0B nB 1B GC","292":"I p J D E F A B C 9B uB AC BC CC DC vB lB","1028":"EC","1540":"K L mB wB"},F:{"1":"iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","292":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB","1028":"gB hB","1540":"RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB"},G:{"1":"fC xB yB zB 0B nB 1B","292":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC","1028":"eC","1540":"YC ZC aC bC cC dC"},H:{"2":"gC"},I:{"1":"H","292":"oB I hC iC jC kC 3B lC mC"},J:{"292":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"292":"nC"},P:{"1":"xC nB yC zC","292":"I oC pC qC rC sC","1540":"vB tC uC vC wC"},Q:{"1540":"wB"},R:{"1":"0C"},S:{"1540":"1C"}},B:5,C:"CSS Logical Properties"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-marker-pseudo.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-marker-pseudo.js index 2144ecd7395..752cbff74de 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-marker-pseudo.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-marker-pseudo.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"X Y Z a b c d e f g T h H i","2":"C K L G M N O P Q R S V W"},C:{"1":"UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB tB uB"},D:{"1":"X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W"},E:{"1":"6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB","129":"C K L G fB gB 3B 4B 5B nB oB"},F:{"1":"YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB 7B 8B 9B AC fB pB BC gB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mC nC oC","2":"I eC fC gC hC iC mB jC kC lC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS ::marker pseudo-element"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O P Q R S T U"},C:{"1":"aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB 6B 7B"},D:{"1":"V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U"},E:{"1":"GC","2":"I p J D E F A B 9B uB AC BC CC DC vB","129":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B"},F:{"1":"eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB HC IC JC KC lB 2B LC mB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"CSS ::marker pseudo-element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-masks.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-masks.js index e80c863a479..15babd0df11 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-masks.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-masks.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M","164":"P Q R S V W X Y Z a b c d e f g T h H i","3138":"N","12292":"O"},C:{"1":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","260":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB tB uB"},D:{"164":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"yB lB","132":"6B","164":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","164":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"164":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"164":"H bC cC","676":"hB I XC YC ZC aC qB"},J:{"164":"D A"},K:{"2":"A B C fB pB gB","164":"U"},L:{"164":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"164":"dC"},P:{"164":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"164":"pC"},R:{"164":"qC"},S:{"260":"rC"}},B:4,C:"CSS Masks"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M","164":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","3138":"N","12292":"O"},C:{"1":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","260":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB 6B 7B"},D:{"164":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"yB zB 0B nB 1B GC","2":"9B uB","164":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","164":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"yB zB 0B nB 1B","164":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},H:{"2":"gC"},I:{"164":"H lC mC","676":"oB I hC iC jC kC 3B"},J:{"164":"D A"},K:{"2":"A B C lB 2B mB","164":"c"},L:{"164":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"164":"nC"},P:{"164":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"164":"wB"},R:{"164":"0C"},S:{"260":"1C"}},B:4,C:"CSS Masks"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-matches-pseudo.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-matches-pseudo.js index 101c1c45aeb..7d9c2afea58 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-matches-pseudo.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-matches-pseudo.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"Z a b c d e f g T h H i","2":"C K L G M N O","1220":"P Q R S V W X Y"},C:{"1":"eB P Q R kB S V W X Y Z a b c d e f g T h H i","16":"sB hB tB uB","548":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB"},D:{"1":"Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L","164":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U","196":"RB SB TB","1220":"UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y"},E:{"1":"L G 4B 5B nB oB 6B","2":"I yB lB","16":"j","164":"J D E zB 0B 1B","260":"F A B C K 2B mB fB gB 3B"},F:{"1":"bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","164":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB","196":"HB IB JB","1220":"KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB"},G:{"1":"TC UC VC nB oB","16":"lB CC qB DC EC","164":"E FC GC","260":"HC IC JC KC LC MC NC OC PC QC RC SC"},H:{"2":"WC"},I:{"1":"H","16":"hB XC YC ZC","164":"I aC qB bC cC"},J:{"16":"D","164":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"164":"dC"},P:{"1":"nC oC","164":"I eC fC gC hC iC mB jC kC lC mC"},Q:{"1220":"pC"},R:{"164":"qC"},S:{"548":"rC"}},B:5,C:":is() CSS pseudo-class"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","1220":"P Q R S T U V W"},C:{"1":"kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","16":"5B oB 6B 7B","548":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB"},D:{"1":"X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L","164":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c","196":"XB YB ZB","1220":"aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W"},E:{"1":"L G EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","16":"p","164":"J D E AC BC CC","260":"F A B C K DC vB lB mB wB"},F:{"1":"hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","164":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","196":"NB OB PB","1220":"QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB"},G:{"1":"dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B NC OC","164":"E PC QC","260":"RC SC TC UC VC WC XC YC ZC aC bC cC"},H:{"2":"gC"},I:{"1":"H","16":"oB hC iC jC","164":"I kC 3B lC mC"},J:{"16":"D","164":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"164":"nC"},P:{"1":"xC nB yC zC","164":"I oC pC qC rC sC vB tC uC vC wC"},Q:{"1220":"wB"},R:{"1":"0C"},S:{"548":"1C"}},B:5,C:":is() CSS pseudo-class"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-math-functions.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-math-functions.js index 71f5bcae70c..41e56397b31 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-math-functions.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-math-functions.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB tB uB"},D:{"1":"P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB"},E:{"1":"L G 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB","132":"C K fB gB"},F:{"1":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB 7B 8B 9B AC fB pB BC gB"},G:{"1":"SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC","132":"MC NC OC PC QC RC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"kC lC mC nC oC","2":"I eC fC gC hC iC mB jC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS math functions min(), max() and clamp()"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB 6B 7B"},D:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB"},E:{"1":"L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB","132":"C K lB mB"},F:{"1":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB HC IC JC KC lB 2B LC mB"},G:{"1":"cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC","132":"WC XC YC ZC aC bC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"uC vC wC xC nB yC zC","2":"I oC pC qC rC sC vB tC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"CSS math functions min(), max() and clamp()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-interaction.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-interaction.js index 83db35d138c..38c7bae53ea 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-interaction.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-interaction.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB tB uB"},D:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"Media Queries: interaction media features"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB 6B 7B"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x y HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"Media Queries: interaction media features"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-range-syntax.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-range-syntax.js new file mode 100644 index 00000000000..177d355ffc4 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-range-syntax.js @@ -0,0 +1 @@ +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"b H","2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o"},C:{"1":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB 6B 7B"},D:{"1":"b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"Media Queries: Range Syntax"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-resolution.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-resolution.js index c5a1d9021da..0051acef861 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-resolution.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-resolution.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","132":"F A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","260":"I j J D E F A B C K L G tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","548":"I j J D E F A B C K L G M N O k l m n o p q r s t"},E:{"1":"6B","2":"yB lB","548":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F","548":"B C 7B 8B 9B AC fB pB BC"},G:{"16":"lB","548":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"132":"WC"},I:{"1":"H bC cC","16":"XC YC","548":"hB I ZC aC qB"},J:{"548":"D A"},K:{"1":"U gB","548":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"Media Queries: resolution feature"}; +module.exports={A:{A:{"2":"J D E 4B","132":"F A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","1028":"C K L G M N O"},C:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","260":"I p J D E F A B C K L G 6B 7B","1028":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB"},D:{"1":"aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","548":"I p J D E F A B C K L G M N O q r s t u v w x y z","1028":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB"},E:{"1":"nB 1B GC","2":"9B uB","548":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"1":"QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F","548":"B C HC IC JC KC lB 2B LC","1028":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB"},G:{"1":"nB 1B","16":"uB","548":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"132":"gC"},I:{"1":"H","16":"hC iC","548":"oB I jC kC 3B","1028":"lC mC"},J:{"548":"D A"},K:{"1":"c mB","548":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"vB tC uC vC wC xC nB yC zC","1028":"I oC pC qC rC sC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Media Queries: resolution feature"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-scripting.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-scripting.js index 330ec0198d1..1d5b6cd1ef8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-scripting.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-media-scripting.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"16":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB tB uB","16":"HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i","16":"vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"Media Queries: scripting media feature"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"Media Queries: scripting media feature"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-mediaqueries.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-mediaqueries.js index c7cef1e591b..1bec619e558 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-mediaqueries.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-mediaqueries.js @@ -1 +1 @@ -module.exports={A:{A:{"8":"J D E rB","129":"F A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","129":"I j J D E F A B C K L G M N O k l m n o p q"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","129":"I j J zB","388":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","129":"lB CC qB DC EC"},H:{"1":"WC"},I:{"1":"H bC cC","129":"hB I XC YC ZC aC qB"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"129":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS3 Media Queries"}; +module.exports={A:{A:{"8":"J D E 4B","129":"F A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","129":"I p J D E F A B C K L G M N O q r s t u v w"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","129":"I p J AC","388":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","129":"uB MC 3B NC OC"},H:{"1":"gC"},I:{"1":"H lC mC","129":"oB I hC iC jC kC 3B"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"129":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS3 Media Queries"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-mixblendmode.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-mixblendmode.js index 2cc243149f4..8b191ba2c07 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-mixblendmode.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-mixblendmode.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w tB uB"},D:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t","194":"0 1 2 3 4 5 u v w x y z"},E:{"2":"I j J D yB lB zB 0B","260":"E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t 7B 8B 9B AC fB pB BC gB"},G:{"2":"lB CC qB DC EC FC","260":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"Blending of HTML/SVG elements"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v w x y z","194":"0 1 2 3 4 5 6 7 8 9 AB BB"},E:{"2":"I p J D 9B uB AC BC","260":"E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"2":"uB MC 3B NC OC PC","260":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Blending of HTML/SVG elements"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-motion-paths.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-motion-paths.js index 5a90398e97f..07187e2410c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-motion-paths.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-motion-paths.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB tB uB"},D:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","194":"8 9 AB"},E:{"1":"6B","2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u 7B 8B 9B AC fB pB BC gB","194":"v w x"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"CSS Motion Path"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB 6B 7B"},D:{"1":"HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB","194":"EB FB GB"},E:{"1":"nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","194":"1 2 3"},G:{"1":"nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"CSS Motion Path"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-namespaces.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-namespaces.js index 90d0304e799..54614637768 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-namespaces.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-namespaces.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS namespaces"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS namespaces"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-nesting.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-nesting.js index a987bd01649..bacfb298470 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-nesting.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-nesting.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Nesting"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS Nesting"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-not-sel-list.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-not-sel-list.js index 86dfbe65388..ea7c6c014a7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-not-sel-list.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-not-sel-list.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"Z a b c d e f g T h H i","2":"C K L G M N O Q R S V W X Y","16":"P"},C:{"1":"V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S tB uB"},D:{"1":"Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"nC oC","2":"I eC fC gC hC iC mB jC kC lC mC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"selector list argument of :not()"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O Q R S T U V W","16":"P"},C:{"1":"T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S 6B 7B"},D:{"1":"X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC wC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"selector list argument of :not()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-nth-child-of.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-nth-child-of.js index 81e643d19e6..19dd81e2287 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-nth-child-of.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-nth-child-of.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"selector list argument of :nth-child and :nth-last-child CSS pseudo-classes"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"selector list argument of :nth-child and :nth-last-child CSS pseudo-classes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-opacity.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-opacity.js index 5b8b5480920..bd109de4934 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-opacity.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-opacity.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","4":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS3 Opacity"}; +module.exports={A:{A:{"1":"F A B","4":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS3 Opacity"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-optional-pseudo.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-optional-pseudo.js index 16054dfeeb4..aa6c7c04666 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-optional-pseudo.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-optional-pseudo.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F 7B","132":"B C 8B 9B AC fB pB BC gB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"132":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"U","132":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:7,C:":optional CSS pseudo-class"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F HC","132":"B C IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"132":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"c","132":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:":optional CSS pseudo-class"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow-anchor.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow-anchor.js index 1ca20527d63..244dd5bfbc2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow-anchor.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow-anchor.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB tB uB"},D:{"1":"LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"2":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"CSS overflow-anchor (Scroll Anchoring)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB 6B 7B"},D:{"1":"RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"CSS overflow-anchor (Scroll Anchoring)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow-overlay.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow-overlay.js index adc1bbe2c34..86a86a50ee0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow-overlay.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow-overlay.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"I j J D E F A B zB 0B 1B 2B mB fB","16":"yB lB","130":"C K L G gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC","16":"lB","130":"NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:7,C:"CSS overflow: overlay"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"I p J D E F A B AC BC CC DC vB lB","16":"9B uB","130":"C K L G mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC","16":"uB","130":"XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"16":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"CSS overflow: overlay"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow.js index da17e27ea14..04b1b955a53 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overflow.js @@ -1 +1 @@ -module.exports={A:{A:{"388":"J D E F A B rB"},B:{"1":"b c d e f g T h H i","260":"P Q R S V W X Y Z a","388":"C K L G M N O"},C:{"1":"R kB S V W X Y Z a b c d e f g T h H i","260":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q","388":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB tB uB"},D:{"1":"b c d e f g T h H i vB wB xB","260":"UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a","388":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB"},E:{"1":"6B","260":"L G 3B 4B 5B nB oB","388":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB"},F:{"260":"KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","388":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB 7B 8B 9B AC fB pB BC gB"},G:{"260":"SC TC UC VC nB oB","388":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC"},H:{"388":"WC"},I:{"1":"H","388":"hB I XC YC ZC aC qB bC cC"},J:{"388":"D A"},K:{"1":"U","388":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"388":"A B"},O:{"388":"dC"},P:{"1":"nC oC","388":"I eC fC gC hC iC mB jC kC lC mC"},Q:{"388":"pC"},R:{"388":"qC"},S:{"388":"rC"}},B:5,C:"CSS overflow property"}; +module.exports={A:{A:{"388":"J D E F A B 4B"},B:{"1":"Z a d e f g h i j k l m n o b H","260":"P Q R S T U V W X Y","388":"C K L G M N O"},C:{"1":"R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","260":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q","388":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB 6B 7B"},D:{"1":"Z a d e f g h i j k l m n o b H sB tB 8B","260":"aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y","388":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB"},E:{"1":"nB 1B GC","260":"L G wB EC FC xB yB zB 0B","388":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB"},F:{"1":"iB jB kB P Q R rB S T U V W X Y Z a","260":"QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB","388":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB HC IC JC KC lB 2B LC mB"},G:{"1":"nB 1B","260":"cC dC eC fC xB yB zB 0B","388":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC"},H:{"388":"gC"},I:{"1":"H","388":"oB I hC iC jC kC 3B lC mC"},J:{"388":"D A"},K:{"1":"c","388":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"388":"A B"},O:{"388":"nC"},P:{"1":"xC nB yC zC","388":"I oC pC qC rC sC vB tC uC vC wC"},Q:{"388":"wB"},R:{"1":"0C"},S:{"388":"1C"}},B:5,C:"CSS overflow property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overscroll-behavior.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overscroll-behavior.js index 60c603bbfcb..c95710b2dd2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overscroll-behavior.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-overscroll-behavior.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","132":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","132":"C K L G M N","516":"O"},C:{"1":"iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB tB uB"},D:{"1":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB","260":"QB U"},E:{"2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B","1090":"G 4B 5B nB oB 6B"},F:{"1":"HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB 7B 8B 9B AC fB pB BC gB","260":"FB GB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC","1090":"UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"2":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC gC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"CSS overscroll-behavior"}; +module.exports={A:{A:{"2":"J D E F 4B","132":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","132":"C K L G M N","516":"O"},C:{"1":"pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB 6B 7B"},D:{"1":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB","260":"WB c"},E:{"1":"nB 1B GC","2":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB","1090":"G EC FC xB yB zB 0B"},F:{"1":"NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB HC IC JC KC lB 2B LC mB","260":"LB MB"},G:{"1":"nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC","1090":"eC fC xB yB zB 0B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"CSS overscroll-behavior"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-page-break.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-page-break.js index 40dfa771b05..547ab043f6d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-page-break.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-page-break.js @@ -1 +1 @@ -module.exports={A:{A:{"388":"A B","900":"J D E F rB"},B:{"388":"C K L G M N O","900":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"772":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","900":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U tB uB"},D:{"900":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"772":"A","900":"I j J D E F B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"16":"F 7B","129":"B C 8B 9B AC fB pB BC gB","900":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"900":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"129":"WC"},I:{"900":"hB I H XC YC ZC aC qB bC cC"},J:{"900":"D A"},K:{"129":"A B C fB pB gB","900":"U"},L:{"900":"H"},M:{"900":"T"},N:{"388":"A B"},O:{"900":"dC"},P:{"900":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"900":"pC"},R:{"900":"qC"},S:{"900":"rC"}},B:2,C:"CSS page-break properties"}; +module.exports={A:{A:{"388":"A B","900":"J D E F 4B"},B:{"388":"C K L G M N O","900":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"772":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","900":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c 6B 7B"},D:{"900":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"772":"A","900":"I p J D E F B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"16":"F HC","129":"B C IC JC KC lB 2B LC mB","900":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"900":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"129":"gC"},I:{"900":"oB I H hC iC jC kC 3B lC mC"},J:{"900":"D A"},K:{"129":"A B C lB 2B mB","900":"c"},L:{"900":"H"},M:{"772":"b"},N:{"388":"A B"},O:{"900":"nC"},P:{"900":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"900":"wB"},R:{"900":"0C"},S:{"900":"1C"}},B:2,C:"CSS page-break properties"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-paged-media.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-paged-media.js index 5463a035c87..d00f170d3b0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-paged-media.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-paged-media.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D rB","132":"E F A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","132":"C K L G M N O"},C:{"2":"sB hB I j J D E F A B C K L G M N O tB uB","132":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","132":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"16":"WC"},I:{"16":"hB I H XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"16":"A B C U fB pB gB"},L:{"1":"H"},M:{"132":"T"},N:{"258":"A B"},O:{"258":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"132":"rC"}},B:5,C:"CSS Paged Media (@page)"}; +module.exports={A:{A:{"2":"J D 4B","132":"E F A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","132":"C K L G M N O"},C:{"2":"5B oB I p J D E F A B C K L G M N O 6B 7B","132":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","132":"F B C HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"16":"gC"},I:{"16":"oB I H hC iC jC kC 3B lC mC"},J:{"16":"D A"},K:{"16":"A B C c lB 2B mB"},L:{"1":"H"},M:{"132":"b"},N:{"258":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"132":"1C"}},B:5,C:"CSS Paged Media (@page)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-paint-api.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-paint-api.js index 34a7d27a1c3..23565415d80 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-paint-api.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-paint-api.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U"},E:{"2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB","194":"K L G gB 3B 4B 5B nB oB 6B"},F:{"1":"HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Paint API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c"},E:{"2":"I p J D E F A B C 9B uB AC BC CC DC vB lB","194":"K L G mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"CSS Paint API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-placeholder-shown.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-placeholder-shown.js index 24cfae973b1..9b6c4489b54 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-placeholder-shown.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-placeholder-shown.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","292":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","164":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x y 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"164":"rC"}},B:5,C:":placeholder-shown CSS pseudo-class"}; +module.exports={A:{A:{"2":"J D E F 4B","292":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","164":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB"},D:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"164":"1C"}},B:5,C:":placeholder-shown CSS pseudo-class"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-placeholder.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-placeholder.js index 9753fbe6b82..90d85692e12 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-placeholder.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-placeholder.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","36":"C K L G M N O"},C:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O tB uB","33":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB"},D:{"1":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","36":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","36":"j J D E F A zB 0B 1B 2B"},F:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","36":"0 1 2 3 4 5 6 7 8 G M N O k l m n o p q r s t u v w x y z"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC","36":"E qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","36":"hB I XC YC ZC aC qB bC cC"},J:{"36":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"36":"A B"},O:{"1":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","36":"I eC fC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"33":"rC"}},B:5,C:"::placeholder CSS pseudo-element"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","36":"C K L G M N O"},C:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O 6B 7B","33":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB"},D:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","36":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","36":"p J D E F A AC BC CC DC"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","36":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC","36":"E 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","36":"oB I hC iC jC kC 3B lC mC"},J:{"36":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"36":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","36":"I oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"33":"1C"}},B:5,C:"::placeholder CSS pseudo-element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-print-color-adjust.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-print-color-adjust.js new file mode 100644 index 00000000000..495fc51c4b0 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-print-color-adjust.js @@ -0,0 +1 @@ +module.exports={A:{D:{"2":"I p J D E F A B C K L G M","33":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},L:{"33":"H"},B:{"2":"C K L G M N O","33":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB 6B 7B","33":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h"},M:{"1":"b"},A:{"2":"J D E F A B 4B"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},K:{"2":"A B C lB 2B mB","33":"c"},E:{"1":"yB zB 0B nB 1B","2":"I p 9B uB AC GC","33":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB"},G:{"1":"yB zB 0B nB 1B","2":"uB MC 3B NC","33":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},P:{"33":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},I:{"2":"oB I hC iC jC kC 3B","33":"H lC mC"}},B:6,C:"print-color-adjust property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-read-only-write.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-read-only-write.js index 049c0f9357f..03eb7aaffae 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-read-only-write.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-read-only-write.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C"},C:{"1":"eB P Q R kB S V W X Y Z a b c d e f g T h H i","16":"sB","33":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB tB uB"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L","132":"0 G M N O k l m n o p q r s t u v w x y z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB lB","132":"I j J D E zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F B 7B 8B 9B AC fB","132":"C G M N O k l m n pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC","132":"E qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","16":"XC YC","132":"hB I ZC aC qB bC cC"},J:{"1":"A","132":"D"},K:{"1":"U","2":"A B fB","132":"C pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"33":"rC"}},B:1,C:"CSS :read-only and :read-write selectors"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C"},C:{"1":"kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","16":"5B","33":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB 6B 7B"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L","132":"0 1 2 3 4 5 6 G M N O q r s t u v w x y z"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B uB","132":"I p J D E AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F B HC IC JC KC lB","132":"C G M N O q r s t 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC","132":"E 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","16":"hC iC","132":"oB I jC kC 3B lC mC"},J:{"1":"A","132":"D"},K:{"1":"c","2":"A B lB","132":"C 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"33":"1C"}},B:1,C:"CSS :read-only and :read-write selectors"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-rebeccapurple.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-rebeccapurple.js index 60b62f12771..8621547c9b0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-rebeccapurple.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-rebeccapurple.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","132":"B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x tB uB"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB","16":"0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p 7B 8B 9B AC fB pB BC gB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"Rebeccapurple color"}; +module.exports={A:{A:{"2":"J D E F A 4B","132":"B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC","16":"BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v HC IC JC KC lB 2B LC mB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Rebeccapurple color"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-reflections.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-reflections.js index 5930e010206..5ecc4a91727 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-reflections.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-reflections.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","33":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"33":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"yB lB","33":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"33":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"33":"hB I H XC YC ZC aC qB bC cC"},J:{"33":"D A"},K:{"2":"A B C fB pB gB","33":"U"},L:{"33":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"33":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"33":"pC"},R:{"33":"qC"},S:{"2":"rC"}},B:7,C:"CSS Reflections"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","33":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"33":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"9B uB","33":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"33":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"33":"oB I H hC iC jC kC 3B lC mC"},J:{"33":"D A"},K:{"2":"A B C lB 2B mB","33":"c"},L:{"33":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"33":"nC"},P:{"33":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"33":"wB"},R:{"33":"0C"},S:{"2":"1C"}},B:7,C:"CSS Reflections"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-regions.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-regions.js index 99f06a3e7df..65157c6c38d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-regions.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-regions.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","420":"A B"},B:{"2":"P Q R S V W X Y Z a b c d e f g T h H i","420":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","36":"G M N O","66":"k l m n o p q r s t u v w x y z"},E:{"2":"I j J C K L G yB lB zB fB gB 3B 4B 5B nB oB 6B","33":"D E F A B 0B 1B 2B mB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"lB CC qB DC EC MC NC OC PC QC RC SC TC UC VC nB oB","33":"E FC GC HC IC JC KC LC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"420":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Regions"}; +module.exports={A:{A:{"2":"J D E F 4B","420":"A B"},B:{"2":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","420":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"6 7 8 9 I p J D E F A B C K L AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","36":"G M N O","66":"0 1 2 3 4 5 q r s t u v w x y z"},E:{"2":"I p J C K L G 9B uB AC lB mB wB EC FC xB yB zB 0B nB 1B GC","33":"D E F A B BC CC DC vB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"uB MC 3B NC OC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","33":"E PC QC RC SC TC UC VC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"420":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS Regions"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-repeating-gradients.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-repeating-gradients.js index 7c90ebec39a..a1ed4e7e1fe 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-repeating-gradients.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-repeating-gradients.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB","33":"I j J D E F A B C K L G uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F","33":"A B C K L G M N O k l m n o p q"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB","33":"J zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC","33":"C BC","36":"fB pB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB","33":"DC EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB XC YC ZC","33":"I aC qB"},J:{"1":"A","2":"D"},K:{"1":"U gB","2":"A B","33":"C","36":"fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS Repeating Gradients"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B","33":"I p J D E F A B C K L G 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F","33":"A B C K L G M N O q r s t u v w"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB","33":"J AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC","33":"C LC","36":"lB 2B"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B","33":"NC OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB hC iC jC","33":"I kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c mB","2":"A B","33":"C","36":"lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS Repeating Gradients"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-resize.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-resize.js index 1e0ae638a02..4c521b78016 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-resize.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-resize.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","33":"I"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC","132":"gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:4,C:"CSS resize property"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","33":"I"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC","132":"mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:2,C:"CSS resize property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-revert-value.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-revert-value.js index 25a8133cf5d..4c0356391a7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-revert-value.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-revert-value.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"V W X Y Z a b c d e f g T h H i","2":"C K L G M N O P Q R S"},C:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB tB uB"},D:{"1":"V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B"},F:{"1":"ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB 7B 8B 9B AC fB pB BC gB"},G:{"1":"IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mC nC oC","2":"I eC fC gC hC iC mB jC kC lC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS revert value"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O P Q R S"},C:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB 6B 7B"},D:{"1":"T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC"},F:{"1":"fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB HC IC JC KC lB 2B LC mB"},G:{"1":"SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"CSS revert value"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-rrggbbaa.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-rrggbbaa.js index 9c7515fa07e..ba5bac5b3db 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-rrggbbaa.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-rrggbbaa.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB tB uB"},D:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB","194":"HB IB JB KB LB MB NB iB OB jB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","194":"4 5 6 7 8 9 AB BB CB DB EB FB GB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I","194":"eC fC gC"},Q:{"2":"pC"},R:{"194":"qC"},S:{"2":"rC"}},B:7,C:"#rrggbbaa hex color notation"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB 6B 7B"},D:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","194":"NB OB PB QB RB SB TB pB UB qB"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","194":"AB BB CB DB EB FB GB HB IB JB KB LB MB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I","194":"oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"#rrggbbaa hex color notation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scroll-behavior.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scroll-behavior.js index 81dedf90bfd..1bc249788ef 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scroll-behavior.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scroll-behavior.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","129":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"2":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","129":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","450":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB"},E:{"1":"oB 6B","2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB 3B","578":"L G 4B 5B nB"},F:{"2":"F B C G M N O k l m n o p q r s 7B 8B 9B AC fB pB BC gB","129":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","450":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB"},G:{"1":"oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC","578":"UC VC nB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"129":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC gC"},Q:{"129":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSSOM Scroll-behavior"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","129":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB","129":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","450":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB"},E:{"1":"yB zB 0B nB 1B GC","2":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB wB","578":"L G EC FC xB"},F:{"2":"F B C G M N O q r s t u v w x y HC IC JC KC lB 2B LC mB","129":"JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","450":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB"},G:{"1":"yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC","578":"eC fC xB"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"129":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC"},Q:{"129":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"CSS Scroll-behavior"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scroll-timeline.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scroll-timeline.js index ee785f62fd0..0e38dfac1e6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scroll-timeline.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scroll-timeline.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a","194":"b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V","194":"Z a b c d e f g T h H i vB wB xB","322":"W X Y"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB 7B 8B 9B AC fB pB BC gB","194":"bB cB dB eB P Q R kB S","322":"ZB aB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"CSS @scroll-timeline"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y","194":"Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T","194":"X Y Z a d e f g h i j k l m n o b H sB tB 8B","322":"U V W"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB HC IC JC KC lB 2B LC mB","194":"hB iB jB kB P Q R rB S T U V W X Y Z a","322":"fB gB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"CSS @scroll-timeline"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scrollbar.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scrollbar.js index 46254f0c5b3..930da53e96c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scrollbar.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-scrollbar.js @@ -1 +1 @@ -module.exports={A:{A:{"132":"J D E F A B rB"},B:{"2":"C K L G M N O","292":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB tB uB","3074":"QB","4100":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"292":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"16":"I j yB lB","292":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","292":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"TC UC VC nB oB","16":"lB CC qB DC EC","292":"FC","804":"E GC HC IC JC KC LC MC NC OC PC QC RC SC"},H:{"2":"WC"},I:{"16":"XC YC","292":"hB I H ZC aC qB bC cC"},J:{"292":"D A"},K:{"2":"A B C fB pB gB","292":"U"},L:{"292":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"292":"dC"},P:{"292":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"292":"pC"},R:{"292":"qC"},S:{"2":"rC"}},B:7,C:"CSS scrollbar styling"}; +module.exports={A:{A:{"132":"J D E F A B 4B"},B:{"2":"C K L G M N O","292":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB 6B 7B","3074":"WB","4100":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"292":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"16":"I p 9B uB","292":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","292":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B NC OC","292":"PC","804":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC"},H:{"2":"gC"},I:{"16":"hC iC","292":"oB I H jC kC 3B lC mC"},J:{"292":"D A"},K:{"2":"A B C lB 2B mB","292":"c"},L:{"292":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"292":"nC"},P:{"292":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"292":"wB"},R:{"292":"0C"},S:{"2":"1C"}},B:7,C:"CSS scrollbar styling"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sel2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sel2.js index 232b720bdf8..f202d3e6892 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sel2.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sel2.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"D E F A B","2":"rB","8":"J"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS 2.1 selectors"}; +module.exports={A:{A:{"1":"D E F A B","2":"4B","8":"J"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS 2.1 selectors"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sel3.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sel3.js index 9358544f9a3..29e12a4604b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sel3.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sel3.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"rB","8":"J","132":"D E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS3 selectors"}; +module.exports={A:{A:{"1":"F A B","2":"4B","8":"J","132":"D E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS3 selectors"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-selection.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-selection.js index e9658d713fc..4d27682ebf3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-selection.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-selection.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","33":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"C U pB gB","16":"A B fB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"33":"rC"}},B:5,C:"::selection CSS pseudo-element"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","33":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"C c 2B mB","16":"A B lB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"33":"1C"}},B:5,C:"::selection CSS pseudo-element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-shapes.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-shapes.js index 5765a352475..7c16aab416b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-shapes.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-shapes.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB tB uB","322":"GB HB IB JB KB LB MB NB iB OB jB"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y","194":"0 1 z"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B","33":"E F A 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC","33":"E GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:4,C:"CSS Shapes Level 1"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB 6B 7B","322":"MB NB OB PB QB RB SB TB pB UB qB"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 I p J D E F A B C K L G M N O q r s t u v w x y z","194":"5 6 7"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC","33":"E F A CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC","33":"E QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"CSS Shapes Level 1"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-snappoints.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-snappoints.js index 1f761170a85..0999c7a48d2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-snappoints.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-snappoints.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","6308":"A","6436":"B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","6436":"C K L G M N O"},C:{"1":"UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","2052":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB"},D:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB","8258":"SB TB UB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B","3108":"F A 2B mB"},F:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB 7B 8B 9B AC fB pB BC gB","8258":"JB KB LB MB NB OB PB QB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC","3108":"HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mB jC kC lC mC nC oC","2":"I eC fC gC hC iC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2052":"rC"}},B:4,C:"CSS Scroll Snap"}; +module.exports={A:{A:{"2":"J D E F 4B","6308":"A","6436":"B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","6436":"C K L G M N O"},C:{"1":"aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","2052":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB"},D:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB","8258":"YB ZB aB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC","3108":"F A DC vB"},F:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB HC IC JC KC lB 2B LC mB","8258":"PB QB RB SB TB UB VB WB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC","3108":"RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC sC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2052":"1C"}},B:4,C:"CSS Scroll Snap"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sticky.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sticky.js index 2fca4ae5959..78c9a30ce04 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sticky.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-sticky.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"c d e f g T h H i","2":"C K L G","1028":"P Q R S V W X Y Z a b","4100":"M N O"},C:{"1":"iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q tB uB","194":"r s t u v w","516":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB"},D:{"1":"c d e f g T h H i vB wB xB","2":"2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n AB BB CB DB EB FB GB","322":"0 1 o p q r s t u v w x y z HB IB JB KB","1028":"LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b"},E:{"1":"K L G 3B 4B 5B nB oB 6B","2":"I j J yB lB zB","33":"E F A B C 1B 2B mB fB gB","2084":"D 0B"},F:{"1":"eB P Q R kB S","2":"0 1 2 3 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","322":"4 5 6","1028":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB"},G:{"1":"PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC","33":"E GC HC IC JC KC LC MC NC OC","2084":"EC FC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1028":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I eC"},Q:{"1028":"pC"},R:{"2":"qC"},S:{"516":"rC"}},B:5,C:"CSS position:sticky"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"a d e f g h i j k l m n o b H","2":"C K L G","1028":"P Q R S T U V W X Y Z","4100":"M N O"},C:{"1":"pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w 6B 7B","194":"0 1 2 x y z","516":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB"},D:{"1":"a d e f g h i j k l m n o b H sB tB 8B","2":"8 9 I p J D E F A B C K L G M N O q r s t AB BB CB DB EB FB GB HB IB JB KB LB MB","322":"0 1 2 3 4 5 6 7 u v w x y z NB OB PB QB","1028":"RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z"},E:{"1":"K L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC","33":"E F A B C CC DC vB lB mB","2084":"D BC"},F:{"1":"kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","322":"AB BB CB","1028":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB"},G:{"1":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","33":"E QC RC SC TC UC VC WC XC YC","2084":"OC PC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1028":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC"},Q:{"1028":"wB"},R:{"1":"0C"},S:{"516":"1C"}},B:5,C:"CSS position:sticky"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-subgrid.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-subgrid.js index 1c42c9358dc..4f9d9586359 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-subgrid.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-subgrid.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Subgrid"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"CSS Subgrid"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-supports-api.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-supports-api.js index 0b1d44de53a..6b2f9a34cf4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-supports-api.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-supports-api.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","260":"C K L G M N O"},C:{"1":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k tB uB","66":"l m","260":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},D:{"1":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s","260":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC","132":"gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"132":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB","132":"gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS.supports() API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K L G M N O"},C:{"1":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q 6B 7B","66":"r s","260":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB"},D:{"1":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v w x y","260":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC","132":"mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"132":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B","132":"mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS.supports() API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-table.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-table.js index 2298cda3553..446786eb866 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-table.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-table.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"E F A B","2":"J D rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","132":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS Table display"}; +module.exports={A:{A:{"1":"E F A B","2":"J D 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","132":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS Table display"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-align-last.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-align-last.js index 1f62af008ca..200b4e3b2a8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-align-last.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-align-last.js @@ -1 +1 @@ -module.exports={A:{A:{"132":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","4":"C K L G M N O"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B tB uB","33":"0 1 2 3 4 5 6 7 8 9 C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","322":"0 1 2 3 4 5 6 7 8 9 AB BB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m 7B 8B 9B AC fB pB BC gB","578":"n o p q r s t u v w x y"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"2":"pC"},R:{"1":"qC"},S:{"33":"rC"}},B:5,C:"CSS3 text-align-last"}; +module.exports={A:{A:{"132":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","4":"C K L G M N O"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B 6B 7B","33":"0 1 2 3 4 5 6 7 8 9 C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},D:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 I p J D E F A B C K L G M N O q r s t u v w x y z","322":"6 7 8 9 AB BB CB DB EB FB GB HB"},E:{"1":"nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s HC IC JC KC lB 2B LC mB","578":"0 1 2 3 4 t u v w x y z"},G:{"1":"nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"33":"1C"}},B:4,C:"CSS3 text-align-last"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-indent.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-indent.js index e709db7d860..6c0bf14ae8d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-indent.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-indent.js @@ -1 +1 @@ -module.exports={A:{A:{"132":"J D E F A B rB"},B:{"132":"C K L G M N O","388":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"132":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"132":"0 1 2 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","388":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"132":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"132":"F B C G M N O k l m n o p 7B 8B 9B AC fB pB BC gB","388":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"132":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"132":"WC"},I:{"132":"hB I XC YC ZC aC qB bC cC","388":"H"},J:{"132":"D A"},K:{"132":"A B C fB pB gB","388":"U"},L:{"388":"H"},M:{"132":"T"},N:{"132":"A B"},O:{"132":"dC"},P:{"132":"I","388":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"388":"pC"},R:{"388":"qC"},S:{"132":"rC"}},B:5,C:"CSS text-indent"}; +module.exports={A:{A:{"132":"J D E F A B 4B"},B:{"132":"C K L G M N O","388":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"132":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"132":"0 1 2 3 4 5 6 7 8 I p J D E F A B C K L G M N O q r s t u v w x y z","388":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"nB 1B GC","132":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"132":"F B C G M N O q r s t u v HC IC JC KC lB 2B LC mB","388":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"nB 1B","132":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"132":"gC"},I:{"132":"oB I hC iC jC kC 3B lC mC","388":"H"},J:{"132":"D A"},K:{"132":"A B C lB 2B mB","388":"c"},L:{"388":"H"},M:{"132":"b"},N:{"132":"A B"},O:{"388":"nC"},P:{"132":"I","388":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"388":"wB"},R:{"388":"0C"},S:{"132":"1C"}},B:4,C:"CSS text-indent"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-justify.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-justify.js index 611883bc3bb..7a3f8b07eba 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-justify.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-justify.js @@ -1 +1 @@ -module.exports={A:{A:{"16":"J D rB","132":"E F A B"},B:{"132":"C K L G M N O","322":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB tB uB","1025":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","1602":"JB"},D:{"2":"0 1 2 3 4 5 6 7 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","322":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C G M N O k l m n o p q r s t u 7B 8B 9B AC fB pB BC gB","322":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","322":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","322":"U"},L:{"322":"H"},M:{"1025":"T"},N:{"132":"A B"},O:{"2":"dC"},P:{"2":"I","322":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"322":"pC"},R:{"322":"qC"},S:{"2":"rC"}},B:5,C:"CSS text-justify"}; +module.exports={A:{A:{"16":"J D 4B","132":"E F A B"},B:{"132":"C K L G M N O","322":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB 6B 7B","1025":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","1602":"PB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB","322":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","322":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","322":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","322":"c"},L:{"322":"H"},M:{"1025":"b"},N:{"132":"A B"},O:{"322":"nC"},P:{"2":"I","322":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"322":"wB"},R:{"322":"0C"},S:{"2":"1C"}},B:4,C:"CSS text-justify"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-orientation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-orientation.js index 17111296bd1..451466b6fbe 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-orientation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-orientation.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","194":"3 4 5"},D:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB"},E:{"1":"L G 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B","16":"A","33":"B C K mB fB gB 3B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS text-orientation"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"9 AB BB"},D:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},E:{"1":"L G EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC","16":"A","33":"B C K vB lB mB wB"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS text-orientation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-spacing.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-spacing.js index abbd706c804..e3909d625a2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-spacing.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-text-spacing.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D rB","161":"E F A B"},B:{"2":"P Q R S V W X Y Z a b c d e f g T h H i","161":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"16":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS Text 4 text-spacing"}; +module.exports={A:{A:{"2":"J D 4B","161":"E F A B"},B:{"2":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","161":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"16":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS Text 4 text-spacing"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-textshadow.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-textshadow.js index 2732fee9569..60e42de5795 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-textshadow.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-textshadow.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","129":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","129":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","260":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"4":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"A","4":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"129":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS3 Text-shadow"}; +module.exports={A:{A:{"2":"J D E F 4B","129":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","129":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","260":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"4":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"A","4":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"129":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS3 Text-shadow"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-touch-action-2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-touch-action-2.js deleted file mode 100644 index 04411d32d7e..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-touch-action-2.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F rB","132":"B","164":"A"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","132":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB","260":"KB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","260":"7"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"132":"B","164":"A"},O:{"2":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","16":"I"},Q:{"2":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"CSS touch-action level 2 values"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-touch-action.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-touch-action.js index 2537375505d..57e0269df5e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-touch-action.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-touch-action.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F rB","289":"A"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB","194":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB","1025":"HB IB JB KB LB"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n 7B 8B 9B AC fB pB BC gB"},G:{"1":"PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC","516":"IC JC KC LC MC NC OC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","289":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"194":"rC"}},B:2,C:"CSS touch-action property"}; +module.exports={A:{A:{"1":"B","2":"J D E F 4B","289":"A"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB","1025":"NB OB PB QB RB"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t HC IC JC KC lB 2B LC mB"},G:{"1":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC","516":"SC TC UC VC WC XC YC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","289":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"194":"1C"}},B:2,C:"CSS touch-action property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-transitions.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-transitions.js index 7f6227380d0..4692fea0c7c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-transitions.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-transitions.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","33":"j J D E F A B C K L G","164":"I"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"I j J D E F A B C K L G M N O k l m n o p q"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","33":"J zB","164":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F 7B 8B","33":"C","164":"B 9B AC fB pB BC"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","33":"EC","164":"lB CC qB DC"},H:{"2":"WC"},I:{"1":"H bC cC","33":"hB I XC YC ZC aC qB"},J:{"1":"A","33":"D"},K:{"1":"U gB","33":"C","164":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"CSS3 Transitions"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","33":"p J D E F A B C K L G","164":"I"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"I p J D E F A B C K L G M N O q r s t u v w"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","33":"J AC","164":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F HC IC","33":"C","164":"B JC KC lB 2B LC"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","33":"OC","164":"uB MC 3B NC"},H:{"2":"gC"},I:{"1":"H lC mC","33":"oB I hC iC jC kC 3B"},J:{"1":"A","33":"D"},K:{"1":"c mB","33":"C","164":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"CSS3 Transitions"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-unicode-bidi.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-unicode-bidi.js index 71bbef18ef3..2985ab3d5af 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-unicode-bidi.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-unicode-bidi.js @@ -1 +1 @@ -module.exports={A:{A:{"132":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","132":"C K L G M N O"},C:{"1":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","33":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB DB EB","132":"sB hB I j J D E F tB uB","292":"A B C K L G M"},D:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"I j J D E F A B C K L G M","548":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB"},E:{"132":"I j J D E yB lB zB 0B 1B","548":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"132":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"132":"E lB CC qB DC EC FC GC","548":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"16":"WC"},I:{"1":"H","16":"hB I XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"1":"U","16":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"16":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","16":"I"},Q:{"16":"pC"},R:{"16":"qC"},S:{"33":"rC"}},B:4,C:"CSS unicode-bidi property"}; +module.exports={A:{A:{"132":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","132":"C K L G M N O"},C:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","33":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB","132":"5B oB I p J D E F 6B 7B","292":"A B C K L G M"},D:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"I p J D E F A B C K L G M","548":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},E:{"132":"I p J D E 9B uB AC BC CC","548":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"132":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"132":"E uB MC 3B NC OC PC QC","548":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"16":"gC"},I:{"1":"H","16":"oB I hC iC jC kC 3B lC mC"},J:{"16":"D A"},K:{"1":"c","16":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","16":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"33":"1C"}},B:4,C:"CSS unicode-bidi property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-unset-value.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-unset-value.js index eabbf48f8d7..3999edcd9ae 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-unset-value.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-unset-value.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r tB uB"},D:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s 7B 8B 9B AC fB pB BC gB"},G:{"1":"IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS unset value"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x 6B 7B"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x y HC IC JC KC lB 2B LC mB"},G:{"1":"SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS unset value"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-variables.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-variables.js index ac487151f3f..3dab8674e83 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-variables.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-variables.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L","260":"G"},C:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v tB uB"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB","194":"DB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B","260":"2B"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","194":"0"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC","260":"IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"2":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:4,C:"CSS Variables (Custom Properties)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L","260":"G"},C:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB","194":"JB"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC","260":"DC"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","194":"6"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC","260":"SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS Variables (Custom Properties)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-when-else.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-when-else.js index e7718ebf605..d87946dd487 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-when-else.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-when-else.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"CSS @when / @else conditional rules"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"CSS @when / @else conditional rules"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-widows-orphans.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-widows-orphans.js index 71a1d90c4f8..048b1c0ad80 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-widows-orphans.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-widows-orphans.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D rB","129":"E F"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","129":"F B 7B 8B 9B AC fB pB BC"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U gB","2":"A B C fB pB"},L:{"1":"H"},M:{"2":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:2,C:"CSS widows & orphans"}; +module.exports={A:{A:{"1":"A B","2":"J D 4B","129":"E F"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","129":"F B HC IC JC KC lB 2B LC"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c mB","2":"A B C lB 2B"},L:{"1":"H"},M:{"2":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:2,C:"CSS widows & orphans"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-width-stretch.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-width-stretch.js index 90c1358a46c..626b34914d1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-width-stretch.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-width-stretch.js @@ -1 +1 @@ -module.exports={A:{D:{"2":"I j J D E F A B C K L G M N O k l m","33":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},L:{"33":"H"},B:{"2":"C K L G M N O","33":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB","33":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},M:{"33":"T"},A:{"2":"J D E F A B rB"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},K:{"2":"A B C fB pB gB","33":"U"},E:{"2":"I j J yB lB zB 0B 6B","33":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB"},G:{"2":"lB CC qB DC EC","33":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},P:{"2":"I","33":"eC fC gC hC iC mB jC kC lC mC nC oC"},I:{"2":"hB I XC YC ZC aC qB","33":"H bC cC"}},B:6,C:"width: stretch property"}; +module.exports={A:{D:{"2":"I p J D E F A B C K L G M N O q r s","33":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},L:{"33":"H"},B:{"2":"C K L G M N O","33":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B","33":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},M:{"33":"b"},A:{"2":"J D E F A B 4B"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},K:{"2":"A B C lB 2B mB","33":"c"},E:{"2":"I p J 9B uB AC BC GC","33":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B"},G:{"2":"uB MC 3B NC OC","33":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},P:{"2":"I","33":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},I:{"2":"oB I hC iC jC kC 3B","33":"H lC mC"}},B:6,C:"width: stretch property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-writing-mode.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-writing-mode.js index 86e7d0db567..51b42ddee1a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-writing-mode.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-writing-mode.js @@ -1 +1 @@ -module.exports={A:{A:{"132":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","322":"1 2 3 4 5"},D:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J","16":"D","33":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","16":"j","33":"J D E F A zB 0B 1B 2B mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"G M N O k l m n o p q r s t u v w x y z"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB","33":"E DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","2":"XC YC ZC","33":"hB I aC qB bC cC"},J:{"33":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"36":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","33":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS writing-mode property"}; +module.exports={A:{A:{"132":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","322":"7 8 9 AB BB"},D:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J","16":"D","33":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","16":"p","33":"J D E F A AC BC CC DC vB"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 G M N O q r s t u v w x y z"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B","33":"E NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","2":"hC iC jC","33":"oB I kC 3B lC mC"},J:{"33":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"36":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","33":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS writing-mode property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-zoom.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-zoom.js index de19335ca72..224cb28f384 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-zoom.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css-zoom.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D rB","129":"E F A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB"},H:{"2":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"129":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:7,C:"CSS zoom"}; +module.exports={A:{A:{"1":"J D 4B","129":"E F A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB"},H:{"2":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"129":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"CSS zoom"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-attr.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-attr.js index 5883c2192c9..4ec6dddbfb6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-attr.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-attr.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"CSS3 attr() function for all properties"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"CSS3 attr() function for all properties"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-boxsizing.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-boxsizing.js index 4d6d65cb141..86867bccdab 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-boxsizing.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-boxsizing.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"E F A B","8":"J D rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","33":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"I j J D E F"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","33":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","33":"lB CC qB"},H:{"1":"WC"},I:{"1":"I H aC qB bC cC","33":"hB XC YC ZC"},J:{"1":"A","33":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"CSS3 Box-sizing"}; +module.exports={A:{A:{"1":"E F A B","8":"J D 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","33":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"I p J D E F"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","33":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","33":"uB MC 3B"},H:{"1":"gC"},I:{"1":"I H kC 3B lC mC","33":"oB hC iC jC"},J:{"1":"A","33":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"CSS3 Box-sizing"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-colors.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-colors.js index 603629f4a08..498f092134d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-colors.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-colors.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","4":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 8B 9B AC fB pB BC gB","2":"F","4":"7B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS3 Colors"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","4":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a IC JC KC lB 2B LC mB","2":"F","4":"HC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS3 Colors"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors-grab.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors-grab.js index 5cd2e8d7bad..de749bf2904 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors-grab.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors-grab.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","33":"sB hB I j J D E F A B C K L G M N O k l m n o p q r tB uB"},D:{"1":"UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","33":"I j J D E F A yB lB zB 0B 1B 2B mB"},F:{"1":"C KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F B 7B 8B 9B AC fB pB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"33":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"33":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:3,C:"CSS grab & grabbing cursors"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","33":"5B oB I p J D E F A B C K L G M N O q r s t u v w x 6B 7B"},D:{"1":"aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","33":"I p J D E F A 9B uB AC BC CC DC vB"},F:{"1":"C QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F B HC IC JC KC lB 2B","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"33":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:2,C:"CSS grab & grabbing cursors"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors-newer.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors-newer.js index 3324620da49..1c50ba7c300 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors-newer.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors-newer.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","33":"sB hB I j J D E F A B C K L G M N O k l m n o tB uB"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"0 1 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","33":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F B 7B 8B 9B AC fB pB","33":"G M N O k l m n o"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"33":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"CSS3 Cursors: zoom-in & zoom-out"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","33":"5B oB I p J D E F A B C K L G M N O q r s t u 6B 7B"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"0 1 2 3 4 5 6 7 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","33":"I p J D E 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F B HC IC JC KC lB 2B","33":"G M N O q r s t u"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"33":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:2,C:"CSS3 Cursors: zoom-in & zoom-out"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors.js index 74a1449949f..a68c5f16aca 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-cursors.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","132":"J D E rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","260":"C K"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","4":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","4":"I"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","4":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","260":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D","16":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"CSS3 Cursors (original values)"}; +module.exports={A:{A:{"1":"F A B","132":"J D E 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","4":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","4":"I"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","4":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","260":"F B C HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D","16":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:2,C:"CSS3 Cursors (original values)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-tabsize.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-tabsize.js index 8f088acaf9c..c63210c327d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-tabsize.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/css3-tabsize.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"c d e f g T h H i","2":"sB hB tB uB","33":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b","164":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l","132":"0 1 2 3 4 5 6 m n o p q r s t u v w x y z"},E:{"1":"L G 3B 4B 5B nB oB 6B","2":"I j J yB lB zB","132":"D E F A B C K 0B 1B 2B mB fB gB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F 7B 8B 9B","132":"G M N O k l m n o p q r s t","164":"B C AC fB pB BC gB"},G:{"1":"SC TC UC VC nB oB","2":"lB CC qB DC EC","132":"E FC GC HC IC JC KC LC MC NC OC PC QC RC"},H:{"164":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB","132":"bC cC"},J:{"132":"D A"},K:{"1":"U","2":"A","164":"B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"164":"rC"}},B:5,C:"CSS3 tab-size"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","33":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z","164":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB"},D:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r","132":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB"},E:{"1":"L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC","132":"D E F A B C K BC CC DC vB lB mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F HC IC JC","132":"G M N O q r s t u v w x y z","164":"B C KC lB 2B LC mB"},G:{"1":"cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC","132":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC"},H:{"164":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B","132":"lC mC"},J:{"132":"D A"},K:{"1":"c","2":"A","164":"B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"164":"1C"}},B:4,C:"CSS3 tab-size"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/currentcolor.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/currentcolor.js index 294f2586c4f..fd4d693fa3d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/currentcolor.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/currentcolor.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS currentColor value"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS currentColor value"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/custom-elements.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/custom-elements.js index 4c2db280654..096e255c929 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/custom-elements.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/custom-elements.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","8":"A B"},B:{"1":"P","2":"Q R S V W X Y Z a b c d e f g T h H i","8":"C K L G M N O"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","66":"o p q r s t u","72":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P","2":"I j J D E F A B C K L G M N O k l m n o p q r Q R S V W X Y Z a b c d e f g T h H i vB wB xB","66":"s t u v w x"},E:{"2":"I j yB lB zB","8":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB","2":"F B C TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","66":"G M N O k"},G:{"2":"lB CC qB DC EC","8":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"cC","2":"hB I H XC YC ZC aC qB bC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC","2":"lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"72":"rC"}},B:7,C:"Custom Elements (deprecated V0 spec)"}; +module.exports={A:{A:{"2":"J D E F 4B","8":"A B"},B:{"1":"P","2":"Q R S T U V W X Y Z a d e f g h i j k l m n o b H","8":"C K L G M N O"},C:{"2":"5B oB I p J D E F A B C K L G M N O q r s t pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","66":"0 u v w x y z","72":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P","2":"I p J D E F A B C K L G M N O q r s t u v w x Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","66":"0 1 2 3 y z"},E:{"2":"I p 9B uB AC","8":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB","2":"F B C ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","66":"G M N O q"},G:{"2":"uB MC 3B NC OC","8":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"mC","2":"oB I H hC iC jC kC 3B lC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC","2":"vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"2":"0C"},S:{"72":"1C"}},B:7,C:"Custom Elements (deprecated V0 spec)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/custom-elementsv1.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/custom-elementsv1.js index 6ab9de57994..f5e9d7f7874 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/custom-elementsv1.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/custom-elementsv1.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","8":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","8":"C K L G M N O"},C:{"1":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u tB uB","8":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB","456":"FB GB HB IB JB KB LB MB NB","712":"iB OB jB PB"},D:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB","8":"HB IB","132":"JB KB LB MB NB iB OB jB PB QB U RB SB"},E:{"2":"I j J D yB lB zB 0B 1B","8":"E F A 2B","132":"B C K L G mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","132":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC","132":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I","132":"eC"},Q:{"132":"pC"},R:{"132":"qC"},S:{"8":"rC"}},B:1,C:"Custom Elements (V1)"}; +module.exports={A:{A:{"2":"J D E F 4B","8":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","8":"C K L G M N O"},C:{"1":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","8":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB","456":"LB MB NB OB PB QB RB SB TB","712":"pB UB qB VB"},D:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","8":"NB OB","132":"PB QB RB SB TB pB UB qB VB WB c XB YB"},E:{"2":"I p J D 9B uB AC BC CC","8":"E F A DC","132":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB HC IC JC KC lB 2B LC mB","132":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC","132":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I","132":"oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"8":"1C"}},B:1,C:"Custom Elements (V1)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/customevent.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/customevent.js index 011fcf8ab19..24c1caeeabf 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/customevent.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/customevent.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","132":"F A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j tB uB","132":"J D E F A"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I","16":"j J D E K L","388":"F A B C"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","16":"j J","388":"zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F 7B 8B 9B AC","132":"B fB pB"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"CC","16":"lB qB","388":"DC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"XC YC ZC","388":"hB I aC qB"},J:{"1":"A","388":"D"},K:{"1":"C U gB","2":"A","132":"B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"CustomEvent"}; +module.exports={A:{A:{"2":"J D E 4B","132":"F A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B","132":"J D E F A"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I","16":"p J D E K L","388":"F A B C"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","16":"p J","388":"AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F HC IC JC KC","132":"B lB 2B"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"MC","16":"uB 3B","388":"NC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"hC iC jC","388":"oB I kC 3B"},J:{"1":"A","388":"D"},K:{"1":"C c mB","2":"A","132":"B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"CustomEvent"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/datalist.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/datalist.js index 27e89b310e0..846b16366b4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/datalist.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/datalist.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"rB","8":"J D E F","260":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","260":"C K L G","1284":"M N O"},C:{"8":"sB hB tB uB","4612":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","8":"I j J D E F A B C K L G M N O k","132":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB"},E:{"1":"K L G gB 3B 4B 5B nB oB 6B","8":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB"},F:{"1":"F B C U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","132":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB"},G:{"8":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC","2049":"OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H cC","8":"hB I XC YC ZC aC qB bC"},J:{"1":"A","8":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"516":"T"},N:{"8":"A B"},O:{"8":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"132":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:1,C:"Datalist element"}; +module.exports={A:{A:{"2":"4B","8":"J D E F","260":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K L G","1284":"M N O"},C:{"8":"5B oB 6B 7B","516":"n o b H sB tB","4612":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m"},D:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","8":"I p J D E F A B C K L G M N O q","132":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB"},E:{"1":"K L G mB wB EC FC xB yB zB 0B nB 1B GC","8":"I p J D E F A B C 9B uB AC BC CC DC vB lB"},F:{"1":"F B C c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","132":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB"},G:{"8":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC","2049":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H mC","8":"oB I hC iC jC kC 3B lC"},J:{"1":"A","8":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"516":"b"},N:{"8":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"Datalist element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dataset.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dataset.js index af111bab84b..8b37cdf520c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dataset.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dataset.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","4":"J D E F A rB"},B:{"1":"C K L G M","129":"N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB","4":"sB hB I j tB uB","129":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"AB BB CB DB EB FB GB HB IB JB","4":"I j J","129":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O k l m n o p q r s t u v w x y z KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"4":"I j yB lB","129":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 C x y z fB pB BC gB","4":"F B 7B 8B 9B AC","129":"7 8 9 G M N O k l m n o p q r s t u v w AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"4":"lB CC qB","129":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"4":"WC"},I:{"4":"XC YC ZC","129":"hB I H aC qB bC cC"},J:{"129":"D A"},K:{"1":"C fB pB gB","4":"A B","129":"U"},L:{"129":"H"},M:{"129":"T"},N:{"1":"B","4":"A"},O:{"129":"dC"},P:{"129":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"129":"qC"},S:{"1":"rC"}},B:1,C:"dataset & data-* attributes"}; +module.exports={A:{A:{"1":"B","4":"J D E F A 4B"},B:{"1":"C K L G M","129":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","4":"5B oB I p 6B 7B","129":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"GB HB IB JB KB LB MB NB OB PB","4":"I p J","129":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"4":"I p 9B uB","129":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"3 4 5 6 7 8 9 C AB BB CB lB 2B LC mB","4":"F B HC IC JC KC","129":"0 1 2 G M N O q r s t u v w x y z DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"4":"uB MC 3B","129":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"4":"gC"},I:{"4":"hC iC jC","129":"oB I H kC 3B lC mC"},J:{"129":"D A"},K:{"1":"C lB 2B mB","4":"A B","129":"c"},L:{"129":"H"},M:{"129":"b"},N:{"1":"B","4":"A"},O:{"129":"nC"},P:{"129":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"129":"wB"},R:{"129":"0C"},S:{"1":"1C"}},B:1,C:"dataset & data-* attributes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/datauri.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/datauri.js index 1bec5e55a7a..73ef74e838d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/datauri.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/datauri.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D rB","132":"E","260":"F A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","260":"C K G M N O","772":"L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"260":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Data URIs"}; +module.exports={A:{A:{"2":"J D 4B","132":"E","260":"F A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K G M N O","772":"L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"260":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Data URIs"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/date-tolocaledatestring.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/date-tolocaledatestring.js index c1e206b1523..0adb95e3748 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/date-tolocaledatestring.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/date-tolocaledatestring.js @@ -1 +1 @@ -module.exports={A:{A:{"16":"rB","132":"J D E F A B"},B:{"1":"O P Q R S V W X Y Z a b c d e f g T h H i","132":"C K L G M N"},C:{"1":"LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","132":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB","260":"HB IB JB KB","772":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB"},D:{"1":"WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"I j J D E F A B C K L G M N O k l m n o","260":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB","772":"0 1 2 p q r s t u v w x y z"},E:{"1":"C K L G gB 3B 4B 5B nB oB 6B","16":"I j yB lB","132":"J D E F A zB 0B 1B 2B","260":"B mB fB"},F:{"1":"MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F B C 7B 8B 9B AC fB pB BC","132":"gB","260":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","772":"G M N O k l m n o p"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB DC","132":"E EC FC GC HC IC JC"},H:{"132":"WC"},I:{"1":"H","16":"hB XC YC ZC","132":"I aC qB","772":"bC cC"},J:{"132":"D A"},K:{"1":"U","16":"A B C fB pB","132":"gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"260":"dC"},P:{"1":"iC mB jC kC lC mC nC oC","260":"I eC fC gC hC"},Q:{"260":"pC"},R:{"132":"qC"},S:{"132":"rC"}},B:6,C:"Date.prototype.toLocaleDateString"}; +module.exports={A:{A:{"16":"4B","132":"J D E F A B"},B:{"1":"O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","132":"C K L G M N"},C:{"1":"RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","132":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","260":"NB OB PB QB","772":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB"},D:{"1":"cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"I p J D E F A B C K L G M N O q r s t u","260":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB","772":"0 1 2 3 4 5 6 7 8 v w x y z"},E:{"1":"C K L G mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p 9B uB","132":"J D E F A AC BC CC DC","260":"B vB lB"},F:{"1":"SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F B C HC IC JC KC lB 2B LC","132":"mB","260":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB","772":"G M N O q r s t u v"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B NC","132":"E OC PC QC RC SC TC"},H:{"132":"gC"},I:{"1":"H","16":"oB hC iC jC","132":"I kC 3B","772":"lC mC"},J:{"132":"D A"},K:{"1":"c","16":"A B C lB 2B","132":"mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"sC vB tC uC vC wC xC nB yC zC","260":"I oC pC qC rC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"132":"1C"}},B:6,C:"Date.prototype.toLocaleDateString"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/declarative-shadow-dom.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/declarative-shadow-dom.js new file mode 100644 index 00000000000..c2df85c8b8b --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/declarative-shadow-dom.js @@ -0,0 +1 @@ +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"Z a d e f g h i j k l m n o b H","2":"C K L G M N O P Q R S T U V W X Y"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T","66":"U V W X Y"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B","16":"GC"},F:{"1":"jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC wC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"Declarative Shadow DOM"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/decorators.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/decorators.js index e6ae61a1aba..f2d854064f0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/decorators.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/decorators.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Decorators"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Decorators"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/details.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/details.js index 1dbdb84f9f2..fee4c1725ff 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/details.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/details.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"F A B rB","8":"J D E"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB","8":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB tB uB","194":"CB DB"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","8":"I j J D E F A B","257":"0 k l m n o p q r s t u v w x y z","769":"C K L G M N O"},E:{"1":"C K L G gB 3B 4B 5B nB oB 6B","8":"I j yB lB zB","257":"J D E F A 0B 1B 2B","1025":"B mB fB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"C fB pB BC gB","8":"F B 7B 8B 9B AC"},G:{"1":"E EC FC GC HC IC MC NC OC PC QC RC SC TC UC VC nB oB","8":"lB CC qB DC","1025":"JC KC LC"},H:{"8":"WC"},I:{"1":"I H aC qB bC cC","8":"hB XC YC ZC"},J:{"1":"A","8":"D"},K:{"1":"U","8":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"769":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Details & Summary elements"}; +module.exports={A:{A:{"2":"F A B 4B","8":"J D E"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B","8":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB 6B 7B","194":"IB JB"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","8":"I p J D E F A B","257":"0 1 2 3 4 5 6 q r s t u v w x y z","769":"C K L G M N O"},E:{"1":"C K L G mB wB EC FC xB yB zB 0B nB 1B GC","8":"I p 9B uB AC","257":"J D E F A BC CC DC","1025":"B vB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"C lB 2B LC mB","8":"F B HC IC JC KC"},G:{"1":"E OC PC QC RC SC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","8":"uB MC 3B NC","1025":"TC UC VC"},H:{"8":"gC"},I:{"1":"I H kC 3B lC mC","8":"oB hC iC jC"},J:{"1":"A","8":"D"},K:{"1":"c","8":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Details & Summary elements"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/deviceorientation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/deviceorientation.js index ef9c4cdf77f..8baf24910cf 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/deviceorientation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/deviceorientation.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","132":"B"},B:{"1":"C K L G M N O","4":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB tB","4":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","8":"I j uB"},D:{"2":"I j J","4":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","4":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"lB CC","4":"E qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"XC YC ZC","4":"hB I H aC qB bC cC"},J:{"2":"D","4":"A"},K:{"1":"C gB","2":"A B fB pB","4":"U"},L:{"4":"H"},M:{"4":"T"},N:{"1":"B","2":"A"},O:{"4":"dC"},P:{"4":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"4":"pC"},R:{"4":"qC"},S:{"4":"rC"}},B:4,C:"DeviceOrientation & DeviceMotion events"}; +module.exports={A:{A:{"2":"J D E F A 4B","132":"B"},B:{"1":"C K L G M N O","4":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB 6B","4":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","8":"I p 7B"},D:{"2":"I p J","4":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","4":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"uB MC","4":"E 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"hC iC jC","4":"oB I H kC 3B lC mC"},J:{"2":"D","4":"A"},K:{"1":"C mB","2":"A B lB 2B","4":"c"},L:{"4":"H"},M:{"4":"b"},N:{"1":"B","2":"A"},O:{"4":"nC"},P:{"4":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"4":"wB"},R:{"4":"0C"},S:{"4":"1C"}},B:4,C:"DeviceOrientation & DeviceMotion events"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/devicepixelratio.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/devicepixelratio.js index 226deb4a9f6..ef79c6b31b2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/devicepixelratio.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/devicepixelratio.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F B 7B 8B 9B AC fB pB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"C U gB","2":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"Window.devicePixelRatio"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F B HC IC JC KC lB 2B"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"C c mB","2":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Window.devicePixelRatio"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dialog.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dialog.js index d0d050584fe..80ff8fe950e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dialog.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dialog.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB tB uB","194":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P","1218":"Q R kB S V W X Y Z a b c d e f g T h"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w","322":"0 1 x y z"},E:{"1":"oB 6B","2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O 7B 8B 9B AC fB pB BC gB","578":"k l m n o"},G:{"1":"oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"194":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:1,C:"Dialog element"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB 6B 7B","194":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P","1218":"Q R rB S T U V W X Y Z a d e f g h i"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 I p J D E F A B C K L G M N O q r s t u v w x y z","322":"3 4 5 6 7"},E:{"1":"yB zB 0B nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O HC IC JC KC lB 2B LC mB","578":"q r s t u"},G:{"1":"yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"Dialog element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dispatchevent.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dispatchevent.js index 96173e3188a..a741ccbcf5e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dispatchevent.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dispatchevent.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","16":"rB","129":"F A","130":"J D E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","16":"F"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"1":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","129":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"EventTarget.dispatchEvent"}; +module.exports={A:{A:{"1":"B","16":"4B","129":"F A","130":"J D E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","16":"F"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"1":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","129":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"EventTarget.dispatchEvent"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dnssec.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dnssec.js index efb5dfe20df..dcd9863467a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dnssec.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dnssec.js @@ -1 +1 @@ -module.exports={A:{A:{"132":"J D E F A B rB"},B:{"132":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"132":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"132":"0 1 2 3 4 5 6 7 8 9 I j w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","388":"J D E F A B C K L G M N O k l m n o p q r s t u v"},E:{"132":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"132":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"132":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"132":"WC"},I:{"132":"hB I H XC YC ZC aC qB bC cC"},J:{"132":"D A"},K:{"132":"A B C U fB pB gB"},L:{"132":"H"},M:{"132":"T"},N:{"132":"A B"},O:{"132":"dC"},P:{"132":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"132":"pC"},R:{"132":"qC"},S:{"132":"rC"}},B:6,C:"DNSSEC and DANE"}; +module.exports={A:{A:{"132":"J D E F A B 4B"},B:{"132":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"132":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"132":"2 3 4 5 6 7 8 9 I p AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","388":"0 1 J D E F A B C K L G M N O q r s t u v w x y z"},E:{"132":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"132":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"132":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"132":"gC"},I:{"132":"oB I H hC iC jC kC 3B lC mC"},J:{"132":"D A"},K:{"132":"A B C c lB 2B mB"},L:{"132":"H"},M:{"132":"b"},N:{"132":"A B"},O:{"132":"nC"},P:{"132":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"132":"wB"},R:{"132":"0C"},S:{"132":"1C"}},B:6,C:"DNSSEC and DANE"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/do-not-track.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/do-not-track.js index 464cc3195c7..afcdfb4afee 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/do-not-track.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/do-not-track.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","164":"F A","260":"B"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","260":"C K L G M"},C:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E tB uB","516":"F A B C K L G M N O k l m n o p q r s t u v w"},D:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n"},E:{"1":"J A B C zB 2B mB fB","2":"I j K L G yB lB gB 3B 4B 5B nB oB 6B","1028":"D E F 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC fB pB BC"},G:{"1":"HC IC JC KC LC MC NC","2":"lB CC qB DC EC OC PC QC RC SC TC UC VC nB oB","1028":"E FC GC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"16":"D","1028":"A"},K:{"1":"U gB","16":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"164":"A","260":"B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"Do Not Track API"}; +module.exports={A:{A:{"2":"J D E 4B","164":"F A","260":"B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K L G M"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E 6B 7B","516":"0 1 2 F A B C K L G M N O q r s t u v w x y z"},D:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t"},E:{"1":"J A B C AC DC vB lB","2":"I p K L G 9B uB mB wB EC FC xB yB zB 0B nB 1B GC","1028":"D E F BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC lB 2B LC"},G:{"1":"RC SC TC UC VC WC XC","2":"uB MC 3B NC OC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","1028":"E PC QC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"16":"D","1028":"A"},K:{"1":"c mB","16":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"164":"A","260":"B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:7,C:"Do Not Track API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-currentscript.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-currentscript.js index d7f19f402b5..988ccd3c1b8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-currentscript.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-currentscript.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t"},E:{"1":"E F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G 7B 8B 9B AC fB pB BC gB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"document.currentScript"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"E F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G HC IC JC KC lB 2B LC mB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"document.currentScript"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-evaluate-xpath.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-evaluate-xpath.js index 25052d6ab0b..467c792a0f0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-evaluate-xpath.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-evaluate-xpath.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","16":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","16":"F"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:7,C:"document.evaluate & XPath"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","16":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","16":"F"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:7,C:"document.evaluate & XPath"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-execcommand.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-execcommand.js index b961272ddc6..7c27461d68c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-execcommand.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-execcommand.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 8B 9B AC fB pB BC gB","16":"F 7B"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC","16":"qB DC EC"},H:{"2":"WC"},I:{"1":"H aC qB bC cC","2":"hB I XC YC ZC"},J:{"1":"A","2":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"2":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:7,C:"Document.execCommand()"}; +module.exports={A:{A:{"1":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a IC JC KC lB 2B LC mB","16":"F HC"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC","16":"3B NC OC"},H:{"2":"gC"},I:{"1":"H kC 3B lC mC","2":"oB I hC iC jC"},J:{"1":"A","2":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:7,C:"Document.execCommand()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-policy.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-policy.js index 2bc14f7b2ac..230cc32bc8e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-policy.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-policy.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V","132":"W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V","132":"W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB 7B 8B 9B AC fB pB BC gB","132":"XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","132":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","132":"U"},L:{"132":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Document Policy"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T","132":"U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T","132":"U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB HC IC JC KC lB 2B LC mB","132":"dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","132":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","132":"c"},L:{"132":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"132":"0C"},S:{"2":"1C"}},B:7,C:"Document Policy"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-scrollingelement.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-scrollingelement.js index 3b30c2a967e..c4df34ca107 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-scrollingelement.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/document-scrollingelement.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","16":"C K"},C:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB tB uB"},D:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"document.scrollingElement"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","16":"C K"},C:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB 6B 7B"},D:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"document.scrollingElement"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/documenthead.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/documenthead.js index e1500c953da..32ddf679622 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/documenthead.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/documenthead.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","16":"j"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","2":"F 7B 8B 9B AC"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"1":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"document.head"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","16":"p"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","2":"F HC IC JC KC"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"1":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"document.head"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dom-manip-convenience.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dom-manip-convenience.js index 83a67aaf898..ee2c5b9b652 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dom-manip-convenience.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dom-manip-convenience.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB tB uB"},D:{"1":"JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB","194":"HB IB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","194":"5"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I eC"},Q:{"194":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"DOM manipulation convenience methods"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB 6B 7B"},D:{"1":"PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","194":"NB OB"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB HC IC JC KC lB 2B LC mB","194":"BB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"DOM manipulation convenience methods"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dom-range.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dom-range.js index cef4ddfc214..c907d40ecd5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dom-range.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dom-range.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"rB","8":"J D E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Document Object Model Range"}; +module.exports={A:{A:{"1":"F A B","2":"4B","8":"J D E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Document Object Model Range"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/domcontentloaded.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/domcontentloaded.js index 3f3359d0abe..fac5851b7ae 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/domcontentloaded.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/domcontentloaded.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"DOMContentLoaded"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"DOMContentLoaded"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/domfocusin-domfocusout-events.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/domfocusin-domfocusout-events.js deleted file mode 100644 index 3a8f5d49a33..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/domfocusin-domfocusout-events.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L G M N O k l m n o p q"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","16":"j"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","16":"F B 7B 8B 9B AC fB pB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB DC EC"},H:{"16":"WC"},I:{"1":"I H aC qB bC cC","16":"hB XC YC ZC"},J:{"16":"D A"},K:{"1":"U","16":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"16":"A B"},O:{"16":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"DOMFocusIn & DOMFocusOut events"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dommatrix.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dommatrix.js index d52ce24921e..0912a4ec740 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dommatrix.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dommatrix.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","132":"A B"},B:{"132":"C K L G M N O","1028":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x tB uB","1028":"VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2564":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB","3076":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB"},D:{"16":"I j J D","132":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB","388":"E","1028":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"16":"I yB lB","132":"j J D E F A zB 0B 1B 2B mB","1028":"B C K L G fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","132":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB","1028":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"16":"lB CC qB","132":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"132":"I aC qB bC cC","292":"hB XC YC ZC","1028":"H"},J:{"16":"D","132":"A"},K:{"2":"A B C fB pB gB","1028":"U"},L:{"1028":"H"},M:{"1028":"T"},N:{"132":"A B"},O:{"132":"dC"},P:{"132":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"132":"pC"},R:{"132":"qC"},S:{"2564":"rC"}},B:4,C:"DOMMatrix"}; +module.exports={A:{A:{"2":"J D E F 4B","132":"A B"},B:{"132":"C K L G M N O","1028":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","1028":"bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2564":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB","3076":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB"},D:{"16":"I p J D","132":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB","388":"E","1028":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"16":"I 9B uB","132":"p J D E F A AC BC CC DC vB","1028":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","132":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB","1028":"JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"16":"uB MC 3B","132":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"132":"I kC 3B lC mC","292":"oB hC iC jC","1028":"H"},J:{"16":"D","132":"A"},K:{"2":"A B C lB 2B mB","1028":"c"},L:{"1028":"H"},M:{"1028":"b"},N:{"132":"A B"},O:{"1028":"nC"},P:{"132":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1028":"wB"},R:{"1028":"0C"},S:{"2564":"1C"}},B:4,C:"DOMMatrix"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/download.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/download.js index 1105e5a70e2..294315ee810 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/download.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/download.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Download attribute"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Download attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dragndrop.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dragndrop.js index 1680bad7119..b83cc6f4663 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dragndrop.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/dragndrop.js @@ -1 +1 @@ -module.exports={A:{A:{"644":"J D E F rB","772":"A B"},B:{"1":"O P Q R S V W X Y Z a b c d e f g T h H i","260":"C K L G M N"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","8":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","8":"F B 7B 8B 9B AC fB pB BC"},G:{"1":"VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","1025":"H"},J:{"2":"D A"},K:{"1":"gB","8":"A B C fB pB","1025":"U"},L:{"1025":"H"},M:{"2":"T"},N:{"1":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"Drag and Drop"}; +module.exports={A:{A:{"644":"J D E F 4B","772":"A B"},B:{"1":"O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K L G M N"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","8":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","8":"F B HC IC JC KC lB 2B LC"},G:{"1":"fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","1025":"H"},J:{"2":"D A"},K:{"1":"mB","8":"A B C lB 2B","1025":"c"},L:{"1025":"H"},M:{"2":"b"},N:{"1":"A B"},O:{"1025":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:1,C:"Drag and Drop"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-closest.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-closest.js index 6cd8dea57eb..39d83b867f7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-closest.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-closest.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"2":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Element.closest()"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x y HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Element.closest()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-from-point.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-from-point.js index bde51e9ebdd..ad5f41d5552 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-from-point.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-from-point.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B","16":"rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","16":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","16":"F 7B 8B 9B AC"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"1":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"C U gB","16":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"document.elementFromPoint()"}; +module.exports={A:{A:{"1":"J D E F A B","16":"4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","16":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","16":"F HC IC JC KC"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"1":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"C c mB","16":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"document.elementFromPoint()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-scroll-methods.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-scroll-methods.js index 3f362661ea3..52105e14727 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-scroll-methods.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/element-scroll-methods.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB"},E:{"1":"L G 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B","132":"A B C K mB fB gB 3B"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB 7B 8B 9B AC fB pB BC gB"},G:{"1":"UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC","132":"JC KC LC MC NC OC PC QC RC SC TC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC gC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:5,C:"Scroll methods on elements (scroll, scrollTo, scrollBy)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB"},E:{"1":"L G EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC","132":"A B C K vB lB mB wB"},F:{"1":"JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB HC IC JC KC lB 2B LC mB"},G:{"1":"eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC","132":"TC UC VC WC XC YC ZC aC bC cC dC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Scroll methods on elements (scroll, scrollTo, scrollBy)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eme.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eme.js index a59af14b7d7..db6f1d71f95 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eme.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eme.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","164":"B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","132":"0 1 2 3 4 5 6"},E:{"1":"C K L G gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB 0B","164":"D E F A B 1B 2B mB fB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m 7B 8B 9B AC fB pB BC gB","132":"n o p q r s t"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"16":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:2,C:"Encrypted Media Extensions"}; +module.exports={A:{A:{"2":"J D E F A 4B","164":"B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 I p J D E F A B C K L G M N O q r s t u v w x y z","132":"6 7 8 9 AB BB CB"},E:{"1":"C K L G mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC BC","164":"D E F A B CC DC vB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s HC IC JC KC lB 2B LC mB","132":"t u v w x y z"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"Encrypted Media Extensions"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eot.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eot.js index e890fe3ed1d..ee62ba0bbf2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eot.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eot.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B","2":"rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"EOT - Embedded OpenType fonts"}; +module.exports={A:{A:{"1":"J D E F A B","2":"4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"EOT - Embedded OpenType fonts"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es5.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es5.js index 05567c84b51..4859820a722 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es5.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es5.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D rB","260":"F","1026":"E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","4":"sB hB tB uB","132":"I j J D E F A B C K L G M N O k l"},D:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","4":"I j J D E F A B C K L G M N O","132":"k l m n"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","4":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","4":"F B C 7B 8B 9B AC fB pB BC","132":"gB"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","4":"lB CC qB DC"},H:{"132":"WC"},I:{"1":"H bC cC","4":"hB XC YC ZC","132":"aC qB","900":"I"},J:{"1":"A","4":"D"},K:{"1":"U","4":"A B C fB pB","132":"gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"ECMAScript 5"}; +module.exports={A:{A:{"1":"A B","2":"J D 4B","260":"F","1026":"E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","4":"5B oB 6B 7B","132":"I p J D E F A B C K L G M N O q r"},D:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","4":"I p J D E F A B C K L G M N O","132":"q r s t"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","4":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","4":"F B C HC IC JC KC lB 2B LC","132":"mB"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","4":"uB MC 3B NC"},H:{"132":"gC"},I:{"1":"H lC mC","4":"oB hC iC jC","132":"kC 3B","900":"I"},J:{"1":"A","4":"D"},K:{"1":"c","4":"A B C lB 2B","132":"mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"ECMAScript 5"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-class.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-class.js index c063085e48e..9079a0990a6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-class.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-class.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C"},C:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","132":"7 8 9 AB BB CB DB"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t 7B 8B 9B AC fB pB BC gB","132":"0 u v w x y z"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"ES6 classes"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C"},C:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB 6B 7B"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB","132":"DB EB FB GB HB IB JB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","132":"0 1 2 3 4 5 6"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"ES6 classes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-generators.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-generators.js index 46198e556b7..8d68293e286 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-generators.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-generators.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q tB uB"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"ES6 Generators"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w 6B 7B"},D:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"ES6 Generators"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js index d8342d34acd..48674bbc36e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB tB uB","194":"SB"},D:{"1":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB 7B 8B 9B AC fB pB BC gB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC gC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"JavaScript modules: dynamic import()"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB 6B 7B","194":"YB"},D:{"1":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB"},F:{"1":"LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB HC IC JC KC lB 2B LC mB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"JavaScript modules: dynamic import()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-module.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-module.js index 7748a18ebd3..b313e108f9e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-module.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-module.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L","4097":"M N O","4290":"G"},C:{"1":"OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB tB uB","322":"JB KB LB MB NB iB"},D:{"1":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB","194":"OB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B","3076":"mB"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB 7B 8B 9B AC fB pB BC gB","194":"CB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC","3076":"KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC gC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"JavaScript modules via script tag"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L","4097":"M N O","4290":"G"},C:{"1":"UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB 6B 7B","322":"PB QB RB SB TB pB"},D:{"1":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB","194":"UB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC","3076":"vB"},F:{"1":"JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB HC IC JC KC lB 2B LC mB","194":"IB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC","3076":"UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"JavaScript modules via script tag"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-number.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-number.js index 1bb4e600a58..973acf7d5c7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-number.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-number.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G tB uB","132":"M N O k l m n o p","260":"q r s t u v","516":"w"},D:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O","1028":"k l m n o p q r s t u v w x y"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","1028":"G M N O k l"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC","1028":"aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"ES6 Number"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G 6B 7B","132":"M N O q r s t u v","260":"0 1 w x y z","516":"2"},D:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O","1028":"0 1 2 3 4 q r s t u v w x y z"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","1028":"G M N O q r"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC","1028":"kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"ES6 Number"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-string-includes.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-string-includes.js index 3c223066ea4..b223f5942f9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-string-includes.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6-string-includes.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"String.prototype.includes"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB 6B 7B"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x y HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"String.prototype.includes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6.js index 33068750cab..a9486989ec1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/es6.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","388":"B"},B:{"257":"P Q R S V W X Y Z a b c d e f g T h H i","260":"C K L","769":"G M N O"},C:{"2":"sB hB I j tB uB","4":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB","257":"JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"I j J D E F A B C K L G M N O k l","4":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB","257":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B","4":"E F 1B 2B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","4":"0 1 2 G M N O k l m n o p q r s t u v w x y z","257":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC","4":"E FC GC HC IC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","4":"bC cC","257":"H"},J:{"2":"D","4":"A"},K:{"2":"A B C fB pB gB","257":"U"},L:{"257":"H"},M:{"257":"T"},N:{"2":"A","388":"B"},O:{"257":"dC"},P:{"4":"I","257":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"257":"pC"},R:{"4":"qC"},S:{"4":"rC"}},B:6,C:"ECMAScript 2015 (ES6)"}; +module.exports={A:{A:{"2":"J D E F A 4B","388":"B"},B:{"257":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K L","769":"G M N O"},C:{"2":"5B oB I p 6B 7B","4":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB","257":"PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"I p J D E F A B C K L G M N O q r","4":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","257":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC","4":"E F CC DC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","4":"0 1 2 3 4 5 6 7 8 G M N O q r s t u v w x y z","257":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC","4":"E PC QC RC SC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B","4":"lC mC","257":"H"},J:{"2":"D","4":"A"},K:{"2":"A B C lB 2B mB","257":"c"},L:{"257":"H"},M:{"257":"b"},N:{"2":"A","388":"B"},O:{"257":"nC"},P:{"4":"I","257":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"257":"wB"},R:{"257":"0C"},S:{"4":"1C"}},B:6,C:"ECMAScript 2015 (ES6)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eventsource.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eventsource.js index cb9276833ef..7e7855d0ee5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eventsource.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/eventsource.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","4":"F 7B 8B 9B AC"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"D A"},K:{"1":"C U fB pB gB","4":"A B"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Server-sent events"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","4":"F HC IC JC KC"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"D A"},K:{"1":"C c lB 2B mB","4":"A B"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Server-sent events"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/extended-system-fonts.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/extended-system-fonts.js index dc4c15d400f..987c6cf68c6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/extended-system-fonts.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/extended-system-fonts.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"L G 3B 4B 5B nB oB 6B","2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"ui-serif, ui-sans-serif, ui-monospace and ui-rounded values for font-family"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"ui-serif, ui-sans-serif, ui-monospace and ui-rounded values for font-family"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/feature-policy.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/feature-policy.js index 3238c32da1c..b08c6cbd59f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/feature-policy.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/feature-policy.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y","2":"C K L G M N O","1025":"Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB tB uB","260":"aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"aB bB cB dB eB P Q R S V W X Y","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB","132":"OB jB PB QB U RB SB TB UB VB WB XB YB ZB","1025":"Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B yB lB zB 0B 1B 2B mB","772":"C K L G fB gB 3B 4B 5B nB oB 6B"},F:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB 7B 8B 9B AC fB pB BC gB","132":"CB DB EB FB GB HB IB JB KB LB MB NB OB","1025":"bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC","772":"MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1025":"H"},M:{"260":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"jC kC lC mC nC oC","2":"I eC fC gC","132":"hC iC mB"},Q:{"132":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"Feature Policy"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W","2":"C K L G M N O","1025":"X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB 6B 7B","260":"gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"gB hB iB jB kB P Q R S T U V W","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB","132":"UB qB VB WB c XB YB ZB aB bB cB dB eB fB","1025":"X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B 9B uB AC BC CC DC vB","772":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB HC IC JC KC lB 2B LC mB","132":"IB JB KB LB MB NB OB PB QB RB SB TB UB","1025":"hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC","772":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1025":"H"},M:{"260":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"tC uC vC wC xC nB yC zC","2":"I oC pC qC","132":"rC sC vB"},Q:{"132":"wB"},R:{"1025":"0C"},S:{"2":"1C"}},B:7,C:"Feature Policy"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fetch.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fetch.js index 44fd1657df0..ab48293bcb4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fetch.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fetch.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K"},C:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y tB uB","1025":"4","1218":"0 1 2 3 z"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","260":"5","772":"6"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r 7B 8B 9B AC fB pB BC gB","260":"s","772":"t"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Fetch"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K"},C:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","1025":"AB","1218":"5 6 7 8 9"},D:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB","260":"BB","772":"CB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x HC IC JC KC lB 2B LC mB","260":"y","772":"z"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Fetch"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fieldset-disabled.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fieldset-disabled.js index a04d2f75a5f..f514869fdbb 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fieldset-disabled.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fieldset-disabled.js @@ -1 +1 @@ -module.exports={A:{A:{"16":"rB","132":"E F","388":"J D A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G","16":"M N O k"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 8B 9B AC fB pB BC gB","16":"F 7B"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC"},H:{"388":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A","260":"B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"disabled attribute of the fieldset element"}; +module.exports={A:{A:{"16":"4B","132":"E F","388":"J D A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G","16":"M N O q"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a IC JC KC lB 2B LC mB","16":"F HC"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC"},H:{"388":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A","260":"B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"disabled attribute of the fieldset element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fileapi.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fileapi.js index 2b86d8b88c0..44c86050a7d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fileapi.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fileapi.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","260":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","260":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB","260":"I j J D E F A B C K L G M N O k l m n o p q r s uB"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j","260":"0 1 2 K L G M N O k l m n o p q r s t u v w x y z","388":"J D E F A B C"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB","260":"J D E F 0B 1B 2B","388":"zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B 7B 8B 9B AC","260":"C G M N O k l m n o p fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC","260":"E EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H cC","2":"XC YC ZC","260":"bC","388":"hB I aC qB"},J:{"260":"A","388":"D"},K:{"1":"U","2":"A B","260":"C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A","260":"B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"File API"}; +module.exports={A:{A:{"2":"J D E F 4B","260":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B","260":"I p J D E F A B C K L G M N O q r s t u v w x y 7B"},D:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p","260":"0 1 2 3 4 5 6 7 8 K L G M N O q r s t u v w x y z","388":"J D E F A B C"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB","260":"J D E F BC CC DC","388":"AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B HC IC JC KC","260":"C G M N O q r s t u v lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","260":"E OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H mC","2":"hC iC jC","260":"lC","388":"oB I kC 3B"},J:{"260":"A","388":"D"},K:{"1":"c","2":"A B","260":"C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A","260":"B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"File API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filereader.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filereader.js index 69cb1744ba4..ad3b2f71ee8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filereader.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filereader.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","132":"A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i uB","2":"sB hB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","2":"F B 7B 8B 9B AC"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC"},H:{"2":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"A","2":"D"},K:{"1":"C U fB pB gB","2":"A B"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"FileReader API"}; +module.exports={A:{A:{"2":"J D E F 4B","132":"A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 7B","2":"5B oB 6B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","2":"F B HC IC JC KC"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC"},H:{"2":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"A","2":"D"},K:{"1":"C c lB 2B mB","2":"A B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"FileReader API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filereadersync.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filereadersync.js index ee12f73ae83..14769539d4d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filereadersync.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filereadersync.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F 7B 8B","16":"B 9B AC fB pB"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"C U pB gB","2":"A","16":"B fB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"FileReaderSync"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F HC IC","16":"B JC KC lB 2B"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"C c 2B mB","2":"A","16":"B lB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"FileReaderSync"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filesystem.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filesystem.js index 5523f980008..b6022500930 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filesystem.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/filesystem.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","33":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"I j J D","33":"0 1 2 3 4 5 6 7 8 9 K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","36":"E F A B C"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D","33":"A"},K:{"2":"A B C U fB pB gB"},L:{"33":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I","33":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Filesystem & FileWriter API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","33":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"I p J D","33":"0 1 2 3 4 5 6 7 8 9 K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","36":"E F A B C"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D","33":"A"},K:{"2":"A B C c lB 2B mB"},L:{"33":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"33":"nC"},P:{"2":"I","33":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"33":"0C"},S:{"2":"1C"}},B:7,C:"Filesystem & FileWriter API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flac.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flac.js index b52dcbf95c4..100236e96c1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flac.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flac.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G"},C:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB tB uB"},D:{"1":"LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","16":"9 AB BB","388":"CB DB EB FB GB HB IB JB KB"},E:{"1":"K L G 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB","516":"B C fB gB"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","2":"XC YC ZC","16":"hB I aC qB bC cC"},J:{"1":"A","2":"D"},K:{"1":"U gB","16":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","129":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:6,C:"FLAC audio format"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G"},C:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB 6B 7B"},D:{"1":"RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB","16":"FB GB HB","388":"IB JB KB LB MB NB OB PB QB"},E:{"1":"K L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB","516":"B C lB mB"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB HC IC JC KC lB 2B LC mB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","2":"hC iC jC","16":"oB I kC 3B lC mC"},J:{"1":"A","2":"D"},K:{"1":"c mB","16":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","129":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"FLAC audio format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flexbox-gap.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flexbox-gap.js index 035b4eab977..e2e160b6a92 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flexbox-gap.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flexbox-gap.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"V W X Y Z a b c d e f g T h H i","2":"C K L G M N O P Q R S"},C:{"1":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB tB uB"},D:{"1":"V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S"},E:{"1":"G 4B 5B nB oB 6B","2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B"},F:{"1":"ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB 7B 8B 9B AC fB pB BC gB"},G:{"1":"UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mC nC oC","2":"I eC fC gC hC iC mB jC kC lC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"gap property for Flexbox"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O P Q R S"},C:{"1":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB 6B 7B"},D:{"1":"T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S"},E:{"1":"G EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB"},F:{"1":"cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB HC IC JC KC lB 2B LC mB"},G:{"1":"eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"gap property for Flexbox"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flexbox.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flexbox.js index f7e8345755f..9daf35e01f1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flexbox.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flexbox.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","1028":"B","1316":"A"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","164":"sB hB I j J D E F A B C K L G M N O k l m tB uB","516":"n o p q r s"},D:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"m n o p q r s t","164":"I j J D E F A B C K L G M N O k l"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","33":"D E 0B 1B","164":"I j J yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B C 7B 8B 9B AC fB pB BC","33":"G M"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","33":"E FC GC","164":"lB CC qB DC EC"},H:{"1":"WC"},I:{"1":"H bC cC","164":"hB I XC YC ZC aC qB"},J:{"1":"A","164":"D"},K:{"1":"U gB","2":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","292":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS Flexible Box Layout Module"}; +module.exports={A:{A:{"2":"J D E F 4B","1028":"B","1316":"A"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","164":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B","516":"t u v w x y"},D:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"s t u v w x y z","164":"I p J D E F A B C K L G M N O q r"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","33":"D E BC CC","164":"I p J 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B C HC IC JC KC lB 2B LC","33":"G M"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","33":"E PC QC","164":"uB MC 3B NC OC"},H:{"1":"gC"},I:{"1":"H lC mC","164":"oB I hC iC jC kC 3B"},J:{"1":"A","164":"D"},K:{"1":"c mB","2":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","292":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS Flexible Box Layout Module"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flow-root.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flow-root.js index d99deb2f658..5a50102b241 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flow-root.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/flow-root.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB tB uB"},D:{"1":"NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB"},E:{"1":"K L G 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB gB"},F:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","2":"I eC fC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"display: flow-root"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB 6B 7B"},D:{"1":"TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB"},E:{"1":"K L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB mB"},F:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB HC IC JC KC lB 2B LC mB"},G:{"1":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"display: flow-root"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/focusin-focusout-events.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/focusin-focusout-events.js index e8fea4f9d88..a3deb8536c1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/focusin-focusout-events.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/focusin-focusout-events.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B","2":"rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F 7B 8B 9B AC","16":"B fB pB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"2":"WC"},I:{"1":"I H aC qB bC cC","2":"XC YC ZC","16":"hB"},J:{"1":"D A"},K:{"1":"C U gB","2":"A","16":"B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"focusin & focusout events"}; +module.exports={A:{A:{"1":"J D E F A B","2":"4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F HC IC JC KC","16":"B lB 2B"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"2":"gC"},I:{"1":"I H kC 3B lC mC","2":"hC iC jC","16":"oB"},J:{"1":"D A"},K:{"1":"C c mB","2":"A","16":"B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"focusin & focusout events"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/focusoptions-preventscroll.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/focusoptions-preventscroll.js deleted file mode 100644 index cb3e4c77611..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/focusoptions-preventscroll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M","132":"N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"preventScroll support in focus"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-family-system-ui.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-family-system-ui.js index 83f9f382b30..ec0cf3e7bca 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-family-system-ui.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-family-system-ui.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"d e f g T h H i","2":"0 1 2 3 4 5 6 7 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","132":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c"},D:{"1":"LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB","260":"IB JB KB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B","16":"F","132":"A 2B mB"},F:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC","132":"HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I eC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"132":"rC"}},B:5,C:"system-ui value for font-family"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB 6B 7B","132":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},D:{"1":"RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB","260":"OB PB QB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC","16":"F","132":"A DC vB"},F:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB HC IC JC KC lB 2B LC mB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC","132":"RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"132":"1C"}},B:5,C:"system-ui value for font-family"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-feature.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-feature.js index e28ab1abe36..457068b7766 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-feature.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-feature.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","33":"G M N O k l m n o p q r s t u v w x y","164":"I j J D E F A B C K L"},D:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G","33":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB","292":"M N O k l"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"D E F yB lB 0B 1B","4":"I j J zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"G M N O k l m n o p q r s t u v w x y z"},G:{"1":"IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E FC GC HC","4":"lB CC qB DC EC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB","33":"bC cC"},J:{"2":"D","33":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","33":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS font-feature-settings"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","33":"0 1 2 3 4 G M N O q r s t u v w x y z","164":"I p J D E F A B C K L"},D:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G","33":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB","292":"M N O q r"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"D E F 9B uB BC CC","4":"I p J AC"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 G M N O q r s t u v w x y z"},G:{"1":"SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E PC QC RC","4":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B","33":"lC mC"},J:{"2":"D","33":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","33":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS font-feature-settings"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-kerning.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-kerning.js index e222eccb707..f54a4559f87 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-kerning.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-kerning.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o tB uB","194":"p q r s t u v w x y"},D:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t","33":"u v w x"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB 0B","33":"D E F 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G 7B 8B 9B AC fB pB BC gB","33":"M N O k"},G:{"1":"NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC","33":"E GC HC IC JC KC LC MC"},H:{"2":"WC"},I:{"1":"H cC","2":"hB I XC YC ZC aC qB","33":"bC"},J:{"2":"D","33":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS3 font-kerning"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u 6B 7B","194":"0 1 2 3 4 v w x y z"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v w x y z","33":"0 1 2 3"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC BC","33":"D E F CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G HC IC JC KC lB 2B LC mB","33":"M N O q"},G:{"1":"XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC","33":"E QC RC SC TC UC VC WC"},H:{"2":"gC"},I:{"1":"H mC","2":"oB I hC iC jC kC 3B","33":"lC"},J:{"2":"D","33":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS3 font-kerning"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-loading.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-loading.js index 86e4fb783eb..ebcf03cd12b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-loading.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-loading.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","194":"0 1 2 3 4 5"},D:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"CSS Font Loading"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"6 7 8 9 AB BB"},D:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"CSS Font Loading"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-metrics-overrides.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-metrics-overrides.js deleted file mode 100644 index 5a30301ef3f..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-metrics-overrides.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W","194":"X"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"@font-face metrics overrides"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-size-adjust.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-size-adjust.js index ca0e3116a83..7599cf2dce6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-size-adjust.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-size-adjust.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","194":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB"},D:{"2":"0 1 2 3 4 5 6 7 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","194":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C G M N O k l m n o p q r s t u 7B 8B 9B AC fB pB BC gB","194":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"258":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"194":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"CSS font-size-adjust"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","194":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB","194":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","194":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"194":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:2,C:"CSS font-size-adjust"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-smooth.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-smooth.js index 02cecf4682d..e754abc8c25 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-smooth.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-smooth.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","676":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p tB uB","804":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"I","676":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"yB lB","676":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","676":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"804":"rC"}},B:7,C:"CSS font-smooth"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","676":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB I p J D E F A B C K L G M N O q r s t u v 6B 7B","804":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"I","676":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"9B uB","676":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","676":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"804":"1C"}},B:7,C:"CSS font-smooth"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-unicode-range.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-unicode-range.js index e06e24f3d0b..f7b9fa56153 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-unicode-range.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-unicode-range.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","4":"F A B"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","4":"C K L G M"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","194":"1 2 3 4 5 6 7 8"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","4":"0 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","4":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","4":"G M N O k l m n"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","4":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","4":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D","4":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"4":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","4":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:4,C:"Font unicode-range subsetting"}; +module.exports={A:{A:{"2":"J D E 4B","4":"F A B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","4":"C K L G M"},C:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"7 8 9 AB BB CB DB EB"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","4":"0 1 2 3 4 5 6 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","4":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","4":"G M N O q r s t"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","4":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","4":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D","4":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"4":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","4":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Font unicode-range subsetting"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-alternates.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-alternates.js index 52c711d5f6e..0aa4c329740 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-alternates.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-alternates.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","130":"A B"},B:{"130":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","130":"I j J D E F A B C K L G M N O k l m n o","322":"p q r s t u v w x y"},D:{"2":"I j J D E F A B C K L G","130":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"D E F yB lB 0B 1B","130":"I j J zB"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","130":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB FC GC HC","130":"CC qB DC EC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","130":"H bC cC"},J:{"2":"D","130":"A"},K:{"2":"A B C fB pB gB","130":"U"},L:{"130":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"130":"dC"},P:{"130":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"130":"pC"},R:{"130":"qC"},S:{"1":"rC"}},B:5,C:"CSS font-variant-alternates"}; +module.exports={A:{A:{"2":"J D E F 4B","130":"A B"},B:{"130":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","130":"I p J D E F A B C K L G M N O q r s t u","322":"0 1 2 3 4 v w x y z"},D:{"2":"I p J D E F A B C K L G","130":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"D E F 9B uB BC CC","130":"I p J AC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","130":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB PC QC RC","130":"MC 3B NC OC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B","130":"H lC mC"},J:{"2":"D","130":"A"},K:{"2":"A B C lB 2B mB","130":"c"},L:{"130":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"130":"nC"},P:{"130":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"130":"wB"},R:{"130":"0C"},S:{"1":"1C"}},B:5,C:"CSS font-variant-alternates"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-east-asian.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-east-asian.js deleted file mode 100644 index b5c8bc54620..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-east-asian.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o tB uB","132":"p q r s t u v w x y"},D:{"1":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"132":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:4,C:"CSS font-variant-east-asian "}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-numeric.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-numeric.js index 0417320b05c..1fad2aed827 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-numeric.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/font-variant-numeric.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y tB uB"},D:{"1":"HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B"},F:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D","16":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I eC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:2,C:"CSS font-variant-numeric"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC"},F:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D","16":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS font-variant-numeric"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fontface.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fontface.js index 4697f888180..469bf3af30d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fontface.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fontface.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","132":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 8B 9B AC fB pB BC gB","2":"F 7B"},G:{"1":"E qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","260":"lB CC"},H:{"2":"WC"},I:{"1":"I H aC qB bC cC","2":"XC","4":"hB YC ZC"},J:{"1":"A","4":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"@font-face Web fonts"}; +module.exports={A:{A:{"1":"F A B","132":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a IC JC KC lB 2B LC mB","2":"F HC"},G:{"1":"E 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","260":"uB MC"},H:{"2":"gC"},I:{"1":"I H kC 3B lC mC","2":"hC","4":"oB iC jC"},J:{"1":"A","4":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"@font-face Web fonts"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-attribute.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-attribute.js index 6bc3b5716ab..8d9561dc8f2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-attribute.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-attribute.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","16":"j"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"1":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Form attribute"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","16":"p"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"1":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Form attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-submit-attributes.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-submit-attributes.js index e41923254e0..6fd7570a872 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-submit-attributes.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-submit-attributes.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S AC fB pB BC gB","2":"F 7B","16":"8B 9B"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"1":"WC"},I:{"1":"I H aC qB bC cC","2":"XC YC ZC","16":"hB"},J:{"1":"A","2":"D"},K:{"1":"B C U fB pB gB","16":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Attributes for form submission"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a KC lB 2B LC mB","2":"F HC","16":"IC JC"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"1":"gC"},I:{"1":"I H kC 3B lC mC","2":"hC iC jC","16":"oB"},J:{"1":"A","2":"D"},K:{"1":"B C c lB 2B mB","16":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Attributes for form submission"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-validation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-validation.js index 9584f84ae8f..9cd5095373a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-validation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/form-validation.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","132":"j J D E F A zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 8B 9B AC fB pB BC gB","2":"F 7B"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB","132":"E CC qB DC EC FC GC HC IC JC"},H:{"516":"WC"},I:{"1":"H cC","2":"hB XC YC ZC","132":"I aC qB bC"},J:{"1":"A","132":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"260":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"132":"rC"}},B:1,C:"Form validation"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","132":"p J D E F A AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a IC JC KC lB 2B LC mB","2":"F HC"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB","132":"E MC 3B NC OC PC QC RC SC TC"},H:{"516":"gC"},I:{"1":"H mC","2":"oB hC iC jC","132":"I kC 3B lC"},J:{"1":"A","132":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"260":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"132":"1C"}},B:1,C:"Form validation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/forms.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/forms.js index 94e29e48eda..abab3f1eecd 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/forms.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/forms.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"rB","4":"A B","8":"J D E F"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","4":"C K L G"},C:{"4":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","8":"sB hB tB uB"},D:{"1":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","4":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB"},E:{"4":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","8":"yB lB"},F:{"1":"F B C HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","4":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB"},G:{"2":"lB","4":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB","4":"bC cC"},J:{"2":"D","4":"A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"4":"T"},N:{"4":"A B"},O:{"1":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","4":"I eC fC gC"},Q:{"1":"pC"},R:{"4":"qC"},S:{"4":"rC"}},B:1,C:"HTML5 form features"}; +module.exports={A:{A:{"2":"4B","4":"A B","8":"J D E F"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","4":"C K L G"},C:{"4":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","8":"5B oB 6B 7B"},D:{"1":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","4":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB"},E:{"4":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"9B uB"},F:{"1":"F B C NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","4":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB"},G:{"2":"uB","4":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B","4":"lC mC"},J:{"2":"D","4":"A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"4":"b"},N:{"4":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","4":"I oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"4":"1C"}},B:1,C:"HTML5 form features"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fullscreen.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fullscreen.js index 87895ca80ac..0c77b235239 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fullscreen.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/fullscreen.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","548":"B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","516":"C K L G M N O"},C:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F tB uB","676":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O k l m n o p q r s t u v w x y z AB BB","1700":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB"},D:{"1":"XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L","676":"G M N O k","804":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB"},E:{"2":"I j yB lB","548":"oB 6B","676":"zB","804":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB"},F:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B C 7B 8B 9B AC fB pB BC","804":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC","2052":"NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D","292":"A"},K:{"2":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A","548":"B"},O:{"804":"dC"},P:{"1":"mB jC kC lC mC nC oC","804":"I eC fC gC hC iC"},Q:{"804":"pC"},R:{"804":"qC"},S:{"1":"rC"}},B:1,C:"Full Screen API"}; +module.exports={A:{A:{"2":"J D E F A 4B","548":"B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","516":"C K L G M N O"},C:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F 6B 7B","676":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB","1700":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB"},D:{"1":"dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L","676":"G M N O q","804":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB"},E:{"2":"I p 9B uB","548":"yB zB 0B nB 1B GC","676":"AC","804":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB"},F:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B C HC IC JC KC lB 2B LC","804":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC","2052":"XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D","292":"A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A","548":"B"},O:{"1":"nC"},P:{"1":"vB tC uC vC wC xC nB yC zC","804":"I oC pC qC rC sC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Full Screen API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/gamepad.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/gamepad.js index f6d76bd8ddc..16d9335d19c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/gamepad.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/gamepad.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l","33":"m n o p"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"Gamepad API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r","33":"s t u v"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Gamepad API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/geolocation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/geolocation.js index f5741fcaa75..65a04b25782 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/geolocation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/geolocation.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"rB","8":"J D E"},B:{"1":"C K L G M N O","129":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB tB uB","8":"sB hB","129":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB","4":"I","129":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J D E F B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","8":"I yB lB","129":"A"},F:{"1":"0 1 2 3 B C M N O k l m n o p q r s t u v w x y z AC fB pB BC gB","2":"F G 7B","8":"8B 9B","129":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"E lB CC qB DC EC FC GC HC IC","129":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I XC YC ZC aC qB bC cC","129":"H"},J:{"1":"D A"},K:{"1":"B C fB pB gB","8":"A","129":"U"},L:{"129":"H"},M:{"129":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I","129":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"129":"pC"},R:{"129":"qC"},S:{"1":"rC"}},B:2,C:"Geolocation"}; +module.exports={A:{A:{"1":"F A B","2":"4B","8":"J D E"},B:{"1":"C K L G M N O","129":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB 6B 7B","8":"5B oB","129":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB","4":"I","129":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J D E F B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"I 9B uB","129":"A"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C M N O q r s t u v w x y z KC lB 2B LC mB","2":"F G HC","8":"IC JC","129":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"E uB MC 3B NC OC PC QC RC SC","129":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I hC iC jC kC 3B lC mC","129":"H"},J:{"1":"D A"},K:{"1":"B C lB 2B mB","8":"A","129":"c"},L:{"129":"H"},M:{"129":"b"},N:{"1":"A B"},O:{"129":"nC"},P:{"1":"I","129":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"129":"wB"},R:{"129":"0C"},S:{"1":"1C"}},B:2,C:"Geolocation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getboundingclientrect.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getboundingclientrect.js index a7901541790..8fc28b36450 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getboundingclientrect.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getboundingclientrect.js @@ -1 +1 @@ -module.exports={A:{A:{"644":"J D rB","2049":"F A B","2692":"E"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2049":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB","260":"I j J D E F A B","1156":"hB","1284":"tB","1796":"uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S AC fB pB BC gB","16":"F 7B","132":"8B 9B"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"1":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","132":"A"},L:{"1":"H"},M:{"1":"T"},N:{"2049":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"Element.getBoundingClientRect()"}; +module.exports={A:{A:{"644":"J D 4B","2049":"F A B","2692":"E"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2049":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B","260":"I p J D E F A B","1156":"oB","1284":"6B","1796":"7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a KC lB 2B LC mB","16":"F HC","132":"IC JC"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"1":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","132":"A"},L:{"1":"H"},M:{"1":"b"},N:{"2049":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Element.getBoundingClientRect()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getcomputedstyle.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getcomputedstyle.js index c2a0a7771d4..47952c9a631 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getcomputedstyle.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getcomputedstyle.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB","132":"hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","260":"I j J D E F A"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","260":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S AC fB pB BC gB","260":"F 7B 8B 9B"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","260":"lB CC qB"},H:{"260":"WC"},I:{"1":"I H aC qB bC cC","260":"hB XC YC ZC"},J:{"1":"A","260":"D"},K:{"1":"B C U fB pB gB","260":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"getComputedStyle"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B","132":"oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","260":"I p J D E F A"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","260":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a KC lB 2B LC mB","260":"F HC IC JC"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","260":"uB MC 3B"},H:{"260":"gC"},I:{"1":"I H kC 3B lC mC","260":"oB hC iC jC"},J:{"1":"A","260":"D"},K:{"1":"B C c lB 2B mB","260":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"getComputedStyle"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getelementsbyclassname.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getelementsbyclassname.js index 45201df4ef9..6bf1a4f1fc3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getelementsbyclassname.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getelementsbyclassname.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"rB","8":"J D E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","8":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"getElementsByClassName"}; +module.exports={A:{A:{"1":"F A B","2":"4B","8":"J D E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","8":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"getElementsByClassName"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getrandomvalues.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getrandomvalues.js index cb2382412d0..05a71dfa5e1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getrandomvalues.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/getrandomvalues.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","33":"B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A","33":"B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"crypto.getRandomValues()"}; +module.exports={A:{A:{"2":"J D E F A 4B","33":"B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A","33":"B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"crypto.getRandomValues()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/gyroscope.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/gyroscope.js index abf2fbe394f..15f55c9db24 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/gyroscope.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/gyroscope.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","194":"NB iB OB jB PB QB U RB SB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"Gyroscope"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB","194":"TB pB UB qB VB WB c XB YB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"Gyroscope"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hardwareconcurrency.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hardwareconcurrency.js index 5182203a806..b2357f025dc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hardwareconcurrency.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hardwareconcurrency.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L"},C:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB tB uB"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"2":"I j J D yB lB zB 0B 1B","129":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","194":"E F A 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o 7B 8B 9B AC fB pB BC gB"},G:{"2":"lB CC qB DC EC FC","129":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","194":"E GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"navigator.hardwareConcurrency"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L"},C:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB 6B 7B"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"2":"I p J D 9B uB AC BC CC","129":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","194":"E F A DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u HC IC JC KC lB 2B LC mB"},G:{"2":"uB MC 3B NC OC PC","129":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","194":"E QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"navigator.hardwareConcurrency"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hashchange.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hashchange.js index 448141d787d..c24bc158aac 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hashchange.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hashchange.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"E F A B","8":"J D rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i uB","8":"sB hB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","8":"I"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","8":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S AC fB pB BC gB","8":"F 7B 8B 9B"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB"},H:{"2":"WC"},I:{"1":"hB I H YC ZC aC qB bC cC","2":"XC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","8":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Hashchange event"}; +module.exports={A:{A:{"1":"E F A B","8":"J D 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 7B","8":"5B oB 6B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","8":"I"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a KC lB 2B LC mB","8":"F HC IC JC"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB"},H:{"2":"gC"},I:{"1":"oB I H iC jC kC 3B lC mC","2":"hC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","8":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Hashchange event"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/heif.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/heif.js index 003f964938d..95527dd7eea 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/heif.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/heif.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A yB lB zB 0B 1B 2B mB","130":"B C K L G fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC","130":"LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"HEIF/ISO Base Media File Format"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A 9B uB AC BC CC DC vB","130":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC","130":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"HEIF/ISO Base Media File Format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hevc.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hevc.js index a2851fddf88..a82ad18e275 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hevc.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hevc.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","132":"B"},B:{"2":"P Q R S V W X Y Z a b c d e f g T h H i","132":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"K L G 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB","516":"B C fB gB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","258":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","258":"U"},L:{"258":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I","258":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"HEVC/H.265 video format"}; +module.exports={A:{A:{"2":"J D E F A 4B","132":"B"},B:{"132":"C K L G M N O","1028":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b","2052":"H sB tB 8B"},E:{"1":"K L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB","516":"B C lB mB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","258":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","258":"c"},L:{"260":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I","258":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"HEVC/H.265 video format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hidden.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hidden.js index b298ca72d2c..ebcc7130b11 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hidden.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/hidden.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","2":"F B 7B 8B 9B AC"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"1":"WC"},I:{"1":"I H aC qB bC cC","2":"hB XC YC ZC"},J:{"1":"A","2":"D"},K:{"1":"C U fB pB gB","2":"A B"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"hidden attribute"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","2":"F B HC IC JC KC"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"1":"gC"},I:{"1":"I H kC 3B lC mC","2":"oB hC iC jC"},J:{"1":"A","2":"D"},K:{"1":"C c lB 2B mB","2":"A B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"hidden attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/high-resolution-time.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/high-resolution-time.js index 3db358a76c8..98f729ee019 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/high-resolution-time.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/high-resolution-time.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k","33":"l m n o"},E:{"1":"E F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"High Resolution Time API"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q","33":"r s t u"},E:{"1":"E F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"High Resolution Time API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/history.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/history.js index f3c02f18aea..1d631c2ce2a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/history.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/history.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","4":"j zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S pB BC gB","2":"F B 7B 8B 9B AC fB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC","4":"qB"},H:{"2":"WC"},I:{"1":"H YC ZC qB bC cC","2":"hB I XC aC"},J:{"1":"D A"},K:{"1":"C U fB pB gB","2":"A B"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Session history management"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","4":"p AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a 2B LC mB","2":"F B HC IC JC KC lB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC","4":"3B"},H:{"2":"gC"},I:{"1":"H iC jC 3B lC mC","2":"oB I hC kC"},J:{"1":"D A"},K:{"1":"C c lB 2B mB","2":"A B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Session history management"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/html-media-capture.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/html-media-capture.js index ffd39a0abe6..2f6cf8ca517 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/html-media-capture.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/html-media-capture.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"lB CC qB DC","129":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC","257":"YC ZC"},J:{"1":"A","16":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"516":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"16":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:4,C:"HTML Media Capture"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"uB MC 3B NC","129":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC","257":"iC jC"},J:{"1":"A","16":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"516":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"16":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:2,C:"HTML Media Capture"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/html5semantic.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/html5semantic.js index b6ee1985802..5350fc53e50 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/html5semantic.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/html5semantic.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"rB","8":"J D E","260":"F A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB","132":"hB tB uB","260":"I j J D E F A B C K L G M N O k l"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"I j","260":"J D E F A B C K L G M N O k l m n o p q"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","132":"I yB lB","260":"j J zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","132":"F B 7B 8B 9B AC","260":"C fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","132":"lB","260":"CC qB DC EC"},H:{"132":"WC"},I:{"1":"H bC cC","132":"XC","260":"hB I YC ZC aC qB"},J:{"260":"D A"},K:{"1":"U","132":"A","260":"B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"260":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"HTML5 semantic elements"}; +module.exports={A:{A:{"2":"4B","8":"J D E","260":"F A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B","132":"oB 6B 7B","260":"I p J D E F A B C K L G M N O q r"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"I p","260":"J D E F A B C K L G M N O q r s t u v w"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","132":"I 9B uB","260":"p J AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","132":"F B HC IC JC KC","260":"C lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","132":"uB","260":"MC 3B NC OC"},H:{"132":"gC"},I:{"1":"H lC mC","132":"hC","260":"oB I iC jC kC 3B"},J:{"260":"D A"},K:{"1":"c","132":"A","260":"B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"260":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"HTML5 semantic elements"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http-live-streaming.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http-live-streaming.js index 271ffcf1420..80f88280715 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http-live-streaming.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http-live-streaming.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O","2":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:7,C:"HTTP Live Streaming (HLS)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O","2":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"HTTP Live Streaming (HLS)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http2.js index 429e22985c9..a38f39a7c5e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http2.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http2.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","132":"B"},B:{"1":"C K L G M N O","513":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB","2":"0 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","513":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"6 7 8 9 AB BB CB DB EB FB","2":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","513":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B","260":"F A 2B mB"},F:{"1":"0 1 2 t u v w x y z","2":"F B C G M N O k l m n o p q r s 7B 8B 9B AC fB pB BC gB","513":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","513":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","513":"U"},L:{"513":"H"},M:{"513":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I","513":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"513":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"HTTP/2 protocol"}; +module.exports={A:{A:{"2":"J D E F A 4B","132":"B"},B:{"1":"C K L G M N O","513":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB","2":"0 1 2 3 4 5 6 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","513":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"CB DB EB FB GB HB IB JB KB LB","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB","513":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC","260":"F A DC vB"},F:{"1":"0 1 2 3 4 5 6 7 8 z","2":"F B C G M N O q r s t u v w x y HC IC JC KC lB 2B LC mB","513":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","513":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","513":"c"},L:{"513":"H"},M:{"513":"b"},N:{"2":"A B"},O:{"513":"nC"},P:{"1":"I","513":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"513":"wB"},R:{"513":"0C"},S:{"1":"1C"}},B:6,C:"HTTP/2 protocol"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http3.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http3.js index 987b82ee18f..31a849e35c6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http3.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/http3.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"Y Z a b c d e f g T h H i","2":"C K L G M N O","322":"P Q R S V","578":"W X"},C:{"1":"Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB tB uB","194":"YB ZB aB bB cB dB eB P Q R kB S V W X Y"},D:{"1":"Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB","322":"P Q R S V","578":"W X"},E:{"2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB 3B","1090":"L G 4B 5B nB oB 6B"},F:{"1":"aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB 7B 8B 9B AC fB pB BC gB","578":"ZB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC","66":"TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"194":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mC nC oC","2":"I eC fC gC hC iC mB jC kC lC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"HTTP/3 protocol"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","322":"P Q R S T","578":"U V"},C:{"1":"X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB 6B 7B","194":"eB fB gB hB iB jB kB P Q R rB S T U V W"},D:{"1":"W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB","322":"P Q R S T","578":"U V"},E:{"2":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB wB","1090":"L G EC FC xB yB zB 0B nB 1B GC"},F:{"1":"gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB HC IC JC KC lB 2B LC mB","578":"fB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC","66":"dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"HTTP/3 protocol"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-sandbox.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-sandbox.js index 76ba452ff90..c7464c8171e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-sandbox.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-sandbox.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M tB uB","4":"N O k l m n o p q r s"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC"},H:{"2":"WC"},I:{"1":"hB I H YC ZC aC qB bC cC","2":"XC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"sandbox attribute for iframes"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M 6B 7B","4":"N O q r s t u v w x y"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC"},H:{"2":"gC"},I:{"1":"oB I H iC jC kC 3B lC mC","2":"hC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"sandbox attribute for iframes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-seamless.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-seamless.js index b4e892e6685..a0549eb7066 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-seamless.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-seamless.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","66":"l m n o p q r"},E:{"2":"I j J E F A B C K L G yB lB zB 0B 2B mB fB gB 3B 4B 5B nB oB 6B","130":"D 1B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","130":"FC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"seamless attribute for iframes"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","66":"r s t u v w x"},E:{"2":"I p J E F A B C K L G 9B uB AC BC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","130":"D CC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","130":"PC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"seamless attribute for iframes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-srcdoc.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-srcdoc.js index 9c9c98fdd38..b92d5c845d7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-srcdoc.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/iframe-srcdoc.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"rB","8":"J D E F A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","8":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB","8":"hB I j J D E F A B C K L G M N O k l m n o p tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K","8":"L G M N O k"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB","8":"I j zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B 7B 8B 9B AC","8":"C fB pB BC gB"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB","8":"CC qB DC"},H:{"2":"WC"},I:{"1":"H bC cC","8":"hB I XC YC ZC aC qB"},J:{"1":"A","8":"D"},K:{"1":"U","2":"A B","8":"C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"8":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"srcdoc attribute for iframes"}; +module.exports={A:{A:{"2":"4B","8":"J D E F A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","8":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B","8":"oB I p J D E F A B C K L G M N O q r s t u v 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K","8":"L G M N O q"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB","8":"I p AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B HC IC JC KC","8":"C lB 2B LC mB"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB","8":"MC 3B NC"},H:{"2":"gC"},I:{"1":"H lC mC","8":"oB I hC iC jC kC 3B"},J:{"1":"A","8":"D"},K:{"1":"c","2":"A B","8":"C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"8":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"srcdoc attribute for iframes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/imagecapture.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/imagecapture.js index 203cf3e1aa2..e200eef2ea7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/imagecapture.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/imagecapture.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","322":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","194":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB","322":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","322":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"322":"pC"},R:{"1":"qC"},S:{"194":"rC"}},B:5,C:"ImageCapture API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB","322":"OB PB QB RB SB TB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB HC IC JC KC lB 2B LC mB","322":"BB CB DB EB FB GB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"194":"1C"}},B:5,C:"ImageCapture API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ime.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ime.js index f400860193e..348b3cd6255 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ime.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ime.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","161":"B"},B:{"2":"P Q R S V W X Y Z a b c d e f g T h H i","161":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A","161":"B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"Input Method Editor API"}; +module.exports={A:{A:{"2":"J D E F A 4B","161":"B"},B:{"2":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","161":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A","161":"B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Input Method Editor API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js index b5ad4fca18a..f0c381af34e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"naturalWidth & naturalHeight image properties"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"naturalWidth & naturalHeight image properties"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/import-maps.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/import-maps.js index 1142327838b..4f4cf1f3600 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/import-maps.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/import-maps.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"a b c d e f g T h H i","2":"C K L G M N O","194":"P Q R S V W X Y Z"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB","194":"aB bB cB dB eB P Q R S V W X Y Z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB 7B 8B 9B AC fB pB BC gB","194":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"nC oC","2":"I eC fC gC hC iC mB jC kC lC mC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Import maps"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","194":"P Q R S T U V W X"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m 6B 7B","322":"n o b H sB tB"},D:{"1":"Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB","194":"gB hB iB jB kB P Q R S T U V W X"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB HC IC JC KC lB 2B LC mB","194":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC wC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"Import maps"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/imports.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/imports.js index 231e0599825..222ee4ae9ef 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/imports.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/imports.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","8":"A B"},B:{"1":"P","2":"Q R S V W X Y Z a b c d e f g T h H i","8":"C K L G M N O"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u tB uB","8":"v w LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","72":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u Q R S V W X Y Z a b c d e f g T h H i vB wB xB","66":"v w x y z","72":"0"},E:{"2":"I j yB lB zB","8":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB","2":"F B C G M TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","66":"N O k l m","72":"n"},G:{"2":"lB CC qB DC EC","8":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"8":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC","2":"lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"HTML Imports"}; +module.exports={A:{A:{"2":"J D E F 4B","8":"A B"},B:{"1":"P","2":"Q R S T U V W X Y Z a d e f g h i j k l m n o b H","8":"C K L G M N O"},C:{"2":"0 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","8":"1 2 RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","72":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P","2":"0 I p J D E F A B C K L G M N O q r s t u v w x y z Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","66":"1 2 3 4 5","72":"6"},E:{"2":"I p 9B uB AC","8":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB","2":"F B C G M ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","66":"N O q r s","72":"t"},G:{"2":"uB MC 3B NC OC","8":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"8":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC","2":"vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"2":"0C"},S:{"1":"1C"}},B:5,C:"HTML Imports"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indeterminate-checkbox.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indeterminate-checkbox.js index 264184967af..2c168e6fd26 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indeterminate-checkbox.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indeterminate-checkbox.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B","16":"rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i uB","2":"sB hB","16":"tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F B 7B 8B 9B AC fB pB"},G:{"1":"OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"2":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"indeterminate checkbox"}; +module.exports={A:{A:{"1":"J D E F A B","16":"4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 7B","2":"5B oB","16":"6B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v w x y"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F B HC IC JC KC lB 2B"},G:{"1":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"indeterminate checkbox"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indexeddb.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indexeddb.js index be02250f468..9a41fed80a9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indexeddb.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indexeddb.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","132":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","132":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","33":"A B C K L G","36":"I j J D E F"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"A","8":"I j J D E F","33":"o","36":"B C K L G M N O k l m n"},E:{"1":"A B C K L G mB fB gB 3B 5B nB oB 6B","8":"I j J D yB lB zB 0B","260":"E F 1B 2B","516":"4B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F 7B 8B","8":"B C 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC VC nB oB","8":"lB CC qB DC EC FC","260":"E GC HC IC","516":"UC"},H:{"2":"WC"},I:{"1":"H bC cC","8":"hB I XC YC ZC aC qB"},J:{"1":"A","8":"D"},K:{"1":"U","2":"A","8":"B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"IndexedDB"}; +module.exports={A:{A:{"2":"J D E F 4B","132":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","132":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","33":"A B C K L G","36":"I p J D E F"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"A","8":"I p J D E F","33":"u","36":"B C K L G M N O q r s t"},E:{"1":"A B C K L G vB lB mB wB FC xB yB zB 0B nB 1B GC","8":"I p J D 9B uB AC BC","260":"E F CC DC","516":"EC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F HC IC","8":"B C JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC fC xB yB zB 0B nB 1B","8":"uB MC 3B NC OC PC","260":"E QC RC SC","516":"eC"},H:{"2":"gC"},I:{"1":"H lC mC","8":"oB I hC iC jC kC 3B"},J:{"1":"A","8":"D"},K:{"1":"c","2":"A","8":"B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"IndexedDB"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indexeddb2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indexeddb2.js index f7394d5fb47..9143865e22f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indexeddb2.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/indexeddb2.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","132":"9 AB BB","260":"CB DB EB FB"},D:{"1":"NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB","132":"DB EB FB GB","260":"HB IB JB KB LB MB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","132":"0 1 2 3","260":"4 5 6 7 8 9"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC","16":"JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","2":"I","260":"eC fC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"260":"rC"}},B:4,C:"IndexedDB 2.0"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB 6B 7B","132":"FB GB HB","260":"IB JB KB LB"},D:{"1":"TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB","132":"JB KB LB MB","260":"NB OB PB QB RB SB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","132":"6 7 8 9","260":"AB BB CB DB EB FB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC","16":"TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I","260":"oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"260":"1C"}},B:2,C:"IndexedDB 2.0"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/inline-block.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/inline-block.js index 0cd0f9120e0..40eba402374 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/inline-block.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/inline-block.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"E F A B","4":"rB","132":"J D"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","36":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS inline-block"}; +module.exports={A:{A:{"1":"E F A B","4":"4B","132":"J D"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","36":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS inline-block"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/innertext.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/innertext.js index 36b466b4734..2172c187a91 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/innertext.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/innertext.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B","16":"rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","16":"F"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"1":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"HTMLElement.innerText"}; +module.exports={A:{A:{"1":"J D E F A B","16":"4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","16":"F"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"1":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"HTMLElement.innerText"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js index ac968379c88..fe8a1530342 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A rB","132":"B"},B:{"132":"C K L G M N O","260":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u tB uB","516":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"N O k l m n o p q r","2":"I j J D E F A B C K L G M","132":"0 1 2 3 4 5 s t u v w x y z","260":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"J zB 0B","2":"I j yB lB","2052":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"lB CC qB","1025":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1025":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2052":"A B"},O:{"1025":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"260":"pC"},R:{"1":"qC"},S:{"516":"rC"}},B:1,C:"autocomplete attribute: on & off values"}; +module.exports={A:{A:{"1":"J D E F A 4B","132":"B"},B:{"132":"C K L G M N O","260":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","516":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"N O q r s t u v w x","2":"I p J D E F A B C K L G M","132":"0 1 2 3 4 5 6 7 8 9 y z AB BB","260":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"J AC BC","2":"I p 9B uB","2052":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"uB MC 3B","1025":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1025":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2052":"A B"},O:{"1025":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"260":"wB"},R:{"1":"0C"},S:{"516":"1C"}},B:1,C:"autocomplete attribute: on & off values"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-color.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-color.js index f23d7e7ab48..46642d9080d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-color.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-color.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k"},E:{"1":"K L G gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","2":"F G M 7B 8B 9B AC"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC","129":"OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:1,C:"Color input type"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q"},E:{"1":"K L G mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","2":"F G M HC IC JC KC"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC","129":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"Color input type"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-datetime.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-datetime.js index b0a7be90e5d..44c1aec6abb 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-datetime.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-datetime.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","132":"C"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB tB uB","1090":"IB JB KB LB","2052":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d","4100":"e f g T h H i"},D:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k","2052":"l m n o p"},E:{"2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B","4100":"G 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"lB CC qB","260":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB XC YC ZC","514":"I aC qB"},J:{"1":"A","2":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2052":"rC"}},B:1,C:"Date and time input types"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","132":"C"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB 6B 7B","1090":"OB PB QB RB","2052":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d","4100":"e f g h i j k l m n o b H sB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q","2052":"r s t u v"},E:{"2":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB","4100":"G EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"uB MC 3B","260":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB hC iC jC","514":"I kC 3B"},J:{"1":"A","2":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"4100":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2052":"1C"}},B:1,C:"Date and time input types"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-email-tel-url.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-email-tel-url.js index 9fd1213d882..b2bbf278c20 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-email-tel-url.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-email-tel-url.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H aC qB bC cC","132":"XC YC ZC"},J:{"1":"A","132":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Email, telephone & URL input types"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H kC 3B lC mC","132":"hC iC jC"},J:{"1":"A","132":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Email, telephone & URL input types"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-event.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-event.js index e1dc59dce6c..77bb427ddfc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-event.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-event.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","2561":"A B","2692":"F"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2561":"C K L G M N O"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","16":"sB","1537":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB uB","1796":"hB tB"},D:{"1":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L","1025":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB","1537":"G M N O k l m n o p q r s t u v w x y z"},E:{"1":"L G 3B 4B 5B nB oB 6B","16":"I j J yB lB","1025":"D E F A B C 0B 1B 2B mB fB","1537":"zB","4097":"K gB"},F:{"1":"HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","16":"F B C 7B 8B 9B AC fB pB","260":"BC","1025":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB","1537":"G M N O k l m"},G:{"16":"lB CC qB","1025":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","1537":"DC EC FC"},H:{"2":"WC"},I:{"16":"XC YC","1025":"H cC","1537":"hB I ZC aC qB bC"},J:{"1025":"A","1537":"D"},K:{"1":"A B C fB pB gB","1025":"U"},L:{"1":"H"},M:{"1537":"T"},N:{"2561":"A B"},O:{"1537":"dC"},P:{"1025":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1025":"pC"},R:{"1025":"qC"},S:{"1537":"rC"}},B:1,C:"input event"}; +module.exports={A:{A:{"2":"J D E 4B","2561":"A B","2692":"F"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2561":"C K L G M N O"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","16":"5B","1537":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB 7B","1796":"oB 6B"},D:{"1":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L","1025":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB","1537":"0 1 2 3 4 5 G M N O q r s t u v w x y z"},E:{"1":"L G wB EC FC xB yB zB 0B nB 1B GC","16":"I p J 9B uB","1025":"D E F A B C BC CC DC vB lB","1537":"AC","4097":"K mB"},F:{"1":"NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","16":"F B C HC IC JC KC lB 2B","260":"LC","1025":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","1537":"G M N O q r s"},G:{"1":"aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B","1025":"E QC RC SC TC UC VC WC XC","1537":"NC OC PC","4097":"YC ZC"},H:{"2":"gC"},I:{"16":"hC iC","1025":"H mC","1537":"oB I jC kC 3B lC"},J:{"1025":"A","1537":"D"},K:{"1":"A B C lB 2B mB","1025":"c"},L:{"1":"H"},M:{"1":"b"},N:{"2561":"A B"},O:{"1":"nC"},P:{"1025":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1537":"1C"}},B:1,C:"input event"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-accept.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-accept.js index 13a2586795b..a4021e392f4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-accept.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-accept.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","132":"0 1 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I","16":"j J D E m n o p q","132":"F A B C K L G M N O k l"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","132":"J D E F A B 0B 1B 2B mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"2":"EC FC","132":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","514":"lB CC qB DC"},H:{"2":"WC"},I:{"2":"XC YC ZC","260":"hB I aC qB","514":"H bC cC"},J:{"132":"A","260":"D"},K:{"2":"A B C fB pB gB","514":"U"},L:{"260":"H"},M:{"2":"T"},N:{"514":"A","1028":"B"},O:{"2":"dC"},P:{"260":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"260":"pC"},R:{"260":"qC"},S:{"1":"rC"}},B:1,C:"accept attribute for file input"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","132":"0 1 2 3 4 5 6 7 I p J D E F A B C K L G M N O q r s t u v w x y z"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I","16":"p J D E s t u v w","132":"F A B C K L G M N O q r"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","132":"J D E F A B BC CC DC vB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"2":"OC PC","132":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","514":"uB MC 3B NC"},H:{"2":"gC"},I:{"2":"hC iC jC","260":"oB I kC 3B","514":"H lC mC"},J:{"132":"A","260":"D"},K:{"2":"A B C lB 2B mB","514":"c"},L:{"260":"H"},M:{"2":"b"},N:{"514":"A","1028":"B"},O:{"2":"nC"},P:{"260":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"260":"wB"},R:{"260":"0C"},S:{"1":"1C"}},B:1,C:"accept attribute for file input"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-directory.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-directory.js index 09287aeecae..392722d8f81 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-directory.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-directory.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K"},C:{"1":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Directory selection from file input"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K"},C:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB 6B 7B"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Directory selection from file input"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-multiple.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-multiple.js index 99bbfb9e0da..697d8e2fb63 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-multiple.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-file-multiple.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i uB","2":"sB hB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S AC fB pB BC gB","2":"F 7B 8B 9B"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC"},H:{"130":"WC"},I:{"130":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"130":"A B C U fB pB gB"},L:{"132":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"130":"dC"},P:{"130":"I","132":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"132":"pC"},R:{"132":"qC"},S:{"2":"rC"}},B:1,C:"Multiple file selection"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 7B","2":"5B oB 6B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a KC lB 2B LC mB","2":"F HC IC JC"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC"},H:{"130":"gC"},I:{"130":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"130":"A B C c lB 2B mB"},L:{"132":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"130":"nC"},P:{"130":"I","132":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"132":"wB"},R:{"132":"0C"},S:{"2":"1C"}},B:1,C:"Multiple file selection"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-inputmode.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-inputmode.js index dfb063b2386..dcd593cb89a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-inputmode.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-inputmode.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"g T h H i","2":"sB hB I j J D E F A B C K L G M tB uB","4":"N O k l","194":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f"},D:{"1":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB","66":"LB MB NB iB OB jB PB QB U RB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","66":"8 9 AB BB CB DB EB FB GB HB"},G:{"1":"OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"iC mB jC kC lC mC nC oC","2":"I eC fC gC hC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"194":"rC"}},B:1,C:"inputmode attribute"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M 6B 7B","4":"N O q r","194":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f"},D:{"1":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB","66":"RB SB TB pB UB qB VB WB c XB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB HC IC JC KC lB 2B LC mB","66":"EB FB GB HB IB JB KB LB MB NB"},G:{"1":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"194":"1C"}},B:1,C:"inputmode attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-minlength.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-minlength.js index 60ce710d309..111523b1dc8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-minlength.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-minlength.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M"},C:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB tB uB"},D:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:1,C:"Minimum length attribute for input fields"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M"},C:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB 6B 7B"},D:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"Minimum length attribute for input fields"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-number.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-number.js index aa661eb04f3..79b0399f86d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-number.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-number.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","129":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","129":"C K","1025":"L G M N O"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB","513":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"388":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB XC YC ZC","388":"I H aC qB bC cC"},J:{"2":"D","388":"A"},K:{"1":"A B C fB pB gB","388":"U"},L:{"388":"H"},M:{"641":"T"},N:{"388":"A B"},O:{"388":"dC"},P:{"388":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"388":"pC"},R:{"388":"qC"},S:{"513":"rC"}},B:1,C:"Number input type"}; +module.exports={A:{A:{"2":"J D E F 4B","129":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","129":"C K","1025":"L G M N O"},C:{"2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","513":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"388":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB hC iC jC","388":"I H kC 3B lC mC"},J:{"2":"D","388":"A"},K:{"1":"A B C lB 2B mB","388":"c"},L:{"388":"H"},M:{"641":"b"},N:{"388":"A B"},O:{"388":"nC"},P:{"388":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"388":"wB"},R:{"388":"0C"},S:{"513":"1C"}},B:1,C:"Number input type"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-pattern.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-pattern.js index 4f16afd17d3..a485feb049d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-pattern.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-pattern.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","16":"j","388":"J D E F A zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB","388":"E DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H cC","2":"hB I XC YC ZC aC qB bC"},J:{"1":"A","2":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Pattern attribute for input fields"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","16":"p","388":"J D E F A AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B","388":"E NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H mC","2":"oB I hC iC jC kC 3B lC"},J:{"1":"A","2":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Pattern attribute for input fields"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-placeholder.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-placeholder.js index b8983bc7fa7..c02809e20e5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-placeholder.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-placeholder.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","132":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S pB BC gB","2":"F 7B 8B 9B AC","132":"B fB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB H XC YC ZC qB bC cC","4":"I aC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"input placeholder attribute"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","132":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a 2B LC mB","2":"F HC IC JC KC","132":"B lB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB H hC iC jC 3B lC mC","4":"I kC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"input placeholder attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-range.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-range.js index cadb55d37a0..87bd7b4c840 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-range.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-range.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"2":"WC"},I:{"1":"H qB bC cC","4":"hB I XC YC ZC aC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Range input type"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"2":"gC"},I:{"1":"H 3B lC mC","4":"oB I hC iC jC kC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Range input type"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-search.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-search.js index 0b5296b4fe7..aac358f9575 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-search.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-search.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","129":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","129":"C K L G M N O"},C:{"2":"sB hB tB uB","129":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L m n o p q","129":"G M N O k l"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F 7B 8B 9B AC","16":"B fB pB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB"},H:{"129":"WC"},I:{"1":"H bC cC","16":"XC YC","129":"hB I ZC aC qB"},J:{"1":"D","129":"A"},K:{"1":"C U","2":"A","16":"B fB pB","129":"gB"},L:{"1":"H"},M:{"129":"T"},N:{"129":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"129":"rC"}},B:1,C:"Search input type"}; +module.exports={A:{A:{"2":"J D E F 4B","129":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","129":"C K L G M N O"},C:{"2":"5B oB 6B 7B","129":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L s t u v w","129":"G M N O q r"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F HC IC JC KC","16":"B lB 2B"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B"},H:{"129":"gC"},I:{"1":"H lC mC","16":"hC iC","129":"oB I jC kC 3B"},J:{"1":"D","129":"A"},K:{"1":"C c","2":"A","16":"B lB 2B","129":"mB"},L:{"1":"H"},M:{"129":"b"},N:{"129":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"129":"1C"}},B:1,C:"Search input type"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-selection.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-selection.js index 0e3973714ac..82880c8e1e2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-selection.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/input-selection.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S AC fB pB BC gB","16":"F 7B 8B 9B"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"2":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Selection controls for input & textarea"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a KC lB 2B LC mB","16":"F HC IC JC"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"2":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Selection controls for input & textarea"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/insert-adjacent.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/insert-adjacent.js index accdc3fa222..74389616d95 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/insert-adjacent.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/insert-adjacent.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B","16":"rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","16":"F"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Element.insertAdjacentElement() & Element.insertAdjacentText()"}; +module.exports={A:{A:{"1":"J D E F A B","16":"4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","16":"F"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Element.insertAdjacentElement() & Element.insertAdjacentText()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/insertadjacenthtml.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/insertadjacenthtml.js index 9d21fc4752d..b97bb69bfb1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/insertadjacenthtml.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/insertadjacenthtml.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","16":"rB","132":"J D E F"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 8B 9B AC fB pB BC gB","16":"F 7B"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"1":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"Element.insertAdjacentHTML()"}; +module.exports={A:{A:{"1":"A B","16":"4B","132":"J D E F"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a IC JC KC lB 2B LC mB","16":"F HC"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"1":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Element.insertAdjacentHTML()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/internationalization.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/internationalization.js index f2067d320dc..56096ae3aec 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/internationalization.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/internationalization.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:6,C:"Internationalization API"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"Internationalization API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intersectionobserver-v2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intersectionobserver-v2.js index 9f7343b4e90..2ada58410a4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intersectionobserver-v2.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intersectionobserver-v2.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"jC kC lC mC nC oC","2":"I eC fC gC hC iC mB"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"IntersectionObserver V2"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"tC uC vC wC xC nB yC zC","2":"I oC pC qC rC sC vB"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"IntersectionObserver V2"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intersectionobserver.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intersectionobserver.js index 3695102e614..54480c0f409 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intersectionobserver.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intersectionobserver.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"M N O","2":"C K L","516":"G","1025":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB tB uB","194":"HB IB JB"},D:{"1":"NB iB OB jB PB QB U","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB","516":"GB HB IB JB KB LB MB","1025":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"K L G gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB"},F:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB","2":"0 1 2 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","516":"3 4 5 6 7 8 9","1025":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","1025":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","1025":"U"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"516":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","2":"I","516":"eC fC"},Q:{"1025":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"IntersectionObserver"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"M N O","2":"C K L","516":"G","1025":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB 6B 7B","194":"NB OB PB"},D:{"1":"TB pB UB qB VB WB c","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","516":"MB NB OB PB QB RB SB","1025":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"K L G mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB"},F:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB","2":"0 1 2 3 4 5 6 7 8 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","516":"9 AB BB CB DB EB FB","1025":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","1025":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","1025":"c"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I","516":"oC pC"},Q:{"1025":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"IntersectionObserver"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intl-pluralrules.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intl-pluralrules.js index 089dc57ea18..b687a849e3e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intl-pluralrules.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intl-pluralrules.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N","130":"O"},C:{"1":"NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB tB uB"},D:{"1":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB"},E:{"1":"K L G 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB gB"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB 7B 8B 9B AC fB pB BC gB"},G:{"1":"PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC gC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"Intl.PluralRules API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N","130":"O"},C:{"1":"TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB 6B 7B"},D:{"1":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB"},E:{"1":"K L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB mB"},F:{"1":"LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB HC IC JC KC lB 2B LC mB"},G:{"1":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"Intl.PluralRules API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intrinsic-width.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intrinsic-width.js index d867e801230..420a4e409a1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intrinsic-width.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/intrinsic-width.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","1537":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB","932":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB tB uB","2308":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"I j J D E F A B C K L G M N O k l m","545":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB","1537":"BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J yB lB zB","516":"B C K L G fB gB 3B 4B 5B nB oB 6B","548":"F A 2B mB","676":"D E 0B 1B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","513":"z","545":"G M N O k l m n o p q r s t u v w x","1537":"0 1 2 3 4 5 6 7 8 9 y AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"lB CC qB DC EC","516":"TC UC VC nB oB","548":"HC IC JC KC LC MC NC OC PC QC RC SC","676":"E FC GC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","545":"bC cC","1537":"H"},J:{"2":"D","545":"A"},K:{"2":"A B C fB pB gB","1537":"U"},L:{"1537":"H"},M:{"2308":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"545":"I","1537":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"545":"pC"},R:{"1537":"qC"},S:{"932":"rC"}},B:5,C:"Intrinsic & Extrinsic Sizing"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","1537":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B","932":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB 6B 7B","2308":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"I p J D E F A B C K L G M N O q r s","545":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB","1537":"HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J 9B uB AC","516":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","548":"F A DC vB","676":"D E BC CC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","513":"5","545":"0 1 2 3 G M N O q r s t u v w x y z","1537":"4 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"uB MC 3B NC OC","516":"dC eC fC xB yB zB 0B nB 1B","548":"RC SC TC UC VC WC XC YC ZC aC bC cC","676":"E PC QC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B","545":"lC mC","1537":"H"},J:{"2":"D","545":"A"},K:{"2":"A B C lB 2B mB","1537":"c"},L:{"1537":"H"},M:{"2308":"b"},N:{"2":"A B"},O:{"1537":"nC"},P:{"545":"I","1537":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1537":"wB"},R:{"1537":"0C"},S:{"932":"1C"}},B:5,C:"Intrinsic & Extrinsic Sizing"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpeg2000.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpeg2000.js index 0a967df7933..8034035357d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpeg2000.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpeg2000.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","129":"j zB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"JPEG 2000 image format"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","129":"p AC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"JPEG 2000 image format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpegxl.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpegxl.js index b129d3864f8..957766fa67e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpegxl.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpegxl.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b","578":"c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a tB uB","322":"b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b","194":"c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB 7B 8B 9B AC fB pB BC gB","194":"dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"JPEG XL image format"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z","578":"a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y 6B 7B","322":"Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z","194":"a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB HC IC JC KC lB 2B LC mB","194":"jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"JPEG XL image format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpegxr.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpegxr.js index 18b304bdb57..9ee9e18658a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpegxr.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/jpegxr.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O","2":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"1":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"JPEG XR image format"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O","2":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"1":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"JPEG XR image format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js index 7c9b2533480..36e67200a52 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB tB uB"},D:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC gC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"Lookbehind in JS regular expressions"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB 6B 7B"},D:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"Lookbehind in JS regular expressions"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/json.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/json.js index bf3f4b37fcd..0aa9c9f0d92 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/json.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/json.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D rB","129":"E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"JSON parsing"}; +module.exports={A:{A:{"1":"F A B","2":"J D 4B","129":"E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"JSON parsing"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/justify-content-space-evenly.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/justify-content-space-evenly.js index edfbd6a365d..7d52413993a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/justify-content-space-evenly.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/justify-content-space-evenly.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G","132":"M N O"},C:{"1":"HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB tB uB"},D:{"1":"OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","132":"MB NB iB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B","132":"mB"},F:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","132":"9 AB BB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC","132":"KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"132":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC","132":"gC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"132":"rC"}},B:5,C:"CSS justify-content: space-evenly"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G","132":"M N O"},C:{"1":"NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB 6B 7B"},D:{"1":"UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB","132":"SB TB pB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC","132":"vB"},F:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB HC IC JC KC lB 2B LC mB","132":"FB GB HB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC","132":"UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC","132":"qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"132":"1C"}},B:5,C:"CSS justify-content: space-evenly"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js index 3d26dc0efd0..16b1f66844b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"XC YC ZC","132":"hB I aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:7,C:"High-quality kerning pairs & ligatures"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"hC iC jC","132":"oB I kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:7,C:"High-quality kerning pairs & ligatures"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-charcode.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-charcode.js index e282aa15053..34acc83d130 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-charcode.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-charcode.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","16":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC fB pB BC","16":"C"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"U gB","2":"A B fB pB","16":"C"},L:{"1":"H"},M:{"130":"T"},N:{"130":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:7,C:"KeyboardEvent.charCode"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","16":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC lB 2B LC","16":"C"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"c mB","2":"A B lB 2B","16":"C"},L:{"1":"H"},M:{"130":"b"},N:{"130":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:7,C:"KeyboardEvent.charCode"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-code.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-code.js index fda181f7200..e49e2768b63 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-code.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-code.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","194":"7 8 9 AB BB CB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t 7B 8B 9B AC fB pB BC gB","194":"u v w x y z"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"194":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I","194":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"194":"qC"},S:{"1":"rC"}},B:5,C:"KeyboardEvent.code"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB","194":"DB EB FB GB HB IB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","194":"0 1 2 3 4 5"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"194":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I","194":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"194":"0C"},S:{"1":"1C"}},B:5,C:"KeyboardEvent.code"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js index 60601950dad..275ad043e81 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B G M 7B 8B 9B AC fB pB BC","16":"C"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U gB","2":"A B fB pB","16":"C"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"KeyboardEvent.getModifierState()"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L 6B 7B"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B G M HC IC JC KC lB 2B LC","16":"C"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c mB","2":"A B lB 2B","16":"C"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"KeyboardEvent.getModifierState()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-key.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-key.js index b0f80a87e9a..49420a2e8fd 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-key.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-key.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","260":"F A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","260":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n tB uB","132":"o p q r s t"},D:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"0 1 2 F B G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC","16":"C"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"1":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U gB","2":"A B fB pB","16":"C"},L:{"1":"H"},M:{"1":"T"},N:{"260":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"2":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:5,C:"KeyboardEvent.key"}; +module.exports={A:{A:{"2":"J D E 4B","260":"F A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t 6B 7B","132":"u v w x y z"},D:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"0 1 2 3 4 5 6 7 8 F B G M N O q r s t u v w x y z HC IC JC KC lB 2B LC","16":"C"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"1":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c mB","2":"A B lB 2B","16":"C"},L:{"1":"H"},M:{"1":"b"},N:{"260":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"KeyboardEvent.key"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-location.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-location.js index 07f48b02f2f..fb8f907e37b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-location.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-location.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"I j J D E F A B C K L G M N O k l m n o p q r s t u"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"J yB lB","132":"I j zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC fB pB BC","16":"C","132":"G M"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB","132":"DC EC FC"},H:{"2":"WC"},I:{"1":"H bC cC","16":"XC YC","132":"hB I ZC aC qB"},J:{"132":"D A"},K:{"1":"U gB","2":"A B fB pB","16":"C"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"KeyboardEvent.location"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L 6B 7B"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"0 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"J 9B uB","132":"I p AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC lB 2B LC","16":"C","132":"G M"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B","132":"NC OC PC"},H:{"2":"gC"},I:{"1":"H lC mC","16":"hC iC","132":"oB I jC kC 3B"},J:{"132":"D A"},K:{"1":"c mB","2":"A B lB 2B","16":"C"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"KeyboardEvent.location"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-which.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-which.js index bbfeb5da80c..89c070d7d80 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-which.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/keyboardevent-which.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","16":"j"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 8B 9B AC fB pB BC gB","16":"F 7B"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB","16":"XC YC","132":"bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"132":"H"},M:{"132":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"2":"I","132":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"132":"qC"},S:{"1":"rC"}},B:7,C:"KeyboardEvent.which"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","16":"p"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a IC JC KC lB 2B LC mB","16":"F HC"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B","16":"hC iC","132":"lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"132":"H"},M:{"132":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"2":"I","132":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"132":"0C"},S:{"1":"1C"}},B:7,C:"KeyboardEvent.which"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/lazyload.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/lazyload.js index ed9712688b6..88695d13cf2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/lazyload.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/lazyload.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"C K L G M N O","2":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"1":"B","2":"A"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Resource Hints: Lazyload"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"C K L G M N O","2":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"1":"B","2":"A"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Resource Hints: Lazyload"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/let.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/let.js index 96e49a769c3..f2e1b60a408 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/let.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/let.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","2052":"B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","194":"0 1 2 3 4 5 6 7 8 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O","322":"0 1 2 3 4 5 k l m n o p q r s t u v w x y z","516":"6 7 8 9 AB BB CB DB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B","1028":"A mB"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","322":"G M N O k l m n o p q r s","516":"0 t u v w x y z"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC","1028":"JC KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","516":"I"},Q:{"1":"pC"},R:{"516":"qC"},S:{"1":"rC"}},B:6,C:"let"}; +module.exports={A:{A:{"2":"J D E F A 4B","2052":"B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","194":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB 6B 7B"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O","322":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB","516":"CB DB EB FB GB HB IB JB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC","1028":"A vB"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","322":"G M N O q r s t u v w x y","516":"0 1 2 3 4 5 6 z"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC","1028":"TC UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","516":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"let"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-icon-png.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-icon-png.js index 514fa9cfe4e..5ce8b763348 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-icon-png.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-icon-png.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"NC OC PC QC RC SC TC UC VC nB oB","130":"E lB CC qB DC EC FC GC HC IC JC KC LC MC"},H:{"130":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D","130":"A"},K:{"1":"U","130":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"130":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"PNG favicons"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","130":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC"},H:{"130":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D","130":"A"},K:{"1":"c","130":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"130":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"PNG favicons"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-icon-svg.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-icon-svg.js index 683750a8c0a..77edfd60db6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-icon-svg.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-icon-svg.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P","1537":"Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB tB uB","260":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","513":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P","1537":"Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"9 AB BB CB DB EB FB GB HB IB","2":"0 1 2 3 4 5 6 7 8 F B C G M N O k l m n o p q r s t u v w x y z JB KB LB MB NB OB PB QB U RB SB 7B 8B 9B AC fB pB BC gB","1537":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"NC OC PC QC RC SC TC UC VC nB oB","130":"E lB CC qB DC EC FC GC HC IC JC KC LC MC"},H:{"130":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D","130":"A"},K:{"2":"U","130":"A B C fB pB gB"},L:{"1537":"H"},M:{"2":"T"},N:{"130":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC","1537":"lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"513":"rC"}},B:1,C:"SVG favicons"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P","1537":"Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB 6B 7B","260":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB","513":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P","1537":"Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"FB GB HB IB JB KB LB MB NB OB","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB PB QB RB SB TB UB VB WB c XB YB HC IC JC KC lB 2B LC mB","1537":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","130":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC"},H:{"130":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D","130":"A"},K:{"2":"c","130":"A B C lB 2B mB"},L:{"1537":"H"},M:{"2":"b"},N:{"130":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC","1537":"vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"1537":"0C"},S:{"513":"1C"}},B:1,C:"SVG favicons"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js index 23b2fb98d24..ee7595c2750 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E rB","132":"F"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB","260":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"16":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"16":"hB I H XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"16":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"16":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","16":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"Resource Hints: dns-prefetch"}; +module.exports={A:{A:{"1":"A B","2":"J D E 4B","132":"F"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB","260":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"16":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"16":"oB I H hC iC jC kC 3B lC mC"},J:{"16":"D A"},K:{"16":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","16":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Resource Hints: dns-prefetch"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-modulepreload.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-modulepreload.js index 8bf3041ef91..73fd848cb61 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-modulepreload.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-modulepreload.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"iC mB jC kC lC mC nC oC","2":"I eC fC gC hC"},Q:{"16":"pC"},R:{"16":"qC"},S:{"2":"rC"}},B:1,C:"Resource Hints: modulepreload"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"Resource Hints: modulepreload"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-preconnect.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-preconnect.js index fc4d2245932..8d3e6d5c0bd 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-preconnect.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-preconnect.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L","260":"G M N O"},C:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB","2":"0 1 2 3 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","129":"4"},D:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x 7B 8B 9B AC fB pB BC gB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"16":"T"},N:{"2":"A B"},O:{"16":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"Resource Hints: preconnect"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L","260":"G M N O"},C:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","129":"AB"},D:{"1":"HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB"},F:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"16":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Resource Hints: preconnect"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-prefetch.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-prefetch.js index a92a56fb62e..87b0cccaee5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-prefetch.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-prefetch.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D"},E:{"2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB","194":"L G 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC","194":"SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"I H bC cC","2":"hB XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"Resource Hints: prefetch"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D"},E:{"2":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB","194":"L G wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC","194":"cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"I H lC mC","2":"oB hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Resource Hints: prefetch"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-preload.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-preload.js index 0eb352ec5e6..774868cf480 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-preload.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-preload.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M","1028":"N O"},C:{"1":"W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB tB uB","132":"LB","578":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V"},D:{"1":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB","322":"B"},F:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC","322":"LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"Resource Hints: preload"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M","1028":"N O"},C:{"1":"U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB 6B 7B","132":"RB","578":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T"},D:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB","322":"B"},F:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC","322":"VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"Resource Hints: preload"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-prerender.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-prerender.js index a939fedb8bc..fb24ebba064 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-prerender.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/link-rel-prerender.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"1":"B","2":"A"},O:{"2":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"Resource Hints: prerender"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Resource Hints: prerender"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/loading-lazy-attr.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/loading-lazy-attr.js index 3993fb90ec4..bf287cb1d48 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/loading-lazy-attr.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/loading-lazy-attr.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB tB uB","132":"bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB","66":"bB cB"},E:{"2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB","322":"L G 3B 4B 5B nB","580":"oB 6B"},F:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB 7B 8B 9B AC fB pB BC gB","66":"PB QB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC","322":"SC TC UC VC nB","580":"oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"132":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"kC lC mC nC oC","2":"I eC fC gC hC iC mB jC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"Lazy loading via attribute for images & iframes"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB 6B 7B","132":"hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB","66":"hB iB"},E:{"1":"GC","2":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB","322":"L G wB EC FC xB","580":"yB zB 0B nB 1B"},F:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB HC IC JC KC lB 2B LC mB","66":"VB WB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC","322":"cC dC eC fC xB","580":"yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"132":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"uC vC wC xC nB yC zC","2":"I oC pC qC rC sC vB tC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"Lazy loading via attribute for images & iframes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/localecompare.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/localecompare.js index cd8f8ea9615..02f35ee78a7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/localecompare.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/localecompare.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","16":"rB","132":"J D E F A"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","132":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"I j J D E F A B C K L G M N O k l m n o"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","132":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F B C 7B 8B 9B AC fB pB BC","132":"gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","132":"E lB CC qB DC EC FC GC HC IC"},H:{"132":"WC"},I:{"1":"H bC cC","132":"hB I XC YC ZC aC qB"},J:{"132":"D A"},K:{"1":"U","16":"A B C fB pB","132":"gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","132":"A"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","132":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"4":"rC"}},B:6,C:"localeCompare()"}; +module.exports={A:{A:{"1":"B","16":"4B","132":"J D E F A"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","132":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"I p J D E F A B C K L G M N O q r s t u"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","132":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F B C HC IC JC KC lB 2B LC","132":"mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","132":"E uB MC 3B NC OC PC QC RC SC"},H:{"132":"gC"},I:{"1":"H lC mC","132":"oB I hC iC jC kC 3B"},J:{"132":"D A"},K:{"1":"c","16":"A B C lB 2B","132":"mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","132":"A"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","132":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"4":"1C"}},B:6,C:"localeCompare()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/magnetometer.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/magnetometer.js index e30219b80dc..68bd07dbfe5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/magnetometer.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/magnetometer.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","194":"NB iB OB jB PB QB U RB SB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"194":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"Magnetometer"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB","194":"TB pB UB qB VB WB c XB YB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"194":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"Magnetometer"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/matchesselector.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/matchesselector.js index 28dad2790f9..27a465115c5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/matchesselector.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/matchesselector.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","36":"F A B"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","36":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB","36":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","36":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y"},E:{"1":"E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","36":"j J D zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B 7B 8B 9B AC fB","36":"C G M N O k l pB BC gB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB","36":"CC qB DC EC FC"},H:{"2":"WC"},I:{"1":"H","2":"XC","36":"hB I YC ZC aC qB bC cC"},J:{"36":"D A"},K:{"1":"U","2":"A B","36":"C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"36":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","36":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"matches() DOM method"}; +module.exports={A:{A:{"2":"J D E 4B","36":"F A B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","36":"C K L"},C:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B","36":"0 1 2 3 4 I p J D E F A B C K L G M N O q r s t u v w x y z 7B"},D:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","36":"0 1 2 3 4 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","36":"p J D AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B HC IC JC KC lB","36":"C G M N O q r 2B LC mB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB","36":"MC 3B NC OC PC"},H:{"2":"gC"},I:{"1":"H","2":"hC","36":"oB I iC jC kC 3B lC mC"},J:{"36":"D A"},K:{"1":"c","2":"A B","36":"C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"36":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","36":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"matches() DOM method"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/matchmedia.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/matchmedia.js index d528c9bb445..359813bcfe3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/matchmedia.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/matchmedia.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B C 7B 8B 9B AC fB pB BC"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"1":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"A","2":"D"},K:{"1":"U gB","2":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"matchMedia"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B C HC IC JC KC lB 2B LC"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"1":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"A","2":"D"},K:{"1":"c mB","2":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"matchMedia"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mathml.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mathml.js index ca78a7fa3fa..c6381f5f419 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mathml.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mathml.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"F A B rB","8":"J D E"},B:{"2":"C K L G M N O","8":"P Q R S V W X Y Z a b c d e f g T","584":"h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","129":"sB hB tB uB"},D:{"1":"p","8":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T","584":"h H i vB wB xB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","260":"I j J D E F yB lB zB 0B 1B 2B"},F:{"2":"F","4":"B C 7B 8B 9B AC fB pB BC gB","8":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB","584":"S"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","8":"lB CC qB"},H:{"8":"WC"},I:{"8":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"A","8":"D"},K:{"8":"A B C U fB pB gB"},L:{"8":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"4":"dC"},P:{"8":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"8":"pC"},R:{"8":"qC"},S:{"1":"rC"}},B:2,C:"MathML"}; +module.exports={A:{A:{"2":"F A B 4B","8":"J D E"},B:{"2":"C K L G M N O","8":"P Q R S T U V W X Y Z a d e f g h","584":"i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","129":"5B oB 6B 7B"},D:{"1":"v","8":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h","584":"i j k l m n o b H sB tB 8B"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","260":"I p J D E F 9B uB AC BC CC DC"},F:{"2":"F","8":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB","584":"S T U V W X Y Z a","2052":"B C HC IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","8":"uB MC 3B"},H:{"8":"gC"},I:{"8":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"A","8":"D"},K:{"8":"A B C c lB 2B mB"},L:{"8":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"8":"nC"},P:{"8":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"8":"wB"},R:{"8":"0C"},S:{"1":"1C"}},B:2,C:"MathML"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/maxlength.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/maxlength.js index 7aa07b91d20..5bf810b1d65 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/maxlength.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/maxlength.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","16":"rB","900":"J D E F"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","1025":"C K L G M N O"},C:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","900":"sB hB tB uB","1025":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"j yB","900":"I lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F","132":"B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"CC qB DC EC FC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB","2052":"E GC"},H:{"132":"WC"},I:{"1":"hB I ZC aC qB bC cC","16":"XC YC","4097":"H"},J:{"1":"D A"},K:{"132":"A B C fB pB gB","4097":"U"},L:{"4097":"H"},M:{"4097":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"4097":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1025":"rC"}},B:1,C:"maxlength attribute for input and textarea elements"}; +module.exports={A:{A:{"1":"A B","16":"4B","900":"J D E F"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","1025":"C K L G M N O"},C:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","900":"5B oB 6B 7B","1025":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"p 9B","900":"I uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F","132":"B C HC IC JC KC lB 2B LC mB"},G:{"1":"MC 3B NC OC PC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB","2052":"E QC"},H:{"132":"gC"},I:{"1":"oB I jC kC 3B lC mC","16":"hC iC","4097":"H"},J:{"1":"D A"},K:{"132":"A B C lB 2B mB","4097":"c"},L:{"4097":"H"},M:{"4097":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"4097":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1025":"1C"}},B:1,C:"maxlength attribute for input and textarea elements"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override.js new file mode 100644 index 00000000000..984dfeab47e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override.js @@ -0,0 +1 @@ +module.exports={A:{D:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},L:{"1":"H"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M 6B 7B","33":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB"},M:{"1":"b"},A:{"2":"J D E F A B 4B"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},K:{"1":"c","2":"A B C lB 2B mB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B","2":"I p J 9B uB AC BC GC","33":"D E F A CC DC vB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC","33":"E PC QC RC SC TC UC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"}},B:6,C:"isolate-override from unicode-bidi"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate.js new file mode 100644 index 00000000000..3aec78f2f14 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate.js @@ -0,0 +1 @@ +module.exports={A:{D:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G","33":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},L:{"1":"H"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F 6B 7B","33":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB"},M:{"1":"b"},A:{"2":"J D E F A B 4B"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 G M N O q r s t u v w x y z"},K:{"1":"c","2":"A B C lB 2B mB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B","2":"I p 9B uB AC GC","33":"J D E F A BC CC DC vB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","33":"E OC PC QC RC SC TC UC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"}},B:6,C:"isolate from unicode-bidi"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext.js new file mode 100644 index 00000000000..2415be99d16 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext.js @@ -0,0 +1 @@ +module.exports={A:{D:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},L:{"1":"H"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F 6B 7B","33":"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB"},M:{"1":"b"},A:{"2":"J D E F A B 4B"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},K:{"1":"c","2":"A B C lB 2B mB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B","2":"I p 9B uB AC GC","33":"J D E F A BC CC DC vB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","33":"E OC PC QC RC SC TC UC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"}},B:6,C:"plaintext from unicode-bidi"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-color.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-color.js new file mode 100644 index 00000000000..cd5f2a6d96c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-color.js @@ -0,0 +1 @@ +module.exports={A:{D:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB"},L:{"1":"H"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B","33":"0 1 2 3 4 5 6 J D E F A B C K L G M N O q r s t u v w x y z"},M:{"1":"b"},A:{"2":"J D E F A B 4B"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB HC IC JC KC lB 2B LC mB"},K:{"1":"c","2":"A B C lB 2B mB"},E:{"1":"K L G mB wB EC FC xB yB zB 0B nB 1B","2":"I p J D 9B uB AC BC CC GC","33":"E F A B C DC vB lB"},G:{"1":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC","33":"E QC RC SC TC UC VC WC XC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"}},B:6,C:"text-decoration-color property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-line.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-line.js new file mode 100644 index 00000000000..c058f06f3f9 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-line.js @@ -0,0 +1 @@ +module.exports={A:{D:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB"},L:{"1":"H"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B","33":"0 1 2 3 4 5 6 J D E F A B C K L G M N O q r s t u v w x y z"},M:{"1":"b"},A:{"2":"J D E F A B 4B"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB HC IC JC KC lB 2B LC mB"},K:{"1":"c","2":"A B C lB 2B mB"},E:{"1":"K L G mB wB EC FC xB yB zB 0B nB 1B","2":"I p J D 9B uB AC BC CC GC","33":"E F A B C DC vB lB"},G:{"1":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC","33":"E QC RC SC TC UC VC WC XC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"}},B:6,C:"text-decoration-line property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-shorthand.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-shorthand.js new file mode 100644 index 00000000000..bc2b85afa29 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-shorthand.js @@ -0,0 +1 @@ +module.exports={A:{D:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB"},L:{"1":"H"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B"},M:{"1":"b"},A:{"2":"J D E F A B 4B"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB HC IC JC KC lB 2B LC mB"},K:{"1":"c","2":"A B C lB 2B mB"},E:{"2":"I p J D 9B uB AC BC CC GC","33":"E F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B"},G:{"2":"uB MC 3B NC OC PC","33":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"}},B:6,C:"text-decoration shorthand property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-style.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-style.js new file mode 100644 index 00000000000..fae05834e12 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mdn-text-decoration-style.js @@ -0,0 +1 @@ +module.exports={A:{D:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB"},L:{"1":"H"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B","33":"0 1 2 3 4 5 6 J D E F A B C K L G M N O q r s t u v w x y z"},M:{"1":"b"},A:{"2":"J D E F A B 4B"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB HC IC JC KC lB 2B LC mB"},K:{"1":"c","2":"A B C lB 2B mB"},E:{"1":"K L G mB wB EC FC xB yB zB 0B nB 1B","2":"I p J D 9B uB AC BC CC GC","33":"E F A B C DC vB lB"},G:{"1":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC","33":"E QC RC SC TC UC VC WC XC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"}},B:6,C:"text-decoration-style property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/media-attribute.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/media-attribute.js deleted file mode 100644 index 4181441d3a3..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/media-attribute.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O","16":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L tB uB"},D:{"1":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y","2":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i","16":"vB wB xB"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB"},F:{"1":"B C G M N O k l m n o p 8B 9B AC fB pB BC gB","2":"0 1 2 3 4 5 6 7 8 9 F q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB"},H:{"16":"WC"},I:{"1":"I H aC qB bC cC","16":"hB XC YC ZC"},J:{"16":"D A"},K:{"1":"C U gB","16":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"16":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Media attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/media-fragments.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/media-fragments.js index 9b729316bfd..1f7d27e1ab0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/media-fragments.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/media-fragments.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","132":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y tB uB","132":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"I j J D E F A B C K L G M N","132":"0 1 2 3 4 5 6 7 8 9 O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j yB lB zB","132":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","132":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"lB CC qB DC EC FC","132":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","132":"H bC cC"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","132":"U"},L:{"132":"H"},M:{"132":"T"},N:{"132":"A B"},O:{"2":"dC"},P:{"2":"I eC","132":"fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"132":"rC"}},B:2,C:"Media Fragments"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","132":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","132":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"I p J D E F A B C K L G M N","132":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p 9B uB AC","132":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","132":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"uB MC 3B NC OC PC","132":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B","132":"H lC mC"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","132":"c"},L:{"132":"H"},M:{"132":"b"},N:{"132":"A B"},O:{"132":"nC"},P:{"2":"I oC","132":"pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"132":"wB"},R:{"132":"0C"},S:{"132":"1C"}},B:2,C:"Media Fragments"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/media-session-api.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/media-session-api.js deleted file mode 100644 index a429363eea2..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/media-session-api.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB"},E:{"2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB","16":"L G 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"Media Session API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediacapture-fromelement.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediacapture-fromelement.js index c33c4fa19a9..15eccd2aca3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediacapture-fromelement.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediacapture-fromelement.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","260":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB","324":"GB HB IB JB KB LB MB NB iB OB jB"},E:{"2":"I j J D E F A yB lB zB 0B 1B 2B mB","132":"B C K L G fB gB 3B 4B 5B nB oB 6B"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","324":"1 2 3 4 5 6 7 8 9 AB BB CB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"260":"T"},N:{"2":"A B"},O:{"132":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I","132":"eC fC gC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"260":"rC"}},B:5,C:"Media Capture from DOM Elements API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB 6B 7B","260":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","324":"MB NB OB PB QB RB SB TB pB UB qB"},E:{"2":"I p J D E F A 9B uB AC BC CC DC vB","132":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","324":"7 8 9 AB BB CB DB EB FB GB HB IB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"260":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I","132":"oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"260":"1C"}},B:5,C:"Media Capture from DOM Elements API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediarecorder.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediarecorder.js index 5e0c443aafd..c69c66e5d2d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediarecorder.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediarecorder.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB","194":"CB DB"},E:{"1":"G 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB","322":"K L gB 3B"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x y 7B 8B 9B AC fB pB BC gB","194":"0 z"},G:{"1":"UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC","578":"NC OC PC QC RC SC TC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:5,C:"MediaRecorder API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB","194":"IB JB"},E:{"1":"G EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB","322":"K L mB wB"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","194":"5 6"},G:{"1":"eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC","578":"XC YC ZC aC bC cC dC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"MediaRecorder API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediasource.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediasource.js index 6497fd16f45..2f3e17a7f17 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediasource.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mediasource.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","132":"B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p tB uB","66":"0 1 2 3 4 5 6 q r s t u v w x y z"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M","33":"o p q r s t u v","66":"N O k l m n"},E:{"1":"E F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC","260":"PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H cC","2":"hB I XC YC ZC aC qB bC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"iC mB jC kC lC mC nC oC","2":"I eC fC gC hC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"Media Source Extensions"}; +module.exports={A:{A:{"2":"J D E F A 4B","132":"B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v 6B 7B","66":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M","33":"0 1 u v w x y z","66":"N O q r s t"},E:{"1":"E F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC","260":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H mC","2":"oB I hC iC jC kC 3B lC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"Media Source Extensions"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/menu.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/menu.js index 5f6d3f5dc8b..6874e315660 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/menu.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/menu.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D tB uB","132":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V","450":"W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","66":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C G M N O k l m n o p q r s t u v w x y z CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","66":"0 1 2 3 4 5 6 7 8 9 AB BB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"450":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Context menu item (menuitem element)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB I p J D 6B 7B","132":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T","450":"U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","66":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 F B C G M N O q r s t u v w x y z IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","66":"6 7 8 9 AB BB CB DB EB FB GB HB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"450":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Context menu item (menuitem element)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/meta-theme-color.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/meta-theme-color.js index 134dcea5821..7a50ec8253b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/meta-theme-color.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/meta-theme-color.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","132":"ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","258":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB"},E:{"1":"G 5B nB oB 6B","2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B 4B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"513":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I","16":"eC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"theme-color Meta Tag"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z","132":"fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","258":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB"},E:{"1":"G FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB EC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"513":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I","16":"oC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:1,C:"theme-color Meta Tag"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/meter.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/meter.js index b3e3e48c787..9bac7a0efc2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/meter.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/meter.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","2":"F 7B 8B 9B AC"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"meter element"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","2":"F HC IC JC KC"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"meter element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/midi.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/midi.js index ae799d4ec36..886be95a36e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/midi.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/midi.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"Web MIDI API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Web MIDI API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/minmaxwh.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/minmaxwh.js index c7cdb43824f..5401d81560b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/minmaxwh.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/minmaxwh.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","8":"J rB","129":"D","257":"E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"CSS min/max-width/height"}; +module.exports={A:{A:{"1":"F A B","8":"J 4B","129":"D","257":"E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS min/max-width/height"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mp3.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mp3.js index 1b08775aa02..f7243f15afc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mp3.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mp3.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","132":"I j J D E F A B C K L G M N O k l m tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","2":"XC YC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"MP3 audio format"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","132":"I p J D E F A B C K L G M N O q r s 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","2":"hC iC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"MP3 audio format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mpeg-dash.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mpeg-dash.js index 99e6d4d457c..eeeaa13b871 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mpeg-dash.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mpeg-dash.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O","2":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","386":"m n"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"Dynamic Adaptive Streaming over HTTP (MPEG-DASH)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O","2":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","386":"s t"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"Dynamic Adaptive Streaming over HTTP (MPEG-DASH)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mpeg4.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mpeg4.js index dfa8905121f..af5643ebf91 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mpeg4.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mpeg4.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l tB uB","4":"m n o p q r s t u v w x y z"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H bC cC","4":"hB I XC YC aC qB","132":"ZC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"260":"T"},N:{"1":"A B"},O:{"4":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"MPEG-4/H.264 video format"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r 6B 7B","4":"0 1 2 3 4 5 s t u v w x y z"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H lC mC","4":"oB I hC iC kC 3B","132":"jC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"260":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"MPEG-4/H.264 video format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/multibackgrounds.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/multibackgrounds.js index 68aac10058f..6718698c010 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/multibackgrounds.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/multibackgrounds.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i uB","2":"sB hB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS3 Multiple backgrounds"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 7B","2":"5B oB 6B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS3 Multiple backgrounds"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/multicolumn.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/multicolumn.js index 3cbca7351e6..81725478960 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/multicolumn.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/multicolumn.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O","516":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"132":"HB IB JB KB LB MB NB iB OB jB PB QB U","164":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB tB uB","516":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c","1028":"d e f g T h H i"},D:{"420":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB","516":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","132":"F 2B","164":"D E 1B","420":"I j J yB lB zB 0B"},F:{"1":"C fB pB BC gB","2":"F B 7B 8B 9B AC","420":"0 1 G M N O k l m n o p q r s t u v w x y z","516":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","132":"HC IC","164":"E FC GC","420":"lB CC qB DC EC"},H:{"1":"WC"},I:{"420":"hB I XC YC ZC aC qB bC cC","516":"H"},J:{"420":"D A"},K:{"1":"C fB pB gB","2":"A B","516":"U"},L:{"516":"H"},M:{"516":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","420":"I"},Q:{"132":"pC"},R:{"132":"qC"},S:{"164":"rC"}},B:4,C:"CSS3 Multiple column layout"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O","516":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"132":"NB OB PB QB RB SB TB pB UB qB VB WB c","164":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB 6B 7B","516":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","1028":"d e f g h i j k l m n o b H sB tB"},D:{"420":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB","516":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","132":"F DC","164":"D E CC","420":"I p J 9B uB AC BC"},F:{"1":"C lB 2B LC mB","2":"F B HC IC JC KC","420":"0 1 2 3 4 5 6 7 G M N O q r s t u v w x y z","516":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","132":"RC SC","164":"E PC QC","420":"uB MC 3B NC OC"},H:{"1":"gC"},I:{"420":"oB I hC iC jC kC 3B lC mC","516":"H"},J:{"420":"D A"},K:{"1":"C lB 2B mB","2":"A B","516":"c"},L:{"516":"H"},M:{"516":"b"},N:{"1":"A B"},O:{"516":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","420":"I"},Q:{"516":"wB"},R:{"516":"0C"},S:{"164":"1C"}},B:4,C:"CSS3 Multiple column layout"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mutation-events.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mutation-events.js index 46c92fe2c74..b73eb8df5d3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mutation-events.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mutation-events.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","260":"F A B"},B:{"132":"P Q R S V W X Y Z a b c d e f g T h H i","260":"C K L G M N O"},C:{"2":"sB hB I j tB uB","260":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"16":"I j J D E F A B C K L","132":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"16":"yB lB","132":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"C BC gB","2":"F 7B 8B 9B AC","16":"B fB pB","132":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"16":"lB CC","132":"E qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"16":"XC YC","132":"hB I H ZC aC qB bC cC"},J:{"132":"D A"},K:{"1":"C gB","2":"A","16":"B fB pB","132":"U"},L:{"132":"H"},M:{"260":"T"},N:{"260":"A B"},O:{"132":"dC"},P:{"132":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"132":"pC"},R:{"132":"qC"},S:{"260":"rC"}},B:5,C:"Mutation events"}; +module.exports={A:{A:{"2":"J D E 4B","260":"F A B"},B:{"132":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K L G M N O"},C:{"2":"5B oB I p 6B 7B","260":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"16":"I p J D E F A B C K L","132":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"16":"9B uB","132":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"C LC mB","2":"F HC IC JC KC","16":"B lB 2B","132":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"16":"uB MC","132":"E 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"16":"hC iC","132":"oB I H jC kC 3B lC mC"},J:{"132":"D A"},K:{"1":"C mB","2":"A","16":"B lB 2B","132":"c"},L:{"132":"H"},M:{"260":"b"},N:{"260":"A B"},O:{"132":"nC"},P:{"132":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"132":"wB"},R:{"132":"0C"},S:{"260":"1C"}},B:5,C:"Mutation events"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mutationobserver.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mutationobserver.js index 753ef512f11..691519fec79 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mutationobserver.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/mutationobserver.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E rB","8":"F A"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N","33":"O k l m n o p q r"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","33":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC","33":"EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB XC YC ZC","8":"I aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","8":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Mutation Observer"}; +module.exports={A:{A:{"1":"B","2":"J D E 4B","8":"F A"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N","33":"O q r s t u v w x"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","33":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","33":"OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB hC iC jC","8":"I kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","8":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Mutation Observer"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/namevalue-storage.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/namevalue-storage.js index 2473ec292dd..74e8d3bc402 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/namevalue-storage.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/namevalue-storage.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"E F A B","2":"rB","8":"J D"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","4":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Web Storage - name/value pairs"}; +module.exports={A:{A:{"1":"E F A B","2":"4B","8":"J D"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","4":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Web Storage - name/value pairs"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/native-filesystem-api.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/native-filesystem-api.js index 745149011e8..77217b254aa 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/native-filesystem-api.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/native-filesystem-api.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","194":"P Q R S V W","260":"X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB","194":"aB bB cB dB eB P Q R S V W","260":"X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B","4":"nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB 7B 8B 9B AC fB pB BC gB","194":"PB QB U RB SB TB UB VB WB XB","260":"YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC","4":"nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"File System Access API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","194":"P Q R S T U","260":"V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB","194":"gB hB iB jB kB P Q R S T U","260":"V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC","516":"xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB HC IC JC KC lB 2B LC mB","194":"VB WB c XB YB ZB aB bB cB dB","260":"eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC","516":"xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"File System Access API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/nav-timing.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/nav-timing.js index b13a14638ab..2c2d0e50ad7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/nav-timing.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/nav-timing.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j","33":"J D E F A B C"},E:{"1":"E F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"I H aC qB bC cC","2":"hB XC YC ZC"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"Navigation Timing API"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p","33":"J D E F A B C"},E:{"1":"E F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"I H kC 3B lC mC","2":"oB hC iC jC"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"Navigation Timing API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/navigator-language.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/navigator-language.js deleted file mode 100644 index 9e729f745a7..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/navigator-language.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G"},C:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w tB uB"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"16":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"16":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"16":"pC"},R:{"16":"qC"},S:{"1":"rC"}},B:2,C:"Navigator Language API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/netinfo.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/netinfo.js index b7517cb6d74..f06060ab321 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/netinfo.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/netinfo.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","1028":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB","1028":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB 7B 8B 9B AC fB pB BC gB","1028":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"XC bC cC","132":"hB I YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","132":"I","516":"eC fC gC"},Q:{"1":"pC"},R:{"516":"qC"},S:{"260":"rC"}},B:7,C:"Network Information API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","1028":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB","1028":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB HC IC JC KC lB 2B LC mB","1028":"JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"hC lC mC","132":"oB I iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","132":"I","516":"oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"260":"1C"}},B:7,C:"Network Information API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/notifications.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/notifications.js index 51b71d28409..37df9d97615 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/notifications.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/notifications.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K"},C:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I","36":"j J D E F A B C K L G M N O k l m"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","36":"H bC cC"},J:{"1":"A","2":"D"},K:{"2":"A B C fB pB gB","36":"U"},L:{"513":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"36":"I","258":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"258":"qC"},S:{"1":"rC"}},B:1,C:"Web Notifications"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K"},C:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I","36":"p J D E F A B C K L G M N O q r s"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B","36":"H lC mC"},J:{"1":"A","2":"D"},K:{"2":"A B C lB 2B mB","36":"c"},L:{"513":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"36":"I","258":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"258":"0C"},S:{"1":"1C"}},B:1,C:"Web Notifications"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-entries.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-entries.js index 3c9ada4acd3..62d7d7aeb35 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-entries.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-entries.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K"},C:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB tB uB"},D:{"1":"JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D","16":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I eC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:6,C:"Object.entries"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K"},C:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB 6B 7B"},D:{"1":"PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D","16":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Object.entries"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-fit.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-fit.js index 27050f4794d..2168df2f874 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-fit.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-fit.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G","260":"M N O"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B","132":"E F 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F G M N O 7B 8B 9B","33":"B C AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC","132":"E GC HC IC"},H:{"33":"WC"},I:{"1":"H cC","2":"hB I XC YC ZC aC qB bC"},J:{"2":"D A"},K:{"1":"U","2":"A","33":"B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS3 object-fit/object-position"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G","260":"M N O"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC","132":"E F CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F G M N O HC IC JC","33":"B C KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC","132":"E QC RC SC"},H:{"33":"gC"},I:{"1":"H mC","2":"oB I hC iC jC kC 3B lC"},J:{"2":"D A"},K:{"1":"c","2":"A","33":"B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS3 object-fit/object-position"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-observe.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-observe.js index d4982489e83..03ff7d553bb 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-observe.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-observe.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB","2":"0 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 o p q r s t u v w x y z","2":"2 3 4 5 6 7 8 9 F B C G M N O k l m n AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"I","2":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:7,C:"Object.observe data binding"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB","2":"0 1 2 3 4 5 6 I p J D E F A B C K L G M N O q r s t u v w x y z LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 u v w x y z","2":"8 9 F B C G M N O q r s t AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"I","2":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Object.observe data binding"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-values.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-values.js index 67f390468cb..ba96ee62d3a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-values.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/object-values.js @@ -1 +1 @@ -module.exports={A:{A:{"8":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K"},C:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","8":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB tB uB"},D:{"1":"JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","8":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","8":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","8":"0 1 2 3 4 5 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","8":"E lB CC qB DC EC FC GC HC IC JC"},H:{"8":"WC"},I:{"1":"H","8":"hB I XC YC ZC aC qB bC cC"},J:{"8":"D A"},K:{"1":"U","8":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"8":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","8":"I eC"},Q:{"1":"pC"},R:{"8":"qC"},S:{"1":"rC"}},B:6,C:"Object.values method"}; +module.exports={A:{A:{"8":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K"},C:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","8":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB 6B 7B"},D:{"1":"PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","8":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","8":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","8":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"8":"gC"},I:{"1":"H","8":"oB I hC iC jC kC 3B lC mC"},J:{"8":"D A"},K:{"1":"c","8":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"8":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","8":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Object.values method"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/objectrtc.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/objectrtc.js index 18e62782cd2..ba8fffa3ec2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/objectrtc.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/objectrtc.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O","2":"C P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D","130":"A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"Object RTC (ORTC) API for WebRTC"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O","2":"C P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D","130":"A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"Object RTC (ORTC) API for WebRTC"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/offline-apps.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/offline-apps.js index c4f4f759666..4157ea151d4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/offline-apps.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/offline-apps.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"F rB","8":"J D E"},B:{"1":"C K L G M N O P Q R S V","2":"W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S tB uB","2":"V W X Y Z a b c d e f g T h H i","4":"hB","8":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V","2":"W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","8":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB AC fB pB BC gB","2":"F ZB aB bB cB dB eB P Q R kB S 7B","8":"8B 9B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I XC YC ZC aC qB bC cC","2":"H"},J:{"1":"D A"},K:{"1":"B C fB pB gB","2":"A U"},L:{"2":"H"},M:{"2":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:7,C:"Offline web applications"}; +module.exports={A:{A:{"1":"A B","2":"F 4B","8":"J D E"},B:{"1":"C K L G M N O P Q R S T","2":"U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S 6B 7B","2":"T U V W X Y Z a d e f g h i j k l m n o b H sB tB","4":"oB","8":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T","2":"U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB KC lB 2B LC mB","2":"F fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC","8":"IC JC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I hC iC jC kC 3B lC mC","2":"H"},J:{"1":"D A"},K:{"1":"B C lB 2B mB","2":"A c"},L:{"2":"H"},M:{"2":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"2":"0C"},S:{"1":"1C"}},B:7,C:"Offline web applications"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/offscreencanvas.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/offscreencanvas.js index 193a6ef509c..9dae4dfaa56 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/offscreencanvas.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/offscreencanvas.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","194":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","322":"NB iB OB jB PB QB U RB SB TB UB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","322":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"194":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mB jC kC lC mC nC oC","2":"I eC fC gC hC iC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"194":"rC"}},B:1,C:"OffscreenCanvas"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB 6B 7B","194":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b"},D:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB","322":"TB pB UB qB VB WB c XB YB ZB aB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB HC IC JC KC lB 2B LC mB","322":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"194":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC sC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"194":"1C"}},B:1,C:"OffscreenCanvas"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ogg-vorbis.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ogg-vorbis.js index c234e3514c6..37ecbae6673 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ogg-vorbis.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ogg-vorbis.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B","132":"G 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"A","2":"D"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Ogg Vorbis audio format"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB","132":"G EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"A","2":"D"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Ogg Vorbis audio format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ogv.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ogv.js index 43a672163e4..356ce1dff01 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ogv.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ogv.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","8":"F A B"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","8":"C K L G M"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"1":"T"},N:{"8":"A B"},O:{"1":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:6,C:"Ogg/Theora video format"}; +module.exports={A:{A:{"2":"J D E 4B","8":"F A B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","8":"C K L G M"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"1":"b"},N:{"8":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"2":"0C"},S:{"1":"1C"}},B:6,C:"Ogg/Theora video format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ol-reversed.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ol-reversed.js index b7ea5ac7a86..16bcc5dcc95 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ol-reversed.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ol-reversed.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G","16":"M N O k"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","16":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC fB pB BC","16":"C"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Reversed attribute of ordered lists"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G","16":"M N O q"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","16":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC lB 2B LC","16":"C"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Reversed attribute of ordered lists"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/once-event-listener.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/once-event-listener.js index 239df6bcacc..bf31eebc08a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/once-event-listener.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/once-event-listener.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G"},C:{"1":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB tB uB"},D:{"1":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I eC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"\"once\" event listener option"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G"},C:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB 6B 7B"},D:{"1":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"\"once\" event listener option"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/online-status.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/online-status.js index b5132b5f914..0ab0108e19e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/online-status.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/online-status.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D rB","260":"E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB","516":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},D:{"1":"0 1 2 3 4 5 6 7 8 9 L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC","4":"gB"},G:{"1":"E qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"A","132":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Online/offline status"}; +module.exports={A:{A:{"1":"F A B","2":"J D 4B","260":"E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB","516":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC","4":"mB"},G:{"1":"E 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"A","132":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Online/offline status"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/opus.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/opus.js index 45ffa227008..c4fe1444ec2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/opus.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/opus.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x"},E:{"2":"I j J D E F A yB lB zB 0B 1B 2B mB","132":"B C K L G fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC","132":"LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Opus"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L 6B 7B"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"2":"I p J D E F A 9B uB AC BC CC DC vB","132":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC","132":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Opus"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/orientation-sensor.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/orientation-sensor.js index 1086540b06a..f44f8a772fa 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/orientation-sensor.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/orientation-sensor.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","194":"NB iB OB jB PB QB U RB SB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"Orientation Sensor"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB","194":"TB pB UB qB VB WB c XB YB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"Orientation Sensor"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/outline.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/outline.js index 86938d58332..63752c1a5e6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/outline.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/outline.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D rB","260":"E","388":"F A B"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","388":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC","129":"gB","260":"F B 7B 8B 9B AC fB pB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"C U gB","260":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"388":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS outline properties"}; +module.exports={A:{A:{"2":"J D 4B","260":"E","388":"F A B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","388":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC","129":"mB","260":"F B HC IC JC KC lB 2B"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"C c mB","260":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"388":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS outline properties"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pad-start-end.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pad-start-end.js index 775e9018632..699bffce90f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pad-start-end.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pad-start-end.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L"},C:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB tB uB"},D:{"1":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","2":"I eC fC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:6,C:"String.prototype.padStart(), String.prototype.padEnd()"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L"},C:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB 6B 7B"},D:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"String.prototype.padStart(), String.prototype.padEnd()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/page-transition-events.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/page-transition-events.js index d49661a9290..e1023cab4f2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/page-transition-events.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/page-transition-events.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"PageTransitionEvent"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"PageTransitionEvent"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pagevisibility.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pagevisibility.js index ee42942206d..12c66362e1a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pagevisibility.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pagevisibility.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F tB uB","33":"A B C K L G M N"},D:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K","33":"L G M N O k l m n o p q r s t u v w x"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B C 7B 8B 9B AC fB pB BC","33":"G M N O k"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB","33":"bC cC"},J:{"1":"A","2":"D"},K:{"1":"U gB","2":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","33":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"Page Visibility"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F 6B 7B","33":"A B C K L G M N"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K","33":"0 1 2 3 L G M N O q r s t u v w x y z"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B C HC IC JC KC lB 2B LC","33":"G M N O q"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B","33":"lC mC"},J:{"1":"A","2":"D"},K:{"1":"c mB","2":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","33":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"Page Visibility"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/passive-event-listener.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/passive-event-listener.js index 5ba58f94167..7dd75e08ab0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/passive-event-listener.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/passive-event-listener.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB tB uB"},D:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"Passive event listeners"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB 6B 7B"},D:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"Passive event listeners"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/passwordrules.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/passwordrules.js index 5b8c2a584b7..d83fb5861dd 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/passwordrules.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/passwordrules.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","16":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h tB uB","16":"H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i","16":"vB wB xB"},E:{"1":"C K gB","2":"I j J D E F A B yB lB zB 0B 1B 2B mB fB","16":"L G 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB 7B 8B 9B AC fB pB BC gB","16":"IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"16":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","16":"H"},J:{"2":"D","16":"A"},K:{"2":"A B C fB pB gB","16":"U"},L:{"16":"H"},M:{"16":"T"},N:{"2":"A","16":"B"},O:{"16":"dC"},P:{"2":"I eC fC","16":"gC hC iC mB jC kC lC mC nC oC"},Q:{"16":"pC"},R:{"16":"qC"},S:{"2":"rC"}},B:1,C:"Password Rules"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","16":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H 6B 7B","16":"sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","16":"sB tB 8B"},E:{"1":"C K mB","2":"I p J D E F A B 9B uB AC BC CC DC vB lB","16":"L G wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB HC IC JC KC lB 2B LC mB","16":"OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"16":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","16":"H"},J:{"2":"D","16":"A"},K:{"2":"A B C lB 2B mB","16":"c"},L:{"16":"H"},M:{"16":"b"},N:{"2":"A","16":"B"},O:{"16":"nC"},P:{"2":"I oC pC","16":"qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"16":"wB"},R:{"16":"0C"},S:{"2":"1C"}},B:1,C:"Password Rules"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/path2d.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/path2d.js index c22892c9329..37420e548ef 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/path2d.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/path2d.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K","132":"L G M N O"},C:{"1":"DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v tB uB","132":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB"},D:{"1":"UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","132":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B","132":"E F 1B"},F:{"1":"KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n 7B 8B 9B AC fB pB BC gB","132":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC","16":"E","132":"GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"132":"dC"},P:{"1":"mB jC kC lC mC nC oC","132":"I eC fC gC hC iC"},Q:{"132":"pC"},R:{"132":"qC"},S:{"1":"rC"}},B:1,C:"Path2D"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K","132":"L G M N O"},C:{"1":"JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","132":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB"},D:{"1":"aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 I p J D E F A B C K L G M N O q r s t u v w x y z","132":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC","132":"E F CC"},F:{"1":"QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t HC IC JC KC lB 2B LC mB","132":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC","16":"E","132":"QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"vB tC uC vC wC xC nB yC zC","132":"I oC pC qC rC sC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Path2D"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/payment-request.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/payment-request.js index 6cc237001be..51b25b37409 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/payment-request.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/payment-request.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K","322":"L","8196":"G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB tB uB","4162":"KB LB MB NB iB OB jB PB QB U RB","16452":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB","194":"IB JB KB LB MB NB","1090":"iB OB","8196":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB"},E:{"1":"K L G gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B","514":"A B mB","8196":"C fB"},F:{"1":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","194":"5 6 7 8 9 AB BB CB","8196":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB"},G:{"1":"OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC","514":"JC KC LC","8196":"MC NC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"2049":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"kC lC mC nC oC","2":"I","8196":"eC fC gC hC iC mB jC"},Q:{"8196":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"Payment Request API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K","322":"L","8196":"G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB 6B 7B","4162":"QB RB SB TB pB UB qB VB WB c XB","16452":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB","194":"OB PB QB RB SB TB","1090":"pB UB","8196":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB"},E:{"1":"K L G mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC","514":"A B vB","8196":"C lB"},F:{"1":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB HC IC JC KC lB 2B LC mB","194":"BB CB DB EB FB GB HB IB","8196":"JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB"},G:{"1":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC","514":"TC UC VC","8196":"WC XC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"2049":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"uC vC wC xC nB yC zC","2":"I","8196":"oC pC qC rC sC vB tC"},Q:{"8196":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:2,C:"Payment Request API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pdf-viewer.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pdf-viewer.js index 0cd76a4abd2..d7f57e4de86 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pdf-viewer.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pdf-viewer.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","132":"B"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","16":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC fB pB BC"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"16":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"Built-in PDF viewer"}; +module.exports={A:{A:{"2":"J D E F A 4B","132":"B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","16":"C K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC lB 2B LC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"16":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"16":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"Built-in PDF viewer"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/permissions-api.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/permissions-api.js index 2445d99cb0b..f403d055b88 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/permissions-api.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/permissions-api.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB tB uB"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:7,C:"Permissions API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB 6B 7B"},D:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB"},E:{"1":"nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Permissions API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/permissions-policy.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/permissions-policy.js index bbff0088f99..4521c0d7269 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/permissions-policy.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/permissions-policy.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","258":"P Q R S V W","322":"X Y","388":"Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB tB uB","258":"aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB","258":"OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W","322":"X Y","388":"Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B yB lB zB 0B 1B 2B mB","258":"C K L G fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB 7B 8B 9B AC fB pB BC gB","258":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB","322":"YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC","258":"MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","258":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","258":"U"},L:{"388":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC","258":"hC iC mB jC kC lC mC nC oC"},Q:{"258":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"Permissions Policy"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","258":"P Q R S T U","322":"V W","388":"X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB 6B 7B","258":"gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB","258":"UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U","322":"V W","388":"X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B 9B uB AC BC CC DC vB","258":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB HC IC JC KC lB 2B LC mB","258":"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB","322":"eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC","258":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","258":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","258":"c"},L:{"388":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC","258":"rC sC vB tC uC vC wC xC nB yC zC"},Q:{"258":"wB"},R:{"388":"0C"},S:{"2":"1C"}},B:5,C:"Permissions Policy"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/picture-in-picture.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/picture-in-picture.js index f528c04c1f1..8b968804b76 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/picture-in-picture.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/picture-in-picture.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB tB uB","132":"YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","1090":"TB","1412":"XB","1668":"UB VB WB"},D:{"1":"WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB","2114":"VB"},E:{"1":"L G 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B","4100":"A B C K mB fB gB"},F:{"1":"ZB aB bB cB dB eB P Q R kB S","2":"0 1 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","8196":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB"},G:{"1":"TC UC VC nB oB","2":"E lB CC qB DC EC FC GC","4100":"HC IC JC KC LC MC NC OC PC QC RC SC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"16388":"H"},M:{"16388":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Picture-in-Picture"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB 6B 7B","132":"eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","1090":"ZB","1412":"dB","1668":"aB bB cB"},D:{"1":"cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB","2114":"bB"},E:{"1":"L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC","4100":"A B C K vB lB mB"},F:{"1":"fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","8196":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB"},G:{"1":"dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC","4100":"RC SC TC UC VC WC XC YC ZC aC bC cC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"16388":"H"},M:{"16388":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"Picture-in-Picture"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/picture.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/picture.js index 7dcf0401a46..95a1e757cdc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/picture.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/picture.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y tB uB","578":"0 1 2 z"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","194":"2"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o 7B 8B 9B AC fB pB BC gB","322":"p"},G:{"1":"IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Picture element"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","578":"5 6 7 8"},D:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 I p J D E F A B C K L G M N O q r s t u v w x y z","194":"8"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u HC IC JC KC lB 2B LC mB","322":"v"},G:{"1":"SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Picture element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ping.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ping.js index e342c74b064..f96d3f99f73 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ping.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ping.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M"},C:{"2":"sB","194":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"194":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"194":"rC"}},B:1,C:"Ping attribute"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M"},C:{"2":"5B","194":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"194":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"194":"1C"}},B:1,C:"Ping attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/png-alpha.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/png-alpha.js index 5fb78af0d74..d8b57682521 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/png-alpha.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/png-alpha.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"D E F A B","2":"rB","8":"J"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"PNG alpha transparency"}; +module.exports={A:{A:{"1":"D E F A B","2":"4B","8":"J"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"PNG alpha transparency"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointer-events.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointer-events.js index fd47603d361..5df26a89c2d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointer-events.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointer-events.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i uB","2":"sB hB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:7,C:"CSS pointer-events (for HTML)"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 7B","2":"5B oB 6B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:7,C:"CSS pointer-events (for HTML)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointer.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointer.js index 175a79b9be6..afb115e8648 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointer.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointer.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F rB","164":"A"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j tB uB","8":"0 1 2 3 4 5 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","328":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB"},D:{"1":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m","8":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB","584":"HB IB JB"},E:{"1":"K L G 3B 4B 5B nB oB 6B","2":"I j J yB lB zB","8":"D E F A B C 0B 1B 2B mB fB","1096":"gB"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","8":"0 1 2 3 G M N O k l m n o p q r s t u v w x y z","584":"4 5 6"},G:{"1":"QC RC SC TC UC VC nB oB","8":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC","6148":"PC"},H:{"2":"WC"},I:{"1":"H","8":"hB I XC YC ZC aC qB bC cC"},J:{"8":"D A"},K:{"1":"U","2":"A","8":"B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","36":"A"},O:{"8":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"eC","8":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"328":"rC"}},B:2,C:"Pointer events"}; +module.exports={A:{A:{"1":"B","2":"J D E F 4B","164":"A"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B","8":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB","328":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB"},D:{"1":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s","8":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","584":"NB OB PB"},E:{"1":"K L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC","8":"D E F A B C BC CC DC vB lB","1096":"mB"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","8":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z","584":"AB BB CB"},G:{"1":"aC bC cC dC eC fC xB yB zB 0B nB 1B","8":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC","6148":"ZC"},H:{"2":"gC"},I:{"1":"H","8":"oB I hC iC jC kC 3B lC mC"},J:{"8":"D A"},K:{"1":"c","2":"A","8":"B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","36":"A"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"oC","8":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"328":"1C"}},B:2,C:"Pointer events"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointerlock.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointerlock.js index 711af320b10..c2073697f9d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointerlock.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/pointerlock.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K tB uB","33":"0 1 2 3 4 5 L G M N O k l m n o p q r s t u v w x y z"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G","33":"0 1 n o p q r s t u v w x y z","66":"M N O k l m"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"G M N O k l m n o"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:2,C:"Pointer Lock API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C"},C:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K 6B 7B","33":"0 1 2 3 4 5 6 7 8 9 L G M N O q r s t u v w x y z AB BB"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G","33":"0 1 2 3 4 5 6 7 t u v w x y z","66":"M N O q r s"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"G M N O q r s t u"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"Pointer Lock API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/portals.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/portals.js index 40cd50b78ea..5dd871c43a2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/portals.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/portals.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V","322":"b c d e f g T h H i","450":"W X Y Z a"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB","194":"bB cB dB eB P Q R S V","322":"X Y Z a b c d e f g T h H i vB wB xB","450":"W"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB 7B 8B 9B AC fB pB BC gB","194":"PB QB U RB SB TB UB VB WB XB YB","322":"ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"450":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Portals"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T","322":"Z a d e f g h i j k l m n o b H","450":"U V W X Y"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB","194":"hB iB jB kB P Q R S T","322":"V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","450":"U"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB HC IC JC KC lB 2B LC mB","194":"VB WB c XB YB ZB aB bB cB dB eB","322":"fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"450":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Portals"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/prefers-color-scheme.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/prefers-color-scheme.js index 20bd006aa6a..adf52f79c49 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/prefers-color-scheme.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/prefers-color-scheme.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB tB uB"},D:{"1":"cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB"},E:{"1":"K L G gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB"},F:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB 7B 8B 9B AC fB pB BC gB"},G:{"1":"PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"kC lC mC nC oC","2":"I eC fC gC hC iC mB jC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"prefers-color-scheme media query"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB 6B 7B"},D:{"1":"iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB"},E:{"1":"K L G mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB"},F:{"1":"VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB HC IC JC KC lB 2B LC mB"},G:{"1":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"uC vC wC xC nB yC zC","2":"I oC pC qC rC sC vB tC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"prefers-color-scheme media query"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/prefers-reduced-motion.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/prefers-reduced-motion.js index a8f29446b80..6793a4e922f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/prefers-reduced-motion.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/prefers-reduced-motion.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB tB uB"},D:{"1":"aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"jC kC lC mC nC oC","2":"I eC fC gC hC iC mB"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"prefers-reduced-motion media query"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB 6B 7B"},D:{"1":"gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"tC uC vC wC xC nB yC zC","2":"I oC pC qC rC sC vB"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"prefers-reduced-motion media query"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/private-class-fields.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/private-class-fields.js deleted file mode 100644 index 8fb1c58ed73..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/private-class-fields.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB"},E:{"1":"G 4B 5B nB oB 6B","2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B"},F:{"1":"PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB 7B 8B 9B AC fB pB BC gB"},G:{"1":"UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"jC kC lC mC nC oC","2":"I eC fC gC hC iC mB"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Private class fields"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/private-methods-and-accessors.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/private-methods-and-accessors.js deleted file mode 100644 index 865aab53e96..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/private-methods-and-accessors.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"V W X Y Z a b c d e f g T h H i","2":"C K L G M N O P Q R S"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S"},E:{"1":"G 4B 5B nB oB 6B","2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B"},F:{"1":"WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB 7B 8B 9B AC fB pB BC gB"},G:{"1":"UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Public class fields"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/progress.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/progress.js index 7f458029ad7..11e74244bcb 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/progress.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/progress.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","2":"F 7B 8B 9B AC"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC","132":"FC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"progress element"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","2":"F HC IC JC KC"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC","132":"PC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"progress element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/promise-finally.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/promise-finally.js index 20e16158fea..0d30e1b57a8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/promise-finally.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/promise-finally.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N"},C:{"1":"NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB tB uB"},D:{"1":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB 7B 8B 9B AC fB pB BC gB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC gC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"Promise.prototype.finally"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N"},C:{"1":"TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB 6B 7B"},D:{"1":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB"},F:{"1":"LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB HC IC JC KC lB 2B LC mB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"Promise.prototype.finally"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/promises.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/promises.js index 84a90f5b149..c3d4f2ab378 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/promises.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/promises.js @@ -1 +1 @@ -module.exports={A:{A:{"8":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","4":"s t","8":"sB hB I j J D E F A B C K L G M N O k l m n o p q r tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","4":"x","8":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w"},E:{"1":"E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","8":"I j J D yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","4":"k","8":"F B C G M N O 7B 8B 9B AC fB pB BC gB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","8":"lB CC qB DC EC FC"},H:{"8":"WC"},I:{"1":"H cC","8":"hB I XC YC ZC aC qB bC"},J:{"8":"D A"},K:{"1":"U","8":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"8":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Promises"}; +module.exports={A:{A:{"8":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","4":"y z","8":"5B oB I p J D E F A B C K L G M N O q r s t u v w x 6B 7B"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","4":"3","8":"0 1 2 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"I p J D 9B uB AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","4":"q","8":"F B C G M N O HC IC JC KC lB 2B LC mB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","8":"uB MC 3B NC OC PC"},H:{"8":"gC"},I:{"1":"H mC","8":"oB I hC iC jC kC 3B lC"},J:{"8":"D A"},K:{"1":"c","8":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"8":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Promises"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/proximity.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/proximity.js index d08d11ff828..2aa0aecfdc4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/proximity.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/proximity.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:4,C:"Proximity API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"1":"1C"}},B:4,C:"Proximity API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/proxy.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/proxy.js index 85756b15337..d9b68546375 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/proxy.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/proxy.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N tB uB"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"3 4 5 6 7 8 9 I j J D E F A B C K L G M N O AB BB CB DB","66":"0 1 2 k l m n o p q r s t u v w x y z"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 F B C q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","66":"G M N O k l m n o p"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:6,C:"Proxy object"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N 6B 7B"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"9 I p J D E F A B C K L G M N O AB BB CB DB EB FB GB HB IB JB","66":"0 1 2 3 4 5 6 7 8 q r s t u v w x y z"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 F B C w x y z HC IC JC KC lB 2B LC mB","66":"G M N O q r s t u v"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Proxy object"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/public-class-fields.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/public-class-fields.js deleted file mode 100644 index c158e8dee34..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/public-class-fields.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB tB uB","4":"WB XB YB ZB aB","132":"VB"},D:{"1":"YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB"},E:{"1":"G 4B 5B nB oB 6B","2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB 3B","260":"L"},F:{"1":"OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB 7B 8B 9B AC fB pB BC gB"},G:{"1":"TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"jC kC lC mC nC oC","2":"I eC fC gC hC iC mB"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Public class fields"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/publickeypinning.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/publickeypinning.js index f23c11f0a7d..c6d03635734 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/publickeypinning.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/publickeypinning.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB","2":"0 1 2 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB","2":"F B C G M N O k SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","4":"o","16":"l m n p"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB","2":"jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"HTTP Public Key Pinning"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB","2":"0 1 2 3 4 5 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB","2":"0 1 2 3 4 5 6 7 8 I p J D E F A B C K L G M N O q r s t u v w x y z eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB","2":"F B C G M N O q YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","4":"u","16":"r s t v"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"I oC pC qC rC sC vB","2":"tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"1":"1C"}},B:6,C:"HTTP Public Key Pinning"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/push-api.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/push-api.js index a501a0fed87..8a515b993f9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/push-api.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/push-api.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"N O","2":"C K L G M","257":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","257":"9 BB CB DB EB FB GB IB JB KB LB MB NB iB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","1281":"AB HB OB"},D:{"2":"0 1 2 3 4 5 6 7 8 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","257":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","388":"9 AB BB CB DB EB"},E:{"2":"I j J D E F yB lB zB 0B 1B","514":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB","2114":"6B"},F:{"2":"0 1 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","16":"2 3 4 5 6","257":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"257":"rC"}},B:5,C:"Push API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"N O","2":"C K L G M","257":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB 6B 7B","257":"FB HB IB JB KB LB MB OB PB QB RB SB TB pB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","1281":"GB NB UB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB","257":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","388":"FB GB HB IB JB KB"},E:{"2":"I p J D E F 9B uB AC BC CC","514":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B","4100":"nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","16":"8 9 AB BB CB","257":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"2":"0C"},S:{"257":"1C"}},B:5,C:"Push API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/queryselector.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/queryselector.js index 2a5d752fa2c..e68a4fbffad 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/queryselector.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/queryselector.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"rB","8":"J D","132":"E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","8":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 8B 9B AC fB pB BC gB","8":"F 7B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"querySelector/querySelectorAll"}; +module.exports={A:{A:{"1":"F A B","2":"4B","8":"J D","132":"E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","8":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a IC JC KC lB 2B LC mB","8":"F HC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"querySelector/querySelectorAll"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/readonly-attr.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/readonly-attr.js index 6a6db8afb00..64ab1c947e4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/readonly-attr.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/readonly-attr.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B","16":"rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","16":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L G M N O k l m n o p q"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F 7B","132":"B C 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB DC EC"},H:{"1":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"U","132":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"257":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"readonly attribute of input and textarea elements"}; +module.exports={A:{A:{"1":"J D E F A B","16":"4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","16":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L G M N O q r s t u v w"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F HC","132":"B C IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B NC OC"},H:{"1":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"c","132":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"257":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"readonly attribute of input and textarea elements"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/referrer-policy.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/referrer-policy.js index d6627fa03ab..8344423b45b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/referrer-policy.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/referrer-policy.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","132":"B"},B:{"1":"P Q R S","132":"C K L G M N O","513":"V W X Y Z a b c d e f g T h H i"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X","2":"0 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","513":"Y Z a b c d e f g T h H i"},D:{"1":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V","2":"I j J D E F A B C K L G M N O k l","260":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB","513":"W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"C fB gB","2":"I j J D yB lB zB 0B","132":"E F A B 1B 2B mB","1025":"K L G 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB","2":"F B C 7B 8B 9B AC fB pB BC gB","513":"ZB aB bB cB dB eB P Q R kB S"},G:{"1":"NC OC PC QC","2":"lB CC qB DC EC FC","132":"E GC HC IC JC KC LC MC","1025":"RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"513":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"Referrer Policy"}; +module.exports={A:{A:{"2":"J D E F A 4B","132":"B"},B:{"1":"P Q R S","132":"C K L G M N O","513":"T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V","2":"0 1 2 3 4 5 6 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","513":"W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T","2":"I p J D E F A B C K L G M N O q r","260":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB","513":"U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"C lB mB","2":"I p J D 9B uB AC BC","132":"E F A B CC DC vB","1025":"K L G wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB","2":"F B C HC IC JC KC lB 2B LC mB","513":"fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"XC YC ZC aC","2":"uB MC 3B NC OC PC","132":"E QC RC SC TC UC VC WC","1025":"bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"513":"H"},M:{"513":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"513":"0C"},S:{"1":"1C"}},B:4,C:"Referrer Policy"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/registerprotocolhandler.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/registerprotocolhandler.js index 6223d2a5a2d..79d978ae8c5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/registerprotocolhandler.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/registerprotocolhandler.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","129":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB"},D:{"2":"I j J D E F A B C","129":"0 1 2 3 4 5 6 7 8 9 K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B 7B 8B 9B AC fB pB","129":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D","129":"A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"Custom protocol handling"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","129":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B"},D:{"2":"I p J D E F A B C","129":"0 1 2 3 4 5 6 7 8 9 K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B HC IC JC KC lB 2B","129":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D","129":"A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:1,C:"Custom protocol handling"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rel-noopener.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rel-noopener.js index 53d65971086..c9684ce2b02 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rel-noopener.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rel-noopener.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB tB uB"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:1,C:"rel=noopener"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB 6B 7B"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"rel=noopener"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rel-noreferrer.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rel-noreferrer.js index c8cea6d335c..757c3360a09 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rel-noreferrer.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rel-noreferrer.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","132":"B"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","16":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L G"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Link type \"noreferrer\""}; +module.exports={A:{A:{"2":"J D E F A 4B","132":"B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","16":"C"},C:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L G"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Link type \"noreferrer\""}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rellist.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rellist.js index 9ac87d07f8a..c0edc9edb2c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rellist.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rellist.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M","132":"N"},C:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u tB uB"},D:{"1":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB","132":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E yB lB zB 0B 1B"},F:{"1":"HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","132":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"132":"dC"},P:{"1":"iC mB jC kC lC mC nC oC","2":"I","132":"eC fC gC hC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:1,C:"relList (DOMTokenList)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M","132":"N"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB","132":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E 9B uB AC BC CC"},F:{"1":"NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","132":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"sC vB tC uC vC wC xC nB yC zC","2":"I","132":"oC pC qC rC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"relList (DOMTokenList)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rem.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rem.js index 8bf21c37b15..27abf31bb4a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rem.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rem.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E rB","132":"F A"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i uB","2":"sB hB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F B 7B 8B 9B AC fB pB"},G:{"1":"E CC qB EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB","260":"DC"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"C U gB","2":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"rem (root em) units"}; +module.exports={A:{A:{"1":"B","2":"J D E 4B","132":"F A"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 7B","2":"5B oB 6B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F B HC IC JC KC lB 2B"},G:{"1":"E MC 3B OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB","260":"NC"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"C c mB","2":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"rem (root em) units"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/requestanimationframe.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/requestanimationframe.js index 2c3c1cfb789..09116732e68 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/requestanimationframe.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/requestanimationframe.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","33":"B C K L G M N O k l m n","164":"I j J D E F A"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F","33":"n o","164":"O k l m","420":"A B C K L G M N"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","33":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC","33":"EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"requestAnimationFrame"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","33":"B C K L G M N O q r s t","164":"I p J D E F A"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F","33":"t u","164":"O q r s","420":"A B C K L G M N"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","33":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","33":"OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"requestAnimationFrame"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/requestidlecallback.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/requestidlecallback.js index 6dd18331d5f..8638bfc7482 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/requestidlecallback.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/requestidlecallback.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB tB uB","194":"IB JB"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB"},E:{"2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB","322":"L G 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w x y 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC","322":"SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"requestIdleCallback"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB 6B 7B","194":"OB PB"},D:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB"},E:{"2":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB","322":"L G wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC","322":"cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"requestIdleCallback"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/resizeobserver.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/resizeobserver.js index 519199e4f05..49d1123c846 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/resizeobserver.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/resizeobserver.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB tB uB"},D:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB","194":"JB KB LB MB NB iB OB jB PB QB"},E:{"1":"L G 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB gB","66":"K"},F:{"1":"HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","194":"6 7 8 9 AB BB CB DB EB FB GB"},G:{"1":"SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"iC mB jC kC lC mC nC oC","2":"I eC fC gC hC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Resize Observer"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB 6B 7B"},D:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB","194":"PB QB RB SB TB pB UB qB VB WB"},E:{"1":"L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB mB","66":"K"},F:{"1":"NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB HC IC JC KC lB 2B LC mB","194":"CB DB EB FB GB HB IB JB KB LB MB"},G:{"1":"cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Resize Observer"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/resource-timing.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/resource-timing.js index 651bfd6dc46..b1065569fed 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/resource-timing.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/resource-timing.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v tB uB","194":"w x y z"},D:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB","260":"B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"Resource Timing"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"2 3 4 5"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB","260":"B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Resource Timing"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rest-parameters.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rest-parameters.js index e624a93948b..1025e564e9c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rest-parameters.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rest-parameters.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L tB uB"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","194":"9 AB BB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v 7B 8B 9B AC fB pB BC gB","194":"w x y"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Rest parameters"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L 6B 7B"},D:{"1":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB","194":"FB GB HB"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","194":"2 3 4"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Rest parameters"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rtcpeerconnection.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rtcpeerconnection.js index 8527b1aa148..e0377f0a864 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rtcpeerconnection.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/rtcpeerconnection.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L","516":"G M N O"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m tB uB","33":"0 1 2 3 4 5 6 7 8 n o p q r s t u v w x y z"},D:{"1":"LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n","33":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB"},F:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 O k l m n o p q r s t u v w x y z"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D","130":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"33":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"33":"pC"},R:{"33":"qC"},S:{"1":"rC"}},B:5,C:"WebRTC Peer-to-peer connections"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L","516":"G M N O"},C:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B","33":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB"},D:{"1":"RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t","33":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB"},F:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D","130":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"33":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"WebRTC Peer-to-peer connections"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ruby.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ruby.js index b28f0b6ce9f..90605f31583 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ruby.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ruby.js @@ -1 +1 @@ -module.exports={A:{A:{"4":"J D E F A B rB"},B:{"4":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","8":"0 1 2 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"4":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","8":"I"},E:{"4":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","8":"I yB lB"},F:{"4":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","8":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"4":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","8":"lB CC qB"},H:{"8":"WC"},I:{"4":"hB I H aC qB bC cC","8":"XC YC ZC"},J:{"4":"A","8":"D"},K:{"4":"U","8":"A B C fB pB gB"},L:{"4":"H"},M:{"1":"T"},N:{"4":"A B"},O:{"4":"dC"},P:{"4":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"4":"pC"},R:{"4":"qC"},S:{"1":"rC"}},B:1,C:"Ruby annotation"}; +module.exports={A:{A:{"4":"J D E F A B 4B"},B:{"4":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","8":"0 1 2 3 4 5 6 7 8 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"4":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","8":"I"},E:{"4":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"I 9B uB"},F:{"4":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","8":"F B C HC IC JC KC lB 2B LC mB"},G:{"4":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","8":"uB MC 3B"},H:{"8":"gC"},I:{"4":"oB I H kC 3B lC mC","8":"hC iC jC"},J:{"4":"A","8":"D"},K:{"4":"c","8":"A B C lB 2B mB"},L:{"4":"H"},M:{"1":"b"},N:{"4":"A B"},O:{"4":"nC"},P:{"4":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"4":"wB"},R:{"4":"0C"},S:{"1":"1C"}},B:1,C:"Ruby annotation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/run-in.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/run-in.js index e986c1aaa56..24ca2c82939 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/run-in.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/run-in.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"E F A B","2":"J D rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w","2":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J zB","2":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"0B","129":"I yB lB"},F:{"1":"F B C G M N O 7B 8B 9B AC fB pB BC gB","2":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"CC qB DC EC FC","2":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","129":"lB"},H:{"1":"WC"},I:{"1":"hB I XC YC ZC aC qB bC","2":"H cC"},J:{"1":"D A"},K:{"1":"A B C fB pB gB","2":"U"},L:{"2":"H"},M:{"2":"T"},N:{"1":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"display: run-in"}; +module.exports={A:{A:{"1":"E F A B","2":"J D 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 I p J D E F A B C K L G M N O q r s t u v w x y z","2":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J AC","2":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"BC","129":"I 9B uB"},F:{"1":"F B C G M N O HC IC JC KC lB 2B LC mB","2":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"MC 3B NC OC PC","2":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","129":"uB"},H:{"1":"gC"},I:{"1":"oB I hC iC jC kC 3B lC","2":"H mC"},J:{"1":"D A"},K:{"1":"A B C lB 2B mB","2":"c"},L:{"2":"H"},M:{"2":"b"},N:{"1":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"display: run-in"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js index 3fa89dbbf76..4d3a36e15ff 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","388":"B"},B:{"1":"O P Q R S V W","2":"C K L G","129":"M N","513":"X Y Z a b c d e f g T h H i"},C:{"1":"OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB tB uB"},D:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB","513":"Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"G 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB fB","2052":"L","3076":"C K gB 3B"},F:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB","2":"0 1 2 3 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","513":"XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC","2052":"NC OC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"513":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"16":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:6,C:"'SameSite' cookie attribute"}; +module.exports={A:{A:{"2":"J D E F A 4B","388":"B"},B:{"1":"O P Q R S T U","2":"C K L G","129":"M N","513":"V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB 6B 7B"},D:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","513":"Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"G EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB lB","2052":"L","3076":"C K mB wB"},F:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","513":"dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC","2052":"XC YC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"513":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"16":"wB"},R:{"513":"0C"},S:{"2":"1C"}},B:6,C:"'SameSite' cookie attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/screen-orientation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/screen-orientation.js index 1ab6156c92f..cb27a1d601b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/screen-orientation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/screen-orientation.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","164":"B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","36":"C K L G M N O"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N tB uB","36":"0 1 2 3 4 5 6 7 8 O k l m n o p q r s t u v w x y z"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A","36":"B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","16":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"Screen Orientation"}; +module.exports={A:{A:{"2":"J D E F A 4B","164":"B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","36":"C K L G M N O"},C:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N 6B 7B","36":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB EB"},D:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A","36":"B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","16":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"Screen Orientation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/script-async.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/script-async.js index 7d9b061c6d3..6754bf4fd5c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/script-async.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/script-async.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i uB","2":"sB hB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","132":"j"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"2":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"async attribute for external scripts"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 7B","2":"5B oB 6B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","132":"p"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"2":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"async attribute for external scripts"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/script-defer.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/script-defer.js index dec91441472..c949adbdd7d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/script-defer.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/script-defer.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","132":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","257":"I j J D E F A B C K L G M N O k l m n o p q r s t u v tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"2":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"defer attribute for external scripts"}; +module.exports={A:{A:{"1":"A B","132":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","257":"0 1 I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"2":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"defer attribute for external scripts"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/scrollintoview.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/scrollintoview.js index 98d8a6fae29..0eff69e9c52 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/scrollintoview.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/scrollintoview.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D rB","132":"E F A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","132":"C K L G M N O"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","132":"0 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB"},E:{"1":"6B","2":"I j yB lB","132":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F 7B 8B 9B AC","16":"B fB pB","132":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB BC gB"},G:{"16":"lB CC qB","132":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","16":"XC YC","132":"hB I ZC aC qB bC cC"},J:{"132":"D A"},K:{"1":"U","132":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"132":"dC"},P:{"132":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"132":"qC"},S:{"1":"rC"}},B:5,C:"scrollIntoView"}; +module.exports={A:{A:{"2":"J D 4B","132":"E F A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","132":"C K L G M N O"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","132":"0 1 2 3 4 5 6 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB"},E:{"1":"nB 1B GC","2":"I p 9B uB","132":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"1":"JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F HC IC JC KC","16":"B lB 2B","132":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB LC mB"},G:{"1":"nB 1B","16":"uB MC 3B","132":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"2":"gC"},I:{"1":"H","16":"hC iC","132":"oB I jC kC 3B lC mC"},J:{"132":"D A"},K:{"1":"c","132":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"132":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"scrollIntoView"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js index 69c736321ef..bfb7007ccaa 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:7,C:"Element.scrollIntoViewIfNeeded()"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"Element.scrollIntoViewIfNeeded()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sdch.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sdch.js index b50d9525c05..ce87c8568b1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sdch.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sdch.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB","2":"iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB","2":"F B C ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"SDCH Accept-Encoding/Content-Encoding"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB","2":"pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB","2":"F B C fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"SDCH Accept-Encoding/Content-Encoding"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/selection-api.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/selection-api.js index 462d47a4055..122d14bd05a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/selection-api.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/selection-api.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","16":"rB","260":"J D E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","132":"0 1 2 3 4 5 6 7 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","2180":"8 9 AB BB CB DB EB FB GB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","132":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"16":"qB","132":"lB CC","516":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H bC cC","16":"hB I XC YC ZC aC","1025":"qB"},J:{"1":"A","16":"D"},K:{"1":"U","16":"A B C fB pB","132":"gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","16":"A"},O:{"1025":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2180":"rC"}},B:5,C:"Selection API"}; +module.exports={A:{A:{"1":"F A B","16":"4B","260":"J D E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","132":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB 6B 7B","2180":"EB FB GB HB IB JB KB LB MB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","132":"F B C HC IC JC KC lB 2B LC mB"},G:{"16":"3B","132":"uB MC","516":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H lC mC","16":"oB I hC iC jC kC","1025":"3B"},J:{"1":"A","16":"D"},K:{"1":"c","16":"A B C lB 2B","132":"mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","16":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2180":"1C"}},B:5,C:"Selection API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/server-timing.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/server-timing.js index 8d9d3826b1f..e266df80b97 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/server-timing.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/server-timing.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB tB uB"},D:{"1":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB","196":"OB jB PB QB","324":"U"},E:{"2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB","516":"K L G gB 3B 4B 5B nB oB 6B"},F:{"1":"HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"Server Timing"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB 6B 7B"},D:{"1":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB","196":"UB qB VB WB","324":"c"},E:{"2":"I p J D E F A B C 9B uB AC BC CC DC vB lB","516":"K L G mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Server Timing"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/serviceworkers.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/serviceworkers.js index 2bccce13655..d0d4051e899 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/serviceworkers.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/serviceworkers.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L","322":"G M"},C:{"1":"9 BB CB DB EB FB GB IB JB KB LB MB NB iB jB PB QB U RB SB TB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x tB uB","194":"0 1 2 3 4 5 6 7 8 y z","513":"AB HB OB UB"},D:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","4":"5 6 7 8 9"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B yB lB zB 0B 1B 2B mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r 7B 8B 9B AC fB pB BC gB","4":"s t u v w"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","4":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","4":"U"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"4":"qC"},S:{"2":"rC"}},B:4,C:"Service Workers"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L","322":"G M"},C:{"1":"FB HB IB JB KB LB MB OB PB QB RB SB TB pB qB VB WB c XB YB ZB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"4 5 6 7 8 9 AB BB CB DB EB","513":"GB NB UB aB"},D:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB","4":"BB CB DB EB FB"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B 9B uB AC BC CC DC vB"},F:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x HC IC JC KC lB 2B LC mB","4":"0 1 2 y z"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","4":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","4":"c"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"Service Workers"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/setimmediate.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/setimmediate.js index 46f1a8f5d10..1dea33bc008 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/setimmediate.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/setimmediate.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O","2":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"1":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Efficient Script Yielding: setImmediate()"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O","2":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"1":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Efficient Script Yielding: setImmediate()"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sha-2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sha-2.js deleted file mode 100644 index a2ae77789c2..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sha-2.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"1":"J D E F A B","2":"rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"0 1 2 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"16":"WC"},I:{"1":"hB I H YC ZC aC qB bC cC","260":"XC"},J:{"1":"D A"},K:{"1":"U","16":"A B C fB pB gB"},L:{"1":"H"},M:{"16":"T"},N:{"16":"A B"},O:{"16":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","16":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"SHA-2 SSL certificates"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/shadowdom.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/shadowdom.js index ab355a51334..c9a58ef430e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/shadowdom.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/shadowdom.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P","2":"C K L G M N O Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","66":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P","2":"I j J D E F A B C K L G M N O k l m n o p Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"q r s t u v w x y z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB","2":"F B C TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","33":"G M N O k l m"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB","33":"bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC","2":"lC mC nC oC","33":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:7,C:"Shadow DOM (deprecated V0 spec)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P","2":"C K L G M N O Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","66":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB"},D:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P","2":"I p J D E F A B C K L G M N O q r s t u v Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"0 1 2 3 4 5 w x y z"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB","2":"F B C ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","33":"G M N O q r s"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B","33":"lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC","2":"vC wC xC nB yC zC","33":"I"},Q:{"1":"wB"},R:{"2":"0C"},S:{"1":"1C"}},B:7,C:"Shadow DOM (deprecated V0 spec)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/shadowdomv1.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/shadowdomv1.js index dba84dc630a..e59a864bfc3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/shadowdomv1.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/shadowdomv1.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB tB uB","322":"NB","578":"iB OB jB PB"},D:{"1":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB"},E:{"1":"A B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B"},F:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC","132":"JC KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I","4":"eC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"Shadow DOM (V1)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB 6B 7B","322":"TB","578":"pB UB qB VB"},D:{"1":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB"},E:{"1":"A B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC"},F:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB HC IC JC KC lB 2B LC mB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC","132":"TC UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I","4":"oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Shadow DOM (V1)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sharedarraybuffer.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sharedarraybuffer.js index 128ed2df546..c244b846277 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sharedarraybuffer.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sharedarraybuffer.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b","2":"C K L G","194":"M N O","513":"c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB tB uB","194":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB","450":"aB bB cB dB eB","513":"P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB","194":"OB jB PB QB U RB SB TB","513":"c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A yB lB zB 0B 1B 2B","194":"B C K L G mB fB gB 3B 4B 5B","513":"nB oB 6B"},F:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB 7B 8B 9B AC fB pB BC gB","194":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC","194":"KC LC MC NC OC PC QC RC SC TC UC VC","513":"nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"513":"H"},M:{"513":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"Shared Array Buffer"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z","2":"C K L G","194":"M N O","513":"a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB 6B 7B","194":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB","450":"gB hB iB jB kB","513":"P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB","194":"UB qB VB WB c XB YB ZB","513":"a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A 9B uB AC BC CC DC","194":"B C K L G vB lB mB wB EC FC","513":"xB yB zB 0B nB 1B GC"},F:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB HC IC JC KC lB 2B LC mB","194":"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC","194":"UC VC WC XC YC ZC aC bC cC dC eC fC","513":"xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"513":"H"},M:{"513":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"513":"0C"},S:{"2":"1C"}},B:6,C:"Shared Array Buffer"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sharedworkers.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sharedworkers.js index 37f1ad92e36..9362b15ab59 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sharedworkers.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sharedworkers.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"j J zB","2":"I D E F A B C K L G yB lB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S AC fB pB BC gB","2":"F 7B 8B 9B"},G:{"1":"DC EC","2":"E lB CC qB FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"B C fB pB gB","2":"U","16":"A"},L:{"2":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"I","2":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:1,C:"Shared Web Workers"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"p J AC nB 1B GC","2":"I D E F A B C K L G 9B uB BC CC DC vB lB mB wB EC FC xB yB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a KC lB 2B LC mB","2":"F HC IC JC"},G:{"1":"NC OC nB 1B","2":"E uB MC 3B PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"B C lB 2B mB","2":"c","16":"A"},L:{"2":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"I","2":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"1":"1C"}},B:1,C:"Shared Web Workers"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sni.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sni.js index 1c50ae25d9a..f884e84e66f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sni.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sni.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J rB","132":"D E"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB"},H:{"1":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"A","2":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Server Name Indication"}; +module.exports={A:{A:{"1":"F A B","2":"J 4B","132":"D E"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB"},H:{"1":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"A","2":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Server Name Indication"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/spdy.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/spdy.js index 664f44b9b6a..906f6a8c2ac 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/spdy.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/spdy.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F A rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB","2":"sB hB I j J D E F A B C GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB","2":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"E F A B C 2B mB fB","2":"I j J D yB lB zB 0B 1B","129":"K L G gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 7 9 G M N O k l m n o p q r s t u v w x y z gB","2":"5 6 8 F B C AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC"},G:{"1":"E GC HC IC JC KC LC MC NC","2":"lB CC qB DC EC FC","257":"OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I aC qB bC cC","2":"H XC YC ZC"},J:{"2":"D A"},K:{"1":"gB","2":"A B C U fB pB"},L:{"2":"H"},M:{"2":"T"},N:{"1":"B","2":"A"},O:{"2":"dC"},P:{"1":"I","2":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"16":"qC"},S:{"1":"rC"}},B:7,C:"SPDY protocol"}; +module.exports={A:{A:{"1":"B","2":"J D E F A 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","2":"5B oB I p J D E F A B C MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","2":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"E F A B C DC vB lB","2":"I p J D 9B uB AC BC CC","129":"K L G mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB DB FB mB","2":"F B C BB CB EB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC"},G:{"1":"E QC RC SC TC UC VC WC XC","2":"uB MC 3B NC OC PC","257":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I kC 3B lC mC","2":"H hC iC jC"},J:{"2":"D A"},K:{"1":"mB","2":"A B C c lB 2B"},L:{"2":"H"},M:{"2":"b"},N:{"1":"B","2":"A"},O:{"2":"nC"},P:{"1":"I","2":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"1":"1C"}},B:7,C:"SPDY protocol"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/speech-recognition.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/speech-recognition.js index 2e0381b0840..62df5809b6b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/speech-recognition.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/speech-recognition.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","1026":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m tB uB","322":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"I j J D E F A B C K L G M N O k l m n o p","164":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L yB lB zB 0B 1B 2B mB fB gB 3B","2084":"G 4B 5B nB oB 6B"},F:{"2":"F B C G M N O k l m n o p q r 7B 8B 9B AC fB pB BC gB","1026":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC","2084":"UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"164":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"164":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"164":"pC"},R:{"164":"qC"},S:{"322":"rC"}},B:7,C:"Speech Recognition API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","1026":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B","322":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"I p J D E F A B C K L G M N O q r s t u v","164":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L 9B uB AC BC CC DC vB lB mB wB","2084":"G EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C G M N O q r s t u v w x HC IC JC KC lB 2B LC mB","1026":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC","2084":"eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"164":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"164":"nC"},P:{"164":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"164":"wB"},R:{"164":"0C"},S:{"322":"1C"}},B:7,C:"Speech Recognition API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/speech-synthesis.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/speech-synthesis.js index 030d0f76b29..01e7921e9fa 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/speech-synthesis.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/speech-synthesis.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O","2":"C K","257":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v tB uB","194":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x","257":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB","2":"F B C G M N O k l m n o p q r 7B 8B 9B AC fB pB BC gB","257":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:7,C:"Speech Synthesis API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O","2":"C K","257":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB","2":"0 1 2 3 I p J D E F A B C K L G M N O q r s t u v w x y z","257":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB","2":"F B C G M N O q r s t u v w x HC IC JC KC lB 2B LC mB","257":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"2":"0C"},S:{"1":"1C"}},B:7,C:"Speech Synthesis API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/spellcheck-attribute.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/spellcheck-attribute.js index 5da5237afe7..b8fc3ccbe5a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/spellcheck-attribute.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/spellcheck-attribute.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"4":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"4":"WC"},I:{"4":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"A","4":"D"},K:{"4":"A B C U fB pB gB"},L:{"4":"H"},M:{"4":"T"},N:{"4":"A B"},O:{"4":"dC"},P:{"4":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"4":"qC"},S:{"2":"rC"}},B:1,C:"Spellcheck attribute"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"4":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"4":"gC"},I:{"4":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"A","4":"D"},K:{"4":"A B C c lB 2B mB"},L:{"4":"H"},M:{"4":"b"},N:{"4":"A B"},O:{"4":"nC"},P:{"4":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"4":"0C"},S:{"2":"1C"}},B:1,C:"Spellcheck attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sql-storage.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sql-storage.js index 95bad1e023b..a177e529148 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sql-storage.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sql-storage.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB gB","2":"K L G 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC","2":"PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:7,C:"Web SQL Database"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b","2":"C K L G M N O","129":"H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b","129":"H sB tB 8B"},E:{"1":"I p J D E F A B C 9B uB AC BC CC DC vB lB mB","2":"K L G wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z JC KC lB 2B LC mB","2":"F HC IC","129":"a"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC","2":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I hC iC jC kC 3B lC mC","129":"H"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"129":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"Web SQL Database"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/srcset.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/srcset.js index aefb3950e61..ab46ab69d69 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/srcset.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/srcset.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","260":"C","514":"K L G"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w tB uB","194":"0 1 2 x y z"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y","260":"0 1 2 z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB 0B","260":"E 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l 7B 8B 9B AC fB pB BC gB","260":"m n o p"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC","260":"E GC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Srcset and sizes attributes"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C","514":"K L G"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"3 4 5 6 7 8"},D:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 I p J D E F A B C K L G M N O q r s t u v w x y z","260":"5 6 7 8"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC BC","260":"E CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r HC IC JC KC lB 2B LC mB","260":"s t u v"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC","260":"E QC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Srcset and sizes attributes"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/stream.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/stream.js index 82bc39a5f49..9f34c206583 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/stream.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/stream.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M tB uB","129":"1 2 3 4 5 6","420":"0 N O k l m n o p q r s t u v w x y z"},D:{"1":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l","420":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB"},F:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B G M N 7B 8B 9B AC fB pB BC","420":"0 1 2 3 4 C O k l m n o p q r s t u v w x y z gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC","513":"SC TC UC VC nB oB","1537":"LC MC NC OC PC QC RC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D","420":"A"},K:{"1":"U","2":"A B fB pB","420":"C gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","420":"I eC"},Q:{"1":"pC"},R:{"420":"qC"},S:{"2":"rC"}},B:4,C:"getUserMedia/Stream API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M 6B 7B","129":"7 8 9 AB BB CB","420":"0 1 2 3 4 5 6 N O q r s t u v w x y z"},D:{"1":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r","420":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB"},F:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B G M N HC IC JC KC lB 2B LC","420":"0 1 2 3 4 5 6 7 8 9 C O q r s t u v w x y z AB mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC","513":"cC dC eC fC xB yB zB 0B nB 1B","1537":"VC WC XC YC ZC aC bC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D","420":"A"},K:{"1":"c","2":"A B lB 2B","420":"C mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","420":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"getUserMedia/Stream API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/streams.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/streams.js index 0b248824a90..bef830228fc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/streams.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/streams.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","130":"B"},B:{"1":"a b c d e f g T h H i","16":"C K","260":"L G","1028":"P Q R S V W X Y Z","5124":"M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB tB uB","6148":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","6722":"MB NB iB OB jB PB QB U"},D:{"1":"a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB","260":"HB IB JB KB LB MB NB","1028":"iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z"},E:{"2":"I j J D E F yB lB zB 0B 1B 2B","1028":"G 4B 5B nB oB 6B","3076":"A B C K L mB fB gB 3B"},F:{"1":"cB dB eB P Q R kB S","2":"0 1 2 3 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","260":"4 5 6 7 8 9 AB","1028":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB"},G:{"2":"E lB CC qB DC EC FC GC HC IC","16":"JC","1028":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"6148":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"nC oC","2":"I eC fC","1028":"gC hC iC mB jC kC lC mC"},Q:{"1028":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"Streams"}; +module.exports={A:{A:{"2":"J D E F A 4B","130":"B"},B:{"1":"Y Z a d e f g h i j k l m n o b H","16":"C K","260":"L G","1028":"P Q R S T U V W X","5124":"M N O"},C:{"1":"n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB 6B 7B","5124":"l m","7172":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k","7746":"SB TB pB UB qB VB WB c"},D:{"1":"Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB","260":"NB OB PB QB RB SB TB","1028":"pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X"},E:{"2":"I p J D E F 9B uB AC BC CC DC","1028":"G EC FC xB yB zB 0B nB 1B GC","3076":"A B C K L vB lB mB wB"},F:{"1":"iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","260":"AB BB CB DB EB FB GB","1028":"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC","16":"TC","1028":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1028":"nC"},P:{"1":"xC nB yC zC","2":"I oC pC","1028":"qC rC sC vB tC uC vC wC"},Q:{"1028":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"Streams"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/stricttransportsecurity.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/stricttransportsecurity.js index d7f2f0aa34b..108f7608019 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/stricttransportsecurity.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/stricttransportsecurity.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A rB","129":"B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC fB pB BC"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Strict Transport Security"}; +module.exports={A:{A:{"2":"J D E F A 4B","129":"B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC lB 2B LC"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Strict Transport Security"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/style-scoped.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/style-scoped.js index 7e5d7eeb0d2..90c20dad917 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/style-scoped.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/style-scoped.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB","2":"sB hB I j J D E F A B C K L G M N O k l jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","322":"KB LB MB NB iB OB"},D:{"2":"2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","194":"0 1 l m n o p q r s t u v w x y z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:7,C:"Scoped CSS"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB","2":"5B oB I p J D E F A B C K L G M N O q r qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","322":"QB RB SB TB pB UB"},D:{"2":"8 9 I p J D E F A B C K L G M N O q AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","194":"0 1 2 3 4 5 6 7 r s t u v w x y z"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"1":"1C"}},B:7,C:"Scoped CSS"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/subresource-bundling.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/subresource-bundling.js new file mode 100644 index 00000000000..ac95613ef89 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/subresource-bundling.js @@ -0,0 +1 @@ +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"b H","2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Subresource Loading with Web Bundles"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/subresource-integrity.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/subresource-integrity.js index b0fc87cb292..e9a553437b8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/subresource-integrity.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/subresource-integrity.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M"},C:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u v w 7B 8B 9B AC fB pB BC gB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC","194":"LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"Subresource Integrity"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M"},C:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB 6B 7B"},D:{"1":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB"},F:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC","194":"VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"Subresource Integrity"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-css.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-css.js index 57b15024105..9e64e5aef59 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-css.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-css.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","516":"C K L G"},C:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","260":"I j J D E F A B C K L G M N O k l m n o"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","4":"I"},E:{"1":"j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB","132":"I lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"E qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","132":"lB CC"},H:{"260":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"D A"},K:{"1":"U","260":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"SVG in CSS backgrounds"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","516":"C K L G"},C:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","260":"I p J D E F A B C K L G M N O q r s t u"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","4":"I"},E:{"1":"p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B","132":"I uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"E 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","132":"uB MC"},H:{"260":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"D A"},K:{"1":"c","260":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"SVG in CSS backgrounds"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-filters.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-filters.js index 97c718652f2..981666dff10 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-filters.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-filters.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I","4":"j J D"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"SVG filters"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I","4":"p J D"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"SVG filters"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-fonts.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-fonts.js index 025b3f80a1d..b9221b8e003 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-fonts.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-fonts.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"F A B rB","8":"J D E"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","2":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","130":"3 4 5 6 7 8 9 AB BB CB DB EB FB"},E:{"1":"I j J D E F A B C K L G lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB"},F:{"1":"F B C G M N O k l m n o p 7B 8B 9B AC fB pB BC gB","2":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","130":"0 1 q r s t u v w x y z"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"258":"WC"},I:{"1":"hB I aC qB bC cC","2":"H XC YC ZC"},J:{"1":"D A"},K:{"1":"A B C fB pB gB","2":"U"},L:{"130":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"I","130":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"130":"qC"},S:{"2":"rC"}},B:2,C:"SVG fonts"}; +module.exports={A:{A:{"2":"F A B 4B","8":"J D E"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 I p J D E F A B C K L G M N O q r s t u v w x y z","2":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","130":"9 AB BB CB DB EB FB GB HB IB JB KB LB"},E:{"1":"I p J D E F A B C K L G uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B"},F:{"1":"F B C G M N O q r s t u v HC IC JC KC lB 2B LC mB","2":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","130":"0 1 2 3 4 5 6 7 w x y z"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"258":"gC"},I:{"1":"oB I kC 3B lC mC","2":"H hC iC jC"},J:{"1":"D A"},K:{"1":"A B C lB 2B mB","2":"c"},L:{"130":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"I","130":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"130":"0C"},S:{"2":"1C"}},B:2,C:"SVG fonts"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-fragment.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-fragment.js index 506dc7c3544..a2c608afef8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-fragment.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-fragment.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","260":"F A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L tB uB"},D:{"1":"FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","132":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB"},E:{"1":"C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D F A B yB lB zB 0B 2B mB","132":"E 1B"},F:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"G M N O k l m n","4":"B C 8B 9B AC fB pB BC","16":"F 7B","132":"0 1 o p q r s t u v w x y z"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC HC IC JC KC LC","132":"E GC"},H:{"1":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D","132":"A"},K:{"1":"U gB","4":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","132":"I"},Q:{"1":"pC"},R:{"132":"qC"},S:{"1":"rC"}},B:4,C:"SVG fragment identifiers"}; +module.exports={A:{A:{"2":"J D E 4B","260":"F A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L 6B 7B"},D:{"1":"LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 I p J D E F A B C K L G M N O q r s t u v w x y z","132":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB"},E:{"1":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D F A B 9B uB AC BC DC vB","132":"E CC"},F:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"G M N O q r s t","4":"B C IC JC KC lB 2B LC","16":"F HC","132":"0 1 2 3 4 5 6 7 u v w x y z"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC RC SC TC UC VC","132":"E QC"},H:{"1":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D","132":"A"},K:{"1":"c mB","4":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","132":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"SVG fragment identifiers"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-html.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-html.js index 7620de718fe..5a1a73e62c6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-html.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-html.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","388":"F A B"},B:{"4":"P Q R S V W X Y Z a b c d e f g T h H i","260":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB","4":"hB"},D:{"4":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"yB lB","4":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"4":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"4":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","4":"H bC cC"},J:{"1":"A","2":"D"},K:{"4":"A B C U fB pB gB"},L:{"4":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"4":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"4":"pC"},R:{"4":"qC"},S:{"1":"rC"}},B:2,C:"SVG effects for HTML"}; +module.exports={A:{A:{"2":"J D E 4B","388":"F A B"},B:{"4":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B","4":"oB"},D:{"4":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"9B uB","4":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"4":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"4":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B","4":"H lC mC"},J:{"1":"A","2":"D"},K:{"4":"A B C c lB 2B mB"},L:{"4":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"4":"nC"},P:{"4":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"4":"wB"},R:{"4":"0C"},S:{"1":"1C"}},B:2,C:"SVG effects for HTML"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-html5.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-html5.js index 2f6d8393798..29f57b92ebb 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-html5.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-html5.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"rB","8":"J D E","129":"F A B"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","129":"C K L G M"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","8":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","8":"I j J"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","8":"I j yB lB","129":"J D E zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"B AC fB pB","8":"F 7B 8B 9B"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","8":"lB CC qB","129":"E DC EC FC GC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"XC YC ZC","129":"hB I aC qB"},J:{"1":"A","129":"D"},K:{"1":"C U gB","8":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"129":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Inline SVG in HTML5"}; +module.exports={A:{A:{"2":"4B","8":"J D E","129":"F A B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","129":"C K L G M"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","8":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","8":"I p J"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"I p 9B uB","129":"J D E AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"B KC lB 2B","8":"F HC IC JC"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","8":"uB MC 3B","129":"E NC OC PC QC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"hC iC jC","129":"oB I kC 3B"},J:{"1":"A","129":"D"},K:{"1":"C c mB","8":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"129":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Inline SVG in HTML5"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-img.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-img.js index 20f3cad45a0..169eea7d541 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-img.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-img.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"I j J D E F A B C K L G M N O k l m n o p q r s"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB","4":"lB","132":"I j J D E zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","132":"E lB CC qB DC EC FC GC"},H:{"1":"WC"},I:{"1":"H bC cC","2":"XC YC ZC","132":"hB I aC qB"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"SVG in HTML img element"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"I p J D E F A B C K L G M N O q r s t u v w x y"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B","4":"uB","132":"I p J D E AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","132":"E uB MC 3B NC OC PC QC"},H:{"1":"gC"},I:{"1":"H lC mC","2":"hC iC jC","132":"oB I kC 3B"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"SVG in HTML img element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-smil.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-smil.js index 2af38bd34c4..efaeb7ce1e4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-smil.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg-smil.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"rB","8":"J D E F A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","8":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","8":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","4":"I"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","8":"yB lB","132":"I j zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","132":"lB CC qB DC"},H:{"2":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"8":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"SVG SMIL animation"}; +module.exports={A:{A:{"2":"4B","8":"J D E F A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","8":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","8":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","4":"I"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"9B uB","132":"I p AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","132":"uB MC 3B NC"},H:{"2":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"8":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"SVG SMIL animation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg.js index 868e5c25390..dadf0201d5d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/svg.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"rB","8":"J D E","772":"F A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","513":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","4":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","4":"yB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"H bC cC","2":"XC YC ZC","132":"hB I aC qB"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"257":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"SVG (basic support)"}; +module.exports={A:{A:{"2":"4B","8":"J D E","772":"F A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","513":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","4":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","4":"9B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"H lC mC","2":"hC iC jC","132":"oB I kC 3B"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"257":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"SVG (basic support)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sxg.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sxg.js index e4983bd53ae..ba0628b95a6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sxg.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/sxg.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB","132":"XB YB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"16":"dC"},P:{"1":"jC kC lC mC nC oC","2":"I eC fC gC hC iC mB"},Q:{"16":"pC"},R:{"16":"qC"},S:{"2":"rC"}},B:6,C:"Signed HTTP Exchanges (SXG)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB","132":"dB eB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"tC uC vC wC xC nB yC zC","2":"I oC pC qC rC sC vB"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"Signed HTTP Exchanges (SXG)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tabindex-attr.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tabindex-attr.js index a367c038bf5..0ca8681c76a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tabindex-attr.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tabindex-attr.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"D E F A B","16":"J rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"16":"sB hB tB uB","129":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"16":"I j yB lB","257":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","16":"F"},G:{"769":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"16":"WC"},I:{"16":"hB I H XC YC ZC aC qB bC cC"},J:{"16":"D A"},K:{"16":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"16":"A B"},O:{"16":"dC"},P:{"16":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"16":"qC"},S:{"129":"rC"}},B:1,C:"tabindex global attribute"}; +module.exports={A:{A:{"1":"D E F A B","16":"J 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"16":"5B oB 6B 7B","129":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"16":"I p 9B uB","257":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","16":"F"},G:{"769":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"16":"gC"},I:{"16":"oB I H hC iC jC kC 3B lC mC"},J:{"16":"D A"},K:{"16":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"16":"A B"},O:{"1":"nC"},P:{"16":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"129":"1C"}},B:1,C:"tabindex global attribute"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/template-literals.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/template-literals.js index 59503592dc1..ceb4e7d26fe 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/template-literals.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/template-literals.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"K L G M N O P Q R S V W X Y Z a b c d e f g T h H i","16":"C"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y tB uB"},D:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"A B K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B","129":"C"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t 7B 8B 9B AC fB pB BC gB"},G:{"1":"HC IC JC KC LC MC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC","129":"NC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"ES6 Template Literals (Template Strings)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","16":"C"},C:{"1":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB"},E:{"1":"A B K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC","129":"C"},F:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"RC SC TC UC VC WC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC","129":"XC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"ES6 Template Literals (Template Strings)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/template.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/template.js index bd2603fe5df..8256b400ac8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/template.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/template.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C","388":"K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q","132":"r s t u v w x y z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D yB lB zB","388":"E 1B","514":"0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","132":"G M N O k l m"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC","388":"E GC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"HTML templates"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C","388":"K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s 6B 7B"},D:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v w","132":"0 1 2 3 4 5 x y z"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D 9B uB AC","388":"E CC","514":"BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","132":"G M N O q r s"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC","388":"E QC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"HTML templates"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/temporal.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/temporal.js index 6443173f1d9..7e938360bc3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/temporal.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/temporal.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"Temporal"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:6,C:"Temporal"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/testfeat.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/testfeat.js index ef1ba082fb7..1b421e1b17a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/testfeat.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/testfeat.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E A B rB","16":"F"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","16":"I j"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"B C"},E:{"2":"I J yB lB zB","16":"j D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC pB BC gB","16":"fB"},G:{"2":"lB CC qB DC EC","16":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC aC qB bC cC","16":"ZC"},J:{"2":"A","16":"D"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Test feature - updated"}; +module.exports={A:{A:{"2":"J D E A B 4B","16":"F"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","16":"I p"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"B C"},E:{"2":"I J 9B uB AC","16":"p D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC 2B LC mB","16":"lB"},G:{"2":"uB MC 3B NC OC","16":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC kC 3B lC mC","16":"jC"},J:{"2":"A","16":"D"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Test feature - updated"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-decoration.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-decoration.js index ed33837da2b..a50f6410460 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-decoration.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-decoration.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","2052":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j tB uB","1028":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","1060":"0 J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},D:{"2":"I j J D E F A B C K L G M N O k l m n o p q","226":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","2052":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D yB lB zB 0B","772":"K L G gB 3B 4B 5B nB oB 6B","804":"E F A B C 2B mB fB","1316":"1B"},F:{"2":"F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","226":"0 1 2 3 4 5 6 7 8","2052":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"lB CC qB DC EC FC","292":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"2052":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2052":"dC"},P:{"2":"I eC fC","2052":"gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"1":"qC"},S:{"1028":"rC"}},B:4,C:"text-decoration styling"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","2052":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB I p 6B 7B","1028":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","1060":"0 1 2 3 4 5 6 J D E F A B C K L G M N O q r s t u v w x y z"},D:{"2":"I p J D E F A B C K L G M N O q r s t u v w","226":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB","2052":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D 9B uB AC BC","772":"K L G mB wB EC FC xB yB zB 0B nB 1B GC","804":"E F A B C DC vB lB","1316":"CC"},F:{"2":"0 1 2 3 4 5 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","226":"6 7 8 9 AB BB CB DB EB","2052":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"uB MC 3B NC OC PC","292":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"2052":"H"},M:{"1028":"b"},N:{"2":"A B"},O:{"2052":"nC"},P:{"2":"I oC pC","2052":"qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2052":"wB"},R:{"2052":"0C"},S:{"1028":"1C"}},B:4,C:"text-decoration styling"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-emphasis.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-emphasis.js index ee823285094..75ba29306c7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-emphasis.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-emphasis.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","164":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB","322":"AB"},D:{"1":"i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p","164":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H"},E:{"1":"E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB","164":"D 0B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","164":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB","164":"H bC cC"},J:{"2":"D","164":"A"},K:{"2":"A B C fB pB gB","164":"U"},L:{"164":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"164":"dC"},P:{"164":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"164":"pC"},R:{"164":"qC"},S:{"1":"rC"}},B:4,C:"text-emphasis styling"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"k l m n o b H","2":"C K L G M N O","164":"P Q R S T U V W X Y Z a d e f g h i j"},C:{"1":"HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB 6B 7B","322":"GB"},D:{"1":"k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v","164":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j"},E:{"1":"E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC","164":"D BC"},F:{"1":"V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","164":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B","164":"lC mC"},J:{"2":"D","164":"A"},K:{"2":"A B C lB 2B mB","164":"c"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"164":"nC"},P:{"1":"zC","164":"I oC pC qC rC sC vB tC uC vC wC xC nB yC"},Q:{"164":"wB"},R:{"164":"0C"},S:{"1":"1C"}},B:4,C:"text-emphasis styling"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-overflow.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-overflow.js index 569c191e9d2..231588a2c4e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-overflow.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-overflow.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B","2":"rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","8":"sB hB I j J tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","33":"F 7B 8B 9B AC"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"U gB","33":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS3 Text-overflow"}; +module.exports={A:{A:{"1":"J D E F A B","2":"4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","8":"5B oB I p J 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","33":"F HC IC JC KC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"c mB","33":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"CSS3 Text-overflow"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-size-adjust.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-size-adjust.js index c12abb7ddb1..74f2470bb1c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-size-adjust.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-size-adjust.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","33":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q s t u v w x y z AB BB CB DB EB FB GB HB IB","258":"r"},E:{"2":"I j J D E F A B C K L G yB lB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","258":"zB"},F:{"1":"8 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 9 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"2":"lB CC qB","33":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"33":"T"},N:{"161":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"CSS text-size-adjust"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","33":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB","258":"x"},E:{"2":"I p J D E F A B C K L G 9B uB BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","258":"AC"},F:{"1":"EB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB FB HC IC JC KC lB 2B LC mB"},G:{"2":"uB MC 3B","33":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"33":"b"},N:{"161":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"CSS text-size-adjust"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-stroke.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-stroke.js index 9c9ef8656d0..b28f630a590 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-stroke.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-stroke.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L","33":"P Q R S V W X Y Z a b c d e f g T h H i","161":"G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB tB uB","161":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","450":"DB"},D:{"33":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"33":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"33":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","36":"lB"},H:{"2":"WC"},I:{"2":"hB","33":"I H XC YC ZC aC qB bC cC"},J:{"33":"D A"},K:{"2":"A B C fB pB gB","33":"U"},L:{"33":"H"},M:{"161":"T"},N:{"2":"A B"},O:{"33":"dC"},P:{"33":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"33":"pC"},R:{"33":"qC"},S:{"161":"rC"}},B:7,C:"CSS text-stroke and text-fill"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L","33":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","161":"G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB 6B 7B","161":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","450":"JB"},D:{"33":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"33":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"33":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","36":"uB"},H:{"2":"gC"},I:{"2":"oB","33":"I H hC iC jC kC 3B lC mC"},J:{"33":"D A"},K:{"2":"A B C lB 2B mB","33":"c"},L:{"33":"H"},M:{"161":"b"},N:{"2":"A B"},O:{"33":"nC"},P:{"33":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"33":"wB"},R:{"33":"0C"},S:{"161":"1C"}},B:7,C:"CSS text-stroke and text-fill"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-underline-offset.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-underline-offset.js deleted file mode 100644 index 43a45ef606d..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/text-underline-offset.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB tB uB","130":"VB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"K L G gB 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"text-underline-offset"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/textcontent.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/textcontent.js index f136e1ec482..d3e52ff55a4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/textcontent.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/textcontent.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","16":"F"},G:{"1":"E CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB"},H:{"1":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Node.textContent"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","16":"F"},G:{"1":"E MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB"},H:{"1":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Node.textContent"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/textencoder.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/textencoder.js index a2ecb4d8a18..78cec1f2aee 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/textencoder.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/textencoder.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O tB uB","132":"k"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"TextEncoder & TextDecoder"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O 6B 7B","132":"q"},D:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u v HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"TextEncoder & TextDecoder"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-1.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-1.js index 64ec75bd75e..3920bba69d5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-1.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-1.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D rB","66":"E F A"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB","2":"sB hB I j J D E F A B C K L G M N O k l m n tB uB","66":"o","129":"UB VB WB XB YB ZB aB bB cB dB","388":"eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V","2":"I j J D E F A B C K L G M N O k l m","1540":"W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"D E F A B C K 1B 2B mB fB gB","2":"I j J yB lB zB 0B","513":"L G 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB gB","2":"F B C 7B 8B 9B AC fB pB BC","1540":"ZB aB bB cB dB eB P Q R kB S"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"1":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"1":"A","2":"D"},K:{"1":"U gB","2":"A B C fB pB"},L:{"1":"H"},M:{"129":"T"},N:{"1":"B","66":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"TLS 1.1"}; +module.exports={A:{A:{"1":"B","2":"J D 4B","66":"E F A"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB","2":"5B oB I p J D E F A B C K L G M N O q r s t 6B 7B","66":"u","129":"aB bB cB dB eB fB gB hB iB jB","388":"kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T","2":"I p J D E F A B C K L G M N O q r s","1540":"U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"D E F A B C K CC DC vB lB mB","2":"I p J 9B uB AC BC","513":"L G wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB mB","2":"F B C HC IC JC KC lB 2B LC","1540":"fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"1":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"1":"A","2":"D"},K:{"1":"c mB","2":"A B C lB 2B"},L:{"1":"H"},M:{"129":"b"},N:{"1":"B","66":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"TLS 1.1"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-2.js index 83731332ae8..ea7e113111d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-2.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-2.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D rB","66":"E F A"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o tB uB","66":"p q r"},D:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F G 7B","66":"B C 8B 9B AC fB pB BC gB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"1":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"1":"A","2":"D"},K:{"1":"U gB","2":"A B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","66":"A"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"TLS 1.2"}; +module.exports={A:{A:{"1":"B","2":"J D 4B","66":"E F A"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u 6B 7B","66":"v w x"},D:{"1":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F G HC","66":"B C IC JC KC lB 2B LC mB"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"1":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"1":"A","2":"D"},K:{"1":"c mB","2":"A B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","66":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"TLS 1.2"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-3.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-3.js index dcf857d97b2..8677dadc22d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-3.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/tls1-3.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB tB uB","132":"OB jB PB","450":"GB HB IB JB KB LB MB NB iB"},D:{"1":"WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB","706":"JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB"},E:{"1":"L G 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB","1028":"K gB 3B"},F:{"1":"MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB 7B 8B 9B AC fB pB BC gB","706":"JB KB LB"},G:{"1":"OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mB jC kC lC mC nC oC","2":"I eC fC gC hC iC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:6,C:"TLS 1.3"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB 6B 7B","132":"UB qB VB","450":"MB NB OB PB QB RB SB TB pB"},D:{"1":"cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB","706":"PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB"},E:{"1":"L G EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB","1028":"K mB wB"},F:{"1":"SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB HC IC JC KC lB 2B LC mB","706":"PB QB RB"},G:{"1":"YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"vB tC uC vC wC xC nB yC zC","2":"I oC pC qC rC sC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:6,C:"TLS 1.3"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/token-binding.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/token-binding.js deleted file mode 100644 index 95637ae938d..00000000000 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/token-binding.js +++ /dev/null @@ -1 +0,0 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L","194":"P Q R S V W X Y Z a b c d e f g T h H i","257":"G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h tB uB","16":"H i"},D:{"2":"0 1 2 3 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","16":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB","194":"NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E yB lB zB 0B 1B","16":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C G M N O k l m n o p q r s t u 7B 8B 9B AC fB pB BC gB","16":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC","16":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"16":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","16":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","16":"U"},L:{"16":"H"},M:{"16":"T"},N:{"2":"A","16":"B"},O:{"16":"dC"},P:{"16":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"16":"pC"},R:{"16":"qC"},S:{"2":"rC"}},B:6,C:"Token Binding"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/touch.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/touch.js index 59ccb0b9af1..5d2b7e46a32 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/touch.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/touch.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","8":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","578":"C K L G M N O"},C:{"1":"O k l m n o p HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","4":"I j J D E F A B C K L G M N","194":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"8":"A","260":"B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:2,C:"Touch events"}; +module.exports={A:{A:{"2":"J D E F 4B","8":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","578":"C K L G M N O"},C:{"1":"O q r s t u v NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","4":"I p J D E F A B C K L G M N","194":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"8":"A","260":"B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:2,C:"Touch events"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/transforms2d.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/transforms2d.js index 22fe9456125..5cdef598d5d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/transforms2d.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/transforms2d.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"rB","8":"J D E","129":"A B","161":"F"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","129":"C K L G M"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","33":"I j J D E F A B C K L G tB uB"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"0 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","33":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F 7B 8B","33":"B C G M N O k l m n 9B AC fB pB BC"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","33":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","33":"hB I XC YC ZC aC qB bC cC"},J:{"33":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"CSS3 2D Transforms"}; +module.exports={A:{A:{"2":"4B","8":"J D E","129":"A B","161":"F"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","129":"C K L G M"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","33":"I p J D E F A B C K L G 6B 7B"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"0 1 2 3 4 5 6 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","33":"I p J D E 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F HC IC","33":"B C G M N O q r s t JC KC lB 2B LC"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","33":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","33":"oB I hC iC jC kC 3B lC mC"},J:{"33":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS3 2D Transforms"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/transforms3d.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/transforms3d.js index caae14d0fd1..f8eeb34234b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/transforms3d.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/transforms3d.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","132":"A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F tB uB","33":"A B C K L G"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B","33":"0 C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"6B","2":"yB lB","33":"I j J D E zB 0B 1B","257":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"G M N O k l m n"},G:{"33":"E lB CC qB DC EC FC GC","257":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"XC YC ZC","33":"hB I aC qB bC cC"},J:{"33":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"CSS3 3D Transforms"}; +module.exports={A:{A:{"2":"J D E F 4B","132":"A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F 6B 7B","33":"A B C K L G"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B","33":"0 1 2 3 4 5 6 C K L G M N O q r s t u v w x y z"},E:{"1":"yB zB 0B nB 1B GC","2":"9B uB","33":"I p J D E AC BC CC","257":"F A B C K L G DC vB lB mB wB EC FC xB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"G M N O q r s t"},G:{"1":"yB zB 0B nB 1B","33":"E uB MC 3B NC OC PC QC","257":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},H:{"2":"gC"},I:{"1":"H","2":"hC iC jC","33":"oB I kC 3B lC mC"},J:{"33":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:5,C:"CSS3 3D Transforms"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/trusted-types.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/trusted-types.js index e7f093372c4..4dee25913b3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/trusted-types.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/trusted-types.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O P Q R"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"lC mC nC oC","2":"I eC fC gC hC iC mB jC kC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Trusted Types for DOM manipulation"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O P Q R"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"vC wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"Trusted Types for DOM manipulation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ttf.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ttf.js index d07a377b3de..7737f403601 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ttf.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/ttf.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","132":"F A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 8B 9B AC fB pB BC gB","2":"F 7B"},G:{"1":"E qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC"},H:{"2":"WC"},I:{"1":"hB I H YC ZC aC qB bC cC","2":"XC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"TTF/OTF - TrueType and OpenType font support"}; +module.exports={A:{A:{"2":"J D E 4B","132":"F A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a IC JC KC lB 2B LC mB","2":"F HC"},G:{"1":"E 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC"},H:{"2":"gC"},I:{"1":"oB I H iC jC kC 3B lC mC","2":"hC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"TTF/OTF - TrueType and OpenType font support"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/typedarrays.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/typedarrays.js index 9de980e1daf..feaefb4b8c3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/typedarrays.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/typedarrays.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"B","2":"J D E F rB","132":"A"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB","260":"zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F B 7B 8B 9B AC fB pB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC","260":"qB"},H:{"1":"WC"},I:{"1":"I H aC qB bC cC","2":"hB XC YC ZC"},J:{"1":"A","2":"D"},K:{"1":"C U gB","2":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Typed Arrays"}; +module.exports={A:{A:{"1":"B","2":"J D E F 4B","132":"A"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB","260":"AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F B HC IC JC KC lB 2B"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC","260":"3B"},H:{"1":"gC"},I:{"1":"I H kC 3B lC mC","2":"oB hC iC jC"},J:{"1":"A","2":"D"},K:{"1":"C c mB","2":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Typed Arrays"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/u2f.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/u2f.js index 825f075265a..239b5b48608 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/u2f.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/u2f.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","513":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB tB uB","322":"CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB"},D:{"2":"0 1 2 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","130":"3 4 5","513":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"K L G 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB gB"},F:{"2":"0 1 2 3 4 6 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","513":"5 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"322":"rC"}},B:6,C:"FIDO U2F API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","513":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB 6B 7B","322":"IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB"},D:{"2":"0 1 2 3 4 5 6 7 8 I p J D E F A B C K L G M N O q r s t u v w x y z sB tB 8B","130":"9 AB BB","513":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i","578":"j k l m n o b H"},E:{"1":"K L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB mB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB CB HC IC JC KC lB 2B LC mB","513":"BB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"322":"1C"}},B:7,C:"FIDO U2F API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/unhandledrejection.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/unhandledrejection.js index 7a858a2bda4..8dd35e7a288 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/unhandledrejection.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/unhandledrejection.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB tB uB"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC","16":"LC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:1,C:"unhandledrejection/rejectionhandled events"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB 6B 7B"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC","16":"VC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:1,C:"unhandledrejection/rejectionhandled events"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js index 846b06a6a8d..1f59f7945bc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o p q r s t u 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"Upgrade Insecure Requests"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M"},C:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB 6B 7B"},D:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Upgrade Insecure Requests"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js index 9cc715d08e8..2a61d50db63 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O","66":"P Q R"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB","66":"aB bB cB dB eB P Q"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB 7B 8B 9B AC fB pB BC gB","66":"SB TB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"lC mC nC oC","2":"I eC fC gC hC iC mB jC kC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"URL Scroll-To-Text Fragment"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","66":"P Q R"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB","66":"gB hB iB jB kB P Q"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB HC IC JC KC lB 2B LC mB","66":"YB ZB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"vC wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"URL Scroll-To-Text Fragment"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/url.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/url.js index fc60f6e8902..a11c6e50248 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/url.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/url.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n","130":"o p q r s t u v w"},E:{"1":"E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB 0B","130":"D"},F:{"1":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","130":"G M N O"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC","130":"FC"},H:{"2":"WC"},I:{"1":"H cC","2":"hB I XC YC ZC aC qB","130":"bC"},J:{"2":"D","130":"A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"URL API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w 6B 7B"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t","130":"0 1 2 u v w x y z"},E:{"1":"E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC BC","130":"D"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","130":"G M N O"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC","130":"PC"},H:{"2":"gC"},I:{"1":"H mC","2":"oB I hC iC jC kC 3B","130":"lC"},J:{"2":"D","130":"A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"URL API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/urlsearchparams.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/urlsearchparams.js index 62fb5354934..ec2d111def2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/urlsearchparams.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/urlsearchparams.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB","132":"0 1 2 3 4 5 6 7 8 u v w x y z"},D:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB"},E:{"1":"B C K L G mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B"},F:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","2":"I"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:1,C:"URLSearchParams"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M"},C:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","132":"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB"},D:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB"},E:{"1":"B C K L G vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC"},F:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB"},G:{"1":"UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"URLSearchParams"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/use-strict.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/use-strict.js index 04f49fd12f4..b6929460291 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/use-strict.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/use-strict.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","132":"j zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F B 7B 8B 9B AC fB pB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"1":"WC"},I:{"1":"hB I H aC qB bC cC","2":"XC YC ZC"},J:{"1":"D A"},K:{"1":"C U pB gB","2":"A B fB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"ECMAScript 5 Strict Mode"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","132":"p AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F B HC IC JC KC lB 2B"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"1":"gC"},I:{"1":"oB I H kC 3B lC mC","2":"hC iC jC"},J:{"1":"D A"},K:{"1":"C c 2B mB","2":"A B lB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"ECMAScript 5 Strict Mode"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/user-select-none.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/user-select-none.js index d4d35af431b..c6e5938c725 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/user-select-none.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/user-select-none.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","33":"A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","33":"C K L G M N O"},C:{"1":"VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","33":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB tB uB"},D:{"1":"JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","33":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB"},E:{"33":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","33":"0 1 2 3 4 5 G M N O k l m n o p q r s t u v w x y z"},G:{"33":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","33":"hB I XC YC ZC aC qB bC cC"},J:{"33":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"33":"A B"},O:{"2":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","33":"I eC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"33":"rC"}},B:5,C:"CSS user-select: none"}; +module.exports={A:{A:{"2":"J D E F 4B","33":"A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","33":"C K L G M N O"},C:{"1":"bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","33":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB 6B 7B"},D:{"1":"PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","33":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB"},E:{"1":"GC","33":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B"},F:{"1":"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","33":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB"},G:{"33":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","33":"oB I hC iC jC kC 3B lC mC"},J:{"33":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"33":"A B"},O:{"1":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","33":"I oC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"33":"1C"}},B:5,C:"CSS user-select: none"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/user-timing.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/user-timing.js index b94794a5ca2..7236e18ff17 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/user-timing.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/user-timing.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"User Timing API"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q r s t u v"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"User Timing API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/variable-fonts.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/variable-fonts.js index 6d4a347b75d..d17490c53a7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/variable-fonts.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/variable-fonts.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB tB uB","4609":"PB QB U RB SB TB UB VB WB","4674":"jB","5698":"OB","7490":"IB JB KB LB MB","7746":"NB iB","8705":"XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB","4097":"SB","4290":"iB OB jB","6148":"PB QB U RB"},E:{"1":"G 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB","4609":"B C fB gB","8193":"K L 3B 4B"},F:{"1":"JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB 7B 8B 9B AC fB pB BC gB","4097":"IB","6148":"EB FB GB HB"},G:{"1":"PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC","4097":"LC MC NC OC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"4097":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC","4097":"hC iC mB jC kC lC mC nC oC"},Q:{"4097":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"Variable fonts"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB 6B 7B","4609":"VB WB c XB YB ZB aB bB cB","4674":"qB","5698":"UB","7490":"OB PB QB RB SB","7746":"TB pB","8705":"dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB","4097":"YB","4290":"pB UB qB","6148":"VB WB c XB"},E:{"1":"G FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB","4609":"B C lB mB","8193":"K L wB EC"},F:{"1":"PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB HC IC JC KC lB 2B LC mB","4097":"OB","6148":"KB LB MB NB"},G:{"1":"ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC","4097":"VC WC XC YC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"4097":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"2":"I oC pC qC","4097":"rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Variable fonts"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/vector-effect.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/vector-effect.js index a448bbb9d84..8ef730fa36a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/vector-effect.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/vector-effect.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","2":"F B 7B 8B 9B AC fB pB"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB"},H:{"1":"WC"},I:{"1":"H bC cC","16":"hB I XC YC ZC aC qB"},J:{"16":"D A"},K:{"1":"C U gB","2":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"SVG vector-effect: non-scaling-stroke"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","2":"F B HC IC JC KC lB 2B"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B"},H:{"1":"gC"},I:{"1":"H lC mC","16":"oB I hC iC jC kC 3B"},J:{"16":"D A"},K:{"1":"C c mB","2":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"SVG vector-effect: non-scaling-stroke"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/vibration.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/vibration.js index c8de7d83164..5bd49571b20 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/vibration.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/vibration.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A tB uB","33":"B C K L G"},D:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k l m n o p q r s t u"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"Vibration API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A 6B 7B","33":"B C K L G"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"Vibration API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/video.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/video.js index f65ca9a8bf4..d9fc904050e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/video.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/video.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","260":"I j J D E F A B C K L G M N O k tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A zB 0B 1B 2B mB","2":"yB lB","513":"B C K L G fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC","513":"LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","132":"XC YC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Video element"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","260":"I p J D E F A B C K L G M N O q 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A AC BC CC DC vB","2":"9B uB","513":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC","513":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","132":"hC iC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Video element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/videotracks.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/videotracks.js index add74cb320b..a233b3e4b77 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/videotracks.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/videotracks.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O","322":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x tB uB","194":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","322":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J yB lB zB"},F:{"2":"F B C G M N O k l m n o p q r s t u v w 7B 8B 9B AC fB pB BC gB","322":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"322":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"194":"rC"}},B:1,C:"Video Tracks"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O","322":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB","322":"GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J 9B uB AC"},F:{"2":"0 1 2 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","322":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"322":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"322":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"322":"wB"},R:{"322":"0C"},S:{"194":"1C"}},B:1,C:"Video Tracks"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/viewport-unit-variants.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/viewport-unit-variants.js index 7a61afe6496..ebc361b03b8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/viewport-unit-variants.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/viewport-unit-variants.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i","194":"vB wB xB"},E:{"1":"oB 6B","2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"Large, Small, and Dynamic viewport units"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b","194":"H"},C:{"1":"m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k","194":"l m n o b H sB tB 8B"},E:{"1":"yB zB 0B nB 1B GC","2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z HC IC JC KC lB 2B LC mB","194":"a"},G:{"1":"yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"Large, Small, and Dynamic viewport units"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/viewport-units.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/viewport-units.js index 27bf4832d9f..1d2708abe08 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/viewport-units.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/viewport-units.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","132":"F","260":"A B"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","260":"C K L G"},C:{"1":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N O k","260":"l m n o p q"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB","260":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC","516":"FC","772":"EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"260":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"Viewport units: vw, vh, vmin, vmax"}; +module.exports={A:{A:{"2":"J D E 4B","132":"F","260":"A B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","260":"C K L G"},C:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N O q","260":"r s t u v w"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC","260":"J"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC","516":"PC","772":"OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"260":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"Viewport units: vw, vh, vmin, vmax"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wai-aria.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wai-aria.js index d21916f1ef8..d0d032230ed 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wai-aria.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wai-aria.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D rB","4":"E F A B"},B:{"4":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"4":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"4":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"yB lB","4":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F","4":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"4":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"4":"WC"},I:{"2":"hB I XC YC ZC aC qB","4":"H bC cC"},J:{"2":"D A"},K:{"4":"A B C U fB pB gB"},L:{"4":"H"},M:{"4":"T"},N:{"4":"A B"},O:{"2":"dC"},P:{"4":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"4":"pC"},R:{"4":"qC"},S:{"4":"rC"}},B:2,C:"WAI-ARIA Accessibility features"}; +module.exports={A:{A:{"2":"J D 4B","4":"E F A B"},B:{"4":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"4":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"4":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"9B uB","4":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F","4":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"4":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"4":"gC"},I:{"2":"oB I hC iC jC kC 3B","4":"H lC mC"},J:{"2":"D A"},K:{"4":"A B C c lB 2B mB"},L:{"4":"H"},M:{"4":"b"},N:{"4":"A B"},O:{"4":"nC"},P:{"4":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"4":"wB"},R:{"4":"0C"},S:{"4":"1C"}},B:2,C:"WAI-ARIA Accessibility features"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wake-lock.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wake-lock.js index d2bbdda253a..a58d19d52dd 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wake-lock.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wake-lock.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"b c d e f g T h H i","2":"C K L G M N O","194":"P Q R S V W X Y Z a"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB","194":"XB YB ZB aB bB cB dB eB P Q R S V"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB 7B 8B 9B AC fB pB BC gB","194":"NB OB PB QB U RB SB TB UB VB WB XB YB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"mC nC oC","2":"I eC fC gC hC iC mB jC kC lC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:4,C:"Screen Wake Lock API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"Z a d e f g h i j k l m n o b H","2":"C K L G M N O","194":"P Q R S T U V W X Y"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB","194":"dB eB fB gB hB iB jB kB P Q R S T"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB HC IC JC KC lB 2B LC mB","194":"TB UB VB WB c XB YB ZB aB bB cB dB eB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"wC xC nB yC zC","2":"I oC pC qC rC sC vB tC uC vC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:4,C:"Screen Wake Lock API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wasm.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wasm.js index b88bf8e13a4..8c8483357f1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wasm.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wasm.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L","578":"G"},C:{"1":"IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB tB uB","194":"CB DB EB FB GB","1025":"HB"},D:{"1":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB","322":"GB HB IB JB KB LB"},E:{"1":"B C K L G fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB"},F:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","322":"3 4 5 6 7 8"},G:{"1":"LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","2":"I eC fC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"194":"rC"}},B:6,C:"WebAssembly"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L","578":"G"},C:{"1":"OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB 6B 7B","194":"IB JB KB LB MB","1025":"NB"},D:{"1":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB","322":"MB NB OB PB QB RB"},E:{"1":"B C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB"},F:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","322":"9 AB BB CB DB EB"},G:{"1":"VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"194":"1C"}},B:6,C:"WebAssembly"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wav.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wav.js index aea82308831..3193f470e26 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wav.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wav.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 9B AC fB pB BC gB","2":"F 7B 8B"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","16":"A"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"Wav audio format"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a JC KC lB 2B LC mB","2":"F HC IC"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","16":"A"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"Wav audio format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wbr-element.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wbr-element.js index 04ede56fc73..991a0e6843e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wbr-element.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wbr-element.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D rB","2":"E F A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"yB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","16":"F"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB"},H:{"1":"WC"},I:{"1":"hB I H ZC aC qB bC cC","16":"XC YC"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"wbr (word break opportunity) element"}; +module.exports={A:{A:{"1":"J D 4B","2":"E F A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"9B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","16":"F"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B"},H:{"1":"gC"},I:{"1":"oB I H jC kC 3B lC mC","16":"hC iC"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"wbr (word break opportunity) element"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-animation.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-animation.js index 91db2336d6e..60817e5963a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-animation.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-animation.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"V W X Y Z a b c d e f g T h H i","2":"C K L G M N O","260":"P Q R S"},C:{"1":"R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x tB uB","260":"iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB","516":"CB DB EB FB GB HB IB JB KB LB MB NB","580":"0 1 2 3 4 5 6 7 8 9 y z AB BB","2049":"bB cB dB eB P Q"},D:{"1":"V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","132":"1 2 3","260":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S"},E:{"1":"G 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B mB","1090":"B C K fB gB","2049":"L 3B 4B"},F:{"1":"XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n 7B 8B 9B AC fB pB BC gB","132":"o p q","260":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC","1090":"LC MC NC OC PC QC RC","2049":"SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"260":"dC"},P:{"260":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"260":"pC"},R:{"260":"qC"},S:{"516":"rC"}},B:5,C:"Web Animations API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","260":"P Q R S"},C:{"1":"R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","260":"pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB","516":"IB JB KB LB MB NB OB PB QB RB SB TB","580":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB","2049":"hB iB jB kB P Q"},D:{"1":"T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 I p J D E F A B C K L G M N O q r s t u v w x y z","132":"7 8 9","260":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S"},E:{"1":"G FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC vB","1090":"B C K lB mB","2049":"L wB EC"},F:{"1":"dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t HC IC JC KC lB 2B LC mB","132":"u v w","260":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC","1090":"VC WC XC YC ZC aC bC","2049":"cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"260":"nC"},P:{"260":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"260":"wB"},R:{"1":"0C"},S:{"516":"1C"}},B:5,C:"Web Animations API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-app-manifest.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-app-manifest.js index 0afeb899d78..a1505db417b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-app-manifest.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-app-manifest.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M","130":"N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB X Y Z a b c d e f g T h H i tB uB","578":"cB dB eB P Q R kB S V W"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC","260":"MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"2":"rC"}},B:5,C:"Add to home screen (A2HS)"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M","130":"N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","578":"iB jB kB P Q R rB S T U"},D:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC","260":"WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"Add to home screen (A2HS)"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-bluetooth.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-bluetooth.js index 3bb11aa8cea..96dde1f61c9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-bluetooth.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-bluetooth.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","1025":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","194":"AB BB CB DB EB FB GB HB","706":"IB JB KB","1025":"LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","450":"1 2 3 4","706":"5 6 7","1025":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC cC","1025":"H"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","1025":"U"},L:{"1025":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"fC gC hC iC mB jC kC lC mC nC oC","2":"I eC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Web Bluetooth"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","1025":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB","194":"GB HB IB JB KB LB MB NB","706":"OB PB QB","1025":"RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 F B C G M N O q r s t u v w x y z HC IC JC KC lB 2B LC mB","450":"7 8 9 AB","706":"BB CB DB","1025":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC mC","1025":"H"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","1025":"c"},L:{"1025":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1025":"nC"},P:{"1":"pC qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC"},Q:{"2":"wB"},R:{"1025":"0C"},S:{"2":"1C"}},B:7,C:"Web Bluetooth"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-serial.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-serial.js index b24b2ac5ec4..4afd3c215c3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-serial.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-serial.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"a b c d e f g T h H i","2":"C K L G M N O","66":"P Q R S V W X Y Z"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB","66":"eB P Q R S V W X Y Z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U 7B 8B 9B AC fB pB BC gB","66":"RB SB TB UB VB WB XB YB ZB aB bB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Web Serial API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","66":"P Q R S T U V W X"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB","66":"kB P Q R S T U V W X"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c HC IC JC KC lB 2B LC mB","66":"XB YB ZB aB bB cB dB eB fB gB hB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"Web Serial API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-share.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-share.js index a7e6e7561aa..520ddf7228f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-share.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/web-share.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P Q","516":"R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z","130":"O k l m n o p","1028":"a b c d e f g T h H i vB wB xB"},E:{"1":"L G 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB","2049":"K gB 3B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC","2049":"OC PC QC RC SC"},H:{"2":"WC"},I:{"2":"hB I XC YC ZC aC qB bC","258":"H cC"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","258":"U"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I","258":"eC fC gC"},Q:{"2":"pC"},R:{"16":"qC"},S:{"2":"rC"}},B:5,C:"Web Share API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"g h i j k l m n o b H","2":"C K L G M N O P Q","516":"R S T U V W X Y Z a d e f"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X","130":"O q r s t u v","1028":"Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"L G EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB","2049":"K mB wB"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC","2049":"YC ZC aC bC cC"},H:{"2":"gC"},I:{"2":"oB I hC iC jC kC 3B lC","258":"H mC"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","258":"c"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I","258":"oC pC qC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"Web Share API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webauthn.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webauthn.js index 8b51e4a2201..805b1770d1e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webauthn.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webauthn.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"O P Q R S V W X Y Z a b c d e f g T h H i","2":"C","226":"K L G M N"},C:{"1":"OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB tB uB"},D:{"1":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB"},E:{"1":"K L G 3B 4B 5B nB oB 6B","2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB","322":"gB"},F:{"1":"JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB 7B 8B 9B AC fB pB BC gB"},G:{"1":"UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC","578":"QC","2052":"TC","3076":"RC SC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:2,C:"Web Authentication API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C","226":"K L G M N"},C:{"1":"UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB 6B 7B"},D:{"1":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB"},E:{"1":"K L G wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F A B C 9B uB AC BC CC DC vB lB","322":"mB"},F:{"1":"PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB HC IC JC KC lB 2B LC mB"},G:{"1":"eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC","578":"aC","2052":"dC","3076":"bC cC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"yC zC","2":"I oC pC qC rC sC vB tC uC vC wC xC nB"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:2,C:"Web Authentication API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webcodecs.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webcodecs.js new file mode 100644 index 00000000000..35aa6da867f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webcodecs.js @@ -0,0 +1 @@ +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"f g h i j k l m n o b H","2":"C K L G M N O P Q R S T U V W X Y Z a d e"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"yC zC","2":"I oC pC qC rC sC vB tC uC vC wC xC nB"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"WebCodecs API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgl.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgl.js index d6fd81727b9..58482af2b54 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgl.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgl.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"rB","8":"J D E F A","129":"B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","129":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","129":"I j J D E F A B C K L G M N O k l m n o"},D:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D","129":"E F A B C K L G M N O k l m n o p q r s t u v w x"},E:{"1":"E F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB","129":"J D zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B 7B 8B 9B AC fB pB BC","129":"C G M N O gB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC FC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"1":"A","2":"D"},K:{"1":"C U gB","2":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"8":"A","129":"B"},O:{"129":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"129":"rC"}},B:6,C:"WebGL - 3D Canvas graphics"}; +module.exports={A:{A:{"2":"4B","8":"J D E F A","129":"B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","129":"C K L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","129":"I p J D E F A B C K L G M N O q r s t u"},D:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D","129":"0 1 2 3 E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"E F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB","129":"J D AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B HC IC JC KC lB 2B LC","129":"C G M N O mB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC PC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"1":"A","2":"D"},K:{"1":"C c mB","2":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"8":"A","129":"B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"129":"1C"}},B:6,C:"WebGL - 3D Canvas graphics"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgl2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgl2.js index 37bf1b8635f..fbd898c7e07 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgl2.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgl2.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p tB uB","194":"7 8 9","450":"0 1 2 3 4 5 6 q r s t u v w x y z","2242":"AB BB CB DB EB FB"},D:{"1":"LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z","578":"8 9 AB BB CB DB EB FB GB HB IB JB KB"},E:{"1":"G 5B nB oB 6B","2":"I j J D E F A yB lB zB 0B 1B 2B","1090":"B C K L mB fB gB 3B 4B"},F:{"1":"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB"},G:{"1":"VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC","1090":"NC OC PC QC RC SC TC UC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"gC hC iC mB jC kC lC mC nC oC","2":"I eC fC"},Q:{"578":"pC"},R:{"2":"qC"},S:{"2242":"rC"}},B:6,C:"WebGL 2.0"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v 6B 7B","194":"DB EB FB","450":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB","2242":"GB HB IB JB KB LB"},D:{"1":"RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB","578":"EB FB GB HB IB JB KB LB MB NB OB PB QB"},E:{"1":"G FC xB yB zB 0B nB 1B GC","2":"I p J D E F A 9B uB AC BC CC DC","1090":"B C K L vB lB mB wB EC"},F:{"1":"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB HC IC JC KC lB 2B LC mB"},G:{"1":"fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC","1090":"XC YC ZC aC bC cC dC eC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"qC rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"2242":"1C"}},B:6,C:"WebGL 2.0"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgpu.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgpu.js index 29d432db11e..d812adbfe77 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgpu.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webgpu.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P","578":"Q R S V W X Y Z a b c d e","1602":"f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB tB uB","194":"QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P","578":"Q R S V W X Y Z a b c d e","1602":"f g T h H i vB wB xB"},E:{"2":"I j J D E F A B yB lB zB 0B 1B 2B mB","322":"C K L G fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB 7B 8B 9B AC fB pB BC gB","578":"ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"194":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"WebGPU"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P","578":"Q R S T U V W X Y Z a d e","1602":"f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB 6B 7B","194":"WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P","578":"Q R S T U V W X Y Z a d e","1602":"f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B 9B uB AC BC CC DC vB","322":"C K L G lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB HC IC JC KC lB 2B LC mB","578":"fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"194":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:5,C:"WebGPU"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webhid.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webhid.js index 953535bb568..abfc0d0ef44 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webhid.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webhid.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"a b c d e f g T h H i","2":"C K L G M N O","66":"P Q R S V W X Y Z"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB","66":"eB P Q R S V W X Y Z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"cB dB eB P Q R kB S","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB 7B 8B 9B AC fB pB BC gB","66":"SB TB UB VB WB XB YB ZB aB bB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"WebHID API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O","66":"P Q R S T U V W X"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB","66":"kB P Q R S T U V W X"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB HC IC JC KC lB 2B LC mB","66":"YB ZB aB bB cB dB eB fB gB hB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"WebHID API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webkit-user-drag.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webkit-user-drag.js index 1c9968f71f6..04979238b55 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webkit-user-drag.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webkit-user-drag.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","132":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"16":"I j J D E F A B C K L G","132":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"F B C 7B 8B 9B AC fB pB BC gB","132":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"CSS -webkit-user-drag property"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","132":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"16":"I p J D E F A B C K L G","132":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"F B C HC IC JC KC lB 2B LC mB","132":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"CSS -webkit-user-drag property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webm.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webm.js index 6a560c93f5c..b446e32063b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webm.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webm.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E rB","520":"F A B"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","8":"C K","388":"L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","132":"I j J D E F A B C K L G M N O k l m n o p q r s"},D:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j","132":"J D E F A B C K L G M N O k l m n o p"},E:{"2":"yB","8":"I j lB zB","520":"J D E F A B C 0B 1B 2B mB fB","1028":"K gB 3B","7172":"L","8196":"G 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F 7B 8B 9B","132":"B C G AC fB pB BC gB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC","1028":"OC PC QC RC SC","3076":"TC UC VC nB oB"},H:{"2":"WC"},I:{"1":"H","2":"XC YC","132":"hB I ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"8":"A B"},O:{"1":"dC"},P:{"1":"eC fC gC hC iC mB jC kC lC mC nC oC","132":"I"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:6,C:"WebM video format"}; +module.exports={A:{A:{"2":"J D E 4B","520":"F A B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","8":"C K","388":"L G M N O"},C:{"1":"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","132":"I p J D E F A B C K L G M N O q r s t u v w x y"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p","132":"J D E F A B C K L G M N O q r s t u v"},E:{"1":"nB 1B GC","2":"9B","8":"I p uB AC","520":"J D E F A B C BC CC DC vB lB","1028":"K mB wB","7172":"L","8196":"G EC FC xB yB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F HC IC JC","132":"B C G KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC","1028":"YC ZC aC bC cC","3076":"dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"hC iC","132":"oB I jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"8":"A B"},O:{"1":"nC"},P:{"1":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC","132":"I"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:6,C:"WebM video format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webnfc.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webnfc.js index e795cfff365..0bee9b5fba7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webnfc.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webnfc.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O P a b c d e f g T h H i","450":"Q R S V W X Y Z"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P a b c d e f g T h H i vB wB xB","450":"Q R S V W X Y Z"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB 7B 8B 9B AC fB pB BC gB","450":"TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"257":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"Web NFC"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O P Y Z a d e f g h i j k l m n o b H","450":"Q R S T U V W X"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Y Z a d e f g h i j k l m n o b H sB tB 8B","450":"Q R S T U V W X"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB HC IC JC KC lB 2B LC mB","450":"ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"257":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"Web NFC"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webp.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webp.js index 76b818c29c3..2e3f8937623 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webp.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webp.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N"},C:{"1":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","8":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U"},D:{"1":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j","8":"J D E","132":"F A B C K L G M N O k l m n","260":"o p q r s t u v w"},E:{"2":"I j J D E F A B C K yB lB zB 0B 1B 2B mB fB gB 3B","516":"L G 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F 7B 8B 9B","8":"B AC","132":"fB pB BC","260":"C G M N O gB"},G:{"1":"TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC"},H:{"1":"WC"},I:{"1":"H qB bC cC","2":"hB XC YC ZC","132":"I aC"},J:{"2":"D A"},K:{"1":"C U fB pB gB","2":"A","132":"B"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"8":"rC"}},B:7,C:"WebP image format"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N"},C:{"1":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","8":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c"},D:{"1":"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p","8":"J D E","132":"F A B C K L G M N O q r s t","260":"0 1 2 u v w x y z"},E:{"1":"nB 1B GC","2":"I p J D E F A B C K 9B uB AC BC CC DC vB lB mB wB","516":"L G EC FC xB yB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F HC IC JC","8":"B KC","132":"lB 2B LC","260":"C G M N O mB"},G:{"1":"dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC"},H:{"1":"gC"},I:{"1":"H 3B lC mC","2":"oB hC iC jC","132":"I kC"},J:{"2":"D A"},K:{"1":"C c lB 2B mB","2":"A","132":"B"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"8":"1C"}},B:6,C:"WebP image format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/websockets.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/websockets.js index 28ce6ee471f..09eaac56f11 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/websockets.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/websockets.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB tB uB","132":"I j","292":"J D E F A"},D:{"1":"0 1 2 3 4 5 6 7 8 9 M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"I j J D E F A B C K L","260":"G"},E:{"1":"D E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","132":"j zB","260":"J 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F 7B 8B 9B AC","132":"B C fB pB BC"},G:{"1":"E EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC","132":"qB DC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","129":"D"},K:{"1":"U gB","2":"A","132":"B C fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Web Sockets"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB 6B 7B","132":"I p","292":"J D E F A"},D:{"1":"0 1 2 3 4 5 6 7 8 9 M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"I p J D E F A B C K L","260":"G"},E:{"1":"D E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","132":"p AC","260":"J BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F HC IC JC KC","132":"B C lB 2B LC"},G:{"1":"E OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC","132":"3B NC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","129":"D"},K:{"1":"c mB","2":"A","132":"B C lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Web Sockets"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webtransport.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webtransport.js new file mode 100644 index 00000000000..72944feda7c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webtransport.js @@ -0,0 +1 @@ +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"j k l m n o b H","2":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z g h","66":"a d e f"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB HC IC JC KC lB 2B LC mB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"1":"zC","2":"I oC pC qC rC sC vB tC uC vC wC xC nB yC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:5,C:"WebTransport"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webusb.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webusb.js index f61170575fc..78d5b002c85 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webusb.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webusb.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB","66":"JB KB LB MB NB iB OB"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"0 1 2 3 4 5 F B C G M N O k l m n o p q r s t u v w x y z 7B 8B 9B AC fB pB BC gB","66":"6 7 8 9 AB BB CB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"1":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"1":"hC iC mB jC kC lC mC nC oC","2":"I eC fC gC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:7,C:"WebUSB"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB","66":"PB QB RB SB TB pB UB"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB HC IC JC KC lB 2B LC mB","66":"CB DB EB FB GB HB IB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"1":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"rC sC vB tC uC vC wC xC nB yC zC","2":"I oC pC qC"},Q:{"2":"wB"},R:{"1":"0C"},S:{"2":"1C"}},B:7,C:"WebUSB"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webvr.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webvr.js index 8f9b0c0181d..f3e44f0b103 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webvr.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webvr.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L Q R S V W X Y Z a b c d e f g T h H i","66":"P","257":"G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB tB uB","129":"KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","194":"JB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB Q R S V W X Y Z a b c d e f g T h H i vB wB xB","66":"MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P"},E:{"2":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 F B C G M N O k l m n o p q r s t u v w x y z TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","66":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C U fB pB gB"},L:{"2":"H"},M:{"2":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"513":"I","516":"eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"2":"pC"},R:{"66":"qC"},S:{"2":"rC"}},B:7,C:"WebVR API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L Q R S T U V W X Y Z a d e f g h i j k l m n o b H","66":"P","257":"G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB 6B 7B","129":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","194":"PB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","66":"SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P"},E:{"2":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","66":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C c lB 2B mB"},L:{"2":"H"},M:{"2":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"513":"I","516":"oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:7,C:"WebVR API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webvtt.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webvtt.js index 41791f42c9a..271b663b021 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webvtt.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webvtt.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"sB hB I j J D E F A B C K L G M N O k l m n o tB uB","66":"p q r s t u v","129":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"1":"0 1 2 3 4 5 6 7 8 9 O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I j J D E F A B C K L G M N"},E:{"1":"J D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB DC EC"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB I XC YC ZC aC qB"},J:{"1":"A","2":"D"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"B","2":"A"},O:{"2":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"129":"rC"}},B:5,C:"WebVTT - Web Video Text Tracks"}; +module.exports={A:{A:{"1":"A B","2":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"5B oB I p J D E F A B C K L G M N O q r s t u 6B 7B","66":"0 1 v w x y z","129":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB","257":"QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I p J D E F A B C K L G M N"},E:{"1":"J D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB I hC iC jC kC 3B"},J:{"1":"A","2":"D"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"B","2":"A"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"129":"1C"}},B:4,C:"WebVTT - Web Video Text Tracks"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webworkers.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webworkers.js index 709aa549b10..8d6e620d789 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webworkers.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webworkers.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","2":"rB","8":"J D E F"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","8":"sB hB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","8":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S AC fB pB BC gB","2":"F 7B","8":"8B 9B"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"2":"WC"},I:{"1":"H XC bC cC","2":"hB I YC ZC aC qB"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","8":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Web Workers"}; +module.exports={A:{A:{"1":"A B","2":"4B","8":"J D E F"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","8":"5B oB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","8":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a KC lB 2B LC mB","2":"F HC","8":"IC JC"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"2":"gC"},I:{"1":"H hC lC mC","2":"oB I iC jC kC 3B"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","8":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Web Workers"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webxr.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webxr.js index a9a1f81753d..24257e4f5a3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webxr.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/webxr.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"2":"C K L G M N O","132":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"2":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB tB uB","322":"dB eB P Q R kB S V W X Y Z a b c d e f g T h H i"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U","66":"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB","132":"P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"2":"I j J D E F A B C yB lB zB 0B 1B 2B mB fB gB","578":"K L G 3B 4B 5B nB oB 6B"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB 7B 8B 9B AC fB pB BC gB","66":"HB IB JB KB LB MB NB OB PB QB U RB","132":"SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S"},G:{"2":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"2":"WC"},I:{"2":"hB I H XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"2":"A B C fB pB gB","132":"U"},L:{"132":"H"},M:{"322":"T"},N:{"2":"A B"},O:{"2":"dC"},P:{"2":"I eC fC gC hC iC mB jC","132":"kC lC mC nC oC"},Q:{"2":"pC"},R:{"2":"qC"},S:{"2":"rC"}},B:5,C:"WebXR Device API"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"2":"C K L G M N O","132":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB 6B 7B","322":"jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c","66":"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB","132":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"2":"I p J D E F A B C 9B uB AC BC CC DC vB lB mB","578":"K L G wB EC FC xB yB zB 0B nB 1B GC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB HC IC JC KC lB 2B LC mB","66":"NB OB PB QB RB SB TB UB VB WB c XB","132":"YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a"},G:{"2":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"2":"gC"},I:{"2":"oB I H hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"2":"A B C lB 2B mB","132":"c"},L:{"132":"H"},M:{"322":"b"},N:{"2":"A B"},O:{"2":"nC"},P:{"2":"I oC pC qC rC sC vB tC","132":"uC vC wC xC nB yC zC"},Q:{"2":"wB"},R:{"2":"0C"},S:{"2":"1C"}},B:4,C:"WebXR Device API"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/will-change.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/will-change.js index 10c8512eca6..3306b0739a4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/will-change.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/will-change.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"P Q R S V W X Y Z a b c d e f g T h H i","2":"C K L G M N O"},C:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L G M N O k l m n o p q r s t tB uB","194":"0 u v w x y z"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n o 7B 8B 9B AC fB pB BC gB"},G:{"1":"IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"CSS will-change property"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K L G M N O"},C:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B","194":"0 1 2 3 4 5 6"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t u HC IC JC KC lB 2B LC mB"},G:{"1":"SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS will-change property"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/woff.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/woff.js index c86a004e341..f3c2250a0d6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/woff.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/woff.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i uB","2":"sB hB tB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"I"},E:{"1":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I j yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S fB pB BC gB","2":"F B 7B 8B 9B AC"},G:{"1":"E DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB"},H:{"2":"WC"},I:{"1":"H bC cC","2":"hB XC YC ZC aC qB","130":"I"},J:{"1":"D A"},K:{"1":"B C U fB pB gB","2":"A"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:2,C:"WOFF - Web Open Font Format"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 7B","2":"5B oB 6B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"I"},E:{"1":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p 9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a lB 2B LC mB","2":"F B HC IC JC KC"},G:{"1":"E NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B"},H:{"2":"gC"},I:{"1":"H lC mC","2":"oB hC iC jC kC 3B","130":"I"},J:{"1":"D A"},K:{"1":"B C c lB 2B mB","2":"A"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"WOFF - Web Open Font Format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/woff2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/woff2.js index 933d00293f8..b33525f4e20 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/woff2.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/woff2.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F A B rB"},B:{"1":"L G M N O P Q R S V W X Y Z a b c d e f g T h H i","2":"C K"},C:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"0 1 2 3 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z tB uB"},D:{"1":"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","2":"0 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"C K L G gB 3B 4B 5B nB oB 6B","2":"I j J D E F yB lB zB 0B 1B 2B","132":"A B mB fB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C G M N O k l m n 7B 8B 9B AC fB pB BC gB"},G:{"1":"JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"E lB CC qB DC EC FC GC HC IC"},H:{"2":"WC"},I:{"1":"H","2":"hB I XC YC ZC aC qB bC cC"},J:{"2":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"2":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"WOFF 2.0 - Web Open Font Format"}; +module.exports={A:{A:{"2":"J D E F A B 4B"},B:{"1":"L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","2":"C K"},C:{"1":"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z 6B 7B"},D:{"1":"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","2":"0 1 2 3 4 5 6 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"C K L G mB wB EC FC xB yB zB 0B nB 1B GC","2":"I p J D E F 9B uB AC BC CC DC","132":"A B vB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C G M N O q r s t HC IC JC KC lB 2B LC mB"},G:{"1":"TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"E uB MC 3B NC OC PC QC RC SC"},H:{"2":"gC"},I:{"1":"H","2":"oB I hC iC jC kC 3B lC mC"},J:{"2":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"2":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:2,C:"WOFF 2.0 - Web Open Font Format"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/word-break.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/word-break.js index fbe225b80b1..1337e72b88e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/word-break.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/word-break.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"J D E F A B rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB I j J D E F A B C K L tB uB"},D:{"1":"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","4":"0 1 2 3 4 5 6 7 8 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z"},E:{"1":"F A B C K L G 2B mB fB gB 3B 4B 5B nB oB 6B","4":"I j J D E yB lB zB 0B 1B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","2":"F B C 7B 8B 9B AC fB pB BC gB","4":"G M N O k l m n o p q r s t u v"},G:{"1":"HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","4":"E lB CC qB DC EC FC GC"},H:{"2":"WC"},I:{"1":"H","4":"hB I XC YC ZC aC qB bC cC"},J:{"4":"D A"},K:{"1":"U","2":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"4":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"4":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:5,C:"CSS3 word-break"}; +module.exports={A:{A:{"1":"J D E F A B 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB I p J D E F A B C K L 6B 7B"},D:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","4":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB"},E:{"1":"F A B C K L G DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","4":"I p J D E 9B uB AC BC CC"},F:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","2":"F B C HC IC JC KC lB 2B LC mB","4":"0 1 G M N O q r s t u v w x y z"},G:{"1":"RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","4":"E uB MC 3B NC OC PC QC"},H:{"2":"gC"},I:{"1":"H","4":"oB I hC iC jC kC 3B lC mC"},J:{"4":"D A"},K:{"1":"c","2":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"CSS3 word-break"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wordwrap.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wordwrap.js index 07e587221be..e312687fb1b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wordwrap.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/wordwrap.js @@ -1 +1 @@ -module.exports={A:{A:{"4":"J D E F A B rB"},B:{"1":"O P Q R S V W X Y Z a b c d e f g T h H i","4":"C K L G M N"},C:{"1":"EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","4":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","4":"I j J D E F A B C K L G M N O k l m n"},E:{"1":"D E F A B C K L G 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","4":"I j J yB lB zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F 7B 8B","4":"B C 9B AC fB pB BC"},G:{"1":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","4":"lB CC qB DC EC"},H:{"4":"WC"},I:{"1":"H bC cC","4":"hB I XC YC ZC aC qB"},J:{"1":"A","4":"D"},K:{"1":"U","4":"A B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"4":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"4":"rC"}},B:5,C:"CSS3 Overflow-wrap"}; +module.exports={A:{A:{"4":"J D E F A B 4B"},B:{"1":"O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H","4":"C K L G M N"},C:{"1":"KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","4":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","4":"I p J D E F A B C K L G M N O q r s t"},E:{"1":"D E F A B C K L G BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","4":"I p J 9B uB AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F HC IC","4":"B C JC KC lB 2B LC"},G:{"1":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","4":"uB MC 3B NC OC"},H:{"4":"gC"},I:{"1":"H lC mC","4":"oB I hC iC jC kC 3B"},J:{"1":"A","4":"D"},K:{"1":"c","4":"A B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"4":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"4":"1C"}},B:4,C:"CSS3 Overflow-wrap"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/x-doc-messaging.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/x-doc-messaging.js index d57b5832efb..ca4b9fbca60 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/x-doc-messaging.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/x-doc-messaging.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D rB","132":"E F","260":"A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB","2":"sB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"yB lB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB","2":"F"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"4":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"Cross-document messaging"}; +module.exports={A:{A:{"2":"J D 4B","132":"E F","260":"A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B","2":"5B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"9B uB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB","2":"F"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"4":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"Cross-document messaging"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/x-frame-options.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/x-frame-options.js index 8aab9575636..a5b8eb6d07a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/x-frame-options.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/x-frame-options.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"E F A B","2":"J D rB"},B:{"1":"C K L G M N O","4":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB","4":"I j J D E F A B C K L G M N WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","16":"sB hB tB uB"},D:{"4":"0 1 2 3 4 5 6 7 8 9 r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J D E F A B C K L G M N O k l m n o p q"},E:{"4":"J D E F A B C K L G zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B","16":"I j yB lB"},F:{"4":"0 1 2 3 4 5 6 7 8 9 C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S BC gB","16":"F B 7B 8B 9B AC fB pB"},G:{"4":"E FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","16":"lB CC qB DC EC"},H:{"2":"WC"},I:{"4":"I H aC qB bC cC","16":"hB XC YC ZC"},J:{"4":"D A"},K:{"4":"U gB","16":"A B C fB pB"},L:{"4":"H"},M:{"4":"T"},N:{"1":"A B"},O:{"4":"dC"},P:{"4":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"4":"pC"},R:{"4":"qC"},S:{"1":"rC"}},B:6,C:"X-Frame-Options HTTP header"}; +module.exports={A:{A:{"1":"E F A B","2":"J D 4B"},B:{"1":"C K L G M N O","4":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB","4":"I p J D E F A B C K L G M N cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","16":"5B oB 6B 7B"},D:{"4":"0 1 2 3 4 5 6 7 8 9 x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J D E F A B C K L G M N O q r s t u v w"},E:{"4":"J D E F A B C K L G AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","16":"I p 9B uB"},F:{"4":"0 1 2 3 4 5 6 7 8 9 C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a LC mB","16":"F B HC IC JC KC lB 2B"},G:{"4":"E PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","16":"uB MC 3B NC OC"},H:{"2":"gC"},I:{"4":"I H kC 3B lC mC","16":"oB hC iC jC"},J:{"4":"D A"},K:{"4":"c mB","16":"A B C lB 2B"},L:{"4":"H"},M:{"4":"b"},N:{"1":"A B"},O:{"4":"nC"},P:{"4":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"4":"wB"},R:{"4":"0C"},S:{"1":"1C"}},B:6,C:"X-Frame-Options HTTP header"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhr2.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhr2.js index 5e439d41399..4810f97bb5e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhr2.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhr2.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"J D E F rB","132":"A B"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","2":"sB hB","260":"A B","388":"J D E F","900":"I j tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","16":"I j J","132":"u v","388":"D E F A B C K L G M N O k l m n o p q r s t"},E:{"1":"E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","2":"I yB lB","132":"D 0B","388":"j J zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S gB","2":"F B 7B 8B 9B AC fB pB BC","132":"G M N"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","2":"lB CC qB","132":"FC","388":"DC EC"},H:{"2":"WC"},I:{"1":"H cC","2":"XC YC ZC","388":"bC","900":"hB I aC qB"},J:{"132":"A","388":"D"},K:{"1":"C U gB","2":"A B fB pB"},L:{"1":"H"},M:{"1":"T"},N:{"132":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:1,C:"XMLHttpRequest advanced features"}; +module.exports={A:{A:{"2":"J D E F 4B","132":"A B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","2":"5B oB","260":"A B","388":"J D E F","900":"I p 6B 7B"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","16":"I p J","132":"0 1","388":"D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","2":"I 9B uB","132":"D BC","388":"p J AC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a mB","2":"F B HC IC JC KC lB 2B LC","132":"G M N"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","2":"uB MC 3B","132":"PC","388":"NC OC"},H:{"2":"gC"},I:{"1":"H mC","2":"hC iC jC","388":"lC","900":"oB I kC 3B"},J:{"132":"A","388":"D"},K:{"1":"C c mB","2":"A B lB 2B"},L:{"1":"H"},M:{"1":"b"},N:{"132":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"XMLHttpRequest advanced features"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhtml.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhtml.js index e758e00d38a..0b52a0d7456 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhtml.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhtml.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"F A B","2":"J D E rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"1":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"1":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"1":"WC"},I:{"1":"hB I H XC YC ZC aC qB bC cC"},J:{"1":"D A"},K:{"1":"A B C U fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"2":"qC"},S:{"1":"rC"}},B:1,C:"XHTML served as application/xhtml+xml"}; +module.exports={A:{A:{"1":"F A B","2":"J D E 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"1":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"1":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"1":"gC"},I:{"1":"oB I H hC iC jC kC 3B lC mC"},J:{"1":"D A"},K:{"1":"A B C c lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:1,C:"XHTML served as application/xhtml+xml"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhtmlsmil.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhtmlsmil.js index 35819edf04a..7320e4a798f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhtmlsmil.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xhtmlsmil.js @@ -1 +1 @@ -module.exports={A:{A:{"2":"F A B rB","4":"J D E"},B:{"2":"C K L G M N O","8":"P Q R S V W X Y Z a b c d e f g T h H i"},C:{"8":"0 1 2 3 4 5 6 7 8 9 sB hB I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i tB uB"},D:{"8":"0 1 2 3 4 5 6 7 8 9 I j J D E F A B C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB"},E:{"8":"I j J D E F A B C K L G yB lB zB 0B 1B 2B mB fB gB 3B 4B 5B nB oB 6B"},F:{"8":"0 1 2 3 4 5 6 7 8 9 F B C G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S 7B 8B 9B AC fB pB BC gB"},G:{"8":"E lB CC qB DC EC FC GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB"},H:{"8":"WC"},I:{"8":"hB I H XC YC ZC aC qB bC cC"},J:{"8":"D A"},K:{"8":"A B C U fB pB gB"},L:{"8":"H"},M:{"8":"T"},N:{"2":"A B"},O:{"8":"dC"},P:{"8":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"8":"pC"},R:{"8":"qC"},S:{"8":"rC"}},B:7,C:"XHTML+SMIL animation"}; +module.exports={A:{A:{"2":"F A B 4B","4":"J D E"},B:{"2":"C K L G M N O","8":"P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"8":"0 1 2 3 4 5 6 7 8 9 5B oB I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 6B 7B"},D:{"8":"0 1 2 3 4 5 6 7 8 9 I p J D E F A B C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B"},E:{"8":"I p J D E F A B C K L G 9B uB AC BC CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC"},F:{"8":"0 1 2 3 4 5 6 7 8 9 F B C G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a HC IC JC KC lB 2B LC mB"},G:{"8":"E uB MC 3B NC OC PC QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B"},H:{"8":"gC"},I:{"8":"oB I H hC iC jC kC 3B lC mC"},J:{"8":"D A"},K:{"8":"A B C c lB 2B mB"},L:{"8":"H"},M:{"8":"b"},N:{"2":"A B"},O:{"8":"nC"},P:{"8":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"8":"wB"},R:{"8":"0C"},S:{"8":"1C"}},B:7,C:"XHTML+SMIL animation"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xml-serializer.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xml-serializer.js index 0c515f129e4..750144ffe2b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xml-serializer.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/features/xml-serializer.js @@ -1 +1 @@ -module.exports={A:{A:{"1":"A B","260":"J D E F rB"},B:{"1":"C K L G M N O P Q R S V W X Y Z a b c d e f g T h H i"},C:{"1":"0 1 2 3 4 5 6 7 8 9 C K L G M N O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S V W X Y Z a b c d e f g T h H i","132":"B","260":"sB hB I j J D tB uB","516":"E F A"},D:{"1":"0 1 2 3 4 5 6 7 8 9 w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB iB OB jB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R S V W X Y Z a b c d e f g T h H i vB wB xB","132":"I j J D E F A B C K L G M N O k l m n o p q r s t u v"},E:{"1":"E F A B C K L G 1B 2B mB fB gB 3B 4B 5B nB oB 6B","132":"I j J D yB lB zB 0B"},F:{"1":"0 1 2 3 4 5 6 7 8 9 O k l m n o p q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB U RB SB TB UB VB WB XB YB ZB aB bB cB dB eB P Q R kB S","16":"F 7B","132":"B C G M N 8B 9B AC fB pB BC gB"},G:{"1":"E GC HC IC JC KC LC MC NC OC PC QC RC SC TC UC VC nB oB","132":"lB CC qB DC EC FC"},H:{"132":"WC"},I:{"1":"H bC cC","132":"hB I XC YC ZC aC qB"},J:{"132":"D A"},K:{"1":"U","16":"A","132":"B C fB pB gB"},L:{"1":"H"},M:{"1":"T"},N:{"1":"A B"},O:{"1":"dC"},P:{"1":"I eC fC gC hC iC mB jC kC lC mC nC oC"},Q:{"1":"pC"},R:{"1":"qC"},S:{"1":"rC"}},B:4,C:"DOM Parsing and Serialization"}; +module.exports={A:{A:{"1":"A B","260":"J D E F 4B"},B:{"1":"C K L G M N O P Q R S T U V W X Y Z a d e f g h i j k l m n o b H"},C:{"1":"0 1 2 3 4 5 6 7 8 9 C K L G M N O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a d e f g h i j k l m n o b H sB tB","132":"B","260":"5B oB I p J D 6B 7B","516":"E F A"},D:{"1":"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB pB UB qB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R S T U V W X Y Z a d e f g h i j k l m n o b H sB tB 8B","132":"0 1 I p J D E F A B C K L G M N O q r s t u v w x y z"},E:{"1":"E F A B C K L G CC DC vB lB mB wB EC FC xB yB zB 0B nB 1B GC","132":"I p J D 9B uB AC BC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 O q r s t u v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB c XB YB ZB aB bB cB dB eB fB gB hB iB jB kB P Q R rB S T U V W X Y Z a","16":"F HC","132":"B C G M N IC JC KC lB 2B LC mB"},G:{"1":"E QC RC SC TC UC VC WC XC YC ZC aC bC cC dC eC fC xB yB zB 0B nB 1B","132":"uB MC 3B NC OC PC"},H:{"132":"gC"},I:{"1":"H lC mC","132":"oB I hC iC jC kC 3B"},J:{"132":"D A"},K:{"1":"c","16":"A","132":"B C lB 2B mB"},L:{"1":"H"},M:{"1":"b"},N:{"1":"A B"},O:{"1":"nC"},P:{"1":"I oC pC qC rC sC vB tC uC vC wC xC nB yC zC"},Q:{"1":"wB"},R:{"1":"0C"},S:{"1":"1C"}},B:4,C:"DOM Parsing and Serialization"}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AD.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AD.js index bf8d330c641..10ba90c8894 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AD.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AD.js @@ -1 +1 @@ -module.exports={C:{"52":0.02665,"68":0.00381,"72":0.03046,"77":0.00381,"78":0.07614,"88":0.01142,"90":0.02284,"91":0.02284,"92":0.01523,"94":0.01904,"95":0.03046,"96":0.68145,"97":0.9251,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 79 80 81 82 83 84 85 86 87 89 93 98 99 3.5 3.6"},D:{"39":0.00381,"40":0.00381,"49":0.25126,"56":0.00761,"61":0.00761,"67":0.00381,"68":0.01142,"69":0.00381,"70":0.01904,"75":0.00761,"77":0.01523,"79":0.12182,"80":0.03426,"81":0.01904,"83":0.00761,"85":0.03046,"86":0.01142,"87":0.01523,"88":0.00761,"89":0.03046,"90":0.01142,"91":0.20939,"92":0.06472,"94":0.04949,"95":0.01904,"96":0.23603,"97":5.36026,"98":12.37656,"99":0.06472,"101":0.01142,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 41 42 43 44 45 46 47 48 50 51 52 53 54 55 57 58 59 60 62 63 64 65 66 71 72 73 74 76 78 84 93 100"},F:{"36":0.00381,"57":0.06091,"82":0.25507,"83":0.60151,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00381,"87":0.01142,"90":0.00381,"92":0.00381,"95":0.00761,"96":0.03426,"97":0.43019,"98":1.73219,_:"12 13 14 16 17 18 79 80 81 83 84 85 86 88 89 91 93 94"},E:{"4":0,"12":0.00761,"13":0.02665,"14":0.23603,"15":0.39974,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.01142,"11.1":0.01523,"12.1":0.1104,"13.1":0.3274,"14.1":1.43143,"15.1":1.86924,"15.2-15.3":4.71687,"15.4":0.11802},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.02988,"9.0-9.2":0,"9.3":0.05603,"10.0-10.2":0,"10.3":0.0747,"11.0-11.2":0,"11.3-11.4":0.01494,"12.0-12.1":0.00374,"12.2-12.5":0.33243,"13.0-13.1":0.01121,"13.2":0.00374,"13.3":0.04482,"13.4-13.7":0.24652,"14.0-14.4":0.34363,"14.5-14.8":2.84992,"15.0-15.1":6.7793,"15.2-15.3":26.34403,"15.4":0.19049},P:{"4":0.05226,"5.0-5.4":0.35318,"6.2-6.4":0.02066,"7.2-7.4":0.01067,"8.2":0.01248,"9.2":0.01067,"10.1":0.02066,"11.1-11.2":0.0209,"12.0":0.02135,"13.0":0.17768,"14.0":0.03136,"15.0":0.0209,"16.0":1.1706},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.0014,"4.4":0,"4.4.3-4.4.4":0.02337},A:{"11":0.14467,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.17338},Q:{"10.4":0},O:{"0":0},H:{"0":0.10552},L:{"0":21.49973},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00442,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00442,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01326,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00442,"87":0,"88":0,"89":0,"90":0,"91":0.00884,"92":0,"93":0.00442,"94":0,"95":0.03095,"96":0,"97":0.00442,"98":0,"99":0,"100":0,"101":0,"102":0.03537,"103":0.95494,"104":0.14589,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00442,"39":0,"40":0,"41":0,"42":0,"43":0.00442,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.09726,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00442,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.02211,"74":0,"75":0,"76":0,"77":0.00884,"78":0.00442,"79":0.02653,"80":0,"81":0.00442,"83":0.00442,"84":0.00442,"85":0,"86":0.00442,"87":0.00884,"88":0,"89":0.01326,"90":0.00442,"91":0,"92":0.03537,"93":0,"94":0.00442,"95":0.00884,"96":0.03095,"97":0.04421,"98":0.00442,"99":0.04863,"100":0.03979,"101":0.03537,"102":0.06632,"103":2.27239,"104":7.06918,"105":0.02211,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.00442,"65":0,"66":0,"67":0,"68":0.00442,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00884,"87":0,"88":0.00442,"89":0.30947,"90":0.06189,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0.00442,"88":0,"89":0,"90":0,"91":0,"92":0.00442,"93":0,"94":0,"95":0.00442,"96":0,"97":0.00884,"98":0,"99":0,"100":0.00442,"101":0.00442,"102":0.01768,"103":0.23873,"104":1.04336,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00442,"14":0.07074,"15":0.03095,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.03979,"12.1":0.01326,"13.1":0.09726,"14.1":0.38021,"15.1":0.14589,"15.2-15.3":0.15474,"15.4":0.45536,"15.5":1.54293,"15.6":2.75428,"16.0":0.084},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.0189,"9.0-9.2":0,"9.3":0.08975,"10.0-10.2":0,"10.3":0.14644,"11.0-11.2":0.00945,"11.3-11.4":0.00472,"12.0-12.1":0,"12.2-12.5":0.37791,"13.0-13.1":0,"13.2":0.01417,"13.3":0.01417,"13.4-13.7":0.17951,"14.0-14.4":0.26454,"14.5-14.8":0.94951,"15.0-15.1":0.76055,"15.2-15.3":1.67227,"15.4":2.06907,"15.5":15.98572,"15.6":24.2195,"16.0":0.44405},P:{"4":0.02062,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0.01031,"9.2":0,"10.1":0,"11.1-11.2":0.01031,"12.0":0,"13.0":0.01031,"14.0":0.01031,"15.0":0,"16.0":0.02062,"17.0":0.2784,"18.0":0.79396},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.12632},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01768,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":30.86925},S:{"2.5":0},R:{_:"0"},M:{"0":0.63043},Q:{"10.4":0},O:{"0":0},H:{"0":0.07395}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AE.js index ca70f79a3e1..aa5a493208b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AE.js @@ -1 +1 @@ -module.exports={C:{"52":0.01711,"68":0.01711,"78":0.01141,"84":0.0057,"91":0.01141,"94":0.0057,"95":0.01141,"96":0.23386,"97":0.35365,"98":0.01711,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 87 88 89 90 92 93 99 3.5 3.6"},D:{"35":0.33083,"38":0.01711,"49":0.02282,"64":0.01141,"65":0.01711,"67":0.0057,"69":0.01141,"70":0.01141,"72":0.0057,"75":0.01711,"76":0.03422,"77":0.01141,"78":0.0057,"79":0.05704,"80":0.02282,"81":0.01141,"83":0.01141,"84":0.05134,"85":0.02852,"86":0.03422,"87":0.11408,"88":0.01141,"89":0.03993,"90":0.03422,"91":0.15401,"92":0.07415,"93":0.2852,"94":0.10838,"95":0.06845,"96":0.80997,"97":14.85322,"98":29.88326,"99":0.03422,"100":0.03993,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 66 68 71 73 74 101"},F:{"28":0.0057,"82":0.1426,"83":0.4221,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01711,"84":0.0057,"92":0.02282,"93":0.0057,"94":0.0057,"95":0.01711,"96":0.07415,"97":1.32903,"98":3.33684,_:"12 13 14 15 16 17 79 80 81 83 85 86 87 88 89 90 91"},E:{"4":0,"12":0.0057,"13":0.03422,"14":0.18823,"15":0.17112,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.01141,"12.1":0.03993,"13.1":0.11978,"14.1":0.68448,"15.1":0.32513,"15.2-15.3":0.59892,"15.4":0.01141},G:{"8":0.00181,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00632,"6.0-6.1":0.0009,"7.0-7.1":0.01174,"8.1-8.4":0.00271,"9.0-9.2":0,"9.3":0.08577,"10.0-10.2":0.00271,"10.3":0.05236,"11.0-11.2":0.07313,"11.3-11.4":0.01174,"12.0-12.1":0.01174,"12.2-12.5":0.30785,"13.0-13.1":0.02438,"13.2":0.00451,"13.3":0.03521,"13.4-13.7":0.11556,"14.0-14.4":0.45862,"14.5-14.8":1.66926,"15.0-15.1":1.41197,"15.2-15.3":4.6873,"15.4":0.04604},P:{"4":0.04366,"5.0-5.4":0.0102,"6.2-6.4":0.01085,"7.2-7.4":0.03275,"8.2":0.02073,"9.2":0.0217,"10.1":0.11002,"11.1-11.2":0.03275,"12.0":0.01085,"13.0":0.03275,"14.0":0.06549,"15.0":0.04366,"16.0":1.48452},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00229,"4.4":0,"4.4.3-4.4.4":0.01489},A:{"11":0.12549,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.0043},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.07733},Q:{"10.4":0},O:{"0":2.93417},H:{"0":0.57347},L:{"0":27.90141},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00346,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00346,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.04156,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00346,"79":0.00346,"80":0.00693,"81":0.00346,"82":0,"83":0.00346,"84":0.00346,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00693,"92":0,"93":0.00346,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00346,"100":0.00346,"101":0.00346,"102":0.01039,"103":0.28397,"104":0.04502,"105":0.00346,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.16276,"36":0,"37":0,"38":0.00346,"39":0,"40":0,"41":0,"42":0,"43":0.01385,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00693,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00346,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00346,"66":0.00346,"67":0,"68":0.00346,"69":0.00346,"70":0,"71":0.00346,"72":0,"73":0.00346,"74":0.00346,"75":0.01039,"76":0.02078,"77":0.00346,"78":0.00346,"79":0.02424,"80":0.00346,"81":0.01039,"83":0.01385,"84":0.02078,"85":0.0277,"86":0.02424,"87":0.03117,"88":0.00346,"89":0.00693,"90":0.00693,"91":0.01385,"92":0.02424,"93":0.03117,"94":0.01039,"95":0.00693,"96":0.01732,"97":0.01385,"98":0.01039,"99":0.01732,"100":0.02424,"101":0.0277,"102":0.0935,"103":2.02932,"104":5.67586,"105":0.02424,"106":0.00346,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00346,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00346,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00346,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01039,"64":0.01385,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00346,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00346,"85":0.00346,"86":0.00346,"87":0.00346,"88":0.00346,"89":0.22856,"90":0.02078,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00346,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00346,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00346,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00346,"101":0.01385,"102":0.00693,"103":0.24241,"104":0.73762,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00693,"14":0.03809,"15":0.01385,_:"0","3.1":0,"3.2":0,"5.1":0.00346,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00346,"11.1":0.00346,"12.1":0.01039,"13.1":0.04156,"14.1":0.12467,"15.1":0.02424,"15.2-15.3":0.02078,"15.4":0.08311,"15.5":0.23895,"15.6":0.33245,"16.0":0.00693},G:{"8":0.0022,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0088,"6.0-6.1":0.0022,"7.0-7.1":0.0198,"8.1-8.4":0,"9.0-9.2":0.0066,"9.3":0.20017,"10.0-10.2":0.0044,"10.3":0.17158,"11.0-11.2":0.0242,"11.3-11.4":0.0198,"12.0-12.1":0.0242,"12.2-12.5":0.61151,"13.0-13.1":0.0242,"13.2":0.011,"13.3":0.04399,"13.4-13.7":0.16058,"14.0-14.4":0.47953,"14.5-14.8":1.21643,"15.0-15.1":0.41354,"15.2-15.3":0.60051,"15.4":0.99206,"15.5":4.84371,"15.6":11.86291,"16.0":0.24417},P:{"4":0.13295,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.05114,"8.2":0,"9.2":0.01023,"10.1":0,"11.1-11.2":0.02045,"12.0":0.01023,"13.0":0.03068,"14.0":0.04091,"15.0":0.02045,"16.0":0.08182,"17.0":0.84886,"18.0":1.28863},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01885,"4.4":0,"4.4.3-4.4.4":0.13193},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04848,"5.5":0},J:{"7":0,"10":0.01307},N:{"10":0,"11":0},L:{"0":58.27187},S:{"2.5":0},R:{_:"0"},M:{"0":0.10459},Q:{"10.4":0},O:{"0":2.70632},H:{"0":0.53224}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AF.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AF.js index 25875025dca..40dd46ab8db 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AF.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AF.js @@ -1 +1 @@ -module.exports={C:{"6":0.00238,"25":0.00475,"29":0.0095,"30":0.00238,"37":0.00238,"38":0.01188,"40":0.00713,"41":0.00238,"43":0.00238,"44":0.00475,"45":0.00238,"47":0.01663,"48":0.02138,"49":0.00475,"50":0.01188,"52":0.00713,"56":0.01901,"57":0.00238,"60":0.00238,"63":0.00475,"64":0.00238,"65":0.00238,"71":0.00238,"72":0.01663,"78":0.01901,"83":0.00238,"85":0.00475,"86":0.00238,"87":0.00475,"88":0.03326,"89":0.04039,"90":0.00475,"91":0.01901,"93":0.00713,"94":0.01663,"95":0.02138,"96":0.44194,"97":0.65102,"98":0.01663,_:"2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 31 32 33 34 35 36 39 42 46 51 53 54 55 58 59 61 62 66 67 68 69 70 73 74 75 76 77 79 80 81 82 84 92 99 3.5 3.6"},D:{"18":0.00238,"23":0.00238,"24":0.00475,"25":0.00238,"26":0.00238,"29":0.00238,"30":0.0095,"34":0.00713,"36":0.00475,"37":0.00713,"38":0.00713,"39":0.00713,"42":0.00238,"43":0.05702,"44":0.00238,"45":0.00475,"46":0.00238,"47":0.01901,"48":0.00238,"49":0.00475,"50":0.00475,"51":0.01188,"52":0.01426,"53":0.00475,"55":0.0095,"56":0.00713,"57":0.00713,"58":0.00238,"59":0.00238,"60":0.00475,"62":0.02138,"63":0.02138,"64":0.01188,"65":0.01426,"66":0.0095,"67":0.01663,"68":0.00475,"69":0.00475,"70":0.01426,"71":0.01663,"72":0.03089,"73":0.01426,"74":0.01663,"75":0.00713,"76":0.01663,"77":0.10692,"78":0.02614,"79":0.02376,"80":0.03564,"81":0.06653,"83":0.07603,"84":0.03564,"85":0.02376,"86":0.05227,"87":0.06653,"88":0.02138,"89":0.02614,"90":0.02614,"91":0.04039,"92":0.07128,"93":0.39204,"94":0.11642,"95":0.06653,"96":0.4847,"97":3.7921,"98":9.57766,"99":0.03802,"100":0.02138,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 27 28 31 32 33 35 40 41 54 61 101"},F:{"38":0.00713,"74":0.00238,"79":0.00713,"82":0.04514,"83":0.81972,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.02376,"13":0.01901,"14":0.01426,"15":0.0095,"16":0.04277,"17":0.02138,"18":0.1093,"81":0.01426,"84":0.03089,"85":0.00713,"89":0.04277,"90":0.02614,"91":0.00713,"92":0.03089,"93":0.01901,"94":0.00475,"95":0.01426,"96":0.04277,"97":0.30413,"98":0.8411,_:"79 80 83 86 87 88"},E:{"4":0,"10":0.00238,"13":0.0095,"14":0.03802,"15":0.00475,_:"0 5 6 7 8 9 11 12 3.1 3.2 6.1 7.1 9.1 10.1 11.1","5.1":0.00238,"12.1":0.0095,"13.1":0.00713,"14.1":0.03089,"15.1":0.21622,"15.2-15.3":0.44194,"15.4":0.07841},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00607,"7.0-7.1":0.08254,"8.1-8.4":0,"9.0-9.2":0.00243,"9.3":0.04855,"10.0-10.2":0.0085,"10.3":0.08011,"11.0-11.2":0.02913,"11.3-11.4":0.05098,"12.0-12.1":0.07526,"12.2-12.5":0.84725,"13.0-13.1":0.04248,"13.2":0.04491,"13.3":0.11895,"13.4-13.7":0.24883,"14.0-14.4":1.26845,"14.5-14.8":0.99898,"15.0-15.1":2.13633,"15.2-15.3":5.84335,"15.4":0.20271},P:{"4":1.2008,"5.0-5.4":0.35318,"6.2-6.4":0.35318,"7.2-7.4":0.59536,"8.2":0.03027,"9.2":0.29263,"10.1":0.02018,"11.1-11.2":0.25227,"12.0":0.10091,"13.0":0.28254,"14.0":0.30272,"15.0":0.37336,"16.0":1.79616},I:{"0":0,"3":0,"4":0.00023,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00114,"4.2-4.3":0.00916,"4.4":0,"4.4.3-4.4.4":0.0657},A:{"8":0.00238,"9":0.02138,"10":0.00238,"11":0.50846,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00762},N:{_:"10 11"},R:{_:"0"},M:{"0":0.0991},Q:{"10.4":0},O:{"0":2.07346},H:{"0":1.15471},L:{"0":55.2317},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0.00655,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0.00218,"30":0,"31":0,"32":0,"33":0.00218,"34":0,"35":0,"36":0,"37":0,"38":0.00218,"39":0,"40":0,"41":0.00218,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00218,"48":0.00437,"49":0,"50":0.00873,"51":0,"52":0.00218,"53":0,"54":0,"55":0,"56":0.00218,"57":0,"58":0,"59":0.00218,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00218,"69":0,"70":0,"71":0,"72":0.00218,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00218,"85":0,"86":0,"87":0,"88":0.00218,"89":0,"90":0,"91":0.00655,"92":0,"93":0,"94":0.00437,"95":0,"96":0,"97":0.00218,"98":0.00437,"99":0.00655,"100":0.00218,"101":0.00437,"102":0.0131,"103":0.17682,"104":0.03711,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0.00218,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00218,"35":0,"36":0,"37":0.00218,"38":0,"39":0.00218,"40":0.00218,"41":0.00218,"42":0,"43":0.00218,"44":0,"45":0.00218,"46":0,"47":0.00218,"48":0,"49":0.00218,"50":0,"51":0,"52":0.00218,"53":0,"54":0,"55":0.00218,"56":0,"57":0.00218,"58":0.00218,"59":0.00218,"60":0,"61":0.00218,"62":0.00655,"63":0.00437,"64":0.00218,"65":0.00437,"66":0,"67":0.00218,"68":0.00437,"69":0.00218,"70":0.00218,"71":0.00218,"72":0.00218,"73":0.00218,"74":0.00218,"75":0.00218,"76":0.00218,"77":0.00218,"78":0.00437,"79":0.00437,"80":0.00655,"81":0.01528,"83":0.00655,"84":0.00873,"85":0.00218,"86":0.01528,"87":0.01092,"88":0.00437,"89":0.00437,"90":0.00218,"91":0.00437,"92":0.00655,"93":0.00218,"94":0.00437,"95":0.00437,"96":0.00873,"97":0.00655,"98":0.00873,"99":0.0131,"100":0.01092,"101":0.0131,"102":0.07422,"103":0.59378,"104":1.60669,"105":0.00655,"106":0.00437,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00218,"60":0.00218,"62":0,"63":0.04803,"64":0.0262,"65":0,"66":0,"67":0.00218,"68":0,"69":0.00873,"70":0.00218,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00437,"80":0,"81":0.00218,"82":0,"83":0,"84":0,"85":0.00218,"86":0.00218,"87":0,"88":0.00218,"89":0.08514,"90":0.01746,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00437},B:{"12":0.00437,"13":0.00218,"14":0.00437,"15":0.00437,"16":0.01092,"17":0.00655,"18":0.03275,"79":0,"80":0,"81":0.00218,"83":0,"84":0.00655,"85":0,"86":0,"87":0,"88":0,"89":0.00655,"90":0.00873,"91":0,"92":0.01092,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00218,"99":0,"100":0.00218,"101":0.0131,"102":0.00437,"103":0.13535,"104":0.18992,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00437,"14":0.00873,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.00218,"14.1":0.00437,"15.1":0.03056,"15.2-15.3":0.01528,"15.4":0.04803,"15.5":0.12661,"15.6":0.31872,"16.0":0.0131},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00964,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01928,"10.0-10.2":0.00579,"10.3":0.05592,"11.0-11.2":0.04435,"11.3-11.4":0.05592,"12.0-12.1":0.04242,"12.2-12.5":0.94298,"13.0-13.1":0.02893,"13.2":0.04242,"13.3":0.16584,"13.4-13.7":0.1562,"14.0-14.4":0.94877,"14.5-14.8":0.60166,"15.0-15.1":0.62865,"15.2-15.3":1.20331,"15.4":1.34987,"15.5":4.7959,"15.6":7.87939,"16.0":0.2989},P:{"4":1.08464,"5.0-5.4":0.25342,"6.2-6.4":0.12164,"7.2-7.4":0.7704,"8.2":0.03041,"9.2":0.35479,"10.1":0.02027,"11.1-11.2":0.1926,"12.0":0.05068,"13.0":0.13178,"14.0":0.22301,"15.0":0.12164,"16.0":0.45616,"17.0":1.28737,"18.0":0.53725},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00357,"4.2-4.3":0.03752,"4.4":0,"4.4.3-4.4.4":0.16439},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00655,"10":0,"11":0.11788,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":65.86147},S:{"2.5":0},R:{_:"0"},M:{"0":0.10944},Q:{"10.4":0},O:{"0":1.50868},H:{"0":1.1915}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AG.js index 0d8206d1362..e862ad5809b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AG.js @@ -1 +1 @@ -module.exports={C:{"30":0.00367,"47":0.00733,"52":0.01466,"78":0.00367,"82":0.00367,"91":0.00733,"93":0.00367,"94":0.00733,"95":0.01466,"96":0.35551,"97":0.75499,"98":0.00733,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 83 84 85 86 87 88 89 90 92 99 3.5 3.6"},D:{"11":0.00733,"49":0.01466,"58":0.00367,"67":0.01833,"69":0.011,"75":0.01466,"76":0.04398,"77":0.01833,"78":0.03299,"79":0.0733,"80":0.00733,"81":0.011,"83":0.011,"84":0.01833,"85":0.02932,"86":0.06231,"87":0.01466,"88":0.011,"89":0.02566,"90":0.03299,"91":0.01466,"92":0.02199,"93":0.04032,"94":0.02566,"95":0.06964,"96":0.29687,"97":6.14621,"98":14.02596,"99":0.01466,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 59 60 61 62 63 64 65 66 68 70 71 72 73 74 100 101"},F:{"82":0.1576,"83":0.63405,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00733,"15":0.01466,"16":0.00733,"17":0.011,"18":0.06964,"84":0.03299,"85":0.011,"90":0.00733,"92":0.011,"93":0.00733,"95":0.00733,"96":0.04398,"97":1.35239,"98":4.63623,_:"12 13 79 80 81 83 86 87 88 89 91 94"},E:{"4":0,"8":0.00367,"12":0.00367,"13":0.01466,"14":0.1576,"15":0.09529,_:"0 5 6 7 9 10 11 3.1 3.2 6.1 7.1 10.1","5.1":0.00367,"9.1":0.0733,"11.1":0.01833,"12.1":0.02932,"13.1":0.49478,"14.1":1.34139,"15.1":0.27488,"15.2-15.3":0.9529,"15.4":0.02566},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01072,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.01837,"9.0-9.2":0,"9.3":0.03062,"10.0-10.2":0.00306,"10.3":0.04134,"11.0-11.2":0.01531,"11.3-11.4":0.02756,"12.0-12.1":0.00766,"12.2-12.5":0.68288,"13.0-13.1":0.00612,"13.2":0.00306,"13.3":0.05359,"13.4-13.7":0.3246,"14.0-14.4":0.73494,"14.5-14.8":2.60598,"15.0-15.1":2.52636,"15.2-15.3":8.11191,"15.4":0.09493},P:{"4":0.13579,"5.0-5.4":0.04115,"6.2-6.4":0.02066,"7.2-7.4":0.27157,"8.2":0.01029,"9.2":0.03134,"10.1":0.06172,"11.1-11.2":0.4178,"12.0":0.02089,"13.0":0.1149,"14.0":0.26113,"15.0":0.19846,"16.0":4.58539},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00134,"4.4":0,"4.4.3-4.4.4":0.01766},A:{"11":0.07697,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.13937},Q:{"10.4":0},O:{"0":0.07602},H:{"0":0.17993},L:{"0":42.72577},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00375,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00375,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00375,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0.00375,"97":0.00375,"98":0,"99":0,"100":0,"101":0.00375,"102":0.03001,"103":0.26632,"104":0.05627,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.0075,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00375,"66":0,"67":0.00375,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.0075,"76":0.01876,"77":0.01876,"78":0,"79":0.04876,"80":0,"81":0.01125,"83":0,"84":0,"85":0.0075,"86":0.015,"87":0.00375,"88":0.00375,"89":0.00375,"90":0,"91":0.00375,"92":0.0075,"93":0.05627,"94":0.00375,"95":0.00375,"96":0.0075,"97":0.00375,"98":0.01125,"99":0.0075,"100":0.01125,"101":0.0075,"102":0.06377,"103":2.43815,"104":5.03759,"105":0.015,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00375,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.0075,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00375,"89":0.69769,"90":0.07877,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0.00375,"14":0,"15":0,"16":0,"17":0,"18":0.0075,"79":0,"80":0,"81":0,"83":0,"84":0.00375,"85":0.00375,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00375,"92":0,"93":0.09378,"94":0,"95":0,"96":0.0075,"97":0,"98":0.00375,"99":0,"100":0,"101":0.01125,"102":0.00375,"103":0.51764,"104":1.5079,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00375,"14":0.04501,"15":0.00375,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.03376,"10.1":0.03751,"11.1":0.00375,"12.1":0.00375,"13.1":0.05251,"14.1":0.10503,"15.1":0.015,"15.2-15.3":0.0075,"15.4":0.04876,"15.5":0.14629,"15.6":0.30758,"16.0":0.015},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00595,"6.0-6.1":0,"7.0-7.1":0.00397,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.25201,"10.0-10.2":0.00198,"10.3":0.07342,"11.0-11.2":0.01587,"11.3-11.4":0.0258,"12.0-12.1":0.01587,"12.2-12.5":0.47227,"13.0-13.1":0.00397,"13.2":0.00397,"13.3":0.0377,"13.4-13.7":0.14684,"14.0-14.4":0.4306,"14.5-14.8":0.86715,"15.0-15.1":0.32741,"15.2-15.3":0.37305,"15.4":0.54569,"15.5":5.05409,"15.6":10.89992,"16.0":0.28177},P:{"4":0.17043,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.31956,"8.2":0,"9.2":0.01065,"10.1":0,"11.1-11.2":0.07456,"12.0":0.01065,"13.0":0.05326,"14.0":0.05326,"15.0":0.06391,"16.0":0.25565,"17.0":1.99192,"18.0":2.33279},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.0908,"4.4":0,"4.4.3-4.4.4":1.22579},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01125,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":58.98999},S:{"2.5":0},R:{_:"0"},M:{"0":0.20622},Q:{"10.4":0},O:{"0":0.04374},H:{"0":0.07099}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AI.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AI.js index fc6968344d7..d2c262ca51f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AI.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AI.js @@ -1 +1 @@ -module.exports={C:{"87":0.00771,"95":0.02697,"96":0.17724,"97":0.35448,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 88 89 90 91 92 93 94 98 99 3.5 3.6"},D:{"65":0.00771,"66":0.01541,"67":0.01156,"73":0.00385,"76":0.01541,"77":0.01541,"79":0.01541,"81":0.00385,"87":0.03082,"88":0.02697,"90":0.01156,"91":0.00771,"93":0.01541,"94":0.01541,"95":0.01541,"96":0.34292,"97":8.04506,"98":8.8619,"99":0.02697,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 68 69 70 71 72 74 75 78 80 83 84 85 86 89 92 100 101"},F:{"82":0.10788,"83":1.51423,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.02697,"92":0.00385,"95":0.0578,"96":0.01927,"97":2.35033,"98":4.98578,_:"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94"},E:{"4":0,"11":0.01927,"13":0.13871,"14":0.16568,"15":0.39686,_:"0 5 6 7 8 9 10 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.03468,"12.1":0.04238,"13.1":1.28305,"14.1":1.3524,"15.1":1.46414,"15.2-15.3":3.1402,"15.4":0.02697},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.0027,"8.1-8.4":0,"9.0-9.2":0.0027,"9.3":0.0081,"10.0-10.2":0,"10.3":0.02969,"11.0-11.2":0.0027,"11.3-11.4":0.01889,"12.0-12.1":0.0027,"12.2-12.5":0.35088,"13.0-13.1":0.0027,"13.2":0.06208,"13.3":0.18624,"13.4-13.7":0.04588,"14.0-14.4":0.64508,"14.5-14.8":2.76925,"15.0-15.1":3.93795,"15.2-15.3":18.81794,"15.4":0.09987},P:{"4":0.05188,"5.0-5.4":0.04115,"6.2-6.4":0.02066,"7.2-7.4":0.06226,"8.2":0.01029,"9.2":0.02057,"10.1":0.06172,"11.1-11.2":0.68483,"12.0":0.02057,"13.0":0.05188,"14.0":0.10376,"15.0":0.07263,"16.0":2.69783},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.03853,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.11679},Q:{"10.4":0},O:{"0":0},H:{"0":0.02328},L:{"0":28.89313},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01304,"89":0,"90":0,"91":0.00435,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.01304,"103":0.28256,"104":0.02608,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00435,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00435,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00435,"57":0.00435,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00435,"68":0,"69":0.02608,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.00869,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0.00435,"83":0,"84":0,"85":0.03478,"86":0,"87":0.00435,"88":0.00435,"89":0,"90":0,"91":0.00869,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.01304,"99":0,"100":0.12172,"101":0.00435,"102":0.05651,"103":1.98223,"104":4.79909,"105":0.03043,"106":0.00435,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00435,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3.8384,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00869,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0.00869,"97":0.00435,"98":0,"99":0,"100":0,"101":0,"102":0.01304,"103":0.70421,"104":2.23001,"105":0},E:{"4":0.00435,"5":0,"6":0,"7":0,"8":0,"9":0.00435,"10":0,"11":0,"12":0,"13":0.05216,"14":0.31733,"15":0.01304,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00435,"11.1":0,"12.1":0.00435,"13.1":0.51729,"14.1":0.06086,"15.1":0.06955,"15.2-15.3":0.0739,"15.4":0.09129,"15.5":0.39123,"15.6":1.16934,"16.0":0.02608},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0.05248,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":1.0002,"13.0-13.1":0.00617,"13.2":0,"13.3":0,"13.4-13.7":0.01235,"14.0-14.4":0.13892,"14.5-14.8":0.89833,"15.0-15.1":0.66371,"15.2-15.3":1.39534,"15.4":0.85202,"15.5":5.70483,"15.6":19.89281,"16.0":0.24696},P:{"4":0.82618,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.6673,"8.2":0,"9.2":0.01059,"10.1":0,"11.1-11.2":0.04237,"12.0":0.25421,"13.0":0.05296,"14.0":0.14829,"15.0":0.01059,"16.0":0.48723,"17.0":1.37697,"18.0":2.24551},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00163,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.34179},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01304,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":42.41182},S:{"2.5":0},R:{_:"0"},M:{"0":0.09045},Q:{"10.4":0},O:{"0":0.0848},H:{"0":0.02676}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AL.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AL.js index 79b13aaa6b0..d2768cf433c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AL.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AL.js @@ -1 +1 @@ -module.exports={C:{"46":0.00186,"52":0.03155,"66":0.14662,"68":0.00371,"72":0.00186,"77":0.00928,"78":0.00742,"79":0.00371,"80":0.01114,"81":0.00557,"82":0.00371,"83":0.00186,"84":0.01299,"87":0.00186,"88":0.00557,"89":0.00928,"91":0.01114,"92":0.00371,"94":0.00371,"95":0.00742,"96":0.25798,"97":0.46586,"98":0.00557,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 67 69 70 71 73 74 75 76 85 86 90 93 99 3.5 3.6"},D:{"38":0.01114,"47":0.00371,"49":0.05754,"53":0.00371,"55":0.00186,"56":0.00371,"60":0.00371,"62":0.01114,"63":0.00928,"64":0.00371,"65":0.01485,"66":0.00557,"67":0.00186,"68":0.0167,"69":0.01114,"70":0.00928,"71":0.0167,"72":0.00371,"73":0.00371,"74":0.02227,"75":0.00371,"76":0.01485,"77":0.00742,"78":0.00928,"79":0.09466,"80":0.02042,"81":0.01856,"83":0.03341,"84":0.0631,"85":0.10579,"86":0.06496,"87":0.10022,"88":0.0167,"89":0.02413,"90":0.0167,"91":0.0297,"92":0.02042,"93":0.25984,"94":0.02042,"95":0.05197,"96":0.21158,"97":3.83635,"98":8.71949,"99":0.00928,"100":0.00371,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 54 57 58 59 61 101"},F:{"28":0.00742,"36":0.00742,"40":0.00371,"46":0.00557,"52":0.00371,"69":0.00186,"71":0.00371,"82":0.04826,"83":0.27654,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 53 54 55 56 57 58 60 62 63 64 65 66 67 68 70 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00186,"17":0.01299,"18":0.01299,"83":0.00742,"84":0.00186,"89":0.00928,"92":0.00371,"94":0.00186,"95":0.00371,"96":0.00928,"97":0.18931,"98":0.68115,_:"12 13 15 16 79 80 81 85 86 87 88 90 91 93"},E:{"4":0,"13":0.01299,"14":0.04826,"15":0.03526,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1","9.1":0.00186,"10.1":0.00557,"11.1":0.00557,"12.1":0.01299,"13.1":0.05382,"14.1":0.22086,"15.1":0.16333,"15.2-15.3":0.36006,"15.4":0.01114},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.06117,"7.0-7.1":0.02719,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04758,"10.0-10.2":0.01699,"10.3":0.11894,"11.0-11.2":0.04418,"11.3-11.4":0.08156,"12.0-12.1":0.06117,"12.2-12.5":1.88261,"13.0-13.1":0.05097,"13.2":0.05097,"13.3":0.20729,"13.4-13.7":0.66945,"14.0-14.4":1.69571,"14.5-14.8":7.74795,"15.0-15.1":4.5876,"15.2-15.3":16.47798,"15.4":0.13933},P:{"4":0.21513,"5.0-5.4":0.35318,"6.2-6.4":0.35318,"7.2-7.4":0.10244,"8.2":0.01248,"9.2":0.03073,"10.1":0.02018,"11.1-11.2":0.16391,"12.0":0.05122,"13.0":0.20488,"14.0":0.16391,"15.0":0.16391,"16.0":2.47909},I:{"0":0,"3":0,"4":0.00233,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00349,"4.2-4.3":0.00524,"4.4":0,"4.4.3-4.4.4":0.03781},A:{"8":0.00371,"9":0.00557,"10":0.00186,"11":0.05011,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.16288},Q:{"10.4":0},O:{"0":0.02443},H:{"0":0.09252},L:{"0":42.25688},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00276,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00138,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00138,"100":0,"101":0,"102":0.00415,"103":0.07463,"104":0.01382,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00138,"39":0,"40":0,"41":0.00138,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00276,"50":0,"51":0,"52":0,"53":0.00138,"54":0,"55":0.00138,"56":0.00138,"57":0,"58":0,"59":0.00138,"60":0,"61":0,"62":0.00138,"63":0,"64":0,"65":0.00138,"66":0.00138,"67":0,"68":0.00276,"69":0.00138,"70":0.00138,"71":0.00138,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00967,"80":0.00415,"81":0.00276,"83":0.00138,"84":0.00276,"85":0.00276,"86":0.01106,"87":0.00967,"88":0.00138,"89":0.00276,"90":0.00691,"91":0.00276,"92":0.00138,"93":0.00415,"94":0.00138,"95":0.00553,"96":0.00276,"97":0.00415,"98":0.00138,"99":0.00138,"100":0.00415,"101":0.00553,"102":0.01244,"103":0.35517,"104":0.88172,"105":0.00138,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00138,"64":0.00138,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00138,"72":0.00138,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.02902,"90":0.00415,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.00138,"103":0.02764,"104":0.07186,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00138,"14":0.00276,"15":0.00138,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00276,"13.1":0.00415,"14.1":0.00553,"15.1":0.00276,"15.2-15.3":0.00276,"15.4":0.01382,"15.5":0.05113,"15.6":0.08983,"16.0":0.00276},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.03178,"7.0-7.1":0.16947,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03178,"10.0-10.2":0,"10.3":0.12181,"11.0-11.2":0.03178,"11.3-11.4":0.05826,"12.0-12.1":0.02648,"12.2-12.5":1.37697,"13.0-13.1":0.05296,"13.2":0.03707,"13.3":0.16947,"13.4-13.7":0.56138,"14.0-14.4":1.7424,"14.5-14.8":5.6085,"15.0-15.1":0.82089,"15.2-15.3":1.18102,"15.4":2.2667,"15.5":11.24879,"15.6":26.75029,"16.0":0.662},P:{"4":0.20528,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.08211,"8.2":0,"9.2":0.01026,"10.1":0,"11.1-11.2":0.06158,"12.0":0.03079,"13.0":0.12317,"14.0":0.11291,"15.0":0.08211,"16.0":0.12317,"17.0":1.088,"18.0":1.73464},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.04516,"4.2-4.3":0.00273,"4.4":0,"4.4.3-4.4.4":0.02219},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00415,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":40.47165},S:{"2.5":0},R:{_:"0"},M:{"0":0.18098},Q:{"10.4":0},O:{"0":0.05171},H:{"0":0.12238}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AM.js index e0a1d4b90c2..376aeecfd2b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AM.js @@ -1 +1 @@ -module.exports={C:{"11":0.01367,"51":0.0205,"52":37.23163,"56":0.00683,"78":0.02734,"82":0.00683,"83":0.00683,"91":0.01367,"95":0.02734,"96":0.32803,"97":0.62873,_:"2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 84 85 86 87 88 89 90 92 93 94 98 99 3.5 3.6"},D:{"22":0.01367,"44":0.00683,"47":0.01367,"49":0.06834,"51":0.00683,"63":0.0205,"68":0.0205,"69":0.00683,"71":0.00683,"72":0.01367,"73":0.0205,"74":0.02734,"75":0.01367,"76":0.0205,"79":0.0205,"80":0.0205,"83":0.01367,"84":0.02734,"85":0.041,"86":0.07517,"87":0.08201,"88":0.02734,"89":0.07517,"90":0.03417,"91":0.03417,"92":0.06834,"93":0.0205,"94":0.041,"95":0.06834,"96":0.54672,"97":7.03902,"98":16.7638,"100":0.01367,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 45 46 48 50 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 70 77 78 81 99 101"},F:{"82":0.11618,"83":0.69023,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"96":0.01367,"97":0.19819,"98":0.6424,_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95"},E:{"4":0,"14":0.08201,"15":0.13668,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.06834,"11.1":0.00683,"12.1":0.01367,"13.1":0.13668,"14.1":0.21869,"15.1":0.18452,"15.2-15.3":0.23236},G:{"8":0.00215,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00429,"6.0-6.1":0,"7.0-7.1":0.00572,"8.1-8.4":0.00072,"9.0-9.2":0.00215,"9.3":0.10304,"10.0-10.2":0.00572,"10.3":0.11019,"11.0-11.2":0.01574,"11.3-11.4":0.02147,"12.0-12.1":0.0186,"12.2-12.5":0.44221,"13.0-13.1":0.01216,"13.2":0.00787,"13.3":0.03578,"13.4-13.7":0.14526,"14.0-14.4":0.50732,"14.5-14.8":1.36955,"15.0-15.1":1.08047,"15.2-15.3":3.23427,"15.4":0.02504},P:{"4":0.05354,"5.0-5.4":0.04115,"6.2-6.4":0.02066,"7.2-7.4":0.07495,"8.2":0.01029,"9.2":0.01042,"10.1":0.06172,"11.1-11.2":0.05354,"12.0":0.01071,"13.0":0.05354,"14.0":0.08566,"15.0":0.05354,"16.0":1.12425},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00024,"4.2-4.3":0.00087,"4.4":0,"4.4.3-4.4.4":0.00839},A:{"11":0.07517,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.05697},Q:{"10.4":0},O:{"0":0.10445},H:{"0":0.11986},L:{"0":22.17812},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":26.28887,"53":0,"54":0,"55":0,"56":0.00707,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.01413,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.0212,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00707,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.01413,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00707,"100":0.00707,"101":0.01413,"102":0.0212,"103":0.55107,"104":0.11304,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00707,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00707,"48":0.00707,"49":0.16956,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00707,"64":0,"65":0,"66":0,"67":0.00707,"68":0.00707,"69":0,"70":0,"71":0.00707,"72":0,"73":0,"74":0.0212,"75":0.00707,"76":0.02826,"77":0.00707,"78":0.00707,"79":0.01413,"80":0.00707,"81":0.0212,"83":0.00707,"84":0.04946,"85":0.0212,"86":0.04946,"87":0.05652,"88":0.00707,"89":0.0212,"90":0.00707,"91":0.01413,"92":0.04239,"93":0.00707,"94":0.09185,"95":0.01413,"96":0.01413,"97":0.02826,"98":0.04946,"99":0.0212,"100":0.04946,"101":0.04946,"102":0.22608,"103":5.82156,"104":12.20126,"105":0.0212,"106":0.00707,"107":0.00707,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00707,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01413,"64":0.00707,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00707,"85":0.04239,"86":0,"87":0,"88":0,"89":0.34619,"90":0.04239,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00707,"13":0,"14":0.01413,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.0212,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.00707,"98":0,"99":0,"100":0.01413,"101":0,"102":0.00707,"103":0.18369,"104":0.52988,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00707,"14":0.02826,"15":0.01413,_:"0","3.1":0,"3.2":0,"5.1":0.04946,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00707,"13.1":0.03533,"14.1":0.07065,"15.1":0.02826,"15.2-15.3":0.02826,"15.4":0.09185,"15.5":0.20489,"15.6":0.3038,"16.0":0.00707},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01233,"6.0-6.1":0,"7.0-7.1":0.02465,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.12464,"10.0-10.2":0.00548,"10.3":0.10272,"11.0-11.2":0.01781,"11.3-11.4":0.02191,"12.0-12.1":0.0137,"12.2-12.5":0.6629,"13.0-13.1":0.01917,"13.2":0.01233,"13.3":0.04246,"13.4-13.7":0.16983,"14.0-14.4":0.58757,"14.5-14.8":1.03407,"15.0-15.1":0.26571,"15.2-15.3":0.51224,"15.4":0.66564,"15.5":3.14879,"15.6":5.99488,"16.0":0.25064},P:{"4":0.04132,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.06198,"8.2":0,"9.2":0.01033,"10.1":0,"11.1-11.2":0.03099,"12.0":0.01033,"13.0":0.02066,"14.0":0.03099,"15.0":0.01033,"16.0":0.05165,"17.0":0.49585,"18.0":0.5475},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00263,"4.2-4.3":0.01053,"4.4":0,"4.4.3-4.4.4":0.03684},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00707,"9":0,"10":0,"11":0.11304,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":33.85509},S:{"2.5":0.00294},R:{_:"0"},M:{"0":0.06457},Q:{"10.4":0},O:{"0":0.07631},H:{"0":0.15838}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AO.js index fadd788321b..3c81a782357 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AO.js @@ -1 +1 @@ -module.exports={C:{"41":0.00903,"43":0.00452,"45":0.01355,"49":0.00452,"52":0.0903,"72":0.00452,"78":0.00903,"89":0.00903,"90":0.00452,"91":0.05418,"92":0.00452,"94":0.01355,"95":0.01806,"96":0.4199,"97":0.58695,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 44 46 47 48 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 93 98 99 3.5 3.6"},D:{"11":0.03161,"26":0.00452,"29":0.00452,"33":0.00903,"34":0.00903,"38":0.00452,"40":0.01806,"42":0.01355,"43":0.14448,"46":0.01806,"47":0.00452,"49":0.01355,"55":0.00452,"58":0.01355,"59":0.04064,"63":0.05418,"65":0.01806,"67":0.00452,"69":0.04064,"70":0.00452,"71":0.00903,"72":0.00452,"74":0.01355,"75":0.04515,"76":0.00903,"77":0.00903,"78":0.01355,"79":0.13094,"80":0.06773,"81":0.07224,"83":0.01806,"84":0.03612,"85":0.01806,"86":0.17609,"87":0.19415,"88":0.02258,"89":0.0587,"90":0.02258,"91":0.19866,"92":0.11739,"93":0.18512,"94":0.04515,"95":0.0587,"96":0.37926,"97":6.33455,"98":15.45033,"99":0.11288,"100":0.00903,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 30 31 32 35 36 37 39 41 44 45 48 50 51 52 53 54 56 57 60 61 62 64 66 68 73 101"},F:{"34":0.00452,"71":0.01355,"79":0.03612,"82":0.17157,"83":1.61637,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.04967,"13":0.02258,"14":0.01806,"15":0.01355,"16":0.00903,"17":0.02258,"18":0.33411,"84":0.02709,"85":0.01355,"86":0.00903,"89":0.02258,"90":0.01806,"91":0.01355,"92":0.02258,"93":0.01806,"94":0.00903,"95":0.03161,"96":0.65016,"97":0.90752,"98":3.11084,_:"79 80 81 83 87 88"},E:{"4":0,"13":0.02709,"14":0.05418,"15":0.00903,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 9.1 11.1","7.1":0.03612,"10.1":0.00452,"12.1":0.01355,"13.1":0.05418,"14.1":0.13545,"15.1":0.04515,"15.2-15.3":0.15351,"15.4":0.01355},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00083,"6.0-6.1":0.00166,"7.0-7.1":0.06308,"8.1-8.4":0.01494,"9.0-9.2":0.01079,"9.3":0.14609,"10.0-10.2":0.01411,"10.3":0.28803,"11.0-11.2":0.07554,"11.3-11.4":0.05893,"12.0-12.1":0.03735,"12.2-12.5":2.25196,"13.0-13.1":0.00664,"13.2":0.00498,"13.3":0.10542,"13.4-13.7":0.23242,"14.0-14.4":0.635,"14.5-14.8":1.03343,"15.0-15.1":1.27082,"15.2-15.3":2.02784,"15.4":0.01743},P:{"4":1.55328,"5.0-5.4":0.04115,"6.2-6.4":0.02066,"7.2-7.4":0.22631,"8.2":0.01029,"9.2":0.02057,"10.1":0.06172,"11.1-11.2":0.07201,"12.0":0.02057,"13.0":0.19545,"14.0":0.17487,"15.0":0.17487,"16.0":0.84351},I:{"0":0,"3":0,"4":0.00221,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01485,"4.2-4.3":0.04603,"4.4":0,"4.4.3-4.4.4":0.13981},A:{"11":0.2393,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.02194},N:{_:"10 11"},R:{_:"0"},M:{"0":0.12065},Q:{"10.4":0},O:{"0":0.33452},H:{"0":1.77563},L:{"0":50.96663},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00409,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0.00817,"45":0,"46":0,"47":0.00409,"48":0,"49":0,"50":0,"51":0,"52":0.00409,"53":0,"54":0,"55":0.00409,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00409,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.01226,"85":0,"86":0,"87":0,"88":0.00409,"89":0.00409,"90":0,"91":0.01226,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00409,"100":0.00409,"101":0.00409,"102":0.01226,"103":0.34331,"104":0.07357,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00817,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.00409,"36":0,"37":0,"38":0,"39":0,"40":0.02452,"41":0.00409,"42":0.01226,"43":0.01635,"44":0,"45":0,"46":0.06948,"47":0.00409,"48":0,"49":0.00817,"50":0.00409,"51":0,"52":0,"53":0.00817,"54":0,"55":0.00409,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.01635,"64":0.00409,"65":0,"66":0,"67":0,"68":0,"69":0.00409,"70":0.01226,"71":0.00409,"72":0.02861,"73":0,"74":0.02452,"75":0.00409,"76":0,"77":0.00409,"78":0.00409,"79":0.02044,"80":0,"81":0.04087,"83":0.00409,"84":0.05313,"85":0.00409,"86":0.00817,"87":0.11444,"88":0.00817,"89":0.02452,"90":0.00409,"91":0.02452,"92":0.00409,"93":0.00817,"94":0.02452,"95":0.01635,"96":0.01226,"97":0.03678,"98":0.01226,"99":0.01226,"100":0.02861,"101":0.04496,"102":0.06539,"103":1.56123,"104":4.95753,"105":0.02452,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.01226,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.00409,"36":0,"37":0,"38":0,"39":0,"40":0.00409,"41":0,"42":0.00409,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00409,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.11035,"62":0,"63":0.11444,"64":0.03678,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00817,"80":0,"81":0,"82":0,"83":0,"84":0.00409,"85":0.01635,"86":0.00409,"87":0.06131,"88":0.00409,"89":0.34331,"90":0.07765,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00409},B:{"12":0.01635,"13":0.00817,"14":0.02452,"15":0.00817,"16":0.00817,"17":0.02044,"18":0.0327,"79":0,"80":0,"81":0,"83":0,"84":0.02861,"85":0.00409,"86":0,"87":0,"88":0,"89":0.00817,"90":0.02861,"91":0,"92":0.00409,"93":0.02044,"94":0,"95":0,"96":0.01226,"97":0.00409,"98":0.00817,"99":0.00409,"100":0.00817,"101":0.01226,"102":0.01635,"103":0.32696,"104":1.02992,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00409,"13":0,"14":0.00409,"15":0.00409,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.02452,"14.1":0.02452,"15.1":0,"15.2-15.3":0.00409,"15.4":0.01226,"15.5":0.02861,"15.6":0.04087,"16.0":0},G:{"8":0.00401,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00134,"5.0-5.1":0.00267,"6.0-6.1":0,"7.0-7.1":0.37126,"8.1-8.4":0.00534,"9.0-9.2":0.00134,"9.3":0.38996,"10.0-10.2":0.01335,"10.3":0.88275,"11.0-11.2":0.11752,"11.3-11.4":0.12821,"12.0-12.1":0.10016,"12.2-12.5":2.97543,"13.0-13.1":0.1469,"13.2":0.04006,"13.3":0.10817,"13.4-13.7":0.23104,"14.0-14.4":0.36592,"14.5-14.8":0.87874,"15.0-15.1":0.33253,"15.2-15.3":0.47409,"15.4":0.4594,"15.5":2.33307,"15.6":2.92201,"16.0":0.0641},P:{"4":1.10074,"5.0-5.4":0.01029,"6.2-6.4":0.01029,"7.2-7.4":0.19546,"8.2":0.07201,"9.2":0.09259,"10.1":0.07201,"11.1-11.2":0.04115,"12.0":0.04115,"13.0":0.07201,"14.0":0.07201,"15.0":0.06172,"16.0":0.18517,"17.0":0.44235,"18.0":0.29833},I:{"0":0,"3":0,"4":0.00101,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0394,"4.2-4.3":0.08201,"4.4":0,"4.4.3-4.4.4":0.25888},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02861,"5.5":0},J:{"7":0,"10":0.01183},N:{"10":0,"11":0},L:{"0":67.45636},S:{"2.5":0.05322},R:{_:"0"},M:{"0":0.13009},Q:{"10.4":0.00591},O:{"0":0.44939},H:{"0":2.2784}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AR.js index 5ad6d8d391d..2961da62c3f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AR.js @@ -1 +1 @@ -module.exports={C:{"32":0.00392,"52":0.08234,"53":0.00392,"59":0.00784,"65":0.00392,"66":0.00784,"68":0.00784,"72":0.00392,"73":0.00392,"78":0.01961,"79":0.00392,"80":0.00784,"81":0.00392,"84":0.00784,"85":0.00392,"86":0.02745,"87":0.01176,"88":0.02745,"89":0.01176,"90":0.01568,"91":0.03921,"92":0.00392,"93":0.01176,"94":0.01176,"95":0.02745,"96":0.5411,"97":0.91751,"98":0.00784,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 54 55 56 57 58 60 61 62 63 64 67 69 70 71 74 75 76 77 82 83 99 3.5 3.6"},D:{"27":0.00392,"34":0.00784,"38":0.01961,"47":0.00784,"49":0.22742,"55":0.00784,"57":0.00392,"58":0.00784,"63":0.00784,"65":0.00392,"66":0.03529,"67":0.00392,"68":0.00392,"69":0.00392,"70":0.00784,"71":0.00784,"72":0.00392,"73":0.00784,"74":0.01176,"75":0.01176,"76":0.01176,"77":0.01176,"78":0.01176,"79":0.03529,"80":0.01568,"81":0.03529,"83":0.01961,"84":0.02353,"85":0.02353,"86":0.03921,"87":0.05097,"88":0.01961,"89":0.03921,"90":0.03137,"91":0.07842,"92":0.05097,"93":0.06274,"94":0.09018,"95":0.0745,"96":0.52541,"97":8.39486,"98":21.00872,"99":0.00784,"100":0.00784,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 53 54 56 59 60 61 62 64 101"},F:{"36":0.00784,"81":0.01176,"82":0.58031,"83":1.48998,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00784,"17":0.00784,"18":0.01176,"92":0.00784,"95":0.01176,"96":0.02353,"97":0.38818,"98":1.44685,_:"12 13 14 16 79 80 81 83 84 85 86 87 88 89 90 91 93 94"},E:{"4":0,"13":0.01176,"14":0.03529,"15":0.02745,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.01176,"11.1":0.01568,"12.1":0.00784,"13.1":0.05489,"14.1":0.15684,"15.1":0.0745,"15.2-15.3":0.16076},G:{"8":0.00037,"3.2":0.0011,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01535,"6.0-6.1":0.00037,"7.0-7.1":0.00292,"8.1-8.4":0.00146,"9.0-9.2":0.0011,"9.3":0.02888,"10.0-10.2":0.00146,"10.3":0.02157,"11.0-11.2":0.00475,"11.3-11.4":0.03546,"12.0-12.1":0.00548,"12.2-12.5":0.19226,"13.0-13.1":0.00658,"13.2":0.00256,"13.3":0.01572,"13.4-13.7":0.06031,"14.0-14.4":0.13963,"14.5-14.8":0.67365,"15.0-15.1":0.53439,"15.2-15.3":1.90325,"15.4":0.00548},P:{"4":0.14583,"5.0-5.4":0.04115,"6.2-6.4":0.02066,"7.2-7.4":0.23957,"8.2":0.01029,"9.2":0.01042,"10.1":0.06172,"11.1-11.2":0.07291,"12.0":0.02083,"13.0":0.12499,"14.0":0.11458,"15.0":0.11458,"16.0":1.84365},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00285,"4.2-4.3":0.00456,"4.4":0,"4.4.3-4.4.4":0.04731},A:{"11":0.15684,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.1216},Q:{"10.4":0},O:{"0":0.0304},H:{"0":0.18995},L:{"0":49.10526},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.02249,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00375,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00375,"67":0,"68":0.00375,"69":0,"70":0,"71":0,"72":0,"73":0.00375,"74":0,"75":0,"76":0,"77":0,"78":0.0075,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.01125,"87":0,"88":0.01125,"89":0.00375,"90":0.01125,"91":0.06748,"92":0,"93":0.00375,"94":0,"95":0.00375,"96":0,"97":0.00375,"98":0.00375,"99":0.01125,"100":0.00375,"101":0.0075,"102":0.015,"103":0.42364,"104":0.09373,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00375,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00375,"35":0,"36":0,"37":0,"38":0.00375,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.06373,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00375,"59":0,"60":0,"61":0,"62":0,"63":0.00375,"64":0,"65":0,"66":0.015,"67":0,"68":0,"69":0.0075,"70":0.00375,"71":0.00375,"72":0.00375,"73":0.00375,"74":0.00375,"75":0.00375,"76":0.00375,"77":0.00375,"78":0.00375,"79":0.015,"80":0.00375,"81":0.01125,"83":0.0075,"84":0.0075,"85":0.0075,"86":0.01125,"87":0.015,"88":0.0075,"89":0.01125,"90":0.0075,"91":0.01125,"92":0.01125,"93":0.0075,"94":0.0075,"95":0.015,"96":0.02624,"97":0.02249,"98":0.01875,"99":0.04124,"100":0.03374,"101":0.04499,"102":0.07498,"103":2.67679,"104":7.4905,"105":0.02624,"106":0.00375,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00375,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00375,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0075,"64":0.0075,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.0075,"86":0,"87":0,"88":0.00375,"89":0.53236,"90":0.02999,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00375,"16":0,"17":0.00375,"18":0.00375,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00375,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00375,"101":0.0075,"102":0.00375,"103":0.20994,"104":0.60359,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00375,"14":0.0075,"15":0.00375,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00375,"12.1":0.00375,"13.1":0.015,"14.1":0.02624,"15.1":0.00375,"15.2-15.3":0.00375,"15.4":0.015,"15.5":0.05249,"15.6":0.08998,"16.0":0},G:{"8":0,"3.2":0.0006,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01451,"6.0-6.1":0.00242,"7.0-7.1":0.00181,"8.1-8.4":0.0006,"9.0-9.2":0,"9.3":0.0278,"10.0-10.2":0.00121,"10.3":0.02236,"11.0-11.2":0.00302,"11.3-11.4":0.06105,"12.0-12.1":0.00484,"12.2-12.5":0.21578,"13.0-13.1":0.00907,"13.2":0.00363,"13.3":0.0133,"13.4-13.7":0.055,"14.0-14.4":0.10457,"14.5-14.8":0.32096,"15.0-15.1":0.05984,"15.2-15.3":0.10396,"15.4":0.1638,"15.5":1.13634,"15.6":3.69191,"16.0":0.02176},P:{"4":0.13225,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.20346,"8.2":0.01017,"9.2":0.01017,"10.1":0,"11.1-11.2":0.05087,"12.0":0.01017,"13.0":0.07121,"14.0":0.05087,"15.0":0.04069,"16.0":0.11191,"17.0":0.91559,"18.0":0.9868},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00447,"4.2-4.3":0.01043,"4.4":0,"4.4.3-4.4.4":0.09384},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02999,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":76.08069},S:{"2.5":0},R:{_:"0"},M:{"0":0.10627},Q:{"10.4":0},O:{"0":0.025},H:{"0":0.17162}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AS.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AS.js index 74572c144e9..211641e0039 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AS.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AS.js @@ -1 +1 @@ -module.exports={C:{"52":0.01431,"78":0.01431,"82":0.00477,"96":0.17645,"97":0.24799,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 98 99 3.5 3.6"},D:{"75":0.02861,"76":0.02861,"77":0.00477,"79":0.41013,"83":0.04292,"84":0.01908,"85":0.02861,"86":0.00477,"87":0.03338,"88":0.03815,"90":0.01431,"91":0.17645,"92":0.06677,"93":0.04292,"94":0.04769,"95":0.01908,"96":1.43547,"97":6.91982,"98":8.89419,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 78 80 81 89 99 100 101"},F:{"82":0.02385,"83":0.01908,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.00477,"85":0.01431,"88":0.00954,"90":0.01431,"96":0.01431,"97":0.51505,"98":1.75976,_:"12 13 14 15 16 17 79 80 81 83 84 86 87 89 91 92 93 94 95"},E:{"4":0,"13":0.00954,"14":0.10015,"15":0.062,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.0763,"11.1":0.01431,"12.1":0.01908,"13.1":0.11923,"14.1":0.30522,"15.1":5.42235,"15.2-15.3":8.21222,"15.4":0.02385},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01252,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.04173,"9.0-9.2":0,"9.3":0.85959,"10.0-10.2":0,"10.3":0.00835,"11.0-11.2":0,"11.3-11.4":0.01252,"12.0-12.1":0.00417,"12.2-12.5":0.2295,"13.0-13.1":0,"13.2":0,"13.3":0.01669,"13.4-13.7":0.14605,"14.0-14.4":0.28792,"14.5-14.8":1.8694,"15.0-15.1":8.39143,"15.2-15.3":29.67669,"15.4":0.15022},P:{"4":0.0427,"5.0-5.4":0.35318,"6.2-6.4":0.02066,"7.2-7.4":0.01067,"8.2":0.01248,"9.2":0.01067,"10.1":0.02066,"11.1-11.2":0.12809,"12.0":0.02135,"13.0":0.18592,"14.0":0.01067,"15.0":0.29887,"16.0":1.05673},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.04292,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.01569},Q:{"10.4":0},O:{"0":0.01046},H:{"0":0.03467},L:{"0":10.26769},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00419,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00419,"92":0,"93":0.00419,"94":0,"95":0.00837,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00419,"102":0.01256,"103":0.05862,"104":0.02094,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0.00419,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.00419,"76":0.00419,"77":0,"78":0,"79":0.06281,"80":0.02931,"81":0.00837,"83":0.01256,"84":0.00837,"85":0.01256,"86":0.00837,"87":0.01675,"88":0.01256,"89":0.00837,"90":0.02094,"91":0.00837,"92":0.02931,"93":0.08374,"94":0.00837,"95":0.01675,"96":0.01256,"97":0.00419,"98":0.02512,"99":0.02094,"100":0.01675,"101":0.0335,"102":0.07118,"103":2.27354,"104":1.72086,"105":0.00837,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00419,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00419,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00419,"89":0.07955,"90":0.00419,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00419,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0.00419,"85":0.00419,"86":0,"87":0.00419,"88":0.00419,"89":0.00419,"90":0.00419,"91":0.00419,"92":0.00419,"93":0.00419,"94":0.00419,"95":0.00419,"96":0.00419,"97":0.00419,"98":0.00419,"99":0.00419,"100":0.00419,"101":0.01675,"102":0.00837,"103":0.25959,"104":0.32659,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01256,"14":0.07537,"15":0.00419,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00419,"13.1":0.02931,"14.1":0.10886,"15.1":0.0963,"15.2-15.3":0.23447,"15.4":0.72435,"15.5":2.74249,"15.6":6.40611,"16.0":0.02094},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.27271,"9.0-9.2":0,"9.3":0.10765,"10.0-10.2":0,"10.3":0.01435,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0.99755,"13.0-13.1":0.01435,"13.2":0.01435,"13.3":0.02153,"13.4-13.7":0.17941,"14.0-14.4":0.17224,"14.5-14.8":0.6746,"15.0-15.1":0.4593,"15.2-15.3":0.94731,"15.4":3.373,"15.5":17.97018,"15.6":46.15983,"16.0":0.3373},P:{"4":0.02172,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.16287,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.02172,"12.0":0,"13.0":0.01086,"14.0":0,"15.0":0,"16.0":0,"17.0":0.16287,"18.0":0.19545},I:{"0":0,"3":0,"4":0.05444,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01555,"4.4":0,"4.4.3-4.4.4":0.10887},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0.00837,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":10.73788},S:{"2.5":0},R:{_:"0"},M:{"0":0.06976},Q:{"10.4":0},O:{"0":0.00581},H:{"0":0.04403}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AT.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AT.js index 1ba1bd653ad..245706a0585 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AT.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AT.js @@ -1 +1 @@ -module.exports={C:{"48":0.00578,"52":0.06355,"59":0.00578,"60":0.06932,"61":0.01733,"62":0.01733,"63":0.01155,"66":0.05777,"68":0.01155,"72":0.01155,"78":0.12709,"83":0.01155,"85":0.00578,"87":0.01155,"88":0.01733,"89":0.01733,"90":0.01733,"91":0.43905,"92":0.04622,"93":0.04044,"94":0.29463,"95":0.10976,"96":2.64009,"97":4.19988,"98":0.01155,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 64 65 67 69 70 71 73 74 75 76 77 79 80 81 82 84 86 99 3.5 3.6"},D:{"38":0.01733,"47":0.00578,"49":0.04622,"53":0.00578,"61":0.00578,"64":0.17909,"65":0.01155,"67":0.01155,"68":0.01155,"69":0.01155,"70":0.19642,"71":0.00578,"72":0.19064,"75":0.01155,"76":0.00578,"77":0.01155,"78":0.02889,"79":0.48527,"80":0.21375,"81":0.01733,"83":0.01733,"84":0.02889,"85":0.02889,"86":0.03466,"87":0.06932,"88":0.03466,"89":0.04044,"90":0.03466,"91":0.05199,"92":0.04622,"93":0.33507,"94":0.08088,"95":0.10976,"96":0.48527,"97":8.71749,"98":19.16809,"100":0.01155,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 54 55 56 57 58 59 60 62 63 66 73 74 99 101"},F:{"46":0.00578,"80":0.00578,"82":0.67013,"83":1.92374,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00578,"18":0.03466,"84":0.01155,"85":0.00578,"88":0.01155,"89":0.00578,"90":0.01155,"91":0.00578,"92":0.02889,"93":0.00578,"94":0.04044,"95":0.06932,"96":0.14443,"97":2.02195,"98":6.73598,_:"12 13 14 15 16 79 80 81 83 86 87"},E:{"4":0,"8":0.00578,"12":0.00578,"13":0.04622,"14":0.36395,"15":0.2253,_:"0 5 6 7 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.01155,"11.1":0.05777,"12.1":0.06932,"13.1":0.33507,"14.1":1.14962,"15.1":0.68169,"15.2-15.3":1.27094,"15.4":0.01155},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00161,"6.0-6.1":0,"7.0-7.1":0.00484,"8.1-8.4":0.00484,"9.0-9.2":0.00323,"9.3":0.05811,"10.0-10.2":0.00161,"10.3":0.07103,"11.0-11.2":0.02744,"11.3-11.4":0.02099,"12.0-12.1":0.02583,"12.2-12.5":0.36159,"13.0-13.1":0.04036,"13.2":0.02099,"13.3":0.05004,"13.4-13.7":0.15658,"14.0-14.4":0.69251,"14.5-14.8":3.01058,"15.0-15.1":2.43914,"15.2-15.3":9.08341,"15.4":0.06134},P:{"4":0.15819,"5.0-5.4":0.01086,"6.2-6.4":0.02066,"7.2-7.4":0.23603,"8.2":0.01029,"9.2":0.01086,"10.1":0.06172,"11.1-11.2":0.04219,"12.0":0.02109,"13.0":0.12656,"14.0":0.08437,"15.0":0.08437,"16.0":3.44863},I:{"0":0,"3":0,"4":0.00106,"2.1":0,"2.2":0.00053,"2.3":0.00053,"4.1":0.00211,"4.2-4.3":0.00211,"4.4":0,"4.4.3-4.4.4":0.04434},A:{"11":0.38706,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.61656},Q:{"10.4":0},O:{"0":0.03801},H:{"0":0.38781},L:{"0":21.03817},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00491,"49":0,"50":0,"51":0,"52":0.03434,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.04415,"61":0.00491,"62":0,"63":0,"64":0,"65":0,"66":0.04415,"67":0,"68":0.00981,"69":0.00491,"70":0,"71":0,"72":0.00981,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.03925,"79":0,"80":0.00491,"81":0.00491,"82":0,"83":0,"84":0.00491,"85":0.00491,"86":0,"87":0,"88":0.00491,"89":0.00491,"90":0.00491,"91":0.18152,"92":0.00491,"93":0.00491,"94":0.00981,"95":0.00981,"96":0.00981,"97":0.00491,"98":0.00981,"99":0.01472,"100":0.01472,"101":0.03925,"102":0.17662,"103":3.12512,"104":0.58872,"105":0.00491,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00491,"35":0,"36":0.00491,"37":0,"38":0.00491,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00491,"48":0,"49":0.01472,"50":0,"51":0,"52":0,"53":0.00491,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00491,"66":0,"67":0.00981,"68":0,"69":0.03434,"70":0.00491,"71":0,"72":0,"73":0.00491,"74":0,"75":0.00491,"76":0.00491,"77":0.00491,"78":0.00491,"79":0.13246,"80":0.04415,"81":0.01962,"83":0.00981,"84":0.00981,"85":0.01472,"86":0.03925,"87":0.03925,"88":0.00491,"89":0.04415,"90":0.00981,"91":0.00981,"92":0.02453,"93":0.01472,"94":0.00981,"95":0.01472,"96":0.05397,"97":0.05887,"98":0.05887,"99":0.02453,"100":0.06378,"101":0.0834,"102":0.13246,"103":2.84548,"104":6.77028,"105":0.01962,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00491,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00981,"64":0.00491,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00491,"72":0,"73":0,"74":0,"75":0.00491,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.0785,"86":0,"87":0.00981,"88":0.01472,"89":1.03026,"90":0.09321,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00491,"16":0,"17":0,"18":0.00981,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00491,"86":0,"87":0,"88":0,"89":0,"90":0.00491,"91":0,"92":0.00981,"93":0,"94":0,"95":0.00491,"96":0.00491,"97":0.00491,"98":0.00491,"99":0.00491,"100":0.00981,"101":0.04906,"102":0.05397,"103":1.03517,"104":2.88963,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01472,"14":0.08831,"15":0.02944,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00491,"10.1":0.00491,"11.1":0.02453,"12.1":0.02453,"13.1":0.1619,"14.1":0.27474,"15.1":0.05887,"15.2-15.3":0.05887,"15.4":0.15699,"15.5":0.57891,"15.6":1.10385,"16.0":0.01472},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00541,"8.1-8.4":0.00541,"9.0-9.2":0.00271,"9.3":0.10558,"10.0-10.2":0.00271,"10.3":0.09476,"11.0-11.2":0.04061,"11.3-11.4":0.01895,"12.0-12.1":0.04602,"12.2-12.5":0.51439,"13.0-13.1":0.02707,"13.2":0.02437,"13.3":0.08663,"13.4-13.7":0.13807,"14.0-14.4":0.49544,"14.5-14.8":1.4078,"15.0-15.1":0.39527,"15.2-15.3":0.64163,"15.4":1.19933,"15.5":6.58416,"15.6":14.96596,"16.0":0.25719},P:{"4":0.19716,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01038,"8.2":0,"9.2":0,"10.1":0.01038,"11.1-11.2":0.03113,"12.0":0.02075,"13.0":0.07264,"14.0":0.05188,"15.0":0.06226,"16.0":0.14527,"17.0":1.80554,"18.0":2.63567},I:{"0":0,"3":0,"4":0.00555,"2.1":0,"2.2":0,"2.3":0,"4.1":0.09258,"4.2-4.3":0.01111,"4.4":0,"4.4.3-4.4.4":0.1185},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00491,"9":0,"10":0,"11":0.10303,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":39.32953},S:{"2.5":0},R:{_:"0"},M:{"0":0.90164},Q:{"10.4":0},O:{"0":0.05094},H:{"0":0.6173}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AU.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AU.js index e57e65dcecb..a1a95547fd1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AU.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AU.js @@ -1 +1 @@ -module.exports={C:{"34":0.01736,"48":0.00579,"52":0.02894,"54":0.01736,"66":0.01157,"78":0.05787,"84":0.01157,"87":0.02315,"88":0.00579,"89":0.01157,"90":0.01157,"91":0.05208,"93":0.01736,"94":0.16204,"95":0.05208,"96":0.96064,"97":1.44096,"98":0.01157,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 55 56 57 58 59 60 61 62 63 64 65 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 92 99 3.5 3.6"},D:{"26":0.01157,"34":0.03472,"38":0.11574,"49":0.05787,"53":0.02894,"56":0.01157,"57":0.01157,"59":0.04051,"60":0.02894,"64":0.0463,"65":0.02315,"66":0.01157,"67":0.02315,"68":0.01736,"69":0.02315,"70":0.0463,"71":0.00579,"72":0.05208,"73":0.01157,"74":0.02894,"75":0.01736,"76":0.01736,"77":0.01157,"78":0.03472,"79":0.37037,"80":0.08681,"81":0.0463,"83":0.02894,"84":0.03472,"85":0.0463,"86":0.06944,"87":0.21412,"88":0.03472,"89":0.02894,"90":0.0463,"91":0.08102,"92":0.1794,"93":0.24305,"94":0.2662,"95":0.4456,"96":1.2037,"97":10.78697,"98":22.14685,"99":0.01157,"100":0.02315,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 58 61 62 63 101"},F:{"36":0.00579,"46":0.06366,"80":0.00579,"82":0.14468,"83":0.42245,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00579,"16":0.01157,"17":0.00579,"18":0.02315,"84":0.01157,"85":0.00579,"86":0.02315,"88":0.00579,"89":0.01736,"90":0.01157,"91":0.01157,"92":0.01736,"93":0.00579,"94":0.01157,"95":0.09838,"96":0.10417,"97":1.44096,"98":4.97103,_:"12 13 14 79 80 81 83 87"},E:{"4":0,"11":0.00579,"12":0.01736,"13":0.12731,"14":0.55555,"15":0.36458,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1","9.1":0.01157,"10.1":0.04051,"11.1":0.06366,"12.1":0.14468,"13.1":0.59027,"14.1":2.33795,"15.1":1.0706,"15.2-15.3":2.21642,"15.4":0.01157},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01973,"6.0-6.1":0.01315,"7.0-7.1":0.01315,"8.1-8.4":0.02192,"9.0-9.2":0.02631,"9.3":0.21483,"10.0-10.2":0.01973,"10.3":0.24113,"11.0-11.2":0.06796,"11.3-11.4":0.08549,"12.0-12.1":0.06357,"12.2-12.5":1.10701,"13.0-13.1":0.03727,"13.2":0.01754,"13.3":0.10961,"13.4-13.7":0.32005,"14.0-14.4":0.94699,"14.5-14.8":4.1935,"15.0-15.1":2.91112,"15.2-15.3":11.44718,"15.4":0.04823},P:{"4":0.78159,"5.0-5.4":0.01086,"6.2-6.4":0.02066,"7.2-7.4":0.23603,"8.2":0.01029,"9.2":0.01086,"10.1":0.06172,"11.1-11.2":0.03257,"12.0":0.02171,"13.0":0.08684,"14.0":0.0977,"15.0":0.10855,"16.0":2.56187},I:{"0":0,"3":0,"4":0.00291,"2.1":0,"2.2":0.00145,"2.3":0.00145,"4.1":0.00291,"4.2-4.3":0.00654,"4.4":0,"4.4.3-4.4.4":0.02688},A:{"8":0.01068,"9":0.01068,"11":0.3953,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.38347},Q:{"10.4":0.00843},O:{"0":0.08428},H:{"0":0.13165},L:{"0":16.1369},S:{"2.5":0}}; +module.exports={C:{"2":0.00607,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00607,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00607,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.02426,"53":0,"54":0.01213,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00607,"67":0,"68":0.00607,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.03033,"79":0.00607,"80":0.00607,"81":0.00607,"82":0.00607,"83":0.00607,"84":0.00607,"85":0,"86":0,"87":0.00607,"88":0.00607,"89":0.00607,"90":0,"91":0.03033,"92":0,"93":0.00607,"94":0.06066,"95":0.00607,"96":0.00607,"97":0.00607,"98":0.00607,"99":0.00607,"100":0.01213,"101":0.0182,"102":0.08492,"103":1.21927,"104":0.23051,"105":0.00607,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0.01213,"26":0.00607,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.0182,"35":0,"36":0,"37":0,"38":0.04853,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02426,"50":0,"51":0,"52":0,"53":0.00607,"54":0,"55":0,"56":0.00607,"57":0,"58":0.00607,"59":0.02426,"60":0.0364,"61":0,"62":0,"63":0,"64":0,"65":0.00607,"66":0.00607,"67":0.00607,"68":0.00607,"69":0.0182,"70":0.00607,"71":0,"72":0.00607,"73":0.00607,"74":0.01213,"75":0.00607,"76":0.00607,"77":0.00607,"78":0.01213,"79":0.09099,"80":0.03033,"81":0.02426,"83":0.03033,"84":0.03033,"85":0.05459,"86":0.13345,"87":0.08492,"88":0.01213,"89":0.0182,"90":0.01213,"91":0.02426,"92":0.0364,"93":0.04853,"94":0.03033,"95":0.02426,"96":0.09706,"97":0.07886,"98":0.06673,"99":0.07279,"100":0.16985,"101":0.13952,"102":0.37003,"103":6.47242,"104":13.73342,"105":0.0364,"106":0.00607,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.0182,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00607,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00607,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01213,"89":0.37609,"90":0.02426,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00607,"16":0,"17":0,"18":0.01213,"79":0,"80":0,"81":0,"83":0,"84":0.00607,"85":0.0182,"86":0.00607,"87":0,"88":0,"89":0,"90":0.00607,"91":0,"92":0.00607,"93":0,"94":0,"95":0.00607,"96":0.0182,"97":0.00607,"98":0.00607,"99":0.01213,"100":0.01213,"101":0.04853,"102":0.04853,"103":1.38305,"104":3.30597,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.00607,"9":0,"10":0,"11":0,"12":0.00607,"13":0.04246,"14":0.18198,"15":0.04853,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00607,"10.1":0.01213,"11.1":0.03033,"12.1":0.06066,"13.1":0.25477,"14.1":0.56414,"15.1":0.09099,"15.2-15.3":0.08492,"15.4":0.2851,"15.5":1.15861,"15.6":2.20802,"16.0":0.01213},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0246,"6.0-6.1":0.01406,"7.0-7.1":0.02109,"8.1-8.4":0.0246,"9.0-9.2":0.02109,"9.3":0.2812,"10.0-10.2":0.02109,"10.3":0.31283,"11.0-11.2":0.08436,"11.3-11.4":0.10545,"12.0-12.1":0.08436,"12.2-12.5":1.45871,"13.0-13.1":0.04921,"13.2":0.02109,"13.3":0.12302,"13.4-13.7":0.29526,"14.0-14.4":0.86468,"14.5-14.8":2.18631,"15.0-15.1":0.53076,"15.2-15.3":0.80141,"15.4":1.17049,"15.5":6.74875,"15.6":19.72603,"16.0":0.16872},P:{"4":0.21,"5.0-5.4":0.021,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0.0105,"10.1":0,"11.1-11.2":0.0315,"12.0":0.0105,"13.0":0.0525,"14.0":0.0525,"15.0":0.0315,"16.0":0.0945,"17.0":1.03948,"18.0":1.45947},I:{"0":0,"3":0,"4":0.00873,"2.1":0,"2.2":0.01455,"2.3":0.00582,"4.1":0.00873,"4.2-4.3":0.01746,"4.4":0,"4.4.3-4.4.4":0.09896},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.0107,"9":0.02141,"10":0,"11":0.14987,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":23.79878},S:{"2.5":0},R:{_:"0"},M:{"0":0.38947},Q:{"10.4":0.00393},O:{"0":0.05508},H:{"0":0.12291}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AW.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AW.js index a445f9dc65b..563e3e67265 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AW.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AW.js @@ -1 +1 @@ -module.exports={C:{"52":0.00728,"78":0.01821,"89":0.00364,"90":0.00728,"91":0.01457,"92":0.01093,"95":0.01093,"96":0.35692,"97":1.02704,"98":0.00728,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 93 94 99 3.5 3.6"},D:{"47":0.00728,"49":0.02185,"59":0.00364,"63":0.01093,"65":0.01093,"70":0.02549,"76":0.01093,"79":0.01093,"81":0.01093,"83":0.02549,"84":0.01093,"85":0.02185,"86":0.01457,"87":0.07284,"88":0.00728,"89":0.02185,"90":0.01093,"91":0.05827,"92":0.03642,"93":0.0437,"94":0.04735,"95":0.08377,"96":0.81217,"97":6.06393,"98":12.78342,"99":0.01093,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 50 51 52 53 54 55 56 57 58 60 61 62 64 66 67 68 69 71 72 73 74 75 77 78 80 100 101"},F:{"63":0.00728,"82":0.08741,"83":0.36784,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.00728,"18":0.09105,"84":0.02549,"85":0.02549,"88":0.00728,"89":0.00728,"90":0.01457,"91":0.00728,"92":0.02549,"94":0.03278,"95":0.02549,"96":0.0437,"97":1.60248,"98":4.57435,_:"12 13 14 15 17 79 80 81 83 86 87 93"},E:{"4":0,"7":0.00364,"12":0.00364,"13":0.05099,"14":0.57908,"15":0.17117,_:"0 5 6 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.01457,"11.1":0.02914,"12.1":0.1384,"13.1":0.42976,"14.1":1.02704,"15.1":0.95785,"15.2-15.3":1.71174},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.06182,"10.0-10.2":0.00258,"10.3":0.10819,"11.0-11.2":0.00258,"11.3-11.4":0.03091,"12.0-12.1":0.04637,"12.2-12.5":0.45593,"13.0-13.1":0.00515,"13.2":0.00515,"13.3":0.04637,"13.4-13.7":0.22926,"14.0-14.4":0.92732,"14.5-14.8":4.37388,"15.0-15.1":3.85355,"15.2-15.3":15.50176,"15.4":0.09273},P:{"4":0.2463,"5.0-5.4":0.04115,"6.2-6.4":0.02066,"7.2-7.4":0.23603,"8.2":0.01029,"9.2":0.01026,"10.1":0.06172,"11.1-11.2":0.17446,"12.0":0.04105,"13.0":0.1642,"14.0":0.20525,"15.0":0.23603,"16.0":7.14256},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.15296,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.42599},Q:{"10.4":0},O:{"0":0.01272},H:{"0":0.13243},L:{"0":28.44422},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00337,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00337,"79":0,"80":0,"81":0,"82":0,"83":0.01684,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00337,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00673,"99":0,"100":0,"101":0.00337,"102":0.00337,"103":0.28956,"104":0.05387,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00337,"48":0,"49":0.0202,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00673,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.00337,"77":0,"78":0,"79":0.01684,"80":0,"81":0.00337,"83":0.0101,"84":0.00337,"85":0.0101,"86":0.00337,"87":0.0101,"88":0,"89":0.00673,"90":0,"91":0,"92":0.00673,"93":0.0101,"94":0,"95":0,"96":0.0303,"97":0.00337,"98":0.02357,"99":0.03704,"100":0.00673,"101":0.02694,"102":0.06061,"103":1.89899,"104":4.08417,"105":0.01347,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.10438,"90":0.01347,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0.02357,"85":0.00673,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00337,"93":0.00337,"94":0,"95":0,"96":0.02357,"97":0,"98":0.00337,"99":0.00673,"100":0,"101":0.00337,"102":0.00337,"103":0.50168,"104":1.54882,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00337,"13":0.00337,"14":0.03367,"15":0.00673,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.01347,"12.1":0.01347,"13.1":0.16162,"14.1":0.24579,"15.1":0.03704,"15.2-15.3":0.0202,"15.4":0.09091,"15.5":0.37037,"15.6":0.6835,"16.0":0.00337},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01162,"10.0-10.2":0.01162,"10.3":0.06583,"11.0-11.2":0,"11.3-11.4":0.01936,"12.0-12.1":0.01162,"12.2-12.5":0.48401,"13.0-13.1":0,"13.2":0.01936,"13.3":0.03098,"13.4-13.7":0.10455,"14.0-14.4":0.34849,"14.5-14.8":2.41618,"15.0-15.1":0.54209,"15.2-15.3":0.65438,"15.4":1.15001,"15.5":8.89032,"15.6":23.6275,"16.0":0.32138},P:{"4":0.19533,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.17477,"8.2":0,"9.2":0.01028,"10.1":0,"11.1-11.2":0.12336,"12.0":0.02056,"13.0":0.0514,"14.0":0.09252,"15.0":0.06168,"16.0":0.13364,"17.0":2.94017,"18.0":4.4411},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.20835},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0101,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":38.34502},S:{"2.5":0},R:{_:"0"},M:{"0":0.43778},Q:{"10.4":0},O:{"0":0.0796},H:{"0":0.08792}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AX.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AX.js index e005f631a23..0aac712f10b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AX.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AX.js @@ -1 +1 @@ -module.exports={C:{"48":0.0186,"52":0.15503,"68":0.08681,"78":0.03101,"85":0.0062,"91":0.04341,"94":0.0186,"95":0.08681,"96":2.06493,"97":2.67263,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 86 87 88 89 90 92 93 98 99 3.5 3.6"},D:{"49":0.0186,"68":0.0124,"76":0.75032,"84":0.07441,"87":0.04961,"89":0.0124,"90":0.0124,"91":0.0062,"92":0.0124,"93":0.0062,"94":0.09922,"95":0.0124,"96":0.32245,"97":12.20977,"98":24.22731,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 77 78 79 80 81 83 85 86 88 99 100 101"},F:{"82":1.51304,"83":1.43243,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"96":0.03721,"97":2.38118,"98":5.71112,_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95"},E:{"4":0,"13":0.03721,"14":0.32245,"15":0.6387,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.0186,"12.1":0.15503,"13.1":0.73172,"14.1":3.24932,"15.1":0.24184,"15.2-15.3":0.89294},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00108,"9.0-9.2":0.00216,"9.3":0.05624,"10.0-10.2":0.01947,"10.3":1.09559,"11.0-11.2":0.00649,"11.3-11.4":0.00108,"12.0-12.1":1.01123,"12.2-12.5":1.54767,"13.0-13.1":0.09085,"13.2":0.00649,"13.3":0.11356,"13.4-13.7":0.12546,"14.0-14.4":0.25416,"14.5-14.8":2.01273,"15.0-15.1":0.79925,"15.2-15.3":3.66423,"15.4":0.00324},P:{"4":1.2008,"5.0-5.4":0.35318,"6.2-6.4":0.35318,"7.2-7.4":0.03744,"8.2":0.01248,"9.2":0.29263,"10.1":0.02018,"11.1-11.2":0.25227,"12.0":0.02496,"13.0":0.07488,"14.0":0.03744,"15.0":0.04992,"16.0":3.05749},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.095},A:{"11":0.16123,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.3192},Q:{"10.4":0},O:{"0":0},H:{"0":0.05396},L:{"0":23.79411},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.0412,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00589,"67":0,"68":0.00589,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01766,"79":0.00589,"80":0.02943,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00589,"87":0,"88":0,"89":0,"90":0,"91":0.01177,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00589,"101":0.01177,"102":0.64735,"103":2.52467,"104":0.43549,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00589,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.02354,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.01766,"72":0,"73":0,"74":0,"75":0,"76":0.21186,"77":0,"78":0,"79":0.0412,"80":0,"81":0,"83":0,"84":0.00589,"85":0,"86":0.02354,"87":0.00589,"88":0.00589,"89":0,"90":0,"91":0,"92":0.02943,"93":0.00589,"94":0.00589,"95":0.01766,"96":0.07651,"97":0.01177,"98":0.02943,"99":0.00589,"100":0.08828,"101":0.01766,"102":0.10005,"103":4.76097,"104":12.85284,"105":0.02354,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00589,"89":0.75328,"90":0.02354,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00589,"100":0,"101":0.00589,"102":0.07062,"103":1.24174,"104":3.1779,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.01766,"13":0.01177,"14":0.1589,"15":0.14124,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.08828,"10.1":0,"11.1":0,"12.1":0.05297,"13.1":0.28837,"14.1":1.77727,"15.1":0.0412,"15.2-15.3":0.02354,"15.4":0.37664,"15.5":0.57673,"15.6":1.09461,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01168,"8.1-8.4":0.01947,"9.0-9.2":0,"9.3":0.02726,"10.0-10.2":0.00195,"10.3":0.63856,"11.0-11.2":0.01168,"11.3-11.4":0.01557,"12.0-12.1":0.26282,"12.2-12.5":3.18111,"13.0-13.1":0.36016,"13.2":0.01168,"13.3":0.0623,"13.4-13.7":0.08371,"14.0-14.4":0.78846,"14.5-14.8":0.97925,"15.0-15.1":0.26282,"15.2-15.3":0.36016,"15.4":0.77678,"15.5":2.96501,"15.6":8.60884,"16.0":0.03894},P:{"4":0.07613,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.087,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.0435,"12.0":0.01088,"13.0":0.03263,"14.0":0,"15.0":0.02175,"16.0":0.09788,"17.0":1.46817,"18.0":1.81618},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.05949,"4.4":0,"4.4.3-4.4.4":0.03051},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.05297,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":38.88284},S:{"2.5":0},R:{_:"0"},M:{"0":2.62126},Q:{"10.4":0},O:{"0":0.02469},H:{"0":0.31946}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AZ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AZ.js index 2e3d6d35158..7c507c53572 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AZ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/AZ.js @@ -1 +1 @@ -module.exports={C:{"52":0.00983,"56":0.00328,"68":0.13432,"78":0.06552,"79":0.0131,"83":0.00655,"84":0.00655,"89":0.00983,"91":0.00983,"93":0.00655,"95":0.0131,"96":0.1638,"97":0.19984,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 80 81 82 85 86 87 88 90 92 94 98 99 3.5 3.6"},D:{"22":0.00655,"34":0.00328,"38":0.02948,"40":0.00328,"49":0.02621,"53":0.02948,"55":0.00328,"56":0.00655,"58":0.00328,"63":0.00655,"65":0.01638,"66":0.0131,"67":0.02621,"68":0.03604,"69":0.02621,"70":0.00983,"71":0.00655,"72":0.00983,"73":0.00328,"74":0.02621,"75":0.00328,"76":0.00328,"77":0.00983,"78":0.00983,"79":0.7502,"80":0.07207,"81":0.00655,"83":0.02293,"84":0.02621,"85":0.01966,"86":0.03931,"87":0.05897,"88":0.01966,"89":0.05569,"90":0.01638,"91":0.08845,"92":0.05897,"93":0.17363,"94":0.02948,"95":0.04914,"96":0.51761,"97":7.7805,"98":15.66911,"99":0.00655,"100":0.01638,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 41 42 43 44 45 46 47 48 50 51 52 54 57 59 60 61 62 64 101"},F:{"25":0.00655,"28":0.02621,"32":0.00328,"36":0.00655,"40":0.00655,"46":0.01966,"62":0.00655,"77":0.00328,"80":0.00983,"81":0.0131,"82":0.36691,"83":2.07043,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 26 27 29 30 31 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 79 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.02621,"84":0.00983,"92":0.00328,"94":0.00655,"95":0.00983,"96":0.00655,"97":0.2326,"98":0.74365,_:"12 13 14 15 16 17 79 80 81 83 85 86 87 88 89 90 91 93"},E:{"4":0,"13":0.00983,"14":0.10811,"15":0.04586,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 11.1 15.4","5.1":0.04259,"12.1":0.03604,"13.1":0.07862,"14.1":0.27518,"15.1":0.13759,"15.2-15.3":0.20311},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00689,"6.0-6.1":0.00098,"7.0-7.1":0.03347,"8.1-8.4":0,"9.0-9.2":0.00394,"9.3":0.01181,"10.0-10.2":0.01378,"10.3":0.1073,"11.0-11.2":0.02461,"11.3-11.4":0.02953,"12.0-12.1":0.01181,"12.2-12.5":0.52272,"13.0-13.1":0.01969,"13.2":0.00788,"13.3":0.04824,"13.4-13.7":0.16833,"14.0-14.4":0.55816,"14.5-14.8":1.94027,"15.0-15.1":1.77292,"15.2-15.3":4.52829,"15.4":0.02658},P:{"4":0.62086,"5.0-5.4":0.01086,"6.2-6.4":0.02066,"7.2-7.4":0.08142,"8.2":0.01018,"9.2":0.01018,"10.1":0.01018,"11.1-11.2":0.12214,"12.0":0.04071,"13.0":0.19338,"14.0":0.25445,"15.0":0.21374,"16.0":3.27732},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00359,"4.2-4.3":0.00932,"4.4":0,"4.4.3-4.4.4":0.04088},A:{"11":0.05897,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.06052},Q:{"10.4":0},O:{"0":0.29586},H:{"0":0.55383},L:{"0":50.00176},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00996,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.03984,"79":0.00332,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00332,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00664,"102":0.00664,"103":0.0996,"104":0.01992,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00332,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00664,"50":0,"51":0,"52":0,"53":0.01992,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00332,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00332,"68":0.00664,"69":0,"70":0.00332,"71":0.00332,"72":0.00332,"73":0,"74":0.00664,"75":0.00332,"76":0,"77":0.00332,"78":0,"79":0.30876,"80":0.00332,"81":0.00664,"83":0.00332,"84":0.00332,"85":0.01328,"86":0.00332,"87":0.05976,"88":0.00332,"89":0.01328,"90":0.00332,"91":0.00332,"92":0.03652,"93":0,"94":0.00332,"95":0.00664,"96":0.00996,"97":0.01328,"98":0.00664,"99":0.00996,"100":0.03984,"101":0.0166,"102":0.07636,"103":2.16464,"104":5.32528,"105":0.01328,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.0166,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00996,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.02656,"64":0.02324,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00332,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00332,"78":0,"79":0.00332,"80":0,"81":0,"82":0.00664,"83":0,"84":0.00332,"85":0.04648,"86":0,"87":0.00664,"88":0.01328,"89":0.91632,"90":0.1328,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00332,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00996,"102":0.00664,"103":0.08632,"104":0.27224,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00996,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.00332,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00332,"13.1":0.00996,"14.1":0.0332,"15.1":0.02324,"15.2-15.3":0.00664,"15.4":0.01992,"15.5":0.0498,"15.6":0.08632,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.02418,"6.0-6.1":0,"7.0-7.1":0.02418,"8.1-8.4":0,"9.0-9.2":0.00269,"9.3":0.0094,"10.0-10.2":0.00403,"10.3":0.15984,"11.0-11.2":0.00672,"11.3-11.4":0.0497,"12.0-12.1":0.01343,"12.2-12.5":0.62057,"13.0-13.1":0.01209,"13.2":0.00537,"13.3":0.03492,"13.4-13.7":0.10209,"14.0-14.4":0.46207,"14.5-14.8":0.75624,"15.0-15.1":0.22432,"15.2-15.3":0.37073,"15.4":0.84623,"15.5":3.23046,"15.6":6.11706,"16.0":0.34924},P:{"4":0.61002,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.10167,"8.2":0.01017,"9.2":0.02033,"10.1":0,"11.1-11.2":0.08134,"12.0":0.02033,"13.0":0.10167,"14.0":0.11184,"15.0":0.07117,"16.0":0.16267,"17.0":1.75888,"18.0":2.03339},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00318,"4.2-4.3":0.00847,"4.4":0,"4.4.3-4.4.4":0.03495},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00664,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":67.51236},S:{"2.5":0},R:{_:"0"},M:{"0":0.10688},Q:{"10.4":0},O:{"0":0.44088},H:{"0":0.63242}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BA.js index bc1fecb67af..c00529c8948 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BA.js @@ -1 +1 @@ -module.exports={C:{"36":0.007,"45":0.47264,"48":0.007,"52":0.62318,"66":0.007,"68":0.007,"71":0.0035,"72":0.007,"77":0.0035,"78":0.0105,"80":0.0035,"83":0.0035,"84":0.0035,"88":0.01751,"89":0.007,"91":0.01751,"92":0.0105,"93":0.014,"94":0.007,"95":0.04201,"96":1.07131,"97":1.68748,"98":0.007,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 46 47 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 67 69 70 73 74 75 76 79 81 82 85 86 87 90 99 3.5 3.6"},D:{"38":0.014,"40":0.007,"42":0.0035,"43":0.007,"47":0.0105,"48":0.007,"49":0.15755,"51":0.0035,"53":0.03501,"55":0.0035,"63":0.0105,"65":0.007,"67":0.007,"68":0.0105,"70":0.02801,"71":0.0035,"72":0.0105,"73":0.007,"74":0.0105,"75":0.0035,"76":0.007,"77":0.014,"78":0.0105,"79":0.16455,"80":0.007,"81":0.02451,"83":0.01751,"84":0.04901,"85":0.02451,"86":0.03851,"87":0.09803,"88":0.01751,"89":0.04201,"90":0.03501,"91":0.04201,"92":0.04551,"93":0.55316,"94":0.14704,"95":0.04901,"96":0.40262,"97":6.79894,"98":16.19213,"99":0.01751,"100":0.0105,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 41 44 45 46 50 52 54 56 57 58 59 60 61 62 64 66 69 101"},F:{"28":0.014,"36":0.007,"40":0.0105,"46":0.007,"67":0.007,"72":0.007,"82":0.29058,"83":1.28137,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.007,"17":0.0035,"18":0.0105,"84":0.007,"85":0.02801,"89":0.0035,"92":0.007,"95":0.014,"96":0.02101,"97":0.36761,"98":1.49843,_:"12 13 14 16 79 80 81 83 86 87 88 90 91 93 94"},E:{"4":0,"12":0.007,"13":0.0035,"14":0.04551,"15":0.01751,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 10.1 11.1 15.4","9.1":0.007,"12.1":0.02101,"13.1":0.04551,"14.1":0.15404,"15.1":0.08753,"15.2-15.3":0.12604},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00104,"6.0-6.1":0,"7.0-7.1":0.01509,"8.1-8.4":0,"9.0-9.2":0.00156,"9.3":0.07544,"10.0-10.2":0.00052,"10.3":0.04266,"11.0-11.2":0.00624,"11.3-11.4":0.00988,"12.0-12.1":0.00728,"12.2-12.5":0.27366,"13.0-13.1":0.00312,"13.2":0.00104,"13.3":0.01873,"13.4-13.7":0.06451,"14.0-14.4":0.20602,"14.5-14.8":1.11232,"15.0-15.1":0.68466,"15.2-15.3":2.65749,"15.4":0.01873},P:{"4":0.19504,"5.0-5.4":0.1009,"6.2-6.4":0.18286,"7.2-7.4":0.06159,"8.2":0.02052,"9.2":0.02053,"10.1":0.01018,"11.1-11.2":0.09239,"12.0":0.02053,"13.0":0.10266,"14.0":0.09239,"15.0":0.08212,"16.0":2.30974},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00263,"4.2-4.3":0.01052,"4.4":0,"4.4.3-4.4.4":0.09735},A:{"11":0.06302,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.208},Q:{"10.4":0},O:{"0":0.026},H:{"0":0.20307},L:{"0":48.43978},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.18186,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.14549,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00303,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00303,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00606,"92":0.00303,"93":0,"94":0,"95":0.00606,"96":0,"97":0.00606,"98":0,"99":0.01516,"100":0.00303,"101":0.00303,"102":0.02425,"103":0.51224,"104":0.09699,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00303,"23":0,"24":0,"25":0,"26":0.00303,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00303,"35":0,"36":0,"37":0,"38":0.00303,"39":0,"40":0,"41":0,"42":0,"43":0.00303,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02425,"50":0,"51":0,"52":0,"53":0.00606,"54":0.00303,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00606,"69":0,"70":0,"71":0,"72":0.00303,"73":0,"74":0,"75":0.00303,"76":0.00303,"77":0.00303,"78":0.00303,"79":0.04243,"80":0.00303,"81":0.01212,"83":0.00909,"84":0.00909,"85":0.00606,"86":0.00909,"87":0.00909,"88":0.00606,"89":0.01212,"90":0.00303,"91":0.00909,"92":0.01516,"93":0.00606,"94":0.01212,"95":0.00606,"96":0.01516,"97":0.01516,"98":0.01212,"99":0.01516,"100":0.02425,"101":0.01819,"102":0.0485,"103":1.59734,"104":4.52831,"105":0.01516,"106":0.00303,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00606,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00303,"37":0,"38":0,"39":0,"40":0.00303,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00303,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00303,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00303,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00606,"86":0,"87":0,"88":0.00303,"89":0.33341,"90":0.03031,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00303,"16":0,"17":0,"18":0.00303,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00606,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00303,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00606,"102":0.00303,"103":0.11215,"104":0.34553,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00303,"13":0.00303,"14":0.00909,"15":0.00606,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00303,"12.1":0.00606,"13.1":0.00909,"14.1":0.02425,"15.1":0.00303,"15.2-15.3":0.00303,"15.4":0.01819,"15.5":0.0394,"15.6":0.06971,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01478,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.07813,"10.0-10.2":0.00106,"10.3":0.12353,"11.0-11.2":0.00634,"11.3-11.4":0.0095,"12.0-12.1":0.01056,"12.2-12.5":0.43078,"13.0-13.1":0.00739,"13.2":0.00528,"13.3":0.01689,"13.4-13.7":0.07074,"14.0-14.4":0.19428,"14.5-14.8":0.65251,"15.0-15.1":0.12776,"15.2-15.3":0.22173,"15.4":0.46563,"15.5":2.97959,"15.6":5.06172,"16.0":0.07285},P:{"4":0.26553,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.07149,"8.2":0,"9.2":0.02043,"10.1":0.01021,"11.1-11.2":0.06128,"12.0":0.02043,"13.0":0.07149,"14.0":0.06128,"15.0":0.06128,"16.0":0.11234,"17.0":1.1132,"18.0":1.53192},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02536,"4.2-4.3":0.03227,"4.4":0,"4.4.3-4.4.4":0.15905},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01212,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":75.46706},S:{"2.5":0},R:{_:"0"},M:{"0":0.18119},Q:{"10.4":0},O:{"0":0.02091},H:{"0":0.15835}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BB.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BB.js index eb29c4981bf..aa8e33a5b3a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BB.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BB.js @@ -1 +1 @@ -module.exports={C:{"45":0.0092,"52":0.0092,"78":0.0184,"80":0.0092,"87":0.0276,"89":0.0276,"91":0.0092,"95":0.0322,"96":0.7912,"97":1.2512,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 81 82 83 84 85 86 88 90 92 93 94 98 99 3.5 3.6"},D:{"49":0.0138,"50":0.0138,"72":0.0046,"74":0.0092,"75":0.0092,"76":0.0368,"77":0.0092,"79":0.345,"80":0.0092,"81":0.0414,"83":0.0138,"85":0.0138,"86":0.0184,"87":0.1012,"88":0.0138,"89":0.0092,"90":0.0046,"91":0.046,"92":0.0322,"93":0.1288,"94":0.0874,"95":0.0368,"96":0.4094,"97":9.6968,"98":18.6484,"99":0.0138,"100":0.023,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 78 84 101"},F:{"82":0.1518,"83":0.7038,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.0092,"17":0.0184,"18":0.023,"91":0.0046,"92":0.0046,"94":0.0138,"95":0.0092,"96":0.0782,"97":1.5962,"98":5.2394,_:"12 13 14 15 79 80 81 83 84 85 86 87 88 89 90 93"},E:{"4":0.0092,"13":0.0138,"14":0.1242,"15":0.0782,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.0598,"11.1":0.0138,"12.1":0.0322,"13.1":0.1518,"14.1":0.8648,"15.1":0.6762,"15.2-15.3":1.0488,"15.4":0.0138},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.05018,"6.0-6.1":0,"7.0-7.1":0.00878,"8.1-8.4":0,"9.0-9.2":0.00125,"9.3":0.0966,"10.0-10.2":0,"10.3":0.05269,"11.0-11.2":0.00502,"11.3-11.4":0.00878,"12.0-12.1":0.00753,"12.2-12.5":0.82045,"13.0-13.1":0.03136,"13.2":0.00251,"13.3":0.01882,"13.4-13.7":0.06273,"14.0-14.4":0.51184,"14.5-14.8":1.78516,"15.0-15.1":1.73624,"15.2-15.3":7.27991,"15.4":0.05896},P:{"4":0.2516,"5.0-5.4":0.01086,"6.2-6.4":0.02079,"7.2-7.4":0.26254,"8.2":0.02052,"9.2":0.0104,"10.1":0.01018,"11.1-11.2":0.12033,"12.0":0.01094,"13.0":0.07658,"14.0":0.21879,"15.0":0.28442,"16.0":4.2882},I:{"0":0,"3":0,"4":0.00085,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00057,"4.2-4.3":0.00114,"4.4":0,"4.4.3-4.4.4":0.02444},A:{"10":0.0368,"11":0.092,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.0216},N:{_:"10 11"},R:{_:"0"},M:{"0":0.5562},Q:{"10.4":0},O:{"0":0.0378},H:{"0":0.07157},L:{"0":33.1902},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.01988,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00497,"69":0,"70":0,"71":0,"72":0.00497,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00994,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00497,"88":0,"89":0,"90":0,"91":0.00497,"92":0,"93":0.00497,"94":0,"95":0.00497,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00994,"102":0.02981,"103":0.81492,"104":0.18882,"105":0.02485,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00497,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.01491,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.01988,"68":0,"69":0,"70":0.00497,"71":0,"72":0,"73":0,"74":0,"75":0.00497,"76":0.03478,"77":0.00497,"78":0,"79":0.14907,"80":0.03478,"81":0.03478,"83":0.03975,"84":0,"85":0.00994,"86":0.0646,"87":0.00994,"88":0,"89":0.00994,"90":0.00497,"91":0.00497,"92":0.00994,"93":0.04472,"94":0.00994,"95":0.03478,"96":0.01491,"97":0.00497,"98":0.01988,"99":0.08447,"100":0.04472,"101":0.03478,"102":0.12919,"103":3.72675,"104":8.89451,"105":0.01988,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00497,"64":0.00497,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00497,"89":0.60622,"90":0.07454,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00497,"79":0,"80":0,"81":0,"83":0,"84":0.00497,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0.00994,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.01988,"100":0,"101":0.01491,"102":0.00497,"103":1.17765,"104":3.60253,"105":0},E:{"4":0.00994,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00497,"14":0.07454,"15":0.01988,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.03975,"10.1":0,"11.1":0.03975,"12.1":0.00994,"13.1":0.04969,"14.1":0.08447,"15.1":0.01988,"15.2-15.3":0.0646,"15.4":0.0646,"15.5":0.30311,"15.6":0.78013,"16.0":0.00497},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01125,"6.0-6.1":0,"7.0-7.1":0.04312,"8.1-8.4":0,"9.0-9.2":0.00375,"9.3":0.35248,"10.0-10.2":0.00937,"10.3":0.06187,"11.0-11.2":0.00562,"11.3-11.4":0.01125,"12.0-12.1":0.03,"12.2-12.5":0.71433,"13.0-13.1":0.00562,"13.2":0,"13.3":0.01312,"13.4-13.7":0.045,"14.0-14.4":0.28873,"14.5-14.8":0.57934,"15.0-15.1":0.11624,"15.2-15.3":0.41997,"15.4":0.72933,"15.5":3.40102,"15.6":11.70671,"16.0":0.19499},P:{"4":0.23914,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.3261,"8.2":0,"9.2":0.01087,"10.1":0,"11.1-11.2":0.03261,"12.0":0.01087,"13.0":0.6848,"14.0":0.03261,"15.0":0.1087,"16.0":0.16305,"17.0":2.4131,"18.0":2.81529},I:{"0":0,"3":0,"4":0.04077,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.08155,"4.4":0,"4.4.3-4.4.4":1.48825},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02485,"5.5":0},J:{"7":0,"10":0.01509},N:{"10":0,"11":0},L:{"0":46.83263},S:{"2.5":0},R:{_:"0"},M:{"0":0.32702},Q:{"10.4":0},O:{"0":0.02516},H:{"0":0.09526}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BD.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BD.js index e0d5e1e133d..e22c01d867a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BD.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BD.js @@ -1 +1 @@ -module.exports={C:{"11":0.00817,"40":0.01905,"41":0.00272,"43":0.00544,"47":0.01089,"48":0.00272,"49":0.00272,"50":0.00817,"52":0.049,"56":0.00817,"57":0.00272,"68":0.00544,"72":0.00817,"78":0.02722,"79":0.00544,"80":0.00544,"81":0.00544,"82":0.00544,"84":0.00544,"86":0.00272,"87":0.00272,"88":0.00817,"89":0.01361,"90":0.00272,"91":0.03266,"92":0.01361,"93":0.01089,"94":0.00817,"95":0.03266,"96":0.89009,"97":1.70669,"98":0.16876,_:"2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 42 44 45 46 51 53 54 55 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 83 85 99 3.5 3.6"},D:{"38":0.00544,"39":0.00272,"43":0.00544,"47":0.00272,"49":0.00817,"50":0.00272,"53":0.00544,"55":0.00272,"56":0.00817,"62":0.00272,"63":0.00544,"64":0.01361,"65":0.00544,"66":0.00544,"67":0.00272,"69":0.00817,"70":0.00817,"71":0.00544,"72":0.00272,"73":0.00817,"74":0.00817,"75":0.00272,"76":0.00544,"77":0.00544,"78":0.00817,"79":0.02722,"80":0.01633,"81":0.02178,"83":0.02722,"84":0.04083,"85":0.02994,"86":0.06533,"87":0.07349,"88":0.01089,"89":0.03266,"90":0.02178,"91":0.02994,"92":0.05444,"93":0.16876,"94":0.03811,"95":0.049,"96":0.25042,"97":4.55118,"98":12.09112,"99":0.03539,"100":0.04083,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 40 41 42 44 45 46 48 51 52 54 57 58 59 60 61 68 101"},F:{"28":0.00817,"29":0.00544,"36":0.00817,"46":0.00544,"67":0.00817,"71":0.00272,"80":0.00272,"82":0.06805,"83":0.51174,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00817,"16":0.00272,"18":0.01361,"84":0.00544,"85":0.00272,"89":0.00544,"92":0.01089,"95":0.00544,"96":0.01361,"97":0.22593,"98":0.84382,_:"13 14 15 17 79 80 81 83 86 87 88 90 91 93 94"},E:{"4":0,"13":0.00817,"14":0.01633,"15":0.01089,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 15.4","12.1":0.00272,"13.1":0.01089,"14.1":0.04627,"15.1":0.02994,"15.2-15.3":0.0871},G:{"8":0,"3.2":0.0008,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00723,"6.0-6.1":0.0002,"7.0-7.1":0.05405,"8.1-8.4":0.001,"9.0-9.2":0.00181,"9.3":0.02733,"10.0-10.2":0.001,"10.3":0.02934,"11.0-11.2":0.00442,"11.3-11.4":0.00342,"12.0-12.1":0.00482,"12.2-12.5":0.1704,"13.0-13.1":0.00422,"13.2":0.00141,"13.3":0.01186,"13.4-13.7":0.03597,"14.0-14.4":0.08641,"14.5-14.8":0.24998,"15.0-15.1":0.30624,"15.2-15.3":0.99528,"15.4":0.01125},P:{"4":0.33266,"5.0-5.4":0.01086,"6.2-6.4":0.02079,"7.2-7.4":0.10396,"8.2":0.02052,"9.2":0.0104,"10.1":0.01018,"11.1-11.2":0.03119,"12.0":0.02079,"13.0":0.08317,"14.0":0.07277,"15.0":0.05198,"16.0":0.65493},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00228,"4.2-4.3":0.00683,"4.4":0,"4.4.3-4.4.4":0.18738},A:{"8":0.01221,"9":0.0061,"11":0.0824,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.11643},Q:{"10.4":0},O:{"0":2.93263},H:{"0":2.31484},L:{"0":65.76212},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.009,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.009,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.003,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.003,"79":0.003,"80":0.003,"81":0.003,"82":0.003,"83":0,"84":0.003,"85":0,"86":0,"87":0,"88":0,"89":0.003,"90":0,"91":0.009,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.003,"98":0.003,"99":0.006,"100":0.006,"101":0.006,"102":0.021,"103":0.615,"104":0.204,"105":0.015,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.003,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.003,"57":0,"58":0.003,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.003,"70":0.003,"71":0.003,"72":0.003,"73":0.003,"74":0.009,"75":0,"76":0.003,"77":0.003,"78":0.006,"79":0.009,"80":0.009,"81":0.015,"83":0.012,"84":0.021,"85":0.027,"86":0.024,"87":0.027,"88":0.003,"89":0.012,"90":0.003,"91":0.006,"92":0.009,"93":0.003,"94":0.012,"95":0.012,"96":0.015,"97":0.015,"98":0.009,"99":0.015,"100":0.018,"101":0.024,"102":0.045,"103":1.239,"104":4.026,"105":0.027,"106":0.009,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.003,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.003,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.003,"56":0,"57":0,"58":0.003,"60":0.003,"62":0,"63":0.162,"64":0.156,"65":0,"66":0,"67":0,"68":0.003,"69":0.003,"70":0.003,"71":0.003,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.003,"86":0,"87":0,"88":0.003,"89":0.141,"90":0.027,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.003,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.009,"79":0,"80":0,"81":0,"83":0,"84":0.003,"85":0,"86":0,"87":0,"88":0,"89":0.003,"90":0,"91":0,"92":0.003,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.003,"102":0.003,"103":0.081,"104":0.255,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.003,"14":0.003,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.003,"14.1":0.006,"15.1":0.003,"15.2-15.3":0,"15.4":0.009,"15.5":0.021,"15.6":0.036,"16.0":0},G:{"8":0.0006,"3.2":0.0003,"4.0-4.1":0,"4.2-4.3":0.0003,"5.0-5.1":0.0039,"6.0-6.1":0.0006,"7.0-7.1":0.04768,"8.1-8.4":0.0009,"9.0-9.2":0.0018,"9.3":0.02549,"10.0-10.2":0.0021,"10.3":0.02279,"11.0-11.2":0.0066,"11.3-11.4":0.0039,"12.0-12.1":0.0045,"12.2-12.5":0.2063,"13.0-13.1":0.0033,"13.2":0.0048,"13.3":0.0069,"13.4-13.7":0.03238,"14.0-14.4":0.07556,"14.5-14.8":0.12534,"15.0-15.1":0.05937,"15.2-15.3":0.12054,"15.4":0.2036,"15.5":0.66777,"15.6":1.33193,"16.0":0.03778},P:{"4":0.30711,"5.0-5.4":0.01024,"6.2-6.4":0.02047,"7.2-7.4":0.20474,"8.2":0,"9.2":0.02047,"10.1":0,"11.1-11.2":0.05118,"12.0":0.02047,"13.0":0.06142,"14.0":0.06142,"15.0":0.03071,"16.0":0.09213,"17.0":0.48114,"18.0":0.40948},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00283,"4.2-4.3":0.00989,"4.4":0,"4.4.3-4.4.4":0.16529},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.0033,"9":0,"10":0,"11":0.0297,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":81.248},S:{"2.5":0.007},R:{_:"0"},M:{"0":0.119},Q:{"10.4":0.007},O:{"0":2.037},H:{"0":2.03453}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BE.js index 25f4a1b7317..53af34180a7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BE.js @@ -1 +1 @@ -module.exports={C:{"48":0.00665,"52":0.03988,"56":0.01994,"68":0.01329,"72":0.00665,"78":0.09304,"84":0.02658,"87":0.11963,"88":0.00665,"89":0.01329,"90":0.01994,"91":0.10634,"92":0.00665,"94":0.01994,"95":0.05981,"96":1.33585,"97":2.12007,"98":0.00665,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 79 80 81 82 83 85 86 93 99 3.5 3.6"},D:{"49":0.05981,"60":0.01329,"65":0.00665,"66":0.02658,"67":0.01994,"69":0.00665,"74":0.03323,"75":0.03988,"76":0.03323,"77":0.03988,"78":0.37218,"79":0.51839,"80":0.03988,"81":0.01329,"83":0.15286,"84":0.01994,"85":0.02658,"86":0.03988,"87":0.15286,"88":0.03323,"89":0.0864,"90":0.03988,"91":0.07975,"92":0.07311,"93":0.14621,"94":0.16615,"95":0.10634,"96":0.79087,"97":14.61455,"98":26.43114,"99":0.01329,"100":0.02658,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 61 62 63 64 68 70 71 72 73 101"},F:{"82":0.20603,"83":0.63137,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01994,"85":0.00665,"86":0.01994,"89":0.00665,"90":0.01329,"91":0.00665,"92":0.01994,"93":0.00665,"94":0.01994,"95":0.03323,"96":0.18609,"97":2.91095,"98":7.56979,_:"12 13 14 15 16 17 79 80 81 83 84 87 88"},E:{"4":0,"11":0.01329,"12":0.00665,"13":0.07311,"14":0.31901,"15":0.20603,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.01329,"11.1":0.03988,"12.1":0.09304,"13.1":0.39876,"14.1":1.12317,"15.1":0.65795,"15.2-15.3":1.46212,"15.4":0.01329},G:{"8":0.00135,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00135,"8.1-8.4":0.00812,"9.0-9.2":0,"9.3":0.05279,"10.0-10.2":0.00406,"10.3":0.11235,"11.0-11.2":0.0176,"11.3-11.4":0.03519,"12.0-12.1":0.01489,"12.2-12.5":0.40338,"13.0-13.1":0.02301,"13.2":0.00677,"13.3":0.04467,"13.4-13.7":0.14619,"14.0-14.4":0.53874,"14.5-14.8":2.4893,"15.0-15.1":2.11976,"15.2-15.3":7.47196,"15.4":0.03519},P:{"4":0.08548,"5.0-5.4":0.01086,"6.2-6.4":0.18286,"7.2-7.4":0.26254,"8.2":0.02052,"9.2":0.0104,"10.1":0.01018,"11.1-11.2":0.02137,"12.0":0.02137,"13.0":0.05342,"14.0":0.07479,"15.0":0.05342,"16.0":2.68191},I:{"0":0,"3":0,"4":0.00152,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00152,"4.2-4.3":0.0038,"4.4":0,"4.4.3-4.4.4":0.03341},A:{"11":0.31901,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.22136},Q:{"10.4":0},O:{"0":0.02012},H:{"0":0.09526},L:{"0":16.38523},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00696,"49":0,"50":0,"51":0,"52":0.02088,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00696,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.02784,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00696,"85":0,"86":0,"87":0.09047,"88":0.00696,"89":0,"90":0.00696,"91":0.06263,"92":0,"93":0,"94":0.24357,"95":0.00696,"96":0,"97":0,"98":0.00696,"99":0.00696,"100":0.00696,"101":0.01392,"102":0.06263,"103":1.63537,"104":0.3062,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.0348,"50":0,"51":0,"52":0,"53":0.00696,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.06263,"65":0,"66":0.02088,"67":0.0348,"68":0,"69":0.01392,"70":0,"71":0,"72":0,"73":0,"74":0.02784,"75":0.02784,"76":0.04175,"77":0.02784,"78":0.37579,"79":0.52888,"80":0.00696,"81":0.01392,"83":0.22965,"84":0.01392,"85":0.01392,"86":0.02088,"87":0.05567,"88":0.00696,"89":0.02784,"90":0.01392,"91":0.0348,"92":0.02088,"93":0.04175,"94":0.00696,"95":0.02088,"96":0.0348,"97":0.05567,"98":0.0348,"99":0.07655,"100":0.14614,"101":0.10439,"102":0.29924,"103":9.25547,"104":21.12057,"105":0.04871,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00696,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00696,"87":0,"88":0.00696,"89":0.43146,"90":0.04175,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00696,"79":0,"80":0,"81":0,"83":0,"84":0.02784,"85":0,"86":0.00696,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.01392,"93":0,"94":0,"95":0,"96":0.01392,"97":0.01392,"98":0.00696,"99":0.02088,"100":0.01392,"101":0.02784,"102":0.06959,"103":2.29647,"104":5.54632,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00696,"12":0,"13":0.01392,"14":0.09047,"15":0.02784,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.02088,"12.1":0.0348,"13.1":0.17398,"14.1":0.25052,"15.1":0.05567,"15.2-15.3":0.06263,"15.4":0.18093,"15.5":0.66111,"15.6":1.28742,"16.0":0.00696},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.01533,"9.0-9.2":0,"9.3":0.06132,"10.0-10.2":0.01095,"10.3":0.14017,"11.0-11.2":0.01752,"11.3-11.4":0.05694,"12.0-12.1":0.0219,"12.2-12.5":0.54752,"13.0-13.1":0.01971,"13.2":0.00438,"13.3":0.03942,"13.4-13.7":0.1774,"14.0-14.4":0.40079,"14.5-14.8":1.12133,"15.0-15.1":0.41393,"15.2-15.3":0.59133,"15.4":0.85633,"15.5":5.25623,"15.6":11.97545,"16.0":0.1555},P:{"4":0.09255,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.03085,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01028,"12.0":0.01028,"13.0":0.02057,"14.0":0.03085,"15.0":0.01028,"16.0":0.04113,"17.0":0.9461,"18.0":1.50142},I:{"0":0,"3":0,"4":0.06277,"2.1":0,"2.2":0.00942,"2.3":0,"4.1":0.02511,"4.2-4.3":0.01883,"4.4":0,"4.4.3-4.4.4":0.11299},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00696,"9":0,"10":0,"11":0.10439,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":24.3815},S:{"2.5":0.00304},R:{_:"0"},M:{"0":0.23112},Q:{"10.4":0},O:{"0":0.01825},H:{"0":0.08349}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BF.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BF.js index a7dc5ff4946..952c7ac1050 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BF.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BF.js @@ -1 +1 @@ -module.exports={C:{"32":0.00447,"39":0.00223,"40":0.00223,"41":0.00447,"43":0.0067,"47":0.0201,"48":0.0067,"49":0.00447,"50":0.00223,"52":0.0335,"56":0.00893,"60":0.0067,"66":0.00223,"68":0.00447,"72":0.02233,"75":0.01563,"76":0.0067,"78":0.01563,"81":0.00223,"82":0.00223,"84":0.0067,"86":0.00223,"88":0.00223,"89":0.0067,"90":0.0067,"91":0.25903,"92":0.00893,"93":0.0067,"94":0.29699,"95":0.04019,"96":1.12543,"97":1.96504,"98":0.01786,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 37 38 42 44 45 46 51 53 54 55 57 58 59 61 62 63 64 65 67 69 70 71 73 74 77 79 80 83 85 87 99 3.5 3.6"},D:{"25":0.00447,"33":0.00893,"37":0.00223,"39":0.14291,"47":0.00223,"49":0.0201,"50":0.05583,"53":0.00223,"55":0.0067,"57":0.00447,"59":0.00893,"60":0.0201,"62":0.01117,"63":0.01117,"64":0.00893,"68":0.00223,"69":0.01117,"74":0.02233,"75":0.0067,"76":0.0268,"77":0.0201,"78":0.00447,"79":0.02233,"80":0.00893,"81":0.02903,"83":0.01117,"84":0.00893,"85":0.00893,"86":0.02233,"87":0.04689,"88":0.02233,"89":0.01117,"90":0.00893,"91":0.03573,"92":0.04243,"93":0.03126,"94":0.01786,"95":0.03126,"96":0.36398,"97":2.52106,"98":5.96211,"99":0.03573,"100":0.00447,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 32 34 35 36 38 40 41 42 43 44 45 46 48 51 52 54 56 58 61 65 66 67 70 71 72 73 101"},F:{"78":0.01117,"79":0.00893,"80":0.0067,"82":0.04466,"83":0.52476,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.02233,"13":0.01117,"14":0.0067,"15":0.00447,"16":0.0067,"17":0.01117,"18":0.07146,"84":0.01786,"85":0.01117,"89":0.0067,"90":0.00447,"91":0.00223,"92":0.02233,"93":0.01117,"94":0.0067,"95":0.01117,"96":0.02903,"97":0.49573,"98":1.52514,_:"79 80 81 83 86 87 88"},E:{"4":0,"13":0.00447,"14":0.0201,_:"0 5 6 7 8 9 10 11 12 15 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.00893,"11.1":0.00447,"12.1":0.00447,"13.1":0.0134,"14.1":0.04019,"15.1":0.40864,"15.2-15.3":0.04019},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00548,"8.1-8.4":0.00398,"9.0-9.2":0,"9.3":0.03685,"10.0-10.2":0.00548,"10.3":0.03984,"11.0-11.2":0.05329,"11.3-11.4":0.01693,"12.0-12.1":0.0239,"12.2-12.5":0.65489,"13.0-13.1":0.01743,"13.2":0.00349,"13.3":0.06275,"13.4-13.7":0.13845,"14.0-14.4":0.73855,"14.5-14.8":0.6021,"15.0-15.1":0.51694,"15.2-15.3":2.04734,"15.4":0.01096},P:{"4":0.05347,"5.0-5.4":0.1009,"6.2-6.4":0.01048,"7.2-7.4":0.07486,"8.2":0.02052,"9.2":0.11763,"10.1":0.07486,"11.1-11.2":0.43844,"12.0":0.03144,"13.0":0.03208,"14.0":0.02139,"15.0":0.08555,"16.0":0.57746},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00223,"4.2-4.3":0.00614,"4.4":0,"4.4.3-4.4.4":0.15473},A:{"11":0.13175,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00777},N:{_:"10 11"},R:{_:"0"},M:{"0":0.08544},Q:{"10.4":0.06214},O:{"0":0.83884},H:{"0":4.08843},L:{"0":69.51414},S:{"2.5":0.00777}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.03291,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0.01097,"42":0.00366,"43":0,"44":0,"45":0,"46":0,"47":0.00731,"48":0.00366,"49":0.00731,"50":0.00366,"51":0,"52":0.00731,"53":0,"54":0,"55":0,"56":0,"57":0.00366,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00366,"69":0,"70":0.00366,"71":0,"72":0.00731,"73":0,"74":0.00366,"75":0,"76":0.08411,"77":0,"78":0.00366,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.04754,"92":0,"93":0.00366,"94":0.00366,"95":0,"96":0.00731,"97":0,"98":0.01463,"99":0.03291,"100":0.00731,"101":0.01829,"102":0.09143,"103":1.70051,"104":0.25233,"105":0.00366,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00366,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00366,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00366,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00366,"60":0.02926,"61":0,"62":0,"63":0,"64":0.00366,"65":0.02194,"66":0,"67":0,"68":0.00366,"69":0.00366,"70":0.00731,"71":0,"72":0.00731,"73":0,"74":0.00731,"75":0.00731,"76":0,"77":0,"78":0,"79":0.00366,"80":0.00366,"81":0.01097,"83":0.00366,"84":0,"85":0,"86":0.08411,"87":0.01463,"88":0.01097,"89":0,"90":0.00366,"91":0.00366,"92":0.00366,"93":0.00731,"94":0.00366,"95":0.00366,"96":0.00731,"97":0.00731,"98":0.01463,"99":0.01097,"100":0.02194,"101":0.01463,"102":0.03291,"103":1.62005,"104":4.01539,"105":0.0256,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0.00366,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00366,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.09508,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0.00366,"58":0.02194,"60":0.09874,"62":0,"63":0.28159,"64":0.09508,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00731,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.02194,"80":0,"81":0,"82":0.00366,"83":0,"84":0,"85":0.04388,"86":0.00731,"87":0.00731,"88":0.00731,"89":0.60706,"90":0.03291,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00366},B:{"12":0.00731,"13":0.00366,"14":0.00731,"15":0.00366,"16":0,"17":0.00366,"18":0.01097,"79":0,"80":0,"81":0,"83":0,"84":0.00366,"85":0,"86":0,"87":0,"88":0,"89":0.00366,"90":0.00366,"91":0,"92":0.01463,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00366,"99":0,"100":0.00366,"101":0.00366,"102":0.01097,"103":0.40593,"104":0.89597,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.01463,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00366,"12.1":0,"13.1":0.00366,"14.1":0.00366,"15.1":0.00366,"15.2-15.3":0.00366,"15.4":0.00366,"15.5":0.04754,"15.6":0.03657,"16.0":0.00366},G:{"8":0.00158,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.00053,"9.3":0.0384,"10.0-10.2":0.00263,"10.3":0.28669,"11.0-11.2":0.01315,"11.3-11.4":0.00421,"12.0-12.1":0.07154,"12.2-12.5":0.57758,"13.0-13.1":0.02052,"13.2":0.00631,"13.3":0.02735,"13.4-13.7":0.04945,"14.0-14.4":0.43976,"14.5-14.8":0.32298,"15.0-15.1":0.24092,"15.2-15.3":0.32193,"15.4":0.25618,"15.5":0.90846,"15.6":1.52707,"16.0":0.14203},P:{"4":0.02043,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.08173,"8.2":0,"9.2":0.02043,"10.1":0.01022,"11.1-11.2":0.17368,"12.0":0,"13.0":0.04087,"14.0":0.03065,"15.0":0.04087,"16.0":0.1226,"17.0":0.40866,"18.0":0.38823},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00303,"4.2-4.3":0.00455,"4.4":0,"4.4.3-4.4.4":0.28436},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.03291,"5.5":0},J:{"7":0,"10":0.01903},N:{"10":0,"11":0},L:{"0":74.78126},S:{"2.5":0.00634},R:{_:"0"},M:{"0":0.1776},Q:{"10.4":0.03806},O:{"0":0.83728},H:{"0":3.66914}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BG.js index 30dd0b0e5aa..975e91f215d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BG.js @@ -1 +1 @@ -module.exports={C:{"48":0.00435,"51":0.00435,"52":0.19987,"56":0.00869,"60":0.00869,"63":0.01304,"66":0.01738,"67":0.01304,"68":0.0869,"72":0.01304,"78":0.04345,"79":0.00869,"80":0.02607,"81":0.00869,"83":0.00869,"84":0.01738,"85":0.01304,"86":0.00869,"87":0.03042,"88":0.02607,"89":0.0478,"90":0.00869,"91":0.13035,"92":0.00869,"93":0.01304,"94":0.05214,"95":0.0869,"96":2.08995,"97":3.37172,"98":0.02173,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 53 54 55 57 58 59 61 62 64 65 69 70 71 73 74 75 76 77 82 99 3.5 3.6"},D:{"38":0.00869,"48":0.01738,"49":0.21291,"50":0.00435,"51":0.25636,"56":0.00869,"58":0.00435,"63":0.00869,"66":0.00435,"67":0.00869,"68":0.00435,"69":0.03042,"70":0.00869,"71":0.01304,"73":0.01304,"74":0.00869,"75":0.00869,"76":0.00435,"77":0.01304,"78":0.00869,"79":0.3085,"80":0.01738,"81":0.03911,"83":0.01738,"84":0.02173,"85":0.02173,"86":0.02607,"87":0.05214,"88":0.01738,"89":0.03042,"90":0.02173,"91":0.07387,"92":0.06083,"93":0.5214,"94":0.03911,"95":0.06518,"96":0.37367,"97":8.38151,"98":19.03979,"99":0.01304,"100":0.01738,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 52 53 54 55 57 59 60 61 62 64 65 72 101"},F:{"28":0.00869,"36":0.00869,"46":0.01738,"78":0.00869,"79":0.00435,"80":0.00869,"82":0.33022,"83":1.31219,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00435,"17":0.01304,"18":0.02607,"84":0.00869,"90":0.00435,"92":0.00435,"94":0.00435,"95":0.01304,"96":0.02607,"97":0.60396,"98":2.15078,_:"12 13 14 16 79 80 81 83 85 86 87 88 89 91 93"},E:{"4":0,"13":0.01304,"14":0.05649,"15":0.03911,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00869,"12.1":0.02607,"13.1":0.05214,"14.1":0.16946,"15.1":0.09125,"15.2-15.3":0.19553},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00223,"6.0-6.1":0.00074,"7.0-7.1":0.0052,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02004,"10.0-10.2":0.00297,"10.3":0.05642,"11.0-11.2":0.01336,"11.3-11.4":0.01262,"12.0-12.1":0.01262,"12.2-12.5":0.24422,"13.0-13.1":0.00965,"13.2":0.00371,"13.3":0.03415,"13.4-13.7":0.1106,"14.0-14.4":0.29915,"14.5-14.8":1.39628,"15.0-15.1":1.06595,"15.2-15.3":4.1057,"15.4":0.02375},P:{"4":0.09432,"5.0-5.4":0.1009,"6.2-6.4":0.01048,"7.2-7.4":0.07394,"8.2":0.02052,"9.2":0.01025,"10.1":0.02113,"11.1-11.2":0.07336,"12.0":0.03144,"13.0":0.09432,"14.0":0.13624,"15.0":0.1048,"16.0":2.09594},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00393,"4.2-4.3":0.01702,"4.4":0,"4.4.3-4.4.4":0.10346},A:{"11":0.42581,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.18662},Q:{"10.4":0},O:{"0":0.02828},H:{"0":0.25163},L:{"0":46.22418},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00358,"52":0.05006,"53":0,"54":0,"55":0,"56":0.00358,"57":0,"58":0,"59":0.00358,"60":0.00358,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00715,"67":0,"68":0.02146,"69":0,"70":0,"71":0,"72":0.00358,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01073,"79":0,"80":0.01073,"81":0.00358,"82":0,"83":0.00358,"84":0.00715,"85":0.00358,"86":0,"87":0.01073,"88":0.00358,"89":0.00358,"90":0.00715,"91":0.03934,"92":0.00358,"93":0,"94":0.00715,"95":0.00715,"96":0.00715,"97":0.00715,"98":0.00715,"99":0.0143,"100":0.01788,"101":0.0143,"102":0.07152,"103":1.35888,"104":0.26462,"105":0.00358,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00358,"34":0,"35":0,"36":0,"37":0,"38":0.00358,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.05364,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00715,"59":0,"60":0,"61":0,"62":0,"63":0.00358,"64":0,"65":0,"66":0,"67":0.00358,"68":0,"69":0.02503,"70":0.00358,"71":0.00358,"72":0,"73":0.00358,"74":0.00358,"75":0.00358,"76":0.00358,"77":0.00358,"78":0.00358,"79":0.06079,"80":0.00358,"81":0.02503,"83":0.00715,"84":0.01073,"85":0.01073,"86":0.02146,"87":0.02146,"88":0.00715,"89":0.0143,"90":0.00358,"91":0.00715,"92":0.02146,"93":0.00715,"94":0.00358,"95":0.01073,"96":0.02503,"97":0.02146,"98":0.01073,"99":0.0143,"100":0.01788,"101":0.02861,"102":0.06437,"103":2.19209,"104":5.58929,"105":0.01788,"106":0.00358,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00715,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00358,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00358,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00358,"64":0.00358,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00358,"71":0.00358,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0.00358,"83":0,"84":0,"85":0.00715,"86":0.00358,"87":0.00358,"88":0.00715,"89":0.40766,"90":0.04649,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00358,"16":0,"17":0,"18":0.00358,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00358,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00358,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00358,"101":0.00358,"102":0.00358,"103":0.22886,"104":0.67229,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00358,"14":0.01073,"15":0.00358,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00358,"10.1":0,"11.1":0.00358,"12.1":0.00358,"13.1":0.0143,"14.1":0.03218,"15.1":0.00358,"15.2-15.3":0.00715,"15.4":0.0143,"15.5":0.06794,"15.6":0.1037,"16.0":0.00358},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00245,"6.0-6.1":0,"7.0-7.1":0.00367,"8.1-8.4":0.00122,"9.0-9.2":0,"9.3":0.02203,"10.0-10.2":0.00245,"10.3":0.05263,"11.0-11.2":0.02693,"11.3-11.4":0.00979,"12.0-12.1":0.01469,"12.2-12.5":0.30479,"13.0-13.1":0.00734,"13.2":0.00612,"13.3":0.02326,"13.4-13.7":0.10527,"14.0-14.4":0.26807,"14.5-14.8":0.79931,"15.0-15.1":0.18483,"15.2-15.3":0.31213,"15.4":0.51288,"15.5":2.87164,"15.6":6.53525,"16.0":0.16647},P:{"4":0.09231,"5.0-5.4":0,"6.2-6.4":0.02051,"7.2-7.4":0.03077,"8.2":0,"9.2":0.01026,"10.1":0,"11.1-11.2":0.06154,"12.0":0.02051,"13.0":0.06154,"14.0":0.08206,"15.0":0.05128,"16.0":0.12308,"17.0":1.07698,"18.0":1.44624},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02729,"4.2-4.3":0.03411,"4.4":0,"4.4.3-4.4.4":0.18079},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00358,"10":0,"11":0.0894,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":69.52514},S:{"2.5":0},R:{_:"0"},M:{"0":0.17987},Q:{"10.4":0},O:{"0":0.0257},H:{"0":0.24935}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BH.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BH.js index 3d30f5103e2..ba86321bc48 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BH.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BH.js @@ -1 +1 @@ -module.exports={C:{"34":0.00399,"36":0.00798,"52":0.01595,"60":0.00399,"78":0.00798,"79":0.00798,"83":0.03589,"91":0.01196,"95":0.01595,"96":0.34696,"97":0.65004,"98":0.00798,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 80 81 82 84 85 86 87 88 89 90 92 93 94 99 3.5 3.6"},D:{"38":0.00798,"39":0.00399,"49":0.02393,"50":0.00399,"55":0.00399,"56":0.00798,"60":0.03988,"62":0.00399,"63":0.00399,"64":0.00399,"65":0.02393,"66":0.01994,"67":0.01994,"68":0.00399,"69":0.00798,"70":0.01196,"71":0.01196,"73":0.01994,"74":0.00798,"75":0.00399,"76":0.00399,"77":0.00798,"78":0.00798,"79":0.07178,"80":0.00798,"81":0.00798,"83":0.01196,"84":0.01994,"85":0.00798,"86":0.03589,"87":0.06381,"88":0.01196,"89":0.01595,"90":0.05583,"91":0.02792,"92":0.0319,"93":0.42672,"94":0.04786,"95":0.03988,"96":0.48255,"97":8.09963,"98":20.29892,"99":0.01196,"100":0.00798,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 40 41 42 43 44 45 46 47 48 51 52 53 54 57 58 59 61 72 101"},F:{"28":0.00399,"36":0.01595,"46":0.00798,"53":0.00798,"54":0.00798,"70":0.01595,"77":0.00798,"78":0.0319,"79":0.02393,"81":0.0678,"82":0.21934,"83":0.2313,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 55 56 57 58 60 62 63 64 65 66 67 68 69 71 72 73 74 75 76 80 10.5 10.6 11.1 11.5 11.6 12.1","9.5-9.6":0.00399,"10.0-10.1":0},B:{"15":0.00798,"16":0.00798,"17":0.00399,"18":0.02393,"84":0.00399,"89":0.00798,"92":0.00798,"94":0.00399,"95":0.01595,"96":0.02792,"97":0.83349,"98":2.84743,_:"12 13 14 79 80 81 83 85 86 87 88 90 91 93"},E:{"4":0,"11":0.00399,"13":0.03988,"14":0.25922,"15":0.17148,_:"0 5 6 7 8 9 10 12 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00798,"11.1":0.01595,"12.1":0.05583,"13.1":0.17547,"14.1":0.80159,"15.1":0.41874,"15.2-15.3":0.67796,"15.4":0.00798},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0056,"6.0-6.1":0,"7.0-7.1":0.0112,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.09523,"10.0-10.2":0,"10.3":0.05975,"11.0-11.2":0.03174,"11.3-11.4":0.07095,"12.0-12.1":0.04108,"12.2-12.5":0.38837,"13.0-13.1":0.03921,"13.2":0.0112,"13.3":0.07282,"13.4-13.7":0.25767,"14.0-14.4":0.76554,"14.5-14.8":3.26197,"15.0-15.1":3.67461,"15.2-15.3":9.7859,"15.4":0.09149},P:{"4":0.16415,"5.0-5.4":0.01086,"6.2-6.4":0.02066,"7.2-7.4":0.0513,"8.2":0.02052,"9.2":0.02052,"10.1":0.01018,"11.1-11.2":0.22571,"12.0":0.03078,"13.0":0.12311,"14.0":0.14363,"15.0":0.15389,"16.0":2.87263},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.0022,"4.4":0,"4.4.3-4.4.4":0.01584},A:{"11":0.15952,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.22849},Q:{"10.4":0},O:{"0":2.47736},H:{"0":0.60343},L:{"0":34.31125},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00335,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00335,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00335,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00335,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00335,"101":0.00335,"102":0.01339,"103":0.29128,"104":0.05692,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00335,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00335,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01339,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00335,"56":0.00335,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00335,"65":0.0067,"66":0,"67":0,"68":0.00335,"69":0.00335,"70":0,"71":0,"72":0,"73":0.01004,"74":0.0067,"75":0,"76":0.00335,"77":0,"78":0.00335,"79":0.03013,"80":0.00335,"81":0.04018,"83":0.00335,"84":0.01004,"85":0.00335,"86":0.0067,"87":0.02678,"88":0.02344,"89":0.00335,"90":0.0067,"91":0.0067,"92":0.02009,"93":0.01004,"94":0.44528,"95":0.01004,"96":0.02009,"97":0.00335,"98":0.01674,"99":0.01004,"100":0.05022,"101":0.02344,"102":0.05692,"103":1.6807,"104":5.22288,"105":0.02009,"106":0.00335,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.0067,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00335,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00335,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00335,"72":0.00335,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0.00335,"81":0,"82":0.00335,"83":0,"84":0.0067,"85":0.00335,"86":0.01339,"87":0.01004,"88":0.01674,"89":0.0837,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.0067,"15":0,"16":0,"17":0,"18":0.00335,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0.00335,"88":0,"89":0.00335,"90":0,"91":0,"92":0.00335,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00335,"99":0.00335,"100":0,"101":0.01004,"102":0.0067,"103":0.29128,"104":0.81356,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.0067,"14":0.04687,"15":0.01339,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00335,"11.1":0.00335,"12.1":0.00335,"13.1":0.03013,"14.1":0.12722,"15.1":0.02678,"15.2-15.3":0.01674,"15.4":0.07031,"15.5":0.22766,"15.6":0.32476,"16.0":0.0067},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00495,"6.0-6.1":0,"7.0-7.1":0.01237,"8.1-8.4":0.00495,"9.0-9.2":0,"9.3":0.07419,"10.0-10.2":0.00495,"10.3":0.09892,"11.0-11.2":0.00989,"11.3-11.4":0.01484,"12.0-12.1":0.0272,"12.2-12.5":0.47977,"13.0-13.1":0.01484,"13.2":0.00989,"13.3":0.05441,"13.4-13.7":0.16817,"14.0-14.4":0.57128,"14.5-14.8":1.2118,"15.0-15.1":0.53171,"15.2-15.3":0.75181,"15.4":1.21427,"15.5":6.16039,"15.6":13.01076,"16.0":0.28193},P:{"4":0.113,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.09245,"8.2":0,"9.2":0.01027,"10.1":0,"11.1-11.2":0.12327,"12.0":0.03082,"13.0":0.18491,"14.0":0.113,"15.0":0.03082,"16.0":0.20545,"17.0":1.356,"18.0":1.79772},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.02523,"4.4":0,"4.4.3-4.4.4":0.16821},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.05022,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":54.87246},S:{"2.5":0},R:{_:"0"},M:{"0":0.22617},Q:{"10.4":0},O:{"0":2.18851},H:{"0":0.57939}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BI.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BI.js index ab178159b34..caabe65fb66 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BI.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BI.js @@ -1 +1 @@ -module.exports={C:{"7":0.00542,"28":0.00542,"31":0.05416,"43":0.00542,"44":0.00271,"47":0.05145,"49":0.00271,"52":0.01083,"56":0.00542,"68":0.00542,"71":0.00812,"72":0.00542,"77":0.00271,"78":0.00542,"84":0.01354,"88":0.02979,"89":0.00542,"91":0.04604,"92":0.00542,"93":0.00271,"94":0.01896,"95":0.02979,"96":1.10486,"97":1.66813,"98":0.06499,_:"2 3 4 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 32 33 34 35 36 37 38 39 40 41 42 45 46 48 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 69 70 73 74 75 76 79 80 81 82 83 85 86 87 90 99 3.5 3.6"},D:{"26":0.00812,"36":0.00812,"40":0.01625,"43":0.00542,"49":0.03791,"52":0.00542,"56":0.02437,"63":0.00812,"64":0.05958,"70":0.00812,"73":0.01625,"74":0.01083,"76":0.00542,"77":0.00542,"80":0.07853,"81":0.53077,"83":0.01354,"84":0.01354,"85":0.00542,"86":0.02708,"87":0.03791,"88":0.0352,"89":0.01625,"90":0.01896,"91":0.02708,"92":0.1029,"93":0.02708,"94":0.04333,"95":0.08124,"96":0.37641,"97":4.93939,"98":9.25594,"99":0.01083,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 33 34 35 37 38 39 41 42 44 45 46 47 48 50 51 53 54 55 57 58 59 60 61 62 65 66 67 68 69 71 72 75 78 79 100 101"},F:{"31":0.00271,"37":0.00542,"42":0.00812,"64":0.00542,"67":0.00542,"82":0.14894,"83":0.97759,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 36 38 39 40 41 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 65 66 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.07582,"13":0.02166,"14":0.01083,"15":0.00542,"16":0.00812,"17":0.02979,"18":0.11374,"84":0.01896,"85":0.00542,"89":0.01083,"91":0.00271,"92":0.04874,"93":0.00542,"94":0.05958,"95":0.0352,"96":0.02437,"97":0.75553,"98":1.24568,_:"79 80 81 83 86 87 88 90"},E:{"4":0,"12":0.00542,"13":0.01354,"14":0.01625,"15":0.00542,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.02437,"12.1":0.01625,"13.1":0.05145,"14.1":0.07312,"15.1":0.04333,"15.2-15.3":0.04062,"15.4":0.01083},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00072,"6.0-6.1":0,"7.0-7.1":0.00072,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01805,"10.0-10.2":0.00072,"10.3":0.36673,"11.0-11.2":0.01444,"11.3-11.4":0.00433,"12.0-12.1":0.0231,"12.2-12.5":0.7266,"13.0-13.1":0.00758,"13.2":0.01011,"13.3":0.08374,"13.4-13.7":0.07941,"14.0-14.4":0.73454,"14.5-14.8":0.76631,"15.0-15.1":0.30248,"15.2-15.3":0.46888,"15.4":0.00108},P:{"4":1.47807,"5.0-5.4":0.04049,"6.2-6.4":0.01048,"7.2-7.4":0.09111,"8.2":0.02052,"9.2":0.22272,"10.1":0.06074,"11.1-11.2":0.06074,"12.0":0.30371,"13.0":0.01012,"14.0":0.02025,"15.0":3.53319,"16.0":1.29584},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0.00133,"4.1":0.00267,"4.2-4.3":0.01932,"4.4":0,"4.4.3-4.4.4":0.10794},A:{"11":0.11374,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00729},N:{_:"10 11"},R:{_:"0"},M:{"0":0.08021},Q:{"10.4":0.01458},O:{"0":0.17501},H:{"0":14.33877},L:{"0":50.0552},S:{"2.5":0.02188}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00265,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00265,"47":0.00531,"48":0,"49":0,"50":0,"51":0,"52":0.00265,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00265,"66":0.00531,"67":0,"68":0.01592,"69":0,"70":0.00265,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00531,"89":0,"90":0,"91":0.01327,"92":0.00531,"93":0,"94":0,"95":0.00265,"96":0.00265,"97":0.00265,"98":0,"99":0.00265,"100":0.01858,"101":0.01062,"102":0.03716,"103":0.65554,"104":0.13005,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.01062,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00796,"53":0,"54":0,"55":0.00265,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0.00265,"63":0.03981,"64":0.01327,"65":0,"66":0,"67":0,"68":0.00265,"69":0,"70":0,"71":0.00265,"72":0,"73":0.00265,"74":0,"75":0,"76":0,"77":0.00265,"78":0,"79":0.01062,"80":0.02123,"81":0.02123,"83":0.00531,"84":0,"85":0.00796,"86":0.00265,"87":0.00796,"88":0.00265,"89":0.00265,"90":0.03981,"91":0,"92":0.00265,"93":0.00796,"94":0.00265,"95":0.00265,"96":0.00796,"97":0.00531,"98":0.01062,"99":0.01327,"100":0.01062,"101":0.01592,"102":0.07431,"103":0.97667,"104":1.91619,"105":0.01327,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0.00265,"24":0.00531,"25":0,"26":0.01592,"27":0.00796,"28":0.00265,"29":0,"30":0.00531,"31":0,"32":0.00796,"33":0.00265,"34":0,"35":0,"36":0,"37":0.10351,"38":0.00265,"39":0,"40":0,"41":0,"42":0.00265,"43":0,"44":0,"45":0,"46":0,"47":0.00265,"48":0,"49":0.00265,"50":0.00531,"51":0.01062,"52":0,"53":0,"54":0.00531,"55":0,"56":0.00531,"57":0.00531,"58":0.01327,"60":0.20967,"62":0.00531,"63":0.34237,"64":0.16189,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00796,"80":0,"81":0.00531,"82":0.00265,"83":0,"84":0,"85":0.01062,"86":0.00265,"87":0.00531,"88":0,"89":0.33706,"90":0.01592,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00531},B:{"12":0.01327,"13":0.00265,"14":0.00265,"15":0.00796,"16":0,"17":0.00796,"18":0.01858,"79":0,"80":0,"81":0,"83":0,"84":0.00265,"85":0.00265,"86":0,"87":0,"88":0,"89":0.01327,"90":0.00796,"91":0,"92":0.01327,"93":0,"94":0,"95":0,"96":0.00265,"97":0,"98":0.00265,"99":0,"100":0.00265,"101":0.01062,"102":0.00796,"103":0.2017,"104":0.44853,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.04246,"13":0,"14":0.00265,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00531,"12.1":0,"13.1":0.00265,"14.1":0.01858,"15.1":0.02389,"15.2-15.3":0,"15.4":0.00265,"15.5":0.01327,"15.6":0.02123,"16.0":0},G:{"8":0,"3.2":0.00069,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00243,"7.0-7.1":0.02809,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.16367,"10.0-10.2":0,"10.3":0.01942,"11.0-11.2":0.00208,"11.3-11.4":0.00867,"12.0-12.1":0.00694,"12.2-12.5":0.81628,"13.0-13.1":0.00694,"13.2":0.00139,"13.3":0.01422,"13.4-13.7":0.03156,"14.0-14.4":0.22748,"14.5-14.8":0.34676,"15.0-15.1":0.10333,"15.2-15.3":0.29821,"15.4":0.18448,"15.5":0.63111,"15.6":0.54996,"16.0":0.02427},P:{"4":0.52768,"5.0-5.4":0.0203,"6.2-6.4":0.01015,"7.2-7.4":0.53783,"8.2":0,"9.2":0.06089,"10.1":0,"11.1-11.2":0.05074,"12.0":0,"13.0":0.05074,"14.0":0.05074,"15.0":0.0203,"16.0":0.04059,"17.0":0.6596,"18.0":0.15222},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00021,"4.2-4.3":0.00027,"4.4":0,"4.4.3-4.4.4":0.07075},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02389,"5.5":0},J:{"7":0,"10":0.00735},N:{"10":0,"11":0},L:{"0":71.50454},S:{"2.5":0.01469},R:{_:"0"},M:{"0":0.14692},Q:{"10.4":0},O:{"0":0.57299},H:{"0":11.29446}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BJ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BJ.js index 338a049d60a..65c4ec184a8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BJ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BJ.js @@ -1 +1 @@ -module.exports={C:{"35":0.00291,"43":0.00291,"45":0.00582,"49":0.00582,"52":0.01745,"56":0.00291,"60":0.00291,"66":0.00291,"72":0.01455,"75":0.01455,"78":0.02327,"79":0.00873,"80":0.00582,"84":0.00582,"85":0.06982,"86":0.00873,"87":0.00291,"88":0.00873,"89":0.01164,"90":0.00582,"91":0.07273,"92":0.00873,"93":0.00582,"94":0.02036,"95":0.05236,"96":0.72725,"97":1.06179,"98":0.03491,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 44 46 47 48 50 51 53 54 55 57 58 59 61 62 63 64 65 67 68 69 70 71 73 74 76 77 81 82 83 99 3.5 3.6"},D:{"31":0.00291,"32":0.01164,"33":0.00582,"44":0.00582,"45":0.00291,"47":0.00873,"49":0.05527,"50":0.00291,"53":0.00873,"57":0.00582,"58":0.00582,"59":0.00291,"60":0.00291,"61":0.00291,"62":0.02036,"63":0.18327,"64":0.05236,"65":0.00582,"67":0.00873,"68":0.00582,"69":0.00582,"70":0.01455,"71":0.00582,"72":0.01164,"74":0.02327,"75":0.01455,"76":0.01745,"77":0.032,"78":0.01745,"79":0.01455,"80":0.04654,"81":0.02036,"83":0.02327,"84":0.01164,"85":0.02036,"86":0.08436,"87":0.05527,"88":0.05527,"89":0.02909,"90":0.04073,"91":0.10182,"92":0.23272,"93":0.07854,"94":0.19781,"95":0.32581,"96":0.50035,"97":4.31987,"98":11.0222,"99":0.01745,"100":0.02618,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 34 35 36 37 38 39 40 41 42 43 46 48 51 52 54 55 56 66 73 101"},F:{"15":0.00291,"57":0.04654,"71":0.01164,"79":0.01455,"80":0.00582,"81":0.00582,"82":0.08145,"83":0.7447,_:"9 11 12 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 58 60 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01745,"13":0.00582,"14":0.00582,"15":0.00582,"16":0.00582,"17":0.00873,"18":0.04654,"84":0.00873,"85":0.00873,"89":0.01745,"90":0.01164,"91":0.01455,"92":0.02618,"94":0.00291,"95":0.00582,"96":0.03491,"97":0.34617,"98":0.94252,_:"79 80 81 83 86 87 88 93"},E:{"4":0,"14":0.02909,"15":0.00873,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 6.1 7.1 9.1 10.1 11.1","5.1":0.02327,"12.1":0.01164,"13.1":0.05527,"14.1":0.04073,"15.1":0.064,"15.2-15.3":0.06109,"15.4":0.00582},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00131,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00916,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01308,"10.0-10.2":0,"10.3":0.00916,"11.0-11.2":0.03139,"11.3-11.4":0.00327,"12.0-12.1":0.19033,"12.2-12.5":1.80911,"13.0-13.1":0.02485,"13.2":0.00262,"13.3":0.55791,"13.4-13.7":0.15174,"14.0-14.4":0.51539,"14.5-14.8":0.91763,"15.0-15.1":0.88101,"15.2-15.3":1.41341,"15.4":0.00654},P:{"4":0.03363,"5.0-5.4":0.1009,"6.2-6.4":0.18286,"7.2-7.4":0.01121,"8.2":0.02052,"9.2":0.04485,"10.1":0.01018,"11.1-11.2":0.21994,"12.0":0.02137,"13.0":0.23544,"14.0":0.01121,"15.0":0.02242,"16.0":0.36998},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00046,"4.2-4.3":0.00161,"4.4":0,"4.4.3-4.4.4":0.02629},A:{"9":0.01473,"11":0.06382,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.19146},Q:{"10.4":0.13473},O:{"0":0.65237},H:{"0":4.06826},L:{"0":62.8251},S:{"2.5":0.04255}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00371,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00371,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00741,"69":0,"70":0,"71":0,"72":0.00741,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00371,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00371,"85":0.00741,"86":0,"87":0,"88":0.00371,"89":0,"90":0.00371,"91":0.05558,"92":0,"93":0.00741,"94":0,"95":0.00371,"96":0.00371,"97":0,"98":0,"99":0.00371,"100":0.00741,"101":0.01112,"102":0.05928,"103":0.63726,"104":0.08892,"105":0.00371,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.01482,"41":0,"42":0.00371,"43":0,"44":0.00371,"45":0.00371,"46":0,"47":0.00371,"48":0,"49":0,"50":0.00371,"51":0.02594,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00371,"60":0,"61":0.00741,"62":0.00371,"63":0.01482,"64":0.00371,"65":0.00741,"66":0.00741,"67":0,"68":0,"69":0.00371,"70":0.01112,"71":0.00371,"72":0.00371,"73":0,"74":0.05928,"75":0.00741,"76":0.00371,"77":0.00371,"78":0.01112,"79":0.01112,"80":0.00741,"81":0.02594,"83":0.00371,"84":0.00741,"85":0.06299,"86":0.03705,"87":0.02223,"88":0.02964,"89":0.00741,"90":0.00741,"91":0.01853,"92":0.01112,"93":0.00741,"94":0.02964,"95":0.01853,"96":0.01482,"97":0.02223,"98":0.01482,"99":1.4042,"100":0.03705,"101":0.04817,"102":0.10004,"103":1.6302,"104":4.13478,"105":0.01482,"106":0.02964,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00371,"25":0,"26":0,"27":0,"28":0.00741,"29":0,"30":0,"31":0,"32":0.00371,"33":0,"34":0,"35":0.00371,"36":0.00371,"37":0.00371,"38":0,"39":0,"40":0,"41":0,"42":0.00371,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00371,"57":0,"58":0.01482,"60":0.09633,"62":0,"63":0.21489,"64":0.11856,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00371,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.01482,"80":0,"81":0,"82":0.00371,"83":0,"84":0.00371,"85":0.02964,"86":0.00741,"87":0.00741,"88":0.02594,"89":0.4409,"90":0.04446,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00371},B:{"12":0.01853,"13":0.00371,"14":0.01112,"15":0.04817,"16":0,"17":0.00371,"18":0.02964,"79":0,"80":0,"81":0,"83":0,"84":0.00371,"85":0.00371,"86":0,"87":0,"88":0,"89":0,"90":0.00371,"91":0,"92":0.01482,"93":0.00371,"94":0,"95":0,"96":0,"97":0.00371,"98":0,"99":0.00371,"100":0.00371,"101":0.00371,"102":0.01112,"103":0.20378,"104":0.52241,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00371,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.00371,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00371,"12.1":0,"13.1":0.01112,"14.1":0.00741,"15.1":0.00741,"15.2-15.3":0.01112,"15.4":0.00741,"15.5":0.03705,"15.6":0.05928,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00333,"6.0-6.1":0,"7.0-7.1":0.00667,"8.1-8.4":0.00167,"9.0-9.2":0,"9.3":0.02834,"10.0-10.2":0,"10.3":0.025,"11.0-11.2":0.0125,"11.3-11.4":0.00417,"12.0-12.1":0.00833,"12.2-12.5":1.29769,"13.0-13.1":0.0225,"13.2":0.01917,"13.3":0.29671,"13.4-13.7":0.19086,"14.0-14.4":0.34922,"14.5-14.8":0.9243,"15.0-15.1":0.33338,"15.2-15.3":0.49674,"15.4":0.75928,"15.5":1.54023,"15.6":1.8061,"16.0":0.20503},P:{"4":0.07941,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.08934,"8.2":0,"9.2":0.00993,"10.1":0.06949,"11.1-11.2":0.00993,"12.0":0,"13.0":0.00993,"14.0":0.01985,"15.0":0.01985,"16.0":0.01985,"17.0":0.26802,"18.0":0.17868},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00152,"4.2-4.3":0.0019,"4.4":0,"4.4.3-4.4.4":0.08622},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01853,"5.5":0},J:{"7":0,"10":0.0063},N:{"10":0,"11":0},L:{"0":73.50066},S:{"2.5":0.03148},R:{_:"0"},M:{"0":0.10702},Q:{"10.4":0.0063},O:{"0":0.66727},H:{"0":3.39107}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BM.js index c1fc94dc22c..2819a8fd289 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BM.js @@ -1 +1 @@ -module.exports={C:{"78":0.06489,"88":0.00433,"92":0.00433,"95":0.0173,"96":0.34608,"97":0.51479,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 89 90 91 93 94 98 99 3.5 3.6"},D:{"49":0.0173,"63":0.00865,"67":0.00865,"71":0.00865,"76":0.00433,"77":0.06056,"78":0.03461,"79":0.01298,"80":0.00433,"83":0.02163,"85":0.0173,"86":0.01298,"87":0.05624,"88":0.0173,"89":0.00865,"90":0.02163,"91":0.8479,"92":0.02163,"93":0.06922,"94":0.20332,"95":0.03893,"96":0.57968,"97":6.46304,"98":11.18704,"99":0.01298,"100":0.00865,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 68 69 70 72 73 74 75 81 84 101"},F:{"82":0.42395,"83":0.73542,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01298,"91":0.01298,"92":0.00865,"95":0.05191,"96":0.05191,"97":1.15504,"98":4.04914,_:"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 93 94"},E:{"4":0,"13":0.05624,"14":0.199,"15":0.20765,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.42827,"11.1":0.00865,"12.1":0.04759,"13.1":0.59266,"14.1":1.37134,"15.1":1.9467,"15.2-15.3":6.10399,"15.4":0.07354},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.12849,"10.0-10.2":0,"10.3":0.08719,"11.0-11.2":0,"11.3-11.4":0.00459,"12.0-12.1":0.02295,"12.2-12.5":0.73884,"13.0-13.1":0.00918,"13.2":0,"13.3":0.01377,"13.4-13.7":0.35795,"14.0-14.4":0.69295,"14.5-14.8":2.8911,"15.0-15.1":6.52563,"15.2-15.3":34.22971,"15.4":0.16062},P:{"4":0.1356,"5.0-5.4":0.1009,"6.2-6.4":0.18286,"7.2-7.4":0.01121,"8.2":0.02052,"9.2":0.04485,"10.1":0.01018,"11.1-11.2":0.03129,"12.0":0.02137,"13.0":0.02086,"14.0":0.08344,"15.0":0.04172,"16.0":2.13825},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.29417,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.04539},Q:{"10.4":0},O:{"0":0.03972},H:{"0":0.02149},L:{"0":8.30905},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00298,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.00298,"103":0.06861,"104":0.0179,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00298,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00597,"78":0,"79":0,"80":0,"81":0,"83":0.00895,"84":0,"85":0,"86":0,"87":0.00298,"88":0,"89":0,"90":0,"91":0.00298,"92":0.00298,"93":0,"94":0,"95":0,"96":0.00298,"97":0.00298,"98":0.00298,"99":0,"100":0.00597,"101":0.02386,"102":0.0179,"103":0.49816,"104":1.14249,"105":0.00298,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.01492,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00298,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00298,"102":0.00298,"103":0.14915,"104":0.50413,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00298,"14":0.01193,"15":0.01193,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00298,"13.1":0.06563,"14.1":0.12827,"15.1":0.02685,"15.2-15.3":0.03878,"15.4":0.20284,"15.5":1.55414,"15.6":3.84509,"16.0":0.02386},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.07648,"10.0-10.2":0,"10.3":0.05099,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0.0085,"12.2-12.5":0.17846,"13.0-13.1":0,"13.2":0,"13.3":0.017,"13.4-13.7":0,"14.0-14.4":0.05949,"14.5-14.8":0.43339,"15.0-15.1":0.3994,"15.2-15.3":0.8158,"15.4":1.56362,"15.5":19.84266,"15.6":60.87915,"16.0":0.61185},P:{"4":0.02056,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01028,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.04113,"12.0":0,"13.0":0.03085,"14.0":0.02056,"15.0":0.01028,"16.0":0.05141,"17.0":0.33932,"18.0":0.51412},I:{"0":0,"3":0,"4":0.04974,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.07958},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01193,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":4.86743},S:{"2.5":0},R:{_:"0"},M:{"0":0.02105},Q:{"10.4":0},O:{"0":0},H:{"0":0.00664}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BN.js index 66628cbb0dd..c45b2263aac 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BN.js @@ -1 +1 @@ -module.exports={C:{"29":0.01254,"32":0.00418,"48":0.01672,"52":0.02926,"72":0.00836,"78":0.01254,"84":0.0209,"89":0.01254,"91":0.00418,"93":0.00418,"94":0.01254,"95":0.0209,"96":0.79838,"97":1.55496,"98":0.06688,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 85 86 87 88 90 92 99 3.5 3.6"},D:{"22":0.0209,"26":0.00836,"33":0.00836,"38":0.1045,"47":0.11704,"49":0.21736,"53":0.04598,"55":0.03344,"62":0.05434,"65":0.06688,"67":0.00836,"68":0.00836,"70":0.00836,"72":0.02926,"73":0.03344,"74":0.00836,"75":0.0209,"76":0.00418,"77":0.00836,"78":0.02508,"79":0.16302,"80":0.02508,"81":0.04598,"83":0.0209,"84":0.01672,"85":0.00836,"86":0.00418,"87":0.15884,"88":0.00836,"89":0.02508,"90":0.01254,"91":0.02926,"92":0.07942,"93":0.01672,"94":0.01672,"95":0.07524,"96":0.3553,"97":7.86258,"98":19.06916,"99":0.03344,"100":0.04598,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 30 31 32 34 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 54 56 57 58 59 60 61 63 64 66 69 71 101"},F:{"28":0.02926,"36":0.00836,"46":0.03344,"80":0.00418,"82":0.23408,"83":0.65208,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00836,"18":0.01672,"92":0.01672,"96":0.03344,"97":0.50578,"98":2.16942,_:"12 13 14 15 16 79 80 81 83 84 85 86 87 88 89 90 91 93 94 95"},E:{"4":0,"11":0.00836,"12":0.00836,"13":0.10868,"14":0.25498,"15":0.24662,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1","9.1":0.10868,"10.1":0.02926,"11.1":0.05434,"12.1":0.04598,"13.1":0.28842,"14.1":1.01574,"15.1":0.86108,"15.2-15.3":1.2749,"15.4":0.0209},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.0046,"7.0-7.1":0.07206,"8.1-8.4":0,"9.0-9.2":0.04447,"9.3":0.33272,"10.0-10.2":0.0092,"10.3":0.37566,"11.0-11.2":0.03373,"11.3-11.4":0.04447,"12.0-12.1":0.0276,"12.2-12.5":0.89851,"13.0-13.1":0.02453,"13.2":0.0138,"13.3":0.0552,"13.4-13.7":0.19013,"14.0-14.4":0.51365,"14.5-14.8":1.69736,"15.0-15.1":2.82433,"15.2-15.3":7.9946,"15.4":0.17326},P:{"4":0.47534,"5.0-5.4":0.1009,"6.2-6.4":0.18286,"7.2-7.4":0.07394,"8.2":0.02052,"9.2":0.01025,"10.1":0.02113,"11.1-11.2":0.04225,"12.0":0.01056,"13.0":0.10563,"14.0":0.03169,"15.0":0.07394,"16.0":1.56335},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00189,"4.4":0,"4.4.3-4.4.4":0.00975},A:{"11":0.04598,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.24444},Q:{"10.4":0},O:{"0":1.9497},H:{"0":1.79626},L:{"0":36.5219},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.0043,"49":0,"50":0,"51":0,"52":0.02152,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.0043,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00861,"79":0,"80":0,"81":0,"82":0,"83":0.0043,"84":0.0043,"85":0,"86":0,"87":0,"88":0,"89":0.0043,"90":0,"91":0.0043,"92":0,"93":0,"94":0,"95":0.0043,"96":0,"97":0,"98":0.0043,"99":0.00861,"100":0.0043,"101":0.0043,"102":0.04733,"103":0.90363,"104":0.15491,"105":0.0043,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.01291,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.01291,"48":0,"49":0.08606,"50":0.0043,"51":0,"52":0,"53":0.0043,"54":0,"55":0.00861,"56":0.0043,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0.01291,"63":0,"64":0,"65":0.0043,"66":0.0043,"67":0,"68":0,"69":0.0043,"70":0.00861,"71":0.01291,"72":0.0043,"73":0.01291,"74":0,"75":0.01291,"76":0.0043,"77":0,"78":0.01291,"79":0.09897,"80":0.0043,"81":0.02152,"83":0.00861,"84":0.01291,"85":0.01721,"86":0.0043,"87":0.03012,"88":0.0043,"89":0.01291,"90":0.0043,"91":0.00861,"92":0.04303,"93":0.00861,"94":0.0043,"95":0.01291,"96":0.01291,"97":0.02582,"98":0.02152,"99":0.03012,"100":0.03442,"101":0.03442,"102":0.07315,"103":2.98628,"104":8.30479,"105":0.03442,"106":0.0043,"107":0.0043,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00861,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.0043,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.03012,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.0043,"55":0,"56":0.0043,"57":0,"58":0.0043,"60":0.02152,"62":0,"63":0.17642,"64":0.16351,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.0043,"86":0,"87":0,"88":0.0043,"89":0.37436,"90":0.03012,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.0043,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.0043,"100":0,"101":0.0043,"102":0.0043,"103":0.2883,"104":0.83478,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0043,"12":0.02582,"13":0.03873,"14":0.06885,"15":0.03012,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.05594,"10.1":0,"11.1":0.0043,"12.1":0.02582,"13.1":0.07745,"14.1":0.15921,"15.1":0.07315,"15.2-15.3":0.03873,"15.4":0.142,"15.5":0.49485,"15.6":0.85199,"16.0":0.0043},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00674,"7.0-7.1":0.03821,"8.1-8.4":0.08091,"9.0-9.2":0.02023,"9.3":0.34612,"10.0-10.2":0.00899,"10.3":0.43378,"11.0-11.2":0.01349,"11.3-11.4":0.00899,"12.0-12.1":0.08765,"12.2-12.5":1.02039,"13.0-13.1":0.03596,"13.2":0.03371,"13.3":0.02472,"13.4-13.7":0.11013,"14.0-14.4":0.34163,"14.5-14.8":0.88779,"15.0-15.1":0.49671,"15.2-15.3":0.64056,"15.4":1.21818,"15.5":4.85249,"15.6":11.66035,"16.0":0.09889},P:{"4":0.45335,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.06326,"8.2":0,"9.2":0.01054,"10.1":0.01054,"11.1-11.2":0.02109,"12.0":0.01054,"13.0":0.04217,"14.0":0.02109,"15.0":0.02109,"16.0":0.09489,"17.0":0.79072,"18.0":1.00158},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01813,"4.4":0,"4.4.3-4.4.4":0.11781},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02152,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":50.91717},S:{"2.5":0},R:{_:"0"},M:{"0":0.17661},Q:{"10.4":0},O:{"0":1.40716},H:{"0":2.20596}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BO.js index fa28b173448..09e7a6d2938 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BO.js @@ -1 +1 @@ -module.exports={C:{"43":0.00342,"48":0.00342,"52":0.06506,"56":0.00685,"67":0.00342,"68":0.00342,"69":0.01027,"72":0.01027,"73":0.00685,"78":0.02054,"81":0.00342,"82":0.00685,"83":0.01027,"85":0.01712,"86":0.00342,"88":0.01027,"89":0.0137,"91":0.02739,"92":0.01027,"93":0.00685,"94":0.0137,"95":0.03424,"96":0.83888,"97":1.27373,"98":0.0137,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 70 71 74 75 76 77 79 80 84 87 90 99 3.5 3.6"},D:{"22":0.00342,"26":0.00685,"34":0.00342,"38":0.02739,"43":0.00342,"47":0.00685,"49":0.04794,"53":0.01027,"56":0.00342,"58":0.00685,"62":0.01027,"63":0.01027,"65":0.00342,"66":0.00685,"67":0.0137,"68":0.00685,"69":0.01027,"70":0.03082,"71":0.01027,"72":0.01027,"73":0.00342,"74":0.0137,"75":0.00685,"76":0.0137,"77":0.00685,"78":0.00685,"79":0.12326,"80":0.01712,"81":0.02054,"83":0.05821,"84":0.04794,"85":0.03424,"86":0.05136,"87":0.06848,"88":0.03424,"89":0.03082,"90":0.03424,"91":0.85942,"92":0.06848,"93":0.17462,"94":0.04451,"95":0.0719,"96":0.41773,"97":6.68022,"98":16.89402,"99":0.00342,"100":0.00685,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 30 31 32 33 35 36 37 39 40 41 42 44 45 46 48 50 51 52 54 55 57 59 60 61 64 101"},F:{"36":0.00685,"68":0.00685,"77":0.00342,"82":0.3287,"83":1.19498,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 69 70 71 72 73 74 75 76 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"13":0.00685,"17":0.00685,"18":0.02054,"84":0.00685,"89":0.00685,"92":0.01027,"94":0.00685,"95":0.00685,"96":0.01712,"97":0.29789,"98":1.2703,_:"12 14 15 16 79 80 81 83 85 86 87 88 90 91 93"},E:{"4":0,"14":0.03082,"15":0.02739,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.03766,"11.1":0.00685,"12.1":0.00342,"13.1":0.04794,"14.1":0.0993,"15.1":0.05136,"15.2-15.3":0.13011},G:{"8":0,"3.2":0.00046,"4.0-4.1":0,"4.2-4.3":0.00023,"5.0-5.1":0.00459,"6.0-6.1":0.00138,"7.0-7.1":0.00781,"8.1-8.4":0.00069,"9.0-9.2":0.00299,"9.3":0.01722,"10.0-10.2":0.00207,"10.3":0.00964,"11.0-11.2":0.0039,"11.3-11.4":0.00459,"12.0-12.1":0.00161,"12.2-12.5":0.12468,"13.0-13.1":0.0023,"13.2":0.00276,"13.3":0.00781,"13.4-13.7":0.05258,"14.0-14.4":0.1341,"14.5-14.8":0.37496,"15.0-15.1":0.33616,"15.2-15.3":1.19654,"15.4":0.00597},P:{"4":0.55693,"5.0-5.4":0.1009,"6.2-6.4":0.18286,"7.2-7.4":0.46411,"8.2":0.02052,"9.2":0.04125,"10.1":0.01018,"11.1-11.2":0.17533,"12.0":0.06188,"13.0":0.16502,"14.0":0.18564,"15.0":0.2269,"16.0":1.96989},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00216,"4.2-4.3":0.00757,"4.4":0,"4.4.3-4.4.4":0.06918},A:{"8":0.00685,"11":0.07875,_:"6 7 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.01973},N:{_:"10 11"},R:{_:"0"},M:{"0":0.13152},Q:{"10.4":0},O:{"0":0.18413},H:{"0":0.37977},L:{"0":46.09357},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.02759,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00394,"69":0,"70":0,"71":0,"72":0.00394,"73":0.00394,"74":0,"75":0.00394,"76":0,"77":0,"78":0.00394,"79":0,"80":0,"81":0,"82":0,"83":0.00394,"84":0,"85":0,"86":0.00394,"87":0,"88":0.00394,"89":0.00394,"90":0,"91":0.01182,"92":0,"93":0.00394,"94":0,"95":0.00394,"96":0.00394,"97":0.00394,"98":0.00394,"99":0.01971,"100":0.01576,"101":0.01576,"102":0.03941,"103":0.80002,"104":0.17735,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0.00788,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00394,"39":0,"40":0,"41":0.00394,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.03153,"50":0.00788,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00394,"61":0,"62":0,"63":0.00394,"64":0.00394,"65":0.00394,"66":0,"67":0,"68":0.00788,"69":0.01971,"70":0.00788,"71":0,"72":0.00788,"73":0.00394,"74":0.00394,"75":0.00394,"76":0.00394,"77":0.00394,"78":0.00394,"79":0.04335,"80":0.00394,"81":0.01182,"83":0.00788,"84":0.01576,"85":0.01576,"86":0.01182,"87":0.03547,"88":0.00788,"89":0.01576,"90":0.01182,"91":0.10247,"92":0.01971,"93":0.01576,"94":0.01182,"95":0.01971,"96":0.02365,"97":0.02759,"98":0.02759,"99":0.01971,"100":0.03547,"101":0.04335,"102":0.14976,"103":2.54983,"104":7.96476,"105":0.02759,"106":0.00394,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.01576,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00394,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.02365,"64":0.02365,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00788,"86":0,"87":0,"88":0.00788,"89":0.62268,"90":0.05123,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00394,"18":0.00788,"79":0,"80":0,"81":0,"83":0,"84":0.00394,"85":0,"86":0.00394,"87":0,"88":0,"89":0.00394,"90":0,"91":0.00394,"92":0.00394,"93":0,"94":0,"95":0,"96":0.00394,"97":0,"98":0.00394,"99":0.00394,"100":0.00394,"101":0.00788,"102":0.00394,"103":0.21676,"104":0.59903,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00394,"14":0.04729,"15":0.00394,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00394,"12.1":0.00394,"13.1":0.01182,"14.1":0.02365,"15.1":0.00394,"15.2-15.3":0.00394,"15.4":0.01182,"15.5":0.04335,"15.6":0.09064,"16.0":0},G:{"8":0,"3.2":0.00086,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00172,"6.0-6.1":0.00172,"7.0-7.1":0.00947,"8.1-8.4":0,"9.0-9.2":0.00474,"9.3":0.01808,"10.0-10.2":0.00043,"10.3":0.0155,"11.0-11.2":0.00603,"11.3-11.4":0.00258,"12.0-12.1":0.0043,"12.2-12.5":0.16401,"13.0-13.1":0.00387,"13.2":0.00258,"13.3":0.00775,"13.4-13.7":0.04219,"14.0-14.4":0.23891,"14.5-14.8":0.22212,"15.0-15.1":0.06758,"15.2-15.3":0.09169,"15.4":0.13474,"15.5":0.94315,"15.6":2.27759,"16.0":0.04089},P:{"4":0.39485,"5.0-5.4":0.01012,"6.2-6.4":0.02025,"7.2-7.4":0.51634,"8.2":0,"9.2":0.02025,"10.1":0.01012,"11.1-11.2":0.13162,"12.0":0.05062,"13.0":0.10124,"14.0":0.09112,"15.0":0.07087,"16.0":0.25311,"17.0":1.16429,"18.0":1.10355},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00752,"4.2-4.3":0.04134,"4.4":0,"4.4.3-4.4.4":0.24055},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02759,"5.5":0},J:{"7":0,"10":0.01818},N:{"10":0,"11":0},L:{"0":73.35397},S:{"2.5":0},R:{_:"0"},M:{"0":0.12118},Q:{"10.4":0},O:{"0":0.19389},H:{"0":0.43022}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BR.js index 15c6e16d9f3..5d69b16d4b3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BR.js @@ -1 +1 @@ -module.exports={C:{"47":0.00335,"52":0.01676,"60":0.0067,"67":0.00335,"68":0.01006,"72":0.00335,"78":0.02346,"79":0.00335,"80":0.00335,"81":0.0067,"82":0.00335,"84":0.0067,"88":0.01006,"89":0.0067,"90":0.0067,"91":0.03687,"92":0.0067,"93":0.01006,"94":0.04693,"95":0.02346,"96":0.51956,"97":0.80113,"98":0.0067,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 69 70 71 73 74 75 76 77 83 85 86 87 99 3.5 3.6"},D:{"38":0.00335,"47":0.0067,"49":0.02346,"51":0.01006,"54":0.01341,"55":0.00335,"58":0.0067,"63":0.0067,"65":0.0067,"66":0.01341,"67":0.0067,"68":0.0067,"69":0.00335,"70":0.0067,"71":0.00335,"72":0.0067,"73":0.00335,"74":0.01341,"75":0.06369,"76":0.01006,"77":0.0067,"78":0.01006,"79":0.06369,"80":0.02346,"81":0.02682,"83":0.02682,"84":0.05698,"85":0.03352,"86":0.05028,"87":0.0905,"88":0.02011,"89":0.03687,"90":0.04358,"91":0.73074,"92":0.05028,"93":0.21118,"94":0.05028,"95":0.07374,"96":0.32514,"97":6.86825,"98":16.05273,"99":0.03352,"100":0.02011,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 48 50 52 53 56 57 59 60 61 62 64 101"},F:{"36":0.01006,"73":0.01341,"78":0.00335,"82":0.82124,"83":1.85366,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.01676,"16":0.00335,"18":0.01341,"84":0.00335,"89":0.00335,"90":0.0067,"91":0.01006,"92":0.0067,"94":0.00335,"95":0.02346,"96":0.01676,"97":0.50615,"98":1.74304,_:"12 13 14 17 79 80 81 83 85 86 87 88 93"},E:{"4":0,"13":0.01341,"14":0.02682,"15":0.02346,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1 15.4","9.1":0.00335,"11.1":0.0067,"12.1":0.01006,"13.1":0.04358,"14.1":0.10056,"15.1":0.06034,"15.2-15.3":0.10391},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00108,"6.0-6.1":0,"7.0-7.1":0.00108,"8.1-8.4":0,"9.0-9.2":0.00054,"9.3":0.02107,"10.0-10.2":0,"10.3":0.02755,"11.0-11.2":0.00432,"11.3-11.4":0.01189,"12.0-12.1":0.00594,"12.2-12.5":0.19719,"13.0-13.1":0.0054,"13.2":0.0027,"13.3":0.02107,"13.4-13.7":0.08968,"14.0-14.4":0.21934,"14.5-14.8":1.18963,"15.0-15.1":0.86494,"15.2-15.3":2.7234,"15.4":0.01135},P:{"4":0.07168,"5.0-5.4":0.1009,"6.2-6.4":0.18286,"7.2-7.4":0.24576,"8.2":0.02052,"9.2":0.02048,"10.1":0.01018,"11.1-11.2":0.09216,"12.0":0.02048,"13.0":0.1024,"14.0":0.09216,"15.0":0.1024,"16.0":1.79201},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00197,"4.2-4.3":0.00295,"4.4":0,"4.4.3-4.4.4":0.02167},A:{"8":0.00705,"9":0.00705,"11":0.12334,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.09307},Q:{"10.4":0},O:{"0":0.06648},H:{"0":0.14476},L:{"0":40.25477},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00478,"48":0,"49":0,"50":0,"51":0,"52":0.00955,"53":0,"54":0.00478,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00478,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01433,"79":0.00478,"80":0.00478,"81":0.00478,"82":0.00478,"83":0.00478,"84":0.00478,"85":0,"86":0,"87":0,"88":0.00478,"89":0.00478,"90":0.00478,"91":0.03344,"92":0,"93":0,"94":0.00478,"95":0.00478,"96":0.00478,"97":0.00478,"98":0.00478,"99":0.00955,"100":0.00478,"101":0.00955,"102":0.03344,"103":0.72133,"104":0.14809,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00478,"39":0,"40":0,"41":0.00478,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00478,"48":0,"49":0.00955,"50":0,"51":0.00478,"52":0,"53":0,"54":0,"55":0.00478,"56":0,"57":0,"58":0.00478,"59":0,"60":0,"61":0,"62":0,"63":0.00478,"64":0,"65":0.00478,"66":0,"67":0.00478,"68":0.00478,"69":0.00955,"70":0.00478,"71":0.00478,"72":0.00478,"73":0.00478,"74":0.00955,"75":0.00955,"76":0.00955,"77":0.00478,"78":0.00955,"79":0.04777,"80":0.01433,"81":0.01911,"83":0.02389,"84":0.04777,"85":0.03822,"86":0.05255,"87":0.07166,"88":0.01433,"89":0.02389,"90":0.02389,"91":0.32961,"92":0.01911,"93":0.01911,"94":0.01911,"95":0.00955,"96":0.03344,"97":0.02866,"98":0.02389,"99":0.03344,"100":0.05732,"101":0.05255,"102":0.14331,"103":4.16554,"104":11.60811,"105":0.0621,"106":0.00478,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00955,"64":0.00955,"65":0,"66":0,"67":0,"68":0.00478,"69":0,"70":0,"71":0.00478,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0.00478,"83":0,"84":0,"85":0.00955,"86":0.00478,"87":0.00478,"88":0.01433,"89":1.47609,"90":0.05255,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.02389,"16":0,"17":0,"18":0.00955,"79":0,"80":0,"81":0,"83":0,"84":0.00478,"85":0.00478,"86":0.00478,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00478,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00478,"101":0.03344,"102":0.00478,"103":0.46337,"104":1.38533,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00478,"14":0.01433,"15":0.00478,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.01433,"10.1":0,"11.1":0,"12.1":0.00478,"13.1":0.02389,"14.1":0.02866,"15.1":0.00478,"15.2-15.3":0.00478,"15.4":0.01911,"15.5":0.07166,"15.6":0.12898,"16.0":0.00478},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00119,"6.0-6.1":0,"7.0-7.1":0.00237,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04386,"10.0-10.2":0,"10.3":0.04149,"11.0-11.2":0.01423,"11.3-11.4":0.03201,"12.0-12.1":0.02134,"12.2-12.5":0.36987,"13.0-13.1":0.01185,"13.2":0.0083,"13.3":0.03556,"13.4-13.7":0.17427,"14.0-14.4":0.41374,"14.5-14.8":1.3645,"15.0-15.1":0.14463,"15.2-15.3":0.21695,"15.4":0.34854,"15.5":2.33779,"15.6":6.16812,"16.0":0.09484},P:{"4":0.10157,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.19298,"8.2":0,"9.2":0.01016,"10.1":0,"11.1-11.2":0.04063,"12.0":0.02031,"13.0":0.05079,"14.0":0.05079,"15.0":0.03047,"16.0":0.09141,"17.0":0.80241,"18.0":0.99539},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02005,"4.2-4.3":0.04678,"4.4":0,"4.4.3-4.4.4":0.20049},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00478,"9":0.00478,"10":0,"11":0.05255,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":59.57242},S:{"2.5":0},R:{_:"0"},M:{"0":0.1358},Q:{"10.4":0},O:{"0":0.08879},H:{"0":0.21757}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BS.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BS.js index f8b1fca5601..5a548b04717 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BS.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BS.js @@ -1 +1 @@ -module.exports={C:{"48":0.04687,"52":0.01875,"78":0.01406,"88":0.02812,"91":0.04687,"94":0.06562,"95":0.38433,"96":0.50151,"97":0.77336,"98":0.00937,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 89 90 92 93 99 3.5 3.6"},D:{"49":0.14998,"55":0.00937,"56":0.01406,"65":0.03281,"67":0.01406,"70":0.01406,"71":0.00937,"74":0.00937,"75":0.0375,"76":0.22498,"77":0.00937,"78":0.03281,"79":0.02344,"80":0.00469,"81":0.01406,"83":0.01875,"84":0.01406,"86":0.00469,"87":0.04687,"88":0.00937,"89":0.00937,"90":0.05156,"91":0.07031,"92":0.04687,"93":0.15467,"94":0.05156,"95":0.03281,"96":0.45464,"97":7.61638,"98":13.96257,"99":0.01406,"100":0.03281,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 57 58 59 60 61 62 63 64 66 68 69 72 73 85 101"},F:{"74":0.00469,"82":0.09374,"83":0.30466,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"13":0.01406,"14":0.01875,"15":0.00937,"16":0.04687,"17":0.02344,"18":0.07031,"92":0.00469,"93":0.01406,"94":0.01875,"95":0.04218,"96":0.07968,"97":1.83262,"98":6.04154,_:"12 79 80 81 83 84 85 86 87 88 89 90 91"},E:{"4":0,"12":0.00469,"13":0.04218,"14":0.40308,"15":0.22498,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.01875,"11.1":0.06562,"12.1":0.10311,"13.1":0.4312,"14.1":1.75294,"15.1":1.11551,"15.2-15.3":2.25445,"15.4":0.01875},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.11597,"10.0-10.2":0.00455,"10.3":0.1228,"11.0-11.2":0.03184,"11.3-11.4":0.02274,"12.0-12.1":0.02729,"12.2-12.5":0.53212,"13.0-13.1":0.04321,"13.2":0.00227,"13.3":0.1046,"13.4-13.7":0.17282,"14.0-14.4":0.72768,"14.5-14.8":4.16371,"15.0-15.1":3.65661,"15.2-15.3":12.96641,"15.4":0.03866},P:{"4":0.04186,"5.0-5.4":0.01086,"6.2-6.4":0.02066,"7.2-7.4":0.30349,"8.2":0.01018,"9.2":0.05233,"10.1":0.01018,"11.1-11.2":0.8372,"12.0":0.05233,"13.0":0.2407,"14.0":0.27209,"15.0":0.13605,"16.0":4.20695},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.03188},A:{"11":0.26716,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.13285},Q:{"10.4":0},O:{"0":0.02657},H:{"0":0.08553},L:{"0":28.3337},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.01402,"49":0,"50":0,"51":0,"52":0.00467,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00467,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00467,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.02803,"92":0,"93":0,"94":0,"95":0.04205,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00934,"102":0.05606,"103":0.42982,"104":0.0841,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00467,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.08877,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00467,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00467,"65":0.00467,"66":0,"67":0,"68":0,"69":0.00467,"70":0,"71":0.00467,"72":0,"73":0,"74":0,"75":0.01869,"76":0.14483,"77":0.00934,"78":0.00467,"79":0.00467,"80":0,"81":0.00467,"83":0.01402,"84":0.00467,"85":0,"86":0.00467,"87":0.00934,"88":0.00467,"89":0.00467,"90":0.03738,"91":0.01402,"92":0.00934,"93":0.06074,"94":0.00934,"95":0.00467,"96":0.00934,"97":0.04672,"98":0.01869,"99":0.01402,"100":0.0327,"101":0.0327,"102":0.17286,"103":2.81722,"104":6.59219,"105":0.0327,"106":0.00467,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00467,"89":0.21024,"90":0.01402,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00467,"16":0.00934,"17":0.01402,"18":0.01869,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0.00467,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.02336,"102":0.00934,"103":0.88301,"104":2.69107,"105":0.00467},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00467,"13":0.01402,"14":0.05606,"15":0.01869,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00467,"10.1":0.00467,"11.1":0.02336,"12.1":0.05606,"13.1":0.2009,"14.1":0.2336,"15.1":0.07008,"15.2-15.3":0.06541,"15.4":0.20557,"15.5":0.7335,"15.6":1.32218,"16.0":0.01402},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.13047,"10.0-10.2":0,"10.3":0.1342,"11.0-11.2":0.01864,"11.3-11.4":0.02982,"12.0-12.1":0.02237,"12.2-12.5":0.64491,"13.0-13.1":0.01491,"13.2":0,"13.3":0.06337,"13.4-13.7":0.12302,"14.0-14.4":0.55545,"14.5-14.8":1.84527,"15.0-15.1":0.43243,"15.2-15.3":0.9916,"15.4":2.02421,"15.5":8.8834,"15.6":21.14422,"16.0":0.2013},P:{"4":0.05198,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.30148,"8.2":0,"9.2":0.03119,"10.1":0,"11.1-11.2":0.10396,"12.0":0.03119,"13.0":0.18713,"14.0":0.20792,"15.0":0.07277,"16.0":0.19752,"17.0":1.65294,"18.0":2.90045},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.66187},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.06541,"5.5":0},J:{"7":0,"10":0.00533},N:{"10":0,"11":0},L:{"0":35.2161},S:{"2.5":0},R:{_:"0"},M:{"0":0.10123},Q:{"10.4":0},O:{"0":0.01066},H:{"0":0.05044}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BT.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BT.js index f6c6077a556..5d05b8223ca 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BT.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BT.js @@ -1 +1 @@ -module.exports={C:{"18":0.00186,"39":0.00186,"41":0.00743,"52":0.00557,"68":0.00186,"72":0.00186,"78":0.00929,"81":0.00186,"82":0.00372,"84":0.00186,"87":0.03159,"88":0.01858,"89":0.00186,"91":0.00557,"92":0.00186,"94":0.00372,"95":0.04088,"96":0.19323,"97":0.29914,"98":0.02601,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 79 80 83 85 86 90 93 99 3.5 3.6"},D:{"33":0.00557,"43":0.00372,"49":0.00372,"53":0.00557,"63":0.00372,"65":0.01301,"66":0.01858,"67":0.05946,"69":0.00372,"71":0.00557,"73":0.00929,"74":0.00186,"76":0.00372,"78":0.02044,"79":0.02601,"80":0.02044,"81":0.10591,"83":0.01301,"84":0.00929,"85":0.00557,"86":0.00557,"87":0.03902,"88":0.00372,"89":0.00557,"90":0.01301,"91":0.03159,"92":0.06689,"93":0.0353,"94":0.01672,"95":0.07618,"96":0.41248,"97":4.38116,"98":9.26956,"99":0.01301,"100":0.03159,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 44 45 46 47 48 50 51 52 54 55 56 57 58 59 60 61 62 64 68 70 72 75 77 101"},F:{"36":0.00186,"80":0.00372,"82":0.01115,"83":0.13749,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00557,"13":0.00372,"16":0.00186,"18":0.01115,"84":0.00743,"85":0.01115,"87":0.01858,"90":0.00186,"91":0.00557,"92":0.01672,"93":0.00743,"94":0.00929,"95":0.01858,"96":0.10962,"97":0.36045,"98":0.72648,_:"14 15 17 79 80 81 83 86 88 89"},E:{"4":0,"13":0.02973,"14":0.05388,"15":0.11148,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.01672,"11.1":0.00929,"12.1":0.02973,"13.1":0.10219,"14.1":0.22296,"15.1":0.10776,"15.2-15.3":0.13749},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01296,"8.1-8.4":0.00086,"9.0-9.2":0.00086,"9.3":0.04925,"10.0-10.2":0.00346,"10.3":0.01123,"11.0-11.2":0.04925,"11.3-11.4":0.01123,"12.0-12.1":0.03801,"12.2-12.5":0.48036,"13.0-13.1":0.01814,"13.2":0.00864,"13.3":0.1486,"13.4-13.7":0.254,"14.0-14.4":1.11104,"14.5-14.8":1.86355,"15.0-15.1":1.72618,"15.2-15.3":2.845,"15.4":0.00605},P:{"4":0.33912,"5.0-5.4":0.1009,"6.2-6.4":0.18286,"7.2-7.4":0.16442,"8.2":0.02052,"9.2":0.03083,"10.1":0.01018,"11.1-11.2":0.12332,"12.0":0.03083,"13.0":0.19525,"14.0":0.14387,"15.0":0.11304,"16.0":0.97625},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.01672,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.02443},Q:{"10.4":0},O:{"0":4.28269},H:{"0":0.37},L:{"0":66.43858},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0.00279,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00279,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00837,"87":0,"88":0,"89":0,"90":0,"91":0.00279,"92":0,"93":0,"94":0,"95":0.00279,"96":0,"97":0,"98":0,"99":0.01116,"100":0,"101":0.01116,"102":0.00837,"103":0.187,"104":0.02512,"105":0.00279,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0.00279,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.01116,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00558,"50":0,"51":0,"52":0,"53":0.00279,"54":0,"55":0,"56":0,"57":0,"58":0.00279,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00558,"66":0,"67":0.00279,"68":0,"69":0.00279,"70":0,"71":0,"72":0,"73":0.00279,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00279,"80":0,"81":0.00279,"83":0.00279,"84":0,"85":0,"86":0,"87":0.01116,"88":0.00837,"89":0,"90":0.00558,"91":0.00279,"92":0.00279,"93":0,"94":0.00279,"95":0.00279,"96":0.00837,"97":0,"98":0.02512,"99":0.01116,"100":0.01954,"101":0.02791,"102":0.05303,"103":1.39829,"104":4.16975,"105":0.06419,"106":0.00837,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.05024,"64":0.10048,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.04466,"90":0.01116,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00279,"13":0,"14":0,"15":0,"16":0.00279,"17":0,"18":0.00279,"79":0,"80":0,"81":0,"83":0,"84":0.00279,"85":0,"86":0,"87":0.00279,"88":0,"89":0,"90":0.00279,"91":0,"92":0.00279,"93":0,"94":0,"95":0,"96":0.00279,"97":0,"98":0,"99":0,"100":0,"101":0.00558,"102":0.00558,"103":0.12839,"104":0.25956,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00279,"14":0.00558,"15":0.01116,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.01954,"14.1":0.04187,"15.1":0.00837,"15.2-15.3":0.00279,"15.4":0.02233,"15.5":0.05024,"15.6":0.08094,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00576,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01343,"10.0-10.2":0,"10.3":0.00863,"11.0-11.2":0.00672,"11.3-11.4":0.00672,"12.0-12.1":0.01343,"12.2-12.5":0.40292,"13.0-13.1":0.0048,"13.2":0.00192,"13.3":0.0259,"13.4-13.7":0.21777,"14.0-14.4":0.4835,"14.5-14.8":0.91808,"15.0-15.1":0.29164,"15.2-15.3":0.33481,"15.4":0.82982,"15.5":2.52112,"15.6":3.45647,"16.0":0.04701},P:{"4":0.22442,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.09181,"8.2":0,"9.2":0.0408,"10.1":0.0102,"11.1-11.2":0.0204,"12.0":0.0204,"13.0":0.16321,"14.0":0.18361,"15.0":0.15301,"16.0":0.16321,"17.0":0.57124,"18.0":0.38763},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.05},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00279,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":77.37656},S:{"2.5":0},R:{_:"0"},M:{"0":0.05767},Q:{"10.4":0},O:{"0":1.88876},H:{"0":0.71663}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BW.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BW.js index 82103593302..32b21e03683 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BW.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BW.js @@ -1 +1 @@ -module.exports={C:{"34":0.05446,"40":0.00908,"41":0.00454,"43":0.00908,"47":0.00908,"50":0.00454,"52":0.04084,"60":0.00908,"69":0.00908,"70":0.00908,"72":0.00908,"78":0.04992,"81":0.00908,"88":0.00908,"89":0.01361,"91":0.1316,"92":0.00908,"93":0.00908,"94":0.02723,"95":0.04538,"96":1.07097,"97":1.42039,"98":0.08622,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 42 44 45 46 48 49 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 71 73 74 75 76 77 79 80 82 83 84 85 86 87 90 99 3.5 3.6"},D:{"38":0.00908,"41":0.01361,"43":0.02723,"49":0.0363,"56":0.00454,"58":0.00454,"59":0.00454,"63":0.01815,"64":0.00454,"66":0.01361,"68":0.00454,"69":0.02269,"70":0.00908,"72":0.01361,"73":0.00908,"74":0.01815,"75":0.01361,"76":0.01361,"78":0.01361,"79":0.08168,"80":0.04084,"81":0.02723,"83":0.05899,"84":0.01361,"85":0.01815,"86":0.04084,"87":0.08168,"88":0.03177,"89":0.02723,"90":0.04538,"91":0.04084,"92":0.08168,"93":0.1316,"94":0.07715,"95":0.13614,"96":0.57179,"97":8.80826,"98":19.20028,"99":0.00454,"100":0.00908,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 42 44 45 46 47 48 50 51 52 53 54 55 57 60 61 62 65 67 71 77 101"},F:{"28":0.01361,"79":0.01361,"81":0.00454,"82":0.09076,"83":0.84861,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.03177,"13":0.02269,"14":0.05446,"15":0.06807,"16":0.0363,"17":0.02723,"18":0.11799,"80":0.00908,"84":0.02723,"85":0.01361,"89":0.02269,"90":0.00454,"91":0.00908,"92":0.02269,"93":0.01361,"94":0.02269,"95":0.02723,"96":0.1316,"97":1.39317,"98":4.30202,_:"79 81 83 86 87 88"},E:{"4":0,"12":0.01361,"14":0.09984,"15":0.06807,_:"0 5 6 7 8 9 10 11 13 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00454,"11.1":0.00908,"12.1":0.00908,"13.1":0.09076,"14.1":0.20875,"15.1":0.18606,"15.2-15.3":0.29497},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01874,"6.0-6.1":0.00312,"7.0-7.1":0.03257,"8.1-8.4":0,"9.0-9.2":0.00268,"9.3":0.03703,"10.0-10.2":0,"10.3":0.02811,"11.0-11.2":0.01338,"11.3-11.4":0.0058,"12.0-12.1":0.00758,"12.2-12.5":0.43233,"13.0-13.1":0.00446,"13.2":0,"13.3":0.01472,"13.4-13.7":0.05131,"14.0-14.4":0.22977,"14.5-14.8":0.88294,"15.0-15.1":0.85796,"15.2-15.3":1.7815,"15.4":0.05845},P:{"4":0.25574,"5.0-5.4":0.1009,"6.2-6.4":0.18286,"7.2-7.4":0.39895,"8.2":0.02052,"9.2":0.01023,"10.1":0.01018,"11.1-11.2":0.10229,"12.0":0.03069,"13.0":0.15344,"14.0":0.42964,"15.0":0.11252,"16.0":2.04588},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00192,"4.2-4.3":0.005,"4.4":0,"4.4.3-4.4.4":0.07501},A:{"9":0.00919,"10":0.0046,"11":0.34925,_:"6 7 8 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.01639},N:{_:"10 11"},R:{_:"0"},M:{"0":0.10924},Q:{"10.4":0.00546},O:{"0":1.17433},H:{"0":0.76015},L:{"0":46.92915},S:{"2.5":0.01639}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02057,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0.00411,"33":0,"34":0.00823,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00411,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01234,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00823,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00411,"69":0,"70":0,"71":0,"72":0.00411,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00823,"79":0,"80":0,"81":0.00823,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.04936,"92":0,"93":0,"94":0.00411,"95":0.00411,"96":0.00411,"97":0,"98":0,"99":0.00823,"100":0.00823,"101":0.00823,"102":0.03702,"103":0.80615,"104":0.09871,"105":0.00823,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00411,"39":0,"40":0.00823,"41":0,"42":0,"43":0.00823,"44":0,"45":0,"46":0.00411,"47":0,"48":0,"49":0.01234,"50":0,"51":0,"52":0,"53":0.00411,"54":0,"55":0,"56":0,"57":0.00411,"58":0.00411,"59":0,"60":0,"61":0,"62":0.00823,"63":0.00823,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.00411,"70":0.01234,"71":0.00411,"72":0,"73":0.00411,"74":0.00823,"75":0.00823,"76":0.00411,"77":0.01234,"78":0.00411,"79":0.01234,"80":0.00823,"81":0.10283,"83":0.01234,"84":0.00411,"85":0.00823,"86":0.01645,"87":0.01645,"88":0.0329,"89":0.01234,"90":0.00411,"91":0.00823,"92":0.02057,"93":0.02468,"94":0.00411,"95":0.02057,"96":0.01645,"97":0.02879,"98":0.0329,"99":0.02468,"100":0.0329,"101":0.14807,"102":0.09871,"103":2.53361,"104":6.88516,"105":0.02057,"106":0.00411,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00823,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0.01234,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.01234,"62":0,"63":0.11105,"64":0.06992,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00411,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00411,"80":0,"81":0,"82":0,"83":0,"84":0.00411,"85":0.00411,"86":0,"87":0.00411,"88":0.00411,"89":0.32904,"90":0.04113,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.01645,"13":0.00823,"14":0.00823,"15":0.01234,"16":0.00823,"17":0.00823,"18":0.0329,"79":0,"80":0.00411,"81":0,"83":0,"84":0.01645,"85":0,"86":0,"87":0,"88":0.00411,"89":0.00823,"90":0.00411,"91":0,"92":0.01234,"93":0,"94":0,"95":0,"96":0.00411,"97":0.00411,"98":0.00411,"99":0.00823,"100":0.00823,"101":0.01645,"102":0.01234,"103":0.46066,"104":1.32027,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00823,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00411,"13.1":0.02057,"14.1":0.01645,"15.1":0.01234,"15.2-15.3":0.02468,"15.4":0.02879,"15.5":0.0617,"15.6":0.1275,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01249,"6.0-6.1":0,"7.0-7.1":0.05066,"8.1-8.4":0.00069,"9.0-9.2":0,"9.3":0.11035,"10.0-10.2":0.00069,"10.3":0.04442,"11.0-11.2":0.0111,"11.3-11.4":0.00416,"12.0-12.1":0.00347,"12.2-12.5":0.5545,"13.0-13.1":0.00278,"13.2":0.00555,"13.3":0.09091,"13.4-13.7":0.08189,"14.0-14.4":0.2311,"14.5-14.8":0.34491,"15.0-15.1":0.18391,"15.2-15.3":0.18183,"15.4":0.47122,"15.5":1.72596,"15.6":2.74058,"16.0":0.08397},P:{"4":0.24635,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.32846,"8.2":0,"9.2":0,"10.1":0.01026,"11.1-11.2":0.05132,"12.0":0.01026,"13.0":0.06159,"14.0":0.10265,"15.0":0.05132,"16.0":0.22582,"17.0":0.89301,"18.0":0.82116},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00147,"4.2-4.3":0.00734,"4.4":0,"4.4.3-4.4.4":0.127},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00411,"10":0,"11":0.06992,"5.5":0},J:{"7":0,"10":0.00589},N:{"10":0,"11":0},L:{"0":71.65987},S:{"2.5":0.02355},R:{_:"0"},M:{"0":0.10008},Q:{"10.4":0.00589},O:{"0":1.042},H:{"0":0.83601}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BY.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BY.js index 73e6e6d77f0..ab697da604d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BY.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BY.js @@ -1 +1 @@ -module.exports={C:{"39":0.01059,"48":0.01059,"50":0.02649,"52":0.24366,"55":0.27544,"72":0.01059,"78":0.04238,"79":0.03178,"80":0.02119,"81":0.02649,"82":0.01589,"84":0.02119,"86":0.01059,"88":0.02119,"89":0.02119,"91":0.09005,"92":0.01059,"93":0.01059,"94":0.02649,"95":0.06886,"96":1.08059,"97":1.53083,"98":0.01059,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 49 51 53 54 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 83 85 87 90 99 3.5 3.6"},D:{"22":0.0053,"38":0.01059,"49":0.14832,"51":0.01059,"53":0.10064,"59":0.01589,"63":0.0053,"65":0.01059,"66":0.01059,"67":0.02119,"68":0.02119,"69":0.23307,"70":0.01059,"71":0.01059,"72":0.01589,"73":0.03708,"74":0.06886,"75":0.03178,"76":0.01059,"77":0.01059,"78":0.02119,"79":0.10064,"80":0.07946,"81":0.01059,"83":0.04238,"84":0.09535,"85":0.12183,"86":0.27015,"87":0.14832,"88":0.11653,"89":0.07416,"90":0.05827,"91":0.08475,"92":0.24896,"93":0.28074,"94":0.10064,"95":0.06886,"96":0.85811,"97":9.22208,"98":18.15282,"99":0.06356,"100":0.02649,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 52 54 55 56 57 58 60 61 62 64 101"},F:{"36":0.10064,"41":0.01059,"68":0.01059,"71":0.01059,"72":0.0053,"73":0.0053,"74":0.0053,"75":0.01059,"77":0.06356,"78":0.02649,"79":0.05827,"80":0.03178,"81":0.03178,"82":0.72569,"83":5.2917,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 69 70 76 9.5-9.6 10.5 11.1 11.5 11.6","10.0-10.1":0,"10.6":0.02649,"12.1":0.12183},B:{"18":0.04238,"79":0.0053,"85":0.0053,"86":0.0053,"95":0.01059,"96":0.0053,"97":0.39728,"98":1.34014,_:"12 13 14 15 16 17 80 81 83 84 87 88 89 90 91 92 93 94"},E:{"4":0,"13":0.01059,"14":0.19599,"15":0.12183,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1","5.1":0.14302,"9.1":0.0053,"10.1":0.0053,"11.1":0.02649,"12.1":0.02119,"13.1":0.10594,"14.1":0.42376,"15.1":0.39728,"15.2-15.3":0.81044,"15.4":0.0053},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0018,"6.0-6.1":0.0018,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.0009,"9.3":0.02706,"10.0-10.2":0.03517,"10.3":0.03337,"11.0-11.2":0.02345,"11.3-11.4":0.01082,"12.0-12.1":0.02525,"12.2-12.5":0.26516,"13.0-13.1":0.00722,"13.2":0.00812,"13.3":0.04149,"13.4-13.7":0.1407,"14.0-14.4":0.46178,"14.5-14.8":1.16257,"15.0-15.1":1.56121,"15.2-15.3":5.19232,"15.4":0.01353},P:{"4":0.03227,"5.0-5.4":0.01086,"6.2-6.4":0.18286,"7.2-7.4":0.26254,"8.2":0.02052,"9.2":0.0104,"10.1":0.01018,"11.1-11.2":0.02151,"12.0":0.07529,"13.0":0.05378,"14.0":0.05378,"15.0":0.06454,"16.0":1.16167},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00391,"4.2-4.3":0.00684,"4.4":0,"4.4.3-4.4.4":0.02687},A:{"8":0.02649,"9":0.01059,"11":0.19069,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.11755},Q:{"10.4":0.0047},O:{"0":0.15046},H:{"0":1.07282},L:{"0":32.66327},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.02488,"51":0,"52":0.15923,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00498,"65":0,"66":0,"67":0,"68":0.00498,"69":0,"70":0,"71":0,"72":0.00498,"73":0,"74":0,"75":0.00498,"76":0,"77":0,"78":0.00498,"79":0,"80":0.00995,"81":0,"82":0,"83":0,"84":0.00995,"85":0,"86":0.00498,"87":0,"88":0.00995,"89":0.00995,"90":0,"91":0.07962,"92":0,"93":0,"94":0.00498,"95":0.00995,"96":0.03981,"97":0.00995,"98":0.00995,"99":0.00995,"100":0.06966,"101":0.01493,"102":0.1244,"103":1.09472,"104":0.19904,"105":0.00498,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00995,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.07962,"50":0,"51":0.00498,"52":0,"53":0.05474,"54":0,"55":0.00498,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0.00498,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00498,"68":0.01493,"69":0.10947,"70":0.00995,"71":0.00995,"72":0.00995,"73":0.00498,"74":0.03483,"75":0.00498,"76":0.00498,"77":0.00498,"78":0.00498,"79":0.02986,"80":0.00995,"81":0.0199,"83":0.05971,"84":0.07464,"85":0.06469,"86":0.09454,"87":0.07962,"88":0.0199,"89":0.02986,"90":0.00498,"91":0.00995,"92":0.09952,"93":0.00498,"94":0.01493,"95":0.01493,"96":0.05474,"97":0.03981,"98":0.0199,"99":0.03981,"100":0.07464,"101":0.15426,"102":0.28363,"103":3.11995,"104":8.92694,"105":0.01493,"106":0.00498,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.03483,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00498,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00498,"57":0,"58":0,"60":0,"62":0,"63":0.02488,"64":0.02986,"65":0,"66":0,"67":0.00498,"68":0,"69":0.00498,"70":0.01493,"71":0.00498,"72":0.00498,"73":0,"74":0,"75":0,"76":0.00498,"77":0,"78":0,"79":0.0199,"80":0.00498,"81":0,"82":0.01493,"83":0.00995,"84":0.0199,"85":0.13435,"86":0.02488,"87":0.05971,"88":0.02986,"89":2.36858,"90":0.44784,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00995},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00995,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00498,"100":0,"101":0.00498,"102":0.00498,"103":0.20899,"104":0.67176,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01493,"14":0.02488,"15":0.00498,_:"0","3.1":0,"3.2":0,"5.1":0.02488,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00498,"12.1":0.00498,"13.1":0.02986,"14.1":0.04478,"15.1":0.03483,"15.2-15.3":0.02488,"15.4":0.07962,"15.5":0.52746,"15.6":0.91558,"16.0":0.00995},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00481,"8.1-8.4":0,"9.0-9.2":0.00481,"9.3":0.05533,"10.0-10.2":0.00241,"10.3":0.0409,"11.0-11.2":0.03127,"11.3-11.4":0,"12.0-12.1":0.03609,"12.2-12.5":0.37048,"13.0-13.1":0.01925,"13.2":0.00481,"13.3":0.04571,"13.4-13.7":0.17802,"14.0-14.4":0.43063,"14.5-14.8":0.62549,"15.0-15.1":0.38011,"15.2-15.3":0.76262,"15.4":0.95989,"15.5":6.40166,"15.6":13.52023,"16.0":0.17081},P:{"4":0.06047,"5.0-5.4":0,"6.2-6.4":0.29226,"7.2-7.4":0.01008,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.02016,"12.0":0.08062,"13.0":0.05039,"14.0":0.03023,"15.0":0.01008,"16.0":0.06047,"17.0":0.44343,"18.0":0.63491},I:{"0":0,"3":0,"4":0.00526,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00526,"4.2-4.3":0.01226,"4.4":0,"4.4.3-4.4.4":0.0622},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00995,"9":0,"10":0,"11":0.06966,"5.5":0},J:{"7":0,"10":0.00502},N:{"10":0,"11":0},L:{"0":43.70294},S:{"2.5":0.00502},R:{_:"0"},M:{"0":0.15072},Q:{"10.4":0.0201},O:{"0":0.24115},H:{"0":1.16532}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BZ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BZ.js index d611eddede0..3bcf1699c35 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BZ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/BZ.js @@ -1 +1 @@ -module.exports={C:{"64":0.00807,"72":0.00807,"75":0.00807,"78":0.07259,"81":0.39523,"87":0.00807,"88":0.00403,"90":0.0121,"91":0.03226,"92":0.00403,"93":0.04033,"95":0.01613,"96":0.52429,"97":0.83886,"98":0.00807,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 65 66 67 68 69 70 71 73 74 76 77 79 80 82 83 84 85 86 89 94 99 3.5 3.6"},D:{"49":0.0242,"61":0.00807,"65":0.00807,"72":0.00403,"74":0.00403,"75":0.08066,"76":0.09679,"77":0.0484,"79":0.02017,"80":0.00403,"81":0.00807,"84":0.03226,"85":0.00807,"86":0.00403,"87":0.02017,"88":0.00807,"89":0.01613,"90":0.02017,"91":0.06856,"92":0.93969,"93":0.12906,"94":0.05243,"95":0.0484,"96":0.7824,"97":5.47278,"98":12.9056,"99":0.01613,"100":0.0484,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 62 63 64 66 67 68 69 70 71 73 78 83 101"},F:{"28":0.01613,"80":0.00807,"81":0.00403,"82":0.14922,"83":1.29863,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00807,"17":0.00403,"18":0.00807,"93":0.05646,"94":0.00807,"95":0.01613,"96":0.02823,"97":1.12521,"98":3.6176,_:"13 14 15 16 79 80 81 83 84 85 86 87 88 89 90 91 92"},E:{"4":0,"12":0.02017,"13":0.00403,"14":0.06856,"15":0.08469,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00807,"11.1":0.00403,"12.1":0.0121,"13.1":0.11696,"14.1":0.60092,"15.1":1.10908,"15.2-15.3":3.77489,"15.4":0.05243},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00625,"6.0-6.1":0,"7.0-7.1":0.02186,"8.1-8.4":0,"9.0-9.2":0.04372,"9.3":0.24049,"10.0-10.2":0,"10.3":0.07808,"11.0-11.2":0.00625,"11.3-11.4":0.28734,"12.0-12.1":0.00937,"12.2-12.5":0.35605,"13.0-13.1":0,"13.2":0,"13.3":0.04997,"13.4-13.7":0.07808,"14.0-14.4":0.46848,"14.5-14.8":2.14877,"15.0-15.1":4.32252,"15.2-15.3":22.98996,"15.4":0.10619},P:{"4":0.1571,"5.0-5.4":0.01086,"6.2-6.4":0.18286,"7.2-7.4":0.13615,"8.2":0.02052,"9.2":0.02095,"10.1":0.01018,"11.1-11.2":0.21994,"12.0":0.02137,"13.0":0.14662,"14.0":0.09426,"15.0":0.05237,"16.0":1.69666},I:{"0":0,"3":0,"4":0.0011,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0011,"4.2-4.3":0.00037,"4.4":0,"4.4.3-4.4.4":0.0213},A:{"11":0.08469,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.0716},Q:{"10.4":0.00597},O:{"0":0.39382},H:{"0":0.0339},L:{"0":26.13127},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0.00415,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00415,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00415,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.0083,"79":0,"80":0,"81":0.19085,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.0166,"92":0,"93":0.01245,"94":0,"95":0.00415,"96":0.00415,"97":0,"98":0.00415,"99":0,"100":0,"101":0.00415,"102":0.02075,"103":0.47299,"104":0.08298,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.09958,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00415,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.01245,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00415,"69":0,"70":0,"71":0,"72":0,"73":0.00415,"74":0,"75":0.0166,"76":0.02904,"77":0.00415,"78":0,"79":0.02489,"80":0,"81":0.0083,"83":0,"84":0,"85":0,"86":0.00415,"87":0.01245,"88":0.0083,"89":0.00415,"90":0.00415,"91":0.0083,"92":0.0083,"93":0.07883,"94":0.00415,"95":0.01245,"96":0.0083,"97":0.0083,"98":0.0166,"99":0.0083,"100":0.02489,"101":0.97916,"102":0.24479,"103":2.22386,"104":4.88752,"105":0.0166,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00415,"79":0.0083,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.0083,"89":0.75927,"90":0.10373,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00415,"18":0.00415,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00415,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.02904,"102":0.0083,"103":0.53107,"104":1.13268,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00415,"13":0.0083,"14":0.05394,"15":0.01245,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00415,"10.1":0,"11.1":0.00415,"12.1":0.01245,"13.1":0.03734,"14.1":0.04149,"15.1":0.07883,"15.2-15.3":0.07883,"15.4":0.46469,"15.5":0.69288,"15.6":1.48119,"16.0":0.02075},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00732,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.09145,"9.0-9.2":0.03292,"9.3":0.15364,"10.0-10.2":0,"10.3":0.08414,"11.0-11.2":0.00732,"11.3-11.4":0.2707,"12.0-12.1":0.00366,"12.2-12.5":0.62187,"13.0-13.1":0.00732,"13.2":0,"13.3":0.1134,"13.4-13.7":0.04024,"14.0-14.4":0.23412,"14.5-14.8":0.62919,"15.0-15.1":0.73893,"15.2-15.3":1.77417,"15.4":3.56663,"15.5":7.97095,"15.6":19.92921,"16.0":0.28167},P:{"4":0.11679,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.14865,"8.2":0,"9.2":0.01062,"10.1":0,"11.1-11.2":0.07432,"12.0":0.01062,"13.0":0.05309,"14.0":0.10618,"15.0":0.02124,"16.0":0.06371,"17.0":0.88126,"18.0":1.2635},I:{"0":0,"3":0,"4":0.19948,"2.1":0,"2.2":0,"2.3":0,"4.1":0.04694,"4.2-4.3":0.0352,"4.4":0,"4.4.3-4.4.4":0.90351},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0166,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":42.14434},S:{"2.5":0},R:{_:"0"},M:{"0":0.10532},Q:{"10.4":0.0234},O:{"0":0.275},H:{"0":0.05539}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CA.js index 2aa6066334b..5e4cec3f09d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CA.js @@ -1 +1 @@ -module.exports={C:{"24":0.00566,"38":0.01699,"43":0.01699,"44":0.0623,"45":0.01699,"48":0.01133,"50":0.01133,"52":0.04531,"55":0.10762,"56":0.00566,"57":0.01699,"63":0.19824,"66":0.01133,"68":0.00566,"72":0.00566,"77":0.01699,"78":0.09062,"79":0.01133,"80":0.01133,"81":0.01133,"82":0.01699,"83":0.00566,"84":0.01133,"87":0.03398,"88":0.01699,"89":0.01699,"90":0.01699,"91":0.07363,"92":0.00566,"93":0.00566,"94":0.02832,"95":0.0623,"96":1.17245,"97":1.83514,"98":0.01133,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 46 47 49 51 53 54 58 59 60 61 62 64 65 67 69 70 71 73 74 75 76 85 86 99 3.5 3.6"},D:{"38":0.01133,"47":0.01699,"48":0.17558,"49":0.13027,"60":0.02832,"64":0.02266,"65":0.02266,"66":0.01133,"67":0.02832,"68":0.01133,"69":0.08496,"70":0.22656,"71":0.00566,"72":0.04531,"73":0.01133,"74":0.02832,"75":0.01133,"76":0.03965,"77":0.01133,"78":0.02266,"79":0.11894,"80":0.07363,"81":0.03965,"83":0.36816,"84":0.11894,"85":0.11894,"86":0.16992,"87":0.2039,"88":0.03965,"89":0.03965,"90":0.05098,"91":0.08496,"92":0.06797,"93":0.29453,"94":0.23222,"95":0.11894,"96":0.88358,"97":10.63133,"98":19.89763,"99":0.02832,"100":0.01699,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 50 51 52 53 54 55 56 57 58 59 61 62 63 101"},F:{"52":0.01133,"82":0.1416,"83":0.49277,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00566,"13":0.00566,"14":0.00566,"15":0.01133,"16":0.01133,"17":0.19824,"18":0.02832,"84":0.00566,"85":0.01699,"86":0.01133,"89":0.01133,"90":0.00566,"92":0.01133,"94":0.01133,"95":0.04531,"96":0.07363,"97":1.63123,"98":5.35248,_:"79 80 81 83 87 88 91 93"},E:{"4":0,"8":0.00566,"9":0.02832,"12":0.01133,"13":0.08496,"14":0.43613,"15":0.26621,_:"0 5 6 7 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.02832,"10.1":0.03398,"11.1":0.09062,"12.1":0.16426,"13.1":0.61171,"14.1":1.81248,"15.1":0.8496,"15.2-15.3":2.21462,"15.4":0.02266},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00225,"6.0-6.1":0.00451,"7.0-7.1":0.01127,"8.1-8.4":0.01353,"9.0-9.2":0.00676,"9.3":0.20516,"10.0-10.2":0.01353,"10.3":0.20291,"11.0-11.2":0.08793,"11.3-11.4":0.05636,"12.0-12.1":0.04058,"12.2-12.5":0.992,"13.0-13.1":0.0496,"13.2":0.02029,"13.3":0.10145,"13.4-13.7":0.34269,"14.0-14.4":0.82742,"14.5-14.8":4.29717,"15.0-15.1":2.95346,"15.2-15.3":12.23768,"15.4":0.06764},P:{"4":0.12016,"5.0-5.4":0.03103,"6.2-6.4":0.01048,"7.2-7.4":0.09308,"8.2":0.01077,"9.2":0.08273,"10.1":0.02185,"11.1-11.2":0.01092,"12.0":0.02185,"13.0":0.05462,"14.0":0.04369,"15.0":0.05462,"16.0":3.08039},I:{"0":0,"3":0,"4":0.00132,"2.1":0,"2.2":0,"2.3":0.0022,"4.1":0.00044,"4.2-4.3":0.00396,"4.4":0,"4.4.3-4.4.4":0.02243},A:{"8":0.01799,"9":0.04798,"10":0.006,"11":0.43779,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.3859},Q:{"10.4":0.00867},O:{"0":0.14309},H:{"0":0.1642},L:{"0":16.81277},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.01103,"39":0,"40":0,"41":0,"42":0,"43":0.01103,"44":0.03859,"45":0.01103,"46":0,"47":0,"48":0.00551,"49":0,"50":0,"51":0,"52":0.02205,"53":0,"54":0,"55":0,"56":0,"57":0.00551,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00551,"67":0,"68":0.01103,"69":0,"70":0.00551,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00551,"78":0.03308,"79":0.00551,"80":0.00551,"81":0.00551,"82":0.00551,"83":0.00551,"84":0.00551,"85":0,"86":0,"87":0.00551,"88":0.00551,"89":0.00551,"90":0.00551,"91":0.03308,"92":0,"93":0,"94":0.00551,"95":0.00551,"96":0.00551,"97":0.00551,"98":0.00551,"99":0.01103,"100":0.01103,"101":0.01654,"102":0.07167,"103":1.65941,"104":0.34732,"105":0.00551,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0.00551,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.01103,"48":0.09923,"49":0.06064,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.02757,"61":0,"62":0,"63":0,"64":0,"65":0.00551,"66":0.00551,"67":0.01103,"68":0.00551,"69":0.02757,"70":0.00551,"71":0.00551,"72":0.00551,"73":0,"74":0.02205,"75":0.00551,"76":0.01654,"77":0.00551,"78":0.00551,"79":0.0441,"80":0.02757,"81":0.01654,"83":0.16539,"84":0.04962,"85":0.0441,"86":0.04962,"87":0.07167,"88":0.01103,"89":0.01103,"90":0.01103,"91":0.02205,"92":0.01654,"93":0.04962,"94":0.02205,"95":0.01103,"96":0.05513,"97":0.0441,"98":0.05513,"99":0.04962,"100":0.09372,"101":0.12129,"102":0.28116,"103":4.66951,"104":11.03151,"105":0.0441,"106":0.00551,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00551,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00551,"64":0.00551,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00551,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01103,"89":0.33078,"90":0.03308,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00551,"13":0.00551,"14":0.00551,"15":0,"16":0.00551,"17":0.00551,"18":0.01103,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00551,"86":0,"87":0,"88":0,"89":0.00551,"90":0,"91":0,"92":0.00551,"93":0,"94":0,"95":0,"96":0.00551,"97":0.00551,"98":0.00551,"99":0.00551,"100":0.00551,"101":0.04962,"102":0.02205,"103":1.07504,"104":2.86125,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.00551,"9":0.01654,"10":0,"11":0,"12":0.00551,"13":0.02757,"14":0.12129,"15":0.02757,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.01103,"10.1":0.01103,"11.1":0.03308,"12.1":0.06064,"13.1":0.27014,"14.1":0.39142,"15.1":0.05513,"15.2-15.3":0.06616,"15.4":0.20949,"15.5":0.79939,"15.6":1.87993,"16.0":0.01654},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00399,"6.0-6.1":0.01196,"7.0-7.1":0.01594,"8.1-8.4":0.01993,"9.0-9.2":0.01196,"9.3":0.27497,"10.0-10.2":0.01196,"10.3":0.2391,"11.0-11.2":0.05181,"11.3-11.4":0.07572,"12.0-12.1":0.06376,"12.2-12.5":1.44257,"13.0-13.1":0.09166,"13.2":0.01993,"13.3":0.12354,"13.4-13.7":0.38655,"14.0-14.4":1.25528,"14.5-14.8":3.71403,"15.0-15.1":0.86873,"15.2-15.3":1.02016,"15.4":1.21543,"15.5":7.91423,"15.6":20.73401,"16.0":0.25504},P:{"4":0.15697,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01046,"8.2":0,"9.2":0.01046,"10.1":0.01046,"11.1-11.2":0.02093,"12.0":0.01046,"13.0":0.03139,"14.0":0.02093,"15.0":0.01046,"16.0":0.07325,"17.0":1.00461,"18.0":1.75806},I:{"0":0,"3":0,"4":0.02578,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01718,"4.2-4.3":0.06874,"4.4":0,"4.4.3-4.4.4":0.34369},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.01181,"9":0.01181,"10":0,"11":0.14176,"5.5":0},J:{"7":0,"10":0.00449},N:{"10":0,"11":0},L:{"0":24.8395},S:{"2.5":0},R:{_:"0"},M:{"0":0.4487},Q:{"10.4":0},O:{"0":0.07628},H:{"0":0.13594}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CD.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CD.js index 0954ed79f00..80629103a9f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CD.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CD.js @@ -1 +1 @@ -module.exports={C:{"29":0.00143,"30":0.00286,"33":0.00571,"35":0.00143,"43":0.00286,"45":0.00286,"47":0.00428,"49":0.00143,"52":0.00428,"56":0.00857,"59":0.00143,"68":0.00286,"72":0.01999,"78":0.01714,"80":0.00143,"88":0.00428,"89":0.00714,"90":0.00714,"91":0.01571,"93":0.00571,"94":0.00286,"95":0.01142,"96":0.33272,"97":0.49837,"98":0.00714,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 31 32 34 36 37 38 39 40 41 42 44 46 48 50 51 53 54 55 57 58 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 79 81 82 83 84 85 86 87 92 99 3.5 3.6"},D:{"11":0.00428,"18":0.00143,"25":0.0714,"26":0.00286,"28":0.00143,"33":0.00143,"34":0.00286,"38":0.00428,"42":0.01142,"43":0.00286,"47":0.00428,"49":0.00428,"55":0.00143,"62":0.00143,"63":0.00286,"64":0.00714,"65":0.00143,"68":0.00428,"69":0.00143,"70":0.00143,"71":0.00286,"72":0.00286,"74":0.01285,"76":0.01856,"77":0.00714,"78":0.00143,"79":0.01,"80":0.01,"81":0.0257,"83":0.00571,"84":0.01,"85":0.01,"86":0.2856,"87":0.02999,"88":0.0257,"89":0.01571,"90":0.00714,"91":0.01714,"92":0.02142,"93":0.0257,"94":0.02142,"95":0.01571,"96":0.0971,"97":1.32518,"98":3.04307,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 19 20 21 22 23 24 27 29 30 31 32 35 36 37 39 40 41 44 45 46 48 50 51 52 53 54 56 57 58 59 60 61 66 67 73 75 99 100 101"},F:{"15":0.00286,"18":0.00714,"34":0.00428,"36":0.00286,"42":0.00428,"66":0.00857,"67":0.00143,"74":0.00286,"78":0.00143,"79":0.01571,"80":0.00571,"81":0.00143,"82":0.1071,"83":0.58548,_:"9 11 12 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 37 38 39 40 41 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 68 69 70 71 72 73 75 76 77 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.04284,"13":0.00857,"14":0.0257,"15":0.02142,"16":0.01571,"17":0.13566,"18":0.06997,"84":0.01142,"85":0.01,"89":0.01285,"90":0.00571,"91":0.00143,"92":0.02713,"93":0.00571,"94":0.00143,"95":0.01856,"96":0.05284,"97":0.39698,"98":0.8668,_:"79 80 81 83 86 87 88"},E:{"4":0,"12":0.00571,"13":0.00571,"14":0.01428,"15":0.01285,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00428,"11.1":0.01285,"12.1":0.02142,"13.1":0.02856,"14.1":0.08425,"15.1":0.02856,"15.2-15.3":0.03142},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00169,"5.0-5.1":0.00084,"6.0-6.1":0,"7.0-7.1":0.00844,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02616,"10.0-10.2":0.00084,"10.3":0.14934,"11.0-11.2":0.03375,"11.3-11.4":0.02869,"12.0-12.1":0.17212,"12.2-12.5":2.38858,"13.0-13.1":0.01941,"13.2":0.45477,"13.3":0.06159,"13.4-13.7":0.35943,"14.0-14.4":0.88338,"14.5-14.8":1.43855,"15.0-15.1":0.95088,"15.2-15.3":1.44783,"15.4":0.00759},P:{"4":0.29722,"5.0-5.4":0.02123,"6.2-6.4":0.04033,"7.2-7.4":0.13799,"8.2":0.01049,"9.2":0.05307,"10.1":2.25855,"11.1-11.2":0.04246,"12.0":0.18045,"13.0":0.03184,"14.0":0.10615,"15.0":0.12738,"16.0":0.38213},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00257,"4.2-4.3":0.02086,"4.4":0,"4.4.3-4.4.4":0.07085},A:{"11":0.15708,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.23999},Q:{"10.4":0.03428},O:{"0":0.6514},H:{"0":25.88516},L:{"0":52.08426},S:{"2.5":0.05143}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00175,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00175,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00175,"66":0,"67":0,"68":0.00175,"69":0,"70":0,"71":0,"72":0.00175,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00175,"79":0,"80":0,"81":0.00175,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00175,"90":0,"91":0.00175,"92":0,"93":0,"94":0,"95":0.00175,"96":0,"97":0.00175,"98":0,"99":0.00175,"100":0.00175,"101":0.0035,"102":0.01049,"103":0.14167,"104":0.01399,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00175,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00175,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00175,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00175,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00175,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00175,"64":0.00175,"65":0.00175,"66":0,"67":0,"68":0.00525,"69":0,"70":0.00175,"71":0,"72":0,"73":0,"74":0.00175,"75":0,"76":0,"77":0,"78":0,"79":0.00175,"80":0.00175,"81":0.0035,"83":0.00175,"84":0.00175,"85":0,"86":0.0035,"87":0.0035,"88":0.00175,"89":0.00175,"90":0.00175,"91":0.00175,"92":0.00175,"93":0.00175,"94":0.00175,"95":0.00175,"96":0.0035,"97":0.00175,"98":0.0035,"99":0.0035,"100":0.0035,"101":0.00525,"102":0.01049,"103":0.22212,"104":0.47398,"105":0.00175,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.02449,"25":0,"26":0.01574,"27":0.01049,"28":0.01574,"29":0.00175,"30":0.04897,"31":0.007,"32":0.02449,"33":0.01224,"34":0.00175,"35":0.00175,"36":0,"37":0.00525,"38":0.01399,"39":0,"40":0,"41":0.00175,"42":0.07696,"43":0,"44":0,"45":0.00525,"46":0.00525,"47":0.007,"48":0,"49":0,"50":0.05247,"51":0.01574,"52":0,"53":0.00175,"54":0.01924,"55":0.06996,"56":0.007,"57":0.04023,"58":0.04547,"60":0.72409,"62":0.00875,"63":0.80804,"64":0.24836,"65":0,"66":0,"67":0.00175,"68":0.0035,"69":0.00175,"70":0.00175,"71":0.0035,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.007,"80":0,"81":0,"82":0.00175,"83":0,"84":0.00175,"85":0.00175,"86":0.00175,"87":0.00175,"88":0.0035,"89":0.12068,"90":0.01749,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.007},B:{"12":0.00525,"13":0.0035,"14":0.00175,"15":0.007,"16":0.00175,"17":0.0035,"18":0.00875,"79":0,"80":0,"81":0,"83":0,"84":0.00175,"85":0.00175,"86":0,"87":0,"88":0,"89":0.00175,"90":0.00175,"91":0,"92":0.0035,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00175,"99":0.00175,"100":0.00175,"101":0.00175,"102":0.0035,"103":0.07171,"104":0.11194,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00175,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00175,"13.1":0.00525,"14.1":0.00525,"15.1":0,"15.2-15.3":0,"15.4":0.0035,"15.5":0.00875,"15.6":0.01399,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01539,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.09884,"10.0-10.2":0,"10.3":0.14907,"11.0-11.2":0.03241,"11.3-11.4":0.0162,"12.0-12.1":0.03808,"12.2-12.5":1.83345,"13.0-13.1":0.04861,"13.2":0.04618,"13.3":0.18391,"13.4-13.7":0.19606,"14.0-14.4":0.87257,"14.5-14.8":0.83287,"15.0-15.1":0.48125,"15.2-15.3":0.64248,"15.4":0.60197,"15.5":1.07268,"15.6":0.82396,"16.0":0.11181},P:{"4":0.23177,"5.0-5.4":0.04031,"6.2-6.4":0.01008,"7.2-7.4":0.09069,"8.2":0,"9.2":0.07054,"10.1":0,"11.1-11.2":0.05039,"12.0":0.01008,"13.0":0.05039,"14.0":0.04031,"15.0":0.03023,"16.0":0.08062,"17.0":0.34262,"18.0":0.18139},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00241,"4.2-4.3":0.01138,"4.4":0,"4.4.3-4.4.4":0.08895},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00875,"5.5":0},J:{"7":0,"10":0.00825},N:{"10":0,"11":0},L:{"0":51.03308},S:{"2.5":0.07426},R:{_:"0"},M:{"0":0.11551},Q:{"10.4":0.02475},O:{"0":0.56932},H:{"0":29.65251}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CF.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CF.js index 90736d8df65..874cabc1f06 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CF.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CF.js @@ -1 +1 @@ -module.exports={C:{"22":0.0018,"30":0.00719,"35":0.0018,"45":0.05034,"50":0.0018,"52":0.00719,"56":0.00719,"58":0.02158,"59":0.00719,"66":0.0018,"68":0.00539,"72":0.0018,"91":0.46928,"92":0.0018,"94":0.00899,"95":0.03416,"96":0.38297,"97":0.46748,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 31 32 33 34 36 37 38 39 40 41 42 43 44 46 47 48 49 51 53 54 55 57 60 61 62 63 64 65 67 69 70 71 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 93 98 99 3.5 3.6"},D:{"43":0.0018,"51":0.00719,"55":0.0018,"57":0.01259,"60":0.0018,"63":0.0018,"77":0.01438,"80":0.01259,"81":0.00539,"83":0.01618,"85":0.00719,"86":0.02697,"89":0.00539,"91":0.00539,"92":0.02877,"93":0.00539,"94":0.02158,"95":0.0018,"96":0.05754,"97":1.90588,"98":3.00446,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 52 53 54 56 58 59 61 62 64 65 66 67 68 69 70 71 72 73 74 75 76 78 79 84 87 88 90 99 100 101"},F:{"81":0.01618,"82":0.02697,"83":0.12586,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6","10.0-10.1":0,"12.1":0.08451},B:{"12":0.05754,"13":0.02697,"15":0.0018,"17":0.00539,"18":0.04675,"83":0.00539,"84":0.00899,"90":0.02337,"91":0.01259,"92":0.00539,"93":0.03596,"94":0.0018,"95":0.01259,"96":0.04315,"97":0.18879,"98":0.55918,_:"14 16 79 80 81 85 86 87 88 89"},E:{"4":0,"13":0.00539,_:"0 5 6 7 8 9 10 11 12 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 15.4","13.1":0.11148,"14.1":0.10608,"15.1":0.00899,"15.2-15.3":0.02697},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.0151,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04165,"10.0-10.2":0,"10.3":0.03483,"11.0-11.2":0.13493,"11.3-11.4":0.00341,"12.0-12.1":0.09328,"12.2-12.5":0.12129,"13.0-13.1":0.00511,"13.2":0,"13.3":0.00487,"13.4-13.7":0.04822,"14.0-14.4":0.34414,"14.5-14.8":0.26961,"15.0-15.1":0.6174,"15.2-15.3":0.70216,"15.4":0},P:{"4":0.04075,"5.0-5.4":0.02063,"6.2-6.4":0.03056,"7.2-7.4":0.05243,"8.2":0.01049,"9.2":0.05094,"10.1":1.21237,"11.1-11.2":0.02038,"12.0":0.03056,"13.0":0.20973,"14.0":0.03056,"15.0":0.0815,"16.0":1.74215},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00185,"4.2-4.3":0.00648,"4.4":0,"4.4.3-4.4.4":0.04908},A:{"11":0.14564,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.07382},Q:{"10.4":0},O:{"0":0.26246},H:{"0":8.73576},L:{"0":75.95695},S:{"2.5":0.13943}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0.00185,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00185,"44":0,"45":0.00185,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.0037,"53":0,"54":0,"55":0,"56":0.00185,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.02408,"92":0,"93":0,"94":0.00185,"95":0.01667,"96":0,"97":0,"98":0,"99":0.00185,"100":0.0037,"101":0,"102":0.00741,"103":0.12779,"104":0.01296,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00185,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00556,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.05186,"41":0,"42":0,"43":0.00185,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.0037,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00185,"60":0,"61":0,"62":0,"63":0.0037,"64":0,"65":0,"66":0,"67":0.00185,"68":0.00185,"69":0.00185,"70":0.00185,"71":0.00185,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0.01296,"81":0.0037,"83":0.00556,"84":0,"85":0,"86":0.00741,"87":0.00185,"88":0.00185,"89":0,"90":0,"91":0,"92":0,"93":0.00556,"94":0,"95":0,"96":0.00185,"97":0.00185,"98":0.00185,"99":0.0037,"100":0.0037,"101":0.00185,"102":0.0037,"103":0.40374,"104":0.96489,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00185,"25":0,"26":0.00185,"27":0.0037,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00185,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00185,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00185,"57":0.00185,"58":0,"60":0.03519,"62":0,"63":0.06852,"64":0.03704,"65":0,"66":0.00185,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.0037,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.0037,"86":0.0037,"87":0,"88":0,"89":0.03889,"90":0.00741,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00926},B:{"12":0.00185,"13":0.0037,"14":0.00556,"15":0.0037,"16":0.01111,"17":0.00556,"18":0.01296,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00185,"86":0,"87":0,"88":0,"89":0,"90":0.0037,"91":0,"92":0.0037,"93":0,"94":0,"95":0,"96":0,"97":0.00185,"98":0.00185,"99":0,"100":0.00185,"101":0.00185,"102":0.00185,"103":0.05371,"104":0.09445,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.01296,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.0037,"13.1":0,"14.1":0.0037,"15.1":0,"15.2-15.3":0,"15.4":0.00185,"15.5":0.0037,"15.6":0.00185,"16.0":0},G:{"8":0.00316,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00144,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.08307,"10.0-10.2":0,"10.3":0.01236,"11.0-11.2":0.0092,"11.3-11.4":0.0138,"12.0-12.1":0.01063,"12.2-12.5":0.26415,"13.0-13.1":0.0046,"13.2":0.00316,"13.3":0.00316,"13.4-13.7":0.05202,"14.0-14.4":0.35957,"14.5-14.8":0.15694,"15.0-15.1":0.12302,"15.2-15.3":0.10606,"15.4":0.27823,"15.5":0.76686,"15.6":0.58089,"16.0":0.04139},P:{"4":0.2037,"5.0-5.4":0.02037,"6.2-6.4":0,"7.2-7.4":0.03056,"8.2":0,"9.2":0.0713,"10.1":0,"11.1-11.2":0.01019,"12.0":0,"13.0":0.03056,"14.0":0.05093,"15.0":0.02037,"16.0":0.02037,"17.0":0.22407,"18.0":0.58055},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00539,"4.2-4.3":0.01617,"4.4":0,"4.4.3-4.4.4":0.24253},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02222,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":81.868},S:{"2.5":0.51332},R:{_:"0"},M:{"0":0.12222},Q:{"10.4":0.00815},O:{"0":0.48073},H:{"0":8.02256}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CG.js index 5b728e1098a..1d831a32097 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CG.js @@ -1 +1 @@ -module.exports={C:{"32":0.01813,"39":0.00725,"43":0.00363,"47":0.00725,"48":0.00725,"52":0.0145,"72":0.01088,"78":0.00725,"89":0.09425,"91":0.0725,"92":0.00363,"93":0.00363,"94":0.00363,"95":0.01813,"96":1.17813,"97":1.73275,"98":0.01088,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 37 38 40 41 42 44 45 46 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 90 99 3.5 3.6"},D:{"42":0.01813,"49":0.00725,"55":0.00363,"60":0.00363,"66":0.00363,"67":0.0145,"69":0.05438,"75":0.03988,"79":0.01813,"81":0.03625,"83":0.00363,"84":0.0145,"86":0.09425,"87":0.09425,"88":0.01088,"89":0.02175,"90":0.0145,"91":0.07975,"92":0.0145,"93":0.01088,"94":0.02175,"95":0.02175,"96":0.41325,"97":3.567,"98":8.76163,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 50 51 52 53 54 56 57 58 59 61 62 63 64 65 68 70 71 72 73 74 76 77 78 80 85 99 100 101"},F:{"36":0.00363,"79":0.01813,"82":0.19213,"83":2.001,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.02175,"14":0.01813,"15":0.00363,"16":0.10875,"17":0.0145,"18":0.145,"84":0.01088,"89":0.03988,"90":0.00725,"92":0.0145,"94":0.01088,"95":0.00725,"96":0.03988,"97":0.90625,"98":3.07038,_:"13 79 80 81 83 85 86 87 88 91 93"},E:{"4":0,"15":0.00725,_:"0 5 6 7 8 9 10 11 12 13 14 3.1 3.2 5.1 6.1 11.1 12.1 15.4","7.1":0.01813,"9.1":0.00363,"10.1":0.00363,"13.1":0.1885,"14.1":0.03263,"15.1":0.02175,"15.2-15.3":0.05438},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.04029,"8.1-8.4":0.00413,"9.0-9.2":0,"9.3":0.0155,"10.0-10.2":0.00207,"10.3":0.16529,"11.0-11.2":0.11364,"11.3-11.4":0.03926,"12.0-12.1":0.00413,"12.2-12.5":3.97108,"13.0-13.1":0.0093,"13.2":0.00413,"13.3":0.01446,"13.4-13.7":0.76343,"14.0-14.4":0.54959,"14.5-14.8":0.88017,"15.0-15.1":0.59504,"15.2-15.3":3.14154,"15.4":0.01446},P:{"4":0.22481,"5.0-5.4":0.02123,"6.2-6.4":0.04033,"7.2-7.4":0.05353,"8.2":0.01049,"9.2":0.03212,"10.1":2.25855,"11.1-11.2":0.07494,"12.0":0.02141,"13.0":0.03212,"14.0":0.01071,"15.0":0.14987,"16.0":0.53526},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0.00044,"4.1":0.01403,"4.2-4.3":0.01564,"4.4":0,"4.4.3-4.4.4":0.11651},A:{"11":0.07613,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.06375},N:{_:"10 11"},R:{_:"0"},M:{"0":0.08288},Q:{"10.4":0.08925},O:{"0":0.68213},H:{"0":1.84081},L:{"0":57.93513},S:{"2.5":0.24225}}; +module.exports={C:{"31":0.0133,"37":0.04433,"43":0.00887,"45":0.0133,"47":0.03103,"56":0.0133,"57":0.00887,"68":0.12856,"72":0.0133,"78":0.00443,"84":0.00443,"91":0.00887,"100":0.00887,"101":0.00887,"102":0.17289,"103":3.56413,"104":0.43443,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 36 38 39 40 41 42 44 46 48 49 50 51 52 53 54 55 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 79 80 81 82 83 85 86 87 88 89 90 92 93 94 95 96 97 98 99 105 106 3.5 3.6"},D:{"29":0.00443,"34":0.00887,"42":0.00443,"43":0.00443,"49":0.01773,"50":0.01773,"58":0.00887,"60":0.00443,"63":0.00443,"65":0.01773,"69":0.0266,"75":0.00887,"76":0.00887,"77":0.00887,"79":0.04876,"80":0.03546,"81":0.0133,"83":0.00887,"84":0.03103,"85":0.0266,"86":0.04433,"87":0.0133,"88":0.0399,"89":0.0399,"90":0.0133,"91":0.01773,"92":0.02217,"94":0.0133,"95":0.00887,"96":0.03546,"97":0.64722,"98":0.0266,"99":0.07536,"100":0.09753,"101":0.0665,"102":0.10639,"103":4.59259,"104":13.05075,"105":0.04876,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 35 36 37 38 39 40 41 44 45 46 47 48 51 52 53 54 55 56 57 59 61 62 64 66 67 68 70 71 72 73 74 78 93 106 107 108"},F:{"34":0.02217,"73":0.00443,"78":0.00443,"79":0.07979,"81":0.03103,"82":0.02217,"83":0.00443,"84":0.00443,"85":0.07093,"86":0.03546,"87":0.0133,"88":0.03103,"89":3.04547,"90":0.29258,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.02217,"13":0.0266,"14":0.00887,"16":0.0133,"17":0.01773,"18":0.15516,"84":0.00887,"85":0.00443,"89":0.00443,"90":0.00887,"92":0.03103,"97":0.00887,"98":0.02217,"99":0.00887,"101":0.01773,"102":0.0266,"103":1.71557,"104":3.83011,_:"15 79 80 81 83 86 87 88 91 93 94 95 96 100 105"},E:{"4":0,_:"0 5 6 7 8 9 10 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 11.1 15.1 15.2-15.3 15.4","10.1":0.10639,"12.1":0.0133,"13.1":0.12412,"14.1":0.01773,"15.5":0.03103,"15.6":0.05763,"16.0":0.00443},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00749,"7.0-7.1":0.20223,"8.1-8.4":0,"9.0-9.2":0.00374,"9.3":0.02472,"10.0-10.2":0.0015,"10.3":0.31982,"11.0-11.2":0.02921,"11.3-11.4":0.01648,"12.0-12.1":0.06516,"12.2-12.5":2.41323,"13.0-13.1":0.00225,"13.2":0.00374,"13.3":0.00674,"13.4-13.7":0.08164,"14.0-14.4":0.28387,"14.5-14.8":0.33704,"15.0-15.1":0.23518,"15.2-15.3":0.22245,"15.4":0.22245,"15.5":1.11749,"15.6":1.6268,"16.0":0.26439},P:{"4":0.47581,"5.0-5.4":0.02115,"6.2-6.4":0.01057,"7.2-7.4":0.39122,"8.2":0,"9.2":0.01057,"10.1":0,"11.1-11.2":0.05039,"12.0":0.01008,"13.0":0.02115,"14.0":0.04031,"15.0":0.03023,"16.0":0.12688,"17.0":0.3595,"18.0":0.1586},I:{"0":0,"3":0,"4":0.00017,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00315,"4.2-4.3":0.01144,"4.4":0,"4.4.3-4.4.4":0.08545},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"11":0.03103,_:"6 7 8 9 10 5.5"},J:{"7":0,"10":0.00557},N:{"10":0,"11":0},L:{"0":52.34314},S:{"2.5":0.22268},R:{_:"0"},M:{"0":0.09464},Q:{"10.4":0.0167},O:{"0":0.62907},H:{"0":1.39668}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CH.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CH.js index 2c1098422ee..0c0776e22f1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CH.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CH.js @@ -1 +1 @@ -module.exports={C:{"24":0.01204,"48":0.01806,"50":0.01204,"52":0.04215,"55":0.00602,"57":0.01806,"60":0.01806,"66":0.01204,"68":0.01204,"78":0.16859,"79":0.00602,"80":0.00602,"81":0.00602,"84":0.02408,"85":0.03011,"86":0.00602,"87":0.00602,"88":0.07225,"89":0.01204,"90":0.02408,"91":0.39739,"92":0.01806,"93":0.00602,"94":0.51179,"95":0.09032,"96":2.36023,"97":3.73302,"98":0.01204,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 51 53 54 56 58 59 61 62 63 64 65 67 69 70 71 72 73 74 75 76 77 82 83 99 3.5 3.6"},D:{"38":0.01204,"49":0.04817,"52":0.1445,"60":0.03011,"63":0.00602,"64":0.01204,"65":0.02408,"66":0.04817,"67":0.02408,"68":0.02408,"69":0.00602,"70":0.01806,"71":0.00602,"72":0.03011,"73":0.01806,"74":0.01806,"75":0.01204,"76":0.01204,"77":0.01204,"78":0.03613,"79":0.12042,"80":0.07827,"81":0.03011,"83":0.04215,"84":0.09634,"85":0.07225,"86":0.06623,"87":0.18665,"88":0.05419,"89":0.06021,"90":0.04817,"91":0.09032,"92":0.07225,"93":0.22278,"94":0.10236,"95":0.1144,"96":1.01153,"97":7.16499,"98":15.7991,"99":0.01204,"100":0.01204,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 53 54 55 56 57 58 59 61 62 101"},F:{"77":0.01204,"82":0.30105,"83":0.95132,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.01806,"16":0.01806,"18":0.03613,"84":0.04817,"85":0.01204,"86":0.01806,"88":0.01204,"89":0.01806,"90":0.01806,"91":0.03613,"92":0.03011,"93":0.01204,"94":0.04817,"95":0.06021,"96":0.20471,"97":3.25134,"98":10.4645,_:"12 13 14 17 79 80 81 83 87"},E:{"4":0,"10":0.03011,"11":0.00602,"12":0.01204,"13":0.13246,"14":0.572,"15":0.3733,_:"0 5 6 7 8 9 3.1 3.2 5.1 6.1 7.1","9.1":0.02408,"10.1":0.04215,"11.1":0.09032,"12.1":0.23482,"13.1":0.85498,"14.1":2.0351,"15.1":0.93928,"15.2-15.3":2.25185,"15.4":0.02408},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00638,"8.1-8.4":0.00425,"9.0-9.2":0.08075,"9.3":0.14451,"10.0-10.2":0.00213,"10.3":0.11688,"11.0-11.2":0.02125,"11.3-11.4":0.08713,"12.0-12.1":0.03188,"12.2-12.5":0.53977,"13.0-13.1":0.034,"13.2":0.01488,"13.3":0.07863,"13.4-13.7":0.34214,"14.0-14.4":1.03066,"14.5-14.8":4.27991,"15.0-15.1":3.211,"15.2-15.3":11.15667,"15.4":0.05313},P:{"4":0.0847,_:"5.0-5.4 6.2-6.4 7.2-7.4 8.2 10.1 11.1-11.2","9.2":0.02117,"12.0":0.02117,"13.0":0.06352,"14.0":0.09528,"15.0":0.11646,"16.0":3.15492},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00519,"4.2-4.3":0.00519,"4.4":0,"4.4.3-4.4.4":0.03338},A:{"9":0.03011,"11":0.43953,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.5491},Q:{"10.4":0.00796},O:{"0":0.11141},H:{"0":0.22602},L:{"0":13.91426},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00709,"49":0,"50":0,"51":0,"52":0.01417,"53":0,"54":0.00709,"55":0.00709,"56":0,"57":0.00709,"58":0,"59":0,"60":0.00709,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00709,"69":0,"70":0,"71":0.01417,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.06377,"79":0.00709,"80":0.00709,"81":0.00709,"82":0,"83":0.00709,"84":0.00709,"85":0,"86":0,"87":0,"88":0.00709,"89":0.00709,"90":0.00709,"91":0.15587,"92":0,"93":0,"94":0.00709,"95":0.00709,"96":0.00709,"97":0.00709,"98":0.00709,"99":0.00709,"100":0.02126,"101":0.03543,"102":0.12753,"103":2.62145,"104":0.46761,"105":0.00709,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00709,"39":0,"40":0,"41":0.00709,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02126,"50":0,"51":0,"52":0.1417,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00709,"66":0.0496,"67":0,"68":0.00709,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0.00709,"75":0.00709,"76":0.01417,"77":0.00709,"78":0.01417,"79":0.12045,"80":0.01417,"81":0.01417,"83":0.02834,"84":0.05668,"85":0.0496,"86":0.05668,"87":0.12045,"88":0.01417,"89":0.02834,"90":0.01417,"91":0.02126,"92":0.06377,"93":0.02126,"94":0.01417,"95":0.00709,"96":0.21255,"97":0.0496,"98":0.03543,"99":0.0496,"100":0.09211,"101":0.14879,"102":0.36842,"103":6.61031,"104":21.26917,"105":0.06377,"106":0.00709,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00709,"64":0.00709,"65":0,"66":0,"67":0,"68":0,"69":0.00709,"70":0,"71":0.00709,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01417,"89":0.48178,"90":0.05668,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.02834,"79":0,"80":0,"81":0,"83":0.00709,"84":0.01417,"85":0.00709,"86":0,"87":0,"88":0.00709,"89":0.00709,"90":0.00709,"91":0.01417,"92":0.01417,"93":0,"94":0.00709,"95":0.00709,"96":0.01417,"97":0.03543,"98":0.02126,"99":0.02834,"100":0.02834,"101":0.06377,"102":0.09211,"103":3.33704,"104":6.95747,"105":0.00709},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00709,"13":0.02834,"14":0.13462,"15":0.04251,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.01417,"10.1":0.01417,"11.1":0.03543,"12.1":0.06377,"13.1":0.29757,"14.1":0.40385,"15.1":0.06377,"15.2-15.3":0.07794,"15.4":0.23381,"15.5":0.82895,"15.6":1.68623,"16.0":0.01417},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01556,"8.1-8.4":0.00259,"9.0-9.2":0.33707,"9.3":0.12964,"10.0-10.2":0.00519,"10.3":0.11927,"11.0-11.2":0.03371,"11.3-11.4":0.12186,"12.0-12.1":0.03111,"12.2-12.5":0.5082,"13.0-13.1":0.02074,"13.2":0.01556,"13.3":0.04926,"13.4-13.7":0.17631,"14.0-14.4":0.5445,"14.5-14.8":1.53756,"15.0-15.1":0.43301,"15.2-15.3":0.7234,"15.4":1.1227,"15.5":6.82696,"15.6":12.98238,"16.0":0.17372},P:{"4":0.12398,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0.01033,"10.1":0.01033,"11.1-11.2":0,"12.0":0.02066,"13.0":0.03099,"14.0":0.03099,"15.0":0.02066,"16.0":0.06199,"17.0":1.03313,"18.0":1.58068},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02013,"4.2-4.3":0.00671,"4.4":0,"4.4.3-4.4.4":0.04025},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00741,"9":0.00741,"10":0,"11":0.14814,"5.5":0},J:{"7":0,"10":0.00292},N:{"10":0,"11":0},L:{"0":18.65346},S:{"2.5":0},R:{_:"0"},M:{"0":0.48098},Q:{"10.4":0},O:{"0":0.03498},H:{"0":0.1573}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CI.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CI.js index db8ee212455..72a61e6ca98 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CI.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CI.js @@ -1 +1 @@ -module.exports={C:{"38":0.00303,"41":0.00606,"43":0.00303,"47":0.00606,"52":0.04239,"56":0.00303,"60":0.00908,"67":0.00303,"68":0.01211,"70":0.00908,"71":0.00303,"72":0.0212,"75":0.00303,"78":0.01514,"81":0.00303,"82":0.00303,"83":0.00303,"84":0.00606,"88":0.00303,"89":0.01211,"91":0.04542,"92":0.00303,"93":0.00908,"94":0.01514,"95":0.03331,"96":0.84178,"97":1.62301,"98":0.01817,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 42 44 45 46 48 49 50 51 53 54 55 57 58 59 61 62 63 64 65 66 69 73 74 76 77 79 80 85 86 87 90 99 3.5 3.6"},D:{"11":0.07267,"38":0.00606,"40":0.01514,"42":0.00303,"49":0.02422,"50":0.00303,"56":0.00303,"58":0.00303,"61":0.00303,"62":0.00303,"63":0.00908,"65":0.00606,"66":0.05148,"67":0.01211,"69":0.00908,"70":0.03331,"71":0.00606,"72":0.00908,"73":0.00908,"74":0.0757,"75":0.03028,"76":0.0212,"77":0.0212,"78":0.05753,"79":0.05148,"80":0.04542,"81":0.04239,"83":0.03028,"84":0.05148,"85":0.03634,"86":0.07267,"87":0.14534,"88":0.03634,"89":0.08781,"90":0.07873,"91":0.09387,"92":0.20893,"93":0.10901,"94":0.12112,"95":0.17865,"96":0.69947,"97":5.18091,"98":11.83342,"99":0.03634,"100":0.03331,"101":0.00606,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 41 43 44 45 46 47 48 51 52 53 54 55 57 59 60 64 68"},F:{"70":0.01514,"79":0.00303,"80":0.01211,"81":0.00908,"82":0.08478,"83":0.62074,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.06056,"13":0.00606,"14":0.00606,"15":0.00606,"17":0.00606,"18":0.03028,"84":0.00606,"85":0.00606,"89":0.01211,"90":0.00303,"92":0.01514,"93":0.00606,"94":0.00606,"95":0.01211,"96":0.02725,"97":0.44814,"98":1.53217,_:"16 79 80 81 83 86 87 88 91"},E:{"4":0,"13":0.00606,"14":0.06359,"15":0.02422,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1","9.1":0.00606,"10.1":0.00303,"11.1":0.00908,"12.1":0.01211,"13.1":0.03634,"14.1":0.08781,"15.1":0.06056,"15.2-15.3":0.08781,"15.4":0.00303},G:{"8":0.00142,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00142,"6.0-6.1":0,"7.0-7.1":0.01705,"8.1-8.4":0,"9.0-9.2":0.00142,"9.3":0.15486,"10.0-10.2":0,"10.3":0.19322,"11.0-11.2":0.50295,"11.3-11.4":0.11224,"12.0-12.1":0.05825,"12.2-12.5":4.07049,"13.0-13.1":0.03268,"13.2":0.01279,"13.3":0.12361,"13.4-13.7":0.37224,"14.0-14.4":1.43923,"14.5-14.8":1.86688,"15.0-15.1":1.87115,"15.2-15.3":3.28765,"15.4":0.0824},P:{"4":0.14791,"5.0-5.4":0.01056,"6.2-6.4":0.01056,"7.2-7.4":0.16904,"8.2":0.01049,"9.2":0.09508,"10.1":0.02035,"11.1-11.2":0.10565,"12.0":0.02113,"13.0":0.04226,"14.0":0.1796,"15.0":0.16904,"16.0":0.77124},I:{"0":0,"3":0,"4":0.00338,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00725,"4.2-4.3":0.00145,"4.4":0,"4.4.3-4.4.4":0.03672},A:{"11":0.06056,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.01394},N:{_:"10 11"},R:{_:"0"},M:{"0":0.1255},Q:{"10.4":0.01394},O:{"0":0.2231},H:{"0":1.27392},L:{"0":55.51518},S:{"2.5":0.01394}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0.00358,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00358,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.03933,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00358,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00358,"67":0.00358,"68":0.00358,"69":0,"70":0.00358,"71":0.00358,"72":0.01073,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00358,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.01073,"85":0,"86":0,"87":0,"88":0.00358,"89":0.00358,"90":0,"91":0.0143,"92":0.00358,"93":0.00358,"94":0.00358,"95":0.00715,"96":0.00358,"97":0.00715,"98":0.00358,"99":0.00358,"100":0.01788,"101":0.0143,"102":0.05363,"103":0.84728,"104":0.12513,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00358,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00715,"50":0,"51":0,"52":0,"53":0.00358,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00358,"61":0.00358,"62":0.00358,"63":0.00715,"64":0.00358,"65":0.00358,"66":0.01073,"67":0.00358,"68":0.00358,"69":0.00358,"70":0.00715,"71":0.00358,"72":0.00715,"73":0.00715,"74":0.03218,"75":0,"76":0.01073,"77":0.00715,"78":0.0143,"79":0.01788,"80":0.01073,"81":0.02145,"83":0.00715,"84":0.0143,"85":0.00358,"86":0.01788,"87":0.17518,"88":0.00715,"89":0.03218,"90":0.01788,"91":0.0143,"92":0.03218,"93":0.02145,"94":0.01788,"95":0.0143,"96":0.0572,"97":0.02145,"98":0.03575,"99":0.0429,"100":0.06435,"101":0.05005,"102":0.10368,"103":1.96983,"104":4.73688,"105":0.0143,"106":0.00358,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00358,"51":0,"52":0,"53":0,"54":0.00358,"55":0,"56":0,"57":0,"58":0.00358,"60":0.0286,"62":0,"63":0.1573,"64":0.04648,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.00358,"77":0,"78":0,"79":0.01073,"80":0,"81":0,"82":0.00358,"83":0,"84":0.00358,"85":0.00715,"86":0.00358,"87":0.00358,"88":0.00715,"89":0.3146,"90":0.0286,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00358,"13":0.00358,"14":0.00358,"15":0.0286,"16":0,"17":0.00358,"18":0.01073,"79":0,"80":0,"81":0,"83":0,"84":0.00715,"85":0,"86":0,"87":0,"88":0,"89":0.00358,"90":0.00358,"91":0,"92":0.00715,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00358,"100":0.00358,"101":0.00715,"102":0.01073,"103":0.25383,"104":0.60418,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01788,"14":0.00715,"15":0.00358,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00358,"12.1":0.01073,"13.1":0.01788,"14.1":0.01788,"15.1":0.00358,"15.2-15.3":0,"15.4":0.00715,"15.5":0.0286,"15.6":0.04648,"16.0":0.00358},G:{"8":0.00929,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00186,"6.0-6.1":0,"7.0-7.1":0.01486,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03158,"10.0-10.2":0,"10.3":0.19506,"11.0-11.2":0.35853,"11.3-11.4":0.07617,"12.0-12.1":0.21549,"12.2-12.5":5.18854,"13.0-13.1":0.03901,"13.2":0.10032,"13.3":0.29166,"13.4-13.7":0.3734,"14.0-14.4":1.0143,"14.5-14.8":1.18707,"15.0-15.1":0.83596,"15.2-15.3":0.97715,"15.4":0.93256,"15.5":2.87571,"15.6":3.19152,"16.0":0.6632},P:{"4":0.07056,"5.0-5.4":0.02016,"6.2-6.4":0.01008,"7.2-7.4":0.20161,"8.2":0,"9.2":0.06048,"10.1":0,"11.1-11.2":0.07056,"12.0":0.01008,"13.0":0.02016,"14.0":0.07056,"15.0":0.0504,"16.0":0.12097,"17.0":0.625,"18.0":0.42339},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00666,"4.2-4.3":0.00778,"4.4":0,"4.4.3-4.4.4":0.11774},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01073,"5.5":0},J:{"7":0,"10":0.01285},N:{"10":0,"11":0},L:{"0":65.1265},S:{"2.5":0.00643},R:{_:"0"},M:{"0":0.35338},Q:{"10.4":0.00643},O:{"0":0.30198},H:{"0":1.55111}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CK.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CK.js index d4aee6475ac..f72952423a3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CK.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CK.js @@ -1 +1 @@ -module.exports={C:{"65":0.11824,"78":0.02056,"84":0.00514,"89":0.02571,"94":0.00514,"96":1.48061,"97":1.2544,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 87 88 90 91 92 93 95 98 99 3.5 3.6"},D:{"49":1.63998,"77":0.02056,"79":3.69124,"81":0.01542,"86":0.00514,"89":0.05141,"92":0.27761,"94":0.06169,"95":0.30846,"96":0.21078,"97":6.40055,"98":30.59923,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 80 83 84 85 87 88 90 91 93 99 100 101"},F:{"82":0.00514,"83":0.22106,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00514,"18":0.09254,"85":0.01028,"94":0.60664,"95":0.00514,"97":0.42156,"98":1.52688,_:"12 13 15 16 17 79 80 81 83 84 86 87 88 89 90 91 92 93 96"},E:{"4":0,"13":0.04113,"14":0.37015,"15":0.02056,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.01028,"12.1":0.01028,"13.1":0.15423,"14.1":0.32388,"15.1":0.18508,"15.2-15.3":0.22106},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00176,"10.0-10.2":0,"10.3":0.03524,"11.0-11.2":0.00529,"11.3-11.4":0.00176,"12.0-12.1":0.01938,"12.2-12.5":0.53561,"13.0-13.1":0.04405,"13.2":0.01938,"13.3":0.08633,"13.4-13.7":0.30304,"14.0-14.4":1.52225,"14.5-14.8":3.65939,"15.0-15.1":3.64882,"15.2-15.3":7.70639,"15.4":0.02643},P:{"4":0.03052,"5.0-5.4":0.02123,"6.2-6.4":0.04033,"7.2-7.4":0.28489,"8.2":0.01049,"9.2":0.03212,"10.1":0.02035,"11.1-11.2":0.18314,"12.0":0.02141,"13.0":0.16279,"14.0":0.17297,"15.0":0.0814,"16.0":3.05236},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.05344},A:{"10":0.17479,"11":0.10796,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.14088},Q:{"10.4":0},O:{"0":0.08744},H:{"0":0.0138},L:{"0":26.72829},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.004,"48":0,"49":0,"50":0,"51":0,"52":0.004,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00801,"89":0.00801,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.004,"98":0,"99":0,"100":0.004,"101":0.01201,"102":0.07205,"103":0.45234,"104":0.07606,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.03603,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.03603,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.004,"77":0,"78":0,"79":1.6012,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0.00801,"88":0,"89":0.004,"90":0,"91":0,"92":0,"93":0,"94":0.00801,"95":0,"96":0,"97":0,"98":0,"99":0.04003,"100":0,"101":0.01601,"102":0.02802,"103":3.51063,"104":7.75781,"105":0.03202,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.004,"89":0.004,"90":0.004,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.004,"18":0.01601,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.004,"101":0,"102":0.004,"103":0.20816,"104":0.47235,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.004,"14":0.04804,"15":0.1321,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.004,"13.1":0.09607,"14.1":0.14411,"15.1":0.00801,"15.2-15.3":0.004,"15.4":0.04003,"15.5":0.27621,"15.6":0.43232,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0.00664,"11.0-11.2":0,"11.3-11.4":0.03983,"12.0-12.1":0.00332,"12.2-12.5":0.64067,"13.0-13.1":0.05643,"13.2":0,"13.3":0.0166,"13.4-13.7":0.07303,"14.0-14.4":1.3245,"14.5-14.8":2.95107,"15.0-15.1":0.88632,"15.2-15.3":1.51039,"15.4":2.09131,"15.5":8.92624,"15.6":14.65244,"16.0":0.01328},P:{"4":0.03038,"5.0-5.4":0,"6.2-6.4":0.01013,"7.2-7.4":0.08102,"8.2":0,"9.2":0.02025,"10.1":0,"11.1-11.2":0.13165,"12.0":0.02025,"13.0":0.1114,"14.0":0.13165,"15.0":0.1114,"16.0":0.30381,"17.0":2.09629,"18.0":2.31909},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.46997},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.10808,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":41.80551},S:{"2.5":0},R:{_:"0"},M:{"0":0.31784},Q:{"10.4":0},O:{"0":0.50375},H:{"0":0.07381}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CL.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CL.js index 6645e2495dd..0fcf584c060 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CL.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CL.js @@ -1 +1 @@ -module.exports={C:{"52":0.01973,"67":0.00395,"73":0.00395,"78":0.01973,"81":0.00395,"84":0.00789,"88":0.00395,"90":0.01184,"91":0.01578,"94":0.00789,"95":0.01973,"96":0.5168,"97":0.85212,"98":0.00789,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 68 69 70 71 72 74 75 76 77 79 80 82 83 85 86 87 89 92 93 99 3.5 3.6"},D:{"22":0.00395,"38":0.03551,"39":0.00395,"47":0.01184,"48":0.00789,"49":0.05523,"53":0.01184,"56":0.01184,"63":0.00395,"65":0.00395,"67":0.00789,"68":0.00789,"69":0.13019,"70":0.00395,"72":0.00789,"74":0.00789,"75":0.00789,"76":0.00789,"77":0.01578,"78":0.00789,"79":0.13808,"80":0.01578,"81":0.00789,"83":0.01973,"84":0.02762,"85":0.03156,"86":0.02762,"87":0.08679,"88":0.01184,"89":0.11046,"90":0.01973,"91":0.08679,"92":0.06707,"93":0.0789,"94":0.03945,"95":0.05523,"96":0.47735,"97":7.92156,"98":18.89655,"99":0.00789,"100":0.00789,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 40 41 42 43 44 45 46 50 51 52 54 55 57 58 59 60 61 62 64 66 71 73 101"},F:{"36":0.00789,"80":0.00395,"81":0.00789,"82":1.20717,"83":2.9627,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01184,"84":0.00395,"90":0.01184,"92":0.00789,"94":0.00395,"95":0.01578,"96":0.03156,"97":0.54441,"98":1.93305,_:"12 13 14 15 16 17 79 80 81 83 85 86 87 88 89 91 93"},E:{"4":0,"13":0.0434,"14":0.07101,"15":0.06707,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00789,"12.1":0.01973,"13.1":0.1223,"14.1":0.33138,"15.1":0.14202,"15.2-15.3":0.29588},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00553,"6.0-6.1":0.00158,"7.0-7.1":0.00079,"8.1-8.4":0.00158,"9.0-9.2":0,"9.3":0.03869,"10.0-10.2":0.00079,"10.3":0.01816,"11.0-11.2":0.00474,"11.3-11.4":0.01184,"12.0-12.1":0.01184,"12.2-12.5":0.30242,"13.0-13.1":0.01184,"13.2":0.00553,"13.3":0.04027,"13.4-13.7":0.13344,"14.0-14.4":0.38611,"14.5-14.8":1.82081,"15.0-15.1":1.20256,"15.2-15.3":3.86587,"15.4":0.02527},P:{"4":0.1951,"5.0-5.4":0.0504,"6.2-6.4":0.04032,"7.2-7.4":0.07188,"8.2":0.01049,"9.2":0.03081,"10.1":0.04032,"11.1-11.2":0.12322,"12.0":0.02054,"13.0":0.11295,"14.0":0.16429,"15.0":0.11295,"16.0":1.3965},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00227,"4.2-4.3":0.00303,"4.4":0,"4.4.3-4.4.4":0.02498},A:{"8":0.01616,"9":0.00404,"10":0.00404,"11":0.1454,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.1756},Q:{"10.4":0},O:{"0":0.02422},H:{"0":0.18917},L:{"0":47.94809},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00429,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00429,"74":0,"75":0,"76":0,"77":0,"78":0.00857,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00429,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.01714,"91":0.00857,"92":0,"93":0,"94":0.00857,"95":0.00429,"96":0,"97":0,"98":0.00429,"99":0.00857,"100":0.00429,"101":0.00857,"102":0.02143,"103":0.54432,"104":0.10715,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00857,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00429,"49":0.01714,"50":0,"51":0,"52":0,"53":0.00429,"54":0,"55":0,"56":0.00429,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00429,"66":0,"67":0.00857,"68":0.00429,"69":0.03429,"70":0.00429,"71":0,"72":0,"73":0,"74":0.00857,"75":0,"76":0.00429,"77":0.00429,"78":0.00429,"79":0.03857,"80":0.00429,"81":0.00857,"83":0.00857,"84":0.01714,"85":0.01286,"86":0.02143,"87":0.04715,"88":0.00857,"89":0.00857,"90":0.00857,"91":0.01286,"92":0.02572,"93":0.00429,"94":0.00429,"95":0.00857,"96":0.02143,"97":0.01714,"98":0.02143,"99":0.07286,"100":0.06429,"101":0.03857,"102":0.09858,"103":3.24022,"104":8.85488,"105":0.03,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00429,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00857,"86":0,"87":0,"88":0.01714,"89":1.5601,"90":0.07715,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00429,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00429,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00429,"99":0.00429,"100":0.00429,"101":0.01714,"102":0.00429,"103":0.33002,"104":0.96435,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00857,"14":0.02143,"15":0.00857,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00429,"10.1":0,"11.1":0.00429,"12.1":0.00857,"13.1":0.03857,"14.1":0.09001,"15.1":0.01714,"15.2-15.3":0.01714,"15.4":0.04286,"15.5":0.1543,"15.6":0.23573,"16.0":0.00429},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00491,"6.0-6.1":0.00491,"7.0-7.1":0.00246,"8.1-8.4":0.00123,"9.0-9.2":0,"9.3":0.05526,"10.0-10.2":0.00246,"10.3":0.02701,"11.0-11.2":0.0086,"11.3-11.4":0.00982,"12.0-12.1":0.01965,"12.2-12.5":0.31804,"13.0-13.1":0.0086,"13.2":0.00982,"13.3":0.03193,"13.4-13.7":0.12157,"14.0-14.4":0.27752,"14.5-14.8":0.8522,"15.0-15.1":0.14735,"15.2-15.3":0.30576,"15.4":0.46908,"15.5":2.72359,"15.6":6.75986,"16.0":0.10683},P:{"4":0.08232,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.05145,"8.2":0,"9.2":0.01029,"10.1":0,"11.1-11.2":0.08232,"12.0":0.01029,"13.0":0.05145,"14.0":0.09262,"15.0":0.04116,"16.0":0.1132,"17.0":0.72034,"18.0":0.91586},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01029,"4.4":0,"4.4.3-4.4.4":0.07972},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00902,"9":0.00451,"10":0.00451,"11":0.06767,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":66.39188},S:{"2.5":0},R:{_:"0"},M:{"0":0.18856},Q:{"10.4":0},O:{"0":0.02857},H:{"0":0.19475}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CM.js index f363752786c..a235d2f14f0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CM.js @@ -1 +1 @@ -module.exports={C:{"4":0.00705,"28":0.00235,"31":0.00235,"32":0.00235,"33":0.00235,"34":0.0047,"35":0.00235,"36":0.00235,"37":0.0047,"38":0.00705,"39":0.0047,"40":0.0094,"41":0.0047,"42":0.0047,"43":0.0094,"47":0.00705,"48":0.00235,"49":0.00235,"50":0.0094,"51":0.0094,"52":0.11515,"56":0.00705,"58":0.0047,"60":0.0047,"62":0.01175,"64":0.0047,"66":0.00705,"67":0.0047,"68":0.00235,"69":0.0047,"70":0.00235,"72":0.01645,"73":0.00235,"78":0.0235,"79":0.0047,"80":0.00235,"81":0.0047,"82":0.00235,"84":0.01175,"85":0.00235,"86":0.00235,"87":0.00235,"88":0.0094,"89":0.0141,"90":0.00705,"91":0.0376,"92":0.0047,"93":0.0047,"94":0.0235,"95":0.0564,"96":0.9353,"97":1.37005,"98":0.0282,_:"2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 44 45 46 53 54 55 57 59 61 63 65 71 74 75 76 77 83 99 3.5 3.6"},D:{"31":0.0047,"33":0.0047,"34":0.00235,"36":0.00235,"37":0.0047,"38":0.01175,"39":0.0047,"40":0.00705,"41":0.0047,"42":0.0094,"43":0.02585,"44":0.02585,"45":0.01175,"46":0.0047,"47":0.00235,"49":0.0141,"50":0.00235,"53":0.0329,"55":0.00235,"56":0.0564,"57":0.0047,"58":0.00705,"61":0.0047,"63":0.00705,"64":0.00235,"65":0.0047,"66":0.00235,"68":0.0611,"69":0.00705,"70":0.0094,"71":0.00235,"74":0.00705,"75":0.01645,"76":0.02585,"77":0.00705,"78":0.0047,"79":0.03995,"80":0.0141,"81":0.01645,"83":0.03995,"84":0.00705,"85":0.0094,"86":0.0846,"87":0.0423,"88":0.0376,"89":0.0282,"90":0.0705,"91":0.0658,"92":0.04465,"93":0.05405,"94":0.0376,"95":0.06815,"96":0.4183,"97":2.9845,"98":5.8186,"99":0.0047,"100":0.01175,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 35 48 51 52 54 59 60 62 67 72 73 101"},F:{"38":0.0047,"42":0.00235,"44":0.00235,"67":0.00705,"79":0.0141,"80":0.00235,"82":0.1269,"83":0.79665,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 43 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.03055,"13":0.0141,"14":0.0329,"15":0.02115,"16":0.0141,"17":0.0141,"18":0.0517,"81":0.00235,"84":0.0329,"85":0.0141,"88":0.0141,"89":0.02115,"90":0.0141,"91":0.0047,"92":0.02115,"93":0.0094,"94":0.0047,"95":0.0188,"96":0.0376,"97":0.3713,"98":0.83425,_:"79 80 83 86 87"},E:{"4":0,"8":0.0047,"10":0.0094,"13":0.00705,"14":0.03055,"15":0.0047,_:"0 5 6 7 9 11 12 3.1 3.2 6.1 9.1 10.1 12.1 15.4","5.1":0.00705,"7.1":0.00705,"11.1":0.00705,"13.1":0.01175,"14.1":0.03055,"15.1":0.01645,"15.2-15.3":0.03055},G:{"8":0.00158,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00079,"6.0-6.1":0.00317,"7.0-7.1":0.01109,"8.1-8.4":0.01426,"9.0-9.2":0.00079,"9.3":0.03564,"10.0-10.2":0.01663,"10.3":0.07763,"11.0-11.2":0.25822,"11.3-11.4":0.04594,"12.0-12.1":0.39288,"12.2-12.5":1.9636,"13.0-13.1":0.07446,"13.2":0.05069,"13.3":0.19802,"13.4-13.7":0.49664,"14.0-14.4":1.39646,"14.5-14.8":1.21903,"15.0-15.1":0.91803,"15.2-15.3":0.73744,"15.4":0.00475},P:{"4":0.42401,"5.0-5.4":0.03103,"6.2-6.4":0.01048,"7.2-7.4":0.09308,"8.2":0.01077,"9.2":0.08273,"10.1":0.06074,"11.1-11.2":0.06205,"12.0":0.01034,"13.0":0.07239,"14.0":0.14478,"15.0":0.18615,"16.0":0.56879},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00163,"4.2-4.3":0.00476,"4.4":0,"4.4.3-4.4.4":0.04716},A:{"8":0.00961,"9":0.0024,"10":0.00721,"11":0.30744,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.0153},N:{_:"10 11"},R:{_:"0"},M:{"0":0.8262},Q:{"10.4":0.00765},O:{"0":0.80325},H:{"0":3.75163},L:{"0":67.96},S:{"2.5":0.0459}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00285,"37":0.00285,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00285,"44":0,"45":0,"46":0,"47":0.00285,"48":0,"49":0.00285,"50":0.00285,"51":0.00285,"52":0.01711,"53":0,"54":0,"55":0,"56":0.00285,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00285,"69":0,"70":0.02282,"71":0,"72":0.00856,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00285,"79":0,"80":0,"81":0.00285,"82":0.00285,"83":0,"84":0.00285,"85":0,"86":0.00285,"87":0,"88":0.00285,"89":0.00285,"90":0,"91":0.01996,"92":0,"93":0.00285,"94":0.00285,"95":0.00856,"96":0.00856,"97":0.00285,"98":0.0057,"99":0.02852,"100":0.0057,"101":0.01711,"102":0.10267,"103":0.73582,"104":0.077,"105":0.0057,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0.0057,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0.01141,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00285,"39":0,"40":0.0057,"41":0,"42":0.00285,"43":0.00285,"44":0.00285,"45":0,"46":0,"47":0,"48":0,"49":0.00285,"50":0.00285,"51":0,"52":0,"53":0,"54":0,"55":0.00285,"56":0.01141,"57":0.00285,"58":0.00285,"59":0,"60":0.00285,"61":0,"62":0,"63":0,"64":0.00285,"65":0,"66":0,"67":0,"68":0.01426,"69":0.00285,"70":0.00285,"71":0,"72":0.0057,"73":0.00285,"74":0.0057,"75":0.00285,"76":0.00285,"77":0.0057,"78":0,"79":0.00856,"80":0.00856,"81":0.01426,"83":0.00285,"84":0.00285,"85":0.03137,"86":0.00856,"87":0.00856,"88":0.0057,"89":0.0057,"90":0.01426,"91":0.0057,"92":0.0057,"93":0.0057,"94":0.00856,"95":0.01996,"96":0.01141,"97":0.01711,"98":0.01996,"99":0.00856,"100":0.02282,"101":0.01996,"102":0.05704,"103":0.90408,"104":1.95077,"105":0.0057,"106":0.00285,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0.00285,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00285,"38":0,"39":0,"40":0,"41":0,"42":0.0057,"43":0,"44":0,"45":0,"46":0.00285,"47":0,"48":0,"49":0,"50":0.00285,"51":0.00285,"52":0,"53":0,"54":0,"55":0.01711,"56":0,"57":0.0057,"58":0.02282,"60":0.08556,"62":0.00285,"63":0.1369,"64":0.06845,"65":0,"66":0,"67":0.00285,"68":0,"69":0,"70":0.00285,"71":0.0057,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.01426,"80":0,"81":0.00285,"82":0,"83":0.00285,"84":0.00285,"85":0.00856,"86":0.00285,"87":0.00285,"88":0.0057,"89":0.26238,"90":0.02282,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00285},B:{"12":0.00856,"13":0.00285,"14":0.01711,"15":0.00856,"16":0.00285,"17":0.0057,"18":0.01426,"79":0,"80":0,"81":0,"83":0,"84":0.00285,"85":0.00285,"86":0,"87":0,"88":0,"89":0.00285,"90":0.00285,"91":0,"92":0.01141,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.0057,"99":0.00285,"100":0.00856,"101":0.0057,"102":0.0057,"103":0.1369,"104":0.29376,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0.00285,"11":0,"12":0,"13":0.00285,"14":0.00285,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.0057,"14.1":0.00285,"15.1":0.00856,"15.2-15.3":0.00285,"15.4":0.0057,"15.5":0.0057,"15.6":0.01141,"16.0":0},G:{"8":0.00339,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00226,"6.0-6.1":0.01016,"7.0-7.1":0.01128,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.08689,"10.0-10.2":0.02257,"10.3":0.67708,"11.0-11.2":0.19748,"11.3-11.4":0.08463,"12.0-12.1":0.24262,"12.2-12.5":2.52663,"13.0-13.1":0.04062,"13.2":0.18394,"13.3":0.33177,"13.4-13.7":0.40963,"14.0-14.4":1.04157,"14.5-14.8":1.19279,"15.0-15.1":0.83281,"15.2-15.3":0.82942,"15.4":0.47621,"15.5":1.1815,"15.6":0.81701,"16.0":0.08012},P:{"4":0.28537,"5.0-5.4":0.02038,"6.2-6.4":0.01019,"7.2-7.4":0.09172,"8.2":0.06115,"9.2":0.07134,"10.1":0,"11.1-11.2":0.06115,"12.0":0.02038,"13.0":0.04077,"14.0":0.1223,"15.0":0.02038,"16.0":0.10192,"17.0":0.44843,"18.0":0.22422},I:{"0":0,"3":0,"4":0.00092,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00322,"4.2-4.3":0.01196,"4.4":0,"4.4.3-4.4.4":0.12098},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04848,"5.5":0},J:{"7":0,"10":0.04289},N:{"10":0,"11":0},L:{"0":74.38023},S:{"2.5":0.02859},R:{_:"0"},M:{"0":0.40744},Q:{"10.4":0.00715},O:{"0":0.84346},H:{"0":3.64756}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CN.js index 98f224a86ef..bb3cda63e54 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CN.js @@ -1 +1 @@ -module.exports={C:{"4":0.00328,"36":0.03609,"43":1.34521,"52":0.02625,"53":0.00328,"54":0.00328,"55":0.00328,"56":0.00656,"57":0.00656,"59":0.00328,"63":0.01312,"68":0.00328,"72":0.00984,"75":0.05578,"78":0.01641,"80":0.00656,"81":0.00656,"82":0.00984,"83":0.00656,"84":0.00656,"86":0.00328,"87":0.00984,"88":0.00328,"89":0.01312,"90":0.01641,"91":0.01969,"92":0.00328,"93":0.00328,"94":0.01641,"95":0.02625,"96":0.34122,"97":0.52496,_:"2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 44 45 46 47 48 49 50 51 58 60 61 62 64 65 66 67 69 70 71 73 74 76 77 79 85 98 99 3.5 3.6"},D:{"11":0.00984,"17":0.00656,"31":0.00656,"39":0.00984,"40":0.00984,"41":0.00984,"42":0.00984,"43":0.00984,"44":0.00656,"45":0.01641,"46":0.00656,"47":0.01969,"48":0.08859,"49":0.09187,"50":0.00984,"51":0.00656,"52":0.00656,"53":0.01969,"54":0.01969,"55":0.05578,"56":0.01641,"57":0.11155,"58":0.01641,"59":0.01641,"60":0.00656,"61":0.00656,"62":0.13452,"63":0.04593,"64":0.00656,"65":0.04593,"66":0.00656,"67":0.02297,"68":0.01969,"69":1.02367,"70":0.60699,"71":0.01969,"72":0.58402,"73":0.04265,"74":0.32482,"75":0.29201,"76":0.01969,"77":0.01312,"78":0.23623,"79":0.22967,"80":0.11812,"81":0.08203,"83":0.21327,"84":0.18374,"85":0.10499,"86":0.26576,"87":0.14436,"88":0.10171,"89":0.03609,"90":0.0525,"91":0.06562,"92":0.34779,"93":0.03609,"94":0.11155,"95":0.19686,"96":0.60699,"97":1.68643,"98":2.63792,"100":0.00984,_:"4 5 6 7 8 9 10 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 36 37 38 99 101"},F:{"48":0.00328,"82":0.00656,"83":0.05906,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"13":0.00656,"14":0.00656,"16":0.01312,"17":0.02297,"18":0.11484,"83":0.00328,"84":0.00328,"85":0.00656,"86":0.00984,"87":0.00656,"89":0.01641,"90":0.00328,"92":0.01969,"93":0.00984,"94":0.00984,"95":0.01641,"96":0.05906,"97":0.7776,"98":3.23507,_:"12 15 79 80 81 88 91"},E:{"4":0,"9":0.00984,"10":0.00328,"11":0.00656,"12":0.00656,"13":0.03281,"14":0.10827,"15":0.04265,_:"0 5 6 7 8 3.1 3.2 5.1 6.1 7.1","9.1":0.00328,"10.1":0.00656,"11.1":0.01312,"12.1":0.02297,"13.1":0.13124,"14.1":0.18702,"15.1":0.09187,"15.2-15.3":0.20342,"15.4":0.00656},G:{"8":0.00097,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.05456,"5.0-5.1":0.01754,"6.0-6.1":0.03313,"7.0-7.1":0.01072,"8.1-8.4":0.01754,"9.0-9.2":0.08184,"9.3":0.04774,"10.0-10.2":0.39654,"10.3":0.15102,"11.0-11.2":0.7015,"11.3-11.4":0.07794,"12.0-12.1":0.10815,"12.2-12.5":0.37121,"13.0-13.1":0.04384,"13.2":0.02533,"13.3":0.13348,"13.4-13.7":0.80478,"14.0-14.4":1.15358,"14.5-14.8":1.3991,"15.0-15.1":1.14286,"15.2-15.3":2.92486,"15.4":0.04287},P:{_:"4 5.0-5.4 6.2-6.4 7.2-7.4 8.2 9.2 10.1 11.1-11.2 12.0 13.0","14.0":0.01137,"15.0":0.02274,"16.0":0.40928},I:{"0":0,"3":0,"4":0.11157,"2.1":0,"2.2":0,"2.3":0,"4.1":0.04057,"4.2-4.3":0.071,"4.4":0,"4.4.3-4.4.4":0.29414},A:{"6":0.08023,"8":0.48139,"9":0.48139,"10":0.16046,"11":8.70514,_:"7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.1881},Q:{"10.4":5.74389},O:{"0":11.73635},H:{"0":0.12084},L:{"0":38.69867},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.01923,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.28076,"44":0,"45":0.00769,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00769,"53":0,"54":0,"55":0,"56":0,"57":0.00385,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00385,"64":0,"65":0,"66":0,"67":0,"68":0.00385,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00769,"79":0.00385,"80":0.00385,"81":0.00385,"82":0.00385,"83":0.00385,"84":0,"85":0,"86":0,"87":0,"88":0.00385,"89":0.00385,"90":0.00769,"91":0.00769,"92":0,"93":0.00385,"94":0.00385,"95":0.00385,"96":0.00385,"97":0.00385,"98":0.00385,"99":0.00385,"100":0.00385,"101":0.00769,"102":0.03846,"103":0.34614,"104":0.04615,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00385,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0.00385,"32":0,"33":0,"34":0.00385,"35":0,"36":0,"37":0,"38":0,"39":0.00385,"40":0.00385,"41":0.00385,"42":0.00385,"43":0.00769,"44":0.00385,"45":0.00769,"46":0.00385,"47":0.00769,"48":0.05,"49":0.03461,"50":0.00385,"51":0.00385,"52":0.00385,"53":0.01154,"54":0.00769,"55":0.02692,"56":0.00769,"57":0.03461,"58":0.00385,"59":0.00769,"60":0.00385,"61":0.00385,"62":0.02308,"63":0.02308,"64":0,"65":0.01154,"66":0.00385,"67":0.00769,"68":0.00769,"69":0.58075,"70":0.26922,"71":0.00769,"72":0.31922,"73":0.04615,"74":0.2423,"75":0.04615,"76":0.01154,"77":0.03461,"78":0.1923,"79":0.10384,"80":0.04231,"81":0.04615,"83":0.08461,"84":0.04231,"85":0.03846,"86":0.16153,"87":0.0923,"88":0.02308,"89":0.01923,"90":0.03461,"91":0.01923,"92":0.21922,"93":0.00769,"94":0.02308,"95":0.03461,"96":0.10384,"97":0.11538,"98":0.07692,"99":0.06923,"100":0.08461,"101":0.06538,"102":0.0923,"103":0.6269,"104":1.08842,"105":0.01538,"106":0.00769,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00385,"86":0,"87":0,"88":0,"89":0.01538,"90":0.00385,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.00385,"17":0.00385,"18":0.03846,"79":0,"80":0,"81":0,"83":0,"84":0.00385,"85":0.00385,"86":0.00385,"87":0.00385,"88":0,"89":0.00385,"90":0.00385,"91":0,"92":0.01154,"93":0.00385,"94":0,"95":0.00385,"96":0.00385,"97":0.00385,"98":0.01154,"99":0.01154,"100":0.01538,"101":0.03461,"102":0.03077,"103":0.71536,"104":1.54225,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0.00385,"10":0,"11":0,"12":0,"13":0.01154,"14":0.03846,"15":0.00769,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00385,"12.1":0.00769,"13.1":0.03846,"14.1":0.04615,"15.1":0.01154,"15.2-15.3":0.01154,"15.4":0.04231,"15.5":0.10769,"15.6":0.16153,"16.0":0.00385},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.08208,"5.0-5.1":0.02592,"6.0-6.1":0.03744,"7.0-7.1":0.00864,"8.1-8.4":0.01728,"9.0-9.2":0.13391,"9.3":0.05184,"10.0-10.2":0.036,"10.3":0.23471,"11.0-11.2":0.61485,"11.3-11.4":0.09503,"12.0-12.1":0.16847,"12.2-12.5":0.44494,"13.0-13.1":0.05904,"13.2":0.03888,"13.3":0.15263,"13.4-13.7":0.91435,"14.0-14.4":1.22249,"14.5-14.8":1.31033,"15.0-15.1":0.7574,"15.2-15.3":0.91003,"15.4":1.44568,"15.5":1.97845,"15.6":3.58396,"16.0":0.07344},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0.12067,"15.0":0,"16.0":0.02194,"17.0":0.35105,"18.0":0.01097},I:{"0":0,"3":0,"4":0.02252,"2.1":0,"2.2":0,"2.3":0,"4.1":0.2365,"4.2-4.3":0.07883,"4.4":0,"4.4.3-4.4.4":0.38291},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0.03295,"7":0,"8":0.16476,"9":0.56019,"10":0.03295,"11":3.32821,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":44.79493},S:{"2.5":0},R:{_:"0"},M:{"0":0.17231},Q:{"10.4":4.86166},O:{"0":12.29569},H:{"0":0.1107}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CO.js index 71cbc202be8..bd03ce4ffd0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CO.js @@ -1 +1 @@ -module.exports={C:{"50":0.00817,"52":0.01226,"78":0.01635,"84":0.00409,"88":0.01226,"89":0.00409,"90":0.02044,"91":0.02452,"93":0.00409,"94":0.00817,"95":0.02044,"96":0.39235,"97":0.64983,"98":0.00817,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 87 92 99 3.5 3.6"},D:{"22":0.00409,"26":0.00409,"38":0.01635,"39":0.00409,"47":0.00817,"49":0.0327,"53":0.00409,"58":0.00817,"62":0.00817,"63":0.00409,"65":0.00817,"67":0.00817,"68":0.00409,"69":0.01226,"70":0.00817,"71":0.00817,"72":0.00817,"73":0.00409,"74":0.00817,"75":0.00817,"76":0.01635,"77":0.00817,"78":0.00817,"79":0.11852,"80":0.02452,"81":0.02044,"83":0.02861,"84":0.02861,"85":0.02044,"86":0.04496,"87":0.13487,"88":0.03678,"89":0.04904,"90":0.02861,"91":0.1267,"92":0.08583,"93":0.11852,"94":0.06131,"95":0.07765,"96":0.47818,"97":8.56635,"98":21.62023,"99":0.00817,"100":0.01226,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 30 31 32 33 34 35 36 37 40 41 42 43 44 45 46 48 50 51 52 54 55 56 57 59 60 61 64 66 101"},F:{"81":0.00409,"82":0.47818,"83":1.21384,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01226,"84":0.00409,"89":0.00409,"92":0.01226,"94":0.00817,"95":0.01226,"96":0.02452,"97":0.42914,"98":1.68384,_:"12 13 14 15 16 17 79 80 81 83 85 86 87 88 90 91 93"},E:{"4":0,"13":0.02044,"14":0.08583,"15":0.06131,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00409,"11.1":0.00817,"12.1":0.02044,"13.1":0.094,"14.1":0.22887,"15.1":0.13078,"15.2-15.3":0.24522},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00226,"6.0-6.1":0.00226,"7.0-7.1":0.00767,"8.1-8.4":0.0009,"9.0-9.2":0,"9.3":0.04062,"10.0-10.2":0.00045,"10.3":0.02392,"11.0-11.2":0.00271,"11.3-11.4":0.00812,"12.0-12.1":0.00451,"12.2-12.5":0.24373,"13.0-13.1":0.00587,"13.2":0.00181,"13.3":0.01896,"13.4-13.7":0.0677,"14.0-14.4":0.18686,"14.5-14.8":0.82959,"15.0-15.1":0.6987,"15.2-15.3":2.35382,"15.4":0.01038},P:{"4":0.1819,"5.0-5.4":0.0504,"6.2-6.4":0.0107,"7.2-7.4":0.0749,"8.2":0.01049,"9.2":0.03081,"10.1":0.04032,"11.1-11.2":0.0321,"12.0":0.02054,"13.0":0.0428,"14.0":0.0642,"15.0":0.0535,"16.0":0.83462},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00271,"4.2-4.3":0.00721,"4.4":0,"4.4.3-4.4.4":0.04329},A:{"11":0.11852,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.14189},Q:{"10.4":0},O:{"0":0.02365},H:{"0":0.11194},L:{"0":42.60527},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00471,"51":0,"52":0.00471,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00471,"74":0,"75":0,"76":0,"77":0,"78":0.00471,"79":0,"80":0.00471,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00471,"89":0,"90":0.02354,"91":0.00941,"92":0,"93":0,"94":0,"95":0.00471,"96":0,"97":0,"98":0,"99":0.00471,"100":0.00471,"101":0.00471,"102":0.01883,"103":0.45658,"104":0.09885,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00471,"23":0,"24":0,"25":0,"26":0.00471,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00941,"39":0,"40":0,"41":0,"42":0.00471,"43":0,"44":0,"45":0,"46":0,"47":0.00471,"48":0,"49":0.01412,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0.00471,"63":0,"64":0,"65":0,"66":0,"67":0.00471,"68":0.01412,"69":0.03766,"70":0.00471,"71":0.00471,"72":0.00471,"73":0.00471,"74":0.00471,"75":0.00471,"76":0.00941,"77":0.00471,"78":0.00941,"79":0.07531,"80":0.00941,"81":0.01412,"83":0.01412,"84":0.01883,"85":0.01412,"86":0.01883,"87":0.03766,"88":0.01412,"89":0.02354,"90":0.00941,"91":0.03295,"92":0.02824,"93":0.01412,"94":0.01412,"95":0.02354,"96":0.03766,"97":0.04707,"98":0.04707,"99":0.0659,"100":0.06119,"101":0.06119,"102":0.12238,"103":4.02919,"104":11.8334,"105":0.04236,"106":0.00471,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00471,"64":0.00471,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00471,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0.00471,"83":0,"84":0,"85":0.00941,"86":0.00471,"87":0,"88":0.01412,"89":0.92728,"90":0.05178,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00941,"79":0,"80":0,"81":0,"83":0,"84":0.00471,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00471,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00471,"100":0.00471,"101":0.02354,"102":0.00941,"103":0.32949,"104":1.03083,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00471,"14":0.02354,"15":0.00471,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00471,"10.1":0,"11.1":0.00471,"12.1":0.00471,"13.1":0.03295,"14.1":0.06119,"15.1":0.01883,"15.2-15.3":0.01412,"15.4":0.03766,"15.5":0.12709,"15.6":0.19769,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00426,"6.0-6.1":0.00085,"7.0-7.1":0.01362,"8.1-8.4":0,"9.0-9.2":0.00085,"9.3":0.05703,"10.0-10.2":0,"10.3":0.06299,"11.0-11.2":0.01107,"11.3-11.4":0.00596,"12.0-12.1":0.00426,"12.2-12.5":0.33794,"13.0-13.1":0.00596,"13.2":0.0034,"13.3":0.01873,"13.4-13.7":0.0681,"14.0-14.4":0.16258,"14.5-14.8":0.49542,"15.0-15.1":0.10896,"15.2-15.3":0.20855,"15.4":0.31751,"15.5":1.91271,"15.6":4.6409,"16.0":0.06384},P:{"4":0.17039,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.08018,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.03007,"12.0":0.01002,"13.0":0.03007,"14.0":0.04009,"15.0":0.03007,"16.0":0.07016,"17.0":0.45103,"18.0":0.50115},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00714,"4.2-4.3":0.01905,"4.4":0,"4.4.3-4.4.4":0.12146},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02354,"5.5":0},J:{"7":0,"10":0.00529},N:{"10":0,"11":0},L:{"0":67.12104},S:{"2.5":0},R:{_:"0"},M:{"0":0.1535},Q:{"10.4":0},O:{"0":0.04234},H:{"0":0.13029}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CR.js index e0f4e2ef327..a07e6768025 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CR.js @@ -1 +1 @@ -module.exports={C:{"52":0.01258,"73":0.04612,"78":0.02516,"82":0.00419,"83":0.02935,"88":0.20126,"89":0.00419,"90":0.03774,"91":0.04193,"94":0.00839,"95":0.02516,"96":0.85957,"97":1.39208,"98":0.01677,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 79 80 81 84 85 86 87 92 93 99 3.5 3.6"},D:{"38":0.00419,"47":0.00839,"49":0.02097,"52":0.00839,"63":0.00419,"65":0.02097,"67":0.05451,"68":0.00839,"69":0.00839,"73":0.00839,"75":0.00839,"77":0.01258,"78":0.00839,"79":0.03774,"80":0.01258,"81":0.02097,"83":0.01677,"84":0.00839,"85":0.00839,"86":0.05451,"87":0.06709,"88":0.01677,"89":0.02516,"90":0.01677,"91":0.0629,"92":0.0629,"93":0.85957,"94":0.03774,"95":0.10063,"96":0.77571,"97":7.32098,"98":18.84754,"99":0.01258,"100":0.00419,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 48 50 51 53 54 55 56 57 58 59 60 61 62 64 66 70 71 72 74 76 101"},F:{"36":0.00419,"72":0.00839,"82":0.47381,"83":1.03148,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.02097,"18":0.00839,"84":0.00419,"89":0.00839,"91":0.00419,"92":0.01258,"94":0.00839,"95":0.02097,"96":0.02935,"97":0.80506,"98":2.74642,_:"12 13 14 15 16 79 80 81 83 85 86 87 88 90 93"},E:{"4":0,"13":0.05451,"14":0.18869,"15":0.1216,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1","5.1":0.00419,"10.1":0.00419,"11.1":0.03774,"12.1":0.03354,"13.1":0.239,"14.1":0.67088,"15.1":0.52832,"15.2-15.3":0.68765,"15.4":0.01677},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00612,"6.0-6.1":0,"7.0-7.1":0.01427,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.052,"10.0-10.2":0,"10.3":0.03772,"11.0-11.2":0.00408,"11.3-11.4":0.01427,"12.0-12.1":0.00918,"12.2-12.5":0.3385,"13.0-13.1":0.0051,"13.2":0.00306,"13.3":0.05506,"13.4-13.7":0.09074,"14.0-14.4":0.39355,"14.5-14.8":1.71695,"15.0-15.1":1.54158,"15.2-15.3":5.86046,"15.4":0.0469},P:{"4":0.14404,"5.0-5.4":0.02123,"6.2-6.4":0.04033,"7.2-7.4":0.11318,"8.2":0.01049,"9.2":0.01029,"10.1":0.02035,"11.1-11.2":0.07202,"12.0":0.02058,"13.0":0.11318,"14.0":0.11318,"15.0":0.13376,"16.0":2.30471},I:{"0":0,"3":0,"4":0.00849,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00243,"4.2-4.3":0.00728,"4.4":0,"4.4.3-4.4.4":0.06309},A:{"11":0.14676,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.31933},Q:{"10.4":0},O:{"0":0.05806},H:{"0":0.21437},L:{"0":40.84578},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00436,"53":0,"54":0,"55":0,"56":0.00873,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.01745,"74":0,"75":0,"76":0,"77":0,"78":0.00436,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00873,"85":0,"86":0,"87":0,"88":0.07417,"89":0,"90":0.04363,"91":0.02182,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00436,"100":0.00436,"101":0.00873,"102":0.02618,"103":0.75916,"104":0.14834,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00873,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00436,"66":0,"67":0.00436,"68":0,"69":0.00436,"70":0,"71":0,"72":0,"73":0.00436,"74":0,"75":0,"76":0.00436,"77":0.02182,"78":0.00436,"79":0.01309,"80":0.00436,"81":0.01309,"83":0.00873,"84":0.01309,"85":0.00436,"86":0.02618,"87":0.01745,"88":0.00873,"89":0.00873,"90":0.00436,"91":0.01309,"92":0.03927,"93":0.00873,"94":0.02182,"95":0.00873,"96":0.02182,"97":0.02618,"98":0.01309,"99":0.02618,"100":0.02618,"101":0.0349,"102":0.15707,"103":3.21553,"104":8.68237,"105":0.03054,"106":0.00436,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00436,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00436,"60":0,"62":0,"63":0.01309,"64":0.01309,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00436,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01309,"89":0.84206,"90":0.0349,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00873,"18":0.00436,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00436,"91":0,"92":0.01309,"93":0,"94":0,"95":0,"96":0,"97":0.00436,"98":0,"99":0.00436,"100":0,"101":0.01745,"102":0.00873,"103":0.47557,"104":1.37871,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00873,"14":0.0349,"15":0.00873,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.01309,"12.1":0.00873,"13.1":0.07853,"14.1":0.09599,"15.1":0.01745,"15.2-15.3":0.03054,"15.4":0.08726,"15.5":0.30105,"15.6":0.53665,"16.0":0.00873},G:{"8":0,"3.2":0.00162,"4.0-4.1":0.00162,"4.2-4.3":0,"5.0-5.1":0.00324,"6.0-6.1":0.00811,"7.0-7.1":0.02757,"8.1-8.4":0,"9.0-9.2":0.00162,"9.3":0.10219,"10.0-10.2":0.00487,"10.3":0.03244,"11.0-11.2":0.00487,"11.3-11.4":0.0146,"12.0-12.1":0.00487,"12.2-12.5":0.38443,"13.0-13.1":0.00324,"13.2":0.00162,"13.3":0.02757,"13.4-13.7":0.06002,"14.0-14.4":0.23195,"14.5-14.8":0.72992,"15.0-15.1":0.12976,"15.2-15.3":0.32765,"15.4":0.48824,"15.5":3.37387,"15.6":10.05673,"16.0":0.1914},P:{"4":0.11231,"5.0-5.4":0,"6.2-6.4":0.01021,"7.2-7.4":0.11231,"8.2":0,"9.2":0.01021,"10.1":0,"11.1-11.2":0.08168,"12.0":0.01021,"13.0":0.05105,"14.0":0.05105,"15.0":0.03063,"16.0":0.09189,"17.0":1.00055,"18.0":1.35789},I:{"0":0,"3":0,"4":0.04335,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01084,"4.2-4.3":0.02168,"4.4":0,"4.4.3-4.4.4":0.26012},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02618,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":56.44023},S:{"2.5":0},R:{_:"0"},M:{"0":0.29876},Q:{"10.4":0},O:{"0":0.02819},H:{"0":0.22948}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CU.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CU.js index 2918dc4d9d2..56af97bc91a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CU.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CU.js @@ -1 +1 @@ -module.exports={C:{"17":0.00271,"23":0.00541,"24":0.02705,"26":0.00541,"34":0.02976,"35":0.00541,"37":0.00271,"38":0.00812,"40":0.02435,"41":0.00541,"42":0.00541,"43":0.01353,"44":0.00271,"45":0.01082,"46":0.00541,"47":0.02435,"48":0.01082,"49":0.00812,"50":0.02705,"51":0.00541,"52":0.18665,"53":0.00541,"54":0.21099,"55":0.00541,"56":0.03517,"57":0.09197,"58":0.01623,"59":0.01353,"60":0.0514,"61":0.02164,"62":0.02164,"63":0.01353,"64":0.02976,"65":0.06492,"66":0.05681,"67":0.04328,"68":0.03787,"69":0.01623,"70":0.02705,"71":0.0514,"72":0.14878,"73":0.02164,"74":0.01353,"75":0.01353,"76":0.01082,"77":0.03787,"78":0.08927,"79":0.03246,"80":0.02435,"81":0.04058,"82":0.04328,"83":0.02705,"84":0.05681,"85":0.03246,"86":0.02705,"87":0.02705,"88":0.11632,"89":0.11632,"90":0.06763,"91":0.23534,"92":0.11632,"93":0.12714,"94":0.21099,"95":0.38682,"96":3.23789,"97":4.20087,"98":0.07574,"99":0.00271,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 25 27 28 29 30 31 32 33 36 39 3.5 3.6"},D:{"22":0.00541,"38":0.00271,"45":0.00541,"48":0.00541,"49":0.00541,"53":0.00271,"54":0.00271,"56":0.00541,"59":0.00271,"60":0.00271,"62":0.01623,"63":0.01353,"64":0.00271,"65":0.00271,"66":0.00541,"67":0.00812,"68":0.03246,"69":0.00271,"70":0.00812,"71":0.01623,"72":0.01623,"73":0.00271,"74":0.01894,"75":0.02435,"76":0.00541,"77":0.01894,"78":0.00541,"79":0.05681,"80":0.04599,"81":0.04869,"83":0.02705,"84":0.02705,"85":0.08386,"86":0.11361,"87":0.12714,"88":0.21099,"89":0.04328,"90":0.12443,"91":0.08115,"92":0.06492,"93":0.02705,"94":0.08656,"95":0.08656,"96":0.78445,"97":2.17482,"98":4.04668,"99":0.00541,"100":0.00541,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 46 47 50 51 52 55 57 58 61 101"},F:{"40":0.00271,"42":0.00541,"52":0.00271,"64":0.00812,"71":0.01623,"74":0.00541,"75":0.01082,"77":0.00541,"79":0.01082,"80":0.01623,"81":0.02164,"82":0.15148,"83":0.71953,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 60 62 63 65 66 67 68 69 70 72 73 76 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01082,"13":0.01623,"14":0.01623,"15":0.01353,"16":0.01353,"17":0.01894,"18":0.09197,"84":0.02976,"85":0.01353,"86":0.00541,"87":0.00271,"89":0.02435,"90":0.07845,"91":0.02435,"92":0.03246,"93":0.00541,"94":0.00541,"95":0.02435,"96":0.04328,"97":0.38411,"98":0.73847,_:"79 80 81 83 88"},E:{"4":0,"13":0.01894,"14":0.01623,"15":0.01082,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.03517,"11.1":0.00271,"12.1":0.00812,"13.1":0.01082,"14.1":0.03246,"15.1":0.02435,"15.2-15.3":0.02705},G:{"8":0.00117,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00117,"6.0-6.1":0,"7.0-7.1":0.02643,"8.1-8.4":0.03466,"9.0-9.2":0.00294,"9.3":0.13158,"10.0-10.2":0.0094,"10.3":0.06696,"11.0-11.2":0.06873,"11.3-11.4":0.03231,"12.0-12.1":0.03524,"12.2-12.5":0.90695,"13.0-13.1":0.03524,"13.2":0.03759,"13.3":0.16271,"13.4-13.7":0.39826,"14.0-14.4":1.06907,"14.5-14.8":0.67258,"15.0-15.1":0.88639,"15.2-15.3":1.28935,"15.4":0.00294},P:{"4":0.35891,"5.0-5.4":0.05127,"6.2-6.4":0.03076,"7.2-7.4":0.28713,"8.2":0.02051,"9.2":0.1128,"10.1":0.06153,"11.1-11.2":0.15382,"12.0":0.05127,"13.0":0.16407,"14.0":0.28713,"15.0":0.19484,"16.0":1.00496},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00537,"4.2-4.3":0.04836,"4.4":0,"4.4.3-4.4.4":0.21614},A:{"8":0.00271,"9":0.01082,"11":0.08656,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.88987},Q:{"10.4":0.00729},O:{"0":0.17506},H:{"0":1.19465},L:{"0":65.90979},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00428,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0.00643,"33":0,"34":0.00428,"35":0.00214,"36":0.00214,"37":0,"38":0,"39":0.00214,"40":0.00214,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00214,"47":0.00214,"48":0.00214,"49":0.00214,"50":0.00428,"51":0,"52":0.01285,"53":0,"54":0.03213,"55":0,"56":0.00428,"57":0.01285,"58":0.00214,"59":0.00214,"60":0.00428,"61":0.00214,"62":0.00214,"63":0.00214,"64":0.00428,"65":0.00428,"66":0.00214,"67":0.00428,"68":0.03427,"69":0.00214,"70":0.00428,"71":0.00428,"72":0.01928,"73":0.00214,"74":0,"75":0.00214,"76":0,"77":0.00214,"78":0.00643,"79":0,"80":0.00214,"81":0.00428,"82":0.00428,"83":0.00428,"84":0.00428,"85":0.00214,"86":0.00214,"87":0.00428,"88":0.00857,"89":0.01071,"90":0.00643,"91":0.03427,"92":0.00428,"93":0.01071,"94":0.01285,"95":0.00857,"96":0.01285,"97":0.01499,"98":0.01714,"99":0.04927,"100":0.04284,"101":0.05141,"102":0.10924,"103":0.90178,"104":0.11995,"105":0.00428,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00214,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00214,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00214,"61":0,"62":0.00214,"63":0.00214,"64":0,"65":0,"66":0,"67":0.00214,"68":0.00214,"69":0.01285,"70":0.01071,"71":0.00428,"72":0.00214,"73":0.00214,"74":0.00428,"75":0.00214,"76":0.00428,"77":0.00857,"78":0,"79":0.00643,"80":0.00643,"81":0.00857,"83":0.00214,"84":0,"85":0.00643,"86":0.00643,"87":0.00643,"88":0.02142,"89":0.01071,"90":0.01071,"91":0.00428,"92":0.00643,"93":0.00428,"94":0.00857,"95":0.00428,"96":0.0257,"97":0.02785,"98":0.01499,"99":0.02356,"100":0.0257,"101":0.02785,"102":0.0407,"103":0.35343,"104":0.67473,"105":0.00214,"106":0,"107":0,_:"108"},F:{"9":0,"11":0.00214,"12":0,"15":0,"16":0,"17":0.00214,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0.00214,"32":0,"33":0.00428,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00214,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00214,"60":0.01499,"62":0,"63":0.02356,"64":0.00857,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00643,"80":0.00214,"81":0,"82":0.00428,"83":0,"84":0.00214,"85":0.00428,"86":0.00214,"87":0.00214,"88":0.01285,"89":0.10282,"90":0.01285,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00214},B:{"12":0.00214,"13":0.00214,"14":0.00214,"15":0.00214,"16":0.00214,"17":0.00214,"18":0.01071,"79":0,"80":0,"81":0,"83":0,"84":0.00428,"85":0.00214,"86":0,"87":0,"88":0,"89":0.00214,"90":0.00643,"91":0,"92":0.00643,"93":0,"94":0,"95":0.00214,"96":0.00428,"97":0.00214,"98":0.01499,"99":0.00214,"100":0.00214,"101":0.01285,"102":0.00857,"103":0.07069,"104":0.12852,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00214,"14":0.00214,"15":0.00214,_:"0","3.1":0,"3.2":0,"5.1":0.00214,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.00214,"14.1":0.00214,"15.1":0.00214,"15.2-15.3":0.00214,"15.4":0.00214,"15.5":0.00643,"15.6":0.00857,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.04544,"8.1-8.4":0.06777,"9.0-9.2":0.00231,"9.3":0.04005,"10.0-10.2":0.00231,"10.3":0.05006,"11.0-11.2":0.03851,"11.3-11.4":0.01617,"12.0-12.1":0.01771,"12.2-12.5":0.90649,"13.0-13.1":0.04544,"13.2":0.06161,"13.3":0.14479,"13.4-13.7":0.32963,"14.0-14.4":0.96194,"14.5-14.8":0.70162,"15.0-15.1":0.60073,"15.2-15.3":0.79712,"15.4":0.4259,"15.5":1.25152,"15.6":1.1437,"16.0":0.04852},P:{"4":0.32145,"5.0-5.4":0.03014,"6.2-6.4":0.02009,"7.2-7.4":0.45204,"8.2":0.01005,"9.2":0.06027,"10.1":0.03014,"11.1-11.2":0.13059,"12.0":0.02009,"13.0":0.1105,"14.0":0.16072,"15.0":0.05023,"16.0":0.41186,"17.0":0.79358,"18.0":0.32145},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00414,"4.2-4.3":0.04143,"4.4":0,"4.4.3-4.4.4":0.24441},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00643,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":82.64192},S:{"2.5":0},R:{_:"0"},M:{"0":0.59721},Q:{"10.4":0.00786},O:{"0":0.0943},H:{"0":1.06384}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CV.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CV.js index cb723f26dc6..e16746266e4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CV.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CV.js @@ -1 +1 @@ -module.exports={C:{"29":0.0083,"35":0.00415,"48":0.00415,"52":0.0747,"61":0.0332,"72":0.02905,"78":0.0166,"88":0.0083,"91":0.0166,"94":0.0332,"95":0.01245,"96":0.8798,"97":1.6849,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 59 60 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 87 89 90 92 93 98 99 3.5 3.6"},D:{"38":0.0166,"42":0.0083,"43":0.0498,"49":0.07055,"50":0.0083,"55":0.00415,"62":0.00415,"63":0.0083,"65":0.0166,"67":0.0083,"70":0.0166,"71":0.0249,"73":0.0083,"74":0.00415,"75":0.00415,"76":0.01245,"77":0.0166,"78":0.0166,"79":0.0498,"80":0.03735,"81":0.02905,"83":0.0249,"84":0.00415,"85":0.0083,"86":0.01245,"87":0.05395,"88":0.02905,"89":0.07055,"90":0.0498,"91":0.2158,"92":0.02075,"93":0.0498,"94":0.0415,"95":0.0415,"96":0.6059,"97":8.5324,"98":18.3513,"99":0.0166,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 44 45 46 47 48 51 52 53 54 56 57 58 59 60 61 64 66 68 69 72 100 101"},F:{"82":0.12035,"83":2.39455,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.0166,"16":0.00415,"17":0.00415,"18":0.0249,"85":0.0083,"89":0.01245,"92":0.0498,"94":0.04565,"96":0.166,"97":0.6889,"98":2.85105,_:"12 13 14 79 80 81 83 84 86 87 88 90 91 93 95"},E:{"4":0,"13":0.0083,"14":0.03735,"15":0.0913,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.0581,"11.1":0.0581,"12.1":0.00415,"13.1":0.083,"14.1":0.1743,"15.1":0.1328,"15.2-15.3":0.4067,"15.4":0.01245},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00173,"7.0-7.1":0.05029,"8.1-8.4":0.00347,"9.0-9.2":0,"9.3":0.04422,"10.0-10.2":0.0026,"10.3":0.11532,"11.0-11.2":0.11792,"11.3-11.4":0.01214,"12.0-12.1":0.02428,"12.2-12.5":1.35347,"13.0-13.1":0.00434,"13.2":0.0104,"13.3":0.21069,"13.4-13.7":0.26965,"14.0-14.4":0.97283,"14.5-14.8":1.22775,"15.0-15.1":0.91041,"15.2-15.3":3.32255,"15.4":0.01127},P:{"4":0.25791,"5.0-5.4":0.02063,"6.2-6.4":0.01048,"7.2-7.4":0.13411,"8.2":0.01077,"9.2":0.03095,"10.1":0.02185,"11.1-11.2":0.23727,"12.0":0.71182,"13.0":0.13411,"14.0":0.17538,"15.0":0.21664,"16.0":1.21732},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00068,"4.2-4.3":0.00406,"4.4":0,"4.4.3-4.4.4":0.05962},A:{"11":0.1245,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.24574},Q:{"10.4":0},O:{"0":0.14042},H:{"0":0.37668},L:{"0":46.15481},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00367,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01468,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0.00734,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00367,"78":0.00367,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00367,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00367,"92":0,"93":0,"94":0,"95":0.00367,"96":0.00367,"97":0.00367,"98":0,"99":0.00367,"100":0,"101":0.01101,"102":0.03669,"103":0.3669,"104":0.06971,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00367,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.01101,"41":0,"42":0.00367,"43":0.01835,"44":0,"45":0,"46":0.00367,"47":0,"48":0,"49":0.03302,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00367,"64":0.00367,"65":0.00367,"66":0,"67":0.00367,"68":0,"69":0.01468,"70":0.00367,"71":0,"72":0.00367,"73":0,"74":0.00367,"75":0,"76":0.00734,"77":0.00367,"78":0.03669,"79":0.02935,"80":0.01468,"81":0.16877,"83":0.00734,"84":0.00734,"85":0.01101,"86":0.00734,"87":0.01101,"88":0.01101,"89":0.02935,"90":0.01835,"91":0.01101,"92":0.00734,"93":0.01835,"94":0.00734,"95":0.00734,"96":0.01835,"97":0.01101,"98":0.01468,"99":0.01468,"100":0.02201,"101":0.02935,"102":0.07338,"103":2.13169,"104":6.41708,"105":0.02568,"106":0.00367,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00734,"64":0.00367,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.04403,"80":0,"81":0,"82":0,"83":0,"84":0.00367,"85":0.00367,"86":0,"87":0,"88":0.02201,"89":0.70078,"90":0.02568,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00734,"16":0,"17":0,"18":0.00734,"79":0,"80":0,"81":0,"83":0,"84":0.00367,"85":0.00367,"86":0,"87":0,"88":0.00367,"89":0.00367,"90":0.00367,"91":0.00367,"92":0.00734,"93":0,"94":0.00367,"95":0,"96":0,"97":0,"98":0.00367,"99":0.00367,"100":0,"101":0.00367,"102":0.01101,"103":0.66776,"104":0.85855,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00367,"14":0.06604,"15":0.01835,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00734,"12.1":0.00367,"13.1":0.02935,"14.1":0.02568,"15.1":0.00367,"15.2-15.3":0,"15.4":0.03669,"15.5":0.06971,"15.6":0.13575,"16.0":0.01468},G:{"8":0.00301,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01959,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02412,"10.0-10.2":0.01055,"10.3":0.4356,"11.0-11.2":0.21102,"11.3-11.4":0.01055,"12.0-12.1":0.19896,"12.2-12.5":1.98208,"13.0-13.1":0.01206,"13.2":0.02562,"13.3":0.05275,"13.4-13.7":0.22308,"14.0-14.4":1.04756,"14.5-14.8":1.05962,"15.0-15.1":0.34215,"15.2-15.3":0.95109,"15.4":0.65115,"15.5":2.87288,"15.6":4.79466,"16.0":0.13566},P:{"4":0.72141,"5.0-5.4":0,"6.2-6.4":0.03092,"7.2-7.4":0.15459,"8.2":0,"9.2":0.06183,"10.1":0,"11.1-11.2":0.16489,"12.0":0,"13.0":0.12367,"14.0":0.07214,"15.0":0.22673,"16.0":0.15459,"17.0":0.84508,"18.0":0.62865},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0203,"4.2-4.3":0.02706,"4.4":0,"4.4.3-4.4.4":0.47134},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01468,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":66.04348},S:{"2.5":0},R:{_:"0"},M:{"0":0.10763},Q:{"10.4":0},O:{"0":0.09497},H:{"0":0.40758}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CX.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CX.js index 71ebfd2033e..d677bb15015 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CX.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CX.js @@ -1 +1 @@ -module.exports={C:{_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 3.5 3.6"},D:{"97":38.46,"98":46.152,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 99 100 101"},F:{_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98"},E:{"4":0,"13":11.538,_:"0 5 6 7 8 9 10 11 12 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 13.1 14.1 15.1 15.2-15.3 15.4"},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":3.85,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":0,"15.0-15.1":0,"15.2-15.3":0,"15.4":0},P:{"4":0.1951,"5.0-5.4":0.0504,"6.2-6.4":0.04032,"7.2-7.4":0.07188,"8.2":0.01049,"9.2":0.03081,"10.1":0.04032,"11.1-11.2":0.12322,"12.0":0.02054,"13.0":0.11295,"14.0":0.16429,"15.0":0.11295,"16.0":1.3965},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{_:"6 7 8 9 10 11 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0},L:{"0":0},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.74438,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0.74438,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":59.99663,"104":37.03018,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0,"15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0,"15.6":0,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":1.49438,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":0,"15.0-15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0,"15.6":0,"16.0":0},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0,"15.0":0,"16.0":0,"17.0":0,"18.0":0},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":0},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CY.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CY.js index 23a9dd0d107..39c5cfe6064 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CY.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CY.js @@ -1 +1 @@ -module.exports={C:{"52":0.29724,"78":0.03468,"80":0.00495,"83":0.01982,"84":0.00495,"88":0.02972,"91":0.02972,"92":0.00495,"94":0.00991,"95":0.02477,"96":0.63411,"97":1.11465,"98":0.00495,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 81 82 85 86 87 89 90 93 99 3.5 3.6"},D:{"38":0.02972,"42":1.4862,"47":0.01486,"49":0.05449,"53":0.02477,"54":0.00991,"56":0.00495,"57":0.00991,"62":0.00991,"65":0.01486,"69":0.00991,"70":1.48125,"71":0.01486,"73":0.00991,"74":0.01486,"76":0.00991,"77":0.03468,"79":0.16348,"80":0.00495,"81":0.02477,"83":0.01982,"84":0.01982,"85":0.02972,"86":0.03963,"87":0.1288,"88":0.01486,"89":0.06936,"90":0.01982,"91":0.04459,"92":0.03468,"93":0.05449,"94":0.02477,"95":0.04459,"96":0.70842,"97":9.95754,"98":21.55981,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 43 44 45 46 48 50 51 52 55 58 59 60 61 63 64 66 67 68 72 75 78 99 100 101"},F:{"28":0.01982,"46":0.00495,"82":0.34678,"83":1.09483,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00991,"16":0.00495,"18":0.01982,"83":0.00495,"90":0.00991,"91":0.00991,"94":0.00495,"96":0.01982,"97":1.01557,"98":4.13164,_:"12 13 14 17 79 80 81 84 85 86 87 88 89 92 93 95"},E:{"4":0,"13":0.02972,"14":0.25265,"15":0.1189,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.00495,"11.1":0.00991,"12.1":0.02477,"13.1":0.8719,"14.1":0.59943,"15.1":0.29229,"15.2-15.3":0.60439,"15.4":0.00495},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00121,"6.0-6.1":0,"7.0-7.1":0.00969,"8.1-8.4":0,"9.0-9.2":0.00606,"9.3":0.06058,"10.0-10.2":0.00485,"10.3":0.10299,"11.0-11.2":0.09572,"11.3-11.4":0.01575,"12.0-12.1":0.01817,"12.2-12.5":0.4895,"13.0-13.1":0.03998,"13.2":0.00969,"13.3":0.04483,"13.4-13.7":0.20356,"14.0-14.4":0.57432,"14.5-14.8":2.31061,"15.0-15.1":1.8308,"15.2-15.3":6.263,"15.4":0.02908},P:{"4":0.20749,"5.0-5.4":0.05127,"6.2-6.4":0.03076,"7.2-7.4":0.01037,"8.2":0.02051,"9.2":0.1128,"10.1":0.06153,"11.1-11.2":0.06225,"12.0":0.03112,"13.0":0.07262,"14.0":0.07262,"15.0":0.10375,"16.0":3.14353},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00128,"4.2-4.3":0.00514,"4.4":0,"4.4.3-4.4.4":0.0289},A:{"9":0.01486,"11":0.22293,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.1867},Q:{"10.4":0},O:{"0":0.79727},H:{"0":0.39651},L:{"0":32.4087},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.08388,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00466,"79":0.00466,"80":0.00932,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00466,"89":0,"90":0,"91":0.01864,"92":0,"93":0,"94":0.00466,"95":0,"96":0,"97":0,"98":0,"99":0.00466,"100":0,"101":0.00466,"102":0.02796,"103":0.54988,"104":0.0932,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.00466,"36":0,"37":0,"38":0.00466,"39":0,"40":0,"41":0,"42":0.69434,"43":0.00466,"44":0,"45":0,"46":0,"47":0.00466,"48":0,"49":0.00932,"50":0,"51":0.00466,"52":0,"53":0.00466,"54":0,"55":0,"56":0.00466,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00466,"69":0.00466,"70":0.7223,"71":0.70832,"72":0,"73":0.00466,"74":0,"75":0.00466,"76":0.00466,"77":0,"78":0.00466,"79":0.0699,"80":0,"81":0.00932,"83":0.01864,"84":0.00932,"85":0.01398,"86":0.01864,"87":0.02796,"88":0.00466,"89":0.02796,"90":0,"91":0.02796,"92":0.01864,"93":0.00932,"94":0.00466,"95":0.00932,"96":0.00932,"97":0.0233,"98":0.0466,"99":0.01398,"100":0.03262,"101":0.05126,"102":0.13048,"103":3.73266,"104":9.52038,"105":0.0233,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.01864,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00466,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00466,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00466,"62":0,"63":0.0233,"64":0.01864,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.01864,"86":0,"87":0,"88":0.01864,"89":0.87608,"90":0.05592,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00466,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00932,"102":0.00932,"103":0.48464,"104":1.26286,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00466,"13":0.01398,"14":0.04194,"15":0.00466,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00932,"12.1":0.00466,"13.1":0.22834,"14.1":0.1165,"15.1":0.0466,"15.2-15.3":0.0233,"15.4":0.03728,"15.5":0.19572,"15.6":0.31688,"16.0":0.00466},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01777,"8.1-8.4":0,"9.0-9.2":0.00592,"9.3":0.07554,"10.0-10.2":0.00592,"10.3":0.11998,"11.0-11.2":0.01333,"11.3-11.4":0.03851,"12.0-12.1":0.01926,"12.2-12.5":0.5525,"13.0-13.1":0.01333,"13.2":0.00592,"13.3":0.03555,"13.4-13.7":0.1659,"14.0-14.4":0.40734,"14.5-14.8":1.13462,"15.0-15.1":0.24292,"15.2-15.3":0.35105,"15.4":0.5599,"15.5":3.07798,"15.6":7.84454,"16.0":0.11554},P:{"4":0.24612,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.08204,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.02051,"12.0":0.01025,"13.0":0.04102,"14.0":0.06153,"15.0":0.02051,"16.0":0.08204,"17.0":1.46644,"18.0":2.34835},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00806,"4.2-4.3":0.01611,"4.4":0,"4.4.3-4.4.4":0.14903},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.10252,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":53.89656},S:{"2.5":0},R:{_:"0"},M:{"0":0.20826},Q:{"10.4":0},O:{"0":0.3738},H:{"0":0.41456}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CZ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CZ.js index 2b38b96d13c..76111011d63 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CZ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/CZ.js @@ -1 +1 @@ -module.exports={C:{"50":0.01181,"52":0.17119,"56":0.02361,"66":0.01181,"68":0.01181,"78":0.05313,"80":0.0059,"82":0.0059,"84":0.0059,"86":0.01181,"87":0.0059,"88":0.02952,"89":0.01771,"90":0.01181,"91":0.21251,"92":0.02952,"93":0.05313,"94":0.25383,"95":0.11806,"96":2.5501,"97":4.1262,"98":0.01771,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 51 53 54 55 57 58 59 60 61 62 63 64 65 67 69 70 71 72 73 74 75 76 77 79 81 83 85 99 3.5 3.6"},D:{"38":0.01181,"42":0.0059,"49":0.07674,"53":0.0059,"58":0.01181,"60":0.01181,"63":0.0059,"65":0.0059,"67":0.01181,"68":0.0059,"70":0.0059,"72":0.01771,"73":0.0059,"74":0.0059,"76":0.01181,"77":0.01181,"78":0.01771,"79":0.08855,"80":0.02952,"81":0.05313,"83":0.02952,"84":0.04132,"85":0.03542,"86":0.05313,"87":0.08264,"88":0.02361,"89":0.08264,"90":0.08855,"91":0.09445,"92":0.04722,"93":0.43682,"94":0.04722,"95":0.07674,"96":0.64933,"97":10.74346,"98":22.68523,"99":0.0059,"100":0.01181,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 43 44 45 46 47 48 50 51 52 54 55 56 57 59 61 62 64 66 69 71 75 101"},F:{"46":0.01181,"77":0.0059,"79":0.0059,"80":0.0059,"82":0.61391,"83":2.56781,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6","10.0-10.1":0,"12.1":0.02952},B:{"15":0.01181,"16":0.01181,"17":0.01181,"18":0.02361,"89":0.0059,"90":0.02361,"91":0.01181,"92":0.01181,"93":0.0059,"94":0.0059,"95":0.02361,"96":0.07674,"97":1.62923,"98":5.66098,_:"12 13 14 79 80 81 83 84 85 86 87 88"},E:{"4":0,"13":0.01771,"14":0.17709,"15":0.11216,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.01181,"11.1":0.01181,"12.1":0.02952,"13.1":0.17709,"14.1":0.56669,"15.1":0.34828,"15.2-15.3":0.74968,"15.4":0.01181},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00185,"5.0-5.1":0.00278,"6.0-6.1":0,"7.0-7.1":0.00093,"8.1-8.4":0.00648,"9.0-9.2":0,"9.3":0.03797,"10.0-10.2":0.00093,"10.3":0.05279,"11.0-11.2":0.01019,"11.3-11.4":0.01111,"12.0-12.1":0.01204,"12.2-12.5":0.24912,"13.0-13.1":0.00648,"13.2":0.00648,"13.3":0.025,"13.4-13.7":0.10095,"14.0-14.4":0.27598,"14.5-14.8":1.42343,"15.0-15.1":1.36971,"15.2-15.3":5.57794,"15.4":0.08705},P:{"4":0.12663,"5.0-5.4":0.05127,"6.2-6.4":0.03076,"7.2-7.4":0.01037,"8.2":0.02051,"9.2":0.1128,"10.1":0.06153,"11.1-11.2":0.04221,"12.0":0.03112,"13.0":0.03166,"14.0":0.06331,"15.0":0.06331,"16.0":1.8361},I:{"0":0,"3":0,"4":0.00456,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00456,"4.2-4.3":0.01141,"4.4":0,"4.4.3-4.4.4":0.0696},A:{"8":0.01192,"9":0.01192,"10":0.0417,"11":0.57789,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.32776},Q:{"10.4":0},O:{"0":0.15159},H:{"0":0.512},L:{"0":27.81883},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00515,"51":0,"52":0.10302,"53":0.00515,"54":0,"55":0,"56":0.01545,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00515,"66":0.00515,"67":0,"68":0.0103,"69":0,"70":0,"71":0,"72":0.00515,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.02576,"79":0,"80":0,"81":0.00515,"82":0,"83":0,"84":0.0103,"85":0,"86":0.00515,"87":0,"88":0.0103,"89":0.00515,"90":0,"91":0.13393,"92":0.00515,"93":0.00515,"94":0.00515,"95":0.00515,"96":0.00515,"97":0.0103,"98":0.00515,"99":0.0206,"100":0.02576,"101":0.05666,"102":0.10302,"103":2.46218,"104":0.45844,"105":0.00515,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00515,"39":0,"40":0,"41":0.00515,"42":0.00515,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01545,"50":0,"51":0,"52":0,"53":0.00515,"54":0,"55":0,"56":0.00515,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00515,"69":0,"70":0.00515,"71":0.00515,"72":0.00515,"73":0.00515,"74":0.00515,"75":0.00515,"76":0.00515,"77":0.00515,"78":0.00515,"79":0.05151,"80":0.00515,"81":0.03091,"83":0.01545,"84":0.01545,"85":0.01545,"86":0.0206,"87":0.02576,"88":0.0103,"89":0.05666,"90":0.03091,"91":0.01545,"92":0.02576,"93":0.0103,"94":0.0103,"95":0.02576,"96":0.04121,"97":0.02576,"98":0.01545,"99":0.04121,"100":1.18988,"101":0.05666,"102":0.22149,"103":3.56964,"104":10.10626,"105":0.02576,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00515,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0103,"64":0.01545,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00515,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00515,"80":0,"81":0.00515,"82":0,"83":0,"84":0,"85":0.07211,"86":0.00515,"87":0.00515,"88":0.01545,"89":1.25169,"90":0.07727,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.01545},B:{"12":0,"13":0,"14":0,"15":0.00515,"16":0,"17":0.00515,"18":0.00515,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00515,"92":0.00515,"93":0,"94":0.00515,"95":0,"96":0.00515,"97":0.00515,"98":0.01545,"99":0.00515,"100":0.00515,"101":0.02576,"102":0.04121,"103":0.87052,"104":2.60126,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00515,"14":0.04121,"15":0.0103,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.01545,"10.1":0,"11.1":0.00515,"12.1":0.00515,"13.1":0.06696,"14.1":0.11847,"15.1":0.03091,"15.2-15.3":0.03091,"15.4":0.08242,"15.5":0.28846,"15.6":0.5048,"16.0":0.0103},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00161,"6.0-6.1":0,"7.0-7.1":0.00644,"8.1-8.4":0.00322,"9.0-9.2":0.00161,"9.3":0.05632,"10.0-10.2":0.00322,"10.3":0.06919,"11.0-11.2":0.01609,"11.3-11.4":0.01287,"12.0-12.1":0.01931,"12.2-12.5":0.34113,"13.0-13.1":0.00483,"13.2":0.00965,"13.3":0.01609,"13.4-13.7":0.06758,"14.0-14.4":0.21079,"14.5-14.8":0.671,"15.0-15.1":0.18183,"15.2-15.3":0.32665,"15.4":0.58572,"15.5":3.8313,"15.6":9.3956,"16.0":0.2478},P:{"4":0.11335,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0.0103,"11.1-11.2":0.02061,"12.0":0.0103,"13.0":0.04122,"14.0":0.04122,"15.0":0.03091,"16.0":0.07213,"17.0":0.93768,"18.0":1.52501},I:{"0":0,"3":0,"4":0.00727,"2.1":0,"2.2":0,"2.3":0,"4.1":0.03273,"4.2-4.3":0.02909,"4.4":0,"4.4.3-4.4.4":0.22546},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.02634,"9":0,"10":0.01054,"11":0.19492,"5.5":0},J:{"7":0,"10":0.00485},N:{"10":0,"11":0},L:{"0":50.47216},S:{"2.5":0},R:{_:"0"},M:{"0":0.44126},Q:{"10.4":0.00485},O:{"0":0.10183},H:{"0":0.53711}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DE.js index b935a04e3f9..9d1b091255b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DE.js @@ -1 +1 @@ -module.exports={C:{"48":0.01089,"50":0.00545,"51":0.01089,"52":0.13615,"56":0.00545,"59":0.02178,"60":0.01089,"65":0.00545,"66":0.01089,"68":0.02723,"69":0.00545,"70":0.01089,"72":0.01089,"76":0.00545,"77":0.11437,"78":0.20695,"79":0.07624,"80":0.02723,"81":0.08169,"82":0.02178,"83":0.02178,"84":0.02178,"85":0.01089,"86":0.04901,"87":0.01634,"88":0.03812,"89":0.03268,"90":0.28319,"91":0.38122,"92":0.02723,"93":0.02723,"94":0.12526,"95":0.1416,"96":3.79586,"97":5.79454,"98":0.01634,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 53 54 55 57 58 61 62 63 64 67 71 73 74 75 99 3.5 3.6"},D:{"35":0.01089,"38":0.00545,"49":0.04901,"51":0.03812,"52":0.02723,"56":0.00545,"60":0.01089,"63":0.00545,"65":0.11437,"66":0.09803,"67":0.01089,"68":0.00545,"69":0.0708,"70":0.02723,"71":0.02178,"72":0.03268,"73":0.00545,"74":0.01089,"75":1.54666,"76":0.01634,"77":0.01089,"78":0.03268,"79":0.08714,"80":0.38667,"81":0.04357,"83":0.08714,"84":0.19606,"85":0.18516,"86":0.22329,"87":0.17427,"88":0.03812,"89":0.05446,"90":0.07624,"91":0.06535,"92":0.0708,"93":0.31042,"94":0.31042,"95":0.07624,"96":0.36488,"97":5.9906,"98":12.61294,"99":0.01089,"100":0.01089,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 39 40 41 42 43 44 45 46 47 48 50 53 54 55 57 58 59 61 62 64 101"},F:{"36":0.00545,"46":0.00545,"68":0.00545,"69":0.00545,"70":0.00545,"71":0.01089,"77":0.01089,"78":0.00545,"79":0.01634,"80":0.01089,"81":0.00545,"82":0.94216,"83":2.73389,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 72 73 74 75 76 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.05991,"15":0.00545,"16":0.00545,"17":0.01634,"18":0.04357,"84":0.01089,"85":0.01634,"86":0.01634,"87":0.00545,"89":0.01089,"90":0.01089,"91":0.01634,"92":0.01634,"93":0.01089,"94":0.02178,"95":0.03812,"96":0.11981,"97":1.59023,"98":5.30985,_:"13 14 79 80 81 83 88"},E:{"4":0,"7":0.00545,"12":0.00545,"13":0.04901,"14":0.35944,"15":0.23962,_:"0 5 6 8 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.02178,"10.1":0.00545,"11.1":0.05446,"12.1":0.06535,"13.1":0.3431,"14.1":1.17634,"15.1":0.83868,"15.2-15.3":1.75906,"15.4":0.02178},G:{"8":0.00322,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00322,"6.0-6.1":0,"7.0-7.1":0.00483,"8.1-8.4":0.00161,"9.0-9.2":0.01608,"9.3":0.08524,"10.0-10.2":0.00483,"10.3":0.08685,"11.0-11.2":0.0193,"11.3-11.4":0.08203,"12.0-12.1":0.01608,"12.2-12.5":0.41657,"13.0-13.1":0.01608,"13.2":0.00643,"13.3":0.04343,"13.4-13.7":0.16566,"14.0-14.4":0.53559,"14.5-14.8":2.62164,"15.0-15.1":2.28549,"15.2-15.3":9.60355,"15.4":0.0579},P:{"4":0.11566,"5.0-5.4":0.01051,_:"6.2-6.4 7.2-7.4 8.2 9.2 10.1","11.1-11.2":0.04206,"12.0":0.02103,"13.0":0.10515,"14.0":0.09463,"15.0":1.21974,"16.0":4.14291},I:{"0":0,"3":0,"4":0.00121,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00241,"4.2-4.3":0.00603,"4.4":0,"4.4.3-4.4.4":0.03134},A:{"6":0.01135,"7":0.00567,"8":0.02836,"9":0.02269,"10":0.01135,"11":0.46518,_:"5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.84249},Q:{"10.4":0},O:{"0":0.14117},H:{"0":0.43114},L:{"0":22.11709},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00476,"49":0,"50":0.00476,"51":0,"52":0.05713,"53":0,"54":0,"55":0.00476,"56":0.00476,"57":0,"58":0,"59":0.00952,"60":0.00476,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00476,"67":0,"68":0.01428,"69":0,"70":0.00476,"71":0,"72":0.00476,"73":0,"74":0.00952,"75":0,"76":0,"77":0.06665,"78":0.05237,"79":0.00952,"80":0.00952,"81":0.00952,"82":0.00476,"83":0.01428,"84":0.01428,"85":0.00476,"86":0.02857,"87":0.00476,"88":0.01428,"89":0.00952,"90":0.00476,"91":0.17616,"92":0.00476,"93":0.00476,"94":0.00952,"95":0.01428,"96":0.00952,"97":0.02381,"98":0.01428,"99":0.02381,"100":0.02381,"101":0.04285,"102":0.23805,"103":3.68501,"104":0.71415,"105":0.00476,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.01428,"36":0,"37":0,"38":0,"39":0,"40":0.00476,"41":0.00952,"42":0,"43":0.02857,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01428,"50":0,"51":0,"52":0.01904,"53":0,"54":0,"55":0,"56":0.00476,"57":0,"58":0,"59":0,"60":0.00952,"61":0.01904,"62":0,"63":0.00476,"64":0.00476,"65":0.0857,"66":0.04285,"67":0.00952,"68":0.01428,"69":0.06189,"70":0.00952,"71":0.00952,"72":0.01428,"73":0.00476,"74":0.00476,"75":0.59513,"76":0.00476,"77":0.00952,"78":0.01904,"79":0.03809,"80":0.31423,"81":0.02857,"83":0.03333,"84":0.06189,"85":0.07142,"86":0.06189,"87":0.07618,"88":0.00952,"89":0.02381,"90":0.01904,"91":0.01428,"92":0.02381,"93":0.00952,"94":0.00952,"95":0.01428,"96":0.03333,"97":0.01904,"98":0.01428,"99":0.03809,"100":0.08094,"101":0.06189,"102":0.1095,"103":2.01866,"104":5.17521,"105":0.01904,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00476,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00952,"64":0.00952,"65":0,"66":0,"67":0,"68":0.00476,"69":0.00476,"70":0.00476,"71":0.00952,"72":0.00476,"73":0.00476,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0.00476,"83":0,"84":0,"85":0.00476,"86":0.00476,"87":0.00476,"88":0.01904,"89":1.13788,"90":0.1095,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00476,"15":0.00476,"16":0,"17":0.00476,"18":0.00952,"79":0,"80":0,"81":0,"83":0,"84":0.00476,"85":0.00476,"86":0.00476,"87":0.00476,"88":0,"89":0.00476,"90":0.00476,"91":0.00476,"92":0.00476,"93":0,"94":0.00476,"95":0.00476,"96":0.00476,"97":0.00476,"98":0.00476,"99":0.00952,"100":0.00952,"101":0.02857,"102":0.03809,"103":0.80937,"104":2.2948,"105":0},E:{"4":0,"5":0,"6":0,"7":0.00476,"8":0,"9":0,"10":0,"11":0,"12":0.00476,"13":0.01428,"14":0.06665,"15":0.01904,_:"0","3.1":0,"3.2":0,"5.1":0.00476,"6.1":0,"7.1":0,"9.1":0.01904,"10.1":0.00476,"11.1":0.01904,"12.1":0.01904,"13.1":0.12855,"14.1":0.18092,"15.1":0.03809,"15.2-15.3":0.04285,"15.4":0.13331,"15.5":0.53323,"15.6":1.0617,"16.0":0.01428},G:{"8":0.0052,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0104,"6.0-6.1":0.0052,"7.0-7.1":0.0078,"8.1-8.4":0.01299,"9.0-9.2":0.03119,"9.3":0.12734,"10.0-10.2":0.0104,"10.3":0.11695,"11.0-11.2":0.05198,"11.3-11.4":0.08836,"12.0-12.1":0.07277,"12.2-12.5":0.73287,"13.0-13.1":0.02859,"13.2":0.01299,"13.3":0.07017,"13.4-13.7":0.2209,"14.0-14.4":0.55355,"14.5-14.8":1.45015,"15.0-15.1":0.33785,"15.2-15.3":0.61852,"15.4":0.99015,"15.5":5.64206,"15.6":14.51447,"16.0":0.26508},P:{"4":0.10318,"5.0-5.4":0.01032,"6.2-6.4":0,"7.2-7.4":0.03095,"8.2":0,"9.2":0.01032,"10.1":0.01032,"11.1-11.2":0.05159,"12.0":0.02064,"13.0":0.07223,"14.0":0.06191,"15.0":1.74375,"16.0":0.13413,"17.0":1.69216,"18.0":2.81682},I:{"0":0,"3":0,"4":0.00889,"2.1":0,"2.2":0.00889,"2.3":0,"4.1":0.09479,"4.2-4.3":0.0474,"4.4":0,"4.4.3-4.4.4":0.14811},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00489,"9":0.00489,"10":0.00489,"11":0.16625,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":37.8597},S:{"2.5":0},R:{_:"0"},M:{"0":1.10543},Q:{"10.4":0.00524},O:{"0":0.13621},H:{"0":0.59023}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DJ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DJ.js index 7529b54838b..853b3c7161a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DJ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DJ.js @@ -1 +1 @@ -module.exports={C:{"52":0.00939,"71":0.00939,"78":0.00626,"81":0.00626,"91":0.04068,"95":0.01877,"96":0.87299,"97":1.10454,"98":0.01877,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 79 80 82 83 84 85 86 87 88 89 90 92 93 94 99 3.5 3.6"},D:{"11":0.00313,"37":0.0219,"43":0.00313,"46":0.05006,"47":0.00939,"49":0.06258,"50":0.00313,"53":0.01252,"55":0.04068,"58":0.00939,"59":0.13455,"65":0.00626,"67":0.00313,"68":0.00939,"69":0.00626,"72":0.00626,"78":0.01565,"79":0.00939,"80":0.00626,"81":0.01252,"83":0.03755,"84":0.00626,"85":0.00939,"86":0.02816,"87":0.03755,"88":0.00626,"90":0.00626,"91":0.23468,"92":0.25971,"93":0.01252,"94":0.03442,"95":0.02503,"96":0.2378,"97":5.93884,"98":13.20438,"100":0.04068,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 39 40 41 42 44 45 48 51 52 54 56 57 60 61 62 63 64 66 70 71 73 74 75 76 77 89 99 101"},F:{"74":0.56635,"82":0.05006,"83":0.28474,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01252,"13":0.00313,"14":0.00626,"15":0.01252,"17":0.04694,"18":0.07823,"84":0.00313,"85":0.01565,"89":0.01565,"90":0.06571,"91":0.00626,"92":0.01565,"93":0.00626,"94":0.00626,"95":0.00626,"96":0.03755,"97":0.75409,"98":3.22913,_:"16 79 80 81 83 86 87 88"},E:{"4":0,"13":0.00626,"14":0.15019,"15":0.06571,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 15.4","12.1":0.01877,"13.1":0.18774,"14.1":0.1189,"15.1":0.24093,"15.2-15.3":0.22216},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00417,"8.1-8.4":0.0025,"9.0-9.2":0.00334,"9.3":0.00667,"10.0-10.2":0,"10.3":0.02169,"11.0-11.2":0.01001,"11.3-11.4":0.04672,"12.0-12.1":0.02336,"12.2-12.5":0.29782,"13.0-13.1":0.04338,"13.2":0.00834,"13.3":0.40043,"13.4-13.7":0.22023,"14.0-14.4":0.69157,"14.5-14.8":2.26325,"15.0-15.1":1.6526,"15.2-15.3":2.63614,"15.4":0.00918},P:{"4":0.36466,"5.0-5.4":0.01013,"6.2-6.4":0.04052,"7.2-7.4":0.75971,"8.2":0.02051,"9.2":0.08104,"10.1":0.06153,"11.1-11.2":0.27349,"12.0":0.13168,"13.0":0.24311,"14.0":0.25324,"15.0":0.40518,"16.0":3.33258},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00907,"4.4":0,"4.4.3-4.4.4":0.06651},A:{"11":0.18148,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.09619},Q:{"10.4":0.28858},O:{"0":2.31553},H:{"0":0.34477},L:{"0":52.00312},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00324,"78":0.00324,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00971,"90":0,"91":0.01618,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.00647,"98":0,"99":0,"100":0.00324,"101":0.00647,"102":0.08411,"103":0.4529,"104":0.08735,"105":0.00324,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00324,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00324,"50":0,"51":0,"52":0,"53":0.00324,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00647,"71":0,"72":0,"73":0,"74":0.00324,"75":0.00324,"76":0.00324,"77":0,"78":0,"79":0.00647,"80":0.00324,"81":0.00971,"83":0,"84":0,"85":0,"86":0,"87":0.00324,"88":0,"89":0.00324,"90":0.00324,"91":0.00324,"92":0,"93":0,"94":0,"95":0,"96":0.00647,"97":0.00324,"98":0.03235,"99":0.02265,"100":0.00324,"101":0.01941,"102":0.09058,"103":2.02511,"104":5.40892,"105":0.00647,"106":0.00971,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.03882,"64":0.03235,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.02912,"89":0.09058,"90":0.02265,"9.5-9.6":0,"10.0-10.1":0,"10.5":0.00324,"10.6":0.00324,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.00324,"17":0,"18":0.00324,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00324,"90":0,"91":0,"92":0.00647,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00647,"100":0.00324,"101":0.00324,"102":0.00324,"103":0.4432,"104":0.69553,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.01941,"15":0.00647,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00647,"10.1":0,"11.1":0,"12.1":0,"13.1":0.01294,"14.1":0.01941,"15.1":0.00971,"15.2-15.3":0.00324,"15.4":0.04529,"15.5":0.04853,"15.6":0.12293,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00338,"8.1-8.4":0,"9.0-9.2":0.00113,"9.3":0.00451,"10.0-10.2":0.00113,"10.3":0.00338,"11.0-11.2":0,"11.3-11.4":0.00451,"12.0-12.1":0.04394,"12.2-12.5":0.23658,"13.0-13.1":0.00563,"13.2":0.00676,"13.3":0.01577,"13.4-13.7":0.07098,"14.0-14.4":0.51034,"14.5-14.8":1.2798,"15.0-15.1":0.69285,"15.2-15.3":0.55991,"15.4":1.05899,"15.5":2.94603,"15.6":3.74703,"16.0":0.0721},P:{"4":0.39263,"5.0-5.4":0,"6.2-6.4":0.02014,"7.2-7.4":1.63094,"8.2":0,"9.2":0.07047,"10.1":0.04027,"11.1-11.2":0.65439,"12.0":0.04027,"13.0":0.11074,"14.0":1.79202,"15.0":0.20135,"16.0":0.31209,"17.0":1.61081,"18.0":1.63094},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.02128,"4.4":0,"4.4.3-4.4.4":0.0946},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01618,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":64.93218},S:{"2.5":0},R:{_:"0"},M:{"0":0.23001},Q:{"10.4":0.01353},O:{"0":0.92004},H:{"0":0.46114}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DK.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DK.js index d6464dfca49..2141e9de87c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DK.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DK.js @@ -1 +1 @@ -module.exports={C:{"52":0.04172,"70":0.01391,"78":0.05563,"84":0.01391,"87":0.04868,"89":0.01391,"90":0.01391,"91":0.07649,"92":0.00695,"93":0.00695,"94":0.02086,"95":0.02086,"96":0.80666,"97":1.24477,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 79 80 81 82 83 85 86 88 98 99 3.5 3.6"},D:{"38":0.00695,"49":0.04868,"52":0.01391,"59":0.01391,"66":0.01391,"67":0.00695,"69":0.22948,"70":0.01391,"72":0.00695,"73":0.00695,"75":0.02086,"76":0.14603,"77":0.01391,"78":0.02086,"79":0.06954,"80":0.09736,"81":0.01391,"83":0.02086,"84":0.02782,"85":0.02086,"86":0.02782,"87":0.15299,"88":0.03477,"89":0.10431,"90":0.04868,"91":0.15299,"92":0.13213,"93":0.42419,"94":0.14603,"95":0.25034,"96":1.53683,"97":17.2181,"98":28.50445,"99":0.00695,"100":0.00695,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 53 54 55 56 57 58 60 61 62 63 64 65 68 71 74 101"},F:{"82":0.33379,"83":0.86925,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01391,"86":0.01391,"88":0.00695,"89":0.00695,"90":0.01391,"92":0.01391,"94":0.01391,"95":0.02782,"96":0.0904,"97":1.25867,"98":4.47838,_:"12 13 14 15 16 17 79 80 81 83 84 85 87 91 93"},E:{"4":0,"5":0.00695,"8":0.00695,"12":0.00695,"13":0.0904,"14":0.79971,"15":0.48678,_:"0 6 7 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.03477,"12.1":0.09736,"13.1":0.53546,"14.1":2.65643,"15.1":1.12655,"15.2-15.3":2.09315,"15.4":0.01391},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.0037,"9.0-9.2":0.03333,"9.3":0.06111,"10.0-10.2":0.00185,"10.3":0.11481,"11.0-11.2":0.02407,"11.3-11.4":0.02407,"12.0-12.1":0.02222,"12.2-12.5":0.47961,"13.0-13.1":0.01667,"13.2":0.00556,"13.3":0.04815,"13.4-13.7":0.2074,"14.0-14.4":0.60924,"14.5-14.8":4.0795,"15.0-15.1":2.57399,"15.2-15.3":10.17006,"15.4":0.03518},P:{"4":0.01101,"5.0-5.4":0.05127,"6.2-6.4":0.03076,"7.2-7.4":0.01037,"8.2":0.02051,"9.2":0.1128,"10.1":0.06153,"11.1-11.2":0.04221,"12.0":0.03112,"13.0":0.02202,"14.0":0.02202,"15.0":0.03303,"16.0":1.39836},I:{"0":0,"3":0.00075,"4":0.00527,"2.1":0.00226,"2.2":0.00301,"2.3":0.00301,"4.1":0.00226,"4.2-4.3":0.00904,"4.4":0,"4.4.3-4.4.4":0.04141},A:{"8":0.00695,"10":0.06259,"11":0.37552,_:"6 7 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.28937},Q:{"10.4":0},O:{"0":0.01523},H:{"0":0.08363},L:{"0":9.99421},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00636,"48":0.00636,"49":0,"50":0,"51":0,"52":0.01907,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00636,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.02543,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.01907,"88":0.00636,"89":0,"90":0,"91":0.03814,"92":0,"93":0.01907,"94":0.26064,"95":0,"96":0.00636,"97":0.00636,"98":0,"99":0.01271,"100":0.00636,"101":0.01907,"102":0.05721,"103":1.46211,"104":0.26699,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00636,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.03179,"50":0,"51":0,"52":0.00636,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00636,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.01907,"67":0.00636,"68":0,"69":0.15257,"70":0.00636,"71":0,"72":0.00636,"73":0,"74":0,"75":0,"76":0.01907,"77":0.00636,"78":0.00636,"79":0.05086,"80":0.00636,"81":0.00636,"83":0.01271,"84":0.02543,"85":0.00636,"86":0.00636,"87":0.05086,"88":0.00636,"89":0.02543,"90":0.01271,"91":0.02543,"92":0.03179,"93":0.03814,"94":0.03179,"95":0.05721,"96":0.0445,"97":0.05086,"98":0.03814,"99":0.08264,"100":0.15257,"101":0.28607,"102":0.69291,"103":6.56042,"104":17.55803,"105":0.03814,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00636,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00636,"87":0.00636,"88":0.01271,"89":0.77555,"90":0.0445,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00636,"16":0,"17":0,"18":0.00636,"79":0,"80":0,"81":0,"83":0,"84":0.00636,"85":0.00636,"86":0.00636,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00636,"93":0,"94":0,"95":0.00636,"96":0.00636,"97":0.00636,"98":0.00636,"99":0.00636,"100":0.01271,"101":0.0445,"102":0.0445,"103":1.08705,"104":3.19757,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.01271,"13":0.02543,"14":0.23521,"15":0.07628,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.01271,"12.1":0.03814,"13.1":0.22885,"14.1":0.69291,"15.1":0.12714,"15.2-15.3":0.089,"15.4":0.36235,"15.5":1.15697,"15.6":2.03424,"16.0":0.01271},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00696,"8.1-8.4":0,"9.0-9.2":0.11491,"9.3":0.13929,"10.0-10.2":0,"10.3":0.20545,"11.0-11.2":0.02786,"11.3-11.4":0.0383,"12.0-12.1":0.02786,"12.2-12.5":0.77651,"13.0-13.1":0.02089,"13.2":0.00696,"13.3":0.03134,"13.4-13.7":0.195,"14.0-14.4":0.51884,"14.5-14.8":1.99178,"15.0-15.1":0.41786,"15.2-15.3":0.76955,"15.4":1.20133,"15.5":8.38496,"15.6":19.74713,"16.0":0.17062},P:{"4":0.08276,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0.02069,"10.1":0,"11.1-11.2":0.04138,"12.0":0,"13.0":0.01034,"14.0":0.02069,"15.0":0.01034,"16.0":0.0931,"17.0":0.77586,"18.0":1.13792},I:{"0":0,"3":0,"4":0.00887,"2.1":0,"2.2":0.01109,"2.3":0.00444,"4.1":0.01996,"4.2-4.3":0.0244,"4.4":0,"4.4.3-4.4.4":0.1486},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0.00636,"8":0.01907,"9":0.00636,"10":0.05721,"11":0.24157,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":20.60227},S:{"2.5":0},R:{_:"0"},M:{"0":0.40437},Q:{"10.4":0},O:{"0":0.01457},H:{"0":0.169}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DM.js index 8dcd7e9e7d2..08e431bcc90 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DM.js @@ -1 +1 @@ -module.exports={C:{"68":0.01016,"77":0.0762,"79":0.02032,"88":0.00508,"95":0.00508,"96":0.30988,"97":0.42164,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 78 80 81 82 83 84 85 86 87 89 90 91 92 93 94 98 99 3.5 3.6"},D:{"38":0.1016,"49":0.01016,"58":0.01016,"63":0.01016,"65":0.01016,"69":0.51816,"74":0.00508,"75":0.14732,"76":1.78816,"77":0.18796,"78":0.01524,"79":0.06604,"81":0.13208,"83":0.03556,"85":0.01524,"87":0.01524,"88":0.06096,"89":0.00508,"90":0.51816,"91":0.03556,"92":0.04064,"93":0.11176,"94":0.06096,"95":0.03048,"96":0.41656,"97":8.68172,"98":19.15668,"99":0.26924,"100":0.02032,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 59 60 61 62 64 66 67 68 70 71 72 73 80 84 86 101"},F:{"82":0.05588,"83":0.22352,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.0254,"18":0.02032,"92":1.45288,"94":0.01016,"95":0.01016,"96":0.09144,"97":1.38176,"98":4.54152,_:"12 13 14 15 17 79 80 81 83 84 85 86 87 88 89 90 91 93"},E:{"4":0,"14":0.10668,"15":0.03556,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1 11.1","10.1":0.00508,"12.1":0.01524,"13.1":0.1016,"14.1":0.42672,"15.1":0.23368,"15.2-15.3":1.18872,"15.4":0.01016},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00124,"6.0-6.1":0.00124,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.07302,"10.0-10.2":0,"10.3":0.0328,"11.0-11.2":0.013,"11.3-11.4":0.0099,"12.0-12.1":0.00124,"12.2-12.5":0.2271,"13.0-13.1":0.00186,"13.2":0.00309,"13.3":0.03651,"13.4-13.7":0.02228,"14.0-14.4":0.11943,"14.5-14.8":0.99258,"15.0-15.1":1.34654,"15.2-15.3":3.30261,"15.4":0.00619},P:{"4":0.08541,"5.0-5.4":0.01013,"6.2-6.4":0.04052,"7.2-7.4":0.10676,"8.2":0.02051,"9.2":0.01068,"10.1":0.06153,"11.1-11.2":0.03203,"12.0":0.13168,"13.0":0.10676,"14.0":0.03203,"15.0":0.04271,"16.0":3.92887},I:{"0":0,"3":0,"4":0.02104,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01403,"4.4":0,"4.4.3-4.4.4":0.11748},A:{"11":0.12192,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.14763},Q:{"10.4":0},O:{"0":0.21652},H:{"0":0.06522},L:{"0":37.02149},S:{"2.5":0}}; +module.exports={C:{"2":0.00497,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0.00497,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00497,"65":0,"66":0,"67":0,"68":0.00497,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.00497,"77":0,"78":0.00497,"79":0.00994,"80":0,"81":0,"82":0.00497,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00994,"100":0.01988,"101":0,"102":0.04474,"103":0.4971,"104":0.04474,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00994,"50":0.00497,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00497,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.03977,"70":0,"71":0,"72":0,"73":0,"74":0.00497,"75":0.00497,"76":0.68103,"77":0.1193,"78":0,"79":0.03977,"80":0,"81":0,"83":0,"84":0,"85":0.0348,"86":0.00497,"87":0.00994,"88":0.00994,"89":0,"90":0.01491,"91":0.03977,"92":0.00497,"93":0.0348,"94":0.00994,"95":0.00497,"96":0.00497,"97":0.04474,"98":0.29329,"99":0.00994,"100":0.02486,"101":0.09445,"102":0.18393,"103":3.95692,"104":9.20629,"105":0.17896,"106":0.05965,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00497,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00497,"64":0.00994,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00497,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00994,"89":0.32809,"90":0.00994,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00994,"16":0.21872,"17":0.00497,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.01988,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.0348,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00497,"101":0.01491,"102":0.02486,"103":0.62138,"104":1.48136,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00497,"14":0.01491,"15":0.00497,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0.00497,"9.1":0.00497,"10.1":0,"11.1":0.01491,"12.1":0,"13.1":0.01491,"14.1":0.06959,"15.1":0.00497,"15.2-15.3":0.00994,"15.4":0.01988,"15.5":0.31814,"15.6":0.4971,"16.0":0},G:{"8":0,"3.2":0.00185,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01945,"6.0-6.1":0,"7.0-7.1":0.03334,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.07224,"10.0-10.2":0.01389,"10.3":0.02408,"11.0-11.2":0.01482,"11.3-11.4":0.03427,"12.0-12.1":0,"12.2-12.5":0.72053,"13.0-13.1":0.00648,"13.2":0.0176,"13.3":0.01019,"13.4-13.7":0.07687,"14.0-14.4":0.13892,"14.5-14.8":0.46491,"15.0-15.1":0.40379,"15.2-15.3":0.09632,"15.4":0.30377,"15.5":2.19306,"15.6":4.54727,"16.0":0.06575},P:{"4":0.20515,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.18355,"8.2":0,"9.2":0,"10.1":0.0108,"11.1-11.2":0.04319,"12.0":0.03239,"13.0":0.07558,"14.0":0.06478,"15.0":0.02159,"16.0":0.07558,"17.0":2.12705,"18.0":2.00828},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.08677,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":1.90887},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00994,"5.5":0},J:{"7":0,"10":0.01006},N:{"10":0,"11":0},L:{"0":60.62241},S:{"2.5":0},R:{_:"0"},M:{"0":0.18607},Q:{"10.4":0},O:{"0":0.53307},H:{"0":0.06666}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DO.js index ebe58eef3cc..e6d568a3521 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DO.js @@ -1 +1 @@ -module.exports={C:{"44":0.00789,"52":0.01184,"66":0.00395,"73":0.02368,"78":0.01184,"79":0.00789,"80":0.01184,"81":0.01974,"84":0.00789,"87":0.00789,"88":0.01579,"89":0.00789,"90":0.01184,"91":0.01184,"92":0.00789,"93":0.00395,"94":0.00789,"95":0.01974,"96":0.41838,"97":0.68678,"98":0.00789,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 67 68 69 70 71 72 74 75 76 77 82 83 85 86 99 3.5 3.6"},D:{"38":0.01974,"39":0.00395,"47":0.01184,"48":0.01579,"49":0.1342,"55":0.00395,"63":0.00789,"65":0.02368,"67":0.00395,"70":0.00789,"72":0.01184,"74":0.00789,"75":0.01184,"76":0.03158,"77":0.00789,"78":0.01184,"79":0.04736,"80":0.03552,"81":0.01974,"83":0.07105,"84":0.0671,"85":0.08289,"86":0.09473,"87":0.16183,"88":0.03947,"89":0.0671,"90":0.0671,"91":0.07894,"92":0.05921,"93":0.50522,"94":0.05131,"95":0.08289,"96":0.48548,"97":7.7006,"98":17.8878,"99":0.00395,"100":0.01184,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 40 41 42 43 44 45 46 50 51 52 53 54 56 57 58 59 60 61 62 64 66 68 69 71 73 101"},F:{"69":0.00789,"71":0.00395,"82":0.34734,"83":1.01833,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 70 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00395,"17":0.00789,"18":0.15788,"84":0.00395,"87":0.01184,"89":0.01579,"90":0.01184,"92":0.01579,"93":0.00395,"94":0.00395,"95":0.01579,"96":0.03158,"97":0.59994,"98":2.22611,_:"12 13 14 16 79 80 81 83 85 86 88 91"},E:{"4":0,"12":0.00395,"13":0.01579,"14":0.21709,"15":0.13025,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 9.1","5.1":0.03158,"10.1":0.00789,"11.1":0.01184,"12.1":0.03552,"13.1":0.15393,"14.1":0.42628,"15.1":0.22893,"15.2-15.3":0.43812,"15.4":0.00789},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00282,"6.0-6.1":0.00282,"7.0-7.1":0.04231,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.05642,"10.0-10.2":0.00564,"10.3":0.05642,"11.0-11.2":0.01692,"11.3-11.4":0.02398,"12.0-12.1":0.02116,"12.2-12.5":0.60788,"13.0-13.1":0.02962,"13.2":0.00846,"13.3":0.08039,"13.4-13.7":0.23836,"14.0-14.4":0.90407,"14.5-14.8":3.23827,"15.0-15.1":2.14239,"15.2-15.3":6.55694,"15.4":0.06629},P:{"4":0.14025,"5.0-5.4":0.01013,"6.2-6.4":0.04052,"7.2-7.4":0.0971,"8.2":0.02051,"9.2":0.01079,"10.1":0.06153,"11.1-11.2":0.19419,"12.0":0.13168,"13.0":0.05394,"14.0":0.05394,"15.0":0.07552,"16.0":1.1112},I:{"0":0,"3":0,"4":0.0009,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00269,"4.2-4.3":0.00359,"4.4":0,"4.4.3-4.4.4":0.04124},A:{"6":0.00448,"7":0.00448,"8":0.03136,"9":0.01344,"10":0.01792,"11":0.09409,_:"5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.28444},Q:{"10.4":0},O:{"0":0.06657},H:{"0":0.22346},L:{"0":34.93743},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00434,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.01301,"74":0,"75":0,"76":0,"77":0,"78":0.00434,"79":0.00434,"80":0.01734,"81":0,"82":0.00434,"83":0.00434,"84":0.00867,"85":0,"86":0,"87":0,"88":0.00434,"89":0,"90":0.11271,"91":0.00434,"92":0,"93":0.00434,"94":0,"95":0,"96":0,"97":0.00434,"98":0,"99":0.01301,"100":0.00434,"101":0.00434,"102":0.02168,"103":0.40316,"104":0.07803,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00434,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00434,"48":0.00867,"49":0.02601,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00434,"64":0.00434,"65":0.00867,"66":0,"67":0,"68":0.00434,"69":0,"70":0.00867,"71":0,"72":0,"73":0.00434,"74":0.00434,"75":0.00434,"76":0.01301,"77":0.00434,"78":0.00434,"79":0.02601,"80":0.00434,"81":0.03468,"83":0.04769,"84":0.03902,"85":0.03902,"86":0.03035,"87":0.06069,"88":0.00867,"89":0.02168,"90":0.01734,"91":0.01734,"92":0.01301,"93":0.03902,"94":0.01301,"95":0.02601,"96":0.02601,"97":0.03468,"98":0.02168,"99":0.03902,"100":0.03902,"101":0.05636,"102":0.17774,"103":3.13854,"104":8.59197,"105":0.03035,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01301,"64":0.00434,"65":0,"66":0,"67":0,"68":0,"69":0.01301,"70":0.01301,"71":0.00867,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00434,"85":0.00434,"86":0.00434,"87":0,"88":0.00867,"89":0.75863,"90":0.05202,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00434,"16":0,"17":0,"18":0.04769,"79":0,"80":0,"81":0,"83":0,"84":0.00434,"85":0.00434,"86":0,"87":0,"88":0,"89":0.00867,"90":0,"91":0,"92":0.01301,"93":0,"94":0.00434,"95":0,"96":0.00434,"97":0,"98":0,"99":0.00434,"100":0.00434,"101":0.01734,"102":0.00867,"103":0.39449,"104":1.09676,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00867,"14":0.03468,"15":0.01301,_:"0","3.1":0,"3.2":0,"5.1":0.00434,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00434,"12.1":0.00867,"13.1":0.04769,"14.1":0.09971,"15.1":0.03035,"15.2-15.3":0.01734,"15.4":0.04769,"15.5":0.20808,"15.6":0.31212,"16.0":0.00434},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00492,"6.0-6.1":0,"7.0-7.1":0.08616,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.05662,"10.0-10.2":0,"10.3":0.0517,"11.0-11.2":0.01231,"11.3-11.4":0.02216,"12.0-12.1":0.03447,"12.2-12.5":0.77055,"13.0-13.1":0.02216,"13.2":0.02216,"13.3":0.06647,"13.4-13.7":0.22895,"14.0-14.4":0.75824,"14.5-14.8":1.85868,"15.0-15.1":0.39143,"15.2-15.3":0.64746,"15.4":1.02412,"15.5":5.59083,"15.6":12.59967,"16.0":0.35943},P:{"4":0.13326,"5.0-5.4":0.01025,"6.2-6.4":0.01025,"7.2-7.4":0.12301,"8.2":0,"9.2":0.0205,"10.1":0,"11.1-11.2":0.14351,"12.0":0.01025,"13.0":0.041,"14.0":0.06151,"15.0":0.041,"16.0":0.16402,"17.0":0.5638,"18.0":0.61506},I:{"0":0,"3":0,"4":0.02459,"2.1":0,"2.2":0,"2.3":0,"4.1":0.03689,"4.2-4.3":0.11066,"4.4":0,"4.4.3-4.4.4":0.61477},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00482,"9":0.00482,"10":0,"11":0.03372,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":53.01718},S:{"2.5":0},R:{_:"0"},M:{"0":0.36823},Q:{"10.4":0},O:{"0":0.06798},H:{"0":0.26816}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DZ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DZ.js index 4b5928d7c0a..5f65ba61812 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DZ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/DZ.js @@ -1 +1 @@ -module.exports={C:{"15":0.01468,"29":0.00367,"30":0.00734,"32":0.00367,"33":0.00367,"34":0.00367,"35":0.00367,"36":0.00367,"37":0.00367,"38":0.01101,"39":0.00734,"40":0.00367,"41":0.00367,"43":0.01101,"47":0.01836,"48":0.00734,"52":0.18355,"56":0.00734,"68":0.00367,"72":0.02203,"77":0.00367,"78":0.01468,"79":0.00734,"80":0.00367,"81":0.00367,"83":0.00734,"84":0.07709,"86":0.00367,"87":0.00734,"88":0.01468,"89":0.02937,"90":0.00367,"91":0.05139,"92":0.00734,"93":0.00734,"94":0.02203,"95":0.04405,"96":0.88471,"97":1.68866,"98":0.0257,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 23 24 25 26 27 28 31 42 44 45 46 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 82 85 99 3.5 3.6"},D:{"11":0.00367,"18":0.00734,"22":0.00734,"25":0.00367,"26":0.01101,"30":0.00734,"31":0.01101,"32":0.00734,"33":0.03304,"34":0.00734,"37":0.00367,"38":0.01468,"39":0.02203,"40":0.02937,"42":0.01101,"43":0.24596,"46":0.00367,"47":0.01101,"48":0.00367,"49":0.20191,"50":0.02937,"51":0.01101,"52":0.01468,"53":0.00734,"54":0.00734,"55":0.00734,"56":0.04405,"57":0.00367,"58":0.02203,"60":0.01101,"61":0.02937,"62":0.01101,"63":0.04772,"64":0.01468,"65":0.01101,"66":0.00734,"67":0.01836,"68":0.01468,"69":0.03304,"70":0.02203,"71":0.01468,"72":0.01836,"73":0.01101,"74":0.01468,"75":0.01101,"76":0.01468,"77":0.01468,"78":0.02203,"79":0.08443,"80":0.02937,"81":0.09912,"83":0.04405,"84":0.11747,"85":0.04405,"86":0.12114,"87":0.26431,"88":0.05139,"89":0.06975,"90":0.04405,"91":0.0881,"92":0.09912,"93":0.57268,"94":0.07342,"95":0.18722,"96":0.54331,"97":5.83322,"98":15.70454,"99":0.00734,"100":0.02203,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 19 20 21 23 24 27 28 29 35 36 41 44 45 59 101"},F:{"25":0.00734,"28":0.01468,"77":0.00367,"79":0.00734,"80":0.00734,"81":0.00367,"82":0.20191,"83":1.33257,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00734,"13":0.00734,"14":0.00367,"15":0.00734,"16":0.00734,"17":0.00734,"18":0.01836,"84":0.00734,"85":0.00734,"89":0.00734,"90":0.00367,"92":0.01101,"93":0.00367,"94":0.00734,"95":0.02203,"96":0.02937,"97":0.28634,"98":1.03522,_:"79 80 81 83 86 87 88 91"},E:{"4":0,"11":0.01836,"13":0.03671,"14":0.01836,"15":0.01101,_:"0 5 6 7 8 9 10 12 3.1 3.2 6.1 7.1 9.1 11.1 15.4","5.1":0.01101,"10.1":0.00367,"12.1":0.00367,"13.1":0.02203,"14.1":0.04038,"15.1":0.04772,"15.2-15.3":0.0881},G:{"8":0.00044,"3.2":0.00067,"4.0-4.1":0.00044,"4.2-4.3":0.002,"5.0-5.1":0.00933,"6.0-6.1":0.00244,"7.0-7.1":0.06443,"8.1-8.4":0.004,"9.0-9.2":0.00222,"9.3":0.07887,"10.0-10.2":0.00156,"10.3":0.04732,"11.0-11.2":0.00889,"11.3-11.4":0.00955,"12.0-12.1":0.00689,"12.2-12.5":0.1744,"13.0-13.1":0.00533,"13.2":0.00289,"13.3":0.02488,"13.4-13.7":0.09531,"14.0-14.4":0.15685,"14.5-14.8":0.33814,"15.0-15.1":0.35303,"15.2-15.3":0.82336,"15.4":0.00822},P:{"4":0.25823,"5.0-5.4":0.35318,"6.2-6.4":0.02066,"7.2-7.4":0.15494,"8.2":0.01248,"9.2":0.0723,"10.1":0.02066,"11.1-11.2":0.14461,"12.0":0.05165,"13.0":0.18592,"14.0":0.15494,"15.0":0.15494,"16.0":1.16719},I:{"0":0,"3":0,"4":0.00112,"2.1":0,"2.2":0,"2.3":0.00084,"4.1":0.00224,"4.2-4.3":0.00813,"4.4":0,"4.4.3-4.4.4":0.06362},A:{"8":0.01496,"9":0.01496,"11":0.16831,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.10759},Q:{"10.4":0.01899},O:{"0":0.37974},H:{"0":0.5153},L:{"0":60.21848},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0.00747,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00374,"44":0,"45":0,"46":0,"47":0.00374,"48":0.00747,"49":0,"50":0,"51":0,"52":0.06353,"53":0,"54":0,"55":0,"56":0.00374,"57":0,"58":0,"59":0,"60":0,"61":0.00374,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00374,"69":0,"70":0,"71":0,"72":0.00374,"73":0,"74":0.00374,"75":0,"76":0,"77":0,"78":0.00747,"79":0,"80":0.00374,"81":0.00374,"82":0,"83":0,"84":0.00374,"85":0,"86":0,"87":0,"88":0.00374,"89":0.00374,"90":0,"91":0.02242,"92":0,"93":0,"94":0.00374,"95":0.00747,"96":0.00374,"97":0.00374,"98":0.00374,"99":0.01495,"100":0.01495,"101":0.01869,"102":0.04111,"103":0.85204,"104":0.16069,"105":0.00374,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00374,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.00374,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0.00747,"33":0.00747,"34":0.00374,"35":0,"36":0,"37":0.00374,"38":0.00747,"39":0.00374,"40":0.00747,"41":0,"42":0.00374,"43":0.04858,"44":0,"45":0,"46":0,"47":0.00374,"48":0.00374,"49":0.05979,"50":0.00747,"51":0.02616,"52":0,"53":0,"54":0,"55":0.00374,"56":0.01121,"57":0,"58":0.00374,"59":0,"60":0.00374,"61":0.00374,"62":0.00374,"63":0.01121,"64":0.00747,"65":0.00747,"66":0.00374,"67":0.00747,"68":0.00747,"69":0.00747,"70":0.01121,"71":0.00747,"72":0.00747,"73":0.00374,"74":0.01121,"75":0.00747,"76":0.00747,"77":0.01121,"78":0.00747,"79":0.02616,"80":0.01121,"81":0.04858,"83":0.01495,"84":0.01869,"85":0.02242,"86":0.04484,"87":0.04858,"88":0.01121,"89":0.01869,"90":0.02616,"91":0.01869,"92":0.01869,"93":0.01121,"94":0.01495,"95":0.03363,"96":0.03737,"97":0.03363,"98":0.05232,"99":0.03363,"100":0.04858,"101":0.05232,"102":0.12332,"103":2.22725,"104":6.0502,"105":0.02616,"106":0.00747,"107":0.00374,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00747,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00747,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00374,"62":0,"63":0.0299,"64":0.02616,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00374,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.01495,"80":0,"81":0,"82":0.00374,"83":0,"84":0.00747,"85":0.03737,"86":0.00747,"87":0.00374,"88":0.01121,"89":0.58297,"90":0.08595,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00374},B:{"12":0.00374,"13":0,"14":0.00374,"15":0.00374,"16":0.00374,"17":0.00374,"18":0.00747,"79":0,"80":0,"81":0,"83":0,"84":0.00374,"85":0.00374,"86":0,"87":0,"88":0,"89":0.00374,"90":0.00374,"91":0,"92":0.00747,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00374,"99":0.00374,"100":0,"101":0.03737,"102":0.00747,"103":0.17564,"104":0.51197,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00747,"14":0.00747,"15":0.00374,_:"0","3.1":0,"3.2":0,"5.1":0.00374,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00374,"12.1":0.00374,"13.1":0.00747,"14.1":0.01121,"15.1":0.00747,"15.2-15.3":0.00747,"15.4":0.01495,"15.5":0.04484,"15.6":0.08595,"16.0":0.00374},G:{"8":0.00172,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01373,"6.0-6.1":0.00401,"7.0-7.1":0.07668,"8.1-8.4":0.00229,"9.0-9.2":0.00172,"9.3":0.11502,"10.0-10.2":0.00114,"10.3":0.05379,"11.0-11.2":0.00629,"11.3-11.4":0.01545,"12.0-12.1":0.0103,"12.2-12.5":0.28096,"13.0-13.1":0.00858,"13.2":0.00515,"13.3":0.0515,"13.4-13.7":0.07725,"14.0-14.4":0.17567,"14.5-14.8":0.309,"15.0-15.1":0.16537,"15.2-15.3":0.24605,"15.4":0.42516,"15.5":1.45743,"15.6":2.13207,"16.0":0.08183},P:{"4":0.14571,"5.0-5.4":0.01041,"6.2-6.4":0.03122,"7.2-7.4":0.15612,"8.2":0,"9.2":0.03122,"10.1":0,"11.1-11.2":0.04163,"12.0":0.02082,"13.0":0.08326,"14.0":0.07286,"15.0":0.04163,"16.0":0.1249,"17.0":0.72857,"18.0":0.66612},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01327,"4.2-4.3":0.03483,"4.4":0,"4.4.3-4.4.4":0.22886},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00781,"9":0.00781,"10":0,"11":0.07032,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":75.96852},S:{"2.5":0},R:{_:"0"},M:{"0":0.19415},Q:{"10.4":0.00626},O:{"0":0.48225},H:{"0":0.74118}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EC.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EC.js index 78789effe84..ed641e602db 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EC.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EC.js @@ -1 +1 @@ -module.exports={C:{"52":0.02281,"56":0.00456,"58":0.00456,"60":0.00456,"61":0.00456,"66":0.00912,"70":0.00912,"72":0.01369,"73":0.01369,"78":0.05474,"80":0.00456,"81":0.00912,"82":0.00456,"83":0.00456,"84":0.01369,"87":0.00456,"88":0.04106,"89":0.01825,"90":0.01369,"91":0.04106,"92":0.01825,"93":0.00912,"94":0.01825,"95":0.04562,"96":1.0447,"97":1.76093,"98":0.00456,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 57 59 62 63 64 65 67 68 69 71 74 75 76 77 79 85 86 99 3.5 3.6"},D:{"22":0.00912,"26":0.00456,"38":0.04562,"42":0.01825,"47":0.03193,"49":0.02737,"53":0.01825,"55":0.01825,"56":0.00456,"63":0.00912,"65":0.01369,"66":0.00912,"67":0.00912,"68":0.00456,"70":0.00912,"71":0.00912,"72":0.00456,"74":0.01369,"75":0.01369,"76":0.01825,"77":0.00912,"78":0.01369,"79":0.14598,"80":0.01825,"81":0.01369,"83":0.01825,"84":0.02281,"85":0.02281,"86":0.04106,"87":0.05931,"88":0.01825,"89":0.02737,"90":0.02737,"91":0.52007,"92":0.05018,"93":0.22354,"94":0.04106,"95":0.05474,"96":0.45164,"97":9.34754,"98":23.09284,"99":0.00912,"100":0.01369,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 30 31 32 33 34 35 36 37 39 40 41 43 44 45 46 48 50 51 52 54 57 58 59 60 61 62 64 69 73 101"},F:{"29":0.00912,"80":0.00456,"82":0.44708,"83":1.44159,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00456,"18":0.01825,"89":0.00456,"92":0.01369,"93":0.00456,"95":0.00456,"96":0.01825,"97":0.59306,"98":2.12589,_:"12 13 14 15 16 79 80 81 83 84 85 86 87 88 90 91 94"},E:{"4":0,"13":0.01369,"14":0.05931,"15":0.09124,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.0365,"11.1":0.00912,"12.1":0.01825,"13.1":0.10036,"14.1":0.23722,"15.1":0.12774,"15.2-15.3":0.26003},G:{"8":0.00041,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01641,"6.0-6.1":0.00615,"7.0-7.1":0.0041,"8.1-8.4":0,"9.0-9.2":0.00082,"9.3":0.02092,"10.0-10.2":0,"10.3":0.02215,"11.0-11.2":0.0041,"11.3-11.4":0.03077,"12.0-12.1":0.00369,"12.2-12.5":0.21291,"13.0-13.1":0.00574,"13.2":0.00287,"13.3":0.01231,"13.4-13.7":0.04923,"14.0-14.4":0.1522,"14.5-14.8":0.72775,"15.0-15.1":0.58417,"15.2-15.3":2.22878,"15.4":0.01477},P:{"4":0.22618,"5.0-5.4":0.01013,"6.2-6.4":0.04052,"7.2-7.4":0.10281,"8.2":0.02051,"9.2":0.01079,"10.1":0.06153,"11.1-11.2":0.06168,"12.0":0.03084,"13.0":0.09253,"14.0":0.08225,"15.0":0.10281,"16.0":1.36735},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00564,"4.2-4.3":0.00423,"4.4":0,"4.4.3-4.4.4":0.06626},A:{"11":0.06843,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.11964},Q:{"10.4":0},O:{"0":0.02719},H:{"0":0.08752},L:{"0":32.09561},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00532,"48":0,"49":0,"50":0,"51":0,"52":0.01065,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.01065,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00532,"73":0.01065,"74":0,"75":0,"76":0,"77":0,"78":0.0213,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00532,"85":0,"86":0,"87":0,"88":0.0213,"89":0.01065,"90":0.03194,"91":0.03194,"92":0.00532,"93":0.00532,"94":0.00532,"95":0.00532,"96":0.01065,"97":0.00532,"98":0.01065,"99":0.02662,"100":0.02662,"101":0.0213,"102":0.06921,"103":1.4641,"104":0.31412,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.01597,"39":0,"40":0,"41":0.01065,"42":0,"43":0,"44":0,"45":0,"46":0.00532,"47":0.00532,"48":0,"49":0.01597,"50":0,"51":0,"52":0,"53":0.00532,"54":0,"55":0.00532,"56":0.00532,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00532,"64":0,"65":0.00532,"66":0.00532,"67":0.00532,"68":0.00532,"69":0.00532,"70":0.00532,"71":0,"72":0.00532,"73":0.00532,"74":0.01597,"75":0.01597,"76":0.00532,"77":0.00532,"78":0.00532,"79":0.06921,"80":0.01065,"81":0.01597,"83":0.01597,"84":0.01597,"85":0.01597,"86":0.03194,"87":0.03727,"88":0.01065,"89":0.02662,"90":0.01065,"91":0.1544,"92":0.0213,"93":0.01065,"94":0.01597,"95":0.01065,"96":0.04259,"97":0.07454,"98":0.05856,"99":0.03727,"100":0.04792,"101":0.05856,"102":0.14907,"103":4.76498,"104":14.77942,"105":0.05324,"106":0.00532,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00532,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00532,"64":0.00532,"65":0,"66":0,"67":0,"68":0.00532,"69":0.00532,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00532,"86":0.00532,"87":0,"88":0.01597,"89":1.14998,"90":0.07986,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00532,"16":0,"17":0,"18":0.00532,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.01065,"93":0.00532,"94":0,"95":0.00532,"96":0,"97":0,"98":0,"99":0.00532,"100":0.00532,"101":0.01065,"102":0.01065,"103":0.48448,"104":1.41086,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00532,"14":0.03727,"15":0.01065,_:"0","3.1":0,"3.2":0,"5.1":0.00532,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00532,"12.1":0.00532,"13.1":0.05324,"14.1":0.07986,"15.1":0.0213,"15.2-15.3":0.01597,"15.4":0.04792,"15.5":0.18634,"15.6":0.2875,"16.0":0.00532},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0176,"6.0-6.1":0.02346,"7.0-7.1":0.00293,"8.1-8.4":0,"9.0-9.2":0.00098,"9.3":0.03715,"10.0-10.2":0,"10.3":0.0303,"11.0-11.2":0.00293,"11.3-11.4":0.00489,"12.0-12.1":0.0088,"12.2-12.5":0.34409,"13.0-13.1":0.00391,"13.2":0.00587,"13.3":0.02151,"13.4-13.7":0.05181,"14.0-14.4":0.17693,"14.5-14.8":0.4741,"15.0-15.1":0.17204,"15.2-15.3":0.13783,"15.4":0.29032,"15.5":2.01369,"15.6":5.81722,"16.0":0.1349},P:{"4":0.21683,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.13423,"8.2":0,"9.2":0.01033,"10.1":0,"11.1-11.2":0.0413,"12.0":0.01033,"13.0":0.05163,"14.0":0.0413,"15.0":0.03098,"16.0":0.11358,"17.0":0.75375,"18.0":0.87765},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00734,"4.2-4.3":0.04769,"4.4":0,"4.4.3-4.4.4":0.19808},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02662,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":58.14475},S:{"2.5":0},R:{_:"0"},M:{"0":0.2151},Q:{"10.4":0},O:{"0":0.02806},H:{"0":0.17708}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EE.js index bafa9959fae..654b7b82b6e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EE.js @@ -1 +1 @@ -module.exports={C:{"52":0.04458,"55":0.00637,"68":0.08915,"72":0.0191,"78":0.02547,"81":0.03821,"87":0.26746,"88":0.01274,"89":0.00637,"90":0.00637,"91":0.10826,"92":0.00637,"93":0.02547,"94":0.03821,"95":0.07005,"96":1.66842,"97":2.49626,"98":0.0191,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 79 80 82 83 84 85 86 99 3.5 3.6"},D:{"34":0.00637,"49":0.04458,"60":0.02547,"64":0.00637,"69":0.9552,"74":0.01274,"75":0.01274,"76":0.01274,"78":0.00637,"79":0.04458,"80":0.0191,"81":0.00637,"83":0.04458,"84":0.04458,"85":0.0191,"86":0.05731,"87":0.03821,"88":0.06368,"89":0.03821,"90":0.03184,"91":2.89107,"92":0.07642,"93":0.44576,"94":0.08278,"95":0.24835,"96":0.63043,"97":11.85722,"98":25.31917,"99":0.01274,"100":0.00637,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 61 62 63 65 66 67 68 70 71 72 73 77 101"},F:{"36":0.03184,"46":0.00637,"72":0.01274,"77":0.01274,"78":0.00637,"79":0.01274,"80":0.01274,"81":0.01274,"82":0.73869,"83":4.58496,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 73 74 75 76 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.00637,"85":0.01274,"88":0.01274,"89":0.01274,"90":0.00637,"92":0.01274,"93":0.00637,"94":0.00637,"95":0.01274,"96":0.03821,"97":0.98067,"98":3.30499,_:"12 13 14 15 16 17 79 80 81 83 84 86 87 91"},E:{"4":0,"13":0.05731,"14":0.35661,"15":0.24198,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.0191,"12.1":0.06368,"13.1":0.32477,"14.1":0.85968,"15.1":0.50307,"15.2-15.3":0.98704,"15.4":0.0191},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00118,"6.0-6.1":0,"7.0-7.1":0.00118,"8.1-8.4":0.00236,"9.0-9.2":0,"9.3":0.0165,"10.0-10.2":0.0106,"10.3":0.15082,"11.0-11.2":0.00707,"11.3-11.4":0.00589,"12.0-12.1":0.00825,"12.2-12.5":0.22034,"13.0-13.1":0.00943,"13.2":0.00353,"13.3":0.02239,"13.4-13.7":0.11547,"14.0-14.4":0.5267,"14.5-14.8":1.88526,"15.0-15.1":1.92886,"15.2-15.3":6.77752,"15.4":0.08484},P:{"4":0.03326,"5.0-5.4":0.0307,"6.2-6.4":0.05116,"7.2-7.4":0.29673,"8.2":0.0104,"9.2":0.06139,"10.1":0.01109,"11.1-11.2":0.03326,"12.0":0.02217,"13.0":0.06652,"14.0":0.11086,"15.0":0.08869,"16.0":2.42793},I:{"0":0,"3":0,"4":0.00119,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00079,"4.2-4.3":0.00278,"4.4":0,"4.4.3-4.4.4":0.02066},A:{"8":0.01987,"11":0.31127,_:"6 7 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.3197},Q:{"10.4":0},O:{"0":0.03633},H:{"0":0.25796},L:{"0":20.91212},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.02572,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00643,"67":0,"68":0.00643,"69":0.01929,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01929,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.03215,"85":0,"86":0,"87":0.06429,"88":0.00643,"89":0,"90":0,"91":0.07715,"92":0.01286,"93":0,"94":0,"95":0,"96":0.01929,"97":0.00643,"98":0.00643,"99":0.01286,"100":0.01286,"101":0.27645,"102":0.1543,"103":2.32087,"104":0.63647,"105":0.00643,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00643,"35":0,"36":0,"37":0,"38":0,"39":0.01286,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01286,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.01929,"61":0,"62":0,"63":0.05786,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.88077,"70":0,"71":0,"72":0.00643,"73":0,"74":0.00643,"75":0,"76":0.00643,"77":0,"78":0.03857,"79":0.03857,"80":0.00643,"81":0.01286,"83":0.01286,"84":0.01286,"85":0.00643,"86":0.01286,"87":0.02572,"88":0.01929,"89":0.01929,"90":0.01929,"91":2.20515,"92":0.01929,"93":0.07072,"94":0.02572,"95":0.01286,"96":0.02572,"97":0.03857,"98":0.045,"99":0.03857,"100":0.08358,"101":0.12858,"102":0.27645,"103":6.429,"104":15.80248,"105":0.05143,"106":0.00643,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00643,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00643,"80":0,"81":0,"82":0.00643,"83":0,"84":0,"85":0.00643,"86":0,"87":0,"88":0.01929,"89":2.84162,"90":0.57861,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00643,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0.00643,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.01929,"93":0,"94":0.00643,"95":0,"96":0.00643,"97":0.00643,"98":0.00643,"99":0,"100":0.00643,"101":0.01286,"102":0.01929,"103":0.79077,"104":2.33373,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.01286,"13":0.01286,"14":0.09644,"15":0.02572,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00643,"12.1":0.03215,"13.1":0.10286,"14.1":0.27645,"15.1":0.07715,"15.2-15.3":0.05143,"15.4":0.19287,"15.5":0.68147,"15.6":0.97078,"16.0":0.01286},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00994,"10.0-10.2":0.0159,"10.3":0.31797,"11.0-11.2":0.01391,"11.3-11.4":0.00994,"12.0-12.1":0.01192,"12.2-12.5":0.33585,"13.0-13.1":0.00994,"13.2":0.00994,"13.3":0.02385,"13.4-13.7":0.12719,"14.0-14.4":0.31399,"14.5-14.8":1.05525,"15.0-15.1":0.28816,"15.2-15.3":0.57433,"15.4":0.8903,"15.5":5.29016,"15.6":10.28222,"16.0":0.28418},P:{"4":0.08236,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01029,"12.0":0.01029,"13.0":0.04118,"14.0":0.05147,"15.0":0.02059,"16.0":0.08236,"17.0":0.98829,"18.0":1.17359},I:{"0":0,"3":0,"4":0.00357,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00714,"4.2-4.3":0.0125,"4.4":0,"4.4.3-4.4.4":0.06964},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.51432,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":34.12911},S:{"2.5":0},R:{_:"0"},M:{"0":0.27497},Q:{"10.4":0},O:{"0":0.01786},H:{"0":0.31103}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EG.js index 7d90922b39a..6b0fb3f22b6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/EG.js @@ -1 +1 @@ -module.exports={C:{"52":0.03787,"84":0.01082,"91":0.01623,"95":0.01082,"96":14.65028,"97":31.03176,"98":0.01082,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 85 86 87 88 89 90 92 93 94 99 3.5 3.6"},D:{"33":0.00541,"40":0.01082,"43":0.1082,"49":0.02164,"79":0.06492,"80":0.01082,"81":0.00541,"83":0.00541,"84":0.00541,"85":0.00541,"86":0.02705,"87":0.01623,"88":0.01082,"89":0.02164,"90":0.01082,"91":0.01623,"92":0.03246,"93":0.01623,"94":0.01623,"95":0.02164,"96":0.12443,"97":1.68251,"98":4.4903,"100":0.00541,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 41 42 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 99 101"},F:{"64":0.01082,"72":0.01082,"73":0.01082,"79":0.01623,"80":0.01082,"81":0.01623,"82":0.03246,"83":0.01623,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 65 66 67 68 69 70 71 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.00541,"96":0.01082,"97":0.1082,"98":0.43821,_:"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95"},E:{"4":0,"14":0.01623,"15":0.01082,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 6.1 7.1 9.1 10.1 11.1 12.1 15.4","5.1":0.00541,"13.1":0.01623,"14.1":0.03787,"15.1":0.02164,"15.2-15.3":0.02705},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00098,"6.0-6.1":0.00293,"7.0-7.1":0.01027,"8.1-8.4":0.00147,"9.0-9.2":0.00293,"9.3":0.05133,"10.0-10.2":0.01467,"10.3":0.1315,"11.0-11.2":0.01662,"11.3-11.4":0.04106,"12.0-12.1":0.02786,"12.2-12.5":1.35456,"13.0-13.1":0.01467,"13.2":0.00831,"13.3":0.06648,"13.4-13.7":0.20189,"14.0-14.4":0.76649,"14.5-14.8":0.45462,"15.0-15.1":0.42871,"15.2-15.3":1.28564,"15.4":0.00538},P:{"4":0.18696,"5.0-5.4":0.01013,"6.2-6.4":0.04052,"7.2-7.4":0.09348,"8.2":0.02051,"9.2":0.02077,"10.1":0.06153,"11.1-11.2":0.10387,"12.0":0.02077,"13.0":0.11425,"14.0":0.11425,"15.0":0.10387,"16.0":1.05942},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00292,"4.2-4.3":0.00876,"4.4":0,"4.4.3-4.4.4":0.22241},A:{"11":0.03787,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.07344},Q:{"10.4":0},O:{"0":0.15606},H:{"0":0.21728},L:{"0":37.45262},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00258,"52":0.02321,"53":0,"54":0,"55":0.00258,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00258,"69":0,"70":0,"71":0,"72":0.00258,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00258,"79":0,"80":0.00258,"81":0,"82":0,"83":0,"84":0.00516,"85":0,"86":0,"87":0,"88":0.00258,"89":0,"90":0,"91":0.00774,"92":0,"93":0,"94":0.00258,"95":0,"96":0.00258,"97":0,"98":0.00258,"99":0.00516,"100":0.00516,"101":0.00516,"102":0.02063,"103":0.39459,"104":0.07995,"105":0.00258,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.00258,"27":0,"28":0,"29":0,"30":0,"31":0.00258,"32":0,"33":0.00258,"34":0,"35":0,"36":0,"37":0,"38":0.00258,"39":0,"40":0.00516,"41":0.00258,"42":0,"43":0.05158,"44":0,"45":0,"46":0.00258,"47":0.00258,"48":0,"49":0.01032,"50":0,"51":0,"52":0,"53":0.00258,"54":0,"55":0,"56":0,"57":0,"58":0.00258,"59":0,"60":0.00258,"61":0.00258,"62":0,"63":0.00516,"64":0.00258,"65":0,"66":0,"67":0.00258,"68":0.00258,"69":0.00516,"70":0.00258,"71":0.00516,"72":0.00258,"73":0.00258,"74":0.00516,"75":0.00258,"76":0.00774,"77":0.00258,"78":0.00258,"79":0.02579,"80":0.00774,"81":0.02579,"83":0.00516,"84":0.00516,"85":0.00774,"86":0.02321,"87":0.0129,"88":0.00774,"89":0.01032,"90":0.00516,"91":0.00774,"92":0.01547,"93":0.00516,"94":0.00516,"95":0.01032,"96":0.0129,"97":0.0129,"98":0.02579,"99":0.01032,"100":0.01805,"101":0.02063,"102":0.049,"103":1.11413,"104":3.30112,"105":0.0129,"106":0.00258,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00258,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00258,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.00258,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00258,"64":0.00516,"65":0,"66":0.00258,"67":0,"68":0.00258,"69":0.00258,"70":0.00258,"71":0.00258,"72":0.00774,"73":0.00516,"74":0,"75":0,"76":0.00258,"77":0,"78":0,"79":0.01032,"80":0.00516,"81":0.00516,"82":0.00774,"83":0.00774,"84":0.00516,"85":0.00774,"86":0.00516,"87":0.00516,"88":0.01032,"89":0.01805,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00258,"15":0.00258,"16":0,"17":0,"18":0.00516,"79":0,"80":0,"81":0,"83":0,"84":0.00258,"85":0,"86":0,"87":0,"88":0,"89":0.00258,"90":0,"91":0,"92":0.00516,"93":0,"94":0,"95":0,"96":0.00258,"97":0,"98":0,"99":0.00258,"100":0.00258,"101":0.00258,"102":0.00258,"103":0.12895,"104":0.36364,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00258,"14":0.00774,"15":0.00258,_:"0","3.1":0,"3.2":0,"5.1":0.01032,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00258,"13.1":0.00774,"14.1":0.02579,"15.1":0.00258,"15.2-15.3":0.00258,"15.4":0.00774,"15.5":0.02837,"15.6":0.03869,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00109,"6.0-6.1":0.00109,"7.0-7.1":0.0153,"8.1-8.4":0,"9.0-9.2":0.00983,"9.3":0.03933,"10.0-10.2":0.01639,"10.3":0.11363,"11.0-11.2":0.00765,"11.3-11.4":0.02731,"12.0-12.1":0.02513,"12.2-12.5":1.23242,"13.0-13.1":0.0142,"13.2":0.00874,"13.3":0.05791,"13.4-13.7":0.18464,"14.0-14.4":0.48401,"14.5-14.8":0.55721,"15.0-15.1":0.19994,"15.2-15.3":0.32012,"15.4":0.46762,"15.5":2.43753,"15.6":4.59973,"16.0":0.10489},P:{"4":0.23816,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.1139,"8.2":0,"9.2":0.01035,"10.1":0.01035,"11.1-11.2":0.07248,"12.0":0.03106,"13.0":0.08284,"14.0":0.10355,"15.0":0.04142,"16.0":0.14497,"17.0":0.963,"18.0":0.85946},I:{"0":0,"3":0,"4":0.00696,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00696,"4.2-4.3":0.04524,"4.4":0,"4.4.3-4.4.4":0.28015},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00276,"9":0.00276,"10":0,"11":0.03316,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":77.5262},S:{"2.5":0},R:{_:"0"},M:{"0":0.17068},Q:{"10.4":0},O:{"0":0.43042},H:{"0":0.39344}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ER.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ER.js index b83d2f4c875..0e81e0d25ab 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ER.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ER.js @@ -1 +1 @@ -module.exports={C:{"31":0.00252,"34":0.00504,"37":0.00755,"39":0.00252,"42":0.00504,"43":0.00755,"44":0.00504,"45":0.00504,"46":0.00504,"47":0.01007,"48":0.00504,"50":0.0277,"52":0.02518,"53":0.01007,"55":0.00252,"57":0.02014,"59":0.06043,"60":0.01007,"61":0.00755,"69":0.00504,"70":0.00504,"72":0.03273,"78":0.01007,"82":0.02014,"84":0.09568,"85":0.00252,"88":0.01511,"89":0.02266,"91":0.05288,"94":0.00755,"95":0.01511,"96":1.36476,"97":1.03238,"98":0.0705,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 35 36 38 40 41 49 51 54 56 58 62 63 64 65 66 67 68 71 73 74 75 76 77 79 80 81 83 86 87 90 92 93 99 3.5 3.6"},D:{"11":0.01007,"30":0.08058,"33":0.01007,"34":0.00504,"35":0.05036,"36":0.00252,"38":0.00252,"39":0.00755,"40":0.11835,"43":0.08058,"49":0.00755,"50":0.02014,"52":0.06295,"54":0.00252,"55":0.00755,"56":0.03273,"58":0.00755,"59":0.00252,"60":0.00504,"63":0.00755,"64":0.00504,"65":0.0277,"67":0.00504,"68":0.00252,"69":0.01259,"71":0.00504,"72":0.00252,"74":0.0277,"75":0.00504,"76":0.00252,"77":0.00252,"79":0.02266,"80":0.01763,"81":0.00504,"83":0.01511,"85":0.01259,"86":0.01259,"87":0.02014,"88":0.00504,"89":0.00504,"90":0.01763,"91":0.04281,"92":0.04281,"93":0.01259,"94":0.02518,"95":0.01511,"96":0.25684,"97":3.78959,"98":7.20652,"99":0.04281,"100":0.01259,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 37 41 42 44 45 46 47 48 51 53 57 61 62 66 70 73 78 84 101"},F:{"28":0.00252,"34":0.00252,"38":0.00252,"69":0.00504,"70":0.00252,"79":0.00504,"80":0.02266,"82":0.09568,"83":0.7,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 71 72 73 74 75 76 77 78 81 9.5-9.6 10.5 11.1 11.5 11.6 12.1","10.0-10.1":0,"10.6":0.00755},B:{"12":0.05791,"13":0.0277,"14":0.01511,"15":0.00755,"16":0.01511,"17":0.01259,"18":0.02266,"84":0.00504,"85":0.00504,"89":0.00755,"90":0.01511,"92":0.02518,"93":0.00252,"94":0.00504,"95":0.01511,"96":0.03273,"97":0.31979,"98":0.79065,_:"79 80 81 83 86 87 88 91"},E:{"4":0,_:"0 5 6 7 8 9 10 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 13.1 15.4","14.1":0.01259,"15.1":0.03273,"15.2-15.3":0.03777},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00131,"6.0-6.1":0,"7.0-7.1":0.08736,"8.1-8.4":0,"9.0-9.2":0.00879,"9.3":0.00636,"10.0-10.2":0.00037,"10.3":0.02114,"11.0-11.2":0.00299,"11.3-11.4":0.01328,"12.0-12.1":0.07539,"12.2-12.5":0.44167,"13.0-13.1":0.00711,"13.2":0.00037,"13.3":0.1375,"13.4-13.7":0.00673,"14.0-14.4":0.13469,"14.5-14.8":0.72527,"15.0-15.1":0.06098,"15.2-15.3":0.13824,"15.4":0.00094},P:{"4":0.32743,"5.0-5.4":0.0307,"6.2-6.4":0.05116,"7.2-7.4":0.29673,"8.2":0.0104,"9.2":0.06139,"10.1":0.01023,"11.1-11.2":0.12279,"12.0":0.03121,"13.0":0.05116,"14.0":0.08186,"15.0":0.10232,"16.0":0.75718},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00104,"4.2-4.3":0.02501,"4.4":0,"4.4.3-4.4.4":0.04128},A:{"11":0.0982,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.07482},Q:{"10.4":0},O:{"0":2.28201},H:{"0":9.48477},L:{"0":63.88741},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.0019,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.0019,"44":0,"45":0,"46":0,"47":0.0019,"48":0,"49":0,"50":0,"51":0,"52":0.0019,"53":0.0038,"54":0,"55":0,"56":0.0019,"57":0.0019,"58":0,"59":0,"60":0.0038,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0.0019,"84":0,"85":0,"86":0,"87":0,"88":0.0057,"89":0,"90":0,"91":0.0019,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.0019,"98":0,"99":0,"100":0,"101":0,"102":0.04372,"103":0.21862,"104":0.03042,"105":0.0076,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.0019,"38":0,"39":0,"40":0.0038,"41":0,"42":0.0019,"43":0.0038,"44":0,"45":0,"46":0.0019,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.00951,"55":0,"56":0.01331,"57":0,"58":0.0038,"59":0,"60":0,"61":0.0038,"62":0,"63":0.0019,"64":0.0019,"65":0.0038,"66":0,"67":0,"68":0.01141,"69":0.0019,"70":0.0038,"71":0.0019,"72":0,"73":0,"74":0.0019,"75":0.0019,"76":0,"77":0.0019,"78":0,"79":0.01141,"80":0.0019,"81":0.0019,"83":0.0019,"84":0,"85":0.0038,"86":0.0076,"87":0.00951,"88":0,"89":0.0019,"90":0,"91":0.0019,"92":0,"93":0,"94":0.02281,"95":0.0057,"96":0.0076,"97":0.0038,"98":0.05323,"99":0.0057,"100":0.0038,"101":0.00951,"102":0.01901,"103":0.35359,"104":0.93719,"105":0.0057,"106":0.0057,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0.0019,"21":0,"22":0.0019,"23":0,"24":0.0038,"25":0,"26":0.0019,"27":0.0019,"28":0.0038,"29":0,"30":0.0038,"31":0,"32":0.0076,"33":0.0038,"34":0.0057,"35":0.0038,"36":0,"37":0,"38":0.02281,"39":0,"40":0,"41":0,"42":0.0076,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.0019,"51":0,"52":0,"53":0,"54":0.0019,"55":0.0019,"56":0,"57":0.0019,"58":0.00951,"60":0.01901,"62":0,"63":0.15778,"64":0.09125,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.0057,"71":0.0019,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0.0019,"83":0.0019,"84":0.0019,"85":0,"86":0,"87":0.0019,"88":0.0019,"89":0.13307,"90":0.01521,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.03422},B:{"12":0.0038,"13":0.0019,"14":0.0019,"15":0.01331,"16":0.0019,"17":0.0019,"18":0.0038,"79":0,"80":0,"81":0,"83":0,"84":0.0038,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.01141,"91":0,"92":0.0057,"93":0,"94":0,"95":0,"96":0,"97":0.0019,"98":0,"99":0,"100":0,"101":0.0019,"102":0.0038,"103":0.06654,"104":0.16539,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.0019,"14.1":0,"15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0.0019,"15.6":0,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.04267,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.09143,"10.0-10.2":0,"10.3":0.03962,"11.0-11.2":0.00914,"11.3-11.4":0.05729,"12.0-12.1":0.00244,"12.2-12.5":0.19017,"13.0-13.1":0.02987,"13.2":0.00305,"13.3":0.03169,"13.4-13.7":0.00914,"14.0-14.4":0.06948,"14.5-14.8":0.14628,"15.0-15.1":0.02316,"15.2-15.3":0.13043,"15.4":0.02072,"15.5":0.14201,"15.6":0.17371,"16.0":0.0067},P:{"4":0.64076,"5.0-5.4":0.02034,"6.2-6.4":0.03051,"7.2-7.4":0.50854,"8.2":0,"9.2":0.0712,"10.1":0,"11.1-11.2":0.22376,"12.0":0.02034,"13.0":0.02034,"14.0":0.10171,"15.0":0.04068,"16.0":0.14239,"17.0":0.53905,"18.0":0.26444},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00502,"4.2-4.3":0.09273,"4.4":0,"4.4.3-4.4.4":0.31746},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0038,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":77.19134},S:{"2.5":0},R:{_:"0"},M:{"0":0.19438},Q:{"10.4":0},O:{"0":1.44972},H:{"0":10.83433}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ES.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ES.js index 8f61154d8b3..066b566430f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ES.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ES.js @@ -1 +1 @@ -module.exports={C:{"48":0.00455,"52":0.0773,"55":0.00909,"59":0.00455,"60":0.01364,"64":0.00455,"66":0.00455,"67":0.01819,"68":0.01819,"69":0.00455,"72":0.00909,"78":0.09094,"79":0.00455,"82":0.00455,"83":0.00455,"84":0.00909,"85":0.00909,"86":0.00909,"87":0.00455,"88":0.04092,"89":0.00909,"90":0.00909,"91":0.10913,"92":0.00909,"93":0.09094,"94":0.18643,"95":0.07275,"96":1.06855,"97":1.63237,"98":0.00909,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 56 57 58 61 62 63 65 70 71 73 74 75 76 77 80 81 99 3.5 3.6"},D:{"38":0.01364,"49":0.12277,"53":0.00455,"60":0.00455,"61":0.00455,"63":0.00909,"64":0.00455,"65":0.01364,"66":0.02274,"67":0.01819,"68":0.01364,"69":0.02274,"70":0.00909,"71":0.00909,"72":0.00909,"73":0.00909,"74":0.01364,"75":0.0773,"76":0.01364,"77":0.01364,"78":0.01819,"79":0.13641,"80":0.03183,"81":0.02728,"83":0.03183,"84":0.05002,"85":0.04092,"86":0.05456,"87":0.10458,"88":0.03183,"89":0.06821,"90":0.05911,"91":0.09549,"92":0.06366,"93":0.26373,"94":0.17279,"95":0.10003,"96":0.48653,"97":9.43048,"98":19.54301,"99":0.00909,"100":0.00909,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 56 57 58 59 62 101"},F:{"36":0.00455,"46":0.00455,"82":0.41378,"83":1.0549,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.00455,"17":0.00909,"18":0.01364,"86":0.00455,"87":0.00455,"90":0.00455,"91":0.00909,"92":0.01819,"93":0.00455,"94":0.00909,"95":0.02274,"96":0.03638,"97":0.74571,"98":2.76912,_:"12 13 14 15 79 80 81 83 84 85 88 89"},E:{"4":0,"12":0.00455,"13":0.04547,"14":0.28646,"15":0.20007,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.00909,"10.1":0.00909,"11.1":0.03638,"12.1":0.07275,"13.1":0.27282,"14.1":0.91395,"15.1":0.52291,"15.2-15.3":1.03217,"15.4":0.00455},G:{"8":0.00102,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00205,"6.0-6.1":0.00102,"7.0-7.1":0.00512,"8.1-8.4":0.00512,"9.0-9.2":0.00205,"9.3":0.07471,"10.0-10.2":0.00307,"10.3":0.08393,"11.0-11.2":0.01433,"11.3-11.4":0.02866,"12.0-12.1":0.0174,"12.2-12.5":0.39916,"13.0-13.1":0.02456,"13.2":0.00614,"13.3":0.05424,"13.4-13.7":0.15045,"14.0-14.4":0.47182,"14.5-14.8":1.85147,"15.0-15.1":1.53317,"15.2-15.3":5.4797,"15.4":0.02252},P:{"4":0.13775,"5.0-5.4":0.05095,"6.2-6.4":0.01009,"7.2-7.4":0.55497,"8.2":0.01009,"9.2":0.05045,"10.1":0.05045,"11.1-11.2":0.07417,"12.0":0.03179,"13.0":0.10596,"14.0":0.10596,"15.0":0.09537,"16.0":2.04509},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00273,"4.2-4.3":0.00818,"4.4":0,"4.4.3-4.4.4":0.05454},A:{"9":0.00924,"11":0.27722,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.22907},Q:{"10.4":0},O:{"0":0.03818},H:{"0":0.20138},L:{"0":41.19799},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00394,"49":0,"50":0,"51":0,"52":0.02755,"53":0,"54":0,"55":0,"56":0.00394,"57":0,"58":0,"59":0.00394,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00394,"67":0,"68":0.00394,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01968,"79":0,"80":0.00394,"81":0.00394,"82":0,"83":0,"84":0.00394,"85":0,"86":0,"87":0,"88":0.00787,"89":0.00394,"90":0.00787,"91":0.03148,"92":0,"93":0,"94":0.04722,"95":0.00394,"96":0.00394,"97":0.00394,"98":0.00394,"99":0.00787,"100":0.00787,"101":0.01181,"102":0.03542,"103":0.84996,"104":0.18888,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00394,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.03542,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00394,"61":0,"62":0,"63":0,"64":0.00394,"65":0.01181,"66":0.01968,"67":0.00394,"68":0.00787,"69":0.01574,"70":0.00394,"71":0.00394,"72":0.00394,"73":0,"74":0.00394,"75":0.01968,"76":0.00394,"77":0.00394,"78":0.00787,"79":0.07083,"80":0.00787,"81":0.01574,"83":0.01181,"84":0.01968,"85":0.01574,"86":0.01968,"87":0.02755,"88":0.00787,"89":0.01968,"90":0.00787,"91":0.01181,"92":0.01968,"93":0.01968,"94":0.01574,"95":0.01574,"96":0.01968,"97":0.01574,"98":0.0787,"99":0.02361,"100":0.03148,"101":0.03935,"102":0.10625,"103":2.37281,"104":6.74066,"105":0.02361,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00394,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00394,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00394,"64":0.00394,"65":0,"66":0,"67":0,"68":0.00394,"69":0,"70":0,"71":0.00394,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0.00394,"81":0,"82":0,"83":0,"84":0,"85":0.00394,"86":0,"87":0,"88":0.00787,"89":0.52336,"90":0.04722,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00394,"16":0.00394,"17":0.00394,"18":0.00394,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00787,"93":0,"94":0,"95":0.00394,"96":0,"97":0.00394,"98":0.00394,"99":0.00394,"100":0.00394,"101":0.01968,"102":0.01181,"103":0.36596,"104":1.08213,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01181,"14":0.05116,"15":0.01574,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00394,"10.1":0.00394,"11.1":0.01181,"12.1":0.02361,"13.1":0.0787,"14.1":0.12592,"15.1":0.02755,"15.2-15.3":0.02361,"15.4":0.07083,"15.5":0.27545,"15.6":0.42498,"16.0":0.00394},G:{"8":0.00178,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00533,"6.0-6.1":0,"7.0-7.1":0.00355,"8.1-8.4":0.00355,"9.0-9.2":0.00355,"9.3":0.10309,"10.0-10.2":0.00178,"10.3":0.10664,"11.0-11.2":0.016,"11.3-11.4":0.05687,"12.0-12.1":0.02311,"12.2-12.5":0.52964,"13.0-13.1":0.01777,"13.2":0.00889,"13.3":0.04799,"13.4-13.7":0.15818,"14.0-14.4":0.39634,"14.5-14.8":0.99886,"15.0-15.1":0.27904,"15.2-15.3":0.45855,"15.4":0.74648,"15.5":4.38822,"15.6":9.28298,"16.0":0.11553},P:{"4":0.14611,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01044,"8.2":0,"9.2":0.01044,"10.1":0,"11.1-11.2":0.04175,"12.0":0.02087,"13.0":0.06262,"14.0":0.06262,"15.0":0.03131,"16.0":0.09393,"17.0":0.89753,"18.0":1.38804},I:{"0":0,"3":0,"4":0.01613,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01075,"4.2-4.3":0.03763,"4.4":0,"4.4.3-4.4.4":0.18813},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00411,"9":0.00411,"10":0,"11":0.08228,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":60.90283},S:{"2.5":0},R:{_:"0"},M:{"0":0.31538},Q:{"10.4":0},O:{"0":0.03639},H:{"0":0.21819}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ET.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ET.js index 7c9b798e0e6..3dbf879c1b3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ET.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ET.js @@ -1 +1 @@ -module.exports={C:{"28":0.00724,"29":0.01448,"30":0.00724,"34":0.01086,"35":0.01086,"36":0.00362,"37":0.00362,"38":0.00724,"39":0.02895,"41":0.00362,"43":0.00724,"44":0.00724,"47":0.01448,"48":0.00724,"52":0.24609,"56":0.00362,"60":0.03257,"61":0.00724,"64":0.01086,"65":0.00362,"67":0.03257,"68":0.02171,"72":0.03619,"77":0.05067,"78":0.02533,"79":0.01086,"81":0.01086,"84":0.19905,"85":0.00724,"86":0.01448,"87":0.00724,"88":0.04343,"89":0.02895,"90":0.01448,"91":0.09048,"92":0.0181,"93":0.00724,"94":0.01448,"95":0.0579,"96":1.76245,"97":2.79025,"98":0.39085,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 31 32 33 40 42 45 46 49 50 51 53 54 55 57 58 59 62 63 66 69 70 71 73 74 75 76 80 82 83 99 3.5 3.6"},D:{"11":0.01086,"30":0.00362,"33":0.01448,"37":0.00362,"38":0.01448,"40":0.09771,"42":0.00724,"43":0.12305,"44":0.02171,"45":0.00724,"46":0.02895,"49":0.01086,"50":0.00724,"53":0.00362,"55":0.00362,"56":0.02533,"57":0.01448,"58":0.00724,"60":0.00724,"63":0.02171,"64":0.02171,"65":0.01448,"66":0.00724,"67":0.00362,"68":0.01086,"69":0.00724,"70":0.0181,"71":0.01086,"72":0.00362,"73":0.00362,"74":0.01086,"75":0.00724,"76":0.00724,"77":0.01086,"78":0.0181,"79":0.36552,"80":0.03257,"81":0.04705,"83":0.01448,"84":0.0181,"85":0.02171,"86":0.09409,"87":0.06514,"88":0.04343,"89":0.03257,"90":0.06514,"91":0.05429,"92":0.19543,"93":0.04705,"94":0.06152,"95":0.08686,"96":0.33657,"97":5.13898,"98":13.32154,"99":0.04343,"100":0.20266,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 34 35 36 39 41 47 48 51 52 54 59 61 62 101"},F:{"28":0.00724,"77":0.00724,"79":0.01086,"80":0.00724,"81":0.00362,"82":0.17733,"83":1.76969,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.05429,"13":0.03257,"14":0.01448,"15":0.01448,"16":0.02171,"17":0.02171,"18":0.09771,"84":0.03257,"85":0.02895,"89":0.01448,"90":0.00362,"91":0.00362,"92":0.04705,"93":0.00362,"94":0.00724,"95":0.01086,"96":0.11219,"97":0.6478,"98":2.16054,_:"79 80 81 83 86 87 88"},E:{"4":0,"7":0.00724,"8":0.00724,"13":0.01086,"14":0.01448,"15":0.00724,_:"0 5 6 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00362,"12.1":0.01086,"13.1":0.01086,"14.1":0.03981,"15.1":0.02171,"15.2-15.3":0.0181},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00085,"5.0-5.1":0.00057,"6.0-6.1":0.00085,"7.0-7.1":0.15777,"8.1-8.4":0.03025,"9.0-9.2":0.01216,"9.3":0.04043,"10.0-10.2":0.00226,"10.3":0.17954,"11.0-11.2":0.02403,"11.3-11.4":0.07719,"12.0-12.1":0.04213,"12.2-12.5":0.60364,"13.0-13.1":0.01329,"13.2":0.15777,"13.3":0.06248,"13.4-13.7":0.09019,"14.0-14.4":0.23128,"14.5-14.8":0.46566,"15.0-15.1":0.2375,"15.2-15.3":0.39017,"15.4":0.00679},P:{"4":0.47103,"5.0-5.4":0.02093,"6.2-6.4":0.02093,"7.2-7.4":0.20935,"8.2":0.0104,"9.2":0.12561,"10.1":0.01109,"11.1-11.2":0.13608,"12.0":0.01047,"13.0":0.11514,"14.0":0.08374,"15.0":0.10467,"16.0":0.82692},I:{"0":0,"3":0,"4":0.00032,"2.1":0,"2.2":0,"2.3":0.00032,"4.1":0.00546,"4.2-4.3":0.04638,"4.4":0,"4.4.3-4.4.4":0.15809},A:{"11":0.076,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.12762},Q:{"10.4":0},O:{"0":1.04648},H:{"0":4.79665},L:{"0":50.27251},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0.00395,"30":0,"31":0,"32":0,"33":0,"34":0.00395,"35":0.00395,"36":0,"37":0,"38":0,"39":0,"40":0.00395,"41":0,"42":0,"43":0,"44":0.00395,"45":0,"46":0,"47":0.00395,"48":0,"49":0,"50":0,"51":0,"52":0.05131,"53":0,"54":0,"55":0,"56":0.00395,"57":0,"58":0,"59":0.00395,"60":0.00395,"61":0.00395,"62":0,"63":0.01184,"64":0.00789,"65":0.00395,"66":0,"67":0.00789,"68":0.00395,"69":0,"70":0.00395,"71":0,"72":0.00789,"73":0,"74":0,"75":0,"76":0,"77":0.00789,"78":0,"79":0,"80":0,"81":0.00395,"82":0,"83":0,"84":0.02763,"85":0,"86":0,"87":0,"88":0.00789,"89":0.02763,"90":0,"91":0.03158,"92":0.00395,"93":0,"94":0,"95":0.01974,"96":0.00395,"97":0.02368,"98":0.00395,"99":0.01579,"100":0.01974,"101":0.01184,"102":0.03947,"103":1.39724,"104":0.40259,"105":0.04342,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00395,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00395,"34":0.01974,"35":0,"36":0,"37":0,"38":0.00395,"39":0,"40":0.03158,"41":0,"42":0.00789,"43":0.05921,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00789,"50":0.00395,"51":0,"52":0,"53":0.00395,"54":0,"55":0.00789,"56":0.00789,"57":0,"58":0.00395,"59":0,"60":0,"61":0,"62":0,"63":0.00395,"64":0.01974,"65":0.00395,"66":0,"67":0.00395,"68":0.01974,"69":0.00789,"70":0.01974,"71":0.00395,"72":0.03158,"73":0.00789,"74":0.00789,"75":0.00395,"76":0.00789,"77":0.01974,"78":0.00395,"79":0.38681,"80":0.01974,"81":0.04342,"83":0.00789,"84":0.00395,"85":0.00395,"86":0.02368,"87":0.01974,"88":0.00789,"89":0.05131,"90":0.01184,"91":0.01184,"92":0.01974,"93":0.01184,"94":0.01579,"95":0.05131,"96":0.02368,"97":0.02368,"98":0.2605,"99":0.02368,"100":0.02763,"101":0.04736,"102":0.10657,"103":1.64195,"104":5.67184,"105":0.03158,"106":0.02368,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00395,"25":0,"26":0,"27":0.00789,"28":0.01184,"29":0.00395,"30":0.03158,"31":0,"32":0.01974,"33":0.00789,"34":0.00395,"35":0,"36":0,"37":0,"38":0.01184,"39":0,"40":0,"41":0,"42":0.00789,"43":0,"44":0,"45":0,"46":0.00395,"47":0,"48":0,"49":0,"50":0.00395,"51":0,"52":0,"53":0,"54":0.00395,"55":0,"56":0.00395,"57":0,"58":0.00789,"60":0.04342,"62":0,"63":0.22893,"64":0.14604,"65":0,"66":0,"67":0.00395,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00395,"74":0,"75":0,"76":0,"77":0.00395,"78":0,"79":0.01974,"80":0,"81":0,"82":0,"83":0,"84":0.00395,"85":0.01579,"86":0.00789,"87":0.00395,"88":0.01184,"89":0.65126,"90":0.12236,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.03158},B:{"12":0.03552,"13":0.01184,"14":0.00395,"15":0.00789,"16":0.00789,"17":0.00789,"18":0.02763,"79":0,"80":0,"81":0,"83":0,"84":0.00395,"85":0.00395,"86":0,"87":0,"88":0,"89":0.00395,"90":0.00395,"91":0,"92":0.01184,"93":0,"94":0,"95":0.00395,"96":0.00395,"97":0.00395,"98":0.00395,"99":0.00395,"100":0.00395,"101":0.00789,"102":0.01579,"103":0.37497,"104":1.09332,"105":0},E:{"4":0,"5":0,"6":0,"7":0.00395,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00395,"14":0.00395,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00395,"13.1":0.00789,"14.1":0.01974,"15.1":0,"15.2-15.3":0,"15.4":0.00395,"15.5":0.01579,"15.6":0.01184,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0.00801,"4.2-4.3":0,"5.0-5.1":0.00721,"6.0-6.1":0.0024,"7.0-7.1":0.17871,"8.1-8.4":0.01923,"9.0-9.2":0.00922,"9.3":0.24843,"10.0-10.2":0.01242,"10.3":0.1134,"11.0-11.2":0.02805,"11.3-11.4":0.16188,"12.0-12.1":0.06491,"12.2-12.5":0.65553,"13.0-13.1":0.01963,"13.2":0.01202,"13.3":0.02805,"13.4-13.7":0.03686,"14.0-14.4":0.21317,"14.5-14.8":0.38987,"15.0-15.1":0.18231,"15.2-15.3":0.20716,"15.4":0.16869,"15.5":0.60865,"15.6":0.58981,"16.0":0.03887},P:{"4":0.37993,"5.0-5.4":0.02054,"6.2-6.4":0.02054,"7.2-7.4":0.25671,"8.2":0,"9.2":0.03081,"10.1":0,"11.1-11.2":0.11295,"12.0":0.01027,"13.0":0.13349,"14.0":0.06161,"15.0":0.02054,"16.0":0.1643,"17.0":0.63665,"18.0":0.45181},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00542,"4.2-4.3":0.0804,"4.4":0,"4.4.3-4.4.4":0.31286},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04342,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":68.07342},S:{"2.5":0},R:{_:"0"},M:{"0":0.0908},Q:{"10.4":0.00605},O:{"0":1.08349},H:{"0":5.11742}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FI.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FI.js index 07b1a3fd7b9..f4f8155010f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FI.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FI.js @@ -1 +1 @@ -module.exports={C:{"3":0.01277,"52":0.03192,"54":0.00638,"55":0.02553,"59":0.01277,"60":0.00638,"63":0.01277,"74":0.00638,"78":0.45319,"79":0.02553,"80":0.01915,"81":0.02553,"82":0.01915,"83":0.01915,"84":0.05106,"85":0.00638,"88":0.01915,"89":0.01277,"91":0.22341,"92":0.01915,"93":0.00638,"94":0.02553,"95":0.11489,"96":1.65958,"97":2.65533,"98":0.01277,_:"2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 56 57 58 61 62 64 65 66 67 68 69 70 71 72 73 75 76 77 86 87 90 99 3.5 3.6"},D:{"38":0.00638,"42":0.01277,"48":0.15958,"49":0.01915,"52":0.07021,"56":0.01277,"58":0.00638,"59":0.01277,"60":0.06383,"61":0.07021,"64":0.81064,"66":0.07021,"67":0.01277,"69":0.21064,"70":0.46596,"72":0.45319,"73":0.01915,"75":0.01915,"76":0.02553,"77":0.01277,"78":0.01277,"79":1.14256,"80":0.51702,"81":0.0383,"83":0.08936,"84":0.15958,"85":0.14681,"86":0.19149,"87":0.37021,"88":0.02553,"89":0.0383,"90":0.09575,"91":0.04468,"92":0.10213,"93":1.22554,"94":2.71278,"95":0.06383,"96":1.86384,"97":10.23833,"98":23.48944,"99":0.00638,"100":0.01915,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 43 44 45 46 47 50 51 53 54 55 57 62 63 65 68 71 74 101"},F:{"28":0.00638,"68":0.00638,"69":0.00638,"71":0.00638,"80":0.00638,"82":0.30638,"83":0.98298,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 70 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.04468,"81":0.01277,"84":0.01277,"85":0.00638,"86":0.00638,"89":0.00638,"90":0.00638,"92":0.01277,"93":0.00638,"94":0.01277,"95":0.03192,"96":0.0766,"97":1.09149,"98":4.34682,_:"12 13 14 15 16 17 79 80 83 87 88 91"},E:{"4":0.01915,"13":0.10213,"14":0.27447,"15":0.17872,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1","9.1":0.01277,"10.1":0.01277,"11.1":0.02553,"12.1":0.04468,"13.1":0.27447,"14.1":0.83617,"15.1":0.45319,"15.2-15.3":1.06596,"15.4":0.01277},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00124,"6.0-6.1":0.00248,"7.0-7.1":0.00496,"8.1-8.4":0.00744,"9.0-9.2":0.08189,"9.3":0.04839,"10.0-10.2":0.01117,"10.3":0.06452,"11.0-11.2":0.02978,"11.3-11.4":0.07072,"12.0-12.1":0.03846,"12.2-12.5":0.335,"13.0-13.1":0.02233,"13.2":0.01737,"13.3":0.05211,"13.4-13.7":0.28786,"14.0-14.4":0.75562,"14.5-14.8":2.39218,"15.0-15.1":1.96536,"15.2-15.3":6.19633,"15.4":0.02109},P:{"4":0.04375,"5.0-5.4":0.02093,"6.2-6.4":0.04074,"7.2-7.4":2.52569,"8.2":0.0104,"9.2":0.01094,"10.1":0.04074,"11.1-11.2":0.04375,"12.0":0.03281,"13.0":0.0875,"14.0":0.14218,"15.0":0.14218,"16.0":1.79369},I:{"0":0,"3":0,"4":0.00214,"2.1":0,"2.2":0.00071,"2.3":0.00071,"4.1":0.00214,"4.2-4.3":0.00641,"4.4":0,"4.4.3-4.4.4":0.03491},A:{"6":0.01675,"7":0.01675,"8":0.38521,"9":0.09211,"10":0.15911,"11":0.24285,_:"5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.4883},Q:{"10.4":0},O:{"0":0.10489},H:{"0":0.32189},L:{"0":20.65605},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00638,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00638,"49":0,"50":0,"51":0,"52":0.02553,"53":0,"54":0,"55":0.01915,"56":0,"57":0,"58":0,"59":0.00638,"60":0.00638,"61":0,"62":0.00638,"63":0,"64":0,"65":0.00638,"66":0,"67":0,"68":0.00638,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00638,"78":0.12764,"79":0.01915,"80":0.01276,"81":0.01915,"82":0.01276,"83":0.02553,"84":0.01276,"85":0,"86":0.00638,"87":0,"88":0.01276,"89":0.00638,"90":0,"91":0.14679,"92":0.00638,"93":0.00638,"94":0.00638,"95":0.03191,"96":0.01276,"97":0.00638,"98":0.00638,"99":0.01276,"100":0.05744,"101":0.03191,"102":0.15317,"103":6.39476,"104":1.67208,"105":0.00638,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00638,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00638,"39":0,"40":0,"41":0,"42":0.02553,"43":0,"44":0.00638,"45":0,"46":0,"47":0,"48":0.01276,"49":0.01276,"50":0,"51":0,"52":0,"53":0.00638,"54":0,"55":0,"56":0.00638,"57":0,"58":0,"59":0,"60":0.00638,"61":0.03829,"62":0,"63":0.01915,"64":0.00638,"65":0.01276,"66":0,"67":0.00638,"68":0,"69":0.10849,"70":0.00638,"71":0.01276,"72":0,"73":0,"74":0.00638,"75":0.00638,"76":0.01276,"77":0.00638,"78":0.01276,"79":0.28719,"80":0.13402,"81":0.03829,"83":0.0702,"84":0.14679,"85":0.1404,"86":0.28719,"87":0.25528,"88":0.01276,"89":0.03191,"90":0.01276,"91":0.01915,"92":0.01915,"93":0.03191,"94":0.03191,"95":0.01915,"96":0.22337,"97":0.12126,"98":0.1404,"99":0.07658,"100":0.90624,"101":0.28081,"102":0.33825,"103":4.40996,"104":15.43806,"105":0.04467,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00638,"64":0.01276,"65":0,"66":0,"67":0,"68":0,"69":0.00638,"70":0,"71":0.02553,"72":0.01276,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00638,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00638,"86":0.00638,"87":0,"88":0.01915,"89":0.86157,"90":0.07658,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00638,"15":0,"16":0,"17":0.00638,"18":0.03191,"79":0,"80":0,"81":0,"83":0.00638,"84":0.01276,"85":0.00638,"86":0,"87":0.00638,"88":0,"89":0,"90":0,"91":0,"92":0.00638,"93":0,"94":0.00638,"95":0,"96":0.00638,"97":0,"98":0.00638,"99":0.01276,"100":0.00638,"101":0.02553,"102":0.02553,"103":0.72755,"104":2.78893,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0.00638,"10":0,"11":0,"12":0,"13":0.02553,"14":0.07658,"15":0.02553,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.01276,"10.1":0,"11.1":0.00638,"12.1":0.02553,"13.1":0.12126,"14.1":0.15955,"15.1":0.03829,"15.2-15.3":0.03829,"15.4":0.13402,"15.5":0.48503,"15.6":0.93177,"16.0":0.00638},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00191,"8.1-8.4":0.01334,"9.0-9.2":0.00762,"9.3":0.05145,"10.0-10.2":0.00762,"10.3":0.101,"11.0-11.2":0.04764,"11.3-11.4":0.02477,"12.0-12.1":0.04192,"12.2-12.5":0.44781,"13.0-13.1":0.01715,"13.2":0.00953,"13.3":0.04383,"13.4-13.7":0.23629,"14.0-14.4":0.61932,"14.5-14.8":1.17765,"15.0-15.1":0.42876,"15.2-15.3":0.66886,"15.4":0.989,"15.5":4.75635,"15.6":9.24592,"16.0":0.1029},P:{"4":0.09268,"5.0-5.4":0.0103,"6.2-6.4":0,"7.2-7.4":0.0103,"8.2":0,"9.2":0.02059,"10.1":0,"11.1-11.2":0.03089,"12.0":0.02059,"13.0":0.06178,"14.0":0.08238,"15.0":0.04119,"16.0":0.15446,"17.0":0.99885,"18.0":1.01944},I:{"0":0,"3":0,"4":0.00412,"2.1":0,"2.2":0.00412,"2.3":0.00823,"4.1":0.00823,"4.2-4.3":0.01852,"4.4":0,"4.4.3-4.4.4":0.08849},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.01915,"9":0.01276,"10":0.00638,"11":0.11488,"5.5":0},J:{"7":0,"10":0},N:{"10":0.00724,"11":0},L:{"0":34.58217},S:{"2.5":0},R:{_:"0"},M:{"0":0.62591},Q:{"10.4":0.00724},O:{"0":0.13025},H:{"0":0.40076}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FJ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FJ.js index 62415026020..3251e27ee2f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FJ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FJ.js @@ -1 +1 @@ -module.exports={C:{"34":0.01532,"35":0.00613,"44":0.00613,"47":0.01838,"48":0.00306,"52":0.0245,"54":0.16234,"65":0.07351,"66":0.00306,"72":0.00613,"78":0.00919,"88":0.01838,"89":0.00613,"90":0.00306,"91":0.00613,"94":0.02757,"95":0.06126,"96":0.69224,"97":1.01385,"98":0.02757,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 36 37 38 39 40 41 42 43 45 46 49 50 51 53 55 56 57 58 59 60 61 62 63 64 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 87 92 93 99 3.5 3.6"},D:{"39":0.16847,"45":0.0245,"49":0.05513,"50":0.00919,"53":0.01225,"56":0.00306,"58":0.00613,"63":0.00613,"65":0.03063,"69":0.04595,"71":0.00306,"74":0.00919,"75":0.0245,"76":0.00613,"77":0.04901,"79":0.06126,"80":0.01225,"81":0.01225,"83":0.01225,"84":0.00613,"85":0.01225,"86":0.00613,"87":0.07658,"88":0.01225,"89":0.04288,"90":0.01225,"91":0.00919,"92":0.12252,"93":0.02144,"94":0.10108,"95":0.04288,"96":0.47477,"97":6.23627,"98":12.17236,"99":0.0582,"100":0.00613,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 43 44 46 47 48 51 52 54 55 57 59 60 61 62 64 66 67 68 70 72 73 78 101"},F:{"40":0.00613,"82":0.12865,"83":0.70755,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"13":0.00613,"14":0.00613,"15":0.01838,"16":0.00919,"17":0.02144,"18":0.03369,"80":0.00306,"81":0.00306,"84":0.03369,"85":0.00919,"87":0.76269,"89":0.03369,"91":0.00919,"92":0.02757,"93":0.00919,"94":0.02144,"95":0.02144,"96":0.07658,"97":0.85151,"98":2.16248,_:"12 79 83 86 88 90"},E:{"4":0,"13":0.02144,"14":0.06126,"15":0.03369,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00306,"11.1":0.00919,"12.1":0.01225,"13.1":0.1991,"14.1":0.22054,"15.1":0.24198,"15.2-15.3":0.15928},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01588,"6.0-6.1":0.00318,"7.0-7.1":0.23765,"8.1-8.4":0.00159,"9.0-9.2":0,"9.3":0.18366,"10.0-10.2":0.00847,"10.3":0.26253,"11.0-11.2":0.00423,"11.3-11.4":0.00529,"12.0-12.1":0.03017,"12.2-12.5":0.51183,"13.0-13.1":0.02064,"13.2":0.00106,"13.3":0.09316,"13.4-13.7":0.0614,"14.0-14.4":0.37897,"14.5-14.8":0.93844,"15.0-15.1":0.86963,"15.2-15.3":1.64134,"15.4":0.02382},P:{"4":0.56013,"5.0-5.4":0.02093,"6.2-6.4":0.04074,"7.2-7.4":2.52569,"8.2":0.0104,"9.2":0.10184,"10.1":0.04074,"11.1-11.2":1.55819,"12.0":0.11203,"13.0":0.73326,"14.0":1.18137,"15.0":0.774,"16.0":5.14303},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.08883,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.10406},Q:{"10.4":0},O:{"0":1.5192},H:{"0":0.36778},L:{"0":50.82157},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00652,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.0163,"61":0,"62":0,"63":0,"64":0,"65":0.00652,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00652,"79":0,"80":0,"81":0.01304,"82":0,"83":0.00326,"84":0,"85":0,"86":0.00652,"87":0,"88":0.00326,"89":0,"90":0,"91":0.0163,"92":0,"93":0,"94":0,"95":0.00652,"96":0,"97":0,"98":0,"99":0.00652,"100":0.00326,"101":0.00326,"102":0.0326,"103":0.53464,"104":0.1304,"105":0.00326,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.00326,"40":0.00652,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00652,"47":0,"48":0,"49":0.00652,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00652,"57":0.00326,"58":0,"59":0,"60":0.05216,"61":0,"62":0,"63":0,"64":0.00326,"65":0,"66":0,"67":0,"68":0.0326,"69":0.01304,"70":0,"71":0,"72":0.00326,"73":0.00326,"74":0.00652,"75":0.00326,"76":0.00652,"77":0.00326,"78":0.00326,"79":0.01956,"80":0,"81":0.00652,"83":0.03586,"84":0.00652,"85":0.05542,"86":0.07824,"87":0.00978,"88":0.01304,"89":0.00326,"90":0.00326,"91":0.00652,"92":0.00978,"93":0.00326,"94":0.01956,"95":0.00326,"96":0.02282,"97":0.00326,"98":0.01956,"99":0.02282,"100":0.03586,"101":0.01956,"102":0.05868,"103":1.88754,"104":4.01958,"105":0.00652,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00326,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0163,"64":0.00652,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.1467,"90":0.00652,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00326,"13":0.00326,"14":0,"15":0.00652,"16":0.00326,"17":0.00326,"18":0.0163,"79":0,"80":0.00326,"81":0,"83":0,"84":0.00652,"85":0.00326,"86":0,"87":0,"88":0,"89":0.00652,"90":0.00326,"91":0,"92":0.00652,"93":0,"94":0.0815,"95":0,"96":0.00326,"97":0,"98":0.00326,"99":0.02608,"100":0.02608,"101":0.00652,"102":0.00978,"103":0.28362,"104":0.75632,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00978,"14":0.05868,"15":0.00326,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00652,"10.1":0,"11.1":0,"12.1":0.00326,"13.1":0.07498,"14.1":0.05542,"15.1":0.01956,"15.2-15.3":0.00652,"15.4":0.02282,"15.5":0.1304,"15.6":0.14344,"16.0":0},G:{"8":0.00201,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00301,"6.0-6.1":0,"7.0-7.1":0.0883,"8.1-8.4":0.001,"9.0-9.2":0,"9.3":0.05719,"10.0-10.2":0.09934,"10.3":0.20168,"11.0-11.2":0.00301,"11.3-11.4":0.04616,"12.0-12.1":0.07927,"12.2-12.5":0.74853,"13.0-13.1":0.00301,"13.2":0.00502,"13.3":0.20369,"13.4-13.7":0.07325,"14.0-14.4":0.4144,"14.5-14.8":0.66224,"15.0-15.1":0.39734,"15.2-15.3":0.41741,"15.4":0.62311,"15.5":2.36399,"15.6":3.5229,"16.0":0.01304},P:{"4":0.35189,"5.0-5.4":0,"6.2-6.4":0.03105,"7.2-7.4":1.15918,"8.2":0,"9.2":0.0414,"10.1":0.0207,"11.1-11.2":0.24839,"12.0":0.0414,"13.0":0.34154,"14.0":0.47609,"15.0":0.52784,"16.0":0.74518,"17.0":3.19808,"18.0":3.58103},I:{"0":0,"3":0,"4":0.00543,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.08369},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0.00571,"11":0.01712,"5.5":0},J:{"7":0,"10":0.00674},N:{"10":0,"11":0},L:{"0":64.49828},S:{"2.5":0},R:{_:"0"},M:{"0":0.22916},Q:{"10.4":0.02696},O:{"0":0.84924},H:{"0":0.28076}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FK.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FK.js index 36e7421969c..8a877b2ec7f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FK.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FK.js @@ -1 +1 @@ -module.exports={C:{"52":0.01672,"61":0.29253,"63":0.01672,"69":0.01672,"78":0.94445,"84":0.01672,"87":0.02507,"89":0.00836,"92":0.02507,"94":0.04179,"95":0.06686,"96":2.35278,"97":3.88229,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 62 64 65 66 67 68 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 88 90 91 93 98 99 3.5 3.6"},D:{"33":0.00836,"49":0.45969,"77":0.01672,"81":0.00836,"86":0.00836,"87":0.00836,"91":0.00836,"93":0.00836,"95":0.00836,"96":0.1003,"97":7.81473,"98":14.68501,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 79 80 83 84 85 88 89 90 92 94 99 100 101"},F:{"73":0.01672,"81":0.00836,"82":0.00836,"83":0.88595,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 78 79 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00836,"16":0.00836,"18":0.22567,"83":0.00836,"84":0.01672,"91":0.00836,"92":0.16716,"93":0.00836,"95":0.04179,"96":0.29253,"97":0.75222,"98":2.41964,_:"12 13 15 17 79 80 81 85 86 87 88 89 90 94"},E:{"4":0,"13":0.05851,"14":0.07522,"15":0.1003,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00836,"11.1":0.09194,"12.1":0.05015,"13.1":0.16716,"14.1":0.50148,"15.1":0.08358,"15.2-15.3":0.84416},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00598,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02291,"10.0-10.2":0.14043,"10.3":0,"11.0-11.2":0,"11.3-11.4":0.03486,"12.0-12.1":0,"12.2-12.5":1.73001,"13.0-13.1":0,"13.2":0,"13.3":0.01793,"13.4-13.7":0.00598,"14.0-14.4":0.26891,"14.5-14.8":1.42623,"15.0-15.1":2.05668,"15.2-15.3":4.24982,"15.4":0},P:{"4":0.47103,"5.0-5.4":0.02093,"6.2-6.4":0.02093,"7.2-7.4":0.20935,"8.2":0.0104,"9.2":0.12561,"10.1":0.01109,"11.1-11.2":0.04208,"12.0":0.04208,"13.0":0.2209,"14.0":0.09467,"15.0":0.03165,"16.0":4.94395},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.78565,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.50643},Q:{"10.4":0},O:{"0":12.5559},H:{"0":0},L:{"0":32.58584},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00643,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00643,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.59515,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.09329,"86":0,"87":0,"88":0.0193,"89":0,"90":0.01287,"91":0.0193,"92":0,"93":0,"94":0,"95":0,"96":0.00643,"97":0.05469,"98":0,"99":0,"100":0,"101":0.01287,"102":0,"103":1.20959,"104":0.69166,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.0193,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.01287,"61":0,"62":0.02252,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0.00643,"87":0,"88":0.03539,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.10616,"98":0,"99":0.00643,"100":0,"101":0.0193,"102":0.05469,"103":0.77851,"104":1.22568,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.21232,"90":0.00643,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00643,"18":0.01287,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00643,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.05469,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00643,"101":0,"102":0,"103":1.01014,"104":2.11679,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.50185,"14":0.01287,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00643,"11.1":0,"12.1":0,"13.1":0.05469,"14.1":0.0193,"15.1":0.02252,"15.2-15.3":0.05791,"15.4":0.04182,"15.5":0.07721,"15.6":0.77208,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.05441,"9.0-9.2":0,"9.3":0.01866,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0.01866,"12.0-12.1":0,"12.2-12.5":0.71205,"13.0-13.1":0,"13.2":0.01866,"13.3":0,"13.4-13.7":0,"14.0-14.4":0.60322,"14.5-14.8":0.94992,"15.0-15.1":0.51305,"15.2-15.3":0.7136,"15.4":0.78512,"15.5":2.8311,"15.6":8.25698,"16.0":0.07307},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.02117,"8.2":0,"9.2":0,"10.1":0.02117,"11.1-11.2":0.06351,"12.0":0,"13.0":0.02117,"14.0":8.24544,"15.0":0,"16.0":0.09526,"17.0":5.35583,"18.0":3.41884},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.24128},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.08364,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":49.44379},S:{"2.5":0},R:{_:"0"},M:{"0":1.18703},Q:{"10.4":0},O:{"0":0},H:{"0":0.03853}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FM.js index 9ed2ac0ab46..76af220d26b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FM.js @@ -1 +1 @@ -module.exports={C:{"47":0.0106,"78":0.02121,"88":0.0106,"89":0.02651,"96":2.07308,"97":1.89281,"98":0.08483,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 90 91 92 93 94 95 99 3.5 3.6"},D:{"33":0.30221,"49":0.02651,"65":0.0106,"78":0.0106,"79":0.18557,"80":0.36054,"81":0.01591,"83":0.0106,"87":0.02121,"90":0.01591,"91":0.29161,"92":0.04242,"93":0.49309,"94":0.07953,"95":0.02651,"96":0.95966,"97":8.35595,"98":18.27069,"99":0.02121,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 66 67 68 69 70 71 72 73 74 75 76 77 84 85 86 88 89 100 101"},F:{"83":0.22799,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"13":0.02121,"14":0.02121,"16":0.0106,"18":0.01591,"84":0.0106,"86":0.15906,"96":0.04772,"97":1.60651,"98":11.38339,_:"12 15 17 79 80 81 83 85 87 88 89 90 91 92 93 94 95"},E:{"4":0,"14":0.5302,"15":0.05832,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.0106,"12.1":0.86953,"13.1":0.90134,"14.1":0.16436,"15.1":0.08483,"15.2-15.3":0.42416},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01836,"10.0-10.2":0,"10.3":0.01836,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0.03672,"12.2-12.5":2.16039,"13.0-13.1":0.00773,"13.2":0,"13.3":0.00386,"13.4-13.7":0.98068,"14.0-14.4":0.64251,"14.5-14.8":2.41836,"15.0-15.1":2.05701,"15.2-15.3":1.2058,"15.4":0.11401},P:{"4":0.02192,"5.0-5.4":0.01024,"6.2-6.4":0.02048,"7.2-7.4":0.10962,"8.2":0.01015,"9.2":0.12286,"10.1":0.02048,"11.1-11.2":0.53714,"12.0":0.01078,"13.0":0.19732,"14.0":0.05481,"15.0":0.04314,"16.0":1.01947},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.07953,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.06577},Q:{"10.4":0},O:{"0":0.0094},H:{"0":0.0934},L:{"0":31.24196},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.01103,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00551,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0.00551,"96":0,"97":0,"98":0,"99":0,"100":0.01103,"101":0.01654,"102":0.07167,"103":1.19632,"104":0.36937,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02205,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00551,"73":0,"74":0,"75":0,"76":0.15988,"77":0,"78":0,"79":0.01103,"80":0,"81":0.00551,"83":0,"84":0,"85":0,"86":0,"87":0.00551,"88":0.00551,"89":0.00551,"90":0.01103,"91":0,"92":1.96814,"93":0.40245,"94":0,"95":0.00551,"96":0.00551,"97":0.00551,"98":0.00551,"99":0.01654,"100":0,"101":0.0827,"102":0.04962,"103":5.50197,"104":11.59384,"105":0.02757,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.11577,"90":0.02205,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00551,"16":0,"17":0.01654,"18":0.02757,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0.00551,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00551,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.01103,"101":0,"102":0,"103":0.90965,"104":3.24164,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00551,"14":0.27014,"15":0.00551,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.03859,"13.1":0.01654,"14.1":0.0441,"15.1":0,"15.2-15.3":0.01103,"15.4":0.02757,"15.5":0.2536,"15.6":0.22603,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00531,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.17882,"10.0-10.2":0,"10.3":0.17351,"11.0-11.2":0.02656,"11.3-11.4":0.00531,"12.0-12.1":0,"12.2-12.5":2.02901,"13.0-13.1":0,"13.2":0,"13.3":0.06374,"13.4-13.7":0.1204,"14.0-14.4":0.26381,"14.5-14.8":1.70501,"15.0-15.1":0.69404,"15.2-15.3":0.87641,"15.4":0.95608,"15.5":3.2967,"15.6":7.30515,"16.0":0.00531},P:{"4":0.01047,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.02094,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.1047,"12.0":0,"13.0":0.05235,"14.0":0.01047,"15.0":0,"16.0":0.1047,"17.0":0.29315,"18.0":0.12564},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.77279,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":1.09099},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0.02205,"11":0.00551,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":51.13124},S:{"2.5":0},R:{_:"0"},M:{"0":0.02692},Q:{"10.4":0},O:{"0":0.04936},H:{"0":0.6457}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FO.js index 7aba38e28ee..55f339415de 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FO.js @@ -1 +1 @@ -module.exports={C:{"48":0.00441,"60":0.00441,"78":0.0397,"91":0.11469,"93":0.00441,"95":0.05293,"96":0.49403,"97":0.66165,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 92 94 98 99 3.5 3.6"},D:{"49":0.01764,"67":0.00882,"68":0.03529,"71":0.03529,"74":0.00441,"79":0.00882,"80":0.00882,"83":0.02206,"86":0.01764,"87":0.02206,"88":0.05293,"90":0.01764,"91":0.04852,"92":0.11028,"93":0.04852,"94":0.06617,"95":0.01764,"96":0.50727,"97":6.67384,"98":8.92786,"99":0.00882,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 69 70 72 73 75 76 77 78 81 84 85 89 100 101"},F:{"82":0.09704,"83":0.37494,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.01323,"18":0.00882,"84":0.00882,"89":0.02647,"94":0.00882,"95":0.00882,"96":0.03088,"97":0.79398,"98":2.31136,_:"12 13 14 16 17 79 80 81 83 85 86 87 88 90 91 92 93"},E:{"4":0,"12":0.00441,"13":0.00882,"14":1.16009,"15":0.21173,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00441,"11.1":0.0397,"12.1":0.02206,"13.1":0.23378,"14.1":0.83368,"15.1":4.21692,"15.2-15.3":9.144,"15.4":0.0397},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02501,"10.0-10.2":0.015,"10.3":0.11003,"11.0-11.2":0.02001,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0.24507,"13.0-13.1":0,"13.2":0,"13.3":0.01,"13.4-13.7":0.05001,"14.0-14.4":1.06029,"14.5-14.8":3.38092,"15.0-15.1":9.02246,"15.2-15.3":35.95478,"15.4":0.10003},P:{"4":0.47103,"5.0-5.4":0.02093,"6.2-6.4":0.02093,"7.2-7.4":0.20935,"8.2":0.0104,"9.2":0.12561,"10.1":0.01109,"11.1-11.2":0.03165,"12.0":0.01047,"13.0":0.11514,"14.0":0.01055,"15.0":0.03165,"16.0":0.77009},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.22937,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.16208},Q:{"10.4":0},O:{"0":0},H:{"0":0.1217},L:{"0":4.8021},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.02254,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00322,"88":0,"89":0,"90":0,"91":0.00966,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00322,"100":0.00322,"101":0,"102":0.00644,"103":0.19642,"104":0.02254,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0.00322,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00322,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00322,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00322,"80":0.00322,"81":0,"83":0,"84":0.00322,"85":0.00644,"86":0,"87":0.00322,"88":0.00644,"89":0,"90":0,"91":0,"92":0.00644,"93":0,"94":0,"95":0.00322,"96":0.00644,"97":0,"98":0,"99":0.00966,"100":0.00322,"101":0.00966,"102":0.07728,"103":0.52164,"104":1.46188,"105":0.01932,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00644,"89":0.10948,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0.00322,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0.00322,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00322,"102":0.00322,"103":0.21574,"104":0.40572,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00644,"14":0.12558,"15":0.00644,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00322,"13.1":0.02898,"14.1":0.04186,"15.1":0.07728,"15.2-15.3":0.07084,"15.4":0.60858,"15.5":1.71304,"15.6":4.03788,"16.0":0.0161},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01689,"10.0-10.2":0,"10.3":0.05912,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0.15202,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0.26181,"14.5-14.8":0.47295,"15.0-15.1":0.54896,"15.2-15.3":1.2077,"15.4":2.55898,"15.5":17.70169,"15.6":61.14516,"16.0":0.30404},P:{"4":0.01032,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0.01032,"11.1-11.2":0,"12.0":0,"13.0":0.01032,"14.0":0,"15.0":0.01032,"16.0":0.04129,"17.0":0.26837,"18.0":0.34062},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00897,"4.2-4.3":0.00149,"4.4":0,"4.4.3-4.4.4":0.00598},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00644,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":4.28718},S:{"2.5":0},R:{_:"0"},M:{"0":0.11526},Q:{"10.4":0},O:{"0":0},H:{"0":0.00642}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FR.js index 3afeea41bd2..99a1bc1b90b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/FR.js @@ -1 +1 @@ -module.exports={C:{"11":0.00487,"45":0.00974,"47":0.00974,"48":0.01949,"50":0.00487,"52":0.09744,"56":0.01462,"59":0.01462,"60":0.01462,"66":0.00487,"68":0.02923,"72":0.00974,"75":0.00487,"77":0.00487,"78":0.21924,"79":0.00974,"80":0.01462,"81":0.44822,"82":0.01462,"83":0.00974,"84":0.02436,"85":0.00974,"86":0.00974,"87":0.01462,"88":0.02436,"89":0.0341,"90":0.03898,"91":0.33617,"92":0.01462,"93":0.01462,"94":0.04872,"95":0.12667,"96":2.31907,"97":3.52733,"98":0.00974,_:"2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 49 51 53 54 55 57 58 61 62 63 64 65 67 69 70 71 73 74 76 99 3.5 3.6"},D:{"38":0.00974,"48":0.00487,"49":0.11206,"50":0.00487,"51":0.00487,"52":0.02436,"53":0.00974,"54":0.06334,"56":0.01462,"58":0.00974,"60":0.07308,"63":0.00974,"64":0.07308,"65":0.01462,"66":0.06334,"67":0.01949,"69":0.02436,"70":0.03898,"71":0.01949,"72":0.03898,"73":0.00487,"74":0.01462,"75":0.01949,"76":0.01949,"77":0.01462,"78":0.02436,"79":0.18514,"80":0.07795,"81":0.0341,"83":0.06821,"84":0.1218,"85":0.14129,"86":0.1559,"87":0.30694,"88":0.05359,"89":0.06334,"90":0.03898,"91":0.05846,"92":0.05359,"93":0.90132,"94":0.53592,"95":0.11206,"96":0.53592,"97":7.56622,"98":15.3468,"99":0.01462,"100":0.00974,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 55 57 59 61 62 68 101"},F:{"71":0.00974,"82":0.33617,"83":0.93542,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.01949,"18":0.03898,"83":0.00487,"84":0.00974,"85":0.01462,"86":0.00974,"87":0.00487,"89":0.00974,"90":0.00974,"91":0.00974,"92":0.00974,"93":0.00487,"94":0.01462,"95":0.03898,"96":0.07308,"97":1.23749,"98":4.13146,_:"12 13 14 15 16 79 80 81 88"},E:{"4":0,"8":0.00487,"12":0.01462,"13":0.0877,"14":0.42386,"15":0.25822,_:"0 5 6 7 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.01949,"10.1":0.02436,"11.1":0.08282,"12.1":0.14616,"13.1":0.4872,"14.1":1.2521,"15.1":0.61874,"15.2-15.3":1.15954,"15.4":0.00974},G:{"8":0.00677,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00169,"7.0-7.1":0.01016,"8.1-8.4":0.00339,"9.0-9.2":0.01863,"9.3":0.10161,"10.0-10.2":0.02371,"10.3":0.10838,"11.0-11.2":0.04742,"11.3-11.4":0.04064,"12.0-12.1":0.03387,"12.2-12.5":0.63504,"13.0-13.1":0.06266,"13.2":0.01524,"13.3":0.11346,"13.4-13.7":0.3082,"14.0-14.4":0.84841,"14.5-14.8":3.3513,"15.0-15.1":2.7061,"15.2-15.3":8.4282,"15.4":0.06266},P:{"4":0.08493,"5.0-5.4":0.01062,_:"6.2-6.4 7.2-7.4","8.2":0.01062,"9.2":0.03185,"10.1":0.01062,"11.1-11.2":0.10616,"12.0":0.03185,"13.0":0.10616,"14.0":0.10616,"15.0":0.12739,"16.0":2.54788},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00299,"4.2-4.3":0.00598,"4.4":0,"4.4.3-4.4.4":0.06282},A:{"8":0.01519,"9":0.02026,"10":0.01013,"11":0.33931,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.51793},Q:{"10.4":0},O:{"0":0.43075},H:{"0":0.35926},L:{"0":30.1504},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0.01348,"11":0.00898,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.00449,"46":0,"47":0.00898,"48":0.00449,"49":0,"50":0,"51":0,"52":0.03594,"53":0,"54":0,"55":0,"56":0.00449,"57":0,"58":0,"59":0.01348,"60":0.00449,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.01348,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00449,"78":0.08086,"79":0.00898,"80":0.00898,"81":0.30546,"82":0.00898,"83":0.00898,"84":0.00449,"85":0,"86":0.00449,"87":0.00449,"88":0.00898,"89":0.00449,"90":0.00898,"91":0.13027,"92":0.00449,"93":0.00898,"94":0.01348,"95":0.00898,"96":0.00449,"97":0.00898,"98":0.00898,"99":0.01348,"100":0.01797,"101":0.03144,"102":0.08984,"103":2.15616,"104":0.42225,"105":0.00449,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0.00449,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00449,"49":0.04043,"50":0.00449,"51":0.00898,"52":0.01797,"53":0,"54":0,"55":0,"56":0.10332,"57":0,"58":0.00449,"59":0,"60":0.06289,"61":0,"62":0,"63":0.00449,"64":0,"65":0.00449,"66":0.0584,"67":0.00898,"68":0,"69":0.00898,"70":0.00449,"71":0.00898,"72":0.00449,"73":0.00449,"74":0.00449,"75":0.00449,"76":0.00449,"77":0.00449,"78":0.00898,"79":0.03594,"80":0.02246,"81":0.02246,"83":0.06738,"84":0.09433,"85":0.09882,"86":0.12128,"87":0.13925,"88":0.00898,"89":0.02246,"90":0.00898,"91":0.02246,"92":0.02695,"93":0.07636,"94":0.07636,"95":0.02695,"96":0.03594,"97":0.04492,"98":0.02246,"99":0.03144,"100":0.04043,"101":0.06738,"102":0.12128,"103":2.529,"104":6.37415,"105":0.02695,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00449,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00449,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01797,"64":0.01797,"65":0,"66":0,"67":0,"68":0.02246,"69":0.00449,"70":0.00449,"71":0.00898,"72":0.00449,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00449,"86":0,"87":0,"88":0.00898,"89":0.46268,"90":0.04043,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00449,"15":0.00449,"16":0,"17":0.00898,"18":0.01348,"79":0,"80":0,"81":0,"83":0.00449,"84":0.00449,"85":0.00449,"86":0.00449,"87":0.00449,"88":0,"89":0.00449,"90":0,"91":0.00449,"92":0.00449,"93":0,"94":0.00449,"95":0,"96":0.00449,"97":0.00449,"98":0.00449,"99":0.00449,"100":0.00898,"101":0.04043,"102":0.02695,"103":0.60642,"104":1.68001,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00449,"12":0.00449,"13":0.01797,"14":0.08535,"15":0.02246,_:"0","3.1":0,"3.2":0,"5.1":0.00449,"6.1":0,"7.1":0,"9.1":0.00449,"10.1":0.00898,"11.1":0.03594,"12.1":0.04043,"13.1":0.14374,"14.1":0.20214,"15.1":0.04043,"15.2-15.3":0.04043,"15.4":0.10781,"15.5":0.37733,"15.6":0.64685,"16.0":0.00898},G:{"8":0.01028,"3.2":0,"4.0-4.1":0.01542,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01028,"8.1-8.4":0.00257,"9.0-9.2":0.03083,"9.3":0.13874,"10.0-10.2":0.01799,"10.3":0.14131,"11.0-11.2":0.06166,"11.3-11.4":0.04882,"12.0-12.1":0.05139,"12.2-12.5":0.83503,"13.0-13.1":0.05139,"13.2":0.01542,"13.3":0.09506,"13.4-13.7":0.29804,"14.0-14.4":0.70399,"14.5-14.8":1.6572,"15.0-15.1":0.45734,"15.2-15.3":0.7117,"15.4":1.0046,"15.5":6.65965,"15.6":12.36608,"16.0":0.29804},P:{"4":0.10288,"5.0-5.4":0.02058,"6.2-6.4":0,"7.2-7.4":0.02058,"8.2":0.01029,"9.2":0.03086,"10.1":0.01029,"11.1-11.2":0.0823,"12.0":0.03086,"13.0":0.0823,"14.0":0.07202,"15.0":0.04115,"16.0":0.15432,"17.0":1.29628,"18.0":1.62549},I:{"0":0,"3":0,"4":0.01942,"2.1":0,"2.2":0.01294,"2.3":0,"4.1":0.01942,"4.2-4.3":0.02589,"4.4":0,"4.4.3-4.4.4":0.16827},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00923,"9":0.02308,"10":0,"11":0.13389,"5.5":0},J:{"7":0,"10":0.00551},N:{"10":0,"11":0},L:{"0":46.34973},S:{"2.5":0.01102},R:{_:"0"},M:{"0":0.6224},Q:{"10.4":0.00551},O:{"0":0.39658},H:{"0":0.45889}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GA.js index bd5e8ab670e..481b9cb4a1f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GA.js @@ -1 +1 @@ -module.exports={C:{"30":0.00287,"31":0.00287,"35":0.00575,"39":0.00287,"48":0.00287,"52":0.01724,"54":0.02298,"68":0.01149,"72":0.00862,"78":0.02586,"85":0.00287,"88":0.05459,"89":0.00575,"91":0.06608,"92":0.00287,"93":0.01724,"94":0.04597,"95":0.03448,"96":0.77284,"97":1.54567,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 32 33 34 36 37 38 40 41 42 43 44 45 46 47 49 50 51 53 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 79 80 81 82 83 84 86 87 90 98 99 3.5 3.6"},D:{"29":0.03735,"38":0.00862,"48":0.00575,"49":0.00862,"53":0.00287,"56":0.00575,"58":0.01437,"63":0.00287,"65":0.01149,"66":0.00287,"69":0.02011,"70":0.00575,"71":0.00575,"73":0.02586,"74":0.00862,"75":0.01437,"76":0.02873,"77":0.01149,"79":0.75847,"80":0.01149,"81":0.0316,"83":0.01437,"84":0.00862,"85":0.01724,"86":0.01724,"87":0.22984,"88":0.01437,"89":0.01149,"90":0.00575,"91":0.00862,"92":0.09768,"93":0.02011,"94":0.03735,"95":0.12354,"96":0.34189,"97":4.02795,"98":10.83696,"99":0.0316,"100":0.05171,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 50 51 52 54 55 57 59 60 61 62 64 67 68 72 78 101"},F:{"28":0.27006,"46":0.00862,"68":0.01437,"74":0.02586,"79":0.00287,"80":0.01724,"82":0.05459,"83":1.50545,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 69 70 71 72 73 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00862,"13":0.00862,"14":0.01149,"15":0.00575,"16":0.01149,"17":0.01149,"18":0.06608,"80":0.00287,"84":0.00862,"85":0.00287,"89":0.00862,"90":0.01149,"91":0.00287,"92":0.01149,"94":0.00575,"95":0.01149,"96":0.0316,"97":0.64355,"98":2.18635,_:"79 81 83 86 87 88 93"},E:{"4":0,"14":0.01724,"15":0.01437,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.01149,"12.1":0.01437,"13.1":0.09481,"14.1":0.04884,"15.1":0.0316,"15.2-15.3":0.15802},G:{"8":0.00219,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01531,"6.0-6.1":0.00146,"7.0-7.1":0.02042,"8.1-8.4":0.00219,"9.0-9.2":0,"9.3":0.02771,"10.0-10.2":0.00146,"10.3":0.02916,"11.0-11.2":0.24936,"11.3-11.4":0.01094,"12.0-12.1":0.10062,"12.2-12.5":2.13046,"13.0-13.1":0.01239,"13.2":0.00073,"13.3":0.00875,"13.4-13.7":0.10208,"14.0-14.4":0.34706,"14.5-14.8":0.84431,"15.0-15.1":0.63651,"15.2-15.3":2.71374,"15.4":0.02698},P:{"4":0.4495,"5.0-5.4":0.02093,"6.2-6.4":0.02043,"7.2-7.4":1.39958,"8.2":0.02094,"9.2":0.01022,"10.1":0.02043,"11.1-11.2":0.24518,"12.0":0.05108,"13.0":0.54144,"14.0":0.18389,"15.0":0.15324,"16.0":1.14419},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00052,"4.2-4.3":0.00207,"4.4":0,"4.4.3-4.4.4":0.06868},A:{"11":0.11722,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.91226},Q:{"10.4":0},O:{"0":0.3706},H:{"0":2.09844},L:{"0":51.6867},S:{"2.5":0.01425}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.00807,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.01613,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00403,"48":0,"49":0,"50":0,"51":0,"52":0.00807,"53":0,"54":0.00403,"55":0,"56":0.01613,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00807,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00403,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00403,"89":0,"90":0,"91":0.01613,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00807,"100":0.01613,"101":0.02017,"102":0.0363,"103":1.05261,"104":0.08873,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00403,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00807,"39":0,"40":0.00807,"41":0,"42":0,"43":0.00403,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00807,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.03226,"57":0,"58":0.00403,"59":0,"60":0.00807,"61":0,"62":0,"63":0,"64":0.00403,"65":0.03226,"66":0,"67":0,"68":0,"69":0.00403,"70":0.00403,"71":0,"72":0.00403,"73":0.02823,"74":0.01613,"75":0.01613,"76":0,"77":0,"78":0,"79":0.12099,"80":0.00403,"81":0.07259,"83":0.0121,"84":0.0121,"85":0.00403,"86":0.02017,"87":0.00807,"88":0.00807,"89":0.00807,"90":0.00403,"91":0.00403,"92":0.0121,"93":0.00403,"94":0.01613,"95":0.00403,"96":0.01613,"97":0.01613,"98":0.0121,"99":0.0121,"100":0.02017,"101":0.01613,"102":0.10083,"103":2.75051,"104":6.33988,"105":0.01613,"106":0.00403,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00403,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.04033,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0.02017,"58":0.02017,"60":0.0363,"62":0,"63":0.3791,"64":0.11696,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.0121,"80":0.10486,"81":0.00403,"82":0.00403,"83":0,"84":0.00807,"85":0.02823,"86":0.01613,"87":0.02017,"88":0.00807,"89":0.99212,"90":0.04033,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00403},B:{"12":0.02017,"13":0.0121,"14":0.00403,"15":0.00403,"16":0.00403,"17":0.0121,"18":0.02017,"79":0,"80":0,"81":0,"83":0,"84":0.00403,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.02017,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00403,"100":0,"101":0.00807,"102":0.01613,"103":0.41137,"104":1.20183,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00403,"11.1":0,"12.1":0.00403,"13.1":0.00807,"14.1":0.00807,"15.1":0.0363,"15.2-15.3":0,"15.4":0.01613,"15.5":0.02823,"15.6":0.0484,"16.0":0},G:{"8":0.11506,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.03812,"6.0-6.1":0.00212,"7.0-7.1":0.02894,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.08471,"10.0-10.2":0.00141,"10.3":0.04165,"11.0-11.2":0.00988,"11.3-11.4":0.02188,"12.0-12.1":0.072,"12.2-12.5":1.75769,"13.0-13.1":0.00212,"13.2":0.00212,"13.3":0.04165,"13.4-13.7":0.10306,"14.0-14.4":0.10447,"14.5-14.8":0.38683,"15.0-15.1":0.27318,"15.2-15.3":0.1673,"15.4":0.3833,"15.5":1.27909,"15.6":1.97088,"16.0":0.16942},P:{"4":0.23693,"5.0-5.4":0,"6.2-6.4":0.0309,"7.2-7.4":0.45327,"8.2":0,"9.2":0.0206,"10.1":0,"11.1-11.2":0.11332,"12.0":0.0103,"13.0":0.05151,"14.0":0.0206,"15.0":0.04121,"16.0":0.13392,"17.0":1.23618,"18.0":0.92714},I:{"0":0,"3":0,"4":0.01749,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0038,"4.2-4.3":0.01597,"4.4":0,"4.4.3-4.4.4":0.16954},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0363,"5.5":0},J:{"7":0,"10":0.00597},N:{"10":0,"11":0},L:{"0":68.97258},S:{"2.5":0.00597},R:{_:"0"},M:{"0":0.33415},Q:{"10.4":0},O:{"0":0.59073},H:{"0":2.03935}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GB.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GB.js index d8490707392..619cf942ff9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GB.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GB.js @@ -1 +1 @@ -module.exports={C:{"48":0.00503,"52":0.0302,"59":0.0151,"78":0.05537,"84":0.02014,"87":0.02517,"88":0.00503,"89":0.02014,"90":0.07551,"91":0.04027,"92":0.00503,"93":0.01007,"94":0.0151,"95":0.03524,"96":0.82054,"97":1.2736,"98":0.00503,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 99 3.5 3.6"},D:{"35":0.00503,"38":0.00503,"40":0.18626,"43":0.01007,"49":0.06041,"56":0.0302,"60":0.0151,"63":0.00503,"64":0.0151,"65":0.0151,"66":0.05537,"67":0.0151,"69":0.04531,"70":0.0151,"72":0.0151,"73":0.00503,"74":0.01007,"75":0.02014,"76":0.04027,"77":0.02517,"78":0.0151,"79":0.07048,"80":0.05537,"81":0.02014,"83":0.03524,"84":0.08054,"85":0.03524,"86":0.03524,"87":0.16109,"88":0.02517,"89":0.06041,"90":0.04027,"91":0.08558,"92":0.08558,"93":0.58898,"94":0.14095,"95":0.12082,"96":0.72993,"97":9.44882,"98":17.87573,"99":0.0151,"100":0.0151,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 39 41 42 44 45 46 47 48 50 51 52 53 54 55 57 58 59 61 62 68 71 101"},F:{"46":0.00503,"82":0.18626,"83":0.58394,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00503,"16":0.00503,"17":0.01007,"18":0.06041,"85":0.01007,"89":0.00503,"90":0.00503,"91":0.01007,"92":0.02014,"93":0.0151,"94":0.01007,"95":0.07551,"96":0.08054,"97":1.84244,"98":6.0408,_:"12 13 14 79 80 81 83 84 86 87 88"},E:{"4":0,"12":0.01007,"13":0.07551,"14":0.4732,"15":0.25673,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.00503,"10.1":0.01007,"11.1":0.06041,"12.1":0.09565,"13.1":0.41782,"14.1":1.777,"15.1":0.85578,"15.2-15.3":1.95319,"15.4":0.0151},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00499,"7.0-7.1":0.01248,"8.1-8.4":0.01248,"9.0-9.2":0.0025,"9.3":0.24959,"10.0-10.2":0.00749,"10.3":0.2421,"11.0-11.2":0.02995,"11.3-11.4":0.05741,"12.0-12.1":0.02995,"12.2-12.5":1.11318,"13.0-13.1":0.02746,"13.2":0.00749,"13.3":0.06989,"13.4-13.7":0.25209,"14.0-14.4":0.89853,"14.5-14.8":5.04175,"15.0-15.1":3.30709,"15.2-15.3":13.53785,"15.4":0.04493},P:{"4":0.04325,_:"5.0-5.4 6.2-6.4 7.2-7.4 8.2 9.2 10.1","11.1-11.2":0.04325,"12.0":0.02162,"13.0":0.09731,"14.0":0.09731,"15.0":0.09731,"16.0":3.38406},I:{"0":0,"3":0,"4":0.01457,"2.1":0,"2.2":0.00089,"2.3":0,"4.1":0.00119,"4.2-4.3":0.00387,"4.4":0,"4.4.3-4.4.4":0.02914},A:{"9":0.01023,"11":0.30691,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.2781},Q:{"10.4":0},O:{"0":0.11422},H:{"0":0.17866},L:{"0":20.43488},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0.02552,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.0051,"49":0,"50":0,"51":0,"52":0.01531,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.01021,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.0051,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.03062,"79":0.0051,"80":0.0051,"81":0.0051,"82":0.0051,"83":0.0051,"84":0,"85":0,"86":0,"87":0.0051,"88":0.0051,"89":0.01021,"90":0.01531,"91":0.02552,"92":0.0051,"93":0.0051,"94":0.04082,"95":0.0051,"96":0.0051,"97":0.0051,"98":0,"99":0.0051,"100":0.01021,"101":0.01021,"102":0.04082,"103":0.89813,"104":0.15309,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.0051,"37":0,"38":0.0051,"39":0,"40":0.12247,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02552,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.02041,"61":0,"62":0,"63":0.0051,"64":0,"65":0.0051,"66":0.04082,"67":0.01021,"68":0,"69":0.02552,"70":0.0051,"71":0.0051,"72":0,"73":0,"74":0.0051,"75":0.0051,"76":0.01531,"77":0.01021,"78":0.0051,"79":0.03572,"80":0.02041,"81":0.02041,"83":0.02552,"84":0.04082,"85":0.04082,"86":0.04082,"87":0.05103,"88":0.01531,"89":0.02041,"90":0.01021,"91":0.02552,"92":0.02552,"93":0.04593,"94":0.04593,"95":0.01531,"96":0.06124,"97":0.02552,"98":0.03572,"99":0.04082,"100":0.06634,"101":0.09696,"102":0.19902,"103":3.98034,"104":8.94046,"105":0.03062,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.0051,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01021,"64":0.01021,"65":0,"66":0,"67":0,"68":0.0051,"69":0,"70":0,"71":0.0051,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01021,"89":0.36231,"90":0.03062,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.0051},B:{"12":0,"13":0,"14":0,"15":0.0051,"16":0,"17":0.0051,"18":0.02552,"79":0.0051,"80":0,"81":0,"83":0,"84":0.0051,"85":0.01021,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.0051,"93":0.0051,"94":0,"95":0.0051,"96":0.0051,"97":0.0051,"98":0.0051,"99":0.0051,"100":0.0051,"101":0.07655,"102":0.02552,"103":1.31147,"104":3.34757,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.0051,"9":0,"10":0,"11":0,"12":0,"13":0.02041,"14":0.10716,"15":0.02552,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.0051,"10.1":0.0051,"11.1":0.02552,"12.1":0.03572,"13.1":0.15309,"14.1":0.31128,"15.1":0.05103,"15.2-15.3":0.05103,"15.4":0.15309,"15.5":0.68891,"15.6":1.56152,"16.0":0.01021},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00352,"6.0-6.1":0.00703,"7.0-7.1":0.01758,"8.1-8.4":0.01406,"9.0-9.2":0.00703,"9.3":0.35866,"10.0-10.2":0.01055,"10.3":0.33053,"11.0-11.2":0.11604,"11.3-11.4":0.07736,"12.0-12.1":0.11604,"12.2-12.5":1.52605,"13.0-13.1":0.02813,"13.2":0.01055,"13.3":0.06329,"13.4-13.7":0.21801,"14.0-14.4":0.65754,"14.5-14.8":2.05349,"15.0-15.1":0.44305,"15.2-15.3":0.80522,"15.4":1.10059,"15.5":7.01491,"15.6":19.9758,"16.0":0.18636},P:{"4":0.09531,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01059,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.03177,"12.0":0.02118,"13.0":0.06354,"14.0":0.05295,"15.0":0.03177,"16.0":0.08472,"17.0":1.30252,"18.0":2.08615},I:{"0":0,"3":0,"4":0.33243,"2.1":0,"2.2":0.06571,"2.3":0,"4.1":0.01933,"4.2-4.3":0.13916,"4.4":0,"4.4.3-4.4.4":0.34016},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.01021,"9":0.01021,"10":0,"11":0.09185,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":32.14511},S:{"2.5":0},R:{_:"0"},M:{"0":0.44073},Q:{"10.4":0.0049},O:{"0":0.09794},H:{"0":0.21326}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GD.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GD.js index e72dbf354be..71d4c353eb7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GD.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GD.js @@ -1 +1 @@ -module.exports={C:{"47":0.00909,"52":0.00454,"60":0.01817,"72":0.00454,"78":0.01363,"86":0.19989,"89":0.00454,"91":0.02726,"95":0.00454,"96":0.99037,"97":1.17209,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 87 88 90 92 93 94 98 99 3.5 3.6"},D:{"38":0.01817,"49":0.00454,"63":0.01363,"65":0.00454,"71":0.02272,"73":0.05452,"76":0.10903,"77":0.04997,"79":0.01363,"80":0.00454,"81":0.02726,"83":0.26804,"84":0.00454,"85":0.00909,"86":0.02726,"87":0.10449,"88":0.01363,"89":0.02272,"90":0.00909,"91":0.04543,"92":0.09086,"93":0.07269,"94":0.02726,"95":0.02726,"96":0.26349,"97":8.08654,"98":16.7455,"99":0.01817,"100":0.00454,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 64 66 67 68 69 70 72 74 75 78 101"},F:{"67":0.24532,"82":0.16355,"83":0.62693,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.09086,"18":0.01363,"92":0.03634,"96":0.04997,"97":2.21698,"98":7.60044,_:"12 13 14 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94 95"},E:{"4":0,"13":0.00909,"14":0.14538,"15":0.19535,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 10.1 11.1 15.4","5.1":0.01363,"9.1":0.01817,"12.1":0.04089,"13.1":0.18626,"14.1":0.59513,"15.1":0.77231,"15.2-15.3":0.82683},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00619,"6.0-6.1":0,"7.0-7.1":0.09704,"8.1-8.4":0,"9.0-9.2":0.03097,"9.3":0.0702,"10.0-10.2":0,"10.3":0.26324,"11.0-11.2":0.01032,"11.3-11.4":0.02581,"12.0-12.1":0.00619,"12.2-12.5":0.49242,"13.0-13.1":0.00206,"13.2":0,"13.3":0.01961,"13.4-13.7":0.05471,"14.0-14.4":0.23434,"14.5-14.8":1.51856,"15.0-15.1":2.12454,"15.2-15.3":5.34645,"15.4":0.01652},P:{"4":0.07596,"5.0-5.4":0.04073,"6.2-6.4":0.01071,"7.2-7.4":0.21703,"8.2":0.01071,"9.2":0.0632,"10.1":0.02096,"11.1-11.2":0.13022,"12.0":0.02107,"13.0":0.04341,"14.0":0.04341,"15.0":0.11937,"16.0":3.16868},I:{"0":0,"3":0,"4":0.00084,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00127,"4.4":0,"4.4.3-4.4.4":0.09066},A:{"11":0.06815,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.10368},Q:{"10.4":0},O:{"0":0.07094},H:{"0":0.19115},L:{"0":37.10759},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00437,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.01312,"87":0,"88":0,"89":0,"90":0,"91":0.01312,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00437,"99":0,"100":0,"101":0.00437,"102":0.03062,"103":0.6736,"104":0.05686,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00437,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.00437,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0.00437,"63":0.01312,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.03499,"74":0,"75":0.00437,"76":0.02187,"77":0,"78":0,"79":0.02624,"80":0.00437,"81":0.00437,"83":0.00437,"84":0.00437,"85":0,"86":0.00875,"87":0.03499,"88":0,"89":0.00437,"90":0,"91":0.02187,"92":0.07436,"93":0.04374,"94":0.0175,"95":0.00875,"96":0.15746,"97":0.06124,"98":0.00437,"99":0.01312,"100":0.14434,"101":0.04374,"102":0.1006,"103":3.45109,"104":7.26521,"105":0.0175,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.03499,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00437,"89":0.55112,"90":0.0175,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00437,"15":0.05686,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00875,"102":0.00437,"103":0.62111,"104":2.3882,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00437,"14":0.04374,"15":0.01312,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.01312,"13.1":0.06124,"14.1":0.22307,"15.1":0.15746,"15.2-15.3":0.0175,"15.4":0.13559,"15.5":0.2362,"15.6":0.55987,"16.0":0.00437},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.08716,"8.1-8.4":0,"9.0-9.2":0.01701,"9.3":0.26572,"10.0-10.2":0,"10.3":0.16794,"11.0-11.2":0.0085,"11.3-11.4":0.00638,"12.0-12.1":0,"12.2-12.5":0.43366,"13.0-13.1":0.00425,"13.2":0,"13.3":0.00638,"13.4-13.7":0.03401,"14.0-14.4":0.13817,"14.5-14.8":1.36899,"15.0-15.1":0.2147,"15.2-15.3":0.56971,"15.4":0.48467,"15.5":4.28342,"15.6":13.07772,"16.0":0.08503},P:{"4":0.13991,"5.0-5.4":0,"6.2-6.4":0.01076,"7.2-7.4":0.68878,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.05381,"12.0":0,"13.0":0.05381,"14.0":0.03229,"15.0":0.04305,"16.0":0.06457,"17.0":1.23765,"18.0":2.00176},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.37632,"4.2-4.3":0.07526,"4.4":0,"4.4.3-4.4.4":1.73106},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01312,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":51.88009},S:{"2.5":0},R:{_:"0"},M:{"0":0.3038},Q:{"10.4":0},O:{"0":0.03938},H:{"0":0.16512}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GE.js index 64078eac614..39abaaac17f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GE.js @@ -1 +1 @@ -module.exports={C:{"34":0.00428,"48":0.00428,"52":0.00855,"68":0.02139,"78":0.03849,"83":0.00428,"84":0.00855,"88":0.01283,"89":0.00855,"90":0.00428,"91":0.01283,"94":0.00428,"95":0.01711,"96":0.41487,"97":0.71426,"98":0.00855,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 82 85 86 87 92 93 99 3.5 3.6"},D:{"38":0.00855,"47":0.02566,"49":0.05988,"50":0.01283,"53":0.00855,"56":0.01283,"59":0.01711,"62":0.02566,"63":0.00855,"64":0.00855,"66":0.02139,"67":0.00855,"68":0.02566,"69":0.01711,"70":0.00855,"71":0.01711,"72":0.00855,"73":0.01283,"74":0.01711,"75":0.02139,"76":0.06843,"77":0.00855,"78":0.04705,"79":0.19247,"80":0.01711,"81":0.02566,"83":0.04705,"84":0.02994,"85":0.02994,"86":0.07699,"87":0.08554,"88":0.07271,"89":0.03422,"90":0.11976,"91":0.05132,"92":0.07699,"93":0.10265,"94":0.08126,"95":0.10693,"96":0.44053,"97":8.09208,"98":20.24304,"99":0.03422,"100":0.1112,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 48 51 52 54 55 57 58 60 61 65 101"},F:{"28":0.04705,"36":0.00428,"40":0.00428,"46":0.01711,"49":0.00428,"67":0.00855,"72":0.01283,"73":0.00855,"77":0.03849,"79":0.00855,"80":0.00855,"81":0.01711,"82":0.41487,"83":2.7715,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 74 75 76 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00855,"13":0.08554,"14":0.23096,"15":0.00428,"16":0.10265,"17":0.02139,"18":0.15825,"84":0.02994,"88":0.00855,"89":0.00855,"91":0.00428,"92":0.01283,"93":0.00428,"94":0.00855,"95":0.02139,"96":0.09837,"97":0.77414,"98":3.06233,_:"79 80 81 83 85 86 87 90"},E:{"4":0,"13":0.02566,"14":0.06843,"15":0.02994,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.00855,"12.1":0.02139,"13.1":0.07271,"14.1":0.19674,"15.1":0.13259,"15.2-15.3":0.23524,"15.4":0.04277},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.03446,"6.0-6.1":0.0053,"7.0-7.1":0.22133,"8.1-8.4":0.00133,"9.0-9.2":0.00265,"9.3":0.09277,"10.0-10.2":0.00398,"10.3":0.12856,"11.0-11.2":0.05964,"11.3-11.4":0.02916,"12.0-12.1":0.03048,"12.2-12.5":0.95823,"13.0-13.1":0.02518,"13.2":0.01325,"13.3":0.09145,"13.4-13.7":0.277,"14.0-14.4":0.88003,"14.5-14.8":2.61624,"15.0-15.1":2.22128,"15.2-15.3":5.50815,"15.4":0.05169},P:{"4":0.58696,"5.0-5.4":0.04073,"6.2-6.4":0.01018,"7.2-7.4":0.1153,"8.2":0.02094,"9.2":0.07127,"10.1":0.02096,"11.1-11.2":0.08385,"12.0":0.01048,"13.0":0.1153,"14.0":0.15722,"15.0":0.06289,"16.0":1.09007},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00465,"4.2-4.3":0.02944,"4.4":0,"4.4.3-4.4.4":0.11468},A:{"11":0.11548,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.06866},Q:{"10.4":0},O:{"0":0.08583},H:{"0":0.20585},L:{"0":41.13343},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00459,"49":0,"50":0,"51":0,"52":0.00459,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00459,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01835,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00459,"85":0,"86":0,"87":0,"88":0.01835,"89":0,"90":0,"91":0.00459,"92":0,"93":0,"94":0,"95":0.00459,"96":0,"97":0,"98":0.00459,"99":0.01835,"100":0.00459,"101":0.00459,"102":0.07798,"103":0.4587,"104":0.09174,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00459,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.01376,"48":0,"49":0.03211,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00459,"57":0,"58":0,"59":0.00459,"60":0,"61":0,"62":0.00459,"63":0.00459,"64":0,"65":0,"66":0.00917,"67":0,"68":0.00917,"69":0,"70":0.00459,"71":0.00459,"72":0.00459,"73":0.00459,"74":0.01835,"75":0.00459,"76":0.03211,"77":0.00459,"78":0.00459,"79":0.1055,"80":0.00459,"81":0.03211,"83":0.0367,"84":0.00459,"85":0.01835,"86":0.01376,"87":0.02752,"88":0.01376,"89":0.01835,"90":0.05963,"91":0.01835,"92":0.01376,"93":0.00917,"94":0.00917,"95":0.01835,"96":0.0367,"97":0.02752,"98":0.0367,"99":0.0367,"100":0.03211,"101":0.04128,"102":0.11926,"103":3.81638,"104":10.22901,"105":0.06422,"106":0.07798,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.01835,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00459,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.0367,"47":0,"48":0.01376,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00459,"64":0.00459,"65":0,"66":0,"67":0.00459,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.02294,"78":0,"79":0.02752,"80":0,"81":0,"82":0,"83":0,"84":0.00459,"85":0.05046,"86":0.00459,"87":0.00459,"88":0.01376,"89":1.33482,"90":0.21559,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00459,"13":0.01835,"14":0.05504,"15":0.00459,"16":0.01835,"17":0,"18":0.01376,"79":0,"80":0,"81":0,"83":0,"84":0.00459,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00459,"93":0.00459,"94":0,"95":0.00459,"96":0.00459,"97":0,"98":0.00459,"99":0.00459,"100":0.00459,"101":0.01376,"102":0.00917,"103":0.35779,"104":0.97244,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00459,"13":0.00917,"14":0.02294,"15":0.00917,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00459,"12.1":0.00459,"13.1":0.0367,"14.1":0.05963,"15.1":0.01835,"15.2-15.3":0.02752,"15.4":0.05963,"15.5":0.16055,"15.6":0.21559,"16.0":0.00917},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.02861,"6.0-6.1":0,"7.0-7.1":0.14485,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04828,"10.0-10.2":0.00715,"10.3":0.13949,"11.0-11.2":0.03577,"11.3-11.4":0.0304,"12.0-12.1":0.03219,"12.2-12.5":1.22322,"13.0-13.1":0.01788,"13.2":0.01073,"13.3":0.06438,"13.4-13.7":0.28077,"14.0-14.4":0.72427,"14.5-14.8":1.26435,"15.0-15.1":0.4292,"15.2-15.3":0.66347,"15.4":0.98716,"15.5":4.48514,"15.6":7.02457,"16.0":0.23785},P:{"4":0.51956,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.1143,"8.2":0,"9.2":0.01039,"10.1":0,"11.1-11.2":0.03117,"12.0":0.01039,"13.0":0.06235,"14.0":0.08313,"15.0":0.02078,"16.0":0.08313,"17.0":0.86247,"18.0":0.78973},I:{"0":0,"3":0,"4":0.05157,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02579,"4.2-4.3":0.07736,"4.4":0,"4.4.3-4.4.4":0.65325},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01835,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":56.24394},S:{"2.5":0},R:{_:"0"},M:{"0":0.09202},Q:{"10.4":0},O:{"0":0.06496},H:{"0":0.30748}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GF.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GF.js index 2e90429448e..b59e939f240 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GF.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GF.js @@ -1 +1 @@ -module.exports={C:{"35":0.00844,"52":0.0211,"60":0.03376,"68":0.00422,"71":0.00844,"73":0.00422,"76":0.07174,"77":0.00422,"78":0.1055,"81":0.01688,"83":0.00422,"85":0.01266,"86":0.00844,"88":0.02954,"89":0.01266,"91":0.1055,"92":0.01266,"94":0.01266,"95":0.05064,"96":2.28302,"97":3.87818,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 69 70 72 74 75 79 80 82 84 87 90 93 98 99 3.5 3.6"},D:{"38":0.00844,"39":0.02954,"47":0.00422,"49":0.1055,"51":0.00422,"63":0.01688,"66":0.00422,"67":0.01266,"76":0.02532,"78":0.00422,"79":0.02532,"87":0.0211,"88":0.01266,"89":0.04642,"90":0.01688,"91":0.02954,"92":0.0422,"93":0.02954,"94":0.04642,"95":0.0211,"96":0.2743,"97":5.4016,"98":12.5334,"100":0.01266,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 40 41 42 43 44 45 46 48 50 52 53 54 55 56 57 58 59 60 61 62 64 65 68 69 70 71 72 73 74 75 77 80 81 83 84 85 86 99 101"},F:{"46":0.01266,"79":0.01266,"82":0.20678,"83":0.59502,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.06752,"15":0.00422,"16":0.01266,"17":0.00422,"18":0.03376,"88":0.00422,"89":0.00422,"90":0.00422,"92":0.00844,"94":0.00844,"95":0.00844,"96":0.08018,"97":2.15642,"98":7.10648,_:"13 14 79 80 81 83 84 85 86 87 91 93"},E:{"4":0,"11":0.00844,"13":0.34182,"14":0.32494,"15":0.211,_:"0 5 6 7 8 9 10 12 3.1 3.2 5.1 6.1 7.1 15.4","9.1":0.00422,"10.1":0.05064,"11.1":0.03376,"12.1":0.03798,"13.1":0.29962,"14.1":1.25756,"15.1":0.47686,"15.2-15.3":0.76804},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.00736,"9.3":0.03236,"10.0-10.2":0,"10.3":0.04119,"11.0-11.2":0.15593,"11.3-11.4":0.00441,"12.0-12.1":0.0103,"12.2-12.5":0.33686,"13.0-13.1":0.05296,"13.2":0,"13.3":0.01765,"13.4-13.7":0.22654,"14.0-14.4":0.59871,"14.5-14.8":2.68903,"15.0-15.1":2.26243,"15.2-15.3":8.23036,"15.4":0.03825},P:{"4":0.08228,"5.0-5.4":0.02093,"6.2-6.4":0.04074,"7.2-7.4":0.10285,"8.2":0.0104,"9.2":0.01094,"10.1":0.04074,"11.1-11.2":0.10285,"12.0":0.02057,"13.0":0.40113,"14.0":0.16457,"15.0":0.08228,"16.0":3.05477},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00189,"4.2-4.3":0.00236,"4.4":0,"4.4.3-4.4.4":0.01887},A:{"11":0.1055,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.48552},Q:{"10.4":0},O:{"0":0.02312},H:{"0":0.17511},L:{"0":37.47044},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.00818,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00818,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00409,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00409,"78":0.00818,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00409,"87":0,"88":0.00409,"89":0.00409,"90":0,"91":0.13913,"92":0,"93":0,"94":0,"95":0.00409,"96":0.00818,"97":0.00818,"98":0.00818,"99":0.00409,"100":0.01637,"101":0.00818,"102":0.07775,"103":1.16622,"104":0.14322,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00409,"48":0,"49":0.04092,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00409,"68":0,"69":0,"70":0,"71":0,"72":0.00818,"73":0,"74":0.00409,"75":0,"76":0.01228,"77":0,"78":0,"79":0.01637,"80":0,"81":0.00409,"83":0,"84":0.00409,"85":0,"86":0.00409,"87":0,"88":0.00818,"89":0.01228,"90":0.01637,"91":0.00818,"92":0.00409,"93":0,"94":0.01228,"95":0.00409,"96":0.00818,"97":0.00818,"98":0,"99":0.01637,"100":0.02864,"101":0.01637,"102":0.04092,"103":2.37336,"104":5.92522,"105":0.02864,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00818,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00409,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00409,"88":0,"89":0.27826,"90":0.02455,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.06138,"13":0,"14":0,"15":0,"16":0,"17":0.00409,"18":0.00818,"79":0,"80":0,"81":0,"83":0,"84":0.01637,"85":0,"86":0,"87":0,"88":0,"89":0.00818,"90":0,"91":0,"92":0.00409,"93":0,"94":0,"95":0,"96":0.00409,"97":0.00409,"98":0,"99":0,"100":0.00409,"101":0.01637,"102":0.00818,"103":1.10893,"104":2.27515,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.02046,"13":0,"14":0.11458,"15":0.01228,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00409,"12.1":0.00409,"13.1":0.03274,"14.1":0.18005,"15.1":0.01228,"15.2-15.3":0.02864,"15.4":0.06547,"15.5":0.23324,"15.6":0.27007,"16.0":0.00409},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00172,"7.0-7.1":0.055,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.21484,"10.0-10.2":0,"10.3":0.00516,"11.0-11.2":0.00516,"11.3-11.4":0.00344,"12.0-12.1":0.02922,"12.2-12.5":0.43655,"13.0-13.1":0.01719,"13.2":0.00516,"13.3":0.03437,"13.4-13.7":0.12547,"14.0-14.4":0.36609,"14.5-14.8":1.08623,"15.0-15.1":0.35234,"15.2-15.3":0.41249,"15.4":2.24636,"15.5":4.54944,"15.6":7.00376,"16.0":0.23031},P:{"4":0.10308,"5.0-5.4":0.01031,"6.2-6.4":0,"7.2-7.4":0.10308,"8.2":0,"9.2":0.01031,"10.1":0.01031,"11.1-11.2":0.11339,"12.0":0.01031,"13.0":0.15463,"14.0":0.26802,"15.0":0.15463,"16.0":0.18555,"17.0":1.62872,"18.0":2.2163},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.014,"4.2-4.3":0.028,"4.4":0,"4.4.3-4.4.4":0.30804},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01637,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":59.08339},S:{"2.5":0.01182},R:{_:"0"},M:{"0":0.33085},Q:{"10.4":0},O:{"0":0.04726},H:{"0":0.31323}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GG.js index ac00daecf62..f56b9462444 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GG.js @@ -1 +1 @@ -module.exports={C:{"52":0.37455,"70":0.01998,"78":0.01498,"87":0.05993,"94":0.00999,"95":0.01998,"96":0.58929,"97":0.98881,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 88 89 90 91 92 93 98 99 3.5 3.6"},D:{"38":0.00999,"49":0.00999,"65":0.01498,"66":0.00499,"67":0.00499,"76":0.37954,"77":0.06992,"78":0.00499,"79":0.00499,"81":0.01998,"83":0.01498,"84":0.01498,"86":0.00999,"87":0.07491,"88":0.00499,"90":0.04994,"91":0.05493,"92":0.03496,"93":0.31962,"94":0.00999,"95":0.02497,"96":0.54435,"97":7.72572,"98":14.50258,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 68 69 70 71 72 73 74 75 80 85 89 99 100 101"},F:{"82":0.05493,"83":0.43448,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.03496,"18":0.00999,"87":0.00499,"90":0.00999,"91":0.01998,"95":0.00999,"96":0.02996,"97":1.7479,"98":6.35736,_:"12 13 14 15 16 79 80 81 83 84 85 86 88 89 92 93 94"},E:{"4":0,"11":0.00499,"13":0.06492,"14":0.70415,"15":0.38454,_:"0 5 6 7 8 9 10 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.15981,"12.1":0.07491,"13.1":0.87395,"14.1":2.46704,"15.1":1.67798,"15.2-15.3":4.3298},G:{"8":0.03144,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":2.77303,"10.0-10.2":0,"10.3":0.55335,"11.0-11.2":0.07231,"11.3-11.4":0.01572,"12.0-12.1":0.01886,"12.2-12.5":1.41481,"13.0-13.1":0.00314,"13.2":0,"13.3":0.03458,"13.4-13.7":0.33955,"14.0-14.4":1.12871,"14.5-14.8":5.33541,"15.0-15.1":4.41421,"15.2-15.3":15.27368,"15.4":0.01258},P:{"4":0.13335,"5.0-5.4":0.04073,"6.2-6.4":0.01071,"7.2-7.4":0.18464,"8.2":0.01071,"9.2":0.03077,"10.1":0.02096,"11.1-11.2":0.0561,"12.0":0.02052,"13.0":0.03366,"14.0":0.21317,"15.0":0.15707,"16.0":4.22969},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.93388,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.17518},Q:{"10.4":0},O:{"0":0},H:{"0":0},L:{"0":14.1478},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01541,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00514,"89":0,"90":0,"91":0.02569,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00514,"99":0,"100":0,"101":0,"102":0.04623,"103":0.82192,"104":0.11301,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00514,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.01027,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.00514,"77":0.00514,"78":0,"79":0.02055,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0.06164,"87":0.02569,"88":0,"89":0.01027,"90":0.01027,"91":0.01027,"92":0,"93":0,"94":0,"95":0,"96":0.02055,"97":0,"98":0.02569,"99":0.08219,"100":0.01027,"101":0.06678,"102":0.20034,"103":2.93836,"104":7.13529,"105":0.02569,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.04623,"89":0.10274,"90":0.01027,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0.00514,"88":0,"89":0,"90":0.00514,"91":0,"92":0,"93":0,"94":0,"95":0.01027,"96":0.02055,"97":0,"98":0,"99":0.01027,"100":0,"101":0.07192,"102":0.01027,"103":1.04281,"104":2.57364,"105":0.00514},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.02055,"14":0.23117,"15":0.03082,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.01027,"11.1":0.06164,"12.1":0.01027,"13.1":0.47774,"14.1":0.63185,"15.1":0.03082,"15.2-15.3":0.05651,"15.4":0.29795,"15.5":1.69521,"15.6":4.56679,"16.0":0},G:{"8":0.06165,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00949,"9.0-9.2":0.00949,"9.3":0.41735,"10.0-10.2":0,"10.3":1.07658,"11.0-11.2":0.01897,"11.3-11.4":0.01897,"12.0-12.1":0.03794,"12.2-12.5":2.43298,"13.0-13.1":0.01423,"13.2":0.01897,"13.3":0.01897,"13.4-13.7":0.4221,"14.0-14.4":1.41331,"14.5-14.8":2.12471,"15.0-15.1":0.7446,"15.2-15.3":0.53592,"15.4":1.3896,"15.5":9.82676,"15.6":26.68687,"16.0":0.13279},P:{"4":0.03275,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.02183,"12.0":0,"13.0":0.05458,"14.0":0,"15.0":0.01092,"16.0":0.02183,"17.0":1.48445,"18.0":1.85556},I:{"0":0,"3":0,"4":0.02681,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00766,"4.4":0,"4.4.3-4.4.4":0.49786},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.32877,"5.5":0},J:{"7":0,"10":0.00486},N:{"10":0,"11":0},L:{"0":20.74964},S:{"2.5":0},R:{_:"0"},M:{"0":0.88993},Q:{"10.4":0},O:{"0":0},H:{"0":0.01842}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GH.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GH.js index 807daf2902a..866c740e520 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GH.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GH.js @@ -1 +1 @@ -module.exports={C:{"30":0.00231,"31":0.00231,"35":0.00461,"40":0.00231,"41":0.00231,"42":0.00231,"43":0.00461,"44":0.00231,"45":0.00231,"47":0.00692,"48":0.00692,"49":0.00692,"50":0.00461,"52":0.01614,"56":0.00692,"64":0.00231,"66":0.00461,"68":0.00461,"69":0.00231,"72":0.01153,"73":0.00231,"74":0.00231,"78":0.01153,"81":0.00461,"83":0.00231,"84":0.00692,"85":0.00692,"86":0.00461,"87":0.00692,"88":0.01153,"89":0.01153,"90":0.00231,"91":0.01614,"92":0.00922,"93":0.01153,"94":0.01384,"95":0.04843,"96":0.77943,"97":1.01695,"98":0.0761,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 32 33 34 36 37 38 39 46 51 53 54 55 57 58 59 60 61 62 63 65 67 70 71 75 76 77 79 80 82 99 3.5 3.6"},D:{"11":0.00231,"33":0.00231,"38":0.00461,"39":0.00231,"43":0.00461,"47":0.00461,"49":0.02075,"50":0.00692,"55":0.00461,"56":0.00461,"57":0.00461,"58":0.00692,"60":0.00461,"63":0.00922,"64":0.00231,"65":0.00922,"66":0.00231,"67":0.01153,"68":0.02075,"69":0.01153,"70":0.00922,"71":0.00461,"72":0.00922,"73":0.00231,"74":0.00922,"75":0.01614,"76":0.01384,"77":0.04843,"78":0.01384,"79":0.03459,"80":0.02998,"81":0.02998,"83":0.02537,"84":0.01153,"85":0.01614,"86":0.03228,"87":0.06457,"88":0.06457,"89":0.03228,"90":0.02075,"91":0.05073,"92":0.05304,"93":0.04151,"94":0.05996,"95":0.07149,"96":0.33668,"97":3.67576,"98":7.97876,"99":0.01153,"100":0.02075,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 40 41 42 44 45 46 48 51 52 53 54 59 61 62 101"},F:{"36":0.00231,"42":0.00692,"67":0.00692,"73":0.00461,"79":0.00922,"80":0.00461,"82":0.11069,"83":0.90856,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 72 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.02998,"13":0.00922,"14":0.00922,"15":0.01153,"16":0.02075,"17":0.01845,"18":0.0761,"84":0.0369,"85":0.01384,"89":0.06687,"90":0.02075,"91":0.00461,"92":0.05073,"93":0.01153,"94":0.01384,"95":0.02306,"96":0.08532,"97":0.55113,"98":1.51735,_:"79 80 81 83 86 87 88"},E:{"4":0,"11":0.00231,"12":0.00231,"13":0.01153,"14":0.05996,"15":0.05073,_:"0 5 6 7 8 9 10 3.1 3.2 6.1 7.1 15.4","5.1":0.00692,"9.1":0.00461,"10.1":0.00692,"11.1":0.01614,"12.1":0.02537,"13.1":0.09224,"14.1":0.15911,"15.1":0.11069,"15.2-15.3":0.18448},G:{"8":0.00571,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00143,"7.0-7.1":0.02282,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04422,"10.0-10.2":0.00285,"10.3":0.13552,"11.0-11.2":0.50785,"11.3-11.4":0.03566,"12.0-12.1":0.04993,"12.2-12.5":1.46079,"13.0-13.1":0.06847,"13.2":0.04422,"13.3":0.15977,"13.4-13.7":0.3652,"14.0-14.4":2.22114,"14.5-14.8":2.85739,"15.0-15.1":2.77037,"15.2-15.3":3.47794,"15.4":0.02568},P:{"4":0.1264,"5.0-5.4":0.04073,"6.2-6.4":0.01018,"7.2-7.4":0.13693,"8.2":0.02094,"9.2":0.0632,"10.1":0.02096,"11.1-11.2":0.13693,"12.0":0.02107,"13.0":0.08427,"14.0":0.21067,"15.0":0.16854,"16.0":0.82161},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00196,"4.2-4.3":0.00476,"4.4":0,"4.4.3-4.4.4":0.03945},A:{"10":0.00461,"11":0.08763,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.02308},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.31545},Q:{"10.4":0},O:{"0":2.03122},H:{"0":13.00955},L:{"0":46.8191},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00247,"48":0,"49":0,"50":0,"51":0,"52":0.00247,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00247,"69":0,"70":0,"71":0,"72":0.00493,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00247,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00247,"88":0.00247,"89":0.00247,"90":0,"91":0.00493,"92":0,"93":0,"94":0.00247,"95":0.00247,"96":0.00247,"97":0.00247,"98":0.00247,"99":0.00493,"100":0.00493,"101":0.00493,"102":0.02712,"103":0.34017,"104":0.05916,"105":0.00493,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00247,"41":0,"42":0.01233,"43":0.00247,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00247,"50":0.00247,"51":0,"52":0,"53":0,"54":0,"55":0.00247,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00247,"64":0.00247,"65":0.00247,"66":0,"67":0.00247,"68":0.00247,"69":0.00247,"70":0.00247,"71":0.00247,"72":0.00247,"73":0.00247,"74":0.00493,"75":0.00247,"76":0.00247,"77":0.00493,"78":0.00247,"79":0.01233,"80":0.00986,"81":0.02712,"83":0.00493,"84":0.00493,"85":0.00247,"86":0.0074,"87":0.01479,"88":0.00247,"89":0.0074,"90":0.0074,"91":0.00986,"92":0.0074,"93":0.0074,"94":0.00493,"95":0.0074,"96":0.00986,"97":0.0074,"98":0.00986,"99":0.01233,"100":0.01479,"101":0.01479,"102":0.05177,"103":0.75429,"104":1.98186,"105":0.00986,"106":0.00247,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00493,"25":0,"26":0.00247,"27":0.01233,"28":0.00247,"29":0,"30":0.0074,"31":0.00247,"32":0.0074,"33":0.00247,"34":0,"35":0,"36":0,"37":0,"38":0.00247,"39":0,"40":0,"41":0,"42":0.00493,"43":0,"44":0,"45":0.00247,"46":0.00493,"47":0.00247,"48":0,"49":0,"50":0.01233,"51":0.00493,"52":0,"53":0.00247,"54":0.01972,"55":0.01479,"56":0.00247,"57":0.01233,"58":0.04437,"60":0.52258,"62":0.0074,"63":1.16102,"64":0.28348,"65":0,"66":0,"67":0.00247,"68":0,"69":0.00247,"70":0.00247,"71":0.00247,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.01233,"80":0,"81":0,"82":0,"83":0,"84":0.00247,"85":0.01233,"86":0.00493,"87":0.00247,"88":0.00493,"89":0.17255,"90":0.02712,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.0074},B:{"12":0.0074,"13":0.00247,"14":0.00247,"15":0.00986,"16":0.00247,"17":0.00247,"18":0.01972,"79":0,"80":0,"81":0,"83":0,"84":0.0074,"85":0.00247,"86":0,"87":0,"88":0,"89":0.00986,"90":0.0074,"91":0,"92":0.00986,"93":0,"94":0,"95":0,"96":0.00247,"97":0.00247,"98":0.00247,"99":0.00247,"100":0.00247,"101":0.0074,"102":0.00986,"103":0.17502,"104":0.36975,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00247,"14":0.0074,"15":0.00247,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00493,"11.1":0.00247,"12.1":0.00247,"13.1":0.03944,"14.1":0.01479,"15.1":0.00493,"15.2-15.3":0.00493,"15.4":0.00986,"15.5":0.03451,"15.6":0.04437,"16.0":0.00247},G:{"8":0.00182,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01094,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03281,"10.0-10.2":0.00365,"10.3":0.20052,"11.0-11.2":0.09479,"11.3-11.4":0.03099,"12.0-12.1":0.05651,"12.2-12.5":1.76639,"13.0-13.1":0.06198,"13.2":0.02917,"13.3":0.16406,"13.4-13.7":0.2862,"14.0-14.4":1.8229,"14.5-14.8":2.06353,"15.0-15.1":1.63332,"15.2-15.3":1.42733,"15.4":1.16848,"15.5":3.70049,"15.6":3.38148,"16.0":0.2862},P:{"4":0.12037,"5.0-5.4":0.02006,"6.2-6.4":0,"7.2-7.4":0.1304,"8.2":0,"9.2":0.06018,"10.1":0,"11.1-11.2":0.08025,"12.0":0.05015,"13.0":0.04012,"14.0":0.05015,"15.0":0.04012,"16.0":0.1304,"17.0":0.53163,"18.0":0.32098},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00428,"4.2-4.3":0.02398,"4.4":0,"4.4.3-4.4.4":0.10364},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01479,"5.5":0},J:{"7":0,"10":0.02261},N:{"10":0,"11":0},L:{"0":55.54377},S:{"2.5":0},R:{_:"0"},M:{"0":0.32401},Q:{"10.4":0.00754},O:{"0":1.19807},H:{"0":13.19012}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GI.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GI.js index 8a22d3b959b..c063bcc65e1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GI.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GI.js @@ -1 +1 @@ -module.exports={C:{"78":0.07764,"89":0.04658,"90":0.06729,"91":0.01035,"95":0.01035,"96":0.47102,"97":0.71946,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 92 93 94 98 99 3.5 3.6"},D:{"49":0.01035,"60":0.05176,"74":0.00518,"78":0.01035,"79":0.03623,"80":0.02588,"81":0.07246,"83":0.01035,"84":0.15528,"86":0.02588,"87":0.02588,"89":0.07764,"90":0.04141,"91":0.01553,"92":0.02588,"93":0.69876,"94":0.06211,"95":0.17081,"96":0.27433,"97":9.79299,"98":21.29924,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 72 73 75 76 77 85 88 99 100 101"},F:{"36":0.02588,"82":0.11905,"83":0.40373,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.08799,"92":0.03106,"95":0.06729,"96":0.03623,"97":1.30953,"98":4.7878,_:"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94"},E:{"4":0,"9":0.01035,"13":0.47619,"14":0.61077,"15":0.46066,_:"0 5 6 7 8 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.03623,"11.1":0.03106,"12.1":0.24845,"13.1":0.34162,"14.1":2.14286,"15.1":0.97309,"15.2-15.3":2.24638,"15.4":0.01035},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.01613,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.19966,"9.3":0.12706,"10.0-10.2":0,"10.3":0.09882,"11.0-11.2":0.11697,"11.3-11.4":0.02017,"12.0-12.1":0.02622,"12.2-12.5":0.44167,"13.0-13.1":0.00403,"13.2":0.00403,"13.3":0.07059,"13.4-13.7":0.13311,"14.0-14.4":0.6857,"14.5-14.8":4.43081,"15.0-15.1":3.53941,"15.2-15.3":10.20075,"15.4":0.04437},P:{"4":0.12606,"5.0-5.4":0.04073,"6.2-6.4":0.01018,"7.2-7.4":0.13693,"8.2":0.02094,"9.2":0.0632,"10.1":0.02096,"11.1-11.2":0.04202,"12.0":0.02107,"13.0":0.04202,"14.0":0.06303,"15.0":0.02101,"16.0":4.20184},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.14493,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":3.89779},Q:{"10.4":0},O:{"0":0.06271},H:{"0":0.70789},L:{"0":19.50756},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00487,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.00487,"76":0,"77":0,"78":0.00487,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00974,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.00487,"98":0.00487,"99":0,"100":0.00487,"101":0.00974,"102":0.00974,"103":0.55982,"104":0.10223,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00487,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.0146,"60":0.02434,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00487,"69":0,"70":0,"71":0,"72":0.00487,"73":0.00487,"74":0.00487,"75":0,"76":0.00487,"77":0,"78":0.00487,"79":0.02434,"80":0.01947,"81":0.00974,"83":0.00487,"84":0.00487,"85":0.00974,"86":0.00974,"87":0.0146,"88":0.00974,"89":0.0146,"90":0.00487,"91":0.00487,"92":0.00974,"93":0,"94":0,"95":0,"96":0.00487,"97":0.02921,"98":0.00974,"99":0.0146,"100":0.08276,"101":0.27261,"102":0.28234,"103":3.99176,"104":9.24433,"105":0.18012,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.01947,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00974,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.11683,"64":0.30182,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00487,"72":0,"73":0.00487,"74":0,"75":0,"76":0.00487,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.26774,"90":0.00487,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.0146,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00487,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00487,"102":0,"103":0.78862,"104":2.26362,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.00974,"9":0,"10":0,"11":0,"12":0,"13":0.08276,"14":0.07302,"15":0.03408,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.02921,"10.1":0,"11.1":0.0146,"12.1":0,"13.1":0.08276,"14.1":0.19959,"15.1":0.07302,"15.2-15.3":0.12657,"15.4":0.15091,"15.5":1.32896,"15.6":1.14885,"16.0":0.02434},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.01011,"9.0-9.2":0.00337,"9.3":0.05391,"10.0-10.2":0,"10.3":0.06065,"11.0-11.2":0.00674,"11.3-11.4":0.01685,"12.0-12.1":0.01348,"12.2-12.5":0.54584,"13.0-13.1":0.00674,"13.2":0.03032,"13.3":0.04043,"13.4-13.7":0.14488,"14.0-14.4":0.62333,"14.5-14.8":2.25747,"15.0-15.1":0.65703,"15.2-15.3":1.18265,"15.4":1.8363,"15.5":7.76975,"15.6":18.24174,"16.0":0.17184},P:{"4":0.0633,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0.03165,"13.0":0,"14.0":0.13715,"15.0":0.01055,"16.0":0.17935,"17.0":1.63523,"18.0":1.92008},I:{"0":0,"3":0,"4":0.05449,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.1226},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04868,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":35.48035},S:{"2.5":0},R:{_:"0"},M:{"0":0.41569},Q:{"10.4":0},O:{"0":0.41056},H:{"0":0.8697}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GL.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GL.js index ffc2e152830..09d150252e7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GL.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GL.js @@ -1 +1 @@ -module.exports={C:{"48":0.00454,"78":0.04996,"87":0.00908,"89":0.00908,"90":0.00454,"91":0.01363,"94":0.14989,"95":0.02725,"96":0.77668,"97":1.32626,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 88 92 93 98 99 3.5 3.6"},D:{"38":0.01817,"49":0.03634,"52":0.00908,"53":0.01363,"58":0.01363,"65":0.04996,"67":0.00454,"68":0.02725,"73":0.02271,"79":0.01817,"80":0.08176,"81":0.01817,"84":0.01817,"86":0.01817,"88":0.09992,"89":0.24073,"90":0.06813,"91":0.01363,"92":0.01817,"93":0.06813,"94":0.07721,"95":0.1408,"96":0.29523,"97":5.3959,"98":14.41631,"99":0.01817,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 54 55 56 57 59 60 61 62 63 64 66 69 70 71 72 74 75 76 77 78 83 85 87 100 101"},F:{"31":0.00454,"36":0.02725,"80":0.01817,"82":0.40878,"83":0.45874,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00908,"15":0.00908,"16":0.00454,"18":0.04088,"84":0.01363,"85":0.02725,"88":0.00454,"91":0.00908,"92":0.00454,"95":0.01817,"96":0.02271,"97":1.11733,"98":3.22028,_:"12 13 17 79 80 81 83 86 87 89 90 93 94"},E:{"4":0,"12":0.08176,"13":0.46328,"14":0.52687,"15":0.21802,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.01817,"11.1":0.04088,"12.1":0.13172,"13.1":0.50416,"14.1":4.65101,"15.1":2.62528,"15.2-15.3":3.57001,"15.4":0.03179},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.10064,"9.3":0.12199,"10.0-10.2":0,"10.3":0.05795,"11.0-11.2":0,"11.3-11.4":0.00305,"12.0-12.1":0.0061,"12.2-12.5":0.20128,"13.0-13.1":0.05795,"13.2":0.00915,"13.3":0,"13.4-13.7":0.0488,"14.0-14.4":0.48491,"14.5-14.8":2.56789,"15.0-15.1":3.7024,"15.2-15.3":23.01954,"15.4":0.10674},P:{"4":0.23569,"5.0-5.4":0.04073,"6.2-6.4":0.01071,"7.2-7.4":0.01071,"8.2":0.01071,"9.2":0.0632,"10.1":0.02096,"11.1-11.2":0.07499,"12.0":0.02107,"13.0":0.03214,"14.0":0.04285,"15.0":0.20355,"16.0":2.26046},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00504,"4.4":0,"4.4.3-4.4.4":0.01134},A:{"11":0.38607,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.28382},Q:{"10.4":0},O:{"0":0.04912},H:{"0":3.73594},L:{"0":16.05057},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00482,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00482,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.03853,"79":0,"80":0,"81":0.01445,"82":0,"83":0,"84":0.00963,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00963,"92":0,"93":0,"94":0,"95":0,"96":0.00482,"97":0,"98":0,"99":0.00963,"100":0,"101":0.00482,"102":0.15893,"103":1.26661,"104":0.23598,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0.05779,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.00482,"76":0,"77":0,"78":0,"79":0.04334,"80":0.01926,"81":0.00963,"83":0.0289,"84":0,"85":0.00963,"86":0,"87":0.01926,"88":0.04816,"89":0,"90":0.01445,"91":0.01926,"92":0.00482,"93":0.01445,"94":0.01445,"95":0.00482,"96":0,"97":0.00482,"98":0.00963,"99":0.0915,"100":0.07224,"101":0.08669,"102":0.22154,"103":2.81254,"104":7.2529,"105":0.16374,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.07706,"64":0.1493,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0.00963,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00482,"87":0,"88":0,"89":0.71758,"90":0.01926,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.04816,"18":0.0289,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.09632,"93":0,"94":0,"95":0,"96":0.00482,"97":0.00482,"98":0,"99":0,"100":0,"101":0.03371,"102":0.01926,"103":0.5731,"104":2.21054,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00963,"14":0.17819,"15":0.00963,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00482,"12.1":0.09632,"13.1":0.1493,"14.1":0.61163,"15.1":0.1204,"15.2-15.3":0.04816,"15.4":0.20227,"15.5":0.79464,"15.6":1.66152,"16.0":0.00963},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.08325,"9.3":0.02664,"10.0-10.2":0,"10.3":0.02997,"11.0-11.2":0,"11.3-11.4":0.01998,"12.0-12.1":0,"12.2-12.5":0.79923,"13.0-13.1":0.04329,"13.2":0,"13.3":0,"13.4-13.7":0.01665,"14.0-14.4":0.28306,"14.5-14.8":0.62273,"15.0-15.1":0.28306,"15.2-15.3":0.55946,"15.4":0.46621,"15.5":7.29293,"15.6":22.57479,"16.0":0.18982},P:{"4":0.15246,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.03267,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0.01089,"13.0":0,"14.0":0.02178,"15.0":0,"16.0":0.11979,"17.0":1.28499,"18.0":1.73147},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.07779},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.11077,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":35.60792},S:{"2.5":0},R:{_:"0"},M:{"0":0.1607},Q:{"10.4":0},O:{"0":0.2281},H:{"0":2.95454}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GM.js index fd8b9f6d64f..1030d9e6a2e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GM.js @@ -1 +1 @@ -module.exports={C:{"34":0.00923,"43":0.00923,"47":0.00369,"49":0.00554,"52":0.00185,"56":0.01107,"65":0.00369,"69":0.00185,"72":0.01845,"78":0.00369,"85":0.00185,"88":0.00554,"91":0.00923,"93":0.00369,"94":0.00738,"95":0.00738,"96":0.64206,"97":0.98708,"98":0.1476,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 44 45 46 48 50 51 53 54 55 57 58 59 60 61 62 63 64 66 67 68 70 71 73 74 75 76 77 79 80 81 82 83 84 86 87 89 90 92 99 3.5 3.6"},D:{"31":0.00369,"33":0.00554,"34":0.00554,"38":0.01292,"40":0.00369,"47":0.00369,"49":0.01292,"53":0.00369,"55":0.01476,"57":0.01107,"58":0.01661,"60":0.00554,"64":0.00738,"65":0.01107,"67":0.00185,"68":0.00369,"69":0.00185,"70":0.00369,"72":0.00369,"74":0.00369,"75":0.01107,"77":0.00738,"78":0.00369,"79":0.03137,"80":0.00923,"81":0.00923,"84":0.00923,"85":0.00369,"86":0.00185,"87":0.07011,"88":0.00738,"89":0.00738,"90":0.00923,"91":0.01476,"92":0.01107,"93":0.15129,"94":0.02583,"95":0.01661,"96":0.12546,"97":1.85054,"98":5.97596,"99":0.03137,"100":0.0572,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 35 36 37 39 41 42 43 44 45 46 48 50 51 52 54 56 59 61 62 63 66 71 73 76 83 101"},F:{"21":0.00369,"79":0.00369,"82":0.05166,"83":1.01844,_:"9 11 12 15 16 17 18 19 20 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01845,"13":0.00369,"15":0.00738,"16":0.01476,"17":0.00185,"18":0.04797,"80":0.00185,"84":0.00369,"85":0.00554,"89":0.00923,"90":0.01292,"92":0.02214,"93":0.00369,"94":0.01845,"95":0.00923,"96":0.02768,"97":0.49815,"98":1.22508,_:"14 79 81 83 86 87 88 91"},E:{"4":0,"12":0.00185,"13":0.00738,"14":0.06089,"15":0.00554,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 15.4","9.1":0.00738,"10.1":0.00185,"11.1":0.00185,"12.1":0.01292,"13.1":0.04797,"14.1":0.12731,"15.1":0.07011,"15.2-15.3":0.12915},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01021,"6.0-6.1":0,"7.0-7.1":0.02918,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.17505,"10.0-10.2":0.00875,"10.3":0.20131,"11.0-11.2":0.02918,"11.3-11.4":0.09044,"12.0-12.1":0.11816,"12.2-12.5":3.98102,"13.0-13.1":0.06127,"13.2":0.01021,"13.3":0.33552,"13.4-13.7":0.43618,"14.0-14.4":2.33843,"14.5-14.8":2.90152,"15.0-15.1":1.46608,"15.2-15.3":2.37928,"15.4":0.01751},P:{"4":0.34619,"5.0-5.4":0.04073,"6.2-6.4":0.01018,"7.2-7.4":0.93674,"8.2":0.02094,"9.2":0.07127,"10.1":0.02043,"11.1-11.2":0.07127,"12.0":0.04073,"13.0":0.224,"14.0":0.72292,"15.0":0.08146,"16.0":0.97747},I:{"0":0,"3":0,"4":0.00042,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00017,"4.2-4.3":0.01475,"4.4":0,"4.4.3-4.4.4":0.02544},A:{"11":0.0572,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.95414},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.05709},Q:{"10.4":0},O:{"0":0.83997},H:{"0":2.42428},L:{"0":61.63072},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00207,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01036,"79":0,"80":0,"81":0,"82":0,"83":0.00207,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00621,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00207,"99":0.00207,"100":0.00207,"101":0.00207,"102":0.0145,"103":0.37278,"104":0.09734,"105":0.00414,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.03107,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00414,"47":0,"48":0,"49":0.00207,"50":0,"51":0.00207,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00828,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.00207,"77":0.00207,"78":0,"79":0.00414,"80":0.00207,"81":0.01864,"83":0.00207,"84":0.00207,"85":0.00207,"86":0,"87":0.00414,"88":0,"89":0.00207,"90":0.00207,"91":0.00207,"92":0,"93":0.30858,"94":0.00207,"95":0.00207,"96":0.00414,"97":0.00621,"98":0.00828,"99":0.00207,"100":0.00621,"101":0.0145,"102":0.01657,"103":0.35,"104":1.0852,"105":0.00414,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.00621,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.02278,"62":0,"63":0.08284,"64":0.05178,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0.00207,"83":0,"84":0,"85":0.00414,"86":0.00207,"87":0,"88":0.00207,"89":0.06627,"90":0.02485,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00207},B:{"12":0.00207,"13":0.00207,"14":0,"15":0.03728,"16":0.00621,"17":0.00207,"18":0.05178,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00207,"91":0,"92":0.00621,"93":0,"94":0.00414,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.05799,"101":0.00828,"102":0.00414,"103":0.08698,"104":0.34379,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00621,"14":0.00621,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00621,"13.1":0.00414,"14.1":0.00828,"15.1":0.00621,"15.2-15.3":0.00414,"15.4":0.00621,"15.5":0.03935,"15.6":0.04556,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00813,"6.0-6.1":0,"7.0-7.1":0.05896,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.08132,"10.0-10.2":0.0122,"10.3":0.95349,"11.0-11.2":0.04066,"11.3-11.4":0.07319,"12.0-12.1":0.14435,"12.2-12.5":4.72681,"13.0-13.1":0.03456,"13.2":0.02033,"13.3":0.6953,"13.4-13.7":0.22973,"14.0-14.4":1.42109,"14.5-14.8":1.74435,"15.0-15.1":0.96163,"15.2-15.3":0.75426,"15.4":1.70369,"15.5":2.92148,"15.6":3.55578,"16.0":0.18094},P:{"4":1.06393,"5.0-5.4":0.05115,"6.2-6.4":0.01023,"7.2-7.4":0.22506,"8.2":0.01023,"9.2":0.23529,"10.1":0,"11.1-11.2":0.03069,"12.0":0,"13.0":0.05115,"14.0":0.13299,"15.0":0.14322,"16.0":0.14322,"17.0":0.41943,"18.0":0.4092},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00137,"4.2-4.3":0.01586,"4.4":0,"4.4.3-4.4.4":0.1739},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00207,"5.5":0},J:{"7":0,"10":0.03965},N:{"10":0,"11":0},L:{"0":69.00374},S:{"2.5":0},R:{_:"0"},M:{"0":0.03965},Q:{"10.4":0},O:{"0":0.59468},H:{"0":2.01179}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GN.js index d13224b0dd9..43d5d40f7a0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GN.js @@ -1 +1 @@ -module.exports={C:{"5":0.00088,"33":0.00529,"35":0.00088,"37":0.00176,"38":0.00176,"44":0.00176,"45":0.00176,"47":0.00265,"65":0.00176,"72":0.00176,"78":0.00088,"80":0.00441,"82":0.00529,"88":0.00088,"91":0.00441,"92":0.2108,"93":0.00088,"95":0.02822,"96":0.20021,"97":0.3431,_:"2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 36 39 40 41 42 43 46 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 66 67 68 69 70 71 73 74 75 76 77 79 81 83 84 85 86 87 89 90 94 98 99 3.5 3.6"},D:{"19":0.00176,"28":0.00529,"29":0.00176,"36":0.00353,"38":0.00441,"43":0.01411,"49":0.0097,"56":0.00176,"57":0.00088,"58":0.00176,"59":0.00088,"60":0.00088,"62":0.00441,"63":0.01499,"64":0.00176,"65":0.00529,"66":0.26901,"67":0.00265,"69":0.00353,"70":0.00176,"72":0.00441,"75":0.00529,"76":0.01147,"78":0.00088,"79":0.00353,"80":0.00265,"81":0.00529,"83":0.00353,"84":0.0097,"86":0.00706,"87":0.00794,"88":0.00088,"89":0.00529,"90":0.00529,"91":0.0247,"92":0.10937,"93":0.01852,"94":0.00441,"95":0.02558,"96":0.11995,"97":0.94903,"98":1.74195,"100":0.00882,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 24 25 26 27 30 31 32 33 34 35 37 39 40 41 42 44 45 46 47 48 50 51 52 53 54 55 61 68 71 73 74 77 85 99 101"},F:{"15":0.00353,"35":0.00176,"42":0.00176,"48":0.00176,"73":0.00088,"75":0.00265,"79":0.00353,"81":0.00265,"82":0.00617,"83":0.20198,_:"9 11 12 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 43 44 45 46 47 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 74 76 77 78 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01676,"13":0.00617,"14":0.00176,"15":0.00176,"16":0.00176,"17":0.00794,"18":0.03352,"84":0.01764,"85":0.00441,"89":0.00441,"90":0.00617,"91":0.00176,"92":0.05292,"93":0.01588,"94":0.06439,"95":0.00176,"96":0.01058,"97":0.17816,"98":0.32017,_:"79 80 81 83 86 87 88"},E:{"4":0,"11":0.00353,"12":0.00794,"13":0.0097,"14":0.02029,"15":0.00706,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1 15.4","9.1":0.00176,"10.1":0.01764,"11.1":0.00176,"12.1":0.00529,"13.1":0.0247,"14.1":0.0194,"15.1":0.01588,"15.2-15.3":0.07321},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.03288,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03145,"10.0-10.2":0.13294,"10.3":0.20013,"11.0-11.2":0.3245,"11.3-11.4":1.23938,"12.0-12.1":0.47031,"12.2-12.5":5.98105,"13.0-13.1":0.41885,"13.2":0.12866,"13.3":0.5232,"13.4-13.7":0.19727,"14.0-14.4":1.35946,"14.5-14.8":1.36089,"15.0-15.1":0.92918,"15.2-15.3":0.95777,"15.4":0},P:{"4":1.46776,"5.0-5.4":0.28149,"6.2-6.4":0.04021,"7.2-7.4":0.41218,"8.2":0.01071,"9.2":0.1709,"10.1":0.02096,"11.1-11.2":0.24128,"12.0":0.03016,"13.0":0.09048,"14.0":0.56298,"15.0":0.65346,"16.0":0.75399},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00114,"4.2-4.3":0.003,"4.4":0,"4.4.3-4.4.4":0.05057},A:{"11":0.0247,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.03647},Q:{"10.4":0.00912},O:{"0":0.23707},H:{"0":6.33613},L:{"0":68.25973},S:{"2.5":0.1003}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0.00109,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00109,"69":0.00109,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00109,"102":0.00326,"103":0.08897,"104":0.00977,"105":0.00109,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00109,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00326,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00109,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00109,"57":0,"58":0.00109,"59":0,"60":0,"61":0,"62":0.00217,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.00109,"70":0.00109,"71":0,"72":0,"73":0,"74":0.00109,"75":0,"76":0.00109,"77":0,"78":0,"79":0.00109,"80":0.00109,"81":0.01736,"83":0,"84":0.00109,"85":0,"86":0.00326,"87":0.00217,"88":0,"89":0,"90":0,"91":0,"92":0.00109,"93":0.00434,"94":0.00217,"95":0.00109,"96":0.00109,"97":0.00434,"98":0.00109,"99":0.00434,"100":0.00326,"101":0.00217,"102":0.00543,"103":0.08897,"104":0.24847,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0.00109,"28":0,"29":0,"30":0.00434,"31":0,"32":0.00109,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00326,"60":0.03581,"62":0,"63":0.05751,"64":0.01628,"65":0,"66":0,"67":0,"68":0,"69":0.00109,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00109,"80":0,"81":0,"82":0,"83":0.00217,"84":0,"85":0,"86":0,"87":0,"88":0.00109,"89":0.01519,"90":0.00217,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00109,"13":0.00326,"14":0,"15":0,"16":0,"17":0.00109,"18":0.00326,"79":0,"80":0,"81":0,"83":0,"84":0.00109,"85":0.00109,"86":0,"87":0.00109,"88":0,"89":0.00109,"90":0,"91":0,"92":0.01085,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00434,"100":0,"101":0,"102":0.00109,"103":0.02387,"104":0.05317,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00109,"14":0.00109,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00109,"13.1":0.00109,"14.1":0.00109,"15.1":0.00109,"15.2-15.3":0.00109,"15.4":0.00109,"15.5":0.00217,"15.6":0.00434,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.01261,"7.0-7.1":0.04766,"8.1-8.4":0,"9.0-9.2":0.0042,"9.3":0.10793,"10.0-10.2":0.24529,"10.3":0.12194,"11.0-11.2":0.63494,"11.3-11.4":0.14157,"12.0-12.1":0.41068,"12.2-12.5":4.67867,"13.0-13.1":0.27612,"13.2":0.13316,"13.3":0.54664,"13.4-13.7":0.64615,"14.0-14.4":1.03861,"14.5-14.8":0.82136,"15.0-15.1":0.86481,"15.2-15.3":0.87462,"15.4":0.38685,"15.5":0.88443,"15.6":0.90265,"16.0":0.23688},P:{"4":0.30493,"5.0-5.4":0.15247,"6.2-6.4":0.05082,"7.2-7.4":0.44723,"8.2":0.01016,"9.2":0.41674,"10.1":0.01016,"11.1-11.2":0.23378,"12.0":0.03049,"13.0":0.04066,"14.0":0.2846,"15.0":0.15247,"16.0":1.20956,"17.0":0.66068,"18.0":0.27444},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00088,"4.2-4.3":0.00124,"4.4":0,"4.4.3-4.4.4":0.06439},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00217,"5.5":0},J:{"7":0,"10":0.00892},N:{"10":0,"11":0},L:{"0":70.13025},S:{"2.5":0.09807},R:{_:"0"},M:{"0":0.10698},Q:{"10.4":0.00892},O:{"0":0.19613},H:{"0":8.42327}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GP.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GP.js index fbe7b64e093..14e7cfd7a8c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GP.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GP.js @@ -1 +1 @@ -module.exports={C:{"38":0.01265,"50":0.01265,"52":0.00843,"56":0.01265,"60":0.01686,"64":0.00422,"78":0.06324,"84":0.00843,"85":0.00422,"89":0.00843,"91":0.05059,"92":0.01265,"93":0.00422,"94":0.00843,"95":0.04638,"96":1.36177,"97":1.72013,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 49 51 53 54 55 57 58 59 61 62 63 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 86 87 88 90 98 99 3.5 3.6"},D:{"49":0.06324,"58":0.01265,"63":0.04216,"65":0.01265,"67":0.01686,"74":0.00422,"76":0.00843,"77":0.01686,"78":0.00422,"79":0.02951,"80":0.00843,"81":0.00422,"83":0.02951,"84":0.05481,"85":0.02108,"86":0.00843,"87":0.02951,"88":0.00422,"89":0.01686,"90":0.01265,"91":0.0253,"92":0.02951,"93":0.04216,"94":0.04638,"95":0.05059,"96":0.72515,"97":6.5348,"98":14.65903,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 59 60 61 62 64 66 68 69 70 71 72 73 75 99 100 101"},F:{"82":0.14756,"83":0.66613,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.00843,"17":0.00843,"18":0.02108,"86":0.00422,"90":0.00843,"91":0.00422,"92":0.01265,"93":0.00843,"94":0.01265,"95":0.00843,"96":0.06746,"97":1.48403,"98":5.09293,_:"12 13 14 15 79 80 81 83 84 85 87 88 89"},E:{"4":0,"12":0.00843,"13":0.06324,"14":0.56916,"15":0.28247,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.02108,"10.1":0.00843,"11.1":0.05059,"12.1":0.18972,"13.1":0.62397,"14.1":1.58522,"15.1":1.35755,"15.2-15.3":1.21842,"15.4":0.01686},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.0086,"9.0-9.2":0.00516,"9.3":0.03269,"10.0-10.2":0.00688,"10.3":0.08432,"11.0-11.2":0.01549,"11.3-11.4":0.01205,"12.0-12.1":0.03786,"12.2-12.5":0.61947,"13.0-13.1":0.01721,"13.2":0.0086,"13.3":0.07571,"13.4-13.7":0.2409,"14.0-14.4":0.86725,"14.5-14.8":3.47934,"15.0-15.1":3.10077,"15.2-15.3":8.52455,"15.4":0.07055},P:{"4":0.07195,"5.0-5.4":0.04073,"6.2-6.4":0.01071,"7.2-7.4":0.14391,"8.2":0.01071,"9.2":0.04112,"10.1":0.02096,"11.1-11.2":0.18502,"12.0":0.05139,"13.0":0.21586,"14.0":0.27753,"15.0":0.17474,"16.0":4.23495},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00168,"4.2-4.3":0.00168,"4.4":0,"4.4.3-4.4.4":0.03135},A:{"11":0.1054,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.26606},Q:{"10.4":0},O:{"0":0.01157},H:{"0":0.10952},L:{"0":33.08468},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00403,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00403,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.01208,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01208,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00806,"85":0,"86":0,"87":0,"88":0.04431,"89":0,"90":0,"91":0.0282,"92":0.00403,"93":0,"94":0,"95":0,"96":0,"97":0.00403,"98":0,"99":0.00806,"100":0.00806,"101":0.01208,"102":0.03222,"103":1.07548,"104":0.16918,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.00403,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01611,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00403,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00403,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0.00403,"75":0.00806,"76":0.00403,"77":0,"78":0,"79":0.00403,"80":0.00403,"81":0.01611,"83":0.00403,"84":0.00403,"85":0.00403,"86":0,"87":0.01208,"88":0.00403,"89":0.00403,"90":0,"91":0.00403,"92":0.00806,"93":0.02014,"94":0,"95":0.01611,"96":0.06445,"97":0.00806,"98":0.00806,"99":0.02014,"100":0.01611,"101":0.01611,"102":0.18126,"103":2.77126,"104":5.5103,"105":0.02014,"106":0,"107":0.00403,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00806,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00806,"64":0.00403,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.01208,"88":0.00403,"89":0.26585,"90":0.03625,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00403,"16":0.16918,"17":0.00403,"18":0.00403,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00403,"91":0.00403,"92":0,"93":0,"94":0,"95":0,"96":0.00403,"97":0.0282,"98":0,"99":0.00403,"100":0.00403,"101":0.00806,"102":0.00806,"103":0.74115,"104":1.67968,"105":0},E:{"4":0,"5":0,"6":0,"7":0.00403,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.02417,"14":0.06848,"15":0.0282,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00403,"10.1":0,"11.1":0.02417,"12.1":0.02014,"13.1":0.18529,"14.1":0.20543,"15.1":0.05639,"15.2-15.3":0.04028,"15.4":0.0725,"15.5":0.40683,"15.6":0.91436,"16.0":0.00403},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00728,"9.0-9.2":0,"9.3":0.01942,"10.0-10.2":0,"10.3":0.09709,"11.0-11.2":0.04854,"11.3-11.4":0.00728,"12.0-12.1":0.62865,"12.2-12.5":0.38593,"13.0-13.1":0.01456,"13.2":0.00485,"13.3":0.02913,"13.4-13.7":0.17233,"14.0-14.4":0.50972,"14.5-14.8":1.0874,"15.0-15.1":0.62623,"15.2-15.3":1.02429,"15.4":0.85196,"15.5":7.51228,"15.6":11.03661,"16.0":0.20874},P:{"4":0.02079,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.32218,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.12472,"12.0":0.09354,"13.0":0.05196,"14.0":0.22865,"15.0":0.36375,"16.0":0.13511,"17.0":2.04741,"18.0":2.49431},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01826,"4.2-4.3":0.07668,"4.4":0,"4.4.3-4.4.4":0.14605},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02417,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":50.61834},S:{"2.5":0},R:{_:"0"},M:{"0":0.37624},Q:{"10.4":0},O:{"0":0.00597},H:{"0":0.10177}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GQ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GQ.js index 6c4fde9c424..f1d53535f50 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GQ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GQ.js @@ -1 +1 @@ -module.exports={C:{"39":0.00497,"43":0.0149,"45":0.00993,"52":0.09435,"56":0.00497,"57":0.00497,"60":0.00993,"62":0.04966,"64":0.00993,"71":0.05959,"72":0.00497,"78":0.00497,"79":0.00993,"83":0.0149,"85":0.01986,"87":0.00993,"89":0.01986,"91":0.0149,"93":0.02483,"94":0.02483,"95":0.05959,"96":2.67667,"97":1.95164,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 44 46 47 48 49 50 51 53 54 55 58 59 61 63 65 66 67 68 69 70 73 74 75 76 77 80 81 82 84 86 88 90 92 98 99 3.5 3.6"},D:{"18":0.08442,"39":0.00497,"43":0.03476,"46":0.00993,"47":0.00497,"49":0.00497,"50":0.00497,"54":0.04469,"55":0.05959,"57":0.00497,"58":0.85912,"60":0.09435,"63":0.28803,"64":0.11422,"66":0.02483,"69":0.01986,"70":0.00993,"71":0.00497,"74":0.06456,"75":0.09435,"76":0.00993,"78":0.00993,"79":0.12912,"80":0.01986,"81":0.01986,"83":0.07946,"84":0.00993,"86":0.02483,"87":0.0298,"88":0.03476,"89":0.02483,"91":0.0149,"92":0.14401,"93":0.0298,"94":0.02483,"95":0.02483,"96":0.47177,"97":7.33975,"98":13.1599,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 44 45 48 51 52 53 56 59 61 62 65 67 68 72 73 77 85 90 99 100 101"},F:{"15":0.00497,"46":0.00497,"49":0.00497,"51":0.00497,"64":0.20361,"70":0.00497,"76":0.0149,"77":0.03973,"78":0.00993,"80":0.00497,"81":0.00993,"82":0.4966,"83":0.10925,_:"9 11 12 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 50 52 53 54 55 56 57 58 60 62 63 65 66 67 68 69 71 72 73 74 75 79 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.05959,"13":0.00497,"14":0.01986,"15":0.00993,"16":0.05463,"17":0.00497,"18":0.15891,"84":0.0149,"85":0.00497,"86":0.02483,"88":0.00993,"89":0.01986,"90":0.09435,"92":0.0149,"93":0.0149,"94":0.01986,"95":0.00497,"96":0.12912,"97":0.79953,"98":14.70929,_:"79 80 81 83 87 91"},E:{"4":0,"11":0.00497,"12":0.03973,"14":0.02483,"15":0.11918,_:"0 5 6 7 8 9 10 13 3.1 3.2 6.1 7.1","5.1":0.00993,"9.1":0.0149,"10.1":0.00993,"11.1":0.00993,"12.1":0.00497,"13.1":0.01986,"14.1":0.05959,"15.1":0.12415,"15.2-15.3":0.58599,"15.4":0.00993},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.09474,"8.1-8.4":0,"9.0-9.2":0.01373,"9.3":0.02883,"10.0-10.2":0,"10.3":0.10572,"11.0-11.2":3.38456,"11.3-11.4":0.00824,"12.0-12.1":0.02334,"12.2-12.5":1.47053,"13.0-13.1":0.02334,"13.2":0.02334,"13.3":0.01648,"13.4-13.7":0.15241,"14.0-14.4":1.82478,"14.5-14.8":1.18082,"15.0-15.1":1.94835,"15.2-15.3":3.41751,"15.4":0.01098},P:{"4":1.74544,"5.0-5.4":0.02066,"6.2-6.4":0.04052,"7.2-7.4":0.04131,"8.2":0.0104,"9.2":0.02066,"10.1":0.06153,"11.1-11.2":0.04131,"12.0":0.03121,"13.0":0.02066,"14.0":0.04131,"15.0":0.04131,"16.0":0.82624},I:{"0":0,"3":0,"4":0.00157,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00067,"4.2-4.3":0.03112,"4.4":0,"4.4.3-4.4.4":0.14283},A:{"11":0.35755,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.49333},N:{_:"10 11"},R:{_:"0"},M:{"0":0.06544},Q:{"10.4":0.10571},O:{"0":0.30204},H:{"0":0.27165},L:{"0":31.11591},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.00807,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.0242,"53":0.00807,"54":0.00807,"55":0,"56":0.07259,"57":0.07259,"58":0,"59":0,"60":0,"61":0,"62":0.00807,"63":0.08066,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.0242,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00807,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00807,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00807,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.01613,"98":0,"99":0.00807,"100":0.03226,"101":0.03226,"102":0.09679,"103":0.77434,"104":0.25005,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.03226,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.05646,"44":0,"45":0,"46":0,"47":0,"48":0.0242,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.01613,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0.00807,"62":0.00807,"63":0,"64":0.11292,"65":0,"66":0,"67":0.01613,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0.00807,"75":0.00807,"76":0,"77":0,"78":0,"79":0.04033,"80":0,"81":0,"83":0,"84":0,"85":0.03226,"86":0.0242,"87":0.00807,"88":0,"89":0.0242,"90":0.00807,"91":0.05646,"92":0.01613,"93":0.01613,"94":0.01613,"95":0.0242,"96":0.01613,"97":0.00807,"98":0.01613,"99":0.00807,"100":0.00807,"101":0.07259,"102":0.0242,"103":1.95197,"104":7.21907,"105":0.00807,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00807,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.03226,"62":0,"63":0.09679,"64":0.00807,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0.0484,"82":0.00807,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.34684,"90":0.00807,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.0242,"13":0,"14":0,"15":0,"16":0.00807,"17":0,"18":0.12099,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00807,"86":0,"87":0,"88":0,"89":0.00807,"90":0.00807,"91":0,"92":1.73419,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00807,"100":0.01613,"101":0.01613,"102":0.69368,"103":13.69607,"104":35.59526,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00807,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.01613,"14.1":0.00807,"15.1":0.01613,"15.2-15.3":0.00807,"15.4":0.0242,"15.5":0.0242,"15.6":0.03226,"16.0":0},G:{"8":0.00667,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00417,"6.0-6.1":0.00667,"7.0-7.1":0.03503,"8.1-8.4":0.00334,"9.0-9.2":0.00167,"9.3":0.10007,"10.0-10.2":0,"10.3":0.05421,"11.0-11.2":0.01918,"11.3-11.4":0.00083,"12.0-12.1":0.02752,"12.2-12.5":2.77118,"13.0-13.1":0.00334,"13.2":0.00834,"13.3":0.02001,"13.4-13.7":0.06338,"14.0-14.4":0.83894,"14.5-14.8":0.20515,"15.0-15.1":0.32524,"15.2-15.3":0.68133,"15.4":1.6904,"15.5":0.55624,"15.6":0.85896,"16.0":0.05421},P:{"4":0.25605,"5.0-5.4":0.01024,"6.2-6.4":0,"7.2-7.4":0.04097,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.03073,"12.0":0,"13.0":0.01024,"14.0":0.01024,"15.0":0.01024,"16.0":0.03073,"17.0":0.14339,"18.0":0.18436},I:{"0":0,"3":0,"4":0.0009,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0003,"4.2-4.3":0.02311,"4.4":0,"4.4.3-4.4.4":0.26376},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.07259,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":24.59917},S:{"2.5":0},R:{_:"0"},M:{"0":0.04448},Q:{"10.4":0.00193},O:{"0":0.13538},H:{"0":0.33507}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GR.js index 25f59c8d4f7..be3dc11bc91 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GR.js @@ -1 +1 @@ -module.exports={C:{"52":0.69463,"60":0.01187,"68":0.14249,"77":0.01781,"78":0.04156,"81":0.03562,"83":0.01187,"84":0.01187,"85":0.00594,"86":0.01187,"87":0.03562,"88":0.0475,"89":0.01187,"90":0.00594,"91":0.08312,"92":0.01781,"93":0.00594,"94":0.08906,"95":0.03562,"96":2.60041,"97":4.28651,"98":0.01187,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 79 80 82 99 3.5 3.6"},D:{"22":0.42746,"34":0.04156,"38":0.22561,"39":0.07718,"41":0.01187,"47":0.27904,"49":0.48683,"53":0.01187,"56":0.00594,"62":0.41559,"65":0.00594,"67":0.00594,"69":0.25529,"71":0.01781,"72":0.02375,"74":0.01187,"76":0.00594,"77":0.08906,"78":0.01781,"79":0.18405,"80":0.02969,"81":0.01781,"83":0.02969,"84":0.01781,"85":0.02375,"86":0.02969,"87":0.11874,"88":0.10687,"89":0.08312,"90":0.01187,"91":0.33247,"92":0.02969,"93":0.06531,"94":0.03562,"95":0.0475,"96":0.31466,"97":10.74597,"98":24.85822,"99":0.00594,"100":0.00594,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 35 36 37 40 42 43 44 45 46 48 50 51 52 54 55 57 58 59 60 61 63 64 66 68 70 73 75 101"},F:{"12":0.08906,"25":0.0475,"31":0.84305,"40":0.58776,"46":0.00594,"67":0.01781,"82":0.2078,"83":1.12803,_:"9 11 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 32 33 34 35 36 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.13655,"18":0.00594,"92":0.04156,"95":0.01187,"96":0.01781,"97":0.84899,"98":2.49354,_:"12 13 14 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94"},E:{"4":0,"13":0.02969,"14":0.08312,"15":0.05343,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.04156,"12.1":0.04156,"13.1":0.10093,"14.1":0.32654,"15.1":0.14843,"15.2-15.3":0.29685},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00124,"6.0-6.1":0.00062,"7.0-7.1":0.24598,"8.1-8.4":0.00496,"9.0-9.2":0,"9.3":0.05205,"10.0-10.2":0.00248,"10.3":0.05638,"11.0-11.2":0.00867,"11.3-11.4":0.01425,"12.0-12.1":0.00929,"12.2-12.5":0.30113,"13.0-13.1":0.00496,"13.2":0.01053,"13.3":0.02107,"13.4-13.7":0.11215,"14.0-14.4":0.24226,"14.5-14.8":0.99012,"15.0-15.1":0.8154,"15.2-15.3":3.28761,"15.4":0.01239},P:{"4":0.59228,"5.0-5.4":0.04073,"6.2-6.4":0.01018,"7.2-7.4":0.13693,"8.2":0.02094,"9.2":0.0632,"10.1":0.02096,"11.1-11.2":0.06461,"12.0":0.02107,"13.0":0.09692,"14.0":0.05384,"15.0":0.08615,"16.0":1.443},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00468,"4.2-4.3":0.23867,"4.4":0,"4.4.3-4.4.4":0.29716},A:{"11":0.4809,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.19101},Q:{"10.4":0},O:{"0":0.08941},H:{"0":0.24239},L:{"0":30.41749},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00545,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.16341,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00545,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.06536,"69":0,"70":0.00545,"71":0,"72":0,"73":0,"74":0.01089,"75":0,"76":0,"77":0.00545,"78":0.01634,"79":0,"80":0,"81":0,"82":0.00545,"83":0,"84":0.00545,"85":0,"86":0,"87":0.00545,"88":0.03813,"89":0.00545,"90":0,"91":0.04358,"92":0,"93":0,"94":0.03268,"95":0,"96":0,"97":0.00545,"98":0.00545,"99":0.01634,"100":0.01089,"101":0.01089,"102":0.14162,"103":2.65814,"104":0.55015,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.22877,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.05992,"35":0,"36":0,"37":0,"38":0.14707,"39":0.01634,"40":0.00545,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.16886,"48":0,"49":0.20154,"50":0,"51":0,"52":0,"53":0.00545,"54":0,"55":0,"56":0.00545,"57":0,"58":0.01634,"59":0,"60":0,"61":0.02179,"62":0.10349,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00545,"69":0.01634,"70":0,"71":0.01089,"72":0,"73":0,"74":0.00545,"75":0,"76":0.00545,"77":0.05992,"78":0.00545,"79":0.05447,"80":0.00545,"81":0.04358,"83":0.01089,"84":0.01089,"85":0.01089,"86":0.07081,"87":0.02724,"88":0.07626,"89":0.03813,"90":0.00545,"91":0.14162,"92":0.02724,"93":0.01089,"94":0.01089,"95":0.01089,"96":0.02179,"97":0.01089,"98":0.01634,"99":0.01089,"100":0.02724,"101":0.04902,"102":0.12528,"103":4.60816,"104":12.41916,"105":0.02724,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0.03813,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0.01634,"26":0,"27":0,"28":0.00545,"29":0,"30":0,"31":0.45755,"32":0,"33":0,"34":0,"35":0,"36":0.01089,"37":0,"38":0,"39":0,"40":0.39218,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.11439,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01089,"64":0.01089,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00545,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00545,"86":0,"87":0,"88":0.01089,"89":0.47934,"90":0.06536,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.08715,"16":0,"17":0,"18":0.00545,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0.00545,"97":0,"98":0,"99":0,"100":0,"101":0.01089,"102":0.03268,"103":0.45755,"104":1.31817,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00545,"14":0.02724,"15":0.00545,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00545,"12.1":0.01634,"13.1":0.03813,"14.1":0.07626,"15.1":0.01634,"15.2-15.3":0.01634,"15.4":0.04358,"15.5":0.19065,"15.6":0.31593,"16.0":0.00545},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.03543,"6.0-6.1":0,"7.0-7.1":0.31886,"8.1-8.4":0.00131,"9.0-9.2":0,"9.3":0.07217,"10.0-10.2":0.00131,"10.3":0.07873,"11.0-11.2":0.00787,"11.3-11.4":0.01706,"12.0-12.1":0.00787,"12.2-12.5":0.44614,"13.0-13.1":0.00656,"13.2":0.01968,"13.3":0.02624,"13.4-13.7":0.14171,"14.0-14.4":0.22176,"14.5-14.8":0.70726,"15.0-15.1":0.15746,"15.2-15.3":0.29655,"15.4":0.48025,"15.5":3.24368,"15.6":6.70517,"16.0":0.11941},P:{"4":0.3925,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.05164,"12.0":0.01033,"13.0":0.0723,"14.0":0.05164,"15.0":0.02066,"16.0":0.06197,"17.0":0.79533,"18.0":1.04322},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.1741,"4.2-4.3":0.40775,"4.4":0,"4.4.3-4.4.4":0.39401},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.23422,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":52.41728},S:{"2.5":0},R:{_:"0"},M:{"0":0.25497},Q:{"10.4":0},O:{"0":0.08195},H:{"0":0.27587}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GT.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GT.js index cfabd39c166..bf6abfffa81 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GT.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GT.js @@ -1 +1 @@ -module.exports={C:{"52":0.01948,"72":0.00779,"73":0.13636,"78":0.01558,"88":0.0039,"89":0.0039,"90":0.01169,"91":0.02727,"92":0.0039,"94":0.00779,"95":0.01558,"96":0.5844,"97":1.05582,"98":0.00779,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 74 75 76 77 79 80 81 82 83 84 85 86 87 93 99 3.5 3.6"},D:{"38":0.01169,"49":0.03506,"50":0.01558,"53":0.00779,"59":0.01558,"65":0.00779,"69":0.01169,"70":0.0039,"72":0.00779,"74":0.0039,"75":0.00779,"76":0.04675,"78":0.02727,"79":0.10519,"80":0.01169,"81":0.01558,"83":0.01948,"84":0.00779,"85":0.0039,"86":0.06623,"87":0.06623,"88":0.01558,"89":0.02338,"90":0.01948,"91":0.07013,"92":0.06623,"93":0.05454,"94":0.03506,"95":0.04286,"96":0.2922,"97":7.35565,"98":19.3826,"99":0.01169,"100":0.01558,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 51 52 54 55 56 57 58 60 61 62 63 64 66 67 68 71 73 77 101"},F:{"46":0.00779,"82":0.45973,"83":1.40646,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00779,"17":0.0039,"18":0.01558,"84":0.00779,"85":0.01558,"89":0.00779,"90":0.01169,"92":0.01558,"94":0.00779,"95":0.00779,"96":0.02338,"97":0.57661,"98":2.2441,_:"12 13 14 16 79 80 81 83 86 87 88 91 93"},E:{"4":0,"13":0.01169,"14":0.10909,"15":0.1013,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 7.1 9.1","6.1":0.0039,"10.1":0.0039,"11.1":0.01169,"12.1":0.01948,"13.1":0.14805,"14.1":0.33116,"15.1":0.20649,"15.2-15.3":0.50648,"15.4":0.00779},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00077,"6.0-6.1":0.0069,"7.0-7.1":0.00614,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01687,"10.0-10.2":0.00153,"10.3":0.01764,"11.0-11.2":0.0046,"11.3-11.4":0.0115,"12.0-12.1":0.01611,"12.2-12.5":0.25847,"13.0-13.1":0.01304,"13.2":0.0046,"13.3":0.02761,"13.4-13.7":0.07516,"14.0-14.4":0.27457,"14.5-14.8":1.11134,"15.0-15.1":1.11517,"15.2-15.3":4.65474,"15.4":0.04985},P:{"4":0.13335,"5.0-5.4":0.04073,"6.2-6.4":0.01071,"7.2-7.4":0.18464,"8.2":0.01071,"9.2":0.03077,"10.1":0.02096,"11.1-11.2":0.18464,"12.0":0.02052,"13.0":0.17438,"14.0":0.17438,"15.0":0.21541,"16.0":2.0926},I:{"0":0,"3":0,"4":0.00523,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00349,"4.4":0,"4.4.3-4.4.4":0.05232},A:{"11":0.08571,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.20143},Q:{"10.4":0},O:{"0":0.06714},H:{"0":0.23693},L:{"0":47.24267},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00405,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.03236,"74":0,"75":0,"76":0,"77":0,"78":0.00405,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.01214,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.01214,"91":0.01214,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.00405,"98":0.00405,"99":0.00405,"100":0.00405,"101":0.00809,"102":0.01618,"103":0.5663,"104":0.12944,"105":0.00405,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0.00405,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00405,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00809,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00405,"66":0,"67":0,"68":0,"69":0.00405,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.00405,"76":0.01618,"77":0,"78":0.00405,"79":0.02427,"80":0.00405,"81":0.00809,"83":0.00405,"84":0.00405,"85":0.00405,"86":0.01618,"87":0.01618,"88":0.00405,"89":0.00405,"90":0.00405,"91":0.01214,"92":0.01618,"93":0.02023,"94":0.00809,"95":0.00809,"96":0.02023,"97":0.02023,"98":0.01214,"99":0.01214,"100":0.02832,"101":0.02023,"102":0.06472,"103":2.64543,"104":7.88775,"105":0.02427,"106":0.00405,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00405,"60":0,"62":0,"63":0.01214,"64":0.00809,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00405,"86":0.00405,"87":0,"88":0.00809,"89":0.82518,"90":0.04854,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00405,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00809,"99":0.00405,"100":0.00809,"101":0.00405,"102":0.00405,"103":0.33574,"104":0.96676,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00809,"14":0.01618,"15":0.00809,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00809,"13.1":0.05259,"14.1":0.05663,"15.1":0.01214,"15.2-15.3":0.01618,"15.4":0.03641,"15.5":0.14158,"15.6":0.3236,"16.0":0.00405},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.01182,"7.0-7.1":0.00394,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01838,"10.0-10.2":0,"10.3":0.03283,"11.0-11.2":0.00131,"11.3-11.4":0.00394,"12.0-12.1":0.01051,"12.2-12.5":0.23112,"13.0-13.1":0.00394,"13.2":0.01182,"13.3":0.01444,"13.4-13.7":0.05909,"14.0-14.4":0.18778,"14.5-14.8":0.47668,"15.0-15.1":0.15758,"15.2-15.3":0.2587,"15.4":0.42416,"15.5":2.73798,"15.6":8.25202,"16.0":0.22193},P:{"4":0.10201,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.23463,"8.2":0,"9.2":0.0204,"10.1":0,"11.1-11.2":0.13262,"12.0":0.0204,"13.0":0.07141,"14.0":0.11221,"15.0":0.06121,"16.0":0.18362,"17.0":1.14255,"18.0":1.5098},I:{"0":0,"3":0,"4":0.01649,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.011,"4.4":0,"4.4.3-4.4.4":0.13745},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01214,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":65.96546},S:{"2.5":0},R:{_:"0"},M:{"0":0.22034},Q:{"10.4":0},O:{"0":0.06551},H:{"0":0.29317}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GU.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GU.js index 9b62e837957..240f94dda44 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GU.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GU.js @@ -1 +1 @@ -module.exports={C:{"52":0.00415,"78":0.01246,"84":0.00415,"93":0.00415,"94":0.00831,"95":0.00831,"96":0.72695,"97":1.22128,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 87 88 89 90 91 92 98 99 3.5 3.6"},D:{"49":0.03323,"67":0.00415,"75":0.01662,"76":0.08723,"77":0.03739,"79":0.05816,"80":0.00831,"83":0.02077,"84":0.02492,"85":0.00831,"86":0.00831,"87":0.2077,"88":0.04154,"89":0.01246,"90":0.00831,"91":0.0997,"92":0.08308,"93":0.04154,"94":0.0997,"95":0.02908,"96":0.73941,"97":7.9466,"98":16.16737,"99":0.00831,"100":0.01246,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 68 69 70 71 72 73 74 78 81 101"},F:{"74":0.00415,"82":0.12462,"83":0.6231,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00831,"18":0.00415,"92":0.00831,"95":0.04569,"96":0.02077,"97":1.1922,"98":3.05319,_:"12 13 14 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94"},E:{"4":0,"10":0.00415,"12":0.00415,"13":0.11631,"14":0.46109,"15":0.32817,_:"0 5 6 7 8 9 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00831,"11.1":0.01246,"12.1":0.17862,"13.1":0.38217,"14.1":1.40821,"15.1":0.95127,"15.2-15.3":2.17254,"15.4":0.02077},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.01249,"7.0-7.1":0,"8.1-8.4":0.01874,"9.0-9.2":0,"9.3":0.39345,"10.0-10.2":0.0281,"10.3":0.05933,"11.0-11.2":0.01874,"11.3-11.4":0.04372,"12.0-12.1":0.0281,"12.2-12.5":0.74631,"13.0-13.1":0.03435,"13.2":0.00625,"13.3":0.04684,"13.4-13.7":0.32476,"14.0-14.4":1.1991,"14.5-14.8":4.57468,"15.0-15.1":5.26167,"15.2-15.3":18.38304,"15.4":0.03747},P:{"4":0.2393,"5.0-5.4":0.04073,"6.2-6.4":0.01071,"7.2-7.4":0.02081,"8.2":0.01071,"9.2":0.0104,"10.1":0.02096,"11.1-11.2":0.13525,"12.0":0.02081,"13.0":0.05202,"14.0":0.11445,"15.0":0.08323,"16.0":4.27613},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00675,"4.4":0,"4.4.3-4.4.4":0.01079},A:{"11":0.11216,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.2865},Q:{"10.4":0},O:{"0":0.19295},H:{"0":0.13285},L:{"0":22.02727},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0.004,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.012,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.008,"85":0,"86":0,"87":0,"88":0,"89":0.004,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0.012,"97":0,"98":0,"99":0.012,"100":0,"101":0.008,"102":0.016,"103":0.524,"104":0.072,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0.004,"45":0,"46":0,"47":0,"48":0,"49":0.012,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.008,"68":0,"69":0,"70":0.004,"71":0,"72":0,"73":0,"74":0.008,"75":0.088,"76":0.02,"77":0,"78":0,"79":0.084,"80":0.004,"81":0,"83":0,"84":0.004,"85":0,"86":0.004,"87":0.016,"88":0,"89":0,"90":0.004,"91":0.008,"92":0.024,"93":0.016,"94":0,"95":0.008,"96":0.016,"97":0.012,"98":0.032,"99":0.072,"100":0.016,"101":0.132,"102":0.104,"103":2.44,"104":5.852,"105":0.008,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.012,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0.004,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.344,"90":0.004,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.004,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.004,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.024,"102":0.008,"103":0.42,"104":1.34,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.032,"14":0.164,"15":0.012,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.004,"11.1":0.004,"12.1":0.04,"13.1":0.164,"14.1":0.276,"15.1":0.056,"15.2-15.3":0.032,"15.4":0.132,"15.5":0.616,"15.6":1.212,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01322,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.00441,"9.3":0.60374,"10.0-10.2":0,"10.3":0.04407,"11.0-11.2":0.00881,"11.3-11.4":0.03526,"12.0-12.1":0.03966,"12.2-12.5":1.04002,"13.0-13.1":0.08373,"13.2":0.00441,"13.3":0.30848,"13.4-13.7":0.22475,"14.0-14.4":1.10613,"14.5-14.8":2.22107,"15.0-15.1":1.11053,"15.2-15.3":0.89019,"15.4":2.63972,"15.5":11.19348,"15.6":22.35611,"16.0":0.13221},P:{"4":0.3662,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01046,"8.2":0,"9.2":0.01046,"10.1":0,"11.1-11.2":0.06278,"12.0":0.01046,"13.0":0.06278,"14.0":0.04185,"15.0":0.04185,"16.0":0.33481,"17.0":1.64265,"18.0":2.86678},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.224},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.052,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":32.304},S:{"2.5":0},R:{_:"0"},M:{"0":0.108},Q:{"10.4":0.006},O:{"0":0.048},H:{"0":0.18177}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GW.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GW.js index 0d59662f724..45fa7596a35 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GW.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GW.js @@ -1 +1 @@ -module.exports={C:{"27":0.00474,"29":0.00474,"91":0.10907,"96":0.0901,"97":0.1636,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 92 93 94 95 98 99 3.5 3.6"},D:{"33":0.00711,"38":0.00474,"48":0.00711,"54":0.00474,"60":0.00237,"71":0.01897,"72":0.00237,"75":0.01423,"83":0.00948,"86":0.00948,"87":0.00711,"88":0.03557,"89":0.03082,"90":0.04742,"91":0.03082,"92":0.00948,"93":0.0166,"94":0.00474,"95":0.22287,"96":0.03082,"97":2.83572,"98":12.50228,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 39 40 41 42 43 44 45 46 47 49 50 51 52 53 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 73 74 76 77 78 79 80 81 84 85 99 100 101"},F:{"76":0.06876,"82":0.01423,"83":0.36988,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.05453,"13":0.00237,"15":0.00237,"16":0.00474,"84":0.01423,"85":0.01186,"90":0.00474,"91":0.01423,"93":0.01423,"95":0.01186,"96":0.01186,"97":0.40544,"98":1.5862,_:"14 17 18 79 80 81 83 86 87 88 89 92 94"},E:{"4":0,"15":0.00237,_:"0 5 6 7 8 9 10 11 12 13 14 3.1 3.2 6.1 7.1 9.1 10.1 11.1 12.1 13.1 15.2-15.3 15.4","5.1":0.00237,"14.1":0.01423,"15.1":0.00474},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.041,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02303,"10.0-10.2":0.00842,"10.3":0.01348,"11.0-11.2":0.0146,"11.3-11.4":0.00281,"12.0-12.1":1.13568,"12.2-12.5":0.92674,"13.0-13.1":0.04044,"13.2":0.00112,"13.3":0,"13.4-13.7":1.32889,"14.0-14.4":0.35329,"14.5-14.8":0.45439,"15.0-15.1":1.04076,"15.2-15.3":0.23028,"15.4":0},P:{"4":1.45239,"5.0-5.4":0.19571,"6.2-6.4":0.04021,"7.2-7.4":0.13391,"8.2":0.01071,"9.2":0.0515,"10.1":0.02096,"11.1-11.2":0.10301,"12.0":0.09271,"13.0":0.23691,"14.0":0.0412,"15.0":0.09271,"16.0":0.24722},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.02608,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0.04577},H:{"0":1.74788},L:{"0":69.65273},S:{"2.5":0.2365}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.63072,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00327,"99":0,"100":0,"101":0.00327,"102":0.0098,"103":0.07516,"104":0.03595,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00327,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00327,"41":0,"42":0,"43":0.00327,"44":0,"45":0,"46":0.0098,"47":0,"48":0,"49":0.00327,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00654,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0.00327,"75":0,"76":0,"77":0.00327,"78":0.01634,"79":0.01961,"80":0.00654,"81":0.0098,"83":0,"84":0,"85":0,"86":0.67648,"87":0,"88":0,"89":0.00327,"90":0,"91":0,"92":0,"93":0.00327,"94":0,"95":0,"96":0.0098,"97":0.04575,"98":0,"99":0.00327,"100":0,"101":0.00654,"102":0.01307,"103":0.87256,"104":4.94448,"105":0.00327,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00327,"60":0.01307,"62":0,"63":0.03595,"64":0.00327,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.06863,"90":0.01961,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.06536,"13":0,"14":0,"15":0.00327,"16":0.00327,"17":0,"18":0.01307,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.0098,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00327,"100":0,"101":0,"102":0,"103":0.08497,"104":0.67321,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0.00654,"15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0.00654,"15.6":0.0098,"16.0":0},G:{"8":0.00067,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00336,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.05248,"10.0-10.2":0.08814,"10.3":0.3916,"11.0-11.2":0.02759,"11.3-11.4":0.01884,"12.0-12.1":0.0868,"12.2-12.5":1.55496,"13.0-13.1":0.06729,"13.2":0.00067,"13.3":0.35056,"13.4-13.7":0.07267,"14.0-14.4":0.0942,"14.5-14.8":0.35527,"15.0-15.1":0.0693,"15.2-15.3":0.43332,"15.4":0.26443,"15.5":2.40747,"15.6":0.36671,"16.0":0.02086},P:{"4":0.53519,"5.0-5.4":0.0101,"6.2-6.4":0.0101,"7.2-7.4":1.63588,"8.2":0,"9.2":0.03029,"10.1":0,"11.1-11.2":0.22216,"12.0":0,"13.0":0.03029,"14.0":0.05049,"15.0":0.19186,"16.0":0.05049,"17.0":0.28274,"18.0":0.10098},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.0011,"4.4":0,"4.4.3-4.4.4":0.06138},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00654,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":78.17863},S:{"2.5":0.61934},R:{_:"0"},M:{"0":0.00673},Q:{"10.4":0},O:{"0":0.03366},H:{"0":0.96239}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GY.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GY.js index 71c1b5eb7fa..6eda9d84a8f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GY.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/GY.js @@ -1 +1 @@ -module.exports={C:{"52":0.01091,"65":0.01091,"88":0.00364,"91":0.02545,"94":0.00364,"95":0.01091,"96":0.44347,"97":0.62522,"98":0.02181,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 89 90 92 93 99 3.5 3.6"},D:{"47":0.00727,"49":0.01454,"50":0.00364,"55":0.00727,"56":0.00364,"60":0.00364,"63":0.01091,"65":0.03272,"66":0.00364,"68":0.01091,"69":0.01091,"70":0.01091,"75":0.02545,"76":0.07997,"77":0.09451,"79":0.13086,"80":0.04726,"81":0.02545,"83":0.00727,"84":0.01454,"86":0.01818,"87":0.08724,"88":0.04362,"89":0.01454,"90":0.03635,"91":0.05089,"92":0.05816,"93":0.15994,"94":0.04726,"95":0.10178,"96":0.27626,"97":6.88469,"98":13.99112,"99":0.06543,"100":0.04362,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 51 52 53 54 57 58 59 61 62 64 67 71 72 73 74 78 85 101"},F:{"28":0.01454,"80":0.00727,"81":0.00364,"82":0.07634,"83":0.5089,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.01454,"16":0.02908,"17":0.01091,"18":0.02545,"84":0.01454,"85":0.00727,"88":0.00364,"89":0.00727,"90":0.00727,"91":0.00364,"92":0.01091,"95":0.03999,"96":0.05453,"97":1.33405,"98":4.90362,_:"12 13 14 79 80 81 83 86 87 93 94"},E:{"4":0,"14":0.04362,"15":0.04726,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1 11.1 15.4","10.1":0.00727,"12.1":0.01091,"13.1":0.02908,"14.1":0.20356,"15.1":0.12723,"15.2-15.3":0.35623},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01445,"6.0-6.1":0.00085,"7.0-7.1":0.0765,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.0952,"10.0-10.2":0,"10.3":0.0595,"11.0-11.2":0.06205,"11.3-11.4":0.00765,"12.0-12.1":0.00425,"12.2-12.5":0.41736,"13.0-13.1":0.00765,"13.2":0.00425,"13.3":0.01955,"13.4-13.7":0.18615,"14.0-14.4":0.32981,"14.5-14.8":1.46288,"15.0-15.1":1.24613,"15.2-15.3":4.466,"15.4":0.0357},P:{"4":0.29837,"5.0-5.4":0.19571,"6.2-6.4":0.04021,"7.2-7.4":0.22378,"8.2":0.01071,"9.2":0.04262,"10.1":0.07459,"11.1-11.2":0.39427,"12.0":0.03197,"13.0":0.20246,"14.0":0.11722,"15.0":0.1705,"16.0":3.48451},I:{"0":0,"3":0,"4":0.01856,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00247,"4.4":0,"4.4.3-4.4.4":0.06806},A:{"10":0.01818,"11":0.04726,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.14001},Q:{"10.4":0.01909},O:{"0":0.59822},H:{"0":0.1928},L:{"0":44.96927},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00374,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00374,"88":0.00374,"89":0,"90":0,"91":0.00749,"92":0,"93":0,"94":0,"95":0,"96":0.01123,"97":0,"98":0,"99":0,"100":0.00374,"101":0.00374,"102":0.01872,"103":0.32947,"104":0.0599,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0337,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.02246,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00374,"66":0,"67":0,"68":0,"69":0.00374,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.01498,"76":0.01872,"77":0.06365,"78":0,"79":0.06365,"80":0.00374,"81":0.01123,"83":0.01123,"84":0.01123,"85":0.00374,"86":0.01872,"87":0.00749,"88":0.00374,"89":0.00374,"90":0.00374,"91":0.00749,"92":0.00749,"93":0.12355,"94":0.00374,"95":0.01123,"96":0.00749,"97":0.01123,"98":0.04493,"99":0.01123,"100":0.04118,"101":0.02621,"102":0.04493,"103":2.16778,"104":5.26781,"105":0.01498,"106":0.02621,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00374,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01123,"64":0.01872,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00374,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00374,"89":0.19469,"90":0.0337,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0.00749,"14":0,"15":0.01123,"16":0,"17":0.00374,"18":0.00749,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00374,"91":0,"92":0.00374,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00374,"101":0.02995,"102":0.01123,"103":0.40435,"104":1.29542,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.02246,"15":0.00749,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.01498,"14.1":0.0337,"15.1":0.00749,"15.2-15.3":0.00374,"15.4":0.01872,"15.5":0.09734,"15.6":0.28829,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00541,"6.0-6.1":0,"7.0-7.1":0.07714,"8.1-8.4":0,"9.0-9.2":0.00135,"9.3":0.13669,"10.0-10.2":0,"10.3":0.06902,"11.0-11.2":0.14346,"11.3-11.4":0.01083,"12.0-12.1":0.00541,"12.2-12.5":0.52918,"13.0-13.1":0.01083,"13.2":0.00135,"13.3":0.01489,"13.4-13.7":0.24632,"14.0-14.4":0.23143,"14.5-14.8":0.50482,"15.0-15.1":0.23414,"15.2-15.3":0.49264,"15.4":0.46828,"15.5":2.9044,"15.6":7.27454,"16.0":0.16918},P:{"4":0.28145,"5.0-5.4":0.01082,"6.2-6.4":0,"7.2-7.4":0.27062,"8.2":0,"9.2":0.01082,"10.1":0.03247,"11.1-11.2":0.07577,"12.0":0.01082,"13.0":0.09742,"14.0":0.09742,"15.0":0.06495,"16.0":0.19485,"17.0":2.11085,"18.0":2.24074},I:{"0":0,"3":0,"4":0.09023,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.06767,"4.4":0,"4.4.3-4.4.4":1.69182},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01498,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":64.52418},S:{"2.5":0},R:{_:"0"},M:{"0":0.13763},Q:{"10.4":0},O:{"0":0.51299},H:{"0":0.17176}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HK.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HK.js index 60590c5ecd5..7d4738c5607 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HK.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HK.js @@ -1 +1 @@ -module.exports={C:{"34":0.02236,"52":0.0149,"56":0.00373,"72":0.00373,"78":0.03726,"88":0.00373,"89":0.01863,"90":0.02981,"91":0.01863,"94":0.0149,"95":0.02236,"96":0.40241,"97":0.59616,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 87 92 93 98 99 3.5 3.6"},D:{"19":0.00745,"22":0.02236,"26":0.01118,"30":0.00745,"34":0.05962,"38":0.14531,"48":0.00373,"49":0.06707,"53":0.04844,"55":0.01863,"56":0.01863,"57":0.00373,"61":0.02981,"62":0.01118,"63":0.01863,"64":0.00373,"65":0.0149,"67":0.02236,"68":0.01863,"69":0.01863,"70":0.01118,"71":0.01118,"72":0.01863,"73":0.0149,"74":0.02236,"75":0.02608,"76":0.01118,"77":0.00745,"78":0.03726,"79":0.54772,"80":0.03726,"81":0.03726,"83":0.04471,"84":0.02608,"85":0.01863,"86":0.04471,"87":0.09688,"88":0.02236,"89":0.08942,"90":0.02981,"91":0.09688,"92":0.24592,"93":0.07452,"94":0.19375,"95":0.12668,"96":0.66323,"97":6.22242,"98":14.46061,"99":0.01863,"100":0.0149,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 23 24 25 27 28 29 31 32 33 35 36 37 39 40 41 42 43 44 45 46 47 50 51 52 54 58 59 60 66 101"},F:{"28":0.02236,"36":0.03726,"40":0.00745,"46":0.06707,"82":0.02236,"83":0.11923,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00745,"17":0.00373,"18":0.0149,"92":0.00373,"94":0.00745,"95":0.01118,"96":0.02236,"97":0.6446,"98":2.49642,_:"13 14 15 16 79 80 81 83 84 85 86 87 88 89 90 91 93"},E:{"4":0,"8":0.01118,"11":0.00745,"12":0.01118,"13":0.11551,"14":0.56263,"15":0.27572,_:"0 5 6 7 9 10 3.1 3.2 5.1 6.1 7.1","9.1":0.00745,"10.1":0.02236,"11.1":0.04471,"12.1":0.06707,"13.1":0.38378,"14.1":1.93379,"15.1":0.78619,"15.2-15.3":1.79593,"15.4":0.01118},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01697,"6.0-6.1":0.01132,"7.0-7.1":0.0198,"8.1-8.4":0.02546,"9.0-9.2":0.00849,"9.3":0.20651,"10.0-10.2":0.01132,"10.3":0.13579,"11.0-11.2":0.04809,"11.3-11.4":0.05375,"12.0-12.1":0.06224,"12.2-12.5":0.82603,"13.0-13.1":0.07355,"13.2":0.02263,"13.3":0.14427,"13.4-13.7":0.42716,"14.0-14.4":1.47102,"14.5-14.8":5.17403,"15.0-15.1":4.10471,"15.2-15.3":15.34104,"15.4":0.09901},P:{"4":0.80478,"5.0-5.4":0.08172,"6.2-6.4":0.04086,"7.2-7.4":0.01045,"8.2":0.01045,"9.2":0.04181,"10.1":0.0209,"11.1-11.2":0.09407,"12.0":0.06271,"13.0":0.17768,"14.0":0.18813,"15.0":0.22994,"16.0":7.24306},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00167,"4.2-4.3":0.00335,"4.4":0,"4.4.3-4.4.4":0.02008},A:{"11":0.40241,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.19449},Q:{"10.4":0.07529},O:{"0":0.30115},H:{"0":0.08316},L:{"0":25.51358},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.02038,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01019,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00509,"69":0,"70":0,"71":0,"72":0.00509,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01528,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00509,"85":0,"86":0,"87":0,"88":0.00509,"89":0.00509,"90":0.01019,"91":0.02038,"92":0,"93":0,"94":0.00509,"95":0.00509,"96":0.00509,"97":0.00509,"98":0.00509,"99":0.00509,"100":0.00509,"101":0.01019,"102":0.03566,"103":0.61637,"104":0.11716,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.01019,"23":0,"24":0,"25":0,"26":0.00509,"27":0,"28":0,"29":0,"30":0.00509,"31":0,"32":0,"33":0,"34":0.05094,"35":0,"36":0,"37":0,"38":0.10188,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.00509,"46":0,"47":0,"48":0.00509,"49":0.04585,"50":0,"51":0,"52":0,"53":0.03566,"54":0,"55":0.01528,"56":0.00509,"57":0.00509,"58":0,"59":0,"60":0,"61":0.02038,"62":0.01019,"63":0.01019,"64":0,"65":0.01019,"66":0,"67":0.01019,"68":0.01019,"69":0.02038,"70":0.01019,"71":0.02038,"72":0.01019,"73":0.00509,"74":0.01528,"75":0.02038,"76":0.01019,"77":0.00509,"78":0.02547,"79":0.45846,"80":0.03056,"81":0.02547,"83":0.05094,"84":0.03056,"85":0.02547,"86":0.05094,"87":0.07641,"88":0.01019,"89":0.04585,"90":0.02038,"91":0.03056,"92":0.10697,"93":0.01528,"94":0.09169,"95":0.02038,"96":0.07132,"97":0.11716,"98":0.07132,"99":0.06622,"100":0.10697,"101":0.1732,"102":0.19867,"103":3.68296,"104":9.24052,"105":0.03566,"106":0.01019,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.01528,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.02547,"37":0,"38":0,"39":0,"40":0.00509,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.05603,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00509,"89":0.0866,"90":0.01019,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00509,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.01019,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00509,"93":0,"94":0,"95":0,"96":0.00509,"97":0.00509,"98":0.00509,"99":0.00509,"100":0.00509,"101":0.01528,"102":0.01528,"103":0.5909,"104":1.68611,"105":0},E:{"4":0,"5":0,"6":0,"7":0.01019,"8":0.00509,"9":0,"10":0,"11":0.00509,"12":0.00509,"13":0.04585,"14":0.17829,"15":0.05603,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00509,"10.1":0.01019,"11.1":0.02038,"12.1":0.03056,"13.1":0.15791,"14.1":0.41771,"15.1":0.06113,"15.2-15.3":0.07132,"15.4":0.30055,"15.5":0.94748,"15.6":1.63517,"16.0":0.01019},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.0093,"5.0-5.1":0.02791,"6.0-6.1":0.02481,"7.0-7.1":0.04032,"8.1-8.4":0.04962,"9.0-9.2":0.03101,"9.3":0.36906,"10.0-10.2":0.01551,"10.3":0.2233,"11.0-11.2":0.05893,"11.3-11.4":0.05272,"12.0-12.1":0.06203,"12.2-12.5":1.132,"13.0-13.1":0.06513,"13.2":0.02171,"13.3":0.13026,"13.4-13.7":0.34735,"14.0-14.4":0.94902,"14.5-14.8":1.92596,"15.0-15.1":0.64509,"15.2-15.3":0.82497,"15.4":1.87944,"15.5":5.70034,"15.6":16.34427,"16.0":0.06513},P:{"4":1.23306,"5.0-5.4":0.02144,"6.2-6.4":0.01072,"7.2-7.4":0.03217,"8.2":0.01072,"9.2":0.04289,"10.1":0.02144,"11.1-11.2":0.03217,"12.0":0.02144,"13.0":0.08578,"14.0":0.0965,"15.0":0.06433,"16.0":0.12867,"17.0":1.91928,"18.0":3.09873},I:{"0":0,"3":0,"4":0.0056,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00841,"4.2-4.3":0.02242,"4.4":0,"4.4.3-4.4.4":0.13451},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.01268,"9":0.06342,"10":0,"11":0.54537,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":33.26893},S:{"2.5":0},R:{_:"0"},M:{"0":0.20115},Q:{"10.4":0.18643},O:{"0":0.55438},H:{"0":0.09754}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HN.js index e4b6a4e8045..5186d886134 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HN.js @@ -1 +1 @@ -module.exports={C:{"44":0.01174,"45":0.00391,"52":0.02348,"56":0.00391,"73":0.04305,"78":0.00783,"89":0.00391,"91":0.01174,"93":0.01174,"94":0.02348,"95":0.02348,"96":0.43054,"97":0.74366,"98":0.01174,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 46 47 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 79 80 81 82 83 84 85 86 87 88 90 92 99 3.5 3.6"},D:{"38":0.01174,"41":0.01174,"47":0.00783,"49":0.01957,"53":0.03914,"58":0.00391,"63":0.00783,"65":0.01566,"66":0.00783,"68":0.07828,"69":0.01174,"70":0.00783,"71":0.00783,"72":0.00783,"73":0.00783,"74":0.00783,"75":0.03131,"76":0.03523,"77":0.00783,"78":0.03131,"79":0.23875,"80":0.09785,"81":0.0274,"83":0.03523,"84":0.06654,"85":0.03523,"86":0.0274,"87":0.06654,"88":0.03523,"89":0.05871,"90":0.02348,"91":0.06654,"92":0.07045,"93":0.09002,"94":0.10176,"95":0.08611,"96":0.49708,"97":7.03737,"98":17.55038,"99":0.03131,"100":0.01566,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 42 43 44 45 46 48 50 51 52 54 55 56 57 59 60 61 62 64 67 101"},F:{"46":0.00391,"81":0.00391,"82":0.51273,"83":1.75739,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00783,"15":0.01957,"16":0.00391,"17":0.00783,"18":0.03914,"84":0.00783,"89":0.00783,"90":0.00391,"91":0.00783,"92":0.01957,"93":0.00391,"94":0.00783,"95":0.01957,"96":0.03131,"97":0.73583,"98":2.64586,_:"13 14 79 80 81 83 85 86 87 88"},E:{"4":0,"13":0.02348,"14":0.11351,"15":0.07045,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 15.4","5.1":0.04305,"9.1":0.01174,"10.1":0.00391,"11.1":0.03131,"12.1":0.01174,"13.1":0.10568,"14.1":0.3914,"15.1":0.17613,"15.2-15.3":0.52839},G:{"8":0,"3.2":0.00248,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.01157,"7.0-7.1":0.02479,"8.1-8.4":0.00165,"9.0-9.2":0.00331,"9.3":0.05288,"10.0-10.2":0.00661,"10.3":0.08345,"11.0-11.2":0.01239,"11.3-11.4":0.01074,"12.0-12.1":0.01074,"12.2-12.5":0.33134,"13.0-13.1":0.0157,"13.2":0.00413,"13.3":0.03223,"13.4-13.7":0.08924,"14.0-14.4":0.45941,"14.5-14.8":1.45426,"15.0-15.1":1.28157,"15.2-15.3":4.33551,"15.4":0.0347},P:{"4":0.29919,"5.0-5.4":0.08172,"6.2-6.4":0.04086,"7.2-7.4":0.14444,"8.2":0.04086,"9.2":0.03095,"10.1":0.07459,"11.1-11.2":0.14444,"12.0":0.04127,"13.0":0.11348,"14.0":0.15475,"15.0":0.11348,"16.0":1.73322},I:{"0":0,"3":0,"4":0.00277,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00277,"4.2-4.3":0.00369,"4.4":0,"4.4.3-4.4.4":0.05164},A:{"11":0.10568,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.09738},Q:{"10.4":0},O:{"0":0.0852},H:{"0":0.20166},L:{"0":39.39483},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00425,"48":0,"49":0,"50":0,"51":0,"52":0.00849,"53":0,"54":0,"55":0,"56":0,"57":0.00425,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00425,"69":0,"70":0,"71":0,"72":0,"73":0.02123,"74":0,"75":0.00425,"76":0,"77":0,"78":0.00425,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.01274,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00849,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.00425,"98":0,"99":0.02123,"100":0.00425,"101":0.00425,"102":0.04671,"103":0.51377,"104":0.1019,"105":0.00425,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00425,"35":0,"36":0,"37":0,"38":0.00425,"39":0,"40":0,"41":0.01274,"42":0,"43":0,"44":0.00425,"45":0,"46":0,"47":0.00425,"48":0,"49":0.00849,"50":0,"51":0,"52":0,"53":0.01274,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00425,"64":0.00425,"65":0.00425,"66":0,"67":0.00425,"68":0.03397,"69":0.00425,"70":0.00425,"71":0.00425,"72":0,"73":0,"74":0.00425,"75":0.00849,"76":0.01698,"77":0.01274,"78":0.00849,"79":0.1019,"80":0.00849,"81":0.01274,"83":0.00425,"84":0.01274,"85":0.02123,"86":0.01274,"87":0.03821,"88":0.02123,"89":0.01274,"90":0.00849,"91":0.05095,"92":0.02548,"93":0.02548,"94":0.00425,"95":0.01274,"96":0.02972,"97":0.01698,"98":0.01698,"99":0.03397,"100":0.02972,"101":0.06794,"102":0.13587,"103":2.92974,"104":7.90181,"105":0.02972,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01698,"64":0.00849,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00425,"86":0,"87":0.00425,"88":0.01274,"89":0.85769,"90":0.0552,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.00425,"17":0,"18":0.01698,"79":0,"80":0,"81":0,"83":0,"84":0.00425,"85":0,"86":0,"87":0,"88":0,"89":0.00849,"90":0,"91":0,"92":0.00849,"93":0,"94":0.00425,"95":0,"96":0,"97":0,"98":0.00425,"99":0.00425,"100":0.00849,"101":0.03397,"102":0.01274,"103":0.50103,"104":1.31201,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00425,"14":0.01698,"15":0.00425,_:"0","3.1":0,"3.2":0,"5.1":0.00849,"6.1":0,"7.1":0,"9.1":0.00425,"10.1":0,"11.1":0.00849,"12.1":0.01274,"13.1":0.03397,"14.1":0.05944,"15.1":0.01274,"15.2-15.3":0.02123,"15.4":0.04246,"15.5":0.12738,"15.6":0.25901,"16.0":0.00425},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00743,"6.0-6.1":0.052,"7.0-7.1":0.01634,"8.1-8.4":0.00446,"9.0-9.2":0,"9.3":0.06685,"10.0-10.2":0.00149,"10.3":0.08468,"11.0-11.2":0.01486,"11.3-11.4":0.01783,"12.0-12.1":0.00891,"12.2-12.5":0.50361,"13.0-13.1":0.00891,"13.2":0.00594,"13.3":0.11736,"13.4-13.7":0.10845,"14.0-14.4":0.3194,"14.5-14.8":0.68931,"15.0-15.1":0.27335,"15.2-15.3":0.36545,"15.4":0.5051,"15.5":3.13608,"15.6":8.28513,"16.0":0.25701},P:{"4":0.21551,"5.0-5.4":0.01026,"6.2-6.4":0,"7.2-7.4":0.23604,"8.2":0,"9.2":0.03079,"10.1":0,"11.1-11.2":0.11289,"12.0":0.03079,"13.0":0.0821,"14.0":0.0821,"15.0":0.05131,"16.0":0.15394,"17.0":1.13913,"18.0":1.22123},I:{"0":0,"3":0,"4":0.01768,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.03535,"4.4":0,"4.4.3-4.4.4":0.34173},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00425,"10":0,"11":0.03821,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":62.38537},S:{"2.5":0.00575},R:{_:"0"},M:{"0":0.16687},Q:{"10.4":0},O:{"0":0.09782},H:{"0":0.22335}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HR.js index 7aacf603128..ec914c0f2a4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HR.js @@ -1 +1 @@ -module.exports={C:{"48":0.00468,"52":0.08886,"56":0.00935,"63":0.02806,"68":0.00468,"72":0.00468,"75":0.00468,"78":0.03274,"84":0.01871,"88":0.02806,"89":0.05145,"90":0.00468,"91":0.08419,"92":0.05145,"93":0.00468,"94":0.02806,"95":0.0608,"96":2.06256,"97":3.20842,"98":0.00935,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 57 58 59 60 61 62 64 65 66 67 69 70 71 73 74 76 77 79 80 81 82 83 85 86 87 99 3.5 3.6"},D:{"38":0.00935,"41":0.00468,"43":0.00935,"47":0.00468,"49":0.09822,"53":0.03274,"59":0.00468,"63":0.00935,"65":0.00468,"66":0.00468,"68":0.00468,"69":0.01403,"70":0.00468,"71":0.01403,"74":0.01403,"75":0.02339,"76":0.02339,"77":0.1637,"78":0.00468,"79":0.13096,"80":0.01871,"81":0.25256,"83":0.01403,"84":0.03274,"85":0.01871,"86":0.04677,"87":0.0608,"88":0.02806,"89":0.04209,"90":0.02806,"91":0.05612,"92":0.04209,"93":0.11693,"94":0.05612,"95":0.06548,"96":0.49109,"97":9.41948,"98":21.04182,"99":0.00935,"100":0.00468,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 42 44 45 46 48 50 51 52 54 55 56 57 58 60 61 62 64 67 72 73 101"},F:{"36":0.00468,"46":0.01403,"68":0.00468,"72":0.00935,"82":0.35545,"83":1.75388,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 69 70 71 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.01871,"18":0.01403,"86":0.00468,"88":0.01871,"89":0.00935,"92":0.00935,"94":0.00468,"95":0.00935,"96":0.03742,"97":0.65946,"98":2.58638,_:"12 13 14 15 16 79 80 81 83 84 85 87 90 91 93"},E:{"4":0,"13":0.00935,"14":0.07951,"15":0.03742,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00935,"12.1":0.02339,"13.1":0.14031,"14.1":0.31336,"15.1":0.14966,"15.2-15.3":0.35078},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00668,"6.0-6.1":0,"7.0-7.1":0.00445,"8.1-8.4":0.00223,"9.0-9.2":0.00148,"9.3":0.06163,"10.0-10.2":0.00074,"10.3":0.02747,"11.0-11.2":0.01114,"11.3-11.4":0.02227,"12.0-12.1":0.01336,"12.2-12.5":0.24205,"13.0-13.1":0.01782,"13.2":0.00891,"13.3":0.0297,"13.4-13.7":0.11286,"14.0-14.4":0.3705,"14.5-14.8":1.41889,"15.0-15.1":1.2741,"15.2-15.3":3.78444,"15.4":0.01485},P:{"4":0.13398,"5.0-5.4":0.01056,"6.2-6.4":0.01056,"7.2-7.4":0.01031,"8.2":0.01049,"9.2":0.09508,"10.1":0.01031,"11.1-11.2":0.12367,"12.0":0.04122,"13.0":0.11337,"14.0":0.15459,"15.0":0.1649,"16.0":3.12279},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00192,"4.2-4.3":0.00447,"4.4":0,"4.4.3-4.4.4":0.02555},A:{"11":0.28997,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.26083},Q:{"10.4":0},O:{"0":0.08517},H:{"0":0.44851},L:{"0":40.42433},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.02339,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.0039,"65":0,"66":0,"67":0,"68":0.0078,"69":0,"70":0,"71":0,"72":0.0039,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.0078,"79":0,"80":0,"81":0.0039,"82":0,"83":0,"84":0.0039,"85":0.0039,"86":0,"87":0,"88":0.0039,"89":0.0078,"90":0,"91":0.0195,"92":0.0039,"93":0,"94":0.0039,"95":0.0039,"96":0.0039,"97":0.0039,"98":0.0039,"99":0.02729,"100":0.0156,"101":0.0117,"102":0.06628,"103":1.31786,"104":0.24564,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.0039,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.0039,"39":0,"40":0,"41":0.0078,"42":0,"43":0.0039,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.0156,"50":0,"51":0,"52":0,"53":0.0117,"54":0,"55":0,"56":0.0039,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.0039,"64":0,"65":0,"66":0.0078,"67":0,"68":0,"69":0.0039,"70":0,"71":0.0039,"72":0,"73":0,"74":0,"75":0.0039,"76":0,"77":0.0117,"78":0.0039,"79":0.03899,"80":0.0078,"81":0.03119,"83":0.0117,"84":0.0156,"85":0.03119,"86":0.0195,"87":0.0156,"88":0.0078,"89":0.0156,"90":0.0078,"91":0.0078,"92":0.03509,"93":0.0078,"94":0.0078,"95":0.0078,"96":0.04289,"97":0.0195,"98":0.0156,"99":0.0156,"100":0.03899,"101":0.02729,"102":0.07018,"103":2.47976,"104":6.84664,"105":0.0156,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.0039,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.0039,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.0039,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0078,"64":0.0039,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.0039,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.0039,"85":0.0039,"86":0,"87":0,"88":0.0078,"89":0.57315,"90":0.10137,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0.02729,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.0039,"17":0,"18":0.0039,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.0039,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.0078,"100":0.0039,"101":0.0039,"102":0.0039,"103":0.27683,"104":0.82659,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.0039,"14":0.02729,"15":0.0078,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.0039,"12.1":0.0117,"13.1":0.05069,"14.1":0.06628,"15.1":0.0156,"15.2-15.3":0.0156,"15.4":0.05459,"15.5":0.18325,"15.6":0.27293,"16.0":0.0039},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00624,"6.0-6.1":0,"7.0-7.1":0.00312,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.08574,"10.0-10.2":0.00156,"10.3":0.06859,"11.0-11.2":0.00935,"11.3-11.4":0.01091,"12.0-12.1":0.01715,"12.2-12.5":0.31801,"13.0-13.1":0.00624,"13.2":0.00312,"13.3":0.04521,"13.4-13.7":0.10756,"14.0-14.4":0.33672,"14.5-14.8":0.92442,"15.0-15.1":0.26033,"15.2-15.3":0.42558,"15.4":0.67032,"15.5":4.57533,"15.6":7.60892,"16.0":0.09977},P:{"4":0.18545,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0.0103,"10.1":0.0103,"11.1-11.2":0.05151,"12.0":0.02061,"13.0":0.05151,"14.0":0.05151,"15.0":0.04121,"16.0":0.14424,"17.0":1.61751,"18.0":2.18416},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.03468,"4.2-4.3":0.01734,"4.4":0,"4.4.3-4.4.4":0.12138},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.05069,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":59.24581},S:{"2.5":0},R:{_:"0"},M:{"0":0.39657},Q:{"10.4":0.0061},O:{"0":0.06101},H:{"0":0.49096}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HT.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HT.js index 3c052986d4f..2583b4dab42 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HT.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HT.js @@ -1 +1 @@ -module.exports={C:{"46":0.00146,"52":0.00731,"68":0.00146,"78":0.00146,"84":0.00292,"87":0.00439,"88":0.00146,"89":0.00439,"91":0.00731,"94":0.00146,"95":0.01901,"96":0.17398,"97":0.30556,"98":0.00585,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 90 92 93 99 3.5 3.6"},D:{"11":0.00292,"26":0.00146,"33":0.00585,"38":0.00439,"39":0.00292,"42":0.00439,"43":0.00585,"46":0.00146,"49":0.01023,"50":0.00585,"54":0.00146,"55":0.00439,"56":0.00731,"58":0.00146,"59":0.00146,"60":0.05556,"63":0.01462,"64":0.00731,"65":0.00292,"66":0.00292,"67":0.00439,"68":0.00731,"69":0.00292,"70":0.01316,"71":0.00731,"72":0.00585,"73":0.01023,"74":0.01023,"75":0.03363,"76":0.04678,"77":0.04386,"78":0.00146,"79":0.03363,"80":0.01023,"81":0.02193,"83":0.00585,"84":0.01462,"85":0.01023,"86":0.0307,"87":0.02193,"88":0.0307,"89":0.09211,"90":0.02339,"91":0.02485,"92":0.11404,"93":0.05263,"94":0.09503,"95":0.02193,"96":0.1579,"97":2.10236,"98":4.1784,"99":0.00439,"100":0.00439,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 34 35 36 37 40 41 44 45 47 48 51 52 53 57 61 62 101"},F:{"33":0.00146,"77":0.00439,"79":0.00146,"80":0.00439,"82":0.02778,"83":0.33626,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.04532,"13":0.02047,"14":0.01023,"15":0.01023,"16":0.0117,"17":0.0117,"18":0.0424,"80":0.00292,"84":0.01608,"85":0.00585,"86":0.02778,"87":0.00292,"88":0.00146,"89":0.02193,"90":0.00439,"91":0.00292,"92":0.01462,"93":0.00731,"94":0.00731,"95":0.00877,"96":0.0424,"97":0.41959,"98":1.38013,_:"79 81 83"},E:{"4":0,"12":0.00146,"13":0.03509,"14":0.04825,"15":0.02339,_:"0 5 6 7 8 9 10 11 3.1 3.2 7.1 9.1","5.1":0.0117,"6.1":0.00439,"10.1":0.09942,"11.1":0.00731,"12.1":0.01316,"13.1":0.02047,"14.1":0.16374,"15.1":0.36989,"15.2-15.3":0.09795,"15.4":0.00146},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00104,"7.0-7.1":0.01351,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04262,"10.0-10.2":0.00208,"10.3":0.11538,"11.0-11.2":0.02495,"11.3-11.4":0.4449,"12.0-12.1":0.09251,"12.2-12.5":2.5613,"13.0-13.1":0.05925,"13.2":0.02079,"13.3":0.27962,"13.4-13.7":0.57588,"14.0-14.4":1.71204,"14.5-14.8":1.74426,"15.0-15.1":1.38564,"15.2-15.3":1.3004,"15.4":0.01455},P:{"4":0.35753,"5.0-5.4":0.08172,"6.2-6.4":0.04086,"7.2-7.4":0.2043,"8.2":0.04086,"9.2":0.23495,"10.1":0.07459,"11.1-11.2":0.4086,"12.0":0.07151,"13.0":0.09194,"14.0":0.30645,"15.0":0.26559,"16.0":0.75592},I:{"0":0,"3":0,"4":0.00033,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00154,"4.2-4.3":0.00065,"4.4":0,"4.4.3-4.4.4":0.01456},A:{"10":0.00146,"11":0.07749,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.02561},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.16222},Q:{"10.4":0},O:{"0":0.21345},H:{"0":0.86491},L:{"0":72.20151},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00159,"92":0,"93":0,"94":0,"95":0.00159,"96":0,"97":0,"98":0.00159,"99":0,"100":0.00159,"101":0.00319,"102":0.00478,"103":0.05898,"104":0.01116,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.00159,"43":0.00159,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00319,"50":0.00159,"51":0,"52":0.00159,"53":0,"54":0,"55":0,"56":0.00159,"57":0,"58":0.00159,"59":0,"60":0.00478,"61":0,"62":0,"63":0.00159,"64":0.00159,"65":0.01753,"66":0,"67":0,"68":0.00478,"69":0,"70":0.00319,"71":0,"72":0.00159,"73":0,"74":0.00159,"75":0.00319,"76":0.02072,"77":0.00478,"78":0.00159,"79":0.00159,"80":0.00319,"81":0.00956,"83":0.00319,"84":0,"85":0.00159,"86":0.00159,"87":0.00478,"88":0.00319,"89":0.00159,"90":0.00319,"91":0.00159,"92":0.01594,"93":0.00478,"94":0.00319,"95":0.01116,"96":0.00638,"97":0.00159,"98":0.00319,"99":0.00638,"100":0.00797,"101":0.00956,"102":0.00956,"103":0.36343,"104":0.65992,"105":0.00159,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00159,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00478,"60":0.00159,"62":0.00319,"63":0.0542,"64":0.03507,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00159,"85":0.00159,"86":0,"87":0.00159,"88":0.00478,"89":0.08926,"90":0.01275,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00478,"13":0.00159,"14":0.00159,"15":0.00319,"16":0.00159,"17":0.00159,"18":0.00478,"79":0,"80":0,"81":0,"83":0,"84":0.00159,"85":0,"86":0,"87":0,"88":0,"89":0.00159,"90":0,"91":0,"92":0.00319,"93":0,"94":0,"95":0,"96":0.00159,"97":0,"98":0.00159,"99":0.00319,"100":0.00159,"101":0.00159,"102":0.00478,"103":0.07651,"104":0.18809,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00319,"14":0.00159,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00159,"12.1":0,"13.1":0.00478,"14.1":0.01435,"15.1":0.00319,"15.2-15.3":0.00159,"15.4":0.00319,"15.5":0.01116,"15.6":0.01435,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00103,"6.0-6.1":0,"7.0-7.1":0.00412,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.10091,"10.0-10.2":0.01236,"10.3":0.29243,"11.0-11.2":0.01339,"11.3-11.4":0.55293,"12.0-12.1":0.25021,"12.2-12.5":2.0995,"13.0-13.1":0.08443,"13.2":0.0175,"13.3":0.16372,"13.4-13.7":0.37789,"14.0-14.4":1.1625,"14.5-14.8":1.39727,"15.0-15.1":0.50454,"15.2-15.3":0.64046,"15.4":0.44173,"15.5":0.9926,"15.6":1.11719,"16.0":0.06693},P:{"4":0.3991,"5.0-5.4":0.17397,"6.2-6.4":0.04093,"7.2-7.4":0.3377,"8.2":0.04093,"9.2":0.3684,"10.1":0.01023,"11.1-11.2":0.51167,"12.0":0.04093,"13.0":0.19443,"14.0":0.17397,"15.0":0.0921,"16.0":0.3377,"17.0":0.93124,"18.0":0.34794},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00135,"4.2-4.3":0.00539,"4.4":0,"4.4.3-4.4.4":0.09862},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00638,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":81.23629},S:{"2.5":0},R:{_:"0"},M:{"0":0.12609},Q:{"10.4":0},O:{"0":0.39508},H:{"0":1.00274}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HU.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HU.js index 7e548044600..63c9f98af69 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HU.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/HU.js @@ -1 +1 @@ -module.exports={C:{"50":0.01385,"52":0.15233,"60":0.00462,"68":0.01385,"72":0.01385,"74":0.00923,"76":0.00462,"78":0.03693,"80":0.00462,"81":0.00923,"82":0.00462,"83":0.00462,"84":0.44314,"86":0.00462,"88":0.03231,"89":0.02308,"90":0.00462,"91":0.10617,"92":0.00923,"93":0.00462,"94":0.0277,"95":0.11078,"96":2.88038,"97":3.88667,"98":0.00923,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 69 70 71 73 75 77 79 85 87 99 3.5 3.6"},D:{"24":0.01385,"33":0.01385,"34":0.00923,"37":0.01385,"38":0.0277,"49":0.36466,"53":0.01846,"66":0.01846,"68":0.00462,"69":0.00462,"70":0.00462,"71":0.00462,"73":0.00462,"74":0.0277,"75":0.00462,"76":0.00923,"77":0.00923,"78":0.01385,"79":0.26311,"80":0.01385,"81":0.01846,"83":0.05539,"84":0.01846,"85":0.01846,"86":0.0277,"87":0.48468,"88":0.02308,"89":0.04154,"90":0.0277,"91":0.03231,"92":0.04154,"93":0.15233,"94":0.03231,"95":0.06462,"96":0.38313,"97":8.06877,"98":19.11024,"99":0.00923,"100":0.00923,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 35 36 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 56 57 58 59 60 61 62 63 64 65 67 72 101"},F:{"36":0.00923,"46":0.00462,"80":0.00462,"81":0.00462,"82":0.36928,"83":1.66638,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00923,"18":0.00923,"87":0.00923,"89":0.00462,"92":0.00923,"95":0.01385,"96":0.02308,"97":0.7801,"98":2.52495,_:"12 13 14 15 16 79 80 81 83 84 85 86 88 90 91 93 94"},E:{"4":0,"13":0.12463,"14":0.11078,"15":0.06001,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.01385,"11.1":0.01385,"12.1":0.03231,"13.1":0.10617,"14.1":0.29081,"15.1":0.18464,"15.2-15.3":0.42467,"15.4":0.00462},G:{"8":0.00105,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00105,"6.0-6.1":0.00211,"7.0-7.1":0.00633,"8.1-8.4":0,"9.0-9.2":0.00316,"9.3":0.02637,"10.0-10.2":0.00211,"10.3":0.03375,"11.0-11.2":0.01898,"11.3-11.4":0.0116,"12.0-12.1":0.01793,"12.2-12.5":0.26051,"13.0-13.1":0.01688,"13.2":0.00422,"13.3":0.04113,"13.4-13.7":0.27212,"14.0-14.4":0.44403,"14.5-14.8":1.64535,"15.0-15.1":1.40277,"15.2-15.3":6.29137,"15.4":0.03902},P:{"4":0.21756,"5.0-5.4":0.08172,"6.2-6.4":0.04086,"7.2-7.4":0.01045,"8.2":0.01045,"9.2":0.04181,"10.1":0.0209,"11.1-11.2":0.03108,"12.0":0.02072,"13.0":0.07252,"14.0":0.13468,"15.0":0.09324,"16.0":2.29988},I:{"0":0,"3":0,"4":0,"2.1":0.00383,"2.2":0,"2.3":0,"4.1":0.00383,"4.2-4.3":0.0153,"4.4":0,"4.4.3-4.4.4":0.07396},A:{"11":0.18926,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0.27997},Q:{"10.4":0},O:{"0":0.03769},H:{"0":0.44346},L:{"0":40.30563},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.004,"48":0,"49":0,"50":0,"51":0,"52":0.05596,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00799,"69":0,"70":0,"71":0,"72":0.004,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01199,"79":0,"80":0,"81":0.004,"82":0,"83":0.004,"84":0.004,"85":0,"86":0,"87":0,"88":0.00799,"89":0.004,"90":0,"91":0.03597,"92":0,"93":0,"94":0.004,"95":0.00799,"96":0.004,"97":0.004,"98":0.00799,"99":0.01999,"100":0.01199,"101":0.01599,"102":0.6635,"103":1.78666,"104":0.37572,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.004,"35":0,"36":0,"37":0,"38":0.01199,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01999,"50":0,"51":0,"52":0,"53":0.004,"54":0,"55":0,"56":0,"57":0,"58":0.004,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.004,"69":0.00799,"70":0.004,"71":0.004,"72":0,"73":0.004,"74":0.004,"75":0,"76":0.004,"77":0,"78":0.004,"79":0.1279,"80":0.004,"81":0.01199,"83":0.00799,"84":0.00799,"85":0.00799,"86":0.00799,"87":0.01999,"88":0.00799,"89":0.01199,"90":0.00799,"91":0.00799,"92":0.01599,"93":0.004,"94":0.004,"95":0.01199,"96":0.01599,"97":0.01199,"98":0.01199,"99":0.01599,"100":0.01999,"101":0.02398,"102":0.06395,"103":2.45016,"104":6.69897,"105":0.01599,"106":0.004,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.004,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.004,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.004,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00799,"64":0.01199,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.004,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.004,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00799,"86":0,"87":0.004,"88":0.01599,"89":0.56757,"90":0.07594,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.004,"16":0,"17":0.004,"18":0.004,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0.004,"88":0,"89":0,"90":0,"91":0,"92":0.004,"93":0,"94":0,"95":0,"96":0,"97":0.004,"98":0,"99":0,"100":0,"101":0.01999,"102":0.00799,"103":0.32376,"104":0.97127,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.004,"14":0.02398,"15":0.004,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.004,"10.1":0,"11.1":0.004,"12.1":0.00799,"13.1":0.02798,"14.1":0.04796,"15.1":0.01199,"15.2-15.3":0.01199,"15.4":0.03597,"15.5":0.12391,"15.6":0.23183,"16.0":0.004},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0047,"6.0-6.1":0,"7.0-7.1":0.01097,"8.1-8.4":0,"9.0-9.2":0.00157,"9.3":0.03763,"10.0-10.2":0.00157,"10.3":0.04703,"11.0-11.2":0.01725,"11.3-11.4":0.01411,"12.0-12.1":0.01568,"12.2-12.5":0.3606,"13.0-13.1":0.01411,"13.2":0.0047,"13.3":0.03136,"13.4-13.7":0.11445,"14.0-14.4":0.34805,"14.5-14.8":0.83408,"15.0-15.1":0.18187,"15.2-15.3":0.35746,"15.4":0.61929,"15.5":3.5072,"15.6":8.982,"16.0":0.15992},P:{"4":0.34847,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01025,"12.0":0.01025,"13.0":0.05125,"14.0":0.06149,"15.0":0.03075,"16.0":0.07174,"17.0":0.91216,"18.0":1.44511},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.03557,"4.2-4.3":0.0415,"4.4":0,"4.4.3-4.4.4":0.25492},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02398,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":62.48705},S:{"2.5":0},R:{_:"0"},M:{"0":0.31216},Q:{"10.4":0},O:{"0":0.04202},H:{"0":0.41488}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ID.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ID.js index c2cd637dbf5..e9c5ec2cbcb 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ID.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ID.js @@ -1 +1 @@ -module.exports={C:{"36":0.12877,"45":0.00307,"47":0.00307,"48":0.00307,"52":0.02453,"56":0.01533,"60":0.00613,"62":0.00613,"66":0.00307,"68":0.00307,"69":0.00307,"70":0.00307,"72":0.01533,"77":0.00307,"78":0.01226,"80":0.00613,"81":0.00613,"82":0.00307,"83":0.00307,"84":0.0092,"85":0.00613,"86":0.00307,"87":0.00307,"88":0.02146,"89":0.01533,"90":0.00613,"91":0.02453,"92":0.01226,"93":0.01533,"94":0.02146,"95":0.04599,"96":1.01485,"97":1.65257,"98":0.05825,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 46 49 50 51 53 54 55 57 58 59 61 63 64 65 67 71 73 74 75 76 79 99 3.5 3.6"},D:{"25":0.00613,"49":0.01533,"58":0.00613,"63":0.01533,"65":0.00307,"66":0.00307,"67":0.00613,"68":0.00307,"69":0.00613,"70":0.0092,"71":0.0184,"72":0.00613,"73":0.00613,"74":0.01226,"75":0.0092,"76":0.0092,"77":0.0092,"78":0.0092,"79":0.04292,"80":0.02453,"81":0.01226,"83":0.02453,"84":0.03066,"85":0.03679,"86":0.04599,"87":0.08891,"88":0.02146,"89":0.09198,"90":0.02146,"91":0.03679,"92":0.05519,"93":0.09198,"94":0.05519,"95":0.05825,"96":0.33726,"97":5.70276,"98":14.99581,"99":0.0092,"100":0.0092,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 59 60 61 62 64 101"},F:{"82":0.06745,"83":0.43537,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00613,"14":0.00307,"15":0.00307,"17":0.00307,"18":0.01533,"84":0.00307,"92":0.0092,"94":0.00307,"95":0.00613,"96":0.02759,"97":0.37405,"98":1.48701,_:"13 16 79 80 81 83 85 86 87 88 89 90 91 93"},E:{"4":0,"12":0.00613,"13":0.0184,"14":0.07665,"15":0.03986,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 10.1 15.4","5.1":0.11957,"9.1":0.00613,"11.1":0.0092,"12.1":0.0184,"13.1":0.08585,"14.1":0.1717,"15.1":0.09198,"15.2-15.3":0.1349},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00052,"5.0-5.1":0.00052,"6.0-6.1":0.00104,"7.0-7.1":0.00052,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00993,"10.0-10.2":0.00157,"10.3":0.01567,"11.0-11.2":0.01045,"11.3-11.4":0.00836,"12.0-12.1":0.01515,"12.2-12.5":0.28633,"13.0-13.1":0.0162,"13.2":0.00731,"13.3":0.04493,"13.4-13.7":0.11599,"14.0-14.4":0.43106,"14.5-14.8":1.00528,"15.0-15.1":0.98752,"15.2-15.3":2.25614,"15.4":0.00679},P:{"4":0.20201,"5.0-5.4":0.08172,"6.2-6.4":0.02146,"7.2-7.4":0.08506,"8.2":0.01045,"9.2":0.0319,"10.1":0.02126,"11.1-11.2":0.10632,"12.0":0.04253,"13.0":0.11695,"14.0":0.15948,"15.0":0.13822,"16.0":1.16953},I:{"0":0,"3":0.00109,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00109,"4.2-4.3":0.00082,"4.4":0,"4.4.3-4.4.4":0.01088},A:{"8":0.00624,"9":0.00312,"11":0.17461,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.12481},Q:{"10.4":0},O:{"0":1.14411},H:{"0":1.05035},L:{"0":60.07681},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.06971,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00734,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00367,"69":0,"70":0,"71":0,"72":0.00367,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00367,"79":0.00367,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00734,"89":0.00367,"90":0.00367,"91":0.00734,"92":0,"93":0.00367,"94":0.00367,"95":0.00367,"96":0.00367,"97":0.00367,"98":0.00367,"99":0.01468,"100":0.01101,"101":0.01468,"102":0.03669,"103":0.90257,"104":0.17978,"105":0.00734,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00367,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00367,"64":0,"65":0.00367,"66":0,"67":0.00367,"68":0,"69":0.00367,"70":0.00367,"71":0.00734,"72":0.00367,"73":0.00734,"74":0.01101,"75":0.00367,"76":0.00367,"77":0.00367,"78":0.00367,"79":0.01468,"80":0.02201,"81":0.01101,"83":0.01101,"84":0.01468,"85":0.01468,"86":0.01835,"87":0.02201,"88":0.01101,"89":0.02568,"90":0.00734,"91":0.01101,"92":0.02201,"93":0.00734,"94":0.01101,"95":0.01101,"96":0.02201,"97":0.01835,"98":0.01468,"99":0.01835,"100":0.02568,"101":0.03302,"102":0.07338,"103":2.46557,"104":6.79866,"105":0.01835,"106":0.00367,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.01101,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.00367,"55":0.00367,"56":0,"57":0,"58":0.00367,"60":0.00367,"62":0,"63":0.08439,"64":0.07338,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00367,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00367,"86":0,"87":0,"88":0.00367,"89":0.13942,"90":0.02201,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00367,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00367,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00367,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00367,"100":0.00367,"101":0.00367,"102":0.00734,"103":0.23482,"104":0.65308,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00367,"14":0.01835,"15":0.00367,_:"0","3.1":0,"3.2":0,"5.1":0.03302,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00367,"12.1":0.00367,"13.1":0.02201,"14.1":0.03669,"15.1":0.01101,"15.2-15.3":0.00734,"15.4":0.01835,"15.5":0.0587,"15.6":0.07338,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00082,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01481,"10.0-10.2":0.00411,"10.3":0.01646,"11.0-11.2":0.01234,"11.3-11.4":0.00576,"12.0-12.1":0.01399,"12.2-12.5":0.27811,"13.0-13.1":0.01399,"13.2":0.01152,"13.3":0.03785,"13.4-13.7":0.08639,"14.0-14.4":0.32501,"14.5-14.8":0.56444,"15.0-15.1":0.27646,"15.2-15.3":0.36039,"15.4":0.76274,"15.5":2.10967,"15.6":3.29287,"16.0":0.03703},P:{"4":0.14241,"5.0-5.4":0,"6.2-6.4":0.01017,"7.2-7.4":0.05086,"8.2":0,"9.2":0.03052,"10.1":0.02034,"11.1-11.2":0.06103,"12.0":0.02034,"13.0":0.06103,"14.0":0.06103,"15.0":0.05086,"16.0":0.13224,"17.0":0.64085,"18.0":0.52896},I:{"0":0,"3":0.00307,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00613,"4.2-4.3":0.00307,"4.4":0,"4.4.3-4.4.4":0.0414},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.01835,"9":0,"10":0,"11":0.02568,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":73.31113},S:{"2.5":0},R:{_:"0"},M:{"0":0.15194},Q:{"10.4":0},O:{"0":1.03828},H:{"0":0.94702}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IE.js index 5b6c6ec8bdd..71b0d192dff 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IE.js @@ -1 +1 @@ -module.exports={C:{"11":0.0088,"24":0.01321,"38":0.02201,"43":0.01761,"44":0.07483,"45":0.01761,"50":0.01321,"52":0.02201,"66":0.01321,"70":0.0088,"78":0.04842,"79":0.01761,"80":0.01321,"81":0.0088,"82":0.01321,"83":0.0088,"84":0.0088,"87":0.17168,"88":0.0088,"91":0.16728,"94":0.4358,"95":0.01321,"96":0.51944,"97":0.70432,"98":0.0044,_:"2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 46 47 48 49 51 53 54 55 56 57 58 59 60 61 62 63 64 65 67 68 69 71 72 73 74 75 76 77 85 86 89 90 92 93 99 3.5 3.6"},D:{"28":0.0044,"37":0.0088,"38":0.0088,"43":0.0088,"47":0.01761,"48":0.2157,"49":0.07924,"60":0.02201,"63":0.0088,"65":0.03522,"67":0.01761,"68":0.01761,"69":0.01321,"70":0.0088,"71":0.0088,"72":0.01761,"74":0.01761,"75":0.0044,"76":0.02201,"77":0.01321,"78":0.17608,"79":0.07483,"80":0.03522,"81":0.09244,"83":0.05282,"84":0.09244,"85":0.10125,"86":0.11885,"87":0.12766,"88":0.02641,"89":0.03962,"90":0.02201,"91":0.04842,"92":0.04402,"93":0.16728,"94":0.36977,"95":0.06603,"96":0.34776,"97":9.0241,"98":19.45244,"99":0.0088,"100":0.01321,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 39 40 41 42 44 45 46 50 51 52 53 54 55 56 57 58 59 61 62 64 66 73 101"},F:{"82":0.11885,"83":0.38297,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.0088,"13":0.0088,"15":0.01761,"16":0.02201,"18":0.03081,"84":0.0088,"85":0.0044,"86":0.0088,"88":0.0044,"92":0.0088,"94":0.0088,"95":0.04402,"96":0.03962,"97":0.81437,"98":2.28464,_:"14 17 79 80 81 83 87 89 90 91 93"},E:{"4":0,"8":0.0088,"9":0.03081,"13":0.08364,"14":0.73954,"15":0.16728,_:"0 5 6 7 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.0088,"11.1":0.01761,"12.1":0.07483,"13.1":0.28173,"14.1":1.5407,"15.1":0.71753,"15.2-15.3":1.3162,"15.4":0.0044},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.0154,"7.0-7.1":0.05389,"8.1-8.4":0.0077,"9.0-9.2":0.00513,"9.3":0.11804,"10.0-10.2":0,"10.3":0.1668,"11.0-11.2":0.03593,"11.3-11.4":0.03593,"12.0-12.1":0.04106,"12.2-12.5":1.05209,"13.0-13.1":0.02309,"13.2":0.02053,"13.3":0.11547,"13.4-13.7":0.37978,"14.0-14.4":1.17783,"14.5-14.8":6.4614,"15.0-15.1":3.5335,"15.2-15.3":12.37366,"15.4":0.02823},P:{"4":0.021,"5.0-5.4":0.01022,"6.2-6.4":0.01022,"7.2-7.4":0.0315,"8.2":0.08049,"9.2":0.05112,"10.1":0.12073,"11.1-11.2":0.09449,"12.0":0.0315,"13.0":0.11548,"14.0":0.18897,"15.0":0.13648,"16.0":3.01305},I:{"0":0,"3":0,"4":0.00292,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00195,"4.2-4.3":0.00584,"4.4":0,"4.4.3-4.4.4":0.03407},A:{"8":0.00446,"9":0.1203,"11":0.24061,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.40298},Q:{"10.4":0},O:{"0":0.02799},H:{"0":0.10598},L:{"0":25.91888},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00696,"39":0,"40":0,"41":0,"42":0,"43":0.00696,"44":0.02786,"45":0.00696,"46":0,"47":0,"48":0.00348,"49":0,"50":0.00348,"51":0,"52":0.00696,"53":0.00348,"54":0,"55":0,"56":0.02437,"57":0.00348,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00696,"69":0,"70":0.00348,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.02786,"79":0.01045,"80":0.01393,"81":0.00696,"82":0.00696,"83":0.01045,"84":0,"85":0,"86":0,"87":0.09053,"88":0,"89":0,"90":0,"91":0.01045,"92":0,"93":0.00348,"94":0,"95":0.00348,"96":0,"97":0.00348,"98":0.00348,"99":0.00348,"100":0.00348,"101":0.01045,"102":0.03482,"103":0.54319,"104":0.10098,"105":0.02089,"106":0.00348,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00348,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00348,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00696,"48":0.0766,"49":0.03134,"50":0,"51":0,"52":0,"53":0.00348,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00348,"67":0,"68":0,"69":0.00348,"70":0.00348,"71":0.00348,"72":0,"73":0,"74":0.00348,"75":0.00348,"76":0.00696,"77":0.00348,"78":0.08009,"79":0.02786,"80":0.0383,"81":0.05223,"83":0.02786,"84":0.0766,"85":0.05223,"86":0.06964,"87":0.07312,"88":0.00348,"89":0.01393,"90":0.00348,"91":0.01045,"92":0.00696,"93":0.00696,"94":0.00696,"95":0.00348,"96":0.21588,"97":0.01045,"98":0.01045,"99":0.02786,"100":0.04875,"101":0.26463,"102":0.10794,"103":1.80716,"104":4.28634,"105":0.01741,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0.00348,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00348,"64":0.00696,"65":0,"66":0,"67":0,"68":0.00348,"69":0,"70":0.00348,"71":0.00696,"72":0,"73":0,"74":0.00348,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0.00348,"83":0,"84":0,"85":0.00696,"86":0,"87":0,"88":0.00696,"89":0.20196,"90":0.01393,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00348,"13":0.00348,"14":0,"15":0.00348,"16":0,"17":0,"18":0.01045,"79":0,"80":0,"81":0,"83":0.00348,"84":0.00348,"85":0,"86":0.00348,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0.00348,"96":0.00348,"97":0,"98":0,"99":0.00348,"100":0.00348,"101":0.0383,"102":0.00696,"103":0.32383,"104":0.86005,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.00348,"9":0.01045,"10":0,"11":0,"12":0,"13":0.01393,"14":0.07312,"15":0.01045,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00348,"11.1":0.00696,"12.1":0.01393,"13.1":0.0766,"14.1":0.13928,"15.1":0.02437,"15.2-15.3":0.02089,"15.4":0.08009,"15.5":0.29249,"15.6":0.49444,"16.0":0.00348},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.02294,"7.0-7.1":0.065,"8.1-8.4":0.01529,"9.0-9.2":0.00765,"9.3":0.17971,"10.0-10.2":0.00382,"10.3":0.18353,"11.0-11.2":0.02294,"11.3-11.4":0.11853,"12.0-12.1":0.02676,"12.2-12.5":1.40323,"13.0-13.1":0.02294,"13.2":0.04588,"13.3":0.07265,"13.4-13.7":0.27912,"14.0-14.4":0.81823,"14.5-14.8":2.50441,"15.0-15.1":0.52382,"15.2-15.3":1.00559,"15.4":1.46059,"15.5":8.85528,"15.6":20.44056,"16.0":0.13382},P:{"4":0.08263,"5.0-5.4":0.01033,"6.2-6.4":0,"7.2-7.4":0.03099,"8.2":0,"9.2":0.01033,"10.1":0,"11.1-11.2":0.05165,"12.0":0.03099,"13.0":0.08263,"14.0":0.10329,"15.0":0.04132,"16.0":0.16527,"17.0":1.45642,"18.0":2.2621},I:{"0":0,"3":0,"4":0.03207,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01283,"4.2-4.3":0.0449,"4.4":0,"4.4.3-4.4.4":0.186},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00355,"9":0.11716,"10":0,"11":0.06035,"5.5":0},J:{"7":0,"10":0.00652},N:{"10":0.00652,"11":0},L:{"0":42.69643},S:{"2.5":0.00652},R:{_:"0"},M:{"0":0.63876},Q:{"10.4":0},O:{"0":0.02607},H:{"0":0.22215}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IL.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IL.js index 12989b032f2..cc4e5a6a862 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IL.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IL.js @@ -1 +1 @@ -module.exports={C:{"24":0.00399,"25":0.01197,"26":0.03192,"27":0.00399,"36":0.00399,"52":0.02793,"56":0.00399,"66":0.00399,"72":0.00399,"78":0.01995,"79":0.1197,"80":0.02793,"84":0.01197,"88":0.01995,"89":0.00399,"91":0.01596,"94":0.00798,"95":0.02793,"96":0.50274,"97":0.85386,"98":0.00798,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 67 68 69 70 71 73 74 75 76 77 81 82 83 85 86 87 90 92 93 99 3.5 3.6"},D:{"31":0.04389,"32":0.00798,"38":0.02394,"49":0.0399,"53":0.00798,"55":0.00399,"56":0.00399,"63":0.03192,"65":0.00798,"67":0.00399,"68":0.00798,"69":0.00399,"70":0.00798,"71":0.00798,"72":0.00399,"73":0.03192,"74":0.01197,"75":0.01596,"76":0.01197,"77":0.00798,"78":0.01197,"79":0.07581,"80":0.26733,"81":0.01995,"83":0.01596,"84":0.01197,"85":0.02394,"86":0.03591,"87":0.11172,"88":0.01995,"89":0.0798,"90":0.03192,"91":0.04389,"92":0.04389,"93":0.10773,"94":0.04788,"95":0.05985,"96":0.58254,"97":9.3366,"98":20.66022,"99":0.01197,"100":0.00798,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 54 57 58 59 60 61 62 64 66 101"},F:{"28":0.00399,"77":0.00399,"82":0.14364,"83":0.56259,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01995,"91":0.00798,"92":0.00798,"93":0.00399,"94":0.00798,"95":0.01596,"96":0.06384,"97":0.54264,"98":1.89924,_:"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90"},E:{"4":0,"7":0.00399,"8":0.12768,"13":0.03591,"14":0.09177,"15":0.04389,_:"0 5 6 9 10 11 12 3.1 3.2 5.1 7.1 9.1 10.1","6.1":0.00798,"11.1":0.00798,"12.1":0.01197,"13.1":0.07581,"14.1":0.40698,"15.1":0.17955,"15.2-15.3":0.34713,"15.4":0.00798},G:{"8":0.00267,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00401,"6.0-6.1":0.00134,"7.0-7.1":0.0294,"8.1-8.4":0.01203,"9.0-9.2":0.00134,"9.3":0.06548,"10.0-10.2":0.00535,"10.3":0.07216,"11.0-11.2":0.03742,"11.3-11.4":0.02806,"12.0-12.1":0.04009,"12.2-12.5":0.37016,"13.0-13.1":0.03474,"13.2":0.00935,"13.3":0.06682,"13.4-13.7":0.19778,"14.0-14.4":0.68554,"14.5-14.8":3.06823,"15.0-15.1":1.77599,"15.2-15.3":6.81397,"15.4":0.03608},P:{"4":0.05112,"5.0-5.4":0.01022,"6.2-6.4":0.01022,"7.2-7.4":0.02045,"8.2":0.08049,"9.2":0.08179,"10.1":0.03067,"11.1-11.2":0.28625,"12.0":0.10223,"13.0":0.23513,"14.0":0.35781,"15.0":0.27603,"16.0":5.53076},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.002,"4.2-4.3":0.00334,"4.4":0,"4.4.3-4.4.4":0.01869},A:{"9":0.00798,"10":0.00798,"11":0.29925,_:"6 7 8 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.16825},Q:{"10.4":0.00601},O:{"0":0.05408},H:{"0":0.3072},L:{"0":39.21334},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.0038,"25":0.0038,"26":0.01518,"27":0.0038,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.0038,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00759,"53":0,"54":0,"55":0,"56":0.0038,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.0038,"67":0,"68":0.0038,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00759,"79":0.04934,"80":0.01139,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.0038,"89":0.0038,"90":0,"91":0.00759,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.0038,"98":0.0038,"99":0.0038,"100":0.0038,"101":0.00759,"102":0.02657,"103":0.47438,"104":0.08729,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0.02277,"32":0.0038,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.01139,"39":0,"40":0,"41":0.0038,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01139,"50":0,"51":0,"52":0,"53":0.0038,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.0038,"66":0,"67":0,"68":0.0038,"69":0.0038,"70":0,"71":0.0038,"72":0,"73":0.01898,"74":0.0038,"75":0.0038,"76":0.0038,"77":0,"78":0.0038,"79":0.05313,"80":0.11006,"81":0.00759,"83":0.00759,"84":0.0038,"85":0.01518,"86":0.01139,"87":0.01518,"88":0.0038,"89":0.02277,"90":0.02657,"91":0.03036,"92":0.03036,"93":0.02277,"94":0.02277,"95":0.01139,"96":0.03416,"97":0.01518,"98":0.01518,"99":0.02277,"100":0.02657,"101":0.02657,"102":0.12524,"103":2.87282,"104":7.08906,"105":0.02657,"106":0.0038,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00759,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0038,"64":0.0038,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.0038,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00759,"86":0,"87":0,"88":0.00759,"89":0.21252,"90":0.02277,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.0038,"79":0,"80":0,"81":0,"83":0,"84":0.0038,"85":0.0038,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.0038,"93":0.0038,"94":0,"95":0,"96":0.00759,"97":0,"98":0.0038,"99":0.0038,"100":0.0038,"101":0.02657,"102":0.00759,"103":0.27704,"104":0.73244,"105":0},E:{"4":0,"5":0,"6":0,"7":0.0038,"8":0.06072,"9":0,"10":0,"11":0,"12":0,"13":0.00759,"14":0.01898,"15":0.0038,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0.0038,"7.1":0,"9.1":0.0038,"10.1":0,"11.1":0.0038,"12.1":0.0038,"13.1":0.03036,"14.1":0.06831,"15.1":0.01139,"15.2-15.3":0.01139,"15.4":0.03036,"15.5":0.12903,"15.6":0.23529,"16.0":0.0038},G:{"8":0.00603,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01004,"6.0-6.1":0.00201,"7.0-7.1":0.0442,"8.1-8.4":0.0221,"9.0-9.2":0.00402,"9.3":0.08237,"10.0-10.2":0.00402,"10.3":0.09643,"11.0-11.2":0.02009,"11.3-11.4":0.03616,"12.0-12.1":0.03013,"12.2-12.5":0.43193,"13.0-13.1":0.02009,"13.2":0.01406,"13.3":0.06027,"13.4-13.7":0.18684,"14.0-14.4":0.5585,"14.5-14.8":1.46456,"15.0-15.1":0.25112,"15.2-15.3":0.61877,"15.4":0.8257,"15.5":4.33541,"15.6":10.81039,"16.0":0.14264},P:{"4":0.15361,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.03072,"8.2":0.01024,"9.2":0.06144,"10.1":0.02048,"11.1-11.2":0.12289,"12.0":0.03072,"13.0":0.13313,"14.0":0.13313,"15.0":0.08193,"16.0":0.26626,"17.0":2.4168,"18.0":3.04149},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01262,"4.2-4.3":0.01894,"4.4":0,"4.4.3-4.4.4":0.07259},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.0038,"9":0.0038,"10":0.0038,"11":0.11385,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":55.94023},S:{"2.5":0},R:{_:"0"},M:{"0":0.21718},Q:{"10.4":0},O:{"0":0.04964},H:{"0":0.3231}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IM.js index d0075dfea0d..f7c5c06afb5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IM.js @@ -1 +1 @@ -module.exports={C:{"52":0.27833,"63":0.01953,"70":0.02442,"78":0.00977,"83":0.05371,"84":0.03418,"87":0.15626,"89":0.00977,"91":0.00488,"92":0.0293,"93":0.01465,"95":0.0293,"96":0.95707,"97":1.51861,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 71 72 73 74 75 76 77 79 80 81 82 85 86 88 90 94 98 99 3.5 3.6"},D:{"38":0.02442,"49":0.06836,"65":0.01953,"67":0.00977,"76":0.03418,"77":0.01465,"78":0.0293,"79":0.03906,"81":0.00488,"84":0.01465,"85":0.2002,"86":0.11231,"87":0.08301,"88":0.05371,"89":0.00977,"90":0.03418,"91":0.13184,"92":0.0293,"93":0.0293,"94":0.10743,"95":0.06348,"96":0.85453,"97":6.65065,"98":13.38919,"99":0.00977,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 66 68 69 70 71 72 73 74 75 80 83 100 101"},F:{"76":0.01953,"82":0.23927,"83":0.57619,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.01465,"18":0.02442,"87":0.00977,"90":0.01953,"92":0.01465,"93":0.01953,"94":0.00488,"95":0.03906,"96":0.18067,"97":2.53428,"98":6.70436,_:"12 13 14 15 17 79 80 81 83 84 85 86 88 89 91"},E:{"4":0,"11":0.01953,"12":0.01953,"13":0.12696,"14":0.46389,"15":0.25392,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.0293,"11.1":0.20509,"12.1":0.26368,"13.1":1.20122,"14.1":1.79206,"15.1":1.11332,"15.2-15.3":3.22278},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.38148,"10.0-10.2":0,"10.3":0.34333,"11.0-11.2":0.0088,"11.3-11.4":0.27877,"12.0-12.1":0.04695,"12.2-12.5":1.61689,"13.0-13.1":0.01467,"13.2":0.0088,"13.3":0.05282,"13.4-13.7":0.48125,"14.0-14.4":1.36159,"14.5-14.8":5.23507,"15.0-15.1":3.77665,"15.2-15.3":15.70521,"15.4":0.02348},P:{"4":0.0768,"5.0-5.4":0.01022,"6.2-6.4":0.01022,"7.2-7.4":0.0315,"8.2":0.08049,"9.2":0.05112,"10.1":0.02194,"11.1-11.2":0.01097,"12.0":0.02194,"13.0":0.03291,"14.0":0.04389,"15.0":0.40594,"16.0":4.33374},I:{"0":0,"3":0,"4":0.01944,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00273,"4.4":0,"4.4.3-4.4.4":0.01365},A:{"9":0.00488,"11":0.26857,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.60892},Q:{"10.4":0},O:{"0":0},H:{"0":0.0872},L:{"0":16.28872},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.00519,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.17117,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00519,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0.02075,"84":0.00519,"85":0,"86":0,"87":0,"88":0.00519,"89":0,"90":0,"91":0.03112,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00519,"99":0,"100":0.00519,"101":0.02075,"102":0.05187,"103":1.16708,"104":0.18673,"105":0.00519,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.01037,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.06224,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00519,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.01037,"77":0,"78":0.01037,"79":0.03631,"80":0.0415,"81":0,"83":0,"84":0.01556,"85":0.11411,"86":0.00519,"87":0.07781,"88":0,"89":0.00519,"90":0,"91":0.0415,"92":0.02075,"93":0.02075,"94":0,"95":0.00519,"96":0.00519,"97":0.00519,"98":0.06224,"99":0.07262,"100":0.03112,"101":0.01556,"102":0.29566,"103":2.53644,"104":5.91837,"105":0.03112,"106":0.00519,"107":0.01037,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.00519,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01037,"89":0.26454,"90":0.03112,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00519,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0.00519,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0.01037,"96":0.00519,"97":0.01037,"98":0,"99":0,"100":0,"101":0.03631,"102":0.02075,"103":1.81545,"104":4.36227,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.02075,"14":0.09855,"15":0.02075,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.02594,"11.1":0.01037,"12.1":0.29047,"13.1":0.32159,"14.1":0.38903,"15.1":0.06743,"15.2-15.3":0.05187,"15.4":0.17636,"15.5":1.4368,"15.6":3.97843,"16.0":0.00519},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.0551,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.69939,"10.0-10.2":0.00424,"10.3":0.21194,"11.0-11.2":0.00848,"11.3-11.4":0.02967,"12.0-12.1":0.02543,"12.2-12.5":2.92474,"13.0-13.1":0.00424,"13.2":0,"13.3":0.04663,"13.4-13.7":0.35182,"14.0-14.4":0.49593,"14.5-14.8":2.31012,"15.0-15.1":0.68668,"15.2-15.3":0.75874,"15.4":0.97915,"15.5":7.94341,"15.6":24.55931,"16.0":0.284},P:{"4":0.03252,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01084,"12.0":0.04336,"13.0":0.08671,"14.0":0.02168,"15.0":0.01084,"16.0":0.26014,"17.0":1.25737,"18.0":2.14619},I:{"0":0,"3":0,"4":0.21182,"2.1":0,"2.2":0,"2.3":0.00662,"4.1":0.01324,"4.2-4.3":0.01986,"4.4":0,"4.4.3-4.4.4":0.24492},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.02075,"10":0,"11":0.08818,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":25.42208},S:{"2.5":0},R:{_:"0"},M:{"0":0.55831},Q:{"10.4":0},O:{"0":0},H:{"0":0.07291}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IN.js index f4bb292fdb7..3220aaa2123 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IN.js @@ -1 +1 @@ -module.exports={C:{"42":0.00474,"47":0.00711,"48":0.00237,"52":0.02843,"56":0.00474,"60":0.00237,"66":0.00474,"68":0.00237,"72":0.00711,"78":0.00711,"83":0.00237,"87":0.00237,"88":0.01421,"89":0.00711,"90":0.00711,"91":0.02369,"92":0.00711,"93":0.00474,"94":0.01185,"95":0.02606,"96":0.46906,"97":0.76282,"98":0.05686,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 49 50 51 53 54 55 57 58 59 61 62 63 64 65 67 69 70 71 73 74 75 76 77 79 80 81 82 84 85 86 99 3.5 3.6"},D:{"49":0.02369,"55":0.00237,"56":0.00237,"58":0.00474,"63":0.01421,"64":0.00711,"66":0.00237,"67":0.00474,"68":0.00237,"69":0.00474,"70":0.01658,"71":0.03317,"72":0.00711,"73":0.00474,"74":0.01185,"75":0.00474,"76":0.00474,"77":0.00474,"78":0.00948,"79":0.14925,"80":0.0308,"81":0.01421,"83":0.03554,"84":0.01658,"85":0.01895,"86":0.02606,"87":0.06633,"88":0.01895,"89":0.02606,"90":0.04027,"91":0.04738,"92":0.0687,"93":0.06159,"94":0.07581,"95":0.05923,"96":0.34351,"97":5.42975,"98":12.07716,"99":0.02132,"100":0.01895,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 57 59 60 61 62 65 101"},F:{"80":0.00237,"82":0.04027,"83":0.24164,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00711,"17":0.00237,"18":0.00948,"84":0.00237,"89":0.00237,"92":0.00711,"94":0.00237,"95":0.00474,"96":0.01658,"97":0.23927,"98":0.73202,_:"13 14 15 16 79 80 81 83 85 86 87 88 90 91 93"},E:{"4":0,"13":0.00474,"14":0.02369,"15":0.01658,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 11.1 15.4","5.1":0.00711,"12.1":0.00474,"13.1":0.02132,"14.1":0.0687,"15.1":0.04738,"15.2-15.3":0.09239},G:{"8":0.00096,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00048,"5.0-5.1":0.00024,"6.0-6.1":0.00024,"7.0-7.1":0.00746,"8.1-8.4":0,"9.0-9.2":0.00072,"9.3":0.00721,"10.0-10.2":0.0012,"10.3":0.00818,"11.0-11.2":0.05772,"11.3-11.4":0.00433,"12.0-12.1":0.00649,"12.2-12.5":0.12386,"13.0-13.1":0.02092,"13.2":0.00265,"13.3":0.0113,"13.4-13.7":0.03463,"14.0-14.4":0.15199,"14.5-14.8":0.33092,"15.0-15.1":0.39441,"15.2-15.3":1.22509,"15.4":0.01275},P:{"4":0.22532,"5.0-5.4":0.08172,"6.2-6.4":0.02146,"7.2-7.4":0.12875,"8.2":0.01045,"9.2":0.04292,"10.1":0.0209,"11.1-11.2":0.04292,"12.0":0.02146,"13.0":0.09656,"14.0":0.12875,"15.0":0.10729,"16.0":0.61157},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00416,"4.4":0,"4.4.3-4.4.4":0.01873},A:{"11":0.04264,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.15262},Q:{"10.4":0},O:{"0":1.99932},H:{"0":2.44189},L:{"0":68.05766},S:{"2.5":0.81652}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.00272,"43":0,"44":0,"45":0,"46":0,"47":0.00272,"48":0,"49":0,"50":0,"51":0,"52":0.00545,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00272,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00272,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00272,"89":0,"90":0.00272,"91":0.00817,"92":0,"93":0,"94":0,"95":0.00272,"96":0.00272,"97":0.00272,"98":0.00272,"99":0.00545,"100":0.00545,"101":0.00545,"102":0.01634,"103":0.29681,"104":0.07624,"105":0.00545,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00545,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00545,"64":0.00272,"65":0,"66":0,"67":0,"68":0.00272,"69":0.00272,"70":0.00545,"71":0.00817,"72":0.00272,"73":0.00272,"74":0.01089,"75":0.00272,"76":0,"77":0.00272,"78":0.00272,"79":0.00545,"80":0.01089,"81":0.01089,"83":0.01362,"84":0.00817,"85":0.00817,"86":0.01362,"87":0.02451,"88":0.00545,"89":0.00545,"90":0.00817,"91":0.01089,"92":0.01362,"93":0.00545,"94":0.02451,"95":0.00817,"96":0.02178,"97":0.02178,"98":0.01362,"99":0.02451,"100":0.02451,"101":0.03812,"102":0.05991,"103":1.43502,"104":3.52901,"105":0.01362,"106":0.00272,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00272,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00272,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.00272,"55":0.00272,"56":0.00272,"57":0.00272,"58":0.00817,"60":0.00817,"62":0,"63":0.13615,"64":0.11981,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00272,"71":0.00272,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00272,"86":0,"87":0,"88":0.00272,"89":0.05446,"90":0.00817,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00272,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00272,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00272,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00272,"102":0.00272,"103":0.08441,"104":0.20695,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00272,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.00272,"14.1":0.00817,"15.1":0.00272,"15.2-15.3":0.00272,"15.4":0.00545,"15.5":0.02178,"15.6":0.0354,"16.0":0},G:{"8":0.00214,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00036,"5.0-5.1":0,"6.0-6.1":0.00071,"7.0-7.1":0.01105,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00784,"10.0-10.2":0.00107,"10.3":0.00962,"11.0-11.2":0.00891,"11.3-11.4":0.00463,"12.0-12.1":0.00927,"12.2-12.5":0.14186,"13.0-13.1":0.00713,"13.2":0.00499,"13.3":0.01319,"13.4-13.7":0.03885,"14.0-14.4":0.17394,"14.5-14.8":0.24309,"15.0-15.1":0.1244,"15.2-15.3":0.14008,"15.4":0.16539,"15.5":0.76029,"15.6":1.62644,"16.0":0.06665},P:{"4":0.14502,"5.0-5.4":0,"6.2-6.4":0.01036,"7.2-7.4":0.09322,"8.2":0,"9.2":0.03107,"10.1":0,"11.1-11.2":0.03107,"12.0":0.01036,"13.0":0.05179,"14.0":0.05179,"15.0":0.03107,"16.0":0.10358,"17.0":0.33146,"18.0":0.25896},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01649,"4.4":0,"4.4.3-4.4.4":0.09895},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01089,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":83.41452},S:{"2.5":0.21103},R:{_:"0"},M:{"0":0.16009},Q:{"10.4":0},O:{"0":1.33897},H:{"0":2.10127}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IQ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IQ.js index 83fed8433f3..6adde88e2b8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IQ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IQ.js @@ -1 +1 @@ -module.exports={C:{"30":0.00216,"34":0.00216,"35":0.00216,"43":0.00433,"47":0.00649,"50":0.00216,"52":0.0303,"56":0.00216,"59":0.00216,"68":0.00649,"69":0.01298,"72":0.00433,"78":0.01082,"81":0.00216,"82":0.00216,"84":0.00216,"87":0.00216,"88":0.00649,"89":0.00433,"91":0.00866,"92":0.00649,"93":0.00433,"94":0.00433,"95":0.01082,"96":0.27266,"97":0.46742,"98":0.01082,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 36 37 38 39 40 41 42 44 45 46 48 49 51 53 54 55 57 58 60 61 62 63 64 65 66 67 70 71 73 74 75 76 77 79 80 83 85 86 90 99 3.5 3.6"},D:{"11":0.00433,"31":0.00433,"33":0.00866,"34":0.00216,"37":0.00216,"38":0.04112,"40":0.00433,"41":0.00433,"43":0.06492,"45":0.00433,"46":0.00216,"47":0.00649,"49":0.0303,"50":0.00433,"51":0.00216,"53":0.00866,"55":0.00649,"56":0.00866,"57":0.00216,"58":0.00216,"60":0.00866,"63":0.01731,"64":0.00649,"65":0.00866,"66":0.00649,"67":0.00649,"68":0.01082,"69":0.01298,"70":0.00866,"71":0.00866,"72":0.01082,"73":0.00649,"74":0.00866,"75":0.00649,"76":0.00649,"77":0.00649,"78":0.00649,"79":0.10604,"80":0.01731,"81":0.02164,"83":0.02164,"84":0.00866,"85":0.01082,"86":0.07141,"87":0.03679,"88":0.0238,"89":0.04544,"90":0.01515,"91":0.0303,"92":0.06059,"93":0.26617,"94":0.03246,"95":0.04544,"96":0.3787,"97":3.68746,"98":9.09962,"99":0.00433,"100":0.02164,"101":0.00216,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 35 36 39 42 44 48 52 54 59 61 62"},F:{"28":0.00216,"82":0.09522,"83":0.53018,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00649,"13":0.00216,"14":0.00433,"15":0.00433,"16":0.00649,"17":0.01082,"18":0.0238,"84":0.00866,"85":0.00433,"89":0.00866,"90":0.00216,"91":0.00433,"92":0.01515,"94":0.00433,"95":0.02597,"96":0.01731,"97":0.40467,"98":1.1902,_:"79 80 81 83 86 87 88 93"},E:{"4":0,"13":0.01515,"14":0.11902,"15":0.09522,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1","5.1":0.03462,"9.1":0.00649,"10.1":0.03679,"11.1":0.00216,"12.1":0.00649,"13.1":0.06276,"14.1":0.38303,"15.1":0.2164,"15.2-15.3":0.35706,"15.4":0.00433},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00169,"6.0-6.1":0.00169,"7.0-7.1":0.04574,"8.1-8.4":0,"9.0-9.2":0.02372,"9.3":0.05591,"10.0-10.2":0.01016,"10.3":0.05929,"11.0-11.2":0.0288,"11.3-11.4":0.02202,"12.0-12.1":0.03049,"12.2-12.5":0.84197,"13.0-13.1":0.01694,"13.2":0.00847,"13.3":0.08809,"13.4-13.7":0.25581,"14.0-14.4":0.93006,"14.5-14.8":3.32891,"15.0-15.1":3.03413,"15.2-15.3":8.08594,"15.4":0.05591},P:{"4":0.17381,"5.0-5.4":0.01022,"6.2-6.4":0.01022,"7.2-7.4":0.19426,"8.2":0.08049,"9.2":0.05112,"10.1":0.12073,"11.1-11.2":0.17381,"12.0":0.05112,"13.0":0.26583,"14.0":0.23515,"15.0":0.22493,"16.0":2.90365},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00073,"4.2-4.3":0.00331,"4.4":0,"4.4.3-4.4.4":0.04298},A:{"8":0.00234,"11":0.08205,_:"6 7 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.09403},Q:{"10.4":0},O:{"0":0.70524},H:{"0":0.29674},L:{"0":49.84278},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00205,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00205,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00205,"69":0.0041,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00205,"92":0,"93":0,"94":0,"95":0.00205,"96":0,"97":0.00205,"98":0,"99":0.00205,"100":0.00205,"101":0.00205,"102":0.00614,"103":0.11674,"104":0.02458,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00205,"34":0,"35":0,"36":0,"37":0,"38":0.00205,"39":0,"40":0.00205,"41":0,"42":0,"43":0.01229,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00205,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00205,"57":0,"58":0,"59":0,"60":0.00205,"61":0,"62":0,"63":0.00205,"64":0.00205,"65":0.00205,"66":0,"67":0,"68":0.00205,"69":0.00205,"70":0.00205,"71":0.00205,"72":0,"73":0.00205,"74":0.00205,"75":0,"76":0.00205,"77":0,"78":0.00205,"79":0.01229,"80":0.00205,"81":0.01434,"83":0.00614,"84":0.00205,"85":0.00205,"86":0.00614,"87":0.00614,"88":0.00614,"89":0.01024,"90":0.0041,"91":0.0041,"92":0.01434,"93":0.00205,"94":0.0041,"95":0.01024,"96":0.00819,"97":0.00819,"98":0.00819,"99":0.00614,"100":0.00819,"101":0.01024,"102":0.02867,"103":0.55296,"104":1.59334,"105":0.00614,"106":0.00205,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01024,"64":0.01024,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00205,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.0041,"86":0,"87":0,"88":0.00205,"89":0.10035,"90":0.01229,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.0041,"79":0,"80":0,"81":0,"83":0,"84":0.00205,"85":0,"86":0,"87":0,"88":0,"89":0.00205,"90":0.00205,"91":0,"92":0.0041,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.01638,"102":0.00205,"103":0.11059,"104":0.21299,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.0041,"14":0.01434,"15":0.00614,_:"0","3.1":0,"3.2":0,"5.1":0.01024,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.01024,"14.1":0.02867,"15.1":0.00614,"15.2-15.3":0.00614,"15.4":0.02253,"15.5":0.1065,"15.6":0.14746,"16.0":0.0041},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.08706,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.07491,"10.0-10.2":0,"10.3":0.08706,"11.0-11.2":0.0162,"11.3-11.4":0.01822,"12.0-12.1":0.04252,"12.2-12.5":0.90096,"13.0-13.1":0.01215,"13.2":0.03442,"13.3":0.07289,"13.4-13.7":0.16602,"14.0-14.4":0.52033,"14.5-14.8":1.18643,"15.0-15.1":0.37658,"15.2-15.3":0.57904,"15.4":1.1682,"15.5":5.04332,"15.6":9.5319,"16.0":0.30774},P:{"4":0.16587,"5.0-5.4":0.02073,"6.2-6.4":0.01037,"7.2-7.4":0.19697,"8.2":0,"9.2":0.0311,"10.1":0,"11.1-11.2":0.1555,"12.0":0.04147,"13.0":0.23843,"14.0":0.1555,"15.0":0.10367,"16.0":0.29027,"17.0":1.40986,"18.0":1.7105},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00255,"4.2-4.3":0.01533,"4.4":0,"4.4.3-4.4.4":0.15584},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01229,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":68.794},S:{"2.5":0},R:{_:"0"},M:{"0":0.11133},Q:{"10.4":0},O:{"0":0.34194},H:{"0":0.32372}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IR.js index 24f2909e33e..a88c801e3f7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IR.js @@ -1 +1 @@ -module.exports={C:{"3":0.0057,"24":0.00285,"29":0.0057,"30":0.00285,"31":0.00285,"32":0.00285,"33":0.00855,"38":0.00285,"39":0.00285,"40":0.00285,"41":0.00855,"43":0.00855,"47":0.01426,"48":0.0057,"49":0.0057,"50":0.00285,"52":0.08838,"56":0.0114,"60":0.0057,"65":0.00285,"68":0.0057,"72":0.02566,"77":0.0057,"78":0.01426,"79":0.0057,"80":0.00855,"81":0.0114,"82":0.0057,"83":0.0057,"84":0.00855,"85":0.0057,"86":0.0057,"87":0.0057,"88":0.01426,"89":0.01711,"90":0.00855,"91":0.11119,"92":0.01426,"93":0.01711,"94":0.03706,"95":0.09123,"96":1.62507,"97":2.73126,"98":0.02566,_:"2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 34 35 36 37 42 44 45 46 51 53 54 55 57 58 59 61 62 63 64 66 67 69 70 71 73 74 75 76 99 3.5 3.6"},D:{"29":0.0057,"34":0.03136,"38":0.0114,"48":0.04277,"49":0.02566,"51":0.00285,"56":0.00285,"58":0.0057,"60":0.00285,"62":0.00855,"63":0.01426,"64":0.0057,"66":0.00285,"67":0.0057,"68":0.0057,"69":0.00855,"70":0.00855,"71":0.01711,"72":0.0057,"73":0.0057,"74":0.00855,"75":0.0057,"76":0.0057,"77":0.0057,"78":0.01711,"79":0.02566,"80":0.02566,"81":0.02281,"83":0.03421,"84":0.04562,"85":0.05702,"86":0.09123,"87":0.08553,"88":0.02566,"89":0.04562,"90":0.02566,"91":0.07128,"92":0.06557,"93":0.11404,"94":0.05987,"95":0.05987,"96":0.36208,"97":4.62717,"98":11.73472,"99":0.00855,"100":0.00855,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 47 50 52 53 54 55 57 59 61 65 101"},F:{"64":0.0057,"70":0.00285,"77":0.00855,"78":0.0057,"79":0.01426,"80":0.0057,"81":0.00285,"82":0.07128,"83":0.45046,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 65 66 67 68 69 71 72 73 74 75 76 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01426,"13":0.0057,"14":0.0057,"15":0.0057,"16":0.0057,"17":0.0057,"18":0.03421,"81":0.00285,"84":0.00855,"85":0.00285,"86":0.00285,"89":0.01426,"90":0.00855,"91":0.00285,"92":0.01996,"94":0.00285,"95":0.0057,"96":0.02281,"97":0.17106,"98":0.63862,_:"79 80 83 87 88 93"},E:{"4":0.0057,"13":0.00855,"14":0.01426,"15":0.00855,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 11.1 15.4","5.1":0.23378,"12.1":0.00285,"13.1":0.01711,"14.1":0.03706,"15.1":0.02281,"15.2-15.3":0.03136},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0004,"6.0-6.1":0,"7.0-7.1":0.00316,"8.1-8.4":0,"9.0-9.2":0.00158,"9.3":0.01067,"10.0-10.2":0.00633,"10.3":0.02965,"11.0-11.2":0.02135,"11.3-11.4":0.02214,"12.0-12.1":0.02372,"12.2-12.5":0.41632,"13.0-13.1":0.02174,"13.2":0.01107,"13.3":0.06089,"13.4-13.7":0.12533,"14.0-14.4":0.43332,"14.5-14.8":0.74486,"15.0-15.1":0.82671,"15.2-15.3":1.19083,"15.4":0.00277},P:{"4":0.71431,"5.0-5.4":0.07043,"6.2-6.4":0.07043,"7.2-7.4":0.5634,"8.2":0.08049,"9.2":0.2817,"10.1":0.12073,"11.1-11.2":0.54328,"12.0":0.26158,"13.0":0.7948,"14.0":0.89541,"15.0":0.8451,"16.0":3.8935},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00267,"4.2-4.3":0.02006,"4.4":0,"4.4.3-4.4.4":0.07019},A:{"6":0.01171,"7":0.01464,"8":0.08784,"9":0.02635,"10":0.03807,"11":2.63532,_:"5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.8935},Q:{"10.4":0},O:{"0":0.13581},H:{"0":0.45341},L:{"0":57.08514},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00251,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00251,"48":0.00251,"49":0,"50":0,"51":0,"52":0.01504,"53":0,"54":0,"55":0,"56":0.00251,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.02006,"69":0,"70":0,"71":0,"72":0.00501,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00501,"79":0.00251,"80":0.00251,"81":0.00501,"82":0.00501,"83":0.00251,"84":0.00251,"85":0.00251,"86":0.00251,"87":0.00251,"88":0.00501,"89":0.00501,"90":0.00251,"91":0.02758,"92":0.00251,"93":0.00501,"94":0.05515,"95":0.00752,"96":0.00752,"97":0.00752,"98":0.00752,"99":0.01755,"100":0.01504,"101":0.02507,"102":0.05766,"103":0.80224,"104":0.17298,"105":0.00251,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00251,"39":0,"40":0.00251,"41":0,"42":0,"43":0.00251,"44":0,"45":0,"46":0.00251,"47":0,"48":0,"49":0.00501,"50":0,"51":0.00251,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00251,"59":0,"60":0,"61":0,"62":0.00251,"63":0.00501,"64":0.00251,"65":0,"66":0,"67":0,"68":0,"69":0.00251,"70":0.00251,"71":0.00251,"72":0.00251,"73":0,"74":0.00251,"75":0.00251,"76":0.00251,"77":0.00752,"78":0.00501,"79":0.00752,"80":0.00752,"81":0.02006,"83":0.01755,"84":0.02758,"85":0.02507,"86":0.0351,"87":0.02758,"88":0.00501,"89":0.01003,"90":0.00501,"91":0.01003,"92":0.01003,"93":0.00501,"94":0.00501,"95":0.01254,"96":0.01504,"97":0.01254,"98":0.01003,"99":0.01254,"100":0.02256,"101":0.01755,"102":0.04011,"103":0.80976,"104":2.48945,"105":0.01003,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00251,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.00251,"65":0,"66":0,"67":0,"68":0.00251,"69":0,"70":0.00251,"71":0.00251,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00501,"80":0,"81":0,"82":0,"83":0,"84":0.00251,"85":0.00251,"86":0.00251,"87":0,"88":0.00251,"89":0.06769,"90":0.01254,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00251,"15":0,"16":0,"17":0,"18":0.00752,"79":0,"80":0,"81":0,"83":0,"84":0.00251,"85":0,"86":0.00251,"87":0,"88":0,"89":0.00251,"90":0.00251,"91":0,"92":0.00752,"93":0,"94":0,"95":0,"96":0.00251,"97":0,"98":0,"99":0.00251,"100":0,"101":0.00251,"102":0.00251,"103":0.05014,"104":0.12786,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00251,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.13287,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.00251,"14.1":0.00251,"15.1":0.00251,"15.2-15.3":0,"15.4":0.00251,"15.5":0.00752,"15.6":0.01003,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00204,"8.1-8.4":0,"9.0-9.2":0.00068,"9.3":0.00679,"10.0-10.2":0.00407,"10.3":0.02782,"11.0-11.2":0.01832,"11.3-11.4":0.01493,"12.0-12.1":0.03257,"12.2-12.5":0.53941,"13.0-13.1":0.02375,"13.2":0.01153,"13.3":0.06853,"13.4-13.7":0.12281,"14.0-14.4":0.4356,"14.5-14.8":0.53873,"15.0-15.1":0.36911,"15.2-15.3":0.46478,"15.4":0.59234,"15.5":1.66166,"15.6":1.8055,"16.0":0.04071},P:{"4":0.42651,"5.0-5.4":0.04062,"6.2-6.4":0.05078,"7.2-7.4":0.47729,"8.2":0.07109,"9.2":0.21326,"10.1":0.08124,"11.1-11.2":0.38589,"12.0":0.17264,"13.0":0.51791,"14.0":0.69055,"15.0":0.34527,"16.0":1.06629,"17.0":2.81296,"18.0":1.59435},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00178,"4.2-4.3":0.01207,"4.4":0,"4.4.3-4.4.4":0.04367},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00251,"9":0.00251,"10":0,"11":0.53399,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":74.04197},S:{"2.5":0},R:{_:"0"},M:{"0":1.09398},Q:{"10.4":0},O:{"0":0.05994},H:{"0":0.42563}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IS.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IS.js index 55259866046..81d43c069b1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IS.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IS.js @@ -1 +1 @@ -module.exports={C:{"52":0.04215,"76":0.00602,"78":0.12044,"91":0.12646,"92":0.00602,"93":0.00602,"94":0.01807,"95":0.04215,"96":1.47539,"97":2.74001,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 77 79 80 81 82 83 84 85 86 87 88 89 90 98 99 3.5 3.6"},D:{"44":0.00602,"45":0.00602,"49":0.01807,"51":0.01807,"65":0.03011,"66":0.02409,"67":0.01807,"70":0.01204,"77":0.01204,"78":0.01807,"79":0.1084,"80":0.00602,"81":0.00602,"83":0.01204,"84":0.01204,"85":0.0542,"86":0.04818,"87":0.25292,"88":0.03011,"89":0.10237,"90":0.03613,"91":0.03011,"92":0.03613,"93":0.08431,"94":0.04215,"95":0.20475,"96":0.98761,"97":12.11626,"98":22.46206,"99":0.01807,"100":0.00602,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 46 47 48 50 52 53 54 55 56 57 58 59 60 61 62 63 64 68 69 71 72 73 74 75 76 101"},F:{"28":0.00602,"82":0.4095,"83":1.18031,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.01204,"18":0.00602,"89":0.01204,"91":0.00602,"92":0.01204,"95":0.01807,"96":0.04818,"97":1.07794,"98":4.01667,_:"12 13 14 15 16 79 80 81 83 84 85 86 87 88 90 93 94"},E:{"4":0,"9":0.02409,"12":0.01807,"13":0.07226,"14":0.62629,"15":0.73468,_:"0 5 6 7 8 10 11 3.1 3.2 6.1 7.1 9.1","5.1":0.00602,"10.1":0.01204,"11.1":0.25292,"12.1":0.18668,"13.1":0.76479,"14.1":2.52924,"15.1":1.16225,"15.2-15.3":2.52322,"15.4":0.01204},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00782,"8.1-8.4":0.00586,"9.0-9.2":0.00782,"9.3":0.02931,"10.0-10.2":0.00195,"10.3":0.08011,"11.0-11.2":0.07816,"11.3-11.4":0.00977,"12.0-12.1":0.05862,"12.2-12.5":0.34976,"13.0-13.1":0.00391,"13.2":0.00391,"13.3":0.03322,"13.4-13.7":0.17586,"14.0-14.4":0.65849,"14.5-14.8":4.22449,"15.0-15.1":2.70821,"15.2-15.3":11.02627,"15.4":0.06448},P:{"4":0.05314,"5.0-5.4":0.08172,"6.2-6.4":0.01063,"7.2-7.4":0.01045,"8.2":0.01045,"9.2":0.04181,"10.1":0.0209,"11.1-11.2":0.02126,"12.0":0.02072,"13.0":0.03189,"14.0":0.04251,"15.0":0.11691,"16.0":3.15667},I:{"0":0,"3":0.0019,"4":0.01395,"2.1":0.0019,"2.2":0.00888,"2.3":0.00888,"4.1":0.00634,"4.2-4.3":0.01585,"4.4":0,"4.4.3-4.4.4":0.07356},A:{"8":0.03011,"9":0.01204,"10":0.00602,"11":0.13851,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00796},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.36598},Q:{"10.4":0},O:{"0":0.01591},H:{"0":0.12428},L:{"0":16.34459},S:{"2.5":0.01989}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00543,"39":0.00543,"40":0.00543,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01628,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00543,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.03257,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.05971,"92":0,"93":0,"94":0,"95":0.01628,"96":0,"97":0.00543,"98":0.01086,"99":0.01086,"100":0.00543,"101":0.01086,"102":0.08142,"103":1.85095,"104":0.31482,"105":0.00543,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00543,"39":0,"40":0,"41":0,"42":0,"43":0.00543,"44":0.01086,"45":0.00543,"46":0.00543,"47":0.00543,"48":0,"49":0.01086,"50":0,"51":0.00543,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.01086,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.01086,"66":0,"67":0.00543,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00543,"74":0,"75":0,"76":0,"77":0.00543,"78":0.00543,"79":0.01628,"80":0.00543,"81":0.00543,"83":0.00543,"84":0.01628,"85":0.02171,"86":0,"87":0.07056,"88":0.00543,"89":0.00543,"90":0.00543,"91":0.01086,"92":0.01086,"93":0,"94":0.01086,"95":0.02714,"96":0.02714,"97":0.00543,"98":0.07056,"99":0.03257,"100":0.04342,"101":0.15198,"102":0.28226,"103":4.74407,"104":10.72573,"105":0.02171,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01628,"89":0.84134,"90":0.08142,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00543,"15":0,"16":0,"17":0,"18":0.00543,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0.00543,"95":0,"96":0,"97":0,"98":0,"99":0.00543,"100":0.00543,"101":0.00543,"102":0.01628,"103":0.80334,"104":2.6163,"105":0.01628},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0.01086,"10":0,"11":0,"12":0,"13":0.01628,"14":0.10313,"15":0.04342,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.03257,"11.1":0.04342,"12.1":0.07056,"13.1":0.29854,"14.1":0.45052,"15.1":0.10313,"15.2-15.3":0.09228,"15.4":0.30397,"15.5":0.87391,"15.6":1.60126,"16.0":0.01086},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01252,"8.1-8.4":0.02503,"9.0-9.2":0,"9.3":0.08762,"10.0-10.2":0,"10.3":0.0751,"11.0-11.2":0.12517,"11.3-11.4":0.01878,"12.0-12.1":0.04381,"12.2-12.5":0.46626,"13.0-13.1":0.00626,"13.2":0,"13.3":0.04068,"13.4-13.7":0.1815,"14.0-14.4":0.25973,"14.5-14.8":1.61783,"15.0-15.1":0.30354,"15.2-15.3":0.55388,"15.4":0.95443,"15.5":7.42889,"15.6":18.87577,"16.0":0.20027},P:{"4":0.04123,"5.0-5.4":0,"6.2-6.4":0.01031,"7.2-7.4":0,"8.2":0,"9.2":0.01031,"10.1":0.02061,"11.1-11.2":0.01031,"12.0":0,"13.0":0.03092,"14.0":0.02061,"15.0":0.01031,"16.0":0.07215,"17.0":1.63884,"18.0":2.22635},I:{"0":0,"3":0.00448,"4":0.03361,"2.1":0.00448,"2.2":0.01569,"2.3":0.02017,"4.1":0.02017,"4.2-4.3":0.03809,"4.4":0,"4.4.3-4.4.4":0.14789},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0.00543,"8":0.038,"9":0.00543,"10":0.00543,"11":0.04885,"5.5":0},J:{"7":0,"10":0.00457},N:{"10":0.01143,"11":0.01143},L:{"0":32.50843},S:{"2.5":0.01829},R:{_:"0"},M:{"0":0.41148},Q:{"10.4":0},O:{"0":0.02743},H:{"0":0.17747}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IT.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IT.js index 76cf0d914a8..70e5c0ec6a8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IT.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/IT.js @@ -1 +1 @@ -module.exports={C:{"48":0.00983,"52":0.10317,"56":0.00983,"59":0.00983,"66":0.00491,"68":0.00983,"72":0.00491,"78":0.09335,"82":0.00491,"84":0.00491,"87":0.02948,"88":0.01965,"89":0.00983,"91":0.07861,"92":0.00983,"93":0.01474,"94":0.08843,"95":0.05896,"96":1.46899,"97":2.37789,"98":0.01474,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 57 58 60 61 62 63 64 65 67 69 70 71 73 74 75 76 77 79 80 81 83 85 86 90 99 3.5 3.6"},D:{"38":0.00983,"49":0.12774,"60":0.01474,"63":0.01474,"65":0.01474,"66":0.0737,"67":0.01965,"68":0.00491,"69":0.25056,"70":0.00491,"71":0.00983,"72":0.00491,"74":0.02948,"75":0.00983,"76":0.00983,"77":0.01965,"78":0.00983,"79":0.05896,"80":0.03439,"81":0.02948,"83":0.01965,"84":0.03439,"85":0.03439,"86":0.0737,"87":0.113,"88":0.03439,"89":0.06387,"90":0.03439,"91":0.04422,"92":0.07861,"93":0.2653,"94":0.08843,"95":0.06387,"96":0.45691,"97":9.68352,"98":21.29786,"99":0.00983,"100":0.00983,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 61 62 64 73 101"},F:{"46":0.00491,"80":0.00491,"82":0.23091,"83":0.89417,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"13":0.00491,"16":0.00491,"17":0.00983,"18":0.01965,"90":0.00491,"91":0.00491,"92":0.00983,"94":0.00983,"95":0.02457,"96":0.04913,"97":0.88434,"98":3.1001,_:"12 14 15 79 80 81 83 84 85 86 87 88 89 93"},E:{"4":0,"11":0.00491,"12":0.00983,"13":0.04913,"14":0.38321,"15":0.21617,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1","9.1":0.00983,"10.1":0.00983,"11.1":0.06387,"12.1":0.08843,"13.1":0.3783,"14.1":0.85978,"15.1":0.54534,"15.2-15.3":1.15456,"15.4":0.01474},G:{"8":0.00411,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00411,"7.0-7.1":0.00548,"8.1-8.4":0.00685,"9.0-9.2":0.00685,"9.3":0.08499,"10.0-10.2":0.00274,"10.3":0.08362,"11.0-11.2":0.04798,"11.3-11.4":0.0425,"12.0-12.1":0.02605,"12.2-12.5":0.41537,"13.0-13.1":0.0329,"13.2":0.01371,"13.3":0.05895,"13.4-13.7":0.19192,"14.0-14.4":0.68817,"14.5-14.8":2.38254,"15.0-15.1":2.17005,"15.2-15.3":7.38202,"15.4":0.05346},P:{"4":0.09425,"5.0-5.4":0.01022,"6.2-6.4":0.01022,"7.2-7.4":0.02045,"8.2":0.08049,"9.2":0.03142,"10.1":0.03067,"11.1-11.2":0.12567,"12.0":0.03142,"13.0":0.13614,"14.0":0.1885,"15.0":0.17803,"16.0":2.78565},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00199,"4.2-4.3":0.00498,"4.4":0,"4.4.3-4.4.4":0.03882},A:{"9":0.00497,"11":0.40281,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.30013},Q:{"10.4":0},O:{"0":0.12718},H:{"0":0.22635},L:{"0":33.17532},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00376,"48":0.00751,"49":0,"50":0,"51":0,"52":0.03381,"53":0,"54":0,"55":0,"56":0.00376,"57":0,"58":0,"59":0.00376,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00376,"67":0,"68":0.00376,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.02254,"79":0,"80":0.00376,"81":0.00376,"82":0,"83":0,"84":0.00376,"85":0,"86":0,"87":0.00376,"88":0.00376,"89":0.00376,"90":0,"91":0.03006,"92":0,"93":0.00376,"94":0.03381,"95":0.00751,"96":0.00751,"97":0.00376,"98":0.00376,"99":0.00751,"100":0.01127,"101":0.01503,"102":0.06387,"103":1.05947,"104":0.22166,"105":0.00376,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00376,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.03006,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00376,"61":0,"62":0,"63":0.04133,"64":0,"65":0.00376,"66":0.04133,"67":0.00751,"68":0.00376,"69":0.03381,"70":0.00376,"71":0,"72":0.00376,"73":0.00376,"74":0.01879,"75":0.00376,"76":0.00376,"77":0.00376,"78":0.00376,"79":0.03757,"80":0.00751,"81":0.0263,"83":0.01127,"84":0.01127,"85":0.01879,"86":0.01879,"87":0.03757,"88":0.00751,"89":0.02254,"90":0.00751,"91":0.00751,"92":0.05636,"93":0.00376,"94":0.00751,"95":0.01127,"96":0.0263,"97":0.01503,"98":0.01879,"99":0.01503,"100":0.03006,"101":0.03006,"102":0.0789,"103":2.3331,"104":5.63926,"105":0.02254,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00376,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00376,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00376,"64":0.00376,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00376,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.01503,"86":0,"87":0,"88":0.00751,"89":0.26299,"90":0.02254,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00376,"16":0.00376,"17":0.00376,"18":0.00376,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00376,"93":0,"94":0,"95":0.00376,"96":0,"97":0.00376,"98":0.00376,"99":0.00376,"100":0.00751,"101":0.01503,"102":0.01127,"103":0.33437,"104":0.92047,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01127,"14":0.06011,"15":0.02254,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00376,"10.1":0.00376,"11.1":0.02254,"12.1":0.02254,"13.1":0.09017,"14.1":0.13901,"15.1":0.0263,"15.2-15.3":0.03006,"15.4":0.08265,"15.5":0.29305,"15.6":0.48841,"16.0":0.00751},G:{"8":0.00239,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00239,"6.0-6.1":0,"7.0-7.1":0.01197,"8.1-8.4":0.00718,"9.0-9.2":0.00958,"9.3":0.13169,"10.0-10.2":0.00479,"10.3":0.11493,"11.0-11.2":0.02873,"11.3-11.4":0.05507,"12.0-12.1":0.04549,"12.2-12.5":0.61056,"13.0-13.1":0.02394,"13.2":0.01676,"13.3":0.07901,"13.4-13.7":0.20831,"14.0-14.4":0.61535,"14.5-14.8":1.41506,"15.0-15.1":0.45971,"15.2-15.3":0.62971,"15.4":1.09421,"15.5":5.69135,"15.6":12.45297,"16.0":0.21549},P:{"4":0.13369,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0.02057,"10.1":0.02057,"11.1-11.2":0.07198,"12.0":0.03085,"13.0":0.07198,"14.0":0.1234,"15.0":0.0617,"16.0":0.19539,"17.0":1.52196,"18.0":1.97443},I:{"0":0,"3":0,"4":0.0243,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0243,"4.2-4.3":0.05832,"4.4":0,"4.4.3-4.4.4":0.15065},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00376,"9":0.00376,"10":0,"11":0.09017,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":54.62337},S:{"2.5":0},R:{_:"0"},M:{"0":0.4058},Q:{"10.4":0},O:{"0":0.12486},H:{"0":0.2837}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JE.js index ca33e7ffd0c..5db830a2fb8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JE.js @@ -1 +1 @@ -module.exports={C:{"52":0.00965,"60":0.00482,"66":0.0193,"78":0.00965,"83":0.00482,"91":0.01447,"96":0.78631,"97":1.10952,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 84 85 86 87 88 89 90 92 93 94 95 98 99 3.5 3.6"},D:{"49":0.05306,"65":0.03859,"67":0.0193,"72":0.1013,"78":0.03859,"79":0.01447,"80":0.06754,"83":0.00965,"87":0.08683,"88":0.00965,"89":0.02412,"90":0.02412,"91":0.01447,"92":0.04342,"93":0.0193,"94":0.06271,"95":0.05306,"96":0.2605,"97":6.51722,"98":14.86274,"101":0.00482,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 66 68 69 70 71 73 74 75 76 77 81 84 85 86 99 100"},F:{"82":0.19778,"83":0.21226,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00482,"18":0.01447,"83":0.00482,"92":0.01447,"94":0.00965,"95":0.03859,"96":0.11095,"97":1.87171,"98":6.20849,_:"12 13 14 16 17 79 80 81 84 85 86 87 88 89 90 91 93"},E:{"4":0,"11":0.03859,"12":0.00965,"13":0.1206,"14":1.35072,"15":0.43898,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1","9.1":0.01447,"10.1":0.00965,"11.1":0.04342,"12.1":0.35215,"13.1":0.91656,"14.1":3.32374,"15.1":1.31695,"15.2-15.3":3.24655,"15.4":0.00965},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.29374,"10.0-10.2":0,"10.3":0.60164,"11.0-11.2":0.00708,"11.3-11.4":0.05663,"12.0-12.1":0.01062,"12.2-12.5":1.27407,"13.0-13.1":0,"13.2":0,"13.3":0.08848,"13.4-13.7":0.2442,"14.0-14.4":0.78921,"14.5-14.8":7.65502,"15.0-15.1":5.06795,"15.2-15.3":19.23841,"15.4":0.03539},P:{"4":0.26968,"5.0-5.4":0.01022,"6.2-6.4":0.01022,"7.2-7.4":0.21819,"8.2":0.08049,"9.2":0.03236,"10.1":0.03067,"11.1-11.2":0.02157,"12.0":0.01113,"13.0":0.38834,"14.0":0.04315,"15.0":0.09708,"16.0":2.86936},I:{"0":0,"3":0,"4":0.00269,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.0009,"4.4":0,"4.4.3-4.4.4":0.01194},A:{"11":1.45202,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.18116},Q:{"10.4":0},O:{"0":0},H:{"0":0.0049},L:{"0":12.51737},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0.00475,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0.00475,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00951,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00475,"101":0,"102":0.03328,"103":0.93178,"104":0.12836,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00951,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00475,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00951,"78":0,"79":0.00475,"80":0.03803,"81":0,"83":0.01426,"84":0.00951,"85":0,"86":0,"87":0.02377,"88":0,"89":0,"90":0.02852,"91":0.00475,"92":0,"93":0,"94":0.00951,"95":0.00475,"96":0.00475,"97":0,"98":0.01426,"99":0.02377,"100":0.03328,"101":0.0618,"102":0.09508,"103":2.03947,"104":5.29596,"105":0.01902,"106":0.00951,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.00475,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.03328,"78":0,"79":0.00475,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01426,"89":0.25196,"90":0.00951,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00475,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00475,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.02377,"101":0.03803,"102":0.00475,"103":1.32637,"104":3.36583,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00475,"13":0.01426,"14":0.27098,"15":0.02852,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00951,"10.1":0,"11.1":0.02852,"12.1":0.05229,"13.1":0.13787,"14.1":0.50392,"15.1":0.03803,"15.2-15.3":0.07606,"15.4":0.32803,"15.5":1.32637,"15.6":2.98076,"16.0":0.00951},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.40715,"7.0-7.1":0,"8.1-8.4":0.00993,"9.0-9.2":0.04469,"9.3":0.56604,"10.0-10.2":0.0149,"10.3":0.98313,"11.0-11.2":0.0149,"11.3-11.4":0.26316,"12.0-12.1":0.00993,"12.2-12.5":2.22941,"13.0-13.1":0,"13.2":0,"13.3":0.06951,"13.4-13.7":0.22344,"14.0-14.4":0.83417,"14.5-14.8":2.48264,"15.0-15.1":0.50646,"15.2-15.3":0.68024,"15.4":1.30091,"15.5":9.65749,"15.6":29.14128,"16.0":0.20854},P:{"4":0.10913,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01091,"12.0":0.01091,"13.0":0.04365,"14.0":0.01091,"15.0":0.01091,"16.0":0.06548,"17.0":1.76785,"18.0":2.59722},I:{"0":0,"3":0,"4":0.00337,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00337,"4.4":0,"4.4.3-4.4.4":0.42736},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.52294,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":21.5554},S:{"2.5":0},R:{_:"0"},M:{"0":0.24656},Q:{"10.4":0},O:{"0":0.01049},H:{"0":0.04967}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JM.js index b92ee5729f3..58805356667 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JM.js @@ -1 +1 @@ -module.exports={C:{"52":0.02066,"57":0.00344,"73":0.06197,"78":0.04132,"86":0.00344,"87":0.01033,"88":0.00689,"89":0.00689,"91":0.00689,"94":0.00689,"95":0.01033,"96":0.36496,"97":0.57842,"98":0.00689,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 79 80 81 82 83 84 85 90 92 93 99 3.5 3.6"},D:{"11":0.00344,"47":0.01033,"49":0.01722,"53":0.00689,"55":0.00344,"60":0.00344,"61":0.00344,"63":0.00689,"65":0.00689,"68":0.00689,"69":0.01722,"70":0.00344,"73":0.01722,"74":0.01377,"75":0.03099,"76":0.0723,"77":0.02066,"78":0.00344,"79":0.0482,"80":0.02754,"81":0.03443,"83":0.04132,"84":0.0241,"85":0.01377,"86":0.0241,"87":0.05853,"88":0.0241,"89":0.01377,"90":0.02066,"91":0.05853,"92":0.03443,"93":0.20314,"94":0.0723,"95":0.07919,"96":0.3202,"97":7.2062,"98":14.38141,"99":0.03787,"100":0.04132,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 50 51 52 54 56 57 58 59 62 64 66 67 71 72 101"},F:{"28":0.00344,"82":0.14116,"83":0.68516,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01377,"13":0.00689,"15":0.00689,"16":0.00689,"17":0.00689,"18":0.02066,"84":0.00689,"85":0.00344,"87":0.00689,"89":0.01377,"90":0.00344,"92":0.01377,"94":0.00689,"95":0.02754,"96":0.06886,"97":1.07422,"98":3.26741,_:"14 79 80 81 83 86 88 91 93"},E:{"4":0,"12":0.00689,"13":0.01377,"14":0.07919,"15":0.0723,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 9.1","5.1":0.00689,"10.1":0.02066,"11.1":0.00689,"12.1":0.01377,"13.1":0.12739,"14.1":0.36496,"15.1":0.19281,"15.2-15.3":0.44759,"15.4":0.00689},G:{"8":0.01007,"3.2":0.00604,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00302,"6.0-6.1":0.00101,"7.0-7.1":0.09868,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.07955,"10.0-10.2":0,"10.3":0.04733,"11.0-11.2":0.04229,"11.3-11.4":0.01007,"12.0-12.1":0.01813,"12.2-12.5":0.37459,"13.0-13.1":0.02215,"13.2":0.00503,"13.3":0.03927,"13.4-13.7":0.1158,"14.0-14.4":0.38768,"14.5-14.8":1.70477,"15.0-15.1":1.77929,"15.2-15.3":5.25026,"15.4":0.07149},P:{"4":0.18702,"5.0-5.4":0.01022,"6.2-6.4":0.01022,"7.2-7.4":0.21819,"8.2":0.08049,"9.2":0.03117,"10.1":0.03067,"11.1-11.2":0.13507,"12.0":0.02078,"13.0":0.13507,"14.0":0.15585,"15.0":0.17663,"16.0":2.51434},I:{"0":0,"3":0,"4":0.00131,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00079,"4.4":0,"4.4.3-4.4.4":0.01102},A:{"8":0.01906,"10":0.00762,"11":0.08005,_:"6 7 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.01312},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.09837},Q:{"10.4":0},O:{"0":0.37381},H:{"0":0.22351},L:{"0":30.19569},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00392,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.02352,"74":0,"75":0,"76":0,"77":0,"78":0.00784,"79":0.00784,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00392,"87":0,"88":0.00392,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00392,"99":0.00392,"100":0,"101":0.00392,"102":0.00784,"103":0.25088,"104":0.06664,"105":0.00392,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01568,"50":0,"51":0,"52":0,"53":0.00392,"54":0,"55":0,"56":0.00392,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.01176,"67":0,"68":0.00392,"69":0.00392,"70":0.00392,"71":0,"72":0,"73":0.02352,"74":0.00784,"75":0.01176,"76":0.07056,"77":0.00392,"78":0,"79":0.03528,"80":0.00392,"81":0.02352,"83":0.03136,"84":0.00784,"85":0,"86":0.00784,"87":0.01568,"88":0.00392,"89":0.01176,"90":0.00784,"91":0.0196,"92":0.01176,"93":0.098,"94":0.00392,"95":0.01568,"96":0.02352,"97":0.01176,"98":0.02352,"99":0.02744,"100":0.03136,"101":0.06272,"102":0.09408,"103":2.85376,"104":6.29552,"105":0.04312,"106":0.0196,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00392,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00392,"64":0.00392,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00784,"89":0.30184,"90":0.03136,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00392,"13":0,"14":0,"15":0.00392,"16":0,"17":0,"18":0.00392,"79":0,"80":0,"81":0,"83":0,"84":0.00392,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00392,"93":0,"94":0.00392,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.02352,"102":0.00392,"103":0.39984,"104":1.0192,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00392,"14":0.01176,"15":0.00392,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00392,"12.1":0.00784,"13.1":0.06272,"14.1":0.04704,"15.1":0.01176,"15.2-15.3":0.01568,"15.4":0.04312,"15.5":0.14504,"15.6":0.28224,"16.0":0.00392},G:{"8":0,"3.2":0.00365,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00365,"6.0-6.1":0,"7.0-7.1":0.16961,"8.1-8.4":0.01641,"9.0-9.2":0,"9.3":0.12037,"10.0-10.2":0,"10.3":0.10213,"11.0-11.2":0.09848,"11.3-11.4":0.01277,"12.0-12.1":0.02918,"12.2-12.5":0.59453,"13.0-13.1":0.01094,"13.2":0.00365,"13.3":0.03283,"13.4-13.7":0.10942,"14.0-14.4":0.34833,"14.5-14.8":0.77326,"15.0-15.1":0.24438,"15.2-15.3":0.5307,"15.4":0.59818,"15.5":3.94835,"15.6":10.25113,"16.0":0.22614},P:{"4":0.2036,"5.0-5.4":0.01072,"6.2-6.4":0,"7.2-7.4":0.22503,"8.2":0,"9.2":0.02143,"10.1":0,"11.1-11.2":0.13931,"12.0":0.01072,"13.0":0.10716,"14.0":0.09644,"15.0":0.07501,"16.0":0.2036,"17.0":1.66095,"18.0":1.75739},I:{"0":0,"3":0,"4":0.03233,"2.1":0,"2.2":0,"2.3":0,"4.1":0.03233,"4.2-4.3":0.09699,"4.4":0,"4.4.3-4.4.4":1.00226},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00784,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":60.4328},S:{"2.5":0},R:{_:"0"},M:{"0":0.10336},Q:{"10.4":0},O:{"0":0.38304},H:{"0":0.17844}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JO.js index d2051cf7c17..65a2abe5a82 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JO.js @@ -1 +1 @@ -module.exports={C:{"34":0.01065,"47":0.00799,"52":0.01065,"63":0.00799,"78":0.01597,"84":0.01065,"88":0.00532,"89":0.00532,"90":0.00266,"91":0.01065,"92":0.00532,"94":0.02396,"95":0.01065,"96":0.49247,"97":0.64154,"98":0.00532,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 87 93 99 3.5 3.6"},D:{"11":0.01065,"32":0.00266,"38":0.00532,"43":0.00266,"49":0.02662,"51":0.00266,"55":0.00799,"63":0.00532,"65":0.0213,"67":0.00266,"69":0.01065,"70":0.00799,"71":0.01331,"73":0.00266,"74":0.00532,"75":0.00532,"76":0.00532,"77":0.00266,"78":0.01863,"79":0.04525,"80":0.01863,"81":0.01331,"83":0.01863,"84":0.01065,"85":0.01065,"86":0.03461,"87":0.05058,"88":0.03727,"89":0.04259,"90":0.01863,"91":0.04792,"92":0.06655,"93":0.04525,"94":0.04259,"95":0.04792,"96":0.33275,"97":5.70999,"98":12.91336,"99":0.01597,"100":0.01597,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 37 39 40 41 42 44 45 46 47 48 50 52 53 54 56 57 58 59 60 61 62 64 66 68 72 101"},F:{"28":0.00266,"78":0.00266,"82":0.27152,"83":0.61758,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00532,"14":0.00266,"18":0.01597,"85":0.00266,"89":0.00266,"90":0.00266,"91":0.00266,"92":0.01065,"95":0.00799,"96":0.01331,"97":0.38333,"98":1.54928,_:"13 15 16 17 79 80 81 83 84 86 87 88 93 94"},E:{"4":0,"13":0.01065,"14":0.12511,"15":0.09051,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.01065,"12.1":0.01597,"13.1":0.10914,"14.1":0.34074,"15.1":0.16238,"15.2-15.3":0.22893,"15.4":0.00266},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00126,"6.0-6.1":0.00126,"7.0-7.1":0.01885,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.05153,"10.0-10.2":0.00377,"10.3":0.03896,"11.0-11.2":0.00754,"11.3-11.4":0.02262,"12.0-12.1":0.02137,"12.2-12.5":0.55178,"13.0-13.1":0.01885,"13.2":0.01006,"13.3":0.04525,"13.4-13.7":0.22624,"14.0-14.4":0.74408,"14.5-14.8":2.67844,"15.0-15.1":2.14552,"15.2-15.3":5.94637,"15.4":0.02891},P:{"4":0.09181,"5.0-5.4":0.01022,"6.2-6.4":0.01022,"7.2-7.4":0.09181,"8.2":0.08049,"9.2":0.0306,"10.1":0.03067,"11.1-11.2":0.14281,"12.0":0.0408,"13.0":0.14281,"14.0":0.17342,"15.0":0.15302,"16.0":2.24423},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.24782,"4.2-4.3":0.30978,"4.4":0,"4.4.3-4.4.4":4.33685},A:{"11":0.07986,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.19079},Q:{"10.4":0},O:{"0":0.29352},H:{"0":0.24315},L:{"0":52.07698},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00292,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00583,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00875,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.00583,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00292,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00292,"92":0,"93":0,"94":0,"95":0.00292,"96":0,"97":0,"98":0.00292,"99":0.00583,"100":0,"101":0.00292,"102":0.01458,"103":0.2711,"104":0.06122,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00292,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00292,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00292,"48":0,"49":0.00583,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00292,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00292,"64":0,"65":0.00292,"66":0,"67":0,"68":0,"69":0.00292,"70":0.00292,"71":0.00292,"72":0,"73":0,"74":0.00292,"75":0.00292,"76":0.00292,"77":0.00292,"78":0.00583,"79":0.01458,"80":0.00292,"81":0.01749,"83":0.00583,"84":0.00583,"85":0.00583,"86":0.01458,"87":0.00875,"88":0.01166,"89":0.01458,"90":0.00583,"91":0.01166,"92":0.03498,"93":0.00292,"94":0.00583,"95":0.00583,"96":0.01458,"97":0.01458,"98":0.03207,"99":0.01166,"100":0.03207,"101":0.02332,"102":0.06996,"103":1.41378,"104":4.05477,"105":0.02041,"106":0.00292,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00292,"64":0.00292,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00292,"80":0,"81":0,"82":0.00583,"83":0.00583,"84":0.01458,"85":0.00583,"86":0.00875,"87":0.00583,"88":0.01749,"89":0.14575,"90":0.00583,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00292,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00292,"90":0,"91":0,"92":0.00292,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00292,"100":0.00292,"101":0.01458,"102":0.00292,"103":0.17199,"104":0.49555,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01749,"14":0.01458,"15":0.00583,_:"0","3.1":0,"3.2":0,"5.1":0.00583,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00292,"13.1":0.01749,"14.1":0.04373,"15.1":0.01166,"15.2-15.3":0.00583,"15.4":0.02915,"15.5":0.11952,"15.6":0.13701,"16.0":0.00292},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00328,"6.0-6.1":0.00164,"7.0-7.1":0.02628,"8.1-8.4":0.00164,"9.0-9.2":0,"9.3":0.06076,"10.0-10.2":0.00164,"10.3":0.09032,"11.0-11.2":0.00821,"11.3-11.4":0.01478,"12.0-12.1":0.01478,"12.2-12.5":0.61092,"13.0-13.1":0.01314,"13.2":0.00493,"13.3":0.02792,"13.4-13.7":0.13959,"14.0-14.4":0.55344,"14.5-14.8":1.12165,"15.0-15.1":0.30546,"15.2-15.3":0.48446,"15.4":0.85068,"15.5":4.07769,"15.6":7.88606,"16.0":0.11824},P:{"4":0.13203,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.12188,"8.2":0,"9.2":0.03047,"10.1":0,"11.1-11.2":0.12188,"12.0":0.02031,"13.0":0.10157,"14.0":0.13203,"15.0":0.09141,"16.0":0.21329,"17.0":1.13753,"18.0":1.41176},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.03485,"4.2-4.3":0.17424,"4.4":0,"4.4.3-4.4.4":1.11512},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01749,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":68.80028},S:{"2.5":0},R:{_:"0"},M:{"0":0.18421},Q:{"10.4":0},O:{"0":0.26215},H:{"0":0.24147}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JP.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JP.js index 0fa311738eb..a09ce28cc69 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JP.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/JP.js @@ -1 +1 @@ -module.exports={C:{"48":0.00618,"52":0.06175,"55":0.01853,"56":0.0247,"60":0.00618,"66":0.01235,"67":0.01235,"72":0.01235,"78":0.03705,"84":0.01235,"85":0.0247,"88":0.00618,"89":0.04323,"90":0.00618,"91":0.0494,"92":0.00618,"93":0.01235,"94":0.01235,"95":0.05558,"96":1.14238,"97":1.8525,"98":0.01235,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 57 58 59 61 62 63 64 65 68 69 70 71 73 74 75 76 77 79 80 81 82 83 86 87 99 3.5 3.6"},D:{"34":0.01853,"49":0.1235,"52":0.00618,"61":0.01235,"62":0.00618,"63":0.0247,"64":0.01235,"65":0.01235,"67":0.01235,"69":0.03088,"70":0.01235,"71":0.00618,"72":0.01853,"73":0.01235,"74":0.0247,"75":0.01853,"76":0.01235,"78":0.01235,"79":0.03705,"80":0.06175,"81":0.08645,"83":0.03088,"84":0.03088,"85":0.03088,"86":0.04323,"87":0.12968,"88":0.03088,"89":0.08645,"90":0.0494,"91":0.0741,"92":0.06175,"93":0.36433,"94":0.1482,"95":0.11115,"96":0.58045,"97":7.37295,"98":26.17583,"99":0.01853,"100":0.0247,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 53 54 55 56 57 58 59 60 66 68 77 101"},F:{"80":0.00618,"82":0.03088,"83":0.21613,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00618,"18":0.0247,"84":0.00618,"85":0.00618,"89":0.01235,"90":0.01235,"91":0.00618,"92":0.01235,"94":0.01853,"95":0.01235,"96":0.0741,"97":1.9266,"98":7.28033,_:"12 13 14 15 16 79 80 81 83 86 87 88 93"},E:{"4":0,"12":0.00618,"13":0.06175,"14":0.23465,"15":0.11115,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.01235,"10.1":0.01235,"11.1":0.03088,"12.1":0.05558,"13.1":0.20995,"14.1":0.7904,"15.1":0.33345,"15.2-15.3":0.77188,"15.4":0.00618},G:{"8":0.00243,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.02673,"8.1-8.4":0.01944,"9.0-9.2":0.17252,"9.3":0.10934,"10.0-10.2":0.01701,"10.3":0.10205,"11.0-11.2":0.07532,"11.3-11.4":0.03645,"12.0-12.1":0.04617,"12.2-12.5":0.42522,"13.0-13.1":0.03159,"13.2":0.01944,"13.3":0.09719,"13.4-13.7":0.33045,"14.0-14.4":1.0351,"14.5-14.8":5.42091,"15.0-15.1":2.85989,"15.2-15.3":13.42228,"15.4":0.03159},P:{"4":0.18702,"5.0-5.4":0.01022,"6.2-6.4":0.01022,"7.2-7.4":0.21819,"8.2":0.08049,"9.2":0.03117,"10.1":0.03067,"11.1-11.2":0.13507,"12.0":0.01113,"13.0":0.02225,"14.0":0.01113,"15.0":0.03338,"16.0":0.90131},I:{"0":0,"3":0,"4":0.00491,"2.1":0,"2.2":0.03927,"2.3":0.02781,"4.1":0.01145,"4.2-4.3":0.07853,"4.4":0,"4.4.3-4.4.4":0.12107},A:{"11":1.729,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.27158},Q:{"10.4":0.03443},O:{"0":0.19125},H:{"0":0.09415},L:{"0":18.28825},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00647,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00647,"49":0,"50":0,"51":0,"52":0.04527,"53":0.00647,"54":0,"55":0,"56":0.0194,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00647,"67":0,"68":0.00647,"69":0,"70":0,"71":0,"72":0.00647,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.03234,"79":0,"80":0.00647,"81":0.00647,"82":0,"83":0.00647,"84":0.00647,"85":0,"86":0,"87":0,"88":0.00647,"89":0.00647,"90":0.00647,"91":0.04527,"92":0,"93":0.00647,"94":0.00647,"95":0.00647,"96":0.00647,"97":0.00647,"98":0.00647,"99":0.00647,"100":0.01293,"101":0.02587,"102":0.10347,"103":2.28932,"104":0.42036,"105":0.00647,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00647,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.01293,"44":0,"45":0,"46":0,"47":0,"48":0.00647,"49":0.08407,"50":0,"51":0,"52":0.00647,"53":0,"54":0,"55":0.00647,"56":0.00647,"57":0,"58":0.00647,"59":0,"60":0,"61":0,"62":0.00647,"63":0.01293,"64":0,"65":0.00647,"66":0.00647,"67":0.00647,"68":0,"69":0.0194,"70":0.00647,"71":0.00647,"72":0.00647,"73":0.00647,"74":0.01293,"75":0.00647,"76":0.00647,"77":0.00647,"78":0.01293,"79":0.02587,"80":0.03234,"81":0.07114,"83":0.0388,"84":0.0388,"85":0.03234,"86":0.05174,"87":0.06467,"88":0.01293,"89":0.0388,"90":0.01293,"91":0.01293,"92":0.04527,"93":0.01293,"94":0.0194,"95":0.0388,"96":0.04527,"97":0.06467,"98":0.04527,"99":0.0388,"100":0.06467,"101":0.0582,"102":0.19401,"103":4.6045,"104":13.66477,"105":0.0388,"106":0.00647,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00647,"64":0.00647,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00647,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00647,"89":0.18754,"90":0.03234,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00647,"18":0.01293,"79":0,"80":0,"81":0,"83":0,"84":0.00647,"85":0.00647,"86":0.00647,"87":0,"88":0,"89":0.00647,"90":0.00647,"91":0.00647,"92":0.00647,"93":0,"94":0.00647,"95":0.00647,"96":0.01293,"97":0.00647,"98":0.00647,"99":0.01293,"100":0.0194,"101":0.02587,"102":0.05174,"103":2.23758,"104":7.21071,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00647,"13":0.03234,"14":0.12287,"15":0.0194,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00647,"10.1":0.01293,"11.1":0.0194,"12.1":0.0388,"13.1":0.13581,"14.1":0.25221,"15.1":0.0388,"15.2-15.3":0.03234,"15.4":0.10994,"15.5":0.42036,"15.6":0.99592,"16.0":0.00647},G:{"8":0.00734,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00367,"6.0-6.1":0,"7.0-7.1":0.08444,"8.1-8.4":0.02937,"9.0-9.2":0.30472,"9.3":0.17255,"10.0-10.2":0.01836,"10.3":0.1028,"11.0-11.2":0.09178,"11.3-11.4":0.04038,"12.0-12.1":0.06241,"12.2-12.5":0.59475,"13.0-13.1":0.03671,"13.2":0.02203,"13.3":0.09178,"13.4-13.7":0.2937,"14.0-14.4":0.98023,"14.5-14.8":2.59192,"15.0-15.1":0.47359,"15.2-15.3":0.83338,"15.4":1.45382,"15.5":7.26177,"15.6":21.07308,"16.0":0.06608},P:{"4":0.0105,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.0105,"12.0":0.0105,"13.0":0.0105,"14.0":0.0105,"15.0":0,"16.0":0.05248,"17.0":0.37786,"18.0":0.59828},I:{"0":0,"3":0,"4":0.02682,"2.1":0,"2.2":0.06436,"2.3":0.08582,"4.1":0.03755,"4.2-4.3":0.27891,"4.4":0,"4.4.3-4.4.4":0.28427},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.01452,"10":0,"11":0.75505,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":23.48981},S:{"2.5":0},R:{_:"0"},M:{"0":0.3427},Q:{"10.4":0.02473},O:{"0":0.12719},H:{"0":0.10034}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KE.js index 06270a8439a..4c9220667d8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KE.js @@ -1 +1 @@ -module.exports={C:{"34":0.00733,"43":0.00244,"47":0.00977,"52":0.19788,"57":0.00489,"65":0.00244,"68":0.00244,"72":0.02443,"73":0.00977,"78":0.01954,"82":0.00977,"84":0.00733,"87":0.02199,"88":0.01954,"89":0.01222,"90":0.00489,"91":0.02932,"92":0.00489,"93":0.00733,"94":0.01466,"95":0.04642,"96":0.70114,"97":1.17753,"98":0.07329,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 44 45 46 48 49 50 51 53 54 55 56 58 59 60 61 62 63 64 66 67 69 70 71 74 75 76 77 79 80 81 83 85 86 99 3.5 3.6"},D:{"11":0.00244,"22":0.00244,"38":0.00489,"39":0.00977,"47":0.00489,"49":0.0171,"50":0.00244,"54":0.00733,"55":0.00244,"56":0.00733,"58":0.00244,"63":0.00489,"64":0.00733,"65":0.00733,"66":0.00733,"67":0.00977,"68":0.00977,"69":0.16612,"70":0.01466,"71":0.00489,"72":0.00489,"73":0.00977,"74":0.00733,"75":0.00733,"76":0.01222,"77":0.01222,"78":0.00733,"79":0.03909,"80":0.01466,"81":0.00977,"83":0.01466,"84":0.01466,"85":0.01222,"86":0.04397,"87":0.0513,"88":0.0171,"89":0.0171,"90":0.01954,"91":0.04397,"92":0.06108,"93":0.05619,"94":0.0342,"95":0.05619,"96":0.30538,"97":4.18975,"98":9.75001,"99":0.02932,"100":0.01222,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 40 41 42 43 44 45 46 48 51 52 53 57 59 60 61 62 101"},F:{"28":0.01222,"65":0.01954,"66":0.00489,"67":0.0171,"79":0.01466,"80":0.02199,"82":0.08551,"83":0.55212,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 68 69 70 71 72 73 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00977,"13":0.00733,"14":0.00489,"15":0.00489,"16":0.00733,"17":0.01222,"18":0.03909,"84":0.00489,"85":0.00489,"89":0.00733,"90":0.00244,"91":0.00244,"92":0.02199,"93":0.00244,"94":0.00489,"95":0.00733,"96":0.03176,"97":0.32003,"98":1.05538,_:"79 80 81 83 86 87 88"},E:{"4":0,"12":0.00244,"13":0.00733,"14":0.03176,"15":0.02687,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 9.1 10.1","5.1":0.00733,"11.1":0.00244,"12.1":0.00977,"13.1":0.04153,"14.1":0.12704,"15.1":0.0513,"15.2-15.3":0.09772,"15.4":0.01466},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00572,"5.0-5.1":0.00445,"6.0-6.1":0.00021,"7.0-7.1":0.02541,"8.1-8.4":0.00042,"9.0-9.2":0.00106,"9.3":0.02286,"10.0-10.2":0.00148,"10.3":0.02562,"11.0-11.2":0.01059,"11.3-11.4":0.00445,"12.0-12.1":0.01143,"12.2-12.5":0.14862,"13.0-13.1":0.00635,"13.2":0.00318,"13.3":0.01334,"13.4-13.7":0.05145,"14.0-14.4":0.13422,"14.5-14.8":0.41643,"15.0-15.1":0.37769,"15.2-15.3":0.84472,"15.4":0.00656},P:{"4":0.1499,"5.0-5.4":0.01022,"6.2-6.4":0.01034,"7.2-7.4":0.05354,"8.2":0.08049,"9.2":0.04136,"10.1":0.03067,"11.1-11.2":0.03212,"12.0":0.0517,"13.0":0.03212,"14.0":0.06424,"15.0":0.06424,"16.0":0.50324},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00058,"4.2-4.3":0.00407,"4.4":0,"4.4.3-4.4.4":0.02558},A:{"8":0.00513,"10":0.00513,"11":0.14365,_:"6 7 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.12093},Q:{"10.4":0},O:{"0":0.30232},H:{"0":35.96317},L:{"0":37.07781},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.0024,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.10791,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.0024,"69":0,"70":0,"71":0,"72":0,"73":0.0024,"74":0,"75":0,"76":0,"77":0,"78":0.0048,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.0024,"89":0,"90":0,"91":0.00719,"92":0,"93":0,"94":0,"95":0.0024,"96":0,"97":0.0024,"98":0,"99":0.0024,"100":0.0048,"101":0.0048,"102":0.01679,"103":0.32853,"104":0.07674,"105":0.0048,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.0024,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.0024,"50":0,"51":0,"52":0,"53":0,"54":0.0024,"55":0,"56":0.0024,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.0024,"66":0.0024,"67":0,"68":0,"69":0.02878,"70":0.0024,"71":0,"72":0.0048,"73":0.0048,"74":0.0024,"75":0.0024,"76":0.0024,"77":0,"78":0.0024,"79":0.01439,"80":0.0024,"81":0.00719,"83":0.00959,"84":0.0024,"85":0.0024,"86":0.0048,"87":0.01199,"88":0.0024,"89":0.0024,"90":0.0048,"91":0.0048,"92":0.00719,"93":0.0048,"94":0.0048,"95":0.00719,"96":0.02158,"97":0.00719,"98":0.01199,"99":0.00719,"100":0.01439,"101":0.01439,"102":0.03837,"103":0.8345,"104":2.08626,"105":0.00959,"106":0.0024,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0.0024,"24":0.00959,"25":0.0024,"26":0.0048,"27":0.02638,"28":0.01199,"29":0.0024,"30":0.01199,"31":0.0048,"32":0.03597,"33":0.01439,"34":0,"35":0.0048,"36":0,"37":0.0024,"38":0.01918,"39":0,"40":0,"41":0.0024,"42":0.00719,"43":0,"44":0.0024,"45":0.0048,"46":0.01918,"47":0.00959,"48":0,"49":0,"50":0.01439,"51":0.02158,"52":0,"53":0,"54":0.03117,"55":0.02398,"56":0.01199,"57":0.02158,"58":0.09832,"60":0.42924,"62":0.00959,"63":1.5587,"64":0.62348,"65":0,"66":0,"67":0,"68":0.0024,"69":0.0024,"70":0.0024,"71":0.0024,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.0024,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.0024,"86":0.0024,"87":0,"88":0.0048,"89":0.1151,"90":0.01918,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.02158},B:{"12":0.0024,"13":0.0024,"14":0,"15":0,"16":0.0024,"17":0,"18":0.0048,"79":0,"80":0,"81":0,"83":0,"84":0.0024,"85":0,"86":0,"87":0,"88":0,"89":0.0024,"90":0,"91":0,"92":0.00719,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00719,"100":0.0024,"101":0.0048,"102":0.0048,"103":0.09112,"104":0.21582,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0048,"12":0,"13":0.0024,"14":0.0048,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.0024,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.0024,"13.1":0.00959,"14.1":0.01199,"15.1":0.0024,"15.2-15.3":0.0024,"15.4":0.00719,"15.5":0.02158,"15.6":0.03837,"16.0":0},G:{"8":0.00057,"3.2":0,"4.0-4.1":0.00057,"4.2-4.3":0,"5.0-5.1":0.00714,"6.0-6.1":0,"7.0-7.1":0.02657,"8.1-8.4":0,"9.0-9.2":0.00057,"9.3":0.04629,"10.0-10.2":0.00057,"10.3":0.02257,"11.0-11.2":0.00886,"11.3-11.4":0.006,"12.0-12.1":0.00514,"12.2-12.5":0.17315,"13.0-13.1":0.00257,"13.2":0.00314,"13.3":0.01857,"13.4-13.7":0.03143,"14.0-14.4":0.13029,"14.5-14.8":0.18943,"15.0-15.1":0.06143,"15.2-15.3":0.09143,"15.4":0.13457,"15.5":0.6823,"15.6":1.18974,"16.0":0.02229},P:{"4":0.19724,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.06229,"8.2":0,"9.2":0,"10.1":0.01038,"11.1-11.2":0.01038,"12.0":0.01038,"13.0":0.01038,"14.0":0.04152,"15.0":0.02076,"16.0":0.06229,"17.0":0.28029,"18.0":0.25953},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00568,"4.2-4.3":0.0216,"4.4":0,"4.4.3-4.4.4":0.12506},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01199,"5.5":0},J:{"7":0,"10":0.0076},N:{"10":0.0076,"11":0},L:{"0":57.03078},S:{"2.5":0.0076},R:{_:"0"},M:{"0":0.12163},Q:{"10.4":0},O:{"0":0.23566},H:{"0":25.75116}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KG.js index 96b0f57c496..bda99b5b06b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KG.js @@ -1 +1 @@ -module.exports={C:{"52":0.0158,"72":0.0079,"78":0.00395,"87":0.00395,"91":0.03555,"93":0.0079,"95":0.01185,"96":0.20935,"97":0.2923,"98":0.0079,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 88 89 90 92 94 99 3.5 3.6"},D:{"42":0.00395,"49":0.0395,"57":0.00395,"59":0.05925,"60":0.00395,"63":0.00395,"66":0.0079,"67":0.0079,"71":0.0237,"72":0.01975,"74":0.0316,"77":0.01975,"78":0.0079,"79":0.03555,"80":0.0237,"81":0.00395,"83":0.01185,"84":0.00395,"85":0.01185,"86":0.0395,"87":0.02765,"88":0.04345,"89":0.0869,"90":0.01975,"91":0.01975,"92":0.0316,"93":0.01185,"94":0.1185,"95":0.03555,"96":0.56485,"97":14.60315,"98":17.80265,"100":0.00395,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 50 51 52 53 54 55 56 58 61 62 64 65 68 69 70 73 75 76 99 101"},F:{"42":0.01975,"77":0.0079,"79":0.00395,"81":0.00395,"82":0.16195,"83":1.14155,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00395,"18":0.0079,"96":0.00395,"97":0.1106,"98":0.38315,_:"13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95"},E:{"4":0,"13":0.00395,"14":0.16195,"15":0.02765,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 11.1","5.1":0.4503,"12.1":0.00395,"13.1":0.0553,"14.1":0.17775,"15.1":0.079,"15.2-15.3":0.1817,"15.4":0.01185},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00054,"6.0-6.1":0,"7.0-7.1":0.00326,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.0174,"10.0-10.2":0.00109,"10.3":0.01142,"11.0-11.2":0.01251,"11.3-11.4":0.00761,"12.0-12.1":0.01794,"12.2-12.5":0.27784,"13.0-13.1":0.01196,"13.2":0.00598,"13.3":0.12179,"13.4-13.7":0.09189,"14.0-14.4":0.53557,"14.5-14.8":1.11518,"15.0-15.1":1.20218,"15.2-15.3":1.98568,"15.4":0.01305},P:{"4":0.31645,"5.0-5.4":0.01021,"6.2-6.4":0.07146,"7.2-7.4":0.32666,"8.2":0.08049,"9.2":0.08166,"10.1":0.02042,"11.1-11.2":0.1327,"12.0":0.10208,"13.0":0.21437,"14.0":0.2552,"15.0":0.30624,"16.0":1.1331},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00016,"4.2-4.3":0.00033,"4.4":0,"4.4.3-4.4.4":0.00556},A:{"11":0.0237,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.03025},Q:{"10.4":0},O:{"0":0.5566},H:{"0":0.35512},L:{"0":50.3731},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.0155,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.05168,"92":0,"93":0,"94":0,"95":0.00517,"96":0,"97":0,"98":0.00517,"99":0.01034,"100":0,"101":0.00517,"102":0.07235,"103":0.22222,"104":0.03101,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00517,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.07752,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00517,"68":0,"69":0,"70":0,"71":0.00517,"72":0,"73":0.01034,"74":0.02067,"75":0,"76":0,"77":0.00517,"78":0,"79":0.02584,"80":0.00517,"81":0.01034,"83":0.01034,"84":0.00517,"85":0.01034,"86":0.02584,"87":0.01034,"88":0.01034,"89":0.03101,"90":0.01034,"91":0.00517,"92":0.02067,"93":0.00517,"94":0.02067,"95":0.00517,"96":0.02584,"97":0.02584,"98":0.0155,"99":0.03101,"100":0.04134,"101":0.03101,"102":0.16538,"103":17.53502,"104":4.93544,"105":0.00517,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.03101,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00517,"62":0,"63":0.01034,"64":0.05168,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00517,"85":0.05168,"86":0.00517,"87":0.00517,"88":0.00517,"89":0.76486,"90":0.05685,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00517,"16":0,"17":0,"18":0.00517,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00517,"101":0.00517,"102":0.00517,"103":0.08269,"104":0.22222,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00517,"14":0.02067,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.10853,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00517,"13.1":0.0155,"14.1":0.02067,"15.1":0.01034,"15.2-15.3":0.0155,"15.4":0.03618,"15.5":0.10853,"15.6":0.12403,"16.0":0.00517},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00648,"8.1-8.4":0.00093,"9.0-9.2":0.00278,"9.3":0.00926,"10.0-10.2":0.00555,"10.3":0.02129,"11.0-11.2":0.00278,"11.3-11.4":0.03425,"12.0-12.1":0.01481,"12.2-12.5":0.31843,"13.0-13.1":0.00926,"13.2":0.01203,"13.3":0.03147,"13.4-13.7":0.17032,"14.0-14.4":0.4147,"14.5-14.8":0.69426,"15.0-15.1":0.41285,"15.2-15.3":0.56559,"15.4":0.87754,"15.5":2.69835,"15.6":2.74463,"16.0":0.20272},P:{"4":0.23144,"5.0-5.4":0.01006,"6.2-6.4":0.04025,"7.2-7.4":0.20126,"8.2":0.01006,"9.2":0.04025,"10.1":0.02013,"11.1-11.2":0.06038,"12.0":0.05031,"13.0":0.10063,"14.0":0.10063,"15.0":0.05031,"16.0":0.21132,"17.0":0.55345,"18.0":0.39245},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00947,"4.2-4.3":0.00474,"4.4":0,"4.4.3-4.4.4":0.07579},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02584,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":59.33717},S:{"2.5":0},R:{_:"0"},M:{"0":0.05315},Q:{"10.4":0},O:{"0":0.42038},H:{"0":0.33395}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KH.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KH.js index 75c1593ec5c..27a40ba2936 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KH.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KH.js @@ -1 +1 @@ -module.exports={C:{"4":0.00822,"5":0.00411,"15":0.00411,"17":0.00822,"44":0.00822,"47":0.00822,"50":0.00822,"51":0.00411,"52":0.01644,"56":0.00411,"57":0.00411,"60":0.00411,"61":0.02876,"67":0.00822,"68":0.00411,"70":0.00822,"72":0.00411,"78":0.04109,"79":0.01233,"80":0.03287,"81":0.05753,"82":0.03287,"83":0.01233,"84":0.00822,"86":0.00411,"88":0.01644,"89":0.01644,"90":0.00822,"91":0.01233,"92":0.00822,"93":0.00822,"94":0.01233,"95":0.02876,"96":0.65744,"97":1.28612,"98":0.05342,_:"2 3 6 7 8 9 10 11 12 13 14 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 45 46 48 49 53 54 55 58 59 62 63 64 65 66 69 71 73 74 75 76 77 85 87 99 3.5 3.6"},D:{"24":0.00822,"28":0.01233,"38":0.02465,"40":0.01644,"41":0.00411,"43":0.00411,"47":0.00822,"49":0.01644,"53":0.05753,"56":0.02876,"57":0.00411,"58":0.00411,"61":0.00822,"63":0.00411,"65":0.01233,"67":0.00822,"69":0.00822,"71":0.05342,"72":0.01233,"74":0.00822,"75":0.00411,"76":0.01233,"77":0.00411,"78":0.02055,"79":0.10683,"80":0.03698,"81":0.02055,"83":0.15614,"84":0.1808,"85":0.27119,"86":0.23421,"87":0.32461,"88":0.01644,"89":0.02876,"90":0.08629,"91":0.07396,"92":0.09451,"93":1.85316,"94":0.03287,"95":0.0452,"96":0.53828,"97":6.09776,"98":17.3482,"99":0.02876,"100":0.06574,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 29 30 31 32 33 34 35 36 37 39 42 44 45 46 48 50 51 52 54 55 59 60 62 64 66 68 70 73 101"},F:{"36":0.01233,"52":0.00822,"70":0.00822,"72":0.00411,"75":0.00411,"82":0.12327,"83":0.76017,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 71 73 74 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00411,"13":0.00822,"18":0.07396,"84":0.02055,"85":0.03698,"86":0.01233,"89":0.00822,"90":0.00822,"92":0.03698,"93":0.00411,"95":0.01233,"96":0.03287,"97":0.40679,"98":1.56964,_:"14 15 16 17 79 80 81 83 87 88 91 94"},E:{"4":0,"10":0.00411,"11":0.00822,"12":0.01233,"13":0.0452,"14":0.29585,"15":0.1808,_:"0 5 6 7 8 9 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00411,"11.1":0.01233,"12.1":0.03698,"13.1":0.21778,"14.1":0.95329,"15.1":0.42323,"15.2-15.3":0.80126,"15.4":0.01233},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00229,"6.0-6.1":0.00458,"7.0-7.1":0.03209,"8.1-8.4":0.04355,"9.0-9.2":0.01146,"9.3":0.08251,"10.0-10.2":0.01604,"10.3":0.11689,"11.0-11.2":0.04813,"11.3-11.4":0.09855,"12.0-12.1":0.0848,"12.2-12.5":1.56999,"13.0-13.1":0.09168,"13.2":0.0275,"13.3":0.24524,"13.4-13.7":0.63487,"14.0-14.4":2.1384,"14.5-14.8":5.42736,"15.0-15.1":3.74277,"15.2-15.3":8.40461,"15.4":0.09855},P:{"4":0.25853,"5.0-5.4":0.01077,"6.2-6.4":0.01048,"7.2-7.4":0.01077,"8.2":0.01077,"9.2":0.22272,"10.1":0.06074,"11.1-11.2":0.01077,"12.0":0.03232,"13.0":0.06463,"14.0":0.05386,"15.0":0.0754,"16.0":1.35729},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00333,"4.2-4.3":0.002,"4.4":0,"4.4.3-4.4.4":0.03001},A:{"8":0.04003,"9":0.02502,"10":0.01501,"11":0.42534,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.15906},Q:{"10.4":0.03535},O:{"0":0.78939},H:{"0":0.50753},L:{"0":31.87965},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.004,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.004,"48":0,"49":0,"50":0,"51":0.012,"52":0.004,"53":0,"54":0,"55":0,"56":0.008,"57":0,"58":0,"59":0,"60":0,"61":0.008,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.004,"69":0,"70":0.016,"71":0,"72":0.004,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.02401,"79":0.012,"80":0.012,"81":0.02401,"82":0.012,"83":0.008,"84":0.004,"85":0,"86":0,"87":0.004,"88":0.004,"89":0.004,"90":0.004,"91":0.012,"92":0,"93":0,"94":0,"95":0.004,"96":0.008,"97":0,"98":0.004,"99":0.004,"100":0.004,"101":0.008,"102":0.02001,"103":0.72818,"104":0.13603,"105":0.008,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.008,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.004,"39":0,"40":0,"41":0.004,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.012,"49":0.004,"50":0.004,"51":0,"52":0,"53":0.008,"54":0,"55":0,"56":0.008,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0.004,"63":0.004,"64":0,"65":0.008,"66":0,"67":0,"68":0.004,"69":0.008,"70":0.004,"71":0.004,"72":0.008,"73":0.05201,"74":0.004,"75":0.004,"76":0.008,"77":0,"78":0.008,"79":0.05601,"80":0.016,"81":0.02001,"83":0.11603,"84":0.15204,"85":0.19205,"86":0.12003,"87":0.13203,"88":0.008,"89":0.008,"90":0.016,"91":0.012,"92":0.04401,"93":0.012,"94":0.012,"95":0.008,"96":0.02401,"97":0.04001,"98":0.016,"99":0.03601,"100":0.04001,"101":0.03601,"102":0.09602,"103":2.59665,"104":7.03776,"105":0.03201,"106":0.02001,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.004,"38":0,"39":0,"40":0.004,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.02401,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.012,"64":0.008,"65":0,"66":0,"67":0,"68":0.004,"69":0,"70":0.008,"71":0.004,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.004,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.004,"86":0.004,"87":0.004,"88":0.004,"89":0.35609,"90":0.04801,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.004,"13":0,"14":0,"15":0,"16":0,"17":0.008,"18":0.012,"79":0,"80":0,"81":0,"83":0,"84":0.004,"85":0.008,"86":0.02401,"87":0,"88":0,"89":0.004,"90":0,"91":0,"92":0.008,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.004,"100":0.004,"101":0.004,"102":0.004,"103":0.25206,"104":0.62416,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.02001,"14":0.07202,"15":0.02401,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.004,"11.1":0.008,"12.1":0.012,"13.1":0.07602,"14.1":0.17204,"15.1":0.04401,"15.2-15.3":0.03601,"15.4":0.08402,"15.5":0.34809,"15.6":0.50413,"16.0":0.02001},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00747,"7.0-7.1":0.02241,"8.1-8.4":0.04855,"9.0-9.2":0.00747,"9.3":0.10083,"10.0-10.2":0.04108,"10.3":0.16431,"11.0-11.2":0.01867,"11.3-11.4":0.09336,"12.0-12.1":0.10456,"12.2-12.5":1.71033,"13.0-13.1":0.08962,"13.2":0.05228,"13.3":0.18672,"13.4-13.7":0.68339,"14.0-14.4":1.76635,"14.5-14.8":3.75676,"15.0-15.1":1.13898,"15.2-15.3":1.39291,"15.4":2.28916,"15.5":7.98778,"15.6":15.07184,"16.0":0.59376},P:{"4":0.14748,"5.0-5.4":0.02107,"6.2-6.4":0,"7.2-7.4":0.01053,"8.2":0,"9.2":0.02107,"10.1":0,"11.1-11.2":0.01053,"12.0":0.01053,"13.0":0.02107,"14.0":0.0316,"15.0":0.02107,"16.0":0.07374,"17.0":0.57937,"18.0":0.82165},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01785,"4.4":0,"4.4.3-4.4.4":0.09816},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.01354,"9":0.00451,"10":0.01354,"11":0.14445,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":42.50986},S:{"2.5":0},R:{_:"0"},M:{"0":0.35394},Q:{"10.4":0.006},O:{"0":0.66589},H:{"0":0.51683}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KI.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KI.js index b6779b6ba1a..c20fb40d46e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KI.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KI.js @@ -1 +1 @@ -module.exports={C:{"54":0.01027,"56":0.07447,"75":0.05136,"89":0.03082,"94":0.03082,"95":0.02054,"96":0.24139,"97":7.73995,"98":0.02054,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 76 77 78 79 80 81 82 83 84 85 86 87 88 90 91 92 93 99 3.5 3.6"},D:{"56":0.01027,"57":0.42115,"71":0.01027,"72":0.05136,"81":0.01027,"87":0.03082,"88":0.02054,"89":0.28505,"92":0.14638,"95":0.28505,"96":0.61118,"97":2.21875,"98":7.47802,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 58 59 60 61 62 63 64 65 66 67 68 69 70 73 74 75 76 77 78 79 80 83 84 85 86 90 91 93 94 99 100 101"},F:{"82":0.01027,"83":0.22085,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.04109,"15":0.01027,"16":0.08474,"18":0.2003,"80":0.0642,"84":0.0642,"87":0.01027,"89":0.03082,"90":0.04109,"92":0.01027,"95":0.0642,"96":0.10529,"97":1.48174,"98":1.20953,_:"13 14 17 79 81 83 85 86 88 91 93 94"},E:{"4":0,"13":0.03082,_:"0 5 6 7 8 9 10 11 12 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 13.1 14.1 15.4","15.1":0.03082,"15.2-15.3":0.19003},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00689,"7.0-7.1":0.0411,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0.00689,"11.3-11.4":0.04119,"12.0-12.1":0.00689,"12.2-12.5":0.23299,"13.0-13.1":0.00689,"13.2":0.00689,"13.3":0.03429,"13.4-13.7":0.06169,"14.0-14.4":0.2398,"14.5-14.8":0.04808,"15.0-15.1":0.06169,"15.2-15.3":0.08909,"15.4":0},P:{"4":0.09071,"5.0-5.4":0.09071,"6.2-6.4":0.11087,"7.2-7.4":2.20723,"8.2":0.08049,"9.2":0.01008,"10.1":0.03067,"11.1-11.2":1.64283,"12.0":0.06047,"13.0":0.37291,"14.0":0.20157,"15.0":0.08063,"16.0":1.47149},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.03082,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":4.03558},H:{"0":0.28145},L:{"0":64.2664},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00367,"51":0,"52":0,"53":0,"54":0.00367,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.01835,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00367,"92":0,"93":0,"94":0,"95":0,"96":0.00734,"97":0,"98":0.01101,"99":0,"100":0,"101":0,"102":0.06239,"103":1.60379,"104":0.08808,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00734,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.02202,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00367,"79":0,"80":0,"81":0.00367,"83":0,"84":0,"85":0,"86":0.02936,"87":0.01101,"88":0,"89":0,"90":0,"91":0.01835,"92":0.00734,"93":0,"94":0.01835,"95":0,"96":0.02936,"97":0.00367,"98":0.00367,"99":0.00367,"100":0.00367,"101":0.01101,"102":0,"103":1.59645,"104":5.07928,"105":0.00734,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.01101,"60":0.00367,"62":0,"63":0.00734,"64":0.02936,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.10276,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.02569,"13":0,"14":0,"15":0,"16":0.00734,"17":0,"18":0.1468,"79":0,"80":0.02936,"81":0,"83":0,"84":0.06239,"85":0,"86":0,"87":0,"88":0,"89":0.00734,"90":0.00367,"91":0,"92":0.18717,"93":0.00367,"94":0,"95":0.01101,"96":0.00367,"97":0,"98":0.01835,"99":0.01101,"100":0.00367,"101":0.17616,"102":0.02936,"103":0.74134,"104":1.47901,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.02569,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.01101,"14.1":0.24956,"15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0,"15.6":0.02202,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0.02101,"12.0-12.1":0,"12.2-12.5":0.03151,"13.0-13.1":0.0105,"13.2":0.0105,"13.3":0.02101,"13.4-13.7":0.08403,"14.0-14.4":0.24158,"14.5-14.8":0.07352,"15.0-15.1":0.2941,"15.2-15.3":0.35712,"15.4":0.40963,"15.5":0.22057,"15.6":0.85078,"16.0":0},P:{"4":0.06023,"5.0-5.4":0,"6.2-6.4":0.03011,"7.2-7.4":0.57218,"8.2":0,"9.2":0.27103,"10.1":0.03011,"11.1-11.2":0.23088,"12.0":0,"13.0":0.3413,"14.0":0.11042,"15.0":0.19073,"16.0":0.15057,"17.0":0.50191,"18.0":0.20076},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.07138},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":78.26286},S:{"2.5":0},R:{_:"0"},M:{"0":0.03798},Q:{"10.4":0.01266},O:{"0":2.14587},H:{"0":0.22773}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KM.js index cc4d0c893f1..a7ebbbc367a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KM.js @@ -1 +1 @@ -module.exports={C:{"47":0.04297,"78":0.00992,"84":0.00331,"91":0.03636,"94":0.00661,"96":2.68366,"97":3.24882,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 87 88 89 90 92 93 95 98 99 3.5 3.6"},D:{"32":0.00331,"38":0.00331,"54":0.00661,"58":0.00992,"63":0.00992,"65":0.01322,"74":0.03636,"76":0.01322,"81":0.17186,"83":0.00331,"86":2.23088,"87":0.01322,"88":0.01653,"89":0.02314,"91":0.01322,"92":0.03636,"93":0.03305,"94":0.00661,"95":0.02975,"96":0.16856,"97":2.01936,"98":8.16005,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 55 56 57 59 60 61 62 64 66 67 68 69 70 71 72 73 75 77 78 79 80 84 85 90 99 100 101"},F:{"43":0.02975,"67":0.00331,"79":0.00331,"82":0.00992,"83":0.36686,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00661,"13":0.00992,"17":0.00992,"18":0.01653,"80":0.00331,"81":0.00661,"84":0.01983,"85":0.00331,"89":0.00331,"92":0.02644,"94":0.02314,"95":0.03305,"96":0.0661,"97":0.18508,"98":0.54533,_:"14 15 16 79 83 86 87 88 90 91 93"},E:{"4":0,"12":0.00331,"13":0.00661,"14":0.07271,_:"0 5 6 7 8 9 10 11 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00992,"12.1":0.05619,"13.1":0.01322,"14.1":0.08263,"15.1":0.00331,"15.2-15.3":0.01322},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.08002,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00418,"10.0-10.2":0,"10.3":0.00209,"11.0-11.2":0.06956,"11.3-11.4":0.15951,"12.0-12.1":0.01046,"12.2-12.5":1.00727,"13.0-13.1":0.03138,"13.2":0.00418,"13.3":0.01883,"13.4-13.7":0.08159,"14.0-14.4":1.51561,"14.5-14.8":0.79494,"15.0-15.1":0.64589,"15.2-15.3":0.80121,"15.4":0.00209},P:{"4":0.56464,"5.0-5.4":0.02017,"6.2-6.4":0.04033,"7.2-7.4":0.61505,"8.2":0.01049,"9.2":0.07058,"10.1":2.25855,"11.1-11.2":0.92762,"12.0":0.02017,"13.0":0.02017,"14.0":0.09075,"15.0":0.04033,"16.0":0.3529},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00217,"4.2-4.3":0.01517,"4.4":0,"4.4.3-4.4.4":0.08309},A:{"9":0.18864,"11":0.51202,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.30128},Q:{"10.4":0},O:{"0":0.29458},H:{"0":0.7099},L:{"0":66.53176},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.03051,"47":0.00277,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0.00277,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00277,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0.00277,"82":0,"83":0,"84":0,"85":0,"86":0.00277,"87":0,"88":0,"89":0,"90":0,"91":0.0111,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00277,"100":0.01942,"101":0.00555,"102":0.03884,"103":0.82943,"104":0.0638,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0.00277,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00555,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00277,"65":0,"66":0.03884,"67":0,"68":0.00277,"69":0,"70":0.00555,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00277,"80":0.00277,"81":0.07212,"83":0.19695,"84":0,"85":0,"86":0.00277,"87":0,"88":0.01942,"89":0.00277,"90":0,"91":0,"92":0.0111,"93":0.00277,"94":0.01664,"95":0,"96":0.0111,"97":0.05271,"98":0.01942,"99":0,"100":0.00832,"101":0.02219,"102":0.10541,"103":0.75175,"104":1.94457,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00277,"38":0,"39":0,"40":0,"41":0,"42":0.00277,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00277,"60":0.00277,"62":0,"63":0.19695,"64":0.05825,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.04161,"80":0,"81":0.00277,"82":0.00277,"83":0.00277,"84":0,"85":0.05271,"86":0.01387,"87":0,"88":0,"89":0.19695,"90":0.01387,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00277,"13":0,"14":0.00277,"15":0.00277,"16":0,"17":0,"18":0.00555,"79":0,"80":0,"81":0,"83":0,"84":0.00277,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00277,"91":0,"92":0.00277,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.01387,"102":0.00832,"103":0.10541,"104":0.22192,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00832,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0.01387,"15.1":0,"15.2-15.3":0,"15.4":0.00277,"15.5":0.00832,"15.6":0.04438,"16.0":0},G:{"8":0.00907,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00227,"10.0-10.2":0.00453,"10.3":0.01587,"11.0-11.2":0.05591,"11.3-11.4":0,"12.0-12.1":0.02493,"12.2-12.5":0.65882,"13.0-13.1":0.08462,"13.2":0.01133,"13.3":0.01813,"13.4-13.7":0.02493,"14.0-14.4":0.95951,"14.5-14.8":0.40269,"15.0-15.1":0.13826,"15.2-15.3":0.28332,"15.4":0.83712,"15.5":2.04067,"15.6":1.93414,"16.0":0.05364},P:{"4":0.09099,"5.0-5.4":0.02022,"6.2-6.4":0.02022,"7.2-7.4":0.25276,"8.2":0,"9.2":0.12132,"10.1":0.45496,"11.1-11.2":0.18199,"12.0":0,"13.0":0.04044,"14.0":0.1011,"15.0":0.02022,"16.0":0.15165,"17.0":0.60662,"18.0":0.33364},I:{"0":0,"3":0,"4":0.00241,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01045,"4.2-4.3":0.01045,"4.4":0,"4.4.3-4.4.4":0.13107},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01942,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":80.60102},S:{"2.5":0.0289},R:{_:"0"},M:{"0":0.04336},Q:{"10.4":0.00723},O:{"0":0.85989},H:{"0":1.51189}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KN.js index 990f6039d78..ad22104fc7b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KN.js @@ -1 +1 @@ -module.exports={C:{"69":0.0085,"78":0.0085,"94":0.00425,"95":0.01276,"96":0.19559,"97":0.31465,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 98 99 3.5 3.6"},D:{"23":0.0085,"49":0.02551,"63":0.01276,"66":0.00425,"70":0.01276,"76":0.05102,"77":0.03827,"78":0.01276,"79":0.03827,"81":0.02976,"83":0.04252,"85":0.3104,"86":0.01701,"87":0.02126,"89":0.04252,"91":0.02551,"92":0.02976,"93":0.01276,"94":0.03402,"95":0.04677,"96":0.66756,"97":6.85422,"98":16.42973,"99":0.0085,"100":0.00425,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 67 68 69 71 72 73 74 75 80 84 88 90 101"},F:{"82":0.25512,"83":0.2126,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.0085,"15":0.00425,"17":0.00425,"18":0.02551,"85":0.18709,"89":0.00425,"90":0.08079,"95":0.08504,"96":0.02976,"97":2.0112,"98":5.97831,_:"13 14 16 79 80 81 83 84 86 87 88 91 92 93 94"},E:{"4":0,"12":0.04677,"13":0.0085,"14":0.13181,"15":0.13181,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 10.1 15.4","9.1":0.0085,"11.1":0.01276,"12.1":0.07228,"13.1":0.25512,"14.1":0.59103,"15.1":0.34866,"15.2-15.3":1.34363},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00642,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01124,"10.0-10.2":0.01124,"10.3":0.265,"11.0-11.2":0.00642,"11.3-11.4":0.00964,"12.0-12.1":0.00482,"12.2-12.5":0.94597,"13.0-13.1":0.01285,"13.2":0,"13.3":0.01767,"13.4-13.7":0.09315,"14.0-14.4":0.49788,"14.5-14.8":2.61948,"15.0-15.1":1.79236,"15.2-15.3":9.21557,"15.4":0.54445},P:{"4":0.25173,"5.0-5.4":0.01121,"6.2-6.4":0.01012,"7.2-7.4":0.15733,"8.2":0.03083,"9.2":0.07359,"10.1":0.03037,"11.1-11.2":0.14684,"12.0":0.05244,"13.0":0.02098,"14.0":0.03147,"15.0":0.0944,"16.0":3.734},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00366,"4.2-4.3":0.00274,"4.4":0,"4.4.3-4.4.4":0.03383},A:{"11":0.17858,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.52307},Q:{"10.4":0},O:{"0":0.0115},H:{"0":2.04069},L:{"0":36.60142},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.0128,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00427,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00427,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.01707,"103":0.71686,"104":0.03414,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00427,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.00427,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00427,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.02987,"77":0,"78":0,"79":0.0128,"80":0,"81":0.0256,"83":0.08107,"84":0.00427,"85":0,"86":0,"87":0.04694,"88":0.00427,"89":0.00427,"90":0.02134,"91":0.00853,"92":0.00427,"93":0.00853,"94":0,"95":0.02987,"96":0.00853,"97":0.00853,"98":0.00427,"99":0.00427,"100":0.05974,"101":0.01707,"102":0.15788,"103":2.70101,"104":7.29657,"105":0.00853,"106":0.00427,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.04694,"64":0.02134,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0.02134,"84":0,"85":0,"86":0,"87":0,"88":0.0128,"89":0.20908,"90":0.01707,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0.00427,"14":0.00853,"15":0,"16":0,"17":0,"18":0.00853,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00427,"93":0,"94":0,"95":0.00427,"96":0,"97":0.00427,"98":0.01707,"99":0,"100":0,"101":0.04694,"102":0.0128,"103":0.77233,"104":2.03109,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.00427,"9":0,"10":0,"11":0.00427,"12":0.00853,"13":0.00427,"14":0.04694,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00427,"11.1":0.00427,"12.1":0.00853,"13.1":0.08534,"14.1":0.09814,"15.1":0.00853,"15.2-15.3":0.02134,"15.4":0.26029,"15.5":0.30722,"15.6":0.69552,"16.0":0.0256},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.04754,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.16639,"10.0-10.2":0,"10.3":0.19412,"11.0-11.2":0.01981,"11.3-11.4":0.02575,"12.0-12.1":0,"12.2-12.5":0.68933,"13.0-13.1":0,"13.2":0.00396,"13.3":0.04358,"13.4-13.7":0.04754,"14.0-14.4":0.22978,"14.5-14.8":0.68933,"15.0-15.1":0.12677,"15.2-15.3":0.49917,"15.4":1.05974,"15.5":4.95998,"15.6":9.6268,"16.0":1.37271},P:{"4":0.21521,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.27978,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.0538,"12.0":0.26901,"13.0":0.02152,"14.0":0.03228,"15.0":0.21521,"16.0":0.10761,"17.0":1.95843,"18.0":1.65713},I:{"0":0,"3":0,"4":0.02507,"2.1":0,"2.2":0,"2.3":0,"4.1":0.05015,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.91098},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.08107,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":51.38407},S:{"2.5":0},R:{_:"0"},M:{"0":1.03767},Q:{"10.4":0},O:{"0":0.24652},H:{"0":1.98109}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KP.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KP.js index 3810de0e6da..0bf44e8a250 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KP.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KP.js @@ -1 +1 @@ -module.exports={C:{"97":0.01755,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 98 99 3.5 3.6"},D:{"78":0.00878,"83":0.00878,"86":0.00878,"92":0.05265,"96":0.2184,"97":0.07898,"98":0.4719,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 84 85 87 88 89 90 91 93 94 95 99 100 101"},F:{"56":0.0351,"83":0.12285,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"92":0.49823,"97":0.0351,"98":0.11408,_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 93 94 95 96"},E:{"4":0,"9":0.01755,_:"0 5 6 7 8 10 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 13.1 14.1","15.1":0.92723,"15.2-15.3":3.27893,"15.4":0.19208},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01804,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0.01804,"14.0-14.4":0,"14.5-14.8":0,"15.0-15.1":22.95271,"15.2-15.3":66.8191,"15.4":0.406},P:{"4":0.09071,"5.0-5.4":0.09071,"6.2-6.4":0.11087,"7.2-7.4":2.20723,"8.2":0.08049,"9.2":0.02708,"10.1":0.03067,"11.1-11.2":1.64283,"12.0":0.06047,"13.0":0.37291,"14.0":0.20157,"15.0":0.08063,"16.0":1.47149},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{_:"6 7 8 9 10 11 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0},L:{"0":0.56843},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.03187,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0.03187,"104":0,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0.0602,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.30453,"99":0,"100":0.21246,"101":0,"102":0.03187,"103":0.09207,"104":0.42492,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.12039,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0.03187,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.09207,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0.03187,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0.18059,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0,"15.1":0.36472,"15.2-15.3":0.0602,"15.4":2.00067,"15.5":4.91137,"15.6":2.39372,"16.0":0.42492},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":0,"15.0-15.1":0.68911,"15.2-15.3":1.84054,"15.4":8.784,"15.5":58.11222,"15.6":16.75677,"16.0":1.03803},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0,"15.0":0,"16.0":0,"17.0":0,"18.0":0},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":0.47082},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KR.js index 96800a79cf3..de04e1d3f29 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KR.js @@ -1 +1 @@ -module.exports={C:{"52":0.01419,"78":0.01892,"80":0.00473,"91":0.05202,"95":0.00946,"96":0.25537,"97":0.53911,"98":0.01419,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 81 82 83 84 85 86 87 88 89 90 92 93 94 99 3.5 3.6"},D:{"42":0.0331,"49":0.02365,"56":0.00473,"64":0.02837,"67":0.00473,"68":0.00946,"69":0.00473,"70":0.0331,"72":0.0331,"77":0.18443,"78":0.00473,"79":0.07094,"80":0.05202,"81":0.02837,"83":0.0331,"84":0.04256,"85":0.04729,"86":0.06621,"87":0.06621,"88":0.00473,"89":0.04729,"90":0.08512,"91":0.03783,"92":0.04256,"93":0.5864,"94":0.04256,"95":0.03783,"96":0.30266,"97":8.50747,"98":21.94256,"99":0.01419,"100":0.00946,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 50 51 52 53 54 55 57 58 59 60 61 62 63 65 66 71 73 74 75 76 101"},F:{"82":0.01892,"83":0.21281,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00473,"17":0.00946,"18":0.02365,"84":0.00473,"85":0.00473,"86":0.02837,"87":0.00473,"89":0.00946,"90":0.00946,"91":0.01419,"92":0.01892,"93":0.00473,"94":0.01419,"95":0.02365,"96":0.07094,"97":1.43762,"98":5.77411,_:"12 13 15 16 79 80 81 83 88"},E:{"4":0,"8":0.00473,"13":0.00946,"14":0.06148,"15":0.05675,_:"0 5 6 7 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1","12.1":0.00946,"13.1":0.05675,"14.1":0.18916,"15.1":0.14187,"15.2-15.3":0.36413,"15.4":0.01419},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00243,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.14835,"9.3":0.01216,"10.0-10.2":0,"10.3":0.00973,"11.0-11.2":0.00973,"11.3-11.4":0.00608,"12.0-12.1":0.01094,"12.2-12.5":0.08633,"13.0-13.1":0.15443,"13.2":0.00365,"13.3":0.02675,"13.4-13.7":0.07904,"14.0-14.4":0.39884,"14.5-14.8":1.8641,"15.0-15.1":2.28118,"15.2-15.3":7.0089,"15.4":0.05229},P:{_:"4 5.0-5.4 6.2-6.4 7.2-7.4 8.2 10.1","9.2":0.02028,"11.1-11.2":0.07099,"12.0":0.08113,"13.0":0.20282,"14.0":0.30423,"15.0":0.38536,"16.0":12.40259},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.05798},A:{"8":0.00971,"9":0.00971,"11":0.89328,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.13705},Q:{"10.4":0.01054},O:{"0":0.10542},H:{"0":0.1547},L:{"0":20.0349},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00372,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00372,"79":0,"80":0.00372,"81":0.00372,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00744,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00372,"102":0.00372,"103":0.17489,"104":0.03349,"105":0.00372,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.00744,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00372,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00372,"69":0,"70":0.01488,"71":0,"72":0,"73":0,"74":0,"75":0.00372,"76":0,"77":0.04465,"78":0.00372,"79":0.01116,"80":0.00744,"81":0.01116,"83":0.01488,"84":0.02233,"85":0.02233,"86":0.02605,"87":0.02605,"88":0.00372,"89":0.00744,"90":0.04093,"91":0.00372,"92":0.00372,"93":0.00372,"94":0.03721,"95":0.00372,"96":0.01488,"97":0.01488,"98":0.01116,"99":0.01116,"100":0.01861,"101":0.03721,"102":0.07442,"103":2.3033,"104":6.67547,"105":0.01488,"106":0.00372,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00372,"64":0.00372,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.04837,"90":0.00744,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00372,"79":0,"80":0,"81":0,"83":0,"84":0.00372,"85":0,"86":0.00372,"87":0,"88":0,"89":0,"90":0,"91":0.00372,"92":0.00372,"93":0,"94":0.00372,"95":0.00372,"96":0.00372,"97":0.00372,"98":0.00372,"99":0.00372,"100":0.00372,"101":0.01116,"102":0.01116,"103":0.56931,"104":1.58515,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.00372,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.01116,"15":0.00372,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00372,"13.1":0.01116,"14.1":0.02605,"15.1":0.00744,"15.2-15.3":0.00744,"15.4":0.02605,"15.5":0.07442,"15.6":0.16745,"16.0":0.00372},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00495,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.18798,"9.3":0.00989,"10.0-10.2":0.00247,"10.3":0.00989,"11.0-11.2":0.02721,"11.3-11.4":0,"12.0-12.1":0.09893,"12.2-12.5":0.43779,"13.0-13.1":0.2325,"13.2":0.04699,"13.3":0.26465,"13.4-13.7":1.07344,"14.0-14.4":4.47433,"14.5-14.8":3.50971,"15.0-15.1":0.80137,"15.2-15.3":0.36853,"15.4":0.56888,"15.5":3.39841,"15.6":9.05995,"16.0":0.14346},P:{"4":0.01011,"5.0-5.4":0.01011,"6.2-6.4":0,"7.2-7.4":0,"8.2":0.01011,"9.2":0.01011,"10.1":0.02022,"11.1-11.2":0.01011,"12.0":0.08088,"13.0":0.16177,"14.0":0.08088,"15.0":0.05055,"16.0":0.1921,"17.0":4.15535,"18.0":6.11676},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":1.39698},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00388,"10":0,"11":0.17473,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":35.21268},S:{"2.5":0},R:{_:"0"},M:{"0":0.08163},Q:{"10.4":0.00628},O:{"0":0.05023},H:{"0":0.10106}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KW.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KW.js index 17e4b158c79..9cac2b18a13 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KW.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KW.js @@ -1 +1 @@ -module.exports={C:{"34":0.00878,"52":0.12298,"78":0.05856,"84":0.06149,"88":0.01464,"91":0.05563,"95":0.01464,"96":0.24888,"97":0.36307,"98":0.00586,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 87 89 90 92 93 94 99 3.5 3.6"},D:{"38":0.0527,"43":0.00586,"47":0.01757,"49":0.0205,"56":0.01171,"63":0.00586,"64":0.00878,"65":0.00293,"66":0.00293,"67":0.02342,"69":0.00586,"70":0.00586,"71":0.00878,"73":0.00586,"74":0.00586,"75":0.00586,"76":0.01464,"78":0.01464,"79":0.03221,"80":0.00878,"81":0.00586,"83":0.00878,"84":0.00586,"85":0.01171,"86":0.0205,"87":0.19032,"88":0.01171,"89":0.0205,"90":0.02635,"91":0.04685,"92":0.11126,"93":0.02635,"94":0.02635,"95":0.06442,"96":0.42749,"97":5.6569,"98":12.67531,"99":0.00293,"100":0.01464,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 44 45 46 48 50 51 52 53 54 55 57 58 59 60 61 62 68 72 77 101"},F:{"28":0.01757,"46":0.01757,"82":0.25474,"83":0.68222,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00293,"16":0.00293,"17":0.00586,"18":0.01464,"84":0.00586,"85":0.00293,"89":0.00586,"90":0.00586,"92":0.01464,"93":0.00293,"94":0.00586,"95":0.03806,"96":0.07613,"97":0.67637,"98":2.09059,_:"12 13 14 79 80 81 83 86 87 88 91"},E:{"4":0,"13":0.0732,"14":0.35136,"15":0.20203,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.02635,"12.1":0.04099,"13.1":0.15811,"14.1":1.06286,"15.1":0.34843,"15.2-15.3":0.68808,"15.4":0.00878},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00336,"6.0-6.1":0,"7.0-7.1":0.01678,"8.1-8.4":0,"9.0-9.2":0.01678,"9.3":0.14765,"10.0-10.2":0.01342,"10.3":0.08389,"11.0-11.2":0.04027,"11.3-11.4":0.05033,"12.0-12.1":0.08054,"12.2-12.5":0.91944,"13.0-13.1":0.10738,"13.2":0.07382,"13.3":0.28858,"13.4-13.7":0.60737,"14.0-14.4":2.96973,"14.5-14.8":8.09713,"15.0-15.1":6.32536,"15.2-15.3":13.61043,"15.4":0.09731},P:{"4":0.16429,"5.0-5.4":0.09071,"6.2-6.4":0.11087,"7.2-7.4":0.08214,"8.2":0.08049,"9.2":0.04107,"10.1":0.02054,"11.1-11.2":0.12322,"12.0":0.05134,"13.0":0.15402,"14.0":0.24643,"15.0":0.30804,"16.0":3.0804},I:{"0":0,"3":0,"4":0.00381,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00508,"4.2-4.3":0.00127,"4.4":0,"4.4.3-4.4.4":0.03935},A:{"11":0.13762,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.10608},Q:{"10.4":0.0495},O:{"0":1.74678},H:{"0":0.83691},L:{"0":30.27026},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00286,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.06281,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00286,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.01142,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00286,"101":0.00286,"102":0.01713,"103":0.19985,"104":0.03426,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00286,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00286,"48":0,"49":0.00286,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00286,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00286,"65":0.00286,"66":0,"67":0.00857,"68":0.00286,"69":0,"70":0,"71":0.00286,"72":0,"73":0.00286,"74":0,"75":0.00286,"76":0,"77":0,"78":0.00571,"79":0.00571,"80":0.00286,"81":0.00571,"83":0.00286,"84":0.00286,"85":0.00571,"86":0.00857,"87":0.00571,"88":0.00857,"89":0.00571,"90":0.01142,"91":0.00857,"92":0.04854,"93":0.00286,"94":0.00286,"95":0.00857,"96":0.00571,"97":0.00571,"98":0.00571,"99":0.00857,"100":0.00857,"101":0.02284,"102":0.05139,"103":1.26762,"104":3.60016,"105":0.01428,"106":0.00571,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00571,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00286,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00286,"47":0,"48":0,"49":0,"50":0,"51":0.00286,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00286,"62":0,"63":0.06567,"64":0.05996,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00571,"89":0.24839,"90":0.01428,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0.01428,"14":0,"15":0,"16":0,"17":0,"18":0.00286,"79":0,"80":0,"81":0,"83":0,"84":0.00286,"85":0,"86":0.00286,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00286,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00286,"100":0.00286,"101":0.03141,"102":0.00571,"103":0.197,"104":0.53389,"105":0},E:{"4":0,"5":0,"6":0,"7":0.0257,"8":0,"9":0,"10":0,"11":0,"12":0.00286,"13":0.00857,"14":0.05139,"15":0.01428,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00286,"12.1":0.01142,"13.1":0.03997,"14.1":0.15988,"15.1":0.0257,"15.2-15.3":0.01713,"15.4":0.06852,"15.5":0.19985,"15.6":0.28836,"16.0":0.00571},G:{"8":0.00409,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00818,"8.1-8.4":0.00818,"9.0-9.2":0.00409,"9.3":0.20047,"10.0-10.2":0.01636,"10.3":0.08182,"11.0-11.2":0.02864,"11.3-11.4":0.045,"12.0-12.1":0.04909,"12.2-12.5":0.92461,"13.0-13.1":0.06546,"13.2":0.05319,"13.3":0.20456,"13.4-13.7":0.38048,"14.0-14.4":2.01696,"14.5-14.8":4.26303,"15.0-15.1":1.29282,"15.2-15.3":2.0006,"15.4":3.09704,"15.5":10.35483,"15.6":15.5302,"16.0":0.24956},P:{"4":0.17483,"5.0-5.4":0,"6.2-6.4":0.01028,"7.2-7.4":0.11312,"8.2":0,"9.2":0.02057,"10.1":0.01028,"11.1-11.2":0.07199,"12.0":0.04114,"13.0":0.09256,"14.0":0.12341,"15.0":0.05142,"16.0":0.19539,"17.0":1.62486,"18.0":1.70713},I:{"0":0,"3":0,"4":0.01821,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.03643,"4.4":0,"4.4.3-4.4.4":0.11535},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0257,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":42.08725},S:{"2.5":0},R:{_:"0"},M:{"0":0.12861},Q:{"10.4":0},O:{"0":1.62906},H:{"0":0.85232}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KY.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KY.js index 6f94b765bc5..f65cbc3d85b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KY.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KY.js @@ -1 +1 @@ -module.exports={C:{"52":0.01037,"53":0.01037,"78":0.01037,"91":0.02593,"95":0.0726,"96":0.46155,"97":1.13055,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 92 93 94 98 99 3.5 3.6"},D:{"26":0.00519,"49":0.01037,"63":0.04667,"66":0.00519,"67":0.01037,"75":0.01037,"76":0.02593,"79":0.04149,"80":0.01037,"83":0.02593,"84":0.02593,"85":0.05705,"87":0.03112,"88":0.01037,"89":0.01556,"90":0.01037,"91":0.09335,"92":0.08816,"93":0.01556,"94":0.08298,"95":0.04149,"96":0.47711,"97":9.68226,"98":19.05336,"99":0.11928,"100":0.05186,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 68 69 70 71 72 73 74 77 78 81 86 101"},F:{"82":0.67937,"83":0.63788,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.01037,"18":0.08816,"89":0.01556,"95":0.01037,"96":0.02593,"97":2.24554,"98":5.79795,_:"12 13 14 15 17 79 80 81 83 84 85 86 87 88 90 91 92 93 94"},E:{"4":0,"12":0.01037,"13":0.16595,"14":0.15039,"15":0.47193,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.01556,"11.1":0.01037,"12.1":0.05186,"13.1":1.05794,"14.1":2.42705,"15.1":0.84013,"15.2-15.3":2.63967,"15.4":0.01037},G:{"8":0.00762,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04571,"10.0-10.2":0,"10.3":0.17521,"11.0-11.2":0,"11.3-11.4":0.20822,"12.0-12.1":0.01777,"12.2-12.5":0.35549,"13.0-13.1":0.16759,"13.2":0.0127,"13.3":0.03809,"13.4-13.7":0.22599,"14.0-14.4":0.32756,"14.5-14.8":3.73772,"15.0-15.1":5.8021,"15.2-15.3":14.20434,"15.4":0.05332},P:{"4":0.0734,"5.0-5.4":0.02063,"6.2-6.4":0.01048,"7.2-7.4":0.05243,"8.2":0.01049,"9.2":0.03095,"10.1":0.02185,"11.1-11.2":0.08389,"12.0":0.01049,"13.0":0.20973,"14.0":0.04195,"15.0":0.02097,"16.0":3.55486},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00172,"4.2-4.3":0.00069,"4.4":0,"4.4.3-4.4.4":0.00241},A:{"11":0.14002,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.08665},Q:{"10.4":0},O:{"0":0.0674},H:{"0":0.02279},L:{"0":18.01079},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00459,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00459,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00919,"99":0,"100":0,"101":0.00919,"102":0.01837,"103":1.33656,"104":0.13779,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0.00459,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00459,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.05052,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.00919,"76":0.03215,"77":0,"78":0,"79":0.00459,"80":0,"81":0,"83":0.00919,"84":0,"85":0,"86":0.00919,"87":0.00919,"88":0.00919,"89":0.00919,"90":0.00459,"91":0.01378,"92":0.01837,"93":0.01837,"94":0,"95":0,"96":0.00459,"97":0.00459,"98":0.01837,"99":0.01378,"100":0.01378,"101":0.02297,"102":0.21128,"103":4.0051,"104":7.56467,"105":0.01837,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.38122,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.03674,"16":0,"17":0,"18":0.00459,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00459,"86":0,"87":0,"88":0,"89":0,"90":0.00459,"91":0,"92":0.00459,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00459,"99":0,"100":0.04134,"101":0.01378,"102":0.01378,"103":1.07476,"104":2.00255,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00459,"13":0.01837,"14":0.04593,"15":0.04593,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00459,"11.1":0,"12.1":0.02756,"13.1":0.16076,"14.1":0.28017,"15.1":0.04593,"15.2-15.3":0.05971,"15.4":0.25721,"15.5":0.4593,"15.6":1.27226,"16.0":0.00459},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.03303,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01835,"10.0-10.2":0,"10.3":0.0734,"11.0-11.2":0.00367,"11.3-11.4":0.00367,"12.0-12.1":0.0367,"12.2-12.5":0.45874,"13.0-13.1":0.00367,"13.2":0.0367,"13.3":0.01835,"13.4-13.7":0.08441,"14.0-14.4":1.69551,"14.5-14.8":1.82029,"15.0-15.1":0.27524,"15.2-15.3":0.97253,"15.4":1.01657,"15.5":7.89402,"15.6":22.10032,"16.0":0.13946},P:{"4":0.04151,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.51892,"8.2":0,"9.2":0,"10.1":0.01038,"11.1-11.2":0.05189,"12.0":0.01038,"13.0":0.11416,"14.0":0.03114,"15.0":0.01038,"16.0":0.10378,"17.0":1.61904,"18.0":2.77105},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0504,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.45356},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.0101,"9":0.00505,"10":0.00505,"11":0.03031,"5.5":0},J:{"7":0,"10":0.01622},N:{"10":0,"11":0},L:{"0":34.45378},S:{"2.5":0},R:{_:"0"},M:{"0":0.20547},Q:{"10.4":0},O:{"0":0.02163},H:{"0":0.05631}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KZ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KZ.js index 8e87d05c852..e7ec4b7ace7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KZ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/KZ.js @@ -1 +1 @@ -module.exports={C:{"48":0.00384,"51":0.00384,"52":0.28823,"55":0.03459,"57":0.02306,"75":0.00384,"78":0.02306,"80":0.00384,"81":0.00384,"82":0.00769,"88":0.00769,"89":0.02306,"91":0.03074,"93":0.00384,"94":0.00769,"95":0.03074,"96":0.44579,"97":0.82625,"98":0.01537,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 53 54 56 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 76 77 79 83 84 85 86 87 90 92 99 3.5 3.6"},D:{"22":0.00769,"40":0.00384,"49":0.04996,"57":0.00384,"60":0.00384,"61":0.00769,"63":0.01153,"64":0.00769,"65":0.01537,"66":0.00769,"67":0.00769,"68":0.01153,"69":0.00769,"70":0.00769,"71":0.03459,"72":0.01537,"73":0.01537,"74":0.04227,"75":0.00384,"76":0.01153,"77":0.00384,"78":0.00769,"79":0.69943,"80":0.05765,"81":0.01537,"83":0.03074,"84":0.06149,"85":0.02306,"86":0.14603,"87":0.06533,"88":0.04612,"89":0.0269,"90":0.0269,"91":0.09223,"92":0.05765,"93":0.4112,"94":0.0538,"95":0.06917,"96":0.60335,"97":6.79827,"98":14.69948,"99":0.00769,"100":0.0269,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 58 59 62 101"},F:{"46":0.00769,"68":0.00384,"74":0.01153,"77":0.00769,"78":0.00384,"79":0.01537,"81":0.01153,"82":0.50728,"83":2.11365,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 69 70 71 72 73 75 76 80 9.5-9.6 10.5 10.6 11.1 11.5","10.0-10.1":0,"11.6":0.37661,"12.1":0.00769},B:{"16":0.00384,"18":0.01537,"83":0.00384,"84":0.00769,"85":0.00384,"86":0.00384,"88":0.00384,"89":0.01153,"90":0.00769,"91":0.00769,"92":0.00769,"93":0.00384,"94":0.00384,"95":0.00769,"96":0.01922,"97":0.34971,"98":1.37579,_:"12 13 14 15 17 79 80 81 87"},E:{"4":0,"13":0.01922,"14":0.12298,"15":0.07686,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 11.1","5.1":0.23827,"12.1":0.01153,"13.1":0.0807,"14.1":0.39583,"15.1":0.19984,"15.2-15.3":0.27285,"15.4":0.0269},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00254,"8.1-8.4":0.0038,"9.0-9.2":0.00127,"9.3":0.01648,"10.0-10.2":0.01014,"10.3":0.02282,"11.0-11.2":0.01648,"11.3-11.4":0.02029,"12.0-12.1":0.03043,"12.2-12.5":0.60859,"13.0-13.1":0.03677,"13.2":0.02409,"13.3":0.12425,"13.4-13.7":0.3119,"14.0-14.4":1.15506,"14.5-14.8":2.96182,"15.0-15.1":2.75388,"15.2-15.3":4.54669,"15.4":0.02789},P:{"4":0.08272,"5.0-5.4":0.01022,"6.2-6.4":0.01034,"7.2-7.4":0.21713,"8.2":0.08049,"9.2":0.04136,"10.1":0.03067,"11.1-11.2":0.14475,"12.0":0.0517,"13.0":0.15509,"14.0":0.22747,"15.0":0.16543,"16.0":1.84043},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00112,"4.2-4.3":0.00336,"4.4":0,"4.4.3-4.4.4":0.01399},A:{"9":0.00392,"11":0.18054,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01591,_:"11"},R:{_:"0"},M:{"0":0.08618},Q:{"10.4":0.00616},O:{"0":0.31396},H:{"0":0.22147},L:{"0":39.32082},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00467,"52":0.18672,"53":0,"54":0,"55":0,"56":0.00934,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00467,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00467,"79":0.014,"80":0,"81":0,"82":0,"83":0,"84":0.00467,"85":0,"86":0,"87":0,"88":0.00467,"89":0,"90":0,"91":0.03268,"92":0.00467,"93":0.00467,"94":0.00467,"95":0.02334,"96":0.00467,"97":0.00934,"98":0.014,"99":0.00934,"100":0.014,"101":0.03734,"102":0.03268,"103":0.71887,"104":0.12604,"105":0.00467,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0.00467,"28":0,"29":0,"30":0,"31":0.00467,"32":0.00467,"33":0,"34":0.00467,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00467,"41":0.00467,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.014,"50":0,"51":0.00467,"52":0,"53":0,"54":0,"55":0,"56":0.00467,"57":0.00467,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00467,"66":0,"67":0.00467,"68":0.00467,"69":0.014,"70":0.00467,"71":0.00467,"72":0.00467,"73":0,"74":0.03268,"75":0,"76":0.00467,"77":0,"78":0.00467,"79":0.02801,"80":0.03268,"81":0.02334,"83":0.03268,"84":0.04201,"85":0.04668,"86":0.07002,"87":0.04668,"88":0.01867,"89":0.02334,"90":0.04201,"91":0.06068,"92":0.02801,"93":0.02334,"94":0.01867,"95":0.02801,"96":0.03734,"97":0.05135,"98":0.05602,"99":0.05135,"100":0.06535,"101":0.09803,"102":0.30342,"103":3.1369,"104":8.36972,"105":0.01867,"106":0.014,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.014,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.014,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00467,"71":0.00467,"72":0.014,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.01867,"80":0,"81":0.00467,"82":0.00467,"83":0,"84":0.00467,"85":0.07936,"86":0.00467,"87":0.00467,"88":0.01867,"89":1.35839,"90":0.22873,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0.31276,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00934,"79":0,"80":0,"81":0,"83":0,"84":0.00934,"85":0.00467,"86":0.00467,"87":0.00467,"88":0.00467,"89":0.00934,"90":0.00934,"91":0.00467,"92":0.00934,"93":0.00467,"94":0.00467,"95":0.00467,"96":0.00467,"97":0.00467,"98":0.00934,"99":0.00467,"100":0.00934,"101":0.01867,"102":0.01867,"103":0.34543,"104":0.77956,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0.00467,"10":0,"11":0,"12":0,"13":0.02334,"14":0.04668,"15":0.00934,_:"0","3.1":0,"3.2":0,"5.1":0.06068,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00467,"13.1":0.04201,"14.1":0.09803,"15.1":0.04201,"15.2-15.3":0.01867,"15.4":0.1027,"15.5":0.24274,"15.6":0.3361,"16.0":0.00934},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00423,"8.1-8.4":0.01693,"9.0-9.2":0.00212,"9.3":0.03386,"10.0-10.2":0.0127,"10.3":0.02963,"11.0-11.2":0.02116,"11.3-11.4":0.01905,"12.0-12.1":0.02116,"12.2-12.5":0.62434,"13.0-13.1":0.04868,"13.2":0.04233,"13.3":0.08042,"13.4-13.7":0.3746,"14.0-14.4":0.84445,"14.5-14.8":1.51958,"15.0-15.1":0.66455,"15.2-15.3":0.89736,"15.4":1.88995,"15.5":5.62118,"15.6":8.14182,"16.0":0.22646},P:{"4":0.11202,"5.0-5.4":0,"6.2-6.4":0.01018,"7.2-7.4":0.09165,"8.2":0,"9.2":0.02037,"10.1":0.01018,"11.1-11.2":0.09165,"12.0":0.02037,"13.0":0.07128,"14.0":0.07128,"15.0":0.07128,"16.0":0.16293,"17.0":0.86558,"18.0":0.88594},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00919,"4.4":0,"4.4.3-4.4.4":0.08882},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.05602,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":50.49196},S:{"2.5":0},R:{_:"0"},M:{"0":0.1493},Q:{"10.4":0.00533},O:{"0":0.44256},H:{"0":0.29278}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LA.js index 3364e8fa240..ab3cc67272b 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LA.js @@ -1 +1 @@ -module.exports={C:{"43":0.00583,"44":0.00291,"48":0.00291,"52":0.04371,"66":0.00291,"69":0.00291,"71":0.20107,"72":0.00583,"78":0.03205,"81":0.00874,"84":0.01166,"91":0.01748,"92":0.00291,"93":0.00291,"94":0.05828,"95":0.02914,"96":0.56823,"97":1.57356,"98":0.04371,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 45 46 47 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 67 68 70 73 74 75 76 77 79 80 82 83 85 86 87 88 89 90 99 3.5 3.6"},D:{"26":0.00291,"33":0.00583,"37":0.00874,"43":0.03788,"47":0.00291,"49":0.02331,"53":0.00291,"56":0.01166,"58":0.00291,"63":0.03497,"65":0.01166,"66":0.00291,"68":0.00291,"69":0.0204,"70":0.00874,"71":0.00583,"72":0.00874,"73":0.00583,"74":0.01166,"75":0.01457,"76":0.00874,"77":0.00291,"78":0.03788,"79":0.02331,"80":0.04662,"81":0.01748,"83":0.02623,"84":0.00874,"85":0.00583,"86":0.05245,"87":0.05245,"88":0.02331,"89":0.01457,"90":0.02331,"91":0.02914,"92":0.10782,"93":0.02331,"94":0.04371,"95":0.0408,"96":0.46624,"97":5.44918,"98":13.20916,"99":0.01748,"100":0.01457,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 34 35 36 38 39 40 41 42 44 45 46 48 50 51 52 54 55 57 59 60 61 62 64 67 101"},F:{"82":0.02331,"83":0.3963,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00291,"13":0.03205,"14":0.00583,"15":0.00583,"16":0.01457,"17":0.01166,"18":0.02914,"84":0.00583,"85":0.00291,"86":0.00583,"89":0.01166,"91":0.01166,"92":0.01748,"94":0.00583,"95":0.00874,"96":0.0204,"97":0.50995,"98":1.88244,_:"79 80 81 83 87 88 90 93"},E:{"4":0,"12":0.03788,"13":0.01166,"14":0.11656,"15":0.0408,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 15.4","9.1":0.00583,"10.1":0.03788,"11.1":0.00874,"12.1":0.04371,"13.1":0.09033,"14.1":0.20981,"15.1":0.11656,"15.2-15.3":0.23603},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00491,"7.0-7.1":0.00491,"8.1-8.4":0,"9.0-9.2":0.00123,"9.3":0.0785,"10.0-10.2":0.01717,"10.3":0.06624,"11.0-11.2":0.06869,"11.3-11.4":0.10058,"12.0-12.1":0.06256,"12.2-12.5":1.52468,"13.0-13.1":0.05152,"13.2":0.01104,"13.3":0.14474,"13.4-13.7":0.52008,"14.0-14.4":1.29408,"14.5-14.8":2.99784,"15.0-15.1":1.96013,"15.2-15.3":3.32412,"15.4":0.02576},P:{"4":0.39876,"5.0-5.4":0.03067,"6.2-6.4":0.03067,"7.2-7.4":0.23517,"8.2":0.01022,"9.2":0.07157,"10.1":0.02045,"11.1-11.2":0.17382,"12.0":0.11247,"13.0":0.15337,"14.0":0.38854,"15.0":0.28629,"16.0":1.85066},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00394,"4.2-4.3":0.00262,"4.4":0,"4.4.3-4.4.4":0.02887},A:{"10":0.01153,"11":0.25947,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.20549},Q:{"10.4":0.12755},O:{"0":1.60144},H:{"0":0.30189},L:{"0":50.6704},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00301,"48":0,"49":0,"50":0,"51":0,"52":0.00602,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00902,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00301,"67":0,"68":0,"69":0,"70":0,"71":0.01805,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00301,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00301,"85":0,"86":0,"87":0,"88":0.00301,"89":0,"90":0,"91":0.00301,"92":0.00301,"93":0.00301,"94":0.00602,"95":0.00902,"96":0,"97":0.00902,"98":0.00301,"99":0.00301,"100":0.00301,"101":0.00602,"102":0.01203,"103":0.38202,"104":0.08422,"105":0.00602,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00301,"39":0,"40":0,"41":0.02106,"42":0,"43":0.00902,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00602,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00902,"57":0,"58":0.00301,"59":0,"60":0,"61":0,"62":0.00301,"63":0.00301,"64":0.00301,"65":0.00301,"66":0,"67":0,"68":0.00602,"69":0.00902,"70":0.00301,"71":0.00301,"72":0.00301,"73":0.00301,"74":0.00602,"75":0.00301,"76":0.00902,"77":0,"78":0.00902,"79":0.03008,"80":0.00301,"81":0.01203,"83":0.02707,"84":0.01203,"85":0.00602,"86":0.02406,"87":0.03309,"88":0.01203,"89":0.01805,"90":0.02707,"91":0.01504,"92":0.03008,"93":0.00902,"94":0.01504,"95":0.01203,"96":0.02707,"97":0.03008,"98":0.02106,"99":0.02707,"100":0.04211,"101":0.05414,"102":0.09024,"103":1.51302,"104":3.91942,"105":0.01203,"106":0.00902,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00301,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00301,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00301,"64":0.00301,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00301,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00301,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00301,"86":0,"87":0,"88":0.00301,"89":0.09024,"90":0.00902,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00301,"13":0,"14":0,"15":0.00301,"16":0.00301,"17":0,"18":0.00902,"79":0,"80":0,"81":0,"83":0,"84":0.00301,"85":0.00301,"86":0.00301,"87":0.00301,"88":0.00301,"89":0.00301,"90":0.00602,"91":0.00301,"92":0.00902,"93":0.00301,"94":0.00301,"95":0.00301,"96":0.00301,"97":0.00301,"98":0.00301,"99":0.00301,"100":0.00902,"101":0.00902,"102":0.02106,"103":0.24966,"104":0.64973,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01203,"14":0.01805,"15":0.00602,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00301,"13.1":0.01504,"14.1":0.03008,"15.1":0.00902,"15.2-15.3":0.01504,"15.4":0.02106,"15.5":0.06317,"15.6":0.12934,"16.0":0.00301},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00457,"5.0-5.1":0,"6.0-6.1":0.00914,"7.0-7.1":0.00457,"8.1-8.4":0,"9.0-9.2":0.0701,"9.3":0.10515,"10.0-10.2":0.01219,"10.3":0.09906,"11.0-11.2":0.05029,"11.3-11.4":0.032,"12.0-12.1":0.04115,"12.2-12.5":1.36393,"13.0-13.1":0.08077,"13.2":0.04419,"13.3":0.06705,"13.4-13.7":0.34289,"14.0-14.4":0.92351,"14.5-14.8":1.52242,"15.0-15.1":0.50443,"15.2-15.3":0.76045,"15.4":0.84427,"15.5":2.98693,"15.6":5.27742,"16.0":0.07925},P:{"4":0.31533,"5.0-5.4":0,"6.2-6.4":0.01017,"7.2-7.4":0.26447,"8.2":0,"9.2":0.12206,"10.1":0.01017,"11.1-11.2":0.12206,"12.0":0.05086,"13.0":0.22378,"14.0":0.18309,"15.0":0.13223,"16.0":0.31533,"17.0":1.16976,"18.0":1.01718},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01371,"4.4":0,"4.4.3-4.4.4":0.17133},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00578,"10":0,"11":0.06942,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":68.92907},S:{"2.5":0},R:{_:"0"},M:{"0":0.11886},Q:{"10.4":0.04195},O:{"0":1.1327},H:{"0":0.26478}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LB.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LB.js index eefe4835b72..2c3afb3b982 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LB.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LB.js @@ -1 +1 @@ -module.exports={C:{"2":0.00325,"43":0.00325,"47":0.00325,"48":0.00325,"52":0.04868,"58":0.00649,"67":0.00325,"72":0.00974,"78":0.02596,"79":0.00325,"84":0.00325,"88":0.00649,"89":0.00325,"91":0.03245,"94":0.01947,"95":0.01623,"96":0.76258,"97":0.98973,"98":0.01623,_:"3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 49 50 51 53 54 55 56 57 59 60 61 62 63 64 65 66 68 69 70 71 73 74 75 76 77 80 81 82 83 85 86 87 90 92 93 99 3.5","3.6":0.00649},D:{"4":0.01298,"5":0.00325,"6":0.00325,"11":0.00325,"34":0.00325,"38":0.00649,"43":0.00325,"49":0.06166,"55":0.00325,"58":0.00325,"60":0.00649,"63":0.00325,"65":0.01623,"66":0.00325,"67":0.00974,"68":0.00649,"69":0.00649,"70":0.00649,"72":0.00649,"73":0.00974,"74":0.00649,"75":0.00649,"76":0.00325,"77":0.00649,"78":0.00649,"79":0.04219,"80":0.02596,"81":0.02272,"83":0.01947,"84":0.01623,"85":0.04543,"86":0.02596,"87":0.04868,"88":0.01947,"89":0.01947,"90":0.02596,"91":0.08762,"92":0.05517,"93":0.01623,"94":0.03245,"95":0.06166,"96":0.45106,"97":6.02272,"98":14.39807,"99":0.00974,"100":0.01623,_:"7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 44 45 46 47 48 50 51 52 53 54 56 57 59 61 62 64 71 101"},F:{"9":0.00325,"69":0.00974,"79":0.00649,"82":0.13629,"83":0.52245,_:"11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 70 71 72 73 74 75 76 77 78 80 81 10.5 10.6 11.1 11.5 11.6 12.1","9.5-9.6":0.00649,"10.0-10.1":0},B:{"12":0.00649,"13":0.00649,"14":0.00649,"15":0.00974,"16":0.00325,"17":0.00974,"18":0.04219,"84":0.00325,"89":0.00649,"90":0.00974,"92":0.01623,"94":0.00649,"95":0.00974,"96":0.02921,"97":0.62304,"98":2.35263,_:"79 80 81 83 85 86 87 88 91 93"},E:{"4":0.00649,"5":0.00649,"10":0.00325,"11":0.00325,"12":0.00649,"13":0.03894,"14":0.21093,"15":0.1006,_:"0 6 7 8 9 3.2 6.1 7.1","3.1":0.00649,"5.1":0.00974,"9.1":0.00325,"10.1":0.00974,"11.1":0.0357,"12.1":0.08762,"13.1":0.17523,"14.1":0.66198,"15.1":0.25311,"15.2-15.3":0.45755,"15.4":0.00649},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.03905,"6.0-6.1":0.00434,"7.0-7.1":0.03761,"8.1-8.4":0.00434,"9.0-9.2":0.00289,"9.3":0.07088,"10.0-10.2":0.01013,"10.3":0.07955,"11.0-11.2":0.02604,"11.3-11.4":0.06654,"12.0-12.1":0.05496,"12.2-12.5":0.94163,"13.0-13.1":0.02025,"13.2":0.00723,"13.3":0.06075,"13.4-13.7":0.23577,"14.0-14.4":0.86497,"14.5-14.8":2.84514,"15.0-15.1":2.43869,"15.2-15.3":6.60877,"15.4":0.03616},P:{"4":0.18507,"5.0-5.4":0.03067,"6.2-6.4":0.03067,"7.2-7.4":0.2776,"8.2":0.01022,"9.2":0.05141,"10.1":0.01028,"11.1-11.2":0.19535,"12.0":0.07197,"13.0":0.24675,"14.0":0.28788,"15.0":0.23647,"16.0":4.26679},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00162,"4.2-4.3":0.00648,"4.4":0,"4.4.3-4.4.4":0.05269},A:{"6":0.00649,"7":0.00649,"8":0.00974,"9":0.00649,"11":0.21742,_:"10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.10808},Q:{"10.4":0},O:{"0":0.16888},H:{"0":0.23023},L:{"0":44.43901},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00928,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00619,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00928,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00619,"100":0,"101":0.00309,"102":0.01547,"103":0.41137,"104":0.0897,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00309,"39":0,"40":0.00309,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00309,"49":0.00928,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00619,"66":0,"67":0.00309,"68":0,"69":0,"70":0.00309,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00619,"80":0.00309,"81":0.02165,"83":0.00619,"84":0.00619,"85":0.00619,"86":0.01547,"87":0.01237,"88":0.00619,"89":0.00619,"90":0.00309,"91":0.01237,"92":0.00928,"93":0.00309,"94":0.00619,"95":0.00928,"96":0.00928,"97":0.00928,"98":0.01237,"99":0.01237,"100":0.01856,"101":0.02474,"102":0.05877,"103":1.64548,"104":4.14153,"105":0.00928,"106":0.00309,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00928,"64":0.01237,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00309,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00619,"86":0,"87":0,"88":0.00309,"89":0.15156,"90":0.01856,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.00309,"17":0,"18":0.00928,"79":0,"80":0,"81":0,"83":0,"84":0.00309,"85":0,"86":0,"87":0,"88":0,"89":0.00309,"90":0,"91":0,"92":0.00309,"93":0,"94":0,"95":0,"96":0.00619,"97":0.00309,"98":0,"99":0,"100":0.00309,"101":0.00619,"102":0.00309,"103":0.20105,"104":0.4856,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01237,"14":0.04949,"15":0.00619,_:"0","3.1":0,"3.2":0,"5.1":0.02474,"6.1":0,"7.1":0,"9.1":0.00619,"10.1":0,"11.1":0.00619,"12.1":0.01237,"13.1":0.03712,"14.1":0.0897,"15.1":0.01547,"15.2-15.3":0.03402,"15.4":0.04949,"15.5":0.19795,"15.6":0.21342,"16.0":0.00619},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00426,"7.0-7.1":0.02982,"8.1-8.4":0.00213,"9.0-9.2":0.00639,"9.3":0.18528,"10.0-10.2":0.01278,"10.3":0.18315,"11.0-11.2":0.02343,"11.3-11.4":0.04472,"12.0-12.1":0.04472,"12.2-12.5":1.05632,"13.0-13.1":0.01704,"13.2":0.00639,"13.3":0.07454,"13.4-13.7":0.17037,"14.0-14.4":0.55372,"14.5-14.8":1.36726,"15.0-15.1":0.39612,"15.2-15.3":0.78585,"15.4":1.10318,"15.5":5.3881,"15.6":9.66664,"16.0":0.16612},P:{"4":0.19355,"5.0-5.4":0.01019,"6.2-6.4":0.02037,"7.2-7.4":0.3056,"8.2":0,"9.2":0.05093,"10.1":0.02037,"11.1-11.2":0.18336,"12.0":0.04075,"13.0":0.21392,"14.0":0.19355,"15.0":0.11205,"16.0":0.27504,"17.0":2.27164,"18.0":2.58743},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00272,"4.2-4.3":0.00906,"4.4":0,"4.4.3-4.4.4":0.12318},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00309,"9":0,"10":0,"11":0.0433,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":60.28423},S:{"2.5":0},R:{_:"0"},M:{"0":0.13123},Q:{"10.4":0},O:{"0":0.20721},H:{"0":0.32042}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LC.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LC.js index 42322a7f4ea..04a999e158f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LC.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LC.js @@ -1 +1 @@ -module.exports={C:{"56":0.00788,"87":0.24816,"89":0.00394,"91":0.00788,"95":0.05515,"96":0.4136,"97":0.59873,"98":0.03939,"99":0.05515,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 88 90 92 93 94 3.5 3.6"},D:{"34":0.01576,"49":0.01182,"51":0.00394,"63":0.00394,"69":0.06302,"71":0.00394,"75":0.01182,"76":0.33482,"77":0.0197,"78":0.01182,"79":0.19695,"80":0.01576,"81":0.11423,"83":0.01576,"84":0.02363,"85":0.01182,"86":0.02757,"87":0.00394,"88":0.03939,"89":0.0197,"90":0.01182,"91":0.03545,"92":0.02757,"93":0.1615,"94":0.15362,"95":0.07878,"96":0.59873,"97":7.05081,"98":15.15727,"99":0.08272,"100":0.03151,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 70 72 73 74 101"},F:{"28":0.02757,"82":0.06696,"83":0.74447,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"13":0.00394,"14":0.00788,"16":0.00788,"17":0.0197,"18":0.14968,"87":0.00394,"89":0.00394,"92":0.01576,"95":0.02363,"96":0.03151,"97":1.25654,"98":4.28563,_:"12 15 79 80 81 83 84 85 86 88 90 91 93 94"},E:{"4":0,"13":0.01182,"14":0.11817,"15":0.08272,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 15.4","5.1":0.00394,"10.1":0.02363,"11.1":0.00394,"12.1":0.0197,"13.1":0.18907,"14.1":0.62236,"15.1":0.19695,"15.2-15.3":0.90203},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00354,"6.0-6.1":0,"7.0-7.1":0.00236,"8.1-8.4":0,"9.0-9.2":0.0059,"9.3":0.15332,"10.0-10.2":0,"10.3":0.02713,"11.0-11.2":0.00472,"11.3-11.4":0.03184,"12.0-12.1":0.01415,"12.2-12.5":0.51304,"13.0-13.1":0.00118,"13.2":0.00354,"13.3":0.02948,"13.4-13.7":0.18752,"14.0-14.4":0.68287,"14.5-14.8":1.50727,"15.0-15.1":1.96251,"15.2-15.3":6.63527,"15.4":0.02713},P:{"4":0.16724,"5.0-5.4":0.01121,"6.2-6.4":0.01012,"7.2-7.4":0.68986,"8.2":0.03083,"9.2":0.03136,"10.1":0.03037,"11.1-11.2":0.20905,"12.0":0.0209,"13.0":0.14633,"14.0":0.20905,"15.0":0.36584,"16.0":5.94746},I:{"0":0,"3":0,"4":0.00155,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00052,"4.4":0,"4.4.3-4.4.4":0.04035},A:{"11":0.07484,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.2424},Q:{"10.4":0},O:{"0":0.24846},H:{"0":0.23523},L:{"0":41.07256},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.01639,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.0041,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.05326,"88":0,"89":0.0041,"90":0,"91":0.0041,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.0041,"99":0,"100":0.0041,"101":0,"102":0.03687,"103":0.36873,"104":0.06555,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.0041,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.0041,"57":0,"58":0,"59":0,"60":0.0041,"61":0,"62":0,"63":0,"64":0,"65":0.0041,"66":0,"67":0.0041,"68":0,"69":0.0041,"70":0.00819,"71":0,"72":0,"73":0.0041,"74":0.0041,"75":0.00819,"76":0.03687,"77":0.0041,"78":0.0041,"79":0.06555,"80":0,"81":0.02049,"83":0.03687,"84":0,"85":0,"86":0.0041,"87":0.00819,"88":0.00819,"89":0.00819,"90":0.0041,"91":0,"92":0.0041,"93":0.03687,"94":0.00819,"95":0.01639,"96":0.03687,"97":0.03278,"98":0.08194,"99":0.03687,"100":0.04916,"101":0.02458,"102":0.11881,"103":2.85971,"104":6.44868,"105":0.05326,"106":0.03687,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.0041,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0041,"64":0.0041,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01229,"89":0.23763,"90":0.02049,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.0041,"15":0,"16":0,"17":0,"18":0.01229,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.0041,"91":0,"92":0.02868,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.07784,"101":0.01229,"102":0.0041,"103":0.66371,"104":1.57325,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00819,"14":0.01229,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.02868,"11.1":0,"12.1":0.0041,"13.1":0.05326,"14.1":0.02868,"15.1":0.01639,"15.2-15.3":0.00819,"15.4":0.06146,"15.5":0.14749,"15.6":0.2745,"16.0":0},G:{"8":0.00767,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00153,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.19493,"10.0-10.2":0,"10.3":0.05986,"11.0-11.2":0.01228,"11.3-11.4":0.01074,"12.0-12.1":0.00614,"12.2-12.5":0.50036,"13.0-13.1":0.0046,"13.2":0.0046,"13.3":0.02302,"13.4-13.7":0.02302,"14.0-14.4":0.24711,"14.5-14.8":0.56636,"15.0-15.1":0.18418,"15.2-15.3":0.16423,"15.4":0.76282,"15.5":3.65293,"15.6":8.74555,"16.0":0.17651},P:{"4":0.14722,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.53632,"8.2":0,"9.2":0.03155,"10.1":0.01052,"11.1-11.2":0.10516,"12.0":0.02103,"13.0":0.08413,"14.0":0.05258,"15.0":0.09464,"16.0":0.14722,"17.0":2.76572,"18.0":3.27049},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.13856,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.87097},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00819,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":58.25763},S:{"2.5":0},R:{_:"0"},M:{"0":0.15938},Q:{"10.4":0},O:{"0":0.40731},H:{"0":0.1956}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LI.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LI.js index 84245199a2f..19c13bc2cd3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LI.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LI.js @@ -1 +1 @@ -module.exports={C:{"54":0.17758,"77":0.41857,"78":0.06976,"89":0.01903,"91":0.06976,"93":0.00634,"94":0.11416,"95":0.09513,"96":2.35288,"97":4.49648,"98":0.01903,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 79 80 81 82 83 84 85 86 87 88 90 92 99 3.5 3.6"},D:{"49":0.83714,"56":0.01903,"65":0.00634,"72":0.18392,"73":0.06342,"79":0.1205,"81":0.01903,"83":0.00634,"84":0.05708,"87":0.00634,"89":0.06342,"90":0.02537,"91":0.10147,"92":0.11416,"93":0.22831,"94":0.05708,"95":0.02537,"96":0.69762,"97":8.82806,"98":20.62418,"99":0.01903,"100":0.13318,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 57 58 59 60 61 62 63 64 66 67 68 69 70 71 74 75 76 77 78 80 85 86 88 101"},F:{"81":0.04439,"82":0.38052,"83":1.54745,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"13":0.10147,"83":0.00634,"90":0.00634,"92":0.40589,"93":0.04439,"94":0.01268,"95":0.13318,"96":0.06342,"97":2.16262,"98":8.33339,_:"12 14 15 16 17 18 79 80 81 84 85 86 87 88 89 91"},E:{"4":0,"13":0.03171,"14":0.53907,"15":0.16489,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.27271,"12.1":0.03171,"13.1":1.14156,"14.1":1.3889,"15.1":0.93227,"15.2-15.3":2.6573,"15.4":0.01268},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02527,"10.0-10.2":0,"10.3":0.01608,"11.0-11.2":0.05743,"11.3-11.4":0.0023,"12.0-12.1":0.01149,"12.2-12.5":0.23892,"13.0-13.1":0.00689,"13.2":0,"13.3":0.06662,"13.4-13.7":0.07351,"14.0-14.4":0.86379,"14.5-14.8":4.51193,"15.0-15.1":3.27368,"15.2-15.3":13.6185,"15.4":0.20216},P:{"4":0.03167,"5.0-5.4":0.89089,"6.2-6.4":0.05053,"7.2-7.4":0.56594,"8.2":0.01022,"9.2":0.11117,"10.1":0.05053,"11.1-11.2":0.27286,"12.0":0.09095,"13.0":0.12667,"14.0":0.03167,"15.0":0.32339,"16.0":2.3962},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00216,"4.4":0,"4.4.3-4.4.4":0.04174},A:{"11":0.241,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.25606},Q:{"10.4":0},O:{"0":0},H:{"0":0.52986},L:{"0":10.09171},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.05546,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01849,"79":0,"80":0,"81":0.00616,"82":0,"83":0,"84":0.01232,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.02465,"92":0,"93":0,"94":0.01232,"95":0.00616,"96":0.00616,"97":0.00616,"98":0.01232,"99":0,"100":0.03081,"101":0.04313,"102":0.54842,"103":5.04668,"104":1.18927,"105":0.01232,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.02465,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.14789,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00616,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.02465,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.11092,"80":0,"81":0.00616,"83":0,"84":0.09859,"85":0,"86":0.00616,"87":0.10475,"88":0,"89":0.08011,"90":0.00616,"91":0.00616,"92":0,"93":0.03081,"94":0,"95":0.06162,"96":0.01849,"97":0.14173,"98":0.01232,"99":0.04313,"100":0.1787,"101":0.06778,"102":0.19102,"103":3.93136,"104":10.25973,"105":0.01849,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.01232,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00616,"86":0.00616,"87":0.00616,"88":0.00616,"89":0.78874,"90":0.02465,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.02465,"98":0.39437,"99":0,"100":0.01849,"101":0.01849,"102":0.16021,"103":1.50969,"104":5.53348,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.0493,"14":0.16637,"15":0.07394,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.34507,"12.1":0.06162,"13.1":1.08451,"14.1":0.40669,"15.1":0.19718,"15.2-15.3":0.11708,"15.4":0.2588,"15.5":0.75176,"15.6":2.29843,"16.0":0.15405},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01878,"10.0-10.2":0,"10.3":0.05633,"11.0-11.2":0.04507,"11.3-11.4":0,"12.0-12.1":0.00751,"12.2-12.5":2.03544,"13.0-13.1":0,"13.2":0.01502,"13.3":0,"13.4-13.7":0.13144,"14.0-14.4":0.42812,"14.5-14.8":1.26934,"15.0-15.1":0.27415,"15.2-15.3":0.60838,"15.4":1.3144,"15.5":6.92877,"15.6":24.19625,"16.0":0.22157},P:{"4":0.23784,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0.01034,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0,"15.0":0,"16.0":0.01034,"17.0":0.88932,"18.0":1.58215},I:{"0":0,"3":0,"4":0.04045,"2.1":0,"2.2":0.00279,"2.3":0,"4.1":0.07532,"4.2-4.3":0.15344,"4.4":0,"4.4.3-4.4.4":0.01395},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.01232,"9":0,"10":0,"11":0.05546,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":19.02344},S:{"2.5":0},R:{_:"0"},M:{"0":0.86739},Q:{"10.4":0},O:{"0":0.00384},H:{"0":0.18168}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LK.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LK.js index 64df55c8757..a69d82a7314 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LK.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LK.js @@ -1 +1 @@ -module.exports={C:{"41":0.0038,"52":0.02663,"56":0.0038,"78":0.00761,"88":0.00761,"89":0.01141,"90":0.0038,"91":0.0989,"92":0.00761,"93":0.06847,"94":0.01141,"95":0.02282,"96":0.61625,"97":0.97763,"98":0.04945,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 43 44 45 46 47 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 99 3.5 3.6"},D:{"22":0.0038,"38":0.00761,"49":0.01522,"63":0.01141,"65":0.01141,"67":0.00761,"68":0.00761,"70":0.00761,"71":0.0038,"74":0.01141,"75":0.00761,"76":0.0038,"77":0.00761,"78":0.00761,"79":0.02282,"80":0.01522,"81":0.04945,"83":0.02282,"84":0.01141,"85":0.01902,"86":0.03043,"87":0.04184,"88":0.01902,"89":0.01902,"90":0.02663,"91":0.03424,"92":0.05326,"93":0.07228,"94":0.03804,"95":0.04565,"96":0.34997,"97":6.4706,"98":16.02245,"99":0.01902,"100":0.00761,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 64 66 69 72 73 101"},F:{"72":0.0038,"79":0.00761,"80":0.01141,"82":0.11412,"83":1.01947,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00761,"13":0.0038,"14":0.0038,"15":0.0038,"16":0.00761,"17":0.0038,"18":0.03043,"84":0.01141,"85":0.0038,"88":0.0038,"89":0.00761,"90":0.0038,"91":0.00761,"92":0.01902,"93":0.0038,"94":0.00761,"95":0.01522,"96":0.05706,"97":2.1873,"98":7.33031,_:"79 80 81 83 86 87"},E:{"4":0,"13":0.03043,"14":0.04945,"15":0.03804,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.0038,"11.1":0.0038,"12.1":0.01141,"13.1":0.03804,"14.1":0.14836,"15.1":0.07608,"15.2-15.3":0.13694},G:{"8":0.00053,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00053,"5.0-5.1":0,"6.0-6.1":0.00212,"7.0-7.1":0.00582,"8.1-8.4":0.00371,"9.0-9.2":0.00265,"9.3":0.036,"10.0-10.2":0.00794,"10.3":0.03811,"11.0-11.2":0.03282,"11.3-11.4":0.02858,"12.0-12.1":0.02964,"12.2-12.5":0.47853,"13.0-13.1":0.02806,"13.2":0.01535,"13.3":0.07093,"13.4-13.7":0.17045,"14.0-14.4":0.55688,"14.5-14.8":0.90466,"15.0-15.1":0.96289,"15.2-15.3":1.90354,"15.4":0.01165},P:{"4":0.64575,"5.0-5.4":0.05095,"6.2-6.4":0.03075,"7.2-7.4":0.9635,"8.2":0.01009,"9.2":0.082,"10.1":0.03075,"11.1-11.2":0.31775,"12.0":0.07175,"13.0":0.25625,"14.0":0.369,"15.0":0.287,"16.0":1.36325},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00123,"4.2-4.3":0.00339,"4.4":0,"4.4.3-4.4.4":0.04495},A:{"11":0.03424,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.13631},Q:{"10.4":0},O:{"0":1.73488},H:{"0":1.59554},L:{"0":49.28983},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00392,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00785,"92":0.00392,"93":0,"94":0.00392,"95":0.00392,"96":0,"97":0.00392,"98":0.00392,"99":0.00785,"100":0.00392,"101":0.00785,"102":0.02354,"103":0.52961,"104":0.11769,"105":0.00392,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00392,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00392,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00392,"61":0,"62":0,"63":0.00392,"64":0.00392,"65":0,"66":0,"67":0,"68":0.00392,"69":0.00392,"70":0.00785,"71":0.00392,"72":0.00392,"73":0.00392,"74":0.02354,"75":0,"76":0,"77":0.00392,"78":0.00392,"79":0.01177,"80":0.00785,"81":0.03923,"83":0.00785,"84":0.00392,"85":0.00785,"86":0.01177,"87":0.01569,"88":0.00785,"89":0.00392,"90":0.00785,"91":0.01569,"92":0.01962,"93":0.00785,"94":0.01177,"95":0.01177,"96":0.01962,"97":0.01177,"98":0.01569,"99":0.01569,"100":0.01962,"101":0.03138,"102":0.06669,"103":2.22434,"104":5.97473,"105":0.02354,"106":0.00392,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.01569,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00392,"52":0,"53":0,"54":0.00392,"55":0.00392,"56":0,"57":0,"58":0.00785,"60":0.01177,"62":0,"63":0.10592,"64":0.06669,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00392,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00392,"80":0,"81":0,"82":0,"83":0,"84":0.00392,"85":0.00785,"86":0.00392,"87":0,"88":0.01569,"89":0.3413,"90":0.05885,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00392,"13":0,"14":0.00392,"15":0.00392,"16":0.00392,"17":0.00392,"18":0.00785,"79":0,"80":0,"81":0,"83":0,"84":0.00392,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.01177,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00392,"99":0.00392,"100":0.00392,"101":0.00785,"102":0.00785,"103":1.28674,"104":3.41301,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00392,"14":0.01177,"15":0.00392,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.01177,"14.1":0.02354,"15.1":0.00785,"15.2-15.3":0.00785,"15.4":0.01962,"15.5":0.04708,"15.6":0.05492,"16.0":0},G:{"8":0.00089,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00716,"8.1-8.4":0.00358,"9.0-9.2":0.00268,"9.3":0.05099,"10.0-10.2":0.00716,"10.3":0.04741,"11.0-11.2":0.02058,"11.3-11.4":0.02505,"12.0-12.1":0.04205,"12.2-12.5":0.69868,"13.0-13.1":0.03847,"13.2":0.01968,"13.3":0.0832,"13.4-13.7":0.15745,"14.0-14.4":0.54749,"14.5-14.8":0.70047,"15.0-15.1":0.38468,"15.2-15.3":0.44551,"15.4":0.5797,"15.5":1.99227,"15.6":3.01927,"16.0":0.06799},P:{"4":0.53864,"5.0-5.4":0.01016,"6.2-6.4":0.02033,"7.2-7.4":0.87402,"8.2":0.03049,"9.2":0.0813,"10.1":0.03049,"11.1-11.2":0.24391,"12.0":0.04065,"13.0":0.18293,"14.0":0.18293,"15.0":0.11179,"16.0":0.35571,"17.0":0.90451,"18.0":0.5488},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0011,"4.2-4.3":0.00552,"4.4":0,"4.4.3-4.4.4":0.06123},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01177,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":66.19147},S:{"2.5":0},R:{_:"0"},M:{"0":0.11546},Q:{"10.4":0},O:{"0":1.3734},H:{"0":1.36929}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LR.js index 9358bb61460..c6b051d3b62 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LR.js @@ -1 +1 @@ -module.exports={C:{"24":0.00888,"31":0.00222,"43":0.00222,"47":0.00888,"49":0.00222,"51":0.04886,"60":0.00444,"66":0.00444,"68":0.00888,"72":0.00666,"78":0.00666,"88":0.00444,"91":0.01333,"94":0.02221,"95":0.01999,"96":0.45975,"97":0.55081,"98":0.02443,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 32 33 34 35 36 37 38 39 40 41 42 44 45 46 48 50 52 53 54 55 56 57 58 59 61 62 63 64 65 67 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 87 89 90 92 93 99 3.5 3.6"},D:{"11":0.01333,"30":0.00888,"33":0.00444,"38":0.00222,"39":0.00444,"43":0.00444,"45":0.00222,"47":0.00222,"49":0.00444,"51":0.00888,"52":0.00444,"57":0.00666,"58":0.00444,"60":0.00444,"61":0.02443,"63":0.00666,"64":0.03332,"67":0.00444,"68":0.00444,"69":0.00888,"71":0.00888,"72":0.00666,"73":0.00222,"74":0.03109,"75":0.02221,"76":0.03332,"77":0.01333,"78":0.02443,"79":0.01777,"80":0.01333,"81":0.01999,"85":0.01777,"86":0.01777,"87":0.06441,"88":0.02221,"89":0.01333,"90":0.02887,"91":0.01999,"92":0.05775,"93":0.01555,"94":0.03554,"95":0.02221,"96":0.21544,"97":3.16048,"98":5.33484,"99":0.00222,"100":0.00666,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 34 35 36 37 40 41 42 44 46 48 50 53 54 55 56 59 62 65 66 70 83 84 101"},F:{"18":0.00222,"46":0.00444,"63":0.00444,"68":0.00888,"72":0.01111,"79":0.01777,"82":0.02665,"83":0.39756,_:"9 11 12 15 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 64 65 66 67 69 70 71 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.09995,"13":0.03109,"14":0.02665,"15":0.03554,"16":0.0422,"17":0.01333,"18":0.15103,"80":0.00444,"83":0.00666,"84":0.01111,"85":0.01333,"88":0.00666,"89":0.03776,"90":0.01555,"91":0.01777,"92":0.04664,"93":0.01333,"94":0.05553,"95":0.01777,"96":0.07551,"97":0.63965,"98":1.53693,_:"79 81 86 87"},E:{"4":0,"10":0.00222,"13":0.01333,"14":0.03109,"15":0.03998,_:"0 5 6 7 8 9 11 12 3.1 3.2 5.1 6.1 7.1 10.1 15.4","9.1":0.00666,"11.1":0.00666,"12.1":0.00888,"13.1":0.01111,"14.1":0.08218,"15.1":0.02221,"15.2-15.3":0.02221},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00742,"6.0-6.1":0,"7.0-7.1":0.00834,"8.1-8.4":0,"9.0-9.2":0.00185,"9.3":0.13534,"10.0-10.2":0.01205,"10.3":0.02595,"11.0-11.2":0.03893,"11.3-11.4":0.01576,"12.0-12.1":0.08713,"12.2-12.5":1.01779,"13.0-13.1":0.05098,"13.2":0.02225,"13.3":0.33463,"13.4-13.7":0.2957,"14.0-14.4":1.6991,"14.5-14.8":2.81608,"15.0-15.1":1.05858,"15.2-15.3":1.63792,"15.4":0.00556},P:{"4":0.08287,"5.0-5.4":0.89089,"6.2-6.4":0.01036,"7.2-7.4":0.14503,"8.2":0.01022,"9.2":0.0518,"10.1":0.02072,"11.1-11.2":0.10359,"12.0":0.05073,"13.0":0.04144,"14.0":0.07251,"15.0":0.09323,"16.0":0.82874},I:{"0":0,"3":0,"4":0.00255,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00102,"4.4":0,"4.4.3-4.4.4":0.02754},A:{"8":0.00222,"11":0.14214,_:"6 7 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.14778},Q:{"10.4":0},O:{"0":1.29893},H:{"0":6.75252},L:{"0":64.39758},S:{"2.5":0.24112}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00222,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0.00445,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.06002,"92":0,"93":0,"94":0,"95":0,"96":0.00222,"97":0,"98":0.01112,"99":0,"100":0,"101":0.00222,"102":0.00667,"103":0.16895,"104":0.02445,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00222,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00222,"44":0,"45":0,"46":0,"47":0.00222,"48":0,"49":0.00222,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0.00445,"63":0,"64":0.00445,"65":0.00222,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0.00222,"75":0.00667,"76":0.00445,"77":0,"78":0,"79":0.00889,"80":0.00222,"81":0.01556,"83":0,"84":0,"85":0.00445,"86":0.00667,"87":0.00667,"88":0.00667,"89":0.00222,"90":0.00222,"91":0.00222,"92":0.00445,"93":0.00445,"94":0.00222,"95":0.00222,"96":0.00667,"97":0.00222,"98":0.00889,"99":0.00889,"100":0.01112,"101":0.00889,"102":0.01334,"103":0.47128,"104":1.13818,"105":0.00222,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00445,"25":0,"26":0,"27":0.00222,"28":0,"29":0,"30":0.00222,"31":0,"32":0.00222,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00222,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0.00222,"54":0,"55":0.00222,"56":0,"57":0.00445,"58":0.01334,"60":0.24675,"62":0,"63":0.24453,"64":0.06447,"65":0,"66":0,"67":0.00889,"68":0,"69":0,"70":0.00222,"71":0,"72":0.00222,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00667,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00222,"89":0.06669,"90":0.01112,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.02445},B:{"12":0.01112,"13":0.00667,"14":0.00222,"15":0.00667,"16":0.00445,"17":0.00445,"18":0.02223,"79":0,"80":0,"81":0,"83":0,"84":0.00222,"85":0.00445,"86":0,"87":0,"88":0,"89":0.00222,"90":0.00445,"91":0.00222,"92":0.01334,"93":0,"94":0,"95":0.00445,"96":0.00222,"97":0.00222,"98":0.00222,"99":0.00222,"100":0.01334,"101":0.00889,"102":0.01556,"103":0.15783,"104":0.36013,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00222,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00222,"12.1":0,"13.1":0.00667,"14.1":0.00445,"15.1":0.00222,"15.2-15.3":0.00222,"15.4":0.00222,"15.5":0.00889,"15.6":0.00889,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00259,"6.0-6.1":0,"7.0-7.1":0.0375,"8.1-8.4":0,"9.0-9.2":0.00129,"9.3":0.14222,"10.0-10.2":0.01164,"10.3":0.0543,"11.0-11.2":0.00517,"11.3-11.4":0.02198,"12.0-12.1":0.128,"12.2-12.5":1.43,"13.0-13.1":0.60769,"13.2":0.02586,"13.3":0.17584,"13.4-13.7":0.39694,"14.0-14.4":2.28076,"14.5-14.8":2.04933,"15.0-15.1":0.60769,"15.2-15.3":0.74862,"15.4":0.57795,"15.5":1.95106,"15.6":1.58516,"16.0":0.08275},P:{"4":0.80881,"5.0-5.4":0.01037,"6.2-6.4":0,"7.2-7.4":0.07259,"8.2":0,"9.2":0.04148,"10.1":0.06222,"11.1-11.2":0.07259,"12.0":0,"13.0":0.02074,"14.0":0.06222,"15.0":0.03111,"16.0":0.09332,"17.0":0.32145,"18.0":0.23849},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02153,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.32301},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01778,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":71.32147},S:{"2.5":0.09332},R:{_:"0"},M:{"0":0.1011},Q:{"10.4":0},O:{"0":0.45107},H:{"0":7.28177}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LS.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LS.js index 119e5fa14f0..b68526bf439 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LS.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LS.js @@ -1 +1 @@ -module.exports={C:{"29":0.01582,"45":0.01582,"52":0.01266,"56":0.00316,"85":0.00633,"88":0.03797,"90":0.02215,"91":0.01266,"93":0.00316,"95":0.03797,"96":0.43347,"97":0.62014,"98":0.01898,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 89 92 94 99 3.5 3.6"},D:{"34":0.00316,"43":0.00633,"49":0.06012,"56":0.00633,"58":0.00949,"63":0.01582,"69":0.00633,"70":0.03797,"71":0.01898,"72":0.00316,"74":0.06961,"75":0.03797,"78":0.00633,"79":0.04113,"80":0.02215,"81":0.04746,"83":0.00949,"85":0.00949,"86":0.09176,"87":0.2373,"88":0.02215,"89":0.01898,"90":0.03164,"91":0.07277,"92":0.04746,"93":0.03164,"94":0.05379,"95":0.02848,"96":0.3512,"97":4.04043,"98":8.51749,"99":0.00949,"100":0.01898,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 44 45 46 47 48 50 51 52 53 54 55 57 59 60 61 62 64 65 66 67 68 73 76 77 84 101"},F:{"79":0.01582,"82":0.06328,"83":0.63913,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.05695,"13":0.01582,"14":0.00949,"15":0.02848,"16":0.06012,"17":0.02531,"18":0.1139,"80":0.00316,"84":0.01898,"85":0.01898,"89":0.0443,"90":0.00633,"91":0.00633,"92":0.03164,"93":0.02215,"94":0.01582,"95":0.0348,"96":0.07277,"97":0.91756,"98":3.00896,_:"79 81 83 86 87 88"},E:{"4":0,"6":0.00316,"14":0.01582,"15":0.02531,_:"0 5 7 8 9 10 11 12 13 3.1 3.2 6.1 7.1 9.1 10.1 11.1 12.1 15.4","5.1":0.00316,"13.1":0.02531,"14.1":0.04113,"15.1":0.06012,"15.2-15.3":0.08226},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.0025,"5.0-5.1":0,"6.0-6.1":0.0025,"7.0-7.1":0.00136,"8.1-8.4":0,"9.0-9.2":0.00136,"9.3":0.03992,"10.0-10.2":0.00159,"10.3":0.01996,"11.0-11.2":0.02994,"11.3-11.4":0.022,"12.0-12.1":0.01157,"12.2-12.5":0.235,"13.0-13.1":0.02041,"13.2":0.0025,"13.3":0.05421,"13.4-13.7":0.07032,"14.0-14.4":0.24089,"14.5-14.8":0.49154,"15.0-15.1":0.26517,"15.2-15.3":0.75331,"15.4":0.00318},P:{"4":0.66965,"5.0-5.4":0.03067,"6.2-6.4":0.02029,"7.2-7.4":1.25813,"8.2":0.01022,"9.2":0.04058,"10.1":0.15219,"11.1-11.2":0.18263,"12.0":0.05073,"13.0":0.2638,"14.0":0.50731,"15.0":0.18263,"16.0":1.23783},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00126,"4.2-4.3":0.00306,"4.4":0,"4.4.3-4.4.4":0.03669},A:{"8":0.00316,"11":0.22464,_:"6 7 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00684},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.57414},Q:{"10.4":0},O:{"0":0.99791},H:{"0":6.83331},L:{"0":62.6305},S:{"2.5":0.01367}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.00332,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00995,"53":0,"54":0,"55":0,"56":0.00332,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00332,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00663,"89":0,"90":0.00332,"91":0.00663,"92":0.00332,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00663,"100":0.00332,"101":0.00332,"102":0.01658,"103":0.5173,"104":0.06632,"105":0.00332,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00663,"35":0.00332,"36":0,"37":0,"38":0,"39":0,"40":0.00995,"41":0,"42":0,"43":0.00995,"44":0.01658,"45":0,"46":0.00663,"47":0,"48":0,"49":0.00332,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00995,"56":0,"57":0,"58":0.00332,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00332,"65":0,"66":0,"67":0,"68":0.00332,"69":0.00332,"70":0.00663,"71":0,"72":0,"73":0,"74":0.00332,"75":0.00995,"76":0,"77":0.0199,"78":0.00663,"79":0.00995,"80":0.00332,"81":0.08953,"83":0.00332,"84":0,"85":0.00332,"86":0.00332,"87":0.00663,"88":0.00332,"89":0,"90":0.00332,"91":0.00332,"92":0.00995,"93":0.00332,"94":0.00663,"95":0.01326,"96":0.00995,"97":0.00663,"98":0.00995,"99":0.00663,"100":0.0199,"101":0.063,"102":0.06632,"103":1.19376,"104":3.10709,"105":0.01326,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0.01658,"22":0,"23":0,"24":0,"25":0.00332,"26":0.063,"27":0,"28":0.01658,"29":0,"30":0.00332,"31":0.00332,"32":0.04311,"33":0,"34":0,"35":0.07295,"36":0.00332,"37":0,"38":0.00332,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.00332,"46":0.00663,"47":0.00663,"48":0,"49":0,"50":0.00663,"51":0.00663,"52":0,"53":0,"54":0.01326,"55":0,"56":0.04311,"57":0.00332,"58":0.03648,"60":0.063,"62":0,"63":0.30176,"64":0.10943,"65":0.00332,"66":0,"67":0.00663,"68":0.00663,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.02321,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00332,"87":0,"88":0.00332,"89":0.41118,"90":0.06964,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.05306},B:{"12":0.00995,"13":0.00995,"14":0.00332,"15":0.00332,"16":0.00663,"17":0.00663,"18":0.03979,"79":0,"80":0,"81":0,"83":0,"84":0.00663,"85":0.00995,"86":0,"87":0,"88":0.01658,"89":0.00663,"90":0.00332,"91":0,"92":0.0199,"93":0,"94":0,"95":0,"96":0.00332,"97":0,"98":0,"99":0.00332,"100":0.00995,"101":0.00995,"102":0.00995,"103":0.32497,"104":0.8091,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00663,"14":0.00332,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00332,"10.1":0,"11.1":0,"12.1":0.00332,"13.1":0.00663,"14.1":0.02984,"15.1":0.00332,"15.2-15.3":0,"15.4":0.01658,"15.5":0.00995,"15.6":0.06964,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00268,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.12832,"10.0-10.2":0.00938,"10.3":0.05964,"11.0-11.2":0.00436,"11.3-11.4":0.00469,"12.0-12.1":0.01307,"12.2-12.5":0.20437,"13.0-13.1":0.00402,"13.2":0.00302,"13.3":0.01709,"13.4-13.7":0.05964,"14.0-14.4":0.11726,"14.5-14.8":0.17422,"15.0-15.1":0.1769,"15.2-15.3":0.49351,"15.4":0.15546,"15.5":0.71195,"15.6":0.99841,"16.0":0.01307},P:{"4":0.56674,"5.0-5.4":0.01012,"6.2-6.4":0.02024,"7.2-7.4":0.95131,"8.2":0,"9.2":0.08096,"10.1":0,"11.1-11.2":0.12144,"12.0":0.02024,"13.0":0.1012,"14.0":0.1518,"15.0":0.06072,"16.0":0.19229,"17.0":0.63758,"18.0":0.31373},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0065,"4.2-4.3":0.00731,"4.4":0,"4.4.3-4.4.4":0.12598},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02984,"5.5":0},J:{"7":0,"10":0.00668},N:{"10":0,"11":0},L:{"0":74.82575},S:{"2.5":0.03342},R:{_:"0"},M:{"0":0.09358},Q:{"10.4":0.01337},O:{"0":1.05607},H:{"0":5.85338}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LT.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LT.js index e3ced5fc5ae..4fbaca359c2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LT.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LT.js @@ -1 +1 @@ -module.exports={C:{"48":0.03575,"51":0.00596,"52":0.11322,"57":0.01192,"60":0.01192,"66":0.00596,"72":0.01192,"77":0.01192,"78":0.04171,"79":0.00596,"80":0.00596,"82":0.00596,"84":0.01788,"85":0.00596,"88":0.02384,"89":0.01192,"90":0.0298,"91":0.10726,"92":0.06555,"93":0.01192,"94":0.04767,"95":0.1311,"96":2.02606,"97":3.18211,"98":0.02384,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 53 54 55 56 58 59 61 62 63 64 65 67 68 69 70 71 73 74 75 76 81 83 86 87 99 3.5 3.6"},D:{"33":0.01192,"34":0.01192,"38":0.00596,"41":0.01788,"49":0.05363,"56":0.01788,"63":0.01192,"64":0.01192,"65":0.00596,"66":0.01192,"67":0.00596,"68":0.01192,"70":0.01192,"71":0.01192,"73":0.02384,"74":0.00596,"75":0.00596,"76":0.01192,"77":0.01192,"78":0.01788,"79":0.07151,"80":0.02384,"81":0.03575,"83":0.07151,"84":0.07151,"85":0.04767,"86":0.07747,"87":0.1013,"88":0.06555,"89":0.05959,"90":0.05363,"91":0.07151,"92":0.07747,"93":0.75083,"94":0.1311,"95":0.15493,"96":0.70912,"97":11.85245,"98":25.27808,"99":0.01192,"100":0.01788,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 35 36 37 39 40 42 43 44 45 46 47 48 50 51 52 53 54 55 57 58 59 60 61 62 69 72 101"},F:{"28":0.00596,"36":0.01788,"64":0.01192,"79":0.01192,"80":0.01192,"82":1.00111,"83":3.46814,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 65 66 67 68 69 70 71 72 73 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01192,"85":0.01192,"89":0.01192,"91":0.00596,"92":0.02384,"94":0.01192,"95":0.01788,"96":0.04171,"97":1.13817,"98":3.76013,_:"12 13 14 15 16 17 79 80 81 83 84 86 87 88 90 93"},E:{"4":0,"13":0.04171,"14":0.20261,"15":0.1311,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.01192,"11.1":0.01788,"12.1":0.04171,"13.1":0.23836,"14.1":0.47672,"15.1":0.29795,"15.2-15.3":0.50056,"15.4":0.01788},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00286,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02862,"10.0-10.2":0.00382,"10.3":0.08683,"11.0-11.2":0.00763,"11.3-11.4":0.01908,"12.0-12.1":0.00954,"12.2-12.5":0.15266,"13.0-13.1":0.01717,"13.2":0.02004,"13.3":0.0229,"13.4-13.7":0.15075,"14.0-14.4":0.50664,"14.5-14.8":1.66019,"15.0-15.1":1.63443,"15.2-15.3":5.1504,"15.4":0.05916},P:{"4":0.08398,"5.0-5.4":0.89089,"6.2-6.4":0.05053,"7.2-7.4":0.56594,"8.2":0.01022,"9.2":0.11117,"10.1":0.05053,"11.1-11.2":0.03149,"12.0":0.0105,"13.0":0.07349,"14.0":0.09448,"15.0":0.09448,"16.0":2.61403},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00128,"4.2-4.3":0.00638,"4.4":0,"4.4.3-4.4.4":0.02871},A:{"8":0.00596,"11":0.3635,_:"6 7 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.25862},Q:{"10.4":0},O:{"0":0.0687},H:{"0":0.3864},L:{"0":26.79061},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00567,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.03401,"49":0,"50":0,"51":0.00567,"52":0.08504,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.01134,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00567,"67":0,"68":0.00567,"69":0,"70":0,"71":0,"72":0.00567,"73":0,"74":0,"75":0,"76":0,"77":0.02268,"78":0.05102,"79":0.00567,"80":0.00567,"81":0,"82":0,"83":0.00567,"84":0.01134,"85":0.00567,"86":0,"87":0,"88":0.00567,"89":0.00567,"90":0.00567,"91":0.24944,"92":0.00567,"93":0,"94":0.01134,"95":0.04535,"96":0.03968,"97":0.01134,"98":0.01134,"99":0.02835,"100":0.01701,"101":0.01701,"102":0.10204,"103":2.15989,"104":0.53289,"105":0.00567,"106":0.00567,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0.03401,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01701,"50":0,"51":0,"52":0,"53":0.01701,"54":0,"55":0,"56":0.02835,"57":0,"58":0,"59":0,"60":0,"61":0.00567,"62":0.00567,"63":0.00567,"64":0.01134,"65":0.00567,"66":0.01134,"67":0.00567,"68":0.00567,"69":0,"70":0.00567,"71":0.01134,"72":0,"73":0.00567,"74":0.00567,"75":0,"76":0.00567,"77":0.00567,"78":0.03401,"79":0.05669,"80":0.02835,"81":0.03401,"83":0.02268,"84":0.02268,"85":0.04535,"86":0.05669,"87":0.09637,"88":0.03968,"89":0.03401,"90":0.02835,"91":0.04535,"92":0.06236,"93":0.06803,"94":0.04535,"95":0.0907,"96":0.20975,"97":0.22109,"98":0.02268,"99":0.04535,"100":0.08504,"101":0.07937,"102":0.32313,"103":5.31752,"104":13.45254,"105":0.03968,"106":0.00567,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00567,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00567,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00567,"60":0,"62":0,"63":0.01134,"64":0.01134,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00567,"71":0.00567,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00567,"79":0.00567,"80":0.00567,"81":0,"82":0.04535,"83":0.00567,"84":0.00567,"85":0.01134,"86":0.00567,"87":0.00567,"88":0.05102,"89":2.18823,"90":0.19275,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00567,"16":0,"17":0,"18":0.00567,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00567,"91":0,"92":0.00567,"93":0,"94":0.00567,"95":0,"96":0.01134,"97":0.01701,"98":0.00567,"99":0,"100":0.00567,"101":0.01701,"102":0.01134,"103":0.65194,"104":2.10887,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01701,"14":0.06236,"15":0.02268,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00567,"10.1":0,"11.1":0.00567,"12.1":0.01701,"13.1":0.0907,"14.1":0.17007,"15.1":0.05669,"15.2-15.3":0.03401,"15.4":0.10204,"15.5":0.27211,"15.6":0.39683,"16.0":0.01134},G:{"8":0.00174,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00521,"7.0-7.1":0,"8.1-8.4":0.00174,"9.0-9.2":0,"9.3":0.03475,"10.0-10.2":0.01043,"10.3":0.14248,"11.0-11.2":0.00695,"11.3-11.4":0.03301,"12.0-12.1":0.0139,"12.2-12.5":0.18939,"13.0-13.1":0.01564,"13.2":0.00869,"13.3":0.0278,"13.4-13.7":0.14769,"14.0-14.4":0.36836,"14.5-14.8":0.93306,"15.0-15.1":0.39616,"15.2-15.3":0.58208,"15.4":0.88963,"15.5":4.68617,"15.6":8.69296,"16.0":0.17897},P:{"4":0.11183,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0.01017,"10.1":0,"11.1-11.2":0.04067,"12.0":0.01017,"13.0":0.07117,"14.0":0.04067,"15.0":0.0305,"16.0":0.13217,"17.0":1.27084,"18.0":1.64701},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01485,"4.2-4.3":0.03464,"4.4":0,"4.4.3-4.4.4":0.14351},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00589,"9":0,"10":0,"11":0.14718,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0.00866},L:{"0":42.58294},S:{"2.5":0},R:{_:"0"},M:{"0":0.40278},Q:{"10.4":0},O:{"0":0.04331},H:{"0":0.50024}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LU.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LU.js index 13dd4ef232f..b710309734e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LU.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LU.js @@ -1 +1 @@ -module.exports={C:{"24":0.03173,"38":0.00529,"45":0.00529,"48":0.02115,"50":0.03702,"51":0.03173,"52":0.0899,"59":0.02644,"60":0.0423,"61":0.03173,"62":0.02644,"63":0.02115,"66":0.0423,"68":0.03173,"77":0.01586,"78":0.17979,"79":0.01586,"87":0.00529,"88":0.02115,"89":0.04759,"91":0.86723,"92":0.01058,"93":0.01586,"94":1.33258,"95":0.13749,"96":2.19452,"97":3.5271,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 46 47 49 53 54 55 56 57 58 64 65 67 69 70 71 72 73 74 75 76 80 81 82 83 84 85 86 90 98 99 3.5 3.6"},D:{"49":0.0423,"53":0.01586,"56":0.00529,"60":0.06874,"65":0.0423,"66":0.01586,"67":0.04759,"68":0.06346,"69":0.03173,"70":0.02644,"71":0.03173,"72":0.20623,"74":0.04759,"75":0.00529,"76":0.00529,"77":0.15335,"78":0.15864,"79":0.15335,"80":0.05288,"81":0.0423,"83":0.04759,"84":0.08461,"85":0.15864,"86":0.55524,"87":0.06874,"88":0.0423,"89":0.03173,"90":0.04759,"91":0.08461,"92":0.0899,"93":0.54466,"94":0.0423,"95":0.11105,"96":0.67686,"97":6.22398,"98":12.84984,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 57 58 59 61 62 63 64 73 99 100 101"},F:{"53":0.01058,"69":0.01058,"79":0.01058,"82":0.48121,"83":1.34315,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 54 55 56 57 58 60 62 63 64 65 66 67 68 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.03173,"16":0.03702,"17":0.01058,"18":0.01058,"89":0.02115,"90":0.01058,"91":0.01586,"92":0.01058,"94":0.02115,"95":0.18508,"96":0.20623,"97":1.39603,"98":4.93899,_:"12 13 14 79 80 81 83 84 85 86 87 88 93"},E:{"4":0,"8":0.01058,"12":0.01058,"13":0.07403,"14":0.54466,"15":0.46534,_:"0 5 6 7 9 10 11 3.1 3.2 6.1 7.1","5.1":0.01058,"9.1":0.01058,"10.1":0.02115,"11.1":0.0423,"12.1":0.25382,"13.1":0.83022,"14.1":2.21567,"15.1":1.33786,"15.2-15.3":2.54882,"15.4":0.01058},G:{"8":0,"3.2":0.00781,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00195,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.0039,"9.3":0.10929,"10.0-10.2":0.00195,"10.3":0.08392,"11.0-11.2":0.02342,"11.3-11.4":0.05659,"12.0-12.1":0.01366,"12.2-12.5":0.39812,"13.0-13.1":0.05269,"13.2":0.0039,"13.3":0.04098,"13.4-13.7":0.27712,"14.0-14.4":0.71622,"14.5-14.8":3.35471,"15.0-15.1":2.9039,"15.2-15.3":11.39119,"15.4":0.06635},P:{"4":0.15575,"5.0-5.4":0.89089,"6.2-6.4":0.05053,"7.2-7.4":0.03115,"8.2":0.01022,"9.2":0.02077,"10.1":0.05053,"11.1-11.2":0.02077,"12.0":0.05192,"13.0":0.0623,"14.0":0.11422,"15.0":0.07269,"16.0":4.00809},I:{"0":0,"3":0,"4":0.00048,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00192,"4.2-4.3":0.00361,"4.4":0,"4.4.3-4.4.4":0.01755},A:{"9":0.07699,"11":0.47296,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.81046},Q:{"10.4":0.00942},O:{"0":0.61256},H:{"0":0.6067},L:{"0":20.55799},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0.0044,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0.0044,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.02641,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.0044,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.0088,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.07922,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.02641,"85":0,"86":0,"87":0.0044,"88":0.0088,"89":0.0088,"90":0,"91":0.22005,"92":0.0044,"93":0.0044,"94":0.02201,"95":0.0044,"96":0,"97":0.0088,"98":0.0044,"99":0.0132,"100":0.0176,"101":0.0176,"102":0.18484,"103":2.00246,"104":0.36528,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0.0044,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02641,"50":0,"51":0,"52":0,"53":0.0088,"54":0,"55":0.0044,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0.0044,"63":0,"64":0,"65":0,"66":0,"67":0.0044,"68":0,"69":0,"70":0,"71":0,"72":0.25086,"73":0.0044,"74":0.0044,"75":0.0044,"76":0.0044,"77":0.03521,"78":0.0176,"79":0.02201,"80":0.0044,"81":0.0088,"83":0.0088,"84":0.0044,"85":0.03081,"86":0.02201,"87":0.37409,"88":0.0044,"89":0.0088,"90":0.0132,"91":0.02641,"92":0.05721,"93":0,"94":0.0044,"95":0.02201,"96":0.02201,"97":0.06602,"98":0.02641,"99":0.0176,"100":0.09242,"101":0.11443,"102":0.12323,"103":2.1917,"104":5.34281,"105":0.0176,"106":0.0044,"107":0.0044,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.0044,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.0044,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.0044,"60":0,"62":0,"63":0.03521,"64":0.0176,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.0088,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0.0044,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.0044,"87":0,"88":0.0088,"89":0.41369,"90":0.06602,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.0044},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.0044,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.0044,"91":0,"92":0.0088,"93":0,"94":0,"95":0.0044,"96":0.0088,"97":0.0044,"98":0.0176,"99":0.02201,"100":0.04401,"101":0.0176,"102":0.16284,"103":0.72176,"104":1.81321,"105":0.0044},E:{"4":0,"5":0,"6":0,"7":0.0044,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.06161,"14":0.06602,"15":0.02641,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.0044,"10.1":0.0044,"11.1":0.0088,"12.1":0.11883,"13.1":0.27726,"14.1":0.23765,"15.1":0.08362,"15.2-15.3":0.05721,"15.4":0.12763,"15.5":0.66455,"15.6":1.16186,"16.0":0.0132},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.30612,"5.0-5.1":0,"6.0-6.1":0.00589,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.93013,"9.3":0.03826,"10.0-10.2":0,"10.3":0.10302,"11.0-11.2":0.0206,"11.3-11.4":0.00883,"12.0-12.1":0.02355,"12.2-12.5":0.43269,"13.0-13.1":0.00883,"13.2":0.00589,"13.3":0.0471,"13.4-13.7":0.17955,"14.0-14.4":0.50922,"14.5-14.8":1.56003,"15.0-15.1":0.48861,"15.2-15.3":0.77118,"15.4":1.17149,"15.5":6.89945,"15.6":14.92918,"16.0":0.989},P:{"4":0.16567,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.03106,"8.2":0,"9.2":0,"10.1":0.01035,"11.1-11.2":0.01035,"12.0":0.01035,"13.0":0.03106,"14.0":0.05177,"15.0":0.07248,"16.0":0.1139,"17.0":1.57383,"18.0":2.2572},I:{"0":0,"3":0.08266,"4":0,"2.1":0.03882,"2.2":0.12899,"2.3":0,"4.1":0.10269,"4.2-4.3":0.09017,"4.4":0,"4.4.3-4.4.4":0.33187},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.15844,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":33.77453},S:{"2.5":0},R:{_:"0"},M:{"0":0.79506},Q:{"10.4":2.29559},O:{"0":1.47254},H:{"0":0.59899}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LV.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LV.js index 66ec6302a1a..0d979a96aac 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LV.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LV.js @@ -1 +1 @@ -module.exports={C:{"42":0.00654,"52":0.08498,"55":0.03269,"56":0.01307,"68":0.00654,"72":0.03269,"78":0.06537,"79":0.01961,"81":0.00654,"83":0.00654,"84":0.01961,"85":0.00654,"86":0.00654,"87":0.01961,"88":0.03922,"89":0.01307,"90":0.01307,"91":0.20918,"92":0.01961,"93":0.01961,"94":0.01307,"95":0.09806,"96":1.98725,"97":3.19006,"98":0.01961,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 51 53 54 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 80 82 99 3.5 3.6"},D:{"38":0.00654,"49":0.14381,"57":0.00654,"68":0.01307,"69":0.01307,"70":0.00654,"71":0.00654,"72":0.01307,"74":0.01307,"76":0.00654,"77":0.00654,"78":0.03922,"79":0.18957,"80":0.02615,"81":0.01307,"83":0.03269,"84":0.05883,"85":0.04576,"86":0.07191,"87":0.10459,"88":0.03269,"89":0.09152,"90":0.11113,"91":0.1242,"92":0.11767,"93":0.706,"94":0.07191,"95":0.07191,"96":0.7779,"97":13.1263,"98":30.99192,"99":0.02615,"100":0.0523,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 58 59 60 61 62 63 64 65 66 67 73 75 101"},F:{"36":0.01961,"68":0.01307,"82":0.51642,"83":1.98725,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"84":0.00654,"85":0.02615,"89":0.01961,"92":0.01961,"94":0.00654,"95":0.02615,"96":0.05883,"97":1.3074,"98":4.5759,_:"12 13 14 15 16 17 18 79 80 81 83 86 87 88 90 91 93"},E:{"4":0,"13":0.01961,"14":0.20918,"15":0.11113,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1","9.1":0.01307,"10.1":0.01307,"11.1":0.01307,"12.1":0.03269,"13.1":0.21572,"14.1":0.41837,"15.1":0.28763,"15.2-15.3":0.51642,"15.4":0.00654},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.0009,"5.0-5.1":0.0009,"6.0-6.1":0.0009,"7.0-7.1":0.0009,"8.1-8.4":0.0009,"9.0-9.2":0.00449,"9.3":0.01795,"10.0-10.2":0.00538,"10.3":0.04398,"11.0-11.2":0.01346,"11.3-11.4":0.01167,"12.0-12.1":0.02513,"12.2-12.5":0.16872,"13.0-13.1":0.01256,"13.2":0.00538,"13.3":0.04487,"13.4-13.7":0.1059,"14.0-14.4":0.52142,"14.5-14.8":1.62529,"15.0-15.1":1.58401,"15.2-15.3":4.72151,"15.4":0.05295},P:{"4":0.06305,"5.0-5.4":0.03067,"6.2-6.4":0.03067,"7.2-7.4":0.23517,"8.2":0.01022,"9.2":0.07157,"10.1":0.01051,"11.1-11.2":0.08407,"12.0":0.02102,"13.0":0.07356,"14.0":0.07356,"15.0":0.15763,"16.0":2.85839},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00395,"4.2-4.3":0.01448,"4.4":0,"4.4.3-4.4.4":0.04737},A:{"11":0.16996,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.26319},Q:{"10.4":0},O:{"0":0.07965},H:{"0":0.34425},L:{"0":20.9847},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.04771,"53":0,"54":0,"55":0,"56":0.00682,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.01363,"69":0,"70":0,"71":0,"72":0,"73":0.00682,"74":0,"75":0.00682,"76":0,"77":0,"78":0.01363,"79":0.00682,"80":0,"81":0.00682,"82":0,"83":0,"84":0.00682,"85":0.00682,"86":0,"87":0.00682,"88":0.01363,"89":0,"90":0.00682,"91":0.05452,"92":0,"93":0.00682,"94":0,"95":0.00682,"96":0.00682,"97":0.00682,"98":0.00682,"99":0.02726,"100":0.01363,"101":0.02045,"102":0.19082,"103":2.52837,"104":0.45661,"105":0.00682,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00682,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.04089,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.00682,"70":0.00682,"71":0.00682,"72":0.00682,"73":0,"74":0.00682,"75":0,"76":0.00682,"77":0,"78":0.00682,"79":0.09541,"80":0.01363,"81":0.02726,"83":0.00682,"84":0.06134,"85":0.05452,"86":0.06134,"87":0.07497,"88":0.01363,"89":0.01363,"90":0.02045,"91":0.02726,"92":0.03408,"93":0.06134,"94":0.05452,"95":0.00682,"96":0.05452,"97":0.04771,"98":0.03408,"99":0.04771,"100":0.10223,"101":0.11586,"102":0.3612,"103":8.6755,"104":23.77072,"105":0.06815,"106":0.00682,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00682,"64":0.00682,"65":0,"66":0,"67":0,"68":0.00682,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0.00682,"83":0.00682,"84":0.00682,"85":0.01363,"86":0.00682,"87":0,"88":0.03408,"89":1.20626,"90":0.1363,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00682,"79":0,"80":0,"81":0,"83":0,"84":0.01363,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00682,"93":0,"94":0,"95":0.01363,"96":0.00682,"97":0.00682,"98":0.00682,"99":0.00682,"100":0.00682,"101":0.05452,"102":0.04771,"103":1.24033,"104":3.55743,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.00682,"9":0,"10":0,"11":0,"12":0.00682,"13":0.00682,"14":0.06815,"15":0.01363,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00682,"10.1":0,"11.1":0,"12.1":0.02726,"13.1":0.08178,"14.1":0.12949,"15.1":0.02726,"15.2-15.3":0.02726,"15.4":0.09541,"15.5":0.32712,"15.6":0.59972,"16.0":0.02045},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00305,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01067,"10.0-10.2":0,"10.3":0.03353,"11.0-11.2":0.00457,"11.3-11.4":0.00915,"12.0-12.1":0.00762,"12.2-12.5":0.21035,"13.0-13.1":0.00762,"13.2":0.00915,"13.3":0.02134,"13.4-13.7":0.1067,"14.0-14.4":0.34144,"14.5-14.8":0.86579,"15.0-15.1":0.34601,"15.2-15.3":0.55941,"15.4":0.75604,"15.5":4.03017,"15.6":7.73415,"16.0":0.17834},P:{"4":0.06165,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01027,"12.0":0.01027,"13.0":0.02055,"14.0":0.09247,"15.0":0.03082,"16.0":0.12329,"17.0":1.34592,"18.0":1.48976},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0.01659,"4.1":0.01659,"4.2-4.3":0.01659,"4.4":0,"4.4.3-4.4.4":0.12164},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00682,"9":0,"10":0,"11":0.06815,"5.5":0},J:{"7":0,"10":0.00319},N:{"10":0,"11":0},L:{"0":31.84274},S:{"2.5":0},R:{_:"0"},M:{"0":0.32487},Q:{"10.4":0},O:{"0":0.08918},H:{"0":0.3136}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LY.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LY.js index 93f68c6c443..443ae1b7cf3 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LY.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/LY.js @@ -1 +1 @@ -module.exports={C:{"4":0.00353,"5":0.00176,"15":0.00176,"17":0.00529,"23":0.00353,"26":0.00176,"28":0.00176,"30":0.00176,"33":0.00882,"34":0.00353,"36":0.00176,"38":0.00353,"39":0.00353,"43":0.00529,"47":0.00882,"48":0.00529,"52":0.01058,"56":0.00176,"61":0.00176,"70":0.01235,"72":0.00706,"78":0.00706,"84":0.00353,"85":0.00176,"88":0.00353,"89":0.00176,"90":0.00353,"91":0.01058,"92":0.00176,"93":0.00353,"94":0.01058,"95":0.02999,"96":0.33163,"97":0.60505,"98":0.01411,_:"2 3 6 7 8 9 10 11 12 13 14 16 18 19 20 21 22 24 25 27 29 31 32 35 37 40 41 42 44 45 46 49 50 51 53 54 55 57 58 59 60 62 63 64 65 66 67 68 69 71 73 74 75 76 77 79 80 81 82 83 86 87 99 3.5 3.6"},D:{"11":0.00353,"19":0.00176,"23":0.00353,"24":0.00529,"25":0.00529,"26":0.00176,"28":0.00353,"31":0.00176,"32":0.00706,"33":0.01235,"37":0.00353,"38":0.00529,"40":0.00706,"43":0.01764,"44":0.00176,"49":0.02293,"50":0.00176,"53":0.00353,"54":0.00353,"55":0.00529,"56":0.01058,"57":0.00353,"58":0.00529,"60":0.00529,"63":0.01764,"64":0.00353,"65":0.01058,"66":0.00882,"67":0.00706,"68":0.00353,"69":0.01235,"70":0.00882,"71":0.02646,"72":0.00176,"73":0.00529,"74":0.00706,"75":0.00529,"76":0.00706,"77":0.00529,"78":0.01058,"79":0.02822,"80":0.01764,"81":0.00882,"83":0.02822,"84":0.00882,"85":0.01588,"86":0.03528,"87":0.05468,"88":0.03352,"89":0.03528,"90":0.02117,"91":0.02999,"92":0.06174,"93":0.03704,"94":0.02822,"95":0.05116,"96":0.34927,"97":3.38159,"98":8.00856,"99":0.00353,"100":0.01058,"101":0.00353,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 20 21 22 27 29 30 34 35 36 39 41 42 45 46 47 48 51 52 59 61 62"},F:{"67":0.01235,"68":0.00176,"69":0.00353,"79":0.00706,"80":0.00529,"82":0.10408,"83":0.53449,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 70 71 72 73 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00353,"14":0.00706,"16":0.00529,"17":0.0194,"18":0.02646,"83":0.00353,"84":0.01411,"85":0.02822,"89":0.01235,"90":0.00529,"92":0.01058,"93":0.00353,"94":0.00176,"95":0.05645,"96":0.02646,"97":0.34927,"98":0.74088,_:"13 15 79 80 81 86 87 88 91"},E:{"4":0,"13":0.0688,"14":0.07056,"15":0.05292,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 15.4","9.1":0.00176,"10.1":0.01058,"11.1":0.00353,"12.1":0.00529,"13.1":0.0441,"14.1":0.11995,"15.1":0.07938,"15.2-15.3":0.09878},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00177,"6.0-6.1":0.0062,"7.0-7.1":0.01418,"8.1-8.4":0.04076,"9.0-9.2":0.00443,"9.3":0.07531,"10.0-10.2":0.00443,"10.3":0.06734,"11.0-11.2":0.02126,"11.3-11.4":0.04164,"12.0-12.1":0.05936,"12.2-12.5":0.83194,"13.0-13.1":0.03101,"13.2":0.01949,"13.3":0.11695,"13.4-13.7":0.24099,"14.0-14.4":1.00648,"14.5-14.8":1.77464,"15.0-15.1":1.56909,"15.2-15.3":2.89807,"15.4":0.02835},P:{"4":0.29307,"5.0-5.4":0.89089,"6.2-6.4":0.05053,"7.2-7.4":0.56594,"8.2":0.01022,"9.2":0.11117,"10.1":0.05053,"11.1-11.2":0.27286,"12.0":0.09095,"13.0":0.25265,"14.0":0.3436,"15.0":0.32339,"16.0":1.82919},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00092,"4.2-4.3":0.00423,"4.4":0,"4.4.3-4.4.4":0.03603},A:{"8":0.00529,"9":0.00353,"10":0.00353,"11":0.07232,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.09883},Q:{"10.4":0},O:{"0":0.45298},H:{"0":3.29047},L:{"0":63.59095},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00155,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.00155,"46":0,"47":0,"48":0,"49":0.00155,"50":0,"51":0,"52":0.00155,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00155,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00155,"88":0,"89":0,"90":0,"91":0.00155,"92":0,"93":0,"94":0.0031,"95":0.00155,"96":0,"97":0.00155,"98":0,"99":0.00465,"100":0.00465,"101":0.00155,"102":0.0062,"103":0.09151,"104":0.01861,"105":0.00155,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0.00155,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0.00155,"33":0.00155,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00155,"41":0,"42":0,"43":0.0031,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00155,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00465,"64":0,"65":0.00155,"66":0,"67":0,"68":0,"69":0.00155,"70":0,"71":0.00155,"72":0.00155,"73":0,"74":0,"75":0.00155,"76":0.00155,"77":0,"78":0.00155,"79":0.00465,"80":0.00155,"81":0.00931,"83":0.00465,"84":0.0031,"85":0.00155,"86":0.00776,"87":0.01396,"88":0.00776,"89":0.0031,"90":0.0031,"91":0.0031,"92":0.00465,"93":0.00155,"94":0.00776,"95":0.0031,"96":0.0062,"97":0.0062,"98":0.00776,"99":0.00776,"100":0.00931,"101":0.00931,"102":0.02482,"103":0.39395,"104":0.97713,"105":0.00465,"106":0.00155,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00155,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00155,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0.00155,"58":0.0062,"60":0.02637,"62":0,"63":0.11788,"64":0.076,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00155,"72":0,"73":0.00155,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.0031,"80":0,"81":0,"82":0,"83":0,"84":0.01086,"85":0.0031,"86":0.00155,"87":0.00155,"88":0.00465,"89":0.0698,"90":0.00776,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00155},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.0031,"79":0,"80":0,"81":0,"83":0,"84":0.00155,"85":0,"86":0,"87":0,"88":0,"89":0.00155,"90":0.00155,"91":0,"92":0.00465,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00155,"100":0.00155,"101":0.00776,"102":0.0031,"103":0.05273,"104":0.13028,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.0031,"14":0.00465,"15":0.00465,_:"0","3.1":0,"3.2":0,"5.1":0.0031,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.0031,"12.1":0,"13.1":0.00465,"14.1":0.00931,"15.1":0.00155,"15.2-15.3":0.00155,"15.4":0.0062,"15.5":0.01706,"15.6":0.02327,"16.0":0.00155},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00184,"5.0-5.1":0.00276,"6.0-6.1":0.00092,"7.0-7.1":0.00829,"8.1-8.4":0.00184,"9.0-9.2":0.00184,"9.3":0.06169,"10.0-10.2":0.00276,"10.3":0.03959,"11.0-11.2":0.01105,"11.3-11.4":0.02302,"12.0-12.1":0.03775,"12.2-12.5":0.51466,"13.0-13.1":0.03867,"13.2":0.01105,"13.3":0.1556,"13.4-13.7":0.11416,"14.0-14.4":0.55886,"14.5-14.8":0.71537,"15.0-15.1":0.41891,"15.2-15.3":0.52295,"15.4":0.79823,"15.5":2.24739,"15.6":2.79704,"16.0":0.10772},P:{"4":0.2125,"5.0-5.4":0.01012,"6.2-6.4":0.0506,"7.2-7.4":0.48572,"8.2":0.01012,"9.2":0.06071,"10.1":0.03036,"11.1-11.2":0.13155,"12.0":0.04048,"13.0":0.15179,"14.0":0.25298,"15.0":0.12143,"16.0":0.33393,"17.0":0.92084,"18.0":0.66786},I:{"0":0,"3":0,"4":0.00085,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00057,"4.2-4.3":0.00596,"4.4":0,"4.4.3-4.4.4":0.06899},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01086,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":80.02092},S:{"2.5":0},R:{_:"0"},M:{"0":0.08449},Q:{"10.4":0},O:{"0":0.36331},H:{"0":2.76764}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MA.js index 7e9ab93b701..46a7d10dbe5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MA.js @@ -1 +1 @@ -module.exports={C:{"2":0.72585,"15":0.74612,"18":0.74207,"21":0.73801,"23":0.74207,"25":1.48413,"30":0.7299,"51":0.74612,"52":0.04461,"60":0.00406,"64":0.00406,"65":0.01622,"78":0.01622,"81":0.00811,"84":0.02433,"88":0.00406,"89":0.00406,"91":0.02028,"93":0.00406,"94":0.00811,"95":0.01622,"96":0.31224,"97":0.49066,"98":0.01217,_:"3 4 5 6 7 8 9 10 11 12 13 14 16 17 19 20 22 24 26 27 28 29 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 53 54 55 56 57 58 59 61 62 63 66 67 68 69 70 71 72 73 74 75 76 77 79 80 82 83 85 86 87 90 92 99 3.5 3.6"},D:{"19":0.73801,"24":2.21809,"30":0.73801,"33":0.74612,"35":1.48008,"38":0.00406,"43":0.00406,"49":0.04461,"53":0.01217,"54":0.74207,"55":0.74612,"56":3.69816,"58":0.00406,"62":0.00406,"63":0.00811,"64":0.00406,"65":0.01217,"66":0.01622,"67":0.06083,"68":0.01217,"69":0.00811,"70":0.06894,"71":0.00811,"72":0.01622,"74":0.00406,"75":0.01622,"77":0.00406,"78":0.00406,"79":0.04461,"80":0.00811,"81":0.02028,"83":0.03244,"84":0.04461,"85":0.04055,"86":0.05272,"87":0.13787,"88":0.03244,"89":0.0365,"90":0.02839,"91":0.04055,"92":0.0365,"93":0.1987,"94":0.0811,"95":0.03244,"96":0.1987,"97":2.48166,"98":5.70133,"100":0.00406,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 25 26 27 28 29 31 32 34 36 37 39 40 41 42 44 45 46 47 48 50 51 52 57 59 60 61 73 76 99 101"},F:{"43":0.73801,"82":0.10949,"83":0.49066,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0.74207},B:{"18":0.00811,"84":0.00811,"85":0.00811,"86":0.00406,"87":0.00406,"88":0.00406,"89":0.00811,"90":0.00406,"91":0.00811,"92":0.01217,"94":0.00406,"95":0.00811,"96":0.01622,"97":0.17437,"98":0.61231,_:"12 13 14 15 16 17 79 80 81 83 93"},E:{"4":0,"5":0.73396,"13":0.0365,"14":0.04055,"15":0.02839,_:"0 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00811,"12.1":0.01217,"13.1":0.05272,"14.1":0.08516,"15.1":0.03244,"15.2-15.3":0.04866},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00383,"6.0-6.1":14.55397,"7.0-7.1":0.0249,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04597,"10.0-10.2":1.97079,"10.3":0.04405,"11.0-11.2":0.06129,"11.3-11.4":0.04405,"12.0-12.1":0.06703,"12.2-12.5":0.452,"13.0-13.1":0.00766,"13.2":0.00383,"13.3":0.01915,"13.4-13.7":0.08427,"14.0-14.4":0.18195,"14.5-14.8":0.452,"15.0-15.1":0.36581,"15.2-15.3":0.75461,"15.4":0.00575},P:{"4":0.37587,"5.0-5.4":0.07136,"6.2-6.4":0.02048,"7.2-7.4":0.12161,"8.2":0.01015,"9.2":0.03317,"10.1":0.02048,"11.1-11.2":0.05528,"12.0":0.02211,"13.0":0.12161,"14.0":0.07739,"15.0":0.0995,"16.0":1.06128},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0133,"4.2-4.3":0.63155,"4.4":0,"4.4.3-4.4.4":1.07919},A:{"8":1.48008,"9":1.48008,"10":1.48413,"11":0.05677,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.05945},Q:{"10.4":0},O:{"0":0.05351},H:{"0":0.16322},L:{"0":35.78282},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.06343,"53":0,"54":0,"55":0.01057,"56":0,"57":0,"58":0.00352,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.03172,"66":0,"67":0,"68":0.00352,"69":0,"70":0,"71":0,"72":0.00352,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01057,"79":0.00352,"80":0.00352,"81":0.00352,"82":0.00352,"83":0.00352,"84":0.00352,"85":0,"86":0,"87":0.00352,"88":0,"89":0.00352,"90":0,"91":0.02114,"92":0.00352,"93":0,"94":0.00352,"95":0.00352,"96":0,"97":0.00352,"98":0.00352,"99":0.00705,"100":0.00705,"101":0.01057,"102":0.03524,"103":0.59908,"104":0.12334,"105":0.00352,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00352,"39":0,"40":0,"41":0,"42":0,"43":0.00705,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02819,"50":0,"51":0,"52":0,"53":0.00352,"54":0,"55":0,"56":0.00705,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00352,"64":0.01057,"65":0.00352,"66":0.00352,"67":0.00352,"68":0.00705,"69":0.00705,"70":0.00352,"71":0.00352,"72":0.00705,"73":0.00352,"74":0.01762,"75":0.0141,"76":0.00352,"77":0.00352,"78":0.00352,"79":0.03876,"80":0.00705,"81":0.03172,"83":0.0141,"84":0.03172,"85":0.02819,"86":0.03876,"87":0.05286,"88":0.0141,"89":0.01057,"90":0.00705,"91":0.01057,"92":0.01762,"93":0.01762,"94":0.00705,"95":0.0141,"96":0.02114,"97":0.02819,"98":0.01762,"99":0.02467,"100":0.02819,"101":0.04229,"102":0.09162,"103":2.15316,"104":6.12824,"105":0.02467,"106":0.00352,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00352,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00352,"38":0,"39":0,"40":0.00352,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00352,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0141,"64":0.01057,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00352,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00352,"80":0,"81":0,"82":0.00352,"83":0,"84":0.00352,"85":0.0141,"86":0,"87":0.00352,"88":0.01057,"89":0.45107,"90":0.06696,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00352,"16":0,"17":0.00352,"18":0.01057,"79":0,"80":0,"81":0,"83":0,"84":0.00352,"85":0,"86":0,"87":0,"88":0,"89":0.00352,"90":0,"91":0,"92":0.00705,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00352,"100":0,"101":0.00705,"102":0.00352,"103":0.20087,"104":0.58146,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00352,"12":0,"13":0.00705,"14":0.01762,"15":0.00352,_:"0","3.1":0,"3.2":0,"5.1":0.00352,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00352,"12.1":0.00705,"13.1":0.02467,"14.1":0.03876,"15.1":0.00705,"15.2-15.3":0.00705,"15.4":0.02467,"15.5":0.05286,"15.6":0.06343,"16.0":0},G:{"8":0.0048,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01201,"6.0-6.1":0,"7.0-7.1":0.07324,"8.1-8.4":0.0072,"9.0-9.2":0,"9.3":0.18129,"10.0-10.2":0.04562,"10.3":0.15487,"11.0-11.2":0.18849,"11.3-11.4":0.16088,"12.0-12.1":0.25092,"12.2-12.5":1.57516,"13.0-13.1":0.01561,"13.2":0.01441,"13.3":0.07684,"13.4-13.7":0.14767,"14.0-14.4":0.419,"14.5-14.8":0.87042,"15.0-15.1":0.36978,"15.2-15.3":0.46582,"15.4":0.69633,"15.5":2.82376,"15.6":3.35201,"16.0":0.09725},P:{"4":0.71651,"5.0-5.4":0.01024,"6.2-6.4":0.03071,"7.2-7.4":0.27637,"8.2":0.01024,"9.2":0.08189,"10.1":0.01024,"11.1-11.2":0.11259,"12.0":0.03071,"13.0":0.16377,"14.0":0.1433,"15.0":0.07165,"16.0":0.19448,"17.0":1.42278,"18.0":1.36136},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01413,"4.2-4.3":0.02402,"4.4":0,"4.4.3-4.4.4":0.16061},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00392,"9":0,"10":0,"11":0.03132,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":68.34195},S:{"2.5":0},R:{_:"0"},M:{"0":0.19428},Q:{"10.4":0},O:{"0":0.1878},H:{"0":0.44757}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MC.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MC.js index 04db73ae98f..922e6f08d8c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MC.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MC.js @@ -1 +1 @@ -module.exports={C:{"68":0.01917,"75":0.02556,"78":0.65817,"79":0.01278,"80":0.03834,"81":0.03195,"84":0.02556,"91":0.10224,"92":0.00639,"93":0.01278,"94":0.01278,"95":0.10224,"96":1.42497,"97":2.67741,"98":0.01278,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 76 77 82 83 85 86 87 88 89 90 99 3.5 3.6"},D:{"18":3.24612,"49":0.00639,"56":0.01278,"66":0.01278,"71":0.00639,"75":0.00639,"76":0.00639,"77":0.60705,"78":0.01278,"79":0.01917,"80":0.00639,"81":0.02556,"83":0.01278,"84":0.05751,"85":0.24282,"86":0.00639,"87":0.68373,"88":0.01917,"89":0.23643,"90":0.08307,"91":0.01917,"92":0.05112,"93":0.02556,"94":0.79875,"95":0.04473,"96":0.69012,"97":8.67123,"98":17.09325,"99":0.01917,"100":0.01917,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 57 58 59 60 61 62 63 64 65 67 68 69 70 72 73 74 101"},F:{"70":0.01278,"71":0.00639,"82":0.10224,"83":0.7668,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.03195,"84":0.01278,"85":0.01278,"94":0.00639,"95":0.02556,"96":0.15975,"97":1.29078,"98":4.33242,_:"12 13 14 15 16 17 79 80 81 83 86 87 88 89 90 91 92 93"},E:{"4":0,"13":0.20448,"14":0.84348,"15":0.56871,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1","9.1":0.00639,"10.1":0.01278,"11.1":0.04473,"12.1":0.11502,"13.1":1.3419,"14.1":3.84039,"15.1":1.7892,"15.2-15.3":4.54968,"15.4":0.01278},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00956,"9.0-9.2":0,"9.3":0.04542,"10.0-10.2":0.04064,"10.3":0.06694,"11.0-11.2":0,"11.3-11.4":0.24385,"12.0-12.1":0.04781,"12.2-12.5":0.38011,"13.0-13.1":0.02152,"13.2":0.01673,"13.3":0.01913,"13.4-13.7":0.60723,"14.0-14.4":2.24722,"14.5-14.8":5.7065,"15.0-15.1":2.58669,"15.2-15.3":11.81225,"15.4":0.0502},P:{"4":0.06258,"5.0-5.4":0.01024,"6.2-6.4":0.02048,"7.2-7.4":0.04172,"8.2":0.01015,"9.2":0.03129,"10.1":0.02048,"11.1-11.2":0.04348,"12.0":0.02174,"13.0":0.11472,"14.0":0.03261,"15.0":0.13558,"16.0":0.90215},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.17253,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00722},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.1083},Q:{"10.4":0},O:{"0":0.00722},H:{"0":0.00342},L:{"0":11.45817},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00625,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.04374,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.19997,"79":0.00625,"80":0,"81":0,"82":0.00625,"83":0.03125,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.39994,"92":0,"93":0,"94":0,"95":0.00625,"96":0.0125,"97":0,"98":0,"99":0,"100":0.00625,"101":0.0125,"102":0.05624,"103":2.95578,"104":0.47492,"105":0,"106":0,"3.5":1.13732,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.93735,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00625,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.0125,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.04374,"78":0,"79":0.00625,"80":0.04374,"81":0,"83":0,"84":0.00625,"85":0.40619,"86":0.49367,"87":0.24996,"88":0.00625,"89":0.00625,"90":0.025,"91":0.00625,"92":0,"93":0.00625,"94":0.00625,"95":0,"96":0.01875,"97":0,"98":0.00625,"99":0.07499,"100":0.025,"101":0.28745,"102":0.39994,"103":6.33024,"104":11.80436,"105":0.08124,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.3312,"90":0.07499,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00625,"18":0.00625,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.03125,"98":0,"99":0,"100":0,"101":0.00625,"102":0,"103":1.25605,"104":2.08717,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.04374,"14":0.3187,"15":0.0125,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00625,"11.1":0.08124,"12.1":0.09374,"13.1":0.53117,"14.1":0.42493,"15.1":0.12498,"15.2-15.3":0.05624,"15.4":0.45618,"15.5":1.11232,"15.6":4.11184,"16.0":0.03749},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02112,"10.0-10.2":0,"10.3":0.14364,"11.0-11.2":0,"11.3-11.4":0.17744,"12.0-12.1":0.0169,"12.2-12.5":0.44782,"13.0-13.1":0.02112,"13.2":0.01267,"13.3":0.04225,"13.4-13.7":0.44782,"14.0-14.4":0.42247,"14.5-14.8":1.78283,"15.0-15.1":0.48584,"15.2-15.3":1.19137,"15.4":3.52341,"15.5":11.48699,"15.6":21.75303,"16.0":0.25348},P:{"4":0.01032,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.37155,"12.0":0.01032,"13.0":0,"14.0":0,"15.0":0,"16.0":0,"17.0":0.45412,"18.0":0.85664},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.02},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00625,"10":0,"11":0.025,"5.5":0},J:{"7":0,"10":0.00375},N:{"10":0,"11":0},L:{"0":15.75175},S:{"2.5":0},R:{_:"0"},M:{"0":0.29633},Q:{"10.4":0},O:{"0":0},H:{"0":0.06037}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MD.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MD.js index 3cb7e1a8769..a7033e96759 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MD.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MD.js @@ -1 +1 @@ -module.exports={C:{"16":0.00426,"52":0.06389,"55":0.00852,"68":0.00426,"77":0.00426,"78":0.03833,"80":0.00426,"84":0.00426,"85":0.00426,"87":0.24276,"88":0.00852,"89":0.00852,"90":0.00426,"91":0.11073,"92":0.00426,"93":0.01278,"94":0.04259,"95":0.07666,"96":0.79217,"97":0.9242,"98":0.00852,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 79 81 82 83 86 99 3.5 3.6"},D:{"34":0.00426,"38":0.00426,"48":0.0213,"49":0.11073,"53":0.00426,"57":0.00426,"58":0.00852,"59":0.01704,"63":0.00852,"64":0.00852,"67":0.04685,"68":0.00852,"69":0.01704,"70":0.01278,"71":0.02555,"72":0.00852,"73":0.0213,"74":0.03407,"75":0.00426,"76":0.04259,"77":0.02555,"78":0.00852,"79":0.03407,"80":0.07666,"81":0.01278,"83":0.05963,"84":0.09796,"85":0.04685,"86":0.08518,"87":0.05537,"88":0.02981,"89":0.03833,"90":0.07666,"91":0.05111,"92":0.05111,"93":2.71724,"94":0.07666,"95":0.04685,"96":0.86884,"97":9.702,"98":18.10501,"99":0.01278,"100":0.00426,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 47 50 51 52 54 55 56 60 61 62 65 66 101"},F:{"70":0.02555,"82":0.41738,"83":1.53324,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01704,"85":0.01704,"91":0.00852,"92":0.00852,"96":0.01278,"97":0.33646,"98":1.07753,_:"12 13 14 15 16 17 79 80 81 83 84 86 87 88 89 90 93 94 95"},E:{"4":0,"13":0.04259,"14":0.10648,"15":0.05111,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 10.1 15.4","5.1":0.05537,"9.1":0.00852,"11.1":0.00426,"12.1":0.01278,"13.1":0.10648,"14.1":0.26832,"15.1":0.12777,"15.2-15.3":0.24702},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00093,"6.0-6.1":0,"7.0-7.1":0.00371,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.0167,"10.0-10.2":0.00371,"10.3":0.0334,"11.0-11.2":0.01392,"11.3-11.4":0.01113,"12.0-12.1":0.01021,"12.2-12.5":0.30157,"13.0-13.1":0.01485,"13.2":0.00557,"13.3":0.04176,"13.4-13.7":0.16517,"14.0-14.4":0.50479,"14.5-14.8":1.90222,"15.0-15.1":1.56261,"15.2-15.3":4.63771,"15.4":0.04176},P:{"4":0.06258,"5.0-5.4":0.01024,"6.2-6.4":0.02048,"7.2-7.4":0.04172,"8.2":0.01015,"9.2":0.03129,"10.1":0.02048,"11.1-11.2":0.07301,"12.0":0.02086,"13.0":0.11472,"14.0":0.12515,"15.0":0.13558,"16.0":1.89817},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00197,"4.2-4.3":0.00492,"4.4":0,"4.4.3-4.4.4":0.02756},A:{"6":0.0047,"7":0.0047,"8":0.04232,"9":0.01411,"10":0.01411,"11":0.14578,_:"5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.06315},Q:{"10.4":0},O:{"0":0.08037},H:{"0":0.20654},L:{"0":41.25343},S:{"2.5":0}}; +module.exports={C:{"52":0.07563,"55":0.00445,"60":0.00445,"68":0.01335,"78":0.03114,"82":0.08008,"87":0.09788,"91":0.24914,"93":0.0178,"96":0.00445,"97":0.0089,"98":0.0089,"99":0.02225,"100":0.00445,"101":0.0178,"102":0.28029,"103":2.16221,"104":0.28029,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 56 57 58 59 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 83 84 85 86 88 89 90 92 94 95 105 106 3.5","3.6":0.04449},D:{"49":0.11123,"61":0.00445,"63":0.00445,"64":0.0089,"67":0.01335,"68":0.0178,"69":0.0178,"70":0.01335,"71":0.02225,"72":0.01335,"74":0.04449,"75":0.53833,"77":0.0089,"78":0.02225,"79":0.10678,"80":0.2358,"81":0.0089,"83":0.0178,"84":0.10233,"85":0.05339,"86":0.11567,"87":0.03114,"88":0.02225,"89":0.02225,"90":0.01335,"91":0.0178,"92":0.05339,"93":0.01335,"94":0.06674,"95":0.01335,"96":0.12012,"97":0.08898,"98":0.05339,"99":0.07563,"100":0.08453,"101":0.19131,"102":0.60062,"103":7.91922,"104":19.77136,"105":0.05339,"106":0.02669,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 62 65 66 73 76 107 108"},F:{"36":0.00445,"79":0.0089,"82":0.00445,"84":0.0089,"85":0.04449,"87":0.01335,"88":0.02225,"89":2.51813,"90":0.36037,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 83 86 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.0089,"92":0.0089,"97":0.00445,"101":0.01335,"102":0.02225,"103":0.39151,"104":1.08556,_:"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94 95 96 98 99 100 105"},E:{"4":0,"11":0.00445,"13":0.03114,"14":0.07118,"15":0.0089,_:"0 5 6 7 8 9 10 12 3.1 3.2 6.1 7.1 10.1 11.1","5.1":0.0089,"9.1":0.0089,"12.1":0.01335,"13.1":0.08008,"14.1":0.16461,"15.1":0.04449,"15.2-15.3":0.02225,"15.4":0.13347,"15.5":0.25804,"15.6":0.42266,"16.0":0.01335},G:{"8":0.00202,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00505,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01717,"10.0-10.2":0.00101,"10.3":0.03738,"11.0-11.2":0.01717,"11.3-11.4":0.01414,"12.0-12.1":0.01111,"12.2-12.5":0.30712,"13.0-13.1":0.01717,"13.2":0.00909,"13.3":0.02526,"13.4-13.7":0.1384,"14.0-14.4":0.25862,"14.5-14.8":0.75264,"15.0-15.1":0.16972,"15.2-15.3":0.27984,"15.4":0.50109,"15.5":2.42764,"15.6":4.9371,"16.0":0.16669},P:{"4":0.2273,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.05166,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.02066,"12.0":0,"13.0":0.031,"14.0":0.04133,"15.0":0.02066,"16.0":0.08266,"17.0":0.80589,"18.0":1.03319},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00828,"4.2-4.3":0.02483,"4.4":0,"4.4.3-4.4.4":0.06124},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"8":0.01335,"11":0.28919,_:"6 7 9 10 5.5"},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":43.63078},S:{"2.5":0},R:{_:"0"},M:{"0":0.37185},Q:{"10.4":0},O:{"0":0.07215},H:{"0":0.2417}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ME.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ME.js index cd3302474fa..5ef3fc5d75a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ME.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ME.js @@ -1 +1 @@ -module.exports={C:{"34":0.00341,"48":0.04091,"49":0.00341,"52":0.92043,"56":0.00341,"84":0.01705,"88":0.01705,"89":0.00341,"91":0.01705,"92":0.00682,"93":0.01364,"94":0.01023,"95":0.02045,"96":0.61703,"97":1.28519,"98":0.01364,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 85 86 87 90 99 3.5 3.6"},D:{"11":0.00341,"34":0.00682,"38":0.01364,"49":0.075,"53":0.075,"56":0.00341,"62":0.00341,"63":0.00341,"66":0.05795,"68":0.02727,"75":0.00341,"77":0.00682,"78":0.03068,"79":0.10568,"80":0.02386,"81":0.01023,"83":0.01023,"84":0.03409,"85":0.04773,"86":0.01364,"87":0.08182,"88":0.05795,"89":0.02386,"90":0.01023,"91":0.02727,"92":0.05454,"93":0.075,"94":0.03068,"95":0.04773,"96":0.32045,"97":5.7578,"98":12.30308,"99":0.00682,"100":0.01023,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 57 58 59 60 61 64 65 67 69 70 71 72 73 74 76 101"},F:{"28":0.00682,"40":0.01023,"42":0.01364,"46":0.01705,"68":7.9532,"74":0.00341,"82":0.16022,"83":0.78407,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 41 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 69 70 71 72 73 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.00682,"91":0.00682,"92":0.02045,"96":0.00341,"97":0.22159,"98":0.8693,_:"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 93 94 95"},E:{"4":0,"12":0.00682,"13":0.02045,"14":0.06818,"15":0.02386,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00341,"12.1":0.03068,"13.1":0.05454,"14.1":0.17386,"15.1":0.08523,"15.2-15.3":0.15681},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01388,"8.1-8.4":0.00185,"9.0-9.2":0,"9.3":0.03793,"10.0-10.2":0.00185,"10.3":0.11378,"11.0-11.2":0.0111,"11.3-11.4":0.02313,"12.0-12.1":0.02128,"12.2-12.5":0.49397,"13.0-13.1":0.01573,"13.2":0.00463,"13.3":0.0555,"13.4-13.7":0.18963,"14.0-14.4":0.51155,"14.5-14.8":2.40048,"15.0-15.1":1.20625,"15.2-15.3":4.1192,"15.4":0.02405},P:{"4":0.12465,"5.0-5.4":0.07136,"6.2-6.4":0.02048,"7.2-7.4":0.04155,"8.2":0.01015,"9.2":0.08155,"10.1":0.02048,"11.1-11.2":0.05194,"12.0":0.01039,"13.0":0.07271,"14.0":0.10387,"15.0":0.11426,"16.0":2.2748},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00081,"4.2-4.3":0.00244,"4.4":0,"4.4.3-4.4.4":0.01652},A:{"11":0.08863,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.11203},Q:{"10.4":0},O:{"0":0.01318},H:{"0":0.18093},L:{"0":42.12832},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01649,"53":0,"54":0,"55":0,"56":0.0033,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.0033,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.0033,"79":0,"80":0,"81":0,"82":0.01649,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.01319,"92":0.0033,"93":0,"94":0.0033,"95":0.0033,"96":0,"97":0.0033,"98":0.0066,"99":0.0033,"100":0,"101":0.0033,"102":0.01319,"103":0.6563,"104":0.08905,"105":0.01319,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0033,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.0033,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.0033,"39":0,"40":0,"41":0,"42":0.0033,"43":0,"44":0,"45":0,"46":0,"47":0.0033,"48":0,"49":0.00989,"50":0,"51":0,"52":0,"53":0.0066,"54":0,"55":0,"56":0,"57":0,"58":0.0033,"59":0,"60":0,"61":0,"62":0.0033,"63":0,"64":0,"65":0,"66":0,"67":0.0033,"68":0,"69":0,"70":0.0033,"71":0,"72":0,"73":0,"74":0.0033,"75":0,"76":0.0033,"77":0.0033,"78":0.0033,"79":0.09894,"80":0.0066,"81":0.0066,"83":0.02638,"84":0.02309,"85":0.01319,"86":0.0066,"87":0.02968,"88":0.00989,"89":0.02309,"90":0.0033,"91":0.0033,"92":0.01319,"93":0.0066,"94":0,"95":0.0066,"96":0.04287,"97":0.01319,"98":0.06596,"99":0.01649,"100":0.02638,"101":0.02968,"102":0.06266,"103":2.17668,"104":5.06573,"105":0.01649,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.0033,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.0033,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.0033,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0033,"64":0.0033,"65":0,"66":0,"67":0,"68":0.07915,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0.0033,"82":0,"83":0,"84":0.0033,"85":0.00989,"86":0,"87":0,"88":0.0033,"89":0.31001,"90":0.05936,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0.0033,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.0066,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.0033,"103":0.11873,"104":0.34629,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.0033,"14":0.02309,"15":0.0033,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.0033,"12.1":0.0066,"13.1":0.01979,"14.1":0.05607,"15.1":0.01979,"15.2-15.3":0.0066,"15.4":0.02968,"15.5":0.19458,"15.6":0.20118,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00247,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.05442,"8.1-8.4":0.02721,"9.0-9.2":0,"9.3":0.07668,"10.0-10.2":0.00247,"10.3":0.16325,"11.0-11.2":0.047,"11.3-11.4":0.01484,"12.0-12.1":0.02473,"12.2-12.5":0.46748,"13.0-13.1":0.00742,"13.2":0.00495,"13.3":0.05194,"13.4-13.7":0.16077,"14.0-14.4":0.64062,"14.5-14.8":2.83703,"15.0-15.1":0.31165,"15.2-15.3":0.57631,"15.4":1.31587,"15.5":6.28995,"15.6":11.37781,"16.0":0.2696},P:{"4":0.29844,"5.0-5.4":0.07204,"6.2-6.4":0,"7.2-7.4":0.02058,"8.2":0,"9.2":0,"10.1":0.01029,"11.1-11.2":0.16466,"12.0":0.03087,"13.0":0.06175,"14.0":0.05146,"15.0":0.03087,"16.0":0.08233,"17.0":1.21434,"18.0":1.7289},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01598,"4.2-4.3":0.00625,"4.4":0,"4.4.3-4.4.4":0.03404},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0066,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":58.98131},S:{"2.5":0},R:{_:"0"},M:{"0":0.28148},Q:{"10.4":0},O:{"0":0.02681},H:{"0":0.26649}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MG.js index 88395a65173..62e8ec38258 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MG.js @@ -1 +1 @@ -module.exports={C:{"16":0.00964,"28":0.00964,"36":0.00482,"39":0.00964,"40":0.01447,"41":0.00964,"42":0.00482,"47":0.02411,"48":0.02411,"52":0.13019,"56":0.02411,"59":0.00482,"60":0.01929,"61":0.00964,"66":0.01929,"68":0.01929,"69":0.01447,"70":0.01929,"72":0.18324,"75":0.00482,"78":0.05786,"79":0.02411,"80":0.00482,"81":0.00964,"82":0.00964,"83":0.00964,"84":0.01447,"85":0.00964,"86":0.00964,"87":0.01447,"88":0.05304,"89":0.10126,"90":0.00482,"91":0.1543,"92":0.0434,"93":0.0868,"94":0.04822,"95":0.1543,"96":2.02042,"97":3.18734,"98":0.04822,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 43 44 45 46 49 50 51 53 54 55 57 58 62 63 64 65 67 71 73 74 76 77 99 3.5 3.6"},D:{"11":0.07715,"29":0.00482,"38":0.00482,"40":0.05786,"42":0.06269,"43":0.05304,"49":0.09162,"55":0.00964,"57":0.02893,"58":0.00964,"60":0.02411,"61":0.01447,"63":0.01447,"64":0.01447,"65":0.00964,"67":0.03858,"68":0.00482,"69":0.00482,"70":0.00482,"71":0.02893,"72":0.00964,"73":0.01447,"74":0.02893,"75":0.00482,"76":0.07715,"77":0.00964,"78":0.06269,"79":0.03858,"80":0.04822,"81":0.13984,"83":0.0434,"84":0.01929,"85":0.03858,"86":0.20252,"87":0.16877,"88":0.03858,"89":0.18324,"90":0.07233,"91":0.13502,"92":0.10608,"93":0.44845,"94":0.08197,"95":0.19288,"96":1.21032,"97":6.82795,"98":15.09768,"99":0.01447,"100":0.02893,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 39 41 44 45 46 47 48 50 51 52 53 54 56 59 62 66 101"},F:{"37":0.00964,"53":0.08197,"66":0.03375,"68":0.06751,"79":0.01447,"82":0.13019,"83":0.88243,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 54 55 56 57 58 60 62 63 64 65 67 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00964,"13":0.00482,"14":0.00964,"15":0.00964,"17":0.00964,"18":0.03375,"84":0.01447,"85":0.01929,"89":0.01447,"90":0.01929,"92":0.01929,"93":0.02893,"94":0.00964,"95":0.02893,"96":0.03858,"97":0.57382,"98":1.7745,_:"16 79 80 81 83 86 87 88 91"},E:{"4":0,"14":0.01447,"15":0.01447,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.07715,"12.1":0.06751,"13.1":0.09644,"14.1":0.13019,"15.1":0.06751,"15.2-15.3":0.05304},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.01522,"5.0-5.1":0.00098,"6.0-6.1":0.00074,"7.0-7.1":0.02356,"8.1-8.4":0.00123,"9.0-9.2":0.00123,"9.3":0.03878,"10.0-10.2":0.04467,"10.3":0.06209,"11.0-11.2":0.01301,"11.3-11.4":0.01031,"12.0-12.1":0.01203,"12.2-12.5":0.27904,"13.0-13.1":0.04172,"13.2":0.00442,"13.3":0.03755,"13.4-13.7":0.07976,"14.0-14.4":0.24051,"14.5-14.8":0.33597,"15.0-15.1":0.29057,"15.2-15.3":0.90852,"15.4":0.01203},P:{"4":0.08639,"5.0-5.4":0.0216,"6.2-6.4":0.05053,"7.2-7.4":0.0108,"8.2":0.01057,"9.2":0.07569,"10.1":0.05053,"11.1-11.2":0.0216,"12.0":0.0432,"13.0":0.0648,"14.0":0.21599,"15.0":0.0756,"16.0":0.46437},I:{"0":0,"3":0,"4":0.00043,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00534,"4.2-4.3":0.01025,"4.4":0,"4.4.3-4.4.4":0.06681},A:{"9":0.01232,"11":0.09858,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.37792},Q:{"10.4":0.01035},O:{"0":1.07682},H:{"0":4.3229},L:{"0":51.88882},S:{"2.5":0.06212}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.0049,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.0049,"44":0,"45":0,"46":0,"47":0.01961,"48":0.0049,"49":0,"50":0,"51":0,"52":0.04413,"53":0,"54":0,"55":0,"56":0.0049,"57":0.0049,"58":0.0049,"59":0,"60":0,"61":0,"62":0,"63":0.0049,"64":0,"65":0,"66":0.0049,"67":0,"68":0.00981,"69":0,"70":0,"71":0,"72":0.02452,"73":0,"74":0,"75":0,"76":0,"77":0.0049,"78":0.03922,"79":0,"80":0,"81":0.00981,"82":0.0049,"83":0,"84":0.0049,"85":0,"86":0.0049,"87":0.0049,"88":0.01471,"89":0.01471,"90":0,"91":0.06864,"92":0.0049,"93":0.0049,"94":0.00981,"95":0.01961,"96":0.02452,"97":0.05393,"98":0.01471,"99":0.03922,"100":0.04903,"101":0.07845,"102":0.18141,"103":2.73587,"104":0.34811,"105":0.0049,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02942,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0.0049,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00981,"41":0,"42":0.00981,"43":0.0049,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02452,"50":0.00981,"51":0.0049,"52":0,"53":0,"54":0,"55":0.00981,"56":0.02452,"57":0.02942,"58":0.01471,"59":0,"60":0,"61":0.0049,"62":0.01961,"63":0.0049,"64":0.0049,"65":0.0049,"66":0.05884,"67":0.0049,"68":0,"69":0.00981,"70":0.01961,"71":0.0049,"72":0.02452,"73":0.0049,"74":0.01961,"75":0.0049,"76":0.0049,"77":0.0049,"78":0.0049,"79":0.01961,"80":0.00981,"81":0.04903,"83":0.0049,"84":0.00981,"85":0.01471,"86":0.07355,"87":0.04903,"88":0.02942,"89":0.15199,"90":0.02942,"91":0.00981,"92":0.01471,"93":0.05393,"94":0.02942,"95":0.07355,"96":0.04413,"97":0.10296,"98":0.02942,"99":0.06374,"100":0.08335,"101":0.09316,"102":0.19612,"103":3.2703,"104":7.23193,"105":0.03432,"106":0.00981,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0.00981,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.0049,"27":0.0049,"28":0.00981,"29":0.0049,"30":0.0049,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.0049,"37":0.01471,"38":0.00981,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.0049,"47":0.0049,"48":0,"49":0,"50":0.00981,"51":0,"52":0,"53":0.03432,"54":0.0049,"55":0,"56":0,"57":0.0049,"58":0.01961,"60":0.09316,"62":0.0049,"63":0.22554,"64":0.12258,"65":0,"66":0,"67":0,"68":0,"69":0.00981,"70":0.0049,"71":0.0049,"72":0,"73":0,"74":0,"75":0,"76":0.0049,"77":0,"78":0,"79":0.03432,"80":0,"81":0.0049,"82":0.00981,"83":0,"84":0.00981,"85":0.03432,"86":0.00981,"87":0.00981,"88":0.01471,"89":0.64229,"90":0.07355,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.01471},B:{"12":0.0049,"13":0.0049,"14":0.01961,"15":0.00981,"16":0,"17":0.0049,"18":0.02452,"79":0,"80":0,"81":0,"83":0,"84":0.0049,"85":0.00981,"86":0,"87":0,"88":0,"89":0.0049,"90":0.0049,"91":0,"92":0.01471,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.01471,"100":0.00981,"101":0.0049,"102":0.01471,"103":0.39224,"104":0.89725,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.0049,"15":0.0049,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00981,"12.1":0.01471,"13.1":0.01961,"14.1":0.04903,"15.1":0,"15.2-15.3":0.0049,"15.4":0.00981,"15.5":0.02942,"15.6":0.04413,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00851,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.03023,"8.1-8.4":0.00088,"9.0-9.2":0.00117,"9.3":0.02817,"10.0-10.2":0.00323,"10.3":0.1212,"11.0-11.2":0.00147,"11.3-11.4":0.00411,"12.0-12.1":0.00499,"12.2-12.5":0.31342,"13.0-13.1":0.00763,"13.2":0.01115,"13.3":0.01027,"13.4-13.7":0.07953,"14.0-14.4":0.23184,"14.5-14.8":0.19251,"15.0-15.1":0.15055,"15.2-15.3":0.10741,"15.4":0.16463,"15.5":0.58634,"15.6":0.85839,"16.0":0.01555},P:{"4":0.07176,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.0205,"8.2":0,"9.2":0.01025,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0.03076,"14.0":0.04101,"15.0":0.01025,"16.0":0.15378,"17.0":0.37932,"18.0":0.18453},I:{"0":0,"3":0,"4":0.00137,"2.1":0,"2.2":0,"2.3":0,"4.1":0.04144,"4.2-4.3":0.03916,"4.4":0,"4.4.3-4.4.4":0.15255},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.0049,"10":0,"11":0.01471,"5.5":0},J:{"7":0,"10":0.01529},N:{"10":0,"11":0},L:{"0":69.76109},S:{"2.5":0.09175},R:{_:"0"},M:{"0":0.44344},Q:{"10.4":0.0051},O:{"0":0.81042},H:{"0":3.11728}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MH.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MH.js index 0fedaeae193..f35a35c6c83 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MH.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MH.js @@ -1 +1 @@ -module.exports={C:{"78":0.00723,"85":0.00241,"91":0.00723,"95":0.01205,"96":0.20236,"97":0.72029,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 86 87 88 89 90 92 93 94 98 99 3.5 3.6"},D:{"36":0.00241,"60":0.00241,"73":0.15418,"75":0.01686,"80":0.00723,"81":0.01205,"84":0.01927,"87":0.02168,"90":0.00241,"92":0.07468,"93":0.11081,"94":0.00482,"95":0.00482,"96":0.10359,"97":5.90205,"98":11.89564,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 72 74 76 77 78 79 83 85 86 88 89 91 99 100 101"},F:{"82":0.00723,"83":0.03614,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.00241,"80":0.01205,"84":0.02168,"89":0.00723,"90":0.00241,"92":0.00964,"95":0.01205,"97":0.20717,"98":0.84797,_:"12 13 14 15 16 17 79 81 83 85 86 87 88 91 93 94 96"},E:{"4":0,"13":0.00482,"14":0.01205,"15":0.00241,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 15.4","12.1":0.053,"13.1":0.40471,"14.1":0.67934,"15.1":0.06023,"15.2-15.3":0.01686},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00388,"9.0-9.2":0,"9.3":0.00388,"10.0-10.2":0,"10.3":0.02286,"11.0-11.2":0.16603,"11.3-11.4":0.00776,"12.0-12.1":0.00388,"12.2-12.5":0.06296,"13.0-13.1":0.00173,"13.2":0.00388,"13.3":0.00561,"13.4-13.7":0.02458,"14.0-14.4":0.68483,"14.5-14.8":1.30023,"15.0-15.1":0.95997,"15.2-15.3":1.05959,"15.4":0},P:{"4":0.02189,"5.0-5.4":0.01033,"6.2-6.4":0.02087,"7.2-7.4":0.03284,"8.2":0.01057,"9.2":0.02066,"10.1":0.01052,"11.1-11.2":0.02189,"12.0":0.01095,"13.0":0.03284,"14.0":0.08588,"15.0":0.09661,"16.0":0.35025},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.05782,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.03036},Q:{"10.4":0},O:{"0":0.90333},H:{"0":0.02156},L:{"0":12.69557},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0.02679,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00536,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00536,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00536,"99":0.00536,"100":0,"101":0,"102":0.00536,"103":0.34291,"104":0.04286,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00536,"64":0,"65":0,"66":0,"67":0.02679,"68":0,"69":0.00536,"70":0,"71":0,"72":0,"73":0.17146,"74":0,"75":0.02679,"76":0,"77":0.05894,"78":0.00536,"79":0.01072,"80":0.04822,"81":0,"83":0,"84":0,"85":0,"86":0.00536,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.01607,"93":0.02679,"94":0,"95":0,"96":0,"97":0.01072,"98":0.00536,"99":0.02679,"100":0.1018,"101":1.55382,"102":0.02679,"103":4.62395,"104":11.97513,"105":0.05894,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.10716,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00536,"16":0,"17":0,"18":0.00536,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0.00536,"94":0,"95":0,"96":0,"97":0.00536,"98":0,"99":0,"100":0,"101":0,"102":0.01607,"103":1.16269,"104":1.62883,"105":0.01607},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00536,"13":0.01072,"14":0.54652,"15":0.00536,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.19289,"11.1":0,"12.1":0,"13.1":0.4715,"14.1":0.71797,"15.1":0.00536,"15.2-15.3":0,"15.4":0.08037,"15.5":0.32684,"15.6":0.12859,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":6.19512,"10.0-10.2":0.07613,"10.3":0.26224,"11.0-11.2":0.15227,"11.3-11.4":0,"12.0-12.1":0.02538,"12.2-12.5":1.10818,"13.0-13.1":0.00846,"13.2":0.02538,"13.3":0,"13.4-13.7":0.05922,"14.0-14.4":0.47373,"14.5-14.8":1.13356,"15.0-15.1":1.37325,"15.2-15.3":0.90516,"15.4":0.51602,"15.5":7.38789,"15.6":8.49044,"16.0":0},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.06605,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.03303,"12.0":0,"13.0":0.04403,"14.0":0.01101,"15.0":0.03303,"16.0":0.01101,"17.0":2.59802,"18.0":4.68965},I:{"0":0,"3":0,"4":0.18764,"2.1":0,"2.2":0.03412,"2.3":0,"4.1":0,"4.2-4.3":0.15352,"4.4":0,"4.4.3-4.4.4":0.18764},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.01607,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":34.84369},S:{"2.5":0},R:{_:"0"},M:{"0":0.10212},Q:{"10.4":0},O:{"0":0.07427},H:{"0":0.02197}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MK.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MK.js index 44d3fec3acf..6362ef37fb4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MK.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MK.js @@ -1 +1 @@ -module.exports={C:{"40":0.02095,"44":0.00698,"47":0.01047,"48":0.00349,"50":0.00698,"51":0.01396,"52":0.2723,"56":0.01047,"65":0.00349,"66":0.00698,"68":0.01047,"71":0.00349,"72":0.01746,"78":0.02095,"79":0.02793,"80":0.02095,"81":0.01047,"82":0.04538,"83":0.00349,"84":0.00698,"85":0.00698,"87":0.00349,"88":0.01047,"91":0.04189,"92":0.00349,"93":0.00698,"94":0.04538,"95":0.09077,"96":0.78897,"97":1.47669,"98":0.01047,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 42 43 45 46 49 53 54 55 57 58 59 60 61 62 63 64 67 69 70 73 74 75 76 77 86 89 90 99 3.5 3.6"},D:{"22":0.00349,"26":0.00698,"34":0.00698,"38":0.01047,"47":0.05237,"48":0.01396,"49":0.15011,"53":0.03491,"56":0.01396,"58":0.00698,"63":0.01047,"64":0.01047,"66":0.01396,"68":0.01047,"69":0.02095,"70":0.00349,"71":0.01746,"72":0.01396,"73":0.00349,"74":0.00698,"76":0.00698,"77":0.01396,"78":0.02793,"79":0.10124,"80":0.01746,"81":0.01047,"83":0.05935,"84":0.13615,"85":0.12568,"86":0.17106,"87":0.2339,"88":0.02793,"89":0.02444,"90":0.03142,"91":0.06633,"92":0.05935,"93":0.02793,"94":0.0384,"95":0.11869,"96":0.40845,"97":7.2543,"98":17.09892,"99":0.01047,"100":0.00698,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 50 51 52 54 55 57 59 60 61 62 65 67 75 101"},F:{"28":0.00349,"31":0.01047,"36":0.00698,"46":0.00698,"52":0.01396,"68":0.01396,"69":0.01396,"70":0.00698,"71":0.01746,"72":0.00349,"73":0.01047,"80":0.00349,"82":0.26881,"83":1.1625,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 53 54 55 56 57 58 60 62 63 64 65 66 67 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.03491,"18":0.03142,"84":0.01047,"85":0.00698,"87":0.00698,"92":0.01746,"94":0.00698,"95":0.00349,"96":0.03491,"97":0.30721,"98":1.21836,_:"12 13 14 15 17 79 80 81 83 86 88 89 90 91 93"},E:{"4":0,"11":0.00349,"13":0.00698,"14":0.04538,"15":0.05586,_:"0 5 6 7 8 9 10 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.00698,"12.1":0.00349,"13.1":0.03142,"14.1":0.11171,"15.1":0.07331,"15.2-15.3":0.09077,"15.4":0.01746},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00232,"6.0-6.1":0,"7.0-7.1":0.01275,"8.1-8.4":0,"9.0-9.2":0.00464,"9.3":0.0313,"10.0-10.2":0.00464,"10.3":0.04406,"11.0-11.2":0.01739,"11.3-11.4":0.04058,"12.0-12.1":0.02087,"12.2-12.5":0.49739,"13.0-13.1":0.01159,"13.2":0.01043,"13.3":0.0858,"13.4-13.7":0.22493,"14.0-14.4":0.57855,"14.5-14.8":2.65738,"15.0-15.1":1.77506,"15.2-15.3":5.5362,"15.4":0.03014},P:{"4":0.07399,"5.0-5.4":0.89089,"6.2-6.4":0.05053,"7.2-7.4":0.03115,"8.2":0.01057,"9.2":0.07569,"10.1":0.05053,"11.1-11.2":0.13741,"12.0":0.02114,"13.0":0.09513,"14.0":0.11627,"15.0":0.09513,"16.0":1.92377},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00393,"4.2-4.3":0.00393,"4.4":0,"4.4.3-4.4.4":0.02469},A:{"8":0.02095,"9":0.02095,"10":0.00349,"11":0.10822,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.11716},Q:{"10.4":0},O:{"0":0.01302},H:{"0":0.15406},L:{"0":45.88336},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00707,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00353,"48":0.00353,"49":0,"50":0,"51":0.0106,"52":0.04241,"53":0,"54":0,"55":0,"56":0.0106,"57":0,"58":0,"59":0,"60":0,"61":0.00353,"62":0,"63":0,"64":0,"65":0.00353,"66":0,"67":0.00707,"68":0.00707,"69":0,"70":0,"71":0,"72":0.00707,"73":0,"74":0.00707,"75":0,"76":0,"77":0,"78":0.00353,"79":0.00353,"80":0.00707,"81":0.01767,"82":0,"83":0.01414,"84":0.00353,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.01414,"92":0,"93":0,"94":0.00353,"95":0,"96":0,"97":0,"98":0,"99":0.01414,"100":0.00353,"101":0.00707,"102":0.05301,"103":0.60431,"104":0.12016,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00353,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.03534,"48":0,"49":0.02827,"50":0,"51":0,"52":0,"53":0.00707,"54":0,"55":0,"56":0.00353,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00353,"64":0.00707,"65":0,"66":0.00353,"67":0,"68":0.00353,"69":0.00353,"70":0.00353,"71":0.00353,"72":0.00707,"73":0.0106,"74":0.00353,"75":0.00353,"76":0.00353,"77":0.00353,"78":0.00353,"79":0.07068,"80":0.0106,"81":0.02827,"83":0.01767,"84":0.04948,"85":0.03887,"86":0.05654,"87":0.03181,"88":0.01414,"89":0.00707,"90":0.00707,"91":0.0106,"92":0.03181,"93":0.00353,"94":0.00353,"95":0.0106,"96":0.0106,"97":0.0212,"98":0.00707,"99":0.01414,"100":0.0212,"101":0.0212,"102":0.06008,"103":2.25823,"104":6.49196,"105":0.01767,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00353,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00353,"37":0,"38":0,"39":0,"40":0.00353,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00353,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00353,"64":0.00353,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00353,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.0106,"86":0.00707,"87":0,"88":0.00353,"89":0.40641,"90":0.04594,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00353,"18":0.00353,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00353,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00353,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00353,"102":0.00353,"103":0.1555,"104":0.44882,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00353,"14":0.00707,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00353,"13.1":0.01767,"14.1":0.0212,"15.1":0.00353,"15.2-15.3":0.00707,"15.4":0.0212,"15.5":0.04594,"15.6":0.09542,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.02671,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.0452,"10.0-10.2":0.00205,"10.3":0.04315,"11.0-11.2":0.01849,"11.3-11.4":0.01233,"12.0-12.1":0.02466,"12.2-12.5":0.64927,"13.0-13.1":0.01027,"13.2":0.01438,"13.3":0.07397,"13.4-13.7":0.16026,"14.0-14.4":0.4212,"14.5-14.8":1.40949,"15.0-15.1":0.26711,"15.2-15.3":0.48901,"15.4":0.83214,"15.5":5.76125,"15.6":10.08014,"16.0":0.19519},P:{"4":0.14357,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.02051,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.06153,"12.0":0.04102,"13.0":0.08204,"14.0":0.07178,"15.0":0.03076,"16.0":0.10255,"17.0":1.17932,"18.0":1.48697},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.07784,"4.2-4.3":0.00121,"4.4":0,"4.4.3-4.4.4":0.00922},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00353,"10":0,"11":0.02827,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":62.37628},S:{"2.5":0},R:{_:"0"},M:{"0":0.14872},Q:{"10.4":0},O:{"0":0.03233},H:{"0":0.23874}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ML.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ML.js index b14ac463dab..79fcdff4138 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ML.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ML.js @@ -1 +1 @@ -module.exports={C:{"41":0.00228,"43":0.00228,"47":0.00685,"48":0.00685,"52":0.00228,"56":0.00457,"57":0.00228,"72":0.02741,"78":0.00685,"87":0.00457,"88":0.00457,"89":0.00914,"91":0.02512,"93":0.00457,"94":0.00457,"95":0.01142,"96":1.20824,"97":1.39096,"98":0.00457,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 44 45 46 49 50 51 53 54 55 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 90 92 99 3.5 3.6"},D:{"11":0.00685,"30":0.00228,"38":0.00228,"43":0.00914,"49":0.00457,"50":0.00228,"57":0.00685,"60":0.00457,"63":0.00685,"65":0.00228,"68":0.01142,"76":0.01142,"77":0.01142,"78":0.00228,"79":0.02741,"80":0.01142,"81":0.00685,"83":0.00228,"84":0.00228,"85":0.00228,"86":0.00457,"87":0.02284,"88":0.00457,"89":0.00685,"90":0.01142,"91":0.01142,"92":0.02512,"93":0.07309,"94":0.00685,"95":0.01827,"96":2.18122,"97":3.7686,"98":6.64644,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 39 40 41 42 44 45 46 47 48 51 52 53 54 55 56 58 59 61 62 64 66 67 69 70 71 72 73 74 75 99 100 101"},F:{"51":0.00914,"60":0.00228,"79":0.00228,"80":0.00228,"82":0.08222,"83":0.4431,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 52 53 54 55 56 57 58 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01142,"13":0.01142,"14":0.00685,"15":0.00228,"16":0.00914,"17":0.00914,"18":0.27865,"84":0.00685,"85":0.00685,"89":0.02741,"90":0.00457,"92":0.01142,"93":0.00228,"95":0.00457,"96":0.02284,"97":0.47964,"98":1.41151,_:"79 80 81 83 86 87 88 91 94"},E:{"4":0,"14":0.02969,"15":0.00685,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 6.1 9.1 10.1 15.4","5.1":0.00228,"7.1":0.00914,"11.1":0.00228,"12.1":0.00685,"13.1":0.03654,"14.1":0.04111,"15.1":0.01827,"15.2-15.3":0.02969},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.02516,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03972,"10.0-10.2":0,"10.3":0.14961,"11.0-11.2":0.08209,"11.3-11.4":0.04501,"12.0-12.1":0.03177,"12.2-12.5":4.76359,"13.0-13.1":0.00662,"13.2":0.04369,"13.3":0.05296,"13.4-13.7":0.38924,"14.0-14.4":1.69996,"14.5-14.8":1.6801,"15.0-15.1":1.81382,"15.2-15.3":2.38842,"15.4":0.02118},P:{"4":0.30992,"5.0-5.4":0.01033,"6.2-6.4":0.02087,"7.2-7.4":0.24793,"8.2":0.01057,"9.2":0.02066,"10.1":0.01052,"11.1-11.2":0.09297,"12.0":0.42355,"13.0":0.10331,"14.0":0.2376,"15.0":0.21694,"16.0":0.83677},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00631,"4.2-4.3":0.00253,"4.4":0,"4.4.3-4.4.4":0.19949},A:{"9":0.00228,"11":0.05938,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.24691},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.03086},Q:{"10.4":0.00772},O:{"0":0.93364},H:{"0":0.54057},L:{"0":61.78002},S:{"2.5":0.02315}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0.00273,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00273,"73":0.00546,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00273,"87":0,"88":0,"89":0.00273,"90":0,"91":0.00546,"92":0.00273,"93":0,"94":0,"95":0,"96":0.00273,"97":0,"98":0,"99":0.08457,"100":0,"101":0.00546,"102":0.03546,"103":0.62471,"104":0.07093,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00273,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00273,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00273,"64":0,"65":0.00546,"66":0,"67":0,"68":0,"69":0.00273,"70":0.00546,"71":0,"72":0,"73":0,"74":0.00546,"75":0,"76":0.00273,"77":0,"78":0,"79":0.00273,"80":0.00273,"81":0.14458,"83":0,"84":0,"85":0,"86":0.00273,"87":0.01091,"88":0.00546,"89":0,"90":0.00273,"91":0.00273,"92":0.00273,"93":0,"94":0.00273,"95":0.00273,"96":0.00546,"97":0.00273,"98":0.00273,"99":0.00273,"100":0.00546,"101":0.00546,"102":0.02455,"103":1.05574,"104":2.2997,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.0191,"60":0.01364,"62":0,"63":0.05729,"64":0.03819,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00273,"80":0.02728,"81":0,"82":0,"83":0,"84":0,"85":0.00546,"86":0.00273,"87":0,"88":0.00273,"89":0.17459,"90":0.01091,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00546,"13":0,"14":0.00273,"15":0.00273,"16":0.00273,"17":0.00273,"18":0.04638,"79":0,"80":0,"81":0,"83":0,"84":0.00273,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00546,"91":0,"92":0.00546,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00273,"99":0,"100":0.00273,"101":0.00818,"102":0.00273,"103":0.2537,"104":0.58379,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00818,"14":0.01091,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0.00273,"7.1":0,"9.1":0,"10.1":0,"11.1":0.02182,"12.1":0,"13.1":0.01091,"14.1":0.00546,"15.1":0,"15.2-15.3":0.00546,"15.4":0.00273,"15.5":0.01091,"15.6":0.0191,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.0519,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04613,"10.0-10.2":0.02018,"10.3":0.26237,"11.0-11.2":0.0346,"11.3-11.4":0.01442,"12.0-12.1":0.04037,"12.2-12.5":1.40269,"13.0-13.1":0.01153,"13.2":0.00577,"13.3":0.59394,"13.4-13.7":0.11245,"14.0-14.4":0.91687,"14.5-14.8":1.32628,"15.0-15.1":1.26285,"15.2-15.3":0.47573,"15.4":1.60596,"15.5":2.29649,"15.6":3.54349,"16.0":0.39212},P:{"4":0.1209,"5.0-5.4":0.01008,"6.2-6.4":0.01008,"7.2-7.4":0.26195,"8.2":0,"9.2":0.03023,"10.1":0.02015,"11.1-11.2":0.05038,"12.0":0.02015,"13.0":0.0806,"14.0":0.09068,"15.0":0.0806,"16.0":0.2418,"17.0":1.209,"18.0":0.54405},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00519,"4.2-4.3":0.00866,"4.4":0,"4.4.3-4.4.4":0.22163},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00273,"10":0,"11":0.01364,"5.5":0},J:{"7":0,"10":0.02182},N:{"10":0,"11":0},L:{"0":71.91701},S:{"2.5":0.0509},R:{_:"0"},M:{"0":0.20362},Q:{"10.4":0.09454},O:{"0":1.73074},H:{"0":0.95008}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MM.js index 0ae6a965536..a75bd0e62f2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MM.js @@ -1 +1 @@ -module.exports={C:{"29":0.00227,"30":0.00454,"34":0.00227,"35":0.00681,"36":0.00681,"37":0.00227,"39":0.00454,"41":0.00908,"43":0.00908,"44":0.00454,"45":0.00454,"46":0.00227,"47":0.00681,"48":0.00681,"52":0.00908,"54":0.00454,"56":0.01135,"57":0.00681,"58":0.00227,"60":0.14975,"61":0.00454,"62":0.00454,"66":0.02269,"67":0.00227,"68":0.00227,"69":0.00908,"71":0.00227,"72":0.02042,"73":0.00227,"76":0.00227,"77":0.00227,"78":0.09984,"79":0.00227,"81":0.00454,"82":0.00227,"84":0.00908,"85":0.00454,"87":0.00681,"88":0.02042,"89":0.01361,"90":0.00681,"91":0.02723,"92":0.00908,"93":0.01588,"94":0.02723,"95":0.05219,"96":0.8418,"97":1.36594,"98":0.08849,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 31 32 33 38 40 42 49 50 51 53 55 59 63 64 65 70 74 75 80 83 86 99 3.5 3.6"},D:{"11":0.00454,"22":0.00227,"31":0.00227,"32":0.00681,"37":0.00681,"38":0.00681,"40":0.00227,"49":0.00908,"53":0.02723,"54":0.00227,"56":0.00454,"57":0.00227,"61":0.00454,"62":0.00454,"63":0.01135,"65":0.00681,"66":0.00227,"67":0.00454,"70":0.00454,"71":0.01361,"74":0.00681,"76":0.00454,"78":0.00681,"79":0.04311,"80":0.01361,"81":0.01361,"83":0.01361,"84":0.00908,"85":0.00908,"86":0.01588,"87":0.04765,"88":0.01588,"89":0.02042,"90":0.01361,"91":0.0295,"92":0.05673,"93":0.02269,"94":0.02496,"95":0.04765,"96":0.2927,"97":3.57821,"98":9.12819,"99":0.00454,"100":0.00454,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 33 34 35 36 39 41 42 43 44 45 46 47 48 50 51 52 55 58 59 60 64 68 69 72 73 75 77 101"},F:{"36":0.00681,"46":0.00454,"54":0.01135,"77":0.00227,"79":0.00227,"80":0.01815,"81":0.00227,"82":0.0953,"83":0.33808,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00908,"14":0.00227,"15":0.00454,"16":0.00454,"17":0.00681,"18":0.03404,"84":0.00681,"85":0.00454,"89":0.00908,"90":0.00227,"91":0.00227,"92":0.02042,"93":0.00227,"94":0.00454,"95":0.00454,"96":0.02496,"97":0.36758,"98":1.40678,_:"13 79 80 81 83 86 87 88"},E:{"4":0,"12":0.00454,"13":0.02269,"14":0.14068,"15":0.08168,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00908,"11.1":0.01135,"12.1":0.02042,"13.1":0.11118,"14.1":0.34035,"15.1":0.21102,"15.2-15.3":0.39708,"15.4":0.00454},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00233,"5.0-5.1":0.0035,"6.0-6.1":0.00233,"7.0-7.1":0.0251,"8.1-8.4":0.0035,"9.0-9.2":0.007,"9.3":0.06713,"10.0-10.2":0.00292,"10.3":0.08114,"11.0-11.2":0.01634,"11.3-11.4":0.01051,"12.0-12.1":0.00992,"12.2-12.5":0.3088,"13.0-13.1":0.01518,"13.2":0.00584,"13.3":0.03327,"13.4-13.7":0.10799,"14.0-14.4":0.31581,"14.5-14.8":0.85869,"15.0-15.1":1.16108,"15.2-15.3":2.76288,"15.4":0.03561},P:{"4":0.16332,"5.0-5.4":0.03097,"6.2-6.4":0.02048,"7.2-7.4":0.02178,"8.2":0.11355,"9.2":0.08258,"10.1":0.02048,"11.1-11.2":0.02178,"12.0":0.01089,"13.0":0.11977,"14.0":0.07621,"15.0":0.04355,"16.0":0.84925},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00394,"4.2-4.3":0.00507,"4.4":0,"4.4.3-4.4.4":0.23838},A:{"11":0.06807,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.17781},Q:{"10.4":0.03092},O:{"0":1.71628},H:{"0":0.44647},L:{"0":41.94551},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0.00321,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00321,"37":0,"38":0,"39":0,"40":0,"41":0.00321,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00321,"48":0.00321,"49":0,"50":0,"51":0,"52":0.00321,"53":0,"54":0,"55":0,"56":0.00321,"57":0.00321,"58":0,"59":0,"60":0.03857,"61":0.00321,"62":0,"63":0,"64":0,"65":0,"66":0.00321,"67":0,"68":0.00321,"69":0,"70":0.00321,"71":0,"72":0.00643,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00643,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00321,"85":0,"86":0,"87":0,"88":0.00321,"89":0.00321,"90":0,"91":0.00964,"92":0.00643,"93":0.00321,"94":0.00321,"95":0.00321,"96":0.00964,"97":0.00643,"98":0.00321,"99":0.00964,"100":0.00964,"101":0.01286,"102":0.05142,"103":0.80993,"104":0.18963,"105":0.00964,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0.00321,"32":0.00321,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00321,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00321,"49":0,"50":0,"51":0,"52":0,"53":0.00643,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0.00321,"62":0.00321,"63":0.00321,"64":0,"65":0.00321,"66":0,"67":0.00964,"68":0,"69":0.00321,"70":0.00321,"71":0.00964,"72":0.00321,"73":0,"74":0.00964,"75":0,"76":0.00643,"77":0.00643,"78":0.00321,"79":0.0225,"80":0.00643,"81":0.00964,"83":0.00643,"84":0.01286,"85":0.00321,"86":0.00643,"87":0.00964,"88":0.01607,"89":0.01607,"90":0.00643,"91":0.00321,"92":0.04178,"93":0.00321,"94":0.00321,"95":0.00643,"96":0.01286,"97":0.01607,"98":0.00964,"99":0.00964,"100":0.01928,"101":0.01928,"102":0.03857,"103":1.40452,"104":4.16213,"105":0.01286,"106":0.00643,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00321,"37":0.00643,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00321,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00321,"60":0,"62":0,"63":0.02893,"64":0.01607,"65":0,"66":0,"67":0,"68":0,"69":0.00321,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00321,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00321,"86":0,"87":0.00321,"88":0.00321,"89":0.15106,"90":0.01928,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00643,"13":0,"14":0,"15":0.00321,"16":0.00321,"17":0.00643,"18":0.01928,"79":0,"80":0,"81":0,"83":0,"84":0.00321,"85":0,"86":0,"87":0,"88":0,"89":0.00321,"90":0.00321,"91":0,"92":0.00964,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00321,"100":0.00321,"101":0.00321,"102":0.00321,"103":0.33104,"104":0.63959,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00643,"14":0.03214,"15":0.00643,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00964,"11.1":0.00643,"12.1":0.01286,"13.1":0.03214,"14.1":0.05142,"15.1":0.0225,"15.2-15.3":0.00964,"15.4":0.03857,"15.5":0.16391,"15.6":0.25712,"16.0":0.00321},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00199,"6.0-6.1":0.00199,"7.0-7.1":0.0169,"8.1-8.4":0.0159,"9.0-9.2":0.00497,"9.3":0.08946,"10.0-10.2":0.01789,"10.3":0.13518,"11.0-11.2":0.02982,"11.3-11.4":0.01093,"12.0-12.1":0.01988,"12.2-12.5":0.51589,"13.0-13.1":0.01093,"13.2":0.01093,"13.3":0.02982,"13.4-13.7":0.10536,"14.0-14.4":0.31112,"14.5-14.8":0.51092,"15.0-15.1":0.28528,"15.2-15.3":0.30218,"15.4":0.44829,"15.5":2.28819,"15.6":4.68374,"16.0":0.08747},P:{"4":0.17561,"5.0-5.4":0.01033,"6.2-6.4":0,"7.2-7.4":0.02066,"8.2":0,"9.2":0.01033,"10.1":0,"11.1-11.2":0.04132,"12.0":0.01033,"13.0":0.07231,"14.0":0.02066,"15.0":0.02066,"16.0":0.04132,"17.0":0.55784,"18.0":0.64048},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00395,"4.2-4.3":0.01317,"4.4":0,"4.4.3-4.4.4":0.52145},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00367,"9":0.00367,"10":0.00367,"11":0.0404,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":71.52856},S:{"2.5":0},R:{_:"0"},M:{"0":0.21037},Q:{"10.4":0.03393},O:{"0":2.23938},H:{"0":0.59748}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MN.js index b72bd3b0cf0..06e4d6ab11c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MN.js @@ -1 +1 @@ -module.exports={C:{"52":0.04244,"72":0.00386,"78":0.01543,"81":0.01543,"84":0.00772,"87":0.00772,"88":0.01929,"89":0.01929,"90":0.00386,"91":0.01929,"92":0.00386,"94":0.00772,"95":0.01929,"96":0.58256,"97":1.19984,"98":0.05015,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 82 83 85 86 93 99 3.5 3.6"},D:{"38":0.00386,"49":0.04244,"53":0.03086,"63":0.01543,"65":0.00386,"66":0.00386,"67":0.00772,"69":0.00772,"70":0.01543,"71":0.00772,"72":0.00386,"73":0.01543,"74":0.02315,"76":0.01157,"78":0.02701,"79":0.03858,"80":0.01157,"81":0.01157,"83":0.01157,"84":0.02701,"85":0.01929,"86":0.06173,"87":0.09259,"88":0.02315,"89":0.03086,"90":0.03086,"91":0.07716,"92":0.09259,"93":0.08488,"94":0.05015,"95":0.06559,"96":0.73688,"97":6.4853,"98":19.69895,"99":0.02315,"100":0.01929,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 56 57 58 59 60 61 62 64 68 75 77 101"},F:{"28":0.00386,"46":0.00772,"82":0.21991,"83":0.90277,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00772,"16":0.00772,"17":0.00386,"18":0.05015,"84":0.01157,"89":0.01157,"90":0.01157,"91":0.01929,"92":0.01929,"93":0.01543,"94":0.00772,"95":0.01929,"96":0.03472,"97":0.34722,"98":2.09489,_:"13 14 15 79 80 81 83 85 86 87 88"},E:{"4":0,"13":0.01543,"14":0.20062,"15":0.09259,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1","5.1":0.00772,"10.1":0.00772,"11.1":0.02315,"12.1":0.03086,"13.1":0.06559,"14.1":0.54398,"15.1":0.28549,"15.2-15.3":0.41281,"15.4":0.01543},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00602,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.09636,"10.0-10.2":0.00201,"10.3":0.05019,"11.0-11.2":0.01606,"11.3-11.4":0.03814,"12.0-12.1":0.01606,"12.2-12.5":0.95758,"13.0-13.1":0.03212,"13.2":0.02208,"13.3":0.20075,"13.4-13.7":0.267,"14.0-14.4":1.45344,"14.5-14.8":3.27425,"15.0-15.1":4.18365,"15.2-15.3":9.34495,"15.4":0.10238},P:{"4":0.30583,"5.0-5.4":0.07136,"6.2-6.4":0.02048,"7.2-7.4":0.24466,"8.2":0.01015,"9.2":0.08155,"10.1":0.02048,"11.1-11.2":0.09175,"12.0":0.03058,"13.0":0.21408,"14.0":0.36699,"15.0":0.25486,"16.0":4.02675},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00101,"4.2-4.3":0.0037,"4.4":0,"4.4.3-4.4.4":0.01986},A:{"8":0.00817,"10":0.00408,"11":0.05719,_:"6 7 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.23958},Q:{"10.4":0.01229},O:{"0":0.11672},H:{"0":0.16284},L:{"0":37.06002},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00808,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00404,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.01212,"92":0,"93":0,"94":0,"95":0.00808,"96":0.00404,"97":0.00404,"98":0.00404,"99":0.00808,"100":0.00404,"101":0.00808,"102":0.04444,"103":0.505,"104":0.09696,"105":0.00808,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00404,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00404,"64":0,"65":0,"66":0,"67":0.00404,"68":0,"69":0.00404,"70":0.00404,"71":0.00404,"72":0,"73":0.00404,"74":0.01212,"75":0,"76":0.00404,"77":0.00404,"78":0.00404,"79":0.0202,"80":0.00404,"81":0.00808,"83":0.00808,"84":0.00808,"85":0.00808,"86":0.01212,"87":0.01212,"88":0.00808,"89":0.00808,"90":0.01616,"91":0.0202,"92":0.02828,"93":0.00808,"94":0.01616,"95":0.00404,"96":0.02828,"97":0.03636,"98":0.02828,"99":0.04848,"100":0.07272,"101":0.04848,"102":0.14948,"103":3.06232,"104":7.86184,"105":0.0202,"106":0.00404,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.01212,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00808,"64":0.00404,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00404,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00404,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00404,"86":0,"87":0,"88":0.0202,"89":0.47268,"90":0.04444,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00404,"79":0,"80":0,"81":0,"83":0,"84":0.00404,"85":0,"86":0,"87":0,"88":0,"89":0.00404,"90":0.00404,"91":0.00404,"92":0.01212,"93":0,"94":0,"95":0,"96":0.00404,"97":0.00404,"98":0.00404,"99":0.00404,"100":0.00808,"101":0.01212,"102":0.01212,"103":0.32724,"104":0.85244,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01212,"14":0.0606,"15":0.01616,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00404,"12.1":0.01616,"13.1":0.02828,"14.1":0.11312,"15.1":0.0202,"15.2-15.3":0.02424,"15.4":0.06464,"15.5":0.25856,"15.6":0.24644,"16.0":0.00404},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00559,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.08947,"10.0-10.2":0.02796,"10.3":0.11184,"11.0-11.2":0.02237,"11.3-11.4":0.04753,"12.0-12.1":0.01398,"12.2-12.5":0.94502,"13.0-13.1":0.0671,"13.2":0.01118,"13.3":0.10065,"13.4-13.7":0.30755,"14.0-14.4":0.91986,"14.5-14.8":1.95435,"15.0-15.1":0.85835,"15.2-15.3":1.18268,"15.4":2.11652,"15.5":8.15851,"15.6":10.74475,"16.0":0.26282},P:{"4":0.37345,"5.0-5.4":0.02019,"6.2-6.4":0.01009,"7.2-7.4":0.12112,"8.2":0,"9.2":0.07065,"10.1":0,"11.1-11.2":0.06056,"12.0":0.02019,"13.0":0.23214,"14.0":0.11102,"15.0":0.07065,"16.0":0.41382,"17.0":1.83696,"18.0":1.9278},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00977,"4.2-4.3":0.00977,"4.4":0,"4.4.3-4.4.4":0.13087},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0202,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":48.53176},S:{"2.5":0},R:{_:"0"},M:{"0":0.18476},Q:{"10.4":0.01788},O:{"0":0.10728},H:{"0":0.19749}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MO.js index 9fabf4e3859..792a2e5f557 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MO.js @@ -1 +1 @@ -module.exports={C:{"34":0.07637,"52":0.03394,"75":0.00849,"77":0.00424,"81":0.00849,"84":0.00849,"87":0.00424,"88":0.00849,"91":0.01273,"93":0.01697,"94":0.05516,"95":0.02546,"96":0.35641,"97":0.68737,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 76 78 79 80 82 83 85 86 89 90 92 98 99 3.5 3.6"},D:{"22":0.05092,"26":0.05516,"30":0.01273,"34":0.09335,"38":0.16123,"45":0.00424,"47":0.02546,"49":0.08062,"53":0.09335,"55":0.04243,"57":0.00424,"58":0.02122,"61":0.09759,"62":0.02122,"63":0.00424,"65":0.02546,"66":0.00849,"67":0.03819,"68":0.07213,"69":0.0297,"70":0.02546,"71":0.06365,"72":0.02546,"73":0.03394,"74":0.04243,"75":0.02122,"76":0.03394,"77":0.02546,"78":0.0297,"79":0.44552,"80":0.06789,"81":0.04667,"83":0.02546,"84":0.01697,"85":0.00849,"86":0.0297,"87":0.13153,"88":0.00849,"89":0.0594,"90":0.01697,"91":0.05516,"92":0.21215,"93":0.0594,"94":0.11032,"95":0.13153,"96":0.7892,"97":6.61059,"98":15.20267,"99":0.00424,"100":0.01697,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 31 32 33 35 36 37 39 40 41 42 43 44 46 48 50 51 52 54 56 59 60 64 101"},F:{"28":0.00849,"36":0.03819,"46":0.08062,"70":0.01697,"82":0.02546,"83":0.17396,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00849,"18":0.06365,"95":0.01273,"96":0.01697,"97":0.53038,"98":2.34638,_:"12 13 14 15 16 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94"},E:{"4":0,"11":0.00424,"12":0.00849,"13":0.17821,"14":0.82739,"15":0.35641,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.01697,"11.1":0.04243,"12.1":0.13153,"13.1":0.43703,"14.1":3.62777,"15.1":1.2432,"15.2-15.3":2.62217,"15.4":0.01273},G:{"8":0.00327,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00327,"6.0-6.1":0.06204,"7.0-7.1":0.0653,"8.1-8.4":0.05877,"9.0-9.2":0.13714,"9.3":0.30366,"10.0-10.2":0.06204,"10.3":0.35264,"11.0-11.2":0.17959,"11.3-11.4":0.20244,"12.0-12.1":0.23183,"12.2-12.5":1.69464,"13.0-13.1":0.09469,"13.2":0.03918,"13.3":0.25469,"13.4-13.7":0.67263,"14.0-14.4":1.89382,"14.5-14.8":7.16711,"15.0-15.1":3.89212,"15.2-15.3":15.1995,"15.4":0.07183},P:{"4":0.82174,"5.0-5.4":0.89089,"6.2-6.4":0.05053,"7.2-7.4":0.03115,"8.2":0.01022,"9.2":0.07569,"10.1":0.05053,"11.1-11.2":0.02077,"12.0":0.05192,"13.0":0.04325,"14.0":0.0865,"15.0":0.04325,"16.0":1.94624},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00018,"4.2-4.3":0.00053,"4.4":0,"4.4.3-4.4.4":0.01657},A:{"11":0.47522,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.17271},Q:{"10.4":0.11514},O:{"0":0.59873},H:{"0":0.0763},L:{"0":21.63894},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.0641,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00986,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00493,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.00986,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00493,"88":0.00493,"89":0,"90":0.00493,"91":0.00493,"92":0,"93":0.00493,"94":0.01972,"95":0.00493,"96":0,"97":0.00493,"98":0.01479,"99":0.01479,"100":0.00986,"101":0.00493,"102":0.04438,"103":0.52269,"104":0.09862,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00986,"23":0,"24":0,"25":0,"26":0.04931,"27":0,"28":0,"29":0,"30":0.01479,"31":0,"32":0,"33":0,"34":0.06903,"35":0,"36":0,"37":0,"38":0.10848,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02466,"50":0,"51":0,"52":0,"53":0.03945,"54":0,"55":0.02466,"56":0,"57":0,"58":0.01972,"59":0,"60":0.00493,"61":0.0641,"62":0.00493,"63":0,"64":0,"65":0.00493,"66":0,"67":0.00986,"68":0.00986,"69":0.00493,"70":0.00493,"71":0.01479,"72":0.00986,"73":0.00986,"74":0.00493,"75":0.00493,"76":0.00493,"77":0.01972,"78":0.02466,"79":0.286,"80":0.01972,"81":0.01479,"83":0.02466,"84":0.00493,"85":0,"86":0.01972,"87":0.09369,"88":0.00493,"89":0.04438,"90":0.01479,"91":0.02466,"92":0.143,"93":0.00493,"94":0.00986,"95":0.01479,"96":0.05917,"97":0.15779,"98":0.08383,"99":0.04931,"100":0.17259,"101":0.11834,"102":0.16272,"103":3.51087,"104":8.11643,"105":0.03452,"106":0.01972,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.01972,"29":0,"30":0,"31":0,"32":0.00493,"33":0,"34":0,"35":0,"36":0.03452,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.04931,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00493,"60":0,"62":0,"63":0.00493,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.01479,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.07397,"90":0.00986,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.00493,"17":0.01479,"18":0.00986,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0.00986,"96":0.00493,"97":0,"98":0,"99":0,"100":0,"101":0.01479,"102":0.00986,"103":0.45365,"104":1.35603,"105":0.00493},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.02959,"14":0.32052,"15":0.03452,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00986,"11.1":0.01479,"12.1":0.03945,"13.1":0.19724,"14.1":0.59665,"15.1":0.07397,"15.2-15.3":0.0789,"15.4":0.32545,"15.5":1.10454,"15.6":1.93295,"16.0":0.00986},G:{"8":0.01254,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.11706,"7.0-7.1":0.05853,"8.1-8.4":0.12542,"9.0-9.2":0.43479,"9.3":0.56021,"10.0-10.2":0.07525,"10.3":0.49332,"11.0-11.2":0.20067,"11.3-11.4":0.13378,"12.0-12.1":0.19231,"12.2-12.5":2.25757,"13.0-13.1":0.04599,"13.2":0.01672,"13.3":0.1505,"13.4-13.7":0.7149,"14.0-14.4":1.29183,"14.5-14.8":3.46997,"15.0-15.1":0.72326,"15.2-15.3":0.94484,"15.4":2.35791,"15.5":7.34965,"15.6":19.98368,"16.0":0.08361},P:{"4":1.09945,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0.12935,"10.1":0,"11.1-11.2":0.01078,"12.0":0.04312,"13.0":0.04312,"14.0":0.07545,"15.0":0.01078,"16.0":0.02156,"17.0":0.79764,"18.0":1.51983},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00668,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.1836},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.29093,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":29.24522},S:{"2.5":0},R:{_:"0"},M:{"0":0.20783},Q:{"10.4":0.04055},O:{"0":0.46635},H:{"0":0.09598}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MP.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MP.js index cd0e5ae20f4..685b7461269 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MP.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MP.js @@ -1 +1 @@ -module.exports={C:{"52":0.23072,"78":0.0355,"85":0.00592,"93":0.00592,"94":0.01183,"95":0.01183,"96":0.34313,"97":0.50878,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 86 87 88 89 90 91 92 98 99 3.5 3.6"},D:{"23":0.00592,"65":0.0355,"67":0.01775,"76":0.01183,"77":0.00592,"78":0.01775,"79":0.10057,"83":0.09466,"86":0.00592,"87":0.11832,"90":0.01775,"91":0.04141,"92":0.19523,"93":0.05324,"94":0.10057,"95":0.16565,"96":1.56182,"97":11.9444,"98":24.16686,"99":0.02958,"100":0.01775,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 66 68 69 70 71 72 73 74 75 80 81 84 85 88 89 101"},F:{"82":0.34904,"83":2.63854,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01183,"96":0.0355,"97":1.04122,"98":4.48433,_:"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95"},E:{"4":0,"12":0.00592,"13":0.11832,"14":1.26602,"15":0.19523,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 15.4","13.1":0.40229,"14.1":4.41334,"15.1":1.11812,"15.2-15.3":1.37843},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.05048,"10.0-10.2":0.00235,"10.3":0.30403,"11.0-11.2":0.11621,"11.3-11.4":0.01996,"12.0-12.1":0.00939,"12.2-12.5":1.46263,"13.0-13.1":0.00822,"13.2":0.00704,"13.3":0.09273,"13.4-13.7":0.08569,"14.0-14.4":1.06469,"14.5-14.8":1.8817,"15.0-15.1":2.44515,"15.2-15.3":4.17659,"15.4":0.01056},P:{"4":0.16235,"5.0-5.4":0.01015,"6.2-6.4":0.04189,"7.2-7.4":0.15152,"8.2":0.11355,"9.2":0.0112,"10.1":0.02048,"11.1-11.2":0.02165,"12.0":0.0112,"13.0":0.02165,"14.0":0.03247,"15.0":0.03247,"16.0":4.37252},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.0147,"4.4":0,"4.4.3-4.4.4":0.03431},A:{"11":0.06508,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.90256},Q:{"10.4":0},O:{"0":0.00817},H:{"0":0.07346},L:{"0":23.78834},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.09302,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.01642,"92":0,"93":0,"94":0,"95":0.16963,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.01094,"103":0.79344,"104":0.12038,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0.00547,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00547,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.32832,"66":0,"67":0.00547,"68":0.02189,"69":0,"70":0,"71":0.01642,"72":0,"73":0,"74":0,"75":0.00547,"76":0.02189,"77":0,"78":0,"79":0.03283,"80":0,"81":0,"83":0.01094,"84":0.00547,"85":0,"86":0.00547,"87":0.09302,"88":0.00547,"89":0,"90":0.00547,"91":0.02189,"92":0.01094,"93":0.02736,"94":0,"95":0,"96":0.06019,"97":0.05472,"98":0.02736,"99":0.0383,"100":0.0383,"101":0.13133,"102":0.3721,"103":5.00688,"104":13.41187,"105":0.03283,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.01094,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0.00547,"84":0,"85":0,"86":0,"87":0,"88":0.0383,"89":1.0561,"90":0.20246,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0.01642,"14":0,"15":0,"16":0,"17":0.01094,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00547,"100":0,"101":0.06019,"102":0.01094,"103":0.79344,"104":1.75651,"105":0},E:{"4":0,"5":0,"6":0,"7":0.00547,"8":0,"9":0,"10":0,"11":0,"12":0.00547,"13":0.55814,"14":0.16963,"15":0.02189,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00547,"13.1":0.06566,"14.1":0.73872,"15.1":0.05472,"15.2-15.3":0.07114,"15.4":0.09302,"15.5":0.26266,"15.6":0.49248,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.51162,"10.0-10.2":0.04401,"10.3":0.39426,"11.0-11.2":0.29523,"11.3-11.4":0.00183,"12.0-12.1":0.02934,"12.2-12.5":1.06174,"13.0-13.1":0,"13.2":0.00183,"13.3":0.25306,"13.4-13.7":0.02017,"14.0-14.4":1.49817,"14.5-14.8":0.55746,"15.0-15.1":0.22372,"15.2-15.3":0.21271,"15.4":0.61247,"15.5":4.00674,"15.6":8.56361,"16.0":0.04401},P:{"4":0.01074,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.0537,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01074,"12.0":0,"13.0":0.04296,"14.0":0.01074,"15.0":0.03222,"16.0":0,"17.0":2.50262,"18.0":2.41669},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01834,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.63468},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00547,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":44.20259},S:{"2.5":0},R:{_:"0"},M:{"0":1.02333},Q:{"10.4":0},O:{"0":0.01811},H:{"0":0.05573}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MQ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MQ.js index 8f7a6a3f481..503120d5d14 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MQ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MQ.js @@ -1 +1 @@ -module.exports={C:{"52":0.00833,"60":0.02083,"78":0.04999,"82":0.12915,"83":0.00417,"84":0.00417,"89":0.01666,"91":0.04583,"92":0.00833,"94":0.03333,"95":0.03333,"96":1.82054,"97":2.51626,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 85 86 87 88 90 93 98 99 3.5 3.6"},D:{"49":0.0125,"58":0.00417,"65":0.00833,"67":0.02083,"74":0.00417,"75":0.00833,"76":0.0125,"77":0.00833,"79":0.0125,"80":0.0125,"83":0.02083,"84":0.0125,"86":0.025,"87":0.04999,"88":0.01666,"89":0.01666,"90":0.00833,"91":0.0125,"92":0.01666,"93":0.06249,"94":0.02916,"95":0.02083,"96":0.44993,"97":7.01971,"98":15.0226,"99":0.0125,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 59 60 61 62 63 64 66 68 69 70 71 72 73 78 81 85 100 101"},F:{"40":0.04999,"77":0.0125,"80":0.00833,"82":0.29162,"83":0.79571,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00833,"17":0.0125,"18":0.0125,"80":0.00833,"86":0.00833,"89":0.01666,"90":0.00417,"91":0.00417,"92":0.02083,"93":0.00417,"95":0.00833,"96":0.04166,"97":1.29979,"98":4.62426,_:"13 14 15 16 79 81 83 84 85 87 88 94"},E:{"4":0,"12":0.00833,"13":0.14164,"14":0.47076,"15":0.32911,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00833,"11.1":0.01666,"12.1":0.10832,"13.1":0.42493,"14.1":1.61641,"15.1":0.65823,"15.2-15.3":0.90402,"15.4":0.0125},G:{"8":0.00319,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.0016,"9.3":0.11645,"10.0-10.2":0,"10.3":0.03828,"11.0-11.2":0.01595,"11.3-11.4":0.00798,"12.0-12.1":0.01117,"12.2-12.5":0.40518,"13.0-13.1":0.0319,"13.2":0.01117,"13.3":0.04626,"13.4-13.7":0.14835,"14.0-14.4":0.87576,"14.5-14.8":2.87771,"15.0-15.1":2.56506,"15.2-15.3":8.7448,"15.4":0.04626},P:{"4":0.07293,"5.0-5.4":0.01033,"6.2-6.4":0.02087,"7.2-7.4":0.08335,"8.2":0.01057,"9.2":0.01042,"10.1":0.01052,"11.1-11.2":0.14586,"12.0":0.06251,"13.0":0.47927,"14.0":0.47927,"15.0":0.20838,"16.0":4.53223},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.03016,"4.4":0,"4.4.3-4.4.4":0.12155},A:{"11":0.14581,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.46097},Q:{"10.4":0},O:{"0":0.01751},H:{"0":0.07734},L:{"0":35.70815},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.0085,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00425,"78":0.0085,"79":0,"80":0,"81":0,"82":0.04674,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.05099,"92":0.00425,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00425,"99":0.00425,"100":0.00425,"101":0.14872,"102":0.04674,"103":1.4744,"104":0.21245,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00425,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00425,"48":0,"49":0.00425,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00425,"59":0,"60":0,"61":0,"62":0,"63":0.00425,"64":0,"65":0,"66":0.03399,"67":0,"68":0.0085,"69":0,"70":0.10198,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0.01275,"81":0.00425,"83":0,"84":0.0085,"85":0.00425,"86":0.00425,"87":0.0085,"88":0.00425,"89":0.0085,"90":0,"91":0.00425,"92":0,"93":0.00425,"94":0,"95":0,"96":0.0085,"97":0.00425,"98":0.00425,"99":0.0085,"100":0.017,"101":0.01275,"102":0.12322,"103":2.57914,"104":6.67943,"105":0.017,"106":0.0085,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.0085,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.00425,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01275,"89":0.49288,"90":0.05524,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.00425,"17":0.00425,"18":0.0085,"79":0,"80":0,"81":0,"83":0,"84":0.00425,"85":0,"86":0,"87":0,"88":0.00425,"89":0.00425,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.00425,"98":0,"99":0.00425,"100":0.00425,"101":0.01275,"102":0.017,"103":0.79881,"104":1.87381,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00425,"14":0.06798,"15":0.017,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.0085,"12.1":0.02974,"13.1":0.14447,"14.1":0.42065,"15.1":0.02549,"15.2-15.3":0.04249,"15.4":0.09773,"15.5":0.39516,"15.6":0.54812,"16.0":0.0085},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.0022,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.18727,"10.0-10.2":0.01102,"10.3":0.07491,"11.0-11.2":0.00661,"11.3-11.4":0.08592,"12.0-12.1":0.01322,"12.2-12.5":0.42301,"13.0-13.1":0.00441,"13.2":0.00661,"13.3":0.10355,"13.4-13.7":0.141,"14.0-14.4":0.47589,"14.5-14.8":0.90992,"15.0-15.1":0.39217,"15.2-15.3":0.66536,"15.4":1.02669,"15.5":6.14249,"15.6":11.13051,"16.0":0.21812},P:{"4":0.01051,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.1471,"8.2":0,"9.2":0.01051,"10.1":0,"11.1-11.2":0.75653,"12.0":0.03152,"13.0":0.10507,"14.0":0.32573,"15.0":0.04203,"16.0":0.18913,"17.0":1.80727,"18.0":2.7004},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.22366,"4.4":0,"4.4.3-4.4.4":0.18682},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04674,"5.5":0},J:{"7":0,"10":0.00575},N:{"10":0,"11":0},L:{"0":50.91715},S:{"2.5":0},R:{_:"0"},M:{"0":0.28755},Q:{"10.4":0},O:{"0":0.0115},H:{"0":0.22868}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MR.js index 481363ef540..b8a046c6203 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MR.js @@ -1 +1 @@ -module.exports={C:{"24":0.00552,"30":0.00552,"34":0.00414,"35":0.00276,"36":0.00414,"38":0.01241,"42":0.00552,"43":0.00827,"45":0.00138,"47":0.00276,"49":0.01103,"52":0.03448,"56":0.00552,"57":0.00414,"68":0.01793,"69":0.00965,"71":0.00276,"72":0.00827,"73":0.00276,"78":0.00552,"80":0.00276,"81":0.00552,"87":0.00276,"89":0.00138,"90":0.00138,"91":0.00965,"93":0.00276,"94":0.00552,"95":0.02344,"96":0.44128,"97":0.52126,"98":0.00414,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 31 32 33 37 39 40 41 44 46 48 50 51 53 54 55 58 59 60 61 62 63 64 65 66 67 70 74 75 76 77 79 82 83 84 85 86 88 92 99 3.5 3.6"},D:{"11":0.00414,"19":0.00138,"22":0.00276,"25":0.00138,"31":0.00276,"33":0.02206,"37":0.00414,"39":0.0069,"40":0.00414,"43":0.0262,"47":0.00827,"48":0.00276,"49":0.01655,"53":0.00276,"54":0.00276,"57":0.00276,"60":0.00414,"63":0.02206,"65":0.00827,"67":0.00552,"68":0.00276,"69":0.01103,"70":0.00965,"71":0.00414,"72":0.01103,"73":0.00276,"75":0.00414,"76":0.00552,"77":0.00414,"78":0.00965,"79":0.02896,"80":0.01517,"81":0.02206,"83":0.02758,"84":0.01103,"85":0.0069,"86":0.02206,"87":0.04413,"88":0.01793,"89":0.01793,"90":0.01793,"91":0.06343,"92":0.01517,"93":0.01517,"94":0.01931,"95":0.03861,"96":0.22202,"97":2.85453,"98":5.02921,"99":0.00552,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 20 21 23 24 26 27 28 29 30 32 34 35 36 38 41 42 44 45 46 50 51 52 55 56 58 59 61 62 64 66 74 100 101"},F:{"28":0.00276,"30":0.00276,"46":0.01103,"82":0.0524,"83":0.20823,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00827,"13":0.0069,"14":0.00552,"15":0.00414,"16":0.0069,"17":0.00414,"18":0.05516,"83":0.00276,"84":0.01379,"85":0.0069,"89":0.00827,"90":0.00414,"91":0.01241,"92":0.01103,"93":0.00276,"94":0.00552,"95":0.00552,"96":0.0331,"97":0.33648,"98":1.04528,_:"79 80 81 86 87 88"},E:{"4":0,"12":0.00138,"13":0.01103,"14":0.03172,"15":0.01103,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 10.1 11.1 15.4","9.1":0.00414,"12.1":0.00414,"13.1":0.09929,"14.1":0.07309,"15.1":0.13376,"15.2-15.3":0.06757},G:{"8":0.00278,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.03062,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03758,"10.0-10.2":0.00278,"10.3":0.04175,"11.0-11.2":0.22824,"11.3-11.4":0.22129,"12.0-12.1":0.09464,"12.2-12.5":2.49537,"13.0-13.1":0.04175,"13.2":0.01809,"13.3":0.17118,"13.4-13.7":0.32706,"14.0-14.4":1.84683,"14.5-14.8":2.53573,"15.0-15.1":2.35898,"15.2-15.3":3.44314,"15.4":0.01809},P:{"4":1.124,"5.0-5.4":0.0405,"6.2-6.4":0.12151,"7.2-7.4":1.16451,"8.2":0.01057,"9.2":0.17214,"10.1":0.01052,"11.1-11.2":0.54681,"12.0":0.09114,"13.0":0.28353,"14.0":0.62782,"15.0":0.53669,"16.0":1.79233},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00031,"4.2-4.3":0.00282,"4.4":0,"4.4.3-4.4.4":0.02274},A:{"8":0.00772,"10":0.00309,"11":0.05092,_:"6 7 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.10346},Q:{"10.4":0},O:{"0":0.68114},H:{"0":0.702},L:{"0":59.89872},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0.00343,"31":0,"32":0,"33":0,"34":0.00172,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.00172,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00172,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00343,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00343,"89":0.00515,"90":0,"91":0.00172,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.01029,"98":0.00172,"99":0,"100":0.00343,"101":0.00515,"102":0.01372,"103":0.2401,"104":0.02744,"105":0.00172,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0.00343,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00343,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.00172,"40":0.03087,"41":0.00858,"42":0,"43":0.07203,"44":0,"45":0,"46":0.00343,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0.00172,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.01372,"64":0,"65":0,"66":0,"67":0,"68":0.00172,"69":0,"70":0,"71":0,"72":0.00172,"73":0,"74":0,"75":0,"76":0.00172,"77":0.00172,"78":0.00343,"79":0.00343,"80":0,"81":0.00343,"83":0.00515,"84":0.00343,"85":0,"86":0.00172,"87":0.00343,"88":0.00172,"89":0.00343,"90":0.00172,"91":0.00343,"92":0.00343,"93":0,"94":0.00172,"95":0.04459,"96":0.00172,"97":0.00515,"98":0.00515,"99":0.00343,"100":0.0566,"101":0.00172,"102":0.0223,"103":0.41846,"104":0.93639,"105":0.00515,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.00343,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0.00172,"58":0.00515,"60":0.00858,"62":0,"63":0.07203,"64":0.03087,"65":0,"66":0,"67":0,"68":0,"69":0.00172,"70":0.00172,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00343,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00343,"86":0,"87":0,"88":0,"89":0.07889,"90":0.01201,"9.5-9.6":0,"10.0-10.1":0,"10.5":0.00172,"10.6":0.00172,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00172},B:{"12":0.00343,"13":0.00172,"14":0.00515,"15":0.00172,"16":0,"17":0.00343,"18":0.00686,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00172,"90":0.00172,"91":0,"92":0.00343,"93":0,"94":0,"95":0,"96":0,"97":0.00343,"98":0,"99":0.00172,"100":0.00172,"101":0.00686,"102":0.00172,"103":0.11491,"104":0.18179,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00343,"14":0.00343,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.00343,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00172,"13.1":0.00686,"14.1":0.01887,"15.1":0.00686,"15.2-15.3":0.00343,"15.4":0.01029,"15.5":0.00686,"15.6":0.01715,"16.0":0},G:{"8":0.00721,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00361,"6.0-6.1":0.00361,"7.0-7.1":0.01984,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01804,"10.0-10.2":0,"10.3":0.02345,"11.0-11.2":0.08297,"11.3-11.4":0.06132,"12.0-12.1":0.06313,"12.2-12.5":1.84148,"13.0-13.1":0.03788,"13.2":0.02345,"13.3":0.1497,"13.4-13.7":0.18036,"14.0-14.4":1.86853,"14.5-14.8":1.73867,"15.0-15.1":0.8026,"15.2-15.3":1.41583,"15.4":1.31843,"15.5":4.22944,"15.6":3.89217,"16.0":0.2525},P:{"4":0.29194,"5.0-5.4":0.0604,"6.2-6.4":0.0604,"7.2-7.4":1.02682,"8.2":0,"9.2":0.07047,"10.1":0.16107,"11.1-11.2":0.39261,"12.0":0.05033,"13.0":0.14094,"14.0":0.31207,"15.0":0.14094,"16.0":0.79528,"17.0":2.14424,"18.0":0.76508},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00092,"4.2-4.3":0.0023,"4.4":0,"4.4.3-4.4.4":0.0525},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02916,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":69.74171},S:{"2.5":0},R:{_:"0"},M:{"0":0.28998},Q:{"10.4":0},O:{"0":0.33969},H:{"0":1.02753}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MS.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MS.js index b093cc986f9..6a2d84f7f93 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MS.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MS.js @@ -1 +1 @@ -module.exports={C:{"95":0.05202,"96":0.41619,"97":0.20159,"98":0.05202,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 99 3.5 3.6"},D:{"49":0.02601,"67":0.01301,"75":0.31865,"79":0.01301,"86":0.03902,"88":0.01301,"89":0.03902,"95":0.01301,"96":0.69582,"97":9.42285,"98":38.40022,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 68 69 70 71 72 73 74 76 77 78 80 81 83 84 85 87 90 91 92 93 94 99 100 101"},F:{"83":0.17558,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"13":0.03902,"89":0.07804,"93":0.01301,"96":0.05202,"97":1.073,"98":5.15688,_:"12 14 15 16 17 18 79 80 81 83 84 85 86 87 88 90 91 92 94 95"},E:{"4":0,"13":0.02601,"14":0.41619,"15":0.03902,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 12.1 13.1 15.4","11.1":0.10405,"14.1":1.073,"15.1":2.25004,"15.2-15.3":2.67924},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.01965,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.058,"10.0-10.2":0,"10.3":0.00936,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0.20301,"13.0-13.1":0,"13.2":0.00936,"13.3":0.01965,"13.4-13.7":2.30704,"14.0-14.4":0.03836,"14.5-14.8":0.53045,"15.0-15.1":1.56422,"15.2-15.3":4.58602,"15.4":0.00936},P:{"4":0.01234,"5.0-5.4":0.07136,"6.2-6.4":0.02048,"7.2-7.4":0.07403,"8.2":0.01015,"9.2":0.08155,"10.1":0.02048,"11.1-11.2":0.05194,"12.0":0.01039,"13.0":0.11105,"14.0":0.08637,"15.0":0.01234,"16.0":1.66569},I:{"0":0,"3":0,"4":0.00244,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.01505},A:{_:"6 7 8 9 10 11 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.03497},Q:{"10.4":0},O:{"0":0},H:{"0":0.03311},L:{"0":23.67829},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00582,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.02328,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0.16881,"104":0.06403,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.01746,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00582,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0.00582,"94":0,"95":0,"96":0,"97":0,"98":0.04657,"99":0.00582,"100":0,"101":0.05821,"102":0,"103":4.45889,"104":20.13484,"105":0.02328,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.08149,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.01746,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.00582,"103":0.23866,"104":1.33301,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.05821,"15":0.01746,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0.03493,"15.1":0.79748,"15.2-15.3":0,"15.4":0.00582,"15.5":0.12224,"15.6":0.23284,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0.01321,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0.04108,"13.0-13.1":0,"13.2":0,"13.3":0.01321,"13.4-13.7":6.36935,"14.0-14.4":0.04108,"14.5-14.8":0.20688,"15.0-15.1":1.61691,"15.2-15.3":0.09684,"15.4":0.06896,"15.5":1.47899,"15.6":4.50447,"16.0":0.22156},P:{"4":0.59644,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.03441,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0.01147,"15.0":0.01147,"16.0":0.26381,"17.0":0.73408,"18.0":1.04377},I:{"0":0,"3":0,"4":0.76795,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":1.53589,"4.4":0,"4.4.3-4.4.4":0.38397},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02328,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":50.43905},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0.01583}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MT.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MT.js index a42e8098d43..152c4a56ec5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MT.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MT.js @@ -1 +1 @@ -module.exports={C:{"52":0.03023,"68":0.03628,"76":0.00605,"78":0.01814,"82":0.00605,"89":0.04232,"91":0.01814,"94":0.01209,"95":0.03023,"96":0.57437,"97":1.17292,"98":0.01209,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 77 79 80 81 83 84 85 86 87 88 90 92 93 99 3.5 3.6"},D:{"26":0.01209,"49":0.04837,"67":0.03023,"69":0.23579,"70":0.01814,"72":0.03023,"74":0.00605,"76":0.01814,"77":0.18743,"78":0.02418,"79":0.01814,"80":0.06046,"81":0.01814,"83":0.02418,"84":0.03023,"85":0.00605,"86":0.02418,"87":0.05441,"88":0.01209,"89":0.01814,"90":0.01209,"91":0.04232,"92":0.03628,"93":0.85249,"94":0.06046,"95":0.28416,"96":0.526,"97":13.38584,"98":27.733,"99":0.01814,"100":0.01209,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 68 71 73 75 101"},F:{"28":0.00605,"37":0.01814,"46":0.00605,"67":0.27812,"82":0.40508,"83":1.15479,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.01209,"18":0.01814,"92":0.01209,"95":0.01209,"96":0.03628,"97":1.39058,"98":5.30839,_:"12 13 14 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94"},E:{"4":0,"12":0.00605,"13":0.04837,"14":0.27207,"15":0.17533,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.06651,"12.1":0.07255,"13.1":0.31439,"14.1":1.29384,"15.1":0.91295,"15.2-15.3":1.11851},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00124,"7.0-7.1":0.00868,"8.1-8.4":0.01116,"9.0-9.2":0.0062,"9.3":0.04218,"10.0-10.2":0.00248,"10.3":0.36594,"11.0-11.2":0.00992,"11.3-11.4":0.00868,"12.0-12.1":0.02233,"12.2-12.5":0.25554,"13.0-13.1":0.00744,"13.2":0.00248,"13.3":0.01861,"13.4-13.7":0.05954,"14.0-14.4":0.67358,"14.5-14.8":2.20308,"15.0-15.1":2.06414,"15.2-15.3":6.59682,"15.4":0.0397},P:{"4":0.05367,"5.0-5.4":0.01033,"6.2-6.4":0.02087,"7.2-7.4":0.02147,"8.2":0.01057,"9.2":0.02066,"10.1":0.01052,"11.1-11.2":0.04294,"12.0":0.42355,"13.0":0.04294,"14.0":0.08588,"15.0":0.09661,"16.0":2.40453},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.0041,"4.4":0,"4.4.3-4.4.4":0.06312},A:{"11":0.24789,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.18979},Q:{"10.4":0},O:{"0":0.11071},H:{"0":0.09733},L:{"0":23.75954},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01958,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.04895,"68":0.00979,"69":0.01469,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.0049,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00979,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.0049,"102":0.02448,"103":0.61188,"104":0.12727,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01469,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.0049,"66":0,"67":0,"68":0,"69":0.2007,"70":0.0049,"71":0.0049,"72":0,"73":0,"74":0.0049,"75":0,"76":0.0049,"77":0.01469,"78":0.00979,"79":0.02937,"80":0.01469,"81":0.00979,"83":0.0049,"84":0.0049,"85":0.01958,"86":0.00979,"87":0.02937,"88":0,"89":0.01469,"90":0.0049,"91":0.0049,"92":0.01469,"93":0.01958,"94":0.0049,"95":0.0049,"96":0.00979,"97":0.00979,"98":0.03427,"99":0.01958,"100":0.05874,"101":0.04895,"102":0.11259,"103":4.68452,"104":11.88506,"105":0.04895,"106":0.0049,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00979,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.0049,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0049,"64":0.0049,"65":0,"66":0,"67":0,"68":0,"69":0.0049,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00979,"86":0,"87":0,"88":0.00979,"89":0.5923,"90":0.02937,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00979,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0.0049,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.0049,"98":0,"99":0.0049,"100":0,"101":0.01469,"102":0.0049,"103":0.57761,"104":1.62025,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01469,"14":0.06853,"15":0.01469,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.0049,"10.1":0,"11.1":0.02448,"12.1":0.00979,"13.1":0.07832,"14.1":0.15175,"15.1":0.04406,"15.2-15.3":0.02448,"15.4":0.11259,"15.5":0.43566,"15.6":0.62656,"16.0":0.0049},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00796,"6.0-6.1":0.00531,"7.0-7.1":0.00796,"8.1-8.4":0.00796,"9.0-9.2":0,"9.3":0.03451,"10.0-10.2":0.00531,"10.3":0.56536,"11.0-11.2":0.00265,"11.3-11.4":0.03981,"12.0-12.1":0.0292,"12.2-12.5":0.35036,"13.0-13.1":0.00796,"13.2":0.00531,"13.3":0.04778,"13.4-13.7":0.1566,"14.0-14.4":0.36629,"14.5-14.8":1.2183,"15.0-15.1":0.29197,"15.2-15.3":0.84671,"15.4":0.9688,"15.5":6.96475,"15.6":14.34622,"16.0":0.24685},P:{"4":0.2982,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01028,"8.2":0.01028,"9.2":0,"10.1":0.01028,"11.1-11.2":0.04113,"12.0":0.01028,"13.0":0.03085,"14.0":0.03085,"15.0":0.0617,"16.0":0.0617,"17.0":1.31621,"18.0":1.71725},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00875,"4.4":0,"4.4.3-4.4.4":0.21873},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04406,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":42.0631},S:{"2.5":0},R:{_:"0"},M:{"0":0.24504},Q:{"10.4":0},O:{"0":0.15826},H:{"0":0.13533}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MU.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MU.js index 04ff7a53ae8..14b47f08188 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MU.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MU.js @@ -1 +1 @@ -module.exports={C:{"34":0.01427,"51":0.00357,"52":0.17126,"69":0.00357,"72":0.00714,"78":0.01784,"89":0.00357,"91":0.04995,"92":0.00714,"94":0.00714,"95":0.02141,"96":0.92054,"97":1.43077,"98":0.01784,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 90 93 99 3.5 3.6"},D:{"26":0.00714,"31":0.00357,"38":0.10704,"39":0.01427,"43":0.00357,"49":0.03211,"50":0.00714,"53":0.01784,"55":0.00714,"58":0.02141,"59":0.00357,"65":0.03211,"67":0.00357,"69":0.0107,"71":0.0107,"73":0.0107,"74":0.00357,"75":0.00714,"76":0.0107,"77":0.00714,"78":0.00714,"79":0.11774,"80":0.01427,"81":0.01784,"83":0.02141,"84":0.01427,"85":0.04282,"86":0.02141,"87":0.03925,"88":0.0107,"89":0.02141,"90":0.03925,"91":0.03925,"92":0.08206,"93":0.02498,"94":0.04638,"95":0.03211,"96":0.38534,"97":6.65075,"98":16.02389,"99":0.02498,"100":0.03925,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 32 33 34 35 36 37 40 41 42 44 45 46 47 48 51 52 54 56 57 60 61 62 63 64 66 68 70 72 101"},F:{"28":0.06779,"82":0.12488,"83":0.59942,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00357,"16":0.00714,"17":0.0107,"18":0.02854,"84":0.00357,"92":0.00714,"95":0.00714,"96":0.04282,"97":0.7243,"98":2.52258,_:"13 14 15 79 80 81 83 85 86 87 88 89 90 91 93 94"},E:{"4":0,"11":0.00714,"12":0.02498,"13":0.0107,"14":0.21051,"15":0.0999,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00714,"11.1":0.02498,"12.1":0.02498,"13.1":0.19624,"14.1":0.5352,"15.1":0.25333,"15.2-15.3":0.71717},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01444,"6.0-6.1":0.00138,"7.0-7.1":0.04332,"8.1-8.4":0.00206,"9.0-9.2":0,"9.3":0.07082,"10.0-10.2":0.00275,"10.3":0.08114,"11.0-11.2":0.00344,"11.3-11.4":0.00756,"12.0-12.1":0.011,"12.2-12.5":0.31493,"13.0-13.1":0.00825,"13.2":0.00413,"13.3":0.03369,"13.4-13.7":0.11414,"14.0-14.4":0.2056,"14.5-14.8":1.0321,"15.0-15.1":1.16756,"15.2-15.3":3.72823,"15.4":0.02819},P:{"4":0.24351,"5.0-5.4":0.0405,"6.2-6.4":0.12151,"7.2-7.4":0.23337,"8.2":0.01015,"9.2":0.03044,"10.1":0.02029,"11.1-11.2":0.14205,"12.0":0.05073,"13.0":0.23337,"14.0":0.39571,"15.0":0.20293,"16.0":4.63693},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00181,"4.2-4.3":0.00289,"4.4":0,"4.4.3-4.4.4":0.05318},A:{"8":0.00771,"10":0.00386,"11":0.22749,_:"6 7 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.23152},Q:{"10.4":0},O:{"0":0.77172},H:{"0":0.49925},L:{"0":49.25859},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00358,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.0143,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00358,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00715,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.01073,"92":0.00715,"93":0,"94":0,"95":0.01073,"96":0,"97":0,"98":0.00358,"99":0.00715,"100":0.00358,"101":0.00358,"102":0.05005,"103":0.6435,"104":0.1144,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00715,"35":0,"36":0,"37":0,"38":0.01073,"39":0.00358,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00715,"50":0,"51":0,"52":0,"53":0.00358,"54":0,"55":0,"56":0,"57":0,"58":0.00358,"59":0,"60":0,"61":0,"62":0,"63":0.00715,"64":0,"65":0,"66":0.00358,"67":0,"68":0,"69":0.00358,"70":0,"71":0,"72":0,"73":0,"74":0.00358,"75":0,"76":0.00358,"77":0.00358,"78":0.0143,"79":0.04648,"80":0.00715,"81":0.07508,"83":0.0143,"84":0,"85":0.00358,"86":0.00358,"87":0.02503,"88":0.0286,"89":0.01073,"90":0.00358,"91":0.02145,"92":0.04648,"93":0.00715,"94":0.00358,"95":0.00358,"96":0.01073,"97":0.03218,"98":0.0143,"99":0.03218,"100":0.03575,"101":0.02503,"102":0.08223,"103":1.9734,"104":5.7057,"105":0.02145,"106":0.00715,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.02145,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.01788,"62":0,"63":0.03575,"64":0.01788,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00715,"89":0.33963,"90":0.0429,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00358,"79":0,"80":0,"81":0,"83":0.00358,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00358,"93":0,"94":0,"95":0,"96":0,"97":0.00358,"98":0,"99":0,"100":0,"101":0.01073,"102":0.01073,"103":0.27885,"104":0.68998,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.0143,"13":0.00715,"14":0.0429,"15":0.00715,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.0286,"12.1":0.00715,"13.1":0.04648,"14.1":0.08223,"15.1":0.01073,"15.2-15.3":0.0286,"15.4":0.03933,"15.5":0.16088,"15.6":0.3289,"16.0":0.00358},G:{"8":0,"3.2":0.0019,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.03318,"6.0-6.1":0.00284,"7.0-7.1":0.0237,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.12231,"10.0-10.2":0.00284,"10.3":0.06542,"11.0-11.2":0.00284,"11.3-11.4":0.00664,"12.0-12.1":0.01043,"12.2-12.5":0.36124,"13.0-13.1":0.00569,"13.2":0.00095,"13.3":0.01517,"13.4-13.7":0.05594,"14.0-14.4":0.10335,"14.5-14.8":0.46174,"15.0-15.1":0.09387,"15.2-15.3":0.25505,"15.4":0.37546,"15.5":2.01858,"15.6":5.3437,"16.0":0.11283},P:{"4":0.21342,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.27439,"8.2":0,"9.2":0.04065,"10.1":0.01016,"11.1-11.2":0.0813,"12.0":0.09146,"13.0":0.22358,"14.0":0.12195,"15.0":0.05081,"16.0":0.21342,"17.0":2.40854,"18.0":2.61179},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00396,"4.2-4.3":0.01582,"4.4":0,"4.4.3-4.4.4":0.19384},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02145,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":67.8995},S:{"2.5":0},R:{_:"0"},M:{"0":0.3855},Q:{"10.4":0},O:{"0":0.84168},H:{"0":0.43796}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MV.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MV.js index 3c32ee17861..4cbca88957c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MV.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MV.js @@ -1 +1 @@ -module.exports={C:{"3":0.00288,"5":0.00288,"17":0.00576,"34":0.00576,"40":0.00288,"68":0.02879,"72":0.00576,"77":0.00576,"78":0.01152,"85":0.00576,"87":0.00288,"89":0.02591,"90":0.01152,"91":0.02015,"93":0.00576,"95":0.02015,"96":0.40594,"97":0.68808,"98":0.02015,_:"2 4 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 79 80 81 82 83 84 86 88 92 94 99 3.5","3.6":0.00576},D:{"18":0.00576,"39":0.01727,"42":0.00288,"43":0.00864,"44":0.00864,"45":0.00864,"46":0.01152,"47":0.00576,"49":0.00288,"51":0.02303,"67":0.00864,"69":0.00288,"70":0.00576,"73":0.01727,"74":0.00576,"76":0.02303,"77":0.02015,"79":0.02015,"80":0.01727,"83":0.0547,"84":0.00288,"85":0.00576,"86":0.05182,"87":0.05758,"88":0.00288,"89":0.02879,"90":0.00864,"91":0.04031,"92":0.04606,"93":0.01152,"94":0.04031,"95":0.04606,"96":0.29366,"97":6.25319,"98":13.11672,"99":0.00288,"100":0.01152,"101":0.00576,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 48 50 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 68 71 72 75 78 81"},F:{"28":0.00864,"81":0.0144,"82":0.1094,"83":0.25623,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00288,"15":0.00576,"16":0.00576,"17":0.00288,"18":0.02015,"84":0.00576,"89":0.00288,"90":0.00576,"91":0.01152,"92":0.00576,"93":0.02015,"95":0.00864,"96":0.02015,"97":0.3973,"98":1.06235,_:"13 14 79 80 81 83 85 86 87 88 94"},E:{"4":0,"9":0.04606,"13":0.01727,"14":0.10364,"15":0.09501,_:"0 5 6 7 8 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.00864,"12.1":0.02303,"13.1":0.08925,"14.1":0.38867,"15.1":0.27063,"15.2-15.3":0.39442,"15.4":0.00576},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01626,"8.1-8.4":0.00813,"9.0-9.2":0,"9.3":0.0305,"10.0-10.2":0.00203,"10.3":0.04473,"11.0-11.2":0.10572,"11.3-11.4":0.01017,"12.0-12.1":0.04676,"12.2-12.5":0.38425,"13.0-13.1":0.0244,"13.2":0.0061,"13.3":0.07116,"13.4-13.7":0.13418,"14.0-14.4":0.81932,"14.5-14.8":3.22034,"15.0-15.1":3.72657,"15.2-15.3":11.61275,"15.4":0.05286},P:{"4":0.04174,"5.0-5.4":0.0216,"6.2-6.4":0.02087,"7.2-7.4":0.06261,"8.2":0.01057,"9.2":0.01045,"10.1":0.01052,"11.1-11.2":0.04174,"12.0":0.02087,"13.0":0.05217,"14.0":0.05217,"15.0":0.09391,"16.0":1.72173},I:{"0":0,"3":0.00729,"4":0.04008,"2.1":0.00729,"2.2":0.02915,"2.3":0.0255,"4.1":0.01457,"4.2-4.3":0.04736,"4.4":0,"4.4.3-4.4.4":0.29875},A:{"7":0.00576,"8":0.05182,"9":0.01152,"10":0.00864,"11":0.06046,_:"6 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.01424},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.68362},Q:{"10.4":0},O:{"0":0.86876},H:{"0":0.51911},L:{"0":46.41095},S:{"2.5":0.00712}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00284,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00284,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0.00284,"82":0.00284,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00284,"89":0,"90":0.03407,"91":0.00284,"92":0,"93":0,"94":0,"95":0.00284,"96":0,"97":0.01703,"98":0,"99":0,"100":0.00284,"101":0.02555,"102":0.01136,"103":0.2839,"104":0.05678,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00568,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0.00568,"75":0,"76":0.00284,"77":0,"78":0,"79":0.00284,"80":0.00852,"81":0.01987,"83":0.02839,"84":0.00568,"85":0.01703,"86":0.00284,"87":0.01987,"88":0,"89":0.00568,"90":0,"91":0.00568,"92":0.00852,"93":0,"94":0.00568,"95":0.00568,"96":0.00284,"97":0.00852,"98":0.00568,"99":0.00852,"100":0.01136,"101":0.02271,"102":0.03975,"103":1.63526,"104":4.0257,"105":0.01136,"106":0.00284,"107":0.00284,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00284,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.02839,"64":0.01136,"65":0,"66":0,"67":0,"68":0,"69":0.0142,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.07381,"90":0.00568,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00568,"16":0.00284,"17":0,"18":0.00284,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00284,"90":0,"91":0,"92":0.00284,"93":0,"94":0,"95":0,"96":0,"97":0.00852,"98":0,"99":0,"100":0,"101":0.00568,"102":0.00568,"103":0.13059,"104":0.32932,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00284,"14":0.01987,"15":0.00568,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00284,"12.1":0.00284,"13.1":0.0142,"14.1":0.04259,"15.1":0.0142,"15.2-15.3":0.0142,"15.4":0.03691,"15.5":0.16182,"15.6":0.15047,"16.0":0.00852},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00283,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01983,"10.0-10.2":0,"10.3":0.01983,"11.0-11.2":0,"11.3-11.4":0.0085,"12.0-12.1":0.01133,"12.2-12.5":0.23228,"13.0-13.1":0.01983,"13.2":0.00567,"13.3":0.02833,"13.4-13.7":0.17279,"14.0-14.4":0.40507,"14.5-14.8":1.17271,"15.0-15.1":0.64867,"15.2-15.3":0.82146,"15.4":1.38516,"15.5":7.93987,"15.6":14.73253,"16.0":0.69683},P:{"4":0.04162,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.04162,"8.2":0,"9.2":0.01041,"10.1":0.01041,"11.1-11.2":0.02081,"12.0":0,"13.0":0.03122,"14.0":0.04162,"15.0":0.02081,"16.0":0.05203,"17.0":0.68674,"18.0":0.92606},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00924,"4.4":0,"4.4.3-4.4.4":0.22644},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00284,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":59.45242},S:{"2.5":0},R:{_:"0"},M:{"0":0.41534},Q:{"10.4":0},O:{"0":0.57288},H:{"0":0.61016}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MW.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MW.js index c6b2306b076..fa4ebfab12f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MW.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MW.js @@ -1 +1 @@ -module.exports={C:{"29":0.01012,"34":0.00337,"39":0.00675,"40":0.00337,"47":0.00337,"48":0.00337,"52":0.01687,"56":0.00337,"59":0.01687,"60":0.00337,"61":0.02024,"63":0.04385,"68":0.01012,"69":0.02024,"72":0.01012,"76":0.00675,"77":0.00337,"78":0.07758,"80":0.02024,"81":0.03373,"84":0.01012,"87":0.00337,"88":0.04048,"89":0.03373,"90":0.00337,"91":0.04385,"92":0.00675,"93":0.01012,"94":0.07083,"95":0.05734,"96":1.35257,"97":2.09126,"98":0.08095,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 35 36 37 38 41 42 43 44 45 46 49 50 51 53 54 55 57 58 62 64 65 66 67 70 71 73 74 75 79 82 83 85 86 99 3.5 3.6"},D:{"31":0.00337,"33":0.00337,"43":0.00675,"49":0.01349,"50":0.14504,"52":0.00337,"55":0.00675,"56":0.00675,"60":0.00675,"62":0.00337,"63":0.00675,"65":0.00675,"66":0.00675,"69":0.02361,"70":0.01012,"71":0.01012,"72":0.01687,"74":0.02698,"75":0.02361,"76":0.01012,"77":0.00675,"78":0.05734,"79":0.05734,"80":0.01687,"81":0.01349,"83":0.03036,"84":0.02024,"85":0.01012,"86":0.0506,"87":0.17877,"88":0.03373,"89":0.0371,"90":0.0371,"91":0.03373,"92":0.13829,"93":0.04385,"94":0.04385,"95":0.10794,"96":0.61726,"97":4.62438,"98":10.97574,"99":0.01012,"100":0.00337,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 34 35 36 37 38 39 40 41 42 44 45 46 47 48 51 53 54 57 58 59 61 64 67 68 73 101"},F:{"34":0.00675,"36":0.00675,"42":0.02024,"54":0.02024,"64":0.21925,"67":0.01012,"74":0.00675,"79":0.03036,"80":0.01349,"81":0.00675,"82":0.13492,"83":0.94107,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 37 38 39 40 41 43 44 45 46 47 48 49 50 51 52 53 55 56 57 58 60 62 63 65 66 68 69 70 71 72 73 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.07083,"13":0.04048,"14":0.02698,"15":0.04048,"16":0.0506,"17":0.06071,"18":0.27659,"84":0.03036,"85":0.06071,"89":0.09444,"90":0.06071,"91":0.00675,"92":0.09782,"93":0.01012,"94":0.03373,"95":0.0506,"96":0.1754,"97":0.84662,"98":2.45892,_:"79 80 81 83 86 87 88"},E:{"4":0,"13":0.01349,"14":0.02361,"15":0.0506,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 10.1 15.4","5.1":0.05734,"9.1":0.00337,"11.1":0.00675,"12.1":0.01349,"13.1":0.04722,"14.1":0.0877,"15.1":0.0371,"15.2-15.3":0.03036},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00023,"5.0-5.1":0.00045,"6.0-6.1":0,"7.0-7.1":0.00499,"8.1-8.4":0,"9.0-9.2":0.00385,"9.3":0.04988,"10.0-10.2":0.00068,"10.3":0.04671,"11.0-11.2":0.01088,"11.3-11.4":0.0068,"12.0-12.1":0.0093,"12.2-12.5":0.28638,"13.0-13.1":0.00612,"13.2":0.00499,"13.3":0.02154,"13.4-13.7":0.07505,"14.0-14.4":0.33332,"14.5-14.8":0.4349,"15.0-15.1":0.44805,"15.2-15.3":0.51403,"15.4":0.00794},P:{"4":0.27352,"5.0-5.4":0.0216,"6.2-6.4":0.02104,"7.2-7.4":0.11572,"8.2":0.01057,"9.2":0.07569,"10.1":0.01052,"11.1-11.2":0.07364,"12.0":0.02104,"13.0":0.18936,"14.0":0.19988,"15.0":0.263,"16.0":1.052},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00519,"4.2-4.3":0.00778,"4.4":0,"4.4.3-4.4.4":0.1063},A:{"9":0.00675,"10":0.00337,"11":0.14167,_:"6 7 8 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.01988},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.21866},Q:{"10.4":0},O:{"0":6.77177},H:{"0":7.77233},L:{"0":50.43139},S:{"2.5":0.03976}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0.00316,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00316,"44":0,"45":0,"46":0,"47":0.00316,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0.00316,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00316,"60":0,"61":0.00316,"62":0.00316,"63":0.00632,"64":0,"65":0.00316,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00316,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00316,"89":0,"90":0.00316,"91":0.01897,"92":0,"93":0,"94":0.00632,"95":0,"96":0,"97":0.00316,"98":0.00316,"99":0.01264,"100":0.00948,"101":0.00948,"102":0.04425,"103":0.78393,"104":0.10747,"105":0.00316,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00948,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00316,"47":0,"48":0,"49":0.00316,"50":0.00316,"51":0,"52":0,"53":0,"54":0.00632,"55":0.00948,"56":0,"57":0.00316,"58":0,"59":0,"60":0,"61":0.00632,"62":0,"63":0,"64":0.01581,"65":0.00316,"66":0,"67":0,"68":0.00316,"69":0.00316,"70":0.00632,"71":0,"72":0,"73":0,"74":0.00632,"75":0.00948,"76":0,"77":0.00316,"78":0.00948,"79":0.00948,"80":0.00948,"81":0.03161,"83":0.00632,"84":0,"85":0.00316,"86":0.01581,"87":0.00948,"88":0.00948,"89":0.00632,"90":0.00316,"91":0.00316,"92":0.00948,"93":0.00316,"94":0.00316,"95":0.00948,"96":0.00948,"97":0.00948,"98":0.05058,"99":0.01581,"100":0.02529,"101":0.04742,"102":0.04742,"103":1.09687,"104":2.65208,"105":0.00632,"106":0.00316,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00316,"25":0,"26":0.00948,"27":0.00632,"28":0.01581,"29":0.00316,"30":0.00948,"31":0.00632,"32":0.00948,"33":0.00316,"34":0,"35":0.01581,"36":0.00316,"37":0,"38":0.01897,"39":0,"40":0.03477,"41":0,"42":0.00948,"43":0,"44":0,"45":0.00316,"46":0.00316,"47":0,"48":0,"49":0,"50":0.00316,"51":0.00316,"52":0,"53":0,"54":0.00948,"55":0.00316,"56":0.00316,"57":0.00632,"58":0.06006,"60":0.17386,"62":0.00316,"63":0.39513,"64":0.2592,"65":0,"66":0,"67":0,"68":0.00316,"69":0,"70":0.02529,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.01897,"80":0,"81":0.00316,"82":0,"83":0,"84":0.00316,"85":0.01897,"86":0.00948,"87":0.00632,"88":0.00316,"89":0.29713,"90":0.05058,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.03161},B:{"12":0.02529,"13":0.00632,"14":0.00632,"15":0.01581,"16":0.01264,"17":0.01581,"18":0.0569,"79":0,"80":0,"81":0,"83":0,"84":0.01581,"85":0.00632,"86":0.00316,"87":0,"88":0.00948,"89":0.00632,"90":0.01264,"91":0,"92":0.02845,"93":0,"94":0,"95":0.00316,"96":0.00316,"97":0.00316,"98":0.01581,"99":0.00948,"100":0.00948,"101":0.01897,"102":0.04109,"103":0.39513,"104":0.70174,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00632,"15":0.00632,_:"0","3.1":0,"3.2":0,"5.1":0.00316,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00316,"12.1":0.00632,"13.1":0.00948,"14.1":0.00948,"15.1":0,"15.2-15.3":0.00948,"15.4":0.01581,"15.5":0.02213,"15.6":0.01897,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00056,"5.0-5.1":0.0045,"6.0-6.1":0,"7.0-7.1":0.01181,"8.1-8.4":0.00056,"9.0-9.2":0,"9.3":0.10801,"10.0-10.2":0.00056,"10.3":0.07763,"11.0-11.2":0.00394,"11.3-11.4":0.01125,"12.0-12.1":0.00309,"12.2-12.5":0.2717,"13.0-13.1":0.0045,"13.2":0.00281,"13.3":0.00956,"13.4-13.7":0.05485,"14.0-14.4":0.21686,"14.5-14.8":0.16679,"15.0-15.1":0.11954,"15.2-15.3":0.09647,"15.4":0.1561,"15.5":0.66154,"15.6":0.7912,"16.0":0.03713},P:{"4":0.27947,"5.0-5.4":0.01035,"6.2-6.4":0,"7.2-7.4":0.25877,"8.2":0,"9.2":0.0414,"10.1":0,"11.1-11.2":0.01035,"12.0":0.01035,"13.0":0.0207,"14.0":0.06211,"15.0":0.08281,"16.0":0.27947,"17.0":0.85913,"18.0":0.38298},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00238,"4.2-4.3":0.01789,"4.4":0,"4.4.3-4.4.4":0.17766},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00316,"9":0,"10":0,"11":0.02529,"5.5":0},J:{"7":0,"10":0.01368},N:{"10":0,"11":0},L:{"0":66.56534},S:{"2.5":0.0342},R:{_:"0"},M:{"0":0.18465},Q:{"10.4":0.02052},O:{"0":6.29872},H:{"0":7.95744}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MX.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MX.js index 10205392d73..3b0dd959040 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MX.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MX.js @@ -1 +1 @@ -module.exports={C:{"4":0.69904,"34":0.00874,"52":0.02185,"56":0.00437,"72":0.00437,"73":0.00437,"78":0.04369,"84":0.00437,"88":0.00874,"89":0.00437,"90":0.01311,"91":0.02185,"92":0.00437,"93":0.00437,"94":0.0699,"95":0.03058,"96":0.5636,"97":0.93497,"98":0.00874,_:"2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 74 75 76 77 79 80 81 82 83 85 86 87 99 3.5 3.6"},D:{"22":0.00874,"34":0.00437,"38":0.01311,"39":0.00874,"47":0.00437,"48":0.00437,"49":0.07427,"52":0.01311,"53":0.00437,"58":0.00437,"60":0.00437,"63":0.00437,"65":0.01311,"66":0.02185,"67":0.01748,"69":0.00437,"70":0.00874,"71":0.00437,"72":0.00437,"73":0.00437,"74":0.00874,"75":0.01311,"76":0.02185,"77":0.01311,"78":0.00874,"79":0.16602,"80":0.01748,"81":0.02185,"83":0.01748,"84":0.02185,"85":0.01748,"86":0.02621,"87":0.09612,"88":0.03058,"89":0.02185,"90":0.03495,"91":0.07427,"92":0.07427,"93":0.14418,"94":0.0699,"95":0.0699,"96":0.42379,"97":8.14819,"98":21.37315,"99":0.01748,"100":0.00874,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 35 36 37 40 41 42 43 44 45 46 50 51 54 55 56 57 59 61 62 64 68 101"},F:{"82":0.3102,"83":0.93934,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01311,"15":0.00874,"16":0.00874,"17":0.00874,"18":0.02621,"85":0.00874,"89":0.00437,"90":0.00874,"91":0.00437,"92":0.00874,"94":0.00874,"95":0.0568,"96":0.03495,"97":0.88254,"98":2.60392,_:"13 14 79 80 81 83 84 86 87 88 93"},E:{"4":0,"13":0.02185,"14":0.14855,"15":0.10923,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1","5.1":0.02185,"10.1":0.00437,"11.1":0.01748,"12.1":0.03932,"13.1":0.17913,"14.1":0.5068,"15.1":0.26214,"15.2-15.3":0.55049,"15.4":0.00437},G:{"8":0.00175,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00614,"6.0-6.1":0.00175,"7.0-7.1":0.01052,"8.1-8.4":0.00263,"9.0-9.2":0.01315,"9.3":0.06925,"10.0-10.2":0.00175,"10.3":0.05435,"11.0-11.2":0.01052,"11.3-11.4":0.03506,"12.0-12.1":0.01052,"12.2-12.5":0.43305,"13.0-13.1":0.01578,"13.2":0.00438,"13.3":0.03068,"13.4-13.7":0.10695,"14.0-14.4":0.3375,"14.5-14.8":1.62087,"15.0-15.1":1.2676,"15.2-15.3":4.69782,"15.4":0.02981},P:{"4":0.12942,"5.0-5.4":0.01024,"6.2-6.4":0.02048,"7.2-7.4":0.07549,"8.2":0.01015,"9.2":0.12286,"10.1":0.02048,"11.1-11.2":0.04314,"12.0":0.01078,"13.0":0.03235,"14.0":0.04314,"15.0":0.04314,"16.0":0.89514},I:{"0":0,"3":0,"4":0.00116,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00174,"4.2-4.3":0.00348,"4.4":0,"4.4.3-4.4.4":0.03304},A:{"8":0.01885,"9":0.00942,"10":0.00942,"11":0.2026,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.17456},Q:{"10.4":0},O:{"0":0.05068},H:{"0":0.19192},L:{"0":41.32315},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0.33548,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00541,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00541,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01623,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00541,"89":0,"90":0.01082,"91":0.01082,"92":0,"93":0,"94":0.01082,"95":0,"96":0,"97":0,"98":0,"99":0.00541,"100":0.00541,"101":0.00541,"102":0.02164,"103":0.56816,"104":0.12986,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00541,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02706,"50":0,"51":0,"52":0.01082,"53":0,"54":0,"55":0,"56":0,"57":0.00541,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00541,"66":0.01082,"67":0.00541,"68":0,"69":0.01082,"70":0.00541,"71":0.00541,"72":0.00541,"73":0,"74":0.00541,"75":0.00541,"76":0.01082,"77":0.00541,"78":0.00541,"79":0.03247,"80":0.00541,"81":0.01623,"83":0.00541,"84":0.01082,"85":0.01082,"86":0.01623,"87":0.02706,"88":0.01623,"89":0.01082,"90":0.01623,"91":0.03247,"92":0.03788,"93":0.02164,"94":0.01082,"95":0.01082,"96":0.03247,"97":0.03247,"98":0.03247,"99":0.02706,"100":0.04329,"101":0.0487,"102":0.10822,"103":5.24867,"104":17.06629,"105":0.06493,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00541,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01082,"64":0.01082,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00541,"86":0,"87":0,"88":0.00541,"89":0.53028,"90":0.03247,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.01082,"13":0,"14":0,"15":0,"16":0,"17":0.00541,"18":0.01082,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00541,"91":0,"92":0.00541,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00541,"100":0.00541,"101":0.11904,"102":0.01623,"103":0.47076,"104":1.36898,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00541,"14":0.03247,"15":0.01082,_:"0","3.1":0,"3.2":0,"5.1":0.00541,"6.1":0,"7.1":0,"9.1":0.01082,"10.1":0,"11.1":0.00541,"12.1":0.01623,"13.1":0.05952,"14.1":0.0974,"15.1":0.01623,"15.2-15.3":0.01623,"15.4":0.05411,"15.5":0.18939,"15.6":0.30843,"16.0":0.00541},G:{"8":0.00609,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00456,"6.0-6.1":0,"7.0-7.1":0.01217,"8.1-8.4":0.00152,"9.0-9.2":0.00609,"9.3":0.07608,"10.0-10.2":0,"10.3":0.06391,"11.0-11.2":0.01826,"11.3-11.4":0.05174,"12.0-12.1":0.04108,"12.2-12.5":0.89929,"13.0-13.1":0.01522,"13.2":0.02891,"13.3":0.06239,"13.4-13.7":0.22825,"14.0-14.4":1.10014,"14.5-14.8":2.83176,"15.0-15.1":0.24803,"15.2-15.3":0.22368,"15.4":0.3941,"15.5":2.42548,"15.6":6.36043,"16.0":0.10195},P:{"4":0.07209,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.05149,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.0206,"12.0":0.0103,"13.0":0.0103,"14.0":0.0206,"15.0":0.0103,"16.0":0.04119,"17.0":0.27806,"18.0":0.37075},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01398,"4.2-4.3":0.06292,"4.4":0,"4.4.3-4.4.4":0.3146},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.05411,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":54.11128},S:{"2.5":0.00459},R:{_:"0"},M:{"0":0.13767},Q:{"10.4":0},O:{"0":0.03671},H:{"0":0.1564}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MY.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MY.js index 0bb186ae5e0..d2c708e26bc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MY.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MY.js @@ -1 +1 @@ -module.exports={C:{"34":0.01996,"39":0.01198,"52":0.02395,"60":0.02395,"63":0.00399,"71":0.00399,"78":0.02395,"81":0.00399,"88":0.00399,"89":0.00399,"91":0.03593,"92":0.00399,"93":0.00399,"94":0.01597,"95":0.02395,"96":0.54291,"97":0.97804,"98":0.02395,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 64 65 66 67 68 69 70 72 73 74 75 76 77 79 80 82 83 84 85 86 87 90 99 3.5 3.6"},D:{"22":0.00798,"34":0.02395,"38":0.08782,"47":0.01198,"49":0.07186,"53":0.07585,"55":0.07186,"56":0.03194,"58":0.00399,"62":0.00798,"63":0.00399,"65":0.01198,"66":0.00399,"67":0.01198,"68":0.00798,"69":0.01597,"70":0.02794,"71":0.01198,"72":0.01597,"73":0.01597,"74":0.01597,"75":0.03194,"76":0.01198,"77":0.00798,"78":0.01996,"79":0.31138,"80":0.02395,"81":0.0519,"83":0.03992,"84":0.03593,"85":0.04391,"86":0.0519,"87":0.07984,"88":0.04391,"89":0.03992,"90":0.02395,"91":0.07984,"92":0.18363,"93":0.07186,"94":0.07585,"95":0.06387,"96":0.47904,"97":7.52492,"98":20.61469,"99":0.01198,"100":0.02395,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 54 57 59 60 61 64 101"},F:{"28":0.03194,"36":0.05589,"40":0.01198,"46":0.05589,"82":0.09581,"83":0.37924,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01198,"84":0.00399,"92":0.00399,"95":0.00399,"96":0.02395,"97":0.35529,"98":1.74051,_:"12 13 14 15 16 17 79 80 81 83 85 86 87 88 89 90 91 93 94"},E:{"4":0,"13":0.03593,"14":0.21956,"15":0.18762,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00798,"11.1":0.01597,"12.1":0.02794,"13.1":0.1477,"14.1":0.87026,"15.1":0.50698,"15.2-15.3":0.79042,"15.4":0.00399},G:{"8":0.00133,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00265,"5.0-5.1":0.0053,"6.0-6.1":0.01061,"7.0-7.1":0.02652,"8.1-8.4":0.03448,"9.0-9.2":0.02652,"9.3":0.23872,"10.0-10.2":0.02255,"10.3":0.17241,"11.0-11.2":0.02122,"11.3-11.4":0.02785,"12.0-12.1":0.03713,"12.2-12.5":0.65781,"13.0-13.1":0.03448,"13.2":0.01194,"13.3":0.07825,"13.4-13.7":0.19496,"14.0-14.4":0.70423,"14.5-14.8":2.07688,"15.0-15.1":2.5636,"15.2-15.3":6.27572,"15.4":0.03448},P:{"4":0.76275,"5.0-5.4":0.0216,"6.2-6.4":0.02104,"7.2-7.4":0.06269,"8.2":0.01057,"9.2":0.01045,"10.1":0.01052,"11.1-11.2":0.05224,"12.0":0.0209,"13.0":0.06269,"14.0":0.08359,"15.0":0.08359,"16.0":1.50461},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00698,"4.4":0,"4.4.3-4.4.4":0.02907},A:{"9":0.00577,"11":0.14992,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.01512,_:"11"},R:{_:"0"},M:{"0":0.13818},Q:{"10.4":0.00601},O:{"0":1.03938},H:{"0":0.59724},L:{"0":43.04182},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.01263,"35":0,"36":0,"37":0,"38":0,"39":0.00421,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01263,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.01263,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00421,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00842,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00421,"85":0,"86":0,"87":0,"88":0.00421,"89":0,"90":0,"91":0.00842,"92":0,"93":0,"94":0.00421,"95":0,"96":0,"97":0,"98":0.00421,"99":0.00842,"100":0.01263,"101":0.00842,"102":0.02106,"103":0.56006,"104":0.10106,"105":0.00421,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00421,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.01263,"35":0,"36":0,"37":0,"38":0.03369,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00421,"48":0,"49":0.02948,"50":0,"51":0,"52":0,"53":0.03369,"54":0,"55":0.02527,"56":0.00842,"57":0,"58":0.00421,"59":0,"60":0,"61":0,"62":0.00421,"63":0,"64":0,"65":0.00421,"66":0.00421,"67":0.00421,"68":0.00421,"69":0.00421,"70":0.00842,"71":0.00421,"72":0.00421,"73":0.00842,"74":0.00842,"75":0.01684,"76":0.00421,"77":0.00421,"78":0.00842,"79":0.16844,"80":0.00842,"81":0.02106,"83":0.02527,"84":0.01684,"85":0.02106,"86":0.02948,"87":0.03369,"88":0.02106,"89":0.02948,"90":0.00842,"91":0.02948,"92":0.13896,"93":0.00842,"94":0.01263,"95":0.01263,"96":0.02948,"97":0.04632,"98":0.02948,"99":0.02948,"100":0.04211,"101":0.0379,"102":0.08843,"103":3.30142,"104":8.29146,"105":0.02106,"106":0.00842,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.02106,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.02527,"37":0.00842,"38":0,"39":0,"40":0.00421,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.02948,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00421,"62":0,"63":0.04632,"64":0.0379,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00421,"86":0,"87":0,"88":0.00421,"89":0.16423,"90":0.01263,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00421,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00421,"102":0.00421,"103":0.2695,"104":0.6906,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01263,"14":0.06317,"15":0.02106,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00421,"11.1":0.00421,"12.1":0.00842,"13.1":0.04632,"14.1":0.17265,"15.1":0.03369,"15.2-15.3":0.02948,"15.4":0.1137,"15.5":0.44216,"15.6":0.58954,"16.0":0.00421},G:{"8":0.0021,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00421,"5.0-5.1":0.01262,"6.0-6.1":0.01683,"7.0-7.1":0.04417,"8.1-8.4":0.05258,"9.0-9.2":0.02103,"9.3":0.36387,"10.0-10.2":0.01893,"10.3":0.60995,"11.0-11.2":0.02734,"11.3-11.4":0.02945,"12.0-12.1":0.04838,"12.2-12.5":0.86235,"13.0-13.1":0.02945,"13.2":0.01262,"13.3":0.06731,"13.4-13.7":0.16616,"14.0-14.4":0.57209,"14.5-14.8":1.0853,"15.0-15.1":0.45641,"15.2-15.3":0.54896,"15.4":1.43865,"15.5":4.81653,"15.6":9.64567,"16.0":0.08203},P:{"4":0.85724,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.05227,"8.2":0,"9.2":0.01045,"10.1":0,"11.1-11.2":0.04182,"12.0":0.01045,"13.0":0.04182,"14.0":0.04182,"15.0":0.03136,"16.0":0.10454,"17.0":0.74224,"18.0":0.91996},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01457,"4.4":0,"4.4.3-4.4.4":0.07649},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0.0059,"8":0,"9":0,"10":0,"11":0.05306,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":55.58282},S:{"2.5":0},R:{_:"0"},M:{"0":0.14473},Q:{"10.4":0.01158},O:{"0":0.96676},H:{"0":0.64672}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MZ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MZ.js index 9fb039d0b71..aa1ccca8a46 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MZ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/MZ.js @@ -1 +1 @@ -module.exports={C:{"35":0.00863,"45":0.00431,"52":0.00431,"65":0.00431,"66":0.00431,"78":0.00863,"88":0.01725,"89":0.00863,"91":0.01294,"92":0.00431,"93":0.00863,"94":0.01294,"95":0.02588,"96":0.77634,"97":1.46642,"98":0.00863,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 90 99 3.5 3.6"},D:{"11":0.00431,"33":0.01725,"39":0.02157,"40":0.00863,"42":0.00431,"43":0.04744,"49":0.01294,"53":0.00431,"56":0.03882,"60":0.18115,"62":0.00431,"63":0.02157,"65":0.00431,"68":0.00431,"69":0.00863,"70":0.01725,"72":0.00431,"73":0.00431,"74":0.04744,"77":0.00863,"79":0.01725,"80":0.01725,"81":0.38817,"83":0.01294,"84":0.00431,"85":0.00431,"86":0.06901,"87":0.05176,"88":0.02157,"89":0.02157,"90":0.01725,"91":0.03882,"92":0.03019,"93":0.1984,"94":0.04744,"95":0.08626,"96":0.29328,"97":5.09365,"98":12.09797,"99":0.01294,"100":0.00431,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 41 44 45 46 47 48 50 51 52 54 55 57 58 59 61 64 66 67 71 75 76 78 101"},F:{"20":0.01725,"53":0.00863,"65":0.01294,"79":0.00863,"80":0.02157,"82":0.18115,"83":1.60012,_:"9 11 12 15 16 17 18 19 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 54 55 56 57 58 60 62 63 64 66 67 68 69 70 71 72 73 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01725,"13":0.00431,"14":0.00431,"15":0.00863,"16":0.03019,"17":0.01294,"18":0.18115,"84":0.01725,"85":0.00431,"89":0.12939,"90":0.00431,"91":0.00863,"92":0.0345,"93":0.00863,"94":0.01725,"95":0.01725,"96":0.04313,"97":0.59519,"98":1.626,_:"79 80 81 83 86 87 88"},E:{"4":0,"13":0.01294,"14":0.02588,"15":0.00863,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00863,"11.1":0.00863,"12.1":0.01294,"13.1":0.07763,"14.1":0.06901,"15.1":0.02588,"15.2-15.3":0.03882},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00176,"6.0-6.1":0.00059,"7.0-7.1":0.03515,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02753,"10.0-10.2":0.00234,"10.3":0.11423,"11.0-11.2":0.01172,"11.3-11.4":0.06326,"12.0-12.1":0.02929,"12.2-12.5":1.80829,"13.0-13.1":0.13707,"13.2":0.06444,"13.3":0.05213,"13.4-13.7":0.18042,"14.0-14.4":0.5395,"14.5-14.8":0.71816,"15.0-15.1":0.62971,"15.2-15.3":1.43749,"15.4":0.00351},P:{"4":1.32129,"5.0-5.4":0.03097,"6.2-6.4":0.02048,"7.2-7.4":0.20645,"8.2":0.11355,"9.2":0.08258,"10.1":0.02048,"11.1-11.2":0.17548,"12.0":0.12387,"13.0":0.07226,"14.0":0.19613,"15.0":0.08258,"16.0":0.67097},I:{"0":0,"3":0,"4":0.00023,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00085,"4.2-4.3":0.00271,"4.4":0,"4.4.3-4.4.4":0.03032},A:{"11":0.1984,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.03412},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.07392},Q:{"10.4":0.00569},O:{"0":0.21038},H:{"0":5.0117},L:{"0":58.17232},S:{"2.5":0.03412}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00458,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00458,"57":0.03205,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00458,"67":0,"68":0.00458,"69":0,"70":0,"71":0,"72":0.00458,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00916,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01832,"89":0,"90":0,"91":0.01374,"92":0,"93":0,"94":0.00458,"95":0,"96":0,"97":0.00458,"98":0.12363,"99":0.00458,"100":0.00458,"101":0.00916,"102":0.0229,"103":0.82422,"104":0.19232,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0.00458,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.03663,"41":0,"42":0,"43":0.04121,"44":0,"45":0,"46":0.00458,"47":0,"48":0,"49":0.00458,"50":0,"51":0,"52":0.0229,"53":0,"54":0,"55":0.00916,"56":0,"57":0,"58":0.00458,"59":0.00458,"60":0,"61":0,"62":0,"63":0.01374,"64":0,"65":0.00458,"66":0,"67":0,"68":0.01374,"69":0.01374,"70":0.00916,"71":0.00916,"72":0,"73":0,"74":0.15111,"75":0,"76":0,"77":0,"78":0,"79":0.01374,"80":0.01374,"81":0.21979,"83":0.00458,"84":0,"85":0.00458,"86":0.00458,"87":0.05037,"88":0.00916,"89":0.00916,"90":0.03663,"91":0.0229,"92":0.01374,"93":0.00458,"94":0.05037,"95":0.03663,"96":0.02747,"97":0.03663,"98":0.0229,"99":0.1099,"100":0.04579,"101":0.02747,"102":0.06869,"103":2.12008,"104":6.65787,"105":0.03205,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00458,"25":0,"26":0.00458,"27":0.04579,"28":0.00458,"29":0,"30":0,"31":0,"32":0.00458,"33":0,"34":0,"35":0.01832,"36":0,"37":0.00458,"38":0.02747,"39":0,"40":0,"41":0,"42":0.00458,"43":0,"44":0,"45":0,"46":0.00916,"47":0,"48":0,"49":0,"50":0.00458,"51":0.01374,"52":0,"53":0,"54":0.03663,"55":0.00916,"56":0.00916,"57":0.00916,"58":0.1099,"60":0.15111,"62":0.00458,"63":0.50369,"64":0.2839,"65":0.0229,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.01832,"80":0.01374,"81":0,"82":0,"83":0,"84":0.01832,"85":0.00458,"86":0.00916,"87":0.00458,"88":0.03205,"89":0.63648,"90":0.15111,"9.5-9.6":0,"10.0-10.1":0,"10.5":0.00458,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00458},B:{"12":0.01374,"13":0.00916,"14":0.00458,"15":0.00916,"16":0.00458,"17":0.00458,"18":0.06411,"79":0.00458,"80":0,"81":0,"83":0,"84":0.00458,"85":0,"86":0,"87":0,"88":0.00458,"89":0.00916,"90":0.00916,"91":0.00458,"92":0.02747,"93":0,"94":0,"95":0,"96":0.00458,"97":0.00458,"98":0,"99":0.00458,"100":0.00458,"101":0.01374,"102":0.00916,"103":0.43501,"104":1.13101,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00458,"14":0.00458,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00458,"12.1":0.00458,"13.1":0.02747,"14.1":0.00916,"15.1":0.00458,"15.2-15.3":0.00458,"15.4":0.00458,"15.5":0.02747,"15.6":0.04579,"16.0":0},G:{"8":0.02385,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01267,"6.0-6.1":0,"7.0-7.1":0.01341,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.1617,"10.0-10.2":0.00149,"10.3":0.1468,"11.0-11.2":0.00596,"11.3-11.4":0.00596,"12.0-12.1":0.0313,"12.2-12.5":1.40391,"13.0-13.1":0.17735,"13.2":0.00596,"13.3":0.04546,"13.4-13.7":0.14233,"14.0-14.4":0.69152,"14.5-14.8":0.49256,"15.0-15.1":0.17288,"15.2-15.3":0.5179,"15.4":0.42698,"15.5":1.22357,"15.6":1.70496,"16.0":0.04173},P:{"4":0.59408,"5.0-5.4":0,"6.2-6.4":0.02049,"7.2-7.4":0.2868,"8.2":0,"9.2":0.15364,"10.1":0.02049,"11.1-11.2":0.06146,"12.0":0.02049,"13.0":0.04097,"14.0":0.0717,"15.0":0.02049,"16.0":0.10243,"17.0":0.39947,"18.0":0.24582},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00034,"4.2-4.3":0.00258,"4.4":0,"4.4.3-4.4.4":0.06997},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04121,"5.5":0},J:{"7":0,"10":0.06505},N:{"10":0,"11":0},L:{"0":66.042},S:{"2.5":0.15721},R:{_:"0"},M:{"0":0.31984},Q:{"10.4":0.03795},O:{"0":0.42826},H:{"0":5.13738}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NA.js index 60a3ff33c60..529735e9b0c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NA.js @@ -1 +1 @@ -module.exports={C:{"34":0.01641,"37":0.0041,"47":0.00821,"49":0.00821,"52":0.09847,"56":0.0041,"60":0.0041,"72":0.0041,"78":0.02872,"82":0.01231,"83":0.01231,"84":0.01231,"86":0.0041,"87":0.01231,"89":0.0041,"91":0.02462,"94":0.00821,"95":0.02462,"96":0.86573,"97":1.45246,"98":0.02052,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 38 39 40 41 42 43 44 45 46 48 50 51 53 54 55 57 58 59 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 85 88 90 92 93 99 3.5 3.6"},D:{"36":0.00821,"37":0.0041,"38":0.01231,"39":0.0041,"40":0.0041,"48":0.01641,"49":0.04924,"55":0.01231,"63":0.01231,"69":0.02462,"70":0.00821,"71":0.02872,"72":0.00821,"73":0.0041,"75":0.01641,"76":0.01231,"78":0.0041,"79":0.01641,"80":0.01231,"81":0.02462,"83":0.01641,"84":0.02462,"85":0.01231,"86":0.04103,"87":0.02462,"88":0.02462,"89":0.01641,"90":0.03282,"91":0.03693,"92":0.05334,"93":0.04103,"94":0.09437,"95":0.07796,"96":0.2749,"97":6.63455,"98":16.28481,"99":0.0041,"100":0.0041,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 41 42 43 44 45 46 47 50 51 52 53 54 56 57 58 59 60 61 62 64 65 66 67 68 74 77 101"},F:{"79":0.01231,"81":0.0041,"82":0.09847,"83":0.84932,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.03282,"13":0.02052,"14":0.01231,"15":0.02462,"16":0.02462,"17":0.04924,"18":0.09847,"80":0.00821,"81":0.01641,"84":0.02872,"85":0.00821,"88":0.0041,"89":0.01641,"90":0.00821,"91":0.0041,"92":0.04103,"93":0.01231,"94":0.01641,"95":0.03282,"96":0.4062,"97":1.02985,"98":3.37677,_:"79 83 86 87"},E:{"4":0,"12":0.01641,"13":0.01231,"14":0.08206,"15":0.11078,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.00821,"11.1":0.02052,"12.1":0.02462,"13.1":0.10668,"14.1":0.31593,"15.1":0.22156,"15.2-15.3":0.51698},G:{"8":0,"3.2":0,"4.0-4.1":0.00067,"4.2-4.3":0,"5.0-5.1":0.00399,"6.0-6.1":0.01332,"7.0-7.1":0.01864,"8.1-8.4":0.01531,"9.0-9.2":0.00067,"9.3":0.0526,"10.0-10.2":0,"10.3":0.07057,"11.0-11.2":0.01065,"11.3-11.4":0.00266,"12.0-12.1":0.01332,"12.2-12.5":0.47536,"13.0-13.1":0.01465,"13.2":0.00466,"13.3":0.06192,"13.4-13.7":0.08855,"14.0-14.4":0.5446,"14.5-14.8":1.14313,"15.0-15.1":1.44805,"15.2-15.3":2.66641,"15.4":0.00799},P:{"4":0.48383,"5.0-5.4":0.03097,"6.2-6.4":0.02048,"7.2-7.4":0.7309,"8.2":0.11355,"9.2":0.08258,"10.1":0.02048,"11.1-11.2":0.21618,"12.0":0.02059,"13.0":0.15441,"14.0":0.26765,"15.0":0.23677,"16.0":2.66623},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00077,"4.2-4.3":0.00294,"4.4":0,"4.4.3-4.4.4":0.02578},A:{"9":0.00843,"11":0.76293,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.56611},Q:{"10.4":0},O:{"0":0.65457},H:{"0":1.7642},L:{"0":49.09273},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00831,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.02079,"53":0,"54":0,"55":0,"56":0.00416,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00416,"69":0,"70":0,"71":0,"72":0.00416,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00416,"79":0,"80":0,"81":0,"82":0.00416,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.12471,"89":0,"90":0,"91":0.02079,"92":0,"93":0.00416,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00416,"100":0.00831,"101":0.00416,"102":0.0291,"103":0.84803,"104":0.16212,"105":0.00416,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.02494,"41":0,"42":0,"43":0.00416,"44":0,"45":0,"46":0,"47":0,"48":0.00416,"49":0.01663,"50":0.00416,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00416,"61":0.00416,"62":0,"63":0.00416,"64":0.00416,"65":0.00416,"66":0,"67":0,"68":0,"69":0.00831,"70":0.00416,"71":0,"72":0,"73":0,"74":0.00416,"75":0,"76":0,"77":0,"78":0,"79":0.00831,"80":0.00416,"81":0.03741,"83":0.00416,"84":0.00416,"85":0.00416,"86":0.00831,"87":0.00831,"88":0.00831,"89":0.00831,"90":0.00416,"91":0.01663,"92":0.00831,"93":0.00831,"94":0.00831,"95":0.01247,"96":0.02494,"97":0.0291,"98":0.01247,"99":0.01663,"100":0.03741,"101":0.05404,"102":0.06651,"103":2.5524,"104":6.92141,"105":0.0582,"106":0.00831,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.00416,"27":0,"28":0.02079,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.00416,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00831,"62":0,"63":0.18291,"64":0.12471,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00416,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00416,"86":0.00416,"87":0,"88":0.00416,"89":0.36166,"90":0.06651,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00416,"13":0.00831,"14":0.01247,"15":0.01247,"16":0.00831,"17":0.00831,"18":0.0291,"79":0,"80":0,"81":0,"83":0,"84":0.03741,"85":0.00416,"86":0,"87":0,"88":0,"89":0.00416,"90":0.00416,"91":0.00416,"92":0.02079,"93":0,"94":0,"95":0.00416,"96":0.04988,"97":0,"98":0.00416,"99":0.01247,"100":0.00831,"101":0.04988,"102":0.02494,"103":0.84387,"104":1.79582,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00416,"14":0.00416,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00416,"12.1":0.00416,"13.1":0.02494,"14.1":0.0582,"15.1":0.00831,"15.2-15.3":0.01663,"15.4":0.04157,"15.5":0.09977,"15.6":0.19122,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00591,"6.0-6.1":0,"7.0-7.1":0.01379,"8.1-8.4":0.03053,"9.0-9.2":0,"9.3":0.04629,"10.0-10.2":0.00394,"10.3":0.04531,"11.0-11.2":0.00394,"11.3-11.4":0.00197,"12.0-12.1":0.05023,"12.2-12.5":0.73773,"13.0-13.1":0.00689,"13.2":0.00098,"13.3":0.01674,"13.4-13.7":0.0719,"14.0-14.4":0.59392,"14.5-14.8":0.51907,"15.0-15.1":0.36542,"15.2-15.3":0.35557,"15.4":0.31124,"15.5":2.38653,"15.6":4.22051,"16.0":0.06008},P:{"4":0.41637,"5.0-5.4":0,"6.2-6.4":0.01016,"7.2-7.4":0.61948,"8.2":0,"9.2":0,"10.1":0.05078,"11.1-11.2":0.06093,"12.0":0.01016,"13.0":0.04062,"14.0":0.08124,"15.0":0.05078,"16.0":0.17264,"17.0":1.50299,"18.0":1.01553},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01314,"4.2-4.3":0.02482,"4.4":0,"4.4.3-4.4.4":0.19417},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.25773,"5.5":0},J:{"7":0,"10":0.00584},N:{"10":0,"11":0},L:{"0":65.44461},S:{"2.5":0},R:{_:"0"},M:{"0":0.56093},Q:{"10.4":0},O:{"0":0.41485},H:{"0":1.27784}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NC.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NC.js index 0b74bd33779..f8e14efa3ec 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NC.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NC.js @@ -1 +1 @@ -module.exports={C:{"45":0.02514,"48":0.00359,"52":0.14368,"56":0.26222,"60":0.01078,"68":0.01796,"78":0.25503,"80":0.00718,"84":0.00359,"87":0.02155,"88":0.00718,"89":0.01078,"91":0.10417,"92":0.00359,"93":0.00359,"94":0.02155,"95":0.03951,"96":2.18034,"97":3.10349,"98":0.00359,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 49 50 51 53 54 55 57 58 59 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 81 82 83 85 86 90 99 3.5 3.6"},D:{"49":0.10776,"63":0.12213,"65":0.01078,"67":0.00359,"70":0.00359,"71":0.00359,"74":0.03592,"75":0.00359,"76":0.19397,"77":0.00359,"78":0.00718,"79":0.03233,"80":0.01078,"81":0.00359,"83":0.00718,"85":0.01796,"86":0.0431,"87":0.05388,"89":0.01078,"90":0.02155,"91":0.00718,"92":0.02514,"93":0.05747,"94":0.05029,"95":0.25503,"96":0.21193,"97":5.26587,"98":12.11222,"99":0.00359,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 64 66 68 69 72 73 84 88 100 101"},F:{"36":0.00359,"82":0.32328,"83":0.34124,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00718,"15":0.01796,"17":0.00718,"18":0.02514,"84":0.00718,"85":0.02155,"89":0.00718,"91":0.02514,"94":0.00359,"95":0.00718,"96":0.05029,"97":0.84412,"98":2.81972,_:"12 13 16 79 80 81 83 86 87 88 90 92 93"},E:{"4":0,"12":0.0467,"13":0.06825,"14":0.16882,"15":0.10417,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.02874,"11.1":0.12931,"12.1":0.10417,"13.1":0.33765,"14.1":1.52301,"15.1":0.44182,"15.2-15.3":1.0776,"15.4":0.01078},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00223,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03683,"10.0-10.2":0.00446,"10.3":0.13281,"11.0-11.2":0.01228,"11.3-11.4":0.125,"12.0-12.1":0.02009,"12.2-12.5":0.99103,"13.0-13.1":0.02009,"13.2":0.00112,"13.3":0.14508,"13.4-13.7":0.24553,"14.0-14.4":0.39396,"14.5-14.8":1.73096,"15.0-15.1":1.3783,"15.2-15.3":5.90157,"15.4":0.01674},P:{"4":0.1143,"5.0-5.4":0.01015,"6.2-6.4":0.02048,"7.2-7.4":0.99755,"8.2":0.11355,"9.2":0.02078,"10.1":0.02048,"11.1-11.2":0.4676,"12.0":0.04156,"13.0":0.239,"14.0":0.22861,"15.0":0.24939,"16.0":3.67848},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00034,"4.4":0,"4.4.3-4.4.4":0.0253},A:{"9":0.00718,"11":0.21552,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.44222},Q:{"10.4":0},O:{"0":0.0705},H:{"0":0.03034},L:{"0":27.45535},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.00494,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.11364,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00988,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.01482,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.084,"79":0,"80":0.00494,"81":0,"82":0,"83":0.00494,"84":0.00494,"85":0,"86":0,"87":0.00494,"88":0.00494,"89":0.00494,"90":0,"91":0.32117,"92":0.00494,"93":0,"94":0.00988,"95":0.00494,"96":0.01482,"97":0,"98":0.00494,"99":0.04447,"100":0.00988,"101":0.01482,"102":0.13341,"103":2.76696,"104":0.48916,"105":0.00494,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.01482,"27":0,"28":0,"29":0,"30":0,"31":0.00494,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00494,"41":0,"42":0.00494,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.03459,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00494,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00494,"66":0,"67":0.00494,"68":0,"69":0,"70":0,"71":0,"72":0.00494,"73":0,"74":0.00494,"75":0,"76":0.01976,"77":0,"78":0.00494,"79":0.00988,"80":0.01482,"81":0.07412,"83":0.00494,"84":0.00494,"85":0.00494,"86":0.00494,"87":0.02471,"88":0,"89":0.01976,"90":0.01482,"91":0.00988,"92":0.00494,"93":0.03953,"94":0.04447,"95":0.01482,"96":0.01976,"97":0.12353,"98":0.01482,"99":0.07906,"100":0.02965,"101":0.02471,"102":0.07906,"103":2.89543,"104":7.66843,"105":0.01482,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.02965,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00494,"85":0,"86":0.00988,"87":0.00494,"88":0.01482,"89":0.60774,"90":0.07906,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00494,"18":0.01482,"79":0,"80":0,"81":0,"83":0,"84":0.00988,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00494,"92":0.00494,"93":0,"94":0,"95":0,"96":0.01976,"97":0.40516,"98":0.00494,"99":0.00988,"100":0.00988,"101":0.03459,"102":0.06917,"103":0.81527,"104":2.18392,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00494,"12":0,"13":0.01976,"14":0.07906,"15":0.01482,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00494,"11.1":0.01976,"12.1":0.12353,"13.1":0.20258,"14.1":0.37552,"15.1":0.03953,"15.2-15.3":0.05929,"15.4":0.09882,"15.5":0.61763,"15.6":0.98326,"16.0":0.00988},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00378,"5.0-5.1":0.00189,"6.0-6.1":0.00378,"7.0-7.1":0,"8.1-8.4":0.00189,"9.0-9.2":0,"9.3":0.57603,"10.0-10.2":0.00567,"10.3":0.29462,"11.0-11.2":0.01133,"11.3-11.4":0.39283,"12.0-12.1":0.06232,"12.2-12.5":0.80455,"13.0-13.1":0.00567,"13.2":0.00378,"13.3":0.20019,"13.4-13.7":0.0831,"14.0-14.4":0.30784,"14.5-14.8":1.18038,"15.0-15.1":0.40794,"15.2-15.3":0.25496,"15.4":0.86498,"15.5":4.17193,"15.6":9.13708,"16.0":0.09632},P:{"4":0.06297,"5.0-5.4":0,"6.2-6.4":0.0105,"7.2-7.4":0.33587,"8.2":0,"9.2":0.03149,"10.1":0,"11.1-11.2":0.07347,"12.0":0.02099,"13.0":0.08397,"14.0":0.14694,"15.0":0.04198,"16.0":0.18892,"17.0":2.01519,"18.0":3.45311},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01359,"4.4":0,"4.4.3-4.4.4":0.33534},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.084,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":47.86796},S:{"2.5":0},R:{_:"0"},M:{"0":0.22766},Q:{"10.4":0.00506},O:{"0":0.08094},H:{"0":0.03832}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NE.js index d83a475915c..a096d29c486 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NE.js @@ -1 +1 @@ -module.exports={C:{"33":0.00316,"34":0.00316,"35":0.00316,"37":0.00316,"45":0.00316,"47":0.00475,"49":0.01107,"52":0.00475,"56":0.00475,"57":0.00316,"60":0.00316,"63":0.00316,"67":0.00633,"68":0.00316,"72":0.00791,"75":0.00475,"77":0.00158,"78":0.00475,"80":0.00158,"84":0.00158,"85":0.00316,"88":0.00475,"89":0.02689,"91":0.02215,"92":0.00158,"93":0.0174,"94":0.03639,"95":0.04113,"96":0.97768,"97":1.32413,"98":0.02689,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 36 38 39 40 41 42 43 44 46 48 50 51 53 54 55 58 59 61 62 64 65 66 69 70 71 73 74 76 79 81 82 83 86 87 90 99 3.5 3.6"},D:{"33":0.00475,"37":0.00949,"43":0.00316,"48":0.00316,"49":0.01107,"57":0.00158,"58":0.02531,"59":0.00316,"60":0.00316,"63":0.00791,"65":0.00316,"66":0.00633,"67":0.02848,"69":0.02848,"70":0.01898,"71":0.01424,"75":0.00633,"78":0.00475,"79":0.27052,"80":0.00475,"81":0.06486,"83":0.00949,"84":0.00316,"86":0.00475,"87":0.0174,"88":0.01424,"89":0.01424,"90":0.01266,"91":0.0174,"92":0.03006,"93":0.01266,"94":0.01424,"95":0.01582,"96":0.09492,"97":2.07084,"98":3.762,"99":0.00475,"100":0.01424,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 38 39 40 41 42 44 45 46 47 50 51 52 53 54 55 56 61 62 64 68 72 73 74 76 77 85 101"},F:{"12":0.00633,"40":0.00475,"42":0.00158,"45":0.00949,"47":0.00158,"79":0.00158,"80":0.00158,"81":0.01266,"82":0.04904,"83":0.24205,_:"9 11 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 43 44 46 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.08543,"13":0.01582,"14":0.01107,"15":0.00475,"16":0.01898,"17":0.01266,"18":0.11865,"84":0.02689,"85":0.01107,"87":0.00158,"89":0.00475,"90":0.00791,"91":0.01107,"92":0.02689,"93":0.04588,"94":0.00158,"95":0.02215,"96":0.64229,"97":0.45562,"98":1.03621,_:"79 80 81 83 86 88"},E:{"4":0,"8":0.00633,"13":0.00949,"14":0.02531,"15":0.00791,_:"0 5 6 7 9 10 11 12 3.1 3.2 6.1 7.1 15.4","5.1":0.00316,"9.1":0.00316,"10.1":0.00158,"11.1":0.01582,"12.1":0.00791,"13.1":0.0174,"14.1":0.04746,"15.1":0.03955,"15.2-15.3":0.04746},G:{"8":0.00071,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00707,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01202,"10.0-10.2":0,"10.3":0.03252,"11.0-11.2":0.04242,"11.3-11.4":0.09968,"12.0-12.1":0.07635,"12.2-12.5":0.7013,"13.0-13.1":0.01485,"13.2":0.01202,"13.3":0.03464,"13.4-13.7":0.21704,"14.0-14.4":1.26899,"14.5-14.8":1.74194,"15.0-15.1":1.53693,"15.2-15.3":1.26899,"15.4":0.00283},P:{"4":0.29325,"5.0-5.4":0.01015,"6.2-6.4":0.04189,"7.2-7.4":0.07331,"8.2":0.11355,"9.2":0.07331,"10.1":0.02048,"11.1-11.2":0.02095,"12.0":0.06167,"13.0":0.04189,"14.0":0.05237,"15.0":0.14662,"16.0":0.62838},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02221,"4.2-4.3":0.01428,"4.4":0,"4.4.3-4.4.4":0.56954},A:{"9":0.02774,"11":0.3203,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00842},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.0505},Q:{"10.4":0.14309},O:{"0":1.81807},H:{"0":3.80106},L:{"0":71.13845},S:{"2.5":0.00842}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00724,"34":0,"35":0,"36":0.03138,"37":0,"38":0,"39":0.00241,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00241,"48":0.00241,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.01207,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00483,"90":0,"91":0.01207,"92":0,"93":0.00724,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00241,"100":0.00483,"101":0.02414,"102":0.06276,"103":0.89801,"104":0.10863,"105":0.08932,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00241,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0.00241,"26":0,"27":0,"28":0.00241,"29":0,"30":0.00241,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00724,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01207,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.06035,"56":0,"57":0,"58":0.00483,"59":0,"60":0,"61":0.00241,"62":0.00724,"63":0.00241,"64":0,"65":0,"66":0,"67":0.00241,"68":0.00241,"69":0,"70":0.00241,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00241,"78":0,"79":0.04345,"80":0.00241,"81":0,"83":0,"84":0,"85":0,"86":0.00241,"87":0.00966,"88":0,"89":0,"90":0.00241,"91":0.00241,"92":0.00241,"93":0.00483,"94":0,"95":0.00724,"96":0.00483,"97":0.00241,"98":0.00241,"99":0.00483,"100":0.0169,"101":0.00724,"102":0.00724,"103":0.46349,"104":1.09113,"105":0.01207,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00241,"25":0,"26":0.01207,"27":0.00241,"28":0.02655,"29":0,"30":0.01207,"31":0,"32":0,"33":0.00483,"34":0,"35":0,"36":0,"37":0.00483,"38":0.00724,"39":0,"40":0,"41":0,"42":0.00483,"43":0,"44":0,"45":0.00241,"46":0,"47":0.00241,"48":0,"49":0,"50":0.00241,"51":0,"52":0,"53":0,"54":0.00241,"55":0.00241,"56":0.00241,"57":0.00483,"58":0.00241,"60":0.16898,"62":0,"63":0.23416,"64":0.10863,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.02655,"80":0,"81":0,"82":0,"83":0,"84":0.00483,"85":0.00241,"86":0.00483,"87":0.00241,"88":0,"89":0.18105,"90":0.0169,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00483},B:{"12":0.00483,"13":0.00241,"14":0,"15":0,"16":0,"17":0.00241,"18":0.01448,"79":0,"80":0,"81":0,"83":0,"84":0.00241,"85":0,"86":0,"87":0,"88":0,"89":0.00241,"90":0,"91":0,"92":0.00966,"93":0,"94":0,"95":0.00241,"96":0,"97":0,"98":0,"99":0.00724,"100":0.0169,"101":0.00966,"102":0.00241,"103":0.18829,"104":0.33555,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00241,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00241,"12.1":0,"13.1":0.00241,"14.1":0.00241,"15.1":0.00483,"15.2-15.3":0.00724,"15.4":0.00241,"15.5":0.00724,"15.6":0.01931,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00336,"7.0-7.1":0.00672,"8.1-8.4":0,"9.0-9.2":0.00168,"9.3":0.26022,"10.0-10.2":0.00084,"10.3":0.04365,"11.0-11.2":0.0361,"11.3-11.4":0.00252,"12.0-12.1":0.0361,"12.2-12.5":1.17604,"13.0-13.1":0.02099,"13.2":0.00504,"13.3":0.03442,"13.4-13.7":0.11332,"14.0-14.4":0.52129,"14.5-14.8":1.29188,"15.0-15.1":0.27198,"15.2-15.3":0.36683,"15.4":0.41048,"15.5":1.6201,"15.6":2.0843,"16.0":0.0873},P:{"4":0.07129,"5.0-5.4":0.01018,"6.2-6.4":0.04074,"7.2-7.4":0.08148,"8.2":0,"9.2":0.20369,"10.1":0,"11.1-11.2":0.01018,"12.0":0.01018,"13.0":0.02037,"14.0":0.03055,"15.0":0.04074,"16.0":0.10185,"17.0":0.80458,"18.0":0.41757},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00095,"4.4":0,"4.4.3-4.4.4":0.23078},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04345,"5.5":0},J:{"7":0,"10":0.03034},N:{"10":0,"11":0.00759},L:{"0":75.85044},S:{"2.5":0.02276},R:{_:"0"},M:{"0":0.3262},Q:{"10.4":0.06069},O:{"0":2.82199},H:{"0":3.87106}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NF.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NF.js index 14cb7ab2b98..b6b7a82e9b2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NF.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NF.js @@ -1 +1 @@ -module.exports={C:{"95":0.52157,"96":4.16053,"97":7.80549,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 98 99 3.5 3.6"},D:{"81":0.25779,"95":0.13189,"96":1.04313,"97":9.2323,"98":21.588,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 83 84 85 86 87 88 89 90 91 92 93 94 99 100 101"},F:{_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.25779,"97":0.77935,"98":2.60183,_:"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96"},E:{"4":0,"13":0.25779,"14":0.38968,"15":0.77935,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 15.4","13.1":2.46994,"14.1":1.04313,"15.1":0.77935,"15.2-15.3":0.64746},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0.12026,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0.72155,"14.5-14.8":1.80231,"15.0-15.1":3.12359,"15.2-15.3":9.8518,"15.4":0},P:{"4":0.29325,"5.0-5.4":0.01015,"6.2-6.4":0.04189,"7.2-7.4":0.03361,"8.2":0.11355,"9.2":0.0112,"10.1":0.02048,"11.1-11.2":0.03361,"12.0":0.0112,"13.0":0.05602,"14.0":0.26539,"15.0":0.08963,"16.0":1.20445},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.52157,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0.12513},L:{"0":25.03011},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":3.86732,"104":0.14323,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.07162,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":4.37966,"104":10.14207,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.07162,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0.65557,"104":4.88648,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.22036,"14.1":0.36359,"15.1":0,"15.2-15.3":0,"15.4":0.14323,"15.5":0.29198,"15.6":0.72719,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":3.61378,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0.18133,"14.5-14.8":1.98822,"15.0-15.1":0.54398,"15.2-15.3":0.36265,"15.4":2.52901,"15.5":12.47009,"15.6":10.12241,"16.0":0},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.27557,"12.0":0,"13.0":0.13778,"14.0":0.98568,"15.0":0,"16.0":0.13778,"17.0":0.8373,"18.0":0.27557},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":2.62779,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":35.18426},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NG.js index 6433a07ab6f..11ae8662421 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NG.js @@ -1 +1 @@ -module.exports={C:{"34":0.00252,"43":0.02644,"47":0.01007,"48":0.00126,"52":0.01259,"56":0.00252,"57":0.00252,"58":0.00252,"61":0.00126,"65":0.00504,"68":0.00252,"72":0.01007,"77":0.00504,"78":0.01007,"79":0.00252,"80":0.00252,"81":0.00252,"82":0.00504,"83":0.00126,"84":0.00378,"85":0.00378,"86":0.00378,"87":0.00252,"88":0.00504,"89":0.0063,"90":0.00378,"91":0.01511,"92":0.00755,"93":0.00504,"94":0.01259,"95":0.03022,"96":0.45576,"97":0.73652,"98":0.05917,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 44 45 46 49 50 51 53 54 55 59 60 62 63 64 66 67 69 70 71 73 74 75 76 99 3.5 3.6"},D:{"38":0.00378,"39":0.00126,"47":0.01385,"49":0.00378,"50":0.00252,"53":0.00252,"55":0.0063,"56":0.00378,"57":0.00252,"58":0.01007,"62":0.00755,"63":0.00378,"64":0.00881,"65":0.00126,"66":0.00126,"68":0.00378,"69":0.05917,"70":0.01007,"71":0.00378,"72":0.00252,"73":0.00252,"74":0.00755,"75":0.00755,"76":0.00881,"77":0.01259,"78":0.00378,"79":0.0214,"80":0.03022,"81":0.01637,"83":0.01385,"84":0.01007,"85":0.00881,"86":0.03525,"87":0.03651,"88":0.01637,"89":0.01889,"90":0.01889,"91":0.08561,"92":0.03148,"93":0.03273,"94":0.03148,"95":0.04281,"96":0.19515,"97":1.86836,"98":3.74301,"99":0.00755,"100":0.0063,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 40 41 42 43 44 45 46 48 51 52 54 59 60 61 67 101"},F:{"36":0.01133,"65":0.00504,"66":0.00252,"67":0.00378,"79":0.00881,"80":0.02518,"81":0.00126,"82":0.04407,"83":0.26187,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 68 69 70 71 72 73 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01385,"13":0.00252,"14":0.00126,"15":0.00378,"16":0.00378,"17":0.00378,"18":0.03022,"84":0.0063,"85":0.00504,"88":0.0063,"89":0.00504,"90":0.00378,"91":0.00252,"92":0.00881,"93":0.00252,"94":0.00378,"95":0.00755,"96":0.02644,"97":0.22536,"98":0.57159,_:"79 80 81 83 86 87"},E:{"4":0,"11":0.00126,"12":0.00378,"13":0.01133,"14":0.03777,"15":0.01133,_:"0 5 6 7 8 9 10 3.1 3.2 6.1 7.1 9.1 15.4","5.1":0.01259,"10.1":0.00252,"11.1":0.00378,"12.1":0.00504,"13.1":0.02392,"14.1":0.06925,"15.1":0.03148,"15.2-15.3":0.0491},G:{"8":0.00061,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00122,"6.0-6.1":0,"7.0-7.1":0.00367,"8.1-8.4":0,"9.0-9.2":0.00122,"9.3":0.0165,"10.0-10.2":0.00244,"10.3":0.04521,"11.0-11.2":0.10081,"11.3-11.4":0.03177,"12.0-12.1":0.03727,"12.2-12.5":0.71792,"13.0-13.1":0.07637,"13.2":0.02383,"13.3":0.13564,"13.4-13.7":0.2609,"14.0-14.4":1.17617,"14.5-14.8":1.20916,"15.0-15.1":1.06313,"15.2-15.3":1.20122,"15.4":0.00489},P:{"4":0.29325,"5.0-5.4":0.01015,"6.2-6.4":0.04189,"7.2-7.4":0.03361,"8.2":0.11355,"9.2":0.0112,"10.1":0.02048,"11.1-11.2":0.03361,"12.0":0.0112,"13.0":0.05602,"14.0":0.10083,"15.0":0.08963,"16.0":0.45933},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00082,"4.2-4.3":0.00082,"4.4":0,"4.4.3-4.4.4":0.03333},A:{"8":0.00278,"9":0.00278,"10":0.00139,"11":0.03334,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00874},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.27097},Q:{"10.4":0},O:{"0":1.07514},H:{"0":41.55913},L:{"0":37.70243},S:{"2.5":0.00874}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00316,"44":0,"45":0,"46":0,"47":0.00158,"48":0,"49":0,"50":0,"51":0,"52":0.00158,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00158,"66":0,"67":0,"68":0.00316,"69":0,"70":0,"71":0,"72":0.00158,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00158,"79":0,"80":0.00158,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00474,"92":0,"93":0.00158,"94":0.00158,"95":0.00158,"96":0.00158,"97":0.00158,"98":0.00158,"99":0.00632,"100":0.00632,"101":0.00474,"102":0.0158,"103":0.17064,"104":0.03634,"105":0.00158,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0.00158,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00158,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00474,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00158,"56":0,"57":0,"58":0.00158,"59":0,"60":0,"61":0,"62":0.00158,"63":0.00316,"64":0.00158,"65":0,"66":0,"67":0,"68":0.00158,"69":0.00632,"70":0.00158,"71":0,"72":0,"73":0,"74":0.00158,"75":0.00158,"76":0.00158,"77":0.00316,"78":0.00158,"79":0.00474,"80":0.00474,"81":0.0158,"83":0.00316,"84":0.00158,"85":0.01106,"86":0.00474,"87":0.00474,"88":0.00316,"89":0.00316,"90":0.00316,"91":0.00316,"92":0.00316,"93":0.00316,"94":0.00316,"95":0.00316,"96":0.00474,"97":0.00632,"98":0.00474,"99":0.00632,"100":0.00948,"101":0.01106,"102":0.0158,"103":0.27492,"104":0.65254,"105":0.00316,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0.00158,"15":0,"16":0.00158,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0.00158,"24":0.04266,"25":0.00158,"26":0.03318,"27":0.05056,"28":0.02528,"29":0.00474,"30":0.08532,"31":0.04266,"32":0.09796,"33":0.04108,"34":0.00158,"35":0.00948,"36":0.01106,"37":0.01106,"38":0.03318,"39":0.00474,"40":0,"41":0.00316,"42":0.06478,"43":0.00474,"44":0.00316,"45":0.00632,"46":0.04424,"47":0.01738,"48":0.00158,"49":0,"50":0.03792,"51":0.03002,"52":0,"53":0.00158,"54":0.03792,"55":0.03634,"56":0.01106,"57":0.04582,"58":0.12482,"60":0.85636,"62":0.00632,"63":0.94642,"64":0.2528,"65":0.00158,"66":0.00158,"67":0.00316,"68":0.00158,"69":0.00158,"70":0.00474,"71":0.00158,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00158,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00316,"86":0.00158,"87":0,"88":0.00474,"89":0.03634,"90":0.00632,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.02528},B:{"12":0.00158,"13":0,"14":0,"15":0.00158,"16":0,"17":0,"18":0.00474,"79":0,"80":0,"81":0,"83":0,"84":0.00158,"85":0,"86":0,"87":0,"88":0,"89":0.00158,"90":0,"91":0,"92":0.00158,"93":0,"94":0,"95":0,"96":0,"97":0.00158,"98":0,"99":0.00158,"100":0.00158,"101":0.00316,"102":0.00316,"103":0.04108,"104":0.08532,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00158,"14":0.00474,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.00158,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.00316,"14.1":0.00632,"15.1":0.00158,"15.2-15.3":0.00158,"15.4":0.00316,"15.5":0.0079,"15.6":0.0079,"16.0":0},G:{"8":0.00171,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00086,"6.0-6.1":0,"7.0-7.1":0.00086,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01796,"10.0-10.2":0.0154,"10.3":0.08125,"11.0-11.2":0.0402,"11.3-11.4":0.01967,"12.0-12.1":0.03763,"12.2-12.5":0.8168,"13.0-13.1":0.06158,"13.2":0.01625,"13.3":0.11204,"13.4-13.7":0.22066,"14.0-14.4":1.04003,"14.5-14.8":1.03747,"15.0-15.1":0.71588,"15.2-15.3":0.71417,"15.4":0.61923,"15.5":1.57373,"15.6":1.3334,"16.0":0.07013},P:{"4":0.04024,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.04024,"8.2":0,"9.2":0.02012,"10.1":0,"11.1-11.2":0.02012,"12.0":0.01006,"13.0":0.03018,"14.0":0.03018,"15.0":0.03018,"16.0":0.09054,"17.0":0.28169,"18.0":0.18108},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00223,"4.2-4.3":0.00167,"4.4":0,"4.4.3-4.4.4":0.05189},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00474,"5.5":0},J:{"7":0,"10":0.00842},N:{"10":0,"11":0},L:{"0":45.79114},S:{"2.5":0.00842},R:{_:"0"},M:{"0":0.26944},Q:{"10.4":0.00842},O:{"0":1.08618},H:{"0":33.78327}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NI.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NI.js index 07f2d0ef087..1e608f0dcab 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NI.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NI.js @@ -1 +1 @@ -module.exports={C:{"52":0.03156,"69":0.00395,"72":0.00395,"78":0.00395,"84":0.00395,"85":0.01184,"87":0.00395,"88":0.0434,"89":0.02367,"90":0.01973,"91":0.03156,"92":0.03156,"93":0.00789,"94":0.01973,"95":0.25643,"96":1.72002,"97":2.1303,"98":0.00789,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 70 71 73 74 75 76 77 79 80 81 82 83 86 99 3.5 3.6"},D:{"38":0.01184,"42":0.00789,"49":0.02762,"56":0.00395,"58":0.01184,"63":0.00789,"65":0.00395,"66":0.00789,"69":0.00789,"70":0.01184,"71":0.00395,"72":0.01184,"73":0.00395,"74":0.01973,"75":0.05129,"76":0.02367,"77":0.00395,"78":0.00789,"79":0.10257,"80":0.03156,"81":0.02367,"83":0.01578,"84":0.01184,"85":0.01184,"86":0.01973,"87":0.0434,"88":0.03551,"89":0.20909,"90":0.05129,"91":0.05918,"92":0.04734,"93":0.03156,"94":0.05918,"95":0.06707,"96":0.40239,"97":7.74009,"98":17.98131,"99":0.01578,"100":0.00789,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 43 44 45 46 47 48 50 51 52 53 54 55 57 59 60 61 62 64 67 68 101"},F:{"36":0.00395,"79":0.00789,"82":0.27615,"83":0.89157,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00395,"18":0.02762,"84":0.00789,"85":0.00395,"89":0.01184,"90":0.01578,"92":0.01973,"94":0.00395,"95":0.01578,"96":0.03551,"97":0.48524,"98":1.64507,_:"13 14 15 16 17 79 80 81 83 86 87 88 91 93"},E:{"4":0,"12":0.01184,"13":0.03551,"14":0.05918,"15":0.03945,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 9.1 10.1 11.1 15.4","5.1":0.0434,"12.1":0.01184,"13.1":0.09074,"14.1":0.14597,"15.1":0.08285,"15.2-15.3":0.10652},G:{"8":0,"3.2":0,"4.0-4.1":0.0017,"4.2-4.3":0,"5.0-5.1":0.00284,"6.0-6.1":0,"7.0-7.1":0.02497,"8.1-8.4":0,"9.0-9.2":0.00114,"9.3":0.0874,"10.0-10.2":0.0017,"10.3":0.02327,"11.0-11.2":0.01873,"11.3-11.4":0.00738,"12.0-12.1":0.00624,"12.2-12.5":0.3723,"13.0-13.1":0.00908,"13.2":0.00568,"13.3":0.06243,"13.4-13.7":0.07605,"14.0-14.4":0.34619,"14.5-14.8":0.97841,"15.0-15.1":0.85526,"15.2-15.3":2.76384,"15.4":0.02894},P:{"4":0.27753,"5.0-5.4":0.01015,"6.2-6.4":0.02056,"7.2-7.4":0.32893,"8.2":0.11355,"9.2":0.07195,"10.1":0.02048,"11.1-11.2":0.27753,"12.0":0.06167,"13.0":0.16446,"14.0":0.25698,"15.0":0.2467,"16.0":2.16888},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00202,"4.2-4.3":0.01514,"4.4":0,"4.4.3-4.4.4":0.09183},A:{"11":0.08679,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.12716},Q:{"10.4":0},O:{"0":0.13927},H:{"0":0.33248},L:{"0":49.83656},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00866,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00433,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00433,"90":0,"91":0.00433,"92":0,"93":0,"94":0,"95":0.00433,"96":0.00433,"97":0.00433,"98":0,"99":0.00866,"100":0.01732,"101":0.01299,"102":0.02598,"103":0.67548,"104":0.15155,"105":0.00433,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00433,"39":0,"40":0.00433,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01299,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00433,"66":0,"67":0,"68":0.00433,"69":0.00433,"70":0.00866,"71":0,"72":0.00433,"73":0.00433,"74":0.00433,"75":0.01299,"76":0.01732,"77":0.00433,"78":0,"79":0.04763,"80":0.00866,"81":0.01732,"83":0.01299,"84":0.00866,"85":0.00866,"86":0.00433,"87":0.01732,"88":0.01732,"89":0.00866,"90":0.00866,"91":0.15588,"92":0.03464,"93":0.00866,"94":0.02165,"95":0.00433,"96":0.04763,"97":0.02598,"98":0.02165,"99":0.02598,"100":0.04763,"101":0.04763,"102":0.11258,"103":3.47266,"104":9.23156,"105":0.04763,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00433,"62":0,"63":0.03464,"64":0.01732,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00433,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00433,"89":0.57156,"90":0.03897,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.00433,"17":0,"18":0.01299,"79":0,"80":0,"81":0,"83":0,"84":0.00433,"85":0.00433,"86":0,"87":0.00433,"88":0,"89":0,"90":0,"91":0,"92":0.00866,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00433,"99":0.00433,"100":0.00866,"101":0.01299,"102":0.00866,"103":0.31176,"104":1.00456,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00433,"14":0.02165,"15":0.00433,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00433,"13.1":0.02165,"14.1":0.06062,"15.1":0.00866,"15.2-15.3":0.00433,"15.4":0.01732,"15.5":0.09526,"15.6":0.09959,"16.0":0.00866},G:{"8":0,"3.2":0,"4.0-4.1":0.00173,"4.2-4.3":0,"5.0-5.1":0.00259,"6.0-6.1":0,"7.0-7.1":0.03451,"8.1-8.4":0,"9.0-9.2":0.00086,"9.3":0.05867,"10.0-10.2":0,"10.3":0.02157,"11.0-11.2":0.00776,"11.3-11.4":0.00776,"12.0-12.1":0.00776,"12.2-12.5":0.44088,"13.0-13.1":0.00604,"13.2":0.00345,"13.3":0.03624,"13.4-13.7":0.04141,"14.0-14.4":0.19585,"14.5-14.8":0.47452,"15.0-15.1":0.18895,"15.2-15.3":0.30111,"15.4":0.44346,"15.5":1.67119,"15.6":4.56751,"16.0":0.1113},P:{"4":0.24229,"5.0-5.4":0.02019,"6.2-6.4":0.02019,"7.2-7.4":0.39372,"8.2":0.0101,"9.2":0.05048,"10.1":0,"11.1-11.2":0.17162,"12.0":0.03029,"13.0":0.09086,"14.0":0.16153,"15.0":0.08076,"16.0":0.30286,"17.0":1.16097,"18.0":0.98935},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00965,"4.2-4.3":0.0418,"4.4":0,"4.4.3-4.4.4":0.20578},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02165,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":67.61018},S:{"2.5":0.00567},R:{_:"0"},M:{"0":0.14742},Q:{"10.4":0},O:{"0":0.15876},H:{"0":0.33818}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NL.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NL.js index 2e013cc011c..b13784b0d8a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NL.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NL.js @@ -1 +1 @@ -module.exports={C:{"11":0.01047,"52":0.02617,"55":0.00523,"56":0.0157,"60":0.01047,"66":0.01047,"74":0.01047,"78":0.05756,"80":0.00523,"81":0.0157,"83":0.00523,"84":0.0157,"87":0.00523,"88":0.02093,"89":0.00523,"90":0.00523,"91":0.07326,"92":0.00523,"93":0.00523,"94":0.05233,"95":0.09419,"96":1.18266,"97":1.89958,"98":0.01047,_:"2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 57 58 59 61 62 63 64 65 67 68 69 70 71 72 73 75 76 77 79 82 85 86 99 3.5 3.6"},D:{"15":0.04186,"47":0.05233,"48":0.01047,"49":0.03663,"52":0.0628,"53":0.01047,"63":0.00523,"64":0.08896,"65":0.00523,"66":0.0157,"67":0.01047,"69":0.07326,"70":0.11513,"72":0.10466,"73":0.01047,"74":0.01047,"75":0.01047,"76":0.02093,"77":0.0157,"78":0.0157,"79":0.22502,"80":0.11513,"81":0.02093,"83":0.0471,"84":0.07326,"85":0.0785,"86":0.06803,"87":0.14129,"88":0.0314,"89":0.04186,"90":0.04186,"91":0.0785,"92":0.22502,"93":0.81112,"94":0.20932,"95":0.18839,"96":0.68029,"97":10.11539,"98":18.36783,"99":0.01047,"100":0.01047,_:"4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 50 51 54 55 56 57 58 59 60 61 62 68 71 101"},F:{"67":0.01047,"80":0.00523,"82":0.17269,"83":0.64889,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00523,"18":0.02617,"89":0.00523,"90":0.00523,"91":0.00523,"92":0.0157,"93":0.00523,"94":0.0157,"95":0.0314,"96":0.0785,"97":1.51757,"98":5.10218,_:"12 13 14 15 16 79 80 81 83 84 85 86 87 88"},E:{"4":0,"12":0.00523,"13":0.0628,"14":0.38201,"15":0.24595,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.00523,"10.1":0.00523,"11.1":0.03663,"12.1":0.06803,"13.1":0.41864,"14.1":1.46001,"15.1":0.79018,"15.2-15.3":1.78445,"15.4":0.0157},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.0018,"7.0-7.1":0.00361,"8.1-8.4":0.00541,"9.0-9.2":0.06133,"9.3":0.07575,"10.0-10.2":0,"10.3":0.10642,"11.0-11.2":0.01263,"11.3-11.4":0.03247,"12.0-12.1":0.01263,"12.2-12.5":0.62768,"13.0-13.1":0.02345,"13.2":0.00902,"13.3":0.05772,"13.4-13.7":0.1966,"14.0-14.4":0.70704,"14.5-14.8":3.30795,"15.0-15.1":2.57746,"15.2-15.3":10.16195,"15.4":0.0469},P:{"4":0.11614,_:"5.0-5.4 6.2-6.4 7.2-7.4 8.2 9.2 10.1","11.1-11.2":0.01056,"12.0":0.02112,"13.0":0.07391,"14.0":0.07391,"15.0":0.08447,"16.0":4.44511},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00468,"4.2-4.3":0.00562,"4.4":0,"4.4.3-4.4.4":0.04215},A:{"8":0.02528,"9":0.05898,"10":0.00843,"11":0.40445,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.40528},Q:{"10.4":0.00477},O:{"0":0.43389},H:{"0":0.30244},L:{"0":23.61706},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00465,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00929,"53":0,"54":0,"55":0.00465,"56":0.00929,"57":0,"58":0,"59":0,"60":0.00465,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00465,"67":0,"68":0.00465,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.02323,"79":0.00465,"80":0.00465,"81":0.00929,"82":0,"83":0.00465,"84":0.00929,"85":0,"86":0,"87":0,"88":0.00929,"89":0.00465,"90":0,"91":0.04646,"92":0,"93":0,"94":0.01394,"95":0.00465,"96":0.00465,"97":0.00465,"98":0.00465,"99":0.00929,"100":0.00929,"101":0.01858,"102":0.06504,"103":1.31482,"104":0.26018,"105":0.00465,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0.00465,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.03252,"48":0.00465,"49":0.01394,"50":0,"51":0,"52":0.00929,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00465,"61":0,"62":0,"63":0,"64":0,"65":0.00465,"66":0.00929,"67":0.00929,"68":0,"69":0.00929,"70":0.02323,"71":0,"72":0.02788,"73":0.00465,"74":0.00465,"75":0.00465,"76":0.05111,"77":0.00929,"78":0.00465,"79":0.05575,"80":0.02323,"81":0.00929,"83":0.01394,"84":0.02788,"85":0.05111,"86":0.04646,"87":0.04646,"88":0.00929,"89":0.01394,"90":0.00929,"91":0.00929,"92":0.02323,"93":0.01858,"94":0.00929,"95":0.00465,"96":0.04181,"97":0.05111,"98":0.07434,"99":0.02788,"100":0.12544,"101":0.13938,"102":0.18119,"103":2.97344,"104":7.68448,"105":0.02788,"106":0.00465,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01394,"64":0.01394,"65":0,"66":0,"67":0,"68":0.00929,"69":0,"70":0.00465,"71":0.00465,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.01858,"86":0,"87":0,"88":0.00929,"89":0.35774,"90":0.02323,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00465,"18":0.00465,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00465,"86":0.00465,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00465,"93":0,"94":0,"95":0.00465,"96":0.00465,"97":0.00929,"98":0.00465,"99":0.00465,"100":0.00465,"101":0.02323,"102":0.04181,"103":0.77124,"104":2.36017,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01394,"14":0.08363,"15":0.02323,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00465,"10.1":0.00465,"11.1":0.00929,"12.1":0.03252,"13.1":0.13938,"14.1":0.21836,"15.1":0.05111,"15.2-15.3":0.03717,"15.4":0.13009,"15.5":0.60398,"15.6":1.34734,"16.0":0.00929},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00578,"8.1-8.4":0.01155,"9.0-9.2":0.05488,"9.3":0.10975,"10.0-10.2":0,"10.3":0.14152,"11.0-11.2":0.04332,"11.3-11.4":0.04621,"12.0-12.1":0.04044,"12.2-12.5":1.01666,"13.0-13.1":0.01444,"13.2":0.01444,"13.3":0.04332,"13.4-13.7":0.15308,"14.0-14.4":0.491,"14.5-14.8":1.45278,"15.0-15.1":0.37836,"15.2-15.3":0.66141,"15.4":0.91846,"15.5":6.63428,"15.6":16.40807,"16.0":0.21373},P:{"4":0.12534,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01045,"8.2":0,"9.2":0.01045,"10.1":0,"11.1-11.2":0.01045,"12.0":0.01045,"13.0":0.05223,"14.0":0.03134,"15.0":0.03134,"16.0":0.08356,"17.0":1.83838,"18.0":3.33207},I:{"0":0,"3":0,"4":0.05115,"2.1":0,"2.2":0.01967,"2.3":0,"4.1":0.0118,"4.2-4.3":0.03541,"4.4":0,"4.4.3-4.4.4":0.13771},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.01289,"9":0.04511,"10":0.00644,"11":0.13533,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":39.5215},S:{"2.5":0},R:{_:"0"},M:{"0":0.57288},Q:{"10.4":0.02677},O:{"0":0.38013},H:{"0":0.41564}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NO.js index f9b07324e39..a44e1908194 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NO.js @@ -1 +1 @@ -module.exports={C:{"52":0.01269,"59":0.01903,"78":0.0444,"88":0.00634,"91":0.06977,"94":0.00634,"95":0.03172,"96":3.05098,"97":2.96218,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 89 90 92 93 98 99 3.5 3.6"},D:{"38":0.00634,"49":0.03172,"64":0.02537,"65":0.00634,"66":0.08246,"67":0.01269,"69":0.12686,"70":0.02537,"72":0.02537,"75":0.02537,"76":0.19029,"77":0.00634,"78":0.01269,"79":0.08246,"80":0.05709,"81":0.01269,"83":0.01269,"84":0.03172,"85":2.76555,"86":0.03172,"87":0.12686,"88":0.03172,"89":0.03172,"90":0.07612,"91":0.08246,"92":0.06343,"93":0.08246,"94":0.13955,"95":0.90705,"96":1.00854,"97":11.97558,"98":20.08828,"99":0.00634,"100":0.01903,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 68 71 73 74 101"},F:{"82":0.37424,"83":0.93876,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.01269,"18":0.01269,"84":0.01903,"85":0.05074,"86":0.00634,"87":0.00634,"89":0.01269,"91":0.00634,"92":0.01269,"94":0.01903,"95":0.02537,"96":0.06343,"97":1.60478,"98":5.02366,_:"12 13 14 15 16 79 80 81 83 88 90 93"},E:{"4":0,"12":0.00634,"13":0.12052,"14":0.50744,"15":0.35521,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.00634,"10.1":0.00634,"11.1":0.03172,"12.1":0.07612,"13.1":0.41864,"14.1":2.51183,"15.1":1.39546,"15.2-15.3":2.13125,"15.4":0.00634},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00215,"9.0-9.2":0.00215,"9.3":0.04522,"10.0-10.2":0.00215,"10.3":0.09043,"11.0-11.2":0.01723,"11.3-11.4":0.05383,"12.0-12.1":0.01507,"12.2-12.5":0.4134,"13.0-13.1":0.02584,"13.2":0.00646,"13.3":0.05813,"13.4-13.7":0.14211,"14.0-14.4":0.74498,"14.5-14.8":4.31273,"15.0-15.1":3.32229,"15.2-15.3":12.21259,"15.4":0.04737},P:{"4":0.0423,"5.0-5.4":0.01015,"6.2-6.4":0.04189,"7.2-7.4":0.15152,"8.2":0.11355,"9.2":0.0112,"10.1":0.02048,"11.1-11.2":0.02115,"12.0":0.0112,"13.0":0.02115,"14.0":0.03172,"15.0":0.03172,"16.0":2.38991},I:{"0":0,"3":0,"4":0.0026,"2.1":0,"2.2":0.00195,"2.3":0.00195,"4.1":0.0026,"4.2-4.3":0.0065,"4.4":0,"4.4.3-4.4.4":0.01365},A:{"8":0.04229,"9":0.00705,"10":0.0141,"11":0.25372,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.20479},Q:{"10.4":0},O:{"0":0.01829},H:{"0":0.14541},L:{"0":12.12816},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0.03505,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0.01402,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00701,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.01402,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00701,"78":0.02804,"79":0.01402,"80":0.00701,"81":0.00701,"82":0.00701,"83":0.00701,"84":0,"85":0,"86":0,"87":0,"88":0.00701,"89":0,"90":0,"91":0.03505,"92":0,"93":0,"94":0,"95":0.46967,"96":0.02103,"97":0,"98":0,"99":0,"100":0.00701,"101":0.03505,"102":0.09113,"103":15.12057,"104":0.19628,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00701,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01402,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00701,"65":0,"66":0.07711,"67":0.00701,"68":0,"69":0.07711,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.00701,"77":0,"78":0.01402,"79":0.02804,"80":0.00701,"81":0.00701,"83":0.04907,"84":0.0701,"85":2.83905,"86":0.09113,"87":0.09814,"88":0.00701,"89":0.02103,"90":0.00701,"91":0.85522,"92":0.00701,"93":0.00701,"94":0.00701,"95":0.00701,"96":0.03505,"97":0.02804,"98":0.03505,"99":0.03505,"100":0.04907,"101":0.13319,"102":0.35751,"103":5.57996,"104":14.54575,"105":0.02103,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00701,"64":0.00701,"65":0,"66":0,"67":0,"68":0.00701,"69":0.00701,"70":0.00701,"71":0.00701,"72":0.00701,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00701,"87":0,"88":0.04907,"89":0.61688,"90":0.04206,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00701,"16":0,"17":0.00701,"18":0.00701,"79":0,"80":0,"81":0,"83":0.00701,"84":0.00701,"85":0.00701,"86":0.00701,"87":0.00701,"88":0,"89":0,"90":0,"91":0,"92":0.00701,"93":0,"94":0,"95":0,"96":0,"97":0.00701,"98":0.00701,"99":0.00701,"100":0.00701,"101":0.02103,"102":0.02103,"103":0.77811,"104":2.13104,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01402,"14":0.09814,"15":0.02804,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00701,"10.1":0,"11.1":0.02103,"12.1":0.02804,"13.1":0.13319,"14.1":0.34349,"15.1":0.05608,"15.2-15.3":0.05608,"15.4":0.22432,"15.5":0.72904,"15.6":1.1917,"16.0":0.00701},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00563,"9.0-9.2":0,"9.3":0.07879,"10.0-10.2":0.01688,"10.3":0.13787,"11.0-11.2":0.02251,"11.3-11.4":0.1013,"12.0-12.1":0.07034,"12.2-12.5":0.50366,"13.0-13.1":0.01126,"13.2":0.00563,"13.3":0.02814,"13.4-13.7":0.12943,"14.0-14.4":0.44457,"14.5-14.8":1.36749,"15.0-15.1":0.36298,"15.2-15.3":0.68656,"15.4":1.08893,"15.5":7.12445,"15.6":15.8021,"16.0":0.12381},P:{"4":0.06158,"5.0-5.4":0.01026,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01026,"12.0":0.01026,"13.0":0.01026,"14.0":0.01026,"15.0":0.01026,"16.0":0.02053,"17.0":0.8518,"18.0":1.35467},I:{"0":0,"3":0,"4":0.02245,"2.1":0,"2.2":0.03282,"2.3":0.00691,"4.1":0.00518,"4.2-4.3":0.01554,"4.4":0,"4.4.3-4.4.4":0.057},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00701,"9":0,"10":0,"11":0.10515,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":18.41805},S:{"2.5":0},R:{_:"0"},M:{"0":0.31694},Q:{"10.4":0},O:{"0":0.01495},H:{"0":0.16701}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NP.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NP.js index 5dffd891a4c..7cd2ba52685 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NP.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NP.js @@ -1 +1 @@ -module.exports={C:{"28":0.00216,"47":0.00216,"48":0.00216,"52":0.00864,"66":0.00432,"71":0.0389,"72":0.01297,"73":0.01081,"74":0.01081,"75":0.01945,"76":0.05619,"78":0.04106,"87":0.50135,"88":0.00432,"89":0.00648,"90":0.00216,"91":0.01513,"92":0.00216,"94":0.00432,"95":0.03025,"96":0.35224,"97":0.65911,"98":0.04754,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 67 68 69 70 77 79 80 81 82 83 84 85 86 93 99 3.5 3.6"},D:{"38":0.00432,"49":0.00648,"53":0.00216,"63":0.00648,"64":0.00432,"65":0.00864,"67":0.00432,"68":0.00216,"69":0.00432,"70":0.00432,"71":0.00216,"72":0.00216,"73":0.00216,"74":0.00432,"75":0.00432,"76":0.01729,"78":0.00432,"79":0.02161,"80":0.00648,"81":0.00648,"83":0.01297,"84":0.03242,"85":0.00648,"86":0.01513,"87":0.02593,"88":0.02161,"89":0.97461,"90":0.01297,"91":0.01729,"92":0.02377,"93":0.02377,"94":0.01513,"95":0.04106,"96":0.22474,"97":4.20963,"98":10.50678,"99":0.05835,"100":0.01945,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 56 57 58 59 60 61 62 66 77 101"},F:{"63":0.01081,"75":0.03242,"82":0.05619,"83":0.38682,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 64 65 66 67 68 69 70 71 72 73 74 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00216,"16":0.00216,"17":0.00216,"18":0.00864,"81":0.01513,"89":0.31983,"92":0.00432,"93":0.00432,"95":0.00432,"96":0.01513,"97":0.255,"98":0.83631,_:"13 14 15 79 80 83 84 85 86 87 88 90 91 94"},E:{"4":0,"8":0.00432,"9":0.00216,"13":0.00432,"14":0.05403,"15":0.01513,_:"0 5 6 7 10 11 12 3.1 3.2 5.1 6.1 7.1 15.4","9.1":0.00432,"10.1":0.00216,"11.1":0.00432,"12.1":0.00864,"13.1":0.02161,"14.1":0.09508,"15.1":0.04106,"15.2-15.3":0.0886},G:{"8":0.0023,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00092,"6.0-6.1":0.00046,"7.0-7.1":0.00965,"8.1-8.4":0.00184,"9.0-9.2":0.00322,"9.3":0.02574,"10.0-10.2":0.0023,"10.3":0.04045,"11.0-11.2":0.27395,"11.3-11.4":0.01241,"12.0-12.1":0.02298,"12.2-12.5":0.42149,"13.0-13.1":0.05378,"13.2":0.0046,"13.3":0.0239,"13.4-13.7":0.0717,"14.0-14.4":0.62511,"14.5-14.8":0.75243,"15.0-15.1":0.48814,"15.2-15.3":1.74618,"15.4":0.01011},P:{"4":0.14128,"5.0-5.4":0.01015,"6.2-6.4":0.02048,"7.2-7.4":0.05434,"8.2":0.11355,"9.2":0.08258,"10.1":0.02048,"11.1-11.2":0.02174,"12.0":0.02174,"13.0":0.05434,"14.0":0.04347,"15.0":0.04347,"16.0":0.57599},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0016,"4.2-4.3":0.00561,"4.4":0,"4.4.3-4.4.4":0.06334},A:{"6":0.00216,"11":0.01081,_:"7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.65848},Q:{"10.4":0},O:{"0":1.07394},H:{"0":0.86831},L:{"0":69.56896},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00205,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00411,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.02876,"88":0,"89":0,"90":0,"91":0.00205,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00411,"100":0.00205,"101":0,"102":0.00411,"103":0.17048,"104":0.04313,"105":0.00205,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00205,"66":0,"67":0,"68":0,"69":0,"70":0.00205,"71":0,"72":0,"73":0,"74":0.00205,"75":0.00205,"76":0,"77":0,"78":0,"79":0.00411,"80":0,"81":0.00411,"83":0.00205,"84":0.00205,"85":0,"86":0.00411,"87":0.00411,"88":0.00411,"89":0.0267,"90":0,"91":0.00205,"92":0.00205,"93":0.00205,"94":0.00205,"95":0.00205,"96":0.00411,"97":0.00411,"98":0.00411,"99":0.00205,"100":0.00616,"101":0.00822,"102":0.02054,"103":0.82776,"104":2.38059,"105":0.01232,"106":0.00205,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.03081,"64":0.03286,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00205,"74":0,"75":0.00411,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00411,"86":0,"87":0,"88":0,"89":0.06984,"90":0.01027,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00205},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00205,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.01027,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0.05546,"104":0.16637,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00616,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00205,"13.1":0.00411,"14.1":0.00822,"15.1":0.00205,"15.2-15.3":0.00205,"15.4":0.00411,"15.5":0.01643,"15.6":0.0267,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00552,"8.1-8.4":0,"9.0-9.2":0.00061,"9.3":0.0233,"10.0-10.2":0.00123,"10.3":0.03679,"11.0-11.2":0.00736,"11.3-11.4":0.01042,"12.0-12.1":0.01226,"12.2-12.5":0.49539,"13.0-13.1":0.00552,"13.2":0.00429,"13.3":0.02391,"13.4-13.7":0.05763,"14.0-14.4":0.14286,"14.5-14.8":0.4255,"15.0-15.1":0.06683,"15.2-15.3":0.14408,"15.4":0.2103,"15.5":1.4402,"15.6":2.98279,"16.0":0.03311},P:{"4":0.11386,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.05175,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01035,"12.0":0.01035,"13.0":0.0207,"14.0":0.0207,"15.0":0.0207,"16.0":0.0414,"17.0":0.25877,"18.0":0.23807},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00347,"4.2-4.3":0.00695,"4.4":0,"4.4.3-4.4.4":0.0886},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00205,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":87.26589},S:{"2.5":0},R:{_:"0"},M:{"0":0.03973},Q:{"10.4":0},O:{"0":0.64363},H:{"0":0.50402}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NR.js index f8c464a69db..3be6b68d19d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NR.js @@ -1 +1 @@ -module.exports={C:{"96":0.2029,"97":0.03689,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 98 99 3.5 3.6"},D:{"11":0.02372,"75":0.03689,"79":0.01318,"86":0.01318,"89":0.01318,"96":0.888,"97":2.9512,"98":9.57559,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 76 77 78 80 81 83 84 85 87 88 90 91 92 93 94 95 99 100 101"},F:{"83":0.06061,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.02372,"84":0.03689,"94":0.02372,"96":0.03689,"97":0.25296,"98":1.09089,_:"12 13 15 16 17 18 79 80 81 83 85 86 87 88 89 90 91 92 93 95"},E:{"4":0,"11":0.08432,"13":0.03689,"14":6.93532,_:"0 5 6 7 8 9 10 12 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 12.1 13.1 15.1 15.2-15.3 15.4","11.1":0.06061,"14.1":1.14096},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0.01067,"12.0-12.1":0,"12.2-12.5":0.01067,"13.0-13.1":0.03155,"13.2":0.02088,"13.3":0,"13.4-13.7":0.36702,"14.0-14.4":0.18931,"14.5-14.8":1.91073,"15.0-15.1":1.12287,"15.2-15.3":0.97625,"15.4":0},P:{"4":0.02031,"5.0-5.4":0.01015,"6.2-6.4":0.02048,"7.2-7.4":0.02031,"8.2":0.11355,"9.2":0.08258,"10.1":0.02048,"11.1-11.2":0.21618,"12.0":0.02059,"13.0":0.11169,"14.0":0.12184,"15.0":0.01015,"16.0":0.75137},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.16864,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.01473},Q:{"10.4":0},O:{"0":0.86171},H:{"0":6.83325},L:{"0":62.07733},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00217,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00217,"102":0,"103":0.00651,"104":0,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00217,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0.00217,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00217,"93":0,"94":0.0152,"95":0,"96":0.00868,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.00651,"103":0.66216,"104":1.64996,"105":0.00651,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.35387,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01954,"64":0.00217,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00217,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00217},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0.00217,"81":0,"83":0,"84":0,"85":0,"86":0.00651,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00651,"101":0.01737,"102":0.00217,"103":0.14329,"104":0.37775,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01954,"14":0.28874,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.03474,"14.1":0.06513,"15.1":0,"15.2-15.3":0,"15.4":0.00651,"15.5":0.01086,"15.6":0.00868,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0.0301,"12.0-12.1":0.01505,"12.2-12.5":0.07464,"13.0-13.1":0,"13.2":0.01505,"13.3":0.07464,"13.4-13.7":0.0301,"14.0-14.4":1.40125,"14.5-14.8":1.72809,"15.0-15.1":0.99857,"15.2-15.3":0.0301,"15.4":0.2829,"15.5":0.74517,"15.6":0.59589,"16.0":0},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.88194,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.07015,"12.0":0.1804,"13.0":0.30066,"14.0":0.11024,"15.0":0.07015,"16.0":0.17038,"17.0":0.57126,"18.0":0.97214},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.05822},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00651,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":80.84151},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":2.65403},H:{"0":1.853}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NU.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NU.js index 55b5be90242..3ee7160a59a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NU.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NU.js @@ -1 +1 @@ -module.exports={C:{_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 3.5 3.6"},D:{"81":4.4448,"98":31.1136,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 99 100 101"},F:{"83":2.2224,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"98":2.2224,_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97"},E:{"4":0,"14":4.4448,_:"0 5 6 7 8 9 10 11 12 13 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 13.1 14.1 15.1 15.2-15.3 15.4"},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":6.66511,"13.0-13.1":0,"13.2":2.22222,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":2.22222,"15.0-15.1":0,"15.2-15.3":2.22222,"15.4":2.22222},P:{"4":0.29325,"5.0-5.4":0.01015,"6.2-6.4":0.04189,"7.2-7.4":0.03361,"8.2":0.11355,"9.2":0.0112,"10.1":0.02048,"11.1-11.2":0.03361,"12.0":0.0112,"13.0":0.05602,"14.0":0.10083,"15.0":0.08963,"16.0":0.45933},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":6.6672,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0},L:{"0":28.886},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.08408,"103":0.25416,"104":0,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0.93448,"104":2.20912,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0.08408,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0,"15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0,"15.6":0,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":0,"15.0-15.1":0,"15.2-15.3":0,"15.4":0.52643,"15.5":52.94215,"15.6":6.35306,"16.0":0},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0.88979,"15.0":0,"16.0":0,"17.0":0,"18.0":0},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":35.55065},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NZ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NZ.js index 585806a3169..ac3180c97c4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NZ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/NZ.js @@ -1 +1 @@ -module.exports={C:{"11":0.01228,"34":0.01228,"52":0.02456,"54":0.00614,"59":0.02456,"78":0.08597,"88":0.01228,"89":0.01228,"90":0.00614,"91":0.07369,"92":0.00614,"93":0.01842,"94":0.16581,"95":0.03685,"96":1.02555,"97":1.6028,_:"2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 55 56 57 58 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 98 99 3.5 3.6"},D:{"34":0.03071,"38":0.15353,"49":0.07369,"53":0.04299,"59":0.01842,"61":0.03071,"65":0.01842,"66":0.05527,"67":0.01228,"68":0.01228,"69":0.00614,"70":0.01842,"71":0.00614,"72":0.01842,"73":0.01228,"74":0.01842,"75":0.01228,"76":0.03685,"77":0.01842,"78":0.01228,"79":0.39917,"80":0.01842,"81":0.01842,"83":0.01842,"84":0.02456,"85":0.01228,"86":0.01842,"87":0.15353,"88":0.01842,"89":0.04913,"90":0.17809,"91":0.08597,"92":0.15353,"93":0.62024,"94":0.27635,"95":0.23336,"96":1.19135,"97":11.95039,"98":26.92829,"99":0.04299,"100":0.01842,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 56 57 58 60 62 63 64 101"},F:{"28":0.00614,"36":0.00614,"40":0.00614,"46":0.09212,"82":0.11668,"83":0.39917,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00614,"18":0.01842,"84":0.00614,"85":0.00614,"90":0.01228,"92":0.00614,"95":0.07369,"96":0.04913,"97":1.23434,"98":4.43994,_:"12 13 14 15 16 79 80 81 83 86 87 88 89 91 93 94"},E:{"4":0,"12":0.01228,"13":0.07369,"14":0.41759,"15":0.3439,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.02456,"11.1":0.05527,"12.1":0.12282,"13.1":0.55883,"14.1":1.78703,"15.1":0.97028,"15.2-15.3":1.78703,"15.4":0.01228},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00313,"6.0-6.1":0.01254,"7.0-7.1":0.00627,"8.1-8.4":0.02351,"9.0-9.2":0.01724,"9.3":0.17551,"10.0-10.2":0.00784,"10.3":0.20215,"11.0-11.2":0.10343,"11.3-11.4":0.08149,"12.0-12.1":0.03134,"12.2-12.5":0.84622,"13.0-13.1":0.01567,"13.2":0.0047,"13.3":0.06895,"13.4-13.7":0.19902,"14.0-14.4":0.46699,"14.5-14.8":2.80818,"15.0-15.1":2.08107,"15.2-15.3":8.46843,"15.4":0.04388},P:{"4":0.72232,"5.0-5.4":0.01015,"6.2-6.4":0.02048,"7.2-7.4":0.99755,"8.2":0.11355,"9.2":0.02078,"10.1":0.02048,"11.1-11.2":0.03283,"12.0":0.01094,"13.0":0.10944,"14.0":0.08755,"15.0":0.07661,"16.0":2.36394},I:{"0":0,"3":0,"4":0.00265,"2.1":0,"2.2":0.00132,"2.3":0.00132,"4.1":0.00132,"4.2-4.3":0.00728,"4.4":0,"4.4.3-4.4.4":0.03242},A:{"11":0.38074,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.41291},Q:{"10.4":0},O:{"0":0.08104},H:{"0":0.17171},L:{"0":18.97166},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00582,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00582,"51":0,"52":0.01746,"53":0,"54":0.00582,"55":0,"56":0,"57":0,"58":0,"59":0.01746,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00582,"66":0,"67":0,"68":0.00582,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.05239,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00582,"85":0,"86":0,"87":0,"88":0.00582,"89":0.00582,"90":0,"91":0.04657,"92":0,"93":0.00582,"94":0.05821,"95":0,"96":0.00582,"97":0,"98":0.00582,"99":0.01746,"100":0.00582,"101":0.02328,"102":0.08732,"103":1.45525,"104":0.26195,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.01164,"35":0,"36":0,"37":0,"38":0.06403,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02328,"50":0,"51":0,"52":0,"53":0.01164,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00582,"60":0,"61":0.00582,"62":0,"63":0,"64":0,"65":0.01164,"66":0.05239,"67":0.00582,"68":0.00582,"69":0.00582,"70":0.00582,"71":0.00582,"72":0.00582,"73":0.00582,"74":0.00582,"75":0.00582,"76":0.03493,"77":0.01164,"78":0.00582,"79":0.09314,"80":0.01164,"81":0.01164,"83":0.01164,"84":0.00582,"85":0.01164,"86":0.00582,"87":0.05821,"88":0.00582,"89":0.01164,"90":0.04075,"91":0.01164,"92":0.05821,"93":0.09314,"94":0.01746,"95":0.01746,"96":0.04075,"97":0.05239,"98":0.05239,"99":0.09314,"100":0.08149,"101":0.1106,"102":0.20956,"103":5.80354,"104":12.96919,"105":0.04075,"106":0.00582,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.01164,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.02911,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01164,"89":0.41329,"90":0.03493,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00582,"15":0.00582,"16":0,"17":0.00582,"18":0.00582,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00582,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00582,"93":0,"94":0,"95":0.00582,"96":0.00582,"97":0,"98":0,"99":0.00582,"100":0.00582,"101":0.05239,"102":0.01164,"103":0.93136,"104":2.84065,"105":0},E:{"4":0,"5":0,"6":0.00582,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00582,"13":0.03493,"14":0.14553,"15":0.05239,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00582,"10.1":0.01164,"11.1":0.03493,"12.1":0.04657,"13.1":0.27941,"14.1":0.50061,"15.1":0.10478,"15.2-15.3":0.07567,"15.4":0.26195,"15.5":1.08271,"15.6":2.2178,"16.0":0.01164},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00595,"6.0-6.1":0.01786,"7.0-7.1":0.01191,"8.1-8.4":0.04168,"9.0-9.2":0.03572,"9.3":0.24411,"10.0-10.2":0.00893,"10.3":0.27983,"11.0-11.2":0.05359,"11.3-11.4":0.15183,"12.0-12.1":0.03275,"12.2-12.5":1.32773,"13.0-13.1":0.01488,"13.2":0.00298,"13.3":0.08633,"13.4-13.7":0.21434,"14.0-14.4":0.44059,"14.5-14.8":1.49444,"15.0-15.1":0.34533,"15.2-15.3":0.60135,"15.4":0.84248,"15.5":5.70386,"15.6":17.63552,"16.0":0.16671},P:{"4":0.28452,"5.0-5.4":0.01054,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0.01054,"11.1-11.2":0.03161,"12.0":0,"13.0":0.07376,"14.0":0.06323,"15.0":0.02108,"16.0":0.09484,"17.0":1.05378,"18.0":1.77035},I:{"0":0,"3":0,"4":0.0072,"2.1":0,"2.2":0.0048,"2.3":0.0048,"4.1":0.0072,"4.2-4.3":0.02159,"4.4":0,"4.4.3-4.4.4":0.09354},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.01128,"9":0,"10":0,"11":0.16917,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":31.33372},S:{"2.5":0},R:{_:"0"},M:{"0":0.46805},Q:{"10.4":0.01254},O:{"0":0.0794},H:{"0":0.1543}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/OM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/OM.js index 4f5b65a7b6b..a08c2a75a6f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/OM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/OM.js @@ -1 +1 @@ -module.exports={C:{"34":0.00326,"52":0.00326,"78":0.00979,"86":0.00653,"91":0.00653,"95":0.00653,"96":0.20883,"97":0.29367,"98":0.00653,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 87 88 89 90 92 93 94 99 3.5 3.6"},D:{"11":0.00653,"30":0.01305,"38":0.02284,"49":0.02937,"53":0.00326,"59":0.00653,"62":0.00653,"63":0.00326,"64":0.00326,"65":0.0261,"67":0.00326,"68":0.00326,"69":0.00653,"70":0.00979,"71":0.00653,"73":0.00326,"74":0.00979,"75":0.01632,"76":0.00653,"77":0.00326,"78":0.00326,"79":0.06526,"80":0.00653,"81":0.00979,"83":0.00979,"84":0.00326,"85":0.02937,"86":0.03589,"87":0.05221,"88":0.01632,"89":0.03263,"90":0.01632,"91":0.04568,"92":0.14357,"93":0.46987,"94":0.05547,"95":0.05547,"96":0.31977,"97":5.89624,"98":15.186,"99":0.05221,"100":0.01632,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 56 57 58 60 61 66 72 101"},F:{"28":0.00979,"46":0.00979,"82":0.15336,"83":0.36546,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00326,"15":0.00326,"16":0.00653,"17":0.00326,"18":0.01958,"84":0.00653,"89":0.00326,"91":0.00326,"92":0.01305,"93":0.00326,"94":0.01305,"95":0.01958,"96":0.03589,"97":0.47966,"98":2.26452,_:"13 14 79 80 81 83 85 86 87 88 90"},E:{"4":0,"13":0.02937,"14":0.13378,"15":0.11094,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.00979,"12.1":0.01305,"13.1":0.0881,"14.1":0.38177,"15.1":0.2382,"15.2-15.3":0.37525,"15.4":0.00653},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00321,"6.0-6.1":0,"7.0-7.1":0.03532,"8.1-8.4":0.00803,"9.0-9.2":0.00161,"9.3":0.04334,"10.0-10.2":0.00321,"10.3":0.0305,"11.0-11.2":0.03692,"11.3-11.4":0.01124,"12.0-12.1":0.01605,"12.2-12.5":0.51368,"13.0-13.1":0.03692,"13.2":0.02087,"13.3":0.08508,"13.4-13.7":0.20708,"14.0-14.4":0.78657,"14.5-14.8":2.87177,"15.0-15.1":2.79953,"15.2-15.3":8.43069,"15.4":0.10595},P:{"4":0.18523,"5.0-5.4":0.01015,"6.2-6.4":0.01029,"7.2-7.4":0.17494,"8.2":0.11355,"9.2":0.03087,"10.1":0.02048,"11.1-11.2":0.16465,"12.0":0.05145,"13.0":0.19552,"14.0":0.22639,"15.0":0.20581,"16.0":2.50061},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00049,"4.2-4.3":0.00391,"4.4":0,"4.4.3-4.4.4":0.02929},A:{"11":2.92039,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.06737},Q:{"10.4":0},O:{"0":0.88928},H:{"0":0.4975},L:{"0":39.42475},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.0067,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00335,"87":0,"88":0,"89":0,"90":0,"91":0.00335,"92":0,"93":0,"94":0,"95":0.00335,"96":0,"97":0,"98":0,"99":0,"100":0.00335,"101":0.00335,"102":0.01004,"103":0.17744,"104":0.03683,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.00335,"27":0,"28":0,"29":0,"30":0.00335,"31":0,"32":0,"33":0,"34":0.00335,"35":0,"36":0,"37":0,"38":0.0067,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00335,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00335,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0.01004,"63":0,"64":0.00335,"65":0,"66":0,"67":0,"68":0,"69":0.0067,"70":0.00335,"71":0,"72":0.0067,"73":0.00335,"74":0.00335,"75":0.0067,"76":0.00335,"77":0.00335,"78":0.00335,"79":0.03683,"80":0.01339,"81":0.01339,"83":0.0067,"84":0.01339,"85":0.01339,"86":0.01004,"87":0.0067,"88":0.01339,"89":0.01674,"90":0.00335,"91":0.01339,"92":0.05692,"93":0.02009,"94":0.0067,"95":0.01339,"96":0.01004,"97":0.01339,"98":0.01004,"99":0.01004,"100":0.01339,"101":0.02344,"102":0.07031,"103":1.80792,"104":5.25971,"105":0.04018,"106":0.00335,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.0067,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00335,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00335,"60":0,"62":0,"63":0.13727,"64":0.14396,"65":0,"66":0,"67":0,"68":0,"69":0.00335,"70":0,"71":0.00335,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00335,"86":0,"87":0,"88":0.00335,"89":0.14731,"90":0.01674,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00335,"16":0.00335,"17":0,"18":0.0067,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00335,"93":0,"94":0.0067,"95":0,"96":0.00335,"97":0,"98":0.00335,"99":0.00335,"100":0.00335,"101":0.01339,"102":0.01004,"103":0.2578,"104":0.76334,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.0067,"14":0.02009,"15":0.01004,_:"0","3.1":0,"3.2":0,"5.1":0.00335,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00335,"13.1":0.02344,"14.1":0.06361,"15.1":0.01339,"15.2-15.3":0.01339,"15.4":0.04352,"15.5":0.17075,"15.6":0.18414,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00759,"6.0-6.1":0,"7.0-7.1":0.06581,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.05569,"10.0-10.2":0,"10.3":0.05316,"11.0-11.2":0.00759,"11.3-11.4":0.00506,"12.0-12.1":0.01772,"12.2-12.5":0.55941,"13.0-13.1":0.03038,"13.2":0.01013,"13.3":0.05316,"13.4-13.7":0.17466,"14.0-14.4":0.62269,"14.5-14.8":1.34663,"15.0-15.1":0.38728,"15.2-15.3":0.68344,"15.4":1.48332,"15.5":6.48255,"15.6":13.06634,"16.0":0.18984},P:{"4":0.24625,"5.0-5.4":0,"6.2-6.4":0.01026,"7.2-7.4":0.18469,"8.2":0,"9.2":0.04104,"10.1":0,"11.1-11.2":0.09234,"12.0":0.02052,"13.0":0.12313,"14.0":0.12313,"15.0":0.1026,"16.0":0.16417,"17.0":1.14917,"18.0":1.48777},I:{"0":0,"3":0,"4":0.00613,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00613,"4.2-4.3":0.0674,"4.4":0,"4.4.3-4.4.4":0.26043},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.78343,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":55.92585},S:{"2.5":0},R:{_:"0"},M:{"0":0.07982},Q:{"10.4":0},O:{"0":0.8315},H:{"0":1.13358}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PA.js index 5ba7e2d5bd8..ab49a2bdc70 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PA.js @@ -1 +1 @@ -module.exports={C:{"51":0.00755,"52":0.00755,"56":0.00377,"73":0.03773,"78":0.01887,"83":0.00377,"84":0.00377,"88":0.01132,"89":0.01132,"90":0.03396,"91":0.02641,"93":0.00755,"94":0.01132,"95":0.01132,"96":0.50558,"97":0.78101,"98":0.00755,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 79 80 81 82 85 86 87 92 99 3.5 3.6"},D:{"34":0.01132,"38":0.01509,"47":0.01132,"49":0.02641,"53":0.01132,"56":0.00377,"58":0.00377,"61":0.00377,"62":0.01509,"63":0.00377,"65":0.01132,"67":0.00755,"68":0.00755,"69":0.01132,"70":0.01132,"72":0.01887,"73":0.02264,"75":0.04528,"76":0.01887,"77":0.00755,"78":0.00755,"79":0.19242,"80":0.01887,"81":0.01509,"83":0.01509,"84":0.01509,"85":0.00755,"86":0.02264,"87":0.14337,"88":0.01132,"89":0.03018,"90":0.04905,"91":0.23015,"92":0.08678,"93":0.22638,"94":0.02641,"95":0.07546,"96":0.49804,"97":7.59128,"98":16.55215,"99":0.00755,"100":0.01132,"101":0.01132,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 54 55 57 59 60 64 66 71 74"},F:{"28":0.00755,"46":0.00377,"79":0.01132,"82":0.4754,"83":1.61107,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00377,"14":0.00377,"16":0.00755,"17":0.01132,"18":0.02641,"84":0.00755,"89":0.00377,"90":0.00755,"92":0.01132,"93":0.00377,"94":0.00755,"95":0.00755,"96":0.03773,"97":0.69046,"98":2.46377,_:"13 15 79 80 81 83 85 86 87 88 91"},E:{"4":0,"8":0.00755,"12":0.00755,"13":0.00755,"14":0.13583,"15":0.07923,_:"0 5 6 7 9 10 11 3.1 3.2 6.1 7.1 9.1 10.1","5.1":0.01887,"11.1":0.01509,"12.1":0.02641,"13.1":0.26034,"14.1":0.615,"15.1":0.24147,"15.2-15.3":0.57727,"15.4":0.00377},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00166,"6.0-6.1":0.00581,"7.0-7.1":0.03819,"8.1-8.4":0.00664,"9.0-9.2":0.01494,"9.3":0.09132,"10.0-10.2":0,"10.3":0.02657,"11.0-11.2":0.01245,"11.3-11.4":0.0083,"12.0-12.1":0.01411,"12.2-12.5":0.33041,"13.0-13.1":0.01826,"13.2":0.00166,"13.3":0.03653,"13.4-13.7":0.14694,"14.0-14.4":0.39516,"14.5-14.8":1.54413,"15.0-15.1":1.23115,"15.2-15.3":4.34181,"15.4":0.03321},P:{"4":0.27566,"5.0-5.4":0.01065,"6.2-6.4":0.01065,"7.2-7.4":0.31649,"8.2":0.03083,"9.2":0.04084,"10.1":0.01021,"11.1-11.2":0.20419,"12.0":0.03063,"13.0":0.14293,"14.0":0.18377,"15.0":0.22461,"16.0":2.87907},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00854,"4.4":0,"4.4.3-4.4.4":0.06617},A:{"11":0.18865,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.25527},Q:{"10.4":0},O:{"0":0.1432},H:{"0":0.24756},L:{"0":44.50503},S:{"2.5":0}}; +module.exports={C:{"2":0.00417,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00417,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00417,"73":0.02502,"74":0,"75":0,"76":0,"77":0,"78":0.00417,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00417,"89":0,"90":0.02919,"91":0.00417,"92":0,"93":0,"94":0,"95":0.00417,"96":0,"97":0.01668,"98":0.02085,"99":0.00417,"100":0.00417,"101":0.00834,"102":0.01668,"103":0.5004,"104":0.10008,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00417,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00417,"48":0,"49":0.00834,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00417,"65":0,"66":0,"67":0,"68":0.00834,"69":0.00417,"70":0.00417,"71":0,"72":0,"73":0.00834,"74":0.00417,"75":0.01251,"76":0.14595,"77":0.00417,"78":0.00417,"79":0.0417,"80":0.00417,"81":0.02502,"83":0.02085,"84":0.00834,"85":0.01251,"86":0.01251,"87":0.02085,"88":0.00417,"89":0.01668,"90":0.00417,"91":0.01668,"92":0.03336,"93":0.02085,"94":0.01251,"95":0.01251,"96":0.02502,"97":0.0417,"98":0.02502,"99":0.03336,"100":0.02919,"101":0.06672,"102":0.07506,"103":2.94819,"104":7.88964,"105":0.02502,"106":0.00834,"107":0.00417,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00834,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00834,"64":0.00417,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.01251,"89":0.64218,"90":0.0417,"9.5-9.6":0,"10.0-10.1":0,"10.5":0.02502,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00417,"16":0,"17":0.00417,"18":0.00417,"79":0,"80":0,"81":0,"83":0,"84":0.00417,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00834,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00417,"100":0.00417,"101":0.01251,"102":0.01251,"103":0.48789,"104":1.26768,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01668,"14":0.03753,"15":0.01251,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00417,"12.1":0.00417,"13.1":0.06255,"14.1":0.17514,"15.1":0.01251,"15.2-15.3":0.02502,"15.4":0.06672,"15.5":0.23769,"15.6":0.42117,"16.0":0.01251},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00268,"6.0-6.1":0.02142,"7.0-7.1":0.05086,"8.1-8.4":0.00134,"9.0-9.2":0,"9.3":0.07496,"10.0-10.2":0,"10.3":0.06023,"11.0-11.2":0.03079,"11.3-11.4":0.00268,"12.0-12.1":0.00669,"12.2-12.5":0.27306,"13.0-13.1":0.01472,"13.2":0.00268,"13.3":0.01606,"13.4-13.7":0.1807,"14.0-14.4":0.20881,"14.5-14.8":0.65587,"15.0-15.1":0.19275,"15.2-15.3":0.34935,"15.4":0.775,"15.5":2.73457,"15.6":7.59604,"16.0":0.12716},P:{"4":0.22489,"5.0-5.4":0.01022,"6.2-6.4":0.01022,"7.2-7.4":0.43957,"8.2":0,"9.2":0.02044,"10.1":0.01022,"11.1-11.2":0.16356,"12.0":0.01022,"13.0":0.07156,"14.0":0.10222,"15.0":0.08178,"16.0":0.28623,"17.0":1.48226,"18.0":1.56404},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00935,"4.2-4.3":0.0187,"4.4":0,"4.4.3-4.4.4":0.17454},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.06672,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":61.78012},S:{"2.5":0},R:{_:"0"},M:{"0":0.26235},Q:{"10.4":0},O:{"0":0.12243},H:{"0":0.22078}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PE.js index 755887ad404..42a99513e23 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PE.js @@ -1 +1 @@ -module.exports={C:{"47":0.005,"52":0.015,"76":0.01,"78":0.01,"84":0.01,"88":0.01,"90":0.01,"91":0.01,"92":0.01,"93":0.005,"94":0.01,"95":0.015,"96":0.39992,"97":0.68486,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 77 79 80 81 82 83 85 86 87 89 98 99 3.5 3.6"},D:{"22":0.01,"34":0.005,"38":0.05499,"47":0.01,"49":0.02999,"53":0.02,"65":0.01,"66":0.005,"68":0.01,"69":0.01,"70":0.005,"71":0.005,"72":0.005,"74":0.01,"75":0.01,"76":0.005,"77":0.02,"78":0.01,"79":0.24995,"80":0.025,"81":0.04499,"83":0.03499,"84":0.02,"85":0.015,"86":0.03999,"87":0.09498,"88":0.025,"89":0.02999,"90":0.02999,"91":0.23495,"92":0.09498,"93":0.11998,"94":0.06499,"95":0.08498,"96":0.54489,"97":11.24775,"98":27.94441,"99":0.02,"100":0.01,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 54 55 56 57 58 59 60 61 62 63 64 67 73 101"},F:{"36":0.01,"80":0.005,"81":0.005,"82":0.64487,"83":1.68466,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.005,"18":0.025,"84":0.005,"88":0.01,"90":0.005,"91":0.005,"92":0.01,"94":0.005,"95":0.01,"96":0.04999,"97":0.5149,"98":1.87463,_:"13 14 15 16 17 79 80 81 83 85 86 87 89 93"},E:{"4":0,"12":0.005,"13":0.005,"14":0.06499,"15":0.06499,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.005,"12.1":0.01,"13.1":0.04999,"14.1":0.14997,"15.1":0.11498,"15.2-15.3":0.17497},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00348,"6.0-6.1":0.00145,"7.0-7.1":0.00261,"8.1-8.4":0.00058,"9.0-9.2":0,"9.3":0.01245,"10.0-10.2":0.00463,"10.3":0.01738,"11.0-11.2":0.00521,"11.3-11.4":0.00695,"12.0-12.1":0.00724,"12.2-12.5":0.1593,"13.0-13.1":0.00463,"13.2":0.00463,"13.3":0.0197,"13.4-13.7":0.04489,"14.0-14.4":0.1735,"14.5-14.8":0.58566,"15.0-15.1":0.5063,"15.2-15.3":1.32715,"15.4":0.00782},P:{"4":0.2466,"5.0-5.4":0.01065,"6.2-6.4":0.01012,"7.2-7.4":0.07505,"8.2":0.03083,"9.2":0.02144,"10.1":0.03037,"11.1-11.2":0.09649,"12.0":0.02144,"13.0":0.06433,"14.0":0.11794,"15.0":0.08577,"16.0":0.76123},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00129,"4.2-4.3":0.00323,"4.4":0,"4.4.3-4.4.4":0.05549},A:{"11":0.12498,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.09002},Q:{"10.4":0},O:{"0":0.02501},H:{"0":0.17045},L:{"0":43.35314},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00547,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00547,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00547,"85":0,"86":0,"87":0,"88":0.00547,"89":0,"90":0.01642,"91":0.00547,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.01095,"98":0,"99":0.00547,"100":0.00547,"101":0.00547,"102":0.01642,"103":0.49266,"104":0.10401,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00547,"35":0,"36":0,"37":0,"38":0.0219,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01095,"50":0,"51":0,"52":0,"53":0.00547,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.02737,"67":0.00547,"68":0.01095,"69":0,"70":0.00547,"71":0.00547,"72":0.00547,"73":0,"74":0.01095,"75":0.00547,"76":0,"77":0.00547,"78":0.00547,"79":0.14232,"80":0.01642,"81":0.03284,"83":0.00547,"84":0.00547,"85":0.01095,"86":0.02737,"87":0.09306,"88":0.01095,"89":0.01095,"90":0.01095,"91":0.08758,"92":0.04927,"93":0.0219,"94":0.01642,"95":0.02737,"96":0.06021,"97":0.05474,"98":0.03832,"99":0.04927,"100":0.08211,"101":0.07116,"102":0.14232,"103":5.46305,"104":17.36353,"105":0.05474,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00547,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01095,"64":0.01095,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00547,"86":0.00547,"87":0,"88":0.01095,"89":1.36303,"90":0.07116,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00547,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00547,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00547,"99":0,"100":0.00547,"101":0.01095,"102":0.0219,"103":0.39413,"104":1.19881,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01095,"14":0.0219,"15":0.00547,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00547,"13.1":0.0219,"14.1":0.04379,"15.1":0.01095,"15.2-15.3":0.01642,"15.4":0.02737,"15.5":0.10401,"15.6":0.15875,"16.0":0.00547},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00317,"6.0-6.1":0.00317,"7.0-7.1":0.00211,"8.1-8.4":0.00106,"9.0-9.2":0.00106,"9.3":0.01638,"10.0-10.2":0,"10.3":0.01532,"11.0-11.2":0.00317,"11.3-11.4":0.00423,"12.0-12.1":0.01373,"12.2-12.5":0.15795,"13.0-13.1":0.00423,"13.2":0.00211,"13.3":0.02113,"13.4-13.7":0.06445,"14.0-14.4":0.11357,"14.5-14.8":0.31959,"15.0-15.1":0.09297,"15.2-15.3":0.159,"15.4":0.28895,"15.5":1.30635,"15.6":2.637,"16.0":0.04807},P:{"4":0.20152,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.08061,"8.2":0,"9.2":0.02015,"10.1":0,"11.1-11.2":0.0403,"12.0":0.01008,"13.0":0.03023,"14.0":0.05038,"15.0":0.03023,"16.0":0.11084,"17.0":0.41312,"18.0":0.39297},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00399,"4.2-4.3":0.01064,"4.4":0,"4.4.3-4.4.4":0.12632},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.03284,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":63.35241},S:{"2.5":0},R:{_:"0"},M:{"0":0.07694},Q:{"10.4":0},O:{"0":0.02263},H:{"0":0.15426}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PF.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PF.js index 1b9da8a73b6..9bc651ffbff 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PF.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PF.js @@ -1 +1 @@ -module.exports={C:{"47":0.02663,"48":0.0222,"52":0.00888,"56":0.02663,"59":0.01332,"60":0.03551,"61":0.00444,"63":0.00444,"65":0.00444,"68":0.25302,"78":0.31961,"81":0.00444,"82":0.03551,"84":0.01332,"88":0.00888,"89":0.00888,"90":0.00444,"91":0.13317,"92":0.00888,"93":0.05771,"94":0.04439,"95":0.03995,"96":1.32282,"97":2.44589,"98":0.00444,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 49 50 51 53 54 55 57 58 62 64 66 67 69 70 71 72 73 74 75 76 77 79 80 83 85 86 87 99 3.5 3.6"},D:{"49":0.03551,"62":0.01776,"67":0.03107,"77":0.01332,"79":0.00888,"83":0.02663,"84":0.02663,"85":0.00888,"86":0.00888,"87":0.08878,"88":0.00888,"89":0.01776,"91":0.01776,"92":0.11541,"93":0.182,"94":0.02663,"95":0.03551,"96":0.51936,"97":5.49548,"98":17.54737,"100":0.00444,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 63 64 65 66 68 69 70 71 72 73 74 75 76 78 80 81 90 99 101"},F:{"71":0.03995,"82":0.23971,"83":0.53712,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00888,"17":0.01332,"18":0.00888,"89":0.00888,"90":0.00888,"91":0.01332,"92":0.03551,"93":0.09322,"95":0.00888,"96":0.0222,"97":0.71468,"98":2.13072,_:"12 13 15 16 79 80 81 83 84 85 86 87 88 94"},E:{"4":0,"12":0.01332,"13":0.04439,"14":0.7857,"15":0.2841,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.00444,"11.1":0.13761,"12.1":0.16424,"13.1":0.38619,"14.1":2.05082,"15.1":1.08312,"15.2-15.3":1.65575,"15.4":0.0222},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00215,"6.0-6.1":0,"7.0-7.1":0.00431,"8.1-8.4":0,"9.0-9.2":0.00431,"9.3":0.14426,"10.0-10.2":0.01722,"10.3":0.15718,"11.0-11.2":0.0689,"11.3-11.4":0.03014,"12.0-12.1":0.13349,"12.2-12.5":1.54807,"13.0-13.1":0.04737,"13.2":0.00431,"13.3":0.09043,"13.4-13.7":0.44784,"14.0-14.4":0.86339,"14.5-14.8":4.11026,"15.0-15.1":3.61289,"15.2-15.3":10.20566,"15.4":0.03445},P:{"4":0.02094,"5.0-5.4":0.02093,"6.2-6.4":0.04074,"7.2-7.4":0.10469,"8.2":0.02094,"9.2":0.01094,"10.1":0.04074,"11.1-11.2":0.13609,"12.0":0.01047,"13.0":0.07328,"14.0":0.14656,"15.0":0.11516,"16.0":2.66954},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00189,"4.2-4.3":0.00142,"4.4":0,"4.4.3-4.4.4":0.01893},A:{"11":0.20419,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.31142},Q:{"10.4":0},O:{"0":0.67288},H:{"0":0.06318},L:{"0":29.53786},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.24518,"49":0,"50":0,"51":0,"52":0.00463,"53":0,"54":0,"55":0,"56":0.00463,"57":0,"58":0.00925,"59":0.02313,"60":0.01388,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.16191,"69":0,"70":0,"71":0.00463,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.04626,"79":0,"80":0,"81":0.00463,"82":0.01388,"83":0,"84":0.0185,"85":0,"86":0,"87":0,"88":0.00463,"89":0,"90":0,"91":0.31919,"92":0,"93":0.01388,"94":0.00463,"95":0,"96":0,"97":0.00463,"98":0.03238,"99":0.00463,"100":0.00925,"101":0.03701,"102":0.05089,"103":1.73938,"104":0.30532,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00463,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00463,"64":0.00463,"65":0,"66":0,"67":0.0185,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0.00463,"75":0,"76":0,"77":0.00463,"78":0,"79":0.00463,"80":0,"81":0.00463,"83":0,"84":0.00925,"85":0.00463,"86":0,"87":0.09715,"88":0,"89":0,"90":0.00463,"91":0.00463,"92":0.00925,"93":0.00925,"94":0.00463,"95":0.00463,"96":0.02313,"97":0.02313,"98":0.00463,"99":0.05089,"100":0.0185,"101":0.02776,"102":0.34232,"103":2.76635,"104":5.83801,"105":0.00925,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00463,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00463,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00463,"89":0.25443,"90":0.02313,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.2313,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00925,"79":0,"80":0,"81":0,"83":0,"84":0.00463,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00925,"91":0.02776,"92":0.01388,"93":0.02313,"94":0,"95":0,"96":0,"97":0.01388,"98":0,"99":0,"100":0.00463,"101":0.01388,"102":0.02776,"103":0.41634,"104":2.14184,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.00463,"13":0.01388,"14":0.14803,"15":0.06014,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00925,"10.1":0.00925,"11.1":0.02776,"12.1":0.04626,"13.1":0.17116,"14.1":0.41634,"15.1":0.09715,"15.2-15.3":0.05089,"15.4":0.30994,"15.5":0.62451,"15.6":1.36004,"16.0":0.03238},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01069,"6.0-6.1":0,"7.0-7.1":0.00802,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.35012,"10.0-10.2":0.00267,"10.3":0.09622,"11.0-11.2":0.00535,"11.3-11.4":0.06949,"12.0-12.1":0.02673,"12.2-12.5":1.45662,"13.0-13.1":0.01069,"13.2":0.00535,"13.3":0.04009,"13.4-13.7":0.14165,"14.0-14.4":0.79379,"14.5-14.8":2.31189,"15.0-15.1":0.62541,"15.2-15.3":0.78845,"15.4":0.99692,"15.5":7.24035,"15.6":11.58883,"16.0":0.14967},P:{"4":0.10328,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.07229,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.10328,"12.0":0.01033,"13.0":0.07229,"14.0":0.05164,"15.0":0.02066,"16.0":0.1859,"17.0":1.49753,"18.0":2.90211},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01164,"4.4":0,"4.4.3-4.4.4":0.19789},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.13878,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":44.52937},S:{"2.5":0},R:{_:"0"},M:{"0":0.32781},Q:{"10.4":0},O:{"0":0.33319},H:{"0":0.47825}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PG.js index 6e462187edc..866aa658f41 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PG.js @@ -1 +1 @@ -module.exports={C:{"33":0.02085,"44":0.00695,"48":0.00695,"56":0.00695,"61":0.01043,"72":0.00695,"77":0.02433,"78":0.00348,"79":0.00695,"80":0.0139,"82":0.03475,"83":0.00695,"84":0.01738,"88":0.0139,"89":0.00348,"90":0.01043,"91":0.04518,"92":0.00348,"93":0.0139,"94":0.01738,"95":0.0695,"96":0.59075,"97":1.33788,"98":0.06603,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 43 45 46 47 49 50 51 52 53 54 55 57 58 59 60 62 63 64 65 66 67 68 69 70 71 73 74 75 76 81 85 86 87 99 3.5 3.6"},D:{"26":0.00695,"37":0.02433,"38":0.00348,"43":0.00348,"44":0.00695,"46":0.00348,"49":0.02085,"53":0.00695,"54":0.01043,"55":0.00348,"56":0.01043,"59":0.00695,"60":0.00695,"61":0.01043,"62":0.00695,"65":0.0139,"67":0.02085,"68":0.00695,"69":0.16333,"70":0.17028,"72":0.00695,"74":0.03475,"76":0.0139,"77":0.00695,"78":0.00348,"79":0.00695,"80":0.01043,"81":0.04865,"83":0.03128,"84":0.00695,"85":0.05213,"86":0.02433,"87":0.05213,"88":0.44828,"89":0.07993,"90":0.04518,"91":0.07645,"92":0.0556,"93":0.09035,"94":0.07645,"95":0.07645,"96":0.52473,"97":4.1978,"98":9.76823,"99":0.00695,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 33 34 35 36 39 40 41 42 45 47 48 50 51 52 57 58 63 64 66 71 73 75 100 101"},F:{"28":0.00348,"67":0.13553,"73":0.00695,"76":0.00695,"77":0.04865,"80":0.04865,"81":0.0139,"82":0.11815,"83":0.46565,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 72 74 75 78 79 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.05213,"13":0.05908,"14":0.0278,"15":0.04518,"16":0.06603,"17":0.05213,"18":0.26758,"80":0.03128,"83":0.01043,"84":0.10425,"85":0.02085,"88":0.00348,"89":0.03823,"90":0.0139,"91":0.0278,"92":0.0417,"93":0.0139,"94":0.03823,"95":0.04518,"96":0.1112,"97":0.95215,"98":2.96765,_:"79 81 86 87"},E:{"4":0,"7":0.00348,"12":0.00695,"13":0.02085,"14":0.04865,"15":0.0139,_:"0 5 6 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.05213,"12.1":0.01738,"13.1":0.37183,"14.1":0.10773,"15.1":0.03128,"15.2-15.3":0.15985},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00121,"7.0-7.1":0,"8.1-8.4":0.0006,"9.0-9.2":0.00904,"9.3":0.01356,"10.0-10.2":0,"10.3":0.02924,"11.0-11.2":0.00573,"11.3-11.4":0.01658,"12.0-12.1":0.01537,"12.2-12.5":0.27279,"13.0-13.1":0.00603,"13.2":0.00452,"13.3":0.06722,"13.4-13.7":0.10912,"14.0-14.4":0.21009,"14.5-14.8":0.40903,"15.0-15.1":0.79847,"15.2-15.3":1.04353,"15.4":0.00241},P:{"4":0.5237,"5.0-5.4":0.01065,"6.2-6.4":0.01027,"7.2-7.4":1.15009,"8.2":0.03083,"9.2":0.12322,"10.1":0.01021,"11.1-11.2":0.25672,"12.0":0.05134,"13.0":0.45182,"14.0":0.45182,"15.0":0.54424,"16.0":2.14615},I:{"0":0,"3":0,"4":0.00282,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02441,"4.2-4.3":0.02347,"4.4":0,"4.4.3-4.4.4":0.2103},A:{"9":0.02309,"10":0.00924,"11":0.33254,_:"6 7 8 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.13703},Q:{"10.4":0.0522},O:{"0":2.32943},H:{"0":1.68644},L:{"0":59.5965},S:{"2.5":0.09788}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00271,"73":0,"74":0,"75":0,"76":0,"77":0.00813,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00271,"85":0.00271,"86":0,"87":0,"88":0.00271,"89":0.00813,"90":0,"91":0.00542,"92":0.00813,"93":0.00271,"94":0.00813,"95":0.00542,"96":0.00813,"97":0.00813,"98":0.02439,"99":0.01355,"100":0.01897,"101":0.02439,"102":0.03794,"103":0.24661,"104":0.00542,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00271,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00813,"41":0,"42":0,"43":0.00271,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00271,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00271,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.0271,"64":0,"65":0.00271,"66":0,"67":0.00271,"68":0.00271,"69":0.01355,"70":0.01355,"71":0,"72":0,"73":0,"74":0.01084,"75":0,"76":0,"77":0,"78":0,"79":0.00542,"80":0.00271,"81":0.02439,"83":0.00271,"84":0,"85":0,"86":0.00271,"87":0.01355,"88":0.05962,"89":0.00542,"90":0.00813,"91":0.00542,"92":0.01355,"93":0.00542,"94":0.02981,"95":0.00542,"96":0.01897,"97":0.00271,"98":0.00542,"99":0.01084,"100":0.01626,"101":0.02168,"102":0.0271,"103":1.20324,"104":0.52845,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00542,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00271,"62":0,"63":0.02439,"64":0.00542,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00271,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.02981,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00271,"13":0.00542,"14":0.00271,"15":0.00813,"16":0.00542,"17":0.00271,"18":0.0271,"79":0,"80":0,"81":0,"83":0,"84":0.00542,"85":0.00271,"86":0,"87":0,"88":0,"89":0.00271,"90":0.00271,"91":0,"92":0.00271,"93":0.00542,"94":0,"95":0.00271,"96":0.00271,"97":0.00271,"98":0.01084,"99":0.00542,"100":0.00813,"101":0.01355,"102":0.01084,"103":0.52845,"104":0.15989,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00271,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00271,"13.1":0.00813,"14.1":0.00813,"15.1":0,"15.2-15.3":0,"15.4":0.00271,"15.5":0.01626,"15.6":0.01084,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00679,"7.0-7.1":0.00136,"8.1-8.4":0,"9.0-9.2":0.00045,"9.3":0.01358,"10.0-10.2":0.00385,"10.3":0.01968,"11.0-11.2":0.00294,"11.3-11.4":0.02919,"12.0-12.1":0.01335,"12.2-12.5":0.1353,"13.0-13.1":0.09819,"13.2":0.00792,"13.3":0.01991,"13.4-13.7":0.06901,"14.0-14.4":0.19141,"14.5-14.8":0.18191,"15.0-15.1":0.10091,"15.2-15.3":0.12806,"15.4":0.2473,"15.5":0.63758,"15.6":0.3516,"16.0":0.00113},P:{"4":0.1227,"5.0-5.4":0.01022,"6.2-6.4":0,"7.2-7.4":0.47035,"8.2":0,"9.2":0.07157,"10.1":0,"11.1-11.2":0.46012,"12.0":0.0409,"13.0":0.2045,"14.0":0.46012,"15.0":0.21472,"16.0":0.70552,"17.0":1.84049,"18.0":0.1227},I:{"0":0,"3":0,"4":0.00286,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0043,"4.2-4.3":0.00716,"4.4":0,"4.4.3-4.4.4":0.09736},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04878,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":86.41889},S:{"2.5":0.03645},R:{_:"0"},M:{"0":0.16767},Q:{"10.4":0},O:{"0":0.2187},H:{"0":0.77989}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PH.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PH.js index edf9106d41f..707d1032e8f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PH.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PH.js @@ -1 +1 @@ -module.exports={C:{"34":0.00474,"36":0.00949,"52":0.00949,"56":0.03321,"59":0.01423,"72":0.00474,"78":0.00949,"87":0.00474,"88":0.00949,"91":0.00949,"92":0.00949,"94":0.00949,"95":0.01423,"96":0.31785,"97":0.48863,"98":0.00949,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 57 58 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 89 90 93 99 3.5 3.6"},D:{"49":0.02372,"52":0.00474,"53":0.00949,"55":0.00949,"56":0.00474,"58":0.00474,"63":0.00474,"65":0.01423,"66":0.06167,"67":0.00949,"69":0.01423,"70":0.00949,"71":0.01423,"72":0.01423,"73":0.00949,"74":0.02372,"75":0.02372,"76":0.03321,"77":0.01898,"78":0.10437,"79":0.08065,"80":0.02846,"81":0.02846,"83":0.03795,"84":0.03321,"85":0.03321,"86":0.05218,"87":0.1186,"88":0.05218,"89":0.05693,"90":0.06642,"91":0.1186,"92":0.18027,"93":0.1186,"94":0.09488,"95":0.12334,"96":0.61672,"97":9.93394,"98":23.6014,"99":0.02372,"100":0.02372,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 54 57 59 60 61 62 64 68 101"},F:{"28":0.03321,"36":0.00949,"46":0.00949,"82":0.30836,"83":0.85392,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00949,"18":0.01423,"84":0.00474,"92":0.00949,"95":0.01423,"96":0.02846,"97":0.76378,"98":2.65664,_:"12 13 14 15 16 79 80 81 83 85 86 87 88 89 90 91 93 94"},E:{"4":0,"13":0.01898,"14":0.09962,"15":0.0759,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00474,"11.1":0.02372,"12.1":0.01423,"13.1":0.07116,"14.1":0.29887,"15.1":0.17078,"15.2-15.3":0.29413},G:{"8":0.00087,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00043,"5.0-5.1":0.01039,"6.0-6.1":0.00217,"7.0-7.1":0.01473,"8.1-8.4":0.00087,"9.0-9.2":0.00823,"9.3":0.0589,"10.0-10.2":0.00476,"10.3":0.03465,"11.0-11.2":0.01776,"11.3-11.4":0.03378,"12.0-12.1":0.01949,"12.2-12.5":0.38849,"13.0-13.1":0.01299,"13.2":0.00736,"13.3":0.03162,"13.4-13.7":0.10351,"14.0-14.4":0.26809,"14.5-14.8":0.72371,"15.0-15.1":0.71591,"15.2-15.3":1.85713,"15.4":0.01429},P:{"4":0.32855,"5.0-5.4":0.01065,"6.2-6.4":0.01012,"7.2-7.4":0.07505,"8.2":0.03083,"9.2":0.0106,"10.1":0.03037,"11.1-11.2":0.05299,"12.0":0.0106,"13.0":0.03179,"14.0":0.05299,"15.0":0.05299,"16.0":0.72069},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00401,"4.2-4.3":0.0024,"4.4":0,"4.4.3-4.4.4":0.04088},A:{"11":3.07886,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.09459},Q:{"10.4":0.01051},O:{"0":1.13508},H:{"0":0.69651},L:{"0":45.06218},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00486,"53":0,"54":0,"55":0,"56":0.03405,"57":0,"58":0,"59":0.00973,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00486,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00486,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00486,"89":0,"90":0,"91":0.00486,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00486,"99":0.00973,"100":0.01459,"101":0.00486,"102":0.01459,"103":0.38912,"104":0.09242,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00973,"50":0,"51":0,"52":0.00486,"53":0,"54":0,"55":0.00486,"56":0,"57":0,"58":0.00486,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00486,"66":0.03405,"67":0.00486,"68":0.00486,"69":0.00486,"70":0.00486,"71":0.00486,"72":0.00486,"73":0.00486,"74":0.01459,"75":0.00973,"76":0.01459,"77":0.00486,"78":0.03405,"79":0.04378,"80":0.00973,"81":0.01946,"83":0.02918,"84":0.01459,"85":0.01459,"86":0.01946,"87":0.03891,"88":0.01459,"89":0.02432,"90":0.01459,"91":0.03891,"92":0.09728,"93":0.04378,"94":0.01946,"95":0.02918,"96":0.04378,"97":0.04378,"98":0.03891,"99":0.0535,"100":0.0681,"101":0.07782,"102":0.15078,"103":4.31923,"104":12.44211,"105":0.04864,"106":0.00486,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.01946,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00486,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00486,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00486,"56":0,"57":0,"58":0,"60":0.00486,"62":0,"63":0.03891,"64":0.02918,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00486,"86":0,"87":0,"88":0.00486,"89":0.46208,"90":0.02432,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00486,"13":0,"14":0,"15":0,"16":0,"17":0.00486,"18":0.00486,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00486,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00486,"99":0.00486,"100":0.00486,"101":0.00486,"102":0.00973,"103":0.43776,"104":1.37651,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00486,"14":0.02918,"15":0.00486,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00973,"12.1":0.00973,"13.1":0.02432,"14.1":0.0535,"15.1":0.01459,"15.2-15.3":0.00973,"15.4":0.04378,"15.5":0.15078,"15.6":0.22861,"16.0":0.00486},G:{"8":0.00148,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00074,"5.0-5.1":0.01113,"6.0-6.1":0.00445,"7.0-7.1":0.02003,"8.1-8.4":0.00742,"9.0-9.2":0.00965,"9.3":0.12242,"10.0-10.2":0.0089,"10.3":0.06752,"11.0-11.2":0.01855,"11.3-11.4":0.07048,"12.0-12.1":0.023,"12.2-12.5":0.54161,"13.0-13.1":0.01335,"13.2":0.00816,"13.3":0.03264,"13.4-13.7":0.10016,"14.0-14.4":0.24187,"14.5-14.8":0.46964,"15.0-15.1":0.16026,"15.2-15.3":0.22109,"15.4":0.44219,"15.5":1.56844,"15.6":3.19475,"16.0":0.05787},P:{"4":0.3287,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01027,"8.2":0,"9.2":0.01027,"10.1":0,"11.1-11.2":0.02054,"12.0":0.01027,"13.0":0.02054,"14.0":0.02054,"15.0":0.02054,"16.0":0.04109,"17.0":0.35952,"18.0":0.35952},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00423,"4.2-4.3":0.01268,"4.4":0,"4.4.3-4.4.4":0.18173},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.92902,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":65.3992},S:{"2.5":0},R:{_:"0"},M:{"0":0.09245},Q:{"10.4":0},O:{"0":0.6985},H:{"0":0.62239}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PK.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PK.js index fdf28066511..162f484dad4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PK.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PK.js @@ -1 +1 @@ -module.exports={C:{"47":0.01214,"50":0.00243,"52":0.03156,"68":0.00243,"72":0.00486,"78":0.00971,"79":0.00486,"80":0.00486,"81":0.00486,"82":0.00243,"83":0.00243,"84":0.00486,"88":0.00486,"89":0.00486,"91":0.02185,"93":0.00486,"94":0.04128,"95":0.017,"96":0.36177,"97":0.59486,"98":0.03156,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 85 86 87 90 92 99 3.5 3.6"},D:{"38":0.00486,"40":0.00243,"42":0.00243,"43":0.017,"49":0.02428,"50":0.00243,"56":0.02671,"58":0.00243,"62":0.00243,"63":0.00728,"64":0.03885,"65":0.00728,"66":0.00243,"67":0.00243,"68":0.00728,"69":0.00486,"70":0.00486,"71":0.00728,"72":0.00728,"73":0.00728,"74":0.01214,"75":0.00971,"76":0.00971,"77":0.00486,"78":0.00728,"79":0.017,"80":0.02185,"81":0.03399,"83":0.03642,"84":0.06798,"85":0.03885,"86":0.06798,"87":0.08012,"88":0.017,"89":0.03399,"90":0.02185,"91":0.0437,"92":0.05099,"93":0.25008,"94":0.0437,"95":0.07284,"96":0.34235,"97":5.06724,"98":12.37066,"99":0.02428,"100":0.02671,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 41 44 45 46 47 48 51 52 53 54 55 57 59 60 61 101"},F:{"71":0.00243,"82":0.06798,"83":0.52202,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01214,"13":0.00243,"14":0.00243,"15":0.00486,"16":0.00486,"17":0.00243,"18":0.02428,"84":0.00486,"85":0.00243,"89":0.00486,"92":0.00728,"95":0.00728,"96":0.00971,"97":0.19424,"98":0.66284,_:"79 80 81 83 86 87 88 90 91 93 94"},E:{"4":0,"13":0.00971,"14":0.02914,"15":0.017,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 15.4","5.1":0.00971,"10.1":0.00243,"11.1":0.00486,"12.1":0.00728,"13.1":0.01942,"14.1":0.09226,"15.1":0.03885,"15.2-15.3":0.05584},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00114,"5.0-5.1":0.00228,"6.0-6.1":0.00076,"7.0-7.1":0.03841,"8.1-8.4":0.00076,"9.0-9.2":0.00456,"9.3":0.07795,"10.0-10.2":0.0057,"10.3":0.04715,"11.0-11.2":0.01559,"11.3-11.4":0.01483,"12.0-12.1":0.01065,"12.2-12.5":0.35402,"13.0-13.1":0.00799,"13.2":0.00456,"13.3":0.0289,"13.4-13.7":0.10115,"14.0-14.4":0.2331,"14.5-14.8":0.66849,"15.0-15.1":0.6221,"15.2-15.3":1.55182,"15.4":0.00875},P:{"4":0.21296,"5.0-5.4":0.01065,"6.2-6.4":0.01065,"7.2-7.4":0.05324,"8.2":0.11355,"9.2":0.0213,"10.1":0.02048,"11.1-11.2":0.04259,"12.0":0.0213,"13.0":0.08519,"14.0":0.06389,"15.0":0.09583,"16.0":1.03288},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00139,"4.2-4.3":0.00555,"4.4":0,"4.4.3-4.4.4":0.05363},A:{"8":0.00744,"9":0.00744,"11":0.09923,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.06057},Q:{"10.4":0},O:{"0":4.32304},H:{"0":1.74893},L:{"0":64.93215},S:{"2.5":0.11357}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00276,"51":0,"52":0.00829,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00276,"69":0,"70":0,"71":0,"72":0.00276,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00276,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00276,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00553,"92":0,"93":0,"94":0.00276,"95":0.00276,"96":0,"97":0,"98":0.00553,"99":0.00553,"100":0.00553,"101":0.00276,"102":0.00829,"103":0.22388,"104":0.05804,"105":0.00276,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00276,"41":0,"42":0.00276,"43":0.00276,"44":0,"45":0,"46":0.00276,"47":0,"48":0,"49":0.00276,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00553,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00276,"64":0.00829,"65":0.00276,"66":0,"67":0.00276,"68":0.00276,"69":0.00276,"70":0.00276,"71":0.00276,"72":0.00553,"73":0.00553,"74":0.01382,"75":0.00276,"76":0.00276,"77":0.00553,"78":0.00276,"79":0.00553,"80":0.00829,"81":0.01935,"83":0.01106,"84":0.01935,"85":0.0995,"86":0.01935,"87":0.01935,"88":0.00553,"89":0.00829,"90":0.00553,"91":0.00553,"92":0.00829,"93":0.00829,"94":0.00553,"95":0.01382,"96":0.01382,"97":0.01382,"98":0.01382,"99":0.01382,"100":0.01658,"101":0.02211,"102":0.04975,"103":1.24933,"104":3.68165,"105":0.01935,"106":0.00829,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00829,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00276,"62":0,"63":0.0691,"64":0.07186,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00276,"71":0.00276,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00276,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00553,"86":0,"87":0,"88":0.00276,"89":0.14096,"90":0.02764,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00276,"13":0,"14":0.00276,"15":0.00276,"16":0.00276,"17":0,"18":0.00553,"79":0,"80":0,"81":0,"83":0,"84":0.00276,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00276,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00276,"100":0,"101":0.00276,"102":0.00276,"103":0.07463,"104":0.19072,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00276,"14":0.00553,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.00553,"14.1":0.01658,"15.1":0.00276,"15.2-15.3":0.00276,"15.4":0.00553,"15.5":0.02211,"15.6":0.03317,"16.0":0},G:{"8":0,"3.2":0.00053,"4.0-4.1":0,"4.2-4.3":0.00106,"5.0-5.1":0.00638,"6.0-6.1":0,"7.0-7.1":0.0697,"8.1-8.4":0.00266,"9.0-9.2":0.00532,"9.3":0.1543,"10.0-10.2":0.00426,"10.3":0.07236,"11.0-11.2":0.00905,"11.3-11.4":0.00905,"12.0-12.1":0.01117,"12.2-12.5":0.41448,"13.0-13.1":0.00638,"13.2":0.00638,"13.3":0.02128,"13.4-13.7":0.07289,"14.0-14.4":0.17239,"14.5-14.8":0.33999,"15.0-15.1":0.11333,"15.2-15.3":0.17452,"15.4":0.23145,"15.5":1.19235,"15.6":2.17188,"16.0":0.05693},P:{"4":0.19248,"5.0-5.4":0.01013,"6.2-6.4":0.02026,"7.2-7.4":0.05065,"8.2":0,"9.2":0.02026,"10.1":0,"11.1-11.2":0.04052,"12.0":0.01013,"13.0":0.06078,"14.0":0.04052,"15.0":0.03039,"16.0":0.1013,"17.0":0.61795,"18.0":0.62808},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00433,"4.2-4.3":0.00866,"4.4":0,"4.4.3-4.4.4":0.09742},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00276,"9":0,"10":0,"11":0.02764,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":79.86656},S:{"2.5":0.12301},R:{_:"0"},M:{"0":0.08683},Q:{"10.4":0},O:{"0":2.95229},H:{"0":1.32901}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PL.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PL.js index 2470b7684d4..28a4db698e6 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PL.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PL.js @@ -1 +1 @@ -module.exports={C:{"48":0.00474,"52":0.16597,"56":0.00474,"66":0.00948,"68":0.00948,"72":0.01897,"78":0.03794,"80":0.00474,"81":0.00474,"82":0.00948,"83":0.00474,"84":0.02371,"85":0.00474,"86":0.00948,"87":0.02845,"88":0.02371,"89":0.02845,"90":0.01897,"91":0.11855,"92":0.01897,"93":0.03794,"94":0.06165,"95":0.12329,"96":2.48007,"97":3.42847,"98":0.01423,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 67 69 70 71 73 74 75 76 77 79 99 3.5 3.6"},D:{"34":0.01423,"49":0.11855,"50":0.00474,"58":0.00948,"63":0.01897,"70":0.00474,"71":0.00474,"74":0.00474,"75":0.00948,"76":0.04268,"77":0.01423,"78":0.01423,"79":0.27504,"80":0.00948,"81":0.00948,"83":0.01897,"84":0.04742,"85":0.01897,"86":0.04268,"87":0.06165,"88":0.03319,"89":0.03319,"90":0.03319,"91":0.03794,"92":0.04742,"93":0.1802,"94":0.07587,"95":0.09484,"96":0.8915,"97":7.64885,"98":15.2313,"99":0.00474,"100":0.00474,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 51 52 53 54 55 56 57 59 60 61 62 64 65 66 67 68 69 72 73 101"},F:{"36":0.01897,"75":0.00948,"76":0.00474,"77":0.01897,"78":0.01897,"79":0.01897,"80":0.01897,"81":0.01897,"82":2.50852,"83":6.2215,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00948,"16":0.00474,"17":0.00948,"18":0.01897,"84":0.00474,"86":0.00474,"89":0.00474,"91":0.00948,"92":0.01897,"93":0.00474,"94":0.01423,"95":0.01897,"96":0.06165,"97":0.98634,"98":3.33363,_:"12 13 14 79 80 81 83 85 87 88 90"},E:{"4":0,"13":0.01423,"14":0.07113,"15":0.04742,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00948,"12.1":0.01897,"13.1":0.07113,"14.1":0.1802,"15.1":0.12329,"15.2-15.3":0.22287},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00039,"6.0-6.1":0.00116,"7.0-7.1":0.00232,"8.1-8.4":0.00077,"9.0-9.2":0.00039,"9.3":0.01898,"10.0-10.2":0.00039,"10.3":0.00929,"11.0-11.2":0.00387,"11.3-11.4":0.00349,"12.0-12.1":0.00542,"12.2-12.5":0.06932,"13.0-13.1":0.00852,"13.2":0.00503,"13.3":0.01704,"13.4-13.7":0.05925,"14.0-14.4":0.1793,"14.5-14.8":0.7114,"15.0-15.1":0.60413,"15.2-15.3":2.15394,"15.4":0.01549},P:{"4":0.18679,"5.0-5.4":0.01065,"6.2-6.4":0.01012,"7.2-7.4":0.02075,"8.2":0.03083,"9.2":0.12453,"10.1":0.03037,"11.1-11.2":0.09339,"12.0":0.03113,"13.0":0.09339,"14.0":0.14528,"15.0":0.09339,"16.0":1.96127},I:{"0":0,"3":0,"4":0.00216,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01417,"4.2-4.3":0.00984,"4.4":0,"4.4.3-4.4.4":0.02641},A:{"11":0.14226,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.01052},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.21032},Q:{"10.4":0},O:{"0":0.03681},H:{"0":1.18475},L:{"0":44.77015},S:{"2.5":0.00526}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00347,"52":0.03119,"53":0,"54":0,"55":0,"56":0.00347,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00347,"69":0,"70":0,"71":0,"72":0.00347,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.0104,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00347,"85":0,"86":0.00347,"87":0.00347,"88":0.00693,"89":0.00347,"90":0,"91":0.02773,"92":0.00347,"93":0.01386,"94":0.0208,"95":0.00693,"96":0.00693,"97":0.00693,"98":0.0104,"99":0.0104,"100":0.01386,"101":0.0208,"102":0.06932,"103":1.3656,"104":0.25995,"105":0.00347,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.0208,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00347,"61":0,"62":0,"63":0.00347,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.00347,"70":0.00347,"71":0,"72":0,"73":0,"74":0.00347,"75":0.00347,"76":0.00347,"77":0,"78":0.00347,"79":0.07972,"80":0.00347,"81":0.0104,"83":0.00347,"84":0.0104,"85":0.00347,"86":0.00693,"87":0.0104,"88":0.00693,"89":0.00693,"90":0.00347,"91":0.0104,"92":0.0104,"93":0.00693,"94":0.0104,"95":0.03466,"96":0.01733,"97":0.01386,"98":0.01386,"99":0.03466,"100":0.02426,"101":0.02426,"102":0.06239,"103":1.58396,"104":4.21119,"105":0.0104,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00347,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01733,"64":0.01386,"65":0,"66":0,"67":0.00347,"68":0,"69":0,"70":0,"71":0.00693,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00347,"79":0.00347,"80":0.00347,"81":0,"82":0.00347,"83":0.00347,"84":0.00693,"85":0.01386,"86":0.00693,"87":0.00693,"88":0.02426,"89":1.75726,"90":0.12131,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00347,"15":0.00347,"16":0,"17":0.00347,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00347,"93":0,"94":0,"95":0,"96":0.00347,"97":0,"98":0.00347,"99":0.00347,"100":0.00347,"101":0.0104,"102":0.0104,"103":0.28075,"104":0.73826,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00347,"14":0.0104,"15":0.00693,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00347,"13.1":0.0104,"14.1":0.0208,"15.1":0.0104,"15.2-15.3":0.00693,"15.4":0.01733,"15.5":0.04852,"15.6":0.08318,"16.0":0.00347},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.0016,"7.0-7.1":0.0016,"8.1-8.4":0.0016,"9.0-9.2":0,"9.3":0.01998,"10.0-10.2":0.0016,"10.3":0.01039,"11.0-11.2":0,"11.3-11.4":0.0024,"12.0-12.1":0.004,"12.2-12.5":0.08949,"13.0-13.1":0.01678,"13.2":0.0024,"13.3":0.01358,"13.4-13.7":0.06472,"14.0-14.4":0.14543,"14.5-14.8":0.35798,"15.0-15.1":0.08949,"15.2-15.3":0.19177,"15.4":0.30284,"15.5":1.94649,"15.6":4.60654,"16.0":0.11267},P:{"4":0.15312,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01021,"8.2":0,"9.2":0.03062,"10.1":0,"11.1-11.2":0.06125,"12.0":0.01021,"13.0":0.04083,"14.0":0.06125,"15.0":0.03062,"16.0":0.1225,"17.0":1.15351,"18.0":1.521},I:{"0":0,"3":0,"4":0.00303,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02345,"4.2-4.3":0.02193,"4.4":0,"4.4.3-4.4.4":0.0416},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0208,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":71.67328},S:{"2.5":0.00653},R:{_:"0"},M:{"0":0.53579},Q:{"10.4":0},O:{"0":0.02614},H:{"0":2.12797}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PM.js index 36f80eedde0..5df8b7d1b3c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PM.js @@ -1 +1 @@ -module.exports={C:{"43":0.00778,"52":0.00778,"78":0.02724,"79":0.22179,"86":0.00389,"91":0.14397,"95":0.05447,"96":0.54474,"97":1.57586,"98":0.01556,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 80 81 82 83 84 85 87 88 89 90 92 93 94 99 3.5 3.6"},D:{"29":0.00389,"49":0.00778,"61":0.00389,"65":0.01167,"76":0.01167,"79":0.01556,"84":0.01167,"87":0.01946,"89":0.00389,"91":0.00389,"94":0.01167,"95":0.00389,"96":0.26459,"97":4.10501,"98":10.93371,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 62 63 64 66 67 68 69 70 71 72 73 74 75 77 78 80 81 83 85 86 88 90 92 93 99 100 101"},F:{"82":0.27626,"83":1.26068,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00389,"97":1.24123,"98":4.5836,_:"12 13 14 15 16 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96"},E:{"4":0,"14":0.10117,"15":0.08949,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00389,"11.1":0.04669,"12.1":0.00389,"13.1":0.10895,"14.1":1.30349,"15.1":1.71204,"15.2-15.3":5.78203,"15.4":0.29183},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00956,"10.0-10.2":0,"10.3":0.01913,"11.0-11.2":0.02391,"11.3-11.4":0.01434,"12.0-12.1":0.00956,"12.2-12.5":1.39619,"13.0-13.1":0,"13.2":0.00956,"13.3":0.31558,"13.4-13.7":0.00956,"14.0-14.4":0.15779,"14.5-14.8":5.98639,"15.0-15.1":7.05744,"15.2-15.3":32.27965,"15.4":0.50205},P:{"4":0.16724,"5.0-5.4":0.01121,"6.2-6.4":0.01012,"7.2-7.4":0.68986,"8.2":0.03083,"9.2":0.03136,"10.1":0.03037,"11.1-11.2":0.20905,"12.0":0.0209,"13.0":0.14633,"14.0":0.20905,"15.0":0.36584,"16.0":0.31767},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.04934,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.03618},A:{"11":0.05058,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.09164},Q:{"10.4":0},O:{"0":0},H:{"0":0.08097},L:{"0":12.73345},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00405,"52":0.0081,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00405,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.0081,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.01215,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.07697,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.01215,"102":0.11748,"103":1.00465,"104":0.12963,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.0081,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00405,"57":0,"58":0.00405,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.06887,"77":0,"78":0,"79":0.01215,"80":0,"81":0,"83":0,"84":0,"85":0.00405,"86":0,"87":0.00405,"88":0,"89":0,"90":0,"91":0.05671,"92":0.00405,"93":0,"94":0,"95":0,"96":0.06077,"97":0,"98":0,"99":0.05671,"100":0,"101":0.01215,"102":0.32813,"103":1.86346,"104":4.13202,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0.00405,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.14584,"90":0.01215,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0.02836,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00405,"102":0,"103":0.1904,"104":1.11403,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.02026,"15":0.00405,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.04051,"14.1":0.21875,"15.1":0.04456,"15.2-15.3":0.34434,"15.4":0.04456,"15.5":0.57119,"15.6":2.53593,"16.0":0.14179},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02906,"10.0-10.2":0,"10.3":0.04844,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":6.56842,"13.0-13.1":0.04844,"13.2":0,"13.3":0.14047,"13.4-13.7":0.10657,"14.0-14.4":0.1986,"14.5-14.8":0.86223,"15.0-15.1":0.78472,"15.2-15.3":3.46344,"15.4":0.61518,"15.5":15.08895,"15.6":20.01042,"16.0":0.47955},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0.0114,"15.0":0.0114,"16.0":0.03421,"17.0":0.43329,"18.0":0.33067},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.05026,"4.2-4.3":1.4073,"4.4":0,"4.4.3-4.4.4":0.05026},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.32408,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":34.33771},S:{"2.5":0},R:{_:"0"},M:{"0":0.32125},Q:{"10.4":0},O:{"0":0},H:{"0":0.04506}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PN.js index d70389d372a..00a76f6ad2f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PN.js @@ -1 +1 @@ -module.exports={C:{_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 3.5 3.6"},D:{"81":57.14,"98":42.86,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 99 100 101"},F:{_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98"},E:{"4":0,_:"0 5 6 7 8 9 10 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 13.1 14.1 15.1 15.2-15.3 15.4"},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":0,"15.0-15.1":0,"15.2-15.3":0,"15.4":0},P:{"4":0.32855,"5.0-5.4":0.01065,"6.2-6.4":0.01012,"7.2-7.4":0.07505,"8.2":0.03083,"9.2":0.0106,"10.1":0.03037,"11.1-11.2":0.05299,"12.0":0.0106,"13.0":0.03179,"14.0":0.05299,"15.0":0.05299,"16.0":0.72069},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{_:"6 7 8 9 10 11 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0},L:{"0":0},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":5.78089,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":69.336,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0,"15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0,"15.6":0,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":0,"15.0-15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0,"15.6":0,"16.0":0},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0,"15.0":0,"16.0":0,"17.0":0,"18.0":0},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":0},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":13.33},H:{"0":0}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PR.js index 343757b3cf0..ae0ecb868c2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PR.js @@ -1 +1 @@ -module.exports={C:{"52":0.04526,"73":0.04073,"78":0.0181,"90":0.05431,"91":0.03168,"95":0.03168,"96":0.93688,"97":1.29896,"98":0.01358,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 92 93 94 99 3.5 3.6"},D:{"25":0.00453,"49":0.03621,"54":0.01358,"58":0.00453,"63":0.00453,"65":0.00453,"68":0.00453,"71":0.00453,"75":0.01358,"76":0.0181,"78":0.00905,"79":0.06789,"80":0.00905,"81":0.00905,"83":0.0181,"84":0.03168,"85":0.00905,"86":0.03168,"87":0.49786,"88":0.0181,"89":0.05884,"90":0.0181,"91":0.02263,"92":0.04526,"93":0.05431,"94":0.11315,"95":0.08599,"96":0.47523,"97":7.62178,"98":16.76883,"99":0.0181,"100":0.00453,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 55 56 57 59 60 61 62 64 66 67 69 70 72 73 74 77 101"},F:{"82":0.17651,"83":0.64269,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.00905,"17":0.01358,"18":0.04526,"84":0.00453,"85":0.00905,"89":0.00453,"90":0.00905,"91":0.00453,"92":0.00905,"93":0.00453,"94":0.04526,"95":0.04526,"96":0.18104,"97":1.53431,"98":5.46288,_:"12 13 14 15 79 80 81 83 86 87 88"},E:{"4":0,"12":0.00905,"13":0.04979,"14":0.43902,"15":0.30324,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.02716,"11.1":0.03621,"12.1":0.06789,"13.1":0.38924,"14.1":1.6882,"15.1":0.66985,"15.2-15.3":1.67009,"15.4":0.03168},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00775,"9.0-9.2":0.00258,"9.3":0.09036,"10.0-10.2":0,"10.3":0.03098,"11.0-11.2":0.07229,"11.3-11.4":0.0284,"12.0-12.1":0.01549,"12.2-12.5":0.35886,"13.0-13.1":0.02065,"13.2":0.01549,"13.3":0.05422,"13.4-13.7":0.23494,"14.0-14.4":0.83131,"14.5-14.8":4.41988,"15.0-15.1":4.05586,"15.2-15.3":15.44891,"15.4":0.11101},P:{"4":0.21935,"5.0-5.4":0.01065,"6.2-6.4":0.01012,"7.2-7.4":0.05223,"8.2":0.03083,"9.2":0.04178,"10.1":0.03037,"11.1-11.2":0.06267,"12.0":0.01045,"13.0":0.17757,"14.0":0.09401,"15.0":0.09401,"16.0":2.43379},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.01642},A:{"11":0.23535,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.2737},Q:{"10.4":0},O:{"0":0.00547},H:{"0":0.11401},L:{"0":24.77973},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.22365,"39":0,"40":0,"41":0,"42":0,"43":0.23382,"44":1.05726,"45":0.24398,"46":0,"47":0,"48":0,"49":0.00508,"50":0,"51":0,"52":0.01017,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00508,"69":0,"70":0,"71":0,"72":0,"73":0.01525,"74":0,"75":0,"76":0,"77":0,"78":0.00508,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.01525,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.07116,"91":0.01017,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.00508,"98":0,"99":0,"100":0.00508,"101":0.01017,"102":0.0305,"103":0.70145,"104":0.15249,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.23382,"48":2.8109,"49":0.65062,"50":0,"51":0,"52":0,"53":0.00508,"54":0,"55":0,"56":0,"57":0,"58":0.01017,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.02033,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.00508,"76":0.00508,"77":0,"78":0,"79":0.03558,"80":0.00508,"81":0.00508,"83":0.00508,"84":0.01017,"85":0.00508,"86":0.01525,"87":0.08641,"88":0.01017,"89":0.00508,"90":0.00508,"91":0.00508,"92":0.01017,"93":0.01525,"94":0.01017,"95":0.00508,"96":0.01017,"97":0.01017,"98":0.02033,"99":0.01525,"100":0.02542,"101":0.07116,"102":0.11183,"103":2.59233,"104":6.92813,"105":0.02542,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00508,"89":0.39139,"90":0.04066,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.08133,"13":0.08133,"14":0,"15":0,"16":0,"17":0.00508,"18":0.01017,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00508,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00508,"93":0,"94":0.00508,"95":0.00508,"96":0.00508,"97":0.00508,"98":0.00508,"99":0.00508,"100":0.00508,"101":0.08641,"102":0.03558,"103":0.75228,"104":2.38901,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.08133,"9":0.42189,"10":0,"11":0,"12":0.00508,"13":0.01525,"14":0.12199,"15":0.0305,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.02033,"11.1":0.01017,"12.1":0.01525,"13.1":0.13724,"14.1":0.26432,"15.1":0.061,"15.2-15.3":0.04575,"15.4":0.18807,"15.5":0.60996,"15.6":1.08268,"16.0":0.01525},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00763,"8.1-8.4":0,"9.0-9.2":0.2099,"9.3":0.08014,"10.0-10.2":0,"10.3":0.0458,"11.0-11.2":0.03053,"11.3-11.4":0.0229,"12.0-12.1":0.01908,"12.2-12.5":0.2786,"13.0-13.1":0.01145,"13.2":0.01145,"13.3":0.03053,"13.4-13.7":0.10686,"14.0-14.4":0.59154,"14.5-14.8":1.51128,"15.0-15.1":0.53811,"15.2-15.3":0.82815,"15.4":1.52273,"15.5":8.56012,"15.6":23.32947,"16.0":0.40835},P:{"4":0.25077,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.04179,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.03135,"12.0":0.01045,"13.0":0.06269,"14.0":0.07314,"15.0":0.01045,"16.0":0.08359,"17.0":0.83589,"18.0":1.35832},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.08569,"4.4":0,"4.4.3-4.4.4":0.23371},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.16774,"10":0,"11":0.35581,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":32.15674},S:{"2.5":0},R:{_:"0"},M:{"0":0.22127},Q:{"10.4":0},O:{"0":0.00492},H:{"0":0.06983}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PS.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PS.js index a822cfbf6cf..21edee5c9bc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PS.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PS.js @@ -1 +1 @@ -module.exports={C:{"52":0.02036,"78":0.00291,"79":0.01163,"87":0.00582,"88":0.00291,"91":0.02036,"94":0.00291,"95":0.01745,"96":0.47691,"97":0.60777,"98":0.00872,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 80 81 82 83 84 85 86 89 90 92 93 99 3.5 3.6"},D:{"35":0.41294,"38":0.02036,"41":0.0349,"43":0.00582,"49":0.01745,"53":0.00582,"56":0.00291,"58":0.00582,"60":0.00582,"61":0.01454,"63":0.00872,"69":0.00582,"70":0.00291,"71":0.00872,"72":0.00872,"73":0.00291,"74":0.00582,"76":0.00291,"77":0.20938,"78":0.00582,"79":0.07561,"80":0.01745,"81":0.01745,"83":0.01163,"84":0.01745,"85":0.00872,"86":0.04653,"87":0.05525,"88":0.00872,"89":0.17739,"90":0.01745,"91":0.0378,"92":0.04071,"93":0.05816,"94":0.04071,"95":0.04944,"96":0.33151,"97":6.66223,"98":15.3019,"99":0.00582,"100":0.01454,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 39 40 42 44 45 46 47 48 50 51 52 54 55 57 59 62 64 65 66 67 68 75 101"},F:{"82":0.13377,"83":0.6543,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00291,"13":0.00291,"17":0.00582,"18":0.03199,"84":0.00582,"92":0.00872,"93":0.00291,"95":0.00872,"96":0.02036,"97":0.34314,"98":1.23008,_:"14 15 16 79 80 81 83 85 86 87 88 89 90 91 94"},E:{"4":0,"13":0.01454,"14":0.04362,"15":0.02908,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00872,"12.1":0.00872,"13.1":0.02036,"14.1":0.12214,"15.1":0.09887,"15.2-15.3":0.15122},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00241,"6.0-6.1":0,"7.0-7.1":0.03047,"8.1-8.4":0.0016,"9.0-9.2":0,"9.3":0.03208,"10.0-10.2":0.0016,"10.3":0.01684,"11.0-11.2":0.00722,"11.3-11.4":0.01524,"12.0-12.1":0.02005,"12.2-12.5":0.27424,"13.0-13.1":0.00882,"13.2":0.00321,"13.3":0.02887,"13.4-13.7":0.09222,"14.0-14.4":0.3841,"14.5-14.8":1.69677,"15.0-15.1":1.30546,"15.2-15.3":4.07113,"15.4":0.02165},P:{"4":0.08236,"5.0-5.4":0.01065,"6.2-6.4":0.01065,"7.2-7.4":0.12354,"8.2":0.03083,"9.2":0.02059,"10.1":0.01029,"11.1-11.2":0.15442,"12.0":0.05147,"13.0":0.24708,"14.0":0.17501,"15.0":0.1956,"16.0":2.13103},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00278,"4.2-4.3":0.00972,"4.4":0,"4.4.3-4.4.4":0.12225},A:{"11":0.09887,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.0851},Q:{"10.4":0},O:{"0":0.07092},H:{"0":0.39614},L:{"0":54.16528},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00269,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00538,"89":0,"90":0,"91":0.00269,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00269,"100":0.00269,"101":0.00269,"102":0.01076,"103":0.22335,"104":0.04575,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00269,"39":0,"40":0,"41":0.00269,"42":0,"43":0,"44":0,"45":0,"46":0.00538,"47":0,"48":0,"49":0.00269,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00269,"59":0,"60":0,"61":0,"62":0.00269,"63":0.00269,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.00269,"70":0,"71":0.00269,"72":0.00269,"73":0,"74":0.00269,"75":0,"76":0.00269,"77":0.09957,"78":0.00269,"79":0.01076,"80":0.00538,"81":0.01884,"83":0.00269,"84":0.00269,"85":0.00269,"86":0.00807,"87":0.00807,"88":0.00538,"89":0.06189,"90":0.00538,"91":0.00269,"92":0.00538,"93":0.00269,"94":0.00269,"95":0.02691,"96":0.00807,"97":0.00807,"98":0.01076,"99":0.01076,"100":0.01615,"101":0.02422,"102":0.06458,"103":1.32128,"104":3.97999,"105":0.01346,"106":0.00269,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01884,"64":0.02422,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00269,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00269,"86":0,"87":0,"88":0.00269,"89":0.15339,"90":0.02153,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.00269,"18":0.00269,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00269,"93":0,"94":0,"95":0,"96":0,"97":0.00269,"98":0,"99":0,"100":0,"101":0.00538,"102":0.00269,"103":0.11033,"104":0.33368,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00269,"14":0.0296,"15":0.00807,_:"0","3.1":0,"3.2":0,"5.1":0.00269,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.00807,"14.1":0.01884,"15.1":0.00807,"15.2-15.3":0.00269,"15.4":0.01346,"15.5":0.03767,"15.6":0.0592,"16.0":0.00269},G:{"8":0,"3.2":0.00105,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.05555,"8.1-8.4":0.0021,"9.0-9.2":0,"9.3":0.0283,"10.0-10.2":0.00314,"10.3":0.01572,"11.0-11.2":0.00838,"11.3-11.4":0.01048,"12.0-12.1":0.00943,"12.2-12.5":0.27251,"13.0-13.1":0.00524,"13.2":0.01467,"13.3":0.01572,"13.4-13.7":0.06289,"14.0-14.4":0.21381,"14.5-14.8":0.72215,"15.0-15.1":0.1656,"15.2-15.3":0.30081,"15.4":0.53768,"15.5":2.54166,"15.6":5.36422,"16.0":0.12368},P:{"4":0.09099,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.10109,"8.2":0,"9.2":0.02022,"10.1":0.02022,"11.1-11.2":0.12131,"12.0":0.04044,"13.0":0.18197,"14.0":0.16175,"15.0":0.08088,"16.0":0.25274,"17.0":1.31423,"18.0":1.33445},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01952,"4.4":0,"4.4.3-4.4.4":0.2147},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01076,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":76.66492},S:{"2.5":0},R:{_:"0"},M:{"0":0.10964},Q:{"10.4":0},O:{"0":0.09502},H:{"0":0.4567}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PT.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PT.js index 7e030db0b57..561b8cbf011 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PT.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PT.js @@ -1 +1 @@ -module.exports={C:{"3":0.01273,"15":0.01273,"49":0.03819,"52":0.05092,"54":0.01273,"78":0.04456,"84":0.01273,"87":0.00637,"88":0.00637,"91":0.05729,"92":0.01273,"93":0.0191,"94":0.01273,"95":0.05729,"96":1.15207,"97":1.91587,"98":0.01273,_:"2 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 53 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 89 90 99 3.5 3.6"},D:{"23":0.02546,"38":0.00637,"43":0.36917,"49":0.10821,"59":0.00637,"63":0.00637,"65":0.00637,"67":0.00637,"68":0.01273,"69":0.0191,"70":0.00637,"71":0.0191,"73":0.01273,"75":0.00637,"76":0.01273,"77":0.01273,"78":0.01273,"79":0.04456,"80":0.02546,"81":0.01273,"83":0.01273,"84":0.04456,"85":0.02546,"86":0.04456,"87":0.17822,"88":0.02546,"89":0.07638,"90":0.09548,"91":0.12094,"92":0.05092,"93":0.35008,"94":0.08275,"95":0.11457,"96":0.40736,"97":12.78092,"98":29.53997,"99":0.02546,"100":0.01273,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 44 45 46 47 48 50 51 52 53 54 55 56 57 58 60 61 62 64 66 72 74 101"},F:{"82":1.46395,"83":3.11249,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.01273,"18":0.01273,"84":0.00637,"89":0.01273,"90":0.00637,"91":0.00637,"92":0.01273,"93":0.00637,"94":0.01273,"95":0.0191,"96":0.05092,"97":1.26027,"98":4.62736,_:"12 13 14 16 17 79 80 81 83 85 86 87 88"},E:{"4":0,"13":0.03819,"14":0.20368,"15":0.16549,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00637,"11.1":0.02546,"12.1":0.03819,"13.1":0.22914,"14.1":0.62377,"15.1":0.37554,"15.2-15.3":0.84018,"15.4":0.01273},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00176,"5.0-5.1":0,"6.0-6.1":0.00176,"7.0-7.1":0.00088,"8.1-8.4":0.00616,"9.0-9.2":0,"9.3":0.06244,"10.0-10.2":0,"10.3":0.06419,"11.0-11.2":0.02902,"11.3-11.4":0.00703,"12.0-12.1":0.00528,"12.2-12.5":0.27348,"13.0-13.1":0.01847,"13.2":0.0044,"13.3":0.0255,"13.4-13.7":0.11168,"14.0-14.4":0.28492,"14.5-14.8":1.46064,"15.0-15.1":1.36654,"15.2-15.3":5.01329,"15.4":0.04837},P:{"4":0.01076,"5.0-5.4":0.01065,"6.2-6.4":0.01012,"7.2-7.4":0.02075,"8.2":0.03083,"9.2":0.12453,"10.1":0.03037,"11.1-11.2":0.01076,"12.0":0.01076,"13.0":0.04305,"14.0":0.05381,"15.0":0.04305,"16.0":1.46357},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00277,"4.2-4.3":0.00554,"4.4":0,"4.4.3-4.4.4":0.04985},A:{"11":0.37554,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.18175},Q:{"10.4":0},O:{"0":0.14177},H:{"0":0.20304},L:{"0":24.70845},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.02608,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00522,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01043,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00522,"85":0,"86":0,"87":0.01043,"88":0.00522,"89":0.00522,"90":0,"91":0.03129,"92":0,"93":0,"94":0.00522,"95":0.00522,"96":0,"97":0.00522,"98":0.00522,"99":0.00522,"100":0.01043,"101":0.01043,"102":0.07301,"103":1.24117,"104":0.24511,"105":0.00522,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00522,"39":0,"40":0,"41":0.00522,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02608,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.01043,"64":0,"65":0.00522,"66":0,"67":0.00522,"68":0.00522,"69":0.06258,"70":0,"71":0.01043,"72":0,"73":0,"74":0,"75":0.01043,"76":0.00522,"77":0.00522,"78":0,"79":0.03129,"80":0.00522,"81":0.01043,"83":0.00522,"84":0.02086,"85":0.01565,"86":0.00522,"87":0.03129,"88":0.01043,"89":0.04694,"90":0.01565,"91":0.02086,"92":0.01565,"93":0.02608,"94":0.01043,"95":0.02086,"96":0.02608,"97":0.02086,"98":0.01565,"99":0.04694,"100":0.06258,"101":0.04694,"102":0.11995,"103":4.36496,"104":12.03622,"105":0.04694,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00522,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01043,"64":0.01043,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00522,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00522,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00522,"86":0.00522,"87":0,"88":0.01565,"89":1.77832,"90":0.07301,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00522,"16":0,"17":0,"18":0.00522,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00522,"93":0,"94":0,"95":0,"96":0.01043,"97":0,"98":0.01043,"99":0.00522,"100":0,"101":0.01565,"102":0.01565,"103":0.81354,"104":2.31025,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01043,"14":0.05737,"15":0.02608,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00522,"11.1":0.01565,"12.1":0.01565,"13.1":0.09387,"14.1":0.16688,"15.1":0.03129,"15.2-15.3":0.03651,"15.4":0.09909,"15.5":0.3807,"15.6":0.57887,"16.0":0.01043},G:{"8":0.00181,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00363,"8.1-8.4":0.00544,"9.0-9.2":0.00363,"9.3":0.12145,"10.0-10.2":0,"10.3":0.09064,"11.0-11.2":0.01269,"11.3-11.4":0.02175,"12.0-12.1":0.01269,"12.2-12.5":0.57645,"13.0-13.1":0.01088,"13.2":0.00725,"13.3":0.029,"13.4-13.7":0.09607,"14.0-14.4":0.2701,"14.5-14.8":0.87555,"15.0-15.1":0.22478,"15.2-15.3":0.37342,"15.4":0.61995,"15.5":4.42306,"15.6":10.00263,"16.0":0.33354},P:{"4":0.09231,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01026,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.02051,"12.0":0.01026,"13.0":0.04103,"14.0":0.03077,"15.0":0.01026,"16.0":0.08205,"17.0":0.72823,"18.0":1.18978},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00651,"4.2-4.3":0.03256,"4.4":0,"4.4.3-4.4.4":0.28657},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.2764,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":45.81077},S:{"2.5":0},R:{_:"0"},M:{"0":0.26796},Q:{"10.4":0},O:{"0":0.1914},H:{"0":0.24916}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PW.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PW.js index c7f6eb15957..815ae8b248f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PW.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PW.js @@ -1 +1 @@ -module.exports={C:{"92":0.04309,"96":0.89408,"97":0.8456,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 93 94 95 98 99 3.5 3.6"},D:{"33":0.01077,"43":0.0754,"48":0.01077,"49":0.01077,"58":0.02154,"68":0.09695,"75":0.7325,"76":0.0377,"78":0.02693,"79":0.25314,"81":0.64632,"85":0.01616,"86":0.01077,"87":0.28007,"89":0.08618,"90":0.09695,"91":0.05925,"93":0.06463,"94":0.03232,"95":0.02154,"96":1.01795,"97":13.10414,"98":25.16339,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 44 45 46 47 50 51 52 53 54 55 56 57 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 77 80 83 84 88 92 99 100 101"},F:{"79":0.11311,"82":0.02154,"83":0.15619,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.02154,"18":0.01077,"89":0.01077,"96":0.2693,"97":1.08797,"98":2.97846,_:"12 13 15 16 17 79 80 81 83 84 85 86 87 88 90 91 92 93 94 95"},E:{"4":0,"11":0.04847,"13":0.01077,"14":0.17235,"15":0.08618,_:"0 5 6 7 8 9 10 12 3.1 3.2 5.1 6.1 7.1 9.1 11.1 15.4","10.1":0.05386,"12.1":0.03232,"13.1":0.17774,"14.1":1.52962,"15.1":0.19928,"15.2-15.3":1.10952},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00335,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00335,"10.0-10.2":0.00335,"10.3":0.43827,"11.0-11.2":0,"11.3-11.4":0.02683,"12.0-12.1":0.00335,"12.2-12.5":0.29293,"13.0-13.1":0,"13.2":0,"13.3":0.08162,"13.4-13.7":0.03019,"14.0-14.4":0.25715,"14.5-14.8":3.30942,"15.0-15.1":1.58427,"15.2-15.3":5.01556,"15.4":0.12522},P:{"4":0.21296,"5.0-5.4":0.01065,"6.2-6.4":0.01065,"7.2-7.4":0.46249,"8.2":0.03083,"9.2":0.0213,"10.1":0.01028,"11.1-11.2":0.02056,"12.0":0.0213,"13.0":0.08519,"14.0":0.15416,"15.0":0.29805,"16.0":3.07297},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.12926,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.24905},Q:{"10.4":0},O:{"0":0.17987},H:{"0":0.75974},L:{"0":31.12102},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00526,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00526,"89":0,"90":0,"91":0.00526,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.06838,"99":0.1315,"100":0,"101":0,"102":0.12098,"103":0.19988,"104":0.03156,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.04208,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01052,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00526,"73":0,"74":0.01578,"75":0.1578,"76":0.25248,"77":0,"78":0.03156,"79":0.06312,"80":0,"81":0.00526,"83":0.01052,"84":0.0263,"85":0,"86":0.9731,"87":0.1578,"88":0.00526,"89":0.00526,"90":0,"91":0,"92":0,"93":0.15254,"94":0.01578,"95":0.01052,"96":0.63646,"97":0.01052,"98":0,"99":0.01052,"100":0.01052,"101":1.7884,"102":0.1315,"103":4.57094,"104":11.76662,"105":0.01578,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.93102,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.26826,"90":0.01578,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00526,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0.31034,"104":0.80478,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.19988,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.19462,"13.1":0.36294,"14.1":1.22032,"15.1":0.00526,"15.2-15.3":0.04208,"15.4":0.01052,"15.5":0.13676,"15.6":0.3419,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.17866,"10.0-10.2":0.02091,"10.3":0.05512,"11.0-11.2":0.0114,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":1.684,"13.0-13.1":0.01711,"13.2":0,"13.3":0.05892,"13.4-13.7":0.07603,"14.0-14.4":0.21098,"14.5-14.8":0.53789,"15.0-15.1":0.07603,"15.2-15.3":0.36493,"15.4":1.9729,"15.5":4.75169,"15.6":8.76402,"16.0":0.22238},P:{"4":0.13286,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.2044,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01022,"12.0":0,"13.0":0,"14.0":0.04088,"15.0":0,"16.0":0.08176,"17.0":0.7154,"18.0":1.23662},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.24566},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.02705,"10":0,"11":0.16231,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":49.00082},S:{"2.5":0},R:{_:"0"},M:{"0":0.02844},Q:{"10.4":0},O:{"0":0.76788},H:{"0":0.19296}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PY.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PY.js index 4659e82e197..4c75412392f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PY.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/PY.js @@ -1 +1 @@ -module.exports={C:{"24":0.03432,"30":0.00644,"35":0.11154,"43":0.00215,"47":0.00429,"52":0.3239,"56":0.00215,"60":0.00429,"61":0.00215,"64":0.00429,"65":0.00215,"66":0.00215,"68":0.01502,"69":0.00858,"72":0.00858,"73":0.03218,"77":0.01073,"78":0.00429,"86":0.00644,"88":0.01716,"89":0.00644,"90":0.01073,"91":0.01073,"92":0.00215,"93":0.01287,"94":0.00644,"95":0.01716,"96":0.37109,"97":0.60275,"98":0.00429,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 31 32 33 34 36 37 38 39 40 41 42 44 45 46 48 49 50 51 53 54 55 57 58 59 62 63 67 70 71 74 75 76 79 80 81 82 83 84 85 87 99 3.5 3.6"},D:{"11":0.00858,"31":0.00644,"35":0.00215,"38":0.00858,"41":0.00215,"47":0.03432,"49":0.02789,"52":0.00215,"53":0.00215,"54":0.00215,"55":0.00215,"63":0.00429,"64":0.18447,"65":0.02145,"66":0.00429,"69":0.00858,"70":0.00215,"71":0.01073,"72":0.00215,"73":0.00429,"74":0.00215,"75":0.00644,"76":0.00429,"77":0.00429,"78":0.00429,"79":0.07508,"80":0.00644,"81":0.01073,"83":0.00858,"84":0.00644,"85":0.01931,"86":0.02145,"87":0.18876,"88":0.01716,"89":0.0236,"90":0.01502,"91":0.07293,"92":0.0429,"93":0.0429,"94":0.02574,"95":0.03218,"96":0.57057,"97":4.15058,"98":10.24238,"99":0.00215,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 36 37 39 40 42 43 44 45 46 48 50 51 56 57 58 59 60 61 62 67 68 100 101"},F:{"36":0.00429,"76":0.00429,"78":0.00429,"82":0.21665,"83":0.66495,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 77 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00215,"15":0.00429,"17":0.00429,"18":0.00858,"84":0.00429,"89":0.00215,"92":0.01073,"95":0.00858,"96":0.01073,"97":0.28314,"98":0.9867,_:"12 13 16 79 80 81 83 85 86 87 88 90 91 93 94"},E:{"4":0,"13":0.00215,"14":0.02145,"15":0.01931,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 11.1 15.4","5.1":0.04505,"12.1":0.00215,"13.1":0.05363,"14.1":0.09867,"15.1":0.07508,"15.2-15.3":0.09009},G:{"8":0,"3.2":0.00179,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00313,"6.0-6.1":0,"7.0-7.1":0.02415,"8.1-8.4":0.00089,"9.0-9.2":0.00224,"9.3":0.00716,"10.0-10.2":0.00134,"10.3":0.01387,"11.0-11.2":0.00626,"11.3-11.4":0.01208,"12.0-12.1":0.00358,"12.2-12.5":0.23976,"13.0-13.1":0.00403,"13.2":0.00134,"13.3":0.01118,"13.4-13.7":0.05457,"14.0-14.4":0.15566,"14.5-14.8":0.97379,"15.0-15.1":0.68885,"15.2-15.3":2.25353,"15.4":0.01029},P:{"4":0.50616,"5.0-5.4":0.01065,"6.2-6.4":0.01012,"7.2-7.4":0.64788,"8.2":0.03083,"9.2":0.08098,"10.1":0.03037,"11.1-11.2":0.21259,"12.0":0.07086,"13.0":0.25308,"14.0":0.32394,"15.0":0.27332,"16.0":2.35868},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00269,"4.2-4.3":0.00539,"4.4":0,"4.4.3-4.4.4":0.08618},A:{"8":0.00644,"11":0.07937,_:"6 7 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.08641},Q:{"10.4":0},O:{"0":0.04713},H:{"0":0.18592},L:{"0":60.80205},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.01145,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00229,"44":0,"45":0.00229,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.02747,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00229,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00229,"73":0.00916,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0.00458,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00458,"89":0,"90":0,"91":0.00229,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.01373,"100":0.00229,"101":0.00229,"102":0.00916,"103":0.1877,"104":0.0412,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00458,"48":0,"49":0.00687,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00458,"65":0.00458,"66":0,"67":0,"68":0,"69":0.00229,"70":0.00229,"71":0.00229,"72":0,"73":0.00229,"74":0,"75":0.00229,"76":0,"77":0.00229,"78":0,"79":0.01145,"80":0.00229,"81":0.00458,"83":0.01145,"84":0.00458,"85":0.00229,"86":0.00458,"87":0.1877,"88":0.00229,"89":0.00687,"90":0.00229,"91":0.01373,"92":0.00687,"93":0.00229,"94":0.00687,"95":0.01145,"96":0.00916,"97":0.00916,"98":0.00916,"99":0.00916,"100":0.00916,"101":0.04807,"102":0.03205,"103":0.9362,"104":2.54308,"105":0.00916,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00458,"64":0.00458,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00229,"86":0,"87":0,"88":0.00229,"89":0.17625,"90":0.01373,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00229,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00229,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00458,"101":0.00229,"102":0.00229,"103":0.10758,"104":0.27239,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00229,"14":0.00229,"15":0.00229,_:"0","3.1":0,"3.2":0,"5.1":0.00229,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.01145,"14.1":0.00687,"15.1":0.00229,"15.2-15.3":0.00229,"15.4":0.00916,"15.5":0.02289,"15.6":0.03891,"16.0":0},G:{"8":0,"3.2":0.00196,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00587,"6.0-6.1":0.00065,"7.0-7.1":0.03197,"8.1-8.4":0,"9.0-9.2":0.00261,"9.3":0.01044,"10.0-10.2":0.00065,"10.3":0.00653,"11.0-11.2":0.01044,"11.3-11.4":0.00783,"12.0-12.1":0.00587,"12.2-12.5":0.35041,"13.0-13.1":0.00392,"13.2":0.00326,"13.3":0.0124,"13.4-13.7":0.04568,"14.0-14.4":0.15987,"14.5-14.8":0.37325,"15.0-15.1":0.06069,"15.2-15.3":0.08874,"15.4":0.19315,"15.5":1.28419,"15.6":3.80036,"16.0":0.06264},P:{"4":0.42473,"5.0-5.4":0.01011,"6.2-6.4":0,"7.2-7.4":0.71799,"8.2":0,"9.2":0.05056,"10.1":0.02023,"11.1-11.2":0.13146,"12.0":0.06068,"13.0":0.2427,"14.0":0.39439,"15.0":0.13146,"16.0":0.31349,"17.0":1.62812,"18.0":1.26407},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00894,"4.2-4.3":0.02235,"4.4":0,"4.4.3-4.4.4":0.15196},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01145,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":81.07079},S:{"2.5":0},R:{_:"0"},M:{"0":0.08482},Q:{"10.4":0},O:{"0":0.05398},H:{"0":0.16061}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/QA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/QA.js index ac8465ba70d..9693acf4e63 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/QA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/QA.js @@ -1 +1 @@ -module.exports={C:{"38":0.03135,"52":0.00314,"78":0.00627,"84":0.00314,"89":0.00627,"91":0.02822,"94":0.00314,"95":0.00941,"96":0.24767,"97":0.41069,"98":0.00314,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 87 88 90 92 93 99 3.5 3.6"},D:{"34":0.00314,"38":0.01568,"39":0.00314,"41":0.00627,"49":0.02822,"53":0.00627,"61":0.00314,"65":0.00627,"67":0.00627,"68":0.01568,"69":0.00627,"71":0.00314,"73":0.00627,"74":0.01254,"75":0.00941,"76":0.00627,"77":0.00314,"78":0.00941,"79":0.05957,"80":0.00941,"81":0.00627,"83":0.00941,"84":0.01881,"85":0.00941,"86":0.03449,"87":0.05643,"88":0.01881,"89":0.02195,"90":0.01568,"91":0.02822,"92":0.07524,"93":0.04703,"94":0.04389,"95":0.09092,"96":0.31037,"97":6.37032,"98":15.20162,"99":0.01568,"100":0.00941,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 40 42 43 44 45 46 47 48 50 51 52 54 55 56 57 58 59 60 62 63 64 66 70 72 101"},F:{"28":0.01568,"46":0.00627,"82":0.16616,"83":0.47339,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00314,"16":0.00314,"17":0.00941,"18":0.03135,"84":0.01254,"85":0.01881,"91":0.00941,"92":0.00941,"93":0.00314,"94":0.00941,"95":0.02822,"96":0.04389,"97":0.60506,"98":2.11299,_:"12 13 14 79 80 81 83 86 87 88 89 90"},E:{"4":0,"12":0.00627,"13":0.02822,"14":0.17243,"15":0.16616,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.00627,"12.1":0.02195,"13.1":0.12854,"14.1":0.64895,"15.1":0.36366,"15.2-15.3":0.73359,"15.4":0.00941},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00274,"6.0-6.1":0.00274,"7.0-7.1":0.01233,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.0507,"10.0-10.2":0.00137,"10.3":0.03699,"11.0-11.2":0.03562,"11.3-11.4":0.01233,"12.0-12.1":0.00548,"12.2-12.5":0.27815,"13.0-13.1":0.0137,"13.2":0.00411,"13.3":0.04385,"13.4-13.7":0.16031,"14.0-14.4":0.55355,"14.5-14.8":2.04156,"15.0-15.1":2.01142,"15.2-15.3":8.35397,"15.4":0.06988},P:{"4":0.12427,"5.0-5.4":0.01065,"6.2-6.4":0.01012,"7.2-7.4":0.05178,"8.2":0.03083,"9.2":0.04178,"10.1":0.03037,"11.1-11.2":0.07249,"12.0":0.01036,"13.0":0.04142,"14.0":0.0932,"15.0":0.11391,"16.0":1.99866},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00294,"4.4":0,"4.4.3-4.4.4":0.01766},A:{"11":0.16929,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.08926},Q:{"10.4":0},O:{"0":4.0784},H:{"0":0.98804},L:{"0":46.01359},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00313,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00313,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00313,"90":0,"91":0.0094,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.00627,"103":0.18491,"104":0.03447,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00313,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00313,"39":0,"40":0,"41":0.00313,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00313,"50":0,"51":0,"52":0,"53":0.00313,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00313,"69":0.00313,"70":0,"71":0.00313,"72":0,"73":0,"74":0.00627,"75":0.00313,"76":0.00313,"77":0,"78":0.00313,"79":0.0188,"80":0.00313,"81":0.00627,"83":0.00627,"84":0.0094,"85":0.00313,"86":0.0094,"87":0.01567,"88":0.00627,"89":0.0094,"90":0.00313,"91":0.0094,"92":0.0188,"93":0.00627,"94":0.00313,"95":0.00313,"96":0.00627,"97":0.00627,"98":0.0094,"99":0.0188,"100":0.01254,"101":0.01567,"102":0.06268,"103":1.63281,"104":4.92351,"105":0.0188,"106":0.00313,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00627,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00313,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00313,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00313,"60":0,"62":0,"63":0.05955,"64":0.04701,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00313,"71":0.00313,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00313,"86":0,"87":0,"88":0.00313,"89":0.16924,"90":0.0188,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00313,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00313,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00313,"99":0.00627,"100":0.00313,"101":0.0094,"102":0.0094,"103":0.26012,"104":0.70202,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00627,"14":0.02507,"15":0.0094,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00313,"13.1":0.02194,"14.1":0.05955,"15.1":0.01567,"15.2-15.3":0.01254,"15.4":0.04388,"15.5":0.16297,"15.6":0.26326,"16.0":0.00627},G:{"8":0.01081,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0018,"6.0-6.1":0.0054,"7.0-7.1":0.02702,"8.1-8.4":0,"9.0-9.2":0.0054,"9.3":0.05044,"10.0-10.2":0,"10.3":0.05225,"11.0-11.2":0.00721,"11.3-11.4":0.0054,"12.0-12.1":0.0036,"12.2-12.5":0.29366,"13.0-13.1":0.0054,"13.2":0.0036,"13.3":0.03243,"13.4-13.7":0.10629,"14.0-14.4":0.31528,"14.5-14.8":0.75306,"15.0-15.1":0.28105,"15.2-15.3":0.48283,"15.4":0.75486,"15.5":3.69145,"15.6":10.7951,"16.0":0.31708},P:{"4":0.16459,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.06172,"8.2":0,"9.2":0,"10.1":0.01029,"11.1-11.2":0.03086,"12.0":0.01029,"13.0":0.03086,"14.0":0.04115,"15.0":0.03086,"16.0":0.07201,"17.0":0.97723,"18.0":1.41955},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.16254},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02507,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":62.09654},S:{"2.5":0},R:{_:"0"},M:{"0":0.08926},Q:{"10.4":0},O:{"0":2.91118},H:{"0":0.96204}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RE.js index 0b4b1e861f8..b5f8be400d1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RE.js @@ -1 +1 @@ -module.exports={C:{"11":0.00445,"23":0.00445,"32":0.01335,"45":0.00445,"48":0.0178,"49":0.0178,"52":0.02225,"54":0.0089,"55":0.0089,"56":0.0089,"60":0.0178,"61":0.0356,"66":0.0089,"68":0.01335,"72":0.0089,"78":0.20915,"80":0.00445,"82":0.01335,"85":0.0089,"88":0.0267,"89":0.12015,"90":0.0089,"91":0.1424,"93":0.0089,"94":0.0178,"95":0.0534,"96":1.87345,"97":3.4087,_:"2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 33 34 35 36 37 38 39 40 41 42 43 44 46 47 50 51 53 57 58 59 62 63 64 65 67 69 70 71 73 74 75 76 77 79 81 83 84 86 87 92 98 99 3.5 3.6"},D:{"34":0.0178,"46":0.00445,"47":0.0089,"49":0.0801,"54":0.01335,"57":0.00445,"58":0.01335,"61":0.02225,"62":0.00445,"63":0.00445,"65":0.0178,"67":0.0089,"69":0.00445,"70":0.0089,"71":0.0178,"74":0.00445,"76":0.04005,"77":0.0089,"78":0.00445,"79":0.13795,"80":0.0267,"81":0.0089,"83":0.04005,"84":0.0178,"85":0.0267,"86":0.0178,"87":0.0801,"88":0.00445,"89":0.02225,"90":0.01335,"91":0.0267,"92":0.04005,"93":0.01335,"94":0.0356,"95":0.0801,"96":0.3649,"97":6.3813,"98":16.39825,"100":0.00445,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 48 50 51 52 53 55 56 59 60 64 66 68 72 73 75 99 101"},F:{"28":0.0089,"46":0.00445,"82":0.2581,"83":1.07245,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00445,"16":0.00445,"17":0.1691,"18":0.0267,"84":0.0178,"86":0.0089,"89":0.00445,"90":0.00445,"92":0.01335,"94":0.04895,"95":0.0178,"96":0.0534,"97":1.1214,"98":4.10735,_:"12 13 14 79 80 81 83 85 87 88 91 93"},E:{"4":0,"11":0.01335,"12":0.0178,"13":0.0712,"14":0.36935,"15":0.20025,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1","9.1":0.00445,"10.1":0.01335,"11.1":0.06675,"12.1":0.1246,"13.1":0.57405,"14.1":1.2549,"15.1":0.8544,"15.2-15.3":1.18815,"15.4":0.00445},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01055,"8.1-8.4":0.00176,"9.0-9.2":0,"9.3":0.14423,"10.0-10.2":0.01231,"10.3":0.08619,"11.0-11.2":0.0299,"11.3-11.4":0.01583,"12.0-12.1":0.02638,"12.2-12.5":0.48369,"13.0-13.1":0.07739,"13.2":0.00528,"13.3":0.05453,"13.4-13.7":0.19875,"14.0-14.4":0.68948,"14.5-14.8":3.10267,"15.0-15.1":2.72451,"15.2-15.3":9.83039,"15.4":0.08619},P:{"4":0.06207,"5.0-5.4":0.01065,"6.2-6.4":0.01012,"7.2-7.4":0.10345,"8.2":0.03083,"9.2":0.01035,"10.1":0.03037,"11.1-11.2":0.17587,"12.0":0.01035,"13.0":0.10345,"14.0":0.14483,"15.0":0.14483,"16.0":2.65868},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00171,"4.2-4.3":0.00114,"4.4":0,"4.4.3-4.4.4":0.036},A:{"11":0.1246,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.35526},Q:{"10.4":0},O:{"0":0.15543},H:{"0":0.16817},L:{"0":34.4385},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00458,"49":0.00458,"50":0,"51":0,"52":0.00916,"53":0,"54":0,"55":0.0229,"56":0.00916,"57":0,"58":0,"59":0,"60":0.00916,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00458,"67":0,"68":0.00916,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.00916,"78":0.06411,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00916,"85":0.01374,"86":0,"87":0.00458,"88":0.00458,"89":0.02747,"90":0,"91":0.07326,"92":0.00458,"93":0.01374,"94":0.00458,"95":0.00458,"96":0.00458,"97":0.01374,"98":0.00458,"99":0.00916,"100":0.01374,"101":0.01832,"102":0.10074,"103":2.23455,"104":0.3709,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00458,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00916,"48":0,"49":0.01832,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00458,"68":0,"69":0,"70":0.00458,"71":0.00458,"72":0,"73":0,"74":0.00458,"75":0,"76":0.03663,"77":0,"78":0.00458,"79":0.02747,"80":0.00458,"81":0.00458,"83":0.00458,"84":0.00458,"85":0.00916,"86":0.00458,"87":0.07784,"88":0,"89":0.00916,"90":0.00458,"91":0.01832,"92":0.00458,"93":0,"94":0.00458,"95":0.00458,"96":0.0229,"97":0.01832,"98":0.00916,"99":0.03205,"100":0.01832,"101":0.07326,"102":0.21979,"103":2.86645,"104":7.11577,"105":0.01832,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00458,"86":0,"87":0,"88":0.01374,"89":0.56322,"90":0.06411,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.00458,"17":0.00458,"18":0.00916,"79":0,"80":0,"81":0,"83":0,"84":0.00458,"85":0,"86":0,"87":0,"88":0,"89":0.00458,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.00458,"98":0.00458,"99":0.00458,"100":0.00458,"101":0.01832,"102":0.00916,"103":0.73722,"104":2.25287,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00458,"12":0,"13":0.01374,"14":0.06869,"15":0.00916,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00458,"10.1":0.00458,"11.1":0.01832,"12.1":0.05495,"13.1":0.16942,"14.1":0.25642,"15.1":0.03205,"15.2-15.3":0.06869,"15.4":0.15111,"15.5":0.45332,"15.6":0.83338,"16.0":0.00458},G:{"8":0.00429,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00215,"6.0-6.1":0,"7.0-7.1":0.01503,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.27266,"10.0-10.2":0,"10.3":0.08588,"11.0-11.2":0.04079,"11.3-11.4":0.01288,"12.0-12.1":0.0365,"12.2-12.5":0.4573,"13.0-13.1":0.01718,"13.2":0.00859,"13.3":0.04294,"13.4-13.7":0.12882,"14.0-14.4":0.50024,"14.5-14.8":1.00048,"15.0-15.1":0.32419,"15.2-15.3":0.47018,"15.4":0.78793,"15.5":5.54987,"15.6":11.40031,"16.0":0.30701},P:{"4":0.11407,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.03111,"8.2":0,"9.2":0.01037,"10.1":0,"11.1-11.2":0.07259,"12.0":0.01037,"13.0":0.04148,"14.0":0.12444,"15.0":0.03111,"16.0":0.16592,"17.0":1.24439,"18.0":1.60733},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00433,"4.2-4.3":0.01298,"4.4":0,"4.4.3-4.4.4":0.20764},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02747,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":52.0209},S:{"2.5":0},R:{_:"0"},M:{"0":0.42826},Q:{"10.4":0},O:{"0":0.34152},H:{"0":0.21042}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RO.js index 0dd3dce7d82..c74184e2c06 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RO.js @@ -1 +1 @@ -module.exports={C:{"52":0.17475,"55":0.00406,"68":0.00406,"72":0.00813,"78":0.02438,"79":0.00406,"81":0.00406,"82":0.00406,"84":0.02032,"88":0.01626,"89":0.00813,"90":0.00406,"91":0.06909,"92":0.00813,"93":0.00813,"94":0.01626,"95":0.04064,"96":1.11354,"97":1.79629,"98":0.01219,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 80 83 85 86 87 99 3.5 3.6"},D:{"38":0.00406,"49":0.13411,"51":0.01626,"60":0.34544,"61":0.00813,"67":0.01626,"68":0.00406,"69":0.08941,"70":0.00813,"71":0.01219,"72":0.00813,"73":0.00406,"74":0.00813,"75":0.00813,"76":0.02032,"77":0.00813,"78":0.01626,"79":0.04877,"80":0.01219,"81":0.03251,"83":0.01626,"84":0.04064,"85":0.02845,"86":0.03658,"87":0.10566,"88":0.02845,"89":0.03251,"90":0.04064,"91":0.04877,"92":0.04877,"93":0.32512,"94":0.06096,"95":0.05283,"96":0.34138,"97":8.5913,"98":19.26336,"99":0.01219,"100":0.00813,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 52 53 54 55 56 57 58 59 62 63 64 65 66 101"},F:{"36":0.00406,"78":0.00406,"82":0.53238,"83":1.99949,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01626,"84":0.00406,"89":0.00406,"92":0.00813,"94":0.00406,"95":0.01219,"96":0.02438,"97":0.508,"98":1.81254,_:"12 13 14 15 16 17 79 80 81 83 85 86 87 88 90 91 93"},E:{"4":0,"13":0.05283,"14":0.06909,"15":0.04877,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.00406,"11.1":0.00813,"12.1":0.02032,"13.1":0.06502,"14.1":0.20726,"15.1":0.12192,"15.2-15.3":0.27229,"15.4":0.00406},G:{"8":0,"3.2":0.01833,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.06987,"6.0-6.1":0.00115,"7.0-7.1":0.00573,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03092,"10.0-10.2":0.00229,"10.3":0.03551,"11.0-11.2":0.00916,"11.3-11.4":0.01603,"12.0-12.1":0.01718,"12.2-12.5":0.27259,"13.0-13.1":0.01374,"13.2":0.00687,"13.3":0.05039,"13.4-13.7":0.16035,"14.0-14.4":0.51655,"14.5-14.8":2.12461,"15.0-15.1":1.78215,"15.2-15.3":6.2444,"15.4":0.06872},P:{"4":0.09337,"5.0-5.4":0.01065,"6.2-6.4":0.01012,"7.2-7.4":0.10345,"8.2":0.03083,"9.2":0.01037,"10.1":0.03037,"11.1-11.2":0.11412,"12.0":0.0415,"13.0":0.12449,"14.0":0.31123,"15.0":0.16599,"16.0":3.16421},I:{"0":0,"3":0,"4":0.0147,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.01715,"4.4":0,"4.4.3-4.4.4":0.12251},A:{"11":0.28854,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.2078},Q:{"10.4":0},O:{"0":0.0475},H:{"0":0.2698},L:{"0":43.38381},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.03585,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00398,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00398,"79":0,"80":0,"81":0.00398,"82":0,"83":0.00398,"84":0.00398,"85":0,"86":0,"87":0,"88":0.00398,"89":0,"90":0.00398,"91":0.01992,"92":0,"93":0,"94":0.00398,"95":0.00398,"96":0.00398,"97":0.00398,"98":0.00398,"99":0.01195,"100":0.00797,"101":0.01195,"102":0.09161,"103":2.63675,"104":0.20313,"105":0.00398,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.00398,"40":0,"41":0.00398,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.07966,"50":0,"51":0.01992,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00398,"59":0,"60":0.18322,"61":0.00398,"62":0,"63":0.00398,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.04381,"70":0.00398,"71":0.01593,"72":0,"73":0.00398,"74":0.00398,"75":0.00398,"76":0.00398,"77":0.00398,"78":0.00398,"79":0.01992,"80":0.00398,"81":0.01593,"83":0.00797,"84":0.01195,"85":0.01593,"86":0.01195,"87":0.01992,"88":0.00797,"89":0.01195,"90":0.00797,"91":0.00797,"92":0.01992,"93":0.01195,"94":0.00797,"95":0.00797,"96":0.01593,"97":0.01593,"98":0.01593,"99":0.01593,"100":0.02788,"101":0.0478,"102":0.06771,"103":2.44158,"104":6.73525,"105":0.01992,"106":0.00398,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00398,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00398,"64":0.00398,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00398,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00398,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.04381,"86":0,"87":0.00398,"88":0.00797,"89":0.74084,"90":0.07966,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00398,"13":0,"14":0,"15":0.00398,"16":0,"17":0,"18":0.00398,"79":0,"80":0,"81":0,"83":0,"84":0.00398,"85":0,"86":0.00398,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00398,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00398,"99":0.00398,"100":0,"101":0.00797,"102":0.00797,"103":0.22305,"104":0.68508,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00398,"14":0.01593,"15":0.00398,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00398,"13.1":0.01992,"14.1":0.03585,"15.1":0.00797,"15.2-15.3":0.00797,"15.4":0.0239,"15.5":0.07568,"15.6":0.14339,"16.0":0.00398},G:{"8":0,"3.2":0.03311,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.12748,"6.0-6.1":0.00166,"7.0-7.1":0.00497,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.05298,"10.0-10.2":0.00166,"10.3":0.05464,"11.0-11.2":0.00662,"11.3-11.4":0.01325,"12.0-12.1":0.01987,"12.2-12.5":0.32947,"13.0-13.1":0.01325,"13.2":0.00828,"13.3":0.04636,"13.4-13.7":0.13576,"14.0-14.4":0.38908,"14.5-14.8":1.01491,"15.0-15.1":0.23841,"15.2-15.3":0.42053,"15.4":0.7318,"15.5":3.85932,"15.6":8.76169,"16.0":0.28146},P:{"4":0.12208,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01017,"8.2":0,"9.2":0.05087,"10.1":0,"11.1-11.2":0.08138,"12.0":0.03052,"13.0":0.07121,"14.0":0.24415,"15.0":0.05087,"16.0":0.16277,"17.0":1.34285,"18.0":1.78029},I:{"0":0,"3":0,"4":0.02016,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0252,"4.2-4.3":0.06049,"4.4":0,"4.4.3-4.4.4":0.26211},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00858,"9":0.00429,"10":0.00429,"11":0.0386,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":60.17074},S:{"2.5":0},R:{_:"0"},M:{"0":0.24068},Q:{"10.4":0},O:{"0":0.06619},H:{"0":0.29622}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RS.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RS.js index 43daff16e5f..0556dac3d82 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RS.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RS.js @@ -1 +1 @@ -module.exports={C:{"38":0.00352,"48":0.00704,"50":0.00704,"52":0.17248,"56":0.01056,"57":0.00352,"60":0.00704,"65":0.00704,"66":0.01408,"68":0.01056,"72":0.00704,"76":0.00704,"78":0.02464,"79":0.00704,"80":0.00352,"81":0.00352,"82":0.00704,"83":0.00704,"84":0.0176,"87":0.01056,"88":0.0352,"89":0.0176,"90":0.00704,"91":0.0352,"92":0.14432,"93":0.02816,"94":0.02464,"95":0.05984,"96":1.41152,"97":2.36896,"98":0.02816,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 49 51 53 54 55 58 59 61 62 63 64 67 69 70 71 73 74 75 77 85 86 99 3.5 3.6"},D:{"38":0.01056,"43":0.00352,"47":0.01408,"48":0.00352,"49":0.14784,"53":0.0176,"56":0.00352,"63":0.01056,"65":0.00704,"66":0.00352,"67":0.01056,"68":0.02112,"70":0.01408,"71":0.00352,"72":0.01056,"73":0.01056,"74":0.00704,"75":0.01056,"76":0.00704,"77":0.00704,"78":0.0176,"79":0.08448,"80":0.0176,"81":0.0176,"83":0.02816,"84":0.0528,"85":0.03872,"86":0.07392,"87":0.11968,"88":0.0352,"89":0.03872,"90":0.02112,"91":0.03872,"92":0.05632,"93":0.30624,"94":0.0528,"95":0.06688,"96":0.3344,"97":7.2864,"98":15.44576,"99":0.01056,"100":0.01408,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 44 45 46 50 51 52 54 55 57 58 59 60 61 62 64 69 101"},F:{"28":0.00704,"36":0.00704,"40":0.00352,"68":0.02112,"71":0.00704,"79":0.00352,"82":0.34144,"83":1.69664,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 69 70 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00352,"18":0.01408,"84":0.00352,"90":0.00352,"92":0.00704,"95":0.00352,"96":0.0176,"97":0.32032,"98":1.21088,_:"12 13 14 15 16 79 80 81 83 85 86 87 88 89 91 93 94"},E:{"4":0,"13":0.02816,"14":0.06336,"15":0.03168,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00704,"11.1":0.00704,"12.1":0.0176,"13.1":0.0704,"14.1":0.12672,"15.1":0.0528,"15.2-15.3":0.13728},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00129,"6.0-6.1":0,"7.0-7.1":0.02702,"8.1-8.4":0.00515,"9.0-9.2":0.00129,"9.3":0.03088,"10.0-10.2":0.00515,"10.3":0.07333,"11.0-11.2":0.02058,"11.3-11.4":0.03088,"12.0-12.1":0.01801,"12.2-12.5":0.63555,"13.0-13.1":0.02444,"13.2":0.01158,"13.3":0.08234,"13.4-13.7":0.26245,"14.0-14.4":0.70631,"14.5-14.8":3.29481,"15.0-15.1":1.63518,"15.2-15.3":5.95665,"15.4":0.03345},P:{"4":0.0314,"5.0-5.4":0.01034,"6.2-6.4":0.02028,"7.2-7.4":0.02094,"8.2":0.03042,"9.2":0.04056,"10.1":0.05069,"11.1-11.2":0.09421,"12.0":0.0314,"13.0":0.10468,"14.0":0.11514,"15.0":0.11514,"16.0":2.0726},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00336,"4.2-4.3":0.0084,"4.4":0,"4.4.3-4.4.4":0.0336},A:{"8":0.0153,"9":0.00765,"10":0.00383,"11":0.14922,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.17496},Q:{"10.4":0},O:{"0":0.02592},H:{"0":0.34969},L:{"0":46.34224},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.04997,"53":0,"54":0,"55":0,"56":0.00357,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00357,"69":0,"70":0,"71":0,"72":0.00357,"73":0.00357,"74":0,"75":0,"76":0,"77":0.00357,"78":0.00714,"79":0.00357,"80":0,"81":0.00357,"82":0,"83":0.00357,"84":0.00357,"85":0,"86":0,"87":0,"88":0.01071,"89":0.00357,"90":0,"91":0.01785,"92":0.0571,"93":0.00714,"94":0.00357,"95":0.00714,"96":0.00357,"97":0.00714,"98":0.00357,"99":0.02141,"100":0.00714,"101":0.01071,"102":0.04997,"103":1.04215,"104":0.21414,"105":0.00357,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00357,"39":0,"40":0,"41":0.00357,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00357,"48":0,"49":0.03212,"50":0,"51":0,"52":0.03569,"53":0.00714,"54":0,"55":0,"56":0,"57":0,"58":0.00357,"59":0,"60":0,"61":0.00714,"62":0,"63":0.00357,"64":0,"65":0.00357,"66":0,"67":0.00357,"68":0.01071,"69":0.00357,"70":0.00714,"71":0.01428,"72":0.00357,"73":0.00357,"74":0.00357,"75":0.00714,"76":0.00357,"77":0.00357,"78":0.00357,"79":0.04283,"80":0.00714,"81":0.01785,"83":0.01071,"84":0.01785,"85":0.02141,"86":0.03212,"87":0.02855,"88":0.01071,"89":0.01428,"90":0.00714,"91":0.01071,"92":0.01785,"93":0.00357,"94":0.00714,"95":0.01428,"96":0.01785,"97":0.02855,"98":0.01428,"99":0.02141,"100":0.02855,"101":0.02141,"102":0.07138,"103":2.11285,"104":5.89599,"105":0.01785,"106":0.00357,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00714,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00357,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00714,"64":0.00714,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00357,"72":0,"73":0,"74":0,"75":0,"76":0.00357,"77":0,"78":0,"79":0.00357,"80":0,"81":0,"82":0,"83":0,"84":0.00357,"85":0.03212,"86":0.00357,"87":0.00357,"88":0.00714,"89":0.62101,"90":0.08209,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00357,"16":0,"17":0,"18":0.00714,"79":0,"80":0.00357,"81":0,"83":0,"84":0.00357,"85":0.00357,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00357,"102":0.00714,"103":0.13919,"104":0.42471,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00357,"14":0.01428,"15":0.00357,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00357,"12.1":0.00357,"13.1":0.02498,"14.1":0.03926,"15.1":0.00714,"15.2-15.3":0.00714,"15.4":0.01428,"15.5":0.0571,"15.6":0.10707,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00253,"6.0-6.1":0,"7.0-7.1":0.05056,"8.1-8.4":0.01264,"9.0-9.2":0,"9.3":0.04298,"10.0-10.2":0.00506,"10.3":0.10112,"11.0-11.2":0.0177,"11.3-11.4":0.01517,"12.0-12.1":0.01011,"12.2-12.5":0.52835,"13.0-13.1":0.01517,"13.2":0.00758,"13.3":0.03792,"13.4-13.7":0.2073,"14.0-14.4":0.49296,"14.5-14.8":1.78225,"15.0-15.1":0.30336,"15.2-15.3":0.63453,"15.4":1.18058,"15.5":5.67538,"15.6":13.84338,"16.0":0.29831},P:{"4":0.10211,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01021,"8.2":0,"9.2":0.02042,"10.1":0,"11.1-11.2":0.05106,"12.0":0.01021,"13.0":0.06127,"14.0":0.07148,"15.0":0.04084,"16.0":0.0919,"17.0":0.95986,"18.0":1.42957},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.05615,"4.2-4.3":0.00727,"4.4":0,"4.4.3-4.4.4":0.04228},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00751,"9":0.00376,"10":0.00376,"11":0.05635,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":57.65561},S:{"2.5":0},R:{_:"0"},M:{"0":0.26367},Q:{"10.4":0},O:{"0":0.04502},H:{"0":0.36531}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RU.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RU.js index cde0f61f353..f5792e14a12 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RU.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RU.js @@ -1 +1 @@ -module.exports={C:{"4":0.00623,"33":0.03117,"38":0.01247,"44":0.10596,"50":0.0374,"51":0.02493,"52":0.25555,"55":0.26179,"56":0.0187,"60":0.01247,"68":0.0187,"69":0.0187,"70":0.03117,"71":0.01247,"72":0.0187,"75":0.01247,"77":0.0187,"78":0.0748,"79":0.0187,"80":0.04363,"81":0.0561,"82":0.02493,"83":0.0187,"84":0.0561,"86":0.02493,"87":0.0187,"88":0.0374,"89":0.04363,"90":0.04363,"91":0.10596,"92":0.04986,"93":0.02493,"94":0.0374,"95":0.11219,"96":1.08454,"97":1.50215,"98":0.01247,_:"2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 39 40 41 42 43 45 46 47 48 49 53 54 57 58 59 61 62 63 64 65 66 67 73 74 76 85 99 3.5 3.6"},D:{"38":0.00623,"41":0.01247,"47":0.00623,"48":0.04363,"49":0.13089,"51":0.22439,"53":0.01247,"56":0.03117,"57":0.00623,"58":0.00623,"59":0.00623,"61":0.01247,"62":0.00623,"63":0.00623,"64":0.01247,"65":0.00623,"66":0.01247,"67":0.02493,"68":0.02493,"69":0.02493,"70":0.02493,"71":0.02493,"72":0.0374,"73":0.04363,"74":0.0748,"75":0.02493,"76":0.03117,"77":0.0187,"78":0.02493,"79":0.44878,"80":0.10596,"81":0.06233,"83":0.11219,"84":0.24932,"85":0.20569,"86":0.32412,"87":0.35528,"88":0.24309,"89":0.18699,"90":0.41761,"91":0.16829,"92":0.25555,"93":0.5859,"94":0.13089,"95":0.18699,"96":1.14687,"97":8.69504,"98":16.99116,"99":0.01247,"100":0.0187,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 42 43 44 45 46 50 52 54 55 60 101"},F:{"36":0.04363,"54":0.00623,"60":0.00623,"68":0.01247,"70":0.00623,"71":0.01247,"72":0.01247,"73":0.01247,"75":0.0187,"76":0.0187,"77":0.13089,"78":0.0935,"79":0.11843,"80":0.09973,"81":0.0561,"82":1.03468,"83":4.47529,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 55 56 57 58 62 63 64 65 66 67 69 74 9.5-9.6 10.5 10.6 11.1 11.5 11.6","10.0-10.1":0,"12.1":0.02493},B:{"14":0.00623,"17":0.00623,"18":0.06233,"84":0.01247,"85":0.01247,"86":0.01247,"89":0.00623,"90":0.01247,"91":0.00623,"92":0.01247,"94":0.01247,"95":0.01247,"96":0.04363,"97":0.55474,"98":1.80134,_:"12 13 15 16 79 80 81 83 87 88 93"},E:{"4":0,"12":0.00623,"13":0.06856,"14":0.15583,"15":0.09973,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 10.1","5.1":0.11843,"9.1":0.04363,"11.1":0.01247,"12.1":0.02493,"13.1":0.14959,"14.1":0.40515,"15.1":0.27425,"15.2-15.3":0.44254,"15.4":0.00623},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00168,"5.0-5.1":0.00838,"6.0-6.1":0.00419,"7.0-7.1":0.00671,"8.1-8.4":0.00755,"9.0-9.2":0.0109,"9.3":0.05198,"10.0-10.2":0.01174,"10.3":0.05869,"11.0-11.2":0.02264,"11.3-11.4":0.02264,"12.0-12.1":0.02683,"12.2-12.5":0.31776,"13.0-13.1":0.02683,"13.2":0.01425,"13.3":0.0503,"13.4-13.7":0.20038,"14.0-14.4":0.50808,"14.5-14.8":1.5695,"15.0-15.1":1.55273,"15.2-15.3":3.88183,"15.4":0.02599},P:{"4":0.04483,"5.0-5.4":0.01121,"6.2-6.4":0.01012,"7.2-7.4":0.08966,"8.2":0.03083,"9.2":0.02242,"10.1":0.03037,"11.1-11.2":0.05604,"12.0":0.02242,"13.0":0.07845,"14.0":0.08966,"15.0":0.06725,"16.0":0.87419},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0029,"4.2-4.3":0.01161,"4.4":0,"4.4.3-4.4.4":0.05706},A:{"6":0.0135,"7":0.0135,"8":0.06752,"9":0.04051,"10":0.03376,"11":0.47942,_:"5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.13185},Q:{"10.4":0.00753},O:{"0":0.21472},H:{"0":0.78103},L:{"0":23.1652},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00557,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00557,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.08352,"51":0.00557,"52":0.22829,"53":0.08352,"54":0,"55":0.00557,"56":0.08352,"57":0,"58":0,"59":0.00557,"60":0.00557,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.0167,"69":0,"70":0.00557,"71":0,"72":0.06682,"73":0,"74":0,"75":0,"76":0.00557,"77":0.00557,"78":0.02784,"79":0.01114,"80":0.0167,"81":0.01114,"82":0.00557,"83":0.01114,"84":0.02227,"85":0.00557,"86":0.00557,"87":0.00557,"88":0.01114,"89":0.03341,"90":0.03341,"91":0.05568,"92":0.00557,"93":0.00557,"94":0.01114,"95":0.09466,"96":0.02227,"97":0.0167,"98":0.0167,"99":0.03898,"100":0.02227,"101":0.03898,"102":0.07238,"103":1.16371,"104":0.23942,"105":0.00557,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0.00557,"20":0,"21":0,"22":0.01114,"23":0,"24":0,"25":0,"26":0.00557,"27":0,"28":0.00557,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00557,"39":0,"40":0,"41":0.00557,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00557,"48":0,"49":0.06125,"50":0,"51":0.06125,"52":0.03341,"53":0.00557,"54":0,"55":0,"56":0.0167,"57":0.00557,"58":0,"59":0.00557,"60":0,"61":0.00557,"62":0,"63":0.00557,"64":0.01114,"65":0.00557,"66":0.06125,"67":0.00557,"68":0.01114,"69":0.02227,"70":0.13363,"71":0.01114,"72":0.01114,"73":0.01114,"74":0.04454,"75":0.01114,"76":0.0167,"77":0.01114,"78":0.0167,"79":0.08352,"80":0.02784,"81":0.05568,"83":0.06682,"84":0.1225,"85":0.10579,"86":0.17261,"87":0.16704,"88":0.05568,"89":0.06125,"90":0.07795,"91":0.06125,"92":0.08352,"93":0.05011,"94":0.06125,"95":0.03898,"96":0.08909,"97":0.1392,"98":0.11136,"99":0.08352,"100":0.07795,"101":0.23942,"102":0.41203,"103":3.24614,"104":7.83974,"105":0.02227,"106":0.00557,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.02784,"37":0.00557,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00557,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.00557,"55":0,"56":0,"57":0,"58":0.00557,"60":0.00557,"62":0,"63":0.01114,"64":0.00557,"65":0,"66":0,"67":0.00557,"68":0.00557,"69":0.00557,"70":0.00557,"71":0.01114,"72":0.00557,"73":0.00557,"74":0.00557,"75":0.00557,"76":0.00557,"77":0.01114,"78":0.00557,"79":0.0167,"80":0.00557,"81":0.00557,"82":0.02784,"83":0.01114,"84":0.01114,"85":0.11136,"86":0.02784,"87":0.02227,"88":0.04454,"89":2.47776,"90":0.33965,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.01114},B:{"12":0,"13":0,"14":0.00557,"15":0.00557,"16":0.00557,"17":0.01114,"18":0.05568,"79":0,"80":0,"81":0,"83":0.00557,"84":0.00557,"85":0.00557,"86":0.01114,"87":0.00557,"88":0,"89":0.00557,"90":0.00557,"91":0,"92":0.00557,"93":0,"94":0.00557,"95":0.00557,"96":0.00557,"97":0.00557,"98":0.00557,"99":0.00557,"100":0.00557,"101":0.01114,"102":0.0167,"103":0.37306,"104":1.03008,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.02784,"14":0.04454,"15":0.01114,_:"0","3.1":0,"3.2":0,"5.1":0.00557,"6.1":0,"7.1":0,"9.1":0.02227,"10.1":0,"11.1":0.00557,"12.1":0.01114,"13.1":0.05011,"14.1":0.10022,"15.1":0.02784,"15.2-15.3":0.03341,"15.4":0.06125,"15.5":0.15034,"15.6":0.25056,"16.0":0.00557},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00487,"6.0-6.1":0.00325,"7.0-7.1":0.02274,"8.1-8.4":0.00974,"9.0-9.2":0.06496,"9.3":0.09582,"10.0-10.2":0.01299,"10.3":0.10394,"11.0-11.2":0.06821,"11.3-11.4":0.07958,"12.0-12.1":0.05846,"12.2-12.5":0.9208,"13.0-13.1":0.06496,"13.2":0.02274,"13.3":0.14454,"13.4-13.7":0.38813,"14.0-14.4":1.26834,"14.5-14.8":2.11606,"15.0-15.1":0.73892,"15.2-15.3":1.75229,"15.4":0.97115,"15.5":2.77053,"15.6":4.38641,"16.0":0.1559},P:{"4":0.11402,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.06219,"8.2":0,"9.2":0.01037,"10.1":0,"11.1-11.2":0.04146,"12.0":0.01037,"13.0":0.04146,"14.0":0.0311,"15.0":0.02073,"16.0":0.08292,"17.0":0.42497,"18.0":0.4457},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02203,"4.2-4.3":0.04774,"4.4":0,"4.4.3-4.4.4":0.23136},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.02333,"9":0.01167,"10":0.00583,"11":0.20416,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":42.90707},S:{"2.5":0.00443},R:{_:"0"},M:{"0":0.13739},Q:{"10.4":0.00443},O:{"0":0.18171},H:{"0":0.7217}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RW.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RW.js index 3bc9e53465e..e4c75ca2340 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RW.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/RW.js @@ -1 +1 @@ -module.exports={C:{"28":0.00471,"31":0.01884,"36":0.00942,"37":0.00471,"40":0.00471,"47":0.02356,"50":0.06124,"52":0.01884,"56":0.00942,"66":0.00471,"69":0.00471,"71":0.00471,"72":0.00942,"75":0.00471,"78":0.03769,"80":0.00471,"82":0.00942,"88":0.00942,"89":0.02356,"91":0.1696,"93":0.00942,"94":0.01884,"95":0.03298,"96":1.13535,"97":1.7996,"98":0.11306,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 32 33 34 35 38 39 41 42 43 44 45 46 48 49 51 53 54 55 57 58 59 60 61 62 63 64 65 67 68 70 73 74 76 77 79 81 83 84 85 86 87 90 92 99 3.5 3.6"},D:{"25":0.00471,"29":0.00471,"38":0.01413,"41":0.05653,"43":0.01884,"49":0.04711,"58":0.00471,"60":0.02827,"61":0.00471,"63":0.01413,"65":0.00942,"66":0.00471,"68":0.00471,"69":0.02827,"70":0.00942,"71":0.0424,"72":0.00942,"73":0.00471,"74":0.0424,"75":0.00471,"76":0.01413,"77":0.01413,"78":0.00471,"79":0.03298,"80":0.0424,"81":0.01884,"83":0.01413,"84":0.08009,"85":0.01413,"86":0.0424,"87":0.08009,"88":0.01884,"89":0.06595,"90":0.03298,"91":0.07067,"92":0.0848,"93":0.09893,"94":0.212,"95":0.10364,"96":0.48052,"97":8.66824,"98":19.80033,"99":0.0424,"100":0.04711,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 30 31 32 33 34 35 36 37 39 40 42 44 45 46 47 48 50 51 52 53 54 55 56 57 59 62 64 67 101"},F:{"42":0.03298,"79":0.00942,"82":0.09893,"83":0.85269,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.19786,"13":0.13662,"14":0.0424,"15":0.01884,"16":0.02356,"17":0.03298,"18":0.16017,"84":0.03298,"85":0.01884,"87":0.00942,"89":0.01884,"90":0.00942,"91":0.00942,"92":0.0424,"93":0.00471,"94":0.00942,"95":0.01884,"96":0.07538,"97":3.82533,"98":3.19877,_:"79 80 81 83 86 88"},E:{"4":0,"14":0.03769,"15":0.02356,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 6.1 7.1 9.1 15.4","5.1":0.00471,"10.1":0.00471,"11.1":0.01884,"12.1":0.03298,"13.1":0.06595,"14.1":0.22142,"15.1":0.06124,"15.2-15.3":0.19786},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00178,"6.0-6.1":0,"7.0-7.1":0.01006,"8.1-8.4":0,"9.0-9.2":0.00237,"9.3":0.02841,"10.0-10.2":0.00592,"10.3":0.05209,"11.0-11.2":0.01184,"11.3-11.4":0.0148,"12.0-12.1":0.03847,"12.2-12.5":0.55106,"13.0-13.1":0.0148,"13.2":0.00474,"13.3":0.04676,"13.4-13.7":0.10536,"14.0-14.4":0.59131,"14.5-14.8":0.96124,"15.0-15.1":0.9938,"15.2-15.3":2.45342,"15.4":0.03019},P:{"4":0.12615,"5.0-5.4":0.01121,"6.2-6.4":0.01012,"7.2-7.4":0.12615,"8.2":0.03083,"9.2":0.07359,"10.1":0.03037,"11.1-11.2":0.12615,"12.0":0.02102,"13.0":0.05256,"14.0":0.09461,"15.0":0.09461,"16.0":0.97764},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00098,"4.2-4.3":0.00146,"4.4":0,"4.4.3-4.4.4":0.02929},A:{"11":0.15075,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00529},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0.21156},Q:{"10.4":0},O:{"0":0.26974},H:{"0":7.561},L:{"0":39.08053},S:{"2.5":0.03173}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00653,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00653,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00653,"53":0,"54":0,"55":0,"56":0.00653,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00653,"89":0,"90":0,"91":0.00653,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00653,"100":0.00653,"101":0.01958,"102":0.06525,"103":0.99833,"104":0.18923,"105":0.00653,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00653,"39":0,"40":0.00653,"41":0,"42":0,"43":0.01958,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00653,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00653,"56":0,"57":0,"58":0.00653,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.01305,"66":0,"67":0,"68":0,"69":0.00653,"70":0.00653,"71":0,"72":0,"73":0,"74":0.01305,"75":0.00653,"76":0,"77":0.01305,"78":0.00653,"79":0.01958,"80":0.0522,"81":0.01305,"83":0.01958,"84":0.00653,"85":0.00653,"86":0.09788,"87":0.0261,"88":0.01305,"89":0.00653,"90":0.00653,"91":0.01305,"92":0.00653,"93":0.01305,"94":0.00653,"95":0.03263,"96":0.01958,"97":0.0261,"98":0.03915,"99":0.05873,"100":0.0522,"101":0.0522,"102":0.12398,"103":4.22168,"104":9.2655,"105":0.04568,"106":0.03915,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.01305,"25":0,"26":0,"27":0,"28":0.01305,"29":0,"30":0,"31":0,"32":0.01305,"33":0.00653,"34":0,"35":0,"36":0.00653,"37":0.00653,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00653,"48":0,"49":0,"50":0,"51":0.00653,"52":0,"53":0.00653,"54":0,"55":0,"56":0.04568,"57":0,"58":0.00653,"60":0.18923,"62":0,"63":0.54158,"64":0.1566,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00653,"80":0,"81":0,"82":0.00653,"83":0,"84":0,"85":0.00653,"86":0.00653,"87":0,"88":0.01305,"89":0.48285,"90":0.0522,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00653},B:{"12":0.03263,"13":0.01305,"14":0.01305,"15":0.00653,"16":0.01305,"17":0.00653,"18":0.03915,"79":0,"80":0,"81":0,"83":0,"84":0.01305,"85":0.00653,"86":0,"87":0,"88":0,"89":0.00653,"90":0.00653,"91":0,"92":0.01305,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00653,"100":0.00653,"101":0.00653,"102":0.01958,"103":7.91483,"104":15.52298,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00653,"14":0.01305,"15":0.00653,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00653,"11.1":0.00653,"12.1":0.01958,"13.1":0.0261,"14.1":0.03915,"15.1":0.00653,"15.2-15.3":0.01305,"15.4":0.01305,"15.5":0.05873,"15.6":0.06525,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00368,"6.0-6.1":0,"7.0-7.1":0.01399,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.1171,"10.0-10.2":0.00368,"10.3":0.0302,"11.0-11.2":0.00663,"11.3-11.4":0.04124,"12.0-12.1":0.02209,"12.2-12.5":0.73574,"13.0-13.1":0.01694,"13.2":0.00368,"13.3":0.0302,"13.4-13.7":0.07659,"14.0-14.4":0.33362,"14.5-14.8":0.49418,"15.0-15.1":0.15908,"15.2-15.3":0.33657,"15.4":0.40506,"15.5":1.36396,"15.6":3.08142,"16.0":0.08617},P:{"4":0.10953,"5.0-5.4":0.00996,"6.2-6.4":0,"7.2-7.4":0.10953,"8.2":0,"9.2":0.01991,"10.1":0,"11.1-11.2":0.08961,"12.0":0.00996,"13.0":0.00996,"14.0":0.01991,"15.0":0.01991,"16.0":0.0697,"17.0":0.30867,"18.0":0.25889},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00286,"4.2-4.3":0.01049,"4.4":0,"4.4.3-4.4.4":0.14495},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0522,"5.5":0},J:{"7":0,"10":0.00348},N:{"10":0,"11":0},L:{"0":42.0004},S:{"2.5":0.03128},R:{_:"0"},M:{"0":0.14943},Q:{"10.4":0},O:{"0":0.21198},H:{"0":4.37886}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SA.js index b182ff18b48..efba6282d7a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SA.js @@ -1 +1 @@ -module.exports={C:{"34":0.00246,"52":0.00739,"78":0.01725,"84":0.00246,"91":0.01232,"94":0.00246,"95":0.00986,"96":0.26611,"97":0.44845,"98":0.00493,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 87 88 89 90 92 93 99 3.5 3.6"},D:{"11":0.00493,"34":0.00246,"38":0.00739,"43":0.00493,"47":0.00493,"49":0.04189,"53":0.00493,"56":0.00986,"63":0.00739,"64":0.00493,"65":0.00493,"66":0.00246,"67":0.01232,"68":0.00493,"69":0.00739,"70":0.00246,"71":0.00739,"72":0.00246,"74":0.01232,"75":0.00986,"76":0.00493,"77":0.00739,"78":0.01232,"79":0.06406,"80":0.01478,"81":0.00739,"83":0.02218,"84":0.01478,"85":0.02957,"86":0.0271,"87":0.27597,"88":0.01971,"89":0.02218,"90":0.01232,"91":0.03203,"92":0.07392,"93":0.31046,"94":0.02957,"95":0.05421,"96":0.30061,"97":4.928,"98":11.57834,"99":0.00739,"100":0.01232,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 44 45 46 48 50 51 52 54 55 57 58 59 60 61 62 73 101"},F:{"28":0.00986,"36":0.00246,"46":0.00739,"72":0.00493,"73":0.00493,"75":0.00493,"76":0.00493,"77":0.01232,"78":0.00739,"79":0.00986,"80":0.01232,"81":0.01478,"82":0.09856,"83":0.08624,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 74 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00493,"14":0.00493,"15":0.00493,"16":0.00493,"17":0.00493,"18":0.01971,"84":0.00493,"89":0.00493,"90":0.00246,"91":0.00246,"92":0.00986,"93":0.00493,"94":0.00739,"95":0.01971,"96":0.0345,"97":0.46077,"98":1.67798,_:"13 79 80 81 83 85 86 87 88"},E:{"4":0,"12":0.00246,"13":0.0271,"14":0.18726,"15":0.13306,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 9.1","5.1":0.00246,"10.1":0.00246,"11.1":0.01232,"12.1":0.02464,"13.1":0.0887,"14.1":0.47802,"15.1":0.30307,"15.2-15.3":0.41149,"15.4":0.00493},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.02477,"8.1-8.4":0.00354,"9.0-9.2":0,"9.3":0.04955,"10.0-10.2":0.00708,"10.3":0.03539,"11.0-11.2":0.02124,"11.3-11.4":0.02124,"12.0-12.1":0.06017,"12.2-12.5":0.81404,"13.0-13.1":0.12741,"13.2":0.08848,"13.3":0.33269,"13.4-13.7":0.7928,"14.0-14.4":3.88967,"14.5-14.8":7.83597,"15.0-15.1":7.55991,"15.2-15.3":13.62978,"15.4":0.08494},P:{"4":0.05168,"5.0-5.4":0.01034,"6.2-6.4":0.04087,"7.2-7.4":0.1137,"8.2":0.16348,"9.2":0.01034,"10.1":0.01033,"11.1-11.2":0.07236,"12.0":0.02067,"13.0":0.10336,"14.0":0.16538,"15.0":0.14471,"16.0":1.83989},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00188,"4.4":0,"4.4.3-4.4.4":0.0358},A:{"11":0.19219,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.08291},Q:{"10.4":0},O:{"0":0.94966},H:{"0":0.11417},L:{"0":35.61174},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.002,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.004,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.002,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.002,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.002,"100":0.002,"101":0.002,"102":0.004,"103":0.1019,"104":0.01998,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.002,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.002,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.002,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.002,"68":0.002,"69":0.002,"70":0,"71":0,"72":0.002,"73":0.002,"74":0.002,"75":0.002,"76":0,"77":0,"78":0.002,"79":0.00999,"80":0.002,"81":0.004,"83":0.002,"84":0.002,"85":0.004,"86":0.004,"87":0.00999,"88":0.004,"89":0.002,"90":0.002,"91":0.004,"92":0.02198,"93":0.004,"94":0.002,"95":0.002,"96":0.00799,"97":0.00599,"98":0.00599,"99":0.00799,"100":0.00999,"101":0.01199,"102":0.03796,"103":0.63337,"104":1.84016,"105":0.00799,"106":0.002,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.002,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.002,"64":0.002,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.002,"80":0,"81":0,"82":0.002,"83":0.002,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.03796,"90":0.002,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.002,"15":0,"16":0,"17":0,"18":0.004,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.002,"93":0,"94":0,"95":0,"96":0.002,"97":0.002,"98":0.002,"99":0.002,"100":0.002,"101":0.00999,"102":0.00599,"103":0.12587,"104":0.28971,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.004,"14":0.01998,"15":0.00599,_:"0","3.1":0,"3.2":0,"5.1":0.002,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.002,"12.1":0.002,"13.1":0.01199,"14.1":0.04196,"15.1":0.00999,"15.2-15.3":0.00799,"15.4":0.02797,"15.5":0.09391,"15.6":0.12188,"16.0":0.002},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01839,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.06896,"10.0-10.2":0,"10.3":0.25745,"11.0-11.2":0.01379,"11.3-11.4":0.01839,"12.0-12.1":0.05057,"12.2-12.5":0.6988,"13.0-13.1":0.08735,"13.2":0.05977,"13.3":0.19309,"13.4-13.7":0.58387,"14.0-14.4":2.85497,"14.5-14.8":4.0227,"15.0-15.1":1.71022,"15.2-15.3":2.0964,"15.4":3.6779,"15.5":12.37612,"15.6":17.00107,"16.0":0.15171},P:{"4":0.04121,"5.0-5.4":0.0103,"6.2-6.4":0,"7.2-7.4":0.09273,"8.2":0,"9.2":0.02061,"10.1":0,"11.1-11.2":0.04121,"12.0":0.0103,"13.0":0.06182,"14.0":0.09273,"15.0":0.04121,"16.0":0.15455,"17.0":0.82424,"18.0":1.00969},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01031,"4.2-4.3":0.00687,"4.4":0,"4.4.3-4.4.4":0.11681},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02797,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":46.14807},S:{"2.5":0},R:{_:"0"},M:{"0":0.08802},Q:{"10.4":0},O:{"0":0.58415},H:{"0":0.12121}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SB.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SB.js index da46d3f2272..0867fbdfbd1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SB.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SB.js @@ -1 +1 @@ -module.exports={C:{"47":0.04251,"68":0.00981,"78":0.01308,"83":0.01962,"87":0.00327,"88":0.00981,"90":0.00327,"91":0.00327,"94":0.01635,"95":0.02943,"96":0.54609,"97":0.72267,"98":0.12426,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 82 84 85 86 89 92 93 99 3.5 3.6"},D:{"11":0.00654,"70":0.00654,"71":0.03597,"75":0.10791,"78":0.00654,"80":0.00981,"81":0.03597,"83":0.02289,"85":0.01308,"86":0.02616,"87":0.03597,"88":0.05886,"89":0.04251,"90":0.01962,"91":0.04578,"93":0.00654,"95":0.01962,"96":0.1962,"97":4.08423,"98":9.33258,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 72 73 74 76 77 79 84 92 94 99 100 101"},F:{"47":0.00654,"83":0.16677,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01635,"13":0.05232,"14":0.40875,"15":0.08502,"16":0.08502,"17":0.06213,"18":0.51993,"84":0.01308,"85":0.0327,"86":0.01635,"87":0.00654,"88":0.01308,"89":0.05559,"92":0.02943,"93":0.17004,"94":0.03924,"96":0.05559,"97":0.73575,"98":1.91622,_:"79 80 81 83 90 91 95"},E:{"4":0,"13":0.01962,"14":0.00327,"15":0.00327,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00327,"12.1":0.01962,"13.1":0.05232,"14.1":0.04251,"15.1":0.09156,"15.2-15.3":0.03597},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.02248,"8.1-8.4":0,"9.0-9.2":0.0017,"9.3":0.03287,"10.0-10.2":0,"10.3":0.14376,"11.0-11.2":0.06064,"11.3-11.4":0.007,"12.0-12.1":0.01209,"12.2-12.5":0.2854,"13.0-13.1":0.007,"13.2":0.03626,"13.3":0.02947,"13.4-13.7":0.07082,"14.0-14.4":0.27501,"14.5-14.8":0.34096,"15.0-15.1":0.14715,"15.2-15.3":0.64735,"15.4":0},P:{"4":0.17359,"5.0-5.4":0.01029,"6.2-6.4":0.04084,"7.2-7.4":0.24506,"8.2":0.03042,"9.2":0.25528,"10.1":0.04084,"11.1-11.2":0.34718,"12.0":0.14295,"13.0":0.61266,"14.0":0.26549,"15.0":0.0919,"16.0":0.74541},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.05804,"4.2-4.3":0.01451,"4.4":0,"4.4.3-4.4.4":0.24376},A:{"10":0.02972,"11":0.99052,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.07403},Q:{"10.4":0},O:{"0":5.68685},H:{"0":2.89267},L:{"0":62.27555},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00375,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00375,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00375,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00375,"91":0,"92":0.01875,"93":0,"94":0.16875,"95":0,"96":0.00375,"97":0,"98":0,"99":0,"100":0.00375,"101":0.21,"102":0.01875,"103":0.555,"104":0.195,"105":0.00375,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.0075,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.01125,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.0075,"41":0,"42":0,"43":0.00375,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.015,"70":0.0075,"71":0.00375,"72":0,"73":0,"74":0,"75":0.00375,"76":0,"77":0.015,"78":0.00375,"79":0.00375,"80":0.00375,"81":0.00375,"83":0.70125,"84":0,"85":0,"86":0,"87":0.0075,"88":0,"89":0,"90":0.01125,"91":0.00375,"92":0.0075,"93":0.00375,"94":0,"95":0,"96":0,"97":0.00375,"98":0,"99":0.01125,"100":0.0225,"101":0.01125,"102":0.08625,"103":1.77,"104":3.95625,"105":0.03,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0.00375,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00375,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00375,"57":0,"58":0.0075,"60":0.00375,"62":0,"63":0.04125,"64":0.0375,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.015,"85":0,"86":0,"87":0,"88":0,"89":0.13125,"90":0.01875,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00375},B:{"12":0.02625,"13":0.01875,"14":0.5175,"15":0.0525,"16":0.01875,"17":0.03,"18":0.16875,"79":0,"80":0.00375,"81":0,"83":0.00375,"84":0.015,"85":0.01875,"86":0,"87":0,"88":0.00375,"89":0.01125,"90":0.0075,"91":0,"92":0.01875,"93":0.00375,"94":0,"95":0.01875,"96":0.0075,"97":0.00375,"98":0.00375,"99":0.01125,"100":0,"101":0.04875,"102":0.01875,"103":0.65625,"104":1.0125,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.0075,"14":0.00375,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.0075,"10.1":0,"11.1":0.0075,"12.1":0.0075,"13.1":0.0075,"14.1":0.02625,"15.1":0.0075,"15.2-15.3":0,"15.4":0.00375,"15.5":0.06,"15.6":0.0375,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00223,"9.0-9.2":0,"9.3":0.05474,"10.0-10.2":0.00223,"10.3":0.06479,"11.0-11.2":0.00894,"11.3-11.4":0.01229,"12.0-12.1":0.00223,"12.2-12.5":0.18878,"13.0-13.1":0,"13.2":0.00223,"13.3":0.02122,"13.4-13.7":0.42951,"14.0-14.4":1.42424,"14.5-14.8":0.7596,"15.0-15.1":0.02513,"15.2-15.3":0.22844,"15.4":0.16365,"15.5":1.13828,"15.6":1.0087,"16.0":0.05027},P:{"4":0.40157,"5.0-5.4":0,"6.2-6.4":0.03012,"7.2-7.4":0.38149,"8.2":0.01004,"9.2":0.10039,"10.1":0,"11.1-11.2":0.03012,"12.0":0.2811,"13.0":0.55216,"14.0":0.08031,"15.0":0.06024,"16.0":0.32125,"17.0":0.31122,"18.0":0.32125},I:{"0":0,"3":0,"4":0.00772,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00772,"4.4":0,"4.4.3-4.4.4":0.20331},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.01125,"10":0,"11":0.27,"5.5":0},J:{"7":0,"10":0.025},N:{"10":0,"11":0},L:{"0":65.67625},S:{"2.5":0},R:{_:"0"},M:{"0":1.15},Q:{"10.4":0},O:{"0":7.49375},H:{"0":1.08875}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SC.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SC.js index 2b814623a48..3c05edc4b6f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SC.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SC.js @@ -1 +1 @@ -module.exports={C:{"38":0.00861,"50":0.00431,"55":0.02584,"56":0.02153,"59":0.03014,"60":0.03875,"61":0.05167,"62":0.02153,"63":0.02153,"68":0.05598,"69":0.03014,"70":0.03875,"71":0.03445,"72":0.05167,"73":0.06459,"74":0.04737,"75":0.04737,"76":0.04306,"77":0.0732,"78":0.11196,"79":0.04306,"80":0.0689,"81":0.0732,"82":0.13349,"83":0.03875,"84":0.0732,"86":0.00861,"87":0.00861,"88":0.01292,"89":0.01292,"90":0.00431,"91":0.52533,"92":0.01722,"94":0.01722,"95":0.05598,"96":0.4306,"97":0.84828,"98":0.01722,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 49 51 52 53 54 57 58 64 65 66 67 85 93 99 3.5 3.6"},D:{"33":0.01722,"43":0.00861,"48":0.03014,"53":0.01292,"55":0.01722,"59":0.1421,"63":0.00431,"65":0.00861,"66":0.00431,"68":0.87412,"69":0.27128,"70":0.27128,"71":0.23683,"72":0.89995,"73":0.1464,"74":0.38754,"75":0.24975,"76":0.25836,"77":0.25836,"78":0.53825,"79":0.58562,"80":0.67174,"81":0.37032,"83":0.62006,"84":0.58131,"85":0.8612,"86":0.84398,"87":1.02052,"88":0.49088,"89":0.64159,"90":0.59853,"91":0.16793,"92":1.25735,"93":0.7923,"94":0.02584,"95":0.03445,"96":1.66642,"97":2.27787,"98":4.89592,"99":0.05167,"100":0.00861,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 44 45 46 47 49 50 51 52 54 56 57 58 60 61 62 64 67 101"},F:{"46":0.00861,"47":0.00431,"48":0.00861,"49":0.00861,"51":0.00861,"53":0.04306,"54":0.05598,"55":0.05167,"56":0.01292,"57":0.00431,"60":0.01292,"62":0.00431,"63":0.00431,"65":0.00861,"66":0.00861,"67":0.05167,"68":0.09473,"69":0.00431,"72":0.01292,"73":0.05598,"74":0.00861,"75":0.01292,"76":0.01292,"77":0.05598,"78":0.02153,"79":0.04737,"80":0.03445,"81":0.01292,"82":0.04737,"83":0.46935,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 50 52 58 64 70 71 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.01292,"15":0.00861,"16":0.03875,"17":0.05167,"18":0.29281,"79":0.02153,"80":0.08612,"81":0.06028,"83":0.05598,"84":0.07751,"85":0.03445,"86":0.05167,"87":0.03445,"88":0.04737,"89":0.10765,"90":0.04306,"91":0.00431,"92":0.02153,"95":0.01722,"96":0.05167,"97":0.33587,"98":0.85689,_:"12 13 93 94"},E:{"4":0,"13":0.11626,"14":0.05598,"15":0.05167,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1 11.1","9.1":2.09702,"12.1":0.01292,"13.1":0.06459,"14.1":0.21099,"15.1":1.77407,"15.2-15.3":3.84956,"15.4":0.01722},G:{"8":0.04188,"3.2":0.00966,"4.0-4.1":0.00966,"4.2-4.3":0.06764,"5.0-5.1":0.07409,"6.0-6.1":0.11918,"7.0-7.1":0.14495,"8.1-8.4":0.20615,"9.0-9.2":0.17072,"9.3":0.28024,"10.0-10.2":0.22226,"10.3":0.24159,"11.0-11.2":0.37688,"11.3-11.4":0.26736,"12.0-12.1":0.34789,"12.2-12.5":0.73443,"13.0-13.1":0.21904,"13.2":0.08697,"13.3":0.28024,"13.4-13.7":0.89549,"14.0-14.4":0.47673,"14.5-14.8":0.53794,"15.0-15.1":5.11522,"15.2-15.3":21.23718,"15.4":0.04188},P:{"4":0.15464,"5.0-5.4":0.03093,"6.2-6.4":0.07216,"7.2-7.4":0.2268,"8.2":0.03042,"9.2":0.12371,"10.1":0.29896,"11.1-11.2":0.35051,"12.0":0.16495,"13.0":0.2268,"14.0":0.10309,"15.0":0.08247,"16.0":1.10308},I:{"0":0,"3":0,"4":0.00444,"2.1":0,"2.2":0.005,"2.3":0.00111,"4.1":0.01055,"4.2-4.3":0.02555,"4.4":0,"4.4.3-4.4.4":0.06722},A:{"8":0.03478,"9":0.02484,"10":0.00994,"11":0.51175,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.31317},Q:{"10.4":0.01708},O:{"0":0.88257},H:{"0":0.31266},L:{"0":20.14343},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.2166,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.01057,"52":0,"53":0,"54":0,"55":0.00528,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.0634,"69":0.02642,"70":0.03698,"71":0.12151,"72":0.04226,"73":0.05811,"74":0.04755,"75":0.04755,"76":0.10038,"77":0.03698,"78":0.04226,"79":0.03698,"80":0.03698,"81":0.62339,"82":0.04755,"83":0.04226,"84":0.07925,"85":0,"86":0.00528,"87":0,"88":0.00528,"89":0,"90":0,"91":0.07925,"92":0,"93":0,"94":0,"95":0.00528,"96":0,"97":0.00528,"98":0.00528,"99":0,"100":0.03698,"101":0.00528,"102":0.10566,"103":1.12,"104":0.13208,"105":0.00528,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.01585,"46":0.00528,"47":0,"48":0.00528,"49":0,"50":0,"51":0,"52":0,"53":0.00528,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.12679,"60":0,"61":0,"62":0.00528,"63":0.00528,"64":0,"65":0,"66":0,"67":0,"68":0.08453,"69":0.06868,"70":0.12151,"71":0.07396,"72":1.59547,"73":0.03698,"74":0.11094,"75":0.0634,"76":0.2166,"77":0.23774,"78":0.10566,"79":0.18491,"80":0.23774,"81":0.13208,"83":0.20604,"84":0.0634,"85":0.29585,"86":0.32755,"87":0.54943,"88":0.13208,"89":0.36981,"90":0.30641,"91":0.19547,"92":0.34868,"93":0.15849,"94":0.14264,"95":0.04755,"96":0.0317,"97":0.03698,"98":0.3434,"99":0.14264,"100":0.22189,"101":0.07925,"102":0.43321,"103":1.97584,"104":4.06263,"105":0.02642,"106":0.00528,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.00528,"46":0.01057,"47":0.01057,"48":0.00528,"49":0.00528,"50":0,"51":0.00528,"52":0.00528,"53":0.04226,"54":0.04755,"55":0.04226,"56":0.01057,"57":0.00528,"58":0,"60":0.00528,"62":0.00528,"63":0.03698,"64":0.01057,"65":0.00528,"66":0.00528,"67":0.00528,"68":0.01057,"69":0.00528,"70":0.00528,"71":0.35396,"72":0.00528,"73":0.00528,"74":0.01057,"75":0.01057,"76":0.00528,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00528,"87":0,"88":0,"89":0.2483,"90":0.06868,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.01057,"13":0,"14":0,"15":0.01057,"16":0.02642,"17":0.03698,"18":0.09509,"79":0.02113,"80":0.04755,"81":0.05811,"83":0.05283,"84":0.06868,"85":0.23774,"86":0.05283,"87":0.02642,"88":0.02642,"89":0.03698,"90":0.04755,"91":0.00528,"92":0.00528,"93":0,"94":0,"95":0,"96":0.01585,"97":0.00528,"98":0,"99":0,"100":0.00528,"101":0.01585,"102":0.01057,"103":0.29585,"104":0.94566,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0.00528,"10":0,"11":0,"12":0,"13":0.10038,"14":0.02113,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.53887,"10.1":0,"11.1":0.0317,"12.1":0.5283,"13.1":0.0317,"14.1":0.17962,"15.1":0.07396,"15.2-15.3":0.07396,"15.4":0.07396,"15.5":0.08981,"15.6":0.22189,"16.0":0.00528},G:{"8":0.01293,"3.2":0.00323,"4.0-4.1":0.00647,"4.2-4.3":0.0388,"5.0-5.1":0.02102,"6.0-6.1":0.04203,"7.0-7.1":0.0582,"8.1-8.4":0.12609,"9.0-9.2":0.2344,"9.3":0.32169,"10.0-10.2":0.29906,"10.3":0.26511,"11.0-11.2":0.66925,"11.3-11.4":0.28451,"12.0-12.1":0.55932,"12.2-12.5":1.36275,"13.0-13.1":0.65793,"13.2":0.25056,"13.3":0.26835,"13.4-13.7":0.79857,"14.0-14.4":1.76365,"14.5-14.8":0.65793,"15.0-15.1":0.78564,"15.2-15.3":1.02004,"15.4":0.6547,"15.5":1.71354,"15.6":3.25087,"16.0":0.04526},P:{"4":0.05229,"5.0-5.4":0,"6.2-6.4":0.04183,"7.2-7.4":0.13595,"8.2":0,"9.2":0.05229,"10.1":0.13595,"11.1-11.2":0.13595,"12.0":0.05229,"13.0":0.08366,"14.0":0.06275,"15.0":0.03137,"16.0":0.11504,"17.0":1.03533,"18.0":0.75296},I:{"0":0,"3":0,"4":0.01248,"2.1":0,"2.2":0.01872,"2.3":0,"4.1":0.0156,"4.2-4.3":0.04993,"4.4":0,"4.4.3-4.4.4":0.41817},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0.00574,"7":0.00574,"8":0.54536,"9":0.47647,"10":0.29277,"11":0.85535,"5.5":0},J:{"7":0,"10":0.00472},N:{"10":0.11321,"11":0.0283},L:{"0":49.17931},S:{"2.5":0},R:{_:"0"},M:{"0":1.65567},Q:{"10.4":0.06132},O:{"0":0.95283},H:{"0":0.52249}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SD.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SD.js index 9d3a47f9038..8611663c0c1 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SD.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SD.js @@ -1 +1 @@ -module.exports={C:{"16":0.00139,"17":0.01249,"19":0.00278,"23":0.00278,"24":0.00278,"29":0.00278,"30":0.00416,"31":0.00694,"32":0.00139,"33":0.01249,"34":0.00139,"35":0.01943,"36":0.00555,"38":0.01666,"39":0.00833,"40":0.00416,"41":0.00833,"42":0.00416,"43":0.01804,"44":0.00555,"45":0.00278,"46":0.00278,"47":0.01666,"48":0.00555,"49":0.00555,"50":0.00278,"51":0.00416,"52":0.09438,"53":0.00139,"54":0.00278,"56":0.00833,"57":0.00139,"58":0.00278,"60":0.00278,"61":0.00555,"62":0.00278,"63":0.00416,"64":0.00139,"65":0.00139,"66":0.00416,"68":0.00972,"69":0.00416,"70":0.00416,"72":0.02498,"73":0.00278,"74":0.00416,"78":0.03609,"80":0.00278,"81":0.01943,"82":0.00833,"83":0.01388,"84":0.00972,"85":0.00416,"86":0.00833,"87":0.00416,"88":0.01804,"89":0.03054,"90":0.00694,"91":0.06107,"92":0.01388,"93":0.02082,"94":0.0347,"95":0.03748,"96":2.00844,"97":1.04794,"98":0.0236,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 18 20 21 22 25 26 27 28 37 55 59 67 71 75 76 77 79 99 3.5 3.6"},D:{"26":0.00278,"28":0.00416,"29":0.01666,"33":0.0111,"37":0.00139,"38":0.00278,"39":0.00139,"40":0.01666,"43":0.0458,"46":0.00416,"47":0.00278,"48":0.00139,"49":0.00278,"50":0.00833,"51":0.00139,"52":0.00416,"53":0.00694,"54":0.00278,"55":0.00694,"56":0.00416,"57":0.00416,"58":0.00972,"59":0.00278,"60":0.00278,"62":0.00278,"63":0.01388,"64":0.00833,"65":0.00416,"66":0.00416,"67":0.00555,"68":0.00416,"69":0.01943,"70":0.0111,"71":0.00555,"72":0.00972,"73":0.00278,"74":0.00694,"75":0.01249,"76":0.00833,"77":0.00555,"78":0.01666,"79":0.03886,"80":0.01249,"81":0.01249,"83":0.02498,"84":0.00833,"85":0.02082,"86":0.03609,"87":0.04025,"88":0.01804,"89":0.01388,"90":0.02637,"91":0.06107,"92":0.03609,"93":0.02082,"94":0.0347,"95":0.01943,"96":0.17905,"97":2.15418,"98":3.38256,"99":0.00416,"100":0.00416,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 30 31 32 34 35 36 41 42 44 45 61 101"},F:{"18":0.00139,"33":0.00139,"36":0.00694,"38":0.00278,"42":0.00278,"50":0.00278,"53":0.00139,"62":0.00139,"65":0.00416,"66":0.00139,"71":0.00416,"73":0.00278,"74":0.00278,"77":0.00278,"79":0.00972,"80":0.00278,"81":0.00139,"82":0.04719,"83":0.64126,_:"9 11 12 15 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 37 39 40 41 43 44 45 46 47 48 49 51 52 54 55 56 57 58 60 63 64 67 68 69 70 72 75 76 78 9.5-9.6 10.5 10.6 11.1 11.6 12.1","10.0-10.1":0,"11.5":0.00139},B:{"12":0.0236,"13":0.00555,"14":0.02082,"15":0.00555,"16":0.00972,"17":0.02221,"18":0.06107,"84":0.01388,"85":0.00416,"89":0.00694,"90":0.00694,"91":0.00833,"92":0.01804,"93":0.00833,"94":0.00555,"95":0.00972,"96":0.0347,"97":0.21792,"98":0.60794,_:"79 80 81 83 86 87 88"},E:{"4":0,"12":0.00139,"13":0.00833,"14":0.03609,"15":0.02082,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1","5.1":0.00278,"9.1":0.00139,"10.1":0.00278,"11.1":0.01249,"12.1":0.00278,"13.1":0.02221,"14.1":0.09716,"15.1":0.01388,"15.2-15.3":0.04303,"15.4":0.00278},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00187,"5.0-5.1":0,"6.0-6.1":0.00094,"7.0-7.1":0.01125,"8.1-8.4":0,"9.0-9.2":0.00703,"9.3":0.03328,"10.0-10.2":0.00984,"10.3":0.04031,"11.0-11.2":0.02062,"11.3-11.4":0.06702,"12.0-12.1":0.08952,"12.2-12.5":0.52586,"13.0-13.1":0.05155,"13.2":0.0225,"13.3":0.07874,"13.4-13.7":0.15466,"14.0-14.4":0.69693,"14.5-14.8":0.96736,"15.0-15.1":0.73817,"15.2-15.3":1.1628,"15.4":0.00469},P:{"4":1.45751,"5.0-5.4":0.08041,"6.2-6.4":0.14072,"7.2-7.4":0.65337,"8.2":0.03016,"9.2":0.17088,"10.1":0.08041,"11.1-11.2":0.48249,"12.0":0.13067,"13.0":0.42217,"14.0":0.71368,"15.0":0.48249,"16.0":1.64849},I:{"0":0,"3":0,"4":0.00101,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00406,"4.2-4.3":0.01657,"4.4":0,"4.4.3-4.4.4":0.10754},A:{"9":0.00707,"11":0.22334,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.31003},Q:{"10.4":0},O:{"0":1.30902},H:{"0":6.04158},L:{"0":67.45873},S:{"2.5":0.01722}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00139,"39":0,"40":0,"41":0,"42":0,"43":0.00139,"44":0.00139,"45":0,"46":0,"47":0.00278,"48":0.00139,"49":0.00139,"50":0,"51":0,"52":0.00417,"53":0,"54":0,"55":0,"56":0.00139,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00278,"69":0,"70":0,"71":0,"72":0.00278,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00139,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00139,"85":0,"86":0,"87":0,"88":0.00139,"89":0.00139,"90":0,"91":0.00417,"92":0.00417,"93":0.00139,"94":0.00139,"95":0.00417,"96":0.00139,"97":0.00139,"98":0.00278,"99":0.00556,"100":0.00417,"101":0.00417,"102":0.01112,"103":0.19182,"104":0.03753,"105":0.00139,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00139,"34":0,"35":0.00139,"36":0,"37":0,"38":0,"39":0,"40":0.00417,"41":0,"42":0,"43":0.00695,"44":0,"45":0,"46":0,"47":0.00139,"48":0,"49":0.00139,"50":0.00139,"51":0,"52":0,"53":0,"54":0,"55":0.00139,"56":0.00139,"57":0.00139,"58":0.00139,"59":0,"60":0,"61":0,"62":0.00139,"63":0.00278,"64":0.00139,"65":0.00278,"66":0,"67":0,"68":0.00139,"69":0.00139,"70":0.00417,"71":0.00139,"72":0.00139,"73":0,"74":0.00139,"75":0,"76":0.00278,"77":0.00139,"78":0.00417,"79":0.00417,"80":0.00556,"81":0.00556,"83":0.00139,"84":0.00139,"85":0.00139,"86":0.00278,"87":0.00695,"88":0.00556,"89":0.00139,"90":0.00278,"91":0.00278,"92":0.00695,"93":0.00695,"94":0.01112,"95":0.00278,"96":0.00973,"97":0.00834,"98":0.00556,"99":0.00417,"100":0.00834,"101":0.01251,"102":0.0278,"103":0.22379,"104":0.46426,"105":0.00278,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00278,"25":0,"26":0.00417,"27":0,"28":0.00695,"29":0.00139,"30":0.00139,"31":0,"32":0.00139,"33":0.00139,"34":0,"35":0,"36":0.00139,"37":0,"38":0.00139,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00139,"47":0.00139,"48":0,"49":0,"50":0,"51":0.00139,"52":0,"53":0,"54":0.00139,"55":0.00139,"56":0.00139,"57":0.00139,"58":0.00834,"60":0.0139,"62":0,"63":0.08896,"64":0.04587,"65":0.00139,"66":0,"67":0.00278,"68":0.00139,"69":0.00278,"70":0.00139,"71":0.00139,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00417,"80":0,"81":0,"82":0.00139,"83":0,"84":0.00139,"85":0.00278,"86":0.00139,"87":0,"88":0.00139,"89":0.06394,"90":0.00834,"9.5-9.6":0,"10.0-10.1":0,"10.5":0.00417,"10.6":0.00139,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00417},B:{"12":0.00278,"13":0.00139,"14":0.00278,"15":0,"16":0.00139,"17":0.00139,"18":0.00695,"79":0,"80":0,"81":0,"83":0,"84":0.00278,"85":0.00139,"86":0,"87":0,"88":0,"89":0.00139,"90":0.00139,"91":0.00139,"92":0.00417,"93":0,"94":0.00139,"95":0.00139,"96":0,"97":0.00139,"98":0.00139,"99":0.00139,"100":0.00139,"101":0.00417,"102":0.00278,"103":0.06255,"104":0.11676,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00278,"14":0.00695,"15":0.00278,_:"0","3.1":0,"3.2":0,"5.1":0.01112,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00139,"13.1":0.00139,"14.1":0.00556,"15.1":0.00139,"15.2-15.3":0,"15.4":0.00139,"15.5":0.01668,"15.6":0.01251,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00196,"5.0-5.1":0.00261,"6.0-6.1":0.00261,"7.0-7.1":0.00652,"8.1-8.4":0,"9.0-9.2":0.00391,"9.3":0.02806,"10.0-10.2":0.00196,"10.3":0.01827,"11.0-11.2":0.0124,"11.3-11.4":0.03262,"12.0-12.1":0.02414,"12.2-12.5":0.54415,"13.0-13.1":0.03915,"13.2":0.01631,"13.3":0.04306,"13.4-13.7":0.12266,"14.0-14.4":0.69486,"14.5-14.8":0.58264,"15.0-15.1":0.31709,"15.2-15.3":0.50304,"15.4":0.51674,"15.5":1.42626,"15.6":1.53066,"16.0":0.05024},P:{"4":0.82047,"5.0-5.4":0.04002,"6.2-6.4":0.06003,"7.2-7.4":0.41023,"8.2":0.02001,"9.2":0.08005,"10.1":0.02001,"11.1-11.2":0.1701,"12.0":0.05003,"13.0":0.14008,"14.0":0.49028,"15.0":0.14008,"16.0":0.61035,"17.0":0.96055,"18.0":0.37021},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00276,"4.2-4.3":0.01792,"4.4":0,"4.4.3-4.4.4":0.09601},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01668,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":69.02213},S:{"2.5":0.01722},R:{_:"0"},M:{"0":0.20664},Q:{"10.4":0.00861},O:{"0":1.51536},H:{"0":13.00147}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SE.js index 5c567cf981b..f5b62eef848 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SE.js @@ -1 +1 @@ -module.exports={C:{"52":0.02167,"68":0.00542,"78":0.07043,"84":0.01625,"88":0.01084,"91":0.0596,"92":0.01084,"94":0.01084,"95":0.04334,"96":0.81812,"97":1.27865,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 87 89 90 93 98 99 3.5 3.6"},D:{"38":0.01084,"49":0.02709,"65":0.01084,"66":0.00542,"67":0.01084,"69":0.16796,"71":0.00542,"72":0.00542,"73":0.00542,"75":0.02709,"76":0.03793,"77":0.02167,"78":0.01084,"79":0.05418,"80":0.03251,"81":0.01084,"83":0.01625,"84":0.04876,"85":0.02709,"86":0.03793,"87":0.17879,"88":0.02709,"89":0.0596,"90":0.0596,"91":0.0596,"92":0.07585,"93":0.47137,"94":0.22756,"95":0.13003,"96":1.07276,"97":12.53725,"98":19.14721,"99":0.02709,"100":0.02167,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 68 70 74 101"},F:{"80":0.01084,"82":0.31966,"83":1.28948,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.01625,"18":0.02709,"85":0.01084,"86":0.01625,"88":0.01084,"89":0.01625,"90":0.00542,"91":0.02167,"92":0.01084,"93":0.01084,"94":0.01084,"95":0.02709,"96":0.12461,"97":1.60373,"98":5.00623,_:"12 13 14 15 17 79 80 81 83 84 87"},E:{"4":0,"13":0.09752,"14":0.57431,"15":0.27632,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1","9.1":0.00542,"10.1":0.01625,"11.1":0.03793,"12.1":0.09211,"13.1":0.4822,"14.1":2.10218,"15.1":0.81812,"15.2-15.3":1.72292,"15.4":0.01084},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00236,"7.0-7.1":0.00236,"8.1-8.4":0.00946,"9.0-9.2":0.00473,"9.3":0.07566,"10.0-10.2":0.00473,"10.3":0.13004,"11.0-11.2":0.02837,"11.3-11.4":0.02837,"12.0-12.1":0.03783,"12.2-12.5":0.82989,"13.0-13.1":0.03074,"13.2":0.01891,"13.3":0.09221,"13.4-13.7":0.2719,"14.0-14.4":0.92683,"14.5-14.8":5.26542,"15.0-15.1":3.0713,"15.2-15.3":12.76752,"15.4":0.03074},P:{"4":0.06363,"5.0-5.4":0.08041,"6.2-6.4":0.14072,"7.2-7.4":0.67198,"8.2":0.03016,"9.2":0.02036,"10.1":0.03053,"11.1-11.2":0.0106,"12.0":0.02121,"13.0":0.06363,"14.0":0.08484,"15.0":0.09544,"16.0":3.40414},I:{"0":0,"3":0,"4":0.00761,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00285,"4.2-4.3":0.00666,"4.4":0,"4.4.3-4.4.4":0.03328},A:{"11":0.18963,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.2795},Q:{"10.4":0},O:{"0":0.03207},H:{"0":0.76782},L:{"0":17.42427},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00861,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.0043,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.0043,"69":0.0043,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.03013,"79":0.00861,"80":0.01291,"81":0.01291,"82":0.0043,"83":0.0043,"84":0,"85":0,"86":0,"87":0,"88":0.0043,"89":0,"90":0,"91":0.02582,"92":0,"93":0,"94":0,"95":0,"96":0.0043,"97":0.0043,"98":0,"99":0.0043,"100":0.0043,"101":0.02152,"102":0.05165,"103":0.92966,"104":0.16355,"105":0.0043,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.0043,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.0043,"49":0.01291,"50":0,"51":0,"52":0.0043,"53":0.0043,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.0043,"64":0.0043,"65":0.0043,"66":0.02582,"67":0.0043,"68":0.0043,"69":0.06456,"70":0,"71":0,"72":0,"73":0,"74":0.0043,"75":0.00861,"76":0.00861,"77":0.0043,"78":0.00861,"79":0.04734,"80":0.01291,"81":0.01291,"83":0.03013,"84":0.07747,"85":0.06886,"86":0.08608,"87":0.07747,"88":0.00861,"89":0.03013,"90":0.00861,"91":0.01291,"92":0.01291,"93":0.03013,"94":0.03443,"95":0.00861,"96":0.02582,"97":0.01722,"98":0.03443,"99":0.02582,"100":0.06026,"101":0.11621,"102":0.2152,"103":2.77608,"104":6.51195,"105":0.02152,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.0043,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0043,"64":0,"65":0,"66":0,"67":0,"68":0.00861,"69":0.0043,"70":0.0043,"71":0.00861,"72":0.0043,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.0043,"86":0.0043,"87":0,"88":0.00861,"89":0.4261,"90":0.02582,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.0043,"16":0,"17":0.0043,"18":0.01291,"79":0,"80":0.0043,"81":0,"83":0,"84":0.0043,"85":0.0043,"86":0.0043,"87":0,"88":0.0043,"89":0.0043,"90":0,"91":0,"92":0.0043,"93":0,"94":0,"95":0.0043,"96":0,"97":0,"98":0.0043,"99":0.0043,"100":0.01722,"101":0.03443,"102":0.04304,"103":0.69294,"104":2.01858,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.02152,"14":0.09038,"15":0.02152,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.0043,"10.1":0.0043,"11.1":0.01291,"12.1":0.02582,"13.1":0.12482,"14.1":0.30128,"15.1":0.03874,"15.2-15.3":0.04304,"15.4":0.16355,"15.5":0.55522,"15.6":1.00283,"16.0":0.0043},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.0085,"9.0-9.2":0.0085,"9.3":0.10205,"10.0-10.2":0.00425,"10.3":0.16584,"11.0-11.2":0.04252,"11.3-11.4":0.07654,"12.0-12.1":0.04677,"12.2-12.5":0.97802,"13.0-13.1":0.02977,"13.2":0.02126,"13.3":0.08079,"13.4-13.7":0.29766,"14.0-14.4":0.8462,"14.5-14.8":2.87027,"15.0-15.1":0.472,"15.2-15.3":0.96526,"15.4":1.47128,"15.5":9.74192,"15.6":24.12731,"16.0":0.14883},P:{"4":0.14456,"5.0-5.4":0.01033,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.01033,"12.0":0.02065,"13.0":0.0413,"14.0":0.05163,"15.0":0.03098,"16.0":0.12391,"17.0":1.64177,"18.0":2.61237},I:{"0":0,"3":0,"4":0.00816,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01905,"4.2-4.3":0.01633,"4.4":0,"4.4.3-4.4.4":0.07076},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.0043,"9":0.0043,"10":0.0043,"11":0.07317,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":31.09445},S:{"2.5":0},R:{_:"0"},M:{"0":0.4329},Q:{"10.4":0.01709},O:{"0":0.01709},H:{"0":0.17796}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SG.js index 33e70761676..8fff929694a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SG.js @@ -1 +1 @@ -module.exports={C:{"34":0.00281,"48":0.00562,"52":0.00562,"63":0.00562,"78":0.0225,"79":0.00281,"80":0.00562,"83":0.00281,"84":0.00562,"87":0.0225,"88":0.00844,"89":0.00844,"90":0.01406,"91":0.01968,"92":0.00844,"93":0.00562,"94":0.01125,"95":0.0225,"96":0.50054,"97":0.81548,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 70 71 72 73 74 75 76 77 81 82 85 86 98 99 3.5 3.6"},D:{"22":0.00562,"26":0.00562,"34":0.03937,"38":0.10404,"47":0.0225,"49":0.02531,"53":0.02812,"55":0.00562,"56":0.01406,"57":0.00562,"60":0.01125,"62":0.00562,"64":0.03374,"65":0.01406,"66":0.01125,"67":0.01687,"68":0.00562,"69":0.00281,"70":0.03656,"71":0.00562,"72":0.03374,"73":0.00562,"74":0.00562,"75":0.00562,"76":0.01406,"77":0.01125,"78":0.01687,"79":0.31776,"80":0.05343,"81":0.03937,"83":0.03937,"84":0.03374,"85":0.03656,"86":0.03374,"87":0.08436,"88":0.02812,"89":0.02531,"90":0.01687,"91":0.05905,"92":0.05905,"93":0.16028,"94":0.11248,"95":0.07592,"96":0.40774,"97":5.02223,"98":12.08316,"99":0.00844,"100":0.00844,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 54 58 59 61 63 101"},F:{"36":0.01406,"40":0.00562,"46":0.03374,"77":0.01406,"78":0.00844,"79":0.01125,"80":0.01125,"81":0.00844,"82":0.05905,"83":0.28401,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00281,"18":0.00844,"84":0.00281,"92":0.00281,"94":0.00281,"95":0.01968,"96":0.01687,"97":0.43867,"98":1.69282,_:"12 13 14 15 16 79 80 81 83 85 86 87 88 89 90 91 93"},E:{"4":0,"8":0.00562,"12":0.00562,"13":0.05062,"14":0.21371,"15":0.14622,_:"0 5 6 7 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.00281,"10.1":0.01125,"11.1":0.01968,"12.1":0.02812,"13.1":0.19122,"14.1":0.88578,"15.1":0.52022,"15.2-15.3":0.97014,"15.4":0.01125},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00149,"6.0-6.1":0.00595,"7.0-7.1":0.01638,"8.1-8.4":0.01638,"9.0-9.2":0.00595,"9.3":0.12505,"10.0-10.2":0.02084,"10.3":0.08188,"11.0-11.2":0.0268,"11.3-11.4":0.02977,"12.0-12.1":0.02531,"12.2-12.5":0.4362,"13.0-13.1":0.0268,"13.2":0.01042,"13.3":0.05211,"13.4-13.7":0.18311,"14.0-14.4":0.50914,"14.5-14.8":2.17801,"15.0-15.1":2.18545,"15.2-15.3":8.89811,"15.4":0.04913},P:{"4":0.50181,"5.0-5.4":0.01029,"6.2-6.4":0.07216,"7.2-7.4":0.07202,"8.2":0.03042,"9.2":0.03087,"10.1":0.01029,"11.1-11.2":0.05144,"12.0":0.03072,"13.0":0.07169,"14.0":0.03072,"15.0":0.0512,"16.0":2.92892},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":7.25348,"4.4":0,"4.4.3-4.4.4":21.76044},A:{"8":0.00891,"9":0.00891,"11":0.21838,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.37372},Q:{"10.4":0.02156},O:{"0":0.50309},H:{"0":0.46949},L:{"0":19.10707},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00256,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00256,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00767,"79":0.00256,"80":0.00256,"81":0.00256,"82":0.00256,"83":0.00256,"84":0,"85":0,"86":0,"87":0.00511,"88":0.00256,"89":0,"90":0,"91":0.00511,"92":0,"93":0,"94":0,"95":0,"96":0.00256,"97":0,"98":0,"99":0.00256,"100":0.00256,"101":0.00511,"102":0.01534,"103":0.30161,"104":0.05623,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00767,"35":0,"36":0,"37":0,"38":0.01789,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00511,"48":0,"49":0.00511,"50":0,"51":0,"52":0,"53":0.00511,"54":0,"55":0,"56":0.00256,"57":0,"58":0,"59":0,"60":0.00511,"61":0,"62":0,"63":0,"64":0,"65":0.00256,"66":0.00256,"67":0.00256,"68":0,"69":0,"70":0,"71":0,"72":0.00256,"73":0.00256,"74":0.00256,"75":0,"76":0,"77":0.00256,"78":0.00256,"79":0.05623,"80":0.00511,"81":0.00767,"83":0.01534,"84":0.023,"85":0.01534,"86":0.023,"87":0.023,"88":0.00511,"89":0.00511,"90":0.00256,"91":0.00256,"92":0.01022,"93":0.00256,"94":0.00511,"95":0.00511,"96":0.01278,"97":0.01022,"98":0.01278,"99":0.01022,"100":0.02556,"101":0.023,"102":0.04345,"103":1.09908,"104":2.80649,"105":0.00767,"106":0.00256,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00256,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00256,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00767,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.02045,"64":0.02045,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00256,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00256,"89":0.06901,"90":0.00767,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00511,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0.00256,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00256,"102":0.00256,"103":0.15336,"104":0.41407,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.00256,"9":0,"10":0,"11":0,"12":0,"13":0.00767,"14":0.02812,"15":0.00767,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00256,"12.1":0.00511,"13.1":0.03067,"14.1":0.07157,"15.1":0.01022,"15.2-15.3":0.01278,"15.4":0.04601,"15.5":0.18148,"15.6":0.3604,"16.0":0.00256},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00773,"7.0-7.1":0.01547,"8.1-8.4":0.0116,"9.0-9.2":0.0058,"9.3":0.12179,"10.0-10.2":0.0058,"10.3":0.0638,"11.0-11.2":0.02127,"11.3-11.4":0.02127,"12.0-12.1":0.01547,"12.2-12.5":0.36345,"13.0-13.1":0.0174,"13.2":0.00773,"13.3":0.0406,"13.4-13.7":0.15273,"14.0-14.4":0.37505,"14.5-14.8":0.89702,"15.0-15.1":0.28419,"15.2-15.3":0.39825,"15.4":0.80036,"15.5":3.67121,"15.6":11.93191,"16.0":0.09086},P:{"4":0.39008,"5.0-5.4":0.02053,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0.02053,"13.0":0.0308,"14.0":0.01027,"15.0":0.01027,"16.0":0.06159,"17.0":1.07786,"18.0":1.89909},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":10.46647,"4.4":0,"4.4.3-4.4.4":27.91059},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00409,"9":0.00818,"10":0,"11":0.02863,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":23.38973},S:{"2.5":0},R:{_:"0"},M:{"0":0.45408},Q:{"10.4":0.00744},O:{"0":0.40942},H:{"0":0.50037}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SH.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SH.js index 666d0dc2ba1..e6c6b48ca4d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SH.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SH.js @@ -1 +1 @@ -module.exports={C:{"85":0.22214,"96":0.22214,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 89 90 91 92 93 94 95 97 98 99 3.5 3.6"},D:{"49":1.10502,"96":0.22214,"97":18.10474,"98":3.31222,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 99 100 101"},F:{"83":2.87078,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98"},E:{"4":0,_:"0 5 6 7 8 9 10 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 12.1 13.1 14.1 15.1 15.2-15.3 15.4","11.1":0.44144},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":13.12716,"13.0-13.1":0,"13.2":0.63491,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":0.63491,"15.0-15.1":0,"15.2-15.3":0,"15.4":0},P:{"4":0.12615,"5.0-5.4":0.01121,"6.2-6.4":0.01012,"7.2-7.4":0.12615,"8.2":0.03083,"9.2":0.07359,"10.1":0.03037,"11.1-11.2":0.22276,"12.0":0.02102,"13.0":0.05256,"14.0":0.6784,"15.0":0.09461,"16.0":0.97764},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.22214,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,"11":0.03845},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":52.62442},H:{"0":0},L:{"0":5.36322},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":100,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0,"15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0,"15.6":0,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":0,"15.0-15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0,"15.6":0,"16.0":0},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0,"15.0":0,"16.0":0,"17.0":0,"18.0":0},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":0},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SI.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SI.js index 18e4fb9d65e..b1502cec139 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SI.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SI.js @@ -1 +1 @@ -module.exports={C:{"52":0.18429,"60":0.02304,"66":0.01152,"67":0.01728,"68":0.01152,"71":0.00576,"76":0.00576,"77":0.02304,"78":0.10942,"82":0.02304,"83":0.0288,"84":0.01728,"87":0.00576,"88":0.05183,"89":0.03455,"90":0.01152,"91":0.13822,"92":0.01728,"93":0.01152,"94":0.0288,"95":0.1267,"96":2.6549,"97":4.22135,"98":0.01728,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 69 70 72 73 74 75 79 80 81 85 86 99 3.5 3.6"},D:{"49":0.07487,"51":0.0288,"63":0.02304,"69":0.02304,"70":0.00576,"72":0.00576,"76":0.0288,"77":0.01728,"78":0.01152,"79":0.04607,"80":0.02304,"81":0.01152,"83":0.02304,"84":0.03455,"85":0.02304,"86":0.04607,"87":0.05759,"88":0.01152,"89":0.03455,"90":0.08063,"91":0.12094,"92":0.05183,"93":0.71412,"94":0.04031,"95":0.06911,"96":0.85233,"97":10.40651,"98":25.89246,"99":0.01152,"100":0.00576,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 71 73 74 75 101"},F:{"82":0.38585,"83":1.36488,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.02304,"86":0.00576,"92":0.01152,"94":0.00576,"95":0.01152,"96":0.04031,"97":1.0539,"98":3.88157,_:"12 13 14 15 16 17 79 80 81 83 84 85 87 88 89 90 91 93"},E:{"4":0,"5":0.01728,"13":0.04607,"14":0.14398,"15":0.13246,_:"0 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.00576,"11.1":0.02304,"12.1":0.0288,"13.1":0.24764,"14.1":0.46648,"15.1":0.34554,"15.2-15.3":0.56438,"15.4":0.00576},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00288,"6.0-6.1":0.00192,"7.0-7.1":0.00096,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02397,"10.0-10.2":0.00192,"10.3":0.04027,"11.0-11.2":0.00575,"11.3-11.4":0.00863,"12.0-12.1":0.00863,"12.2-12.5":0.15052,"13.0-13.1":0.00959,"13.2":0.00288,"13.3":0.02013,"13.4-13.7":0.10834,"14.0-14.4":0.50335,"14.5-14.8":1.65097,"15.0-15.1":1.67878,"15.2-15.3":5.29616,"15.4":0.06903},P:{"4":0.03157,"5.0-5.4":0.01029,"6.2-6.4":0.07216,"7.2-7.4":0.07202,"8.2":0.03042,"9.2":0.03087,"10.1":0.01029,"11.1-11.2":0.04209,"12.0":0.01052,"13.0":0.10523,"14.0":0.12628,"15.0":0.09471,"16.0":2.694},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00308,"4.2-4.3":0.00463,"4.4":0,"4.4.3-4.4.4":0.02622},A:{"11":0.42041,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.4241},Q:{"10.4":0},O:{"0":0.01272},H:{"0":0.22886},L:{"0":29.11605},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.07685,"53":0.00512,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.02049,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.00512,"67":0,"68":0.01025,"69":0,"70":0,"71":0,"72":0.00512,"73":0,"74":0,"75":0,"76":0.00512,"77":0.00512,"78":0.02562,"79":0,"80":0,"81":0,"82":0,"83":0.00512,"84":0.00512,"85":0,"86":0.01025,"87":0,"88":0.01537,"89":0,"90":0,"91":0.05635,"92":0.00512,"93":0,"94":0.00512,"95":0.01025,"96":0.00512,"97":0.01025,"98":0.00512,"99":0.02562,"100":0.02049,"101":0.01537,"102":0.18443,"103":2.65371,"104":0.53792,"105":0.00512,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02562,"50":0,"51":0,"52":0,"53":0,"54":0.00512,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00512,"68":0,"69":0.00512,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.03586,"77":0.00512,"78":0.01025,"79":0.02049,"80":0.01025,"81":0.01537,"83":0.00512,"84":0.02562,"85":0.00512,"86":0.02049,"87":0.01537,"88":0.00512,"89":0.02049,"90":0.04098,"91":0.01537,"92":0.02049,"93":0.00512,"94":0.00512,"95":0.00512,"96":0.03586,"97":0.02049,"98":0.03074,"99":0.02562,"100":0.04611,"101":0.03074,"102":0.14344,"103":4.5441,"104":11.34745,"105":0.03074,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00512,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.01025,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00512,"64":0.00512,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00512,"86":0,"87":0,"88":0.01025,"89":0.70697,"90":0.07172,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00512,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0.00512,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.02049,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00512,"99":0,"100":0.00512,"101":0.02049,"102":0.01537,"103":0.74796,"104":1.99797,"105":0.00512},E:{"4":0,"5":0.01025,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01025,"14":0.04098,"15":0.01537,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00512,"12.1":0.01537,"13.1":0.0666,"14.1":0.11271,"15.1":0.04098,"15.2-15.3":0.02562,"15.4":0.08709,"15.5":0.24078,"15.6":0.46107,"16.0":0.00512},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00197,"8.1-8.4":0.00394,"9.0-9.2":0,"9.3":0.02953,"10.0-10.2":0,"10.3":0.08466,"11.0-11.2":0.00984,"11.3-11.4":0.01772,"12.0-12.1":0.01378,"12.2-12.5":0.24216,"13.0-13.1":0.00394,"13.2":0.00394,"13.3":0.02559,"13.4-13.7":0.09253,"14.0-14.4":0.26775,"14.5-14.8":1.23049,"15.0-15.1":0.30713,"15.2-15.3":0.61623,"15.4":1.13402,"15.5":5.30982,"15.6":9.94237,"16.0":0.3406},P:{"4":0.1136,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01033,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.03098,"12.0":0.01033,"13.0":0.05163,"14.0":0.07229,"15.0":0.07229,"16.0":0.18588,"17.0":1.32185,"18.0":1.73493},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.10071,"4.2-4.3":0.03357,"4.4":0,"4.4.3-4.4.4":0.13428},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.08709,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":47.27517},S:{"2.5":0.00488},R:{_:"0"},M:{"0":0.41942},Q:{"10.4":0.00488},O:{"0":0.01463},H:{"0":0.22624}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SK.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SK.js index 7909b0fbb77..bb1225fbf67 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SK.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SK.js @@ -1 +1 @@ -module.exports={C:{"52":0.14582,"56":0.01042,"65":0.00521,"68":0.01042,"72":0.01042,"74":0.00521,"78":0.05208,"80":0.01042,"81":0.01042,"82":0.01042,"84":0.00521,"87":0.03125,"88":0.02604,"89":0.01042,"90":0.01042,"91":0.10416,"92":0.02604,"93":0.01042,"94":0.02604,"95":0.07291,"96":2.32277,"97":3.81226,"98":0.02083,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 66 67 69 70 71 73 75 76 77 79 83 85 86 99 3.5 3.6"},D:{"34":0.01042,"38":0.10416,"43":0.01042,"47":0.01562,"49":0.11458,"53":0.02604,"63":0.09895,"67":0.00521,"70":0.01042,"71":0.01042,"72":0.02083,"74":0.00521,"75":0.00521,"77":0.01042,"78":0.01562,"79":0.35414,"80":0.01562,"81":0.04166,"83":0.02604,"84":0.05208,"85":0.05208,"86":0.11458,"87":0.04687,"88":0.01562,"89":0.07291,"90":0.02083,"91":0.04166,"92":0.05208,"93":0.15624,"94":0.03646,"95":0.08854,"96":0.42706,"97":9.44731,"98":21.78506,"99":0.01562,"100":0.01042,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 44 45 46 48 50 51 52 54 55 56 57 58 59 60 61 62 64 65 66 68 69 73 76 101"},F:{"28":0.02604,"36":0.01042,"40":0.00521,"46":0.01562,"69":0.01042,"78":0.01042,"79":0.01042,"80":0.01562,"81":0.00521,"82":0.55726,"83":2.70295,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 70 71 72 73 74 75 76 77 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.01562,"18":0.01562,"85":0.00521,"86":0.01042,"87":0.01042,"91":0.02083,"92":0.01042,"93":0.00521,"94":0.01042,"95":0.01562,"96":0.03646,"97":0.9739,"98":3.41645,_:"12 13 14 15 16 79 80 81 83 84 88 89 90"},E:{"4":0,"12":0.01042,"13":0.02604,"14":0.17707,"15":0.08854,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.01042,"12.1":0.03646,"13.1":0.1927,"14.1":0.44789,"15.1":0.30206,"15.2-15.3":0.64579,"15.4":0.00521},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01039,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03117,"10.0-10.2":0,"10.3":0.08001,"11.0-11.2":0.00935,"11.3-11.4":0.01247,"12.0-12.1":0.00831,"12.2-12.5":0.23898,"13.0-13.1":0.00727,"13.2":0.01559,"13.3":0.02494,"13.4-13.7":0.1143,"14.0-14.4":0.35224,"14.5-14.8":1.65209,"15.0-15.1":1.67079,"15.2-15.3":6.08052,"15.4":0.07585},P:{"4":0.49039,"5.0-5.4":0.01029,"6.2-6.4":0.07216,"7.2-7.4":0.07202,"8.2":0.03042,"9.2":0.03087,"10.1":0.01029,"11.1-11.2":0.04174,"12.0":0.0313,"13.0":0.05217,"14.0":0.07304,"15.0":0.07304,"16.0":2.00331},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0029,"4.2-4.3":0.00639,"4.4":0,"4.4.3-4.4.4":0.04821},A:{"9":0.00521,"11":0.28123,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.27794},Q:{"10.4":0},O:{"0":0.04792},H:{"0":0.3947},L:{"0":34.01666},S:{"2.5":0}}; +module.exports={C:{"14":0.02807,"33":0.00936,"46":0.00468,"47":0.00468,"52":0.10762,"56":0.00468,"58":0.00936,"66":0.00936,"68":0.01872,"72":0.00468,"78":0.02807,"84":0.00936,"88":0.01404,"91":0.09826,"92":0.00468,"93":0.00468,"94":0.00936,"95":0.00468,"96":0.01404,"97":0.00936,"98":0.02807,"99":0.04679,"100":0.0234,"101":0.03743,"102":0.21056,"103":4.35147,"104":0.81883,_:"2 3 4 5 6 7 8 9 10 11 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 43 44 45 48 49 50 51 53 54 55 57 59 60 61 62 63 64 65 67 69 70 71 73 74 75 76 77 79 80 81 82 83 85 86 87 89 90 105 106 3.5 3.6"},D:{"34":0.00468,"38":0.05147,"43":0.00468,"47":0.01404,"49":0.09358,"53":0.03275,"63":0.10294,"68":0.00468,"69":0.09826,"70":0.0234,"72":0.05147,"74":0.00468,"75":0.00468,"76":0.00468,"79":0.36028,"80":0.00936,"81":0.05147,"83":0.04211,"84":0.02807,"85":0.0234,"86":0.06083,"87":0.03743,"88":0.00936,"89":0.03743,"90":0.0234,"91":0.01404,"92":0.03275,"93":0.01872,"94":0.00936,"95":0.01404,"96":0.04679,"97":0.0234,"98":0.02807,"99":0.06083,"100":0.05147,"101":0.09826,"102":0.24331,"103":7.44429,"104":19.67987,"105":0.04211,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 44 45 46 48 50 51 52 54 55 56 57 58 59 60 61 62 64 65 66 67 71 73 77 78 106 107 108"},F:{"28":0.01404,"36":0.00936,"46":0.01872,"58":0.00468,"68":0.01404,"72":0.0234,"79":0.00936,"82":0.00936,"84":0.01404,"85":0.06083,"86":0.00468,"87":0.00468,"88":0.05147,"89":2.74657,"90":0.32753,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 60 62 63 64 65 66 67 69 70 71 73 74 75 76 77 78 80 81 83 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"18":0.01872,"91":0.01404,"96":0.00936,"100":0.00468,"101":0.05615,"102":0.04679,"103":1.03406,"104":2.93841,_:"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 92 93 94 95 97 98 99 105"},E:{"4":0,"13":0.01872,"14":0.10762,"15":0.02807,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.00468,"12.1":0.03275,"13.1":0.10762,"14.1":0.23395,"15.1":0.06551,"15.2-15.3":0.06083,"15.4":0.14037,"15.5":0.55212,"15.6":0.87497,"16.0":0.01872},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01828,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02628,"10.0-10.2":0,"10.3":0.08799,"11.0-11.2":0.00229,"11.3-11.4":0.00457,"12.0-12.1":0.00571,"12.2-12.5":0.2274,"13.0-13.1":0.00343,"13.2":0.01143,"13.3":0.01028,"13.4-13.7":0.07085,"14.0-14.4":0.18283,"14.5-14.8":0.51422,"15.0-15.1":0.21026,"15.2-15.3":0.30167,"15.4":0.54164,"15.5":2.72763,"15.6":6.29399,"16.0":0.17598},P:{"4":0.38536,"5.0-5.4":0.02053,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.02083,"12.0":0.02053,"13.0":0.03125,"14.0":0.05208,"15.0":0.02083,"16.0":0.08332,"17.0":0.9582,"18.0":1.40605},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01218,"4.2-4.3":0.01096,"4.4":0,"4.4.3-4.4.4":0.07794},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"11":0.19184,_:"6 7 8 9 10 5.5"},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":37.79058},S:{"2.5":0},R:{_:"0"},M:{"0":0.30324},Q:{"10.4":0},O:{"0":0.04788},H:{"0":0.62454}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SL.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SL.js index 15c88a488be..f857386966c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SL.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SL.js @@ -1 +1 @@ -module.exports={C:{"30":0.00225,"33":0.00225,"35":0.01578,"43":0.00902,"45":0.00676,"47":0.00225,"57":0.00451,"61":0.00225,"78":0.00451,"80":0.00225,"87":0.00451,"91":0.00902,"94":0.00225,"95":0.03156,"96":0.41474,"97":0.73706,"98":0.06311,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 34 36 37 38 39 40 41 42 44 46 48 49 50 51 52 53 54 55 56 58 59 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 81 82 83 84 85 86 88 89 90 92 93 99 3.5 3.6"},D:{"34":0.02029,"37":0.01127,"43":0.01578,"44":0.00225,"46":0.00676,"48":0.00225,"49":0.01803,"53":0.00676,"55":0.00451,"56":0.00451,"57":0.01803,"60":0.02705,"62":0.00225,"63":0.00225,"64":0.0293,"65":0.00902,"67":0.00676,"68":0.00225,"69":0.00902,"72":0.2547,"73":0.00676,"74":0.00676,"75":0.02029,"76":0.01803,"77":0.02479,"79":0.01352,"80":0.00902,"81":0.00902,"83":0.02029,"84":0.01352,"85":0.00451,"86":0.02029,"87":0.0293,"88":0.01803,"89":0.01803,"90":0.00676,"91":0.02254,"92":0.02029,"93":0.03832,"94":0.02479,"95":0.01803,"96":0.18934,"97":3.01811,"98":5.74319,"99":0.01352,"100":0.00225,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 38 39 40 41 42 45 47 50 51 52 54 58 59 61 66 70 71 78 101"},F:{"20":0.00451,"31":0.00225,"38":0.00225,"42":0.01127,"48":0.00225,"60":0.00676,"62":0.00451,"64":0.00451,"66":0.00225,"67":0.00225,"79":0.01352,"80":0.00225,"81":0.00902,"82":0.1961,"83":0.70776,_:"9 11 12 15 16 17 18 19 21 22 23 24 25 26 27 28 29 30 32 33 34 35 36 37 39 40 41 43 44 45 46 47 49 50 51 52 53 54 55 56 57 58 63 65 68 69 70 71 72 73 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.07664,"13":0.04057,"14":0.03381,"15":0.02254,"16":0.04057,"17":0.01352,"18":0.11045,"80":0.00451,"84":0.01803,"85":0.01352,"87":0.01127,"88":0.00451,"89":0.01803,"90":0.01578,"91":0.01578,"92":0.06762,"93":0.01803,"94":0.01352,"95":0.0293,"96":0.11045,"97":0.51166,"98":1.65894,_:"79 81 83 86"},E:{"4":0,"13":0.00451,"14":0.02705,"15":0.01127,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 10.1 15.4","5.1":0.00451,"7.1":0.00225,"9.1":0.00225,"11.1":0.01578,"12.1":0.00451,"13.1":0.01578,"14.1":0.23442,"15.1":0.0586,"15.2-15.3":0.05184},G:{"8":0.00207,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00069,"5.0-5.1":0,"6.0-6.1":0.00207,"7.0-7.1":0.00829,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.09815,"10.0-10.2":0.00415,"10.3":0.03456,"11.0-11.2":0.03387,"11.3-11.4":0.01313,"12.0-12.1":0.06013,"12.2-12.5":0.59236,"13.0-13.1":0.05806,"13.2":0.03387,"13.3":0.1258,"13.4-13.7":0.18455,"14.0-14.4":1.16744,"14.5-14.8":1.51165,"15.0-15.1":1.43078,"15.2-15.3":1.54483,"15.4":0.00207},P:{"4":0.1852,"5.0-5.4":0.01029,"6.2-6.4":0.07216,"7.2-7.4":0.07202,"8.2":0.03042,"9.2":0.03087,"10.1":0.01029,"11.1-11.2":0.05144,"12.0":0.16495,"13.0":0.03087,"14.0":0.10289,"15.0":0.11318,"16.0":0.80254},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0012,"4.2-4.3":0.00329,"4.4":0,"4.4.3-4.4.4":0.04972},A:{"10":0.02058,"11":0.18228,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.01549},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.12392},Q:{"10.4":0},O:{"0":1.79684},H:{"0":18.71978},L:{"0":52.91197},S:{"2.5":0.02324}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0.00172,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00172,"89":0.00172,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0.00515,"96":0.00172,"97":0,"98":0,"99":0,"100":0.00172,"101":0.00172,"102":0.00515,"103":0.08418,"104":0.02405,"105":0.00344,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00172,"39":0,"40":0.00172,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00172,"59":0,"60":0.00172,"61":0,"62":0,"63":0.00172,"64":0.00172,"65":0.00172,"66":0,"67":0,"68":0,"69":0.00172,"70":0.00172,"71":0,"72":0.00172,"73":0,"74":0.00172,"75":0.00172,"76":0.00172,"77":0.00172,"78":0.00172,"79":0.00515,"80":0,"81":0.00344,"83":0,"84":0,"85":0.00172,"86":0.00344,"87":0.00172,"88":0,"89":0,"90":0,"91":0.00172,"92":0.00344,"93":0.01718,"94":0.00172,"95":0.01203,"96":0.00172,"97":0.00515,"98":0.00344,"99":0.00859,"100":0.00515,"101":0.00515,"102":0.0189,"103":0.28003,"104":0.57725,"105":0.00344,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0.00687,"21":0,"22":0,"23":0,"24":0.00687,"25":0,"26":0.01203,"27":0.00687,"28":0.00515,"29":0,"30":0.00859,"31":0.00515,"32":0.00515,"33":0.00859,"34":0,"35":0,"36":0,"37":0,"38":0.00344,"39":0,"40":0,"41":0,"42":0.00344,"43":0,"44":0,"45":0,"46":0.00172,"47":0,"48":0,"49":0,"50":0.00859,"51":0.00172,"52":0,"53":0,"54":0.00515,"55":0.00344,"56":0.00172,"57":0.01031,"58":0.02062,"60":0.2955,"62":0.00344,"63":0.93116,"64":0.24911,"65":0.00859,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00172,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00344,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00172,"86":0.00172,"87":0.00172,"88":0.00172,"89":0.07044,"90":0.0189,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.07216},B:{"12":0.00859,"13":0.00687,"14":0.00344,"15":0.00687,"16":0.00515,"17":0,"18":0.01031,"79":0,"80":0,"81":0,"83":0,"84":0.00344,"85":0,"86":0,"87":0,"88":0,"89":0.00172,"90":0.00172,"91":0,"92":0.00515,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00172,"99":0.00172,"100":0.00172,"101":0.00515,"102":0.00344,"103":0.07903,"104":0.17352,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00344,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00172,"12.1":0.00172,"13.1":0.00172,"14.1":0.00172,"15.1":0.00172,"15.2-15.3":0,"15.4":0.00172,"15.5":0.02921,"15.6":0.00687,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0.00207,"4.2-4.3":0,"5.0-5.1":0.00345,"6.0-6.1":0.00069,"7.0-7.1":0.01864,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.07665,"10.0-10.2":0.00552,"10.3":0.09529,"11.0-11.2":0.00691,"11.3-11.4":0.01657,"12.0-12.1":0.0435,"12.2-12.5":0.72228,"13.0-13.1":0.06629,"13.2":0.00829,"13.3":0.08217,"13.4-13.7":0.15606,"14.0-14.4":1.00125,"14.5-14.8":0.76579,"15.0-15.1":0.56623,"15.2-15.3":0.36529,"15.4":0.50684,"15.5":1.02611,"15.6":1.28437,"16.0":0.08286},P:{"4":0.12438,"5.0-5.4":0.02073,"6.2-6.4":0,"7.2-7.4":0.09328,"8.2":0,"9.2":0.04146,"10.1":0,"11.1-11.2":0.22803,"12.0":0,"13.0":0.01036,"14.0":0.03109,"15.0":0.04146,"16.0":0.50788,"17.0":0.36277,"18.0":0.26949},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00317,"4.2-4.3":0.00529,"4.4":0,"4.4.3-4.4.4":0.15229},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01203,"5.5":0},J:{"7":0,"10":0.02485},N:{"10":0,"11":0},L:{"0":68.1081},S:{"2.5":0.00828},R:{_:"0"},M:{"0":0.0911},Q:{"10.4":0},O:{"0":1.02697},H:{"0":15.90911}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SM.js index 356a899cf2b..0f22174520f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SM.js @@ -1 +1 @@ -module.exports={C:{"48":0.02024,"52":0.02699,"56":0.02024,"59":0.02024,"60":0.01349,"64":0.01349,"78":0.24289,"87":0.00675,"89":0.01349,"90":0.04723,"91":0.07422,"93":0.01349,"95":0.12819,"96":1.49109,"97":3.11711,"98":0.04048,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 57 58 61 62 63 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 88 92 94 99 3.5 3.6"},D:{"49":0.03374,"66":0.00675,"71":0.01349,"76":0.60048,"77":0.02699,"79":0.18892,"80":0.01349,"84":0.02699,"87":0.17542,"88":0.02024,"89":0.00675,"91":0.02024,"92":0.02024,"95":0.00675,"96":0.31711,"97":13.85834,"98":32.88488,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 67 68 69 70 72 73 74 75 78 81 83 85 86 90 93 94 99 100 101"},F:{"77":0.04723,"82":0.05398,"83":0.25639,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.03374,"95":0.01349,"97":1.28193,"98":4.52049,_:"12 13 14 15 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 96"},E:{"4":0,"13":0.04723,"14":0.16193,"15":0.22265,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.56,"12.1":0.16193,"13.1":1.17398,"14.1":1.03229,"15.1":0.41831,"15.2-15.3":1.2347},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00258,"9.0-9.2":0.00773,"9.3":0.02406,"10.0-10.2":0,"10.3":0.02148,"11.0-11.2":0.0696,"11.3-11.4":0.00258,"12.0-12.1":0.00516,"12.2-12.5":0.65729,"13.0-13.1":0,"13.2":0.00516,"13.3":0,"13.4-13.7":0.13661,"14.0-14.4":1.00355,"14.5-14.8":1.17797,"15.0-15.1":0.76211,"15.2-15.3":4.705,"15.4":0.01031},P:{"4":0.08266,"5.0-5.4":0.01121,"6.2-6.4":0.04087,"7.2-7.4":0.63347,"8.2":0.16348,"9.2":0.01033,"10.1":0.01033,"11.1-11.2":0.11366,"12.0":0.05109,"13.0":0.34739,"14.0":0.093,"15.0":0.01033,"16.0":3.01725},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00798,"4.4":0,"4.4.3-4.4.4":0.05383},A:{"11":0.1147,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.1106},Q:{"10.4":0},O:{"0":0},H:{"0":0.02156},L:{"0":20.72511},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.02272,"48":0,"49":0.00568,"50":0,"51":0,"52":0.0284,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01704,"79":0,"80":0,"81":0,"82":0.00568,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.05111,"92":0,"93":0,"94":0,"95":0.01136,"96":0,"97":0.00568,"98":0,"99":0,"100":0.00568,"101":0.01136,"102":0.11358,"103":1.84,"104":0.31802,"105":0.00568,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.00568,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01136,"50":0,"51":0,"52":0,"53":0.01136,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.00568,"77":0.00568,"78":0.00568,"79":0.06247,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0.01136,"88":0.01136,"89":0.00568,"90":0,"91":0,"92":0.0284,"93":0,"94":0,"95":0.00568,"96":0,"97":0.00568,"98":0.01136,"99":0.00568,"100":0.03975,"101":0.27827,"102":0.06247,"103":6.18443,"104":15.03799,"105":0.01136,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00568,"88":0.00568,"89":0.31235,"90":0.01704,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.00568,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.0284,"102":0.00568,"103":1.61852,"104":1.72642,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01704,"14":0.15333,"15":0.15901,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.14198,"12.1":0.05111,"13.1":0.11358,"14.1":0.1363,"15.1":0.95975,"15.2-15.3":0.02272,"15.4":0.20444,"15.5":0.31235,"15.6":0.74963,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.0088,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.0088,"10.0-10.2":0,"10.3":0.13204,"11.0-11.2":0.01467,"11.3-11.4":0.0088,"12.0-12.1":0.0088,"12.2-12.5":0.804,"13.0-13.1":0.00587,"13.2":0.01467,"13.3":0.02347,"13.4-13.7":0.05575,"14.0-14.4":0.43134,"14.5-14.8":4.96779,"15.0-15.1":0.0939,"15.2-15.3":0.29637,"15.4":9.06409,"15.5":3.16319,"15.6":10.15859,"16.0":0.08216},P:{"4":0.01027,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0.02053,"14.0":0.01027,"15.0":0,"16.0":0.01027,"17.0":0.80073,"18.0":2.3714},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.08272},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":33.68485},S:{"2.5":0},R:{_:"0"},M:{"0":0.15556},Q:{"10.4":0},O:{"0":0},H:{"0":0.00818}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SN.js index 41a9b8e1930..1013bea11ea 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SN.js @@ -1 +1 @@ -module.exports={C:{"35":0.07044,"43":0.00486,"49":0.00729,"52":0.01215,"57":0.03886,"65":0.00243,"68":0.00243,"70":0.00243,"72":0.00486,"78":0.01457,"80":0.06558,"81":0.00243,"84":0.00972,"86":0.00486,"88":0.04129,"89":0.01943,"91":0.02186,"92":0.00486,"93":0.00243,"94":0.16517,"95":0.02429,"96":0.6364,"97":0.76756,"98":0.00486,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 44 45 46 47 48 50 51 53 54 55 56 58 59 60 61 62 63 64 66 67 69 71 73 74 75 76 77 79 82 83 85 87 90 99 3.5 3.6"},D:{"33":0.00486,"38":0.01457,"40":0.00243,"43":0.00486,"49":0.017,"58":0.00729,"60":0.00486,"63":0.00486,"64":0.00243,"65":0.01215,"66":0.07044,"67":0.00729,"68":0.01215,"69":0.02672,"70":0.01457,"71":0.00243,"72":0.00486,"73":0.00243,"74":0.017,"75":0.01215,"76":0.05587,"77":0.00243,"78":0.00486,"79":0.07773,"80":0.00972,"81":0.04129,"83":0.01943,"84":0.01215,"85":0.017,"86":0.02672,"87":0.03644,"88":0.01943,"89":0.03886,"90":0.03158,"91":0.03401,"92":0.03401,"93":0.02186,"94":0.04372,"95":0.08987,"96":0.32792,"97":3.50019,"98":7.95498,"99":0.00729,"100":0.00486,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 39 41 42 44 45 46 47 48 50 51 52 53 54 55 56 57 59 61 62 101"},F:{"37":0.00486,"70":0.00486,"79":0.00243,"82":0.05101,"83":0.89387,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00972,"13":0.017,"14":0.00486,"15":0.00972,"16":0.00972,"17":0.01215,"18":0.03644,"84":0.00243,"85":0.00729,"89":0.00729,"90":0.00243,"92":0.00972,"93":0.00729,"94":0.00486,"95":0.00729,"96":0.05101,"97":0.44937,"98":1.5327,_:"79 80 81 83 86 87 88 91"},E:{"4":0,"13":0.01215,"14":0.07287,"15":0.01215,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00486,"11.1":0.02429,"12.1":0.0583,"13.1":0.05344,"14.1":0.09473,"15.1":0.04615,"15.2-15.3":0.10688},G:{"8":0.00677,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00271,"7.0-7.1":0.2111,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.09878,"10.0-10.2":0.02977,"10.3":0.20704,"11.0-11.2":0.12179,"11.3-11.4":0.12179,"12.0-12.1":0.12585,"12.2-12.5":2.82821,"13.0-13.1":0.05413,"13.2":0.04195,"13.3":0.19486,"13.4-13.7":0.59541,"14.0-14.4":1.6252,"14.5-14.8":2.49802,"15.0-15.1":1.66039,"15.2-15.3":3.04743,"15.4":0.05819},P:{"4":0.89223,"5.0-5.4":0.01034,"6.2-6.4":0.02028,"7.2-7.4":0.365,"8.2":0.03042,"9.2":0.04056,"10.1":0.05069,"11.1-11.2":0.22306,"12.0":0.16222,"13.0":0.13181,"14.0":0.16222,"15.0":0.17236,"16.0":1.21667},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00086,"4.2-4.3":0.00185,"4.4":0,"4.4.3-4.4.4":0.02757},A:{"6":0.00243,"11":0.04372,_:"7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00757},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.053},Q:{"10.4":0},O:{"0":0.11357},H:{"0":0.53758},L:{"0":60.07901},S:{"2.5":0.01514}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00772,"53":0,"54":0,"55":0,"56":0,"57":0.00514,"58":0.00257,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00257,"69":0,"70":0.00772,"71":0,"72":0.00257,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01543,"79":0,"80":0.00257,"81":0.00257,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00257,"90":0,"91":0.01286,"92":0,"93":0,"94":0.00514,"95":0.00514,"96":0.00257,"97":0.00257,"98":0,"99":0.00257,"100":0.00257,"101":0.00772,"102":0.02058,"103":0.42695,"104":0.07716,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0.00772,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00257,"39":0,"40":0.00257,"41":0,"42":0,"43":0.00257,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01029,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00772,"61":0,"62":0,"63":0.00257,"64":0,"65":0.00514,"66":0.05658,"67":0,"68":0,"69":0.00772,"70":0.00257,"71":0.00257,"72":0,"73":0.00257,"74":0.00257,"75":0.00257,"76":0.00257,"77":0.00257,"78":0,"79":0.01029,"80":0.00257,"81":0.02572,"83":0.00257,"84":0.00257,"85":0.00257,"86":0.01286,"87":0.00514,"88":0.00257,"89":0.00257,"90":0.00257,"91":0.00257,"92":0.00772,"93":0.00514,"94":0.00257,"95":0.00514,"96":0.00772,"97":0.00772,"98":0.00514,"99":0.00514,"100":0.01029,"101":0.01029,"102":0.02572,"103":0.93106,"104":2.26079,"105":0.01029,"106":0.00257,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00257,"47":0,"48":0,"49":0,"50":0.00514,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00257,"62":0,"63":0.01543,"64":0.00514,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00257,"80":0,"81":0,"82":0,"83":0,"84":0.00257,"85":0.00257,"86":0.00257,"87":0.00257,"88":0.00257,"89":0.1286,"90":0.01543,"9.5-9.6":0,"10.0-10.1":0,"10.5":0.00257,"10.6":0.00257,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00514,"13":0.00257,"14":0.00257,"15":0.01029,"16":0,"17":0.00257,"18":0.01029,"79":0,"80":0,"81":0,"83":0,"84":0.00257,"85":0.00257,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00772,"93":0.00257,"94":0,"95":0,"96":0.00257,"97":0,"98":0.00257,"99":0.00257,"100":0.00514,"101":0.00514,"102":0.00772,"103":0.20833,"104":0.43981,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.00257,"9":0,"10":0,"11":0.00257,"12":0,"13":0.00257,"14":0.01029,"15":0.00257,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00514,"12.1":0.00772,"13.1":0.01543,"14.1":0.02058,"15.1":0.00257,"15.2-15.3":0.00514,"15.4":0.00772,"15.5":0.03601,"15.6":0.05144,"16.0":0.00257},G:{"8":0.00219,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01969,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.10284,"10.0-10.2":0.14223,"10.3":0.2954,"11.0-11.2":0.0372,"11.3-11.4":0.03282,"12.0-12.1":0.08096,"12.2-12.5":1.60391,"13.0-13.1":0.04376,"13.2":0.05908,"13.3":0.22975,"13.4-13.7":0.40481,"14.0-14.4":1.4945,"14.5-14.8":2.29755,"15.0-15.1":0.80961,"15.2-15.3":1.04593,"15.4":1.07656,"15.5":4.73732,"15.6":7.05894,"16.0":0.30415},P:{"4":0.31154,"5.0-5.4":0.01005,"6.2-6.4":0.0201,"7.2-7.4":0.37184,"8.2":0.01005,"9.2":0.0402,"10.1":0.01005,"11.1-11.2":0.13065,"12.0":0.0804,"13.0":0.1005,"14.0":0.13065,"15.0":0.09045,"16.0":0.24119,"17.0":1.09541,"18.0":0.77382},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00214,"4.2-4.3":0.00888,"4.4":0,"4.4.3-4.4.4":0.08756},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04115,"5.5":0},J:{"7":0,"10":0.01486},N:{"10":0,"11":0},L:{"0":67.49914},S:{"2.5":0.03714},R:{_:"0"},M:{"0":0.17084},Q:{"10.4":0},O:{"0":0.08914},H:{"0":0.33052}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SO.js index 98ba4340a6e..26bacec8e67 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SO.js @@ -1 +1 @@ -module.exports={C:{"4":0.00172,"15":0.00515,"17":0.00686,"48":0.00172,"52":0.00343,"55":0.00343,"78":0.00343,"87":0.01201,"91":0.00343,"93":0.00172,"94":0.06346,"95":0.00686,"96":0.10633,"97":0.27269,"98":0.03087,_:"2 3 5 6 7 8 9 10 11 12 13 14 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 88 89 90 92 99 3.5 3.6"},D:{"11":0.00172,"23":0.01029,"24":0.00172,"25":0.00172,"33":0.00343,"38":0.00858,"39":0.00172,"40":0.00343,"43":0.01372,"45":0.00343,"49":0.00686,"53":0.00343,"56":0.00172,"60":0.00343,"63":0.01029,"65":0.00343,"67":0.00172,"68":0.00858,"70":0.00686,"71":0.00172,"73":0.00172,"74":0.00515,"75":0.02401,"76":0.00515,"77":0.01029,"78":0.00343,"79":0.05831,"80":0.01372,"81":0.01372,"83":0.00343,"84":0.00686,"86":0.02401,"87":0.01887,"88":0.00686,"89":0.00515,"90":0.01201,"91":0.01372,"92":0.04288,"93":0.01372,"94":0.01715,"95":0.08747,"96":0.17493,"97":3.42143,"98":7.8547,"99":0.01372,"100":0.01715,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 26 27 28 29 30 31 32 34 35 36 37 41 42 44 46 47 48 50 51 52 54 55 57 58 59 61 62 64 66 69 72 85 101"},F:{"53":0.01372,"78":0.00343,"79":0.00343,"80":0.00172,"82":0.04802,"83":0.25211,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01029,"13":0.00172,"14":0.01029,"15":0.00343,"16":0.01029,"17":0.01201,"18":0.05145,"84":0.01544,"85":0.00343,"87":0.00686,"89":0.01029,"90":0.00343,"92":0.02744,"93":0.00343,"94":0.00515,"95":0.00515,"96":0.04288,"97":0.36187,"98":1.1199,_:"79 80 81 83 86 88 91"},E:{"4":0,"12":0.00515,"13":0.00343,"14":0.06174,"15":0.02401,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 9.1 11.1","5.1":0.00343,"10.1":0.01372,"12.1":0.00343,"13.1":0.01372,"14.1":0.07889,"15.1":0.08404,"15.2-15.3":0.09776,"15.4":0.00343},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00169,"6.0-6.1":0.00169,"7.0-7.1":0.0045,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04331,"10.0-10.2":0.00169,"10.3":0.01744,"11.0-11.2":0.00731,"11.3-11.4":0.00787,"12.0-12.1":0.03431,"12.2-12.5":0.59175,"13.0-13.1":0.12375,"13.2":0.01012,"13.3":0.07706,"13.4-13.7":0.17719,"14.0-14.4":0.76331,"14.5-14.8":1.07212,"15.0-15.1":1.04962,"15.2-15.3":1.60592,"15.4":0.03487},P:{"4":0.32607,"5.0-5.4":0.05095,"6.2-6.4":0.11209,"7.2-7.4":0.8865,"8.2":0.03042,"9.2":0.05095,"10.1":0.04084,"11.1-11.2":0.30569,"12.0":0.06114,"13.0":0.28531,"14.0":0.43815,"15.0":0.35664,"16.0":1.55901},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.02752,"4.4":0,"4.4.3-4.4.4":0.20446},A:{"8":0.00343,"10":0.00343,"11":0.02401,_:"6 7 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.1657},Q:{"10.4":0},O:{"0":1.88898},H:{"0":2.20408},L:{"0":65.0104},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.0017,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.0017,"88":0,"89":0,"90":0,"91":0.0017,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.0017,"102":0.0034,"103":0.0578,"104":0.0204,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0017,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.0017,"39":0,"40":0.0017,"41":0,"42":0,"43":0.0017,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.0017,"64":0.0017,"65":0,"66":0,"67":0,"68":0.0119,"69":0.0017,"70":0.0068,"71":0,"72":0,"73":0.0017,"74":0.0051,"75":0,"76":0,"77":0,"78":0,"79":0.0085,"80":0.0017,"81":0.0102,"83":0.0017,"84":0,"85":0,"86":0.0051,"87":0.051,"88":0.0051,"89":0.0017,"90":0.0017,"91":0.0051,"92":0.0051,"93":0.0238,"94":0.0051,"95":0.0034,"96":0.0119,"97":0.0068,"98":0.0102,"99":0.0153,"100":0.0051,"101":0.0136,"102":0.0255,"103":0.5253,"104":1.4535,"105":0.0051,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.0034,"62":0,"63":0.0833,"64":0.1207,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.0034,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.0017,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.0153,"86":0,"87":0,"88":0.0068,"89":0.0374,"90":0.0051,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.0017},B:{"12":0.0017,"13":0,"14":0,"15":0,"16":0,"17":0.0017,"18":0.0068,"79":0,"80":0,"81":0,"83":0,"84":0.0017,"85":0.0017,"86":0,"87":0,"88":0,"89":0.0017,"90":0.0017,"91":0.0017,"92":0.0068,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.0017,"100":0.0017,"101":0.0017,"102":0.0034,"103":0.0748,"104":0.1904,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.0051,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.0017,"14.1":0.0136,"15.1":0.0034,"15.2-15.3":0.0051,"15.4":0.0034,"15.5":0.0221,"15.6":0.0221,"16.0":0},G:{"8":0.0011,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00329,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00548,"8.1-8.4":0.00219,"9.0-9.2":0,"9.3":0.00767,"10.0-10.2":0,"10.3":0.03286,"11.0-11.2":0.00657,"11.3-11.4":0.01753,"12.0-12.1":0.02738,"12.2-12.5":0.73609,"13.0-13.1":0.05915,"13.2":0.02081,"13.3":0.07339,"13.4-13.7":0.19169,"14.0-14.4":0.71747,"14.5-14.8":1.01102,"15.0-15.1":0.50387,"15.2-15.3":0.64298,"15.4":0.72513,"15.5":3.15904,"15.6":2.72418,"16.0":0.28041},P:{"4":0.24347,"5.0-5.4":0.04058,"6.2-6.4":0.06087,"7.2-7.4":0.86228,"8.2":0,"9.2":0.02029,"10.1":0.01014,"11.1-11.2":0.16231,"12.0":0.04058,"13.0":0.11159,"14.0":0.30433,"15.0":0.13188,"16.0":0.34491,"17.0":0.98401,"18.0":0.79127},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.09939,"4.2-4.3":0.11181,"4.4":0,"4.4.3-4.4.4":0.64601},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0034,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":75.7328},S:{"2.5":0},R:{_:"0"},M:{"0":0.0332},Q:{"10.4":0},O:{"0":1.4193},H:{"0":2.10592}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SR.js index e62ffc323ac..a77e7e80f08 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SR.js @@ -1 +1 @@ -module.exports={C:{"52":0.03792,"78":0.00689,"91":0.00345,"95":0.01724,"96":0.56531,"97":0.87899,"98":0.08273,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 92 93 94 99 3.5 3.6"},D:{"49":0.03102,"53":0.01034,"63":0.01034,"65":0.02413,"68":0.00689,"69":0.00689,"70":0.00345,"71":0.00689,"72":0.00345,"75":0.04136,"76":0.01034,"79":0.03447,"80":0.03792,"81":0.02068,"83":0.00689,"84":0.01034,"85":0.01379,"86":0.00345,"87":0.05171,"88":0.06205,"89":0.01034,"90":0.01724,"91":0.01724,"92":0.00689,"93":0.09996,"94":0.02068,"95":0.03102,"96":0.41364,"97":6.01157,"98":16.1423,"99":0.04826,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 56 57 58 59 60 61 62 64 66 67 73 74 77 78 100 101"},F:{"28":0.00345,"63":0.09996,"82":0.1172,"83":0.5791,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.05515,"13":0.01379,"15":0.00689,"16":0.00689,"17":0.01034,"18":0.08618,"84":0.00345,"85":0.01034,"90":0.01034,"92":0.01034,"93":0.01379,"95":0.00689,"96":0.14822,"97":0.73076,"98":3.31601,_:"14 79 80 81 83 86 87 88 89 91 94"},E:{"4":0,"13":0.00689,"14":0.07928,"15":0.01724,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.01379,"11.1":0.01379,"12.1":0.00689,"13.1":0.03447,"14.1":0.86864,"15.1":0.26542,"15.2-15.3":0.46535,"15.4":0.00345},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00484,"6.0-6.1":0,"7.0-7.1":0.02907,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.07073,"10.0-10.2":0.00097,"10.3":0.12402,"11.0-11.2":0.00194,"11.3-11.4":0.01453,"12.0-12.1":0.01453,"12.2-12.5":0.8885,"13.0-13.1":0.10077,"13.2":0.00969,"13.3":0.14631,"13.4-13.7":0.14631,"14.0-14.4":0.374,"14.5-14.8":1.37974,"15.0-15.1":1.5057,"15.2-15.3":4.85042,"15.4":0.02325},P:{"4":0.67175,"5.0-5.4":0.08041,"6.2-6.4":0.14072,"7.2-7.4":0.62086,"8.2":0.03016,"9.2":0.04071,"10.1":0.03053,"11.1-11.2":0.36641,"12.0":0.12214,"13.0":0.16285,"14.0":0.21374,"15.0":0.39694,"16.0":6.94144},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00054,"4.2-4.3":0.00564,"4.4":0,"4.4.3-4.4.4":0.02659},A:{"11":0.10686,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.19004},Q:{"10.4":0},O:{"0":0.38663},H:{"0":0.22334},L:{"0":42.71467},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00628,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00314,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00314,"100":0,"101":0,"102":0.00942,"103":0.42704,"104":0.1099,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00314,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00942,"50":0,"51":0,"52":0,"53":0.00314,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0.00314,"62":0,"63":0,"64":0,"65":0.00314,"66":0,"67":0,"68":0,"69":0.03454,"70":0,"71":0,"72":0,"73":0.00628,"74":0,"75":0,"76":0,"77":0.00314,"78":0,"79":0.00942,"80":0,"81":0.01884,"83":0.00314,"84":0,"85":0,"86":0.00314,"87":0.00628,"88":0.00314,"89":0.00628,"90":0,"91":0.02512,"92":0,"93":0.00628,"94":0.00314,"95":0.00314,"96":0.02512,"97":0.02826,"98":0.00314,"99":0.00942,"100":0.0157,"101":0.0157,"102":0.07536,"103":1.70188,"104":4.27354,"105":0.0157,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00314,"64":0.0157,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00314,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00628,"85":0,"86":0,"87":0,"88":0.00314,"89":0.28888,"90":0.01884,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00314,"13":0,"14":0.00314,"15":0.00314,"16":0,"17":0,"18":0.00314,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00314,"90":0,"91":0,"92":0.00314,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.0157,"102":0.00942,"103":0.30458,"104":0.83524,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00628,"14":0.02512,"15":0.00628,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00314,"12.1":0.00314,"13.1":0.05652,"14.1":0.04396,"15.1":0.00628,"15.2-15.3":0.00628,"15.4":0.05966,"15.5":0.0942,"15.6":0.17898,"16.0":0.00314},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.03275,"6.0-6.1":0,"7.0-7.1":0.01403,"8.1-8.4":0.0078,"9.0-9.2":0.00468,"9.3":0.04678,"10.0-10.2":0,"10.3":0.14346,"11.0-11.2":0.00156,"11.3-11.4":0.01248,"12.0-12.1":0.01559,"12.2-12.5":1.07285,"13.0-13.1":0.02339,"13.2":0.00312,"13.3":0.12943,"13.4-13.7":0.06238,"14.0-14.4":0.29784,"14.5-14.8":1.33015,"15.0-15.1":0.26977,"15.2-15.3":0.39764,"15.4":0.66741,"15.5":3.42439,"15.6":7.54583,"16.0":0.08733},P:{"4":0.73033,"5.0-5.4":0.01029,"6.2-6.4":0,"7.2-7.4":0.80234,"8.2":0,"9.2":0.04115,"10.1":0.02057,"11.1-11.2":0.13372,"12.0":0.14401,"13.0":0.34974,"14.0":0.21601,"15.0":0.16458,"16.0":0.2983,"17.0":3.35335,"18.0":3.41507},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01186,"4.2-4.3":0.01582,"4.4":0,"4.4.3-4.4.4":0.41516},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01256,"5.5":0},J:{"7":0,"10":0.01372},N:{"10":0,"11":0},L:{"0":61.35774},S:{"2.5":0},R:{_:"0"},M:{"0":0.16464},Q:{"10.4":0},O:{"0":0.32242},H:{"0":0.19484}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ST.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ST.js index fc18072b652..89979b3f08c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ST.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ST.js @@ -1 +1 @@ -module.exports={C:{"56":0.02655,"94":0.01328,"95":0.15045,"96":0.10178,"97":1.62398,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 98 99 3.5 3.6"},D:{"38":0.02655,"40":0.07523,"43":0.02655,"64":0.06195,"65":0.04868,"68":0.2124,"69":0.10178,"75":3.92498,"79":0.50445,"81":0.04868,"86":0.03983,"88":0.02655,"89":9.01815,"92":0.07523,"93":0.03983,"94":0.06195,"95":0.02655,"96":0.10178,"97":5.76135,"98":10.27485,"99":0.04868,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 41 42 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 66 67 70 71 72 73 74 76 77 78 80 83 84 85 87 90 91 100 101"},F:{"28":0.02655,"83":0.3894,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.02655,"18":0.04868,"91":0.04868,"92":0.04868,"93":0.01328,"94":0.01328,"96":0.03983,"97":1.31865,"98":2.70368,_:"12 13 15 16 17 79 80 81 83 84 85 86 87 88 89 90 95"},E:{"4":0,_:"0 5 6 7 8 9 10 11 12 13 14 15 3.1 3.2 6.1 7.1 9.1 10.1 11.1 12.1 14.1 15.4","5.1":0.04868,"13.1":0.01328,"15.1":0.03983,"15.2-15.3":0.11505},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0.01058,"12.0-12.1":0,"12.2-12.5":0.22179,"13.0-13.1":0,"13.2":0.01058,"13.3":0,"13.4-13.7":0.02115,"14.0-14.4":0.02115,"14.5-14.8":0.50734,"15.0-15.1":0.60221,"15.2-15.3":1.62686,"15.4":0},P:{"4":0.08216,"5.0-5.4":0.01121,"6.2-6.4":0.04087,"7.2-7.4":0.03081,"8.2":0.16348,"9.2":0.01027,"10.1":0.01033,"11.1-11.2":0.01027,"12.0":0.01027,"13.0":0.06162,"14.0":0.07189,"15.0":0.18486,"16.0":0.51349},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00365,"4.2-4.3":0.00075,"4.4":0,"4.4.3-4.4.4":0.03463},A:{"11":0.49118,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.17283},Q:{"10.4":0.01115},O:{"0":1.33243},H:{"0":0.13723},L:{"0":44.10515},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00509,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00509,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.01019,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.03056,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00509,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.02547,"103":0.65713,"104":0.02038,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.06113,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.01019,"39":0,"40":0,"41":0,"42":0,"43":0.49412,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.01019,"56":0.00509,"57":0,"58":0.00509,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.02547,"65":0,"66":0,"67":0.00509,"68":0.05094,"69":0.04585,"70":0.00509,"71":0.01019,"72":0.00509,"73":0,"74":0.01528,"75":0.01019,"76":0,"77":0,"78":0.00509,"79":0.05094,"80":0.04075,"81":0.01019,"83":0.00509,"84":0,"85":0,"86":0.00509,"87":0.02038,"88":0.04075,"89":3.78994,"90":0,"91":0.00509,"92":0.02547,"93":0.00509,"94":0.02038,"95":0,"96":0.04585,"97":0.01528,"98":0,"99":0.03566,"100":0.10697,"101":0.03566,"102":0.1681,"103":4.30952,"104":8.37454,"105":0.01019,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.00509,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.04075,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00509,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.22414,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.05094,"86":0,"87":0.02547,"88":0.01019,"89":0.31583,"90":0.00509,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.01528,"79":0,"80":0.05603,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00509,"91":0,"92":0.01019,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.01019,"100":0,"101":0.01019,"102":0,"103":1.01371,"104":1.15634,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.01019,"14.1":0.02547,"15.1":0.00509,"15.2-15.3":0.00509,"15.4":0.01019,"15.5":0.0815,"15.6":0.10188,"16.0":0.00509},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.051,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02591,"10.0-10.2":0,"10.3":0.11577,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0.04534,"12.2-12.5":0.52704,"13.0-13.1":0,"13.2":0,"13.3":0.07691,"13.4-13.7":0.03886,"14.0-14.4":0.14735,"14.5-14.8":0.14168,"15.0-15.1":0.10201,"15.2-15.3":0.8614,"15.4":3.14849,"15.5":0.86707,"15.6":1.42649,"16.0":0.52057},P:{"4":0.32538,"5.0-5.4":0.01017,"6.2-6.4":0,"7.2-7.4":0.02034,"8.2":0.0305,"9.2":0,"10.1":0,"11.1-11.2":0.04067,"12.0":0.01017,"13.0":0.02034,"14.0":0.01017,"15.0":0.01017,"16.0":0.09151,"17.0":0.2542,"18.0":0.43723},I:{"0":0,"3":0,"4":0.00335,"2.1":0,"2.2":0,"2.3":0,"4.1":0.029,"4.2-4.3":0.04518,"4.4":0,"4.4.3-4.4.4":0.34189},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.25979,"5.5":0},J:{"7":0,"10":0.01962},N:{"10":0,"11":0},L:{"0":62.13261},S:{"2.5":0},R:{_:"0"},M:{"0":0.04906},Q:{"10.4":0},O:{"0":3.06625},H:{"0":0.18579}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SV.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SV.js index ce57f399a7d..0afccddabf9 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SV.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SV.js @@ -1 +1 @@ -module.exports={C:{"35":0.00897,"52":0.02242,"68":0.00448,"70":0.03138,"73":0.04035,"78":0.01793,"80":0.00448,"88":0.01345,"89":0.01345,"90":0.17484,"91":0.0269,"92":0.00448,"93":0.00448,"94":0.02242,"95":0.0269,"96":0.67693,"97":1.12523,"98":0.00897,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 71 72 74 75 76 77 79 81 82 83 84 85 86 87 99 3.5 3.6"},D:{"38":0.00897,"47":0.00448,"49":0.05828,"53":0.00897,"55":0.00448,"65":0.00448,"66":0.00448,"67":0.00897,"69":0.00897,"70":0.00897,"71":0.01793,"72":0.01793,"73":0.01345,"74":0.03586,"75":0.0269,"76":0.03138,"77":0.01793,"78":0.01345,"79":0.15691,"80":0.01345,"81":0.01793,"83":0.01345,"84":0.02242,"85":0.01793,"86":0.03138,"87":0.04035,"88":0.02242,"89":0.0269,"90":0.03586,"91":0.14794,"92":0.05828,"93":0.04035,"94":0.11208,"95":0.07173,"96":0.41244,"97":8.66116,"98":21.37046,"99":0.00448,"100":0.00897,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 54 56 57 58 59 60 61 62 63 64 68 101"},F:{"36":0.00448,"46":0.00897,"77":0.00448,"80":0.00448,"82":0.45727,"83":1.28214,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00897,"16":0.00448,"17":0.00448,"18":0.02242,"84":0.01345,"87":0.00448,"89":0.00448,"92":0.01793,"94":0.0269,"95":0.01345,"96":0.09863,"97":0.67245,"98":2.78394,_:"12 13 14 79 80 81 83 85 86 88 90 91 93"},E:{"4":0,"12":0.01345,"13":0.04931,"14":0.08069,"15":0.08966,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 9.1","5.1":0.0269,"10.1":0.00448,"11.1":0.00448,"12.1":0.01345,"13.1":0.07173,"14.1":0.22863,"15.1":0.17484,"15.2-15.3":0.31829,"15.4":0.00448},G:{"8":0,"3.2":0.00102,"4.0-4.1":0.00102,"4.2-4.3":0,"5.0-5.1":0.00102,"6.0-6.1":0.01229,"7.0-7.1":0.01639,"8.1-8.4":0.00102,"9.0-9.2":0,"9.3":0.02766,"10.0-10.2":0.00051,"10.3":0.01946,"11.0-11.2":0.00461,"11.3-11.4":0.00717,"12.0-12.1":0.00768,"12.2-12.5":0.24331,"13.0-13.1":0.00563,"13.2":0.00461,"13.3":0.02151,"13.4-13.7":0.07581,"14.0-14.4":0.32578,"14.5-14.8":0.87899,"15.0-15.1":0.65771,"15.2-15.3":2.78911,"15.4":0.01742},P:{"4":0.17686,"5.0-5.4":0.01013,"6.2-6.4":0.04052,"7.2-7.4":0.20807,"8.2":0.0104,"9.2":0.02081,"10.1":0.06153,"11.1-11.2":0.13525,"12.0":0.03121,"13.0":0.18726,"14.0":0.14565,"15.0":0.11444,"16.0":1.51891},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00398,"4.2-4.3":0.00497,"4.4":0,"4.4.3-4.4.4":0.05173},A:{"11":0.08069,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.54067},Q:{"10.4":0},O:{"0":0.09379},H:{"0":0.18803},L:{"0":45.00528},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.01277,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00851,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00426,"69":0,"70":0,"71":0,"72":0,"73":0.02128,"74":0,"75":0,"76":0,"77":0,"78":0.00851,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00426,"89":0,"90":0.2128,"91":0.01702,"92":0,"93":0,"94":0,"95":0.00426,"96":0,"97":0,"98":0.00426,"99":0.00426,"100":0.00426,"101":0.00426,"102":0.02979,"103":0.57882,"104":0.11917,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00426,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02128,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00426,"66":0,"67":0.00851,"68":0.00426,"69":0,"70":0.00426,"71":0.00426,"72":0.00426,"73":0.00426,"74":0,"75":0.00426,"76":0.00851,"77":0.00426,"78":0.00426,"79":0.04256,"80":0.01277,"81":0.00851,"83":0.00426,"84":0.00851,"85":0.00426,"86":0.00426,"87":0.01277,"88":0.00851,"89":0.02128,"90":0.00426,"91":0.09789,"92":0.02128,"93":0.00851,"94":0.00851,"95":0.00851,"96":0.01702,"97":0.01277,"98":0.01702,"99":0.0383,"100":0.0383,"101":0.05533,"102":0.07661,"103":2.65574,"104":9.21424,"105":0.03405,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00426,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00426,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01277,"64":0.00851,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00426,"86":0,"87":0,"88":0.00851,"89":0.82141,"90":0.04682,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00851,"16":0.00426,"17":0,"18":0.00851,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00426,"93":0.00851,"94":0,"95":0,"96":0.00426,"97":0.00426,"98":0.00426,"99":0.00426,"100":0.00426,"101":0.02128,"102":0.01277,"103":0.39155,"104":1.30659,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00426,"14":0.01702,"15":0.01277,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.02128,"14.1":0.05958,"15.1":0.00851,"15.2-15.3":0.01277,"15.4":0.02979,"15.5":0.13194,"15.6":0.17024,"16.0":0.00426},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0021,"6.0-6.1":0.02313,"7.0-7.1":0.02103,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02944,"10.0-10.2":0,"10.3":0.02419,"11.0-11.2":0.00421,"11.3-11.4":0.00736,"12.0-12.1":0.00631,"12.2-12.5":0.26919,"13.0-13.1":0.00421,"13.2":0.00526,"13.3":0.02419,"13.4-13.7":0.07466,"14.0-14.4":0.21136,"14.5-14.8":0.45636,"15.0-15.1":0.16614,"15.2-15.3":0.15352,"15.4":0.42902,"15.5":2.42481,"15.6":6.06097,"16.0":0.11462},P:{"4":0.11231,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.42881,"8.2":0,"9.2":0.02042,"10.1":0,"11.1-11.2":0.09189,"12.0":0.01021,"13.0":0.14294,"14.0":0.13273,"15.0":0.05105,"16.0":0.16336,"17.0":1.42936,"18.0":0.9495},I:{"0":0,"3":0,"4":0.01405,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00703,"4.2-4.3":0.02108,"4.4":0,"4.4.3-4.4.4":0.25296},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00426,"10":0,"11":0.01702,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":65.77678},S:{"2.5":0},R:{_:"0"},M:{"0":0.46526},Q:{"10.4":0},O:{"0":0.0919},H:{"0":0.18489}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SY.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SY.js index 91189fe2bd0..bdf07af7960 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SY.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SY.js @@ -1 +1 @@ -module.exports={C:{"16":0.00261,"30":0.00391,"35":0.0013,"38":0.00391,"41":0.0013,"43":0.00261,"47":0.00522,"48":0.00261,"52":0.04434,"53":0.0013,"54":0.0013,"56":0.00522,"57":0.0013,"60":0.0013,"61":0.0013,"66":0.0013,"70":0.0013,"72":0.01304,"74":0.00261,"76":0.00261,"78":0.01304,"80":0.00261,"81":0.00261,"83":0.0013,"84":0.04303,"85":0.00261,"86":0.00391,"87":0.0013,"88":0.00391,"89":0.01043,"90":0.00261,"91":0.01174,"92":0.00522,"93":0.00522,"94":0.04434,"95":0.0313,"96":0.50726,"97":0.8476,"98":0.00261,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 34 36 37 39 40 42 44 45 46 49 50 51 55 58 59 62 63 64 65 67 68 69 71 73 75 77 79 82 99 3.5 3.6"},D:{"11":0.00261,"24":0.0013,"28":0.0013,"33":0.0013,"36":0.00522,"38":0.00522,"39":0.00261,"40":0.0013,"42":0.00261,"43":0.01434,"49":0.01043,"50":0.0013,"51":0.0013,"52":0.00522,"53":0.00391,"55":0.00261,"56":0.00261,"57":0.00261,"58":0.00261,"60":0.00391,"61":0.0013,"62":0.00261,"63":0.0313,"64":0.00261,"65":0.00522,"66":0.00522,"67":0.00652,"68":0.00261,"69":0.01174,"70":0.0639,"71":0.01043,"72":0.00782,"73":0.00652,"74":0.00261,"75":0.00391,"76":0.00261,"77":0.00391,"78":0.01043,"79":0.04694,"80":0.01565,"81":0.01956,"83":0.01956,"84":0.00913,"85":0.01434,"86":0.02347,"87":0.11997,"88":0.02086,"89":0.02738,"90":0.02869,"91":0.07042,"92":0.05346,"93":0.04694,"94":0.02999,"95":0.05607,"96":0.24776,"97":2.32634,"98":5.42986,"99":0.00522,"100":0.00652,"101":0.00261,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 29 30 31 32 34 35 37 41 44 45 46 47 48 54 59"},F:{"69":0.0013,"79":0.0013,"80":0.01304,"82":0.07694,"83":0.31557,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 70 71 72 73 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00522,"14":0.00261,"15":0.00522,"16":0.00391,"17":0.01304,"18":0.0326,"84":0.00913,"86":0.0013,"89":0.00522,"90":0.00522,"91":0.0013,"92":0.01695,"93":0.0013,"94":0.0013,"95":0.00913,"96":0.01304,"97":0.16822,"98":0.5542,_:"13 79 80 81 83 85 87 88"},E:{"4":0,"13":0.00261,"14":0.01304,"15":0.00522,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1","5.1":0.05477,"10.1":0.00913,"11.1":0.00261,"12.1":0.0013,"13.1":0.01043,"14.1":0.04564,"15.1":0.03912,"15.2-15.3":0.08476,"15.4":0.0013},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00293,"6.0-6.1":0.00176,"7.0-7.1":0.03108,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.10087,"10.0-10.2":0.00469,"10.3":0.05278,"11.0-11.2":0.01877,"11.3-11.4":0.04574,"12.0-12.1":0.06334,"12.2-12.5":0.4457,"13.0-13.1":0.0305,"13.2":0.00645,"13.3":0.04633,"13.4-13.7":0.12667,"14.0-14.4":0.32783,"14.5-14.8":0.59584,"15.0-15.1":1.08435,"15.2-15.3":2.85251,"15.4":0.02229},P:{"4":2.07895,"5.0-5.4":0.08035,"6.2-6.4":0.18078,"7.2-7.4":0.41177,"8.2":0.04017,"9.2":0.27117,"10.1":0.18078,"11.1-11.2":0.31134,"12.0":0.16069,"13.0":0.62268,"14.0":0.96415,"15.0":0.55238,"16.0":1.7877},I:{"0":0,"3":0,"4":0.00171,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01641,"4.2-4.3":0.02964,"4.4":0,"4.4.3-4.4.4":0.16092},A:{"11":0.05607,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.15651},Q:{"10.4":0},O:{"0":1.11296},H:{"0":1.60521},L:{"0":70.09159},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00156,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00624,"53":0,"54":0,"55":0,"56":0.00156,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00156,"66":0,"67":0,"68":0.02027,"69":0,"70":0,"71":0,"72":0.00156,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00156,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00468,"85":0,"86":0,"87":0,"88":0.00156,"89":0.00156,"90":0,"91":0.00156,"92":0.00156,"93":0,"94":0.00624,"95":0.00156,"96":0.00156,"97":0.00156,"98":0.00156,"99":0.00468,"100":0.00468,"101":0.00624,"102":0.01247,"103":0.1824,"104":0.0265,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.00156,"36":0.00156,"37":0,"38":0.00156,"39":0,"40":0.00468,"41":0,"42":0,"43":0.00156,"44":0,"45":0,"46":0.00156,"47":0,"48":0,"49":0.00312,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00156,"57":0,"58":0.00156,"59":0,"60":0,"61":0,"62":0,"63":0.00156,"64":0,"65":0,"66":0.00156,"67":0,"68":0.00156,"69":0.00312,"70":0.10913,"71":0.00156,"72":0.00468,"73":0.00156,"74":0.00156,"75":0.00156,"76":0,"77":0,"78":0.00156,"79":0.00468,"80":0.00312,"81":0.02494,"83":0.00468,"84":0.00156,"85":0.00156,"86":0.00468,"87":0.01247,"88":0.00312,"89":0.00624,"90":0.00312,"91":0.00312,"92":0.00624,"93":0.00156,"94":0.00312,"95":0.0078,"96":0.00935,"97":0.00312,"98":0.00468,"99":0.00624,"100":0.01247,"101":0.01091,"102":0.01871,"103":0.3726,"104":0.85745,"105":0.00312,"106":0.00156,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00156,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00312,"47":0,"48":0,"49":0,"50":0.00312,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00156,"60":0.00312,"62":0,"63":0.01403,"64":0.01091,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00156,"80":0,"81":0,"82":0.00156,"83":0.00156,"84":0.00156,"85":0.0078,"86":0.00156,"87":0,"88":0.00156,"89":0.04053,"90":0.00624,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00156},B:{"12":0,"13":0,"14":0,"15":0.00156,"16":0,"17":0,"18":0.00624,"79":0,"80":0,"81":0,"83":0,"84":0.00156,"85":0,"86":0,"87":0,"88":0,"89":0.00156,"90":0.00156,"91":0,"92":0.00312,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00312,"102":0.00156,"103":0.0343,"104":0.09042,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00156,"14":0.00156,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.04365,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.00156,"14.1":0.01247,"15.1":0.00312,"15.2-15.3":0.00156,"15.4":0.00156,"15.5":0.00468,"15.6":0.00312,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.0009,"5.0-5.1":0.00419,"6.0-6.1":0.0009,"7.0-7.1":0.02183,"8.1-8.4":0.00449,"9.0-9.2":0,"9.3":0.07446,"10.0-10.2":0.00239,"10.3":0.04815,"11.0-11.2":0.00688,"11.3-11.4":0.01824,"12.0-12.1":0.03678,"12.2-12.5":0.36664,"13.0-13.1":0.01166,"13.2":0.00987,"13.3":0.03768,"13.4-13.7":0.07596,"14.0-14.4":0.2527,"14.5-14.8":0.3152,"15.0-15.1":0.1893,"15.2-15.3":0.17883,"15.4":0.23834,"15.5":0.68512,"15.6":0.39026,"16.0":0.01794},P:{"4":2.13916,"5.0-5.4":0.07097,"6.2-6.4":0.22304,"7.2-7.4":0.39539,"8.2":0.04055,"9.2":0.2129,"10.1":0.17235,"11.1-11.2":0.27373,"12.0":0.11152,"13.0":0.37511,"14.0":0.54746,"15.0":0.17235,"16.0":0.65898,"17.0":1.72349,"18.0":0.49677},I:{"0":0,"3":0,"4":0.00214,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02742,"4.2-4.3":0.0407,"4.4":0,"4.4.3-4.4.4":0.24248},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0078,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":81.76882},S:{"2.5":0},R:{_:"0"},M:{"0":0.26167},Q:{"10.4":0},O:{"0":0.96227},H:{"0":1.82204}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SZ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SZ.js index 8fb30937429..8349a56c559 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SZ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/SZ.js @@ -1 +1 @@ -module.exports={C:{"23":0.02002,"27":0.005,"34":0.01751,"36":0.01751,"52":0.01251,"60":0.05004,"61":0.00751,"76":0.01251,"77":0.005,"78":0.005,"88":0.01001,"89":0.01001,"91":0.02002,"92":0.005,"94":0.005,"96":0.81815,"97":0.3803,"98":0.03002,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 28 29 30 31 32 33 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 62 63 64 65 66 67 68 69 70 71 72 73 74 75 79 80 81 82 83 84 85 86 87 90 93 95 99 3.5 3.6"},D:{"26":0.005,"36":0.00751,"49":0.00751,"59":0.0025,"63":0.005,"68":0.005,"69":0.00751,"70":0.02002,"74":0.04754,"75":0.0025,"76":0.00751,"78":0.0025,"79":0.01251,"80":0.005,"81":0.01751,"83":0.01001,"84":0.0025,"85":0.01751,"86":0.02252,"87":0.03002,"88":0.02752,"89":0.005,"90":0.01001,"91":0.02502,"92":0.02752,"93":0.0025,"94":0.10008,"95":0.04504,"96":0.18014,"97":3.68044,"98":6.72287,"99":0.00751,"100":0.01501,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 60 61 62 64 65 66 67 71 72 73 77 101"},F:{"36":0.005,"37":0.005,"60":0.01001,"62":0.0025,"63":0.005,"65":0.0025,"66":0.00751,"77":0.03753,"79":0.06005,"80":0.005,"82":0.07006,"83":1.26601,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 64 67 68 69 70 71 72 73 74 75 76 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01751,"13":0.02252,"14":0.0025,"15":0.01251,"16":0.01751,"17":0.02752,"18":0.10258,"80":0.005,"84":0.01251,"85":0.01751,"86":0.26021,"89":0.01001,"90":0.01751,"92":0.01501,"93":0.005,"94":0.00751,"95":0.0025,"96":0.02752,"97":0.71557,"98":1.78643,_:"79 81 83 87 88 91"},E:{"4":0,"8":0.00751,"13":0.00751,"14":0.01751,"15":0.01751,_:"0 5 6 7 9 10 11 12 3.1 3.2 6.1 7.1","5.1":0.005,"9.1":0.005,"10.1":0.00751,"11.1":0.0025,"12.1":0.0025,"13.1":0.02752,"14.1":0.03753,"15.1":0.46787,"15.2-15.3":0.8732,"15.4":0.02002},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.00297,"8.1-8.4":0.00495,"9.0-9.2":0,"9.3":0.00792,"10.0-10.2":0,"10.3":0.18715,"11.0-11.2":0.01188,"11.3-11.4":0.00693,"12.0-12.1":0.01584,"12.2-12.5":0.21587,"13.0-13.1":0.01188,"13.2":0,"13.3":0.01188,"13.4-13.7":0.02872,"14.0-14.4":0.1921,"14.5-14.8":0.7704,"15.0-15.1":1.69825,"15.2-15.3":6.71674,"15.4":0.01386},P:{"4":0.35635,"5.0-5.4":0.08041,"6.2-6.4":0.14072,"7.2-7.4":0.67198,"8.2":0.03016,"9.2":0.02036,"10.1":0.03053,"11.1-11.2":0.09163,"12.0":0.04073,"13.0":0.18327,"14.0":0.1629,"15.0":0.18327,"16.0":1.19123},I:{"0":0,"3":0,"4":0.00023,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00046,"4.2-4.3":0.00103,"4.4":0,"4.4.3-4.4.4":0.02077},A:{"9":0.00751,"11":0.1251,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.015},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.09747},Q:{"10.4":0},O:{"0":1.18468},H:{"0":15.81573},L:{"0":48.96257},S:{"2.5":0.06748}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00237,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00474,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00237,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.01185,"72":0.00237,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00237,"89":0,"90":0,"91":0.00237,"92":0,"93":0.00237,"94":0,"95":0.00237,"96":0,"97":0,"98":0.01659,"99":0.00237,"100":0.00237,"101":0.00474,"102":0.0711,"103":0.15879,"104":0.05214,"105":0.00948,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.00237,"36":0,"37":0,"38":0,"39":0,"40":0.00237,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00237,"50":0,"51":0,"52":0,"53":0.00237,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0.00237,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00237,"68":0,"69":0.00237,"70":0.01422,"71":0,"72":0.00237,"73":0,"74":0.01185,"75":0,"76":0,"77":0.00237,"78":0,"79":0.00711,"80":0,"81":0.02607,"83":0,"84":0.00711,"85":0.00237,"86":0.00237,"87":0.00474,"88":0.00237,"89":0.10428,"90":0.00474,"91":0,"92":0.00237,"93":0.00474,"94":0.04503,"95":0.01185,"96":0.03792,"97":0.00711,"98":0,"99":0.01659,"100":0.00474,"101":0.00474,"102":0.02844,"103":0.60909,"104":1.54761,"105":0.01185,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00237,"25":0.01422,"26":0.03081,"27":0,"28":0.02133,"29":0.00237,"30":0.00237,"31":0.00474,"32":0.02607,"33":0,"34":0,"35":0.64938,"36":0.00474,"37":0,"38":0.00474,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0.02133,"45":0.00948,"46":0.00711,"47":0.01896,"48":0,"49":0,"50":0.01185,"51":0.04029,"52":0,"53":0,"54":0.00711,"55":0.00711,"56":0.01185,"57":0.00474,"58":0.13272,"60":0.05214,"62":0,"63":0.80817,"64":0.28203,"65":0,"66":0,"67":0.00237,"68":0,"69":0,"70":0.00237,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00474,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00237,"86":0.00237,"87":0,"88":0.00237,"89":0.17538,"90":0.01659,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.03555},B:{"12":0.00948,"13":0.00237,"14":0,"15":0.00474,"16":0.00237,"17":0.00474,"18":0.00711,"79":0,"80":0,"81":0,"83":0,"84":0.00474,"85":0,"86":0,"87":0,"88":0,"89":0.00711,"90":0.00237,"91":0,"92":0.00474,"93":0,"94":0,"95":0.00237,"96":0,"97":0,"98":0.00237,"99":0,"100":0,"101":0.00474,"102":0.00237,"103":0.13509,"104":0.38394,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00237,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.00237,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.00237,"14.1":0.02844,"15.1":0.01185,"15.2-15.3":0.00237,"15.4":0,"15.5":0.0237,"15.6":0.01896,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00482,"7.0-7.1":0,"8.1-8.4":0.00201,"9.0-9.2":0.00161,"9.3":0.00763,"10.0-10.2":0,"10.3":0.01567,"11.0-11.2":0,"11.3-11.4":0.00241,"12.0-12.1":0.00844,"12.2-12.5":0.798,"13.0-13.1":0.00121,"13.2":0.00241,"13.3":0.01447,"13.4-13.7":0.02331,"14.0-14.4":0.06791,"14.5-14.8":0.18845,"15.0-15.1":0.0659,"15.2-15.3":0.21698,"15.4":0.14505,"15.5":1.10177,"15.6":1.32357,"16.0":0.02491},P:{"4":0.38799,"5.0-5.4":0.07147,"6.2-6.4":0,"7.2-7.4":1.95015,"8.2":0,"9.2":0.01021,"10.1":0.01021,"11.1-11.2":0.05105,"12.0":0,"13.0":0.17357,"14.0":0.12252,"15.0":0.06126,"16.0":0.19399,"17.0":0.55135,"18.0":0.64324},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00682,"4.2-4.3":0.00303,"4.4":0,"4.4.3-4.4.4":0.36777},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02133,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":66.61521},S:{"2.5":0.06104},R:{_:"0"},M:{"0":0.763},Q:{"10.4":0},O:{"0":1.02242},H:{"0":13.61647}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TC.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TC.js index eb709eb42d6..c73847cc553 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TC.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TC.js @@ -1 +1 @@ -module.exports={C:{"56":0.04314,"68":0.00539,"92":0.01078,"93":0.02696,"96":0.674,"97":0.73331,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 94 95 98 99 3.5 3.6"},D:{"23":0.00539,"42":0.16715,"49":0.01078,"63":0.01618,"76":0.04314,"78":0.00539,"79":0.02157,"83":0.03774,"84":0.00539,"86":0.07549,"87":0.27499,"88":0.03774,"91":0.01618,"92":0.03235,"93":0.07549,"94":0.02157,"95":0.01078,"96":2.68522,"97":11.00507,"98":15.2324,"99":0.31274,"100":0.29656,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 70 71 72 73 74 75 77 80 81 85 89 90 101"},F:{"79":0.01078,"80":0.01078,"82":0.04853,"83":0.17794,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.01078,"16":0.01618,"17":4.84202,"18":0.16176,"80":0.00539,"96":0.03235,"97":1.42888,"98":4.62094,_:"12 13 15 79 81 83 84 85 86 87 88 89 90 91 92 93 94 95"},E:{"4":0,"13":0.10245,"14":0.30195,"15":0.66861,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1","9.1":0.01618,"10.1":0.02696,"11.1":0.01078,"12.1":0.09706,"13.1":0.78184,"14.1":2.75531,"15.1":0.92203,"15.2-15.3":1.8225,"15.4":0.00539},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00443,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.03545,"9.0-9.2":0,"9.3":0.01329,"10.0-10.2":0,"10.3":0.04653,"11.0-11.2":0.01773,"11.3-11.4":0.00886,"12.0-12.1":0.03324,"12.2-12.5":0.91067,"13.0-13.1":0.0288,"13.2":0.00222,"13.3":0.03545,"13.4-13.7":0.10414,"14.0-14.4":0.72898,"14.5-14.8":4.0792,"15.0-15.1":3.38788,"15.2-15.3":12.69625,"15.4":0.01773},P:{"4":0.15843,"5.0-5.4":0.0102,"6.2-6.4":0.01036,"7.2-7.4":0.04225,"8.2":0.02073,"9.2":0.19011,"10.1":0.0204,"11.1-11.2":0.04225,"12.0":0.06121,"13.0":0.39078,"14.0":0.05281,"15.0":0.02112,"16.0":2.47144},I:{"0":0,"3":0,"4":0.00481,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.00441},A:{"11":0.17794,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.04148},Q:{"10.4":0},O:{"0":0.00461},H:{"0":0.17454},L:{"0":19.34237},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00467,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.00467,"103":0.76555,"104":0.07936,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0.00934,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0.00934,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00467,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00467,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":1.61046,"76":0.00934,"77":0,"78":0.00934,"79":0,"80":0,"81":0,"83":0.02334,"84":0,"85":0,"86":0,"87":0.03734,"88":0.00467,"89":0,"90":0,"91":0.00467,"92":0.00934,"93":0.07469,"94":0,"95":0.00467,"96":0,"97":0.03268,"98":0.12604,"99":0.00934,"100":0.02334,"101":0.06068,"102":0.16338,"103":3.53368,"104":6.56788,"105":0.07469,"106":0.01867,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.00467,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.14471,"90":0.01867,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00467,"15":0,"16":0.00467,"17":0,"18":0.04668,"79":0,"80":0,"81":0,"83":0.00467,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00934,"102":0.00467,"103":0.79356,"104":2.17529,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.1167,"14":0.02801,"15":0.04201,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00467,"11.1":0.014,"12.1":0.00467,"13.1":0.1167,"14.1":0.55549,"15.1":0.07002,"15.2-15.3":0.04201,"15.4":0.09336,"15.5":1.01762,"15.6":1.12032,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0042,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.56313,"10.0-10.2":0,"10.3":0.06304,"11.0-11.2":0,"11.3-11.4":0.02101,"12.0-12.1":0,"12.2-12.5":1.94154,"13.0-13.1":0.03782,"13.2":0.0042,"13.3":0.19752,"13.4-13.7":0.07564,"14.0-14.4":0.48749,"14.5-14.8":2.83667,"15.0-15.1":0.10506,"15.2-15.3":0.98758,"15.4":0.87832,"15.5":10.16157,"15.6":23.53802,"16.0":0.13868},P:{"4":0.17004,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.05314,"8.2":0,"9.2":0.02125,"10.1":0,"11.1-11.2":0.1169,"12.0":0,"13.0":0.03188,"14.0":0.07439,"15.0":0.02125,"16.0":0.04251,"17.0":1.26464,"18.0":1.28589},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":1.0736},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01867,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":32.08499},S:{"2.5":0},R:{_:"0"},M:{"0":0.12264},Q:{"10.4":0},O:{"0":0.05332},H:{"0":0.02524}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TD.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TD.js index a11acaebbe7..b33048e2c6c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TD.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TD.js @@ -1 +1 @@ -module.exports={C:{"17":0.00473,"35":0.00378,"37":0.00284,"41":0.00662,"47":0.00284,"52":0.0246,"55":0.00284,"57":0.01608,"58":0.00284,"61":0.00189,"66":0.00473,"72":0.035,"78":0.01041,"79":0.00095,"80":0.01135,"81":0.00095,"85":0.01324,"86":0.01608,"87":0.00095,"88":0.00284,"89":0.00757,"90":0.00095,"91":0.00189,"93":0.00284,"94":0.00284,"95":0.02933,"96":0.47395,"97":0.45881,"98":0.02081,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 38 39 40 42 43 44 45 46 48 49 50 51 53 54 56 59 60 62 63 64 65 67 68 69 70 71 73 74 75 76 77 82 83 84 92 99 3.5 3.6"},D:{"11":0.00284,"24":0.00378,"25":0.00568,"26":0.00189,"30":0.01987,"33":0.00095,"37":0.00946,"38":0.00189,"39":0.00095,"40":0.01324,"43":0.00284,"49":0.00568,"52":0.00189,"55":0.0123,"57":0.00378,"60":0.00568,"61":0.00189,"65":0.00473,"67":0.00473,"68":0.00851,"69":0.00095,"70":0.00284,"72":0.00095,"74":0.00189,"75":0.00662,"77":0.00851,"78":0.00284,"79":0.00189,"80":0.06433,"81":0.00851,"83":0.01987,"85":0.00189,"86":0.01419,"87":0.04635,"88":0.00189,"89":0.00189,"90":0.00946,"91":0.00189,"92":0.08609,"93":0.03406,"94":0.01987,"95":0.01135,"96":0.05771,"97":1.16074,"98":2.11053,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 27 28 29 31 32 34 35 36 41 42 44 45 46 47 48 50 51 53 54 56 58 59 62 63 64 66 71 73 76 84 99 100 101"},F:{"34":0.00284,"35":0.00284,"37":0.05487,"40":0.01135,"42":0.01797,"43":0.00284,"44":0.00189,"45":0.00095,"46":0.00473,"50":0.00662,"51":0.00095,"62":0.00189,"64":0.00568,"66":0.00189,"77":0.00189,"79":0.00946,"80":0.03027,"81":0.00946,"82":0.04825,"83":0.05203,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 36 38 39 41 47 48 49 52 53 54 55 56 57 58 60 63 65 67 68 69 70 71 72 73 74 75 76 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.07473,"13":0.01987,"14":0.05487,"15":0.00095,"16":0.00473,"17":0.01324,"18":0.02838,"80":0.00189,"84":0.01135,"85":0.01324,"89":0.01135,"90":0.00284,"91":0.00189,"92":0.02365,"93":0.00851,"94":0.01419,"95":0.03216,"96":0.16082,"97":0.21096,"98":0.45692,_:"79 81 83 86 87 88"},E:{"4":0,"11":0.00473,"13":0.00189,"14":0.00946,"15":0.00189,_:"0 5 6 7 8 9 10 12 3.1 3.2 6.1 11.1 15.4","5.1":0.00284,"7.1":0.00757,"9.1":0.00189,"10.1":0.00568,"12.1":0.00568,"13.1":0.01703,"14.1":0.00757,"15.1":0.00757,"15.2-15.3":0.03216},G:{"8":0.00068,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01559,"10.0-10.2":0.00407,"10.3":0.00881,"11.0-11.2":0.01694,"11.3-11.4":0.04066,"12.0-12.1":0.17144,"12.2-12.5":2.01735,"13.0-13.1":0.23108,"13.2":0.00136,"13.3":0.03049,"13.4-13.7":0.07522,"14.0-14.4":1.23535,"14.5-14.8":0.55702,"15.0-15.1":1.02392,"15.2-15.3":1.33835,"15.4":0.00407},P:{"4":0.84672,"5.0-5.4":0.0504,"6.2-6.4":0.04032,"7.2-7.4":0.21168,"8.2":0.01049,"9.2":0.16128,"10.1":0.04032,"11.1-11.2":0.24192,"12.0":0.0504,"13.0":0.3024,"14.0":0.63504,"15.0":0.23184,"16.0":0.74592},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00138,"4.4":0,"4.4.3-4.4.4":0.05295},A:{"11":0.25069,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.01811},N:{_:"10 11"},R:{_:"0"},M:{"0":0.13581},Q:{"10.4":0.04527},O:{"0":0.5704},H:{"0":3.06011},L:{"0":77.16592},S:{"2.5":0.03622}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00344,"37":0,"38":0.00172,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.00172,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0.00172,"62":0,"63":0,"64":0,"65":0,"66":0.00172,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00172,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.00172,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00172,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0.00172,"99":0,"100":0.00344,"101":0,"102":0.01894,"103":0.3444,"104":0.02066,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00344,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0.00344,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00172,"38":0,"39":0,"40":0.00172,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0.00172,"81":0.00172,"83":0,"84":0.00172,"85":0,"86":0.00172,"87":0.00689,"88":0,"89":0.00344,"90":0.00172,"91":0.00172,"92":0.00344,"93":0,"94":0.02239,"95":0,"96":0.00172,"97":0.00517,"98":0.00689,"99":0.00172,"100":0.00344,"101":0.00172,"102":0.01722,"103":0.19975,"104":0.47699,"105":0.00344,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00172,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00172,"37":0,"38":0.00172,"39":0,"40":0,"41":0,"42":0.00172,"43":0,"44":0,"45":0.00172,"46":0.00172,"47":0.00172,"48":0,"49":0,"50":0.00172,"51":0.00172,"52":0,"53":0.00172,"54":0,"55":0.04822,"56":0.00172,"57":0.00172,"58":0.00172,"60":0.03788,"62":0.00172,"63":0.10676,"64":0.01894,"65":0.00172,"66":0,"67":0,"68":0,"69":0,"70":0.00172,"71":0,"72":0,"73":0.0155,"74":0,"75":0,"76":0,"77":0.00172,"78":0,"79":0.01205,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00172,"86":0,"87":0,"88":0,"89":0.00517,"90":0.00517,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00172,"13":0.00172,"14":0.00172,"15":0,"16":0,"17":0,"18":0.00517,"79":0,"80":0,"81":0,"83":0,"84":0.00172,"85":0.00172,"86":0,"87":0,"88":0,"89":0,"90":0.00172,"91":0,"92":0.00172,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00172,"101":0.00172,"102":0.00172,"103":0.03444,"104":0.09127,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00172,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.00172,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0.00517,"15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0.00861,"15.6":0.031,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00237,"7.0-7.1":0.00316,"8.1-8.4":0.00395,"9.0-9.2":0,"9.3":0.03398,"10.0-10.2":0,"10.3":0.00237,"11.0-11.2":0.03872,"11.3-11.4":0.0245,"12.0-12.1":0.05848,"12.2-12.5":2.14242,"13.0-13.1":0.00869,"13.2":0.00711,"13.3":0.01818,"13.4-13.7":0.0648,"14.0-14.4":0.58006,"14.5-14.8":0.64881,"15.0-15.1":0.30188,"15.2-15.3":0.59191,"15.4":0.70334,"15.5":1.20832,"15.6":1.31817,"16.0":0.1383},P:{"4":0.3223,"5.0-5.4":0.02014,"6.2-6.4":0.05036,"7.2-7.4":0.27194,"8.2":0,"9.2":0.10072,"10.1":0,"11.1-11.2":0.18129,"12.0":0.02014,"13.0":0.06043,"14.0":0.5036,"15.0":0.08058,"16.0":0.66475,"17.0":0.8964,"18.0":0.68489},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01062,"4.2-4.3":0.01793,"4.4":0,"4.4.3-4.4.4":0.07834},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01378,"5.5":0},J:{"7":0,"10":0.32284},N:{"10":0,"11":0},L:{"0":81.09547},S:{"2.5":0.06622},R:{_:"0"},M:{"0":0.04967},Q:{"10.4":0.03311},O:{"0":1.08442},H:{"0":2.3668}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TG.js index d85f4eedf65..16cc0d332a4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TG.js @@ -1 +1 @@ -module.exports={C:{"40":0.00684,"43":0.01369,"50":0.00684,"51":0.00684,"52":0.02738,"56":0.00342,"60":0.00684,"64":0.01027,"65":0.00342,"66":0.00342,"68":0.01027,"72":0.03764,"75":0.00342,"77":0.00684,"78":0.01711,"79":0.01027,"80":0.03764,"84":0.01027,"85":0.00684,"86":0.00342,"87":0.00684,"88":0.01711,"89":0.02395,"90":0.00342,"91":0.03764,"92":0.02395,"93":0.01369,"94":0.03764,"95":0.11635,"96":1.70073,"97":2.58361,"98":0.05475,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 42 44 45 46 47 48 49 53 54 55 57 58 59 61 62 63 67 69 70 71 73 74 76 81 82 83 99 3.5 3.6"},D:{"11":0.00342,"29":0.0308,"31":0.20874,"33":0.05133,"43":0.07528,"45":0.00342,"48":0.00342,"49":0.05475,"50":0.00342,"51":0.00342,"55":0.02738,"58":0.00684,"59":0.00684,"60":0.00684,"63":0.01027,"64":0.00342,"65":0.02053,"69":0.00342,"70":0.00342,"72":0.04106,"73":0.01027,"74":0.00684,"75":0.00684,"76":0.01027,"77":0.01027,"78":0.00684,"79":0.03764,"80":0.02395,"81":0.05475,"83":0.01711,"84":0.04791,"85":0.01711,"86":0.06844,"87":0.02738,"88":0.01711,"89":0.03422,"90":0.01369,"91":0.02738,"92":0.22585,"93":0.05133,"94":0.02738,"95":0.07871,"96":0.61254,"97":3.89766,"98":10.25573,"99":0.02053,"100":0.03422,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 32 34 35 36 37 38 39 40 41 42 44 46 47 52 53 54 56 57 61 62 66 67 68 71 101"},F:{"70":0.01027,"79":0.02395,"80":0.00684,"81":0.00684,"82":0.24296,"83":1.98476,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01027,"13":0.00684,"14":0.00684,"15":0.02053,"16":0.00342,"17":0.20532,"18":0.03422,"83":0.00684,"84":0.01027,"85":0.00342,"89":0.00342,"92":0.03422,"95":0.01711,"96":0.04106,"97":0.55094,"98":2.00187,_:"79 80 81 86 87 88 90 91 93 94"},E:{"4":0,"13":0.00342,"14":0.02738,"15":0.00342,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 11.1 15.4","5.1":0.01369,"12.1":0.00684,"13.1":0.05817,"14.1":0.10266,"15.1":0.02738,"15.2-15.3":0.05817},G:{"8":0.00062,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.02618,"5.0-5.1":0.02805,"6.0-6.1":0,"7.0-7.1":0.08165,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.06482,"10.0-10.2":0,"10.3":0.08789,"11.0-11.2":0.10098,"11.3-11.4":0.00748,"12.0-12.1":0.05111,"12.2-12.5":1.02223,"13.0-13.1":0.00436,"13.2":0.00125,"13.3":0.10472,"13.4-13.7":0.18762,"14.0-14.4":0.4625,"14.5-14.8":1.03906,"15.0-15.1":0.75919,"15.2-15.3":2.1685,"15.4":0.03117},P:{"4":0.07814,"5.0-5.4":0.01116,"6.2-6.4":0.01036,"7.2-7.4":0.03349,"8.2":0.02073,"9.2":0.04146,"10.1":0.05182,"11.1-11.2":0.02233,"12.0":0.02073,"13.0":0.04465,"14.0":0.02233,"15.0":0.05581,"16.0":0.46883},I:{"0":0,"3":0,"4":0.00106,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00212,"4.2-4.3":0.00531,"4.4":0,"4.4.3-4.4.4":0.06386},A:{"11":0.29429,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.12498},Q:{"10.4":0.03289},O:{"0":0.78278},H:{"0":3.18232},L:{"0":52.9161},S:{"2.5":0.01316}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0.00451,"22":0,"23":0.00451,"24":0,"25":0,"26":0,"27":0.00451,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00451,"34":0,"35":0,"36":0,"37":0.00451,"38":0,"39":0.00451,"40":0.00901,"41":0,"42":0,"43":0.00451,"44":0,"45":0,"46":0,"47":0.00451,"48":0,"49":0,"50":0,"51":0,"52":0.03606,"53":0,"54":0,"55":0,"56":0.00451,"57":0,"58":0,"59":0,"60":0.00451,"61":0,"62":0,"63":0,"64":0,"65":0.00451,"66":0.00451,"67":0,"68":0.00451,"69":0,"70":0.00451,"71":0,"72":0.01352,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00451,"80":0.00451,"81":0.00451,"82":0,"83":0,"84":0.00901,"85":0,"86":0,"87":0,"88":0.01803,"89":0.00451,"90":0.00451,"91":0.05859,"92":0.00451,"93":0,"94":0.01352,"95":0.00451,"96":0.00451,"97":0.00451,"98":0.01352,"99":0.01352,"100":0.01352,"101":0.03606,"102":0.17577,"103":2.86645,"104":0.28845,"105":0.00451,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0.00451,"22":0,"23":0,"24":0,"25":0,"26":0.00451,"27":0.00451,"28":0,"29":0.00901,"30":0,"31":0,"32":0,"33":0.01352,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00451,"41":0,"42":0.00451,"43":0.01352,"44":0,"45":0,"46":0.00901,"47":0,"48":0.00451,"49":0.01352,"50":0,"51":0,"52":0.00451,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00451,"59":0,"60":0.00901,"61":0.00451,"62":0,"63":0.01352,"64":0.02704,"65":0.00901,"66":0,"67":0,"68":0,"69":0.00451,"70":0.00901,"71":0,"72":0.01803,"73":0.00901,"74":0.02254,"75":0.00451,"76":0.00451,"77":0.00901,"78":0,"79":0.04958,"80":0.01352,"81":0.01803,"83":0.01352,"84":0.01352,"85":0.01352,"86":0.04056,"87":0.04507,"88":0.01352,"89":0.01803,"90":0.00901,"91":0.01352,"92":0.01803,"93":0.01803,"94":0.00901,"95":0.01803,"96":0.04958,"97":0.02254,"98":0.02254,"99":0.04958,"100":0.08113,"101":0.08113,"102":0.20282,"103":2.88448,"104":6.04839,"105":0.01803,"106":0.00901,"107":0,_:"108"},F:{"9":0,"11":0,"12":0.00451,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00451,"29":0.00451,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.00451,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00451,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0.00451,"58":0.00451,"60":0.0631,"62":0,"63":0.30648,"64":0.15324,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00451,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00901,"79":0.03155,"80":0.00451,"81":0.00901,"82":0.02254,"83":0.00451,"84":0.01352,"85":0.04056,"86":0.01352,"87":0.00901,"88":0.01803,"89":1.27097,"90":0.04958,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00901,"13":0,"14":0.04507,"15":0.02254,"16":0.00901,"17":0.00451,"18":0.01352,"79":0,"80":0,"81":0,"83":0,"84":0.00901,"85":0,"86":0,"87":0,"88":0,"89":0.00451,"90":0,"91":0,"92":0.04056,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00451,"100":0.00451,"101":0.00901,"102":0.01352,"103":0.5138,"104":1.04112,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.00451,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00451,"13.1":0.00451,"14.1":0.00901,"15.1":0,"15.2-15.3":0.00451,"15.4":0.00451,"15.5":0.01352,"15.6":0.04958,"16.0":0},G:{"8":0.00373,"3.2":0.0014,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00979,"6.0-6.1":0.00047,"7.0-7.1":0.0513,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.12592,"10.0-10.2":0,"10.3":0.10027,"11.0-11.2":0.01213,"11.3-11.4":0.00513,"12.0-12.1":0.07042,"12.2-12.5":1.00126,"13.0-13.1":0.00233,"13.2":0.01213,"13.3":0.01213,"13.4-13.7":0.09327,"14.0-14.4":0.17721,"14.5-14.8":0.18374,"15.0-15.1":0.1054,"15.2-15.3":0.16369,"15.4":0.12778,"15.5":0.87814,"15.6":1.40792,"16.0":0.11659},P:{"4":0.29735,"5.0-5.4":0.01025,"6.2-6.4":0,"7.2-7.4":0.02051,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.03076,"12.0":0.01025,"13.0":0.01025,"14.0":0,"15.0":0,"16.0":0.02051,"17.0":0.21533,"18.0":0.1538},I:{"0":0,"3":0,"4":0.00264,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01409,"4.2-4.3":0.04402,"4.4":0,"4.4.3-4.4.4":0.25798},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.07211,"5.5":0},J:{"7":0,"10":0.02197},N:{"10":0,"11":0},L:{"0":71.21239},S:{"2.5":0.00549},R:{_:"0"},M:{"0":0.29662},Q:{"10.4":0.02197},O:{"0":0.74705},H:{"0":2.09577}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TH.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TH.js index f7f4caae49f..13bec1b079f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TH.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TH.js @@ -1 +1 @@ -module.exports={C:{"52":0.04137,"53":0.00414,"54":0.00414,"55":0.00827,"56":0.08274,"68":0.00827,"69":0.00414,"70":0.00414,"71":0.00414,"72":0.00827,"73":0.00414,"74":0.00414,"75":0.00414,"76":0.00414,"77":0.00414,"78":0.02482,"79":0.00827,"80":0.00827,"81":0.00827,"82":0.00827,"83":0.00827,"84":0.00414,"88":0.00827,"89":0.00827,"91":0.01241,"94":0.00827,"95":0.02896,"96":0.51299,"97":0.88118,"98":0.00827,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 57 58 59 60 61 62 63 64 65 66 67 85 86 87 90 92 93 99 3.5 3.6"},D:{"25":0.00414,"38":0.00827,"43":0.01241,"47":0.00414,"48":0.00414,"49":0.07447,"53":0.02482,"56":0.01655,"57":0.00827,"58":0.01241,"63":0.00827,"65":0.01241,"66":0.00414,"67":0.00414,"68":0.04964,"69":0.03723,"70":0.04137,"71":0.03723,"72":0.04964,"73":0.02069,"74":0.06206,"75":0.04551,"76":0.04551,"77":0.04137,"78":0.05792,"79":0.12825,"80":0.0786,"81":0.06619,"83":0.0786,"84":0.0786,"85":0.08688,"86":0.12825,"87":0.11584,"88":0.08688,"89":0.07447,"90":0.08274,"91":0.06619,"92":0.06619,"93":0.0786,"94":0.07033,"95":0.06206,"96":0.26891,"97":8.01751,"98":19.79141,"99":0.02896,"100":0.02069,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 44 45 46 50 51 52 54 55 59 60 61 62 64 101"},F:{"28":0.01241,"46":0.00414,"53":0.00414,"54":0.00827,"55":0.00827,"70":0.00414,"71":0.00414,"82":0.05378,"83":0.42197,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 56 57 58 60 62 63 64 65 66 67 68 69 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6","10.0-10.1":0,"12.1":0.00827},B:{"14":0.00414,"16":0.00827,"17":0.00827,"18":0.02896,"80":0.00827,"81":0.00827,"83":0.00827,"84":0.01655,"85":0.00827,"86":0.01241,"87":0.00827,"88":0.00827,"89":0.01241,"90":0.00827,"91":0.00414,"92":0.00827,"94":0.00827,"95":0.00827,"96":0.02896,"97":0.59987,"98":2.23398,_:"12 13 15 79 93"},E:{"4":0,"13":0.0331,"14":0.14893,"15":0.21099,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1","9.1":0.25236,"10.1":0.00414,"11.1":0.00827,"12.1":0.01655,"13.1":0.11584,"14.1":0.7157,"15.1":0.52954,"15.2-15.3":1.1294,"15.4":0.00827},G:{"8":0.0074,"3.2":0.00148,"4.0-4.1":0.00296,"4.2-4.3":0.01036,"5.0-5.1":0.01184,"6.0-6.1":0.0222,"7.0-7.1":0.03107,"8.1-8.4":0.03995,"9.0-9.2":0.02959,"9.3":0.08582,"10.0-10.2":0.03699,"10.3":0.08878,"11.0-11.2":0.0725,"11.3-11.4":0.05919,"12.0-12.1":0.0725,"12.2-12.5":0.68509,"13.0-13.1":0.05771,"13.2":0.02515,"13.3":0.09766,"13.4-13.7":0.24859,"14.0-14.4":0.70876,"14.5-14.8":2.46809,"15.0-15.1":2.46662,"15.2-15.3":7.4324,"15.4":0.03551},P:{"4":0.14731,_:"5.0-5.4 6.2-6.4 8.2","7.2-7.4":0.12627,"9.2":0.04209,"10.1":0.06313,"11.1-11.2":0.15783,"12.0":0.04209,"13.0":0.08418,"14.0":0.14731,"15.0":0.12627,"16.0":1.83086},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00235,"4.2-4.3":0.0086,"4.4":0,"4.4.3-4.4.4":0.03596},A:{"8":0.00849,"9":0.00849,"11":0.3057,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.12899},Q:{"10.4":0},O:{"0":0.2697},H:{"0":0.23313},L:{"0":41.06986},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01157,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00386,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.01542,"68":0.00771,"69":0.00771,"70":0.00771,"71":0.00771,"72":0.00771,"73":0.00771,"74":0.00771,"75":0.00771,"76":0.00771,"77":0.00771,"78":0.01157,"79":0.00771,"80":0.00771,"81":0.00771,"82":0.00771,"83":0.00771,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00386,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0.00386,"98":0.00386,"99":0.00386,"100":0.00386,"101":0.00771,"102":0.01928,"103":0.37018,"104":0.07712,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0.00386,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00386,"39":0,"40":0,"41":0.00386,"42":0,"43":0.00386,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01928,"50":0,"51":0,"52":0,"53":0.00386,"54":0,"55":0,"56":0.00771,"57":0,"58":0.00386,"59":0,"60":0,"61":0,"62":0,"63":0.00386,"64":0,"65":0.00386,"66":0,"67":0,"68":0.02314,"69":0.01542,"70":0.01542,"71":0.01542,"72":0.05784,"73":0.00771,"74":0.02699,"75":0.01542,"76":0.01542,"77":0.01542,"78":0.02314,"79":0.05398,"80":0.04242,"81":0.02699,"83":0.03085,"84":0.03085,"85":0.0347,"86":0.04627,"87":0.03856,"88":0.0347,"89":0.02699,"90":0.03085,"91":0.03085,"92":0.03085,"93":0.00771,"94":0.01542,"95":0.01157,"96":0.01928,"97":0.02314,"98":0.01157,"99":0.01542,"100":0.02699,"101":0.0347,"102":0.05398,"103":2.28275,"104":6.69402,"105":0.02314,"106":0.00386,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00386,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00386,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00386,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0.00386,"54":0.00386,"55":0.00386,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00386,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00386,"72":0,"73":0.00386,"74":0.00386,"75":0.00386,"76":0.01157,"77":0.01157,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.11568,"90":0.01542,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0.00386,"17":0.00386,"18":0.00771,"79":0,"80":0.00386,"81":0.00386,"83":0.00386,"84":0.00386,"85":0.00386,"86":0.00386,"87":0.00386,"88":0.00386,"89":0.01542,"90":0.02314,"91":0.01157,"92":0.00386,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00386,"101":0.00386,"102":0.00386,"103":0.30077,"104":0.81747,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00771,"14":0.03085,"15":0.01542,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.10026,"10.1":0,"11.1":0.00386,"12.1":0.00386,"13.1":0.02699,"14.1":0.08869,"15.1":0.01928,"15.2-15.3":0.01542,"15.4":0.06941,"15.5":0.33162,"15.6":0.57454,"16.0":0.00771},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00218,"6.0-6.1":0.00436,"7.0-7.1":0.01091,"8.1-8.4":0,"9.0-9.2":0.03272,"9.3":0.08507,"10.0-10.2":0.03926,"10.3":0.0807,"11.0-11.2":0.07198,"11.3-11.4":0.0349,"12.0-12.1":0.10251,"12.2-12.5":0.90518,"13.0-13.1":0.08507,"13.2":0.05889,"13.3":0.0807,"13.4-13.7":0.21375,"14.0-14.4":0.63908,"14.5-14.8":1.3785,"15.0-15.1":0.47331,"15.2-15.3":0.56492,"15.4":1.08622,"15.5":4.83564,"15.6":10.91455,"16.0":0.10251},P:{"4":0.13512,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.09355,"8.2":0,"9.2":0.02079,"10.1":0,"11.1-11.2":0.09355,"12.0":0.01039,"13.0":0.06236,"14.0":0.09355,"15.0":0.05197,"16.0":0.1663,"17.0":0.92506,"18.0":1.11216},I:{"0":0,"3":0,"4":0.0082,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00492,"4.2-4.3":0.00984,"4.4":0,"4.4.3-4.4.4":0.05247},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00397,"9":0.00397,"10":0,"11":0.13088,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":59.72795},S:{"2.5":0},R:{_:"0"},M:{"0":0.22733},Q:{"10.4":0},O:{"0":0.2089},H:{"0":0.22104}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TJ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TJ.js index d0b32f7271c..dfade00d500 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TJ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TJ.js @@ -1 +1 @@ -module.exports={C:{"28":0.00253,"35":0.00253,"50":0.00253,"52":0.08841,"77":0.00253,"78":0.02526,"79":0.00758,"80":0.00758,"81":0.0101,"82":0.00758,"83":0.00758,"88":0.11367,"91":0.01263,"92":0.00505,"94":0.01768,"95":0.02273,"96":0.42184,"97":0.89926,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 47 48 49 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 84 85 86 87 89 90 93 98 99 3.5 3.6"},D:{"11":0.02779,"23":0.00253,"35":0.00505,"38":0.00253,"43":0.00253,"44":0.08083,"47":0.00758,"48":0.13135,"49":0.06062,"54":0.00505,"56":0.00253,"57":0.0101,"58":0.00758,"59":0.00505,"62":0.01516,"63":0.00505,"64":0.00758,"67":0.01263,"69":0.01768,"70":0.01516,"71":0.01516,"72":0.00253,"73":0.00505,"74":0.01263,"75":0.04294,"76":0.00758,"77":0.00253,"78":0.0101,"79":0.23744,"80":0.01516,"81":0.02526,"83":0.03284,"84":0.23997,"85":0.29554,"86":0.05557,"87":0.53299,"88":0.02021,"89":0.06568,"90":0.0101,"91":0.04042,"92":0.05052,"93":0.00758,"94":0.04042,"95":0.05557,"96":0.35111,"97":3.95824,"98":8.70712,"100":0.01263,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 36 37 39 40 41 42 45 46 50 51 52 53 55 60 61 65 66 68 99 101"},F:{"11":0.00253,"36":0.01768,"42":0.00758,"56":0.00253,"57":0.00253,"66":0.00505,"67":0.02021,"68":0.05557,"77":0.00253,"79":0.00505,"80":0.00253,"82":0.08588,"83":0.93209,_:"9 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 43 44 45 46 47 48 49 50 51 52 53 54 55 58 60 62 63 64 65 69 70 71 72 73 74 75 76 78 81 9.5-9.6 10.6 11.1 11.5 11.6","10.0-10.1":0,"10.5":0.00253,"12.1":0.00505},B:{"12":0.00505,"13":0.00505,"14":0.00253,"17":0.00253,"18":0.04547,"84":0.03536,"85":0.00505,"86":0.09346,"91":0.00758,"92":0.00505,"95":0.0101,"96":0.0101,"97":0.12377,"98":0.54056,_:"15 16 79 80 81 83 87 88 89 90 93 94"},E:{"4":0,"13":0.00758,"14":0.02021,"15":0.02021,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 12.1 15.4","5.1":1.66716,"11.1":0.05557,"13.1":0.04042,"14.1":0.22987,"15.1":0.14146,"15.2-15.3":0.17935},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00315,"5.0-5.1":0.0063,"6.0-6.1":0.00315,"7.0-7.1":0.00945,"8.1-8.4":0,"9.0-9.2":0.00315,"9.3":0.05734,"10.0-10.2":0.00567,"10.3":0.07499,"11.0-11.2":0.02584,"11.3-11.4":0.04726,"12.0-12.1":0.27538,"12.2-12.5":0.51547,"13.0-13.1":0.04159,"13.2":0.01954,"13.3":0.08633,"13.4-13.7":0.17203,"14.0-14.4":0.59298,"14.5-14.8":0.80409,"15.0-15.1":1.02149,"15.2-15.3":2.52002,"15.4":0.01449},P:{"4":1.16404,"5.0-5.4":0.17059,"6.2-6.4":0.21073,"7.2-7.4":0.59206,"8.2":0.05017,"9.2":0.34118,"10.1":0.08028,"11.1-11.2":0.36125,"12.0":0.18063,"13.0":0.4315,"14.0":0.51178,"15.0":0.35122,"16.0":1.90662},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0.0018,"4.1":0.0084,"4.2-4.3":0.0114,"4.4":0,"4.4.3-4.4.4":0.0606},A:{"8":0.01087,"9":0.03805,"10":0.01359,"11":0.1522,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.0822},Q:{"10.4":0},O:{"0":1.6889},H:{"0":2.21446},L:{"0":56.84675},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00569,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00285,"68":0.00285,"69":0,"70":0,"71":0,"72":0.00285,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.04555,"79":0,"80":0,"81":0.00285,"82":0.00285,"83":0.00285,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.01708,"92":0.00285,"93":0.00285,"94":0.00285,"95":0.01424,"96":0.00285,"97":0.00285,"98":0,"99":0.00569,"100":0.00569,"101":0.01424,"102":0.01708,"103":0.17936,"104":0.02847,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00285,"38":0,"39":0,"40":0.00285,"41":0,"42":0,"43":0,"44":0.00854,"45":0,"46":0,"47":0.01708,"48":0,"49":0.00285,"50":0.00285,"51":0,"52":0.00285,"53":0,"54":0,"55":0,"56":0,"57":0.00285,"58":0.00285,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00285,"66":0,"67":0.00285,"68":0.00285,"69":0,"70":0,"71":0.00285,"72":0,"73":0.00285,"74":0.00285,"75":0.00285,"76":0,"77":0.00285,"78":0.00569,"79":0.07118,"80":0.08541,"81":0.02278,"83":0.13381,"84":0.07402,"85":0.29039,"86":0.05979,"87":0.07402,"88":0.00854,"89":0.01708,"90":0.02562,"91":0.01424,"92":0.03132,"93":0.01424,"94":0.01708,"95":0.00854,"96":0.02278,"97":0.01708,"98":0.02562,"99":0.01993,"100":0.03701,"101":0.03416,"102":0.07687,"103":1.11033,"104":2.62778,"105":0.00285,"106":0.01424,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00285,"29":0.00285,"30":0,"31":0,"32":0.00285,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00285,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00285,"60":0.01424,"62":0,"63":0.07118,"64":0.02847,"65":0,"66":0,"67":0,"68":0.00285,"69":0,"70":0.00285,"71":0.00285,"72":0.04271,"73":0,"74":0,"75":0,"76":0.00285,"77":0,"78":0.00569,"79":0.00569,"80":0.00569,"81":0,"82":0,"83":0,"84":0,"85":0.00569,"86":0.00569,"87":0,"88":0.00569,"89":0.28755,"90":0.02847,"9.5-9.6":0,"10.0-10.1":0,"10.5":0.00285,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00285,"13":0.00285,"14":0.00285,"15":0,"16":0.00285,"17":0,"18":0.00854,"79":0,"80":0,"81":0,"83":0,"84":0.00285,"85":0,"86":0.00285,"87":0.00285,"88":0,"89":0.00569,"90":0.00569,"91":0.00285,"92":0.00569,"93":0.00285,"94":0.00285,"95":0,"96":0.00285,"97":0.00285,"98":0.00285,"99":0.00285,"100":0.00285,"101":0.01424,"102":0.01424,"103":0.10534,"104":0.29894,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01424,"14":0.01139,"15":0.00285,_:"0","3.1":0,"3.2":0,"5.1":0.31886,"6.1":0,"7.1":0,"9.1":0.00285,"10.1":0,"11.1":0,"12.1":0.00854,"13.1":0.01708,"14.1":0.01993,"15.1":0.01139,"15.2-15.3":0.02562,"15.4":0.02847,"15.5":0.05125,"15.6":0.09965,"16.0":0.00569},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.01394,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.02091,"8.1-8.4":0,"9.0-9.2":0.01254,"9.3":0.10592,"10.0-10.2":0.01394,"10.3":0.03902,"11.0-11.2":0.06132,"11.3-11.4":0.0669,"12.0-12.1":0.08084,"12.2-12.5":1.46618,"13.0-13.1":0.09198,"13.2":0.03763,"13.3":0.17282,"13.4-13.7":0.46689,"14.0-14.4":1.64876,"14.5-14.8":1.77977,"15.0-15.1":0.72612,"15.2-15.3":1.12194,"15.4":0.69407,"15.5":2.44178,"15.6":2.70659,"16.0":0.14076},P:{"4":1.14564,"5.0-5.4":0.19094,"6.2-6.4":0.11054,"7.2-7.4":0.60297,"8.2":0.01005,"9.2":0.15074,"10.1":0.07035,"11.1-11.2":0.30148,"12.0":0.0804,"13.0":0.17084,"14.0":0.79391,"15.0":0.10049,"16.0":0.41203,"17.0":0.96475,"18.0":0.60297},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02048,"4.2-4.3":0.01967,"4.4":0,"4.4.3-4.4.4":0.15978},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00316,"10":0,"11":0.02531,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":65.59945},S:{"2.5":0},R:{_:"0"},M:{"0":0.13591},Q:{"10.4":0},O:{"0":1.26608},H:{"0":1.76072}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TK.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TK.js index bc928f2fae3..b2da6f6d110 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TK.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TK.js @@ -1 +1 @@ -module.exports={C:{_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 3.5 3.6"},D:{"97":0.0335,"98":0.13958,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 99 100 101"},F:{_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"98":0.00558,_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97"},E:{"4":0,_:"0 5 6 7 8 9 10 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 13.1 14.1","15.1":18.37924,"15.2-15.3":17.43013,"15.4":0.01117},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0.00439,"13.0-13.1":0,"13.2":0.00439,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":0.00439,"15.0-15.1":10.90159,"15.2-15.3":32.69162,"15.4":0.24119},P:{"4":0.07814,"5.0-5.4":0.01116,"6.2-6.4":0.01036,"7.2-7.4":0.03349,"8.2":0.02073,"9.2":0.04146,"10.1":0.05182,"11.1-11.2":0.02233,"12.0":0.02073,"13.0":0.04465,"14.0":0.02233,"15.0":0.05581,"16.0":0.46883},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.00558,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0},L:{"0":0.31361},S:{"2.5":0}}; +module.exports={C:{"102":0.04198,"103":0.04198,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 104 105 106 3.5 3.6"},D:{"103":0.08395,"104":0.41975,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 105 106 107 108"},F:{_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"100":0.04198,"103":0.20988,_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 101 102 104 105"},E:{"4":0,"10":0.04198,_:"0 5 6 7 8 9 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 13.1 14.1 15.5","15.1":24.06847,"15.2-15.3":43.07475,"15.4":0.08395,"15.6":0.04198,"16.0":0.20988},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0.04189,"14.0-14.4":0,"14.5-14.8":0,"15.0-15.1":1.18278,"15.2-15.3":7.60266,"15.4":0,"15.5":0.04189,"15.6":0.3803,"16.0":1.77362},P:{"4":0.29735,"5.0-5.4":0.01025,"6.2-6.4":0,"7.2-7.4":0.02051,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.03076,"12.0":0.01025,"13.0":0.01025,"14.0":1.39291,"15.0":0,"16.0":0.13027,"17.0":0.21533,"18.0":0.04008},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{_:"6 7 8 9 10 11 5.5"},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":3.42186},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0.04173},H:{"0":0}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TL.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TL.js index 588199c3e4d..b37650a3045 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TL.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TL.js @@ -1 +1 @@ -module.exports={C:{"7":0.00466,"15":0.01397,"18":0.00466,"21":0.02329,"23":0.00932,"24":0.00466,"29":0.01863,"30":0.00466,"33":0.00932,"34":0.02329,"37":0.04192,"38":0.00932,"39":0.00466,"40":0.01863,"41":0.13042,"43":0.02329,"44":0.01397,"45":0.01863,"46":0.00932,"47":0.09782,"48":0.04192,"49":0.00932,"52":0.00932,"54":0.01397,"56":0.06055,"57":0.09316,"58":0.00466,"61":0.16769,"65":0.00466,"67":0.03726,"68":0.03261,"70":0.00466,"72":0.0559,"77":0.00932,"78":0.0559,"79":0.41922,"80":0.00466,"81":0.02329,"83":0.00932,"84":0.01397,"85":0.03261,"86":0.04192,"88":0.02795,"89":0.02795,"90":0.00932,"91":0.11645,"92":0.06987,"93":0.07453,"94":0.06055,"95":0.22358,"96":3.9593,"97":4.67663,"98":0.40059,_:"2 3 4 5 6 8 9 10 11 12 13 14 16 17 19 20 22 25 26 27 28 31 32 35 36 42 50 51 53 55 59 60 62 63 64 66 69 71 73 74 75 76 82 87 99 3.5 3.6"},D:{"30":0.00932,"31":0.01397,"40":0.01397,"43":0.04658,"47":0.00932,"49":0.02795,"56":0.00932,"57":0.00932,"58":0.27482,"61":0.07453,"62":0.04192,"63":0.09782,"64":0.00466,"65":0.02795,"67":0.01863,"68":0.01397,"71":0.01397,"72":0.00932,"73":0.00932,"74":0.01863,"75":0.01397,"77":0.00466,"78":0.01397,"79":0.04192,"80":0.03261,"83":0.00932,"84":0.10713,"85":0.00932,"86":0.01863,"87":0.53567,"88":0.01863,"89":0.02329,"90":0.01863,"91":0.03261,"92":0.0559,"93":0.02795,"94":0.10713,"95":0.12111,"96":0.58225,"97":7.37827,"98":15.52046,"99":0.00932,"100":0.00932,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 32 33 34 35 36 37 38 39 41 42 44 45 46 48 50 51 52 53 54 55 59 60 66 69 70 76 81 101"},F:{"56":0.03726,"65":0.00466,"79":0.00466,"82":0.08384,"83":1.14121,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 57 58 60 62 63 64 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.06055,"13":0.01397,"14":0.00466,"15":0.04658,"16":0.03261,"17":0.02329,"18":0.13508,"84":0.01863,"85":0.02329,"89":0.01397,"90":0.01863,"91":0.00466,"92":0.01863,"93":0.02795,"94":0.03261,"95":0.02329,"96":0.21427,"97":1.04805,"98":4.05246,_:"79 80 81 83 86 87 88"},E:{"4":0,"8":0.01863,"11":0.00932,"12":0.01863,"13":0.00466,"14":0.18166,"15":0.02795,_:"0 5 6 7 9 10 3.1 3.2 5.1 6.1 7.1 15.4","9.1":0.02795,"10.1":0.01863,"11.1":0.01397,"12.1":0.06521,"13.1":0.12111,"14.1":0.24687,"15.1":0.14906,"15.2-15.3":0.20495},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00401,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.00802,"9.3":0.00516,"10.0-10.2":0.00458,"10.3":0.04814,"11.0-11.2":0.01261,"11.3-11.4":0.05273,"12.0-12.1":0.0682,"12.2-12.5":0.76453,"13.0-13.1":0.06533,"13.2":0.01662,"13.3":0.13468,"13.4-13.7":0.20976,"14.0-14.4":1.24423,"14.5-14.8":1.59669,"15.0-15.1":0.65736,"15.2-15.3":0.83503,"15.4":0},P:{"4":0.24874,"5.0-5.4":0.02059,"6.2-6.4":0.01036,"7.2-7.4":0.11401,"8.2":0.02073,"9.2":0.04146,"10.1":0.05182,"11.1-11.2":0.18655,"12.0":0.02073,"13.0":0.13473,"14.0":0.32129,"15.0":0.16583,"16.0":0.4042},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00102,"4.2-4.3":0.00153,"4.4":0,"4.4.3-4.4.4":0.00814},A:{"11":0.31674,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.03206},Q:{"10.4":0.02672},O:{"0":0.55033},H:{"0":1.86149},L:{"0":44.20826},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0.00519,"20":0,"21":0.03632,"22":0,"23":0,"24":0.00519,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0.01556,"31":0.06226,"32":0,"33":0,"34":0.00519,"35":0.01556,"36":0,"37":0.01556,"38":0,"39":0.01038,"40":0.00519,"41":0.15045,"42":0,"43":0.00519,"44":0.02075,"45":0,"46":0.00519,"47":0.02075,"48":0.02594,"49":0,"50":0,"51":0.00519,"52":0.05707,"53":0,"54":0,"55":0,"56":0.00519,"57":0.03113,"58":0,"59":0,"60":0.00519,"61":0.02075,"62":0.00519,"63":0,"64":0,"65":0.00519,"66":0.01038,"67":0.04669,"68":0,"69":0,"70":0,"71":0,"72":0.03113,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.03113,"79":0.27496,"80":0,"81":0,"82":0,"83":0.00519,"84":0,"85":0.02594,"86":0.00519,"87":0,"88":0.21271,"89":0.01556,"90":0,"91":0.16602,"92":0.02075,"93":0.01038,"94":0,"95":0.02594,"96":0.00519,"97":0.01038,"98":0.02594,"99":0.25421,"100":0.06744,"101":0.05707,"102":0.18158,"103":3.81318,"104":0.63812,"105":0.03632,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0.00519,"32":0,"33":0,"34":0.00519,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00519,"41":0,"42":0.00519,"43":0.02075,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01556,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00519,"56":0.03113,"57":0,"58":0.06226,"59":0.00519,"60":0,"61":0.03113,"62":0.02075,"63":0.02075,"64":0.02075,"65":0.03113,"66":0.00519,"67":0.01038,"68":0.01038,"69":0,"70":0.01038,"71":0,"72":0,"73":0,"74":0.02594,"75":0,"76":0,"77":0.00519,"78":0.00519,"79":0.00519,"80":0.05707,"81":0.00519,"83":0.00519,"84":0.03632,"85":0.01038,"86":0.01556,"87":0.06744,"88":0.00519,"89":0.00519,"90":0.00519,"91":0.01556,"92":0.01556,"93":0.00519,"94":0.01038,"95":0.01038,"96":0.02594,"97":0.01556,"98":0.02594,"99":0.0415,"100":0.0415,"101":0.06226,"102":0.14008,"103":4.52394,"104":9.07381,"105":0.04669,"106":0.01038,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.02594,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00519,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.01038,"55":0.00519,"56":0.01038,"57":0,"58":0.00519,"60":0.00519,"62":0,"63":0.05707,"64":0.03113,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0.01038,"78":0,"79":0.00519,"80":0,"81":0.01038,"82":0,"83":0,"84":0.00519,"85":0.00519,"86":0,"87":0.00519,"88":0.00519,"89":0.63294,"90":0.03113,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.0415,"13":0.01038,"14":0.01038,"15":0.02075,"16":0.01038,"17":0.01038,"18":0.06226,"79":0,"80":0,"81":0,"83":0,"84":0.01038,"85":0.00519,"86":0,"87":0,"88":0,"89":0.01556,"90":0.00519,"91":0,"92":0.01038,"93":0,"94":0,"95":0,"96":0.00519,"97":0,"98":0.00519,"99":0.01556,"100":0.03113,"101":0.03632,"102":0.0415,"103":1.01166,"104":2.00257,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00519,"12":0.00519,"13":0.00519,"14":0.04669,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00519,"10.1":0.10376,"11.1":0.00519,"12.1":0.01556,"13.1":0.1297,"14.1":0.10895,"15.1":0.09338,"15.2-15.3":0.03113,"15.4":0.05188,"15.5":0.06226,"15.6":0.01038,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01067,"10.0-10.2":0.01245,"10.3":0.04447,"11.0-11.2":0.00978,"11.3-11.4":0.02046,"12.0-12.1":0.05692,"12.2-12.5":1.17756,"13.0-13.1":0.07115,"13.2":0.02579,"13.3":0.2935,"13.4-13.7":0.27927,"14.0-14.4":1.3003,"14.5-14.8":1.54755,"15.0-15.1":0.51852,"15.2-15.3":0.41001,"15.4":0.43225,"15.5":1.55289,"15.6":1.05394,"16.0":0.07115},P:{"4":0.23222,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.14135,"8.2":0.0101,"9.2":0.03029,"10.1":0.0101,"11.1-11.2":0.23222,"12.0":0,"13.0":0.04039,"14.0":0.11106,"15.0":0.06058,"16.0":0.18173,"17.0":0.39376,"18.0":0.20193},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00215,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.13416},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.06744,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":58.88138},S:{"2.5":0},R:{_:"0"},M:{"0":0.03368},Q:{"10.4":0},O:{"0":0.91909},H:{"0":1.23459}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TM.js index bb9f61f2bb7..37e57446088 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TM.js @@ -1 +1 @@ -module.exports={C:{"41":0.00669,"48":0.02006,"51":0.04013,"52":0.02006,"56":0.00669,"60":0.02675,"68":0.02006,"71":0.01338,"72":0.01338,"81":0.00669,"82":0.37453,"84":0.02006,"88":0.02006,"89":0.01338,"91":0.04682,"93":0.00669,"94":0.01338,"95":0.03344,"96":0.29427,"97":0.23408,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 43 44 45 46 47 49 50 53 54 55 57 58 59 61 62 63 64 65 66 67 69 70 73 74 75 76 77 78 79 80 83 85 86 87 90 92 98 99 3.5 3.6"},D:{"49":0.00669,"55":0.00669,"66":0.01338,"67":0.02675,"70":0.00669,"71":0.02675,"78":0.10032,"79":0.26083,"83":0.1137,"84":0.01338,"85":0.04013,"86":0.06688,"87":0.02675,"89":0.07357,"90":0.10032,"91":0.82931,"92":0.81594,"93":0.06019,"94":0.01338,"95":0.00669,"96":0.19395,"97":14.31901,"98":31.23296,"100":0.02006,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 56 57 58 59 60 61 62 63 64 65 68 69 72 73 74 75 76 77 80 81 88 99 101"},F:{"28":0.02675,"47":0.54173,"54":0.01338,"76":0.04682,"77":0.03344,"81":0.02006,"82":0.0535,"83":0.41466,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 52 53 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 78 79 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.02006,"18":0.00669,"88":0.00669,"94":0.01338,"95":0.00669,"96":0.01338,"97":0.32771,"98":1.96627,_:"12 13 15 16 17 79 80 81 83 84 85 86 87 89 90 91 92 93"},E:{"4":0,"11":0.1137,"12":0.01338,"14":1.13027,_:"0 5 6 7 8 9 10 13 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 13.1 15.4","12.1":0.00669,"14.1":0.2809,"15.1":0.06019,"15.2-15.3":0.20733},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.04035,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0.00605,"12.0-12.1":0,"12.2-12.5":0.02623,"13.0-13.1":0,"13.2":0.00605,"13.3":0.01412,"13.4-13.7":0.00605,"14.0-14.4":0.14324,"14.5-14.8":0.05447,"15.0-15.1":8.59046,"15.2-15.3":11.27977,"15.4":0.00605},P:{"4":0.06226,"5.0-5.4":0.0102,"6.2-6.4":0.01036,"7.2-7.4":0.06226,"8.2":0.02073,"9.2":0.0306,"10.1":0.0204,"11.1-11.2":0.13261,"12.0":0.06121,"13.0":0.08302,"14.0":0.15302,"15.0":0.04151,"16.0":0.45661},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00192,"4.4":0,"4.4.3-4.4.4":0.00471},A:{"10":0.15252,"11":3.25836,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.41413},Q:{"10.4":0.01325},O:{"0":0.815},H:{"0":0},L:{"0":8.23535},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.00298,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.00298,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00298,"65":0,"66":0,"67":0,"68":0.05061,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00595,"79":0,"80":0,"81":0.1042,"82":0,"83":0,"84":0,"85":0,"86":0.00298,"87":0,"88":0,"89":0,"90":0,"91":0.02382,"92":0,"93":0,"94":0.00298,"95":0,"96":0,"97":0.00298,"98":0,"99":0.02382,"100":0.00298,"101":0.02084,"102":0.02679,"103":0.259,"104":0.02084,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00298,"44":0.00298,"45":0.00298,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00298,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00595,"71":0,"72":0.00595,"73":0.00298,"74":0.00893,"75":0,"76":0,"77":0,"78":0,"79":0.08633,"80":0.00298,"81":0.01786,"83":0,"84":0.00298,"85":0.00298,"86":0.01191,"87":0,"88":0.01191,"89":0.02084,"90":0.00298,"91":0.00298,"92":0,"93":0.00893,"94":0,"95":0.00298,"96":0.22923,"97":0.01786,"98":0.01489,"99":0.02977,"100":0.09526,"101":0.01786,"102":0.01786,"103":1.72071,"104":3.89689,"105":0.01786,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00595,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00298,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0.00298,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.00298,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00298,"74":0,"75":0.00298,"76":0.00298,"77":0,"78":0,"79":0.00298,"80":0,"81":0,"82":0,"83":0.00298,"84":0,"85":0.00298,"86":0,"87":0,"88":0.01489,"89":0.02084,"90":0.00298,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00298,"91":0,"92":0.01786,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.02679,"100":0,"101":0,"102":0,"103":0.03572,"104":0.05954,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00298,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.09526,"13.1":0.0774,"14.1":0.19351,"15.1":0.00595,"15.2-15.3":0,"15.4":0.01489,"15.5":0.25305,"15.6":0.10122,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.01464,"9.3":0.00627,"10.0-10.2":0,"10.3":0.02092,"11.0-11.2":0,"11.3-11.4":0.01464,"12.0-12.1":0.05647,"12.2-12.5":0.9977,"13.0-13.1":0.00627,"13.2":0.00627,"13.3":0.05647,"13.4-13.7":0.04392,"14.0-14.4":0.31583,"14.5-14.8":0.17988,"15.0-15.1":2.31752,"15.2-15.3":2.39491,"15.4":3.06213,"15.5":7.762,"15.6":3.42189,"16.0":0.23635},P:{"4":2.62443,"5.0-5.4":0.08014,"6.2-6.4":0.04007,"7.2-7.4":1.14193,"8.2":0.02003,"9.2":0.10017,"10.1":0.03005,"11.1-11.2":0.17029,"12.0":0.04007,"13.0":0.19032,"14.0":0.64108,"15.0":0.15025,"16.0":0.88149,"17.0":1.35228,"18.0":1.98335},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0.00003,"4.1":0.00003,"4.2-4.3":0.00016,"4.4":0,"4.4.3-4.4.4":0.01573},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01489,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":55.45833},S:{"2.5":0},R:{_:"0"},M:{"0":0.18962},Q:{"10.4":0},O:{"0":0.64612},H:{"0":0.83776}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TN.js index feac9ffd0a2..43ef69f582e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TN.js @@ -1 +1 @@ -module.exports={C:{"43":0.00436,"52":0.09592,"60":0.00436,"72":0.00436,"78":0.03488,"80":0.00872,"81":0.00436,"82":0.01308,"84":0.13952,"87":0.00436,"88":0.02616,"89":0.00872,"91":0.03052,"92":0.00872,"93":0.00436,"94":0.01308,"95":0.02616,"96":0.64528,"97":0.97664,"98":0.00872,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 83 85 86 90 99 3.5 3.6"},D:{"38":0.00436,"39":0.01308,"42":0.00436,"43":0.00436,"47":0.00872,"49":0.20492,"50":0.00436,"55":0.00436,"56":0.0218,"58":0.00872,"60":0.00436,"62":0.00436,"63":0.01744,"64":0.00872,"65":0.01308,"66":0.00872,"67":0.01744,"68":0.01308,"69":0.00872,"70":0.01744,"71":0.01308,"72":0.01308,"73":0.00872,"74":0.01308,"75":0.01308,"76":0.00872,"77":0.01744,"78":0.01744,"79":0.05668,"80":0.03052,"81":0.03488,"83":0.0436,"84":0.05232,"85":0.06976,"86":0.07848,"87":0.72376,"88":0.03052,"89":0.06976,"90":0.0654,"91":0.0872,"92":0.10028,"93":0.4578,"94":0.05232,"95":0.10028,"96":0.55372,"97":9.02084,"98":20.66204,"99":0.01308,"100":0.03052,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 40 41 44 45 46 48 51 52 53 54 57 59 61 101"},F:{"40":0.00872,"71":0.00436,"82":0.7848,"83":2.27156,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00872,"13":0.01308,"16":0.00436,"17":0.00436,"18":0.0218,"84":0.00436,"85":0.00436,"89":0.00436,"92":0.03488,"94":0.00436,"95":0.01744,"96":0.03052,"97":0.55372,"98":1.90096,_:"14 15 79 80 81 83 86 87 88 90 91 93"},E:{"4":0,"13":0.10028,"14":0.03488,"15":0.03924,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.00872,"12.1":0.00872,"13.1":0.03924,"14.1":0.11336,"15.1":0.06104,"15.2-15.3":0.06976},G:{"8":0.00037,"3.2":0.00037,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01373,"6.0-6.1":0.00111,"7.0-7.1":0.03526,"8.1-8.4":0.00223,"9.0-9.2":0.00223,"9.3":0.05382,"10.0-10.2":0.00482,"10.3":0.06235,"11.0-11.2":0.02004,"11.3-11.4":0.01485,"12.0-12.1":0.01485,"12.2-12.5":0.2906,"13.0-13.1":0.00557,"13.2":0.00631,"13.3":0.0308,"13.4-13.7":0.33477,"14.0-14.4":0.26054,"14.5-14.8":0.7716,"15.0-15.1":0.52182,"15.2-15.3":1.25594,"15.4":0.00779},P:{"4":0.25027,"5.0-5.4":0.01116,"6.2-6.4":0.01036,"7.2-7.4":0.14599,"8.2":0.02073,"9.2":0.04171,"10.1":0.05182,"11.1-11.2":0.12514,"12.0":0.03128,"13.0":0.17728,"14.0":0.17728,"15.0":0.13556,"16.0":1.53291},I:{"0":0,"3":0,"4":0.00296,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00414,"4.2-4.3":0.00591,"4.4":0,"4.4.3-4.4.4":0.06032},A:{"9":0.00436,"11":0.11772,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.07897},Q:{"10.4":0},O:{"0":0.10718},H:{"0":0.27237},L:{"0":48.76275},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00371,"48":0,"49":0,"50":0,"51":0,"52":0.01856,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00371,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01114,"79":0.00371,"80":0,"81":0,"82":0,"83":0.00371,"84":0.00742,"85":0,"86":0,"87":0.01114,"88":0.00371,"89":0,"90":0,"91":0.01114,"92":0,"93":0,"94":0.00371,"95":0,"96":0,"97":0.00371,"98":0.00371,"99":0.00742,"100":0.00742,"101":0.00371,"102":0.02598,"103":0.44915,"104":0.08166,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.00371,"40":0.00371,"41":0,"42":0.00371,"43":0.00371,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.05568,"50":0.00371,"51":0,"52":0,"53":0.00371,"54":0,"55":0,"56":0.00371,"57":0,"58":0.00371,"59":0,"60":0,"61":0,"62":0,"63":0.00371,"64":0,"65":0.00742,"66":0,"67":0.00742,"68":0.00371,"69":0.00371,"70":0.00742,"71":0.00371,"72":0.00371,"73":0.00371,"74":0.01114,"75":0.00371,"76":0.00371,"77":0.00742,"78":0.01114,"79":0.01485,"80":0.00742,"81":0.03341,"83":0.01485,"84":0.01485,"85":0.01114,"86":0.02227,"87":0.04826,"88":0.01114,"89":0.03712,"90":0.01485,"91":0.01856,"92":0.02227,"93":0.00742,"94":0.00742,"95":0.01485,"96":0.04083,"97":0.02598,"98":0.0297,"99":0.02598,"100":0.03341,"101":0.05197,"102":0.13363,"103":2.38682,"104":6.69645,"105":0.02598,"106":0.00371,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00371,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01485,"64":0.01485,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00742,"80":0.01114,"81":0,"82":0,"83":0,"84":0.00371,"85":0.01485,"86":0.00371,"87":0.00371,"88":0.01114,"89":0.8983,"90":0.05568,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0.00371,"14":0,"15":0,"16":0,"17":0,"18":0.01114,"79":0,"80":0,"81":0,"83":0,"84":0.00371,"85":0,"86":0,"87":0,"88":0,"89":0.00742,"90":0,"91":0,"92":0.00742,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00371,"101":0.01114,"102":0.00371,"103":0.24499,"104":0.63475,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00742,"14":0.00742,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00371,"12.1":0,"13.1":0.00742,"14.1":0.03712,"15.1":0.00371,"15.2-15.3":0.00371,"15.4":0.01114,"15.5":0.04454,"15.6":0.05197,"16.0":0},G:{"8":0.0014,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0084,"6.0-6.1":0.0049,"7.0-7.1":0.03502,"8.1-8.4":0.0014,"9.0-9.2":0.0042,"9.3":0.08334,"10.0-10.2":0.0028,"10.3":0.08964,"11.0-11.2":0.03642,"11.3-11.4":0.0105,"12.0-12.1":0.01191,"12.2-12.5":0.46222,"13.0-13.1":0.0084,"13.2":0.0098,"13.3":0.05112,"13.4-13.7":0.12186,"14.0-14.4":0.25912,"14.5-14.8":0.56937,"15.0-15.1":0.17578,"15.2-15.3":0.27663,"15.4":0.32075,"15.5":1.91891,"15.6":2.46027,"16.0":0.07704},P:{"4":0.35437,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.14175,"8.2":0,"9.2":0.02025,"10.1":0.01012,"11.1-11.2":0.10125,"12.0":0.03037,"13.0":0.07087,"14.0":0.081,"15.0":0.05062,"16.0":0.11137,"17.0":0.71886,"18.0":0.69861},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01171,"4.2-4.3":0.02343,"4.4":0,"4.4.3-4.4.4":0.15425},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00371,"9":0.00371,"10":0,"11":0.02227,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":75.26197},S:{"2.5":0},R:{_:"0"},M:{"0":0.1069},Q:{"10.4":0},O:{"0":0.13834},H:{"0":0.54173}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TO.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TO.js index 0c0f1ad2e3c..bf9e94f0ba7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TO.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TO.js @@ -1 +1 @@ -module.exports={C:{"78":0.10686,"92":0.03717,"96":0.14403,"97":0.39026,"98":0.01858,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 91 93 94 95 99 3.5 3.6"},D:{"61":0.06504,"75":0.00929,"77":0.27876,"79":0.21836,"81":0.00929,"86":0.00929,"88":0.00929,"89":0.00929,"90":0.18119,"91":0.02788,"94":0.01858,"95":0.24624,"96":2.93627,"97":4.56702,"98":21.67824,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 62 63 64 65 66 67 68 69 70 71 72 73 74 76 78 80 83 84 85 87 92 93 99 100 101"},F:{"82":0.22765,"83":0.51571,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00929,"18":0.07434,"81":0.02788,"83":0.01858,"84":0.00929,"89":0.00929,"90":0.00929,"92":0.07434,"93":0.10686,"96":0.32522,"97":1.40309,"98":2.30906,_:"12 13 15 16 17 79 80 85 86 87 88 91 94 95"},E:{"4":0,"13":0.01858,"14":0.13473,_:"0 5 6 7 8 9 10 11 12 15 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.02788,"11.1":0.00929,"12.1":0.01858,"13.1":0.00929,"14.1":0.11615,"15.1":0.28805,"15.2-15.3":0.01858},G:{"8":0.05313,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00781,"10.0-10.2":0.03828,"10.3":0.01484,"11.0-11.2":0.03047,"11.3-11.4":0.00781,"12.0-12.1":0.00781,"12.2-12.5":1.24853,"13.0-13.1":0.20548,"13.2":0.01484,"13.3":0.30471,"13.4-13.7":0.62426,"14.0-14.4":0.82975,"14.5-14.8":2.24625,"15.0-15.1":1.52276,"15.2-15.3":0.65473,"15.4":0},P:{"4":0.07814,"5.0-5.4":0.01116,"6.2-6.4":0.01036,"7.2-7.4":0.38743,"8.2":0.02073,"9.2":0.43841,"10.1":0.05182,"11.1-11.2":0.13254,"12.0":0.02073,"13.0":0.25489,"14.0":0.04078,"15.0":0.03059,"16.0":0.84624},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.02788,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0.58359},H:{"0":0.07096},L:{"0":52.20205},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0.02097,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01048,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00524,"92":0,"93":0,"94":0.25162,"95":0,"96":0,"97":0,"98":0.00524,"99":0,"100":0,"101":0.01048,"102":0.08911,"103":0.93308,"104":0.03145,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00524,"41":0,"42":0,"43":0.00524,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00524,"50":0.01048,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0.00524,"70":0.01573,"71":0.00524,"72":0.00524,"73":0,"74":0.00524,"75":0.02621,"76":0.03145,"77":0.04194,"78":0,"79":0,"80":0,"81":0.00524,"83":0.00524,"84":0,"85":0,"86":0.01048,"87":0.02621,"88":0.01573,"89":0,"90":0.00524,"91":0.00524,"92":0.01573,"93":0.04194,"94":0.01048,"95":0,"96":0.01573,"97":0.00524,"98":0.01048,"99":0.04718,"100":0.59759,"101":0.36694,"102":0.70767,"103":5.18958,"104":9.68722,"105":0.02097,"106":0.00524,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0.00524,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.03669,"90":0.01048,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.02097,"13":0.02621,"14":0,"15":0,"16":0.00524,"17":0.02097,"18":0.02621,"79":0.00524,"80":0.00524,"81":0,"83":0,"84":0.00524,"85":0.01048,"86":0,"87":0,"88":0,"89":0,"90":0.04194,"91":0,"92":0.02097,"93":0,"94":0,"95":0,"96":0.00524,"97":0.00524,"98":0.00524,"99":0.03669,"100":0.03669,"101":0.02621,"102":0.03669,"103":0.77057,"104":3.18189,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01048,"14":0.05766,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00524,"10.1":0,"11.1":0,"12.1":0.00524,"13.1":0.01048,"14.1":0.03145,"15.1":0,"15.2-15.3":0,"15.4":0.01048,"15.5":0.12057,"15.6":0.12581,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.0175,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.21253,"10.0-10.2":0.00375,"10.3":0.05001,"11.0-11.2":0.01125,"11.3-11.4":0.06876,"12.0-12.1":0.06126,"12.2-12.5":0.92511,"13.0-13.1":0.47131,"13.2":0.015,"13.3":0.14002,"13.4-13.7":0.11126,"14.0-14.4":0.83135,"14.5-14.8":1.75271,"15.0-15.1":0.78134,"15.2-15.3":0.66633,"15.4":1.51893,"15.5":2.74658,"15.6":2.09525,"16.0":0.02125},P:{"4":0.01012,"5.0-5.4":0.03036,"6.2-6.4":0,"7.2-7.4":0.75897,"8.2":0,"9.2":0,"10.1":0.02024,"11.1-11.2":0.02024,"12.0":0.01012,"13.0":0.06072,"14.0":0.09108,"15.0":0.17203,"16.0":0.11132,"17.0":1.04232,"18.0":0.38455},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00999,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.04195},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.04718,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":58.74567},S:{"2.5":0},R:{_:"0"},M:{"0":0.09992},Q:{"10.4":0},O:{"0":0.8041},H:{"0":0.01802}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TR.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TR.js index 50bb36b6abc..5c46041fcfc 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TR.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TR.js @@ -1 +1 @@ -module.exports={C:{"52":0.01394,"55":0.00279,"78":0.01115,"79":0.00836,"80":0.00836,"81":0.00557,"82":0.00279,"83":0.00279,"84":0.04181,"87":0.00557,"88":0.00279,"89":0.00279,"91":0.00836,"92":0.01115,"94":0.00279,"95":0.01115,"96":0.25362,"97":0.4069,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 85 86 90 93 98 99 3.5 3.6"},D:{"22":0.06689,"26":0.03623,"34":0.07525,"38":0.12263,"43":0.00279,"47":0.0864,"48":0.00557,"49":0.10033,"53":0.02508,"56":0.00557,"58":0.00279,"59":0.00557,"60":0.00279,"61":0.01115,"63":0.00836,"65":0.00557,"67":0.00557,"68":0.01672,"69":0.00557,"70":0.00836,"71":0.04738,"72":0.00557,"73":0.01672,"74":0.00557,"75":0.00836,"76":0.00836,"77":0.00836,"78":0.01115,"79":0.18116,"80":0.0223,"81":0.0223,"83":0.03344,"84":0.06968,"85":0.06968,"86":0.06689,"87":0.28706,"88":0.0223,"89":0.04459,"90":0.01672,"91":0.04181,"92":0.05295,"93":0.17001,"94":0.04181,"95":0.11148,"96":0.26755,"97":5.46252,"98":13.05988,"99":0.00557,"100":0.00557,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 30 31 32 33 35 36 37 39 40 41 42 44 45 46 50 51 52 54 55 57 62 64 66 101"},F:{"28":0.00836,"31":0.00557,"32":0.01115,"36":0.01394,"40":0.06131,"46":0.04738,"71":0.00279,"79":0.00279,"80":0.00557,"81":0.00279,"82":0.30936,"83":1.10923,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00557,"13":0.00557,"14":0.00557,"15":0.00557,"16":0.00557,"17":0.00557,"18":0.02508,"84":0.00557,"85":0.00557,"86":0.00557,"87":0.00557,"89":0.00279,"91":0.00279,"92":0.00836,"94":0.00557,"95":0.01115,"96":0.0223,"97":0.36788,"98":1.19841,_:"79 80 81 83 88 90 93"},E:{"4":0,"13":0.05017,"14":0.05295,"15":0.02508,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 15.4","5.1":0.0223,"10.1":0.00557,"11.1":0.00557,"12.1":0.01672,"13.1":0.05295,"14.1":0.15886,"15.1":0.07525,"15.2-15.3":0.1505},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00106,"6.0-6.1":0.00317,"7.0-7.1":0.04643,"8.1-8.4":0.00739,"9.0-9.2":0.00422,"9.3":0.08864,"10.0-10.2":0.01688,"10.3":0.13929,"11.0-11.2":0.04221,"11.3-11.4":0.03904,"12.0-12.1":0.03377,"12.2-12.5":1.40244,"13.0-13.1":0.01899,"13.2":0.00633,"13.3":0.06437,"13.4-13.7":0.24799,"14.0-14.4":0.50864,"14.5-14.8":1.79817,"15.0-15.1":1.3328,"15.2-15.3":4.74129,"15.4":0.0095},P:{"4":0.60186,"5.0-5.4":0.0102,"6.2-6.4":0.01036,"7.2-7.4":0.22442,"8.2":0.02073,"9.2":0.0306,"10.1":0.0204,"11.1-11.2":0.13261,"12.0":0.06121,"13.0":0.26523,"14.0":0.15302,"15.0":0.19382,"16.0":2.88689},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0023,"4.2-4.3":0.0076,"4.4":0,"4.4.3-4.4.4":0.02616},A:{"8":0.01136,"9":0.01136,"10":0.00568,"11":0.42589,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.18754},Q:{"10.4":0},O:{"0":0.12983},H:{"0":0.68971},L:{"0":55.72819},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.00135,"103":0.03385,"104":0.00812,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00135,"23":0,"24":0,"25":0,"26":0.00135,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00271,"35":0,"36":0,"37":0,"38":0.00271,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00406,"48":0,"49":0.00542,"50":0,"51":0,"52":0,"53":0.00135,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00135,"69":0,"70":0,"71":0.00271,"72":0,"73":0.00135,"74":0,"75":0,"76":0,"77":0,"78":0.00135,"79":0.00812,"80":0.00135,"81":0.00135,"83":0.00271,"84":0.00406,"85":0.00542,"86":0.00542,"87":0.00677,"88":0.00135,"89":0.00271,"90":0.00135,"91":0.00135,"92":0.00542,"93":0.00135,"94":0.00135,"95":0.00135,"96":0.00271,"97":0.00271,"98":0.00271,"99":0.00271,"100":0.00406,"101":0.00812,"102":0.00812,"103":0.25861,"104":0.77313,"105":0.00271,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00135,"29":0,"30":0,"31":0,"32":0.00135,"33":0,"34":0,"35":0,"36":0.00135,"37":0,"38":0,"39":0,"40":0.00406,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00406,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.01896,"64":0.02573,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00135,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00135,"89":0.05822,"90":0.00677,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00135,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00135,"102":0,"103":0.0176,"104":0.05416,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.00271,"15":0.00135,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0.00271,"14.1":0.00406,"15.1":0.00135,"15.2-15.3":0.00135,"15.4":0.00271,"15.5":0.00948,"15.6":0.01354,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01167,"8.1-8.4":0,"9.0-9.2":0.00212,"9.3":0.02228,"10.0-10.2":0.00424,"10.3":0.052,"11.0-11.2":0.01592,"11.3-11.4":0.01592,"12.0-12.1":0.01592,"12.2-12.5":0.84469,"13.0-13.1":0.00743,"13.2":0.00318,"13.3":0.03184,"13.4-13.7":0.10399,"14.0-14.4":0.21648,"14.5-14.8":0.54226,"15.0-15.1":0.17403,"15.2-15.3":0.30668,"15.4":0.42553,"15.5":2.39294,"15.6":5.28993,"16.0":0.1284},P:{"4":0.27301,"5.0-5.4":0.01011,"6.2-6.4":0,"7.2-7.4":0.20223,"8.2":0,"9.2":0.02022,"10.1":0.02022,"11.1-11.2":0.08089,"12.0":0.04045,"13.0":0.15167,"14.0":0.06067,"15.0":0.05056,"16.0":0.18201,"17.0":1.48638,"18.0":1.5976},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00091,"4.2-4.3":0.00236,"4.4":0,"4.4.3-4.4.4":0.01215},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.0176,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":81.25916},S:{"2.5":0},R:{_:"0"},M:{"0":0.07781},Q:{"10.4":0},O:{"0":0.25073},H:{"0":0.9004}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TT.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TT.js index 18ac670d332..51b1d69d259 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TT.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TT.js @@ -1 +1 @@ -module.exports={C:{"52":0.00901,"68":0.00451,"78":0.01352,"87":0.00901,"89":0.02704,"91":0.01802,"92":0.12166,"93":0.00451,"94":0.00451,"95":0.13969,"96":0.58578,"97":1.14903,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 88 90 98 99 3.5 3.6"},D:{"26":0.03154,"38":0.00451,"47":0.01802,"49":0.03605,"55":0.00451,"56":0.00901,"62":0.00901,"63":0.00901,"66":0.03154,"67":0.00901,"68":0.02253,"74":0.05858,"75":0.01802,"76":0.04055,"77":0.00451,"79":0.09012,"80":0.02704,"81":0.09913,"83":0.00901,"84":0.00901,"86":0.01802,"87":0.09012,"88":0.01802,"89":0.01802,"90":0.03154,"91":0.05858,"92":0.04506,"93":0.11265,"94":0.08111,"95":0.0721,"96":0.55874,"97":9.12916,"98":19.20908,"99":0.02704,"100":0.04506,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 53 54 57 58 59 60 61 64 65 69 70 71 72 73 78 85 101"},F:{"28":0.01352,"80":0.01352,"82":0.21629,"83":0.8291,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00451,"14":0.00451,"15":0.00451,"16":0.00451,"17":0.00901,"18":0.01802,"85":0.03154,"89":0.00901,"90":0.00451,"92":0.01352,"95":0.02253,"96":0.03605,"97":1.40137,"98":4.43841,_:"13 79 80 81 83 84 86 87 88 91 93 94"},E:{"4":0,"13":0.00901,"14":0.21178,"15":0.11265,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.02253,"11.1":0.09463,"12.1":0.03605,"13.1":0.28838,"14.1":0.43258,"15.1":0.25684,"15.2-15.3":0.57226,"15.4":0.01802},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00936,"6.0-6.1":0,"7.0-7.1":0.09358,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.17406,"10.0-10.2":0,"10.3":0.1254,"11.0-11.2":0.00561,"11.3-11.4":0.0131,"12.0-12.1":0.00936,"12.2-12.5":0.37433,"13.0-13.1":0.01029,"13.2":0.00094,"13.3":0.0262,"13.4-13.7":0.05896,"14.0-14.4":0.26016,"14.5-14.8":1.33075,"15.0-15.1":1.45335,"15.2-15.3":5.36232,"15.4":0.04679},P:{"4":0.46074,"5.0-5.4":0.01116,"6.2-6.4":0.01036,"7.2-7.4":0.27859,"8.2":0.02073,"9.2":0.02143,"10.1":0.05182,"11.1-11.2":0.11786,"12.0":0.01071,"13.0":0.18215,"14.0":0.16072,"15.0":0.15001,"16.0":4.47881},I:{"0":0,"3":0,"4":0.00202,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0004,"4.2-4.3":0.00161,"4.4":0,"4.4.3-4.4.4":0.03991},A:{"11":0.09463,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.14282},Q:{"10.4":0},O:{"0":0.03845},H:{"0":0.33803},L:{"0":40.36034},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00428,"48":0,"49":0,"50":0,"51":0,"52":0.01285,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00428,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.01285,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00428,"88":0,"89":0,"90":0,"91":0.00857,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.00428,"102":0.02999,"103":0.52265,"104":0.09425,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00428,"48":0,"49":0.00857,"50":0,"51":0,"52":0,"53":0.00428,"54":0,"55":0.00428,"56":0.00428,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00857,"64":0,"65":0.00428,"66":0,"67":0.00428,"68":0.01285,"69":0,"70":0,"71":0,"72":0,"73":0.00428,"74":0.00857,"75":0.00428,"76":0.02142,"77":0,"78":0,"79":0.03427,"80":0.00857,"81":0.0257,"83":0.01285,"84":0.00857,"85":0.00428,"86":0.00857,"87":0.02999,"88":0.00428,"89":0.01285,"90":0.00857,"91":0.02142,"92":0.01285,"93":0.04712,"94":0.01285,"95":0.00857,"96":0.01714,"97":0.03856,"98":0.01714,"99":0.03427,"100":0.05569,"101":0.03856,"102":0.09425,"103":3.13589,"104":7.80116,"105":0.0257,"106":0.00428,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.01285,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00428,"62":0,"63":0.00428,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00428,"89":0.38984,"90":0.04712,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00428,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00857,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0.00428,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00857,"93":0,"94":0,"95":0.00428,"96":0,"97":0,"98":0,"99":0,"100":0.00428,"101":0.03427,"102":0.00857,"103":0.46267,"104":1.36231,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00428,"14":0.03856,"15":0.01285,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00857,"11.1":0.02142,"12.1":0.02142,"13.1":0.08996,"14.1":0.09853,"15.1":0.00857,"15.2-15.3":0.01285,"15.4":0.03427,"15.5":0.22705,"15.6":0.49266,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01596,"6.0-6.1":0.00177,"7.0-7.1":0.04434,"8.1-8.4":0.00177,"9.0-9.2":0,"9.3":0.12771,"10.0-10.2":0,"10.3":0.20044,"11.0-11.2":0.00177,"11.3-11.4":0.0071,"12.0-12.1":0.01596,"12.2-12.5":0.5073,"13.0-13.1":0.01419,"13.2":0.00355,"13.3":0.01774,"13.4-13.7":0.07982,"14.0-14.4":0.19334,"14.5-14.8":0.59599,"15.0-15.1":0.19334,"15.2-15.3":0.35298,"15.4":0.88688,"15.5":3.70363,"15.6":10.61954,"16.0":0.149},P:{"4":0.49497,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.45193,"8.2":0,"9.2":0.01076,"10.1":0,"11.1-11.2":0.06456,"12.0":0.01076,"13.0":0.13988,"14.0":0.09684,"15.0":0.03228,"16.0":0.11836,"17.0":1.83998,"18.0":2.69003},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.06827,"4.2-4.3":0.13655,"4.4":0,"4.4.3-4.4.4":1.21186},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02142,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":55.72038},S:{"2.5":0},R:{_:"0"},M:{"0":0.14862},Q:{"10.4":0},O:{"0":0.02286},H:{"0":0.29763}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TV.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TV.js index c82f79bf145..94d9debdb69 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TV.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TV.js @@ -1 +1 @@ -module.exports={C:{"85":0.05317,"96":0.10634,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 89 90 91 92 93 94 95 97 98 99 3.5 3.6"},D:{"96":0.26585,"97":10.66263,"98":16.39272,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 99 100 101"},F:{"82":0.05317,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"13":0.10634,"17":0.05317,"92":0.42536,"95":0.15951,"96":0.47853,"97":0.37219,"98":4.61352,_:"12 14 15 16 18 79 80 81 83 84 85 86 87 88 89 90 91 93 94"},E:{"4":0,_:"0 5 6 7 8 9 10 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 12.1 15.1 15.4","11.1":0.05317,"13.1":0.15951,"14.1":2.01637,"15.2-15.3":0.47853},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.46475,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0.14295,"13.0-13.1":0,"13.2":0.10727,"13.3":0,"13.4-13.7":0.10727,"14.0-14.4":0,"14.5-14.8":0.85791,"15.0-15.1":0.10727,"15.2-15.3":0.42884,"15.4":0},P:{"4":0.15843,"5.0-5.4":0.0102,"6.2-6.4":0.01036,"7.2-7.4":0.04225,"8.2":0.02073,"9.2":0.19011,"10.1":0.11002,"11.1-11.2":0.04225,"12.0":0.06121,"13.0":0.39078,"14.0":0.05281,"15.0":0.02112,"16.0":0.54008},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.05317,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0.32505},H:{"0":0},L:{"0":57.37093},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0.01952,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0.01952,"104":0.01952,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0.03578,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.17892,"101":0.03578,"102":0.01952,"103":3.53926,"104":1.90626,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.01952,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.16265,"102":0.12687,"103":0.86205,"104":1.16783,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0.01952,"11":0,"12":0,"13":0,"14":0,"15":0.07157,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.10735,"13.1":0,"14.1":0.64735,"15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0,"15.6":0,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0.07046,"14.5-14.8":0,"15.0-15.1":0.49291,"15.2-15.3":0.56304,"15.4":0.07046,"15.5":1.33747,"15.6":0.7741,"16.0":0},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0.28148,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0,"15.0":0,"16.0":0,"17.0":0.50265,"18.0":0.22117},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":85.92063},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0.16868},H:{"0":0}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TW.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TW.js index 53593ca8f42..55285a48230 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TW.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TW.js @@ -1 +1 @@ -module.exports={C:{"34":0.02901,"52":0.01658,"55":0.00829,"67":0.00414,"78":0.00829,"88":0.00414,"89":0.00414,"91":0.00829,"93":0.00414,"94":0.00829,"95":0.02072,"96":0.3481,"97":0.57602,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 56 57 58 59 60 61 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 90 92 98 99 3.5 3.6"},D:{"11":0.00829,"22":0.00829,"26":0.00414,"30":0.00829,"34":0.02901,"38":0.11189,"45":0.00414,"47":0.00414,"49":0.15333,"53":0.11189,"55":0.01243,"56":0.02901,"58":0.00829,"61":0.0373,"62":0.00414,"63":0.00829,"64":0.00829,"65":0.01243,"66":0.01243,"67":0.02486,"68":0.01658,"69":0.01658,"70":0.01658,"71":0.02072,"72":0.01243,"73":0.00829,"74":0.02072,"75":0.01658,"76":0.01243,"77":0.00829,"78":0.00829,"79":0.45584,"80":0.02072,"81":0.06216,"83":0.01658,"84":0.01243,"85":0.01658,"86":0.04973,"87":0.09117,"88":0.01658,"89":0.06216,"90":0.02486,"91":0.04973,"92":0.04973,"93":0.21549,"94":0.07045,"95":0.08702,"96":0.50971,"97":7.79486,"98":20.07768,"99":0.00829,"100":0.01243,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 31 32 33 35 36 37 39 40 41 42 43 44 46 48 50 51 52 54 57 59 60 101"},F:{"28":0.02901,"36":0.02072,"40":0.00414,"46":0.07045,"82":0.01243,"83":0.1036,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00414,"16":0.00414,"17":0.00829,"18":0.02072,"84":0.00414,"91":0.00414,"92":0.00829,"94":0.00829,"95":0.00829,"96":0.02486,"97":0.56773,"98":2.24605,_:"12 13 15 79 80 81 83 85 86 87 88 89 90 93"},E:{"4":0,"12":0.00829,"13":0.12846,"14":0.41854,"15":0.16162,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.00829,"10.1":0.02072,"11.1":0.02901,"12.1":0.06216,"13.1":0.28179,"14.1":1.82336,"15.1":0.62989,"15.2-15.3":1.27221,"15.4":0.00414},G:{"8":0.00261,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.02866,"6.0-6.1":0.01303,"7.0-7.1":0.10681,"8.1-8.4":0.04689,"9.0-9.2":0.01563,"9.3":0.2501,"10.0-10.2":0.02345,"10.3":0.26573,"11.0-11.2":0.05992,"11.3-11.4":0.05992,"12.0-12.1":0.13287,"12.2-12.5":0.93527,"13.0-13.1":0.11984,"13.2":0.0495,"13.3":0.22665,"13.4-13.7":0.5002,"14.0-14.4":2.64168,"14.5-14.8":6.13526,"15.0-15.1":4.51482,"15.2-15.3":9.86331,"15.4":0.0495},P:{"4":0.63144,"5.0-5.4":0.08035,"6.2-6.4":0.18078,"7.2-7.4":0.41177,"8.2":0.0107,"9.2":0.06421,"10.1":0.03211,"11.1-11.2":0.11773,"12.0":0.06421,"13.0":0.22475,"14.0":0.21405,"15.0":0.26756,"16.0":2.40803},I:{"0":0,"3":0,"4":0.00045,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0009,"4.2-4.3":0.0036,"4.4":0,"4.4.3-4.4.4":0.01847},A:{"11":0.19477,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.08784},Q:{"10.4":0.01171},O:{"0":0.0937},H:{"0":0.29938},L:{"0":28.60877},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.0156,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.0104,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.0052,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.0052,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.0052,"89":0,"90":0,"91":0.0052,"92":0,"93":0,"94":0,"95":0,"96":0.0052,"97":0,"98":0.0052,"99":0.0052,"100":0.0052,"101":0.0052,"102":0.0208,"103":0.69667,"104":0.14557,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.0052,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0.0052,"31":0,"32":0,"33":0,"34":0.0156,"35":0,"36":0,"37":0,"38":0.05719,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.0052,"46":0,"47":0,"48":0,"49":0.07799,"50":0,"51":0,"52":0,"53":0.05719,"54":0,"55":0.0052,"56":0.0156,"57":0,"58":0.0052,"59":0,"60":0,"61":0.026,"62":0,"63":0.0052,"64":0.0052,"65":0.0052,"66":0.0052,"67":0.0156,"68":0.0052,"69":0.0052,"70":0.0052,"71":0.0104,"72":0.0052,"73":0.0052,"74":0.0104,"75":0.0052,"76":0.0052,"77":0.0052,"78":0.0052,"79":0.30154,"80":0.0104,"81":0.03119,"83":0.0156,"84":0.0104,"85":0.0104,"86":0.026,"87":0.04679,"88":0.0052,"89":0.03119,"90":0.0104,"91":0.0156,"92":0.0208,"93":0.0104,"94":0.0156,"95":0.0156,"96":0.03639,"97":0.05719,"98":0.03119,"99":0.03119,"100":0.05199,"101":0.05719,"102":0.12478,"103":4.12801,"104":12.69076,"105":0.03119,"106":0.0104,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.0156,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.0104,"37":0.0104,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.04159,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.05199,"90":0.0104,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.0052,"18":0.0104,"79":0,"80":0,"81":0,"83":0,"84":0.0052,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.0052,"93":0,"94":0,"95":0,"96":0.0052,"97":0,"98":0,"99":0.0052,"100":0.0052,"101":0.0104,"102":0.0104,"103":0.45231,"104":1.46612,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.05199,"14":0.14557,"15":0.026,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.0052,"10.1":0.0104,"11.1":0.0156,"12.1":0.03119,"13.1":0.11438,"14.1":0.42112,"15.1":0.05199,"15.2-15.3":0.04679,"15.4":0.19756,"15.5":0.80585,"15.6":1.15418,"16.0":0},G:{"8":0.0035,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.04199,"6.0-6.1":0.021,"7.0-7.1":0.14697,"8.1-8.4":0.06649,"9.0-9.2":0.021,"9.3":0.38142,"10.0-10.2":0.02449,"10.3":0.36392,"11.0-11.2":0.05949,"11.3-11.4":0.06649,"12.0-12.1":0.13297,"12.2-12.5":1.17224,"13.0-13.1":0.10148,"13.2":0.04199,"13.3":0.18196,"13.4-13.7":0.38492,"14.0-14.4":2.08554,"14.5-14.8":3.30327,"15.0-15.1":1.27372,"15.2-15.3":1.49067,"15.4":2.65242,"15.5":7.46386,"15.6":13.47203,"16.0":0.03499},P:{"4":0.69692,"5.0-5.4":0.01089,"6.2-6.4":0,"7.2-7.4":0,"8.2":0.01089,"9.2":0.03267,"10.1":0.02178,"11.1-11.2":0.06534,"12.0":0.04356,"13.0":0.13067,"14.0":0.08712,"15.0":0.06534,"16.0":0.2069,"17.0":1.2305,"18.0":1.29584},I:{"0":0,"3":0,"4":0.00447,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0067,"4.2-4.3":0.01786,"4.4":0,"4.4.3-4.4.4":0.07816},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.12478,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":33.74506},S:{"2.5":0},R:{_:"0"},M:{"0":0.08162},Q:{"10.4":0.0096},O:{"0":0.08162},H:{"0":0.20908}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TZ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TZ.js index 7715faed666..9baca7eefd5 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TZ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/TZ.js @@ -1 +1 @@ -module.exports={C:{"30":0.00377,"32":0.00377,"33":0.00189,"34":0.00566,"36":0.00566,"38":0.01132,"39":0.00189,"43":0.00755,"44":0.00377,"45":0.00377,"47":0.00377,"48":0.00377,"49":0.00755,"51":0.00189,"52":0.00755,"56":0.00377,"61":0.00189,"63":0.00377,"65":0.00566,"68":0.00566,"72":0.01321,"78":0.01887,"79":0.00189,"84":0.00377,"85":0.00189,"88":0.00566,"89":0.0151,"90":0.00189,"91":0.02076,"92":0.00377,"93":0.00755,"94":0.01321,"95":0.02831,"96":0.78311,"97":1.09635,"98":0.07359,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 35 37 40 41 42 46 50 53 54 55 57 58 59 60 62 64 66 67 69 70 71 73 74 75 76 77 80 81 82 83 86 87 99 3.5 3.6"},D:{"11":0.00189,"21":0.00189,"37":0.00377,"38":0.00377,"39":0.01321,"43":0.00566,"47":0.00566,"49":0.01321,"50":0.00377,"53":0.00189,"55":0.10001,"57":0.00377,"58":0.00566,"60":0.00377,"63":0.00944,"64":0.00566,"65":0.00944,"67":0.00377,"68":0.00377,"69":0.00755,"70":0.00944,"71":0.00566,"72":0.00755,"73":0.00377,"74":0.01132,"75":0.00944,"76":0.00189,"77":0.00566,"78":0.00566,"79":0.02642,"80":0.01321,"81":0.00755,"83":0.00755,"84":0.01132,"85":0.00944,"86":0.0151,"87":0.0434,"88":0.01887,"89":0.01321,"90":0.01132,"91":0.02453,"92":0.02642,"93":0.01887,"94":0.03208,"95":0.0434,"96":0.26041,"97":2.73426,"98":6.62148,"99":0.00566,"100":0.00755,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 40 41 42 44 45 46 48 51 52 54 56 59 61 62 66 101"},F:{"28":0.00189,"37":0.00189,"63":0.00189,"67":0.00566,"73":0.00189,"79":0.00566,"80":0.00377,"81":0.00755,"82":0.06605,"83":0.66422,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 64 65 66 68 69 70 71 72 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.02642,"13":0.00944,"14":0.00377,"15":0.01698,"16":0.01698,"17":0.00944,"18":0.10001,"84":0.00944,"85":0.00755,"86":0.00377,"89":0.02453,"90":0.0151,"91":0.00189,"92":0.01698,"93":0.00377,"94":0.00755,"95":0.02453,"96":0.05095,"97":0.37551,"98":1.00011,_:"79 80 81 83 87 88"},E:{"4":0,"12":0.00755,"13":0.00944,"14":0.06416,"15":0.02453,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 7.1","6.1":0.00189,"9.1":0.00377,"10.1":0.00755,"11.1":0.01321,"12.1":0.01698,"13.1":0.04906,"14.1":0.07737,"15.1":0.04906,"15.2-15.3":0.08869,"15.4":0.00566},G:{"8":0.00119,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00298,"6.0-6.1":0,"7.0-7.1":0.01193,"8.1-8.4":0.00358,"9.0-9.2":0.0006,"9.3":0.03221,"10.0-10.2":0.00298,"10.3":0.04713,"11.0-11.2":0.03579,"11.3-11.4":0.05846,"12.0-12.1":0.04593,"12.2-12.5":1.14534,"13.0-13.1":0.03221,"13.2":0.01074,"13.3":0.08232,"13.4-13.7":0.27619,"14.0-14.4":0.83932,"14.5-14.8":0.9968,"15.0-15.1":0.91687,"15.2-15.3":1.41437,"15.4":0.00537},P:{"4":0.35011,"5.0-5.4":0.02059,"6.2-6.4":0.21073,"7.2-7.4":0.12357,"8.2":0.05017,"9.2":0.13387,"10.1":0.08028,"11.1-11.2":0.08238,"12.0":0.04119,"13.0":0.08238,"14.0":0.17506,"15.0":0.21625,"16.0":1.02974},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00219,"4.2-4.3":0.00658,"4.4":0,"4.4.3-4.4.4":0.07235},A:{"8":0.00209,"11":0.07528,_:"6 7 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.1379},Q:{"10.4":0},O:{"0":1.25736},H:{"0":16.62702},L:{"0":56.13239},S:{"2.5":0.44616}}; +module.exports={C:{"30":0.00212,"34":0.00424,"37":0.00212,"38":0.00212,"43":0.00424,"44":0.00424,"47":0.00424,"49":0.00424,"52":0.02119,"56":0.00212,"72":0.00848,"78":0.0106,"88":0.00424,"89":0.00848,"91":0.03602,"95":0.00424,"96":0.00212,"97":0.00424,"98":0.00424,"99":0.00848,"100":0.01271,"101":0.02119,"102":0.05933,"103":1.24173,"104":0.32209,"105":0.02331,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 35 36 39 40 41 42 45 46 48 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 87 90 92 93 94 106 3.5 3.6"},D:{"11":0.0106,"32":0.00212,"37":0.00212,"49":0.00636,"50":0.00424,"55":0.00424,"57":0.0106,"58":0.00212,"60":0.00212,"63":0.00636,"64":0.00424,"65":0.01271,"67":0.00212,"68":0.00636,"69":0.00848,"70":0.00848,"71":0.00424,"72":0.00636,"73":0.00212,"74":0.01483,"75":0.00636,"76":0.00212,"77":0.00636,"78":0.00424,"79":0.10171,"80":0.01695,"81":0.00636,"83":0.00848,"84":0.0106,"85":0.00424,"86":0.02543,"87":0.02755,"88":0.00848,"89":0.01695,"90":0.01271,"91":0.01907,"92":0.02755,"93":0.0106,"94":0.01695,"95":0.0106,"96":0.03602,"97":0.01907,"98":0.03179,"99":0.05086,"100":0.03814,"101":0.04026,"102":0.12502,"103":2.46228,"104":6.65578,"105":0.03602,"106":0.00424,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 38 39 40 41 42 43 44 45 46 47 48 51 52 53 54 56 59 61 62 66 107 108"},F:{"62":0.00212,"79":0.0106,"85":0.0106,"86":0.02543,"87":0.00848,"88":0.01483,"89":0.61875,"90":0.13138,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 82 83 84 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.02543,"13":0.0106,"14":0.0106,"15":0.0106,"16":0.01907,"17":0.00848,"18":0.07417,"84":0.00636,"85":0.00424,"86":0.00212,"89":0.00848,"90":0.01271,"92":0.02119,"96":0.00212,"97":0.00424,"98":0.00424,"99":0.00424,"100":0.00636,"101":0.01271,"102":0.02331,"103":0.55518,"104":1.16121,_:"79 80 81 83 87 88 91 93 94 95 105"},E:{"4":0,"13":0.00848,"14":0.02331,"15":0.00424,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.00636,"12.1":0.01271,"13.1":0.04662,"14.1":0.06145,"15.1":0.02331,"15.2-15.3":0.0106,"15.4":0.02119,"15.5":0.08052,"15.6":0.1229,"16.0":0.00212},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00124,"6.0-6.1":0.00186,"7.0-7.1":0.01611,"8.1-8.4":0,"9.0-9.2":0.0031,"9.3":0.02603,"10.0-10.2":0.00248,"10.3":0.1723,"11.0-11.2":0.01116,"11.3-11.4":0.03781,"12.0-12.1":0.02727,"12.2-12.5":1.0047,"13.0-13.1":0.01178,"13.2":0.00558,"13.3":0.05206,"13.4-13.7":0.09049,"14.0-14.4":0.38366,"14.5-14.8":0.51629,"15.0-15.1":0.28511,"15.2-15.3":0.30804,"15.4":0.44316,"15.5":1.23712,"15.6":1.49,"16.0":0.06632},P:{"4":0.23788,"5.0-5.4":0.03103,"6.2-6.4":0.11054,"7.2-7.4":0.12411,"8.2":0.01005,"9.2":0.06206,"10.1":0.07035,"11.1-11.2":0.10343,"12.0":0.02069,"13.0":0.04137,"14.0":0.08274,"15.0":0.0724,"16.0":0.20685,"17.0":0.63089,"18.0":0.37233},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00314,"4.2-4.3":0.00903,"4.4":0,"4.4.3-4.4.4":0.09815},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"8":0.00249,"11":0.05473,_:"6 7 9 10 5.5"},J:{"7":0,"10":0.00788},N:{"10":0,"11":0},L:{"0":59.91239},S:{"2.5":0.33884},R:{_:"0"},M:{"0":0.17336},Q:{"10.4":0},O:{"0":1.1032},H:{"0":13.77913}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UA.js index 5f910aa0863..0f2eb97fecb 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UA.js @@ -1 +1 @@ -module.exports={C:{"45":0.01142,"48":0.01713,"52":0.27408,"53":0.00571,"55":0.27408,"56":0.03426,"57":0.00571,"60":0.07994,"68":0.24553,"72":0.00571,"78":0.12562,"79":0.01713,"80":0.01142,"81":0.04568,"82":0.02284,"83":0.01142,"84":0.02855,"86":0.01713,"87":0.01713,"88":0.02855,"89":0.02284,"90":0.01142,"91":0.10849,"92":0.02284,"93":0.02284,"94":0.02284,"95":0.16559,"96":1.0278,"97":1.42179,"98":0.00571,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 49 50 51 54 58 59 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 85 99 3.5 3.6"},D:{"41":0.01713,"48":0.00571,"49":0.19414,"51":0.00571,"56":0.00571,"57":0.00571,"58":0.00571,"59":0.12562,"61":0.07423,"62":0.00571,"63":0.03426,"64":0.00571,"65":0.00571,"66":0.00571,"67":0.01713,"68":0.01713,"69":0.02855,"70":0.01713,"71":0.02284,"72":0.01713,"73":0.03997,"74":0.07994,"75":0.01142,"76":0.02284,"77":0.01713,"78":0.02284,"79":0.07994,"80":0.04568,"81":0.02855,"83":0.07423,"84":0.10278,"85":0.1142,"86":0.25695,"87":0.21127,"88":0.1713,"89":0.09707,"90":0.18272,"91":0.06852,"92":0.15988,"93":1.22765,"94":0.11991,"95":0.09707,"96":0.93073,"97":10.62631,"98":19.8708,"99":0.01713,"100":0.06852,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 43 44 45 46 47 50 52 53 54 55 60 101"},F:{"35":0.00571,"36":0.06852,"58":0.01713,"60":0.00571,"67":0.00571,"68":0.01713,"70":0.00571,"71":0.01142,"72":0.00571,"73":0.01142,"75":0.01142,"76":0.00571,"77":0.09136,"78":0.0571,"79":0.08565,"80":0.08565,"81":0.05139,"82":1.10774,"83":7.94832,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 62 63 64 65 66 69 74 9.5-9.6 10.5 10.6 11.1 11.5 11.6","10.0-10.1":0,"12.1":0.03997},B:{"14":0.00571,"18":0.01142,"84":0.00571,"85":0.00571,"90":0.00571,"96":0.01142,"97":0.27979,"98":0.86792,_:"12 13 15 16 17 79 80 81 83 86 87 88 89 91 92 93 94 95"},E:{"4":0,"13":0.03426,"14":0.1142,"15":0.06281,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 10.1","5.1":0.18272,"9.1":0.00571,"11.1":0.01142,"12.1":0.02855,"13.1":0.12562,"14.1":0.35973,"15.1":0.21127,"15.2-15.3":0.34831,"15.4":0.00571},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00197,"6.0-6.1":0.00262,"7.0-7.1":0.00721,"8.1-8.4":0.00197,"9.0-9.2":0.00262,"9.3":0.03015,"10.0-10.2":0.0059,"10.3":0.03801,"11.0-11.2":0.01245,"11.3-11.4":0.01376,"12.0-12.1":0.01114,"12.2-12.5":0.24051,"13.0-13.1":0.01573,"13.2":0.00655,"13.3":0.03473,"13.4-13.7":0.12386,"14.0-14.4":0.32505,"14.5-14.8":1.25236,"15.0-15.1":1.06428,"15.2-15.3":3.34226,"15.4":0.01769},P:{"4":0.01085,"5.0-5.4":0.0102,"6.2-6.4":0.01085,"7.2-7.4":0.08681,"8.2":0.02073,"9.2":0.0217,"10.1":0.11002,"11.1-11.2":0.06511,"12.0":0.01085,"13.0":0.0434,"14.0":0.07596,"15.0":0.06511,"16.0":1.08512},I:{"0":0,"3":0,"4":0.00158,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00158,"4.2-4.3":0.00473,"4.4":0,"4.4.3-4.4.4":0.02643},A:{"8":0.01713,"9":0.01713,"11":0.3426,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.16302},Q:{"10.4":0},O:{"0":0.18447},H:{"0":3.72845},L:{"0":26.30602},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00617,"49":0,"50":0.08015,"51":0,"52":0.11714,"53":0,"54":0,"55":0.00617,"56":0,"57":0,"58":0,"59":0,"60":0.00617,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.14796,"69":0,"70":0,"71":0,"72":0.00617,"73":0,"74":0,"75":0,"76":0,"77":0.00617,"78":0.08631,"79":0.00617,"80":0.01233,"81":0.06782,"82":0.00617,"83":0.00617,"84":0.01233,"85":0,"86":0,"87":0,"88":0.00617,"89":0.0185,"90":0,"91":0.06165,"92":0,"93":0.00617,"94":0.01233,"95":0.0185,"96":0.01233,"97":0.01233,"98":0.01233,"99":0.03699,"100":0.0185,"101":0.02466,"102":0.08015,"103":1.71387,"104":0.30209,"105":0.00617,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00617,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00617,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0.01233,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.11714,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00617,"57":0.00617,"58":0.00617,"59":0.09864,"60":0,"61":0.04932,"62":0,"63":0.00617,"64":0.00617,"65":0,"66":0,"67":0.00617,"68":0.00617,"69":0.00617,"70":0.01233,"71":0.0185,"72":0.04932,"73":0.00617,"74":0.06165,"75":0.00617,"76":0.00617,"77":0.01233,"78":0.01233,"79":0.04932,"80":0.02466,"81":0.03699,"83":0.04932,"84":0.08015,"85":0.05549,"86":0.16646,"87":0.09248,"88":0.03699,"89":0.04316,"90":0.03699,"91":0.03699,"92":0.04316,"93":0.03083,"94":0.03083,"95":0.03699,"96":0.13563,"97":0.28976,"98":0.06782,"99":0.11097,"100":0.10481,"101":0.11714,"102":0.37607,"103":4.97516,"104":12.68141,"105":0.03699,"106":0.01233,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.03699,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00617,"62":0.00617,"63":0.0185,"64":0.0185,"65":0,"66":0,"67":0,"68":0.00617,"69":0.01233,"70":0.00617,"71":0.05549,"72":0.00617,"73":0.01233,"74":0.00617,"75":0.00617,"76":0,"77":0.0185,"78":0.00617,"79":0.03699,"80":0.00617,"81":0.00617,"82":0.0185,"83":0.02466,"84":0.06165,"85":0.27743,"86":0.05549,"87":0.04932,"88":0.14796,"89":7.58295,"90":1.30082,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.0185},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.0185,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0.00617,"88":0,"89":0.00617,"90":0,"91":0,"92":0.00617,"93":0,"94":0,"95":0,"96":0.00617,"97":0,"98":0,"99":0.00617,"100":0,"101":0.00617,"102":0.00617,"103":0.21578,"104":0.65966,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.0185,"14":0.04316,"15":0.00617,_:"0","3.1":0,"3.2":0,"5.1":0.03699,"6.1":0,"7.1":0,"9.1":0.01233,"10.1":0,"11.1":0.00617,"12.1":0.00617,"13.1":0.04932,"14.1":0.09248,"15.1":0.0185,"15.2-15.3":0.01233,"15.4":0.04316,"15.5":0.14796,"15.6":0.25277,"16.0":0.00617},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0039,"6.0-6.1":0.00097,"7.0-7.1":0.02338,"8.1-8.4":0.00585,"9.0-9.2":0.00195,"9.3":0.07892,"10.0-10.2":0.00097,"10.3":0.05456,"11.0-11.2":0.01656,"11.3-11.4":0.01949,"12.0-12.1":0.01461,"12.2-12.5":0.29912,"13.0-13.1":0.01267,"13.2":0.01461,"13.3":0.0302,"13.4-13.7":0.10815,"14.0-14.4":0.26697,"14.5-14.8":0.68106,"15.0-15.1":0.2241,"15.2-15.3":0.41312,"15.4":0.47937,"15.5":2.12112,"15.6":4.73038,"16.0":0.13641},P:{"4":0.07338,"5.0-5.4":0,"6.2-6.4":0.01048,"7.2-7.4":0.06289,"8.2":0,"9.2":0.01048,"10.1":0,"11.1-11.2":0.04193,"12.0":0.01048,"13.0":0.04193,"14.0":0.03145,"15.0":0.03145,"16.0":0.06289,"17.0":0.41929,"18.0":0.46122},I:{"0":0,"3":0,"4":0.01072,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01532,"4.2-4.3":0.03064,"4.4":0,"4.4.3-4.4.4":0.11949},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00634,"9":0.00634,"10":0,"11":0.20926,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":38.47999},S:{"2.5":0},R:{_:"0"},M:{"0":0.13039},Q:{"10.4":0},O:{"0":0.16107},H:{"0":6.41913}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UG.js index 13852d1aa6e..2648c0a4857 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UG.js @@ -1 +1 @@ -module.exports={C:{"36":0.00277,"38":0.00277,"40":0.00277,"41":0.00554,"42":0.00554,"43":0.00831,"44":0.01108,"47":0.01108,"48":0.00554,"50":0.00554,"52":0.04157,"55":0.00277,"56":0.00831,"57":0.00554,"58":0.00277,"60":0.01108,"64":0.01108,"66":0.00554,"67":0.00277,"68":0.00554,"69":0.00277,"72":0.0194,"73":0.00554,"76":0.00277,"78":0.05819,"82":0.00277,"84":0.00554,"85":0.00831,"86":0.00554,"87":0.00277,"88":0.02217,"89":0.03325,"90":0.01108,"91":0.06928,"92":0.0194,"93":0.00554,"94":0.02494,"95":0.07482,"96":1.35225,"97":2.01729,"98":0.28264,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 39 45 46 49 51 53 54 59 61 62 63 65 70 71 74 75 77 79 80 81 83 99 3.5 3.6"},D:{"19":0.00831,"24":0.00277,"37":0.00554,"38":0.00831,"39":0.00277,"40":0.00277,"47":0.00831,"49":0.01386,"50":0.00554,"56":0.00554,"57":0.00554,"58":0.00554,"59":0.00554,"62":0.00554,"63":0.01386,"64":0.0194,"65":0.01663,"66":0.00554,"67":0.00277,"68":0.00277,"69":0.00277,"70":0.00554,"71":0.00554,"72":0.01663,"73":0.00277,"74":0.02217,"75":0.01108,"76":0.00831,"77":0.00277,"78":0.00554,"79":0.03602,"80":0.05265,"81":0.01108,"83":0.06096,"84":0.00554,"85":0.01386,"86":0.03325,"87":0.04157,"88":0.01386,"89":0.0194,"90":0.02217,"91":0.04157,"92":0.05265,"93":0.04434,"94":0.06373,"95":0.04988,"96":0.3824,"97":4.41697,"98":9.19972,"99":0.02217,"100":0.00831,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 25 26 27 28 29 30 31 32 33 34 35 36 41 42 43 44 45 46 48 51 52 53 54 55 60 61 101"},F:{"28":0.00277,"57":0.00277,"67":0.00554,"68":0.00277,"79":0.01108,"80":0.01108,"81":0.00277,"82":0.05819,"83":0.79251,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 58 60 62 63 64 65 66 69 70 71 72 73 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.03048,"13":0.01663,"14":0.00831,"15":0.01386,"16":0.01386,"17":0.01386,"18":0.08313,"84":0.01108,"85":0.00831,"88":0.00277,"89":0.0194,"90":0.01108,"91":0.00554,"92":0.03879,"93":0.00831,"94":0.00831,"95":0.0194,"96":0.07205,"97":0.40457,"98":1.26358,_:"79 80 81 83 86 87"},E:{"4":0,"8":0.00277,"10":0.00277,"12":0.00277,"13":0.01108,"14":0.02771,"15":0.01663,_:"0 5 6 7 9 11 3.1 3.2 5.1 6.1 7.1 9.1 15.4","10.1":0.00554,"11.1":0.00554,"12.1":0.01386,"13.1":0.04157,"14.1":0.11915,"15.1":0.03879,"15.2-15.3":0.05542},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00301,"6.0-6.1":0.00086,"7.0-7.1":0.0262,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03608,"10.0-10.2":0.00515,"10.3":0.05241,"11.0-11.2":0.01675,"11.3-11.4":0.26246,"12.0-12.1":0.01546,"12.2-12.5":0.53523,"13.0-13.1":0.0378,"13.2":0.01289,"13.3":0.05842,"13.4-13.7":0.08763,"14.0-14.4":0.5842,"14.5-14.8":0.73326,"15.0-15.1":0.73626,"15.2-15.3":1.08506,"15.4":0.0043},P:{"4":0.12479,"5.0-5.4":0.0102,"6.2-6.4":0.01036,"7.2-7.4":0.07279,"8.2":0.02073,"9.2":0.17678,"10.1":0.11002,"11.1-11.2":0.05199,"12.0":0.0104,"13.0":0.09359,"14.0":0.35357,"15.0":0.13519,"16.0":0.59274},I:{"0":0,"3":0,"4":0.00081,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00081,"4.2-4.3":0.00222,"4.4":0,"4.4.3-4.4.4":0.03954},A:{"8":0.00603,"9":0.00302,"10":0.00302,"11":0.12371,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00723},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.13733},Q:{"10.4":0},O:{"0":1.02638},H:{"0":15.98526},L:{"0":52.49623},S:{"2.5":0.23852}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00246,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00246,"44":0,"45":0,"46":0,"47":0.00246,"48":0,"49":0,"50":0,"51":0,"52":0.00738,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.01723,"61":0,"62":0,"63":0,"64":0.00492,"65":0,"66":0,"67":0,"68":0.00246,"69":0,"70":0,"71":0,"72":0.00492,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00492,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00246,"89":0,"90":0,"91":0.01477,"92":0,"93":0.00246,"94":0,"95":0.00246,"96":0,"97":0.00246,"98":0.00738,"99":0.00246,"100":0.00738,"101":0.00738,"102":0.02953,"103":0.41345,"104":0.11321,"105":0.01231,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0.00246,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.00246,"40":0.00246,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00246,"47":0,"48":0,"49":0.00246,"50":0.00246,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00246,"57":0,"58":0.00246,"59":0,"60":0,"61":0,"62":0.00246,"63":0,"64":0.00738,"65":0.00492,"66":0.00246,"67":0,"68":0,"69":0,"70":0.00246,"71":0,"72":0.00492,"73":0,"74":0.00492,"75":0,"76":0.00246,"77":0.00246,"78":0.00246,"79":0.00492,"80":0.00492,"81":0.00984,"83":0.00246,"84":0,"85":0,"86":0.00492,"87":0.00984,"88":0.00246,"89":0.00492,"90":0.00246,"91":0.00492,"92":0.00984,"93":0.00984,"94":0.00492,"95":0.00984,"96":0.00738,"97":0.00738,"98":0.00738,"99":0.00492,"100":0.01231,"101":0.01231,"102":0.03445,"103":0.69892,"104":2.00572,"105":0.00738,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0.00246,"15":0,"16":0.00246,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00246,"25":0,"26":0,"27":0,"28":0.00246,"29":0,"30":0.00246,"31":0,"32":0.00246,"33":0.00492,"34":0,"35":0,"36":0,"37":0.01477,"38":0,"39":0,"40":0,"41":0,"42":0.00246,"43":0,"44":0,"45":0.00246,"46":0.00492,"47":0.00246,"48":0,"49":0,"50":0.00246,"51":0.00492,"52":0,"53":0,"54":0.00738,"55":0.00246,"56":0.00738,"57":0.03199,"58":0.02461,"60":0.08614,"62":0.00246,"63":0.48236,"64":0.21411,"65":0,"66":0,"67":0,"68":0,"69":0.00246,"70":0.00246,"71":0.00246,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00738,"80":0,"81":0.00246,"82":0,"83":0,"84":0,"85":0.00738,"86":0,"87":0,"88":0.00492,"89":0.11813,"90":0.02707,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.01231},B:{"12":0.00738,"13":0.00246,"14":0.00246,"15":0.00492,"16":0.00738,"17":0.00246,"18":0.01231,"79":0,"80":0,"81":0,"83":0,"84":0.00246,"85":0.00246,"86":0,"87":0,"88":0,"89":0.00246,"90":0.00246,"91":0,"92":0.00738,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.00246,"100":0.00492,"101":0.00738,"102":0.00492,"103":0.11075,"104":0.25102,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00246,"14":0.00492,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0.00738,"11.1":0,"12.1":0.00246,"13.1":0.00738,"14.1":0.00738,"15.1":0,"15.2-15.3":0,"15.4":0.00984,"15.5":0.01231,"15.6":0.01723,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.0005,"5.0-5.1":0.00401,"6.0-6.1":0,"7.0-7.1":0.01252,"8.1-8.4":0.0025,"9.0-9.2":0.001,"9.3":0.03655,"10.0-10.2":0.002,"10.3":0.03255,"11.0-11.2":0.00751,"11.3-11.4":0.01102,"12.0-12.1":0.01853,"12.2-12.5":0.55132,"13.0-13.1":0.08362,"13.2":0.00651,"13.3":0.05007,"13.4-13.7":0.06359,"14.0-14.4":0.36054,"14.5-14.8":0.43114,"15.0-15.1":0.30045,"15.2-15.3":0.29244,"15.4":0.39859,"15.5":1.08412,"15.6":1.2088,"16.0":0.04507},P:{"4":0.1032,"5.0-5.4":0.01032,"6.2-6.4":0,"7.2-7.4":0.08256,"8.2":0,"9.2":0.1032,"10.1":0,"11.1-11.2":0.03096,"12.0":0,"13.0":0.03096,"14.0":0.12384,"15.0":0.06192,"16.0":0.11352,"17.0":0.37151,"18.0":0.22704},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.0042,"4.2-4.3":0.00841,"4.4":0,"4.4.3-4.4.4":0.14122},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00984,"5.5":0},J:{"7":0,"10":0.02262},N:{"10":0,"11":0},L:{"0":66.82028},S:{"2.5":0.21863},R:{_:"0"},M:{"0":0.14324},Q:{"10.4":0},O:{"0":0.71621},H:{"0":15.68095}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/US.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/US.js index 9dc9b23cd96..953a2b301d0 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/US.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/US.js @@ -1 +1 @@ -module.exports={C:{"2":0.00478,"3":0.00478,"4":0.03347,"11":0.00956,"38":0.00478,"43":0.00478,"44":0.01912,"45":0.00478,"47":0.00478,"48":0.00478,"52":0.03347,"54":0.00956,"55":0.00956,"59":0.00478,"68":0.00478,"78":0.10996,"79":0.00478,"80":0.00478,"81":0.00478,"82":0.00956,"83":0.00478,"84":0.00478,"85":0.00478,"86":0.00956,"87":0.00956,"88":0.01434,"89":0.01434,"90":0.00956,"91":0.09084,"92":0.00478,"93":0.01434,"94":0.0765,"95":0.06215,"96":0.92751,"97":1.37693,_:"5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 46 49 50 51 53 56 57 58 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 98 99 3.5 3.6"},D:{"35":0.01912,"38":0.00478,"40":0.02391,"43":0.00956,"46":0.00478,"47":0.00478,"48":0.05737,"49":0.05737,"50":0.00478,"52":0.00478,"56":0.08606,"58":0.00478,"59":0.01434,"60":0.05737,"63":0.00956,"64":0.04781,"65":0.01434,"66":0.04781,"67":0.01912,"68":0.00956,"69":0.01434,"70":0.05259,"71":0.00478,"72":0.3012,"73":0.00478,"74":0.02391,"75":0.02391,"76":0.22949,"77":0.01434,"78":0.05259,"79":0.42551,"80":0.08606,"81":0.06693,"83":0.31555,"84":0.11474,"85":0.09084,"86":0.07172,"87":0.14343,"88":0.05259,"89":0.08128,"90":0.08606,"91":0.20558,"92":0.15299,"93":0.34423,"94":0.4016,"95":0.12431,"96":1.30999,"97":8.49106,"98":13.86012,"99":0.01912,"100":0.05259,"101":0.01912,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 39 41 42 44 45 51 53 54 55 57 61 62"},F:{"80":0.00478,"82":0.10518,"83":0.36814,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00956,"15":0.03347,"16":0.00956,"17":0.00956,"18":0.26774,"85":0.00956,"86":0.00478,"87":0.02869,"89":0.00478,"90":0.00478,"91":0.00478,"92":0.00956,"93":0.00478,"94":0.00956,"95":0.06215,"96":0.07172,"97":1.29087,"98":4.14991,_:"13 14 79 80 81 83 84 88"},E:{"4":0,"8":0.00478,"9":0.00956,"12":0.00956,"13":0.0765,"14":0.41595,"15":0.26774,_:"0 5 6 7 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.05259,"10.1":0.02869,"11.1":0.06215,"12.1":0.13387,"13.1":1.64945,"14.1":1.67813,"15.1":0.7554,"15.2-15.3":1.92196,"15.4":0.02391},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.0084,"7.0-7.1":0.0084,"8.1-8.4":0.0084,"9.0-9.2":0.0112,"9.3":0.08116,"10.0-10.2":0.0112,"10.3":0.09796,"11.0-11.2":0.03918,"11.3-11.4":0.04758,"12.0-12.1":0.05318,"12.2-12.5":0.54296,"13.0-13.1":0.04758,"13.2":0.01959,"13.3":0.10915,"13.4-13.7":0.34425,"14.0-14.4":1.1391,"14.5-14.8":5.14976,"15.0-15.1":3.85392,"15.2-15.3":16.3225,"15.4":0.07837},P:{"4":0.03251,_:"5.0-5.4 6.2-6.4 7.2-7.4 8.2 9.2 10.1","11.1-11.2":0.02167,"12.0":0.01084,"13.0":0.04334,"14.0":0.07585,"15.0":0.06501,"16.0":1.74445},I:{"0":0,"3":0,"4":0.01305,"2.1":0,"2.2":0.00703,"2.3":0.001,"4.1":0.00201,"4.2-4.3":0.0261,"4.4":0,"4.4.3-4.4.4":0.02911},A:{"7":0.0049,"8":0.01469,"9":0.07836,"11":0.70526,_:"6 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.4384},Q:{"10.4":0.00522},O:{"0":0.11482},H:{"0":0.20258},L:{"0":21.66147},S:{"2.5":0.00522}}; +module.exports={C:{"2":0,"3":0,"4":0.01854,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01391,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00464,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0.00927,"45":0.00464,"46":0,"47":0,"48":0.00464,"49":0,"50":0,"51":0,"52":0.01854,"53":0,"54":0.01391,"55":0,"56":0.00464,"57":0,"58":0,"59":0.00464,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00464,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.02782,"79":0.00464,"80":0.00464,"81":0.00464,"82":0.00464,"83":0.00464,"84":0.00464,"85":0,"86":0,"87":0.00464,"88":0.00464,"89":0.00464,"90":0,"91":0.04172,"92":0,"93":0.00464,"94":0.01391,"95":0.00464,"96":0.00464,"97":0.00464,"98":0.00464,"99":0.00927,"100":0.00927,"101":0.01854,"102":0.0649,"103":0.9782,"104":0.19935,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.00464,"36":0,"37":0,"38":0.00464,"39":0,"40":0.00927,"41":0,"42":0,"43":0.00464,"44":0.00464,"45":0,"46":0,"47":0,"48":0.01854,"49":0.01854,"50":0,"51":0,"52":0.00464,"53":0,"54":0,"55":0,"56":0.06954,"57":0,"58":0,"59":0.00464,"60":0.00464,"61":0.01391,"62":0,"63":0.00464,"64":0,"65":0.00464,"66":0.03245,"67":0.00927,"68":0.00464,"69":0.00464,"70":0.00464,"71":0.00464,"72":0.00464,"73":0.00464,"74":0.00464,"75":0.00927,"76":0.07881,"77":0.00464,"78":0.01391,"79":0.0649,"80":0.03245,"81":0.03245,"83":0.051,"84":0.03709,"85":0.04636,"86":0.04636,"87":0.06027,"88":0.01391,"89":0.03245,"90":0.01391,"91":0.02782,"92":0.01854,"93":0.051,"94":0.01854,"95":0.01391,"96":0.0649,"97":0.051,"98":0.06954,"99":0.051,"100":0.09272,"101":0.12054,"102":0.27816,"103":3.57899,"104":6.83346,"105":0.02782,"106":0.02782,"107":0.01854,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00464,"64":0.00464,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00464,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00927,"89":0.23644,"90":0.02318,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00464,"13":0,"14":0,"15":0.00464,"16":0,"17":0.00464,"18":0.00927,"79":0,"80":0,"81":0,"83":0,"84":0.00464,"85":0.00464,"86":0.00464,"87":0.00464,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0.00464,"96":0.00464,"97":0,"98":0.00464,"99":0.00464,"100":0.00464,"101":0.03709,"102":0.02782,"103":0.7603,"104":2.09084,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.00464,"9":0.00464,"10":0,"11":0,"12":0.00464,"13":0.02318,"14":0.09736,"15":0.02782,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.01391,"10.1":0.00927,"11.1":0.02318,"12.1":0.04172,"13.1":0.35697,"14.1":0.30134,"15.1":0.04636,"15.2-15.3":0.04636,"15.4":0.15299,"15.5":0.60268,"15.6":1.40007,"16.0":0.00927},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00428,"5.0-5.1":0,"6.0-6.1":0.00855,"7.0-7.1":0.01283,"8.1-8.4":0.01283,"9.0-9.2":0.02566,"9.3":0.09837,"10.0-10.2":0.00855,"10.3":0.12403,"11.0-11.2":0.04705,"11.3-11.4":0.0556,"12.0-12.1":0.04277,"12.2-12.5":0.63297,"13.0-13.1":0.03421,"13.2":0.02138,"13.3":0.09409,"13.4-13.7":0.28655,"14.0-14.4":0.9238,"14.5-14.8":2.8441,"15.0-15.1":0.56882,"15.2-15.3":1.04783,"15.4":1.42419,"15.5":8.70766,"15.6":25.44296,"16.0":0.26516},P:{"4":0.0625,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0.01042,"10.1":0,"11.1-11.2":0.01042,"12.0":0.01042,"13.0":0.03125,"14.0":0.04167,"15.0":0.02083,"16.0":0.08334,"17.0":0.66672,"18.0":1.04175},I:{"0":0,"3":0.02492,"4":0.06854,"2.1":0,"2.2":0.01869,"2.3":0,"4.1":0.01869,"4.2-4.3":0.16199,"4.4":0,"4.4.3-4.4.4":0.19314},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.02423,"9":0.0727,"10":0.00485,"11":0.11147,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":31.96455},S:{"2.5":0.00536},R:{_:"0"},M:{"0":0.4613},Q:{"10.4":0.03218},O:{"0":0.08582},H:{"0":0.2336}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UY.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UY.js index 8d8a06cfcec..501f7cbf62c 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UY.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UY.js @@ -1 +1 @@ -module.exports={C:{"45":0.00459,"52":0.08723,"55":0.00918,"57":0.00918,"61":0.00918,"66":0.01377,"68":0.00918,"73":0.02755,"78":0.03214,"81":0.00459,"83":0.00918,"84":0.01377,"85":0.01836,"86":0.01377,"88":0.02296,"89":0.00459,"90":0.03214,"91":0.09641,"92":0.00918,"93":0.00918,"94":0.00918,"95":0.03673,"96":0.72997,"97":1.26712,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 53 54 56 58 59 60 62 63 64 65 67 69 70 71 72 74 75 76 77 79 80 82 87 98 99 3.5 3.6"},D:{"22":0.00918,"36":0.04132,"38":0.04591,"43":0.00918,"47":0.01836,"48":0.00459,"49":0.12396,"52":0.00459,"53":0.00918,"55":0.00459,"58":0.00459,"62":0.04132,"63":0.00459,"65":0.01377,"66":0.01377,"69":0.01377,"70":0.26628,"71":0.01377,"72":0.00459,"73":0.01377,"74":0.01836,"75":0.00918,"76":0.01377,"77":0.00459,"78":0.00918,"79":0.0505,"80":0.14232,"81":0.03214,"83":0.04132,"84":0.01377,"85":0.02296,"86":0.93656,"87":0.07346,"88":0.02755,"89":0.05509,"90":0.05968,"91":0.09182,"92":0.07346,"93":0.09641,"94":0.08264,"95":0.08264,"96":0.53715,"97":9.14068,"98":22.12403,"99":0.00459,"100":0.00918,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 37 39 40 41 42 44 45 46 50 51 54 56 57 59 60 61 64 67 68 101"},F:{"82":0.94116,"83":2.31386,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00459,"14":0.00459,"17":0.00459,"18":0.00918,"92":0.02296,"95":0.01836,"96":0.04132,"97":0.50501,"98":1.8364,_:"13 15 16 79 80 81 83 84 85 86 87 88 89 90 91 93 94"},E:{"4":0,"13":0.02296,"14":0.04591,"15":0.04591,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.01377,"11.1":0.00918,"12.1":0.1515,"13.1":0.12396,"14.1":0.27087,"15.1":0.14691,"15.2-15.3":0.23414},G:{"8":0,"3.2":0.00138,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.02561,"6.0-6.1":0,"7.0-7.1":0.00831,"8.1-8.4":0,"9.0-9.2":0.00138,"9.3":0.03185,"10.0-10.2":0.00069,"10.3":0.03738,"11.0-11.2":0.00346,"11.3-11.4":0.00692,"12.0-12.1":0.01246,"12.2-12.5":0.39392,"13.0-13.1":0.02008,"13.2":0.00138,"13.3":0.03185,"13.4-13.7":0.11492,"14.0-14.4":0.34961,"14.5-14.8":1.29321,"15.0-15.1":1.11252,"15.2-15.3":3.43863,"15.4":0.03254},P:{"4":0.05252,"5.0-5.4":0.0102,"6.2-6.4":0.01085,"7.2-7.4":0.19957,"8.2":0.02073,"9.2":0.02101,"10.1":0.11002,"11.1-11.2":0.08403,"12.0":0.06302,"13.0":0.09453,"14.0":0.08403,"15.0":0.10504,"16.0":1.10287},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00412,"4.2-4.3":0.00206,"4.4":0,"4.4.3-4.4.4":0.03709},A:{"9":0.00918,"11":0.1515,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.26504},Q:{"10.4":0},O:{"0":0.01623},H:{"0":0.10754},L:{"0":43.02314},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00431,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.0388,"53":0,"54":0,"55":0.00431,"56":0,"57":0.00431,"58":0,"59":0,"60":0,"61":0.00431,"62":0.00431,"63":0.00431,"64":0,"65":0,"66":0.00431,"67":0,"68":0.00862,"69":0,"70":0,"71":0,"72":0,"73":0.02156,"74":0,"75":0,"76":0,"77":0,"78":0.01293,"79":0,"80":0,"81":0,"82":0,"83":0.00862,"84":0.00431,"85":0,"86":0.00431,"87":0,"88":0.00862,"89":0,"90":0.0388,"91":0.04311,"92":0,"93":0.00431,"94":0,"95":0.00431,"96":0.00431,"97":0.00431,"98":0.00431,"99":0.01724,"100":0.04311,"101":0.00862,"102":0.03018,"103":0.6251,"104":0.14657,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0.00862,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.01293,"37":0,"38":0.05173,"39":0,"40":0,"41":0.00431,"42":0,"43":0.00431,"44":0,"45":0,"46":0,"47":0.00431,"48":0,"49":0.05604,"50":0,"51":0.00431,"52":0.00431,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0.01293,"63":0.00431,"64":0,"65":0.00431,"66":0.00431,"67":0,"68":0,"69":0.00431,"70":0.00862,"71":0.00862,"72":0.00431,"73":0.00862,"74":0.00862,"75":0.00431,"76":0.00431,"77":0.00431,"78":0.00431,"79":0.02156,"80":0.04311,"81":0.01293,"83":0.00431,"84":0.00431,"85":0.01293,"86":0.30608,"87":0.02587,"88":0.01293,"89":0.02156,"90":0.01293,"91":0.04311,"92":0.01724,"93":0.03018,"94":0.02587,"95":0.01724,"96":0.0388,"97":0.02587,"98":0.06898,"99":0.02587,"100":0.0388,"101":0.04311,"102":0.08191,"103":3.31947,"104":9.09621,"105":0.02587,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00431,"64":0.00431,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0.00431,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00431,"86":0.00431,"87":0.00431,"88":0.01293,"89":1.00446,"90":0.05173,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0.00431,"15":0,"16":0.00431,"17":0.00431,"18":0.00862,"79":0,"80":0,"81":0,"83":0,"84":0.00431,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00431,"93":0,"94":0,"95":0.00431,"96":0,"97":0,"98":0,"99":0,"100":0.00431,"101":0.01724,"102":0.00431,"103":0.29315,"104":0.77598,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00431,"14":0.01724,"15":0.00431,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00431,"13.1":0.03018,"14.1":0.04311,"15.1":0.01724,"15.2-15.3":0.00862,"15.4":0.02156,"15.5":0.09484,"15.6":0.15951,"16.0":0.00431},G:{"8":0,"3.2":0.00113,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.03045,"6.0-6.1":0,"7.0-7.1":0.01805,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.02481,"10.0-10.2":0.00113,"10.3":0.03948,"11.0-11.2":0.01241,"11.3-11.4":0.00564,"12.0-12.1":0.01128,"12.2-12.5":0.4974,"13.0-13.1":0.00338,"13.2":0.00113,"13.3":0.02594,"13.4-13.7":0.13309,"14.0-14.4":0.24701,"14.5-14.8":0.67448,"15.0-15.1":0.09925,"15.2-15.3":0.15791,"15.4":0.36318,"15.5":2.40693,"15.6":6.45383,"16.0":0.06542},P:{"4":0.08187,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.21492,"8.2":0,"9.2":0.02047,"10.1":0,"11.1-11.2":0.04094,"12.0":0.0307,"13.0":0.04094,"14.0":0.05117,"15.0":0.02047,"16.0":0.08187,"17.0":0.63452,"18.0":0.71639},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01984,"4.2-4.3":0.03967,"4.4":0,"4.4.3-4.4.4":0.24466},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.03018,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":67.42101},S:{"2.5":0},R:{_:"0"},M:{"0":0.28445},Q:{"10.4":0},O:{"0":0.01138},H:{"0":0.14004}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UZ.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UZ.js index 587e47c3603..31c09323dd4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UZ.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/UZ.js @@ -1 +1 @@ -module.exports={C:{"30":0.00613,"52":0.08891,"55":0.02759,"57":0.00307,"72":0.00307,"73":0.00613,"78":0.0092,"80":0.00307,"81":0.00613,"84":0.00307,"89":0.00307,"91":0.03986,"92":0.00307,"93":0.00613,"94":0.0092,"95":0.0092,"96":0.325,"97":0.54575,"98":0.0092,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 56 58 59 60 61 62 63 64 65 66 67 68 69 70 71 74 75 76 77 79 82 83 85 86 87 88 90 99 3.5 3.6"},D:{"34":0.00307,"35":0.00307,"38":0.00613,"49":0.10424,"56":0.01533,"63":0.00307,"64":0.00613,"66":0.03373,"67":0.0092,"68":0.00613,"70":0.00613,"71":0.0184,"72":0.01533,"73":0.0184,"74":0.02453,"75":0.0092,"76":0.00307,"78":0.00613,"79":0.04906,"80":0.04292,"81":0.02146,"83":0.03679,"84":0.05212,"85":0.05519,"86":0.12571,"87":0.05519,"88":0.02453,"89":0.07665,"90":0.02453,"91":0.03679,"92":0.03679,"93":0.08278,"94":0.05825,"95":0.03679,"96":0.42617,"97":5.6813,"98":13.86445,"99":0.0092,"100":0.01533,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 57 58 59 60 61 62 65 69 77 101"},F:{"28":0.00307,"36":0.00307,"42":0.00307,"51":0.00613,"53":0.03986,"54":0.00613,"55":0.01226,"56":0.00613,"57":0.02453,"58":0.02146,"60":0.01533,"62":0.01533,"63":0.00613,"64":0.03986,"65":0.0092,"66":0.01226,"67":0.01226,"68":0.0184,"70":0.0092,"71":0.0092,"72":0.0184,"73":0.0092,"74":0.00613,"75":0.0092,"76":0.0092,"77":0.04292,"78":0.02146,"79":0.06745,"80":0.05212,"81":0.0184,"82":0.04599,"83":0.03986,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 43 44 45 46 47 48 49 50 52 69 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01226,"15":0.00613,"16":0.00613,"17":0.00307,"18":0.04906,"83":0.00613,"84":0.03373,"85":0.00613,"86":0.00307,"87":0.00307,"88":0.00613,"89":0.01226,"90":0.0092,"91":0.0092,"92":0.0092,"93":0.00613,"94":0.0092,"95":0.01226,"96":0.02759,"97":0.25448,"98":0.84008,_:"13 14 79 80 81"},E:{"4":0,"13":0.01226,"14":0.03066,"15":0.0184,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.99952,"11.1":0.00307,"12.1":0.00613,"13.1":0.05519,"14.1":0.08278,"15.1":0.05825,"15.2-15.3":0.08278},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00093,"5.0-5.1":0.00232,"6.0-6.1":0.00139,"7.0-7.1":0.0251,"8.1-8.4":0,"9.0-9.2":0.00604,"9.3":0.03346,"10.0-10.2":0.00372,"10.3":0.07716,"11.0-11.2":0.01534,"11.3-11.4":0.01441,"12.0-12.1":0.01069,"12.2-12.5":0.46154,"13.0-13.1":0.02649,"13.2":0.0093,"13.3":0.02882,"13.4-13.7":0.0911,"14.0-14.4":0.38392,"14.5-14.8":0.79386,"15.0-15.1":0.80409,"15.2-15.3":1.83824,"15.4":0.0172},P:{"4":0.90873,"5.0-5.4":0.04039,"6.2-6.4":0.13126,"7.2-7.4":0.55534,"8.2":0.02019,"9.2":0.12116,"10.1":0.05049,"11.1-11.2":0.3332,"12.0":0.10097,"13.0":0.38369,"14.0":0.47456,"15.0":0.36349,"16.0":2.53436},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00155,"4.2-4.3":0.00492,"4.4":0,"4.4.3-4.4.4":0.0282},A:{"9":0.00613,"11":0.18396,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.0624},Q:{"10.4":0},O:{"0":3.31397},H:{"0":0.46602},L:{"0":48.80021},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01385,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0.00693,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.0277,"92":0,"93":0.00346,"94":0.00346,"95":0.01385,"96":0.00346,"97":0.00346,"98":0.00346,"99":0.00693,"100":0.00693,"101":0.00693,"102":0.01732,"103":0.25626,"104":0.04848,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00346,"35":0.00346,"36":0,"37":0,"38":0,"39":0,"40":0.00346,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.02424,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00346,"57":0.00346,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00346,"64":0.00346,"65":0,"66":0.01385,"67":0.00346,"68":0.00346,"69":0,"70":0,"71":0.00346,"72":0,"73":0,"74":0.02078,"75":0,"76":0,"77":0,"78":0.00346,"79":0.0277,"80":0.01385,"81":0.02424,"83":0.01732,"84":0.02424,"85":0.0277,"86":0.04502,"87":0.03809,"88":0.01385,"89":0.04156,"90":0.02424,"91":0.01385,"92":0.01039,"93":0.00693,"94":0.01039,"95":0.01039,"96":0.0277,"97":0.01732,"98":0.02424,"99":0.02078,"100":0.03463,"101":0.03809,"102":0.13506,"103":2.06395,"104":5.24298,"105":0.01385,"106":0.00693,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.02078,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00346,"37":0,"38":0,"39":0,"40":0.01039,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0.00346,"51":0,"52":0,"53":0.01732,"54":0,"55":0,"56":0,"57":0.00346,"58":0.00346,"60":0.00346,"62":0.00346,"63":0.00346,"64":0.00346,"65":0.00346,"66":0.00346,"67":0.00346,"68":0.00693,"69":0,"70":0.00346,"71":0.00693,"72":0.00693,"73":0.00346,"74":0.00346,"75":0.00346,"76":0.00346,"77":0.00346,"78":0.00346,"79":0.01385,"80":0.00693,"81":0.00693,"82":0.00693,"83":0.00346,"84":0.00693,"85":0.00693,"86":0.00346,"87":0.01039,"88":0.01385,"89":0.04156,"90":0.00693,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.01385,"79":0,"80":0,"81":0,"83":0.00346,"84":0.00693,"85":0.00346,"86":0,"87":0.00346,"88":0.00346,"89":0.00346,"90":0.00693,"91":0.00346,"92":0.04156,"93":0.00346,"94":0.00346,"95":0.00346,"96":0.00346,"97":0.00346,"98":0.00346,"99":0.00346,"100":0.00693,"101":0.01039,"102":0.01385,"103":0.187,"104":0.38786,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01039,"14":0.01385,"15":0.00693,_:"0","3.1":0,"3.2":0,"5.1":0.25973,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00346,"13.1":0.01385,"14.1":0.02424,"15.1":0.01039,"15.2-15.3":0.00693,"15.4":0.02424,"15.5":0.0658,"15.6":0.0935,"16.0":0.00346},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00093,"5.0-5.1":0.00093,"6.0-6.1":0,"7.0-7.1":0.03055,"8.1-8.4":0,"9.0-9.2":0.01018,"9.3":0.0611,"10.0-10.2":0,"10.3":0.0574,"11.0-11.2":0.0287,"11.3-11.4":0.01111,"12.0-12.1":0.01018,"12.2-12.5":0.70546,"13.0-13.1":0.03148,"13.2":0.01944,"13.3":0.02777,"13.4-13.7":0.13424,"14.0-14.4":0.37217,"14.5-14.8":0.62769,"15.0-15.1":0.29255,"15.2-15.3":0.5277,"15.4":0.52493,"15.5":2.06637,"15.6":3.5782,"16.0":0.12591},P:{"4":0.98986,"5.0-5.4":0.0303,"6.2-6.4":0.10101,"7.2-7.4":0.59594,"8.2":0.0101,"9.2":0.09091,"10.1":0.0202,"11.1-11.2":0.18181,"12.0":0.0606,"13.0":0.19191,"14.0":0.24241,"15.0":0.13131,"16.0":0.45453,"17.0":1.5959,"18.0":1.23227},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01469,"4.2-4.3":0.01921,"4.4":0,"4.4.3-4.4.4":0.14688},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.07965,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":61.55471},S:{"2.5":0.00654},R:{_:"0"},M:{"0":0.11767},Q:{"10.4":0},O:{"0":4.24251},H:{"0":0.30944}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VA.js index e351753e2d1..fb14ed9c398 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VA.js @@ -1 +1 @@ -module.exports={C:{"39":0.03884,"70":0.01942,"84":0.01942,"90":0.93216,"91":0.21362,"93":0.04855,"95":0.03884,"96":4.90355,"97":6.42802,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 81 82 83 85 86 87 88 89 92 94 98 99 3.5 3.6"},D:{"67":0.43695,"92":0.01942,"93":0.7768,"95":0.17478,"96":0.14565,"97":18.49755,"98":42.15111,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 88 89 90 91 94 99 100 101"},F:{_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.0971,"18":3.05865,"97":3.1072,"98":11.01114,_:"12 13 14 15 16 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96"},E:{"4":0,"14":0.18449,"15":0.16507,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.33014,"12.1":0.22333,"13.1":0.12623,"14.1":0.17478,"15.1":0.24275,"15.2-15.3":1.2623},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.0042,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0.0042,"12.2-12.5":0.57132,"13.0-13.1":0,"13.2":0,"13.3":0.0042,"13.4-13.7":0,"14.0-14.4":0.0169,"14.5-14.8":0.08042,"15.0-15.1":0.05501,"15.2-15.3":0.39359,"15.4":0.0042},P:{"4":0.35753,"5.0-5.4":0.08172,"6.2-6.4":0.04086,"7.2-7.4":0.2043,"8.2":0.04086,"9.2":0.23495,"10.1":0.07459,"11.1-11.2":0.4086,"12.0":0.07151,"13.0":0.09194,"14.0":0.30645,"15.0":0.26559,"16.0":0.4397},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.78651,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.10602,_:"11"},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0.00827},L:{"0":1.43435},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.06775,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.01936,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0.00968,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.11615,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.13551,"103":5.9913,"104":0.69689,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00968,"57":0.00968,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0.01936,"67":0.43556,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00968,"89":0,"90":0,"91":0,"92":0,"93":0.72593,"94":0,"95":0.1839,"96":0.01936,"97":0.01936,"98":0.01936,"99":0,"100":0,"101":0.00968,"102":0.24198,"103":18.28363,"104":41.39708,"105":0.01936,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.03872,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0.05807,"18":3.52316,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00968,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.0484,"102":0.06775,"103":3.59091,"104":12.55366,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0.07743,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.20326,"12.1":0.01936,"13.1":0.10647,"14.1":0.19358,"15.1":0,"15.2-15.3":0.02904,"15.4":0.00968,"15.5":0.30005,"15.6":1.57768,"16.0":0.00968},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0.01315,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0.94489,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0.02663,"14.5-14.8":0.03978,"15.0-15.1":0,"15.2-15.3":0.05326,"15.4":0.2262,"15.5":1.19805,"15.6":0.78544,"16.0":0},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0.01018,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0,"15.0":0,"16.0":0,"17.0":0.01018,"18.0":0.08141},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.27101,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":5.36824},S:{"2.5":0},R:{_:"0"},M:{"0":0.00835},Q:{"10.4":0},O:{"0":0},H:{"0":0}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VC.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VC.js index 11f3b90868a..650cdc5d9d7 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VC.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VC.js @@ -1 +1 @@ -module.exports={C:{"52":0.00783,"78":0.00783,"80":0.00391,"91":0.00391,"94":0.01957,"95":0.02348,"96":0.91956,"97":0.80217,"98":0.03522,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 81 82 83 84 85 86 87 88 89 90 92 93 99 3.5 3.6"},D:{"23":0.00783,"48":0.01565,"49":0.01565,"61":0.02739,"68":0.00391,"69":0.01957,"70":0.00783,"74":0.00391,"75":0.00783,"76":0.38347,"78":0.01957,"79":0.01957,"80":0.00783,"83":0.03522,"86":0.00783,"87":0.24652,"88":0.01957,"89":0.00783,"90":0.03522,"91":0.00391,"92":0.01957,"93":0.08217,"94":0.08609,"95":0.05478,"96":0.61825,"97":6.60906,"98":14.59158,"99":0.04696,"100":0.00391,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 50 51 52 53 54 55 56 57 58 59 60 62 63 64 65 66 67 71 72 73 77 81 84 85 101"},F:{"28":0.02348,"82":0.01565,"83":0.22695,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"89":0.00391,"94":0.00391,"96":0.06261,"97":0.82173,"98":3.95213,_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 90 91 92 93 95"},E:{"4":0,"8":0.07826,"13":0.01174,"14":0.21913,"15":0.08609,_:"0 5 6 7 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1 11.1 15.4","9.1":0.01565,"12.1":0.02739,"13.1":0.19565,"14.1":0.23869,"15.1":0.27,"15.2-15.3":1.45172},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00753,"7.0-7.1":0.04216,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03011,"10.0-10.2":0,"10.3":0.87329,"11.0-11.2":0.03312,"11.3-11.4":0.00301,"12.0-12.1":0.00753,"12.2-12.5":0.91545,"13.0-13.1":0.00151,"13.2":0,"13.3":0.00452,"13.4-13.7":0.14605,"14.0-14.4":0.23639,"14.5-14.8":3.64372,"15.0-15.1":3.21009,"15.2-15.3":5.88265,"15.4":0.01355},P:{"4":0.14291,"5.0-5.4":0.01121,"6.2-6.4":0.01012,"7.2-7.4":0.21986,"8.2":0.03083,"9.2":0.04397,"10.1":0.03037,"11.1-11.2":0.14291,"12.0":0.01099,"13.0":0.09894,"14.0":0.03298,"15.0":0.06596,"16.0":3.44082},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02164,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.05139},A:{"10":0.0313,"11":0.03522,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.09129},Q:{"10.4":0},O:{"0":0.03043},H:{"0":0.08067},L:{"0":37.69295},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00457,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00457,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00457,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00914,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.09597,"103":0.62152,"104":0.14624,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.00457,"40":0.00914,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00457,"50":0.00914,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0.01371,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00457,"69":0,"70":0.00457,"71":0,"72":0,"73":0,"74":0.00457,"75":0,"76":0.01828,"77":0,"78":0,"79":0.06398,"80":0.03199,"81":0.01828,"83":0.10511,"84":0.00914,"85":0.00457,"86":0.00457,"87":0.00457,"88":0.01828,"89":0.00914,"90":0.02285,"91":0.00914,"92":0.00457,"93":0.09597,"94":0.00457,"95":0.05941,"96":0.00914,"97":0.00914,"98":0.01371,"99":0.08226,"100":0.05484,"101":0.02285,"102":0.06855,"103":2.52264,"104":5.92729,"105":0.05941,"106":0.00457,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00457,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.26506,"90":0.03199,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00457,"79":0,"80":0.00457,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00457,"93":0.10968,"94":0,"95":0,"96":0.05027,"97":0,"98":0,"99":0.00457,"100":0,"101":0.02285,"102":0.13253,"103":0.83174,"104":1.50353,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0.02285,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.08226,"15":0.01371,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00914,"13.1":0.03199,"14.1":0.10054,"15.1":0.00457,"15.2-15.3":0.00457,"15.4":0.33361,"15.5":0.16909,"15.6":0.48899,"16.0":0.00457},G:{"8":0.00766,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.36444,"8.1-8.4":0.03216,"9.0-9.2":0,"9.3":0.05513,"10.0-10.2":0,"10.3":0.09034,"11.0-11.2":0.01072,"11.3-11.4":0.02756,"12.0-12.1":0.00306,"12.2-12.5":1.46542,"13.0-13.1":0.00919,"13.2":0.00306,"13.3":0.01072,"13.4-13.7":0.02144,"14.0-14.4":0.11944,"14.5-14.8":0.50838,"15.0-15.1":0.41038,"15.2-15.3":0.26644,"15.4":0.60791,"15.5":3.159,"15.6":8.01617,"16.0":0.11944},P:{"4":0.60378,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.16574,"8.2":0,"9.2":0.01184,"10.1":0,"11.1-11.2":0.09471,"12.0":0,"13.0":0.41436,"14.0":0.05919,"15.0":0.02368,"16.0":0.08287,"17.0":1.98892,"18.0":2.07179},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01438,"4.2-4.3":0.04313,"4.4":0,"4.4.3-4.4.4":1.45209},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.01828,"10":0,"11":0.01371,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":58.50386},S:{"2.5":0},R:{_:"0"},M:{"0":0.03258},Q:{"10.4":0},O:{"0":0.07059},H:{"0":1.01273}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VE.js index bb70ceb134a..aa2ccc1bda2 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VE.js @@ -1 +1 @@ -module.exports={C:{"23":0.01095,"27":0.21353,"28":0.01095,"40":0.00548,"43":0.01095,"45":0.00548,"47":0.01643,"48":0.00548,"52":0.44895,"56":0.01095,"60":0.0219,"62":0.01095,"64":0.01095,"65":0.01643,"66":0.01095,"67":0.01095,"68":0.02738,"69":0.01643,"70":0.01095,"71":0.01095,"72":0.02738,"78":0.07665,"79":0.01095,"80":0.01095,"81":0.00548,"83":0.00548,"84":0.01095,"87":0.00548,"88":0.0219,"89":0.0219,"90":0.01643,"91":0.10403,"92":0.01643,"93":0.01643,"94":0.02738,"95":0.03833,"96":1.23188,"97":2.04218,"98":0.0219,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 29 30 31 32 33 34 35 36 37 38 39 41 42 44 46 49 50 51 53 54 55 57 58 59 61 63 73 74 75 76 77 82 85 86 99 3.5 3.6"},D:{"34":0.00548,"42":0.00548,"47":0.01643,"49":0.5037,"51":0.00548,"53":0.00548,"55":0.01095,"58":0.01643,"63":0.03285,"64":0.01095,"65":0.01643,"66":0.01095,"67":0.06023,"68":0.01095,"69":0.03833,"70":0.02738,"71":0.03285,"72":0.03285,"73":0.01643,"74":0.02738,"75":0.05475,"76":0.04928,"77":0.03833,"78":0.01643,"79":0.0657,"80":0.0438,"81":0.0438,"83":0.06023,"84":0.04928,"85":0.06023,"86":0.08213,"87":0.14235,"88":0.1095,"89":0.09308,"90":0.08213,"91":0.14235,"92":0.1533,"93":0.13688,"94":0.1314,"95":0.10403,"96":1.17713,"97":9.89333,"98":23.2359,"99":0.01095,"100":0.01643,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 43 44 45 46 48 50 52 54 56 57 59 60 61 62 101"},F:{"53":0.00548,"57":0.01643,"68":0.00548,"78":0.01095,"82":0.41063,"83":1.65345,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 54 55 56 58 60 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00548,"18":0.01095,"84":0.00548,"85":0.01095,"92":0.01643,"95":0.00548,"96":0.01643,"97":0.36135,"98":1.37423,_:"13 14 15 16 17 79 80 81 83 86 87 88 89 90 91 93 94"},E:{"4":0,"13":0.01095,"14":0.03285,"15":0.01643,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.0219,"11.1":0.00548,"12.1":0.01095,"13.1":0.03833,"14.1":0.07118,"15.1":0.03833,"15.2-15.3":0.07665},G:{"8":0.00186,"3.2":0.00041,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00557,"6.0-6.1":0.00392,"7.0-7.1":0.01383,"8.1-8.4":0.00186,"9.0-9.2":0.00083,"9.3":0.06131,"10.0-10.2":0.00206,"10.3":0.06007,"11.0-11.2":0.00537,"11.3-11.4":0.00495,"12.0-12.1":0.00826,"12.2-12.5":0.21427,"13.0-13.1":0.01177,"13.2":0.00351,"13.3":0.02787,"13.4-13.7":0.03736,"14.0-14.4":0.13356,"14.5-14.8":0.37012,"15.0-15.1":0.30984,"15.2-15.3":0.77945,"15.4":0.00537},P:{"4":0.12107,"5.0-5.4":0.04039,"6.2-6.4":0.06112,"7.2-7.4":0.11007,"8.2":0.02019,"9.2":0.11205,"10.1":0.05049,"11.1-11.2":0.03302,"12.0":0.01101,"13.0":0.03302,"14.0":0.06604,"15.0":0.08805,"16.0":0.75947},I:{"0":0,"3":0,"4":0.00026,"2.1":0,"2.2":0,"2.3":0.0001,"4.1":0.00209,"4.2-4.3":0.00382,"4.4":0,"4.4.3-4.4.4":0.02539},A:{"9":0.00548,"11":0.1095,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.01358},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.1448},Q:{"10.4":0},O:{"0":0.04073},H:{"0":0.43268},L:{"0":42.58945},S:{"2.5":0.00453}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0.00579,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0.00579,"24":0,"25":0,"26":0,"27":0.1448,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0.00579,"44":0,"45":0.00579,"46":0,"47":0.00579,"48":0,"49":0,"50":0,"51":0,"52":0.27222,"53":0,"54":0,"55":0.00579,"56":0.00579,"57":0.00579,"58":0,"59":0,"60":0.01158,"61":0.01158,"62":0.00579,"63":0.00579,"64":0.00579,"65":0.00579,"66":0.00579,"67":0.01158,"68":0.02317,"69":0.00579,"70":0.00579,"71":0,"72":0.01158,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.02896,"79":0,"80":0,"81":0.01158,"82":0,"83":0,"84":0.00579,"85":0,"86":0,"87":0,"88":0.01158,"89":0.00579,"90":0.01158,"91":0.05213,"92":0,"93":0.01158,"94":0.00579,"95":0.01158,"96":0.00579,"97":0.01158,"98":0.00579,"99":0.0753,"100":0.01738,"101":0.01738,"102":0.05792,"103":1.65072,"104":0.3649,"105":0.00579,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0.00579,"43":0,"44":0,"45":0,"46":0,"47":0.00579,"48":0,"49":0.2143,"50":0.00579,"51":0.01158,"52":0,"53":0,"54":0,"55":0.00579,"56":0.00579,"57":0,"58":0.00579,"59":0,"60":0,"61":0,"62":0,"63":0.01158,"64":0.01158,"65":0.01158,"66":0.00579,"67":0.01158,"68":0.01158,"69":0.02317,"70":0.01738,"71":0.00579,"72":0.00579,"73":0.00579,"74":0.01158,"75":0.02317,"76":0.02896,"77":0.01158,"78":0.01158,"79":0.03475,"80":0.01738,"81":0.01738,"83":0.04054,"84":0.02317,"85":0.01738,"86":0.04054,"87":0.05792,"88":0.05792,"89":0.03475,"90":0.03475,"91":0.0753,"92":0.05213,"93":0.04634,"94":0.04634,"95":0.03475,"96":0.09267,"97":0.19114,"98":0.09846,"99":0.10426,"100":0.17376,"101":0.15059,"102":0.2896,"103":4.75523,"104":13.89501,"105":0.05213,"106":0.00579,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0.00579,"54":0.00579,"55":0,"56":0,"57":0.00579,"58":0,"60":0,"62":0,"63":0.02896,"64":0.02317,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00579,"80":0,"81":0.00579,"82":0.00579,"83":0.00579,"84":0.01738,"85":0.04634,"86":0.00579,"87":0.00579,"88":0.01738,"89":1.04256,"90":0.10426,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00579,"13":0,"14":0,"15":0.00579,"16":0,"17":0,"18":0.00579,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00579,"90":0.00579,"91":0,"92":0.00579,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.01158,"100":0,"101":0.01158,"102":0.00579,"103":0.32435,"104":0.92093,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00579,"14":0.01158,"15":0.00579,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00579,"12.1":0,"13.1":0.01738,"14.1":0.03475,"15.1":0.00579,"15.2-15.3":0.00579,"15.4":0.01158,"15.5":0.04054,"15.6":0.0695,"16.0":0},G:{"8":0.00037,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00074,"5.0-5.1":0.0037,"6.0-6.1":0.00148,"7.0-7.1":0.01368,"8.1-8.4":0.00185,"9.0-9.2":0.00591,"9.3":0.07837,"10.0-10.2":0.00074,"10.3":0.11312,"11.0-11.2":0.00628,"11.3-11.4":0.0085,"12.0-12.1":0.00628,"12.2-12.5":0.28649,"13.0-13.1":0.0159,"13.2":0.01072,"13.3":0.01627,"13.4-13.7":0.04473,"14.0-14.4":0.10979,"14.5-14.8":0.20627,"15.0-15.1":0.0573,"15.2-15.3":0.10646,"15.4":0.13936,"15.5":0.76262,"15.6":1.65833,"16.0":0.03882},P:{"4":0.11183,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.08133,"8.2":0,"9.2":0.01017,"10.1":0,"11.1-11.2":0.061,"12.0":0.02033,"13.0":0.0305,"14.0":0.02033,"15.0":0.0305,"16.0":0.07116,"17.0":0.40665,"18.0":0.30499},I:{"0":0,"3":0,"4":0.00542,"2.1":0,"2.2":0,"2.3":0,"4.1":0.03926,"4.2-4.3":0.06905,"4.4":0,"4.4.3-4.4.4":0.60656},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0.00579,"10":0,"11":0.04054,"5.5":0},J:{"7":0,"10":0.00842},N:{"10":0,"11":0},L:{"0":65.04192},S:{"2.5":0.00421},R:{_:"0"},M:{"0":0.20198},Q:{"10.4":0},O:{"0":0.03787},H:{"0":0.40237}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VG.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VG.js index a5c4e6d33af..2ce59217033 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VG.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VG.js @@ -1 +1 @@ -module.exports={C:{"78":0.0074,"80":0.0074,"89":0.01481,"95":0.01481,"96":0.45164,"97":1.76215,"98":0.03702,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 81 82 83 84 85 86 87 88 90 91 92 93 94 99 3.5 3.6"},D:{"62":0.01851,"65":0.02962,"74":0.0074,"75":0.01481,"76":0.0074,"79":0.01111,"80":0.03332,"84":0.13327,"86":0.05183,"87":0.02591,"90":0.02962,"91":0.17399,"92":0.0074,"93":0.03702,"94":0.02962,"95":0.56641,"96":0.62564,"97":5.87878,"98":11.30221,"100":0.0074,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 63 64 66 67 68 69 70 71 72 73 77 78 81 83 85 88 89 99 101"},F:{"82":0.12587,"83":0.31097,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.01111,"16":0.01111,"18":0.30727,"95":0.01481,"96":0.0074,"97":0.84035,"98":4.46091,_:"12 13 14 17 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94"},E:{"4":0,"13":0.0074,"14":0.09995,"15":0.11476,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 11.1","10.1":0.01481,"12.1":0.08885,"13.1":0.26284,"14.1":1.27719,"15.1":1.98797,"15.2-15.3":3.41695,"15.4":0.02591},G:{"8":0,"3.2":0,"4.0-4.1":0.00243,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0.16541,"9.3":0.12163,"10.0-10.2":0,"10.3":0.01216,"11.0-11.2":0.0146,"11.3-11.4":0.04135,"12.0-12.1":0.0073,"12.2-12.5":0.50353,"13.0-13.1":0.01216,"13.2":0,"13.3":0.14595,"13.4-13.7":0.17514,"14.0-14.4":0.63732,"14.5-14.8":3.69258,"15.0-15.1":3.06499,"15.2-15.3":15.63874,"15.4":0.08514},P:{"4":0.05127,"5.0-5.4":0.1009,"6.2-6.4":0.18286,"7.2-7.4":0.01025,"8.2":0.02052,"9.2":0.01025,"10.1":0.01018,"11.1-11.2":0.12304,"12.0":0.02048,"13.0":0.06152,"14.0":0.27684,"15.0":0.07177,"16.0":3.08627},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.0189},A:{"11":0.32578,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.15748},Q:{"10.4":0.0063},O:{"0":0.13858},H:{"0":0.01789},L:{"0":34.70058},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00333,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.08668,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.00333,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.01334,"101":0,"102":0.06001,"103":0.1567,"104":0.04668,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.01334,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00333,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0.02,"76":0.00333,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0.00333,"84":0,"85":0,"86":0,"87":0.01334,"88":0,"89":0,"90":0,"91":0.00333,"92":0,"93":0.05334,"94":0,"95":0,"96":0.00333,"97":0,"98":0.01,"99":0.02,"100":0.00333,"101":0.01,"102":0.04334,"103":1.24358,"104":3.39735,"105":0.00333,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00333,"89":0.14003,"90":0.00333,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00333,"79":0,"80":0,"81":0,"83":0.00333,"84":0.00333,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0.01334,"102":0.00333,"103":0.60679,"104":1.11356,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.01334,"15":0.01,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00333,"13.1":0.03001,"14.1":0.21338,"15.1":0.01,"15.2-15.3":0.08002,"15.4":0.09669,"15.5":1.04354,"15.6":1.30026,"16.0":0.00333},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.05309,"10.0-10.2":0,"10.3":0.13885,"11.0-11.2":0.00817,"11.3-11.4":0.04084,"12.0-12.1":0,"12.2-12.5":1.47021,"13.0-13.1":0,"13.2":0.00408,"13.3":0.00408,"13.4-13.7":0.1511,"14.0-14.4":0.61259,"14.5-14.8":2.36459,"15.0-15.1":0.2042,"15.2-15.3":0.50232,"15.4":0.64934,"15.5":10.58143,"15.6":23.60912,"16.0":0.44515},P:{"4":0.03115,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.12458,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.33222,"12.0":0,"13.0":0.10382,"14.0":0.38413,"15.0":0.05191,"16.0":0.13497,"17.0":1.2147,"18.0":1.86876},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.35005},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01334,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":42.02894},S:{"2.5":0},R:{_:"0"},M:{"0":0.10666},Q:{"10.4":0},O:{"0":0.00667},H:{"0":0.01262}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VI.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VI.js index 57307867a77..0f5375d2945 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VI.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VI.js @@ -1 +1 @@ -module.exports={C:{"67":0.00494,"78":0.00988,"91":0.08395,"92":0.01975,"93":0.01975,"94":0.18764,"95":0.00494,"96":0.99748,"97":1.3777,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 98 99 3.5 3.6"},D:{"23":0.00494,"49":0.00988,"72":0.01481,"75":0.02963,"76":0.09382,"78":0.01975,"79":0.01975,"80":0.0395,"83":0.02963,"85":0.01481,"87":0.01975,"89":0.00494,"90":0.06419,"91":0.05432,"92":0.38516,"93":0.02963,"94":0.25678,"95":0.06419,"96":0.68638,"97":7.82179,"98":15.17941,"99":0.00494,"100":0.00988,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 77 81 84 86 88 101"},F:{"82":0.0395,"83":0.24196,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00494,"16":0.00988,"18":0.01481,"85":0.00494,"90":0.00988,"92":0.01481,"94":0.01975,"95":0.03457,"96":0.17283,"97":2.11346,"98":7.47119,_:"12 13 14 17 79 80 81 83 84 86 87 88 89 91 93"},E:{"4":0,"11":0.00988,"12":0.01975,"13":0.07901,"14":0.4938,"15":0.16295,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1 9.1 10.1","11.1":0.01975,"12.1":0.05926,"13.1":0.69132,"14.1":2.41962,"15.1":1.06167,"15.2-15.3":2.64183,"15.4":0.00494},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.03496,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01883,"10.0-10.2":0,"10.3":0.11027,"11.0-11.2":0.01076,"11.3-11.4":0.06993,"12.0-12.1":0.00807,"12.2-12.5":0.80147,"13.0-13.1":0.04841,"13.2":0,"13.3":0.04303,"13.4-13.7":0.39805,"14.0-14.4":1.52763,"14.5-14.8":4.45919,"15.0-15.1":3.91053,"15.2-15.3":15.39468,"15.4":0.05379},P:{"4":0.03166,"5.0-5.4":0.04039,"6.2-6.4":0.06112,"7.2-7.4":0.12327,"8.2":0.02019,"9.2":0.05136,"10.1":0.03082,"11.1-11.2":0.02111,"12.0":0.06164,"13.0":0.05276,"14.0":0.13719,"15.0":0.03166,"16.0":3.3558},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.01013},A:{"10":0.00988,"11":0.21233,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.39998},Q:{"10.4":0},O:{"0":0.0405},H:{"0":0.05752},L:{"0":20.72961},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00535,"56":0.00535,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00535,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0.00535,"87":0,"88":0,"89":0,"90":0,"91":0.00535,"92":0,"93":0.00535,"94":0.05346,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.00535,"101":0.00535,"102":0.02673,"103":1.267,"104":0.24057,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.01604,"69":0,"70":0,"71":0,"72":0.01069,"73":0,"74":0,"75":0.02138,"76":0.06415,"77":0,"78":0,"79":0.03742,"80":0.00535,"81":0.00535,"83":0.02673,"84":0.00535,"85":0.00535,"86":0.00535,"87":0.03742,"88":0.01069,"89":0.01069,"90":0,"91":0.01069,"92":0.05881,"93":0.02138,"94":0,"95":0.02673,"96":0.00535,"97":0.01069,"98":0.03208,"99":0.09623,"100":0.04811,"101":0.05881,"102":0.34749,"103":3.98812,"104":8.83694,"105":0.01069,"106":0.00535,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0.00535,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.27799,"90":0.02138,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00535,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00535,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.01069,"100":0,"101":0.10692,"102":0.04277,"103":1.39531,"104":4.37837,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00535,"14":0.1978,"15":0.01604,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.01069,"10.1":0.00535,"11.1":0.00535,"12.1":0.01604,"13.1":0.17642,"14.1":0.51856,"15.1":0.20315,"15.2-15.3":0.00535,"15.4":0.22988,"15.5":0.75913,"15.6":2.05286,"16.0":0.01069},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.03309,"10.0-10.2":0,"10.3":0.16959,"11.0-11.2":0.00827,"11.3-11.4":0.12822,"12.0-12.1":0.00827,"12.2-12.5":0.26059,"13.0-13.1":0.00414,"13.2":0.05791,"13.3":0.02895,"13.4-13.7":0.05791,"14.0-14.4":0.6039,"14.5-14.8":2.37836,"15.0-15.1":0.45499,"15.2-15.3":0.5584,"15.4":1.17884,"15.5":10.51029,"15.6":24.62741,"16.0":0.28127},P:{"4":0.03145,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0.0629,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0.17822,"14.0":0.05242,"15.0":0,"16.0":0.08387,"17.0":1.33144,"18.0":1.24757},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.61995},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.1283,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":26.59732},S:{"2.5":0},R:{_:"0"},M:{"0":0.25132},Q:{"10.4":0},O:{"0":0.03723},H:{"0":0.04406}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VN.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VN.js index 0cb11cbb05b..ec3e170d804 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VN.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VN.js @@ -1 +1 @@ -module.exports={C:{"52":0.0464,"55":0.0029,"56":0.0058,"67":0.0058,"68":0.0058,"69":0.0029,"70":0.0058,"71":0.0174,"72":0.0029,"75":0.0029,"77":0.0087,"78":0.0203,"79":0.0116,"80":0.0116,"81":0.0145,"82":0.0174,"83":0.0116,"84":0.0232,"86":0.0058,"87":0.0174,"88":0.0087,"89":0.0058,"90":0.0058,"91":0.0145,"92":0.0116,"93":0.0145,"94":0.0145,"95":0.0058,"96":0.1276,"97":0.2668,"98":0.0029,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 57 58 59 60 61 62 63 64 65 66 73 74 76 85 99 3.5 3.6"},D:{"22":0.0029,"33":0.0116,"34":0.0058,"38":0.0203,"41":0.0058,"47":0.0029,"48":0.0116,"49":0.0319,"50":0.0174,"52":0.0029,"53":0.0116,"54":0.0058,"56":0.0087,"57":0.0319,"58":0.0029,"60":0.0029,"61":0.0029,"63":0.0058,"64":0.0029,"65":0.0058,"67":0.0058,"68":0.0145,"69":0.0145,"70":0.0145,"71":0.0145,"72":0.0174,"73":0.0116,"74":0.0174,"75":0.0203,"76":0.0174,"77":0.3045,"78":0.0174,"79":0.1015,"80":0.0464,"81":0.0464,"83":0.0841,"84":0.1276,"85":0.1421,"86":0.1595,"87":0.2117,"88":0.0319,"89":0.0551,"90":0.0377,"91":0.1305,"92":0.0551,"93":0.4582,"94":0.0319,"95":0.0406,"96":0.2233,"97":2.7463,"98":10.2776,"99":0.0174,"100":0.0058,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 35 36 37 39 40 42 43 44 45 46 51 55 59 62 66 101"},F:{"28":0.0087,"36":0.0116,"40":0.0087,"43":0.0116,"46":0.0232,"57":0.0029,"60":0.0029,"68":0.0087,"70":0.0087,"71":0.0087,"72":0.0058,"77":0.0522,"78":0.0377,"79":0.0464,"80":0.0377,"81":0.029,"82":0.0783,"83":0.3364,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 44 45 47 48 49 50 51 52 53 54 55 56 58 62 63 64 65 66 67 69 73 74 75 76 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.0058,"17":0.0058,"18":0.0319,"83":0.0058,"84":0.0145,"85":0.0116,"86":0.0087,"87":0.0058,"88":0.0029,"89":0.0058,"90":0.0087,"91":0.0029,"92":0.0058,"93":0.0029,"94":0.0058,"95":0.0058,"96":0.0203,"97":0.145,"98":1.0208,_:"12 13 14 15 79 80 81"},E:{"4":0,"13":0.0348,"14":0.0812,"15":0.0464,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.0667,"11.1":0.0087,"12.1":0.0116,"13.1":0.0696,"14.1":0.3045,"15.1":0.1334,"15.2-15.3":0.1885,"15.4":0.0029},G:{"8":0.00479,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00319,"5.0-5.1":0.00319,"6.0-6.1":0.00479,"7.0-7.1":0.02233,"8.1-8.4":0.01276,"9.0-9.2":0.02712,"9.3":0.13558,"10.0-10.2":0.03828,"10.3":0.22171,"11.0-11.2":0.09251,"11.3-11.4":0.13877,"12.0-12.1":0.10846,"12.2-12.5":1.8359,"13.0-13.1":0.06859,"13.2":0.03669,"13.3":0.20576,"13.4-13.7":0.74808,"14.0-14.4":1.70191,"14.5-14.8":4.24122,"15.0-15.1":1.81038,"15.2-15.3":4.45336,"15.4":0.0335},P:{"4":0.39037,"5.0-5.4":0.04039,"6.2-6.4":0.06112,"7.2-7.4":0.12327,"8.2":0.02019,"9.2":0.05136,"10.1":0.03082,"11.1-11.2":0.18491,"12.0":0.06164,"13.0":0.16437,"14.0":0.21573,"15.0":0.16437,"16.0":2.17786},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00109,"4.2-4.3":0.00255,"4.4":0,"4.4.3-4.4.4":0.02476},A:{"7":0.00313,"8":0.02189,"9":0.01563,"10":0.00625,"11":0.1532,_:"6 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.07101},Q:{"10.4":0},O:{"0":1.86046},H:{"0":0.3832},L:{"0":48.25849},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.01381,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00345,"69":0,"70":0.00345,"71":0,"72":0.00345,"73":0.00345,"74":0.00345,"75":0.00345,"76":0.00345,"77":0.00345,"78":0.0069,"79":0.0069,"80":0.0069,"81":0.0069,"82":0.00345,"83":0.00345,"84":0.0069,"85":0,"86":0,"87":0,"88":0.00345,"89":0,"90":0,"91":0.00345,"92":0,"93":0,"94":0,"95":0.00345,"96":0,"97":0.00345,"98":0,"99":0.00345,"100":0,"101":0.00345,"102":0.0069,"103":0.13808,"104":0.02416,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0.00345,"34":0,"35":0,"36":0,"37":0,"38":0.0069,"39":0,"40":0,"41":0.0069,"42":0.00345,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0.00345,"49":0.0069,"50":0,"51":0,"52":0,"53":0.00345,"54":0,"55":0,"56":0.00345,"57":0.0069,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0.00345,"64":0,"65":0,"66":0,"67":0,"68":0.01036,"69":0.0069,"70":0.01381,"71":0.0069,"72":0.01036,"73":0.00345,"74":0.01381,"75":0.01036,"76":0.01381,"77":0.01036,"78":0.01726,"79":0.03452,"80":0.02071,"81":0.02071,"83":0.04142,"84":0.06904,"85":0.07249,"86":0.08975,"87":0.08975,"88":0.01726,"89":0.02416,"90":0.02071,"91":0.01036,"92":0.01381,"93":0.00345,"94":0.0069,"95":0.0069,"96":0.03452,"97":0.01381,"98":0.01036,"99":0.01726,"100":0.04142,"101":0.03452,"102":0.1726,"103":1.73636,"104":4.32881,"105":0.01381,"106":0.00345,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00345,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00345,"37":0.01381,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00345,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.00345,"55":0.00345,"56":0,"57":0,"58":0,"60":0.00345,"62":0,"63":0.00345,"64":0.00345,"65":0,"66":0,"67":0,"68":0.00345,"69":0.00345,"70":0.00345,"71":0.00345,"72":0.00345,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00345,"86":0,"87":0,"88":0.00345,"89":0.12772,"90":0.01036,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00345,"13":0,"14":0.00345,"15":0.00345,"16":0.00345,"17":0.00345,"18":0.01036,"79":0,"80":0.00345,"81":0.00345,"83":0.00345,"84":0.0069,"85":0.0069,"86":0.0069,"87":0.00345,"88":0.00345,"89":0.00345,"90":0.00345,"91":0,"92":0.00345,"93":0,"94":0.00345,"95":0,"96":0.00345,"97":0,"98":0,"99":0.0069,"100":0.0069,"101":0.00345,"102":0.00345,"103":0.15534,"104":0.39698,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01036,"14":0.02071,"15":0.0069,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.05868,"10.1":0,"11.1":0,"12.1":0.00345,"13.1":0.02416,"14.1":0.05178,"15.1":0.01036,"15.2-15.3":0.01036,"15.4":0.02416,"15.5":0.07594,"15.6":0.10701,"16.0":0.00345},G:{"8":0.0046,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00921,"7.0-7.1":0.02072,"8.1-8.4":0.01151,"9.0-9.2":0.02072,"9.3":0.11051,"10.0-10.2":0.03223,"10.3":0.2003,"11.0-11.2":0.0967,"11.3-11.4":0.099,"12.0-12.1":0.09209,"12.2-12.5":1.78659,"13.0-13.1":0.05756,"13.2":0.03684,"13.3":0.17728,"13.4-13.7":0.73444,"14.0-14.4":1.58399,"14.5-14.8":3.06437,"15.0-15.1":0.73904,"15.2-15.3":1.0959,"15.4":1.2916,"15.5":4.46648,"15.6":7.11183,"16.0":0.16807},P:{"4":0.25777,"5.0-5.4":0.01031,"6.2-6.4":0,"7.2-7.4":0.08249,"8.2":0,"9.2":0.03093,"10.1":0.02062,"11.1-11.2":0.0928,"12.0":0.03093,"13.0":0.08249,"14.0":0.07217,"15.0":0.06186,"16.0":0.15466,"17.0":0.92796,"18.0":0.93827},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00362,"4.2-4.3":0.00723,"4.4":0,"4.4.3-4.4.4":0.08677},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0.00364,"9":0.00364,"10":0,"11":0.0583,"5.5":0},J:{"7":0,"10":0.00655},N:{"10":0,"11":0},L:{"0":57.84571},S:{"2.5":0},R:{_:"0"},M:{"0":0.09167},Q:{"10.4":0.00655},O:{"0":1.13935},H:{"0":0.32856}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VU.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VU.js index 217b5076e2a..6406ea0999a 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VU.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/VU.js @@ -1 +1 @@ -module.exports={C:{"34":0.0216,"38":0.05183,"52":0.12525,"56":0.00864,"72":0.04751,"82":0.00864,"84":0.01728,"88":0.00864,"89":0.00864,"90":0.02591,"91":0.11661,"95":0.00864,"96":2.0904,"97":2.11199,"98":0.0216,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 78 79 80 81 83 85 86 87 92 93 94 99 3.5 3.6"},D:{"31":0.01296,"37":0.05615,"39":0.13389,"53":0.01728,"55":0.01728,"59":0.06047,"63":0.01728,"67":0.00864,"69":0.11229,"77":0.01728,"79":0.09934,"81":1.00633,"83":0.03887,"84":0.05615,"86":0.01728,"87":0.16844,"88":0.59602,"90":0.01728,"91":0.02591,"92":0.02591,"94":0.02591,"95":0.05615,"96":1.93923,"97":7.62304,"98":11.4799,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 36 38 40 41 42 43 44 45 46 47 48 49 50 51 52 54 56 57 58 60 61 62 64 65 66 68 70 71 72 73 74 75 76 78 80 85 89 93 99 100 101"},F:{"82":0.19867,"83":0.26778,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.19867,"13":0.02591,"14":0.0216,"17":0.05183,"18":0.24618,"80":0.00864,"84":0.02591,"85":0.00864,"89":0.00864,"94":0.00864,"96":0.1598,"97":1.02792,"98":3.67979,_:"15 16 79 81 83 86 87 88 90 91 92 93 95"},E:{"4":0,"13":0.00864,"14":0.19867,_:"0 5 6 7 8 9 10 11 12 15 3.1 3.2 5.1 6.1 7.1 9.1 11.1 15.4","10.1":0.00864,"12.1":0.02591,"13.1":1.16613,"14.1":0.704,"15.1":0.42326,"15.2-15.3":0.49237},G:{"8":0.00265,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00265,"7.0-7.1":0.00265,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.01358,"10.0-10.2":0,"10.3":0.00265,"11.0-11.2":0.04374,"11.3-11.4":0.00265,"12.0-12.1":0.05997,"12.2-12.5":0.30317,"13.0-13.1":0.01624,"13.2":0.00265,"13.3":0.14479,"13.4-13.7":0.06262,"14.0-14.4":0.19913,"14.5-14.8":0.88234,"15.0-15.1":0.42046,"15.2-15.3":1.14741,"15.4":0.00265},P:{"4":0.06112,"5.0-5.4":0.04039,"6.2-6.4":0.06112,"7.2-7.4":0.74362,"8.2":0.02019,"9.2":0.11205,"10.1":0.05049,"11.1-11.2":0.03056,"12.0":0.02037,"13.0":0.06112,"14.0":0.20373,"15.0":0.24448,"16.0":1.71135},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00448,"4.4":0,"4.4.3-4.4.4":0.03529},A:{"11":1.16613,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.13066},Q:{"10.4":0},O:{"0":1.42593},H:{"0":0.04303},L:{"0":52.54926},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0.00425,"31":0,"32":0,"33":0,"34":0.00425,"35":0,"36":0,"37":0,"38":0.12322,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.05524,"69":0,"70":0,"71":0,"72":0.00425,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.02125,"92":0.0085,"93":0,"94":0,"95":0.00425,"96":0,"97":0,"98":0,"99":0.00425,"100":0.0085,"101":0.0085,"102":0.16571,"103":0.59911,"104":0.2082,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.00425,"40":0.02125,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0.01275,"59":0.01275,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.02125,"71":0,"72":0.02549,"73":0,"74":0.03824,"75":0,"76":0,"77":0,"78":0.00425,"79":0,"80":0,"81":0.14022,"83":0.0085,"84":0.04249,"85":0.00425,"86":0.00425,"87":0.01275,"88":0.08073,"89":0.00425,"90":0.0085,"91":0.01275,"92":0.00425,"93":0.00425,"94":0.00425,"95":0.0085,"96":0.02974,"97":0,"98":0.05099,"99":0.03824,"100":0.03399,"101":0.26344,"102":0.12747,"103":3.47993,"104":6.365,"105":0.0085,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.0085,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0.00425,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.02974,"90":0.017,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.03399,"13":0.00425,"14":0.0085,"15":0.01275,"16":0,"17":0.017,"18":0.05524,"79":0,"80":0,"81":0,"83":0,"84":0.00425,"85":0.05099,"86":0,"87":0,"88":0,"89":0.04249,"90":0.0085,"91":0,"92":0.00425,"93":0.00425,"94":0,"95":0,"96":0,"97":0,"98":0.00425,"99":0.00425,"100":0.01275,"101":0.02125,"102":0.04249,"103":0.52688,"104":0.99852,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.0085,"14":0.017,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00425,"12.1":0.01275,"13.1":0.11047,"14.1":0.03824,"15.1":0,"15.2-15.3":0.02974,"15.4":0.017,"15.5":0.18696,"15.6":0.23794,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.0062,"8.1-8.4":0,"9.0-9.2":0.0124,"9.3":0.0248,"10.0-10.2":0.00709,"10.3":0.16743,"11.0-11.2":0,"11.3-11.4":0.00354,"12.0-12.1":0.00354,"12.2-12.5":0.41371,"13.0-13.1":0.01329,"13.2":0.0186,"13.3":0.03189,"13.4-13.7":0.00974,"14.0-14.4":0.20198,"14.5-14.8":0.94789,"15.0-15.1":0.16389,"15.2-15.3":2.76749,"15.4":0.23299,"15.5":1.78682,"15.6":2.0455,"16.0":0.00354},P:{"4":0.12307,"5.0-5.4":0.03077,"6.2-6.4":0,"7.2-7.4":0.63587,"8.2":0.03077,"9.2":0,"10.1":0,"11.1-11.2":0.0923,"12.0":0,"13.0":0.04102,"14.0":0.27691,"15.0":0.14358,"16.0":0.20512,"17.0":1.83582,"18.0":0.27691},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.19047},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02125,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":68.92302},S:{"2.5":0},R:{_:"0"},M:{"0":0.16103},Q:{"10.4":0},O:{"0":1.18471},H:{"0":0.07078}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/WF.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/WF.js index 5201b41b4bb..50cd2226c42 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/WF.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/WF.js @@ -1 +1 @@ -module.exports={C:{"78":0.02568,"91":0.38841,"95":0.02568,"96":0.73509,"97":1.2519,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 92 93 94 98 99 3.5 3.6"},D:{"78":0.05136,"85":0.03852,"90":0.01284,"96":0.0642,"97":1.0593,"98":3.67866,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 83 84 86 87 88 89 91 92 93 94 95 99 100 101"},F:{"82":0.02568,"83":0.2568,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"16":0.02568,"97":0.2568,"98":0.68373,_:"12 13 14 15 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96"},E:{"4":0,"14":0.1284,"15":0.03852,_:"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 15.4","13.1":0.01284,"14.1":0.20544,"15.1":5.59182,"15.2-15.3":10.29126},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0.011,"11.0-11.2":0,"11.3-11.4":0.011,"12.0-12.1":0,"12.2-12.5":0.011,"13.0-13.1":0,"13.2":0.011,"13.3":0.0385,"13.4-13.7":0.08801,"14.0-14.4":0.11551,"14.5-14.8":0.66007,"15.0-15.1":10.73713,"15.2-15.3":43.16854,"15.4":0.15402},P:{"4":0.03166,"5.0-5.4":0.04039,"6.2-6.4":0.06112,"7.2-7.4":0.12327,"8.2":0.02019,"9.2":0.05136,"10.1":0.03082,"11.1-11.2":0.02111,"12.0":0.06164,"13.0":0.1316,"14.0":0.13719,"15.0":0.03166,"16.0":0.98196},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{"11":0.01284,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.08148},Q:{"10.4":0},O:{"0":0.05432},H:{"0":0},L:{"0":10.15761},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.01802,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.01802,"61":0.05855,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.13512,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.32429,"92":0.15314,"93":0,"94":0.2297,"95":0,"96":0,"97":0,"98":0.03603,"99":0,"100":0,"101":0,"102":0.13512,"103":1.42326,"104":0.24772,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0.01802,"87":0,"88":0,"89":0,"90":0,"91":0.01802,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0.03603,"101":0,"102":0,"103":4.15719,"104":6.68394,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.05855,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.01802,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0.41887,"104":0.3423,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0.07657,"15":0.01802,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.05855,"13.1":0.51346,"14.1":0.5675,"15.1":0.28375,"15.2-15.3":0.59002,"15.4":0.01802,"15.5":0.41887,"15.6":0.18917,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0.11639,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0.40737,"12.2-12.5":0.29098,"13.0-13.1":0,"13.2":0.11639,"13.3":0,"13.4-13.7":1.04976,"14.0-14.4":0.34917,"14.5-14.8":1.10796,"15.0-15.1":1.04976,"15.2-15.3":6.70371,"15.4":5.94492,"15.5":2.79788,"15.6":2.3905,"16.0":0.0582},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0.13274,"15.0":0,"16.0":0,"17.0":0.68414,"18.0":1.12321},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0.10252},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":51.90594},S:{"2.5":0},R:{_:"0"},M:{"0":0.42869},Q:{"10.4":0},O:{"0":0.30228},H:{"0":0.04163}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/WS.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/WS.js index 83245c7a36b..938393fccfb 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/WS.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/WS.js @@ -1 +1 @@ -module.exports={C:{"52":0.00906,"59":0.04983,"66":0.00906,"72":0.00906,"78":0.04983,"90":0.01812,"93":0.00906,"94":0.09966,"95":0.01812,"96":0.19026,"97":0.50736,"98":0.08154,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 60 61 62 63 64 65 67 68 69 70 71 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 91 92 99 3.5 3.6"},D:{"49":0.01359,"63":0.00453,"68":0.01359,"69":0.04077,"70":0.05436,"71":0.01812,"77":0.00906,"78":0.01812,"79":0.02265,"80":0.07701,"84":0.02265,"86":0.00453,"87":0.00453,"88":0.01359,"89":0.03624,"91":0.01812,"92":0.0453,"93":0.02265,"94":0.02718,"95":0.24462,"96":0.20385,"97":6.13362,"98":15.3567,"99":0.00906,"100":0.01812,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 72 73 74 75 76 81 83 85 90 101"},F:{"82":0.12231,"83":1.15062,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.15855,"13":0.09966,"14":0.00906,"15":0.04983,"16":0.04077,"17":0.06795,"18":0.42582,"84":0.01359,"85":0.08607,"89":0.04077,"92":0.03171,"94":0.13137,"95":0.03624,"96":0.18573,"97":1.80294,"98":5.33181,_:"79 80 81 83 86 87 88 90 91 93"},E:{"4":0,"13":0.02265,"14":0.13137,_:"0 5 6 7 8 9 10 11 12 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 12.1 15.4","11.1":0.00906,"13.1":0.11778,"14.1":0.1359,"15.1":0.05889,"15.2-15.3":0.0906},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00149,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.0544,"10.0-10.2":0,"10.3":0.0149,"11.0-11.2":0.08569,"11.3-11.4":0.19076,"12.0-12.1":0.06483,"12.2-12.5":0.86065,"13.0-13.1":0.04918,"13.2":0.22205,"13.3":0.18703,"13.4-13.7":0.25484,"14.0-14.4":1.42249,"14.5-14.8":2.12144,"15.0-15.1":0.81445,"15.2-15.3":1.10729,"15.4":0},P:{"4":0.16348,"5.0-5.4":0.01121,"6.2-6.4":0.04087,"7.2-7.4":0.63347,"8.2":0.16348,"9.2":0.20434,"10.1":0.08174,"11.1-11.2":0.36782,"12.0":0.05109,"13.0":0.34739,"14.0":0.52108,"15.0":0.49043,"16.0":1.71649},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00025,"4.2-4.3":0.00087,"4.4":0,"4.4.3-4.4.4":0.00435},A:{"10":0.00475,"11":0.09491,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.12583},Q:{"10.4":0.04377},O:{"0":0.61275},H:{"0":1.31562},L:{"0":51.41736},S:{"2.5":0.05471}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00393,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0.01179,"92":0,"93":0,"94":0,"95":0.00393,"96":0.01179,"97":0.00393,"98":0,"99":0,"100":0.00393,"101":0,"102":0.01966,"103":0.36558,"104":0.0511,"105":0.00393,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0.00786,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.01572,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0.00393,"68":0,"69":0.00393,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.00786,"77":0,"78":0,"79":0.00393,"80":0.00393,"81":0.00786,"83":0.00393,"84":0.00393,"85":0.00393,"86":0.00393,"87":0.02359,"88":0.01572,"89":0.00393,"90":0.01179,"91":0.03145,"92":0.00393,"93":0.08648,"94":0.02359,"95":0.06683,"96":0.00393,"97":0.00393,"98":0.00393,"99":0.02752,"100":0.00786,"101":0.03538,"102":0.03538,"103":2.27212,"104":5.07885,"105":0.03145,"106":0.01179,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00393,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00393,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.02752,"64":0.00393,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00393,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00786,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00393,"89":0.08255,"90":0.00393,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0.00786,"16":0,"17":0.00393,"18":0.03931,"79":0,"80":0,"81":0,"83":0,"84":0.01179,"85":0.00393,"86":0.00393,"87":0,"88":0,"89":0,"90":0.00393,"91":0,"92":0.00786,"93":0,"94":0.00786,"95":0.00393,"96":0.01179,"97":0.00786,"98":0.00393,"99":0.00393,"100":0.00786,"101":0.03145,"102":0.03145,"103":0.71544,"104":1.25399,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.01179,"14":0.02752,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00393,"12.1":0.06683,"13.1":0.00393,"14.1":0.01572,"15.1":0.00393,"15.2-15.3":0.00393,"15.4":0.01179,"15.5":0.12186,"15.6":0.114,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00866,"10.0-10.2":0.02597,"10.3":0.01979,"11.0-11.2":0.00495,"11.3-11.4":0.09895,"12.0-12.1":0.05195,"12.2-12.5":1.06614,"13.0-13.1":0.08781,"13.2":0.01361,"13.3":0.20037,"13.4-13.7":0.0705,"14.0-14.4":0.83856,"14.5-14.8":1.28629,"15.0-15.1":0.31539,"15.2-15.3":1.03398,"15.4":0.63449,"15.5":2.95353,"15.6":3.59791,"16.0":0.05689},P:{"4":0.38651,"5.0-5.4":0.01017,"6.2-6.4":0,"7.2-7.4":0.74251,"8.2":0,"9.2":0.06103,"10.1":0.01017,"11.1-11.2":0.17291,"12.0":0.13223,"13.0":0.30514,"14.0":0.2136,"15.0":0.19326,"16.0":1.04766,"17.0":0.96629,"18.0":0.4984},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0.00317,"4.4":0,"4.4.3-4.4.4":0.06973},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.07469,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":67.69124},S:{"2.5":0.00607},R:{_:"0"},M:{"0":0.05462},Q:{"10.4":0.05462},O:{"0":0.30952},H:{"0":1.05722}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/YE.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/YE.js index e241f354c4f..5479211a21e 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/YE.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/YE.js @@ -1 +1 @@ -module.exports={C:{"3":0.03086,"37":0.00193,"43":0.00579,"44":0.01157,"47":0.00386,"50":0.00386,"52":0.07523,"54":0.00386,"56":0.00579,"57":0.00772,"59":0.00386,"60":0.00965,"62":0.00386,"63":0.00193,"64":0.00193,"65":0.00193,"66":0.00193,"68":0.00386,"69":0.00579,"72":0.01543,"74":0.00193,"78":0.01929,"82":0.00386,"84":0.00193,"86":0.00386,"87":0.01543,"88":0.00193,"89":0.00965,"91":0.00772,"92":0.00579,"93":0.00386,"94":0.04051,"95":0.02122,"96":0.39737,"97":0.63271,"98":0.00772,_:"2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 39 40 41 42 45 46 48 49 51 53 55 58 61 67 70 71 73 75 76 77 79 80 81 83 85 90 99 3.5 3.6"},D:{"37":0.0135,"40":0.00386,"44":0.00579,"48":0.00193,"49":0.00965,"50":0.00386,"51":0.00386,"52":0.00386,"53":0.00772,"54":0.00193,"55":0.00965,"56":0.00772,"57":0.00386,"60":0.00386,"62":0.00386,"63":0.0135,"64":0.00772,"65":0.00386,"66":0.00965,"67":0.00772,"68":0.00386,"69":0.00965,"70":0.04437,"71":0.00965,"72":0.00386,"73":0.00579,"74":0.01929,"75":0.0135,"76":0.02701,"77":0.00772,"78":0.00579,"79":0.03472,"80":0.02122,"81":0.01929,"83":0.03665,"84":0.01736,"85":0.00965,"86":0.08681,"87":0.06173,"88":0.01736,"89":0.09066,"90":0.03279,"91":0.04437,"92":0.08681,"93":0.05208,"94":0.0463,"95":0.07137,"96":0.36844,"97":2.02545,"98":4.07212,"99":0.00386,"100":0.00579,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 39 41 42 43 45 46 47 58 59 61 101"},F:{"65":0.00193,"66":0.00193,"67":0.00579,"79":0.00193,"80":0.00386,"81":0.00193,"82":0.08102,"83":0.11381,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 68 69 70 71 72 73 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00193,"84":0.01157,"85":0.00386,"89":0.00772,"90":0.00579,"92":0.04244,"93":0.00193,"94":0.00965,"95":0.01736,"96":0.03858,"97":0.12924,"98":0.4591,_:"13 14 15 16 17 18 79 80 81 83 86 87 88 91"},E:{"4":0,"14":0.00386,_:"0 5 6 7 8 9 10 11 12 13 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 13.1 15.4","14.1":0.01157,"15.1":0.01929,"15.2-15.3":0.00772},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.01017,"5.0-5.1":0,"6.0-6.1":0.00116,"7.0-7.1":0.00727,"8.1-8.4":0,"9.0-9.2":0.00378,"9.3":0.00262,"10.0-10.2":0.00203,"10.3":0.00378,"11.0-11.2":0.00276,"11.3-11.4":0.00262,"12.0-12.1":0.01787,"12.2-12.5":0.18627,"13.0-13.1":0.00581,"13.2":0.01729,"13.3":0.01613,"13.4-13.7":0.04679,"14.0-14.4":0.42994,"14.5-14.8":0.22492,"15.0-15.1":0.21751,"15.2-15.3":0.25311,"15.4":0.00058},P:{"4":0.25168,"5.0-5.4":0.10067,"6.2-6.4":0.0302,"7.2-7.4":0.24162,"8.2":0.02019,"9.2":0.35236,"10.1":0.05034,"11.1-11.2":0.47316,"12.0":0.09061,"13.0":0.34229,"14.0":0.27182,"15.0":0.4329,"16.0":2.72825},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00439,"4.2-4.3":0.00644,"4.4":0,"4.4.3-4.4.4":0.04565},A:{"11":0.01157,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.29855},Q:{"10.4":0},O:{"0":4.36533},H:{"0":10.7942},L:{"0":62.46775},S:{"2.5":0.02421}}; +module.exports={C:{"2":0,"3":0.00916,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00229,"48":0,"49":0,"50":0.00229,"51":0,"52":0.00458,"53":0.00229,"54":0,"55":0.00229,"56":0,"57":0.00229,"58":0,"59":0,"60":0.00229,"61":0.00229,"62":0,"63":0,"64":0.00229,"65":0,"66":0,"67":0,"68":0.00229,"69":0,"70":0,"71":0,"72":0.00916,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00229,"80":0.00229,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00916,"88":0.00229,"89":0.01146,"90":0,"91":0.00229,"92":0,"93":0.00229,"94":0.00229,"95":0.00229,"96":0,"97":0.00458,"98":0.00229,"99":0.00229,"100":0.00687,"101":0.00687,"102":0.02291,"103":0.47195,"104":0.07331,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00229,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00229,"50":0,"51":0,"52":0,"53":0.00229,"54":0,"55":0.00229,"56":0.00229,"57":0,"58":0.00229,"59":0,"60":0,"61":0,"62":0.00229,"63":0.00458,"64":0.00229,"65":0,"66":0.00458,"67":0.00229,"68":0.00458,"69":0.00458,"70":0.00229,"71":0.00229,"72":0.00458,"73":0.00229,"74":0.00458,"75":0.00229,"76":0.00916,"77":0.00687,"78":0.00458,"79":0.00916,"80":0.00458,"81":0.00916,"83":0.00458,"84":0.00458,"85":0.00458,"86":0.01146,"87":0.01146,"88":0.00687,"89":0.01146,"90":0.00229,"91":0.00687,"92":0.00916,"93":0.00229,"94":0.01146,"95":0.01604,"96":0.01375,"97":0.01375,"98":0.01375,"99":0.01375,"100":0.01375,"101":0.02978,"102":0.04124,"103":0.50631,"104":1.18216,"105":0.00687,"106":0.00229,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00229,"25":0,"26":0,"27":0,"28":0.00229,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00229,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.00458,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0.00229,"55":0,"56":0,"57":0,"58":0.00458,"60":0.00458,"62":0,"63":0.05957,"64":0.06186,"65":0,"66":0,"67":0,"68":0,"69":0.00229,"70":0.00229,"71":0.00229,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.00229,"80":0,"81":0,"82":0.00229,"83":0,"84":0,"85":0.00229,"86":0.00229,"87":0,"88":0.00229,"89":0.0252,"90":0.00458,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.09622},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0.00458,"85":0,"86":0,"87":0,"88":0,"89":0.00229,"90":0,"91":0,"92":0.00458,"93":0,"94":0,"95":0,"96":0,"97":0.00229,"98":0,"99":0.00458,"100":0.00229,"101":0.00458,"102":0.00458,"103":0.0504,"104":0.13288,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0.00229,"15.1":0,"15.2-15.3":0.00458,"15.4":0.00229,"15.5":0.00229,"15.6":0.00229,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.01005,"5.0-5.1":0.00037,"6.0-6.1":0.00091,"7.0-7.1":0.00402,"8.1-8.4":0.00018,"9.0-9.2":0.00256,"9.3":0.03289,"10.0-10.2":0,"10.3":0.00512,"11.0-11.2":0.00146,"11.3-11.4":0.00457,"12.0-12.1":0.01188,"12.2-12.5":0.18508,"13.0-13.1":0.0053,"13.2":0.01297,"13.3":0.01644,"13.4-13.7":0.04513,"14.0-14.4":0.16315,"14.5-14.8":0.17594,"15.0-15.1":0.09446,"15.2-15.3":0.13849,"15.4":0.17558,"15.5":0.43373,"15.6":0.27716,"16.0":0.02905},P:{"4":0.16201,"5.0-5.4":0.08101,"6.2-6.4":0.02025,"7.2-7.4":0.18226,"8.2":0,"9.2":0.22277,"10.1":0.03038,"11.1-11.2":0.34428,"12.0":0.07088,"13.0":0.25314,"14.0":0.21264,"15.0":0.11138,"16.0":0.41516,"17.0":1.41761,"18.0":0.90119},I:{"0":0,"3":0,"4":0.00209,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01253,"4.2-4.3":0.00626,"4.4":0,"4.4.3-4.4.4":0.07829},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00229,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":72.66215},S:{"2.5":0.00771},R:{_:"0"},M:{"0":0.63985},Q:{"10.4":0},O:{"0":3.24549},H:{"0":9.15947}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/YT.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/YT.js index c3966492a9e..617fd3125aa 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/YT.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/YT.js @@ -1 +1 @@ -module.exports={C:{"51":0.02462,"60":0.10831,"68":0.00985,"73":0.01969,"78":3.68733,"84":0.04431,"85":0.18707,"86":0.01477,"88":0.12308,"89":0.128,"91":0.14769,"94":0.00985,"95":0.17723,"96":2.75688,"97":2.70765,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 69 70 71 72 74 75 76 77 79 80 81 82 83 87 90 92 93 98 99 3.5 3.6"},D:{"49":0.00492,"58":0.00985,"64":0.01969,"67":0.00985,"69":0.02462,"75":0.05415,"77":0.05415,"79":0.02954,"81":0.01477,"83":0.01477,"85":0.00985,"87":0.13292,"88":0.08369,"89":0.06892,"90":0.02462,"91":0.10831,"92":0.03446,"93":1.11752,"94":0.01477,"95":0.03938,"96":0.48738,"97":8.44295,"98":14.47854,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 59 60 61 62 63 65 66 68 70 71 72 73 74 76 78 80 84 86 99 100 101"},F:{"82":0.05415,"83":0.37907,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"14":0.00492,"17":0.15754,"18":0.01477,"84":0.01477,"85":0.00985,"89":0.02462,"91":0.02954,"92":0.00985,"93":0.00492,"94":0.02462,"95":0.06892,"96":0.12308,"97":1.27013,"98":4.58331,_:"12 13 15 16 79 80 81 83 86 87 88 90"},E:{"4":0,"12":0.01969,"13":0.00492,"14":0.44799,"15":0.12308,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1 15.4","11.1":0.01477,"12.1":0.12308,"13.1":0.15754,"14.1":0.86645,"15.1":0.68922,"15.2-15.3":0.58091},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.03171,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00362,"10.0-10.2":0,"10.3":0.00181,"11.0-11.2":0.05164,"11.3-11.4":0.00544,"12.0-12.1":0.01812,"12.2-12.5":0.17303,"13.0-13.1":0.05526,"13.2":0.00181,"13.3":0.03895,"13.4-13.7":0.10056,"14.0-14.4":0.72111,"14.5-14.8":2.14703,"15.0-15.1":2.08361,"15.2-15.3":3.60918,"15.4":0.01449},P:{"4":0.01024,"5.0-5.4":0.01024,"6.2-6.4":0.02048,"7.2-7.4":0.03072,"8.2":0.01015,"9.2":0.12286,"10.1":0.02048,"11.1-11.2":0.18429,"12.0":0.05073,"13.0":0.02048,"14.0":0.11262,"15.0":0.14334,"16.0":3.63464},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00159,"4.2-4.3":0.00159,"4.4":0,"4.4.3-4.4.4":0.01206},A:{"11":0.27077,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.02136,_:"11"},R:{_:"0"},M:{"0":0.13708},Q:{"10.4":0},O:{"0":0.27416},H:{"0":0.19226},L:{"0":36.20709},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0.00964,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0.00482,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00482,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0.00482,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00482,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.05783,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0.04819,"85":0,"86":0,"87":0,"88":0,"89":0.00964,"90":0,"91":0.03373,"92":0,"93":0,"94":0.00482,"95":0.00482,"96":0,"97":0,"98":0.00482,"99":0.00482,"100":0,"101":0.01446,"102":0.05301,"103":1.91796,"104":0.37106,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00964,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0.00482,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00482,"48":0,"49":0.00482,"50":0.00964,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0.00482,"63":0,"64":0,"65":0,"66":0,"67":0.01446,"68":0.00964,"69":0,"70":0.00482,"71":0,"72":0,"73":0,"74":0.00482,"75":0.00482,"76":0,"77":0.00482,"78":0,"79":0.00964,"80":0,"81":0.0241,"83":0.00482,"84":0.00482,"85":0,"86":0.00482,"87":0.22167,"88":0.00482,"89":0.2024,"90":0.00964,"91":0.04819,"92":0.00964,"93":0,"94":0,"95":0.00964,"96":0.00964,"97":0.09156,"98":0.01928,"99":0.02891,"100":0.04819,"101":0.05301,"102":0.10602,"103":2.5878,"104":9.18501,"105":0.03373,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00482,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0.00964,"64":0.00482,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.00482,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00482,"89":0.34697,"90":0.01446,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00482,"13":0,"14":0.00482,"15":0.00964,"16":0,"17":0,"18":0.00482,"79":0,"80":0,"81":0,"83":0,"84":0.00482,"85":0,"86":0,"87":0.00482,"88":0,"89":0,"90":0,"91":0,"92":0.00482,"93":0.01446,"94":0,"95":0.01928,"96":0.00482,"97":0,"98":0.00482,"99":0.01928,"100":0.00964,"101":0.02891,"102":0.00964,"103":0.94934,"104":2.26493,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0.01446,"13":0.04819,"14":0.18312,"15":0.01446,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00482,"12.1":0,"13.1":0.15421,"14.1":0.13975,"15.1":0.06747,"15.2-15.3":0.02891,"15.4":0.03855,"15.5":0.47708,"15.6":0.95898,"16.0":0.00964},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.06118,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.00728,"10.0-10.2":0,"10.3":0.00291,"11.0-11.2":0.00291,"11.3-11.4":0.03059,"12.0-12.1":0.05827,"12.2-12.5":0.4312,"13.0-13.1":0,"13.2":0,"13.3":0.02768,"13.4-13.7":0.12674,"14.0-14.4":0.3977,"14.5-14.8":0.83764,"15.0-15.1":0.30155,"15.2-15.3":0.50696,"15.4":0.82307,"15.5":4.6602,"15.6":5.87077,"16.0":0.42101},P:{"4":0.15358,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.17406,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.05119,"12.0":0,"13.0":0.07167,"14.0":0.09215,"15.0":0.04095,"16.0":0.12286,"17.0":1.58699,"18.0":3.29684},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.03222,"4.2-4.3":0.02974,"4.4":0,"4.4.3-4.4.4":0.10658},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.07229,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":54.68327},S:{"2.5":0},R:{_:"0"},M:{"0":0.20724},Q:{"10.4":0},O:{"0":0.01554},H:{"0":0.22563}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZA.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZA.js index cd4c0e3ed58..bc135b6f262 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZA.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZA.js @@ -1 +1 @@ -module.exports={C:{"34":0.00855,"52":0.03848,"60":0.00855,"68":0.00214,"69":0.00428,"70":0.00428,"71":0.00214,"72":0.00641,"73":0.00428,"74":0.00214,"75":0.00214,"77":0.00855,"78":0.01069,"79":0.00641,"80":0.00428,"81":0.00855,"82":0.00641,"83":0.00428,"84":0.00428,"85":0.00214,"86":0.00855,"87":0.00855,"88":0.01069,"89":0.00855,"90":0.00641,"91":0.01924,"92":0.00641,"93":0.00855,"94":0.01497,"95":0.01069,"96":0.30787,"97":0.49815,"98":0.01069,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 76 99 3.5 3.6"},D:{"11":0.00214,"18":0.00214,"28":0.00855,"34":0.00641,"38":0.00428,"39":0.00214,"40":0.00428,"49":0.04276,"50":0.00641,"52":0.00855,"55":0.00641,"56":0.00214,"63":0.00214,"64":0.01069,"65":0.00641,"66":0.00214,"67":0.01069,"69":0.01497,"70":0.02352,"71":0.00428,"72":0.01283,"73":0.00428,"74":0.00855,"75":0.00214,"76":0.00428,"77":0.00428,"78":0.00641,"79":0.03848,"80":0.02566,"81":0.01497,"83":0.00855,"84":0.00641,"85":0.00641,"86":0.01497,"87":0.02352,"88":0.0171,"89":0.01283,"90":0.01497,"91":0.03207,"92":0.04276,"93":0.07911,"94":0.04704,"95":0.02779,"96":0.1689,"97":3.04451,"98":7.74597,"99":0.00641,"100":0.00641,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 19 20 21 22 23 24 25 26 27 29 30 31 32 33 35 36 37 41 42 43 44 45 46 47 48 51 53 54 57 58 59 60 61 62 68 101"},F:{"28":0.00855,"67":0.00855,"77":0.00428,"78":0.00214,"79":0.00641,"80":0.00641,"81":0.00214,"82":0.05559,"83":0.29932,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 72 73 74 75 76 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01069,"13":0.00428,"14":0.00641,"15":0.00855,"16":0.01069,"17":0.0171,"18":0.04062,"84":0.00855,"85":0.00214,"89":0.00641,"90":0.00214,"91":0.00428,"92":0.00855,"93":0.00214,"94":0.00641,"95":0.03207,"96":0.03635,"97":0.53664,"98":1.69757,_:"79 80 81 83 86 87 88"},E:{"4":0,"13":0.02138,"14":0.06842,"15":0.04917,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1","10.1":0.00641,"11.1":0.01069,"12.1":0.02138,"13.1":0.09835,"14.1":0.2758,"15.1":0.14752,"15.2-15.3":0.36346,"15.4":0.00428},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00219,"6.0-6.1":0.00219,"7.0-7.1":0.01094,"8.1-8.4":0.00875,"9.0-9.2":0.00547,"9.3":0.09842,"10.0-10.2":0.00328,"10.3":0.06342,"11.0-11.2":0.01422,"11.3-11.4":0.02187,"12.0-12.1":0.02624,"12.2-12.5":0.60908,"13.0-13.1":0.04483,"13.2":0.01094,"13.3":0.07764,"13.4-13.7":0.17715,"14.0-14.4":0.56862,"14.5-14.8":1.93878,"15.0-15.1":1.61729,"15.2-15.3":5.6053,"15.4":0.02296},P:{"4":0.30271,"5.0-5.4":0.05095,"6.2-6.4":0.01009,"7.2-7.4":0.55497,"8.2":0.01009,"9.2":0.05045,"10.1":0.05045,"11.1-11.2":0.23208,"12.0":0.15136,"13.0":0.3128,"14.0":0.37334,"15.0":0.36325,"16.0":6.45786},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00122,"4.2-4.3":0.00405,"4.4":0,"4.4.3-4.4.4":0.03405},A:{"11":0.31642,_:"6 7 8 9 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.51896},Q:{"10.4":0.00786},O:{"0":0.58973},H:{"0":3.58065},L:{"0":57.61738},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0.00234,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00467,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00234,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00234,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00234,"88":0.00234,"89":0,"90":0,"91":0.00467,"92":0.00234,"93":0.00234,"94":0.00234,"95":0.00234,"96":0,"97":0,"98":0.00234,"99":0.00467,"100":0.00234,"101":0.00234,"102":0.01168,"103":0.20557,"104":0.03971,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.00234,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.00234,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00467,"50":0.00234,"51":0,"52":0.00234,"53":0,"54":0,"55":0.00234,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0.00234,"66":0.00234,"67":0.00234,"68":0,"69":0.00467,"70":0.00467,"71":0,"72":0,"73":0,"74":0.00234,"75":0,"76":0.00234,"77":0.00234,"78":0.00234,"79":0.00701,"80":0.00234,"81":0.0257,"83":0.00234,"84":0.00234,"85":0.00234,"86":0.00467,"87":0.00467,"88":0.00234,"89":0.00234,"90":0.00234,"91":0.00467,"92":0.00934,"93":0.00234,"94":0.00234,"95":0.00234,"96":0.00701,"97":0.00467,"98":0.00467,"99":0.00467,"100":0.00934,"101":0.01168,"102":0.02102,"103":0.69846,"104":1.82675,"105":0.00701,"106":0.00234,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.00234,"27":0,"28":0.00467,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0.00701,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0.00234,"47":0.00234,"48":0,"49":0,"50":0.00234,"51":0.00234,"52":0,"53":0,"54":0.00234,"55":0,"56":0.00234,"57":0.00234,"58":0.00934,"60":0.02102,"62":0,"63":0.31069,"64":0.15184,"65":0,"66":0,"67":0,"68":0.00234,"69":0,"70":0,"71":0.00234,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0.00234,"86":0,"87":0,"88":0.00234,"89":0.07008,"90":0.00934,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.00234},B:{"12":0.00234,"13":0,"14":0.00234,"15":0.00234,"16":0.00234,"17":0.00234,"18":0.00701,"79":0,"80":0,"81":0,"83":0,"84":0.00234,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00234,"93":0,"94":0,"95":0.00234,"96":0,"97":0,"98":0,"99":0.00234,"100":0.00234,"101":0.00701,"102":0.00467,"103":0.16118,"104":0.45552,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00234,"14":0.00934,"15":0.00234,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00234,"12.1":0.00234,"13.1":0.01402,"14.1":0.0257,"15.1":0.00701,"15.2-15.3":0.00467,"15.4":0.01402,"15.5":0.06074,"15.6":0.11914,"16.0":0.00234},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00279,"6.0-6.1":0.00279,"7.0-7.1":0.00559,"8.1-8.4":0.00698,"9.0-9.2":0.00279,"9.3":0.09219,"10.0-10.2":0,"10.3":0.05448,"11.0-11.2":0.01118,"11.3-11.4":0.01816,"12.0-12.1":0.01397,"12.2-12.5":0.5825,"13.0-13.1":0.02933,"13.2":0.01118,"13.3":0.04749,"13.4-13.7":0.11035,"14.0-14.4":0.37576,"14.5-14.8":0.81858,"15.0-15.1":0.24306,"15.2-15.3":0.38554,"15.4":0.53641,"15.5":3.09831,"15.6":7.43007,"16.0":0.08381},P:{"4":0.26304,"5.0-5.4":0.01012,"6.2-6.4":0.01012,"7.2-7.4":0.49573,"8.2":0.01012,"9.2":0.04047,"10.1":0.03035,"11.1-11.2":0.14164,"12.0":0.07082,"13.0":0.13152,"14.0":0.19222,"15.0":0.10117,"16.0":0.37432,"17.0":2.87318,"18.0":3.88487},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00237,"4.2-4.3":0.00869,"4.4":0,"4.4.3-4.4.4":0.05295},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.03971,"5.5":0},J:{"7":0,"10":0.00766},N:{"10":0,"11":0},L:{"0":65.3595},S:{"2.5":0},R:{_:"0"},M:{"0":0.49816},Q:{"10.4":0.00766},O:{"0":0.56714},H:{"0":3.43198}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZM.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZM.js index 298d5f76e44..f71c3f823a8 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZM.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZM.js @@ -1 +1 @@ -module.exports={C:{"27":0.00266,"31":0.00797,"34":0.00531,"37":0.00797,"38":0.00266,"43":0.00531,"45":0.00266,"46":0.00266,"47":0.00797,"48":0.00266,"52":0.01328,"68":0.00531,"69":0.00266,"72":0.00531,"78":0.01328,"79":0.00531,"88":0.00531,"91":0.02656,"92":0.00266,"93":0.00266,"94":0.00797,"95":0.02125,"96":0.51261,"97":0.91101,"98":0.04781,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 30 32 33 35 36 39 40 41 42 44 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 70 71 73 74 75 76 77 80 81 82 83 84 85 86 87 89 90 99 3.5 3.6"},D:{"11":0.00531,"34":0.00266,"38":0.00531,"39":0.00266,"43":0.00531,"49":0.01859,"50":0.01328,"51":0.00266,"55":0.00531,"57":0.00531,"58":0.00266,"59":0.00266,"62":0.00531,"63":0.00797,"65":0.00531,"66":0.00531,"67":0.00531,"68":0.00797,"69":0.00531,"70":0.00266,"71":0.03984,"72":0.00266,"73":0.03718,"74":0.00797,"75":0.00531,"76":0.00797,"77":0.01594,"78":0.00797,"79":0.02125,"80":0.01328,"81":0.03718,"83":0.02656,"84":0.01859,"85":0.00531,"86":0.05578,"87":0.0664,"88":0.02656,"89":0.03187,"90":0.06109,"91":0.03984,"92":0.05046,"93":0.04781,"94":0.04515,"95":0.05843,"96":0.43027,"97":3.8273,"98":8.39562,"99":0.02125,"100":0.00531,_:"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 40 41 42 44 45 46 47 48 52 53 54 56 60 61 64 101"},F:{"34":0.00531,"36":0.00797,"40":0.00266,"42":0.01062,"45":0.00797,"63":0.00531,"65":0.00266,"67":0.01594,"73":0.00531,"76":0.00266,"77":0.00531,"79":0.03187,"80":0.01062,"81":0.00531,"82":0.1567,"83":1.22973,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 37 38 39 41 43 44 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 64 66 68 69 70 71 72 74 75 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6","10.0-10.1":0,"12.1":0.02125},B:{"12":0.08234,"13":0.03187,"14":0.03453,"15":0.02656,"16":0.0239,"17":0.03984,"18":0.12218,"80":0.00266,"84":0.02656,"85":0.02125,"86":0.00531,"88":0.00266,"89":0.03187,"90":0.03453,"91":0.00797,"92":0.04515,"93":0.01328,"94":0.01594,"95":0.03187,"96":0.07968,"97":0.61885,"98":1.78749,_:"79 81 83 87"},E:{"4":0,"13":0.02656,"14":0.03984,"15":0.01062,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 15.4","5.1":0.02656,"9.1":0.00266,"10.1":0.01859,"11.1":0.01328,"12.1":0.01328,"13.1":0.05046,"14.1":0.14077,"15.1":0.09562,"15.2-15.3":0.10358},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01342,"6.0-6.1":0,"7.0-7.1":0.00992,"8.1-8.4":0,"9.0-9.2":0.00058,"9.3":0.1126,"10.0-10.2":0.01925,"10.3":0.15052,"11.0-11.2":0.06943,"11.3-11.4":0.05076,"12.0-12.1":0.03325,"12.2-12.5":1.19306,"13.0-13.1":0.02567,"13.2":0.00642,"13.3":0.11551,"13.4-13.7":0.20361,"14.0-14.4":0.58341,"14.5-14.8":0.89728,"15.0-15.1":0.85236,"15.2-15.3":1.49002,"15.4":0.00408},P:{"4":0.59599,"5.0-5.4":0.01028,"6.2-6.4":0.0302,"7.2-7.4":0.12331,"8.2":0.02019,"9.2":0.06165,"10.1":0.02055,"11.1-11.2":0.03083,"12.0":0.02055,"13.0":0.10276,"14.0":0.10276,"15.0":0.3391,"16.0":1.1406},I:{"0":0,"3":0,"4":0.00091,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00327,"4.2-4.3":0.00327,"4.4":0,"4.4.3-4.4.4":0.10271},A:{"10":0.01005,"11":0.20774,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.02938},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.09547},Q:{"10.4":0},O:{"0":2.3207},H:{"0":13.43286},L:{"0":53.21928},S:{"2.5":0.02203}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0.00516,"32":0,"33":0,"34":0.00258,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0.00258,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0.00258,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00258,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0.00258,"89":0,"90":0,"91":0.00774,"92":0,"93":0,"94":0,"95":0,"96":0.00516,"97":0,"98":0.00258,"99":0.00258,"100":0.00258,"101":0.00516,"102":0.01291,"103":0.27875,"104":0.05162,"105":0.00258,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00258,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0.00258,"38":0,"39":0,"40":0.00516,"41":0,"42":0.00258,"43":0.00258,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0.00258,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00258,"56":0,"57":0.00258,"58":0.00258,"59":0,"60":0,"61":0.00258,"62":0,"63":0.00258,"64":0.01032,"65":0,"66":0,"67":0,"68":0.00258,"69":0.00258,"70":0.00258,"71":0.00516,"72":0.00258,"73":0.00258,"74":0.00516,"75":0.00258,"76":0.00516,"77":0.00516,"78":0.00516,"79":0.00516,"80":0.02839,"81":0.03872,"83":0.00516,"84":0.00258,"85":0.00258,"86":0.01291,"87":0.01032,"88":0.00774,"89":0.00516,"90":0.00774,"91":0.00774,"92":0.00258,"93":0.02065,"94":0.00516,"95":0.00774,"96":0.01032,"97":0.00774,"98":0.01032,"99":0.01549,"100":0.01549,"101":0.01549,"102":0.03872,"103":0.65557,"104":1.68539,"105":0.01032,"106":0.00258,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0.00258,"25":0,"26":0.00258,"27":0.00258,"28":0.00516,"29":0,"30":0.00774,"31":0,"32":0.00258,"33":0,"34":0,"35":0.02323,"36":0,"37":0,"38":0.00258,"39":0,"40":0,"41":0,"42":0.00516,"43":0,"44":0,"45":0,"46":0.00258,"47":0.00516,"48":0,"49":0,"50":0.00774,"51":0.03872,"52":0,"53":0,"54":0.00516,"55":0.00258,"56":0.00258,"57":0.00774,"58":0.03097,"60":0.28391,"62":0.00258,"63":0.73817,"64":0.31488,"65":0.00258,"66":0,"67":0.00258,"68":0.00258,"69":0.00258,"70":0.00258,"71":0.00516,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.01032,"80":0,"81":0,"82":0.00258,"83":0,"84":0.00258,"85":0.00516,"86":0.01032,"87":0.00258,"88":0.0413,"89":0.24261,"90":0.04388,"9.5-9.6":0,"10.0-10.1":0,"10.5":0.00258,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0.02323},B:{"12":0.01549,"13":0.00774,"14":0.00516,"15":0.01291,"16":0.00774,"17":0.00774,"18":0.02839,"79":0,"80":0,"81":0,"83":0,"84":0.00774,"85":0.00258,"86":0.00258,"87":0,"88":0,"89":0.00774,"90":0.00516,"91":0,"92":0.01549,"93":0,"94":0,"95":0,"96":0.00258,"97":0.00258,"98":0.00258,"99":0.00258,"100":0.00516,"101":0.01032,"102":0.01291,"103":0.19616,"104":0.43103,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00258,"14":0.00516,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0.00258,"6.1":0,"7.1":0,"9.1":0.00774,"10.1":0.00258,"11.1":0.00258,"12.1":0.00258,"13.1":0.00516,"14.1":0.00516,"15.1":0.00258,"15.2-15.3":0.00258,"15.4":0.00516,"15.5":0.03355,"15.6":0.02323,"16.0":0},G:{"8":0.0045,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.0015,"5.0-5.1":0.00825,"6.0-6.1":0,"7.0-7.1":0.02099,"8.1-8.4":0,"9.0-9.2":0.00075,"9.3":0.10419,"10.0-10.2":0.0075,"10.3":0.12143,"11.0-11.2":0.01949,"11.3-11.4":0.01649,"12.0-12.1":0.03298,"12.2-12.5":1.42717,"13.0-13.1":0.02623,"13.2":0.01124,"13.3":0.05697,"13.4-13.7":0.10794,"14.0-14.4":0.48047,"14.5-14.8":0.59291,"15.0-15.1":0.32531,"15.2-15.3":0.45349,"15.4":0.47447,"15.5":1.47814,"15.6":1.67378,"16.0":0.04572},P:{"4":0.23745,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.13421,"8.2":0,"9.2":0.02065,"10.1":0,"11.1-11.2":0.02065,"12.0":0.01032,"13.0":0.11356,"14.0":0.0413,"15.0":0.0413,"16.0":0.14454,"17.0":0.47491,"18.0":0.47491},I:{"0":0,"3":0,"4":0.00194,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00466,"4.2-4.3":0.01164,"4.4":0,"4.4.3-4.4.4":0.21145},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.02065,"5.5":0},J:{"7":0,"10":0.01484},N:{"10":0,"11":0},L:{"0":67.94379},S:{"2.5":0.00742},R:{_:"0"},M:{"0":0.17064},Q:{"10.4":0.00742},O:{"0":1.70637},H:{"0":11.3786}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZW.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZW.js index 0a1dc08d0c8..17b18028613 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZW.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/ZW.js @@ -1 +1 @@ -module.exports={C:{"41":0.00415,"43":0.00829,"47":0.00829,"48":0.00829,"52":0.02073,"57":0.02073,"60":0.00415,"69":0.00829,"72":0.01658,"78":0.0539,"80":0.00415,"82":0.00415,"84":0.02073,"85":0.00415,"87":0.01244,"88":0.03317,"89":0.02073,"90":0.00415,"91":0.02488,"92":0.01244,"93":0.02488,"94":0.03317,"95":0.04975,"96":1.23551,"97":1.8118,"98":0.11609,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 44 45 46 49 50 51 53 54 55 56 58 59 61 62 63 64 65 66 67 68 70 71 73 74 75 76 77 79 81 83 86 99 3.5 3.6"},D:{"34":0.00415,"37":0.00829,"49":0.02488,"58":0.01244,"60":0.00415,"63":0.02073,"64":0.00829,"65":0.00415,"66":0.01244,"67":0.00829,"68":0.00415,"69":0.01244,"70":0.02073,"71":0.00415,"72":0.00415,"73":0.01244,"74":0.06219,"75":0.00829,"76":0.02073,"77":0.01658,"78":0.01244,"79":0.06219,"80":0.02073,"81":0.02488,"83":0.02902,"84":0.01658,"85":0.02073,"86":0.04561,"87":0.04561,"88":0.01658,"89":0.04561,"90":0.02902,"91":0.07877,"92":0.06219,"93":0.04975,"94":0.07877,"95":0.08707,"96":0.44362,"97":6.38484,"98":14.22493,"99":0.02902,"100":0.02488,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 59 61 62 101"},F:{"36":0.00829,"67":0.01658,"77":0.00415,"79":0.02073,"80":0.07877,"81":0.01658,"82":0.2612,"83":1.57133,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 68 69 70 71 72 73 74 75 76 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.07048,"13":0.04975,"14":0.02488,"15":0.03317,"16":0.0539,"17":0.0539,"18":0.15755,"84":0.02902,"85":0.01658,"89":0.03731,"90":0.02073,"91":0.00829,"92":0.04975,"93":0.01244,"94":0.01658,"95":0.02902,"96":0.0995,"97":1.08211,"98":3.09706,_:"79 80 81 83 86 87 88"},E:{"4":0,"12":0.00415,"13":0.03317,"14":0.08292,"15":0.04561,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1 10.1 15.4","5.1":0.00415,"9.1":0.00415,"11.1":0.00829,"12.1":0.00829,"13.1":0.09536,"14.1":0.41875,"15.1":0.14511,"15.2-15.3":0.38972},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00072,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0.01878,"8.1-8.4":0.00144,"9.0-9.2":0,"9.3":0.1322,"10.0-10.2":0.00361,"10.3":0.08524,"11.0-11.2":0.0065,"11.3-11.4":0.01734,"12.0-12.1":0.02384,"12.2-12.5":0.5389,"13.0-13.1":0.02384,"13.2":0.01156,"13.3":0.08307,"13.4-13.7":0.10547,"14.0-14.4":0.54323,"14.5-14.8":1.35953,"15.0-15.1":1.22516,"15.2-15.3":3.0304,"15.4":0.013},P:{"4":0.25107,"5.0-5.4":0.01028,"6.2-6.4":0.0302,"7.2-7.4":0.15692,"8.2":0.02019,"9.2":0.06165,"10.1":0.02055,"11.1-11.2":0.05231,"12.0":0.03138,"13.0":0.11507,"14.0":0.10461,"15.0":0.12554,"16.0":1.42274},I:{"0":0,"3":0,"4":0.00035,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00105,"4.2-4.3":0.00805,"4.4":0,"4.4.3-4.4.4":0.1369},A:{"10":0.01244,"11":0.18242,_:"6 7 8 9 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.15806},Q:{"10.4":0.04098},O:{"0":1.70351},H:{"0":9.08919},L:{"0":43.06018},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00378,"48":0,"49":0,"50":0,"51":0,"52":0.00756,"53":0,"54":0,"55":0,"56":0,"57":0.00378,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0.00378,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0.00378,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00756,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.00378,"88":0.00756,"89":0.00378,"90":0.00378,"91":0.00756,"92":0,"93":0,"94":0.00378,"95":0.00378,"96":0,"97":0.00378,"98":0.00378,"99":0.01134,"100":0.00756,"101":0.01134,"102":0.05669,"103":0.64621,"104":0.1625,"105":0.00756,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00756,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0.01134,"41":0,"42":0.00378,"43":0,"44":0,"45":0,"46":0.00378,"47":0,"48":0,"49":0.00378,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0.00378,"56":0,"57":0,"58":0.00378,"59":0,"60":0,"61":0.00378,"62":0,"63":0.00756,"64":0,"65":0,"66":0.00378,"67":0.00378,"68":0.00378,"69":0.00756,"70":0.00756,"71":0.00378,"72":0.00378,"73":0.00378,"74":0.02645,"75":0.00378,"76":0.00378,"77":0.00378,"78":0.00378,"79":0.0189,"80":0.00756,"81":0.03023,"83":0.00378,"84":0.00378,"85":0.00756,"86":0.01512,"87":0.01134,"88":0.01134,"89":0.00756,"90":0.00756,"91":0.00756,"92":0.02267,"93":0.00756,"94":0.0189,"95":0.0189,"96":0.01512,"97":0.0189,"98":0.02267,"99":0.02267,"100":0.03779,"101":0.02267,"102":0.06802,"103":1.70433,"104":4.30806,"105":0.0189,"106":0.00756,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0.00378,"27":0,"28":0.01512,"29":0,"30":0.00378,"31":0.00378,"32":0.01512,"33":0,"34":0,"35":0.02645,"36":0.00378,"37":0.00378,"38":0.00378,"39":0,"40":0,"41":0,"42":0.01512,"43":0,"44":0,"45":0,"46":0.00378,"47":0.00378,"48":0,"49":0,"50":0.05291,"51":0.00756,"52":0,"53":0,"54":0.09448,"55":0.00378,"56":0.01512,"57":0.00756,"58":0.12093,"60":0.21918,"62":0,"63":0.83516,"64":0.43836,"65":0,"66":0,"67":0,"68":0,"69":0.00378,"70":0,"71":0.00378,"72":0,"73":0.00378,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0.01512,"80":0,"81":0,"82":0.00378,"83":0,"84":0.00378,"85":0.00756,"86":0.01134,"87":0.00378,"88":0.01512,"89":0.42325,"90":0.0907,"9.5-9.6":0,"10.0-10.1":0,"10.5":0.00378,"10.6":0.00378,"11.1":0,"11.5":0,"11.6":0,"12.1":0.12849},B:{"12":0.02645,"13":0.01134,"14":0.00378,"15":0.01134,"16":0.01512,"17":0.01512,"18":0.34011,"79":0,"80":0,"81":0,"83":0,"84":0.00756,"85":0.00756,"86":0,"87":0,"88":0,"89":0.01134,"90":0.00756,"91":0,"92":0.03023,"93":0.00378,"94":0,"95":0.00378,"96":0.00378,"97":0.00378,"98":0,"99":0.00756,"100":0.00756,"101":0.01134,"102":0.01512,"103":0.42325,"104":1.02411,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.00378,"12":0,"13":0.00378,"14":0.01134,"15":0.0189,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0.00756,"10.1":0,"11.1":0,"12.1":0.00378,"13.1":0.02267,"14.1":0.07936,"15.1":0.00756,"15.2-15.3":0.00756,"15.4":0.02645,"15.5":0.06802,"15.6":0.08692,"16.0":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00097,"5.0-5.1":0.01845,"6.0-6.1":0,"7.0-7.1":0.01165,"8.1-8.4":0.00194,"9.0-9.2":0.00194,"9.3":0.1136,"10.0-10.2":0.03495,"10.3":0.07574,"11.0-11.2":0.0068,"11.3-11.4":0.0369,"12.0-12.1":0.02525,"12.2-12.5":0.59423,"13.0-13.1":0.01359,"13.2":0.01456,"13.3":0.07379,"13.4-13.7":0.13885,"14.0-14.4":0.46218,"14.5-14.8":0.6991,"15.0-15.1":0.34955,"15.2-15.3":0.60783,"15.4":0.5651,"15.5":2.41674,"15.6":3.37217,"16.0":0.07088},P:{"4":0.16451,"5.0-5.4":0.01028,"6.2-6.4":0,"7.2-7.4":0.15422,"8.2":0,"9.2":0.02056,"10.1":0,"11.1-11.2":0.04113,"12.0":0.02056,"13.0":0.05141,"14.0":0.06169,"15.0":0.04113,"16.0":0.14394,"17.0":0.79168,"18.0":0.95619},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00174,"4.2-4.3":0.01564,"4.4":0,"4.4.3-4.4.4":0.24419},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.03401,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":60.77303},S:{"2.5":0.00622},R:{_:"0"},M:{"0":0.19907},Q:{"10.4":0.05599},O:{"0":1.61124},H:{"0":8.59888}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-af.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-af.js index ef7f0d10e95..ad98f5aed75 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-af.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-af.js @@ -1 +1 @@ -module.exports={C:{"2":0.09788,"15":0.1015,"18":0.1015,"21":0.1015,"23":0.1015,"25":0.203,"30":0.1015,"43":0.00363,"47":0.00363,"51":0.1015,"52":0.05438,"60":0.00363,"72":0.00725,"78":0.01088,"81":0.00363,"84":0.01813,"87":0.00363,"88":0.00725,"89":0.01088,"91":0.02538,"92":0.00725,"93":0.00363,"94":0.01088,"95":0.02175,"96":5.45563,"97":10.69375,"98":0.029,_:"3 4 5 6 7 8 9 10 11 12 13 14 16 17 19 20 22 24 26 27 28 29 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 48 49 50 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 80 82 83 85 86 90 99 3.5 3.6"},D:{"19":0.1015,"24":0.3045,"30":0.1015,"33":0.10875,"35":0.203,"38":0.00725,"40":0.00725,"43":0.05438,"47":0.00363,"49":0.03988,"50":0.00363,"53":0.00363,"54":0.1015,"55":0.10513,"56":0.5075,"58":0.00363,"60":0.00363,"63":0.01088,"64":0.00725,"65":0.00725,"66":0.00725,"67":0.0145,"68":0.00725,"69":0.02175,"70":0.01813,"71":0.00725,"72":0.01088,"73":0.00363,"74":0.00725,"75":0.00725,"76":0.00725,"77":0.00725,"78":0.00725,"79":0.058,"80":0.01813,"81":0.02175,"83":0.01813,"84":0.02175,"85":0.01813,"86":0.03988,"87":0.06888,"88":0.02175,"89":0.02538,"90":0.02175,"91":0.03988,"92":0.05075,"93":0.09788,"94":0.03988,"95":0.0435,"96":0.22838,"97":2.929,"98":6.82225,"99":0.00725,"100":0.01088,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 25 26 27 28 29 31 32 34 36 37 39 41 42 44 45 46 48 51 52 57 59 61 62 101"},F:{"28":0.00363,"43":0.1015,"64":0.00363,"72":0.00363,"73":0.00363,"79":0.01088,"80":0.01088,"81":0.00725,"82":0.08338,"83":0.42775,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 65 66 67 68 69 70 71 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0.1015},B:{"12":0.01088,"13":0.00363,"14":0.00363,"15":0.00363,"16":0.00725,"17":0.00725,"18":0.029,"84":0.00725,"85":0.00363,"89":0.00725,"90":0.00363,"92":0.01088,"94":0.00363,"95":0.0145,"96":0.03263,"97":0.31175,"98":0.957,_:"79 80 81 83 86 87 88 91 93"},E:{"4":0,"5":0.1015,"13":0.01813,"14":0.03988,"15":0.02538,_:"0 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 10.1 15.4","5.1":0.00363,"9.1":0.00363,"11.1":0.00725,"12.1":0.01088,"13.1":0.0435,"14.1":0.10875,"15.1":0.06163,"15.2-15.3":0.12325},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00326,"6.0-6.1":1.88832,"7.0-7.1":0.02202,"8.1-8.4":0.00326,"9.0-9.2":0.00245,"9.3":0.0571,"10.0-10.2":0.26265,"10.3":0.08565,"11.0-11.2":0.04813,"11.3-11.4":0.03915,"12.0-12.1":0.03915,"12.2-12.5":0.91357,"13.0-13.1":0.02936,"13.2":0.01468,"13.3":0.07096,"13.4-13.7":0.18435,"14.0-14.4":0.65092,"14.5-14.8":0.9307,"15.0-15.1":0.82058,"15.2-15.3":2.07674,"15.4":0.0106},P:{"4":0.28151,"5.0-5.4":0.01028,"6.2-6.4":0.0302,"7.2-7.4":0.1981,"8.2":0.02019,"9.2":0.0417,"10.1":0.02055,"11.1-11.2":0.13554,"12.0":0.0417,"13.0":0.14597,"14.0":0.17725,"15.0":0.16682,"16.0":2.04354},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00493,"4.2-4.3":0.06896,"4.4":0,"4.4.3-4.4.4":0.24487},A:{"8":0.203,"9":0.203,"10":0.203,"11":0.116,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0.00638},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.19763},Q:{"10.4":0},O:{"0":0.46538},H:{"0":7.09768},L:{"0":45.066},S:{"2.5":0.01275}}; +module.exports={C:{"34":0.00517,"43":0.00517,"47":0.00517,"52":0.06726,"55":0.00259,"56":0.00517,"57":0.00259,"60":0.00259,"65":0.00517,"66":0.00259,"68":0.00259,"70":0.00259,"72":0.00776,"78":0.01294,"80":0.00259,"81":0.00259,"84":0.00776,"87":0.00259,"88":0.00517,"89":0.00517,"91":0.03104,"94":0.00517,"95":0.00517,"96":0.00517,"97":0.00517,"98":0.00517,"99":0.0207,"100":0.01552,"101":0.01552,"102":0.06209,"103":1.28574,"104":0.25353,"105":0.01035,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 44 45 46 48 49 50 51 53 54 58 59 61 62 63 64 67 69 71 73 74 75 76 77 79 82 83 85 86 90 92 93 106 3.5 3.6"},D:{"33":0.00517,"34":0.00259,"38":0.00517,"40":0.00776,"42":0.00259,"43":0.03881,"46":0.00517,"47":0.00517,"49":0.03104,"50":0.00517,"51":0.00517,"52":0.00517,"53":0.00259,"55":0.00517,"56":0.00517,"58":0.00517,"60":0.00517,"62":0.00517,"63":0.01294,"64":0.00776,"65":0.00776,"66":0.01294,"67":0.00517,"68":0.00776,"69":0.02587,"70":0.01294,"71":0.00776,"72":0.01294,"73":0.00517,"74":0.0207,"75":0.00776,"76":0.01294,"77":0.01294,"78":0.01035,"79":0.07244,"80":0.0207,"81":0.02846,"83":0.01811,"84":0.0207,"85":0.02846,"86":0.04657,"87":0.05691,"88":0.01811,"89":0.02587,"90":0.0207,"91":0.02328,"92":0.03363,"93":0.02328,"94":0.0207,"95":0.02587,"96":0.04139,"97":0.04139,"98":0.0595,"99":0.05433,"100":0.06209,"101":0.06985,"102":0.15005,"103":3.50539,"104":9.49429,"105":0.03881,"106":0.01035,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 35 36 37 39 41 44 45 48 54 57 59 61 107 108"},F:{"28":0.00776,"36":0.00259,"64":0.00259,"70":0.00259,"72":0.00259,"73":0.00259,"79":0.0207,"80":0.00517,"81":0.00517,"82":0.00776,"83":0.00517,"84":0.00776,"85":0.02328,"86":0.01035,"87":0.01035,"88":0.02328,"89":0.58208,"90":0.0802,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 65 66 67 68 69 71 74 75 76 77 78 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.01552,"13":0.00517,"14":0.00517,"15":0.00776,"16":0.00776,"17":0.01035,"18":0.04139,"84":0.01035,"85":0.00517,"89":0.00776,"90":0.00776,"92":0.02328,"95":0.00517,"96":0.00517,"97":0.00259,"98":0.00517,"99":0.01035,"100":0.01035,"101":0.02587,"102":0.0207,"103":0.64158,"104":1.67638,_:"79 80 81 83 86 87 88 91 93 94 105"},E:{"4":0,"13":0.01035,"14":0.03104,"15":0.00776,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1","5.1":0.00776,"9.1":0.00259,"10.1":0.00259,"11.1":0.00776,"12.1":0.01294,"13.1":0.04657,"14.1":0.07761,"15.1":0.01811,"15.2-15.3":0.01811,"15.4":0.04139,"15.5":0.14746,"15.6":0.24835,"16.0":0.00517},G:{"8":0.00169,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00338,"6.0-6.1":0.00084,"7.0-7.1":0.02111,"8.1-8.4":0.00253,"9.0-9.2":0.00169,"9.3":0.06164,"10.0-10.2":0.01182,"10.3":0.08697,"11.0-11.2":0.03124,"11.3-11.4":0.02533,"12.0-12.1":0.03462,"12.2-12.5":0.75489,"13.0-13.1":0.02871,"13.2":0.01351,"13.3":0.06417,"13.4-13.7":0.12244,"14.0-14.4":0.45597,"14.5-14.8":0.63414,"15.0-15.1":0.30736,"15.2-15.3":0.37153,"15.4":0.42389,"15.5":1.77914,"15.6":3.12426,"16.0":0.07937},P:{"4":0.25754,"5.0-5.4":0.01028,"6.2-6.4":0,"7.2-7.4":0.25754,"8.2":0,"9.2":0.03091,"10.1":0.0103,"11.1-11.2":0.07211,"12.0":0.03091,"13.0":0.08241,"14.0":0.11332,"15.0":0.06181,"16.0":0.21634,"17.0":1.35983,"18.0":1.57617},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00346,"4.2-4.3":0.01,"4.4":0,"4.4.3-4.4.4":0.06807},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"8":0.00529,"9":0.00529,"11":0.11102,_:"6 7 10 5.5"},J:{"7":0,"10":0.00741},N:{"10":0,"11":0},L:{"0":55.72084},S:{"2.5":0.02224},R:{_:"0"},M:{"0":0.29648},Q:{"10.4":0},O:{"0":0.65967},H:{"0":9.1785}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-an.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-an.js index 076c2547750..c47aa92263f 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-an.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-an.js @@ -1 +1 @@ -module.exports={C:{"55":0.0083,"89":0.0083,"91":0.03595,"96":0.5613,"97":0.18249,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 90 92 93 94 95 98 99 3.5 3.6"},D:{"49":0.0083,"71":0.02765,"94":0.0083,"96":0.0083,"97":1.73089,"98":1.20554,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 88 89 90 91 92 93 95 99 100 101"},F:{"82":0.01936,"83":0.07189,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"92":0.0083,"94":0.03595,"98":0.19908,_:"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 93 95 96 97"},E:{"4":0,_:"0 5 6 7 8 9 10 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 14.1","13.1":0.01936,"15.1":1.22213,"15.2-15.3":12.48951,"15.4":1.91891},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0.00607,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":0,"13.3":0.00607,"13.4-13.7":0,"14.0-14.4":0.07892,"14.5-14.8":3.83658,"15.0-15.1":4.37686,"15.2-15.3":49.40205,"15.4":2.98063},P:{"4":0.02035,"5.0-5.4":0.01028,"6.2-6.4":0.0302,"7.2-7.4":0.1981,"8.2":0.02019,"9.2":0.05087,"10.1":0.02055,"11.1-11.2":0.13554,"12.0":0.0417,"13.0":0.14597,"14.0":0.17725,"15.0":0.02035,"16.0":0.55958},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},A:{_:"6 7 8 9 10 11 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.13023},Q:{"10.4":0.02171},O:{"0":0.20258},H:{"0":0.28083},L:{"0":10.55679},S:{"2.5":0}}; +module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,_:"108"},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,_:"0","3.1":0,"3.2":0,"5.1":0,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0,"13.1":0,"14.1":0,"15.1":0.10802,"15.2-15.3":0.15842,"15.4":20.73168,"15.5":12.73857,"15.6":9.51252,"16.0":5.0335},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8.1-8.4":0,"9.0-9.2":0,"9.3":0,"10.0-10.2":0,"10.3":0,"11.0-11.2":0,"11.3-11.4":0,"12.0-12.1":0,"12.2-12.5":0,"13.0-13.1":0,"13.2":0,"13.3":0,"13.4-13.7":0,"14.0-14.4":0,"14.5-14.8":0,"15.0-15.1":0.82125,"15.2-15.3":2.53138,"15.4":0.57004,"15.5":1.64733,"15.6":6.14006,"16.0":36.59396},P:{"4":0,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0,"12.0":0,"13.0":0,"14.0":0,"15.0":0,"16.0":0,"17.0":0,"18.0":0},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":0},S:{"2.5":0},R:{_:"0"},M:{"0":0},Q:{"10.4":0},O:{"0":0},H:{"0":0}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-as.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-as.js index 6b015728ccd..a365d1c2327 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-as.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-as.js @@ -1 +1 @@ -module.exports={C:{"34":0.00647,"36":0.01294,"43":0.09384,"47":0.00324,"52":0.06148,"56":0.00971,"60":0.00324,"68":0.00324,"72":0.00647,"75":0.00647,"78":0.01618,"79":0.00324,"80":0.00324,"81":0.00324,"82":0.00324,"84":0.00971,"87":0.01294,"88":0.00971,"89":0.00971,"90":0.00647,"91":0.02265,"92":0.00647,"93":0.00647,"94":0.01294,"95":0.02589,"96":0.48864,"97":0.83165,"98":0.02912,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 37 38 39 40 41 42 44 45 46 48 49 50 51 53 54 55 57 58 59 61 62 63 64 65 66 67 69 70 71 73 74 76 77 83 85 86 99 3.5 3.6"},D:{"22":0.00971,"26":0.00324,"34":0.01618,"35":0.00324,"38":0.0356,"42":0.00647,"47":0.01294,"48":0.00971,"49":0.05501,"53":0.02265,"55":0.00971,"56":0.00971,"57":0.00971,"58":0.00647,"61":0.00647,"62":0.01294,"63":0.01294,"64":0.00647,"65":0.00971,"66":0.00647,"67":0.00971,"68":0.00971,"69":0.0809,"70":0.05825,"71":0.02265,"72":0.05178,"73":0.00971,"74":0.0356,"75":0.03236,"76":0.01294,"77":0.01942,"78":0.02912,"79":0.18122,"80":0.03883,"81":0.03236,"83":0.0453,"84":0.0453,"85":0.03883,"86":0.06472,"87":0.11002,"88":0.02912,"89":0.06148,"90":0.0356,"91":0.05501,"92":0.09384,"93":0.14562,"94":0.07443,"95":0.0809,"96":0.40126,"97":5.80538,"98":14.57818,"99":0.01618,"100":0.01618,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 30 31 32 33 36 37 39 40 41 43 44 45 46 50 51 52 54 59 60 101"},F:{"28":0.00971,"36":0.00647,"40":0.00647,"46":0.01942,"79":0.00324,"80":0.00324,"82":0.0809,"83":0.37538,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00324,"14":0.00324,"16":0.00324,"17":0.00647,"18":0.02589,"84":0.00647,"85":0.00324,"86":0.00324,"89":0.00971,"90":0.00324,"91":0.00324,"92":0.00971,"94":0.00647,"95":0.00971,"96":0.02912,"97":0.48864,"98":1.86717,_:"13 15 79 80 81 83 87 88 93"},E:{"4":0,"12":0.00324,"13":0.0356,"14":0.13268,"15":0.07119,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1","5.1":0.01942,"9.1":0.01294,"10.1":0.00647,"11.1":0.01294,"12.1":0.02265,"13.1":0.10355,"14.1":0.46922,"15.1":0.21358,"15.2-15.3":0.41744,"15.4":0.00324},G:{"8":0.00104,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.0052,"5.0-5.1":0.00623,"6.0-6.1":0.00623,"7.0-7.1":0.02598,"8.1-8.4":0.01143,"9.0-9.2":0.02182,"9.3":0.07481,"10.0-10.2":0.04156,"10.3":0.08416,"11.0-11.2":0.10287,"11.3-11.4":0.03117,"12.0-12.1":0.04156,"12.2-12.5":0.51121,"13.0-13.1":0.0426,"13.2":0.01455,"13.3":0.07585,"13.4-13.7":0.24418,"14.0-14.4":0.77617,"14.5-14.8":1.99083,"15.0-15.1":1.62716,"15.2-15.3":4.62483,"15.4":0.02805},P:{"4":0.34125,"5.0-5.4":0.01028,"6.2-6.4":0.0302,"7.2-7.4":0.10341,"8.2":0.02019,"9.2":0.03102,"10.1":0.02055,"11.1-11.2":0.09307,"12.0":0.04136,"13.0":0.14477,"14.0":0.15511,"15.0":0.15511,"16.0":1.98545},I:{"0":0,"3":0,"4":0.03949,"2.1":0,"2.2":0,"2.3":0,"4.1":0.02962,"4.2-4.3":0.09872,"4.4":0,"4.4.3-4.4.4":0.56269},A:{"8":0.02586,"9":0.01724,"10":0.00862,"11":0.99998,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.17586},Q:{"10.4":0.4126},O:{"0":1.92098},H:{"0":1.10144},L:{"0":49.86406},S:{"2.5":0.2435}}; +module.exports={C:{"34":0.00611,"36":0.01528,"43":0.04583,"47":0.00306,"52":0.05194,"56":0.00611,"68":0.00306,"72":0.00306,"78":0.01222,"79":0.00611,"80":0.00306,"81":0.00306,"82":0.00306,"83":0.00306,"84":0.00306,"87":0.00306,"88":0.00611,"89":0.00306,"90":0.00306,"91":0.02139,"95":0.00306,"96":0.00306,"97":0.00306,"98":0.00611,"99":0.01222,"100":0.00917,"101":0.01222,"102":0.04277,"103":1.02954,"104":0.22302,"105":0.00917,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 37 38 39 40 41 42 44 45 46 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 85 86 92 93 94 106 3.5 3.6"},D:{"22":0.00611,"26":0.00306,"34":0.01222,"35":0.00306,"38":0.02444,"42":0.00611,"43":0.00306,"47":0.00917,"48":0.00917,"49":0.04277,"53":0.01833,"55":0.00917,"56":0.00917,"57":0.00611,"58":0.00306,"61":0.00611,"62":0.00611,"63":0.01222,"64":0.00306,"65":0.00611,"66":0.00611,"67":0.00611,"68":0.00917,"69":0.10082,"70":0.05805,"71":0.02139,"72":0.06416,"73":0.01528,"74":0.0611,"75":0.01528,"76":0.00917,"77":0.01833,"78":0.04583,"79":0.14053,"80":0.03666,"81":0.03055,"83":0.05194,"84":0.04583,"85":0.05499,"86":0.07943,"87":0.0886,"88":0.02139,"89":0.03972,"90":0.0275,"91":0.03361,"92":0.07332,"93":0.01833,"94":0.04583,"95":0.0275,"96":0.07027,"97":0.07638,"98":0.05499,"99":0.06416,"100":0.08554,"101":0.10387,"102":0.19247,"103":4.8544,"104":13.1976,"105":0.04583,"106":0.01222,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 27 28 29 30 31 32 33 36 37 39 40 41 44 45 46 50 51 52 54 59 60 107 108"},F:{"28":0.00917,"36":0.00611,"40":0.00611,"46":0.01833,"79":0.00306,"85":0.00917,"88":0.00917,"89":0.32689,"90":0.04277,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 82 83 84 86 87 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00306,"16":0.00306,"17":0.00306,"18":0.01833,"84":0.00611,"85":0.00306,"86":0.00306,"89":0.00306,"90":0.00306,"92":0.00917,"96":0.00306,"97":0.00306,"98":0.00306,"99":0.00611,"100":0.00611,"101":0.01528,"102":0.01528,"103":0.62933,"104":1.7719,_:"13 14 15 79 80 81 83 87 88 91 93 94 95 105"},E:{"4":0,"13":0.01833,"14":0.07027,"15":0.01833,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1","5.1":0.02139,"9.1":0.01528,"10.1":0.00306,"11.1":0.00917,"12.1":0.01528,"13.1":0.06416,"14.1":0.16803,"15.1":0.03055,"15.2-15.3":0.0275,"15.4":0.10082,"15.5":0.3666,"15.6":0.58045,"16.0":0.00611},G:{"8":0.00097,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00483,"5.0-5.1":0.00483,"6.0-6.1":0.00387,"7.0-7.1":0.01837,"8.1-8.4":0.00677,"9.0-9.2":0.01837,"9.3":0.05606,"10.0-10.2":0.00773,"10.3":0.07153,"11.0-11.2":0.04543,"11.3-11.4":0.01933,"12.0-12.1":0.03093,"12.2-12.5":0.42724,"13.0-13.1":0.0232,"13.2":0.0116,"13.3":0.0464,"13.4-13.7":0.16142,"14.0-14.4":0.47074,"14.5-14.8":0.72882,"15.0-15.1":0.26775,"15.2-15.3":0.34218,"15.4":0.56546,"15.5":2.02504,"15.6":4.2405,"16.0":0.0667},P:{"4":0.2883,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.10296,"8.2":0,"9.2":0.03089,"10.1":0,"11.1-11.2":0.04119,"12.0":0.02059,"13.0":0.09267,"14.0":0.08237,"15.0":0.05148,"16.0":0.15444,"17.0":1.00904,"18.0":1.112},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.05424,"4.2-4.3":0.12656,"4.4":0,"4.4.3-4.4.4":0.77747},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"8":0.0267,"9":0.0445,"11":0.85446,_:"6 7 10 5.5"},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":54.76479},S:{"2.5":0.05555},R:{_:"0"},M:{"0":0.16666},Q:{"10.4":0.31248},O:{"0":1.52074},H:{"0":0.97955}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-eu.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-eu.js index 2b844c5696c..79f8a16be87 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-eu.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-eu.js @@ -1 +1 @@ -module.exports={C:{"44":0.00515,"48":0.0103,"52":0.10817,"55":0.01545,"56":0.00515,"59":0.0103,"60":0.0103,"66":0.00515,"68":0.0206,"72":0.00515,"77":0.01545,"78":0.09787,"79":0.01545,"80":0.0103,"81":0.05151,"82":0.0103,"83":0.00515,"84":0.03091,"85":0.00515,"86":0.0103,"87":0.0206,"88":0.0206,"89":0.0206,"90":0.05666,"91":0.14938,"92":0.01545,"93":0.0206,"94":0.08242,"95":0.08242,"96":1.74619,"97":2.61156,"98":0.0103,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 45 46 47 49 50 51 53 54 57 58 61 62 63 64 65 67 69 70 71 73 74 75 76 99 3.5 3.6"},D:{"22":0.0103,"38":0.01545,"40":0.03606,"43":0.0103,"47":0.0103,"48":0.0103,"49":0.10302,"51":0.0206,"52":0.0103,"53":0.00515,"54":0.00515,"56":0.0103,"60":0.02576,"62":0.0103,"63":0.0103,"64":0.02576,"65":0.0206,"66":0.03606,"67":0.01545,"68":0.00515,"69":0.06696,"70":0.02576,"71":0.0103,"72":0.03091,"73":0.0103,"74":0.01545,"75":0.19059,"76":0.02576,"77":0.0206,"78":0.03091,"79":0.15968,"80":0.09272,"81":0.03091,"83":0.04636,"84":0.08242,"85":0.11847,"86":0.09272,"87":0.16483,"88":0.04636,"89":0.06181,"90":0.06181,"91":0.08757,"92":0.08242,"93":0.45329,"94":0.20604,"95":0.11847,"96":0.64388,"97":9.22029,"98":18.22424,"99":0.0103,"100":0.01545,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 41 42 44 45 46 50 55 57 58 59 61 101"},F:{"31":0.0206,"36":0.00515,"40":0.01545,"68":0.0103,"77":0.0103,"78":0.00515,"79":0.0103,"80":0.0103,"81":0.00515,"82":0.55631,"83":1.76164,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 37 38 39 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 69 70 71 72 73 74 75 76 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.0103,"15":0.0103,"16":0.00515,"17":0.0103,"18":0.03091,"84":0.00515,"85":0.0103,"86":0.00515,"89":0.00515,"90":0.00515,"91":0.0103,"92":0.01545,"93":0.0103,"94":0.0103,"95":0.03606,"96":0.07211,"97":1.30835,"98":4.29078,_:"13 14 79 80 81 83 87 88"},E:{"4":0,"12":0.00515,"13":0.06181,"14":0.33482,"15":0.20089,_:"0 5 6 7 8 9 10 11 3.1 3.2 6.1 7.1","5.1":0.0103,"9.1":0.0103,"10.1":0.0103,"11.1":0.04121,"12.1":0.07211,"13.1":0.32451,"14.1":1.12292,"15.1":0.60267,"15.2-15.3":1.26715,"15.4":0.0103},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00311,"6.0-6.1":0.00156,"7.0-7.1":0.014,"8.1-8.4":0.00467,"9.0-9.2":0.01089,"9.3":0.10111,"10.0-10.2":0.00622,"10.3":0.11044,"11.0-11.2":0.02333,"11.3-11.4":0.04044,"12.0-12.1":0.02178,"12.2-12.5":0.55688,"13.0-13.1":0.02489,"13.2":0.00933,"13.3":0.05911,"13.4-13.7":0.19911,"14.0-14.4":0.63776,"14.5-14.8":3.00216,"15.0-15.1":2.24617,"15.2-15.3":8.43093,"15.4":0.042},P:{"4":0.10593,_:"5.0-5.4 6.2-6.4 7.2-7.4 8.2 10.1","9.2":0.01059,"11.1-11.2":0.06356,"12.0":0.02119,"13.0":0.09534,"14.0":0.11653,"15.0":0.22246,"16.0":2.8072},I:{"0":0,"3":0,"4":0.00572,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00572,"4.2-4.3":0.01,"4.4":0,"4.4.3-4.4.4":0.04645},A:{"8":0.01636,"9":0.01636,"10":0.00545,"11":0.33269,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.35398},Q:{"10.4":0},O:{"0":0.13577},H:{"0":0.40857},L:{"0":28.30804},S:{"2.5":0}}; +module.exports={C:{"48":0.00457,"50":0.00913,"52":0.09134,"53":0.00457,"56":0.0137,"59":0.00913,"60":0.00457,"68":0.01827,"72":0.00913,"77":0.01827,"78":0.06394,"79":0.00913,"80":0.00913,"81":0.06394,"82":0.00913,"83":0.00913,"84":0.00913,"86":0.00913,"87":0.0137,"88":0.0137,"89":0.00913,"90":0.0137,"91":0.12331,"92":0.00913,"93":0.00913,"94":0.0548,"95":0.03197,"96":0.00913,"97":0.0137,"98":0.0137,"99":0.02284,"100":0.02284,"101":0.03654,"102":0.20095,"103":3.69927,"104":0.62568,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 51 54 55 57 58 61 62 63 64 65 66 67 69 70 71 73 74 75 76 85 105 106 3.5 3.6"},D:{"22":0.0137,"34":0.00457,"38":0.0137,"40":0.04567,"41":0.00457,"43":0.00913,"47":0.0137,"48":0.00457,"49":0.07307,"51":0.00913,"52":0.0137,"53":0.00457,"56":0.02284,"60":0.03654,"61":0.00913,"62":0.00457,"63":0.0137,"64":0.00457,"65":0.0274,"66":0.0548,"67":0.0137,"68":0.00913,"69":0.05937,"70":0.01827,"71":0.00913,"72":0.0137,"73":0.00457,"74":0.0137,"75":0.13701,"76":0.01827,"77":0.0137,"78":0.03197,"79":0.14158,"80":0.09591,"81":0.0274,"83":0.05937,"84":0.08677,"85":0.15985,"86":0.10504,"87":0.12331,"88":0.02284,"89":0.0411,"90":0.02284,"91":0.07307,"92":0.04567,"93":0.0548,"94":0.0548,"95":0.03197,"96":0.09134,"97":0.06851,"98":0.07307,"99":0.07307,"100":0.15528,"101":0.16441,"102":0.32426,"103":6.49884,"104":16.50971,"105":0.0548,"106":0.00457,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 42 44 45 46 50 54 55 57 58 59 107 108"},F:{"31":0.02284,"36":0.00457,"40":0.01827,"46":0.00913,"68":0.00913,"71":0.00457,"79":0.00457,"82":0.00457,"84":0.00457,"85":0.03654,"86":0.00913,"87":0.00913,"88":0.03197,"89":1.87247,"90":0.18268,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 69 70 72 73 74 75 76 77 78 80 81 83 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00913,"17":0.00913,"18":0.02284,"84":0.00913,"85":0.00913,"86":0.00457,"92":0.00913,"95":0.00457,"96":0.00913,"97":0.00913,"98":0.00913,"99":0.00913,"100":0.0137,"101":0.06851,"102":0.05024,"103":1.48884,"104":4.05093,_:"12 13 14 16 79 80 81 83 87 88 89 90 91 93 94 105"},E:{"4":0,"13":0.03197,"14":0.13701,"15":0.0411,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1","9.1":0.0137,"10.1":0.00457,"11.1":0.03197,"12.1":0.04567,"13.1":0.21008,"14.1":0.36993,"15.1":0.07307,"15.2-15.3":0.06851,"15.4":0.21465,"15.5":0.83576,"15.6":1.64412,"16.0":0.01827},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00635,"6.0-6.1":0.00159,"7.0-7.1":0.01428,"8.1-8.4":0.00476,"9.0-9.2":0.01428,"9.3":0.09361,"10.0-10.2":0.00317,"10.3":0.0952,"11.0-11.2":0.03015,"11.3-11.4":0.03649,"12.0-12.1":0.03173,"12.2-12.5":0.50772,"13.0-13.1":0.01745,"13.2":0.00793,"13.3":0.03808,"13.4-13.7":0.12693,"14.0-14.4":0.34906,"14.5-14.8":0.95514,"15.0-15.1":0.23641,"15.2-15.3":0.42045,"15.4":0.59816,"15.5":3.57783,"15.6":8.55663,"16.0":0.1301},P:{"4":0.11508,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01046,"8.2":0,"9.2":0.03089,"10.1":0,"11.1-11.2":0.03139,"12.0":0.02092,"13.0":0.06277,"14.0":0.06277,"15.0":0.20924,"16.0":0.11508,"17.0":1.26589,"18.0":1.90406},I:{"0":0,"3":0,"4":0.02056,"2.1":0,"2.2":0.00411,"2.3":0,"4.1":0.02194,"4.2-4.3":0.02605,"4.4":0,"4.4.3-4.4.4":0.07403},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"8":0.0142,"9":0.02367,"11":0.22245,_:"6 7 10 5.5"},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":33.64314},S:{"2.5":0},R:{_:"0"},M:{"0":0.48897},Q:{"10.4":0.00543},O:{"0":0.11953},H:{"0":0.61209}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-na.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-na.js index 4742e98e58f..b1d038c9696 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-na.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-na.js @@ -1 +1 @@ -module.exports={C:{"2":0.00482,"4":0.06749,"11":0.00964,"38":0.00482,"43":0.00482,"44":0.02411,"45":0.00482,"48":0.00482,"52":0.03375,"54":0.00964,"55":0.01928,"63":0.01928,"68":0.00482,"72":0.00482,"78":0.10124,"79":0.00482,"80":0.00482,"81":0.00964,"82":0.00964,"83":0.00482,"84":0.00482,"85":0.00482,"86":0.00482,"87":0.01446,"88":0.01446,"89":0.01446,"90":0.00964,"91":0.08678,"92":0.00482,"93":0.01446,"94":0.06749,"95":0.05785,"96":0.89189,"97":1.4222,"98":0.00482,_:"3 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 46 47 49 50 51 53 56 57 58 59 60 61 62 64 65 66 67 69 70 71 73 74 75 76 77 99 3.5 3.6"},D:{"35":0.01446,"38":0.00482,"40":0.01928,"43":0.00482,"46":0.00482,"47":0.00964,"48":0.06267,"49":0.06749,"50":0.00482,"52":0.00482,"56":0.07232,"58":0.00482,"59":0.00964,"60":0.04821,"63":0.00964,"64":0.03857,"65":0.01446,"66":0.03857,"67":0.01928,"68":0.00964,"69":0.01928,"70":0.06267,"71":0.00482,"72":0.24587,"73":0.00482,"74":0.02411,"75":0.01928,"76":0.19284,"77":0.01446,"78":0.04821,"79":0.3664,"80":0.07714,"81":0.06267,"83":0.28926,"84":0.11088,"85":0.08678,"86":0.07714,"87":0.14463,"88":0.04821,"89":0.07232,"90":0.07714,"91":0.1832,"92":0.13981,"93":0.32783,"94":0.35675,"95":0.12053,"96":1.18597,"97":8.3789,"98":15.28739,"99":0.01928,"100":0.04339,"101":0.01446,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 39 41 42 44 45 51 53 54 55 57 61 62"},F:{"82":0.12535,"83":0.42907,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00964,"15":0.02893,"16":0.00964,"17":0.02411,"18":0.22177,"84":0.00482,"85":0.00964,"86":0.00482,"87":0.02411,"89":0.00482,"90":0.00482,"91":0.00482,"92":0.00964,"93":0.00482,"94":0.00964,"95":0.05785,"96":0.06749,"97":1.24382,"98":4.18945,_:"13 14 79 80 81 83 88"},E:{"4":0,"8":0.00482,"9":0.00964,"12":0.00964,"13":0.07232,"14":0.39532,"15":0.25069,_:"0 5 6 7 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.04339,"10.1":0.02411,"11.1":0.05785,"12.1":0.12535,"13.1":1.42702,"14.1":1.58611,"15.1":0.71833,"15.2-15.3":1.79341,"15.4":0.02411},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00775,"7.0-7.1":0.01291,"8.1-8.4":0.00775,"9.0-9.2":0.01033,"9.3":0.09037,"10.0-10.2":0.01033,"10.3":0.10586,"11.0-11.2":0.04131,"11.3-11.4":0.04906,"12.0-12.1":0.04906,"12.2-12.5":0.57578,"13.0-13.1":0.04648,"13.2":0.01807,"13.3":0.10328,"13.4-13.7":0.32533,"14.0-14.4":1.04053,"14.5-14.8":4.7405,"15.0-15.1":3.50115,"15.2-15.3":15.00641,"15.4":0.07488},P:{"4":0.05406,_:"5.0-5.4 6.2-6.4 7.2-7.4 8.2 9.2 10.1","11.1-11.2":0.03243,"12.0":0.01081,"13.0":0.04325,"14.0":0.07568,"15.0":0.06487,"16.0":1.82716},I:{"0":0,"3":0,"4":0.0093,"2.1":0,"2.2":0.00558,"2.3":0.00093,"4.1":0.00186,"4.2-4.3":0.02045,"4.4":0,"4.4.3-4.4.4":0.0344},A:{"7":0.00495,"8":0.01486,"9":0.06936,"11":0.62916,_:"6 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{_:"10 11"},R:{_:"0"},M:{"0":0.4144},Q:{"10.4":0.00518},O:{"0":0.11396},H:{"0":0.19616},L:{"0":22.93694},S:{"2.5":0.00518}}; +module.exports={C:{"4":0.07378,"11":0.02306,"38":0.00461,"43":0.00461,"44":0.02306,"45":0.00461,"48":0.00461,"52":0.03228,"54":0.01844,"56":0.00461,"59":0.00461,"78":0.05533,"79":0.00922,"80":0.00922,"81":0.00922,"82":0.00922,"83":0.00922,"84":0.00461,"87":0.00461,"88":0.00922,"89":0.00922,"90":0.00461,"91":0.07839,"94":0.02767,"95":0.00922,"96":0.00461,"97":0.00922,"98":0.00922,"99":0.01383,"100":0.01844,"101":0.03228,"102":0.11066,"103":1.88129,"104":0.39194,_:"2 3 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 46 47 49 50 51 53 55 57 58 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 85 86 92 93 105 106 3.5 3.6"},D:{"38":0.00461,"40":0.01844,"43":0.00461,"44":0.00461,"47":0.00461,"48":0.05994,"49":0.05533,"52":0.00922,"56":0.1245,"59":0.00461,"60":0.00922,"61":0.02306,"63":0.00461,"65":0.01383,"66":0.05994,"67":0.01383,"68":0.00922,"69":0.01844,"70":0.00922,"71":0.00922,"72":0.00922,"73":0.00461,"74":0.01383,"75":0.01383,"76":0.14294,"77":0.00922,"78":0.02306,"79":0.12911,"80":0.06455,"81":0.05994,"83":0.11989,"84":0.07378,"85":0.09222,"86":0.09222,"87":0.11989,"88":0.02767,"89":0.05994,"90":0.03228,"91":0.05533,"92":0.03689,"93":0.10144,"94":0.0415,"95":0.02306,"96":0.1245,"97":0.09683,"98":0.13372,"99":0.10144,"100":0.18905,"101":0.24438,"102":0.54871,"103":7.85714,"104":16.43822,"105":0.06455,"106":0.04611,"107":0.03228,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 41 42 45 46 50 51 53 54 55 57 58 62 64 108"},F:{"71":0.00461,"88":0.01844,"89":0.57638,"90":0.05533,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00922,"17":0.00461,"18":0.01844,"84":0.00461,"85":0.00922,"86":0.00461,"87":0.00922,"92":0.00461,"96":0.00461,"98":0.00461,"99":0.00922,"100":0.01383,"101":0.08761,"102":0.05072,"103":1.53085,"104":4.31129,_:"13 14 15 16 79 80 81 83 88 89 90 91 93 94 95 97 105"},E:{"4":0,"8":0.00461,"9":0.00922,"12":0.00461,"13":0.04611,"14":0.19827,"15":0.05533,_:"0 5 6 7 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.02767,"10.1":0.01383,"11.1":0.0415,"12.1":0.08761,"13.1":0.67782,"14.1":0.60865,"15.1":0.09683,"15.2-15.3":0.10144,"15.4":0.31355,"15.5":1.22192,"15.6":2.82193,"16.0":0.02306},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00269,"5.0-5.1":0,"6.0-6.1":0.00538,"7.0-7.1":0.01075,"8.1-8.4":0.00807,"9.0-9.2":0.01344,"9.3":0.07528,"10.0-10.2":0.00538,"10.3":0.08603,"11.0-11.2":0.03226,"11.3-11.4":0.04033,"12.0-12.1":0.02957,"12.2-12.5":0.48125,"13.0-13.1":0.02689,"13.2":0.01613,"13.3":0.06184,"13.4-13.7":0.19627,"14.0-14.4":0.63988,"14.5-14.8":1.9277,"15.0-15.1":0.38178,"15.2-15.3":0.65601,"15.4":0.88454,"15.5":5.43629,"15.6":15.68242,"16.0":0.16938},P:{"4":0.06385,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.01064,"8.2":0,"9.2":0.03089,"10.1":0,"11.1-11.2":0.02128,"12.0":0.02092,"13.0":0.03193,"14.0":0.03193,"15.0":0.02128,"16.0":0.08514,"17.0":0.72365,"18.0":1.1174},I:{"0":0,"3":0.00546,"4":0.01229,"2.1":0,"2.2":0.00273,"2.3":0,"4.1":0.00273,"4.2-4.3":0.0314,"4.4":0,"4.4.3-4.4.4":0.04778},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"8":0.04348,"9":0.13043,"10":0.00483,"11":0.22704,_:"6 7 5.5"},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":24.95974},S:{"2.5":0.00539},R:{_:"0"},M:{"0":0.4419},Q:{"10.4":0.02695},O:{"0":0.08622},H:{"0":0.22449}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-oc.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-oc.js index 0845984a2ee..eed46666ebf 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-oc.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-oc.js @@ -1 +1 @@ -module.exports={C:{"34":0.01163,"48":0.00582,"52":0.02908,"54":0.01745,"66":0.01163,"78":0.06397,"84":0.01163,"87":0.01745,"88":0.00582,"89":0.01163,"90":0.01163,"91":0.05815,"93":0.01745,"94":0.16282,"95":0.04652,"96":0.94203,"97":1.50027,"98":0.01163,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 55 56 57 58 59 60 61 62 63 64 65 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 85 86 92 99 3.5 3.6"},D:{"26":0.01163,"34":0.02908,"38":0.1163,"49":0.05815,"53":0.03489,"56":0.01163,"57":0.01163,"59":0.03489,"60":0.02326,"61":0.00582,"64":0.03489,"65":0.02326,"66":0.02326,"67":0.01745,"68":0.01745,"69":0.01745,"70":0.04071,"71":0.00582,"72":0.04071,"73":0.01163,"74":0.02326,"75":0.01745,"76":0.02326,"77":0.01163,"78":0.02908,"79":0.37216,"80":0.0756,"81":0.04071,"83":0.02908,"84":0.02908,"85":0.04071,"86":0.05815,"87":0.19771,"88":0.03489,"89":0.02908,"90":0.06397,"91":0.08141,"92":0.17445,"93":0.3082,"94":0.26168,"95":0.40124,"96":1.17463,"97":10.61238,"98":23.13789,"99":0.01745,"100":0.01745,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 58 62 63 101"},F:{"36":0.00582,"46":0.06397,"80":0.00582,"82":0.13956,"83":0.41868,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.00582,"16":0.01163,"17":0.00582,"18":0.02326,"84":0.01163,"85":0.00582,"86":0.01745,"87":0.00582,"89":0.01745,"90":0.01163,"91":0.01163,"92":0.01745,"93":0.00582,"94":0.01163,"95":0.08723,"96":0.09304,"97":1.3549,"98":4.89042,_:"12 13 14 79 80 81 83 88"},E:{"4":0,"11":0.00582,"12":0.01745,"13":0.1163,"14":0.52335,"15":0.35472,_:"0 5 6 7 8 9 10 3.1 3.2 5.1 6.1 7.1","9.1":0.01163,"10.1":0.03489,"11.1":0.06397,"12.1":0.13956,"13.1":0.57569,"14.1":2.21552,"15.1":1.04089,"15.2-15.3":2.08759,"15.4":0.01163},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01655,"6.0-6.1":0.01242,"7.0-7.1":0.01242,"8.1-8.4":0.02069,"9.0-9.2":0.02069,"9.3":0.20693,"10.0-10.2":0.01862,"10.3":0.23176,"11.0-11.2":0.07242,"11.3-11.4":0.08277,"12.0-12.1":0.05794,"12.2-12.5":1.05326,"13.0-13.1":0.03311,"13.2":0.01448,"13.3":0.10139,"13.4-13.7":0.29591,"14.0-14.4":0.85461,"14.5-14.8":3.89643,"15.0-15.1":2.72729,"15.2-15.3":10.90917,"15.4":0.04759},P:{"4":0.74859,"5.0-5.4":0.01085,"6.2-6.4":0.0302,"7.2-7.4":0.0217,"8.2":0.02019,"9.2":0.01085,"10.1":0.02055,"11.1-11.2":0.03255,"12.0":0.0217,"13.0":0.09764,"14.0":0.10849,"15.0":0.10849,"16.0":2.53869},I:{"0":0,"3":0,"4":0.00266,"2.1":0,"2.2":0.00133,"2.3":0.00133,"4.1":0.00266,"4.2-4.3":0.00598,"4.4":0,"4.4.3-4.4.4":0.0279},A:{"9":0.01084,"11":0.39039,_:"6 7 8 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.38502},Q:{"10.4":0.00837},O:{"0":0.10463},H:{"0":0.1466},L:{"0":17.01388},S:{"2.5":0}}; +module.exports={C:{"11":0.00561,"52":0.03366,"54":0.01683,"59":0.00561,"66":0.00561,"78":0.0561,"79":0.00561,"80":0.00561,"82":0.00561,"87":0.00561,"91":0.0561,"93":0.01122,"94":0.09537,"95":0.00561,"98":0.01122,"99":0.01122,"100":0.01683,"101":0.02244,"102":0.12342,"103":1.83447,"104":0.33099,"105":0.00561,_:"2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 55 56 57 58 60 61 62 63 64 65 67 68 69 70 71 72 73 74 75 76 77 81 83 84 85 86 88 89 90 92 96 97 106 3.5 3.6"},D:{"25":0.01122,"26":0.01122,"34":0.02244,"38":0.07854,"49":0.03927,"53":0.01122,"58":0.00561,"59":0.03366,"60":0.05049,"63":0.00561,"65":0.01683,"66":0.02244,"67":0.01122,"68":0.01122,"69":0.02805,"70":0.00561,"72":0.00561,"73":0.01122,"74":0.02244,"75":0.01122,"76":0.01683,"77":0.01122,"78":0.01122,"79":0.14586,"80":0.03927,"81":0.03366,"83":0.04488,"84":0.03927,"85":0.07854,"86":0.18513,"87":0.12342,"88":0.02805,"89":0.02244,"90":0.02244,"91":0.03366,"92":0.06732,"93":0.08415,"94":0.05049,"95":0.03927,"96":0.14025,"97":0.11781,"98":0.10098,"99":0.11781,"100":0.24123,"101":0.21879,"102":0.53856,"103":10.18215,"104":21.44703,"105":0.06171,"106":0.01122,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 54 55 56 57 61 62 64 71 107 108"},F:{"46":0.02805,"88":0.01683,"89":0.60588,"90":0.04488,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"17":0.00561,"18":0.01683,"84":0.00561,"85":0.02244,"86":0.00561,"90":0.00561,"92":0.01122,"95":0.01122,"96":0.02244,"97":0.00561,"98":0.01122,"99":0.01683,"100":0.01683,"101":0.07854,"102":0.06171,"103":2.10375,"104":5.06022,_:"12 13 14 15 16 79 80 81 83 87 88 89 91 93 94 105"},E:{"4":0,"12":0.01122,"13":0.06732,"14":0.2805,"15":0.07854,_:"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1","9.1":0.01122,"10.1":0.01683,"11.1":0.05049,"12.1":0.09537,"13.1":0.40953,"14.1":0.86955,"15.1":0.14586,"15.2-15.3":0.13464,"15.4":0.44319,"15.5":1.81203,"15.6":3.49503,"16.0":0.02244},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.01402,"6.0-6.1":0.00801,"7.0-7.1":0.01201,"8.1-8.4":0.01602,"9.0-9.2":0.01402,"9.3":0.1602,"10.0-10.2":0.01201,"10.3":0.17822,"11.0-11.2":0.04606,"11.3-11.4":0.06608,"12.0-12.1":0.04405,"12.2-12.5":0.83702,"13.0-13.1":0.03004,"13.2":0.01001,"13.3":0.07009,"13.4-13.7":0.1662,"14.0-14.4":0.47258,"14.5-14.8":1.21348,"15.0-15.1":0.29636,"15.2-15.3":0.45455,"15.4":0.66681,"15.5":3.86872,"15.6":11.26373,"16.0":0.09812},P:{"4":0.22666,"5.0-5.4":0.01079,"6.2-6.4":0,"7.2-7.4":0.03238,"8.2":0,"9.2":0.03089,"10.1":0,"11.1-11.2":0.04317,"12.0":0.01079,"13.0":0.06476,"14.0":0.07555,"15.0":0.04317,"16.0":0.14031,"17.0":1.17646,"18.0":1.56502},I:{"0":0,"3":0,"4":0.00268,"2.1":0,"2.2":0.00357,"2.3":0.00089,"4.1":0.00268,"4.2-4.3":0.00625,"4.4":0,"4.4.3-4.4.4":0.03661},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"8":0.01982,"9":0.02973,"11":0.24778,_:"6 7 10 5.5"},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":20.98044},S:{"2.5":0},R:{_:"0"},M:{"0":0.40827},Q:{"10.4":0.00439},O:{"0":0.08341},H:{"0":0.1704}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-sa.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-sa.js index e31160b4a76..7ee134d8114 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-sa.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-sa.js @@ -1 +1 @@ -module.exports={C:{"27":0.00756,"52":0.04911,"60":0.00378,"68":0.00756,"72":0.00378,"78":0.02267,"81":0.00756,"84":0.00756,"86":0.00756,"87":0.00378,"88":0.01511,"89":0.00756,"90":0.01133,"91":0.03778,"92":0.00756,"93":0.00756,"94":0.03022,"95":0.02267,"96":0.54781,"97":0.90294,"98":0.00756,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 79 80 82 83 85 99 3.5 3.6"},D:{"38":0.01511,"47":0.01133,"49":0.07934,"51":0.00756,"53":0.00756,"54":0.00756,"55":0.00378,"58":0.00756,"63":0.00756,"64":0.00378,"65":0.00756,"66":0.01511,"67":0.00756,"68":0.00756,"69":0.01511,"70":0.01133,"71":0.00756,"72":0.00756,"73":0.00378,"74":0.01133,"75":0.03778,"76":0.01133,"77":0.01133,"78":0.01133,"79":0.08689,"80":0.02267,"81":0.02645,"83":0.02645,"84":0.04156,"85":0.03022,"86":0.05667,"87":0.09067,"88":0.02645,"89":0.04534,"90":0.03778,"91":0.4458,"92":0.06045,"93":0.15868,"94":0.06045,"95":0.07178,"96":0.43447,"97":7.72601,"98":18.95423,"99":0.02267,"100":0.01511,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 48 50 52 56 57 59 60 61 62 101"},F:{"36":0.00756,"73":0.00756,"81":0.00378,"82":0.70271,"83":1.74921,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 78 79 80 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.01133,"17":0.00378,"18":0.01511,"84":0.00378,"89":0.00378,"90":0.00378,"91":0.00756,"92":0.00756,"94":0.00378,"95":0.01889,"96":0.02267,"97":0.47225,"98":1.71143,_:"12 13 14 16 79 80 81 83 85 86 87 88 93"},E:{"4":0,"13":0.01511,"14":0.04156,"15":0.034,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 15.4","5.1":0.00756,"11.1":0.00756,"12.1":0.01511,"13.1":0.06045,"14.1":0.14734,"15.1":0.08312,"15.2-15.3":0.15112},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0058,"6.0-6.1":0.00097,"7.0-7.1":0.00387,"8.1-8.4":0.00048,"9.0-9.2":0.00048,"9.3":0.0266,"10.0-10.2":0.00097,"10.3":0.02612,"11.0-11.2":0.00435,"11.3-11.4":0.01596,"12.0-12.1":0.00629,"12.2-12.5":0.21089,"13.0-13.1":0.00677,"13.2":0.0029,"13.3":0.0208,"13.4-13.7":0.07836,"14.0-14.4":0.20509,"14.5-14.8":1.00705,"15.0-15.1":0.75117,"15.2-15.3":2.44845,"15.4":0.01112},P:{"4":0.15406,"5.0-5.4":0.01085,"6.2-6.4":0.0302,"7.2-7.4":0.20541,"8.2":0.02019,"9.2":0.01027,"10.1":0.02055,"11.1-11.2":0.08216,"12.0":0.02054,"13.0":0.1027,"14.0":0.1027,"15.0":0.1027,"16.0":1.57137},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00272,"4.2-4.3":0.00544,"4.4":0,"4.4.3-4.4.4":0.03539},A:{"8":0.00389,"9":0.00389,"11":0.12445,_:"6 7 10 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.112},Q:{"10.4":0},O:{"0":0.04978},H:{"0":0.16494},L:{"0":42.74835},S:{"2.5":0}}; +module.exports={C:{"27":0.00905,"52":0.04524,"68":0.00452,"72":0.00452,"73":0.00452,"78":0.02262,"79":0.00452,"80":0.00452,"81":0.00452,"84":0.00905,"86":0.00905,"88":0.01357,"89":0.00452,"90":0.00905,"91":0.07691,"95":0.00452,"96":0.00452,"97":0.00905,"98":0.00452,"99":0.02714,"100":0.01357,"101":0.0181,"102":0.05429,"103":1.3391,"104":0.28501,_:"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 74 75 76 77 82 83 85 87 92 93 94 105 106 3.5 3.6"},D:{"22":0.00452,"38":0.01357,"47":0.00452,"49":0.07238,"51":0.00905,"53":0.00452,"55":0.00452,"58":0.00452,"63":0.00905,"65":0.00452,"66":0.01357,"67":0.00452,"68":0.01357,"69":0.02714,"70":0.00905,"71":0.00452,"72":0.00905,"73":0.00452,"74":0.01357,"75":0.01357,"76":0.0181,"77":0.00905,"78":0.01357,"79":0.10405,"80":0.02262,"81":0.02714,"83":0.03619,"84":0.05881,"85":0.04524,"86":0.07238,"87":0.11762,"88":0.02262,"89":0.04072,"90":0.03167,"91":0.32573,"92":0.04072,"93":0.03167,"94":0.03167,"95":0.03167,"96":0.07238,"97":0.07691,"98":0.06334,"99":0.095,"100":0.12215,"101":0.11762,"102":0.26239,"103":8.15677,"104":23.38908,"105":0.09953,"106":0.00905,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 48 50 52 54 56 57 59 60 61 62 64 107 108"},F:{"28":0.00452,"85":0.0181,"86":0.00452,"87":0.00452,"88":0.02714,"89":2.44296,"90":0.11762,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"15":0.0181,"17":0.00452,"18":0.01357,"84":0.00452,"92":0.01357,"99":0.00452,"100":0.00905,"101":0.04524,"102":0.01357,"103":0.76456,"104":2.29367,_:"12 13 14 16 79 80 81 83 85 86 87 88 89 90 91 93 94 95 96 97 98 105"},E:{"4":0,"13":0.01357,"14":0.03619,"15":0.00905,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1","9.1":0.01357,"11.1":0.00905,"12.1":0.00905,"13.1":0.05429,"14.1":0.09048,"15.1":0.0181,"15.2-15.3":0.0181,"15.4":0.04976,"15.5":0.18548,"15.6":0.30763,"16.0":0.00452},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0042,"6.0-6.1":0.0012,"7.0-7.1":0.0036,"8.1-8.4":0,"9.0-9.2":0.0006,"9.3":0.02643,"10.0-10.2":0.0006,"10.3":0.02463,"11.0-11.2":0.00661,"11.3-11.4":0.01862,"12.0-12.1":0.00901,"12.2-12.5":0.20242,"13.0-13.1":0.00601,"13.2":0.0042,"13.3":0.01682,"13.4-13.7":0.07088,"14.0-14.4":0.16698,"14.5-14.8":0.52015,"15.0-15.1":0.07388,"15.2-15.3":0.11953,"15.4":0.19341,"15.5":1.22771,"15.6":3.25907,"16.0":0.04625},P:{"4":0.15469,"5.0-5.4":0.01079,"6.2-6.4":0,"7.2-7.4":0.17531,"8.2":0,"9.2":0.03089,"10.1":0,"11.1-11.2":0.05156,"12.0":0.01031,"13.0":0.04125,"14.0":0.05156,"15.0":0.03094,"16.0":0.10313,"17.0":0.78375,"18.0":0.88688},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00404,"4.2-4.3":0.0111,"4.4":0,"4.4.3-4.4.4":0.06154},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"9":0.00905,"11":0.09048,_:"6 7 8 10 5.5"},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":47.48654},S:{"2.5":0},R:{_:"0"},M:{"0":0.13693},Q:{"10.4":0},O:{"0":0.06025},H:{"0":0.20223}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-ww.js b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-ww.js index df07a0d8acd..f9d9fe3ee8d 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-ww.js +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/data/regions/alt-ww.js @@ -1 +1 @@ -module.exports={C:{"2":0.00832,"4":0.01664,"15":0.00832,"18":0.00416,"21":0.00832,"23":0.00416,"25":0.01248,"30":0.00832,"36":0.00416,"43":0.04161,"44":0.00832,"48":0.00416,"51":0.00832,"52":0.06242,"55":0.00832,"56":0.00832,"59":0.00416,"60":0.00832,"63":0.00832,"68":0.00832,"72":0.00832,"77":0.00416,"78":0.05825,"79":0.00832,"80":0.00416,"81":0.01664,"82":0.00416,"83":0.00416,"84":0.01248,"86":0.00416,"87":0.01248,"88":0.01248,"89":0.01248,"90":0.02081,"91":0.09986,"92":0.00832,"93":0.01248,"94":0.04577,"95":0.04577,"96":1.16508,"97":2.02641,"98":0.01664,_:"3 5 6 7 8 9 10 11 12 13 14 16 17 19 20 22 24 26 27 28 29 31 32 33 34 35 37 38 39 40 41 42 45 46 47 49 50 53 54 57 58 61 62 64 65 66 67 69 70 71 73 74 75 76 85 99 3.5 3.6"},D:{"19":0.00832,"22":0.00832,"24":0.01664,"30":0.00832,"33":0.00832,"34":0.00832,"35":0.01664,"38":0.02081,"40":0.01248,"43":0.00832,"47":0.00832,"48":0.02081,"49":0.07074,"51":0.00832,"52":0.00416,"53":0.01248,"54":0.00832,"55":0.01248,"56":0.05409,"57":0.00416,"58":0.00416,"59":0.00416,"60":0.02081,"61":0.00416,"62":0.00832,"63":0.00832,"64":0.02081,"65":0.01248,"66":0.02081,"67":0.01248,"68":0.00832,"69":0.05409,"70":0.04993,"71":0.01664,"72":0.09154,"73":0.00832,"74":0.02497,"75":0.06242,"76":0.05825,"77":0.01664,"78":0.03745,"79":0.21221,"80":0.05825,"81":0.03745,"83":0.10403,"84":0.06658,"85":0.07074,"86":0.07074,"87":0.12899,"88":0.03745,"89":0.06242,"90":0.04993,"91":0.11235,"92":0.09986,"93":0.26214,"94":0.17476,"95":0.09986,"96":0.64912,"97":7.14028,"98":15.53301,"99":0.01664,"100":0.02081,"101":0.00416,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 23 25 26 27 28 29 31 32 36 37 39 41 42 44 45 46 50"},F:{"28":0.00416,"31":0.00416,"36":0.00416,"40":0.00832,"43":0.00416,"46":0.00832,"77":0.00416,"79":0.00416,"80":0.00416,"82":0.22886,"83":0.78643,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 32 33 34 35 37 38 39 41 42 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0.00416},B:{"12":0.00832,"15":0.01248,"16":0.00416,"17":0.01248,"18":0.0749,"84":0.00416,"85":0.00832,"86":0.00416,"87":0.00832,"89":0.00832,"90":0.00416,"91":0.00416,"92":0.01248,"93":0.00416,"94":0.00832,"95":0.02913,"96":0.04993,"97":0.85301,"98":2.98344,_:"13 14 79 80 81 83 88"},E:{"4":0,"5":0.00832,"12":0.00416,"13":0.04993,"14":0.23718,"15":0.14564,_:"0 6 7 8 9 10 11 3.1 3.2 6.1 7.1","5.1":0.01248,"9.1":0.01664,"10.1":0.01248,"11.1":0.02913,"12.1":0.05825,"13.1":0.47852,"14.1":0.87797,"15.1":0.42026,"15.2-15.3":0.93623,"15.4":0.01248},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00299,"5.0-5.1":0.00448,"6.0-6.1":0.12242,"7.0-7.1":0.01941,"8.1-8.4":0.00746,"9.0-9.2":0.01344,"9.3":0.0836,"10.0-10.2":0.03882,"10.3":0.09555,"11.0-11.2":0.06419,"11.3-11.4":0.03732,"12.0-12.1":0.03732,"12.2-12.5":0.55984,"13.0-13.1":0.03732,"13.2":0.01344,"13.3":0.07614,"13.4-13.7":0.24483,"14.0-14.4":0.7778,"14.5-14.8":2.77828,"15.0-15.1":2.12738,"15.2-15.3":7.74216,"15.4":0.04031},P:{"4":0.21833,"5.0-5.4":0.01028,"6.2-6.4":0.0302,"7.2-7.4":0.07278,"8.2":0.02019,"9.2":0.03119,"10.1":0.02055,"11.1-11.2":0.07278,"12.0":0.03119,"13.0":0.10397,"14.0":0.11436,"15.0":0.14555,"16.0":2.10015},I:{"0":0,"3":0,"4":0.01335,"2.1":0,"2.2":0,"2.3":0,"4.1":0.01335,"4.2-4.3":0.06339,"4.4":0,"4.4.3-4.4.4":0.26025},A:{"8":0.03955,"9":0.05932,"10":0.02637,"11":0.61958,_:"6 7 5.5"},K:{_:"0 10 11 12 11.1 11.5 12.1"},J:{"7":0,"10":0},N:{"10":0.04242,"11":0.03845},R:{_:"0"},M:{"0":0.28027},Q:{"10.4":0.16933},O:{"0":0.86417},H:{"0":1.03373},L:{"0":37.2095},S:{"2.5":0.09926}}; +module.exports={C:{"4":0.01928,"11":0.00771,"36":0.00771,"43":0.02313,"44":0.00771,"52":0.05783,"54":0.00771,"56":0.00771,"59":0.00386,"60":0.00386,"68":0.00771,"72":0.00386,"77":0.00386,"78":0.03855,"79":0.00771,"80":0.00771,"81":0.01928,"82":0.00386,"83":0.00771,"84":0.00771,"87":0.00771,"88":0.00771,"89":0.00771,"90":0.00771,"91":0.08481,"93":0.00386,"94":0.02313,"95":0.01157,"96":0.00771,"97":0.00771,"98":0.00771,"99":0.01542,"100":0.01542,"101":0.02313,"102":0.09638,"103":1.8504,"104":0.35466,"105":0.00386,_:"2 3 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 45 46 47 48 49 50 51 53 55 57 58 61 62 63 64 65 66 67 69 70 71 73 74 75 76 85 86 92 106 3.5 3.6"},D:{"22":0.00386,"34":0.00771,"38":0.01542,"40":0.01542,"43":0.00771,"47":0.00771,"48":0.01928,"49":0.05397,"52":0.00771,"53":0.00771,"55":0.00386,"56":0.04241,"57":0.00386,"60":0.01157,"61":0.01157,"62":0.00386,"63":0.01157,"64":0.00386,"65":0.01157,"66":0.03084,"67":0.01157,"68":0.00771,"69":0.06168,"70":0.0347,"71":0.01542,"72":0.0347,"73":0.01157,"74":0.0347,"75":0.04241,"76":0.04626,"77":0.01542,"78":0.0347,"79":0.13493,"80":0.05397,"81":0.03855,"83":0.06939,"84":0.06168,"85":0.08867,"86":0.08867,"87":0.10409,"88":0.02313,"89":0.04241,"90":0.02699,"91":0.05783,"92":0.05397,"93":0.05012,"94":0.04626,"95":0.02699,"96":0.08867,"97":0.0771,"98":0.08096,"99":0.0771,"100":0.12722,"101":0.1542,"102":0.31611,"103":6.11789,"104":15.10004,"105":0.05397,"106":0.01928,"107":0.00771,_:"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 41 42 44 45 46 50 51 54 58 59 108"},F:{"28":0.00771,"31":0.00386,"36":0.00386,"40":0.00771,"46":0.01157,"71":0.00386,"79":0.00386,"85":0.01542,"86":0.00386,"87":0.00386,"88":0.01928,"89":0.84425,"90":0.08481,_:"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 80 81 82 83 84 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1","10.0-10.1":0},B:{"12":0.00386,"15":0.00386,"17":0.00771,"18":0.01928,"84":0.00771,"85":0.00771,"86":0.00386,"87":0.00386,"89":0.00386,"92":0.00771,"96":0.00386,"97":0.00386,"98":0.00771,"99":0.00771,"100":0.01157,"101":0.04626,"102":0.0347,"103":1.06784,"104":2.96835,_:"13 14 16 79 80 81 83 88 90 91 93 94 95 105"},E:{"4":0,"13":0.03084,"14":0.11565,"15":0.03084,_:"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1","5.1":0.01157,"9.1":0.01542,"10.1":0.00771,"11.1":0.02313,"12.1":0.04241,"13.1":0.25443,"14.1":0.32382,"15.1":0.05783,"15.2-15.3":0.05397,"15.4":0.17733,"15.5":0.68619,"15.6":1.39166,"16.0":0.01157},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0.00303,"5.0-5.1":0.00454,"6.0-6.1":0.00454,"7.0-7.1":0.01513,"8.1-8.4":0.00756,"9.0-9.2":0.01513,"9.3":0.06958,"10.0-10.2":0.00756,"10.3":0.08168,"11.0-11.2":0.03933,"11.3-11.4":0.02874,"12.0-12.1":0.03025,"12.2-12.5":0.47949,"13.0-13.1":0.02269,"13.2":0.0121,"13.3":0.04992,"13.4-13.7":0.15882,"14.0-14.4":0.48252,"14.5-14.8":1.06637,"15.0-15.1":0.28739,"15.2-15.3":0.4326,"15.4":0.63831,"15.5":3.16887,"15.6":7.91083,"16.0":0.10588},P:{"4":0.17755,"5.0-5.4":0.01028,"6.2-6.4":0,"7.2-7.4":0.06267,"8.2":0,"9.2":0.01044,"10.1":0,"11.1-11.2":0.04178,"12.0":0.02089,"13.0":0.06267,"14.0":0.06267,"15.0":0.07311,"16.0":0.13578,"17.0":1.00266,"18.0":1.30554},I:{"0":0,"3":0,"4":0.06434,"2.1":0,"2.2":0,"2.3":0,"4.1":0.03509,"4.2-4.3":0.07604,"4.4":0,"4.4.3-4.4.4":0.30999},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"8":0.03682,"9":0.081,"11":0.45657,_:"6 7 10 5.5"},J:{"7":0,"10":0},N:{"10":0,"11":0},L:{"0":42.02107},S:{"2.5":0.02458},R:{_:"0"},M:{"0":0.31954},Q:{"10.4":0.14134},O:{"0":0.74355},H:{"0":1.06464}}; diff --git a/tools/node_modules/eslint/node_modules/caniuse-lite/package.json b/tools/node_modules/eslint/node_modules/caniuse-lite/package.json index 321001c5d27..eb9c96c71d4 100644 --- a/tools/node_modules/eslint/node_modules/caniuse-lite/package.json +++ b/tools/node_modules/eslint/node_modules/caniuse-lite/package.json @@ -1,6 +1,6 @@ { "name": "caniuse-lite", - "version": "1.0.30001314", + "version": "1.0.30001412", "description": "A smaller version of caniuse-db, with only the essentials!", "main": "dist/unpacker/index.js", "files": [ @@ -20,9 +20,15 @@ "url": "http://beneb.info" }, "repository": "browserslist/caniuse-lite", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], "license": "CC-BY-4.0" } diff --git a/tools/node_modules/eslint/node_modules/comment-parser/browser/index.js b/tools/node_modules/eslint/node_modules/comment-parser/browser/index.js index a42c00baa33..c034f5bdc72 100644 --- a/tools/node_modules/eslint/node_modules/comment-parser/browser/index.js +++ b/tools/node_modules/eslint/node_modules/comment-parser/browser/index.js @@ -149,7 +149,7 @@ var CommentParser = (function (exports) { } /** - * Splits the `@prefix` from remaining `Spec.lines[].token.descrioption` into the `tag` token, + * Splits the `@prefix` from remaining `Spec.lines[].token.description` into the `tag` token, * and populates `spec.tag` */ function tagTokenizer() { @@ -388,15 +388,12 @@ var CommentParser = (function (exports) { const parseBlock = getParser$3({ fence }); const parseSpec = getParser$1({ tokenizers }); const joinDescription = getJoiner(spacing); - const notEmpty = (line) => line.tokens.description.trim() != ''; return function (source) { const blocks = []; for (const line of splitLines(source)) { const lines = parseSource(line); if (lines === null) continue; - if (lines.find(notEmpty) === undefined) - continue; const sections = parseBlock(lines); const specs = sections.slice(1).map(parseSpec); blocks.push({ diff --git a/tools/node_modules/eslint/node_modules/comment-parser/es6/parser/index.js b/tools/node_modules/eslint/node_modules/comment-parser/es6/parser/index.js index 01e17686692..236d23e8440 100644 --- a/tools/node_modules/eslint/node_modules/comment-parser/es6/parser/index.js +++ b/tools/node_modules/eslint/node_modules/comment-parser/es6/parser/index.js @@ -19,15 +19,12 @@ export default function getParser({ startLine = 0, fence = '```', spacing = 'com const parseBlock = blockParser({ fence }); const parseSpec = specParser({ tokenizers }); const joinDescription = getDescriptionJoiner(spacing); - const notEmpty = (line) => line.tokens.description.trim() != ''; return function (source) { const blocks = []; for (const line of splitLines(source)) { const lines = parseSource(line); if (lines === null) continue; - if (lines.find(notEmpty) === undefined) - continue; const sections = parseBlock(lines); const specs = sections.slice(1).map(parseSpec); blocks.push({ diff --git a/tools/node_modules/eslint/node_modules/comment-parser/es6/parser/tokenizers/tag.js b/tools/node_modules/eslint/node_modules/comment-parser/es6/parser/tokenizers/tag.js index 4696b00dab0..adbea116d2c 100644 --- a/tools/node_modules/eslint/node_modules/comment-parser/es6/parser/tokenizers/tag.js +++ b/tools/node_modules/eslint/node_modules/comment-parser/es6/parser/tokenizers/tag.js @@ -1,5 +1,5 @@ /** - * Splits the `@prefix` from remaining `Spec.lines[].token.descrioption` into the `tag` token, + * Splits the `@prefix` from remaining `Spec.lines[].token.description` into the `tag` token, * and populates `spec.tag` */ export default function tagTokenizer() { diff --git a/tools/node_modules/eslint/node_modules/comment-parser/lib/parser/index.cjs b/tools/node_modules/eslint/node_modules/comment-parser/lib/parser/index.cjs index dde50d4013e..13aecaf92cb 100644 --- a/tools/node_modules/eslint/node_modules/comment-parser/lib/parser/index.cjs +++ b/tools/node_modules/eslint/node_modules/comment-parser/lib/parser/index.cjs @@ -41,16 +41,12 @@ function getParser({ tokenizers }); const joinDescription = description_1.getJoiner(spacing); - - const notEmpty = line => line.tokens.description.trim() != ''; - return function (source) { const blocks = []; for (const line of util_1.splitLines(source)) { const lines = parseSource(line); if (lines === null) continue; - if (lines.find(notEmpty) === undefined) continue; const sections = parseBlock(lines); const specs = sections.slice(1).map(parseSpec); blocks.push({ diff --git a/tools/node_modules/eslint/node_modules/comment-parser/lib/parser/tokenizers/tag.cjs b/tools/node_modules/eslint/node_modules/comment-parser/lib/parser/tokenizers/tag.cjs index 55aec566c6f..10b4597e436 100644 --- a/tools/node_modules/eslint/node_modules/comment-parser/lib/parser/tokenizers/tag.cjs +++ b/tools/node_modules/eslint/node_modules/comment-parser/lib/parser/tokenizers/tag.cjs @@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); /** - * Splits the `@prefix` from remaining `Spec.lines[].token.descrioption` into the `tag` token, + * Splits the `@prefix` from remaining `Spec.lines[].token.description` into the `tag` token, * and populates `spec.tag` */ diff --git a/tools/node_modules/eslint/node_modules/comment-parser/package.json b/tools/node_modules/eslint/node_modules/comment-parser/package.json index 3ed6fbf63f4..2024b4dcc49 100644 --- a/tools/node_modules/eslint/node_modules/comment-parser/package.json +++ b/tools/node_modules/eslint/node_modules/comment-parser/package.json @@ -1,6 +1,6 @@ { "name": "comment-parser", - "version": "1.3.0", + "version": "1.3.1", "description": "Generic JSDoc-like comment parser", "type": "module", "main": "lib/index.cjs", @@ -81,6 +81,5 @@ "bugs": { "url": "https://github.com/syavorsky/comment-parser/issues" }, - "homepage": "https://github.com/syavorsky/comment-parser", - "dependencies": {} + "homepage": "https://github.com/syavorsky/comment-parser" } diff --git a/tools/node_modules/eslint/node_modules/debug/package.json b/tools/node_modules/eslint/node_modules/debug/package.json index cb7efa8eec3..3bcdc242fc0 100644 --- a/tools/node_modules/eslint/node_modules/debug/package.json +++ b/tools/node_modules/eslint/node_modules/debug/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "4.3.3", + "version": "4.3.4", "repository": { "type": "git", "url": "git://github.com/debug-js/debug.git" diff --git a/tools/node_modules/eslint/node_modules/debug/src/common.js b/tools/node_modules/eslint/node_modules/debug/src/common.js index 6d571d2844d..e3291b20faa 100644 --- a/tools/node_modules/eslint/node_modules/debug/src/common.js +++ b/tools/node_modules/eslint/node_modules/debug/src/common.js @@ -179,7 +179,7 @@ function setup(env) { namespaces = split[i].replace(/\*/g, '.*?'); if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); } else { createDebug.names.push(new RegExp('^' + namespaces + '$')); } diff --git a/tools/node_modules/eslint/node_modules/dir-glob/index.js b/tools/node_modules/eslint/node_modules/dir-glob/index.js new file mode 100644 index 00000000000..c21cdf39314 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/dir-glob/index.js @@ -0,0 +1,75 @@ +'use strict'; +const path = require('path'); +const pathType = require('path-type'); + +const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]; + +const getPath = (filepath, cwd) => { + const pth = filepath[0] === '!' ? filepath.slice(1) : filepath; + return path.isAbsolute(pth) ? pth : path.join(cwd, pth); +}; + +const addExtensions = (file, extensions) => { + if (path.extname(file)) { + return `**/${file}`; + } + + return `**/${file}.${getExtensions(extensions)}`; +}; + +const getGlob = (directory, options) => { + if (options.files && !Array.isArray(options.files)) { + throw new TypeError(`Expected \`files\` to be of type \`Array\` but received type \`${typeof options.files}\``); + } + + if (options.extensions && !Array.isArray(options.extensions)) { + throw new TypeError(`Expected \`extensions\` to be of type \`Array\` but received type \`${typeof options.extensions}\``); + } + + if (options.files && options.extensions) { + return options.files.map(x => path.posix.join(directory, addExtensions(x, options.extensions))); + } + + if (options.files) { + return options.files.map(x => path.posix.join(directory, `**/${x}`)); + } + + if (options.extensions) { + return [path.posix.join(directory, `**/*.${getExtensions(options.extensions)}`)]; + } + + return [path.posix.join(directory, '**')]; +}; + +module.exports = async (input, options) => { + options = { + cwd: process.cwd(), + ...options + }; + + if (typeof options.cwd !== 'string') { + throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof options.cwd}\``); + } + + const globs = await Promise.all([].concat(input).map(async x => { + const isDirectory = await pathType.isDirectory(getPath(x, options.cwd)); + return isDirectory ? getGlob(x, options) : x; + })); + + return [].concat.apply([], globs); // eslint-disable-line prefer-spread +}; + +module.exports.sync = (input, options) => { + options = { + cwd: process.cwd(), + ...options + }; + + if (typeof options.cwd !== 'string') { + throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof options.cwd}\``); + } + + const globs = [].concat(input).map(x => pathType.isDirectorySync(getPath(x, options.cwd)) ? getGlob(x, options) : x); + + return [].concat.apply([], globs); // eslint-disable-line prefer-spread +}; diff --git a/tools/node_modules/eslint/node_modules/dir-glob/license b/tools/node_modules/eslint/node_modules/dir-glob/license new file mode 100644 index 00000000000..db6bc32cc7c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/dir-glob/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Kevin Mårtensson (github.com/kevva) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/dir-glob/package.json b/tools/node_modules/eslint/node_modules/dir-glob/package.json new file mode 100644 index 00000000000..b0a397e66cb --- /dev/null +++ b/tools/node_modules/eslint/node_modules/dir-glob/package.json @@ -0,0 +1,38 @@ +{ + "name": "dir-glob", + "version": "3.0.1", + "description": "Convert directories to glob compatible strings", + "license": "MIT", + "repository": "kevva/dir-glob", + "author": { + "name": "Kevin Mårtensson", + "email": "kevinmartensson@gmail.com", + "url": "github.com/kevva" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava" + }, + "files": [ + "index.js" + ], + "keywords": [ + "convert", + "directory", + "extensions", + "files", + "glob" + ], + "dependencies": { + "path-type": "^4.0.0" + }, + "devDependencies": { + "ava": "^2.1.0", + "del": "^4.1.1", + "make-dir": "^3.0.0", + "rimraf": "^2.5.0", + "xo": "^0.24.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/dir-glob/readme.md b/tools/node_modules/eslint/node_modules/dir-glob/readme.md new file mode 100644 index 00000000000..cb7313f0ab6 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/dir-glob/readme.md @@ -0,0 +1,76 @@ +# dir-glob [![Build Status](https://travis-ci.org/kevva/dir-glob.svg?branch=master)](https://travis-ci.org/kevva/dir-glob) + +> Convert directories to glob compatible strings + + +## Install + +``` +$ npm install dir-glob +``` + + +## Usage + +```js +const dirGlob = require('dir-glob'); + +(async () => { + console.log(await dirGlob(['index.js', 'test.js', 'fixtures'])); + //=> ['index.js', 'test.js', 'fixtures/**'] + + console.log(await dirGlob(['index.js', 'inner_folder'], {cwd: 'fixtures'})); + //=> ['index.js', 'inner_folder/**'] + + console.log(await dirGlob(['lib/**', 'fixtures'], { + files: ['test', 'unicorn'] + extensions: ['js'] + })); + //=> ['lib/**', 'fixtures/**/test.js', 'fixtures/**/unicorn.js'] + + console.log(await dirGlob(['lib/**', 'fixtures'], { + files: ['test', 'unicorn', '*.jsx'], + extensions: ['js', 'png'] + })); + //=> ['lib/**', 'fixtures/**/test.{js,png}', 'fixtures/**/unicorn.{js,png}', 'fixtures/**/*.jsx'] +})(); +``` + + +## API + +### dirGlob(input, options?) + +Returns a `Promise` with globs. + +### dirGlob.sync(input, options?) + +Returns a `string[]` with globs. + +#### input + +Type: `string | string[]` + +Paths. + +#### options + +Type: `object` + +##### extensions + +Type: `string[]` + +Append extensions to the end of your globs. + +##### files + +Type: `string[]` + +Only glob for certain files. + +##### cwd + +Type: `string[]` + +Test in specific directory. diff --git a/tools/node_modules/eslint/node_modules/electron-to-chromium/chromium-versions.js b/tools/node_modules/eslint/node_modules/electron-to-chromium/chromium-versions.js index 590b2d039f9..243a39161d1 100644 --- a/tools/node_modules/eslint/node_modules/electron-to-chromium/chromium-versions.js +++ b/tools/node_modules/eslint/node_modules/electron-to-chromium/chromium-versions.js @@ -41,5 +41,10 @@ module.exports = { "96": "16.0", "98": "17.0", "99": "18.0", - "100": "18.0" + "100": "18.0", + "102": "19.0", + "103": "20.0", + "104": "20.0", + "105": "21.0", + "106": "21.0" }; \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/electron-to-chromium/chromium-versions.json b/tools/node_modules/eslint/node_modules/electron-to-chromium/chromium-versions.json index cb99e212f63..7c0c516bd0e 100644 --- a/tools/node_modules/eslint/node_modules/electron-to-chromium/chromium-versions.json +++ b/tools/node_modules/eslint/node_modules/electron-to-chromium/chromium-versions.json @@ -1 +1 @@ -{"39":"0.20","40":"0.21","41":"0.21","42":"0.25","43":"0.27","44":"0.30","45":"0.31","47":"0.36","49":"0.37","50":"1.1","51":"1.2","52":"1.3","53":"1.4","54":"1.4","56":"1.6","58":"1.7","59":"1.8","61":"2.0","66":"3.0","69":"4.0","72":"5.0","73":"5.0","76":"6.0","78":"7.0","79":"8.0","80":"8.0","82":"9.0","83":"9.0","84":"10.0","85":"10.0","86":"11.0","87":"11.0","89":"12.0","90":"13.0","91":"13.0","92":"14.0","93":"14.0","94":"15.0","95":"16.0","96":"16.0","98":"17.0","99":"18.0","100":"18.0"} \ No newline at end of file +{"39":"0.20","40":"0.21","41":"0.21","42":"0.25","43":"0.27","44":"0.30","45":"0.31","47":"0.36","49":"0.37","50":"1.1","51":"1.2","52":"1.3","53":"1.4","54":"1.4","56":"1.6","58":"1.7","59":"1.8","61":"2.0","66":"3.0","69":"4.0","72":"5.0","73":"5.0","76":"6.0","78":"7.0","79":"8.0","80":"8.0","82":"9.0","83":"9.0","84":"10.0","85":"10.0","86":"11.0","87":"11.0","89":"12.0","90":"13.0","91":"13.0","92":"14.0","93":"14.0","94":"15.0","95":"16.0","96":"16.0","98":"17.0","99":"18.0","100":"18.0","102":"19.0","103":"20.0","104":"20.0","105":"21.0","106":"21.0"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/electron-to-chromium/full-chromium-versions.js b/tools/node_modules/eslint/node_modules/electron-to-chromium/full-chromium-versions.js index bfefaebe3db..c67b55ea2ac 100644 --- a/tools/node_modules/eslint/node_modules/electron-to-chromium/full-chromium-versions.js +++ b/tools/node_modules/eslint/node_modules/electron-to-chromium/full-chromium-versions.js @@ -1500,7 +1500,9 @@ module.exports = { "14.2.4", "14.2.5", "14.2.6", - "14.2.7" + "14.2.7", + "14.2.8", + "14.2.9" ], "94.0.4584.0": [ "15.0.0-alpha.3", @@ -1590,7 +1592,16 @@ module.exports = { "15.3.6", "15.3.7", "15.4.0", - "15.4.1" + "15.4.1", + "15.4.2", + "15.5.0", + "15.5.1", + "15.5.2", + "15.5.3", + "15.5.4", + "15.5.5", + "15.5.6", + "15.5.7" ], "95.0.4629.0": [ "16.0.0-alpha.1", @@ -1683,7 +1694,17 @@ module.exports = { "96.0.4664.174": [ "16.0.9", "16.0.10", - "16.1.0" + "16.1.0", + "16.1.1", + "16.2.0", + "16.2.1", + "16.2.2", + "16.2.3", + "16.2.4", + "16.2.5", + "16.2.6", + "16.2.7", + "16.2.8" ], "96.0.4664.4": [ "17.0.0-alpha.1", @@ -1773,7 +1794,24 @@ module.exports = { ], "98.0.4758.109": [ "17.1.1", - "17.1.2" + "17.1.2", + "17.2.0" + ], + "98.0.4758.141": [ + "17.3.0", + "17.3.1", + "17.4.0", + "17.4.1", + "17.4.2", + "17.4.3", + "17.4.4", + "17.4.5", + "17.4.6", + "17.4.7", + "17.4.8", + "17.4.9", + "17.4.10", + "17.4.11" ], "99.0.4767.0": [ "18.0.0-alpha.1", @@ -1805,9 +1843,305 @@ module.exports = { "100.0.4894.0": [ "18.0.0-beta.1", "18.0.0-beta.2", + "18.0.0-beta.3", + "18.0.0-beta.4", + "18.0.0-beta.5", + "18.0.0-beta.6", "19.0.0-nightly.20220308", "19.0.0-nightly.20220309", "19.0.0-nightly.20220310", - "19.0.0-nightly.20220311" + "19.0.0-nightly.20220311", + "19.0.0-nightly.20220314", + "19.0.0-nightly.20220315", + "19.0.0-nightly.20220316", + "19.0.0-nightly.20220317", + "19.0.0-nightly.20220318", + "19.0.0-nightly.20220321", + "19.0.0-nightly.20220322", + "19.0.0-nightly.20220323", + "19.0.0-nightly.20220324" + ], + "100.0.4896.56": [ + "18.0.0" + ], + "100.0.4896.60": [ + "18.0.1", + "18.0.2" + ], + "100.0.4896.75": [ + "18.0.3", + "18.0.4" + ], + "100.0.4896.127": [ + "18.1.0" + ], + "100.0.4896.143": [ + "18.2.0", + "18.2.1", + "18.2.2", + "18.2.3" + ], + "100.0.4896.160": [ + "18.2.4", + "18.3.0", + "18.3.1", + "18.3.2", + "18.3.3", + "18.3.4", + "18.3.5", + "18.3.6", + "18.3.7", + "18.3.8", + "18.3.9", + "18.3.11", + "18.3.12", + "18.3.13", + "18.3.14" + ], + "102.0.4962.3": [ + "19.0.0-alpha.1", + "19.0.0-nightly.20220328", + "19.0.0-nightly.20220329", + "20.0.0-nightly.20220330" + ], + "102.0.4971.0": [ + "19.0.0-alpha.2", + "19.0.0-alpha.3", + "20.0.0-nightly.20220411" + ], + "102.0.4989.0": [ + "19.0.0-alpha.4", + "19.0.0-alpha.5", + "20.0.0-nightly.20220414", + "20.0.0-nightly.20220415", + "20.0.0-nightly.20220418", + "20.0.0-nightly.20220419", + "20.0.0-nightly.20220420", + "20.0.0-nightly.20220421" + ], + "102.0.4999.0": [ + "19.0.0-beta.1", + "19.0.0-beta.2", + "19.0.0-beta.3", + "20.0.0-nightly.20220425", + "20.0.0-nightly.20220426", + "20.0.0-nightly.20220427", + "20.0.0-nightly.20220428", + "20.0.0-nightly.20220429", + "20.0.0-nightly.20220502", + "20.0.0-nightly.20220503", + "20.0.0-nightly.20220504", + "20.0.0-nightly.20220505", + "20.0.0-nightly.20220506", + "20.0.0-nightly.20220509", + "20.0.0-nightly.20220511", + "20.0.0-nightly.20220512", + "20.0.0-nightly.20220513", + "20.0.0-nightly.20220516", + "20.0.0-nightly.20220517" + ], + "102.0.5005.27": [ + "19.0.0-beta.4" + ], + "102.0.5005.40": [ + "19.0.0-beta.5", + "19.0.0-beta.6", + "19.0.0-beta.7" + ], + "102.0.5005.49": [ + "19.0.0-beta.8" + ], + "102.0.4961.0": [ + "19.0.0-nightly.20220325" + ], + "102.0.5005.61": [ + "19.0.0", + "19.0.1" + ], + "102.0.5005.63": [ + "19.0.2", + "19.0.3", + "19.0.4" + ], + "102.0.5005.115": [ + "19.0.5", + "19.0.6" + ], + "102.0.5005.134": [ + "19.0.7" + ], + "102.0.5005.148": [ + "19.0.8" + ], + "102.0.5005.167": [ + "19.0.9", + "19.0.10", + "19.0.11", + "19.0.12", + "19.0.13", + "19.0.14", + "19.0.15", + "19.0.16", + "19.0.17", + "19.1.0" + ], + "103.0.5044.0": [ + "20.0.0-alpha.1", + "20.0.0-nightly.20220518", + "20.0.0-nightly.20220519", + "20.0.0-nightly.20220520", + "20.0.0-nightly.20220523", + "20.0.0-nightly.20220524", + "21.0.0-nightly.20220526", + "21.0.0-nightly.20220527", + "21.0.0-nightly.20220530", + "21.0.0-nightly.20220531" + ], + "104.0.5073.0": [ + "20.0.0-alpha.2", + "20.0.0-alpha.3", + "20.0.0-alpha.4", + "20.0.0-alpha.5", + "20.0.0-alpha.6", + "20.0.0-alpha.7", + "20.0.0-beta.1", + "20.0.0-beta.2", + "20.0.0-beta.3", + "20.0.0-beta.4", + "20.0.0-beta.5", + "20.0.0-beta.6", + "20.0.0-beta.7", + "20.0.0-beta.8", + "21.0.0-nightly.20220602", + "21.0.0-nightly.20220603", + "21.0.0-nightly.20220606", + "21.0.0-nightly.20220607", + "21.0.0-nightly.20220608", + "21.0.0-nightly.20220609", + "21.0.0-nightly.20220610", + "21.0.0-nightly.20220613", + "21.0.0-nightly.20220614", + "21.0.0-nightly.20220615", + "21.0.0-nightly.20220616", + "21.0.0-nightly.20220617", + "21.0.0-nightly.20220620", + "21.0.0-nightly.20220621", + "21.0.0-nightly.20220622", + "21.0.0-nightly.20220623", + "21.0.0-nightly.20220624", + "21.0.0-nightly.20220627" + ], + "104.0.5112.39": [ + "20.0.0-beta.9" + ], + "104.0.5112.48": [ + "20.0.0-beta.10", + "20.0.0-beta.11", + "20.0.0-beta.12" + ], + "104.0.5112.57": [ + "20.0.0-beta.13" + ], + "104.0.5112.65": [ + "20.0.0" + ], + "104.0.5112.81": [ + "20.0.1", + "20.0.2", + "20.0.3" + ], + "104.0.5112.102": [ + "20.1.0", + "20.1.1" + ], + "104.0.5112.114": [ + "20.1.2", + "20.1.3", + "20.1.4" + ], + "104.0.5112.124": [ + "20.2.0" + ], + "105.0.5187.0": [ + "21.0.0-alpha.1", + "21.0.0-alpha.2", + "21.0.0-alpha.3", + "21.0.0-alpha.4", + "21.0.0-alpha.5", + "21.0.0-nightly.20220720", + "21.0.0-nightly.20220721", + "21.0.0-nightly.20220722", + "21.0.0-nightly.20220725", + "21.0.0-nightly.20220726", + "21.0.0-nightly.20220727", + "21.0.0-nightly.20220728", + "21.0.0-nightly.20220801", + "21.0.0-nightly.20220802", + "22.0.0-nightly.20220808", + "22.0.0-nightly.20220809", + "22.0.0-nightly.20220810", + "22.0.0-nightly.20220811", + "22.0.0-nightly.20220812", + "22.0.0-nightly.20220815", + "22.0.0-nightly.20220816", + "22.0.0-nightly.20220817" + ], + "106.0.5216.0": [ + "21.0.0-alpha.6", + "21.0.0-beta.1", + "21.0.0-beta.2", + "21.0.0-beta.3", + "21.0.0-beta.4", + "21.0.0-beta.5", + "22.0.0-nightly.20220822", + "22.0.0-nightly.20220823", + "22.0.0-nightly.20220824", + "22.0.0-nightly.20220825", + "22.0.0-nightly.20220829", + "22.0.0-nightly.20220830", + "22.0.0-nightly.20220831", + "22.0.0-nightly.20220901", + "22.0.0-nightly.20220902", + "22.0.0-nightly.20220905" + ], + "106.0.5249.40": [ + "21.0.0-beta.6", + "21.0.0-beta.7", + "21.0.0-beta.8" + ], + "105.0.5129.0": [ + "21.0.0-nightly.20220628", + "21.0.0-nightly.20220629", + "21.0.0-nightly.20220630", + "21.0.0-nightly.20220701", + "21.0.0-nightly.20220704", + "21.0.0-nightly.20220705", + "21.0.0-nightly.20220706", + "21.0.0-nightly.20220707", + "21.0.0-nightly.20220708", + "21.0.0-nightly.20220711", + "21.0.0-nightly.20220712", + "21.0.0-nightly.20220713" + ], + "105.0.5173.0": [ + "21.0.0-nightly.20220715", + "21.0.0-nightly.20220718", + "21.0.0-nightly.20220719" + ], + "107.0.5274.0": [ + "22.0.0-nightly.20220908" + ], + "107.0.5286.0": [ + "22.0.0-nightly.20220909", + "22.0.0-nightly.20220912", + "22.0.0-nightly.20220913", + "22.0.0-nightly.20220914", + "22.0.0-nightly.20220915", + "22.0.0-nightly.20220916", + "22.0.0-nightly.20220919", + "22.0.0-nightly.20220920", + "22.0.0-nightly.20220921", + "22.0.0-nightly.20220922", + "22.0.0-nightly.20220923" ] }; \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/electron-to-chromium/full-chromium-versions.json b/tools/node_modules/eslint/node_modules/electron-to-chromium/full-chromium-versions.json index 2e3a63cbb41..c7e2aa772ef 100644 --- a/tools/node_modules/eslint/node_modules/electron-to-chromium/full-chromium-versions.json +++ b/tools/node_modules/eslint/node_modules/electron-to-chromium/full-chromium-versions.json @@ -1 +1 @@ -{"39.0.2171.65":["0.20.0","0.20.1","0.20.2","0.20.3","0.20.4","0.20.5","0.20.6","0.20.7","0.20.8"],"40.0.2214.91":["0.21.0","0.21.1","0.21.2"],"41.0.2272.76":["0.21.3","0.22.1","0.22.2","0.22.3","0.23.0","0.24.0"],"42.0.2311.107":["0.25.0","0.25.1","0.25.2","0.25.3","0.26.0","0.26.1","0.27.0","0.27.1"],"43.0.2357.65":["0.27.2","0.27.3","0.28.0","0.28.1","0.28.2","0.28.3","0.29.1","0.29.2"],"44.0.2403.125":["0.30.4","0.31.0"],"45.0.2454.85":["0.31.2","0.32.2","0.32.3","0.33.0","0.33.1","0.33.2","0.33.3","0.33.4","0.33.6","0.33.7","0.33.8","0.33.9","0.34.0","0.34.1","0.34.2","0.34.3","0.34.4","0.35.1","0.35.2","0.35.3","0.35.4","0.35.5"],"47.0.2526.73":["0.36.0","0.36.2","0.36.3","0.36.4"],"47.0.2526.110":["0.36.5","0.36.6","0.36.7","0.36.8","0.36.9","0.36.10","0.36.11","0.36.12"],"49.0.2623.75":["0.37.0","0.37.1","0.37.3","0.37.4","0.37.5","0.37.6","0.37.7","0.37.8","1.0.0","1.0.1","1.0.2"],"50.0.2661.102":["1.1.0","1.1.1","1.1.2","1.1.3"],"51.0.2704.63":["1.2.0","1.2.1"],"51.0.2704.84":["1.2.2","1.2.3"],"51.0.2704.103":["1.2.4","1.2.5"],"51.0.2704.106":["1.2.6","1.2.7","1.2.8"],"52.0.2743.82":["1.3.0","1.3.1","1.3.2","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.3.9","1.3.10","1.3.13","1.3.14","1.3.15"],"53.0.2785.113":["1.4.0","1.4.1","1.4.2","1.4.3","1.4.4","1.4.5"],"53.0.2785.143":["1.4.6","1.4.7","1.4.8","1.4.10","1.4.11","1.4.13","1.4.14","1.4.15","1.4.16"],"54.0.2840.51":["1.4.12"],"54.0.2840.101":["1.5.0","1.5.1"],"56.0.2924.87":["1.6.0","1.6.1","1.6.2","1.6.3","1.6.4","1.6.5","1.6.6","1.6.7","1.6.8","1.6.9","1.6.10","1.6.11","1.6.12","1.6.13","1.6.14","1.6.15","1.6.16","1.6.17","1.6.18"],"58.0.3029.110":["1.7.0","1.7.1","1.7.2","1.7.3","1.7.4","1.7.5","1.7.6","1.7.7","1.7.8","1.7.9","1.7.10","1.7.11","1.7.12","1.7.13","1.7.14","1.7.15","1.7.16"],"59.0.3071.115":["1.8.0","1.8.1","1.8.2-beta.1","1.8.2-beta.2","1.8.2-beta.3","1.8.2-beta.4","1.8.2-beta.5","1.8.2","1.8.3","1.8.4","1.8.5","1.8.6","1.8.7","1.8.8"],"61.0.3163.100":["2.0.0-beta.1","2.0.0-beta.2","2.0.0-beta.3","2.0.0-beta.4","2.0.0-beta.5","2.0.0-beta.6","2.0.0-beta.7","2.0.0-beta.8","2.0.0","2.0.1","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8-nightly.20180819","2.0.8-nightly.20180820","2.0.8","2.0.9","2.0.10","2.0.11","2.0.12","2.0.13","2.0.14","2.0.15","2.0.16","2.0.17","2.0.18","2.1.0-unsupported.20180809"],"66.0.3359.181":["3.0.0-beta.1","3.0.0-beta.2","3.0.0-beta.3","3.0.0-beta.4","3.0.0-beta.5","3.0.0-beta.6","3.0.0-beta.7","3.0.0-beta.8","3.0.0-beta.9","3.0.0-beta.10","3.0.0-beta.11","3.0.0-beta.12","3.0.0-beta.13","3.0.0-nightly.20180818","3.0.0-nightly.20180821","3.0.0-nightly.20180823","3.0.0-nightly.20180904","3.0.0","3.0.1","3.0.2","3.0.3","3.0.4","3.0.5","3.0.6","3.0.7","3.0.8","3.0.9","3.0.10","3.0.11","3.0.12","3.0.13","3.0.14","3.0.15","3.0.16","3.1.0-beta.1","3.1.0-beta.2","3.1.0-beta.3","3.1.0-beta.4","3.1.0-beta.5","3.1.0","3.1.1","3.1.2","3.1.3","3.1.4","3.1.5","3.1.6","3.1.7","3.1.8","3.1.9","3.1.10","3.1.11","3.1.12","3.1.13","4.0.0-nightly.20180817","4.0.0-nightly.20180819","4.0.0-nightly.20180821"],"69.0.3497.106":["4.0.0-beta.1","4.0.0-beta.2","4.0.0-beta.3","4.0.0-beta.4","4.0.0-beta.5","4.0.0-beta.6","4.0.0-beta.7","4.0.0-beta.8","4.0.0-beta.9","4.0.0-beta.10","4.0.0-beta.11","4.0.0-nightly.20181010","4.0.0","4.0.1","4.0.2","4.0.3","4.0.4","4.0.5","4.0.6"],"67.0.3396.99":["4.0.0-nightly.20180929"],"68.0.3440.128":["4.0.0-nightly.20181006"],"69.0.3497.128":["4.0.7","4.0.8","4.1.0","4.1.1","4.1.2","4.1.3","4.1.4","4.1.5","4.2.0","4.2.1","4.2.2","4.2.3","4.2.4","4.2.5","4.2.6","4.2.7","4.2.8","4.2.9","4.2.10","4.2.11","4.2.12"],"72.0.3626.52":["5.0.0-beta.1","5.0.0-beta.2"],"73.0.3683.27":["5.0.0-beta.3"],"73.0.3683.54":["5.0.0-beta.4"],"73.0.3683.61":["5.0.0-beta.5"],"73.0.3683.84":["5.0.0-beta.6"],"73.0.3683.94":["5.0.0-beta.7"],"73.0.3683.104":["5.0.0-beta.8"],"73.0.3683.117":["5.0.0-beta.9"],"70.0.3538.110":["5.0.0-nightly.20190107"],"71.0.3578.98":["5.0.0-nightly.20190121","5.0.0-nightly.20190122"],"73.0.3683.119":["5.0.0"],"73.0.3683.121":["5.0.1","5.0.2","5.0.3","5.0.4","5.0.5","5.0.6","5.0.7","5.0.8","5.0.9","5.0.10","5.0.11","5.0.12","5.0.13"],"76.0.3774.1":["6.0.0-beta.1"],"76.0.3783.1":["6.0.0-beta.2","6.0.0-beta.3","6.0.0-beta.4"],"76.0.3805.4":["6.0.0-beta.5"],"76.0.3809.3":["6.0.0-beta.6"],"76.0.3809.22":["6.0.0-beta.7"],"76.0.3809.26":["6.0.0-beta.8","6.0.0-beta.9"],"76.0.3809.37":["6.0.0-beta.10"],"76.0.3809.42":["6.0.0-beta.11"],"76.0.3809.54":["6.0.0-beta.12"],"76.0.3809.60":["6.0.0-beta.13"],"76.0.3809.68":["6.0.0-beta.14"],"76.0.3809.74":["6.0.0-beta.15"],"72.0.3626.107":["6.0.0-nightly.20190212"],"72.0.3626.110":["6.0.0-nightly.20190213"],"74.0.3724.8":["6.0.0-nightly.20190311"],"76.0.3809.88":["6.0.0"],"76.0.3809.102":["6.0.1"],"76.0.3809.110":["6.0.2"],"76.0.3809.126":["6.0.3"],"76.0.3809.131":["6.0.4"],"76.0.3809.136":["6.0.5"],"76.0.3809.138":["6.0.6"],"76.0.3809.139":["6.0.7"],"76.0.3809.146":["6.0.8","6.0.9","6.0.10","6.0.11","6.0.12","6.1.0","6.1.1","6.1.2","6.1.3","6.1.4","6.1.5","6.1.6","6.1.7","6.1.8","6.1.9","6.1.10","6.1.11","6.1.12"],"78.0.3866.0":["7.0.0-beta.1","7.0.0-beta.2","7.0.0-beta.3","7.0.0-nightly.20190727","7.0.0-nightly.20190728","7.0.0-nightly.20190729","7.0.0-nightly.20190730","7.0.0-nightly.20190731","8.0.0-nightly.20190801","8.0.0-nightly.20190802"],"78.0.3896.6":["7.0.0-beta.4"],"78.0.3905.1":["7.0.0-beta.5","7.0.0-beta.6","7.0.0-beta.7","7.0.0"],"76.0.3784.0":["7.0.0-nightly.20190521"],"76.0.3806.0":["7.0.0-nightly.20190529","7.0.0-nightly.20190530","7.0.0-nightly.20190531","7.0.0-nightly.20190602","7.0.0-nightly.20190603"],"77.0.3814.0":["7.0.0-nightly.20190604"],"77.0.3815.0":["7.0.0-nightly.20190605","7.0.0-nightly.20190606","7.0.0-nightly.20190607","7.0.0-nightly.20190608","7.0.0-nightly.20190609","7.0.0-nightly.20190611","7.0.0-nightly.20190612","7.0.0-nightly.20190613","7.0.0-nightly.20190615","7.0.0-nightly.20190616","7.0.0-nightly.20190618","7.0.0-nightly.20190619","7.0.0-nightly.20190622","7.0.0-nightly.20190623","7.0.0-nightly.20190624","7.0.0-nightly.20190627","7.0.0-nightly.20190629","7.0.0-nightly.20190630","7.0.0-nightly.20190701","7.0.0-nightly.20190702"],"77.0.3843.0":["7.0.0-nightly.20190704","7.0.0-nightly.20190705"],"77.0.3848.0":["7.0.0-nightly.20190719","7.0.0-nightly.20190720","7.0.0-nightly.20190721"],"77.0.3864.0":["7.0.0-nightly.20190726"],"78.0.3904.92":["7.0.1"],"78.0.3904.94":["7.1.0"],"78.0.3904.99":["7.1.1"],"78.0.3904.113":["7.1.2"],"78.0.3904.126":["7.1.3"],"78.0.3904.130":["7.1.4","7.1.5","7.1.6","7.1.7","7.1.8","7.1.9","7.1.10","7.1.11","7.1.12","7.1.13","7.1.14","7.2.0","7.2.1","7.2.2","7.2.3","7.2.4","7.3.0","7.3.1","7.3.2","7.3.3"],"79.0.3931.0":["8.0.0-beta.1","8.0.0-beta.2","8.0.0-nightly.20191019","8.0.0-nightly.20191020","8.0.0-nightly.20191021","8.0.0-nightly.20191023"],"80.0.3955.0":["8.0.0-beta.3","8.0.0-beta.4"],"80.0.3987.14":["8.0.0-beta.5"],"80.0.3987.51":["8.0.0-beta.6"],"80.0.3987.59":["8.0.0-beta.7"],"80.0.3987.75":["8.0.0-beta.8","8.0.0-beta.9"],"78.0.3871.0":["8.0.0-nightly.20190803","8.0.0-nightly.20190806","8.0.0-nightly.20190807","8.0.0-nightly.20190808","8.0.0-nightly.20190809","8.0.0-nightly.20190810","8.0.0-nightly.20190811","8.0.0-nightly.20190812","8.0.0-nightly.20190813","8.0.0-nightly.20190814","8.0.0-nightly.20190815"],"78.0.3881.0":["8.0.0-nightly.20190816","8.0.0-nightly.20190817","8.0.0-nightly.20190818","8.0.0-nightly.20190819","8.0.0-nightly.20190820"],"78.0.3892.0":["8.0.0-nightly.20190824","8.0.0-nightly.20190825","8.0.0-nightly.20190827","8.0.0-nightly.20190828","8.0.0-nightly.20190830","8.0.0-nightly.20190901","8.0.0-nightly.20190902","8.0.0-nightly.20190907","8.0.0-nightly.20190909","8.0.0-nightly.20190910","8.0.0-nightly.20190911","8.0.0-nightly.20190913","8.0.0-nightly.20190914","8.0.0-nightly.20190915","8.0.0-nightly.20190917"],"79.0.3915.0":["8.0.0-nightly.20190919","8.0.0-nightly.20190920"],"79.0.3919.0":["8.0.0-nightly.20190923","8.0.0-nightly.20190924","8.0.0-nightly.20190926","8.0.0-nightly.20190929","8.0.0-nightly.20190930","8.0.0-nightly.20191001","8.0.0-nightly.20191004","8.0.0-nightly.20191005","8.0.0-nightly.20191006","8.0.0-nightly.20191009","8.0.0-nightly.20191011","8.0.0-nightly.20191012","8.0.0-nightly.20191017"],"80.0.3952.0":["8.0.0-nightly.20191101","8.0.0-nightly.20191105"],"80.0.3987.86":["8.0.0","8.0.1","8.0.2"],"80.0.3987.134":["8.0.3"],"80.0.3987.137":["8.1.0"],"80.0.3987.141":["8.1.1"],"80.0.3987.158":["8.2.0"],"80.0.3987.163":["8.2.1","8.2.2","8.2.3","8.5.3","8.5.4","8.5.5"],"80.0.3987.165":["8.2.4","8.2.5","8.3.0","8.3.1","8.3.2","8.3.3","8.3.4","8.4.0","8.4.1","8.5.0","8.5.1","8.5.2"],"82.0.4048.0":["9.0.0-beta.1","9.0.0-beta.2","9.0.0-beta.3","9.0.0-beta.4","9.0.0-beta.5"],"82.0.4058.2":["9.0.0-beta.6","9.0.0-beta.7","9.0.0-beta.9"],"82.0.4085.10":["9.0.0-beta.10"],"82.0.4085.14":["9.0.0-beta.12","9.0.0-beta.13"],"82.0.4085.27":["9.0.0-beta.14"],"83.0.4102.3":["9.0.0-beta.15","9.0.0-beta.16"],"83.0.4103.14":["9.0.0-beta.17"],"83.0.4103.16":["9.0.0-beta.18"],"83.0.4103.24":["9.0.0-beta.19"],"83.0.4103.26":["9.0.0-beta.20","9.0.0-beta.21"],"83.0.4103.34":["9.0.0-beta.22"],"83.0.4103.44":["9.0.0-beta.23"],"83.0.4103.45":["9.0.0-beta.24"],"80.0.3954.0":["9.0.0-nightly.20191121","9.0.0-nightly.20191122","9.0.0-nightly.20191123","9.0.0-nightly.20191124","9.0.0-nightly.20191129","9.0.0-nightly.20191130","9.0.0-nightly.20191201","9.0.0-nightly.20191202","9.0.0-nightly.20191203","9.0.0-nightly.20191204","9.0.0-nightly.20191210"],"81.0.3994.0":["9.0.0-nightly.20191220","9.0.0-nightly.20191221","9.0.0-nightly.20191222","9.0.0-nightly.20191223","9.0.0-nightly.20191224","9.0.0-nightly.20191225","9.0.0-nightly.20191226","9.0.0-nightly.20191228","9.0.0-nightly.20191229","9.0.0-nightly.20191230","9.0.0-nightly.20191231","9.0.0-nightly.20200101","9.0.0-nightly.20200103","9.0.0-nightly.20200104","9.0.0-nightly.20200105","9.0.0-nightly.20200106","9.0.0-nightly.20200108","9.0.0-nightly.20200109","9.0.0-nightly.20200110","9.0.0-nightly.20200111","9.0.0-nightly.20200113","9.0.0-nightly.20200115","9.0.0-nightly.20200116","9.0.0-nightly.20200117"],"81.0.4030.0":["9.0.0-nightly.20200119","9.0.0-nightly.20200121"],"83.0.4103.64":["9.0.0"],"83.0.4103.94":["9.0.1","9.0.2"],"83.0.4103.100":["9.0.3"],"83.0.4103.104":["9.0.4"],"83.0.4103.119":["9.0.5"],"83.0.4103.122":["9.1.0","9.1.1","9.1.2","9.2.0","9.2.1","9.3.0","9.3.1","9.3.2","9.3.3","9.3.4","9.3.5","9.4.0","9.4.1","9.4.2","9.4.3","9.4.4"],"84.0.4129.0":["10.0.0-beta.1","10.0.0-beta.2","10.0.0-nightly.20200501","10.0.0-nightly.20200504","10.0.0-nightly.20200505","10.0.0-nightly.20200506","10.0.0-nightly.20200507","10.0.0-nightly.20200508","10.0.0-nightly.20200511","10.0.0-nightly.20200512","10.0.0-nightly.20200513","10.0.0-nightly.20200514","10.0.0-nightly.20200515","10.0.0-nightly.20200518","10.0.0-nightly.20200519","10.0.0-nightly.20200520","10.0.0-nightly.20200521","11.0.0-nightly.20200525","11.0.0-nightly.20200526"],"85.0.4161.2":["10.0.0-beta.3","10.0.0-beta.4"],"85.0.4181.1":["10.0.0-beta.8","10.0.0-beta.9"],"85.0.4183.19":["10.0.0-beta.10"],"85.0.4183.20":["10.0.0-beta.11"],"85.0.4183.26":["10.0.0-beta.12"],"85.0.4183.39":["10.0.0-beta.13","10.0.0-beta.14","10.0.0-beta.15","10.0.0-beta.17","10.0.0-beta.19","10.0.0-beta.20","10.0.0-beta.21"],"85.0.4183.70":["10.0.0-beta.23"],"85.0.4183.78":["10.0.0-beta.24"],"85.0.4183.80":["10.0.0-beta.25"],"82.0.4050.0":["10.0.0-nightly.20200209","10.0.0-nightly.20200210","10.0.0-nightly.20200211","10.0.0-nightly.20200216","10.0.0-nightly.20200217","10.0.0-nightly.20200218","10.0.0-nightly.20200221","10.0.0-nightly.20200222","10.0.0-nightly.20200223","10.0.0-nightly.20200226","10.0.0-nightly.20200303"],"82.0.4076.0":["10.0.0-nightly.20200304","10.0.0-nightly.20200305","10.0.0-nightly.20200306","10.0.0-nightly.20200309","10.0.0-nightly.20200310"],"82.0.4083.0":["10.0.0-nightly.20200311"],"83.0.4086.0":["10.0.0-nightly.20200316"],"83.0.4087.0":["10.0.0-nightly.20200317","10.0.0-nightly.20200318","10.0.0-nightly.20200320","10.0.0-nightly.20200323","10.0.0-nightly.20200324","10.0.0-nightly.20200325","10.0.0-nightly.20200326","10.0.0-nightly.20200327","10.0.0-nightly.20200330","10.0.0-nightly.20200331","10.0.0-nightly.20200401","10.0.0-nightly.20200402","10.0.0-nightly.20200403","10.0.0-nightly.20200406"],"83.0.4095.0":["10.0.0-nightly.20200408","10.0.0-nightly.20200410","10.0.0-nightly.20200413"],"84.0.4114.0":["10.0.0-nightly.20200414"],"84.0.4115.0":["10.0.0-nightly.20200415","10.0.0-nightly.20200416","10.0.0-nightly.20200417"],"84.0.4121.0":["10.0.0-nightly.20200422","10.0.0-nightly.20200423"],"84.0.4125.0":["10.0.0-nightly.20200427","10.0.0-nightly.20200428","10.0.0-nightly.20200429","10.0.0-nightly.20200430"],"85.0.4183.84":["10.0.0"],"85.0.4183.86":["10.0.1"],"85.0.4183.87":["10.1.0"],"85.0.4183.93":["10.1.1"],"85.0.4183.98":["10.1.2"],"85.0.4183.121":["10.1.3","10.1.4","10.1.5","10.1.6","10.1.7","10.2.0","10.3.0","10.3.1","10.3.2","10.4.0","10.4.1","10.4.2","10.4.3","10.4.4","10.4.5","10.4.6","10.4.7"],"86.0.4234.0":["11.0.0-beta.1","11.0.0-beta.3","11.0.0-beta.4","11.0.0-beta.5","11.0.0-beta.6","11.0.0-beta.7","11.0.0-nightly.20200822","11.0.0-nightly.20200824","11.0.0-nightly.20200825","11.0.0-nightly.20200826","12.0.0-nightly.20200827","12.0.0-nightly.20200831","12.0.0-nightly.20200902","12.0.0-nightly.20200903","12.0.0-nightly.20200907","12.0.0-nightly.20200910","12.0.0-nightly.20200911","12.0.0-nightly.20200914"],"87.0.4251.1":["11.0.0-beta.8","11.0.0-beta.9","11.0.0-beta.11"],"87.0.4280.11":["11.0.0-beta.12","11.0.0-beta.13"],"87.0.4280.27":["11.0.0-beta.16","11.0.0-beta.17","11.0.0-beta.18","11.0.0-beta.19"],"87.0.4280.40":["11.0.0-beta.20"],"87.0.4280.47":["11.0.0-beta.22","11.0.0-beta.23"],"85.0.4156.0":["11.0.0-nightly.20200529"],"85.0.4162.0":["11.0.0-nightly.20200602","11.0.0-nightly.20200603","11.0.0-nightly.20200604","11.0.0-nightly.20200609","11.0.0-nightly.20200610","11.0.0-nightly.20200611","11.0.0-nightly.20200615","11.0.0-nightly.20200616","11.0.0-nightly.20200617","11.0.0-nightly.20200618","11.0.0-nightly.20200619"],"85.0.4179.0":["11.0.0-nightly.20200701","11.0.0-nightly.20200702","11.0.0-nightly.20200703","11.0.0-nightly.20200706","11.0.0-nightly.20200707","11.0.0-nightly.20200708","11.0.0-nightly.20200709"],"86.0.4203.0":["11.0.0-nightly.20200716","11.0.0-nightly.20200717","11.0.0-nightly.20200720","11.0.0-nightly.20200721"],"86.0.4209.0":["11.0.0-nightly.20200723","11.0.0-nightly.20200724","11.0.0-nightly.20200729","11.0.0-nightly.20200730","11.0.0-nightly.20200731","11.0.0-nightly.20200803","11.0.0-nightly.20200804","11.0.0-nightly.20200805","11.0.0-nightly.20200811","11.0.0-nightly.20200812"],"87.0.4280.60":["11.0.0","11.0.1"],"87.0.4280.67":["11.0.2","11.0.3","11.0.4"],"87.0.4280.88":["11.0.5","11.1.0","11.1.1"],"87.0.4280.141":["11.2.0","11.2.1","11.2.2","11.2.3","11.3.0","11.4.0","11.4.1","11.4.2","11.4.3","11.4.4","11.4.5","11.4.6","11.4.7","11.4.8","11.4.9","11.4.10","11.4.11","11.4.12","11.5.0"],"89.0.4328.0":["12.0.0-beta.1","12.0.0-beta.3","12.0.0-beta.4","12.0.0-beta.5","12.0.0-beta.6","12.0.0-beta.7","12.0.0-beta.8","12.0.0-beta.9","12.0.0-beta.10","12.0.0-beta.11","12.0.0-beta.12","12.0.0-beta.14","13.0.0-nightly.20201119","13.0.0-nightly.20201123","13.0.0-nightly.20201124","13.0.0-nightly.20201126","13.0.0-nightly.20201127","13.0.0-nightly.20201130","13.0.0-nightly.20201201","13.0.0-nightly.20201202","13.0.0-nightly.20201203","13.0.0-nightly.20201204","13.0.0-nightly.20201207","13.0.0-nightly.20201208","13.0.0-nightly.20201209","13.0.0-nightly.20201210","13.0.0-nightly.20201211","13.0.0-nightly.20201214"],"89.0.4348.1":["12.0.0-beta.16","12.0.0-beta.18","12.0.0-beta.19","12.0.0-beta.20"],"89.0.4388.2":["12.0.0-beta.21","12.0.0-beta.22","12.0.0-beta.23","12.0.0-beta.24","12.0.0-beta.25","12.0.0-beta.26"],"89.0.4389.23":["12.0.0-beta.27","12.0.0-beta.28","12.0.0-beta.29"],"89.0.4389.58":["12.0.0-beta.30","12.0.0-beta.31"],"87.0.4268.0":["12.0.0-nightly.20201013","12.0.0-nightly.20201014","12.0.0-nightly.20201015"],"88.0.4292.0":["12.0.0-nightly.20201023","12.0.0-nightly.20201026"],"88.0.4306.0":["12.0.0-nightly.20201030","12.0.0-nightly.20201102","12.0.0-nightly.20201103","12.0.0-nightly.20201104","12.0.0-nightly.20201105","12.0.0-nightly.20201106","12.0.0-nightly.20201111","12.0.0-nightly.20201112"],"88.0.4324.0":["12.0.0-nightly.20201116"],"89.0.4389.69":["12.0.0"],"89.0.4389.82":["12.0.1"],"89.0.4389.90":["12.0.2"],"89.0.4389.114":["12.0.3","12.0.4"],"89.0.4389.128":["12.0.5","12.0.6","12.0.7","12.0.8","12.0.9","12.0.10","12.0.11","12.0.12","12.0.13","12.0.14","12.0.15","12.0.16","12.0.17","12.0.18","12.1.0","12.1.1","12.1.2","12.2.0","12.2.1","12.2.2","12.2.3"],"90.0.4402.0":["13.0.0-beta.2","13.0.0-beta.3","13.0.0-nightly.20210210","13.0.0-nightly.20210211","13.0.0-nightly.20210212","13.0.0-nightly.20210216","13.0.0-nightly.20210217","13.0.0-nightly.20210218","13.0.0-nightly.20210219","13.0.0-nightly.20210222","13.0.0-nightly.20210225","13.0.0-nightly.20210226","13.0.0-nightly.20210301","13.0.0-nightly.20210302","13.0.0-nightly.20210303","14.0.0-nightly.20210304"],"90.0.4415.0":["13.0.0-beta.4","13.0.0-beta.5","13.0.0-beta.6","13.0.0-beta.7","13.0.0-beta.8","13.0.0-beta.9","13.0.0-beta.11","13.0.0-beta.12","13.0.0-beta.13","14.0.0-nightly.20210305","14.0.0-nightly.20210308","14.0.0-nightly.20210309","14.0.0-nightly.20210311","14.0.0-nightly.20210315","14.0.0-nightly.20210316","14.0.0-nightly.20210317","14.0.0-nightly.20210318","14.0.0-nightly.20210319","14.0.0-nightly.20210323","14.0.0-nightly.20210324","14.0.0-nightly.20210325","14.0.0-nightly.20210326","14.0.0-nightly.20210329","14.0.0-nightly.20210330"],"91.0.4448.0":["13.0.0-beta.14","13.0.0-beta.16","13.0.0-beta.17","13.0.0-beta.18","13.0.0-beta.20","14.0.0-nightly.20210331","14.0.0-nightly.20210401","14.0.0-nightly.20210402","14.0.0-nightly.20210406","14.0.0-nightly.20210407","14.0.0-nightly.20210408","14.0.0-nightly.20210409","14.0.0-nightly.20210413"],"91.0.4472.33":["13.0.0-beta.21","13.0.0-beta.22","13.0.0-beta.23"],"91.0.4472.38":["13.0.0-beta.24","13.0.0-beta.26","13.0.0-beta.27","13.0.0-beta.28"],"89.0.4349.0":["13.0.0-nightly.20201215","13.0.0-nightly.20201216","13.0.0-nightly.20201221","13.0.0-nightly.20201222"],"89.0.4359.0":["13.0.0-nightly.20201223","13.0.0-nightly.20210104","13.0.0-nightly.20210108","13.0.0-nightly.20210111"],"89.0.4386.0":["13.0.0-nightly.20210113","13.0.0-nightly.20210114","13.0.0-nightly.20210118","13.0.0-nightly.20210122","13.0.0-nightly.20210125"],"89.0.4389.0":["13.0.0-nightly.20210127","13.0.0-nightly.20210128","13.0.0-nightly.20210129","13.0.0-nightly.20210201","13.0.0-nightly.20210202","13.0.0-nightly.20210203","13.0.0-nightly.20210205","13.0.0-nightly.20210208","13.0.0-nightly.20210209"],"91.0.4472.69":["13.0.0","13.0.1"],"91.0.4472.77":["13.1.0","13.1.1","13.1.2"],"91.0.4472.106":["13.1.3","13.1.4"],"91.0.4472.124":["13.1.5","13.1.6","13.1.7"],"91.0.4472.164":["13.1.8","13.1.9","13.2.0","13.2.1","13.2.2","13.2.3","13.3.0","13.4.0","13.5.0","13.5.1","13.5.2","13.6.0","13.6.1","13.6.2","13.6.3","13.6.6","13.6.7","13.6.8","13.6.9"],"92.0.4511.0":["14.0.0-beta.1","14.0.0-beta.2","14.0.0-beta.3","14.0.0-nightly.20210520","14.0.0-nightly.20210523","14.0.0-nightly.20210524","15.0.0-nightly.20210527","15.0.0-nightly.20210528","15.0.0-nightly.20210531","15.0.0-nightly.20210601","15.0.0-nightly.20210602"],"93.0.4536.0":["14.0.0-beta.5","14.0.0-beta.6","14.0.0-beta.7","14.0.0-beta.8","15.0.0-nightly.20210609","15.0.0-nightly.20210610","15.0.0-nightly.20210611","15.0.0-nightly.20210614","15.0.0-nightly.20210615","15.0.0-nightly.20210616"],"93.0.4539.0":["14.0.0-beta.9","14.0.0-beta.10","15.0.0-nightly.20210617","15.0.0-nightly.20210618","15.0.0-nightly.20210621","15.0.0-nightly.20210622"],"93.0.4557.4":["14.0.0-beta.11","14.0.0-beta.12"],"93.0.4566.0":["14.0.0-beta.13","14.0.0-beta.14","14.0.0-beta.15","14.0.0-beta.16","14.0.0-beta.17","15.0.0-alpha.1","15.0.0-alpha.2","15.0.0-nightly.20210706","15.0.0-nightly.20210707","15.0.0-nightly.20210708","15.0.0-nightly.20210709","15.0.0-nightly.20210712","15.0.0-nightly.20210713","15.0.0-nightly.20210714","15.0.0-nightly.20210715","15.0.0-nightly.20210716","15.0.0-nightly.20210719","15.0.0-nightly.20210720","15.0.0-nightly.20210721","16.0.0-nightly.20210722","16.0.0-nightly.20210723","16.0.0-nightly.20210726"],"93.0.4577.15":["14.0.0-beta.18","14.0.0-beta.19","14.0.0-beta.20","14.0.0-beta.21"],"93.0.4577.25":["14.0.0-beta.22","14.0.0-beta.23"],"93.0.4577.51":["14.0.0-beta.24","14.0.0-beta.25"],"92.0.4475.0":["14.0.0-nightly.20210426","14.0.0-nightly.20210427"],"92.0.4488.0":["14.0.0-nightly.20210430","14.0.0-nightly.20210503"],"92.0.4496.0":["14.0.0-nightly.20210505"],"92.0.4498.0":["14.0.0-nightly.20210506"],"92.0.4499.0":["14.0.0-nightly.20210507","14.0.0-nightly.20210510","14.0.0-nightly.20210511","14.0.0-nightly.20210512","14.0.0-nightly.20210513"],"92.0.4505.0":["14.0.0-nightly.20210514","14.0.0-nightly.20210517","14.0.0-nightly.20210518","14.0.0-nightly.20210519"],"93.0.4577.58":["14.0.0"],"93.0.4577.63":["14.0.1"],"93.0.4577.82":["14.0.2","14.1.0","14.1.1","14.2.0","14.2.1","14.2.2","14.2.3","14.2.4","14.2.5","14.2.6","14.2.7"],"94.0.4584.0":["15.0.0-alpha.3","15.0.0-alpha.4","15.0.0-alpha.5","15.0.0-alpha.6","16.0.0-nightly.20210727","16.0.0-nightly.20210728","16.0.0-nightly.20210729","16.0.0-nightly.20210730","16.0.0-nightly.20210802","16.0.0-nightly.20210803","16.0.0-nightly.20210804","16.0.0-nightly.20210805","16.0.0-nightly.20210806","16.0.0-nightly.20210809","16.0.0-nightly.20210810","16.0.0-nightly.20210811"],"94.0.4590.2":["15.0.0-alpha.7","15.0.0-alpha.8","15.0.0-alpha.9","16.0.0-nightly.20210812","16.0.0-nightly.20210813","16.0.0-nightly.20210816","16.0.0-nightly.20210817","16.0.0-nightly.20210818","16.0.0-nightly.20210819","16.0.0-nightly.20210820","16.0.0-nightly.20210823"],"94.0.4606.12":["15.0.0-alpha.10"],"94.0.4606.20":["15.0.0-beta.1","15.0.0-beta.2"],"94.0.4606.31":["15.0.0-beta.3","15.0.0-beta.4","15.0.0-beta.5","15.0.0-beta.6","15.0.0-beta.7"],"93.0.4530.0":["15.0.0-nightly.20210603","15.0.0-nightly.20210604"],"93.0.4535.0":["15.0.0-nightly.20210608"],"93.0.4550.0":["15.0.0-nightly.20210623","15.0.0-nightly.20210624"],"93.0.4552.0":["15.0.0-nightly.20210625","15.0.0-nightly.20210628","15.0.0-nightly.20210629"],"93.0.4558.0":["15.0.0-nightly.20210630","15.0.0-nightly.20210701","15.0.0-nightly.20210702","15.0.0-nightly.20210705"],"94.0.4606.51":["15.0.0"],"94.0.4606.61":["15.1.0","15.1.1"],"94.0.4606.71":["15.1.2"],"94.0.4606.81":["15.2.0","15.3.0","15.3.1","15.3.2","15.3.3","15.3.4","15.3.5","15.3.6","15.3.7","15.4.0","15.4.1"],"95.0.4629.0":["16.0.0-alpha.1","16.0.0-alpha.2","16.0.0-alpha.3","16.0.0-alpha.4","16.0.0-alpha.5","16.0.0-alpha.6","16.0.0-alpha.7","16.0.0-nightly.20210902","16.0.0-nightly.20210903","16.0.0-nightly.20210906","16.0.0-nightly.20210907","16.0.0-nightly.20210908","16.0.0-nightly.20210909","16.0.0-nightly.20210910","16.0.0-nightly.20210913","16.0.0-nightly.20210914","16.0.0-nightly.20210915","16.0.0-nightly.20210916","16.0.0-nightly.20210917","16.0.0-nightly.20210920","16.0.0-nightly.20210921","16.0.0-nightly.20210922","17.0.0-nightly.20210923","17.0.0-nightly.20210924","17.0.0-nightly.20210927","17.0.0-nightly.20210928","17.0.0-nightly.20210929","17.0.0-nightly.20210930","17.0.0-nightly.20211001","17.0.0-nightly.20211004","17.0.0-nightly.20211005"],"96.0.4647.0":["16.0.0-alpha.8","16.0.0-alpha.9","16.0.0-beta.1","16.0.0-beta.2","16.0.0-beta.3","17.0.0-nightly.20211006","17.0.0-nightly.20211007","17.0.0-nightly.20211008","17.0.0-nightly.20211011","17.0.0-nightly.20211012","17.0.0-nightly.20211013","17.0.0-nightly.20211014","17.0.0-nightly.20211015","17.0.0-nightly.20211018","17.0.0-nightly.20211019","17.0.0-nightly.20211020","17.0.0-nightly.20211021"],"96.0.4664.18":["16.0.0-beta.4","16.0.0-beta.5"],"96.0.4664.27":["16.0.0-beta.6","16.0.0-beta.7"],"96.0.4664.35":["16.0.0-beta.8","16.0.0-beta.9"],"95.0.4612.5":["16.0.0-nightly.20210824","16.0.0-nightly.20210825","16.0.0-nightly.20210826","16.0.0-nightly.20210827","16.0.0-nightly.20210830","16.0.0-nightly.20210831","16.0.0-nightly.20210901"],"96.0.4664.45":["16.0.0","16.0.1"],"96.0.4664.55":["16.0.2","16.0.3","16.0.4","16.0.5"],"96.0.4664.110":["16.0.6","16.0.7","16.0.8"],"96.0.4664.174":["16.0.9","16.0.10","16.1.0"],"96.0.4664.4":["17.0.0-alpha.1","17.0.0-alpha.2","17.0.0-alpha.3","17.0.0-nightly.20211022","17.0.0-nightly.20211025","17.0.0-nightly.20211026","17.0.0-nightly.20211027","17.0.0-nightly.20211028","17.0.0-nightly.20211029","17.0.0-nightly.20211101","17.0.0-nightly.20211102","17.0.0-nightly.20211103","17.0.0-nightly.20211104","17.0.0-nightly.20211105","17.0.0-nightly.20211108","17.0.0-nightly.20211109","17.0.0-nightly.20211110","17.0.0-nightly.20211111","17.0.0-nightly.20211112","17.0.0-nightly.20211115","17.0.0-nightly.20211116","17.0.0-nightly.20211117","18.0.0-nightly.20211118","18.0.0-nightly.20211119","18.0.0-nightly.20211122","18.0.0-nightly.20211123"],"98.0.4706.0":["17.0.0-alpha.4","17.0.0-alpha.5","17.0.0-alpha.6","17.0.0-beta.1","17.0.0-beta.2","18.0.0-nightly.20211124","18.0.0-nightly.20211125","18.0.0-nightly.20211126","18.0.0-nightly.20211129","18.0.0-nightly.20211130","18.0.0-nightly.20211201","18.0.0-nightly.20211202","18.0.0-nightly.20211203","18.0.0-nightly.20211206","18.0.0-nightly.20211207","18.0.0-nightly.20211208","18.0.0-nightly.20211209","18.0.0-nightly.20211210","18.0.0-nightly.20211213","18.0.0-nightly.20211214","18.0.0-nightly.20211215","18.0.0-nightly.20211216","18.0.0-nightly.20211217","18.0.0-nightly.20211220","18.0.0-nightly.20211221","18.0.0-nightly.20211222","18.0.0-nightly.20211223","18.0.0-nightly.20211228","18.0.0-nightly.20211229","18.0.0-nightly.20211231","18.0.0-nightly.20220103","18.0.0-nightly.20220104","18.0.0-nightly.20220105","18.0.0-nightly.20220106","18.0.0-nightly.20220107","18.0.0-nightly.20220110"],"98.0.4758.9":["17.0.0-beta.3"],"98.0.4758.11":["17.0.0-beta.4","17.0.0-beta.5","17.0.0-beta.6","17.0.0-beta.7","17.0.0-beta.8","17.0.0-beta.9"],"98.0.4758.74":["17.0.0"],"98.0.4758.82":["17.0.1"],"98.0.4758.102":["17.1.0"],"98.0.4758.109":["17.1.1","17.1.2"],"99.0.4767.0":["18.0.0-alpha.1","18.0.0-alpha.2","18.0.0-alpha.3","18.0.0-alpha.4","18.0.0-alpha.5","18.0.0-nightly.20220111","18.0.0-nightly.20220112","18.0.0-nightly.20220113","18.0.0-nightly.20220114","18.0.0-nightly.20220117","18.0.0-nightly.20220118","18.0.0-nightly.20220119","18.0.0-nightly.20220121","18.0.0-nightly.20220124","18.0.0-nightly.20220125","18.0.0-nightly.20220127","18.0.0-nightly.20220128","18.0.0-nightly.20220131","18.0.0-nightly.20220201","19.0.0-nightly.20220202","19.0.0-nightly.20220203","19.0.0-nightly.20220204","19.0.0-nightly.20220207","19.0.0-nightly.20220208","19.0.0-nightly.20220209"],"100.0.4894.0":["18.0.0-beta.1","18.0.0-beta.2","19.0.0-nightly.20220308","19.0.0-nightly.20220309","19.0.0-nightly.20220310","19.0.0-nightly.20220311"]} \ No newline at end of file +{"39.0.2171.65":["0.20.0","0.20.1","0.20.2","0.20.3","0.20.4","0.20.5","0.20.6","0.20.7","0.20.8"],"40.0.2214.91":["0.21.0","0.21.1","0.21.2"],"41.0.2272.76":["0.21.3","0.22.1","0.22.2","0.22.3","0.23.0","0.24.0"],"42.0.2311.107":["0.25.0","0.25.1","0.25.2","0.25.3","0.26.0","0.26.1","0.27.0","0.27.1"],"43.0.2357.65":["0.27.2","0.27.3","0.28.0","0.28.1","0.28.2","0.28.3","0.29.1","0.29.2"],"44.0.2403.125":["0.30.4","0.31.0"],"45.0.2454.85":["0.31.2","0.32.2","0.32.3","0.33.0","0.33.1","0.33.2","0.33.3","0.33.4","0.33.6","0.33.7","0.33.8","0.33.9","0.34.0","0.34.1","0.34.2","0.34.3","0.34.4","0.35.1","0.35.2","0.35.3","0.35.4","0.35.5"],"47.0.2526.73":["0.36.0","0.36.2","0.36.3","0.36.4"],"47.0.2526.110":["0.36.5","0.36.6","0.36.7","0.36.8","0.36.9","0.36.10","0.36.11","0.36.12"],"49.0.2623.75":["0.37.0","0.37.1","0.37.3","0.37.4","0.37.5","0.37.6","0.37.7","0.37.8","1.0.0","1.0.1","1.0.2"],"50.0.2661.102":["1.1.0","1.1.1","1.1.2","1.1.3"],"51.0.2704.63":["1.2.0","1.2.1"],"51.0.2704.84":["1.2.2","1.2.3"],"51.0.2704.103":["1.2.4","1.2.5"],"51.0.2704.106":["1.2.6","1.2.7","1.2.8"],"52.0.2743.82":["1.3.0","1.3.1","1.3.2","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.3.9","1.3.10","1.3.13","1.3.14","1.3.15"],"53.0.2785.113":["1.4.0","1.4.1","1.4.2","1.4.3","1.4.4","1.4.5"],"53.0.2785.143":["1.4.6","1.4.7","1.4.8","1.4.10","1.4.11","1.4.13","1.4.14","1.4.15","1.4.16"],"54.0.2840.51":["1.4.12"],"54.0.2840.101":["1.5.0","1.5.1"],"56.0.2924.87":["1.6.0","1.6.1","1.6.2","1.6.3","1.6.4","1.6.5","1.6.6","1.6.7","1.6.8","1.6.9","1.6.10","1.6.11","1.6.12","1.6.13","1.6.14","1.6.15","1.6.16","1.6.17","1.6.18"],"58.0.3029.110":["1.7.0","1.7.1","1.7.2","1.7.3","1.7.4","1.7.5","1.7.6","1.7.7","1.7.8","1.7.9","1.7.10","1.7.11","1.7.12","1.7.13","1.7.14","1.7.15","1.7.16"],"59.0.3071.115":["1.8.0","1.8.1","1.8.2-beta.1","1.8.2-beta.2","1.8.2-beta.3","1.8.2-beta.4","1.8.2-beta.5","1.8.2","1.8.3","1.8.4","1.8.5","1.8.6","1.8.7","1.8.8"],"61.0.3163.100":["2.0.0-beta.1","2.0.0-beta.2","2.0.0-beta.3","2.0.0-beta.4","2.0.0-beta.5","2.0.0-beta.6","2.0.0-beta.7","2.0.0-beta.8","2.0.0","2.0.1","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8-nightly.20180819","2.0.8-nightly.20180820","2.0.8","2.0.9","2.0.10","2.0.11","2.0.12","2.0.13","2.0.14","2.0.15","2.0.16","2.0.17","2.0.18","2.1.0-unsupported.20180809"],"66.0.3359.181":["3.0.0-beta.1","3.0.0-beta.2","3.0.0-beta.3","3.0.0-beta.4","3.0.0-beta.5","3.0.0-beta.6","3.0.0-beta.7","3.0.0-beta.8","3.0.0-beta.9","3.0.0-beta.10","3.0.0-beta.11","3.0.0-beta.12","3.0.0-beta.13","3.0.0-nightly.20180818","3.0.0-nightly.20180821","3.0.0-nightly.20180823","3.0.0-nightly.20180904","3.0.0","3.0.1","3.0.2","3.0.3","3.0.4","3.0.5","3.0.6","3.0.7","3.0.8","3.0.9","3.0.10","3.0.11","3.0.12","3.0.13","3.0.14","3.0.15","3.0.16","3.1.0-beta.1","3.1.0-beta.2","3.1.0-beta.3","3.1.0-beta.4","3.1.0-beta.5","3.1.0","3.1.1","3.1.2","3.1.3","3.1.4","3.1.5","3.1.6","3.1.7","3.1.8","3.1.9","3.1.10","3.1.11","3.1.12","3.1.13","4.0.0-nightly.20180817","4.0.0-nightly.20180819","4.0.0-nightly.20180821"],"69.0.3497.106":["4.0.0-beta.1","4.0.0-beta.2","4.0.0-beta.3","4.0.0-beta.4","4.0.0-beta.5","4.0.0-beta.6","4.0.0-beta.7","4.0.0-beta.8","4.0.0-beta.9","4.0.0-beta.10","4.0.0-beta.11","4.0.0-nightly.20181010","4.0.0","4.0.1","4.0.2","4.0.3","4.0.4","4.0.5","4.0.6"],"67.0.3396.99":["4.0.0-nightly.20180929"],"68.0.3440.128":["4.0.0-nightly.20181006"],"69.0.3497.128":["4.0.7","4.0.8","4.1.0","4.1.1","4.1.2","4.1.3","4.1.4","4.1.5","4.2.0","4.2.1","4.2.2","4.2.3","4.2.4","4.2.5","4.2.6","4.2.7","4.2.8","4.2.9","4.2.10","4.2.11","4.2.12"],"72.0.3626.52":["5.0.0-beta.1","5.0.0-beta.2"],"73.0.3683.27":["5.0.0-beta.3"],"73.0.3683.54":["5.0.0-beta.4"],"73.0.3683.61":["5.0.0-beta.5"],"73.0.3683.84":["5.0.0-beta.6"],"73.0.3683.94":["5.0.0-beta.7"],"73.0.3683.104":["5.0.0-beta.8"],"73.0.3683.117":["5.0.0-beta.9"],"70.0.3538.110":["5.0.0-nightly.20190107"],"71.0.3578.98":["5.0.0-nightly.20190121","5.0.0-nightly.20190122"],"73.0.3683.119":["5.0.0"],"73.0.3683.121":["5.0.1","5.0.2","5.0.3","5.0.4","5.0.5","5.0.6","5.0.7","5.0.8","5.0.9","5.0.10","5.0.11","5.0.12","5.0.13"],"76.0.3774.1":["6.0.0-beta.1"],"76.0.3783.1":["6.0.0-beta.2","6.0.0-beta.3","6.0.0-beta.4"],"76.0.3805.4":["6.0.0-beta.5"],"76.0.3809.3":["6.0.0-beta.6"],"76.0.3809.22":["6.0.0-beta.7"],"76.0.3809.26":["6.0.0-beta.8","6.0.0-beta.9"],"76.0.3809.37":["6.0.0-beta.10"],"76.0.3809.42":["6.0.0-beta.11"],"76.0.3809.54":["6.0.0-beta.12"],"76.0.3809.60":["6.0.0-beta.13"],"76.0.3809.68":["6.0.0-beta.14"],"76.0.3809.74":["6.0.0-beta.15"],"72.0.3626.107":["6.0.0-nightly.20190212"],"72.0.3626.110":["6.0.0-nightly.20190213"],"74.0.3724.8":["6.0.0-nightly.20190311"],"76.0.3809.88":["6.0.0"],"76.0.3809.102":["6.0.1"],"76.0.3809.110":["6.0.2"],"76.0.3809.126":["6.0.3"],"76.0.3809.131":["6.0.4"],"76.0.3809.136":["6.0.5"],"76.0.3809.138":["6.0.6"],"76.0.3809.139":["6.0.7"],"76.0.3809.146":["6.0.8","6.0.9","6.0.10","6.0.11","6.0.12","6.1.0","6.1.1","6.1.2","6.1.3","6.1.4","6.1.5","6.1.6","6.1.7","6.1.8","6.1.9","6.1.10","6.1.11","6.1.12"],"78.0.3866.0":["7.0.0-beta.1","7.0.0-beta.2","7.0.0-beta.3","7.0.0-nightly.20190727","7.0.0-nightly.20190728","7.0.0-nightly.20190729","7.0.0-nightly.20190730","7.0.0-nightly.20190731","8.0.0-nightly.20190801","8.0.0-nightly.20190802"],"78.0.3896.6":["7.0.0-beta.4"],"78.0.3905.1":["7.0.0-beta.5","7.0.0-beta.6","7.0.0-beta.7","7.0.0"],"76.0.3784.0":["7.0.0-nightly.20190521"],"76.0.3806.0":["7.0.0-nightly.20190529","7.0.0-nightly.20190530","7.0.0-nightly.20190531","7.0.0-nightly.20190602","7.0.0-nightly.20190603"],"77.0.3814.0":["7.0.0-nightly.20190604"],"77.0.3815.0":["7.0.0-nightly.20190605","7.0.0-nightly.20190606","7.0.0-nightly.20190607","7.0.0-nightly.20190608","7.0.0-nightly.20190609","7.0.0-nightly.20190611","7.0.0-nightly.20190612","7.0.0-nightly.20190613","7.0.0-nightly.20190615","7.0.0-nightly.20190616","7.0.0-nightly.20190618","7.0.0-nightly.20190619","7.0.0-nightly.20190622","7.0.0-nightly.20190623","7.0.0-nightly.20190624","7.0.0-nightly.20190627","7.0.0-nightly.20190629","7.0.0-nightly.20190630","7.0.0-nightly.20190701","7.0.0-nightly.20190702"],"77.0.3843.0":["7.0.0-nightly.20190704","7.0.0-nightly.20190705"],"77.0.3848.0":["7.0.0-nightly.20190719","7.0.0-nightly.20190720","7.0.0-nightly.20190721"],"77.0.3864.0":["7.0.0-nightly.20190726"],"78.0.3904.92":["7.0.1"],"78.0.3904.94":["7.1.0"],"78.0.3904.99":["7.1.1"],"78.0.3904.113":["7.1.2"],"78.0.3904.126":["7.1.3"],"78.0.3904.130":["7.1.4","7.1.5","7.1.6","7.1.7","7.1.8","7.1.9","7.1.10","7.1.11","7.1.12","7.1.13","7.1.14","7.2.0","7.2.1","7.2.2","7.2.3","7.2.4","7.3.0","7.3.1","7.3.2","7.3.3"],"79.0.3931.0":["8.0.0-beta.1","8.0.0-beta.2","8.0.0-nightly.20191019","8.0.0-nightly.20191020","8.0.0-nightly.20191021","8.0.0-nightly.20191023"],"80.0.3955.0":["8.0.0-beta.3","8.0.0-beta.4"],"80.0.3987.14":["8.0.0-beta.5"],"80.0.3987.51":["8.0.0-beta.6"],"80.0.3987.59":["8.0.0-beta.7"],"80.0.3987.75":["8.0.0-beta.8","8.0.0-beta.9"],"78.0.3871.0":["8.0.0-nightly.20190803","8.0.0-nightly.20190806","8.0.0-nightly.20190807","8.0.0-nightly.20190808","8.0.0-nightly.20190809","8.0.0-nightly.20190810","8.0.0-nightly.20190811","8.0.0-nightly.20190812","8.0.0-nightly.20190813","8.0.0-nightly.20190814","8.0.0-nightly.20190815"],"78.0.3881.0":["8.0.0-nightly.20190816","8.0.0-nightly.20190817","8.0.0-nightly.20190818","8.0.0-nightly.20190819","8.0.0-nightly.20190820"],"78.0.3892.0":["8.0.0-nightly.20190824","8.0.0-nightly.20190825","8.0.0-nightly.20190827","8.0.0-nightly.20190828","8.0.0-nightly.20190830","8.0.0-nightly.20190901","8.0.0-nightly.20190902","8.0.0-nightly.20190907","8.0.0-nightly.20190909","8.0.0-nightly.20190910","8.0.0-nightly.20190911","8.0.0-nightly.20190913","8.0.0-nightly.20190914","8.0.0-nightly.20190915","8.0.0-nightly.20190917"],"79.0.3915.0":["8.0.0-nightly.20190919","8.0.0-nightly.20190920"],"79.0.3919.0":["8.0.0-nightly.20190923","8.0.0-nightly.20190924","8.0.0-nightly.20190926","8.0.0-nightly.20190929","8.0.0-nightly.20190930","8.0.0-nightly.20191001","8.0.0-nightly.20191004","8.0.0-nightly.20191005","8.0.0-nightly.20191006","8.0.0-nightly.20191009","8.0.0-nightly.20191011","8.0.0-nightly.20191012","8.0.0-nightly.20191017"],"80.0.3952.0":["8.0.0-nightly.20191101","8.0.0-nightly.20191105"],"80.0.3987.86":["8.0.0","8.0.1","8.0.2"],"80.0.3987.134":["8.0.3"],"80.0.3987.137":["8.1.0"],"80.0.3987.141":["8.1.1"],"80.0.3987.158":["8.2.0"],"80.0.3987.163":["8.2.1","8.2.2","8.2.3","8.5.3","8.5.4","8.5.5"],"80.0.3987.165":["8.2.4","8.2.5","8.3.0","8.3.1","8.3.2","8.3.3","8.3.4","8.4.0","8.4.1","8.5.0","8.5.1","8.5.2"],"82.0.4048.0":["9.0.0-beta.1","9.0.0-beta.2","9.0.0-beta.3","9.0.0-beta.4","9.0.0-beta.5"],"82.0.4058.2":["9.0.0-beta.6","9.0.0-beta.7","9.0.0-beta.9"],"82.0.4085.10":["9.0.0-beta.10"],"82.0.4085.14":["9.0.0-beta.12","9.0.0-beta.13"],"82.0.4085.27":["9.0.0-beta.14"],"83.0.4102.3":["9.0.0-beta.15","9.0.0-beta.16"],"83.0.4103.14":["9.0.0-beta.17"],"83.0.4103.16":["9.0.0-beta.18"],"83.0.4103.24":["9.0.0-beta.19"],"83.0.4103.26":["9.0.0-beta.20","9.0.0-beta.21"],"83.0.4103.34":["9.0.0-beta.22"],"83.0.4103.44":["9.0.0-beta.23"],"83.0.4103.45":["9.0.0-beta.24"],"80.0.3954.0":["9.0.0-nightly.20191121","9.0.0-nightly.20191122","9.0.0-nightly.20191123","9.0.0-nightly.20191124","9.0.0-nightly.20191129","9.0.0-nightly.20191130","9.0.0-nightly.20191201","9.0.0-nightly.20191202","9.0.0-nightly.20191203","9.0.0-nightly.20191204","9.0.0-nightly.20191210"],"81.0.3994.0":["9.0.0-nightly.20191220","9.0.0-nightly.20191221","9.0.0-nightly.20191222","9.0.0-nightly.20191223","9.0.0-nightly.20191224","9.0.0-nightly.20191225","9.0.0-nightly.20191226","9.0.0-nightly.20191228","9.0.0-nightly.20191229","9.0.0-nightly.20191230","9.0.0-nightly.20191231","9.0.0-nightly.20200101","9.0.0-nightly.20200103","9.0.0-nightly.20200104","9.0.0-nightly.20200105","9.0.0-nightly.20200106","9.0.0-nightly.20200108","9.0.0-nightly.20200109","9.0.0-nightly.20200110","9.0.0-nightly.20200111","9.0.0-nightly.20200113","9.0.0-nightly.20200115","9.0.0-nightly.20200116","9.0.0-nightly.20200117"],"81.0.4030.0":["9.0.0-nightly.20200119","9.0.0-nightly.20200121"],"83.0.4103.64":["9.0.0"],"83.0.4103.94":["9.0.1","9.0.2"],"83.0.4103.100":["9.0.3"],"83.0.4103.104":["9.0.4"],"83.0.4103.119":["9.0.5"],"83.0.4103.122":["9.1.0","9.1.1","9.1.2","9.2.0","9.2.1","9.3.0","9.3.1","9.3.2","9.3.3","9.3.4","9.3.5","9.4.0","9.4.1","9.4.2","9.4.3","9.4.4"],"84.0.4129.0":["10.0.0-beta.1","10.0.0-beta.2","10.0.0-nightly.20200501","10.0.0-nightly.20200504","10.0.0-nightly.20200505","10.0.0-nightly.20200506","10.0.0-nightly.20200507","10.0.0-nightly.20200508","10.0.0-nightly.20200511","10.0.0-nightly.20200512","10.0.0-nightly.20200513","10.0.0-nightly.20200514","10.0.0-nightly.20200515","10.0.0-nightly.20200518","10.0.0-nightly.20200519","10.0.0-nightly.20200520","10.0.0-nightly.20200521","11.0.0-nightly.20200525","11.0.0-nightly.20200526"],"85.0.4161.2":["10.0.0-beta.3","10.0.0-beta.4"],"85.0.4181.1":["10.0.0-beta.8","10.0.0-beta.9"],"85.0.4183.19":["10.0.0-beta.10"],"85.0.4183.20":["10.0.0-beta.11"],"85.0.4183.26":["10.0.0-beta.12"],"85.0.4183.39":["10.0.0-beta.13","10.0.0-beta.14","10.0.0-beta.15","10.0.0-beta.17","10.0.0-beta.19","10.0.0-beta.20","10.0.0-beta.21"],"85.0.4183.70":["10.0.0-beta.23"],"85.0.4183.78":["10.0.0-beta.24"],"85.0.4183.80":["10.0.0-beta.25"],"82.0.4050.0":["10.0.0-nightly.20200209","10.0.0-nightly.20200210","10.0.0-nightly.20200211","10.0.0-nightly.20200216","10.0.0-nightly.20200217","10.0.0-nightly.20200218","10.0.0-nightly.20200221","10.0.0-nightly.20200222","10.0.0-nightly.20200223","10.0.0-nightly.20200226","10.0.0-nightly.20200303"],"82.0.4076.0":["10.0.0-nightly.20200304","10.0.0-nightly.20200305","10.0.0-nightly.20200306","10.0.0-nightly.20200309","10.0.0-nightly.20200310"],"82.0.4083.0":["10.0.0-nightly.20200311"],"83.0.4086.0":["10.0.0-nightly.20200316"],"83.0.4087.0":["10.0.0-nightly.20200317","10.0.0-nightly.20200318","10.0.0-nightly.20200320","10.0.0-nightly.20200323","10.0.0-nightly.20200324","10.0.0-nightly.20200325","10.0.0-nightly.20200326","10.0.0-nightly.20200327","10.0.0-nightly.20200330","10.0.0-nightly.20200331","10.0.0-nightly.20200401","10.0.0-nightly.20200402","10.0.0-nightly.20200403","10.0.0-nightly.20200406"],"83.0.4095.0":["10.0.0-nightly.20200408","10.0.0-nightly.20200410","10.0.0-nightly.20200413"],"84.0.4114.0":["10.0.0-nightly.20200414"],"84.0.4115.0":["10.0.0-nightly.20200415","10.0.0-nightly.20200416","10.0.0-nightly.20200417"],"84.0.4121.0":["10.0.0-nightly.20200422","10.0.0-nightly.20200423"],"84.0.4125.0":["10.0.0-nightly.20200427","10.0.0-nightly.20200428","10.0.0-nightly.20200429","10.0.0-nightly.20200430"],"85.0.4183.84":["10.0.0"],"85.0.4183.86":["10.0.1"],"85.0.4183.87":["10.1.0"],"85.0.4183.93":["10.1.1"],"85.0.4183.98":["10.1.2"],"85.0.4183.121":["10.1.3","10.1.4","10.1.5","10.1.6","10.1.7","10.2.0","10.3.0","10.3.1","10.3.2","10.4.0","10.4.1","10.4.2","10.4.3","10.4.4","10.4.5","10.4.6","10.4.7"],"86.0.4234.0":["11.0.0-beta.1","11.0.0-beta.3","11.0.0-beta.4","11.0.0-beta.5","11.0.0-beta.6","11.0.0-beta.7","11.0.0-nightly.20200822","11.0.0-nightly.20200824","11.0.0-nightly.20200825","11.0.0-nightly.20200826","12.0.0-nightly.20200827","12.0.0-nightly.20200831","12.0.0-nightly.20200902","12.0.0-nightly.20200903","12.0.0-nightly.20200907","12.0.0-nightly.20200910","12.0.0-nightly.20200911","12.0.0-nightly.20200914"],"87.0.4251.1":["11.0.0-beta.8","11.0.0-beta.9","11.0.0-beta.11"],"87.0.4280.11":["11.0.0-beta.12","11.0.0-beta.13"],"87.0.4280.27":["11.0.0-beta.16","11.0.0-beta.17","11.0.0-beta.18","11.0.0-beta.19"],"87.0.4280.40":["11.0.0-beta.20"],"87.0.4280.47":["11.0.0-beta.22","11.0.0-beta.23"],"85.0.4156.0":["11.0.0-nightly.20200529"],"85.0.4162.0":["11.0.0-nightly.20200602","11.0.0-nightly.20200603","11.0.0-nightly.20200604","11.0.0-nightly.20200609","11.0.0-nightly.20200610","11.0.0-nightly.20200611","11.0.0-nightly.20200615","11.0.0-nightly.20200616","11.0.0-nightly.20200617","11.0.0-nightly.20200618","11.0.0-nightly.20200619"],"85.0.4179.0":["11.0.0-nightly.20200701","11.0.0-nightly.20200702","11.0.0-nightly.20200703","11.0.0-nightly.20200706","11.0.0-nightly.20200707","11.0.0-nightly.20200708","11.0.0-nightly.20200709"],"86.0.4203.0":["11.0.0-nightly.20200716","11.0.0-nightly.20200717","11.0.0-nightly.20200720","11.0.0-nightly.20200721"],"86.0.4209.0":["11.0.0-nightly.20200723","11.0.0-nightly.20200724","11.0.0-nightly.20200729","11.0.0-nightly.20200730","11.0.0-nightly.20200731","11.0.0-nightly.20200803","11.0.0-nightly.20200804","11.0.0-nightly.20200805","11.0.0-nightly.20200811","11.0.0-nightly.20200812"],"87.0.4280.60":["11.0.0","11.0.1"],"87.0.4280.67":["11.0.2","11.0.3","11.0.4"],"87.0.4280.88":["11.0.5","11.1.0","11.1.1"],"87.0.4280.141":["11.2.0","11.2.1","11.2.2","11.2.3","11.3.0","11.4.0","11.4.1","11.4.2","11.4.3","11.4.4","11.4.5","11.4.6","11.4.7","11.4.8","11.4.9","11.4.10","11.4.11","11.4.12","11.5.0"],"89.0.4328.0":["12.0.0-beta.1","12.0.0-beta.3","12.0.0-beta.4","12.0.0-beta.5","12.0.0-beta.6","12.0.0-beta.7","12.0.0-beta.8","12.0.0-beta.9","12.0.0-beta.10","12.0.0-beta.11","12.0.0-beta.12","12.0.0-beta.14","13.0.0-nightly.20201119","13.0.0-nightly.20201123","13.0.0-nightly.20201124","13.0.0-nightly.20201126","13.0.0-nightly.20201127","13.0.0-nightly.20201130","13.0.0-nightly.20201201","13.0.0-nightly.20201202","13.0.0-nightly.20201203","13.0.0-nightly.20201204","13.0.0-nightly.20201207","13.0.0-nightly.20201208","13.0.0-nightly.20201209","13.0.0-nightly.20201210","13.0.0-nightly.20201211","13.0.0-nightly.20201214"],"89.0.4348.1":["12.0.0-beta.16","12.0.0-beta.18","12.0.0-beta.19","12.0.0-beta.20"],"89.0.4388.2":["12.0.0-beta.21","12.0.0-beta.22","12.0.0-beta.23","12.0.0-beta.24","12.0.0-beta.25","12.0.0-beta.26"],"89.0.4389.23":["12.0.0-beta.27","12.0.0-beta.28","12.0.0-beta.29"],"89.0.4389.58":["12.0.0-beta.30","12.0.0-beta.31"],"87.0.4268.0":["12.0.0-nightly.20201013","12.0.0-nightly.20201014","12.0.0-nightly.20201015"],"88.0.4292.0":["12.0.0-nightly.20201023","12.0.0-nightly.20201026"],"88.0.4306.0":["12.0.0-nightly.20201030","12.0.0-nightly.20201102","12.0.0-nightly.20201103","12.0.0-nightly.20201104","12.0.0-nightly.20201105","12.0.0-nightly.20201106","12.0.0-nightly.20201111","12.0.0-nightly.20201112"],"88.0.4324.0":["12.0.0-nightly.20201116"],"89.0.4389.69":["12.0.0"],"89.0.4389.82":["12.0.1"],"89.0.4389.90":["12.0.2"],"89.0.4389.114":["12.0.3","12.0.4"],"89.0.4389.128":["12.0.5","12.0.6","12.0.7","12.0.8","12.0.9","12.0.10","12.0.11","12.0.12","12.0.13","12.0.14","12.0.15","12.0.16","12.0.17","12.0.18","12.1.0","12.1.1","12.1.2","12.2.0","12.2.1","12.2.2","12.2.3"],"90.0.4402.0":["13.0.0-beta.2","13.0.0-beta.3","13.0.0-nightly.20210210","13.0.0-nightly.20210211","13.0.0-nightly.20210212","13.0.0-nightly.20210216","13.0.0-nightly.20210217","13.0.0-nightly.20210218","13.0.0-nightly.20210219","13.0.0-nightly.20210222","13.0.0-nightly.20210225","13.0.0-nightly.20210226","13.0.0-nightly.20210301","13.0.0-nightly.20210302","13.0.0-nightly.20210303","14.0.0-nightly.20210304"],"90.0.4415.0":["13.0.0-beta.4","13.0.0-beta.5","13.0.0-beta.6","13.0.0-beta.7","13.0.0-beta.8","13.0.0-beta.9","13.0.0-beta.11","13.0.0-beta.12","13.0.0-beta.13","14.0.0-nightly.20210305","14.0.0-nightly.20210308","14.0.0-nightly.20210309","14.0.0-nightly.20210311","14.0.0-nightly.20210315","14.0.0-nightly.20210316","14.0.0-nightly.20210317","14.0.0-nightly.20210318","14.0.0-nightly.20210319","14.0.0-nightly.20210323","14.0.0-nightly.20210324","14.0.0-nightly.20210325","14.0.0-nightly.20210326","14.0.0-nightly.20210329","14.0.0-nightly.20210330"],"91.0.4448.0":["13.0.0-beta.14","13.0.0-beta.16","13.0.0-beta.17","13.0.0-beta.18","13.0.0-beta.20","14.0.0-nightly.20210331","14.0.0-nightly.20210401","14.0.0-nightly.20210402","14.0.0-nightly.20210406","14.0.0-nightly.20210407","14.0.0-nightly.20210408","14.0.0-nightly.20210409","14.0.0-nightly.20210413"],"91.0.4472.33":["13.0.0-beta.21","13.0.0-beta.22","13.0.0-beta.23"],"91.0.4472.38":["13.0.0-beta.24","13.0.0-beta.26","13.0.0-beta.27","13.0.0-beta.28"],"89.0.4349.0":["13.0.0-nightly.20201215","13.0.0-nightly.20201216","13.0.0-nightly.20201221","13.0.0-nightly.20201222"],"89.0.4359.0":["13.0.0-nightly.20201223","13.0.0-nightly.20210104","13.0.0-nightly.20210108","13.0.0-nightly.20210111"],"89.0.4386.0":["13.0.0-nightly.20210113","13.0.0-nightly.20210114","13.0.0-nightly.20210118","13.0.0-nightly.20210122","13.0.0-nightly.20210125"],"89.0.4389.0":["13.0.0-nightly.20210127","13.0.0-nightly.20210128","13.0.0-nightly.20210129","13.0.0-nightly.20210201","13.0.0-nightly.20210202","13.0.0-nightly.20210203","13.0.0-nightly.20210205","13.0.0-nightly.20210208","13.0.0-nightly.20210209"],"91.0.4472.69":["13.0.0","13.0.1"],"91.0.4472.77":["13.1.0","13.1.1","13.1.2"],"91.0.4472.106":["13.1.3","13.1.4"],"91.0.4472.124":["13.1.5","13.1.6","13.1.7"],"91.0.4472.164":["13.1.8","13.1.9","13.2.0","13.2.1","13.2.2","13.2.3","13.3.0","13.4.0","13.5.0","13.5.1","13.5.2","13.6.0","13.6.1","13.6.2","13.6.3","13.6.6","13.6.7","13.6.8","13.6.9"],"92.0.4511.0":["14.0.0-beta.1","14.0.0-beta.2","14.0.0-beta.3","14.0.0-nightly.20210520","14.0.0-nightly.20210523","14.0.0-nightly.20210524","15.0.0-nightly.20210527","15.0.0-nightly.20210528","15.0.0-nightly.20210531","15.0.0-nightly.20210601","15.0.0-nightly.20210602"],"93.0.4536.0":["14.0.0-beta.5","14.0.0-beta.6","14.0.0-beta.7","14.0.0-beta.8","15.0.0-nightly.20210609","15.0.0-nightly.20210610","15.0.0-nightly.20210611","15.0.0-nightly.20210614","15.0.0-nightly.20210615","15.0.0-nightly.20210616"],"93.0.4539.0":["14.0.0-beta.9","14.0.0-beta.10","15.0.0-nightly.20210617","15.0.0-nightly.20210618","15.0.0-nightly.20210621","15.0.0-nightly.20210622"],"93.0.4557.4":["14.0.0-beta.11","14.0.0-beta.12"],"93.0.4566.0":["14.0.0-beta.13","14.0.0-beta.14","14.0.0-beta.15","14.0.0-beta.16","14.0.0-beta.17","15.0.0-alpha.1","15.0.0-alpha.2","15.0.0-nightly.20210706","15.0.0-nightly.20210707","15.0.0-nightly.20210708","15.0.0-nightly.20210709","15.0.0-nightly.20210712","15.0.0-nightly.20210713","15.0.0-nightly.20210714","15.0.0-nightly.20210715","15.0.0-nightly.20210716","15.0.0-nightly.20210719","15.0.0-nightly.20210720","15.0.0-nightly.20210721","16.0.0-nightly.20210722","16.0.0-nightly.20210723","16.0.0-nightly.20210726"],"93.0.4577.15":["14.0.0-beta.18","14.0.0-beta.19","14.0.0-beta.20","14.0.0-beta.21"],"93.0.4577.25":["14.0.0-beta.22","14.0.0-beta.23"],"93.0.4577.51":["14.0.0-beta.24","14.0.0-beta.25"],"92.0.4475.0":["14.0.0-nightly.20210426","14.0.0-nightly.20210427"],"92.0.4488.0":["14.0.0-nightly.20210430","14.0.0-nightly.20210503"],"92.0.4496.0":["14.0.0-nightly.20210505"],"92.0.4498.0":["14.0.0-nightly.20210506"],"92.0.4499.0":["14.0.0-nightly.20210507","14.0.0-nightly.20210510","14.0.0-nightly.20210511","14.0.0-nightly.20210512","14.0.0-nightly.20210513"],"92.0.4505.0":["14.0.0-nightly.20210514","14.0.0-nightly.20210517","14.0.0-nightly.20210518","14.0.0-nightly.20210519"],"93.0.4577.58":["14.0.0"],"93.0.4577.63":["14.0.1"],"93.0.4577.82":["14.0.2","14.1.0","14.1.1","14.2.0","14.2.1","14.2.2","14.2.3","14.2.4","14.2.5","14.2.6","14.2.7","14.2.8","14.2.9"],"94.0.4584.0":["15.0.0-alpha.3","15.0.0-alpha.4","15.0.0-alpha.5","15.0.0-alpha.6","16.0.0-nightly.20210727","16.0.0-nightly.20210728","16.0.0-nightly.20210729","16.0.0-nightly.20210730","16.0.0-nightly.20210802","16.0.0-nightly.20210803","16.0.0-nightly.20210804","16.0.0-nightly.20210805","16.0.0-nightly.20210806","16.0.0-nightly.20210809","16.0.0-nightly.20210810","16.0.0-nightly.20210811"],"94.0.4590.2":["15.0.0-alpha.7","15.0.0-alpha.8","15.0.0-alpha.9","16.0.0-nightly.20210812","16.0.0-nightly.20210813","16.0.0-nightly.20210816","16.0.0-nightly.20210817","16.0.0-nightly.20210818","16.0.0-nightly.20210819","16.0.0-nightly.20210820","16.0.0-nightly.20210823"],"94.0.4606.12":["15.0.0-alpha.10"],"94.0.4606.20":["15.0.0-beta.1","15.0.0-beta.2"],"94.0.4606.31":["15.0.0-beta.3","15.0.0-beta.4","15.0.0-beta.5","15.0.0-beta.6","15.0.0-beta.7"],"93.0.4530.0":["15.0.0-nightly.20210603","15.0.0-nightly.20210604"],"93.0.4535.0":["15.0.0-nightly.20210608"],"93.0.4550.0":["15.0.0-nightly.20210623","15.0.0-nightly.20210624"],"93.0.4552.0":["15.0.0-nightly.20210625","15.0.0-nightly.20210628","15.0.0-nightly.20210629"],"93.0.4558.0":["15.0.0-nightly.20210630","15.0.0-nightly.20210701","15.0.0-nightly.20210702","15.0.0-nightly.20210705"],"94.0.4606.51":["15.0.0"],"94.0.4606.61":["15.1.0","15.1.1"],"94.0.4606.71":["15.1.2"],"94.0.4606.81":["15.2.0","15.3.0","15.3.1","15.3.2","15.3.3","15.3.4","15.3.5","15.3.6","15.3.7","15.4.0","15.4.1","15.4.2","15.5.0","15.5.1","15.5.2","15.5.3","15.5.4","15.5.5","15.5.6","15.5.7"],"95.0.4629.0":["16.0.0-alpha.1","16.0.0-alpha.2","16.0.0-alpha.3","16.0.0-alpha.4","16.0.0-alpha.5","16.0.0-alpha.6","16.0.0-alpha.7","16.0.0-nightly.20210902","16.0.0-nightly.20210903","16.0.0-nightly.20210906","16.0.0-nightly.20210907","16.0.0-nightly.20210908","16.0.0-nightly.20210909","16.0.0-nightly.20210910","16.0.0-nightly.20210913","16.0.0-nightly.20210914","16.0.0-nightly.20210915","16.0.0-nightly.20210916","16.0.0-nightly.20210917","16.0.0-nightly.20210920","16.0.0-nightly.20210921","16.0.0-nightly.20210922","17.0.0-nightly.20210923","17.0.0-nightly.20210924","17.0.0-nightly.20210927","17.0.0-nightly.20210928","17.0.0-nightly.20210929","17.0.0-nightly.20210930","17.0.0-nightly.20211001","17.0.0-nightly.20211004","17.0.0-nightly.20211005"],"96.0.4647.0":["16.0.0-alpha.8","16.0.0-alpha.9","16.0.0-beta.1","16.0.0-beta.2","16.0.0-beta.3","17.0.0-nightly.20211006","17.0.0-nightly.20211007","17.0.0-nightly.20211008","17.0.0-nightly.20211011","17.0.0-nightly.20211012","17.0.0-nightly.20211013","17.0.0-nightly.20211014","17.0.0-nightly.20211015","17.0.0-nightly.20211018","17.0.0-nightly.20211019","17.0.0-nightly.20211020","17.0.0-nightly.20211021"],"96.0.4664.18":["16.0.0-beta.4","16.0.0-beta.5"],"96.0.4664.27":["16.0.0-beta.6","16.0.0-beta.7"],"96.0.4664.35":["16.0.0-beta.8","16.0.0-beta.9"],"95.0.4612.5":["16.0.0-nightly.20210824","16.0.0-nightly.20210825","16.0.0-nightly.20210826","16.0.0-nightly.20210827","16.0.0-nightly.20210830","16.0.0-nightly.20210831","16.0.0-nightly.20210901"],"96.0.4664.45":["16.0.0","16.0.1"],"96.0.4664.55":["16.0.2","16.0.3","16.0.4","16.0.5"],"96.0.4664.110":["16.0.6","16.0.7","16.0.8"],"96.0.4664.174":["16.0.9","16.0.10","16.1.0","16.1.1","16.2.0","16.2.1","16.2.2","16.2.3","16.2.4","16.2.5","16.2.6","16.2.7","16.2.8"],"96.0.4664.4":["17.0.0-alpha.1","17.0.0-alpha.2","17.0.0-alpha.3","17.0.0-nightly.20211022","17.0.0-nightly.20211025","17.0.0-nightly.20211026","17.0.0-nightly.20211027","17.0.0-nightly.20211028","17.0.0-nightly.20211029","17.0.0-nightly.20211101","17.0.0-nightly.20211102","17.0.0-nightly.20211103","17.0.0-nightly.20211104","17.0.0-nightly.20211105","17.0.0-nightly.20211108","17.0.0-nightly.20211109","17.0.0-nightly.20211110","17.0.0-nightly.20211111","17.0.0-nightly.20211112","17.0.0-nightly.20211115","17.0.0-nightly.20211116","17.0.0-nightly.20211117","18.0.0-nightly.20211118","18.0.0-nightly.20211119","18.0.0-nightly.20211122","18.0.0-nightly.20211123"],"98.0.4706.0":["17.0.0-alpha.4","17.0.0-alpha.5","17.0.0-alpha.6","17.0.0-beta.1","17.0.0-beta.2","18.0.0-nightly.20211124","18.0.0-nightly.20211125","18.0.0-nightly.20211126","18.0.0-nightly.20211129","18.0.0-nightly.20211130","18.0.0-nightly.20211201","18.0.0-nightly.20211202","18.0.0-nightly.20211203","18.0.0-nightly.20211206","18.0.0-nightly.20211207","18.0.0-nightly.20211208","18.0.0-nightly.20211209","18.0.0-nightly.20211210","18.0.0-nightly.20211213","18.0.0-nightly.20211214","18.0.0-nightly.20211215","18.0.0-nightly.20211216","18.0.0-nightly.20211217","18.0.0-nightly.20211220","18.0.0-nightly.20211221","18.0.0-nightly.20211222","18.0.0-nightly.20211223","18.0.0-nightly.20211228","18.0.0-nightly.20211229","18.0.0-nightly.20211231","18.0.0-nightly.20220103","18.0.0-nightly.20220104","18.0.0-nightly.20220105","18.0.0-nightly.20220106","18.0.0-nightly.20220107","18.0.0-nightly.20220110"],"98.0.4758.9":["17.0.0-beta.3"],"98.0.4758.11":["17.0.0-beta.4","17.0.0-beta.5","17.0.0-beta.6","17.0.0-beta.7","17.0.0-beta.8","17.0.0-beta.9"],"98.0.4758.74":["17.0.0"],"98.0.4758.82":["17.0.1"],"98.0.4758.102":["17.1.0"],"98.0.4758.109":["17.1.1","17.1.2","17.2.0"],"98.0.4758.141":["17.3.0","17.3.1","17.4.0","17.4.1","17.4.2","17.4.3","17.4.4","17.4.5","17.4.6","17.4.7","17.4.8","17.4.9","17.4.10","17.4.11"],"99.0.4767.0":["18.0.0-alpha.1","18.0.0-alpha.2","18.0.0-alpha.3","18.0.0-alpha.4","18.0.0-alpha.5","18.0.0-nightly.20220111","18.0.0-nightly.20220112","18.0.0-nightly.20220113","18.0.0-nightly.20220114","18.0.0-nightly.20220117","18.0.0-nightly.20220118","18.0.0-nightly.20220119","18.0.0-nightly.20220121","18.0.0-nightly.20220124","18.0.0-nightly.20220125","18.0.0-nightly.20220127","18.0.0-nightly.20220128","18.0.0-nightly.20220131","18.0.0-nightly.20220201","19.0.0-nightly.20220202","19.0.0-nightly.20220203","19.0.0-nightly.20220204","19.0.0-nightly.20220207","19.0.0-nightly.20220208","19.0.0-nightly.20220209"],"100.0.4894.0":["18.0.0-beta.1","18.0.0-beta.2","18.0.0-beta.3","18.0.0-beta.4","18.0.0-beta.5","18.0.0-beta.6","19.0.0-nightly.20220308","19.0.0-nightly.20220309","19.0.0-nightly.20220310","19.0.0-nightly.20220311","19.0.0-nightly.20220314","19.0.0-nightly.20220315","19.0.0-nightly.20220316","19.0.0-nightly.20220317","19.0.0-nightly.20220318","19.0.0-nightly.20220321","19.0.0-nightly.20220322","19.0.0-nightly.20220323","19.0.0-nightly.20220324"],"100.0.4896.56":["18.0.0"],"100.0.4896.60":["18.0.1","18.0.2"],"100.0.4896.75":["18.0.3","18.0.4"],"100.0.4896.127":["18.1.0"],"100.0.4896.143":["18.2.0","18.2.1","18.2.2","18.2.3"],"100.0.4896.160":["18.2.4","18.3.0","18.3.1","18.3.2","18.3.3","18.3.4","18.3.5","18.3.6","18.3.7","18.3.8","18.3.9","18.3.11","18.3.12","18.3.13","18.3.14"],"102.0.4962.3":["19.0.0-alpha.1","19.0.0-nightly.20220328","19.0.0-nightly.20220329","20.0.0-nightly.20220330"],"102.0.4971.0":["19.0.0-alpha.2","19.0.0-alpha.3","20.0.0-nightly.20220411"],"102.0.4989.0":["19.0.0-alpha.4","19.0.0-alpha.5","20.0.0-nightly.20220414","20.0.0-nightly.20220415","20.0.0-nightly.20220418","20.0.0-nightly.20220419","20.0.0-nightly.20220420","20.0.0-nightly.20220421"],"102.0.4999.0":["19.0.0-beta.1","19.0.0-beta.2","19.0.0-beta.3","20.0.0-nightly.20220425","20.0.0-nightly.20220426","20.0.0-nightly.20220427","20.0.0-nightly.20220428","20.0.0-nightly.20220429","20.0.0-nightly.20220502","20.0.0-nightly.20220503","20.0.0-nightly.20220504","20.0.0-nightly.20220505","20.0.0-nightly.20220506","20.0.0-nightly.20220509","20.0.0-nightly.20220511","20.0.0-nightly.20220512","20.0.0-nightly.20220513","20.0.0-nightly.20220516","20.0.0-nightly.20220517"],"102.0.5005.27":["19.0.0-beta.4"],"102.0.5005.40":["19.0.0-beta.5","19.0.0-beta.6","19.0.0-beta.7"],"102.0.5005.49":["19.0.0-beta.8"],"102.0.4961.0":["19.0.0-nightly.20220325"],"102.0.5005.61":["19.0.0","19.0.1"],"102.0.5005.63":["19.0.2","19.0.3","19.0.4"],"102.0.5005.115":["19.0.5","19.0.6"],"102.0.5005.134":["19.0.7"],"102.0.5005.148":["19.0.8"],"102.0.5005.167":["19.0.9","19.0.10","19.0.11","19.0.12","19.0.13","19.0.14","19.0.15","19.0.16","19.0.17","19.1.0"],"103.0.5044.0":["20.0.0-alpha.1","20.0.0-nightly.20220518","20.0.0-nightly.20220519","20.0.0-nightly.20220520","20.0.0-nightly.20220523","20.0.0-nightly.20220524","21.0.0-nightly.20220526","21.0.0-nightly.20220527","21.0.0-nightly.20220530","21.0.0-nightly.20220531"],"104.0.5073.0":["20.0.0-alpha.2","20.0.0-alpha.3","20.0.0-alpha.4","20.0.0-alpha.5","20.0.0-alpha.6","20.0.0-alpha.7","20.0.0-beta.1","20.0.0-beta.2","20.0.0-beta.3","20.0.0-beta.4","20.0.0-beta.5","20.0.0-beta.6","20.0.0-beta.7","20.0.0-beta.8","21.0.0-nightly.20220602","21.0.0-nightly.20220603","21.0.0-nightly.20220606","21.0.0-nightly.20220607","21.0.0-nightly.20220608","21.0.0-nightly.20220609","21.0.0-nightly.20220610","21.0.0-nightly.20220613","21.0.0-nightly.20220614","21.0.0-nightly.20220615","21.0.0-nightly.20220616","21.0.0-nightly.20220617","21.0.0-nightly.20220620","21.0.0-nightly.20220621","21.0.0-nightly.20220622","21.0.0-nightly.20220623","21.0.0-nightly.20220624","21.0.0-nightly.20220627"],"104.0.5112.39":["20.0.0-beta.9"],"104.0.5112.48":["20.0.0-beta.10","20.0.0-beta.11","20.0.0-beta.12"],"104.0.5112.57":["20.0.0-beta.13"],"104.0.5112.65":["20.0.0"],"104.0.5112.81":["20.0.1","20.0.2","20.0.3"],"104.0.5112.102":["20.1.0","20.1.1"],"104.0.5112.114":["20.1.2","20.1.3","20.1.4"],"104.0.5112.124":["20.2.0"],"105.0.5187.0":["21.0.0-alpha.1","21.0.0-alpha.2","21.0.0-alpha.3","21.0.0-alpha.4","21.0.0-alpha.5","21.0.0-nightly.20220720","21.0.0-nightly.20220721","21.0.0-nightly.20220722","21.0.0-nightly.20220725","21.0.0-nightly.20220726","21.0.0-nightly.20220727","21.0.0-nightly.20220728","21.0.0-nightly.20220801","21.0.0-nightly.20220802","22.0.0-nightly.20220808","22.0.0-nightly.20220809","22.0.0-nightly.20220810","22.0.0-nightly.20220811","22.0.0-nightly.20220812","22.0.0-nightly.20220815","22.0.0-nightly.20220816","22.0.0-nightly.20220817"],"106.0.5216.0":["21.0.0-alpha.6","21.0.0-beta.1","21.0.0-beta.2","21.0.0-beta.3","21.0.0-beta.4","21.0.0-beta.5","22.0.0-nightly.20220822","22.0.0-nightly.20220823","22.0.0-nightly.20220824","22.0.0-nightly.20220825","22.0.0-nightly.20220829","22.0.0-nightly.20220830","22.0.0-nightly.20220831","22.0.0-nightly.20220901","22.0.0-nightly.20220902","22.0.0-nightly.20220905"],"106.0.5249.40":["21.0.0-beta.6","21.0.0-beta.7","21.0.0-beta.8"],"105.0.5129.0":["21.0.0-nightly.20220628","21.0.0-nightly.20220629","21.0.0-nightly.20220630","21.0.0-nightly.20220701","21.0.0-nightly.20220704","21.0.0-nightly.20220705","21.0.0-nightly.20220706","21.0.0-nightly.20220707","21.0.0-nightly.20220708","21.0.0-nightly.20220711","21.0.0-nightly.20220712","21.0.0-nightly.20220713"],"105.0.5173.0":["21.0.0-nightly.20220715","21.0.0-nightly.20220718","21.0.0-nightly.20220719"],"107.0.5274.0":["22.0.0-nightly.20220908"],"107.0.5286.0":["22.0.0-nightly.20220909","22.0.0-nightly.20220912","22.0.0-nightly.20220913","22.0.0-nightly.20220914","22.0.0-nightly.20220915","22.0.0-nightly.20220916","22.0.0-nightly.20220919","22.0.0-nightly.20220920","22.0.0-nightly.20220921","22.0.0-nightly.20220922","22.0.0-nightly.20220923"]} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/electron-to-chromium/full-versions.js b/tools/node_modules/eslint/node_modules/electron-to-chromium/full-versions.js index 5369e370f0a..36b55406091 100644 --- a/tools/node_modules/eslint/node_modules/electron-to-chromium/full-versions.js +++ b/tools/node_modules/eslint/node_modules/electron-to-chromium/full-versions.js @@ -1054,6 +1054,8 @@ module.exports = { "14.2.5": "93.0.4577.82", "14.2.6": "93.0.4577.82", "14.2.7": "93.0.4577.82", + "14.2.8": "93.0.4577.82", + "14.2.9": "93.0.4577.82", "15.0.0-alpha.1": "93.0.4566.0", "15.0.0-alpha.2": "93.0.4566.0", "15.0.0-alpha.3": "94.0.4584.0", @@ -1125,6 +1127,15 @@ module.exports = { "15.3.7": "94.0.4606.81", "15.4.0": "94.0.4606.81", "15.4.1": "94.0.4606.81", + "15.4.2": "94.0.4606.81", + "15.5.0": "94.0.4606.81", + "15.5.1": "94.0.4606.81", + "15.5.2": "94.0.4606.81", + "15.5.3": "94.0.4606.81", + "15.5.4": "94.0.4606.81", + "15.5.5": "94.0.4606.81", + "15.5.6": "94.0.4606.81", + "15.5.7": "94.0.4606.81", "16.0.0-alpha.1": "95.0.4629.0", "16.0.0-alpha.2": "95.0.4629.0", "16.0.0-alpha.3": "95.0.4629.0", @@ -1200,6 +1211,16 @@ module.exports = { "16.0.9": "96.0.4664.174", "16.0.10": "96.0.4664.174", "16.1.0": "96.0.4664.174", + "16.1.1": "96.0.4664.174", + "16.2.0": "96.0.4664.174", + "16.2.1": "96.0.4664.174", + "16.2.2": "96.0.4664.174", + "16.2.3": "96.0.4664.174", + "16.2.4": "96.0.4664.174", + "16.2.5": "96.0.4664.174", + "16.2.6": "96.0.4664.174", + "16.2.7": "96.0.4664.174", + "16.2.8": "96.0.4664.174", "17.0.0-alpha.1": "96.0.4664.4", "17.0.0-alpha.2": "96.0.4664.4", "17.0.0-alpha.3": "96.0.4664.4", @@ -1260,6 +1281,21 @@ module.exports = { "17.1.0": "98.0.4758.102", "17.1.1": "98.0.4758.109", "17.1.2": "98.0.4758.109", + "17.2.0": "98.0.4758.109", + "17.3.0": "98.0.4758.141", + "17.3.1": "98.0.4758.141", + "17.4.0": "98.0.4758.141", + "17.4.1": "98.0.4758.141", + "17.4.2": "98.0.4758.141", + "17.4.3": "98.0.4758.141", + "17.4.4": "98.0.4758.141", + "17.4.5": "98.0.4758.141", + "17.4.6": "98.0.4758.141", + "17.4.7": "98.0.4758.141", + "17.4.8": "98.0.4758.141", + "17.4.9": "98.0.4758.141", + "17.4.10": "98.0.4758.141", + "17.4.11": "98.0.4758.141", "18.0.0-alpha.1": "99.0.4767.0", "18.0.0-alpha.2": "99.0.4767.0", "18.0.0-alpha.3": "99.0.4767.0", @@ -1267,6 +1303,10 @@ module.exports = { "18.0.0-alpha.5": "99.0.4767.0", "18.0.0-beta.1": "100.0.4894.0", "18.0.0-beta.2": "100.0.4894.0", + "18.0.0-beta.3": "100.0.4894.0", + "18.0.0-beta.4": "100.0.4894.0", + "18.0.0-beta.5": "100.0.4894.0", + "18.0.0-beta.6": "100.0.4894.0", "18.0.0-nightly.20211118": "96.0.4664.4", "18.0.0-nightly.20211119": "96.0.4664.4", "18.0.0-nightly.20211122": "96.0.4664.4", @@ -1316,6 +1356,44 @@ module.exports = { "18.0.0-nightly.20220128": "99.0.4767.0", "18.0.0-nightly.20220131": "99.0.4767.0", "18.0.0-nightly.20220201": "99.0.4767.0", + "18.0.0": "100.0.4896.56", + "18.0.1": "100.0.4896.60", + "18.0.2": "100.0.4896.60", + "18.0.3": "100.0.4896.75", + "18.0.4": "100.0.4896.75", + "18.1.0": "100.0.4896.127", + "18.2.0": "100.0.4896.143", + "18.2.1": "100.0.4896.143", + "18.2.2": "100.0.4896.143", + "18.2.3": "100.0.4896.143", + "18.2.4": "100.0.4896.160", + "18.3.0": "100.0.4896.160", + "18.3.1": "100.0.4896.160", + "18.3.2": "100.0.4896.160", + "18.3.3": "100.0.4896.160", + "18.3.4": "100.0.4896.160", + "18.3.5": "100.0.4896.160", + "18.3.6": "100.0.4896.160", + "18.3.7": "100.0.4896.160", + "18.3.8": "100.0.4896.160", + "18.3.9": "100.0.4896.160", + "18.3.11": "100.0.4896.160", + "18.3.12": "100.0.4896.160", + "18.3.13": "100.0.4896.160", + "18.3.14": "100.0.4896.160", + "19.0.0-alpha.1": "102.0.4962.3", + "19.0.0-alpha.2": "102.0.4971.0", + "19.0.0-alpha.3": "102.0.4971.0", + "19.0.0-alpha.4": "102.0.4989.0", + "19.0.0-alpha.5": "102.0.4989.0", + "19.0.0-beta.1": "102.0.4999.0", + "19.0.0-beta.2": "102.0.4999.0", + "19.0.0-beta.3": "102.0.4999.0", + "19.0.0-beta.4": "102.0.5005.27", + "19.0.0-beta.5": "102.0.5005.40", + "19.0.0-beta.6": "102.0.5005.40", + "19.0.0-beta.7": "102.0.5005.40", + "19.0.0-beta.8": "102.0.5005.49", "19.0.0-nightly.20220202": "99.0.4767.0", "19.0.0-nightly.20220203": "99.0.4767.0", "19.0.0-nightly.20220204": "99.0.4767.0", @@ -1325,5 +1403,185 @@ module.exports = { "19.0.0-nightly.20220308": "100.0.4894.0", "19.0.0-nightly.20220309": "100.0.4894.0", "19.0.0-nightly.20220310": "100.0.4894.0", - "19.0.0-nightly.20220311": "100.0.4894.0" + "19.0.0-nightly.20220311": "100.0.4894.0", + "19.0.0-nightly.20220314": "100.0.4894.0", + "19.0.0-nightly.20220315": "100.0.4894.0", + "19.0.0-nightly.20220316": "100.0.4894.0", + "19.0.0-nightly.20220317": "100.0.4894.0", + "19.0.0-nightly.20220318": "100.0.4894.0", + "19.0.0-nightly.20220321": "100.0.4894.0", + "19.0.0-nightly.20220322": "100.0.4894.0", + "19.0.0-nightly.20220323": "100.0.4894.0", + "19.0.0-nightly.20220324": "100.0.4894.0", + "19.0.0-nightly.20220325": "102.0.4961.0", + "19.0.0-nightly.20220328": "102.0.4962.3", + "19.0.0-nightly.20220329": "102.0.4962.3", + "19.0.0": "102.0.5005.61", + "19.0.1": "102.0.5005.61", + "19.0.2": "102.0.5005.63", + "19.0.3": "102.0.5005.63", + "19.0.4": "102.0.5005.63", + "19.0.5": "102.0.5005.115", + "19.0.6": "102.0.5005.115", + "19.0.7": "102.0.5005.134", + "19.0.8": "102.0.5005.148", + "19.0.9": "102.0.5005.167", + "19.0.10": "102.0.5005.167", + "19.0.11": "102.0.5005.167", + "19.0.12": "102.0.5005.167", + "19.0.13": "102.0.5005.167", + "19.0.14": "102.0.5005.167", + "19.0.15": "102.0.5005.167", + "19.0.16": "102.0.5005.167", + "19.0.17": "102.0.5005.167", + "19.1.0": "102.0.5005.167", + "20.0.0-alpha.1": "103.0.5044.0", + "20.0.0-alpha.2": "104.0.5073.0", + "20.0.0-alpha.3": "104.0.5073.0", + "20.0.0-alpha.4": "104.0.5073.0", + "20.0.0-alpha.5": "104.0.5073.0", + "20.0.0-alpha.6": "104.0.5073.0", + "20.0.0-alpha.7": "104.0.5073.0", + "20.0.0-beta.1": "104.0.5073.0", + "20.0.0-beta.2": "104.0.5073.0", + "20.0.0-beta.3": "104.0.5073.0", + "20.0.0-beta.4": "104.0.5073.0", + "20.0.0-beta.5": "104.0.5073.0", + "20.0.0-beta.6": "104.0.5073.0", + "20.0.0-beta.7": "104.0.5073.0", + "20.0.0-beta.8": "104.0.5073.0", + "20.0.0-beta.9": "104.0.5112.39", + "20.0.0-beta.10": "104.0.5112.48", + "20.0.0-beta.11": "104.0.5112.48", + "20.0.0-beta.12": "104.0.5112.48", + "20.0.0-beta.13": "104.0.5112.57", + "20.0.0-nightly.20220330": "102.0.4962.3", + "20.0.0-nightly.20220411": "102.0.4971.0", + "20.0.0-nightly.20220414": "102.0.4989.0", + "20.0.0-nightly.20220415": "102.0.4989.0", + "20.0.0-nightly.20220418": "102.0.4989.0", + "20.0.0-nightly.20220419": "102.0.4989.0", + "20.0.0-nightly.20220420": "102.0.4989.0", + "20.0.0-nightly.20220421": "102.0.4989.0", + "20.0.0-nightly.20220425": "102.0.4999.0", + "20.0.0-nightly.20220426": "102.0.4999.0", + "20.0.0-nightly.20220427": "102.0.4999.0", + "20.0.0-nightly.20220428": "102.0.4999.0", + "20.0.0-nightly.20220429": "102.0.4999.0", + "20.0.0-nightly.20220502": "102.0.4999.0", + "20.0.0-nightly.20220503": "102.0.4999.0", + "20.0.0-nightly.20220504": "102.0.4999.0", + "20.0.0-nightly.20220505": "102.0.4999.0", + "20.0.0-nightly.20220506": "102.0.4999.0", + "20.0.0-nightly.20220509": "102.0.4999.0", + "20.0.0-nightly.20220511": "102.0.4999.0", + "20.0.0-nightly.20220512": "102.0.4999.0", + "20.0.0-nightly.20220513": "102.0.4999.0", + "20.0.0-nightly.20220516": "102.0.4999.0", + "20.0.0-nightly.20220517": "102.0.4999.0", + "20.0.0-nightly.20220518": "103.0.5044.0", + "20.0.0-nightly.20220519": "103.0.5044.0", + "20.0.0-nightly.20220520": "103.0.5044.0", + "20.0.0-nightly.20220523": "103.0.5044.0", + "20.0.0-nightly.20220524": "103.0.5044.0", + "20.0.0": "104.0.5112.65", + "20.0.1": "104.0.5112.81", + "20.0.2": "104.0.5112.81", + "20.0.3": "104.0.5112.81", + "20.1.0": "104.0.5112.102", + "20.1.1": "104.0.5112.102", + "20.1.2": "104.0.5112.114", + "20.1.3": "104.0.5112.114", + "20.1.4": "104.0.5112.114", + "20.2.0": "104.0.5112.124", + "21.0.0-alpha.1": "105.0.5187.0", + "21.0.0-alpha.2": "105.0.5187.0", + "21.0.0-alpha.3": "105.0.5187.0", + "21.0.0-alpha.4": "105.0.5187.0", + "21.0.0-alpha.5": "105.0.5187.0", + "21.0.0-alpha.6": "106.0.5216.0", + "21.0.0-beta.1": "106.0.5216.0", + "21.0.0-beta.2": "106.0.5216.0", + "21.0.0-beta.3": "106.0.5216.0", + "21.0.0-beta.4": "106.0.5216.0", + "21.0.0-beta.5": "106.0.5216.0", + "21.0.0-beta.6": "106.0.5249.40", + "21.0.0-beta.7": "106.0.5249.40", + "21.0.0-beta.8": "106.0.5249.40", + "21.0.0-nightly.20220526": "103.0.5044.0", + "21.0.0-nightly.20220527": "103.0.5044.0", + "21.0.0-nightly.20220530": "103.0.5044.0", + "21.0.0-nightly.20220531": "103.0.5044.0", + "21.0.0-nightly.20220602": "104.0.5073.0", + "21.0.0-nightly.20220603": "104.0.5073.0", + "21.0.0-nightly.20220606": "104.0.5073.0", + "21.0.0-nightly.20220607": "104.0.5073.0", + "21.0.0-nightly.20220608": "104.0.5073.0", + "21.0.0-nightly.20220609": "104.0.5073.0", + "21.0.0-nightly.20220610": "104.0.5073.0", + "21.0.0-nightly.20220613": "104.0.5073.0", + "21.0.0-nightly.20220614": "104.0.5073.0", + "21.0.0-nightly.20220615": "104.0.5073.0", + "21.0.0-nightly.20220616": "104.0.5073.0", + "21.0.0-nightly.20220617": "104.0.5073.0", + "21.0.0-nightly.20220620": "104.0.5073.0", + "21.0.0-nightly.20220621": "104.0.5073.0", + "21.0.0-nightly.20220622": "104.0.5073.0", + "21.0.0-nightly.20220623": "104.0.5073.0", + "21.0.0-nightly.20220624": "104.0.5073.0", + "21.0.0-nightly.20220627": "104.0.5073.0", + "21.0.0-nightly.20220628": "105.0.5129.0", + "21.0.0-nightly.20220629": "105.0.5129.0", + "21.0.0-nightly.20220630": "105.0.5129.0", + "21.0.0-nightly.20220701": "105.0.5129.0", + "21.0.0-nightly.20220704": "105.0.5129.0", + "21.0.0-nightly.20220705": "105.0.5129.0", + "21.0.0-nightly.20220706": "105.0.5129.0", + "21.0.0-nightly.20220707": "105.0.5129.0", + "21.0.0-nightly.20220708": "105.0.5129.0", + "21.0.0-nightly.20220711": "105.0.5129.0", + "21.0.0-nightly.20220712": "105.0.5129.0", + "21.0.0-nightly.20220713": "105.0.5129.0", + "21.0.0-nightly.20220715": "105.0.5173.0", + "21.0.0-nightly.20220718": "105.0.5173.0", + "21.0.0-nightly.20220719": "105.0.5173.0", + "21.0.0-nightly.20220720": "105.0.5187.0", + "21.0.0-nightly.20220721": "105.0.5187.0", + "21.0.0-nightly.20220722": "105.0.5187.0", + "21.0.0-nightly.20220725": "105.0.5187.0", + "21.0.0-nightly.20220726": "105.0.5187.0", + "21.0.0-nightly.20220727": "105.0.5187.0", + "21.0.0-nightly.20220728": "105.0.5187.0", + "21.0.0-nightly.20220801": "105.0.5187.0", + "21.0.0-nightly.20220802": "105.0.5187.0", + "22.0.0-nightly.20220808": "105.0.5187.0", + "22.0.0-nightly.20220809": "105.0.5187.0", + "22.0.0-nightly.20220810": "105.0.5187.0", + "22.0.0-nightly.20220811": "105.0.5187.0", + "22.0.0-nightly.20220812": "105.0.5187.0", + "22.0.0-nightly.20220815": "105.0.5187.0", + "22.0.0-nightly.20220816": "105.0.5187.0", + "22.0.0-nightly.20220817": "105.0.5187.0", + "22.0.0-nightly.20220822": "106.0.5216.0", + "22.0.0-nightly.20220823": "106.0.5216.0", + "22.0.0-nightly.20220824": "106.0.5216.0", + "22.0.0-nightly.20220825": "106.0.5216.0", + "22.0.0-nightly.20220829": "106.0.5216.0", + "22.0.0-nightly.20220830": "106.0.5216.0", + "22.0.0-nightly.20220831": "106.0.5216.0", + "22.0.0-nightly.20220901": "106.0.5216.0", + "22.0.0-nightly.20220902": "106.0.5216.0", + "22.0.0-nightly.20220905": "106.0.5216.0", + "22.0.0-nightly.20220908": "107.0.5274.0", + "22.0.0-nightly.20220909": "107.0.5286.0", + "22.0.0-nightly.20220912": "107.0.5286.0", + "22.0.0-nightly.20220913": "107.0.5286.0", + "22.0.0-nightly.20220914": "107.0.5286.0", + "22.0.0-nightly.20220915": "107.0.5286.0", + "22.0.0-nightly.20220916": "107.0.5286.0", + "22.0.0-nightly.20220919": "107.0.5286.0", + "22.0.0-nightly.20220920": "107.0.5286.0", + "22.0.0-nightly.20220921": "107.0.5286.0", + "22.0.0-nightly.20220922": "107.0.5286.0", + "22.0.0-nightly.20220923": "107.0.5286.0" }; \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/electron-to-chromium/full-versions.json b/tools/node_modules/eslint/node_modules/electron-to-chromium/full-versions.json index 29b0681569d..557ed3709a1 100644 --- a/tools/node_modules/eslint/node_modules/electron-to-chromium/full-versions.json +++ b/tools/node_modules/eslint/node_modules/electron-to-chromium/full-versions.json @@ -1 +1 @@ -{"0.20.0":"39.0.2171.65","0.20.1":"39.0.2171.65","0.20.2":"39.0.2171.65","0.20.3":"39.0.2171.65","0.20.4":"39.0.2171.65","0.20.5":"39.0.2171.65","0.20.6":"39.0.2171.65","0.20.7":"39.0.2171.65","0.20.8":"39.0.2171.65","0.21.0":"40.0.2214.91","0.21.1":"40.0.2214.91","0.21.2":"40.0.2214.91","0.21.3":"41.0.2272.76","0.22.1":"41.0.2272.76","0.22.2":"41.0.2272.76","0.22.3":"41.0.2272.76","0.23.0":"41.0.2272.76","0.24.0":"41.0.2272.76","0.25.0":"42.0.2311.107","0.25.1":"42.0.2311.107","0.25.2":"42.0.2311.107","0.25.3":"42.0.2311.107","0.26.0":"42.0.2311.107","0.26.1":"42.0.2311.107","0.27.0":"42.0.2311.107","0.27.1":"42.0.2311.107","0.27.2":"43.0.2357.65","0.27.3":"43.0.2357.65","0.28.0":"43.0.2357.65","0.28.1":"43.0.2357.65","0.28.2":"43.0.2357.65","0.28.3":"43.0.2357.65","0.29.1":"43.0.2357.65","0.29.2":"43.0.2357.65","0.30.4":"44.0.2403.125","0.31.0":"44.0.2403.125","0.31.2":"45.0.2454.85","0.32.2":"45.0.2454.85","0.32.3":"45.0.2454.85","0.33.0":"45.0.2454.85","0.33.1":"45.0.2454.85","0.33.2":"45.0.2454.85","0.33.3":"45.0.2454.85","0.33.4":"45.0.2454.85","0.33.6":"45.0.2454.85","0.33.7":"45.0.2454.85","0.33.8":"45.0.2454.85","0.33.9":"45.0.2454.85","0.34.0":"45.0.2454.85","0.34.1":"45.0.2454.85","0.34.2":"45.0.2454.85","0.34.3":"45.0.2454.85","0.34.4":"45.0.2454.85","0.35.1":"45.0.2454.85","0.35.2":"45.0.2454.85","0.35.3":"45.0.2454.85","0.35.4":"45.0.2454.85","0.35.5":"45.0.2454.85","0.36.0":"47.0.2526.73","0.36.2":"47.0.2526.73","0.36.3":"47.0.2526.73","0.36.4":"47.0.2526.73","0.36.5":"47.0.2526.110","0.36.6":"47.0.2526.110","0.36.7":"47.0.2526.110","0.36.8":"47.0.2526.110","0.36.9":"47.0.2526.110","0.36.10":"47.0.2526.110","0.36.11":"47.0.2526.110","0.36.12":"47.0.2526.110","0.37.0":"49.0.2623.75","0.37.1":"49.0.2623.75","0.37.3":"49.0.2623.75","0.37.4":"49.0.2623.75","0.37.5":"49.0.2623.75","0.37.6":"49.0.2623.75","0.37.7":"49.0.2623.75","0.37.8":"49.0.2623.75","1.0.0":"49.0.2623.75","1.0.1":"49.0.2623.75","1.0.2":"49.0.2623.75","1.1.0":"50.0.2661.102","1.1.1":"50.0.2661.102","1.1.2":"50.0.2661.102","1.1.3":"50.0.2661.102","1.2.0":"51.0.2704.63","1.2.1":"51.0.2704.63","1.2.2":"51.0.2704.84","1.2.3":"51.0.2704.84","1.2.4":"51.0.2704.103","1.2.5":"51.0.2704.103","1.2.6":"51.0.2704.106","1.2.7":"51.0.2704.106","1.2.8":"51.0.2704.106","1.3.0":"52.0.2743.82","1.3.1":"52.0.2743.82","1.3.2":"52.0.2743.82","1.3.3":"52.0.2743.82","1.3.4":"52.0.2743.82","1.3.5":"52.0.2743.82","1.3.6":"52.0.2743.82","1.3.7":"52.0.2743.82","1.3.9":"52.0.2743.82","1.3.10":"52.0.2743.82","1.3.13":"52.0.2743.82","1.3.14":"52.0.2743.82","1.3.15":"52.0.2743.82","1.4.0":"53.0.2785.113","1.4.1":"53.0.2785.113","1.4.2":"53.0.2785.113","1.4.3":"53.0.2785.113","1.4.4":"53.0.2785.113","1.4.5":"53.0.2785.113","1.4.6":"53.0.2785.143","1.4.7":"53.0.2785.143","1.4.8":"53.0.2785.143","1.4.10":"53.0.2785.143","1.4.11":"53.0.2785.143","1.4.12":"54.0.2840.51","1.4.13":"53.0.2785.143","1.4.14":"53.0.2785.143","1.4.15":"53.0.2785.143","1.4.16":"53.0.2785.143","1.5.0":"54.0.2840.101","1.5.1":"54.0.2840.101","1.6.0":"56.0.2924.87","1.6.1":"56.0.2924.87","1.6.2":"56.0.2924.87","1.6.3":"56.0.2924.87","1.6.4":"56.0.2924.87","1.6.5":"56.0.2924.87","1.6.6":"56.0.2924.87","1.6.7":"56.0.2924.87","1.6.8":"56.0.2924.87","1.6.9":"56.0.2924.87","1.6.10":"56.0.2924.87","1.6.11":"56.0.2924.87","1.6.12":"56.0.2924.87","1.6.13":"56.0.2924.87","1.6.14":"56.0.2924.87","1.6.15":"56.0.2924.87","1.6.16":"56.0.2924.87","1.6.17":"56.0.2924.87","1.6.18":"56.0.2924.87","1.7.0":"58.0.3029.110","1.7.1":"58.0.3029.110","1.7.2":"58.0.3029.110","1.7.3":"58.0.3029.110","1.7.4":"58.0.3029.110","1.7.5":"58.0.3029.110","1.7.6":"58.0.3029.110","1.7.7":"58.0.3029.110","1.7.8":"58.0.3029.110","1.7.9":"58.0.3029.110","1.7.10":"58.0.3029.110","1.7.11":"58.0.3029.110","1.7.12":"58.0.3029.110","1.7.13":"58.0.3029.110","1.7.14":"58.0.3029.110","1.7.15":"58.0.3029.110","1.7.16":"58.0.3029.110","1.8.0":"59.0.3071.115","1.8.1":"59.0.3071.115","1.8.2-beta.1":"59.0.3071.115","1.8.2-beta.2":"59.0.3071.115","1.8.2-beta.3":"59.0.3071.115","1.8.2-beta.4":"59.0.3071.115","1.8.2-beta.5":"59.0.3071.115","1.8.2":"59.0.3071.115","1.8.3":"59.0.3071.115","1.8.4":"59.0.3071.115","1.8.5":"59.0.3071.115","1.8.6":"59.0.3071.115","1.8.7":"59.0.3071.115","1.8.8":"59.0.3071.115","2.0.0-beta.1":"61.0.3163.100","2.0.0-beta.2":"61.0.3163.100","2.0.0-beta.3":"61.0.3163.100","2.0.0-beta.4":"61.0.3163.100","2.0.0-beta.5":"61.0.3163.100","2.0.0-beta.6":"61.0.3163.100","2.0.0-beta.7":"61.0.3163.100","2.0.0-beta.8":"61.0.3163.100","2.0.0":"61.0.3163.100","2.0.1":"61.0.3163.100","2.0.2":"61.0.3163.100","2.0.3":"61.0.3163.100","2.0.4":"61.0.3163.100","2.0.5":"61.0.3163.100","2.0.6":"61.0.3163.100","2.0.7":"61.0.3163.100","2.0.8-nightly.20180819":"61.0.3163.100","2.0.8-nightly.20180820":"61.0.3163.100","2.0.8":"61.0.3163.100","2.0.9":"61.0.3163.100","2.0.10":"61.0.3163.100","2.0.11":"61.0.3163.100","2.0.12":"61.0.3163.100","2.0.13":"61.0.3163.100","2.0.14":"61.0.3163.100","2.0.15":"61.0.3163.100","2.0.16":"61.0.3163.100","2.0.17":"61.0.3163.100","2.0.18":"61.0.3163.100","2.1.0-unsupported.20180809":"61.0.3163.100","3.0.0-beta.1":"66.0.3359.181","3.0.0-beta.2":"66.0.3359.181","3.0.0-beta.3":"66.0.3359.181","3.0.0-beta.4":"66.0.3359.181","3.0.0-beta.5":"66.0.3359.181","3.0.0-beta.6":"66.0.3359.181","3.0.0-beta.7":"66.0.3359.181","3.0.0-beta.8":"66.0.3359.181","3.0.0-beta.9":"66.0.3359.181","3.0.0-beta.10":"66.0.3359.181","3.0.0-beta.11":"66.0.3359.181","3.0.0-beta.12":"66.0.3359.181","3.0.0-beta.13":"66.0.3359.181","3.0.0-nightly.20180818":"66.0.3359.181","3.0.0-nightly.20180821":"66.0.3359.181","3.0.0-nightly.20180823":"66.0.3359.181","3.0.0-nightly.20180904":"66.0.3359.181","3.0.0":"66.0.3359.181","3.0.1":"66.0.3359.181","3.0.2":"66.0.3359.181","3.0.3":"66.0.3359.181","3.0.4":"66.0.3359.181","3.0.5":"66.0.3359.181","3.0.6":"66.0.3359.181","3.0.7":"66.0.3359.181","3.0.8":"66.0.3359.181","3.0.9":"66.0.3359.181","3.0.10":"66.0.3359.181","3.0.11":"66.0.3359.181","3.0.12":"66.0.3359.181","3.0.13":"66.0.3359.181","3.0.14":"66.0.3359.181","3.0.15":"66.0.3359.181","3.0.16":"66.0.3359.181","3.1.0-beta.1":"66.0.3359.181","3.1.0-beta.2":"66.0.3359.181","3.1.0-beta.3":"66.0.3359.181","3.1.0-beta.4":"66.0.3359.181","3.1.0-beta.5":"66.0.3359.181","3.1.0":"66.0.3359.181","3.1.1":"66.0.3359.181","3.1.2":"66.0.3359.181","3.1.3":"66.0.3359.181","3.1.4":"66.0.3359.181","3.1.5":"66.0.3359.181","3.1.6":"66.0.3359.181","3.1.7":"66.0.3359.181","3.1.8":"66.0.3359.181","3.1.9":"66.0.3359.181","3.1.10":"66.0.3359.181","3.1.11":"66.0.3359.181","3.1.12":"66.0.3359.181","3.1.13":"66.0.3359.181","4.0.0-beta.1":"69.0.3497.106","4.0.0-beta.2":"69.0.3497.106","4.0.0-beta.3":"69.0.3497.106","4.0.0-beta.4":"69.0.3497.106","4.0.0-beta.5":"69.0.3497.106","4.0.0-beta.6":"69.0.3497.106","4.0.0-beta.7":"69.0.3497.106","4.0.0-beta.8":"69.0.3497.106","4.0.0-beta.9":"69.0.3497.106","4.0.0-beta.10":"69.0.3497.106","4.0.0-beta.11":"69.0.3497.106","4.0.0-nightly.20180817":"66.0.3359.181","4.0.0-nightly.20180819":"66.0.3359.181","4.0.0-nightly.20180821":"66.0.3359.181","4.0.0-nightly.20180929":"67.0.3396.99","4.0.0-nightly.20181006":"68.0.3440.128","4.0.0-nightly.20181010":"69.0.3497.106","4.0.0":"69.0.3497.106","4.0.1":"69.0.3497.106","4.0.2":"69.0.3497.106","4.0.3":"69.0.3497.106","4.0.4":"69.0.3497.106","4.0.5":"69.0.3497.106","4.0.6":"69.0.3497.106","4.0.7":"69.0.3497.128","4.0.8":"69.0.3497.128","4.1.0":"69.0.3497.128","4.1.1":"69.0.3497.128","4.1.2":"69.0.3497.128","4.1.3":"69.0.3497.128","4.1.4":"69.0.3497.128","4.1.5":"69.0.3497.128","4.2.0":"69.0.3497.128","4.2.1":"69.0.3497.128","4.2.2":"69.0.3497.128","4.2.3":"69.0.3497.128","4.2.4":"69.0.3497.128","4.2.5":"69.0.3497.128","4.2.6":"69.0.3497.128","4.2.7":"69.0.3497.128","4.2.8":"69.0.3497.128","4.2.9":"69.0.3497.128","4.2.10":"69.0.3497.128","4.2.11":"69.0.3497.128","4.2.12":"69.0.3497.128","5.0.0-beta.1":"72.0.3626.52","5.0.0-beta.2":"72.0.3626.52","5.0.0-beta.3":"73.0.3683.27","5.0.0-beta.4":"73.0.3683.54","5.0.0-beta.5":"73.0.3683.61","5.0.0-beta.6":"73.0.3683.84","5.0.0-beta.7":"73.0.3683.94","5.0.0-beta.8":"73.0.3683.104","5.0.0-beta.9":"73.0.3683.117","5.0.0-nightly.20190107":"70.0.3538.110","5.0.0-nightly.20190121":"71.0.3578.98","5.0.0-nightly.20190122":"71.0.3578.98","5.0.0":"73.0.3683.119","5.0.1":"73.0.3683.121","5.0.2":"73.0.3683.121","5.0.3":"73.0.3683.121","5.0.4":"73.0.3683.121","5.0.5":"73.0.3683.121","5.0.6":"73.0.3683.121","5.0.7":"73.0.3683.121","5.0.8":"73.0.3683.121","5.0.9":"73.0.3683.121","5.0.10":"73.0.3683.121","5.0.11":"73.0.3683.121","5.0.12":"73.0.3683.121","5.0.13":"73.0.3683.121","6.0.0-beta.1":"76.0.3774.1","6.0.0-beta.2":"76.0.3783.1","6.0.0-beta.3":"76.0.3783.1","6.0.0-beta.4":"76.0.3783.1","6.0.0-beta.5":"76.0.3805.4","6.0.0-beta.6":"76.0.3809.3","6.0.0-beta.7":"76.0.3809.22","6.0.0-beta.8":"76.0.3809.26","6.0.0-beta.9":"76.0.3809.26","6.0.0-beta.10":"76.0.3809.37","6.0.0-beta.11":"76.0.3809.42","6.0.0-beta.12":"76.0.3809.54","6.0.0-beta.13":"76.0.3809.60","6.0.0-beta.14":"76.0.3809.68","6.0.0-beta.15":"76.0.3809.74","6.0.0-nightly.20190212":"72.0.3626.107","6.0.0-nightly.20190213":"72.0.3626.110","6.0.0-nightly.20190311":"74.0.3724.8","6.0.0":"76.0.3809.88","6.0.1":"76.0.3809.102","6.0.2":"76.0.3809.110","6.0.3":"76.0.3809.126","6.0.4":"76.0.3809.131","6.0.5":"76.0.3809.136","6.0.6":"76.0.3809.138","6.0.7":"76.0.3809.139","6.0.8":"76.0.3809.146","6.0.9":"76.0.3809.146","6.0.10":"76.0.3809.146","6.0.11":"76.0.3809.146","6.0.12":"76.0.3809.146","6.1.0":"76.0.3809.146","6.1.1":"76.0.3809.146","6.1.2":"76.0.3809.146","6.1.3":"76.0.3809.146","6.1.4":"76.0.3809.146","6.1.5":"76.0.3809.146","6.1.6":"76.0.3809.146","6.1.7":"76.0.3809.146","6.1.8":"76.0.3809.146","6.1.9":"76.0.3809.146","6.1.10":"76.0.3809.146","6.1.11":"76.0.3809.146","6.1.12":"76.0.3809.146","7.0.0-beta.1":"78.0.3866.0","7.0.0-beta.2":"78.0.3866.0","7.0.0-beta.3":"78.0.3866.0","7.0.0-beta.4":"78.0.3896.6","7.0.0-beta.5":"78.0.3905.1","7.0.0-beta.6":"78.0.3905.1","7.0.0-beta.7":"78.0.3905.1","7.0.0-nightly.20190521":"76.0.3784.0","7.0.0-nightly.20190529":"76.0.3806.0","7.0.0-nightly.20190530":"76.0.3806.0","7.0.0-nightly.20190531":"76.0.3806.0","7.0.0-nightly.20190602":"76.0.3806.0","7.0.0-nightly.20190603":"76.0.3806.0","7.0.0-nightly.20190604":"77.0.3814.0","7.0.0-nightly.20190605":"77.0.3815.0","7.0.0-nightly.20190606":"77.0.3815.0","7.0.0-nightly.20190607":"77.0.3815.0","7.0.0-nightly.20190608":"77.0.3815.0","7.0.0-nightly.20190609":"77.0.3815.0","7.0.0-nightly.20190611":"77.0.3815.0","7.0.0-nightly.20190612":"77.0.3815.0","7.0.0-nightly.20190613":"77.0.3815.0","7.0.0-nightly.20190615":"77.0.3815.0","7.0.0-nightly.20190616":"77.0.3815.0","7.0.0-nightly.20190618":"77.0.3815.0","7.0.0-nightly.20190619":"77.0.3815.0","7.0.0-nightly.20190622":"77.0.3815.0","7.0.0-nightly.20190623":"77.0.3815.0","7.0.0-nightly.20190624":"77.0.3815.0","7.0.0-nightly.20190627":"77.0.3815.0","7.0.0-nightly.20190629":"77.0.3815.0","7.0.0-nightly.20190630":"77.0.3815.0","7.0.0-nightly.20190701":"77.0.3815.0","7.0.0-nightly.20190702":"77.0.3815.0","7.0.0-nightly.20190704":"77.0.3843.0","7.0.0-nightly.20190705":"77.0.3843.0","7.0.0-nightly.20190719":"77.0.3848.0","7.0.0-nightly.20190720":"77.0.3848.0","7.0.0-nightly.20190721":"77.0.3848.0","7.0.0-nightly.20190726":"77.0.3864.0","7.0.0-nightly.20190727":"78.0.3866.0","7.0.0-nightly.20190728":"78.0.3866.0","7.0.0-nightly.20190729":"78.0.3866.0","7.0.0-nightly.20190730":"78.0.3866.0","7.0.0-nightly.20190731":"78.0.3866.0","7.0.0":"78.0.3905.1","7.0.1":"78.0.3904.92","7.1.0":"78.0.3904.94","7.1.1":"78.0.3904.99","7.1.2":"78.0.3904.113","7.1.3":"78.0.3904.126","7.1.4":"78.0.3904.130","7.1.5":"78.0.3904.130","7.1.6":"78.0.3904.130","7.1.7":"78.0.3904.130","7.1.8":"78.0.3904.130","7.1.9":"78.0.3904.130","7.1.10":"78.0.3904.130","7.1.11":"78.0.3904.130","7.1.12":"78.0.3904.130","7.1.13":"78.0.3904.130","7.1.14":"78.0.3904.130","7.2.0":"78.0.3904.130","7.2.1":"78.0.3904.130","7.2.2":"78.0.3904.130","7.2.3":"78.0.3904.130","7.2.4":"78.0.3904.130","7.3.0":"78.0.3904.130","7.3.1":"78.0.3904.130","7.3.2":"78.0.3904.130","7.3.3":"78.0.3904.130","8.0.0-beta.1":"79.0.3931.0","8.0.0-beta.2":"79.0.3931.0","8.0.0-beta.3":"80.0.3955.0","8.0.0-beta.4":"80.0.3955.0","8.0.0-beta.5":"80.0.3987.14","8.0.0-beta.6":"80.0.3987.51","8.0.0-beta.7":"80.0.3987.59","8.0.0-beta.8":"80.0.3987.75","8.0.0-beta.9":"80.0.3987.75","8.0.0-nightly.20190801":"78.0.3866.0","8.0.0-nightly.20190802":"78.0.3866.0","8.0.0-nightly.20190803":"78.0.3871.0","8.0.0-nightly.20190806":"78.0.3871.0","8.0.0-nightly.20190807":"78.0.3871.0","8.0.0-nightly.20190808":"78.0.3871.0","8.0.0-nightly.20190809":"78.0.3871.0","8.0.0-nightly.20190810":"78.0.3871.0","8.0.0-nightly.20190811":"78.0.3871.0","8.0.0-nightly.20190812":"78.0.3871.0","8.0.0-nightly.20190813":"78.0.3871.0","8.0.0-nightly.20190814":"78.0.3871.0","8.0.0-nightly.20190815":"78.0.3871.0","8.0.0-nightly.20190816":"78.0.3881.0","8.0.0-nightly.20190817":"78.0.3881.0","8.0.0-nightly.20190818":"78.0.3881.0","8.0.0-nightly.20190819":"78.0.3881.0","8.0.0-nightly.20190820":"78.0.3881.0","8.0.0-nightly.20190824":"78.0.3892.0","8.0.0-nightly.20190825":"78.0.3892.0","8.0.0-nightly.20190827":"78.0.3892.0","8.0.0-nightly.20190828":"78.0.3892.0","8.0.0-nightly.20190830":"78.0.3892.0","8.0.0-nightly.20190901":"78.0.3892.0","8.0.0-nightly.20190902":"78.0.3892.0","8.0.0-nightly.20190907":"78.0.3892.0","8.0.0-nightly.20190909":"78.0.3892.0","8.0.0-nightly.20190910":"78.0.3892.0","8.0.0-nightly.20190911":"78.0.3892.0","8.0.0-nightly.20190913":"78.0.3892.0","8.0.0-nightly.20190914":"78.0.3892.0","8.0.0-nightly.20190915":"78.0.3892.0","8.0.0-nightly.20190917":"78.0.3892.0","8.0.0-nightly.20190919":"79.0.3915.0","8.0.0-nightly.20190920":"79.0.3915.0","8.0.0-nightly.20190923":"79.0.3919.0","8.0.0-nightly.20190924":"79.0.3919.0","8.0.0-nightly.20190926":"79.0.3919.0","8.0.0-nightly.20190929":"79.0.3919.0","8.0.0-nightly.20190930":"79.0.3919.0","8.0.0-nightly.20191001":"79.0.3919.0","8.0.0-nightly.20191004":"79.0.3919.0","8.0.0-nightly.20191005":"79.0.3919.0","8.0.0-nightly.20191006":"79.0.3919.0","8.0.0-nightly.20191009":"79.0.3919.0","8.0.0-nightly.20191011":"79.0.3919.0","8.0.0-nightly.20191012":"79.0.3919.0","8.0.0-nightly.20191017":"79.0.3919.0","8.0.0-nightly.20191019":"79.0.3931.0","8.0.0-nightly.20191020":"79.0.3931.0","8.0.0-nightly.20191021":"79.0.3931.0","8.0.0-nightly.20191023":"79.0.3931.0","8.0.0-nightly.20191101":"80.0.3952.0","8.0.0-nightly.20191105":"80.0.3952.0","8.0.0":"80.0.3987.86","8.0.1":"80.0.3987.86","8.0.2":"80.0.3987.86","8.0.3":"80.0.3987.134","8.1.0":"80.0.3987.137","8.1.1":"80.0.3987.141","8.2.0":"80.0.3987.158","8.2.1":"80.0.3987.163","8.2.2":"80.0.3987.163","8.2.3":"80.0.3987.163","8.2.4":"80.0.3987.165","8.2.5":"80.0.3987.165","8.3.0":"80.0.3987.165","8.3.1":"80.0.3987.165","8.3.2":"80.0.3987.165","8.3.3":"80.0.3987.165","8.3.4":"80.0.3987.165","8.4.0":"80.0.3987.165","8.4.1":"80.0.3987.165","8.5.0":"80.0.3987.165","8.5.1":"80.0.3987.165","8.5.2":"80.0.3987.165","8.5.3":"80.0.3987.163","8.5.4":"80.0.3987.163","8.5.5":"80.0.3987.163","9.0.0-beta.1":"82.0.4048.0","9.0.0-beta.2":"82.0.4048.0","9.0.0-beta.3":"82.0.4048.0","9.0.0-beta.4":"82.0.4048.0","9.0.0-beta.5":"82.0.4048.0","9.0.0-beta.6":"82.0.4058.2","9.0.0-beta.7":"82.0.4058.2","9.0.0-beta.9":"82.0.4058.2","9.0.0-beta.10":"82.0.4085.10","9.0.0-beta.12":"82.0.4085.14","9.0.0-beta.13":"82.0.4085.14","9.0.0-beta.14":"82.0.4085.27","9.0.0-beta.15":"83.0.4102.3","9.0.0-beta.16":"83.0.4102.3","9.0.0-beta.17":"83.0.4103.14","9.0.0-beta.18":"83.0.4103.16","9.0.0-beta.19":"83.0.4103.24","9.0.0-beta.20":"83.0.4103.26","9.0.0-beta.21":"83.0.4103.26","9.0.0-beta.22":"83.0.4103.34","9.0.0-beta.23":"83.0.4103.44","9.0.0-beta.24":"83.0.4103.45","9.0.0-nightly.20191121":"80.0.3954.0","9.0.0-nightly.20191122":"80.0.3954.0","9.0.0-nightly.20191123":"80.0.3954.0","9.0.0-nightly.20191124":"80.0.3954.0","9.0.0-nightly.20191129":"80.0.3954.0","9.0.0-nightly.20191130":"80.0.3954.0","9.0.0-nightly.20191201":"80.0.3954.0","9.0.0-nightly.20191202":"80.0.3954.0","9.0.0-nightly.20191203":"80.0.3954.0","9.0.0-nightly.20191204":"80.0.3954.0","9.0.0-nightly.20191210":"80.0.3954.0","9.0.0-nightly.20191220":"81.0.3994.0","9.0.0-nightly.20191221":"81.0.3994.0","9.0.0-nightly.20191222":"81.0.3994.0","9.0.0-nightly.20191223":"81.0.3994.0","9.0.0-nightly.20191224":"81.0.3994.0","9.0.0-nightly.20191225":"81.0.3994.0","9.0.0-nightly.20191226":"81.0.3994.0","9.0.0-nightly.20191228":"81.0.3994.0","9.0.0-nightly.20191229":"81.0.3994.0","9.0.0-nightly.20191230":"81.0.3994.0","9.0.0-nightly.20191231":"81.0.3994.0","9.0.0-nightly.20200101":"81.0.3994.0","9.0.0-nightly.20200103":"81.0.3994.0","9.0.0-nightly.20200104":"81.0.3994.0","9.0.0-nightly.20200105":"81.0.3994.0","9.0.0-nightly.20200106":"81.0.3994.0","9.0.0-nightly.20200108":"81.0.3994.0","9.0.0-nightly.20200109":"81.0.3994.0","9.0.0-nightly.20200110":"81.0.3994.0","9.0.0-nightly.20200111":"81.0.3994.0","9.0.0-nightly.20200113":"81.0.3994.0","9.0.0-nightly.20200115":"81.0.3994.0","9.0.0-nightly.20200116":"81.0.3994.0","9.0.0-nightly.20200117":"81.0.3994.0","9.0.0-nightly.20200119":"81.0.4030.0","9.0.0-nightly.20200121":"81.0.4030.0","9.0.0":"83.0.4103.64","9.0.1":"83.0.4103.94","9.0.2":"83.0.4103.94","9.0.3":"83.0.4103.100","9.0.4":"83.0.4103.104","9.0.5":"83.0.4103.119","9.1.0":"83.0.4103.122","9.1.1":"83.0.4103.122","9.1.2":"83.0.4103.122","9.2.0":"83.0.4103.122","9.2.1":"83.0.4103.122","9.3.0":"83.0.4103.122","9.3.1":"83.0.4103.122","9.3.2":"83.0.4103.122","9.3.3":"83.0.4103.122","9.3.4":"83.0.4103.122","9.3.5":"83.0.4103.122","9.4.0":"83.0.4103.122","9.4.1":"83.0.4103.122","9.4.2":"83.0.4103.122","9.4.3":"83.0.4103.122","9.4.4":"83.0.4103.122","10.0.0-beta.1":"84.0.4129.0","10.0.0-beta.2":"84.0.4129.0","10.0.0-beta.3":"85.0.4161.2","10.0.0-beta.4":"85.0.4161.2","10.0.0-beta.8":"85.0.4181.1","10.0.0-beta.9":"85.0.4181.1","10.0.0-beta.10":"85.0.4183.19","10.0.0-beta.11":"85.0.4183.20","10.0.0-beta.12":"85.0.4183.26","10.0.0-beta.13":"85.0.4183.39","10.0.0-beta.14":"85.0.4183.39","10.0.0-beta.15":"85.0.4183.39","10.0.0-beta.17":"85.0.4183.39","10.0.0-beta.19":"85.0.4183.39","10.0.0-beta.20":"85.0.4183.39","10.0.0-beta.21":"85.0.4183.39","10.0.0-beta.23":"85.0.4183.70","10.0.0-beta.24":"85.0.4183.78","10.0.0-beta.25":"85.0.4183.80","10.0.0-nightly.20200209":"82.0.4050.0","10.0.0-nightly.20200210":"82.0.4050.0","10.0.0-nightly.20200211":"82.0.4050.0","10.0.0-nightly.20200216":"82.0.4050.0","10.0.0-nightly.20200217":"82.0.4050.0","10.0.0-nightly.20200218":"82.0.4050.0","10.0.0-nightly.20200221":"82.0.4050.0","10.0.0-nightly.20200222":"82.0.4050.0","10.0.0-nightly.20200223":"82.0.4050.0","10.0.0-nightly.20200226":"82.0.4050.0","10.0.0-nightly.20200303":"82.0.4050.0","10.0.0-nightly.20200304":"82.0.4076.0","10.0.0-nightly.20200305":"82.0.4076.0","10.0.0-nightly.20200306":"82.0.4076.0","10.0.0-nightly.20200309":"82.0.4076.0","10.0.0-nightly.20200310":"82.0.4076.0","10.0.0-nightly.20200311":"82.0.4083.0","10.0.0-nightly.20200316":"83.0.4086.0","10.0.0-nightly.20200317":"83.0.4087.0","10.0.0-nightly.20200318":"83.0.4087.0","10.0.0-nightly.20200320":"83.0.4087.0","10.0.0-nightly.20200323":"83.0.4087.0","10.0.0-nightly.20200324":"83.0.4087.0","10.0.0-nightly.20200325":"83.0.4087.0","10.0.0-nightly.20200326":"83.0.4087.0","10.0.0-nightly.20200327":"83.0.4087.0","10.0.0-nightly.20200330":"83.0.4087.0","10.0.0-nightly.20200331":"83.0.4087.0","10.0.0-nightly.20200401":"83.0.4087.0","10.0.0-nightly.20200402":"83.0.4087.0","10.0.0-nightly.20200403":"83.0.4087.0","10.0.0-nightly.20200406":"83.0.4087.0","10.0.0-nightly.20200408":"83.0.4095.0","10.0.0-nightly.20200410":"83.0.4095.0","10.0.0-nightly.20200413":"83.0.4095.0","10.0.0-nightly.20200414":"84.0.4114.0","10.0.0-nightly.20200415":"84.0.4115.0","10.0.0-nightly.20200416":"84.0.4115.0","10.0.0-nightly.20200417":"84.0.4115.0","10.0.0-nightly.20200422":"84.0.4121.0","10.0.0-nightly.20200423":"84.0.4121.0","10.0.0-nightly.20200427":"84.0.4125.0","10.0.0-nightly.20200428":"84.0.4125.0","10.0.0-nightly.20200429":"84.0.4125.0","10.0.0-nightly.20200430":"84.0.4125.0","10.0.0-nightly.20200501":"84.0.4129.0","10.0.0-nightly.20200504":"84.0.4129.0","10.0.0-nightly.20200505":"84.0.4129.0","10.0.0-nightly.20200506":"84.0.4129.0","10.0.0-nightly.20200507":"84.0.4129.0","10.0.0-nightly.20200508":"84.0.4129.0","10.0.0-nightly.20200511":"84.0.4129.0","10.0.0-nightly.20200512":"84.0.4129.0","10.0.0-nightly.20200513":"84.0.4129.0","10.0.0-nightly.20200514":"84.0.4129.0","10.0.0-nightly.20200515":"84.0.4129.0","10.0.0-nightly.20200518":"84.0.4129.0","10.0.0-nightly.20200519":"84.0.4129.0","10.0.0-nightly.20200520":"84.0.4129.0","10.0.0-nightly.20200521":"84.0.4129.0","10.0.0":"85.0.4183.84","10.0.1":"85.0.4183.86","10.1.0":"85.0.4183.87","10.1.1":"85.0.4183.93","10.1.2":"85.0.4183.98","10.1.3":"85.0.4183.121","10.1.4":"85.0.4183.121","10.1.5":"85.0.4183.121","10.1.6":"85.0.4183.121","10.1.7":"85.0.4183.121","10.2.0":"85.0.4183.121","10.3.0":"85.0.4183.121","10.3.1":"85.0.4183.121","10.3.2":"85.0.4183.121","10.4.0":"85.0.4183.121","10.4.1":"85.0.4183.121","10.4.2":"85.0.4183.121","10.4.3":"85.0.4183.121","10.4.4":"85.0.4183.121","10.4.5":"85.0.4183.121","10.4.6":"85.0.4183.121","10.4.7":"85.0.4183.121","11.0.0-beta.1":"86.0.4234.0","11.0.0-beta.3":"86.0.4234.0","11.0.0-beta.4":"86.0.4234.0","11.0.0-beta.5":"86.0.4234.0","11.0.0-beta.6":"86.0.4234.0","11.0.0-beta.7":"86.0.4234.0","11.0.0-beta.8":"87.0.4251.1","11.0.0-beta.9":"87.0.4251.1","11.0.0-beta.11":"87.0.4251.1","11.0.0-beta.12":"87.0.4280.11","11.0.0-beta.13":"87.0.4280.11","11.0.0-beta.16":"87.0.4280.27","11.0.0-beta.17":"87.0.4280.27","11.0.0-beta.18":"87.0.4280.27","11.0.0-beta.19":"87.0.4280.27","11.0.0-beta.20":"87.0.4280.40","11.0.0-beta.22":"87.0.4280.47","11.0.0-beta.23":"87.0.4280.47","11.0.0-nightly.20200525":"84.0.4129.0","11.0.0-nightly.20200526":"84.0.4129.0","11.0.0-nightly.20200529":"85.0.4156.0","11.0.0-nightly.20200602":"85.0.4162.0","11.0.0-nightly.20200603":"85.0.4162.0","11.0.0-nightly.20200604":"85.0.4162.0","11.0.0-nightly.20200609":"85.0.4162.0","11.0.0-nightly.20200610":"85.0.4162.0","11.0.0-nightly.20200611":"85.0.4162.0","11.0.0-nightly.20200615":"85.0.4162.0","11.0.0-nightly.20200616":"85.0.4162.0","11.0.0-nightly.20200617":"85.0.4162.0","11.0.0-nightly.20200618":"85.0.4162.0","11.0.0-nightly.20200619":"85.0.4162.0","11.0.0-nightly.20200701":"85.0.4179.0","11.0.0-nightly.20200702":"85.0.4179.0","11.0.0-nightly.20200703":"85.0.4179.0","11.0.0-nightly.20200706":"85.0.4179.0","11.0.0-nightly.20200707":"85.0.4179.0","11.0.0-nightly.20200708":"85.0.4179.0","11.0.0-nightly.20200709":"85.0.4179.0","11.0.0-nightly.20200716":"86.0.4203.0","11.0.0-nightly.20200717":"86.0.4203.0","11.0.0-nightly.20200720":"86.0.4203.0","11.0.0-nightly.20200721":"86.0.4203.0","11.0.0-nightly.20200723":"86.0.4209.0","11.0.0-nightly.20200724":"86.0.4209.0","11.0.0-nightly.20200729":"86.0.4209.0","11.0.0-nightly.20200730":"86.0.4209.0","11.0.0-nightly.20200731":"86.0.4209.0","11.0.0-nightly.20200803":"86.0.4209.0","11.0.0-nightly.20200804":"86.0.4209.0","11.0.0-nightly.20200805":"86.0.4209.0","11.0.0-nightly.20200811":"86.0.4209.0","11.0.0-nightly.20200812":"86.0.4209.0","11.0.0-nightly.20200822":"86.0.4234.0","11.0.0-nightly.20200824":"86.0.4234.0","11.0.0-nightly.20200825":"86.0.4234.0","11.0.0-nightly.20200826":"86.0.4234.0","11.0.0":"87.0.4280.60","11.0.1":"87.0.4280.60","11.0.2":"87.0.4280.67","11.0.3":"87.0.4280.67","11.0.4":"87.0.4280.67","11.0.5":"87.0.4280.88","11.1.0":"87.0.4280.88","11.1.1":"87.0.4280.88","11.2.0":"87.0.4280.141","11.2.1":"87.0.4280.141","11.2.2":"87.0.4280.141","11.2.3":"87.0.4280.141","11.3.0":"87.0.4280.141","11.4.0":"87.0.4280.141","11.4.1":"87.0.4280.141","11.4.2":"87.0.4280.141","11.4.3":"87.0.4280.141","11.4.4":"87.0.4280.141","11.4.5":"87.0.4280.141","11.4.6":"87.0.4280.141","11.4.7":"87.0.4280.141","11.4.8":"87.0.4280.141","11.4.9":"87.0.4280.141","11.4.10":"87.0.4280.141","11.4.11":"87.0.4280.141","11.4.12":"87.0.4280.141","11.5.0":"87.0.4280.141","12.0.0-beta.1":"89.0.4328.0","12.0.0-beta.3":"89.0.4328.0","12.0.0-beta.4":"89.0.4328.0","12.0.0-beta.5":"89.0.4328.0","12.0.0-beta.6":"89.0.4328.0","12.0.0-beta.7":"89.0.4328.0","12.0.0-beta.8":"89.0.4328.0","12.0.0-beta.9":"89.0.4328.0","12.0.0-beta.10":"89.0.4328.0","12.0.0-beta.11":"89.0.4328.0","12.0.0-beta.12":"89.0.4328.0","12.0.0-beta.14":"89.0.4328.0","12.0.0-beta.16":"89.0.4348.1","12.0.0-beta.18":"89.0.4348.1","12.0.0-beta.19":"89.0.4348.1","12.0.0-beta.20":"89.0.4348.1","12.0.0-beta.21":"89.0.4388.2","12.0.0-beta.22":"89.0.4388.2","12.0.0-beta.23":"89.0.4388.2","12.0.0-beta.24":"89.0.4388.2","12.0.0-beta.25":"89.0.4388.2","12.0.0-beta.26":"89.0.4388.2","12.0.0-beta.27":"89.0.4389.23","12.0.0-beta.28":"89.0.4389.23","12.0.0-beta.29":"89.0.4389.23","12.0.0-beta.30":"89.0.4389.58","12.0.0-beta.31":"89.0.4389.58","12.0.0-nightly.20200827":"86.0.4234.0","12.0.0-nightly.20200831":"86.0.4234.0","12.0.0-nightly.20200902":"86.0.4234.0","12.0.0-nightly.20200903":"86.0.4234.0","12.0.0-nightly.20200907":"86.0.4234.0","12.0.0-nightly.20200910":"86.0.4234.0","12.0.0-nightly.20200911":"86.0.4234.0","12.0.0-nightly.20200914":"86.0.4234.0","12.0.0-nightly.20201013":"87.0.4268.0","12.0.0-nightly.20201014":"87.0.4268.0","12.0.0-nightly.20201015":"87.0.4268.0","12.0.0-nightly.20201023":"88.0.4292.0","12.0.0-nightly.20201026":"88.0.4292.0","12.0.0-nightly.20201030":"88.0.4306.0","12.0.0-nightly.20201102":"88.0.4306.0","12.0.0-nightly.20201103":"88.0.4306.0","12.0.0-nightly.20201104":"88.0.4306.0","12.0.0-nightly.20201105":"88.0.4306.0","12.0.0-nightly.20201106":"88.0.4306.0","12.0.0-nightly.20201111":"88.0.4306.0","12.0.0-nightly.20201112":"88.0.4306.0","12.0.0-nightly.20201116":"88.0.4324.0","12.0.0":"89.0.4389.69","12.0.1":"89.0.4389.82","12.0.2":"89.0.4389.90","12.0.3":"89.0.4389.114","12.0.4":"89.0.4389.114","12.0.5":"89.0.4389.128","12.0.6":"89.0.4389.128","12.0.7":"89.0.4389.128","12.0.8":"89.0.4389.128","12.0.9":"89.0.4389.128","12.0.10":"89.0.4389.128","12.0.11":"89.0.4389.128","12.0.12":"89.0.4389.128","12.0.13":"89.0.4389.128","12.0.14":"89.0.4389.128","12.0.15":"89.0.4389.128","12.0.16":"89.0.4389.128","12.0.17":"89.0.4389.128","12.0.18":"89.0.4389.128","12.1.0":"89.0.4389.128","12.1.1":"89.0.4389.128","12.1.2":"89.0.4389.128","12.2.0":"89.0.4389.128","12.2.1":"89.0.4389.128","12.2.2":"89.0.4389.128","12.2.3":"89.0.4389.128","13.0.0-beta.2":"90.0.4402.0","13.0.0-beta.3":"90.0.4402.0","13.0.0-beta.4":"90.0.4415.0","13.0.0-beta.5":"90.0.4415.0","13.0.0-beta.6":"90.0.4415.0","13.0.0-beta.7":"90.0.4415.0","13.0.0-beta.8":"90.0.4415.0","13.0.0-beta.9":"90.0.4415.0","13.0.0-beta.11":"90.0.4415.0","13.0.0-beta.12":"90.0.4415.0","13.0.0-beta.13":"90.0.4415.0","13.0.0-beta.14":"91.0.4448.0","13.0.0-beta.16":"91.0.4448.0","13.0.0-beta.17":"91.0.4448.0","13.0.0-beta.18":"91.0.4448.0","13.0.0-beta.20":"91.0.4448.0","13.0.0-beta.21":"91.0.4472.33","13.0.0-beta.22":"91.0.4472.33","13.0.0-beta.23":"91.0.4472.33","13.0.0-beta.24":"91.0.4472.38","13.0.0-beta.26":"91.0.4472.38","13.0.0-beta.27":"91.0.4472.38","13.0.0-beta.28":"91.0.4472.38","13.0.0-nightly.20201119":"89.0.4328.0","13.0.0-nightly.20201123":"89.0.4328.0","13.0.0-nightly.20201124":"89.0.4328.0","13.0.0-nightly.20201126":"89.0.4328.0","13.0.0-nightly.20201127":"89.0.4328.0","13.0.0-nightly.20201130":"89.0.4328.0","13.0.0-nightly.20201201":"89.0.4328.0","13.0.0-nightly.20201202":"89.0.4328.0","13.0.0-nightly.20201203":"89.0.4328.0","13.0.0-nightly.20201204":"89.0.4328.0","13.0.0-nightly.20201207":"89.0.4328.0","13.0.0-nightly.20201208":"89.0.4328.0","13.0.0-nightly.20201209":"89.0.4328.0","13.0.0-nightly.20201210":"89.0.4328.0","13.0.0-nightly.20201211":"89.0.4328.0","13.0.0-nightly.20201214":"89.0.4328.0","13.0.0-nightly.20201215":"89.0.4349.0","13.0.0-nightly.20201216":"89.0.4349.0","13.0.0-nightly.20201221":"89.0.4349.0","13.0.0-nightly.20201222":"89.0.4349.0","13.0.0-nightly.20201223":"89.0.4359.0","13.0.0-nightly.20210104":"89.0.4359.0","13.0.0-nightly.20210108":"89.0.4359.0","13.0.0-nightly.20210111":"89.0.4359.0","13.0.0-nightly.20210113":"89.0.4386.0","13.0.0-nightly.20210114":"89.0.4386.0","13.0.0-nightly.20210118":"89.0.4386.0","13.0.0-nightly.20210122":"89.0.4386.0","13.0.0-nightly.20210125":"89.0.4386.0","13.0.0-nightly.20210127":"89.0.4389.0","13.0.0-nightly.20210128":"89.0.4389.0","13.0.0-nightly.20210129":"89.0.4389.0","13.0.0-nightly.20210201":"89.0.4389.0","13.0.0-nightly.20210202":"89.0.4389.0","13.0.0-nightly.20210203":"89.0.4389.0","13.0.0-nightly.20210205":"89.0.4389.0","13.0.0-nightly.20210208":"89.0.4389.0","13.0.0-nightly.20210209":"89.0.4389.0","13.0.0-nightly.20210210":"90.0.4402.0","13.0.0-nightly.20210211":"90.0.4402.0","13.0.0-nightly.20210212":"90.0.4402.0","13.0.0-nightly.20210216":"90.0.4402.0","13.0.0-nightly.20210217":"90.0.4402.0","13.0.0-nightly.20210218":"90.0.4402.0","13.0.0-nightly.20210219":"90.0.4402.0","13.0.0-nightly.20210222":"90.0.4402.0","13.0.0-nightly.20210225":"90.0.4402.0","13.0.0-nightly.20210226":"90.0.4402.0","13.0.0-nightly.20210301":"90.0.4402.0","13.0.0-nightly.20210302":"90.0.4402.0","13.0.0-nightly.20210303":"90.0.4402.0","13.0.0":"91.0.4472.69","13.0.1":"91.0.4472.69","13.1.0":"91.0.4472.77","13.1.1":"91.0.4472.77","13.1.2":"91.0.4472.77","13.1.3":"91.0.4472.106","13.1.4":"91.0.4472.106","13.1.5":"91.0.4472.124","13.1.6":"91.0.4472.124","13.1.7":"91.0.4472.124","13.1.8":"91.0.4472.164","13.1.9":"91.0.4472.164","13.2.0":"91.0.4472.164","13.2.1":"91.0.4472.164","13.2.2":"91.0.4472.164","13.2.3":"91.0.4472.164","13.3.0":"91.0.4472.164","13.4.0":"91.0.4472.164","13.5.0":"91.0.4472.164","13.5.1":"91.0.4472.164","13.5.2":"91.0.4472.164","13.6.0":"91.0.4472.164","13.6.1":"91.0.4472.164","13.6.2":"91.0.4472.164","13.6.3":"91.0.4472.164","13.6.6":"91.0.4472.164","13.6.7":"91.0.4472.164","13.6.8":"91.0.4472.164","13.6.9":"91.0.4472.164","14.0.0-beta.1":"92.0.4511.0","14.0.0-beta.2":"92.0.4511.0","14.0.0-beta.3":"92.0.4511.0","14.0.0-beta.5":"93.0.4536.0","14.0.0-beta.6":"93.0.4536.0","14.0.0-beta.7":"93.0.4536.0","14.0.0-beta.8":"93.0.4536.0","14.0.0-beta.9":"93.0.4539.0","14.0.0-beta.10":"93.0.4539.0","14.0.0-beta.11":"93.0.4557.4","14.0.0-beta.12":"93.0.4557.4","14.0.0-beta.13":"93.0.4566.0","14.0.0-beta.14":"93.0.4566.0","14.0.0-beta.15":"93.0.4566.0","14.0.0-beta.16":"93.0.4566.0","14.0.0-beta.17":"93.0.4566.0","14.0.0-beta.18":"93.0.4577.15","14.0.0-beta.19":"93.0.4577.15","14.0.0-beta.20":"93.0.4577.15","14.0.0-beta.21":"93.0.4577.15","14.0.0-beta.22":"93.0.4577.25","14.0.0-beta.23":"93.0.4577.25","14.0.0-beta.24":"93.0.4577.51","14.0.0-beta.25":"93.0.4577.51","14.0.0-nightly.20210304":"90.0.4402.0","14.0.0-nightly.20210305":"90.0.4415.0","14.0.0-nightly.20210308":"90.0.4415.0","14.0.0-nightly.20210309":"90.0.4415.0","14.0.0-nightly.20210311":"90.0.4415.0","14.0.0-nightly.20210315":"90.0.4415.0","14.0.0-nightly.20210316":"90.0.4415.0","14.0.0-nightly.20210317":"90.0.4415.0","14.0.0-nightly.20210318":"90.0.4415.0","14.0.0-nightly.20210319":"90.0.4415.0","14.0.0-nightly.20210323":"90.0.4415.0","14.0.0-nightly.20210324":"90.0.4415.0","14.0.0-nightly.20210325":"90.0.4415.0","14.0.0-nightly.20210326":"90.0.4415.0","14.0.0-nightly.20210329":"90.0.4415.0","14.0.0-nightly.20210330":"90.0.4415.0","14.0.0-nightly.20210331":"91.0.4448.0","14.0.0-nightly.20210401":"91.0.4448.0","14.0.0-nightly.20210402":"91.0.4448.0","14.0.0-nightly.20210406":"91.0.4448.0","14.0.0-nightly.20210407":"91.0.4448.0","14.0.0-nightly.20210408":"91.0.4448.0","14.0.0-nightly.20210409":"91.0.4448.0","14.0.0-nightly.20210413":"91.0.4448.0","14.0.0-nightly.20210426":"92.0.4475.0","14.0.0-nightly.20210427":"92.0.4475.0","14.0.0-nightly.20210430":"92.0.4488.0","14.0.0-nightly.20210503":"92.0.4488.0","14.0.0-nightly.20210505":"92.0.4496.0","14.0.0-nightly.20210506":"92.0.4498.0","14.0.0-nightly.20210507":"92.0.4499.0","14.0.0-nightly.20210510":"92.0.4499.0","14.0.0-nightly.20210511":"92.0.4499.0","14.0.0-nightly.20210512":"92.0.4499.0","14.0.0-nightly.20210513":"92.0.4499.0","14.0.0-nightly.20210514":"92.0.4505.0","14.0.0-nightly.20210517":"92.0.4505.0","14.0.0-nightly.20210518":"92.0.4505.0","14.0.0-nightly.20210519":"92.0.4505.0","14.0.0-nightly.20210520":"92.0.4511.0","14.0.0-nightly.20210523":"92.0.4511.0","14.0.0-nightly.20210524":"92.0.4511.0","14.0.0":"93.0.4577.58","14.0.1":"93.0.4577.63","14.0.2":"93.0.4577.82","14.1.0":"93.0.4577.82","14.1.1":"93.0.4577.82","14.2.0":"93.0.4577.82","14.2.1":"93.0.4577.82","14.2.2":"93.0.4577.82","14.2.3":"93.0.4577.82","14.2.4":"93.0.4577.82","14.2.5":"93.0.4577.82","14.2.6":"93.0.4577.82","14.2.7":"93.0.4577.82","15.0.0-alpha.1":"93.0.4566.0","15.0.0-alpha.2":"93.0.4566.0","15.0.0-alpha.3":"94.0.4584.0","15.0.0-alpha.4":"94.0.4584.0","15.0.0-alpha.5":"94.0.4584.0","15.0.0-alpha.6":"94.0.4584.0","15.0.0-alpha.7":"94.0.4590.2","15.0.0-alpha.8":"94.0.4590.2","15.0.0-alpha.9":"94.0.4590.2","15.0.0-alpha.10":"94.0.4606.12","15.0.0-beta.1":"94.0.4606.20","15.0.0-beta.2":"94.0.4606.20","15.0.0-beta.3":"94.0.4606.31","15.0.0-beta.4":"94.0.4606.31","15.0.0-beta.5":"94.0.4606.31","15.0.0-beta.6":"94.0.4606.31","15.0.0-beta.7":"94.0.4606.31","15.0.0-nightly.20210527":"92.0.4511.0","15.0.0-nightly.20210528":"92.0.4511.0","15.0.0-nightly.20210531":"92.0.4511.0","15.0.0-nightly.20210601":"92.0.4511.0","15.0.0-nightly.20210602":"92.0.4511.0","15.0.0-nightly.20210603":"93.0.4530.0","15.0.0-nightly.20210604":"93.0.4530.0","15.0.0-nightly.20210608":"93.0.4535.0","15.0.0-nightly.20210609":"93.0.4536.0","15.0.0-nightly.20210610":"93.0.4536.0","15.0.0-nightly.20210611":"93.0.4536.0","15.0.0-nightly.20210614":"93.0.4536.0","15.0.0-nightly.20210615":"93.0.4536.0","15.0.0-nightly.20210616":"93.0.4536.0","15.0.0-nightly.20210617":"93.0.4539.0","15.0.0-nightly.20210618":"93.0.4539.0","15.0.0-nightly.20210621":"93.0.4539.0","15.0.0-nightly.20210622":"93.0.4539.0","15.0.0-nightly.20210623":"93.0.4550.0","15.0.0-nightly.20210624":"93.0.4550.0","15.0.0-nightly.20210625":"93.0.4552.0","15.0.0-nightly.20210628":"93.0.4552.0","15.0.0-nightly.20210629":"93.0.4552.0","15.0.0-nightly.20210630":"93.0.4558.0","15.0.0-nightly.20210701":"93.0.4558.0","15.0.0-nightly.20210702":"93.0.4558.0","15.0.0-nightly.20210705":"93.0.4558.0","15.0.0-nightly.20210706":"93.0.4566.0","15.0.0-nightly.20210707":"93.0.4566.0","15.0.0-nightly.20210708":"93.0.4566.0","15.0.0-nightly.20210709":"93.0.4566.0","15.0.0-nightly.20210712":"93.0.4566.0","15.0.0-nightly.20210713":"93.0.4566.0","15.0.0-nightly.20210714":"93.0.4566.0","15.0.0-nightly.20210715":"93.0.4566.0","15.0.0-nightly.20210716":"93.0.4566.0","15.0.0-nightly.20210719":"93.0.4566.0","15.0.0-nightly.20210720":"93.0.4566.0","15.0.0-nightly.20210721":"93.0.4566.0","15.0.0":"94.0.4606.51","15.1.0":"94.0.4606.61","15.1.1":"94.0.4606.61","15.1.2":"94.0.4606.71","15.2.0":"94.0.4606.81","15.3.0":"94.0.4606.81","15.3.1":"94.0.4606.81","15.3.2":"94.0.4606.81","15.3.3":"94.0.4606.81","15.3.4":"94.0.4606.81","15.3.5":"94.0.4606.81","15.3.6":"94.0.4606.81","15.3.7":"94.0.4606.81","15.4.0":"94.0.4606.81","15.4.1":"94.0.4606.81","16.0.0-alpha.1":"95.0.4629.0","16.0.0-alpha.2":"95.0.4629.0","16.0.0-alpha.3":"95.0.4629.0","16.0.0-alpha.4":"95.0.4629.0","16.0.0-alpha.5":"95.0.4629.0","16.0.0-alpha.6":"95.0.4629.0","16.0.0-alpha.7":"95.0.4629.0","16.0.0-alpha.8":"96.0.4647.0","16.0.0-alpha.9":"96.0.4647.0","16.0.0-beta.1":"96.0.4647.0","16.0.0-beta.2":"96.0.4647.0","16.0.0-beta.3":"96.0.4647.0","16.0.0-beta.4":"96.0.4664.18","16.0.0-beta.5":"96.0.4664.18","16.0.0-beta.6":"96.0.4664.27","16.0.0-beta.7":"96.0.4664.27","16.0.0-beta.8":"96.0.4664.35","16.0.0-beta.9":"96.0.4664.35","16.0.0-nightly.20210722":"93.0.4566.0","16.0.0-nightly.20210723":"93.0.4566.0","16.0.0-nightly.20210726":"93.0.4566.0","16.0.0-nightly.20210727":"94.0.4584.0","16.0.0-nightly.20210728":"94.0.4584.0","16.0.0-nightly.20210729":"94.0.4584.0","16.0.0-nightly.20210730":"94.0.4584.0","16.0.0-nightly.20210802":"94.0.4584.0","16.0.0-nightly.20210803":"94.0.4584.0","16.0.0-nightly.20210804":"94.0.4584.0","16.0.0-nightly.20210805":"94.0.4584.0","16.0.0-nightly.20210806":"94.0.4584.0","16.0.0-nightly.20210809":"94.0.4584.0","16.0.0-nightly.20210810":"94.0.4584.0","16.0.0-nightly.20210811":"94.0.4584.0","16.0.0-nightly.20210812":"94.0.4590.2","16.0.0-nightly.20210813":"94.0.4590.2","16.0.0-nightly.20210816":"94.0.4590.2","16.0.0-nightly.20210817":"94.0.4590.2","16.0.0-nightly.20210818":"94.0.4590.2","16.0.0-nightly.20210819":"94.0.4590.2","16.0.0-nightly.20210820":"94.0.4590.2","16.0.0-nightly.20210823":"94.0.4590.2","16.0.0-nightly.20210824":"95.0.4612.5","16.0.0-nightly.20210825":"95.0.4612.5","16.0.0-nightly.20210826":"95.0.4612.5","16.0.0-nightly.20210827":"95.0.4612.5","16.0.0-nightly.20210830":"95.0.4612.5","16.0.0-nightly.20210831":"95.0.4612.5","16.0.0-nightly.20210901":"95.0.4612.5","16.0.0-nightly.20210902":"95.0.4629.0","16.0.0-nightly.20210903":"95.0.4629.0","16.0.0-nightly.20210906":"95.0.4629.0","16.0.0-nightly.20210907":"95.0.4629.0","16.0.0-nightly.20210908":"95.0.4629.0","16.0.0-nightly.20210909":"95.0.4629.0","16.0.0-nightly.20210910":"95.0.4629.0","16.0.0-nightly.20210913":"95.0.4629.0","16.0.0-nightly.20210914":"95.0.4629.0","16.0.0-nightly.20210915":"95.0.4629.0","16.0.0-nightly.20210916":"95.0.4629.0","16.0.0-nightly.20210917":"95.0.4629.0","16.0.0-nightly.20210920":"95.0.4629.0","16.0.0-nightly.20210921":"95.0.4629.0","16.0.0-nightly.20210922":"95.0.4629.0","16.0.0":"96.0.4664.45","16.0.1":"96.0.4664.45","16.0.2":"96.0.4664.55","16.0.3":"96.0.4664.55","16.0.4":"96.0.4664.55","16.0.5":"96.0.4664.55","16.0.6":"96.0.4664.110","16.0.7":"96.0.4664.110","16.0.8":"96.0.4664.110","16.0.9":"96.0.4664.174","16.0.10":"96.0.4664.174","16.1.0":"96.0.4664.174","17.0.0-alpha.1":"96.0.4664.4","17.0.0-alpha.2":"96.0.4664.4","17.0.0-alpha.3":"96.0.4664.4","17.0.0-alpha.4":"98.0.4706.0","17.0.0-alpha.5":"98.0.4706.0","17.0.0-alpha.6":"98.0.4706.0","17.0.0-beta.1":"98.0.4706.0","17.0.0-beta.2":"98.0.4706.0","17.0.0-beta.3":"98.0.4758.9","17.0.0-beta.4":"98.0.4758.11","17.0.0-beta.5":"98.0.4758.11","17.0.0-beta.6":"98.0.4758.11","17.0.0-beta.7":"98.0.4758.11","17.0.0-beta.8":"98.0.4758.11","17.0.0-beta.9":"98.0.4758.11","17.0.0-nightly.20210923":"95.0.4629.0","17.0.0-nightly.20210924":"95.0.4629.0","17.0.0-nightly.20210927":"95.0.4629.0","17.0.0-nightly.20210928":"95.0.4629.0","17.0.0-nightly.20210929":"95.0.4629.0","17.0.0-nightly.20210930":"95.0.4629.0","17.0.0-nightly.20211001":"95.0.4629.0","17.0.0-nightly.20211004":"95.0.4629.0","17.0.0-nightly.20211005":"95.0.4629.0","17.0.0-nightly.20211006":"96.0.4647.0","17.0.0-nightly.20211007":"96.0.4647.0","17.0.0-nightly.20211008":"96.0.4647.0","17.0.0-nightly.20211011":"96.0.4647.0","17.0.0-nightly.20211012":"96.0.4647.0","17.0.0-nightly.20211013":"96.0.4647.0","17.0.0-nightly.20211014":"96.0.4647.0","17.0.0-nightly.20211015":"96.0.4647.0","17.0.0-nightly.20211018":"96.0.4647.0","17.0.0-nightly.20211019":"96.0.4647.0","17.0.0-nightly.20211020":"96.0.4647.0","17.0.0-nightly.20211021":"96.0.4647.0","17.0.0-nightly.20211022":"96.0.4664.4","17.0.0-nightly.20211025":"96.0.4664.4","17.0.0-nightly.20211026":"96.0.4664.4","17.0.0-nightly.20211027":"96.0.4664.4","17.0.0-nightly.20211028":"96.0.4664.4","17.0.0-nightly.20211029":"96.0.4664.4","17.0.0-nightly.20211101":"96.0.4664.4","17.0.0-nightly.20211102":"96.0.4664.4","17.0.0-nightly.20211103":"96.0.4664.4","17.0.0-nightly.20211104":"96.0.4664.4","17.0.0-nightly.20211105":"96.0.4664.4","17.0.0-nightly.20211108":"96.0.4664.4","17.0.0-nightly.20211109":"96.0.4664.4","17.0.0-nightly.20211110":"96.0.4664.4","17.0.0-nightly.20211111":"96.0.4664.4","17.0.0-nightly.20211112":"96.0.4664.4","17.0.0-nightly.20211115":"96.0.4664.4","17.0.0-nightly.20211116":"96.0.4664.4","17.0.0-nightly.20211117":"96.0.4664.4","17.0.0":"98.0.4758.74","17.0.1":"98.0.4758.82","17.1.0":"98.0.4758.102","17.1.1":"98.0.4758.109","17.1.2":"98.0.4758.109","18.0.0-alpha.1":"99.0.4767.0","18.0.0-alpha.2":"99.0.4767.0","18.0.0-alpha.3":"99.0.4767.0","18.0.0-alpha.4":"99.0.4767.0","18.0.0-alpha.5":"99.0.4767.0","18.0.0-beta.1":"100.0.4894.0","18.0.0-beta.2":"100.0.4894.0","18.0.0-nightly.20211118":"96.0.4664.4","18.0.0-nightly.20211119":"96.0.4664.4","18.0.0-nightly.20211122":"96.0.4664.4","18.0.0-nightly.20211123":"96.0.4664.4","18.0.0-nightly.20211124":"98.0.4706.0","18.0.0-nightly.20211125":"98.0.4706.0","18.0.0-nightly.20211126":"98.0.4706.0","18.0.0-nightly.20211129":"98.0.4706.0","18.0.0-nightly.20211130":"98.0.4706.0","18.0.0-nightly.20211201":"98.0.4706.0","18.0.0-nightly.20211202":"98.0.4706.0","18.0.0-nightly.20211203":"98.0.4706.0","18.0.0-nightly.20211206":"98.0.4706.0","18.0.0-nightly.20211207":"98.0.4706.0","18.0.0-nightly.20211208":"98.0.4706.0","18.0.0-nightly.20211209":"98.0.4706.0","18.0.0-nightly.20211210":"98.0.4706.0","18.0.0-nightly.20211213":"98.0.4706.0","18.0.0-nightly.20211214":"98.0.4706.0","18.0.0-nightly.20211215":"98.0.4706.0","18.0.0-nightly.20211216":"98.0.4706.0","18.0.0-nightly.20211217":"98.0.4706.0","18.0.0-nightly.20211220":"98.0.4706.0","18.0.0-nightly.20211221":"98.0.4706.0","18.0.0-nightly.20211222":"98.0.4706.0","18.0.0-nightly.20211223":"98.0.4706.0","18.0.0-nightly.20211228":"98.0.4706.0","18.0.0-nightly.20211229":"98.0.4706.0","18.0.0-nightly.20211231":"98.0.4706.0","18.0.0-nightly.20220103":"98.0.4706.0","18.0.0-nightly.20220104":"98.0.4706.0","18.0.0-nightly.20220105":"98.0.4706.0","18.0.0-nightly.20220106":"98.0.4706.0","18.0.0-nightly.20220107":"98.0.4706.0","18.0.0-nightly.20220110":"98.0.4706.0","18.0.0-nightly.20220111":"99.0.4767.0","18.0.0-nightly.20220112":"99.0.4767.0","18.0.0-nightly.20220113":"99.0.4767.0","18.0.0-nightly.20220114":"99.0.4767.0","18.0.0-nightly.20220117":"99.0.4767.0","18.0.0-nightly.20220118":"99.0.4767.0","18.0.0-nightly.20220119":"99.0.4767.0","18.0.0-nightly.20220121":"99.0.4767.0","18.0.0-nightly.20220124":"99.0.4767.0","18.0.0-nightly.20220125":"99.0.4767.0","18.0.0-nightly.20220127":"99.0.4767.0","18.0.0-nightly.20220128":"99.0.4767.0","18.0.0-nightly.20220131":"99.0.4767.0","18.0.0-nightly.20220201":"99.0.4767.0","19.0.0-nightly.20220202":"99.0.4767.0","19.0.0-nightly.20220203":"99.0.4767.0","19.0.0-nightly.20220204":"99.0.4767.0","19.0.0-nightly.20220207":"99.0.4767.0","19.0.0-nightly.20220208":"99.0.4767.0","19.0.0-nightly.20220209":"99.0.4767.0","19.0.0-nightly.20220308":"100.0.4894.0","19.0.0-nightly.20220309":"100.0.4894.0","19.0.0-nightly.20220310":"100.0.4894.0","19.0.0-nightly.20220311":"100.0.4894.0"} \ No newline at end of file +{"0.20.0":"39.0.2171.65","0.20.1":"39.0.2171.65","0.20.2":"39.0.2171.65","0.20.3":"39.0.2171.65","0.20.4":"39.0.2171.65","0.20.5":"39.0.2171.65","0.20.6":"39.0.2171.65","0.20.7":"39.0.2171.65","0.20.8":"39.0.2171.65","0.21.0":"40.0.2214.91","0.21.1":"40.0.2214.91","0.21.2":"40.0.2214.91","0.21.3":"41.0.2272.76","0.22.1":"41.0.2272.76","0.22.2":"41.0.2272.76","0.22.3":"41.0.2272.76","0.23.0":"41.0.2272.76","0.24.0":"41.0.2272.76","0.25.0":"42.0.2311.107","0.25.1":"42.0.2311.107","0.25.2":"42.0.2311.107","0.25.3":"42.0.2311.107","0.26.0":"42.0.2311.107","0.26.1":"42.0.2311.107","0.27.0":"42.0.2311.107","0.27.1":"42.0.2311.107","0.27.2":"43.0.2357.65","0.27.3":"43.0.2357.65","0.28.0":"43.0.2357.65","0.28.1":"43.0.2357.65","0.28.2":"43.0.2357.65","0.28.3":"43.0.2357.65","0.29.1":"43.0.2357.65","0.29.2":"43.0.2357.65","0.30.4":"44.0.2403.125","0.31.0":"44.0.2403.125","0.31.2":"45.0.2454.85","0.32.2":"45.0.2454.85","0.32.3":"45.0.2454.85","0.33.0":"45.0.2454.85","0.33.1":"45.0.2454.85","0.33.2":"45.0.2454.85","0.33.3":"45.0.2454.85","0.33.4":"45.0.2454.85","0.33.6":"45.0.2454.85","0.33.7":"45.0.2454.85","0.33.8":"45.0.2454.85","0.33.9":"45.0.2454.85","0.34.0":"45.0.2454.85","0.34.1":"45.0.2454.85","0.34.2":"45.0.2454.85","0.34.3":"45.0.2454.85","0.34.4":"45.0.2454.85","0.35.1":"45.0.2454.85","0.35.2":"45.0.2454.85","0.35.3":"45.0.2454.85","0.35.4":"45.0.2454.85","0.35.5":"45.0.2454.85","0.36.0":"47.0.2526.73","0.36.2":"47.0.2526.73","0.36.3":"47.0.2526.73","0.36.4":"47.0.2526.73","0.36.5":"47.0.2526.110","0.36.6":"47.0.2526.110","0.36.7":"47.0.2526.110","0.36.8":"47.0.2526.110","0.36.9":"47.0.2526.110","0.36.10":"47.0.2526.110","0.36.11":"47.0.2526.110","0.36.12":"47.0.2526.110","0.37.0":"49.0.2623.75","0.37.1":"49.0.2623.75","0.37.3":"49.0.2623.75","0.37.4":"49.0.2623.75","0.37.5":"49.0.2623.75","0.37.6":"49.0.2623.75","0.37.7":"49.0.2623.75","0.37.8":"49.0.2623.75","1.0.0":"49.0.2623.75","1.0.1":"49.0.2623.75","1.0.2":"49.0.2623.75","1.1.0":"50.0.2661.102","1.1.1":"50.0.2661.102","1.1.2":"50.0.2661.102","1.1.3":"50.0.2661.102","1.2.0":"51.0.2704.63","1.2.1":"51.0.2704.63","1.2.2":"51.0.2704.84","1.2.3":"51.0.2704.84","1.2.4":"51.0.2704.103","1.2.5":"51.0.2704.103","1.2.6":"51.0.2704.106","1.2.7":"51.0.2704.106","1.2.8":"51.0.2704.106","1.3.0":"52.0.2743.82","1.3.1":"52.0.2743.82","1.3.2":"52.0.2743.82","1.3.3":"52.0.2743.82","1.3.4":"52.0.2743.82","1.3.5":"52.0.2743.82","1.3.6":"52.0.2743.82","1.3.7":"52.0.2743.82","1.3.9":"52.0.2743.82","1.3.10":"52.0.2743.82","1.3.13":"52.0.2743.82","1.3.14":"52.0.2743.82","1.3.15":"52.0.2743.82","1.4.0":"53.0.2785.113","1.4.1":"53.0.2785.113","1.4.2":"53.0.2785.113","1.4.3":"53.0.2785.113","1.4.4":"53.0.2785.113","1.4.5":"53.0.2785.113","1.4.6":"53.0.2785.143","1.4.7":"53.0.2785.143","1.4.8":"53.0.2785.143","1.4.10":"53.0.2785.143","1.4.11":"53.0.2785.143","1.4.12":"54.0.2840.51","1.4.13":"53.0.2785.143","1.4.14":"53.0.2785.143","1.4.15":"53.0.2785.143","1.4.16":"53.0.2785.143","1.5.0":"54.0.2840.101","1.5.1":"54.0.2840.101","1.6.0":"56.0.2924.87","1.6.1":"56.0.2924.87","1.6.2":"56.0.2924.87","1.6.3":"56.0.2924.87","1.6.4":"56.0.2924.87","1.6.5":"56.0.2924.87","1.6.6":"56.0.2924.87","1.6.7":"56.0.2924.87","1.6.8":"56.0.2924.87","1.6.9":"56.0.2924.87","1.6.10":"56.0.2924.87","1.6.11":"56.0.2924.87","1.6.12":"56.0.2924.87","1.6.13":"56.0.2924.87","1.6.14":"56.0.2924.87","1.6.15":"56.0.2924.87","1.6.16":"56.0.2924.87","1.6.17":"56.0.2924.87","1.6.18":"56.0.2924.87","1.7.0":"58.0.3029.110","1.7.1":"58.0.3029.110","1.7.2":"58.0.3029.110","1.7.3":"58.0.3029.110","1.7.4":"58.0.3029.110","1.7.5":"58.0.3029.110","1.7.6":"58.0.3029.110","1.7.7":"58.0.3029.110","1.7.8":"58.0.3029.110","1.7.9":"58.0.3029.110","1.7.10":"58.0.3029.110","1.7.11":"58.0.3029.110","1.7.12":"58.0.3029.110","1.7.13":"58.0.3029.110","1.7.14":"58.0.3029.110","1.7.15":"58.0.3029.110","1.7.16":"58.0.3029.110","1.8.0":"59.0.3071.115","1.8.1":"59.0.3071.115","1.8.2-beta.1":"59.0.3071.115","1.8.2-beta.2":"59.0.3071.115","1.8.2-beta.3":"59.0.3071.115","1.8.2-beta.4":"59.0.3071.115","1.8.2-beta.5":"59.0.3071.115","1.8.2":"59.0.3071.115","1.8.3":"59.0.3071.115","1.8.4":"59.0.3071.115","1.8.5":"59.0.3071.115","1.8.6":"59.0.3071.115","1.8.7":"59.0.3071.115","1.8.8":"59.0.3071.115","2.0.0-beta.1":"61.0.3163.100","2.0.0-beta.2":"61.0.3163.100","2.0.0-beta.3":"61.0.3163.100","2.0.0-beta.4":"61.0.3163.100","2.0.0-beta.5":"61.0.3163.100","2.0.0-beta.6":"61.0.3163.100","2.0.0-beta.7":"61.0.3163.100","2.0.0-beta.8":"61.0.3163.100","2.0.0":"61.0.3163.100","2.0.1":"61.0.3163.100","2.0.2":"61.0.3163.100","2.0.3":"61.0.3163.100","2.0.4":"61.0.3163.100","2.0.5":"61.0.3163.100","2.0.6":"61.0.3163.100","2.0.7":"61.0.3163.100","2.0.8-nightly.20180819":"61.0.3163.100","2.0.8-nightly.20180820":"61.0.3163.100","2.0.8":"61.0.3163.100","2.0.9":"61.0.3163.100","2.0.10":"61.0.3163.100","2.0.11":"61.0.3163.100","2.0.12":"61.0.3163.100","2.0.13":"61.0.3163.100","2.0.14":"61.0.3163.100","2.0.15":"61.0.3163.100","2.0.16":"61.0.3163.100","2.0.17":"61.0.3163.100","2.0.18":"61.0.3163.100","2.1.0-unsupported.20180809":"61.0.3163.100","3.0.0-beta.1":"66.0.3359.181","3.0.0-beta.2":"66.0.3359.181","3.0.0-beta.3":"66.0.3359.181","3.0.0-beta.4":"66.0.3359.181","3.0.0-beta.5":"66.0.3359.181","3.0.0-beta.6":"66.0.3359.181","3.0.0-beta.7":"66.0.3359.181","3.0.0-beta.8":"66.0.3359.181","3.0.0-beta.9":"66.0.3359.181","3.0.0-beta.10":"66.0.3359.181","3.0.0-beta.11":"66.0.3359.181","3.0.0-beta.12":"66.0.3359.181","3.0.0-beta.13":"66.0.3359.181","3.0.0-nightly.20180818":"66.0.3359.181","3.0.0-nightly.20180821":"66.0.3359.181","3.0.0-nightly.20180823":"66.0.3359.181","3.0.0-nightly.20180904":"66.0.3359.181","3.0.0":"66.0.3359.181","3.0.1":"66.0.3359.181","3.0.2":"66.0.3359.181","3.0.3":"66.0.3359.181","3.0.4":"66.0.3359.181","3.0.5":"66.0.3359.181","3.0.6":"66.0.3359.181","3.0.7":"66.0.3359.181","3.0.8":"66.0.3359.181","3.0.9":"66.0.3359.181","3.0.10":"66.0.3359.181","3.0.11":"66.0.3359.181","3.0.12":"66.0.3359.181","3.0.13":"66.0.3359.181","3.0.14":"66.0.3359.181","3.0.15":"66.0.3359.181","3.0.16":"66.0.3359.181","3.1.0-beta.1":"66.0.3359.181","3.1.0-beta.2":"66.0.3359.181","3.1.0-beta.3":"66.0.3359.181","3.1.0-beta.4":"66.0.3359.181","3.1.0-beta.5":"66.0.3359.181","3.1.0":"66.0.3359.181","3.1.1":"66.0.3359.181","3.1.2":"66.0.3359.181","3.1.3":"66.0.3359.181","3.1.4":"66.0.3359.181","3.1.5":"66.0.3359.181","3.1.6":"66.0.3359.181","3.1.7":"66.0.3359.181","3.1.8":"66.0.3359.181","3.1.9":"66.0.3359.181","3.1.10":"66.0.3359.181","3.1.11":"66.0.3359.181","3.1.12":"66.0.3359.181","3.1.13":"66.0.3359.181","4.0.0-beta.1":"69.0.3497.106","4.0.0-beta.2":"69.0.3497.106","4.0.0-beta.3":"69.0.3497.106","4.0.0-beta.4":"69.0.3497.106","4.0.0-beta.5":"69.0.3497.106","4.0.0-beta.6":"69.0.3497.106","4.0.0-beta.7":"69.0.3497.106","4.0.0-beta.8":"69.0.3497.106","4.0.0-beta.9":"69.0.3497.106","4.0.0-beta.10":"69.0.3497.106","4.0.0-beta.11":"69.0.3497.106","4.0.0-nightly.20180817":"66.0.3359.181","4.0.0-nightly.20180819":"66.0.3359.181","4.0.0-nightly.20180821":"66.0.3359.181","4.0.0-nightly.20180929":"67.0.3396.99","4.0.0-nightly.20181006":"68.0.3440.128","4.0.0-nightly.20181010":"69.0.3497.106","4.0.0":"69.0.3497.106","4.0.1":"69.0.3497.106","4.0.2":"69.0.3497.106","4.0.3":"69.0.3497.106","4.0.4":"69.0.3497.106","4.0.5":"69.0.3497.106","4.0.6":"69.0.3497.106","4.0.7":"69.0.3497.128","4.0.8":"69.0.3497.128","4.1.0":"69.0.3497.128","4.1.1":"69.0.3497.128","4.1.2":"69.0.3497.128","4.1.3":"69.0.3497.128","4.1.4":"69.0.3497.128","4.1.5":"69.0.3497.128","4.2.0":"69.0.3497.128","4.2.1":"69.0.3497.128","4.2.2":"69.0.3497.128","4.2.3":"69.0.3497.128","4.2.4":"69.0.3497.128","4.2.5":"69.0.3497.128","4.2.6":"69.0.3497.128","4.2.7":"69.0.3497.128","4.2.8":"69.0.3497.128","4.2.9":"69.0.3497.128","4.2.10":"69.0.3497.128","4.2.11":"69.0.3497.128","4.2.12":"69.0.3497.128","5.0.0-beta.1":"72.0.3626.52","5.0.0-beta.2":"72.0.3626.52","5.0.0-beta.3":"73.0.3683.27","5.0.0-beta.4":"73.0.3683.54","5.0.0-beta.5":"73.0.3683.61","5.0.0-beta.6":"73.0.3683.84","5.0.0-beta.7":"73.0.3683.94","5.0.0-beta.8":"73.0.3683.104","5.0.0-beta.9":"73.0.3683.117","5.0.0-nightly.20190107":"70.0.3538.110","5.0.0-nightly.20190121":"71.0.3578.98","5.0.0-nightly.20190122":"71.0.3578.98","5.0.0":"73.0.3683.119","5.0.1":"73.0.3683.121","5.0.2":"73.0.3683.121","5.0.3":"73.0.3683.121","5.0.4":"73.0.3683.121","5.0.5":"73.0.3683.121","5.0.6":"73.0.3683.121","5.0.7":"73.0.3683.121","5.0.8":"73.0.3683.121","5.0.9":"73.0.3683.121","5.0.10":"73.0.3683.121","5.0.11":"73.0.3683.121","5.0.12":"73.0.3683.121","5.0.13":"73.0.3683.121","6.0.0-beta.1":"76.0.3774.1","6.0.0-beta.2":"76.0.3783.1","6.0.0-beta.3":"76.0.3783.1","6.0.0-beta.4":"76.0.3783.1","6.0.0-beta.5":"76.0.3805.4","6.0.0-beta.6":"76.0.3809.3","6.0.0-beta.7":"76.0.3809.22","6.0.0-beta.8":"76.0.3809.26","6.0.0-beta.9":"76.0.3809.26","6.0.0-beta.10":"76.0.3809.37","6.0.0-beta.11":"76.0.3809.42","6.0.0-beta.12":"76.0.3809.54","6.0.0-beta.13":"76.0.3809.60","6.0.0-beta.14":"76.0.3809.68","6.0.0-beta.15":"76.0.3809.74","6.0.0-nightly.20190212":"72.0.3626.107","6.0.0-nightly.20190213":"72.0.3626.110","6.0.0-nightly.20190311":"74.0.3724.8","6.0.0":"76.0.3809.88","6.0.1":"76.0.3809.102","6.0.2":"76.0.3809.110","6.0.3":"76.0.3809.126","6.0.4":"76.0.3809.131","6.0.5":"76.0.3809.136","6.0.6":"76.0.3809.138","6.0.7":"76.0.3809.139","6.0.8":"76.0.3809.146","6.0.9":"76.0.3809.146","6.0.10":"76.0.3809.146","6.0.11":"76.0.3809.146","6.0.12":"76.0.3809.146","6.1.0":"76.0.3809.146","6.1.1":"76.0.3809.146","6.1.2":"76.0.3809.146","6.1.3":"76.0.3809.146","6.1.4":"76.0.3809.146","6.1.5":"76.0.3809.146","6.1.6":"76.0.3809.146","6.1.7":"76.0.3809.146","6.1.8":"76.0.3809.146","6.1.9":"76.0.3809.146","6.1.10":"76.0.3809.146","6.1.11":"76.0.3809.146","6.1.12":"76.0.3809.146","7.0.0-beta.1":"78.0.3866.0","7.0.0-beta.2":"78.0.3866.0","7.0.0-beta.3":"78.0.3866.0","7.0.0-beta.4":"78.0.3896.6","7.0.0-beta.5":"78.0.3905.1","7.0.0-beta.6":"78.0.3905.1","7.0.0-beta.7":"78.0.3905.1","7.0.0-nightly.20190521":"76.0.3784.0","7.0.0-nightly.20190529":"76.0.3806.0","7.0.0-nightly.20190530":"76.0.3806.0","7.0.0-nightly.20190531":"76.0.3806.0","7.0.0-nightly.20190602":"76.0.3806.0","7.0.0-nightly.20190603":"76.0.3806.0","7.0.0-nightly.20190604":"77.0.3814.0","7.0.0-nightly.20190605":"77.0.3815.0","7.0.0-nightly.20190606":"77.0.3815.0","7.0.0-nightly.20190607":"77.0.3815.0","7.0.0-nightly.20190608":"77.0.3815.0","7.0.0-nightly.20190609":"77.0.3815.0","7.0.0-nightly.20190611":"77.0.3815.0","7.0.0-nightly.20190612":"77.0.3815.0","7.0.0-nightly.20190613":"77.0.3815.0","7.0.0-nightly.20190615":"77.0.3815.0","7.0.0-nightly.20190616":"77.0.3815.0","7.0.0-nightly.20190618":"77.0.3815.0","7.0.0-nightly.20190619":"77.0.3815.0","7.0.0-nightly.20190622":"77.0.3815.0","7.0.0-nightly.20190623":"77.0.3815.0","7.0.0-nightly.20190624":"77.0.3815.0","7.0.0-nightly.20190627":"77.0.3815.0","7.0.0-nightly.20190629":"77.0.3815.0","7.0.0-nightly.20190630":"77.0.3815.0","7.0.0-nightly.20190701":"77.0.3815.0","7.0.0-nightly.20190702":"77.0.3815.0","7.0.0-nightly.20190704":"77.0.3843.0","7.0.0-nightly.20190705":"77.0.3843.0","7.0.0-nightly.20190719":"77.0.3848.0","7.0.0-nightly.20190720":"77.0.3848.0","7.0.0-nightly.20190721":"77.0.3848.0","7.0.0-nightly.20190726":"77.0.3864.0","7.0.0-nightly.20190727":"78.0.3866.0","7.0.0-nightly.20190728":"78.0.3866.0","7.0.0-nightly.20190729":"78.0.3866.0","7.0.0-nightly.20190730":"78.0.3866.0","7.0.0-nightly.20190731":"78.0.3866.0","7.0.0":"78.0.3905.1","7.0.1":"78.0.3904.92","7.1.0":"78.0.3904.94","7.1.1":"78.0.3904.99","7.1.2":"78.0.3904.113","7.1.3":"78.0.3904.126","7.1.4":"78.0.3904.130","7.1.5":"78.0.3904.130","7.1.6":"78.0.3904.130","7.1.7":"78.0.3904.130","7.1.8":"78.0.3904.130","7.1.9":"78.0.3904.130","7.1.10":"78.0.3904.130","7.1.11":"78.0.3904.130","7.1.12":"78.0.3904.130","7.1.13":"78.0.3904.130","7.1.14":"78.0.3904.130","7.2.0":"78.0.3904.130","7.2.1":"78.0.3904.130","7.2.2":"78.0.3904.130","7.2.3":"78.0.3904.130","7.2.4":"78.0.3904.130","7.3.0":"78.0.3904.130","7.3.1":"78.0.3904.130","7.3.2":"78.0.3904.130","7.3.3":"78.0.3904.130","8.0.0-beta.1":"79.0.3931.0","8.0.0-beta.2":"79.0.3931.0","8.0.0-beta.3":"80.0.3955.0","8.0.0-beta.4":"80.0.3955.0","8.0.0-beta.5":"80.0.3987.14","8.0.0-beta.6":"80.0.3987.51","8.0.0-beta.7":"80.0.3987.59","8.0.0-beta.8":"80.0.3987.75","8.0.0-beta.9":"80.0.3987.75","8.0.0-nightly.20190801":"78.0.3866.0","8.0.0-nightly.20190802":"78.0.3866.0","8.0.0-nightly.20190803":"78.0.3871.0","8.0.0-nightly.20190806":"78.0.3871.0","8.0.0-nightly.20190807":"78.0.3871.0","8.0.0-nightly.20190808":"78.0.3871.0","8.0.0-nightly.20190809":"78.0.3871.0","8.0.0-nightly.20190810":"78.0.3871.0","8.0.0-nightly.20190811":"78.0.3871.0","8.0.0-nightly.20190812":"78.0.3871.0","8.0.0-nightly.20190813":"78.0.3871.0","8.0.0-nightly.20190814":"78.0.3871.0","8.0.0-nightly.20190815":"78.0.3871.0","8.0.0-nightly.20190816":"78.0.3881.0","8.0.0-nightly.20190817":"78.0.3881.0","8.0.0-nightly.20190818":"78.0.3881.0","8.0.0-nightly.20190819":"78.0.3881.0","8.0.0-nightly.20190820":"78.0.3881.0","8.0.0-nightly.20190824":"78.0.3892.0","8.0.0-nightly.20190825":"78.0.3892.0","8.0.0-nightly.20190827":"78.0.3892.0","8.0.0-nightly.20190828":"78.0.3892.0","8.0.0-nightly.20190830":"78.0.3892.0","8.0.0-nightly.20190901":"78.0.3892.0","8.0.0-nightly.20190902":"78.0.3892.0","8.0.0-nightly.20190907":"78.0.3892.0","8.0.0-nightly.20190909":"78.0.3892.0","8.0.0-nightly.20190910":"78.0.3892.0","8.0.0-nightly.20190911":"78.0.3892.0","8.0.0-nightly.20190913":"78.0.3892.0","8.0.0-nightly.20190914":"78.0.3892.0","8.0.0-nightly.20190915":"78.0.3892.0","8.0.0-nightly.20190917":"78.0.3892.0","8.0.0-nightly.20190919":"79.0.3915.0","8.0.0-nightly.20190920":"79.0.3915.0","8.0.0-nightly.20190923":"79.0.3919.0","8.0.0-nightly.20190924":"79.0.3919.0","8.0.0-nightly.20190926":"79.0.3919.0","8.0.0-nightly.20190929":"79.0.3919.0","8.0.0-nightly.20190930":"79.0.3919.0","8.0.0-nightly.20191001":"79.0.3919.0","8.0.0-nightly.20191004":"79.0.3919.0","8.0.0-nightly.20191005":"79.0.3919.0","8.0.0-nightly.20191006":"79.0.3919.0","8.0.0-nightly.20191009":"79.0.3919.0","8.0.0-nightly.20191011":"79.0.3919.0","8.0.0-nightly.20191012":"79.0.3919.0","8.0.0-nightly.20191017":"79.0.3919.0","8.0.0-nightly.20191019":"79.0.3931.0","8.0.0-nightly.20191020":"79.0.3931.0","8.0.0-nightly.20191021":"79.0.3931.0","8.0.0-nightly.20191023":"79.0.3931.0","8.0.0-nightly.20191101":"80.0.3952.0","8.0.0-nightly.20191105":"80.0.3952.0","8.0.0":"80.0.3987.86","8.0.1":"80.0.3987.86","8.0.2":"80.0.3987.86","8.0.3":"80.0.3987.134","8.1.0":"80.0.3987.137","8.1.1":"80.0.3987.141","8.2.0":"80.0.3987.158","8.2.1":"80.0.3987.163","8.2.2":"80.0.3987.163","8.2.3":"80.0.3987.163","8.2.4":"80.0.3987.165","8.2.5":"80.0.3987.165","8.3.0":"80.0.3987.165","8.3.1":"80.0.3987.165","8.3.2":"80.0.3987.165","8.3.3":"80.0.3987.165","8.3.4":"80.0.3987.165","8.4.0":"80.0.3987.165","8.4.1":"80.0.3987.165","8.5.0":"80.0.3987.165","8.5.1":"80.0.3987.165","8.5.2":"80.0.3987.165","8.5.3":"80.0.3987.163","8.5.4":"80.0.3987.163","8.5.5":"80.0.3987.163","9.0.0-beta.1":"82.0.4048.0","9.0.0-beta.2":"82.0.4048.0","9.0.0-beta.3":"82.0.4048.0","9.0.0-beta.4":"82.0.4048.0","9.0.0-beta.5":"82.0.4048.0","9.0.0-beta.6":"82.0.4058.2","9.0.0-beta.7":"82.0.4058.2","9.0.0-beta.9":"82.0.4058.2","9.0.0-beta.10":"82.0.4085.10","9.0.0-beta.12":"82.0.4085.14","9.0.0-beta.13":"82.0.4085.14","9.0.0-beta.14":"82.0.4085.27","9.0.0-beta.15":"83.0.4102.3","9.0.0-beta.16":"83.0.4102.3","9.0.0-beta.17":"83.0.4103.14","9.0.0-beta.18":"83.0.4103.16","9.0.0-beta.19":"83.0.4103.24","9.0.0-beta.20":"83.0.4103.26","9.0.0-beta.21":"83.0.4103.26","9.0.0-beta.22":"83.0.4103.34","9.0.0-beta.23":"83.0.4103.44","9.0.0-beta.24":"83.0.4103.45","9.0.0-nightly.20191121":"80.0.3954.0","9.0.0-nightly.20191122":"80.0.3954.0","9.0.0-nightly.20191123":"80.0.3954.0","9.0.0-nightly.20191124":"80.0.3954.0","9.0.0-nightly.20191129":"80.0.3954.0","9.0.0-nightly.20191130":"80.0.3954.0","9.0.0-nightly.20191201":"80.0.3954.0","9.0.0-nightly.20191202":"80.0.3954.0","9.0.0-nightly.20191203":"80.0.3954.0","9.0.0-nightly.20191204":"80.0.3954.0","9.0.0-nightly.20191210":"80.0.3954.0","9.0.0-nightly.20191220":"81.0.3994.0","9.0.0-nightly.20191221":"81.0.3994.0","9.0.0-nightly.20191222":"81.0.3994.0","9.0.0-nightly.20191223":"81.0.3994.0","9.0.0-nightly.20191224":"81.0.3994.0","9.0.0-nightly.20191225":"81.0.3994.0","9.0.0-nightly.20191226":"81.0.3994.0","9.0.0-nightly.20191228":"81.0.3994.0","9.0.0-nightly.20191229":"81.0.3994.0","9.0.0-nightly.20191230":"81.0.3994.0","9.0.0-nightly.20191231":"81.0.3994.0","9.0.0-nightly.20200101":"81.0.3994.0","9.0.0-nightly.20200103":"81.0.3994.0","9.0.0-nightly.20200104":"81.0.3994.0","9.0.0-nightly.20200105":"81.0.3994.0","9.0.0-nightly.20200106":"81.0.3994.0","9.0.0-nightly.20200108":"81.0.3994.0","9.0.0-nightly.20200109":"81.0.3994.0","9.0.0-nightly.20200110":"81.0.3994.0","9.0.0-nightly.20200111":"81.0.3994.0","9.0.0-nightly.20200113":"81.0.3994.0","9.0.0-nightly.20200115":"81.0.3994.0","9.0.0-nightly.20200116":"81.0.3994.0","9.0.0-nightly.20200117":"81.0.3994.0","9.0.0-nightly.20200119":"81.0.4030.0","9.0.0-nightly.20200121":"81.0.4030.0","9.0.0":"83.0.4103.64","9.0.1":"83.0.4103.94","9.0.2":"83.0.4103.94","9.0.3":"83.0.4103.100","9.0.4":"83.0.4103.104","9.0.5":"83.0.4103.119","9.1.0":"83.0.4103.122","9.1.1":"83.0.4103.122","9.1.2":"83.0.4103.122","9.2.0":"83.0.4103.122","9.2.1":"83.0.4103.122","9.3.0":"83.0.4103.122","9.3.1":"83.0.4103.122","9.3.2":"83.0.4103.122","9.3.3":"83.0.4103.122","9.3.4":"83.0.4103.122","9.3.5":"83.0.4103.122","9.4.0":"83.0.4103.122","9.4.1":"83.0.4103.122","9.4.2":"83.0.4103.122","9.4.3":"83.0.4103.122","9.4.4":"83.0.4103.122","10.0.0-beta.1":"84.0.4129.0","10.0.0-beta.2":"84.0.4129.0","10.0.0-beta.3":"85.0.4161.2","10.0.0-beta.4":"85.0.4161.2","10.0.0-beta.8":"85.0.4181.1","10.0.0-beta.9":"85.0.4181.1","10.0.0-beta.10":"85.0.4183.19","10.0.0-beta.11":"85.0.4183.20","10.0.0-beta.12":"85.0.4183.26","10.0.0-beta.13":"85.0.4183.39","10.0.0-beta.14":"85.0.4183.39","10.0.0-beta.15":"85.0.4183.39","10.0.0-beta.17":"85.0.4183.39","10.0.0-beta.19":"85.0.4183.39","10.0.0-beta.20":"85.0.4183.39","10.0.0-beta.21":"85.0.4183.39","10.0.0-beta.23":"85.0.4183.70","10.0.0-beta.24":"85.0.4183.78","10.0.0-beta.25":"85.0.4183.80","10.0.0-nightly.20200209":"82.0.4050.0","10.0.0-nightly.20200210":"82.0.4050.0","10.0.0-nightly.20200211":"82.0.4050.0","10.0.0-nightly.20200216":"82.0.4050.0","10.0.0-nightly.20200217":"82.0.4050.0","10.0.0-nightly.20200218":"82.0.4050.0","10.0.0-nightly.20200221":"82.0.4050.0","10.0.0-nightly.20200222":"82.0.4050.0","10.0.0-nightly.20200223":"82.0.4050.0","10.0.0-nightly.20200226":"82.0.4050.0","10.0.0-nightly.20200303":"82.0.4050.0","10.0.0-nightly.20200304":"82.0.4076.0","10.0.0-nightly.20200305":"82.0.4076.0","10.0.0-nightly.20200306":"82.0.4076.0","10.0.0-nightly.20200309":"82.0.4076.0","10.0.0-nightly.20200310":"82.0.4076.0","10.0.0-nightly.20200311":"82.0.4083.0","10.0.0-nightly.20200316":"83.0.4086.0","10.0.0-nightly.20200317":"83.0.4087.0","10.0.0-nightly.20200318":"83.0.4087.0","10.0.0-nightly.20200320":"83.0.4087.0","10.0.0-nightly.20200323":"83.0.4087.0","10.0.0-nightly.20200324":"83.0.4087.0","10.0.0-nightly.20200325":"83.0.4087.0","10.0.0-nightly.20200326":"83.0.4087.0","10.0.0-nightly.20200327":"83.0.4087.0","10.0.0-nightly.20200330":"83.0.4087.0","10.0.0-nightly.20200331":"83.0.4087.0","10.0.0-nightly.20200401":"83.0.4087.0","10.0.0-nightly.20200402":"83.0.4087.0","10.0.0-nightly.20200403":"83.0.4087.0","10.0.0-nightly.20200406":"83.0.4087.0","10.0.0-nightly.20200408":"83.0.4095.0","10.0.0-nightly.20200410":"83.0.4095.0","10.0.0-nightly.20200413":"83.0.4095.0","10.0.0-nightly.20200414":"84.0.4114.0","10.0.0-nightly.20200415":"84.0.4115.0","10.0.0-nightly.20200416":"84.0.4115.0","10.0.0-nightly.20200417":"84.0.4115.0","10.0.0-nightly.20200422":"84.0.4121.0","10.0.0-nightly.20200423":"84.0.4121.0","10.0.0-nightly.20200427":"84.0.4125.0","10.0.0-nightly.20200428":"84.0.4125.0","10.0.0-nightly.20200429":"84.0.4125.0","10.0.0-nightly.20200430":"84.0.4125.0","10.0.0-nightly.20200501":"84.0.4129.0","10.0.0-nightly.20200504":"84.0.4129.0","10.0.0-nightly.20200505":"84.0.4129.0","10.0.0-nightly.20200506":"84.0.4129.0","10.0.0-nightly.20200507":"84.0.4129.0","10.0.0-nightly.20200508":"84.0.4129.0","10.0.0-nightly.20200511":"84.0.4129.0","10.0.0-nightly.20200512":"84.0.4129.0","10.0.0-nightly.20200513":"84.0.4129.0","10.0.0-nightly.20200514":"84.0.4129.0","10.0.0-nightly.20200515":"84.0.4129.0","10.0.0-nightly.20200518":"84.0.4129.0","10.0.0-nightly.20200519":"84.0.4129.0","10.0.0-nightly.20200520":"84.0.4129.0","10.0.0-nightly.20200521":"84.0.4129.0","10.0.0":"85.0.4183.84","10.0.1":"85.0.4183.86","10.1.0":"85.0.4183.87","10.1.1":"85.0.4183.93","10.1.2":"85.0.4183.98","10.1.3":"85.0.4183.121","10.1.4":"85.0.4183.121","10.1.5":"85.0.4183.121","10.1.6":"85.0.4183.121","10.1.7":"85.0.4183.121","10.2.0":"85.0.4183.121","10.3.0":"85.0.4183.121","10.3.1":"85.0.4183.121","10.3.2":"85.0.4183.121","10.4.0":"85.0.4183.121","10.4.1":"85.0.4183.121","10.4.2":"85.0.4183.121","10.4.3":"85.0.4183.121","10.4.4":"85.0.4183.121","10.4.5":"85.0.4183.121","10.4.6":"85.0.4183.121","10.4.7":"85.0.4183.121","11.0.0-beta.1":"86.0.4234.0","11.0.0-beta.3":"86.0.4234.0","11.0.0-beta.4":"86.0.4234.0","11.0.0-beta.5":"86.0.4234.0","11.0.0-beta.6":"86.0.4234.0","11.0.0-beta.7":"86.0.4234.0","11.0.0-beta.8":"87.0.4251.1","11.0.0-beta.9":"87.0.4251.1","11.0.0-beta.11":"87.0.4251.1","11.0.0-beta.12":"87.0.4280.11","11.0.0-beta.13":"87.0.4280.11","11.0.0-beta.16":"87.0.4280.27","11.0.0-beta.17":"87.0.4280.27","11.0.0-beta.18":"87.0.4280.27","11.0.0-beta.19":"87.0.4280.27","11.0.0-beta.20":"87.0.4280.40","11.0.0-beta.22":"87.0.4280.47","11.0.0-beta.23":"87.0.4280.47","11.0.0-nightly.20200525":"84.0.4129.0","11.0.0-nightly.20200526":"84.0.4129.0","11.0.0-nightly.20200529":"85.0.4156.0","11.0.0-nightly.20200602":"85.0.4162.0","11.0.0-nightly.20200603":"85.0.4162.0","11.0.0-nightly.20200604":"85.0.4162.0","11.0.0-nightly.20200609":"85.0.4162.0","11.0.0-nightly.20200610":"85.0.4162.0","11.0.0-nightly.20200611":"85.0.4162.0","11.0.0-nightly.20200615":"85.0.4162.0","11.0.0-nightly.20200616":"85.0.4162.0","11.0.0-nightly.20200617":"85.0.4162.0","11.0.0-nightly.20200618":"85.0.4162.0","11.0.0-nightly.20200619":"85.0.4162.0","11.0.0-nightly.20200701":"85.0.4179.0","11.0.0-nightly.20200702":"85.0.4179.0","11.0.0-nightly.20200703":"85.0.4179.0","11.0.0-nightly.20200706":"85.0.4179.0","11.0.0-nightly.20200707":"85.0.4179.0","11.0.0-nightly.20200708":"85.0.4179.0","11.0.0-nightly.20200709":"85.0.4179.0","11.0.0-nightly.20200716":"86.0.4203.0","11.0.0-nightly.20200717":"86.0.4203.0","11.0.0-nightly.20200720":"86.0.4203.0","11.0.0-nightly.20200721":"86.0.4203.0","11.0.0-nightly.20200723":"86.0.4209.0","11.0.0-nightly.20200724":"86.0.4209.0","11.0.0-nightly.20200729":"86.0.4209.0","11.0.0-nightly.20200730":"86.0.4209.0","11.0.0-nightly.20200731":"86.0.4209.0","11.0.0-nightly.20200803":"86.0.4209.0","11.0.0-nightly.20200804":"86.0.4209.0","11.0.0-nightly.20200805":"86.0.4209.0","11.0.0-nightly.20200811":"86.0.4209.0","11.0.0-nightly.20200812":"86.0.4209.0","11.0.0-nightly.20200822":"86.0.4234.0","11.0.0-nightly.20200824":"86.0.4234.0","11.0.0-nightly.20200825":"86.0.4234.0","11.0.0-nightly.20200826":"86.0.4234.0","11.0.0":"87.0.4280.60","11.0.1":"87.0.4280.60","11.0.2":"87.0.4280.67","11.0.3":"87.0.4280.67","11.0.4":"87.0.4280.67","11.0.5":"87.0.4280.88","11.1.0":"87.0.4280.88","11.1.1":"87.0.4280.88","11.2.0":"87.0.4280.141","11.2.1":"87.0.4280.141","11.2.2":"87.0.4280.141","11.2.3":"87.0.4280.141","11.3.0":"87.0.4280.141","11.4.0":"87.0.4280.141","11.4.1":"87.0.4280.141","11.4.2":"87.0.4280.141","11.4.3":"87.0.4280.141","11.4.4":"87.0.4280.141","11.4.5":"87.0.4280.141","11.4.6":"87.0.4280.141","11.4.7":"87.0.4280.141","11.4.8":"87.0.4280.141","11.4.9":"87.0.4280.141","11.4.10":"87.0.4280.141","11.4.11":"87.0.4280.141","11.4.12":"87.0.4280.141","11.5.0":"87.0.4280.141","12.0.0-beta.1":"89.0.4328.0","12.0.0-beta.3":"89.0.4328.0","12.0.0-beta.4":"89.0.4328.0","12.0.0-beta.5":"89.0.4328.0","12.0.0-beta.6":"89.0.4328.0","12.0.0-beta.7":"89.0.4328.0","12.0.0-beta.8":"89.0.4328.0","12.0.0-beta.9":"89.0.4328.0","12.0.0-beta.10":"89.0.4328.0","12.0.0-beta.11":"89.0.4328.0","12.0.0-beta.12":"89.0.4328.0","12.0.0-beta.14":"89.0.4328.0","12.0.0-beta.16":"89.0.4348.1","12.0.0-beta.18":"89.0.4348.1","12.0.0-beta.19":"89.0.4348.1","12.0.0-beta.20":"89.0.4348.1","12.0.0-beta.21":"89.0.4388.2","12.0.0-beta.22":"89.0.4388.2","12.0.0-beta.23":"89.0.4388.2","12.0.0-beta.24":"89.0.4388.2","12.0.0-beta.25":"89.0.4388.2","12.0.0-beta.26":"89.0.4388.2","12.0.0-beta.27":"89.0.4389.23","12.0.0-beta.28":"89.0.4389.23","12.0.0-beta.29":"89.0.4389.23","12.0.0-beta.30":"89.0.4389.58","12.0.0-beta.31":"89.0.4389.58","12.0.0-nightly.20200827":"86.0.4234.0","12.0.0-nightly.20200831":"86.0.4234.0","12.0.0-nightly.20200902":"86.0.4234.0","12.0.0-nightly.20200903":"86.0.4234.0","12.0.0-nightly.20200907":"86.0.4234.0","12.0.0-nightly.20200910":"86.0.4234.0","12.0.0-nightly.20200911":"86.0.4234.0","12.0.0-nightly.20200914":"86.0.4234.0","12.0.0-nightly.20201013":"87.0.4268.0","12.0.0-nightly.20201014":"87.0.4268.0","12.0.0-nightly.20201015":"87.0.4268.0","12.0.0-nightly.20201023":"88.0.4292.0","12.0.0-nightly.20201026":"88.0.4292.0","12.0.0-nightly.20201030":"88.0.4306.0","12.0.0-nightly.20201102":"88.0.4306.0","12.0.0-nightly.20201103":"88.0.4306.0","12.0.0-nightly.20201104":"88.0.4306.0","12.0.0-nightly.20201105":"88.0.4306.0","12.0.0-nightly.20201106":"88.0.4306.0","12.0.0-nightly.20201111":"88.0.4306.0","12.0.0-nightly.20201112":"88.0.4306.0","12.0.0-nightly.20201116":"88.0.4324.0","12.0.0":"89.0.4389.69","12.0.1":"89.0.4389.82","12.0.2":"89.0.4389.90","12.0.3":"89.0.4389.114","12.0.4":"89.0.4389.114","12.0.5":"89.0.4389.128","12.0.6":"89.0.4389.128","12.0.7":"89.0.4389.128","12.0.8":"89.0.4389.128","12.0.9":"89.0.4389.128","12.0.10":"89.0.4389.128","12.0.11":"89.0.4389.128","12.0.12":"89.0.4389.128","12.0.13":"89.0.4389.128","12.0.14":"89.0.4389.128","12.0.15":"89.0.4389.128","12.0.16":"89.0.4389.128","12.0.17":"89.0.4389.128","12.0.18":"89.0.4389.128","12.1.0":"89.0.4389.128","12.1.1":"89.0.4389.128","12.1.2":"89.0.4389.128","12.2.0":"89.0.4389.128","12.2.1":"89.0.4389.128","12.2.2":"89.0.4389.128","12.2.3":"89.0.4389.128","13.0.0-beta.2":"90.0.4402.0","13.0.0-beta.3":"90.0.4402.0","13.0.0-beta.4":"90.0.4415.0","13.0.0-beta.5":"90.0.4415.0","13.0.0-beta.6":"90.0.4415.0","13.0.0-beta.7":"90.0.4415.0","13.0.0-beta.8":"90.0.4415.0","13.0.0-beta.9":"90.0.4415.0","13.0.0-beta.11":"90.0.4415.0","13.0.0-beta.12":"90.0.4415.0","13.0.0-beta.13":"90.0.4415.0","13.0.0-beta.14":"91.0.4448.0","13.0.0-beta.16":"91.0.4448.0","13.0.0-beta.17":"91.0.4448.0","13.0.0-beta.18":"91.0.4448.0","13.0.0-beta.20":"91.0.4448.0","13.0.0-beta.21":"91.0.4472.33","13.0.0-beta.22":"91.0.4472.33","13.0.0-beta.23":"91.0.4472.33","13.0.0-beta.24":"91.0.4472.38","13.0.0-beta.26":"91.0.4472.38","13.0.0-beta.27":"91.0.4472.38","13.0.0-beta.28":"91.0.4472.38","13.0.0-nightly.20201119":"89.0.4328.0","13.0.0-nightly.20201123":"89.0.4328.0","13.0.0-nightly.20201124":"89.0.4328.0","13.0.0-nightly.20201126":"89.0.4328.0","13.0.0-nightly.20201127":"89.0.4328.0","13.0.0-nightly.20201130":"89.0.4328.0","13.0.0-nightly.20201201":"89.0.4328.0","13.0.0-nightly.20201202":"89.0.4328.0","13.0.0-nightly.20201203":"89.0.4328.0","13.0.0-nightly.20201204":"89.0.4328.0","13.0.0-nightly.20201207":"89.0.4328.0","13.0.0-nightly.20201208":"89.0.4328.0","13.0.0-nightly.20201209":"89.0.4328.0","13.0.0-nightly.20201210":"89.0.4328.0","13.0.0-nightly.20201211":"89.0.4328.0","13.0.0-nightly.20201214":"89.0.4328.0","13.0.0-nightly.20201215":"89.0.4349.0","13.0.0-nightly.20201216":"89.0.4349.0","13.0.0-nightly.20201221":"89.0.4349.0","13.0.0-nightly.20201222":"89.0.4349.0","13.0.0-nightly.20201223":"89.0.4359.0","13.0.0-nightly.20210104":"89.0.4359.0","13.0.0-nightly.20210108":"89.0.4359.0","13.0.0-nightly.20210111":"89.0.4359.0","13.0.0-nightly.20210113":"89.0.4386.0","13.0.0-nightly.20210114":"89.0.4386.0","13.0.0-nightly.20210118":"89.0.4386.0","13.0.0-nightly.20210122":"89.0.4386.0","13.0.0-nightly.20210125":"89.0.4386.0","13.0.0-nightly.20210127":"89.0.4389.0","13.0.0-nightly.20210128":"89.0.4389.0","13.0.0-nightly.20210129":"89.0.4389.0","13.0.0-nightly.20210201":"89.0.4389.0","13.0.0-nightly.20210202":"89.0.4389.0","13.0.0-nightly.20210203":"89.0.4389.0","13.0.0-nightly.20210205":"89.0.4389.0","13.0.0-nightly.20210208":"89.0.4389.0","13.0.0-nightly.20210209":"89.0.4389.0","13.0.0-nightly.20210210":"90.0.4402.0","13.0.0-nightly.20210211":"90.0.4402.0","13.0.0-nightly.20210212":"90.0.4402.0","13.0.0-nightly.20210216":"90.0.4402.0","13.0.0-nightly.20210217":"90.0.4402.0","13.0.0-nightly.20210218":"90.0.4402.0","13.0.0-nightly.20210219":"90.0.4402.0","13.0.0-nightly.20210222":"90.0.4402.0","13.0.0-nightly.20210225":"90.0.4402.0","13.0.0-nightly.20210226":"90.0.4402.0","13.0.0-nightly.20210301":"90.0.4402.0","13.0.0-nightly.20210302":"90.0.4402.0","13.0.0-nightly.20210303":"90.0.4402.0","13.0.0":"91.0.4472.69","13.0.1":"91.0.4472.69","13.1.0":"91.0.4472.77","13.1.1":"91.0.4472.77","13.1.2":"91.0.4472.77","13.1.3":"91.0.4472.106","13.1.4":"91.0.4472.106","13.1.5":"91.0.4472.124","13.1.6":"91.0.4472.124","13.1.7":"91.0.4472.124","13.1.8":"91.0.4472.164","13.1.9":"91.0.4472.164","13.2.0":"91.0.4472.164","13.2.1":"91.0.4472.164","13.2.2":"91.0.4472.164","13.2.3":"91.0.4472.164","13.3.0":"91.0.4472.164","13.4.0":"91.0.4472.164","13.5.0":"91.0.4472.164","13.5.1":"91.0.4472.164","13.5.2":"91.0.4472.164","13.6.0":"91.0.4472.164","13.6.1":"91.0.4472.164","13.6.2":"91.0.4472.164","13.6.3":"91.0.4472.164","13.6.6":"91.0.4472.164","13.6.7":"91.0.4472.164","13.6.8":"91.0.4472.164","13.6.9":"91.0.4472.164","14.0.0-beta.1":"92.0.4511.0","14.0.0-beta.2":"92.0.4511.0","14.0.0-beta.3":"92.0.4511.0","14.0.0-beta.5":"93.0.4536.0","14.0.0-beta.6":"93.0.4536.0","14.0.0-beta.7":"93.0.4536.0","14.0.0-beta.8":"93.0.4536.0","14.0.0-beta.9":"93.0.4539.0","14.0.0-beta.10":"93.0.4539.0","14.0.0-beta.11":"93.0.4557.4","14.0.0-beta.12":"93.0.4557.4","14.0.0-beta.13":"93.0.4566.0","14.0.0-beta.14":"93.0.4566.0","14.0.0-beta.15":"93.0.4566.0","14.0.0-beta.16":"93.0.4566.0","14.0.0-beta.17":"93.0.4566.0","14.0.0-beta.18":"93.0.4577.15","14.0.0-beta.19":"93.0.4577.15","14.0.0-beta.20":"93.0.4577.15","14.0.0-beta.21":"93.0.4577.15","14.0.0-beta.22":"93.0.4577.25","14.0.0-beta.23":"93.0.4577.25","14.0.0-beta.24":"93.0.4577.51","14.0.0-beta.25":"93.0.4577.51","14.0.0-nightly.20210304":"90.0.4402.0","14.0.0-nightly.20210305":"90.0.4415.0","14.0.0-nightly.20210308":"90.0.4415.0","14.0.0-nightly.20210309":"90.0.4415.0","14.0.0-nightly.20210311":"90.0.4415.0","14.0.0-nightly.20210315":"90.0.4415.0","14.0.0-nightly.20210316":"90.0.4415.0","14.0.0-nightly.20210317":"90.0.4415.0","14.0.0-nightly.20210318":"90.0.4415.0","14.0.0-nightly.20210319":"90.0.4415.0","14.0.0-nightly.20210323":"90.0.4415.0","14.0.0-nightly.20210324":"90.0.4415.0","14.0.0-nightly.20210325":"90.0.4415.0","14.0.0-nightly.20210326":"90.0.4415.0","14.0.0-nightly.20210329":"90.0.4415.0","14.0.0-nightly.20210330":"90.0.4415.0","14.0.0-nightly.20210331":"91.0.4448.0","14.0.0-nightly.20210401":"91.0.4448.0","14.0.0-nightly.20210402":"91.0.4448.0","14.0.0-nightly.20210406":"91.0.4448.0","14.0.0-nightly.20210407":"91.0.4448.0","14.0.0-nightly.20210408":"91.0.4448.0","14.0.0-nightly.20210409":"91.0.4448.0","14.0.0-nightly.20210413":"91.0.4448.0","14.0.0-nightly.20210426":"92.0.4475.0","14.0.0-nightly.20210427":"92.0.4475.0","14.0.0-nightly.20210430":"92.0.4488.0","14.0.0-nightly.20210503":"92.0.4488.0","14.0.0-nightly.20210505":"92.0.4496.0","14.0.0-nightly.20210506":"92.0.4498.0","14.0.0-nightly.20210507":"92.0.4499.0","14.0.0-nightly.20210510":"92.0.4499.0","14.0.0-nightly.20210511":"92.0.4499.0","14.0.0-nightly.20210512":"92.0.4499.0","14.0.0-nightly.20210513":"92.0.4499.0","14.0.0-nightly.20210514":"92.0.4505.0","14.0.0-nightly.20210517":"92.0.4505.0","14.0.0-nightly.20210518":"92.0.4505.0","14.0.0-nightly.20210519":"92.0.4505.0","14.0.0-nightly.20210520":"92.0.4511.0","14.0.0-nightly.20210523":"92.0.4511.0","14.0.0-nightly.20210524":"92.0.4511.0","14.0.0":"93.0.4577.58","14.0.1":"93.0.4577.63","14.0.2":"93.0.4577.82","14.1.0":"93.0.4577.82","14.1.1":"93.0.4577.82","14.2.0":"93.0.4577.82","14.2.1":"93.0.4577.82","14.2.2":"93.0.4577.82","14.2.3":"93.0.4577.82","14.2.4":"93.0.4577.82","14.2.5":"93.0.4577.82","14.2.6":"93.0.4577.82","14.2.7":"93.0.4577.82","14.2.8":"93.0.4577.82","14.2.9":"93.0.4577.82","15.0.0-alpha.1":"93.0.4566.0","15.0.0-alpha.2":"93.0.4566.0","15.0.0-alpha.3":"94.0.4584.0","15.0.0-alpha.4":"94.0.4584.0","15.0.0-alpha.5":"94.0.4584.0","15.0.0-alpha.6":"94.0.4584.0","15.0.0-alpha.7":"94.0.4590.2","15.0.0-alpha.8":"94.0.4590.2","15.0.0-alpha.9":"94.0.4590.2","15.0.0-alpha.10":"94.0.4606.12","15.0.0-beta.1":"94.0.4606.20","15.0.0-beta.2":"94.0.4606.20","15.0.0-beta.3":"94.0.4606.31","15.0.0-beta.4":"94.0.4606.31","15.0.0-beta.5":"94.0.4606.31","15.0.0-beta.6":"94.0.4606.31","15.0.0-beta.7":"94.0.4606.31","15.0.0-nightly.20210527":"92.0.4511.0","15.0.0-nightly.20210528":"92.0.4511.0","15.0.0-nightly.20210531":"92.0.4511.0","15.0.0-nightly.20210601":"92.0.4511.0","15.0.0-nightly.20210602":"92.0.4511.0","15.0.0-nightly.20210603":"93.0.4530.0","15.0.0-nightly.20210604":"93.0.4530.0","15.0.0-nightly.20210608":"93.0.4535.0","15.0.0-nightly.20210609":"93.0.4536.0","15.0.0-nightly.20210610":"93.0.4536.0","15.0.0-nightly.20210611":"93.0.4536.0","15.0.0-nightly.20210614":"93.0.4536.0","15.0.0-nightly.20210615":"93.0.4536.0","15.0.0-nightly.20210616":"93.0.4536.0","15.0.0-nightly.20210617":"93.0.4539.0","15.0.0-nightly.20210618":"93.0.4539.0","15.0.0-nightly.20210621":"93.0.4539.0","15.0.0-nightly.20210622":"93.0.4539.0","15.0.0-nightly.20210623":"93.0.4550.0","15.0.0-nightly.20210624":"93.0.4550.0","15.0.0-nightly.20210625":"93.0.4552.0","15.0.0-nightly.20210628":"93.0.4552.0","15.0.0-nightly.20210629":"93.0.4552.0","15.0.0-nightly.20210630":"93.0.4558.0","15.0.0-nightly.20210701":"93.0.4558.0","15.0.0-nightly.20210702":"93.0.4558.0","15.0.0-nightly.20210705":"93.0.4558.0","15.0.0-nightly.20210706":"93.0.4566.0","15.0.0-nightly.20210707":"93.0.4566.0","15.0.0-nightly.20210708":"93.0.4566.0","15.0.0-nightly.20210709":"93.0.4566.0","15.0.0-nightly.20210712":"93.0.4566.0","15.0.0-nightly.20210713":"93.0.4566.0","15.0.0-nightly.20210714":"93.0.4566.0","15.0.0-nightly.20210715":"93.0.4566.0","15.0.0-nightly.20210716":"93.0.4566.0","15.0.0-nightly.20210719":"93.0.4566.0","15.0.0-nightly.20210720":"93.0.4566.0","15.0.0-nightly.20210721":"93.0.4566.0","15.0.0":"94.0.4606.51","15.1.0":"94.0.4606.61","15.1.1":"94.0.4606.61","15.1.2":"94.0.4606.71","15.2.0":"94.0.4606.81","15.3.0":"94.0.4606.81","15.3.1":"94.0.4606.81","15.3.2":"94.0.4606.81","15.3.3":"94.0.4606.81","15.3.4":"94.0.4606.81","15.3.5":"94.0.4606.81","15.3.6":"94.0.4606.81","15.3.7":"94.0.4606.81","15.4.0":"94.0.4606.81","15.4.1":"94.0.4606.81","15.4.2":"94.0.4606.81","15.5.0":"94.0.4606.81","15.5.1":"94.0.4606.81","15.5.2":"94.0.4606.81","15.5.3":"94.0.4606.81","15.5.4":"94.0.4606.81","15.5.5":"94.0.4606.81","15.5.6":"94.0.4606.81","15.5.7":"94.0.4606.81","16.0.0-alpha.1":"95.0.4629.0","16.0.0-alpha.2":"95.0.4629.0","16.0.0-alpha.3":"95.0.4629.0","16.0.0-alpha.4":"95.0.4629.0","16.0.0-alpha.5":"95.0.4629.0","16.0.0-alpha.6":"95.0.4629.0","16.0.0-alpha.7":"95.0.4629.0","16.0.0-alpha.8":"96.0.4647.0","16.0.0-alpha.9":"96.0.4647.0","16.0.0-beta.1":"96.0.4647.0","16.0.0-beta.2":"96.0.4647.0","16.0.0-beta.3":"96.0.4647.0","16.0.0-beta.4":"96.0.4664.18","16.0.0-beta.5":"96.0.4664.18","16.0.0-beta.6":"96.0.4664.27","16.0.0-beta.7":"96.0.4664.27","16.0.0-beta.8":"96.0.4664.35","16.0.0-beta.9":"96.0.4664.35","16.0.0-nightly.20210722":"93.0.4566.0","16.0.0-nightly.20210723":"93.0.4566.0","16.0.0-nightly.20210726":"93.0.4566.0","16.0.0-nightly.20210727":"94.0.4584.0","16.0.0-nightly.20210728":"94.0.4584.0","16.0.0-nightly.20210729":"94.0.4584.0","16.0.0-nightly.20210730":"94.0.4584.0","16.0.0-nightly.20210802":"94.0.4584.0","16.0.0-nightly.20210803":"94.0.4584.0","16.0.0-nightly.20210804":"94.0.4584.0","16.0.0-nightly.20210805":"94.0.4584.0","16.0.0-nightly.20210806":"94.0.4584.0","16.0.0-nightly.20210809":"94.0.4584.0","16.0.0-nightly.20210810":"94.0.4584.0","16.0.0-nightly.20210811":"94.0.4584.0","16.0.0-nightly.20210812":"94.0.4590.2","16.0.0-nightly.20210813":"94.0.4590.2","16.0.0-nightly.20210816":"94.0.4590.2","16.0.0-nightly.20210817":"94.0.4590.2","16.0.0-nightly.20210818":"94.0.4590.2","16.0.0-nightly.20210819":"94.0.4590.2","16.0.0-nightly.20210820":"94.0.4590.2","16.0.0-nightly.20210823":"94.0.4590.2","16.0.0-nightly.20210824":"95.0.4612.5","16.0.0-nightly.20210825":"95.0.4612.5","16.0.0-nightly.20210826":"95.0.4612.5","16.0.0-nightly.20210827":"95.0.4612.5","16.0.0-nightly.20210830":"95.0.4612.5","16.0.0-nightly.20210831":"95.0.4612.5","16.0.0-nightly.20210901":"95.0.4612.5","16.0.0-nightly.20210902":"95.0.4629.0","16.0.0-nightly.20210903":"95.0.4629.0","16.0.0-nightly.20210906":"95.0.4629.0","16.0.0-nightly.20210907":"95.0.4629.0","16.0.0-nightly.20210908":"95.0.4629.0","16.0.0-nightly.20210909":"95.0.4629.0","16.0.0-nightly.20210910":"95.0.4629.0","16.0.0-nightly.20210913":"95.0.4629.0","16.0.0-nightly.20210914":"95.0.4629.0","16.0.0-nightly.20210915":"95.0.4629.0","16.0.0-nightly.20210916":"95.0.4629.0","16.0.0-nightly.20210917":"95.0.4629.0","16.0.0-nightly.20210920":"95.0.4629.0","16.0.0-nightly.20210921":"95.0.4629.0","16.0.0-nightly.20210922":"95.0.4629.0","16.0.0":"96.0.4664.45","16.0.1":"96.0.4664.45","16.0.2":"96.0.4664.55","16.0.3":"96.0.4664.55","16.0.4":"96.0.4664.55","16.0.5":"96.0.4664.55","16.0.6":"96.0.4664.110","16.0.7":"96.0.4664.110","16.0.8":"96.0.4664.110","16.0.9":"96.0.4664.174","16.0.10":"96.0.4664.174","16.1.0":"96.0.4664.174","16.1.1":"96.0.4664.174","16.2.0":"96.0.4664.174","16.2.1":"96.0.4664.174","16.2.2":"96.0.4664.174","16.2.3":"96.0.4664.174","16.2.4":"96.0.4664.174","16.2.5":"96.0.4664.174","16.2.6":"96.0.4664.174","16.2.7":"96.0.4664.174","16.2.8":"96.0.4664.174","17.0.0-alpha.1":"96.0.4664.4","17.0.0-alpha.2":"96.0.4664.4","17.0.0-alpha.3":"96.0.4664.4","17.0.0-alpha.4":"98.0.4706.0","17.0.0-alpha.5":"98.0.4706.0","17.0.0-alpha.6":"98.0.4706.0","17.0.0-beta.1":"98.0.4706.0","17.0.0-beta.2":"98.0.4706.0","17.0.0-beta.3":"98.0.4758.9","17.0.0-beta.4":"98.0.4758.11","17.0.0-beta.5":"98.0.4758.11","17.0.0-beta.6":"98.0.4758.11","17.0.0-beta.7":"98.0.4758.11","17.0.0-beta.8":"98.0.4758.11","17.0.0-beta.9":"98.0.4758.11","17.0.0-nightly.20210923":"95.0.4629.0","17.0.0-nightly.20210924":"95.0.4629.0","17.0.0-nightly.20210927":"95.0.4629.0","17.0.0-nightly.20210928":"95.0.4629.0","17.0.0-nightly.20210929":"95.0.4629.0","17.0.0-nightly.20210930":"95.0.4629.0","17.0.0-nightly.20211001":"95.0.4629.0","17.0.0-nightly.20211004":"95.0.4629.0","17.0.0-nightly.20211005":"95.0.4629.0","17.0.0-nightly.20211006":"96.0.4647.0","17.0.0-nightly.20211007":"96.0.4647.0","17.0.0-nightly.20211008":"96.0.4647.0","17.0.0-nightly.20211011":"96.0.4647.0","17.0.0-nightly.20211012":"96.0.4647.0","17.0.0-nightly.20211013":"96.0.4647.0","17.0.0-nightly.20211014":"96.0.4647.0","17.0.0-nightly.20211015":"96.0.4647.0","17.0.0-nightly.20211018":"96.0.4647.0","17.0.0-nightly.20211019":"96.0.4647.0","17.0.0-nightly.20211020":"96.0.4647.0","17.0.0-nightly.20211021":"96.0.4647.0","17.0.0-nightly.20211022":"96.0.4664.4","17.0.0-nightly.20211025":"96.0.4664.4","17.0.0-nightly.20211026":"96.0.4664.4","17.0.0-nightly.20211027":"96.0.4664.4","17.0.0-nightly.20211028":"96.0.4664.4","17.0.0-nightly.20211029":"96.0.4664.4","17.0.0-nightly.20211101":"96.0.4664.4","17.0.0-nightly.20211102":"96.0.4664.4","17.0.0-nightly.20211103":"96.0.4664.4","17.0.0-nightly.20211104":"96.0.4664.4","17.0.0-nightly.20211105":"96.0.4664.4","17.0.0-nightly.20211108":"96.0.4664.4","17.0.0-nightly.20211109":"96.0.4664.4","17.0.0-nightly.20211110":"96.0.4664.4","17.0.0-nightly.20211111":"96.0.4664.4","17.0.0-nightly.20211112":"96.0.4664.4","17.0.0-nightly.20211115":"96.0.4664.4","17.0.0-nightly.20211116":"96.0.4664.4","17.0.0-nightly.20211117":"96.0.4664.4","17.0.0":"98.0.4758.74","17.0.1":"98.0.4758.82","17.1.0":"98.0.4758.102","17.1.1":"98.0.4758.109","17.1.2":"98.0.4758.109","17.2.0":"98.0.4758.109","17.3.0":"98.0.4758.141","17.3.1":"98.0.4758.141","17.4.0":"98.0.4758.141","17.4.1":"98.0.4758.141","17.4.2":"98.0.4758.141","17.4.3":"98.0.4758.141","17.4.4":"98.0.4758.141","17.4.5":"98.0.4758.141","17.4.6":"98.0.4758.141","17.4.7":"98.0.4758.141","17.4.8":"98.0.4758.141","17.4.9":"98.0.4758.141","17.4.10":"98.0.4758.141","17.4.11":"98.0.4758.141","18.0.0-alpha.1":"99.0.4767.0","18.0.0-alpha.2":"99.0.4767.0","18.0.0-alpha.3":"99.0.4767.0","18.0.0-alpha.4":"99.0.4767.0","18.0.0-alpha.5":"99.0.4767.0","18.0.0-beta.1":"100.0.4894.0","18.0.0-beta.2":"100.0.4894.0","18.0.0-beta.3":"100.0.4894.0","18.0.0-beta.4":"100.0.4894.0","18.0.0-beta.5":"100.0.4894.0","18.0.0-beta.6":"100.0.4894.0","18.0.0-nightly.20211118":"96.0.4664.4","18.0.0-nightly.20211119":"96.0.4664.4","18.0.0-nightly.20211122":"96.0.4664.4","18.0.0-nightly.20211123":"96.0.4664.4","18.0.0-nightly.20211124":"98.0.4706.0","18.0.0-nightly.20211125":"98.0.4706.0","18.0.0-nightly.20211126":"98.0.4706.0","18.0.0-nightly.20211129":"98.0.4706.0","18.0.0-nightly.20211130":"98.0.4706.0","18.0.0-nightly.20211201":"98.0.4706.0","18.0.0-nightly.20211202":"98.0.4706.0","18.0.0-nightly.20211203":"98.0.4706.0","18.0.0-nightly.20211206":"98.0.4706.0","18.0.0-nightly.20211207":"98.0.4706.0","18.0.0-nightly.20211208":"98.0.4706.0","18.0.0-nightly.20211209":"98.0.4706.0","18.0.0-nightly.20211210":"98.0.4706.0","18.0.0-nightly.20211213":"98.0.4706.0","18.0.0-nightly.20211214":"98.0.4706.0","18.0.0-nightly.20211215":"98.0.4706.0","18.0.0-nightly.20211216":"98.0.4706.0","18.0.0-nightly.20211217":"98.0.4706.0","18.0.0-nightly.20211220":"98.0.4706.0","18.0.0-nightly.20211221":"98.0.4706.0","18.0.0-nightly.20211222":"98.0.4706.0","18.0.0-nightly.20211223":"98.0.4706.0","18.0.0-nightly.20211228":"98.0.4706.0","18.0.0-nightly.20211229":"98.0.4706.0","18.0.0-nightly.20211231":"98.0.4706.0","18.0.0-nightly.20220103":"98.0.4706.0","18.0.0-nightly.20220104":"98.0.4706.0","18.0.0-nightly.20220105":"98.0.4706.0","18.0.0-nightly.20220106":"98.0.4706.0","18.0.0-nightly.20220107":"98.0.4706.0","18.0.0-nightly.20220110":"98.0.4706.0","18.0.0-nightly.20220111":"99.0.4767.0","18.0.0-nightly.20220112":"99.0.4767.0","18.0.0-nightly.20220113":"99.0.4767.0","18.0.0-nightly.20220114":"99.0.4767.0","18.0.0-nightly.20220117":"99.0.4767.0","18.0.0-nightly.20220118":"99.0.4767.0","18.0.0-nightly.20220119":"99.0.4767.0","18.0.0-nightly.20220121":"99.0.4767.0","18.0.0-nightly.20220124":"99.0.4767.0","18.0.0-nightly.20220125":"99.0.4767.0","18.0.0-nightly.20220127":"99.0.4767.0","18.0.0-nightly.20220128":"99.0.4767.0","18.0.0-nightly.20220131":"99.0.4767.0","18.0.0-nightly.20220201":"99.0.4767.0","18.0.0":"100.0.4896.56","18.0.1":"100.0.4896.60","18.0.2":"100.0.4896.60","18.0.3":"100.0.4896.75","18.0.4":"100.0.4896.75","18.1.0":"100.0.4896.127","18.2.0":"100.0.4896.143","18.2.1":"100.0.4896.143","18.2.2":"100.0.4896.143","18.2.3":"100.0.4896.143","18.2.4":"100.0.4896.160","18.3.0":"100.0.4896.160","18.3.1":"100.0.4896.160","18.3.2":"100.0.4896.160","18.3.3":"100.0.4896.160","18.3.4":"100.0.4896.160","18.3.5":"100.0.4896.160","18.3.6":"100.0.4896.160","18.3.7":"100.0.4896.160","18.3.8":"100.0.4896.160","18.3.9":"100.0.4896.160","18.3.11":"100.0.4896.160","18.3.12":"100.0.4896.160","18.3.13":"100.0.4896.160","18.3.14":"100.0.4896.160","19.0.0-alpha.1":"102.0.4962.3","19.0.0-alpha.2":"102.0.4971.0","19.0.0-alpha.3":"102.0.4971.0","19.0.0-alpha.4":"102.0.4989.0","19.0.0-alpha.5":"102.0.4989.0","19.0.0-beta.1":"102.0.4999.0","19.0.0-beta.2":"102.0.4999.0","19.0.0-beta.3":"102.0.4999.0","19.0.0-beta.4":"102.0.5005.27","19.0.0-beta.5":"102.0.5005.40","19.0.0-beta.6":"102.0.5005.40","19.0.0-beta.7":"102.0.5005.40","19.0.0-beta.8":"102.0.5005.49","19.0.0-nightly.20220202":"99.0.4767.0","19.0.0-nightly.20220203":"99.0.4767.0","19.0.0-nightly.20220204":"99.0.4767.0","19.0.0-nightly.20220207":"99.0.4767.0","19.0.0-nightly.20220208":"99.0.4767.0","19.0.0-nightly.20220209":"99.0.4767.0","19.0.0-nightly.20220308":"100.0.4894.0","19.0.0-nightly.20220309":"100.0.4894.0","19.0.0-nightly.20220310":"100.0.4894.0","19.0.0-nightly.20220311":"100.0.4894.0","19.0.0-nightly.20220314":"100.0.4894.0","19.0.0-nightly.20220315":"100.0.4894.0","19.0.0-nightly.20220316":"100.0.4894.0","19.0.0-nightly.20220317":"100.0.4894.0","19.0.0-nightly.20220318":"100.0.4894.0","19.0.0-nightly.20220321":"100.0.4894.0","19.0.0-nightly.20220322":"100.0.4894.0","19.0.0-nightly.20220323":"100.0.4894.0","19.0.0-nightly.20220324":"100.0.4894.0","19.0.0-nightly.20220325":"102.0.4961.0","19.0.0-nightly.20220328":"102.0.4962.3","19.0.0-nightly.20220329":"102.0.4962.3","19.0.0":"102.0.5005.61","19.0.1":"102.0.5005.61","19.0.2":"102.0.5005.63","19.0.3":"102.0.5005.63","19.0.4":"102.0.5005.63","19.0.5":"102.0.5005.115","19.0.6":"102.0.5005.115","19.0.7":"102.0.5005.134","19.0.8":"102.0.5005.148","19.0.9":"102.0.5005.167","19.0.10":"102.0.5005.167","19.0.11":"102.0.5005.167","19.0.12":"102.0.5005.167","19.0.13":"102.0.5005.167","19.0.14":"102.0.5005.167","19.0.15":"102.0.5005.167","19.0.16":"102.0.5005.167","19.0.17":"102.0.5005.167","19.1.0":"102.0.5005.167","20.0.0-alpha.1":"103.0.5044.0","20.0.0-alpha.2":"104.0.5073.0","20.0.0-alpha.3":"104.0.5073.0","20.0.0-alpha.4":"104.0.5073.0","20.0.0-alpha.5":"104.0.5073.0","20.0.0-alpha.6":"104.0.5073.0","20.0.0-alpha.7":"104.0.5073.0","20.0.0-beta.1":"104.0.5073.0","20.0.0-beta.2":"104.0.5073.0","20.0.0-beta.3":"104.0.5073.0","20.0.0-beta.4":"104.0.5073.0","20.0.0-beta.5":"104.0.5073.0","20.0.0-beta.6":"104.0.5073.0","20.0.0-beta.7":"104.0.5073.0","20.0.0-beta.8":"104.0.5073.0","20.0.0-beta.9":"104.0.5112.39","20.0.0-beta.10":"104.0.5112.48","20.0.0-beta.11":"104.0.5112.48","20.0.0-beta.12":"104.0.5112.48","20.0.0-beta.13":"104.0.5112.57","20.0.0-nightly.20220330":"102.0.4962.3","20.0.0-nightly.20220411":"102.0.4971.0","20.0.0-nightly.20220414":"102.0.4989.0","20.0.0-nightly.20220415":"102.0.4989.0","20.0.0-nightly.20220418":"102.0.4989.0","20.0.0-nightly.20220419":"102.0.4989.0","20.0.0-nightly.20220420":"102.0.4989.0","20.0.0-nightly.20220421":"102.0.4989.0","20.0.0-nightly.20220425":"102.0.4999.0","20.0.0-nightly.20220426":"102.0.4999.0","20.0.0-nightly.20220427":"102.0.4999.0","20.0.0-nightly.20220428":"102.0.4999.0","20.0.0-nightly.20220429":"102.0.4999.0","20.0.0-nightly.20220502":"102.0.4999.0","20.0.0-nightly.20220503":"102.0.4999.0","20.0.0-nightly.20220504":"102.0.4999.0","20.0.0-nightly.20220505":"102.0.4999.0","20.0.0-nightly.20220506":"102.0.4999.0","20.0.0-nightly.20220509":"102.0.4999.0","20.0.0-nightly.20220511":"102.0.4999.0","20.0.0-nightly.20220512":"102.0.4999.0","20.0.0-nightly.20220513":"102.0.4999.0","20.0.0-nightly.20220516":"102.0.4999.0","20.0.0-nightly.20220517":"102.0.4999.0","20.0.0-nightly.20220518":"103.0.5044.0","20.0.0-nightly.20220519":"103.0.5044.0","20.0.0-nightly.20220520":"103.0.5044.0","20.0.0-nightly.20220523":"103.0.5044.0","20.0.0-nightly.20220524":"103.0.5044.0","20.0.0":"104.0.5112.65","20.0.1":"104.0.5112.81","20.0.2":"104.0.5112.81","20.0.3":"104.0.5112.81","20.1.0":"104.0.5112.102","20.1.1":"104.0.5112.102","20.1.2":"104.0.5112.114","20.1.3":"104.0.5112.114","20.1.4":"104.0.5112.114","20.2.0":"104.0.5112.124","21.0.0-alpha.1":"105.0.5187.0","21.0.0-alpha.2":"105.0.5187.0","21.0.0-alpha.3":"105.0.5187.0","21.0.0-alpha.4":"105.0.5187.0","21.0.0-alpha.5":"105.0.5187.0","21.0.0-alpha.6":"106.0.5216.0","21.0.0-beta.1":"106.0.5216.0","21.0.0-beta.2":"106.0.5216.0","21.0.0-beta.3":"106.0.5216.0","21.0.0-beta.4":"106.0.5216.0","21.0.0-beta.5":"106.0.5216.0","21.0.0-beta.6":"106.0.5249.40","21.0.0-beta.7":"106.0.5249.40","21.0.0-beta.8":"106.0.5249.40","21.0.0-nightly.20220526":"103.0.5044.0","21.0.0-nightly.20220527":"103.0.5044.0","21.0.0-nightly.20220530":"103.0.5044.0","21.0.0-nightly.20220531":"103.0.5044.0","21.0.0-nightly.20220602":"104.0.5073.0","21.0.0-nightly.20220603":"104.0.5073.0","21.0.0-nightly.20220606":"104.0.5073.0","21.0.0-nightly.20220607":"104.0.5073.0","21.0.0-nightly.20220608":"104.0.5073.0","21.0.0-nightly.20220609":"104.0.5073.0","21.0.0-nightly.20220610":"104.0.5073.0","21.0.0-nightly.20220613":"104.0.5073.0","21.0.0-nightly.20220614":"104.0.5073.0","21.0.0-nightly.20220615":"104.0.5073.0","21.0.0-nightly.20220616":"104.0.5073.0","21.0.0-nightly.20220617":"104.0.5073.0","21.0.0-nightly.20220620":"104.0.5073.0","21.0.0-nightly.20220621":"104.0.5073.0","21.0.0-nightly.20220622":"104.0.5073.0","21.0.0-nightly.20220623":"104.0.5073.0","21.0.0-nightly.20220624":"104.0.5073.0","21.0.0-nightly.20220627":"104.0.5073.0","21.0.0-nightly.20220628":"105.0.5129.0","21.0.0-nightly.20220629":"105.0.5129.0","21.0.0-nightly.20220630":"105.0.5129.0","21.0.0-nightly.20220701":"105.0.5129.0","21.0.0-nightly.20220704":"105.0.5129.0","21.0.0-nightly.20220705":"105.0.5129.0","21.0.0-nightly.20220706":"105.0.5129.0","21.0.0-nightly.20220707":"105.0.5129.0","21.0.0-nightly.20220708":"105.0.5129.0","21.0.0-nightly.20220711":"105.0.5129.0","21.0.0-nightly.20220712":"105.0.5129.0","21.0.0-nightly.20220713":"105.0.5129.0","21.0.0-nightly.20220715":"105.0.5173.0","21.0.0-nightly.20220718":"105.0.5173.0","21.0.0-nightly.20220719":"105.0.5173.0","21.0.0-nightly.20220720":"105.0.5187.0","21.0.0-nightly.20220721":"105.0.5187.0","21.0.0-nightly.20220722":"105.0.5187.0","21.0.0-nightly.20220725":"105.0.5187.0","21.0.0-nightly.20220726":"105.0.5187.0","21.0.0-nightly.20220727":"105.0.5187.0","21.0.0-nightly.20220728":"105.0.5187.0","21.0.0-nightly.20220801":"105.0.5187.0","21.0.0-nightly.20220802":"105.0.5187.0","22.0.0-nightly.20220808":"105.0.5187.0","22.0.0-nightly.20220809":"105.0.5187.0","22.0.0-nightly.20220810":"105.0.5187.0","22.0.0-nightly.20220811":"105.0.5187.0","22.0.0-nightly.20220812":"105.0.5187.0","22.0.0-nightly.20220815":"105.0.5187.0","22.0.0-nightly.20220816":"105.0.5187.0","22.0.0-nightly.20220817":"105.0.5187.0","22.0.0-nightly.20220822":"106.0.5216.0","22.0.0-nightly.20220823":"106.0.5216.0","22.0.0-nightly.20220824":"106.0.5216.0","22.0.0-nightly.20220825":"106.0.5216.0","22.0.0-nightly.20220829":"106.0.5216.0","22.0.0-nightly.20220830":"106.0.5216.0","22.0.0-nightly.20220831":"106.0.5216.0","22.0.0-nightly.20220901":"106.0.5216.0","22.0.0-nightly.20220902":"106.0.5216.0","22.0.0-nightly.20220905":"106.0.5216.0","22.0.0-nightly.20220908":"107.0.5274.0","22.0.0-nightly.20220909":"107.0.5286.0","22.0.0-nightly.20220912":"107.0.5286.0","22.0.0-nightly.20220913":"107.0.5286.0","22.0.0-nightly.20220914":"107.0.5286.0","22.0.0-nightly.20220915":"107.0.5286.0","22.0.0-nightly.20220916":"107.0.5286.0","22.0.0-nightly.20220919":"107.0.5286.0","22.0.0-nightly.20220920":"107.0.5286.0","22.0.0-nightly.20220921":"107.0.5286.0","22.0.0-nightly.20220922":"107.0.5286.0","22.0.0-nightly.20220923":"107.0.5286.0"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/electron-to-chromium/package.json b/tools/node_modules/eslint/node_modules/electron-to-chromium/package.json index dad7c3fc331..abec157221b 100644 --- a/tools/node_modules/eslint/node_modules/electron-to-chromium/package.json +++ b/tools/node_modules/eslint/node_modules/electron-to-chromium/package.json @@ -1,6 +1,6 @@ { "name": "electron-to-chromium", - "version": "1.4.82", + "version": "1.4.261", "description": "Provides a list of electron-to-chromium version mappings", "main": "index.js", "files": [ @@ -34,7 +34,7 @@ "devDependencies": { "ava": "^4.0.1", "codecov": "^3.8.0", - "electron-releases": "^3.960.0", + "electron-releases": "^3.1145.0", "nyc": "^15.1.0", "request": "^2.65.0", "shelljs": "^0.8.4" diff --git a/tools/node_modules/eslint/node_modules/electron-to-chromium/versions.js b/tools/node_modules/eslint/node_modules/electron-to-chromium/versions.js index 3e0ce3f5437..47442de278c 100644 --- a/tools/node_modules/eslint/node_modules/electron-to-chromium/versions.js +++ b/tools/node_modules/eslint/node_modules/electron-to-chromium/versions.js @@ -80,9 +80,23 @@ module.exports = { "15.2": "94", "15.3": "94", "15.4": "94", + "15.5": "94", "16.0": "96", "16.1": "96", + "16.2": "96", "17.0": "98", "17.1": "98", - "18.0": "100" + "17.2": "98", + "17.3": "98", + "17.4": "98", + "18.0": "100", + "18.1": "100", + "18.2": "100", + "18.3": "100", + "19.0": "102", + "19.1": "102", + "20.0": "104", + "20.1": "104", + "20.2": "104", + "21.0": "106" }; \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/electron-to-chromium/versions.json b/tools/node_modules/eslint/node_modules/electron-to-chromium/versions.json index 099d01c09bd..c8d17df3829 100644 --- a/tools/node_modules/eslint/node_modules/electron-to-chromium/versions.json +++ b/tools/node_modules/eslint/node_modules/electron-to-chromium/versions.json @@ -1 +1 @@ -{"0.20":"39","0.21":"41","0.22":"41","0.23":"41","0.24":"41","0.25":"42","0.26":"42","0.27":"43","0.28":"43","0.29":"43","0.30":"44","0.31":"45","0.32":"45","0.33":"45","0.34":"45","0.35":"45","0.36":"47","0.37":"49","1.0":"49","1.1":"50","1.2":"51","1.3":"52","1.4":"53","1.5":"54","1.6":"56","1.7":"58","1.8":"59","2.0":"61","2.1":"61","3.0":"66","3.1":"66","4.0":"69","4.1":"69","4.2":"69","5.0":"73","6.0":"76","6.1":"76","7.0":"78","7.1":"78","7.2":"78","7.3":"78","8.0":"80","8.1":"80","8.2":"80","8.3":"80","8.4":"80","8.5":"80","9.0":"83","9.1":"83","9.2":"83","9.3":"83","9.4":"83","10.0":"85","10.1":"85","10.2":"85","10.3":"85","10.4":"85","11.0":"87","11.1":"87","11.2":"87","11.3":"87","11.4":"87","11.5":"87","12.0":"89","12.1":"89","12.2":"89","13.0":"91","13.1":"91","13.2":"91","13.3":"91","13.4":"91","13.5":"91","13.6":"91","14.0":"93","14.1":"93","14.2":"93","15.0":"94","15.1":"94","15.2":"94","15.3":"94","15.4":"94","16.0":"96","16.1":"96","17.0":"98","17.1":"98","18.0":"100"} \ No newline at end of file +{"0.20":"39","0.21":"41","0.22":"41","0.23":"41","0.24":"41","0.25":"42","0.26":"42","0.27":"43","0.28":"43","0.29":"43","0.30":"44","0.31":"45","0.32":"45","0.33":"45","0.34":"45","0.35":"45","0.36":"47","0.37":"49","1.0":"49","1.1":"50","1.2":"51","1.3":"52","1.4":"53","1.5":"54","1.6":"56","1.7":"58","1.8":"59","2.0":"61","2.1":"61","3.0":"66","3.1":"66","4.0":"69","4.1":"69","4.2":"69","5.0":"73","6.0":"76","6.1":"76","7.0":"78","7.1":"78","7.2":"78","7.3":"78","8.0":"80","8.1":"80","8.2":"80","8.3":"80","8.4":"80","8.5":"80","9.0":"83","9.1":"83","9.2":"83","9.3":"83","9.4":"83","10.0":"85","10.1":"85","10.2":"85","10.3":"85","10.4":"85","11.0":"87","11.1":"87","11.2":"87","11.3":"87","11.4":"87","11.5":"87","12.0":"89","12.1":"89","12.2":"89","13.0":"91","13.1":"91","13.2":"91","13.3":"91","13.4":"91","13.5":"91","13.6":"91","14.0":"93","14.1":"93","14.2":"93","15.0":"94","15.1":"94","15.2":"94","15.3":"94","15.4":"94","15.5":"94","16.0":"96","16.1":"96","16.2":"96","17.0":"98","17.1":"98","17.2":"98","17.3":"98","17.4":"98","18.0":"100","18.1":"100","18.2":"100","18.3":"100","19.0":"102","19.1":"102","20.0":"104","20.1":"104","20.2":"104","21.0":"106"} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/alignTransform.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/alignTransform.js index aa51820eade..6ef3ed8bd78 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/alignTransform.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/alignTransform.js @@ -79,7 +79,7 @@ const alignTransform = ({ let intoTags = false; let width; - const alignTokens = tokens => { + const alignTokens = (tokens, hasNoTypes) => { const nothingAfter = { delim: false, name: false, @@ -105,6 +105,11 @@ const alignTransform = ({ } } } + } + + if (hasNoTypes) { + nothingAfter.tag = true; + tokens.postTag = ''; } // Todo: Avoid fixing alignment of blocks with multiline wrapping of type @@ -136,7 +141,7 @@ const alignTransform = ({ return tokens; }; - const update = (line, index, source) => { + const update = (line, index, source, hasNoTypes) => { const tokens = { ...line.tokens }; @@ -192,7 +197,7 @@ const alignTransform = ({ } return { ...line, - tokens: alignTokens(tokens) + tokens: alignTokens(tokens, hasNoTypes) }; }; @@ -202,9 +207,14 @@ const alignTransform = ({ }) => { width = source.reduce(getWidth(tags), { ...zeroWidth }); + const hasNoTypes = fields.tags.every(({ + type + }) => { + return !type; + }); return rewireSource({ ...fields, source: source.map((line, index) => { - return update(line, index, source); + return update(line, index, source, hasNoTypes); }) }); }; diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/defaultTagOrder.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/defaultTagOrder.js index 0ee80656a5c..8ea729ebcef 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/defaultTagOrder.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/defaultTagOrder.js @@ -10,7 +10,8 @@ const defaultTagOrder = [// Brief descriptions 'typedef', 'interface', 'record', 'template', 'name', 'kind', 'type', 'alias', 'external', 'host', 'callback', 'func', 'function', 'method', 'class', 'constructor', // Relationships 'modifies', 'mixes', 'mixin', 'mixinClass', 'mixinFunction', 'namespace', 'borrows', 'constructs', 'lends', 'implements', 'requires', // Long descriptions 'desc', 'description', 'classdesc', 'tutorial', 'copyright', 'license', // Simple annotations -'const', 'constant', 'final', 'global', 'readonly', 'abstract', 'virtual', 'var', 'member', 'memberof', 'memberof!', 'inner', 'instance', 'inheritdoc', 'inheritDoc', 'override', 'hideconstructor', // Core function/object info +// TypeScript +'internal', 'const', 'constant', 'final', 'global', 'readonly', 'abstract', 'virtual', 'var', 'member', 'memberof', 'memberof!', 'inner', 'instance', 'inheritdoc', 'inheritDoc', 'override', 'hideconstructor', // Core function/object info 'param', 'arg', 'argument', 'prop', 'property', 'return', 'returns', // Important behavior details 'async', 'generator', 'default', 'defaultvalue', 'enum', 'augments', 'extends', 'throws', 'exception', 'yield', 'yields', 'event', 'fires', 'emits', 'listens', 'this', // Access 'static', 'private', 'protected', 'public', 'access', 'package', '-other', // Supplementary descriptions diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/exportParser.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/exportParser.js index 510d20dda97..05c07c34c97 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/exportParser.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/exportParser.js @@ -108,11 +108,15 @@ const getSymbol = function (node, globals, scope, opt) { return null; } + case 'ClassExpression': + { + return getSymbol(node.body, globals, scope, opts); + } + case 'TSTypeAliasDeclaration': case 'TSEnumDeclaration': case 'TSInterfaceDeclaration': case 'ClassDeclaration': - case 'ClassExpression': case 'FunctionExpression': case 'FunctionDeclaration': case 'ArrowFunctionExpression': @@ -141,7 +145,7 @@ const getSymbol = function (node, globals, scope, opt) { } val.type = 'object'; - val.value = node; + val.value = node.parent; return val; } @@ -490,7 +494,7 @@ const getExportAncestor = function (nde) { }; const canBeExportedByAncestorType = new Set(['TSPropertySignature', 'TSMethodSignature', 'ClassProperty', 'PropertyDefinition', 'Method']); -const canExportChildrenType = new Set(['TSInterfaceBody', 'TSInterfaceDeclaration', 'ClassDeclaration', 'ClassBody', 'ClassDefinition', 'ClassExpression', 'Program']); +const canExportChildrenType = new Set(['TSInterfaceBody', 'TSInterfaceDeclaration', 'TSTypeLiteral', 'TSTypeAliasDeclaration', 'ClassDeclaration', 'ClassBody', 'ClassDefinition', 'ClassExpression', 'Program']); const isExportByAncestor = function (nde) { if (!canBeExportedByAncestorType.has(nde.type)) { @@ -539,7 +543,11 @@ const findExportedNode = function (block, node, cache) { }; const isNodeExported = function (node, globals, opt) { - if (opt.initModuleExports && globals.props.module && globals.props.module.props.exports && findNode(node, globals.props.module.props.exports)) { + var _globals$props$module, _globals$props$module2; + + const moduleExports = (_globals$props$module = globals.props.module) === null || _globals$props$module === void 0 ? void 0 : (_globals$props$module2 = _globals$props$module.props) === null || _globals$props$module2 === void 0 ? void 0 : _globals$props$module2.exports; + + if (opt.initModuleExports && moduleExports && findNode(node, moduleExports)) { return true; } diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/getDefaultTagStructureForMode.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/getDefaultTagStructureForMode.js index cb67c34c392..e762c8cfb56 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/getDefaultTagStructureForMode.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/getDefaultTagStructureForMode.js @@ -88,7 +88,9 @@ const getDefaultTagStructureForMode = mode => { ['nameContents', 'namepath-defining'], // See `external` ['nameRequired', true], ['typeAllowed', false]])], ['interface', new Map([// Allows for "name" in signature, but indicates as optional ['nameContents', isJsdocTypescriptOrPermissive ? 'namepath-defining' : false], // Not in use, but should be this value if using to power `empty-tags` - ['nameAllowed', isClosure], ['typeAllowed', false]])], ['implements', new Map([// Shows curly brackets in the doc signature and examples + ['nameAllowed', isClosure], ['typeAllowed', false]])], ['internal', new Map([// https://www.typescriptlang.org/tsconfig/#stripInternal + ['nameContents', false], // Not in use, but should be this value if using to power `empty-tags` + ['nameAllowed', false]])], ['implements', new Map([// Shows curly brackets in the doc signature and examples // "typeExpression" ['typeRequired', true]])], ['lends', new Map([// Signature seems to require a "namepath" (and no counter-examples) ['nameContents', 'namepath-referencing'], // "namepath" diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/iterateJsdoc.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/iterateJsdoc.js index f480e32f9a4..ff75f3a456b 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/iterateJsdoc.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/iterateJsdoc.js @@ -20,11 +20,29 @@ var _jsdocUtils = _interopRequireDefault(require("./jsdocUtils")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -/* eslint-disable jsdoc/valid-types */ const { rewireSpecs, seedTokens -} = _commentParser.util; +} = _commentParser.util; // todo: Change these `any` types once importing types properly. + +/** + * Should use ESLint rule's typing. + * + * @typedef {any} EslintRuleMeta + */ + +/** + * A plain object for tracking state as needed by rules across iterations. + * + * @typedef {any} StateObject + */ + +/** + * The Node AST as supplied by the parser. + * + * @typedef {any} Node + */ + /* const { align as commentAlign, @@ -253,11 +271,17 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl }; - utils.addTag = (targetTagName, number = (() => { - var _jsdoc$tags$source$0$, _jsdoc$tags, _jsdoc$tags$source$; + utils.addTag = (targetTagName, number = ((() => { + var _jsdoc$tags, _jsdoc$tags$source$; - return (_jsdoc$tags$source$0$ = (_jsdoc$tags = jsdoc.tags[jsdoc.tags.length - 1]) === null || _jsdoc$tags === void 0 ? void 0 : (_jsdoc$tags$source$ = _jsdoc$tags.source[0]) === null || _jsdoc$tags$source$ === void 0 ? void 0 : _jsdoc$tags$source$.number) !== null && _jsdoc$tags$source$0$ !== void 0 ? _jsdoc$tags$source$0$ : 0; - })() + 1, tokens = {}) => { + return (_jsdoc$tags = jsdoc.tags[jsdoc.tags.length - 1]) === null || _jsdoc$tags === void 0 ? void 0 : (_jsdoc$tags$source$ = _jsdoc$tags.source[0]) === null || _jsdoc$tags$source$ === void 0 ? void 0 : _jsdoc$tags$source$.number; + })() ?? jsdoc.source.findIndex(({ + tokens: { + tag + } + }) => { + return tag; + }) - 1) + 1, tokens = {}) => { jsdoc.source.splice(number, 0, { number, source: '', @@ -505,7 +529,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl }; utils.avoidDocs = () => { - var _context$options$0$ex, _context$options$; + var _context$options$; if (ignoreReplacesDocs !== false && (utils.hasTag('ignore') || utils.classHasTag('ignore')) || overrideReplacesDocs !== false && (utils.hasTag('override') || utils.classHasTag('override')) || implementsReplacesDocs !== false && (utils.hasTag('implements') || utils.classHasTag('implements')) || augmentsExtendsReplacesDocs && (utils.hasATag(['augments', 'extends']) || utils.classHasTag('augments') || utils.classHasTag('extends'))) { return true; @@ -515,7 +539,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl return true; } - const exemptedBy = (_context$options$0$ex = (_context$options$ = context.options[0]) === null || _context$options$ === void 0 ? void 0 : _context$options$.exemptedBy) !== null && _context$options$0$ex !== void 0 ? _context$options$0$ex : ['inheritDoc', ...(mode === 'closure' ? [] : ['inheritdoc'])]; + const exemptedBy = ((_context$options$ = context.options[0]) === null || _context$options$ === void 0 ? void 0 : _context$options$.exemptedBy) ?? ['inheritDoc', ...(mode === 'closure' ? [] : ['inheritdoc'])]; if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) { return true; @@ -622,11 +646,9 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl }; utils.hasOptionTag = tagName => { - var _context$options$2; - const { tags - } = (_context$options$2 = context.options[0]) !== null && _context$options$2 !== void 0 ? _context$options$2 : {}; + } = context.options[0] ?? {}; return Boolean(tags && tags.includes(tagName)); }; @@ -649,8 +671,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl }); if (classJsdocNode) { - const indnt = ' '.repeat(classJsdocNode.loc.start.column); - return (0, _jsdoccomment.parseComment)(classJsdocNode, indnt); + return (0, _jsdoccomment.parseComment)(classJsdocNode, ''); } return null; @@ -686,29 +707,29 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl }; const getSettings = context => { - var _context$settings$jsd, _context$settings$jsd2, _context$settings$jsd3, _context$settings$jsd4, _context$settings$jsd5, _context$settings$jsd6, _context$settings$jsd7, _context$settings$jsd8, _context$settings$jsd9, _context$settings$jsd10, _context$settings$jsd11, _context$settings$jsd12, _context$settings$jsd13, _context$settings$jsd14, _context$settings$jsd15, _context$settings$jsd16, _context$settings$jsd17, _context$settings$jsd18; + var _context$settings$jsd, _context$settings$jsd2, _context$settings$jsd3, _context$settings$jsd4, _context$settings$jsd5, _context$settings$jsd6, _context$settings$jsd7, _context$settings$jsd8, _context$settings$jsd9, _context$settings$jsd10, _context$settings$jsd11, _context$settings$jsd12; /* eslint-disable canonical/sort-keys */ const settings = { // All rules ignorePrivate: Boolean((_context$settings$jsd = context.settings.jsdoc) === null || _context$settings$jsd === void 0 ? void 0 : _context$settings$jsd.ignorePrivate), ignoreInternal: Boolean((_context$settings$jsd2 = context.settings.jsdoc) === null || _context$settings$jsd2 === void 0 ? void 0 : _context$settings$jsd2.ignoreInternal), - maxLines: Number((_context$settings$jsd3 = (_context$settings$jsd4 = context.settings.jsdoc) === null || _context$settings$jsd4 === void 0 ? void 0 : _context$settings$jsd4.maxLines) !== null && _context$settings$jsd3 !== void 0 ? _context$settings$jsd3 : 1), - minLines: Number((_context$settings$jsd5 = (_context$settings$jsd6 = context.settings.jsdoc) === null || _context$settings$jsd6 === void 0 ? void 0 : _context$settings$jsd6.minLines) !== null && _context$settings$jsd5 !== void 0 ? _context$settings$jsd5 : 0), + maxLines: Number(((_context$settings$jsd3 = context.settings.jsdoc) === null || _context$settings$jsd3 === void 0 ? void 0 : _context$settings$jsd3.maxLines) ?? 1), + minLines: Number(((_context$settings$jsd4 = context.settings.jsdoc) === null || _context$settings$jsd4 === void 0 ? void 0 : _context$settings$jsd4.minLines) ?? 0), // `check-tag-names` and many returns/param rules - tagNamePreference: (_context$settings$jsd7 = (_context$settings$jsd8 = context.settings.jsdoc) === null || _context$settings$jsd8 === void 0 ? void 0 : _context$settings$jsd8.tagNamePreference) !== null && _context$settings$jsd7 !== void 0 ? _context$settings$jsd7 : {}, + tagNamePreference: ((_context$settings$jsd5 = context.settings.jsdoc) === null || _context$settings$jsd5 === void 0 ? void 0 : _context$settings$jsd5.tagNamePreference) ?? {}, // `check-types` and `no-undefined-types` - preferredTypes: (_context$settings$jsd9 = (_context$settings$jsd10 = context.settings.jsdoc) === null || _context$settings$jsd10 === void 0 ? void 0 : _context$settings$jsd10.preferredTypes) !== null && _context$settings$jsd9 !== void 0 ? _context$settings$jsd9 : {}, + preferredTypes: ((_context$settings$jsd6 = context.settings.jsdoc) === null || _context$settings$jsd6 === void 0 ? void 0 : _context$settings$jsd6.preferredTypes) ?? {}, // `check-types`, `no-undefined-types`, `valid-types` - structuredTags: (_context$settings$jsd11 = (_context$settings$jsd12 = context.settings.jsdoc) === null || _context$settings$jsd12 === void 0 ? void 0 : _context$settings$jsd12.structuredTags) !== null && _context$settings$jsd11 !== void 0 ? _context$settings$jsd11 : {}, + structuredTags: ((_context$settings$jsd7 = context.settings.jsdoc) === null || _context$settings$jsd7 === void 0 ? void 0 : _context$settings$jsd7.structuredTags) ?? {}, // `require-param`, `require-description`, `require-example`, // `require-returns`, `require-throw`, `require-yields` - overrideReplacesDocs: (_context$settings$jsd13 = context.settings.jsdoc) === null || _context$settings$jsd13 === void 0 ? void 0 : _context$settings$jsd13.overrideReplacesDocs, - ignoreReplacesDocs: (_context$settings$jsd14 = context.settings.jsdoc) === null || _context$settings$jsd14 === void 0 ? void 0 : _context$settings$jsd14.ignoreReplacesDocs, - implementsReplacesDocs: (_context$settings$jsd15 = context.settings.jsdoc) === null || _context$settings$jsd15 === void 0 ? void 0 : _context$settings$jsd15.implementsReplacesDocs, - augmentsExtendsReplacesDocs: (_context$settings$jsd16 = context.settings.jsdoc) === null || _context$settings$jsd16 === void 0 ? void 0 : _context$settings$jsd16.augmentsExtendsReplacesDocs, + overrideReplacesDocs: (_context$settings$jsd8 = context.settings.jsdoc) === null || _context$settings$jsd8 === void 0 ? void 0 : _context$settings$jsd8.overrideReplacesDocs, + ignoreReplacesDocs: (_context$settings$jsd9 = context.settings.jsdoc) === null || _context$settings$jsd9 === void 0 ? void 0 : _context$settings$jsd9.ignoreReplacesDocs, + implementsReplacesDocs: (_context$settings$jsd10 = context.settings.jsdoc) === null || _context$settings$jsd10 === void 0 ? void 0 : _context$settings$jsd10.implementsReplacesDocs, + augmentsExtendsReplacesDocs: (_context$settings$jsd11 = context.settings.jsdoc) === null || _context$settings$jsd11 === void 0 ? void 0 : _context$settings$jsd11.augmentsExtendsReplacesDocs, // Many rules, e.g., `check-tag-names` - mode: (_context$settings$jsd17 = (_context$settings$jsd18 = context.settings.jsdoc) === null || _context$settings$jsd18 === void 0 ? void 0 : _context$settings$jsd18.mode) !== null && _context$settings$jsd17 !== void 0 ? _context$settings$jsd17 : context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc' + mode: ((_context$settings$jsd12 = context.settings.jsdoc) === null || _context$settings$jsd12 === void 0 ? void 0 : _context$settings$jsd12.mode) ?? (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc') }; /* eslint-enable canonical/sort-keys */ @@ -753,9 +774,11 @@ const makeReport = (context, commentNode) => { const lineNumber = commentNode.loc.start.line + jsdocLoc.line; loc = { end: { + column: 0, line: lineNumber }, start: { + column: 0, line: lineNumber } }; // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+ @@ -779,7 +802,7 @@ const makeReport = (context, commentNode) => { return report; }; -/* eslint-disable jsdoc/no-undefined-types -- Need to build this in; see https://www.typescriptlang.org/docs/handbook/utility-types.html */ +/* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */ /** * @typedef {ReturnType} Utils @@ -791,7 +814,7 @@ const makeReport = (context, commentNode) => { * indent: string, * jsdoc: object, * jsdocNode: object, - * node: object | null, + * node: Node | null, * report: ReturnType, * settings: Settings, * utils: Utils, @@ -799,7 +822,7 @@ const makeReport = (context, commentNode) => { * ) => any } JsdocVisitor */ -/* eslint-enable jsdoc/no-undefined-types -- Need to build this in */ +/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */ const iterate = (info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state, iteratingAll) => { @@ -842,22 +865,49 @@ const iterate = (info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, nod const getIndentAndJSDoc = function (lines, jsdocNode) { const sourceLine = lines[jsdocNode.loc.start.line - 1]; const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column); - const jsdc = (0, _jsdoccomment.parseComment)(jsdocNode, indnt); + const jsdc = (0, _jsdoccomment.parseComment)(jsdocNode, ''); return [indnt, jsdc]; }; +/** + * + * @typedef {{node: Node, state: StateObject}} NonCommentArgs + */ + +/** + * Our internal dynamic set of utilities. + * + * @todo Document + * @typedef {any} Utils + */ + +/** + * @typedef {object} RuleConfig + * @property {EslintRuleMeta} meta ESLint rule meta + * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts + * @property {true} [contextSelected] Whether to force a `contexts` check + * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default + * regardless of context + * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed + * upon exiting iteration of program AST + * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes + * to be supplied nodes without comments + */ + /** * Create an eslint rule that iterates over all JSDocs, regardless of whether * they are attached to a function-like node. * * @param {JsdocVisitor} iterator - * @param {{meta: any}} ruleConfig - * @param contexts - * @param {boolean} additiveContexts + * @param {RuleConfig} ruleConfig The rule's configuration + * @param contexts The `contexts` containing relevant `comment` info. + * @param {boolean} additiveCommentContexts If true, will have a separate + * iteration for each matching comment context. Otherwise, will iterate + * once if there is a single matching comment context. */ -const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => { - const trackedJsdocs = []; +const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => { + const trackedJsdocs = new Set(); let handler; let settings; @@ -875,7 +925,7 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => { const [indent, jsdoc] = getIndentAndJSDoc(lines, jsdocNode); - if (additiveContexts) { + if (additiveCommentContexts) { for (const [idx, { comment }] of contexts.entries()) { @@ -949,7 +999,7 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => { const commentNode = (0, _jsdoccomment.getJSDocComment)(sourceCode, node, settings); - if (trackedJsdocs.includes(commentNode)) { + if (trackedJsdocs.has(commentNode)) { return; } @@ -964,14 +1014,14 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => { return; } - trackedJsdocs.push(commentNode); + trackedJsdocs.add(commentNode); callIterator(context, node, [commentNode], state); }, 'Program:exit'() { const allComments = sourceCode.getAllComments(); const untrackedJSdoc = allComments.filter(node => { - return !trackedJsdocs.includes(node); + return !trackedJsdocs.has(node); }); callIterator(context, null, untrackedJSdoc, state, true); } @@ -987,7 +1037,7 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => { * they are attached to a function-like node. * * @param {JsdocVisitor} iterator - * @param {{meta: any}} ruleConfig + * @param {RuleConfig} ruleConfig */ @@ -1028,12 +1078,7 @@ const checkFile = (iterator, ruleConfig) => { /** * @param {JsdocVisitor} iterator - * @param {{ - * meta: any, - * contextDefaults?: true | string[], - * contextSelected?: true, - * iterateAllJsdocs?: true, - * }} ruleConfig + * @param {RuleConfig} ruleConfig */ function iterateJsdoc(iterator, ruleConfig) { var _ruleConfig$meta; @@ -1076,9 +1121,9 @@ function iterateJsdoc(iterator, ruleConfig) { let contexts; if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) { - var _context$options$3, _contexts, _contexts2; + var _context$options$2, _contexts, _contexts2; - contexts = ruleConfig.matchContext && (_context$options$3 = context.options[0]) !== null && _context$options$3 !== void 0 && _context$options$3.match ? context.options[0].match : _jsdocUtils.default.enforcedContexts(context, ruleConfig.contextDefaults); + contexts = ruleConfig.matchContext && (_context$options$2 = context.options[0]) !== null && _context$options$2 !== void 0 && _context$options$2.match ? context.options[0].match : _jsdocUtils.default.enforcedContexts(context, ruleConfig.contextDefaults); if (contexts) { contexts = contexts.map(obj => { @@ -1132,7 +1177,7 @@ function iterateJsdoc(iterator, ruleConfig) { if (contexts && (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext)) { contextObject = _jsdocUtils.default.getContextObject(contexts, checkJsdoc, (0, _jsdoccomment.commentHandler)(settings)); } else { - for (const prop of ['ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression']) { + for (const prop of ['ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction']) { contextObject[prop] = checkJsdoc.bind(null, { selector: prop }, null); diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/jsdocUtils.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/jsdocUtils.js index 3871ad95495..7b74c375048 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/jsdocUtils.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/jsdocUtils.js @@ -11,6 +11,8 @@ var _getDefaultTagStructureForMode = _interopRequireDefault(require("./getDefaul var _tagNames = require("./tagNames"); +var _hasReturnValue = require("./utils/hasReturnValue"); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable jsdoc/no-undefined-types */ @@ -117,6 +119,8 @@ const getPropertiesFromPropertySignature = propSignature => { const getFunctionParameterNames = (functionNode, checkDefaultObjects) => { + var _functionNode$value; + // eslint-disable-next-line complexity const getParamName = (param, isProperty) => { var _param$left, _param$left3; @@ -254,7 +258,11 @@ const getFunctionParameterNames = (functionNode, checkDefaultObjects) => { throw new Error(`Unsupported function signature format: \`${param.type}\`.`); }; - return (functionNode.params || functionNode.value.params).map(param => { + if (!functionNode) { + return []; + } + + return (functionNode.params || ((_functionNode$value = functionNode.value) === null || _functionNode$value === void 0 ? void 0 : _functionNode$value.params) || []).map(param => { return getParamName(param); }); }; @@ -365,7 +373,7 @@ const getPreferredTagName = (context, mode, name, tagPreference = {}) => { return [key.replace(/^tag /u, ''), value]; })); - if (name in tagPreferenceFixed) { + if (Object.prototype.hasOwnProperty.call(tagPreferenceFixed, name)) { return tagPreferenceFixed[name]; } @@ -629,358 +637,6 @@ const tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => { const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap); const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) && (hasTypePosition || hasNameOrNamepathPosition); return mustHaveEither && !hasEither && !mustHaveTypePosition; -}; -/** - * Checks if a node is a promise but has no resolve value or an empty value. - * An `undefined` resolve does not count. - * - * @param {object} node - * @returns {boolean} - */ - - -const isNewPromiseExpression = node => { - return node.type === 'NewExpression' && node.callee.type === 'Identifier' && node.callee.name === 'Promise'; -}; - -const isVoidPromise = node => { - var _node$typeParameters, _node$typeParameters$, _node$typeParameters$2; - - return ((_node$typeParameters = node.typeParameters) === null || _node$typeParameters === void 0 ? void 0 : (_node$typeParameters$ = _node$typeParameters.params) === null || _node$typeParameters$ === void 0 ? void 0 : (_node$typeParameters$2 = _node$typeParameters$[0]) === null || _node$typeParameters$2 === void 0 ? void 0 : _node$typeParameters$2.type) === 'TSVoidKeyword'; -}; -/** - * @callback PromiseFilter - * @param {object} node - * @returns {boolean} - */ - -/** - * Checks if a node has a return statement. Void return does not count. - * - * @param {object} node - * @param {PromiseFilter} promFilter - * @returns {boolean|Node} - */ -// eslint-disable-next-line complexity - - -const hasReturnValue = (node, promFilter) => { - var _node$returnType, _node$returnType$type; - - if (!node) { - return false; - } - - switch (node.type) { - case 'TSFunctionType': - case 'TSMethodSignature': - return !['TSVoidKeyword', 'TSUndefinedKeyword'].includes(node === null || node === void 0 ? void 0 : (_node$returnType = node.returnType) === null || _node$returnType === void 0 ? void 0 : (_node$returnType$type = _node$returnType.typeAnnotation) === null || _node$returnType$type === void 0 ? void 0 : _node$returnType$type.type); - - case 'MethodDefinition': - return hasReturnValue(node.value, promFilter); - - case 'FunctionExpression': - case 'FunctionDeclaration': - case 'ArrowFunctionExpression': - { - return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node === null || node === void 0 ? void 0 : node.body)) || hasReturnValue(node.body, promFilter); - } - - case 'BlockStatement': - { - return node.body.some(bodyNode => { - return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter); - }); - } - - case 'LabeledStatement': - case 'WhileStatement': - case 'DoWhileStatement': - case 'ForStatement': - case 'ForInStatement': - case 'ForOfStatement': - case 'WithStatement': - { - return hasReturnValue(node.body, promFilter); - } - - case 'IfStatement': - { - return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter); - } - - case 'TryStatement': - { - return hasReturnValue(node.block, promFilter) || hasReturnValue(node.handler && node.handler.body, promFilter) || hasReturnValue(node.finalizer, promFilter); - } - - case 'SwitchStatement': - { - return node.cases.some(someCase => { - return someCase.consequent.some(nde => { - return hasReturnValue(nde, promFilter); - }); - }); - } - - case 'ReturnStatement': - { - // void return does not count. - if (node.argument === null) { - return false; - } - - if (promFilter && isNewPromiseExpression(node.argument)) { - // Let caller decide how to filter, but this is, at the least, - // a return of sorts and truthy - return promFilter(node.argument); - } - - return true; - } - - default: - { - return false; - } - } -}; -/** - * Avoids further checking child nodes if a nested function shadows the - * resolver, but otherwise, if name is used (by call or passed in as an - * argument to another function), will be considered as non-empty. - * - * This could check for redeclaration of the resolver, but as such is - * unlikely, we avoid the performance cost of checking everywhere for - * (re)declarations or assignments. - * - * @param {AST} node - * @param {string} resolverName - * @returns {boolean} - */ -// eslint-disable-next-line complexity - - -const hasNonEmptyResolverCall = (node, resolverName) => { - if (!node) { - return false; - } // Arrow function without block - - - switch (node.type) { - // istanbul ignore next -- In Babel? - case 'OptionalCallExpression': - case 'CallExpression': - return node.callee.name === resolverName && ( // Implicit or explicit undefined - node.arguments.length > 1 || node.arguments[0] !== undefined) || node.arguments.some(nde => { - // Being passed in to another function (which might invoke it) - return nde.type === 'Identifier' && nde.name === resolverName || // Handle nested items - hasNonEmptyResolverCall(nde, resolverName); - }); - - case 'ChainExpression': - case 'Decorator': - case 'ExpressionStatement': - return hasNonEmptyResolverCall(node.expression, resolverName); - - case 'ClassBody': - case 'BlockStatement': - return node.body.some(bodyNode => { - return hasNonEmptyResolverCall(bodyNode, resolverName); - }); - - case 'FunctionExpression': - case 'FunctionDeclaration': - case 'ArrowFunctionExpression': - { - var _node$params$; - - // Shadowing - if (((_node$params$ = node.params[0]) === null || _node$params$ === void 0 ? void 0 : _node$params$.name) === resolverName) { - return false; - } - - return hasNonEmptyResolverCall(node.body, resolverName); - } - - case 'LabeledStatement': - case 'WhileStatement': - case 'DoWhileStatement': - case 'ForStatement': - case 'ForInStatement': - case 'ForOfStatement': - case 'WithStatement': - { - return hasNonEmptyResolverCall(node.body, resolverName); - } - - case 'ConditionalExpression': - case 'IfStatement': - { - return hasNonEmptyResolverCall(node.test, resolverName) || hasNonEmptyResolverCall(node.consequent, resolverName) || hasNonEmptyResolverCall(node.alternate, resolverName); - } - - case 'TryStatement': - { - return hasNonEmptyResolverCall(node.block, resolverName) || hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) || hasNonEmptyResolverCall(node.finalizer, resolverName); - } - - case 'SwitchStatement': - { - return node.cases.some(someCase => { - return someCase.consequent.some(nde => { - return hasNonEmptyResolverCall(nde, resolverName); - }); - }); - } - - case 'ArrayPattern': - case 'ArrayExpression': - return node.elements.some(element => { - return hasNonEmptyResolverCall(element, resolverName); - }); - - case 'AssignmentPattern': - return hasNonEmptyResolverCall(node.right, resolverName); - - case 'AssignmentExpression': - case 'BinaryExpression': - case 'LogicalExpression': - { - return hasNonEmptyResolverCall(node.left, resolverName) || hasNonEmptyResolverCall(node.right, resolverName); - } - // Comma - - case 'SequenceExpression': - case 'TemplateLiteral': - return node.expressions.some(subExpression => { - return hasNonEmptyResolverCall(subExpression, resolverName); - }); - - case 'ObjectPattern': - case 'ObjectExpression': - return node.properties.some(property => { - return hasNonEmptyResolverCall(property, resolverName); - }); - // istanbul ignore next -- In Babel? - - case 'ClassMethod': - case 'MethodDefinition': - return node.decorators && node.decorators.some(decorator => { - return hasNonEmptyResolverCall(decorator, resolverName); - }) || node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName); - // istanbul ignore next -- In Babel? - - case 'ObjectProperty': - /* eslint-disable no-fallthrough */ - // istanbul ignore next -- In Babel? - - case 'PropertyDefinition': // istanbul ignore next -- In Babel? - - case 'ClassProperty': - /* eslint-enable no-fallthrough */ - - case 'Property': - return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName); - // istanbul ignore next -- In Babel? - - case 'ObjectMethod': - // istanbul ignore next -- In Babel? - return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || node.arguments.some(nde => { - return hasNonEmptyResolverCall(nde, resolverName); - }); - - case 'ClassExpression': - case 'ClassDeclaration': - return hasNonEmptyResolverCall(node.body, resolverName); - - case 'AwaitExpression': - case 'SpreadElement': - case 'UnaryExpression': - case 'YieldExpression': - return hasNonEmptyResolverCall(node.argument, resolverName); - - case 'VariableDeclaration': - { - return node.declarations.some(nde => { - return hasNonEmptyResolverCall(nde, resolverName); - }); - } - - case 'VariableDeclarator': - { - return hasNonEmptyResolverCall(node.id, resolverName) || hasNonEmptyResolverCall(node.init, resolverName); - } - - case 'TaggedTemplateExpression': - return hasNonEmptyResolverCall(node.quasi, resolverName); - // ?. - // istanbul ignore next -- In Babel? - - case 'OptionalMemberExpression': - case 'MemberExpression': - return hasNonEmptyResolverCall(node.object, resolverName) || hasNonEmptyResolverCall(node.property, resolverName); - // istanbul ignore next -- In Babel? - - case 'Import': - case 'ImportExpression': - return hasNonEmptyResolverCall(node.source, resolverName); - - case 'ReturnStatement': - { - if (node.argument === null) { - return false; - } - - return hasNonEmptyResolverCall(node.argument, resolverName); - } - - /* - // Shouldn't need to parse literals/literal components, etc. - case 'Identifier': - case 'TemplateElement': - case 'Super': - // Exports not relevant in this context - */ - - default: - return false; - } -}; -/** - * Checks if a Promise executor has no resolve value or an empty value. - * An `undefined` resolve does not count. - * - * @param {object} node - * @param {boolean} anyPromiseAsReturn - * @returns {boolean} - */ - - -const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => { - return hasReturnValue(node, prom => { - if (anyPromiseAsReturn) { - return true; - } - - if (isVoidPromise(prom)) { - return false; - } - - const [{ - params, - body - } = {}] = prom.arguments; - - if (!(params !== null && params !== void 0 && params.length)) { - return false; - } - - const [{ - name: resolverName - }] = params; - return hasNonEmptyResolverCall(body, resolverName); - }); }; // eslint-disable-next-line complexity @@ -1261,23 +917,27 @@ const isInlineTag = (tag) => { const parseClosureTemplateTag = tag => { return tag.name.split(',').map(type => { - return type.trim(); + return type.trim().replace(/^\[(?.*?)=.*\]$/u, '$'); }); }; +/** + * @typedef {true|string[]} DefaultContexts + */ + /** * Checks user option for `contexts` array, defaulting to * contexts designated by the rule. Returns an array of * ESTree AST types, indicating allowable contexts. * * @param {*} context - * @param {true|string[]} defaultContexts + * @param {DefaultContexts} defaultContexts * @returns {string[]} */ const enforcedContexts = (context, defaultContexts) => { const { - contexts = defaultContexts === true ? ['ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression'] : defaultContexts + contexts = defaultContexts === true ? ['ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction'] : defaultContexts } = context.options[0] || {}; return contexts; }; @@ -1360,9 +1020,9 @@ const getTagsByType = (context, mode, tags, tagPreference) => { }; const getIndent = sourceCode => { - var _sourceCode$text$matc, _sourceCode$text$matc2; + var _sourceCode$text$matc; - return ((_sourceCode$text$matc = (_sourceCode$text$matc2 = sourceCode.text.match(/^\n*([ \t]+)/u)) === null || _sourceCode$text$matc2 === void 0 ? void 0 : _sourceCode$text$matc2[1]) !== null && _sourceCode$text$matc !== void 0 ? _sourceCode$text$matc : '') + ' '; + return (((_sourceCode$text$matc = sourceCode.text.match(/^\n*([ \t]+)/u)) === null || _sourceCode$text$matc === void 0 ? void 0 : _sourceCode$text$matc[1]) ?? '') + ' '; }; const isConstructor = node => { @@ -1405,10 +1065,10 @@ const hasAccessorPair = node => { const exemptSpeciaMethods = (jsdoc, node, context, schema) => { const hasSchemaOption = prop => { - var _context$options$0$pr, _context$options$; + var _context$options$; const schemaProperties = schema[0].properties; - return (_context$options$0$pr = (_context$options$ = context.options[0]) === null || _context$options$ === void 0 ? void 0 : _context$options$[prop]) !== null && _context$options$0$pr !== void 0 ? _context$options$0$pr : schemaProperties[prop] && schemaProperties[prop].default; + return ((_context$options$ = context.options[0]) === null || _context$options$ === void 0 ? void 0 : _context$options$[prop]) ?? (schemaProperties[prop] && schemaProperties[prop].default); }; const checkGetters = hasSchemaOption('checkGetters'); @@ -1493,10 +1153,10 @@ var _default = { hasATag, hasDefinedTypeTag, hasParams, - hasReturnValue, + hasReturnValue: _hasReturnValue.hasReturnValue, hasTag, hasThrowValue, - hasValueOrExecutorHasNonEmptyResolveValue, + hasValueOrExecutorHasNonEmptyResolveValue: _hasReturnValue.hasValueOrExecutorHasNonEmptyResolveValue, hasYieldValue, isConstructor, isGetter, diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkParamNames.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkParamNames.js index 1ca13234e9e..7ff9f1e9dd5 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkParamNames.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkParamNames.js @@ -19,12 +19,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {boolean} enableFixer * @param {Array} functionParameterNames * @param jsdoc - * @param _jsdocNode * @param utils * @param report * @returns {boolean} */ -const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, checkDestructured, checkRestProperty, checkTypesRegex, disableExtraPropertyReporting, enableFixer, functionParameterNames, jsdoc, _jsdocNode, utils, report) => { +const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, checkDestructured, checkRestProperty, checkTypesRegex, disableExtraPropertyReporting, enableFixer, functionParameterNames, jsdoc, utils, report) => { const paramTags = Object.entries(jsdoc.tags).filter(([, tag]) => { return tag.tag === targetTagName; }); @@ -246,7 +245,6 @@ const validateParameterNamesDeep = (targetTagName, _allowExtraTrailingParamDocs, var _default = (0, _iterateJsdoc.default)(({ context, jsdoc, - jsdocNode, report, utils }) => { @@ -270,7 +268,7 @@ var _default = (0, _iterateJsdoc.default)(({ const targetTagName = utils.getPreferredTagName({ tagName: 'param' }); - const isError = validateParameterNames(targetTagName, allowExtraTrailingParamDocs, checkDestructured, checkRestProperty, checkTypesRegex, disableExtraPropertyReporting, enableFixer, functionParameterNames, jsdoc, jsdocNode, utils, report); + const isError = validateParameterNames(targetTagName, allowExtraTrailingParamDocs, checkDestructured, checkRestProperty, checkTypesRegex, disableExtraPropertyReporting, enableFixer, functionParameterNames, jsdoc, utils, report); if (isError || !checkDestructured) { return; diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkPropertyNames.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkPropertyNames.js index e2a318663de..a794d0ccda9 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkPropertyNames.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkPropertyNames.js @@ -13,11 +13,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * @param {string} targetTagName * @param {boolean} enableFixer * @param jsdoc - * @param jsdocNode * @param utils * @returns {boolean} */ -const validatePropertyNames = (targetTagName, enableFixer, jsdoc, jsdocNode, utils) => { +const validatePropertyNames = (targetTagName, enableFixer, jsdoc, utils) => { const propertyTags = Object.entries(jsdoc.tags).filter(([, tag]) => { return tag.tag === targetTagName; }); @@ -81,7 +80,6 @@ const validatePropertyNamesDeep = (targetTagName, jsdocPropertyNames, jsdoc, rep var _default = (0, _iterateJsdoc.default)(({ context, jsdoc, - jsdocNode, report, utils }) => { @@ -97,7 +95,7 @@ var _default = (0, _iterateJsdoc.default)(({ const targetTagName = utils.getPreferredTagName({ tagName: 'property' }); - const isError = validatePropertyNames(targetTagName, enableFixer, jsdoc, jsdocNode, utils); + const isError = validatePropertyNames(targetTagName, enableFixer, jsdoc, utils); if (isError) { return; diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkTypes.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkTypes.js index 8e6995f77a3..40993330677 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkTypes.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkTypes.js @@ -12,8 +12,20 @@ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', 'string', 'symbol', 'object', 'Array', 'Function', 'Date', 'RegExp']; - -const adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => { +/** + * Adjusts the parent type node `meta` for generic matches (or type node + * `type` for `JsdocTypeAny`) and sets the type node `value`. + * + * @param {string} type The actual type + * @param {string} preferred The preferred type + * @param {boolean} isGenericMatch + * @param {string} typeNodeName + * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node + * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode + * @returns {void} + */ + +const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => { let ret = preferred; if (isGenericMatch) { @@ -35,7 +47,7 @@ const adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode parentNode.meta.brackets = 'angle'; parentNode.meta.dot = false; ret = preferred.slice(0, -2); - } else if (parentNode.meta.brackets === 'square' && (nodeName === '[]' || nodeName === 'Array')) { + } else if (parentNode.meta.brackets === 'square' && (typeNodeName === '[]' || typeNodeName === 'Array')) { parentNode.meta.brackets = 'angle'; parentNode.meta.dot = false; } @@ -48,7 +60,7 @@ const adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode node.value = ret.replace(/(?:\.|<>|\.<>|\[\])$/u, ''); // For bare pseudo-types like `<>` if (!ret) { - node.value = nodeName; + node.value = typeNodeName; } }; @@ -64,62 +76,167 @@ var _default = (0, _iterateJsdoc.default)(({ return utils.tagMightHaveTypePosition(tag.tag); }); const { - preferredTypes, + preferredTypes: preferredTypesOriginal, structuredTags, mode } = settings; + const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || 'object' in preferredTypesOriginal || 'object.<>' in preferredTypesOriginal || 'Object.<>' in preferredTypesOriginal || 'object<>' in preferredTypesOriginal); + const preferredTypes = { ...(injectObjectPreferredTypes ? { + Object: 'object', + 'object.<>': 'Object<>', + 'Object.<>': 'Object<>', + 'object<>': 'Object<>' + } : {}), + ...preferredTypesOriginal + }; const { noDefaults, unifyParentAndChildTypeChecks, exemptTagContexts = [] } = context.options[0] || {}; + /** + * Gets information about the preferred type: whether there is a matching + * preferred type, what the type is, and whether it is a match to a generic. + * + * @param {string} _type Not currently in use + * @param {string} typeNodeName + * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode + * @param {string} property + * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]} + */ + + const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => { + let hasMatchingPreferredType = false; + let isGenericMatch = false; + let typeName = typeNodeName; + const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left'; + + if (unifyParentAndChildTypeChecks || isNameOfGeneric) { + var _parentNode$meta, _parentNode$meta2; + + const brackets = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta = parentNode.meta) === null || _parentNode$meta === void 0 ? void 0 : _parentNode$meta.brackets; + const dot = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta2 = parentNode.meta) === null || _parentNode$meta2 === void 0 ? void 0 : _parentNode$meta2.dot; + + if (brackets === 'angle') { + const checkPostFixes = dot ? ['.', '.<>'] : ['<>']; + isGenericMatch = checkPostFixes.some(checkPostFix => { + if ((preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[typeNodeName + checkPostFix]) !== undefined) { + typeName += checkPostFix; + return true; + } - const getPreferredTypeInfo = (_type, nodeName, parentNode, property) => { - let hasMatchingPreferredType; - let isGenericMatch; - let typeName = nodeName; - - if (Object.keys(preferredTypes).length) { - const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left'; - - if (unifyParentAndChildTypeChecks || isNameOfGeneric) { - var _parentNode$meta, _parentNode$meta2; - - const brackets = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta = parentNode.meta) === null || _parentNode$meta === void 0 ? void 0 : _parentNode$meta.brackets; - const dot = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$meta2 = parentNode.meta) === null || _parentNode$meta2 === void 0 ? void 0 : _parentNode$meta2.dot; - - if (brackets === 'angle') { - const checkPostFixes = dot ? ['.', '.<>'] : ['<>']; - isGenericMatch = checkPostFixes.some(checkPostFix => { - if ((preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[nodeName + checkPostFix]) !== undefined) { - typeName += checkPostFix; - return true; - } + return false; + }); + } - return false; - }); - } + if (!isGenericMatch && property) { + const checkPostFixes = dot ? ['.', '.<>'] : [brackets === 'angle' ? '<>' : '[]']; + isGenericMatch = checkPostFixes.some(checkPostFix => { + if ((preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[checkPostFix]) !== undefined) { + typeName = checkPostFix; + return true; + } - if (!isGenericMatch && property) { - const checkPostFixes = dot ? ['.', '.<>'] : [brackets === 'angle' ? '<>' : '[]']; - isGenericMatch = checkPostFixes.some(checkPostFix => { - if ((preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[checkPostFix]) !== undefined) { - typeName = checkPostFix; - return true; - } + return false; + }); + } + } - return false; - }); - } + const directNameMatch = (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[typeNodeName]) !== undefined && !Object.values(preferredTypes).includes(typeNodeName); + const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks; + isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch; + hasMatchingPreferredType = isGenericMatch || directNameMatch && !property; + return [hasMatchingPreferredType, typeName, isGenericMatch]; + }; + /** + * Iterates strict types to see if any should be added to `invalidTypes` (and + * the the relevant strict type returned as the new preferred type). + * + * @param {string} typeNodeName + * @param {string} preferred + * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode + * @param {string[]} invalidTypes + * @returns {string} The `preferred` type string, optionally changed + */ + + + const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => { + let changedPreferred = preferred; + + for (const strictNativeType of strictNativeTypes) { + var _parentNode$elements, _parentNode$left, _parentNode$left2; + + if (strictNativeType === 'object' && ( // This is not set to remap with exact type match (e.g., + // `object: 'Object'`), so can ignore (including if circular) + !(preferredTypes !== null && preferredTypes !== void 0 && preferredTypes[typeNodeName]) || // Although present on `preferredTypes` for remapping, this is a + // parent object without a parent match (and not + // `unifyParentAndChildTypeChecks`) and we don't want + // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555 + parentNode !== null && parentNode !== void 0 && (_parentNode$elements = parentNode.elements) !== null && _parentNode$elements !== void 0 && _parentNode$elements.length && (parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$left = parentNode.left) === null || _parentNode$left === void 0 ? void 0 : _parentNode$left.type) === 'JsdocTypeName' && (parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$left2 = parentNode.left) === null || _parentNode$left2 === void 0 ? void 0 : _parentNode$left2.value) === 'Object')) { + continue; } - const directNameMatch = (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[nodeName]) !== undefined && !Object.values(preferredTypes).includes(nodeName); - const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks; - isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch; - hasMatchingPreferredType = isGenericMatch || directNameMatch && !property; + if (strictNativeType !== typeNodeName && strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && ( // Don't report if user has own map for a strict native type + !preferredTypes || (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[strictNativeType]) === undefined)) { + changedPreferred = strictNativeType; + invalidTypes.push([typeNodeName, changedPreferred]); + break; + } } - return [hasMatchingPreferredType, typeName, isGenericMatch]; + return changedPreferred; + }; + /** + * Collect invalid type info. + * + * @param {string} type + * @param {string} value + * @param {string} tagName + * @param {string} property + * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node + * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode + * @param {string[]} invalidTypes + * @returns {void} + */ + + + const getInvalidTypes = (type, value, tagName, property, node, parentNode, invalidTypes) => { + let typeNodeName = type === 'JsdocTypeAny' ? '*' : value; + const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, typeNodeName, parentNode, property); + let preferred; + let types; + + if (hasMatchingPreferredType) { + const preferredSetting = preferredTypes[typeName]; + typeNodeName = typeName === '[]' ? typeName : typeNodeName; + + if (!preferredSetting) { + invalidTypes.push([typeNodeName]); + } else if (typeof preferredSetting === 'string') { + preferred = preferredSetting; + invalidTypes.push([typeNodeName, preferred]); + } else if (typeof preferredSetting === 'object') { + preferred = preferredSetting === null || preferredSetting === void 0 ? void 0 : preferredSetting.replacement; + invalidTypes.push([typeNodeName, preferred, preferredSetting === null || preferredSetting === void 0 ? void 0 : preferredSetting.message]); + } else { + utils.reportSettings('Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.'); + return; + } + } else if (Object.entries(structuredTags).some(([tag, { + type: typs + }]) => { + types = typs; + return tag === tagName && Array.isArray(types) && !types.includes(typeNodeName); + })) { + invalidTypes.push([typeNodeName, types]); + } else if (!noDefaults && type === 'JsdocTypeName') { + preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes); + } // For fixer + + + if (preferred) { + adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode); + } }; for (const jsdocTag of jsdocTagsWithPossibleType) { @@ -132,8 +249,7 @@ var _default = (0, _iterateJsdoc.default)(({ continue; } - const tagName = jsdocTag.tag; // eslint-disable-next-line complexity -- To refactor - + const tagName = jsdocTag.tag; (0, _jsdoccomment.traverse)(typeAst, (node, parentNode, property) => { const { type, @@ -144,64 +260,15 @@ var _default = (0, _iterateJsdoc.default)(({ return; } - let nodeName = type === 'JsdocTypeAny' ? '*' : value; - const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, nodeName, parentNode, property); - let preferred; - let types; - - if (hasMatchingPreferredType) { - const preferredSetting = preferredTypes[typeName]; - nodeName = typeName === '[]' ? typeName : nodeName; - - if (!preferredSetting) { - invalidTypes.push([nodeName]); - } else if (typeof preferredSetting === 'string') { - preferred = preferredSetting; - invalidTypes.push([nodeName, preferred]); - } else if (typeof preferredSetting === 'object') { - preferred = preferredSetting === null || preferredSetting === void 0 ? void 0 : preferredSetting.replacement; - invalidTypes.push([nodeName, preferred, preferredSetting === null || preferredSetting === void 0 ? void 0 : preferredSetting.message]); - } else { - utils.reportSettings('Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.'); - return; - } - } else if (Object.entries(structuredTags).some(([tag, { - type: typs - }]) => { - types = typs; - return tag === tagName && Array.isArray(types) && !types.includes(nodeName); - })) { - invalidTypes.push([nodeName, types]); - } else if (!noDefaults && type === 'JsdocTypeName') { - for (const strictNativeType of strictNativeTypes) { - if ( // Todo: Avoid typescript condition if moving to default typescript - strictNativeType === 'object' && mode === 'typescript' && ( // This is not set to remap with exact type match (e.g., - // `object: 'Object'`), so can ignore (including if circular) - !(preferredTypes !== null && preferredTypes !== void 0 && preferredTypes[nodeName]) || // Although present on `preferredTypes` for remapping, this is a - // parent object without a parent match (and not - // `unifyParentAndChildTypeChecks`) and we don't want - // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555 - parentNode !== null && parentNode !== void 0 && parentNode.elements.length && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.left.type) === 'JsdocTypeName' && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.left.value) === 'Object')) { - continue; - } - - if (strictNativeType !== nodeName && strictNativeType.toLowerCase() === nodeName.toLowerCase() && ( // Don't report if user has own map for a strict native type - !preferredTypes || (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[strictNativeType]) === undefined)) { - preferred = strictNativeType; - invalidTypes.push([nodeName, preferred]); - break; - } - } - } // For fixer - - - if (preferred) { - adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode); - } + getInvalidTypes(type, value, tagName, property, node, parentNode, invalidTypes); }); if (invalidTypes.length) { const fixedType = (0, _jsdoccomment.stringify)(typeAst); + /** + * @param {any} fixer The ESLint fixer + * @returns {string} + */ const fix = fixer => { return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace(`{${jsdocTag.type}}`, `{${fixedType}}`)); diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkValues.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkValues.js index b323550c9d9..34dcd8c6cca 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkValues.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/checkValues.js @@ -69,20 +69,33 @@ var _default = (0, _iterateJsdoc.default)(({ }); utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => { const licenseRegex = utils.getRegexFromString(licensePattern, 'g'); - const match = utils.getTagDescription(jsdocParameter).match(licenseRegex); - const license = match && match[1] || match[0]; + const matches = utils.getTagDescription(jsdocParameter).matchAll(licenseRegex); + let positiveMatch = false; - if (!license.trim()) { - report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter); - } else if (allowedLicenses) { - if (allowedLicenses !== true && !allowedLicenses.includes(license)) { - report(`Invalid JSDoc @${targetTagName}: "${license}"; expected one of ${allowedLicenses.join(', ')}.`, null, jsdocParameter); + for (const match of matches) { + const license = match[1] || match[0]; + + if (license) { + positiveMatch = true; } - } else { - try { - (0, _spdxExpressionParse.default)(license); - } catch { - report(`Invalid JSDoc @${targetTagName}: "${license}"; expected SPDX expression: https://spdx.org/licenses/.`, null, jsdocParameter); + + if (!license.trim()) { + // Avoid reporting again as empty match + if (positiveMatch) { + return; + } + + report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter); + } else if (allowedLicenses) { + if (allowedLicenses !== true && !allowedLicenses.includes(license)) { + report(`Invalid JSDoc @${targetTagName}: "${license}"; expected one of ${allowedLicenses.join(', ')}.`, null, jsdocParameter); + } + } else { + try { + (0, _spdxExpressionParse.default)(license); + } catch { + report(`Invalid JSDoc @${targetTagName}: "${license}"; expected SPDX expression: https://spdx.org/licenses/.`, null, jsdocParameter); + } } } }); diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/matchDescription.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/matchDescription.js index 0659b3486ac..d7e934efcf7 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/matchDescription.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/matchDescription.js @@ -11,7 +11,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de // If supporting Node >= 10, we could loosen the default to this for the // initial letter: \\p{Upper} -const matchDescriptionDefault = '^[A-Z`\\d_][\\s\\S]*[.?!`]\\s*$'; +const matchDescriptionDefault = '^\n?([A-Z`\\d_][\\s\\S]*[.?!`]\\s*)?$'; const stringOrDefault = (value, userDefault) => { return typeof value === 'string' ? value : userDefault || matchDescriptionDefault; diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noMissingSyntax.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noMissingSyntax.js index e4f23ff3a0e..8e135899dc0 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noMissingSyntax.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noMissingSyntax.js @@ -35,10 +35,9 @@ var _default = (0, _iterateJsdoc.default)(({ info: { comment }, + sourceCode, state }) => { - var _foundContext$context; - if (!context.options[0]) { // Handle error later return; @@ -48,9 +47,13 @@ var _default = (0, _iterateJsdoc.default)(({ contexts } = context.options[0]; const foundContext = contexts.find(cntxt => { - return typeof cntxt === 'string' ? _esquery.default.matches(node, _esquery.default.parse(cntxt)) : (!cntxt.context || cntxt.context === 'any' || _esquery.default.matches(node, _esquery.default.parse(cntxt.context))) && comment === cntxt.comment; + return typeof cntxt === 'string' ? _esquery.default.matches(node, _esquery.default.parse(cntxt), null, { + visitorKeys: sourceCode.visitorKeys + }) : (!cntxt.context || cntxt.context === 'any' || _esquery.default.matches(node, _esquery.default.parse(cntxt.context), null, { + visitorKeys: sourceCode.visitorKeys + })) && comment === cntxt.comment; }); - const contextStr = typeof foundContext === 'object' ? (_foundContext$context = foundContext.context) !== null && _foundContext$context !== void 0 ? _foundContext$context : 'any' : foundContext; + const contextStr = typeof foundContext === 'object' ? foundContext.context ?? 'any' : foundContext; setDefaults(state); incrementSelector(state, contextStr, comment); }, { @@ -79,20 +82,14 @@ var _default = (0, _iterateJsdoc.default)(({ } = context.options[0]; // Report when MISSING contexts.some(cntxt => { - var _cntxt$context, _cntxt$comment, _cntxt$minimum; - - const contextStr = typeof cntxt === 'object' ? (_cntxt$context = cntxt.context) !== null && _cntxt$context !== void 0 ? _cntxt$context : 'any' : cntxt; - const comment = (_cntxt$comment = cntxt === null || cntxt === void 0 ? void 0 : cntxt.comment) !== null && _cntxt$comment !== void 0 ? _cntxt$comment : ''; + const contextStr = typeof cntxt === 'object' ? cntxt.context ?? 'any' : cntxt; + const comment = (cntxt === null || cntxt === void 0 ? void 0 : cntxt.comment) ?? ''; const contextKey = contextStr === 'any' ? undefined : contextStr; - if ((!state.selectorMap[contextKey] || !state.selectorMap[contextKey][comment] || state.selectorMap[contextKey][comment] < ((_cntxt$minimum = cntxt === null || cntxt === void 0 ? void 0 : cntxt.minimum) !== null && _cntxt$minimum !== void 0 ? _cntxt$minimum : 1)) && (contextStr !== 'any' || Object.values(state.selectorMap).every(cmmnt => { - var _cntxt$minimum2; - - return !cmmnt[comment] || cmmnt[comment] < ((_cntxt$minimum2 = cntxt === null || cntxt === void 0 ? void 0 : cntxt.minimum) !== null && _cntxt$minimum2 !== void 0 ? _cntxt$minimum2 : 1); + if ((!state.selectorMap[contextKey] || !state.selectorMap[contextKey][comment] || state.selectorMap[contextKey][comment] < ((cntxt === null || cntxt === void 0 ? void 0 : cntxt.minimum) ?? 1)) && (contextStr !== 'any' || Object.values(state.selectorMap).every(cmmnt => { + return !cmmnt[comment] || cmmnt[comment] < ((cntxt === null || cntxt === void 0 ? void 0 : cntxt.minimum) ?? 1); }))) { - var _cntxt$message; - - const message = (_cntxt$message = cntxt === null || cntxt === void 0 ? void 0 : cntxt.message) !== null && _cntxt$message !== void 0 ? _cntxt$message : 'Syntax is required: {{context}}' + (comment ? ' with {{comment}}' : ''); + const message = (cntxt === null || cntxt === void 0 ? void 0 : cntxt.message) ?? 'Syntax is required: {{context}}' + (comment ? ' with {{comment}}' : ''); context.report({ data: { comment, diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noRestrictedSyntax.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noRestrictedSyntax.js index 05b604f9d5d..6234c3d7d86 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noRestrictedSyntax.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noRestrictedSyntax.js @@ -17,10 +17,9 @@ var _default = (0, _iterateJsdoc.default)(({ info: { comment }, + sourceCode, report }) => { - var _foundContext$context, _foundContext$message; - if (!context.options.length) { report('Rule `no-restricted-syntax` is missing a `context` option.'); return; @@ -30,7 +29,11 @@ var _default = (0, _iterateJsdoc.default)(({ contexts } = context.options[0]; const foundContext = contexts.find(cntxt => { - return typeof cntxt === 'string' ? _esquery.default.matches(node, _esquery.default.parse(cntxt)) : (!cntxt.context || cntxt.context === 'any' || _esquery.default.matches(node, _esquery.default.parse(cntxt.context))) && comment === cntxt.comment; + return typeof cntxt === 'string' ? _esquery.default.matches(node, _esquery.default.parse(cntxt), null, { + visitorKeys: sourceCode.visitorKeys + }) : (!cntxt.context || cntxt.context === 'any' || _esquery.default.matches(node, _esquery.default.parse(cntxt.context), null, { + visitorKeys: sourceCode.visitorKeys + })) && comment === cntxt.comment; }); // We are not on the *particular* matching context/comment, so don't assume // we need reporting @@ -38,9 +41,10 @@ var _default = (0, _iterateJsdoc.default)(({ return; } - const contextStr = typeof foundContext === 'object' ? (_foundContext$context = foundContext.context) !== null && _foundContext$context !== void 0 ? _foundContext$context : 'any' : foundContext; - const message = (_foundContext$message = foundContext === null || foundContext === void 0 ? void 0 : foundContext.message) !== null && _foundContext$message !== void 0 ? _foundContext$message : 'Syntax is restricted: {{context}}.'; + const contextStr = typeof foundContext === 'object' ? foundContext.context ?? 'any' : foundContext; + const message = (foundContext === null || foundContext === void 0 ? void 0 : foundContext.message) ?? 'Syntax is restricted: {{context}}' + (comment ? ' with {{comment}}' : ''); report(message, null, null, { + comment, context: contextStr }); }, { diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noUndefinedTypes.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noUndefinedTypes.js index 4395ab683c7..653a7e49096 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noUndefinedTypes.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/noUndefinedTypes.js @@ -17,7 +17,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -const extraTypes = ['null', 'undefined', 'void', 'string', 'boolean', 'object', 'function', 'symbol', 'number', 'bigint', 'NaN', 'Infinity', 'any', '*', 'never', 'unknown', 'const', 'this', 'true', 'false', 'Array', 'Object', 'RegExp', 'Date', 'Function']; +const extraTypes = ['null', 'undefined', 'void', 'string', 'boolean', 'object', 'function', 'symbol', 'number', 'bigint', 'NaN', 'Infinity', 'any', '*', 'never', 'unknown', 'const', 'this', 'true', 'false', 'Array', 'Object', 'RegExp', 'Date', 'Function']; // https://www.typescriptlang.org/docs/handbook/utility-types.html + +const typescriptGlobals = ['Partial', 'Required', 'Readonly', 'Record', 'Pick', 'Omit', 'Exclude', 'Extract', 'NonNullable', 'Parameters', 'ConstructorParameters', 'ReturnType', 'InstanceType', 'ThisParameterType', 'OmitThisParameter', 'ThisType', 'Uppercase', 'Lowercase', 'Capitalize', 'Uncapitalize']; const stripPseudoTypes = str => { return str && str.replace(/(?:\.|<>|\.<>|\[\])$/u, ''); @@ -31,7 +33,7 @@ var _default = (0, _iterateJsdoc.default)(({ sourceCode, utils }) => { - var _globalScope$childSco; + var _globalScope$childSco, _globalScope$childSco2; const { scopeManager @@ -71,7 +73,7 @@ var _default = (0, _iterateJsdoc.default)(({ } const typedefDeclarations = context.getAllComments().filter(comment => { - return comment.value.startsWith('*'); + return /^\*\s/u.test(comment.value); }).map(commentNode => { return (0, _iterateJsdoc.parseComment)(commentNode, ''); }).flatMap(doc => { @@ -116,7 +118,7 @@ var _default = (0, _iterateJsdoc.default)(({ }); // In modules, including Node, there is a global scope at top with the // Program scope inside - const cjsOrESMScope = ((_globalScope$childSco = globalScope.childScopes[0]) === null || _globalScope$childSco === void 0 ? void 0 : _globalScope$childSco.block.type) === 'Program'; + const cjsOrESMScope = ((_globalScope$childSco = globalScope.childScopes[0]) === null || _globalScope$childSco === void 0 ? void 0 : (_globalScope$childSco2 = _globalScope$childSco.block) === null || _globalScope$childSco2 === void 0 ? void 0 : _globalScope$childSco2.type) === 'Program'; const allDefinedTypes = new Set(globalScope.variables.map(({ name }) => { @@ -130,7 +132,7 @@ var _default = (0, _iterateJsdoc.default)(({ name }) => { return name; - }) : []).concat(extraTypes).concat(typedefDeclarations).concat(definedTypes).concat(definedPreferredTypes).concat(settings.mode === 'jsdoc' ? [] : closureGenericTypes)); + }) : []).concat(extraTypes).concat(typedefDeclarations).concat(definedTypes).concat(definedPreferredTypes).concat(settings.mode === 'jsdoc' ? [] : [...(settings.mode === 'typescript' ? typescriptGlobals : []), ...closureGenericTypes])); const jsdocTagsWithPossibleType = utils.filterTags(({ tag }) => { diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireDescriptionCompleteSentence.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireDescriptionCompleteSentence.js index 5f72084c9b8..543db351f6a 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireDescriptionCompleteSentence.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireDescriptionCompleteSentence.js @@ -7,8 +7,6 @@ exports.default = void 0; var _escapeStringRegexp = _interopRequireDefault(require("escape-string-regexp")); -var _mainUmd = require("regextras/dist/main-umd"); - var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -26,11 +24,8 @@ const extractSentences = (text, abbreviationsRegex) => { const txt = text // Remove all {} tags. .replace(/\{[\s\S]*?\}\s*/gu, '') // Remove custom abbreviations .replace(abbreviationsRegex, ''); - const sentenceEndGrouping = /([.?!])(?:\s+|$)/u; // eslint-disable-next-line unicorn/no-array-method-this-argument - - const puncts = new _mainUmd.RegExtras(sentenceEndGrouping).map(txt, punct => { - return punct; - }); + const sentenceEndGrouping = /([.?!])(?:\s+|$)/ug; + const puncts = txt.matchAll(sentenceEndGrouping); return txt.split(/[.?!](?:\s+|$)/u) // Re-add the dot. .map((sentence, idx) => { return /^\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`; @@ -63,7 +58,7 @@ const capitalize = str => { }; const validateDescription = (description, reportOrig, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd) => { - if (!description) { + if (!description || /^\n+$/u.test(description)) { return false; } diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireExample.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireExample.js index 29ad49b2b87..859d7106aac 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireExample.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireExample.js @@ -20,6 +20,7 @@ var _default = (0, _iterateJsdoc.default)(({ } const { + enableFixer = true, exemptNoArguments = false } = context.options[0] || {}; const targetTagName = 'example'; @@ -35,7 +36,9 @@ var _default = (0, _iterateJsdoc.default)(({ } utils.reportJSDoc(`Missing JSDoc @${targetTagName} declaration.`, null, () => { - utils.addTag(targetTagName); + if (enableFixer) { + utils.addTag(targetTagName); + } }); return; } @@ -89,6 +92,10 @@ var _default = (0, _iterateJsdoc.default)(({ }, type: 'array' }, + enableFixer: { + default: true, + type: 'boolean' + }, exemptedBy: { items: { type: 'string' diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireJsdoc.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireJsdoc.js index b8eafd99650..1b4fb15fbe2 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireJsdoc.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireJsdoc.js @@ -52,6 +52,9 @@ const OPTIONS_SCHEMA = { }, inlineCommentBlock: { type: 'boolean' + }, + minLineCount: { + type: 'integer' } }, type: 'object' @@ -75,6 +78,9 @@ const OPTIONS_SCHEMA = { default: '', type: 'string' }, + minLineCount: { + type: 'integer' + }, publicOnly: { oneOf: [{ default: false, @@ -150,7 +156,8 @@ const getOptions = context => { exemptEmptyConstructors = true, exemptEmptyFunctions = false, enableFixer = true, - fixerMessage = '' + fixerMessage = '', + minLineCount = undefined } = context.options[0] || {}; return { contexts, @@ -158,6 +165,7 @@ const getOptions = context => { exemptEmptyConstructors, exemptEmptyFunctions, fixerMessage, + minLineCount, publicOnly: (baseObj => { if (!publicOnly) { return false; @@ -201,10 +209,40 @@ var _default = { exemptEmptyFunctions, exemptEmptyConstructors, enableFixer, - fixerMessage + fixerMessage, + minLineCount } = getOptions(context); const checkJsDoc = (info, handler, node) => { + if ( // Optimize + minLineCount !== undefined || contexts.some(({ + minLineCount: count + }) => { + return count !== undefined; + })) { + const underMinLine = count => { + var _sourceCode$getText$m; + + return count !== undefined && count > (((_sourceCode$getText$m = sourceCode.getText(node).match(/\n/gu)) === null || _sourceCode$getText$m === void 0 ? void 0 : _sourceCode$getText$m.length) ?? 0) + 1; + }; + + if (underMinLine(minLineCount)) { + return; + } + + const { + minLineCount: contextMinLineCount + } = contexts.find(({ + context: ctxt + }) => { + return ctxt === (info.selector || node.type); + }) || {}; + + if (underMinLine(contextMinLineCount)) { + return; + } + } + const jsDocNode = (0, _jsdoccomment.getJSDocComment)(sourceCode, node, settings); if (jsDocNode) { @@ -257,8 +295,14 @@ var _default = { }; const report = () => { + const { + start + } = node.loc; const loc = { - end: node.loc.start + 1, + end: { + column: 0, + line: start.line + 1 + }, start: node.loc.start }; context.report({ @@ -270,13 +314,11 @@ var _default = { }; if (publicOnly) { - var _publicOnly$ancestors, _publicOnly$esm, _publicOnly$cjs, _publicOnly$window; - const opt = { - ancestorsOnly: Boolean((_publicOnly$ancestors = publicOnly === null || publicOnly === void 0 ? void 0 : publicOnly.ancestorsOnly) !== null && _publicOnly$ancestors !== void 0 ? _publicOnly$ancestors : false), - esm: Boolean((_publicOnly$esm = publicOnly === null || publicOnly === void 0 ? void 0 : publicOnly.esm) !== null && _publicOnly$esm !== void 0 ? _publicOnly$esm : true), - initModuleExports: Boolean((_publicOnly$cjs = publicOnly === null || publicOnly === void 0 ? void 0 : publicOnly.cjs) !== null && _publicOnly$cjs !== void 0 ? _publicOnly$cjs : true), - initWindow: Boolean((_publicOnly$window = publicOnly === null || publicOnly === void 0 ? void 0 : publicOnly.window) !== null && _publicOnly$window !== void 0 ? _publicOnly$window : false) + ancestorsOnly: Boolean((publicOnly === null || publicOnly === void 0 ? void 0 : publicOnly.ancestorsOnly) ?? false), + esm: Boolean((publicOnly === null || publicOnly === void 0 ? void 0 : publicOnly.esm) ?? true), + initModuleExports: Boolean((publicOnly === null || publicOnly === void 0 ? void 0 : publicOnly.cjs) ?? true), + initWindow: Boolean((publicOnly === null || publicOnly === void 0 ? void 0 : publicOnly.window) ?? false) }; const exported = _exportParser.default.isUncommentedExport(node, sourceCode, opt, settings); @@ -340,13 +382,6 @@ var _default = { }, FunctionExpression(node) { - if (hasOption('MethodDefinition') && node.parent.type === 'MethodDefinition') { - checkJsDoc({ - isFunctionContext: true - }, null, node); - return; - } - if (!hasOption('FunctionExpression')) { return; } @@ -356,6 +391,17 @@ var _default = { isFunctionContext: true }, null, node); } + }, + + MethodDefinition(node) { + if (!hasOption('MethodDefinition')) { + return; + } + + checkJsDoc({ + isFunctionContext: true, + selector: 'MethodDefinition' + }, null, node.value); } }; diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireParam.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireParam.js index c95b8a40ac8..43bfccc7c75 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireParam.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/requireParam.js @@ -313,7 +313,7 @@ var _default = (0, _iterateJsdoc.default)(({ postType: type ? ' ' : '', start: jsdoc.source[sourceIndex].tokens.start, tag: `@${preferredTagName}`, - type: type !== null && type !== void 0 ? type : '' + type: type ?? '' } }; jsdoc.tags.splice(tagIndex, spliceCount, { @@ -321,7 +321,7 @@ var _default = (0, _iterateJsdoc.default)(({ newAdd: true, source: [tokens], tag: preferredTagName, - type: type !== null && type !== void 0 ? type : '' + type: type ?? '' }); const firstNumber = jsdoc.source[0].number; jsdoc.source.splice(sourceIndex, spliceCount, tokens); diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/tagNames.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/tagNames.js index a02e0b73d10..3df17caf976 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/tagNames.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/tagNames.js @@ -84,6 +84,8 @@ const jsdocTags = { ...jsdocTagsUndocumented, }; exports.jsdocTags = jsdocTags; const typeScriptTags = { ...jsdocTags, + // https://www.typescriptlang.org/tsconfig/#stripInternal + internal: [], // `@template` is also in TypeScript per: // https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#supported-jsdoc template: [] @@ -108,6 +110,7 @@ const undocumentedClosureTags = { const { /* eslint-disable no-unused-vars */ inheritdoc, + internal, // Will be inverted to prefer `return` returns, diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/utils/hasReturnValue.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/utils/hasReturnValue.js new file mode 100644 index 00000000000..5aac600f646 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/utils/hasReturnValue.js @@ -0,0 +1,364 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.hasValueOrExecutorHasNonEmptyResolveValue = exports.hasReturnValue = void 0; + +/* eslint-disable jsdoc/no-undefined-types */ + +/** + * Checks if a node is a promise but has no resolve value or an empty value. + * An `undefined` resolve does not count. + * + * @param {object} node + * @returns {boolean} + */ +const isNewPromiseExpression = node => { + return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' && node.callee.name === 'Promise'; +}; + +const isVoidPromise = node => { + var _node$typeParameters, _node$typeParameters$, _node$typeParameters$2; + + return (node === null || node === void 0 ? void 0 : (_node$typeParameters = node.typeParameters) === null || _node$typeParameters === void 0 ? void 0 : (_node$typeParameters$ = _node$typeParameters.params) === null || _node$typeParameters$ === void 0 ? void 0 : (_node$typeParameters$2 = _node$typeParameters$[0]) === null || _node$typeParameters$2 === void 0 ? void 0 : _node$typeParameters$2.type) === 'TSVoidKeyword'; +}; +/** + * @callback PromiseFilter + * @param {object} node + * @returns {boolean} + */ + +/** + * Checks if a node has a return statement. Void return does not count. + * + * @param {object} node + * @param {PromiseFilter} promFilter + * @returns {boolean|Node} + */ +// eslint-disable-next-line complexity + + +const hasReturnValue = (node, promFilter) => { + var _node$returnType, _node$returnType$type; + + if (!node) { + return false; + } + + switch (node.type) { + case 'TSFunctionType': + case 'TSMethodSignature': + return !['TSVoidKeyword', 'TSUndefinedKeyword'].includes(node === null || node === void 0 ? void 0 : (_node$returnType = node.returnType) === null || _node$returnType === void 0 ? void 0 : (_node$returnType$type = _node$returnType.typeAnnotation) === null || _node$returnType$type === void 0 ? void 0 : _node$returnType$type.type); + + case 'MethodDefinition': + return hasReturnValue(node.value, promFilter); + + case 'FunctionExpression': + case 'FunctionDeclaration': + case 'ArrowFunctionExpression': + { + return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || hasReturnValue(node.body, promFilter); + } + + case 'BlockStatement': + { + return node.body.some(bodyNode => { + return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter); + }); + } + + case 'LabeledStatement': + case 'WhileStatement': + case 'DoWhileStatement': + case 'ForStatement': + case 'ForInStatement': + case 'ForOfStatement': + case 'WithStatement': + { + return hasReturnValue(node.body, promFilter); + } + + case 'IfStatement': + { + return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter); + } + + case 'TryStatement': + { + return hasReturnValue(node.block, promFilter) || hasReturnValue(node.handler && node.handler.body, promFilter) || hasReturnValue(node.finalizer, promFilter); + } + + case 'SwitchStatement': + { + return node.cases.some(someCase => { + return someCase.consequent.some(nde => { + return hasReturnValue(nde, promFilter); + }); + }); + } + + case 'ReturnStatement': + { + // void return does not count. + if (node.argument === null) { + return false; + } + + if (promFilter && isNewPromiseExpression(node.argument)) { + // Let caller decide how to filter, but this is, at the least, + // a return of sorts and truthy + return promFilter(node.argument); + } + + return true; + } + + default: + { + return false; + } + } +}; +/** + * Avoids further checking child nodes if a nested function shadows the + * resolver, but otherwise, if name is used (by call or passed in as an + * argument to another function), will be considered as non-empty. + * + * This could check for redeclaration of the resolver, but as such is + * unlikely, we avoid the performance cost of checking everywhere for + * (re)declarations or assignments. + * + * @param {AST} node + * @param {string} resolverName + * @returns {boolean} + */ +// eslint-disable-next-line complexity + + +exports.hasReturnValue = hasReturnValue; + +const hasNonEmptyResolverCall = (node, resolverName) => { + if (!node) { + return false; + } // Arrow function without block + + + switch (node.type) { + // istanbul ignore next -- In Babel? + case 'OptionalCallExpression': + case 'CallExpression': + return node.callee.name === resolverName && ( // Implicit or explicit undefined + node.arguments.length > 1 || node.arguments[0] !== undefined) || node.arguments.some(nde => { + // Being passed in to another function (which might invoke it) + return nde.type === 'Identifier' && nde.name === resolverName || // Handle nested items + hasNonEmptyResolverCall(nde, resolverName); + }); + + case 'ChainExpression': + case 'Decorator': + case 'ExpressionStatement': + return hasNonEmptyResolverCall(node.expression, resolverName); + + case 'ClassBody': + case 'BlockStatement': + return node.body.some(bodyNode => { + return hasNonEmptyResolverCall(bodyNode, resolverName); + }); + + case 'FunctionExpression': + case 'FunctionDeclaration': + case 'ArrowFunctionExpression': + { + var _node$params$; + + // Shadowing + if (((_node$params$ = node.params[0]) === null || _node$params$ === void 0 ? void 0 : _node$params$.name) === resolverName) { + return false; + } + + return hasNonEmptyResolverCall(node.body, resolverName); + } + + case 'LabeledStatement': + case 'WhileStatement': + case 'DoWhileStatement': + case 'ForStatement': + case 'ForInStatement': + case 'ForOfStatement': + case 'WithStatement': + { + return hasNonEmptyResolverCall(node.body, resolverName); + } + + case 'ConditionalExpression': + case 'IfStatement': + { + return hasNonEmptyResolverCall(node.test, resolverName) || hasNonEmptyResolverCall(node.consequent, resolverName) || hasNonEmptyResolverCall(node.alternate, resolverName); + } + + case 'TryStatement': + { + return hasNonEmptyResolverCall(node.block, resolverName) || hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) || hasNonEmptyResolverCall(node.finalizer, resolverName); + } + + case 'SwitchStatement': + { + return node.cases.some(someCase => { + return someCase.consequent.some(nde => { + return hasNonEmptyResolverCall(nde, resolverName); + }); + }); + } + + case 'ArrayPattern': + case 'ArrayExpression': + return node.elements.some(element => { + return hasNonEmptyResolverCall(element, resolverName); + }); + + case 'AssignmentPattern': + return hasNonEmptyResolverCall(node.right, resolverName); + + case 'AssignmentExpression': + case 'BinaryExpression': + case 'LogicalExpression': + { + return hasNonEmptyResolverCall(node.left, resolverName) || hasNonEmptyResolverCall(node.right, resolverName); + } + // Comma + + case 'SequenceExpression': + case 'TemplateLiteral': + return node.expressions.some(subExpression => { + return hasNonEmptyResolverCall(subExpression, resolverName); + }); + + case 'ObjectPattern': + case 'ObjectExpression': + return node.properties.some(property => { + return hasNonEmptyResolverCall(property, resolverName); + }); + // istanbul ignore next -- In Babel? + + case 'ClassMethod': + case 'MethodDefinition': + return node.decorators && node.decorators.some(decorator => { + return hasNonEmptyResolverCall(decorator, resolverName); + }) || node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName); + // istanbul ignore next -- In Babel? + + case 'ObjectProperty': + /* eslint-disable no-fallthrough */ + // istanbul ignore next -- In Babel? + + case 'PropertyDefinition': // istanbul ignore next -- In Babel? + + case 'ClassProperty': + /* eslint-enable no-fallthrough */ + + case 'Property': + return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName); + // istanbul ignore next -- In Babel? + + case 'ObjectMethod': + // istanbul ignore next -- In Babel? + return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || node.arguments.some(nde => { + return hasNonEmptyResolverCall(nde, resolverName); + }); + + case 'ClassExpression': + case 'ClassDeclaration': + return hasNonEmptyResolverCall(node.body, resolverName); + + case 'AwaitExpression': + case 'SpreadElement': + case 'UnaryExpression': + case 'YieldExpression': + return hasNonEmptyResolverCall(node.argument, resolverName); + + case 'VariableDeclaration': + { + return node.declarations.some(nde => { + return hasNonEmptyResolverCall(nde, resolverName); + }); + } + + case 'VariableDeclarator': + { + return hasNonEmptyResolverCall(node.id, resolverName) || hasNonEmptyResolverCall(node.init, resolverName); + } + + case 'TaggedTemplateExpression': + return hasNonEmptyResolverCall(node.quasi, resolverName); + // ?. + // istanbul ignore next -- In Babel? + + case 'OptionalMemberExpression': + case 'MemberExpression': + return hasNonEmptyResolverCall(node.object, resolverName) || hasNonEmptyResolverCall(node.property, resolverName); + // istanbul ignore next -- In Babel? + + case 'Import': + case 'ImportExpression': + return hasNonEmptyResolverCall(node.source, resolverName); + + case 'ReturnStatement': + { + if (node.argument === null) { + return false; + } + + return hasNonEmptyResolverCall(node.argument, resolverName); + } + + /* + // Shouldn't need to parse literals/literal components, etc. + case 'Identifier': + case 'TemplateElement': + case 'Super': + // Exports not relevant in this context + */ + + default: + return false; + } +}; +/** + * Checks if a Promise executor has no resolve value or an empty value. + * An `undefined` resolve does not count. + * + * @param {object} node + * @param {boolean} anyPromiseAsReturn + * @returns {boolean} + */ + + +const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => { + return hasReturnValue(node, prom => { + if (anyPromiseAsReturn) { + return true; + } + + if (isVoidPromise(prom)) { + return false; + } + + const [{ + params, + body + } = {}] = prom.arguments; + + if (!(params !== null && params !== void 0 && params.length)) { + return false; + } + + const [{ + name: resolverName + }] = params; + return hasNonEmptyResolverCall(body, resolverName); + }); +}; + +exports.hasValueOrExecutorHasNonEmptyResolveValue = hasValueOrExecutorHasNonEmptyResolveValue; +//# sourceMappingURL=hasReturnValue.js.map \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/package.json b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/package.json index 0c7c33d457a..465e080a5b7 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/package.json +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/package.json @@ -5,49 +5,50 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", + "@es-joy/jsdoccomment": "~0.31.0", + "comment-parser": "1.3.1", + "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "spdx-expression-parse": "^3.0.1" }, "description": "JSDoc linting rules for ESLint.", "devDependencies": { - "@babel/cli": "^7.17.6", - "@babel/core": "^7.17.5", + "@babel/cli": "^7.17.10", + "@babel/core": "^7.18.0", "@babel/eslint-parser": "^7.17.0", - "@babel/node": "^7.16.8", + "@babel/node": "^7.17.10", "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-transform-flow-strip-types": "^7.16.7", - "@babel/preset-env": "^7.16.11", - "@babel/register": "^7.17.0", + "@babel/plugin-transform-flow-strip-types": "^7.17.12", + "@babel/preset-env": "^7.18.0", + "@babel/register": "^7.17.7", + "@es-joy/jsdoc-eslint-parser": "^0.17.0", "@hkdobrev/run-if-changed": "^0.3.1", - "@typescript-eslint/parser": "^5.14.0", + "@typescript-eslint/parser": "^5.26.0", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^6.1.1", "camelcase": "^6.3.0", "chai": "^4.3.6", "cross-env": "^7.0.3", "decamelize": "^5.0.1", - "eslint": "^8.10.0", - "eslint-config-canonical": "^33.0.1", + "eslint": "^8.16.0", + "eslint-config-canonical": "~33.0.1", "gitdown": "^3.1.5", - "glob": "^7.2.0", - "husky": "^7.0.4", - "lint-staged": "^12.3.5", + "glob": "^8.0.3", + "husky": "^8.0.1", + "jsdoc-type-pratt-parser": "^3.1.0", + "lint-staged": "^12.4.1", "lodash.defaultsdeep": "^4.6.1", - "mocha": "^9.2.1", + "mocha": "^10.0.0", "nyc": "^15.1.0", "open-editor": "^3.0.0", "rimraf": "^3.0.2", "semantic-release": "^19.0.2", - "typescript": "^4.6.2" + "typescript": "^4.6.4" }, "engines": { - "node": "^12 || ^14 || ^16 || ^17" + "node": "^14 || ^16 || ^17 || ^18" }, "keywords": [ "eslint", @@ -116,5 +117,5 @@ "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov", "test-index": "npm run test-no-cov -- test/rules/index.js" }, - "version": "38.0.2" + "version": "39.3.6" } diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-markdown/package.json b/tools/node_modules/eslint/node_modules/eslint-plugin-markdown/package.json index d1a50208729..b22b87c328d 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-markdown/package.json +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-markdown/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-markdown", - "version": "2.2.1", + "version": "3.0.0", "description": "An ESLint plugin to lint JavaScript in Markdown code fences.", "license": "MIT", "author": { @@ -38,10 +38,10 @@ ], "devDependencies": { "chai": "^4.2.0", - "eslint": "^6.8.0", - "eslint-config-eslint": "^6.0.0", - "eslint-plugin-jsdoc": "^15.9.5", - "eslint-plugin-node": "^9.0.0", + "eslint": "^7.32.0", + "eslint-config-eslint": "^7.0.0", + "eslint-plugin-jsdoc": "^37.0.3", + "eslint-plugin-node": "^11.1.0", "eslint-release": "^3.1.2", "mocha": "^6.2.2", "nyc": "^14.1.1" @@ -50,9 +50,9 @@ "mdast-util-from-markdown": "^0.8.5" }, "peerDependencies": { - "eslint": ">=6.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "engines": { - "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } } diff --git a/tools/node_modules/eslint/node_modules/espree/dist/espree.cjs b/tools/node_modules/eslint/node_modules/espree/dist/espree.cjs index 7495def051c..62bf7a3cd5c 100644 --- a/tools/node_modules/eslint/node_modules/espree/dist/espree.cjs +++ b/tools/node_modules/eslint/node_modules/espree/dist/espree.cjs @@ -302,14 +302,15 @@ TokenTranslator.prototype = { const SUPPORTED_VERSIONS = [ 3, 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 6, // 2015 + 7, // 2016 + 8, // 2017 + 9, // 2018 + 10, // 2019 + 11, // 2020 + 12, // 2021 + 13, // 2022 + 14 // 2023 ]; /** @@ -427,12 +428,23 @@ const ESPRIMA_FINISH_NODE = Symbol("espree's esprimaFinishNode"); * @param {int} end The index at which the comment ends. * @param {Location} startLoc The location at which the comment starts. * @param {Location} endLoc The location at which the comment ends. + * @param {string} code The source code being parsed. * @returns {Object} The comment object. * @private */ -function convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc) { +function convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code) { + let type; + + if (block) { + type = "Block"; + } else if (code.slice(start, start + 2) === "#!") { + type = "Hashbang"; + } else { + type = "Line"; + } + const comment = { - type: block ? "Block" : "Line", + type, value: text }; @@ -477,6 +489,25 @@ var espree = () => Parser => { ? new TokenTranslator(tokTypes, code) : null; + /* + * Data that is unique to Espree and is not represented internally + * in Acorn. + * + * For ES2023 hashbangs, Espree will call `onComment()` during the + * constructor, so we must define state before having access to + * `this`. + */ + const state = { + originalSourceType: originalSourceType || options.sourceType, + tokens: tokenTranslator ? [] : null, + comments: options.comment === true ? [] : null, + impliedStrict: ecmaFeatures.impliedStrict === true && options.ecmaVersion >= 5, + ecmaVersion: options.ecmaVersion, + jsxAttrValueToken: false, + lastToken: null, + templateElements: [] + }; + // Initialize acorn parser. super({ @@ -495,38 +526,28 @@ var espree = () => Parser => { if (tokenTranslator) { // Use `tokens`, `ecmaVersion`, and `jsxAttrValueToken` in the state. - tokenTranslator.onToken(token, this[STATE]); + tokenTranslator.onToken(token, state); } if (token.type !== tokTypes.eof) { - this[STATE].lastToken = token; + state.lastToken = token; } }, // Collect comments onComment: (block, text, start, end, startLoc, endLoc) => { - if (this[STATE].comments) { - const comment = convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc); + if (state.comments) { + const comment = convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code); - this[STATE].comments.push(comment); + state.comments.push(comment); } } }, code); /* - * Data that is unique to Espree and is not represented internally in - * Acorn. We put all of this data into a symbol property as a way to - * avoid potential naming conflicts with future versions of Acorn. + * We put all of this data into a symbol property as a way to avoid + * potential naming conflicts with future versions of Acorn. */ - this[STATE] = { - originalSourceType: originalSourceType || options.sourceType, - tokens: tokenTranslator ? [] : null, - comments: options.comment === true ? [] : null, - impliedStrict: ecmaFeatures.impliedStrict === true && this.options.ecmaVersion >= 5, - ecmaVersion: this.options.ecmaVersion, - jsxAttrValueToken: false, - lastToken: null, - templateElements: [] - }; + this[STATE] = state; } tokenize() { @@ -739,7 +760,7 @@ var espree = () => Parser => { }; }; -const version$1 = "9.3.1"; +const version$1 = "9.4.0"; /** * @fileoverview Main Espree file that converts Acorn into Esprima output. diff --git a/tools/node_modules/eslint/node_modules/espree/lib/espree.js b/tools/node_modules/eslint/node_modules/espree/lib/espree.js index 786d89fa2c3..262dd276a28 100644 --- a/tools/node_modules/eslint/node_modules/espree/lib/espree.js +++ b/tools/node_modules/eslint/node_modules/espree/lib/espree.js @@ -15,12 +15,23 @@ const ESPRIMA_FINISH_NODE = Symbol("espree's esprimaFinishNode"); * @param {int} end The index at which the comment ends. * @param {Location} startLoc The location at which the comment starts. * @param {Location} endLoc The location at which the comment ends. + * @param {string} code The source code being parsed. * @returns {Object} The comment object. * @private */ -function convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc) { +function convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code) { + let type; + + if (block) { + type = "Block"; + } else if (code.slice(start, start + 2) === "#!") { + type = "Hashbang"; + } else { + type = "Line"; + } + const comment = { - type: block ? "Block" : "Line", + type, value: text }; @@ -65,6 +76,25 @@ export default () => Parser => { ? new TokenTranslator(tokTypes, code) : null; + /* + * Data that is unique to Espree and is not represented internally + * in Acorn. + * + * For ES2023 hashbangs, Espree will call `onComment()` during the + * constructor, so we must define state before having access to + * `this`. + */ + const state = { + originalSourceType: originalSourceType || options.sourceType, + tokens: tokenTranslator ? [] : null, + comments: options.comment === true ? [] : null, + impliedStrict: ecmaFeatures.impliedStrict === true && options.ecmaVersion >= 5, + ecmaVersion: options.ecmaVersion, + jsxAttrValueToken: false, + lastToken: null, + templateElements: [] + }; + // Initialize acorn parser. super({ @@ -83,38 +113,28 @@ export default () => Parser => { if (tokenTranslator) { // Use `tokens`, `ecmaVersion`, and `jsxAttrValueToken` in the state. - tokenTranslator.onToken(token, this[STATE]); + tokenTranslator.onToken(token, state); } if (token.type !== tokTypes.eof) { - this[STATE].lastToken = token; + state.lastToken = token; } }, // Collect comments onComment: (block, text, start, end, startLoc, endLoc) => { - if (this[STATE].comments) { - const comment = convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc); + if (state.comments) { + const comment = convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code); - this[STATE].comments.push(comment); + state.comments.push(comment); } } }, code); /* - * Data that is unique to Espree and is not represented internally in - * Acorn. We put all of this data into a symbol property as a way to - * avoid potential naming conflicts with future versions of Acorn. + * We put all of this data into a symbol property as a way to avoid + * potential naming conflicts with future versions of Acorn. */ - this[STATE] = { - originalSourceType: originalSourceType || options.sourceType, - tokens: tokenTranslator ? [] : null, - comments: options.comment === true ? [] : null, - impliedStrict: ecmaFeatures.impliedStrict === true && this.options.ecmaVersion >= 5, - ecmaVersion: this.options.ecmaVersion, - jsxAttrValueToken: false, - lastToken: null, - templateElements: [] - }; + this[STATE] = state; } tokenize() { diff --git a/tools/node_modules/eslint/node_modules/espree/lib/options.js b/tools/node_modules/eslint/node_modules/espree/lib/options.js index 87739699bb2..d284807286a 100644 --- a/tools/node_modules/eslint/node_modules/espree/lib/options.js +++ b/tools/node_modules/eslint/node_modules/espree/lib/options.js @@ -10,14 +10,15 @@ const SUPPORTED_VERSIONS = [ 3, 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 6, // 2015 + 7, // 2016 + 8, // 2017 + 9, // 2018 + 10, // 2019 + 11, // 2020 + 12, // 2021 + 13, // 2022 + 14 // 2023 ]; /** diff --git a/tools/node_modules/eslint/node_modules/espree/lib/version.js b/tools/node_modules/eslint/node_modules/espree/lib/version.js index 5a01b1367fb..dd065548d2e 100644 --- a/tools/node_modules/eslint/node_modules/espree/lib/version.js +++ b/tools/node_modules/eslint/node_modules/espree/lib/version.js @@ -1,3 +1,3 @@ -const version = "9.3.1"; +const version = "9.4.0"; export default version; diff --git a/tools/node_modules/eslint/node_modules/espree/package.json b/tools/node_modules/eslint/node_modules/espree/package.json index 419d2f63518..d1b7ad8bda1 100644 --- a/tools/node_modules/eslint/node_modules/espree/package.json +++ b/tools/node_modules/eslint/node_modules/espree/package.json @@ -16,7 +16,7 @@ ], "./package.json": "./package.json" }, - "version": "9.3.1", + "version": "9.4.0", "files": [ "lib", "dist/espree.cjs", @@ -27,12 +27,13 @@ }, "repository": "eslint/espree", "bugs": { - "url": "http://github.com/eslint/espree.git" + "url": "https://github.com/eslint/espree/issues" }, + "funding": "https://opencollective.com/eslint", "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "devDependencies": { @@ -40,22 +41,17 @@ "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "c8": "^7.11.0", - "chai": "^4.3.4", - "eslint": "^7.22.0", + "chai": "^4.3.6", + "eslint": "^8.13.0", "eslint-config-eslint": "^7.0.0", - "eslint-plugin-jsdoc": "^32.2.0", + "eslint-plugin-jsdoc": "^39.2.4", "eslint-plugin-node": "^11.1.0", "eslint-release": "^3.2.0", - "esprima": "latest", "esprima-fb": "^8001.2001.0-dev-harmony-fb", - "json-diff": "^0.5.4", - "mocha": "^8.3.1", + "mocha": "^9.2.2", "npm-run-all": "^4.1.5", - "regenerate": "^1.4.0", "rollup": "^2.41.2", - "shelljs": "^0.3.0", - "shelljs-nodecli": "^0.1.1", - "unicode-6.3.0": "^0.7.5" + "shelljs": "^0.3.0" }, "keywords": [ "ast", @@ -70,7 +66,7 @@ "unit:esm": "c8 mocha --color --reporter progress --timeout 30000 'tests/lib/**/*.js'", "unit:cjs": "mocha --color --reporter progress --timeout 30000 tests/lib/commonjs.cjs", "test": "npm-run-all -p unit lint", - "lint": "eslint \"*.?(c)js\" lib/ tests/lib/", + "lint": "eslint .", "fixlint": "npm run lint -- --fix", "build": "rollup -c rollup.config.js", "update-version": "node tools/update-version.js", diff --git a/tools/node_modules/eslint/node_modules/fast-glob/LICENSE b/tools/node_modules/eslint/node_modules/fast-glob/LICENSE new file mode 100644 index 00000000000..65a99946017 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Denis Malinochkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/fast-glob/node_modules/glob-parent/LICENSE b/tools/node_modules/eslint/node_modules/fast-glob/node_modules/glob-parent/LICENSE new file mode 100644 index 00000000000..63222d7a8f9 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/node_modules/glob-parent/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2015, 2019 Elan Shanker + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/fast-glob/node_modules/glob-parent/index.js b/tools/node_modules/eslint/node_modules/fast-glob/node_modules/glob-parent/index.js new file mode 100644 index 00000000000..09e257ea306 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/node_modules/glob-parent/index.js @@ -0,0 +1,42 @@ +'use strict'; + +var isGlob = require('is-glob'); +var pathPosixDirname = require('path').posix.dirname; +var isWin32 = require('os').platform() === 'win32'; + +var slash = '/'; +var backslash = /\\/g; +var enclosure = /[\{\[].*[\}\]]$/; +var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/; +var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g; + +/** + * @param {string} str + * @param {Object} opts + * @param {boolean} [opts.flipBackslashes=true] + * @returns {string} + */ +module.exports = function globParent(str, opts) { + var options = Object.assign({ flipBackslashes: true }, opts); + + // flip windows path separators + if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) { + str = str.replace(backslash, slash); + } + + // special case for strings ending in enclosure containing path separator + if (enclosure.test(str)) { + str += slash; + } + + // preserves full path in case of trailing path separator + str += 'a'; + + // remove path parts that are globby + do { + str = pathPosixDirname(str); + } while (isGlob(str) || globby.test(str)); + + // remove escape chars and return result + return str.replace(escaped, '$1'); +}; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/node_modules/glob-parent/package.json b/tools/node_modules/eslint/node_modules/fast-glob/node_modules/glob-parent/package.json new file mode 100644 index 00000000000..125c971c270 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/node_modules/glob-parent/package.json @@ -0,0 +1,48 @@ +{ + "name": "glob-parent", + "version": "5.1.2", + "description": "Extract the non-magic parent path from a glob string.", + "author": "Gulp Team (https://gulpjs.com/)", + "contributors": [ + "Elan Shanker (https://github.com/es128)", + "Blaine Bublitz " + ], + "repository": "gulpjs/glob-parent", + "license": "ISC", + "engines": { + "node": ">= 6" + }, + "main": "index.js", + "files": [ + "LICENSE", + "index.js" + ], + "scripts": { + "lint": "eslint .", + "pretest": "npm run lint", + "test": "nyc mocha --async-only", + "azure-pipelines": "nyc mocha --async-only --reporter xunit -O output=test.xunit", + "coveralls": "nyc report --reporter=text-lcov | coveralls" + }, + "dependencies": { + "is-glob": "^4.0.1" + }, + "devDependencies": { + "coveralls": "^3.0.11", + "eslint": "^2.13.1", + "eslint-config-gulp": "^3.0.1", + "expect": "^1.20.2", + "mocha": "^6.0.2", + "nyc": "^13.3.0" + }, + "keywords": [ + "glob", + "parent", + "strip", + "path", + "dirname", + "directory", + "base", + "wildcard" + ] +} diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/index.js b/tools/node_modules/eslint/node_modules/fast-glob/out/index.js new file mode 100644 index 00000000000..53978522955 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/index.js @@ -0,0 +1,68 @@ +"use strict"; +const taskManager = require("./managers/tasks"); +const patternManager = require("./managers/patterns"); +const async_1 = require("./providers/async"); +const stream_1 = require("./providers/stream"); +const sync_1 = require("./providers/sync"); +const settings_1 = require("./settings"); +const utils = require("./utils"); +async function FastGlob(source, options) { + assertPatternsInput(source); + const works = getWorks(source, async_1.default, options); + const result = await Promise.all(works); + return utils.array.flatten(result); +} +// https://github.com/typescript-eslint/typescript-eslint/issues/60 +// eslint-disable-next-line no-redeclare +(function (FastGlob) { + function sync(source, options) { + assertPatternsInput(source); + const works = getWorks(source, sync_1.default, options); + return utils.array.flatten(works); + } + FastGlob.sync = sync; + function stream(source, options) { + assertPatternsInput(source); + const works = getWorks(source, stream_1.default, options); + /** + * The stream returned by the provider cannot work with an asynchronous iterator. + * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams. + * This affects performance (+25%). I don't see best solution right now. + */ + return utils.stream.merge(works); + } + FastGlob.stream = stream; + function generateTasks(source, options) { + assertPatternsInput(source); + const patterns = patternManager.transform([].concat(source)); + const settings = new settings_1.default(options); + return taskManager.generate(patterns, settings); + } + FastGlob.generateTasks = generateTasks; + function isDynamicPattern(source, options) { + assertPatternsInput(source); + const settings = new settings_1.default(options); + return utils.pattern.isDynamicPattern(source, settings); + } + FastGlob.isDynamicPattern = isDynamicPattern; + function escapePath(source) { + assertPatternsInput(source); + return utils.path.escape(source); + } + FastGlob.escapePath = escapePath; +})(FastGlob || (FastGlob = {})); +function getWorks(source, _Provider, options) { + const patterns = patternManager.transform([].concat(source)); + const settings = new settings_1.default(options); + const tasks = taskManager.generate(patterns, settings); + const provider = new _Provider(settings); + return tasks.map(provider.read, provider); +} +function assertPatternsInput(input) { + const source = [].concat(input); + const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item)); + if (!isValidSource) { + throw new TypeError('Patterns must be a string (non empty) or an array of strings'); + } +} +module.exports = FastGlob; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/managers/patterns.js b/tools/node_modules/eslint/node_modules/fast-glob/out/managers/patterns.js new file mode 100644 index 00000000000..a2f0593dfc5 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/managers/patterns.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.removeDuplicateSlashes = exports.transform = void 0; +/** + * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string. + * The latter is due to the presence of the device path at the beginning of the UNC path. + * @todo rewrite to negative lookbehind with the next major release. + */ +const DOUBLE_SLASH_RE = /(?!^)\/{2,}/g; +function transform(patterns) { + return patterns.map((pattern) => removeDuplicateSlashes(pattern)); +} +exports.transform = transform; +/** + * This package only works with forward slashes as a path separator. + * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes. + */ +function removeDuplicateSlashes(pattern) { + return pattern.replace(DOUBLE_SLASH_RE, '/'); +} +exports.removeDuplicateSlashes = removeDuplicateSlashes; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/managers/tasks.js b/tools/node_modules/eslint/node_modules/fast-glob/out/managers/tasks.js new file mode 100644 index 00000000000..b69ce871f50 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/managers/tasks.js @@ -0,0 +1,80 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0; +const utils = require("../utils"); +function generate(patterns, settings) { + const positivePatterns = getPositivePatterns(patterns); + const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore); + const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings)); + const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings)); + const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false); + const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true); + return staticTasks.concat(dynamicTasks); +} +exports.generate = generate; +/** + * Returns tasks grouped by basic pattern directories. + * + * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately. + * This is necessary because directory traversal starts at the base directory and goes deeper. + */ +function convertPatternsToTasks(positive, negative, dynamic) { + const tasks = []; + const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive); + const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive); + const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory); + const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory); + tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic)); + /* + * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory + * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest. + */ + if ('.' in insideCurrentDirectoryGroup) { + tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic)); + } + else { + tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic)); + } + return tasks; +} +exports.convertPatternsToTasks = convertPatternsToTasks; +function getPositivePatterns(patterns) { + return utils.pattern.getPositivePatterns(patterns); +} +exports.getPositivePatterns = getPositivePatterns; +function getNegativePatternsAsPositive(patterns, ignore) { + const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore); + const positive = negative.map(utils.pattern.convertToPositivePattern); + return positive; +} +exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive; +function groupPatternsByBaseDirectory(patterns) { + const group = {}; + return patterns.reduce((collection, pattern) => { + const base = utils.pattern.getBaseDirectory(pattern); + if (base in collection) { + collection[base].push(pattern); + } + else { + collection[base] = [pattern]; + } + return collection; + }, group); +} +exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory; +function convertPatternGroupsToTasks(positive, negative, dynamic) { + return Object.keys(positive).map((base) => { + return convertPatternGroupToTask(base, positive[base], negative, dynamic); + }); +} +exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks; +function convertPatternGroupToTask(base, positive, negative, dynamic) { + return { + dynamic, + positive, + negative, + base, + patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern)) + }; +} +exports.convertPatternGroupToTask = convertPatternGroupToTask; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/providers/async.js b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/async.js new file mode 100644 index 00000000000..c8732e050e8 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/async.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const async_1 = require("../readers/async"); +const provider_1 = require("./provider"); +class ProviderAsync extends provider_1.default { + constructor() { + super(...arguments); + this._reader = new async_1.default(this._settings); + } + async read(task) { + const root = this._getRootDirectory(task); + const options = this._getReaderOptions(task); + const entries = await this.api(root, task, options); + return entries.map((entry) => options.transform(entry)); + } + api(root, task, options) { + if (task.dynamic) { + return this._reader.dynamic(root, options); + } + return this._reader.static(task.patterns, options); + } +} +exports.default = ProviderAsync; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/providers/filters/deep.js b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/filters/deep.js new file mode 100644 index 00000000000..819c26039f0 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/filters/deep.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const utils = require("../../utils"); +const partial_1 = require("../matchers/partial"); +class DeepFilter { + constructor(_settings, _micromatchOptions) { + this._settings = _settings; + this._micromatchOptions = _micromatchOptions; + } + getFilter(basePath, positive, negative) { + const matcher = this._getMatcher(positive); + const negativeRe = this._getNegativePatternsRe(negative); + return (entry) => this._filter(basePath, entry, matcher, negativeRe); + } + _getMatcher(patterns) { + return new partial_1.default(patterns, this._settings, this._micromatchOptions); + } + _getNegativePatternsRe(patterns) { + const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern); + return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions); + } + _filter(basePath, entry, matcher, negativeRe) { + if (this._isSkippedByDeep(basePath, entry.path)) { + return false; + } + if (this._isSkippedSymbolicLink(entry)) { + return false; + } + const filepath = utils.path.removeLeadingDotSegment(entry.path); + if (this._isSkippedByPositivePatterns(filepath, matcher)) { + return false; + } + return this._isSkippedByNegativePatterns(filepath, negativeRe); + } + _isSkippedByDeep(basePath, entryPath) { + /** + * Avoid unnecessary depth calculations when it doesn't matter. + */ + if (this._settings.deep === Infinity) { + return false; + } + return this._getEntryLevel(basePath, entryPath) >= this._settings.deep; + } + _getEntryLevel(basePath, entryPath) { + const entryPathDepth = entryPath.split('/').length; + if (basePath === '') { + return entryPathDepth; + } + const basePathDepth = basePath.split('/').length; + return entryPathDepth - basePathDepth; + } + _isSkippedSymbolicLink(entry) { + return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink(); + } + _isSkippedByPositivePatterns(entryPath, matcher) { + return !this._settings.baseNameMatch && !matcher.match(entryPath); + } + _isSkippedByNegativePatterns(entryPath, patternsRe) { + return !utils.pattern.matchAny(entryPath, patternsRe); + } +} +exports.default = DeepFilter; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/providers/filters/entry.js b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/filters/entry.js new file mode 100644 index 00000000000..bf113206278 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/filters/entry.js @@ -0,0 +1,64 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const utils = require("../../utils"); +class EntryFilter { + constructor(_settings, _micromatchOptions) { + this._settings = _settings; + this._micromatchOptions = _micromatchOptions; + this.index = new Map(); + } + getFilter(positive, negative) { + const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions); + const negativeRe = utils.pattern.convertPatternsToRe(negative, this._micromatchOptions); + return (entry) => this._filter(entry, positiveRe, negativeRe); + } + _filter(entry, positiveRe, negativeRe) { + if (this._settings.unique && this._isDuplicateEntry(entry)) { + return false; + } + if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) { + return false; + } + if (this._isSkippedByAbsoluteNegativePatterns(entry.path, negativeRe)) { + return false; + } + const filepath = this._settings.baseNameMatch ? entry.name : entry.path; + const isDirectory = entry.dirent.isDirectory(); + const isMatched = this._isMatchToPatterns(filepath, positiveRe, isDirectory) && !this._isMatchToPatterns(entry.path, negativeRe, isDirectory); + if (this._settings.unique && isMatched) { + this._createIndexRecord(entry); + } + return isMatched; + } + _isDuplicateEntry(entry) { + return this.index.has(entry.path); + } + _createIndexRecord(entry) { + this.index.set(entry.path, undefined); + } + _onlyFileFilter(entry) { + return this._settings.onlyFiles && !entry.dirent.isFile(); + } + _onlyDirectoryFilter(entry) { + return this._settings.onlyDirectories && !entry.dirent.isDirectory(); + } + _isSkippedByAbsoluteNegativePatterns(entryPath, patternsRe) { + if (!this._settings.absolute) { + return false; + } + const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath); + return utils.pattern.matchAny(fullpath, patternsRe); + } + _isMatchToPatterns(entryPath, patternsRe, isDirectory) { + const filepath = utils.path.removeLeadingDotSegment(entryPath); + // Trying to match files and directories by patterns. + const isMatched = utils.pattern.matchAny(filepath, patternsRe); + // A pattern with a trailling slash can be used for directory matching. + // To apply such pattern, we need to add a tralling slash to the path. + if (!isMatched && isDirectory) { + return utils.pattern.matchAny(filepath + '/', patternsRe); + } + return isMatched; + } +} +exports.default = EntryFilter; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/providers/filters/error.js b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/filters/error.js new file mode 100644 index 00000000000..f93bdc0c752 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/filters/error.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const utils = require("../../utils"); +class ErrorFilter { + constructor(_settings) { + this._settings = _settings; + } + getFilter() { + return (error) => this._isNonFatalError(error); + } + _isNonFatalError(error) { + return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors; + } +} +exports.default = ErrorFilter; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/providers/matchers/matcher.js b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/matchers/matcher.js new file mode 100644 index 00000000000..44b2cc78caf --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/matchers/matcher.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const utils = require("../../utils"); +class Matcher { + constructor(_patterns, _settings, _micromatchOptions) { + this._patterns = _patterns; + this._settings = _settings; + this._micromatchOptions = _micromatchOptions; + this._storage = []; + this._fillStorage(); + } + _fillStorage() { + /** + * The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level). + * So, before expand patterns with brace expansion into separated patterns. + */ + const patterns = utils.pattern.expandPatternsWithBraceExpansion(this._patterns); + for (const pattern of patterns) { + const segments = this._getPatternSegments(pattern); + const sections = this._splitSegmentsIntoSections(segments); + this._storage.push({ + complete: sections.length <= 1, + pattern, + segments, + sections + }); + } + } + _getPatternSegments(pattern) { + const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions); + return parts.map((part) => { + const dynamic = utils.pattern.isDynamicPattern(part, this._settings); + if (!dynamic) { + return { + dynamic: false, + pattern: part + }; + } + return { + dynamic: true, + pattern: part, + patternRe: utils.pattern.makeRe(part, this._micromatchOptions) + }; + }); + } + _splitSegmentsIntoSections(segments) { + return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern)); + } +} +exports.default = Matcher; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/providers/matchers/partial.js b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/matchers/partial.js new file mode 100644 index 00000000000..f6a77e0190c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/matchers/partial.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const matcher_1 = require("./matcher"); +class PartialMatcher extends matcher_1.default { + match(filepath) { + const parts = filepath.split('/'); + const levels = parts.length; + const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels); + for (const pattern of patterns) { + const section = pattern.sections[0]; + /** + * In this case, the pattern has a globstar and we must read all directories unconditionally, + * but only if the level has reached the end of the first group. + * + * fixtures/{a,b}/** + * ^ true/false ^ always true + */ + if (!pattern.complete && levels > section.length) { + return true; + } + const match = parts.every((part, index) => { + const segment = pattern.segments[index]; + if (segment.dynamic && segment.patternRe.test(part)) { + return true; + } + if (!segment.dynamic && segment.pattern === part) { + return true; + } + return false; + }); + if (match) { + return true; + } + } + return false; + } +} +exports.default = PartialMatcher; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/providers/provider.js b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/provider.js new file mode 100644 index 00000000000..5afb389369c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/provider.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const path = require("path"); +const deep_1 = require("./filters/deep"); +const entry_1 = require("./filters/entry"); +const error_1 = require("./filters/error"); +const entry_2 = require("./transformers/entry"); +class Provider { + constructor(_settings) { + this._settings = _settings; + this.errorFilter = new error_1.default(this._settings); + this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions()); + this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions()); + this.entryTransformer = new entry_2.default(this._settings); + } + _getRootDirectory(task) { + return path.resolve(this._settings.cwd, task.base); + } + _getReaderOptions(task) { + const basePath = task.base === '.' ? '' : task.base; + return { + basePath, + pathSegmentSeparator: '/', + concurrency: this._settings.concurrency, + deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative), + entryFilter: this.entryFilter.getFilter(task.positive, task.negative), + errorFilter: this.errorFilter.getFilter(), + followSymbolicLinks: this._settings.followSymbolicLinks, + fs: this._settings.fs, + stats: this._settings.stats, + throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink, + transform: this.entryTransformer.getTransformer() + }; + } + _getMicromatchOptions() { + return { + dot: this._settings.dot, + matchBase: this._settings.baseNameMatch, + nobrace: !this._settings.braceExpansion, + nocase: !this._settings.caseSensitiveMatch, + noext: !this._settings.extglob, + noglobstar: !this._settings.globstar, + posix: true, + strictSlashes: false + }; + } +} +exports.default = Provider; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/providers/stream.js b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/stream.js new file mode 100644 index 00000000000..9e81c21f371 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/stream.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const stream_1 = require("stream"); +const stream_2 = require("../readers/stream"); +const provider_1 = require("./provider"); +class ProviderStream extends provider_1.default { + constructor() { + super(...arguments); + this._reader = new stream_2.default(this._settings); + } + read(task) { + const root = this._getRootDirectory(task); + const options = this._getReaderOptions(task); + const source = this.api(root, task, options); + const destination = new stream_1.Readable({ objectMode: true, read: () => { } }); + source + .once('error', (error) => destination.emit('error', error)) + .on('data', (entry) => destination.emit('data', options.transform(entry))) + .once('end', () => destination.emit('end')); + destination + .once('close', () => source.destroy()); + return destination; + } + api(root, task, options) { + if (task.dynamic) { + return this._reader.dynamic(root, options); + } + return this._reader.static(task.patterns, options); + } +} +exports.default = ProviderStream; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/providers/sync.js b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/sync.js new file mode 100644 index 00000000000..9ed8f7cd4bd --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/sync.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const sync_1 = require("../readers/sync"); +const provider_1 = require("./provider"); +class ProviderSync extends provider_1.default { + constructor() { + super(...arguments); + this._reader = new sync_1.default(this._settings); + } + read(task) { + const root = this._getRootDirectory(task); + const options = this._getReaderOptions(task); + const entries = this.api(root, task, options); + return entries.map(options.transform); + } + api(root, task, options) { + if (task.dynamic) { + return this._reader.dynamic(root, options); + } + return this._reader.static(task.patterns, options); + } +} +exports.default = ProviderSync; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/providers/transformers/entry.js b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/transformers/entry.js new file mode 100644 index 00000000000..3bef80380e5 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/providers/transformers/entry.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const utils = require("../../utils"); +class EntryTransformer { + constructor(_settings) { + this._settings = _settings; + } + getTransformer() { + return (entry) => this._transform(entry); + } + _transform(entry) { + let filepath = entry.path; + if (this._settings.absolute) { + filepath = utils.path.makeAbsolute(this._settings.cwd, filepath); + filepath = utils.path.unixify(filepath); + } + if (this._settings.markDirectories && entry.dirent.isDirectory()) { + filepath += '/'; + } + if (!this._settings.objectMode) { + return filepath; + } + return Object.assign(Object.assign({}, entry), { path: filepath }); + } +} +exports.default = EntryTransformer; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/readers/async.js b/tools/node_modules/eslint/node_modules/fast-glob/out/readers/async.js new file mode 100644 index 00000000000..c43e34a24f9 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/readers/async.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fsWalk = require("@nodelib/fs.walk"); +const reader_1 = require("./reader"); +const stream_1 = require("./stream"); +class ReaderAsync extends reader_1.default { + constructor() { + super(...arguments); + this._walkAsync = fsWalk.walk; + this._readerStream = new stream_1.default(this._settings); + } + dynamic(root, options) { + return new Promise((resolve, reject) => { + this._walkAsync(root, options, (error, entries) => { + if (error === null) { + resolve(entries); + } + else { + reject(error); + } + }); + }); + } + async static(patterns, options) { + const entries = []; + const stream = this._readerStream.static(patterns, options); + // After #235, replace it with an asynchronous iterator. + return new Promise((resolve, reject) => { + stream.once('error', reject); + stream.on('data', (entry) => entries.push(entry)); + stream.once('end', () => resolve(entries)); + }); + } +} +exports.default = ReaderAsync; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/readers/reader.js b/tools/node_modules/eslint/node_modules/fast-glob/out/readers/reader.js new file mode 100644 index 00000000000..9e9469ce741 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/readers/reader.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const path = require("path"); +const fsStat = require("@nodelib/fs.stat"); +const utils = require("../utils"); +class Reader { + constructor(_settings) { + this._settings = _settings; + this._fsStatSettings = new fsStat.Settings({ + followSymbolicLink: this._settings.followSymbolicLinks, + fs: this._settings.fs, + throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks + }); + } + _getFullEntryPath(filepath) { + return path.resolve(this._settings.cwd, filepath); + } + _makeEntry(stats, pattern) { + const entry = { + name: pattern, + path: pattern, + dirent: utils.fs.createDirentFromStats(pattern, stats) + }; + if (this._settings.stats) { + entry.stats = stats; + } + return entry; + } + _isFatalError(error) { + return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors; + } +} +exports.default = Reader; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/readers/stream.js b/tools/node_modules/eslint/node_modules/fast-glob/out/readers/stream.js new file mode 100644 index 00000000000..33b96f50eaa --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/readers/stream.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const stream_1 = require("stream"); +const fsStat = require("@nodelib/fs.stat"); +const fsWalk = require("@nodelib/fs.walk"); +const reader_1 = require("./reader"); +class ReaderStream extends reader_1.default { + constructor() { + super(...arguments); + this._walkStream = fsWalk.walkStream; + this._stat = fsStat.stat; + } + dynamic(root, options) { + return this._walkStream(root, options); + } + static(patterns, options) { + const filepaths = patterns.map(this._getFullEntryPath, this); + const stream = new stream_1.PassThrough({ objectMode: true }); + stream._write = (index, _enc, done) => { + return this._getEntry(filepaths[index], patterns[index], options) + .then((entry) => { + if (entry !== null && options.entryFilter(entry)) { + stream.push(entry); + } + if (index === filepaths.length - 1) { + stream.end(); + } + done(); + }) + .catch(done); + }; + for (let i = 0; i < filepaths.length; i++) { + stream.write(i); + } + return stream; + } + _getEntry(filepath, pattern, options) { + return this._getStat(filepath) + .then((stats) => this._makeEntry(stats, pattern)) + .catch((error) => { + if (options.errorFilter(error)) { + return null; + } + throw error; + }); + } + _getStat(filepath) { + return new Promise((resolve, reject) => { + this._stat(filepath, this._fsStatSettings, (error, stats) => { + return error === null ? resolve(stats) : reject(error); + }); + }); + } +} +exports.default = ReaderStream; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/readers/sync.js b/tools/node_modules/eslint/node_modules/fast-glob/out/readers/sync.js new file mode 100644 index 00000000000..c4e4a01d853 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/readers/sync.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fsStat = require("@nodelib/fs.stat"); +const fsWalk = require("@nodelib/fs.walk"); +const reader_1 = require("./reader"); +class ReaderSync extends reader_1.default { + constructor() { + super(...arguments); + this._walkSync = fsWalk.walkSync; + this._statSync = fsStat.statSync; + } + dynamic(root, options) { + return this._walkSync(root, options); + } + static(patterns, options) { + const entries = []; + for (const pattern of patterns) { + const filepath = this._getFullEntryPath(pattern); + const entry = this._getEntry(filepath, pattern, options); + if (entry === null || !options.entryFilter(entry)) { + continue; + } + entries.push(entry); + } + return entries; + } + _getEntry(filepath, pattern, options) { + try { + const stats = this._getStat(filepath); + return this._makeEntry(stats, pattern); + } + catch (error) { + if (options.errorFilter(error)) { + return null; + } + throw error; + } + } + _getStat(filepath) { + return this._statSync(filepath, this._fsStatSettings); + } +} +exports.default = ReaderSync; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/settings.js b/tools/node_modules/eslint/node_modules/fast-glob/out/settings.js new file mode 100644 index 00000000000..f95ac8ff4c2 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/settings.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0; +const fs = require("fs"); +const os = require("os"); +/** + * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero. + * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107 + */ +const CPU_COUNT = Math.max(os.cpus().length, 1); +exports.DEFAULT_FILE_SYSTEM_ADAPTER = { + lstat: fs.lstat, + lstatSync: fs.lstatSync, + stat: fs.stat, + statSync: fs.statSync, + readdir: fs.readdir, + readdirSync: fs.readdirSync +}; +class Settings { + constructor(_options = {}) { + this._options = _options; + this.absolute = this._getValue(this._options.absolute, false); + this.baseNameMatch = this._getValue(this._options.baseNameMatch, false); + this.braceExpansion = this._getValue(this._options.braceExpansion, true); + this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true); + this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT); + this.cwd = this._getValue(this._options.cwd, process.cwd()); + this.deep = this._getValue(this._options.deep, Infinity); + this.dot = this._getValue(this._options.dot, false); + this.extglob = this._getValue(this._options.extglob, true); + this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true); + this.fs = this._getFileSystemMethods(this._options.fs); + this.globstar = this._getValue(this._options.globstar, true); + this.ignore = this._getValue(this._options.ignore, []); + this.markDirectories = this._getValue(this._options.markDirectories, false); + this.objectMode = this._getValue(this._options.objectMode, false); + this.onlyDirectories = this._getValue(this._options.onlyDirectories, false); + this.onlyFiles = this._getValue(this._options.onlyFiles, true); + this.stats = this._getValue(this._options.stats, false); + this.suppressErrors = this._getValue(this._options.suppressErrors, false); + this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false); + this.unique = this._getValue(this._options.unique, true); + if (this.onlyDirectories) { + this.onlyFiles = false; + } + if (this.stats) { + this.objectMode = true; + } + } + _getValue(option, value) { + return option === undefined ? value : option; + } + _getFileSystemMethods(methods = {}) { + return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods); + } +} +exports.default = Settings; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/types/index.js b/tools/node_modules/eslint/node_modules/fast-glob/out/types/index.js new file mode 100644 index 00000000000..ce03781e221 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/types/index.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/utils/array.js b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/array.js new file mode 100644 index 00000000000..f43f114582f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/array.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.splitWhen = exports.flatten = void 0; +function flatten(items) { + return items.reduce((collection, item) => [].concat(collection, item), []); +} +exports.flatten = flatten; +function splitWhen(items, predicate) { + const result = [[]]; + let groupIndex = 0; + for (const item of items) { + if (predicate(item)) { + groupIndex++; + result[groupIndex] = []; + } + else { + result[groupIndex].push(item); + } + } + return result; +} +exports.splitWhen = splitWhen; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/utils/errno.js b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/errno.js new file mode 100644 index 00000000000..178ace606cb --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/errno.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isEnoentCodeError = void 0; +function isEnoentCodeError(error) { + return error.code === 'ENOENT'; +} +exports.isEnoentCodeError = isEnoentCodeError; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/utils/fs.js b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/fs.js new file mode 100644 index 00000000000..f15b8cf24d0 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/fs.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createDirentFromStats = void 0; +class DirentFromStats { + constructor(name, stats) { + this.name = name; + this.isBlockDevice = stats.isBlockDevice.bind(stats); + this.isCharacterDevice = stats.isCharacterDevice.bind(stats); + this.isDirectory = stats.isDirectory.bind(stats); + this.isFIFO = stats.isFIFO.bind(stats); + this.isFile = stats.isFile.bind(stats); + this.isSocket = stats.isSocket.bind(stats); + this.isSymbolicLink = stats.isSymbolicLink.bind(stats); + } +} +function createDirentFromStats(name, stats) { + return new DirentFromStats(name, stats); +} +exports.createDirentFromStats = createDirentFromStats; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/utils/index.js b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/index.js new file mode 100644 index 00000000000..8fc6703a3dc --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/index.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0; +const array = require("./array"); +exports.array = array; +const errno = require("./errno"); +exports.errno = errno; +const fs = require("./fs"); +exports.fs = fs; +const path = require("./path"); +exports.path = path; +const pattern = require("./pattern"); +exports.pattern = pattern; +const stream = require("./stream"); +exports.stream = stream; +const string = require("./string"); +exports.string = string; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/utils/path.js b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/path.js new file mode 100644 index 00000000000..966fcc904a8 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/path.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.removeLeadingDotSegment = exports.escape = exports.makeAbsolute = exports.unixify = void 0; +const path = require("path"); +const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\ +const UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g; +/** + * Designed to work only with simple paths: `dir\\file`. + */ +function unixify(filepath) { + return filepath.replace(/\\/g, '/'); +} +exports.unixify = unixify; +function makeAbsolute(cwd, filepath) { + return path.resolve(cwd, filepath); +} +exports.makeAbsolute = makeAbsolute; +function escape(pattern) { + return pattern.replace(UNESCAPED_GLOB_SYMBOLS_RE, '\\$2'); +} +exports.escape = escape; +function removeLeadingDotSegment(entry) { + // We do not use `startsWith` because this is 10x slower than current implementation for some cases. + // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with + if (entry.charAt(0) === '.') { + const secondCharactery = entry.charAt(1); + if (secondCharactery === '/' || secondCharactery === '\\') { + return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT); + } + } + return entry; +} +exports.removeLeadingDotSegment = removeLeadingDotSegment; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/utils/pattern.js b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/pattern.js new file mode 100644 index 00000000000..0eafc75499f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/pattern.js @@ -0,0 +1,169 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0; +const path = require("path"); +const globParent = require("glob-parent"); +const micromatch = require("micromatch"); +const GLOBSTAR = '**'; +const ESCAPE_SYMBOL = '\\'; +const COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/; +const REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[[^[]*]/; +const REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\([^(]*\|[^|]*\)/; +const GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\([^(]*\)/; +const BRACE_EXPANSION_SEPARATORS_RE = /,|\.\./; +function isStaticPattern(pattern, options = {}) { + return !isDynamicPattern(pattern, options); +} +exports.isStaticPattern = isStaticPattern; +function isDynamicPattern(pattern, options = {}) { + /** + * A special case with an empty string is necessary for matching patterns that start with a forward slash. + * An empty string cannot be a dynamic pattern. + * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'. + */ + if (pattern === '') { + return false; + } + /** + * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check + * filepath directly (without read directory). + */ + if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) { + return true; + } + if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) { + return true; + } + if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) { + return true; + } + if (options.braceExpansion !== false && hasBraceExpansion(pattern)) { + return true; + } + return false; +} +exports.isDynamicPattern = isDynamicPattern; +function hasBraceExpansion(pattern) { + const openingBraceIndex = pattern.indexOf('{'); + if (openingBraceIndex === -1) { + return false; + } + const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1); + if (closingBraceIndex === -1) { + return false; + } + const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex); + return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent); +} +function convertToPositivePattern(pattern) { + return isNegativePattern(pattern) ? pattern.slice(1) : pattern; +} +exports.convertToPositivePattern = convertToPositivePattern; +function convertToNegativePattern(pattern) { + return '!' + pattern; +} +exports.convertToNegativePattern = convertToNegativePattern; +function isNegativePattern(pattern) { + return pattern.startsWith('!') && pattern[1] !== '('; +} +exports.isNegativePattern = isNegativePattern; +function isPositivePattern(pattern) { + return !isNegativePattern(pattern); +} +exports.isPositivePattern = isPositivePattern; +function getNegativePatterns(patterns) { + return patterns.filter(isNegativePattern); +} +exports.getNegativePatterns = getNegativePatterns; +function getPositivePatterns(patterns) { + return patterns.filter(isPositivePattern); +} +exports.getPositivePatterns = getPositivePatterns; +/** + * Returns patterns that can be applied inside the current directory. + * + * @example + * // ['./*', '*', 'a/*'] + * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*']) + */ +function getPatternsInsideCurrentDirectory(patterns) { + return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern)); +} +exports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory; +/** + * Returns patterns to be expanded relative to (outside) the current directory. + * + * @example + * // ['../*', './../*'] + * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*']) + */ +function getPatternsOutsideCurrentDirectory(patterns) { + return patterns.filter(isPatternRelatedToParentDirectory); +} +exports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory; +function isPatternRelatedToParentDirectory(pattern) { + return pattern.startsWith('..') || pattern.startsWith('./..'); +} +exports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory; +function getBaseDirectory(pattern) { + return globParent(pattern, { flipBackslashes: false }); +} +exports.getBaseDirectory = getBaseDirectory; +function hasGlobStar(pattern) { + return pattern.includes(GLOBSTAR); +} +exports.hasGlobStar = hasGlobStar; +function endsWithSlashGlobStar(pattern) { + return pattern.endsWith('/' + GLOBSTAR); +} +exports.endsWithSlashGlobStar = endsWithSlashGlobStar; +function isAffectDepthOfReadingPattern(pattern) { + const basename = path.basename(pattern); + return endsWithSlashGlobStar(pattern) || isStaticPattern(basename); +} +exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern; +function expandPatternsWithBraceExpansion(patterns) { + return patterns.reduce((collection, pattern) => { + return collection.concat(expandBraceExpansion(pattern)); + }, []); +} +exports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion; +function expandBraceExpansion(pattern) { + return micromatch.braces(pattern, { + expand: true, + nodupes: true + }); +} +exports.expandBraceExpansion = expandBraceExpansion; +function getPatternParts(pattern, options) { + let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true })); + /** + * The scan method returns an empty array in some cases. + * See micromatch/picomatch#58 for more details. + */ + if (parts.length === 0) { + parts = [pattern]; + } + /** + * The scan method does not return an empty part for the pattern with a forward slash. + * This is another part of micromatch/picomatch#58. + */ + if (parts[0].startsWith('/')) { + parts[0] = parts[0].slice(1); + parts.unshift(''); + } + return parts; +} +exports.getPatternParts = getPatternParts; +function makeRe(pattern, options) { + return micromatch.makeRe(pattern, options); +} +exports.makeRe = makeRe; +function convertPatternsToRe(patterns, options) { + return patterns.map((pattern) => makeRe(pattern, options)); +} +exports.convertPatternsToRe = convertPatternsToRe; +function matchAny(entry, patternsRe) { + return patternsRe.some((patternRe) => patternRe.test(entry)); +} +exports.matchAny = matchAny; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/utils/stream.js b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/stream.js new file mode 100644 index 00000000000..f1ab1f5b4d1 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/stream.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.merge = void 0; +const merge2 = require("merge2"); +function merge(streams) { + const mergedStream = merge2(streams); + streams.forEach((stream) => { + stream.once('error', (error) => mergedStream.emit('error', error)); + }); + mergedStream.once('close', () => propagateCloseEventToSources(streams)); + mergedStream.once('end', () => propagateCloseEventToSources(streams)); + return mergedStream; +} +exports.merge = merge; +function propagateCloseEventToSources(streams) { + streams.forEach((stream) => stream.emit('close')); +} diff --git a/tools/node_modules/eslint/node_modules/fast-glob/out/utils/string.js b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/string.js new file mode 100644 index 00000000000..738c2270095 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/out/utils/string.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isEmpty = exports.isString = void 0; +function isString(input) { + return typeof input === 'string'; +} +exports.isString = isString; +function isEmpty(input) { + return input === ''; +} +exports.isEmpty = isEmpty; diff --git a/tools/node_modules/eslint/node_modules/fast-glob/package.json b/tools/node_modules/eslint/node_modules/fast-glob/package.json new file mode 100644 index 00000000000..d74e403ab90 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fast-glob/package.json @@ -0,0 +1,94 @@ +{ + "name": "fast-glob", + "version": "3.2.12", + "description": "It's a very fast and efficient glob library for Node.js", + "license": "MIT", + "repository": "mrmlnc/fast-glob", + "author": { + "name": "Denis Malinochkin", + "url": "https://mrmlnc.com" + }, + "engines": { + "node": ">=8.6.0" + }, + "main": "out/index.js", + "typings": "out/index.d.ts", + "files": [ + "out", + "!out/{benchmark,tests}", + "!out/**/*.map", + "!out/**/*.spec.*" + ], + "keywords": [ + "glob", + "patterns", + "fast", + "implementation" + ], + "devDependencies": { + "@nodelib/fs.macchiato": "^1.0.1", + "@types/compute-stdev": "^1.0.0", + "@types/easy-table": "^0.0.32", + "@types/glob": "^7.1.1", + "@types/glob-parent": "^5.1.0", + "@types/is-ci": "^2.0.0", + "@types/merge2": "^1.1.4", + "@types/micromatch": "^4.0.0", + "@types/minimist": "^1.2.0", + "@types/mocha": "^5.2.7", + "@types/node": "^12.7.8", + "@types/rimraf": "^2.0.2", + "@types/sinon": "^7.5.0", + "compute-stdev": "^1.0.0", + "easy-table": "^1.1.1", + "eslint": "^6.5.1", + "eslint-config-mrmlnc": "^1.1.0", + "execa": "^2.0.4", + "fast-glob": "^3.0.4", + "fdir": "^5.1.0", + "glob": "^7.1.4", + "is-ci": "^2.0.0", + "log-update": "^4.0.0", + "minimist": "^1.2.0", + "mocha": "^6.2.1", + "rimraf": "^3.0.0", + "sinon": "^7.5.0", + "tiny-glob": "^0.2.6", + "typescript": "^3.6.3" + }, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "scripts": { + "clean": "rimraf out", + "lint": "eslint \"src/**/*.ts\" --cache", + "compile": "tsc", + "test": "mocha \"out/**/*.spec.js\" -s 0", + "smoke": "mocha \"out/**/*.smoke.js\" -s 0", + "smoke:sync": "mocha \"out/**/*.smoke.js\" -s 0 --grep \"\\(sync\\)\"", + "smoke:async": "mocha \"out/**/*.smoke.js\" -s 0 --grep \"\\(async\\)\"", + "smoke:stream": "mocha \"out/**/*.smoke.js\" -s 0 --grep \"\\(stream\\)\"", + "build": "npm run clean && npm run compile && npm run lint && npm test", + "watch": "npm run clean && npm run compile -- --sourceMap --watch", + "bench": "npm run bench-async && npm run bench-stream && npm run bench-sync", + "bench-async": "npm run bench-async-flatten && npm run bench-async-deep && npm run bench-async-partial-flatten && npm run bench-async-partial-deep", + "bench-stream": "npm run bench-stream-flatten && npm run bench-stream-deep && npm run bench-stream-partial-flatten && npm run bench-stream-partial-deep", + "bench-sync": "npm run bench-sync-flatten && npm run bench-sync-deep && npm run bench-sync-partial-flatten && npm run bench-sync-partial-deep", + "bench-async-flatten": "node ./out/benchmark --mode async --pattern \"*\"", + "bench-async-deep": "node ./out/benchmark --mode async --pattern \"**\"", + "bench-async-partial-flatten": "node ./out/benchmark --mode async --pattern \"{fixtures,out}/{first,second}/*\"", + "bench-async-partial-deep": "node ./out/benchmark --mode async --pattern \"{fixtures,out}/**\"", + "bench-stream-flatten": "node ./out/benchmark --mode stream --pattern \"*\"", + "bench-stream-deep": "node ./out/benchmark --mode stream --pattern \"**\"", + "bench-stream-partial-flatten": "node ./out/benchmark --mode stream --pattern \"{fixtures,out}/{first,second}/*\"", + "bench-stream-partial-deep": "node ./out/benchmark --mode stream --pattern \"{fixtures,out}/**\"", + "bench-sync-flatten": "node ./out/benchmark --mode sync --pattern \"*\"", + "bench-sync-deep": "node ./out/benchmark --mode sync --pattern \"**\"", + "bench-sync-partial-flatten": "node ./out/benchmark --mode sync --pattern \"{fixtures,out}/{first,second}/*\"", + "bench-sync-partial-deep": "node ./out/benchmark --mode sync --pattern \"{fixtures,out}/**\"" + } +} diff --git a/tools/node_modules/eslint/node_modules/fastq/LICENSE b/tools/node_modules/eslint/node_modules/fastq/LICENSE new file mode 100644 index 00000000000..27c7bb46236 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fastq/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2015-2020, Matteo Collina + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/fastq/bench.js b/tools/node_modules/eslint/node_modules/fastq/bench.js new file mode 100644 index 00000000000..4eaa829f329 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fastq/bench.js @@ -0,0 +1,66 @@ +'use strict' + +const max = 1000000 +const fastqueue = require('./')(worker, 1) +const { promisify } = require('util') +const immediate = promisify(setImmediate) +const qPromise = require('./').promise(immediate, 1) +const async = require('async') +const neo = require('neo-async') +const asyncqueue = async.queue(worker, 1) +const neoqueue = neo.queue(worker, 1) + +function bench (func, done) { + const key = max + '*' + func.name + let count = -1 + + console.time(key) + end() + + function end () { + if (++count < max) { + func(end) + } else { + console.timeEnd(key) + if (done) { + done() + } + } + } +} + +function benchFastQ (done) { + fastqueue.push(42, done) +} + +function benchAsyncQueue (done) { + asyncqueue.push(42, done) +} + +function benchNeoQueue (done) { + neoqueue.push(42, done) +} + +function worker (arg, cb) { + setImmediate(cb) +} + +function benchSetImmediate (cb) { + worker(42, cb) +} + +function benchFastQPromise (done) { + qPromise.push(42).then(function () { done() }, done) +} + +function runBench (done) { + async.eachSeries([ + benchSetImmediate, + benchFastQ, + benchNeoQueue, + benchAsyncQueue, + benchFastQPromise + ], bench, done) +} + +runBench(runBench) diff --git a/tools/node_modules/eslint/node_modules/fastq/example.js b/tools/node_modules/eslint/node_modules/fastq/example.js new file mode 100644 index 00000000000..665fdc8412e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fastq/example.js @@ -0,0 +1,14 @@ +'use strict' + +/* eslint-disable no-var */ + +var queue = require('./')(worker, 1) + +queue.push(42, function (err, result) { + if (err) { throw err } + console.log('the result is', result) +}) + +function worker (arg, cb) { + cb(null, 42 * 2) +} diff --git a/tools/node_modules/eslint/node_modules/fastq/example.mjs b/tools/node_modules/eslint/node_modules/fastq/example.mjs new file mode 100644 index 00000000000..81be789a083 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fastq/example.mjs @@ -0,0 +1,11 @@ +import { promise as queueAsPromised } from './queue.js' + +/* eslint-disable */ + +const queue = queueAsPromised(worker, 1) + +console.log('the result is', await queue.push(42)) + +async function worker (arg) { + return 42 * 2 +} diff --git a/tools/node_modules/eslint/node_modules/fastq/package.json b/tools/node_modules/eslint/node_modules/fastq/package.json new file mode 100644 index 00000000000..9837031767e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fastq/package.json @@ -0,0 +1,52 @@ +{ + "name": "fastq", + "version": "1.13.0", + "description": "Fast, in memory work queue", + "main": "queue.js", + "scripts": { + "lint": "standard --verbose | snazzy", + "unit": "nyc --lines 100 --branches 100 --functions 100 --check-coverage --reporter=text tape test/test.js test/promise.js", + "coverage": "nyc --reporter=html --reporter=cobertura --reporter=text tape test/test.js test/promise.js", + "test:report": "npm run lint && npm run unit:report", + "test": "npm run lint && npm run unit && npm run typescript", + "typescript": "tsc --project ./test/tsconfig.json", + "legacy": "tape test/test.js" + }, + "pre-commit": [ + "test" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/mcollina/fastq.git" + }, + "keywords": [ + "fast", + "queue", + "async", + "worker" + ], + "author": "Matteo Collina ", + "license": "ISC", + "bugs": { + "url": "https://github.com/mcollina/fastq/issues" + }, + "homepage": "https://github.com/mcollina/fastq#readme", + "devDependencies": { + "async": "^3.1.0", + "neo-async": "^2.6.1", + "nyc": "^15.0.0", + "pre-commit": "^1.2.2", + "snazzy": "^9.0.0", + "standard": "^16.0.0", + "tape": "^5.0.0", + "typescript": "^4.0.2" + }, + "dependencies": { + "reusify": "^1.0.4" + }, + "standard": { + "ignore": [ + "example.mjs" + ] + } +} diff --git a/tools/node_modules/eslint/node_modules/fastq/queue.js b/tools/node_modules/eslint/node_modules/fastq/queue.js new file mode 100644 index 00000000000..84e7bbdf0ad --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fastq/queue.js @@ -0,0 +1,283 @@ +'use strict' + +/* eslint-disable no-var */ + +var reusify = require('reusify') + +function fastqueue (context, worker, concurrency) { + if (typeof context === 'function') { + concurrency = worker + worker = context + context = null + } + + if (concurrency < 1) { + throw new Error('fastqueue concurrency must be greater than 1') + } + + var cache = reusify(Task) + var queueHead = null + var queueTail = null + var _running = 0 + var errorHandler = null + + var self = { + push: push, + drain: noop, + saturated: noop, + pause: pause, + paused: false, + concurrency: concurrency, + running: running, + resume: resume, + idle: idle, + length: length, + getQueue: getQueue, + unshift: unshift, + empty: noop, + kill: kill, + killAndDrain: killAndDrain, + error: error + } + + return self + + function running () { + return _running + } + + function pause () { + self.paused = true + } + + function length () { + var current = queueHead + var counter = 0 + + while (current) { + current = current.next + counter++ + } + + return counter + } + + function getQueue () { + var current = queueHead + var tasks = [] + + while (current) { + tasks.push(current.value) + current = current.next + } + + return tasks + } + + function resume () { + if (!self.paused) return + self.paused = false + for (var i = 0; i < self.concurrency; i++) { + _running++ + release() + } + } + + function idle () { + return _running === 0 && self.length() === 0 + } + + function push (value, done) { + var current = cache.get() + + current.context = context + current.release = release + current.value = value + current.callback = done || noop + current.errorHandler = errorHandler + + if (_running === self.concurrency || self.paused) { + if (queueTail) { + queueTail.next = current + queueTail = current + } else { + queueHead = current + queueTail = current + self.saturated() + } + } else { + _running++ + worker.call(context, current.value, current.worked) + } + } + + function unshift (value, done) { + var current = cache.get() + + current.context = context + current.release = release + current.value = value + current.callback = done || noop + + if (_running === self.concurrency || self.paused) { + if (queueHead) { + current.next = queueHead + queueHead = current + } else { + queueHead = current + queueTail = current + self.saturated() + } + } else { + _running++ + worker.call(context, current.value, current.worked) + } + } + + function release (holder) { + if (holder) { + cache.release(holder) + } + var next = queueHead + if (next) { + if (!self.paused) { + if (queueTail === queueHead) { + queueTail = null + } + queueHead = next.next + next.next = null + worker.call(context, next.value, next.worked) + if (queueTail === null) { + self.empty() + } + } else { + _running-- + } + } else if (--_running === 0) { + self.drain() + } + } + + function kill () { + queueHead = null + queueTail = null + self.drain = noop + } + + function killAndDrain () { + queueHead = null + queueTail = null + self.drain() + self.drain = noop + } + + function error (handler) { + errorHandler = handler + } +} + +function noop () {} + +function Task () { + this.value = null + this.callback = noop + this.next = null + this.release = noop + this.context = null + this.errorHandler = null + + var self = this + + this.worked = function worked (err, result) { + var callback = self.callback + var errorHandler = self.errorHandler + var val = self.value + self.value = null + self.callback = noop + if (self.errorHandler) { + errorHandler(err, val) + } + callback.call(self.context, err, result) + self.release(self) + } +} + +function queueAsPromised (context, worker, concurrency) { + if (typeof context === 'function') { + concurrency = worker + worker = context + context = null + } + + function asyncWrapper (arg, cb) { + worker.call(this, arg) + .then(function (res) { + cb(null, res) + }, cb) + } + + var queue = fastqueue(context, asyncWrapper, concurrency) + + var pushCb = queue.push + var unshiftCb = queue.unshift + + queue.push = push + queue.unshift = unshift + queue.drained = drained + + return queue + + function push (value) { + var p = new Promise(function (resolve, reject) { + pushCb(value, function (err, result) { + if (err) { + reject(err) + return + } + resolve(result) + }) + }) + + // Let's fork the promise chain to + // make the error bubble up to the user but + // not lead to a unhandledRejection + p.catch(noop) + + return p + } + + function unshift (value) { + var p = new Promise(function (resolve, reject) { + unshiftCb(value, function (err, result) { + if (err) { + reject(err) + return + } + resolve(result) + }) + }) + + // Let's fork the promise chain to + // make the error bubble up to the user but + // not lead to a unhandledRejection + p.catch(noop) + + return p + } + + function drained () { + var previousDrain = queue.drain + + var p = new Promise(function (resolve) { + queue.drain = function () { + previousDrain() + resolve() + } + }) + + return p + } +} + +module.exports = fastqueue +module.exports.promise = queueAsPromised diff --git a/tools/node_modules/eslint/node_modules/fill-range/LICENSE b/tools/node_modules/eslint/node_modules/fill-range/LICENSE new file mode 100644 index 00000000000..9af4a67d206 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fill-range/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/fill-range/index.js b/tools/node_modules/eslint/node_modules/fill-range/index.js new file mode 100644 index 00000000000..97ce35a5ba8 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fill-range/index.js @@ -0,0 +1,249 @@ +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +const util = require('util'); +const toRegexRange = require('to-regex-range'); + +const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); + +const transform = toNumber => { + return value => toNumber === true ? Number(value) : String(value); +}; + +const isValidValue = value => { + return typeof value === 'number' || (typeof value === 'string' && value !== ''); +}; + +const isNumber = num => Number.isInteger(+num); + +const zeros = input => { + let value = `${input}`; + let index = -1; + if (value[0] === '-') value = value.slice(1); + if (value === '0') return false; + while (value[++index] === '0'); + return index > 0; +}; + +const stringify = (start, end, options) => { + if (typeof start === 'string' || typeof end === 'string') { + return true; + } + return options.stringify === true; +}; + +const pad = (input, maxLength, toNumber) => { + if (maxLength > 0) { + let dash = input[0] === '-' ? '-' : ''; + if (dash) input = input.slice(1); + input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0')); + } + if (toNumber === false) { + return String(input); + } + return input; +}; + +const toMaxLen = (input, maxLength) => { + let negative = input[0] === '-' ? '-' : ''; + if (negative) { + input = input.slice(1); + maxLength--; + } + while (input.length < maxLength) input = '0' + input; + return negative ? ('-' + input) : input; +}; + +const toSequence = (parts, options) => { + parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + + let prefix = options.capture ? '' : '?:'; + let positives = ''; + let negatives = ''; + let result; + + if (parts.positives.length) { + positives = parts.positives.join('|'); + } + + if (parts.negatives.length) { + negatives = `-(${prefix}${parts.negatives.join('|')})`; + } + + if (positives && negatives) { + result = `${positives}|${negatives}`; + } else { + result = positives || negatives; + } + + if (options.wrap) { + return `(${prefix}${result})`; + } + + return result; +}; + +const toRange = (a, b, isNumbers, options) => { + if (isNumbers) { + return toRegexRange(a, b, { wrap: false, ...options }); + } + + let start = String.fromCharCode(a); + if (a === b) return start; + + let stop = String.fromCharCode(b); + return `[${start}-${stop}]`; +}; + +const toRegex = (start, end, options) => { + if (Array.isArray(start)) { + let wrap = options.wrap === true; + let prefix = options.capture ? '' : '?:'; + return wrap ? `(${prefix}${start.join('|')})` : start.join('|'); + } + return toRegexRange(start, end, options); +}; + +const rangeError = (...args) => { + return new RangeError('Invalid range arguments: ' + util.inspect(...args)); +}; + +const invalidRange = (start, end, options) => { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; +}; + +const invalidStep = (step, options) => { + if (options.strictRanges === true) { + throw new TypeError(`Expected step "${step}" to be a number`); + } + return []; +}; + +const fillNumbers = (start, end, step = 1, options = {}) => { + let a = Number(start); + let b = Number(end); + + if (!Number.isInteger(a) || !Number.isInteger(b)) { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; + } + + // fix negative zero + if (a === 0) a = 0; + if (b === 0) b = 0; + + let descending = a > b; + let startString = String(start); + let endString = String(end); + let stepString = String(step); + step = Math.max(Math.abs(step), 1); + + let padded = zeros(startString) || zeros(endString) || zeros(stepString); + let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; + let toNumber = padded === false && stringify(start, end, options) === false; + let format = options.transform || transform(toNumber); + + if (options.toRegex && step === 1) { + return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options); + } + + let parts = { negatives: [], positives: [] }; + let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num)); + let range = []; + let index = 0; + + while (descending ? a >= b : a <= b) { + if (options.toRegex === true && step > 1) { + push(a); + } else { + range.push(pad(format(a, index), maxLen, toNumber)); + } + a = descending ? a - step : a + step; + index++; + } + + if (options.toRegex === true) { + return step > 1 + ? toSequence(parts, options) + : toRegex(range, null, { wrap: false, ...options }); + } + + return range; +}; + +const fillLetters = (start, end, step = 1, options = {}) => { + if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) { + return invalidRange(start, end, options); + } + + + let format = options.transform || (val => String.fromCharCode(val)); + let a = `${start}`.charCodeAt(0); + let b = `${end}`.charCodeAt(0); + + let descending = a > b; + let min = Math.min(a, b); + let max = Math.max(a, b); + + if (options.toRegex && step === 1) { + return toRange(min, max, false, options); + } + + let range = []; + let index = 0; + + while (descending ? a >= b : a <= b) { + range.push(format(a, index)); + a = descending ? a - step : a + step; + index++; + } + + if (options.toRegex === true) { + return toRegex(range, null, { wrap: false, options }); + } + + return range; +}; + +const fill = (start, end, step, options = {}) => { + if (end == null && isValidValue(start)) { + return [start]; + } + + if (!isValidValue(start) || !isValidValue(end)) { + return invalidRange(start, end, options); + } + + if (typeof step === 'function') { + return fill(start, end, 1, { transform: step }); + } + + if (isObject(step)) { + return fill(start, end, 0, step); + } + + let opts = { ...options }; + if (opts.capture === true) opts.wrap = true; + step = step || opts.step || 1; + + if (!isNumber(step)) { + if (step != null && !isObject(step)) return invalidStep(step, opts); + return fill(start, end, 1, step); + } + + if (isNumber(start) && isNumber(end)) { + return fillNumbers(start, end, step, opts); + } + + return fillLetters(start, end, Math.max(Math.abs(step), 1), opts); +}; + +module.exports = fill; diff --git a/tools/node_modules/eslint/node_modules/fill-range/package.json b/tools/node_modules/eslint/node_modules/fill-range/package.json new file mode 100644 index 00000000000..07d30767f50 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/fill-range/package.json @@ -0,0 +1,69 @@ +{ + "name": "fill-range", + "description": "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`", + "version": "7.0.1", + "homepage": "https://github.com/jonschlinkert/fill-range", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Edo Rivai (edo.rivai.nl)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Paul Miller (paulmillr.com)", + "Rouven Weßling (www.rouvenwessling.de)", + "(https://github.com/wtgtybhertgeghgtwtg)" + ], + "repository": "jonschlinkert/fill-range", + "bugs": { + "url": "https://github.com/jonschlinkert/fill-range/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "devDependencies": { + "gulp-format-md": "^2.0.0", + "mocha": "^6.1.1" + }, + "keywords": [ + "alpha", + "alphabetical", + "array", + "bash", + "brace", + "expand", + "expansion", + "fill", + "glob", + "match", + "matches", + "matching", + "number", + "numerical", + "range", + "ranges", + "regex", + "sh" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/tools/node_modules/eslint/node_modules/find-up/index.js b/tools/node_modules/eslint/node_modules/find-up/index.js new file mode 100644 index 00000000000..ce564e5d322 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/find-up/index.js @@ -0,0 +1,89 @@ +'use strict'; +const path = require('path'); +const locatePath = require('locate-path'); +const pathExists = require('path-exists'); + +const stop = Symbol('findUp.stop'); + +module.exports = async (name, options = {}) => { + let directory = path.resolve(options.cwd || ''); + const {root} = path.parse(directory); + const paths = [].concat(name); + + const runMatcher = async locateOptions => { + if (typeof name !== 'function') { + return locatePath(paths, locateOptions); + } + + const foundPath = await name(locateOptions.cwd); + if (typeof foundPath === 'string') { + return locatePath([foundPath], locateOptions); + } + + return foundPath; + }; + + // eslint-disable-next-line no-constant-condition + while (true) { + // eslint-disable-next-line no-await-in-loop + const foundPath = await runMatcher({...options, cwd: directory}); + + if (foundPath === stop) { + return; + } + + if (foundPath) { + return path.resolve(directory, foundPath); + } + + if (directory === root) { + return; + } + + directory = path.dirname(directory); + } +}; + +module.exports.sync = (name, options = {}) => { + let directory = path.resolve(options.cwd || ''); + const {root} = path.parse(directory); + const paths = [].concat(name); + + const runMatcher = locateOptions => { + if (typeof name !== 'function') { + return locatePath.sync(paths, locateOptions); + } + + const foundPath = name(locateOptions.cwd); + if (typeof foundPath === 'string') { + return locatePath.sync([foundPath], locateOptions); + } + + return foundPath; + }; + + // eslint-disable-next-line no-constant-condition + while (true) { + const foundPath = runMatcher({...options, cwd: directory}); + + if (foundPath === stop) { + return; + } + + if (foundPath) { + return path.resolve(directory, foundPath); + } + + if (directory === root) { + return; + } + + directory = path.dirname(directory); + } +}; + +module.exports.exists = pathExists; + +module.exports.sync.exists = pathExists.sync; + +module.exports.stop = stop; diff --git a/tools/node_modules/eslint/node_modules/find-up/license b/tools/node_modules/eslint/node_modules/find-up/license new file mode 100644 index 00000000000..fa7ceba3eb4 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/find-up/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/find-up/package.json b/tools/node_modules/eslint/node_modules/find-up/package.json new file mode 100644 index 00000000000..56db6dd80a8 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/find-up/package.json @@ -0,0 +1,54 @@ +{ + "name": "find-up", + "version": "5.0.0", + "description": "Find a file or directory by walking up parent directories", + "license": "MIT", + "repository": "sindresorhus/find-up", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "find", + "up", + "find-up", + "findup", + "look-up", + "look", + "file", + "search", + "match", + "package", + "resolve", + "parent", + "parents", + "folder", + "directory", + "walk", + "walking", + "path" + ], + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "devDependencies": { + "ava": "^2.1.0", + "is-path-inside": "^2.1.0", + "tempy": "^0.6.0", + "tsd": "^0.13.1", + "xo": "^0.33.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/find-up/readme.md b/tools/node_modules/eslint/node_modules/find-up/readme.md new file mode 100644 index 00000000000..7ad908a7ce3 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/find-up/readme.md @@ -0,0 +1,151 @@ +# find-up [![Build Status](https://travis-ci.com/sindresorhus/find-up.svg?branch=master)](https://travis-ci.com/github/sindresorhus/find-up) + +> Find a file or directory by walking up parent directories + +## Install + +``` +$ npm install find-up +``` + +## Usage + +``` +/ +└── Users + └── sindresorhus + ├── unicorn.png + └── foo + └── bar + ├── baz + └── example.js +``` + +`example.js` + +```js +const path = require('path'); +const findUp = require('find-up'); + +(async () => { + console.log(await findUp('unicorn.png')); + //=> '/Users/sindresorhus/unicorn.png' + + console.log(await findUp(['rainbow.png', 'unicorn.png'])); + //=> '/Users/sindresorhus/unicorn.png' + + console.log(await findUp(async directory => { + const hasUnicorns = await findUp.exists(path.join(directory, 'unicorn.png')); + return hasUnicorns && directory; + }, {type: 'directory'})); + //=> '/Users/sindresorhus' +})(); +``` + +## API + +### findUp(name, options?) +### findUp(matcher, options?) + +Returns a `Promise` for either the path or `undefined` if it couldn't be found. + +### findUp([...name], options?) + +Returns a `Promise` for either the first path found (by respecting the order of the array) or `undefined` if none could be found. + +### findUp.sync(name, options?) +### findUp.sync(matcher, options?) + +Returns a path or `undefined` if it couldn't be found. + +### findUp.sync([...name], options?) + +Returns the first path found (by respecting the order of the array) or `undefined` if none could be found. + +#### name + +Type: `string` + +Name of the file or directory to find. + +#### matcher + +Type: `Function` + +A function that will be called with each directory until it returns a `string` with the path, which stops the search, or the root directory has been reached and nothing was found. Useful if you want to match files with certain patterns, set of permissions, or other advanced use-cases. + +When using async mode, the `matcher` may optionally be an async or promise-returning function that returns the path. + +#### options + +Type: `object` + +##### cwd + +Type: `string`\ +Default: `process.cwd()` + +Directory to start from. + +##### type + +Type: `string`\ +Default: `'file'`\ +Values: `'file'` `'directory'` + +The type of paths that can match. + +##### allowSymlinks + +Type: `boolean`\ +Default: `true` + +Allow symbolic links to match if they point to the chosen path type. + +### findUp.exists(path) + +Returns a `Promise` of whether the path exists. + +### findUp.sync.exists(path) + +Returns a `boolean` of whether the path exists. + +#### path + +Type: `string` + +Path to a file or directory. + +### findUp.stop + +A [`Symbol`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) that can be returned by a `matcher` function to stop the search and cause `findUp` to immediately return `undefined`. Useful as a performance optimization in case the current working directory is deeply nested in the filesystem. + +```js +const path = require('path'); +const findUp = require('find-up'); + +(async () => { + await findUp(directory => { + return path.basename(directory) === 'work' ? findUp.stop : 'logo.png'; + }); +})(); +``` + +## Related + +- [find-up-cli](https://github.com/sindresorhus/find-up-cli) - CLI for this module +- [pkg-up](https://github.com/sindresorhus/pkg-up) - Find the closest package.json file +- [pkg-dir](https://github.com/sindresorhus/pkg-dir) - Find the root directory of an npm package +- [resolve-from](https://github.com/sindresorhus/resolve-from) - Resolve the path of a module like `require.resolve()` but from a given path + +--- + +
    + + Get professional support for 'find-up' with a Tidelift subscription + +
    + + Tidelift helps make open source sustainable for maintainers while giving companies
    assurances about security, maintenance, and licensing for their dependencies. +
    +
    diff --git a/tools/node_modules/eslint/node_modules/flatted/SPECS.md b/tools/node_modules/eslint/node_modules/flatted/SPECS.md deleted file mode 100644 index c17dfb583c3..00000000000 --- a/tools/node_modules/eslint/node_modules/flatted/SPECS.md +++ /dev/null @@ -1,94 +0,0 @@ -# Flatted Specifications - -This document describes operations performed to produce, or parse, the flatted output. - -## stringify(any) => flattedString - -The output is always an `Array` that contains at index `0` the given value. - -If the value is an `Array` or an `Object`, per each property value passed through the callback, return the value as is if it's not an `Array`, an `Object`, or a `string`. - -In case it's an `Array`, an `Object`, or a `string`, return the index as `string`, associated through a `Map`. - -Giving the following example: - -```js -flatted.stringify('a'); // ["a"] -flatted.stringify(['a']); // [["1"],"a"] -flatted.stringify(['a', 1, 'b']); // [["1",1,"2"],"a","b"] -``` - -There is an `input` containing `[array, "a", "b"]`, where the `array` has indexes `"1"` and `"2"` as strings, indexes that point respectively at `"a"` and `"b"` within the input `[array, "a", "b"]`. - -The exact same happens for objects. - -```js -flatted.stringify('a'); // ["a"] -flatted.stringify({a: 'a'}); // [{"a":"1"},"a"] -flatted.stringify({a: 'a', n: 1, b: 'b'}); // [{"a":"1","n":1,"b":"2"},"a","b"] -``` - -Every object, string, or array, encountered during serialization will be stored once as stringified index. - -```js -// per each property/value of the object/array -if (any == null || !/object|string/.test(typeof any)) - return any; -if (!map.has(any)) { - const index = String(arr.length); - arr.push(any); - map.set(any, index); -} -return map.get(any); -``` - -This, performed before going through all properties, grants unique indexes per reference. - -The stringified indexes ensure there won't be conflicts with regularly stored numbers. - -## parse(flattedString) => any - -Everything that is a `string` is wrapped as `new String`, but strings in the array, from index `1` on, is kept as regular `string`. - -```js -const input = JSON.parse('[{"a":"1"},"b"]', Strings).map(strings); -// convert strings primitives into String instances -function Strings(key, value) { - return typeof value === 'string' ? new String(value) : value; -} -// converts String instances into strings primitives -function strings(value) { - return value instanceof String ? String(value) : value; -} -``` - -The `input` array will have a regular `string` at index `1`, but its object at index `0` will have an `instanceof String` as `.a` property. - -That is the key to place back values from the rest of the array, so that per each property of the object at index `0`, if the value is an `instanceof` String, something not serializable via JSON, it means it can be used to retrieve the position of its value from the `input` array. - -If such `value` is an object and it hasn't been parsed yet, add it as parsed and go through all its properties/values. - -```js -// outside any loop ... -const parsed = new Set; - -// ... per each property/value ... -if (value instanceof Primitive) { - const tmp = input[parseInt(value)]; - if (typeof tmp === 'object' && !parsed.has(tmp)) { - parsed.add(tmp); - output[key] = tmp; - if (typeof tmp === 'object' && tmp != null) { - // perform this same logic per - // each nested property/value ... - } - } else { - output[key] = tmp; - } -} else - output[key] = tmp; -``` - -As summary, the whole logic is based on polluting the de-serialization with a kind of variable that is unexpected, hence secure to use as directive to retrieve an index with a value. - -The usage of a `Map` and a `Set` to flag known references/strings as visited/stored makes **flatted** a rock solid, fast, and compact, solution. diff --git a/tools/node_modules/eslint/node_modules/flatted/esm.js b/tools/node_modules/eslint/node_modules/flatted/esm.js new file mode 100644 index 00000000000..c20ae09e976 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/flatted/esm.js @@ -0,0 +1,2 @@ +/*! (c) 2020 Andrea Giammarchi */ +const{parse:t,stringify:e}=JSON,{keys:n}=Object,o=String,c={},r=(t,e)=>e,s=t=>t instanceof o?o(t):t,l=(t,e)=>"string"==typeof e?new o(e):e,a=(t,e,r,s)=>{const l=[];for(let a=n(r),{length:f}=a,i=0;i{const c=o(e.push(n)-1);return t.set(n,c),c},i=(e,n)=>{const o=t(e,l).map(s),c=o[0],f=n||r,i="object"==typeof c&&c?a(o,new Set,c,f):c;return f.call({"":i},"",i)},p=(t,n,o)=>{const c=n&&"object"==typeof n?(t,e)=>""===t||-1t(p(e)),g=t=>i(e(t));export{g as fromJSON,i as parse,p as stringify,u as toJSON}; diff --git a/tools/node_modules/eslint/node_modules/flatted/flatted.jpg b/tools/node_modules/eslint/node_modules/flatted/flatted.jpg deleted file mode 100644 index 8ccee5f829c..00000000000 Binary files a/tools/node_modules/eslint/node_modules/flatted/flatted.jpg and /dev/null differ diff --git a/tools/node_modules/eslint/node_modules/flatted/index.js b/tools/node_modules/eslint/node_modules/flatted/index.js index 9cc91070180..afb193dc422 100644 --- a/tools/node_modules/eslint/node_modules/flatted/index.js +++ b/tools/node_modules/eslint/node_modules/flatted/index.js @@ -1,7 +1,15 @@ self.Flatted = (function (exports) { 'use strict'; - + function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); + } /*! (c) 2020 Andrea Giammarchi */ var $parse = JSON.parse, @@ -23,7 +31,7 @@ self.Flatted = (function (exports) { }; var Primitives = function Primitives(_, value) { - return typeof(value) === primitive ? new Primitive(value) : value; + return _typeof(value) === primitive ? new Primitive(value) : value; }; var revive = function revive(input, parsed, output, $) { @@ -36,7 +44,7 @@ self.Flatted = (function (exports) { if (value instanceof Primitive) { var tmp = input[value]; - if (typeof(tmp) === object && !parsed.has(tmp)) { + if (_typeof(tmp) === object && !parsed.has(tmp)) { parsed.add(tmp); output[k] = ignore; lazy.push({ @@ -67,13 +75,13 @@ self.Flatted = (function (exports) { var input = $parse(text, Primitives).map(primitives); var value = input[0]; var $ = reviver || noop; - var tmp = typeof(value) === object && value ? revive(input, new Set(), value, $) : value; + var tmp = _typeof(value) === object && value ? revive(input, new Set(), value, $) : value; return $.call({ '': tmp }, '', tmp); }; var stringify = function stringify(value, replacer, space) { - var $ = replacer && typeof(replacer) === object ? function (k, v) { + var $ = replacer && _typeof(replacer) === object ? function (k, v) { return k === '' || -1 < replacer.indexOf(k) ? v : void 0; } : replacer || noop; var known = new Map(); @@ -99,7 +107,7 @@ self.Flatted = (function (exports) { var after = $.call(this, key, value); - switch (typeof(after)) { + switch (_typeof(after)) { case object: if (after === null) return after; diff --git a/tools/node_modules/eslint/node_modules/flatted/min.js b/tools/node_modules/eslint/node_modules/flatted/min.js index a822de22434..b7a8efc10d3 100644 --- a/tools/node_modules/eslint/node_modules/flatted/min.js +++ b/tools/node_modules/eslint/node_modules/flatted/min.js @@ -1,2 +1,2 @@ -self.Flatted=function(n){"use strict"; -/*! (c) 2020 Andrea Giammarchi */var t=JSON.parse,r=JSON.stringify,e=Object.keys,u=String,a="string",f={},i="object",o=function(n,t){return t},c=function(n){return n instanceof u?u(n):n},l=function(n,t){return typeof t===a?new u(t):t},s=function n(t,r,a,o){for(var c=[],l=e(a),s=l.length,p=0;p ./coverage/lcov.info" @@ -34,28 +35,29 @@ }, "homepage": "https://github.com/WebReflection/flatted#readme", "devDependencies": { - "@babel/core": "^7.16.0", - "@babel/preset-env": "^7.16.0", - "@ungap/structured-clone": "^0.3.4", + "@babel/core": "^7.18.10", + "@babel/preset-env": "^7.18.10", + "@ungap/structured-clone": "^1.0.1", "ascjs": "^5.0.1", - "c8": "^7.10.0", + "c8": "^7.12.0", "circular-json": "^0.5.9", "circular-json-es6": "^2.0.2", - "drop-babel-typeof": "^1.0.3", - "jsan": "^3.1.13", - "rollup": "^2.59.0", + "jsan": "^3.1.14", + "rollup": "^2.78.1", "rollup-plugin-babel": "^4.4.0", "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-terser": "^7.0.2", - "terser": "^5.9.0" + "terser": "^5.14.2" }, "module": "./esm/index.js", "type": "module", "exports": { ".": { + "types": "./types.d.ts", "import": "./esm/index.js", "default": "./cjs/index.js" }, + "./esm": "./esm.js", "./package.json": "./package.json" } } diff --git a/tools/node_modules/eslint/node_modules/functional-red-black-tree/LICENSE b/tools/node_modules/eslint/node_modules/functional-red-black-tree/LICENSE deleted file mode 100644 index 8ce206a8454..00000000000 --- a/tools/node_modules/eslint/node_modules/functional-red-black-tree/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2013 Mikola Lysenko - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/functional-red-black-tree/package.json b/tools/node_modules/eslint/node_modules/functional-red-black-tree/package.json deleted file mode 100644 index 13d6f270cb9..00000000000 --- a/tools/node_modules/eslint/node_modules/functional-red-black-tree/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "functional-red-black-tree", - "version": "1.0.1", - "description": "A fully persistent balanced binary search tree", - "main": "rbtree.js", - "directories": { - "test": "test" - }, - "dependencies": {}, - "devDependencies": { - "iota-array": "^0.0.1", - "tape": "^2.12.0" - }, - "scripts": { - "test": "tape test/*.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/mikolalysenko/functional-red-black-tree.git" - }, - "keywords": [ - "functional", - "red", - "black", - "tree", - "binary", - "search", - "balance", - "persistent", - "fully", - "dynamic", - "data", - "structure" - ], - "author": "Mikola Lysenko", - "license": "MIT", - "bugs": { - "url": "https://github.com/mikolalysenko/functional-red-black-tree/issues" - } -} diff --git a/tools/node_modules/eslint/node_modules/functional-red-black-tree/rbtree.js b/tools/node_modules/eslint/node_modules/functional-red-black-tree/rbtree.js deleted file mode 100644 index 5a69a4090d4..00000000000 --- a/tools/node_modules/eslint/node_modules/functional-red-black-tree/rbtree.js +++ /dev/null @@ -1,996 +0,0 @@ -"use strict" - -module.exports = createRBTree - -var RED = 0 -var BLACK = 1 - -function RBNode(color, key, value, left, right, count) { - this._color = color - this.key = key - this.value = value - this.left = left - this.right = right - this._count = count -} - -function cloneNode(node) { - return new RBNode(node._color, node.key, node.value, node.left, node.right, node._count) -} - -function repaint(color, node) { - return new RBNode(color, node.key, node.value, node.left, node.right, node._count) -} - -function recount(node) { - node._count = 1 + (node.left ? node.left._count : 0) + (node.right ? node.right._count : 0) -} - -function RedBlackTree(compare, root) { - this._compare = compare - this.root = root -} - -var proto = RedBlackTree.prototype - -Object.defineProperty(proto, "keys", { - get: function() { - var result = [] - this.forEach(function(k,v) { - result.push(k) - }) - return result - } -}) - -Object.defineProperty(proto, "values", { - get: function() { - var result = [] - this.forEach(function(k,v) { - result.push(v) - }) - return result - } -}) - -//Returns the number of nodes in the tree -Object.defineProperty(proto, "length", { - get: function() { - if(this.root) { - return this.root._count - } - return 0 - } -}) - -//Insert a new item into the tree -proto.insert = function(key, value) { - var cmp = this._compare - //Find point to insert new node at - var n = this.root - var n_stack = [] - var d_stack = [] - while(n) { - var d = cmp(key, n.key) - n_stack.push(n) - d_stack.push(d) - if(d <= 0) { - n = n.left - } else { - n = n.right - } - } - //Rebuild path to leaf node - n_stack.push(new RBNode(RED, key, value, null, null, 1)) - for(var s=n_stack.length-2; s>=0; --s) { - var n = n_stack[s] - if(d_stack[s] <= 0) { - n_stack[s] = new RBNode(n._color, n.key, n.value, n_stack[s+1], n.right, n._count+1) - } else { - n_stack[s] = new RBNode(n._color, n.key, n.value, n.left, n_stack[s+1], n._count+1) - } - } - //Rebalance tree using rotations - //console.log("start insert", key, d_stack) - for(var s=n_stack.length-1; s>1; --s) { - var p = n_stack[s-1] - var n = n_stack[s] - if(p._color === BLACK || n._color === BLACK) { - break - } - var pp = n_stack[s-2] - if(pp.left === p) { - if(p.left === n) { - var y = pp.right - if(y && y._color === RED) { - //console.log("LLr") - p._color = BLACK - pp.right = repaint(BLACK, y) - pp._color = RED - s -= 1 - } else { - //console.log("LLb") - pp._color = RED - pp.left = p.right - p._color = BLACK - p.right = pp - n_stack[s-2] = p - n_stack[s-1] = n - recount(pp) - recount(p) - if(s >= 3) { - var ppp = n_stack[s-3] - if(ppp.left === pp) { - ppp.left = p - } else { - ppp.right = p - } - } - break - } - } else { - var y = pp.right - if(y && y._color === RED) { - //console.log("LRr") - p._color = BLACK - pp.right = repaint(BLACK, y) - pp._color = RED - s -= 1 - } else { - //console.log("LRb") - p.right = n.left - pp._color = RED - pp.left = n.right - n._color = BLACK - n.left = p - n.right = pp - n_stack[s-2] = n - n_stack[s-1] = p - recount(pp) - recount(p) - recount(n) - if(s >= 3) { - var ppp = n_stack[s-3] - if(ppp.left === pp) { - ppp.left = n - } else { - ppp.right = n - } - } - break - } - } - } else { - if(p.right === n) { - var y = pp.left - if(y && y._color === RED) { - //console.log("RRr", y.key) - p._color = BLACK - pp.left = repaint(BLACK, y) - pp._color = RED - s -= 1 - } else { - //console.log("RRb") - pp._color = RED - pp.right = p.left - p._color = BLACK - p.left = pp - n_stack[s-2] = p - n_stack[s-1] = n - recount(pp) - recount(p) - if(s >= 3) { - var ppp = n_stack[s-3] - if(ppp.right === pp) { - ppp.right = p - } else { - ppp.left = p - } - } - break - } - } else { - var y = pp.left - if(y && y._color === RED) { - //console.log("RLr") - p._color = BLACK - pp.left = repaint(BLACK, y) - pp._color = RED - s -= 1 - } else { - //console.log("RLb") - p.left = n.right - pp._color = RED - pp.right = n.left - n._color = BLACK - n.right = p - n.left = pp - n_stack[s-2] = n - n_stack[s-1] = p - recount(pp) - recount(p) - recount(n) - if(s >= 3) { - var ppp = n_stack[s-3] - if(ppp.right === pp) { - ppp.right = n - } else { - ppp.left = n - } - } - break - } - } - } - } - //Return new tree - n_stack[0]._color = BLACK - return new RedBlackTree(cmp, n_stack[0]) -} - - -//Visit all nodes inorder -function doVisitFull(visit, node) { - if(node.left) { - var v = doVisitFull(visit, node.left) - if(v) { return v } - } - var v = visit(node.key, node.value) - if(v) { return v } - if(node.right) { - return doVisitFull(visit, node.right) - } -} - -//Visit half nodes in order -function doVisitHalf(lo, compare, visit, node) { - var l = compare(lo, node.key) - if(l <= 0) { - if(node.left) { - var v = doVisitHalf(lo, compare, visit, node.left) - if(v) { return v } - } - var v = visit(node.key, node.value) - if(v) { return v } - } - if(node.right) { - return doVisitHalf(lo, compare, visit, node.right) - } -} - -//Visit all nodes within a range -function doVisit(lo, hi, compare, visit, node) { - var l = compare(lo, node.key) - var h = compare(hi, node.key) - var v - if(l <= 0) { - if(node.left) { - v = doVisit(lo, hi, compare, visit, node.left) - if(v) { return v } - } - if(h > 0) { - v = visit(node.key, node.value) - if(v) { return v } - } - } - if(h > 0 && node.right) { - return doVisit(lo, hi, compare, visit, node.right) - } -} - - -proto.forEach = function rbTreeForEach(visit, lo, hi) { - if(!this.root) { - return - } - switch(arguments.length) { - case 1: - return doVisitFull(visit, this.root) - break - - case 2: - return doVisitHalf(lo, this._compare, visit, this.root) - break - - case 3: - if(this._compare(lo, hi) >= 0) { - return - } - return doVisit(lo, hi, this._compare, visit, this.root) - break - } -} - -//First item in list -Object.defineProperty(proto, "begin", { - get: function() { - var stack = [] - var n = this.root - while(n) { - stack.push(n) - n = n.left - } - return new RedBlackTreeIterator(this, stack) - } -}) - -//Last item in list -Object.defineProperty(proto, "end", { - get: function() { - var stack = [] - var n = this.root - while(n) { - stack.push(n) - n = n.right - } - return new RedBlackTreeIterator(this, stack) - } -}) - -//Find the ith item in the tree -proto.at = function(idx) { - if(idx < 0) { - return new RedBlackTreeIterator(this, []) - } - var n = this.root - var stack = [] - while(true) { - stack.push(n) - if(n.left) { - if(idx < n.left._count) { - n = n.left - continue - } - idx -= n.left._count - } - if(!idx) { - return new RedBlackTreeIterator(this, stack) - } - idx -= 1 - if(n.right) { - if(idx >= n.right._count) { - break - } - n = n.right - } else { - break - } - } - return new RedBlackTreeIterator(this, []) -} - -proto.ge = function(key) { - var cmp = this._compare - var n = this.root - var stack = [] - var last_ptr = 0 - while(n) { - var d = cmp(key, n.key) - stack.push(n) - if(d <= 0) { - last_ptr = stack.length - } - if(d <= 0) { - n = n.left - } else { - n = n.right - } - } - stack.length = last_ptr - return new RedBlackTreeIterator(this, stack) -} - -proto.gt = function(key) { - var cmp = this._compare - var n = this.root - var stack = [] - var last_ptr = 0 - while(n) { - var d = cmp(key, n.key) - stack.push(n) - if(d < 0) { - last_ptr = stack.length - } - if(d < 0) { - n = n.left - } else { - n = n.right - } - } - stack.length = last_ptr - return new RedBlackTreeIterator(this, stack) -} - -proto.lt = function(key) { - var cmp = this._compare - var n = this.root - var stack = [] - var last_ptr = 0 - while(n) { - var d = cmp(key, n.key) - stack.push(n) - if(d > 0) { - last_ptr = stack.length - } - if(d <= 0) { - n = n.left - } else { - n = n.right - } - } - stack.length = last_ptr - return new RedBlackTreeIterator(this, stack) -} - -proto.le = function(key) { - var cmp = this._compare - var n = this.root - var stack = [] - var last_ptr = 0 - while(n) { - var d = cmp(key, n.key) - stack.push(n) - if(d >= 0) { - last_ptr = stack.length - } - if(d < 0) { - n = n.left - } else { - n = n.right - } - } - stack.length = last_ptr - return new RedBlackTreeIterator(this, stack) -} - -//Finds the item with key if it exists -proto.find = function(key) { - var cmp = this._compare - var n = this.root - var stack = [] - while(n) { - var d = cmp(key, n.key) - stack.push(n) - if(d === 0) { - return new RedBlackTreeIterator(this, stack) - } - if(d <= 0) { - n = n.left - } else { - n = n.right - } - } - return new RedBlackTreeIterator(this, []) -} - -//Removes item with key from tree -proto.remove = function(key) { - var iter = this.find(key) - if(iter) { - return iter.remove() - } - return this -} - -//Returns the item at `key` -proto.get = function(key) { - var cmp = this._compare - var n = this.root - while(n) { - var d = cmp(key, n.key) - if(d === 0) { - return n.value - } - if(d <= 0) { - n = n.left - } else { - n = n.right - } - } - return -} - -//Iterator for red black tree -function RedBlackTreeIterator(tree, stack) { - this.tree = tree - this._stack = stack -} - -var iproto = RedBlackTreeIterator.prototype - -//Test if iterator is valid -Object.defineProperty(iproto, "valid", { - get: function() { - return this._stack.length > 0 - } -}) - -//Node of the iterator -Object.defineProperty(iproto, "node", { - get: function() { - if(this._stack.length > 0) { - return this._stack[this._stack.length-1] - } - return null - }, - enumerable: true -}) - -//Makes a copy of an iterator -iproto.clone = function() { - return new RedBlackTreeIterator(this.tree, this._stack.slice()) -} - -//Swaps two nodes -function swapNode(n, v) { - n.key = v.key - n.value = v.value - n.left = v.left - n.right = v.right - n._color = v._color - n._count = v._count -} - -//Fix up a double black node in a tree -function fixDoubleBlack(stack) { - var n, p, s, z - for(var i=stack.length-1; i>=0; --i) { - n = stack[i] - if(i === 0) { - n._color = BLACK - return - } - //console.log("visit node:", n.key, i, stack[i].key, stack[i-1].key) - p = stack[i-1] - if(p.left === n) { - //console.log("left child") - s = p.right - if(s.right && s.right._color === RED) { - //console.log("case 1: right sibling child red") - s = p.right = cloneNode(s) - z = s.right = cloneNode(s.right) - p.right = s.left - s.left = p - s.right = z - s._color = p._color - n._color = BLACK - p._color = BLACK - z._color = BLACK - recount(p) - recount(s) - if(i > 1) { - var pp = stack[i-2] - if(pp.left === p) { - pp.left = s - } else { - pp.right = s - } - } - stack[i-1] = s - return - } else if(s.left && s.left._color === RED) { - //console.log("case 1: left sibling child red") - s = p.right = cloneNode(s) - z = s.left = cloneNode(s.left) - p.right = z.left - s.left = z.right - z.left = p - z.right = s - z._color = p._color - p._color = BLACK - s._color = BLACK - n._color = BLACK - recount(p) - recount(s) - recount(z) - if(i > 1) { - var pp = stack[i-2] - if(pp.left === p) { - pp.left = z - } else { - pp.right = z - } - } - stack[i-1] = z - return - } - if(s._color === BLACK) { - if(p._color === RED) { - //console.log("case 2: black sibling, red parent", p.right.value) - p._color = BLACK - p.right = repaint(RED, s) - return - } else { - //console.log("case 2: black sibling, black parent", p.right.value) - p.right = repaint(RED, s) - continue - } - } else { - //console.log("case 3: red sibling") - s = cloneNode(s) - p.right = s.left - s.left = p - s._color = p._color - p._color = RED - recount(p) - recount(s) - if(i > 1) { - var pp = stack[i-2] - if(pp.left === p) { - pp.left = s - } else { - pp.right = s - } - } - stack[i-1] = s - stack[i] = p - if(i+1 < stack.length) { - stack[i+1] = n - } else { - stack.push(n) - } - i = i+2 - } - } else { - //console.log("right child") - s = p.left - if(s.left && s.left._color === RED) { - //console.log("case 1: left sibling child red", p.value, p._color) - s = p.left = cloneNode(s) - z = s.left = cloneNode(s.left) - p.left = s.right - s.right = p - s.left = z - s._color = p._color - n._color = BLACK - p._color = BLACK - z._color = BLACK - recount(p) - recount(s) - if(i > 1) { - var pp = stack[i-2] - if(pp.right === p) { - pp.right = s - } else { - pp.left = s - } - } - stack[i-1] = s - return - } else if(s.right && s.right._color === RED) { - //console.log("case 1: right sibling child red") - s = p.left = cloneNode(s) - z = s.right = cloneNode(s.right) - p.left = z.right - s.right = z.left - z.right = p - z.left = s - z._color = p._color - p._color = BLACK - s._color = BLACK - n._color = BLACK - recount(p) - recount(s) - recount(z) - if(i > 1) { - var pp = stack[i-2] - if(pp.right === p) { - pp.right = z - } else { - pp.left = z - } - } - stack[i-1] = z - return - } - if(s._color === BLACK) { - if(p._color === RED) { - //console.log("case 2: black sibling, red parent") - p._color = BLACK - p.left = repaint(RED, s) - return - } else { - //console.log("case 2: black sibling, black parent") - p.left = repaint(RED, s) - continue - } - } else { - //console.log("case 3: red sibling") - s = cloneNode(s) - p.left = s.right - s.right = p - s._color = p._color - p._color = RED - recount(p) - recount(s) - if(i > 1) { - var pp = stack[i-2] - if(pp.right === p) { - pp.right = s - } else { - pp.left = s - } - } - stack[i-1] = s - stack[i] = p - if(i+1 < stack.length) { - stack[i+1] = n - } else { - stack.push(n) - } - i = i+2 - } - } - } -} - -//Removes item at iterator from tree -iproto.remove = function() { - var stack = this._stack - if(stack.length === 0) { - return this.tree - } - //First copy path to node - var cstack = new Array(stack.length) - var n = stack[stack.length-1] - cstack[cstack.length-1] = new RBNode(n._color, n.key, n.value, n.left, n.right, n._count) - for(var i=stack.length-2; i>=0; --i) { - var n = stack[i] - if(n.left === stack[i+1]) { - cstack[i] = new RBNode(n._color, n.key, n.value, cstack[i+1], n.right, n._count) - } else { - cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count) - } - } - - //Get node - n = cstack[cstack.length-1] - //console.log("start remove: ", n.value) - - //If not leaf, then swap with previous node - if(n.left && n.right) { - //console.log("moving to leaf") - - //First walk to previous leaf - var split = cstack.length - n = n.left - while(n.right) { - cstack.push(n) - n = n.right - } - //Copy path to leaf - var v = cstack[split-1] - cstack.push(new RBNode(n._color, v.key, v.value, n.left, n.right, n._count)) - cstack[split-1].key = n.key - cstack[split-1].value = n.value - - //Fix up stack - for(var i=cstack.length-2; i>=split; --i) { - n = cstack[i] - cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count) - } - cstack[split-1].left = cstack[split] - } - //console.log("stack=", cstack.map(function(v) { return v.value })) - - //Remove leaf node - n = cstack[cstack.length-1] - if(n._color === RED) { - //Easy case: removing red leaf - //console.log("RED leaf") - var p = cstack[cstack.length-2] - if(p.left === n) { - p.left = null - } else if(p.right === n) { - p.right = null - } - cstack.pop() - for(var i=0; i 0) { - return this._stack[this._stack.length-1].key - } - return - }, - enumerable: true -}) - -//Returns value -Object.defineProperty(iproto, "value", { - get: function() { - if(this._stack.length > 0) { - return this._stack[this._stack.length-1].value - } - return - }, - enumerable: true -}) - - -//Returns the position of this iterator in the sorted list -Object.defineProperty(iproto, "index", { - get: function() { - var idx = 0 - var stack = this._stack - if(stack.length === 0) { - var r = this.tree.root - if(r) { - return r._count - } - return 0 - } else if(stack[stack.length-1].left) { - idx = stack[stack.length-1].left._count - } - for(var s=stack.length-2; s>=0; --s) { - if(stack[s+1] === stack[s].right) { - ++idx - if(stack[s].left) { - idx += stack[s].left._count - } - } - } - return idx - }, - enumerable: true -}) - -//Advances iterator to next element in list -iproto.next = function() { - var stack = this._stack - if(stack.length === 0) { - return - } - var n = stack[stack.length-1] - if(n.right) { - n = n.right - while(n) { - stack.push(n) - n = n.left - } - } else { - stack.pop() - while(stack.length > 0 && stack[stack.length-1].right === n) { - n = stack[stack.length-1] - stack.pop() - } - } -} - -//Checks if iterator is at end of tree -Object.defineProperty(iproto, "hasNext", { - get: function() { - var stack = this._stack - if(stack.length === 0) { - return false - } - if(stack[stack.length-1].right) { - return true - } - for(var s=stack.length-1; s>0; --s) { - if(stack[s-1].left === stack[s]) { - return true - } - } - return false - } -}) - -//Update value -iproto.update = function(value) { - var stack = this._stack - if(stack.length === 0) { - throw new Error("Can't update empty node!") - } - var cstack = new Array(stack.length) - var n = stack[stack.length-1] - cstack[cstack.length-1] = new RBNode(n._color, n.key, value, n.left, n.right, n._count) - for(var i=stack.length-2; i>=0; --i) { - n = stack[i] - if(n.left === stack[i+1]) { - cstack[i] = new RBNode(n._color, n.key, n.value, cstack[i+1], n.right, n._count) - } else { - cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count) - } - } - return new RedBlackTree(this.tree._compare, cstack[0]) -} - -//Moves iterator backward one element -iproto.prev = function() { - var stack = this._stack - if(stack.length === 0) { - return - } - var n = stack[stack.length-1] - if(n.left) { - n = n.left - while(n) { - stack.push(n) - n = n.right - } - } else { - stack.pop() - while(stack.length > 0 && stack[stack.length-1].left === n) { - n = stack[stack.length-1] - stack.pop() - } - } -} - -//Checks if iterator is at start of tree -Object.defineProperty(iproto, "hasPrev", { - get: function() { - var stack = this._stack - if(stack.length === 0) { - return false - } - if(stack[stack.length-1].left) { - return true - } - for(var s=stack.length-1; s>0; --s) { - if(stack[s-1].right === stack[s]) { - return true - } - } - return false - } -}) - -//Default comparison function -function defaultCompare(a, b) { - if(a < b) { - return -1 - } - if(a > b) { - return 1 - } - return 0 -} - -//Build a tree -function createRBTree(compare) { - return new RedBlackTree(compare || defaultCompare, null) -} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/glob/common.js b/tools/node_modules/eslint/node_modules/glob/common.js index 8e363b6c1f1..424c46e1dab 100644 --- a/tools/node_modules/eslint/node_modules/glob/common.js +++ b/tools/node_modules/eslint/node_modules/glob/common.js @@ -110,6 +110,8 @@ function setopts (self, pattern, options) { // Note that they are not supported in Glob itself anyway. options.nonegate = true options.nocomment = true + // always treat \ in patterns as escapes, not path separators + options.allowWindowsEscape = false self.minimatch = new Minimatch(pattern, options) self.options = self.minimatch.options diff --git a/tools/node_modules/eslint/node_modules/glob/glob.js b/tools/node_modules/eslint/node_modules/glob/glob.js index afcf82752c3..37a4d7e6077 100644 --- a/tools/node_modules/eslint/node_modules/glob/glob.js +++ b/tools/node_modules/eslint/node_modules/glob/glob.js @@ -342,7 +342,10 @@ Glob.prototype._process = function (pattern, index, inGlobStar, cb) { var read if (prefix === null) read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + else if (isAbsolute(prefix) || + isAbsolute(pattern.map(function (p) { + return typeof p === 'string' ? p : '[*]' + }).join('/'))) { if (!prefix || !isAbsolute(prefix)) prefix = '/' + prefix read = prefix diff --git a/tools/node_modules/eslint/node_modules/glob/package.json b/tools/node_modules/eslint/node_modules/glob/package.json index cc1a57a896e..5940b649b7e 100644 --- a/tools/node_modules/eslint/node_modules/glob/package.json +++ b/tools/node_modules/eslint/node_modules/glob/package.json @@ -2,7 +2,10 @@ "author": "Isaac Z. Schlueter (http://blog.izs.me/)", "name": "glob", "description": "a little globber", - "version": "7.2.0", + "version": "7.2.3", + "publishConfig": { + "tag": "v7-legacy" + }, "repository": { "type": "git", "url": "git://github.com/isaacs/node-glob.git" @@ -20,7 +23,7 @@ "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, diff --git a/tools/node_modules/eslint/node_modules/glob/sync.js b/tools/node_modules/eslint/node_modules/glob/sync.js index 4f46f90559a..2c4f480192d 100644 --- a/tools/node_modules/eslint/node_modules/glob/sync.js +++ b/tools/node_modules/eslint/node_modules/glob/sync.js @@ -48,7 +48,7 @@ function GlobSync (pattern, options) { } GlobSync.prototype._finish = function () { - assert(this instanceof GlobSync) + assert.ok(this instanceof GlobSync) if (this.realpath) { var self = this this.matches.forEach(function (matchset, index) { @@ -72,7 +72,7 @@ GlobSync.prototype._finish = function () { GlobSync.prototype._process = function (pattern, index, inGlobStar) { - assert(this instanceof GlobSync) + assert.ok(this instanceof GlobSync) // Get the first [n] parts of pattern that are all strings. var n = 0 @@ -109,7 +109,10 @@ GlobSync.prototype._process = function (pattern, index, inGlobStar) { var read if (prefix === null) read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + else if (isAbsolute(prefix) || + isAbsolute(pattern.map(function (p) { + return typeof p === 'string' ? p : '[*]' + }).join('/'))) { if (!prefix || !isAbsolute(prefix)) prefix = '/' + prefix read = prefix diff --git a/tools/node_modules/eslint/node_modules/globals/globals.json b/tools/node_modules/eslint/node_modules/globals/globals.json index 051a31e0489..c24ab96c4e9 100644 --- a/tools/node_modules/eslint/node_modules/globals/globals.json +++ b/tools/node_modules/eslint/node_modules/globals/globals.json @@ -511,6 +511,7 @@ "FontFace": false, "FontFaceSetLoadEvent": false, "FormData": false, + "FormDataEvent": false, "frameElement": false, "frames": false, "GainNode": false, @@ -646,6 +647,7 @@ "MediaKeyStatusMap": false, "MediaKeySystemAccess": false, "MediaList": false, + "MediaMetadata": false, "MediaQueryList": false, "MediaQueryListEvent": false, "MediaRecorder": false, @@ -854,6 +856,7 @@ "registerProcessor": false, "RemotePlayback": false, "removeEventListener": false, + "reportError": false, "Request": false, "requestAnimationFrame": false, "requestIdleCallback": false, @@ -916,9 +919,11 @@ "Storage": false, "StorageEvent": false, "StorageManager": false, + "structuredClone": false, "styleMedia": false, "StyleSheet": false, "StyleSheetList": false, + "SubmitEvent": false, "SubtleCrypto": false, "SVGAElement": false, "SVGAngle": false, @@ -1035,6 +1040,7 @@ "TouchEvent": false, "TouchList": false, "TrackEvent": false, + "TransformStream": false, "TransitionEvent": false, "TreeWalker": false, "UIEvent": false, @@ -1092,6 +1098,9 @@ "clearTimeout": false, "close": true, "console": false, + "CustomEvent": false, + "ErrorEvent": false, + "Event": false, "fetch": false, "FileReaderSync": false, "FormData": false, @@ -1112,6 +1121,7 @@ "indexedDB": false, "location": false, "MessageChannel": false, + "MessageEvent": false, "MessagePort": false, "name": false, "navigator": false, @@ -1137,6 +1147,7 @@ "Promise": false, "queueMicrotask": false, "removeEventListener": false, + "reportError": false, "Request": false, "Response": false, "self": true, @@ -1168,6 +1179,7 @@ "Event": false, "EventTarget": false, "exports": true, + "fetch": false, "global": false, "Intl": false, "MessageChannel": false, @@ -1200,6 +1212,7 @@ "DOMException": false, "Event": false, "EventTarget": false, + "fetch": false, "global": false, "Intl": false, "MessageChannel": false, @@ -1575,6 +1588,9 @@ "Clients": false, "close": true, "console": false, + "CustomEvent": false, + "ErrorEvent": false, + "Event": false, "ExtendableEvent": false, "ExtendableMessageEvent": false, "fetch": false, @@ -1598,6 +1614,7 @@ "indexedDB": false, "location": false, "MessageChannel": false, + "MessageEvent": false, "MessagePort": false, "name": false, "navigator": false, @@ -1701,6 +1718,7 @@ "DOMException": false, "Event": false, "EventTarget": false, + "fetch": false, "Intl": false, "MessageChannel": false, "MessageEvent": false, @@ -1709,6 +1727,7 @@ "queueMicrotask": false, "setInterval": false, "setTimeout": false, + "structuredClone": false, "TextDecoder": false, "TextEncoder": false, "URL": false, diff --git a/tools/node_modules/eslint/node_modules/globals/package.json b/tools/node_modules/eslint/node_modules/globals/package.json index 4a1af774ee9..f38232e920e 100644 --- a/tools/node_modules/eslint/node_modules/globals/package.json +++ b/tools/node_modules/eslint/node_modules/globals/package.json @@ -1,6 +1,6 @@ { "name": "globals", - "version": "13.12.1", + "version": "13.17.0", "description": "Global identifiers from different JavaScript environments", "license": "MIT", "repository": "sindresorhus/globals", diff --git a/tools/node_modules/eslint/node_modules/globby/gitignore.js b/tools/node_modules/eslint/node_modules/globby/gitignore.js new file mode 100644 index 00000000000..2f77baaaaa5 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/globby/gitignore.js @@ -0,0 +1,120 @@ +'use strict'; +const {promisify} = require('util'); +const fs = require('fs'); +const path = require('path'); +const fastGlob = require('fast-glob'); +const gitIgnore = require('ignore'); +const slash = require('slash'); + +const DEFAULT_IGNORE = [ + '**/node_modules/**', + '**/flow-typed/**', + '**/coverage/**', + '**/.git' +]; + +const readFileP = promisify(fs.readFile); + +const mapGitIgnorePatternTo = base => ignore => { + if (ignore.startsWith('!')) { + return '!' + path.posix.join(base, ignore.slice(1)); + } + + return path.posix.join(base, ignore); +}; + +const parseGitIgnore = (content, options) => { + const base = slash(path.relative(options.cwd, path.dirname(options.fileName))); + + return content + .split(/\r?\n/) + .filter(Boolean) + .filter(line => !line.startsWith('#')) + .map(mapGitIgnorePatternTo(base)); +}; + +const reduceIgnore = files => { + const ignores = gitIgnore(); + for (const file of files) { + ignores.add(parseGitIgnore(file.content, { + cwd: file.cwd, + fileName: file.filePath + })); + } + + return ignores; +}; + +const ensureAbsolutePathForCwd = (cwd, p) => { + cwd = slash(cwd); + if (path.isAbsolute(p)) { + if (slash(p).startsWith(cwd)) { + return p; + } + + throw new Error(`Path ${p} is not in cwd ${cwd}`); + } + + return path.join(cwd, p); +}; + +const getIsIgnoredPredecate = (ignores, cwd) => { + return p => ignores.ignores(slash(path.relative(cwd, ensureAbsolutePathForCwd(cwd, p.path || p)))); +}; + +const getFile = async (file, cwd) => { + const filePath = path.join(cwd, file); + const content = await readFileP(filePath, 'utf8'); + + return { + cwd, + filePath, + content + }; +}; + +const getFileSync = (file, cwd) => { + const filePath = path.join(cwd, file); + const content = fs.readFileSync(filePath, 'utf8'); + + return { + cwd, + filePath, + content + }; +}; + +const normalizeOptions = ({ + ignore = [], + cwd = slash(process.cwd()) +} = {}) => { + return {ignore, cwd}; +}; + +module.exports = async options => { + options = normalizeOptions(options); + + const paths = await fastGlob('**/.gitignore', { + ignore: DEFAULT_IGNORE.concat(options.ignore), + cwd: options.cwd + }); + + const files = await Promise.all(paths.map(file => getFile(file, options.cwd))); + const ignores = reduceIgnore(files); + + return getIsIgnoredPredecate(ignores, options.cwd); +}; + +module.exports.sync = options => { + options = normalizeOptions(options); + + const paths = fastGlob.sync('**/.gitignore', { + ignore: DEFAULT_IGNORE.concat(options.ignore), + cwd: options.cwd + }); + + const files = paths.map(file => getFileSync(file, options.cwd)); + const ignores = reduceIgnore(files); + + return getIsIgnoredPredecate(ignores, options.cwd); +}; diff --git a/tools/node_modules/eslint/node_modules/globby/index.js b/tools/node_modules/eslint/node_modules/globby/index.js new file mode 100644 index 00000000000..b2d503bb15e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/globby/index.js @@ -0,0 +1,181 @@ +'use strict'; +const fs = require('fs'); +const arrayUnion = require('array-union'); +const merge2 = require('merge2'); +const fastGlob = require('fast-glob'); +const dirGlob = require('dir-glob'); +const gitignore = require('./gitignore'); +const {FilterStream, UniqueStream} = require('./stream-utils'); + +const DEFAULT_FILTER = () => false; + +const isNegative = pattern => pattern[0] === '!'; + +const assertPatternsInput = patterns => { + if (!patterns.every(pattern => typeof pattern === 'string')) { + throw new TypeError('Patterns must be a string or an array of strings'); + } +}; + +const checkCwdOption = (options = {}) => { + if (!options.cwd) { + return; + } + + let stat; + try { + stat = fs.statSync(options.cwd); + } catch { + return; + } + + if (!stat.isDirectory()) { + throw new Error('The `cwd` option must be a path to a directory'); + } +}; + +const getPathString = p => p.stats instanceof fs.Stats ? p.path : p; + +const generateGlobTasks = (patterns, taskOptions) => { + patterns = arrayUnion([].concat(patterns)); + assertPatternsInput(patterns); + checkCwdOption(taskOptions); + + const globTasks = []; + + taskOptions = { + ignore: [], + expandDirectories: true, + ...taskOptions + }; + + for (const [index, pattern] of patterns.entries()) { + if (isNegative(pattern)) { + continue; + } + + const ignore = patterns + .slice(index) + .filter(pattern => isNegative(pattern)) + .map(pattern => pattern.slice(1)); + + const options = { + ...taskOptions, + ignore: taskOptions.ignore.concat(ignore) + }; + + globTasks.push({pattern, options}); + } + + return globTasks; +}; + +const globDirs = (task, fn) => { + let options = {}; + if (task.options.cwd) { + options.cwd = task.options.cwd; + } + + if (Array.isArray(task.options.expandDirectories)) { + options = { + ...options, + files: task.options.expandDirectories + }; + } else if (typeof task.options.expandDirectories === 'object') { + options = { + ...options, + ...task.options.expandDirectories + }; + } + + return fn(task.pattern, options); +}; + +const getPattern = (task, fn) => task.options.expandDirectories ? globDirs(task, fn) : [task.pattern]; + +const getFilterSync = options => { + return options && options.gitignore ? + gitignore.sync({cwd: options.cwd, ignore: options.ignore}) : + DEFAULT_FILTER; +}; + +const globToTask = task => glob => { + const {options} = task; + if (options.ignore && Array.isArray(options.ignore) && options.expandDirectories) { + options.ignore = dirGlob.sync(options.ignore); + } + + return { + pattern: glob, + options + }; +}; + +module.exports = async (patterns, options) => { + const globTasks = generateGlobTasks(patterns, options); + + const getFilter = async () => { + return options && options.gitignore ? + gitignore({cwd: options.cwd, ignore: options.ignore}) : + DEFAULT_FILTER; + }; + + const getTasks = async () => { + const tasks = await Promise.all(globTasks.map(async task => { + const globs = await getPattern(task, dirGlob); + return Promise.all(globs.map(globToTask(task))); + })); + + return arrayUnion(...tasks); + }; + + const [filter, tasks] = await Promise.all([getFilter(), getTasks()]); + const paths = await Promise.all(tasks.map(task => fastGlob(task.pattern, task.options))); + + return arrayUnion(...paths).filter(path_ => !filter(getPathString(path_))); +}; + +module.exports.sync = (patterns, options) => { + const globTasks = generateGlobTasks(patterns, options); + + const tasks = []; + for (const task of globTasks) { + const newTask = getPattern(task, dirGlob.sync).map(globToTask(task)); + tasks.push(...newTask); + } + + const filter = getFilterSync(options); + + let matches = []; + for (const task of tasks) { + matches = arrayUnion(matches, fastGlob.sync(task.pattern, task.options)); + } + + return matches.filter(path_ => !filter(path_)); +}; + +module.exports.stream = (patterns, options) => { + const globTasks = generateGlobTasks(patterns, options); + + const tasks = []; + for (const task of globTasks) { + const newTask = getPattern(task, dirGlob.sync).map(globToTask(task)); + tasks.push(...newTask); + } + + const filter = getFilterSync(options); + const filterStream = new FilterStream(p => !filter(p)); + const uniqueStream = new UniqueStream(); + + return merge2(tasks.map(task => fastGlob.stream(task.pattern, task.options))) + .pipe(filterStream) + .pipe(uniqueStream); +}; + +module.exports.generateGlobTasks = generateGlobTasks; + +module.exports.hasMagic = (patterns, options) => [] + .concat(patterns) + .some(pattern => fastGlob.isDynamicPattern(pattern, options)); + +module.exports.gitignore = gitignore; diff --git a/tools/node_modules/eslint/node_modules/globby/license b/tools/node_modules/eslint/node_modules/globby/license new file mode 100644 index 00000000000..e7af2f77107 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/globby/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/globby/package.json b/tools/node_modules/eslint/node_modules/globby/package.json new file mode 100644 index 00000000000..a458778e42f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/globby/package.json @@ -0,0 +1,82 @@ +{ + "name": "globby", + "version": "11.1.0", + "description": "User-friendly glob matching", + "license": "MIT", + "repository": "sindresorhus/globby", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "email": "sindresorhus@gmail.com", + "name": "Sindre Sorhus", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "bench": "npm update glob-stream fast-glob && matcha bench.js", + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts", + "gitignore.js", + "stream-utils.js" + ], + "keywords": [ + "all", + "array", + "directories", + "expand", + "files", + "filesystem", + "filter", + "find", + "fnmatch", + "folders", + "fs", + "glob", + "globbing", + "globs", + "gulpfriendly", + "match", + "matcher", + "minimatch", + "multi", + "multiple", + "paths", + "pattern", + "patterns", + "traverse", + "util", + "utility", + "wildcard", + "wildcards", + "promise", + "gitignore", + "git" + ], + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "devDependencies": { + "ava": "^3.13.0", + "get-stream": "^6.0.0", + "glob-stream": "^6.1.0", + "globby": "sindresorhus/globby#main", + "matcha": "^0.7.0", + "rimraf": "^3.0.2", + "tsd": "^0.13.1", + "xo": "^0.33.1" + }, + "xo": { + "ignores": [ + "fixtures" + ] + } +} diff --git a/tools/node_modules/eslint/node_modules/globby/readme.md b/tools/node_modules/eslint/node_modules/globby/readme.md new file mode 100644 index 00000000000..b39ae43e3cc --- /dev/null +++ b/tools/node_modules/eslint/node_modules/globby/readme.md @@ -0,0 +1,170 @@ +# globby + +> User-friendly glob matching + +Based on [`fast-glob`](https://github.com/mrmlnc/fast-glob) but adds a bunch of useful features. + +## Features + +- Promise API +- Multiple patterns +- Negated patterns: `['foo*', '!foobar']` +- Expands directories: `foo` → `foo/**/*` +- Supports `.gitignore` + +## Install + +``` +$ npm install globby +``` + +## Usage + +``` +├── unicorn +├── cake +└── rainbow +``` + +```js +const globby = require('globby'); + +(async () => { + const paths = await globby(['*', '!cake']); + + console.log(paths); + //=> ['unicorn', 'rainbow'] +})(); +``` + +## API + +Note that glob patterns can only contain forward-slashes, not backward-slashes, so if you want to construct a glob pattern from path components, you need to use `path.posix.join()` instead of `path.join()`. + +### globby(patterns, options?) + +Returns a `Promise` of matching paths. + +#### patterns + +Type: `string | string[]` + +See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage). + +#### options + +Type: `object` + +See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones below. + +##### expandDirectories + +Type: `boolean | string[] | object`\ +Default: `true` + +If set to `true`, `globby` will automatically glob directories for you. If you define an `Array` it will only glob files that matches the patterns inside the `Array`. You can also define an `object` with `files` and `extensions` like below: + +```js +const globby = require('globby'); + +(async () => { + const paths = await globby('images', { + expandDirectories: { + files: ['cat', 'unicorn', '*.jpg'], + extensions: ['png'] + } + }); + + console.log(paths); + //=> ['cat.png', 'unicorn.png', 'cow.jpg', 'rainbow.jpg'] +})(); +``` + +Note that if you set this option to `false`, you won't get back matched directories unless you set `onlyFiles: false`. + +##### gitignore + +Type: `boolean`\ +Default: `false` + +Respect ignore patterns in `.gitignore` files that apply to the globbed files. + +### globby.sync(patterns, options?) + +Returns `string[]` of matching paths. + +### globby.stream(patterns, options?) + +Returns a [`stream.Readable`](https://nodejs.org/api/stream.html#stream_readable_streams) of matching paths. + +Since Node.js 10, [readable streams are iterable](https://nodejs.org/api/stream.html#stream_readable_symbol_asynciterator), so you can loop over glob matches in a [`for await...of` loop](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of) like this: + +```js +const globby = require('globby'); + +(async () => { + for await (const path of globby.stream('*.tmp')) { + console.log(path); + } +})(); +``` + +### globby.generateGlobTasks(patterns, options?) + +Returns an `object[]` in the format `{pattern: string, options: Object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages. + +Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration. + +### globby.hasMagic(patterns, options?) + +Returns a `boolean` of whether there are any special glob characters in the `patterns`. + +Note that the options affect the results. + +This function is backed by [`fast-glob`](https://github.com/mrmlnc/fast-glob#isdynamicpatternpattern-options). + +### globby.gitignore(options?) + +Returns a `Promise<(path: string) => boolean>` indicating whether a given path is ignored via a `.gitignore` file. + +Takes `cwd?: string` and `ignore?: string[]` as options. `.gitignore` files matched by the ignore config are not used for the resulting filter function. + +```js +const {gitignore} = require('globby'); + +(async () => { + const isIgnored = await gitignore(); + console.log(isIgnored('some/file')); +})(); +``` + +### globby.gitignore.sync(options?) + +Returns a `(path: string) => boolean` indicating whether a given path is ignored via a `.gitignore` file. + +Takes the same options as `globby.gitignore`. + +## Globbing patterns + +Just a quick overview. + +- `*` matches any number of characters, but not `/` +- `?` matches a single character, but not `/` +- `**` matches any number of characters, including `/`, as long as it's the only thing in a path part +- `{}` allows for a comma-separated list of "or" expressions +- `!` at the beginning of a pattern will negate the match + +[Various patterns and expected matches.](https://github.com/sindresorhus/multimatch/blob/main/test/test.js) + +## globby for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of globby and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-globby?utm_source=npm-globby&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + +## Related + +- [multimatch](https://github.com/sindresorhus/multimatch) - Match against a list instead of the filesystem +- [matcher](https://github.com/sindresorhus/matcher) - Simple wildcard matching +- [del](https://github.com/sindresorhus/del) - Delete files and directories +- [make-dir](https://github.com/sindresorhus/make-dir) - Make a directory and its parents if needed diff --git a/tools/node_modules/eslint/node_modules/globby/stream-utils.js b/tools/node_modules/eslint/node_modules/globby/stream-utils.js new file mode 100644 index 00000000000..98aedc896fd --- /dev/null +++ b/tools/node_modules/eslint/node_modules/globby/stream-utils.js @@ -0,0 +1,46 @@ +'use strict'; +const {Transform} = require('stream'); + +class ObjectTransform extends Transform { + constructor() { + super({ + objectMode: true + }); + } +} + +class FilterStream extends ObjectTransform { + constructor(filter) { + super(); + this._filter = filter; + } + + _transform(data, encoding, callback) { + if (this._filter(data)) { + this.push(data); + } + + callback(); + } +} + +class UniqueStream extends ObjectTransform { + constructor() { + super(); + this._pushed = new Set(); + } + + _transform(data, encoding, callback) { + if (!this._pushed.has(data)) { + this.push(data); + this._pushed.add(data); + } + + callback(); + } +} + +module.exports = { + FilterStream, + UniqueStream +}; diff --git a/tools/node_modules/eslint/node_modules/grapheme-splitter/LICENSE b/tools/node_modules/eslint/node_modules/grapheme-splitter/LICENSE new file mode 100644 index 00000000000..4f0f53dd0c5 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/grapheme-splitter/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Orlin Georgiev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/tools/node_modules/eslint/node_modules/grapheme-splitter/index.js b/tools/node_modules/eslint/node_modules/grapheme-splitter/index.js new file mode 100644 index 00000000000..d5555916333 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/grapheme-splitter/index.js @@ -0,0 +1,1743 @@ +/* +Breaks a Javascript string into individual user-perceived "characters" +called extended grapheme clusters by implementing the Unicode UAX-29 standard, version 10.0.0 + +Usage: +var splitter = new GraphemeSplitter(); +//returns an array of strings, one string for each grapheme cluster +var graphemes = splitter.splitGraphemes(string); + +*/ +function GraphemeSplitter(){ + var CR = 0, + LF = 1, + Control = 2, + Extend = 3, + Regional_Indicator = 4, + SpacingMark = 5, + L = 6, + V = 7, + T = 8, + LV = 9, + LVT = 10, + Other = 11, + Prepend = 12, + E_Base = 13, + E_Modifier = 14, + ZWJ = 15, + Glue_After_Zwj = 16, + E_Base_GAZ = 17; + + // BreakTypes + var NotBreak = 0, + BreakStart = 1, + Break = 2, + BreakLastRegional = 3, + BreakPenultimateRegional = 4; + + function isSurrogate(str, pos) { + return 0xd800 <= str.charCodeAt(pos) && str.charCodeAt(pos) <= 0xdbff && + 0xdc00 <= str.charCodeAt(pos + 1) && str.charCodeAt(pos + 1) <= 0xdfff; + } + + // Private function, gets a Unicode code point from a JavaScript UTF-16 string + // handling surrogate pairs appropriately + function codePointAt(str, idx){ + if(idx === undefined){ + idx = 0; + } + var code = str.charCodeAt(idx); + + // if a high surrogate + if (0xD800 <= code && code <= 0xDBFF && + idx < str.length - 1){ + var hi = code; + var low = str.charCodeAt(idx + 1); + if (0xDC00 <= low && low <= 0xDFFF){ + return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; + } + return hi; + } + + // if a low surrogate + if (0xDC00 <= code && code <= 0xDFFF && + idx >= 1){ + var hi = str.charCodeAt(idx - 1); + var low = code; + if (0xD800 <= hi && hi <= 0xDBFF){ + return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; + } + return low; + } + + //just return the char if an unmatched surrogate half or a + //single-char codepoint + return code; + } + + // Private function, returns whether a break is allowed between the + // two given grapheme breaking classes + function shouldBreak(start, mid, end){ + var all = [start].concat(mid).concat([end]); + var previous = all[all.length - 2] + var next = end + + // Lookahead termintor for: + // GB10. (E_Base | EBG) Extend* ? E_Modifier + var eModifierIndex = all.lastIndexOf(E_Modifier) + if(eModifierIndex > 1 && + all.slice(1, eModifierIndex).every(function(c){return c == Extend}) && + [Extend, E_Base, E_Base_GAZ].indexOf(start) == -1){ + return Break + } + + // Lookahead termintor for: + // GB12. ^ (RI RI)* RI ? RI + // GB13. [^RI] (RI RI)* RI ? RI + var rIIndex = all.lastIndexOf(Regional_Indicator) + if(rIIndex > 0 && + all.slice(1, rIIndex).every(function(c){return c == Regional_Indicator}) && + [Prepend, Regional_Indicator].indexOf(previous) == -1) { + if(all.filter(function(c){return c == Regional_Indicator}).length % 2 == 1) { + return BreakLastRegional + } + else { + return BreakPenultimateRegional + } + } + + // GB3. CR X LF + if(previous == CR && next == LF){ + return NotBreak; + } + // GB4. (Control|CR|LF) ÷ + else if(previous == Control || previous == CR || previous == LF){ + if(next == E_Modifier && mid.every(function(c){return c == Extend})){ + return Break + } + else { + return BreakStart + } + } + // GB5. ÷ (Control|CR|LF) + else if(next == Control || next == CR || next == LF){ + return BreakStart; + } + // GB6. L X (L|V|LV|LVT) + else if(previous == L && + (next == L || next == V || next == LV || next == LVT)){ + return NotBreak; + } + // GB7. (LV|V) X (V|T) + else if((previous == LV || previous == V) && + (next == V || next == T)){ + return NotBreak; + } + // GB8. (LVT|T) X (T) + else if((previous == LVT || previous == T) && + next == T){ + return NotBreak; + } + // GB9. X (Extend|ZWJ) + else if (next == Extend || next == ZWJ){ + return NotBreak; + } + // GB9a. X SpacingMark + else if(next == SpacingMark){ + return NotBreak; + } + // GB9b. Prepend X + else if (previous == Prepend){ + return NotBreak; + } + + // GB10. (E_Base | EBG) Extend* ? E_Modifier + var previousNonExtendIndex = all.indexOf(Extend) != -1 ? all.lastIndexOf(Extend) - 1 : all.length - 2; + if([E_Base, E_Base_GAZ].indexOf(all[previousNonExtendIndex]) != -1 && + all.slice(previousNonExtendIndex + 1, -1).every(function(c){return c == Extend}) && + next == E_Modifier){ + return NotBreak; + } + + // GB11. ZWJ ? (Glue_After_Zwj | EBG) + if(previous == ZWJ && [Glue_After_Zwj, E_Base_GAZ].indexOf(next) != -1) { + return NotBreak; + } + + // GB12. ^ (RI RI)* RI ? RI + // GB13. [^RI] (RI RI)* RI ? RI + if(mid.indexOf(Regional_Indicator) != -1) { + return Break; + } + if(previous == Regional_Indicator && next == Regional_Indicator) { + return NotBreak; + } + + // GB999. Any ? Any + return BreakStart; + } + + // Returns the next grapheme break in the string after the given index + this.nextBreak = function(string, index){ + if(index === undefined){ + index = 0; + } + if(index < 0){ + return 0; + } + if(index >= string.length - 1){ + return string.length; + } + var prev = getGraphemeBreakProperty(codePointAt(string, index)); + var mid = [] + for (var i = index + 1; i < string.length; i++) { + // check for already processed low surrogates + if(isSurrogate(string, i - 1)){ + continue; + } + + var next = getGraphemeBreakProperty(codePointAt(string, i)); + if(shouldBreak(prev, mid, next)){ + return i; + } + + mid.push(next); + } + return string.length; + }; + + // Breaks the given string into an array of grapheme cluster strings + this.splitGraphemes = function(str){ + var res = []; + var index = 0; + var brk; + while((brk = this.nextBreak(str, index)) < str.length){ + res.push(str.slice(index, brk)); + index = brk; + } + if(index < str.length){ + res.push(str.slice(index)); + } + return res; + }; + + // Returns the iterator of grapheme clusters there are in the given string + this.iterateGraphemes = function(str) { + var index = 0; + var res = { + next: (function() { + var value; + var brk; + if ((brk = this.nextBreak(str, index)) < str.length) { + value = str.slice(index, brk); + index = brk; + return { value: value, done: false }; + } + if (index < str.length) { + value = str.slice(index); + index = str.length; + return { value: value, done: false }; + } + return { value: undefined, done: true }; + }).bind(this) + }; + // ES2015 @@iterator method (iterable) for spread syntax and for...of statement + if (typeof Symbol !== 'undefined' && Symbol.iterator) { + res[Symbol.iterator] = function() {return res}; + } + return res; + }; + + // Returns the number of grapheme clusters there are in the given string + this.countGraphemes = function(str){ + var count = 0; + var index = 0; + var brk; + while((brk = this.nextBreak(str, index)) < str.length){ + index = brk; + count++; + } + if(index < str.length){ + count++; + } + return count; + }; + + //given a Unicode code point, determines this symbol's grapheme break property + function getGraphemeBreakProperty(code){ + + //grapheme break property for Unicode 10.0.0, + //taken from http://www.unicode.org/Public/10.0.0/ucd/auxiliary/GraphemeBreakProperty.txt + //and adapted to JavaScript rules + + if( + (0x0600 <= code && code <= 0x0605) || // Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE + 0x06DD == code || // Cf ARABIC END OF AYAH + 0x070F == code || // Cf SYRIAC ABBREVIATION MARK + 0x08E2 == code || // Cf ARABIC DISPUTED END OF AYAH + 0x0D4E == code || // Lo MALAYALAM LETTER DOT REPH + 0x110BD == code || // Cf KAITHI NUMBER SIGN + (0x111C2 <= code && code <= 0x111C3) || // Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA + 0x11A3A == code || // Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA + (0x11A86 <= code && code <= 0x11A89) || // Lo [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA + 0x11D46 == code // Lo MASARAM GONDI REPHA + ){ + return Prepend; + } + if( + 0x000D == code // Cc + ){ + return CR; + } + + if( + 0x000A == code // Cc + ){ + return LF; + } + + + if( + (0x0000 <= code && code <= 0x0009) || // Cc [10] .. + (0x000B <= code && code <= 0x000C) || // Cc [2] .. + (0x000E <= code && code <= 0x001F) || // Cc [18] .. + (0x007F <= code && code <= 0x009F) || // Cc [33] .. + 0x00AD == code || // Cf SOFT HYPHEN + 0x061C == code || // Cf ARABIC LETTER MARK + + 0x180E == code || // Cf MONGOLIAN VOWEL SEPARATOR + 0x200B == code || // Cf ZERO WIDTH SPACE + (0x200E <= code && code <= 0x200F) || // Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK + 0x2028 == code || // Zl LINE SEPARATOR + 0x2029 == code || // Zp PARAGRAPH SEPARATOR + (0x202A <= code && code <= 0x202E) || // Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE + (0x2060 <= code && code <= 0x2064) || // Cf [5] WORD JOINER..INVISIBLE PLUS + 0x2065 == code || // Cn + (0x2066 <= code && code <= 0x206F) || // Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES + (0xD800 <= code && code <= 0xDFFF) || // Cs [2048] .. + 0xFEFF == code || // Cf ZERO WIDTH NO-BREAK SPACE + (0xFFF0 <= code && code <= 0xFFF8) || // Cn [9] .. + (0xFFF9 <= code && code <= 0xFFFB) || // Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR + (0x1BCA0 <= code && code <= 0x1BCA3) || // Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP + (0x1D173 <= code && code <= 0x1D17A) || // Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE + 0xE0000 == code || // Cn + 0xE0001 == code || // Cf LANGUAGE TAG + (0xE0002 <= code && code <= 0xE001F) || // Cn [30] .. + (0xE0080 <= code && code <= 0xE00FF) || // Cn [128] .. + (0xE01F0 <= code && code <= 0xE0FFF) // Cn [3600] .. + ){ + return Control; + } + + + if( + (0x0300 <= code && code <= 0x036F) || // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X + (0x0483 <= code && code <= 0x0487) || // Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE + (0x0488 <= code && code <= 0x0489) || // Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN + (0x0591 <= code && code <= 0x05BD) || // Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG + 0x05BF == code || // Mn HEBREW POINT RAFE + (0x05C1 <= code && code <= 0x05C2) || // Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT + (0x05C4 <= code && code <= 0x05C5) || // Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT + 0x05C7 == code || // Mn HEBREW POINT QAMATS QATAN + (0x0610 <= code && code <= 0x061A) || // Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA + (0x064B <= code && code <= 0x065F) || // Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW + 0x0670 == code || // Mn ARABIC LETTER SUPERSCRIPT ALEF + (0x06D6 <= code && code <= 0x06DC) || // Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN + (0x06DF <= code && code <= 0x06E4) || // Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA + (0x06E7 <= code && code <= 0x06E8) || // Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON + (0x06EA <= code && code <= 0x06ED) || // Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM + 0x0711 == code || // Mn SYRIAC LETTER SUPERSCRIPT ALAPH + (0x0730 <= code && code <= 0x074A) || // Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH + (0x07A6 <= code && code <= 0x07B0) || // Mn [11] THAANA ABAFILI..THAANA SUKUN + (0x07EB <= code && code <= 0x07F3) || // Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE + (0x0816 <= code && code <= 0x0819) || // Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH + (0x081B <= code && code <= 0x0823) || // Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A + (0x0825 <= code && code <= 0x0827) || // Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U + (0x0829 <= code && code <= 0x082D) || // Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA + (0x0859 <= code && code <= 0x085B) || // Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK + (0x08D4 <= code && code <= 0x08E1) || // Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA + (0x08E3 <= code && code <= 0x0902) || // Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA + 0x093A == code || // Mn DEVANAGARI VOWEL SIGN OE + 0x093C == code || // Mn DEVANAGARI SIGN NUKTA + (0x0941 <= code && code <= 0x0948) || // Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI + 0x094D == code || // Mn DEVANAGARI SIGN VIRAMA + (0x0951 <= code && code <= 0x0957) || // Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE + (0x0962 <= code && code <= 0x0963) || // Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL + 0x0981 == code || // Mn BENGALI SIGN CANDRABINDU + 0x09BC == code || // Mn BENGALI SIGN NUKTA + 0x09BE == code || // Mc BENGALI VOWEL SIGN AA + (0x09C1 <= code && code <= 0x09C4) || // Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR + 0x09CD == code || // Mn BENGALI SIGN VIRAMA + 0x09D7 == code || // Mc BENGALI AU LENGTH MARK + (0x09E2 <= code && code <= 0x09E3) || // Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL + (0x0A01 <= code && code <= 0x0A02) || // Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI + 0x0A3C == code || // Mn GURMUKHI SIGN NUKTA + (0x0A41 <= code && code <= 0x0A42) || // Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU + (0x0A47 <= code && code <= 0x0A48) || // Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI + (0x0A4B <= code && code <= 0x0A4D) || // Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA + 0x0A51 == code || // Mn GURMUKHI SIGN UDAAT + (0x0A70 <= code && code <= 0x0A71) || // Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK + 0x0A75 == code || // Mn GURMUKHI SIGN YAKASH + (0x0A81 <= code && code <= 0x0A82) || // Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA + 0x0ABC == code || // Mn GUJARATI SIGN NUKTA + (0x0AC1 <= code && code <= 0x0AC5) || // Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E + (0x0AC7 <= code && code <= 0x0AC8) || // Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI + 0x0ACD == code || // Mn GUJARATI SIGN VIRAMA + (0x0AE2 <= code && code <= 0x0AE3) || // Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL + (0x0AFA <= code && code <= 0x0AFF) || // Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE + 0x0B01 == code || // Mn ORIYA SIGN CANDRABINDU + 0x0B3C == code || // Mn ORIYA SIGN NUKTA + 0x0B3E == code || // Mc ORIYA VOWEL SIGN AA + 0x0B3F == code || // Mn ORIYA VOWEL SIGN I + (0x0B41 <= code && code <= 0x0B44) || // Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR + 0x0B4D == code || // Mn ORIYA SIGN VIRAMA + 0x0B56 == code || // Mn ORIYA AI LENGTH MARK + 0x0B57 == code || // Mc ORIYA AU LENGTH MARK + (0x0B62 <= code && code <= 0x0B63) || // Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL + 0x0B82 == code || // Mn TAMIL SIGN ANUSVARA + 0x0BBE == code || // Mc TAMIL VOWEL SIGN AA + 0x0BC0 == code || // Mn TAMIL VOWEL SIGN II + 0x0BCD == code || // Mn TAMIL SIGN VIRAMA + 0x0BD7 == code || // Mc TAMIL AU LENGTH MARK + 0x0C00 == code || // Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE + (0x0C3E <= code && code <= 0x0C40) || // Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II + (0x0C46 <= code && code <= 0x0C48) || // Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI + (0x0C4A <= code && code <= 0x0C4D) || // Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA + (0x0C55 <= code && code <= 0x0C56) || // Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK + (0x0C62 <= code && code <= 0x0C63) || // Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL + 0x0C81 == code || // Mn KANNADA SIGN CANDRABINDU + 0x0CBC == code || // Mn KANNADA SIGN NUKTA + 0x0CBF == code || // Mn KANNADA VOWEL SIGN I + 0x0CC2 == code || // Mc KANNADA VOWEL SIGN UU + 0x0CC6 == code || // Mn KANNADA VOWEL SIGN E + (0x0CCC <= code && code <= 0x0CCD) || // Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA + (0x0CD5 <= code && code <= 0x0CD6) || // Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK + (0x0CE2 <= code && code <= 0x0CE3) || // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL + (0x0D00 <= code && code <= 0x0D01) || // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU + (0x0D3B <= code && code <= 0x0D3C) || // Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA + 0x0D3E == code || // Mc MALAYALAM VOWEL SIGN AA + (0x0D41 <= code && code <= 0x0D44) || // Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR + 0x0D4D == code || // Mn MALAYALAM SIGN VIRAMA + 0x0D57 == code || // Mc MALAYALAM AU LENGTH MARK + (0x0D62 <= code && code <= 0x0D63) || // Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL + 0x0DCA == code || // Mn SINHALA SIGN AL-LAKUNA + 0x0DCF == code || // Mc SINHALA VOWEL SIGN AELA-PILLA + (0x0DD2 <= code && code <= 0x0DD4) || // Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA + 0x0DD6 == code || // Mn SINHALA VOWEL SIGN DIGA PAA-PILLA + 0x0DDF == code || // Mc SINHALA VOWEL SIGN GAYANUKITTA + 0x0E31 == code || // Mn THAI CHARACTER MAI HAN-AKAT + (0x0E34 <= code && code <= 0x0E3A) || // Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU + (0x0E47 <= code && code <= 0x0E4E) || // Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN + 0x0EB1 == code || // Mn LAO VOWEL SIGN MAI KAN + (0x0EB4 <= code && code <= 0x0EB9) || // Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU + (0x0EBB <= code && code <= 0x0EBC) || // Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO + (0x0EC8 <= code && code <= 0x0ECD) || // Mn [6] LAO TONE MAI EK..LAO NIGGAHITA + (0x0F18 <= code && code <= 0x0F19) || // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS + 0x0F35 == code || // Mn TIBETAN MARK NGAS BZUNG NYI ZLA + 0x0F37 == code || // Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS + 0x0F39 == code || // Mn TIBETAN MARK TSA -PHRU + (0x0F71 <= code && code <= 0x0F7E) || // Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO + (0x0F80 <= code && code <= 0x0F84) || // Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA + (0x0F86 <= code && code <= 0x0F87) || // Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS + (0x0F8D <= code && code <= 0x0F97) || // Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA + (0x0F99 <= code && code <= 0x0FBC) || // Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA + 0x0FC6 == code || // Mn TIBETAN SYMBOL PADMA GDAN + (0x102D <= code && code <= 0x1030) || // Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU + (0x1032 <= code && code <= 0x1037) || // Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW + (0x1039 <= code && code <= 0x103A) || // Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT + (0x103D <= code && code <= 0x103E) || // Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA + (0x1058 <= code && code <= 0x1059) || // Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL + (0x105E <= code && code <= 0x1060) || // Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA + (0x1071 <= code && code <= 0x1074) || // Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE + 0x1082 == code || // Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA + (0x1085 <= code && code <= 0x1086) || // Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y + 0x108D == code || // Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE + 0x109D == code || // Mn MYANMAR VOWEL SIGN AITON AI + (0x135D <= code && code <= 0x135F) || // Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK + (0x1712 <= code && code <= 0x1714) || // Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA + (0x1732 <= code && code <= 0x1734) || // Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD + (0x1752 <= code && code <= 0x1753) || // Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U + (0x1772 <= code && code <= 0x1773) || // Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U + (0x17B4 <= code && code <= 0x17B5) || // Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA + (0x17B7 <= code && code <= 0x17BD) || // Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA + 0x17C6 == code || // Mn KHMER SIGN NIKAHIT + (0x17C9 <= code && code <= 0x17D3) || // Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT + 0x17DD == code || // Mn KHMER SIGN ATTHACAN + (0x180B <= code && code <= 0x180D) || // Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE + (0x1885 <= code && code <= 0x1886) || // Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA + 0x18A9 == code || // Mn MONGOLIAN LETTER ALI GALI DAGALGA + (0x1920 <= code && code <= 0x1922) || // Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U + (0x1927 <= code && code <= 0x1928) || // Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O + 0x1932 == code || // Mn LIMBU SMALL LETTER ANUSVARA + (0x1939 <= code && code <= 0x193B) || // Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I + (0x1A17 <= code && code <= 0x1A18) || // Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U + 0x1A1B == code || // Mn BUGINESE VOWEL SIGN AE + 0x1A56 == code || // Mn TAI THAM CONSONANT SIGN MEDIAL LA + (0x1A58 <= code && code <= 0x1A5E) || // Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA + 0x1A60 == code || // Mn TAI THAM SIGN SAKOT + 0x1A62 == code || // Mn TAI THAM VOWEL SIGN MAI SAT + (0x1A65 <= code && code <= 0x1A6C) || // Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW + (0x1A73 <= code && code <= 0x1A7C) || // Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN + 0x1A7F == code || // Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT + (0x1AB0 <= code && code <= 0x1ABD) || // Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW + 0x1ABE == code || // Me COMBINING PARENTHESES OVERLAY + (0x1B00 <= code && code <= 0x1B03) || // Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG + 0x1B34 == code || // Mn BALINESE SIGN REREKAN + (0x1B36 <= code && code <= 0x1B3A) || // Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA + 0x1B3C == code || // Mn BALINESE VOWEL SIGN LA LENGA + 0x1B42 == code || // Mn BALINESE VOWEL SIGN PEPET + (0x1B6B <= code && code <= 0x1B73) || // Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG + (0x1B80 <= code && code <= 0x1B81) || // Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR + (0x1BA2 <= code && code <= 0x1BA5) || // Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU + (0x1BA8 <= code && code <= 0x1BA9) || // Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG + (0x1BAB <= code && code <= 0x1BAD) || // Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA + 0x1BE6 == code || // Mn BATAK SIGN TOMPI + (0x1BE8 <= code && code <= 0x1BE9) || // Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE + 0x1BED == code || // Mn BATAK VOWEL SIGN KARO O + (0x1BEF <= code && code <= 0x1BF1) || // Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H + (0x1C2C <= code && code <= 0x1C33) || // Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T + (0x1C36 <= code && code <= 0x1C37) || // Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA + (0x1CD0 <= code && code <= 0x1CD2) || // Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA + (0x1CD4 <= code && code <= 0x1CE0) || // Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA + (0x1CE2 <= code && code <= 0x1CE8) || // Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL + 0x1CED == code || // Mn VEDIC SIGN TIRYAK + 0x1CF4 == code || // Mn VEDIC TONE CANDRA ABOVE + (0x1CF8 <= code && code <= 0x1CF9) || // Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE + (0x1DC0 <= code && code <= 0x1DF9) || // Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW + (0x1DFB <= code && code <= 0x1DFF) || // Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW + 0x200C == code || // Cf ZERO WIDTH NON-JOINER + (0x20D0 <= code && code <= 0x20DC) || // Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE + (0x20DD <= code && code <= 0x20E0) || // Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH + 0x20E1 == code || // Mn COMBINING LEFT RIGHT ARROW ABOVE + (0x20E2 <= code && code <= 0x20E4) || // Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE + (0x20E5 <= code && code <= 0x20F0) || // Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE + (0x2CEF <= code && code <= 0x2CF1) || // Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS + 0x2D7F == code || // Mn TIFINAGH CONSONANT JOINER + (0x2DE0 <= code && code <= 0x2DFF) || // Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS + (0x302A <= code && code <= 0x302D) || // Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK + (0x302E <= code && code <= 0x302F) || // Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK + (0x3099 <= code && code <= 0x309A) || // Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + 0xA66F == code || // Mn COMBINING CYRILLIC VZMET + (0xA670 <= code && code <= 0xA672) || // Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN + (0xA674 <= code && code <= 0xA67D) || // Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK + (0xA69E <= code && code <= 0xA69F) || // Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E + (0xA6F0 <= code && code <= 0xA6F1) || // Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS + 0xA802 == code || // Mn SYLOTI NAGRI SIGN DVISVARA + 0xA806 == code || // Mn SYLOTI NAGRI SIGN HASANTA + 0xA80B == code || // Mn SYLOTI NAGRI SIGN ANUSVARA + (0xA825 <= code && code <= 0xA826) || // Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E + (0xA8C4 <= code && code <= 0xA8C5) || // Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU + (0xA8E0 <= code && code <= 0xA8F1) || // Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA + (0xA926 <= code && code <= 0xA92D) || // Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU + (0xA947 <= code && code <= 0xA951) || // Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R + (0xA980 <= code && code <= 0xA982) || // Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR + 0xA9B3 == code || // Mn JAVANESE SIGN CECAK TELU + (0xA9B6 <= code && code <= 0xA9B9) || // Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT + 0xA9BC == code || // Mn JAVANESE VOWEL SIGN PEPET + 0xA9E5 == code || // Mn MYANMAR SIGN SHAN SAW + (0xAA29 <= code && code <= 0xAA2E) || // Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE + (0xAA31 <= code && code <= 0xAA32) || // Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE + (0xAA35 <= code && code <= 0xAA36) || // Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA + 0xAA43 == code || // Mn CHAM CONSONANT SIGN FINAL NG + 0xAA4C == code || // Mn CHAM CONSONANT SIGN FINAL M + 0xAA7C == code || // Mn MYANMAR SIGN TAI LAING TONE-2 + 0xAAB0 == code || // Mn TAI VIET MAI KANG + (0xAAB2 <= code && code <= 0xAAB4) || // Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U + (0xAAB7 <= code && code <= 0xAAB8) || // Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA + (0xAABE <= code && code <= 0xAABF) || // Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK + 0xAAC1 == code || // Mn TAI VIET TONE MAI THO + (0xAAEC <= code && code <= 0xAAED) || // Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI + 0xAAF6 == code || // Mn MEETEI MAYEK VIRAMA + 0xABE5 == code || // Mn MEETEI MAYEK VOWEL SIGN ANAP + 0xABE8 == code || // Mn MEETEI MAYEK VOWEL SIGN UNAP + 0xABED == code || // Mn MEETEI MAYEK APUN IYEK + 0xFB1E == code || // Mn HEBREW POINT JUDEO-SPANISH VARIKA + (0xFE00 <= code && code <= 0xFE0F) || // Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 + (0xFE20 <= code && code <= 0xFE2F) || // Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF + (0xFF9E <= code && code <= 0xFF9F) || // Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK + 0x101FD == code || // Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE + 0x102E0 == code || // Mn COPTIC EPACT THOUSANDS MARK + (0x10376 <= code && code <= 0x1037A) || // Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII + (0x10A01 <= code && code <= 0x10A03) || // Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R + (0x10A05 <= code && code <= 0x10A06) || // Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O + (0x10A0C <= code && code <= 0x10A0F) || // Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA + (0x10A38 <= code && code <= 0x10A3A) || // Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW + 0x10A3F == code || // Mn KHAROSHTHI VIRAMA + (0x10AE5 <= code && code <= 0x10AE6) || // Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW + 0x11001 == code || // Mn BRAHMI SIGN ANUSVARA + (0x11038 <= code && code <= 0x11046) || // Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA + (0x1107F <= code && code <= 0x11081) || // Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA + (0x110B3 <= code && code <= 0x110B6) || // Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI + (0x110B9 <= code && code <= 0x110BA) || // Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA + (0x11100 <= code && code <= 0x11102) || // Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA + (0x11127 <= code && code <= 0x1112B) || // Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU + (0x1112D <= code && code <= 0x11134) || // Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA + 0x11173 == code || // Mn MAHAJANI SIGN NUKTA + (0x11180 <= code && code <= 0x11181) || // Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA + (0x111B6 <= code && code <= 0x111BE) || // Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O + (0x111CA <= code && code <= 0x111CC) || // Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK + (0x1122F <= code && code <= 0x11231) || // Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI + 0x11234 == code || // Mn KHOJKI SIGN ANUSVARA + (0x11236 <= code && code <= 0x11237) || // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA + 0x1123E == code || // Mn KHOJKI SIGN SUKUN + 0x112DF == code || // Mn KHUDAWADI SIGN ANUSVARA + (0x112E3 <= code && code <= 0x112EA) || // Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA + (0x11300 <= code && code <= 0x11301) || // Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU + 0x1133C == code || // Mn GRANTHA SIGN NUKTA + 0x1133E == code || // Mc GRANTHA VOWEL SIGN AA + 0x11340 == code || // Mn GRANTHA VOWEL SIGN II + 0x11357 == code || // Mc GRANTHA AU LENGTH MARK + (0x11366 <= code && code <= 0x1136C) || // Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX + (0x11370 <= code && code <= 0x11374) || // Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA + (0x11438 <= code && code <= 0x1143F) || // Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI + (0x11442 <= code && code <= 0x11444) || // Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA + 0x11446 == code || // Mn NEWA SIGN NUKTA + 0x114B0 == code || // Mc TIRHUTA VOWEL SIGN AA + (0x114B3 <= code && code <= 0x114B8) || // Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL + 0x114BA == code || // Mn TIRHUTA VOWEL SIGN SHORT E + 0x114BD == code || // Mc TIRHUTA VOWEL SIGN SHORT O + (0x114BF <= code && code <= 0x114C0) || // Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA + (0x114C2 <= code && code <= 0x114C3) || // Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA + 0x115AF == code || // Mc SIDDHAM VOWEL SIGN AA + (0x115B2 <= code && code <= 0x115B5) || // Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR + (0x115BC <= code && code <= 0x115BD) || // Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA + (0x115BF <= code && code <= 0x115C0) || // Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA + (0x115DC <= code && code <= 0x115DD) || // Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU + (0x11633 <= code && code <= 0x1163A) || // Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI + 0x1163D == code || // Mn MODI SIGN ANUSVARA + (0x1163F <= code && code <= 0x11640) || // Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA + 0x116AB == code || // Mn TAKRI SIGN ANUSVARA + 0x116AD == code || // Mn TAKRI VOWEL SIGN AA + (0x116B0 <= code && code <= 0x116B5) || // Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU + 0x116B7 == code || // Mn TAKRI SIGN NUKTA + (0x1171D <= code && code <= 0x1171F) || // Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA + (0x11722 <= code && code <= 0x11725) || // Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU + (0x11727 <= code && code <= 0x1172B) || // Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER + (0x11A01 <= code && code <= 0x11A06) || // Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O + (0x11A09 <= code && code <= 0x11A0A) || // Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK + (0x11A33 <= code && code <= 0x11A38) || // Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA + (0x11A3B <= code && code <= 0x11A3E) || // Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA + 0x11A47 == code || // Mn ZANABAZAR SQUARE SUBJOINER + (0x11A51 <= code && code <= 0x11A56) || // Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE + (0x11A59 <= code && code <= 0x11A5B) || // Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK + (0x11A8A <= code && code <= 0x11A96) || // Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA + (0x11A98 <= code && code <= 0x11A99) || // Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER + (0x11C30 <= code && code <= 0x11C36) || // Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L + (0x11C38 <= code && code <= 0x11C3D) || // Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA + 0x11C3F == code || // Mn BHAIKSUKI SIGN VIRAMA + (0x11C92 <= code && code <= 0x11CA7) || // Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA + (0x11CAA <= code && code <= 0x11CB0) || // Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA + (0x11CB2 <= code && code <= 0x11CB3) || // Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E + (0x11CB5 <= code && code <= 0x11CB6) || // Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU + (0x11D31 <= code && code <= 0x11D36) || // Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R + 0x11D3A == code || // Mn MASARAM GONDI VOWEL SIGN E + (0x11D3C <= code && code <= 0x11D3D) || // Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O + (0x11D3F <= code && code <= 0x11D45) || // Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA + 0x11D47 == code || // Mn MASARAM GONDI RA-KARA + (0x16AF0 <= code && code <= 0x16AF4) || // Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE + (0x16B30 <= code && code <= 0x16B36) || // Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM + (0x16F8F <= code && code <= 0x16F92) || // Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW + (0x1BC9D <= code && code <= 0x1BC9E) || // Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK + 0x1D165 == code || // Mc MUSICAL SYMBOL COMBINING STEM + (0x1D167 <= code && code <= 0x1D169) || // Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 + (0x1D16E <= code && code <= 0x1D172) || // Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 + (0x1D17B <= code && code <= 0x1D182) || // Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE + (0x1D185 <= code && code <= 0x1D18B) || // Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE + (0x1D1AA <= code && code <= 0x1D1AD) || // Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO + (0x1D242 <= code && code <= 0x1D244) || // Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME + (0x1DA00 <= code && code <= 0x1DA36) || // Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN + (0x1DA3B <= code && code <= 0x1DA6C) || // Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT + 0x1DA75 == code || // Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS + 0x1DA84 == code || // Mn SIGNWRITING LOCATION HEAD NECK + (0x1DA9B <= code && code <= 0x1DA9F) || // Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 + (0x1DAA1 <= code && code <= 0x1DAAF) || // Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 + (0x1E000 <= code && code <= 0x1E006) || // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE + (0x1E008 <= code && code <= 0x1E018) || // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU + (0x1E01B <= code && code <= 0x1E021) || // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI + (0x1E023 <= code && code <= 0x1E024) || // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS + (0x1E026 <= code && code <= 0x1E02A) || // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA + (0x1E8D0 <= code && code <= 0x1E8D6) || // Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS + (0x1E944 <= code && code <= 0x1E94A) || // Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA + (0xE0020 <= code && code <= 0xE007F) || // Cf [96] TAG SPACE..CANCEL TAG + (0xE0100 <= code && code <= 0xE01EF) // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + ){ + return Extend; + } + + + if( + (0x1F1E6 <= code && code <= 0x1F1FF) // So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z + ){ + return Regional_Indicator; + } + + if( + 0x0903 == code || // Mc DEVANAGARI SIGN VISARGA + 0x093B == code || // Mc DEVANAGARI VOWEL SIGN OOE + (0x093E <= code && code <= 0x0940) || // Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II + (0x0949 <= code && code <= 0x094C) || // Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU + (0x094E <= code && code <= 0x094F) || // Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW + (0x0982 <= code && code <= 0x0983) || // Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA + (0x09BF <= code && code <= 0x09C0) || // Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II + (0x09C7 <= code && code <= 0x09C8) || // Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI + (0x09CB <= code && code <= 0x09CC) || // Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU + 0x0A03 == code || // Mc GURMUKHI SIGN VISARGA + (0x0A3E <= code && code <= 0x0A40) || // Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II + 0x0A83 == code || // Mc GUJARATI SIGN VISARGA + (0x0ABE <= code && code <= 0x0AC0) || // Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II + 0x0AC9 == code || // Mc GUJARATI VOWEL SIGN CANDRA O + (0x0ACB <= code && code <= 0x0ACC) || // Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU + (0x0B02 <= code && code <= 0x0B03) || // Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA + 0x0B40 == code || // Mc ORIYA VOWEL SIGN II + (0x0B47 <= code && code <= 0x0B48) || // Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI + (0x0B4B <= code && code <= 0x0B4C) || // Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU + 0x0BBF == code || // Mc TAMIL VOWEL SIGN I + (0x0BC1 <= code && code <= 0x0BC2) || // Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU + (0x0BC6 <= code && code <= 0x0BC8) || // Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI + (0x0BCA <= code && code <= 0x0BCC) || // Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU + (0x0C01 <= code && code <= 0x0C03) || // Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA + (0x0C41 <= code && code <= 0x0C44) || // Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR + (0x0C82 <= code && code <= 0x0C83) || // Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA + 0x0CBE == code || // Mc KANNADA VOWEL SIGN AA + (0x0CC0 <= code && code <= 0x0CC1) || // Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U + (0x0CC3 <= code && code <= 0x0CC4) || // Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR + (0x0CC7 <= code && code <= 0x0CC8) || // Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI + (0x0CCA <= code && code <= 0x0CCB) || // Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO + (0x0D02 <= code && code <= 0x0D03) || // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA + (0x0D3F <= code && code <= 0x0D40) || // Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II + (0x0D46 <= code && code <= 0x0D48) || // Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI + (0x0D4A <= code && code <= 0x0D4C) || // Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU + (0x0D82 <= code && code <= 0x0D83) || // Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA + (0x0DD0 <= code && code <= 0x0DD1) || // Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA + (0x0DD8 <= code && code <= 0x0DDE) || // Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA + (0x0DF2 <= code && code <= 0x0DF3) || // Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA + 0x0E33 == code || // Lo THAI CHARACTER SARA AM + 0x0EB3 == code || // Lo LAO VOWEL SIGN AM + (0x0F3E <= code && code <= 0x0F3F) || // Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES + 0x0F7F == code || // Mc TIBETAN SIGN RNAM BCAD + 0x1031 == code || // Mc MYANMAR VOWEL SIGN E + (0x103B <= code && code <= 0x103C) || // Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA + (0x1056 <= code && code <= 0x1057) || // Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR + 0x1084 == code || // Mc MYANMAR VOWEL SIGN SHAN E + 0x17B6 == code || // Mc KHMER VOWEL SIGN AA + (0x17BE <= code && code <= 0x17C5) || // Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU + (0x17C7 <= code && code <= 0x17C8) || // Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU + (0x1923 <= code && code <= 0x1926) || // Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU + (0x1929 <= code && code <= 0x192B) || // Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA + (0x1930 <= code && code <= 0x1931) || // Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA + (0x1933 <= code && code <= 0x1938) || // Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA + (0x1A19 <= code && code <= 0x1A1A) || // Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O + 0x1A55 == code || // Mc TAI THAM CONSONANT SIGN MEDIAL RA + 0x1A57 == code || // Mc TAI THAM CONSONANT SIGN LA TANG LAI + (0x1A6D <= code && code <= 0x1A72) || // Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI + 0x1B04 == code || // Mc BALINESE SIGN BISAH + 0x1B35 == code || // Mc BALINESE VOWEL SIGN TEDUNG + 0x1B3B == code || // Mc BALINESE VOWEL SIGN RA REPA TEDUNG + (0x1B3D <= code && code <= 0x1B41) || // Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG + (0x1B43 <= code && code <= 0x1B44) || // Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG + 0x1B82 == code || // Mc SUNDANESE SIGN PANGWISAD + 0x1BA1 == code || // Mc SUNDANESE CONSONANT SIGN PAMINGKAL + (0x1BA6 <= code && code <= 0x1BA7) || // Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG + 0x1BAA == code || // Mc SUNDANESE SIGN PAMAAEH + 0x1BE7 == code || // Mc BATAK VOWEL SIGN E + (0x1BEA <= code && code <= 0x1BEC) || // Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O + 0x1BEE == code || // Mc BATAK VOWEL SIGN U + (0x1BF2 <= code && code <= 0x1BF3) || // Mc [2] BATAK PANGOLAT..BATAK PANONGONAN + (0x1C24 <= code && code <= 0x1C2B) || // Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU + (0x1C34 <= code && code <= 0x1C35) || // Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG + 0x1CE1 == code || // Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA + (0x1CF2 <= code && code <= 0x1CF3) || // Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA + 0x1CF7 == code || // Mc VEDIC SIGN ATIKRAMA + (0xA823 <= code && code <= 0xA824) || // Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I + 0xA827 == code || // Mc SYLOTI NAGRI VOWEL SIGN OO + (0xA880 <= code && code <= 0xA881) || // Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA + (0xA8B4 <= code && code <= 0xA8C3) || // Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU + (0xA952 <= code && code <= 0xA953) || // Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA + 0xA983 == code || // Mc JAVANESE SIGN WIGNYAN + (0xA9B4 <= code && code <= 0xA9B5) || // Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG + (0xA9BA <= code && code <= 0xA9BB) || // Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE + (0xA9BD <= code && code <= 0xA9C0) || // Mc [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON + (0xAA2F <= code && code <= 0xAA30) || // Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI + (0xAA33 <= code && code <= 0xAA34) || // Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA + 0xAA4D == code || // Mc CHAM CONSONANT SIGN FINAL H + 0xAAEB == code || // Mc MEETEI MAYEK VOWEL SIGN II + (0xAAEE <= code && code <= 0xAAEF) || // Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU + 0xAAF5 == code || // Mc MEETEI MAYEK VOWEL SIGN VISARGA + (0xABE3 <= code && code <= 0xABE4) || // Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP + (0xABE6 <= code && code <= 0xABE7) || // Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP + (0xABE9 <= code && code <= 0xABEA) || // Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG + 0xABEC == code || // Mc MEETEI MAYEK LUM IYEK + 0x11000 == code || // Mc BRAHMI SIGN CANDRABINDU + 0x11002 == code || // Mc BRAHMI SIGN VISARGA + 0x11082 == code || // Mc KAITHI SIGN VISARGA + (0x110B0 <= code && code <= 0x110B2) || // Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II + (0x110B7 <= code && code <= 0x110B8) || // Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU + 0x1112C == code || // Mc CHAKMA VOWEL SIGN E + 0x11182 == code || // Mc SHARADA SIGN VISARGA + (0x111B3 <= code && code <= 0x111B5) || // Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II + (0x111BF <= code && code <= 0x111C0) || // Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA + (0x1122C <= code && code <= 0x1122E) || // Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II + (0x11232 <= code && code <= 0x11233) || // Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU + 0x11235 == code || // Mc KHOJKI SIGN VIRAMA + (0x112E0 <= code && code <= 0x112E2) || // Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II + (0x11302 <= code && code <= 0x11303) || // Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA + 0x1133F == code || // Mc GRANTHA VOWEL SIGN I + (0x11341 <= code && code <= 0x11344) || // Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR + (0x11347 <= code && code <= 0x11348) || // Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI + (0x1134B <= code && code <= 0x1134D) || // Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA + (0x11362 <= code && code <= 0x11363) || // Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL + (0x11435 <= code && code <= 0x11437) || // Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II + (0x11440 <= code && code <= 0x11441) || // Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU + 0x11445 == code || // Mc NEWA SIGN VISARGA + (0x114B1 <= code && code <= 0x114B2) || // Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II + 0x114B9 == code || // Mc TIRHUTA VOWEL SIGN E + (0x114BB <= code && code <= 0x114BC) || // Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O + 0x114BE == code || // Mc TIRHUTA VOWEL SIGN AU + 0x114C1 == code || // Mc TIRHUTA SIGN VISARGA + (0x115B0 <= code && code <= 0x115B1) || // Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II + (0x115B8 <= code && code <= 0x115BB) || // Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU + 0x115BE == code || // Mc SIDDHAM SIGN VISARGA + (0x11630 <= code && code <= 0x11632) || // Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II + (0x1163B <= code && code <= 0x1163C) || // Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU + 0x1163E == code || // Mc MODI SIGN VISARGA + 0x116AC == code || // Mc TAKRI SIGN VISARGA + (0x116AE <= code && code <= 0x116AF) || // Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II + 0x116B6 == code || // Mc TAKRI SIGN VIRAMA + (0x11720 <= code && code <= 0x11721) || // Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA + 0x11726 == code || // Mc AHOM VOWEL SIGN E + (0x11A07 <= code && code <= 0x11A08) || // Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU + 0x11A39 == code || // Mc ZANABAZAR SQUARE SIGN VISARGA + (0x11A57 <= code && code <= 0x11A58) || // Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU + 0x11A97 == code || // Mc SOYOMBO SIGN VISARGA + 0x11C2F == code || // Mc BHAIKSUKI VOWEL SIGN AA + 0x11C3E == code || // Mc BHAIKSUKI SIGN VISARGA + 0x11CA9 == code || // Mc MARCHEN SUBJOINED LETTER YA + 0x11CB1 == code || // Mc MARCHEN VOWEL SIGN I + 0x11CB4 == code || // Mc MARCHEN VOWEL SIGN O + (0x16F51 <= code && code <= 0x16F7E) || // Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG + 0x1D166 == code || // Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM + 0x1D16D == code // Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT + ){ + return SpacingMark; + } + + + if( + (0x1100 <= code && code <= 0x115F) || // Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER + (0xA960 <= code && code <= 0xA97C) // Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH + ){ + return L; + } + + if( + (0x1160 <= code && code <= 0x11A7) || // Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE + (0xD7B0 <= code && code <= 0xD7C6) // Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E + ){ + return V; + } + + + if( + (0x11A8 <= code && code <= 0x11FF) || // Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN + (0xD7CB <= code && code <= 0xD7FB) // Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH + ){ + return T; + } + + if( + 0xAC00 == code || // Lo HANGUL SYLLABLE GA + 0xAC1C == code || // Lo HANGUL SYLLABLE GAE + 0xAC38 == code || // Lo HANGUL SYLLABLE GYA + 0xAC54 == code || // Lo HANGUL SYLLABLE GYAE + 0xAC70 == code || // Lo HANGUL SYLLABLE GEO + 0xAC8C == code || // Lo HANGUL SYLLABLE GE + 0xACA8 == code || // Lo HANGUL SYLLABLE GYEO + 0xACC4 == code || // Lo HANGUL SYLLABLE GYE + 0xACE0 == code || // Lo HANGUL SYLLABLE GO + 0xACFC == code || // Lo HANGUL SYLLABLE GWA + 0xAD18 == code || // Lo HANGUL SYLLABLE GWAE + 0xAD34 == code || // Lo HANGUL SYLLABLE GOE + 0xAD50 == code || // Lo HANGUL SYLLABLE GYO + 0xAD6C == code || // Lo HANGUL SYLLABLE GU + 0xAD88 == code || // Lo HANGUL SYLLABLE GWEO + 0xADA4 == code || // Lo HANGUL SYLLABLE GWE + 0xADC0 == code || // Lo HANGUL SYLLABLE GWI + 0xADDC == code || // Lo HANGUL SYLLABLE GYU + 0xADF8 == code || // Lo HANGUL SYLLABLE GEU + 0xAE14 == code || // Lo HANGUL SYLLABLE GYI + 0xAE30 == code || // Lo HANGUL SYLLABLE GI + 0xAE4C == code || // Lo HANGUL SYLLABLE GGA + 0xAE68 == code || // Lo HANGUL SYLLABLE GGAE + 0xAE84 == code || // Lo HANGUL SYLLABLE GGYA + 0xAEA0 == code || // Lo HANGUL SYLLABLE GGYAE + 0xAEBC == code || // Lo HANGUL SYLLABLE GGEO + 0xAED8 == code || // Lo HANGUL SYLLABLE GGE + 0xAEF4 == code || // Lo HANGUL SYLLABLE GGYEO + 0xAF10 == code || // Lo HANGUL SYLLABLE GGYE + 0xAF2C == code || // Lo HANGUL SYLLABLE GGO + 0xAF48 == code || // Lo HANGUL SYLLABLE GGWA + 0xAF64 == code || // Lo HANGUL SYLLABLE GGWAE + 0xAF80 == code || // Lo HANGUL SYLLABLE GGOE + 0xAF9C == code || // Lo HANGUL SYLLABLE GGYO + 0xAFB8 == code || // Lo HANGUL SYLLABLE GGU + 0xAFD4 == code || // Lo HANGUL SYLLABLE GGWEO + 0xAFF0 == code || // Lo HANGUL SYLLABLE GGWE + 0xB00C == code || // Lo HANGUL SYLLABLE GGWI + 0xB028 == code || // Lo HANGUL SYLLABLE GGYU + 0xB044 == code || // Lo HANGUL SYLLABLE GGEU + 0xB060 == code || // Lo HANGUL SYLLABLE GGYI + 0xB07C == code || // Lo HANGUL SYLLABLE GGI + 0xB098 == code || // Lo HANGUL SYLLABLE NA + 0xB0B4 == code || // Lo HANGUL SYLLABLE NAE + 0xB0D0 == code || // Lo HANGUL SYLLABLE NYA + 0xB0EC == code || // Lo HANGUL SYLLABLE NYAE + 0xB108 == code || // Lo HANGUL SYLLABLE NEO + 0xB124 == code || // Lo HANGUL SYLLABLE NE + 0xB140 == code || // Lo HANGUL SYLLABLE NYEO + 0xB15C == code || // Lo HANGUL SYLLABLE NYE + 0xB178 == code || // Lo HANGUL SYLLABLE NO + 0xB194 == code || // Lo HANGUL SYLLABLE NWA + 0xB1B0 == code || // Lo HANGUL SYLLABLE NWAE + 0xB1CC == code || // Lo HANGUL SYLLABLE NOE + 0xB1E8 == code || // Lo HANGUL SYLLABLE NYO + 0xB204 == code || // Lo HANGUL SYLLABLE NU + 0xB220 == code || // Lo HANGUL SYLLABLE NWEO + 0xB23C == code || // Lo HANGUL SYLLABLE NWE + 0xB258 == code || // Lo HANGUL SYLLABLE NWI + 0xB274 == code || // Lo HANGUL SYLLABLE NYU + 0xB290 == code || // Lo HANGUL SYLLABLE NEU + 0xB2AC == code || // Lo HANGUL SYLLABLE NYI + 0xB2C8 == code || // Lo HANGUL SYLLABLE NI + 0xB2E4 == code || // Lo HANGUL SYLLABLE DA + 0xB300 == code || // Lo HANGUL SYLLABLE DAE + 0xB31C == code || // Lo HANGUL SYLLABLE DYA + 0xB338 == code || // Lo HANGUL SYLLABLE DYAE + 0xB354 == code || // Lo HANGUL SYLLABLE DEO + 0xB370 == code || // Lo HANGUL SYLLABLE DE + 0xB38C == code || // Lo HANGUL SYLLABLE DYEO + 0xB3A8 == code || // Lo HANGUL SYLLABLE DYE + 0xB3C4 == code || // Lo HANGUL SYLLABLE DO + 0xB3E0 == code || // Lo HANGUL SYLLABLE DWA + 0xB3FC == code || // Lo HANGUL SYLLABLE DWAE + 0xB418 == code || // Lo HANGUL SYLLABLE DOE + 0xB434 == code || // Lo HANGUL SYLLABLE DYO + 0xB450 == code || // Lo HANGUL SYLLABLE DU + 0xB46C == code || // Lo HANGUL SYLLABLE DWEO + 0xB488 == code || // Lo HANGUL SYLLABLE DWE + 0xB4A4 == code || // Lo HANGUL SYLLABLE DWI + 0xB4C0 == code || // Lo HANGUL SYLLABLE DYU + 0xB4DC == code || // Lo HANGUL SYLLABLE DEU + 0xB4F8 == code || // Lo HANGUL SYLLABLE DYI + 0xB514 == code || // Lo HANGUL SYLLABLE DI + 0xB530 == code || // Lo HANGUL SYLLABLE DDA + 0xB54C == code || // Lo HANGUL SYLLABLE DDAE + 0xB568 == code || // Lo HANGUL SYLLABLE DDYA + 0xB584 == code || // Lo HANGUL SYLLABLE DDYAE + 0xB5A0 == code || // Lo HANGUL SYLLABLE DDEO + 0xB5BC == code || // Lo HANGUL SYLLABLE DDE + 0xB5D8 == code || // Lo HANGUL SYLLABLE DDYEO + 0xB5F4 == code || // Lo HANGUL SYLLABLE DDYE + 0xB610 == code || // Lo HANGUL SYLLABLE DDO + 0xB62C == code || // Lo HANGUL SYLLABLE DDWA + 0xB648 == code || // Lo HANGUL SYLLABLE DDWAE + 0xB664 == code || // Lo HANGUL SYLLABLE DDOE + 0xB680 == code || // Lo HANGUL SYLLABLE DDYO + 0xB69C == code || // Lo HANGUL SYLLABLE DDU + 0xB6B8 == code || // Lo HANGUL SYLLABLE DDWEO + 0xB6D4 == code || // Lo HANGUL SYLLABLE DDWE + 0xB6F0 == code || // Lo HANGUL SYLLABLE DDWI + 0xB70C == code || // Lo HANGUL SYLLABLE DDYU + 0xB728 == code || // Lo HANGUL SYLLABLE DDEU + 0xB744 == code || // Lo HANGUL SYLLABLE DDYI + 0xB760 == code || // Lo HANGUL SYLLABLE DDI + 0xB77C == code || // Lo HANGUL SYLLABLE RA + 0xB798 == code || // Lo HANGUL SYLLABLE RAE + 0xB7B4 == code || // Lo HANGUL SYLLABLE RYA + 0xB7D0 == code || // Lo HANGUL SYLLABLE RYAE + 0xB7EC == code || // Lo HANGUL SYLLABLE REO + 0xB808 == code || // Lo HANGUL SYLLABLE RE + 0xB824 == code || // Lo HANGUL SYLLABLE RYEO + 0xB840 == code || // Lo HANGUL SYLLABLE RYE + 0xB85C == code || // Lo HANGUL SYLLABLE RO + 0xB878 == code || // Lo HANGUL SYLLABLE RWA + 0xB894 == code || // Lo HANGUL SYLLABLE RWAE + 0xB8B0 == code || // Lo HANGUL SYLLABLE ROE + 0xB8CC == code || // Lo HANGUL SYLLABLE RYO + 0xB8E8 == code || // Lo HANGUL SYLLABLE RU + 0xB904 == code || // Lo HANGUL SYLLABLE RWEO + 0xB920 == code || // Lo HANGUL SYLLABLE RWE + 0xB93C == code || // Lo HANGUL SYLLABLE RWI + 0xB958 == code || // Lo HANGUL SYLLABLE RYU + 0xB974 == code || // Lo HANGUL SYLLABLE REU + 0xB990 == code || // Lo HANGUL SYLLABLE RYI + 0xB9AC == code || // Lo HANGUL SYLLABLE RI + 0xB9C8 == code || // Lo HANGUL SYLLABLE MA + 0xB9E4 == code || // Lo HANGUL SYLLABLE MAE + 0xBA00 == code || // Lo HANGUL SYLLABLE MYA + 0xBA1C == code || // Lo HANGUL SYLLABLE MYAE + 0xBA38 == code || // Lo HANGUL SYLLABLE MEO + 0xBA54 == code || // Lo HANGUL SYLLABLE ME + 0xBA70 == code || // Lo HANGUL SYLLABLE MYEO + 0xBA8C == code || // Lo HANGUL SYLLABLE MYE + 0xBAA8 == code || // Lo HANGUL SYLLABLE MO + 0xBAC4 == code || // Lo HANGUL SYLLABLE MWA + 0xBAE0 == code || // Lo HANGUL SYLLABLE MWAE + 0xBAFC == code || // Lo HANGUL SYLLABLE MOE + 0xBB18 == code || // Lo HANGUL SYLLABLE MYO + 0xBB34 == code || // Lo HANGUL SYLLABLE MU + 0xBB50 == code || // Lo HANGUL SYLLABLE MWEO + 0xBB6C == code || // Lo HANGUL SYLLABLE MWE + 0xBB88 == code || // Lo HANGUL SYLLABLE MWI + 0xBBA4 == code || // Lo HANGUL SYLLABLE MYU + 0xBBC0 == code || // Lo HANGUL SYLLABLE MEU + 0xBBDC == code || // Lo HANGUL SYLLABLE MYI + 0xBBF8 == code || // Lo HANGUL SYLLABLE MI + 0xBC14 == code || // Lo HANGUL SYLLABLE BA + 0xBC30 == code || // Lo HANGUL SYLLABLE BAE + 0xBC4C == code || // Lo HANGUL SYLLABLE BYA + 0xBC68 == code || // Lo HANGUL SYLLABLE BYAE + 0xBC84 == code || // Lo HANGUL SYLLABLE BEO + 0xBCA0 == code || // Lo HANGUL SYLLABLE BE + 0xBCBC == code || // Lo HANGUL SYLLABLE BYEO + 0xBCD8 == code || // Lo HANGUL SYLLABLE BYE + 0xBCF4 == code || // Lo HANGUL SYLLABLE BO + 0xBD10 == code || // Lo HANGUL SYLLABLE BWA + 0xBD2C == code || // Lo HANGUL SYLLABLE BWAE + 0xBD48 == code || // Lo HANGUL SYLLABLE BOE + 0xBD64 == code || // Lo HANGUL SYLLABLE BYO + 0xBD80 == code || // Lo HANGUL SYLLABLE BU + 0xBD9C == code || // Lo HANGUL SYLLABLE BWEO + 0xBDB8 == code || // Lo HANGUL SYLLABLE BWE + 0xBDD4 == code || // Lo HANGUL SYLLABLE BWI + 0xBDF0 == code || // Lo HANGUL SYLLABLE BYU + 0xBE0C == code || // Lo HANGUL SYLLABLE BEU + 0xBE28 == code || // Lo HANGUL SYLLABLE BYI + 0xBE44 == code || // Lo HANGUL SYLLABLE BI + 0xBE60 == code || // Lo HANGUL SYLLABLE BBA + 0xBE7C == code || // Lo HANGUL SYLLABLE BBAE + 0xBE98 == code || // Lo HANGUL SYLLABLE BBYA + 0xBEB4 == code || // Lo HANGUL SYLLABLE BBYAE + 0xBED0 == code || // Lo HANGUL SYLLABLE BBEO + 0xBEEC == code || // Lo HANGUL SYLLABLE BBE + 0xBF08 == code || // Lo HANGUL SYLLABLE BBYEO + 0xBF24 == code || // Lo HANGUL SYLLABLE BBYE + 0xBF40 == code || // Lo HANGUL SYLLABLE BBO + 0xBF5C == code || // Lo HANGUL SYLLABLE BBWA + 0xBF78 == code || // Lo HANGUL SYLLABLE BBWAE + 0xBF94 == code || // Lo HANGUL SYLLABLE BBOE + 0xBFB0 == code || // Lo HANGUL SYLLABLE BBYO + 0xBFCC == code || // Lo HANGUL SYLLABLE BBU + 0xBFE8 == code || // Lo HANGUL SYLLABLE BBWEO + 0xC004 == code || // Lo HANGUL SYLLABLE BBWE + 0xC020 == code || // Lo HANGUL SYLLABLE BBWI + 0xC03C == code || // Lo HANGUL SYLLABLE BBYU + 0xC058 == code || // Lo HANGUL SYLLABLE BBEU + 0xC074 == code || // Lo HANGUL SYLLABLE BBYI + 0xC090 == code || // Lo HANGUL SYLLABLE BBI + 0xC0AC == code || // Lo HANGUL SYLLABLE SA + 0xC0C8 == code || // Lo HANGUL SYLLABLE SAE + 0xC0E4 == code || // Lo HANGUL SYLLABLE SYA + 0xC100 == code || // Lo HANGUL SYLLABLE SYAE + 0xC11C == code || // Lo HANGUL SYLLABLE SEO + 0xC138 == code || // Lo HANGUL SYLLABLE SE + 0xC154 == code || // Lo HANGUL SYLLABLE SYEO + 0xC170 == code || // Lo HANGUL SYLLABLE SYE + 0xC18C == code || // Lo HANGUL SYLLABLE SO + 0xC1A8 == code || // Lo HANGUL SYLLABLE SWA + 0xC1C4 == code || // Lo HANGUL SYLLABLE SWAE + 0xC1E0 == code || // Lo HANGUL SYLLABLE SOE + 0xC1FC == code || // Lo HANGUL SYLLABLE SYO + 0xC218 == code || // Lo HANGUL SYLLABLE SU + 0xC234 == code || // Lo HANGUL SYLLABLE SWEO + 0xC250 == code || // Lo HANGUL SYLLABLE SWE + 0xC26C == code || // Lo HANGUL SYLLABLE SWI + 0xC288 == code || // Lo HANGUL SYLLABLE SYU + 0xC2A4 == code || // Lo HANGUL SYLLABLE SEU + 0xC2C0 == code || // Lo HANGUL SYLLABLE SYI + 0xC2DC == code || // Lo HANGUL SYLLABLE SI + 0xC2F8 == code || // Lo HANGUL SYLLABLE SSA + 0xC314 == code || // Lo HANGUL SYLLABLE SSAE + 0xC330 == code || // Lo HANGUL SYLLABLE SSYA + 0xC34C == code || // Lo HANGUL SYLLABLE SSYAE + 0xC368 == code || // Lo HANGUL SYLLABLE SSEO + 0xC384 == code || // Lo HANGUL SYLLABLE SSE + 0xC3A0 == code || // Lo HANGUL SYLLABLE SSYEO + 0xC3BC == code || // Lo HANGUL SYLLABLE SSYE + 0xC3D8 == code || // Lo HANGUL SYLLABLE SSO + 0xC3F4 == code || // Lo HANGUL SYLLABLE SSWA + 0xC410 == code || // Lo HANGUL SYLLABLE SSWAE + 0xC42C == code || // Lo HANGUL SYLLABLE SSOE + 0xC448 == code || // Lo HANGUL SYLLABLE SSYO + 0xC464 == code || // Lo HANGUL SYLLABLE SSU + 0xC480 == code || // Lo HANGUL SYLLABLE SSWEO + 0xC49C == code || // Lo HANGUL SYLLABLE SSWE + 0xC4B8 == code || // Lo HANGUL SYLLABLE SSWI + 0xC4D4 == code || // Lo HANGUL SYLLABLE SSYU + 0xC4F0 == code || // Lo HANGUL SYLLABLE SSEU + 0xC50C == code || // Lo HANGUL SYLLABLE SSYI + 0xC528 == code || // Lo HANGUL SYLLABLE SSI + 0xC544 == code || // Lo HANGUL SYLLABLE A + 0xC560 == code || // Lo HANGUL SYLLABLE AE + 0xC57C == code || // Lo HANGUL SYLLABLE YA + 0xC598 == code || // Lo HANGUL SYLLABLE YAE + 0xC5B4 == code || // Lo HANGUL SYLLABLE EO + 0xC5D0 == code || // Lo HANGUL SYLLABLE E + 0xC5EC == code || // Lo HANGUL SYLLABLE YEO + 0xC608 == code || // Lo HANGUL SYLLABLE YE + 0xC624 == code || // Lo HANGUL SYLLABLE O + 0xC640 == code || // Lo HANGUL SYLLABLE WA + 0xC65C == code || // Lo HANGUL SYLLABLE WAE + 0xC678 == code || // Lo HANGUL SYLLABLE OE + 0xC694 == code || // Lo HANGUL SYLLABLE YO + 0xC6B0 == code || // Lo HANGUL SYLLABLE U + 0xC6CC == code || // Lo HANGUL SYLLABLE WEO + 0xC6E8 == code || // Lo HANGUL SYLLABLE WE + 0xC704 == code || // Lo HANGUL SYLLABLE WI + 0xC720 == code || // Lo HANGUL SYLLABLE YU + 0xC73C == code || // Lo HANGUL SYLLABLE EU + 0xC758 == code || // Lo HANGUL SYLLABLE YI + 0xC774 == code || // Lo HANGUL SYLLABLE I + 0xC790 == code || // Lo HANGUL SYLLABLE JA + 0xC7AC == code || // Lo HANGUL SYLLABLE JAE + 0xC7C8 == code || // Lo HANGUL SYLLABLE JYA + 0xC7E4 == code || // Lo HANGUL SYLLABLE JYAE + 0xC800 == code || // Lo HANGUL SYLLABLE JEO + 0xC81C == code || // Lo HANGUL SYLLABLE JE + 0xC838 == code || // Lo HANGUL SYLLABLE JYEO + 0xC854 == code || // Lo HANGUL SYLLABLE JYE + 0xC870 == code || // Lo HANGUL SYLLABLE JO + 0xC88C == code || // Lo HANGUL SYLLABLE JWA + 0xC8A8 == code || // Lo HANGUL SYLLABLE JWAE + 0xC8C4 == code || // Lo HANGUL SYLLABLE JOE + 0xC8E0 == code || // Lo HANGUL SYLLABLE JYO + 0xC8FC == code || // Lo HANGUL SYLLABLE JU + 0xC918 == code || // Lo HANGUL SYLLABLE JWEO + 0xC934 == code || // Lo HANGUL SYLLABLE JWE + 0xC950 == code || // Lo HANGUL SYLLABLE JWI + 0xC96C == code || // Lo HANGUL SYLLABLE JYU + 0xC988 == code || // Lo HANGUL SYLLABLE JEU + 0xC9A4 == code || // Lo HANGUL SYLLABLE JYI + 0xC9C0 == code || // Lo HANGUL SYLLABLE JI + 0xC9DC == code || // Lo HANGUL SYLLABLE JJA + 0xC9F8 == code || // Lo HANGUL SYLLABLE JJAE + 0xCA14 == code || // Lo HANGUL SYLLABLE JJYA + 0xCA30 == code || // Lo HANGUL SYLLABLE JJYAE + 0xCA4C == code || // Lo HANGUL SYLLABLE JJEO + 0xCA68 == code || // Lo HANGUL SYLLABLE JJE + 0xCA84 == code || // Lo HANGUL SYLLABLE JJYEO + 0xCAA0 == code || // Lo HANGUL SYLLABLE JJYE + 0xCABC == code || // Lo HANGUL SYLLABLE JJO + 0xCAD8 == code || // Lo HANGUL SYLLABLE JJWA + 0xCAF4 == code || // Lo HANGUL SYLLABLE JJWAE + 0xCB10 == code || // Lo HANGUL SYLLABLE JJOE + 0xCB2C == code || // Lo HANGUL SYLLABLE JJYO + 0xCB48 == code || // Lo HANGUL SYLLABLE JJU + 0xCB64 == code || // Lo HANGUL SYLLABLE JJWEO + 0xCB80 == code || // Lo HANGUL SYLLABLE JJWE + 0xCB9C == code || // Lo HANGUL SYLLABLE JJWI + 0xCBB8 == code || // Lo HANGUL SYLLABLE JJYU + 0xCBD4 == code || // Lo HANGUL SYLLABLE JJEU + 0xCBF0 == code || // Lo HANGUL SYLLABLE JJYI + 0xCC0C == code || // Lo HANGUL SYLLABLE JJI + 0xCC28 == code || // Lo HANGUL SYLLABLE CA + 0xCC44 == code || // Lo HANGUL SYLLABLE CAE + 0xCC60 == code || // Lo HANGUL SYLLABLE CYA + 0xCC7C == code || // Lo HANGUL SYLLABLE CYAE + 0xCC98 == code || // Lo HANGUL SYLLABLE CEO + 0xCCB4 == code || // Lo HANGUL SYLLABLE CE + 0xCCD0 == code || // Lo HANGUL SYLLABLE CYEO + 0xCCEC == code || // Lo HANGUL SYLLABLE CYE + 0xCD08 == code || // Lo HANGUL SYLLABLE CO + 0xCD24 == code || // Lo HANGUL SYLLABLE CWA + 0xCD40 == code || // Lo HANGUL SYLLABLE CWAE + 0xCD5C == code || // Lo HANGUL SYLLABLE COE + 0xCD78 == code || // Lo HANGUL SYLLABLE CYO + 0xCD94 == code || // Lo HANGUL SYLLABLE CU + 0xCDB0 == code || // Lo HANGUL SYLLABLE CWEO + 0xCDCC == code || // Lo HANGUL SYLLABLE CWE + 0xCDE8 == code || // Lo HANGUL SYLLABLE CWI + 0xCE04 == code || // Lo HANGUL SYLLABLE CYU + 0xCE20 == code || // Lo HANGUL SYLLABLE CEU + 0xCE3C == code || // Lo HANGUL SYLLABLE CYI + 0xCE58 == code || // Lo HANGUL SYLLABLE CI + 0xCE74 == code || // Lo HANGUL SYLLABLE KA + 0xCE90 == code || // Lo HANGUL SYLLABLE KAE + 0xCEAC == code || // Lo HANGUL SYLLABLE KYA + 0xCEC8 == code || // Lo HANGUL SYLLABLE KYAE + 0xCEE4 == code || // Lo HANGUL SYLLABLE KEO + 0xCF00 == code || // Lo HANGUL SYLLABLE KE + 0xCF1C == code || // Lo HANGUL SYLLABLE KYEO + 0xCF38 == code || // Lo HANGUL SYLLABLE KYE + 0xCF54 == code || // Lo HANGUL SYLLABLE KO + 0xCF70 == code || // Lo HANGUL SYLLABLE KWA + 0xCF8C == code || // Lo HANGUL SYLLABLE KWAE + 0xCFA8 == code || // Lo HANGUL SYLLABLE KOE + 0xCFC4 == code || // Lo HANGUL SYLLABLE KYO + 0xCFE0 == code || // Lo HANGUL SYLLABLE KU + 0xCFFC == code || // Lo HANGUL SYLLABLE KWEO + 0xD018 == code || // Lo HANGUL SYLLABLE KWE + 0xD034 == code || // Lo HANGUL SYLLABLE KWI + 0xD050 == code || // Lo HANGUL SYLLABLE KYU + 0xD06C == code || // Lo HANGUL SYLLABLE KEU + 0xD088 == code || // Lo HANGUL SYLLABLE KYI + 0xD0A4 == code || // Lo HANGUL SYLLABLE KI + 0xD0C0 == code || // Lo HANGUL SYLLABLE TA + 0xD0DC == code || // Lo HANGUL SYLLABLE TAE + 0xD0F8 == code || // Lo HANGUL SYLLABLE TYA + 0xD114 == code || // Lo HANGUL SYLLABLE TYAE + 0xD130 == code || // Lo HANGUL SYLLABLE TEO + 0xD14C == code || // Lo HANGUL SYLLABLE TE + 0xD168 == code || // Lo HANGUL SYLLABLE TYEO + 0xD184 == code || // Lo HANGUL SYLLABLE TYE + 0xD1A0 == code || // Lo HANGUL SYLLABLE TO + 0xD1BC == code || // Lo HANGUL SYLLABLE TWA + 0xD1D8 == code || // Lo HANGUL SYLLABLE TWAE + 0xD1F4 == code || // Lo HANGUL SYLLABLE TOE + 0xD210 == code || // Lo HANGUL SYLLABLE TYO + 0xD22C == code || // Lo HANGUL SYLLABLE TU + 0xD248 == code || // Lo HANGUL SYLLABLE TWEO + 0xD264 == code || // Lo HANGUL SYLLABLE TWE + 0xD280 == code || // Lo HANGUL SYLLABLE TWI + 0xD29C == code || // Lo HANGUL SYLLABLE TYU + 0xD2B8 == code || // Lo HANGUL SYLLABLE TEU + 0xD2D4 == code || // Lo HANGUL SYLLABLE TYI + 0xD2F0 == code || // Lo HANGUL SYLLABLE TI + 0xD30C == code || // Lo HANGUL SYLLABLE PA + 0xD328 == code || // Lo HANGUL SYLLABLE PAE + 0xD344 == code || // Lo HANGUL SYLLABLE PYA + 0xD360 == code || // Lo HANGUL SYLLABLE PYAE + 0xD37C == code || // Lo HANGUL SYLLABLE PEO + 0xD398 == code || // Lo HANGUL SYLLABLE PE + 0xD3B4 == code || // Lo HANGUL SYLLABLE PYEO + 0xD3D0 == code || // Lo HANGUL SYLLABLE PYE + 0xD3EC == code || // Lo HANGUL SYLLABLE PO + 0xD408 == code || // Lo HANGUL SYLLABLE PWA + 0xD424 == code || // Lo HANGUL SYLLABLE PWAE + 0xD440 == code || // Lo HANGUL SYLLABLE POE + 0xD45C == code || // Lo HANGUL SYLLABLE PYO + 0xD478 == code || // Lo HANGUL SYLLABLE PU + 0xD494 == code || // Lo HANGUL SYLLABLE PWEO + 0xD4B0 == code || // Lo HANGUL SYLLABLE PWE + 0xD4CC == code || // Lo HANGUL SYLLABLE PWI + 0xD4E8 == code || // Lo HANGUL SYLLABLE PYU + 0xD504 == code || // Lo HANGUL SYLLABLE PEU + 0xD520 == code || // Lo HANGUL SYLLABLE PYI + 0xD53C == code || // Lo HANGUL SYLLABLE PI + 0xD558 == code || // Lo HANGUL SYLLABLE HA + 0xD574 == code || // Lo HANGUL SYLLABLE HAE + 0xD590 == code || // Lo HANGUL SYLLABLE HYA + 0xD5AC == code || // Lo HANGUL SYLLABLE HYAE + 0xD5C8 == code || // Lo HANGUL SYLLABLE HEO + 0xD5E4 == code || // Lo HANGUL SYLLABLE HE + 0xD600 == code || // Lo HANGUL SYLLABLE HYEO + 0xD61C == code || // Lo HANGUL SYLLABLE HYE + 0xD638 == code || // Lo HANGUL SYLLABLE HO + 0xD654 == code || // Lo HANGUL SYLLABLE HWA + 0xD670 == code || // Lo HANGUL SYLLABLE HWAE + 0xD68C == code || // Lo HANGUL SYLLABLE HOE + 0xD6A8 == code || // Lo HANGUL SYLLABLE HYO + 0xD6C4 == code || // Lo HANGUL SYLLABLE HU + 0xD6E0 == code || // Lo HANGUL SYLLABLE HWEO + 0xD6FC == code || // Lo HANGUL SYLLABLE HWE + 0xD718 == code || // Lo HANGUL SYLLABLE HWI + 0xD734 == code || // Lo HANGUL SYLLABLE HYU + 0xD750 == code || // Lo HANGUL SYLLABLE HEU + 0xD76C == code || // Lo HANGUL SYLLABLE HYI + 0xD788 == code // Lo HANGUL SYLLABLE HI + ){ + return LV; + } + + if( + (0xAC01 <= code && code <= 0xAC1B) || // Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH + (0xAC1D <= code && code <= 0xAC37) || // Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH + (0xAC39 <= code && code <= 0xAC53) || // Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH + (0xAC55 <= code && code <= 0xAC6F) || // Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH + (0xAC71 <= code && code <= 0xAC8B) || // Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH + (0xAC8D <= code && code <= 0xACA7) || // Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH + (0xACA9 <= code && code <= 0xACC3) || // Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH + (0xACC5 <= code && code <= 0xACDF) || // Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH + (0xACE1 <= code && code <= 0xACFB) || // Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH + (0xACFD <= code && code <= 0xAD17) || // Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH + (0xAD19 <= code && code <= 0xAD33) || // Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH + (0xAD35 <= code && code <= 0xAD4F) || // Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH + (0xAD51 <= code && code <= 0xAD6B) || // Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH + (0xAD6D <= code && code <= 0xAD87) || // Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH + (0xAD89 <= code && code <= 0xADA3) || // Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH + (0xADA5 <= code && code <= 0xADBF) || // Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH + (0xADC1 <= code && code <= 0xADDB) || // Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH + (0xADDD <= code && code <= 0xADF7) || // Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH + (0xADF9 <= code && code <= 0xAE13) || // Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH + (0xAE15 <= code && code <= 0xAE2F) || // Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH + (0xAE31 <= code && code <= 0xAE4B) || // Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH + (0xAE4D <= code && code <= 0xAE67) || // Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH + (0xAE69 <= code && code <= 0xAE83) || // Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH + (0xAE85 <= code && code <= 0xAE9F) || // Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH + (0xAEA1 <= code && code <= 0xAEBB) || // Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH + (0xAEBD <= code && code <= 0xAED7) || // Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH + (0xAED9 <= code && code <= 0xAEF3) || // Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH + (0xAEF5 <= code && code <= 0xAF0F) || // Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH + (0xAF11 <= code && code <= 0xAF2B) || // Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH + (0xAF2D <= code && code <= 0xAF47) || // Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH + (0xAF49 <= code && code <= 0xAF63) || // Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH + (0xAF65 <= code && code <= 0xAF7F) || // Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH + (0xAF81 <= code && code <= 0xAF9B) || // Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH + (0xAF9D <= code && code <= 0xAFB7) || // Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH + (0xAFB9 <= code && code <= 0xAFD3) || // Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH + (0xAFD5 <= code && code <= 0xAFEF) || // Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH + (0xAFF1 <= code && code <= 0xB00B) || // Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH + (0xB00D <= code && code <= 0xB027) || // Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH + (0xB029 <= code && code <= 0xB043) || // Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH + (0xB045 <= code && code <= 0xB05F) || // Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH + (0xB061 <= code && code <= 0xB07B) || // Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH + (0xB07D <= code && code <= 0xB097) || // Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH + (0xB099 <= code && code <= 0xB0B3) || // Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH + (0xB0B5 <= code && code <= 0xB0CF) || // Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH + (0xB0D1 <= code && code <= 0xB0EB) || // Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH + (0xB0ED <= code && code <= 0xB107) || // Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH + (0xB109 <= code && code <= 0xB123) || // Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH + (0xB125 <= code && code <= 0xB13F) || // Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH + (0xB141 <= code && code <= 0xB15B) || // Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH + (0xB15D <= code && code <= 0xB177) || // Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH + (0xB179 <= code && code <= 0xB193) || // Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH + (0xB195 <= code && code <= 0xB1AF) || // Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH + (0xB1B1 <= code && code <= 0xB1CB) || // Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH + (0xB1CD <= code && code <= 0xB1E7) || // Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH + (0xB1E9 <= code && code <= 0xB203) || // Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH + (0xB205 <= code && code <= 0xB21F) || // Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH + (0xB221 <= code && code <= 0xB23B) || // Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH + (0xB23D <= code && code <= 0xB257) || // Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH + (0xB259 <= code && code <= 0xB273) || // Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH + (0xB275 <= code && code <= 0xB28F) || // Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH + (0xB291 <= code && code <= 0xB2AB) || // Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH + (0xB2AD <= code && code <= 0xB2C7) || // Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH + (0xB2C9 <= code && code <= 0xB2E3) || // Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH + (0xB2E5 <= code && code <= 0xB2FF) || // Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH + (0xB301 <= code && code <= 0xB31B) || // Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH + (0xB31D <= code && code <= 0xB337) || // Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH + (0xB339 <= code && code <= 0xB353) || // Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH + (0xB355 <= code && code <= 0xB36F) || // Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH + (0xB371 <= code && code <= 0xB38B) || // Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH + (0xB38D <= code && code <= 0xB3A7) || // Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH + (0xB3A9 <= code && code <= 0xB3C3) || // Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH + (0xB3C5 <= code && code <= 0xB3DF) || // Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH + (0xB3E1 <= code && code <= 0xB3FB) || // Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH + (0xB3FD <= code && code <= 0xB417) || // Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH + (0xB419 <= code && code <= 0xB433) || // Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH + (0xB435 <= code && code <= 0xB44F) || // Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH + (0xB451 <= code && code <= 0xB46B) || // Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH + (0xB46D <= code && code <= 0xB487) || // Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH + (0xB489 <= code && code <= 0xB4A3) || // Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH + (0xB4A5 <= code && code <= 0xB4BF) || // Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH + (0xB4C1 <= code && code <= 0xB4DB) || // Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH + (0xB4DD <= code && code <= 0xB4F7) || // Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH + (0xB4F9 <= code && code <= 0xB513) || // Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH + (0xB515 <= code && code <= 0xB52F) || // Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH + (0xB531 <= code && code <= 0xB54B) || // Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH + (0xB54D <= code && code <= 0xB567) || // Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH + (0xB569 <= code && code <= 0xB583) || // Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH + (0xB585 <= code && code <= 0xB59F) || // Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH + (0xB5A1 <= code && code <= 0xB5BB) || // Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH + (0xB5BD <= code && code <= 0xB5D7) || // Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH + (0xB5D9 <= code && code <= 0xB5F3) || // Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH + (0xB5F5 <= code && code <= 0xB60F) || // Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH + (0xB611 <= code && code <= 0xB62B) || // Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH + (0xB62D <= code && code <= 0xB647) || // Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH + (0xB649 <= code && code <= 0xB663) || // Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH + (0xB665 <= code && code <= 0xB67F) || // Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH + (0xB681 <= code && code <= 0xB69B) || // Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH + (0xB69D <= code && code <= 0xB6B7) || // Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH + (0xB6B9 <= code && code <= 0xB6D3) || // Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH + (0xB6D5 <= code && code <= 0xB6EF) || // Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH + (0xB6F1 <= code && code <= 0xB70B) || // Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH + (0xB70D <= code && code <= 0xB727) || // Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH + (0xB729 <= code && code <= 0xB743) || // Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH + (0xB745 <= code && code <= 0xB75F) || // Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH + (0xB761 <= code && code <= 0xB77B) || // Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH + (0xB77D <= code && code <= 0xB797) || // Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH + (0xB799 <= code && code <= 0xB7B3) || // Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH + (0xB7B5 <= code && code <= 0xB7CF) || // Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH + (0xB7D1 <= code && code <= 0xB7EB) || // Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH + (0xB7ED <= code && code <= 0xB807) || // Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH + (0xB809 <= code && code <= 0xB823) || // Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH + (0xB825 <= code && code <= 0xB83F) || // Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH + (0xB841 <= code && code <= 0xB85B) || // Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH + (0xB85D <= code && code <= 0xB877) || // Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH + (0xB879 <= code && code <= 0xB893) || // Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH + (0xB895 <= code && code <= 0xB8AF) || // Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH + (0xB8B1 <= code && code <= 0xB8CB) || // Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH + (0xB8CD <= code && code <= 0xB8E7) || // Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH + (0xB8E9 <= code && code <= 0xB903) || // Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH + (0xB905 <= code && code <= 0xB91F) || // Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH + (0xB921 <= code && code <= 0xB93B) || // Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH + (0xB93D <= code && code <= 0xB957) || // Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH + (0xB959 <= code && code <= 0xB973) || // Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH + (0xB975 <= code && code <= 0xB98F) || // Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH + (0xB991 <= code && code <= 0xB9AB) || // Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH + (0xB9AD <= code && code <= 0xB9C7) || // Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH + (0xB9C9 <= code && code <= 0xB9E3) || // Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH + (0xB9E5 <= code && code <= 0xB9FF) || // Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH + (0xBA01 <= code && code <= 0xBA1B) || // Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH + (0xBA1D <= code && code <= 0xBA37) || // Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH + (0xBA39 <= code && code <= 0xBA53) || // Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH + (0xBA55 <= code && code <= 0xBA6F) || // Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH + (0xBA71 <= code && code <= 0xBA8B) || // Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH + (0xBA8D <= code && code <= 0xBAA7) || // Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH + (0xBAA9 <= code && code <= 0xBAC3) || // Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH + (0xBAC5 <= code && code <= 0xBADF) || // Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH + (0xBAE1 <= code && code <= 0xBAFB) || // Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH + (0xBAFD <= code && code <= 0xBB17) || // Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH + (0xBB19 <= code && code <= 0xBB33) || // Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH + (0xBB35 <= code && code <= 0xBB4F) || // Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH + (0xBB51 <= code && code <= 0xBB6B) || // Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH + (0xBB6D <= code && code <= 0xBB87) || // Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH + (0xBB89 <= code && code <= 0xBBA3) || // Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH + (0xBBA5 <= code && code <= 0xBBBF) || // Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH + (0xBBC1 <= code && code <= 0xBBDB) || // Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH + (0xBBDD <= code && code <= 0xBBF7) || // Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH + (0xBBF9 <= code && code <= 0xBC13) || // Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH + (0xBC15 <= code && code <= 0xBC2F) || // Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH + (0xBC31 <= code && code <= 0xBC4B) || // Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH + (0xBC4D <= code && code <= 0xBC67) || // Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH + (0xBC69 <= code && code <= 0xBC83) || // Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH + (0xBC85 <= code && code <= 0xBC9F) || // Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH + (0xBCA1 <= code && code <= 0xBCBB) || // Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH + (0xBCBD <= code && code <= 0xBCD7) || // Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH + (0xBCD9 <= code && code <= 0xBCF3) || // Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH + (0xBCF5 <= code && code <= 0xBD0F) || // Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH + (0xBD11 <= code && code <= 0xBD2B) || // Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH + (0xBD2D <= code && code <= 0xBD47) || // Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH + (0xBD49 <= code && code <= 0xBD63) || // Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH + (0xBD65 <= code && code <= 0xBD7F) || // Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH + (0xBD81 <= code && code <= 0xBD9B) || // Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH + (0xBD9D <= code && code <= 0xBDB7) || // Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH + (0xBDB9 <= code && code <= 0xBDD3) || // Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH + (0xBDD5 <= code && code <= 0xBDEF) || // Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH + (0xBDF1 <= code && code <= 0xBE0B) || // Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH + (0xBE0D <= code && code <= 0xBE27) || // Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH + (0xBE29 <= code && code <= 0xBE43) || // Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH + (0xBE45 <= code && code <= 0xBE5F) || // Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH + (0xBE61 <= code && code <= 0xBE7B) || // Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH + (0xBE7D <= code && code <= 0xBE97) || // Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH + (0xBE99 <= code && code <= 0xBEB3) || // Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH + (0xBEB5 <= code && code <= 0xBECF) || // Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH + (0xBED1 <= code && code <= 0xBEEB) || // Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH + (0xBEED <= code && code <= 0xBF07) || // Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH + (0xBF09 <= code && code <= 0xBF23) || // Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH + (0xBF25 <= code && code <= 0xBF3F) || // Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH + (0xBF41 <= code && code <= 0xBF5B) || // Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH + (0xBF5D <= code && code <= 0xBF77) || // Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH + (0xBF79 <= code && code <= 0xBF93) || // Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH + (0xBF95 <= code && code <= 0xBFAF) || // Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH + (0xBFB1 <= code && code <= 0xBFCB) || // Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH + (0xBFCD <= code && code <= 0xBFE7) || // Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH + (0xBFE9 <= code && code <= 0xC003) || // Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH + (0xC005 <= code && code <= 0xC01F) || // Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH + (0xC021 <= code && code <= 0xC03B) || // Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH + (0xC03D <= code && code <= 0xC057) || // Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH + (0xC059 <= code && code <= 0xC073) || // Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH + (0xC075 <= code && code <= 0xC08F) || // Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH + (0xC091 <= code && code <= 0xC0AB) || // Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH + (0xC0AD <= code && code <= 0xC0C7) || // Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH + (0xC0C9 <= code && code <= 0xC0E3) || // Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH + (0xC0E5 <= code && code <= 0xC0FF) || // Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH + (0xC101 <= code && code <= 0xC11B) || // Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH + (0xC11D <= code && code <= 0xC137) || // Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH + (0xC139 <= code && code <= 0xC153) || // Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH + (0xC155 <= code && code <= 0xC16F) || // Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH + (0xC171 <= code && code <= 0xC18B) || // Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH + (0xC18D <= code && code <= 0xC1A7) || // Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH + (0xC1A9 <= code && code <= 0xC1C3) || // Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH + (0xC1C5 <= code && code <= 0xC1DF) || // Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH + (0xC1E1 <= code && code <= 0xC1FB) || // Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH + (0xC1FD <= code && code <= 0xC217) || // Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH + (0xC219 <= code && code <= 0xC233) || // Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH + (0xC235 <= code && code <= 0xC24F) || // Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH + (0xC251 <= code && code <= 0xC26B) || // Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH + (0xC26D <= code && code <= 0xC287) || // Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH + (0xC289 <= code && code <= 0xC2A3) || // Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH + (0xC2A5 <= code && code <= 0xC2BF) || // Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH + (0xC2C1 <= code && code <= 0xC2DB) || // Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH + (0xC2DD <= code && code <= 0xC2F7) || // Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH + (0xC2F9 <= code && code <= 0xC313) || // Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH + (0xC315 <= code && code <= 0xC32F) || // Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH + (0xC331 <= code && code <= 0xC34B) || // Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH + (0xC34D <= code && code <= 0xC367) || // Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH + (0xC369 <= code && code <= 0xC383) || // Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH + (0xC385 <= code && code <= 0xC39F) || // Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH + (0xC3A1 <= code && code <= 0xC3BB) || // Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH + (0xC3BD <= code && code <= 0xC3D7) || // Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH + (0xC3D9 <= code && code <= 0xC3F3) || // Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH + (0xC3F5 <= code && code <= 0xC40F) || // Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH + (0xC411 <= code && code <= 0xC42B) || // Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH + (0xC42D <= code && code <= 0xC447) || // Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH + (0xC449 <= code && code <= 0xC463) || // Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH + (0xC465 <= code && code <= 0xC47F) || // Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH + (0xC481 <= code && code <= 0xC49B) || // Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH + (0xC49D <= code && code <= 0xC4B7) || // Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH + (0xC4B9 <= code && code <= 0xC4D3) || // Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH + (0xC4D5 <= code && code <= 0xC4EF) || // Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH + (0xC4F1 <= code && code <= 0xC50B) || // Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH + (0xC50D <= code && code <= 0xC527) || // Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH + (0xC529 <= code && code <= 0xC543) || // Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH + (0xC545 <= code && code <= 0xC55F) || // Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH + (0xC561 <= code && code <= 0xC57B) || // Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH + (0xC57D <= code && code <= 0xC597) || // Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH + (0xC599 <= code && code <= 0xC5B3) || // Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH + (0xC5B5 <= code && code <= 0xC5CF) || // Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH + (0xC5D1 <= code && code <= 0xC5EB) || // Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH + (0xC5ED <= code && code <= 0xC607) || // Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH + (0xC609 <= code && code <= 0xC623) || // Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH + (0xC625 <= code && code <= 0xC63F) || // Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH + (0xC641 <= code && code <= 0xC65B) || // Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH + (0xC65D <= code && code <= 0xC677) || // Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH + (0xC679 <= code && code <= 0xC693) || // Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH + (0xC695 <= code && code <= 0xC6AF) || // Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH + (0xC6B1 <= code && code <= 0xC6CB) || // Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH + (0xC6CD <= code && code <= 0xC6E7) || // Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH + (0xC6E9 <= code && code <= 0xC703) || // Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH + (0xC705 <= code && code <= 0xC71F) || // Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH + (0xC721 <= code && code <= 0xC73B) || // Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH + (0xC73D <= code && code <= 0xC757) || // Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH + (0xC759 <= code && code <= 0xC773) || // Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH + (0xC775 <= code && code <= 0xC78F) || // Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH + (0xC791 <= code && code <= 0xC7AB) || // Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH + (0xC7AD <= code && code <= 0xC7C7) || // Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH + (0xC7C9 <= code && code <= 0xC7E3) || // Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH + (0xC7E5 <= code && code <= 0xC7FF) || // Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH + (0xC801 <= code && code <= 0xC81B) || // Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH + (0xC81D <= code && code <= 0xC837) || // Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH + (0xC839 <= code && code <= 0xC853) || // Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH + (0xC855 <= code && code <= 0xC86F) || // Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH + (0xC871 <= code && code <= 0xC88B) || // Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH + (0xC88D <= code && code <= 0xC8A7) || // Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH + (0xC8A9 <= code && code <= 0xC8C3) || // Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH + (0xC8C5 <= code && code <= 0xC8DF) || // Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH + (0xC8E1 <= code && code <= 0xC8FB) || // Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH + (0xC8FD <= code && code <= 0xC917) || // Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH + (0xC919 <= code && code <= 0xC933) || // Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH + (0xC935 <= code && code <= 0xC94F) || // Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH + (0xC951 <= code && code <= 0xC96B) || // Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH + (0xC96D <= code && code <= 0xC987) || // Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH + (0xC989 <= code && code <= 0xC9A3) || // Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH + (0xC9A5 <= code && code <= 0xC9BF) || // Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH + (0xC9C1 <= code && code <= 0xC9DB) || // Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH + (0xC9DD <= code && code <= 0xC9F7) || // Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH + (0xC9F9 <= code && code <= 0xCA13) || // Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH + (0xCA15 <= code && code <= 0xCA2F) || // Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH + (0xCA31 <= code && code <= 0xCA4B) || // Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH + (0xCA4D <= code && code <= 0xCA67) || // Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH + (0xCA69 <= code && code <= 0xCA83) || // Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH + (0xCA85 <= code && code <= 0xCA9F) || // Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH + (0xCAA1 <= code && code <= 0xCABB) || // Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH + (0xCABD <= code && code <= 0xCAD7) || // Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH + (0xCAD9 <= code && code <= 0xCAF3) || // Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH + (0xCAF5 <= code && code <= 0xCB0F) || // Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH + (0xCB11 <= code && code <= 0xCB2B) || // Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH + (0xCB2D <= code && code <= 0xCB47) || // Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH + (0xCB49 <= code && code <= 0xCB63) || // Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH + (0xCB65 <= code && code <= 0xCB7F) || // Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH + (0xCB81 <= code && code <= 0xCB9B) || // Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH + (0xCB9D <= code && code <= 0xCBB7) || // Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH + (0xCBB9 <= code && code <= 0xCBD3) || // Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH + (0xCBD5 <= code && code <= 0xCBEF) || // Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH + (0xCBF1 <= code && code <= 0xCC0B) || // Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH + (0xCC0D <= code && code <= 0xCC27) || // Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH + (0xCC29 <= code && code <= 0xCC43) || // Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH + (0xCC45 <= code && code <= 0xCC5F) || // Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH + (0xCC61 <= code && code <= 0xCC7B) || // Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH + (0xCC7D <= code && code <= 0xCC97) || // Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH + (0xCC99 <= code && code <= 0xCCB3) || // Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH + (0xCCB5 <= code && code <= 0xCCCF) || // Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH + (0xCCD1 <= code && code <= 0xCCEB) || // Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH + (0xCCED <= code && code <= 0xCD07) || // Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH + (0xCD09 <= code && code <= 0xCD23) || // Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH + (0xCD25 <= code && code <= 0xCD3F) || // Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH + (0xCD41 <= code && code <= 0xCD5B) || // Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH + (0xCD5D <= code && code <= 0xCD77) || // Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH + (0xCD79 <= code && code <= 0xCD93) || // Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH + (0xCD95 <= code && code <= 0xCDAF) || // Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH + (0xCDB1 <= code && code <= 0xCDCB) || // Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH + (0xCDCD <= code && code <= 0xCDE7) || // Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH + (0xCDE9 <= code && code <= 0xCE03) || // Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH + (0xCE05 <= code && code <= 0xCE1F) || // Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH + (0xCE21 <= code && code <= 0xCE3B) || // Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH + (0xCE3D <= code && code <= 0xCE57) || // Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH + (0xCE59 <= code && code <= 0xCE73) || // Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH + (0xCE75 <= code && code <= 0xCE8F) || // Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH + (0xCE91 <= code && code <= 0xCEAB) || // Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH + (0xCEAD <= code && code <= 0xCEC7) || // Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH + (0xCEC9 <= code && code <= 0xCEE3) || // Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH + (0xCEE5 <= code && code <= 0xCEFF) || // Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH + (0xCF01 <= code && code <= 0xCF1B) || // Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH + (0xCF1D <= code && code <= 0xCF37) || // Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH + (0xCF39 <= code && code <= 0xCF53) || // Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH + (0xCF55 <= code && code <= 0xCF6F) || // Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH + (0xCF71 <= code && code <= 0xCF8B) || // Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH + (0xCF8D <= code && code <= 0xCFA7) || // Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH + (0xCFA9 <= code && code <= 0xCFC3) || // Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH + (0xCFC5 <= code && code <= 0xCFDF) || // Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH + (0xCFE1 <= code && code <= 0xCFFB) || // Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH + (0xCFFD <= code && code <= 0xD017) || // Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH + (0xD019 <= code && code <= 0xD033) || // Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH + (0xD035 <= code && code <= 0xD04F) || // Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH + (0xD051 <= code && code <= 0xD06B) || // Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH + (0xD06D <= code && code <= 0xD087) || // Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH + (0xD089 <= code && code <= 0xD0A3) || // Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH + (0xD0A5 <= code && code <= 0xD0BF) || // Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH + (0xD0C1 <= code && code <= 0xD0DB) || // Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH + (0xD0DD <= code && code <= 0xD0F7) || // Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH + (0xD0F9 <= code && code <= 0xD113) || // Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH + (0xD115 <= code && code <= 0xD12F) || // Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH + (0xD131 <= code && code <= 0xD14B) || // Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH + (0xD14D <= code && code <= 0xD167) || // Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH + (0xD169 <= code && code <= 0xD183) || // Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH + (0xD185 <= code && code <= 0xD19F) || // Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH + (0xD1A1 <= code && code <= 0xD1BB) || // Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH + (0xD1BD <= code && code <= 0xD1D7) || // Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH + (0xD1D9 <= code && code <= 0xD1F3) || // Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH + (0xD1F5 <= code && code <= 0xD20F) || // Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH + (0xD211 <= code && code <= 0xD22B) || // Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH + (0xD22D <= code && code <= 0xD247) || // Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH + (0xD249 <= code && code <= 0xD263) || // Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH + (0xD265 <= code && code <= 0xD27F) || // Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH + (0xD281 <= code && code <= 0xD29B) || // Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH + (0xD29D <= code && code <= 0xD2B7) || // Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH + (0xD2B9 <= code && code <= 0xD2D3) || // Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH + (0xD2D5 <= code && code <= 0xD2EF) || // Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH + (0xD2F1 <= code && code <= 0xD30B) || // Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH + (0xD30D <= code && code <= 0xD327) || // Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH + (0xD329 <= code && code <= 0xD343) || // Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH + (0xD345 <= code && code <= 0xD35F) || // Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH + (0xD361 <= code && code <= 0xD37B) || // Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH + (0xD37D <= code && code <= 0xD397) || // Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH + (0xD399 <= code && code <= 0xD3B3) || // Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH + (0xD3B5 <= code && code <= 0xD3CF) || // Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH + (0xD3D1 <= code && code <= 0xD3EB) || // Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH + (0xD3ED <= code && code <= 0xD407) || // Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH + (0xD409 <= code && code <= 0xD423) || // Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH + (0xD425 <= code && code <= 0xD43F) || // Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH + (0xD441 <= code && code <= 0xD45B) || // Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH + (0xD45D <= code && code <= 0xD477) || // Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH + (0xD479 <= code && code <= 0xD493) || // Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH + (0xD495 <= code && code <= 0xD4AF) || // Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH + (0xD4B1 <= code && code <= 0xD4CB) || // Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH + (0xD4CD <= code && code <= 0xD4E7) || // Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH + (0xD4E9 <= code && code <= 0xD503) || // Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH + (0xD505 <= code && code <= 0xD51F) || // Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH + (0xD521 <= code && code <= 0xD53B) || // Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH + (0xD53D <= code && code <= 0xD557) || // Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH + (0xD559 <= code && code <= 0xD573) || // Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH + (0xD575 <= code && code <= 0xD58F) || // Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH + (0xD591 <= code && code <= 0xD5AB) || // Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH + (0xD5AD <= code && code <= 0xD5C7) || // Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH + (0xD5C9 <= code && code <= 0xD5E3) || // Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH + (0xD5E5 <= code && code <= 0xD5FF) || // Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH + (0xD601 <= code && code <= 0xD61B) || // Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH + (0xD61D <= code && code <= 0xD637) || // Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH + (0xD639 <= code && code <= 0xD653) || // Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH + (0xD655 <= code && code <= 0xD66F) || // Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH + (0xD671 <= code && code <= 0xD68B) || // Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH + (0xD68D <= code && code <= 0xD6A7) || // Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH + (0xD6A9 <= code && code <= 0xD6C3) || // Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH + (0xD6C5 <= code && code <= 0xD6DF) || // Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH + (0xD6E1 <= code && code <= 0xD6FB) || // Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH + (0xD6FD <= code && code <= 0xD717) || // Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH + (0xD719 <= code && code <= 0xD733) || // Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH + (0xD735 <= code && code <= 0xD74F) || // Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH + (0xD751 <= code && code <= 0xD76B) || // Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH + (0xD76D <= code && code <= 0xD787) || // Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH + (0xD789 <= code && code <= 0xD7A3) // Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH + ){ + return LVT; + } + + if( + 0x261D == code || // So WHITE UP POINTING INDEX + 0x26F9 == code || // So PERSON WITH BALL + (0x270A <= code && code <= 0x270D) || // So [4] RAISED FIST..WRITING HAND + 0x1F385 == code || // So FATHER CHRISTMAS + (0x1F3C2 <= code && code <= 0x1F3C4) || // So [3] SNOWBOARDER..SURFER + 0x1F3C7 == code || // So HORSE RACING + (0x1F3CA <= code && code <= 0x1F3CC) || // So [3] SWIMMER..GOLFER + (0x1F442 <= code && code <= 0x1F443) || // So [2] EAR..NOSE + (0x1F446 <= code && code <= 0x1F450) || // So [11] WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN + 0x1F46E == code || // So POLICE OFFICER + (0x1F470 <= code && code <= 0x1F478) || // So [9] BRIDE WITH VEIL..PRINCESS + 0x1F47C == code || // So BABY ANGEL + (0x1F481 <= code && code <= 0x1F483) || // So [3] INFORMATION DESK PERSON..DANCER + (0x1F485 <= code && code <= 0x1F487) || // So [3] NAIL POLISH..HAIRCUT + 0x1F4AA == code || // So FLEXED BICEPS + (0x1F574 <= code && code <= 0x1F575) || // So [2] MAN IN BUSINESS SUIT LEVITATING..SLEUTH OR SPY + 0x1F57A == code || // So MAN DANCING + 0x1F590 == code || // So RAISED HAND WITH FINGERS SPLAYED + (0x1F595 <= code && code <= 0x1F596) || // So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS + (0x1F645 <= code && code <= 0x1F647) || // So [3] FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY + (0x1F64B <= code && code <= 0x1F64F) || // So [5] HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS + 0x1F6A3 == code || // So ROWBOAT + (0x1F6B4 <= code && code <= 0x1F6B6) || // So [3] BICYCLIST..PEDESTRIAN + 0x1F6C0 == code || // So BATH + 0x1F6CC == code || // So SLEEPING ACCOMMODATION + (0x1F918 <= code && code <= 0x1F91C) || // So [5] SIGN OF THE HORNS..RIGHT-FACING FIST + (0x1F91E <= code && code <= 0x1F91F) || // So [2] HAND WITH INDEX AND MIDDLE FINGERS CROSSED..I LOVE YOU HAND SIGN + 0x1F926 == code || // So FACE PALM + (0x1F930 <= code && code <= 0x1F939) || // So [10] PREGNANT WOMAN..JUGGLING + (0x1F93D <= code && code <= 0x1F93E) || // So [2] WATER POLO..HANDBALL + (0x1F9D1 <= code && code <= 0x1F9DD) // So [13] ADULT..ELF + ){ + return E_Base; + } + + if( + (0x1F3FB <= code && code <= 0x1F3FF) // Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 + ){ + return E_Modifier; + } + + if( + 0x200D == code // Cf ZERO WIDTH JOINER + ){ + return ZWJ; + } + + if( + 0x2640 == code || // So FEMALE SIGN + 0x2642 == code || // So MALE SIGN + (0x2695 <= code && code <= 0x2696) || // So [2] STAFF OF AESCULAPIUS..SCALES + 0x2708 == code || // So AIRPLANE + 0x2764 == code || // So HEAVY BLACK HEART + 0x1F308 == code || // So RAINBOW + 0x1F33E == code || // So EAR OF RICE + 0x1F373 == code || // So COOKING + 0x1F393 == code || // So GRADUATION CAP + 0x1F3A4 == code || // So MICROPHONE + 0x1F3A8 == code || // So ARTIST PALETTE + 0x1F3EB == code || // So SCHOOL + 0x1F3ED == code || // So FACTORY + 0x1F48B == code || // So KISS MARK + (0x1F4BB <= code && code <= 0x1F4BC) || // So [2] PERSONAL COMPUTER..BRIEFCASE + 0x1F527 == code || // So WRENCH + 0x1F52C == code || // So MICROSCOPE + 0x1F5E8 == code || // So LEFT SPEECH BUBBLE + 0x1F680 == code || // So ROCKET + 0x1F692 == code // So FIRE ENGINE + ){ + return Glue_After_Zwj; + } + + if( + (0x1F466 <= code && code <= 0x1F469) // So [4] BOY..WOMAN + ){ + return E_Base_GAZ; + } + + + //all unlisted characters have a grapheme break property of "Other" + return Other; + } + return this; +} + +if (typeof module != 'undefined' && module.exports) { + module.exports = GraphemeSplitter; +} diff --git a/tools/node_modules/eslint/node_modules/grapheme-splitter/package.json b/tools/node_modules/eslint/node_modules/grapheme-splitter/package.json new file mode 100644 index 00000000000..61479af3da5 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/grapheme-splitter/package.json @@ -0,0 +1,34 @@ +{ + "name": "grapheme-splitter", + "version": "1.0.4", + "description": "A JavaScript library that breaks strings into their individual user-perceived characters. It supports emojis!", + "homepage": "https://github.com/orling/grapheme-splitter", + "author": "Orlin Georgiev", + "contributors": [ + { + "name": "Lucas Tadeu Teixeira", + "email": "lucas@fastmail.nl", + "url": "https://lucas.is" + } + ], + "main": "index.js", + "license": "MIT", + "keywords": [ + "utf-8", + "strings", + "emoji", + "split" + ], + "scripts": { + "test": "tape tests/grapheme_splitter_tests.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/orling/grapheme-splitter.git" + }, + "bugs": "https://github.com/orling/grapheme-splitter/issues", + "dependencies": {}, + "devDependencies": { + "tape": "^4.6.3" + } +} diff --git a/tools/node_modules/eslint/node_modules/is-number/LICENSE b/tools/node_modules/eslint/node_modules/is-number/LICENSE new file mode 100644 index 00000000000..9af4a67d206 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/is-number/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/is-number/index.js b/tools/node_modules/eslint/node_modules/is-number/index.js new file mode 100644 index 00000000000..27f19b757f7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/is-number/index.js @@ -0,0 +1,18 @@ +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +module.exports = function(num) { + if (typeof num === 'number') { + return num - num === 0; + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); + } + return false; +}; diff --git a/tools/node_modules/eslint/node_modules/is-number/package.json b/tools/node_modules/eslint/node_modules/is-number/package.json new file mode 100644 index 00000000000..3715072609d --- /dev/null +++ b/tools/node_modules/eslint/node_modules/is-number/package.json @@ -0,0 +1,82 @@ +{ + "name": "is-number", + "description": "Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc.", + "version": "7.0.0", + "homepage": "https://github.com/jonschlinkert/is-number", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Olsten Larck (https://i.am.charlike.online)", + "Rouven Weßling (www.rouvenwessling.de)" + ], + "repository": "jonschlinkert/is-number", + "bugs": { + "url": "https://github.com/jonschlinkert/is-number/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.12.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "ansi": "^0.3.1", + "benchmark": "^2.1.4", + "gulp-format-md": "^1.0.0", + "mocha": "^3.5.3" + }, + "keywords": [ + "cast", + "check", + "coerce", + "coercion", + "finite", + "integer", + "is", + "isnan", + "is-nan", + "is-num", + "is-number", + "isnumber", + "isfinite", + "istype", + "kind", + "math", + "nan", + "num", + "number", + "numeric", + "parseFloat", + "parseInt", + "test", + "type", + "typeof", + "value" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "related": { + "list": [ + "is-plain-object", + "is-primitive", + "isobject", + "kind-of" + ] + }, + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/LICENSE b/tools/node_modules/eslint/node_modules/js-sdsl/LICENSE new file mode 100644 index 00000000000..d46bd7ee7c5 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Zilong Yao + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/ContainerBase/index.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/ContainerBase/index.js new file mode 100644 index 00000000000..44f322ceab4 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/ContainerBase/index.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Container = exports.Base = exports.ContainerIterator = void 0; +class ContainerIterator { + constructor(iteratorType = ContainerIterator.NORMAL) { + this.iteratorType = iteratorType; + } +} +exports.ContainerIterator = ContainerIterator; +ContainerIterator.NORMAL = false; +ContainerIterator.REVERSE = true; +class Base { + constructor() { + /** + * @description Container's size. + * @protected + */ + this.length = 0; + } + /** + * @return The size of the container. + */ + size() { + return this.length; + } + /** + * @return Boolean about if the container is empty. + */ + empty() { + return this.length === 0; + } +} +exports.Base = Base; +class Container extends Base { +} +exports.Container = Container; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/HashContainer/Base/index.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/HashContainer/Base/index.js new file mode 100644 index 00000000000..70d8cf335ad --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/HashContainer/Base/index.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const index_1 = require("../../ContainerBase/index"); +class HashContainer extends index_1.Base { + constructor(initBucketNum = 16, hashFunc = (x) => { + let str; + if (typeof x !== 'string') { + str = JSON.stringify(x); + } + else + str = x; + let hashCode = 0; + const strLength = str.length; + for (let i = 0; i < strLength; i++) { + const ch = str.charCodeAt(i); + hashCode = ((hashCode << 5) - hashCode) + ch; + hashCode |= 0; + } + return hashCode >>> 0; + }) { + super(); + if (initBucketNum < 16 || (initBucketNum & (initBucketNum - 1)) !== 0) { + throw new RangeError('InitBucketNum range error'); + } + this.bucketNum = this.initBucketNum = initBucketNum; + this.hashFunc = hashFunc; + } + clear() { + this.length = 0; + this.bucketNum = this.initBucketNum; + this.hashTable = []; + } +} +HashContainer.sigma = 0.75; +HashContainer.treeifyThreshold = 8; +HashContainer.untreeifyThreshold = 6; +HashContainer.minTreeifySize = 64; +HashContainer.maxBucketNum = (1 << 30); +exports.default = HashContainer; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/HashContainer/HashMap.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/HashContainer/HashMap.js new file mode 100644 index 00000000000..7ad265f2b6d --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/HashContainer/HashMap.js @@ -0,0 +1,200 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const index_1 = __importDefault(require("./Base/index")); +const Vector_1 = __importDefault(require("../SequentialContainer/Vector")); +const OrderedMap_1 = __importDefault(require("../TreeContainer/OrderedMap")); +class HashMap extends index_1.default { + constructor(container = [], initBucketNum, hashFunc) { + super(initBucketNum, hashFunc); + this.hashTable = []; + container.forEach(element => this.setElement(element[0], element[1])); + } + reAllocate() { + if (this.bucketNum >= index_1.default.maxBucketNum) + return; + const newHashTable = []; + const originalBucketNum = this.bucketNum; + this.bucketNum <<= 1; + const keys = Object.keys(this.hashTable); + const keyNums = keys.length; + for (let i = 0; i < keyNums; ++i) { + const index = parseInt(keys[i]); + const container = this.hashTable[index]; + const size = container.size(); + if (size === 0) + continue; + if (size === 1) { + const element = container.front(); + newHashTable[this.hashFunc(element[0]) & (this.bucketNum - 1)] = new Vector_1.default([element], false); + continue; + } + const lowList = []; + const highList = []; + container.forEach(element => { + const hashCode = this.hashFunc(element[0]); + if ((hashCode & originalBucketNum) === 0) { + lowList.push(element); + } + else + highList.push(element); + }); + if (container instanceof OrderedMap_1.default) { + if (lowList.length > index_1.default.untreeifyThreshold) { + newHashTable[index] = new OrderedMap_1.default(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector_1.default(lowList, false); + } + if (highList.length > index_1.default.untreeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedMap_1.default(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector_1.default(highList, false); + } + } + else { + if (lowList.length >= index_1.default.treeifyThreshold) { + newHashTable[index] = new OrderedMap_1.default(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector_1.default(lowList, false); + } + if (highList.length >= index_1.default.treeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedMap_1.default(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector_1.default(highList, false); + } + } + } + this.hashTable = newHashTable; + } + forEach(callback) { + const containers = Object.values(this.hashTable); + const containersNum = containers.length; + let index = 0; + for (let i = 0; i < containersNum; ++i) { + containers[i].forEach(element => callback(element, index++)); + } + } + /** + * @description Insert a new key-value pair to hash map or set value by key. + * @param key The key you want to insert. + * @param value The value you want to insert. + * @example HashMap.setElement(1, 2); // insert a key-value pair [1, 2] + */ + setElement(key, value) { + const index = this.hashFunc(key) & (this.bucketNum - 1); + const container = this.hashTable[index]; + if (!container) { + this.length += 1; + this.hashTable[index] = new Vector_1.default([[key, value]], false); + } + else { + const preSize = container.size(); + if (container instanceof Vector_1.default) { + for (const pair of container) { + if (pair[0] === key) { + pair[1] = value; + return; + } + } + container.pushBack([key, value]); + if (preSize + 1 >= HashMap.treeifyThreshold) { + if (this.bucketNum <= HashMap.minTreeifySize) { + this.length += 1; + this.reAllocate(); + return; + } + this.hashTable[index] = new OrderedMap_1.default(this.hashTable[index]); + } + this.length += 1; + } + else { + container.setElement(key, value); + const curSize = container.size(); + this.length += curSize - preSize; + } + } + if (this.length > this.bucketNum * HashMap.sigma) { + this.reAllocate(); + } + } + /** + * @description Get the value of the element which has the specified key. + * @param key The key you want to get. + */ + getElementByKey(key) { + const index = this.hashFunc(key) & (this.bucketNum - 1); + const container = this.hashTable[index]; + if (!container) + return undefined; + if (container instanceof OrderedMap_1.default) { + return container.getElementByKey(key); + } + else { + for (const pair of container) { + if (pair[0] === key) + return pair[1]; + } + return undefined; + } + } + eraseElementByKey(key) { + const index = this.hashFunc(key) & (this.bucketNum - 1); + const container = this.hashTable[index]; + if (!container) + return; + if (container instanceof Vector_1.default) { + let pos = 0; + for (const pair of container) { + if (pair[0] === key) { + container.eraseElementByPos(pos); + this.length -= 1; + return; + } + pos += 1; + } + } + else { + const preSize = container.size(); + container.eraseElementByKey(key); + const curSize = container.size(); + this.length += curSize - preSize; + if (curSize <= index_1.default.untreeifyThreshold) { + this.hashTable[index] = new Vector_1.default(container); + } + } + } + find(key) { + const index = this.hashFunc(key) & (this.bucketNum - 1); + const container = this.hashTable[index]; + if (!container) + return false; + if (container instanceof OrderedMap_1.default) { + return !container.find(key) + .equals(container.end()); + } + for (const pair of container) { + if (pair[0] === key) + return true; + } + return false; + } + [Symbol.iterator]() { + return function* () { + const containers = Object.values(this.hashTable); + const containersNum = containers.length; + for (let i = 0; i < containersNum; ++i) { + const container = containers[i]; + for (const element of container) { + yield element; + } + } + }.bind(this)(); + } +} +exports.default = HashMap; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/HashContainer/HashSet.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/HashContainer/HashSet.js new file mode 100644 index 00000000000..c01d90411b5 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/HashContainer/HashSet.js @@ -0,0 +1,164 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const index_1 = __importDefault(require("./Base/index")); +const Vector_1 = __importDefault(require("../SequentialContainer/Vector")); +const OrderedSet_1 = __importDefault(require("../TreeContainer/OrderedSet")); +class HashSet extends index_1.default { + constructor(container = [], initBucketNum, hashFunc) { + super(initBucketNum, hashFunc); + this.hashTable = []; + container.forEach(element => this.insert(element)); + } + reAllocate() { + if (this.bucketNum >= index_1.default.maxBucketNum) + return; + const newHashTable = []; + const originalBucketNum = this.bucketNum; + this.bucketNum <<= 1; + const keys = Object.keys(this.hashTable); + const keyNums = keys.length; + for (let i = 0; i < keyNums; ++i) { + const index = parseInt(keys[i]); + const container = this.hashTable[index]; + const size = container.size(); + if (size === 0) + continue; + if (size === 1) { + const element = container.front(); + newHashTable[this.hashFunc(element) & (this.bucketNum - 1)] = new Vector_1.default([element], false); + continue; + } + const lowList = []; + const highList = []; + container.forEach(element => { + const hashCode = this.hashFunc(element); + if ((hashCode & originalBucketNum) === 0) { + lowList.push(element); + } + else + highList.push(element); + }); + if (container instanceof OrderedSet_1.default) { + if (lowList.length > index_1.default.untreeifyThreshold) { + newHashTable[index] = new OrderedSet_1.default(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector_1.default(lowList, false); + } + if (highList.length > index_1.default.untreeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedSet_1.default(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector_1.default(highList, false); + } + } + else { + if (lowList.length >= index_1.default.treeifyThreshold) { + newHashTable[index] = new OrderedSet_1.default(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector_1.default(lowList, false); + } + if (highList.length >= index_1.default.treeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedSet_1.default(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector_1.default(highList, false); + } + } + } + this.hashTable = newHashTable; + } + forEach(callback) { + const containers = Object.values(this.hashTable); + const containersNum = containers.length; + let index = 0; + for (let i = 0; i < containersNum; ++i) { + containers[i].forEach(element => callback(element, index++)); + } + } + /** + * @description Insert element to hash set. + * @param element The element you want to insert. + */ + insert(element) { + const index = this.hashFunc(element) & (this.bucketNum - 1); + const container = this.hashTable[index]; + if (!container) { + this.hashTable[index] = new Vector_1.default([element], false); + this.length += 1; + } + else { + const preSize = container.size(); + if (container instanceof Vector_1.default) { + if (!container.find(element) + .equals(container.end())) + return; + container.pushBack(element); + if (preSize + 1 >= index_1.default.treeifyThreshold) { + if (this.bucketNum <= index_1.default.minTreeifySize) { + this.length += 1; + this.reAllocate(); + return; + } + this.hashTable[index] = new OrderedSet_1.default(container); + } + this.length += 1; + } + else { + container.insert(element); + const curSize = container.size(); + this.length += curSize - preSize; + } + } + if (this.length > this.bucketNum * index_1.default.sigma) { + this.reAllocate(); + } + } + eraseElementByKey(key) { + const index = this.hashFunc(key) & (this.bucketNum - 1); + const container = this.hashTable[index]; + if (!container) + return; + const preSize = container.size(); + if (preSize === 0) + return; + if (container instanceof Vector_1.default) { + container.eraseElementByValue(key); + const curSize = container.size(); + this.length += curSize - preSize; + } + else { + container.eraseElementByKey(key); + const curSize = container.size(); + this.length += curSize - preSize; + if (curSize <= index_1.default.untreeifyThreshold) { + this.hashTable[index] = new Vector_1.default(container); + } + } + } + find(element) { + const index = this.hashFunc(element) & (this.bucketNum - 1); + const container = this.hashTable[index]; + if (!container) + return false; + return !container.find(element) + .equals(container.end()); + } + [Symbol.iterator]() { + return function* () { + const containers = Object.values(this.hashTable); + const containersNum = containers.length; + for (let i = 0; i < containersNum; ++i) { + const container = containers[i]; + for (const element of container) { + yield element; + } + } + }.bind(this)(); + } +} +exports.default = HashSet; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/OtherContainer/PriorityQueue.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/OtherContainer/PriorityQueue.js new file mode 100644 index 00000000000..762fe007b48 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/OtherContainer/PriorityQueue.js @@ -0,0 +1,124 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const index_1 = require("../ContainerBase/index"); +class PriorityQueue extends index_1.Base { + /** + * @description PriorityQueue's constructor. + * @param container Initialize container, must have a forEach function. + * @param cmp Compare function. + * @param copy When the container is an array, you can choose to directly operate on the original object of + * the array or perform a shallow copy. The default is shallow copy. + */ + constructor(container = [], cmp = (x, y) => { + if (x > y) + return -1; + if (x < y) + return 1; + return 0; + }, copy = true) { + super(); + this.cmp = cmp; + if (Array.isArray(container)) { + this.priorityQueue = copy ? [...container] : container; + } + else { + this.priorityQueue = []; + container.forEach(element => this.priorityQueue.push(element)); + } + this.length = this.priorityQueue.length; + for (let parent = (this.length - 1) >> 1; parent >= 0; --parent) { + let curParent = parent; + let curChild = (curParent << 1) | 1; + while (curChild < this.length) { + const left = curChild; + const right = left + 1; + let minChild = left; + if (right < this.length && + this.cmp(this.priorityQueue[left], this.priorityQueue[right]) > 0) { + minChild = right; + } + if (this.cmp(this.priorityQueue[curParent], this.priorityQueue[minChild]) <= 0) + break; + [this.priorityQueue[curParent], this.priorityQueue[minChild]] = + [this.priorityQueue[minChild], this.priorityQueue[curParent]]; + curParent = minChild; + curChild = (curParent << 1) | 1; + } + } + } + /** + * @description Adjusting parent's children to suit the nature of the heap. + * @param parent Parent's index. + * @private + */ + adjust(parent) { + const left = (parent << 1) | 1; + const right = (parent << 1) + 2; + if (left < this.length && + this.cmp(this.priorityQueue[parent], this.priorityQueue[left]) > 0) { + [this.priorityQueue[parent], this.priorityQueue[left]] = + [this.priorityQueue[left], this.priorityQueue[parent]]; + } + if (right < this.length && + this.cmp(this.priorityQueue[parent], this.priorityQueue[right]) > 0) { + [this.priorityQueue[parent], this.priorityQueue[right]] = + [this.priorityQueue[right], this.priorityQueue[parent]]; + } + } + clear() { + this.length = 0; + this.priorityQueue.length = 0; + } + /** + * @description Push element into a container in order. + * @param element The element you want to push. + */ + push(element) { + this.priorityQueue.push(element); + this.length += 1; + if (this.length === 1) + return; + let curNode = this.length - 1; + while (curNode > 0) { + const parent = (curNode - 1) >> 1; + if (this.cmp(this.priorityQueue[parent], element) <= 0) + break; + this.adjust(parent); + curNode = parent; + } + } + /** + * @description Removes the top element. + */ + pop() { + if (!this.length) + return; + const last = this.priorityQueue[this.length - 1]; + this.length -= 1; + let parent = 0; + while (parent < this.length) { + const left = (parent << 1) | 1; + const right = (parent << 1) + 2; + if (left >= this.length) + break; + let minChild = left; + if (right < this.length && + this.cmp(this.priorityQueue[left], this.priorityQueue[right]) > 0) { + minChild = right; + } + if (this.cmp(this.priorityQueue[minChild], last) >= 0) + break; + this.priorityQueue[parent] = this.priorityQueue[minChild]; + parent = minChild; + } + this.priorityQueue[parent] = last; + this.priorityQueue.pop(); + } + /** + * @description Accesses the top element. + */ + top() { + return this.priorityQueue[0]; + } +} +exports.default = PriorityQueue; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/OtherContainer/Queue.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/OtherContainer/Queue.js new file mode 100644 index 00000000000..b83f789c046 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/OtherContainer/Queue.js @@ -0,0 +1,40 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const Deque_1 = __importDefault(require("../SequentialContainer/Deque")); +const index_1 = require("../ContainerBase/index"); +class Queue extends index_1.Base { + constructor(container = []) { + super(); + this.queue = new Deque_1.default(container); + this.length = this.queue.size(); + } + clear() { + this.queue.clear(); + this.length = 0; + } + /** + * @description Inserts element to queue's end. + */ + push(element) { + this.queue.pushBack(element); + this.length += 1; + } + /** + * @description Removes the first element. + */ + pop() { + this.queue.popFront(); + if (this.length) + this.length -= 1; + } + /** + * @description Access the first element. + */ + front() { + return this.queue.front(); + } +} +exports.default = Queue; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/OtherContainer/Stack.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/OtherContainer/Stack.js new file mode 100644 index 00000000000..5c0603a0169 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/OtherContainer/Stack.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const index_1 = require("../ContainerBase/index"); +class Stack extends index_1.Base { + constructor(container = []) { + super(); + this.stack = []; + container.forEach(element => this.push(element)); + } + clear() { + this.length = 0; + this.stack.length = 0; + } + /** + * @description Insert element to stack's end. + */ + push(element) { + this.stack.push(element); + this.length += 1; + } + /** + * @description Removes the end element. + */ + pop() { + this.stack.pop(); + if (this.length > 0) + this.length -= 1; + } + /** + * @description Accesses the end element. + */ + top() { + return this.stack[this.length - 1]; + } +} +exports.default = Stack; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Base/RandomIterator.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Base/RandomIterator.js new file mode 100644 index 00000000000..914d3a8a57c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Base/RandomIterator.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RandomIterator = void 0; +const checkParams_1 = require("../../../utils/checkParams"); +const index_1 = require("../../ContainerBase/index"); +class RandomIterator extends index_1.ContainerIterator { + constructor(index, size, getElementByPos, setElementByPos, iteratorType) { + super(iteratorType); + this.node = index; + this.size = size; + this.getElementByPos = getElementByPos; + this.setElementByPos = setElementByPos; + if (this.iteratorType === index_1.ContainerIterator.NORMAL) { + this.pre = function () { + if (this.node === 0) { + throw new RangeError('Deque iterator access denied!'); + } + this.node -= 1; + return this; + }; + this.next = function () { + if (this.node === this.size()) { + throw new RangeError('Deque Iterator access denied!'); + } + this.node += 1; + return this; + }; + } + else { + this.pre = function () { + if (this.node === this.size() - 1) { + throw new RangeError('Deque iterator access denied!'); + } + this.node += 1; + return this; + }; + this.next = function () { + if (this.node === -1) { + throw new RangeError('Deque iterator access denied!'); + } + this.node -= 1; + return this; + }; + } + } + get pointer() { + (0, checkParams_1.checkWithinAccessParams)(this.node, 0, this.size() - 1); + return this.getElementByPos(this.node); + } + set pointer(newValue) { + (0, checkParams_1.checkWithinAccessParams)(this.node, 0, this.size() - 1); + this.setElementByPos(this.node, newValue); + } + equals(obj) { + return this.node === obj.node; + } +} +exports.RandomIterator = RandomIterator; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Base/index.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Base/index.js new file mode 100644 index 00000000000..9b4a9cfbfee --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Base/index.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const index_1 = require("../../ContainerBase/index"); +class SequentialContainer extends index_1.Container { +} +exports.default = SequentialContainer; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Deque.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Deque.js new file mode 100644 index 00000000000..79de138b71c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Deque.js @@ -0,0 +1,362 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DequeIterator = void 0; +const index_1 = __importDefault(require("./Base/index")); +const checkParams_1 = require("../../utils/checkParams"); +const index_2 = require("../ContainerBase/index"); +const RandomIterator_1 = require("./Base/RandomIterator"); +class DequeIterator extends RandomIterator_1.RandomIterator { + copy() { + return new DequeIterator(this.node, this.size, this.getElementByPos, this.setElementByPos, this.iteratorType); + } +} +exports.DequeIterator = DequeIterator; +class Deque extends index_1.default { + constructor(container = [], bucketSize = (1 << 12)) { + super(); + this.first = 0; + this.curFirst = 0; + this.last = 0; + this.curLast = 0; + this.bucketNum = 0; + this.map = []; + let _length; + if ('size' in container) { + if (typeof container.size === 'number') { + _length = container.size; + } + else { + _length = container.size(); + } + } + else if ('length' in container) { + _length = container.length; + } + else { + throw new RangeError('Can\'t get container\'s size!'); + } + this.bucketSize = bucketSize; + this.bucketNum = Math.max(Math.ceil(_length / this.bucketSize), 1); + for (let i = 0; i < this.bucketNum; ++i) { + this.map.push(new Array(this.bucketSize)); + } + const needBucketNum = Math.ceil(_length / this.bucketSize); + this.first = this.last = (this.bucketNum >> 1) - (needBucketNum >> 1); + this.curFirst = this.curLast = (this.bucketSize - _length % this.bucketSize) >> 1; + container.forEach(element => this.pushBack(element)); + this.size = this.size.bind(this); + this.getElementByPos = this.getElementByPos.bind(this); + this.setElementByPos = this.setElementByPos.bind(this); + } + /** + * @description Growth the Deque. + * @private + */ + reAllocate() { + const newMap = []; + const addBucketNum = Math.max(this.bucketNum >> 1, 1); + for (let i = 0; i < addBucketNum; ++i) { + newMap[i] = new Array(this.bucketSize); + } + for (let i = this.first; i < this.bucketNum; ++i) { + newMap[newMap.length] = this.map[i]; + } + for (let i = 0; i < this.last; ++i) { + newMap[newMap.length] = this.map[i]; + } + newMap[newMap.length] = [...this.map[this.last]]; + this.first = addBucketNum; + this.last = newMap.length - 1; + for (let i = 0; i < addBucketNum; ++i) { + newMap[newMap.length] = new Array(this.bucketSize); + } + this.map = newMap; + this.bucketNum = newMap.length; + } + /** + * @description Get the bucket position of the element and the pointer position by index. + * @param pos The element's index. + * @private + */ + getElementIndex(pos) { + const offset = this.curFirst + pos + 1; + const offsetRemainder = offset % this.bucketSize; + let curNodePointerIndex = offsetRemainder - 1; + let curNodeBucketIndex = this.first + (offset - offsetRemainder) / this.bucketSize; + if (offsetRemainder === 0) + curNodeBucketIndex -= 1; + curNodeBucketIndex %= this.bucketNum; + if (curNodePointerIndex < 0) + curNodePointerIndex += this.bucketSize; + return { curNodeBucketIndex, curNodePointerIndex }; + } + clear() { + this.map = [[]]; + this.bucketNum = 1; + this.first = this.last = this.length = 0; + this.curFirst = this.curLast = this.bucketSize >> 1; + } + front() { + return this.map[this.first][this.curFirst]; + } + back() { + return this.map[this.last][this.curLast]; + } + begin() { + return new DequeIterator(0, this.size, this.getElementByPos, this.setElementByPos); + } + end() { + return new DequeIterator(this.length, this.size, this.getElementByPos, this.setElementByPos); + } + rBegin() { + return new DequeIterator(this.length - 1, this.size, this.getElementByPos, this.setElementByPos, index_2.ContainerIterator.REVERSE); + } + rEnd() { + return new DequeIterator(-1, this.size, this.getElementByPos, this.setElementByPos, index_2.ContainerIterator.REVERSE); + } + pushBack(element) { + if (this.length) { + if (this.curLast < this.bucketSize - 1) { + this.curLast += 1; + } + else if (this.last < this.bucketNum - 1) { + this.last += 1; + this.curLast = 0; + } + else { + this.last = 0; + this.curLast = 0; + } + if (this.last === this.first && + this.curLast === this.curFirst) + this.reAllocate(); + } + this.length += 1; + this.map[this.last][this.curLast] = element; + } + popBack() { + if (!this.length) + return; + this.map[this.last][this.curLast] = undefined; + if (this.length !== 1) { + if (this.curLast > 0) { + this.curLast -= 1; + } + else if (this.last > 0) { + this.last -= 1; + this.curLast = this.bucketSize - 1; + } + else { + this.last = this.bucketNum - 1; + this.curLast = this.bucketSize - 1; + } + } + this.length -= 1; + } + /** + * @description Push the element to the front. + * @param element The element you want to push. + */ + pushFront(element) { + if (this.length) { + if (this.curFirst > 0) { + this.curFirst -= 1; + } + else if (this.first > 0) { + this.first -= 1; + this.curFirst = this.bucketSize - 1; + } + else { + this.first = this.bucketNum - 1; + this.curFirst = this.bucketSize - 1; + } + if (this.first === this.last && + this.curFirst === this.curLast) + this.reAllocate(); + } + this.length += 1; + this.map[this.first][this.curFirst] = element; + } + /** + * @description Remove the first element. + */ + popFront() { + if (!this.length) + return; + this.map[this.first][this.curFirst] = undefined; + if (this.length !== 1) { + if (this.curFirst < this.bucketSize - 1) { + this.curFirst += 1; + } + else if (this.first < this.bucketNum - 1) { + this.first += 1; + this.curFirst = 0; + } + else { + this.first = 0; + this.curFirst = 0; + } + } + this.length -= 1; + } + forEach(callback) { + for (let i = 0; i < this.length; ++i) { + callback(this.getElementByPos(i), i); + } + } + getElementByPos(pos) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + const { curNodeBucketIndex, curNodePointerIndex } = this.getElementIndex(pos); + return this.map[curNodeBucketIndex][curNodePointerIndex]; + } + setElementByPos(pos, element) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + const { curNodeBucketIndex, curNodePointerIndex } = this.getElementIndex(pos); + this.map[curNodeBucketIndex][curNodePointerIndex] = element; + } + insert(pos, element, num = 1) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length); + if (pos === 0) { + while (num--) + this.pushFront(element); + } + else if (pos === this.length) { + while (num--) + this.pushBack(element); + } + else { + const arr = []; + for (let i = pos; i < this.length; ++i) { + arr.push(this.getElementByPos(i)); + } + this.cut(pos - 1); + for (let i = 0; i < num; ++i) + this.pushBack(element); + for (let i = 0; i < arr.length; ++i) + this.pushBack(arr[i]); + } + } + /** + * @description Remove all elements after the specified position (excluding the specified position). + * @param pos The previous position of the first removed element. + * @example deque.cut(1); // Then deque's size will be 2. deque -> [0, 1] + */ + cut(pos) { + if (pos < 0) { + this.clear(); + return; + } + const { curNodeBucketIndex, curNodePointerIndex } = this.getElementIndex(pos); + this.last = curNodeBucketIndex; + this.curLast = curNodePointerIndex; + this.length = pos + 1; + } + eraseElementByPos(pos) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + if (pos === 0) + this.popFront(); + else if (pos === this.length - 1) + this.popBack(); + else { + const arr = []; + for (let i = pos + 1; i < this.length; ++i) { + arr.push(this.getElementByPos(i)); + } + this.cut(pos); + this.popBack(); + arr.forEach(element => this.pushBack(element)); + } + } + eraseElementByValue(value) { + if (!this.length) + return; + const arr = []; + for (let i = 0; i < this.length; ++i) { + const element = this.getElementByPos(i); + if (element !== value) + arr.push(element); + } + const _length = arr.length; + for (let i = 0; i < _length; ++i) + this.setElementByPos(i, arr[i]); + this.cut(_length - 1); + } + eraseElementByIterator(iter) { + // @ts-ignore + const node = iter.node; + this.eraseElementByPos(node); + iter = iter.next(); + return iter; + } + find(element) { + for (let i = 0; i < this.length; ++i) { + if (this.getElementByPos(i) === element) { + return new DequeIterator(i, this.size, this.getElementByPos, this.setElementByPos); + } + } + return this.end(); + } + reverse() { + let l = 0; + let r = this.length - 1; + while (l < r) { + const tmp = this.getElementByPos(l); + this.setElementByPos(l, this.getElementByPos(r)); + this.setElementByPos(r, tmp); + l += 1; + r -= 1; + } + } + unique() { + if (this.length <= 1) + return; + let index = 1; + let pre = this.getElementByPos(0); + for (let i = 1; i < this.length; ++i) { + const cur = this.getElementByPos(i); + if (cur !== pre) { + pre = cur; + this.setElementByPos(index++, cur); + } + } + while (this.length > index) + this.popBack(); + } + sort(cmp) { + const arr = []; + for (let i = 0; i < this.length; ++i) { + arr.push(this.getElementByPos(i)); + } + arr.sort(cmp); + for (let i = 0; i < this.length; ++i) + this.setElementByPos(i, arr[i]); + } + /** + * @description Remove as much useless space as possible. + */ + shrinkToFit() { + if (!this.length) + return; + const arr = []; + this.forEach(element => arr.push(element)); + this.bucketNum = Math.max(Math.ceil(this.length / this.bucketSize), 1); + this.length = this.first = this.last = this.curFirst = this.curLast = 0; + this.map = []; + for (let i = 0; i < this.bucketNum; ++i) { + this.map.push(new Array(this.bucketSize)); + } + for (let i = 0; i < arr.length; ++i) + this.pushBack(arr[i]); + } + [Symbol.iterator]() { + return function* () { + for (let i = 0; i < this.length; ++i) { + yield this.getElementByPos(i); + } + }.bind(this)(); + } +} +exports.default = Deque; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/LinkList.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/LinkList.js new file mode 100644 index 00000000000..ff87de8df03 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/LinkList.js @@ -0,0 +1,397 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LinkListIterator = exports.LinkNode = void 0; +const index_1 = __importDefault(require("./Base/index")); +const checkParams_1 = require("../../utils/checkParams"); +const index_2 = require("../ContainerBase/index"); +class LinkNode { + constructor(element) { + this.value = undefined; + this.pre = undefined; + this.next = undefined; + this.value = element; + } +} +exports.LinkNode = LinkNode; +class LinkListIterator extends index_2.ContainerIterator { + constructor(node, header, iteratorType) { + super(iteratorType); + this.node = node; + this.header = header; + if (this.iteratorType === index_2.ContainerIterator.NORMAL) { + this.pre = function () { + if (this.node.pre === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre; + return this; + }; + this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next; + return this; + }; + } + else { + this.pre = function () { + if (this.node.next === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next; + return this; + }; + this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre; + return this; + }; + } + } + get pointer() { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + return this.node.value; + } + set pointer(newValue) { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node.value = newValue; + } + equals(obj) { + return this.node === obj.node; + } + copy() { + return new LinkListIterator(this.node, this.header, this.iteratorType); + } +} +exports.LinkListIterator = LinkListIterator; +class LinkList extends index_1.default { + constructor(container = []) { + super(); + this.header = new LinkNode(); + this.head = undefined; + this.tail = undefined; + container.forEach(element => this.pushBack(element)); + } + clear() { + this.length = 0; + this.head = this.tail = undefined; + this.header.pre = this.header.next = undefined; + } + begin() { + return new LinkListIterator(this.head || this.header, this.header); + } + end() { + return new LinkListIterator(this.header, this.header); + } + rBegin() { + return new LinkListIterator(this.tail || this.header, this.header, index_2.ContainerIterator.REVERSE); + } + rEnd() { + return new LinkListIterator(this.header, this.header, index_2.ContainerIterator.REVERSE); + } + front() { + return this.head ? this.head.value : undefined; + } + back() { + return this.tail ? this.tail.value : undefined; + } + forEach(callback) { + if (!this.length) + return; + let curNode = this.head; + let index = 0; + while (curNode !== this.header) { + callback(curNode.value, index++); + curNode = curNode.next; + } + } + getElementByPos(pos) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + let curNode = this.head; + while (pos--) { + curNode = curNode.next; + } + return curNode.value; + } + eraseElementByPos(pos) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + if (pos === 0) + this.popFront(); + else if (pos === this.length - 1) + this.popBack(); + else { + let curNode = this.head; + while (pos--) { + curNode = curNode.next; + } + curNode = curNode; + const pre = curNode.pre; + const next = curNode.next; + next.pre = pre; + pre.next = next; + this.length -= 1; + } + } + eraseElementByValue(value) { + while (this.head && this.head.value === value) + this.popFront(); + while (this.tail && this.tail.value === value) + this.popBack(); + if (!this.head) + return; + let curNode = this.head; + while (curNode !== this.header) { + if (curNode.value === value) { + const pre = curNode.pre; + const next = curNode.next; + if (next) + next.pre = pre; + if (pre) + pre.next = next; + this.length -= 1; + } + curNode = curNode.next; + } + } + eraseElementByIterator(iter) { + // @ts-ignore + const node = iter.node; + if (node === this.header) { + throw new RangeError('Invalid iterator'); + } + iter = iter.next(); + if (this.head === node) + this.popFront(); + else if (this.tail === node) + this.popBack(); + else { + const pre = node.pre; + const next = node.next; + if (next) + next.pre = pre; + if (pre) + pre.next = next; + this.length -= 1; + } + return iter; + } + pushBack(element) { + this.length += 1; + const newTail = new LinkNode(element); + if (!this.tail) { + this.head = this.tail = newTail; + this.header.next = this.head; + this.head.pre = this.header; + } + else { + this.tail.next = newTail; + newTail.pre = this.tail; + this.tail = newTail; + } + this.tail.next = this.header; + this.header.pre = this.tail; + } + popBack() { + if (!this.tail) + return; + this.length -= 1; + if (this.head === this.tail) { + this.head = this.tail = undefined; + this.header.next = undefined; + } + else { + this.tail = this.tail.pre; + if (this.tail) + this.tail.next = undefined; + } + this.header.pre = this.tail; + if (this.tail) + this.tail.next = this.header; + } + setElementByPos(pos, element) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + let curNode = this.head; + while (pos--) { + curNode = curNode.next; + } + curNode.value = element; + } + insert(pos, element, num = 1) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length); + if (num <= 0) + return; + if (pos === 0) { + while (num--) + this.pushFront(element); + } + else if (pos === this.length) { + while (num--) + this.pushBack(element); + } + else { + let curNode = this.head; + for (let i = 1; i < pos; ++i) { + curNode = curNode.next; + } + const next = curNode.next; + this.length += num; + while (num--) { + curNode.next = new LinkNode(element); + curNode.next.pre = curNode; + curNode = curNode.next; + } + curNode.next = next; + if (next) + next.pre = curNode; + } + } + find(element) { + if (!this.head) + return this.end(); + let curNode = this.head; + while (curNode !== this.header) { + if (curNode.value === element) { + return new LinkListIterator(curNode, this.header); + } + curNode = curNode.next; + } + return this.end(); + } + reverse() { + if (this.length <= 1) + return; + let pHead = this.head; + let pTail = this.tail; + let cnt = 0; + while ((cnt << 1) < this.length) { + const tmp = pHead.value; + pHead.value = pTail.value; + pTail.value = tmp; + pHead = pHead.next; + pTail = pTail.pre; + cnt += 1; + } + } + unique() { + if (this.length <= 1) + return; + let curNode = this.head; + while (curNode !== this.header) { + let tmpNode = curNode; + while (tmpNode.next && tmpNode.value === tmpNode.next.value) { + tmpNode = tmpNode.next; + this.length -= 1; + } + curNode.next = tmpNode.next; + if (curNode.next) + curNode.next.pre = curNode; + curNode = curNode.next; + } + } + sort(cmp) { + if (this.length <= 1) + return; + const arr = []; + this.forEach(element => arr.push(element)); + arr.sort(cmp); + let curNode = this.head; + arr.forEach((element) => { + curNode.value = element; + curNode = curNode.next; + }); + } + /** + * @description Push an element to the front. + * @param element The element you want to push. + */ + pushFront(element) { + this.length += 1; + const newHead = new LinkNode(element); + if (!this.head) { + this.head = this.tail = newHead; + this.tail.next = this.header; + this.header.pre = this.tail; + } + else { + newHead.next = this.head; + this.head.pre = newHead; + this.head = newHead; + } + this.header.next = this.head; + this.head.pre = this.header; + } + /** + * @description Removes the first element. + */ + popFront() { + if (!this.head) + return; + this.length -= 1; + if (this.head === this.tail) { + this.head = this.tail = undefined; + this.header.pre = this.tail; + } + else { + this.head = this.head.next; + if (this.head) + this.head.pre = this.header; + } + this.header.next = this.head; + } + /** + * @description Merges two sorted lists. + * @param list The other list you want to merge (must be sorted). + */ + merge(list) { + if (!this.head) { + list.forEach(element => this.pushBack(element)); + return; + } + let curNode = this.head; + list.forEach(element => { + while (curNode && + curNode !== this.header && + curNode.value <= element) { + curNode = curNode.next; + } + if (curNode === this.header) { + this.pushBack(element); + curNode = this.tail; + } + else if (curNode === this.head) { + this.pushFront(element); + curNode = this.head; + } + else { + this.length += 1; + const pre = curNode.pre; + pre.next = new LinkNode(element); + pre.next.pre = pre; + pre.next.next = curNode; + curNode.pre = pre.next; + } + }); + } + [Symbol.iterator]() { + return function* () { + if (!this.head) + return; + let curNode = this.head; + while (curNode !== this.header) { + yield curNode.value; + curNode = curNode.next; + } + }.bind(this)(); + } +} +exports.default = LinkList; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Vector.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Vector.js new file mode 100644 index 00000000000..8e822fc768c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/SequentialContainer/Vector.js @@ -0,0 +1,138 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VectorIterator = void 0; +const index_1 = __importDefault(require("./Base/index")); +const checkParams_1 = require("../../utils/checkParams"); +const index_2 = require("../ContainerBase/index"); +const RandomIterator_1 = require("./Base/RandomIterator"); +class VectorIterator extends RandomIterator_1.RandomIterator { + copy() { + return new VectorIterator(this.node, this.size, this.getElementByPos, this.setElementByPos, this.iteratorType); + } +} +exports.VectorIterator = VectorIterator; +class Vector extends index_1.default { + /** + * @description Vector's constructor. + * @param container Initialize container, must have a forEach function. + * @param copy When the container is an array, you can choose to directly operate on the original object of + * the array or perform a shallow copy. The default is shallow copy. + */ + constructor(container = [], copy = true) { + super(); + if (Array.isArray(container)) { + this.vector = copy ? [...container] : container; + this.length = container.length; + } + else { + this.vector = []; + container.forEach(element => this.pushBack(element)); + } + this.size = this.size.bind(this); + this.getElementByPos = this.getElementByPos.bind(this); + this.setElementByPos = this.setElementByPos.bind(this); + } + clear() { + this.length = 0; + this.vector.length = 0; + } + begin() { + return new VectorIterator(0, this.size, this.getElementByPos, this.setElementByPos); + } + end() { + return new VectorIterator(this.length, this.size, this.getElementByPos, this.setElementByPos); + } + rBegin() { + return new VectorIterator(this.length - 1, this.size, this.getElementByPos, this.setElementByPos, index_2.ContainerIterator.REVERSE); + } + rEnd() { + return new VectorIterator(-1, this.size, this.getElementByPos, this.setElementByPos, index_2.ContainerIterator.REVERSE); + } + front() { + return this.vector[0]; + } + back() { + return this.vector[this.length - 1]; + } + forEach(callback) { + for (let i = 0; i < this.length; ++i) { + callback(this.vector[i], i); + } + } + getElementByPos(pos) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + return this.vector[pos]; + } + eraseElementByPos(pos) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + this.vector.splice(pos, 1); + this.length -= 1; + } + eraseElementByValue(value) { + let index = 0; + for (let i = 0; i < this.length; ++i) { + if (this.vector[i] !== value) { + this.vector[index++] = this.vector[i]; + } + } + this.length = this.vector.length = index; + } + eraseElementByIterator(iter) { + // @ts-ignore + const node = iter.node; + iter = iter.next(); + this.eraseElementByPos(node); + return iter; + } + pushBack(element) { + this.vector.push(element); + this.length += 1; + } + popBack() { + if (!this.length) + return; + this.vector.pop(); + this.length -= 1; + } + setElementByPos(pos, element) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + this.vector[pos] = element; + } + insert(pos, element, num = 1) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length); + this.vector.splice(pos, 0, ...new Array(num).fill(element)); + this.length += num; + } + find(element) { + for (let i = 0; i < this.length; ++i) { + if (this.vector[i] === element) { + return new VectorIterator(i, this.size, this.getElementByPos, this.getElementByPos); + } + } + return this.end(); + } + reverse() { + this.vector.reverse(); + } + unique() { + let index = 1; + for (let i = 1; i < this.length; ++i) { + if (this.vector[i] !== this.vector[i - 1]) { + this.vector[index++] = this.vector[i]; + } + } + this.length = this.vector.length = index; + } + sort(cmp) { + this.vector.sort(cmp); + } + [Symbol.iterator]() { + return function* () { + return yield* this.vector; + }.bind(this)(); + } +} +exports.default = Vector; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/Base/TreeIterator.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/Base/TreeIterator.js new file mode 100644 index 00000000000..ea65abef529 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/Base/TreeIterator.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const index_1 = require("../../ContainerBase/index"); +class TreeIterator extends index_1.ContainerIterator { + constructor(node, header, iteratorType) { + super(iteratorType); + this.node = node; + this.header = header; + if (this.iteratorType === index_1.ContainerIterator.NORMAL) { + this.pre = function () { + if (this.node === this.header.left) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre(); + return this; + }; + this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next(); + return this; + }; + } + else { + this.pre = function () { + if (this.node === this.header.right) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next(); + return this; + }; + this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre(); + return this; + }; + } + } + equals(obj) { + return this.node === obj.node; + } +} +exports.default = TreeIterator; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/Base/TreeNode.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/Base/TreeNode.js new file mode 100644 index 00000000000..89994a60dbc --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/Base/TreeNode.js @@ -0,0 +1,122 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class TreeNode { + constructor(key, value) { + this.color = true; + this.key = undefined; + this.value = undefined; + this.left = undefined; + this.right = undefined; + this.parent = undefined; + this.key = key; + this.value = value; + } + /** + * @description Get the pre node. + * @return TreeNode about the pre node. + */ + pre() { + let preNode = this; + if (preNode.color === TreeNode.RED && + preNode.parent.parent === preNode) { + preNode = preNode.right; + } + else if (preNode.left) { + preNode = preNode.left; + while (preNode.right) { + preNode = preNode.right; + } + } + else { + let pre = preNode.parent; + while (pre.left === preNode) { + preNode = pre; + pre = preNode.parent; + } + preNode = pre; + } + return preNode; + } + /** + * @description Get the next node. + * @return TreeNode about the next node. + */ + next() { + let nextNode = this; + if (nextNode.right) { + nextNode = nextNode.right; + while (nextNode.left) { + nextNode = nextNode.left; + } + } + else { + let pre = nextNode.parent; + while (pre.right === nextNode) { + nextNode = pre; + pre = nextNode.parent; + } + if (nextNode.right !== pre) { + nextNode = pre; + } + } + return nextNode; + } + /** + * @description Rotate left. + * @return TreeNode about moved to original position after rotation. + */ + rotateLeft() { + const PP = this.parent; + const V = this.right; + const R = V.left; + if (PP.parent === this) + PP.parent = V; + else if (PP.left === this) + PP.left = V; + else + PP.right = V; + V.parent = PP; + V.left = this; + this.parent = V; + this.right = R; + if (R) + R.parent = this; + return V; + } + /** + * @description Rotate left. + * @return TreeNode about moved to original position after rotation. + */ + rotateRight() { + const PP = this.parent; + const F = this.left; + const K = F.right; + if (PP.parent === this) + PP.parent = F; + else if (PP.left === this) + PP.left = F; + else + PP.right = F; + F.parent = PP; + F.right = this; + this.parent = F; + this.left = K; + if (K) + K.parent = this; + return F; + } + /** + * @description Remove this. + */ + remove() { + const parent = this.parent; + if (this === parent.left) { + parent.left = undefined; + } + else + parent.right = undefined; + } +} +TreeNode.RED = true; +TreeNode.BLACK = false; +exports.default = TreeNode; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/Base/index.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/Base/index.js new file mode 100644 index 00000000000..b79f2762dbd --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/Base/index.js @@ -0,0 +1,569 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const TreeNode_1 = __importDefault(require("./TreeNode")); +const index_1 = require("../../ContainerBase/index"); +const checkParams_1 = require("../../../utils/checkParams"); +class TreeContainer extends index_1.Container { + constructor(cmp = (x, y) => { + if (x < y) + return -1; + if (x > y) + return 1; + return 0; + }) { + super(); + this.root = undefined; + this.header = new TreeNode_1.default(); + /** + * @description InOrder traversal the tree. + * @protected + */ + this.inOrderTraversal = (curNode, callback) => { + if (curNode === undefined) + return false; + const ifReturn = this.inOrderTraversal(curNode.left, callback); + if (ifReturn) + return true; + if (callback(curNode)) + return true; + return this.inOrderTraversal(curNode.right, callback); + }; + this.cmp = cmp; + } + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is greater than or equals to the given key. + * @protected + */ + _lowerBound(curNode, key) { + let resNode; + while (curNode) { + const cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + curNode = curNode.right; + } + else if (cmpResult > 0) { + resNode = curNode; + curNode = curNode.left; + } + else + return curNode; + } + return resNode === undefined ? this.header : resNode; + } + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is greater than the given key. + * @protected + */ + _upperBound(curNode, key) { + let resNode; + while (curNode) { + const cmpResult = this.cmp(curNode.key, key); + if (cmpResult <= 0) { + curNode = curNode.right; + } + else if (cmpResult > 0) { + resNode = curNode; + curNode = curNode.left; + } + } + return resNode === undefined ? this.header : resNode; + } + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is less than or equals to the given key. + * @protected + */ + _reverseLowerBound(curNode, key) { + let resNode; + while (curNode) { + const cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + resNode = curNode; + curNode = curNode.right; + } + else if (cmpResult > 0) { + curNode = curNode.left; + } + else + return curNode; + } + return resNode === undefined ? this.header : resNode; + } + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is less than the given key. + * @protected + */ + _reverseUpperBound(curNode, key) { + let resNode; + while (curNode) { + const cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + resNode = curNode; + curNode = curNode.right; + } + else if (cmpResult >= 0) { + curNode = curNode.left; + } + } + return resNode === undefined ? this.header : resNode; + } + /** + * @description Make self balance after erase a node. + * @param curNode The node want to remove. + * @protected + */ + eraseNodeSelfBalance(curNode) { + while (true) { + const parentNode = curNode.parent; + if (parentNode === this.header) + return; + if (curNode.color === TreeNode_1.default.RED) { + curNode.color = TreeNode_1.default.BLACK; + return; + } + if (curNode === parentNode.left) { + const brother = parentNode.right; + if (brother.color === TreeNode_1.default.RED) { + brother.color = TreeNode_1.default.BLACK; + parentNode.color = TreeNode_1.default.RED; + if (parentNode === this.root) { + this.root = parentNode.rotateLeft(); + } + else + parentNode.rotateLeft(); + } + else if (brother.color === TreeNode_1.default.BLACK) { + if (brother.right && brother.right.color === TreeNode_1.default.RED) { + brother.color = parentNode.color; + parentNode.color = TreeNode_1.default.BLACK; + brother.right.color = TreeNode_1.default.BLACK; + if (parentNode === this.root) { + this.root = parentNode.rotateLeft(); + } + else + parentNode.rotateLeft(); + return; + } + else if (brother.left && brother.left.color === TreeNode_1.default.RED) { + brother.color = TreeNode_1.default.RED; + brother.left.color = TreeNode_1.default.BLACK; + brother.rotateRight(); + } + else { + brother.color = TreeNode_1.default.RED; + curNode = parentNode; + } + } + } + else { + const brother = parentNode.left; + if (brother.color === TreeNode_1.default.RED) { + brother.color = TreeNode_1.default.BLACK; + parentNode.color = TreeNode_1.default.RED; + if (parentNode === this.root) { + this.root = parentNode.rotateRight(); + } + else + parentNode.rotateRight(); + } + else { + if (brother.left && brother.left.color === TreeNode_1.default.RED) { + brother.color = parentNode.color; + parentNode.color = TreeNode_1.default.BLACK; + brother.left.color = TreeNode_1.default.BLACK; + if (parentNode === this.root) { + this.root = parentNode.rotateRight(); + } + else + parentNode.rotateRight(); + return; + } + else if (brother.right && brother.right.color === TreeNode_1.default.RED) { + brother.color = TreeNode_1.default.RED; + brother.right.color = TreeNode_1.default.BLACK; + brother.rotateLeft(); + } + else { + brother.color = TreeNode_1.default.RED; + curNode = parentNode; + } + } + } + } + } + /** + * @description Remove a node. + * @param curNode The node you want to remove. + * @protected + */ + eraseNode(curNode) { + if (this.length === 1) { + this.clear(); + return; + } + let swapNode = curNode; + while (swapNode.left || swapNode.right) { + if (swapNode.right) { + swapNode = swapNode.right; + while (swapNode.left) + swapNode = swapNode.left; + } + else if (swapNode.left) { + swapNode = swapNode.left; + } + [curNode.key, swapNode.key] = [swapNode.key, curNode.key]; + [curNode.value, swapNode.value] = [swapNode.value, curNode.value]; + curNode = swapNode; + } + if (this.header.left === swapNode) { + this.header.left = swapNode.parent; + } + else if (this.header.right === swapNode) { + this.header.right = swapNode.parent; + } + this.eraseNodeSelfBalance(swapNode); + swapNode.remove(); + this.length -= 1; + this.root.color = TreeNode_1.default.BLACK; + } + /** + * @description Make self balance after insert a node. + * @param curNode The node want to insert. + * @protected + */ + insertNodeSelfBalance(curNode) { + while (true) { + const parentNode = curNode.parent; + if (parentNode.color === TreeNode_1.default.BLACK) + return; + const grandParent = parentNode.parent; + if (parentNode === grandParent.left) { + const uncle = grandParent.right; + if (uncle && uncle.color === TreeNode_1.default.RED) { + uncle.color = parentNode.color = TreeNode_1.default.BLACK; + if (grandParent === this.root) + return; + grandParent.color = TreeNode_1.default.RED; + curNode = grandParent; + continue; + } + else if (curNode === parentNode.right) { + curNode.color = TreeNode_1.default.BLACK; + if (curNode.left) + curNode.left.parent = parentNode; + if (curNode.right) + curNode.right.parent = grandParent; + parentNode.right = curNode.left; + grandParent.left = curNode.right; + curNode.left = parentNode; + curNode.right = grandParent; + if (grandParent === this.root) { + this.root = curNode; + this.header.parent = curNode; + } + else { + const GP = grandParent.parent; + if (GP.left === grandParent) { + GP.left = curNode; + } + else + GP.right = curNode; + } + curNode.parent = grandParent.parent; + parentNode.parent = curNode; + grandParent.parent = curNode; + } + else { + parentNode.color = TreeNode_1.default.BLACK; + if (grandParent === this.root) { + this.root = grandParent.rotateRight(); + } + else + grandParent.rotateRight(); + } + grandParent.color = TreeNode_1.default.RED; + } + else { + const uncle = grandParent.left; + if (uncle && uncle.color === TreeNode_1.default.RED) { + uncle.color = parentNode.color = TreeNode_1.default.BLACK; + if (grandParent === this.root) + return; + grandParent.color = TreeNode_1.default.RED; + curNode = grandParent; + continue; + } + else if (curNode === parentNode.left) { + curNode.color = TreeNode_1.default.BLACK; + if (curNode.left) + curNode.left.parent = grandParent; + if (curNode.right) + curNode.right.parent = parentNode; + grandParent.right = curNode.left; + parentNode.left = curNode.right; + curNode.left = grandParent; + curNode.right = parentNode; + if (grandParent === this.root) { + this.root = curNode; + this.header.parent = curNode; + } + else { + const GP = grandParent.parent; + if (GP.left === grandParent) { + GP.left = curNode; + } + else + GP.right = curNode; + } + curNode.parent = grandParent.parent; + parentNode.parent = curNode; + grandParent.parent = curNode; + } + else { + parentNode.color = TreeNode_1.default.BLACK; + if (grandParent === this.root) { + this.root = grandParent.rotateLeft(); + } + else + grandParent.rotateLeft(); + } + grandParent.color = TreeNode_1.default.RED; + } + return; + } + } + /** + * @description Find node which key is equals to the given key. + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @protected + */ + findElementNode(curNode, key) { + while (curNode) { + const cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + curNode = curNode.right; + } + else if (cmpResult > 0) { + curNode = curNode.left; + } + else + return curNode; + } + return curNode; + } + /** + * @description Insert a key-value pair or set value by the given key. + * @param key The key want to insert. + * @param value The value want to set. + * @param hint You can give an iterator hint to improve insertion efficiency. + * @protected + */ + set(key, value, hint) { + if (this.root === undefined) { + this.length += 1; + this.root = new TreeNode_1.default(key, value); + this.root.color = TreeNode_1.default.BLACK; + this.root.parent = this.header; + this.header.parent = this.root; + this.header.left = this.root; + this.header.right = this.root; + return; + } + let curNode; + const minNode = this.header.left; + const compareToMin = this.cmp(minNode.key, key); + if (compareToMin === 0) { + minNode.value = value; + return; + } + else if (compareToMin > 0) { + minNode.left = new TreeNode_1.default(key, value); + minNode.left.parent = minNode; + curNode = minNode.left; + this.header.left = curNode; + } + else { + const maxNode = this.header.right; + const compareToMax = this.cmp(maxNode.key, key); + if (compareToMax === 0) { + maxNode.value = value; + return; + } + else if (compareToMax < 0) { + maxNode.right = new TreeNode_1.default(key, value); + maxNode.right.parent = maxNode; + curNode = maxNode.right; + this.header.right = curNode; + } + else { + if (hint !== undefined) { + // @ts-ignore + const iterNode = hint.node; + if (iterNode !== this.header) { + const iterCmpRes = this.cmp(iterNode.key, key); + if (iterCmpRes === 0) { + iterNode.value = value; + return; + } + else if (iterCmpRes > 0) { + const preNode = iterNode.pre(); + const preCmpRes = this.cmp(preNode.key, key); + if (preCmpRes === 0) { + preNode.value = value; + return; + } + else if (preCmpRes < 0) { + curNode = new TreeNode_1.default(key, value); + if (preNode.right === undefined) { + preNode.right = curNode; + curNode.parent = preNode; + } + else { + iterNode.left = curNode; + curNode.parent = iterNode; + } + } + } + } + } + if (curNode === undefined) { + curNode = this.root; + while (true) { + const cmpResult = this.cmp(curNode.key, key); + if (cmpResult > 0) { + if (curNode.left === undefined) { + curNode.left = new TreeNode_1.default(key, value); + curNode.left.parent = curNode; + curNode = curNode.left; + break; + } + curNode = curNode.left; + } + else if (cmpResult < 0) { + if (curNode.right === undefined) { + curNode.right = new TreeNode_1.default(key, value); + curNode.right.parent = curNode; + curNode = curNode.right; + break; + } + curNode = curNode.right; + } + else { + curNode.value = value; + return; + } + } + } + } + } + this.length += 1; + this.insertNodeSelfBalance(curNode); + } + clear() { + this.length = 0; + this.root = undefined; + this.header.parent = undefined; + this.header.left = this.header.right = undefined; + } + /** + * @description Update node's key by iterator. + * @param iter The iterator you want to change. + * @param key The key you want to update. + * @return Boolean about if the modification is successful. + */ + updateKeyByIterator(iter, key) { + // @ts-ignore + const node = iter.node; + if (node === this.header) { + throw new TypeError('Invalid iterator!'); + } + if (this.length === 1) { + node.key = key; + return true; + } + if (node === this.header.left) { + if (this.cmp(node.next().key, key) > 0) { + node.key = key; + return true; + } + return false; + } + if (node === this.header.right) { + if (this.cmp(node.pre().key, key) < 0) { + node.key = key; + return true; + } + return false; + } + const preKey = node.pre().key; + if (this.cmp(preKey, key) >= 0) + return false; + const nextKey = node.next().key; + if (this.cmp(nextKey, key) <= 0) + return false; + node.key = key; + return true; + } + eraseElementByPos(pos) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + let index = 0; + this.inOrderTraversal(this.root, curNode => { + if (pos === index) { + this.eraseNode(curNode); + return true; + } + index += 1; + return false; + }); + } + /** + * @description Remove the element of the specified key. + * @param key The key you want to remove. + */ + eraseElementByKey(key) { + if (!this.length) + return; + const curNode = this.findElementNode(this.root, key); + if (curNode === undefined) + return; + this.eraseNode(curNode); + } + eraseElementByIterator(iter) { + // @ts-ignore + const node = iter.node; + if (node === this.header) { + throw new RangeError('Invalid iterator'); + } + if (node.right === undefined) { + iter = iter.next(); + } + this.eraseNode(node); + return iter; + } + /** + * @description Get the height of the tree. + * @return Number about the height of the RB-tree. + */ + getHeight() { + if (!this.length) + return 0; + const traversal = (curNode) => { + if (!curNode) + return 0; + return Math.max(traversal(curNode.left), traversal(curNode.right)) + 1; + }; + return traversal(this.root); + } +} +exports.default = TreeContainer; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/OrderedMap.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/OrderedMap.js new file mode 100644 index 00000000000..dd797c7c716 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/OrderedMap.js @@ -0,0 +1,138 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrderedMapIterator = void 0; +const index_1 = require("../ContainerBase/index"); +const checkParams_1 = require("../../utils/checkParams"); +const index_2 = __importDefault(require("./Base/index")); +const TreeIterator_1 = __importDefault(require("./Base/TreeIterator")); +class OrderedMapIterator extends TreeIterator_1.default { + get pointer() { + if (this.node === this.header) { + throw new RangeError('OrderedMap iterator access denied'); + } + return new Proxy([], { + get: (_, props) => { + if (props === '0') + return this.node.key; + else if (props === '1') + return this.node.value; + }, + set: (_, props, newValue) => { + if (props !== '1') { + throw new TypeError('props must be 1'); + } + this.node.value = newValue; + return true; + } + }); + } + copy() { + return new OrderedMapIterator(this.node, this.header, this.iteratorType); + } +} +exports.OrderedMapIterator = OrderedMapIterator; +class OrderedMap extends index_2.default { + constructor(container = [], cmp) { + super(cmp); + this.iterationFunc = function* (curNode) { + if (curNode === undefined) + return; + yield* this.iterationFunc(curNode.left); + yield [curNode.key, curNode.value]; + yield* this.iterationFunc(curNode.right); + }; + this.iterationFunc = this.iterationFunc.bind(this); + container.forEach(([key, value]) => this.setElement(key, value)); + } + begin() { + return new OrderedMapIterator(this.header.left || this.header, this.header); + } + end() { + return new OrderedMapIterator(this.header, this.header); + } + rBegin() { + return new OrderedMapIterator(this.header.right || this.header, this.header, index_1.ContainerIterator.REVERSE); + } + rEnd() { + return new OrderedMapIterator(this.header, this.header, index_1.ContainerIterator.REVERSE); + } + front() { + if (!this.length) + return undefined; + const minNode = this.header.left; + return [minNode.key, minNode.value]; + } + back() { + if (!this.length) + return undefined; + const maxNode = this.header.right; + return [maxNode.key, maxNode.value]; + } + forEach(callback) { + let index = 0; + for (const pair of this) + callback(pair, index++); + } + lowerBound(key) { + const resNode = this._lowerBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + } + upperBound(key) { + const resNode = this._upperBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + } + reverseLowerBound(key) { + const resNode = this._reverseLowerBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + } + reverseUpperBound(key) { + const resNode = this._reverseUpperBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + } + /** + * @description Insert a key-value pair or set value by the given key. + * @param key The key want to insert. + * @param value The value want to set. + * @param hint You can give an iterator hint to improve insertion efficiency. + */ + setElement(key, value, hint) { + this.set(key, value, hint); + } + find(key) { + const curNode = this.findElementNode(this.root, key); + if (curNode !== undefined) { + return new OrderedMapIterator(curNode, this.header); + } + return this.end(); + } + /** + * @description Get the value of the element of the specified key. + */ + getElementByKey(key) { + const curNode = this.findElementNode(this.root, key); + return curNode ? curNode.value : undefined; + } + getElementByPos(pos) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + let res; + let index = 0; + for (const pair of this) { + if (index === pos) { + res = pair; + break; + } + index += 1; + } + return res; + } + union(other) { + other.forEach(([key, value]) => this.setElement(key, value)); + } + [Symbol.iterator]() { + return this.iterationFunc(this.root); + } +} +exports.default = OrderedMap; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/OrderedSet.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/OrderedSet.js new file mode 100644 index 00000000000..facac71ce14 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/container/TreeContainer/OrderedSet.js @@ -0,0 +1,109 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrderedSetIterator = void 0; +const index_1 = __importDefault(require("./Base/index")); +const index_2 = require("../ContainerBase/index"); +const checkParams_1 = require("../../utils/checkParams"); +const TreeIterator_1 = __importDefault(require("./Base/TreeIterator")); +class OrderedSetIterator extends TreeIterator_1.default { + get pointer() { + if (this.node === this.header) { + throw new RangeError('OrderedSet iterator access denied!'); + } + return this.node.key; + } + copy() { + return new OrderedSetIterator(this.node, this.header, this.iteratorType); + } +} +exports.OrderedSetIterator = OrderedSetIterator; +class OrderedSet extends index_1.default { + constructor(container = [], cmp) { + super(cmp); + this.iterationFunc = function* (curNode) { + if (curNode === undefined) + return; + yield* this.iterationFunc(curNode.left); + yield curNode.key; + yield* this.iterationFunc(curNode.right); + }; + container.forEach((element) => this.insert(element)); + this.iterationFunc = this.iterationFunc.bind(this); + } + begin() { + return new OrderedSetIterator(this.header.left || this.header, this.header); + } + end() { + return new OrderedSetIterator(this.header, this.header); + } + rBegin() { + return new OrderedSetIterator(this.header.right || this.header, this.header, index_2.ContainerIterator.REVERSE); + } + rEnd() { + return new OrderedSetIterator(this.header, this.header, index_2.ContainerIterator.REVERSE); + } + front() { + return this.header.left ? this.header.left.key : undefined; + } + back() { + return this.header.right ? this.header.right.key : undefined; + } + forEach(callback) { + let index = 0; + for (const element of this) + callback(element, index++); + } + getElementByPos(pos) { + (0, checkParams_1.checkWithinAccessParams)(pos, 0, this.length - 1); + let res; + let index = 0; + for (const element of this) { + if (index === pos) { + res = element; + } + index += 1; + } + return res; + } + /** + * @description Insert element to set. + * @param key The key want to insert. + * @param hint You can give an iterator hint to improve insertion efficiency. + */ + insert(key, hint) { + this.set(key, undefined, hint); + } + find(element) { + const curNode = this.findElementNode(this.root, element); + if (curNode !== undefined) { + return new OrderedSetIterator(curNode, this.header); + } + return this.end(); + } + lowerBound(key) { + const resNode = this._lowerBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + } + upperBound(key) { + const resNode = this._upperBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + } + reverseLowerBound(key) { + const resNode = this._reverseLowerBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + } + reverseUpperBound(key) { + const resNode = this._reverseUpperBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + } + union(other) { + other.forEach((element) => this.insert(element)); + } + [Symbol.iterator]() { + return this.iterationFunc(this.root); + } +} +exports.default = OrderedSet; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/index.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/index.js new file mode 100644 index 00000000000..60cca6184d3 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/index.js @@ -0,0 +1,40 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.HashContainer = exports.TreeContainer = exports.SequentialContainer = exports.ContainerIterator = exports.Container = exports.HashMap = exports.HashSet = exports.OrderedMapIterator = exports.OrderedMap = exports.OrderedSetIterator = exports.OrderedSet = exports.DequeIterator = exports.Deque = exports.LinkListIterator = exports.LinkList = exports.VectorIterator = exports.Vector = exports.PriorityQueue = exports.Queue = exports.Stack = void 0; +var Stack_1 = require("./container/OtherContainer/Stack"); +Object.defineProperty(exports, "Stack", { enumerable: true, get: function () { return __importDefault(Stack_1).default; } }); +var Queue_1 = require("./container/OtherContainer/Queue"); +Object.defineProperty(exports, "Queue", { enumerable: true, get: function () { return __importDefault(Queue_1).default; } }); +var PriorityQueue_1 = require("./container/OtherContainer/PriorityQueue"); +Object.defineProperty(exports, "PriorityQueue", { enumerable: true, get: function () { return __importDefault(PriorityQueue_1).default; } }); +var Vector_1 = require("./container/SequentialContainer/Vector"); +Object.defineProperty(exports, "Vector", { enumerable: true, get: function () { return __importDefault(Vector_1).default; } }); +Object.defineProperty(exports, "VectorIterator", { enumerable: true, get: function () { return Vector_1.VectorIterator; } }); +var LinkList_1 = require("./container/SequentialContainer/LinkList"); +Object.defineProperty(exports, "LinkList", { enumerable: true, get: function () { return __importDefault(LinkList_1).default; } }); +Object.defineProperty(exports, "LinkListIterator", { enumerable: true, get: function () { return LinkList_1.LinkListIterator; } }); +var Deque_1 = require("./container/SequentialContainer/Deque"); +Object.defineProperty(exports, "Deque", { enumerable: true, get: function () { return __importDefault(Deque_1).default; } }); +Object.defineProperty(exports, "DequeIterator", { enumerable: true, get: function () { return Deque_1.DequeIterator; } }); +var OrderedSet_1 = require("./container/TreeContainer/OrderedSet"); +Object.defineProperty(exports, "OrderedSet", { enumerable: true, get: function () { return __importDefault(OrderedSet_1).default; } }); +Object.defineProperty(exports, "OrderedSetIterator", { enumerable: true, get: function () { return OrderedSet_1.OrderedSetIterator; } }); +var OrderedMap_1 = require("./container/TreeContainer/OrderedMap"); +Object.defineProperty(exports, "OrderedMap", { enumerable: true, get: function () { return __importDefault(OrderedMap_1).default; } }); +Object.defineProperty(exports, "OrderedMapIterator", { enumerable: true, get: function () { return OrderedMap_1.OrderedMapIterator; } }); +var HashSet_1 = require("./container/HashContainer/HashSet"); +Object.defineProperty(exports, "HashSet", { enumerable: true, get: function () { return __importDefault(HashSet_1).default; } }); +var HashMap_1 = require("./container/HashContainer/HashMap"); +Object.defineProperty(exports, "HashMap", { enumerable: true, get: function () { return __importDefault(HashMap_1).default; } }); +var index_1 = require("./container/ContainerBase/index"); +Object.defineProperty(exports, "Container", { enumerable: true, get: function () { return index_1.Container; } }); +Object.defineProperty(exports, "ContainerIterator", { enumerable: true, get: function () { return index_1.ContainerIterator; } }); +var index_2 = require("./container/SequentialContainer/Base/index"); +Object.defineProperty(exports, "SequentialContainer", { enumerable: true, get: function () { return __importDefault(index_2).default; } }); +var index_3 = require("./container/TreeContainer/Base/index"); +Object.defineProperty(exports, "TreeContainer", { enumerable: true, get: function () { return __importDefault(index_3).default; } }); +var index_4 = require("./container/HashContainer/Base/index"); +Object.defineProperty(exports, "HashContainer", { enumerable: true, get: function () { return __importDefault(index_4).default; } }); diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/utils/checkParams.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/utils/checkParams.js new file mode 100644 index 00000000000..5c3e5117be7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/cjs/utils/checkParams.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.checkWithinAccessParams = void 0; +/** + * @description Check if access is out of bounds. + * @param pos The position want to access. + * @param lower The lower bound. + * @param upper The upper bound. + * @return Boolean about if access is out of bounds. + */ +function checkWithinAccessParams(pos, lower, upper) { + if (pos < lower || pos > upper) { + throw new RangeError(); + } +} +exports.checkWithinAccessParams = checkWithinAccessParams; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/ContainerBase/index.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/ContainerBase/index.js new file mode 100644 index 00000000000..248c6a50083 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/ContainerBase/index.js @@ -0,0 +1,56 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var ContainerIterator = /** @class */ (function () { + function ContainerIterator(iteratorType) { + if (iteratorType === void 0) { iteratorType = ContainerIterator.NORMAL; } + this.iteratorType = iteratorType; + } + ContainerIterator.NORMAL = false; + ContainerIterator.REVERSE = true; + return ContainerIterator; +}()); +export { ContainerIterator }; +var Base = /** @class */ (function () { + function Base() { + /** + * @description Container's size. + * @protected + */ + this.length = 0; + } + /** + * @return The size of the container. + */ + Base.prototype.size = function () { + return this.length; + }; + /** + * @return Boolean about if the container is empty. + */ + Base.prototype.empty = function () { + return this.length === 0; + }; + return Base; +}()); +export { Base }; +var Container = /** @class */ (function (_super) { + __extends(Container, _super); + function Container() { + return _super !== null && _super.apply(this, arguments) || this; + } + return Container; +}(Base)); +export { Container }; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/HashContainer/Base/index.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/HashContainer/Base/index.js new file mode 100644 index 00000000000..f5e7d0786bd --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/HashContainer/Base/index.js @@ -0,0 +1,57 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +import { Base } from "../../ContainerBase/index"; +var HashContainer = /** @class */ (function (_super) { + __extends(HashContainer, _super); + function HashContainer(initBucketNum, hashFunc) { + if (initBucketNum === void 0) { initBucketNum = 16; } + if (hashFunc === void 0) { hashFunc = function (x) { + var str; + if (typeof x !== 'string') { + str = JSON.stringify(x); + } + else + str = x; + var hashCode = 0; + var strLength = str.length; + for (var i = 0; i < strLength; i++) { + var ch = str.charCodeAt(i); + hashCode = ((hashCode << 5) - hashCode) + ch; + hashCode |= 0; + } + return hashCode >>> 0; + }; } + var _this = _super.call(this) || this; + if (initBucketNum < 16 || (initBucketNum & (initBucketNum - 1)) !== 0) { + throw new RangeError('InitBucketNum range error'); + } + _this.bucketNum = _this.initBucketNum = initBucketNum; + _this.hashFunc = hashFunc; + return _this; + } + HashContainer.prototype.clear = function () { + this.length = 0; + this.bucketNum = this.initBucketNum; + this.hashTable = []; + }; + HashContainer.sigma = 0.75; + HashContainer.treeifyThreshold = 8; + HashContainer.untreeifyThreshold = 6; + HashContainer.minTreeifySize = 64; + HashContainer.maxBucketNum = (1 << 30); + return HashContainer; +}(Base)); +export default HashContainer; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/HashContainer/HashMap.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/HashContainer/HashMap.js new file mode 100644 index 00000000000..bf795d598a7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/HashContainer/HashMap.js @@ -0,0 +1,337 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +import HashContainer from './Base/index'; +import Vector from '../SequentialContainer/Vector'; +import OrderedMap from '../TreeContainer/OrderedMap'; +var HashMap = /** @class */ (function (_super) { + __extends(HashMap, _super); + function HashMap(container, initBucketNum, hashFunc) { + if (container === void 0) { container = []; } + var _this = _super.call(this, initBucketNum, hashFunc) || this; + _this.hashTable = []; + container.forEach(function (element) { return _this.setElement(element[0], element[1]); }); + return _this; + } + HashMap.prototype.reAllocate = function () { + var _this = this; + if (this.bucketNum >= HashContainer.maxBucketNum) + return; + var newHashTable = []; + var originalBucketNum = this.bucketNum; + this.bucketNum <<= 1; + var keys = Object.keys(this.hashTable); + var keyNums = keys.length; + var _loop_1 = function (i) { + var index = parseInt(keys[i]); + var container = this_1.hashTable[index]; + var size = container.size(); + if (size === 0) + return "continue"; + if (size === 1) { + var element = container.front(); + newHashTable[this_1.hashFunc(element[0]) & (this_1.bucketNum - 1)] = new Vector([element], false); + return "continue"; + } + var lowList = []; + var highList = []; + container.forEach(function (element) { + var hashCode = _this.hashFunc(element[0]); + if ((hashCode & originalBucketNum) === 0) { + lowList.push(element); + } + else + highList.push(element); + }); + if (container instanceof OrderedMap) { + if (lowList.length > HashContainer.untreeifyThreshold) { + newHashTable[index] = new OrderedMap(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector(lowList, false); + } + if (highList.length > HashContainer.untreeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedMap(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector(highList, false); + } + } + else { + if (lowList.length >= HashContainer.treeifyThreshold) { + newHashTable[index] = new OrderedMap(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector(lowList, false); + } + if (highList.length >= HashContainer.treeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedMap(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector(highList, false); + } + } + }; + var this_1 = this; + for (var i = 0; i < keyNums; ++i) { + _loop_1(i); + } + this.hashTable = newHashTable; + }; + HashMap.prototype.forEach = function (callback) { + var containers = Object.values(this.hashTable); + var containersNum = containers.length; + var index = 0; + for (var i = 0; i < containersNum; ++i) { + containers[i].forEach(function (element) { return callback(element, index++); }); + } + }; + /** + * @description Insert a new key-value pair to hash map or set value by key. + * @param key The key you want to insert. + * @param value The value you want to insert. + * @example HashMap.setElement(1, 2); // insert a key-value pair [1, 2] + */ + HashMap.prototype.setElement = function (key, value) { + var e_1, _a; + var index = this.hashFunc(key) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) { + this.length += 1; + this.hashTable[index] = new Vector([[key, value]], false); + } + else { + var preSize = container.size(); + if (container instanceof Vector) { + try { + for (var container_1 = __values(container), container_1_1 = container_1.next(); !container_1_1.done; container_1_1 = container_1.next()) { + var pair = container_1_1.value; + if (pair[0] === key) { + pair[1] = value; + return; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (container_1_1 && !container_1_1.done && (_a = container_1.return)) _a.call(container_1); + } + finally { if (e_1) throw e_1.error; } + } + container.pushBack([key, value]); + if (preSize + 1 >= HashMap.treeifyThreshold) { + if (this.bucketNum <= HashMap.minTreeifySize) { + this.length += 1; + this.reAllocate(); + return; + } + this.hashTable[index] = new OrderedMap(this.hashTable[index]); + } + this.length += 1; + } + else { + container.setElement(key, value); + var curSize = container.size(); + this.length += curSize - preSize; + } + } + if (this.length > this.bucketNum * HashMap.sigma) { + this.reAllocate(); + } + }; + /** + * @description Get the value of the element which has the specified key. + * @param key The key you want to get. + */ + HashMap.prototype.getElementByKey = function (key) { + var e_2, _a; + var index = this.hashFunc(key) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) + return undefined; + if (container instanceof OrderedMap) { + return container.getElementByKey(key); + } + else { + try { + for (var container_2 = __values(container), container_2_1 = container_2.next(); !container_2_1.done; container_2_1 = container_2.next()) { + var pair = container_2_1.value; + if (pair[0] === key) + return pair[1]; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (container_2_1 && !container_2_1.done && (_a = container_2.return)) _a.call(container_2); + } + finally { if (e_2) throw e_2.error; } + } + return undefined; + } + }; + HashMap.prototype.eraseElementByKey = function (key) { + var e_3, _a; + var index = this.hashFunc(key) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) + return; + if (container instanceof Vector) { + var pos = 0; + try { + for (var container_3 = __values(container), container_3_1 = container_3.next(); !container_3_1.done; container_3_1 = container_3.next()) { + var pair = container_3_1.value; + if (pair[0] === key) { + container.eraseElementByPos(pos); + this.length -= 1; + return; + } + pos += 1; + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (container_3_1 && !container_3_1.done && (_a = container_3.return)) _a.call(container_3); + } + finally { if (e_3) throw e_3.error; } + } + } + else { + var preSize = container.size(); + container.eraseElementByKey(key); + var curSize = container.size(); + this.length += curSize - preSize; + if (curSize <= HashContainer.untreeifyThreshold) { + this.hashTable[index] = new Vector(container); + } + } + }; + HashMap.prototype.find = function (key) { + var e_4, _a; + var index = this.hashFunc(key) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) + return false; + if (container instanceof OrderedMap) { + return !container.find(key) + .equals(container.end()); + } + try { + for (var container_4 = __values(container), container_4_1 = container_4.next(); !container_4_1.done; container_4_1 = container_4.next()) { + var pair = container_4_1.value; + if (pair[0] === key) + return true; + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (container_4_1 && !container_4_1.done && (_a = container_4.return)) _a.call(container_4); + } + finally { if (e_4) throw e_4.error; } + } + return false; + }; + HashMap.prototype[Symbol.iterator] = function () { + return function () { + var containers, containersNum, i, container, container_5, container_5_1, element, e_5_1; + var e_5, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + containers = Object.values(this.hashTable); + containersNum = containers.length; + i = 0; + _b.label = 1; + case 1: + if (!(i < containersNum)) return [3 /*break*/, 10]; + container = containers[i]; + _b.label = 2; + case 2: + _b.trys.push([2, 7, 8, 9]); + container_5 = (e_5 = void 0, __values(container)), container_5_1 = container_5.next(); + _b.label = 3; + case 3: + if (!!container_5_1.done) return [3 /*break*/, 6]; + element = container_5_1.value; + return [4 /*yield*/, element]; + case 4: + _b.sent(); + _b.label = 5; + case 5: + container_5_1 = container_5.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_5_1 = _b.sent(); + e_5 = { error: e_5_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (container_5_1 && !container_5_1.done && (_a = container_5.return)) _a.call(container_5); + } + finally { if (e_5) throw e_5.error; } + return [7 /*endfinally*/]; + case 9: + ++i; + return [3 /*break*/, 1]; + case 10: return [2 /*return*/]; + } + }); + }.bind(this)(); + }; + return HashMap; +}(HashContainer)); +export default HashMap; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/HashContainer/HashSet.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/HashContainer/HashSet.js new file mode 100644 index 00000000000..2043718e8cd --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/HashContainer/HashSet.js @@ -0,0 +1,257 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +import HashContainer from './Base/index'; +import Vector from '../SequentialContainer/Vector'; +import OrderedSet from '../TreeContainer/OrderedSet'; +var HashSet = /** @class */ (function (_super) { + __extends(HashSet, _super); + function HashSet(container, initBucketNum, hashFunc) { + if (container === void 0) { container = []; } + var _this = _super.call(this, initBucketNum, hashFunc) || this; + _this.hashTable = []; + container.forEach(function (element) { return _this.insert(element); }); + return _this; + } + HashSet.prototype.reAllocate = function () { + var _this = this; + if (this.bucketNum >= HashContainer.maxBucketNum) + return; + var newHashTable = []; + var originalBucketNum = this.bucketNum; + this.bucketNum <<= 1; + var keys = Object.keys(this.hashTable); + var keyNums = keys.length; + var _loop_1 = function (i) { + var index = parseInt(keys[i]); + var container = this_1.hashTable[index]; + var size = container.size(); + if (size === 0) + return "continue"; + if (size === 1) { + var element = container.front(); + newHashTable[this_1.hashFunc(element) & (this_1.bucketNum - 1)] = new Vector([element], false); + return "continue"; + } + var lowList = []; + var highList = []; + container.forEach(function (element) { + var hashCode = _this.hashFunc(element); + if ((hashCode & originalBucketNum) === 0) { + lowList.push(element); + } + else + highList.push(element); + }); + if (container instanceof OrderedSet) { + if (lowList.length > HashContainer.untreeifyThreshold) { + newHashTable[index] = new OrderedSet(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector(lowList, false); + } + if (highList.length > HashContainer.untreeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedSet(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector(highList, false); + } + } + else { + if (lowList.length >= HashContainer.treeifyThreshold) { + newHashTable[index] = new OrderedSet(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector(lowList, false); + } + if (highList.length >= HashContainer.treeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedSet(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector(highList, false); + } + } + }; + var this_1 = this; + for (var i = 0; i < keyNums; ++i) { + _loop_1(i); + } + this.hashTable = newHashTable; + }; + HashSet.prototype.forEach = function (callback) { + var containers = Object.values(this.hashTable); + var containersNum = containers.length; + var index = 0; + for (var i = 0; i < containersNum; ++i) { + containers[i].forEach(function (element) { return callback(element, index++); }); + } + }; + /** + * @description Insert element to hash set. + * @param element The element you want to insert. + */ + HashSet.prototype.insert = function (element) { + var index = this.hashFunc(element) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) { + this.hashTable[index] = new Vector([element], false); + this.length += 1; + } + else { + var preSize = container.size(); + if (container instanceof Vector) { + if (!container.find(element) + .equals(container.end())) + return; + container.pushBack(element); + if (preSize + 1 >= HashContainer.treeifyThreshold) { + if (this.bucketNum <= HashContainer.minTreeifySize) { + this.length += 1; + this.reAllocate(); + return; + } + this.hashTable[index] = new OrderedSet(container); + } + this.length += 1; + } + else { + container.insert(element); + var curSize = container.size(); + this.length += curSize - preSize; + } + } + if (this.length > this.bucketNum * HashContainer.sigma) { + this.reAllocate(); + } + }; + HashSet.prototype.eraseElementByKey = function (key) { + var index = this.hashFunc(key) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) + return; + var preSize = container.size(); + if (preSize === 0) + return; + if (container instanceof Vector) { + container.eraseElementByValue(key); + var curSize = container.size(); + this.length += curSize - preSize; + } + else { + container.eraseElementByKey(key); + var curSize = container.size(); + this.length += curSize - preSize; + if (curSize <= HashContainer.untreeifyThreshold) { + this.hashTable[index] = new Vector(container); + } + } + }; + HashSet.prototype.find = function (element) { + var index = this.hashFunc(element) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) + return false; + return !container.find(element) + .equals(container.end()); + }; + HashSet.prototype[Symbol.iterator] = function () { + return function () { + var containers, containersNum, i, container, container_1, container_1_1, element, e_1_1; + var e_1, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + containers = Object.values(this.hashTable); + containersNum = containers.length; + i = 0; + _b.label = 1; + case 1: + if (!(i < containersNum)) return [3 /*break*/, 10]; + container = containers[i]; + _b.label = 2; + case 2: + _b.trys.push([2, 7, 8, 9]); + container_1 = (e_1 = void 0, __values(container)), container_1_1 = container_1.next(); + _b.label = 3; + case 3: + if (!!container_1_1.done) return [3 /*break*/, 6]; + element = container_1_1.value; + return [4 /*yield*/, element]; + case 4: + _b.sent(); + _b.label = 5; + case 5: + container_1_1 = container_1.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_1_1 = _b.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (container_1_1 && !container_1_1.done && (_a = container_1.return)) _a.call(container_1); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 9: + ++i; + return [3 /*break*/, 1]; + case 10: return [2 /*return*/]; + } + }); + }.bind(this)(); + }; + return HashSet; +}(HashContainer)); +export default HashSet; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/OtherContainer/PriorityQueue.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/OtherContainer/PriorityQueue.js new file mode 100644 index 00000000000..f38a83e9ec9 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/OtherContainer/PriorityQueue.js @@ -0,0 +1,167 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +import { Base } from "../ContainerBase/index"; +var PriorityQueue = /** @class */ (function (_super) { + __extends(PriorityQueue, _super); + /** + * @description PriorityQueue's constructor. + * @param container Initialize container, must have a forEach function. + * @param cmp Compare function. + * @param copy When the container is an array, you can choose to directly operate on the original object of + * the array or perform a shallow copy. The default is shallow copy. + */ + function PriorityQueue(container, cmp, copy) { + var _a; + if (container === void 0) { container = []; } + if (cmp === void 0) { cmp = function (x, y) { + if (x > y) + return -1; + if (x < y) + return 1; + return 0; + }; } + if (copy === void 0) { copy = true; } + var _this = _super.call(this) || this; + _this.cmp = cmp; + if (Array.isArray(container)) { + _this.priorityQueue = copy ? __spreadArray([], __read(container), false) : container; + } + else { + _this.priorityQueue = []; + container.forEach(function (element) { return _this.priorityQueue.push(element); }); + } + _this.length = _this.priorityQueue.length; + for (var parent_1 = (_this.length - 1) >> 1; parent_1 >= 0; --parent_1) { + var curParent = parent_1; + var curChild = (curParent << 1) | 1; + while (curChild < _this.length) { + var left = curChild; + var right = left + 1; + var minChild = left; + if (right < _this.length && + _this.cmp(_this.priorityQueue[left], _this.priorityQueue[right]) > 0) { + minChild = right; + } + if (_this.cmp(_this.priorityQueue[curParent], _this.priorityQueue[minChild]) <= 0) + break; + _a = __read([_this.priorityQueue[minChild], _this.priorityQueue[curParent]], 2), _this.priorityQueue[curParent] = _a[0], _this.priorityQueue[minChild] = _a[1]; + curParent = minChild; + curChild = (curParent << 1) | 1; + } + } + return _this; + } + /** + * @description Adjusting parent's children to suit the nature of the heap. + * @param parent Parent's index. + * @private + */ + PriorityQueue.prototype.adjust = function (parent) { + var _a, _b; + var left = (parent << 1) | 1; + var right = (parent << 1) + 2; + if (left < this.length && + this.cmp(this.priorityQueue[parent], this.priorityQueue[left]) > 0) { + _a = __read([this.priorityQueue[left], this.priorityQueue[parent]], 2), this.priorityQueue[parent] = _a[0], this.priorityQueue[left] = _a[1]; + } + if (right < this.length && + this.cmp(this.priorityQueue[parent], this.priorityQueue[right]) > 0) { + _b = __read([this.priorityQueue[right], this.priorityQueue[parent]], 2), this.priorityQueue[parent] = _b[0], this.priorityQueue[right] = _b[1]; + } + }; + PriorityQueue.prototype.clear = function () { + this.length = 0; + this.priorityQueue.length = 0; + }; + /** + * @description Push element into a container in order. + * @param element The element you want to push. + */ + PriorityQueue.prototype.push = function (element) { + this.priorityQueue.push(element); + this.length += 1; + if (this.length === 1) + return; + var curNode = this.length - 1; + while (curNode > 0) { + var parent_2 = (curNode - 1) >> 1; + if (this.cmp(this.priorityQueue[parent_2], element) <= 0) + break; + this.adjust(parent_2); + curNode = parent_2; + } + }; + /** + * @description Removes the top element. + */ + PriorityQueue.prototype.pop = function () { + if (!this.length) + return; + var last = this.priorityQueue[this.length - 1]; + this.length -= 1; + var parent = 0; + while (parent < this.length) { + var left = (parent << 1) | 1; + var right = (parent << 1) + 2; + if (left >= this.length) + break; + var minChild = left; + if (right < this.length && + this.cmp(this.priorityQueue[left], this.priorityQueue[right]) > 0) { + minChild = right; + } + if (this.cmp(this.priorityQueue[minChild], last) >= 0) + break; + this.priorityQueue[parent] = this.priorityQueue[minChild]; + parent = minChild; + } + this.priorityQueue[parent] = last; + this.priorityQueue.pop(); + }; + /** + * @description Accesses the top element. + */ + PriorityQueue.prototype.top = function () { + return this.priorityQueue[0]; + }; + return PriorityQueue; +}(Base)); +export default PriorityQueue; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/OtherContainer/Queue.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/OtherContainer/Queue.js new file mode 100644 index 00000000000..539aaa9e558 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/OtherContainer/Queue.js @@ -0,0 +1,54 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +import Deque from '../SequentialContainer/Deque'; +import { Base } from "../ContainerBase/index"; +var Queue = /** @class */ (function (_super) { + __extends(Queue, _super); + function Queue(container) { + if (container === void 0) { container = []; } + var _this = _super.call(this) || this; + _this.queue = new Deque(container); + _this.length = _this.queue.size(); + return _this; + } + Queue.prototype.clear = function () { + this.queue.clear(); + this.length = 0; + }; + /** + * @description Inserts element to queue's end. + */ + Queue.prototype.push = function (element) { + this.queue.pushBack(element); + this.length += 1; + }; + /** + * @description Removes the first element. + */ + Queue.prototype.pop = function () { + this.queue.popFront(); + if (this.length) + this.length -= 1; + }; + /** + * @description Access the first element. + */ + Queue.prototype.front = function () { + return this.queue.front(); + }; + return Queue; +}(Base)); +export default Queue; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/OtherContainer/Stack.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/OtherContainer/Stack.js new file mode 100644 index 00000000000..11b1a8f2081 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/OtherContainer/Stack.js @@ -0,0 +1,53 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +import { Base } from "../ContainerBase/index"; +var Stack = /** @class */ (function (_super) { + __extends(Stack, _super); + function Stack(container) { + if (container === void 0) { container = []; } + var _this = _super.call(this) || this; + _this.stack = []; + container.forEach(function (element) { return _this.push(element); }); + return _this; + } + Stack.prototype.clear = function () { + this.length = 0; + this.stack.length = 0; + }; + /** + * @description Insert element to stack's end. + */ + Stack.prototype.push = function (element) { + this.stack.push(element); + this.length += 1; + }; + /** + * @description Removes the end element. + */ + Stack.prototype.pop = function () { + this.stack.pop(); + if (this.length > 0) + this.length -= 1; + }; + /** + * @description Accesses the end element. + */ + Stack.prototype.top = function () { + return this.stack[this.length - 1]; + }; + return Stack; +}(Base)); +export default Stack; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Base/RandomIterator.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Base/RandomIterator.js new file mode 100644 index 00000000000..90826e30d12 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Base/RandomIterator.js @@ -0,0 +1,77 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +import { checkWithinAccessParams } from "../../../utils/checkParams"; +import { ContainerIterator } from "../../ContainerBase/index"; +var RandomIterator = /** @class */ (function (_super) { + __extends(RandomIterator, _super); + function RandomIterator(index, size, getElementByPos, setElementByPos, iteratorType) { + var _this = _super.call(this, iteratorType) || this; + _this.node = index; + _this.size = size; + _this.getElementByPos = getElementByPos; + _this.setElementByPos = setElementByPos; + if (_this.iteratorType === ContainerIterator.NORMAL) { + _this.pre = function () { + if (this.node === 0) { + throw new RangeError('Deque iterator access denied!'); + } + this.node -= 1; + return this; + }; + _this.next = function () { + if (this.node === this.size()) { + throw new RangeError('Deque Iterator access denied!'); + } + this.node += 1; + return this; + }; + } + else { + _this.pre = function () { + if (this.node === this.size() - 1) { + throw new RangeError('Deque iterator access denied!'); + } + this.node += 1; + return this; + }; + _this.next = function () { + if (this.node === -1) { + throw new RangeError('Deque iterator access denied!'); + } + this.node -= 1; + return this; + }; + } + return _this; + } + Object.defineProperty(RandomIterator.prototype, "pointer", { + get: function () { + checkWithinAccessParams(this.node, 0, this.size() - 1); + return this.getElementByPos(this.node); + }, + set: function (newValue) { + checkWithinAccessParams(this.node, 0, this.size() - 1); + this.setElementByPos(this.node, newValue); + }, + enumerable: false, + configurable: true + }); + RandomIterator.prototype.equals = function (obj) { + return this.node === obj.node; + }; + return RandomIterator; +}(ContainerIterator)); +export { RandomIterator }; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Base/index.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Base/index.js new file mode 100644 index 00000000000..07e36f9e11f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Base/index.js @@ -0,0 +1,24 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +import { Container } from "../../ContainerBase/index"; +var SequentialContainer = /** @class */ (function (_super) { + __extends(SequentialContainer, _super); + function SequentialContainer() { + return _super !== null && _super.apply(this, arguments) || this; + } + return SequentialContainer; +}(Container)); +export default SequentialContainer; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Deque.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Deque.js new file mode 100644 index 00000000000..bfafa4efd78 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Deque.js @@ -0,0 +1,450 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +import SequentialContainer from './Base/index'; +import { checkWithinAccessParams } from "../../utils/checkParams"; +import { ContainerIterator } from "../ContainerBase/index"; +import { RandomIterator } from "./Base/RandomIterator"; +var DequeIterator = /** @class */ (function (_super) { + __extends(DequeIterator, _super); + function DequeIterator() { + return _super !== null && _super.apply(this, arguments) || this; + } + DequeIterator.prototype.copy = function () { + return new DequeIterator(this.node, this.size, this.getElementByPos, this.setElementByPos, this.iteratorType); + }; + return DequeIterator; +}(RandomIterator)); +export { DequeIterator }; +var Deque = /** @class */ (function (_super) { + __extends(Deque, _super); + function Deque(container, bucketSize) { + if (container === void 0) { container = []; } + if (bucketSize === void 0) { bucketSize = (1 << 12); } + var _this = _super.call(this) || this; + _this.first = 0; + _this.curFirst = 0; + _this.last = 0; + _this.curLast = 0; + _this.bucketNum = 0; + _this.map = []; + var _length; + if ('size' in container) { + if (typeof container.size === 'number') { + _length = container.size; + } + else { + _length = container.size(); + } + } + else if ('length' in container) { + _length = container.length; + } + else { + throw new RangeError('Can\'t get container\'s size!'); + } + _this.bucketSize = bucketSize; + _this.bucketNum = Math.max(Math.ceil(_length / _this.bucketSize), 1); + for (var i = 0; i < _this.bucketNum; ++i) { + _this.map.push(new Array(_this.bucketSize)); + } + var needBucketNum = Math.ceil(_length / _this.bucketSize); + _this.first = _this.last = (_this.bucketNum >> 1) - (needBucketNum >> 1); + _this.curFirst = _this.curLast = (_this.bucketSize - _length % _this.bucketSize) >> 1; + container.forEach(function (element) { return _this.pushBack(element); }); + _this.size = _this.size.bind(_this); + _this.getElementByPos = _this.getElementByPos.bind(_this); + _this.setElementByPos = _this.setElementByPos.bind(_this); + return _this; + } + /** + * @description Growth the Deque. + * @private + */ + Deque.prototype.reAllocate = function () { + var newMap = []; + var addBucketNum = Math.max(this.bucketNum >> 1, 1); + for (var i = 0; i < addBucketNum; ++i) { + newMap[i] = new Array(this.bucketSize); + } + for (var i = this.first; i < this.bucketNum; ++i) { + newMap[newMap.length] = this.map[i]; + } + for (var i = 0; i < this.last; ++i) { + newMap[newMap.length] = this.map[i]; + } + newMap[newMap.length] = __spreadArray([], __read(this.map[this.last]), false); + this.first = addBucketNum; + this.last = newMap.length - 1; + for (var i = 0; i < addBucketNum; ++i) { + newMap[newMap.length] = new Array(this.bucketSize); + } + this.map = newMap; + this.bucketNum = newMap.length; + }; + /** + * @description Get the bucket position of the element and the pointer position by index. + * @param pos The element's index. + * @private + */ + Deque.prototype.getElementIndex = function (pos) { + var offset = this.curFirst + pos + 1; + var offsetRemainder = offset % this.bucketSize; + var curNodePointerIndex = offsetRemainder - 1; + var curNodeBucketIndex = this.first + (offset - offsetRemainder) / this.bucketSize; + if (offsetRemainder === 0) + curNodeBucketIndex -= 1; + curNodeBucketIndex %= this.bucketNum; + if (curNodePointerIndex < 0) + curNodePointerIndex += this.bucketSize; + return { curNodeBucketIndex: curNodeBucketIndex, curNodePointerIndex: curNodePointerIndex }; + }; + Deque.prototype.clear = function () { + this.map = [[]]; + this.bucketNum = 1; + this.first = this.last = this.length = 0; + this.curFirst = this.curLast = this.bucketSize >> 1; + }; + Deque.prototype.front = function () { + return this.map[this.first][this.curFirst]; + }; + Deque.prototype.back = function () { + return this.map[this.last][this.curLast]; + }; + Deque.prototype.begin = function () { + return new DequeIterator(0, this.size, this.getElementByPos, this.setElementByPos); + }; + Deque.prototype.end = function () { + return new DequeIterator(this.length, this.size, this.getElementByPos, this.setElementByPos); + }; + Deque.prototype.rBegin = function () { + return new DequeIterator(this.length - 1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE); + }; + Deque.prototype.rEnd = function () { + return new DequeIterator(-1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE); + }; + Deque.prototype.pushBack = function (element) { + if (this.length) { + if (this.curLast < this.bucketSize - 1) { + this.curLast += 1; + } + else if (this.last < this.bucketNum - 1) { + this.last += 1; + this.curLast = 0; + } + else { + this.last = 0; + this.curLast = 0; + } + if (this.last === this.first && + this.curLast === this.curFirst) + this.reAllocate(); + } + this.length += 1; + this.map[this.last][this.curLast] = element; + }; + Deque.prototype.popBack = function () { + if (!this.length) + return; + this.map[this.last][this.curLast] = undefined; + if (this.length !== 1) { + if (this.curLast > 0) { + this.curLast -= 1; + } + else if (this.last > 0) { + this.last -= 1; + this.curLast = this.bucketSize - 1; + } + else { + this.last = this.bucketNum - 1; + this.curLast = this.bucketSize - 1; + } + } + this.length -= 1; + }; + /** + * @description Push the element to the front. + * @param element The element you want to push. + */ + Deque.prototype.pushFront = function (element) { + if (this.length) { + if (this.curFirst > 0) { + this.curFirst -= 1; + } + else if (this.first > 0) { + this.first -= 1; + this.curFirst = this.bucketSize - 1; + } + else { + this.first = this.bucketNum - 1; + this.curFirst = this.bucketSize - 1; + } + if (this.first === this.last && + this.curFirst === this.curLast) + this.reAllocate(); + } + this.length += 1; + this.map[this.first][this.curFirst] = element; + }; + /** + * @description Remove the first element. + */ + Deque.prototype.popFront = function () { + if (!this.length) + return; + this.map[this.first][this.curFirst] = undefined; + if (this.length !== 1) { + if (this.curFirst < this.bucketSize - 1) { + this.curFirst += 1; + } + else if (this.first < this.bucketNum - 1) { + this.first += 1; + this.curFirst = 0; + } + else { + this.first = 0; + this.curFirst = 0; + } + } + this.length -= 1; + }; + Deque.prototype.forEach = function (callback) { + for (var i = 0; i < this.length; ++i) { + callback(this.getElementByPos(i), i); + } + }; + Deque.prototype.getElementByPos = function (pos) { + checkWithinAccessParams(pos, 0, this.length - 1); + var _a = this.getElementIndex(pos), curNodeBucketIndex = _a.curNodeBucketIndex, curNodePointerIndex = _a.curNodePointerIndex; + return this.map[curNodeBucketIndex][curNodePointerIndex]; + }; + Deque.prototype.setElementByPos = function (pos, element) { + checkWithinAccessParams(pos, 0, this.length - 1); + var _a = this.getElementIndex(pos), curNodeBucketIndex = _a.curNodeBucketIndex, curNodePointerIndex = _a.curNodePointerIndex; + this.map[curNodeBucketIndex][curNodePointerIndex] = element; + }; + Deque.prototype.insert = function (pos, element, num) { + if (num === void 0) { num = 1; } + checkWithinAccessParams(pos, 0, this.length); + if (pos === 0) { + while (num--) + this.pushFront(element); + } + else if (pos === this.length) { + while (num--) + this.pushBack(element); + } + else { + var arr = []; + for (var i = pos; i < this.length; ++i) { + arr.push(this.getElementByPos(i)); + } + this.cut(pos - 1); + for (var i = 0; i < num; ++i) + this.pushBack(element); + for (var i = 0; i < arr.length; ++i) + this.pushBack(arr[i]); + } + }; + /** + * @description Remove all elements after the specified position (excluding the specified position). + * @param pos The previous position of the first removed element. + * @example deque.cut(1); // Then deque's size will be 2. deque -> [0, 1] + */ + Deque.prototype.cut = function (pos) { + if (pos < 0) { + this.clear(); + return; + } + var _a = this.getElementIndex(pos), curNodeBucketIndex = _a.curNodeBucketIndex, curNodePointerIndex = _a.curNodePointerIndex; + this.last = curNodeBucketIndex; + this.curLast = curNodePointerIndex; + this.length = pos + 1; + }; + Deque.prototype.eraseElementByPos = function (pos) { + var _this = this; + checkWithinAccessParams(pos, 0, this.length - 1); + if (pos === 0) + this.popFront(); + else if (pos === this.length - 1) + this.popBack(); + else { + var arr = []; + for (var i = pos + 1; i < this.length; ++i) { + arr.push(this.getElementByPos(i)); + } + this.cut(pos); + this.popBack(); + arr.forEach(function (element) { return _this.pushBack(element); }); + } + }; + Deque.prototype.eraseElementByValue = function (value) { + if (!this.length) + return; + var arr = []; + for (var i = 0; i < this.length; ++i) { + var element = this.getElementByPos(i); + if (element !== value) + arr.push(element); + } + var _length = arr.length; + for (var i = 0; i < _length; ++i) + this.setElementByPos(i, arr[i]); + this.cut(_length - 1); + }; + Deque.prototype.eraseElementByIterator = function (iter) { + // @ts-ignore + var node = iter.node; + this.eraseElementByPos(node); + iter = iter.next(); + return iter; + }; + Deque.prototype.find = function (element) { + for (var i = 0; i < this.length; ++i) { + if (this.getElementByPos(i) === element) { + return new DequeIterator(i, this.size, this.getElementByPos, this.setElementByPos); + } + } + return this.end(); + }; + Deque.prototype.reverse = function () { + var l = 0; + var r = this.length - 1; + while (l < r) { + var tmp = this.getElementByPos(l); + this.setElementByPos(l, this.getElementByPos(r)); + this.setElementByPos(r, tmp); + l += 1; + r -= 1; + } + }; + Deque.prototype.unique = function () { + if (this.length <= 1) + return; + var index = 1; + var pre = this.getElementByPos(0); + for (var i = 1; i < this.length; ++i) { + var cur = this.getElementByPos(i); + if (cur !== pre) { + pre = cur; + this.setElementByPos(index++, cur); + } + } + while (this.length > index) + this.popBack(); + }; + Deque.prototype.sort = function (cmp) { + var arr = []; + for (var i = 0; i < this.length; ++i) { + arr.push(this.getElementByPos(i)); + } + arr.sort(cmp); + for (var i = 0; i < this.length; ++i) + this.setElementByPos(i, arr[i]); + }; + /** + * @description Remove as much useless space as possible. + */ + Deque.prototype.shrinkToFit = function () { + if (!this.length) + return; + var arr = []; + this.forEach(function (element) { return arr.push(element); }); + this.bucketNum = Math.max(Math.ceil(this.length / this.bucketSize), 1); + this.length = this.first = this.last = this.curFirst = this.curLast = 0; + this.map = []; + for (var i = 0; i < this.bucketNum; ++i) { + this.map.push(new Array(this.bucketSize)); + } + for (var i = 0; i < arr.length; ++i) + this.pushBack(arr[i]); + }; + Deque.prototype[Symbol.iterator] = function () { + return function () { + var i; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + i = 0; + _a.label = 1; + case 1: + if (!(i < this.length)) return [3 /*break*/, 4]; + return [4 /*yield*/, this.getElementByPos(i)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + ++i; + return [3 /*break*/, 1]; + case 4: return [2 /*return*/]; + } + }); + }.bind(this)(); + }; + return Deque; +}(SequentialContainer)); +export default Deque; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/LinkList.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/LinkList.js new file mode 100644 index 00000000000..5e57085d1fc --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/LinkList.js @@ -0,0 +1,458 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +import SequentialContainer from './Base/index'; +import { checkWithinAccessParams } from "../../utils/checkParams"; +import { ContainerIterator } from "../ContainerBase/index"; +var LinkNode = /** @class */ (function () { + function LinkNode(element) { + this.value = undefined; + this.pre = undefined; + this.next = undefined; + this.value = element; + } + return LinkNode; +}()); +export { LinkNode }; +var LinkListIterator = /** @class */ (function (_super) { + __extends(LinkListIterator, _super); + function LinkListIterator(node, header, iteratorType) { + var _this = _super.call(this, iteratorType) || this; + _this.node = node; + _this.header = header; + if (_this.iteratorType === ContainerIterator.NORMAL) { + _this.pre = function () { + if (this.node.pre === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre; + return this; + }; + _this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next; + return this; + }; + } + else { + _this.pre = function () { + if (this.node.next === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next; + return this; + }; + _this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre; + return this; + }; + } + return _this; + } + Object.defineProperty(LinkListIterator.prototype, "pointer", { + get: function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + return this.node.value; + }, + set: function (newValue) { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node.value = newValue; + }, + enumerable: false, + configurable: true + }); + LinkListIterator.prototype.equals = function (obj) { + return this.node === obj.node; + }; + LinkListIterator.prototype.copy = function () { + return new LinkListIterator(this.node, this.header, this.iteratorType); + }; + return LinkListIterator; +}(ContainerIterator)); +export { LinkListIterator }; +var LinkList = /** @class */ (function (_super) { + __extends(LinkList, _super); + function LinkList(container) { + if (container === void 0) { container = []; } + var _this = _super.call(this) || this; + _this.header = new LinkNode(); + _this.head = undefined; + _this.tail = undefined; + container.forEach(function (element) { return _this.pushBack(element); }); + return _this; + } + LinkList.prototype.clear = function () { + this.length = 0; + this.head = this.tail = undefined; + this.header.pre = this.header.next = undefined; + }; + LinkList.prototype.begin = function () { + return new LinkListIterator(this.head || this.header, this.header); + }; + LinkList.prototype.end = function () { + return new LinkListIterator(this.header, this.header); + }; + LinkList.prototype.rBegin = function () { + return new LinkListIterator(this.tail || this.header, this.header, ContainerIterator.REVERSE); + }; + LinkList.prototype.rEnd = function () { + return new LinkListIterator(this.header, this.header, ContainerIterator.REVERSE); + }; + LinkList.prototype.front = function () { + return this.head ? this.head.value : undefined; + }; + LinkList.prototype.back = function () { + return this.tail ? this.tail.value : undefined; + }; + LinkList.prototype.forEach = function (callback) { + if (!this.length) + return; + var curNode = this.head; + var index = 0; + while (curNode !== this.header) { + callback(curNode.value, index++); + curNode = curNode.next; + } + }; + LinkList.prototype.getElementByPos = function (pos) { + checkWithinAccessParams(pos, 0, this.length - 1); + var curNode = this.head; + while (pos--) { + curNode = curNode.next; + } + return curNode.value; + }; + LinkList.prototype.eraseElementByPos = function (pos) { + checkWithinAccessParams(pos, 0, this.length - 1); + if (pos === 0) + this.popFront(); + else if (pos === this.length - 1) + this.popBack(); + else { + var curNode = this.head; + while (pos--) { + curNode = curNode.next; + } + curNode = curNode; + var pre = curNode.pre; + var next = curNode.next; + next.pre = pre; + pre.next = next; + this.length -= 1; + } + }; + LinkList.prototype.eraseElementByValue = function (value) { + while (this.head && this.head.value === value) + this.popFront(); + while (this.tail && this.tail.value === value) + this.popBack(); + if (!this.head) + return; + var curNode = this.head; + while (curNode !== this.header) { + if (curNode.value === value) { + var pre = curNode.pre; + var next = curNode.next; + if (next) + next.pre = pre; + if (pre) + pre.next = next; + this.length -= 1; + } + curNode = curNode.next; + } + }; + LinkList.prototype.eraseElementByIterator = function (iter) { + // @ts-ignore + var node = iter.node; + if (node === this.header) { + throw new RangeError('Invalid iterator'); + } + iter = iter.next(); + if (this.head === node) + this.popFront(); + else if (this.tail === node) + this.popBack(); + else { + var pre = node.pre; + var next = node.next; + if (next) + next.pre = pre; + if (pre) + pre.next = next; + this.length -= 1; + } + return iter; + }; + LinkList.prototype.pushBack = function (element) { + this.length += 1; + var newTail = new LinkNode(element); + if (!this.tail) { + this.head = this.tail = newTail; + this.header.next = this.head; + this.head.pre = this.header; + } + else { + this.tail.next = newTail; + newTail.pre = this.tail; + this.tail = newTail; + } + this.tail.next = this.header; + this.header.pre = this.tail; + }; + LinkList.prototype.popBack = function () { + if (!this.tail) + return; + this.length -= 1; + if (this.head === this.tail) { + this.head = this.tail = undefined; + this.header.next = undefined; + } + else { + this.tail = this.tail.pre; + if (this.tail) + this.tail.next = undefined; + } + this.header.pre = this.tail; + if (this.tail) + this.tail.next = this.header; + }; + LinkList.prototype.setElementByPos = function (pos, element) { + checkWithinAccessParams(pos, 0, this.length - 1); + var curNode = this.head; + while (pos--) { + curNode = curNode.next; + } + curNode.value = element; + }; + LinkList.prototype.insert = function (pos, element, num) { + if (num === void 0) { num = 1; } + checkWithinAccessParams(pos, 0, this.length); + if (num <= 0) + return; + if (pos === 0) { + while (num--) + this.pushFront(element); + } + else if (pos === this.length) { + while (num--) + this.pushBack(element); + } + else { + var curNode = this.head; + for (var i = 1; i < pos; ++i) { + curNode = curNode.next; + } + var next = curNode.next; + this.length += num; + while (num--) { + curNode.next = new LinkNode(element); + curNode.next.pre = curNode; + curNode = curNode.next; + } + curNode.next = next; + if (next) + next.pre = curNode; + } + }; + LinkList.prototype.find = function (element) { + if (!this.head) + return this.end(); + var curNode = this.head; + while (curNode !== this.header) { + if (curNode.value === element) { + return new LinkListIterator(curNode, this.header); + } + curNode = curNode.next; + } + return this.end(); + }; + LinkList.prototype.reverse = function () { + if (this.length <= 1) + return; + var pHead = this.head; + var pTail = this.tail; + var cnt = 0; + while ((cnt << 1) < this.length) { + var tmp = pHead.value; + pHead.value = pTail.value; + pTail.value = tmp; + pHead = pHead.next; + pTail = pTail.pre; + cnt += 1; + } + }; + LinkList.prototype.unique = function () { + if (this.length <= 1) + return; + var curNode = this.head; + while (curNode !== this.header) { + var tmpNode = curNode; + while (tmpNode.next && tmpNode.value === tmpNode.next.value) { + tmpNode = tmpNode.next; + this.length -= 1; + } + curNode.next = tmpNode.next; + if (curNode.next) + curNode.next.pre = curNode; + curNode = curNode.next; + } + }; + LinkList.prototype.sort = function (cmp) { + if (this.length <= 1) + return; + var arr = []; + this.forEach(function (element) { return arr.push(element); }); + arr.sort(cmp); + var curNode = this.head; + arr.forEach(function (element) { + curNode.value = element; + curNode = curNode.next; + }); + }; + /** + * @description Push an element to the front. + * @param element The element you want to push. + */ + LinkList.prototype.pushFront = function (element) { + this.length += 1; + var newHead = new LinkNode(element); + if (!this.head) { + this.head = this.tail = newHead; + this.tail.next = this.header; + this.header.pre = this.tail; + } + else { + newHead.next = this.head; + this.head.pre = newHead; + this.head = newHead; + } + this.header.next = this.head; + this.head.pre = this.header; + }; + /** + * @description Removes the first element. + */ + LinkList.prototype.popFront = function () { + if (!this.head) + return; + this.length -= 1; + if (this.head === this.tail) { + this.head = this.tail = undefined; + this.header.pre = this.tail; + } + else { + this.head = this.head.next; + if (this.head) + this.head.pre = this.header; + } + this.header.next = this.head; + }; + /** + * @description Merges two sorted lists. + * @param list The other list you want to merge (must be sorted). + */ + LinkList.prototype.merge = function (list) { + var _this = this; + if (!this.head) { + list.forEach(function (element) { return _this.pushBack(element); }); + return; + } + var curNode = this.head; + list.forEach(function (element) { + while (curNode && + curNode !== _this.header && + curNode.value <= element) { + curNode = curNode.next; + } + if (curNode === _this.header) { + _this.pushBack(element); + curNode = _this.tail; + } + else if (curNode === _this.head) { + _this.pushFront(element); + curNode = _this.head; + } + else { + _this.length += 1; + var pre = curNode.pre; + pre.next = new LinkNode(element); + pre.next.pre = pre; + pre.next.next = curNode; + curNode.pre = pre.next; + } + }); + }; + LinkList.prototype[Symbol.iterator] = function () { + return function () { + var curNode; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!this.head) + return [2 /*return*/]; + curNode = this.head; + _a.label = 1; + case 1: + if (!(curNode !== this.header)) return [3 /*break*/, 3]; + return [4 /*yield*/, curNode.value]; + case 2: + _a.sent(); + curNode = curNode.next; + return [3 /*break*/, 1]; + case 3: return [2 /*return*/]; + } + }); + }.bind(this)(); + }; + return LinkList; +}(SequentialContainer)); +export default LinkList; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Vector.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Vector.js new file mode 100644 index 00000000000..5b92ab97e4b --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/SequentialContainer/Vector.js @@ -0,0 +1,227 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +import SequentialContainer from './Base/index'; +import { checkWithinAccessParams } from "../../utils/checkParams"; +import { ContainerIterator } from "../ContainerBase/index"; +import { RandomIterator } from "./Base/RandomIterator"; +var VectorIterator = /** @class */ (function (_super) { + __extends(VectorIterator, _super); + function VectorIterator() { + return _super !== null && _super.apply(this, arguments) || this; + } + VectorIterator.prototype.copy = function () { + return new VectorIterator(this.node, this.size, this.getElementByPos, this.setElementByPos, this.iteratorType); + }; + return VectorIterator; +}(RandomIterator)); +export { VectorIterator }; +var Vector = /** @class */ (function (_super) { + __extends(Vector, _super); + /** + * @description Vector's constructor. + * @param container Initialize container, must have a forEach function. + * @param copy When the container is an array, you can choose to directly operate on the original object of + * the array or perform a shallow copy. The default is shallow copy. + */ + function Vector(container, copy) { + if (container === void 0) { container = []; } + if (copy === void 0) { copy = true; } + var _this = _super.call(this) || this; + if (Array.isArray(container)) { + _this.vector = copy ? __spreadArray([], __read(container), false) : container; + _this.length = container.length; + } + else { + _this.vector = []; + container.forEach(function (element) { return _this.pushBack(element); }); + } + _this.size = _this.size.bind(_this); + _this.getElementByPos = _this.getElementByPos.bind(_this); + _this.setElementByPos = _this.setElementByPos.bind(_this); + return _this; + } + Vector.prototype.clear = function () { + this.length = 0; + this.vector.length = 0; + }; + Vector.prototype.begin = function () { + return new VectorIterator(0, this.size, this.getElementByPos, this.setElementByPos); + }; + Vector.prototype.end = function () { + return new VectorIterator(this.length, this.size, this.getElementByPos, this.setElementByPos); + }; + Vector.prototype.rBegin = function () { + return new VectorIterator(this.length - 1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE); + }; + Vector.prototype.rEnd = function () { + return new VectorIterator(-1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE); + }; + Vector.prototype.front = function () { + return this.vector[0]; + }; + Vector.prototype.back = function () { + return this.vector[this.length - 1]; + }; + Vector.prototype.forEach = function (callback) { + for (var i = 0; i < this.length; ++i) { + callback(this.vector[i], i); + } + }; + Vector.prototype.getElementByPos = function (pos) { + checkWithinAccessParams(pos, 0, this.length - 1); + return this.vector[pos]; + }; + Vector.prototype.eraseElementByPos = function (pos) { + checkWithinAccessParams(pos, 0, this.length - 1); + this.vector.splice(pos, 1); + this.length -= 1; + }; + Vector.prototype.eraseElementByValue = function (value) { + var index = 0; + for (var i = 0; i < this.length; ++i) { + if (this.vector[i] !== value) { + this.vector[index++] = this.vector[i]; + } + } + this.length = this.vector.length = index; + }; + Vector.prototype.eraseElementByIterator = function (iter) { + // @ts-ignore + var node = iter.node; + iter = iter.next(); + this.eraseElementByPos(node); + return iter; + }; + Vector.prototype.pushBack = function (element) { + this.vector.push(element); + this.length += 1; + }; + Vector.prototype.popBack = function () { + if (!this.length) + return; + this.vector.pop(); + this.length -= 1; + }; + Vector.prototype.setElementByPos = function (pos, element) { + checkWithinAccessParams(pos, 0, this.length - 1); + this.vector[pos] = element; + }; + Vector.prototype.insert = function (pos, element, num) { + var _a; + if (num === void 0) { num = 1; } + checkWithinAccessParams(pos, 0, this.length); + (_a = this.vector).splice.apply(_a, __spreadArray([pos, 0], __read(new Array(num).fill(element)), false)); + this.length += num; + }; + Vector.prototype.find = function (element) { + for (var i = 0; i < this.length; ++i) { + if (this.vector[i] === element) { + return new VectorIterator(i, this.size, this.getElementByPos, this.getElementByPos); + } + } + return this.end(); + }; + Vector.prototype.reverse = function () { + this.vector.reverse(); + }; + Vector.prototype.unique = function () { + var index = 1; + for (var i = 1; i < this.length; ++i) { + if (this.vector[i] !== this.vector[i - 1]) { + this.vector[index++] = this.vector[i]; + } + } + this.length = this.vector.length = index; + }; + Vector.prototype.sort = function (cmp) { + this.vector.sort(cmp); + }; + Vector.prototype[Symbol.iterator] = function () { + return function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this.vector)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }.bind(this)(); + }; + return Vector; +}(SequentialContainer)); +export default Vector; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/TreeIterator.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/TreeIterator.js new file mode 100644 index 00000000000..0d5761a4803 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/TreeIterator.js @@ -0,0 +1,62 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +import { ContainerIterator } from "../../ContainerBase/index"; +var TreeIterator = /** @class */ (function (_super) { + __extends(TreeIterator, _super); + function TreeIterator(node, header, iteratorType) { + var _this = _super.call(this, iteratorType) || this; + _this.node = node; + _this.header = header; + if (_this.iteratorType === ContainerIterator.NORMAL) { + _this.pre = function () { + if (this.node === this.header.left) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre(); + return this; + }; + _this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next(); + return this; + }; + } + else { + _this.pre = function () { + if (this.node === this.header.right) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next(); + return this; + }; + _this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre(); + return this; + }; + } + return _this; + } + TreeIterator.prototype.equals = function (obj) { + return this.node === obj.node; + }; + return TreeIterator; +}(ContainerIterator)); +export default TreeIterator; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/TreeNode.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/TreeNode.js new file mode 100644 index 00000000000..8b828aaeece --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/TreeNode.js @@ -0,0 +1,121 @@ +var TreeNode = /** @class */ (function () { + function TreeNode(key, value) { + this.color = true; + this.key = undefined; + this.value = undefined; + this.left = undefined; + this.right = undefined; + this.parent = undefined; + this.key = key; + this.value = value; + } + /** + * @description Get the pre node. + * @return TreeNode about the pre node. + */ + TreeNode.prototype.pre = function () { + var preNode = this; + if (preNode.color === TreeNode.RED && + preNode.parent.parent === preNode) { + preNode = preNode.right; + } + else if (preNode.left) { + preNode = preNode.left; + while (preNode.right) { + preNode = preNode.right; + } + } + else { + var pre = preNode.parent; + while (pre.left === preNode) { + preNode = pre; + pre = preNode.parent; + } + preNode = pre; + } + return preNode; + }; + /** + * @description Get the next node. + * @return TreeNode about the next node. + */ + TreeNode.prototype.next = function () { + var nextNode = this; + if (nextNode.right) { + nextNode = nextNode.right; + while (nextNode.left) { + nextNode = nextNode.left; + } + } + else { + var pre = nextNode.parent; + while (pre.right === nextNode) { + nextNode = pre; + pre = nextNode.parent; + } + if (nextNode.right !== pre) { + nextNode = pre; + } + } + return nextNode; + }; + /** + * @description Rotate left. + * @return TreeNode about moved to original position after rotation. + */ + TreeNode.prototype.rotateLeft = function () { + var PP = this.parent; + var V = this.right; + var R = V.left; + if (PP.parent === this) + PP.parent = V; + else if (PP.left === this) + PP.left = V; + else + PP.right = V; + V.parent = PP; + V.left = this; + this.parent = V; + this.right = R; + if (R) + R.parent = this; + return V; + }; + /** + * @description Rotate left. + * @return TreeNode about moved to original position after rotation. + */ + TreeNode.prototype.rotateRight = function () { + var PP = this.parent; + var F = this.left; + var K = F.right; + if (PP.parent === this) + PP.parent = F; + else if (PP.left === this) + PP.left = F; + else + PP.right = F; + F.parent = PP; + F.right = this; + this.parent = F; + this.left = K; + if (K) + K.parent = this; + return F; + }; + /** + * @description Remove this. + */ + TreeNode.prototype.remove = function () { + var parent = this.parent; + if (this === parent.left) { + parent.left = undefined; + } + else + parent.right = undefined; + }; + TreeNode.RED = true; + TreeNode.BLACK = false; + return TreeNode; +}()); +export default TreeNode; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/index.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/index.js new file mode 100644 index 00000000000..82bd97adc90 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/index.js @@ -0,0 +1,601 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +import TreeNode from './TreeNode'; +import { Container } from "../../ContainerBase/index"; +import { checkWithinAccessParams } from "../../../utils/checkParams"; +var TreeContainer = /** @class */ (function (_super) { + __extends(TreeContainer, _super); + function TreeContainer(cmp) { + if (cmp === void 0) { cmp = function (x, y) { + if (x < y) + return -1; + if (x > y) + return 1; + return 0; + }; } + var _this = _super.call(this) || this; + _this.root = undefined; + _this.header = new TreeNode(); + /** + * @description InOrder traversal the tree. + * @protected + */ + _this.inOrderTraversal = function (curNode, callback) { + if (curNode === undefined) + return false; + var ifReturn = _this.inOrderTraversal(curNode.left, callback); + if (ifReturn) + return true; + if (callback(curNode)) + return true; + return _this.inOrderTraversal(curNode.right, callback); + }; + _this.cmp = cmp; + return _this; + } + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is greater than or equals to the given key. + * @protected + */ + TreeContainer.prototype._lowerBound = function (curNode, key) { + var resNode; + while (curNode) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + curNode = curNode.right; + } + else if (cmpResult > 0) { + resNode = curNode; + curNode = curNode.left; + } + else + return curNode; + } + return resNode === undefined ? this.header : resNode; + }; + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is greater than the given key. + * @protected + */ + TreeContainer.prototype._upperBound = function (curNode, key) { + var resNode; + while (curNode) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult <= 0) { + curNode = curNode.right; + } + else if (cmpResult > 0) { + resNode = curNode; + curNode = curNode.left; + } + } + return resNode === undefined ? this.header : resNode; + }; + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is less than or equals to the given key. + * @protected + */ + TreeContainer.prototype._reverseLowerBound = function (curNode, key) { + var resNode; + while (curNode) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + resNode = curNode; + curNode = curNode.right; + } + else if (cmpResult > 0) { + curNode = curNode.left; + } + else + return curNode; + } + return resNode === undefined ? this.header : resNode; + }; + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is less than the given key. + * @protected + */ + TreeContainer.prototype._reverseUpperBound = function (curNode, key) { + var resNode; + while (curNode) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + resNode = curNode; + curNode = curNode.right; + } + else if (cmpResult >= 0) { + curNode = curNode.left; + } + } + return resNode === undefined ? this.header : resNode; + }; + /** + * @description Make self balance after erase a node. + * @param curNode The node want to remove. + * @protected + */ + TreeContainer.prototype.eraseNodeSelfBalance = function (curNode) { + while (true) { + var parentNode = curNode.parent; + if (parentNode === this.header) + return; + if (curNode.color === TreeNode.RED) { + curNode.color = TreeNode.BLACK; + return; + } + if (curNode === parentNode.left) { + var brother = parentNode.right; + if (brother.color === TreeNode.RED) { + brother.color = TreeNode.BLACK; + parentNode.color = TreeNode.RED; + if (parentNode === this.root) { + this.root = parentNode.rotateLeft(); + } + else + parentNode.rotateLeft(); + } + else if (brother.color === TreeNode.BLACK) { + if (brother.right && brother.right.color === TreeNode.RED) { + brother.color = parentNode.color; + parentNode.color = TreeNode.BLACK; + brother.right.color = TreeNode.BLACK; + if (parentNode === this.root) { + this.root = parentNode.rotateLeft(); + } + else + parentNode.rotateLeft(); + return; + } + else if (brother.left && brother.left.color === TreeNode.RED) { + brother.color = TreeNode.RED; + brother.left.color = TreeNode.BLACK; + brother.rotateRight(); + } + else { + brother.color = TreeNode.RED; + curNode = parentNode; + } + } + } + else { + var brother = parentNode.left; + if (brother.color === TreeNode.RED) { + brother.color = TreeNode.BLACK; + parentNode.color = TreeNode.RED; + if (parentNode === this.root) { + this.root = parentNode.rotateRight(); + } + else + parentNode.rotateRight(); + } + else { + if (brother.left && brother.left.color === TreeNode.RED) { + brother.color = parentNode.color; + parentNode.color = TreeNode.BLACK; + brother.left.color = TreeNode.BLACK; + if (parentNode === this.root) { + this.root = parentNode.rotateRight(); + } + else + parentNode.rotateRight(); + return; + } + else if (brother.right && brother.right.color === TreeNode.RED) { + brother.color = TreeNode.RED; + brother.right.color = TreeNode.BLACK; + brother.rotateLeft(); + } + else { + brother.color = TreeNode.RED; + curNode = parentNode; + } + } + } + } + }; + /** + * @description Remove a node. + * @param curNode The node you want to remove. + * @protected + */ + TreeContainer.prototype.eraseNode = function (curNode) { + var _a, _b; + if (this.length === 1) { + this.clear(); + return; + } + var swapNode = curNode; + while (swapNode.left || swapNode.right) { + if (swapNode.right) { + swapNode = swapNode.right; + while (swapNode.left) + swapNode = swapNode.left; + } + else if (swapNode.left) { + swapNode = swapNode.left; + } + _a = __read([swapNode.key, curNode.key], 2), curNode.key = _a[0], swapNode.key = _a[1]; + _b = __read([swapNode.value, curNode.value], 2), curNode.value = _b[0], swapNode.value = _b[1]; + curNode = swapNode; + } + if (this.header.left === swapNode) { + this.header.left = swapNode.parent; + } + else if (this.header.right === swapNode) { + this.header.right = swapNode.parent; + } + this.eraseNodeSelfBalance(swapNode); + swapNode.remove(); + this.length -= 1; + this.root.color = TreeNode.BLACK; + }; + /** + * @description Make self balance after insert a node. + * @param curNode The node want to insert. + * @protected + */ + TreeContainer.prototype.insertNodeSelfBalance = function (curNode) { + while (true) { + var parentNode = curNode.parent; + if (parentNode.color === TreeNode.BLACK) + return; + var grandParent = parentNode.parent; + if (parentNode === grandParent.left) { + var uncle = grandParent.right; + if (uncle && uncle.color === TreeNode.RED) { + uncle.color = parentNode.color = TreeNode.BLACK; + if (grandParent === this.root) + return; + grandParent.color = TreeNode.RED; + curNode = grandParent; + continue; + } + else if (curNode === parentNode.right) { + curNode.color = TreeNode.BLACK; + if (curNode.left) + curNode.left.parent = parentNode; + if (curNode.right) + curNode.right.parent = grandParent; + parentNode.right = curNode.left; + grandParent.left = curNode.right; + curNode.left = parentNode; + curNode.right = grandParent; + if (grandParent === this.root) { + this.root = curNode; + this.header.parent = curNode; + } + else { + var GP = grandParent.parent; + if (GP.left === grandParent) { + GP.left = curNode; + } + else + GP.right = curNode; + } + curNode.parent = grandParent.parent; + parentNode.parent = curNode; + grandParent.parent = curNode; + } + else { + parentNode.color = TreeNode.BLACK; + if (grandParent === this.root) { + this.root = grandParent.rotateRight(); + } + else + grandParent.rotateRight(); + } + grandParent.color = TreeNode.RED; + } + else { + var uncle = grandParent.left; + if (uncle && uncle.color === TreeNode.RED) { + uncle.color = parentNode.color = TreeNode.BLACK; + if (grandParent === this.root) + return; + grandParent.color = TreeNode.RED; + curNode = grandParent; + continue; + } + else if (curNode === parentNode.left) { + curNode.color = TreeNode.BLACK; + if (curNode.left) + curNode.left.parent = grandParent; + if (curNode.right) + curNode.right.parent = parentNode; + grandParent.right = curNode.left; + parentNode.left = curNode.right; + curNode.left = grandParent; + curNode.right = parentNode; + if (grandParent === this.root) { + this.root = curNode; + this.header.parent = curNode; + } + else { + var GP = grandParent.parent; + if (GP.left === grandParent) { + GP.left = curNode; + } + else + GP.right = curNode; + } + curNode.parent = grandParent.parent; + parentNode.parent = curNode; + grandParent.parent = curNode; + } + else { + parentNode.color = TreeNode.BLACK; + if (grandParent === this.root) { + this.root = grandParent.rotateLeft(); + } + else + grandParent.rotateLeft(); + } + grandParent.color = TreeNode.RED; + } + return; + } + }; + /** + * @description Find node which key is equals to the given key. + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @protected + */ + TreeContainer.prototype.findElementNode = function (curNode, key) { + while (curNode) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + curNode = curNode.right; + } + else if (cmpResult > 0) { + curNode = curNode.left; + } + else + return curNode; + } + return curNode; + }; + /** + * @description Insert a key-value pair or set value by the given key. + * @param key The key want to insert. + * @param value The value want to set. + * @param hint You can give an iterator hint to improve insertion efficiency. + * @protected + */ + TreeContainer.prototype.set = function (key, value, hint) { + if (this.root === undefined) { + this.length += 1; + this.root = new TreeNode(key, value); + this.root.color = TreeNode.BLACK; + this.root.parent = this.header; + this.header.parent = this.root; + this.header.left = this.root; + this.header.right = this.root; + return; + } + var curNode; + var minNode = this.header.left; + var compareToMin = this.cmp(minNode.key, key); + if (compareToMin === 0) { + minNode.value = value; + return; + } + else if (compareToMin > 0) { + minNode.left = new TreeNode(key, value); + minNode.left.parent = minNode; + curNode = minNode.left; + this.header.left = curNode; + } + else { + var maxNode = this.header.right; + var compareToMax = this.cmp(maxNode.key, key); + if (compareToMax === 0) { + maxNode.value = value; + return; + } + else if (compareToMax < 0) { + maxNode.right = new TreeNode(key, value); + maxNode.right.parent = maxNode; + curNode = maxNode.right; + this.header.right = curNode; + } + else { + if (hint !== undefined) { + // @ts-ignore + var iterNode = hint.node; + if (iterNode !== this.header) { + var iterCmpRes = this.cmp(iterNode.key, key); + if (iterCmpRes === 0) { + iterNode.value = value; + return; + } + else if (iterCmpRes > 0) { + var preNode = iterNode.pre(); + var preCmpRes = this.cmp(preNode.key, key); + if (preCmpRes === 0) { + preNode.value = value; + return; + } + else if (preCmpRes < 0) { + curNode = new TreeNode(key, value); + if (preNode.right === undefined) { + preNode.right = curNode; + curNode.parent = preNode; + } + else { + iterNode.left = curNode; + curNode.parent = iterNode; + } + } + } + } + } + if (curNode === undefined) { + curNode = this.root; + while (true) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult > 0) { + if (curNode.left === undefined) { + curNode.left = new TreeNode(key, value); + curNode.left.parent = curNode; + curNode = curNode.left; + break; + } + curNode = curNode.left; + } + else if (cmpResult < 0) { + if (curNode.right === undefined) { + curNode.right = new TreeNode(key, value); + curNode.right.parent = curNode; + curNode = curNode.right; + break; + } + curNode = curNode.right; + } + else { + curNode.value = value; + return; + } + } + } + } + } + this.length += 1; + this.insertNodeSelfBalance(curNode); + }; + TreeContainer.prototype.clear = function () { + this.length = 0; + this.root = undefined; + this.header.parent = undefined; + this.header.left = this.header.right = undefined; + }; + /** + * @description Update node's key by iterator. + * @param iter The iterator you want to change. + * @param key The key you want to update. + * @return Boolean about if the modification is successful. + */ + TreeContainer.prototype.updateKeyByIterator = function (iter, key) { + // @ts-ignore + var node = iter.node; + if (node === this.header) { + throw new TypeError('Invalid iterator!'); + } + if (this.length === 1) { + node.key = key; + return true; + } + if (node === this.header.left) { + if (this.cmp(node.next().key, key) > 0) { + node.key = key; + return true; + } + return false; + } + if (node === this.header.right) { + if (this.cmp(node.pre().key, key) < 0) { + node.key = key; + return true; + } + return false; + } + var preKey = node.pre().key; + if (this.cmp(preKey, key) >= 0) + return false; + var nextKey = node.next().key; + if (this.cmp(nextKey, key) <= 0) + return false; + node.key = key; + return true; + }; + TreeContainer.prototype.eraseElementByPos = function (pos) { + var _this = this; + checkWithinAccessParams(pos, 0, this.length - 1); + var index = 0; + this.inOrderTraversal(this.root, function (curNode) { + if (pos === index) { + _this.eraseNode(curNode); + return true; + } + index += 1; + return false; + }); + }; + /** + * @description Remove the element of the specified key. + * @param key The key you want to remove. + */ + TreeContainer.prototype.eraseElementByKey = function (key) { + if (!this.length) + return; + var curNode = this.findElementNode(this.root, key); + if (curNode === undefined) + return; + this.eraseNode(curNode); + }; + TreeContainer.prototype.eraseElementByIterator = function (iter) { + // @ts-ignore + var node = iter.node; + if (node === this.header) { + throw new RangeError('Invalid iterator'); + } + if (node.right === undefined) { + iter = iter.next(); + } + this.eraseNode(node); + return iter; + }; + /** + * @description Get the height of the tree. + * @return Number about the height of the RB-tree. + */ + TreeContainer.prototype.getHeight = function () { + if (!this.length) + return 0; + var traversal = function (curNode) { + if (!curNode) + return 0; + return Math.max(traversal(curNode.left), traversal(curNode.right)) + 1; + }; + return traversal(this.root); + }; + return TreeContainer; +}(Container)); +export default TreeContainer; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/OrderedMap.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/OrderedMap.js new file mode 100644 index 00000000000..997cb947d69 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/OrderedMap.js @@ -0,0 +1,257 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +import { ContainerIterator } from "../ContainerBase/index"; +import { checkWithinAccessParams } from "../../utils/checkParams"; +import TreeContainer from './Base/index'; +import TreeIterator from './Base/TreeIterator'; +var OrderedMapIterator = /** @class */ (function (_super) { + __extends(OrderedMapIterator, _super); + function OrderedMapIterator() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(OrderedMapIterator.prototype, "pointer", { + get: function () { + var _this = this; + if (this.node === this.header) { + throw new RangeError('OrderedMap iterator access denied'); + } + return new Proxy([], { + get: function (_, props) { + if (props === '0') + return _this.node.key; + else if (props === '1') + return _this.node.value; + }, + set: function (_, props, newValue) { + if (props !== '1') { + throw new TypeError('props must be 1'); + } + _this.node.value = newValue; + return true; + } + }); + }, + enumerable: false, + configurable: true + }); + OrderedMapIterator.prototype.copy = function () { + return new OrderedMapIterator(this.node, this.header, this.iteratorType); + }; + return OrderedMapIterator; +}(TreeIterator)); +export { OrderedMapIterator }; +var OrderedMap = /** @class */ (function (_super) { + __extends(OrderedMap, _super); + function OrderedMap(container, cmp) { + if (container === void 0) { container = []; } + var _this = _super.call(this, cmp) || this; + _this.iterationFunc = function (curNode) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (curNode === undefined) + return [2 /*return*/]; + return [5 /*yield**/, __values(this.iterationFunc(curNode.left))]; + case 1: + _a.sent(); + return [4 /*yield*/, [curNode.key, curNode.value]]; + case 2: + _a.sent(); + return [5 /*yield**/, __values(this.iterationFunc(curNode.right))]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + _this.iterationFunc = _this.iterationFunc.bind(_this); + container.forEach(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + return _this.setElement(key, value); + }); + return _this; + } + OrderedMap.prototype.begin = function () { + return new OrderedMapIterator(this.header.left || this.header, this.header); + }; + OrderedMap.prototype.end = function () { + return new OrderedMapIterator(this.header, this.header); + }; + OrderedMap.prototype.rBegin = function () { + return new OrderedMapIterator(this.header.right || this.header, this.header, ContainerIterator.REVERSE); + }; + OrderedMap.prototype.rEnd = function () { + return new OrderedMapIterator(this.header, this.header, ContainerIterator.REVERSE); + }; + OrderedMap.prototype.front = function () { + if (!this.length) + return undefined; + var minNode = this.header.left; + return [minNode.key, minNode.value]; + }; + OrderedMap.prototype.back = function () { + if (!this.length) + return undefined; + var maxNode = this.header.right; + return [maxNode.key, maxNode.value]; + }; + OrderedMap.prototype.forEach = function (callback) { + var e_1, _a; + var index = 0; + try { + for (var _b = __values(this), _c = _b.next(); !_c.done; _c = _b.next()) { + var pair = _c.value; + callback(pair, index++); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + }; + OrderedMap.prototype.lowerBound = function (key) { + var resNode = this._lowerBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + }; + OrderedMap.prototype.upperBound = function (key) { + var resNode = this._upperBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + }; + OrderedMap.prototype.reverseLowerBound = function (key) { + var resNode = this._reverseLowerBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + }; + OrderedMap.prototype.reverseUpperBound = function (key) { + var resNode = this._reverseUpperBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + }; + /** + * @description Insert a key-value pair or set value by the given key. + * @param key The key want to insert. + * @param value The value want to set. + * @param hint You can give an iterator hint to improve insertion efficiency. + */ + OrderedMap.prototype.setElement = function (key, value, hint) { + this.set(key, value, hint); + }; + OrderedMap.prototype.find = function (key) { + var curNode = this.findElementNode(this.root, key); + if (curNode !== undefined) { + return new OrderedMapIterator(curNode, this.header); + } + return this.end(); + }; + /** + * @description Get the value of the element of the specified key. + */ + OrderedMap.prototype.getElementByKey = function (key) { + var curNode = this.findElementNode(this.root, key); + return curNode ? curNode.value : undefined; + }; + OrderedMap.prototype.getElementByPos = function (pos) { + var e_2, _a; + checkWithinAccessParams(pos, 0, this.length - 1); + var res; + var index = 0; + try { + for (var _b = __values(this), _c = _b.next(); !_c.done; _c = _b.next()) { + var pair = _c.value; + if (index === pos) { + res = pair; + break; + } + index += 1; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_2) throw e_2.error; } + } + return res; + }; + OrderedMap.prototype.union = function (other) { + var _this = this; + other.forEach(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + return _this.setElement(key, value); + }); + }; + OrderedMap.prototype[Symbol.iterator] = function () { + return this.iterationFunc(this.root); + }; + return OrderedMap; +}(TreeContainer)); +export default OrderedMap; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/OrderedSet.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/OrderedSet.js new file mode 100644 index 00000000000..e7a9915947e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/container/TreeContainer/OrderedSet.js @@ -0,0 +1,205 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +import TreeContainer from './Base/index'; +import { ContainerIterator } from "../ContainerBase/index"; +import { checkWithinAccessParams } from "../../utils/checkParams"; +import TreeIterator from './Base/TreeIterator'; +var OrderedSetIterator = /** @class */ (function (_super) { + __extends(OrderedSetIterator, _super); + function OrderedSetIterator() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(OrderedSetIterator.prototype, "pointer", { + get: function () { + if (this.node === this.header) { + throw new RangeError('OrderedSet iterator access denied!'); + } + return this.node.key; + }, + enumerable: false, + configurable: true + }); + OrderedSetIterator.prototype.copy = function () { + return new OrderedSetIterator(this.node, this.header, this.iteratorType); + }; + return OrderedSetIterator; +}(TreeIterator)); +export { OrderedSetIterator }; +var OrderedSet = /** @class */ (function (_super) { + __extends(OrderedSet, _super); + function OrderedSet(container, cmp) { + if (container === void 0) { container = []; } + var _this = _super.call(this, cmp) || this; + _this.iterationFunc = function (curNode) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (curNode === undefined) + return [2 /*return*/]; + return [5 /*yield**/, __values(this.iterationFunc(curNode.left))]; + case 1: + _a.sent(); + return [4 /*yield*/, curNode.key]; + case 2: + _a.sent(); + return [5 /*yield**/, __values(this.iterationFunc(curNode.right))]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + container.forEach(function (element) { return _this.insert(element); }); + _this.iterationFunc = _this.iterationFunc.bind(_this); + return _this; + } + OrderedSet.prototype.begin = function () { + return new OrderedSetIterator(this.header.left || this.header, this.header); + }; + OrderedSet.prototype.end = function () { + return new OrderedSetIterator(this.header, this.header); + }; + OrderedSet.prototype.rBegin = function () { + return new OrderedSetIterator(this.header.right || this.header, this.header, ContainerIterator.REVERSE); + }; + OrderedSet.prototype.rEnd = function () { + return new OrderedSetIterator(this.header, this.header, ContainerIterator.REVERSE); + }; + OrderedSet.prototype.front = function () { + return this.header.left ? this.header.left.key : undefined; + }; + OrderedSet.prototype.back = function () { + return this.header.right ? this.header.right.key : undefined; + }; + OrderedSet.prototype.forEach = function (callback) { + var e_1, _a; + var index = 0; + try { + for (var _b = __values(this), _c = _b.next(); !_c.done; _c = _b.next()) { + var element = _c.value; + callback(element, index++); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + }; + OrderedSet.prototype.getElementByPos = function (pos) { + var e_2, _a; + checkWithinAccessParams(pos, 0, this.length - 1); + var res; + var index = 0; + try { + for (var _b = __values(this), _c = _b.next(); !_c.done; _c = _b.next()) { + var element = _c.value; + if (index === pos) { + res = element; + } + index += 1; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_2) throw e_2.error; } + } + return res; + }; + /** + * @description Insert element to set. + * @param key The key want to insert. + * @param hint You can give an iterator hint to improve insertion efficiency. + */ + OrderedSet.prototype.insert = function (key, hint) { + this.set(key, undefined, hint); + }; + OrderedSet.prototype.find = function (element) { + var curNode = this.findElementNode(this.root, element); + if (curNode !== undefined) { + return new OrderedSetIterator(curNode, this.header); + } + return this.end(); + }; + OrderedSet.prototype.lowerBound = function (key) { + var resNode = this._lowerBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + }; + OrderedSet.prototype.upperBound = function (key) { + var resNode = this._upperBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + }; + OrderedSet.prototype.reverseLowerBound = function (key) { + var resNode = this._reverseLowerBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + }; + OrderedSet.prototype.reverseUpperBound = function (key) { + var resNode = this._reverseUpperBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + }; + OrderedSet.prototype.union = function (other) { + var _this = this; + other.forEach(function (element) { return _this.insert(element); }); + }; + OrderedSet.prototype[Symbol.iterator] = function () { + return this.iterationFunc(this.root); + }; + return OrderedSet; +}(TreeContainer)); +export default OrderedSet; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/index.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/index.js new file mode 100644 index 00000000000..80ff2f29798 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/index.js @@ -0,0 +1,14 @@ +export { default as Stack } from "./container/OtherContainer/Stack"; +export { default as Queue } from "./container/OtherContainer/Queue"; +export { default as PriorityQueue } from "./container/OtherContainer/PriorityQueue"; +export { default as Vector, VectorIterator } from "./container/SequentialContainer/Vector"; +export { default as LinkList, LinkListIterator } from "./container/SequentialContainer/LinkList"; +export { default as Deque, DequeIterator } from "./container/SequentialContainer/Deque"; +export { default as OrderedSet, OrderedSetIterator } from "./container/TreeContainer/OrderedSet"; +export { default as OrderedMap, OrderedMapIterator } from "./container/TreeContainer/OrderedMap"; +export { default as HashSet } from "./container/HashContainer/HashSet"; +export { default as HashMap } from "./container/HashContainer/HashMap"; +export { Container, ContainerIterator } from "./container/ContainerBase/index"; +export { default as SequentialContainer } from "./container/SequentialContainer/Base/index"; +export { default as TreeContainer } from "./container/TreeContainer/Base/index"; +export { default as HashContainer } from "./container/HashContainer/Base/index"; diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/utils/checkParams.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/utils/checkParams.js new file mode 100644 index 00000000000..21a59292587 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/esm/utils/checkParams.js @@ -0,0 +1,12 @@ +/** + * @description Check if access is out of bounds. + * @param pos The position want to access. + * @param lower The lower bound. + * @param upper The upper bound. + * @return Boolean about if access is out of bounds. + */ +export function checkWithinAccessParams(pos, lower, upper) { + if (pos < lower || pos > upper) { + throw new RangeError(); + } +} diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/umd/js-sdsl.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/umd/js-sdsl.js new file mode 100644 index 00000000000..87238f16b5d --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/umd/js-sdsl.js @@ -0,0 +1,2968 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.sdsl = {})); +})(this, (function (exports) { 'use strict'; + + /****************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + } + + function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + } + + function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + } + + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + } + + var ContainerIterator = /** @class */ (function () { + function ContainerIterator(iteratorType) { + if (iteratorType === void 0) { iteratorType = ContainerIterator.NORMAL; } + this.iteratorType = iteratorType; + } + ContainerIterator.NORMAL = false; + ContainerIterator.REVERSE = true; + return ContainerIterator; + }()); + var Base = /** @class */ (function () { + function Base() { + /** + * @description Container's size. + * @protected + */ + this.length = 0; + } + /** + * @return The size of the container. + */ + Base.prototype.size = function () { + return this.length; + }; + /** + * @return Boolean about if the container is empty. + */ + Base.prototype.empty = function () { + return this.length === 0; + }; + return Base; + }()); + var Container = /** @class */ (function (_super) { + __extends(Container, _super); + function Container() { + return _super !== null && _super.apply(this, arguments) || this; + } + return Container; + }(Base)); + + var Stack = /** @class */ (function (_super) { + __extends(Stack, _super); + function Stack(container) { + if (container === void 0) { container = []; } + var _this = _super.call(this) || this; + _this.stack = []; + container.forEach(function (element) { return _this.push(element); }); + return _this; + } + Stack.prototype.clear = function () { + this.length = 0; + this.stack.length = 0; + }; + /** + * @description Insert element to stack's end. + */ + Stack.prototype.push = function (element) { + this.stack.push(element); + this.length += 1; + }; + /** + * @description Removes the end element. + */ + Stack.prototype.pop = function () { + this.stack.pop(); + if (this.length > 0) + this.length -= 1; + }; + /** + * @description Accesses the end element. + */ + Stack.prototype.top = function () { + return this.stack[this.length - 1]; + }; + return Stack; + }(Base)); + + var SequentialContainer = /** @class */ (function (_super) { + __extends(SequentialContainer, _super); + function SequentialContainer() { + return _super !== null && _super.apply(this, arguments) || this; + } + return SequentialContainer; + }(Container)); + + /** + * @description Check if access is out of bounds. + * @param pos The position want to access. + * @param lower The lower bound. + * @param upper The upper bound. + * @return Boolean about if access is out of bounds. + */ + function checkWithinAccessParams(pos, lower, upper) { + if (pos < lower || pos > upper) { + throw new RangeError(); + } + } + + var RandomIterator = /** @class */ (function (_super) { + __extends(RandomIterator, _super); + function RandomIterator(index, size, getElementByPos, setElementByPos, iteratorType) { + var _this = _super.call(this, iteratorType) || this; + _this.node = index; + _this.size = size; + _this.getElementByPos = getElementByPos; + _this.setElementByPos = setElementByPos; + if (_this.iteratorType === ContainerIterator.NORMAL) { + _this.pre = function () { + if (this.node === 0) { + throw new RangeError('Deque iterator access denied!'); + } + this.node -= 1; + return this; + }; + _this.next = function () { + if (this.node === this.size()) { + throw new RangeError('Deque Iterator access denied!'); + } + this.node += 1; + return this; + }; + } + else { + _this.pre = function () { + if (this.node === this.size() - 1) { + throw new RangeError('Deque iterator access denied!'); + } + this.node += 1; + return this; + }; + _this.next = function () { + if (this.node === -1) { + throw new RangeError('Deque iterator access denied!'); + } + this.node -= 1; + return this; + }; + } + return _this; + } + Object.defineProperty(RandomIterator.prototype, "pointer", { + get: function () { + checkWithinAccessParams(this.node, 0, this.size() - 1); + return this.getElementByPos(this.node); + }, + set: function (newValue) { + checkWithinAccessParams(this.node, 0, this.size() - 1); + this.setElementByPos(this.node, newValue); + }, + enumerable: false, + configurable: true + }); + RandomIterator.prototype.equals = function (obj) { + return this.node === obj.node; + }; + return RandomIterator; + }(ContainerIterator)); + + var DequeIterator = /** @class */ (function (_super) { + __extends(DequeIterator, _super); + function DequeIterator() { + return _super !== null && _super.apply(this, arguments) || this; + } + DequeIterator.prototype.copy = function () { + return new DequeIterator(this.node, this.size, this.getElementByPos, this.setElementByPos, this.iteratorType); + }; + return DequeIterator; + }(RandomIterator)); + var Deque = /** @class */ (function (_super) { + __extends(Deque, _super); + function Deque(container, bucketSize) { + if (container === void 0) { container = []; } + if (bucketSize === void 0) { bucketSize = (1 << 12); } + var _this = _super.call(this) || this; + _this.first = 0; + _this.curFirst = 0; + _this.last = 0; + _this.curLast = 0; + _this.bucketNum = 0; + _this.map = []; + var _length; + if ('size' in container) { + if (typeof container.size === 'number') { + _length = container.size; + } + else { + _length = container.size(); + } + } + else if ('length' in container) { + _length = container.length; + } + else { + throw new RangeError('Can\'t get container\'s size!'); + } + _this.bucketSize = bucketSize; + _this.bucketNum = Math.max(Math.ceil(_length / _this.bucketSize), 1); + for (var i = 0; i < _this.bucketNum; ++i) { + _this.map.push(new Array(_this.bucketSize)); + } + var needBucketNum = Math.ceil(_length / _this.bucketSize); + _this.first = _this.last = (_this.bucketNum >> 1) - (needBucketNum >> 1); + _this.curFirst = _this.curLast = (_this.bucketSize - _length % _this.bucketSize) >> 1; + container.forEach(function (element) { return _this.pushBack(element); }); + _this.size = _this.size.bind(_this); + _this.getElementByPos = _this.getElementByPos.bind(_this); + _this.setElementByPos = _this.setElementByPos.bind(_this); + return _this; + } + /** + * @description Growth the Deque. + * @private + */ + Deque.prototype.reAllocate = function () { + var newMap = []; + var addBucketNum = Math.max(this.bucketNum >> 1, 1); + for (var i = 0; i < addBucketNum; ++i) { + newMap[i] = new Array(this.bucketSize); + } + for (var i = this.first; i < this.bucketNum; ++i) { + newMap[newMap.length] = this.map[i]; + } + for (var i = 0; i < this.last; ++i) { + newMap[newMap.length] = this.map[i]; + } + newMap[newMap.length] = __spreadArray([], __read(this.map[this.last]), false); + this.first = addBucketNum; + this.last = newMap.length - 1; + for (var i = 0; i < addBucketNum; ++i) { + newMap[newMap.length] = new Array(this.bucketSize); + } + this.map = newMap; + this.bucketNum = newMap.length; + }; + /** + * @description Get the bucket position of the element and the pointer position by index. + * @param pos The element's index. + * @private + */ + Deque.prototype.getElementIndex = function (pos) { + var offset = this.curFirst + pos + 1; + var offsetRemainder = offset % this.bucketSize; + var curNodePointerIndex = offsetRemainder - 1; + var curNodeBucketIndex = this.first + (offset - offsetRemainder) / this.bucketSize; + if (offsetRemainder === 0) + curNodeBucketIndex -= 1; + curNodeBucketIndex %= this.bucketNum; + if (curNodePointerIndex < 0) + curNodePointerIndex += this.bucketSize; + return { curNodeBucketIndex: curNodeBucketIndex, curNodePointerIndex: curNodePointerIndex }; + }; + Deque.prototype.clear = function () { + this.map = [[]]; + this.bucketNum = 1; + this.first = this.last = this.length = 0; + this.curFirst = this.curLast = this.bucketSize >> 1; + }; + Deque.prototype.front = function () { + return this.map[this.first][this.curFirst]; + }; + Deque.prototype.back = function () { + return this.map[this.last][this.curLast]; + }; + Deque.prototype.begin = function () { + return new DequeIterator(0, this.size, this.getElementByPos, this.setElementByPos); + }; + Deque.prototype.end = function () { + return new DequeIterator(this.length, this.size, this.getElementByPos, this.setElementByPos); + }; + Deque.prototype.rBegin = function () { + return new DequeIterator(this.length - 1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE); + }; + Deque.prototype.rEnd = function () { + return new DequeIterator(-1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE); + }; + Deque.prototype.pushBack = function (element) { + if (this.length) { + if (this.curLast < this.bucketSize - 1) { + this.curLast += 1; + } + else if (this.last < this.bucketNum - 1) { + this.last += 1; + this.curLast = 0; + } + else { + this.last = 0; + this.curLast = 0; + } + if (this.last === this.first && + this.curLast === this.curFirst) + this.reAllocate(); + } + this.length += 1; + this.map[this.last][this.curLast] = element; + }; + Deque.prototype.popBack = function () { + if (!this.length) + return; + this.map[this.last][this.curLast] = undefined; + if (this.length !== 1) { + if (this.curLast > 0) { + this.curLast -= 1; + } + else if (this.last > 0) { + this.last -= 1; + this.curLast = this.bucketSize - 1; + } + else { + this.last = this.bucketNum - 1; + this.curLast = this.bucketSize - 1; + } + } + this.length -= 1; + }; + /** + * @description Push the element to the front. + * @param element The element you want to push. + */ + Deque.prototype.pushFront = function (element) { + if (this.length) { + if (this.curFirst > 0) { + this.curFirst -= 1; + } + else if (this.first > 0) { + this.first -= 1; + this.curFirst = this.bucketSize - 1; + } + else { + this.first = this.bucketNum - 1; + this.curFirst = this.bucketSize - 1; + } + if (this.first === this.last && + this.curFirst === this.curLast) + this.reAllocate(); + } + this.length += 1; + this.map[this.first][this.curFirst] = element; + }; + /** + * @description Remove the first element. + */ + Deque.prototype.popFront = function () { + if (!this.length) + return; + this.map[this.first][this.curFirst] = undefined; + if (this.length !== 1) { + if (this.curFirst < this.bucketSize - 1) { + this.curFirst += 1; + } + else if (this.first < this.bucketNum - 1) { + this.first += 1; + this.curFirst = 0; + } + else { + this.first = 0; + this.curFirst = 0; + } + } + this.length -= 1; + }; + Deque.prototype.forEach = function (callback) { + for (var i = 0; i < this.length; ++i) { + callback(this.getElementByPos(i), i); + } + }; + Deque.prototype.getElementByPos = function (pos) { + checkWithinAccessParams(pos, 0, this.length - 1); + var _a = this.getElementIndex(pos), curNodeBucketIndex = _a.curNodeBucketIndex, curNodePointerIndex = _a.curNodePointerIndex; + return this.map[curNodeBucketIndex][curNodePointerIndex]; + }; + Deque.prototype.setElementByPos = function (pos, element) { + checkWithinAccessParams(pos, 0, this.length - 1); + var _a = this.getElementIndex(pos), curNodeBucketIndex = _a.curNodeBucketIndex, curNodePointerIndex = _a.curNodePointerIndex; + this.map[curNodeBucketIndex][curNodePointerIndex] = element; + }; + Deque.prototype.insert = function (pos, element, num) { + if (num === void 0) { num = 1; } + checkWithinAccessParams(pos, 0, this.length); + if (pos === 0) { + while (num--) + this.pushFront(element); + } + else if (pos === this.length) { + while (num--) + this.pushBack(element); + } + else { + var arr = []; + for (var i = pos; i < this.length; ++i) { + arr.push(this.getElementByPos(i)); + } + this.cut(pos - 1); + for (var i = 0; i < num; ++i) + this.pushBack(element); + for (var i = 0; i < arr.length; ++i) + this.pushBack(arr[i]); + } + }; + /** + * @description Remove all elements after the specified position (excluding the specified position). + * @param pos The previous position of the first removed element. + * @example deque.cut(1); // Then deque's size will be 2. deque -> [0, 1] + */ + Deque.prototype.cut = function (pos) { + if (pos < 0) { + this.clear(); + return; + } + var _a = this.getElementIndex(pos), curNodeBucketIndex = _a.curNodeBucketIndex, curNodePointerIndex = _a.curNodePointerIndex; + this.last = curNodeBucketIndex; + this.curLast = curNodePointerIndex; + this.length = pos + 1; + }; + Deque.prototype.eraseElementByPos = function (pos) { + var _this = this; + checkWithinAccessParams(pos, 0, this.length - 1); + if (pos === 0) + this.popFront(); + else if (pos === this.length - 1) + this.popBack(); + else { + var arr = []; + for (var i = pos + 1; i < this.length; ++i) { + arr.push(this.getElementByPos(i)); + } + this.cut(pos); + this.popBack(); + arr.forEach(function (element) { return _this.pushBack(element); }); + } + }; + Deque.prototype.eraseElementByValue = function (value) { + if (!this.length) + return; + var arr = []; + for (var i = 0; i < this.length; ++i) { + var element = this.getElementByPos(i); + if (element !== value) + arr.push(element); + } + var _length = arr.length; + for (var i = 0; i < _length; ++i) + this.setElementByPos(i, arr[i]); + this.cut(_length - 1); + }; + Deque.prototype.eraseElementByIterator = function (iter) { + // @ts-ignore + var node = iter.node; + this.eraseElementByPos(node); + iter = iter.next(); + return iter; + }; + Deque.prototype.find = function (element) { + for (var i = 0; i < this.length; ++i) { + if (this.getElementByPos(i) === element) { + return new DequeIterator(i, this.size, this.getElementByPos, this.setElementByPos); + } + } + return this.end(); + }; + Deque.prototype.reverse = function () { + var l = 0; + var r = this.length - 1; + while (l < r) { + var tmp = this.getElementByPos(l); + this.setElementByPos(l, this.getElementByPos(r)); + this.setElementByPos(r, tmp); + l += 1; + r -= 1; + } + }; + Deque.prototype.unique = function () { + if (this.length <= 1) + return; + var index = 1; + var pre = this.getElementByPos(0); + for (var i = 1; i < this.length; ++i) { + var cur = this.getElementByPos(i); + if (cur !== pre) { + pre = cur; + this.setElementByPos(index++, cur); + } + } + while (this.length > index) + this.popBack(); + }; + Deque.prototype.sort = function (cmp) { + var arr = []; + for (var i = 0; i < this.length; ++i) { + arr.push(this.getElementByPos(i)); + } + arr.sort(cmp); + for (var i = 0; i < this.length; ++i) + this.setElementByPos(i, arr[i]); + }; + /** + * @description Remove as much useless space as possible. + */ + Deque.prototype.shrinkToFit = function () { + if (!this.length) + return; + var arr = []; + this.forEach(function (element) { return arr.push(element); }); + this.bucketNum = Math.max(Math.ceil(this.length / this.bucketSize), 1); + this.length = this.first = this.last = this.curFirst = this.curLast = 0; + this.map = []; + for (var i = 0; i < this.bucketNum; ++i) { + this.map.push(new Array(this.bucketSize)); + } + for (var i = 0; i < arr.length; ++i) + this.pushBack(arr[i]); + }; + Deque.prototype[Symbol.iterator] = function () { + return function () { + var i; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + i = 0; + _a.label = 1; + case 1: + if (!(i < this.length)) return [3 /*break*/, 4]; + return [4 /*yield*/, this.getElementByPos(i)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + ++i; + return [3 /*break*/, 1]; + case 4: return [2 /*return*/]; + } + }); + }.bind(this)(); + }; + return Deque; + }(SequentialContainer)); + + var Queue = /** @class */ (function (_super) { + __extends(Queue, _super); + function Queue(container) { + if (container === void 0) { container = []; } + var _this = _super.call(this) || this; + _this.queue = new Deque(container); + _this.length = _this.queue.size(); + return _this; + } + Queue.prototype.clear = function () { + this.queue.clear(); + this.length = 0; + }; + /** + * @description Inserts element to queue's end. + */ + Queue.prototype.push = function (element) { + this.queue.pushBack(element); + this.length += 1; + }; + /** + * @description Removes the first element. + */ + Queue.prototype.pop = function () { + this.queue.popFront(); + if (this.length) + this.length -= 1; + }; + /** + * @description Access the first element. + */ + Queue.prototype.front = function () { + return this.queue.front(); + }; + return Queue; + }(Base)); + + var PriorityQueue = /** @class */ (function (_super) { + __extends(PriorityQueue, _super); + /** + * @description PriorityQueue's constructor. + * @param container Initialize container, must have a forEach function. + * @param cmp Compare function. + * @param copy When the container is an array, you can choose to directly operate on the original object of + * the array or perform a shallow copy. The default is shallow copy. + */ + function PriorityQueue(container, cmp, copy) { + var _a; + if (container === void 0) { container = []; } + if (cmp === void 0) { cmp = function (x, y) { + if (x > y) + return -1; + if (x < y) + return 1; + return 0; + }; } + if (copy === void 0) { copy = true; } + var _this = _super.call(this) || this; + _this.cmp = cmp; + if (Array.isArray(container)) { + _this.priorityQueue = copy ? __spreadArray([], __read(container), false) : container; + } + else { + _this.priorityQueue = []; + container.forEach(function (element) { return _this.priorityQueue.push(element); }); + } + _this.length = _this.priorityQueue.length; + for (var parent_1 = (_this.length - 1) >> 1; parent_1 >= 0; --parent_1) { + var curParent = parent_1; + var curChild = (curParent << 1) | 1; + while (curChild < _this.length) { + var left = curChild; + var right = left + 1; + var minChild = left; + if (right < _this.length && + _this.cmp(_this.priorityQueue[left], _this.priorityQueue[right]) > 0) { + minChild = right; + } + if (_this.cmp(_this.priorityQueue[curParent], _this.priorityQueue[minChild]) <= 0) + break; + _a = __read([_this.priorityQueue[minChild], _this.priorityQueue[curParent]], 2), _this.priorityQueue[curParent] = _a[0], _this.priorityQueue[minChild] = _a[1]; + curParent = minChild; + curChild = (curParent << 1) | 1; + } + } + return _this; + } + /** + * @description Adjusting parent's children to suit the nature of the heap. + * @param parent Parent's index. + * @private + */ + PriorityQueue.prototype.adjust = function (parent) { + var _a, _b; + var left = (parent << 1) | 1; + var right = (parent << 1) + 2; + if (left < this.length && + this.cmp(this.priorityQueue[parent], this.priorityQueue[left]) > 0) { + _a = __read([this.priorityQueue[left], this.priorityQueue[parent]], 2), this.priorityQueue[parent] = _a[0], this.priorityQueue[left] = _a[1]; + } + if (right < this.length && + this.cmp(this.priorityQueue[parent], this.priorityQueue[right]) > 0) { + _b = __read([this.priorityQueue[right], this.priorityQueue[parent]], 2), this.priorityQueue[parent] = _b[0], this.priorityQueue[right] = _b[1]; + } + }; + PriorityQueue.prototype.clear = function () { + this.length = 0; + this.priorityQueue.length = 0; + }; + /** + * @description Push element into a container in order. + * @param element The element you want to push. + */ + PriorityQueue.prototype.push = function (element) { + this.priorityQueue.push(element); + this.length += 1; + if (this.length === 1) + return; + var curNode = this.length - 1; + while (curNode > 0) { + var parent_2 = (curNode - 1) >> 1; + if (this.cmp(this.priorityQueue[parent_2], element) <= 0) + break; + this.adjust(parent_2); + curNode = parent_2; + } + }; + /** + * @description Removes the top element. + */ + PriorityQueue.prototype.pop = function () { + if (!this.length) + return; + var last = this.priorityQueue[this.length - 1]; + this.length -= 1; + var parent = 0; + while (parent < this.length) { + var left = (parent << 1) | 1; + var right = (parent << 1) + 2; + if (left >= this.length) + break; + var minChild = left; + if (right < this.length && + this.cmp(this.priorityQueue[left], this.priorityQueue[right]) > 0) { + minChild = right; + } + if (this.cmp(this.priorityQueue[minChild], last) >= 0) + break; + this.priorityQueue[parent] = this.priorityQueue[minChild]; + parent = minChild; + } + this.priorityQueue[parent] = last; + this.priorityQueue.pop(); + }; + /** + * @description Accesses the top element. + */ + PriorityQueue.prototype.top = function () { + return this.priorityQueue[0]; + }; + return PriorityQueue; + }(Base)); + + var VectorIterator = /** @class */ (function (_super) { + __extends(VectorIterator, _super); + function VectorIterator() { + return _super !== null && _super.apply(this, arguments) || this; + } + VectorIterator.prototype.copy = function () { + return new VectorIterator(this.node, this.size, this.getElementByPos, this.setElementByPos, this.iteratorType); + }; + return VectorIterator; + }(RandomIterator)); + var Vector = /** @class */ (function (_super) { + __extends(Vector, _super); + /** + * @description Vector's constructor. + * @param container Initialize container, must have a forEach function. + * @param copy When the container is an array, you can choose to directly operate on the original object of + * the array or perform a shallow copy. The default is shallow copy. + */ + function Vector(container, copy) { + if (container === void 0) { container = []; } + if (copy === void 0) { copy = true; } + var _this = _super.call(this) || this; + if (Array.isArray(container)) { + _this.vector = copy ? __spreadArray([], __read(container), false) : container; + _this.length = container.length; + } + else { + _this.vector = []; + container.forEach(function (element) { return _this.pushBack(element); }); + } + _this.size = _this.size.bind(_this); + _this.getElementByPos = _this.getElementByPos.bind(_this); + _this.setElementByPos = _this.setElementByPos.bind(_this); + return _this; + } + Vector.prototype.clear = function () { + this.length = 0; + this.vector.length = 0; + }; + Vector.prototype.begin = function () { + return new VectorIterator(0, this.size, this.getElementByPos, this.setElementByPos); + }; + Vector.prototype.end = function () { + return new VectorIterator(this.length, this.size, this.getElementByPos, this.setElementByPos); + }; + Vector.prototype.rBegin = function () { + return new VectorIterator(this.length - 1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE); + }; + Vector.prototype.rEnd = function () { + return new VectorIterator(-1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE); + }; + Vector.prototype.front = function () { + return this.vector[0]; + }; + Vector.prototype.back = function () { + return this.vector[this.length - 1]; + }; + Vector.prototype.forEach = function (callback) { + for (var i = 0; i < this.length; ++i) { + callback(this.vector[i], i); + } + }; + Vector.prototype.getElementByPos = function (pos) { + checkWithinAccessParams(pos, 0, this.length - 1); + return this.vector[pos]; + }; + Vector.prototype.eraseElementByPos = function (pos) { + checkWithinAccessParams(pos, 0, this.length - 1); + this.vector.splice(pos, 1); + this.length -= 1; + }; + Vector.prototype.eraseElementByValue = function (value) { + var index = 0; + for (var i = 0; i < this.length; ++i) { + if (this.vector[i] !== value) { + this.vector[index++] = this.vector[i]; + } + } + this.length = this.vector.length = index; + }; + Vector.prototype.eraseElementByIterator = function (iter) { + // @ts-ignore + var node = iter.node; + iter = iter.next(); + this.eraseElementByPos(node); + return iter; + }; + Vector.prototype.pushBack = function (element) { + this.vector.push(element); + this.length += 1; + }; + Vector.prototype.popBack = function () { + if (!this.length) + return; + this.vector.pop(); + this.length -= 1; + }; + Vector.prototype.setElementByPos = function (pos, element) { + checkWithinAccessParams(pos, 0, this.length - 1); + this.vector[pos] = element; + }; + Vector.prototype.insert = function (pos, element, num) { + var _a; + if (num === void 0) { num = 1; } + checkWithinAccessParams(pos, 0, this.length); + (_a = this.vector).splice.apply(_a, __spreadArray([pos, 0], __read(new Array(num).fill(element)), false)); + this.length += num; + }; + Vector.prototype.find = function (element) { + for (var i = 0; i < this.length; ++i) { + if (this.vector[i] === element) { + return new VectorIterator(i, this.size, this.getElementByPos, this.getElementByPos); + } + } + return this.end(); + }; + Vector.prototype.reverse = function () { + this.vector.reverse(); + }; + Vector.prototype.unique = function () { + var index = 1; + for (var i = 1; i < this.length; ++i) { + if (this.vector[i] !== this.vector[i - 1]) { + this.vector[index++] = this.vector[i]; + } + } + this.length = this.vector.length = index; + }; + Vector.prototype.sort = function (cmp) { + this.vector.sort(cmp); + }; + Vector.prototype[Symbol.iterator] = function () { + return function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this.vector)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }.bind(this)(); + }; + return Vector; + }(SequentialContainer)); + + var LinkNode = /** @class */ (function () { + function LinkNode(element) { + this.value = undefined; + this.pre = undefined; + this.next = undefined; + this.value = element; + } + return LinkNode; + }()); + var LinkListIterator = /** @class */ (function (_super) { + __extends(LinkListIterator, _super); + function LinkListIterator(node, header, iteratorType) { + var _this = _super.call(this, iteratorType) || this; + _this.node = node; + _this.header = header; + if (_this.iteratorType === ContainerIterator.NORMAL) { + _this.pre = function () { + if (this.node.pre === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre; + return this; + }; + _this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next; + return this; + }; + } + else { + _this.pre = function () { + if (this.node.next === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next; + return this; + }; + _this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre; + return this; + }; + } + return _this; + } + Object.defineProperty(LinkListIterator.prototype, "pointer", { + get: function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + return this.node.value; + }, + set: function (newValue) { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node.value = newValue; + }, + enumerable: false, + configurable: true + }); + LinkListIterator.prototype.equals = function (obj) { + return this.node === obj.node; + }; + LinkListIterator.prototype.copy = function () { + return new LinkListIterator(this.node, this.header, this.iteratorType); + }; + return LinkListIterator; + }(ContainerIterator)); + var LinkList = /** @class */ (function (_super) { + __extends(LinkList, _super); + function LinkList(container) { + if (container === void 0) { container = []; } + var _this = _super.call(this) || this; + _this.header = new LinkNode(); + _this.head = undefined; + _this.tail = undefined; + container.forEach(function (element) { return _this.pushBack(element); }); + return _this; + } + LinkList.prototype.clear = function () { + this.length = 0; + this.head = this.tail = undefined; + this.header.pre = this.header.next = undefined; + }; + LinkList.prototype.begin = function () { + return new LinkListIterator(this.head || this.header, this.header); + }; + LinkList.prototype.end = function () { + return new LinkListIterator(this.header, this.header); + }; + LinkList.prototype.rBegin = function () { + return new LinkListIterator(this.tail || this.header, this.header, ContainerIterator.REVERSE); + }; + LinkList.prototype.rEnd = function () { + return new LinkListIterator(this.header, this.header, ContainerIterator.REVERSE); + }; + LinkList.prototype.front = function () { + return this.head ? this.head.value : undefined; + }; + LinkList.prototype.back = function () { + return this.tail ? this.tail.value : undefined; + }; + LinkList.prototype.forEach = function (callback) { + if (!this.length) + return; + var curNode = this.head; + var index = 0; + while (curNode !== this.header) { + callback(curNode.value, index++); + curNode = curNode.next; + } + }; + LinkList.prototype.getElementByPos = function (pos) { + checkWithinAccessParams(pos, 0, this.length - 1); + var curNode = this.head; + while (pos--) { + curNode = curNode.next; + } + return curNode.value; + }; + LinkList.prototype.eraseElementByPos = function (pos) { + checkWithinAccessParams(pos, 0, this.length - 1); + if (pos === 0) + this.popFront(); + else if (pos === this.length - 1) + this.popBack(); + else { + var curNode = this.head; + while (pos--) { + curNode = curNode.next; + } + curNode = curNode; + var pre = curNode.pre; + var next = curNode.next; + next.pre = pre; + pre.next = next; + this.length -= 1; + } + }; + LinkList.prototype.eraseElementByValue = function (value) { + while (this.head && this.head.value === value) + this.popFront(); + while (this.tail && this.tail.value === value) + this.popBack(); + if (!this.head) + return; + var curNode = this.head; + while (curNode !== this.header) { + if (curNode.value === value) { + var pre = curNode.pre; + var next = curNode.next; + if (next) + next.pre = pre; + if (pre) + pre.next = next; + this.length -= 1; + } + curNode = curNode.next; + } + }; + LinkList.prototype.eraseElementByIterator = function (iter) { + // @ts-ignore + var node = iter.node; + if (node === this.header) { + throw new RangeError('Invalid iterator'); + } + iter = iter.next(); + if (this.head === node) + this.popFront(); + else if (this.tail === node) + this.popBack(); + else { + var pre = node.pre; + var next = node.next; + if (next) + next.pre = pre; + if (pre) + pre.next = next; + this.length -= 1; + } + return iter; + }; + LinkList.prototype.pushBack = function (element) { + this.length += 1; + var newTail = new LinkNode(element); + if (!this.tail) { + this.head = this.tail = newTail; + this.header.next = this.head; + this.head.pre = this.header; + } + else { + this.tail.next = newTail; + newTail.pre = this.tail; + this.tail = newTail; + } + this.tail.next = this.header; + this.header.pre = this.tail; + }; + LinkList.prototype.popBack = function () { + if (!this.tail) + return; + this.length -= 1; + if (this.head === this.tail) { + this.head = this.tail = undefined; + this.header.next = undefined; + } + else { + this.tail = this.tail.pre; + if (this.tail) + this.tail.next = undefined; + } + this.header.pre = this.tail; + if (this.tail) + this.tail.next = this.header; + }; + LinkList.prototype.setElementByPos = function (pos, element) { + checkWithinAccessParams(pos, 0, this.length - 1); + var curNode = this.head; + while (pos--) { + curNode = curNode.next; + } + curNode.value = element; + }; + LinkList.prototype.insert = function (pos, element, num) { + if (num === void 0) { num = 1; } + checkWithinAccessParams(pos, 0, this.length); + if (num <= 0) + return; + if (pos === 0) { + while (num--) + this.pushFront(element); + } + else if (pos === this.length) { + while (num--) + this.pushBack(element); + } + else { + var curNode = this.head; + for (var i = 1; i < pos; ++i) { + curNode = curNode.next; + } + var next = curNode.next; + this.length += num; + while (num--) { + curNode.next = new LinkNode(element); + curNode.next.pre = curNode; + curNode = curNode.next; + } + curNode.next = next; + if (next) + next.pre = curNode; + } + }; + LinkList.prototype.find = function (element) { + if (!this.head) + return this.end(); + var curNode = this.head; + while (curNode !== this.header) { + if (curNode.value === element) { + return new LinkListIterator(curNode, this.header); + } + curNode = curNode.next; + } + return this.end(); + }; + LinkList.prototype.reverse = function () { + if (this.length <= 1) + return; + var pHead = this.head; + var pTail = this.tail; + var cnt = 0; + while ((cnt << 1) < this.length) { + var tmp = pHead.value; + pHead.value = pTail.value; + pTail.value = tmp; + pHead = pHead.next; + pTail = pTail.pre; + cnt += 1; + } + }; + LinkList.prototype.unique = function () { + if (this.length <= 1) + return; + var curNode = this.head; + while (curNode !== this.header) { + var tmpNode = curNode; + while (tmpNode.next && tmpNode.value === tmpNode.next.value) { + tmpNode = tmpNode.next; + this.length -= 1; + } + curNode.next = tmpNode.next; + if (curNode.next) + curNode.next.pre = curNode; + curNode = curNode.next; + } + }; + LinkList.prototype.sort = function (cmp) { + if (this.length <= 1) + return; + var arr = []; + this.forEach(function (element) { return arr.push(element); }); + arr.sort(cmp); + var curNode = this.head; + arr.forEach(function (element) { + curNode.value = element; + curNode = curNode.next; + }); + }; + /** + * @description Push an element to the front. + * @param element The element you want to push. + */ + LinkList.prototype.pushFront = function (element) { + this.length += 1; + var newHead = new LinkNode(element); + if (!this.head) { + this.head = this.tail = newHead; + this.tail.next = this.header; + this.header.pre = this.tail; + } + else { + newHead.next = this.head; + this.head.pre = newHead; + this.head = newHead; + } + this.header.next = this.head; + this.head.pre = this.header; + }; + /** + * @description Removes the first element. + */ + LinkList.prototype.popFront = function () { + if (!this.head) + return; + this.length -= 1; + if (this.head === this.tail) { + this.head = this.tail = undefined; + this.header.pre = this.tail; + } + else { + this.head = this.head.next; + if (this.head) + this.head.pre = this.header; + } + this.header.next = this.head; + }; + /** + * @description Merges two sorted lists. + * @param list The other list you want to merge (must be sorted). + */ + LinkList.prototype.merge = function (list) { + var _this = this; + if (!this.head) { + list.forEach(function (element) { return _this.pushBack(element); }); + return; + } + var curNode = this.head; + list.forEach(function (element) { + while (curNode && + curNode !== _this.header && + curNode.value <= element) { + curNode = curNode.next; + } + if (curNode === _this.header) { + _this.pushBack(element); + curNode = _this.tail; + } + else if (curNode === _this.head) { + _this.pushFront(element); + curNode = _this.head; + } + else { + _this.length += 1; + var pre = curNode.pre; + pre.next = new LinkNode(element); + pre.next.pre = pre; + pre.next.next = curNode; + curNode.pre = pre.next; + } + }); + }; + LinkList.prototype[Symbol.iterator] = function () { + return function () { + var curNode; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!this.head) + return [2 /*return*/]; + curNode = this.head; + _a.label = 1; + case 1: + if (!(curNode !== this.header)) return [3 /*break*/, 3]; + return [4 /*yield*/, curNode.value]; + case 2: + _a.sent(); + curNode = curNode.next; + return [3 /*break*/, 1]; + case 3: return [2 /*return*/]; + } + }); + }.bind(this)(); + }; + return LinkList; + }(SequentialContainer)); + + var TreeNode = /** @class */ (function () { + function TreeNode(key, value) { + this.color = true; + this.key = undefined; + this.value = undefined; + this.left = undefined; + this.right = undefined; + this.parent = undefined; + this.key = key; + this.value = value; + } + /** + * @description Get the pre node. + * @return TreeNode about the pre node. + */ + TreeNode.prototype.pre = function () { + var preNode = this; + if (preNode.color === TreeNode.RED && + preNode.parent.parent === preNode) { + preNode = preNode.right; + } + else if (preNode.left) { + preNode = preNode.left; + while (preNode.right) { + preNode = preNode.right; + } + } + else { + var pre = preNode.parent; + while (pre.left === preNode) { + preNode = pre; + pre = preNode.parent; + } + preNode = pre; + } + return preNode; + }; + /** + * @description Get the next node. + * @return TreeNode about the next node. + */ + TreeNode.prototype.next = function () { + var nextNode = this; + if (nextNode.right) { + nextNode = nextNode.right; + while (nextNode.left) { + nextNode = nextNode.left; + } + } + else { + var pre = nextNode.parent; + while (pre.right === nextNode) { + nextNode = pre; + pre = nextNode.parent; + } + if (nextNode.right !== pre) { + nextNode = pre; + } + } + return nextNode; + }; + /** + * @description Rotate left. + * @return TreeNode about moved to original position after rotation. + */ + TreeNode.prototype.rotateLeft = function () { + var PP = this.parent; + var V = this.right; + var R = V.left; + if (PP.parent === this) + PP.parent = V; + else if (PP.left === this) + PP.left = V; + else + PP.right = V; + V.parent = PP; + V.left = this; + this.parent = V; + this.right = R; + if (R) + R.parent = this; + return V; + }; + /** + * @description Rotate left. + * @return TreeNode about moved to original position after rotation. + */ + TreeNode.prototype.rotateRight = function () { + var PP = this.parent; + var F = this.left; + var K = F.right; + if (PP.parent === this) + PP.parent = F; + else if (PP.left === this) + PP.left = F; + else + PP.right = F; + F.parent = PP; + F.right = this; + this.parent = F; + this.left = K; + if (K) + K.parent = this; + return F; + }; + /** + * @description Remove this. + */ + TreeNode.prototype.remove = function () { + var parent = this.parent; + if (this === parent.left) { + parent.left = undefined; + } + else + parent.right = undefined; + }; + TreeNode.RED = true; + TreeNode.BLACK = false; + return TreeNode; + }()); + + var TreeContainer = /** @class */ (function (_super) { + __extends(TreeContainer, _super); + function TreeContainer(cmp) { + if (cmp === void 0) { cmp = function (x, y) { + if (x < y) + return -1; + if (x > y) + return 1; + return 0; + }; } + var _this = _super.call(this) || this; + _this.root = undefined; + _this.header = new TreeNode(); + /** + * @description InOrder traversal the tree. + * @protected + */ + _this.inOrderTraversal = function (curNode, callback) { + if (curNode === undefined) + return false; + var ifReturn = _this.inOrderTraversal(curNode.left, callback); + if (ifReturn) + return true; + if (callback(curNode)) + return true; + return _this.inOrderTraversal(curNode.right, callback); + }; + _this.cmp = cmp; + return _this; + } + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is greater than or equals to the given key. + * @protected + */ + TreeContainer.prototype._lowerBound = function (curNode, key) { + var resNode; + while (curNode) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + curNode = curNode.right; + } + else if (cmpResult > 0) { + resNode = curNode; + curNode = curNode.left; + } + else + return curNode; + } + return resNode === undefined ? this.header : resNode; + }; + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is greater than the given key. + * @protected + */ + TreeContainer.prototype._upperBound = function (curNode, key) { + var resNode; + while (curNode) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult <= 0) { + curNode = curNode.right; + } + else if (cmpResult > 0) { + resNode = curNode; + curNode = curNode.left; + } + } + return resNode === undefined ? this.header : resNode; + }; + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is less than or equals to the given key. + * @protected + */ + TreeContainer.prototype._reverseLowerBound = function (curNode, key) { + var resNode; + while (curNode) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + resNode = curNode; + curNode = curNode.right; + } + else if (cmpResult > 0) { + curNode = curNode.left; + } + else + return curNode; + } + return resNode === undefined ? this.header : resNode; + }; + /** + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @return TreeNode which key is less than the given key. + * @protected + */ + TreeContainer.prototype._reverseUpperBound = function (curNode, key) { + var resNode; + while (curNode) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + resNode = curNode; + curNode = curNode.right; + } + else if (cmpResult >= 0) { + curNode = curNode.left; + } + } + return resNode === undefined ? this.header : resNode; + }; + /** + * @description Make self balance after erase a node. + * @param curNode The node want to remove. + * @protected + */ + TreeContainer.prototype.eraseNodeSelfBalance = function (curNode) { + while (true) { + var parentNode = curNode.parent; + if (parentNode === this.header) + return; + if (curNode.color === TreeNode.RED) { + curNode.color = TreeNode.BLACK; + return; + } + if (curNode === parentNode.left) { + var brother = parentNode.right; + if (brother.color === TreeNode.RED) { + brother.color = TreeNode.BLACK; + parentNode.color = TreeNode.RED; + if (parentNode === this.root) { + this.root = parentNode.rotateLeft(); + } + else + parentNode.rotateLeft(); + } + else if (brother.color === TreeNode.BLACK) { + if (brother.right && brother.right.color === TreeNode.RED) { + brother.color = parentNode.color; + parentNode.color = TreeNode.BLACK; + brother.right.color = TreeNode.BLACK; + if (parentNode === this.root) { + this.root = parentNode.rotateLeft(); + } + else + parentNode.rotateLeft(); + return; + } + else if (brother.left && brother.left.color === TreeNode.RED) { + brother.color = TreeNode.RED; + brother.left.color = TreeNode.BLACK; + brother.rotateRight(); + } + else { + brother.color = TreeNode.RED; + curNode = parentNode; + } + } + } + else { + var brother = parentNode.left; + if (brother.color === TreeNode.RED) { + brother.color = TreeNode.BLACK; + parentNode.color = TreeNode.RED; + if (parentNode === this.root) { + this.root = parentNode.rotateRight(); + } + else + parentNode.rotateRight(); + } + else { + if (brother.left && brother.left.color === TreeNode.RED) { + brother.color = parentNode.color; + parentNode.color = TreeNode.BLACK; + brother.left.color = TreeNode.BLACK; + if (parentNode === this.root) { + this.root = parentNode.rotateRight(); + } + else + parentNode.rotateRight(); + return; + } + else if (brother.right && brother.right.color === TreeNode.RED) { + brother.color = TreeNode.RED; + brother.right.color = TreeNode.BLACK; + brother.rotateLeft(); + } + else { + brother.color = TreeNode.RED; + curNode = parentNode; + } + } + } + } + }; + /** + * @description Remove a node. + * @param curNode The node you want to remove. + * @protected + */ + TreeContainer.prototype.eraseNode = function (curNode) { + var _a, _b; + if (this.length === 1) { + this.clear(); + return; + } + var swapNode = curNode; + while (swapNode.left || swapNode.right) { + if (swapNode.right) { + swapNode = swapNode.right; + while (swapNode.left) + swapNode = swapNode.left; + } + else if (swapNode.left) { + swapNode = swapNode.left; + } + _a = __read([swapNode.key, curNode.key], 2), curNode.key = _a[0], swapNode.key = _a[1]; + _b = __read([swapNode.value, curNode.value], 2), curNode.value = _b[0], swapNode.value = _b[1]; + curNode = swapNode; + } + if (this.header.left === swapNode) { + this.header.left = swapNode.parent; + } + else if (this.header.right === swapNode) { + this.header.right = swapNode.parent; + } + this.eraseNodeSelfBalance(swapNode); + swapNode.remove(); + this.length -= 1; + this.root.color = TreeNode.BLACK; + }; + /** + * @description Make self balance after insert a node. + * @param curNode The node want to insert. + * @protected + */ + TreeContainer.prototype.insertNodeSelfBalance = function (curNode) { + while (true) { + var parentNode = curNode.parent; + if (parentNode.color === TreeNode.BLACK) + return; + var grandParent = parentNode.parent; + if (parentNode === grandParent.left) { + var uncle = grandParent.right; + if (uncle && uncle.color === TreeNode.RED) { + uncle.color = parentNode.color = TreeNode.BLACK; + if (grandParent === this.root) + return; + grandParent.color = TreeNode.RED; + curNode = grandParent; + continue; + } + else if (curNode === parentNode.right) { + curNode.color = TreeNode.BLACK; + if (curNode.left) + curNode.left.parent = parentNode; + if (curNode.right) + curNode.right.parent = grandParent; + parentNode.right = curNode.left; + grandParent.left = curNode.right; + curNode.left = parentNode; + curNode.right = grandParent; + if (grandParent === this.root) { + this.root = curNode; + this.header.parent = curNode; + } + else { + var GP = grandParent.parent; + if (GP.left === grandParent) { + GP.left = curNode; + } + else + GP.right = curNode; + } + curNode.parent = grandParent.parent; + parentNode.parent = curNode; + grandParent.parent = curNode; + } + else { + parentNode.color = TreeNode.BLACK; + if (grandParent === this.root) { + this.root = grandParent.rotateRight(); + } + else + grandParent.rotateRight(); + } + grandParent.color = TreeNode.RED; + } + else { + var uncle = grandParent.left; + if (uncle && uncle.color === TreeNode.RED) { + uncle.color = parentNode.color = TreeNode.BLACK; + if (grandParent === this.root) + return; + grandParent.color = TreeNode.RED; + curNode = grandParent; + continue; + } + else if (curNode === parentNode.left) { + curNode.color = TreeNode.BLACK; + if (curNode.left) + curNode.left.parent = grandParent; + if (curNode.right) + curNode.right.parent = parentNode; + grandParent.right = curNode.left; + parentNode.left = curNode.right; + curNode.left = grandParent; + curNode.right = parentNode; + if (grandParent === this.root) { + this.root = curNode; + this.header.parent = curNode; + } + else { + var GP = grandParent.parent; + if (GP.left === grandParent) { + GP.left = curNode; + } + else + GP.right = curNode; + } + curNode.parent = grandParent.parent; + parentNode.parent = curNode; + grandParent.parent = curNode; + } + else { + parentNode.color = TreeNode.BLACK; + if (grandParent === this.root) { + this.root = grandParent.rotateLeft(); + } + else + grandParent.rotateLeft(); + } + grandParent.color = TreeNode.RED; + } + return; + } + }; + /** + * @description Find node which key is equals to the given key. + * @param curNode The starting node of the search. + * @param key The key you want to search. + * @protected + */ + TreeContainer.prototype.findElementNode = function (curNode, key) { + while (curNode) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult < 0) { + curNode = curNode.right; + } + else if (cmpResult > 0) { + curNode = curNode.left; + } + else + return curNode; + } + return curNode; + }; + /** + * @description Insert a key-value pair or set value by the given key. + * @param key The key want to insert. + * @param value The value want to set. + * @param hint You can give an iterator hint to improve insertion efficiency. + * @protected + */ + TreeContainer.prototype.set = function (key, value, hint) { + if (this.root === undefined) { + this.length += 1; + this.root = new TreeNode(key, value); + this.root.color = TreeNode.BLACK; + this.root.parent = this.header; + this.header.parent = this.root; + this.header.left = this.root; + this.header.right = this.root; + return; + } + var curNode; + var minNode = this.header.left; + var compareToMin = this.cmp(minNode.key, key); + if (compareToMin === 0) { + minNode.value = value; + return; + } + else if (compareToMin > 0) { + minNode.left = new TreeNode(key, value); + minNode.left.parent = minNode; + curNode = minNode.left; + this.header.left = curNode; + } + else { + var maxNode = this.header.right; + var compareToMax = this.cmp(maxNode.key, key); + if (compareToMax === 0) { + maxNode.value = value; + return; + } + else if (compareToMax < 0) { + maxNode.right = new TreeNode(key, value); + maxNode.right.parent = maxNode; + curNode = maxNode.right; + this.header.right = curNode; + } + else { + if (hint !== undefined) { + // @ts-ignore + var iterNode = hint.node; + if (iterNode !== this.header) { + var iterCmpRes = this.cmp(iterNode.key, key); + if (iterCmpRes === 0) { + iterNode.value = value; + return; + } + else if (iterCmpRes > 0) { + var preNode = iterNode.pre(); + var preCmpRes = this.cmp(preNode.key, key); + if (preCmpRes === 0) { + preNode.value = value; + return; + } + else if (preCmpRes < 0) { + curNode = new TreeNode(key, value); + if (preNode.right === undefined) { + preNode.right = curNode; + curNode.parent = preNode; + } + else { + iterNode.left = curNode; + curNode.parent = iterNode; + } + } + } + } + } + if (curNode === undefined) { + curNode = this.root; + while (true) { + var cmpResult = this.cmp(curNode.key, key); + if (cmpResult > 0) { + if (curNode.left === undefined) { + curNode.left = new TreeNode(key, value); + curNode.left.parent = curNode; + curNode = curNode.left; + break; + } + curNode = curNode.left; + } + else if (cmpResult < 0) { + if (curNode.right === undefined) { + curNode.right = new TreeNode(key, value); + curNode.right.parent = curNode; + curNode = curNode.right; + break; + } + curNode = curNode.right; + } + else { + curNode.value = value; + return; + } + } + } + } + } + this.length += 1; + this.insertNodeSelfBalance(curNode); + }; + TreeContainer.prototype.clear = function () { + this.length = 0; + this.root = undefined; + this.header.parent = undefined; + this.header.left = this.header.right = undefined; + }; + /** + * @description Update node's key by iterator. + * @param iter The iterator you want to change. + * @param key The key you want to update. + * @return Boolean about if the modification is successful. + */ + TreeContainer.prototype.updateKeyByIterator = function (iter, key) { + // @ts-ignore + var node = iter.node; + if (node === this.header) { + throw new TypeError('Invalid iterator!'); + } + if (this.length === 1) { + node.key = key; + return true; + } + if (node === this.header.left) { + if (this.cmp(node.next().key, key) > 0) { + node.key = key; + return true; + } + return false; + } + if (node === this.header.right) { + if (this.cmp(node.pre().key, key) < 0) { + node.key = key; + return true; + } + return false; + } + var preKey = node.pre().key; + if (this.cmp(preKey, key) >= 0) + return false; + var nextKey = node.next().key; + if (this.cmp(nextKey, key) <= 0) + return false; + node.key = key; + return true; + }; + TreeContainer.prototype.eraseElementByPos = function (pos) { + var _this = this; + checkWithinAccessParams(pos, 0, this.length - 1); + var index = 0; + this.inOrderTraversal(this.root, function (curNode) { + if (pos === index) { + _this.eraseNode(curNode); + return true; + } + index += 1; + return false; + }); + }; + /** + * @description Remove the element of the specified key. + * @param key The key you want to remove. + */ + TreeContainer.prototype.eraseElementByKey = function (key) { + if (!this.length) + return; + var curNode = this.findElementNode(this.root, key); + if (curNode === undefined) + return; + this.eraseNode(curNode); + }; + TreeContainer.prototype.eraseElementByIterator = function (iter) { + // @ts-ignore + var node = iter.node; + if (node === this.header) { + throw new RangeError('Invalid iterator'); + } + if (node.right === undefined) { + iter = iter.next(); + } + this.eraseNode(node); + return iter; + }; + /** + * @description Get the height of the tree. + * @return Number about the height of the RB-tree. + */ + TreeContainer.prototype.getHeight = function () { + if (!this.length) + return 0; + var traversal = function (curNode) { + if (!curNode) + return 0; + return Math.max(traversal(curNode.left), traversal(curNode.right)) + 1; + }; + return traversal(this.root); + }; + return TreeContainer; + }(Container)); + + var TreeIterator = /** @class */ (function (_super) { + __extends(TreeIterator, _super); + function TreeIterator(node, header, iteratorType) { + var _this = _super.call(this, iteratorType) || this; + _this.node = node; + _this.header = header; + if (_this.iteratorType === ContainerIterator.NORMAL) { + _this.pre = function () { + if (this.node === this.header.left) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre(); + return this; + }; + _this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next(); + return this; + }; + } + else { + _this.pre = function () { + if (this.node === this.header.right) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.next(); + return this; + }; + _this.next = function () { + if (this.node === this.header) { + throw new RangeError('LinkList iterator access denied!'); + } + this.node = this.node.pre(); + return this; + }; + } + return _this; + } + TreeIterator.prototype.equals = function (obj) { + return this.node === obj.node; + }; + return TreeIterator; + }(ContainerIterator)); + + var OrderedSetIterator = /** @class */ (function (_super) { + __extends(OrderedSetIterator, _super); + function OrderedSetIterator() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(OrderedSetIterator.prototype, "pointer", { + get: function () { + if (this.node === this.header) { + throw new RangeError('OrderedSet iterator access denied!'); + } + return this.node.key; + }, + enumerable: false, + configurable: true + }); + OrderedSetIterator.prototype.copy = function () { + return new OrderedSetIterator(this.node, this.header, this.iteratorType); + }; + return OrderedSetIterator; + }(TreeIterator)); + var OrderedSet = /** @class */ (function (_super) { + __extends(OrderedSet, _super); + function OrderedSet(container, cmp) { + if (container === void 0) { container = []; } + var _this = _super.call(this, cmp) || this; + _this.iterationFunc = function (curNode) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (curNode === undefined) + return [2 /*return*/]; + return [5 /*yield**/, __values(this.iterationFunc(curNode.left))]; + case 1: + _a.sent(); + return [4 /*yield*/, curNode.key]; + case 2: + _a.sent(); + return [5 /*yield**/, __values(this.iterationFunc(curNode.right))]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + container.forEach(function (element) { return _this.insert(element); }); + _this.iterationFunc = _this.iterationFunc.bind(_this); + return _this; + } + OrderedSet.prototype.begin = function () { + return new OrderedSetIterator(this.header.left || this.header, this.header); + }; + OrderedSet.prototype.end = function () { + return new OrderedSetIterator(this.header, this.header); + }; + OrderedSet.prototype.rBegin = function () { + return new OrderedSetIterator(this.header.right || this.header, this.header, ContainerIterator.REVERSE); + }; + OrderedSet.prototype.rEnd = function () { + return new OrderedSetIterator(this.header, this.header, ContainerIterator.REVERSE); + }; + OrderedSet.prototype.front = function () { + return this.header.left ? this.header.left.key : undefined; + }; + OrderedSet.prototype.back = function () { + return this.header.right ? this.header.right.key : undefined; + }; + OrderedSet.prototype.forEach = function (callback) { + var e_1, _a; + var index = 0; + try { + for (var _b = __values(this), _c = _b.next(); !_c.done; _c = _b.next()) { + var element = _c.value; + callback(element, index++); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + }; + OrderedSet.prototype.getElementByPos = function (pos) { + var e_2, _a; + checkWithinAccessParams(pos, 0, this.length - 1); + var res; + var index = 0; + try { + for (var _b = __values(this), _c = _b.next(); !_c.done; _c = _b.next()) { + var element = _c.value; + if (index === pos) { + res = element; + } + index += 1; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_2) throw e_2.error; } + } + return res; + }; + /** + * @description Insert element to set. + * @param key The key want to insert. + * @param hint You can give an iterator hint to improve insertion efficiency. + */ + OrderedSet.prototype.insert = function (key, hint) { + this.set(key, undefined, hint); + }; + OrderedSet.prototype.find = function (element) { + var curNode = this.findElementNode(this.root, element); + if (curNode !== undefined) { + return new OrderedSetIterator(curNode, this.header); + } + return this.end(); + }; + OrderedSet.prototype.lowerBound = function (key) { + var resNode = this._lowerBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + }; + OrderedSet.prototype.upperBound = function (key) { + var resNode = this._upperBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + }; + OrderedSet.prototype.reverseLowerBound = function (key) { + var resNode = this._reverseLowerBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + }; + OrderedSet.prototype.reverseUpperBound = function (key) { + var resNode = this._reverseUpperBound(this.root, key); + return new OrderedSetIterator(resNode, this.header); + }; + OrderedSet.prototype.union = function (other) { + var _this = this; + other.forEach(function (element) { return _this.insert(element); }); + }; + OrderedSet.prototype[Symbol.iterator] = function () { + return this.iterationFunc(this.root); + }; + return OrderedSet; + }(TreeContainer)); + + var OrderedMapIterator = /** @class */ (function (_super) { + __extends(OrderedMapIterator, _super); + function OrderedMapIterator() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(OrderedMapIterator.prototype, "pointer", { + get: function () { + var _this = this; + if (this.node === this.header) { + throw new RangeError('OrderedMap iterator access denied'); + } + return new Proxy([], { + get: function (_, props) { + if (props === '0') + return _this.node.key; + else if (props === '1') + return _this.node.value; + }, + set: function (_, props, newValue) { + if (props !== '1') { + throw new TypeError('props must be 1'); + } + _this.node.value = newValue; + return true; + } + }); + }, + enumerable: false, + configurable: true + }); + OrderedMapIterator.prototype.copy = function () { + return new OrderedMapIterator(this.node, this.header, this.iteratorType); + }; + return OrderedMapIterator; + }(TreeIterator)); + var OrderedMap = /** @class */ (function (_super) { + __extends(OrderedMap, _super); + function OrderedMap(container, cmp) { + if (container === void 0) { container = []; } + var _this = _super.call(this, cmp) || this; + _this.iterationFunc = function (curNode) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (curNode === undefined) + return [2 /*return*/]; + return [5 /*yield**/, __values(this.iterationFunc(curNode.left))]; + case 1: + _a.sent(); + return [4 /*yield*/, [curNode.key, curNode.value]]; + case 2: + _a.sent(); + return [5 /*yield**/, __values(this.iterationFunc(curNode.right))]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + _this.iterationFunc = _this.iterationFunc.bind(_this); + container.forEach(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + return _this.setElement(key, value); + }); + return _this; + } + OrderedMap.prototype.begin = function () { + return new OrderedMapIterator(this.header.left || this.header, this.header); + }; + OrderedMap.prototype.end = function () { + return new OrderedMapIterator(this.header, this.header); + }; + OrderedMap.prototype.rBegin = function () { + return new OrderedMapIterator(this.header.right || this.header, this.header, ContainerIterator.REVERSE); + }; + OrderedMap.prototype.rEnd = function () { + return new OrderedMapIterator(this.header, this.header, ContainerIterator.REVERSE); + }; + OrderedMap.prototype.front = function () { + if (!this.length) + return undefined; + var minNode = this.header.left; + return [minNode.key, minNode.value]; + }; + OrderedMap.prototype.back = function () { + if (!this.length) + return undefined; + var maxNode = this.header.right; + return [maxNode.key, maxNode.value]; + }; + OrderedMap.prototype.forEach = function (callback) { + var e_1, _a; + var index = 0; + try { + for (var _b = __values(this), _c = _b.next(); !_c.done; _c = _b.next()) { + var pair = _c.value; + callback(pair, index++); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + }; + OrderedMap.prototype.lowerBound = function (key) { + var resNode = this._lowerBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + }; + OrderedMap.prototype.upperBound = function (key) { + var resNode = this._upperBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + }; + OrderedMap.prototype.reverseLowerBound = function (key) { + var resNode = this._reverseLowerBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + }; + OrderedMap.prototype.reverseUpperBound = function (key) { + var resNode = this._reverseUpperBound(this.root, key); + return new OrderedMapIterator(resNode, this.header); + }; + /** + * @description Insert a key-value pair or set value by the given key. + * @param key The key want to insert. + * @param value The value want to set. + * @param hint You can give an iterator hint to improve insertion efficiency. + */ + OrderedMap.prototype.setElement = function (key, value, hint) { + this.set(key, value, hint); + }; + OrderedMap.prototype.find = function (key) { + var curNode = this.findElementNode(this.root, key); + if (curNode !== undefined) { + return new OrderedMapIterator(curNode, this.header); + } + return this.end(); + }; + /** + * @description Get the value of the element of the specified key. + */ + OrderedMap.prototype.getElementByKey = function (key) { + var curNode = this.findElementNode(this.root, key); + return curNode ? curNode.value : undefined; + }; + OrderedMap.prototype.getElementByPos = function (pos) { + var e_2, _a; + checkWithinAccessParams(pos, 0, this.length - 1); + var res; + var index = 0; + try { + for (var _b = __values(this), _c = _b.next(); !_c.done; _c = _b.next()) { + var pair = _c.value; + if (index === pos) { + res = pair; + break; + } + index += 1; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_2) throw e_2.error; } + } + return res; + }; + OrderedMap.prototype.union = function (other) { + var _this = this; + other.forEach(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + return _this.setElement(key, value); + }); + }; + OrderedMap.prototype[Symbol.iterator] = function () { + return this.iterationFunc(this.root); + }; + return OrderedMap; + }(TreeContainer)); + + var HashContainer = /** @class */ (function (_super) { + __extends(HashContainer, _super); + function HashContainer(initBucketNum, hashFunc) { + if (initBucketNum === void 0) { initBucketNum = 16; } + if (hashFunc === void 0) { hashFunc = function (x) { + var str; + if (typeof x !== 'string') { + str = JSON.stringify(x); + } + else + str = x; + var hashCode = 0; + var strLength = str.length; + for (var i = 0; i < strLength; i++) { + var ch = str.charCodeAt(i); + hashCode = ((hashCode << 5) - hashCode) + ch; + hashCode |= 0; + } + return hashCode >>> 0; + }; } + var _this = _super.call(this) || this; + if (initBucketNum < 16 || (initBucketNum & (initBucketNum - 1)) !== 0) { + throw new RangeError('InitBucketNum range error'); + } + _this.bucketNum = _this.initBucketNum = initBucketNum; + _this.hashFunc = hashFunc; + return _this; + } + HashContainer.prototype.clear = function () { + this.length = 0; + this.bucketNum = this.initBucketNum; + this.hashTable = []; + }; + HashContainer.sigma = 0.75; + HashContainer.treeifyThreshold = 8; + HashContainer.untreeifyThreshold = 6; + HashContainer.minTreeifySize = 64; + HashContainer.maxBucketNum = (1 << 30); + return HashContainer; + }(Base)); + + var HashSet = /** @class */ (function (_super) { + __extends(HashSet, _super); + function HashSet(container, initBucketNum, hashFunc) { + if (container === void 0) { container = []; } + var _this = _super.call(this, initBucketNum, hashFunc) || this; + _this.hashTable = []; + container.forEach(function (element) { return _this.insert(element); }); + return _this; + } + HashSet.prototype.reAllocate = function () { + var _this = this; + if (this.bucketNum >= HashContainer.maxBucketNum) + return; + var newHashTable = []; + var originalBucketNum = this.bucketNum; + this.bucketNum <<= 1; + var keys = Object.keys(this.hashTable); + var keyNums = keys.length; + var _loop_1 = function (i) { + var index = parseInt(keys[i]); + var container = this_1.hashTable[index]; + var size = container.size(); + if (size === 0) + return "continue"; + if (size === 1) { + var element = container.front(); + newHashTable[this_1.hashFunc(element) & (this_1.bucketNum - 1)] = new Vector([element], false); + return "continue"; + } + var lowList = []; + var highList = []; + container.forEach(function (element) { + var hashCode = _this.hashFunc(element); + if ((hashCode & originalBucketNum) === 0) { + lowList.push(element); + } + else + highList.push(element); + }); + if (container instanceof OrderedSet) { + if (lowList.length > HashContainer.untreeifyThreshold) { + newHashTable[index] = new OrderedSet(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector(lowList, false); + } + if (highList.length > HashContainer.untreeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedSet(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector(highList, false); + } + } + else { + if (lowList.length >= HashContainer.treeifyThreshold) { + newHashTable[index] = new OrderedSet(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector(lowList, false); + } + if (highList.length >= HashContainer.treeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedSet(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector(highList, false); + } + } + }; + var this_1 = this; + for (var i = 0; i < keyNums; ++i) { + _loop_1(i); + } + this.hashTable = newHashTable; + }; + HashSet.prototype.forEach = function (callback) { + var containers = Object.values(this.hashTable); + var containersNum = containers.length; + var index = 0; + for (var i = 0; i < containersNum; ++i) { + containers[i].forEach(function (element) { return callback(element, index++); }); + } + }; + /** + * @description Insert element to hash set. + * @param element The element you want to insert. + */ + HashSet.prototype.insert = function (element) { + var index = this.hashFunc(element) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) { + this.hashTable[index] = new Vector([element], false); + this.length += 1; + } + else { + var preSize = container.size(); + if (container instanceof Vector) { + if (!container.find(element) + .equals(container.end())) + return; + container.pushBack(element); + if (preSize + 1 >= HashContainer.treeifyThreshold) { + if (this.bucketNum <= HashContainer.minTreeifySize) { + this.length += 1; + this.reAllocate(); + return; + } + this.hashTable[index] = new OrderedSet(container); + } + this.length += 1; + } + else { + container.insert(element); + var curSize = container.size(); + this.length += curSize - preSize; + } + } + if (this.length > this.bucketNum * HashContainer.sigma) { + this.reAllocate(); + } + }; + HashSet.prototype.eraseElementByKey = function (key) { + var index = this.hashFunc(key) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) + return; + var preSize = container.size(); + if (preSize === 0) + return; + if (container instanceof Vector) { + container.eraseElementByValue(key); + var curSize = container.size(); + this.length += curSize - preSize; + } + else { + container.eraseElementByKey(key); + var curSize = container.size(); + this.length += curSize - preSize; + if (curSize <= HashContainer.untreeifyThreshold) { + this.hashTable[index] = new Vector(container); + } + } + }; + HashSet.prototype.find = function (element) { + var index = this.hashFunc(element) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) + return false; + return !container.find(element) + .equals(container.end()); + }; + HashSet.prototype[Symbol.iterator] = function () { + return function () { + var containers, containersNum, i, container, container_1, container_1_1, element, e_1_1; + var e_1, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + containers = Object.values(this.hashTable); + containersNum = containers.length; + i = 0; + _b.label = 1; + case 1: + if (!(i < containersNum)) return [3 /*break*/, 10]; + container = containers[i]; + _b.label = 2; + case 2: + _b.trys.push([2, 7, 8, 9]); + container_1 = (e_1 = void 0, __values(container)), container_1_1 = container_1.next(); + _b.label = 3; + case 3: + if (!!container_1_1.done) return [3 /*break*/, 6]; + element = container_1_1.value; + return [4 /*yield*/, element]; + case 4: + _b.sent(); + _b.label = 5; + case 5: + container_1_1 = container_1.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_1_1 = _b.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (container_1_1 && !container_1_1.done && (_a = container_1.return)) _a.call(container_1); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 9: + ++i; + return [3 /*break*/, 1]; + case 10: return [2 /*return*/]; + } + }); + }.bind(this)(); + }; + return HashSet; + }(HashContainer)); + + var HashMap = /** @class */ (function (_super) { + __extends(HashMap, _super); + function HashMap(container, initBucketNum, hashFunc) { + if (container === void 0) { container = []; } + var _this = _super.call(this, initBucketNum, hashFunc) || this; + _this.hashTable = []; + container.forEach(function (element) { return _this.setElement(element[0], element[1]); }); + return _this; + } + HashMap.prototype.reAllocate = function () { + var _this = this; + if (this.bucketNum >= HashContainer.maxBucketNum) + return; + var newHashTable = []; + var originalBucketNum = this.bucketNum; + this.bucketNum <<= 1; + var keys = Object.keys(this.hashTable); + var keyNums = keys.length; + var _loop_1 = function (i) { + var index = parseInt(keys[i]); + var container = this_1.hashTable[index]; + var size = container.size(); + if (size === 0) + return "continue"; + if (size === 1) { + var element = container.front(); + newHashTable[this_1.hashFunc(element[0]) & (this_1.bucketNum - 1)] = new Vector([element], false); + return "continue"; + } + var lowList = []; + var highList = []; + container.forEach(function (element) { + var hashCode = _this.hashFunc(element[0]); + if ((hashCode & originalBucketNum) === 0) { + lowList.push(element); + } + else + highList.push(element); + }); + if (container instanceof OrderedMap) { + if (lowList.length > HashContainer.untreeifyThreshold) { + newHashTable[index] = new OrderedMap(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector(lowList, false); + } + if (highList.length > HashContainer.untreeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedMap(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector(highList, false); + } + } + else { + if (lowList.length >= HashContainer.treeifyThreshold) { + newHashTable[index] = new OrderedMap(lowList); + } + else if (lowList.length) { + newHashTable[index] = new Vector(lowList, false); + } + if (highList.length >= HashContainer.treeifyThreshold) { + newHashTable[index + originalBucketNum] = new OrderedMap(highList); + } + else if (highList.length) { + newHashTable[index + originalBucketNum] = new Vector(highList, false); + } + } + }; + var this_1 = this; + for (var i = 0; i < keyNums; ++i) { + _loop_1(i); + } + this.hashTable = newHashTable; + }; + HashMap.prototype.forEach = function (callback) { + var containers = Object.values(this.hashTable); + var containersNum = containers.length; + var index = 0; + for (var i = 0; i < containersNum; ++i) { + containers[i].forEach(function (element) { return callback(element, index++); }); + } + }; + /** + * @description Insert a new key-value pair to hash map or set value by key. + * @param key The key you want to insert. + * @param value The value you want to insert. + * @example HashMap.setElement(1, 2); // insert a key-value pair [1, 2] + */ + HashMap.prototype.setElement = function (key, value) { + var e_1, _a; + var index = this.hashFunc(key) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) { + this.length += 1; + this.hashTable[index] = new Vector([[key, value]], false); + } + else { + var preSize = container.size(); + if (container instanceof Vector) { + try { + for (var container_1 = __values(container), container_1_1 = container_1.next(); !container_1_1.done; container_1_1 = container_1.next()) { + var pair = container_1_1.value; + if (pair[0] === key) { + pair[1] = value; + return; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (container_1_1 && !container_1_1.done && (_a = container_1.return)) _a.call(container_1); + } + finally { if (e_1) throw e_1.error; } + } + container.pushBack([key, value]); + if (preSize + 1 >= HashMap.treeifyThreshold) { + if (this.bucketNum <= HashMap.minTreeifySize) { + this.length += 1; + this.reAllocate(); + return; + } + this.hashTable[index] = new OrderedMap(this.hashTable[index]); + } + this.length += 1; + } + else { + container.setElement(key, value); + var curSize = container.size(); + this.length += curSize - preSize; + } + } + if (this.length > this.bucketNum * HashMap.sigma) { + this.reAllocate(); + } + }; + /** + * @description Get the value of the element which has the specified key. + * @param key The key you want to get. + */ + HashMap.prototype.getElementByKey = function (key) { + var e_2, _a; + var index = this.hashFunc(key) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) + return undefined; + if (container instanceof OrderedMap) { + return container.getElementByKey(key); + } + else { + try { + for (var container_2 = __values(container), container_2_1 = container_2.next(); !container_2_1.done; container_2_1 = container_2.next()) { + var pair = container_2_1.value; + if (pair[0] === key) + return pair[1]; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (container_2_1 && !container_2_1.done && (_a = container_2.return)) _a.call(container_2); + } + finally { if (e_2) throw e_2.error; } + } + return undefined; + } + }; + HashMap.prototype.eraseElementByKey = function (key) { + var e_3, _a; + var index = this.hashFunc(key) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) + return; + if (container instanceof Vector) { + var pos = 0; + try { + for (var container_3 = __values(container), container_3_1 = container_3.next(); !container_3_1.done; container_3_1 = container_3.next()) { + var pair = container_3_1.value; + if (pair[0] === key) { + container.eraseElementByPos(pos); + this.length -= 1; + return; + } + pos += 1; + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (container_3_1 && !container_3_1.done && (_a = container_3.return)) _a.call(container_3); + } + finally { if (e_3) throw e_3.error; } + } + } + else { + var preSize = container.size(); + container.eraseElementByKey(key); + var curSize = container.size(); + this.length += curSize - preSize; + if (curSize <= HashContainer.untreeifyThreshold) { + this.hashTable[index] = new Vector(container); + } + } + }; + HashMap.prototype.find = function (key) { + var e_4, _a; + var index = this.hashFunc(key) & (this.bucketNum - 1); + var container = this.hashTable[index]; + if (!container) + return false; + if (container instanceof OrderedMap) { + return !container.find(key) + .equals(container.end()); + } + try { + for (var container_4 = __values(container), container_4_1 = container_4.next(); !container_4_1.done; container_4_1 = container_4.next()) { + var pair = container_4_1.value; + if (pair[0] === key) + return true; + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (container_4_1 && !container_4_1.done && (_a = container_4.return)) _a.call(container_4); + } + finally { if (e_4) throw e_4.error; } + } + return false; + }; + HashMap.prototype[Symbol.iterator] = function () { + return function () { + var containers, containersNum, i, container, container_5, container_5_1, element, e_5_1; + var e_5, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + containers = Object.values(this.hashTable); + containersNum = containers.length; + i = 0; + _b.label = 1; + case 1: + if (!(i < containersNum)) return [3 /*break*/, 10]; + container = containers[i]; + _b.label = 2; + case 2: + _b.trys.push([2, 7, 8, 9]); + container_5 = (e_5 = void 0, __values(container)), container_5_1 = container_5.next(); + _b.label = 3; + case 3: + if (!!container_5_1.done) return [3 /*break*/, 6]; + element = container_5_1.value; + return [4 /*yield*/, element]; + case 4: + _b.sent(); + _b.label = 5; + case 5: + container_5_1 = container_5.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_5_1 = _b.sent(); + e_5 = { error: e_5_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (container_5_1 && !container_5_1.done && (_a = container_5.return)) _a.call(container_5); + } + finally { if (e_5) throw e_5.error; } + return [7 /*endfinally*/]; + case 9: + ++i; + return [3 /*break*/, 1]; + case 10: return [2 /*return*/]; + } + }); + }.bind(this)(); + }; + return HashMap; + }(HashContainer)); + + exports.Container = Container; + exports.ContainerIterator = ContainerIterator; + exports.Deque = Deque; + exports.DequeIterator = DequeIterator; + exports.HashContainer = HashContainer; + exports.HashMap = HashMap; + exports.HashSet = HashSet; + exports.LinkList = LinkList; + exports.LinkListIterator = LinkListIterator; + exports.OrderedMap = OrderedMap; + exports.OrderedMapIterator = OrderedMapIterator; + exports.OrderedSet = OrderedSet; + exports.OrderedSetIterator = OrderedSetIterator; + exports.PriorityQueue = PriorityQueue; + exports.Queue = Queue; + exports.SequentialContainer = SequentialContainer; + exports.Stack = Stack; + exports.TreeContainer = TreeContainer; + exports.Vector = Vector; + exports.VectorIterator = VectorIterator; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/tools/node_modules/eslint/node_modules/js-sdsl/dist/umd/js-sdsl.min.js b/tools/node_modules/eslint/node_modules/js-sdsl/dist/umd/js-sdsl.min.js new file mode 100644 index 00000000000..2f6849c96c0 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/js-sdsl/dist/umd/js-sdsl.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).sdsl={})}(this,function(t){"use strict";var i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)};function e(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}function l(r,i){var n,o,h,s={label:0,sent:function(){if(1&h[0])throw h[1];return h[1]},trys:[],ops:[]},t={next:e(0),throw:e(1),return:e(2)};return"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function e(e){return function(t){return function(e){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,o&&(h=2&e[0]?o.return:e[0]?o.throw||((h=o.return)&&h.call(o),0):o.next)&&!(h=h.call(o,e[1])).done)return h;switch(o=0,(e=h?[2&e[0],h.value]:e)[0]){case 0:case 1:h=e;break;case 4:return s.label++,{value:e[1],done:!1};case 5:s.label++,o=e[1],e=[0];continue;case 7:e=s.ops.pop(),s.trys.pop();continue;default:if(!(h=0<(h=s.trys).length&&h[h.length-1])&&(6===e[0]||2===e[0])){s=0;continue}if(3===e[0]&&(!h||e[1]>h[0]&&e[1]=t.length?void 0:t)&&t[i++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function f(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var i,n,o=r.call(t),h=[];try{for(;(void 0===e||0>1,1),r=0;r>1},T.prototype.front=function(){return this.map[this.first][this.curFirst]},T.prototype.back=function(){return this.map[this.last][this.curLast]},T.prototype.begin=function(){return new P(0,this.size,this.getElementByPos,this.setElementByPos)},T.prototype.end=function(){return new P(this.length,this.size,this.getElementByPos,this.setElementByPos)},T.prototype.rBegin=function(){return new P(this.length-1,this.size,this.getElementByPos,this.setElementByPos,o.REVERSE)},T.prototype.rEnd=function(){return new P(-1,this.size,this.getElementByPos,this.setElementByPos,o.REVERSE)},T.prototype.pushBack=function(t){this.length&&(this.curLastt;)this.popBack()}},T.prototype.sort=function(t){for(var e=[],r=0;r>1)-(e>>1),i.curFirst=i.curLast=i.bucketSize-r%i.bucketSize>>1,t.forEach(function(t){return i.pushBack(t)}),i.size=i.size.bind(i),i.getElementByPos=i.getElementByPos.bind(i),i.setElementByPos=i.setElementByPos.bind(i),i}var z,S=(e(F,z=n),F.prototype.clear=function(){this.queue.clear(),this.length=0},F.prototype.push=function(t){this.queue.pushBack(t),this.length+=1},F.prototype.pop=function(){this.queue.popFront(),this.length&&--this.length},F.prototype.front=function(){return this.queue.front()},F);function F(t){void 0===t&&(t=[]);var e=z.call(this)||this;return e.queue=new N(t),e.length=e.queue.size(),e}var A,Q=(e(O,A=n),O.prototype.adjust=function(t){var e,r=t<<1|1,i=2+(t<<1);r>1;if(this.cmp(this.priorityQueue[r],t)<=0)break;this.adjust(r),e=r}},O.prototype.pop=function(){if(this.length){var t=this.priorityQueue[this.length-1];--this.length;for(var e=0;e=this.length)break;var n=r;if(i>1;0<=n;--n)for(var o=n,h=o<<1|1;h>>0});var r=dt.call(this)||this;if(t<16||0!=(t&t-1))throw new RangeError("InitBucketNum range error");return r.bucketNum=r.initBucketNum=t,r.hashFunc=e,r}var gt,w=(e(mt,gt=yt),mt.prototype.reAllocate=function(){var o=this;if(!(this.bucketNum>=yt.maxBucketNum)){var h=[],s=this.bucketNum;this.bucketNum<<=1;for(var a=Object.keys(this.hashTable),t=a.length,u=this,e=0;eyt.untreeifyThreshold?h[e]=new ht(i):i.length&&(h[e]=new q(i,!1)),n.length>yt.untreeifyThreshold?h[e+s]=new ht(n):n.length&&(h[e+s]=new q(n,!1))):(i.length>=yt.treeifyThreshold?h[e]=new ht(i):i.length&&(h[e]=new q(i,!1)),n.length>=yt.treeifyThreshold?h[e+s]=new ht(n):n.length&&(h[e+s]=new q(n,!1)))}(e);this.hashTable=h}},mt.prototype.forEach=function(e){for(var t=Object.values(this.hashTable),r=t.length,i=0,n=0;nthis.bucketNum*yt.sigma&&this.reAllocate()},mt.prototype.eraseElementByKey=function(t){var e,r,i=this.hashFunc(t)&this.bucketNum-1,n=this.hashTable[i];!n||0!==(e=n.size())&&(n instanceof q?(n.eraseElementByValue(t),r=n.size(),this.length+=r-e):(n.eraseElementByKey(t),r=n.size(),this.length+=r-e,r<=yt.untreeifyThreshold&&(this.hashTable[i]=new q(n))))},mt.prototype.find=function(t){var e=this.hashFunc(t)&this.bucketNum-1,e=this.hashTable[e];return!!e&&!e.find(t).equals(e.end())},mt.prototype[Symbol.iterator]=function(){return function(){var e,r,i,n,o,h,s,a,u;return l(this,function(t){switch(t.label){case 0:e=Object.values(this.hashTable),r=e.length,i=0,t.label=1;case 1:if(!(i=yt.maxBucketNum)){var h=[],s=this.bucketNum;this.bucketNum<<=1;for(var a=Object.keys(this.hashTable),t=a.length,u=this,e=0;eyt.untreeifyThreshold?h[e]=new ft(i):i.length&&(h[e]=new q(i,!1)),n.length>yt.untreeifyThreshold?h[e+s]=new ft(n):n.length&&(h[e+s]=new q(n,!1))):(i.length>=yt.treeifyThreshold?h[e]=new ft(i):i.length&&(h[e]=new q(i,!1)),n.length>=yt.treeifyThreshold?h[e+s]=new ft(n):n.length&&(h[e+s]=new q(n,!1)))}(e);this.hashTable=h}},bt.prototype.forEach=function(e){for(var t=Object.values(this.hashTable),r=t.length,i=0,n=0;nthis.bucketNum*bt.sigma&&this.reAllocate()},bt.prototype.getElementByKey=function(t){var e,r,i=this.hashFunc(t)&this.bucketNum-1,i=this.hashTable[i];if(i){if(i instanceof ft)return i.getElementByKey(t);try{for(var n=c(i),o=n.next();!o.done;o=n.next()){var h=o.value;if(h[0]===t)return h[1]}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}}},bt.prototype.eraseElementByKey=function(t){var e=this.hashFunc(t)&this.bucketNum-1,r=this.hashTable[e];if(r)if(r instanceof q){var i=0;try{for(var n=c(r),o=n.next();!o.done;o=n.next()){if(o.value[0]===t)return r.eraseElementByPos(i),void--this.length;i+=1}}catch(t){s={error:t}}finally{try{o&&!o.done&&(h=n.return)&&h.call(n)}finally{if(s)throw s.error}}}else{var h=r.size();r.eraseElementByKey(t);var s=r.size();this.length+=s-h,s<=yt.untreeifyThreshold&&(this.hashTable[e]=new q(r))}},bt.prototype.find=function(t){var e,r,i=this.hashFunc(t)&this.bucketNum-1,i=this.hashTable[i];if(!i)return!1;if(i instanceof ft)return!i.find(t).equals(i.end());try{for(var n=c(i),o=n.next();!o.done;o=n.next())if(o.value[0]===t)return!0}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return!1},bt.prototype[Symbol.iterator]=function(){return function(){var e,r,i,n,o,h,s,a,u;return l(this,function(t){switch(t.label){case 0:e=Object.values(this.hashTable),r=e.length,i=0,t.label=1;case 1:if(!(i 1%", + "not dead", + "maintained node versions" + ], + "sideEffects": false, + "homepage": "https://js-sdsl.github.io", + "scripts": { + "setup": "rm -rf node_modules && yarn install", + "dev": "ttsc --project tsconfig.cjs.json --watch", + "build": "yarn build:esm && yarn build:cjs && yarn build:umd:min", + "build:cjs": "rm -rf dist/cjs && ttsc --project tsconfig.cjs.json", + "build:esm": "rm -rf dist/esm && ttsc --project tsconfig.esm.json", + "build:umd": "rm -rf dist/umd && rollup -c", + "build:umd:min": "yarn build:umd && uglifyjs --compress --mangle --source-map --comments -o dist/umd/js-sdsl.min.js -- dist/umd/js-sdsl.js", + "test": "yarn test:unit && yarn test:performance", + "test:unit": "jest --coverage", + "test:performance": "rm -rf dist/performance && ttsc --project tsconfig.performance.json && node dist/performance/performance/index.js", + "lint": "eslint --fix --color --cache --max-warnings=0 .", + "generate": "typedoc src/index.ts", + "generate:dev": "typedoc src/index.ts --watch", + "prepare": "husky install" + }, + "lint-staged": { + "*.{js,ts}": [ + "yarn lint" + ] + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@types/node": "^17.0.0", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "all-contributors-cli": "^6.20.0", + "browserslist": "^4.21.3", + "caniuse-lite": "^1.0.30001380", + "commitlint": "^17.0.3", + "conventional-changelog-conventionalcommits": "^5.0.0", + "coveralls": "^3.1.1", + "eslint": "^8.4.1", + "eslint-plugin-compat": "^4.0.2", + "gh-pages": "^3.2.3", + "husky": "^8.0.1", + "jest": "^28.1.3", + "lint-staged": "^12.1.0", + "rollup": "^2.78.1", + "rollup-plugin-typescript2": "^0.33.0", + "ts-jest": "^28.0.7", + "ts-node": "^10.9.1", + "ts-transform-paths": "^2.0.3", + "tsconfig-paths": "^4.0.0", + "tslib": "^2.4.0", + "ttypescript": "^1.5.13", + "typedoc": "^0.23.10", + "typedoc-plugin-missing-exports": "^1.0.0", + "typescript": "^4.7.4", + "uglify-js": "^3.14.5" + }, + "repository": { + "type": "github", + "url": "https://github.com/js-sdsl/js-sdsl.git" + }, + "license": "MIT", + "files": [ + "dist/cjs", + "dist/esm", + "dist/umd", + "CHANGELOG.md" + ], + "keywords": [ + "data", + "structure", + "data structure", + "rbTree", + "rbtree", + "RBTree", + "red black tree", + "ordered", + "set", + "map", + "ordered map", + "ordered set", + "deque", + "heap", + "priority queue", + "link list", + "LinkList", + "linkedList", + "vector", + "stack", + "queue", + "hash", + "hash set", + "hash map", + "c++", + "stl" + ], + "bugs": { + "email": "951711127@qq.com", + "url": "https://github.com/js-sdsl/js-sdsl/issues" + }, + "dependencies": {} +} diff --git a/tools/node_modules/eslint/node_modules/jsdoc-type-pratt-parser/dist/index.js b/tools/node_modules/eslint/node_modules/jsdoc-type-pratt-parser/dist/index.js index d4e8e47e120..eb07b24d340 100644 --- a/tools/node_modules/eslint/node_modules/jsdoc-type-pratt-parser/dist/index.js +++ b/tools/node_modules/eslint/node_modules/jsdoc-type-pratt-parser/dist/index.js @@ -213,51 +213,39 @@ identifierRule, stringValueRule ]; + const breakingWhitespaceRegex = /^\s*\n\s*/; class Lexer { - constructor() { + constructor(text, previous, current, next) { this.text = ''; - } - lex(text) { this.text = text; - this.current = undefined; - this.next = undefined; - this.advance(); - } - token() { - if (this.current === undefined) { - throw new Error('Lexer not lexing'); - } - return this.current; - } - peek() { - if (this.next === undefined) { - this.next = this.read(); - } - return this.next; - } - last() { - return this.previous; - } - advance() { - this.previous = this.current; - if (this.next !== undefined) { - this.current = this.next; - this.next = undefined; - return; - } - this.current = this.read(); - } - read() { - const text = this.text.trim(); + this.previous = previous; + this.current = current; + this.next = next; + } + static create(text) { + const current = this.read(text); + text = current.text; + const next = this.read(text); + text = next.text; + return new Lexer(text, undefined, current.token, next.token); + } + static read(text, startOfLine = false) { + startOfLine = startOfLine || breakingWhitespaceRegex.test(text); + text = text.trim(); for (const rule of rules) { - const token = rule(text); - if (token !== null) { - this.text = text.slice(token.text.length); - return token; + const partial = rule(text); + if (partial !== null) { + const token = Object.assign(Object.assign({}, partial), { startOfLine }); + text = text.slice(token.text.length); + return { text, token }; } } throw new Error('Unexpected Token ' + text); } + advance() { + const next = Lexer.read(this.text); + return new Lexer(next.text, this.current, this.next, next.token); + } } /** @@ -338,19 +326,26 @@ })(Precedence || (Precedence = {})); class Parser { - constructor({ grammar, lexer, parent }) { - this.lexer = lexer !== null && lexer !== void 0 ? lexer : new Lexer(); - this.parent = parent; + constructor(grammar, textOrLexer, parent) { this.grammar = grammar; + if (typeof textOrLexer === 'string') { + this._lexer = Lexer.create(textOrLexer); + } + else { + this._lexer = textOrLexer; + } + this.parent = parent; + } + get lexer() { + return this._lexer; } /** * Parses a given string and throws an error if the parse ended before the end of the string. */ - parseText(text) { - this.lexer.lex(text); + parse() { const result = this.parseType(Precedence.ALL); - if (this.lexer.token().type !== 'EOF') { - throw new EarlyEndOfParseError(this.lexer.token()); + if (this.lexer.current.type !== 'EOF') { + throw new EarlyEndOfParseError(this.lexer.current); } return result; } @@ -360,26 +355,14 @@ parseType(precedence) { return assertRootResult(this.parseIntermediateType(precedence)); } - /** - * Tries to parse the current state with all parslets in the grammar and returns the first non null result. - */ - tryParslets(precedence, left) { - for (const parslet of this.grammar) { - const result = parslet(this, precedence, left); - if (result !== null) { - return result; - } - } - return null; - } /** * The main parsing function. First it tries to parse the current state in the prefix step, and then it continues * to parse the state in the infix step. */ parseIntermediateType(precedence) { - const result = this.tryParslets(precedence, null); + const result = this.tryParslets(null, precedence); if (result === null) { - throw new NoParsletFoundError(this.lexer.token()); + throw new NoParsletFoundError(this.lexer.current); } return this.parseInfixIntermediateType(result, precedence); } @@ -387,13 +370,25 @@ * In the infix parsing step the parser continues to parse the current state with all parslets until none returns * a result. */ - parseInfixIntermediateType(result, precedence) { - let newResult = this.tryParslets(precedence, result); - while (newResult !== null) { - result = newResult; - newResult = this.tryParslets(precedence, result); + parseInfixIntermediateType(left, precedence) { + let result = this.tryParslets(left, precedence); + while (result !== null) { + left = result; + result = this.tryParslets(left, precedence); } - return result; + return left; + } + /** + * Tries to parse the current state with all parslets in the grammar and returns the first non null result. + */ + tryParslets(left, precedence) { + for (const parslet of this.grammar) { + const result = parslet(this, precedence, left); + if (result !== null) { + return result; + } + } + return null; } /** * If the given type equals the current type of the {@link Lexer} advance the lexer. Return true if the lexer was @@ -403,17 +398,16 @@ if (!Array.isArray(types)) { types = [types]; } - if (!types.includes(this.lexer.token().type)) { + if (types.includes(this.lexer.current.type)) { + this._lexer = this.lexer.advance(); + return true; + } + else { return false; } - this.lexer.advance(); - return true; } - getLexer() { - return this.lexer; - } - getParent() { - return this.parent; + acceptLexerState(parser) { + this._lexer = parser.lexer; } } @@ -422,8 +416,8 @@ } const nullableParslet = (parser, precedence, left) => { - const type = parser.getLexer().token().type; - const next = parser.getLexer().peek().type; + const type = parser.lexer.current.type; + const next = parser.lexer.next.type; const accept = ((left == null) && type === '?' && !isQuestionMarkUnknownType(next)) || ((left != null) && type === '?'); if (!accept) { @@ -452,9 +446,9 @@ function composeParslet(options) { const parslet = (parser, curPrecedence, left) => { - const type = parser.getLexer().token().type; - const next = parser.getLexer().peek().type; - if (left == null) { + const type = parser.lexer.current.type; + const next = parser.lexer.next.type; + if (left === null) { if ('parsePrefix' in options) { if (options.accept(type, next)) { return options.parsePrefix(parser); @@ -507,7 +501,7 @@ name: 'numberParslet', accept: type => type === 'Number', parsePrefix: parser => { - const value = parseFloat(parser.getLexer().token().text); + const value = parseFloat(parser.lexer.current.text); parser.consume('Number'); return { type: 'JsdocTypeNumber', @@ -572,7 +566,7 @@ type: 'JsdocTypeUnknown' }; } - throw new Error('Unacceptable token: ' + parser.getLexer().token().text); + throw new Error('Unacceptable token: ' + parser.lexer.current.text); } }); @@ -700,8 +694,8 @@ if ((left == null) || precedence >= Precedence.NAME_PATH) { return null; } - const type = parser.getLexer().token().type; - const next = parser.getLexer().peek().type; + const type = parser.lexer.current.type; + const next = parser.lexer.next.type; const accept = (type === '.' && next !== '<') || (type === '[' && left.type === 'JsdocTypeName') || (allowJsdocNamePaths && (type === '~' || type === '#')); @@ -725,12 +719,10 @@ pathType = 'instance'; } const pathParser = pathGrammar !== null - ? new Parser({ - grammar: pathGrammar, - lexer: parser.getLexer() - }) + ? new Parser(pathGrammar, parser.lexer, parser) : parser; const parsed = pathParser.parseIntermediateType(Precedence.NAME_PATH); + parser.acceptLexerState(pathParser); let right; switch (parsed.type) { case 'JsdocTypeName': @@ -772,7 +764,7 @@ throw new UnexpectedTypeError(parsed, 'Expecting \'JsdocTypeName\', \'JsdocTypeNumber\', \'JsdocStringValue\' or \'JsdocTypeSpecialNamePath\''); } if (brackets && !parser.consume(']')) { - const token = parser.getLexer().token(); + const token = parser.lexer.current; throw new Error(`Unterminated square brackets. Next token is '${token.type}' ` + `with text '${token.text}'`); } @@ -790,7 +782,7 @@ name: 'nameParslet', accept: type => type === 'Identifier' || type === 'this' || type === 'new' || allowedAdditionalTokens.includes(type), parsePrefix: parser => { - const { type, text } = parser.getLexer().token(); + const { type, text } = parser.lexer.current; parser.consume(type); return { type: 'JsdocTypeName', @@ -804,7 +796,7 @@ name: 'stringValueParslet', accept: type => type === 'StringValue', parsePrefix: parser => { - const text = parser.getLexer().token().text; + const text = parser.lexer.current.text; parser.consume('StringValue'); return { type: 'JsdocTypeStringValue', @@ -821,7 +813,7 @@ name: 'specialNamePathParslet', accept: type => allowedTypes.includes(type), parsePrefix: parser => { - const type = parser.getLexer().token().type; + const type = parser.lexer.current.type; parser.consume(type); if (!parser.consume(':')) { return { @@ -829,12 +821,8 @@ value: type }; } - const moduleParser = new Parser({ - grammar: pathGrammar, - lexer: parser.getLexer() - }); let result; - let token = parser.getLexer().token(); + let token = parser.lexer.current; if (parser.consume('StringValue')) { result = { type: 'JsdocTypeSpecialNamePath', @@ -850,7 +838,7 @@ const allowed = ['Identifier', '@', '/']; while (allowed.some(type => parser.consume(type))) { value += token.text; - token = parser.getLexer().token(); + token = parser.lexer.current; } result = { type: 'JsdocTypeSpecialNamePath', @@ -861,7 +849,10 @@ } }; } - return assertRootResult(moduleParser.parseInfixIntermediateType(result, Precedence.ALL)); + const moduleParser = new Parser(pathGrammar, parser.lexer, parser); + const moduleResult = moduleParser.parseInfixIntermediateType(result, Precedence.ALL); + parser.acceptLexerState(moduleParser); + return assertRootResult(moduleResult); } }); } @@ -905,13 +896,14 @@ } return parameters; } - function createFunctionParslet({ allowNamedParameters, allowNoReturnType, allowWithoutParenthesis }) { + function createFunctionParslet({ allowNamedParameters, allowNoReturnType, allowWithoutParenthesis, allowNewAsFunctionKeyword }) { return composeParslet({ name: 'functionParslet', - accept: type => type === 'function', + accept: (type, next) => type === 'function' || (allowNewAsFunctionKeyword && type === 'new' && next === '('), parsePrefix: parser => { + const newKeyword = parser.consume('new'); parser.consume('function'); - const hasParenthesis = parser.getLexer().token().type === '('; + const hasParenthesis = parser.lexer.current.type === '('; if (!hasParenthesis) { if (!allowWithoutParenthesis) { throw new Error('function is missing parameter list'); @@ -921,16 +913,22 @@ value: 'function' }; } - const result = { + let result = { type: 'JsdocTypeFunction', parameters: [], arrow: false, + constructor: newKeyword, parenthesis: hasParenthesis }; const value = parser.parseIntermediateType(Precedence.FUNCTION); if (allowNamedParameters === undefined) { result.parameters = getUnnamedParameters(value); } + else if (newKeyword && value.type === 'JsdocTypeFunction' && value.arrow) { + result = value; + result.constructor = true; + return result; + } else { result.parameters = getParameters(value); for (const p of result.parameters) { @@ -1056,7 +1054,7 @@ } }); - function createKeyValueParslet({ allowKeyTypes, allowReadonly, allowOptional }) { + function createKeyValueParslet({ allowKeyTypes, allowReadonly, allowOptional, allowVariadic }) { return composeParslet({ name: 'keyValueParslet', precedence: Precedence.KEY_VALUE, @@ -1065,6 +1063,7 @@ var _a; let optional = false; let readonlyProperty = false; + let variadic = false; if (allowOptional && left.type === 'JsdocTypeNullable') { optional = true; left = left.element; @@ -1073,20 +1072,28 @@ readonlyProperty = true; left = left.element; } + if (allowVariadic && left.type === 'JsdocTypeVariadic' && left.element !== undefined) { + variadic = true; + left = left.element; + } // object parslet uses a special grammar and for the value we want to switch back to the parent - parser = (_a = parser.getParent()) !== null && _a !== void 0 ? _a : parser; + const parentParser = (_a = parser.parent) !== null && _a !== void 0 ? _a : parser; + parentParser.acceptLexerState(parser); if (left.type === 'JsdocTypeNumber' || left.type === 'JsdocTypeName' || left.type === 'JsdocTypeStringValue') { - parser.consume(':'); + parentParser.consume(':'); let quote; if (left.type === 'JsdocTypeStringValue') { quote = left.meta.quote; } + const right = parentParser.parseType(Precedence.KEY_VALUE); + parser.acceptLexerState(parentParser); return { type: 'JsdocTypeKeyValue', key: left.value.toString(), - right: parser.parseType(Precedence.KEY_VALUE), - optional: optional, + right, + optional, readonly: readonlyProperty, + variadic, meta: { quote, hasLeftSideExpression: false @@ -1097,11 +1104,13 @@ if (!allowKeyTypes) { throw new UnexpectedTypeError(left); } - parser.consume(':'); + parentParser.consume(':'); + const right = parentParser.parseType(Precedence.KEY_VALUE); + parser.acceptLexerState(parentParser); return { type: 'JsdocTypeKeyValue', left: assertRootResult(left), - right: parser.parseType(Precedence.KEY_VALUE), + right: right, meta: { hasLeftSideExpression: true } @@ -1126,14 +1135,11 @@ }; if (!parser.consume('}')) { let separator; - const lexer = parser.getLexer(); - const fieldParser = new Parser({ - grammar: objectFieldGrammar, - lexer: lexer, - parent: parser - }); + const fieldParser = new Parser(objectFieldGrammar, parser.lexer, parser); while (true) { + fieldParser.acceptLexerState(parser); let field = fieldParser.parseIntermediateType(Precedence.OBJECT); + parser.acceptLexerState(fieldParser); if (field === undefined && allowKeyTypes) { field = parser.parseIntermediateType(Precedence.OBJECT); } @@ -1153,6 +1159,7 @@ right: undefined, optional: optional, readonly: false, + variadic: false, meta: { quote, hasLeftSideExpression: false @@ -1165,7 +1172,10 @@ else { throw new UnexpectedTypeError(field); } - if (parser.consume(',')) { + if (parser.lexer.current.startOfLine) { + separator = 'linebreak'; + } + else if (parser.consume(',')) { separator = 'comma'; } else if (parser.consume(';')) { @@ -1174,6 +1184,10 @@ else { break; } + const type = parser.lexer.current.type; + if (type === '}') { + break; + } } result.meta.separator = separator !== null && separator !== void 0 ? separator : 'comma'; // TODO: use undefined here if (!parser.consume('}')) { @@ -1190,7 +1204,8 @@ createFunctionParslet({ allowWithoutParenthesis: true, allowNamedParameters: ['this', 'new'], - allowNoReturnType: true + allowNoReturnType: true, + allowNewAsFunctionKeyword: false }), stringValueParslet, createSpecialNamePathParslet({ @@ -1213,7 +1228,8 @@ createKeyValueParslet({ allowKeyTypes: true, allowOptional: false, - allowReadonly: false + allowReadonly: false, + allowVariadic: false }) ]; const jsdocGrammar = [ @@ -1254,7 +1270,8 @@ createKeyValueParslet({ allowKeyTypes: false, allowOptional: false, - allowReadonly: false + allowReadonly: false, + allowVariadic: false }) ]; const closureGrammar = [ @@ -1270,7 +1287,8 @@ createFunctionParslet({ allowWithoutParenthesis: false, allowNamedParameters: ['this', 'new'], - allowNoReturnType: true + allowNoReturnType: true, + allowNewAsFunctionKeyword: false }), createVariadicParslet({ allowEnclosingBrackets: false, @@ -1291,7 +1309,8 @@ createKeyValueParslet({ allowKeyTypes: false, allowOptional: false, - allowReadonly: false + allowReadonly: false, + allowVariadic: false }), symbolParslet ]; @@ -1393,6 +1412,7 @@ type: 'JsdocTypeFunction', parameters: getParameters(left).map(assertPlainKeyValueOrNameResult), arrow: true, + constructor: false, parenthesis: true, returnType: parser.parseType(Precedence.OBJECT) }; @@ -1445,7 +1465,8 @@ createKeyValueParslet({ allowKeyTypes: false, allowOptional: true, - allowReadonly: true + allowReadonly: true, + allowVariadic: false }) ]; const typescriptGrammar = [ @@ -1461,7 +1482,8 @@ createFunctionParslet({ allowWithoutParenthesis: true, allowNoReturnType: false, - allowNamedParameters: ['this', 'new'] + allowNamedParameters: ['this', 'new', 'args'], + allowNewAsFunctionKeyword: true }), createTupleParslet({ allowQuestionMark: false @@ -1486,30 +1508,27 @@ createKeyValueParslet({ allowKeyTypes: false, allowOptional: true, - allowReadonly: true + allowReadonly: true, + allowVariadic: true }), intersectionParslet, predicateParslet ]; - const parsers = { - jsdoc: new Parser({ - grammar: jsdocGrammar - }), - closure: new Parser({ - grammar: closureGrammar - }), - typescript: new Parser({ - grammar: typescriptGrammar - }) - }; /** * This function parses the given expression in the given mode and produces a {@link RootResult}. * @param expression * @param mode */ function parse(expression, mode) { - return parsers[mode].parseText(expression); + switch (mode) { + case 'closure': + return (new Parser(closureGrammar, expression)).parse(); + case 'jsdoc': + return (new Parser(jsdocGrammar, expression)).parse(); + case 'typescript': + return (new Parser(typescriptGrammar, expression)).parse(); + } } /** * This function tries to parse the given expression in multiple modes and returns the first successful @@ -1522,7 +1541,7 @@ let error; for (const mode of modes) { try { - return parsers[mode].parseText(expression); + return parse(expression, mode); } catch (e) { error = e; @@ -1583,7 +1602,7 @@ JsdocTypeKeyof: (result, transform) => `keyof ${transform(result.element)}`, JsdocTypeFunction: (result, transform) => { if (!result.arrow) { - let stringified = 'function'; + let stringified = result.constructor ? 'new' : 'function'; if (!result.parenthesis) { return stringified; } @@ -1597,7 +1616,11 @@ if (result.returnType === undefined) { throw new Error('Arrow function needs a return type.'); } - return `(${result.parameters.map(transform).join(', ')}) => ${transform(result.returnType)}`; + let stringified = `(${result.parameters.map(transform).join(', ')}) => ${transform(result.returnType)}`; + if (result.constructor) { + stringified = 'new ' + stringified; + } + return stringified; } }, JsdocTypeName: result => result.value, @@ -1647,6 +1670,9 @@ if (result.optional) { text += '?'; } + if (result.variadic) { + text = '...' + text; + } if (result.right === undefined) { return text; } @@ -2230,6 +2256,7 @@ right: result.right === undefined ? undefined : transform(result.right), optional: result.optional, readonly: result.readonly, + variadic: result.variadic, meta: result.meta }; } @@ -2272,6 +2299,7 @@ type: 'JsdocTypeFunction', arrow: result.arrow, parameters: result.parameters.map(transform), + constructor: result.constructor, parenthesis: result.parenthesis }; if (result.returnType !== undefined) { diff --git a/tools/node_modules/eslint/node_modules/jsdoc-type-pratt-parser/package.json b/tools/node_modules/eslint/node_modules/jsdoc-type-pratt-parser/package.json index fb04594a43a..6bab2e1197b 100644 --- a/tools/node_modules/eslint/node_modules/jsdoc-type-pratt-parser/package.json +++ b/tools/node_modules/eslint/node_modules/jsdoc-type-pratt-parser/package.json @@ -1,6 +1,6 @@ { "name": "jsdoc-type-pratt-parser", - "version": "2.2.4", + "version": "3.1.0", "description": "", "main": "dist/index.js", "types": "dist/src/index.d.ts", diff --git a/tools/node_modules/eslint/node_modules/json5/lib/cli.js b/tools/node_modules/eslint/node_modules/json5/lib/cli.js index de852f15e47..93cb80921e2 100755 --- a/tools/node_modules/eslint/node_modules/json5/lib/cli.js +++ b/tools/node_modules/eslint/node_modules/json5/lib/cli.js @@ -2,37 +2,17 @@ const fs = require('fs') const path = require('path') -const minimist = require('minimist') const pkg = require('../package.json') const JSON5 = require('./') -const argv = minimist(process.argv.slice(2), { - alias: { - 'convert': 'c', - 'space': 's', - 'validate': 'v', - 'out-file': 'o', - 'version': 'V', - 'help': 'h', - }, - boolean: [ - 'convert', - 'validate', - 'version', - 'help', - ], - string: [ - 'space', - 'out-file', - ], -}) +const argv = parseArgs() if (argv.version) { version() } else if (argv.help) { usage() } else { - const inFilename = argv._[0] + const inFilename = argv.defaults[0] let readStream if (inFilename) { @@ -65,7 +45,7 @@ if (argv.version) { // --convert is for backward compatibility with v0.5.1. If // specified with and not --out-file, then a file with // the same name but with a .json extension will be written. - if (argv.convert && inFilename && !argv.o) { + if (argv.convert && inFilename && !argv.outFile) { const parsedFilename = path.parse(inFilename) const outFilename = path.format( Object.assign( @@ -75,8 +55,8 @@ if (argv.version) { ) writeStream = fs.createWriteStream(outFilename) - } else if (argv.o) { - writeStream = fs.createWriteStream(argv.o) + } else if (argv.outFile) { + writeStream = fs.createWriteStream(argv.outFile) } else { writeStream = process.stdout } @@ -90,6 +70,66 @@ if (argv.version) { }) } +function parseArgs () { + let convert + let space + let validate + let outFile + let version + let help + const defaults = [] + + const args = process.argv.slice(2) + for (let i = 0; i < args.length; i++) { + const arg = args[i] + switch (arg) { + case '--convert': + case '-c': + convert = true + break + + case '--space': + case '-s': + space = args[++i] + break + + case '--validate': + case '-v': + validate = true + break + + case '--out-file': + case '-o': + outFile = args[++i] + break + + case '--version': + case '-V': + version = true + break + + case '--help': + case '-h': + help = true + break + + default: + defaults.push(arg) + break + } + } + + return { + convert, + space, + validate, + outFile, + version, + help, + defaults, + } +} + function version () { console.log(pkg.version) } diff --git a/tools/node_modules/eslint/node_modules/json5/package.json b/tools/node_modules/eslint/node_modules/json5/package.json index 31c43e5f999..ec68d1c5872 100644 --- a/tools/node_modules/eslint/node_modules/json5/package.json +++ b/tools/node_modules/eslint/node_modules/json5/package.json @@ -1,6 +1,6 @@ { "name": "json5", - "version": "2.2.0", + "version": "2.2.1", "description": "JSON for humans.", "main": "lib/index.js", "module": "dist/index.mjs", @@ -48,9 +48,6 @@ "url": "https://github.com/json5/json5/issues" }, "homepage": "http://json5.org/", - "dependencies": { - "minimist": "^1.2.5" - }, "devDependencies": { "core-js": "^2.6.5", "eslint": "^5.15.3", diff --git a/tools/node_modules/eslint/node_modules/locate-path/index.js b/tools/node_modules/eslint/node_modules/locate-path/index.js new file mode 100644 index 00000000000..a6358e546a2 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/locate-path/index.js @@ -0,0 +1,68 @@ +'use strict'; +const path = require('path'); +const fs = require('fs'); +const {promisify} = require('util'); +const pLocate = require('p-locate'); + +const fsStat = promisify(fs.stat); +const fsLStat = promisify(fs.lstat); + +const typeMappings = { + directory: 'isDirectory', + file: 'isFile' +}; + +function checkType({type}) { + if (type in typeMappings) { + return; + } + + throw new Error(`Invalid type specified: ${type}`); +} + +const matchType = (type, stat) => type === undefined || stat[typeMappings[type]](); + +module.exports = async (paths, options) => { + options = { + cwd: process.cwd(), + type: 'file', + allowSymlinks: true, + ...options + }; + + checkType(options); + + const statFn = options.allowSymlinks ? fsStat : fsLStat; + + return pLocate(paths, async path_ => { + try { + const stat = await statFn(path.resolve(options.cwd, path_)); + return matchType(options.type, stat); + } catch { + return false; + } + }, options); +}; + +module.exports.sync = (paths, options) => { + options = { + cwd: process.cwd(), + allowSymlinks: true, + type: 'file', + ...options + }; + + checkType(options); + + const statFn = options.allowSymlinks ? fs.statSync : fs.lstatSync; + + for (const path_ of paths) { + try { + const stat = statFn(path.resolve(options.cwd, path_)); + + if (matchType(options.type, stat)) { + return path_; + } + } catch {} + } +}; diff --git a/tools/node_modules/eslint/node_modules/locate-path/license b/tools/node_modules/eslint/node_modules/locate-path/license new file mode 100644 index 00000000000..fa7ceba3eb4 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/locate-path/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/locate-path/package.json b/tools/node_modules/eslint/node_modules/locate-path/package.json new file mode 100644 index 00000000000..08bea50dc9b --- /dev/null +++ b/tools/node_modules/eslint/node_modules/locate-path/package.json @@ -0,0 +1,46 @@ +{ + "name": "locate-path", + "version": "6.0.0", + "description": "Get the first path that exists on disk of multiple paths", + "license": "MIT", + "repository": "sindresorhus/locate-path", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "locate", + "path", + "paths", + "file", + "files", + "exists", + "find", + "finder", + "search", + "searcher", + "array", + "iterable", + "iterator" + ], + "dependencies": { + "p-locate": "^5.0.0" + }, + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.13.1", + "xo": "^0.32.1" + } +} diff --git a/tools/node_modules/eslint/node_modules/locate-path/readme.md b/tools/node_modules/eslint/node_modules/locate-path/readme.md new file mode 100644 index 00000000000..1002bcd6aac --- /dev/null +++ b/tools/node_modules/eslint/node_modules/locate-path/readme.md @@ -0,0 +1,125 @@ +# locate-path [![Build Status](https://travis-ci.com/sindresorhus/locate-path.svg?branch=master)](https://travis-ci.com/github/sindresorhus/locate-path) + +> Get the first path that exists on disk of multiple paths + +## Install + +``` +$ npm install locate-path +``` + +## Usage + +Here we find the first file that exists on disk, in array order. + +```js +const locatePath = require('locate-path'); + +const files = [ + 'unicorn.png', + 'rainbow.png', // Only this one actually exists on disk + 'pony.png' +]; + +(async () => { + console(await locatePath(files)); + //=> 'rainbow' +})(); +``` + +## API + +### locatePath(paths, options?) + +Returns a `Promise` for the first path that exists or `undefined` if none exists. + +#### paths + +Type: `Iterable` + +Paths to check. + +#### options + +Type: `object` + +##### concurrency + +Type: `number`\ +Default: `Infinity`\ +Minimum: `1` + +Number of concurrently pending promises. + +##### preserveOrder + +Type: `boolean`\ +Default: `true` + +Preserve `paths` order when searching. + +Disable this to improve performance if you don't care about the order. + +##### cwd + +Type: `string`\ +Default: `process.cwd()` + +Current working directory. + +##### type + +Type: `string`\ +Default: `'file'`\ +Values: `'file' | 'directory'` + +The type of paths that can match. + +##### allowSymlinks + +Type: `boolean`\ +Default: `true` + +Allow symbolic links to match if they point to the chosen path type. + +### locatePath.sync(paths, options?) + +Returns the first path that exists or `undefined` if none exists. + +#### paths + +Type: `Iterable` + +Paths to check. + +#### options + +Type: `object` + +##### cwd + +Same as above. + +##### type + +Same as above. + +##### allowSymlinks + +Same as above. + +## Related + +- [path-exists](https://github.com/sindresorhus/path-exists) - Check if a path exists + +--- + +
    + + Get professional support for this package with a Tidelift subscription + +
    + + Tidelift helps make open source sustainable for maintainers while giving companies
    assurances about security, maintenance, and licensing for their dependencies. +
    +
    diff --git a/tools/node_modules/eslint/node_modules/merge2/LICENSE b/tools/node_modules/eslint/node_modules/merge2/LICENSE new file mode 100644 index 00000000000..31dd9c72273 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/merge2/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2020 Teambition + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/merge2/index.js b/tools/node_modules/eslint/node_modules/merge2/index.js new file mode 100644 index 00000000000..78a61edf0b2 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/merge2/index.js @@ -0,0 +1,144 @@ +'use strict' +/* + * merge2 + * https://github.com/teambition/merge2 + * + * Copyright (c) 2014-2020 Teambition + * Licensed under the MIT license. + */ +const Stream = require('stream') +const PassThrough = Stream.PassThrough +const slice = Array.prototype.slice + +module.exports = merge2 + +function merge2 () { + const streamsQueue = [] + const args = slice.call(arguments) + let merging = false + let options = args[args.length - 1] + + if (options && !Array.isArray(options) && options.pipe == null) { + args.pop() + } else { + options = {} + } + + const doEnd = options.end !== false + const doPipeError = options.pipeError === true + if (options.objectMode == null) { + options.objectMode = true + } + if (options.highWaterMark == null) { + options.highWaterMark = 64 * 1024 + } + const mergedStream = PassThrough(options) + + function addStream () { + for (let i = 0, len = arguments.length; i < len; i++) { + streamsQueue.push(pauseStreams(arguments[i], options)) + } + mergeStream() + return this + } + + function mergeStream () { + if (merging) { + return + } + merging = true + + let streams = streamsQueue.shift() + if (!streams) { + process.nextTick(endStream) + return + } + if (!Array.isArray(streams)) { + streams = [streams] + } + + let pipesCount = streams.length + 1 + + function next () { + if (--pipesCount > 0) { + return + } + merging = false + mergeStream() + } + + function pipe (stream) { + function onend () { + stream.removeListener('merge2UnpipeEnd', onend) + stream.removeListener('end', onend) + if (doPipeError) { + stream.removeListener('error', onerror) + } + next() + } + function onerror (err) { + mergedStream.emit('error', err) + } + // skip ended stream + if (stream._readableState.endEmitted) { + return next() + } + + stream.on('merge2UnpipeEnd', onend) + stream.on('end', onend) + + if (doPipeError) { + stream.on('error', onerror) + } + + stream.pipe(mergedStream, { end: false }) + // compatible for old stream + stream.resume() + } + + for (let i = 0; i < streams.length; i++) { + pipe(streams[i]) + } + + next() + } + + function endStream () { + merging = false + // emit 'queueDrain' when all streams merged. + mergedStream.emit('queueDrain') + if (doEnd) { + mergedStream.end() + } + } + + mergedStream.setMaxListeners(0) + mergedStream.add = addStream + mergedStream.on('unpipe', function (stream) { + stream.emit('merge2UnpipeEnd') + }) + + if (args.length) { + addStream.apply(null, args) + } + return mergedStream +} + +// check and pause streams for pipe. +function pauseStreams (streams, options) { + if (!Array.isArray(streams)) { + // Backwards-compat with old-style streams + if (!streams._readableState && streams.pipe) { + streams = streams.pipe(PassThrough(options)) + } + if (!streams._readableState || !streams.pause || !streams.pipe) { + throw new Error('Only readable stream can be merged.') + } + streams.pause() + } else { + for (let i = 0, len = streams.length; i < len; i++) { + streams[i] = pauseStreams(streams[i], options) + } + } + return streams +} diff --git a/tools/node_modules/eslint/node_modules/merge2/package.json b/tools/node_modules/eslint/node_modules/merge2/package.json new file mode 100644 index 00000000000..7777307fdec --- /dev/null +++ b/tools/node_modules/eslint/node_modules/merge2/package.json @@ -0,0 +1,43 @@ +{ + "name": "merge2", + "description": "Merge multiple streams into one stream in sequence or parallel.", + "authors": [ + "Yan Qing " + ], + "license": "MIT", + "version": "1.4.1", + "main": "./index.js", + "repository": { + "type": "git", + "url": "git@github.com:teambition/merge2.git" + }, + "homepage": "https://github.com/teambition/merge2", + "keywords": [ + "merge2", + "multiple", + "sequence", + "parallel", + "merge", + "stream", + "merge stream", + "sync" + ], + "engines": { + "node": ">= 8" + }, + "dependencies": {}, + "devDependencies": { + "standard": "^14.3.4", + "through2": "^3.0.1", + "thunks": "^4.9.6", + "tman": "^1.10.0", + "to-through": "^2.0.0" + }, + "scripts": { + "test": "standard && tman" + }, + "files": [ + "README.md", + "index.js" + ] +} diff --git a/tools/node_modules/eslint/node_modules/micromatch/LICENSE b/tools/node_modules/eslint/node_modules/micromatch/LICENSE new file mode 100755 index 00000000000..9af4a67d206 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/micromatch/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/micromatch/index.js b/tools/node_modules/eslint/node_modules/micromatch/index.js new file mode 100644 index 00000000000..1fad7f72450 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/micromatch/index.js @@ -0,0 +1,467 @@ +'use strict'; + +const util = require('util'); +const braces = require('braces'); +const picomatch = require('picomatch'); +const utils = require('picomatch/lib/utils'); +const isEmptyString = val => val === '' || val === './'; + +/** + * Returns an array of strings that match one or more glob patterns. + * + * ```js + * const mm = require('micromatch'); + * // mm(list, patterns[, options]); + * + * console.log(mm(['a.js', 'a.txt'], ['*.js'])); + * //=> [ 'a.js' ] + * ``` + * @param {String|Array} `list` List of strings to match. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) + * @return {Array} Returns an array of matches + * @summary false + * @api public + */ + +const micromatch = (list, patterns, options) => { + patterns = [].concat(patterns); + list = [].concat(list); + + let omit = new Set(); + let keep = new Set(); + let items = new Set(); + let negatives = 0; + + let onResult = state => { + items.add(state.output); + if (options && options.onResult) { + options.onResult(state); + } + }; + + for (let i = 0; i < patterns.length; i++) { + let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true); + let negated = isMatch.state.negated || isMatch.state.negatedExtglob; + if (negated) negatives++; + + for (let item of list) { + let matched = isMatch(item, true); + + let match = negated ? !matched.isMatch : matched.isMatch; + if (!match) continue; + + if (negated) { + omit.add(matched.output); + } else { + omit.delete(matched.output); + keep.add(matched.output); + } + } + } + + let result = negatives === patterns.length ? [...items] : [...keep]; + let matches = result.filter(item => !omit.has(item)); + + if (options && matches.length === 0) { + if (options.failglob === true) { + throw new Error(`No matches found for "${patterns.join(', ')}"`); + } + + if (options.nonull === true || options.nullglob === true) { + return options.unescape ? patterns.map(p => p.replace(/\\/g, '')) : patterns; + } + } + + return matches; +}; + +/** + * Backwards compatibility + */ + +micromatch.match = micromatch; + +/** + * Returns a matcher function from the given glob `pattern` and `options`. + * The returned function takes a string to match as its only argument and returns + * true if the string is a match. + * + * ```js + * const mm = require('micromatch'); + * // mm.matcher(pattern[, options]); + * + * const isMatch = mm.matcher('*.!(*a)'); + * console.log(isMatch('a.a')); //=> false + * console.log(isMatch('a.b')); //=> true + * ``` + * @param {String} `pattern` Glob pattern + * @param {Object} `options` + * @return {Function} Returns a matcher function. + * @api public + */ + +micromatch.matcher = (pattern, options) => picomatch(pattern, options); + +/** + * Returns true if **any** of the given glob `patterns` match the specified `string`. + * + * ```js + * const mm = require('micromatch'); + * // mm.isMatch(string, patterns[, options]); + * + * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true + * console.log(mm.isMatch('a.a', 'b.*')); //=> false + * ``` + * @param {String} `str` The string to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `[options]` See available [options](#options). + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); + +/** + * Backwards compatibility + */ + +micromatch.any = micromatch.isMatch; + +/** + * Returns a list of strings that _**do not match any**_ of the given `patterns`. + * + * ```js + * const mm = require('micromatch'); + * // mm.not(list, patterns[, options]); + * + * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a')); + * //=> ['b.b', 'c.c'] + * ``` + * @param {Array} `list` Array of strings to match. + * @param {String|Array} `patterns` One or more glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array} Returns an array of strings that **do not match** the given patterns. + * @api public + */ + +micromatch.not = (list, patterns, options = {}) => { + patterns = [].concat(patterns).map(String); + let result = new Set(); + let items = []; + + let onResult = state => { + if (options.onResult) options.onResult(state); + items.push(state.output); + }; + + let matches = new Set(micromatch(list, patterns, { ...options, onResult })); + + for (let item of items) { + if (!matches.has(item)) { + result.add(item); + } + } + return [...result]; +}; + +/** + * Returns true if the given `string` contains the given pattern. Similar + * to [.isMatch](#isMatch) but the pattern can match any part of the string. + * + * ```js + * var mm = require('micromatch'); + * // mm.contains(string, pattern[, options]); + * + * console.log(mm.contains('aa/bb/cc', '*b')); + * //=> true + * console.log(mm.contains('aa/bb/cc', '*d')); + * //=> false + * ``` + * @param {String} `str` The string to match. + * @param {String|Array} `patterns` Glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any of the patterns matches any part of `str`. + * @api public + */ + +micromatch.contains = (str, pattern, options) => { + if (typeof str !== 'string') { + throw new TypeError(`Expected a string: "${util.inspect(str)}"`); + } + + if (Array.isArray(pattern)) { + return pattern.some(p => micromatch.contains(str, p, options)); + } + + if (typeof pattern === 'string') { + if (isEmptyString(str) || isEmptyString(pattern)) { + return false; + } + + if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) { + return true; + } + } + + return micromatch.isMatch(str, pattern, { ...options, contains: true }); +}; + +/** + * Filter the keys of the given object with the given `glob` pattern + * and `options`. Does not attempt to match nested keys. If you need this feature, + * use [glob-object][] instead. + * + * ```js + * const mm = require('micromatch'); + * // mm.matchKeys(object, patterns[, options]); + * + * const obj = { aa: 'a', ab: 'b', ac: 'c' }; + * console.log(mm.matchKeys(obj, '*b')); + * //=> { ab: 'b' } + * ``` + * @param {Object} `object` The object with keys to filter. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Object} Returns an object with only keys that match the given patterns. + * @api public + */ + +micromatch.matchKeys = (obj, patterns, options) => { + if (!utils.isObject(obj)) { + throw new TypeError('Expected the first argument to be an object'); + } + let keys = micromatch(Object.keys(obj), patterns, options); + let res = {}; + for (let key of keys) res[key] = obj[key]; + return res; +}; + +/** + * Returns true if some of the strings in the given `list` match any of the given glob `patterns`. + * + * ```js + * const mm = require('micromatch'); + * // mm.some(list, patterns[, options]); + * + * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); + * // true + * console.log(mm.some(['foo.js'], ['*.js', '!foo.js'])); + * // false + * ``` + * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list` + * @api public + */ + +micromatch.some = (list, patterns, options) => { + let items = [].concat(list); + + for (let pattern of [].concat(patterns)) { + let isMatch = picomatch(String(pattern), options); + if (items.some(item => isMatch(item))) { + return true; + } + } + return false; +}; + +/** + * Returns true if every string in the given `list` matches + * any of the given glob `patterns`. + * + * ```js + * const mm = require('micromatch'); + * // mm.every(list, patterns[, options]); + * + * console.log(mm.every('foo.js', ['foo.js'])); + * // true + * console.log(mm.every(['foo.js', 'bar.js'], ['*.js'])); + * // true + * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); + * // false + * console.log(mm.every(['foo.js'], ['*.js', '!foo.js'])); + * // false + * ``` + * @param {String|Array} `list` The string or array of strings to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list` + * @api public + */ + +micromatch.every = (list, patterns, options) => { + let items = [].concat(list); + + for (let pattern of [].concat(patterns)) { + let isMatch = picomatch(String(pattern), options); + if (!items.every(item => isMatch(item))) { + return false; + } + } + return true; +}; + +/** + * Returns true if **all** of the given `patterns` match + * the specified string. + * + * ```js + * const mm = require('micromatch'); + * // mm.all(string, patterns[, options]); + * + * console.log(mm.all('foo.js', ['foo.js'])); + * // true + * + * console.log(mm.all('foo.js', ['*.js', '!foo.js'])); + * // false + * + * console.log(mm.all('foo.js', ['*.js', 'foo.js'])); + * // true + * + * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js'])); + * // true + * ``` + * @param {String|Array} `str` The string to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +micromatch.all = (str, patterns, options) => { + if (typeof str !== 'string') { + throw new TypeError(`Expected a string: "${util.inspect(str)}"`); + } + + return [].concat(patterns).every(p => picomatch(p, options)(str)); +}; + +/** + * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match. + * + * ```js + * const mm = require('micromatch'); + * // mm.capture(pattern, string[, options]); + * + * console.log(mm.capture('test/*.js', 'test/foo.js')); + * //=> ['foo'] + * console.log(mm.capture('test/*.js', 'foo/bar.css')); + * //=> null + * ``` + * @param {String} `glob` Glob pattern to use for matching. + * @param {String} `input` String to match + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`. + * @api public + */ + +micromatch.capture = (glob, input, options) => { + let posix = utils.isWindows(options); + let regex = picomatch.makeRe(String(glob), { ...options, capture: true }); + let match = regex.exec(posix ? utils.toPosixSlashes(input) : input); + + if (match) { + return match.slice(1).map(v => v === void 0 ? '' : v); + } +}; + +/** + * Create a regular expression from the given glob `pattern`. + * + * ```js + * const mm = require('micromatch'); + * // mm.makeRe(pattern[, options]); + * + * console.log(mm.makeRe('*.js')); + * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/ + * ``` + * @param {String} `pattern` A glob pattern to convert to regex. + * @param {Object} `options` + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ + +micromatch.makeRe = (...args) => picomatch.makeRe(...args); + +/** + * Scan a glob pattern to separate the pattern into segments. Used + * by the [split](#split) method. + * + * ```js + * const mm = require('micromatch'); + * const state = mm.scan(pattern[, options]); + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} Returns an object with + * @api public + */ + +micromatch.scan = (...args) => picomatch.scan(...args); + +/** + * Parse a glob pattern to create the source string for a regular + * expression. + * + * ```js + * const mm = require('micromatch'); + * const state = mm.parse(pattern[, options]); + * ``` + * @param {String} `glob` + * @param {Object} `options` + * @return {Object} Returns an object with useful properties and output to be used as regex source string. + * @api public + */ + +micromatch.parse = (patterns, options) => { + let res = []; + for (let pattern of [].concat(patterns || [])) { + for (let str of braces(String(pattern), options)) { + res.push(picomatch.parse(str, options)); + } + } + return res; +}; + +/** + * Process the given brace `pattern`. + * + * ```js + * const { braces } = require('micromatch'); + * console.log(braces('foo/{a,b,c}/bar')); + * //=> [ 'foo/(a|b|c)/bar' ] + * + * console.log(braces('foo/{a,b,c}/bar', { expand: true })); + * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ] + * ``` + * @param {String} `pattern` String with brace pattern to process. + * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options. + * @return {Array} + * @api public + */ + +micromatch.braces = (pattern, options) => { + if (typeof pattern !== 'string') throw new TypeError('Expected a string'); + if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) { + return [pattern]; + } + return braces(pattern, options); +}; + +/** + * Expand braces + */ + +micromatch.braceExpand = (pattern, options) => { + if (typeof pattern !== 'string') throw new TypeError('Expected a string'); + return micromatch.braces(pattern, { ...options, expand: true }); +}; + +/** + * Expose micromatch + */ + +module.exports = micromatch; diff --git a/tools/node_modules/eslint/node_modules/micromatch/package.json b/tools/node_modules/eslint/node_modules/micromatch/package.json new file mode 100644 index 00000000000..6061d5be741 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/micromatch/package.json @@ -0,0 +1,119 @@ +{ + "name": "micromatch", + "description": "Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch.", + "version": "4.0.5", + "homepage": "https://github.com/micromatch/micromatch", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "(https://github.com/DianeLooney)", + "Amila Welihinda (amilajack.com)", + "Bogdan Chadkin (https://github.com/TrySound)", + "Brian Woodward (https://twitter.com/doowb)", + "Devon Govett (http://badassjs.com)", + "Elan Shanker (https://github.com/es128)", + "Fabrício Matté (https://ultcombo.js.org)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Martin Kolárik (https://kolarik.sk)", + "Olsten Larck (https://i.am.charlike.online)", + "Paul Miller (paulmillr.com)", + "Tom Byrer (https://github.com/tomByrer)", + "Tyler Akins (http://rumkin.com)", + "Peter Bright (https://github.com/drpizza)", + "Kuba Juszczyk (https://github.com/ku8ar)" + ], + "repository": "micromatch/micromatch", + "bugs": { + "url": "https://github.com/micromatch/micromatch/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=8.6" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "devDependencies": { + "fill-range": "^7.0.1", + "gulp-format-md": "^2.0.0", + "minimatch": "^5.0.1", + "mocha": "^9.2.2", + "time-require": "github:jonschlinkert/time-require" + }, + "keywords": [ + "bash", + "bracket", + "character-class", + "expand", + "expansion", + "expression", + "extglob", + "extglobs", + "file", + "files", + "filter", + "find", + "glob", + "globbing", + "globs", + "globstar", + "lookahead", + "lookaround", + "lookbehind", + "match", + "matcher", + "matches", + "matching", + "micromatch", + "minimatch", + "multimatch", + "negate", + "negation", + "path", + "pattern", + "patterns", + "posix", + "regex", + "regexp", + "regular", + "shell", + "star", + "wildcard" + ], + "verb": { + "toc": "collapsible", + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "related": { + "list": [ + "braces", + "expand-brackets", + "extglob", + "fill-range", + "nanomatch" + ] + }, + "reflinks": [ + "extglob", + "fill-range", + "glob-object", + "minimatch", + "multimatch" + ] + } +} diff --git a/tools/node_modules/eslint/node_modules/minimist/LICENSE b/tools/node_modules/eslint/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b441..00000000000 --- a/tools/node_modules/eslint/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/minimist/index.js b/tools/node_modules/eslint/node_modules/minimist/index.js deleted file mode 100644 index d2afe5e4d40..00000000000 --- a/tools/node_modules/eslint/node_modules/minimist/index.js +++ /dev/null @@ -1,245 +0,0 @@ -module.exports = function (args, opts) { - if (!opts) opts = {}; - - var flags = { bools : {}, strings : {}, unknownFn: null }; - - if (typeof opts['unknown'] === 'function') { - flags.unknownFn = opts['unknown']; - } - - if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { - flags.allBools = true; - } else { - [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - } - - var aliases = {}; - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); - - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - if (aliases[key]) { - flags.strings[aliases[key]] = true; - } - }); - - var defaults = opts['default'] || {}; - - var argv = { _ : [] }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; - - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--')+1); - args = args.slice(0, args.indexOf('--')); - } - - function argDefined(key, arg) { - return (flags.allBools && /^--[^=]+$/.test(arg)) || - flags.strings[key] || flags.bools[key] || aliases[key]; - } - - function setArg (key, val, arg) { - if (arg && flags.unknownFn && !argDefined(key, arg)) { - if (flags.unknownFn(arg) === false) return; - } - - var value = !flags.strings[key] && isNumber(val) - ? Number(val) : val - ; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } - - function setKey (obj, keys, value) { - var o = obj; - for (var i = 0; i < keys.length-1; i++) { - var key = keys[i]; - if (key === '__proto__') return; - if (o[key] === undefined) o[key] = {}; - if (o[key] === Object.prototype || o[key] === Number.prototype - || o[key] === String.prototype) o[key] = {}; - if (o[key] === Array.prototype) o[key] = []; - o = o[key]; - } - - var key = keys[keys.length - 1]; - if (key === '__proto__') return; - if (o === Object.prototype || o === Number.prototype - || o === String.prototype) o = {}; - if (o === Array.prototype) o = []; - if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { - o[key] = value; - } - else if (Array.isArray(o[key])) { - o[key].push(value); - } - else { - o[key] = [ o[key], value ]; - } - } - - function aliasIsBoolean(key) { - return aliases[key].some(function (x) { - return flags.bools[x]; - }); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (/^--.+=/.test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - var key = m[1]; - var value = m[2]; - if (flags.bools[key]) { - value = value !== 'false'; - } - setArg(key, value, arg); - } - else if (/^--no-.+/.test(arg)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false, arg); - } - else if (/^--.+/.test(arg)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !/^-/.test(next) - && !flags.bools[key] - && !flags.allBools - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, next, arg); - i++; - } - else if (/^(true|false)$/.test(next)) { - setArg(key, next === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - else if (/^-[^-]+/.test(arg)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - var next = arg.slice(j+2); - - if (next === '-') { - setArg(letters[j], next, arg) - continue; - } - - if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { - setArg(letters[j], next.split('=')[1], arg); - broken = true; - break; - } - - if (/[A-Za-z]/.test(letters[j]) - && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next, arg); - broken = true; - break; - } - - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2), arg); - broken = true; - break; - } - else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); - } - } - - var key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) - && !flags.bools[key] - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, args[i+1], arg); - i++; - } - else if (args[i+1] && /^(true|false)$/.test(args[i+1])) { - setArg(key, args[i+1] === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - } - else { - if (!flags.unknownFn || flags.unknownFn(arg) !== false) { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ); - } - if (opts.stopEarly) { - argv._.push.apply(argv._, args.slice(i + 1)); - break; - } - } - } - - Object.keys(defaults).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) { - setKey(argv, key.split('.'), defaults[key]); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[key]); - }); - } - }); - - if (opts['--']) { - argv['--'] = new Array(); - notFlags.forEach(function(key) { - argv['--'].push(key); - }); - } - else { - notFlags.forEach(function(key) { - argv._.push(key); - }); - } - - return argv; -}; - -function hasKey (obj, keys) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - o = (o[key] || {}); - }); - - var key = keys[keys.length - 1]; - return key in o; -} - -function isNumber (x) { - if (typeof x === 'number') return true; - if (/^0x[0-9a-f]+$/i.test(x)) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); -} - diff --git a/tools/node_modules/eslint/node_modules/minimist/package.json b/tools/node_modules/eslint/node_modules/minimist/package.json deleted file mode 100644 index c091d41375f..00000000000 --- a/tools/node_modules/eslint/node_modules/minimist/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "minimist", - "version": "1.2.5", - "description": "parse argument options", - "main": "index.js", - "devDependencies": { - "covert": "^1.0.0", - "tap": "~0.4.0", - "tape": "^3.5.0" - }, - "scripts": { - "test": "tap test/*.js", - "coverage": "covert test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/6..latest", - "ff/5", - "firefox/latest", - "chrome/10", - "chrome/latest", - "safari/5.1", - "safari/latest", - "opera/12" - ] - }, - "repository": { - "type": "git", - "url": "git://github.com/substack/minimist.git" - }, - "homepage": "https://github.com/substack/minimist", - "keywords": [ - "argv", - "getopt", - "parser", - "optimist" - ], - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "license": "MIT" -} diff --git a/tools/node_modules/eslint/node_modules/minimist/readme.markdown b/tools/node_modules/eslint/node_modules/minimist/readme.markdown deleted file mode 100644 index 5fd97ab11ee..00000000000 --- a/tools/node_modules/eslint/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,95 +0,0 @@ -# minimist - -parse argument options - -This module is the guts of optimist's argument parser without all the -fanciful decoration. - -# example - -``` js -var argv = require('minimist')(process.argv.slice(2)); -console.log(argv); -``` - -``` -$ node example/parse.js -a beep -b boop -{ _: [], a: 'beep', b: 'boop' } -``` - -``` -$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz -{ _: [ 'foo', 'bar', 'baz' ], - x: 3, - y: 4, - n: 5, - a: true, - b: true, - c: true, - beep: 'boop' } -``` - -# security - -Previous versions had a prototype pollution bug that could cause privilege -escalation in some circumstances when handling untrusted user input. - -Please use version 1.2.3 or later: https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 - -# methods - -``` js -var parseArgs = require('minimist') -``` - -## var argv = parseArgs(args, opts={}) - -Return an argument object `argv` populated with the array arguments from `args`. - -`argv._` contains all the arguments that didn't have an option associated with -them. - -Numeric-looking arguments will be returned as numbers unless `opts.string` or -`opts.boolean` is set for that argument name. - -Any arguments after `'--'` will not be parsed and will end up in `argv._`. - -options can be: - -* `opts.string` - a string or array of strings argument names to always treat as -strings -* `opts.boolean` - a boolean, string or array of strings to always treat as -booleans. if `true` will treat all double hyphenated arguments without equal signs -as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) -* `opts.alias` - an object mapping string names to strings or arrays of string -argument names to use as aliases -* `opts.default` - an object mapping string argument names to default values -* `opts.stopEarly` - when true, populate `argv._` with everything after the -first non-option -* `opts['--']` - when true, populate `argv._` with everything before the `--` -and `argv['--']` with everything after the `--`. Here's an example: - - ``` - > require('./')('one two three -- four five --six'.split(' '), { '--': true }) - { _: [ 'one', 'two', 'three' ], - '--': [ 'four', 'five', '--six' ] } - ``` - - Note that with `opts['--']` set, parsing for arguments still stops after the - `--`. - -* `opts.unknown` - a function which is invoked with a command line parameter not -defined in the `opts` configuration object. If the function returns `false`, the -unknown option is not added to `argv`. - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install minimist -``` - -# license - -MIT diff --git a/tools/node_modules/eslint/node_modules/node-releases/data/processed/envs.json b/tools/node_modules/eslint/node_modules/node-releases/data/processed/envs.json index 812935d265a..80b4be3cff9 100644 --- a/tools/node_modules/eslint/node_modules/node-releases/data/processed/envs.json +++ b/tools/node_modules/eslint/node_modules/node-releases/data/processed/envs.json @@ -1 +1 @@ -[{"name":"nodejs","version":"0.2.0","date":"2011-08-26","lts":false,"security":false},{"name":"nodejs","version":"0.3.0","date":"2011-08-26","lts":false,"security":false},{"name":"nodejs","version":"0.4.0","date":"2011-08-26","lts":false,"security":false},{"name":"nodejs","version":"0.5.0","date":"2011-08-26","lts":false,"security":false},{"name":"nodejs","version":"0.6.0","date":"2011-11-04","lts":false,"security":false},{"name":"nodejs","version":"0.7.0","date":"2012-01-17","lts":false,"security":false},{"name":"nodejs","version":"0.8.0","date":"2012-06-22","lts":false,"security":false},{"name":"nodejs","version":"0.9.0","date":"2012-07-20","lts":false,"security":false},{"name":"nodejs","version":"0.10.0","date":"2013-03-11","lts":false,"security":false},{"name":"nodejs","version":"0.11.0","date":"2013-03-28","lts":false,"security":false},{"name":"nodejs","version":"0.12.0","date":"2015-02-06","lts":false,"security":false},{"name":"nodejs","version":"4.0.0","date":"2015-09-08","lts":false,"security":false},{"name":"nodejs","version":"4.1.0","date":"2015-09-17","lts":false,"security":false},{"name":"nodejs","version":"4.2.0","date":"2015-10-12","lts":"Argon","security":false},{"name":"nodejs","version":"4.3.0","date":"2016-02-09","lts":"Argon","security":false},{"name":"nodejs","version":"4.4.0","date":"2016-03-08","lts":"Argon","security":false},{"name":"nodejs","version":"4.5.0","date":"2016-08-16","lts":"Argon","security":false},{"name":"nodejs","version":"4.6.0","date":"2016-09-27","lts":"Argon","security":true},{"name":"nodejs","version":"4.7.0","date":"2016-12-06","lts":"Argon","security":false},{"name":"nodejs","version":"4.8.0","date":"2017-02-21","lts":"Argon","security":false},{"name":"nodejs","version":"4.9.0","date":"2018-03-28","lts":"Argon","security":true},{"name":"nodejs","version":"5.0.0","date":"2015-10-29","lts":false,"security":false},{"name":"nodejs","version":"5.1.0","date":"2015-11-17","lts":false,"security":false},{"name":"nodejs","version":"5.2.0","date":"2015-12-09","lts":false,"security":false},{"name":"nodejs","version":"5.3.0","date":"2015-12-15","lts":false,"security":false},{"name":"nodejs","version":"5.4.0","date":"2016-01-06","lts":false,"security":false},{"name":"nodejs","version":"5.5.0","date":"2016-01-21","lts":false,"security":false},{"name":"nodejs","version":"5.6.0","date":"2016-02-09","lts":false,"security":false},{"name":"nodejs","version":"5.7.0","date":"2016-02-23","lts":false,"security":false},{"name":"nodejs","version":"5.8.0","date":"2016-03-09","lts":false,"security":false},{"name":"nodejs","version":"5.9.0","date":"2016-03-16","lts":false,"security":false},{"name":"nodejs","version":"5.10.0","date":"2016-04-01","lts":false,"security":false},{"name":"nodejs","version":"5.11.0","date":"2016-04-21","lts":false,"security":false},{"name":"nodejs","version":"5.12.0","date":"2016-06-23","lts":false,"security":false},{"name":"nodejs","version":"6.0.0","date":"2016-04-26","lts":false,"security":false},{"name":"nodejs","version":"6.1.0","date":"2016-05-05","lts":false,"security":false},{"name":"nodejs","version":"6.2.0","date":"2016-05-17","lts":false,"security":false},{"name":"nodejs","version":"6.3.0","date":"2016-07-06","lts":false,"security":false},{"name":"nodejs","version":"6.4.0","date":"2016-08-12","lts":false,"security":false},{"name":"nodejs","version":"6.5.0","date":"2016-08-26","lts":false,"security":false},{"name":"nodejs","version":"6.6.0","date":"2016-09-14","lts":false,"security":false},{"name":"nodejs","version":"6.7.0","date":"2016-09-27","lts":false,"security":true},{"name":"nodejs","version":"6.8.0","date":"2016-10-12","lts":false,"security":false},{"name":"nodejs","version":"6.9.0","date":"2016-10-18","lts":"Boron","security":false},{"name":"nodejs","version":"6.10.0","date":"2017-02-21","lts":"Boron","security":false},{"name":"nodejs","version":"6.11.0","date":"2017-06-06","lts":"Boron","security":false},{"name":"nodejs","version":"6.12.0","date":"2017-11-06","lts":"Boron","security":false},{"name":"nodejs","version":"6.13.0","date":"2018-02-10","lts":"Boron","security":false},{"name":"nodejs","version":"6.14.0","date":"2018-03-28","lts":"Boron","security":true},{"name":"nodejs","version":"6.15.0","date":"2018-11-27","lts":"Boron","security":true},{"name":"nodejs","version":"6.16.0","date":"2018-12-26","lts":"Boron","security":false},{"name":"nodejs","version":"6.17.0","date":"2019-02-28","lts":"Boron","security":true},{"name":"nodejs","version":"7.0.0","date":"2016-10-25","lts":false,"security":false},{"name":"nodejs","version":"7.1.0","date":"2016-11-08","lts":false,"security":false},{"name":"nodejs","version":"7.2.0","date":"2016-11-22","lts":false,"security":false},{"name":"nodejs","version":"7.3.0","date":"2016-12-20","lts":false,"security":false},{"name":"nodejs","version":"7.4.0","date":"2017-01-04","lts":false,"security":false},{"name":"nodejs","version":"7.5.0","date":"2017-01-31","lts":false,"security":false},{"name":"nodejs","version":"7.6.0","date":"2017-02-21","lts":false,"security":false},{"name":"nodejs","version":"7.7.0","date":"2017-02-28","lts":false,"security":false},{"name":"nodejs","version":"7.8.0","date":"2017-03-29","lts":false,"security":false},{"name":"nodejs","version":"7.9.0","date":"2017-04-11","lts":false,"security":false},{"name":"nodejs","version":"7.10.0","date":"2017-05-02","lts":false,"security":false},{"name":"nodejs","version":"8.0.0","date":"2017-05-30","lts":false,"security":false},{"name":"nodejs","version":"8.1.0","date":"2017-06-08","lts":false,"security":false},{"name":"nodejs","version":"8.2.0","date":"2017-07-19","lts":false,"security":false},{"name":"nodejs","version":"8.3.0","date":"2017-08-08","lts":false,"security":false},{"name":"nodejs","version":"8.4.0","date":"2017-08-15","lts":false,"security":false},{"name":"nodejs","version":"8.5.0","date":"2017-09-12","lts":false,"security":false},{"name":"nodejs","version":"8.6.0","date":"2017-09-26","lts":false,"security":false},{"name":"nodejs","version":"8.7.0","date":"2017-10-11","lts":false,"security":false},{"name":"nodejs","version":"8.8.0","date":"2017-10-24","lts":false,"security":false},{"name":"nodejs","version":"8.9.0","date":"2017-10-31","lts":"Carbon","security":false},{"name":"nodejs","version":"8.10.0","date":"2018-03-06","lts":"Carbon","security":false},{"name":"nodejs","version":"8.11.0","date":"2018-03-28","lts":"Carbon","security":true},{"name":"nodejs","version":"8.12.0","date":"2018-09-10","lts":"Carbon","security":false},{"name":"nodejs","version":"8.13.0","date":"2018-11-20","lts":"Carbon","security":false},{"name":"nodejs","version":"8.14.0","date":"2018-11-27","lts":"Carbon","security":true},{"name":"nodejs","version":"8.15.0","date":"2018-12-26","lts":"Carbon","security":false},{"name":"nodejs","version":"8.16.0","date":"2019-04-16","lts":"Carbon","security":false},{"name":"nodejs","version":"8.17.0","date":"2019-12-17","lts":"Carbon","security":true},{"name":"nodejs","version":"9.0.0","date":"2017-10-31","lts":false,"security":false},{"name":"nodejs","version":"9.1.0","date":"2017-11-07","lts":false,"security":false},{"name":"nodejs","version":"9.2.0","date":"2017-11-14","lts":false,"security":false},{"name":"nodejs","version":"9.3.0","date":"2017-12-12","lts":false,"security":false},{"name":"nodejs","version":"9.4.0","date":"2018-01-10","lts":false,"security":false},{"name":"nodejs","version":"9.5.0","date":"2018-01-31","lts":false,"security":false},{"name":"nodejs","version":"9.6.0","date":"2018-02-21","lts":false,"security":false},{"name":"nodejs","version":"9.7.0","date":"2018-03-01","lts":false,"security":false},{"name":"nodejs","version":"9.8.0","date":"2018-03-07","lts":false,"security":false},{"name":"nodejs","version":"9.9.0","date":"2018-03-21","lts":false,"security":false},{"name":"nodejs","version":"9.10.0","date":"2018-03-28","lts":false,"security":true},{"name":"nodejs","version":"9.11.0","date":"2018-04-04","lts":false,"security":false},{"name":"nodejs","version":"10.0.0","date":"2018-04-24","lts":false,"security":false},{"name":"nodejs","version":"10.1.0","date":"2018-05-08","lts":false,"security":false},{"name":"nodejs","version":"10.2.0","date":"2018-05-23","lts":false,"security":false},{"name":"nodejs","version":"10.3.0","date":"2018-05-29","lts":false,"security":false},{"name":"nodejs","version":"10.4.0","date":"2018-06-06","lts":false,"security":false},{"name":"nodejs","version":"10.5.0","date":"2018-06-20","lts":false,"security":false},{"name":"nodejs","version":"10.6.0","date":"2018-07-04","lts":false,"security":false},{"name":"nodejs","version":"10.7.0","date":"2018-07-18","lts":false,"security":false},{"name":"nodejs","version":"10.8.0","date":"2018-08-01","lts":false,"security":false},{"name":"nodejs","version":"10.9.0","date":"2018-08-15","lts":false,"security":false},{"name":"nodejs","version":"10.10.0","date":"2018-09-06","lts":false,"security":false},{"name":"nodejs","version":"10.11.0","date":"2018-09-19","lts":false,"security":false},{"name":"nodejs","version":"10.12.0","date":"2018-10-10","lts":false,"security":false},{"name":"nodejs","version":"10.13.0","date":"2018-10-30","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.14.0","date":"2018-11-27","lts":"Dubnium","security":true},{"name":"nodejs","version":"10.15.0","date":"2018-12-26","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.16.0","date":"2019-05-28","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.17.0","date":"2019-10-22","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.18.0","date":"2019-12-17","lts":"Dubnium","security":true},{"name":"nodejs","version":"10.19.0","date":"2020-02-05","lts":"Dubnium","security":true},{"name":"nodejs","version":"10.20.0","date":"2020-03-26","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.21.0","date":"2020-06-02","lts":"Dubnium","security":true},{"name":"nodejs","version":"10.22.0","date":"2020-07-21","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.23.0","date":"2020-10-27","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.24.0","date":"2021-02-23","lts":"Dubnium","security":true},{"name":"nodejs","version":"11.0.0","date":"2018-10-23","lts":false,"security":false},{"name":"nodejs","version":"11.1.0","date":"2018-10-30","lts":false,"security":false},{"name":"nodejs","version":"11.2.0","date":"2018-11-15","lts":false,"security":false},{"name":"nodejs","version":"11.3.0","date":"2018-11-27","lts":false,"security":true},{"name":"nodejs","version":"11.4.0","date":"2018-12-07","lts":false,"security":false},{"name":"nodejs","version":"11.5.0","date":"2018-12-18","lts":false,"security":false},{"name":"nodejs","version":"11.6.0","date":"2018-12-26","lts":false,"security":false},{"name":"nodejs","version":"11.7.0","date":"2019-01-17","lts":false,"security":false},{"name":"nodejs","version":"11.8.0","date":"2019-01-24","lts":false,"security":false},{"name":"nodejs","version":"11.9.0","date":"2019-01-30","lts":false,"security":false},{"name":"nodejs","version":"11.10.0","date":"2019-02-14","lts":false,"security":false},{"name":"nodejs","version":"11.11.0","date":"2019-03-05","lts":false,"security":false},{"name":"nodejs","version":"11.12.0","date":"2019-03-14","lts":false,"security":false},{"name":"nodejs","version":"11.13.0","date":"2019-03-28","lts":false,"security":false},{"name":"nodejs","version":"11.14.0","date":"2019-04-10","lts":false,"security":false},{"name":"nodejs","version":"11.15.0","date":"2019-04-30","lts":false,"security":false},{"name":"nodejs","version":"12.0.0","date":"2019-04-23","lts":false,"security":false},{"name":"nodejs","version":"12.1.0","date":"2019-04-29","lts":false,"security":false},{"name":"nodejs","version":"12.2.0","date":"2019-05-07","lts":false,"security":false},{"name":"nodejs","version":"12.3.0","date":"2019-05-21","lts":false,"security":false},{"name":"nodejs","version":"12.4.0","date":"2019-06-04","lts":false,"security":false},{"name":"nodejs","version":"12.5.0","date":"2019-06-26","lts":false,"security":false},{"name":"nodejs","version":"12.6.0","date":"2019-07-03","lts":false,"security":false},{"name":"nodejs","version":"12.7.0","date":"2019-07-23","lts":false,"security":false},{"name":"nodejs","version":"12.8.0","date":"2019-08-06","lts":false,"security":false},{"name":"nodejs","version":"12.9.0","date":"2019-08-20","lts":false,"security":false},{"name":"nodejs","version":"12.10.0","date":"2019-09-04","lts":false,"security":false},{"name":"nodejs","version":"12.11.0","date":"2019-09-25","lts":false,"security":false},{"name":"nodejs","version":"12.12.0","date":"2019-10-11","lts":false,"security":false},{"name":"nodejs","version":"12.13.0","date":"2019-10-21","lts":"Erbium","security":false},{"name":"nodejs","version":"12.14.0","date":"2019-12-17","lts":"Erbium","security":true},{"name":"nodejs","version":"12.15.0","date":"2020-02-05","lts":"Erbium","security":true},{"name":"nodejs","version":"12.16.0","date":"2020-02-11","lts":"Erbium","security":false},{"name":"nodejs","version":"12.17.0","date":"2020-05-26","lts":"Erbium","security":false},{"name":"nodejs","version":"12.18.0","date":"2020-06-02","lts":"Erbium","security":true},{"name":"nodejs","version":"12.19.0","date":"2020-10-06","lts":"Erbium","security":false},{"name":"nodejs","version":"12.20.0","date":"2020-11-24","lts":"Erbium","security":false},{"name":"nodejs","version":"12.21.0","date":"2021-02-23","lts":"Erbium","security":true},{"name":"nodejs","version":"12.22.0","date":"2021-03-30","lts":"Erbium","security":false},{"name":"nodejs","version":"13.0.0","date":"2019-10-22","lts":false,"security":false},{"name":"nodejs","version":"13.1.0","date":"2019-11-05","lts":false,"security":false},{"name":"nodejs","version":"13.2.0","date":"2019-11-21","lts":false,"security":false},{"name":"nodejs","version":"13.3.0","date":"2019-12-03","lts":false,"security":false},{"name":"nodejs","version":"13.4.0","date":"2019-12-17","lts":false,"security":true},{"name":"nodejs","version":"13.5.0","date":"2019-12-18","lts":false,"security":false},{"name":"nodejs","version":"13.6.0","date":"2020-01-07","lts":false,"security":false},{"name":"nodejs","version":"13.7.0","date":"2020-01-21","lts":false,"security":false},{"name":"nodejs","version":"13.8.0","date":"2020-02-05","lts":false,"security":true},{"name":"nodejs","version":"13.9.0","date":"2020-02-18","lts":false,"security":false},{"name":"nodejs","version":"13.10.0","date":"2020-03-04","lts":false,"security":false},{"name":"nodejs","version":"13.11.0","date":"2020-03-12","lts":false,"security":false},{"name":"nodejs","version":"13.12.0","date":"2020-03-26","lts":false,"security":false},{"name":"nodejs","version":"13.13.0","date":"2020-04-14","lts":false,"security":false},{"name":"nodejs","version":"13.14.0","date":"2020-04-29","lts":false,"security":false},{"name":"nodejs","version":"14.0.0","date":"2020-04-21","lts":false,"security":false},{"name":"nodejs","version":"14.1.0","date":"2020-04-29","lts":false,"security":false},{"name":"nodejs","version":"14.2.0","date":"2020-05-05","lts":false,"security":false},{"name":"nodejs","version":"14.3.0","date":"2020-05-19","lts":false,"security":false},{"name":"nodejs","version":"14.4.0","date":"2020-06-02","lts":false,"security":true},{"name":"nodejs","version":"14.5.0","date":"2020-06-30","lts":false,"security":false},{"name":"nodejs","version":"14.6.0","date":"2020-07-20","lts":false,"security":false},{"name":"nodejs","version":"14.7.0","date":"2020-07-29","lts":false,"security":false},{"name":"nodejs","version":"14.8.0","date":"2020-08-11","lts":false,"security":false},{"name":"nodejs","version":"14.9.0","date":"2020-08-27","lts":false,"security":false},{"name":"nodejs","version":"14.10.0","date":"2020-09-08","lts":false,"security":false},{"name":"nodejs","version":"14.11.0","date":"2020-09-15","lts":false,"security":true},{"name":"nodejs","version":"14.12.0","date":"2020-09-22","lts":false,"security":false},{"name":"nodejs","version":"14.13.0","date":"2020-09-29","lts":false,"security":false},{"name":"nodejs","version":"14.14.0","date":"2020-10-15","lts":false,"security":false},{"name":"nodejs","version":"14.15.0","date":"2020-10-27","lts":"Fermium","security":false},{"name":"nodejs","version":"14.16.0","date":"2021-02-23","lts":"Fermium","security":true},{"name":"nodejs","version":"14.17.0","date":"2021-05-11","lts":"Fermium","security":false},{"name":"nodejs","version":"14.18.0","date":"2021-09-28","lts":"Fermium","security":false},{"name":"nodejs","version":"14.19.0","date":"2022-02-01","lts":"Fermium","security":false},{"name":"nodejs","version":"15.0.0","date":"2020-10-20","lts":false,"security":false},{"name":"nodejs","version":"15.1.0","date":"2020-11-04","lts":false,"security":false},{"name":"nodejs","version":"15.2.0","date":"2020-11-10","lts":false,"security":false},{"name":"nodejs","version":"15.3.0","date":"2020-11-24","lts":false,"security":false},{"name":"nodejs","version":"15.4.0","date":"2020-12-09","lts":false,"security":false},{"name":"nodejs","version":"15.5.0","date":"2020-12-22","lts":false,"security":false},{"name":"nodejs","version":"15.6.0","date":"2021-01-14","lts":false,"security":false},{"name":"nodejs","version":"15.7.0","date":"2021-01-25","lts":false,"security":false},{"name":"nodejs","version":"15.8.0","date":"2021-02-02","lts":false,"security":false},{"name":"nodejs","version":"15.9.0","date":"2021-02-18","lts":false,"security":false},{"name":"nodejs","version":"15.10.0","date":"2021-02-23","lts":false,"security":true},{"name":"nodejs","version":"15.11.0","date":"2021-03-03","lts":false,"security":false},{"name":"nodejs","version":"15.12.0","date":"2021-03-17","lts":false,"security":false},{"name":"nodejs","version":"15.13.0","date":"2021-03-31","lts":false,"security":false},{"name":"nodejs","version":"15.14.0","date":"2021-04-06","lts":false,"security":false},{"name":"nodejs","version":"16.0.0","date":"2021-04-20","lts":false,"security":false},{"name":"nodejs","version":"16.1.0","date":"2021-05-04","lts":false,"security":false},{"name":"nodejs","version":"16.2.0","date":"2021-05-19","lts":false,"security":false},{"name":"nodejs","version":"16.3.0","date":"2021-06-03","lts":false,"security":false},{"name":"nodejs","version":"16.4.0","date":"2021-06-23","lts":false,"security":false},{"name":"nodejs","version":"16.5.0","date":"2021-07-14","lts":false,"security":false},{"name":"nodejs","version":"16.6.0","date":"2021-07-29","lts":false,"security":true},{"name":"nodejs","version":"16.7.0","date":"2021-08-18","lts":false,"security":false},{"name":"nodejs","version":"16.8.0","date":"2021-08-25","lts":false,"security":false},{"name":"nodejs","version":"16.9.0","date":"2021-09-07","lts":false,"security":false},{"name":"nodejs","version":"16.10.0","date":"2021-09-22","lts":false,"security":false},{"name":"nodejs","version":"16.11.0","date":"2021-10-08","lts":false,"security":false},{"name":"nodejs","version":"16.12.0","date":"2021-10-20","lts":false,"security":false},{"name":"nodejs","version":"16.13.0","date":"2021-10-26","lts":"Gallium","security":false},{"name":"nodejs","version":"17.0.0","date":"2021-10-19","lts":false,"security":false},{"name":"nodejs","version":"17.1.0","date":"2021-11-09","lts":false,"security":false},{"name":"nodejs","version":"17.2.0","date":"2021-11-30","lts":false,"security":false},{"name":"nodejs","version":"17.3.0","date":"2021-12-17","lts":false,"security":false},{"name":"nodejs","version":"17.4.0","date":"2022-01-18","lts":false,"security":false}] \ No newline at end of file +[{"name":"nodejs","version":"0.2.0","date":"2011-08-26","lts":false,"security":false},{"name":"nodejs","version":"0.3.0","date":"2011-08-26","lts":false,"security":false},{"name":"nodejs","version":"0.4.0","date":"2011-08-26","lts":false,"security":false},{"name":"nodejs","version":"0.5.0","date":"2011-08-26","lts":false,"security":false},{"name":"nodejs","version":"0.6.0","date":"2011-11-04","lts":false,"security":false},{"name":"nodejs","version":"0.7.0","date":"2012-01-17","lts":false,"security":false},{"name":"nodejs","version":"0.8.0","date":"2012-06-22","lts":false,"security":false},{"name":"nodejs","version":"0.9.0","date":"2012-07-20","lts":false,"security":false},{"name":"nodejs","version":"0.10.0","date":"2013-03-11","lts":false,"security":false},{"name":"nodejs","version":"0.11.0","date":"2013-03-28","lts":false,"security":false},{"name":"nodejs","version":"0.12.0","date":"2015-02-06","lts":false,"security":false},{"name":"nodejs","version":"4.0.0","date":"2015-09-08","lts":false,"security":false},{"name":"nodejs","version":"4.1.0","date":"2015-09-17","lts":false,"security":false},{"name":"nodejs","version":"4.2.0","date":"2015-10-12","lts":"Argon","security":false},{"name":"nodejs","version":"4.3.0","date":"2016-02-09","lts":"Argon","security":false},{"name":"nodejs","version":"4.4.0","date":"2016-03-08","lts":"Argon","security":false},{"name":"nodejs","version":"4.5.0","date":"2016-08-16","lts":"Argon","security":false},{"name":"nodejs","version":"4.6.0","date":"2016-09-27","lts":"Argon","security":true},{"name":"nodejs","version":"4.7.0","date":"2016-12-06","lts":"Argon","security":false},{"name":"nodejs","version":"4.8.0","date":"2017-02-21","lts":"Argon","security":false},{"name":"nodejs","version":"4.9.0","date":"2018-03-28","lts":"Argon","security":true},{"name":"nodejs","version":"5.0.0","date":"2015-10-29","lts":false,"security":false},{"name":"nodejs","version":"5.1.0","date":"2015-11-17","lts":false,"security":false},{"name":"nodejs","version":"5.2.0","date":"2015-12-09","lts":false,"security":false},{"name":"nodejs","version":"5.3.0","date":"2015-12-15","lts":false,"security":false},{"name":"nodejs","version":"5.4.0","date":"2016-01-06","lts":false,"security":false},{"name":"nodejs","version":"5.5.0","date":"2016-01-21","lts":false,"security":false},{"name":"nodejs","version":"5.6.0","date":"2016-02-09","lts":false,"security":false},{"name":"nodejs","version":"5.7.0","date":"2016-02-23","lts":false,"security":false},{"name":"nodejs","version":"5.8.0","date":"2016-03-09","lts":false,"security":false},{"name":"nodejs","version":"5.9.0","date":"2016-03-16","lts":false,"security":false},{"name":"nodejs","version":"5.10.0","date":"2016-04-01","lts":false,"security":false},{"name":"nodejs","version":"5.11.0","date":"2016-04-21","lts":false,"security":false},{"name":"nodejs","version":"5.12.0","date":"2016-06-23","lts":false,"security":false},{"name":"nodejs","version":"6.0.0","date":"2016-04-26","lts":false,"security":false},{"name":"nodejs","version":"6.1.0","date":"2016-05-05","lts":false,"security":false},{"name":"nodejs","version":"6.2.0","date":"2016-05-17","lts":false,"security":false},{"name":"nodejs","version":"6.3.0","date":"2016-07-06","lts":false,"security":false},{"name":"nodejs","version":"6.4.0","date":"2016-08-12","lts":false,"security":false},{"name":"nodejs","version":"6.5.0","date":"2016-08-26","lts":false,"security":false},{"name":"nodejs","version":"6.6.0","date":"2016-09-14","lts":false,"security":false},{"name":"nodejs","version":"6.7.0","date":"2016-09-27","lts":false,"security":true},{"name":"nodejs","version":"6.8.0","date":"2016-10-12","lts":false,"security":false},{"name":"nodejs","version":"6.9.0","date":"2016-10-18","lts":"Boron","security":false},{"name":"nodejs","version":"6.10.0","date":"2017-02-21","lts":"Boron","security":false},{"name":"nodejs","version":"6.11.0","date":"2017-06-06","lts":"Boron","security":false},{"name":"nodejs","version":"6.12.0","date":"2017-11-06","lts":"Boron","security":false},{"name":"nodejs","version":"6.13.0","date":"2018-02-10","lts":"Boron","security":false},{"name":"nodejs","version":"6.14.0","date":"2018-03-28","lts":"Boron","security":true},{"name":"nodejs","version":"6.15.0","date":"2018-11-27","lts":"Boron","security":true},{"name":"nodejs","version":"6.16.0","date":"2018-12-26","lts":"Boron","security":false},{"name":"nodejs","version":"6.17.0","date":"2019-02-28","lts":"Boron","security":true},{"name":"nodejs","version":"7.0.0","date":"2016-10-25","lts":false,"security":false},{"name":"nodejs","version":"7.1.0","date":"2016-11-08","lts":false,"security":false},{"name":"nodejs","version":"7.2.0","date":"2016-11-22","lts":false,"security":false},{"name":"nodejs","version":"7.3.0","date":"2016-12-20","lts":false,"security":false},{"name":"nodejs","version":"7.4.0","date":"2017-01-04","lts":false,"security":false},{"name":"nodejs","version":"7.5.0","date":"2017-01-31","lts":false,"security":false},{"name":"nodejs","version":"7.6.0","date":"2017-02-21","lts":false,"security":false},{"name":"nodejs","version":"7.7.0","date":"2017-02-28","lts":false,"security":false},{"name":"nodejs","version":"7.8.0","date":"2017-03-29","lts":false,"security":false},{"name":"nodejs","version":"7.9.0","date":"2017-04-11","lts":false,"security":false},{"name":"nodejs","version":"7.10.0","date":"2017-05-02","lts":false,"security":false},{"name":"nodejs","version":"8.0.0","date":"2017-05-30","lts":false,"security":false},{"name":"nodejs","version":"8.1.0","date":"2017-06-08","lts":false,"security":false},{"name":"nodejs","version":"8.2.0","date":"2017-07-19","lts":false,"security":false},{"name":"nodejs","version":"8.3.0","date":"2017-08-08","lts":false,"security":false},{"name":"nodejs","version":"8.4.0","date":"2017-08-15","lts":false,"security":false},{"name":"nodejs","version":"8.5.0","date":"2017-09-12","lts":false,"security":false},{"name":"nodejs","version":"8.6.0","date":"2017-09-26","lts":false,"security":false},{"name":"nodejs","version":"8.7.0","date":"2017-10-11","lts":false,"security":false},{"name":"nodejs","version":"8.8.0","date":"2017-10-24","lts":false,"security":false},{"name":"nodejs","version":"8.9.0","date":"2017-10-31","lts":"Carbon","security":false},{"name":"nodejs","version":"8.10.0","date":"2018-03-06","lts":"Carbon","security":false},{"name":"nodejs","version":"8.11.0","date":"2018-03-28","lts":"Carbon","security":true},{"name":"nodejs","version":"8.12.0","date":"2018-09-10","lts":"Carbon","security":false},{"name":"nodejs","version":"8.13.0","date":"2018-11-20","lts":"Carbon","security":false},{"name":"nodejs","version":"8.14.0","date":"2018-11-27","lts":"Carbon","security":true},{"name":"nodejs","version":"8.15.0","date":"2018-12-26","lts":"Carbon","security":false},{"name":"nodejs","version":"8.16.0","date":"2019-04-16","lts":"Carbon","security":false},{"name":"nodejs","version":"8.17.0","date":"2019-12-17","lts":"Carbon","security":true},{"name":"nodejs","version":"9.0.0","date":"2017-10-31","lts":false,"security":false},{"name":"nodejs","version":"9.1.0","date":"2017-11-07","lts":false,"security":false},{"name":"nodejs","version":"9.2.0","date":"2017-11-14","lts":false,"security":false},{"name":"nodejs","version":"9.3.0","date":"2017-12-12","lts":false,"security":false},{"name":"nodejs","version":"9.4.0","date":"2018-01-10","lts":false,"security":false},{"name":"nodejs","version":"9.5.0","date":"2018-01-31","lts":false,"security":false},{"name":"nodejs","version":"9.6.0","date":"2018-02-21","lts":false,"security":false},{"name":"nodejs","version":"9.7.0","date":"2018-03-01","lts":false,"security":false},{"name":"nodejs","version":"9.8.0","date":"2018-03-07","lts":false,"security":false},{"name":"nodejs","version":"9.9.0","date":"2018-03-21","lts":false,"security":false},{"name":"nodejs","version":"9.10.0","date":"2018-03-28","lts":false,"security":true},{"name":"nodejs","version":"9.11.0","date":"2018-04-04","lts":false,"security":false},{"name":"nodejs","version":"10.0.0","date":"2018-04-24","lts":false,"security":false},{"name":"nodejs","version":"10.1.0","date":"2018-05-08","lts":false,"security":false},{"name":"nodejs","version":"10.2.0","date":"2018-05-23","lts":false,"security":false},{"name":"nodejs","version":"10.3.0","date":"2018-05-29","lts":false,"security":false},{"name":"nodejs","version":"10.4.0","date":"2018-06-06","lts":false,"security":false},{"name":"nodejs","version":"10.5.0","date":"2018-06-20","lts":false,"security":false},{"name":"nodejs","version":"10.6.0","date":"2018-07-04","lts":false,"security":false},{"name":"nodejs","version":"10.7.0","date":"2018-07-18","lts":false,"security":false},{"name":"nodejs","version":"10.8.0","date":"2018-08-01","lts":false,"security":false},{"name":"nodejs","version":"10.9.0","date":"2018-08-15","lts":false,"security":false},{"name":"nodejs","version":"10.10.0","date":"2018-09-06","lts":false,"security":false},{"name":"nodejs","version":"10.11.0","date":"2018-09-19","lts":false,"security":false},{"name":"nodejs","version":"10.12.0","date":"2018-10-10","lts":false,"security":false},{"name":"nodejs","version":"10.13.0","date":"2018-10-30","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.14.0","date":"2018-11-27","lts":"Dubnium","security":true},{"name":"nodejs","version":"10.15.0","date":"2018-12-26","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.16.0","date":"2019-05-28","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.17.0","date":"2019-10-22","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.18.0","date":"2019-12-17","lts":"Dubnium","security":true},{"name":"nodejs","version":"10.19.0","date":"2020-02-05","lts":"Dubnium","security":true},{"name":"nodejs","version":"10.20.0","date":"2020-03-26","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.21.0","date":"2020-06-02","lts":"Dubnium","security":true},{"name":"nodejs","version":"10.22.0","date":"2020-07-21","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.23.0","date":"2020-10-27","lts":"Dubnium","security":false},{"name":"nodejs","version":"10.24.0","date":"2021-02-23","lts":"Dubnium","security":true},{"name":"nodejs","version":"11.0.0","date":"2018-10-23","lts":false,"security":false},{"name":"nodejs","version":"11.1.0","date":"2018-10-30","lts":false,"security":false},{"name":"nodejs","version":"11.2.0","date":"2018-11-15","lts":false,"security":false},{"name":"nodejs","version":"11.3.0","date":"2018-11-27","lts":false,"security":true},{"name":"nodejs","version":"11.4.0","date":"2018-12-07","lts":false,"security":false},{"name":"nodejs","version":"11.5.0","date":"2018-12-18","lts":false,"security":false},{"name":"nodejs","version":"11.6.0","date":"2018-12-26","lts":false,"security":false},{"name":"nodejs","version":"11.7.0","date":"2019-01-17","lts":false,"security":false},{"name":"nodejs","version":"11.8.0","date":"2019-01-24","lts":false,"security":false},{"name":"nodejs","version":"11.9.0","date":"2019-01-30","lts":false,"security":false},{"name":"nodejs","version":"11.10.0","date":"2019-02-14","lts":false,"security":false},{"name":"nodejs","version":"11.11.0","date":"2019-03-05","lts":false,"security":false},{"name":"nodejs","version":"11.12.0","date":"2019-03-14","lts":false,"security":false},{"name":"nodejs","version":"11.13.0","date":"2019-03-28","lts":false,"security":false},{"name":"nodejs","version":"11.14.0","date":"2019-04-10","lts":false,"security":false},{"name":"nodejs","version":"11.15.0","date":"2019-04-30","lts":false,"security":false},{"name":"nodejs","version":"12.0.0","date":"2019-04-23","lts":false,"security":false},{"name":"nodejs","version":"12.1.0","date":"2019-04-29","lts":false,"security":false},{"name":"nodejs","version":"12.2.0","date":"2019-05-07","lts":false,"security":false},{"name":"nodejs","version":"12.3.0","date":"2019-05-21","lts":false,"security":false},{"name":"nodejs","version":"12.4.0","date":"2019-06-04","lts":false,"security":false},{"name":"nodejs","version":"12.5.0","date":"2019-06-26","lts":false,"security":false},{"name":"nodejs","version":"12.6.0","date":"2019-07-03","lts":false,"security":false},{"name":"nodejs","version":"12.7.0","date":"2019-07-23","lts":false,"security":false},{"name":"nodejs","version":"12.8.0","date":"2019-08-06","lts":false,"security":false},{"name":"nodejs","version":"12.9.0","date":"2019-08-20","lts":false,"security":false},{"name":"nodejs","version":"12.10.0","date":"2019-09-04","lts":false,"security":false},{"name":"nodejs","version":"12.11.0","date":"2019-09-25","lts":false,"security":false},{"name":"nodejs","version":"12.12.0","date":"2019-10-11","lts":false,"security":false},{"name":"nodejs","version":"12.13.0","date":"2019-10-21","lts":"Erbium","security":false},{"name":"nodejs","version":"12.14.0","date":"2019-12-17","lts":"Erbium","security":true},{"name":"nodejs","version":"12.15.0","date":"2020-02-05","lts":"Erbium","security":true},{"name":"nodejs","version":"12.16.0","date":"2020-02-11","lts":"Erbium","security":false},{"name":"nodejs","version":"12.17.0","date":"2020-05-26","lts":"Erbium","security":false},{"name":"nodejs","version":"12.18.0","date":"2020-06-02","lts":"Erbium","security":true},{"name":"nodejs","version":"12.19.0","date":"2020-10-06","lts":"Erbium","security":false},{"name":"nodejs","version":"12.20.0","date":"2020-11-24","lts":"Erbium","security":false},{"name":"nodejs","version":"12.21.0","date":"2021-02-23","lts":"Erbium","security":true},{"name":"nodejs","version":"12.22.0","date":"2021-03-30","lts":"Erbium","security":false},{"name":"nodejs","version":"13.0.0","date":"2019-10-22","lts":false,"security":false},{"name":"nodejs","version":"13.1.0","date":"2019-11-05","lts":false,"security":false},{"name":"nodejs","version":"13.2.0","date":"2019-11-21","lts":false,"security":false},{"name":"nodejs","version":"13.3.0","date":"2019-12-03","lts":false,"security":false},{"name":"nodejs","version":"13.4.0","date":"2019-12-17","lts":false,"security":true},{"name":"nodejs","version":"13.5.0","date":"2019-12-18","lts":false,"security":false},{"name":"nodejs","version":"13.6.0","date":"2020-01-07","lts":false,"security":false},{"name":"nodejs","version":"13.7.0","date":"2020-01-21","lts":false,"security":false},{"name":"nodejs","version":"13.8.0","date":"2020-02-05","lts":false,"security":true},{"name":"nodejs","version":"13.9.0","date":"2020-02-18","lts":false,"security":false},{"name":"nodejs","version":"13.10.0","date":"2020-03-04","lts":false,"security":false},{"name":"nodejs","version":"13.11.0","date":"2020-03-12","lts":false,"security":false},{"name":"nodejs","version":"13.12.0","date":"2020-03-26","lts":false,"security":false},{"name":"nodejs","version":"13.13.0","date":"2020-04-14","lts":false,"security":false},{"name":"nodejs","version":"13.14.0","date":"2020-04-29","lts":false,"security":false},{"name":"nodejs","version":"14.0.0","date":"2020-04-21","lts":false,"security":false},{"name":"nodejs","version":"14.1.0","date":"2020-04-29","lts":false,"security":false},{"name":"nodejs","version":"14.2.0","date":"2020-05-05","lts":false,"security":false},{"name":"nodejs","version":"14.3.0","date":"2020-05-19","lts":false,"security":false},{"name":"nodejs","version":"14.4.0","date":"2020-06-02","lts":false,"security":true},{"name":"nodejs","version":"14.5.0","date":"2020-06-30","lts":false,"security":false},{"name":"nodejs","version":"14.6.0","date":"2020-07-20","lts":false,"security":false},{"name":"nodejs","version":"14.7.0","date":"2020-07-29","lts":false,"security":false},{"name":"nodejs","version":"14.8.0","date":"2020-08-11","lts":false,"security":false},{"name":"nodejs","version":"14.9.0","date":"2020-08-27","lts":false,"security":false},{"name":"nodejs","version":"14.10.0","date":"2020-09-08","lts":false,"security":false},{"name":"nodejs","version":"14.11.0","date":"2020-09-15","lts":false,"security":true},{"name":"nodejs","version":"14.12.0","date":"2020-09-22","lts":false,"security":false},{"name":"nodejs","version":"14.13.0","date":"2020-09-29","lts":false,"security":false},{"name":"nodejs","version":"14.14.0","date":"2020-10-15","lts":false,"security":false},{"name":"nodejs","version":"14.15.0","date":"2020-10-27","lts":"Fermium","security":false},{"name":"nodejs","version":"14.16.0","date":"2021-02-23","lts":"Fermium","security":true},{"name":"nodejs","version":"14.17.0","date":"2021-05-11","lts":"Fermium","security":false},{"name":"nodejs","version":"14.18.0","date":"2021-09-28","lts":"Fermium","security":false},{"name":"nodejs","version":"14.19.0","date":"2022-02-01","lts":"Fermium","security":false},{"name":"nodejs","version":"14.20.0","date":"2022-07-07","lts":"Fermium","security":true},{"name":"nodejs","version":"15.0.0","date":"2020-10-20","lts":false,"security":false},{"name":"nodejs","version":"15.1.0","date":"2020-11-04","lts":false,"security":false},{"name":"nodejs","version":"15.2.0","date":"2020-11-10","lts":false,"security":false},{"name":"nodejs","version":"15.3.0","date":"2020-11-24","lts":false,"security":false},{"name":"nodejs","version":"15.4.0","date":"2020-12-09","lts":false,"security":false},{"name":"nodejs","version":"15.5.0","date":"2020-12-22","lts":false,"security":false},{"name":"nodejs","version":"15.6.0","date":"2021-01-14","lts":false,"security":false},{"name":"nodejs","version":"15.7.0","date":"2021-01-25","lts":false,"security":false},{"name":"nodejs","version":"15.8.0","date":"2021-02-02","lts":false,"security":false},{"name":"nodejs","version":"15.9.0","date":"2021-02-18","lts":false,"security":false},{"name":"nodejs","version":"15.10.0","date":"2021-02-23","lts":false,"security":true},{"name":"nodejs","version":"15.11.0","date":"2021-03-03","lts":false,"security":false},{"name":"nodejs","version":"15.12.0","date":"2021-03-17","lts":false,"security":false},{"name":"nodejs","version":"15.13.0","date":"2021-03-31","lts":false,"security":false},{"name":"nodejs","version":"15.14.0","date":"2021-04-06","lts":false,"security":false},{"name":"nodejs","version":"16.0.0","date":"2021-04-20","lts":false,"security":false},{"name":"nodejs","version":"16.1.0","date":"2021-05-04","lts":false,"security":false},{"name":"nodejs","version":"16.2.0","date":"2021-05-19","lts":false,"security":false},{"name":"nodejs","version":"16.3.0","date":"2021-06-03","lts":false,"security":false},{"name":"nodejs","version":"16.4.0","date":"2021-06-23","lts":false,"security":false},{"name":"nodejs","version":"16.5.0","date":"2021-07-14","lts":false,"security":false},{"name":"nodejs","version":"16.6.0","date":"2021-07-29","lts":false,"security":true},{"name":"nodejs","version":"16.7.0","date":"2021-08-18","lts":false,"security":false},{"name":"nodejs","version":"16.8.0","date":"2021-08-25","lts":false,"security":false},{"name":"nodejs","version":"16.9.0","date":"2021-09-07","lts":false,"security":false},{"name":"nodejs","version":"16.10.0","date":"2021-09-22","lts":false,"security":false},{"name":"nodejs","version":"16.11.0","date":"2021-10-08","lts":false,"security":false},{"name":"nodejs","version":"16.12.0","date":"2021-10-20","lts":false,"security":false},{"name":"nodejs","version":"16.13.0","date":"2021-10-26","lts":"Gallium","security":false},{"name":"nodejs","version":"16.14.0","date":"2022-02-08","lts":"Gallium","security":false},{"name":"nodejs","version":"16.15.0","date":"2022-04-26","lts":"Gallium","security":false},{"name":"nodejs","version":"16.16.0","date":"2022-07-07","lts":"Gallium","security":true},{"name":"nodejs","version":"17.0.0","date":"2021-10-19","lts":false,"security":false},{"name":"nodejs","version":"17.1.0","date":"2021-11-09","lts":false,"security":false},{"name":"nodejs","version":"17.2.0","date":"2021-11-30","lts":false,"security":false},{"name":"nodejs","version":"17.3.0","date":"2021-12-17","lts":false,"security":false},{"name":"nodejs","version":"17.4.0","date":"2022-01-18","lts":false,"security":false},{"name":"nodejs","version":"17.5.0","date":"2022-02-10","lts":false,"security":false},{"name":"nodejs","version":"17.6.0","date":"2022-02-22","lts":false,"security":false},{"name":"nodejs","version":"17.7.0","date":"2022-03-09","lts":false,"security":false},{"name":"nodejs","version":"17.8.0","date":"2022-03-22","lts":false,"security":false},{"name":"nodejs","version":"17.9.0","date":"2022-04-07","lts":false,"security":false},{"name":"nodejs","version":"18.0.0","date":"2022-04-18","lts":false,"security":false},{"name":"nodejs","version":"18.1.0","date":"2022-05-03","lts":false,"security":false},{"name":"nodejs","version":"18.2.0","date":"2022-05-17","lts":false,"security":false},{"name":"nodejs","version":"18.3.0","date":"2022-06-02","lts":false,"security":false},{"name":"nodejs","version":"18.4.0","date":"2022-06-16","lts":false,"security":false},{"name":"nodejs","version":"18.5.0","date":"2022-07-06","lts":false,"security":true}] \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/node-releases/data/release-schedule/release-schedule.json b/tools/node_modules/eslint/node_modules/node-releases/data/release-schedule/release-schedule.json index 8db643694c7..037cc5330e2 100644 --- a/tools/node_modules/eslint/node_modules/node-releases/data/release-schedule/release-schedule.json +++ b/tools/node_modules/eslint/node_modules/node-releases/data/release-schedule/release-schedule.json @@ -1 +1 @@ -{"v0.8":{"start":"2012-06-25","end":"2014-07-31"},"v0.10":{"start":"2013-03-11","end":"2016-10-31"},"v0.12":{"start":"2015-02-06","end":"2016-12-31"},"v4":{"start":"2015-09-08","lts":"2015-10-12","maintenance":"2017-04-01","end":"2018-04-30","codename":"Argon"},"v5":{"start":"2015-10-29","maintenance":"2016-04-30","end":"2016-06-30"},"v6":{"start":"2016-04-26","lts":"2016-10-18","maintenance":"2018-04-30","end":"2019-04-30","codename":"Boron"},"v7":{"start":"2016-10-25","maintenance":"2017-04-30","end":"2017-06-30"},"v8":{"start":"2017-05-30","lts":"2017-10-31","maintenance":"2019-01-01","end":"2019-12-31","codename":"Carbon"},"v9":{"start":"2017-10-01","maintenance":"2018-04-01","end":"2018-06-30"},"v10":{"start":"2018-04-24","lts":"2018-10-30","maintenance":"2020-05-19","end":"2021-04-30","codename":"Dubnium"},"v11":{"start":"2018-10-23","maintenance":"2019-04-22","end":"2019-06-01"},"v12":{"start":"2019-04-23","lts":"2019-10-21","maintenance":"2020-11-30","end":"2022-04-30","codename":"Erbium"},"v13":{"start":"2019-10-22","maintenance":"2020-04-01","end":"2020-06-01"},"v14":{"start":"2020-04-21","lts":"2020-10-27","maintenance":"2021-10-19","end":"2023-04-30","codename":"Fermium"},"v15":{"start":"2020-10-20","maintenance":"2021-04-01","end":"2021-06-01"},"v16":{"start":"2021-04-20","lts":"2021-10-26","maintenance":"2022-10-18","end":"2024-04-30","codename":"Gallium"},"v17":{"start":"2021-10-19","maintenance":"2022-04-01","end":"2022-06-01"},"v18":{"start":"2022-04-19","lts":"2022-10-25","maintenance":"2023-10-18","end":"2025-04-30","codename":""}} \ No newline at end of file +{"v0.8":{"start":"2012-06-25","end":"2014-07-31"},"v0.10":{"start":"2013-03-11","end":"2016-10-31"},"v0.12":{"start":"2015-02-06","end":"2016-12-31"},"v4":{"start":"2015-09-08","lts":"2015-10-12","maintenance":"2017-04-01","end":"2018-04-30","codename":"Argon"},"v5":{"start":"2015-10-29","maintenance":"2016-04-30","end":"2016-06-30"},"v6":{"start":"2016-04-26","lts":"2016-10-18","maintenance":"2018-04-30","end":"2019-04-30","codename":"Boron"},"v7":{"start":"2016-10-25","maintenance":"2017-04-30","end":"2017-06-30"},"v8":{"start":"2017-05-30","lts":"2017-10-31","maintenance":"2019-01-01","end":"2019-12-31","codename":"Carbon"},"v9":{"start":"2017-10-01","maintenance":"2018-04-01","end":"2018-06-30"},"v10":{"start":"2018-04-24","lts":"2018-10-30","maintenance":"2020-05-19","end":"2021-04-30","codename":"Dubnium"},"v11":{"start":"2018-10-23","maintenance":"2019-04-22","end":"2019-06-01"},"v12":{"start":"2019-04-23","lts":"2019-10-21","maintenance":"2020-11-30","end":"2022-04-30","codename":"Erbium"},"v13":{"start":"2019-10-22","maintenance":"2020-04-01","end":"2020-06-01"},"v14":{"start":"2020-04-21","lts":"2020-10-27","maintenance":"2021-10-19","end":"2023-04-30","codename":"Fermium"},"v15":{"start":"2020-10-20","maintenance":"2021-04-01","end":"2021-06-01"},"v16":{"start":"2021-04-20","lts":"2021-10-26","maintenance":"2022-10-18","end":"2023-09-11","codename":"Gallium"},"v17":{"start":"2021-10-19","maintenance":"2022-04-01","end":"2022-06-01"},"v18":{"start":"2022-04-19","lts":"2022-10-25","maintenance":"2023-10-18","end":"2025-04-30","codename":""},"v19":{"start":"2022-10-18","maintenance":"2023-04-01","end":"2023-06-01"},"v20":{"start":"2023-04-18","lts":"2023-10-24","maintenance":"2024-10-22","end":"2026-04-30","codename":""}} \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/node-releases/package.json b/tools/node_modules/eslint/node_modules/node-releases/package.json index 6eeea56ea30..cb6c7c124f9 100644 --- a/tools/node_modules/eslint/node_modules/node-releases/package.json +++ b/tools/node_modules/eslint/node_modules/node-releases/package.json @@ -1,6 +1,6 @@ { "name": "node-releases", - "version": "2.0.2", + "version": "2.0.6", "description": "Node.js releases data", "scripts": { "build": "node scripts/build.js" diff --git a/tools/node_modules/eslint/node_modules/p-limit/index.js b/tools/node_modules/eslint/node_modules/p-limit/index.js new file mode 100644 index 00000000000..c2ae52d90db --- /dev/null +++ b/tools/node_modules/eslint/node_modules/p-limit/index.js @@ -0,0 +1,71 @@ +'use strict'; +const Queue = require('yocto-queue'); + +const pLimit = concurrency => { + if (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) { + throw new TypeError('Expected `concurrency` to be a number from 1 and up'); + } + + const queue = new Queue(); + let activeCount = 0; + + const next = () => { + activeCount--; + + if (queue.size > 0) { + queue.dequeue()(); + } + }; + + const run = async (fn, resolve, ...args) => { + activeCount++; + + const result = (async () => fn(...args))(); + + resolve(result); + + try { + await result; + } catch {} + + next(); + }; + + const enqueue = (fn, resolve, ...args) => { + queue.enqueue(run.bind(null, fn, resolve, ...args)); + + (async () => { + // This function needs to wait until the next microtask before comparing + // `activeCount` to `concurrency`, because `activeCount` is updated asynchronously + // when the run function is dequeued and called. The comparison in the if-statement + // needs to happen asynchronously as well to get an up-to-date value for `activeCount`. + await Promise.resolve(); + + if (activeCount < concurrency && queue.size > 0) { + queue.dequeue()(); + } + })(); + }; + + const generator = (fn, ...args) => new Promise(resolve => { + enqueue(fn, resolve, ...args); + }); + + Object.defineProperties(generator, { + activeCount: { + get: () => activeCount + }, + pendingCount: { + get: () => queue.size + }, + clearQueue: { + value: () => { + queue.clear(); + } + } + }); + + return generator; +}; + +module.exports = pLimit; diff --git a/tools/node_modules/eslint/node_modules/p-limit/license b/tools/node_modules/eslint/node_modules/p-limit/license new file mode 100644 index 00000000000..fa7ceba3eb4 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/p-limit/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/p-limit/package.json b/tools/node_modules/eslint/node_modules/p-limit/package.json new file mode 100644 index 00000000000..76514736fc9 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/p-limit/package.json @@ -0,0 +1,52 @@ +{ + "name": "p-limit", + "version": "3.1.0", + "description": "Run multiple promise-returning & async functions with limited concurrency", + "license": "MIT", + "repository": "sindresorhus/p-limit", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "promise", + "limit", + "limited", + "concurrency", + "throttle", + "throat", + "rate", + "batch", + "ratelimit", + "task", + "queue", + "async", + "await", + "promises", + "bluebird" + ], + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "devDependencies": { + "ava": "^2.4.0", + "delay": "^4.4.0", + "in-range": "^2.0.0", + "random-int": "^2.0.1", + "time-span": "^4.0.0", + "tsd": "^0.13.1", + "xo": "^0.35.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/p-limit/readme.md b/tools/node_modules/eslint/node_modules/p-limit/readme.md new file mode 100644 index 00000000000..b283c1e635a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/p-limit/readme.md @@ -0,0 +1,101 @@ +# p-limit + +> Run multiple promise-returning & async functions with limited concurrency + +## Install + +``` +$ npm install p-limit +``` + +## Usage + +```js +const pLimit = require('p-limit'); + +const limit = pLimit(1); + +const input = [ + limit(() => fetchSomething('foo')), + limit(() => fetchSomething('bar')), + limit(() => doSomething()) +]; + +(async () => { + // Only one promise is run at once + const result = await Promise.all(input); + console.log(result); +})(); +``` + +## API + +### pLimit(concurrency) + +Returns a `limit` function. + +#### concurrency + +Type: `number`\ +Minimum: `1`\ +Default: `Infinity` + +Concurrency limit. + +### limit(fn, ...args) + +Returns the promise returned by calling `fn(...args)`. + +#### fn + +Type: `Function` + +Promise-returning/async function. + +#### args + +Any arguments to pass through to `fn`. + +Support for passing arguments on to the `fn` is provided in order to be able to avoid creating unnecessary closures. You probably don't need this optimization unless you're pushing a *lot* of functions. + +### limit.activeCount + +The number of promises that are currently running. + +### limit.pendingCount + +The number of promises that are waiting to run (i.e. their internal `fn` was not called yet). + +### limit.clearQueue() + +Discard pending promises that are waiting to run. + +This might be useful if you want to teardown the queue at the end of your program's lifecycle or discard any function calls referencing an intermediary state of your app. + +Note: This does not cancel promises that are already running. + +## FAQ + +### How is this different from the [`p-queue`](https://github.com/sindresorhus/p-queue) package? + +This package is only about limiting the number of concurrent executions, while `p-queue` is a fully featured queue implementation with lots of different options, introspection, and ability to pause the queue. + +## Related + +- [p-queue](https://github.com/sindresorhus/p-queue) - Promise queue with concurrency control +- [p-throttle](https://github.com/sindresorhus/p-throttle) - Throttle promise-returning & async functions +- [p-debounce](https://github.com/sindresorhus/p-debounce) - Debounce promise-returning & async functions +- [p-all](https://github.com/sindresorhus/p-all) - Run promise-returning & async functions concurrently with optional limited concurrency +- [More…](https://github.com/sindresorhus/promise-fun) + +--- + +
    + + Get professional support for this package with a Tidelift subscription + +
    + + Tidelift helps make open source sustainable for maintainers while giving companies
    assurances about security, maintenance, and licensing for their dependencies. +
    +
    diff --git a/tools/node_modules/eslint/node_modules/p-locate/index.js b/tools/node_modules/eslint/node_modules/p-locate/index.js new file mode 100644 index 00000000000..641c3dd1e81 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/p-locate/index.js @@ -0,0 +1,50 @@ +'use strict'; +const pLimit = require('p-limit'); + +class EndError extends Error { + constructor(value) { + super(); + this.value = value; + } +} + +// The input can also be a promise, so we await it +const testElement = async (element, tester) => tester(await element); + +// The input can also be a promise, so we `Promise.all()` them both +const finder = async element => { + const values = await Promise.all(element); + if (values[1] === true) { + throw new EndError(values[0]); + } + + return false; +}; + +const pLocate = async (iterable, tester, options) => { + options = { + concurrency: Infinity, + preserveOrder: true, + ...options + }; + + const limit = pLimit(options.concurrency); + + // Start all the promises concurrently with optional limit + const items = [...iterable].map(element => [element, limit(testElement, element, tester)]); + + // Check the promises either serially or concurrently + const checkLimit = pLimit(options.preserveOrder ? 1 : Infinity); + + try { + await Promise.all(items.map(element => checkLimit(finder, element))); + } catch (error) { + if (error instanceof EndError) { + return error.value; + } + + throw error; + } +}; + +module.exports = pLocate; diff --git a/tools/node_modules/eslint/node_modules/p-locate/license b/tools/node_modules/eslint/node_modules/p-locate/license new file mode 100644 index 00000000000..fa7ceba3eb4 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/p-locate/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/p-locate/package.json b/tools/node_modules/eslint/node_modules/p-locate/package.json new file mode 100644 index 00000000000..2d5e447f55a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/p-locate/package.json @@ -0,0 +1,54 @@ +{ + "name": "p-locate", + "version": "5.0.0", + "description": "Get the first fulfilled promise that satisfies the provided testing function", + "license": "MIT", + "repository": "sindresorhus/p-locate", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "promise", + "locate", + "find", + "finder", + "search", + "searcher", + "test", + "array", + "collection", + "iterable", + "iterator", + "race", + "fulfilled", + "fastest", + "async", + "await", + "promises", + "bluebird" + ], + "dependencies": { + "p-limit": "^3.0.2" + }, + "devDependencies": { + "ava": "^2.4.0", + "delay": "^4.1.0", + "in-range": "^2.0.0", + "time-span": "^4.0.0", + "tsd": "^0.13.1", + "xo": "^0.32.1" + } +} diff --git a/tools/node_modules/eslint/node_modules/p-locate/readme.md b/tools/node_modules/eslint/node_modules/p-locate/readme.md new file mode 100644 index 00000000000..be85ec1d448 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/p-locate/readme.md @@ -0,0 +1,93 @@ +# p-locate [![Build Status](https://travis-ci.com/sindresorhus/p-locate.svg?branch=master)](https://travis-ci.com/github/sindresorhus/p-locate) + +> Get the first fulfilled promise that satisfies the provided testing function + +Think of it like an async version of [`Array#find`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find). + +## Install + +``` +$ npm install p-locate +``` + +## Usage + +Here we find the first file that exists on disk, in array order. + +```js +const pathExists = require('path-exists'); +const pLocate = require('p-locate'); + +const files = [ + 'unicorn.png', + 'rainbow.png', // Only this one actually exists on disk + 'pony.png' +]; + +(async () => { + const foundPath = await pLocate(files, file => pathExists(file)); + + console.log(foundPath); + //=> 'rainbow' +})(); +``` + +*The above is just an example. Use [`locate-path`](https://github.com/sindresorhus/locate-path) if you need this.* + +## API + +### pLocate(input, tester, options?) + +Returns a `Promise` that is fulfilled when `tester` resolves to `true` or the iterable is done, or rejects if any of the promises reject. The fulfilled value is the current iterable value or `undefined` if `tester` never resolved to `true`. + +#### input + +Type: `Iterable` + +An iterable of promises/values to test. + +#### tester(element) + +Type: `Function` + +This function will receive resolved values from `input` and is expected to return a `Promise` or `boolean`. + +#### options + +Type: `object` + +##### concurrency + +Type: `number`\ +Default: `Infinity`\ +Minimum: `1` + +Number of concurrently pending promises returned by `tester`. + +##### preserveOrder + +Type: `boolean`\ +Default: `true` + +Preserve `input` order when searching. + +Disable this to improve performance if you don't care about the order. + +## Related + +- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently +- [p-filter](https://github.com/sindresorhus/p-filter) - Filter promises concurrently +- [p-any](https://github.com/sindresorhus/p-any) - Wait for any promise to be fulfilled +- [More…](https://github.com/sindresorhus/promise-fun) + +--- + +
    + + Get professional support for this package with a Tidelift subscription + +
    + + Tidelift helps make open source sustainable for maintainers while giving companies
    assurances about security, maintenance, and licensing for their dependencies. +
    +
    diff --git a/tools/node_modules/eslint/node_modules/path-exists/index.js b/tools/node_modules/eslint/node_modules/path-exists/index.js new file mode 100644 index 00000000000..1943921b758 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/path-exists/index.js @@ -0,0 +1,23 @@ +'use strict'; +const fs = require('fs'); +const {promisify} = require('util'); + +const pAccess = promisify(fs.access); + +module.exports = async path => { + try { + await pAccess(path); + return true; + } catch (_) { + return false; + } +}; + +module.exports.sync = path => { + try { + fs.accessSync(path); + return true; + } catch (_) { + return false; + } +}; diff --git a/tools/node_modules/eslint/node_modules/path-exists/license b/tools/node_modules/eslint/node_modules/path-exists/license new file mode 100644 index 00000000000..e7af2f77107 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/path-exists/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/path-exists/package.json b/tools/node_modules/eslint/node_modules/path-exists/package.json new file mode 100644 index 00000000000..0755256a2b3 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/path-exists/package.json @@ -0,0 +1,39 @@ +{ + "name": "path-exists", + "version": "4.0.0", + "description": "Check if a path exists", + "license": "MIT", + "repository": "sindresorhus/path-exists", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "path", + "exists", + "exist", + "file", + "filepath", + "fs", + "filesystem", + "file-system", + "access", + "stat" + ], + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/path-exists/readme.md b/tools/node_modules/eslint/node_modules/path-exists/readme.md new file mode 100644 index 00000000000..81f98454567 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/path-exists/readme.md @@ -0,0 +1,52 @@ +# path-exists [![Build Status](https://travis-ci.org/sindresorhus/path-exists.svg?branch=master)](https://travis-ci.org/sindresorhus/path-exists) + +> Check if a path exists + +NOTE: `fs.existsSync` has been un-deprecated in Node.js since 6.8.0. If you only need to check synchronously, this module is not needed. + +While [`fs.exists()`](https://nodejs.org/api/fs.html#fs_fs_exists_path_callback) is being [deprecated](https://github.com/iojs/io.js/issues/103), there's still a genuine use-case of being able to check if a path exists for other purposes than doing IO with it. + +Never use this before handling a file though: + +> In particular, checking if a file exists before opening it is an anti-pattern that leaves you vulnerable to race conditions: another process may remove the file between the calls to `fs.exists()` and `fs.open()`. Just open the file and handle the error when it's not there. + + +## Install + +``` +$ npm install path-exists +``` + + +## Usage + +```js +// foo.js +const pathExists = require('path-exists'); + +(async () => { + console.log(await pathExists('foo.js')); + //=> true +})(); +``` + + +## API + +### pathExists(path) + +Returns a `Promise` of whether the path exists. + +### pathExists.sync(path) + +Returns a `boolean` of whether the path exists. + + +## Related + +- [path-exists-cli](https://github.com/sindresorhus/path-exists-cli) - CLI for this module + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/tools/node_modules/eslint/node_modules/path-type/index.js b/tools/node_modules/eslint/node_modules/path-type/index.js new file mode 100644 index 00000000000..b8f34b24ef0 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/path-type/index.js @@ -0,0 +1,43 @@ +'use strict'; +const {promisify} = require('util'); +const fs = require('fs'); + +async function isType(fsStatType, statsMethodName, filePath) { + if (typeof filePath !== 'string') { + throw new TypeError(`Expected a string, got ${typeof filePath}`); + } + + try { + const stats = await promisify(fs[fsStatType])(filePath); + return stats[statsMethodName](); + } catch (error) { + if (error.code === 'ENOENT') { + return false; + } + + throw error; + } +} + +function isTypeSync(fsStatType, statsMethodName, filePath) { + if (typeof filePath !== 'string') { + throw new TypeError(`Expected a string, got ${typeof filePath}`); + } + + try { + return fs[fsStatType](filePath)[statsMethodName](); + } catch (error) { + if (error.code === 'ENOENT') { + return false; + } + + throw error; + } +} + +exports.isFile = isType.bind(null, 'stat', 'isFile'); +exports.isDirectory = isType.bind(null, 'stat', 'isDirectory'); +exports.isSymlink = isType.bind(null, 'lstat', 'isSymbolicLink'); +exports.isFileSync = isTypeSync.bind(null, 'statSync', 'isFile'); +exports.isDirectorySync = isTypeSync.bind(null, 'statSync', 'isDirectory'); +exports.isSymlinkSync = isTypeSync.bind(null, 'lstatSync', 'isSymbolicLink'); diff --git a/tools/node_modules/eslint/node_modules/path-type/license b/tools/node_modules/eslint/node_modules/path-type/license new file mode 100644 index 00000000000..e7af2f77107 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/path-type/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/path-type/package.json b/tools/node_modules/eslint/node_modules/path-type/package.json new file mode 100644 index 00000000000..635b71100b8 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/path-type/package.json @@ -0,0 +1,45 @@ +{ + "name": "path-type", + "version": "4.0.0", + "description": "Check if a path is a file, directory, or symlink", + "license": "MIT", + "repository": "sindresorhus/path-type", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && nyc ava && tsd-check" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "path", + "fs", + "type", + "is", + "check", + "directory", + "dir", + "file", + "filepath", + "symlink", + "symbolic", + "link", + "stat", + "stats", + "filesystem" + ], + "devDependencies": { + "ava": "^1.3.1", + "nyc": "^13.3.0", + "tsd-check": "^0.3.0", + "xo": "^0.24.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/path-type/readme.md b/tools/node_modules/eslint/node_modules/path-type/readme.md new file mode 100644 index 00000000000..4c972fa56a2 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/path-type/readme.md @@ -0,0 +1,72 @@ +# path-type [![Build Status](https://travis-ci.org/sindresorhus/path-type.svg?branch=master)](https://travis-ci.org/sindresorhus/path-type) + +> Check if a path is a file, directory, or symlink + + +## Install + +``` +$ npm install path-type +``` + + +## Usage + +```js +const {isFile} = require('path-type'); + +(async () => { + console.log(await isFile('package.json')); + //=> true +})(); +``` + + +## API + +### isFile(path) + +Check whether the passed `path` is a file. + +Returns a `Promise`. + +#### path + +Type: `string` + +The path to check. + +### isDirectory(path) + +Check whether the passed `path` is a directory. + +Returns a `Promise`. + +### isSymlink(path) + +Check whether the passed `path` is a symlink. + +Returns a `Promise`. + +### isFileSync(path) + +Synchronously check whether the passed `path` is a file. + +Returns a `boolean`. + +### isDirectorySync(path) + +Synchronously check whether the passed `path` is a directory. + +Returns a `boolean`. + +### isSymlinkSync(path) + +Synchronously check whether the passed `path` is a symlink. + +Returns a `boolean`. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/tools/node_modules/eslint/node_modules/picomatch/LICENSE b/tools/node_modules/eslint/node_modules/picomatch/LICENSE new file mode 100644 index 00000000000..3608dca25e3 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/picomatch/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/picomatch/index.js b/tools/node_modules/eslint/node_modules/picomatch/index.js new file mode 100644 index 00000000000..d2f2bc59d0a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/picomatch/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./lib/picomatch'); diff --git a/tools/node_modules/eslint/node_modules/picomatch/lib/constants.js b/tools/node_modules/eslint/node_modules/picomatch/lib/constants.js new file mode 100644 index 00000000000..a62ef387955 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/picomatch/lib/constants.js @@ -0,0 +1,179 @@ +'use strict'; + +const path = require('path'); +const WIN_SLASH = '\\\\/'; +const WIN_NO_SLASH = `[^${WIN_SLASH}]`; + +/** + * Posix glob regex + */ + +const DOT_LITERAL = '\\.'; +const PLUS_LITERAL = '\\+'; +const QMARK_LITERAL = '\\?'; +const SLASH_LITERAL = '\\/'; +const ONE_CHAR = '(?=.)'; +const QMARK = '[^/]'; +const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`; +const START_ANCHOR = `(?:^|${SLASH_LITERAL})`; +const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`; +const NO_DOT = `(?!${DOT_LITERAL})`; +const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; +const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; +const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; +const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; +const STAR = `${QMARK}*?`; + +const POSIX_CHARS = { + DOT_LITERAL, + PLUS_LITERAL, + QMARK_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + QMARK, + END_ANCHOR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK_NO_DOT, + STAR, + START_ANCHOR +}; + +/** + * Windows glob regex + */ + +const WINDOWS_CHARS = { + ...POSIX_CHARS, + + SLASH_LITERAL: `[${WIN_SLASH}]`, + QMARK: WIN_NO_SLASH, + STAR: `${WIN_NO_SLASH}*?`, + DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`, + NO_DOT: `(?!${DOT_LITERAL})`, + NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`, + NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + QMARK_NO_DOT: `[^.${WIN_SLASH}]`, + START_ANCHOR: `(?:^|[${WIN_SLASH}])`, + END_ANCHOR: `(?:[${WIN_SLASH}]|$)` +}; + +/** + * POSIX Bracket Regex + */ + +const POSIX_REGEX_SOURCE = { + alnum: 'a-zA-Z0-9', + alpha: 'a-zA-Z', + ascii: '\\x00-\\x7F', + blank: ' \\t', + cntrl: '\\x00-\\x1F\\x7F', + digit: '0-9', + graph: '\\x21-\\x7E', + lower: 'a-z', + print: '\\x20-\\x7E ', + punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', + space: ' \\t\\r\\n\\v\\f', + upper: 'A-Z', + word: 'A-Za-z0-9_', + xdigit: 'A-Fa-f0-9' +}; + +module.exports = { + MAX_LENGTH: 1024 * 64, + POSIX_REGEX_SOURCE, + + // regular expressions + REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, + REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/, + REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/, + REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g, + REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g, + REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g, + + // Replace globs with equivalent patterns to reduce parsing time. + REPLACEMENTS: { + '***': '*', + '**/**': '**', + '**/**/**': '**' + }, + + // Digits + CHAR_0: 48, /* 0 */ + CHAR_9: 57, /* 9 */ + + // Alphabet chars. + CHAR_UPPERCASE_A: 65, /* A */ + CHAR_LOWERCASE_A: 97, /* a */ + CHAR_UPPERCASE_Z: 90, /* Z */ + CHAR_LOWERCASE_Z: 122, /* z */ + + CHAR_LEFT_PARENTHESES: 40, /* ( */ + CHAR_RIGHT_PARENTHESES: 41, /* ) */ + + CHAR_ASTERISK: 42, /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: 38, /* & */ + CHAR_AT: 64, /* @ */ + CHAR_BACKWARD_SLASH: 92, /* \ */ + CHAR_CARRIAGE_RETURN: 13, /* \r */ + CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */ + CHAR_COLON: 58, /* : */ + CHAR_COMMA: 44, /* , */ + CHAR_DOT: 46, /* . */ + CHAR_DOUBLE_QUOTE: 34, /* " */ + CHAR_EQUAL: 61, /* = */ + CHAR_EXCLAMATION_MARK: 33, /* ! */ + CHAR_FORM_FEED: 12, /* \f */ + CHAR_FORWARD_SLASH: 47, /* / */ + CHAR_GRAVE_ACCENT: 96, /* ` */ + CHAR_HASH: 35, /* # */ + CHAR_HYPHEN_MINUS: 45, /* - */ + CHAR_LEFT_ANGLE_BRACKET: 60, /* < */ + CHAR_LEFT_CURLY_BRACE: 123, /* { */ + CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */ + CHAR_LINE_FEED: 10, /* \n */ + CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */ + CHAR_PERCENT: 37, /* % */ + CHAR_PLUS: 43, /* + */ + CHAR_QUESTION_MARK: 63, /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */ + CHAR_RIGHT_CURLY_BRACE: 125, /* } */ + CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */ + CHAR_SEMICOLON: 59, /* ; */ + CHAR_SINGLE_QUOTE: 39, /* ' */ + CHAR_SPACE: 32, /* */ + CHAR_TAB: 9, /* \t */ + CHAR_UNDERSCORE: 95, /* _ */ + CHAR_VERTICAL_LINE: 124, /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */ + + SEP: path.sep, + + /** + * Create EXTGLOB_CHARS + */ + + extglobChars(chars) { + return { + '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` }, + '?': { type: 'qmark', open: '(?:', close: ')?' }, + '+': { type: 'plus', open: '(?:', close: ')+' }, + '*': { type: 'star', open: '(?:', close: ')*' }, + '@': { type: 'at', open: '(?:', close: ')' } + }; + }, + + /** + * Create GLOB_CHARS + */ + + globChars(win32) { + return win32 === true ? WINDOWS_CHARS : POSIX_CHARS; + } +}; diff --git a/tools/node_modules/eslint/node_modules/picomatch/lib/parse.js b/tools/node_modules/eslint/node_modules/picomatch/lib/parse.js new file mode 100644 index 00000000000..58269d018dc --- /dev/null +++ b/tools/node_modules/eslint/node_modules/picomatch/lib/parse.js @@ -0,0 +1,1091 @@ +'use strict'; + +const constants = require('./constants'); +const utils = require('./utils'); + +/** + * Constants + */ + +const { + MAX_LENGTH, + POSIX_REGEX_SOURCE, + REGEX_NON_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_BACKREF, + REPLACEMENTS +} = constants; + +/** + * Helpers + */ + +const expandRange = (args, options) => { + if (typeof options.expandRange === 'function') { + return options.expandRange(...args, options); + } + + args.sort(); + const value = `[${args.join('-')}]`; + + try { + /* eslint-disable-next-line no-new */ + new RegExp(value); + } catch (ex) { + return args.map(v => utils.escapeRegex(v)).join('..'); + } + + return value; +}; + +/** + * Create the message for a syntax error + */ + +const syntaxError = (type, char) => { + return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; +}; + +/** + * Parse the given input string. + * @param {String} input + * @param {Object} options + * @return {Object} + */ + +const parse = (input, options) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + input = REPLACEMENTS[input] || input; + + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + + let len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + + const bos = { type: 'bos', value: '', output: opts.prepend || '' }; + const tokens = [bos]; + + const capture = opts.capture ? '' : '?:'; + const win32 = utils.isWindows(options); + + // create constants based on platform, for windows or posix + const PLATFORM_CHARS = constants.globChars(win32); + const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS); + + const { + DOT_LITERAL, + PLUS_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK, + QMARK_NO_DOT, + STAR, + START_ANCHOR + } = PLATFORM_CHARS; + + const globstar = opts => { + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + + const nodot = opts.dot ? '' : NO_DOT; + const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT; + let star = opts.bash === true ? globstar(opts) : STAR; + + if (opts.capture) { + star = `(${star})`; + } + + // minimatch options support + if (typeof opts.noext === 'boolean') { + opts.noextglob = opts.noext; + } + + const state = { + input, + index: -1, + start: 0, + dot: opts.dot === true, + consumed: '', + output: '', + prefix: '', + backtrack: false, + negated: false, + brackets: 0, + braces: 0, + parens: 0, + quotes: 0, + globstar: false, + tokens + }; + + input = utils.removePrefix(input, state); + len = input.length; + + const extglobs = []; + const braces = []; + const stack = []; + let prev = bos; + let value; + + /** + * Tokenizing helpers + */ + + const eos = () => state.index === len - 1; + const peek = state.peek = (n = 1) => input[state.index + n]; + const advance = state.advance = () => input[++state.index] || ''; + const remaining = () => input.slice(state.index + 1); + const consume = (value = '', num = 0) => { + state.consumed += value; + state.index += num; + }; + + const append = token => { + state.output += token.output != null ? token.output : token.value; + consume(token.value); + }; + + const negate = () => { + let count = 1; + + while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) { + advance(); + state.start++; + count++; + } + + if (count % 2 === 0) { + return false; + } + + state.negated = true; + state.start++; + return true; + }; + + const increment = type => { + state[type]++; + stack.push(type); + }; + + const decrement = type => { + state[type]--; + stack.pop(); + }; + + /** + * Push tokens onto the tokens array. This helper speeds up + * tokenizing by 1) helping us avoid backtracking as much as possible, + * and 2) helping us avoid creating extra tokens when consecutive + * characters are plain text. This improves performance and simplifies + * lookbehinds. + */ + + const push = tok => { + if (prev.type === 'globstar') { + const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace'); + const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren')); + + if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) { + state.output = state.output.slice(0, -prev.output.length); + prev.type = 'star'; + prev.value = '*'; + prev.output = star; + state.output += prev.output; + } + } + + if (extglobs.length && tok.type !== 'paren') { + extglobs[extglobs.length - 1].inner += tok.value; + } + + if (tok.value || tok.output) append(tok); + if (prev && prev.type === 'text' && tok.type === 'text') { + prev.value += tok.value; + prev.output = (prev.output || '') + tok.value; + return; + } + + tok.prev = prev; + tokens.push(tok); + prev = tok; + }; + + const extglobOpen = (type, value) => { + const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' }; + + token.prev = prev; + token.parens = state.parens; + token.output = state.output; + const output = (opts.capture ? '(' : '') + token.open; + + increment('parens'); + push({ type, value, output: state.output ? '' : ONE_CHAR }); + push({ type: 'paren', extglob: true, value: advance(), output }); + extglobs.push(token); + }; + + const extglobClose = token => { + let output = token.close + (opts.capture ? ')' : ''); + let rest; + + if (token.type === 'negate') { + let extglobStar = star; + + if (token.inner && token.inner.length > 1 && token.inner.includes('/')) { + extglobStar = globstar(opts); + } + + if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) { + output = token.close = `)$))${extglobStar}`; + } + + if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) { + // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis. + // In this case, we need to parse the string and use it in the output of the original pattern. + // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`. + // + // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`. + const expression = parse(rest, { ...options, fastpaths: false }).output; + + output = token.close = `)${expression})${extglobStar})`; + } + + if (token.prev.type === 'bos') { + state.negatedExtglob = true; + } + } + + push({ type: 'paren', extglob: true, value, output }); + decrement('parens'); + }; + + /** + * Fast paths + */ + + if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) { + let backslashes = false; + + let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => { + if (first === '\\') { + backslashes = true; + return m; + } + + if (first === '?') { + if (esc) { + return esc + first + (rest ? QMARK.repeat(rest.length) : ''); + } + if (index === 0) { + return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : ''); + } + return QMARK.repeat(chars.length); + } + + if (first === '.') { + return DOT_LITERAL.repeat(chars.length); + } + + if (first === '*') { + if (esc) { + return esc + first + (rest ? star : ''); + } + return star; + } + return esc ? m : `\\${m}`; + }); + + if (backslashes === true) { + if (opts.unescape === true) { + output = output.replace(/\\/g, ''); + } else { + output = output.replace(/\\+/g, m => { + return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : ''); + }); + } + } + + if (output === input && opts.contains === true) { + state.output = input; + return state; + } + + state.output = utils.wrapOutput(output, state, options); + return state; + } + + /** + * Tokenize input until we reach end-of-string + */ + + while (!eos()) { + value = advance(); + + if (value === '\u0000') { + continue; + } + + /** + * Escaped characters + */ + + if (value === '\\') { + const next = peek(); + + if (next === '/' && opts.bash !== true) { + continue; + } + + if (next === '.' || next === ';') { + continue; + } + + if (!next) { + value += '\\'; + push({ type: 'text', value }); + continue; + } + + // collapse slashes to reduce potential for exploits + const match = /^\\+/.exec(remaining()); + let slashes = 0; + + if (match && match[0].length > 2) { + slashes = match[0].length; + state.index += slashes; + if (slashes % 2 !== 0) { + value += '\\'; + } + } + + if (opts.unescape === true) { + value = advance(); + } else { + value += advance(); + } + + if (state.brackets === 0) { + push({ type: 'text', value }); + continue; + } + } + + /** + * If we're inside a regex character class, continue + * until we reach the closing bracket. + */ + + if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) { + if (opts.posix !== false && value === ':') { + const inner = prev.value.slice(1); + if (inner.includes('[')) { + prev.posix = true; + + if (inner.includes(':')) { + const idx = prev.value.lastIndexOf('['); + const pre = prev.value.slice(0, idx); + const rest = prev.value.slice(idx + 2); + const posix = POSIX_REGEX_SOURCE[rest]; + if (posix) { + prev.value = pre + posix; + state.backtrack = true; + advance(); + + if (!bos.output && tokens.indexOf(prev) === 1) { + bos.output = ONE_CHAR; + } + continue; + } + } + } + } + + if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) { + value = `\\${value}`; + } + + if (value === ']' && (prev.value === '[' || prev.value === '[^')) { + value = `\\${value}`; + } + + if (opts.posix === true && value === '!' && prev.value === '[') { + value = '^'; + } + + prev.value += value; + append({ value }); + continue; + } + + /** + * If we're inside a quoted string, continue + * until we reach the closing double quote. + */ + + if (state.quotes === 1 && value !== '"') { + value = utils.escapeRegex(value); + prev.value += value; + append({ value }); + continue; + } + + /** + * Double quotes + */ + + if (value === '"') { + state.quotes = state.quotes === 1 ? 0 : 1; + if (opts.keepQuotes === true) { + push({ type: 'text', value }); + } + continue; + } + + /** + * Parentheses + */ + + if (value === '(') { + increment('parens'); + push({ type: 'paren', value }); + continue; + } + + if (value === ')') { + if (state.parens === 0 && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('opening', '(')); + } + + const extglob = extglobs[extglobs.length - 1]; + if (extglob && state.parens === extglob.parens + 1) { + extglobClose(extglobs.pop()); + continue; + } + + push({ type: 'paren', value, output: state.parens ? ')' : '\\)' }); + decrement('parens'); + continue; + } + + /** + * Square brackets + */ + + if (value === '[') { + if (opts.nobracket === true || !remaining().includes(']')) { + if (opts.nobracket !== true && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('closing', ']')); + } + + value = `\\${value}`; + } else { + increment('brackets'); + } + + push({ type: 'bracket', value }); + continue; + } + + if (value === ']') { + if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) { + push({ type: 'text', value, output: `\\${value}` }); + continue; + } + + if (state.brackets === 0) { + if (opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('opening', '[')); + } + + push({ type: 'text', value, output: `\\${value}` }); + continue; + } + + decrement('brackets'); + + const prevValue = prev.value.slice(1); + if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) { + value = `/${value}`; + } + + prev.value += value; + append({ value }); + + // when literal brackets are explicitly disabled + // assume we should match with a regex character class + if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) { + continue; + } + + const escaped = utils.escapeRegex(prev.value); + state.output = state.output.slice(0, -prev.value.length); + + // when literal brackets are explicitly enabled + // assume we should escape the brackets to match literal characters + if (opts.literalBrackets === true) { + state.output += escaped; + prev.value = escaped; + continue; + } + + // when the user specifies nothing, try to match both + prev.value = `(${capture}${escaped}|${prev.value})`; + state.output += prev.value; + continue; + } + + /** + * Braces + */ + + if (value === '{' && opts.nobrace !== true) { + increment('braces'); + + const open = { + type: 'brace', + value, + output: '(', + outputIndex: state.output.length, + tokensIndex: state.tokens.length + }; + + braces.push(open); + push(open); + continue; + } + + if (value === '}') { + const brace = braces[braces.length - 1]; + + if (opts.nobrace === true || !brace) { + push({ type: 'text', value, output: value }); + continue; + } + + let output = ')'; + + if (brace.dots === true) { + const arr = tokens.slice(); + const range = []; + + for (let i = arr.length - 1; i >= 0; i--) { + tokens.pop(); + if (arr[i].type === 'brace') { + break; + } + if (arr[i].type !== 'dots') { + range.unshift(arr[i].value); + } + } + + output = expandRange(range, opts); + state.backtrack = true; + } + + if (brace.comma !== true && brace.dots !== true) { + const out = state.output.slice(0, brace.outputIndex); + const toks = state.tokens.slice(brace.tokensIndex); + brace.value = brace.output = '\\{'; + value = output = '\\}'; + state.output = out; + for (const t of toks) { + state.output += (t.output || t.value); + } + } + + push({ type: 'brace', value, output }); + decrement('braces'); + braces.pop(); + continue; + } + + /** + * Pipes + */ + + if (value === '|') { + if (extglobs.length > 0) { + extglobs[extglobs.length - 1].conditions++; + } + push({ type: 'text', value }); + continue; + } + + /** + * Commas + */ + + if (value === ',') { + let output = value; + + const brace = braces[braces.length - 1]; + if (brace && stack[stack.length - 1] === 'braces') { + brace.comma = true; + output = '|'; + } + + push({ type: 'comma', value, output }); + continue; + } + + /** + * Slashes + */ + + if (value === '/') { + // if the beginning of the glob is "./", advance the start + // to the current index, and don't add the "./" characters + // to the state. This greatly simplifies lookbehinds when + // checking for BOS characters like "!" and "." (not "./") + if (prev.type === 'dot' && state.index === state.start + 1) { + state.start = state.index + 1; + state.consumed = ''; + state.output = ''; + tokens.pop(); + prev = bos; // reset "prev" to the first token + continue; + } + + push({ type: 'slash', value, output: SLASH_LITERAL }); + continue; + } + + /** + * Dots + */ + + if (value === '.') { + if (state.braces > 0 && prev.type === 'dot') { + if (prev.value === '.') prev.output = DOT_LITERAL; + const brace = braces[braces.length - 1]; + prev.type = 'dots'; + prev.output += value; + prev.value += value; + brace.dots = true; + continue; + } + + if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') { + push({ type: 'text', value, output: DOT_LITERAL }); + continue; + } + + push({ type: 'dot', value, output: DOT_LITERAL }); + continue; + } + + /** + * Question marks + */ + + if (value === '?') { + const isGroup = prev && prev.value === '('; + if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('qmark', value); + continue; + } + + if (prev && prev.type === 'paren') { + const next = peek(); + let output = value; + + if (next === '<' && !utils.supportsLookbehinds()) { + throw new Error('Node.js v10 or higher is required for regex lookbehinds'); + } + + if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) { + output = `\\${value}`; + } + + push({ type: 'text', value, output }); + continue; + } + + if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) { + push({ type: 'qmark', value, output: QMARK_NO_DOT }); + continue; + } + + push({ type: 'qmark', value, output: QMARK }); + continue; + } + + /** + * Exclamation + */ + + if (value === '!') { + if (opts.noextglob !== true && peek() === '(') { + if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) { + extglobOpen('negate', value); + continue; + } + } + + if (opts.nonegate !== true && state.index === 0) { + negate(); + continue; + } + } + + /** + * Plus + */ + + if (value === '+') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('plus', value); + continue; + } + + if ((prev && prev.value === '(') || opts.regex === false) { + push({ type: 'plus', value, output: PLUS_LITERAL }); + continue; + } + + if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) { + push({ type: 'plus', value }); + continue; + } + + push({ type: 'plus', value: PLUS_LITERAL }); + continue; + } + + /** + * Plain text + */ + + if (value === '@') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + push({ type: 'at', extglob: true, value, output: '' }); + continue; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Plain text + */ + + if (value !== '*') { + if (value === '$' || value === '^') { + value = `\\${value}`; + } + + const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); + if (match) { + value += match[0]; + state.index += match[0].length; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Stars + */ + + if (prev && (prev.type === 'globstar' || prev.star === true)) { + prev.type = 'star'; + prev.star = true; + prev.value += value; + prev.output = star; + state.backtrack = true; + state.globstar = true; + consume(value); + continue; + } + + let rest = remaining(); + if (opts.noextglob !== true && /^\([^?]/.test(rest)) { + extglobOpen('star', value); + continue; + } + + if (prev.type === 'star') { + if (opts.noglobstar === true) { + consume(value); + continue; + } + + const prior = prev.prev; + const before = prior.prev; + const isStart = prior.type === 'slash' || prior.type === 'bos'; + const afterStar = before && (before.type === 'star' || before.type === 'globstar'); + + if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) { + push({ type: 'star', value, output: '' }); + continue; + } + + const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace'); + const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren'); + if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) { + push({ type: 'star', value, output: '' }); + continue; + } + + // strip consecutive `/**/` + while (rest.slice(0, 3) === '/**') { + const after = input[state.index + 4]; + if (after && after !== '/') { + break; + } + rest = rest.slice(3); + consume('/**', 3); + } + + if (prior.type === 'bos' && eos()) { + prev.type = 'globstar'; + prev.value += value; + prev.output = globstar(opts); + state.output = prev.output; + state.globstar = true; + consume(value); + continue; + } + + if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) { + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + + prev.type = 'globstar'; + prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)'); + prev.value += value; + state.globstar = true; + state.output += prior.output + prev.output; + consume(value); + continue; + } + + if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') { + const end = rest[1] !== void 0 ? '|$' : ''; + + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + + prev.type = 'globstar'; + prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; + prev.value += value; + + state.output += prior.output + prev.output; + state.globstar = true; + + consume(value + advance()); + + push({ type: 'slash', value: '/', output: '' }); + continue; + } + + if (prior.type === 'bos' && rest[0] === '/') { + prev.type = 'globstar'; + prev.value += value; + prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; + state.output = prev.output; + state.globstar = true; + consume(value + advance()); + push({ type: 'slash', value: '/', output: '' }); + continue; + } + + // remove single star from output + state.output = state.output.slice(0, -prev.output.length); + + // reset previous token to globstar + prev.type = 'globstar'; + prev.output = globstar(opts); + prev.value += value; + + // reset output with globstar + state.output += prev.output; + state.globstar = true; + consume(value); + continue; + } + + const token = { type: 'star', value, output: star }; + + if (opts.bash === true) { + token.output = '.*?'; + if (prev.type === 'bos' || prev.type === 'slash') { + token.output = nodot + token.output; + } + push(token); + continue; + } + + if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) { + token.output = value; + push(token); + continue; + } + + if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') { + if (prev.type === 'dot') { + state.output += NO_DOT_SLASH; + prev.output += NO_DOT_SLASH; + + } else if (opts.dot === true) { + state.output += NO_DOTS_SLASH; + prev.output += NO_DOTS_SLASH; + + } else { + state.output += nodot; + prev.output += nodot; + } + + if (peek() !== '*') { + state.output += ONE_CHAR; + prev.output += ONE_CHAR; + } + } + + push(token); + } + + while (state.brackets > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']')); + state.output = utils.escapeLast(state.output, '['); + decrement('brackets'); + } + + while (state.parens > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')')); + state.output = utils.escapeLast(state.output, '('); + decrement('parens'); + } + + while (state.braces > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}')); + state.output = utils.escapeLast(state.output, '{'); + decrement('braces'); + } + + if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) { + push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` }); + } + + // rebuild the output if we had to backtrack at any point + if (state.backtrack === true) { + state.output = ''; + + for (const token of state.tokens) { + state.output += token.output != null ? token.output : token.value; + + if (token.suffix) { + state.output += token.suffix; + } + } + } + + return state; +}; + +/** + * Fast paths for creating regular expressions for common glob patterns. + * This can significantly speed up processing and has very little downside + * impact when none of the fast paths match. + */ + +parse.fastpaths = (input, options) => { + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + const len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + + input = REPLACEMENTS[input] || input; + const win32 = utils.isWindows(options); + + // create constants based on platform, for windows or posix + const { + DOT_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOTS_SLASH, + STAR, + START_ANCHOR + } = constants.globChars(win32); + + const nodot = opts.dot ? NO_DOTS : NO_DOT; + const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; + const capture = opts.capture ? '' : '?:'; + const state = { negated: false, prefix: '' }; + let star = opts.bash === true ? '.*?' : STAR; + + if (opts.capture) { + star = `(${star})`; + } + + const globstar = opts => { + if (opts.noglobstar === true) return star; + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + + const create = str => { + switch (str) { + case '*': + return `${nodot}${ONE_CHAR}${star}`; + + case '.*': + return `${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '*.*': + return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '*/*': + return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; + + case '**': + return nodot + globstar(opts); + + case '**/*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; + + case '**/*.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '**/.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; + + default: { + const match = /^(.*?)\.(\w+)$/.exec(str); + if (!match) return; + + const source = create(match[1]); + if (!source) return; + + return source + DOT_LITERAL + match[2]; + } + } + }; + + const output = utils.removePrefix(input, state); + let source = create(output); + + if (source && opts.strictSlashes !== true) { + source += `${SLASH_LITERAL}?`; + } + + return source; +}; + +module.exports = parse; diff --git a/tools/node_modules/eslint/node_modules/picomatch/lib/picomatch.js b/tools/node_modules/eslint/node_modules/picomatch/lib/picomatch.js new file mode 100644 index 00000000000..782d809435a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/picomatch/lib/picomatch.js @@ -0,0 +1,342 @@ +'use strict'; + +const path = require('path'); +const scan = require('./scan'); +const parse = require('./parse'); +const utils = require('./utils'); +const constants = require('./constants'); +const isObject = val => val && typeof val === 'object' && !Array.isArray(val); + +/** + * Creates a matcher function from one or more glob patterns. The + * returned function takes a string to match as its first argument, + * and returns true if the string is a match. The returned matcher + * function also takes a boolean as the second argument that, when true, + * returns an object with additional information. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch(glob[, options]); + * + * const isMatch = picomatch('*.!(*a)'); + * console.log(isMatch('a.a')); //=> false + * console.log(isMatch('a.b')); //=> true + * ``` + * @name picomatch + * @param {String|Array} `globs` One or more glob patterns. + * @param {Object=} `options` + * @return {Function=} Returns a matcher function. + * @api public + */ + +const picomatch = (glob, options, returnState = false) => { + if (Array.isArray(glob)) { + const fns = glob.map(input => picomatch(input, options, returnState)); + const arrayMatcher = str => { + for (const isMatch of fns) { + const state = isMatch(str); + if (state) return state; + } + return false; + }; + return arrayMatcher; + } + + const isState = isObject(glob) && glob.tokens && glob.input; + + if (glob === '' || (typeof glob !== 'string' && !isState)) { + throw new TypeError('Expected pattern to be a non-empty string'); + } + + const opts = options || {}; + const posix = utils.isWindows(options); + const regex = isState + ? picomatch.compileRe(glob, options) + : picomatch.makeRe(glob, options, false, true); + + const state = regex.state; + delete regex.state; + + let isIgnored = () => false; + if (opts.ignore) { + const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; + isIgnored = picomatch(opts.ignore, ignoreOpts, returnState); + } + + const matcher = (input, returnObject = false) => { + const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix }); + const result = { glob, state, regex, posix, input, output, match, isMatch }; + + if (typeof opts.onResult === 'function') { + opts.onResult(result); + } + + if (isMatch === false) { + result.isMatch = false; + return returnObject ? result : false; + } + + if (isIgnored(input)) { + if (typeof opts.onIgnore === 'function') { + opts.onIgnore(result); + } + result.isMatch = false; + return returnObject ? result : false; + } + + if (typeof opts.onMatch === 'function') { + opts.onMatch(result); + } + return returnObject ? result : true; + }; + + if (returnState) { + matcher.state = state; + } + + return matcher; +}; + +/** + * Test `input` with the given `regex`. This is used by the main + * `picomatch()` function to test the input string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.test(input, regex[, options]); + * + * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); + * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } + * ``` + * @param {String} `input` String to test. + * @param {RegExp} `regex` + * @return {Object} Returns an object with matching info. + * @api public + */ + +picomatch.test = (input, regex, options, { glob, posix } = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected input to be a string'); + } + + if (input === '') { + return { isMatch: false, output: '' }; + } + + const opts = options || {}; + const format = opts.format || (posix ? utils.toPosixSlashes : null); + let match = input === glob; + let output = (match && format) ? format(input) : input; + + if (match === false) { + output = format ? format(input) : input; + match = output === glob; + } + + if (match === false || opts.capture === true) { + if (opts.matchBase === true || opts.basename === true) { + match = picomatch.matchBase(input, regex, options, posix); + } else { + match = regex.exec(output); + } + } + + return { isMatch: Boolean(match), match, output }; +}; + +/** + * Match the basename of a filepath. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.matchBase(input, glob[, options]); + * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true + * ``` + * @param {String} `input` String to test. + * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe). + * @return {Boolean} + * @api public + */ + +picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => { + const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options); + return regex.test(path.basename(input)); +}; + +/** + * Returns true if **any** of the given glob `patterns` match the specified `string`. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.isMatch(string, patterns[, options]); + * + * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true + * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false + * ``` + * @param {String|Array} str The string to test. + * @param {String|Array} patterns One or more glob patterns to use for matching. + * @param {Object} [options] See available [options](#options). + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); + +/** + * Parse a glob pattern to create the source string for a regular + * expression. + * + * ```js + * const picomatch = require('picomatch'); + * const result = picomatch.parse(pattern[, options]); + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} Returns an object with useful properties and output to be used as a regex source string. + * @api public + */ + +picomatch.parse = (pattern, options) => { + if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options)); + return parse(pattern, { ...options, fastpaths: false }); +}; + +/** + * Scan a glob pattern to separate the pattern into segments. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.scan(input[, options]); + * + * const result = picomatch.scan('!./foo/*.js'); + * console.log(result); + * { prefix: '!./', + * input: '!./foo/*.js', + * start: 3, + * base: 'foo', + * glob: '*.js', + * isBrace: false, + * isBracket: false, + * isGlob: true, + * isExtglob: false, + * isGlobstar: false, + * negated: true } + * ``` + * @param {String} `input` Glob pattern to scan. + * @param {Object} `options` + * @return {Object} Returns an object with + * @api public + */ + +picomatch.scan = (input, options) => scan(input, options); + +/** + * Compile a regular expression from the `state` object returned by the + * [parse()](#parse) method. + * + * @param {Object} `state` + * @param {Object} `options` + * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser. + * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging. + * @return {RegExp} + * @api public + */ + +picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => { + if (returnOutput === true) { + return state.output; + } + + const opts = options || {}; + const prepend = opts.contains ? '' : '^'; + const append = opts.contains ? '' : '$'; + + let source = `${prepend}(?:${state.output})${append}`; + if (state && state.negated === true) { + source = `^(?!${source}).*$`; + } + + const regex = picomatch.toRegex(source, options); + if (returnState === true) { + regex.state = state; + } + + return regex; +}; + +/** + * Create a regular expression from a parsed glob pattern. + * + * ```js + * const picomatch = require('picomatch'); + * const state = picomatch.parse('*.js'); + * // picomatch.compileRe(state[, options]); + * + * console.log(picomatch.compileRe(state)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `state` The object returned from the `.parse` method. + * @param {Object} `options` + * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result. + * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression. + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ + +picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => { + if (!input || typeof input !== 'string') { + throw new TypeError('Expected a non-empty string'); + } + + let parsed = { negated: false, fastpaths: true }; + + if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) { + parsed.output = parse.fastpaths(input, options); + } + + if (!parsed.output) { + parsed = parse(input, options); + } + + return picomatch.compileRe(parsed, options, returnOutput, returnState); +}; + +/** + * Create a regular expression from the given regex source string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.toRegex(source[, options]); + * + * const { output } = picomatch.parse('*.js'); + * console.log(picomatch.toRegex(output)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `source` Regular expression source string. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + +picomatch.toRegex = (source, options) => { + try { + const opts = options || {}; + return new RegExp(source, opts.flags || (opts.nocase ? 'i' : '')); + } catch (err) { + if (options && options.debug === true) throw err; + return /$^/; + } +}; + +/** + * Picomatch constants. + * @return {Object} + */ + +picomatch.constants = constants; + +/** + * Expose "picomatch" + */ + +module.exports = picomatch; diff --git a/tools/node_modules/eslint/node_modules/picomatch/lib/scan.js b/tools/node_modules/eslint/node_modules/picomatch/lib/scan.js new file mode 100644 index 00000000000..e59cd7a1357 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/picomatch/lib/scan.js @@ -0,0 +1,391 @@ +'use strict'; + +const utils = require('./utils'); +const { + CHAR_ASTERISK, /* * */ + CHAR_AT, /* @ */ + CHAR_BACKWARD_SLASH, /* \ */ + CHAR_COMMA, /* , */ + CHAR_DOT, /* . */ + CHAR_EXCLAMATION_MARK, /* ! */ + CHAR_FORWARD_SLASH, /* / */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_LEFT_SQUARE_BRACKET, /* [ */ + CHAR_PLUS, /* + */ + CHAR_QUESTION_MARK, /* ? */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_RIGHT_SQUARE_BRACKET /* ] */ +} = require('./constants'); + +const isPathSeparator = code => { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; +}; + +const depth = token => { + if (token.isPrefix !== true) { + token.depth = token.isGlobstar ? Infinity : 1; + } +}; + +/** + * Quickly scans a glob pattern and returns an object with a handful of + * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists), + * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not + * with `!(`) and `negatedExtglob` (true if the path starts with `!(`). + * + * ```js + * const pm = require('picomatch'); + * console.log(pm.scan('foo/bar/*.js')); + * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' } + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {Object} Returns an object with tokens and regex source string. + * @api public + */ + +const scan = (input, options) => { + const opts = options || {}; + + const length = input.length - 1; + const scanToEnd = opts.parts === true || opts.scanToEnd === true; + const slashes = []; + const tokens = []; + const parts = []; + + let str = input; + let index = -1; + let start = 0; + let lastIndex = 0; + let isBrace = false; + let isBracket = false; + let isGlob = false; + let isExtglob = false; + let isGlobstar = false; + let braceEscaped = false; + let backslashes = false; + let negated = false; + let negatedExtglob = false; + let finished = false; + let braces = 0; + let prev; + let code; + let token = { value: '', depth: 0, isGlob: false }; + + const eos = () => index >= length; + const peek = () => str.charCodeAt(index + 1); + const advance = () => { + prev = code; + return str.charCodeAt(++index); + }; + + while (index < length) { + code = advance(); + let next; + + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + + if (code === CHAR_LEFT_CURLY_BRACE) { + braceEscaped = true; + } + continue; + } + + if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) { + braces++; + + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + + if (code === CHAR_LEFT_CURLY_BRACE) { + braces++; + continue; + } + + if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (braceEscaped !== true && code === CHAR_COMMA) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (code === CHAR_RIGHT_CURLY_BRACE) { + braces--; + + if (braces === 0) { + braceEscaped = false; + isBrace = token.isBrace = true; + finished = true; + break; + } + } + } + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (code === CHAR_FORWARD_SLASH) { + slashes.push(index); + tokens.push(token); + token = { value: '', depth: 0, isGlob: false }; + + if (finished === true) continue; + if (prev === CHAR_DOT && index === (start + 1)) { + start += 2; + continue; + } + + lastIndex = index + 1; + continue; + } + + if (opts.noext !== true) { + const isExtglobChar = code === CHAR_PLUS + || code === CHAR_AT + || code === CHAR_ASTERISK + || code === CHAR_QUESTION_MARK + || code === CHAR_EXCLAMATION_MARK; + + if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + isExtglob = token.isExtglob = true; + finished = true; + if (code === CHAR_EXCLAMATION_MARK && index === start) { + negatedExtglob = true; + } + + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + + if (code === CHAR_RIGHT_PARENTHESES) { + isGlob = token.isGlob = true; + finished = true; + break; + } + } + continue; + } + break; + } + } + + if (code === CHAR_ASTERISK) { + if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + + if (code === CHAR_QUESTION_MARK) { + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + + if (code === CHAR_LEFT_SQUARE_BRACKET) { + while (eos() !== true && (next = advance())) { + if (next === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + isBracket = token.isBracket = true; + isGlob = token.isGlob = true; + finished = true; + break; + } + } + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) { + negated = token.negated = true; + start++; + continue; + } + + if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_LEFT_PARENTHESES) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + + if (code === CHAR_RIGHT_PARENTHESES) { + finished = true; + break; + } + } + continue; + } + break; + } + + if (isGlob === true) { + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + } + + if (opts.noext === true) { + isExtglob = false; + isGlob = false; + } + + let base = str; + let prefix = ''; + let glob = ''; + + if (start > 0) { + prefix = str.slice(0, start); + str = str.slice(start); + lastIndex -= start; + } + + if (base && isGlob === true && lastIndex > 0) { + base = str.slice(0, lastIndex); + glob = str.slice(lastIndex); + } else if (isGlob === true) { + base = ''; + glob = str; + } else { + base = str; + } + + if (base && base !== '' && base !== '/' && base !== str) { + if (isPathSeparator(base.charCodeAt(base.length - 1))) { + base = base.slice(0, -1); + } + } + + if (opts.unescape === true) { + if (glob) glob = utils.removeBackslashes(glob); + + if (base && backslashes === true) { + base = utils.removeBackslashes(base); + } + } + + const state = { + prefix, + input, + start, + base, + glob, + isBrace, + isBracket, + isGlob, + isExtglob, + isGlobstar, + negated, + negatedExtglob + }; + + if (opts.tokens === true) { + state.maxDepth = 0; + if (!isPathSeparator(code)) { + tokens.push(token); + } + state.tokens = tokens; + } + + if (opts.parts === true || opts.tokens === true) { + let prevIndex; + + for (let idx = 0; idx < slashes.length; idx++) { + const n = prevIndex ? prevIndex + 1 : start; + const i = slashes[idx]; + const value = input.slice(n, i); + if (opts.tokens) { + if (idx === 0 && start !== 0) { + tokens[idx].isPrefix = true; + tokens[idx].value = prefix; + } else { + tokens[idx].value = value; + } + depth(tokens[idx]); + state.maxDepth += tokens[idx].depth; + } + if (idx !== 0 || value !== '') { + parts.push(value); + } + prevIndex = i; + } + + if (prevIndex && prevIndex + 1 < input.length) { + const value = input.slice(prevIndex + 1); + parts.push(value); + + if (opts.tokens) { + tokens[tokens.length - 1].value = value; + depth(tokens[tokens.length - 1]); + state.maxDepth += tokens[tokens.length - 1].depth; + } + } + + state.slashes = slashes; + state.parts = parts; + } + + return state; +}; + +module.exports = scan; diff --git a/tools/node_modules/eslint/node_modules/picomatch/lib/utils.js b/tools/node_modules/eslint/node_modules/picomatch/lib/utils.js new file mode 100644 index 00000000000..c3ca766a7be --- /dev/null +++ b/tools/node_modules/eslint/node_modules/picomatch/lib/utils.js @@ -0,0 +1,64 @@ +'use strict'; + +const path = require('path'); +const win32 = process.platform === 'win32'; +const { + REGEX_BACKSLASH, + REGEX_REMOVE_BACKSLASH, + REGEX_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_GLOBAL +} = require('./constants'); + +exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); +exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); +exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str); +exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1'); +exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/'); + +exports.removeBackslashes = str => { + return str.replace(REGEX_REMOVE_BACKSLASH, match => { + return match === '\\' ? '' : match; + }); +}; + +exports.supportsLookbehinds = () => { + const segs = process.version.slice(1).split('.').map(Number); + if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) { + return true; + } + return false; +}; + +exports.isWindows = options => { + if (options && typeof options.windows === 'boolean') { + return options.windows; + } + return win32 === true || path.sep === '\\'; +}; + +exports.escapeLast = (input, char, lastIdx) => { + const idx = input.lastIndexOf(char, lastIdx); + if (idx === -1) return input; + if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1); + return `${input.slice(0, idx)}\\${input.slice(idx)}`; +}; + +exports.removePrefix = (input, state = {}) => { + let output = input; + if (output.startsWith('./')) { + output = output.slice(2); + state.prefix = './'; + } + return output; +}; + +exports.wrapOutput = (input, state = {}, options = {}) => { + const prepend = options.contains ? '' : '^'; + const append = options.contains ? '' : '$'; + + let output = `${prepend}(?:${input})${append}`; + if (state.negated === true) { + output = `(?:^(?!${output}).*$)`; + } + return output; +}; diff --git a/tools/node_modules/eslint/node_modules/picomatch/package.json b/tools/node_modules/eslint/node_modules/picomatch/package.json new file mode 100644 index 00000000000..3db22d408f0 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/picomatch/package.json @@ -0,0 +1,81 @@ +{ + "name": "picomatch", + "description": "Blazing fast and accurate glob matcher written in JavaScript, with no dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions.", + "version": "2.3.1", + "homepage": "https://github.com/micromatch/picomatch", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "funding": "https://github.com/sponsors/jonschlinkert", + "repository": "micromatch/picomatch", + "bugs": { + "url": "https://github.com/micromatch/picomatch/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "lib" + ], + "main": "index.js", + "engines": { + "node": ">=8.6" + }, + "scripts": { + "lint": "eslint --cache --cache-location node_modules/.cache/.eslintcache --report-unused-disable-directives --ignore-path .gitignore .", + "mocha": "mocha --reporter dot", + "test": "npm run lint && npm run mocha", + "test:ci": "npm run test:cover", + "test:cover": "nyc npm run mocha" + }, + "devDependencies": { + "eslint": "^6.8.0", + "fill-range": "^7.0.1", + "gulp-format-md": "^2.0.0", + "mocha": "^6.2.2", + "nyc": "^15.0.0", + "time-require": "github:jonschlinkert/time-require" + }, + "keywords": [ + "glob", + "match", + "picomatch" + ], + "nyc": { + "reporter": [ + "html", + "lcov", + "text-summary" + ] + }, + "verb": { + "toc": { + "render": true, + "method": "preWrite", + "maxdepth": 3 + }, + "layout": "empty", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "related": { + "list": [ + "braces", + "micromatch" + ] + }, + "reflinks": [ + "braces", + "expand-brackets", + "extglob", + "fill-range", + "micromatch", + "minimatch", + "nanomatch", + "picomatch" + ] + } +} diff --git a/tools/node_modules/eslint/node_modules/queue-microtask/LICENSE b/tools/node_modules/eslint/node_modules/queue-microtask/LICENSE new file mode 100755 index 00000000000..c7e6852752b --- /dev/null +++ b/tools/node_modules/eslint/node_modules/queue-microtask/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/queue-microtask/index.js b/tools/node_modules/eslint/node_modules/queue-microtask/index.js new file mode 100644 index 00000000000..55605343a2d --- /dev/null +++ b/tools/node_modules/eslint/node_modules/queue-microtask/index.js @@ -0,0 +1,9 @@ +/*! queue-microtask. MIT License. Feross Aboukhadijeh */ +let promise + +module.exports = typeof queueMicrotask === 'function' + ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global) + // reuse resolved promise, and allocate it lazily + : cb => (promise || (promise = Promise.resolve())) + .then(cb) + .catch(err => setTimeout(() => { throw err }, 0)) diff --git a/tools/node_modules/eslint/node_modules/queue-microtask/package.json b/tools/node_modules/eslint/node_modules/queue-microtask/package.json new file mode 100644 index 00000000000..d29a401f517 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/queue-microtask/package.json @@ -0,0 +1,55 @@ +{ + "name": "queue-microtask", + "description": "fast, tiny `queueMicrotask` shim for modern engines", + "version": "1.2.3", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/queue-microtask/issues" + }, + "devDependencies": { + "standard": "*", + "tape": "^5.2.2" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "homepage": "https://github.com/feross/queue-microtask", + "keywords": [ + "asap", + "immediate", + "micro task", + "microtask", + "nextTick", + "process.nextTick", + "queue micro task", + "queue microtask", + "queue-microtask", + "queueMicrotask", + "setImmediate", + "task" + ], + "license": "MIT", + "main": "index.js", + "repository": { + "type": "git", + "url": "git://github.com/feross/queue-microtask.git" + }, + "scripts": { + "test": "standard && tape test/*.js" + } +} diff --git a/tools/node_modules/eslint/node_modules/regextras/LICENSE-MIT.txt b/tools/node_modules/eslint/node_modules/regextras/LICENSE-MIT.txt deleted file mode 100644 index 2f25801bc69..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/LICENSE-MIT.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (C) 2012 Brett Zamir - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/regextras/dist/index-es.js b/tools/node_modules/eslint/node_modules/regextras/dist/index-es.js deleted file mode 100644 index 22f4c75b2f0..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/dist/index-es.js +++ /dev/null @@ -1,442 +0,0 @@ -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; -} - -function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); -} - -function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - - try { - Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); - return true; - } catch (e) { - return false; - } -} - -function _construct(Parent, args, Class) { - if (_isNativeReflectConstruct()) { - _construct = Reflect.construct; - } else { - _construct = function _construct(Parent, args, Class) { - var a = [null]; - a.push.apply(a, args); - var Constructor = Function.bind.apply(Parent, a); - var instance = new Constructor(); - if (Class) _setPrototypeOf(instance, Class.prototype); - return instance; - }; - } - - return _construct.apply(null, arguments); -} - -/* eslint-disable node/no-unsupported-features/es-syntax */ - -/** - * @param {RegExp} regex - * @param {string} newFlags - * @param {Integer} [newLastIndex=regex.lastIndex] - * @returns {RegExp} - */ -function mixinRegex(regex, newFlags) { - var newLastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : regex.lastIndex; - newFlags = newFlags || ''; - regex = new RegExp(regex.source, (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '')); - regex.lastIndex = newLastIndex; - return regex; -} - -var RegExtras = /*#__PURE__*/function () { - function RegExtras(regex, flags, newLastIndex) { - _classCallCheck(this, RegExtras); - - this.regex = mixinRegex(typeof regex === 'string' ? new RegExp(regex) : mixinRegex(regex), flags || '', newLastIndex); - } - - _createClass(RegExtras, [{ - key: "forEach", - value: function forEach(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - - return this; - } - }, { - key: "some", - value: function some(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - ret, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return true; - } - } - - return false; - } - }, { - key: "every", - value: function every(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - ret, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (!ret) { - return false; - } - } - - return true; - } - }, { - key: "map", - value: function map(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var ret = []; - var regex = mixinRegex(this.regex, 'g'); - var matches, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - - return ret; - } - }, { - key: "filter", - value: function filter(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = [], - regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - - return ret; - } - }, { - key: "reduce", - value: function reduce(str, cb, prev) { - var thisObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this.regex, 'g'); - - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - - return prev; - } - }, { - key: "reduceRight", - value: function reduceRight(str, cb, prevOrig, thisObjOrig) { - var matches, - n0, - i, - thisObj = thisObjOrig, - prev = prevOrig; - var matchesContainer = [], - regex = mixinRegex(this.regex, 'g'); - thisObj = thisObj || null; - - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - - i = matchesContainer.length; - - if (!i) { - if (arguments.length < 3) { - throw new TypeError('reduce of empty matches array with no initial value'); - } - - return prev; - } - - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; - } - }, { - key: "find", - value: function find(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return n0[0]; - } - } - - return false; - } - }, { - key: "findIndex", - value: function findIndex(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - var n0 = matches.splice(0, 1); - var ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return i - 1; - } - } - - return -1; - } - }, { - key: "findExec", - value: function findExec(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - var n0 = matches.splice(0, 1); - var ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return matches; - } - } - - return false; - } - }, { - key: "filterExec", - value: function filterExec(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = [], - regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - - return ret; - } - }]); - - return RegExtras; -}(); - -var _RegExtras = RegExtras; - -RegExtras = function RegExtras() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - // eslint-disable-line no-class-assign - return _construct(_RegExtras, args); -}; - -RegExtras.prototype = _RegExtras.prototype; -RegExtras.mixinRegex = mixinRegex; - -/* eslint-disable node/no-unsupported-features/es-syntax */ -// We copy the regular expression so as to be able to always -// ensure the exec expression is a global one (and thereby prevent recursion) - -/** - * - * @param {RegExtras} RegExtras - * @returns {void} - */ -function addPrototypeMethods(RegExtras) { - RegExtras.prototype.entries = /*#__PURE__*/regeneratorRuntime.mark(function _callee(str) { - var matches, i, regex; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - i = 0; - regex = RegExtras.mixinRegex(this.regex, 'g'); - - case 2: - if (!((matches = regex.exec(str)) !== null)) { - _context.next = 7; - break; - } - - _context.next = 5; - return [i++, matches]; - - case 5: - _context.next = 2; - break; - - case 7: - case "end": - return _context.stop(); - } - } - }, _callee, this); - }); - RegExtras.prototype.values = /*#__PURE__*/regeneratorRuntime.mark(function _callee2(str) { - var matches, regex; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - regex = RegExtras.mixinRegex(this.regex, 'g'); - - case 1: - if (!((matches = regex.exec(str)) !== null)) { - _context2.next = 6; - break; - } - - _context2.next = 4; - return matches; - - case 4: - _context2.next = 1; - break; - - case 6: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - }); - RegExtras.prototype.keys = /*#__PURE__*/regeneratorRuntime.mark(function _callee3(str) { - var i, regex; - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - i = 0; - regex = RegExtras.mixinRegex(this.regex, 'g'); - - case 2: - if (!(regex.exec(str) !== null)) { - _context3.next = 7; - break; - } - - _context3.next = 5; - return i++; - - case 5: - _context3.next = 2; - break; - - case 7: - case "end": - return _context3.stop(); - } - } - }, _callee3, this); - }); -} - -addPrototypeMethods(RegExtras); - -export { RegExtras, mixinRegex }; diff --git a/tools/node_modules/eslint/node_modules/regextras/dist/index-es.min.js b/tools/node_modules/eslint/node_modules/regextras/dist/index-es.min.js deleted file mode 100644 index e73391fdaa8..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/dist/index-es.min.js +++ /dev/null @@ -1 +0,0 @@ -function e(e,n){for(var t=0;t2&&void 0!==arguments[2]?arguments[2]:e.lastIndex;return n=n||"",(e=new RegExp(e.source,(n.includes("g")||e.global?"g":"")+(n.includes("i")||e.ignoreCase?"i":"")+(n.includes("m")||e.multiline?"m":"")+(n.includes("u")||e.unicode?"u":"")+(n.includes("y")||e.sticky?"y":"")+(n.includes("s")||e.dotAll?"s":""))).lastIndex=t,e}var u=function(){function n(e,t,r){!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,n),this.regex=c("string"==typeof e?new RegExp(e):c(e),t||"",r)}var t,r,u;return t=n,(r=[{key:"forEach",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,l=c(this.regex,"g"),i=0;null!==(t=l.exec(e));)r=t.splice(0,1),n.apply(u,t.concat(i++,r));return this}},{key:"some",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,l=c(this.regex,"g"),i=0;null!==(t=l.exec(e));)if(r=t.splice(0,1),n.apply(u,t.concat(i++,r)))return!0;return!1}},{key:"every",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,l=c(this.regex,"g"),i=0;null!==(t=l.exec(e));)if(r=t.splice(0,1),!n.apply(u,t.concat(i++,r)))return!1;return!0}},{key:"map",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,l=[],i=c(this.regex,"g"),o=0;null!==(t=i.exec(e));)r=t.splice(0,1),l.push(n.apply(u,t.concat(o++,r)));return l}},{key:"filter",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,l=0,i=[],o=c(this.regex,"g");null!==(t=o.exec(e));)r=t.splice(0,1),t=t.concat(l++,r),n.apply(u,t)&&i.push(r[0]);return i}},{key:"reduce",value:function(e,n,t){var r,u,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,i=0,o=c(this.regex,"g");for(t||null!==(r=o.exec(e))&&(u=r.splice(0,1),t=n.apply(l,[""].concat(r.concat(i++,u))));null!==(r=o.exec(e));)u=r.splice(0,1),t=n.apply(l,[t].concat(r.concat(i++,u)));return t}},{key:"reduceRight",value:function(e,n,t,r){var u,l,i,o=r,a=t,p=[],s=c(this.regex,"g");for(o=o||null;null!==(u=s.exec(e));)p.push(u);if(!(i=p.length)){if(arguments.length<3)throw new TypeError("reduce of empty matches array with no initial value");return a}return a||(u=p.splice(-1)[0],l=u.splice(0,1),a=n.apply(o,[""].concat(u.concat(i--,l)))),p.reduceRight((function(e,t){return l=t.splice(0,1),a=n.apply(o,[a].concat(t.concat(i--,l))),e}),p),a}},{key:"find",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,l=0,i=c(this.regex,"g");null!==(t=i.exec(e));)if(r=t.splice(0,1),n.apply(u,t.concat(l++,r)))return r[0];return!1}},{key:"findIndex",value:function(e,n){for(var t,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,u=c(this.regex,"g"),l=0;null!==(t=u.exec(e));){var i=t.splice(0,1),o=n.apply(r,t.concat(l++,i));if(o)return l-1}return-1}},{key:"findExec",value:function(e,n){for(var t,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,u=c(this.regex,"g"),l=0;null!==(t=u.exec(e));){var i=t.splice(0,1),o=n.apply(r,t.concat(l++,i));if(o)return t}return!1}},{key:"filterExec",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,l=0,i=[],o=c(this.regex,"g");null!==(t=o.exec(e));)r=t.splice(0,1),t.push(l++,r[0]),n.apply(u,t)&&i.push(t);return i}}])&&e(t.prototype,r),u&&e(t,u),n}(),l=u;(u=function(){for(var e=arguments.length,n=new Array(e),t=0;t 2 && arguments[2] !== undefined ? arguments[2] : regex.lastIndex; - newFlags = newFlags || ''; - regex = new RegExp(regex.source, (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '')); - regex.lastIndex = newLastIndex; - return regex; - } - - exports.RegExtras = /*#__PURE__*/function () { - function RegExtras(regex, flags, newLastIndex) { - _classCallCheck(this, RegExtras); - - this.regex = mixinRegex(typeof regex === 'string' ? new RegExp(regex) : mixinRegex(regex), flags || '', newLastIndex); - } - - _createClass(RegExtras, [{ - key: "forEach", - value: function forEach(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - - return this; - } - }, { - key: "some", - value: function some(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - ret, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return true; - } - } - - return false; - } - }, { - key: "every", - value: function every(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - ret, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (!ret) { - return false; - } - } - - return true; - } - }, { - key: "map", - value: function map(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var ret = []; - var regex = mixinRegex(this.regex, 'g'); - var matches, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - - return ret; - } - }, { - key: "filter", - value: function filter(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = [], - regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - - return ret; - } - }, { - key: "reduce", - value: function reduce(str, cb, prev) { - var thisObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this.regex, 'g'); - - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - - return prev; - } - }, { - key: "reduceRight", - value: function reduceRight(str, cb, prevOrig, thisObjOrig) { - var matches, - n0, - i, - thisObj = thisObjOrig, - prev = prevOrig; - var matchesContainer = [], - regex = mixinRegex(this.regex, 'g'); - thisObj = thisObj || null; - - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - - i = matchesContainer.length; - - if (!i) { - if (arguments.length < 3) { - throw new TypeError('reduce of empty matches array with no initial value'); - } - - return prev; - } - - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; - } - }, { - key: "find", - value: function find(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return n0[0]; - } - } - - return false; - } - }, { - key: "findIndex", - value: function findIndex(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - var n0 = matches.splice(0, 1); - var ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return i - 1; - } - } - - return -1; - } - }, { - key: "findExec", - value: function findExec(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - var n0 = matches.splice(0, 1); - var ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return matches; - } - } - - return false; - } - }, { - key: "filterExec", - value: function filterExec(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = [], - regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - - return ret; - } - }]); - - return RegExtras; - }(); - - var _RegExtras = exports.RegExtras; - - exports.RegExtras = function RegExtras() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - // eslint-disable-line no-class-assign - return _construct(_RegExtras, args); - }; - - exports.RegExtras.prototype = _RegExtras.prototype; - exports.RegExtras.mixinRegex = mixinRegex; - - /* eslint-disable node/no-unsupported-features/es-syntax */ - // We copy the regular expression so as to be able to always - // ensure the exec expression is a global one (and thereby prevent recursion) - - /** - * - * @param {RegExtras} RegExtras - * @returns {void} - */ - function addPrototypeMethods(RegExtras) { - RegExtras.prototype.entries = /*#__PURE__*/regeneratorRuntime.mark(function _callee(str) { - var matches, i, regex; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - i = 0; - regex = RegExtras.mixinRegex(this.regex, 'g'); - - case 2: - if (!((matches = regex.exec(str)) !== null)) { - _context.next = 7; - break; - } - - _context.next = 5; - return [i++, matches]; - - case 5: - _context.next = 2; - break; - - case 7: - case "end": - return _context.stop(); - } - } - }, _callee, this); - }); - RegExtras.prototype.values = /*#__PURE__*/regeneratorRuntime.mark(function _callee2(str) { - var matches, regex; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - regex = RegExtras.mixinRegex(this.regex, 'g'); - - case 1: - if (!((matches = regex.exec(str)) !== null)) { - _context2.next = 6; - break; - } - - _context2.next = 4; - return matches; - - case 4: - _context2.next = 1; - break; - - case 6: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - }); - RegExtras.prototype.keys = /*#__PURE__*/regeneratorRuntime.mark(function _callee3(str) { - var i, regex; - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - i = 0; - regex = RegExtras.mixinRegex(this.regex, 'g'); - - case 2: - if (!(regex.exec(str) !== null)) { - _context3.next = 7; - break; - } - - _context3.next = 5; - return i++; - - case 5: - _context3.next = 2; - break; - - case 7: - case "end": - return _context3.stop(); - } - } - }, _callee3, this); - }); - } - - addPrototypeMethods(exports.RegExtras); - - exports.mixinRegex = mixinRegex; - - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); diff --git a/tools/node_modules/eslint/node_modules/regextras/dist/index-umd.min.js b/tools/node_modules/eslint/node_modules/regextras/dist/index-umd.min.js deleted file mode 100644 index d663d9eddb2..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/dist/index-umd.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).RegExtras={})}(this,(function(e){"use strict";function n(e,n){for(var t=0;t2&&void 0!==arguments[2]?arguments[2]:e.lastIndex;return n=n||"",(e=new RegExp(e.source,(n.includes("g")||e.global?"g":"")+(n.includes("i")||e.ignoreCase?"i":"")+(n.includes("m")||e.multiline?"m":"")+(n.includes("u")||e.unicode?"u":"")+(n.includes("y")||e.sticky?"y":"")+(n.includes("s")||e.dotAll?"s":""))).lastIndex=t,e}e.RegExtras=function(){function e(n,t,r){!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.regex=c("string"==typeof n?new RegExp(n):c(n),t||"",r)}var t,r,u;return t=e,(r=[{key:"forEach",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=c(this.regex,"g"),l=0;null!==(t=i.exec(e));)r=t.splice(0,1),n.apply(u,t.concat(l++,r));return this}},{key:"some",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=c(this.regex,"g"),l=0;null!==(t=i.exec(e));)if(r=t.splice(0,1),n.apply(u,t.concat(l++,r)))return!0;return!1}},{key:"every",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=c(this.regex,"g"),l=0;null!==(t=i.exec(e));)if(r=t.splice(0,1),!n.apply(u,t.concat(l++,r)))return!1;return!0}},{key:"map",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=[],l=c(this.regex,"g"),o=0;null!==(t=l.exec(e));)r=t.splice(0,1),i.push(n.apply(u,t.concat(o++,r)));return i}},{key:"filter",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=0,l=[],o=c(this.regex,"g");null!==(t=o.exec(e));)r=t.splice(0,1),t=t.concat(i++,r),n.apply(u,t)&&l.push(r[0]);return l}},{key:"reduce",value:function(e,n,t){var r,u,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,l=0,o=c(this.regex,"g");for(t||null!==(r=o.exec(e))&&(u=r.splice(0,1),t=n.apply(i,[""].concat(r.concat(l++,u))));null!==(r=o.exec(e));)u=r.splice(0,1),t=n.apply(i,[t].concat(r.concat(l++,u)));return t}},{key:"reduceRight",value:function(e,n,t,r){var u,i,l,o=r,a=t,s=[],f=c(this.regex,"g");for(o=o||null;null!==(u=f.exec(e));)s.push(u);if(!(l=s.length)){if(arguments.length<3)throw new TypeError("reduce of empty matches array with no initial value");return a}return a||(u=s.splice(-1)[0],i=u.splice(0,1),a=n.apply(o,[""].concat(u.concat(l--,i)))),s.reduceRight((function(e,t){return i=t.splice(0,1),a=n.apply(o,[a].concat(t.concat(l--,i))),e}),s),a}},{key:"find",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=0,l=c(this.regex,"g");null!==(t=l.exec(e));)if(r=t.splice(0,1),n.apply(u,t.concat(i++,r)))return r[0];return!1}},{key:"findIndex",value:function(e,n){for(var t,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,u=c(this.regex,"g"),i=0;null!==(t=u.exec(e));){var l=t.splice(0,1),o=n.apply(r,t.concat(i++,l));if(o)return i-1}return-1}},{key:"findExec",value:function(e,n){for(var t,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,u=c(this.regex,"g"),i=0;null!==(t=u.exec(e));){var l=t.splice(0,1),o=n.apply(r,t.concat(i++,l));if(o)return t}return!1}},{key:"filterExec",value:function(e,n){for(var t,r,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=0,l=[],o=c(this.regex,"g");null!==(t=o.exec(e));)r=t.splice(0,1),t.push(i++,r[0]),n.apply(u,t)&&l.push(t);return l}}])&&n(t.prototype,r),u&&n(t,u),e}();var i,l=e.RegExtras;e.RegExtras=function(){for(var e=arguments.length,n=new Array(e),t=0;t 2 && arguments[2] !== undefined ? arguments[2] : regex.lastIndex; - newFlags = newFlags || ''; - regex = new RegExp(regex.source, (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '')); - regex.lastIndex = newLastIndex; - return regex; -} - -var RegExtras = /*#__PURE__*/function () { - function RegExtras(regex, flags, newLastIndex) { - _classCallCheck(this, RegExtras); - - this.regex = mixinRegex(typeof regex === 'string' ? new RegExp(regex) : mixinRegex(regex), flags || '', newLastIndex); - } - - _createClass(RegExtras, [{ - key: "forEach", - value: function forEach(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - - return this; - } - }, { - key: "some", - value: function some(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - ret, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return true; - } - } - - return false; - } - }, { - key: "every", - value: function every(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - ret, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (!ret) { - return false; - } - } - - return true; - } - }, { - key: "map", - value: function map(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var ret = []; - var regex = mixinRegex(this.regex, 'g'); - var matches, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - - return ret; - } - }, { - key: "filter", - value: function filter(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = [], - regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - - return ret; - } - }, { - key: "reduce", - value: function reduce(str, cb, prev) { - var thisObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this.regex, 'g'); - - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - - return prev; - } - }, { - key: "reduceRight", - value: function reduceRight(str, cb, prevOrig, thisObjOrig) { - var matches, - n0, - i, - thisObj = thisObjOrig, - prev = prevOrig; - var matchesContainer = [], - regex = mixinRegex(this.regex, 'g'); - thisObj = thisObj || null; - - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - - i = matchesContainer.length; - - if (!i) { - if (arguments.length < 3) { - throw new TypeError('reduce of empty matches array with no initial value'); - } - - return prev; - } - - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; - } - }, { - key: "find", - value: function find(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return n0[0]; - } - } - - return false; - } - }, { - key: "findIndex", - value: function findIndex(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - var n0 = matches.splice(0, 1); - var ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return i - 1; - } - } - - return -1; - } - }, { - key: "findExec", - value: function findExec(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - var n0 = matches.splice(0, 1); - var ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return matches; - } - } - - return false; - } - }, { - key: "filterExec", - value: function filterExec(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = [], - regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - - return ret; - } - }]); - - return RegExtras; -}(); - -var _RegExtras = RegExtras; - -RegExtras = function RegExtras() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - // eslint-disable-line no-class-assign - return _construct(_RegExtras, args); -}; - -RegExtras.prototype = _RegExtras.prototype; -RegExtras.mixinRegex = mixinRegex; - -export { RegExtras, mixinRegex }; diff --git a/tools/node_modules/eslint/node_modules/regextras/dist/main-umd.js b/tools/node_modules/eslint/node_modules/regextras/dist/main-umd.js deleted file mode 100644 index a744ec100a7..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/dist/main-umd.js +++ /dev/null @@ -1,352 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.RegExtras = {})); -}(this, (function (exports) { 'use strict'; - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; - } - - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); - } - - function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - - try { - Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); - return true; - } catch (e) { - return false; - } - } - - function _construct(Parent, args, Class) { - if (_isNativeReflectConstruct()) { - _construct = Reflect.construct; - } else { - _construct = function _construct(Parent, args, Class) { - var a = [null]; - a.push.apply(a, args); - var Constructor = Function.bind.apply(Parent, a); - var instance = new Constructor(); - if (Class) _setPrototypeOf(instance, Class.prototype); - return instance; - }; - } - - return _construct.apply(null, arguments); - } - - /* eslint-disable node/no-unsupported-features/es-syntax */ - - /** - * @param {RegExp} regex - * @param {string} newFlags - * @param {Integer} [newLastIndex=regex.lastIndex] - * @returns {RegExp} - */ - function mixinRegex(regex, newFlags) { - var newLastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : regex.lastIndex; - newFlags = newFlags || ''; - regex = new RegExp(regex.source, (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '')); - regex.lastIndex = newLastIndex; - return regex; - } - - exports.RegExtras = /*#__PURE__*/function () { - function RegExtras(regex, flags, newLastIndex) { - _classCallCheck(this, RegExtras); - - this.regex = mixinRegex(typeof regex === 'string' ? new RegExp(regex) : mixinRegex(regex), flags || '', newLastIndex); - } - - _createClass(RegExtras, [{ - key: "forEach", - value: function forEach(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - - return this; - } - }, { - key: "some", - value: function some(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - ret, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return true; - } - } - - return false; - } - }, { - key: "every", - value: function every(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - ret, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (!ret) { - return false; - } - } - - return true; - } - }, { - key: "map", - value: function map(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var ret = []; - var regex = mixinRegex(this.regex, 'g'); - var matches, - n0, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - - return ret; - } - }, { - key: "filter", - value: function filter(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = [], - regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - - return ret; - } - }, { - key: "reduce", - value: function reduce(str, cb, prev) { - var thisObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this.regex, 'g'); - - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - - return prev; - } - }, { - key: "reduceRight", - value: function reduceRight(str, cb, prevOrig, thisObjOrig) { - var matches, - n0, - i, - thisObj = thisObjOrig, - prev = prevOrig; - var matchesContainer = [], - regex = mixinRegex(this.regex, 'g'); - thisObj = thisObj || null; - - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - - i = matchesContainer.length; - - if (!i) { - if (arguments.length < 3) { - throw new TypeError('reduce of empty matches array with no initial value'); - } - - return prev; - } - - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; - } - }, { - key: "find", - value: function find(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return n0[0]; - } - } - - return false; - } - }, { - key: "findIndex", - value: function findIndex(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - var n0 = matches.splice(0, 1); - var ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return i - 1; - } - } - - return -1; - } - }, { - key: "findExec", - value: function findExec(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var regex = mixinRegex(this.regex, 'g'); - var matches, - i = 0; - - while ((matches = regex.exec(str)) !== null) { - var n0 = matches.splice(0, 1); - var ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return matches; - } - } - - return false; - } - }, { - key: "filterExec", - value: function filterExec(str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = [], - regex = mixinRegex(this.regex, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - - return ret; - } - }]); - - return RegExtras; - }(); - - var _RegExtras = exports.RegExtras; - - exports.RegExtras = function RegExtras() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - // eslint-disable-line no-class-assign - return _construct(_RegExtras, args); - }; - - exports.RegExtras.prototype = _RegExtras.prototype; - exports.RegExtras.mixinRegex = mixinRegex; - - exports.mixinRegex = mixinRegex; - - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); diff --git a/tools/node_modules/eslint/node_modules/regextras/dist/prototype-es.js b/tools/node_modules/eslint/node_modules/regextras/dist/prototype-es.js deleted file mode 100644 index b6630dee374..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/dist/prototype-es.js +++ /dev/null @@ -1,170 +0,0 @@ -/* eslint-disable node/no-unsupported-features/es-syntax */ - -/** - * @param {RegExp} regex - * @param {string} newFlags - * @param {Integer} [newLastIndex=regex.lastIndex] - * @returns {RegExp} - */ -function mixinRegex(regex, newFlags) { - var newLastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : regex.lastIndex; - newFlags = newFlags || ''; - regex = new RegExp(regex.source, (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '')); - regex.lastIndex = newLastIndex; - return regex; -} - -/* eslint-disable no-extend-native, - no-use-extend-native/no-use-extend-native, - node/no-unsupported-features/es-syntax */ - -RegExp.prototype.forEach = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - - return this; -}; - -RegExp.prototype.some = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return true; - } - } - - return false; -}; - -RegExp.prototype.every = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (!ret) { - return false; - } - } - - return true; -}; - -RegExp.prototype.map = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - - return ret; -}; - -RegExp.prototype.filter = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - - if (cb.apply(thisObj, matches)) { - ret.push(matches[0]); - } - } - - return ret; -}; - -RegExp.prototype.reduce = function (str, cb, prev) { - var thisObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(n0, i++))); - } - } - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(n0, i++))); - } - - return prev; -}; - -RegExp.prototype.reduceRight = function (str, cb, prevOrig, thisObjOrig) { - var matches, - n0, - i, - prev = prevOrig, - thisObj = thisObjOrig; - var regex = mixinRegex(this, 'g'); - var matchesContainer = []; - thisObj = thisObj || null; - - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - - i = matchesContainer.length; - - if (!i) { - if (arguments.length < 3) { - throw new TypeError('reduce of empty matches array with no initial value'); - } - - return prev; - } - - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(n0, i--))); - } - - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(n0, i--))); - return container; - }, matchesContainer); - return prev; -}; diff --git a/tools/node_modules/eslint/node_modules/regextras/dist/prototype-umd.js b/tools/node_modules/eslint/node_modules/regextras/dist/prototype-umd.js deleted file mode 100644 index 552f1d52dc2..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/dist/prototype-umd.js +++ /dev/null @@ -1,177 +0,0 @@ -(function (factory) { - typeof define === 'function' && define.amd ? define(factory) : - factory(); -}((function () { 'use strict'; - - /* eslint-disable node/no-unsupported-features/es-syntax */ - - /** - * @param {RegExp} regex - * @param {string} newFlags - * @param {Integer} [newLastIndex=regex.lastIndex] - * @returns {RegExp} - */ - function mixinRegex(regex, newFlags) { - var newLastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : regex.lastIndex; - newFlags = newFlags || ''; - regex = new RegExp(regex.source, (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '')); - regex.lastIndex = newLastIndex; - return regex; - } - - /* eslint-disable no-extend-native, - no-use-extend-native/no-use-extend-native, - node/no-unsupported-features/es-syntax */ - - RegExp.prototype.forEach = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - - return this; - }; - - RegExp.prototype.some = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return true; - } - } - - return false; - }; - - RegExp.prototype.every = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (!ret) { - return false; - } - } - - return true; - }; - - RegExp.prototype.map = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - - return ret; - }; - - RegExp.prototype.filter = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - - if (cb.apply(thisObj, matches)) { - ret.push(matches[0]); - } - } - - return ret; - }; - - RegExp.prototype.reduce = function (str, cb, prev) { - var thisObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(n0, i++))); - } - } - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(n0, i++))); - } - - return prev; - }; - - RegExp.prototype.reduceRight = function (str, cb, prevOrig, thisObjOrig) { - var matches, - n0, - i, - prev = prevOrig, - thisObj = thisObjOrig; - var regex = mixinRegex(this, 'g'); - var matchesContainer = []; - thisObj = thisObj || null; - - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - - i = matchesContainer.length; - - if (!i) { - if (arguments.length < 3) { - throw new TypeError('reduce of empty matches array with no initial value'); - } - - return prev; - } - - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(n0, i--))); - } - - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(n0, i--))); - return container; - }, matchesContainer); - return prev; - }; - -}))); diff --git a/tools/node_modules/eslint/node_modules/regextras/dist/regexp-prototype-es.js b/tools/node_modules/eslint/node_modules/regextras/dist/regexp-prototype-es.js deleted file mode 100644 index 9d7fad59ad9..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/dist/regexp-prototype-es.js +++ /dev/null @@ -1,250 +0,0 @@ -/* eslint-disable node/no-unsupported-features/es-syntax */ - -/** - * @param {RegExp} regex - * @param {string} newFlags - * @param {Integer} [newLastIndex=regex.lastIndex] - * @returns {RegExp} - */ -function mixinRegex(regex, newFlags) { - var newLastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : regex.lastIndex; - newFlags = newFlags || ''; - regex = new RegExp(regex.source, (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '')); - regex.lastIndex = newLastIndex; - return regex; -} - -/* eslint-disable no-extend-native, - no-use-extend-native/no-use-extend-native, - node/no-unsupported-features/es-syntax */ - -RegExp.prototype.forEach = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - - return this; -}; - -RegExp.prototype.some = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return true; - } - } - - return false; -}; - -RegExp.prototype.every = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (!ret) { - return false; - } - } - - return true; -}; - -RegExp.prototype.map = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - - return ret; -}; - -RegExp.prototype.filter = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - - return ret; -}; - -RegExp.prototype.reduce = function (str, cb, prev) { - var thisObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - - return prev; -}; - -RegExp.prototype.reduceRight = function (str, cb, prevOrig, thisObjOrig) { - var matches, - n0, - i, - prev = prevOrig, - thisObj = thisObjOrig; - var regex = mixinRegex(this, 'g'); - var matchesContainer = []; - thisObj = thisObj || null; - - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - - i = matchesContainer.length; - - if (!i) { - if (arguments.length < 3) { - throw new TypeError('reduce of empty matches array with no initial value'); - } - - return prev; - } - - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; -}; - -RegExp.prototype.find = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return n0[0]; - } - } - - return false; -}; - -RegExp.prototype.findIndex = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return i - 1; - } - } - - return -1; -}; - -RegExp.prototype.findExec = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return matches; - } - } - - return false; -}; - -RegExp.prototype.filterExec = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = [], - regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - - return ret; -}; diff --git a/tools/node_modules/eslint/node_modules/regextras/dist/regexp-prototype-umd.js b/tools/node_modules/eslint/node_modules/regextras/dist/regexp-prototype-umd.js deleted file mode 100644 index 01bd099b095..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/dist/regexp-prototype-umd.js +++ /dev/null @@ -1,257 +0,0 @@ -(function (factory) { - typeof define === 'function' && define.amd ? define(factory) : - factory(); -}((function () { 'use strict'; - - /* eslint-disable node/no-unsupported-features/es-syntax */ - - /** - * @param {RegExp} regex - * @param {string} newFlags - * @param {Integer} [newLastIndex=regex.lastIndex] - * @returns {RegExp} - */ - function mixinRegex(regex, newFlags) { - var newLastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : regex.lastIndex; - newFlags = newFlags || ''; - regex = new RegExp(regex.source, (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '')); - regex.lastIndex = newLastIndex; - return regex; - } - - /* eslint-disable no-extend-native, - no-use-extend-native/no-use-extend-native, - node/no-unsupported-features/es-syntax */ - - RegExp.prototype.forEach = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - - return this; - }; - - RegExp.prototype.some = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return true; - } - } - - return false; - }; - - RegExp.prototype.every = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (!ret) { - return false; - } - } - - return true; - }; - - RegExp.prototype.map = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - - return ret; - }; - - RegExp.prototype.filter = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - - return ret; - }; - - RegExp.prototype.reduce = function (str, cb, prev) { - var thisObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var matches, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - - return prev; - }; - - RegExp.prototype.reduceRight = function (str, cb, prevOrig, thisObjOrig) { - var matches, - n0, - i, - prev = prevOrig, - thisObj = thisObjOrig; - var regex = mixinRegex(this, 'g'); - var matchesContainer = []; - thisObj = thisObj || null; - - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - - i = matchesContainer.length; - - if (!i) { - if (arguments.length < 3) { - throw new TypeError('reduce of empty matches array with no initial value'); - } - - return prev; - } - - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; - }; - - RegExp.prototype.find = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return n0[0]; - } - } - - return false; - }; - - RegExp.prototype.findIndex = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return i - 1; - } - } - - return -1; - }; - - RegExp.prototype.findExec = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - var regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return matches; - } - } - - return false; - }; - - RegExp.prototype.filterExec = function (str, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = [], - regex = mixinRegex(this, 'g'); - - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - - return ret; - }; - -}))); diff --git a/tools/node_modules/eslint/node_modules/regextras/dist/string-prototype-es.js b/tools/node_modules/eslint/node_modules/regextras/dist/string-prototype-es.js deleted file mode 100644 index dcb05f926e1..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/dist/string-prototype-es.js +++ /dev/null @@ -1,248 +0,0 @@ -/* eslint-disable node/no-unsupported-features/es-syntax */ - -/** - * @param {RegExp} regex - * @param {string} newFlags - * @param {Integer} [newLastIndex=regex.lastIndex] - * @returns {RegExp} - */ -function mixinRegex(regex, newFlags) { - var newLastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : regex.lastIndex; - newFlags = newFlags || ''; - regex = new RegExp(regex.source, (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '')); - regex.lastIndex = newLastIndex; - return regex; -} - -// We copy the regular expression so as to be able to always ensure the exec - -String.prototype.forEach = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - - return this; -}; - -String.prototype.some = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return true; - } - } - - return false; -}; - -String.prototype.every = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (!ret) { - return false; - } - } - - return true; -}; - -String.prototype.map = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - - return ret; -}; - -String.prototype.filter = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - - return ret; -}; - -String.prototype.reduce = function (regex, cb, prev) { - var thisObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var matches, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - if (!prev) { - if ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - - return prev; -}; - -String.prototype.reduceRight = function (regex, cb, prevOrig, thisObjOrig) { - var matches, - n0, - i, - prev = prevOrig, - thisObj = thisObjOrig; - var matchesContainer = []; - regex = mixinRegex(regex, 'g'); - thisObj = thisObj || null; - - while ((matches = regex.exec(this)) !== null) { - matchesContainer.push(matches); - } - - i = matchesContainer.length; - - if (!i) { - if (arguments.length < 3) { - throw new TypeError('reduce of empty matches array with no initial value'); - } - - return prev; - } - - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; -}; - -String.prototype.find = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return n0[0]; - } - } - - return false; -}; - -String.prototype.findIndex = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return i - 1; - } - } - - return -1; -}; - -String.prototype.findExec = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return matches; - } - } - - return false; -}; - -String.prototype.filterExec = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - - return ret; -}; diff --git a/tools/node_modules/eslint/node_modules/regextras/dist/string-prototype-umd.js b/tools/node_modules/eslint/node_modules/regextras/dist/string-prototype-umd.js deleted file mode 100644 index ee23111e3f8..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/dist/string-prototype-umd.js +++ /dev/null @@ -1,255 +0,0 @@ -(function (factory) { - typeof define === 'function' && define.amd ? define(factory) : - factory(); -}((function () { 'use strict'; - - /* eslint-disable node/no-unsupported-features/es-syntax */ - - /** - * @param {RegExp} regex - * @param {string} newFlags - * @param {Integer} [newLastIndex=regex.lastIndex] - * @returns {RegExp} - */ - function mixinRegex(regex, newFlags) { - var newLastIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : regex.lastIndex; - newFlags = newFlags || ''; - regex = new RegExp(regex.source, (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '')); - regex.lastIndex = newLastIndex; - return regex; - } - - // We copy the regular expression so as to be able to always ensure the exec - - String.prototype.forEach = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - - return this; - }; - - String.prototype.some = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return true; - } - } - - return false; - }; - - String.prototype.every = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (!ret) { - return false; - } - } - - return true; - }; - - String.prototype.map = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - - return ret; - }; - - String.prototype.filter = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - - return ret; - }; - - String.prototype.reduce = function (regex, cb, prev) { - var thisObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var matches, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - if (!prev) { - if ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - - return prev; - }; - - String.prototype.reduceRight = function (regex, cb, prevOrig, thisObjOrig) { - var matches, - n0, - i, - prev = prevOrig, - thisObj = thisObjOrig; - var matchesContainer = []; - regex = mixinRegex(regex, 'g'); - thisObj = thisObj || null; - - while ((matches = regex.exec(this)) !== null) { - matchesContainer.push(matches); - } - - i = matchesContainer.length; - - if (!i) { - if (arguments.length < 3) { - throw new TypeError('reduce of empty matches array with no initial value'); - } - - return prev; - } - - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; - }; - - String.prototype.find = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return n0[0]; - } - } - - return false; - }; - - String.prototype.findIndex = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return i - 1; - } - } - - return -1; - }; - - String.prototype.findExec = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - ret, - n0, - i = 0; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - - if (ret) { - return matches; - } - } - - return false; - }; - - String.prototype.filterExec = function (regex, cb) { - var thisObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var matches, - n0, - i = 0; - var ret = []; - regex = mixinRegex(regex, 'g'); - - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - - return ret; - }; - -}))); diff --git a/tools/node_modules/eslint/node_modules/regextras/lgtm.yml b/tools/node_modules/eslint/node_modules/regextras/lgtm.yml deleted file mode 100644 index bb188bae806..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/lgtm.yml +++ /dev/null @@ -1,5 +0,0 @@ -extraction: - javascript: - index: - filters: - - exclude: "dist" diff --git a/tools/node_modules/eslint/node_modules/regextras/package.json b/tools/node_modules/eslint/node_modules/regextras/package.json deleted file mode 100644 index ecb604f2053..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "regextras", - "version": "0.8.0", - "license": "MIT", - "author": "Brett Zamir", - "contributors": [], - "repository": "https://github.com/brettz9/regextras", - "homepage": "https://github.com/brettz9/regextras", - "bugs": "https://github.com/brettz9/regextras/issues", - "scripts": { - "eslint": "eslint --ext=js,md,html .", - "lint": "npm run eslint", - "rollup": "rollup -c", - "start": "static -p 8081", - "coverage": "open-cli http://localhost:8081/coverage && npm start", - "mocha": "mocha --require esm --require chai/register-assert --require chai/register-expect test/test.*.js --exit", - "nyc": "rm -Rf ./node_modules/.cache && nyc npm run mocha", - "test": "npm run eslint && npm run rollup && npm run nyc", - "test-browser": "npm run eslint && npm run rollup && open-cli http://127.0.0.1:8081/tests/regextras.html && npm start" - }, - "nyc": { - "reporter": [ - "html", - "text" - ], - "exclude": [ - ".eslintrc.js", - "rollup.config.js", - "dist", - "node_modules", - "test", - "tests" - ] - }, - "browserslist": [ - "cover 100%" - ], - "main": "dist/index-umd.js", - "module": "dist/index-es.js", - "keywords": [ - "regex", - "regexp", - "regular expression" - ], - "description": "Array extras for regular expressions", - "engines": { - "node": ">=0.1.14" - }, - "dependencies": {}, - "devDependencies": { - "@babel/core": "^7.14.3", - "@babel/preset-env": "^7.14.2", - "@brettz9/eslint-plugin": "^1.0.3", - "@brettz9/node-static": "^0.1.1", - "@rollup/plugin-babel": "^5.3.0", - "chai": "^4.3.4", - "core-js-bundle": "^3.12.1", - "eslint": "^7.27.0", - "eslint-config-ash-nazg": "^29.16.0", - "eslint-config-standard": "^16.0.2", - "eslint-plugin-array-func": "^3.1.7", - "eslint-plugin-chai-expect": "^2.2.0", - "eslint-plugin-chai-friendly": "^0.7.1", - "eslint-plugin-compat": "^3.9.0", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-html": "^6.1.2", - "eslint-plugin-import": "^2.23.3", - "eslint-plugin-jsdoc": "^35.0.0", - "eslint-plugin-markdown": "^2.1.0", - "eslint-plugin-no-unsanitized": "^3.1.5", - "eslint-plugin-no-use-extend-native": "^0.5.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^5.1.0", - "eslint-plugin-radar": "^0.2.1", - "eslint-plugin-standard": "^4.1.0", - "eslint-plugin-unicorn": "^32.0.1", - "esm": "^3.2.25", - "mocha": "^8.4.0", - "nyc": "^15.1.0", - "open-cli": "^6.0.1", - "regenerator-runtime": "^0.13.7", - "rollup": "2.49.0", - "rollup-plugin-terser": "^7.0.2" - } -} diff --git a/tools/node_modules/eslint/node_modules/regextras/pnpm-lock.yaml b/tools/node_modules/eslint/node_modules/regextras/pnpm-lock.yaml deleted file mode 100644 index 3bce1101862..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/pnpm-lock.yaml +++ /dev/null @@ -1,4437 +0,0 @@ -lockfileVersion: 5.3 - -specifiers: - '@babel/core': ^7.14.3 - '@babel/preset-env': ^7.14.2 - '@brettz9/eslint-plugin': ^1.0.3 - '@brettz9/node-static': ^0.1.1 - '@rollup/plugin-babel': ^5.3.0 - chai: ^4.3.4 - core-js-bundle: ^3.12.1 - eslint: ^7.27.0 - eslint-config-ash-nazg: ^29.16.0 - eslint-config-standard: ^16.0.2 - eslint-plugin-array-func: ^3.1.7 - eslint-plugin-chai-expect: ^2.2.0 - eslint-plugin-chai-friendly: ^0.7.1 - eslint-plugin-compat: ^3.9.0 - eslint-plugin-eslint-comments: ^3.2.0 - eslint-plugin-html: ^6.1.2 - eslint-plugin-import: ^2.23.3 - eslint-plugin-jsdoc: ^35.0.0 - eslint-plugin-markdown: ^2.1.0 - eslint-plugin-no-unsanitized: ^3.1.5 - eslint-plugin-no-use-extend-native: ^0.5.0 - eslint-plugin-node: ^11.1.0 - eslint-plugin-promise: ^5.1.0 - eslint-plugin-radar: ^0.2.1 - eslint-plugin-standard: ^4.1.0 - eslint-plugin-unicorn: ^32.0.1 - esm: ^3.2.25 - mocha: ^8.4.0 - nyc: ^15.1.0 - open-cli: ^6.0.1 - regenerator-runtime: ^0.13.7 - rollup: 2.49.0 - rollup-plugin-terser: ^7.0.2 - -devDependencies: - '@babel/core': 7.14.3 - '@babel/preset-env': 7.14.2_@babel+core@7.14.3 - '@brettz9/eslint-plugin': 1.0.3_eslint@7.27.0 - '@brettz9/node-static': 0.1.1 - '@rollup/plugin-babel': 5.3.0_@babel+core@7.14.3+rollup@2.49.0 - chai: 4.3.4 - core-js-bundle: 3.12.1 - eslint: 7.27.0 - eslint-config-ash-nazg: 29.16.0_86bc859d2c4079058d807e5716b4b586 - eslint-config-standard: 16.0.2_54a118fc6338897394bb0683ed693a07 - eslint-plugin-array-func: 3.1.7_eslint@7.27.0 - eslint-plugin-chai-expect: 2.2.0_eslint@7.27.0 - eslint-plugin-chai-friendly: 0.7.1_eslint@7.27.0 - eslint-plugin-compat: 3.9.0_eslint@7.27.0 - eslint-plugin-eslint-comments: 3.2.0_eslint@7.27.0 - eslint-plugin-html: 6.1.2 - eslint-plugin-import: 2.23.3_eslint@7.27.0 - eslint-plugin-jsdoc: 35.0.0_eslint@7.27.0 - eslint-plugin-markdown: 2.1.0_eslint@7.27.0 - eslint-plugin-no-unsanitized: 3.1.5_eslint@7.27.0 - eslint-plugin-no-use-extend-native: 0.5.0 - eslint-plugin-node: 11.1.0_eslint@7.27.0 - eslint-plugin-promise: 5.1.0_eslint@7.27.0 - eslint-plugin-radar: 0.2.1_eslint@7.27.0 - eslint-plugin-standard: 4.1.0_eslint@7.27.0 - eslint-plugin-unicorn: 32.0.1_eslint@7.27.0 - esm: 3.2.25 - mocha: 8.4.0 - nyc: 15.1.0 - open-cli: 6.0.1 - regenerator-runtime: 0.13.7 - rollup: 2.49.0 - rollup-plugin-terser: 7.0.2_rollup@2.49.0 - -packages: - - /@babel/code-frame/7.12.11: - resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} - dependencies: - '@babel/highlight': 7.14.0 - dev: true - - /@babel/code-frame/7.12.13: - resolution: {integrity: sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==} - dependencies: - '@babel/highlight': 7.14.0 - dev: true - - /@babel/compat-data/7.14.0: - resolution: {integrity: sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==} - dev: true - - /@babel/core/7.14.3: - resolution: {integrity: sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.12.13 - '@babel/generator': 7.14.3 - '@babel/helper-compilation-targets': 7.13.16_@babel+core@7.14.3 - '@babel/helper-module-transforms': 7.14.2 - '@babel/helpers': 7.14.0 - '@babel/parser': 7.14.3 - '@babel/template': 7.12.13 - '@babel/traverse': 7.14.2 - '@babel/types': 7.14.2 - convert-source-map: 1.7.0 - debug: 4.3.1 - gensync: 1.0.0-beta.2 - json5: 2.2.0 - semver: 6.3.0 - source-map: 0.5.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/eslint-parser/7.14.3_@babel+core@7.14.3+eslint@7.27.0: - resolution: {integrity: sha512-IfJXKEVRV/Gisvgmih/+05gkBzzg4Dy0gcxkZ84iFiLK8+O+fI1HLnGJv3UrUMPpsMmmThNa69v+UnF80XP+kA==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': '>=7.11.0' - eslint: '>=7.5.0' - dependencies: - '@babel/core': 7.14.3 - eslint: 7.27.0 - eslint-scope: 5.1.1 - eslint-visitor-keys: 2.1.0 - semver: 6.3.0 - dev: true - - /@babel/generator/7.14.3: - resolution: {integrity: sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==} - dependencies: - '@babel/types': 7.14.2 - jsesc: 2.5.2 - source-map: 0.5.7 - dev: true - - /@babel/helper-annotate-as-pure/7.12.13: - resolution: {integrity: sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==} - dependencies: - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-builder-binary-assignment-operator-visitor/7.12.13: - resolution: {integrity: sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==} - dependencies: - '@babel/helper-explode-assignable-expression': 7.13.0 - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-compilation-targets/7.13.16_@babel+core@7.14.3: - resolution: {integrity: sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.14.0 - '@babel/core': 7.14.3 - '@babel/helper-validator-option': 7.12.17 - browserslist: 4.16.6 - semver: 6.3.0 - dev: true - - /@babel/helper-create-class-features-plugin/7.14.3_@babel+core@7.14.3: - resolution: {integrity: sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-annotate-as-pure': 7.12.13 - '@babel/helper-function-name': 7.14.2 - '@babel/helper-member-expression-to-functions': 7.13.12 - '@babel/helper-optimise-call-expression': 7.12.13 - '@babel/helper-replace-supers': 7.14.3 - '@babel/helper-split-export-declaration': 7.12.13 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-create-regexp-features-plugin/7.14.3_@babel+core@7.14.3: - resolution: {integrity: sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-annotate-as-pure': 7.12.13 - regexpu-core: 4.7.1 - dev: true - - /@babel/helper-define-polyfill-provider/0.2.1_@babel+core@7.14.3: - resolution: {integrity: sha512-x3AUTVZNPunaw1opRTa5OwVA5N0YxGlIad9xQ5QflK1uIS7PnAGGU5O2Dj/G183fR//N8AzTq+Q8+oiu9m0VFg==} - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-compilation-targets': 7.13.16_@babel+core@7.14.3 - '@babel/helper-module-imports': 7.13.12 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/traverse': 7.14.2 - debug: 4.3.1 - lodash.debounce: 4.0.8 - resolve: 1.20.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-explode-assignable-expression/7.13.0: - resolution: {integrity: sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==} - dependencies: - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-function-name/7.14.2: - resolution: {integrity: sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==} - dependencies: - '@babel/helper-get-function-arity': 7.12.13 - '@babel/template': 7.12.13 - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-get-function-arity/7.12.13: - resolution: {integrity: sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==} - dependencies: - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-hoist-variables/7.13.16: - resolution: {integrity: sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==} - dependencies: - '@babel/traverse': 7.14.2 - '@babel/types': 7.14.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-member-expression-to-functions/7.13.12: - resolution: {integrity: sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==} - dependencies: - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-module-imports/7.13.12: - resolution: {integrity: sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==} - dependencies: - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-module-transforms/7.14.2: - resolution: {integrity: sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==} - dependencies: - '@babel/helper-module-imports': 7.13.12 - '@babel/helper-replace-supers': 7.14.3 - '@babel/helper-simple-access': 7.13.12 - '@babel/helper-split-export-declaration': 7.12.13 - '@babel/helper-validator-identifier': 7.14.0 - '@babel/template': 7.12.13 - '@babel/traverse': 7.14.2 - '@babel/types': 7.14.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-optimise-call-expression/7.12.13: - resolution: {integrity: sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==} - dependencies: - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-plugin-utils/7.13.0: - resolution: {integrity: sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==} - dev: true - - /@babel/helper-remap-async-to-generator/7.13.0: - resolution: {integrity: sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==} - dependencies: - '@babel/helper-annotate-as-pure': 7.12.13 - '@babel/helper-wrap-function': 7.13.0 - '@babel/types': 7.14.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-replace-supers/7.14.3: - resolution: {integrity: sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==} - dependencies: - '@babel/helper-member-expression-to-functions': 7.13.12 - '@babel/helper-optimise-call-expression': 7.12.13 - '@babel/traverse': 7.14.2 - '@babel/types': 7.14.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-simple-access/7.13.12: - resolution: {integrity: sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==} - dependencies: - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-skip-transparent-expression-wrappers/7.12.1: - resolution: {integrity: sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==} - dependencies: - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-split-export-declaration/7.12.13: - resolution: {integrity: sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==} - dependencies: - '@babel/types': 7.14.2 - dev: true - - /@babel/helper-validator-identifier/7.14.0: - resolution: {integrity: sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==} - dev: true - - /@babel/helper-validator-option/7.12.17: - resolution: {integrity: sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==} - dev: true - - /@babel/helper-wrap-function/7.13.0: - resolution: {integrity: sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==} - dependencies: - '@babel/helper-function-name': 7.14.2 - '@babel/template': 7.12.13 - '@babel/traverse': 7.14.2 - '@babel/types': 7.14.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helpers/7.14.0: - resolution: {integrity: sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==} - dependencies: - '@babel/template': 7.12.13 - '@babel/traverse': 7.14.2 - '@babel/types': 7.14.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight/7.14.0: - resolution: {integrity: sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==} - dependencies: - '@babel/helper-validator-identifier': 7.14.0 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - - /@babel/parser/7.14.3: - resolution: {integrity: sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==} - engines: {node: '>=6.0.0'} - hasBin: true - dev: true - - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.13.12_@babel+core@7.14.3: - resolution: {integrity: sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 - '@babel/plugin-proposal-optional-chaining': 7.14.2_@babel+core@7.14.3 - dev: true - - /@babel/plugin-proposal-async-generator-functions/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/helper-remap-async-to-generator': 7.13.0 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.14.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-class-properties/7.13.0_@babel+core@7.14.3: - resolution: {integrity: sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-create-class-features-plugin': 7.14.3_@babel+core@7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-class-static-block/7.14.3_@babel+core@7.14.3: - resolution: {integrity: sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-create-class-features-plugin': 7.14.3_@babel+core@7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-syntax-class-static-block': 7.12.13_@babel+core@7.14.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-dynamic-import/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.14.3 - dev: true - - /@babel/plugin-proposal-export-namespace-from/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.14.3 - dev: true - - /@babel/plugin-proposal-json-strings/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.14.3 - dev: true - - /@babel/plugin-proposal-logical-assignment-operators/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.14.3 - dev: true - - /@babel/plugin-proposal-nullish-coalescing-operator/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.14.3 - dev: true - - /@babel/plugin-proposal-numeric-separator/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.14.3 - dev: true - - /@babel/plugin-proposal-object-rest-spread/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.14.0 - '@babel/core': 7.14.3 - '@babel/helper-compilation-targets': 7.13.16_@babel+core@7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.14.3 - '@babel/plugin-transform-parameters': 7.14.2_@babel+core@7.14.3 - dev: true - - /@babel/plugin-proposal-optional-catch-binding/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.14.3 - dev: true - - /@babel/plugin-proposal-optional-chaining/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.14.3 - dev: true - - /@babel/plugin-proposal-private-methods/7.13.0_@babel+core@7.14.3: - resolution: {integrity: sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-create-class-features-plugin': 7.14.3_@babel+core@7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-private-property-in-object/7.14.0_@babel+core@7.14.3: - resolution: {integrity: sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-annotate-as-pure': 7.12.13 - '@babel/helper-create-class-features-plugin': 7.14.3_@babel+core@7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.0_@babel+core@7.14.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-unicode-property-regex/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-create-regexp-features-plugin': 7.14.3_@babel+core@7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.14.3: - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-class-static-block/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.14.3: - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.14.3: - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.14.3: - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.14.3: - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.14.3: - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.14.3: - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.14.3: - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.14.3: - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.14.3: - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-private-property-in-object/7.14.0_@babel+core@7.14.3: - resolution: {integrity: sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-syntax-top-level-await/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-arrow-functions/7.13.0_@babel+core@7.14.3: - resolution: {integrity: sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-async-to-generator/7.13.0_@babel+core@7.14.3: - resolution: {integrity: sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-module-imports': 7.13.12 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/helper-remap-async-to-generator': 7.13.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-block-scoped-functions/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-block-scoping/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-classes/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-annotate-as-pure': 7.12.13 - '@babel/helper-function-name': 7.14.2 - '@babel/helper-optimise-call-expression': 7.12.13 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/helper-replace-supers': 7.14.3 - '@babel/helper-split-export-declaration': 7.12.13 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-computed-properties/7.13.0_@babel+core@7.14.3: - resolution: {integrity: sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-destructuring/7.13.17_@babel+core@7.14.3: - resolution: {integrity: sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-dotall-regex/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-create-regexp-features-plugin': 7.14.3_@babel+core@7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-duplicate-keys/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-exponentiation-operator/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.12.13 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-for-of/7.13.0_@babel+core@7.14.3: - resolution: {integrity: sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-function-name/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-function-name': 7.14.2 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-literals/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-member-expression-literals/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-modules-amd/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-module-transforms': 7.14.2 - '@babel/helper-plugin-utils': 7.13.0 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-commonjs/7.14.0_@babel+core@7.14.3: - resolution: {integrity: sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-module-transforms': 7.14.2 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/helper-simple-access': 7.13.12 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-systemjs/7.13.8_@babel+core@7.14.3: - resolution: {integrity: sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-hoist-variables': 7.13.16 - '@babel/helper-module-transforms': 7.14.2 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/helper-validator-identifier': 7.14.0 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-umd/7.14.0_@babel+core@7.14.3: - resolution: {integrity: sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-module-transforms': 7.14.2 - '@babel/helper-plugin-utils': 7.13.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-named-capturing-groups-regex/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-create-regexp-features-plugin': 7.14.3_@babel+core@7.14.3 - dev: true - - /@babel/plugin-transform-new-target/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-object-super/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/helper-replace-supers': 7.14.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-parameters/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-property-literals/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-regenerator/7.13.15_@babel+core@7.14.3: - resolution: {integrity: sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - regenerator-transform: 0.14.5 - dev: true - - /@babel/plugin-transform-reserved-words/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-shorthand-properties/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-spread/7.13.0_@babel+core@7.14.3: - resolution: {integrity: sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 - dev: true - - /@babel/plugin-transform-sticky-regex/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-template-literals/7.13.0_@babel+core@7.14.3: - resolution: {integrity: sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-typeof-symbol/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-unicode-escapes/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/plugin-transform-unicode-regex/7.12.13_@babel+core@7.14.3: - resolution: {integrity: sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-create-regexp-features-plugin': 7.14.3_@babel+core@7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - dev: true - - /@babel/preset-env/7.14.2_@babel+core@7.14.3: - resolution: {integrity: sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.14.0 - '@babel/core': 7.14.3 - '@babel/helper-compilation-targets': 7.13.16_@babel+core@7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/helper-validator-option': 7.12.17 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.13.12_@babel+core@7.14.3 - '@babel/plugin-proposal-async-generator-functions': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-proposal-class-properties': 7.13.0_@babel+core@7.14.3 - '@babel/plugin-proposal-class-static-block': 7.14.3_@babel+core@7.14.3 - '@babel/plugin-proposal-dynamic-import': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-proposal-export-namespace-from': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-proposal-json-strings': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-proposal-logical-assignment-operators': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-proposal-numeric-separator': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-proposal-object-rest-spread': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-proposal-optional-catch-binding': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-proposal-optional-chaining': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-proposal-private-methods': 7.13.0_@babel+core@7.14.3 - '@babel/plugin-proposal-private-property-in-object': 7.14.0_@babel+core@7.14.3 - '@babel/plugin-proposal-unicode-property-regex': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.14.3 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-syntax-class-static-block': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.14.3 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.14.3 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.14.3 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.14.3 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.14.3 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.14.3 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.14.3 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.14.3 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.14.3 - '@babel/plugin-syntax-private-property-in-object': 7.14.0_@babel+core@7.14.3 - '@babel/plugin-syntax-top-level-await': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-arrow-functions': 7.13.0_@babel+core@7.14.3 - '@babel/plugin-transform-async-to-generator': 7.13.0_@babel+core@7.14.3 - '@babel/plugin-transform-block-scoped-functions': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-block-scoping': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-transform-classes': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-transform-computed-properties': 7.13.0_@babel+core@7.14.3 - '@babel/plugin-transform-destructuring': 7.13.17_@babel+core@7.14.3 - '@babel/plugin-transform-dotall-regex': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-duplicate-keys': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-exponentiation-operator': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-for-of': 7.13.0_@babel+core@7.14.3 - '@babel/plugin-transform-function-name': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-literals': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-member-expression-literals': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-modules-amd': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-transform-modules-commonjs': 7.14.0_@babel+core@7.14.3 - '@babel/plugin-transform-modules-systemjs': 7.13.8_@babel+core@7.14.3 - '@babel/plugin-transform-modules-umd': 7.14.0_@babel+core@7.14.3 - '@babel/plugin-transform-named-capturing-groups-regex': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-new-target': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-object-super': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-parameters': 7.14.2_@babel+core@7.14.3 - '@babel/plugin-transform-property-literals': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-regenerator': 7.13.15_@babel+core@7.14.3 - '@babel/plugin-transform-reserved-words': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-shorthand-properties': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-spread': 7.13.0_@babel+core@7.14.3 - '@babel/plugin-transform-sticky-regex': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-template-literals': 7.13.0_@babel+core@7.14.3 - '@babel/plugin-transform-typeof-symbol': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-unicode-escapes': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-unicode-regex': 7.12.13_@babel+core@7.14.3 - '@babel/preset-modules': 0.1.4_@babel+core@7.14.3 - '@babel/types': 7.14.2 - babel-plugin-polyfill-corejs2: 0.2.1_@babel+core@7.14.3 - babel-plugin-polyfill-corejs3: 0.2.1_@babel+core@7.14.3 - babel-plugin-polyfill-regenerator: 0.2.1_@babel+core@7.14.3 - core-js-compat: 3.12.1 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/preset-modules/0.1.4_@babel+core@7.14.3: - resolution: {integrity: sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-plugin-utils': 7.13.0 - '@babel/plugin-proposal-unicode-property-regex': 7.12.13_@babel+core@7.14.3 - '@babel/plugin-transform-dotall-regex': 7.12.13_@babel+core@7.14.3 - '@babel/types': 7.14.2 - esutils: 2.0.3 - dev: true - - /@babel/runtime/7.14.0: - resolution: {integrity: sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==} - dependencies: - regenerator-runtime: 0.13.7 - dev: true - - /@babel/template/7.12.13: - resolution: {integrity: sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==} - dependencies: - '@babel/code-frame': 7.12.13 - '@babel/parser': 7.14.3 - '@babel/types': 7.14.2 - dev: true - - /@babel/traverse/7.14.2: - resolution: {integrity: sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==} - dependencies: - '@babel/code-frame': 7.12.13 - '@babel/generator': 7.14.3 - '@babel/helper-function-name': 7.14.2 - '@babel/helper-split-export-declaration': 7.12.13 - '@babel/parser': 7.14.3 - '@babel/types': 7.14.2 - debug: 4.3.1 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types/7.14.2: - resolution: {integrity: sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==} - dependencies: - '@babel/helper-validator-identifier': 7.14.0 - to-fast-properties: 2.0.0 - dev: true - - /@brettz9/eslint-plugin/1.0.3_eslint@7.27.0: - resolution: {integrity: sha512-2ESGw4oZJ5IvkFitzRXzfdUY8hzSPSanQ8i+adzWMQPK7jxxUHkZ6GEslOd7GjHFZIcwqc1xVXVU0itf8zYFGA==} - engines: {node: '>=10.0.0'} - peerDependencies: - eslint: '>=7.20.0' - dependencies: - eslint: 7.27.0 - dev: true - - /@brettz9/node-static/0.1.1: - resolution: {integrity: sha512-HHD3JKDCTxudQ7btLDykPlzLBFl+RM70vC6Zsvey1cr9m67UBOmwiP0f2Bk7IjjU3G1c4vAJCjysVxPkmHs7Ew==} - engines: {node: '>=10.0.0'} - hasBin: true - dependencies: - colors: 1.4.0 - mime: 2.5.2 - minimatch: 3.0.4 - neodoc: 2.0.2 - dev: true - - /@es-joy/jsdoccomment/0.7.2: - resolution: {integrity: sha512-i5p0VgxeCXbf5aPLPY9s9Fz6K5BkzYdbRCisw/vEY/FXAxUJ8SiAifPwkFUm0CJrmZ8tFBGW8bUtM7wiE4KTIA==} - engines: {node: '>=10.0.0'} - dependencies: - comment-parser: 1.1.5 - esquery: 1.4.0 - jsdoctypeparser: 9.0.0 - dev: true - - /@eslint/eslintrc/0.4.1: - resolution: {integrity: sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.1 - espree: 7.3.1 - globals: 12.4.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - js-yaml: 3.14.1 - minimatch: 3.0.4 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@istanbuljs/load-nyc-config/1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: true - - /@istanbuljs/schema/0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true - - /@mdn/browser-compat-data/2.0.7: - resolution: {integrity: sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==} - engines: {node: '>=10.0.0'} - dependencies: - extend: 3.0.2 - dev: true - - /@rollup/plugin-babel/5.3.0_@babel+core@7.14.3+rollup@2.49.0: - resolution: {integrity: sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-module-imports': 7.13.12 - '@rollup/pluginutils': 3.1.0_rollup@2.49.0 - rollup: 2.49.0 - dev: true - - /@rollup/pluginutils/3.1.0_rollup@2.49.0: - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.0 - rollup: 2.49.0 - dev: true - - /@tokenizer/token/0.1.1: - resolution: {integrity: sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w==} - dev: true - - /@types/debug/4.1.5: - resolution: {integrity: sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==} - dev: true - - /@types/estree/0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: true - - /@types/json5/0.0.29: - resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} - dev: true - - /@types/minimist/1.2.1: - resolution: {integrity: sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==} - dev: true - - /@types/node/15.6.0: - resolution: {integrity: sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==} - dev: true - - /@types/normalize-package-data/2.4.0: - resolution: {integrity: sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==} - dev: true - - /@ungap/promise-all-settled/1.1.2: - resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} - dev: true - - /acorn-jsx/5.3.1_acorn@7.4.1: - resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 7.4.1 - dev: true - - /acorn/7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /aggregate-error/3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - - /ajv/6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ajv/8.5.0: - resolution: {integrity: sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - - /ansi-colors/4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true - - /ansi-regex/2.1.1: - resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=} - engines: {node: '>=0.10.0'} - dev: true - - /ansi-regex/3.0.0: - resolution: {integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=} - engines: {node: '>=4'} - dev: true - - /ansi-regex/5.0.0: - resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} - engines: {node: '>=8'} - dev: true - - /ansi-styles/3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - - /ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.0 - dev: true - - /append-transform/2.0.0: - resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} - engines: {node: '>=8'} - dependencies: - default-require-extensions: 3.0.0 - dev: true - - /archy/1.0.0: - resolution: {integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=} - dev: true - - /argparse/1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - - /argparse/2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /array-includes/3.1.3: - resolution: {integrity: sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.18.0 - get-intrinsic: 1.1.1 - is-string: 1.0.6 - dev: true - - /array.prototype.flat/1.2.4: - resolution: {integrity: sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.18.0 - dev: true - - /arrify/1.0.1: - resolution: {integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=} - engines: {node: '>=0.10.0'} - dev: true - - /assertion-error/1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true - - /ast-metadata-inferer/0.4.0: - resolution: {integrity: sha512-tKHdBe8N/Vq2nLAm4YPBVREVZjMux6KrqyPfNQgIbDl0t7HaNSmy8w4OyVHYg/cvyn5BW7o7pVwpjPte89Zhcg==} - dev: true - - /astral-regex/2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true - - /babel-plugin-dynamic-import-node/2.3.3: - resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} - dependencies: - object.assign: 4.1.2 - dev: true - - /babel-plugin-polyfill-corejs2/0.2.1_@babel+core@7.14.3: - resolution: {integrity: sha512-hXGSPbr6IbjeMyGew+3uGIAkRjBFSOJ9FLDZNOfHuyJZCcoia4nd/72J0bSgvfytcVfUcP/dxEVcUhVJuQRtSw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.14.0 - '@babel/core': 7.14.3 - '@babel/helper-define-polyfill-provider': 0.2.1_@babel+core@7.14.3 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-corejs3/0.2.1_@babel+core@7.14.3: - resolution: {integrity: sha512-WZCqF3DLUhdTD/P381MDJfuP18hdCZ+iqJ+wHtzhWENpsiof284JJ1tMQg1CE+hfCWyG48F7e5gDMk2c3Laz7w==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-define-polyfill-provider': 0.2.1_@babel+core@7.14.3 - core-js-compat: 3.12.1 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-regenerator/0.2.1_@babel+core@7.14.3: - resolution: {integrity: sha512-T3bYyL3Sll2EtC94v3f+fA8M28q7YPTOZdB++SRHjvYZTvtd+WorMUq3tDTD4Q7Kjk1LG0gGromslKjcO5p2TA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.3 - '@babel/helper-define-polyfill-provider': 0.2.1_@babel+core@7.14.3 - transitivePeerDependencies: - - supports-color - dev: true - - /bail/1.0.5: - resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} - dev: true - - /balanced-match/1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /binary-extensions/2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /brace-expansion/1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /braces/3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /browser-stdout/1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true - - /browserslist/4.16.6: - resolution: {integrity: sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001228 - colorette: 1.2.2 - electron-to-chromium: 1.3.736 - escalade: 3.1.1 - node-releases: 1.1.72 - dev: true - - /buffer-from/1.1.1: - resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==} - dev: true - - /builtin-modules/3.2.0: - resolution: {integrity: sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==} - engines: {node: '>=6'} - dev: true - - /caching-transform/4.0.0: - resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} - engines: {node: '>=8'} - dependencies: - hasha: 5.2.2 - make-dir: 3.1.0 - package-hash: 4.0.0 - write-file-atomic: 3.0.3 - dev: true - - /call-bind/1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.1 - dev: true - - /callsites/3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /camelcase-keys/6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - map-obj: 4.2.1 - quick-lru: 4.0.1 - dev: true - - /camelcase/5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true - - /camelcase/6.2.0: - resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} - engines: {node: '>=10'} - dev: true - - /caniuse-lite/1.0.30001228: - resolution: {integrity: sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==} - dev: true - - /chai/4.3.4: - resolution: {integrity: sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==} - engines: {node: '>=4'} - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.2 - deep-eql: 3.0.1 - get-func-name: 2.0.0 - pathval: 1.1.1 - type-detect: 4.0.8 - dev: true - - /chalk/2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true - - /chalk/4.1.1: - resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /character-entities-legacy/1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - dev: true - - /character-entities/1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - dev: true - - /character-reference-invalid/1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - dev: true - - /check-error/1.0.2: - resolution: {integrity: sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=} - dev: true - - /chokidar/3.5.1: - resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.1 - normalize-path: 3.0.0 - readdirp: 3.5.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /ci-info/3.1.1: - resolution: {integrity: sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==} - dev: true - - /clean-regexp/1.0.0: - resolution: {integrity: sha1-jffHquUf02h06PjQW5GAvBGj/tc=} - engines: {node: '>=4'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /clean-stack/2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true - - /cliui/6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - dependencies: - string-width: 4.2.2 - strip-ansi: 6.0.0 - wrap-ansi: 6.2.0 - dev: true - - /cliui/7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.2 - strip-ansi: 6.0.0 - wrap-ansi: 7.0.0 - dev: true - - /collapse-white-space/1.0.6: - resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} - dev: true - - /color-convert/1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - - /color-convert/2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name/1.1.3: - resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} - dev: true - - /color-name/1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /colorette/1.2.2: - resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} - dev: true - - /colors/1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - dev: true - - /commander/2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true - - /comment-parser/1.1.5: - resolution: {integrity: sha512-RePCE4leIhBlmrqiYTvaqEeGYg7qpSl4etaIabKtdOQVi+mSTIBBklGUwIr79GXYnl3LpMwmDw4KeR2stNc6FA==} - engines: {node: '>= 10.0.0'} - dev: true - - /commondir/1.0.1: - resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} - dev: true - - /concat-map/0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - dev: true - - /convert-source-map/1.7.0: - resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} - dependencies: - safe-buffer: 5.1.2 - dev: true - - /core-js-bundle/3.12.1: - resolution: {integrity: sha512-4xo0s+HI15r0HEVLy6LhFoPqVlwQKxgl/tbgDfcRziFa5gAUxyEPUtPVXi2VPcSVYIJ8JSG+SOvy/aLPD7M6Fw==} - requiresBuild: true - dev: true - - /core-js-compat/3.12.1: - resolution: {integrity: sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==} - dependencies: - browserslist: 4.16.6 - semver: 7.0.0 - dev: true - - /core-js/3.12.1: - resolution: {integrity: sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==} - requiresBuild: true - dev: true - - /cross-spawn/7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /debug/2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - dependencies: - ms: 2.0.0 - dev: true - - /debug/3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - dependencies: - ms: 2.1.3 - dev: true - - /debug/4.3.1: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /debug/4.3.1_supports-color@8.1.1: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - supports-color: 8.1.1 - dev: true - - /decamelize-keys/1.1.0: - resolution: {integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=} - engines: {node: '>=0.10.0'} - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - dev: true - - /decamelize/1.2.0: - resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} - engines: {node: '>=0.10.0'} - dev: true - - /decamelize/4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - dev: true - - /deep-eql/3.0.1: - resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} - engines: {node: '>=0.12'} - dependencies: - type-detect: 4.0.8 - dev: true - - /deep-is/0.1.3: - resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=} - dev: true - - /default-require-extensions/3.0.0: - resolution: {integrity: sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==} - engines: {node: '>=8'} - dependencies: - strip-bom: 4.0.0 - dev: true - - /define-properties/1.1.3: - resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} - engines: {node: '>= 0.4'} - dependencies: - object-keys: 1.1.1 - dev: true - - /diff/5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - dev: true - - /doctrine/2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /doctrine/3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dom-serializer/1.3.2: - resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==} - dependencies: - domelementtype: 2.2.0 - domhandler: 4.2.0 - entities: 2.2.0 - dev: true - - /domelementtype/2.2.0: - resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} - dev: true - - /domhandler/4.2.0: - resolution: {integrity: sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.2.0 - dev: true - - /domutils/2.6.0: - resolution: {integrity: sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==} - dependencies: - dom-serializer: 1.3.2 - domelementtype: 2.2.0 - domhandler: 4.2.0 - dev: true - - /electron-to-chromium/1.3.736: - resolution: {integrity: sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig==} - dev: true - - /emoji-regex/8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - - /enquirer/2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} - dependencies: - ansi-colors: 4.1.1 - dev: true - - /entities/2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: true - - /error-ex/1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: true - - /es-abstract/1.18.0: - resolution: {integrity: sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - es-to-primitive: 1.2.1 - function-bind: 1.1.1 - get-intrinsic: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.2 - is-callable: 1.2.3 - is-negative-zero: 2.0.1 - is-regex: 1.1.3 - is-string: 1.0.6 - object-inspect: 1.10.3 - object-keys: 1.1.1 - object.assign: 4.1.2 - string.prototype.trimend: 1.0.4 - string.prototype.trimstart: 1.0.4 - unbox-primitive: 1.0.1 - dev: true - - /es-to-primitive/1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.3 - is-date-object: 1.0.4 - is-symbol: 1.0.4 - dev: true - - /es6-error/4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - dev: true - - /escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp/1.0.5: - resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp/4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /eslint-config-ash-nazg/29.16.0_86bc859d2c4079058d807e5716b4b586: - resolution: {integrity: sha512-tD/qdNcUek9ZY8rHIWI6gJj/1GGYN73uSqeedu6AMS7YGlz8j0YoUZGhjt7HHMRASf9B3cT44EnMb5xT1QFCmw==} - engines: {node: '>=10.0.0'} - peerDependencies: - '@brettz9/eslint-plugin': ^1.0.3 - eslint: ^7.27.0 - eslint-config-standard: ^16.0.2 - eslint-plugin-array-func: ^3.1.7 - eslint-plugin-compat: ^3.9.0 - eslint-plugin-eslint-comments: ^3.2.0 - eslint-plugin-html: ^6.1.2 - eslint-plugin-import: ^2.23.3 - eslint-plugin-jsdoc: ^35.0.0 - eslint-plugin-markdown: ^2.1.0 - eslint-plugin-no-unsanitized: ^3.1.5 - eslint-plugin-no-use-extend-native: ^0.5.0 - eslint-plugin-node: ^11.1.0 - eslint-plugin-promise: ^5.1.0 - eslint-plugin-radar: ^0.2.1 - eslint-plugin-unicorn: ^32.0.1 - dependencies: - '@brettz9/eslint-plugin': 1.0.3_eslint@7.27.0 - eslint: 7.27.0 - eslint-config-standard: 16.0.2_54a118fc6338897394bb0683ed693a07 - eslint-plugin-array-func: 3.1.7_eslint@7.27.0 - eslint-plugin-compat: 3.9.0_eslint@7.27.0 - eslint-plugin-eslint-comments: 3.2.0_eslint@7.27.0 - eslint-plugin-html: 6.1.2 - eslint-plugin-import: 2.23.3_eslint@7.27.0 - eslint-plugin-jsdoc: 35.0.0_eslint@7.27.0 - eslint-plugin-markdown: 2.1.0_eslint@7.27.0 - eslint-plugin-no-unsanitized: 3.1.5_eslint@7.27.0 - eslint-plugin-no-use-extend-native: 0.5.0 - eslint-plugin-node: 11.1.0_eslint@7.27.0 - eslint-plugin-promise: 5.1.0_eslint@7.27.0 - eslint-plugin-radar: 0.2.1_eslint@7.27.0 - eslint-plugin-unicorn: 32.0.1_eslint@7.27.0 - semver: 7.3.5 - dev: true - - /eslint-config-standard/16.0.2_54a118fc6338897394bb0683ed693a07: - resolution: {integrity: sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==} - peerDependencies: - eslint: ^7.12.1 - eslint-plugin-import: ^2.22.1 - eslint-plugin-node: ^11.1.0 - eslint-plugin-promise: ^4.2.1 - dependencies: - eslint: 7.27.0 - eslint-plugin-import: 2.23.3_eslint@7.27.0 - eslint-plugin-node: 11.1.0_eslint@7.27.0 - eslint-plugin-promise: 5.1.0_eslint@7.27.0 - dev: true - - /eslint-import-resolver-node/0.3.4: - resolution: {integrity: sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==} - dependencies: - debug: 2.6.9 - resolve: 1.20.0 - dev: true - - /eslint-module-utils/2.6.1: - resolution: {integrity: sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==} - engines: {node: '>=4'} - dependencies: - debug: 3.2.7 - pkg-dir: 2.0.0 - dev: true - - /eslint-plugin-array-func/3.1.7_eslint@7.27.0: - resolution: {integrity: sha512-fB5TBICjHSTGToNTbCCgR8zsngpUkoCM31EMh/M/NEAyNg90i5rUuG0dnNNBML2n0BzM0nBE3sPvo2SEWf6jlA==} - engines: {node: '>= 6.8.0'} - peerDependencies: - eslint: '>=3.0.0' - dependencies: - eslint: 7.27.0 - dev: true - - /eslint-plugin-chai-expect/2.2.0_eslint@7.27.0: - resolution: {integrity: sha512-ExTJKhgeYMfY8wDj3UiZmgpMKJOUHGNHmWMlxT49JUDB1vTnw0sSNfXJSxnX+LcebyBD/gudXzjzD136WqPJrQ==} - engines: {node: 6.* || 8.* || >= 10.*} - peerDependencies: - eslint: '>=2.0.0 <= 7.x' - dependencies: - eslint: 7.27.0 - dev: true - - /eslint-plugin-chai-friendly/0.7.1_eslint@7.27.0: - resolution: {integrity: sha512-0xhGiSQ+9oWtNc6IZPUR+6ChKbEvLXwT9oZZ5NcGlPzHVKGn1YKwQFj7a9yL3rnRKbWF7b3RkRYEP8kN6dPOwQ==} - engines: {node: '>=0.10.0'} - peerDependencies: - eslint: '>=3.0.0' - dependencies: - eslint: 7.27.0 - dev: true - - /eslint-plugin-compat/3.9.0_eslint@7.27.0: - resolution: {integrity: sha512-lt3l5PHFHVEYSZ5zijcoYvtQJPsBifRiH5N0Et57KwVu7l/yxmHhSG6VJiLMa/lXrg93Qu8049RNQOMn0+yJBg==} - engines: {node: '>=9.x'} - peerDependencies: - eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - dependencies: - '@mdn/browser-compat-data': 2.0.7 - ast-metadata-inferer: 0.4.0 - browserslist: 4.16.6 - caniuse-lite: 1.0.30001228 - core-js: 3.12.1 - eslint: 7.27.0 - find-up: 4.1.0 - lodash.memoize: 4.1.2 - semver: 7.3.2 - dev: true - - /eslint-plugin-es/3.0.1_eslint@7.27.0: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - eslint: 7.27.0 - eslint-utils: 2.1.0 - regexpp: 3.1.0 - dev: true - - /eslint-plugin-eslint-comments/3.2.0_eslint@7.27.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - escape-string-regexp: 1.0.5 - eslint: 7.27.0 - ignore: 5.1.8 - dev: true - - /eslint-plugin-html/6.1.2: - resolution: {integrity: sha512-bhBIRyZFqI4EoF12lGDHAmgfff8eLXx6R52/K3ESQhsxzCzIE6hdebS7Py651f7U3RBotqroUnC3L29bR7qJWQ==} - dependencies: - htmlparser2: 6.1.0 - dev: true - - /eslint-plugin-import/2.23.3_eslint@7.27.0: - resolution: {integrity: sha512-wDxdYbSB55F7T5CC7ucDjY641VvKmlRwT0Vxh7PkY1mI4rclVRFWYfsrjDgZvwYYDZ5ee0ZtfFKXowWjqvEoRQ==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 - dependencies: - array-includes: 3.1.3 - array.prototype.flat: 1.2.4 - debug: 2.6.9 - doctrine: 2.1.0 - eslint: 7.27.0 - eslint-import-resolver-node: 0.3.4 - eslint-module-utils: 2.6.1 - find-up: 2.1.0 - has: 1.0.3 - is-core-module: 2.4.0 - minimatch: 3.0.4 - object.values: 1.1.3 - pkg-up: 2.0.0 - read-pkg-up: 3.0.0 - resolve: 1.20.0 - tsconfig-paths: 3.9.0 - dev: true - - /eslint-plugin-jsdoc/35.0.0_eslint@7.27.0: - resolution: {integrity: sha512-n92EO6g84qzjF4Lyvg+hDouMQTRHCKvW0hRobGRza0aqbG9fmmlS4p1x8cvPPAc0P87TmahMZnrP0F7hPOcAoQ==} - engines: {node: '>=12'} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 - dependencies: - '@es-joy/jsdoccomment': 0.7.2 - comment-parser: 1.1.5 - debug: 4.3.1 - eslint: 7.27.0 - esquery: 1.4.0 - jsdoctypeparser: 9.0.0 - lodash: 4.17.21 - regextras: 0.7.1 - semver: 7.3.5 - spdx-expression-parse: 3.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-markdown/2.1.0_eslint@7.27.0: - resolution: {integrity: sha512-Rqw7tosArdlzXcR/xJGW3Er9gRiF7iE+QEMEm7hZZ/feZjUf8xCaGQJgB1nzs9yVhJnUeiAcj5TXLLfKMbp3DQ==} - engines: {node: ^8.10.0 || ^10.12.0 || >= 12.0.0} - peerDependencies: - eslint: '>=6.0.0' - dependencies: - eslint: 7.27.0 - remark-parse: 7.0.2 - unified: 6.2.0 - dev: true - - /eslint-plugin-no-unsanitized/3.1.5_eslint@7.27.0: - resolution: {integrity: sha512-s/6w++p1590h/H/dE2Wo660bOkaM/3OEK14Y7xm1UT0bafxkKw1Cq0ksjxkxLdH/WWd014DlsLKuD6CyNrR2Dw==} - peerDependencies: - eslint: ^5 || ^6 || ^7 - dependencies: - eslint: 7.27.0 - dev: true - - /eslint-plugin-no-use-extend-native/0.5.0: - resolution: {integrity: sha512-dBNjs8hor8rJgeXLH4HTut5eD3RGWf9JUsadIfuL7UosVQ/dnvOKwxEcRrXrFxrMZ8llUVWT+hOimxJABsAUzQ==} - engines: {node: '>=6.0.0'} - dependencies: - is-get-set-prop: 1.0.0 - is-js-type: 2.0.0 - is-obj-prop: 1.0.0 - is-proto-prop: 2.0.0 - dev: true - - /eslint-plugin-node/11.1.0_eslint@7.27.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - dependencies: - eslint: 7.27.0 - eslint-plugin-es: 3.0.1_eslint@7.27.0 - eslint-utils: 2.1.0 - ignore: 5.1.8 - minimatch: 3.0.4 - resolve: 1.20.0 - semver: 6.3.0 - dev: true - - /eslint-plugin-promise/5.1.0_eslint@7.27.0: - resolution: {integrity: sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.0.0 - dependencies: - eslint: 7.27.0 - dev: true - - /eslint-plugin-radar/0.2.1_eslint@7.27.0: - resolution: {integrity: sha512-aOc1MK6ddL45X6mS6zEqFIKy/c/qnwjhNycDecaFMw5acUsD744ZCZf2cG7yxLhMv71mBSwr6pZdu+26+Zzk5A==} - engines: {node: '>=10'} - peerDependencies: - eslint: '>= 3.0.0 <= 7.x.x' - dependencies: - eslint: 7.27.0 - dev: true - - /eslint-plugin-standard/4.1.0_eslint@7.27.0: - resolution: {integrity: sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==} - peerDependencies: - eslint: '>=5.0.0' - dependencies: - eslint: 7.27.0 - dev: true - - /eslint-plugin-unicorn/32.0.1_eslint@7.27.0: - resolution: {integrity: sha512-LaZ9utnXtOJjnoDkpm+nQsONUUmyRR0WD6PGROSdQRRW3LRmgK/ZP8wxjW+Ai+2uolKTtuJzLx2mvbIeIoLqpg==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=7.23.0' - dependencies: - ci-info: 3.1.1 - clean-regexp: 1.0.0 - eslint: 7.27.0 - eslint-template-visitor: 2.3.2_eslint@7.27.0 - eslint-utils: 2.1.0 - import-modules: 2.1.0 - is-builtin-module: 3.1.0 - lodash: 4.17.21 - pluralize: 8.0.0 - read-pkg-up: 7.0.1 - regexp-tree: 0.1.23 - reserved-words: 0.1.2 - safe-regex: 2.1.1 - semver: 7.3.5 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-scope/5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true - - /eslint-template-visitor/2.3.2_eslint@7.27.0: - resolution: {integrity: sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==} - peerDependencies: - eslint: '>=7.0.0' - dependencies: - '@babel/core': 7.14.3 - '@babel/eslint-parser': 7.14.3_@babel+core@7.14.3+eslint@7.27.0 - eslint: 7.27.0 - eslint-visitor-keys: 2.1.0 - esquery: 1.4.0 - multimap: 1.1.0 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-utils/2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - dependencies: - eslint-visitor-keys: 1.3.0 - dev: true - - /eslint-visitor-keys/1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true - - /eslint-visitor-keys/2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint/7.27.0: - resolution: {integrity: sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==} - engines: {node: ^10.12.0 || >=12.0.0} - hasBin: true - dependencies: - '@babel/code-frame': 7.12.11 - '@eslint/eslintrc': 0.4.1 - ajv: 6.12.6 - chalk: 4.1.1 - cross-spawn: 7.0.3 - debug: 4.3.1 - doctrine: 3.0.0 - enquirer: 2.3.6 - escape-string-regexp: 4.0.0 - eslint-scope: 5.1.1 - eslint-utils: 2.1.0 - eslint-visitor-keys: 2.1.0 - espree: 7.3.1 - esquery: 1.4.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - functional-red-black-tree: 1.0.1 - glob-parent: 5.1.2 - globals: 13.8.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.1 - js-yaml: 3.14.1 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.0.4 - natural-compare: 1.4.0 - optionator: 0.9.1 - progress: 2.0.3 - regexpp: 3.1.0 - semver: 7.3.5 - strip-ansi: 6.0.0 - strip-json-comments: 3.1.1 - table: 6.7.1 - text-table: 0.2.0 - v8-compile-cache: 2.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /esm/3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - dev: true - - /espree/7.3.1: - resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - acorn: 7.4.1 - acorn-jsx: 5.3.1_acorn@7.4.1 - eslint-visitor-keys: 1.3.0 - dev: true - - /esprima/4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /esquery/1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.2.0 - dev: true - - /esrecurse/4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.2.0 - dev: true - - /estraverse/4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - - /estraverse/5.2.0: - resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} - engines: {node: '>=4.0'} - dev: true - - /estree-walker/1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: true - - /esutils/2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /extend/3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true - - /fast-deep-equal/3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-json-stable-stringify/2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein/2.0.6: - resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} - dev: true - - /file-entry-cache/6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.0.4 - dev: true - - /file-type/14.7.1: - resolution: {integrity: sha512-sXAMgFk67fQLcetXustxfKX+PZgHIUFn96Xld9uH8aXPdX3xOp0/jg9OdouVTvQrf7mrn+wAa4jN/y9fUOOiRA==} - engines: {node: '>=8'} - dependencies: - readable-web-to-node-stream: 2.0.0 - strtok3: 6.0.8 - token-types: 2.1.1 - typedarray-to-buffer: 3.1.5 - dev: true - - /fill-range/7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /find-cache-dir/3.3.1: - resolution: {integrity: sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: true - - /find-up/2.1.0: - resolution: {integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=} - engines: {node: '>=4'} - dependencies: - locate-path: 2.0.0 - dev: true - - /find-up/4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true - - /find-up/5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat-cache/3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.1.1 - rimraf: 3.0.2 - dev: true - - /flat/5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true - - /flatted/3.1.1: - resolution: {integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==} - dev: true - - /foreground-child/2.0.0: - resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} - engines: {node: '>=8.0.0'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 3.0.3 - dev: true - - /fromentries/1.3.2: - resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} - dev: true - - /fs.realpath/1.0.0: - resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} - dev: true - - /fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - dev: true - optional: true - - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true - - /functional-red-black-tree/1.0.1: - resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} - dev: true - - /gensync/1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true - - /get-caller-file/2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-func-name/2.0.0: - resolution: {integrity: sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=} - dev: true - - /get-intrinsic/1.1.1: - resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.2 - dev: true - - /get-package-type/0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true - - /get-set-props/0.1.0: - resolution: {integrity: sha1-mYR1wXhEVobQsyJG2l3428++jqM=} - engines: {node: '>=0.10.0'} - dev: true - - /get-stdin/7.0.0: - resolution: {integrity: sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==} - engines: {node: '>=8'} - dev: true - - /glob-parent/5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.1 - dev: true - - /glob/7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.0.4 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob/7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.0.4 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /globals/11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true - - /globals/12.4.0: - resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.8.1 - dev: true - - /globals/13.8.0: - resolution: {integrity: sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /graceful-fs/4.2.6: - resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} - dev: true - - /growl/1.10.5: - resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} - engines: {node: '>=4.x'} - dev: true - - /hard-rejection/2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true - - /has-bigints/1.0.1: - resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} - dev: true - - /has-flag/3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} - engines: {node: '>=4'} - dev: true - - /has-flag/4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /has-symbols/1.0.2: - resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} - engines: {node: '>= 0.4'} - dev: true - - /has/1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - - /hasha/5.2.2: - resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} - engines: {node: '>=8'} - dependencies: - is-stream: 2.0.0 - type-fest: 0.8.1 - dev: true - - /he/1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true - - /hosted-git-info/2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - - /html-escaper/2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true - - /htmlparser2/6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - dependencies: - domelementtype: 2.2.0 - domhandler: 4.2.0 - domutils: 2.6.0 - entities: 2.2.0 - dev: true - - /ieee754/1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - - /ignore/4.0.6: - resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} - engines: {node: '>= 4'} - dev: true - - /ignore/5.1.8: - resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} - engines: {node: '>= 4'} - dev: true - - /import-fresh/3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /import-modules/2.1.0: - resolution: {integrity: sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==} - engines: {node: '>=8'} - dev: true - - /imurmurhash/0.1.4: - resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} - engines: {node: '>=0.8.19'} - dev: true - - /indent-string/4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true - - /inflight/1.0.6: - resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /is-alphabetical/1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - dev: true - - /is-alphanumerical/1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - dev: true - - /is-arrayish/0.2.1: - resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} - dev: true - - /is-bigint/1.0.2: - resolution: {integrity: sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==} - dev: true - - /is-binary-path/2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-boolean-object/1.1.1: - resolution: {integrity: sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - dev: true - - /is-buffer/1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: true - - /is-builtin-module/3.1.0: - resolution: {integrity: sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.2.0 - dev: true - - /is-callable/1.2.3: - resolution: {integrity: sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==} - engines: {node: '>= 0.4'} - dev: true - - /is-core-module/2.4.0: - resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} - dependencies: - has: 1.0.3 - dev: true - - /is-date-object/1.0.4: - resolution: {integrity: sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==} - engines: {node: '>= 0.4'} - dev: true - - /is-decimal/1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - dev: true - - /is-docker/2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - - /is-extglob/2.1.1: - resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} - engines: {node: '>=0.10.0'} - dev: true - - /is-fullwidth-code-point/2.0.0: - resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} - engines: {node: '>=4'} - dev: true - - /is-fullwidth-code-point/3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - - /is-get-set-prop/1.0.0: - resolution: {integrity: sha1-JzGHfk14pqae3M5rudaLB3nnYxI=} - dependencies: - get-set-props: 0.1.0 - lowercase-keys: 1.0.1 - dev: true - - /is-glob/4.0.1: - resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-hexadecimal/1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - dev: true - - /is-js-type/2.0.0: - resolution: {integrity: sha1-c2FwBtZZtOtHKbunR9KHgt8PfiI=} - dependencies: - js-types: 1.0.0 - dev: true - - /is-negative-zero/2.0.1: - resolution: {integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object/1.0.5: - resolution: {integrity: sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==} - engines: {node: '>= 0.4'} - dev: true - - /is-number/7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-obj-prop/1.0.0: - resolution: {integrity: sha1-s03nnEULjXxzqyzfZ9yHWtuF+A4=} - dependencies: - lowercase-keys: 1.0.1 - obj-props: 1.3.0 - dev: true - - /is-plain-obj/1.1.0: - resolution: {integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=} - engines: {node: '>=0.10.0'} - dev: true - - /is-plain-obj/2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: true - - /is-proto-prop/2.0.0: - resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} - dependencies: - lowercase-keys: 1.0.1 - proto-props: 2.0.0 - dev: true - - /is-regex/1.1.3: - resolution: {integrity: sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-symbols: 1.0.2 - dev: true - - /is-stream/2.0.0: - resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} - engines: {node: '>=8'} - dev: true - - /is-string/1.0.6: - resolution: {integrity: sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==} - engines: {node: '>= 0.4'} - dev: true - - /is-symbol/1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.2 - dev: true - - /is-typedarray/1.0.0: - resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} - dev: true - - /is-whitespace-character/1.0.4: - resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} - dev: true - - /is-windows/1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true - - /is-word-character/1.0.4: - resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} - dev: true - - /is-wsl/2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - - /isexe/2.0.0: - resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} - dev: true - - /istanbul-lib-coverage/3.0.0: - resolution: {integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==} - engines: {node: '>=8'} - dev: true - - /istanbul-lib-hook/3.0.0: - resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} - engines: {node: '>=8'} - dependencies: - append-transform: 2.0.0 - dev: true - - /istanbul-lib-instrument/4.0.3: - resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.14.3 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.0.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-processinfo/2.0.2: - resolution: {integrity: sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==} - engines: {node: '>=8'} - dependencies: - archy: 1.0.0 - cross-spawn: 7.0.3 - istanbul-lib-coverage: 3.0.0 - make-dir: 3.1.0 - p-map: 3.0.0 - rimraf: 3.0.2 - uuid: 3.4.0 - dev: true - - /istanbul-lib-report/3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} - dependencies: - istanbul-lib-coverage: 3.0.0 - make-dir: 3.1.0 - supports-color: 7.2.0 - dev: true - - /istanbul-lib-source-maps/4.0.0: - resolution: {integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==} - engines: {node: '>=8'} - dependencies: - debug: 4.3.1 - istanbul-lib-coverage: 3.0.0 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-reports/3.0.2: - resolution: {integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 - dev: true - - /jest-worker/26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 15.6.0 - merge-stream: 2.0.0 - supports-color: 7.2.0 - dev: true - - /js-tokens/4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true - - /js-types/1.0.0: - resolution: {integrity: sha1-0kLmSU7Vcq08koCfyL7X92h8vwM=} - engines: {node: '>=0.10.0'} - dev: true - - /js-yaml/3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true - - /js-yaml/4.0.0: - resolution: {integrity: sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /jsdoctypeparser/9.0.0: - resolution: {integrity: sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==} - engines: {node: '>=10'} - hasBin: true - dev: true - - /jsesc/0.5.0: - resolution: {integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=} - hasBin: true - dev: true - - /jsesc/2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /json-parse-better-errors/1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - dev: true - - /json-parse-even-better-errors/2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true - - /json-schema-traverse/0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /json-schema-traverse/1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true - - /json-stable-stringify-without-jsonify/1.0.1: - resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} - dev: true - - /json5/1.0.1: - resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} - hasBin: true - dependencies: - minimist: 1.2.5 - dev: true - - /json5/2.2.0: - resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} - engines: {node: '>=6'} - hasBin: true - dependencies: - minimist: 1.2.5 - dev: true - - /kind-of/6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true - - /levn/0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /lines-and-columns/1.1.6: - resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} - dev: true - - /load-json-file/4.0.0: - resolution: {integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=} - engines: {node: '>=4'} - dependencies: - graceful-fs: 4.2.6 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - dev: true - - /locate-path/2.0.0: - resolution: {integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=} - engines: {node: '>=4'} - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - dev: true - - /locate-path/5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: true - - /locate-path/6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /lodash.clonedeep/4.5.0: - resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} - dev: true - - /lodash.debounce/4.0.8: - resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=} - dev: true - - /lodash.flattendeep/4.4.0: - resolution: {integrity: sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=} - dev: true - - /lodash.memoize/4.1.2: - resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=} - dev: true - - /lodash.merge/4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /lodash.truncate/4.4.2: - resolution: {integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=} - dev: true - - /lodash/4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - - /log-symbols/4.0.0: - resolution: {integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.1 - dev: true - - /lowercase-keys/1.0.1: - resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} - engines: {node: '>=0.10.0'} - dev: true - - /lru-cache/6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /make-dir/3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: true - - /map-obj/1.0.1: - resolution: {integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=} - engines: {node: '>=0.10.0'} - dev: true - - /map-obj/4.2.1: - resolution: {integrity: sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==} - engines: {node: '>=8'} - dev: true - - /markdown-escapes/1.0.4: - resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} - dev: true - - /meow/6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} - engines: {node: '>=8'} - dependencies: - '@types/minimist': 1.2.1 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.0 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 2.5.0 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.0 - type-fest: 0.13.1 - yargs-parser: 18.1.3 - dev: true - - /merge-stream/2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - - /mime/2.5.2: - resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: true - - /min-indent/1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true - - /minimatch/3.0.4: - resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimist-options/4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - dev: true - - /minimist/1.2.5: - resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} - dev: true - - /mocha/8.4.0: - resolution: {integrity: sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==} - engines: {node: '>= 10.12.0'} - hasBin: true - dependencies: - '@ungap/promise-all-settled': 1.1.2 - ansi-colors: 4.1.1 - browser-stdout: 1.3.1 - chokidar: 3.5.1 - debug: 4.3.1_supports-color@8.1.1 - diff: 5.0.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 7.1.6 - growl: 1.10.5 - he: 1.2.0 - js-yaml: 4.0.0 - log-symbols: 4.0.0 - minimatch: 3.0.4 - ms: 2.1.3 - nanoid: 3.1.20 - serialize-javascript: 5.0.1 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - which: 2.0.2 - wide-align: 1.1.3 - workerpool: 6.1.0 - yargs: 16.2.0 - yargs-parser: 20.2.4 - yargs-unparser: 2.0.0 - dev: true - - /ms/2.0.0: - resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} - dev: true - - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /ms/2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - - /multimap/1.1.0: - resolution: {integrity: sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==} - dev: true - - /nanoid/3.1.20: - resolution: {integrity: sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /natural-compare/1.4.0: - resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} - dev: true - - /neodoc/2.0.2: - resolution: {integrity: sha512-NAppJ0YecKWdhSXFYCHbo6RutiX8vOt/Jo3l46mUg6pQlpJNaqc5cGxdrW2jITQm5JIYySbFVPDl3RrREXNyPw==} - dependencies: - ansi-regex: 2.1.1 - dev: true - - /node-preload/0.2.1: - resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} - engines: {node: '>=8'} - dependencies: - process-on-spawn: 1.0.0 - dev: true - - /node-releases/1.1.72: - resolution: {integrity: sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==} - dev: true - - /normalize-package-data/2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.20.0 - semver: 5.7.1 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-path/3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /nyc/15.1.0: - resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} - engines: {node: '>=8.9'} - hasBin: true - dependencies: - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - caching-transform: 4.0.0 - convert-source-map: 1.7.0 - decamelize: 1.2.0 - find-cache-dir: 3.3.1 - find-up: 4.1.0 - foreground-child: 2.0.0 - get-package-type: 0.1.0 - glob: 7.1.7 - istanbul-lib-coverage: 3.0.0 - istanbul-lib-hook: 3.0.0 - istanbul-lib-instrument: 4.0.3 - istanbul-lib-processinfo: 2.0.2 - istanbul-lib-report: 3.0.0 - istanbul-lib-source-maps: 4.0.0 - istanbul-reports: 3.0.2 - make-dir: 3.1.0 - node-preload: 0.2.1 - p-map: 3.0.0 - process-on-spawn: 1.0.0 - resolve-from: 5.0.0 - rimraf: 3.0.2 - signal-exit: 3.0.3 - spawn-wrap: 2.0.0 - test-exclude: 6.0.0 - yargs: 15.4.1 - transitivePeerDependencies: - - supports-color - dev: true - - /obj-props/1.3.0: - resolution: {integrity: sha512-k2Xkjx5wn6eC3537SWAXHzB6lkI81kS+icMKMkh4nG3w7shWG6MaWOBrNvhWVOszrtL5uxdfymQQfPUxwY+2eg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-inspect/1.10.3: - resolution: {integrity: sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==} - dev: true - - /object-keys/1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true - - /object.assign/4.1.2: - resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - has-symbols: 1.0.2 - object-keys: 1.1.1 - dev: true - - /object.values/1.1.3: - resolution: {integrity: sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.18.0 - has: 1.0.3 - dev: true - - /once/1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} - dependencies: - wrappy: 1.0.2 - dev: true - - /open-cli/6.0.1: - resolution: {integrity: sha512-A5h8MF3GrT1efn9TiO9LPajDnLtuEiGQT5G8TxWObBlgt1cZJF1YbQo/kNtsD1bJb7HxnT6SaSjzeLq0Rfhygw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - file-type: 14.7.1 - get-stdin: 7.0.0 - meow: 6.1.1 - open: 7.4.2 - temp-write: 4.0.0 - dev: true - - /open/7.4.2: - resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: true - - /optionator/0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.3 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.3 - dev: true - - /p-limit/1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - dependencies: - p-try: 1.0.0 - dev: true - - /p-limit/2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: true - - /p-limit/3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate/2.0.0: - resolution: {integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=} - engines: {node: '>=4'} - dependencies: - p-limit: 1.3.0 - dev: true - - /p-locate/4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: true - - /p-locate/5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /p-map/3.0.0: - resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} - engines: {node: '>=8'} - dependencies: - aggregate-error: 3.1.0 - dev: true - - /p-try/1.0.0: - resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=} - engines: {node: '>=4'} - dev: true - - /p-try/2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true - - /package-hash/4.0.0: - resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} - engines: {node: '>=8'} - dependencies: - graceful-fs: 4.2.6 - hasha: 5.2.2 - lodash.flattendeep: 4.4.0 - release-zalgo: 1.0.0 - dev: true - - /parent-module/1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - - /parse-entities/1.2.2: - resolution: {integrity: sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==} - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - dev: true - - /parse-json/4.0.0: - resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=} - engines: {node: '>=4'} - dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 - dev: true - - /parse-json/5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.12.13 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.1.6 - dev: true - - /path-exists/3.0.0: - resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} - engines: {node: '>=4'} - dev: true - - /path-exists/4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute/1.0.1: - resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} - engines: {node: '>=0.10.0'} - dev: true - - /path-key/3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-parse/1.0.6: - resolution: {integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==} - dev: true - - /path-type/3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} - dependencies: - pify: 3.0.0 - dev: true - - /pathval/1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true - - /peek-readable/3.1.3: - resolution: {integrity: sha512-mpAcysyRJxmICBcBa5IXH7SZPvWkcghm6Fk8RekoS3v+BpbSzlZzuWbMx+GXrlUwESi9qHar4nVEZNMKylIHvg==} - engines: {node: '>=8'} - dev: true - - /picomatch/2.3.0: - resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} - engines: {node: '>=8.6'} - dev: true - - /pify/3.0.0: - resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=} - engines: {node: '>=4'} - dev: true - - /pkg-dir/2.0.0: - resolution: {integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=} - engines: {node: '>=4'} - dependencies: - find-up: 2.1.0 - dev: true - - /pkg-dir/4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: true - - /pkg-up/2.0.0: - resolution: {integrity: sha1-yBmscoBZpGHKscOImivjxJoATX8=} - engines: {node: '>=4'} - dependencies: - find-up: 2.1.0 - dev: true - - /pluralize/8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true - - /prelude-ls/1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - - /process-on-spawn/1.0.0: - resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} - engines: {node: '>=8'} - dependencies: - fromentries: 1.3.2 - dev: true - - /progress/2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: true - - /proto-props/2.0.0: - resolution: {integrity: sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==} - engines: {node: '>=4'} - dev: true - - /punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} - engines: {node: '>=6'} - dev: true - - /quick-lru/4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true - - /randombytes/2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /read-pkg-up/3.0.0: - resolution: {integrity: sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=} - engines: {node: '>=4'} - dependencies: - find-up: 2.1.0 - read-pkg: 3.0.0 - dev: true - - /read-pkg-up/7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true - - /read-pkg/3.0.0: - resolution: {integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=} - engines: {node: '>=4'} - dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 - dev: true - - /read-pkg/5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.0 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true - - /readable-web-to-node-stream/2.0.0: - resolution: {integrity: sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA==} - dev: true - - /readdirp/3.5.0: - resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.0 - dev: true - - /redent/3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true - - /regenerate-unicode-properties/8.2.0: - resolution: {integrity: sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: true - - /regenerate/1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true - - /regenerator-runtime/0.13.7: - resolution: {integrity: sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==} - dev: true - - /regenerator-transform/0.14.5: - resolution: {integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==} - dependencies: - '@babel/runtime': 7.14.0 - dev: true - - /regexp-tree/0.1.23: - resolution: {integrity: sha512-+7HWfb4Bvu8Rs2eQTUIpX9I/PlQkYOuTNbRpKLJlQpSgwSkzFYh+pUj0gtvglnOZLKB6YgnIgRuJ2/IlpL48qw==} - hasBin: true - dev: true - - /regexpp/3.1.0: - resolution: {integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==} - engines: {node: '>=8'} - dev: true - - /regexpu-core/4.7.1: - resolution: {integrity: sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 8.2.0 - regjsgen: 0.5.2 - regjsparser: 0.6.9 - unicode-match-property-ecmascript: 1.0.4 - unicode-match-property-value-ecmascript: 1.2.0 - dev: true - - /regextras/0.7.1: - resolution: {integrity: sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==} - engines: {node: '>=0.1.14'} - dev: true - - /regjsgen/0.5.2: - resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} - dev: true - - /regjsparser/0.6.9: - resolution: {integrity: sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: true - - /release-zalgo/1.0.0: - resolution: {integrity: sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=} - engines: {node: '>=4'} - dependencies: - es6-error: 4.1.1 - dev: true - - /remark-parse/7.0.2: - resolution: {integrity: sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==} - dependencies: - collapse-white-space: 1.0.6 - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - is-whitespace-character: 1.0.4 - is-word-character: 1.0.4 - markdown-escapes: 1.0.4 - parse-entities: 1.2.2 - repeat-string: 1.6.1 - state-toggle: 1.0.3 - trim: 0.0.1 - trim-trailing-lines: 1.1.4 - unherit: 1.1.3 - unist-util-remove-position: 1.1.4 - vfile-location: 2.0.6 - xtend: 4.0.2 - dev: true - - /repeat-string/1.6.1: - resolution: {integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=} - engines: {node: '>=0.10'} - dev: true - - /replace-ext/1.0.0: - resolution: {integrity: sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=} - engines: {node: '>= 0.10'} - dev: true - - /require-directory/2.1.1: - resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} - engines: {node: '>=0.10.0'} - dev: true - - /require-from-string/2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true - - /require-main-filename/2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true - - /reserved-words/0.1.2: - resolution: {integrity: sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=} - dev: true - - /resolve-from/4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve-from/5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true - - /resolve/1.20.0: - resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} - dependencies: - is-core-module: 2.4.0 - path-parse: 1.0.6 - dev: true - - /rimraf/3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.1.7 - dev: true - - /rollup-plugin-terser/7.0.2_rollup@2.49.0: - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - peerDependencies: - rollup: ^2.0.0 - dependencies: - '@babel/code-frame': 7.12.13 - jest-worker: 26.6.2 - rollup: 2.49.0 - serialize-javascript: 4.0.0 - terser: 5.7.0 - dev: true - - /rollup/2.49.0: - resolution: {integrity: sha512-UnrCjMXICx9q0jF8L7OYs7LPk95dW0U5UYp/VANnWqfuhyr66FWi/YVlI34Oy8Tp4ZGLcaUDt4APJm80b9oPWQ==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true - - /safe-buffer/5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - - /safe-regex/2.1.1: - resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} - dependencies: - regexp-tree: 0.1.23 - dev: true - - /semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true - - /semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: true - - /semver/7.0.0: - resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} - hasBin: true - dev: true - - /semver/7.3.2: - resolution: {integrity: sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==} - engines: {node: '>=10'} - hasBin: true - dev: true - - /semver/7.3.5: - resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /serialize-javascript/4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} - dependencies: - randombytes: 2.1.0 - dev: true - - /serialize-javascript/5.0.1: - resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} - dependencies: - randombytes: 2.1.0 - dev: true - - /set-blocking/2.0.0: - resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=} - dev: true - - /shebang-command/2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex/3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /signal-exit/3.0.3: - resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} - dev: true - - /slice-ansi/4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - - /source-map-support/0.5.19: - resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} - dependencies: - buffer-from: 1.1.1 - source-map: 0.6.1 - dev: true - - /source-map/0.5.7: - resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} - engines: {node: '>=0.10.0'} - dev: true - - /source-map/0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map/0.7.3: - resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} - engines: {node: '>= 8'} - dev: true - - /spawn-wrap/2.0.0: - resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} - engines: {node: '>=8'} - dependencies: - foreground-child: 2.0.0 - is-windows: 1.0.2 - make-dir: 3.1.0 - rimraf: 3.0.2 - signal-exit: 3.0.3 - which: 2.0.2 - dev: true - - /spdx-correct/3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.9 - dev: true - - /spdx-exceptions/2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true - - /spdx-expression-parse/3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.9 - dev: true - - /spdx-license-ids/3.0.9: - resolution: {integrity: sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==} - dev: true - - /sprintf-js/1.0.3: - resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} - dev: true - - /state-toggle/1.0.3: - resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} - dev: true - - /string-width/2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} - engines: {node: '>=4'} - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - dev: true - - /string-width/4.2.2: - resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.0 - dev: true - - /string.prototype.trimend/1.0.4: - resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - dev: true - - /string.prototype.trimstart/1.0.4: - resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - dev: true - - /strip-ansi/4.0.0: - resolution: {integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=} - engines: {node: '>=4'} - dependencies: - ansi-regex: 3.0.0 - dev: true - - /strip-ansi/6.0.0: - resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.0 - dev: true - - /strip-bom/3.0.0: - resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} - engines: {node: '>=4'} - dev: true - - /strip-bom/4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true - - /strip-indent/3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - dependencies: - min-indent: 1.0.1 - dev: true - - /strip-json-comments/3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /strtok3/6.0.8: - resolution: {integrity: sha512-QLgv+oiXwXgCgp2PdPPa+Jpp4D9imK9e/0BsyfeFMr6QL6wMVqoVn9+OXQ9I7MZbmUzN6lmitTJ09uwS2OmGcw==} - engines: {node: '>=8'} - dependencies: - '@tokenizer/token': 0.1.1 - '@types/debug': 4.1.5 - peek-readable: 3.1.3 - dev: true - - /supports-color/5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true - - /supports-color/7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-color/8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: true - - /table/6.7.1: - resolution: {integrity: sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==} - engines: {node: '>=10.0.0'} - dependencies: - ajv: 8.5.0 - lodash.clonedeep: 4.5.0 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.2 - strip-ansi: 6.0.0 - dev: true - - /temp-dir/1.0.0: - resolution: {integrity: sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=} - engines: {node: '>=4'} - dev: true - - /temp-write/4.0.0: - resolution: {integrity: sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==} - engines: {node: '>=8'} - dependencies: - graceful-fs: 4.2.6 - is-stream: 2.0.0 - make-dir: 3.1.0 - temp-dir: 1.0.0 - uuid: 3.4.0 - dev: true - - /terser/5.7.0: - resolution: {integrity: sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==} - engines: {node: '>=10'} - hasBin: true - dependencies: - commander: 2.20.3 - source-map: 0.7.3 - source-map-support: 0.5.19 - dev: true - - /test-exclude/6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.1.7 - minimatch: 3.0.4 - dev: true - - /text-table/0.2.0: - resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} - dev: true - - /to-fast-properties/2.0.0: - resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} - engines: {node: '>=4'} - dev: true - - /to-regex-range/5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /token-types/2.1.1: - resolution: {integrity: sha512-wnQcqlreS6VjthyHO3Y/kpK/emflxDBNhlNUPfh7wE39KnuDdOituXomIbyI79vBtF0Ninpkh72mcuRHo+RG3Q==} - engines: {node: '>=0.1.98'} - dependencies: - '@tokenizer/token': 0.1.1 - ieee754: 1.2.1 - dev: true - - /trim-newlines/3.0.0: - resolution: {integrity: sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==} - engines: {node: '>=8'} - dev: true - - /trim-trailing-lines/1.1.4: - resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} - dev: true - - /trim/0.0.1: - resolution: {integrity: sha1-WFhUf2spB1fulczMZm+1AITEYN0=} - dev: true - - /trough/1.0.5: - resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} - dev: true - - /tsconfig-paths/3.9.0: - resolution: {integrity: sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==} - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.1 - minimist: 1.2.5 - strip-bom: 3.0.0 - dev: true - - /type-check/0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-detect/4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true - - /type-fest/0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - dev: true - - /type-fest/0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /type-fest/0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true - - /type-fest/0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true - - /typedarray-to-buffer/3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: true - - /unbox-primitive/1.0.1: - resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} - dependencies: - function-bind: 1.1.1 - has-bigints: 1.0.1 - has-symbols: 1.0.2 - which-boxed-primitive: 1.0.2 - dev: true - - /unherit/1.1.3: - resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} - dependencies: - inherits: 2.0.4 - xtend: 4.0.2 - dev: true - - /unicode-canonical-property-names-ecmascript/1.0.4: - resolution: {integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==} - engines: {node: '>=4'} - dev: true - - /unicode-match-property-ecmascript/1.0.4: - resolution: {integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 1.0.4 - unicode-property-aliases-ecmascript: 1.1.0 - dev: true - - /unicode-match-property-value-ecmascript/1.2.0: - resolution: {integrity: sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==} - engines: {node: '>=4'} - dev: true - - /unicode-property-aliases-ecmascript/1.1.0: - resolution: {integrity: sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==} - engines: {node: '>=4'} - dev: true - - /unified/6.2.0: - resolution: {integrity: sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==} - dependencies: - bail: 1.0.5 - extend: 3.0.2 - is-plain-obj: 1.1.0 - trough: 1.0.5 - vfile: 2.3.0 - x-is-string: 0.1.0 - dev: true - - /unist-util-is/3.0.0: - resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==} - dev: true - - /unist-util-remove-position/1.1.4: - resolution: {integrity: sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==} - dependencies: - unist-util-visit: 1.4.1 - dev: true - - /unist-util-stringify-position/1.1.2: - resolution: {integrity: sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==} - dev: true - - /unist-util-visit-parents/2.1.2: - resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==} - dependencies: - unist-util-is: 3.0.0 - dev: true - - /unist-util-visit/1.4.1: - resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==} - dependencies: - unist-util-visit-parents: 2.1.2 - dev: true - - /uri-js/4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.1.1 - dev: true - - /uuid/3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - hasBin: true - dev: true - - /v8-compile-cache/2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} - dev: true - - /validate-npm-package-license/3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.1.1 - spdx-expression-parse: 3.0.1 - dev: true - - /vfile-location/2.0.6: - resolution: {integrity: sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==} - dev: true - - /vfile-message/1.1.1: - resolution: {integrity: sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==} - dependencies: - unist-util-stringify-position: 1.1.2 - dev: true - - /vfile/2.3.0: - resolution: {integrity: sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==} - dependencies: - is-buffer: 1.1.6 - replace-ext: 1.0.0 - unist-util-stringify-position: 1.1.2 - vfile-message: 1.1.1 - dev: true - - /which-boxed-primitive/1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.2 - is-boolean-object: 1.1.1 - is-number-object: 1.0.5 - is-string: 1.0.6 - is-symbol: 1.0.4 - dev: true - - /which-module/2.0.0: - resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=} - dev: true - - /which/2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /wide-align/1.1.3: - resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} - dependencies: - string-width: 2.1.1 - dev: true - - /word-wrap/1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true - - /workerpool/6.1.0: - resolution: {integrity: sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==} - dev: true - - /wrap-ansi/6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.2 - strip-ansi: 6.0.0 - dev: true - - /wrap-ansi/7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.2 - strip-ansi: 6.0.0 - dev: true - - /wrappy/1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - dev: true - - /write-file-atomic/3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.3 - typedarray-to-buffer: 3.1.5 - dev: true - - /x-is-string/0.1.0: - resolution: {integrity: sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=} - dev: true - - /xtend/4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true - - /y18n/4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true - - /y18n/5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - - /yallist/4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - - /yargs-parser/18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: true - - /yargs-parser/20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - dev: true - - /yargs-unparser/2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - dependencies: - camelcase: 6.2.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - dev: true - - /yargs/15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.2 - which-module: 2.0.0 - y18n: 4.0.3 - yargs-parser: 18.1.3 - dev: true - - /yargs/16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.2 - y18n: 5.0.8 - yargs-parser: 20.2.4 - dev: true - - /yocto-queue/0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true diff --git a/tools/node_modules/eslint/node_modules/regextras/src/index-generators.js b/tools/node_modules/eslint/node_modules/regextras/src/index-generators.js deleted file mode 100644 index 3dbf16414da..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/src/index-generators.js +++ /dev/null @@ -1,36 +0,0 @@ -/* eslint-disable node/no-unsupported-features/es-syntax */ -// We copy the regular expression so as to be able to always -// ensure the exec expression is a global one (and thereby prevent recursion) - -/** - * - * @param {RegExtras} RegExtras - * @returns {void} - */ -function addPrototypeMethods (RegExtras) { - RegExtras.prototype.entries = function * (str) { - let matches, i = 0; - const regex = RegExtras.mixinRegex(this.regex, 'g'); - while ((matches = regex.exec(str)) !== null) { - yield [i++, matches]; - } - }; - - RegExtras.prototype.values = function * (str) { - let matches; - const regex = RegExtras.mixinRegex(this.regex, 'g'); - while ((matches = regex.exec(str)) !== null) { - yield matches; - } - }; - - RegExtras.prototype.keys = function * (str) { - let i = 0; - const regex = RegExtras.mixinRegex(this.regex, 'g'); - while (regex.exec(str) !== null) { - yield i++; - } - }; -} - -export default addPrototypeMethods; diff --git a/tools/node_modules/eslint/node_modules/regextras/src/index.js b/tools/node_modules/eslint/node_modules/regextras/src/index.js deleted file mode 100644 index d5fd29475a4..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/src/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import {mixinRegex, RegExtras} from './main.js'; -import addGenerators from './index-generators.js'; - -addGenerators(RegExtras); - -export {mixinRegex, RegExtras}; diff --git a/tools/node_modules/eslint/node_modules/regextras/src/main.js b/tools/node_modules/eslint/node_modules/regextras/src/main.js deleted file mode 100644 index 59a638e8f39..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/src/main.js +++ /dev/null @@ -1,186 +0,0 @@ -/* eslint-disable node/no-unsupported-features/es-syntax, - jsdoc/require-jsdoc */ - -// We copy the regular expression so as to be able to always ensure the -// exec expression is a global one (and thereby prevent recursion) - -import mixinRegex from './mixinRegex.js'; - -class RegExtras { - constructor (regex, flags, newLastIndex) { - this.regex = mixinRegex( - (typeof regex === 'string' ? new RegExp(regex) : mixinRegex(regex)), - flags || '', - newLastIndex - ); - } - - forEach (str, cb, thisObj = null) { - const regex = mixinRegex(this.regex, 'g'); - - let matches, n0, i = 0; - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - return this; - } - - some (str, cb, thisObj = null) { - const regex = mixinRegex(this.regex, 'g'); - let matches, ret, n0, i = 0; - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return true; - } - } - return false; - } - - every (str, cb, thisObj = null) { - const regex = mixinRegex(this.regex, 'g'); - let matches, ret, n0, i = 0; - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (!ret) { - return false; - } - } - return true; - } - - map (str, cb, thisObj = null) { - const ret = []; - const regex = mixinRegex(this.regex, 'g'); - let matches, n0, i = 0; - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - return ret; - } - - filter (str, cb, thisObj = null) { - let matches, n0, i = 0; - const ret = [], regex = mixinRegex(this.regex, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - return ret; - } - - reduce (str, cb, prev, thisObj = null) { - let matches, n0, i = 0; - const regex = mixinRegex(this.regex, 'g'); - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - return prev; - } - - reduceRight (str, cb, prevOrig, thisObjOrig) { - let matches, n0, i, thisObj = thisObjOrig, prev = prevOrig; - const matchesContainer = [], - regex = mixinRegex(this.regex, 'g'); - thisObj = thisObj || null; - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - i = matchesContainer.length; - if (!i) { - if (arguments.length < 3) { - throw new TypeError( - 'reduce of empty matches array with no initial value' - ); - } - return prev; - } - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - matchesContainer.reduceRight((container, mtches) => { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; - } - - find (str, cb, thisObj = null) { - let matches, ret, n0, i = 0; - const regex = mixinRegex(this.regex, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return n0[0]; - } - } - return false; - } - - findIndex (str, cb, thisObj = null) { - const regex = mixinRegex(this.regex, 'g'); - let matches, i = 0; - while ((matches = regex.exec(str)) !== null) { - const n0 = matches.splice(0, 1); - const ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return i - 1; - } - } - return -1; - } - - findExec (str, cb, thisObj = null) { - const regex = mixinRegex(this.regex, 'g'); - let matches, i = 0; - while ((matches = regex.exec(str)) !== null) { - const n0 = matches.splice(0, 1); - const ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return matches; - } - } - return false; - } - - filterExec (str, cb, thisObj = null) { - let matches, n0, i = 0; - const ret = [], regex = mixinRegex(this.regex, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - return ret; - } -} - -const _RegExtras = RegExtras; -RegExtras = function (...args) { // eslint-disable-line no-class-assign - return new _RegExtras(...args); -}; -RegExtras.prototype = _RegExtras.prototype; - -RegExtras.mixinRegex = mixinRegex; - -export {mixinRegex, RegExtras}; diff --git a/tools/node_modules/eslint/node_modules/regextras/src/mixinRegex.js b/tools/node_modules/eslint/node_modules/regextras/src/mixinRegex.js deleted file mode 100644 index 9618b0d8da2..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/src/mixinRegex.js +++ /dev/null @@ -1,24 +0,0 @@ -/* eslint-disable node/no-unsupported-features/es-syntax */ - -/** - * @param {RegExp} regex - * @param {string} newFlags - * @param {Integer} [newLastIndex=regex.lastIndex] - * @returns {RegExp} - */ -export default function mixinRegex ( - regex, newFlags, newLastIndex = regex.lastIndex -) { - newFlags = newFlags || ''; - regex = new RegExp( - regex.source, - (newFlags.includes('g') ? 'g' : regex.global ? 'g' : '') + - (newFlags.includes('i') ? 'i' : regex.ignoreCase ? 'i' : '') + - (newFlags.includes('m') ? 'm' : regex.multiline ? 'm' : '') + - (newFlags.includes('u') ? 'u' : regex.unicode ? 'u' : '') + - (newFlags.includes('y') ? 'y' : regex.sticky ? 'y' : '') + - (newFlags.includes('s') ? 's' : regex.dotAll ? 's' : '') - ); - regex.lastIndex = newLastIndex; - return regex; -} diff --git a/tools/node_modules/eslint/node_modules/regextras/src/prototype.js b/tools/node_modules/eslint/node_modules/regextras/src/prototype.js deleted file mode 100644 index 617d995ca50..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/src/prototype.js +++ /dev/null @@ -1,116 +0,0 @@ -/* eslint-disable no-extend-native, - no-use-extend-native/no-use-extend-native, - node/no-unsupported-features/es-syntax */ - -// We copy the regular expression so as to be able to always ensure the -// exec expression is a global one (and thereby prevent recursion) - -import mixinRegex from './mixinRegex.js'; - -RegExp.prototype.forEach = function (str, cb, thisObj = null) { - let matches, n0, i = 0; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - return this; -}; - -RegExp.prototype.some = function (str, cb, thisObj = null) { - let matches, ret, n0, i = 0; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return true; - } - } - return false; -}; - -RegExp.prototype.every = function (str, cb, thisObj = null) { - let matches, ret, n0, i = 0; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (!ret) { - return false; - } - } - return true; -}; - -RegExp.prototype.map = function (str, cb, thisObj = null) { - let matches, n0, i = 0; - const ret = []; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - return ret; -}; - -RegExp.prototype.filter = function (str, cb, thisObj = null) { - let matches, n0, i = 0; - const ret = []; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - if (cb.apply(thisObj, matches)) { - ret.push(matches[0]); - } - } - return ret; -}; - -RegExp.prototype.reduce = function (str, cb, prev, thisObj = null) { - let matches, n0, i = 0; - const regex = mixinRegex(this, 'g'); - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(n0, i++))); - } - } - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(n0, i++))); - } - return prev; -}; - -RegExp.prototype.reduceRight = function (str, cb, prevOrig, thisObjOrig) { - let matches, n0, i, - prev = prevOrig, thisObj = thisObjOrig; - const regex = mixinRegex(this, 'g'); - const matchesContainer = []; - thisObj = thisObj || null; - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - i = matchesContainer.length; - if (!i) { - if (arguments.length < 3) { - throw new TypeError( - 'reduce of empty matches array with no initial value' - ); - } - return prev; - } - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(n0, i--))); - } - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(n0, i--))); - return container; - }, matchesContainer); - return prev; -}; diff --git a/tools/node_modules/eslint/node_modules/regextras/src/regexp-prototype.js b/tools/node_modules/eslint/node_modules/regextras/src/regexp-prototype.js deleted file mode 100644 index 764bb671518..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/src/regexp-prototype.js +++ /dev/null @@ -1,168 +0,0 @@ -/* eslint-disable no-extend-native, - no-use-extend-native/no-use-extend-native, - node/no-unsupported-features/es-syntax */ - -// We copy the regular expression so as to be able to always ensure the -// exec expression is a global one (and thereby prevent recursion) - -import mixinRegex from './mixinRegex.js'; - -RegExp.prototype.forEach = function (str, cb, thisObj = null) { - let matches, n0, i = 0; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - return this; -}; - -RegExp.prototype.some = function (str, cb, thisObj = null) { - let matches, ret, n0, i = 0; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return true; - } - } - return false; -}; - -RegExp.prototype.every = function (str, cb, thisObj = null) { - let matches, ret, n0, i = 0; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (!ret) { - return false; - } - } - return true; -}; - -RegExp.prototype.map = function (str, cb, thisObj = null) { - let matches, n0, i = 0; - const ret = []; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - return ret; -}; - -RegExp.prototype.filter = function (str, cb, thisObj = null) { - let matches, n0, i = 0; - const ret = []; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - return ret; -}; - -RegExp.prototype.reduce = function (str, cb, prev, thisObj = null) { - let matches, n0, i = 0; - const regex = mixinRegex(this, 'g'); - if (!prev) { - if ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - return prev; -}; - -RegExp.prototype.reduceRight = function (str, cb, prevOrig, thisObjOrig) { - let matches, n0, i, - prev = prevOrig, thisObj = thisObjOrig; - const regex = mixinRegex(this, 'g'); - const matchesContainer = []; - thisObj = thisObj || null; - while ((matches = regex.exec(str)) !== null) { - matchesContainer.push(matches); - } - i = matchesContainer.length; - if (!i) { - if (arguments.length < 3) { - throw new TypeError( - 'reduce of empty matches array with no initial value' - ); - } - return prev; - } - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; -}; - -RegExp.prototype.find = function (str, cb, thisObj = null) { - let matches, ret, n0, i = 0; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return n0[0]; - } - } - return false; -}; - -RegExp.prototype.findIndex = function (str, cb, thisObj = null) { - let matches, ret, n0, i = 0; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return i - 1; - } - } - return -1; -}; - -RegExp.prototype.findExec = function (str, cb, thisObj = null) { - let matches, ret, n0, i = 0; - const regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return matches; - } - } - return false; -}; - -RegExp.prototype.filterExec = function (str, cb, thisObj = null) { - let matches, n0, i = 0; - const ret = [], regex = mixinRegex(this, 'g'); - while ((matches = regex.exec(str)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - return ret; -}; diff --git a/tools/node_modules/eslint/node_modules/regextras/src/string-prototype.js b/tools/node_modules/eslint/node_modules/regextras/src/string-prototype.js deleted file mode 100644 index ce26abf3c16..00000000000 --- a/tools/node_modules/eslint/node_modules/regextras/src/string-prototype.js +++ /dev/null @@ -1,169 +0,0 @@ -// We copy the regular expression so as to be able to always ensure the exec -// expression is a global one (and thereby prevent recursion) - -/* eslint-disable no-extend-native, - no-use-extend-native/no-use-extend-native, - node/no-unsupported-features/es-syntax */ - -import mixinRegex from './mixinRegex.js'; - -String.prototype.forEach = function (regex, cb, thisObj = null) { - let matches, n0, i = 0; - regex = mixinRegex(regex, 'g'); - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - cb.apply(thisObj, matches.concat(i++, n0)); - } - return this; -}; - -String.prototype.some = function (regex, cb, thisObj = null) { - let matches, ret, n0, i = 0; - regex = mixinRegex(regex, 'g'); - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return true; - } - } - return false; -}; - -String.prototype.every = function (regex, cb, thisObj = null) { - let matches, ret, n0, i = 0; - regex = mixinRegex(regex, 'g'); - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (!ret) { - return false; - } - } - return true; -}; - -String.prototype.map = function (regex, cb, thisObj = null) { - let matches, n0, i = 0; - const ret = []; - regex = mixinRegex(regex, 'g'); - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret.push(cb.apply(thisObj, matches.concat(i++, n0))); - } - return ret; -}; - -String.prototype.filter = function (regex, cb, thisObj = null) { - let matches, n0, i = 0; - const ret = []; - regex = mixinRegex(regex, 'g'); - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - matches = matches.concat(i++, n0); - if (cb.apply(thisObj, matches)) { - ret.push(n0[0]); - } - } - return ret; -}; - -String.prototype.reduce = function (regex, cb, prev, thisObj = null) { - let matches, n0, i = 0; - regex = mixinRegex(regex, 'g'); - if (!prev) { - if ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); - } - } - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); - } - return prev; -}; - -String.prototype.reduceRight = function (regex, cb, prevOrig, thisObjOrig) { - let matches, n0, i, - prev = prevOrig, thisObj = thisObjOrig; - const matchesContainer = []; - regex = mixinRegex(regex, 'g'); - thisObj = thisObj || null; - while ((matches = regex.exec(this)) !== null) { - matchesContainer.push(matches); - } - i = matchesContainer.length; - if (!i) { - if (arguments.length < 3) { - throw new TypeError( - 'reduce of empty matches array with no initial value' - ); - } - return prev; - } - if (!prev) { - matches = matchesContainer.splice(-1)[0]; - n0 = matches.splice(0, 1); - prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); - } - matchesContainer.reduceRight(function (container, mtches) { - n0 = mtches.splice(0, 1); - prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); - return container; - }, matchesContainer); - return prev; -}; - -String.prototype.find = function (regex, cb, thisObj = null) { - let matches, ret, n0, i = 0; - regex = mixinRegex(regex, 'g'); - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return n0[0]; - } - } - return false; -}; - -String.prototype.findIndex = function (regex, cb, thisObj = null) { - let matches, ret, n0, i = 0; - regex = mixinRegex(regex, 'g'); - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return i - 1; - } - } - return -1; -}; - -String.prototype.findExec = function (regex, cb, thisObj = null) { - let matches, ret, n0, i = 0; - regex = mixinRegex(regex, 'g'); - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - ret = cb.apply(thisObj, matches.concat(i++, n0)); - if (ret) { - return matches; - } - } - return false; -}; - -String.prototype.filterExec = function (regex, cb, thisObj = null) { - let matches, n0, i = 0; - const ret = []; - regex = mixinRegex(regex, 'g'); - while ((matches = regex.exec(this)) !== null) { - n0 = matches.splice(0, 1); - matches.push(i++, n0[0]); - if (cb.apply(thisObj, matches)) { - ret.push(matches); - } - } - return ret; -}; diff --git a/tools/node_modules/eslint/node_modules/reusify/.coveralls.yml b/tools/node_modules/eslint/node_modules/reusify/.coveralls.yml new file mode 100644 index 00000000000..359f68349d7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/reusify/.coveralls.yml @@ -0,0 +1 @@ +repo_token: yIxhFqtaaz5iGVYfie9mODehFYogm8S8L diff --git a/tools/node_modules/eslint/node_modules/reusify/LICENSE b/tools/node_modules/eslint/node_modules/reusify/LICENSE new file mode 100644 index 00000000000..fbf3a01d8c7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/reusify/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Matteo Collina + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/tools/node_modules/eslint/node_modules/reusify/package.json b/tools/node_modules/eslint/node_modules/reusify/package.json new file mode 100644 index 00000000000..ee66aeecb6a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/reusify/package.json @@ -0,0 +1,45 @@ +{ + "name": "reusify", + "version": "1.0.4", + "description": "Reuse objects and functions with style", + "main": "reusify.js", + "scripts": { + "lint": "standard", + "test": "tape test.js | faucet", + "istanbul": "istanbul cover tape test.js", + "coverage": "npm run istanbul; cat coverage/lcov.info | coveralls" + }, + "pre-commit": [ + "lint", + "test" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/mcollina/reusify.git" + }, + "keywords": [ + "reuse", + "object", + "performance", + "function", + "fast" + ], + "author": "Matteo Collina ", + "license": "MIT", + "bugs": { + "url": "https://github.com/mcollina/reusify/issues" + }, + "homepage": "https://github.com/mcollina/reusify#readme", + "engines": { + "node": ">=0.10.0", + "iojs": ">=1.0.0" + }, + "devDependencies": { + "coveralls": "^2.13.3", + "faucet": "0.0.1", + "istanbul": "^0.4.5", + "pre-commit": "^1.2.2", + "standard": "^10.0.3", + "tape": "^4.8.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/reusify/reusify.js b/tools/node_modules/eslint/node_modules/reusify/reusify.js new file mode 100644 index 00000000000..e6f36f3a836 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/reusify/reusify.js @@ -0,0 +1,33 @@ +'use strict' + +function reusify (Constructor) { + var head = new Constructor() + var tail = head + + function get () { + var current = head + + if (current.next) { + head = current.next + } else { + head = new Constructor() + tail = head + } + + current.next = null + + return current + } + + function release (obj) { + tail.next = obj + tail = obj + } + + return { + get: get, + release: release + } +} + +module.exports = reusify diff --git a/tools/node_modules/eslint/node_modules/run-parallel/LICENSE b/tools/node_modules/eslint/node_modules/run-parallel/LICENSE new file mode 100644 index 00000000000..c7e6852752b --- /dev/null +++ b/tools/node_modules/eslint/node_modules/run-parallel/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/run-parallel/index.js b/tools/node_modules/eslint/node_modules/run-parallel/index.js new file mode 100644 index 00000000000..6307141d651 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/run-parallel/index.js @@ -0,0 +1,51 @@ +/*! run-parallel. MIT License. Feross Aboukhadijeh */ +module.exports = runParallel + +const queueMicrotask = require('queue-microtask') + +function runParallel (tasks, cb) { + let results, pending, keys + let isSync = true + + if (Array.isArray(tasks)) { + results = [] + pending = tasks.length + } else { + keys = Object.keys(tasks) + results = {} + pending = keys.length + } + + function done (err) { + function end () { + if (cb) cb(err, results) + cb = null + } + if (isSync) queueMicrotask(end) + else end() + } + + function each (i, err, result) { + results[i] = result + if (--pending === 0 || err) { + done(err) + } + } + + if (!pending) { + // empty + done(null) + } else if (keys) { + // object + keys.forEach(function (key) { + tasks[key](function (err, result) { each(key, err, result) }) + }) + } else { + // array + tasks.forEach(function (task, i) { + task(function (err, result) { each(i, err, result) }) + }) + } + + isSync = false +} diff --git a/tools/node_modules/eslint/node_modules/run-parallel/package.json b/tools/node_modules/eslint/node_modules/run-parallel/package.json new file mode 100644 index 00000000000..1f14757881f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/run-parallel/package.json @@ -0,0 +1,58 @@ +{ + "name": "run-parallel", + "description": "Run an array of functions in parallel", + "version": "1.2.0", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/run-parallel/issues" + }, + "dependencies": { + "queue-microtask": "^1.2.2" + }, + "devDependencies": { + "airtap": "^3.0.0", + "standard": "*", + "tape": "^5.0.1" + }, + "homepage": "https://github.com/feross/run-parallel", + "keywords": [ + "parallel", + "async", + "function", + "callback", + "asynchronous", + "run", + "array", + "run parallel" + ], + "license": "MIT", + "main": "index.js", + "repository": { + "type": "git", + "url": "git://github.com/feross/run-parallel.git" + }, + "scripts": { + "test": "standard && npm run test-node && npm run test-browser", + "test-browser": "airtap -- test/*.js", + "test-browser-local": "airtap --local -- test/*.js", + "test-node": "tape test/*.js" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] +} diff --git a/tools/node_modules/eslint/node_modules/semver/bin/semver.js b/tools/node_modules/eslint/node_modules/semver/bin/semver.js index 73fe29538ad..8d1b55720e0 100755 --- a/tools/node_modules/eslint/node_modules/semver/bin/semver.js +++ b/tools/node_modules/eslint/node_modules/semver/bin/semver.js @@ -27,16 +27,19 @@ const semver = require('../') let reverse = false -const options = {} +let options = {} const main = () => { - if (!argv.length) return help() + if (!argv.length) { + return help() + } while (argv.length) { let a = argv.shift() const indexOfEqualSign = a.indexOf('=') if (indexOfEqualSign !== -1) { + const value = a.slice(indexOfEqualSign + 1) a = a.slice(0, indexOfEqualSign) - argv.unshift(a.slice(indexOfEqualSign + 1)) + argv.unshift(value) } switch (a) { case '-rv': case '-rev': case '--rev': case '--reverse': @@ -85,26 +88,31 @@ const main = () => { } } - const options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl } + options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl } versions = versions.map((v) => { return coerce ? (semver.coerce(v, options) || { version: v }).version : v }).filter((v) => { return semver.valid(v) }) - if (!versions.length) return fail() - if (inc && (versions.length !== 1 || range.length)) { return failInc() } + if (!versions.length) { + return fail() + } + if (inc && (versions.length !== 1 || range.length)) { + return failInc() + } for (let i = 0, l = range.length; i < l; i++) { versions = versions.filter((v) => { return semver.satisfies(v, range[i], options) }) - if (!versions.length) return fail() + if (!versions.length) { + return fail() + } } return success(versions) } - const failInc = () => { console.error('--inc can only be used on a single version with no range') fail() @@ -120,7 +128,9 @@ const success = () => { return semver.clean(v, options) }).map((v) => { return inc ? semver.inc(v, inc, options, identifier) : v - }).forEach((v, i, _) => { console.log(v) }) + }).forEach((v, i, _) => { + console.log(v) + }) } const help = () => console.log( diff --git a/tools/node_modules/eslint/node_modules/semver/classes/comparator.js b/tools/node_modules/eslint/node_modules/semver/classes/comparator.js index dbbef2d8fe2..62cd204d9b7 100644 --- a/tools/node_modules/eslint/node_modules/semver/classes/comparator.js +++ b/tools/node_modules/eslint/node_modules/semver/classes/comparator.js @@ -4,6 +4,7 @@ class Comparator { static get ANY () { return ANY } + constructor (comp, options) { options = parseOptions(options) @@ -80,7 +81,7 @@ class Comparator { if (!options || typeof options !== 'object') { options = { loose: !!options, - includePrerelease: false + includePrerelease: false, } } @@ -128,7 +129,7 @@ class Comparator { module.exports = Comparator const parseOptions = require('../internal/parse-options') -const {re, t} = require('../internal/re') +const { re, t } = require('../internal/re') const cmp = require('../functions/cmp') const debug = require('../internal/debug') const SemVer = require('./semver') diff --git a/tools/node_modules/eslint/node_modules/semver/classes/index.js b/tools/node_modules/eslint/node_modules/semver/classes/index.js index 198b84d6645..5e3f5c9b19c 100644 --- a/tools/node_modules/eslint/node_modules/semver/classes/index.js +++ b/tools/node_modules/eslint/node_modules/semver/classes/index.js @@ -1,5 +1,5 @@ module.exports = { SemVer: require('./semver.js'), Range: require('./range.js'), - Comparator: require('./comparator.js') + Comparator: require('./comparator.js'), } diff --git a/tools/node_modules/eslint/node_modules/semver/classes/range.js b/tools/node_modules/eslint/node_modules/semver/classes/range.js index aa04f6bff94..7dc24bc714b 100644 --- a/tools/node_modules/eslint/node_modules/semver/classes/range.js +++ b/tools/node_modules/eslint/node_modules/semver/classes/range.js @@ -29,9 +29,9 @@ class Range { // First, split based on boolean or || this.raw = range this.set = range - .split(/\s*\|\|\s*/) + .split('||') // map the range to a 2d array of comparators - .map(range => this.parseRange(range.trim())) + .map(r => this.parseRange(r.trim())) // throw out any comparator lists that are empty // this generally means that it was not a valid range, which is allowed // in loose mode, but will still throw if the WHOLE range is invalid. @@ -46,9 +46,9 @@ class Range { // keep the first one, in case they're all null sets const first = this.set[0] this.set = this.set.filter(c => !isNullSet(c[0])) - if (this.set.length === 0) + if (this.set.length === 0) { this.set = [first] - else if (this.set.length > 1) { + } else if (this.set.length > 1) { // if we have any that are *, then the range is just * for (const c of this.set) { if (c.length === 1 && isAny(c[0])) { @@ -84,8 +84,9 @@ class Range { const memoOpts = Object.keys(this.options).join(',') const memoKey = `parseRange:${memoOpts}:${range}` const cached = cache.get(memoKey) - if (cached) + if (cached) { return cached + } const loose = this.options.loose // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` @@ -94,7 +95,7 @@ class Range { debug('hyphen replace', range) // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, re[t.COMPARATORTRIM]) + debug('comparator trim', range) // `~ 1.2.3` => `~1.2.3` range = range.replace(re[t.TILDETRIM], tildeTrimReplace) @@ -108,30 +109,37 @@ class Range { // At this point, the range is completely trimmed and // ready to be split into comparators. - const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - const rangeList = range + let rangeList = range .split(' ') .map(comp => parseComparator(comp, this.options)) .join(' ') .split(/\s+/) // >=0.0.0 is equivalent to * .map(comp => replaceGTE0(comp, this.options)) + + if (loose) { // in loose mode, throw out any that are not valid comparators - .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) - .map(comp => new Comparator(comp, this.options)) + rangeList = rangeList.filter(comp => { + debug('loose invalid filter', comp, this.options) + return !!comp.match(re[t.COMPARATORLOOSE]) + }) + } + debug('range list', rangeList) // if any comparators are the null set, then replace with JUST null set // if more than one comparator, remove any * comparators // also, don't include the same comparator more than once - const l = rangeList.length const rangeMap = new Map() - for (const comp of rangeList) { - if (isNullSet(comp)) + const comparators = rangeList.map(comp => new Comparator(comp, this.options)) + for (const comp of comparators) { + if (isNullSet(comp)) { return [comp] + } rangeMap.set(comp.value, comp) } - if (rangeMap.size > 1 && rangeMap.has('')) + if (rangeMap.size > 1 && rangeMap.has('')) { rangeMap.delete('') + } const result = [...rangeMap.values()] cache.set(memoKey, result) @@ -196,7 +204,7 @@ const { t, comparatorTrimReplace, tildeTrimReplace, - caretTrimReplace + caretTrimReplace, } = require('../internal/re') const isNullSet = c => c.value === '<0.0.0-0' @@ -245,8 +253,8 @@ const isX = id => !id || id.toLowerCase() === 'x' || id === '*' // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 const replaceTildes = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceTilde(comp, options) + comp.trim().split(/\s+/).map((c) => { + return replaceTilde(c, options) }).join(' ') const replaceTilde = (comp, options) => { @@ -284,8 +292,8 @@ const replaceTilde = (comp, options) => { // ^1.2.3 --> >=1.2.3 <2.0.0-0 // ^1.2.0 --> >=1.2.0 <2.0.0-0 const replaceCarets = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceCaret(comp, options) + comp.trim().split(/\s+/).map((c) => { + return replaceCaret(c, options) }).join(' ') const replaceCaret = (comp, options) => { @@ -343,8 +351,8 @@ const replaceCaret = (comp, options) => { const replaceXRanges = (comp, options) => { debug('replaceXRanges', comp, options) - return comp.split(/\s+/).map((comp) => { - return replaceXRange(comp, options) + return comp.split(/\s+/).map((c) => { + return replaceXRange(c, options) }).join(' ') } @@ -405,8 +413,9 @@ const replaceXRange = (comp, options) => { } } - if (gtlt === '<') + if (gtlt === '<') { pr = '-0' + } ret = `${gtlt + M}.${m}.${p}${pr}` } else if (xm) { diff --git a/tools/node_modules/eslint/node_modules/semver/classes/semver.js b/tools/node_modules/eslint/node_modules/semver/classes/semver.js index ed81a7ec6cb..af629551947 100644 --- a/tools/node_modules/eslint/node_modules/semver/classes/semver.js +++ b/tools/node_modules/eslint/node_modules/semver/classes/semver.js @@ -265,7 +265,7 @@ class SemVer { if (identifier) { // 1.2.0-beta.1 bumps to 1.2.0-beta.2, // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { + if (compareIdentifiers(this.prerelease[0], identifier) === 0) { if (isNaN(this.prerelease[1])) { this.prerelease = [identifier, 0] } diff --git a/tools/node_modules/eslint/node_modules/semver/functions/cmp.js b/tools/node_modules/eslint/node_modules/semver/functions/cmp.js index 3b89db77910..40119094747 100644 --- a/tools/node_modules/eslint/node_modules/semver/functions/cmp.js +++ b/tools/node_modules/eslint/node_modules/semver/functions/cmp.js @@ -8,17 +8,21 @@ const lte = require('./lte') const cmp = (a, op, b, loose) => { switch (op) { case '===': - if (typeof a === 'object') + if (typeof a === 'object') { a = a.version - if (typeof b === 'object') + } + if (typeof b === 'object') { b = b.version + } return a === b case '!==': - if (typeof a === 'object') + if (typeof a === 'object') { a = a.version - if (typeof b === 'object') + } + if (typeof b === 'object') { b = b.version + } return a !== b case '': diff --git a/tools/node_modules/eslint/node_modules/semver/functions/coerce.js b/tools/node_modules/eslint/node_modules/semver/functions/coerce.js index 106ca71c9af..2e01452fdda 100644 --- a/tools/node_modules/eslint/node_modules/semver/functions/coerce.js +++ b/tools/node_modules/eslint/node_modules/semver/functions/coerce.js @@ -1,6 +1,6 @@ const SemVer = require('../classes/semver') const parse = require('./parse') -const {re, t} = require('../internal/re') +const { re, t } = require('../internal/re') const coerce = (version, options) => { if (version instanceof SemVer) { @@ -43,8 +43,9 @@ const coerce = (version, options) => { re[t.COERCERTL].lastIndex = -1 } - if (match === null) + if (match === null) { return null + } return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) } diff --git a/tools/node_modules/eslint/node_modules/semver/functions/inc.js b/tools/node_modules/eslint/node_modules/semver/functions/inc.js index aa4d83ab4c2..62d1da2c409 100644 --- a/tools/node_modules/eslint/node_modules/semver/functions/inc.js +++ b/tools/node_modules/eslint/node_modules/semver/functions/inc.js @@ -7,7 +7,10 @@ const inc = (version, release, options, identifier) => { } try { - return new SemVer(version, options).inc(release, identifier).version + return new SemVer( + version instanceof SemVer ? version.version : version, + options + ).inc(release, identifier).version } catch (er) { return null } diff --git a/tools/node_modules/eslint/node_modules/semver/functions/parse.js b/tools/node_modules/eslint/node_modules/semver/functions/parse.js index 11f20f03745..a66663aa591 100644 --- a/tools/node_modules/eslint/node_modules/semver/functions/parse.js +++ b/tools/node_modules/eslint/node_modules/semver/functions/parse.js @@ -1,4 +1,4 @@ -const {MAX_LENGTH} = require('../internal/constants') +const { MAX_LENGTH } = require('../internal/constants') const { re, t } = require('../internal/re') const SemVer = require('../classes/semver') diff --git a/tools/node_modules/eslint/node_modules/semver/internal/constants.js b/tools/node_modules/eslint/node_modules/semver/internal/constants.js index 49df215ad55..4f0de59b569 100644 --- a/tools/node_modules/eslint/node_modules/semver/internal/constants.js +++ b/tools/node_modules/eslint/node_modules/semver/internal/constants.js @@ -4,7 +4,7 @@ const SEMVER_SPEC_VERSION = '2.0.0' const MAX_LENGTH = 256 const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991 +/* istanbul ignore next */ 9007199254740991 // Max safe segment length for coercion. const MAX_SAFE_COMPONENT_LENGTH = 16 @@ -13,5 +13,5 @@ module.exports = { SEMVER_SPEC_VERSION, MAX_LENGTH, MAX_SAFE_INTEGER, - MAX_SAFE_COMPONENT_LENGTH + MAX_SAFE_COMPONENT_LENGTH, } diff --git a/tools/node_modules/eslint/node_modules/semver/internal/identifiers.js b/tools/node_modules/eslint/node_modules/semver/internal/identifiers.js index ed130942175..e612d0a3d83 100644 --- a/tools/node_modules/eslint/node_modules/semver/internal/identifiers.js +++ b/tools/node_modules/eslint/node_modules/semver/internal/identifiers.js @@ -19,5 +19,5 @@ const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) module.exports = { compareIdentifiers, - rcompareIdentifiers + rcompareIdentifiers, } diff --git a/tools/node_modules/eslint/node_modules/semver/internal/parse-options.js b/tools/node_modules/eslint/node_modules/semver/internal/parse-options.js index 42d2ebd6fa3..bbd9ec77a3f 100644 --- a/tools/node_modules/eslint/node_modules/semver/internal/parse-options.js +++ b/tools/node_modules/eslint/node_modules/semver/internal/parse-options.js @@ -4,8 +4,8 @@ const opts = ['includePrerelease', 'loose', 'rtl'] const parseOptions = options => !options ? {} : typeof options !== 'object' ? { loose: true } - : opts.filter(k => options[k]).reduce((options, k) => { - options[k] = true - return options + : opts.filter(k => options[k]).reduce((o, k) => { + o[k] = true + return o }, {}) module.exports = parseOptions diff --git a/tools/node_modules/eslint/node_modules/semver/internal/re.js b/tools/node_modules/eslint/node_modules/semver/internal/re.js index 54d4176deaf..ed88398a9db 100644 --- a/tools/node_modules/eslint/node_modules/semver/internal/re.js +++ b/tools/node_modules/eslint/node_modules/semver/internal/re.js @@ -10,7 +10,7 @@ let R = 0 const createToken = (name, value, isGlobal) => { const index = R++ - debug(index, value) + debug(name, index, value) t[name] = index src[index] = value re[index] = new RegExp(value, isGlobal ? 'g' : undefined) @@ -178,5 +178,5 @@ createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + // Star ranges basically just allow anything at all. createToken('STAR', '(<|>)?=?\\s*\\*') // >=0.0.0 is like a star -createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$') -createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$') +createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$') +createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$') diff --git a/tools/node_modules/eslint/node_modules/semver/node_modules/lru-cache/LICENSE b/tools/node_modules/eslint/node_modules/semver/node_modules/lru-cache/LICENSE new file mode 100644 index 00000000000..19129e315fe --- /dev/null +++ b/tools/node_modules/eslint/node_modules/semver/node_modules/lru-cache/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/lru-cache/index.js b/tools/node_modules/eslint/node_modules/semver/node_modules/lru-cache/index.js similarity index 100% rename from tools/node_modules/eslint/node_modules/lru-cache/index.js rename to tools/node_modules/eslint/node_modules/semver/node_modules/lru-cache/index.js diff --git a/tools/node_modules/eslint/node_modules/lru-cache/package.json b/tools/node_modules/eslint/node_modules/semver/node_modules/lru-cache/package.json similarity index 100% rename from tools/node_modules/eslint/node_modules/lru-cache/package.json rename to tools/node_modules/eslint/node_modules/semver/node_modules/lru-cache/package.json diff --git a/tools/node_modules/eslint/node_modules/semver/package.json b/tools/node_modules/eslint/node_modules/semver/package.json index 4e1154195a5..7898f5902cb 100644 --- a/tools/node_modules/eslint/node_modules/semver/package.json +++ b/tools/node_modules/eslint/node_modules/semver/package.json @@ -1,6 +1,6 @@ { "name": "semver", - "version": "7.3.5", + "version": "7.3.7", "description": "The semantic version parser used by npm.", "main": "index.js", "scripts": { @@ -8,25 +8,36 @@ "snap": "tap", "preversion": "npm test", "postversion": "npm publish", - "postpublish": "git push origin --follow-tags" + "postpublish": "git push origin --follow-tags", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "lintfix": "npm run lint -- --fix", + "prepublishOnly": "git push origin --follow-tags", + "posttest": "npm run lint", + "template-oss-apply": "template-oss-apply --force" }, "devDependencies": { - "tap": "^14.10.7" + "@npmcli/eslint-config": "^3.0.1", + "@npmcli/template-oss": "3.3.2", + "tap": "^16.0.0" }, "license": "ISC", - "repository": "https://github.com/npm/node-semver", + "repository": { + "type": "git", + "url": "https://github.com/npm/node-semver.git" + }, "bin": { "semver": "bin/semver.js" }, "files": [ - "bin/**/*.js", - "range.bnf", - "classes/**/*.js", - "functions/**/*.js", - "internal/**/*.js", - "ranges/**/*.js", + "bin/", + "classes/", + "functions/", + "internal/", + "ranges/", "index.js", - "preload.js" + "preload.js", + "range.bnf" ], "tap": { "check-coverage": true, @@ -37,5 +48,28 @@ }, "dependencies": { "lru-cache": "^6.0.0" + }, + "author": "GitHub Inc.", + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "3.3.2", + "engines": ">=10", + "ciVersions": [ + "10.0.0", + "10.x", + "12.x", + "14.x", + "16.x" + ], + "distPaths": [ + "bin/", + "classes/", + "functions/", + "internal/", + "ranges/", + "index.js", + "preload.js", + "range.bnf" + ] } } diff --git a/tools/node_modules/eslint/node_modules/semver/ranges/min-version.js b/tools/node_modules/eslint/node_modules/semver/ranges/min-version.js index 2fac412914f..350e1f78368 100644 --- a/tools/node_modules/eslint/node_modules/semver/ranges/min-version.js +++ b/tools/node_modules/eslint/node_modules/semver/ranges/min-version.js @@ -47,8 +47,9 @@ const minVersion = (range, loose) => { throw new Error(`Unexpected operation: ${comparator.operator}`) } }) - if (setMin && (!minver || gt(minver, setMin))) + if (setMin && (!minver || gt(minver, setMin))) { minver = setMin + } } if (minver && range.test(minver)) { diff --git a/tools/node_modules/eslint/node_modules/semver/ranges/outside.js b/tools/node_modules/eslint/node_modules/semver/ranges/outside.js index 2a4b0a13f9e..ae99b10a5b9 100644 --- a/tools/node_modules/eslint/node_modules/semver/ranges/outside.js +++ b/tools/node_modules/eslint/node_modules/semver/ranges/outside.js @@ -1,6 +1,6 @@ const SemVer = require('../classes/semver') const Comparator = require('../classes/comparator') -const {ANY} = Comparator +const { ANY } = Comparator const Range = require('../classes/range') const satisfies = require('../functions/satisfies') const gt = require('../functions/gt') diff --git a/tools/node_modules/eslint/node_modules/semver/ranges/simplify.js b/tools/node_modules/eslint/node_modules/semver/ranges/simplify.js index b792f972964..618d5b62735 100644 --- a/tools/node_modules/eslint/node_modules/semver/ranges/simplify.js +++ b/tools/node_modules/eslint/node_modules/semver/ranges/simplify.js @@ -5,38 +5,41 @@ const satisfies = require('../functions/satisfies.js') const compare = require('../functions/compare.js') module.exports = (versions, range, options) => { const set = [] - let min = null + let first = null let prev = null const v = versions.sort((a, b) => compare(a, b, options)) for (const version of v) { const included = satisfies(version, range, options) if (included) { prev = version - if (!min) - min = version + if (!first) { + first = version + } } else { if (prev) { - set.push([min, prev]) + set.push([first, prev]) } prev = null - min = null + first = null } } - if (min) - set.push([min, null]) + if (first) { + set.push([first, null]) + } const ranges = [] for (const [min, max] of set) { - if (min === max) + if (min === max) { ranges.push(min) - else if (!max && min === v[0]) + } else if (!max && min === v[0]) { ranges.push('*') - else if (!max) + } else if (!max) { ranges.push(`>=${min}`) - else if (min === v[0]) + } else if (min === v[0]) { ranges.push(`<=${max}`) - else + } else { ranges.push(`${min} - ${max}`) + } } const simplified = ranges.join(' || ') const original = typeof range.raw === 'string' ? range.raw : String(range) diff --git a/tools/node_modules/eslint/node_modules/semver/ranges/subset.js b/tools/node_modules/eslint/node_modules/semver/ranges/subset.js index 532fd1364ce..e0dea43c2b6 100644 --- a/tools/node_modules/eslint/node_modules/semver/ranges/subset.js +++ b/tools/node_modules/eslint/node_modules/semver/ranges/subset.js @@ -41,8 +41,9 @@ const compare = require('../functions/compare.js') // - Else return true const subset = (sub, dom, options = {}) => { - if (sub === dom) + if (sub === dom) { return true + } sub = new Range(sub, options) dom = new Range(dom, options) @@ -52,73 +53,84 @@ const subset = (sub, dom, options = {}) => { for (const simpleDom of dom.set) { const isSub = simpleSubset(simpleSub, simpleDom, options) sawNonNull = sawNonNull || isSub !== null - if (isSub) + if (isSub) { continue OUTER + } } // the null set is a subset of everything, but null simple ranges in // a complex range should be ignored. so if we saw a non-null range, // then we know this isn't a subset, but if EVERY simple range was null, // then it is a subset. - if (sawNonNull) + if (sawNonNull) { return false + } } return true } const simpleSubset = (sub, dom, options) => { - if (sub === dom) + if (sub === dom) { return true + } if (sub.length === 1 && sub[0].semver === ANY) { - if (dom.length === 1 && dom[0].semver === ANY) + if (dom.length === 1 && dom[0].semver === ANY) { return true - else if (options.includePrerelease) - sub = [ new Comparator('>=0.0.0-0') ] - else - sub = [ new Comparator('>=0.0.0') ] + } else if (options.includePrerelease) { + sub = [new Comparator('>=0.0.0-0')] + } else { + sub = [new Comparator('>=0.0.0')] + } } if (dom.length === 1 && dom[0].semver === ANY) { - if (options.includePrerelease) + if (options.includePrerelease) { return true - else - dom = [ new Comparator('>=0.0.0') ] + } else { + dom = [new Comparator('>=0.0.0')] + } } const eqSet = new Set() let gt, lt for (const c of sub) { - if (c.operator === '>' || c.operator === '>=') + if (c.operator === '>' || c.operator === '>=') { gt = higherGT(gt, c, options) - else if (c.operator === '<' || c.operator === '<=') + } else if (c.operator === '<' || c.operator === '<=') { lt = lowerLT(lt, c, options) - else + } else { eqSet.add(c.semver) + } } - if (eqSet.size > 1) + if (eqSet.size > 1) { return null + } let gtltComp if (gt && lt) { gtltComp = compare(gt.semver, lt.semver, options) - if (gtltComp > 0) + if (gtltComp > 0) { return null - else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) + } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) { return null + } } // will iterate one or zero times for (const eq of eqSet) { - if (gt && !satisfies(eq, String(gt), options)) + if (gt && !satisfies(eq, String(gt), options)) { return null + } - if (lt && !satisfies(eq, String(lt), options)) + if (lt && !satisfies(eq, String(lt), options)) { return null + } for (const c of dom) { - if (!satisfies(eq, String(c), options)) + if (!satisfies(eq, String(c), options)) { return false + } } return true @@ -154,10 +166,12 @@ const simpleSubset = (sub, dom, options) => { } if (c.operator === '>' || c.operator === '>=') { higher = higherGT(gt, c, options) - if (higher === c && higher !== gt) + if (higher === c && higher !== gt) { return false - } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) + } + } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) { return false + } } if (lt) { if (needDomLTPre) { @@ -170,37 +184,44 @@ const simpleSubset = (sub, dom, options) => { } if (c.operator === '<' || c.operator === '<=') { lower = lowerLT(lt, c, options) - if (lower === c && lower !== lt) + if (lower === c && lower !== lt) { return false - } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) + } + } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) { return false + } } - if (!c.operator && (lt || gt) && gtltComp !== 0) + if (!c.operator && (lt || gt) && gtltComp !== 0) { return false + } } // if there was a < or >, and nothing in the dom, then must be false // UNLESS it was limited by another range in the other direction. // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 - if (gt && hasDomLT && !lt && gtltComp !== 0) + if (gt && hasDomLT && !lt && gtltComp !== 0) { return false + } - if (lt && hasDomGT && !gt && gtltComp !== 0) + if (lt && hasDomGT && !gt && gtltComp !== 0) { return false + } // we needed a prerelease range in a specific tuple, but didn't get one // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0, // because it includes prereleases in the 1.2.3 tuple - if (needDomGTPre || needDomLTPre) + if (needDomGTPre || needDomLTPre) { return false + } return true } // >=1.2.3 is lower than >1.2.3 const higherGT = (a, b, options) => { - if (!a) + if (!a) { return b + } const comp = compare(a.semver, b.semver, options) return comp > 0 ? a : comp < 0 ? b @@ -210,8 +231,9 @@ const higherGT = (a, b, options) => { // <=1.2.3 is higher than <1.2.3 const lowerLT = (a, b, options) => { - if (!a) + if (!a) { return b + } const comp = compare(a.semver, b.semver, options) return comp < 0 ? a : comp > 0 ? b diff --git a/tools/node_modules/eslint/node_modules/slash/index.js b/tools/node_modules/eslint/node_modules/slash/index.js new file mode 100644 index 00000000000..103fbea97f9 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/slash/index.js @@ -0,0 +1,11 @@ +'use strict'; +module.exports = path => { + const isExtendedLengthPath = /^\\\\\?\\/.test(path); + const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex + + if (isExtendedLengthPath || hasNonAscii) { + return path; + } + + return path.replace(/\\/g, '/'); +}; diff --git a/tools/node_modules/eslint/node_modules/slash/license b/tools/node_modules/eslint/node_modules/slash/license new file mode 100644 index 00000000000..e7af2f77107 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/slash/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/slash/package.json b/tools/node_modules/eslint/node_modules/slash/package.json new file mode 100644 index 00000000000..c88fcc712e5 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/slash/package.json @@ -0,0 +1,35 @@ +{ + "name": "slash", + "version": "3.0.0", + "description": "Convert Windows backslash paths to slash paths", + "license": "MIT", + "repository": "sindresorhus/slash", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "path", + "seperator", + "slash", + "backslash", + "windows", + "convert" + ], + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/slash/readme.md b/tools/node_modules/eslint/node_modules/slash/readme.md new file mode 100644 index 00000000000..f0ef4acbde7 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/slash/readme.md @@ -0,0 +1,44 @@ +# slash [![Build Status](https://travis-ci.org/sindresorhus/slash.svg?branch=master)](https://travis-ci.org/sindresorhus/slash) + +> Convert Windows backslash paths to slash paths: `foo\\bar` ➔ `foo/bar` + +[Forward-slash paths can be used in Windows](http://superuser.com/a/176395/6877) as long as they're not extended-length paths and don't contain any non-ascii characters. + +This was created since the `path` methods in Node.js outputs `\\` paths on Windows. + + +## Install + +``` +$ npm install slash +``` + + +## Usage + +```js +const path = require('path'); +const slash = require('slash'); + +const string = path.join('foo', 'bar'); +// Unix => foo/bar +// Windows => foo\\bar + +slash(string); +// Unix => foo/bar +// Windows => foo/bar +``` + + +## API + +### slash(path) + +Type: `string` + +Accepts a Windows backslash path and returns a path with forward slashes. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/tools/node_modules/eslint/node_modules/source-map/LICENSE b/tools/node_modules/eslint/node_modules/source-map/LICENSE deleted file mode 100644 index ed1b7cf27e9..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ - -Copyright (c) 2009-2011, Mozilla Foundation and contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the names of the Mozilla Foundation nor the names of project - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tools/node_modules/eslint/node_modules/source-map/dist/source-map.debug.js b/tools/node_modules/eslint/node_modules/source-map/dist/source-map.debug.js deleted file mode 100644 index b5ab6382abb..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/dist/source-map.debug.js +++ /dev/null @@ -1,3091 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["sourceMap"] = factory(); - else - root["sourceMap"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; -/******/ -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - * Copyright 2009-2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE.txt or: - * http://opensource.org/licenses/BSD-3-Clause - */ - exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; - exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; - exports.SourceNode = __webpack_require__(10).SourceNode; - - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var base64VLQ = __webpack_require__(2); - var util = __webpack_require__(4); - var ArraySet = __webpack_require__(5).ArraySet; - var MappingList = __webpack_require__(6).MappingList; - - /** - * An instance of the SourceMapGenerator represents a source map which is - * being built incrementally. You may pass an object with the following - * properties: - * - * - file: The filename of the generated source. - * - sourceRoot: A root for all relative URLs in this source map. - */ - function SourceMapGenerator(aArgs) { - if (!aArgs) { - aArgs = {}; - } - this._file = util.getArg(aArgs, 'file', null); - this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); - this._skipValidation = util.getArg(aArgs, 'skipValidation', false); - this._sources = new ArraySet(); - this._names = new ArraySet(); - this._mappings = new MappingList(); - this._sourcesContents = null; - } - - SourceMapGenerator.prototype._version = 3; - - /** - * Creates a new SourceMapGenerator based on a SourceMapConsumer - * - * @param aSourceMapConsumer The SourceMap. - */ - SourceMapGenerator.fromSourceMap = - function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { - var sourceRoot = aSourceMapConsumer.sourceRoot; - var generator = new SourceMapGenerator({ - file: aSourceMapConsumer.file, - sourceRoot: sourceRoot - }); - aSourceMapConsumer.eachMapping(function (mapping) { - var newMapping = { - generated: { - line: mapping.generatedLine, - column: mapping.generatedColumn - } - }; - - if (mapping.source != null) { - newMapping.source = mapping.source; - if (sourceRoot != null) { - newMapping.source = util.relative(sourceRoot, newMapping.source); - } - - newMapping.original = { - line: mapping.originalLine, - column: mapping.originalColumn - }; - - if (mapping.name != null) { - newMapping.name = mapping.name; - } - } - - generator.addMapping(newMapping); - }); - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - generator.setSourceContent(sourceFile, content); - } - }); - return generator; - }; - - /** - * Add a single mapping from original source line and column to the generated - * source's line and column for this source map being created. The mapping - * object should have the following properties: - * - * - generated: An object with the generated line and column positions. - * - original: An object with the original line and column positions. - * - source: The original source file (relative to the sourceRoot). - * - name: An optional original token name for this mapping. - */ - SourceMapGenerator.prototype.addMapping = - function SourceMapGenerator_addMapping(aArgs) { - var generated = util.getArg(aArgs, 'generated'); - var original = util.getArg(aArgs, 'original', null); - var source = util.getArg(aArgs, 'source', null); - var name = util.getArg(aArgs, 'name', null); - - if (!this._skipValidation) { - this._validateMapping(generated, original, source, name); - } - - if (source != null) { - source = String(source); - if (!this._sources.has(source)) { - this._sources.add(source); - } - } - - if (name != null) { - name = String(name); - if (!this._names.has(name)) { - this._names.add(name); - } - } - - this._mappings.add({ - generatedLine: generated.line, - generatedColumn: generated.column, - originalLine: original != null && original.line, - originalColumn: original != null && original.column, - source: source, - name: name - }); - }; - - /** - * Set the source content for a source file. - */ - SourceMapGenerator.prototype.setSourceContent = - function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { - var source = aSourceFile; - if (this._sourceRoot != null) { - source = util.relative(this._sourceRoot, source); - } - - if (aSourceContent != null) { - // Add the source content to the _sourcesContents map. - // Create a new _sourcesContents map if the property is null. - if (!this._sourcesContents) { - this._sourcesContents = Object.create(null); - } - this._sourcesContents[util.toSetString(source)] = aSourceContent; - } else if (this._sourcesContents) { - // Remove the source file from the _sourcesContents map. - // If the _sourcesContents map is empty, set the property to null. - delete this._sourcesContents[util.toSetString(source)]; - if (Object.keys(this._sourcesContents).length === 0) { - this._sourcesContents = null; - } - } - }; - - /** - * Applies the mappings of a sub-source-map for a specific source file to the - * source map being generated. Each mapping to the supplied source file is - * rewritten using the supplied source map. Note: The resolution for the - * resulting mappings is the minimium of this map and the supplied map. - * - * @param aSourceMapConsumer The source map to be applied. - * @param aSourceFile Optional. The filename of the source file. - * If omitted, SourceMapConsumer's file property will be used. - * @param aSourceMapPath Optional. The dirname of the path to the source map - * to be applied. If relative, it is relative to the SourceMapConsumer. - * This parameter is needed when the two source maps aren't in the same - * directory, and the source map to be applied contains relative source - * paths. If so, those relative source paths need to be rewritten - * relative to the SourceMapGenerator. - */ - SourceMapGenerator.prototype.applySourceMap = - function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { - var sourceFile = aSourceFile; - // If aSourceFile is omitted, we will use the file property of the SourceMap - if (aSourceFile == null) { - if (aSourceMapConsumer.file == null) { - throw new Error( - 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + - 'or the source map\'s "file" property. Both were omitted.' - ); - } - sourceFile = aSourceMapConsumer.file; - } - var sourceRoot = this._sourceRoot; - // Make "sourceFile" relative if an absolute Url is passed. - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - // Applying the SourceMap can add and remove items from the sources and - // the names array. - var newSources = new ArraySet(); - var newNames = new ArraySet(); - - // Find mappings for the "sourceFile" - this._mappings.unsortedForEach(function (mapping) { - if (mapping.source === sourceFile && mapping.originalLine != null) { - // Check if it can be mapped by the source map, then update the mapping. - var original = aSourceMapConsumer.originalPositionFor({ - line: mapping.originalLine, - column: mapping.originalColumn - }); - if (original.source != null) { - // Copy mapping - mapping.source = original.source; - if (aSourceMapPath != null) { - mapping.source = util.join(aSourceMapPath, mapping.source) - } - if (sourceRoot != null) { - mapping.source = util.relative(sourceRoot, mapping.source); - } - mapping.originalLine = original.line; - mapping.originalColumn = original.column; - if (original.name != null) { - mapping.name = original.name; - } - } - } - - var source = mapping.source; - if (source != null && !newSources.has(source)) { - newSources.add(source); - } - - var name = mapping.name; - if (name != null && !newNames.has(name)) { - newNames.add(name); - } - - }, this); - this._sources = newSources; - this._names = newNames; - - // Copy sourcesContents of applied map. - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aSourceMapPath != null) { - sourceFile = util.join(aSourceMapPath, sourceFile); - } - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - this.setSourceContent(sourceFile, content); - } - }, this); - }; - - /** - * A mapping can have one of the three levels of data: - * - * 1. Just the generated position. - * 2. The Generated position, original position, and original source. - * 3. Generated and original position, original source, as well as a name - * token. - * - * To maintain consistency, we validate that any new mapping being added falls - * in to one of these categories. - */ - SourceMapGenerator.prototype._validateMapping = - function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, - aName) { - // When aOriginal is truthy but has empty values for .line and .column, - // it is most likely a programmer error. In this case we throw a very - // specific error message to try to guide them the right way. - // For example: https://github.com/Polymer/polymer-bundler/pull/519 - if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { - throw new Error( - 'original.line and original.column are not numbers -- you probably meant to omit ' + - 'the original mapping entirely and only map the generated position. If so, pass ' + - 'null for the original mapping instead of an object with empty or null values.' - ); - } - - if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aGenerated.line > 0 && aGenerated.column >= 0 - && !aOriginal && !aSource && !aName) { - // Case 1. - return; - } - else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aOriginal && 'line' in aOriginal && 'column' in aOriginal - && aGenerated.line > 0 && aGenerated.column >= 0 - && aOriginal.line > 0 && aOriginal.column >= 0 - && aSource) { - // Cases 2 and 3. - return; - } - else { - throw new Error('Invalid mapping: ' + JSON.stringify({ - generated: aGenerated, - source: aSource, - original: aOriginal, - name: aName - })); - } - }; - - /** - * Serialize the accumulated mappings in to the stream of base 64 VLQs - * specified by the source map format. - */ - SourceMapGenerator.prototype._serializeMappings = - function SourceMapGenerator_serializeMappings() { - var previousGeneratedColumn = 0; - var previousGeneratedLine = 1; - var previousOriginalColumn = 0; - var previousOriginalLine = 0; - var previousName = 0; - var previousSource = 0; - var result = ''; - var next; - var mapping; - var nameIdx; - var sourceIdx; - - var mappings = this._mappings.toArray(); - for (var i = 0, len = mappings.length; i < len; i++) { - mapping = mappings[i]; - next = '' - - if (mapping.generatedLine !== previousGeneratedLine) { - previousGeneratedColumn = 0; - while (mapping.generatedLine !== previousGeneratedLine) { - next += ';'; - previousGeneratedLine++; - } - } - else { - if (i > 0) { - if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { - continue; - } - next += ','; - } - } - - next += base64VLQ.encode(mapping.generatedColumn - - previousGeneratedColumn); - previousGeneratedColumn = mapping.generatedColumn; - - if (mapping.source != null) { - sourceIdx = this._sources.indexOf(mapping.source); - next += base64VLQ.encode(sourceIdx - previousSource); - previousSource = sourceIdx; - - // lines are stored 0-based in SourceMap spec version 3 - next += base64VLQ.encode(mapping.originalLine - 1 - - previousOriginalLine); - previousOriginalLine = mapping.originalLine - 1; - - next += base64VLQ.encode(mapping.originalColumn - - previousOriginalColumn); - previousOriginalColumn = mapping.originalColumn; - - if (mapping.name != null) { - nameIdx = this._names.indexOf(mapping.name); - next += base64VLQ.encode(nameIdx - previousName); - previousName = nameIdx; - } - } - - result += next; - } - - return result; - }; - - SourceMapGenerator.prototype._generateSourcesContent = - function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { - return aSources.map(function (source) { - if (!this._sourcesContents) { - return null; - } - if (aSourceRoot != null) { - source = util.relative(aSourceRoot, source); - } - var key = util.toSetString(source); - return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) - ? this._sourcesContents[key] - : null; - }, this); - }; - - /** - * Externalize the source map. - */ - SourceMapGenerator.prototype.toJSON = - function SourceMapGenerator_toJSON() { - var map = { - version: this._version, - sources: this._sources.toArray(), - names: this._names.toArray(), - mappings: this._serializeMappings() - }; - if (this._file != null) { - map.file = this._file; - } - if (this._sourceRoot != null) { - map.sourceRoot = this._sourceRoot; - } - if (this._sourcesContents) { - map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); - } - - return map; - }; - - /** - * Render the source map being generated to a string. - */ - SourceMapGenerator.prototype.toString = - function SourceMapGenerator_toString() { - return JSON.stringify(this.toJSON()); - }; - - exports.SourceMapGenerator = SourceMapGenerator; - - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - * - * Based on the Base 64 VLQ implementation in Closure Compiler: - * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java - * - * Copyright 2011 The Closure Compiler Authors. All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - var base64 = __webpack_require__(3); - - // A single base 64 digit can contain 6 bits of data. For the base 64 variable - // length quantities we use in the source map spec, the first bit is the sign, - // the next four bits are the actual value, and the 6th bit is the - // continuation bit. The continuation bit tells us whether there are more - // digits in this value following this digit. - // - // Continuation - // | Sign - // | | - // V V - // 101011 - - var VLQ_BASE_SHIFT = 5; - - // binary: 100000 - var VLQ_BASE = 1 << VLQ_BASE_SHIFT; - - // binary: 011111 - var VLQ_BASE_MASK = VLQ_BASE - 1; - - // binary: 100000 - var VLQ_CONTINUATION_BIT = VLQ_BASE; - - /** - * Converts from a two-complement value to a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) - * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) - */ - function toVLQSigned(aValue) { - return aValue < 0 - ? ((-aValue) << 1) + 1 - : (aValue << 1) + 0; - } - - /** - * Converts to a two-complement value from a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 - * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 - */ - function fromVLQSigned(aValue) { - var isNegative = (aValue & 1) === 1; - var shifted = aValue >> 1; - return isNegative - ? -shifted - : shifted; - } - - /** - * Returns the base 64 VLQ encoded value. - */ - exports.encode = function base64VLQ_encode(aValue) { - var encoded = ""; - var digit; - - var vlq = toVLQSigned(aValue); - - do { - digit = vlq & VLQ_BASE_MASK; - vlq >>>= VLQ_BASE_SHIFT; - if (vlq > 0) { - // There are still more digits in this value, so we must make sure the - // continuation bit is marked. - digit |= VLQ_CONTINUATION_BIT; - } - encoded += base64.encode(digit); - } while (vlq > 0); - - return encoded; - }; - - /** - * Decodes the next base 64 VLQ value from the given string and returns the - * value and the rest of the string via the out parameter. - */ - exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { - var strLen = aStr.length; - var result = 0; - var shift = 0; - var continuation, digit; - - do { - if (aIndex >= strLen) { - throw new Error("Expected more digits in base 64 VLQ value."); - } - - digit = base64.decode(aStr.charCodeAt(aIndex++)); - if (digit === -1) { - throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); - } - - continuation = !!(digit & VLQ_CONTINUATION_BIT); - digit &= VLQ_BASE_MASK; - result = result + (digit << shift); - shift += VLQ_BASE_SHIFT; - } while (continuation); - - aOutParam.value = fromVLQSigned(result); - aOutParam.rest = aIndex; - }; - - -/***/ }), -/* 3 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); - - /** - * Encode an integer in the range of 0 to 63 to a single base 64 digit. - */ - exports.encode = function (number) { - if (0 <= number && number < intToCharMap.length) { - return intToCharMap[number]; - } - throw new TypeError("Must be between 0 and 63: " + number); - }; - - /** - * Decode a single base 64 character code digit to an integer. Returns -1 on - * failure. - */ - exports.decode = function (charCode) { - var bigA = 65; // 'A' - var bigZ = 90; // 'Z' - - var littleA = 97; // 'a' - var littleZ = 122; // 'z' - - var zero = 48; // '0' - var nine = 57; // '9' - - var plus = 43; // '+' - var slash = 47; // '/' - - var littleOffset = 26; - var numberOffset = 52; - - // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ - if (bigA <= charCode && charCode <= bigZ) { - return (charCode - bigA); - } - - // 26 - 51: abcdefghijklmnopqrstuvwxyz - if (littleA <= charCode && charCode <= littleZ) { - return (charCode - littleA + littleOffset); - } - - // 52 - 61: 0123456789 - if (zero <= charCode && charCode <= nine) { - return (charCode - zero + numberOffset); - } - - // 62: + - if (charCode == plus) { - return 62; - } - - // 63: / - if (charCode == slash) { - return 63; - } - - // Invalid base64 digit. - return -1; - }; - - -/***/ }), -/* 4 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - /** - * This is a helper function for getting values from parameter/options - * objects. - * - * @param args The object we are extracting values from - * @param name The name of the property we are getting. - * @param defaultValue An optional value to return if the property is missing - * from the object. If this is not specified and the property is missing, an - * error will be thrown. - */ - function getArg(aArgs, aName, aDefaultValue) { - if (aName in aArgs) { - return aArgs[aName]; - } else if (arguments.length === 3) { - return aDefaultValue; - } else { - throw new Error('"' + aName + '" is a required argument.'); - } - } - exports.getArg = getArg; - - var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; - var dataUrlRegexp = /^data:.+\,.+$/; - - function urlParse(aUrl) { - var match = aUrl.match(urlRegexp); - if (!match) { - return null; - } - return { - scheme: match[1], - auth: match[2], - host: match[3], - port: match[4], - path: match[5] - }; - } - exports.urlParse = urlParse; - - function urlGenerate(aParsedUrl) { - var url = ''; - if (aParsedUrl.scheme) { - url += aParsedUrl.scheme + ':'; - } - url += '//'; - if (aParsedUrl.auth) { - url += aParsedUrl.auth + '@'; - } - if (aParsedUrl.host) { - url += aParsedUrl.host; - } - if (aParsedUrl.port) { - url += ":" + aParsedUrl.port - } - if (aParsedUrl.path) { - url += aParsedUrl.path; - } - return url; - } - exports.urlGenerate = urlGenerate; - - /** - * Normalizes a path, or the path portion of a URL: - * - * - Replaces consecutive slashes with one slash. - * - Removes unnecessary '.' parts. - * - Removes unnecessary '/..' parts. - * - * Based on code in the Node.js 'path' core module. - * - * @param aPath The path or url to normalize. - */ - function normalize(aPath) { - var path = aPath; - var url = urlParse(aPath); - if (url) { - if (!url.path) { - return aPath; - } - path = url.path; - } - var isAbsolute = exports.isAbsolute(path); - - var parts = path.split(/\/+/); - for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { - part = parts[i]; - if (part === '.') { - parts.splice(i, 1); - } else if (part === '..') { - up++; - } else if (up > 0) { - if (part === '') { - // The first part is blank if the path is absolute. Trying to go - // above the root is a no-op. Therefore we can remove all '..' parts - // directly after the root. - parts.splice(i + 1, up); - up = 0; - } else { - parts.splice(i, 2); - up--; - } - } - } - path = parts.join('/'); - - if (path === '') { - path = isAbsolute ? '/' : '.'; - } - - if (url) { - url.path = path; - return urlGenerate(url); - } - return path; - } - exports.normalize = normalize; - - /** - * Joins two paths/URLs. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be joined with the root. - * - * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a - * scheme-relative URL: Then the scheme of aRoot, if any, is prepended - * first. - * - Otherwise aPath is a path. If aRoot is a URL, then its path portion - * is updated with the result and aRoot is returned. Otherwise the result - * is returned. - * - If aPath is absolute, the result is aPath. - * - Otherwise the two paths are joined with a slash. - * - Joining for example 'http://' and 'www.example.com' is also supported. - */ - function join(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - if (aPath === "") { - aPath = "."; - } - var aPathUrl = urlParse(aPath); - var aRootUrl = urlParse(aRoot); - if (aRootUrl) { - aRoot = aRootUrl.path || '/'; - } - - // `join(foo, '//www.example.org')` - if (aPathUrl && !aPathUrl.scheme) { - if (aRootUrl) { - aPathUrl.scheme = aRootUrl.scheme; - } - return urlGenerate(aPathUrl); - } - - if (aPathUrl || aPath.match(dataUrlRegexp)) { - return aPath; - } - - // `join('http://', 'www.example.com')` - if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { - aRootUrl.host = aPath; - return urlGenerate(aRootUrl); - } - - var joined = aPath.charAt(0) === '/' - ? aPath - : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); - - if (aRootUrl) { - aRootUrl.path = joined; - return urlGenerate(aRootUrl); - } - return joined; - } - exports.join = join; - - exports.isAbsolute = function (aPath) { - return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); - }; - - /** - * Make a path relative to a URL or another path. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be made relative to aRoot. - */ - function relative(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - - aRoot = aRoot.replace(/\/$/, ''); - - // It is possible for the path to be above the root. In this case, simply - // checking whether the root is a prefix of the path won't work. Instead, we - // need to remove components from the root one by one, until either we find - // a prefix that fits, or we run out of components to remove. - var level = 0; - while (aPath.indexOf(aRoot + '/') !== 0) { - var index = aRoot.lastIndexOf("/"); - if (index < 0) { - return aPath; - } - - // If the only part of the root that is left is the scheme (i.e. http://, - // file:///, etc.), one or more slashes (/), or simply nothing at all, we - // have exhausted all components, so the path is not relative to the root. - aRoot = aRoot.slice(0, index); - if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { - return aPath; - } - - ++level; - } - - // Make sure we add a "../" for each component we removed from the root. - return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); - } - exports.relative = relative; - - var supportsNullProto = (function () { - var obj = Object.create(null); - return !('__proto__' in obj); - }()); - - function identity (s) { - return s; - } - - /** - * Because behavior goes wacky when you set `__proto__` on objects, we - * have to prefix all the strings in our set with an arbitrary character. - * - * See https://github.com/mozilla/source-map/pull/31 and - * https://github.com/mozilla/source-map/issues/30 - * - * @param String aStr - */ - function toSetString(aStr) { - if (isProtoString(aStr)) { - return '$' + aStr; - } - - return aStr; - } - exports.toSetString = supportsNullProto ? identity : toSetString; - - function fromSetString(aStr) { - if (isProtoString(aStr)) { - return aStr.slice(1); - } - - return aStr; - } - exports.fromSetString = supportsNullProto ? identity : fromSetString; - - function isProtoString(s) { - if (!s) { - return false; - } - - var length = s.length; - - if (length < 9 /* "__proto__".length */) { - return false; - } - - if (s.charCodeAt(length - 1) !== 95 /* '_' */ || - s.charCodeAt(length - 2) !== 95 /* '_' */ || - s.charCodeAt(length - 3) !== 111 /* 'o' */ || - s.charCodeAt(length - 4) !== 116 /* 't' */ || - s.charCodeAt(length - 5) !== 111 /* 'o' */ || - s.charCodeAt(length - 6) !== 114 /* 'r' */ || - s.charCodeAt(length - 7) !== 112 /* 'p' */ || - s.charCodeAt(length - 8) !== 95 /* '_' */ || - s.charCodeAt(length - 9) !== 95 /* '_' */) { - return false; - } - - for (var i = length - 10; i >= 0; i--) { - if (s.charCodeAt(i) !== 36 /* '$' */) { - return false; - } - } - - return true; - } - - /** - * Comparator between two mappings where the original positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same original source/line/column, but different generated - * line and column the same. Useful when searching for a mapping with a - * stubbed out mapping. - */ - function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { - var cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0 || onlyCompareOriginal) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - } - exports.compareByOriginalPositions = compareByOriginalPositions; - - /** - * Comparator between two mappings with deflated source and name indices where - * the generated positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same generated line and column, but different - * source/name/original line and column the same. Useful when searching for a - * mapping with a stubbed out mapping. - */ - function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0 || onlyCompareGenerated) { - return cmp; - } - - cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - } - exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; - - function strcmp(aStr1, aStr2) { - if (aStr1 === aStr2) { - return 0; - } - - if (aStr1 > aStr2) { - return 1; - } - - return -1; - } - - /** - * Comparator between two mappings with inflated source and name strings where - * the generated positions are compared. - */ - function compareByGeneratedPositionsInflated(mappingA, mappingB) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return strcmp(mappingA.name, mappingB.name); - } - exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; - - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - var has = Object.prototype.hasOwnProperty; - var hasNativeMap = typeof Map !== "undefined"; - - /** - * A data structure which is a combination of an array and a set. Adding a new - * member is O(1), testing for membership is O(1), and finding the index of an - * element is O(1). Removing elements from the set is not supported. Only - * strings are supported for membership. - */ - function ArraySet() { - this._array = []; - this._set = hasNativeMap ? new Map() : Object.create(null); - } - - /** - * Static method for creating ArraySet instances from an existing array. - */ - ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { - var set = new ArraySet(); - for (var i = 0, len = aArray.length; i < len; i++) { - set.add(aArray[i], aAllowDuplicates); - } - return set; - }; - - /** - * Return how many unique items are in this ArraySet. If duplicates have been - * added, than those do not count towards the size. - * - * @returns Number - */ - ArraySet.prototype.size = function ArraySet_size() { - return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; - }; - - /** - * Add the given string to this set. - * - * @param String aStr - */ - ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { - var sStr = hasNativeMap ? aStr : util.toSetString(aStr); - var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); - var idx = this._array.length; - if (!isDuplicate || aAllowDuplicates) { - this._array.push(aStr); - } - if (!isDuplicate) { - if (hasNativeMap) { - this._set.set(aStr, idx); - } else { - this._set[sStr] = idx; - } - } - }; - - /** - * Is the given string a member of this set? - * - * @param String aStr - */ - ArraySet.prototype.has = function ArraySet_has(aStr) { - if (hasNativeMap) { - return this._set.has(aStr); - } else { - var sStr = util.toSetString(aStr); - return has.call(this._set, sStr); - } - }; - - /** - * What is the index of the given string in the array? - * - * @param String aStr - */ - ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { - if (hasNativeMap) { - var idx = this._set.get(aStr); - if (idx >= 0) { - return idx; - } - } else { - var sStr = util.toSetString(aStr); - if (has.call(this._set, sStr)) { - return this._set[sStr]; - } - } - - throw new Error('"' + aStr + '" is not in the set.'); - }; - - /** - * What is the element at the given index? - * - * @param Number aIdx - */ - ArraySet.prototype.at = function ArraySet_at(aIdx) { - if (aIdx >= 0 && aIdx < this._array.length) { - return this._array[aIdx]; - } - throw new Error('No element indexed by ' + aIdx); - }; - - /** - * Returns the array representation of this set (which has the proper indices - * indicated by indexOf). Note that this is a copy of the internal array used - * for storing the members so that no one can mess with internal state. - */ - ArraySet.prototype.toArray = function ArraySet_toArray() { - return this._array.slice(); - }; - - exports.ArraySet = ArraySet; - - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2014 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - - /** - * Determine whether mappingB is after mappingA with respect to generated - * position. - */ - function generatedPositionAfter(mappingA, mappingB) { - // Optimized for most common case - var lineA = mappingA.generatedLine; - var lineB = mappingB.generatedLine; - var columnA = mappingA.generatedColumn; - var columnB = mappingB.generatedColumn; - return lineB > lineA || lineB == lineA && columnB >= columnA || - util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; - } - - /** - * A data structure to provide a sorted view of accumulated mappings in a - * performance conscious manner. It trades a neglibable overhead in general - * case for a large speedup in case of mappings being added in order. - */ - function MappingList() { - this._array = []; - this._sorted = true; - // Serves as infimum - this._last = {generatedLine: -1, generatedColumn: 0}; - } - - /** - * Iterate through internal items. This method takes the same arguments that - * `Array.prototype.forEach` takes. - * - * NOTE: The order of the mappings is NOT guaranteed. - */ - MappingList.prototype.unsortedForEach = - function MappingList_forEach(aCallback, aThisArg) { - this._array.forEach(aCallback, aThisArg); - }; - - /** - * Add the given source mapping. - * - * @param Object aMapping - */ - MappingList.prototype.add = function MappingList_add(aMapping) { - if (generatedPositionAfter(this._last, aMapping)) { - this._last = aMapping; - this._array.push(aMapping); - } else { - this._sorted = false; - this._array.push(aMapping); - } - }; - - /** - * Returns the flat, sorted array of mappings. The mappings are sorted by - * generated position. - * - * WARNING: This method returns internal data without copying, for - * performance. The return value must NOT be mutated, and should be treated as - * an immutable borrow. If you want to take ownership, you must make your own - * copy. - */ - MappingList.prototype.toArray = function MappingList_toArray() { - if (!this._sorted) { - this._array.sort(util.compareByGeneratedPositionsInflated); - this._sorted = true; - } - return this._array; - }; - - exports.MappingList = MappingList; - - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - var binarySearch = __webpack_require__(8); - var ArraySet = __webpack_require__(5).ArraySet; - var base64VLQ = __webpack_require__(2); - var quickSort = __webpack_require__(9).quickSort; - - function SourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - return sourceMap.sections != null - ? new IndexedSourceMapConsumer(sourceMap) - : new BasicSourceMapConsumer(sourceMap); - } - - SourceMapConsumer.fromSourceMap = function(aSourceMap) { - return BasicSourceMapConsumer.fromSourceMap(aSourceMap); - } - - /** - * The version of the source mapping spec that we are consuming. - */ - SourceMapConsumer.prototype._version = 3; - - // `__generatedMappings` and `__originalMappings` are arrays that hold the - // parsed mapping coordinates from the source map's "mappings" attribute. They - // are lazily instantiated, accessed via the `_generatedMappings` and - // `_originalMappings` getters respectively, and we only parse the mappings - // and create these arrays once queried for a source location. We jump through - // these hoops because there can be many thousands of mappings, and parsing - // them is expensive, so we only want to do it if we must. - // - // Each object in the arrays is of the form: - // - // { - // generatedLine: The line number in the generated code, - // generatedColumn: The column number in the generated code, - // source: The path to the original source file that generated this - // chunk of code, - // originalLine: The line number in the original source that - // corresponds to this chunk of generated code, - // originalColumn: The column number in the original source that - // corresponds to this chunk of generated code, - // name: The name of the original symbol which generated this chunk of - // code. - // } - // - // All properties except for `generatedLine` and `generatedColumn` can be - // `null`. - // - // `_generatedMappings` is ordered by the generated positions. - // - // `_originalMappings` is ordered by the original positions. - - SourceMapConsumer.prototype.__generatedMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { - get: function () { - if (!this.__generatedMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__generatedMappings; - } - }); - - SourceMapConsumer.prototype.__originalMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { - get: function () { - if (!this.__originalMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__originalMappings; - } - }); - - SourceMapConsumer.prototype._charIsMappingSeparator = - function SourceMapConsumer_charIsMappingSeparator(aStr, index) { - var c = aStr.charAt(index); - return c === ";" || c === ","; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - SourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - throw new Error("Subclasses must implement _parseMappings"); - }; - - SourceMapConsumer.GENERATED_ORDER = 1; - SourceMapConsumer.ORIGINAL_ORDER = 2; - - SourceMapConsumer.GREATEST_LOWER_BOUND = 1; - SourceMapConsumer.LEAST_UPPER_BOUND = 2; - - /** - * Iterate over each mapping between an original source/line/column and a - * generated line/column in this source map. - * - * @param Function aCallback - * The function that is called with each mapping. - * @param Object aContext - * Optional. If specified, this object will be the value of `this` every - * time that `aCallback` is called. - * @param aOrder - * Either `SourceMapConsumer.GENERATED_ORDER` or - * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to - * iterate over the mappings sorted by the generated file's line/column - * order or the original's source/line/column order, respectively. Defaults to - * `SourceMapConsumer.GENERATED_ORDER`. - */ - SourceMapConsumer.prototype.eachMapping = - function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { - var context = aContext || null; - var order = aOrder || SourceMapConsumer.GENERATED_ORDER; - - var mappings; - switch (order) { - case SourceMapConsumer.GENERATED_ORDER: - mappings = this._generatedMappings; - break; - case SourceMapConsumer.ORIGINAL_ORDER: - mappings = this._originalMappings; - break; - default: - throw new Error("Unknown order of iteration."); - } - - var sourceRoot = this.sourceRoot; - mappings.map(function (mapping) { - var source = mapping.source === null ? null : this._sources.at(mapping.source); - if (source != null && sourceRoot != null) { - source = util.join(sourceRoot, source); - } - return { - source: source, - generatedLine: mapping.generatedLine, - generatedColumn: mapping.generatedColumn, - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: mapping.name === null ? null : this._names.at(mapping.name) - }; - }, this).forEach(aCallback, context); - }; - - /** - * Returns all generated line and column information for the original source, - * line, and column provided. If no column is provided, returns all mappings - * corresponding to a either the line we are searching for or the next - * closest line that has any mappings. Otherwise, returns all mappings - * corresponding to the given line and either the column we are searching for - * or the next closest column that has any offsets. - * - * The only argument is an object with the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: Optional. the column number in the original source. - * - * and an array of objects is returned, each with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - SourceMapConsumer.prototype.allGeneratedPositionsFor = - function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { - var line = util.getArg(aArgs, 'line'); - - // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping - // returns the index of the closest mapping less than the needle. By - // setting needle.originalColumn to 0, we thus find the last mapping for - // the given line, provided such a mapping exists. - var needle = { - source: util.getArg(aArgs, 'source'), - originalLine: line, - originalColumn: util.getArg(aArgs, 'column', 0) - }; - - if (this.sourceRoot != null) { - needle.source = util.relative(this.sourceRoot, needle.source); - } - if (!this._sources.has(needle.source)) { - return []; - } - needle.source = this._sources.indexOf(needle.source); - - var mappings = []; - - var index = this._findMapping(needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - binarySearch.LEAST_UPPER_BOUND); - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (aArgs.column === undefined) { - var originalLine = mapping.originalLine; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we found. Since - // mappings are sorted, this is guaranteed to find all mappings for - // the line we found. - while (mapping && mapping.originalLine === originalLine) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } else { - var originalColumn = mapping.originalColumn; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we were searching for. - // Since mappings are sorted, this is guaranteed to find all mappings for - // the line we are searching for. - while (mapping && - mapping.originalLine === line && - mapping.originalColumn == originalColumn) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } - } - - return mappings; - }; - - exports.SourceMapConsumer = SourceMapConsumer; - - /** - * A BasicSourceMapConsumer instance represents a parsed source map which we can - * query for information about the original file positions by giving it a file - * position in the generated source. - * - * The only parameter is the raw source map (either as a JSON string, or - * already parsed to an object). According to the spec, source maps have the - * following attributes: - * - * - version: Which version of the source map spec this map is following. - * - sources: An array of URLs to the original source files. - * - names: An array of identifiers which can be referrenced by individual mappings. - * - sourceRoot: Optional. The URL root from which all sources are relative. - * - sourcesContent: Optional. An array of contents of the original source files. - * - mappings: A string of base64 VLQs which contain the actual mappings. - * - file: Optional. The generated file this source map is associated with. - * - * Here is an example source map, taken from the source map spec[0]: - * - * { - * version : 3, - * file: "out.js", - * sourceRoot : "", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AA,AB;;ABCDE;" - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# - */ - function BasicSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sources = util.getArg(sourceMap, 'sources'); - // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which - // requires the array) to play nice here. - var names = util.getArg(sourceMap, 'names', []); - var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); - var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); - var mappings = util.getArg(sourceMap, 'mappings'); - var file = util.getArg(sourceMap, 'file', null); - - // Once again, Sass deviates from the spec and supplies the version as a - // string rather than a number, so we use loose equality checking here. - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - sources = sources - .map(String) - // Some source maps produce relative source paths like "./foo.js" instead of - // "foo.js". Normalize these first so that future comparisons will succeed. - // See bugzil.la/1090768. - .map(util.normalize) - // Always ensure that absolute sources are internally stored relative to - // the source root, if the source root is absolute. Not doing this would - // be particularly problematic when the source root is a prefix of the - // source (valid, but why??). See github issue #199 and bugzil.la/1188982. - .map(function (source) { - return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) - ? util.relative(sourceRoot, source) - : source; - }); - - // Pass `true` below to allow duplicate names and sources. While source maps - // are intended to be compressed and deduplicated, the TypeScript compiler - // sometimes generates source maps with duplicates in them. See Github issue - // #72 and bugzil.la/889492. - this._names = ArraySet.fromArray(names.map(String), true); - this._sources = ArraySet.fromArray(sources, true); - - this.sourceRoot = sourceRoot; - this.sourcesContent = sourcesContent; - this._mappings = mappings; - this.file = file; - } - - BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; - - /** - * Create a BasicSourceMapConsumer from a SourceMapGenerator. - * - * @param SourceMapGenerator aSourceMap - * The source map that will be consumed. - * @returns BasicSourceMapConsumer - */ - BasicSourceMapConsumer.fromSourceMap = - function SourceMapConsumer_fromSourceMap(aSourceMap) { - var smc = Object.create(BasicSourceMapConsumer.prototype); - - var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); - var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); - smc.sourceRoot = aSourceMap._sourceRoot; - smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), - smc.sourceRoot); - smc.file = aSourceMap._file; - - // Because we are modifying the entries (by converting string sources and - // names to indices into the sources and names ArraySets), we have to make - // a copy of the entry or else bad things happen. Shared mutable state - // strikes again! See github issue #191. - - var generatedMappings = aSourceMap._mappings.toArray().slice(); - var destGeneratedMappings = smc.__generatedMappings = []; - var destOriginalMappings = smc.__originalMappings = []; - - for (var i = 0, length = generatedMappings.length; i < length; i++) { - var srcMapping = generatedMappings[i]; - var destMapping = new Mapping; - destMapping.generatedLine = srcMapping.generatedLine; - destMapping.generatedColumn = srcMapping.generatedColumn; - - if (srcMapping.source) { - destMapping.source = sources.indexOf(srcMapping.source); - destMapping.originalLine = srcMapping.originalLine; - destMapping.originalColumn = srcMapping.originalColumn; - - if (srcMapping.name) { - destMapping.name = names.indexOf(srcMapping.name); - } - - destOriginalMappings.push(destMapping); - } - - destGeneratedMappings.push(destMapping); - } - - quickSort(smc.__originalMappings, util.compareByOriginalPositions); - - return smc; - }; - - /** - * The version of the source mapping spec that we are consuming. - */ - BasicSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { - get: function () { - return this._sources.toArray().map(function (s) { - return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; - }, this); - } - }); - - /** - * Provide the JIT with a nice shape / hidden class. - */ - function Mapping() { - this.generatedLine = 0; - this.generatedColumn = 0; - this.source = null; - this.originalLine = null; - this.originalColumn = null; - this.name = null; - } - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - BasicSourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - var generatedLine = 1; - var previousGeneratedColumn = 0; - var previousOriginalLine = 0; - var previousOriginalColumn = 0; - var previousSource = 0; - var previousName = 0; - var length = aStr.length; - var index = 0; - var cachedSegments = {}; - var temp = {}; - var originalMappings = []; - var generatedMappings = []; - var mapping, str, segment, end, value; - - while (index < length) { - if (aStr.charAt(index) === ';') { - generatedLine++; - index++; - previousGeneratedColumn = 0; - } - else if (aStr.charAt(index) === ',') { - index++; - } - else { - mapping = new Mapping(); - mapping.generatedLine = generatedLine; - - // Because each offset is encoded relative to the previous one, - // many segments often have the same encoding. We can exploit this - // fact by caching the parsed variable length fields of each segment, - // allowing us to avoid a second parse if we encounter the same - // segment again. - for (end = index; end < length; end++) { - if (this._charIsMappingSeparator(aStr, end)) { - break; - } - } - str = aStr.slice(index, end); - - segment = cachedSegments[str]; - if (segment) { - index += str.length; - } else { - segment = []; - while (index < end) { - base64VLQ.decode(aStr, index, temp); - value = temp.value; - index = temp.rest; - segment.push(value); - } - - if (segment.length === 2) { - throw new Error('Found a source, but no line and column'); - } - - if (segment.length === 3) { - throw new Error('Found a source and line, but no column'); - } - - cachedSegments[str] = segment; - } - - // Generated column. - mapping.generatedColumn = previousGeneratedColumn + segment[0]; - previousGeneratedColumn = mapping.generatedColumn; - - if (segment.length > 1) { - // Original source. - mapping.source = previousSource + segment[1]; - previousSource += segment[1]; - - // Original line. - mapping.originalLine = previousOriginalLine + segment[2]; - previousOriginalLine = mapping.originalLine; - // Lines are stored 0-based - mapping.originalLine += 1; - - // Original column. - mapping.originalColumn = previousOriginalColumn + segment[3]; - previousOriginalColumn = mapping.originalColumn; - - if (segment.length > 4) { - // Original name. - mapping.name = previousName + segment[4]; - previousName += segment[4]; - } - } - - generatedMappings.push(mapping); - if (typeof mapping.originalLine === 'number') { - originalMappings.push(mapping); - } - } - } - - quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); - this.__generatedMappings = generatedMappings; - - quickSort(originalMappings, util.compareByOriginalPositions); - this.__originalMappings = originalMappings; - }; - - /** - * Find the mapping that best matches the hypothetical "needle" mapping that - * we are searching for in the given "haystack" of mappings. - */ - BasicSourceMapConsumer.prototype._findMapping = - function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, - aColumnName, aComparator, aBias) { - // To return the position we are searching for, we must first find the - // mapping for the given position and then return the opposite position it - // points to. Because the mappings are sorted, we can use binary search to - // find the best mapping. - - if (aNeedle[aLineName] <= 0) { - throw new TypeError('Line must be greater than or equal to 1, got ' - + aNeedle[aLineName]); - } - if (aNeedle[aColumnName] < 0) { - throw new TypeError('Column must be greater than or equal to 0, got ' - + aNeedle[aColumnName]); - } - - return binarySearch.search(aNeedle, aMappings, aComparator, aBias); - }; - - /** - * Compute the last column for each generated mapping. The last column is - * inclusive. - */ - BasicSourceMapConsumer.prototype.computeColumnSpans = - function SourceMapConsumer_computeColumnSpans() { - for (var index = 0; index < this._generatedMappings.length; ++index) { - var mapping = this._generatedMappings[index]; - - // Mappings do not contain a field for the last generated columnt. We - // can come up with an optimistic estimate, however, by assuming that - // mappings are contiguous (i.e. given two consecutive mappings, the - // first mapping ends where the second one starts). - if (index + 1 < this._generatedMappings.length) { - var nextMapping = this._generatedMappings[index + 1]; - - if (mapping.generatedLine === nextMapping.generatedLine) { - mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; - continue; - } - } - - // The last mapping for each line spans the entire line. - mapping.lastGeneratedColumn = Infinity; - } - }; - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - BasicSourceMapConsumer.prototype.originalPositionFor = - function SourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._generatedMappings, - "generatedLine", - "generatedColumn", - util.compareByGeneratedPositionsDeflated, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._generatedMappings[index]; - - if (mapping.generatedLine === needle.generatedLine) { - var source = util.getArg(mapping, 'source', null); - if (source !== null) { - source = this._sources.at(source); - if (this.sourceRoot != null) { - source = util.join(this.sourceRoot, source); - } - } - var name = util.getArg(mapping, 'name', null); - if (name !== null) { - name = this._names.at(name); - } - return { - source: source, - line: util.getArg(mapping, 'originalLine', null), - column: util.getArg(mapping, 'originalColumn', null), - name: name - }; - } - } - - return { - source: null, - line: null, - column: null, - name: null - }; - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - BasicSourceMapConsumer.prototype.hasContentsOfAllSources = - function BasicSourceMapConsumer_hasContentsOfAllSources() { - if (!this.sourcesContent) { - return false; - } - return this.sourcesContent.length >= this._sources.size() && - !this.sourcesContent.some(function (sc) { return sc == null; }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - BasicSourceMapConsumer.prototype.sourceContentFor = - function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - if (!this.sourcesContent) { - return null; - } - - if (this.sourceRoot != null) { - aSource = util.relative(this.sourceRoot, aSource); - } - - if (this._sources.has(aSource)) { - return this.sourcesContent[this._sources.indexOf(aSource)]; - } - - var url; - if (this.sourceRoot != null - && (url = util.urlParse(this.sourceRoot))) { - // XXX: file:// URIs and absolute paths lead to unexpected behavior for - // many users. We can help them out when they expect file:// URIs to - // behave like it would if they were running a local HTTP server. See - // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. - var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); - if (url.scheme == "file" - && this._sources.has(fileUriAbsPath)) { - return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] - } - - if ((!url.path || url.path == "/") - && this._sources.has("/" + aSource)) { - return this.sourcesContent[this._sources.indexOf("/" + aSource)]; - } - } - - // This function is used recursively from - // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we - // don't want to throw if we can't find the source - we just want to - // return null, so we provide a flag to exit gracefully. - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - BasicSourceMapConsumer.prototype.generatedPositionFor = - function SourceMapConsumer_generatedPositionFor(aArgs) { - var source = util.getArg(aArgs, 'source'); - if (this.sourceRoot != null) { - source = util.relative(this.sourceRoot, source); - } - if (!this._sources.has(source)) { - return { - line: null, - column: null, - lastColumn: null - }; - } - source = this._sources.indexOf(source); - - var needle = { - source: source, - originalLine: util.getArg(aArgs, 'line'), - originalColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (mapping.source === needle.source) { - return { - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }; - } - } - - return { - line: null, - column: null, - lastColumn: null - }; - }; - - exports.BasicSourceMapConsumer = BasicSourceMapConsumer; - - /** - * An IndexedSourceMapConsumer instance represents a parsed source map which - * we can query for information. It differs from BasicSourceMapConsumer in - * that it takes "indexed" source maps (i.e. ones with a "sections" field) as - * input. - * - * The only parameter is a raw source map (either as a JSON string, or already - * parsed to an object). According to the spec for indexed source maps, they - * have the following attributes: - * - * - version: Which version of the source map spec this map is following. - * - file: Optional. The generated file this source map is associated with. - * - sections: A list of section definitions. - * - * Each value under the "sections" field has two fields: - * - offset: The offset into the original specified at which this section - * begins to apply, defined as an object with a "line" and "column" - * field. - * - map: A source map definition. This source map could also be indexed, - * but doesn't have to be. - * - * Instead of the "map" field, it's also possible to have a "url" field - * specifying a URL to retrieve a source map from, but that's currently - * unsupported. - * - * Here's an example source map, taken from the source map spec[0], but - * modified to omit a section which uses the "url" field. - * - * { - * version : 3, - * file: "app.js", - * sections: [{ - * offset: {line:100, column:10}, - * map: { - * version : 3, - * file: "section.js", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AAAA,E;;ABCDE;" - * } - * }], - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt - */ - function IndexedSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sections = util.getArg(sourceMap, 'sections'); - - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - this._sources = new ArraySet(); - this._names = new ArraySet(); - - var lastOffset = { - line: -1, - column: 0 - }; - this._sections = sections.map(function (s) { - if (s.url) { - // The url field will require support for asynchronicity. - // See https://github.com/mozilla/source-map/issues/16 - throw new Error('Support for url field in sections not implemented.'); - } - var offset = util.getArg(s, 'offset'); - var offsetLine = util.getArg(offset, 'line'); - var offsetColumn = util.getArg(offset, 'column'); - - if (offsetLine < lastOffset.line || - (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { - throw new Error('Section offsets must be ordered and non-overlapping.'); - } - lastOffset = offset; - - return { - generatedOffset: { - // The offset fields are 0-based, but we use 1-based indices when - // encoding/decoding from VLQ. - generatedLine: offsetLine + 1, - generatedColumn: offsetColumn + 1 - }, - consumer: new SourceMapConsumer(util.getArg(s, 'map')) - } - }); - } - - IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; - - /** - * The version of the source mapping spec that we are consuming. - */ - IndexedSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { - get: function () { - var sources = []; - for (var i = 0; i < this._sections.length; i++) { - for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { - sources.push(this._sections[i].consumer.sources[j]); - } - } - return sources; - } - }); - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - IndexedSourceMapConsumer.prototype.originalPositionFor = - function IndexedSourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - // Find the section containing the generated position we're trying to map - // to an original position. - var sectionIndex = binarySearch.search(needle, this._sections, - function(needle, section) { - var cmp = needle.generatedLine - section.generatedOffset.generatedLine; - if (cmp) { - return cmp; - } - - return (needle.generatedColumn - - section.generatedOffset.generatedColumn); - }); - var section = this._sections[sectionIndex]; - - if (!section) { - return { - source: null, - line: null, - column: null, - name: null - }; - } - - return section.consumer.originalPositionFor({ - line: needle.generatedLine - - (section.generatedOffset.generatedLine - 1), - column: needle.generatedColumn - - (section.generatedOffset.generatedLine === needle.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - bias: aArgs.bias - }); - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = - function IndexedSourceMapConsumer_hasContentsOfAllSources() { - return this._sections.every(function (s) { - return s.consumer.hasContentsOfAllSources(); - }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - IndexedSourceMapConsumer.prototype.sourceContentFor = - function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - var content = section.consumer.sourceContentFor(aSource, true); - if (content) { - return content; - } - } - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - IndexedSourceMapConsumer.prototype.generatedPositionFor = - function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - // Only consider this section if the requested source is in the list of - // sources of the consumer. - if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { - continue; - } - var generatedPosition = section.consumer.generatedPositionFor(aArgs); - if (generatedPosition) { - var ret = { - line: generatedPosition.line + - (section.generatedOffset.generatedLine - 1), - column: generatedPosition.column + - (section.generatedOffset.generatedLine === generatedPosition.line - ? section.generatedOffset.generatedColumn - 1 - : 0) - }; - return ret; - } - } - - return { - line: null, - column: null - }; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - IndexedSourceMapConsumer.prototype._parseMappings = - function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { - this.__generatedMappings = []; - this.__originalMappings = []; - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - var sectionMappings = section.consumer._generatedMappings; - for (var j = 0; j < sectionMappings.length; j++) { - var mapping = sectionMappings[j]; - - var source = section.consumer._sources.at(mapping.source); - if (section.consumer.sourceRoot !== null) { - source = util.join(section.consumer.sourceRoot, source); - } - this._sources.add(source); - source = this._sources.indexOf(source); - - var name = section.consumer._names.at(mapping.name); - this._names.add(name); - name = this._names.indexOf(name); - - // The mappings coming from the consumer for the section have - // generated positions relative to the start of the section, so we - // need to offset them to be relative to the start of the concatenated - // generated file. - var adjustedMapping = { - source: source, - generatedLine: mapping.generatedLine + - (section.generatedOffset.generatedLine - 1), - generatedColumn: mapping.generatedColumn + - (section.generatedOffset.generatedLine === mapping.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: name - }; - - this.__generatedMappings.push(adjustedMapping); - if (typeof adjustedMapping.originalLine === 'number') { - this.__originalMappings.push(adjustedMapping); - } - } - } - - quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); - quickSort(this.__originalMappings, util.compareByOriginalPositions); - }; - - exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; - - -/***/ }), -/* 8 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - exports.GREATEST_LOWER_BOUND = 1; - exports.LEAST_UPPER_BOUND = 2; - - /** - * Recursive implementation of binary search. - * - * @param aLow Indices here and lower do not contain the needle. - * @param aHigh Indices here and higher do not contain the needle. - * @param aNeedle The element being searched for. - * @param aHaystack The non-empty array being searched. - * @param aCompare Function which takes two elements and returns -1, 0, or 1. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - */ - function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { - // This function terminates when one of the following is true: - // - // 1. We find the exact element we are looking for. - // - // 2. We did not find the exact element, but we can return the index of - // the next-closest element. - // - // 3. We did not find the exact element, and there is no next-closest - // element than the one we are searching for, so we return -1. - var mid = Math.floor((aHigh - aLow) / 2) + aLow; - var cmp = aCompare(aNeedle, aHaystack[mid], true); - if (cmp === 0) { - // Found the element we are looking for. - return mid; - } - else if (cmp > 0) { - // Our needle is greater than aHaystack[mid]. - if (aHigh - mid > 1) { - // The element is in the upper half. - return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); - } - - // The exact needle element was not found in this haystack. Determine if - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return aHigh < aHaystack.length ? aHigh : -1; - } else { - return mid; - } - } - else { - // Our needle is less than aHaystack[mid]. - if (mid - aLow > 1) { - // The element is in the lower half. - return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); - } - - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return mid; - } else { - return aLow < 0 ? -1 : aLow; - } - } - } - - /** - * This is an implementation of binary search which will always try and return - * the index of the closest element if there is no exact hit. This is because - * mappings between original and generated line/col pairs are single points, - * and there is an implicit region between each of them, so a miss just means - * that you aren't on the very start of a region. - * - * @param aNeedle The element you are looking for. - * @param aHaystack The array that is being searched. - * @param aCompare A function which takes the needle and an element in the - * array and returns -1, 0, or 1 depending on whether the needle is less - * than, equal to, or greater than the element, respectively. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. - */ - exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { - if (aHaystack.length === 0) { - return -1; - } - - var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, - aCompare, aBias || exports.GREATEST_LOWER_BOUND); - if (index < 0) { - return -1; - } - - // We have found either the exact element, or the next-closest element than - // the one we are searching for. However, there may be more than one such - // element. Make sure we always return the smallest of these. - while (index - 1 >= 0) { - if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { - break; - } - --index; - } - - return index; - }; - - -/***/ }), -/* 9 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - // It turns out that some (most?) JavaScript engines don't self-host - // `Array.prototype.sort`. This makes sense because C++ will likely remain - // faster than JS when doing raw CPU-intensive sorting. However, when using a - // custom comparator function, calling back and forth between the VM's C++ and - // JIT'd JS is rather slow *and* loses JIT type information, resulting in - // worse generated code for the comparator function than would be optimal. In - // fact, when sorting with a comparator, these costs outweigh the benefits of - // sorting in C++. By using our own JS-implemented Quick Sort (below), we get - // a ~3500ms mean speed-up in `bench/bench.html`. - - /** - * Swap the elements indexed by `x` and `y` in the array `ary`. - * - * @param {Array} ary - * The array. - * @param {Number} x - * The index of the first item. - * @param {Number} y - * The index of the second item. - */ - function swap(ary, x, y) { - var temp = ary[x]; - ary[x] = ary[y]; - ary[y] = temp; - } - - /** - * Returns a random integer within the range `low .. high` inclusive. - * - * @param {Number} low - * The lower bound on the range. - * @param {Number} high - * The upper bound on the range. - */ - function randomIntInRange(low, high) { - return Math.round(low + (Math.random() * (high - low))); - } - - /** - * The Quick Sort algorithm. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - * @param {Number} p - * Start index of the array - * @param {Number} r - * End index of the array - */ - function doQuickSort(ary, comparator, p, r) { - // If our lower bound is less than our upper bound, we (1) partition the - // array into two pieces and (2) recurse on each half. If it is not, this is - // the empty array and our base case. - - if (p < r) { - // (1) Partitioning. - // - // The partitioning chooses a pivot between `p` and `r` and moves all - // elements that are less than or equal to the pivot to the before it, and - // all the elements that are greater than it after it. The effect is that - // once partition is done, the pivot is in the exact place it will be when - // the array is put in sorted order, and it will not need to be moved - // again. This runs in O(n) time. - - // Always choose a random pivot so that an input array which is reverse - // sorted does not cause O(n^2) running time. - var pivotIndex = randomIntInRange(p, r); - var i = p - 1; - - swap(ary, pivotIndex, r); - var pivot = ary[r]; - - // Immediately after `j` is incremented in this loop, the following hold - // true: - // - // * Every element in `ary[p .. i]` is less than or equal to the pivot. - // - // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. - for (var j = p; j < r; j++) { - if (comparator(ary[j], pivot) <= 0) { - i += 1; - swap(ary, i, j); - } - } - - swap(ary, i + 1, j); - var q = i + 1; - - // (2) Recurse on each half. - - doQuickSort(ary, comparator, p, q - 1); - doQuickSort(ary, comparator, q + 1, r); - } - } - - /** - * Sort the given array in-place with the given comparator function. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - */ - exports.quickSort = function (ary, comparator) { - doQuickSort(ary, comparator, 0, ary.length - 1); - }; - - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; - var util = __webpack_require__(4); - - // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other - // operating systems these days (capturing the result). - var REGEX_NEWLINE = /(\r?\n)/; - - // Newline character code for charCodeAt() comparisons - var NEWLINE_CODE = 10; - - // Private symbol for identifying `SourceNode`s when multiple versions of - // the source-map library are loaded. This MUST NOT CHANGE across - // versions! - var isSourceNode = "$$$isSourceNode$$$"; - - /** - * SourceNodes provide a way to abstract over interpolating/concatenating - * snippets of generated JavaScript source code while maintaining the line and - * column information associated with the original source code. - * - * @param aLine The original line number. - * @param aColumn The original column number. - * @param aSource The original source's filename. - * @param aChunks Optional. An array of strings which are snippets of - * generated JS, or other SourceNodes. - * @param aName The original identifier. - */ - function SourceNode(aLine, aColumn, aSource, aChunks, aName) { - this.children = []; - this.sourceContents = {}; - this.line = aLine == null ? null : aLine; - this.column = aColumn == null ? null : aColumn; - this.source = aSource == null ? null : aSource; - this.name = aName == null ? null : aName; - this[isSourceNode] = true; - if (aChunks != null) this.add(aChunks); - } - - /** - * Creates a SourceNode from generated code and a SourceMapConsumer. - * - * @param aGeneratedCode The generated code - * @param aSourceMapConsumer The SourceMap for the generated code - * @param aRelativePath Optional. The path that relative sources in the - * SourceMapConsumer should be relative to. - */ - SourceNode.fromStringWithSourceMap = - function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { - // The SourceNode we want to fill with the generated code - // and the SourceMap - var node = new SourceNode(); - - // All even indices of this array are one line of the generated code, - // while all odd indices are the newlines between two adjacent lines - // (since `REGEX_NEWLINE` captures its match). - // Processed fragments are accessed by calling `shiftNextLine`. - var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); - var remainingLinesIndex = 0; - var shiftNextLine = function() { - var lineContents = getNextLine(); - // The last line of a file might not have a newline. - var newLine = getNextLine() || ""; - return lineContents + newLine; - - function getNextLine() { - return remainingLinesIndex < remainingLines.length ? - remainingLines[remainingLinesIndex++] : undefined; - } - }; - - // We need to remember the position of "remainingLines" - var lastGeneratedLine = 1, lastGeneratedColumn = 0; - - // The generate SourceNodes we need a code range. - // To extract it current and last mapping is used. - // Here we store the last mapping. - var lastMapping = null; - - aSourceMapConsumer.eachMapping(function (mapping) { - if (lastMapping !== null) { - // We add the code from "lastMapping" to "mapping": - // First check if there is a new line in between. - if (lastGeneratedLine < mapping.generatedLine) { - // Associate first line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - lastGeneratedLine++; - lastGeneratedColumn = 0; - // The remaining code is added without mapping - } else { - // There is no new line in between. - // Associate the code between "lastGeneratedColumn" and - // "mapping.generatedColumn" with "lastMapping" - var nextLine = remainingLines[remainingLinesIndex]; - var code = nextLine.substr(0, mapping.generatedColumn - - lastGeneratedColumn); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - - lastGeneratedColumn); - lastGeneratedColumn = mapping.generatedColumn; - addMappingWithCode(lastMapping, code); - // No more remaining code, continue - lastMapping = mapping; - return; - } - } - // We add the generated code until the first mapping - // to the SourceNode without any mapping. - // Each line is added as separate string. - while (lastGeneratedLine < mapping.generatedLine) { - node.add(shiftNextLine()); - lastGeneratedLine++; - } - if (lastGeneratedColumn < mapping.generatedColumn) { - var nextLine = remainingLines[remainingLinesIndex]; - node.add(nextLine.substr(0, mapping.generatedColumn)); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); - lastGeneratedColumn = mapping.generatedColumn; - } - lastMapping = mapping; - }, this); - // We have processed all mappings. - if (remainingLinesIndex < remainingLines.length) { - if (lastMapping) { - // Associate the remaining code in the current line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - } - // and add the remaining lines without any mapping - node.add(remainingLines.splice(remainingLinesIndex).join("")); - } - - // Copy sourcesContent into SourceNode - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aRelativePath != null) { - sourceFile = util.join(aRelativePath, sourceFile); - } - node.setSourceContent(sourceFile, content); - } - }); - - return node; - - function addMappingWithCode(mapping, code) { - if (mapping === null || mapping.source === undefined) { - node.add(code); - } else { - var source = aRelativePath - ? util.join(aRelativePath, mapping.source) - : mapping.source; - node.add(new SourceNode(mapping.originalLine, - mapping.originalColumn, - source, - code, - mapping.name)); - } - } - }; - - /** - * Add a chunk of generated JS to this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.add = function SourceNode_add(aChunk) { - if (Array.isArray(aChunk)) { - aChunk.forEach(function (chunk) { - this.add(chunk); - }, this); - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - if (aChunk) { - this.children.push(aChunk); - } - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; - }; - - /** - * Add a chunk of generated JS to the beginning of this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { - if (Array.isArray(aChunk)) { - for (var i = aChunk.length-1; i >= 0; i--) { - this.prepend(aChunk[i]); - } - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - this.children.unshift(aChunk); - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; - }; - - /** - * Walk over the tree of JS snippets in this node and its children. The - * walking function is called once for each snippet of JS and is passed that - * snippet and the its original associated source's line/column location. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walk = function SourceNode_walk(aFn) { - var chunk; - for (var i = 0, len = this.children.length; i < len; i++) { - chunk = this.children[i]; - if (chunk[isSourceNode]) { - chunk.walk(aFn); - } - else { - if (chunk !== '') { - aFn(chunk, { source: this.source, - line: this.line, - column: this.column, - name: this.name }); - } - } - } - }; - - /** - * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between - * each of `this.children`. - * - * @param aSep The separator. - */ - SourceNode.prototype.join = function SourceNode_join(aSep) { - var newChildren; - var i; - var len = this.children.length; - if (len > 0) { - newChildren = []; - for (i = 0; i < len-1; i++) { - newChildren.push(this.children[i]); - newChildren.push(aSep); - } - newChildren.push(this.children[i]); - this.children = newChildren; - } - return this; - }; - - /** - * Call String.prototype.replace on the very right-most source snippet. Useful - * for trimming whitespace from the end of a source node, etc. - * - * @param aPattern The pattern to replace. - * @param aReplacement The thing to replace the pattern with. - */ - SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { - var lastChild = this.children[this.children.length - 1]; - if (lastChild[isSourceNode]) { - lastChild.replaceRight(aPattern, aReplacement); - } - else if (typeof lastChild === 'string') { - this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); - } - else { - this.children.push(''.replace(aPattern, aReplacement)); - } - return this; - }; - - /** - * Set the source content for a source file. This will be added to the SourceMapGenerator - * in the sourcesContent field. - * - * @param aSourceFile The filename of the source file - * @param aSourceContent The content of the source file - */ - SourceNode.prototype.setSourceContent = - function SourceNode_setSourceContent(aSourceFile, aSourceContent) { - this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; - }; - - /** - * Walk over the tree of SourceNodes. The walking function is called for each - * source file content and is passed the filename and source content. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walkSourceContents = - function SourceNode_walkSourceContents(aFn) { - for (var i = 0, len = this.children.length; i < len; i++) { - if (this.children[i][isSourceNode]) { - this.children[i].walkSourceContents(aFn); - } - } - - var sources = Object.keys(this.sourceContents); - for (var i = 0, len = sources.length; i < len; i++) { - aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); - } - }; - - /** - * Return the string representation of this source node. Walks over the tree - * and concatenates all the various snippets together to one string. - */ - SourceNode.prototype.toString = function SourceNode_toString() { - var str = ""; - this.walk(function (chunk) { - str += chunk; - }); - return str; - }; - - /** - * Returns the string representation of this source node along with a source - * map. - */ - SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { - var generated = { - code: "", - line: 1, - column: 0 - }; - var map = new SourceMapGenerator(aArgs); - var sourceMappingActive = false; - var lastOriginalSource = null; - var lastOriginalLine = null; - var lastOriginalColumn = null; - var lastOriginalName = null; - this.walk(function (chunk, original) { - generated.code += chunk; - if (original.source !== null - && original.line !== null - && original.column !== null) { - if(lastOriginalSource !== original.source - || lastOriginalLine !== original.line - || lastOriginalColumn !== original.column - || lastOriginalName !== original.name) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - lastOriginalSource = original.source; - lastOriginalLine = original.line; - lastOriginalColumn = original.column; - lastOriginalName = original.name; - sourceMappingActive = true; - } else if (sourceMappingActive) { - map.addMapping({ - generated: { - line: generated.line, - column: generated.column - } - }); - lastOriginalSource = null; - sourceMappingActive = false; - } - for (var idx = 0, length = chunk.length; idx < length; idx++) { - if (chunk.charCodeAt(idx) === NEWLINE_CODE) { - generated.line++; - generated.column = 0; - // Mappings end at eol - if (idx + 1 === length) { - lastOriginalSource = null; - sourceMappingActive = false; - } else if (sourceMappingActive) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - } else { - generated.column++; - } - } - }); - this.walkSourceContents(function (sourceFile, sourceContent) { - map.setSourceContent(sourceFile, sourceContent); - }); - - return { code: generated.code, map: map }; - }; - - exports.SourceNode = SourceNode; - - -/***/ }) -/******/ ]) -}); -; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBlNDczOGZjNzJhN2IyMzAzOTg4OSIsIndlYnBhY2s6Ly8vLi9zb3VyY2UtbWFwLmpzIiwid2VicGFjazovLy8uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LXZscS5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LmpzIiwid2VicGFjazovLy8uL2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL2xpYi9hcnJheS1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL21hcHBpbmctbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvcXVpY2stc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTBDLFNBQVM7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDL1pBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUEyRDtBQUMzRCxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7Ozs7Ozs7QUMzSUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWdCO0FBQ2hCLGlCQUFnQjs7QUFFaEIsb0JBQW1CO0FBQ25CLHFCQUFvQjs7QUFFcEIsaUJBQWdCO0FBQ2hCLGlCQUFnQjs7QUFFaEIsaUJBQWdCO0FBQ2hCLGtCQUFpQjs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNsRUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUEyQixRQUFRO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNoYUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXNDLFNBQVM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3hIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQzlFQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxvQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7O0FBRVg7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVEQUFzRCxZQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXVCLHdDQUF3QztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQStDLG1CQUFtQixFQUFFO0FBQ3BFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE2QixNQUFNO0FBQ25DO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXNEO0FBQ3REOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBLElBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUMsc0JBQXFCLCtDQUErQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CLDJCQUEyQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsMkJBQTJCO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBLHNCQUFxQiw0QkFBNEI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDempDQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQzlHQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ2pIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBLHVDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUF5QyxTQUFTO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNEMsY0FBYztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBLFlBQVc7QUFDWDtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUc7O0FBRUgsV0FBVTtBQUNWOztBQUVBIiwiZmlsZSI6InNvdXJjZS1tYXAuZGVidWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzb3VyY2VNYXBcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wic291cmNlTWFwXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRpZDogbW9kdWxlSWQsXG4gXHRcdFx0bG9hZGVkOiBmYWxzZVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGU0NzM4ZmM3MmE3YjIzMDM5ODg5IiwiLypcbiAqIENvcHlyaWdodCAyMDA5LTIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLnR4dCBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG5leHBvcnRzLlNvdXJjZU5vZGUgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2Utbm9kZScpLlNvdXJjZU5vZGU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NvdXJjZS1tYXAuanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBNYXBwaW5nTGlzdCA9IHJlcXVpcmUoJy4vbWFwcGluZy1saXN0JykuTWFwcGluZ0xpc3Q7XG5cbi8qKlxuICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRvciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpc1xuICogYmVpbmcgYnVpbHQgaW5jcmVtZW50YWxseS4gWW91IG1heSBwYXNzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAqIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGZpbGU6IFRoZSBmaWxlbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBzb3VyY2VSb290OiBBIHJvb3QgZm9yIGFsbCByZWxhdGl2ZSBVUkxzIGluIHRoaXMgc291cmNlIG1hcC5cbiAqL1xuZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKSB7XG4gIGlmICghYUFyZ3MpIHtcbiAgICBhQXJncyA9IHt9O1xuICB9XG4gIHRoaXMuX2ZpbGUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2ZpbGUnLCBudWxsKTtcbiAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB0aGlzLl9za2lwVmFsaWRhdGlvbiA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc2tpcFZhbGlkYXRpb24nLCBmYWxzZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbWFwcGluZ3MgPSBuZXcgTWFwcGluZ0xpc3QoKTtcbiAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbn1cblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IgYmFzZWQgb24gYSBTb3VyY2VNYXBDb25zdW1lclxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICB2YXIgc291cmNlUm9vdCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VSb290O1xuICAgIHZhciBnZW5lcmF0b3IgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6IGFTb3VyY2VNYXBDb25zdW1lci5maWxlLFxuICAgICAgc291cmNlUm9vdDogc291cmNlUm9vdFxuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIG5ld01hcHBpbmcgPSB7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgIG5ld01hcHBpbmcuc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3TWFwcGluZy5vcmlnaW5hbCA9IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLm5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZ2VuZXJhdG9yLmFkZE1hcHBpbmcobmV3TWFwcGluZyk7XG4gICAgfSk7XG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTtcbiAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgZ2VuZXJhdG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfTtcblxuLyoqXG4gKiBBZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4gdG8gdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIGZvciB0aGlzIHNvdXJjZSBtYXAgYmVpbmcgY3JlYXRlZC4gVGhlIG1hcHBpbmdcbiAqIG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGdlbmVyYXRlZDogQW4gb2JqZWN0IHdpdGggdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zLlxuICogICAtIG9yaWdpbmFsOiBBbiBvYmplY3Qgd2l0aCB0aGUgb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLlxuICogICAtIG5hbWU6IEFuIG9wdGlvbmFsIG9yaWdpbmFsIHRva2VuIG5hbWUgZm9yIHRoaXMgbWFwcGluZy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FkZE1hcHBpbmcoYUFyZ3MpIHtcbiAgICB2YXIgZ2VuZXJhdGVkID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdnZW5lcmF0ZWQnKTtcbiAgICB2YXIgb3JpZ2luYWwgPSB1dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJywgbnVsbCk7XG4gICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhhQXJncywgJ25hbWUnLCBudWxsKTtcblxuICAgIGlmICghdGhpcy5fc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlTWFwcGluZyhnZW5lcmF0ZWQsIG9yaWdpbmFsLCBzb3VyY2UsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gU3RyaW5nKHNvdXJjZSk7XG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgICAgaWYgKCF0aGlzLl9uYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX21hcHBpbmdzLmFkZCh7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogZ2VuZXJhdGVkLmNvbHVtbixcbiAgICAgIG9yaWdpbmFsTGluZTogb3JpZ2luYWwgIT0gbnVsbCAmJiBvcmlnaW5hbC5saW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwuY29sdW1uLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBuYW1lOiBuYW1lXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgdmFyIHNvdXJjZSA9IGFTb3VyY2VGaWxlO1xuICAgIGlmICh0aGlzLl9zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5fc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAoYVNvdXJjZUNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgX3NvdXJjZXNDb250ZW50cyBtYXAgaWYgdGhlIHByb3BlcnR5IGlzIG51bGwuXG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoc291cmNlKV0gPSBhU291cmNlQ29udGVudDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgIC8vIElmIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcCBpcyBlbXB0eSwgc2V0IHRoZSBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNlIGZpbGUgdG8gdGhlXG4gKiBzb3VyY2UgbWFwIGJlaW5nIGdlbmVyYXRlZC4gRWFjaCBtYXBwaW5nIHRvIHRoZSBzdXBwbGllZCBzb3VyY2UgZmlsZSBpc1xuICogcmV3cml0dGVuIHVzaW5nIHRoZSBzdXBwbGllZCBzb3VyY2UgbWFwLiBOb3RlOiBUaGUgcmVzb2x1dGlvbiBmb3IgdGhlXG4gKiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUgc3VwcGxpZWQgbWFwLlxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25hbC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS5cbiAqICAgICAgICBJZiBvbWl0dGVkLCBTb3VyY2VNYXBDb25zdW1lcidzIGZpbGUgcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIGFTb3VyY2VNYXBQYXRoIE9wdGlvbmFsLiBUaGUgZGlybmFtZSBvZiB0aGUgcGF0aCB0byB0aGUgc291cmNlIG1hcFxuICogICAgICAgIHRvIGJlIGFwcGxpZWQuIElmIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwQ29uc3VtZXIuXG4gKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgbmVlZGVkIHdoZW4gdGhlIHR3byBzb3VyY2UgbWFwcyBhcmVuJ3QgaW4gdGhlIHNhbWVcbiAqICAgICAgICBkaXJlY3RvcnksIGFuZCB0aGUgc291cmNlIG1hcCB0byBiZSBhcHBsaWVkIGNvbnRhaW5zIHJlbGF0aXZlIHNvdXJjZVxuICogICAgICAgIHBhdGhzLiBJZiBzbywgdGhvc2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gKiAgICAgICAgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hcHBseVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIsIGFTb3VyY2VGaWxlLCBhU291cmNlTWFwUGF0aCkge1xuICAgIHZhciBzb3VyY2VGaWxlID0gYVNvdXJjZUZpbGU7XG4gICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwgd2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcFxuICAgIGlmIChhU291cmNlRmlsZSA9PSBudWxsKSB7XG4gICAgICBpZiAoYVNvdXJjZU1hcENvbnN1bWVyLmZpbGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgcmVxdWlyZXMgZWl0aGVyIGFuIGV4cGxpY2l0IHNvdXJjZSBmaWxlLCAnICtcbiAgICAgICAgICAnb3IgdGhlIHNvdXJjZSBtYXBcXCdzIFwiZmlsZVwiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzb3VyY2VGaWxlID0gYVNvdXJjZU1hcENvbnN1bWVyLmZpbGU7XG4gICAgfVxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5fc291cmNlUm9vdDtcbiAgICAvLyBNYWtlIFwic291cmNlRmlsZVwiIHJlbGF0aXZlIGlmIGFuIGFic29sdXRlIFVybCBpcyBwYXNzZWQuXG4gICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlRmlsZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgfVxuICAgIC8vIEFwcGx5aW5nIHRoZSBTb3VyY2VNYXAgY2FuIGFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZXMgYW5kXG4gICAgLy8gdGhlIG5hbWVzIGFycmF5LlxuICAgIHZhciBuZXdTb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdmFyIG5ld05hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgICAvLyBGaW5kIG1hcHBpbmdzIGZvciB0aGUgXCJzb3VyY2VGaWxlXCJcbiAgICB0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gc291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGNhbiBiZSBtYXBwZWQgYnkgdGhlIHNvdXJjZSBtYXAsIHRoZW4gdXBkYXRlIHRoZSBtYXBwaW5nLlxuICAgICAgICB2YXIgb3JpZ2luYWwgPSBhU291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb3B5IG1hcHBpbmdcbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTtcbiAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIG1hcHBpbmcuc291cmNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbWFwcGluZy5zb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgICAgICBpZiAob3JpZ2luYWwubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgIW5ld1NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgbmV3U291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICBpZiAobmFtZSAhPSBudWxsICYmICFuZXdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgbmV3TmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5fc291cmNlcyA9IG5ld1NvdXJjZXM7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXdOYW1lcztcblxuICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLlxuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhU291cmNlTWFwUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgc291cmNlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YTpcbiAqXG4gKiAgIDEuIEp1c3QgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi5cbiAqICAgMi4gVGhlIEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIDMuIEdlbmVyYXRlZCBhbmQgb3JpZ2luYWwgcG9zaXRpb24sIG9yaWdpbmFsIHNvdXJjZSwgYXMgd2VsbCBhcyBhIG5hbWVcbiAqICAgICAgdG9rZW4uXG4gKlxuICogVG8gbWFpbnRhaW4gY29uc2lzdGVuY3ksIHdlIHZhbGlkYXRlIHRoYXQgYW55IG5ldyBtYXBwaW5nIGJlaW5nIGFkZGVkIGZhbGxzXG4gKiBpbiB0byBvbmUgb2YgdGhlc2UgY2F0ZWdvcmllcy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmFsaWRhdGVNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3ZhbGlkYXRlTWFwcGluZyhhR2VuZXJhdGVkLCBhT3JpZ2luYWwsIGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5hbWUpIHtcbiAgICAvLyBXaGVuIGFPcmlnaW5hbCBpcyB0cnV0aHkgYnV0IGhhcyBlbXB0eSB2YWx1ZXMgZm9yIC5saW5lIGFuZCAuY29sdW1uLFxuICAgIC8vIGl0IGlzIG1vc3QgbGlrZWx5IGEgcHJvZ3JhbW1lciBlcnJvci4gSW4gdGhpcyBjYXNlIHdlIHRocm93IGEgdmVyeVxuICAgIC8vIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgdG8gdHJ5IHRvIGd1aWRlIHRoZW0gdGhlIHJpZ2h0IHdheS5cbiAgICAvLyBGb3IgZXhhbXBsZTogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcG9seW1lci1idW5kbGVyL3B1bGwvNTE5XG4gICAgaWYgKGFPcmlnaW5hbCAmJiB0eXBlb2YgYU9yaWdpbmFsLmxpbmUgIT09ICdudW1iZXInICYmIHR5cGVvZiBhT3JpZ2luYWwuY29sdW1uICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnb3JpZ2luYWwubGluZSBhbmQgb3JpZ2luYWwuY29sdW1uIGFyZSBub3QgbnVtYmVycyAtLSB5b3UgcHJvYmFibHkgbWVhbnQgdG8gb21pdCAnICtcbiAgICAgICAgICAgICd0aGUgb3JpZ2luYWwgbWFwcGluZyBlbnRpcmVseSBhbmQgb25seSBtYXAgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi4gSWYgc28sIHBhc3MgJyArXG4gICAgICAgICAgICAnbnVsbCBmb3IgdGhlIG9yaWdpbmFsIG1hcHBpbmcgaW5zdGVhZCBvZiBhbiBvYmplY3Qgd2l0aCBlbXB0eSBvciBudWxsIHZhbHVlcy4nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgJiYgIWFPcmlnaW5hbCAmJiAhYVNvdXJjZSAmJiAhYU5hbWUpIHtcbiAgICAgIC8vIENhc2UgMS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoYUdlbmVyYXRlZCAmJiAnbGluZScgaW4gYUdlbmVyYXRlZCAmJiAnY29sdW1uJyBpbiBhR2VuZXJhdGVkXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9yaWdpbmFsXG4gICAgICAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsLmxpbmUgPiAwICYmIGFPcmlnaW5hbC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFTb3VyY2UpIHtcbiAgICAgIC8vIENhc2VzIDIgYW5kIDMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hcHBpbmc6ICcgKyBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGdlbmVyYXRlZDogYUdlbmVyYXRlZCxcbiAgICAgICAgc291cmNlOiBhU291cmNlLFxuICAgICAgICBvcmlnaW5hbDogYU9yaWdpbmFsLFxuICAgICAgICBuYW1lOiBhTmFtZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGFjY3VtdWxhdGVkIG1hcHBpbmdzIGluIHRvIHRoZSBzdHJlYW0gb2YgYmFzZSA2NCBWTFFzXG4gKiBzcGVjaWZpZWQgYnkgdGhlIHNvdXJjZSBtYXAgZm9ybWF0LlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXJpYWxpemVNYXBwaW5ncygpIHtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBuZXh0O1xuICAgIHZhciBtYXBwaW5nO1xuICAgIHZhciBuYW1lSWR4O1xuICAgIHZhciBzb3VyY2VJZHg7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSB0aGlzLl9tYXBwaW5ncy50b0FycmF5KCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBtYXBwaW5nID0gbWFwcGluZ3NbaV07XG4gICAgICBuZXh0ID0gJydcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgd2hpbGUgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbmV4dCArPSAnOyc7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBpZiAoIXV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZywgbWFwcGluZ3NbaSAtIDFdKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQgKz0gJywnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbik7XG4gICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VJZHggPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUoc291cmNlSWR4IC0gcHJldmlvdXNTb3VyY2UpO1xuICAgICAgICBwcmV2aW91c1NvdXJjZSA9IHNvdXJjZUlkeDtcblxuICAgICAgICAvLyBsaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQgaW4gU291cmNlTWFwIHNwZWMgdmVyc2lvbiAzXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsTGluZSk7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmUgLSAxO1xuXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbENvbHVtbik7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgIG5hbWVJZHggPSB0aGlzLl9uYW1lcy5pbmRleE9mKG1hcHBpbmcubmFtZSk7XG4gICAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKG5hbWVJZHggLSBwcmV2aW91c05hbWUpO1xuICAgICAgICAgIHByZXZpb3VzTmFtZSA9IG5hbWVJZHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IG5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGFTb3VyY2VzLCBhU291cmNlUm9vdCkge1xuICAgIHJldHVybiBhU291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoYVNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKGFTb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgdmFyIGtleSA9IHV0aWwudG9TZXRTdHJpbmcoc291cmNlKTtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLCBrZXkpXG4gICAgICAgID8gdGhpcy5fc291cmNlc0NvbnRlbnRzW2tleV1cbiAgICAgICAgOiBudWxsO1xuICAgIH0sIHRoaXMpO1xuICB9O1xuXG4vKipcbiAqIEV4dGVybmFsaXplIHRoZSBzb3VyY2UgbWFwLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvSlNPTiA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl90b0pTT04oKSB7XG4gICAgdmFyIG1hcCA9IHtcbiAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sXG4gICAgICBzb3VyY2VzOiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgIG5hbWVzOiB0aGlzLl9uYW1lcy50b0FycmF5KCksXG4gICAgICBtYXBwaW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKVxuICAgIH07XG4gICAgaWYgKHRoaXMuX2ZpbGUgIT0gbnVsbCkge1xuICAgICAgbWFwLmZpbGUgPSB0aGlzLl9maWxlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IHRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobWFwLnNvdXJjZXMsIG1hcC5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9O1xuXG4vKipcbiAqIFJlbmRlciB0aGUgc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQgdG8gYSBzdHJpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUudG9TdHJpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcEdlbmVyYXRvciA9IFNvdXJjZU1hcEdlbmVyYXRvcjtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LXZscS5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaGFzTmF0aXZlTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gaGFzTmF0aXZlTWFwID8gbmV3IE1hcCgpIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBoYXNOYXRpdmVNYXAgPyB0aGlzLl9zZXQuc2l6ZSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gaGFzTmF0aXZlTWFwID8gYVN0ciA6IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhc05hdGl2ZU1hcCA/IHRoaXMuaGFzKGFTdHIpIDogaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgICAgdGhpcy5fc2V0LnNldChhU3RyLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXMoYVN0cik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuX3NldC5nZXQoYVN0cik7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2FycmF5LXNldC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9tYXBwaW5nLWxpc3QuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvcXVpY2stc29ydC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF07XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW5vZGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/source-map/dist/source-map.js b/tools/node_modules/eslint/node_modules/source-map/dist/source-map.js deleted file mode 100644 index 4e630e29434..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/dist/source-map.js +++ /dev/null @@ -1,3090 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["sourceMap"] = factory(); - else - root["sourceMap"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; - -/******/ // The require function -/******/ function __webpack_require__(moduleId) { - -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; - -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; - -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - -/******/ // Flag the module as loaded -/******/ module.loaded = true; - -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } - - -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; - -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; - -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; - -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - * Copyright 2009-2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE.txt or: - * http://opensource.org/licenses/BSD-3-Clause - */ - exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; - exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; - exports.SourceNode = __webpack_require__(10).SourceNode; - - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var base64VLQ = __webpack_require__(2); - var util = __webpack_require__(4); - var ArraySet = __webpack_require__(5).ArraySet; - var MappingList = __webpack_require__(6).MappingList; - - /** - * An instance of the SourceMapGenerator represents a source map which is - * being built incrementally. You may pass an object with the following - * properties: - * - * - file: The filename of the generated source. - * - sourceRoot: A root for all relative URLs in this source map. - */ - function SourceMapGenerator(aArgs) { - if (!aArgs) { - aArgs = {}; - } - this._file = util.getArg(aArgs, 'file', null); - this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); - this._skipValidation = util.getArg(aArgs, 'skipValidation', false); - this._sources = new ArraySet(); - this._names = new ArraySet(); - this._mappings = new MappingList(); - this._sourcesContents = null; - } - - SourceMapGenerator.prototype._version = 3; - - /** - * Creates a new SourceMapGenerator based on a SourceMapConsumer - * - * @param aSourceMapConsumer The SourceMap. - */ - SourceMapGenerator.fromSourceMap = - function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { - var sourceRoot = aSourceMapConsumer.sourceRoot; - var generator = new SourceMapGenerator({ - file: aSourceMapConsumer.file, - sourceRoot: sourceRoot - }); - aSourceMapConsumer.eachMapping(function (mapping) { - var newMapping = { - generated: { - line: mapping.generatedLine, - column: mapping.generatedColumn - } - }; - - if (mapping.source != null) { - newMapping.source = mapping.source; - if (sourceRoot != null) { - newMapping.source = util.relative(sourceRoot, newMapping.source); - } - - newMapping.original = { - line: mapping.originalLine, - column: mapping.originalColumn - }; - - if (mapping.name != null) { - newMapping.name = mapping.name; - } - } - - generator.addMapping(newMapping); - }); - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - generator.setSourceContent(sourceFile, content); - } - }); - return generator; - }; - - /** - * Add a single mapping from original source line and column to the generated - * source's line and column for this source map being created. The mapping - * object should have the following properties: - * - * - generated: An object with the generated line and column positions. - * - original: An object with the original line and column positions. - * - source: The original source file (relative to the sourceRoot). - * - name: An optional original token name for this mapping. - */ - SourceMapGenerator.prototype.addMapping = - function SourceMapGenerator_addMapping(aArgs) { - var generated = util.getArg(aArgs, 'generated'); - var original = util.getArg(aArgs, 'original', null); - var source = util.getArg(aArgs, 'source', null); - var name = util.getArg(aArgs, 'name', null); - - if (!this._skipValidation) { - this._validateMapping(generated, original, source, name); - } - - if (source != null) { - source = String(source); - if (!this._sources.has(source)) { - this._sources.add(source); - } - } - - if (name != null) { - name = String(name); - if (!this._names.has(name)) { - this._names.add(name); - } - } - - this._mappings.add({ - generatedLine: generated.line, - generatedColumn: generated.column, - originalLine: original != null && original.line, - originalColumn: original != null && original.column, - source: source, - name: name - }); - }; - - /** - * Set the source content for a source file. - */ - SourceMapGenerator.prototype.setSourceContent = - function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { - var source = aSourceFile; - if (this._sourceRoot != null) { - source = util.relative(this._sourceRoot, source); - } - - if (aSourceContent != null) { - // Add the source content to the _sourcesContents map. - // Create a new _sourcesContents map if the property is null. - if (!this._sourcesContents) { - this._sourcesContents = Object.create(null); - } - this._sourcesContents[util.toSetString(source)] = aSourceContent; - } else if (this._sourcesContents) { - // Remove the source file from the _sourcesContents map. - // If the _sourcesContents map is empty, set the property to null. - delete this._sourcesContents[util.toSetString(source)]; - if (Object.keys(this._sourcesContents).length === 0) { - this._sourcesContents = null; - } - } - }; - - /** - * Applies the mappings of a sub-source-map for a specific source file to the - * source map being generated. Each mapping to the supplied source file is - * rewritten using the supplied source map. Note: The resolution for the - * resulting mappings is the minimium of this map and the supplied map. - * - * @param aSourceMapConsumer The source map to be applied. - * @param aSourceFile Optional. The filename of the source file. - * If omitted, SourceMapConsumer's file property will be used. - * @param aSourceMapPath Optional. The dirname of the path to the source map - * to be applied. If relative, it is relative to the SourceMapConsumer. - * This parameter is needed when the two source maps aren't in the same - * directory, and the source map to be applied contains relative source - * paths. If so, those relative source paths need to be rewritten - * relative to the SourceMapGenerator. - */ - SourceMapGenerator.prototype.applySourceMap = - function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { - var sourceFile = aSourceFile; - // If aSourceFile is omitted, we will use the file property of the SourceMap - if (aSourceFile == null) { - if (aSourceMapConsumer.file == null) { - throw new Error( - 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + - 'or the source map\'s "file" property. Both were omitted.' - ); - } - sourceFile = aSourceMapConsumer.file; - } - var sourceRoot = this._sourceRoot; - // Make "sourceFile" relative if an absolute Url is passed. - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - // Applying the SourceMap can add and remove items from the sources and - // the names array. - var newSources = new ArraySet(); - var newNames = new ArraySet(); - - // Find mappings for the "sourceFile" - this._mappings.unsortedForEach(function (mapping) { - if (mapping.source === sourceFile && mapping.originalLine != null) { - // Check if it can be mapped by the source map, then update the mapping. - var original = aSourceMapConsumer.originalPositionFor({ - line: mapping.originalLine, - column: mapping.originalColumn - }); - if (original.source != null) { - // Copy mapping - mapping.source = original.source; - if (aSourceMapPath != null) { - mapping.source = util.join(aSourceMapPath, mapping.source) - } - if (sourceRoot != null) { - mapping.source = util.relative(sourceRoot, mapping.source); - } - mapping.originalLine = original.line; - mapping.originalColumn = original.column; - if (original.name != null) { - mapping.name = original.name; - } - } - } - - var source = mapping.source; - if (source != null && !newSources.has(source)) { - newSources.add(source); - } - - var name = mapping.name; - if (name != null && !newNames.has(name)) { - newNames.add(name); - } - - }, this); - this._sources = newSources; - this._names = newNames; - - // Copy sourcesContents of applied map. - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aSourceMapPath != null) { - sourceFile = util.join(aSourceMapPath, sourceFile); - } - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - this.setSourceContent(sourceFile, content); - } - }, this); - }; - - /** - * A mapping can have one of the three levels of data: - * - * 1. Just the generated position. - * 2. The Generated position, original position, and original source. - * 3. Generated and original position, original source, as well as a name - * token. - * - * To maintain consistency, we validate that any new mapping being added falls - * in to one of these categories. - */ - SourceMapGenerator.prototype._validateMapping = - function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, - aName) { - // When aOriginal is truthy but has empty values for .line and .column, - // it is most likely a programmer error. In this case we throw a very - // specific error message to try to guide them the right way. - // For example: https://github.com/Polymer/polymer-bundler/pull/519 - if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { - throw new Error( - 'original.line and original.column are not numbers -- you probably meant to omit ' + - 'the original mapping entirely and only map the generated position. If so, pass ' + - 'null for the original mapping instead of an object with empty or null values.' - ); - } - - if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aGenerated.line > 0 && aGenerated.column >= 0 - && !aOriginal && !aSource && !aName) { - // Case 1. - return; - } - else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aOriginal && 'line' in aOriginal && 'column' in aOriginal - && aGenerated.line > 0 && aGenerated.column >= 0 - && aOriginal.line > 0 && aOriginal.column >= 0 - && aSource) { - // Cases 2 and 3. - return; - } - else { - throw new Error('Invalid mapping: ' + JSON.stringify({ - generated: aGenerated, - source: aSource, - original: aOriginal, - name: aName - })); - } - }; - - /** - * Serialize the accumulated mappings in to the stream of base 64 VLQs - * specified by the source map format. - */ - SourceMapGenerator.prototype._serializeMappings = - function SourceMapGenerator_serializeMappings() { - var previousGeneratedColumn = 0; - var previousGeneratedLine = 1; - var previousOriginalColumn = 0; - var previousOriginalLine = 0; - var previousName = 0; - var previousSource = 0; - var result = ''; - var next; - var mapping; - var nameIdx; - var sourceIdx; - - var mappings = this._mappings.toArray(); - for (var i = 0, len = mappings.length; i < len; i++) { - mapping = mappings[i]; - next = '' - - if (mapping.generatedLine !== previousGeneratedLine) { - previousGeneratedColumn = 0; - while (mapping.generatedLine !== previousGeneratedLine) { - next += ';'; - previousGeneratedLine++; - } - } - else { - if (i > 0) { - if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { - continue; - } - next += ','; - } - } - - next += base64VLQ.encode(mapping.generatedColumn - - previousGeneratedColumn); - previousGeneratedColumn = mapping.generatedColumn; - - if (mapping.source != null) { - sourceIdx = this._sources.indexOf(mapping.source); - next += base64VLQ.encode(sourceIdx - previousSource); - previousSource = sourceIdx; - - // lines are stored 0-based in SourceMap spec version 3 - next += base64VLQ.encode(mapping.originalLine - 1 - - previousOriginalLine); - previousOriginalLine = mapping.originalLine - 1; - - next += base64VLQ.encode(mapping.originalColumn - - previousOriginalColumn); - previousOriginalColumn = mapping.originalColumn; - - if (mapping.name != null) { - nameIdx = this._names.indexOf(mapping.name); - next += base64VLQ.encode(nameIdx - previousName); - previousName = nameIdx; - } - } - - result += next; - } - - return result; - }; - - SourceMapGenerator.prototype._generateSourcesContent = - function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { - return aSources.map(function (source) { - if (!this._sourcesContents) { - return null; - } - if (aSourceRoot != null) { - source = util.relative(aSourceRoot, source); - } - var key = util.toSetString(source); - return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) - ? this._sourcesContents[key] - : null; - }, this); - }; - - /** - * Externalize the source map. - */ - SourceMapGenerator.prototype.toJSON = - function SourceMapGenerator_toJSON() { - var map = { - version: this._version, - sources: this._sources.toArray(), - names: this._names.toArray(), - mappings: this._serializeMappings() - }; - if (this._file != null) { - map.file = this._file; - } - if (this._sourceRoot != null) { - map.sourceRoot = this._sourceRoot; - } - if (this._sourcesContents) { - map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); - } - - return map; - }; - - /** - * Render the source map being generated to a string. - */ - SourceMapGenerator.prototype.toString = - function SourceMapGenerator_toString() { - return JSON.stringify(this.toJSON()); - }; - - exports.SourceMapGenerator = SourceMapGenerator; - - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - * - * Based on the Base 64 VLQ implementation in Closure Compiler: - * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java - * - * Copyright 2011 The Closure Compiler Authors. All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - var base64 = __webpack_require__(3); - - // A single base 64 digit can contain 6 bits of data. For the base 64 variable - // length quantities we use in the source map spec, the first bit is the sign, - // the next four bits are the actual value, and the 6th bit is the - // continuation bit. The continuation bit tells us whether there are more - // digits in this value following this digit. - // - // Continuation - // | Sign - // | | - // V V - // 101011 - - var VLQ_BASE_SHIFT = 5; - - // binary: 100000 - var VLQ_BASE = 1 << VLQ_BASE_SHIFT; - - // binary: 011111 - var VLQ_BASE_MASK = VLQ_BASE - 1; - - // binary: 100000 - var VLQ_CONTINUATION_BIT = VLQ_BASE; - - /** - * Converts from a two-complement value to a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) - * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) - */ - function toVLQSigned(aValue) { - return aValue < 0 - ? ((-aValue) << 1) + 1 - : (aValue << 1) + 0; - } - - /** - * Converts to a two-complement value from a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 - * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 - */ - function fromVLQSigned(aValue) { - var isNegative = (aValue & 1) === 1; - var shifted = aValue >> 1; - return isNegative - ? -shifted - : shifted; - } - - /** - * Returns the base 64 VLQ encoded value. - */ - exports.encode = function base64VLQ_encode(aValue) { - var encoded = ""; - var digit; - - var vlq = toVLQSigned(aValue); - - do { - digit = vlq & VLQ_BASE_MASK; - vlq >>>= VLQ_BASE_SHIFT; - if (vlq > 0) { - // There are still more digits in this value, so we must make sure the - // continuation bit is marked. - digit |= VLQ_CONTINUATION_BIT; - } - encoded += base64.encode(digit); - } while (vlq > 0); - - return encoded; - }; - - /** - * Decodes the next base 64 VLQ value from the given string and returns the - * value and the rest of the string via the out parameter. - */ - exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { - var strLen = aStr.length; - var result = 0; - var shift = 0; - var continuation, digit; - - do { - if (aIndex >= strLen) { - throw new Error("Expected more digits in base 64 VLQ value."); - } - - digit = base64.decode(aStr.charCodeAt(aIndex++)); - if (digit === -1) { - throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); - } - - continuation = !!(digit & VLQ_CONTINUATION_BIT); - digit &= VLQ_BASE_MASK; - result = result + (digit << shift); - shift += VLQ_BASE_SHIFT; - } while (continuation); - - aOutParam.value = fromVLQSigned(result); - aOutParam.rest = aIndex; - }; - - -/***/ }), -/* 3 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); - - /** - * Encode an integer in the range of 0 to 63 to a single base 64 digit. - */ - exports.encode = function (number) { - if (0 <= number && number < intToCharMap.length) { - return intToCharMap[number]; - } - throw new TypeError("Must be between 0 and 63: " + number); - }; - - /** - * Decode a single base 64 character code digit to an integer. Returns -1 on - * failure. - */ - exports.decode = function (charCode) { - var bigA = 65; // 'A' - var bigZ = 90; // 'Z' - - var littleA = 97; // 'a' - var littleZ = 122; // 'z' - - var zero = 48; // '0' - var nine = 57; // '9' - - var plus = 43; // '+' - var slash = 47; // '/' - - var littleOffset = 26; - var numberOffset = 52; - - // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ - if (bigA <= charCode && charCode <= bigZ) { - return (charCode - bigA); - } - - // 26 - 51: abcdefghijklmnopqrstuvwxyz - if (littleA <= charCode && charCode <= littleZ) { - return (charCode - littleA + littleOffset); - } - - // 52 - 61: 0123456789 - if (zero <= charCode && charCode <= nine) { - return (charCode - zero + numberOffset); - } - - // 62: + - if (charCode == plus) { - return 62; - } - - // 63: / - if (charCode == slash) { - return 63; - } - - // Invalid base64 digit. - return -1; - }; - - -/***/ }), -/* 4 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - /** - * This is a helper function for getting values from parameter/options - * objects. - * - * @param args The object we are extracting values from - * @param name The name of the property we are getting. - * @param defaultValue An optional value to return if the property is missing - * from the object. If this is not specified and the property is missing, an - * error will be thrown. - */ - function getArg(aArgs, aName, aDefaultValue) { - if (aName in aArgs) { - return aArgs[aName]; - } else if (arguments.length === 3) { - return aDefaultValue; - } else { - throw new Error('"' + aName + '" is a required argument.'); - } - } - exports.getArg = getArg; - - var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; - var dataUrlRegexp = /^data:.+\,.+$/; - - function urlParse(aUrl) { - var match = aUrl.match(urlRegexp); - if (!match) { - return null; - } - return { - scheme: match[1], - auth: match[2], - host: match[3], - port: match[4], - path: match[5] - }; - } - exports.urlParse = urlParse; - - function urlGenerate(aParsedUrl) { - var url = ''; - if (aParsedUrl.scheme) { - url += aParsedUrl.scheme + ':'; - } - url += '//'; - if (aParsedUrl.auth) { - url += aParsedUrl.auth + '@'; - } - if (aParsedUrl.host) { - url += aParsedUrl.host; - } - if (aParsedUrl.port) { - url += ":" + aParsedUrl.port - } - if (aParsedUrl.path) { - url += aParsedUrl.path; - } - return url; - } - exports.urlGenerate = urlGenerate; - - /** - * Normalizes a path, or the path portion of a URL: - * - * - Replaces consecutive slashes with one slash. - * - Removes unnecessary '.' parts. - * - Removes unnecessary '/..' parts. - * - * Based on code in the Node.js 'path' core module. - * - * @param aPath The path or url to normalize. - */ - function normalize(aPath) { - var path = aPath; - var url = urlParse(aPath); - if (url) { - if (!url.path) { - return aPath; - } - path = url.path; - } - var isAbsolute = exports.isAbsolute(path); - - var parts = path.split(/\/+/); - for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { - part = parts[i]; - if (part === '.') { - parts.splice(i, 1); - } else if (part === '..') { - up++; - } else if (up > 0) { - if (part === '') { - // The first part is blank if the path is absolute. Trying to go - // above the root is a no-op. Therefore we can remove all '..' parts - // directly after the root. - parts.splice(i + 1, up); - up = 0; - } else { - parts.splice(i, 2); - up--; - } - } - } - path = parts.join('/'); - - if (path === '') { - path = isAbsolute ? '/' : '.'; - } - - if (url) { - url.path = path; - return urlGenerate(url); - } - return path; - } - exports.normalize = normalize; - - /** - * Joins two paths/URLs. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be joined with the root. - * - * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a - * scheme-relative URL: Then the scheme of aRoot, if any, is prepended - * first. - * - Otherwise aPath is a path. If aRoot is a URL, then its path portion - * is updated with the result and aRoot is returned. Otherwise the result - * is returned. - * - If aPath is absolute, the result is aPath. - * - Otherwise the two paths are joined with a slash. - * - Joining for example 'http://' and 'www.example.com' is also supported. - */ - function join(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - if (aPath === "") { - aPath = "."; - } - var aPathUrl = urlParse(aPath); - var aRootUrl = urlParse(aRoot); - if (aRootUrl) { - aRoot = aRootUrl.path || '/'; - } - - // `join(foo, '//www.example.org')` - if (aPathUrl && !aPathUrl.scheme) { - if (aRootUrl) { - aPathUrl.scheme = aRootUrl.scheme; - } - return urlGenerate(aPathUrl); - } - - if (aPathUrl || aPath.match(dataUrlRegexp)) { - return aPath; - } - - // `join('http://', 'www.example.com')` - if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { - aRootUrl.host = aPath; - return urlGenerate(aRootUrl); - } - - var joined = aPath.charAt(0) === '/' - ? aPath - : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); - - if (aRootUrl) { - aRootUrl.path = joined; - return urlGenerate(aRootUrl); - } - return joined; - } - exports.join = join; - - exports.isAbsolute = function (aPath) { - return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); - }; - - /** - * Make a path relative to a URL or another path. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be made relative to aRoot. - */ - function relative(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - - aRoot = aRoot.replace(/\/$/, ''); - - // It is possible for the path to be above the root. In this case, simply - // checking whether the root is a prefix of the path won't work. Instead, we - // need to remove components from the root one by one, until either we find - // a prefix that fits, or we run out of components to remove. - var level = 0; - while (aPath.indexOf(aRoot + '/') !== 0) { - var index = aRoot.lastIndexOf("/"); - if (index < 0) { - return aPath; - } - - // If the only part of the root that is left is the scheme (i.e. http://, - // file:///, etc.), one or more slashes (/), or simply nothing at all, we - // have exhausted all components, so the path is not relative to the root. - aRoot = aRoot.slice(0, index); - if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { - return aPath; - } - - ++level; - } - - // Make sure we add a "../" for each component we removed from the root. - return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); - } - exports.relative = relative; - - var supportsNullProto = (function () { - var obj = Object.create(null); - return !('__proto__' in obj); - }()); - - function identity (s) { - return s; - } - - /** - * Because behavior goes wacky when you set `__proto__` on objects, we - * have to prefix all the strings in our set with an arbitrary character. - * - * See https://github.com/mozilla/source-map/pull/31 and - * https://github.com/mozilla/source-map/issues/30 - * - * @param String aStr - */ - function toSetString(aStr) { - if (isProtoString(aStr)) { - return '$' + aStr; - } - - return aStr; - } - exports.toSetString = supportsNullProto ? identity : toSetString; - - function fromSetString(aStr) { - if (isProtoString(aStr)) { - return aStr.slice(1); - } - - return aStr; - } - exports.fromSetString = supportsNullProto ? identity : fromSetString; - - function isProtoString(s) { - if (!s) { - return false; - } - - var length = s.length; - - if (length < 9 /* "__proto__".length */) { - return false; - } - - if (s.charCodeAt(length - 1) !== 95 /* '_' */ || - s.charCodeAt(length - 2) !== 95 /* '_' */ || - s.charCodeAt(length - 3) !== 111 /* 'o' */ || - s.charCodeAt(length - 4) !== 116 /* 't' */ || - s.charCodeAt(length - 5) !== 111 /* 'o' */ || - s.charCodeAt(length - 6) !== 114 /* 'r' */ || - s.charCodeAt(length - 7) !== 112 /* 'p' */ || - s.charCodeAt(length - 8) !== 95 /* '_' */ || - s.charCodeAt(length - 9) !== 95 /* '_' */) { - return false; - } - - for (var i = length - 10; i >= 0; i--) { - if (s.charCodeAt(i) !== 36 /* '$' */) { - return false; - } - } - - return true; - } - - /** - * Comparator between two mappings where the original positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same original source/line/column, but different generated - * line and column the same. Useful when searching for a mapping with a - * stubbed out mapping. - */ - function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { - var cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0 || onlyCompareOriginal) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - } - exports.compareByOriginalPositions = compareByOriginalPositions; - - /** - * Comparator between two mappings with deflated source and name indices where - * the generated positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same generated line and column, but different - * source/name/original line and column the same. Useful when searching for a - * mapping with a stubbed out mapping. - */ - function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0 || onlyCompareGenerated) { - return cmp; - } - - cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - } - exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; - - function strcmp(aStr1, aStr2) { - if (aStr1 === aStr2) { - return 0; - } - - if (aStr1 > aStr2) { - return 1; - } - - return -1; - } - - /** - * Comparator between two mappings with inflated source and name strings where - * the generated positions are compared. - */ - function compareByGeneratedPositionsInflated(mappingA, mappingB) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return strcmp(mappingA.name, mappingB.name); - } - exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; - - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - var has = Object.prototype.hasOwnProperty; - var hasNativeMap = typeof Map !== "undefined"; - - /** - * A data structure which is a combination of an array and a set. Adding a new - * member is O(1), testing for membership is O(1), and finding the index of an - * element is O(1). Removing elements from the set is not supported. Only - * strings are supported for membership. - */ - function ArraySet() { - this._array = []; - this._set = hasNativeMap ? new Map() : Object.create(null); - } - - /** - * Static method for creating ArraySet instances from an existing array. - */ - ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { - var set = new ArraySet(); - for (var i = 0, len = aArray.length; i < len; i++) { - set.add(aArray[i], aAllowDuplicates); - } - return set; - }; - - /** - * Return how many unique items are in this ArraySet. If duplicates have been - * added, than those do not count towards the size. - * - * @returns Number - */ - ArraySet.prototype.size = function ArraySet_size() { - return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; - }; - - /** - * Add the given string to this set. - * - * @param String aStr - */ - ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { - var sStr = hasNativeMap ? aStr : util.toSetString(aStr); - var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); - var idx = this._array.length; - if (!isDuplicate || aAllowDuplicates) { - this._array.push(aStr); - } - if (!isDuplicate) { - if (hasNativeMap) { - this._set.set(aStr, idx); - } else { - this._set[sStr] = idx; - } - } - }; - - /** - * Is the given string a member of this set? - * - * @param String aStr - */ - ArraySet.prototype.has = function ArraySet_has(aStr) { - if (hasNativeMap) { - return this._set.has(aStr); - } else { - var sStr = util.toSetString(aStr); - return has.call(this._set, sStr); - } - }; - - /** - * What is the index of the given string in the array? - * - * @param String aStr - */ - ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { - if (hasNativeMap) { - var idx = this._set.get(aStr); - if (idx >= 0) { - return idx; - } - } else { - var sStr = util.toSetString(aStr); - if (has.call(this._set, sStr)) { - return this._set[sStr]; - } - } - - throw new Error('"' + aStr + '" is not in the set.'); - }; - - /** - * What is the element at the given index? - * - * @param Number aIdx - */ - ArraySet.prototype.at = function ArraySet_at(aIdx) { - if (aIdx >= 0 && aIdx < this._array.length) { - return this._array[aIdx]; - } - throw new Error('No element indexed by ' + aIdx); - }; - - /** - * Returns the array representation of this set (which has the proper indices - * indicated by indexOf). Note that this is a copy of the internal array used - * for storing the members so that no one can mess with internal state. - */ - ArraySet.prototype.toArray = function ArraySet_toArray() { - return this._array.slice(); - }; - - exports.ArraySet = ArraySet; - - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2014 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - - /** - * Determine whether mappingB is after mappingA with respect to generated - * position. - */ - function generatedPositionAfter(mappingA, mappingB) { - // Optimized for most common case - var lineA = mappingA.generatedLine; - var lineB = mappingB.generatedLine; - var columnA = mappingA.generatedColumn; - var columnB = mappingB.generatedColumn; - return lineB > lineA || lineB == lineA && columnB >= columnA || - util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; - } - - /** - * A data structure to provide a sorted view of accumulated mappings in a - * performance conscious manner. It trades a neglibable overhead in general - * case for a large speedup in case of mappings being added in order. - */ - function MappingList() { - this._array = []; - this._sorted = true; - // Serves as infimum - this._last = {generatedLine: -1, generatedColumn: 0}; - } - - /** - * Iterate through internal items. This method takes the same arguments that - * `Array.prototype.forEach` takes. - * - * NOTE: The order of the mappings is NOT guaranteed. - */ - MappingList.prototype.unsortedForEach = - function MappingList_forEach(aCallback, aThisArg) { - this._array.forEach(aCallback, aThisArg); - }; - - /** - * Add the given source mapping. - * - * @param Object aMapping - */ - MappingList.prototype.add = function MappingList_add(aMapping) { - if (generatedPositionAfter(this._last, aMapping)) { - this._last = aMapping; - this._array.push(aMapping); - } else { - this._sorted = false; - this._array.push(aMapping); - } - }; - - /** - * Returns the flat, sorted array of mappings. The mappings are sorted by - * generated position. - * - * WARNING: This method returns internal data without copying, for - * performance. The return value must NOT be mutated, and should be treated as - * an immutable borrow. If you want to take ownership, you must make your own - * copy. - */ - MappingList.prototype.toArray = function MappingList_toArray() { - if (!this._sorted) { - this._array.sort(util.compareByGeneratedPositionsInflated); - this._sorted = true; - } - return this._array; - }; - - exports.MappingList = MappingList; - - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - var binarySearch = __webpack_require__(8); - var ArraySet = __webpack_require__(5).ArraySet; - var base64VLQ = __webpack_require__(2); - var quickSort = __webpack_require__(9).quickSort; - - function SourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - return sourceMap.sections != null - ? new IndexedSourceMapConsumer(sourceMap) - : new BasicSourceMapConsumer(sourceMap); - } - - SourceMapConsumer.fromSourceMap = function(aSourceMap) { - return BasicSourceMapConsumer.fromSourceMap(aSourceMap); - } - - /** - * The version of the source mapping spec that we are consuming. - */ - SourceMapConsumer.prototype._version = 3; - - // `__generatedMappings` and `__originalMappings` are arrays that hold the - // parsed mapping coordinates from the source map's "mappings" attribute. They - // are lazily instantiated, accessed via the `_generatedMappings` and - // `_originalMappings` getters respectively, and we only parse the mappings - // and create these arrays once queried for a source location. We jump through - // these hoops because there can be many thousands of mappings, and parsing - // them is expensive, so we only want to do it if we must. - // - // Each object in the arrays is of the form: - // - // { - // generatedLine: The line number in the generated code, - // generatedColumn: The column number in the generated code, - // source: The path to the original source file that generated this - // chunk of code, - // originalLine: The line number in the original source that - // corresponds to this chunk of generated code, - // originalColumn: The column number in the original source that - // corresponds to this chunk of generated code, - // name: The name of the original symbol which generated this chunk of - // code. - // } - // - // All properties except for `generatedLine` and `generatedColumn` can be - // `null`. - // - // `_generatedMappings` is ordered by the generated positions. - // - // `_originalMappings` is ordered by the original positions. - - SourceMapConsumer.prototype.__generatedMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { - get: function () { - if (!this.__generatedMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__generatedMappings; - } - }); - - SourceMapConsumer.prototype.__originalMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { - get: function () { - if (!this.__originalMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__originalMappings; - } - }); - - SourceMapConsumer.prototype._charIsMappingSeparator = - function SourceMapConsumer_charIsMappingSeparator(aStr, index) { - var c = aStr.charAt(index); - return c === ";" || c === ","; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - SourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - throw new Error("Subclasses must implement _parseMappings"); - }; - - SourceMapConsumer.GENERATED_ORDER = 1; - SourceMapConsumer.ORIGINAL_ORDER = 2; - - SourceMapConsumer.GREATEST_LOWER_BOUND = 1; - SourceMapConsumer.LEAST_UPPER_BOUND = 2; - - /** - * Iterate over each mapping between an original source/line/column and a - * generated line/column in this source map. - * - * @param Function aCallback - * The function that is called with each mapping. - * @param Object aContext - * Optional. If specified, this object will be the value of `this` every - * time that `aCallback` is called. - * @param aOrder - * Either `SourceMapConsumer.GENERATED_ORDER` or - * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to - * iterate over the mappings sorted by the generated file's line/column - * order or the original's source/line/column order, respectively. Defaults to - * `SourceMapConsumer.GENERATED_ORDER`. - */ - SourceMapConsumer.prototype.eachMapping = - function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { - var context = aContext || null; - var order = aOrder || SourceMapConsumer.GENERATED_ORDER; - - var mappings; - switch (order) { - case SourceMapConsumer.GENERATED_ORDER: - mappings = this._generatedMappings; - break; - case SourceMapConsumer.ORIGINAL_ORDER: - mappings = this._originalMappings; - break; - default: - throw new Error("Unknown order of iteration."); - } - - var sourceRoot = this.sourceRoot; - mappings.map(function (mapping) { - var source = mapping.source === null ? null : this._sources.at(mapping.source); - if (source != null && sourceRoot != null) { - source = util.join(sourceRoot, source); - } - return { - source: source, - generatedLine: mapping.generatedLine, - generatedColumn: mapping.generatedColumn, - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: mapping.name === null ? null : this._names.at(mapping.name) - }; - }, this).forEach(aCallback, context); - }; - - /** - * Returns all generated line and column information for the original source, - * line, and column provided. If no column is provided, returns all mappings - * corresponding to a either the line we are searching for or the next - * closest line that has any mappings. Otherwise, returns all mappings - * corresponding to the given line and either the column we are searching for - * or the next closest column that has any offsets. - * - * The only argument is an object with the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: Optional. the column number in the original source. - * - * and an array of objects is returned, each with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - SourceMapConsumer.prototype.allGeneratedPositionsFor = - function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { - var line = util.getArg(aArgs, 'line'); - - // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping - // returns the index of the closest mapping less than the needle. By - // setting needle.originalColumn to 0, we thus find the last mapping for - // the given line, provided such a mapping exists. - var needle = { - source: util.getArg(aArgs, 'source'), - originalLine: line, - originalColumn: util.getArg(aArgs, 'column', 0) - }; - - if (this.sourceRoot != null) { - needle.source = util.relative(this.sourceRoot, needle.source); - } - if (!this._sources.has(needle.source)) { - return []; - } - needle.source = this._sources.indexOf(needle.source); - - var mappings = []; - - var index = this._findMapping(needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - binarySearch.LEAST_UPPER_BOUND); - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (aArgs.column === undefined) { - var originalLine = mapping.originalLine; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we found. Since - // mappings are sorted, this is guaranteed to find all mappings for - // the line we found. - while (mapping && mapping.originalLine === originalLine) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } else { - var originalColumn = mapping.originalColumn; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we were searching for. - // Since mappings are sorted, this is guaranteed to find all mappings for - // the line we are searching for. - while (mapping && - mapping.originalLine === line && - mapping.originalColumn == originalColumn) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } - } - - return mappings; - }; - - exports.SourceMapConsumer = SourceMapConsumer; - - /** - * A BasicSourceMapConsumer instance represents a parsed source map which we can - * query for information about the original file positions by giving it a file - * position in the generated source. - * - * The only parameter is the raw source map (either as a JSON string, or - * already parsed to an object). According to the spec, source maps have the - * following attributes: - * - * - version: Which version of the source map spec this map is following. - * - sources: An array of URLs to the original source files. - * - names: An array of identifiers which can be referrenced by individual mappings. - * - sourceRoot: Optional. The URL root from which all sources are relative. - * - sourcesContent: Optional. An array of contents of the original source files. - * - mappings: A string of base64 VLQs which contain the actual mappings. - * - file: Optional. The generated file this source map is associated with. - * - * Here is an example source map, taken from the source map spec[0]: - * - * { - * version : 3, - * file: "out.js", - * sourceRoot : "", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AA,AB;;ABCDE;" - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# - */ - function BasicSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sources = util.getArg(sourceMap, 'sources'); - // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which - // requires the array) to play nice here. - var names = util.getArg(sourceMap, 'names', []); - var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); - var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); - var mappings = util.getArg(sourceMap, 'mappings'); - var file = util.getArg(sourceMap, 'file', null); - - // Once again, Sass deviates from the spec and supplies the version as a - // string rather than a number, so we use loose equality checking here. - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - sources = sources - .map(String) - // Some source maps produce relative source paths like "./foo.js" instead of - // "foo.js". Normalize these first so that future comparisons will succeed. - // See bugzil.la/1090768. - .map(util.normalize) - // Always ensure that absolute sources are internally stored relative to - // the source root, if the source root is absolute. Not doing this would - // be particularly problematic when the source root is a prefix of the - // source (valid, but why??). See github issue #199 and bugzil.la/1188982. - .map(function (source) { - return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) - ? util.relative(sourceRoot, source) - : source; - }); - - // Pass `true` below to allow duplicate names and sources. While source maps - // are intended to be compressed and deduplicated, the TypeScript compiler - // sometimes generates source maps with duplicates in them. See Github issue - // #72 and bugzil.la/889492. - this._names = ArraySet.fromArray(names.map(String), true); - this._sources = ArraySet.fromArray(sources, true); - - this.sourceRoot = sourceRoot; - this.sourcesContent = sourcesContent; - this._mappings = mappings; - this.file = file; - } - - BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; - - /** - * Create a BasicSourceMapConsumer from a SourceMapGenerator. - * - * @param SourceMapGenerator aSourceMap - * The source map that will be consumed. - * @returns BasicSourceMapConsumer - */ - BasicSourceMapConsumer.fromSourceMap = - function SourceMapConsumer_fromSourceMap(aSourceMap) { - var smc = Object.create(BasicSourceMapConsumer.prototype); - - var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); - var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); - smc.sourceRoot = aSourceMap._sourceRoot; - smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), - smc.sourceRoot); - smc.file = aSourceMap._file; - - // Because we are modifying the entries (by converting string sources and - // names to indices into the sources and names ArraySets), we have to make - // a copy of the entry or else bad things happen. Shared mutable state - // strikes again! See github issue #191. - - var generatedMappings = aSourceMap._mappings.toArray().slice(); - var destGeneratedMappings = smc.__generatedMappings = []; - var destOriginalMappings = smc.__originalMappings = []; - - for (var i = 0, length = generatedMappings.length; i < length; i++) { - var srcMapping = generatedMappings[i]; - var destMapping = new Mapping; - destMapping.generatedLine = srcMapping.generatedLine; - destMapping.generatedColumn = srcMapping.generatedColumn; - - if (srcMapping.source) { - destMapping.source = sources.indexOf(srcMapping.source); - destMapping.originalLine = srcMapping.originalLine; - destMapping.originalColumn = srcMapping.originalColumn; - - if (srcMapping.name) { - destMapping.name = names.indexOf(srcMapping.name); - } - - destOriginalMappings.push(destMapping); - } - - destGeneratedMappings.push(destMapping); - } - - quickSort(smc.__originalMappings, util.compareByOriginalPositions); - - return smc; - }; - - /** - * The version of the source mapping spec that we are consuming. - */ - BasicSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { - get: function () { - return this._sources.toArray().map(function (s) { - return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; - }, this); - } - }); - - /** - * Provide the JIT with a nice shape / hidden class. - */ - function Mapping() { - this.generatedLine = 0; - this.generatedColumn = 0; - this.source = null; - this.originalLine = null; - this.originalColumn = null; - this.name = null; - } - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - BasicSourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - var generatedLine = 1; - var previousGeneratedColumn = 0; - var previousOriginalLine = 0; - var previousOriginalColumn = 0; - var previousSource = 0; - var previousName = 0; - var length = aStr.length; - var index = 0; - var cachedSegments = {}; - var temp = {}; - var originalMappings = []; - var generatedMappings = []; - var mapping, str, segment, end, value; - - while (index < length) { - if (aStr.charAt(index) === ';') { - generatedLine++; - index++; - previousGeneratedColumn = 0; - } - else if (aStr.charAt(index) === ',') { - index++; - } - else { - mapping = new Mapping(); - mapping.generatedLine = generatedLine; - - // Because each offset is encoded relative to the previous one, - // many segments often have the same encoding. We can exploit this - // fact by caching the parsed variable length fields of each segment, - // allowing us to avoid a second parse if we encounter the same - // segment again. - for (end = index; end < length; end++) { - if (this._charIsMappingSeparator(aStr, end)) { - break; - } - } - str = aStr.slice(index, end); - - segment = cachedSegments[str]; - if (segment) { - index += str.length; - } else { - segment = []; - while (index < end) { - base64VLQ.decode(aStr, index, temp); - value = temp.value; - index = temp.rest; - segment.push(value); - } - - if (segment.length === 2) { - throw new Error('Found a source, but no line and column'); - } - - if (segment.length === 3) { - throw new Error('Found a source and line, but no column'); - } - - cachedSegments[str] = segment; - } - - // Generated column. - mapping.generatedColumn = previousGeneratedColumn + segment[0]; - previousGeneratedColumn = mapping.generatedColumn; - - if (segment.length > 1) { - // Original source. - mapping.source = previousSource + segment[1]; - previousSource += segment[1]; - - // Original line. - mapping.originalLine = previousOriginalLine + segment[2]; - previousOriginalLine = mapping.originalLine; - // Lines are stored 0-based - mapping.originalLine += 1; - - // Original column. - mapping.originalColumn = previousOriginalColumn + segment[3]; - previousOriginalColumn = mapping.originalColumn; - - if (segment.length > 4) { - // Original name. - mapping.name = previousName + segment[4]; - previousName += segment[4]; - } - } - - generatedMappings.push(mapping); - if (typeof mapping.originalLine === 'number') { - originalMappings.push(mapping); - } - } - } - - quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); - this.__generatedMappings = generatedMappings; - - quickSort(originalMappings, util.compareByOriginalPositions); - this.__originalMappings = originalMappings; - }; - - /** - * Find the mapping that best matches the hypothetical "needle" mapping that - * we are searching for in the given "haystack" of mappings. - */ - BasicSourceMapConsumer.prototype._findMapping = - function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, - aColumnName, aComparator, aBias) { - // To return the position we are searching for, we must first find the - // mapping for the given position and then return the opposite position it - // points to. Because the mappings are sorted, we can use binary search to - // find the best mapping. - - if (aNeedle[aLineName] <= 0) { - throw new TypeError('Line must be greater than or equal to 1, got ' - + aNeedle[aLineName]); - } - if (aNeedle[aColumnName] < 0) { - throw new TypeError('Column must be greater than or equal to 0, got ' - + aNeedle[aColumnName]); - } - - return binarySearch.search(aNeedle, aMappings, aComparator, aBias); - }; - - /** - * Compute the last column for each generated mapping. The last column is - * inclusive. - */ - BasicSourceMapConsumer.prototype.computeColumnSpans = - function SourceMapConsumer_computeColumnSpans() { - for (var index = 0; index < this._generatedMappings.length; ++index) { - var mapping = this._generatedMappings[index]; - - // Mappings do not contain a field for the last generated columnt. We - // can come up with an optimistic estimate, however, by assuming that - // mappings are contiguous (i.e. given two consecutive mappings, the - // first mapping ends where the second one starts). - if (index + 1 < this._generatedMappings.length) { - var nextMapping = this._generatedMappings[index + 1]; - - if (mapping.generatedLine === nextMapping.generatedLine) { - mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; - continue; - } - } - - // The last mapping for each line spans the entire line. - mapping.lastGeneratedColumn = Infinity; - } - }; - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - BasicSourceMapConsumer.prototype.originalPositionFor = - function SourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._generatedMappings, - "generatedLine", - "generatedColumn", - util.compareByGeneratedPositionsDeflated, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._generatedMappings[index]; - - if (mapping.generatedLine === needle.generatedLine) { - var source = util.getArg(mapping, 'source', null); - if (source !== null) { - source = this._sources.at(source); - if (this.sourceRoot != null) { - source = util.join(this.sourceRoot, source); - } - } - var name = util.getArg(mapping, 'name', null); - if (name !== null) { - name = this._names.at(name); - } - return { - source: source, - line: util.getArg(mapping, 'originalLine', null), - column: util.getArg(mapping, 'originalColumn', null), - name: name - }; - } - } - - return { - source: null, - line: null, - column: null, - name: null - }; - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - BasicSourceMapConsumer.prototype.hasContentsOfAllSources = - function BasicSourceMapConsumer_hasContentsOfAllSources() { - if (!this.sourcesContent) { - return false; - } - return this.sourcesContent.length >= this._sources.size() && - !this.sourcesContent.some(function (sc) { return sc == null; }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - BasicSourceMapConsumer.prototype.sourceContentFor = - function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - if (!this.sourcesContent) { - return null; - } - - if (this.sourceRoot != null) { - aSource = util.relative(this.sourceRoot, aSource); - } - - if (this._sources.has(aSource)) { - return this.sourcesContent[this._sources.indexOf(aSource)]; - } - - var url; - if (this.sourceRoot != null - && (url = util.urlParse(this.sourceRoot))) { - // XXX: file:// URIs and absolute paths lead to unexpected behavior for - // many users. We can help them out when they expect file:// URIs to - // behave like it would if they were running a local HTTP server. See - // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. - var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); - if (url.scheme == "file" - && this._sources.has(fileUriAbsPath)) { - return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] - } - - if ((!url.path || url.path == "/") - && this._sources.has("/" + aSource)) { - return this.sourcesContent[this._sources.indexOf("/" + aSource)]; - } - } - - // This function is used recursively from - // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we - // don't want to throw if we can't find the source - we just want to - // return null, so we provide a flag to exit gracefully. - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - BasicSourceMapConsumer.prototype.generatedPositionFor = - function SourceMapConsumer_generatedPositionFor(aArgs) { - var source = util.getArg(aArgs, 'source'); - if (this.sourceRoot != null) { - source = util.relative(this.sourceRoot, source); - } - if (!this._sources.has(source)) { - return { - line: null, - column: null, - lastColumn: null - }; - } - source = this._sources.indexOf(source); - - var needle = { - source: source, - originalLine: util.getArg(aArgs, 'line'), - originalColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (mapping.source === needle.source) { - return { - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }; - } - } - - return { - line: null, - column: null, - lastColumn: null - }; - }; - - exports.BasicSourceMapConsumer = BasicSourceMapConsumer; - - /** - * An IndexedSourceMapConsumer instance represents a parsed source map which - * we can query for information. It differs from BasicSourceMapConsumer in - * that it takes "indexed" source maps (i.e. ones with a "sections" field) as - * input. - * - * The only parameter is a raw source map (either as a JSON string, or already - * parsed to an object). According to the spec for indexed source maps, they - * have the following attributes: - * - * - version: Which version of the source map spec this map is following. - * - file: Optional. The generated file this source map is associated with. - * - sections: A list of section definitions. - * - * Each value under the "sections" field has two fields: - * - offset: The offset into the original specified at which this section - * begins to apply, defined as an object with a "line" and "column" - * field. - * - map: A source map definition. This source map could also be indexed, - * but doesn't have to be. - * - * Instead of the "map" field, it's also possible to have a "url" field - * specifying a URL to retrieve a source map from, but that's currently - * unsupported. - * - * Here's an example source map, taken from the source map spec[0], but - * modified to omit a section which uses the "url" field. - * - * { - * version : 3, - * file: "app.js", - * sections: [{ - * offset: {line:100, column:10}, - * map: { - * version : 3, - * file: "section.js", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AAAA,E;;ABCDE;" - * } - * }], - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt - */ - function IndexedSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sections = util.getArg(sourceMap, 'sections'); - - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - this._sources = new ArraySet(); - this._names = new ArraySet(); - - var lastOffset = { - line: -1, - column: 0 - }; - this._sections = sections.map(function (s) { - if (s.url) { - // The url field will require support for asynchronicity. - // See https://github.com/mozilla/source-map/issues/16 - throw new Error('Support for url field in sections not implemented.'); - } - var offset = util.getArg(s, 'offset'); - var offsetLine = util.getArg(offset, 'line'); - var offsetColumn = util.getArg(offset, 'column'); - - if (offsetLine < lastOffset.line || - (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { - throw new Error('Section offsets must be ordered and non-overlapping.'); - } - lastOffset = offset; - - return { - generatedOffset: { - // The offset fields are 0-based, but we use 1-based indices when - // encoding/decoding from VLQ. - generatedLine: offsetLine + 1, - generatedColumn: offsetColumn + 1 - }, - consumer: new SourceMapConsumer(util.getArg(s, 'map')) - } - }); - } - - IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; - - /** - * The version of the source mapping spec that we are consuming. - */ - IndexedSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { - get: function () { - var sources = []; - for (var i = 0; i < this._sections.length; i++) { - for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { - sources.push(this._sections[i].consumer.sources[j]); - } - } - return sources; - } - }); - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - IndexedSourceMapConsumer.prototype.originalPositionFor = - function IndexedSourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - // Find the section containing the generated position we're trying to map - // to an original position. - var sectionIndex = binarySearch.search(needle, this._sections, - function(needle, section) { - var cmp = needle.generatedLine - section.generatedOffset.generatedLine; - if (cmp) { - return cmp; - } - - return (needle.generatedColumn - - section.generatedOffset.generatedColumn); - }); - var section = this._sections[sectionIndex]; - - if (!section) { - return { - source: null, - line: null, - column: null, - name: null - }; - } - - return section.consumer.originalPositionFor({ - line: needle.generatedLine - - (section.generatedOffset.generatedLine - 1), - column: needle.generatedColumn - - (section.generatedOffset.generatedLine === needle.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - bias: aArgs.bias - }); - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = - function IndexedSourceMapConsumer_hasContentsOfAllSources() { - return this._sections.every(function (s) { - return s.consumer.hasContentsOfAllSources(); - }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - IndexedSourceMapConsumer.prototype.sourceContentFor = - function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - var content = section.consumer.sourceContentFor(aSource, true); - if (content) { - return content; - } - } - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - IndexedSourceMapConsumer.prototype.generatedPositionFor = - function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - // Only consider this section if the requested source is in the list of - // sources of the consumer. - if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { - continue; - } - var generatedPosition = section.consumer.generatedPositionFor(aArgs); - if (generatedPosition) { - var ret = { - line: generatedPosition.line + - (section.generatedOffset.generatedLine - 1), - column: generatedPosition.column + - (section.generatedOffset.generatedLine === generatedPosition.line - ? section.generatedOffset.generatedColumn - 1 - : 0) - }; - return ret; - } - } - - return { - line: null, - column: null - }; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - IndexedSourceMapConsumer.prototype._parseMappings = - function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { - this.__generatedMappings = []; - this.__originalMappings = []; - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - var sectionMappings = section.consumer._generatedMappings; - for (var j = 0; j < sectionMappings.length; j++) { - var mapping = sectionMappings[j]; - - var source = section.consumer._sources.at(mapping.source); - if (section.consumer.sourceRoot !== null) { - source = util.join(section.consumer.sourceRoot, source); - } - this._sources.add(source); - source = this._sources.indexOf(source); - - var name = section.consumer._names.at(mapping.name); - this._names.add(name); - name = this._names.indexOf(name); - - // The mappings coming from the consumer for the section have - // generated positions relative to the start of the section, so we - // need to offset them to be relative to the start of the concatenated - // generated file. - var adjustedMapping = { - source: source, - generatedLine: mapping.generatedLine + - (section.generatedOffset.generatedLine - 1), - generatedColumn: mapping.generatedColumn + - (section.generatedOffset.generatedLine === mapping.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: name - }; - - this.__generatedMappings.push(adjustedMapping); - if (typeof adjustedMapping.originalLine === 'number') { - this.__originalMappings.push(adjustedMapping); - } - } - } - - quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); - quickSort(this.__originalMappings, util.compareByOriginalPositions); - }; - - exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; - - -/***/ }), -/* 8 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - exports.GREATEST_LOWER_BOUND = 1; - exports.LEAST_UPPER_BOUND = 2; - - /** - * Recursive implementation of binary search. - * - * @param aLow Indices here and lower do not contain the needle. - * @param aHigh Indices here and higher do not contain the needle. - * @param aNeedle The element being searched for. - * @param aHaystack The non-empty array being searched. - * @param aCompare Function which takes two elements and returns -1, 0, or 1. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - */ - function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { - // This function terminates when one of the following is true: - // - // 1. We find the exact element we are looking for. - // - // 2. We did not find the exact element, but we can return the index of - // the next-closest element. - // - // 3. We did not find the exact element, and there is no next-closest - // element than the one we are searching for, so we return -1. - var mid = Math.floor((aHigh - aLow) / 2) + aLow; - var cmp = aCompare(aNeedle, aHaystack[mid], true); - if (cmp === 0) { - // Found the element we are looking for. - return mid; - } - else if (cmp > 0) { - // Our needle is greater than aHaystack[mid]. - if (aHigh - mid > 1) { - // The element is in the upper half. - return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); - } - - // The exact needle element was not found in this haystack. Determine if - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return aHigh < aHaystack.length ? aHigh : -1; - } else { - return mid; - } - } - else { - // Our needle is less than aHaystack[mid]. - if (mid - aLow > 1) { - // The element is in the lower half. - return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); - } - - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return mid; - } else { - return aLow < 0 ? -1 : aLow; - } - } - } - - /** - * This is an implementation of binary search which will always try and return - * the index of the closest element if there is no exact hit. This is because - * mappings between original and generated line/col pairs are single points, - * and there is an implicit region between each of them, so a miss just means - * that you aren't on the very start of a region. - * - * @param aNeedle The element you are looking for. - * @param aHaystack The array that is being searched. - * @param aCompare A function which takes the needle and an element in the - * array and returns -1, 0, or 1 depending on whether the needle is less - * than, equal to, or greater than the element, respectively. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. - */ - exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { - if (aHaystack.length === 0) { - return -1; - } - - var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, - aCompare, aBias || exports.GREATEST_LOWER_BOUND); - if (index < 0) { - return -1; - } - - // We have found either the exact element, or the next-closest element than - // the one we are searching for. However, there may be more than one such - // element. Make sure we always return the smallest of these. - while (index - 1 >= 0) { - if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { - break; - } - --index; - } - - return index; - }; - - -/***/ }), -/* 9 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - // It turns out that some (most?) JavaScript engines don't self-host - // `Array.prototype.sort`. This makes sense because C++ will likely remain - // faster than JS when doing raw CPU-intensive sorting. However, when using a - // custom comparator function, calling back and forth between the VM's C++ and - // JIT'd JS is rather slow *and* loses JIT type information, resulting in - // worse generated code for the comparator function than would be optimal. In - // fact, when sorting with a comparator, these costs outweigh the benefits of - // sorting in C++. By using our own JS-implemented Quick Sort (below), we get - // a ~3500ms mean speed-up in `bench/bench.html`. - - /** - * Swap the elements indexed by `x` and `y` in the array `ary`. - * - * @param {Array} ary - * The array. - * @param {Number} x - * The index of the first item. - * @param {Number} y - * The index of the second item. - */ - function swap(ary, x, y) { - var temp = ary[x]; - ary[x] = ary[y]; - ary[y] = temp; - } - - /** - * Returns a random integer within the range `low .. high` inclusive. - * - * @param {Number} low - * The lower bound on the range. - * @param {Number} high - * The upper bound on the range. - */ - function randomIntInRange(low, high) { - return Math.round(low + (Math.random() * (high - low))); - } - - /** - * The Quick Sort algorithm. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - * @param {Number} p - * Start index of the array - * @param {Number} r - * End index of the array - */ - function doQuickSort(ary, comparator, p, r) { - // If our lower bound is less than our upper bound, we (1) partition the - // array into two pieces and (2) recurse on each half. If it is not, this is - // the empty array and our base case. - - if (p < r) { - // (1) Partitioning. - // - // The partitioning chooses a pivot between `p` and `r` and moves all - // elements that are less than or equal to the pivot to the before it, and - // all the elements that are greater than it after it. The effect is that - // once partition is done, the pivot is in the exact place it will be when - // the array is put in sorted order, and it will not need to be moved - // again. This runs in O(n) time. - - // Always choose a random pivot so that an input array which is reverse - // sorted does not cause O(n^2) running time. - var pivotIndex = randomIntInRange(p, r); - var i = p - 1; - - swap(ary, pivotIndex, r); - var pivot = ary[r]; - - // Immediately after `j` is incremented in this loop, the following hold - // true: - // - // * Every element in `ary[p .. i]` is less than or equal to the pivot. - // - // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. - for (var j = p; j < r; j++) { - if (comparator(ary[j], pivot) <= 0) { - i += 1; - swap(ary, i, j); - } - } - - swap(ary, i + 1, j); - var q = i + 1; - - // (2) Recurse on each half. - - doQuickSort(ary, comparator, p, q - 1); - doQuickSort(ary, comparator, q + 1, r); - } - } - - /** - * Sort the given array in-place with the given comparator function. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - */ - exports.quickSort = function (ary, comparator) { - doQuickSort(ary, comparator, 0, ary.length - 1); - }; - - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; - var util = __webpack_require__(4); - - // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other - // operating systems these days (capturing the result). - var REGEX_NEWLINE = /(\r?\n)/; - - // Newline character code for charCodeAt() comparisons - var NEWLINE_CODE = 10; - - // Private symbol for identifying `SourceNode`s when multiple versions of - // the source-map library are loaded. This MUST NOT CHANGE across - // versions! - var isSourceNode = "$$$isSourceNode$$$"; - - /** - * SourceNodes provide a way to abstract over interpolating/concatenating - * snippets of generated JavaScript source code while maintaining the line and - * column information associated with the original source code. - * - * @param aLine The original line number. - * @param aColumn The original column number. - * @param aSource The original source's filename. - * @param aChunks Optional. An array of strings which are snippets of - * generated JS, or other SourceNodes. - * @param aName The original identifier. - */ - function SourceNode(aLine, aColumn, aSource, aChunks, aName) { - this.children = []; - this.sourceContents = {}; - this.line = aLine == null ? null : aLine; - this.column = aColumn == null ? null : aColumn; - this.source = aSource == null ? null : aSource; - this.name = aName == null ? null : aName; - this[isSourceNode] = true; - if (aChunks != null) this.add(aChunks); - } - - /** - * Creates a SourceNode from generated code and a SourceMapConsumer. - * - * @param aGeneratedCode The generated code - * @param aSourceMapConsumer The SourceMap for the generated code - * @param aRelativePath Optional. The path that relative sources in the - * SourceMapConsumer should be relative to. - */ - SourceNode.fromStringWithSourceMap = - function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { - // The SourceNode we want to fill with the generated code - // and the SourceMap - var node = new SourceNode(); - - // All even indices of this array are one line of the generated code, - // while all odd indices are the newlines between two adjacent lines - // (since `REGEX_NEWLINE` captures its match). - // Processed fragments are accessed by calling `shiftNextLine`. - var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); - var remainingLinesIndex = 0; - var shiftNextLine = function() { - var lineContents = getNextLine(); - // The last line of a file might not have a newline. - var newLine = getNextLine() || ""; - return lineContents + newLine; - - function getNextLine() { - return remainingLinesIndex < remainingLines.length ? - remainingLines[remainingLinesIndex++] : undefined; - } - }; - - // We need to remember the position of "remainingLines" - var lastGeneratedLine = 1, lastGeneratedColumn = 0; - - // The generate SourceNodes we need a code range. - // To extract it current and last mapping is used. - // Here we store the last mapping. - var lastMapping = null; - - aSourceMapConsumer.eachMapping(function (mapping) { - if (lastMapping !== null) { - // We add the code from "lastMapping" to "mapping": - // First check if there is a new line in between. - if (lastGeneratedLine < mapping.generatedLine) { - // Associate first line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - lastGeneratedLine++; - lastGeneratedColumn = 0; - // The remaining code is added without mapping - } else { - // There is no new line in between. - // Associate the code between "lastGeneratedColumn" and - // "mapping.generatedColumn" with "lastMapping" - var nextLine = remainingLines[remainingLinesIndex]; - var code = nextLine.substr(0, mapping.generatedColumn - - lastGeneratedColumn); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - - lastGeneratedColumn); - lastGeneratedColumn = mapping.generatedColumn; - addMappingWithCode(lastMapping, code); - // No more remaining code, continue - lastMapping = mapping; - return; - } - } - // We add the generated code until the first mapping - // to the SourceNode without any mapping. - // Each line is added as separate string. - while (lastGeneratedLine < mapping.generatedLine) { - node.add(shiftNextLine()); - lastGeneratedLine++; - } - if (lastGeneratedColumn < mapping.generatedColumn) { - var nextLine = remainingLines[remainingLinesIndex]; - node.add(nextLine.substr(0, mapping.generatedColumn)); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); - lastGeneratedColumn = mapping.generatedColumn; - } - lastMapping = mapping; - }, this); - // We have processed all mappings. - if (remainingLinesIndex < remainingLines.length) { - if (lastMapping) { - // Associate the remaining code in the current line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - } - // and add the remaining lines without any mapping - node.add(remainingLines.splice(remainingLinesIndex).join("")); - } - - // Copy sourcesContent into SourceNode - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aRelativePath != null) { - sourceFile = util.join(aRelativePath, sourceFile); - } - node.setSourceContent(sourceFile, content); - } - }); - - return node; - - function addMappingWithCode(mapping, code) { - if (mapping === null || mapping.source === undefined) { - node.add(code); - } else { - var source = aRelativePath - ? util.join(aRelativePath, mapping.source) - : mapping.source; - node.add(new SourceNode(mapping.originalLine, - mapping.originalColumn, - source, - code, - mapping.name)); - } - } - }; - - /** - * Add a chunk of generated JS to this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.add = function SourceNode_add(aChunk) { - if (Array.isArray(aChunk)) { - aChunk.forEach(function (chunk) { - this.add(chunk); - }, this); - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - if (aChunk) { - this.children.push(aChunk); - } - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; - }; - - /** - * Add a chunk of generated JS to the beginning of this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { - if (Array.isArray(aChunk)) { - for (var i = aChunk.length-1; i >= 0; i--) { - this.prepend(aChunk[i]); - } - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - this.children.unshift(aChunk); - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; - }; - - /** - * Walk over the tree of JS snippets in this node and its children. The - * walking function is called once for each snippet of JS and is passed that - * snippet and the its original associated source's line/column location. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walk = function SourceNode_walk(aFn) { - var chunk; - for (var i = 0, len = this.children.length; i < len; i++) { - chunk = this.children[i]; - if (chunk[isSourceNode]) { - chunk.walk(aFn); - } - else { - if (chunk !== '') { - aFn(chunk, { source: this.source, - line: this.line, - column: this.column, - name: this.name }); - } - } - } - }; - - /** - * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between - * each of `this.children`. - * - * @param aSep The separator. - */ - SourceNode.prototype.join = function SourceNode_join(aSep) { - var newChildren; - var i; - var len = this.children.length; - if (len > 0) { - newChildren = []; - for (i = 0; i < len-1; i++) { - newChildren.push(this.children[i]); - newChildren.push(aSep); - } - newChildren.push(this.children[i]); - this.children = newChildren; - } - return this; - }; - - /** - * Call String.prototype.replace on the very right-most source snippet. Useful - * for trimming whitespace from the end of a source node, etc. - * - * @param aPattern The pattern to replace. - * @param aReplacement The thing to replace the pattern with. - */ - SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { - var lastChild = this.children[this.children.length - 1]; - if (lastChild[isSourceNode]) { - lastChild.replaceRight(aPattern, aReplacement); - } - else if (typeof lastChild === 'string') { - this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); - } - else { - this.children.push(''.replace(aPattern, aReplacement)); - } - return this; - }; - - /** - * Set the source content for a source file. This will be added to the SourceMapGenerator - * in the sourcesContent field. - * - * @param aSourceFile The filename of the source file - * @param aSourceContent The content of the source file - */ - SourceNode.prototype.setSourceContent = - function SourceNode_setSourceContent(aSourceFile, aSourceContent) { - this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; - }; - - /** - * Walk over the tree of SourceNodes. The walking function is called for each - * source file content and is passed the filename and source content. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walkSourceContents = - function SourceNode_walkSourceContents(aFn) { - for (var i = 0, len = this.children.length; i < len; i++) { - if (this.children[i][isSourceNode]) { - this.children[i].walkSourceContents(aFn); - } - } - - var sources = Object.keys(this.sourceContents); - for (var i = 0, len = sources.length; i < len; i++) { - aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); - } - }; - - /** - * Return the string representation of this source node. Walks over the tree - * and concatenates all the various snippets together to one string. - */ - SourceNode.prototype.toString = function SourceNode_toString() { - var str = ""; - this.walk(function (chunk) { - str += chunk; - }); - return str; - }; - - /** - * Returns the string representation of this source node along with a source - * map. - */ - SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { - var generated = { - code: "", - line: 1, - column: 0 - }; - var map = new SourceMapGenerator(aArgs); - var sourceMappingActive = false; - var lastOriginalSource = null; - var lastOriginalLine = null; - var lastOriginalColumn = null; - var lastOriginalName = null; - this.walk(function (chunk, original) { - generated.code += chunk; - if (original.source !== null - && original.line !== null - && original.column !== null) { - if(lastOriginalSource !== original.source - || lastOriginalLine !== original.line - || lastOriginalColumn !== original.column - || lastOriginalName !== original.name) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - lastOriginalSource = original.source; - lastOriginalLine = original.line; - lastOriginalColumn = original.column; - lastOriginalName = original.name; - sourceMappingActive = true; - } else if (sourceMappingActive) { - map.addMapping({ - generated: { - line: generated.line, - column: generated.column - } - }); - lastOriginalSource = null; - sourceMappingActive = false; - } - for (var idx = 0, length = chunk.length; idx < length; idx++) { - if (chunk.charCodeAt(idx) === NEWLINE_CODE) { - generated.line++; - generated.column = 0; - // Mappings end at eol - if (idx + 1 === length) { - lastOriginalSource = null; - sourceMappingActive = false; - } else if (sourceMappingActive) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - } else { - generated.column++; - } - } - }); - this.walkSourceContents(function (sourceFile, sourceContent) { - map.setSourceContent(sourceFile, sourceContent); - }); - - return { code: generated.code, map: map }; - }; - - exports.SourceNode = SourceNode; - - -/***/ }) -/******/ ]) -}); -; \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/source-map/dist/source-map.min.js b/tools/node_modules/eslint/node_modules/source-map/dist/source-map.min.js deleted file mode 100644 index f2a46bd0253..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/dist/source-map.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.sourceMap=n():e.sourceMap=n()}(this,function(){return function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){n.SourceMapGenerator=r(1).SourceMapGenerator,n.SourceMapConsumer=r(7).SourceMapConsumer,n.SourceNode=r(10).SourceNode},function(e,n,r){function t(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceRoot=i.getArg(e,"sourceRoot",null),this._skipValidation=i.getArg(e,"skipValidation",!1),this._sources=new s,this._names=new s,this._mappings=new a,this._sourcesContents=null}var o=r(2),i=r(4),s=r(5).ArraySet,a=r(6).MappingList;t.prototype._version=3,t.fromSourceMap=function(e){var n=e.sourceRoot,r=new t({file:e.file,sourceRoot:n});return e.eachMapping(function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(t.source=e.source,null!=n&&(t.source=i.relative(n,t.source)),t.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(t.name=e.name)),r.addMapping(t)}),e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&r.setSourceContent(n,t)}),r},t.prototype.addMapping=function(e){var n=i.getArg(e,"generated"),r=i.getArg(e,"original",null),t=i.getArg(e,"source",null),o=i.getArg(e,"name",null);this._skipValidation||this._validateMapping(n,r,t,o),null!=t&&(t=String(t),this._sources.has(t)||this._sources.add(t)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:n.line,generatedColumn:n.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:t,name:o})},t.prototype.setSourceContent=function(e,n){var r=e;null!=this._sourceRoot&&(r=i.relative(this._sourceRoot,r)),null!=n?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[i.toSetString(r)]=n):this._sourcesContents&&(delete this._sourcesContents[i.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},t.prototype.applySourceMap=function(e,n,r){var t=n;if(null==n){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');t=e.file}var o=this._sourceRoot;null!=o&&(t=i.relative(o,t));var a=new s,u=new s;this._mappings.unsortedForEach(function(n){if(n.source===t&&null!=n.originalLine){var s=e.originalPositionFor({line:n.originalLine,column:n.originalColumn});null!=s.source&&(n.source=s.source,null!=r&&(n.source=i.join(r,n.source)),null!=o&&(n.source=i.relative(o,n.source)),n.originalLine=s.line,n.originalColumn=s.column,null!=s.name&&(n.name=s.name))}var l=n.source;null==l||a.has(l)||a.add(l);var c=n.name;null==c||u.has(c)||u.add(c)},this),this._sources=a,this._names=u,e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&(null!=r&&(n=i.join(r,n)),null!=o&&(n=i.relative(o,n)),this.setSourceContent(n,t))},this)},t.prototype._validateMapping=function(e,n,r,t){if(n&&"number"!=typeof n.line&&"number"!=typeof n.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||n||r||t)&&!(e&&"line"in e&&"column"in e&&n&&"line"in n&&"column"in n&&e.line>0&&e.column>=0&&n.line>0&&n.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:n,name:t}))},t.prototype._serializeMappings=function(){for(var e,n,r,t,s=0,a=1,u=0,l=0,c=0,g=0,p="",h=this._mappings.toArray(),f=0,d=h.length;f0){if(!i.compareByGeneratedPositionsInflated(n,h[f-1]))continue;e+=","}e+=o.encode(n.generatedColumn-s),s=n.generatedColumn,null!=n.source&&(t=this._sources.indexOf(n.source),e+=o.encode(t-g),g=t,e+=o.encode(n.originalLine-1-l),l=n.originalLine-1,e+=o.encode(n.originalColumn-u),u=n.originalColumn,null!=n.name&&(r=this._names.indexOf(n.name),e+=o.encode(r-c),c=r)),p+=e}return p},t.prototype._generateSourcesContent=function(e,n){return e.map(function(e){if(!this._sourcesContents)return null;null!=n&&(e=i.relative(n,e));var r=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},t.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},t.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=t},function(e,n,r){function t(e){return e<0?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(3),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),a===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function f(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=f(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:f(e.name,n.name)))))}n.getArg=r;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},n.relative=a;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=h,n.compareByGeneratedPositionsInflated=d},function(e,n,r){function t(){this._array=[],this._set=s?new Map:Object.create(null)}var o=r(4),i=Object.prototype.hasOwnProperty,s="undefined"!=typeof Map;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0)return n}else{var r=o.toSetString(e);if(i.call(this._set,r))return this._set[r]}throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&er||t==r&&s>=o||i.compareByGeneratedPositionsInflated(e,n)<=0}function o(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var i=r(4);o.prototype.unsortedForEach=function(e,n){this._array.forEach(e,n)},o.prototype.add=function(e){t(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},o.prototype.toArray=function(){return this._sorted||(this._array.sort(i.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=o},function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;p1&&(r.source=d+o[1],d+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=m+o[4],m+=o[4])),S.push(r),"number"==typeof r.originalLine&&A.push(r)}g(S,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=S,g(A,a.compareByOriginalPositions),this.__originalMappings=A},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(i=0;n--)this.prepend(e[n]);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},t.prototype.walk=function(e){for(var n,r=0,t=this.children.length;r0){for(n=[],r=0;r= 0) { - return idx; - } - } else { - var sStr = util.toSetString(aStr); - if (has.call(this._set, sStr)) { - return this._set[sStr]; - } - } - - throw new Error('"' + aStr + '" is not in the set.'); -}; - -/** - * What is the element at the given index? - * - * @param Number aIdx - */ -ArraySet.prototype.at = function ArraySet_at(aIdx) { - if (aIdx >= 0 && aIdx < this._array.length) { - return this._array[aIdx]; - } - throw new Error('No element indexed by ' + aIdx); -}; - -/** - * Returns the array representation of this set (which has the proper indices - * indicated by indexOf). Note that this is a copy of the internal array used - * for storing the members so that no one can mess with internal state. - */ -ArraySet.prototype.toArray = function ArraySet_toArray() { - return this._array.slice(); -}; - -exports.ArraySet = ArraySet; diff --git a/tools/node_modules/eslint/node_modules/source-map/lib/base64-vlq.js b/tools/node_modules/eslint/node_modules/source-map/lib/base64-vlq.js deleted file mode 100644 index 612b404018e..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/lib/base64-vlq.js +++ /dev/null @@ -1,140 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - * - * Based on the Base 64 VLQ implementation in Closure Compiler: - * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java - * - * Copyright 2011 The Closure Compiler Authors. All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -var base64 = require('./base64'); - -// A single base 64 digit can contain 6 bits of data. For the base 64 variable -// length quantities we use in the source map spec, the first bit is the sign, -// the next four bits are the actual value, and the 6th bit is the -// continuation bit. The continuation bit tells us whether there are more -// digits in this value following this digit. -// -// Continuation -// | Sign -// | | -// V V -// 101011 - -var VLQ_BASE_SHIFT = 5; - -// binary: 100000 -var VLQ_BASE = 1 << VLQ_BASE_SHIFT; - -// binary: 011111 -var VLQ_BASE_MASK = VLQ_BASE - 1; - -// binary: 100000 -var VLQ_CONTINUATION_BIT = VLQ_BASE; - -/** - * Converts from a two-complement value to a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) - * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) - */ -function toVLQSigned(aValue) { - return aValue < 0 - ? ((-aValue) << 1) + 1 - : (aValue << 1) + 0; -} - -/** - * Converts to a two-complement value from a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 - * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 - */ -function fromVLQSigned(aValue) { - var isNegative = (aValue & 1) === 1; - var shifted = aValue >> 1; - return isNegative - ? -shifted - : shifted; -} - -/** - * Returns the base 64 VLQ encoded value. - */ -exports.encode = function base64VLQ_encode(aValue) { - var encoded = ""; - var digit; - - var vlq = toVLQSigned(aValue); - - do { - digit = vlq & VLQ_BASE_MASK; - vlq >>>= VLQ_BASE_SHIFT; - if (vlq > 0) { - // There are still more digits in this value, so we must make sure the - // continuation bit is marked. - digit |= VLQ_CONTINUATION_BIT; - } - encoded += base64.encode(digit); - } while (vlq > 0); - - return encoded; -}; - -/** - * Decodes the next base 64 VLQ value from the given string and returns the - * value and the rest of the string via the out parameter. - */ -exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { - var strLen = aStr.length; - var result = 0; - var shift = 0; - var continuation, digit; - - do { - if (aIndex >= strLen) { - throw new Error("Expected more digits in base 64 VLQ value."); - } - - digit = base64.decode(aStr.charCodeAt(aIndex++)); - if (digit === -1) { - throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); - } - - continuation = !!(digit & VLQ_CONTINUATION_BIT); - digit &= VLQ_BASE_MASK; - result = result + (digit << shift); - shift += VLQ_BASE_SHIFT; - } while (continuation); - - aOutParam.value = fromVLQSigned(result); - aOutParam.rest = aIndex; -}; diff --git a/tools/node_modules/eslint/node_modules/source-map/lib/base64.js b/tools/node_modules/eslint/node_modules/source-map/lib/base64.js deleted file mode 100644 index 8aa86b30264..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/lib/base64.js +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); - -/** - * Encode an integer in the range of 0 to 63 to a single base 64 digit. - */ -exports.encode = function (number) { - if (0 <= number && number < intToCharMap.length) { - return intToCharMap[number]; - } - throw new TypeError("Must be between 0 and 63: " + number); -}; - -/** - * Decode a single base 64 character code digit to an integer. Returns -1 on - * failure. - */ -exports.decode = function (charCode) { - var bigA = 65; // 'A' - var bigZ = 90; // 'Z' - - var littleA = 97; // 'a' - var littleZ = 122; // 'z' - - var zero = 48; // '0' - var nine = 57; // '9' - - var plus = 43; // '+' - var slash = 47; // '/' - - var littleOffset = 26; - var numberOffset = 52; - - // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ - if (bigA <= charCode && charCode <= bigZ) { - return (charCode - bigA); - } - - // 26 - 51: abcdefghijklmnopqrstuvwxyz - if (littleA <= charCode && charCode <= littleZ) { - return (charCode - littleA + littleOffset); - } - - // 52 - 61: 0123456789 - if (zero <= charCode && charCode <= nine) { - return (charCode - zero + numberOffset); - } - - // 62: + - if (charCode == plus) { - return 62; - } - - // 63: / - if (charCode == slash) { - return 63; - } - - // Invalid base64 digit. - return -1; -}; diff --git a/tools/node_modules/eslint/node_modules/source-map/lib/binary-search.js b/tools/node_modules/eslint/node_modules/source-map/lib/binary-search.js deleted file mode 100644 index 010ac941e15..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/lib/binary-search.js +++ /dev/null @@ -1,111 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -exports.GREATEST_LOWER_BOUND = 1; -exports.LEAST_UPPER_BOUND = 2; - -/** - * Recursive implementation of binary search. - * - * @param aLow Indices here and lower do not contain the needle. - * @param aHigh Indices here and higher do not contain the needle. - * @param aNeedle The element being searched for. - * @param aHaystack The non-empty array being searched. - * @param aCompare Function which takes two elements and returns -1, 0, or 1. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - */ -function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { - // This function terminates when one of the following is true: - // - // 1. We find the exact element we are looking for. - // - // 2. We did not find the exact element, but we can return the index of - // the next-closest element. - // - // 3. We did not find the exact element, and there is no next-closest - // element than the one we are searching for, so we return -1. - var mid = Math.floor((aHigh - aLow) / 2) + aLow; - var cmp = aCompare(aNeedle, aHaystack[mid], true); - if (cmp === 0) { - // Found the element we are looking for. - return mid; - } - else if (cmp > 0) { - // Our needle is greater than aHaystack[mid]. - if (aHigh - mid > 1) { - // The element is in the upper half. - return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); - } - - // The exact needle element was not found in this haystack. Determine if - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return aHigh < aHaystack.length ? aHigh : -1; - } else { - return mid; - } - } - else { - // Our needle is less than aHaystack[mid]. - if (mid - aLow > 1) { - // The element is in the lower half. - return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); - } - - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return mid; - } else { - return aLow < 0 ? -1 : aLow; - } - } -} - -/** - * This is an implementation of binary search which will always try and return - * the index of the closest element if there is no exact hit. This is because - * mappings between original and generated line/col pairs are single points, - * and there is an implicit region between each of them, so a miss just means - * that you aren't on the very start of a region. - * - * @param aNeedle The element you are looking for. - * @param aHaystack The array that is being searched. - * @param aCompare A function which takes the needle and an element in the - * array and returns -1, 0, or 1 depending on whether the needle is less - * than, equal to, or greater than the element, respectively. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. - */ -exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { - if (aHaystack.length === 0) { - return -1; - } - - var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, - aCompare, aBias || exports.GREATEST_LOWER_BOUND); - if (index < 0) { - return -1; - } - - // We have found either the exact element, or the next-closest element than - // the one we are searching for. However, there may be more than one such - // element. Make sure we always return the smallest of these. - while (index - 1 >= 0) { - if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { - break; - } - --index; - } - - return index; -}; diff --git a/tools/node_modules/eslint/node_modules/source-map/lib/mapping-list.js b/tools/node_modules/eslint/node_modules/source-map/lib/mapping-list.js deleted file mode 100644 index 06d1274a025..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/lib/mapping-list.js +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2014 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var util = require('./util'); - -/** - * Determine whether mappingB is after mappingA with respect to generated - * position. - */ -function generatedPositionAfter(mappingA, mappingB) { - // Optimized for most common case - var lineA = mappingA.generatedLine; - var lineB = mappingB.generatedLine; - var columnA = mappingA.generatedColumn; - var columnB = mappingB.generatedColumn; - return lineB > lineA || lineB == lineA && columnB >= columnA || - util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; -} - -/** - * A data structure to provide a sorted view of accumulated mappings in a - * performance conscious manner. It trades a neglibable overhead in general - * case for a large speedup in case of mappings being added in order. - */ -function MappingList() { - this._array = []; - this._sorted = true; - // Serves as infimum - this._last = {generatedLine: -1, generatedColumn: 0}; -} - -/** - * Iterate through internal items. This method takes the same arguments that - * `Array.prototype.forEach` takes. - * - * NOTE: The order of the mappings is NOT guaranteed. - */ -MappingList.prototype.unsortedForEach = - function MappingList_forEach(aCallback, aThisArg) { - this._array.forEach(aCallback, aThisArg); - }; - -/** - * Add the given source mapping. - * - * @param Object aMapping - */ -MappingList.prototype.add = function MappingList_add(aMapping) { - if (generatedPositionAfter(this._last, aMapping)) { - this._last = aMapping; - this._array.push(aMapping); - } else { - this._sorted = false; - this._array.push(aMapping); - } -}; - -/** - * Returns the flat, sorted array of mappings. The mappings are sorted by - * generated position. - * - * WARNING: This method returns internal data without copying, for - * performance. The return value must NOT be mutated, and should be treated as - * an immutable borrow. If you want to take ownership, you must make your own - * copy. - */ -MappingList.prototype.toArray = function MappingList_toArray() { - if (!this._sorted) { - this._array.sort(util.compareByGeneratedPositionsInflated); - this._sorted = true; - } - return this._array; -}; - -exports.MappingList = MappingList; diff --git a/tools/node_modules/eslint/node_modules/source-map/lib/quick-sort.js b/tools/node_modules/eslint/node_modules/source-map/lib/quick-sort.js deleted file mode 100644 index 6a7caadbbdb..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/lib/quick-sort.js +++ /dev/null @@ -1,114 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -// It turns out that some (most?) JavaScript engines don't self-host -// `Array.prototype.sort`. This makes sense because C++ will likely remain -// faster than JS when doing raw CPU-intensive sorting. However, when using a -// custom comparator function, calling back and forth between the VM's C++ and -// JIT'd JS is rather slow *and* loses JIT type information, resulting in -// worse generated code for the comparator function than would be optimal. In -// fact, when sorting with a comparator, these costs outweigh the benefits of -// sorting in C++. By using our own JS-implemented Quick Sort (below), we get -// a ~3500ms mean speed-up in `bench/bench.html`. - -/** - * Swap the elements indexed by `x` and `y` in the array `ary`. - * - * @param {Array} ary - * The array. - * @param {Number} x - * The index of the first item. - * @param {Number} y - * The index of the second item. - */ -function swap(ary, x, y) { - var temp = ary[x]; - ary[x] = ary[y]; - ary[y] = temp; -} - -/** - * Returns a random integer within the range `low .. high` inclusive. - * - * @param {Number} low - * The lower bound on the range. - * @param {Number} high - * The upper bound on the range. - */ -function randomIntInRange(low, high) { - return Math.round(low + (Math.random() * (high - low))); -} - -/** - * The Quick Sort algorithm. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - * @param {Number} p - * Start index of the array - * @param {Number} r - * End index of the array - */ -function doQuickSort(ary, comparator, p, r) { - // If our lower bound is less than our upper bound, we (1) partition the - // array into two pieces and (2) recurse on each half. If it is not, this is - // the empty array and our base case. - - if (p < r) { - // (1) Partitioning. - // - // The partitioning chooses a pivot between `p` and `r` and moves all - // elements that are less than or equal to the pivot to the before it, and - // all the elements that are greater than it after it. The effect is that - // once partition is done, the pivot is in the exact place it will be when - // the array is put in sorted order, and it will not need to be moved - // again. This runs in O(n) time. - - // Always choose a random pivot so that an input array which is reverse - // sorted does not cause O(n^2) running time. - var pivotIndex = randomIntInRange(p, r); - var i = p - 1; - - swap(ary, pivotIndex, r); - var pivot = ary[r]; - - // Immediately after `j` is incremented in this loop, the following hold - // true: - // - // * Every element in `ary[p .. i]` is less than or equal to the pivot. - // - // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. - for (var j = p; j < r; j++) { - if (comparator(ary[j], pivot) <= 0) { - i += 1; - swap(ary, i, j); - } - } - - swap(ary, i + 1, j); - var q = i + 1; - - // (2) Recurse on each half. - - doQuickSort(ary, comparator, p, q - 1); - doQuickSort(ary, comparator, q + 1, r); - } -} - -/** - * Sort the given array in-place with the given comparator function. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - */ -exports.quickSort = function (ary, comparator) { - doQuickSort(ary, comparator, 0, ary.length - 1); -}; diff --git a/tools/node_modules/eslint/node_modules/source-map/lib/source-map-consumer.js b/tools/node_modules/eslint/node_modules/source-map/lib/source-map-consumer.js deleted file mode 100644 index 6abcc280eea..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/lib/source-map-consumer.js +++ /dev/null @@ -1,1082 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var util = require('./util'); -var binarySearch = require('./binary-search'); -var ArraySet = require('./array-set').ArraySet; -var base64VLQ = require('./base64-vlq'); -var quickSort = require('./quick-sort').quickSort; - -function SourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - return sourceMap.sections != null - ? new IndexedSourceMapConsumer(sourceMap) - : new BasicSourceMapConsumer(sourceMap); -} - -SourceMapConsumer.fromSourceMap = function(aSourceMap) { - return BasicSourceMapConsumer.fromSourceMap(aSourceMap); -} - -/** - * The version of the source mapping spec that we are consuming. - */ -SourceMapConsumer.prototype._version = 3; - -// `__generatedMappings` and `__originalMappings` are arrays that hold the -// parsed mapping coordinates from the source map's "mappings" attribute. They -// are lazily instantiated, accessed via the `_generatedMappings` and -// `_originalMappings` getters respectively, and we only parse the mappings -// and create these arrays once queried for a source location. We jump through -// these hoops because there can be many thousands of mappings, and parsing -// them is expensive, so we only want to do it if we must. -// -// Each object in the arrays is of the form: -// -// { -// generatedLine: The line number in the generated code, -// generatedColumn: The column number in the generated code, -// source: The path to the original source file that generated this -// chunk of code, -// originalLine: The line number in the original source that -// corresponds to this chunk of generated code, -// originalColumn: The column number in the original source that -// corresponds to this chunk of generated code, -// name: The name of the original symbol which generated this chunk of -// code. -// } -// -// All properties except for `generatedLine` and `generatedColumn` can be -// `null`. -// -// `_generatedMappings` is ordered by the generated positions. -// -// `_originalMappings` is ordered by the original positions. - -SourceMapConsumer.prototype.__generatedMappings = null; -Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { - get: function () { - if (!this.__generatedMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__generatedMappings; - } -}); - -SourceMapConsumer.prototype.__originalMappings = null; -Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { - get: function () { - if (!this.__originalMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__originalMappings; - } -}); - -SourceMapConsumer.prototype._charIsMappingSeparator = - function SourceMapConsumer_charIsMappingSeparator(aStr, index) { - var c = aStr.charAt(index); - return c === ";" || c === ","; - }; - -/** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ -SourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - throw new Error("Subclasses must implement _parseMappings"); - }; - -SourceMapConsumer.GENERATED_ORDER = 1; -SourceMapConsumer.ORIGINAL_ORDER = 2; - -SourceMapConsumer.GREATEST_LOWER_BOUND = 1; -SourceMapConsumer.LEAST_UPPER_BOUND = 2; - -/** - * Iterate over each mapping between an original source/line/column and a - * generated line/column in this source map. - * - * @param Function aCallback - * The function that is called with each mapping. - * @param Object aContext - * Optional. If specified, this object will be the value of `this` every - * time that `aCallback` is called. - * @param aOrder - * Either `SourceMapConsumer.GENERATED_ORDER` or - * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to - * iterate over the mappings sorted by the generated file's line/column - * order or the original's source/line/column order, respectively. Defaults to - * `SourceMapConsumer.GENERATED_ORDER`. - */ -SourceMapConsumer.prototype.eachMapping = - function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { - var context = aContext || null; - var order = aOrder || SourceMapConsumer.GENERATED_ORDER; - - var mappings; - switch (order) { - case SourceMapConsumer.GENERATED_ORDER: - mappings = this._generatedMappings; - break; - case SourceMapConsumer.ORIGINAL_ORDER: - mappings = this._originalMappings; - break; - default: - throw new Error("Unknown order of iteration."); - } - - var sourceRoot = this.sourceRoot; - mappings.map(function (mapping) { - var source = mapping.source === null ? null : this._sources.at(mapping.source); - if (source != null && sourceRoot != null) { - source = util.join(sourceRoot, source); - } - return { - source: source, - generatedLine: mapping.generatedLine, - generatedColumn: mapping.generatedColumn, - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: mapping.name === null ? null : this._names.at(mapping.name) - }; - }, this).forEach(aCallback, context); - }; - -/** - * Returns all generated line and column information for the original source, - * line, and column provided. If no column is provided, returns all mappings - * corresponding to a either the line we are searching for or the next - * closest line that has any mappings. Otherwise, returns all mappings - * corresponding to the given line and either the column we are searching for - * or the next closest column that has any offsets. - * - * The only argument is an object with the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: Optional. the column number in the original source. - * - * and an array of objects is returned, each with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ -SourceMapConsumer.prototype.allGeneratedPositionsFor = - function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { - var line = util.getArg(aArgs, 'line'); - - // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping - // returns the index of the closest mapping less than the needle. By - // setting needle.originalColumn to 0, we thus find the last mapping for - // the given line, provided such a mapping exists. - var needle = { - source: util.getArg(aArgs, 'source'), - originalLine: line, - originalColumn: util.getArg(aArgs, 'column', 0) - }; - - if (this.sourceRoot != null) { - needle.source = util.relative(this.sourceRoot, needle.source); - } - if (!this._sources.has(needle.source)) { - return []; - } - needle.source = this._sources.indexOf(needle.source); - - var mappings = []; - - var index = this._findMapping(needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - binarySearch.LEAST_UPPER_BOUND); - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (aArgs.column === undefined) { - var originalLine = mapping.originalLine; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we found. Since - // mappings are sorted, this is guaranteed to find all mappings for - // the line we found. - while (mapping && mapping.originalLine === originalLine) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } else { - var originalColumn = mapping.originalColumn; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we were searching for. - // Since mappings are sorted, this is guaranteed to find all mappings for - // the line we are searching for. - while (mapping && - mapping.originalLine === line && - mapping.originalColumn == originalColumn) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } - } - - return mappings; - }; - -exports.SourceMapConsumer = SourceMapConsumer; - -/** - * A BasicSourceMapConsumer instance represents a parsed source map which we can - * query for information about the original file positions by giving it a file - * position in the generated source. - * - * The only parameter is the raw source map (either as a JSON string, or - * already parsed to an object). According to the spec, source maps have the - * following attributes: - * - * - version: Which version of the source map spec this map is following. - * - sources: An array of URLs to the original source files. - * - names: An array of identifiers which can be referrenced by individual mappings. - * - sourceRoot: Optional. The URL root from which all sources are relative. - * - sourcesContent: Optional. An array of contents of the original source files. - * - mappings: A string of base64 VLQs which contain the actual mappings. - * - file: Optional. The generated file this source map is associated with. - * - * Here is an example source map, taken from the source map spec[0]: - * - * { - * version : 3, - * file: "out.js", - * sourceRoot : "", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AA,AB;;ABCDE;" - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# - */ -function BasicSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sources = util.getArg(sourceMap, 'sources'); - // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which - // requires the array) to play nice here. - var names = util.getArg(sourceMap, 'names', []); - var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); - var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); - var mappings = util.getArg(sourceMap, 'mappings'); - var file = util.getArg(sourceMap, 'file', null); - - // Once again, Sass deviates from the spec and supplies the version as a - // string rather than a number, so we use loose equality checking here. - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - sources = sources - .map(String) - // Some source maps produce relative source paths like "./foo.js" instead of - // "foo.js". Normalize these first so that future comparisons will succeed. - // See bugzil.la/1090768. - .map(util.normalize) - // Always ensure that absolute sources are internally stored relative to - // the source root, if the source root is absolute. Not doing this would - // be particularly problematic when the source root is a prefix of the - // source (valid, but why??). See github issue #199 and bugzil.la/1188982. - .map(function (source) { - return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) - ? util.relative(sourceRoot, source) - : source; - }); - - // Pass `true` below to allow duplicate names and sources. While source maps - // are intended to be compressed and deduplicated, the TypeScript compiler - // sometimes generates source maps with duplicates in them. See Github issue - // #72 and bugzil.la/889492. - this._names = ArraySet.fromArray(names.map(String), true); - this._sources = ArraySet.fromArray(sources, true); - - this.sourceRoot = sourceRoot; - this.sourcesContent = sourcesContent; - this._mappings = mappings; - this.file = file; -} - -BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); -BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; - -/** - * Create a BasicSourceMapConsumer from a SourceMapGenerator. - * - * @param SourceMapGenerator aSourceMap - * The source map that will be consumed. - * @returns BasicSourceMapConsumer - */ -BasicSourceMapConsumer.fromSourceMap = - function SourceMapConsumer_fromSourceMap(aSourceMap) { - var smc = Object.create(BasicSourceMapConsumer.prototype); - - var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); - var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); - smc.sourceRoot = aSourceMap._sourceRoot; - smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), - smc.sourceRoot); - smc.file = aSourceMap._file; - - // Because we are modifying the entries (by converting string sources and - // names to indices into the sources and names ArraySets), we have to make - // a copy of the entry or else bad things happen. Shared mutable state - // strikes again! See github issue #191. - - var generatedMappings = aSourceMap._mappings.toArray().slice(); - var destGeneratedMappings = smc.__generatedMappings = []; - var destOriginalMappings = smc.__originalMappings = []; - - for (var i = 0, length = generatedMappings.length; i < length; i++) { - var srcMapping = generatedMappings[i]; - var destMapping = new Mapping; - destMapping.generatedLine = srcMapping.generatedLine; - destMapping.generatedColumn = srcMapping.generatedColumn; - - if (srcMapping.source) { - destMapping.source = sources.indexOf(srcMapping.source); - destMapping.originalLine = srcMapping.originalLine; - destMapping.originalColumn = srcMapping.originalColumn; - - if (srcMapping.name) { - destMapping.name = names.indexOf(srcMapping.name); - } - - destOriginalMappings.push(destMapping); - } - - destGeneratedMappings.push(destMapping); - } - - quickSort(smc.__originalMappings, util.compareByOriginalPositions); - - return smc; - }; - -/** - * The version of the source mapping spec that we are consuming. - */ -BasicSourceMapConsumer.prototype._version = 3; - -/** - * The list of original sources. - */ -Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { - get: function () { - return this._sources.toArray().map(function (s) { - return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; - }, this); - } -}); - -/** - * Provide the JIT with a nice shape / hidden class. - */ -function Mapping() { - this.generatedLine = 0; - this.generatedColumn = 0; - this.source = null; - this.originalLine = null; - this.originalColumn = null; - this.name = null; -} - -/** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ -BasicSourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - var generatedLine = 1; - var previousGeneratedColumn = 0; - var previousOriginalLine = 0; - var previousOriginalColumn = 0; - var previousSource = 0; - var previousName = 0; - var length = aStr.length; - var index = 0; - var cachedSegments = {}; - var temp = {}; - var originalMappings = []; - var generatedMappings = []; - var mapping, str, segment, end, value; - - while (index < length) { - if (aStr.charAt(index) === ';') { - generatedLine++; - index++; - previousGeneratedColumn = 0; - } - else if (aStr.charAt(index) === ',') { - index++; - } - else { - mapping = new Mapping(); - mapping.generatedLine = generatedLine; - - // Because each offset is encoded relative to the previous one, - // many segments often have the same encoding. We can exploit this - // fact by caching the parsed variable length fields of each segment, - // allowing us to avoid a second parse if we encounter the same - // segment again. - for (end = index; end < length; end++) { - if (this._charIsMappingSeparator(aStr, end)) { - break; - } - } - str = aStr.slice(index, end); - - segment = cachedSegments[str]; - if (segment) { - index += str.length; - } else { - segment = []; - while (index < end) { - base64VLQ.decode(aStr, index, temp); - value = temp.value; - index = temp.rest; - segment.push(value); - } - - if (segment.length === 2) { - throw new Error('Found a source, but no line and column'); - } - - if (segment.length === 3) { - throw new Error('Found a source and line, but no column'); - } - - cachedSegments[str] = segment; - } - - // Generated column. - mapping.generatedColumn = previousGeneratedColumn + segment[0]; - previousGeneratedColumn = mapping.generatedColumn; - - if (segment.length > 1) { - // Original source. - mapping.source = previousSource + segment[1]; - previousSource += segment[1]; - - // Original line. - mapping.originalLine = previousOriginalLine + segment[2]; - previousOriginalLine = mapping.originalLine; - // Lines are stored 0-based - mapping.originalLine += 1; - - // Original column. - mapping.originalColumn = previousOriginalColumn + segment[3]; - previousOriginalColumn = mapping.originalColumn; - - if (segment.length > 4) { - // Original name. - mapping.name = previousName + segment[4]; - previousName += segment[4]; - } - } - - generatedMappings.push(mapping); - if (typeof mapping.originalLine === 'number') { - originalMappings.push(mapping); - } - } - } - - quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); - this.__generatedMappings = generatedMappings; - - quickSort(originalMappings, util.compareByOriginalPositions); - this.__originalMappings = originalMappings; - }; - -/** - * Find the mapping that best matches the hypothetical "needle" mapping that - * we are searching for in the given "haystack" of mappings. - */ -BasicSourceMapConsumer.prototype._findMapping = - function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, - aColumnName, aComparator, aBias) { - // To return the position we are searching for, we must first find the - // mapping for the given position and then return the opposite position it - // points to. Because the mappings are sorted, we can use binary search to - // find the best mapping. - - if (aNeedle[aLineName] <= 0) { - throw new TypeError('Line must be greater than or equal to 1, got ' - + aNeedle[aLineName]); - } - if (aNeedle[aColumnName] < 0) { - throw new TypeError('Column must be greater than or equal to 0, got ' - + aNeedle[aColumnName]); - } - - return binarySearch.search(aNeedle, aMappings, aComparator, aBias); - }; - -/** - * Compute the last column for each generated mapping. The last column is - * inclusive. - */ -BasicSourceMapConsumer.prototype.computeColumnSpans = - function SourceMapConsumer_computeColumnSpans() { - for (var index = 0; index < this._generatedMappings.length; ++index) { - var mapping = this._generatedMappings[index]; - - // Mappings do not contain a field for the last generated columnt. We - // can come up with an optimistic estimate, however, by assuming that - // mappings are contiguous (i.e. given two consecutive mappings, the - // first mapping ends where the second one starts). - if (index + 1 < this._generatedMappings.length) { - var nextMapping = this._generatedMappings[index + 1]; - - if (mapping.generatedLine === nextMapping.generatedLine) { - mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; - continue; - } - } - - // The last mapping for each line spans the entire line. - mapping.lastGeneratedColumn = Infinity; - } - }; - -/** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ -BasicSourceMapConsumer.prototype.originalPositionFor = - function SourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._generatedMappings, - "generatedLine", - "generatedColumn", - util.compareByGeneratedPositionsDeflated, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._generatedMappings[index]; - - if (mapping.generatedLine === needle.generatedLine) { - var source = util.getArg(mapping, 'source', null); - if (source !== null) { - source = this._sources.at(source); - if (this.sourceRoot != null) { - source = util.join(this.sourceRoot, source); - } - } - var name = util.getArg(mapping, 'name', null); - if (name !== null) { - name = this._names.at(name); - } - return { - source: source, - line: util.getArg(mapping, 'originalLine', null), - column: util.getArg(mapping, 'originalColumn', null), - name: name - }; - } - } - - return { - source: null, - line: null, - column: null, - name: null - }; - }; - -/** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ -BasicSourceMapConsumer.prototype.hasContentsOfAllSources = - function BasicSourceMapConsumer_hasContentsOfAllSources() { - if (!this.sourcesContent) { - return false; - } - return this.sourcesContent.length >= this._sources.size() && - !this.sourcesContent.some(function (sc) { return sc == null; }); - }; - -/** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ -BasicSourceMapConsumer.prototype.sourceContentFor = - function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - if (!this.sourcesContent) { - return null; - } - - if (this.sourceRoot != null) { - aSource = util.relative(this.sourceRoot, aSource); - } - - if (this._sources.has(aSource)) { - return this.sourcesContent[this._sources.indexOf(aSource)]; - } - - var url; - if (this.sourceRoot != null - && (url = util.urlParse(this.sourceRoot))) { - // XXX: file:// URIs and absolute paths lead to unexpected behavior for - // many users. We can help them out when they expect file:// URIs to - // behave like it would if they were running a local HTTP server. See - // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. - var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); - if (url.scheme == "file" - && this._sources.has(fileUriAbsPath)) { - return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] - } - - if ((!url.path || url.path == "/") - && this._sources.has("/" + aSource)) { - return this.sourcesContent[this._sources.indexOf("/" + aSource)]; - } - } - - // This function is used recursively from - // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we - // don't want to throw if we can't find the source - we just want to - // return null, so we provide a flag to exit gracefully. - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - -/** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ -BasicSourceMapConsumer.prototype.generatedPositionFor = - function SourceMapConsumer_generatedPositionFor(aArgs) { - var source = util.getArg(aArgs, 'source'); - if (this.sourceRoot != null) { - source = util.relative(this.sourceRoot, source); - } - if (!this._sources.has(source)) { - return { - line: null, - column: null, - lastColumn: null - }; - } - source = this._sources.indexOf(source); - - var needle = { - source: source, - originalLine: util.getArg(aArgs, 'line'), - originalColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (mapping.source === needle.source) { - return { - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }; - } - } - - return { - line: null, - column: null, - lastColumn: null - }; - }; - -exports.BasicSourceMapConsumer = BasicSourceMapConsumer; - -/** - * An IndexedSourceMapConsumer instance represents a parsed source map which - * we can query for information. It differs from BasicSourceMapConsumer in - * that it takes "indexed" source maps (i.e. ones with a "sections" field) as - * input. - * - * The only parameter is a raw source map (either as a JSON string, or already - * parsed to an object). According to the spec for indexed source maps, they - * have the following attributes: - * - * - version: Which version of the source map spec this map is following. - * - file: Optional. The generated file this source map is associated with. - * - sections: A list of section definitions. - * - * Each value under the "sections" field has two fields: - * - offset: The offset into the original specified at which this section - * begins to apply, defined as an object with a "line" and "column" - * field. - * - map: A source map definition. This source map could also be indexed, - * but doesn't have to be. - * - * Instead of the "map" field, it's also possible to have a "url" field - * specifying a URL to retrieve a source map from, but that's currently - * unsupported. - * - * Here's an example source map, taken from the source map spec[0], but - * modified to omit a section which uses the "url" field. - * - * { - * version : 3, - * file: "app.js", - * sections: [{ - * offset: {line:100, column:10}, - * map: { - * version : 3, - * file: "section.js", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AAAA,E;;ABCDE;" - * } - * }], - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt - */ -function IndexedSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sections = util.getArg(sourceMap, 'sections'); - - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - this._sources = new ArraySet(); - this._names = new ArraySet(); - - var lastOffset = { - line: -1, - column: 0 - }; - this._sections = sections.map(function (s) { - if (s.url) { - // The url field will require support for asynchronicity. - // See https://github.com/mozilla/source-map/issues/16 - throw new Error('Support for url field in sections not implemented.'); - } - var offset = util.getArg(s, 'offset'); - var offsetLine = util.getArg(offset, 'line'); - var offsetColumn = util.getArg(offset, 'column'); - - if (offsetLine < lastOffset.line || - (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { - throw new Error('Section offsets must be ordered and non-overlapping.'); - } - lastOffset = offset; - - return { - generatedOffset: { - // The offset fields are 0-based, but we use 1-based indices when - // encoding/decoding from VLQ. - generatedLine: offsetLine + 1, - generatedColumn: offsetColumn + 1 - }, - consumer: new SourceMapConsumer(util.getArg(s, 'map')) - } - }); -} - -IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); -IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; - -/** - * The version of the source mapping spec that we are consuming. - */ -IndexedSourceMapConsumer.prototype._version = 3; - -/** - * The list of original sources. - */ -Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { - get: function () { - var sources = []; - for (var i = 0; i < this._sections.length; i++) { - for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { - sources.push(this._sections[i].consumer.sources[j]); - } - } - return sources; - } -}); - -/** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ -IndexedSourceMapConsumer.prototype.originalPositionFor = - function IndexedSourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - // Find the section containing the generated position we're trying to map - // to an original position. - var sectionIndex = binarySearch.search(needle, this._sections, - function(needle, section) { - var cmp = needle.generatedLine - section.generatedOffset.generatedLine; - if (cmp) { - return cmp; - } - - return (needle.generatedColumn - - section.generatedOffset.generatedColumn); - }); - var section = this._sections[sectionIndex]; - - if (!section) { - return { - source: null, - line: null, - column: null, - name: null - }; - } - - return section.consumer.originalPositionFor({ - line: needle.generatedLine - - (section.generatedOffset.generatedLine - 1), - column: needle.generatedColumn - - (section.generatedOffset.generatedLine === needle.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - bias: aArgs.bias - }); - }; - -/** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ -IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = - function IndexedSourceMapConsumer_hasContentsOfAllSources() { - return this._sections.every(function (s) { - return s.consumer.hasContentsOfAllSources(); - }); - }; - -/** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ -IndexedSourceMapConsumer.prototype.sourceContentFor = - function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - var content = section.consumer.sourceContentFor(aSource, true); - if (content) { - return content; - } - } - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - -/** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ -IndexedSourceMapConsumer.prototype.generatedPositionFor = - function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - // Only consider this section if the requested source is in the list of - // sources of the consumer. - if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { - continue; - } - var generatedPosition = section.consumer.generatedPositionFor(aArgs); - if (generatedPosition) { - var ret = { - line: generatedPosition.line + - (section.generatedOffset.generatedLine - 1), - column: generatedPosition.column + - (section.generatedOffset.generatedLine === generatedPosition.line - ? section.generatedOffset.generatedColumn - 1 - : 0) - }; - return ret; - } - } - - return { - line: null, - column: null - }; - }; - -/** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ -IndexedSourceMapConsumer.prototype._parseMappings = - function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { - this.__generatedMappings = []; - this.__originalMappings = []; - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - var sectionMappings = section.consumer._generatedMappings; - for (var j = 0; j < sectionMappings.length; j++) { - var mapping = sectionMappings[j]; - - var source = section.consumer._sources.at(mapping.source); - if (section.consumer.sourceRoot !== null) { - source = util.join(section.consumer.sourceRoot, source); - } - this._sources.add(source); - source = this._sources.indexOf(source); - - var name = section.consumer._names.at(mapping.name); - this._names.add(name); - name = this._names.indexOf(name); - - // The mappings coming from the consumer for the section have - // generated positions relative to the start of the section, so we - // need to offset them to be relative to the start of the concatenated - // generated file. - var adjustedMapping = { - source: source, - generatedLine: mapping.generatedLine + - (section.generatedOffset.generatedLine - 1), - generatedColumn: mapping.generatedColumn + - (section.generatedOffset.generatedLine === mapping.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: name - }; - - this.__generatedMappings.push(adjustedMapping); - if (typeof adjustedMapping.originalLine === 'number') { - this.__originalMappings.push(adjustedMapping); - } - } - } - - quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); - quickSort(this.__originalMappings, util.compareByOriginalPositions); - }; - -exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; diff --git a/tools/node_modules/eslint/node_modules/source-map/lib/source-map-generator.js b/tools/node_modules/eslint/node_modules/source-map/lib/source-map-generator.js deleted file mode 100644 index aff1e7fb268..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/lib/source-map-generator.js +++ /dev/null @@ -1,416 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var base64VLQ = require('./base64-vlq'); -var util = require('./util'); -var ArraySet = require('./array-set').ArraySet; -var MappingList = require('./mapping-list').MappingList; - -/** - * An instance of the SourceMapGenerator represents a source map which is - * being built incrementally. You may pass an object with the following - * properties: - * - * - file: The filename of the generated source. - * - sourceRoot: A root for all relative URLs in this source map. - */ -function SourceMapGenerator(aArgs) { - if (!aArgs) { - aArgs = {}; - } - this._file = util.getArg(aArgs, 'file', null); - this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); - this._skipValidation = util.getArg(aArgs, 'skipValidation', false); - this._sources = new ArraySet(); - this._names = new ArraySet(); - this._mappings = new MappingList(); - this._sourcesContents = null; -} - -SourceMapGenerator.prototype._version = 3; - -/** - * Creates a new SourceMapGenerator based on a SourceMapConsumer - * - * @param aSourceMapConsumer The SourceMap. - */ -SourceMapGenerator.fromSourceMap = - function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { - var sourceRoot = aSourceMapConsumer.sourceRoot; - var generator = new SourceMapGenerator({ - file: aSourceMapConsumer.file, - sourceRoot: sourceRoot - }); - aSourceMapConsumer.eachMapping(function (mapping) { - var newMapping = { - generated: { - line: mapping.generatedLine, - column: mapping.generatedColumn - } - }; - - if (mapping.source != null) { - newMapping.source = mapping.source; - if (sourceRoot != null) { - newMapping.source = util.relative(sourceRoot, newMapping.source); - } - - newMapping.original = { - line: mapping.originalLine, - column: mapping.originalColumn - }; - - if (mapping.name != null) { - newMapping.name = mapping.name; - } - } - - generator.addMapping(newMapping); - }); - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - generator.setSourceContent(sourceFile, content); - } - }); - return generator; - }; - -/** - * Add a single mapping from original source line and column to the generated - * source's line and column for this source map being created. The mapping - * object should have the following properties: - * - * - generated: An object with the generated line and column positions. - * - original: An object with the original line and column positions. - * - source: The original source file (relative to the sourceRoot). - * - name: An optional original token name for this mapping. - */ -SourceMapGenerator.prototype.addMapping = - function SourceMapGenerator_addMapping(aArgs) { - var generated = util.getArg(aArgs, 'generated'); - var original = util.getArg(aArgs, 'original', null); - var source = util.getArg(aArgs, 'source', null); - var name = util.getArg(aArgs, 'name', null); - - if (!this._skipValidation) { - this._validateMapping(generated, original, source, name); - } - - if (source != null) { - source = String(source); - if (!this._sources.has(source)) { - this._sources.add(source); - } - } - - if (name != null) { - name = String(name); - if (!this._names.has(name)) { - this._names.add(name); - } - } - - this._mappings.add({ - generatedLine: generated.line, - generatedColumn: generated.column, - originalLine: original != null && original.line, - originalColumn: original != null && original.column, - source: source, - name: name - }); - }; - -/** - * Set the source content for a source file. - */ -SourceMapGenerator.prototype.setSourceContent = - function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { - var source = aSourceFile; - if (this._sourceRoot != null) { - source = util.relative(this._sourceRoot, source); - } - - if (aSourceContent != null) { - // Add the source content to the _sourcesContents map. - // Create a new _sourcesContents map if the property is null. - if (!this._sourcesContents) { - this._sourcesContents = Object.create(null); - } - this._sourcesContents[util.toSetString(source)] = aSourceContent; - } else if (this._sourcesContents) { - // Remove the source file from the _sourcesContents map. - // If the _sourcesContents map is empty, set the property to null. - delete this._sourcesContents[util.toSetString(source)]; - if (Object.keys(this._sourcesContents).length === 0) { - this._sourcesContents = null; - } - } - }; - -/** - * Applies the mappings of a sub-source-map for a specific source file to the - * source map being generated. Each mapping to the supplied source file is - * rewritten using the supplied source map. Note: The resolution for the - * resulting mappings is the minimium of this map and the supplied map. - * - * @param aSourceMapConsumer The source map to be applied. - * @param aSourceFile Optional. The filename of the source file. - * If omitted, SourceMapConsumer's file property will be used. - * @param aSourceMapPath Optional. The dirname of the path to the source map - * to be applied. If relative, it is relative to the SourceMapConsumer. - * This parameter is needed when the two source maps aren't in the same - * directory, and the source map to be applied contains relative source - * paths. If so, those relative source paths need to be rewritten - * relative to the SourceMapGenerator. - */ -SourceMapGenerator.prototype.applySourceMap = - function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { - var sourceFile = aSourceFile; - // If aSourceFile is omitted, we will use the file property of the SourceMap - if (aSourceFile == null) { - if (aSourceMapConsumer.file == null) { - throw new Error( - 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + - 'or the source map\'s "file" property. Both were omitted.' - ); - } - sourceFile = aSourceMapConsumer.file; - } - var sourceRoot = this._sourceRoot; - // Make "sourceFile" relative if an absolute Url is passed. - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - // Applying the SourceMap can add and remove items from the sources and - // the names array. - var newSources = new ArraySet(); - var newNames = new ArraySet(); - - // Find mappings for the "sourceFile" - this._mappings.unsortedForEach(function (mapping) { - if (mapping.source === sourceFile && mapping.originalLine != null) { - // Check if it can be mapped by the source map, then update the mapping. - var original = aSourceMapConsumer.originalPositionFor({ - line: mapping.originalLine, - column: mapping.originalColumn - }); - if (original.source != null) { - // Copy mapping - mapping.source = original.source; - if (aSourceMapPath != null) { - mapping.source = util.join(aSourceMapPath, mapping.source) - } - if (sourceRoot != null) { - mapping.source = util.relative(sourceRoot, mapping.source); - } - mapping.originalLine = original.line; - mapping.originalColumn = original.column; - if (original.name != null) { - mapping.name = original.name; - } - } - } - - var source = mapping.source; - if (source != null && !newSources.has(source)) { - newSources.add(source); - } - - var name = mapping.name; - if (name != null && !newNames.has(name)) { - newNames.add(name); - } - - }, this); - this._sources = newSources; - this._names = newNames; - - // Copy sourcesContents of applied map. - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aSourceMapPath != null) { - sourceFile = util.join(aSourceMapPath, sourceFile); - } - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - this.setSourceContent(sourceFile, content); - } - }, this); - }; - -/** - * A mapping can have one of the three levels of data: - * - * 1. Just the generated position. - * 2. The Generated position, original position, and original source. - * 3. Generated and original position, original source, as well as a name - * token. - * - * To maintain consistency, we validate that any new mapping being added falls - * in to one of these categories. - */ -SourceMapGenerator.prototype._validateMapping = - function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, - aName) { - // When aOriginal is truthy but has empty values for .line and .column, - // it is most likely a programmer error. In this case we throw a very - // specific error message to try to guide them the right way. - // For example: https://github.com/Polymer/polymer-bundler/pull/519 - if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { - throw new Error( - 'original.line and original.column are not numbers -- you probably meant to omit ' + - 'the original mapping entirely and only map the generated position. If so, pass ' + - 'null for the original mapping instead of an object with empty or null values.' - ); - } - - if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aGenerated.line > 0 && aGenerated.column >= 0 - && !aOriginal && !aSource && !aName) { - // Case 1. - return; - } - else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aOriginal && 'line' in aOriginal && 'column' in aOriginal - && aGenerated.line > 0 && aGenerated.column >= 0 - && aOriginal.line > 0 && aOriginal.column >= 0 - && aSource) { - // Cases 2 and 3. - return; - } - else { - throw new Error('Invalid mapping: ' + JSON.stringify({ - generated: aGenerated, - source: aSource, - original: aOriginal, - name: aName - })); - } - }; - -/** - * Serialize the accumulated mappings in to the stream of base 64 VLQs - * specified by the source map format. - */ -SourceMapGenerator.prototype._serializeMappings = - function SourceMapGenerator_serializeMappings() { - var previousGeneratedColumn = 0; - var previousGeneratedLine = 1; - var previousOriginalColumn = 0; - var previousOriginalLine = 0; - var previousName = 0; - var previousSource = 0; - var result = ''; - var next; - var mapping; - var nameIdx; - var sourceIdx; - - var mappings = this._mappings.toArray(); - for (var i = 0, len = mappings.length; i < len; i++) { - mapping = mappings[i]; - next = '' - - if (mapping.generatedLine !== previousGeneratedLine) { - previousGeneratedColumn = 0; - while (mapping.generatedLine !== previousGeneratedLine) { - next += ';'; - previousGeneratedLine++; - } - } - else { - if (i > 0) { - if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { - continue; - } - next += ','; - } - } - - next += base64VLQ.encode(mapping.generatedColumn - - previousGeneratedColumn); - previousGeneratedColumn = mapping.generatedColumn; - - if (mapping.source != null) { - sourceIdx = this._sources.indexOf(mapping.source); - next += base64VLQ.encode(sourceIdx - previousSource); - previousSource = sourceIdx; - - // lines are stored 0-based in SourceMap spec version 3 - next += base64VLQ.encode(mapping.originalLine - 1 - - previousOriginalLine); - previousOriginalLine = mapping.originalLine - 1; - - next += base64VLQ.encode(mapping.originalColumn - - previousOriginalColumn); - previousOriginalColumn = mapping.originalColumn; - - if (mapping.name != null) { - nameIdx = this._names.indexOf(mapping.name); - next += base64VLQ.encode(nameIdx - previousName); - previousName = nameIdx; - } - } - - result += next; - } - - return result; - }; - -SourceMapGenerator.prototype._generateSourcesContent = - function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { - return aSources.map(function (source) { - if (!this._sourcesContents) { - return null; - } - if (aSourceRoot != null) { - source = util.relative(aSourceRoot, source); - } - var key = util.toSetString(source); - return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) - ? this._sourcesContents[key] - : null; - }, this); - }; - -/** - * Externalize the source map. - */ -SourceMapGenerator.prototype.toJSON = - function SourceMapGenerator_toJSON() { - var map = { - version: this._version, - sources: this._sources.toArray(), - names: this._names.toArray(), - mappings: this._serializeMappings() - }; - if (this._file != null) { - map.file = this._file; - } - if (this._sourceRoot != null) { - map.sourceRoot = this._sourceRoot; - } - if (this._sourcesContents) { - map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); - } - - return map; - }; - -/** - * Render the source map being generated to a string. - */ -SourceMapGenerator.prototype.toString = - function SourceMapGenerator_toString() { - return JSON.stringify(this.toJSON()); - }; - -exports.SourceMapGenerator = SourceMapGenerator; diff --git a/tools/node_modules/eslint/node_modules/source-map/lib/source-node.js b/tools/node_modules/eslint/node_modules/source-map/lib/source-node.js deleted file mode 100644 index d196a53f8c0..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/lib/source-node.js +++ /dev/null @@ -1,413 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator; -var util = require('./util'); - -// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other -// operating systems these days (capturing the result). -var REGEX_NEWLINE = /(\r?\n)/; - -// Newline character code for charCodeAt() comparisons -var NEWLINE_CODE = 10; - -// Private symbol for identifying `SourceNode`s when multiple versions of -// the source-map library are loaded. This MUST NOT CHANGE across -// versions! -var isSourceNode = "$$$isSourceNode$$$"; - -/** - * SourceNodes provide a way to abstract over interpolating/concatenating - * snippets of generated JavaScript source code while maintaining the line and - * column information associated with the original source code. - * - * @param aLine The original line number. - * @param aColumn The original column number. - * @param aSource The original source's filename. - * @param aChunks Optional. An array of strings which are snippets of - * generated JS, or other SourceNodes. - * @param aName The original identifier. - */ -function SourceNode(aLine, aColumn, aSource, aChunks, aName) { - this.children = []; - this.sourceContents = {}; - this.line = aLine == null ? null : aLine; - this.column = aColumn == null ? null : aColumn; - this.source = aSource == null ? null : aSource; - this.name = aName == null ? null : aName; - this[isSourceNode] = true; - if (aChunks != null) this.add(aChunks); -} - -/** - * Creates a SourceNode from generated code and a SourceMapConsumer. - * - * @param aGeneratedCode The generated code - * @param aSourceMapConsumer The SourceMap for the generated code - * @param aRelativePath Optional. The path that relative sources in the - * SourceMapConsumer should be relative to. - */ -SourceNode.fromStringWithSourceMap = - function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { - // The SourceNode we want to fill with the generated code - // and the SourceMap - var node = new SourceNode(); - - // All even indices of this array are one line of the generated code, - // while all odd indices are the newlines between two adjacent lines - // (since `REGEX_NEWLINE` captures its match). - // Processed fragments are accessed by calling `shiftNextLine`. - var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); - var remainingLinesIndex = 0; - var shiftNextLine = function() { - var lineContents = getNextLine(); - // The last line of a file might not have a newline. - var newLine = getNextLine() || ""; - return lineContents + newLine; - - function getNextLine() { - return remainingLinesIndex < remainingLines.length ? - remainingLines[remainingLinesIndex++] : undefined; - } - }; - - // We need to remember the position of "remainingLines" - var lastGeneratedLine = 1, lastGeneratedColumn = 0; - - // The generate SourceNodes we need a code range. - // To extract it current and last mapping is used. - // Here we store the last mapping. - var lastMapping = null; - - aSourceMapConsumer.eachMapping(function (mapping) { - if (lastMapping !== null) { - // We add the code from "lastMapping" to "mapping": - // First check if there is a new line in between. - if (lastGeneratedLine < mapping.generatedLine) { - // Associate first line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - lastGeneratedLine++; - lastGeneratedColumn = 0; - // The remaining code is added without mapping - } else { - // There is no new line in between. - // Associate the code between "lastGeneratedColumn" and - // "mapping.generatedColumn" with "lastMapping" - var nextLine = remainingLines[remainingLinesIndex]; - var code = nextLine.substr(0, mapping.generatedColumn - - lastGeneratedColumn); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - - lastGeneratedColumn); - lastGeneratedColumn = mapping.generatedColumn; - addMappingWithCode(lastMapping, code); - // No more remaining code, continue - lastMapping = mapping; - return; - } - } - // We add the generated code until the first mapping - // to the SourceNode without any mapping. - // Each line is added as separate string. - while (lastGeneratedLine < mapping.generatedLine) { - node.add(shiftNextLine()); - lastGeneratedLine++; - } - if (lastGeneratedColumn < mapping.generatedColumn) { - var nextLine = remainingLines[remainingLinesIndex]; - node.add(nextLine.substr(0, mapping.generatedColumn)); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); - lastGeneratedColumn = mapping.generatedColumn; - } - lastMapping = mapping; - }, this); - // We have processed all mappings. - if (remainingLinesIndex < remainingLines.length) { - if (lastMapping) { - // Associate the remaining code in the current line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - } - // and add the remaining lines without any mapping - node.add(remainingLines.splice(remainingLinesIndex).join("")); - } - - // Copy sourcesContent into SourceNode - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aRelativePath != null) { - sourceFile = util.join(aRelativePath, sourceFile); - } - node.setSourceContent(sourceFile, content); - } - }); - - return node; - - function addMappingWithCode(mapping, code) { - if (mapping === null || mapping.source === undefined) { - node.add(code); - } else { - var source = aRelativePath - ? util.join(aRelativePath, mapping.source) - : mapping.source; - node.add(new SourceNode(mapping.originalLine, - mapping.originalColumn, - source, - code, - mapping.name)); - } - } - }; - -/** - * Add a chunk of generated JS to this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ -SourceNode.prototype.add = function SourceNode_add(aChunk) { - if (Array.isArray(aChunk)) { - aChunk.forEach(function (chunk) { - this.add(chunk); - }, this); - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - if (aChunk) { - this.children.push(aChunk); - } - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; -}; - -/** - * Add a chunk of generated JS to the beginning of this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ -SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { - if (Array.isArray(aChunk)) { - for (var i = aChunk.length-1; i >= 0; i--) { - this.prepend(aChunk[i]); - } - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - this.children.unshift(aChunk); - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; -}; - -/** - * Walk over the tree of JS snippets in this node and its children. The - * walking function is called once for each snippet of JS and is passed that - * snippet and the its original associated source's line/column location. - * - * @param aFn The traversal function. - */ -SourceNode.prototype.walk = function SourceNode_walk(aFn) { - var chunk; - for (var i = 0, len = this.children.length; i < len; i++) { - chunk = this.children[i]; - if (chunk[isSourceNode]) { - chunk.walk(aFn); - } - else { - if (chunk !== '') { - aFn(chunk, { source: this.source, - line: this.line, - column: this.column, - name: this.name }); - } - } - } -}; - -/** - * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between - * each of `this.children`. - * - * @param aSep The separator. - */ -SourceNode.prototype.join = function SourceNode_join(aSep) { - var newChildren; - var i; - var len = this.children.length; - if (len > 0) { - newChildren = []; - for (i = 0; i < len-1; i++) { - newChildren.push(this.children[i]); - newChildren.push(aSep); - } - newChildren.push(this.children[i]); - this.children = newChildren; - } - return this; -}; - -/** - * Call String.prototype.replace on the very right-most source snippet. Useful - * for trimming whitespace from the end of a source node, etc. - * - * @param aPattern The pattern to replace. - * @param aReplacement The thing to replace the pattern with. - */ -SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { - var lastChild = this.children[this.children.length - 1]; - if (lastChild[isSourceNode]) { - lastChild.replaceRight(aPattern, aReplacement); - } - else if (typeof lastChild === 'string') { - this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); - } - else { - this.children.push(''.replace(aPattern, aReplacement)); - } - return this; -}; - -/** - * Set the source content for a source file. This will be added to the SourceMapGenerator - * in the sourcesContent field. - * - * @param aSourceFile The filename of the source file - * @param aSourceContent The content of the source file - */ -SourceNode.prototype.setSourceContent = - function SourceNode_setSourceContent(aSourceFile, aSourceContent) { - this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; - }; - -/** - * Walk over the tree of SourceNodes. The walking function is called for each - * source file content and is passed the filename and source content. - * - * @param aFn The traversal function. - */ -SourceNode.prototype.walkSourceContents = - function SourceNode_walkSourceContents(aFn) { - for (var i = 0, len = this.children.length; i < len; i++) { - if (this.children[i][isSourceNode]) { - this.children[i].walkSourceContents(aFn); - } - } - - var sources = Object.keys(this.sourceContents); - for (var i = 0, len = sources.length; i < len; i++) { - aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); - } - }; - -/** - * Return the string representation of this source node. Walks over the tree - * and concatenates all the various snippets together to one string. - */ -SourceNode.prototype.toString = function SourceNode_toString() { - var str = ""; - this.walk(function (chunk) { - str += chunk; - }); - return str; -}; - -/** - * Returns the string representation of this source node along with a source - * map. - */ -SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { - var generated = { - code: "", - line: 1, - column: 0 - }; - var map = new SourceMapGenerator(aArgs); - var sourceMappingActive = false; - var lastOriginalSource = null; - var lastOriginalLine = null; - var lastOriginalColumn = null; - var lastOriginalName = null; - this.walk(function (chunk, original) { - generated.code += chunk; - if (original.source !== null - && original.line !== null - && original.column !== null) { - if(lastOriginalSource !== original.source - || lastOriginalLine !== original.line - || lastOriginalColumn !== original.column - || lastOriginalName !== original.name) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - lastOriginalSource = original.source; - lastOriginalLine = original.line; - lastOriginalColumn = original.column; - lastOriginalName = original.name; - sourceMappingActive = true; - } else if (sourceMappingActive) { - map.addMapping({ - generated: { - line: generated.line, - column: generated.column - } - }); - lastOriginalSource = null; - sourceMappingActive = false; - } - for (var idx = 0, length = chunk.length; idx < length; idx++) { - if (chunk.charCodeAt(idx) === NEWLINE_CODE) { - generated.line++; - generated.column = 0; - // Mappings end at eol - if (idx + 1 === length) { - lastOriginalSource = null; - sourceMappingActive = false; - } else if (sourceMappingActive) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - } else { - generated.column++; - } - } - }); - this.walkSourceContents(function (sourceFile, sourceContent) { - map.setSourceContent(sourceFile, sourceContent); - }); - - return { code: generated.code, map: map }; -}; - -exports.SourceNode = SourceNode; diff --git a/tools/node_modules/eslint/node_modules/source-map/lib/util.js b/tools/node_modules/eslint/node_modules/source-map/lib/util.js deleted file mode 100644 index 44e0e452052..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/lib/util.js +++ /dev/null @@ -1,417 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -/** - * This is a helper function for getting values from parameter/options - * objects. - * - * @param args The object we are extracting values from - * @param name The name of the property we are getting. - * @param defaultValue An optional value to return if the property is missing - * from the object. If this is not specified and the property is missing, an - * error will be thrown. - */ -function getArg(aArgs, aName, aDefaultValue) { - if (aName in aArgs) { - return aArgs[aName]; - } else if (arguments.length === 3) { - return aDefaultValue; - } else { - throw new Error('"' + aName + '" is a required argument.'); - } -} -exports.getArg = getArg; - -var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; -var dataUrlRegexp = /^data:.+\,.+$/; - -function urlParse(aUrl) { - var match = aUrl.match(urlRegexp); - if (!match) { - return null; - } - return { - scheme: match[1], - auth: match[2], - host: match[3], - port: match[4], - path: match[5] - }; -} -exports.urlParse = urlParse; - -function urlGenerate(aParsedUrl) { - var url = ''; - if (aParsedUrl.scheme) { - url += aParsedUrl.scheme + ':'; - } - url += '//'; - if (aParsedUrl.auth) { - url += aParsedUrl.auth + '@'; - } - if (aParsedUrl.host) { - url += aParsedUrl.host; - } - if (aParsedUrl.port) { - url += ":" + aParsedUrl.port - } - if (aParsedUrl.path) { - url += aParsedUrl.path; - } - return url; -} -exports.urlGenerate = urlGenerate; - -/** - * Normalizes a path, or the path portion of a URL: - * - * - Replaces consecutive slashes with one slash. - * - Removes unnecessary '.' parts. - * - Removes unnecessary '/..' parts. - * - * Based on code in the Node.js 'path' core module. - * - * @param aPath The path or url to normalize. - */ -function normalize(aPath) { - var path = aPath; - var url = urlParse(aPath); - if (url) { - if (!url.path) { - return aPath; - } - path = url.path; - } - var isAbsolute = exports.isAbsolute(path); - - var parts = path.split(/\/+/); - for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { - part = parts[i]; - if (part === '.') { - parts.splice(i, 1); - } else if (part === '..') { - up++; - } else if (up > 0) { - if (part === '') { - // The first part is blank if the path is absolute. Trying to go - // above the root is a no-op. Therefore we can remove all '..' parts - // directly after the root. - parts.splice(i + 1, up); - up = 0; - } else { - parts.splice(i, 2); - up--; - } - } - } - path = parts.join('/'); - - if (path === '') { - path = isAbsolute ? '/' : '.'; - } - - if (url) { - url.path = path; - return urlGenerate(url); - } - return path; -} -exports.normalize = normalize; - -/** - * Joins two paths/URLs. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be joined with the root. - * - * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a - * scheme-relative URL: Then the scheme of aRoot, if any, is prepended - * first. - * - Otherwise aPath is a path. If aRoot is a URL, then its path portion - * is updated with the result and aRoot is returned. Otherwise the result - * is returned. - * - If aPath is absolute, the result is aPath. - * - Otherwise the two paths are joined with a slash. - * - Joining for example 'http://' and 'www.example.com' is also supported. - */ -function join(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - if (aPath === "") { - aPath = "."; - } - var aPathUrl = urlParse(aPath); - var aRootUrl = urlParse(aRoot); - if (aRootUrl) { - aRoot = aRootUrl.path || '/'; - } - - // `join(foo, '//www.example.org')` - if (aPathUrl && !aPathUrl.scheme) { - if (aRootUrl) { - aPathUrl.scheme = aRootUrl.scheme; - } - return urlGenerate(aPathUrl); - } - - if (aPathUrl || aPath.match(dataUrlRegexp)) { - return aPath; - } - - // `join('http://', 'www.example.com')` - if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { - aRootUrl.host = aPath; - return urlGenerate(aRootUrl); - } - - var joined = aPath.charAt(0) === '/' - ? aPath - : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); - - if (aRootUrl) { - aRootUrl.path = joined; - return urlGenerate(aRootUrl); - } - return joined; -} -exports.join = join; - -exports.isAbsolute = function (aPath) { - return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); -}; - -/** - * Make a path relative to a URL or another path. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be made relative to aRoot. - */ -function relative(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - - aRoot = aRoot.replace(/\/$/, ''); - - // It is possible for the path to be above the root. In this case, simply - // checking whether the root is a prefix of the path won't work. Instead, we - // need to remove components from the root one by one, until either we find - // a prefix that fits, or we run out of components to remove. - var level = 0; - while (aPath.indexOf(aRoot + '/') !== 0) { - var index = aRoot.lastIndexOf("/"); - if (index < 0) { - return aPath; - } - - // If the only part of the root that is left is the scheme (i.e. http://, - // file:///, etc.), one or more slashes (/), or simply nothing at all, we - // have exhausted all components, so the path is not relative to the root. - aRoot = aRoot.slice(0, index); - if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { - return aPath; - } - - ++level; - } - - // Make sure we add a "../" for each component we removed from the root. - return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); -} -exports.relative = relative; - -var supportsNullProto = (function () { - var obj = Object.create(null); - return !('__proto__' in obj); -}()); - -function identity (s) { - return s; -} - -/** - * Because behavior goes wacky when you set `__proto__` on objects, we - * have to prefix all the strings in our set with an arbitrary character. - * - * See https://github.com/mozilla/source-map/pull/31 and - * https://github.com/mozilla/source-map/issues/30 - * - * @param String aStr - */ -function toSetString(aStr) { - if (isProtoString(aStr)) { - return '$' + aStr; - } - - return aStr; -} -exports.toSetString = supportsNullProto ? identity : toSetString; - -function fromSetString(aStr) { - if (isProtoString(aStr)) { - return aStr.slice(1); - } - - return aStr; -} -exports.fromSetString = supportsNullProto ? identity : fromSetString; - -function isProtoString(s) { - if (!s) { - return false; - } - - var length = s.length; - - if (length < 9 /* "__proto__".length */) { - return false; - } - - if (s.charCodeAt(length - 1) !== 95 /* '_' */ || - s.charCodeAt(length - 2) !== 95 /* '_' */ || - s.charCodeAt(length - 3) !== 111 /* 'o' */ || - s.charCodeAt(length - 4) !== 116 /* 't' */ || - s.charCodeAt(length - 5) !== 111 /* 'o' */ || - s.charCodeAt(length - 6) !== 114 /* 'r' */ || - s.charCodeAt(length - 7) !== 112 /* 'p' */ || - s.charCodeAt(length - 8) !== 95 /* '_' */ || - s.charCodeAt(length - 9) !== 95 /* '_' */) { - return false; - } - - for (var i = length - 10; i >= 0; i--) { - if (s.charCodeAt(i) !== 36 /* '$' */) { - return false; - } - } - - return true; -} - -/** - * Comparator between two mappings where the original positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same original source/line/column, but different generated - * line and column the same. Useful when searching for a mapping with a - * stubbed out mapping. - */ -function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { - var cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0 || onlyCompareOriginal) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; -} -exports.compareByOriginalPositions = compareByOriginalPositions; - -/** - * Comparator between two mappings with deflated source and name indices where - * the generated positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same generated line and column, but different - * source/name/original line and column the same. Useful when searching for a - * mapping with a stubbed out mapping. - */ -function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0 || onlyCompareGenerated) { - return cmp; - } - - cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; -} -exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; - -function strcmp(aStr1, aStr2) { - if (aStr1 === aStr2) { - return 0; - } - - if (aStr1 > aStr2) { - return 1; - } - - return -1; -} - -/** - * Comparator between two mappings with inflated source and name strings where - * the generated positions are compared. - */ -function compareByGeneratedPositionsInflated(mappingA, mappingB) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return strcmp(mappingA.name, mappingB.name); -} -exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; diff --git a/tools/node_modules/eslint/node_modules/source-map/package.json b/tools/node_modules/eslint/node_modules/source-map/package.json deleted file mode 100644 index 048e3ae8609..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "source-map", - "description": "Generates and consumes source maps", - "version": "0.5.7", - "homepage": "https://github.com/mozilla/source-map", - "author": "Nick Fitzgerald ", - "contributors": [ - "Tobias Koppers ", - "Duncan Beevers ", - "Stephen Crane ", - "Ryan Seddon ", - "Miles Elam ", - "Mihai Bazon ", - "Michael Ficarra ", - "Todd Wolfson ", - "Alexander Solovyov ", - "Felix Gnass ", - "Conrad Irwin ", - "usrbincc ", - "David Glasser ", - "Chase Douglas ", - "Evan Wallace ", - "Heather Arthur ", - "Hugh Kennedy ", - "David Glasser ", - "Simon Lydell ", - "Jmeas Smith ", - "Michael Z Goddard ", - "azu ", - "John Gozde ", - "Adam Kirkton ", - "Chris Montgomery ", - "J. Ryan Stinnett ", - "Jack Herrington ", - "Chris Truter ", - "Daniel Espeset ", - "Jamie Wong ", - "Eddy Bruël ", - "Hawken Rives ", - "Gilad Peleg ", - "djchie ", - "Gary Ye ", - "Nicolas Lalevée " - ], - "repository": { - "type": "git", - "url": "http://github.com/mozilla/source-map.git" - }, - "main": "./source-map.js", - "files": [ - "source-map.js", - "lib/", - "dist/source-map.debug.js", - "dist/source-map.js", - "dist/source-map.min.js", - "dist/source-map.min.js.map" - ], - "engines": { - "node": ">=0.10.0" - }, - "license": "BSD-3-Clause", - "scripts": { - "test": "npm run build && node test/run-tests.js", - "build": "webpack --color", - "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md" - }, - "devDependencies": { - "doctoc": "^0.15.0", - "webpack": "^1.12.0" - }, - "typings": "source-map" -} diff --git a/tools/node_modules/eslint/node_modules/source-map/source-map.js b/tools/node_modules/eslint/node_modules/source-map/source-map.js deleted file mode 100644 index bc88fe820c8..00000000000 --- a/tools/node_modules/eslint/node_modules/source-map/source-map.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright 2009-2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE.txt or: - * http://opensource.org/licenses/BSD-3-Clause - */ -exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator; -exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer; -exports.SourceNode = require('./lib/source-node').SourceNode; diff --git a/tools/node_modules/eslint/node_modules/spdx-license-ids/deprecated.json b/tools/node_modules/eslint/node_modules/spdx-license-ids/deprecated.json index c7de09858ff..278531e40c6 100644 --- a/tools/node_modules/eslint/node_modules/spdx-license-ids/deprecated.json +++ b/tools/node_modules/eslint/node_modules/spdx-license-ids/deprecated.json @@ -21,6 +21,7 @@ "LGPL-3.0", "Nunit", "StandardML-NJ", + "bzip2-1.0.5", "eCos-2.0", "wxWindows" ] diff --git a/tools/node_modules/eslint/node_modules/spdx-license-ids/index.json b/tools/node_modules/eslint/node_modules/spdx-license-ids/index.json index a2f18e40160..fdd78fa0329 100644 --- a/tools/node_modules/eslint/node_modules/spdx-license-ids/index.json +++ b/tools/node_modules/eslint/node_modules/spdx-license-ids/index.json @@ -30,6 +30,8 @@ "Apache-1.0", "Apache-1.1", "Apache-2.0", + "App-s2p", + "Arphic-1999", "Artistic-1.0", "Artistic-1.0-Perl", "Artistic-1.0-cl8", @@ -55,11 +57,13 @@ "BSD-Source-Code", "BSL-1.0", "BUSL-1.1", + "Baekmuk", "Bahyph", "Barr", "Beerware", "BitTorrent-1.0", "BitTorrent-1.1", + "Bitstream-Vera", "BlueOak-1.0.0", "Borceux", "C-UDA-1.0", @@ -73,6 +77,7 @@ "CC-BY-3.0", "CC-BY-3.0-AT", "CC-BY-3.0-DE", + "CC-BY-3.0-IGO", "CC-BY-3.0-NL", "CC-BY-3.0-US", "CC-BY-4.0", @@ -148,6 +153,7 @@ "CrystalStacker", "Cube", "D-FSL-1.0", + "DL-DE-BY-2.0", "DOC", "DRL-1.0", "DSDP", @@ -163,6 +169,7 @@ "EUPL-1.0", "EUPL-1.1", "EUPL-1.2", + "Elastic-2.0", "Entessa", "ErlPL-1.1", "Eurosym", @@ -224,6 +231,7 @@ "Interbase-1.0", "JPNIC", "JSON", + "Jam", "JasPer-2.0", "LAL-1.2", "LAL-1.3", @@ -241,6 +249,8 @@ "LPPL-1.2", "LPPL-1.3a", "LPPL-1.3c", + "LZMA-SDK-9.11-to-9.20", + "LZMA-SDK-9.22", "Latex2e", "Leptonica", "LiLiQ-P-1.1", @@ -262,10 +272,12 @@ "MPL-1.1", "MPL-2.0", "MPL-2.0-no-copyleft-exception", + "MS-LPL", "MS-PL", "MS-RL", "MTLL", "MakeIndex", + "Minpack", "MirOS", "Motosoto", "MulanPSL-1.0", @@ -278,6 +290,7 @@ "NCGL-UK-2.0", "NCSA", "NGPL", + "NICTA-1.0", "NIST-PD", "NIST-PD-fallback", "NLOD-1.0", @@ -351,6 +364,7 @@ "PolyForm-Small-Business-1.0.0", "PostgreSQL", "Python-2.0", + "Python-2.0.1", "QPL-1.0", "Qhull", "RHeCos-1.1", @@ -379,6 +393,7 @@ "SSPL-1.0", "SWL", "Saxpath", + "SchemeReport", "Sendmail", "Sendmail-8.23", "SimPL-2.0", @@ -411,6 +426,7 @@ "Watcom-1.0", "Wsuipa", "X11", + "X11-distribute-modifications-variant", "XFree86-1.1", "XSkat", "Xerox", @@ -426,7 +442,6 @@ "Zimbra-1.4", "Zlib", "blessing", - "bzip2-1.0.5", "bzip2-1.0.6", "copyleft-next-0.3.0", "copyleft-next-0.3.1", @@ -441,7 +456,9 @@ "libpng-2.0", "libselinux-1.0", "libtiff", + "mpi-permissive", "mpich2", + "mplus", "psfrag", "psutils", "xinetd", diff --git a/tools/node_modules/eslint/node_modules/spdx-license-ids/package.json b/tools/node_modules/eslint/node_modules/spdx-license-ids/package.json index 61b10edc24c..e3622fccaf7 100644 --- a/tools/node_modules/eslint/node_modules/spdx-license-ids/package.json +++ b/tools/node_modules/eslint/node_modules/spdx-license-ids/package.json @@ -1,6 +1,6 @@ { "name": "spdx-license-ids", - "version": "3.0.11", + "version": "3.0.12", "description": "A list of SPDX license identifiers", "repository": "jslicense/spdx-license-ids", "author": "Shinnosuke Watanabe (https://github.com/shinnn)", diff --git a/tools/node_modules/eslint/node_modules/to-regex-range/LICENSE b/tools/node_modules/eslint/node_modules/to-regex-range/LICENSE new file mode 100644 index 00000000000..7cccaf9e345 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/to-regex-range/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/to-regex-range/index.js b/tools/node_modules/eslint/node_modules/to-regex-range/index.js new file mode 100644 index 00000000000..77fbaced17f --- /dev/null +++ b/tools/node_modules/eslint/node_modules/to-regex-range/index.js @@ -0,0 +1,288 @@ +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +const isNumber = require('is-number'); + +const toRegexRange = (min, max, options) => { + if (isNumber(min) === false) { + throw new TypeError('toRegexRange: expected the first argument to be a number'); + } + + if (max === void 0 || min === max) { + return String(min); + } + + if (isNumber(max) === false) { + throw new TypeError('toRegexRange: expected the second argument to be a number.'); + } + + let opts = { relaxZeros: true, ...options }; + if (typeof opts.strictZeros === 'boolean') { + opts.relaxZeros = opts.strictZeros === false; + } + + let relax = String(opts.relaxZeros); + let shorthand = String(opts.shorthand); + let capture = String(opts.capture); + let wrap = String(opts.wrap); + let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap; + + if (toRegexRange.cache.hasOwnProperty(cacheKey)) { + return toRegexRange.cache[cacheKey].result; + } + + let a = Math.min(min, max); + let b = Math.max(min, max); + + if (Math.abs(a - b) === 1) { + let result = min + '|' + max; + if (opts.capture) { + return `(${result})`; + } + if (opts.wrap === false) { + return result; + } + return `(?:${result})`; + } + + let isPadded = hasPadding(min) || hasPadding(max); + let state = { min, max, a, b }; + let positives = []; + let negatives = []; + + if (isPadded) { + state.isPadded = isPadded; + state.maxLen = String(state.max).length; + } + + if (a < 0) { + let newMin = b < 0 ? Math.abs(b) : 1; + negatives = splitToPatterns(newMin, Math.abs(a), state, opts); + a = state.a = 0; + } + + if (b >= 0) { + positives = splitToPatterns(a, b, state, opts); + } + + state.negatives = negatives; + state.positives = positives; + state.result = collatePatterns(negatives, positives, opts); + + if (opts.capture === true) { + state.result = `(${state.result})`; + } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) { + state.result = `(?:${state.result})`; + } + + toRegexRange.cache[cacheKey] = state; + return state.result; +}; + +function collatePatterns(neg, pos, options) { + let onlyNegative = filterPatterns(neg, pos, '-', false, options) || []; + let onlyPositive = filterPatterns(pos, neg, '', false, options) || []; + let intersected = filterPatterns(neg, pos, '-?', true, options) || []; + let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join('|'); +} + +function splitToRanges(min, max) { + let nines = 1; + let zeros = 1; + + let stop = countNines(min, nines); + let stops = new Set([max]); + + while (min <= stop && stop <= max) { + stops.add(stop); + nines += 1; + stop = countNines(min, nines); + } + + stop = countZeros(max + 1, zeros) - 1; + + while (min < stop && stop <= max) { + stops.add(stop); + zeros += 1; + stop = countZeros(max + 1, zeros) - 1; + } + + stops = [...stops]; + stops.sort(compare); + return stops; +} + +/** + * Convert a range to a regex pattern + * @param {Number} `start` + * @param {Number} `stop` + * @return {String} + */ + +function rangeToPattern(start, stop, options) { + if (start === stop) { + return { pattern: start, count: [], digits: 0 }; + } + + let zipped = zip(start, stop); + let digits = zipped.length; + let pattern = ''; + let count = 0; + + for (let i = 0; i < digits; i++) { + let [startDigit, stopDigit] = zipped[i]; + + if (startDigit === stopDigit) { + pattern += startDigit; + + } else if (startDigit !== '0' || stopDigit !== '9') { + pattern += toCharacterClass(startDigit, stopDigit, options); + + } else { + count++; + } + } + + if (count) { + pattern += options.shorthand === true ? '\\d' : '[0-9]'; + } + + return { pattern, count: [count], digits }; +} + +function splitToPatterns(min, max, tok, options) { + let ranges = splitToRanges(min, max); + let tokens = []; + let start = min; + let prev; + + for (let i = 0; i < ranges.length; i++) { + let max = ranges[i]; + let obj = rangeToPattern(String(start), String(max), options); + let zeros = ''; + + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.count.length > 1) { + prev.count.pop(); + } + + prev.count.push(obj.count[0]); + prev.string = prev.pattern + toQuantifier(prev.count); + start = max + 1; + continue; + } + + if (tok.isPadded) { + zeros = padZeros(max, tok, options); + } + + obj.string = zeros + obj.pattern + toQuantifier(obj.count); + tokens.push(obj); + start = max + 1; + prev = obj; + } + + return tokens; +} + +function filterPatterns(arr, comparison, prefix, intersection, options) { + let result = []; + + for (let ele of arr) { + let { string } = ele; + + // only push if _both_ are negative... + if (!intersection && !contains(comparison, 'string', string)) { + result.push(prefix + string); + } + + // or _both_ are positive + if (intersection && contains(comparison, 'string', string)) { + result.push(prefix + string); + } + } + return result; +} + +/** + * Zip strings + */ + +function zip(a, b) { + let arr = []; + for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]); + return arr; +} + +function compare(a, b) { + return a > b ? 1 : b > a ? -1 : 0; +} + +function contains(arr, key, val) { + return arr.some(ele => ele[key] === val); +} + +function countNines(min, len) { + return Number(String(min).slice(0, -len) + '9'.repeat(len)); +} + +function countZeros(integer, zeros) { + return integer - (integer % Math.pow(10, zeros)); +} + +function toQuantifier(digits) { + let [start = 0, stop = ''] = digits; + if (stop || start > 1) { + return `{${start + (stop ? ',' + stop : '')}}`; + } + return ''; +} + +function toCharacterClass(a, b, options) { + return `[${a}${(b - a === 1) ? '' : '-'}${b}]`; +} + +function hasPadding(str) { + return /^-?(0+)\d/.test(str); +} + +function padZeros(value, tok, options) { + if (!tok.isPadded) { + return value; + } + + let diff = Math.abs(tok.maxLen - String(value).length); + let relax = options.relaxZeros !== false; + + switch (diff) { + case 0: + return ''; + case 1: + return relax ? '0?' : '0'; + case 2: + return relax ? '0{0,2}' : '00'; + default: { + return relax ? `0{0,${diff}}` : `0{${diff}}`; + } + } +} + +/** + * Cache + */ + +toRegexRange.cache = {}; +toRegexRange.clearCache = () => (toRegexRange.cache = {}); + +/** + * Expose `toRegexRange` + */ + +module.exports = toRegexRange; diff --git a/tools/node_modules/eslint/node_modules/to-regex-range/package.json b/tools/node_modules/eslint/node_modules/to-regex-range/package.json new file mode 100644 index 00000000000..4ef194f352a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/to-regex-range/package.json @@ -0,0 +1,88 @@ +{ + "name": "to-regex-range", + "description": "Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.", + "version": "5.0.1", + "homepage": "https://github.com/micromatch/to-regex-range", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Rouven Weßling (www.rouvenwessling.de)" + ], + "repository": "micromatch/to-regex-range", + "bugs": { + "url": "https://github.com/micromatch/to-regex-range/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=8.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "is-number": "^7.0.0" + }, + "devDependencies": { + "fill-range": "^6.0.0", + "gulp-format-md": "^2.0.0", + "mocha": "^6.0.2", + "text-table": "^0.2.0", + "time-diff": "^0.3.1" + }, + "keywords": [ + "bash", + "date", + "expand", + "expansion", + "expression", + "glob", + "match", + "match date", + "match number", + "match numbers", + "match year", + "matches", + "matching", + "number", + "numbers", + "numerical", + "range", + "ranges", + "regex", + "regexp", + "regular", + "regular expression", + "sequence" + ], + "verb": { + "layout": "default", + "toc": false, + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "helpers": { + "examples": { + "displayName": "examples" + } + }, + "related": { + "list": [ + "expand-range", + "fill-range", + "micromatch", + "repeat-element", + "repeat-string" + ] + } + } +} diff --git a/tools/node_modules/eslint/node_modules/update-browserslist-db/LICENSE b/tools/node_modules/eslint/node_modules/update-browserslist-db/LICENSE new file mode 100644 index 00000000000..377ae1bee96 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/update-browserslist-db/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright 2022 Andrey Sitnik and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/update-browserslist-db/check-npm-version.js b/tools/node_modules/eslint/node_modules/update-browserslist-db/check-npm-version.js new file mode 100644 index 00000000000..25e1c92d36a --- /dev/null +++ b/tools/node_modules/eslint/node_modules/update-browserslist-db/check-npm-version.js @@ -0,0 +1,16 @@ +let { execSync } = require('child_process') +let pico = require('picocolors') + +try { + let version = parseInt(execSync('npm -v')) + if (version <= 6) { + process.stderr.write( + pico.red( + 'Update npm or call ' + + pico.yellow('npx browserslist@latest --update-db') + + '\n' + ) + ) + process.exit(1) + } +} catch (e) {} diff --git a/tools/node_modules/eslint/node_modules/update-browserslist-db/cli.js b/tools/node_modules/eslint/node_modules/update-browserslist-db/cli.js new file mode 100755 index 00000000000..1388e94d08c --- /dev/null +++ b/tools/node_modules/eslint/node_modules/update-browserslist-db/cli.js @@ -0,0 +1,42 @@ +#!/usr/bin/env node + +let { readFileSync } = require('fs') +let { join } = require('path') + +require('./check-npm-version') +let updateDb = require('./') + +const ROOT = __dirname + +function getPackage() { + return JSON.parse(readFileSync(join(ROOT, 'package.json'))) +} + +let args = process.argv.slice(2) + +let USAGE = 'Usage:\n npx update-browserslist-db\n' + +function isArg(arg) { + return args.some(i => i === arg) +} + +function error(msg) { + process.stderr.write('update-browserslist-db: ' + msg + '\n') + process.exit(1) +} + +if (isArg('--help') || isArg('-h')) { + process.stdout.write(getPackage().description + '.\n\n' + USAGE + '\n') +} else if (isArg('--version') || isArg('-v')) { + process.stdout.write('browserslist-lint ' + getPackage().version + '\n') +} else { + try { + updateDb() + } catch (e) { + if (e.name === 'BrowserslistUpdateError') { + error(e.message) + } else { + throw e + } + } +} diff --git a/tools/node_modules/eslint/node_modules/update-browserslist-db/index.js b/tools/node_modules/eslint/node_modules/update-browserslist-db/index.js new file mode 100644 index 00000000000..41dd8d1879e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/update-browserslist-db/index.js @@ -0,0 +1,309 @@ +let childProcess = require('child_process') +let escalade = require('escalade/sync') +let pico = require('picocolors') +let path = require('path') +let fs = require('fs') + +const { detectIndent, detectEOL } = require('./utils') + +function BrowserslistUpdateError(message) { + this.name = 'BrowserslistUpdateError' + this.message = message + this.browserslist = true + if (Error.captureStackTrace) { + Error.captureStackTrace(this, BrowserslistUpdateError) + } +} + +BrowserslistUpdateError.prototype = Error.prototype + +/* c8 ignore next 3 */ +function defaultPrint(str) { + process.stdout.write(str) +} + +function detectLockfile() { + let packageDir = escalade('.', (dir, names) => { + return names.indexOf('package.json') !== -1 ? dir : '' + }) + + if (!packageDir) { + throw new BrowserslistUpdateError( + 'Cannot find package.json. ' + + 'Is this the right directory to run `npx update-browserslist-db` in?' + ) + } + + let lockfileNpm = path.join(packageDir, 'package-lock.json') + let lockfileShrinkwrap = path.join(packageDir, 'npm-shrinkwrap.json') + let lockfileYarn = path.join(packageDir, 'yarn.lock') + let lockfilePnpm = path.join(packageDir, 'pnpm-lock.yaml') + + if (fs.existsSync(lockfilePnpm)) { + return { mode: 'pnpm', file: lockfilePnpm } + } else if (fs.existsSync(lockfileNpm)) { + return { mode: 'npm', file: lockfileNpm } + } else if (fs.existsSync(lockfileYarn)) { + let lock = { mode: 'yarn', file: lockfileYarn } + lock.content = fs.readFileSync(lock.file).toString() + lock.version = /# yarn lockfile v1/.test(lock.content) ? 1 : 2 + return lock + } else if (fs.existsSync(lockfileShrinkwrap)) { + return { mode: 'npm', file: lockfileShrinkwrap } + } + throw new BrowserslistUpdateError( + 'No lockfile found. Run "npm install", "yarn install" or "pnpm install"' + ) +} + +function getLatestInfo(lock) { + if (lock.mode === 'yarn') { + if (lock.version === 1) { + return JSON.parse( + childProcess.execSync('yarn info caniuse-lite --json').toString() + ).data + } else { + return JSON.parse( + childProcess.execSync('yarn npm info caniuse-lite --json').toString() + ) + } + } + return JSON.parse( + childProcess.execSync('npm show caniuse-lite --json').toString() + ) +} + +function getBrowsers() { + let browserslist = require('browserslist') + return browserslist().reduce((result, entry) => { + if (!result[entry[0]]) { + result[entry[0]] = [] + } + result[entry[0]].push(entry[1]) + return result + }, {}) +} + +function diffBrowsers(old, current) { + let browsers = Object.keys(old).concat( + Object.keys(current).filter(browser => old[browser] === undefined) + ) + return browsers + .map(browser => { + let oldVersions = old[browser] || [] + let currentVersions = current[browser] || [] + let common = oldVersions.filter(v => currentVersions.includes(v)) + let added = currentVersions.filter(v => !common.includes(v)) + let removed = oldVersions.filter(v => !common.includes(v)) + return removed + .map(v => pico.red('- ' + browser + ' ' + v)) + .concat(added.map(v => pico.green('+ ' + browser + ' ' + v))) + }) + .reduce((result, array) => result.concat(array), []) + .join('\n') +} + +function updateNpmLockfile(lock, latest) { + let metadata = { latest, versions: [] } + let content = deletePackage(JSON.parse(lock.content), metadata) + metadata.content = JSON.stringify(content, null, detectIndent(lock.content)) + return metadata +} + +function deletePackage(node, metadata) { + if (node.dependencies) { + if (node.dependencies['caniuse-lite']) { + let version = node.dependencies['caniuse-lite'].version + metadata.versions[version] = true + delete node.dependencies['caniuse-lite'] + } + for (let i in node.dependencies) { + node.dependencies[i] = deletePackage(node.dependencies[i], metadata) + } + } + return node +} + +let yarnVersionRe = /version "(.*?)"/ + +function updateYarnLockfile(lock, latest) { + let blocks = lock.content.split(/(\n{2,})/).map(block => { + return block.split('\n') + }) + let versions = {} + blocks.forEach(lines => { + if (lines[0].indexOf('caniuse-lite@') !== -1) { + let match = yarnVersionRe.exec(lines[1]) + versions[match[1]] = true + if (match[1] !== latest.version) { + lines[1] = lines[1].replace( + /version "[^"]+"/, + 'version "' + latest.version + '"' + ) + lines[2] = lines[2].replace( + /resolved "[^"]+"/, + 'resolved "' + latest.dist.tarball + '"' + ) + if (lines.length === 4) { + lines[3] = latest.dist.integrity + ? lines[3].replace( + /integrity .+/, + 'integrity ' + latest.dist.integrity + ) + : '' + } + } + } + }) + let content = blocks.map(lines => lines.join('\n')).join('') + return { content, versions } +} + +function updateLockfile(lock, latest) { + if (!lock.content) lock.content = fs.readFileSync(lock.file).toString() + + let updatedLockFile + if (lock.mode === 'yarn') { + updatedLockFile = updateYarnLockfile(lock, latest) + } else { + updatedLockFile = updateNpmLockfile(lock, latest) + } + updatedLockFile.content = updatedLockFile.content.replace( + /\n/g, + detectEOL(lock.content) + ) + return updatedLockFile +} + +function updatePackageManually(print, lock, latest) { + let lockfileData = updateLockfile(lock, latest) + let caniuseVersions = Object.keys(lockfileData.versions).sort() + if (caniuseVersions.length === 1 && caniuseVersions[0] === latest.version) { + print( + 'Installed version: ' + + pico.bold(pico.green(latest.version)) + + '\n' + + pico.bold(pico.green('caniuse-lite is up to date')) + + '\n' + ) + return + } + + if (caniuseVersions.length === 0) { + caniuseVersions[0] = 'none' + } + print( + 'Installed version' + + (caniuseVersions.length === 1 ? ': ' : 's: ') + + pico.bold(pico.red(caniuseVersions.join(', '))) + + '\n' + + 'Removing old caniuse-lite from lock file\n' + ) + fs.writeFileSync(lock.file, lockfileData.content) + + let install = lock.mode === 'yarn' ? 'yarn add -W' : lock.mode + ' install' + print( + 'Installing new caniuse-lite version\n' + + pico.yellow('$ ' + install + ' caniuse-lite') + + '\n' + ) + try { + childProcess.execSync(install + ' caniuse-lite') + } catch (e) /* c8 ignore start */ { + print( + pico.red( + '\n' + + e.stack + + '\n\n' + + 'Problem with `' + + install + + ' caniuse-lite` call. ' + + 'Run it manually.\n' + ) + ) + process.exit(1) + } /* c8 ignore end */ + + let del = lock.mode === 'yarn' ? 'yarn remove -W' : lock.mode + ' uninstall' + print( + 'Cleaning package.json dependencies from caniuse-lite\n' + + pico.yellow('$ ' + del + ' caniuse-lite') + + '\n' + ) + childProcess.execSync(del + ' caniuse-lite') +} + +function updateWith(print, cmd) { + print('Updating caniuse-lite version\n' + pico.yellow('$ ' + cmd) + '\n') + try { + childProcess.execSync(cmd) + } catch (e) /* c8 ignore start */ { + print(pico.red(e.stdout.toString())) + print( + pico.red( + '\n' + + e.stack + + '\n\n' + + 'Problem with `' + + cmd + + '` call. ' + + 'Run it manually.\n' + ) + ) + process.exit(1) + } /* c8 ignore end */ +} + +module.exports = function updateDB(print = defaultPrint) { + let lock = detectLockfile() + let latest = getLatestInfo(lock) + + let listError + let oldList + try { + oldList = getBrowsers() + } catch (e) { + listError = e + } + + print('Latest version: ' + pico.bold(pico.green(latest.version)) + '\n') + + if (lock.mode === 'yarn' && lock.version !== 1) { + updateWith(print, 'yarn up -R caniuse-lite') + } else if (lock.mode === 'pnpm') { + updateWith(print, 'pnpm up caniuse-lite') + } else { + updatePackageManually(print, lock, latest) + } + + print('caniuse-lite has been successfully updated\n') + + let newList + if (!listError) { + try { + newList = getBrowsers() + } catch (e) /* c8 ignore start */ { + listError = e + } /* c8 ignore end */ + } + + if (listError) { + print( + pico.red( + '\n' + + listError.stack + + '\n\n' + + 'Problem with browser list retrieval.\n' + + 'Target browser changes won’t be shown.\n' + ) + ) + } else { + let changes = diffBrowsers(oldList, newList) + if (changes) { + print('\nTarget browser changes:\n') + print(changes + '\n') + } else { + print('\n' + pico.green('No target browser changes') + '\n') + } + } +} diff --git a/tools/node_modules/eslint/node_modules/update-browserslist-db/package.json b/tools/node_modules/eslint/node_modules/update-browserslist-db/package.json new file mode 100644 index 00000000000..3e20e7f0994 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/update-browserslist-db/package.json @@ -0,0 +1,38 @@ +{ + "name": "update-browserslist-db", + "version": "1.0.9", + "description": "CLI tool to update caniuse-lite to refresh target browsers from Browserslist config", + "keywords": [ + "caniuse", + "browsers", + "target" + ], + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "author": "Andrey Sitnik ", + "license": "MIT", + "repository": "browserslist/update-db", + "types": "./index.d.ts", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + }, + "bin": { + "browserslist-lint": "cli.js" + } +} diff --git a/tools/node_modules/eslint/node_modules/update-browserslist-db/utils.js b/tools/node_modules/eslint/node_modules/update-browserslist-db/utils.js new file mode 100644 index 00000000000..d3ac914d023 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/update-browserslist-db/utils.js @@ -0,0 +1,22 @@ +const { EOL } = require('os') + +const getFirstRegexpMatchOrDefault = (text, regexp, defaultValue) => { + regexp.lastIndex = 0 // https://stackoverflow.com/a/11477448/4536543 + let match = regexp.exec(text) + if (match !== null) return match[1] + return defaultValue +} + +const DEFAULT_INDENT = ' ' +const INDENT_REGEXP = /^([ \t]+)[^\s]/m + +module.exports.detectIndent = text => + getFirstRegexpMatchOrDefault(text, INDENT_REGEXP, DEFAULT_INDENT) +module.exports.DEFAULT_INDENT = DEFAULT_INDENT + +const DEFAULT_EOL = EOL +const EOL_REGEXP = /(\r\n|\n|\r)/g + +module.exports.detectEOL = text => + getFirstRegexpMatchOrDefault(text, EOL_REGEXP, DEFAULT_EOL) +module.exports.DEFAULT_EOL = DEFAULT_EOL diff --git a/tools/node_modules/eslint/node_modules/v8-compile-cache/LICENSE b/tools/node_modules/eslint/node_modules/v8-compile-cache/LICENSE deleted file mode 100644 index b72b6701877..00000000000 --- a/tools/node_modules/eslint/node_modules/v8-compile-cache/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019 Andres Suarez - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/v8-compile-cache/package.json b/tools/node_modules/eslint/node_modules/v8-compile-cache/package.json deleted file mode 100644 index f878914e8aa..00000000000 --- a/tools/node_modules/eslint/node_modules/v8-compile-cache/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "v8-compile-cache", - "version": "2.3.0", - "description": "Require hook for automatic V8 compile cache persistence", - "main": "v8-compile-cache.js", - "scripts": { - "bench": "bench/run.sh", - "eslint": "eslint --max-warnings=0 .", - "tap": "tap test/*-test.js", - "test": "npm run tap", - "posttest": "npm run eslint" - }, - "author": "Andres Suarez ", - "repository": { - "type": "git", - "url": "https://github.com/zertosh/v8-compile-cache.git" - }, - "files": [ - "v8-compile-cache.js" - ], - "license": "MIT", - "dependencies": {}, - "devDependencies": { - "babel-core": "6.26.3", - "eslint": "^7.12.1", - "flow-parser": "0.136.0", - "rimraf": "^2.5.4", - "rxjs": "6.6.3", - "semver": "^5.3.0", - "tap": "^9.0.0", - "temp": "^0.8.3", - "yarn": "1.22.10" - } -} diff --git a/tools/node_modules/eslint/node_modules/v8-compile-cache/v8-compile-cache.js b/tools/node_modules/eslint/node_modules/v8-compile-cache/v8-compile-cache.js deleted file mode 100644 index f094da40f8a..00000000000 --- a/tools/node_modules/eslint/node_modules/v8-compile-cache/v8-compile-cache.js +++ /dev/null @@ -1,371 +0,0 @@ -'use strict'; - -const Module = require('module'); -const crypto = require('crypto'); -const fs = require('fs'); -const path = require('path'); -const vm = require('vm'); -const os = require('os'); - -const hasOwnProperty = Object.prototype.hasOwnProperty; - -//------------------------------------------------------------------------------ -// FileSystemBlobStore -//------------------------------------------------------------------------------ - -class FileSystemBlobStore { - constructor(directory, prefix) { - const name = prefix ? slashEscape(prefix + '.') : ''; - this._blobFilename = path.join(directory, name + 'BLOB'); - this._mapFilename = path.join(directory, name + 'MAP'); - this._lockFilename = path.join(directory, name + 'LOCK'); - this._directory = directory; - this._load(); - } - - has(key, invalidationKey) { - if (hasOwnProperty.call(this._memoryBlobs, key)) { - return this._invalidationKeys[key] === invalidationKey; - } else if (hasOwnProperty.call(this._storedMap, key)) { - return this._storedMap[key][0] === invalidationKey; - } - return false; - } - - get(key, invalidationKey) { - if (hasOwnProperty.call(this._memoryBlobs, key)) { - if (this._invalidationKeys[key] === invalidationKey) { - return this._memoryBlobs[key]; - } - } else if (hasOwnProperty.call(this._storedMap, key)) { - const mapping = this._storedMap[key]; - if (mapping[0] === invalidationKey) { - return this._storedBlob.slice(mapping[1], mapping[2]); - } - } - } - - set(key, invalidationKey, buffer) { - this._invalidationKeys[key] = invalidationKey; - this._memoryBlobs[key] = buffer; - this._dirty = true; - } - - delete(key) { - if (hasOwnProperty.call(this._memoryBlobs, key)) { - this._dirty = true; - delete this._memoryBlobs[key]; - } - if (hasOwnProperty.call(this._invalidationKeys, key)) { - this._dirty = true; - delete this._invalidationKeys[key]; - } - if (hasOwnProperty.call(this._storedMap, key)) { - this._dirty = true; - delete this._storedMap[key]; - } - } - - isDirty() { - return this._dirty; - } - - save() { - const dump = this._getDump(); - const blobToStore = Buffer.concat(dump[0]); - const mapToStore = JSON.stringify(dump[1]); - - try { - mkdirpSync(this._directory); - fs.writeFileSync(this._lockFilename, 'LOCK', {flag: 'wx'}); - } catch (error) { - // Swallow the exception if we fail to acquire the lock. - return false; - } - - try { - fs.writeFileSync(this._blobFilename, blobToStore); - fs.writeFileSync(this._mapFilename, mapToStore); - } finally { - fs.unlinkSync(this._lockFilename); - } - - return true; - } - - _load() { - try { - this._storedBlob = fs.readFileSync(this._blobFilename); - this._storedMap = JSON.parse(fs.readFileSync(this._mapFilename)); - } catch (e) { - this._storedBlob = Buffer.alloc(0); - this._storedMap = {}; - } - this._dirty = false; - this._memoryBlobs = {}; - this._invalidationKeys = {}; - } - - _getDump() { - const buffers = []; - const newMap = {}; - let offset = 0; - - function push(key, invalidationKey, buffer) { - buffers.push(buffer); - newMap[key] = [invalidationKey, offset, offset + buffer.length]; - offset += buffer.length; - } - - for (const key of Object.keys(this._memoryBlobs)) { - const buffer = this._memoryBlobs[key]; - const invalidationKey = this._invalidationKeys[key]; - push(key, invalidationKey, buffer); - } - - for (const key of Object.keys(this._storedMap)) { - if (hasOwnProperty.call(newMap, key)) continue; - const mapping = this._storedMap[key]; - const buffer = this._storedBlob.slice(mapping[1], mapping[2]); - push(key, mapping[0], buffer); - } - - return [buffers, newMap]; - } -} - -//------------------------------------------------------------------------------ -// NativeCompileCache -//------------------------------------------------------------------------------ - -class NativeCompileCache { - constructor() { - this._cacheStore = null; - this._previousModuleCompile = null; - } - - setCacheStore(cacheStore) { - this._cacheStore = cacheStore; - } - - install() { - const self = this; - const hasRequireResolvePaths = typeof require.resolve.paths === 'function'; - this._previousModuleCompile = Module.prototype._compile; - Module.prototype._compile = function(content, filename) { - const mod = this; - - function require(id) { - return mod.require(id); - } - - // https://github.com/nodejs/node/blob/v10.15.3/lib/internal/modules/cjs/helpers.js#L28 - function resolve(request, options) { - return Module._resolveFilename(request, mod, false, options); - } - require.resolve = resolve; - - // https://github.com/nodejs/node/blob/v10.15.3/lib/internal/modules/cjs/helpers.js#L37 - // resolve.resolve.paths was added in v8.9.0 - if (hasRequireResolvePaths) { - resolve.paths = function paths(request) { - return Module._resolveLookupPaths(request, mod, true); - }; - } - - require.main = process.mainModule; - - // Enable support to add extra extension types - require.extensions = Module._extensions; - require.cache = Module._cache; - - const dirname = path.dirname(filename); - - const compiledWrapper = self._moduleCompile(filename, content); - - // We skip the debugger setup because by the time we run, node has already - // done that itself. - - // `Buffer` is included for Electron. - // See https://github.com/zertosh/v8-compile-cache/pull/10#issuecomment-518042543 - const args = [mod.exports, require, mod, filename, dirname, process, global, Buffer]; - return compiledWrapper.apply(mod.exports, args); - }; - } - - uninstall() { - Module.prototype._compile = this._previousModuleCompile; - } - - _moduleCompile(filename, content) { - // https://github.com/nodejs/node/blob/v7.5.0/lib/module.js#L511 - - // Remove shebang - var contLen = content.length; - if (contLen >= 2) { - if (content.charCodeAt(0) === 35/*#*/ && - content.charCodeAt(1) === 33/*!*/) { - if (contLen === 2) { - // Exact match - content = ''; - } else { - // Find end of shebang line and slice it off - var i = 2; - for (; i < contLen; ++i) { - var code = content.charCodeAt(i); - if (code === 10/*\n*/ || code === 13/*\r*/) break; - } - if (i === contLen) { - content = ''; - } else { - // Note that this actually includes the newline character(s) in the - // new output. This duplicates the behavior of the regular - // expression that was previously used to replace the shebang line - content = content.slice(i); - } - } - } - } - - // create wrapper function - var wrapper = Module.wrap(content); - - var invalidationKey = crypto - .createHash('sha1') - .update(content, 'utf8') - .digest('hex'); - - var buffer = this._cacheStore.get(filename, invalidationKey); - - var script = new vm.Script(wrapper, { - filename: filename, - lineOffset: 0, - displayErrors: true, - cachedData: buffer, - produceCachedData: true, - }); - - if (script.cachedDataProduced) { - this._cacheStore.set(filename, invalidationKey, script.cachedData); - } else if (script.cachedDataRejected) { - this._cacheStore.delete(filename); - } - - var compiledWrapper = script.runInThisContext({ - filename: filename, - lineOffset: 0, - columnOffset: 0, - displayErrors: true, - }); - - return compiledWrapper; - } -} - -//------------------------------------------------------------------------------ -// utilities -// -// https://github.com/substack/node-mkdirp/blob/f2003bb/index.js#L55-L98 -// https://github.com/zertosh/slash-escape/blob/e7ebb99/slash-escape.js -//------------------------------------------------------------------------------ - -function mkdirpSync(p_) { - _mkdirpSync(path.resolve(p_), 0o777); -} - -function _mkdirpSync(p, mode) { - try { - fs.mkdirSync(p, mode); - } catch (err0) { - if (err0.code === 'ENOENT') { - _mkdirpSync(path.dirname(p)); - _mkdirpSync(p); - } else { - try { - const stat = fs.statSync(p); - if (!stat.isDirectory()) { throw err0; } - } catch (err1) { - throw err0; - } - } - } -} - -function slashEscape(str) { - const ESCAPE_LOOKUP = { - '\\': 'zB', - ':': 'zC', - '/': 'zS', - '\x00': 'z0', - 'z': 'zZ', - }; - const ESCAPE_REGEX = /[\\:/\x00z]/g; // eslint-disable-line no-control-regex - return str.replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]); -} - -function supportsCachedData() { - const script = new vm.Script('""', {produceCachedData: true}); - // chakracore, as of v1.7.1.0, returns `false`. - return script.cachedDataProduced === true; -} - -function getCacheDir() { - const v8_compile_cache_cache_dir = process.env.V8_COMPILE_CACHE_CACHE_DIR; - if (v8_compile_cache_cache_dir) { - return v8_compile_cache_cache_dir; - } - - // Avoid cache ownership issues on POSIX systems. - const dirname = typeof process.getuid === 'function' - ? 'v8-compile-cache-' + process.getuid() - : 'v8-compile-cache'; - const version = typeof process.versions.v8 === 'string' - ? process.versions.v8 - : typeof process.versions.chakracore === 'string' - ? 'chakracore-' + process.versions.chakracore - : 'node-' + process.version; - const cacheDir = path.join(os.tmpdir(), dirname, version); - return cacheDir; -} - -function getMainName() { - // `require.main.filename` is undefined or null when: - // * node -e 'require("v8-compile-cache")' - // * node -r 'v8-compile-cache' - // * Or, requiring from the REPL. - const mainName = require.main && typeof require.main.filename === 'string' - ? require.main.filename - : process.cwd(); - return mainName; -} - -//------------------------------------------------------------------------------ -// main -//------------------------------------------------------------------------------ - -if (!process.env.DISABLE_V8_COMPILE_CACHE && supportsCachedData()) { - const cacheDir = getCacheDir(); - const prefix = getMainName(); - const blobStore = new FileSystemBlobStore(cacheDir, prefix); - - const nativeCompileCache = new NativeCompileCache(); - nativeCompileCache.setCacheStore(blobStore); - nativeCompileCache.install(); - - process.once('exit', () => { - if (blobStore.isDirty()) { - blobStore.save(); - } - nativeCompileCache.uninstall(); - }); -} - -module.exports.__TEST__ = { - FileSystemBlobStore, - NativeCompileCache, - mkdirpSync, - slashEscape, - supportsCachedData, - getCacheDir, - getMainName, -}; diff --git a/tools/node_modules/eslint/node_modules/yocto-queue/index.js b/tools/node_modules/eslint/node_modules/yocto-queue/index.js new file mode 100644 index 00000000000..2f3e6dcd729 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/yocto-queue/index.js @@ -0,0 +1,68 @@ +class Node { + /// value; + /// next; + + constructor(value) { + this.value = value; + + // TODO: Remove this when targeting Node.js 12. + this.next = undefined; + } +} + +class Queue { + // TODO: Use private class fields when targeting Node.js 12. + // #_head; + // #_tail; + // #_size; + + constructor() { + this.clear(); + } + + enqueue(value) { + const node = new Node(value); + + if (this._head) { + this._tail.next = node; + this._tail = node; + } else { + this._head = node; + this._tail = node; + } + + this._size++; + } + + dequeue() { + const current = this._head; + if (!current) { + return; + } + + this._head = this._head.next; + this._size--; + return current.value; + } + + clear() { + this._head = undefined; + this._tail = undefined; + this._size = 0; + } + + get size() { + return this._size; + } + + * [Symbol.iterator]() { + let current = this._head; + + while (current) { + yield current.value; + current = current.next; + } + } +} + +module.exports = Queue; diff --git a/tools/node_modules/eslint/node_modules/yocto-queue/license b/tools/node_modules/eslint/node_modules/yocto-queue/license new file mode 100644 index 00000000000..fa7ceba3eb4 --- /dev/null +++ b/tools/node_modules/eslint/node_modules/yocto-queue/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/node_modules/eslint/node_modules/yocto-queue/package.json b/tools/node_modules/eslint/node_modules/yocto-queue/package.json new file mode 100644 index 00000000000..71a91017b6e --- /dev/null +++ b/tools/node_modules/eslint/node_modules/yocto-queue/package.json @@ -0,0 +1,43 @@ +{ + "name": "yocto-queue", + "version": "0.1.0", + "description": "Tiny queue data structure", + "license": "MIT", + "repository": "sindresorhus/yocto-queue", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "queue", + "data", + "structure", + "algorithm", + "queues", + "queuing", + "list", + "array", + "linkedlist", + "fifo", + "enqueue", + "dequeue", + "data-structure" + ], + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.13.1", + "xo": "^0.35.0" + } +} diff --git a/tools/node_modules/eslint/node_modules/yocto-queue/readme.md b/tools/node_modules/eslint/node_modules/yocto-queue/readme.md new file mode 100644 index 00000000000..c72fefc486d --- /dev/null +++ b/tools/node_modules/eslint/node_modules/yocto-queue/readme.md @@ -0,0 +1,64 @@ +# yocto-queue [![](https://badgen.net/bundlephobia/minzip/yocto-queue)](https://bundlephobia.com/result?p=yocto-queue) + +> Tiny queue data structure + +You should use this package instead of an array if you do a lot of `Array#push()` and `Array#shift()` on large arrays, since `Array#shift()` has [linear time complexity](https://medium.com/@ariel.salem1989/an-easy-to-use-guide-to-big-o-time-complexity-5dcf4be8a444#:~:text=O(N)%E2%80%94Linear%20Time) *O(n)* while `Queue#dequeue()` has [constant time complexity](https://medium.com/@ariel.salem1989/an-easy-to-use-guide-to-big-o-time-complexity-5dcf4be8a444#:~:text=O(1)%20%E2%80%94%20Constant%20Time) *O(1)*. That makes a huge difference for large arrays. + +> A [queue](https://en.wikipedia.org/wiki/Queue_(abstract_data_type)) is an ordered list of elements where an element is inserted at the end of the queue and is removed from the front of the queue. A queue works based on the first-in, first-out ([FIFO](https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics))) principle. + +## Install + +``` +$ npm install yocto-queue +``` + +## Usage + +```js +const Queue = require('yocto-queue'); + +const queue = new Queue(); + +queue.enqueue('🦄'); +queue.enqueue('🌈'); + +console.log(queue.size); +//=> 2 + +console.log(...queue); +//=> '🦄 🌈' + +console.log(queue.dequeue()); +//=> '🦄' + +console.log(queue.dequeue()); +//=> '🌈' +``` + +## API + +### `queue = new Queue()` + +The instance is an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols), which means you can iterate over the queue front to back with a “for…of” loop, or use spreading to convert the queue to an array. Don't do this unless you really need to though, since it's slow. + +#### `.enqueue(value)` + +Add a value to the queue. + +#### `.dequeue()` + +Remove the next value in the queue. + +Returns the removed value or `undefined` if the queue is empty. + +#### `.clear()` + +Clear the queue. + +#### `.size` + +The size of the queue. + +## Related + +- [quick-lru](https://github.com/sindresorhus/quick-lru) - Simple “Least Recently Used” (LRU) cache diff --git a/tools/node_modules/eslint/package.json b/tools/node_modules/eslint/package.json index 88a92f798f3..6c7e6e90f9b 100644 --- a/tools/node_modules/eslint/package.json +++ b/tools/node_modules/eslint/package.json @@ -1,6 +1,6 @@ { "name": "eslint", - "version": "8.11.0", + "version": "8.24.0", "author": "Nicholas C. Zakas ", "description": "An AST-based pattern checker for JavaScript.", "bin": { @@ -16,7 +16,9 @@ "test": "node Makefile.js test", "test:cli": "mocha", "lint": "node Makefile.js lint", + "lint:docsjs": "node Makefile.js lintDocsJS", "fix": "node Makefile.js lint -- fix", + "fix:docsjs": "node Makefile.js lintDocsJS -- fix", "fuzz": "node Makefile.js fuzz", "generate-release": "node Makefile.js generateRelease", "generate-alpharelease": "node Makefile.js generatePrerelease -- alpha", @@ -25,14 +27,20 @@ "publish-release": "node Makefile.js publishRelease", "gensite": "node Makefile.js gensite", "webpack": "node Makefile.js webpack", - "perf": "node Makefile.js perf" + "perf": "node Makefile.js perf", + "docs:update-links": "node tools/fetch-docs-links.js" }, "gitHooks": { "pre-commit": "lint-staged" }, "lint-staged": { "*.js": "eslint --fix", - "*.md": "markdownlint" + "*.md": "markdownlint --fix", + "docs/src/rules/*.md": [ + "node tools/fetch-docs-links.js", + "git add docs/src/_data/further_reading_links.json" + ], + "docs/**/*.svg": "npx svgo -r --multipass" }, "files": [ "LICENSE", @@ -47,8 +55,10 @@ "homepage": "https://eslint.org", "bugs": "https://github.com/eslint/eslint/issues/", "dependencies": { - "@eslint/eslintrc": "^1.2.1", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.5", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -58,51 +68,57 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", + "find-up": "^5.0.0", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "devDependencies": { "@babel/preset-env": "^7.4.3", "babel-loader": "^8.0.5", + "c8": "^7.12.0", "chai": "^4.0.1", "cheerio": "^0.22.0", "common-tags": "^1.8.0", "core-js": "^3.1.3", - "dateformat": "^4.5.1", "ejs": "^3.0.2", "eslint": "file:.", "eslint-config-eslint": "file:packages/eslint-config-eslint", "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-eslint-plugin": "^4.0.1", + "eslint-plugin-eslint-plugin": "^4.4.0", "eslint-plugin-internal-rules": "file:tools/internal-rules", - "eslint-plugin-node": "^11.1.0", + "eslint-plugin-n": "^15.2.4", + "eslint-plugin-unicorn": "^42.0.0", "eslint-release": "^3.2.0", "eslump": "^3.0.0", "esprima": "^4.0.1", + "fast-glob": "^3.2.11", "fs-teardown": "^0.1.3", "glob": "^7.1.6", + "got": "^11.8.3", + "gray-matter": "^4.0.3", "jsdoc": "^3.5.5", "karma": "^6.1.1", "karma-chrome-launcher": "^3.1.0", @@ -111,19 +127,24 @@ "karma-webpack": "^5.0.0", "lint-staged": "^11.0.0", "load-perf": "^0.2.0", - "markdownlint": "^0.24.0", - "markdownlint-cli": "^0.30.0", + "markdownlint": "^0.25.1", + "markdownlint-cli": "^0.31.1", "marked": "^4.0.8", "memfs": "^3.0.1", + "metascraper": "^5.25.7", + "metascraper-description": "^5.25.7", + "metascraper-image": "^5.29.3", + "metascraper-logo": "^5.25.7", + "metascraper-logo-favicon": "^5.25.7", + "metascraper-title": "^5.25.7", "mocha": "^8.3.2", "mocha-junit-reporter": "^2.0.0", "node-polyfill-webpack-plugin": "^1.0.3", "npm-license": "^0.3.3", - "nyc": "^15.0.1", "pirates": "^4.0.5", "progress": "^2.0.3", "proxyquire": "^2.0.1", - "puppeteer": "^9.1.1", + "puppeteer": "^13.7.0", "recast": "^0.20.4", "regenerator-runtime": "^0.13.2", "semver": "^7.3.5", diff --git a/tools/osx-notarize.sh b/tools/osx-notarize.sh index 07d3e20e7e9..31c92c2ca42 100755 --- a/tools/osx-notarize.sh +++ b/tools/osx-notarize.sh @@ -28,8 +28,7 @@ if [ ! -f "${gon_exe}" ]; then (cd "${HOME}/.gon/" && rm -f gon && unzip "${gon_exe}.zip" && mv gon "${gon_exe}") fi -cat tools/osx-gon-config.json.tmpl \ - | sed -e "s/{{appleid}}/${NOTARIZATION_ID}/" -e "s/{{pkgid}}/${pkgid}/" \ +sed -e "s/{{appleid}}/${NOTARIZATION_ID}/" -e "s/{{pkgid}}/${pkgid}/" tools/osx-gon-config.json.tmpl \ > gon-config.json "${gon_exe}" -log-level=info gon-config.json diff --git a/tools/rpm/node.spec b/tools/rpm/node.spec deleted file mode 100644 index 83c7b67b2a3..00000000000 --- a/tools/rpm/node.spec +++ /dev/null @@ -1,114 +0,0 @@ -# Copyright (c) 2013, StrongLoop, Inc. -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -# This is updated by rpmbuild.sh. -%define _version 0.10.12 - -Name: node -Version: %{_version} -Release: 1 -Summary: Node.js is a platform for building fast, scalable network applications. -Group: Development/Languages -License: MIT -URL: https://nodejs.org/ -Source0: https://nodejs.org/dist/v%{_version}/node-v%{_version}.tar.gz -BuildRequires: gcc -BuildRequires: gcc-c++ -BuildRequires: glibc-devel -BuildRequires: make -BuildRequires: python - -# Conflicts with the HAM radio package. -Conflicts: node <= 0.3.2-11 - -# Conflicts with the Fedora node.js package. -Conflicts: nodejs - - -%description -Node.js is a platform built on Chrome's JavaScript runtime for easily -building fast, scalable network applications. - -Node.js uses an event-driven, non-blocking I/O model that makes it -lightweight and efficient, perfect for data-intensive real-time -applications that run across distributed devices. - - -%prep -%setup -q - - -%build -%ifarch arm -%define _dest_cpu arm -%endif - -%ifarch i386 i686 -%define _dest_cpu ia32 -%endif - -%ifarch x86_64 -%define _dest_cpu x64 -%endif - -./configure --prefix=/usr --dest-cpu=%{_dest_cpu} -make %{?_smp_mflags} - - -%check -#make test - - -# Use mildly hard-coded paths in the install and files targets for now. -# _libdir is /usr/lib64 on some systems but the installer always installs -# to /usr/lib. I have commits sitting in a branch that add --libdir and -# --mandir configure switches to the configure script but it's debatable -# if it's worth the extra complexity. -%install -export DONT_STRIP=1 # Don't strip debug symbols for now. -make install DESTDIR=%{buildroot} -rm -fr %{buildroot}/usr/lib/dtrace/ # No systemtap support. -install -m 755 -d %{buildroot}/usr/lib/node_modules/ -install -m 755 -d %{buildroot}%{_datadir}/%{name} - -# Remove junk files from node_modules/ - we should probably take care of -# this in the installer. -for FILE in .gitmodules .gitignore .npmignore .travis.yml \*.py[co]; do - find %{buildroot}/usr/lib/node_modules/ -name "$FILE" -delete -done - - -%files -/usr/bin/* -/usr/include/* -/usr/lib/node_modules/ -/usr/share/doc/node/gdbinit -/usr/share/man/man1/node.1.gz -/usr/share/systemtap/tapset/node.stp -%{_datadir}/%{name}/ -%doc CHANGELOG.md LICENSE README.md - - -%changelog -* Tue Jul 7 2015 Ali Ijaz Sheikh -- Added gdbinit. - -* Mon Apr 13 2015 Dan Varga -- Fix paths for changelog and manpage - -* Thu Dec 4 2014 Ben Noordhuis -- Rename to iojs. - -* Fri Jul 5 2013 Ben Noordhuis -- Initial release. diff --git a/tools/rpm/rpmbuild.sh b/tools/rpm/rpmbuild.sh deleted file mode 100755 index 6c990c8e94b..00000000000 --- a/tools/rpm/rpmbuild.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/sh - -# Copyright (c) 2013, StrongLoop, Inc. -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -set -e - -TOOLSDIR=`dirname "$0"` -TOPLEVELDIR="$TOOLSDIR/../.." - -RPMBUILD_PATH="${RPMBUILD_PATH:-$HOME/rpmbuild}" -if [ ! -d "$RPMBUILD_PATH" ]; then - echo "Run rpmdev-setuptree first." - exit 1 -fi - -if [ $# -ge 1 ]; then - VERSION=$1 -else - FILE="$TOPLEVELDIR/src/node_version.h" - MAJOR=`sed -nre 's/#define NODE_MAJOR_VERSION ([0-9]+)/\1/p' "$FILE"` - MINOR=`sed -nre 's/#define NODE_MINOR_VERSION ([0-9]+)/\1/p' "$FILE"` - PATCH=`sed -nre 's/#define NODE_PATCH_VERSION ([0-9]+)/\1/p' "$FILE"` - VERSION="$MAJOR.$MINOR.$PATCH" -fi - -set -x - -sed -re "s/%define _version .+/%define _version ${VERSION}/" \ - "$TOOLSDIR/node.spec" > "$RPMBUILD_PATH/SPECS/node.spec" -tar --exclude-vcs --transform="s|^|node-${VERSION}/|" \ - -czf "$RPMBUILD_PATH/SOURCES/node-v${VERSION}.tar.gz" . -rpmbuild "$*" -ba "$RPMBUILD_PATH/SPECS/node.spec" diff --git a/tools/snapshot/README.md b/tools/snapshot/README.md index fb22c03ed50..5792ede4499 100644 --- a/tools/snapshot/README.md +++ b/tools/snapshot/README.md @@ -22,8 +22,7 @@ In the default build of the Node.js executable, to embed a V8 startup snapshot into the Node.js executable, `libnode` is first built with these unresolved symbols: -- `node::NodeMainInstance::GetEmbeddedSnapshotBlob` -- `node::NodeMainInstance::GetIsolateDataIndices` +- `node::NodeMainInstance::GetEmbeddedSnapshotData` Then the `node_mksnapshot` executable is built with C++ files in this directory, as well as `src/node_snapshot_stub.cc` which defines the unresolved diff --git a/tools/snapshot/node_mksnapshot.cc b/tools/snapshot/node_mksnapshot.cc index e591f64a2a0..d166559a715 100644 --- a/tools/snapshot/node_mksnapshot.cc +++ b/tools/snapshot/node_mksnapshot.cc @@ -7,53 +7,91 @@ #include "libplatform/libplatform.h" #include "node_internals.h" -#include "node_snapshotable.h" +#include "node_snapshot_builder.h" #include "util-inl.h" #include "v8.h" +int BuildSnapshot(int argc, char* argv[]); + #ifdef _WIN32 #include -int wmain(int argc, wchar_t* argv[]) { +int wmain(int argc, wchar_t* wargv[]) { + // Windows needs conversion from wchar_t to char. + + // Convert argv to UTF8. + char** argv = new char*[argc + 1]; + for (int i = 0; i < argc; i++) { + // Compute the size of the required buffer + DWORD size = WideCharToMultiByte( + CP_UTF8, 0, wargv[i], -1, nullptr, 0, nullptr, nullptr); + if (size == 0) { + // This should never happen. + fprintf(stderr, "Could not convert arguments to utf8."); + exit(1); + } + // Do the actual conversion + argv[i] = new char[size]; + DWORD result = WideCharToMultiByte( + CP_UTF8, 0, wargv[i], -1, argv[i], size, nullptr, nullptr); + if (result == 0) { + // This should never happen. + fprintf(stderr, "Could not convert arguments to utf8."); + exit(1); + } + } + argv[argc] = nullptr; #else // UNIX int main(int argc, char* argv[]) { argv = uv_setup_args(argc, argv); + + // Disable stdio buffering, it interacts poorly with printf() + // calls elsewhere in the program (e.g., any logging from V8.) + setvbuf(stdout, nullptr, _IONBF, 0); + setvbuf(stderr, nullptr, _IONBF, 0); #endif // _WIN32 v8::V8::SetFlagsFromString("--random_seed=42"); + v8::V8::SetFlagsFromString("--harmony-import-assertions"); + return BuildSnapshot(argc, argv); +} +int BuildSnapshot(int argc, char* argv[]) { if (argc < 2) { std::cerr << "Usage: " << argv[0] << " \n"; + std::cerr << " " << argv[0] << " --build-snapshot " + << " \n"; return 1; } - std::ofstream out; - out.open(argv[1], std::ios::out | std::ios::binary); - if (!out.is_open()) { - std::cerr << "Cannot open " << argv[1] << "\n"; - return 1; - } - -// Windows needs conversion from wchar_t to char. See node_main.cc -#ifdef _WIN32 - int node_argc = 1; - char argv0[] = "node"; - char* node_argv[] = {argv0, nullptr}; - node::InitializationResult result = - node::InitializeOncePerProcess(node_argc, node_argv); -#else node::InitializationResult result = node::InitializeOncePerProcess(argc, argv); -#endif CHECK(!result.early_return); CHECK_EQ(result.exit_code, 0); + std::string out_path; + if (node::per_process::cli_options->build_snapshot) { + out_path = result.args[2]; + } else { + out_path = result.args[1]; + } + + std::ofstream out(out_path, std::ios::out | std::ios::binary); + if (!out) { + std::cerr << "Cannot open " << out_path << "\n"; + return 1; + } + { std::string snapshot = node::SnapshotBuilder::Generate(result.args, result.exec_args); out << snapshot; - out.close(); + + if (!out) { + std::cerr << "Failed to write " << out_path << "\n"; + return 1; + } } node::TearDownOncePerProcess(); diff --git a/tools/test.py b/tools/test.py index 9a7de5ed24d..788d68734fe 100755 --- a/tools/test.py +++ b/tools/test.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Copyright 2008 the V8 project authors. All rights reserved. # Redistribution and use in source and binary forms, with or without @@ -96,10 +96,11 @@ def get_module(name, path): class ProgressIndicator(object): - def __init__(self, cases, flaky_tests_mode): + def __init__(self, cases, flaky_tests_mode, measure_flakiness): self.cases = cases self.serial_id = 0 self.flaky_tests_mode = flaky_tests_mode + self.measure_flakiness = measure_flakiness self.parallel_queue = Queue(len(cases)) self.sequential_queue = Queue(len(cases)) for case in cases: @@ -211,10 +212,22 @@ def RunSingle(self, parallel, thread_id): if output.UnexpectedOutput(): if FLAKY in output.test.outcomes and self.flaky_tests_mode == DONTCARE: self.flaky_failed.append(output) + elif FLAKY in output.test.outcomes and self.flaky_tests_mode == KEEP_RETRYING: + for _ in range(99): + if not case.Run().UnexpectedOutput(): + self.flaky_failed.append(output) + break + else: + # If after 100 tries, the test is not passing, it's not flaky. + self.failed.append(output) else: self.failed.append(output) if output.HasCrashed(): self.crashed += 1 + if self.measure_flakiness: + outputs = [case.Run() for _ in range(self.measure_flakiness)] + # +1s are there because the test already failed once at this point. + print(" failed %d out of %d" % (len([i for i in outputs if i.UnexpectedOutput()]) + 1, self.measure_flakiness + 1)) else: self.succeeded += 1 self.remaining -= 1 @@ -436,8 +449,8 @@ def Done(self): class CompactProgressIndicator(ProgressIndicator): - def __init__(self, cases, flaky_tests_mode, templates): - super(CompactProgressIndicator, self).__init__(cases, flaky_tests_mode) + def __init__(self, cases, flaky_tests_mode, measure_flakiness, templates): + super(CompactProgressIndicator, self).__init__(cases, flaky_tests_mode, measure_flakiness) self.templates = templates self.last_status_length = 0 self.start_time = time.time() @@ -492,13 +505,13 @@ def PrintProgress(self, name): class ColorProgressIndicator(CompactProgressIndicator): - def __init__(self, cases, flaky_tests_mode): + def __init__(self, cases, flaky_tests_mode, measure_flakiness): templates = { 'status_line': "[%(mins)02i:%(secs)02i|\033[34m%%%(remaining) 4d\033[0m|\033[32m+%(passed) 4d\033[0m|\033[31m-%(failed) 4d\033[0m]: %(test)s", 'stdout': "\033[1m%s\033[0m", 'stderr': "\033[31m%s\033[0m", } - super(ColorProgressIndicator, self).__init__(cases, flaky_tests_mode, templates) + super(ColorProgressIndicator, self).__init__(cases, flaky_tests_mode, measure_flakiness, templates) def ClearLine(self, last_line_length): print("\033[1K\r", end='') @@ -506,7 +519,7 @@ def ClearLine(self, last_line_length): class MonochromeProgressIndicator(CompactProgressIndicator): - def __init__(self, cases, flaky_tests_mode): + def __init__(self, cases, flaky_tests_mode, measure_flakiness): templates = { 'status_line': "[%(mins)02i:%(secs)02i|%%%(remaining) 4d|+%(passed) 4d|-%(failed) 4d]: %(test)s", 'stdout': '%s', @@ -514,7 +527,7 @@ def __init__(self, cases, flaky_tests_mode): 'clear': lambda last_line_length: ("\r" + (" " * last_line_length) + "\r"), 'max_length': 78 } - super(MonochromeProgressIndicator, self).__init__(cases, flaky_tests_mode, templates) + super(MonochromeProgressIndicator, self).__init__(cases, flaky_tests_mode, measure_flakiness, templates) def ClearLine(self, last_line_length): print(("\r" + (" " * last_line_length) + "\r"), end='') @@ -946,10 +959,16 @@ def GetTimeout(self, mode, section=''): timeout = self.timeout * TIMEOUT_SCALEFACTOR[ARCH_GUESS or 'ia32'][mode] if section == 'pummel' or section == 'benchmark': timeout = timeout * 6 + # We run all WPT from one subset in the same process using workers. + # As the number of the tests grow, it can take longer to run some of the + # subsets, but it's still overall faster than running them in different + # processes. + elif section == 'wpt': + timeout = timeout * 12 return timeout -def RunTestCases(cases_to_run, progress, tasks, flaky_tests_mode): - progress = PROGRESS_INDICATORS[progress](cases_to_run, flaky_tests_mode) +def RunTestCases(cases_to_run, progress, tasks, flaky_tests_mode, measure_flakiness): + progress = PROGRESS_INDICATORS[progress](cases_to_run, flaky_tests_mode, measure_flakiness) return progress.Run(tasks) # ------------------------------------------- @@ -967,6 +986,7 @@ def RunTestCases(cases_to_run, progress, tasks, flaky_tests_mode): SLOW = 'slow' FLAKY = 'flaky' DONTCARE = 'dontcare' +KEEP_RETRYING = 'keep_retrying' class Expression(object): pass @@ -1355,8 +1375,11 @@ def BuildOptions(): result.add_option("--cat", help="Print the source of the tests", default=False, action="store_true") result.add_option("--flaky-tests", - help="Regard tests marked as flaky (run|skip|dontcare)", + help="Regard tests marked as flaky (run|skip|dontcare|keep_retrying)", default="run") + result.add_option("--measure-flakiness", + help="When a test fails, re-run it x number of times", + default=0, type="int") result.add_option("--skip-tests", help="Tests that should not be executed (comma-separated)", default="") @@ -1433,7 +1456,7 @@ def ProcessOptions(options): # -j and ignoring -J, which is the opposite of what we used to do before -J # became a legacy no-op. print('Warning: Legacy -J option is ignored. Using the -j option.') - if options.flaky_tests not in [RUN, SKIP, DONTCARE]: + if options.flaky_tests not in [RUN, SKIP, DONTCARE, KEEP_RETRYING]: print("Unknown flaky-tests mode %s" % options.flaky_tests) return False return True @@ -1733,7 +1756,7 @@ def should_keep(case): else: try: start = time.time() - if RunTestCases(cases_to_run, options.progress, options.j, options.flaky_tests): + if RunTestCases(cases_to_run, options.progress, options.j, options.flaky_tests, options.measure_flakiness): result = 0 else: result = 1 diff --git a/tools/update-authors.js b/tools/update-authors.js deleted file mode 100755 index 5d8a5e7b368..00000000000 --- a/tools/update-authors.js +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env node -// Usage: tools/update-author.js [--dry] -// Passing --dry will redirect output to stdout rather than write to 'AUTHORS'. -'use strict'; -const { spawn } = require('child_process'); -const path = require('path'); -const fs = require('fs'); -const readline = require('readline'); - -class CaseIndifferentMap { - _map = new Map(); - - get(key) { return this._map.get(key.toLowerCase()); } - has(key) { return this._map.has(key.toLowerCase()); } - set(key, value) { return this._map.set(key.toLowerCase(), value); } -} - -const log = spawn( - 'git', - // Inspect author name/email and body. - ['log', '--reverse', '--format=Author: %aN <%aE>\n%b'], { - stdio: ['inherit', 'pipe', 'inherit'] - }); -const rl = readline.createInterface({ input: log.stdout }); - -let output; -if (process.argv.includes('--dry')) - output = process.stdout; -else - output = fs.createWriteStream('AUTHORS'); - -output.write('# Authors ordered by first contribution.\n\n'); - -const mailmap = new CaseIndifferentMap(); -{ - const lines = fs.readFileSync(path.resolve(__dirname, '../', '.mailmap'), - { encoding: 'utf8' }).split('\n'); - for (let line of lines) { - line = line.trim(); - if (line.startsWith('#') || line === '') continue; - - const match = line.match(/^(?:([^<]+)\s+)?(?:(<[^>]+>)\s+)?(?:([^<]+)\s+)?(<[^>]+>)$/); - if (match) { - const [, replaceName, replaceEmail, originalName, originalEmail] = match; - const key = originalName ? `${originalName}\0${originalEmail.toLocaleLowerCase()}` : originalEmail.toLowerCase(); - mailmap.set(key, { - author: replaceName || originalName, - email: replaceEmail || originalEmail, - }); - } else { - console.warn('Unknown .mailmap format:', line); - } - } -} - -const previousAuthors = new CaseIndifferentMap(); -{ - const lines = fs.readFileSync(path.resolve(__dirname, '../', 'AUTHORS'), - { encoding: 'utf8' }).split('\n'); - for (let line of lines) { - line = line.trim(); - if (line.startsWith('#') || line === '') continue; - - const match = line.match(/^([^<]+)\s+(<[^>]+>)$/); - if (match) { - const name = match[1]; - const email = match[2]; - if (previousAuthors.has(name)) { - const emails = previousAuthors.get(name); - emails.push(email); - } else { - previousAuthors.set(name, [email]); - } - } else { - console.warn('Unknown AUTHORS format:', line); - } - } -} - -const seen = new Set(); - -// Support regular git author metadata, as well as `Author:` and -// `Co-authored-by:` in the message body. Both have been used in the past -// to indicate multiple authors per commit, with the latter standardized -// by GitHub now. -const authorRe = - /(^Author:|^Co-authored-by:)\s+(?[^<]+)\s+(?<[^>]+>)/i; -rl.on('line', (line) => { - const match = line.match(authorRe); - if (!match) return; - - let { author, email } = match.groups; - const emailLower = email.toLowerCase(); - - const replacement = - mailmap.get(author + '\0' + emailLower) || mailmap.get(emailLower); - if (replacement) { - ({ author, email } = { author, email, ...replacement }); - } - - if (seen.has(email)) { - return; - } - - seen.add(email); - output.write(`${author} ${email}\n`); - const duplicate = previousAuthors.get(author); - if (duplicate && !duplicate.includes(email)) { - console.warn('Author name already in AUTHORS file. Possible duplicate:'); - console.warn(` ${author} ${email}`); - } -}); - -rl.on('close', () => { - output.end('\n# Generated by tools/update-authors.js\n'); -}); diff --git a/tools/update-authors.mjs b/tools/update-authors.mjs new file mode 100755 index 00000000000..971fe160e3c --- /dev/null +++ b/tools/update-authors.mjs @@ -0,0 +1,112 @@ +#!/usr/bin/env node +// Usage: tools/update-author.mjs [--dry] +// Passing --dry will redirect output to stdout rather than write to 'AUTHORS'. +import { spawn } from 'node:child_process'; +import fs from 'node:fs'; +import readline from 'node:readline'; + +class CaseIndifferentMap { + _map = new Map(); + + get(key) { return this._map.get(key.toLowerCase()); } + has(key) { return this._map.has(key.toLowerCase()); } + set(key, value) { return this._map.set(key.toLowerCase(), value); } +} + +const log = spawn( + 'git', + // Inspect author name/email and body. + ['log', '--reverse', '--format=Author: %aN <%aE>\n%b'], { + stdio: ['inherit', 'pipe', 'inherit'] + }); +const rl = readline.createInterface({ input: log.stdout }); + +let output; +if (process.argv.includes('--dry')) + output = process.stdout; +else + output = fs.createWriteStream('AUTHORS'); + +output.write('# Authors ordered by first contribution.\n\n'); + +const mailmap = new CaseIndifferentMap(); +{ + const lines = fs.readFileSync(new URL('../.mailmap', import.meta.url), + { encoding: 'utf8' }).split('\n'); + for (let line of lines) { + line = line.trim(); + if (line.startsWith('#') || line === '') continue; + + const match = line.match(/^(?:([^<]+)\s+)?(?:(<[^>]+>)\s+)?(?:([^<]+)\s+)?(<[^>]+>)$/); + if (match) { + const [, replaceName, replaceEmail, originalName, originalEmail] = match; + const key = originalName ? `${originalName}\0${originalEmail.toLocaleLowerCase()}` : originalEmail.toLowerCase(); + mailmap.set(key, { + author: replaceName || originalName, + email: replaceEmail || originalEmail, + }); + } else { + console.warn('Unknown .mailmap format:', line); + } + } +} + +const previousAuthors = new CaseIndifferentMap(); +{ + const lines = fs.readFileSync(new URL('../AUTHORS', import.meta.url), + { encoding: 'utf8' }).split('\n'); + for (let line of lines) { + line = line.trim(); + if (line.startsWith('#') || line === '') continue; + + const match = line.match(/^([^<]+)\s+(<[^>]+>)$/); + if (match) { + const name = match[1]; + const email = match[2]; + if (previousAuthors.has(name)) { + const emails = previousAuthors.get(name); + emails.push(email); + } else { + previousAuthors.set(name, [email]); + } + } else { + console.warn('Unknown AUTHORS format:', line); + } + } +} + +const seen = new Set(); + +// Support regular git author metadata, as well as `Author:` and +// `Co-authored-by:` in the message body. Both have been used in the past +// to indicate multiple authors per commit, with the latter standardized +// by GitHub now. +const authorRe = + /(^Author:|^Co-authored-by:)\s+(?[^<]+)\s+(?<[^>]+>)/i; +for await (const line of rl) { + const match = line.match(authorRe); + if (!match) continue; + + let { author, email } = match.groups; + const emailLower = email.toLowerCase(); + + const replacement = + mailmap.get(author + '\0' + emailLower) || mailmap.get(emailLower); + if (replacement) { + ({ author, email } = { author, email, ...replacement }); + } + + if (seen.has(email)) { + continue; + } + + seen.add(email); + output.write(`${author} ${email}\n`); + const duplicate = previousAuthors.get(author); + if (duplicate && !duplicate.includes(email)) { + console.warn('Author name already in AUTHORS file. Possible duplicate:'); + console.warn(` ${author} ${email}`); + } +} + +output.end('\n# Generated by tools/update-authors.mjs\n'); diff --git a/tools/update-llhttp.sh b/tools/update-llhttp.sh new file mode 100755 index 00000000000..12e2f465d7d --- /dev/null +++ b/tools/update-llhttp.sh @@ -0,0 +1,63 @@ +#!/bin/sh +set -e + +# Shell script to update llhttp in the source tree to specific version + +BASE_DIR="$( pwd )"/ +DEPS_DIR="${BASE_DIR}deps/" +LLHTTP_VERSION="$1" + +if [ "$#" -le 0 ]; then + echo "Error: Please provide an llhttp version to update to." + echo "Error: To download directly from GitHub, use the organization/repository syntax, without the .git suffix." + exit 1 +fi + +cleanup () { + EXIT_CODE=$? + [ -d "$WORKSPACE" ] && rm -rf "$WORKSPACE" + exit $EXIT_CODE +} + +echo "Making temporary workspace ..." +WORKSPACE=$(mktemp -d 2> /dev/null || mktemp -d -t 'tmp') +trap cleanup INT TERM EXIT + +cd "$WORKSPACE" + +if echo "$LLHTTP_VERSION" | grep -qs "/" ; then # Download a release + REPO="git@github.com:$LLHTTP_VERSION.git" + BRANCH=$2 + [ -z "$BRANCH" ] && BRANCH=main + + echo "Cloning llhttp source archive $REPO ..." + git clone "$REPO" llhttp + cd llhttp + echo "Checking out branch $BRANCH ..." + git checkout "$BRANCH" + + echo "Building llhtttp ..." + npm install + make release + + echo "Copying llhtttp release ..." + rm -rf "$DEPS_DIR/llhttp" + cp -a release "$DEPS_DIR/llhttp" +else + echo "Download llhttp release $LLHTTP_VERSION ..." + curl -sL -o llhttp.tar.gz "https://github.com/nodejs/llhttp/archive/refs/tags/release/v$LLHTTP_VERSION.tar.gz" + gzip -dc llhttp.tar.gz | tar xf - + + echo "Copying llhtttp release ..." + rm -rf "$DEPS_DIR/llhttp" + cp -a "llhttp-release-v$LLHTTP_VERSION" "$DEPS_DIR/llhttp" +fi + +echo "" +echo "All done!" +echo "" +echo "Please git add llhttp, commit the new version:" +echo "" +echo "$ git add -A deps/llhttp" +echo "$ git commit -m \"deps: update nghttp2 to $LLHTTP_VERSION\"" +echo "" diff --git a/tools/update-nghttp2.sh b/tools/update-nghttp2.sh index d7e176d3e1a..5f951b738f7 100755 --- a/tools/update-nghttp2.sh +++ b/tools/update-nghttp2.sh @@ -1,6 +1,6 @@ #!/bin/sh set -e -# Shell script to update nghttp2 in the source treee to specific version +# Shell script to update nghttp2 in the source tree to specific version BASE_DIR="$( pwd )"/ DEPS_DIR="$BASE_DIR"deps/ diff --git a/tools/update-npm.sh b/tools/update-npm.sh index d58b325b77f..f69b6e5b17e 100755 --- a/tools/update-npm.sh +++ b/tools/update-npm.sh @@ -49,5 +49,5 @@ echo "Please git add npm, commit the new version, and whitespace-fix:" echo "" echo "$ git add -A deps/npm" echo "$ git commit -m \"deps: upgrade npm to $NPM_VERSION\"" -echo "$ git rebase --whitespace=fix master" +echo "$ git rebase --whitespace=fix main" echo "" diff --git a/tools/update-timezone.mjs b/tools/update-timezone.mjs new file mode 100755 index 00000000000..bf3a706bdb0 --- /dev/null +++ b/tools/update-timezone.mjs @@ -0,0 +1,26 @@ +#!/usr/bin/env node +// Usage: tools/update-timezone.mjs +import { execSync } from 'node:child_process'; +import { renameSync, readdirSync, rmSync } from 'node:fs'; + +const fileNames = [ + 'zoneinfo64.res', + 'windowsZones.res', + 'timezoneTypes.res', + 'metaZones.res', +]; + +const availableVersions = readdirSync('icu-data/tzdata/icunew', { withFileTypes: true }) +.filter((dirent) => dirent.isDirectory()) +.map((dirent) => dirent.name); + +const latestVersion = availableVersions.sort().at(-1); + +execSync('bzip2 -d deps/icu-small/source/data/in/icudt*.dat.bz2'); +fileNames.forEach((file) => { + renameSync(`icu-data/tzdata/icunew/${latestVersion}/44/le/${file}`, `deps/icu-small/source/data/in/${file}`); + execSync(`icupkg -a ${file} icudt*.dat`, { cwd: 'deps/icu-small/source/data/in/' }); + rmSync(`deps/icu-small/source/data/in/${file}`); +}); +execSync('bzip2 -z deps/icu-small/source/data/in/icudt*.dat'); +rmSync('icu-data', { recursive: true }); diff --git a/tools/update-undici.sh b/tools/update-undici.sh old mode 100644 new mode 100755 index 40920df9d8f..8350e215272 --- a/tools/update-undici.sh +++ b/tools/update-undici.sh @@ -29,7 +29,7 @@ rm -f deps/undici/undici.js ) mv undici-tmp/node_modules/undici deps/undici/src -mv deps/undici/src/undici.js deps/undici/undici.js +mv deps/undici/src/undici-fetch.js deps/undici/undici.js cp deps/undici/src/LICENSE deps/undici/LICENSE rm -rf undici-tmp/ diff --git a/tools/v8_gypfiles/features.gypi b/tools/v8_gypfiles/features.gypi index 365860ef947..e85f6709e7a 100644 --- a/tools/v8_gypfiles/features.gypi +++ b/tools/v8_gypfiles/features.gypi @@ -253,7 +253,7 @@ # will fail. 'v8_enable_webassembly%': 1, - # Enable advanced BigInt algorithms, costing about 10-30 KB binary size + # Enable advanced BigInt algorithms, costing about 10-30 KiB binary size # depending on platform. 'v8_advanced_bigint_algorithms%': 1 }, diff --git a/tools/v8_gypfiles/v8.gyp b/tools/v8_gypfiles/v8.gyp index 39b96803c71..ed042f88296 100644 --- a/tools/v8_gypfiles/v8.gyp +++ b/tools/v8_gypfiles/v8.gyp @@ -322,7 +322,7 @@ '<(V8_ROOT)/src/builtins/builtins-intl-gen.cc', ], }], - ['OS=="win"', { + ['OS=="win" and _toolset=="target"', { 'msvs_precompiled_header': '<(V8_ROOT)/../../tools/msvs/pch/v8_pch.h', 'msvs_precompiled_source': '<(V8_ROOT)/../../tools/msvs/pch/v8_pch.cc', 'sources': [ @@ -670,7 +670,7 @@ ], 'sources': ['<@(v8_compiler_sources)'], 'conditions': [ - ['OS=="win"', { + ['OS=="win" and _toolset=="target"', { 'msvs_precompiled_header': '<(V8_ROOT)/../../tools/msvs/pch/v8_pch.h', 'msvs_precompiled_source': '<(V8_ROOT)/../../tools/msvs/pch/v8_pch.cc', 'sources': [ @@ -695,7 +695,7 @@ ], 'sources': ['<@(v8_compiler_sources)'], 'conditions': [ - ['OS=="win"', { + ['OS=="win" and _toolset=="target"', { 'msvs_precompiled_header': '<(V8_ROOT)/../../tools/msvs/pch/v8_pch.h', 'msvs_precompiled_source': '<(V8_ROOT)/../../tools/msvs/pch/v8_pch.cc', 'sources': [ @@ -822,7 +822,8 @@ 'conditions': [ ['v8_enable_webassembly==1', { 'conditions': [ - ['OS=="mac" or (_toolset=="host" and host_arch=="x64" and OS=="linux")', { + ['OS=="mac" or OS=="ios" or ' + '(_toolset=="host" and host_arch=="x64" and (host_os=="linux" or host_os=="mac"))', { 'sources': [ '<(V8_ROOT)/src/trap-handler/handler-inside-posix.cc', '<(V8_ROOT)/src/trap-handler/handler-outside-posix.cc', @@ -836,7 +837,8 @@ ], }], # TODO(targos): Replace False with OS=="win" if handler-outside-simulator.cc becomes compatible with MSVC. - ['_toolset=="host" and host_arch=="x64" and (OS=="linux" or OS=="mac" or False)', { + ['_toolset=="host" and host_arch=="x64" and ' + '(host_os=="linux" or host_os=="mac" or False)', { 'sources': [ '<(V8_ROOT)/src/trap-handler/handler-outside-simulator.cc', ], @@ -880,13 +882,15 @@ '&2 + exit 1 +fi + +originalsidedeck=$1 +outputsidedeck=$2 +newdllname=$3 + +SCRIPT_DIR=$(dirname "$0") +ID=`date +%C%y%m%d_%H%M%S` +TMP="/tmp/sidedeck-$(basename "$0").$ID.tmp" +TMP2="/tmp/sidedeck-$(basename "$0").$ID.tmp.2" + +# Remove on exit/interrupt +trap '/bin/rm -rf "$TMP" "$TMP2" && exit' EXIT INT TERM QUIT HUP + +set -x +dd conv=unblock cbs=80 if="$originalsidedeck" of="$TMP" +chtag -tc 1047 "$TMP" +"$SCRIPT_DIR"/sdwrap.py -u -i "$TMP" -o "$TMP2" +chtag -tc 819 "$TMP2" +sed -e "s/\(^ IMPORT \(DATA\|CODE\)64,\)'[^']*'/\1'$newdllname'/g" "$TMP2" > "$TMP" +"$SCRIPT_DIR"/sdwrap.py -i "$TMP" -o "$TMP2" + +# Reformat sidedeck to be USS compatible +iconv -f ISO8859-1 -t IBM-1047 "$TMP2" > "$TMP" +dd conv=block cbs=80 if="$TMP" of="$outputsidedeck" diff --git a/tools/zos/sdwrap.py b/tools/zos/sdwrap.py new file mode 100755 index 00000000000..5253d945f40 --- /dev/null +++ b/tools/zos/sdwrap.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +import argparse +import sys + +def wrap(args): + l = args.input.readline(72) + firstline = True + while l: + if l[-1] == '\n': + if firstline: + outstr = "{}".format(l) + else: + outstr = " {}".format(l) + firstline = True + l = args.input.readline(72) + else: + if firstline: + outstr = "{:<71}*\n".format(l[:-1]) + firstline = False + else: + outstr = " {:<70}*\n".format(l[:-1]) + l = l[-1] + args.input.readline(70) + args.output.write(outstr) + + return 0 + +def unwrap(args): + l = args.input.readline() + firstline = True + while l: + if len(l) > 80: + print("Error: input line invalid (longer than 80 characters)", file=sys.stderr) + return 1 + if not firstline and l[0] != ' ': + print("Error: continuation line not start with blank", file=sys.stderr) + return 1 + + if len(l) > 71 and l[71] == '*': + if firstline: + args.output.write(l[:71]) + firstline = False + else: + args.output.write(l[1:71]) + else: + if firstline: + args.output.write(l) + else: + args.output.write(l[1:]) + firstline = True + l = args.input.readline() + return 0 + +def Main(): + parser = argparse.ArgumentParser(description="Wrap sidedeck source to card formats") + parser.add_argument("-u", "--unwrap", + help="Unwrap sidedeck cards to source formats instead", action="store_true", + default=False) + parser.add_argument("-i", "--input", help="input filename, default to stdin", + action="store", default=None) + parser.add_argument("-o", "--output", help="output filename, default to stdout", + action="store", default=None) + + args = parser.parse_args() + + if args.input is None: + args.input = sys.stdin + else: + args.input = open(args.input, 'r') + + if args.output is None: + args.output = sys.stdout + else: + args.output = open(args.output, 'w') + + if args.unwrap: + return unwrap(args) + + return wrap(args) + +if __name__ == '__main__': + sys.exit(Main()) diff --git a/typings/internalBinding/async_wrap.d.ts b/typings/internalBinding/async_wrap.d.ts index 9df451e23cb..bfbda3d7ed8 100644 --- a/typings/internalBinding/async_wrap.d.ts +++ b/typings/internalBinding/async_wrap.d.ts @@ -107,7 +107,7 @@ declare function InternalBinding(binding: 'async_wrap'): { promiseAfterHook: InternalAsyncWrapBinding.PromiseHook | undefined, promiseResolveHook: InternalAsyncWrapBinding.PromiseHook | undefined ): void; - registerDestroyHook(promise: Promise, asyncId: number, destroyed: { destroyed: boolean }): void; + registerDestroyHook(resource: object, asyncId: number, destroyed?: { destroyed: boolean }): void; async_hook_fields: Uint32Array; async_id_fields: Float64Array; async_ids_stack: Float64Array; diff --git a/typings/internalBinding/util.d.ts b/typings/internalBinding/util.d.ts index 40def32d570..bb85acee21a 100644 --- a/typings/internalBinding/util.d.ts +++ b/typings/internalBinding/util.d.ts @@ -17,6 +17,7 @@ declare function InternalBinding(binding: 'util'): { napi_type_tag: 5; napi_wrapper: 6; untransferable_object_private_symbol: 7; + exiting_aliased_Uint32Array: 8; kPending: 0; kFulfilled: 1; diff --git a/vcbuild.bat b/vcbuild.bat index d1a9e592551..eb2fc28628e 100644 --- a/vcbuild.bat +++ b/vcbuild.bat @@ -35,6 +35,8 @@ set projgen= set nobuild= set sign= set nosnapshot= +set nonpm= +set nocorepack= set cctest_args= set test_args= set stage_package= @@ -89,6 +91,8 @@ if /i "%1"=="nobuild" set nobuild=1&goto arg-ok if /i "%1"=="nosign" set "sign="&echo Note: vcbuild no longer signs by default. "nosign" is redundant.&goto arg-ok if /i "%1"=="sign" set sign=1&goto arg-ok if /i "%1"=="nosnapshot" set nosnapshot=1&goto arg-ok +if /i "%1"=="nonpm" set nonpm=1&goto arg-ok +if /i "%1"=="nocorepack" set nocorepack=1&goto arg-ok if /i "%1"=="noetw" set noetw=1&goto arg-ok if /i "%1"=="ltcg" set ltcg=1&goto arg-ok if /i "%1"=="licensertf" set licensertf=1&goto arg-ok @@ -184,6 +188,8 @@ if "%*"=="lint" if exist "%node_exe%" goto lint-cpp if "%config%"=="Debug" set configure_flags=%configure_flags% --debug if defined nosnapshot set configure_flags=%configure_flags% --without-snapshot +if defined nonpm set configure_flags=%configure_flags% --without-npm +if defined nocorepack set configure_flags=%configure_flags% --without-corepack if defined noetw set configure_flags=%configure_flags% --without-etw& set noetw_msi_arg=/p:NoETW=1 if defined ltcg set configure_flags=%configure_flags% --with-ltcg if defined release_urlbase set configure_flags=%configure_flags% --release-urlbase=%release_urlbase% @@ -198,7 +204,6 @@ if defined target_arch set configure_flags=%configure_flags% --dest-cpu=%ta if defined openssl_no_asm set configure_flags=%configure_flags% --openssl-no-asm if defined DEBUG_HELPER set configure_flags=%configure_flags% --verbose if "%target_arch%"=="x86" if "%PROCESSOR_ARCHITECTURE%"=="AMD64" set configure_flags=%configure_flags% --no-cross-compiling -if "%target_arch%"=="arm64" set configure_flags=%configure_flags% --cross-compiling if not exist "%~dp0deps\icu" goto no-depsicu if "%target%"=="Clean" echo deleting %~dp0deps\icu @@ -400,7 +405,7 @@ if errorlevel 1 echo "Could not create junction to 'out\%config%'." & exit /B if not defined sign goto licensertf call tools\sign.bat Release\node.exe -if errorlevel 1 echo Failed to sign exe&goto exit +if errorlevel 1 echo Failed to sign exe, got error code %errorlevel%&goto exit :licensertf @rem Skip license.rtf generation if not requested. @@ -421,12 +426,12 @@ if "%use_x64_node_exe%"=="true" ( set exit_code=1 goto exit ) - %x64_node_exe% tools\license2rtf.js < LICENSE > %config%\license.rtf + %x64_node_exe% tools\license2rtf.mjs < LICENSE > %config%\license.rtf ) else ( - %node_exe% tools\license2rtf.js < LICENSE > %config%\license.rtf + %node_exe% tools\license2rtf.mjs < LICENSE > %config%\license.rtf ) -if errorlevel 1 echo Failed to generate license.rtf&goto exit +if errorlevel 1 echo Failed to generate license.rtf, got error code %errorlevel%&goto exit :stage_package if not defined stage_package goto install-doctools @@ -445,22 +450,29 @@ copy /Y ..\README.md %TARGET_NAME%\ > nul if errorlevel 1 echo Cannot copy README.md && goto package_error copy /Y ..\CHANGELOG.md %TARGET_NAME%\ > nul if errorlevel 1 echo Cannot copy CHANGELOG.md && goto package_error -robocopy ..\deps\npm %TARGET_NAME%\node_modules\npm /e /xd test > nul -if errorlevel 8 echo Cannot copy npm package && goto package_error -robocopy ..\deps\corepack %TARGET_NAME%\node_modules\corepack /e /xd test > nul -if errorlevel 8 echo Cannot copy corepack package && goto package_error -copy /Y ..\deps\npm\bin\npm %TARGET_NAME%\ > nul -if errorlevel 1 echo Cannot copy npm && goto package_error -copy /Y ..\deps\npm\bin\npm.cmd %TARGET_NAME%\ > nul -if errorlevel 1 echo Cannot copy npm.cmd && goto package_error -copy /Y ..\deps\npm\bin\npx %TARGET_NAME%\ > nul -if errorlevel 1 echo Cannot copy npx && goto package_error -copy /Y ..\deps\npm\bin\npx.cmd %TARGET_NAME%\ > nul -if errorlevel 1 echo Cannot copy npx.cmd && goto package_error -copy /Y ..\deps\corepack\shims\nodewin\corepack %TARGET_NAME%\ > nul -if errorlevel 1 echo Cannot copy corepack && goto package_error -copy /Y ..\deps\corepack\shims\nodewin\corepack.cmd %TARGET_NAME%\ > nul -if errorlevel 1 echo Cannot copy corepack.cmd && goto package_error + +if not defined nonpm ( + robocopy ..\deps\npm %TARGET_NAME%\node_modules\npm /e /xd test > nul + if errorlevel 8 echo Cannot copy npm package && goto package_error + copy /Y ..\deps\npm\bin\npm %TARGET_NAME%\ > nul + if errorlevel 1 echo Cannot copy npm && goto package_error + copy /Y ..\deps\npm\bin\npm.cmd %TARGET_NAME%\ > nul + if errorlevel 1 echo Cannot copy npm.cmd && goto package_error + copy /Y ..\deps\npm\bin\npx %TARGET_NAME%\ > nul + if errorlevel 1 echo Cannot copy npx && goto package_error + copy /Y ..\deps\npm\bin\npx.cmd %TARGET_NAME%\ > nul + if errorlevel 1 echo Cannot copy npx.cmd && goto package_error +) + +if not defined nocorepack ( + robocopy ..\deps\corepack %TARGET_NAME%\node_modules\corepack /e /xd test > nul + if errorlevel 8 echo Cannot copy corepack package && goto package_error + copy /Y ..\deps\corepack\shims\nodewin\corepack %TARGET_NAME%\ > nul + if errorlevel 1 echo Cannot copy corepack && goto package_error + copy /Y ..\deps\corepack\shims\nodewin\corepack.cmd %TARGET_NAME%\ > nul + if errorlevel 1 echo Cannot copy corepack.cmd && goto package_error +) + copy /Y ..\tools\msvs\nodevars.bat %TARGET_NAME%\ > nul if errorlevel 1 echo Cannot copy nodevars.bat && goto package_error copy /Y ..\tools\msvs\install_tools\*.* %TARGET_NAME%\ > nul @@ -469,6 +481,19 @@ if not defined noetw ( copy /Y ..\src\res\node_etw_provider.man %TARGET_NAME%\ > nul if errorlevel 1 echo Cannot copy node_etw_provider.man && goto package_error ) +if defined dll ( + copy /Y libnode.dll %TARGET_NAME%\ > nul + if errorlevel 1 echo Cannot copy libnode.dll && goto package_error + + mkdir %TARGET_NAME%\Release > nul + copy /Y node.def %TARGET_NAME%\Release\ > nul + if errorlevel 1 echo Cannot copy node.def && goto package_error + + set HEADERS_ONLY=1 + python ..\tools\install.py install %CD%\%TARGET_NAME% \ > nul + if errorlevel 1 echo Cannot install headers && goto package_error + set HEADERS_ONLY= +) cd .. :package @@ -513,7 +538,7 @@ if errorlevel 1 goto exit if not defined sign goto upload call tools\sign.bat node-v%FULLVERSION%-%target_arch%.msi -if errorlevel 1 echo Failed to sign msi&goto exit +if errorlevel 1 echo Failed to sign msi, got error code %errorlevel%&goto exit :upload @rem Skip upload if not requested @@ -596,7 +621,7 @@ if %errorlevel% neq 0 exit /b %errorlevel% :: building addons setlocal set npm_config_nodedir=%~dp0 -"%node_exe%" "%~dp0tools\build-addons.js" "%~dp0deps\npm\node_modules\node-gyp\bin\node-gyp.js" "%~dp0test\addons" +"%node_exe%" "%~dp0tools\build-addons.mjs" "%~dp0deps\npm\node_modules\node-gyp\bin\node-gyp.js" "%~dp0test\addons" if errorlevel 1 exit /b 1 endlocal @@ -614,7 +639,7 @@ for /d %%F in (test\js-native-api\??_*) do ( :: building js-native-api setlocal set npm_config_nodedir=%~dp0 -"%node_exe%" "%~dp0tools\build-addons.js" "%~dp0deps\npm\node_modules\node-gyp\bin\node-gyp.js" "%~dp0test\js-native-api" +"%node_exe%" "%~dp0tools\build-addons.mjs" "%~dp0deps\npm\node_modules\node-gyp\bin\node-gyp.js" "%~dp0test\js-native-api" if errorlevel 1 exit /b 1 endlocal goto build-node-api-tests @@ -633,7 +658,7 @@ for /d %%F in (test\node-api\??_*) do ( :: building node-api setlocal set npm_config_nodedir=%~dp0 -"%node_exe%" "%~dp0tools\build-addons.js" "%~dp0deps\npm\node_modules\node-gyp\bin\node-gyp.js" "%~dp0test\node-api" +"%node_exe%" "%~dp0tools\build-addons.mjs" "%~dp0deps\npm\node_modules\node-gyp\bin\node-gyp.js" "%~dp0test\node-api" if errorlevel 1 exit /b 1 endlocal goto run-tests @@ -747,7 +772,7 @@ set exit_code=1 goto exit :help -echo vcbuild.bat [debug/release] [msi] [doc] [test/test-all/test-addons/test-doc/test-js-native-api/test-node-api/test-benchmark/test-internet/test-pummel/test-simple/test-message/test-tick-processor/test-known-issues/test-node-inspect/test-check-deopts/test-npm/test-async-hooks/test-v8/test-v8-intl/test-v8-benchmarks/test-v8-all] [ignore-flaky] [static/dll] [noprojgen] [projgen] [small-icu/full-icu/without-intl] [nobuild] [nosnapshot] [noetw] [ltcg] [licensetf] [sign] [ia32/x86/x64/arm64] [vs2019/vs2022] [download-all] [lint/lint-ci/lint-js/lint-md] [lint-md-build] [package] [build-release] [upload] [no-NODE-OPTIONS] [link-module path-to-module] [debug-http2] [debug-nghttp2] [clean] [cctest] [no-cctest] [openssl-no-asm] +echo vcbuild.bat [debug/release] [msi] [doc] [test/test-all/test-addons/test-doc/test-js-native-api/test-node-api/test-benchmark/test-internet/test-pummel/test-simple/test-message/test-tick-processor/test-known-issues/test-node-inspect/test-check-deopts/test-npm/test-async-hooks/test-v8/test-v8-intl/test-v8-benchmarks/test-v8-all] [ignore-flaky] [static/dll] [noprojgen] [projgen] [small-icu/full-icu/without-intl] [nobuild] [nosnapshot] [nonpm] [nocorepack] [noetw] [ltcg] [licensetf] [sign] [ia32/x86/x64/arm64] [vs2019/vs2022] [download-all] [lint/lint-ci/lint-js/lint-md] [lint-md-build] [package] [build-release] [upload] [no-NODE-OPTIONS] [link-module path-to-module] [debug-http2] [debug-nghttp2] [clean] [cctest] [no-cctest] [openssl-no-asm] echo Examples: echo vcbuild.bat : builds release build echo vcbuild.bat debug : builds debug build
    17 (Current) 16 (LTS) 14 (LTS) 12 (LTS)
    -16.15.1
    +16.19.0
    +16.18.1
    +16.18.0
    +16.17.1
    +16.17.0
    +16.16.0
    +16.15.1
    16.15.0
    16.14.2
    16.14.1
    diff --git a/LICENSE b/LICENSE index 6730deeb0cd..3b52080cb6b 100644 --- a/LICENSE +++ b/LICENSE @@ -55,7 +55,7 @@ The externally maintained libraries used by Node.js are: """ MIT License - Copyright (C) 2012-2020 by various contributors (see AUTHORS) + Copyright (C) 2012-2022 by various contributors (see AUTHORS) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -109,9 +109,22 @@ The externally maintained libraries used by Node.js are: - ICU, located at deps/icu-small, is licensed as follows: """ - COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) + UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE - Copyright © 1991-2020 Unicode, Inc. All rights reserved. + See Terms of Use + for definitions of Unicode Inc.’s Data Files and Software. + + NOTICE TO USER: Carefully read the following legal agreement. + BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S + DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), + YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE + TERMS AND CONDITIONS OF THIS AGREEMENT. + IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE + THE DATA FILES OR SOFTWARE. + + COPYRIGHT AND PERMISSION NOTICE + + Copyright © 1991-2022 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in https://www.unicode.org/copyright.html. Permission is hereby granted, free of charge, to any person obtaining @@ -143,7 +156,7 @@ The externally maintained libraries used by Node.js are: use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. - --------------------- + ---------------------------------------------------------------------- Third-Party Software Licenses @@ -151,7 +164,9 @@ The externally maintained libraries used by Node.js are: terms for licensed third-party software components included within ICU libraries. - 1. ICU License - ICU 1.8.1 to ICU 57.1 + ---------------------------------------------------------------------- + + ICU License - ICU 1.8.1 to ICU 57.1 COPYRIGHT AND PERMISSION NOTICE @@ -186,7 +201,9 @@ The externally maintained libraries used by Node.js are: All trademarks and registered trademarks mentioned herein are the property of their respective owners. - 2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) + ---------------------------------------------------------------------- + + Chinese/Japanese Word Break Dictionary Data (cjdict.txt) # The Google Chrome software developed by Google is licensed under # the BSD license. Other software included in this distribution is @@ -390,7 +407,9 @@ The externally maintained libraries used by Node.js are: # # ---------------COPYING.ipadic-----END---------------------------------- - 3. Lao Word Break Dictionary Data (laodict.txt) + ---------------------------------------------------------------------- + + Lao Word Break Dictionary Data (laodict.txt) # Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html @@ -430,7 +449,9 @@ The externally maintained libraries used by Node.js are: # OF THE POSSIBILITY OF SUCH DAMAGE. # -------------------------------------------------------------------------- - 4. Burmese Word Break Dictionary Data (burmesedict.txt) + ---------------------------------------------------------------------- + + Burmese Word Break Dictionary Data (burmesedict.txt) # Copyright (c) 2014 International Business Machines Corporation # and others. All Rights Reserved. @@ -470,7 +491,9 @@ The externally maintained libraries used by Node.js are: # SUCH DAMAGE. # -------------------------------------------------------------------------- - 5. Time Zone Database + ---------------------------------------------------------------------- + + Time Zone Database ICU uses the public domain data and code derived from Time Zone Database for its time zone support. The ownership of the TZ database @@ -493,7 +516,9 @@ The externally maintained libraries used by Node.js are: # making a contribution to the database or code waives all rights to # future claims in that contribution or in the TZ Database. - 6. Google double-conversion + ---------------------------------------------------------------------- + + Google double-conversion Copyright 2006-2011, the V8 project authors. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -521,6 +546,83 @@ The externally maintained libraries used by Node.js are: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------------------------------------- + + File: aclocal.m4 (only for ICU4C) + Section: pkg.m4 - Macros to locate and utilise pkg-config. + + Copyright © 2004 Scott James Remnant . + Copyright © 2012-2015 Dan Nicholson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. + + As a special exception to the GNU General Public License, if you + distribute this file as part of a program that contains a + configuration script generated by Autoconf, you may include it under + the same distribution terms that you use for the rest of that + program. + + (The condition for the exception is fulfilled because + ICU4C includes a configuration script generated by Autoconf, + namely the `configure` script.) + + ---------------------------------------------------------------------- + + File: config.guess (only for ICU4C) + + This file is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . + + As a special exception to the GNU General Public License, if you + distribute this file as part of a program that contains a + configuration script generated by Autoconf, you may include it under + the same distribution terms that you use for the rest of that + program. This Exception is an additional permission under section 7 + of the GNU General Public License, version 3 ("GPLv3"). + + (The condition for the exception is fulfilled because + ICU4C includes a configuration script generated by Autoconf, + namely the `configure` script.) + + ---------------------------------------------------------------------- + + File: install-sh (only for ICU4C) + + Copyright 1991 by the Massachusetts Institute of Technology + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of M.I.T. not be used in advertising or + publicity pertaining to distribution of the software without specific, + written prior permission. M.I.T. makes no representations about the + suitability of this software for any purpose. It is provided "as is" + without express or implied warranty. """ - libuv, located at deps/uv, is licensed as follows: @@ -661,56 +763,129 @@ The externally maintained libraries used by Node.js are: - OpenSSL, located at deps/openssl, is licensed as follows: """ - Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - - 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - - 5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - - 6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - - THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - OF THE POSSIBILITY OF SUCH DAMAGE. - ==================================================================== - - This product includes cryptographic software written by Eric Young - (eay@cryptsoft.com). This product includes software written by Tim - Hudson (tjh@cryptsoft.com). + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + + /* ==================================================================== + * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + + /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ """ - Punycode.js, located at lib/punycode.js, is licensed as follows: @@ -1238,7 +1413,7 @@ The externally maintained libraries used by Node.js are: - ESLint, located at tools/node_modules/eslint, is licensed as follows: """ - Copyright JS Foundation and other contributors, https://js.foundation + Copyright OpenJS Foundation and other contributors, Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -1611,3 +1786,35 @@ The externally maintained libraries used by Node.js are: OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ + +- base64, located at deps/base64/base64/, is licensed as follows: + """ + Copyright (c) 2005-2007, Nick Galbreath + Copyright (c) 2013-2019, Alfred Klomp + Copyright (c) 2015-2017, Wojciech Mula + Copyright (c) 2016-2017, Matthieu Darbois + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ diff --git a/Makefile b/Makefile index 3c48653d05c..5c307e527fd 100644 --- a/Makefile +++ b/Makefile @@ -115,6 +115,7 @@ $(NODE_EXE) $(NODE_G_EXE): config.gypi out/Makefile ln -fs out/${build_type}/$(NODE_EXE) $@; fi else ifeq ($(BUILD_WITH), ninja) +NINJA ?= ninja ifeq ($(V),1) NINJA_ARGS := $(NINJA_ARGS) -v endif @@ -124,11 +125,11 @@ else NINJA_ARGS := $(NINJA_ARGS) $(filter -j%,$(MAKEFLAGS)) endif $(NODE_EXE): config.gypi out/Release/build.ninja - ninja -C out/Release $(NINJA_ARGS) + $(NINJA) -C out/Release $(NINJA_ARGS) if [ ! -r $@ ] || [ ! -L $@ ]; then ln -fs out/Release/$(NODE_EXE) $@; fi $(NODE_G_EXE): config.gypi out/Debug/build.ninja - ninja -C out/Debug $(NINJA_ARGS) + $(NINJA) -C out/Debug $(NINJA_ARGS) if [ ! -r $@ ] || [ ! -L $@ ]; then ln -fs out/Debug/$(NODE_EXE) $@; fi else $(NODE_EXE) $(NODE_G_EXE): @@ -328,6 +329,10 @@ test-cov: all $(MAKE) cctest CI_SKIP_TESTS=$(COV_SKIP_TESTS) $(MAKE) jstest +.PHONY: test-pgo-js +test-pgo-js: all + ENABLE_NODE_LOG=YES $(PYTHON) tools/test.py --mode=release --flaky-tests=dontcare -J pgo + .PHONY: test-parallel test-parallel: all $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) parallel @@ -366,13 +371,13 @@ ADDONS_BINDING_SOURCES := \ $(filter-out test/addons/??_*/*.h, $(wildcard test/addons/*/*.h)) ADDONS_PREREQS := config.gypi \ - deps/npm/node_modules/node-gyp/package.json tools/build-addons.js \ + deps/npm/node_modules/node-gyp/package.json tools/build-addons.mjs \ deps/uv/include/*.h deps/v8/include/*.h \ src/node.h src/node_buffer.h src/node_object_wrap.h src/node_version.h define run_build_addons env npm_config_loglevel=$(LOGLEVEL) npm_config_nodedir="$$PWD" \ - npm_config_python="$(PYTHON)" $(NODE) "$$PWD/tools/build-addons" \ + npm_config_python="$(PYTHON)" $(NODE) "$$PWD/tools/build-addons.mjs" \ "$$PWD/deps/npm/node_modules/node-gyp/bin/node-gyp.js" \ $1 touch $2 @@ -1096,7 +1101,7 @@ endif $(MACOSOUTDIR)/dist/npm/usr/local/lib/node_modules unlink $(MACOSOUTDIR)/dist/node/usr/local/bin/npm unlink $(MACOSOUTDIR)/dist/node/usr/local/bin/npx - $(NODE) tools/license2rtf.js < LICENSE > \ + $(NODE) tools/license2rtf.mjs < LICENSE > \ $(MACOSOUTDIR)/installer/productbuild/Resources/license.rtf cp doc/osx_installer_logo.png $(MACOSOUTDIR)/installer/productbuild/Resources pkgbuild --version $(FULLVERSION) \ @@ -1429,8 +1434,8 @@ CLANG_FORMAT_START ?= HEAD # $ make format-cpp # To format HEAD~1...HEAD (latest commit): # $ CLANG_FORMAT_START=`git rev-parse HEAD~1` make format-cpp -# To format diff between master and current branch head (master...HEAD): -# $ CLANG_FORMAT_START=master make format-cpp +# To format diff between main and current branch head (main...HEAD): +# $ CLANG_FORMAT_START=main make format-cpp format-cpp: ## Format C++ diff from $CLANG_FORMAT_START to current changes ifneq ("","$(wildcard tools/clang-format/node_modules/)") $(info Formatting C++ diff from $(CLANG_FORMAT_START)..) @@ -1440,7 +1445,7 @@ ifneq ("","$(wildcard tools/clang-format/node_modules/)") $(CLANG_FORMAT_START) -- \ $(LINT_CPP_FILES) else - $(info clang-format is not installed.) + $(info Required tooling for C++ code formatting is not installed.) $(info To install (requires internet access) run: $$ make format-cpp-build) endif diff --git a/NOTICE b/NOTICE new file mode 100644 index 00000000000..c0847556042 --- /dev/null +++ b/NOTICE @@ -0,0 +1,49 @@ +AIWWR-Node is developed by Alibaba and based on the Node.js project. +Copyright (c) 2022, Alibaba Group. +All changes licensed under MIT License. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + + +The externally maintained libraries used by AIWWR-Node are: + +- Cwalk, located at deps/cwalk, is licensed as follows: + """ + MIT License + + Copyright (c) 2020 Leonard Iklé + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + """ diff --git a/README.md b/README.md index c7cb705d84d..3b57d7ff59d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Node.js -Node.js is an open-source, cross-platform, JavaScript runtime environment. +Node.js is an open-source, cross-platform JavaScript runtime environment. For information on using Node.js, see the [Node.js website][]. @@ -51,7 +51,7 @@ Looking for help? Check out the * **Nightly**: Code from the Current branch built every 24-hours when there are changes. Use with caution. -Current and LTS releases follow [Semantic Versioning](https://semver.org). A +Current and LTS releases follow [semantic versioning](https://semver.org). A member of the Release Team [signs](#release-keys) each Current and LTS release. For more information, see the [Release README](https://github.com/nodejs/Release#readme). @@ -113,7 +113,7 @@ import the keys: $ gpg --keyserver hkps://keys.openpgp.org --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D ``` -See the bottom of this README for a full script to import active release keys. +See [Release keys](#release-keys) for a script to import active release keys. Next, download the `SHASUMS256.txt.sig` for the release: @@ -159,7 +159,7 @@ For information about the governance of the Node.js project, see * [apapirovski](https://github.com/apapirovski) - **Anatoli Papirovski** <> (he/him) * [BethGriggs](https://github.com/BethGriggs) - - **Beth Griggs** <> (she/her) + **Beth Griggs** <> (she/her) * [BridgeAR](https://github.com/BridgeAR) - **Ruben Bridgewater** <> (he/him) * [ChALkeR](https://github.com/ChALkeR) - @@ -170,20 +170,20 @@ For information about the governance of the Node.js project, see **Danielle Adams** <> (she/her) * [fhinkel](https://github.com/fhinkel) - **Franziska Hinkelmann** <> (she/her) +* [GeoffreyBooth](https://github.com/geoffreybooth) - + **Geoffrey Booth** <> (he/him) * [gireeshpunathil](https://github.com/gireeshpunathil) - **Gireesh Punathil** <> (he/him) * [jasnell](https://github.com/jasnell) - **James M Snell** <> (he/him) * [joyeecheung](https://github.com/joyeecheung) - **Joyee Cheung** <> (she/her) +* [legendecas](https://github.com/legendecas) - + **Chengzhong Wu** <> (he/him) * [mcollina](https://github.com/mcollina) - **Matteo Collina** <> (he/him) * [mhdawson](https://github.com/mhdawson) - **Michael Dawson** <> (he/him) -* [mmarchini](https://github.com/mmarchini) - - **Mary Marchini** <> (she/her) -* [MylesBorins](https://github.com/MylesBorins) - - **Myles Borins** <> (he/him) * [RaisinTen](https://github.com/RaisinTen) - **Darshan Sen** <> (he/him) * [richardlau](https://github.com/richardlau) - @@ -227,8 +227,12 @@ For information about the governance of the Node.js project, see **Isaac Z. Schlueter** <> * [joshgav](https://github.com/joshgav) - **Josh Gavant** <> +* [mmarchini](https://github.com/mmarchini) - + **Mary Marchini** <> (she/her) * [mscdex](https://github.com/mscdex) - **Brian White** <> +* [MylesBorins](https://github.com/MylesBorins) - + **Myles Borins** <> (he/him) * [nebrius](https://github.com/nebrius) - **Bryan Hughes** <> * [ofrobots](https://github.com/ofrobots) - @@ -262,8 +266,6 @@ For information about the governance of the Node.js project, see **Anna Henningsen** <> (she/her) * [aduh95](https://github.com/aduh95) - **Antoine du Hamel** <> (he/him) -* [ak239](https://github.com/ak239) - - **Aleksei Koziatinskii** <> * [antsmartian](https://github.com/antsmartian) - **Anto Aravinth** <> (he/him) * [apapirovski](https://github.com/apapirovski) - @@ -279,19 +281,15 @@ For information about the governance of the Node.js project, see * [benjamingr](https://github.com/benjamingr) - **Benjamin Gruenbaum** <> * [BethGriggs](https://github.com/BethGriggs) - - **Beth Griggs** <> (she/her) + **Beth Griggs** <> (she/her) * [bmeck](https://github.com/bmeck) - **Bradley Farias** <> * [bnb](https://github.com/bnb) - **Tierney Cyren** <> (they/he) * [bnoordhuis](https://github.com/bnoordhuis) - **Ben Noordhuis** <> -* [boneskull](https://github.com/boneskull) - - **Christopher Hiller** <> (he/him) * [BridgeAR](https://github.com/BridgeAR) - **Ruben Bridgewater** <> (he/him) -* [bzoz](https://github.com/bzoz) - - **Bartosz Sosnowski** <> * [cclauss](https://github.com/cclauss) - **Christian Clauss** <> (he/him) * [ChALkeR](https://github.com/ChALkeR) - @@ -300,6 +298,10 @@ For information about the governance of the Node.js project, see **Colin Ihrig** <> (he/him) * [codebytere](https://github.com/codebytere) - **Shelley Vohr** <> (she/her) +* [cola119](https://github.com/cola119) - + **Kohei Ueno** <> (he/him) +* [daeyeon](https://github.com/daeyeon) - + **Daeyeon Jeong** <> (he/him) * [danbev](https://github.com/danbev) - **Daniel Bevenius** <> (he/him) * [danielleadams](https://github.com/danielleadams) - @@ -310,14 +312,16 @@ For information about the governance of the Node.js project, see **Gus Caplan** <> (they/them) * [dmabupt](https://github.com/dmabupt) - **Xu Meng** <> (he/him) -* [dnlup](https://github.com/dnlup) - **Daniele Belardi** <> (he/him) * [edsadr](https://github.com/edsadr) - **Adrian Estrada** <> (he/him) +* [erickwendel](https://github.com/erickwendel) - + **Erick Wendel** <> (he/him) * [evanlucas](https://github.com/evanlucas) - **Evan Lucas** <> (he/him) * [fhinkel](https://github.com/fhinkel) - **Franziska Hinkelmann** <> (she/her) +* [F3n67u](https://github.com/F3n67u) - + **Feng Yu** <> (he/him) * [Flarna](https://github.com/Flarna) - **Gerhard Stöbich** <> (he/they) * [gabrielschulhof](https://github.com/gabrielschulhof) - @@ -332,12 +336,8 @@ For information about the governance of the Node.js project, see **Guy Bedford** <> (he/him) * [HarshithaKP](https://github.com/HarshithaKP) - **Harshitha K P** <> (she/her) -* [hashseed](https://github.com/hashseed) - - **Yang Guo** <> (he/him) * [himself65](https://github.com/himself65) - - **Zeyu Yang** <> (he/him) -* [hiroppy](https://github.com/hiroppy) - - **Yuta Hiroto** <> (he/him) + **Zeyu "Alex" Yang** <> (he/him) * [iansu](https://github.com/iansu) - **Ian Sutherland** <> * [indutny](https://github.com/indutny) - @@ -358,22 +358,26 @@ For information about the governance of the Node.js project, see **Juan José Arboleda** <> (he/him) * [JungMinu](https://github.com/JungMinu) - **Minwoo Jung** <> (he/him) +* [kuriyosh](https://github.com/kuriyosh) - + **Yoshiki Kurihara** <> (he/him) * [legendecas](https://github.com/legendecas) - **Chengzhong Wu** <> (he/him) * [Leko](https://github.com/Leko) - **Shingo Inoue** <> (he/him) * [linkgoron](https://github.com/linkgoron) - **Nitzan Uziely** <> +* [LiviaMedeiros](https://github.com/LiviaMedeiros) - + **LiviaMedeiros** <> * [lpinca](https://github.com/lpinca) - **Luigi Pinca** <> (he/him) -* [lundibundi](https://github.com/lundibundi) - - **Denys Otrishko** <> (he/him) * [Lxxyx](https://github.com/Lxxyx) - **Zijian Liu** <> (he/him) * [marsonya](https://github.com/marsonya) - **Akhil Marsonya** <> (he/him) * [mcollina](https://github.com/mcollina) - **Matteo Collina** <> (he/him) +* [meixg](https://github.com/meixg) - + **Xuguang Mei** <> (he/him) * [Mesteery](https://github.com/Mesteery) - **Mestery** <> (he/him) * [mhdawson](https://github.com/mhdawson) - @@ -382,8 +386,8 @@ For information about the governance of the Node.js project, see **Milad Fa** <> (he/him) * [mildsunrise](https://github.com/mildsunrise) - **Alba Mendez** <> (she/her) -* [mmarchini](https://github.com/mmarchini) - - **Mary Marchini** <> (she/her) +* [MoLow](https://github.com/MoLow) - + **Moshe Atlow** <> (he/him) * [mscdex](https://github.com/mscdex) - **Brian White** <> * [MylesBorins](https://github.com/MylesBorins) - @@ -398,10 +402,10 @@ For information about the governance of the Node.js project, see **Andrey Pechkurov** <> (he/him) * [Qard](https://github.com/Qard) - **Stephen Belanger** <> (he/him) +* [RafaelGSS](https://github.com/RafaelGSS) - + **Rafael Gonzaga** <> (he/him) * [RaisinTen](https://github.com/RaisinTen) - **Darshan Sen** <> (he/him) -* [rexagod](https://github.com/rexagod) - - **Pranshu Srivastava** <> (he/him) * [richardlau](https://github.com/richardlau) - **Richard Lau** <> * [rickyes](https://github.com/rickyes) - @@ -409,7 +413,7 @@ For information about the governance of the Node.js project, see * [ronag](https://github.com/ronag) - **Robert Nagy** <> * [ruyadorno](https://github.com/ruyadorno) - - **Ruy Adorno** <> (he/him) + **Ruy Adorno** <> (he/him) * [rvagg](https://github.com/rvagg) - **Rod Vagg** <> * [ryzokuken](https://github.com/ryzokuken) - @@ -428,6 +432,8 @@ For information about the governance of the Node.js project, see **Stewart X Addison** <> (he/him) * [targos](https://github.com/targos) - **Michaël Zasso** <> (he/him) +* [theanarkh](https://github.com/theanarkh) - + **theanarkh** <> (he/him) * [TimothyGu](https://github.com/TimothyGu) - **Tiancheng "Timothy" Gu** <> (he/him) * [tniessen](https://github.com/tniessen) - @@ -446,8 +452,6 @@ For information about the governance of the Node.js project, see **Khaidi Chu** <> (he/him) * [yashLadha](https://github.com/yashLadha) - **Yash Ladha** <> (he/him) -* [yosuke-furukawa](https://github.com/yosuke-furukawa) - - **Yosuke Furukawa** <> * [ZYSzys](https://github.com/ZYSzys) - **Yongsheng Zhang** <> (he/him) @@ -460,6 +464,8 @@ For information about the governance of the Node.js project, see ### Collaborator emeriti +* [ak239](https://github.com/ak239) - + **Aleksei Koziatinskii** <> * [andrasq](https://github.com/andrasq) - **Andras** <> * [AnnaMag](https://github.com/AnnaMag) - @@ -470,8 +476,12 @@ For information about the governance of the Node.js project, see **Alexey Orlenko** <> (he/him) * [bmeurer](https://github.com/bmeurer) - **Benedikt Meurer** <> +* [boneskull](https://github.com/boneskull) - + **Christopher Hiller** <> (he/him) * [brendanashworth](https://github.com/brendanashworth) - **Brendan Ashworth** <> +* [bzoz](https://github.com/bzoz) - + **Bartosz Sosnowski** <> * [calvinmetcalf](https://github.com/calvinmetcalf) - **Calvin Metcalf** <> * [chrisdickinson](https://github.com/chrisdickinson) - @@ -484,6 +494,8 @@ For information about the governance of the Node.js project, see **Jamie Davis** <> (he/him) * [digitalinfinity](https://github.com/digitalinfinity) - **Hitesh Kanwathirtha** <> (he/him) +* [dnlup](https://github.com/dnlup) + **dnlup** <> * [eljefedelrodeodeljefe](https://github.com/eljefedelrodeodeljefe) - **Robert Jefe Lindstaedt** <> * [estliberitas](https://github.com/estliberitas) - @@ -502,6 +514,10 @@ For information about the governance of the Node.js project, see **Gibson Fahnestock** <> (he/him) * [glentiki](https://github.com/glentiki) - **Glen Keane** <> (he/him) +* [hashseed](https://github.com/hashseed) - + **Yang Guo** <> (he/him) +* [hiroppy](https://github.com/hiroppy) - + **Yuta Hiroto** <> (he/him) * [iarna](https://github.com/iarna) - **Rebecca Turner** <> * [imran-iq](https://github.com/imran-iq) - @@ -534,6 +550,8 @@ For information about the governance of the Node.js project, see **Lance Ball** <> (he/him) * [lucamaraschi](https://github.com/lucamaraschi) - **Luca Maraschi** <> (he/him) +* [lundibundi](https://github.com/lundibundi) - + **Denys Otrishko** <> (he/him) * [lxe](https://github.com/lxe) - **Aleksey Smolenchuk** <> * [maclover7](https://github.com/maclover7) - @@ -548,6 +566,8 @@ For information about the governance of the Node.js project, see **Mikeal Rogers** <> * [misterdjules](https://github.com/misterdjules) - **Julien Gilli** <> +* [mmarchini](https://github.com/mmarchini) - + **Mary Marchini** <> (she/her) * [monsanto](https://github.com/monsanto) - **Christopher Monsanto** <> * [MoonBall](https://github.com/MoonBall) - @@ -576,6 +596,8 @@ For information about the governance of the Node.js project, see **Peter Marshall** <> (he/him) * [refack](https://github.com/refack) - **Refael Ackermann (רפאל פלחי)** <> (he/him/הוא/אתה) +* [rexagod](https://github.com/rexagod) - + **Pranshu Srivastava** <> (he/him) * [rlidwka](https://github.com/rlidwka) - **Alex Kocharin** <> * [rmg](https://github.com/rmg) - @@ -626,6 +648,8 @@ For information about the governance of the Node.js project, see **Yihong Wang** <> * [yorkie](https://github.com/yorkie) - **Yorkie Liu** <> +* [yosuke-furukawa](https://github.com/yosuke-furukawa) - + **Yosuke Furukawa** <> @@ -638,16 +662,24 @@ maintaining the Node.js project. * [Ayase-252](https://github.com/Ayase-252) - **Qingyu Deng** <> +* [daeyeon](https://github.com/daeyeon) - + **Daeyeon Jeong** <> (he/him) +* [F3n67u](https://github.com/F3n67u) - + **Feng Yu** <> (he/him) * [himadriganguly](https://github.com/himadriganguly) - **Himadri Ganguly** <> (he/him) * [iam-frankqiu](https://github.com/iam-frankqiu) - **Frank Qiu** <> (he/him) +* [kvakil](https://github.com/kvakil) - + **Keyhan Vakil** <> (they/them) * [marsonya](https://github.com/marsonya) - **Akhil Marsonya** <> (he/him) * [meixg](https://github.com/meixg) - - **Xuguang Mei** <> (he/him) + **Xuguang Mei** <> (he/him) * [Mesteery](https://github.com/Mesteery) - **Mestery** <> (he/him) +* [MoLow](https://github.com/MoLow) - + **Moshe Atlow** <> (he/him) * [PoojaDurgad](https://github.com/PoojaDurgad) - **Pooja Durgad** <> * [RaisinTen](https://github.com/RaisinTen) - @@ -659,7 +691,7 @@ maintaining the Node.js project. Primary GPG keys for Node.js Releasers (some Releasers sign with subkeys): -* **Beth Griggs** <> +* **Beth Griggs** <> `4ED778F539E3634C779C87C6D7062848A1AB005C` * **Bryan English** <> `141F07595B7B3FFE74309A937405533BE57C7D57` @@ -708,8 +740,8 @@ gpg --keyserver hkps://keys.openpgp.org --recv-keys 108F52B48DB57BB0CC439B2997B0 gpg --keyserver hkps://keys.openpgp.org --recv-keys B9E2F5981AA6E0CD28160D9FF13993A75599653C ``` -See the section above on [Verifying binaries](#verifying-binaries) for how to -use these keys to verify a downloaded file. +See [Verifying binaries](#verifying-binaries) for how to use these keys to +verify a downloaded file.
    @@ -768,6 +800,12 @@ external libraries that are available under a variety of licenses. See [LICENSE](https://github.com/nodejs/node/blob/HEAD/LICENSE) for the full license text. +## Noslate-Anode + +Noslate-Anode is developed by Alibaba and based on the Node.js project. +All changes licensed under the MIT License. +See the NOTICE file for more information. + [Code of Conduct]: https://github.com/nodejs/admin/blob/HEAD/CODE_OF_CONDUCT.md [Contributing to the project]: CONTRIBUTING.md [Node.js website]: https://nodejs.org/ diff --git a/SECURITY.md b/SECURITY.md index b22301a1f1d..57943ce969e 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,7 +4,7 @@ Report security bugs in Node.js via [HackerOne](https://hackerone.com/nodejs). -Your report will be acknowledged within 5 days, and you’ll receive a more +Your report will be acknowledged within 5 days, and you'll receive a more detailed response to your report within 10 days indicating the next steps in handling your submission. @@ -49,7 +49,7 @@ Here is the security disclosure policy for Node.js * This process can take some time, especially when coordination is required with maintainers of other projects. Every effort will be made to handle the - bug in as timely a manner as possible; however, it’s important that we follow + bug in as timely a manner as possible; however, it's important that we follow the release process above to ensure that the disclosure is handled in a consistent manner. diff --git a/android-configure b/android-configure index 43341d1abea..8bab2e0b90c 100755 --- a/android-configure +++ b/android-configure @@ -1,85 +1,35 @@ -#!/bin/bash - -# In order to cross-compile node for Android using NDK, run: -# source android-configure [arch] -# -# By running android-configure with source, will allow environment variables to -# be persistent in current session. This is useful for installing native node -# modules with npm. Also, don't forget to set the arch in npm config using -# 'npm config set arch=' - -if [ $# -ne 3 ]; then - echo "$0 should have 3 parameters: ndk_path, target_arch and sdk_version" - return 1 -fi - -NDK_PATH=$1 -ARCH="$2" -ANDROID_SDK_VERSION=$3 - -if [ $ANDROID_SDK_VERSION -lt 23 ]; then - echo "$ANDROID_SDK_VERSION should equal or later than 23(Android 6.0)" -fi - -CC_VER="4.9" - -case $ARCH in - arm) - DEST_CPU="arm" - TOOLCHAIN_NAME="armv7-linux-androideabi" - ;; - x86) - DEST_CPU="ia32" - TOOLCHAIN_NAME="i686-linux-android" - ;; - x86_64) - DEST_CPU="x64" - TOOLCHAIN_NAME="x86_64-linux-android" - ARCH="x64" - ;; - arm64|aarch64) - DEST_CPU="arm64" - TOOLCHAIN_NAME="aarch64-linux-android" - ARCH="arm64" - ;; - *) - echo "Unsupported architecture provided: $ARCH" - return 1 - ;; -esac - -HOST_OS="linux" -HOST_ARCH="x86_64" -export CC_host=$(command -v gcc) -export CXX_host=$(command -v g++) - -host_gcc_version=$($CC_host --version | grep gcc | awk '{print $NF}') -major=$(echo $host_gcc_version | awk -F . '{print $1}') -minor=$(echo $host_gcc_version | awk -F . '{print $2}') -if [ -z $major ] || [ -z $minor ] || [ $major -lt 6 ] || ( [ $major -eq 6 ] && [ $minor -lt 3 ] ); then - echo "host gcc $host_gcc_version is too old, need gcc 6.3.0" - return 1 -fi - -SUFFIX="$TOOLCHAIN_NAME$ANDROID_SDK_VERSION" -TOOLCHAIN=$NDK_PATH/toolchains/llvm/prebuilt/$HOST_OS-$HOST_ARCH - -export PATH=$TOOLCHAIN/bin:$PATH -export CC=$TOOLCHAIN/bin/$SUFFIX-clang -export CXX=$TOOLCHAIN/bin/$SUFFIX-clang++ - - -GYP_DEFINES="target_arch=$ARCH" -GYP_DEFINES+=" v8_target_arch=$ARCH" -GYP_DEFINES+=" android_target_arch=$ARCH" -GYP_DEFINES+=" host_os=$HOST_OS OS=android" -export GYP_DEFINES - -if [ -f "configure" ]; then - ./configure \ - --dest-cpu=$DEST_CPU \ - --dest-os=android \ - --without-snapshot \ - --openssl-no-asm \ - --cross-compiling -fi +#!/bin/sh + +# Locate an acceptable Python interpreter and then re-execute the script. +# Note that the mix of single and double quotes is intentional, +# as is the fact that the ] goes on a new line. +_=[ 'exec' '/bin/sh' '-c' ''' +command -v python3.10 >/dev/null && exec python3.10 "$0" "$@" +command -v python3.9 >/dev/null && exec python3.9 "$0" "$@" +command -v python3.8 >/dev/null && exec python3.8 "$0" "$@" +command -v python3.7 >/dev/null && exec python3.7 "$0" "$@" +command -v python3.6 >/dev/null && exec python3.6 "$0" "$@" +command -v python3 >/dev/null && exec python3 "$0" "$@" +exec python "$0" "$@" +''' "$0" "$@" +] +del _ + +import sys +try: + from shutil import which +except ImportError: + from distutils.spawn import find_executable as which + +print('Node.js android configure: Found Python {}.{}.{}...'.format(*sys.version_info)) +acceptable_pythons = ((3, 10), (3, 9), (3, 8), (3, 7), (3, 6)) +if sys.version_info[:2] in acceptable_pythons: + import android_configure +else: + python_cmds = ['python{}.{}'.format(*vers) for vers in acceptable_pythons] + sys.stderr.write('Please use {}.\n'.format(' or '.join(python_cmds))) + for python_cmd in python_cmds: + python_cmd_path = which(python_cmd) + if python_cmd_path and 'pyenv/shims' not in python_cmd_path: + sys.stderr.write('\t{} {}\n'.format(python_cmd_path, ' '.join(sys.argv[:1]))) + sys.exit(1) diff --git a/android-patches/trap-handler.h.patch b/android-patches/trap-handler.h.patch new file mode 100644 index 00000000000..f4f151f6526 --- /dev/null +++ b/android-patches/trap-handler.h.patch @@ -0,0 +1,26 @@ +--- trap-handler.h 2022-08-11 09:01:23.384000000 +0800 ++++ fixed-trap-handler.h 2022-08-11 09:09:15.352000000 +0800 +@@ -17,23 +17,7 @@ + namespace internal { + namespace trap_handler { + +-// X64 on Linux, Windows, MacOS, FreeBSD. +-#if V8_HOST_ARCH_X64 && V8_TARGET_ARCH_X64 && \ +- ((V8_OS_LINUX && !V8_OS_ANDROID) || V8_OS_WIN || V8_OS_DARWIN || \ +- V8_OS_FREEBSD) +-#define V8_TRAP_HANDLER_SUPPORTED true +-// Arm64 (non-simulator) on Mac. +-#elif V8_TARGET_ARCH_ARM64 && V8_HOST_ARCH_ARM64 && V8_OS_DARWIN +-#define V8_TRAP_HANDLER_SUPPORTED true +-// Arm64 simulator on x64 on Linux, Mac, or Windows. +-#elif V8_TARGET_ARCH_ARM64 && V8_HOST_ARCH_X64 && \ +- (V8_OS_LINUX || V8_OS_DARWIN) +-#define V8_TRAP_HANDLER_VIA_SIMULATOR +-#define V8_TRAP_HANDLER_SUPPORTED true +-// Everything else is unsupported. +-#else + #define V8_TRAP_HANDLER_SUPPORTED false +-#endif + + // Setup for shared library export. + #if defined(BUILDING_V8_SHARED) && defined(V8_OS_WIN) \ No newline at end of file diff --git a/android_configure.py b/android_configure.py new file mode 100644 index 00000000000..57d94023915 --- /dev/null +++ b/android_configure.py @@ -0,0 +1,76 @@ +import platform +import sys +import os + +# TODO: In next version, it will be a JSON file listing all the patches, and then it will iterate through to apply them. +def patch_android(): + print("- Patches List -") + print("[1] [deps/v8/src/trap-handler/trap-handler.h] related to https://github.com/nodejs/node/issues/36287") + if platform.system() == "Linux": + os.system('patch -f ./deps/v8/src/trap-handler/trap-handler.h < ./android-patches/trap-handler.h.patch') + print("\033[92mInfo: \033[0m" + "Tried to patch.") + +if platform.system() == "Windows": + print("android-configure is not supported on Windows yet.") + sys.exit(1) + +if len(sys.argv) == 2 and sys.argv[1] == "patch": + patch_android() + sys.exit(0) + +if len(sys.argv) != 4: + print("Usage: ./android-configure [patch] ") + sys.exit(1) + +if not os.path.exists(sys.argv[1]) or not os.listdir(sys.argv[1]): + print("\033[91mError: \033[0m" + "Invalid path to the Android NDK") + sys.exit(1) + +if int(sys.argv[2]) < 24: + print("\033[91mError: \033[0m" + "Android SDK version must be at least 24 (Android 7.0)") + sys.exit(1) + +android_ndk_path = sys.argv[1] +android_sdk_version = sys.argv[2] +arch = sys.argv[3] + +if arch == "arm": + DEST_CPU = "arm" + TOOLCHAIN_PREFIX = "armv7a-linux-androideabi" +elif arch in ("aarch64", "arm64"): + DEST_CPU = "arm64" + TOOLCHAIN_PREFIX = "aarch64-linux-android" + arch = "arm64" +elif arch == "x86": + DEST_CPU = "ia32" + TOOLCHAIN_PREFIX = "i686-linux-android" +elif arch == "x86_64": + DEST_CPU = "x64" + TOOLCHAIN_PREFIX = "x86_64-linux-android" + arch = "x64" +else: + print("\033[91mError: \033[0m" + "Invalid target architecture, must be one of: arm, arm64, aarch64, x86, x86_64") + sys.exit(1) + +print("\033[92mInfo: \033[0m" + "Configuring for " + DEST_CPU + "...") + +if platform.system() == "Darwin": + host_os = "darwin" + toolchain_path = android_ndk_path + "/toolchains/llvm/prebuilt/darwin-x86_64" + +elif platform.system() == "Linux": + host_os = "linux" + toolchain_path = android_ndk_path + "/toolchains/llvm/prebuilt/linux-x86_64" + +os.environ['PATH'] += os.pathsep + toolchain_path + "/bin" +os.environ['CC'] = toolchain_path + "/bin/" + TOOLCHAIN_PREFIX + android_sdk_version + "-" + "clang" +os.environ['CXX'] = toolchain_path + "/bin/" + TOOLCHAIN_PREFIX + android_sdk_version + "-" + "clang++" + +GYP_DEFINES = "target_arch=" + arch +GYP_DEFINES += " v8_target_arch=" + arch +GYP_DEFINES += " android_target_arch=" + arch +GYP_DEFINES += " host_os=" + host_os + " OS=android" +os.environ['GYP_DEFINES'] = GYP_DEFINES + +if os.path.exists("./configure"): + os.system("./configure --dest-cpu=" + DEST_CPU + " --dest-os=android --openssl-no-asm --cross-compiling") diff --git a/benchmark/.eslintrc.yaml b/benchmark/.eslintrc.yaml index 6871299adec..aa014eec4e3 100644 --- a/benchmark/.eslintrc.yaml +++ b/benchmark/.eslintrc.yaml @@ -5,5 +5,4 @@ env: es6: true rules: - no-var: error prefer-arrow-callback: error diff --git a/benchmark/common.js b/benchmark/common.js index 88cb8a560f4..6ed230ffde4 100644 --- a/benchmark/common.js +++ b/benchmark/common.js @@ -289,7 +289,15 @@ function formatResult(data) { function sendResult(data) { if (process.send) { // If forked, report by process send - process.send(data); + process.send(data, () => { + if (Object.hasOwn(process.env, 'NODE_RUN_BENCHMARK_FN')) { + // If, for any reason, the process is unable to self close within + // a second after completing, forcefully close it. + setTimeout(() => { + process.exit(0); + }, 5000).unref(); + } + }); } else { // Otherwise report by stdout process.stdout.write(formatResult(data)); diff --git a/benchmark/error/error.js b/benchmark/error/error.js new file mode 100644 index 00000000000..c856f3e07f6 --- /dev/null +++ b/benchmark/error/error.js @@ -0,0 +1,14 @@ +'use strict'; + +const common = require('../common.js'); + +const bench = common.createBenchmark(main, { + n: [1e7], +}); + +function main({ n }) { + bench.start(); + for (let i = 0; i < n; ++i) + new Error('test'); + bench.end(n); +} diff --git a/benchmark/error/node-error.js b/benchmark/error/node-error.js new file mode 100644 index 00000000000..f672522b2d0 --- /dev/null +++ b/benchmark/error/node-error.js @@ -0,0 +1,21 @@ +'use strict'; + +const common = require('../common'); + +const bench = common.createBenchmark(main, { + n: [1e7], +}, { + flags: ['--expose-internals'] +}); + +function main({ n }) { + const { + codes: { + ERR_INVALID_STATE, + } + } = require('internal/errors'); + bench.start(); + for (let i = 0; i < n; ++i) + new ERR_INVALID_STATE.TypeError('test'); + bench.end(n); +} diff --git a/benchmark/es/eval.js b/benchmark/es/eval.js new file mode 100644 index 00000000000..b4c6ee2e0a6 --- /dev/null +++ b/benchmark/es/eval.js @@ -0,0 +1,46 @@ +'use strict'; + +const common = require('../common.js'); + +const bench = common.createBenchmark(main, { + method: ['without-sourcemap', 'sourcemap'], + n: [1e6], +}); + +const sourceWithoutSourceMap = ` +'use strict'; +(function() { + let a = 1; + for (let i = 0; i < 1000; i++) { + a++; + } + return a; +})(); +`; +const sourceWithSourceMap = ` +${sourceWithoutSourceMap} +//# sourceMappingURL=https://ci.nodejs.org/405 +`; + +function evalN(n, source) { + bench.start(); + for (let i = 0; i < n; i++) { + eval(source); + } + bench.end(n); +} + +function main({ n, method }) { + switch (method) { + case 'without-sourcemap': + process.setSourceMapsEnabled(false); + evalN(n, sourceWithoutSourceMap); + break; + case 'sourcemap': + process.setSourceMapsEnabled(true); + evalN(n, sourceWithSourceMap); + break; + default: + throw new Error(`Unexpected method "${method}"`); + } +} diff --git a/benchmark/fixtures/require-cachable.js b/benchmark/fixtures/require-cachable.js index 4afda3cda47..105652a5185 100644 --- a/benchmark/fixtures/require-cachable.js +++ b/benchmark/fixtures/require-cachable.js @@ -2,9 +2,9 @@ const { internalBinding } = require('internal/test/binding'); const { - moduleCategories: { canBeRequired } -} = internalBinding('native_module'); + builtinCategories: { canBeRequired } +} = internalBinding('builtins'); for (const key of canBeRequired) { - require(key); + require(`node:${key}`); } diff --git a/benchmark/fs/readfile-partitioned.js b/benchmark/fs/readfile-partitioned.js index fac331ec38b..e0ca7a2c1bb 100644 --- a/benchmark/fs/readfile-partitioned.js +++ b/benchmark/fs/readfile-partitioned.js @@ -17,12 +17,13 @@ const zlib = require('zlib'); const assert = require('assert'); const bench = common.createBenchmark(main, { - dur: [5], + duration: [5], + encoding: ['', 'utf-8'], len: [1024, 16 * 1024 * 1024], concurrent: [1, 10] }); -function main({ len, dur, concurrent }) { +function main({ len, duration, concurrent, encoding }) { try { fs.unlinkSync(filename); } catch { @@ -47,10 +48,10 @@ function main({ len, dur, concurrent }) { } catch { // Continue regardless of error. } - }, dur * 1000); + }, duration * 1000); function read() { - fs.readFile(filename, afterRead); + fs.readFile(filename, encoding, afterRead); } function afterRead(er, data) { diff --git a/benchmark/fs/readfile-promises.js b/benchmark/fs/readfile-promises.js index 5cfa5b4cc02..0fa92fdffad 100644 --- a/benchmark/fs/readfile-promises.js +++ b/benchmark/fs/readfile-promises.js @@ -15,11 +15,12 @@ const filename = path.resolve(tmpdir.path, const bench = common.createBenchmark(main, { duration: [5], + encoding: ['', 'utf-8'], len: [1024, 16 * 1024 * 1024], concurrent: [1, 10] }); -function main({ len, duration, concurrent }) { +function main({ len, duration, concurrent, encoding }) { try { fs.unlinkSync(filename); } catch { @@ -44,7 +45,7 @@ function main({ len, duration, concurrent }) { }, duration * 1000); function read() { - fs.promises.readFile(filename) + fs.promises.readFile(filename, encoding) .then((res) => afterRead(undefined, res)) .catch((err) => afterRead(err)); } diff --git a/benchmark/fs/readfile.js b/benchmark/fs/readfile.js index e27fe08f43c..575ceff34eb 100644 --- a/benchmark/fs/readfile.js +++ b/benchmark/fs/readfile.js @@ -15,11 +15,12 @@ const filename = path.resolve(tmpdir.path, const bench = common.createBenchmark(main, { duration: [5], + encoding: ['', 'utf-8'], len: [1024, 16 * 1024 * 1024], concurrent: [1, 10] }); -function main({ len, duration, concurrent }) { +function main({ len, duration, concurrent, encoding }) { try { fs.unlinkSync(filename); } catch { @@ -44,7 +45,7 @@ function main({ len, duration, concurrent }) { }, duration * 1000); function read() { - fs.readFile(filename, afterRead); + fs.readFile(filename, encoding, afterRead); } function afterRead(er, data) { diff --git a/benchmark/perf_hooks/resourcetiming.js b/benchmark/perf_hooks/resourcetiming.js new file mode 100644 index 00000000000..c71cfeae7ef --- /dev/null +++ b/benchmark/perf_hooks/resourcetiming.js @@ -0,0 +1,77 @@ +'use strict'; + +const common = require('../common.js'); + +const { + PerformanceObserver, + performance, +} = require('perf_hooks'); + +function createTimingInfo({ + startTime = 0, + redirectStartTime = 0, + redirectEndTime = 0, + postRedirectStartTime = 0, + finalServiceWorkerStartTime = 0, + finalNetworkRequestStartTime = 0, + finalNetworkResponseStartTime = 0, + endTime = 0, + encodedBodySize = 0, + decodedBodySize = 0, + finalConnectionTimingInfo = null +}) { + if (finalConnectionTimingInfo !== null) { + finalConnectionTimingInfo.domainLookupStartTime = + finalConnectionTimingInfo.domainLookupStartTime || 0; + finalConnectionTimingInfo.domainLookupEndTime = + finalConnectionTimingInfo.domainLookupEndTime || 0; + finalConnectionTimingInfo.connectionStartTime = + finalConnectionTimingInfo.connectionStartTime || 0; + finalConnectionTimingInfo.connectionEndTime = + finalConnectionTimingInfo.connectionEndTime || 0; + finalConnectionTimingInfo.secureConnectionStartTime = + finalConnectionTimingInfo.secureConnectionStartTime || 0; + finalConnectionTimingInfo.ALPNNegotiatedProtocol = + finalConnectionTimingInfo.ALPNNegotiatedProtocol || []; + } + return { + startTime, + redirectStartTime, + redirectEndTime, + postRedirectStartTime, + finalServiceWorkerStartTime, + finalNetworkRequestStartTime, + finalNetworkResponseStartTime, + endTime, + encodedBodySize, + decodedBodySize, + finalConnectionTimingInfo, + }; +} + +const bench = common.createBenchmark(main, { + n: [1e5], + observe: ['resource'], +}); + +function test() { + const timingInfo = createTimingInfo({ finalConnectionTimingInfo: {} }); + performance.markResourceTiming( + timingInfo, + 'http://localhost:8080', + 'fetch', + {}, + '' + ); +} + +function main({ n, observe }) { + const obs = new PerformanceObserver(() => { + bench.end(n); + }); + obs.observe({ entryTypes: [observe], buffered: true }); + + bench.start(); + for (let i = 0; i < 1e5; i++) + test(); +} diff --git a/benchmark/process/next-tick-loop-args.js b/benchmark/process/next-tick-loop-args.js new file mode 100644 index 00000000000..d163a799aee --- /dev/null +++ b/benchmark/process/next-tick-loop-args.js @@ -0,0 +1,37 @@ +'use strict'; +const common = require('../common.js'); +const bench = common.createBenchmark(main, { + n: [1e4, 2e4, 4e4], + loop: [1e2, 2e2], +}); + +function main({ n, loop }) { + bench.start(); + run(); + function run() { + let j = 0; + + function cb() { + j++; + if (j === n) { + loop--; + if (loop === 0) { + bench.end(n); + } else { + run(); + } + } + } + + for (let i = 0; i < n; i++) { + if (i % 4 === 0) + process.nextTick(cb, i, true, 10, 'test'); + else if (i % 3 === 0) + process.nextTick(cb, i, true, 10); + else if (i % 2 === 0) + process.nextTick(cb, i, 20); + else + process.nextTick(cb, i); + } + } +} diff --git a/benchmark/process/next-tick-loop.js b/benchmark/process/next-tick-loop.js new file mode 100644 index 00000000000..5159910e576 --- /dev/null +++ b/benchmark/process/next-tick-loop.js @@ -0,0 +1,30 @@ +'use strict'; +const common = require('../common.js'); +const bench = common.createBenchmark(main, { + n: [1e4, 2e4, 4e4], + loop: [1e2, 2e2], +}); + +function main({ n, loop }) { + bench.start(); + run(); + function run() { + let j = 0; + + function cb() { + j++; + if (j === n) { + loop--; + if (loop === 0) { + bench.end(n); + } else { + run(); + } + } + } + + for (let i = 0; i < n; i++) { + process.nextTick(cb); + } + } +} diff --git a/benchmark/streams/destroy.js b/benchmark/streams/destroy.js new file mode 100644 index 00000000000..c6811139d8c --- /dev/null +++ b/benchmark/streams/destroy.js @@ -0,0 +1,56 @@ +'use strict'; +const common = require('../common.js'); +const { + Duplex, + Readable, + Transform, + Writable, +} = require('stream'); + +const bench = common.createBenchmark(main, { + n: [1e6], + kind: ['duplex', 'readable', 'transform', 'writable'] +}); + +function main({ n, kind }) { + switch (kind) { + case 'duplex': + new Duplex({}); + new Duplex(); + + bench.start(); + for (let i = 0; i < n; ++i) + new Duplex().destroy(); + bench.end(n); + break; + case 'readable': + new Readable({}); + new Readable(); + + bench.start(); + for (let i = 0; i < n; ++i) + new Readable().destroy(); + bench.end(n); + break; + case 'writable': + new Writable({}); + new Writable(); + + bench.start(); + for (let i = 0; i < n; ++i) + new Writable().destroy(); + bench.end(n); + break; + case 'transform': + new Transform({}); + new Transform(); + + bench.start(); + for (let i = 0; i < n; ++i) + new Transform().destroy(); + bench.end(n); + break; + default: + throw new Error('Invalid kind'); + } +} diff --git a/benchmark/tls/secure-pair.js b/benchmark/tls/secure-pair.js index 76658fc3c42..08be1f7e46f 100644 --- a/benchmark/tls/secure-pair.js +++ b/benchmark/tls/secure-pair.js @@ -25,6 +25,7 @@ function main({ dur, size, securing }) { isServer: true, requestCert: true, rejectUnauthorized: true, + maxVersion: 'TLSv1.2', }; const server = net.createServer(onRedirectConnection); @@ -38,6 +39,7 @@ function main({ dur, size, securing }) { cert: options.cert, isServer: false, rejectUnauthorized: false, + maxVersion: options.maxVersion, }; const network = securing === 'clear' ? net : tls; const conn = network.connect(clientOptions, () => { diff --git a/benchmark/tls/throughput-c2s.js b/benchmark/tls/throughput-c2s.js index f3a96abcbc0..023b42cbeda 100644 --- a/benchmark/tls/throughput-c2s.js +++ b/benchmark/tls/throughput-c2s.js @@ -33,7 +33,8 @@ function main({ dur, type, size }) { key: fixtures.readKey('rsa_private.pem'), cert: fixtures.readKey('rsa_cert.crt'), ca: fixtures.readKey('rsa_ca.crt'), - ciphers: 'AES256-GCM-SHA384' + ciphers: 'AES256-GCM-SHA384', + maxVersion: 'TLSv1.2', }; const server = tls.createServer(options, onConnection); diff --git a/benchmark/tls/throughput-s2c.js b/benchmark/tls/throughput-s2c.js index a505a719d30..d3018cf851d 100644 --- a/benchmark/tls/throughput-s2c.js +++ b/benchmark/tls/throughput-s2c.js @@ -40,7 +40,8 @@ function main({ dur, type, sendchunklen, recvbuflen, recvbufgenfn }) { key: fixtures.readKey('rsa_private.pem'), cert: fixtures.readKey('rsa_cert.crt'), ca: fixtures.readKey('rsa_ca.crt'), - ciphers: 'AES256-GCM-SHA384' + ciphers: 'AES256-GCM-SHA384', + maxVersion: 'TLSv1.2', }; let socketOpts; diff --git a/benchmark/tls/tls-connect.js b/benchmark/tls/tls-connect.js index 3fc2ecb6149..db50306485a 100644 --- a/benchmark/tls/tls-connect.js +++ b/benchmark/tls/tls-connect.js @@ -21,7 +21,8 @@ function main(conf) { key: fixtures.readKey('rsa_private.pem'), cert: fixtures.readKey('rsa_cert.crt'), ca: fixtures.readKey('rsa_ca.crt'), - ciphers: 'AES256-GCM-SHA384' + ciphers: 'AES256-GCM-SHA384', + maxVersion: 'TLSv1.2', }; const server = tls.createServer(options, onConnection); diff --git a/common.gypi b/common.gypi index 3cfed562577..cbf9c3810d7 100644 --- a/common.gypi +++ b/common.gypi @@ -29,6 +29,7 @@ 'error_on_warn%': 'false', 'openssl_fips%': '', + 'openssl_product': '<(STATIC_LIB_PREFIX)openssl<(STATIC_LIB_SUFFIX)', 'openssl_no_asm%': 0, # Don't use ICU data file (icudtl.dat) from V8, we use our own. @@ -36,7 +37,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.21', + 'v8_embedder_string': '-node.24', ##### V8 defaults for Node.js ##### @@ -101,11 +102,6 @@ 'obj_dir%': '<(PRODUCT_DIR)/obj.target', 'v8_base': '<(PRODUCT_DIR)/obj.target/tools/v8_gypfiles/libv8_snapshot.a', }], - ['openssl_fips != ""', { - 'openssl_product': '<(STATIC_LIB_PREFIX)openssl<(STATIC_LIB_SUFFIX)', - }, { - 'openssl_product': '<(STATIC_LIB_PREFIX)openssl<(STATIC_LIB_SUFFIX)', - }], ['OS=="mac"', { 'clang%': 1, 'obj_dir%': '<(PRODUCT_DIR)/obj.target', @@ -286,7 +282,11 @@ 'VCCLCompilerTool': { 'AdditionalOptions': ['/Zc:__cplusplus'], 'BufferSecurityCheck': 'true', - 'DebugInformationFormat': 1, # /Z7 embed info in .obj files + 'target_conditions': [ + ['_toolset=="target"', { + 'DebugInformationFormat': 1 # /Z7 embed info in .obj files + }], + ], 'ExceptionHandling': 0, # /EHsc 'MultiProcessorCompilation': 'true', 'StringPooling': 'true', # pool string literals diff --git a/configure b/configure index 6ef2da2e631..fefb313c9cd 100755 --- a/configure +++ b/configure @@ -4,6 +4,7 @@ # Note that the mix of single and double quotes is intentional, # as is the fact that the ] goes on a new line. _=[ 'exec' '/bin/sh' '-c' ''' +command -v python3.11 >/dev/null && exec python3.11 "$0" "$@" command -v python3.10 >/dev/null && exec python3.10 "$0" "$@" command -v python3.9 >/dev/null && exec python3.9 "$0" "$@" command -v python3.8 >/dev/null && exec python3.8 "$0" "$@" @@ -22,7 +23,7 @@ except ImportError: from distutils.spawn import find_executable as which print('Node.js configure: Found Python {}.{}.{}...'.format(*sys.version_info)) -acceptable_pythons = ((3, 10), (3, 9), (3, 8), (3, 7), (3, 6)) +acceptable_pythons = ((3, 11), (3, 10), (3, 9), (3, 8), (3, 7), (3, 6)) if sys.version_info[:2] in acceptable_pythons: import configure else: diff --git a/configure.py b/configure.py index 95b31769cb5..d3192ca04ca 100755 --- a/configure.py +++ b/configure.py @@ -45,7 +45,7 @@ parser = argparse.ArgumentParser() valid_os = ('win', 'mac', 'solaris', 'freebsd', 'openbsd', 'linux', - 'android', 'aix', 'cloudabi') + 'android', 'aix', 'cloudabi', 'ios') valid_arch = ('arm', 'arm64', 'ia32', 'mips', 'mipsel', 'mips64el', 'ppc', 'ppc64', 'x64', 'x86', 'x86_64', 's390x', 'riscv64', 'loong64') valid_arm_float_abi = ('soft', 'softfp', 'hard') @@ -181,6 +181,12 @@ "e.g. /root/x/y.js will be referenced via require('root/x/y'). " "Can be used multiple times") +parser.add_argument("--openssl-conf-name", + action="store", + dest="openssl_conf_name", + default='nodejs_conf', + help="The OpenSSL config appname (config section name) used by Node.js") + parser.add_argument('--openssl-default-cipher-list', action='store', dest='openssl_default_cipher_list', @@ -733,6 +739,14 @@ help='compile shared library for embedding node in another project. ' + '(This mode is not officially supported for regular applications)') +parser.add_argument('--libdir', + action='store', + dest='libdir', + default='lib', + help='a directory to install the shared library into relative to the ' + 'prefix. This is a no-op if --shared is not specified. ' + + '(This mode is not officially supported for regular applications)') + parser.add_argument('--without-v8-platform', action='store_true', dest='without_v8_platform', @@ -792,6 +806,13 @@ default=False, help='node will load builtin modules from disk instead of from binary') +parser.add_argument('--node-snapshot-main', + action='store', + dest='node_snapshot_main', + default=None, + help='Run a file when building the embedded snapshot. Currently ' + + 'experimental.') + # Create compile_commands.json in out/Debug and out/Release. parser.add_argument('-C', action='store_true', @@ -1118,6 +1139,7 @@ def host_arch_win(): 'x86' : 'ia32', 'arm' : 'arm', 'mips' : 'mips', + 'ARM64' : 'arm64' } return matchup.get(arch, 'ia32') @@ -1219,6 +1241,22 @@ def configure_node(o): o['variables']['want_separate_host_toolset'] = int(cross_compiling) + # Enable branch protection for arm64 + if target_arch == 'arm64': + o['cflags']+=['-msign-return-address=all'] + + if options.node_snapshot_main is not None: + if options.shared: + # This should be possible to fix, but we will need to refactor the + # libnode target to avoid building it twice. + error('--node-snapshot-main is incompatible with --shared') + if options.without_node_snapshot: + error('--node-snapshot-main is incompatible with ' + + '--without-node-snapshot') + if cross_compiling: + error('--node-snapshot-main is incompatible with cross compilation') + o['variables']['node_snapshot_main'] = options.node_snapshot_main + if options.without_node_snapshot or options.node_builtin_modules_path: o['variables']['node_use_node_snapshot'] = 'false' else: @@ -1342,6 +1380,7 @@ def configure_node(o): o['variables']['node_no_browser_globals'] = b(options.no_browser_globals) o['variables']['node_shared'] = b(options.shared) + o['variables']['libdir'] = options.libdir node_module_version = getmoduleversion.get_version() if options.dest_os == 'android': @@ -1461,6 +1500,8 @@ def configure_openssl(o): if options.openssl_no_asm: variables['openssl_no_asm'] = 1 + o['defines'] += ['NODE_OPENSSL_CONF_NAME=' + options.openssl_conf_name] + if options.without_ssl: def without_ssl_error(option): error('--without-ssl is incompatible with %s' % option) @@ -1607,7 +1648,7 @@ def icu_download(path): # write an empty file to start with write(icu_config_name, do_not_edit + - pprint.pformat(icu_config, indent=2) + '\n') + pprint.pformat(icu_config, indent=2, width=1024) + '\n') # always set icu_small, node.gyp depends on it being defined. o['variables']['icu_small'] = b(False) @@ -1634,7 +1675,7 @@ def icu_download(path): o['variables']['icu_small'] = b(True) locs = set(options.with_icu_locales.split(',')) locs.add('root') # must have root - o['variables']['icu_locales'] = ','.join(str(loc) for loc in locs) + o['variables']['icu_locales'] = ','.join(str(loc) for loc in sorted(locs)) # We will check a bit later if we can use the canned deps/icu-small o['variables']['icu_default_data'] = options.with_icu_default_data_dir or '' elif with_intl == 'full-icu': @@ -1859,7 +1900,7 @@ def icu_download(path): # write updated icu_config.gypi with a bunch of paths write(icu_config_name, do_not_edit + - pprint.pformat(icu_config, indent=2) + '\n') + pprint.pformat(icu_config, indent=2, width=1024) + '\n') return # end of configure_intl def configure_inspector(o): @@ -1997,7 +2038,7 @@ def make_bin_override(): print_verbose(output) write('config.gypi', do_not_edit + - pprint.pformat(output, indent=2) + '\n') + pprint.pformat(output, indent=2, width=1024) + '\n') write('config.status', '#!/bin/sh\nset -x\nexec ./configure ' + ' '.join([pipes.quote(arg) for arg in original_argv]) + '\n') @@ -2040,7 +2081,7 @@ def make_bin_override(): gyp_args = ['--no-parallel', '-Dconfiguring_node=1'] if options.use_ninja: - gyp_args += ['-f', 'ninja'] + gyp_args += ['-f', 'ninja-' + flavor] elif flavor == 'win' and sys.platform != 'msys': gyp_args += ['-f', 'msvs', '-G', 'msvs_version=auto'] else: diff --git a/deps/acorn/acorn/CHANGELOG.md b/deps/acorn/acorn/CHANGELOG.md index 278fa50c9d8..ea8d6c04dba 100644 --- a/deps/acorn/acorn/CHANGELOG.md +++ b/deps/acorn/acorn/CHANGELOG.md @@ -1,3 +1,39 @@ +## 8.8.0 (2022-07-21) + +### Bug fixes + +Allow parentheses around spread args in destructuring object assignment. + +Fix an issue where the tree contained `directive` properties in when parsing with a language version that doesn't support them. + +### New features + +Support hashbang comments by default in ECMAScript 2023 and later. + +## 8.7.1 (2021-04-26) + +### Bug fixes + +Stop handling `"use strict"` directives in ECMAScript versions before 5. + +Fix an issue where duplicate quoted export names in `export *` syntax were incorrectly checked. + +Add missing type for `tokTypes`. + +## 8.7.0 (2021-12-27) + +### New features + +Support quoted export names. + +Upgrade to Unicode 14. + +Add support for Unicode 13 properties in regular expressions. + +### Bug fixes + +Use a loop to find line breaks, because the existing regexp search would overrun the end of the searched range and waste a lot of time in minified code. + ## 8.6.0 (2021-11-18) ### Bug fixes diff --git a/deps/acorn/acorn/LICENSE b/deps/acorn/acorn/LICENSE index d6be6db2cff..9d71cc63a35 100644 --- a/deps/acorn/acorn/LICENSE +++ b/deps/acorn/acorn/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2012-2020 by various contributors (see AUTHORS) +Copyright (C) 2012-2022 by various contributors (see AUTHORS) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/deps/acorn/acorn/README.md b/deps/acorn/acorn/README.md index 601e86c8fdd..61e7dd35edf 100644 --- a/deps/acorn/acorn/README.md +++ b/deps/acorn/acorn/README.md @@ -54,10 +54,10 @@ required): - **ecmaVersion**: Indicates the ECMAScript version to parse. Must be either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10 (2019), - 11 (2020), 12 (2021), 13 (2022, partial support) - or `"latest"` (the latest the library supports). This influences - support for strict mode, the set of reserved words, and support - for new syntax features. + 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `"latest"` (the + latest the library supports). This influences support for strict + mode, the set of reserved words, and support for new syntax + features. **NOTE**: Only 'stage 4' (finalized) ECMAScript features are being implemented by Acorn. Other proposed new features must be @@ -104,9 +104,9 @@ required): - **allowSuperOutsideMethod**: By default, `super` outside a method raises an error. Set this to `true` to accept such code. -- **allowHashBang**: When this is enabled (off by default), if the - code starts with the characters `#!` (as in a shellscript), the - first line will be treated as a comment. +- **allowHashBang**: When this is enabled, if the code starts with the + characters `#!` (as in a shellscript), the first line will be + treated as a comment. Defaults to true when `ecmaVersion` >= 2023. - **locations**: When `true`, each node has a `loc` object attached with `start` and `end` subobjects, each of which contains the @@ -271,10 +271,3 @@ The utility spits out the syntax tree as JSON data. ## Existing plugins - [`acorn-jsx`](https://github.com/RReverser/acorn-jsx): Parse [Facebook JSX syntax extensions](https://github.com/facebook/jsx) - -Plugins for ECMAScript proposals: - - - [`acorn-stage3`](https://github.com/acornjs/acorn-stage3): Parse most stage 3 proposals, bundling: - - [`acorn-class-fields`](https://github.com/acornjs/acorn-class-fields): Parse [class fields proposal](https://github.com/tc39/proposal-class-fields) - - [`acorn-import-meta`](https://github.com/acornjs/acorn-import-meta): Parse [import.meta proposal](https://github.com/tc39/proposal-import-meta) - - [`acorn-private-methods`](https://github.com/acornjs/acorn-private-methods): parse [private methods, getters and setters proposal](https://github.com/tc39/proposal-private-methods)n diff --git a/deps/acorn/acorn/bin/acorn b/deps/acorn/acorn/bin/acorn index cf7df46890f..3ef3c124b08 100755 --- a/deps/acorn/acorn/bin/acorn +++ b/deps/acorn/acorn/bin/acorn @@ -1,4 +1,4 @@ #!/usr/bin/env node -'use strict'; +"use strict" -require('../dist/bin.js'); +require("../dist/bin.js") diff --git a/deps/acorn/acorn/dist/acorn.d.ts b/deps/acorn/acorn/dist/acorn.d.ts index 861b357fea3..140f6ed1285 100644 --- a/deps/acorn/acorn/dist/acorn.d.ts +++ b/deps/acorn/acorn/dist/acorn.d.ts @@ -11,8 +11,10 @@ declare namespace acorn { [Symbol.iterator](): Iterator } + type ecmaVersion = 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 'latest' + interface Options { - ecmaVersion: 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 'latest' + ecmaVersion: ecmaVersion sourceType?: 'script' | 'module' onInsertedSemicolon?: (lastTokEnd: number, lastTokEndLoc?: Position) => void onTrailingComma?: (lastTokEnd: number, lastTokEndLoc?: Position) => void @@ -36,8 +38,41 @@ declare namespace acorn { } class Parser { + // state.js + lineStart: number; + options: Options; + curLine: number; + start: number; + end: number; + input: string; + type: TokenType; + + // state.js constructor(options: Options, input: string, startPos?: number) parse(this: Parser): Node + + // tokenize.js + next(): void; + nextToken(): void; + + // statement.js + parseTopLevel(node: Node): Node; + + // node.js + finishNode(node: Node, type: string): Node; + finishNodeAt(node: Node, type: string, pos: number, loc: Position): Node; + + // location.js + raise(pos: number, message: string) : void; + raiseRecoverable?(pos: number, message: string) : void; + + // parseutils.js + unexpected(pos: number) : void; + + // index.js + static acorn: typeof acorn; + + // state.js static parse(this: typeof Parser, input: string, options: Options): Node static parseExpressionAt(this: typeof Parser, input: string, pos: number, options: Options): Node static tokenizer(this: typeof Parser, input: string, options: Options): { @@ -102,8 +137,10 @@ declare namespace acorn { colon: TokenType dot: TokenType question: TokenType + questionDot: TokenType arrow: TokenType template: TokenType + invalidTemplate: TokenType ellipsis: TokenType backQuote: TokenType dollarBraceL: TokenType @@ -124,6 +161,7 @@ declare namespace acorn { star: TokenType slash: TokenType starstar: TokenType + coalesce: TokenType _break: TokenType _case: TokenType _catch: TokenType diff --git a/deps/acorn/acorn/dist/acorn.js b/deps/acorn/acorn/dist/acorn.js index 5d9b521ac32..8e8b225b0b3 100644 --- a/deps/acorn/acorn/dist/acorn.js +++ b/deps/acorn/acorn/dist/acorn.js @@ -4,6 +4,20 @@ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.acorn = {})); })(this, (function (exports) { 'use strict'; + // This file was generated. Do not modify manually! + var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 357, 0, 62, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; + + // This file was generated. Do not modify manually! + var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1070, 4050, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 46, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 482, 44, 11, 6, 17, 0, 322, 29, 19, 43, 1269, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4152, 8, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938]; + + // This file was generated. Do not modify manually! + var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; + + // This file was generated. Do not modify manually! + var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; + + // These are a run-length and offset encoded representation of the + // Reserved word lists for various dialects of the language var reservedWords = { @@ -28,31 +42,9 @@ // ## Character categories - // Big ugly regular expressions that match characters in the - // whitespace, identifier, and identifier-start categories. These - // are only applied when a character is found to actually have a - // code point above 128. - // Generated by `bin/generate-identifier-regex.js`. - var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08c7\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; - var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf\u1ac0\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; - var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); - nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; - - // These are a run-length and offset encoded representation of the - // >0xffff code points that are a valid part of identifiers. The - // offset starts at 0x10000, and each pair of numbers represents an - // offset to the next range, and then a size of the range. They were - // generated by bin/generate-identifier-regex.js - - // eslint-disable-next-line comma-spacing - var astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,107,20,28,22,13,52,76,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8952,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938]; - - // eslint-disable-next-line comma-spacing - var astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239]; - // This has a complexity linear to the value of the code. The // assumption is that looking up astral identifier characters is // rare. @@ -256,6 +248,17 @@ return code === 10 || code === 13 || code === 0x2028 || code === 0x2029 } + function nextLineBreak(code, from, end) { + if ( end === void 0 ) end = code.length; + + for (var i = from; i < end; i++) { + var next = code.charCodeAt(i); + if (isNewLine(next)) + { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 } + } + return -1 + } + var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/; var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g; @@ -264,11 +267,9 @@ var hasOwnProperty = ref.hasOwnProperty; var toString = ref.toString; - // Checks if an object has a property. - - function has(obj, propName) { - return hasOwnProperty.call(obj, propName) - } + var hasOwn = Object.hasOwn || (function (obj, propName) { return ( + hasOwnProperty.call(obj, propName) + ); }); var isArray = Array.isArray || (function (obj) { return ( toString.call(obj) === "[object Array]" @@ -278,6 +279,15 @@ return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$") } + function codePointToString(code) { + // UTF-16 Decoding + if (code <= 0xFFFF) { return String.fromCharCode(code) } + code -= 0x10000; + return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00) + } + + var loneSurrogate = /(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/; + // These are used when `options.locations` is on, for the // `startLoc` and `endLoc` properties. @@ -304,14 +314,10 @@ function getLineInfo(input, offset) { for (var line = 1, cur = 0;;) { - lineBreakG.lastIndex = cur; - var match = lineBreakG.exec(input); - if (match && match.index < offset) { - ++line; - cur = match.index + match[0].length; - } else { - return new Position(line, offset - cur) - } + var nextBreak = nextLineBreak(input, cur, offset); + if (nextBreak < 0) { return new Position(line, offset - cur) } + ++line; + cur = nextBreak; } } @@ -321,10 +327,10 @@ var defaultOptions = { // `ecmaVersion` indicates the ECMAScript version to parse. Must be // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10 - // (2019), 11 (2020), 12 (2021), 13 (2022), or `"latest"` (the - // latest version the library supports). This influences support - // for strict mode, the set of reserved words, and support for - // new syntax features. + // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `"latest"` + // (the latest version the library supports). This influences + // support for strict mode, the set of reserved words, and support + // for new syntax features. ecmaVersion: null, // `sourceType` indicates the mode the code should be parsed in. // Can be either `"script"` or `"module"`. This influences global @@ -358,8 +364,9 @@ // When enabled, super identifiers are not constrained to // appearing in methods and do not raise an error when they appear elsewhere. allowSuperOutsideMethod: null, - // When enabled, hashbang directive in the beginning of file - // is allowed and treated as a line comment. + // When enabled, hashbang directive in the beginning of file is + // allowed and treated as a line comment. Enabled by default when + // `ecmaVersion` >= 2023. allowHashBang: false, // When `locations` is on, `loc` properties holding objects with // `start` and `end` properties in `{line, column}` form (with @@ -417,7 +424,7 @@ var options = {}; for (var opt in defaultOptions) - { options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]; } + { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; } if (options.ecmaVersion === "latest") { options.ecmaVersion = 1e8; @@ -434,6 +441,9 @@ if (options.allowReserved == null) { options.allowReserved = options.ecmaVersion < 5; } + if (opts.allowHashBang == null) + { options.allowHashBang = options.ecmaVersion >= 14; } + if (isArray(options.onToken)) { var tokens = options.onToken; options.onToken = function (token) { return tokens.push(token); }; @@ -647,6 +657,7 @@ var literal = /^(?:'((?:\\.|[^'\\])*?)'|"((?:\\.|[^"\\])*?)")/; pp$9.strictDirective = function(start) { + if (this.options.ecmaVersion < 5) { return false } for (;;) { // Try to find string literal. skipWhiteSpace.lastIndex = start; @@ -749,21 +760,21 @@ this.raise(pos != null ? pos : this.start, "Unexpected token"); }; - function DestructuringErrors() { + var DestructuringErrors = function DestructuringErrors() { this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = this.doubleProto = -1; - } + }; pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) { if (!refDestructuringErrors) { return } if (refDestructuringErrors.trailingComma > -1) { this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); } var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind; - if (parens > -1) { this.raiseRecoverable(parens, "Parenthesized pattern"); } + if (parens > -1) { this.raiseRecoverable(parens, isAssign ? "Assigning to rvalue" : "Parenthesized pattern"); } }; pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) { @@ -1583,7 +1594,7 @@ var parent = len === 0 ? null : this.privateNameStack[len - 1]; for (var i = 0; i < used.length; ++i) { var id = used[i]; - if (!has(declared, id.name)) { + if (!hasOwn(declared, id.name)) { if (parent) { parent.used.push(id); } else { @@ -1636,8 +1647,8 @@ if (this.eat(types$1.star)) { if (this.options.ecmaVersion >= 11) { if (this.eatContextual("as")) { - node.exported = this.parseIdent(true); - this.checkExport(exports, node.exported.name, this.lastTokStart); + node.exported = this.parseModuleExportName(); + this.checkExport(exports, node.exported, this.lastTokStart); } else { node.exported = null; } @@ -1671,7 +1682,7 @@ if (node.declaration.type === "VariableDeclaration") { this.checkVariableExport(exports, node.declaration.declarations); } else - { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); } + { this.checkExport(exports, node.declaration.id, node.declaration.id.start); } node.specifiers = []; node.source = null; } else { // export { x, y as z } [from '...'] @@ -1688,6 +1699,10 @@ this.checkUnreserved(spec.local); // check if export is defined this.checkLocalExport(spec.local); + + if (spec.local.type === "Literal") { + this.raise(spec.local.start, "A string literal cannot be used as an exported binding without `from`."); + } } node.source = null; @@ -1699,7 +1714,9 @@ pp$8.checkExport = function(exports, name, pos) { if (!exports) { return } - if (has(exports, name)) + if (typeof name !== "string") + { name = name.type === "Identifier" ? name.name : name.value; } + if (hasOwn(exports, name)) { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); } exports[name] = true; }; @@ -1707,7 +1724,7 @@ pp$8.checkPatternExport = function(exports, pat) { var type = pat.type; if (type === "Identifier") - { this.checkExport(exports, pat.name, pat.start); } + { this.checkExport(exports, pat, pat.start); } else if (type === "ObjectPattern") { for (var i = 0, list = pat.properties; i < list.length; i += 1) { @@ -1763,9 +1780,13 @@ } else { first = false; } var node = this.startNode(); - node.local = this.parseIdent(true); - node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local; - this.checkExport(exports, node.exported.name, node.exported.start); + node.local = this.parseModuleExportName(); + node.exported = this.eatContextual("as") ? this.parseModuleExportName() : node.local; + this.checkExport( + exports, + node.exported, + node.exported.start + ); nodes.push(this.finishNode(node, "ExportSpecifier")); } return nodes @@ -1817,7 +1838,7 @@ } else { first = false; } var node$2 = this.startNode(); - node$2.imported = this.parseIdent(true); + node$2.imported = this.parseModuleExportName(); if (this.eatContextual("as")) { node$2.local = this.parseIdent(); } else { @@ -1830,6 +1851,17 @@ return nodes }; + pp$8.parseModuleExportName = function() { + if (this.options.ecmaVersion >= 13 && this.type === types$1.string) { + var stringLiteral = this.parseLiteral(this.value); + if (loneSurrogate.test(stringLiteral.value)) { + this.raise(stringLiteral.start, "An export name cannot include a lone surrogate."); + } + return stringLiteral + } + return this.parseIdent(true) + }; + // Set `ExpressionStatement#directive` property for directive prologues. pp$8.adaptDirectivePrologue = function(statements) { for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) { @@ -1838,6 +1870,7 @@ }; pp$8.isDirectiveCandidate = function(statement) { return ( + this.options.ecmaVersion >= 5 && statement.type === "ExpressionStatement" && statement.expression.type === "Literal" && typeof statement.expression.value === "string" && @@ -2103,7 +2136,7 @@ if (bindingType === BIND_LEXICAL && expr.name === "let") { this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name"); } if (checkClashes) { - if (has(checkClashes, expr.name)) + if (hasOwn(checkClashes, expr.name)) { this.raiseRecoverable(expr.start, "Argument name clash"); } checkClashes[expr.name] = true; } @@ -2248,7 +2281,8 @@ { this.exprAllowed = type.beforeExpr; } }; - // Used to handle egde case when token context could not be inferred correctly in tokenize phase + // Used to handle egde cases when token context could not be inferred correctly during tokenization phase + pp$6.overrideContext = function(tokenCtx) { if (this.curContext() !== tokenCtx) { this.context[this.context.length - 1] = tokenCtx; @@ -3064,15 +3098,6 @@ } return this.finishNode(prop, "RestElement") } - // To disallow parenthesized identifier via `this.toAssignable()`. - if (this.type === types$1.parenL && refDestructuringErrors) { - if (refDestructuringErrors.parenthesizedAssign < 0) { - refDestructuringErrors.parenthesizedAssign = this.start; - } - if (refDestructuringErrors.parenthesizedBind < 0) { - refDestructuringErrors.parenthesizedBind = this.start; - } - } // Parse argument. prop.argument = this.parseMaybeAssign(false, refDestructuringErrors); // To disallow trailing comma via `this.toAssignable()`. @@ -3598,26 +3623,30 @@ var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic"; var ecma11BinaryProperties = ecma10BinaryProperties; var ecma12BinaryProperties = ecma11BinaryProperties + " EBase EComp EMod EPres ExtPict"; + var ecma13BinaryProperties = ecma12BinaryProperties; var unicodeBinaryProperties = { 9: ecma9BinaryProperties, 10: ecma10BinaryProperties, 11: ecma11BinaryProperties, - 12: ecma12BinaryProperties + 12: ecma12BinaryProperties, + 13: ecma13BinaryProperties }; // #table-unicode-general-category-values var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu"; // #table-unicode-script-values - var ecma9ScriptValues = "Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb"; + var ecma9ScriptValues = "Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb"; var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd"; var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho"; var ecma12ScriptValues = ecma11ScriptValues + " Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi"; + var ecma13ScriptValues = ecma12ScriptValues + " Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith"; var unicodeScriptValues = { 9: ecma9ScriptValues, 10: ecma10ScriptValues, 11: ecma11ScriptValues, - 12: ecma12ScriptValues + 12: ecma12ScriptValues, + 13: ecma13ScriptValues }; var data = {}; @@ -3635,17 +3664,19 @@ d.nonBinary.sc = d.nonBinary.Script; d.nonBinary.scx = d.nonBinary.Script_Extensions; } - buildUnicodeData(9); - buildUnicodeData(10); - buildUnicodeData(11); - buildUnicodeData(12); + + for (var i = 0, list = [9, 10, 11, 12, 13]; i < list.length; i += 1) { + var ecmaVersion = list[i]; + + buildUnicodeData(ecmaVersion); + } var pp$1 = Parser.prototype; var RegExpValidationState = function RegExpValidationState(parser) { this.parser = parser; this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "") + (parser.options.ecmaVersion >= 13 ? "d" : ""); - this.unicodeProperties = data[parser.options.ecmaVersion >= 12 ? 12 : parser.options.ecmaVersion]; + this.unicodeProperties = data[parser.options.ecmaVersion >= 13 ? 13 : parser.options.ecmaVersion]; this.source = ""; this.flags = ""; this.start = 0; @@ -3736,12 +3767,6 @@ return false }; - function codePointToString$1(ch) { - if (ch <= 0xFFFF) { return String.fromCharCode(ch) } - ch -= 0x10000; - return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00) - } - /** * Validate the flags part of a given RegExpLiteral. * @@ -4106,9 +4131,9 @@ pp$1.regexp_eatRegExpIdentifierName = function(state) { state.lastStringValue = ""; if (this.regexp_eatRegExpIdentifierStart(state)) { - state.lastStringValue += codePointToString$1(state.lastIntValue); + state.lastStringValue += codePointToString(state.lastIntValue); while (this.regexp_eatRegExpIdentifierPart(state)) { - state.lastStringValue += codePointToString$1(state.lastIntValue); + state.lastStringValue += codePointToString(state.lastIntValue); } return true } @@ -4444,7 +4469,7 @@ return false }; pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) { - if (!has(state.unicodeProperties.nonBinary, name)) + if (!hasOwn(state.unicodeProperties.nonBinary, name)) { state.raise("Invalid property name"); } if (!state.unicodeProperties.nonBinary[name].test(value)) { state.raise("Invalid property value"); } @@ -4460,7 +4485,7 @@ var ch = 0; state.lastStringValue = ""; while (isUnicodePropertyNameCharacter(ch = state.current())) { - state.lastStringValue += codePointToString$1(ch); + state.lastStringValue += codePointToString(ch); state.advance(); } return state.lastStringValue !== "" @@ -4475,7 +4500,7 @@ var ch = 0; state.lastStringValue = ""; while (isUnicodePropertyValueCharacter(ch = state.current())) { - state.lastStringValue += codePointToString$1(ch); + state.lastStringValue += codePointToString(ch); state.advance(); } return state.lastStringValue !== "" @@ -4796,11 +4821,9 @@ if (end === -1) { this.raise(this.pos - 2, "Unterminated comment"); } this.pos = end + 2; if (this.options.locations) { - lineBreakG.lastIndex = start; - var match; - while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) { + for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) { ++this.curLine; - this.lineStart = match.index + match[0].length; + pos = this.lineStart = nextBreak; } } if (this.options.onComment) @@ -5260,13 +5283,6 @@ return code }; - function codePointToString(code) { - // UTF-16 Decoding - if (code <= 0xFFFF) { return String.fromCharCode(code) } - code -= 0x10000; - return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00) - } - pp.readString = function(quote) { var out = "", chunkStart = ++this.pos; for (;;) { @@ -5511,7 +5527,7 @@ // Acorn is a tiny, fast JavaScript parser written in JavaScript. - var version = "8.6.0"; + var version = "8.8.0"; Parser.acorn = { Parser: Parser, diff --git a/deps/acorn/acorn/dist/acorn.mjs b/deps/acorn/acorn/dist/acorn.mjs index df5b26e5dd0..5ae045a7f2a 100644 --- a/deps/acorn/acorn/dist/acorn.mjs +++ b/deps/acorn/acorn/dist/acorn.mjs @@ -1,3 +1,17 @@ +// This file was generated. Do not modify manually! +var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 357, 0, 62, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; + +// This file was generated. Do not modify manually! +var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1070, 4050, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 46, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 482, 44, 11, 6, 17, 0, 322, 29, 19, 43, 1269, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4152, 8, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938]; + +// This file was generated. Do not modify manually! +var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; + +// This file was generated. Do not modify manually! +var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; + +// These are a run-length and offset encoded representation of the + // Reserved word lists for various dialects of the language var reservedWords = { @@ -22,31 +36,9 @@ var keywordRelationalOperator = /^in(stanceof)?$/; // ## Character categories -// Big ugly regular expressions that match characters in the -// whitespace, identifier, and identifier-start categories. These -// are only applied when a character is found to actually have a -// code point above 128. -// Generated by `bin/generate-identifier-regex.js`. -var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08c7\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; -var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf\u1ac0\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; - var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); -nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; - -// These are a run-length and offset encoded representation of the -// >0xffff code points that are a valid part of identifiers. The -// offset starts at 0x10000, and each pair of numbers represents an -// offset to the next range, and then a size of the range. They were -// generated by bin/generate-identifier-regex.js - -// eslint-disable-next-line comma-spacing -var astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,107,20,28,22,13,52,76,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8952,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938]; - -// eslint-disable-next-line comma-spacing -var astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239]; - // This has a complexity linear to the value of the code. The // assumption is that looking up astral identifier characters is // rare. @@ -250,6 +242,17 @@ function isNewLine(code) { return code === 10 || code === 13 || code === 0x2028 || code === 0x2029 } +function nextLineBreak(code, from, end) { + if ( end === void 0 ) end = code.length; + + for (var i = from; i < end; i++) { + var next = code.charCodeAt(i); + if (isNewLine(next)) + { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 } + } + return -1 +} + var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/; var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g; @@ -258,11 +261,9 @@ var ref = Object.prototype; var hasOwnProperty = ref.hasOwnProperty; var toString = ref.toString; -// Checks if an object has a property. - -function has(obj, propName) { - return hasOwnProperty.call(obj, propName) -} +var hasOwn = Object.hasOwn || (function (obj, propName) { return ( + hasOwnProperty.call(obj, propName) +); }); var isArray = Array.isArray || (function (obj) { return ( toString.call(obj) === "[object Array]" @@ -272,6 +273,15 @@ function wordsRegexp(words) { return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$") } +function codePointToString(code) { + // UTF-16 Decoding + if (code <= 0xFFFF) { return String.fromCharCode(code) } + code -= 0x10000; + return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00) +} + +var loneSurrogate = /(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/; + // These are used when `options.locations` is on, for the // `startLoc` and `endLoc` properties. @@ -298,14 +308,10 @@ var SourceLocation = function SourceLocation(p, start, end) { function getLineInfo(input, offset) { for (var line = 1, cur = 0;;) { - lineBreakG.lastIndex = cur; - var match = lineBreakG.exec(input); - if (match && match.index < offset) { - ++line; - cur = match.index + match[0].length; - } else { - return new Position(line, offset - cur) - } + var nextBreak = nextLineBreak(input, cur, offset); + if (nextBreak < 0) { return new Position(line, offset - cur) } + ++line; + cur = nextBreak; } } @@ -315,10 +321,10 @@ function getLineInfo(input, offset) { var defaultOptions = { // `ecmaVersion` indicates the ECMAScript version to parse. Must be // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10 - // (2019), 11 (2020), 12 (2021), 13 (2022), or `"latest"` (the - // latest version the library supports). This influences support - // for strict mode, the set of reserved words, and support for - // new syntax features. + // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `"latest"` + // (the latest version the library supports). This influences + // support for strict mode, the set of reserved words, and support + // for new syntax features. ecmaVersion: null, // `sourceType` indicates the mode the code should be parsed in. // Can be either `"script"` or `"module"`. This influences global @@ -352,8 +358,9 @@ var defaultOptions = { // When enabled, super identifiers are not constrained to // appearing in methods and do not raise an error when they appear elsewhere. allowSuperOutsideMethod: null, - // When enabled, hashbang directive in the beginning of file - // is allowed and treated as a line comment. + // When enabled, hashbang directive in the beginning of file is + // allowed and treated as a line comment. Enabled by default when + // `ecmaVersion` >= 2023. allowHashBang: false, // When `locations` is on, `loc` properties holding objects with // `start` and `end` properties in `{line, column}` form (with @@ -411,7 +418,7 @@ function getOptions(opts) { var options = {}; for (var opt in defaultOptions) - { options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]; } + { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; } if (options.ecmaVersion === "latest") { options.ecmaVersion = 1e8; @@ -428,6 +435,9 @@ function getOptions(opts) { if (options.allowReserved == null) { options.allowReserved = options.ecmaVersion < 5; } + if (opts.allowHashBang == null) + { options.allowHashBang = options.ecmaVersion >= 14; } + if (isArray(options.onToken)) { var tokens = options.onToken; options.onToken = function (token) { return tokens.push(token); }; @@ -641,6 +651,7 @@ var pp$9 = Parser.prototype; var literal = /^(?:'((?:\\.|[^'\\])*?)'|"((?:\\.|[^"\\])*?)")/; pp$9.strictDirective = function(start) { + if (this.options.ecmaVersion < 5) { return false } for (;;) { // Try to find string literal. skipWhiteSpace.lastIndex = start; @@ -743,21 +754,21 @@ pp$9.unexpected = function(pos) { this.raise(pos != null ? pos : this.start, "Unexpected token"); }; -function DestructuringErrors() { +var DestructuringErrors = function DestructuringErrors() { this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = this.doubleProto = -1; -} +}; pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) { if (!refDestructuringErrors) { return } if (refDestructuringErrors.trailingComma > -1) { this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); } var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind; - if (parens > -1) { this.raiseRecoverable(parens, "Parenthesized pattern"); } + if (parens > -1) { this.raiseRecoverable(parens, isAssign ? "Assigning to rvalue" : "Parenthesized pattern"); } }; pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) { @@ -1577,7 +1588,7 @@ pp$8.exitClassBody = function() { var parent = len === 0 ? null : this.privateNameStack[len - 1]; for (var i = 0; i < used.length; ++i) { var id = used[i]; - if (!has(declared, id.name)) { + if (!hasOwn(declared, id.name)) { if (parent) { parent.used.push(id); } else { @@ -1630,8 +1641,8 @@ pp$8.parseExport = function(node, exports) { if (this.eat(types$1.star)) { if (this.options.ecmaVersion >= 11) { if (this.eatContextual("as")) { - node.exported = this.parseIdent(true); - this.checkExport(exports, node.exported.name, this.lastTokStart); + node.exported = this.parseModuleExportName(); + this.checkExport(exports, node.exported, this.lastTokStart); } else { node.exported = null; } @@ -1665,7 +1676,7 @@ pp$8.parseExport = function(node, exports) { if (node.declaration.type === "VariableDeclaration") { this.checkVariableExport(exports, node.declaration.declarations); } else - { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); } + { this.checkExport(exports, node.declaration.id, node.declaration.id.start); } node.specifiers = []; node.source = null; } else { // export { x, y as z } [from '...'] @@ -1682,6 +1693,10 @@ pp$8.parseExport = function(node, exports) { this.checkUnreserved(spec.local); // check if export is defined this.checkLocalExport(spec.local); + + if (spec.local.type === "Literal") { + this.raise(spec.local.start, "A string literal cannot be used as an exported binding without `from`."); + } } node.source = null; @@ -1693,7 +1708,9 @@ pp$8.parseExport = function(node, exports) { pp$8.checkExport = function(exports, name, pos) { if (!exports) { return } - if (has(exports, name)) + if (typeof name !== "string") + { name = name.type === "Identifier" ? name.name : name.value; } + if (hasOwn(exports, name)) { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); } exports[name] = true; }; @@ -1701,7 +1718,7 @@ pp$8.checkExport = function(exports, name, pos) { pp$8.checkPatternExport = function(exports, pat) { var type = pat.type; if (type === "Identifier") - { this.checkExport(exports, pat.name, pat.start); } + { this.checkExport(exports, pat, pat.start); } else if (type === "ObjectPattern") { for (var i = 0, list = pat.properties; i < list.length; i += 1) { @@ -1757,9 +1774,13 @@ pp$8.parseExportSpecifiers = function(exports) { } else { first = false; } var node = this.startNode(); - node.local = this.parseIdent(true); - node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local; - this.checkExport(exports, node.exported.name, node.exported.start); + node.local = this.parseModuleExportName(); + node.exported = this.eatContextual("as") ? this.parseModuleExportName() : node.local; + this.checkExport( + exports, + node.exported, + node.exported.start + ); nodes.push(this.finishNode(node, "ExportSpecifier")); } return nodes @@ -1811,7 +1832,7 @@ pp$8.parseImportSpecifiers = function() { } else { first = false; } var node$2 = this.startNode(); - node$2.imported = this.parseIdent(true); + node$2.imported = this.parseModuleExportName(); if (this.eatContextual("as")) { node$2.local = this.parseIdent(); } else { @@ -1824,6 +1845,17 @@ pp$8.parseImportSpecifiers = function() { return nodes }; +pp$8.parseModuleExportName = function() { + if (this.options.ecmaVersion >= 13 && this.type === types$1.string) { + var stringLiteral = this.parseLiteral(this.value); + if (loneSurrogate.test(stringLiteral.value)) { + this.raise(stringLiteral.start, "An export name cannot include a lone surrogate."); + } + return stringLiteral + } + return this.parseIdent(true) +}; + // Set `ExpressionStatement#directive` property for directive prologues. pp$8.adaptDirectivePrologue = function(statements) { for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) { @@ -1832,6 +1864,7 @@ pp$8.adaptDirectivePrologue = function(statements) { }; pp$8.isDirectiveCandidate = function(statement) { return ( + this.options.ecmaVersion >= 5 && statement.type === "ExpressionStatement" && statement.expression.type === "Literal" && typeof statement.expression.value === "string" && @@ -2097,7 +2130,7 @@ pp$7.checkLValSimple = function(expr, bindingType, checkClashes) { if (bindingType === BIND_LEXICAL && expr.name === "let") { this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name"); } if (checkClashes) { - if (has(checkClashes, expr.name)) + if (hasOwn(checkClashes, expr.name)) { this.raiseRecoverable(expr.start, "Argument name clash"); } checkClashes[expr.name] = true; } @@ -2242,7 +2275,8 @@ pp$6.updateContext = function(prevType) { { this.exprAllowed = type.beforeExpr; } }; -// Used to handle egde case when token context could not be inferred correctly in tokenize phase +// Used to handle egde cases when token context could not be inferred correctly during tokenization phase + pp$6.overrideContext = function(tokenCtx) { if (this.curContext() !== tokenCtx) { this.context[this.context.length - 1] = tokenCtx; @@ -3058,15 +3092,6 @@ pp$5.parseProperty = function(isPattern, refDestructuringErrors) { } return this.finishNode(prop, "RestElement") } - // To disallow parenthesized identifier via `this.toAssignable()`. - if (this.type === types$1.parenL && refDestructuringErrors) { - if (refDestructuringErrors.parenthesizedAssign < 0) { - refDestructuringErrors.parenthesizedAssign = this.start; - } - if (refDestructuringErrors.parenthesizedBind < 0) { - refDestructuringErrors.parenthesizedBind = this.start; - } - } // Parse argument. prop.argument = this.parseMaybeAssign(false, refDestructuringErrors); // To disallow trailing comma via `this.toAssignable()`. @@ -3592,26 +3617,30 @@ var ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Ass var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic"; var ecma11BinaryProperties = ecma10BinaryProperties; var ecma12BinaryProperties = ecma11BinaryProperties + " EBase EComp EMod EPres ExtPict"; +var ecma13BinaryProperties = ecma12BinaryProperties; var unicodeBinaryProperties = { 9: ecma9BinaryProperties, 10: ecma10BinaryProperties, 11: ecma11BinaryProperties, - 12: ecma12BinaryProperties + 12: ecma12BinaryProperties, + 13: ecma13BinaryProperties }; // #table-unicode-general-category-values var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu"; // #table-unicode-script-values -var ecma9ScriptValues = "Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb"; +var ecma9ScriptValues = "Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb"; var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd"; var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho"; var ecma12ScriptValues = ecma11ScriptValues + " Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi"; +var ecma13ScriptValues = ecma12ScriptValues + " Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith"; var unicodeScriptValues = { 9: ecma9ScriptValues, 10: ecma10ScriptValues, 11: ecma11ScriptValues, - 12: ecma12ScriptValues + 12: ecma12ScriptValues, + 13: ecma13ScriptValues }; var data = {}; @@ -3629,17 +3658,19 @@ function buildUnicodeData(ecmaVersion) { d.nonBinary.sc = d.nonBinary.Script; d.nonBinary.scx = d.nonBinary.Script_Extensions; } -buildUnicodeData(9); -buildUnicodeData(10); -buildUnicodeData(11); -buildUnicodeData(12); + +for (var i = 0, list = [9, 10, 11, 12, 13]; i < list.length; i += 1) { + var ecmaVersion = list[i]; + + buildUnicodeData(ecmaVersion); +} var pp$1 = Parser.prototype; var RegExpValidationState = function RegExpValidationState(parser) { this.parser = parser; this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "") + (parser.options.ecmaVersion >= 13 ? "d" : ""); - this.unicodeProperties = data[parser.options.ecmaVersion >= 12 ? 12 : parser.options.ecmaVersion]; + this.unicodeProperties = data[parser.options.ecmaVersion >= 13 ? 13 : parser.options.ecmaVersion]; this.source = ""; this.flags = ""; this.start = 0; @@ -3730,12 +3761,6 @@ RegExpValidationState.prototype.eat = function eat (ch, forceU) { return false }; -function codePointToString$1(ch) { - if (ch <= 0xFFFF) { return String.fromCharCode(ch) } - ch -= 0x10000; - return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00) -} - /** * Validate the flags part of a given RegExpLiteral. * @@ -4100,9 +4125,9 @@ pp$1.regexp_eatGroupName = function(state) { pp$1.regexp_eatRegExpIdentifierName = function(state) { state.lastStringValue = ""; if (this.regexp_eatRegExpIdentifierStart(state)) { - state.lastStringValue += codePointToString$1(state.lastIntValue); + state.lastStringValue += codePointToString(state.lastIntValue); while (this.regexp_eatRegExpIdentifierPart(state)) { - state.lastStringValue += codePointToString$1(state.lastIntValue); + state.lastStringValue += codePointToString(state.lastIntValue); } return true } @@ -4438,7 +4463,7 @@ pp$1.regexp_eatUnicodePropertyValueExpression = function(state) { return false }; pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) { - if (!has(state.unicodeProperties.nonBinary, name)) + if (!hasOwn(state.unicodeProperties.nonBinary, name)) { state.raise("Invalid property name"); } if (!state.unicodeProperties.nonBinary[name].test(value)) { state.raise("Invalid property value"); } @@ -4454,7 +4479,7 @@ pp$1.regexp_eatUnicodePropertyName = function(state) { var ch = 0; state.lastStringValue = ""; while (isUnicodePropertyNameCharacter(ch = state.current())) { - state.lastStringValue += codePointToString$1(ch); + state.lastStringValue += codePointToString(ch); state.advance(); } return state.lastStringValue !== "" @@ -4469,7 +4494,7 @@ pp$1.regexp_eatUnicodePropertyValue = function(state) { var ch = 0; state.lastStringValue = ""; while (isUnicodePropertyValueCharacter(ch = state.current())) { - state.lastStringValue += codePointToString$1(ch); + state.lastStringValue += codePointToString(ch); state.advance(); } return state.lastStringValue !== "" @@ -4790,11 +4815,9 @@ pp.skipBlockComment = function() { if (end === -1) { this.raise(this.pos - 2, "Unterminated comment"); } this.pos = end + 2; if (this.options.locations) { - lineBreakG.lastIndex = start; - var match; - while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) { + for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) { ++this.curLine; - this.lineStart = match.index + match[0].length; + pos = this.lineStart = nextBreak; } } if (this.options.onComment) @@ -5254,13 +5277,6 @@ pp.readCodePoint = function() { return code }; -function codePointToString(code) { - // UTF-16 Decoding - if (code <= 0xFFFF) { return String.fromCharCode(code) } - code -= 0x10000; - return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00) -} - pp.readString = function(quote) { var out = "", chunkStart = ++this.pos; for (;;) { @@ -5505,7 +5521,7 @@ pp.readWord = function() { // Acorn is a tiny, fast JavaScript parser written in JavaScript. -var version = "8.6.0"; +var version = "8.8.0"; Parser.acorn = { Parser: Parser, diff --git a/deps/acorn/acorn/dist/bin.js b/deps/acorn/acorn/dist/bin.js index 675cab9ac89..8e645009450 100644 --- a/deps/acorn/acorn/dist/bin.js +++ b/deps/acorn/acorn/dist/bin.js @@ -30,7 +30,7 @@ var options = {}; function help(status) { var print = (status === 0) ? console.log : console.error; print("usage: " + path.basename(process.argv[1]) + " [--ecma3|--ecma5|--ecma6|--ecma7|--ecma8|--ecma9|...|--ecma2015|--ecma2016|--ecma2017|--ecma2018|...]"); - print(" [--tokenize] [--locations] [---allow-hash-bang] [--allow-await-outside-function] [--compact] [--silent] [--module] [--help] [--] [...]"); + print(" [--tokenize] [--locations] [--allow-hash-bang] [--allow-await-outside-function] [--compact] [--silent] [--module] [--help] [--] [...]"); process.exit(status); } diff --git a/deps/acorn/acorn/package.json b/deps/acorn/acorn/package.json index e242a235e00..896061c412f 100644 --- a/deps/acorn/acorn/package.json +++ b/deps/acorn/acorn/package.json @@ -16,8 +16,10 @@ ], "./package.json": "./package.json" }, - "version": "8.6.0", - "engines": {"node": ">=0.4.0"}, + "version": "8.8.0", + "engines": { + "node": ">=0.4.0" + }, "maintainers": [ { "name": "Marijn Haverbeke", @@ -40,7 +42,9 @@ }, "license": "MIT", "scripts": { - "prepare": "cd ..; npm run build:main && npm run build:bin" + "prepare": "cd ..; npm run build:main" }, - "bin": {"acorn": "./bin/acorn"} + "bin": { + "acorn": "./bin/acorn" + } } diff --git a/deps/base64/README.md b/deps/base64/README.md new file mode 100644 index 00000000000..330d979e918 --- /dev/null +++ b/deps/base64/README.md @@ -0,0 +1,14 @@ +# base64 + +This project boosts base64 encoding/decoding performance by utilizing SIMD +operations where possible. + +The source is pulled from: https://github.com/aklomp/base64 + +Active development occurs in the default branch (currently named `master`). + +## Updating + +```sh +$ git clone https://github.com/aklomp/base64 +``` diff --git a/deps/base64/base64.gyp b/deps/base64/base64.gyp new file mode 100644 index 00000000000..be68561708f --- /dev/null +++ b/deps/base64/base64.gyp @@ -0,0 +1,191 @@ +{ + 'variables': { + 'arm_fpu%': '', + 'target_arch%': '', + }, + 'targets': [ + { + 'target_name': 'base64', + 'type': 'static_library', + 'include_dirs': [ 'base64/include', 'base64/lib' ], + 'direct_dependent_settings': { + 'include_dirs': [ 'base64/include' ], + 'defines': [ 'BASE64_STATIC_DEFINE' ], + }, + 'defines': [ 'BASE64_STATIC_DEFINE' ], + 'sources': [ + 'base64/include/libbase64.h', + 'base64/lib/arch/generic/codec.c', + 'base64/lib/tables/tables.c', + 'base64/lib/codec_choose.c', + 'base64/lib/codecs.h', + 'base64/lib/lib.c', + ], + + 'conditions': [ + [ 'arm_fpu=="neon" and target_arch=="arm"', { + 'defines': [ 'HAVE_NEON32=1' ], + 'dependencies': [ 'base64_neon32' ], + }, { + 'sources': [ 'base64/lib/arch/neon32/codec.c' ], + }], + + # arm64 requires NEON, so it's safe to always use it + [ 'target_arch=="arm64"', { + 'defines': [ 'HAVE_NEON64=1' ], + 'dependencies': [ 'base64_neon64' ], + }, { + 'sources': [ 'base64/lib/arch/neon64/codec.c' ], + }], + + # Runtime detection will happen for x86 CPUs + [ 'target_arch in "ia32 x64 x32"', { + 'defines': [ + 'HAVE_SSSE3=1', + 'HAVE_SSE41=1', + 'HAVE_SSE42=1', + 'HAVE_AVX=1', + 'HAVE_AVX2=1', + ], + 'dependencies': [ + 'base64_ssse3', + 'base64_sse41', + 'base64_sse42', + 'base64_avx', + 'base64_avx2', + ], + }, { + 'sources': [ + 'base64/lib/arch/ssse3/codec.c', + 'base64/lib/arch/sse41/codec.c', + 'base64/lib/arch/sse42/codec.c', + 'base64/lib/arch/avx/codec.c', + 'base64/lib/arch/avx2/codec.c', + ], + }], + ], + }, + + { + 'target_name': 'base64_ssse3', + 'type': 'static_library', + 'include_dirs': [ 'base64/include', 'base64/lib' ], + 'sources': [ 'base64/lib/arch/ssse3/codec.c' ], + 'defines': [ 'BASE64_STATIC_DEFINE', 'HAVE_SSSE3=1' ], + 'conditions': [ + [ 'OS!="win"', { + 'cflags': [ '-mssse3' ], + 'xcode_settings': { + 'OTHER_CFLAGS': [ '-mssse3' ] + }, + }], + ], + }, + + { + 'target_name': 'base64_sse41', + 'type': 'static_library', + 'include_dirs': [ 'base64/include', 'base64/lib' ], + 'sources': [ 'base64/lib/arch/sse41/codec.c' ], + 'defines': [ 'BASE64_STATIC_DEFINE', 'HAVE_SSE41=1' ], + 'conditions': [ + [ 'OS!="win"', { + 'cflags': [ '-msse4.1' ], + 'xcode_settings': { + 'OTHER_CFLAGS': [ '-msse4.1' ] + }, + }], + ], + }, + + { + 'target_name': 'base64_sse42', + 'type': 'static_library', + 'include_dirs': [ 'base64/include', 'base64/lib' ], + 'sources': [ 'base64/lib/arch/sse42/codec.c' ], + 'defines': [ 'BASE64_STATIC_DEFINE', 'HAVE_SSE42=1' ], + 'conditions': [ + [ 'OS!="win"', { + 'cflags': [ '-msse4.2' ], + 'xcode_settings': { + 'OTHER_CFLAGS': [ '-msse4.2' ] + }, + }], + ], + }, + + { + 'target_name': 'base64_avx', + 'type': 'static_library', + 'include_dirs': [ 'base64/include', 'base64/lib' ], + 'sources': [ 'base64/lib/arch/avx/codec.c' ], + 'defines': [ 'BASE64_STATIC_DEFINE', 'HAVE_AVX=1' ], + 'conditions': [ + [ 'OS!="win"', { + 'cflags': [ '-mavx' ], + 'xcode_settings': { + 'OTHER_CFLAGS': [ '-mavx' ] + }, + }, { + 'msvs_settings': { + 'VCCLCompilerTool': { + 'AdditionalOptions': [ + '/arch:AVX' + ], + }, + }, + }], + ], + }, + + { + 'target_name': 'base64_avx2', + 'type': 'static_library', + 'include_dirs': [ 'base64/include', 'base64/lib' ], + 'sources': [ 'base64/lib/arch/avx2/codec.c' ], + 'defines': [ 'BASE64_STATIC_DEFINE', 'HAVE_AVX2=1' ], + 'conditions': [ + [ 'OS!="win"', { + 'cflags': [ '-mavx2' ], + 'xcode_settings': { + 'OTHER_CFLAGS': [ '-mavx2' ] + }, + }, { + 'msvs_settings': { + 'VCCLCompilerTool': { + 'AdditionalOptions': [ + '/arch:AVX2' + ], + }, + }, + }], + ], + }, + + { + 'target_name': 'base64_neon32', + 'type': 'static_library', + 'include_dirs': [ 'base64/include', 'base64/lib' ], + 'sources': [ 'base64/lib/arch/neon32/codec.c' ], + 'defines': [ 'BASE64_STATIC_DEFINE', 'HAVE_NEON32=1' ], + 'conditions': [ + [ 'OS!="win"', { + 'cflags': [ '-mfpu=neon' ], + 'xcode_settings': { + 'OTHER_CFLAGS': [ '-mfpu=neon' ] + }, + }], + ], + }, + + { + 'target_name': 'base64_neon64', + 'type': 'static_library', + 'include_dirs': [ 'base64/include', 'base64/lib' ], + 'sources': [ 'base64/lib/arch/neon64/codec.c' ], + 'defines': [ 'BASE64_STATIC_DEFINE', 'HAVE_NEON64=1' ], + # NEON is required in arm64, so no -mfpu flag is needed + } + + ] +} diff --git a/deps/base64/base64/.editorconfig b/deps/base64/base64/.editorconfig new file mode 100644 index 00000000000..f6b4d2a07c1 --- /dev/null +++ b/deps/base64/base64/.editorconfig @@ -0,0 +1,22 @@ +# https://EditorConfig.org +root = true + +[*] +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true + +indent_style = tab +tab_width = 8 +indent_size = 8 + +[CMakeLists.txt] +tab_width = 4 +indent_style = space +[*.cmake] +tab_width = 4 +indent_style = space + +[*.py] +tab_width = 4 +indent_style = space diff --git a/deps/base64/base64/.github/workflows/test.yml b/deps/base64/base64/.github/workflows/test.yml new file mode 100644 index 00000000000..68342a42442 --- /dev/null +++ b/deps/base64/base64/.github/workflows/test.yml @@ -0,0 +1,133 @@ +name: Test + +on: [push, pull_request] + +jobs: + makefile-test: + name: makefile-${{ matrix.runner }}-amd64-${{ matrix.compiler }} ${{ ((matrix.openmp == 1) && '+openmp') || '' }} + runs-on: ${{ matrix.runner }} + strategy: + fail-fast: false + matrix: + runner: ["ubuntu-18.04"] + compiler: ["gcc", "clang"] + openmp: ["0", "1"] + include: + - runner: "macos-11" + compiler: "clang" + openmp: "0" + env: + OPENMP: ${{ matrix.openmp }} + OMP_NUM_THREADS: ${{ ((matrix.openmp == 1) && '2') || '0' }} + CC: ${{ matrix.compiler }} + OBJCOPY: ${{ (startsWith(matrix.runner, 'macos') && 'echo') || 'objcopy' }} + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Run tests + run: ./test/ci/test.sh + + cmake-test: + name: cmake-${{ matrix.runner }} + runs-on: ${{ matrix.runner }} + strategy: + fail-fast: false + matrix: + runner: ["ubuntu-18.04", "macos-11", "windows-2019"] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: CMake Configure + run: > + cmake + -B out + -Werror=dev + -DBASE64_BUILD_TESTS=ON + ${{ runner.os != 'Windows' && '-DCMAKE_BUILD_TYPE=Release' || '' }} + ${{ runner.os == 'macOS' && '-DBASE64_WITH_AVX2=OFF' || '' }} + - name: CMake Build + run: cmake --build out --config Release --verbose + - name: CTest + run: ctest --no-tests=error --test-dir out -VV --build-config Release + + alpine-makefile-test: + name: makefile-alpine-amd64-gcc + runs-on: ubuntu-latest + container: + image: alpine:3.12 + env: + CC: gcc + steps: + - name: Install deps + run: apk add --update bash build-base git + - name: Checkout + uses: actions/checkout@v3 + - name: Run tests + run: ./test/ci/test.sh + + alpine-cmake-test: + name: cmake-alpine-amd64-gcc + runs-on: ubuntu-latest + container: + image: alpine:3.12 + steps: + - name: Install deps + run: apk add --update bash build-base cmake git + - name: Checkout + uses: actions/checkout@v3 + - name: CMake Configure + run: cmake -B out -Werror=dev -DBASE64_BUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release + - name: CMake Build + run: cmake --build out --config Release --verbose + - name: CTest + run: ctest --no-tests=error -VV --build-config Release + working-directory: ./out + + alpine-alt-arch-makefile-test: + name: makefile-alpine-${{matrix.arch}}-${{matrix.cc}} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + arch: [armv7, aarch64, s390x, ppc64le] + cc: [gcc, clang] + steps: + - name: Checkout + uses: actions/checkout@v3 + - uses: uraimo/run-on-arch-action@v2 + with: + arch: ${{matrix.arch}} + distro: alpine_latest + env: | + CC: ${{matrix.cc}} + install: apk add --update bash build-base cmake git ${{matrix.cc}} + run: ./test/ci/test.sh + + alpine-alt-arch-cmake-test: + name: cmake-alpine-${{matrix.arch}}-${{matrix.cc}} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + arch: [armv7, aarch64, s390x, ppc64le] + cc: [gcc, clang] + steps: + - name: Checkout + uses: actions/checkout@v3 + - uses: uraimo/run-on-arch-action@v2 + with: + arch: ${{matrix.arch}} + distro: alpine_latest + env: | + CC: ${{matrix.cc}} + install: apk add --update bash build-base cmake git ${{matrix.cc}} + run: | + echo "::group::CMake Configure" + cmake -B out -Werror=dev -DBASE64_BUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release + echo "::endgroup::CMake Configure" + echo "::group::CMake Build" + cmake --build out --config Release --verbose + echo "::endgroup::CMake Build" + echo "::group::CTest" + ctest --no-tests=error --test-dir out -VV --build-config Release + echo "::endgroup::CTest" diff --git a/deps/base64/base64/.gitignore b/deps/base64/base64/.gitignore new file mode 100644 index 00000000000..837a2306a62 --- /dev/null +++ b/deps/base64/base64/.gitignore @@ -0,0 +1,12 @@ +*.o +bin/base64 +lib/config.h +test/benchmark +test/test_base64 + +# visual studio symbol db, etc. +.vs/ +# build directory used by CMakePresets +out/ +# private cmake presets +CMakeUserPresets.json diff --git a/deps/base64/base64/CMakeLists.txt b/deps/base64/base64/CMakeLists.txt new file mode 100644 index 00000000000..dcca17f6e27 --- /dev/null +++ b/deps/base64/base64/CMakeLists.txt @@ -0,0 +1,286 @@ +# Written in 2016-2017, 2021 by Henrik Steffen Gaßmann henrik@gassmann.onl +# +# To the extent possible under law, the author(s) have dedicated all +# copyright and related and neighboring rights to this software to the +# public domain worldwide. This software is distributed without any warranty. +# +# You should have received a copy of the CC0 Public Domain Dedication +# along with this software. If not, see +# +# http://creativecommons.org/publicdomain/zero/1.0/ +# +######################################################################## +cmake_minimum_required(VERSION 3.10.2) + +# new dependent option syntax. We are already compliant +if (POLICY CMP0127) + cmake_policy(SET CMP0127 NEW) +endif() + +project(base64 LANGUAGES C VERSION 0.4.0) + +include(GNUInstallDirs) +include(CMakeDependentOption) +include(CheckIncludeFile) +include(FeatureSummary) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules") + +####################################################################### +# platform detection +include(TargetArch) +detect_target_architecture(_TARGET_ARCH) + +check_include_file(getopt.h HAVE_GETOPT_H) +cmake_dependent_option(BASE64_BUILD_CLI "Build the cli for encoding and decoding" ON "HAVE_GETOPT_H" OFF) +add_feature_info(CLI BASE64_BUILD_CLI "enables the CLI executable for encoding and decoding") + +################################################################### +# optional/conditional dependencies +find_package(OpenMP) +set_package_properties(OpenMP PROPERTIES + TYPE OPTIONAL + PURPOSE "Allows to utilize OpenMP" +) + + +######################################################################## +# Compilation options +option(BASE64_WERROR "Treat warnings as error" ON) +option(BASE64_BUILD_TESTS "add test projects" OFF) +cmake_dependent_option(BASE64_WITH_OpenMP "use OpenMP" OFF "OpenMP_FOUND" OFF) +add_feature_info("OpenMP codec" BASE64_WITH_OpenMP "spreads codec work accross multiple threads") +cmake_dependent_option(BASE64_REGENERATE_TABLES "regenerate the codec tables" OFF "NOT CMAKE_CROSSCOMPILING" OFF) + +set(_IS_X86 "_TARGET_ARCH_x86 OR _TARGET_ARCH_x64") +cmake_dependent_option(BASE64_WITH_SSSE3 "add SSSE 3 codepath" ON ${_IS_X86} OFF) +add_feature_info(SSSE3 BASE64_WITH_SSSE3 "add SSSE 3 codepath") +cmake_dependent_option(BASE64_WITH_SSE41 "add SSE 4.1 codepath" ON ${_IS_X86} OFF) +add_feature_info(SSE4.1 BASE64_WITH_SSE41 "add SSE 4.1 codepath") +cmake_dependent_option(BASE64_WITH_SSE42 "add SSE 4.2 codepath" ON ${_IS_X86} OFF) +add_feature_info(SSE4.2 BASE64_WITH_SSE42 "add SSE 4.2 codepath") +cmake_dependent_option(BASE64_WITH_AVX "add AVX codepath" ON ${_IS_X86} OFF) +add_feature_info(AVX BASE64_WITH_AVX "add AVX codepath") +cmake_dependent_option(BASE64_WITH_AVX2 "add AVX 2 codepath" ON ${_IS_X86} OFF) +add_feature_info(AVX2 BASE64_WITH_AVX2 "add AVX2 codepath") + +cmake_dependent_option(BASE64_WITH_NEON32 "add NEON32 codepath" OFF _TARGET_ARCH_arm OFF) +add_feature_info(NEON32 BASE64_WITH_NEON32 "add NEON32 codepath") + +cmake_dependent_option(BASE64_WITH_NEON64 "add NEON64 codepath" ON _TARGET_ARCH_arm64 OFF) +add_feature_info(NEON64 BASE64_WITH_NEON64 "add NEON64 codepath") + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") + +######################################################################## +# Regenerate headers + +if (BASE64_REGENERATE_TABLES) + # Generate tables in build folder and copy to source tree. + # Don't add the tables in the source tree to the outputs, to avoid `make clean` removing them. + add_executable(table_generator + lib/tables/table_generator.c + ) + + add_custom_command(OUTPUT table_dec_32bit.h "${CMAKE_CURRENT_SOURCE_DIR}/lib/tables/table_dec_32bit.h" + COMMAND table_generator > table_dec_32bit.h + COMMAND "${CMAKE_COMMAND}" -E copy table_dec_32bit.h "${CMAKE_CURRENT_SOURCE_DIR}/lib/tables/table_dec_32bit.h" + DEPENDS table_generator + ) + set(Python_ADDITIONAL_VERSIONS 3) + find_package(PythonInterp REQUIRED) + add_custom_command(OUTPUT table_enc_12bit.h "${CMAKE_CURRENT_SOURCE_DIR}/lib/tables/table_enc_12bit.h" + COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/lib/tables/table_enc_12bit.py" > table_enc_12bit.h + COMMAND "${CMAKE_COMMAND}" -E copy table_enc_12bit.h "${CMAKE_CURRENT_SOURCE_DIR}/lib/tables/table_enc_12bit.h" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/lib/tables/table_enc_12bit.py" + ) +endif() + + +######################################################################## +# library project +add_library(base64 + # library files + lib/lib.c + lib/codec_choose.c + include/libbase64.h + + lib/tables/tables.c + # Add generated headers explicitly to target, to insert them in the dependency tree + lib/tables/table_dec_32bit.h + lib/tables/table_enc_12bit.h + + # codec implementations + lib/arch/generic/codec.c + + lib/arch/ssse3/codec.c + lib/arch/sse41/codec.c + lib/arch/sse42/codec.c + lib/arch/avx/codec.c + lib/arch/avx2/codec.c + + lib/arch/neon32/codec.c + lib/arch/neon64/codec.c +) + +target_include_directories(base64 + PUBLIC + $ + $ + PRIVATE + "${CMAKE_CURRENT_BINARY_DIR}" +) + +#################################################################### +# platform/compiler specific configuration +set_target_properties(base64 PROPERTIES + C_STANDARD 99 + C_STANDARD_REQUIRED YES + C_EXTENSIONS OFF + DEFINE_SYMBOL BASE64_EXPORTS + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} +) + +#generate_export_header(base64) +# the following definitions and those in libbase64.h have been +# kept forward compatible in case we ever switch to generate_export_header +if (BUILD_SHARED_LIBS) + set_target_properties(base64 PROPERTIES + C_VISIBILITY_PRESET hidden + ) +else() + target_compile_definitions(base64 + PUBLIC + BASE64_STATIC_DEFINE + ) +endif() + +target_compile_options(base64 PRIVATE + $<$: + /W4 + /we4013 # Error warning C4013: 'function' undefined; assuming extern returning int + /we4700 # Error warning C4700: uninitialized local variable + /we4715 # not all control paths return a value + /we4003 # not enough actual parameters for macro + /wd4456 # disable warning C4456: declaration of 'xxx' hides previous local declaration + > + $<$>: + -Wall + -Wextra + -Wpedantic + > + $<$:$,/WX,-Werror>> +) + +target_compile_definitions(base64 PRIVATE + $<$: + # remove unnecessary warnings about unchecked iterators + _SCL_SECURE_NO_WARNINGS + > +) + +######################################################################## +# SIMD settings +include(TargetSIMDInstructionSet) +define_SIMD_compile_flags() + +if (_TARGET_ARCH STREQUAL "x86" OR _TARGET_ARCH STREQUAL "x64") + macro(configure_codec _TYPE) + if (BASE64_WITH_${_TYPE}) + string(TOLOWER "${_TYPE}" _DIR) + set_source_files_properties("lib/arch/${_DIR}/codec.c" PROPERTIES + COMPILE_FLAGS "${COMPILE_FLAGS_${_TYPE}}" + ) + + if (${ARGC} GREATER 1 AND MSVC) + set_source_files_properties("lib/arch/${_DIR}/codec.c" PROPERTIES + COMPILE_DEFINITIONS ${ARGV1} + ) + endif() + endif() + endmacro() + + configure_codec(SSSE3 __SSSE3__) + configure_codec(SSE41 __SSSE4_1__) + configure_codec(SSE42 __SSSE4_2__) + configure_codec(AVX) + configure_codec(AVX2) + +elseif (_TARGET_ARCH STREQUAL "arm") + set(BASE64_NEON32_CFLAGS "${COMPILE_FLAGS_NEON32}" CACHE STRING "the NEON32 compile flags (for 'lib/arch/neon32/codec.c')") + mark_as_advanced(BASE64_NEON32_CFLAGS) + + if (BASE64_WITH_NEON32) + set_source_files_properties("lib/arch/neon32/codec.c" PROPERTIES + COMPILE_FLAGS "${BASE64_NEON32_CFLAGS} " + ) + endif() + +#elseif (_TARGET_ARCH STREQUAL "arm64" AND BASE64_WITH_NEON64) + +endif() + +configure_file("${CMAKE_CURRENT_LIST_DIR}/cmake/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" @ONLY) + +######################################################################## +# OpenMP Settings +if (BASE64_WITH_OpenMP) + target_link_libraries(base64 PRIVATE OpenMP::OpenMP_C) +endif() + +######################################################################## +if (BASE64_BUILD_TESTS) + enable_testing() + add_subdirectory(test) +endif() + +######################################################################## +# base64 +if (BASE64_BUILD_CLI) + add_executable(base64-bin + bin/base64.c + ) + target_link_libraries(base64-bin PRIVATE base64) + set_target_properties(base64-bin PROPERTIES + OUTPUT_NAME base64 + ) +endif() + +######################################################################## +# cmake install +install(DIRECTORY include/ TYPE INCLUDE) +install(TARGETS base64 + EXPORT base64-targets + DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) +if (BASE64_BUILD_CLI) + install(TARGETS base64-bin EXPORT base64-targets DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() + +include(CMakePackageConfigHelpers) +configure_package_config_file(cmake/base64-config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/base64-config.cmake" + + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" +) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/base64-config-version.cmake" + VERSION ${BASE64_VERSION} + COMPATIBILITY SameMajorVersion +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/base64-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/base64-config-version.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" +) + +install(EXPORT base64-targets + NAMESPACE aklomp:: + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" +) + +######################################################################## +feature_summary(WHAT PACKAGES_FOUND PACKAGES_NOT_FOUND ENABLED_FEATURES DISABLED_FEATURES) diff --git a/deps/base64/base64/LICENSE b/deps/base64/base64/LICENSE new file mode 100644 index 00000000000..9446393a82a --- /dev/null +++ b/deps/base64/base64/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2005-2007, Nick Galbreath +Copyright (c) 2013-2019, Alfred Klomp +Copyright (c) 2015-2017, Wojciech Mula +Copyright (c) 2016-2017, Matthieu Darbois +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/deps/base64/base64/Makefile b/deps/base64/base64/Makefile new file mode 100644 index 00000000000..2bb01e204fc --- /dev/null +++ b/deps/base64/base64/Makefile @@ -0,0 +1,93 @@ +CFLAGS += -std=c99 -O3 -Wall -Wextra -pedantic + +# Set OBJCOPY if not defined by environment: +OBJCOPY ?= objcopy + +OBJS = \ + lib/arch/avx2/codec.o \ + lib/arch/generic/codec.o \ + lib/arch/neon32/codec.o \ + lib/arch/neon64/codec.o \ + lib/arch/ssse3/codec.o \ + lib/arch/sse41/codec.o \ + lib/arch/sse42/codec.o \ + lib/arch/avx/codec.o \ + lib/lib.o \ + lib/codec_choose.o \ + lib/tables/tables.o + +HAVE_AVX2 = 0 +HAVE_NEON32 = 0 +HAVE_NEON64 = 0 +HAVE_SSSE3 = 0 +HAVE_SSE41 = 0 +HAVE_SSE42 = 0 +HAVE_AVX = 0 + +# The user should supply compiler flags for the codecs they want to build. +# Check which codecs we're going to include: +ifdef AVX2_CFLAGS + HAVE_AVX2 = 1 +endif +ifdef NEON32_CFLAGS + HAVE_NEON32 = 1 +endif +ifdef NEON64_CFLAGS + HAVE_NEON64 = 1 +endif +ifdef SSSE3_CFLAGS + HAVE_SSSE3 = 1 +endif +ifdef SSE41_CFLAGS + HAVE_SSE41 = 1 +endif +ifdef SSE42_CFLAGS + HAVE_SSE42 = 1 +endif +ifdef AVX_CFLAGS + HAVE_AVX = 1 +endif +ifdef OPENMP + CFLAGS += -fopenmp +endif + + +.PHONY: all analyze clean + +all: bin/base64 lib/libbase64.o + +bin/base64: bin/base64.o lib/libbase64.o + $(CC) $(CFLAGS) -o $@ $^ + +lib/libbase64.o: $(OBJS) + $(LD) -r -o $@ $^ + $(OBJCOPY) --keep-global-symbols=lib/exports.txt $@ + +lib/config.h: + @echo "#define HAVE_AVX2 $(HAVE_AVX2)" > $@ + @echo "#define HAVE_NEON32 $(HAVE_NEON32)" >> $@ + @echo "#define HAVE_NEON64 $(HAVE_NEON64)" >> $@ + @echo "#define HAVE_SSSE3 $(HAVE_SSSE3)" >> $@ + @echo "#define HAVE_SSE41 $(HAVE_SSE41)" >> $@ + @echo "#define HAVE_SSE42 $(HAVE_SSE42)" >> $@ + @echo "#define HAVE_AVX $(HAVE_AVX)" >> $@ + +$(OBJS): lib/config.h +$(OBJS): CFLAGS += -Ilib + +lib/arch/avx2/codec.o: CFLAGS += $(AVX2_CFLAGS) +lib/arch/neon32/codec.o: CFLAGS += $(NEON32_CFLAGS) +lib/arch/neon64/codec.o: CFLAGS += $(NEON64_CFLAGS) +lib/arch/ssse3/codec.o: CFLAGS += $(SSSE3_CFLAGS) +lib/arch/sse41/codec.o: CFLAGS += $(SSE41_CFLAGS) +lib/arch/sse42/codec.o: CFLAGS += $(SSE42_CFLAGS) +lib/arch/avx/codec.o: CFLAGS += $(AVX_CFLAGS) + +%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< + +analyze: clean + scan-build --use-analyzer=`which clang` --status-bugs make + +clean: + rm -f bin/base64 bin/base64.o lib/libbase64.o lib/config.h $(OBJS) diff --git a/deps/base64/base64/README.md b/deps/base64/base64/README.md new file mode 100644 index 00000000000..b953c324c9d --- /dev/null +++ b/deps/base64/base64/README.md @@ -0,0 +1,474 @@ +# Fast Base64 stream encoder/decoder + +[![Build Status](https://github.com/aklomp/base64/actions/workflows/test.yml/badge.svg)](https://github.com/aklomp/base64/actions/workflows/test.yml) + +This is an implementation of a base64 stream encoding/decoding library in C99 +with SIMD (AVX2, NEON, AArch64/NEON, SSSE3, SSE4.1, SSE4.2, AVX) and +[OpenMP](http://www.openmp.org) acceleration. It also contains wrapper functions +to encode/decode simple length-delimited strings. This library aims to be: + +- FAST; +- easy to use; +- elegant. + +On x86, the library does runtime feature detection. The first time it's called, +the library will determine the appropriate encoding/decoding routines for the +machine. It then remembers them for the lifetime of the program. If your +processor supports AVX2, SSSE3, SSE4.1, SSE4.2 or AVX instructions, the library +will pick an optimized codec that lets it encode/decode 12 or 24 bytes at a +time, which gives a speedup of four or more times compared to the "plain" +bytewise codec. + +NEON support is hardcoded to on or off at compile time, because portable +runtime feature detection is unavailable on ARM. + +Even if your processor does not support SIMD instructions, this is a very fast +library. The fallback routine can process 32 or 64 bits of input in one round, +depending on your processor's word width, which still makes it significantly +faster than naive bytewise implementations. On some 64-bit machines, the 64-bit +routines even outperform the SSSE3 ones. + +To the author's knowledge, at the time of original release, this was the only +Base64 library to offer SIMD acceleration. The author wrote +[an article](http://www.alfredklomp.com/programming/sse-base64) explaining one +possible SIMD approach to encoding/decoding Base64. The article can help figure +out what the code is doing, and why. + +Notable features: + +- Really fast on x86 and ARM systems by using SIMD vector processing; +- Can use [OpenMP](http://www.openmp.org) for even more parallel speedups; +- Really fast on other 32 or 64-bit platforms through optimized routines; +- Reads/writes blocks of streaming data; +- Does not dynamically allocate memory; +- Valid C99 that compiles with pedantic options on; +- Re-entrant and threadsafe; +- Unit tested; +- Uses Duff's Device. + +## Acknowledgements + +The original AVX2, NEON and Aarch64/NEON codecs were generously contributed by +[Inkymail](https://github.com/inkymail/base64), who, in their fork, also +implemented some additional features. Their work is slowly being backported +into this project. + +The SSSE3 and AVX2 codecs were substantially improved by using some very clever +optimizations described by Wojciech Muła in a +[series](http://0x80.pl/notesen/2016-01-12-sse-base64-encoding.html) of +[articles](http://0x80.pl/notesen/2016-01-17-sse-base64-decoding.html). +His own code is [here](https://github.com/WojciechMula/toys/tree/master/base64). + +The OpenMP implementation was added by Ferry Toth (@htot) from [Exalon Delft](http://www.exalondelft.nl). + +## Building + +The `lib` directory contains the code for the actual library. +Typing `make` in the toplevel directory will build `lib/libbase64.o` and `bin/base64`. +The first is a single, self-contained object file that you can link into your own project. +The second is a standalone test binary that works similarly to the `base64` system utility. + +The matching header file needed to use this library is in `include/libbase64.h`. + +To compile just the "plain" library without SIMD codecs, type: + +```sh +make lib/libbase64.o +``` + +Optional SIMD codecs can be included by specifying the `AVX2_CFLAGS`, `NEON32_CFLAGS`, `NEON64_CFLAGS`, +`SSSE3_CFLAGS`, `SSE41_CFLAGS`, `SSE42_CFLAGS` and/or `AVX_CFLAGS` environment variables. +A typical build invocation on x86 looks like this: + +```sh +AVX2_CFLAGS=-mavx2 SSSE3_CFLAGS=-mssse3 SSE41_CFLAGS=-msse4.1 SSE42_CFLAGS=-msse4.2 AVX_CFLAGS=-mavx make lib/libbase64.o +``` + +### AVX2 + +To build and include the AVX2 codec, set the `AVX2_CFLAGS` environment variable to a value that will turn on AVX2 support in your compiler, typically `-mavx2`. +Example: + +```sh +AVX2_CFLAGS=-mavx2 make +``` + +The codec will only be used if runtime feature detection shows that the target machine supports AVX2. + +### SSSE3 + +To build and include the SSSE3 codec, set the `SSSE3_CFLAGS` environment variable to a value that will turn on SSSE3 support in your compiler, typically `-mssse3`. +Example: + +```sh +SSSE3_CFLAGS=-mssse3 make +``` + +The codec will only be used if runtime feature detection shows that the target machine supports SSSE3. + +### NEON + +This library includes two NEON codecs: one for regular 32-bit ARM and one for the 64-bit AArch64 with NEON, which has double the amount of SIMD registers and can do full 64-byte table lookups. +These codecs encode in 48-byte chunks and decode in massive 64-byte chunks, so they had to be augmented with an uint32/64 codec to stay fast on smaller inputs! + +Use LLVM/Clang for compiling the NEON codecs. +The code generation of at least GCC 4.6 (the version shipped with Raspbian and used for testing) contains a bug when compiling `vstq4_u8()`, and the generated assembly code is of low quality. +NEON intrinsics are a known weak area of GCC. +Clang does a better job. + +NEON support can unfortunately not be portably detected at runtime from userland (the `mrc` instruction is privileged), so the default value for using the NEON codec is determined at compile-time. +But you can do your own runtime detection. +You can include the NEON codec and make it the default, then do a runtime check if the CPU has NEON support, and if not, force a downgrade to non-NEON with `BASE64_FORCE_PLAIN`. + +These are your options: + +1. Don't include NEON support; +2. build NEON support and make it the default, but build all other code without NEON flags so that you can override the default at runtime with `BASE64_FORCE_PLAIN`; +3. build everything with NEON support and make it the default; +4. build everything with NEON support, but don't make it the default (which makes no sense). + +For option 1, simply don't specify any NEON-specific compiler flags at all, like so: + +```sh +CC=clang CFLAGS="-march=armv6" make +``` + +For option 2, keep your `CFLAGS` plain, but set the `NEON32_CFLAGS` environment variable to a value that will build NEON support. +The line below, for instance, will build all the code at ARMv6 level, except for the NEON codec, which is built at ARMv7. +It will also make the NEON codec the default. +For ARMv6 platforms, override that default at runtime with the `BASE64_FORCE_PLAIN` flag. +No ARMv7/NEON code will then be touched. + +```sh +CC=clang CFLAGS="-march=armv6" NEON32_CFLAGS="-march=armv7 -mfpu=neon" make +``` + +For option 3, put everything in your `CFLAGS` and use a stub, but non-empty, `NEON32_CFLAGS`. +This example works for the Raspberry Pi 2B V1.1, which has NEON support: + +```sh +CC=clang CFLAGS="-march=armv7 -mtune=cortex-a7" NEON32_CFLAGS="-mfpu=neon" make +``` + +To build and include the NEON64 codec, use `CFLAGS` as usual to define the platform and set `NEON64_CFLAGS` to a nonempty stub. +(The AArch64 target has mandatory NEON64 support.) +Example: + +```sh +CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a" NEON64_CFLAGS=" " make +``` + +### OpenMP + +To enable OpenMP on GCC you need to build with `-fopenmp`. This can be by setting the the `OPENMP` environment variable to `1`. + +Example: + +```sh +OPENMP=1 make +``` + +This will let the compiler define `_OPENMP`, which in turn will include the OpenMP optimized `lib_openmp.c` into `lib.c`. + +By default the number of parallel threads will be equal to the number of cores of the processor. +On a quad core with hyperthreading eight cores will be detected, but hyperthreading will not increase the performance. + +To get verbose information about OpenMP start the program with `OMP_DISPLAY_ENV=VERBOSE`, for instance + +```sh +OMP_DISPLAY_ENV=VERBOSE test/benchmark +``` + +To put a limit on the number of threads, start the program with `OMP_THREAD_LIMIT=n`, for instance + +```sh +OMP_THREAD_LIMIT=2 test/benchmark +``` + +An example of running a benchmark with OpenMP, SSSE3 and AVX2 enabled: + +```sh +make clean && OPENMP=1 SSSE3_CFLAGS=-mssse3 AVX2_CFLAGS=-mavx2 make && OPENMP=1 make -C test +``` + +## API reference + +Strings are represented as a pointer and a length; they are not +zero-terminated. This was a conscious design decision. In the decoding step, +relying on zero-termination would make no sense since the output could contain +legitimate zero bytes. In the encoding step, returning the length saves the +overhead of calling `strlen()` on the output. If you insist on the trailing +zero, you can easily add it yourself at the given offset. + +### Flags + +Some API calls take a `flags` argument. +That argument can be used to force the use of a specific codec, even if that codec is a no-op in the current build. +Mainly there for testing purposes, this is also useful on ARM where the only way to do runtime NEON detection is to ask the OS if it's available. +The following constants can be used: + +- `BASE64_FORCE_AVX2` +- `BASE64_FORCE_NEON32` +- `BASE64_FORCE_NEON64` +- `BASE64_FORCE_PLAIN` +- `BASE64_FORCE_SSSE3` +- `BASE64_FORCE_SSE41` +- `BASE64_FORCE_SSE42` +- `BASE64_FORCE_AVX` + +Set `flags` to `0` for the default behavior, which is runtime feature detection on x86, a compile-time fixed codec on ARM, and the plain codec on other platforms. + +### Encoding + +#### base64_encode + +```c +void base64_encode + ( const char *src + , size_t srclen + , char *out + , size_t *outlen + , int flags + ) ; +``` + +Wrapper function to encode a plain string of given length. +Output is written to `out` without trailing zero. +Output length in bytes is written to `outlen`. +The buffer in `out` has been allocated by the caller and is at least 4/3 the size of the input. + +#### base64_stream_encode_init + +```c +void base64_stream_encode_init + ( struct base64_state *state + , int flags + ) ; +``` + +Call this before calling `base64_stream_encode()` to init the state. + +#### base64_stream_encode + +```c +void base64_stream_encode + ( struct base64_state *state + , const char *src + , size_t srclen + , char *out + , size_t *outlen + ) ; +``` + +Encodes the block of data of given length at `src`, into the buffer at `out`. +Caller is responsible for allocating a large enough out-buffer; it must be at least 4/3 the size of the in-buffer, but take some margin. +Places the number of new bytes written into `outlen` (which is set to zero when the function starts). +Does not zero-terminate or finalize the output. + +#### base64_stream_encode_final + +```c +void base64_stream_encode_final + ( struct base64_state *state + , char *out + , size_t *outlen + ) ; +``` + +Finalizes the output begun by previous calls to `base64_stream_encode()`. +Adds the required end-of-stream markers if appropriate. +`outlen` is modified and will contain the number of new bytes written at `out` (which will quite often be zero). + +### Decoding + +#### base64_decode + +```c +int base64_decode + ( const char *src + , size_t srclen + , char *out + , size_t *outlen + , int flags + ) ; +``` + +Wrapper function to decode a plain string of given length. +Output is written to `out` without trailing zero. Output length in bytes is written to `outlen`. +The buffer in `out` has been allocated by the caller and is at least 3/4 the size of the input. +Returns `1` for success, and `0` when a decode error has occured due to invalid input. +Returns `-1` if the chosen codec is not included in the current build. + +#### base64_stream_decode_init + +```c +void base64_stream_decode_init + ( struct base64_state *state + , int flags + ) ; +``` + +Call this before calling `base64_stream_decode()` to init the state. + +#### base64_stream_decode + +```c +int base64_stream_decode + ( struct base64_state *state + , const char *src + , size_t srclen + , char *out + , size_t *outlen + ) ; +``` + +Decodes the block of data of given length at `src`, into the buffer at `out`. +Caller is responsible for allocating a large enough out-buffer; it must be at least 3/4 the size of the in-buffer, but take some margin. +Places the number of new bytes written into `outlen` (which is set to zero when the function starts). +Does not zero-terminate the output. +Returns 1 if all is well, and 0 if a decoding error was found, such as an invalid character. +Returns -1 if the chosen codec is not included in the current build. +Used by the test harness to check whether a codec is available for testing. + +## Examples + +A simple example of encoding a static string to base64 and printing the output +to stdout: + +```c +#include /* fwrite */ +#include "libbase64.h" + +int main () +{ + char src[] = "hello world"; + char out[20]; + size_t srclen = sizeof(src) - 1; + size_t outlen; + + base64_encode(src, srclen, out, &outlen, 0); + + fwrite(out, outlen, 1, stdout); + + return 0; +} +``` + +A simple example (no error checking, etc) of stream encoding standard input to +standard output: + +```c +#include +#include "libbase64.h" + +int main () +{ + size_t nread, nout; + char buf[12000], out[16000]; + struct base64_state state; + + // Initialize stream encoder: + base64_stream_encode_init(&state, 0); + + // Read contents of stdin into buffer: + while ((nread = fread(buf, 1, sizeof(buf), stdin)) > 0) { + + // Encode buffer: + base64_stream_encode(&state, buf, nread, out, &nout); + + // If there's output, print it to stdout: + if (nout) { + fwrite(out, nout, 1, stdout); + } + + // If an error occurred, exit the loop: + if (feof(stdin)) { + break; + } + } + + // Finalize encoding: + base64_stream_encode_final(&state, out, &nout); + + // If the finalizing resulted in extra output bytes, print them: + if (nout) { + fwrite(out, nout, 1, stdout); + } + + return 0; +} +``` + +Also see `bin/base64.c` for a simple re-implementation of the `base64` utility. +A file or standard input is fed through the encoder/decoder, and the output is +written to standard output. + +## Tests + +See `tests/` for a small test suite. Testing is automated with +[GitHub Actions](https://github.com/aklomp/base64/actions), which builds and +tests the code across various architectures. + +## Benchmarks + +Benchmarks can be run with the built-in benchmark program as follows: + +```sh +make -C test benchmark && test/benchmark +``` + +It will run an encoding and decoding benchmark for all of the compiled-in codecs. + +The tables below contain some results on random machines. All numbers measured with a 10MB buffer in MB/sec, rounded to the nearest integer. + +\*: Update needed + +x86 processors + +| Processor | Plain enc | Plain dec | SSSE3 enc | SSSE3 dec | AVX enc | AVX dec | AVX2 enc | AVX2 dec | +|-------------------------------------------|----------:|----------:|----------:|----------:|--------:|--------:|---------:|---------:| +| i7-4771 @ 3.5 GHz | 833\* | 1111\* | 3333\* | 4444\* | TBD | TBD | 4999\* | 6666\* | +| i7-4770 @ 3.4 GHz DDR1600 | 1790\* | 3038\* | 4899\* | 4043\* | 4796\* | 5709\* | 4681\* | 6386\* | +| i7-4770 @ 3.4 GHz DDR1600 OPENMP 1 thread | 1784\* | 3041\* | 4945\* | 4035\* | 4776\* | 5719\* | 4661\* | 6294\* | +| i7-4770 @ 3.4 GHz DDR1600 OPENMP 2 thread | 3401\* | 5729\* | 5489\* | 7444\* | 5003\* | 8624\* | 5105\* | 8558\* | +| i7-4770 @ 3.4 GHz DDR1600 OPENMP 4 thread | 4884\* | 7099\* | 4917\* | 7057\* | 4799\* | 7143\* | 4902\* | 7219\* | +| i7-4770 @ 3.4 GHz DDR1600 OPENMP 8 thread | 5212\* | 8849\* | 5284\* | 9099\* | 5289\* | 9220\* | 4849\* | 9200\* | +| i7-4870HQ @ 2.5 GHz | 1471\* | 3066\* | 6721\* | 6962\* | 7015\* | 8267\* | 8328\* | 11576\* | +| i5-4590S @ 3.0 GHz | 3356 | 3197 | 4363 | 6104 | 4243 | 6233 | 4160 | 6344 | +| Xeon X5570 @ 2.93 GHz | 2161 | 1508 | 3160 | 3915 | - | - | - | - | +| Pentium4 @ 3.4 GHz | 896 | 740 | - | - | - | - | - | - | +| Atom N270 | 243 | 266 | 508 | 387 | - | - | - | - | +| AMD E-450 | 645 | 564 | 625 | 634 | - | - | - | - | +| Intel Edison @ 500 MHz | 79\* | 92\* | 152\* | 172\* | - | - | - | - | +| Intel Edison @ 500 MHz OPENMP 2 thread | 158\* | 184\* | 300\* | 343\* | - | - | - | - | +| Intel Edison @ 500 MHz (x86-64) | 162 | 119 | 209 | 164 | - | - | - | - | +| Intel Edison @ 500 MHz (x86-64) 2 thread | 319 | 237 | 412 | 329 | - | - | - | - | + +ARM processors + +| Processor | Plain enc | Plain dec | NEON32 enc | NEON32 dec | NEON64 enc | NEON64 dec | +|-------------------------------------------|----------:|----------:|-----------:|-----------:|-----------:|-----------:| +| Raspberry PI B+ V1.2 | 46\* | 40\* | - | - | - | - | +| Raspberry PI 2 B V1.1 | 85 | 141 | 300 | 225 | - | - | +| Apple iPhone SE armv7 | 1056\* | 895\* | 2943\* | 2618\* | - | - | +| Apple iPhone SE arm64 | 1061\* | 1239\* | - | - | 4098\* | 3983\* | + +PowerPC processors + +| Processor | Plain enc | Plain dec | +|-------------------------------------------|----------:|----------:| +| PowerPC E6500 @ 1.8GHz | 270\* | 265\* | + + +Benchmarks on i7-4770 @ 3.4 GHz DDR1600 with varrying buffer sizes: +![Benchmarks](base64-benchmarks.png) + +Note: optimal buffer size to take advantage of the cache is in the range of 100 kB to 1 MB, leading to 12x faster AVX encoding/decoding compared to Plain, or a throughput of 24/27GB/sec. +Also note the performance degradation when the buffer size is less than 10 kB due to thread creation overhead. +To prevent this from happening `lib_openmp.c` defines `OMP_THRESHOLD 20000`, requiring at least a 20000 byte buffer to enable multithreading. + +## License + +This repository is licensed under the +[BSD 2-clause License](http://opensource.org/licenses/BSD-2-Clause). See the +LICENSE file. diff --git a/deps/base64/base64/base64-benchmarks.png b/deps/base64/base64/base64-benchmarks.png new file mode 100644 index 00000000000..de0d7d42e8d Binary files /dev/null and b/deps/base64/base64/base64-benchmarks.png differ diff --git a/deps/base64/base64/bin/base64.c b/deps/base64/base64/bin/base64.c new file mode 100644 index 00000000000..e4384fe885d --- /dev/null +++ b/deps/base64/base64/bin/base64.c @@ -0,0 +1,128 @@ +#include // size_t +#include // fopen() +#include // strlen() +#include +#include "../include/libbase64.h" + +#define BUFSIZE 1024 * 1024 + +static char buf[BUFSIZE]; +static char out[(BUFSIZE * 5) / 3]; // Technically 4/3 of input, but take some margin +size_t nread; +size_t nout; + +static int +enc (FILE *fp) +{ + int ret = 1; + struct base64_state state; + + base64_stream_encode_init(&state, 0); + + while ((nread = fread(buf, 1, BUFSIZE, fp)) > 0) { + base64_stream_encode(&state, buf, nread, out, &nout); + if (nout) { + fwrite(out, nout, 1, stdout); + } + if (feof(fp)) { + break; + } + } + if (ferror(fp)) { + fprintf(stderr, "read error\n"); + ret = 0; + goto out; + } + base64_stream_encode_final(&state, out, &nout); + + if (nout) { + fwrite(out, nout, 1, stdout); + } +out: fclose(fp); + fclose(stdout); + return ret; +} + +static int +dec (FILE *fp) +{ + int ret = 1; + struct base64_state state; + + base64_stream_decode_init(&state, 0); + + while ((nread = fread(buf, 1, BUFSIZE, fp)) > 0) { + if (!base64_stream_decode(&state, buf, nread, out, &nout)) { + fprintf(stderr, "decoding error\n"); + ret = 0; + goto out; + } + if (nout) { + fwrite(out, nout, 1, stdout); + } + if (feof(fp)) { + break; + } + } + if (ferror(fp)) { + fprintf(stderr, "read error\n"); + ret = 0; + } +out: fclose(fp); + fclose(stdout); + return ret; +} + +int +main (int argc, char **argv) +{ + char *file; + FILE *fp; + int decode = 0; + + // Parse options: + for (;;) + { + int c; + int opt_index = 0; + static struct option opt_long[] = { + { "decode", 0, 0, 'd' }, + { 0, 0, 0, 0 } + }; + if ((c = getopt_long(argc, argv, "d", opt_long, &opt_index)) == -1) { + break; + } + switch (c) + { + case 'd': + decode = 1; + break; + } + } + + // No options left on command line? Read from stdin: + if (optind >= argc) { + fp = stdin; + } + + // One option left on command line? Treat it as a file: + else if (optind + 1 == argc) { + file = argv[optind]; + if (strcmp(file, "-") == 0) { + fp = stdin; + } + else if ((fp = fopen(file, "rb")) == NULL) { + printf("cannot open %s\n", file); + return 1; + } + } + + // More than one option left on command line? Syntax error: + else { + printf("Usage: %s \n", argv[0]); + return 1; + } + + // Invert return codes to create shell return code: + return (decode) ? !dec(fp) : !enc(fp); +} diff --git a/deps/base64/base64/cmake/Modules/TargetArch.cmake b/deps/base64/base64/cmake/Modules/TargetArch.cmake new file mode 100644 index 00000000000..d5b0a50bb1f --- /dev/null +++ b/deps/base64/base64/cmake/Modules/TargetArch.cmake @@ -0,0 +1,30 @@ +# Written in 2017 by Henrik Steffen Gaßmann henrik@gassmann.onl +# +# To the extent possible under law, the author(s) have dedicated all +# copyright and related and neighboring rights to this software to the +# public domain worldwide. This software is distributed without any warranty. +# +# You should have received a copy of the CC0 Public Domain Dedication +# along with this software. If not, see +# +# http://creativecommons.org/publicdomain/zero/1.0/ +# +######################################################################## + +set(TARGET_ARCHITECTURE_TEST_FILE "${CMAKE_CURRENT_LIST_DIR}/../test-arch.c") + +function(detect_target_architecture OUTPUT_VARIABLE) + message(STATUS "${CMAKE_CURRENT_LIST_DIR}") + try_compile(_IGNORED "${CMAKE_CURRENT_BINARY_DIR}" + "${TARGET_ARCHITECTURE_TEST_FILE}" + OUTPUT_VARIABLE _LOG + ) + + string(REGEX MATCH "##arch=([^#]+)##" _IGNORED "${_LOG}") + + set(${OUTPUT_VARIABLE} "${CMAKE_MATCH_1}" PARENT_SCOPE) + set("${OUTPUT_VARIABLE}_${CMAKE_MATCH_1}" 1 PARENT_SCOPE) + if (CMAKE_MATCH_1 STREQUAL "unknown") + message(WARNING "could not detect the target architecture.") + endif() +endfunction() diff --git a/deps/base64/base64/cmake/Modules/TargetSIMDInstructionSet.cmake b/deps/base64/base64/cmake/Modules/TargetSIMDInstructionSet.cmake new file mode 100644 index 00000000000..ba1f6e51815 --- /dev/null +++ b/deps/base64/base64/cmake/Modules/TargetSIMDInstructionSet.cmake @@ -0,0 +1,34 @@ +# Written in 2016-2017 by Henrik Steffen Gaßmann henrik@gassmann.onl +# +# To the extent possible under law, the author(s) have dedicated all +# copyright and related and neighboring rights to this software to the +# public domain worldwide. This software is distributed without any warranty. +# +# You should have received a copy of the CC0 Public Domain Dedication +# along with this software. If not, see +# +# http://creativecommons.org/publicdomain/zero/1.0/ +# +######################################################################## + +######################################################################## +# compiler flags definition +macro(define_SIMD_compile_flags) + if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang") + # x86 + set(COMPILE_FLAGS_SSSE3 "-mssse3") + set(COMPILE_FLAGS_SSE41 "-msse4.1") + set(COMPILE_FLAGS_SSE42 "-msse4.2") + set(COMPILE_FLAGS_AVX "-mavx") + set(COMPILE_FLAGS_AVX2 "-mavx2") + + #arm + set(COMPILE_FLAGS_NEON32 "-mfpu=neon") + elseif(MSVC) + set(COMPILE_FLAGS_SSSE3 " ") + set(COMPILE_FLAGS_SSE41 " ") + set(COMPILE_FLAGS_SSE42 " ") + set(COMPILE_FLAGS_AVX "/arch:AVX") + set(COMPILE_FLAGS_AVX2 "/arch:AVX2") + endif() +endmacro(define_SIMD_compile_flags) diff --git a/deps/base64/base64/cmake/base64-config.cmake.in b/deps/base64/base64/cmake/base64-config.cmake.in new file mode 100644 index 00000000000..d009bf73ad7 --- /dev/null +++ b/deps/base64/base64/cmake/base64-config.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/base64-targets.cmake") + +check_required_components(base64) diff --git a/deps/base64/base64/cmake/config.h.in b/deps/base64/base64/cmake/config.h.in new file mode 100644 index 00000000000..8530d1e13d4 --- /dev/null +++ b/deps/base64/base64/cmake/config.h.in @@ -0,0 +1,25 @@ +#ifndef BASE64_CONFIG_H +#define BASE64_CONFIG_H + +#cmakedefine01 BASE64_WITH_SSSE3 +#define HAVE_SSSE3 BASE64_WITH_SSSE3 + +#cmakedefine01 BASE64_WITH_SSE41 +#define HAVE_SSE41 BASE64_WITH_SSE41 + +#cmakedefine01 BASE64_WITH_SSE42 +#define HAVE_SSE42 BASE64_WITH_SSE42 + +#cmakedefine01 BASE64_WITH_AVX +#define HAVE_AVX BASE64_WITH_AVX + +#cmakedefine01 BASE64_WITH_AVX2 +#define HAVE_AVX2 BASE64_WITH_AVX2 + +#cmakedefine01 BASE64_WITH_NEON32 +#define HAVE_NEON32 BASE64_WITH_NEON32 + +#cmakedefine01 BASE64_WITH_NEON64 +#define HAVE_NEON64 BASE64_WITH_NEON64 + +#endif // BASE64_CONFIG_H diff --git a/deps/base64/base64/cmake/test-arch.c b/deps/base64/base64/cmake/test-arch.c new file mode 100644 index 00000000000..b438405e358 --- /dev/null +++ b/deps/base64/base64/cmake/test-arch.c @@ -0,0 +1,35 @@ +// Written in 2017 by Henrik Steffen Gaßmann henrik@gassmann.onl +// +// To the extent possible under law, the author(s) have dedicated all +// copyright and related and neighboring rights to this software to the +// public domain worldwide. This software is distributed without any warranty. +// +// You should have received a copy of the CC0 Public Domain Dedication +// along with this software. If not, see +// +// http://creativecommons.org/publicdomain/zero/1.0/ +// +//////////////////////////////////////////////////////////////////////////////// + +// ARM 64-Bit +#if defined(__aarch64__) +#error ##arch=arm64## + +// ARM 32-Bit +#elif defined(__arm__) \ + || defined(_M_ARM) +#error ##arch=arm## + +// x86 64-Bit +#elif defined(__x86_64__) \ + || defined(_M_X64) +#error ##arch=x64## + +// x86 32-Bit +#elif defined(__i386__) \ + || defined(_M_IX86) +#error ##arch=x86## + +#else +#error ##arch=unknown## +#endif diff --git a/deps/base64/base64/include/libbase64.h b/deps/base64/base64/include/libbase64.h new file mode 100644 index 00000000000..d470a82f102 --- /dev/null +++ b/deps/base64/base64/include/libbase64.h @@ -0,0 +1,145 @@ +#ifndef LIBBASE64_H +#define LIBBASE64_H + +#include /* size_t */ + + +#if defined(_WIN32) || defined(__CYGWIN__) +#define BASE64_SYMBOL_IMPORT __declspec(dllimport) +#define BASE64_SYMBOL_EXPORT __declspec(dllexport) +#define BASE64_SYMBOL_PRIVATE + +#elif __GNUC__ >= 4 +#define BASE64_SYMBOL_IMPORT __attribute__ ((visibility ("default"))) +#define BASE64_SYMBOL_EXPORT __attribute__ ((visibility ("default"))) +#define BASE64_SYMBOL_PRIVATE __attribute__ ((visibility ("hidden"))) + +#else +#define BASE64_SYMBOL_IMPORT +#define BASE64_SYMBOL_EXPORT +#define BASE64_SYMBOL_PRIVATE +#endif + +#if defined(BASE64_STATIC_DEFINE) +#define BASE64_EXPORT +#define BASE64_NO_EXPORT + +#else +#if defined(BASE64_EXPORTS) // defined if we are building the shared library +#define BASE64_EXPORT BASE64_SYMBOL_EXPORT + +#else +#define BASE64_EXPORT BASE64_SYMBOL_IMPORT +#endif + +#define BASE64_NO_EXPORT BASE64_SYMBOL_PRIVATE +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* These are the flags that can be passed in the `flags` argument. The values + * below force the use of a given codec, even if that codec is a no-op in the + * current build. Used in testing. Set to 0 for the default behavior, which is + * runtime feature detection on x86, a compile-time fixed codec on ARM, and + * the plain codec on other platforms: */ +#define BASE64_FORCE_AVX2 (1 << 0) +#define BASE64_FORCE_NEON32 (1 << 1) +#define BASE64_FORCE_NEON64 (1 << 2) +#define BASE64_FORCE_PLAIN (1 << 3) +#define BASE64_FORCE_SSSE3 (1 << 4) +#define BASE64_FORCE_SSE41 (1 << 5) +#define BASE64_FORCE_SSE42 (1 << 6) +#define BASE64_FORCE_AVX (1 << 7) + +struct base64_state { + int eof; + int bytes; + int flags; + unsigned char carry; +}; + +/* Wrapper function to encode a plain string of given length. Output is written + * to *out without trailing zero. Output length in bytes is written to *outlen. + * The buffer in `out` has been allocated by the caller and is at least 4/3 the + * size of the input. See above for `flags`; set to 0 for default operation: */ +void BASE64_EXPORT base64_encode + ( const char *src + , size_t srclen + , char *out + , size_t *outlen + , int flags + ) ; + +/* Call this before calling base64_stream_encode() to init the state. See above + * for `flags`; set to 0 for default operation: */ +void BASE64_EXPORT base64_stream_encode_init + ( struct base64_state *state + , int flags + ) ; + +/* Encodes the block of data of given length at `src`, into the buffer at + * `out`. Caller is responsible for allocating a large enough out-buffer; it + * must be at least 4/3 the size of the in-buffer, but take some margin. Places + * the number of new bytes written into `outlen` (which is set to zero when the + * function starts). Does not zero-terminate or finalize the output. */ +void BASE64_EXPORT base64_stream_encode + ( struct base64_state *state + , const char *src + , size_t srclen + , char *out + , size_t *outlen + ) ; + +/* Finalizes the output begun by previous calls to `base64_stream_encode()`. + * Adds the required end-of-stream markers if appropriate. `outlen` is modified + * and will contain the number of new bytes written at `out` (which will quite + * often be zero). */ +void BASE64_EXPORT base64_stream_encode_final + ( struct base64_state *state + , char *out + , size_t *outlen + ) ; + +/* Wrapper function to decode a plain string of given length. Output is written + * to *out without trailing zero. Output length in bytes is written to *outlen. + * The buffer in `out` has been allocated by the caller and is at least 3/4 the + * size of the input. See above for `flags`, set to 0 for default operation: */ +int BASE64_EXPORT base64_decode + ( const char *src + , size_t srclen + , char *out + , size_t *outlen + , int flags + ) ; + +/* Call this before calling base64_stream_decode() to init the state. See above + * for `flags`; set to 0 for default operation: */ +void BASE64_EXPORT base64_stream_decode_init + ( struct base64_state *state + , int flags + ) ; + +/* Decodes the block of data of given length at `src`, into the buffer at + * `out`. Caller is responsible for allocating a large enough out-buffer; it + * must be at least 3/4 the size of the in-buffer, but take some margin. Places + * the number of new bytes written into `outlen` (which is set to zero when the + * function starts). Does not zero-terminate the output. Returns 1 if all is + * well, and 0 if a decoding error was found, such as an invalid character. + * Returns -1 if the chosen codec is not included in the current build. Used by + * the test harness to check whether a codec is available for testing. */ +int BASE64_EXPORT base64_stream_decode + ( struct base64_state *state + , const char *src + , size_t srclen + , char *out + , size_t *outlen + ) ; + +#ifdef __cplusplus +} +#endif + +#endif /* LIBBASE64_H */ diff --git a/deps/base64/base64/lib/arch/avx/codec.c b/deps/base64/base64/lib/arch/avx/codec.c new file mode 100644 index 00000000000..a7a963d8358 --- /dev/null +++ b/deps/base64/base64/lib/arch/avx/codec.c @@ -0,0 +1,42 @@ +#include +#include +#include + +#include "../../../include/libbase64.h" +#include "../../tables/tables.h" +#include "../../codecs.h" +#include "config.h" +#include "../../env.h" + +#if HAVE_AVX +#include + +#include "../ssse3/dec_reshuffle.c" +#include "../ssse3/dec_loop.c" +#include "../ssse3/enc_translate.c" +#include "../ssse3/enc_reshuffle.c" +#include "../ssse3/enc_loop.c" + +#endif // HAVE_AVX + +BASE64_ENC_FUNCTION(avx) +{ +#if HAVE_AVX + #include "../generic/enc_head.c" + enc_loop_ssse3(&s, &slen, &o, &olen); + #include "../generic/enc_tail.c" +#else + BASE64_ENC_STUB +#endif +} + +BASE64_DEC_FUNCTION(avx) +{ +#if HAVE_AVX + #include "../generic/dec_head.c" + dec_loop_ssse3(&s, &slen, &o, &olen); + #include "../generic/dec_tail.c" +#else + BASE64_DEC_STUB +#endif +} diff --git a/deps/base64/base64/lib/arch/avx2/codec.c b/deps/base64/base64/lib/arch/avx2/codec.c new file mode 100644 index 00000000000..0498548b80d --- /dev/null +++ b/deps/base64/base64/lib/arch/avx2/codec.c @@ -0,0 +1,42 @@ +#include +#include +#include + +#include "../../../include/libbase64.h" +#include "../../tables/tables.h" +#include "../../codecs.h" +#include "config.h" +#include "../../env.h" + +#if HAVE_AVX2 +#include + +#include "dec_reshuffle.c" +#include "dec_loop.c" +#include "enc_translate.c" +#include "enc_reshuffle.c" +#include "enc_loop.c" + +#endif // HAVE_AVX2 + +BASE64_ENC_FUNCTION(avx2) +{ +#if HAVE_AVX2 + #include "../generic/enc_head.c" + enc_loop_avx2(&s, &slen, &o, &olen); + #include "../generic/enc_tail.c" +#else + BASE64_ENC_STUB +#endif +} + +BASE64_DEC_FUNCTION(avx2) +{ +#if HAVE_AVX2 + #include "../generic/dec_head.c" + dec_loop_avx2(&s, &slen, &o, &olen); + #include "../generic/dec_tail.c" +#else + BASE64_DEC_STUB +#endif +} diff --git a/deps/base64/base64/lib/arch/avx2/dec_loop.c b/deps/base64/base64/lib/arch/avx2/dec_loop.c new file mode 100644 index 00000000000..f959fc4ba2b --- /dev/null +++ b/deps/base64/base64/lib/arch/avx2/dec_loop.c @@ -0,0 +1,110 @@ +static inline int +dec_loop_avx2_inner (const uint8_t **s, uint8_t **o, size_t *rounds) +{ + const __m256i lut_lo = _mm256_setr_epi8( + 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x13, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, + 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x13, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A); + + const __m256i lut_hi = _mm256_setr_epi8( + 0x10, 0x10, 0x01, 0x02, 0x04, 0x08, 0x04, 0x08, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x01, 0x02, 0x04, 0x08, 0x04, 0x08, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10); + + const __m256i lut_roll = _mm256_setr_epi8( + 0, 16, 19, 4, -65, -65, -71, -71, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 19, 4, -65, -65, -71, -71, + 0, 0, 0, 0, 0, 0, 0, 0); + + const __m256i mask_2F = _mm256_set1_epi8(0x2F); + + // Load input: + __m256i str = _mm256_loadu_si256((__m256i *) *s); + + // See the SSSE3 decoder for an explanation of the algorithm. + const __m256i hi_nibbles = _mm256_and_si256(_mm256_srli_epi32(str, 4), mask_2F); + const __m256i lo_nibbles = _mm256_and_si256(str, mask_2F); + const __m256i hi = _mm256_shuffle_epi8(lut_hi, hi_nibbles); + const __m256i lo = _mm256_shuffle_epi8(lut_lo, lo_nibbles); + + if (!_mm256_testz_si256(lo, hi)) { + return 0; + } + + const __m256i eq_2F = _mm256_cmpeq_epi8(str, mask_2F); + const __m256i roll = _mm256_shuffle_epi8(lut_roll, _mm256_add_epi8(eq_2F, hi_nibbles)); + + // Now simply add the delta values to the input: + str = _mm256_add_epi8(str, roll); + + // Reshuffle the input to packed 12-byte output format: + str = dec_reshuffle(str); + + // Store the output: + _mm256_storeu_si256((__m256i *) *o, str); + + *s += 32; + *o += 24; + *rounds -= 1; + + return 1; +} + +static inline void +dec_loop_avx2 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + if (*slen < 45) { + return; + } + + // Process blocks of 32 bytes per round. Because 8 extra zero bytes are + // written after the output, ensure that there will be at least 13 + // bytes of input data left to cover the gap. (11 data bytes and up to + // two end-of-string markers.) + size_t rounds = (*slen - 13) / 32; + + *slen -= rounds * 32; // 32 bytes consumed per round + *olen += rounds * 24; // 24 bytes produced per round + + do { + if (rounds >= 8) { + if (dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds)) { + continue; + } + break; + } + if (rounds >= 4) { + if (dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds)) { + continue; + } + break; + } + if (rounds >= 2) { + if (dec_loop_avx2_inner(s, o, &rounds) && + dec_loop_avx2_inner(s, o, &rounds)) { + continue; + } + break; + } + dec_loop_avx2_inner(s, o, &rounds); + break; + + } while (rounds > 0); + + // Adjust for any rounds that were skipped: + *slen += rounds * 32; + *olen -= rounds * 24; +} diff --git a/deps/base64/base64/lib/arch/avx2/dec_reshuffle.c b/deps/base64/base64/lib/arch/avx2/dec_reshuffle.c new file mode 100644 index 00000000000..f3518098191 --- /dev/null +++ b/deps/base64/base64/lib/arch/avx2/dec_reshuffle.c @@ -0,0 +1,34 @@ +static inline __m256i +dec_reshuffle (const __m256i in) +{ + // in, lower lane, bits, upper case are most significant bits, lower + // case are least significant bits: + // 00llllll 00kkkkLL 00jjKKKK 00JJJJJJ + // 00iiiiii 00hhhhII 00ggHHHH 00GGGGGG + // 00ffffff 00eeeeFF 00ddEEEE 00DDDDDD + // 00cccccc 00bbbbCC 00aaBBBB 00AAAAAA + + const __m256i merge_ab_and_bc = _mm256_maddubs_epi16(in, _mm256_set1_epi32(0x01400140)); + // 0000kkkk LLllllll 0000JJJJ JJjjKKKK + // 0000hhhh IIiiiiii 0000GGGG GGggHHHH + // 0000eeee FFffffff 0000DDDD DDddEEEE + // 0000bbbb CCcccccc 0000AAAA AAaaBBBB + + __m256i out = _mm256_madd_epi16(merge_ab_and_bc, _mm256_set1_epi32(0x00011000)); + // 00000000 JJJJJJjj KKKKkkkk LLllllll + // 00000000 GGGGGGgg HHHHhhhh IIiiiiii + // 00000000 DDDDDDdd EEEEeeee FFffffff + // 00000000 AAAAAAaa BBBBbbbb CCcccccc + + // Pack bytes together in each lane: + out = _mm256_shuffle_epi8(out, _mm256_setr_epi8( + 2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, -1, -1, -1, -1, + 2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, -1, -1, -1, -1)); + // 00000000 00000000 00000000 00000000 + // LLllllll KKKKkkkk JJJJJJjj IIiiiiii + // HHHHhhhh GGGGGGgg FFffffff EEEEeeee + // DDDDDDdd CCcccccc BBBBbbbb AAAAAAaa + + // Pack lanes: + return _mm256_permutevar8x32_epi32(out, _mm256_setr_epi32(0, 1, 2, 4, 5, 6, -1, -1)); +} diff --git a/deps/base64/base64/lib/arch/avx2/enc_loop.c b/deps/base64/base64/lib/arch/avx2/enc_loop.c new file mode 100644 index 00000000000..b9e2736fc82 --- /dev/null +++ b/deps/base64/base64/lib/arch/avx2/enc_loop.c @@ -0,0 +1,89 @@ +static inline void +enc_loop_avx2_inner_first (const uint8_t **s, uint8_t **o) +{ + // First load is done at s - 0 to not get a segfault: + __m256i src = _mm256_loadu_si256((__m256i *) *s); + + // Shift by 4 bytes, as required by enc_reshuffle: + src = _mm256_permutevar8x32_epi32(src, _mm256_setr_epi32(0, 0, 1, 2, 3, 4, 5, 6)); + + // Reshuffle, translate, store: + src = enc_reshuffle(src); + src = enc_translate(src); + _mm256_storeu_si256((__m256i *) *o, src); + + // Subsequent loads will be done at s - 4, set pointer for next round: + *s += 20; + *o += 32; +} + +static inline void +enc_loop_avx2_inner (const uint8_t **s, uint8_t **o) +{ + // Load input: + __m256i src = _mm256_loadu_si256((__m256i *) *s); + + // Reshuffle, translate, store: + src = enc_reshuffle(src); + src = enc_translate(src); + _mm256_storeu_si256((__m256i *) *o, src); + + *s += 24; + *o += 32; +} + +static inline void +enc_loop_avx2 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + if (*slen < 32) { + return; + } + + // Process blocks of 24 bytes at a time. Because blocks are loaded 32 + // bytes at a time an offset of -4, ensure that there will be at least + // 4 remaining bytes after the last round, so that the final read will + // not pass beyond the bounds of the input buffer: + size_t rounds = (*slen - 4) / 24; + + *slen -= rounds * 24; // 24 bytes consumed per round + *olen += rounds * 32; // 32 bytes produced per round + + // The first loop iteration requires special handling to ensure that + // the read, which is done at an offset, does not underflow the buffer: + enc_loop_avx2_inner_first(s, o); + rounds--; + + while (rounds > 0) { + if (rounds >= 8) { + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + rounds -= 8; + continue; + } + if (rounds >= 4) { + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + rounds -= 4; + continue; + } + if (rounds >= 2) { + enc_loop_avx2_inner(s, o); + enc_loop_avx2_inner(s, o); + rounds -= 2; + continue; + } + enc_loop_avx2_inner(s, o); + break; + } + + // Add the offset back: + *s += 4; +} diff --git a/deps/base64/base64/lib/arch/avx2/enc_reshuffle.c b/deps/base64/base64/lib/arch/avx2/enc_reshuffle.c new file mode 100644 index 00000000000..ba166903e9e --- /dev/null +++ b/deps/base64/base64/lib/arch/avx2/enc_reshuffle.c @@ -0,0 +1,83 @@ +static inline __m256i +enc_reshuffle (const __m256i input) +{ + // Translation of the SSSE3 reshuffling algorithm to AVX2. This one + // works with shifted (4 bytes) input in order to be able to work + // efficiently in the two 128-bit lanes. + + // Input, bytes MSB to LSB: + // 0 0 0 0 x w v u t s r q p o n m + // l k j i h g f e d c b a 0 0 0 0 + + const __m256i in = _mm256_shuffle_epi8(input, _mm256_set_epi8( + 10, 11, 9, 10, + 7, 8, 6, 7, + 4, 5, 3, 4, + 1, 2, 0, 1, + + 14, 15, 13, 14, + 11, 12, 10, 11, + 8, 9, 7, 8, + 5, 6, 4, 5)); + // in, bytes MSB to LSB: + // w x v w + // t u s t + // q r p q + // n o m n + // k l j k + // h i g h + // e f d e + // b c a b + + const __m256i t0 = _mm256_and_si256(in, _mm256_set1_epi32(0x0FC0FC00)); + // bits, upper case are most significant bits, lower case are least + // significant bits. + // 0000wwww XX000000 VVVVVV00 00000000 + // 0000tttt UU000000 SSSSSS00 00000000 + // 0000qqqq RR000000 PPPPPP00 00000000 + // 0000nnnn OO000000 MMMMMM00 00000000 + // 0000kkkk LL000000 JJJJJJ00 00000000 + // 0000hhhh II000000 GGGGGG00 00000000 + // 0000eeee FF000000 DDDDDD00 00000000 + // 0000bbbb CC000000 AAAAAA00 00000000 + + const __m256i t1 = _mm256_mulhi_epu16(t0, _mm256_set1_epi32(0x04000040)); + // 00000000 00wwwwXX 00000000 00VVVVVV + // 00000000 00ttttUU 00000000 00SSSSSS + // 00000000 00qqqqRR 00000000 00PPPPPP + // 00000000 00nnnnOO 00000000 00MMMMMM + // 00000000 00kkkkLL 00000000 00JJJJJJ + // 00000000 00hhhhII 00000000 00GGGGGG + // 00000000 00eeeeFF 00000000 00DDDDDD + // 00000000 00bbbbCC 00000000 00AAAAAA + + const __m256i t2 = _mm256_and_si256(in, _mm256_set1_epi32(0x003F03F0)); + // 00000000 00xxxxxx 000000vv WWWW0000 + // 00000000 00uuuuuu 000000ss TTTT0000 + // 00000000 00rrrrrr 000000pp QQQQ0000 + // 00000000 00oooooo 000000mm NNNN0000 + // 00000000 00llllll 000000jj KKKK0000 + // 00000000 00iiiiii 000000gg HHHH0000 + // 00000000 00ffffff 000000dd EEEE0000 + // 00000000 00cccccc 000000aa BBBB0000 + + const __m256i t3 = _mm256_mullo_epi16(t2, _mm256_set1_epi32(0x01000010)); + // 00xxxxxx 00000000 00vvWWWW 00000000 + // 00uuuuuu 00000000 00ssTTTT 00000000 + // 00rrrrrr 00000000 00ppQQQQ 00000000 + // 00oooooo 00000000 00mmNNNN 00000000 + // 00llllll 00000000 00jjKKKK 00000000 + // 00iiiiii 00000000 00ggHHHH 00000000 + // 00ffffff 00000000 00ddEEEE 00000000 + // 00cccccc 00000000 00aaBBBB 00000000 + + return _mm256_or_si256(t1, t3); + // 00xxxxxx 00wwwwXX 00vvWWWW 00VVVVVV + // 00uuuuuu 00ttttUU 00ssTTTT 00SSSSSS + // 00rrrrrr 00qqqqRR 00ppQQQQ 00PPPPPP + // 00oooooo 00nnnnOO 00mmNNNN 00MMMMMM + // 00llllll 00kkkkLL 00jjKKKK 00JJJJJJ + // 00iiiiii 00hhhhII 00ggHHHH 00GGGGGG + // 00ffffff 00eeeeFF 00ddEEEE 00DDDDDD + // 00cccccc 00bbbbCC 00aaBBBB 00AAAAAA +} diff --git a/deps/base64/base64/lib/arch/avx2/enc_translate.c b/deps/base64/base64/lib/arch/avx2/enc_translate.c new file mode 100644 index 00000000000..46173cd1f0c --- /dev/null +++ b/deps/base64/base64/lib/arch/avx2/enc_translate.c @@ -0,0 +1,30 @@ +static inline __m256i +enc_translate (const __m256i in) +{ + // A lookup table containing the absolute offsets for all ranges: + const __m256i lut = _mm256_setr_epi8( + 65, 71, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -19, -16, 0, 0, + 65, 71, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -19, -16, 0, 0); + + // Translate values 0..63 to the Base64 alphabet. There are five sets: + // # From To Abs Index Characters + // 0 [0..25] [65..90] +65 0 ABCDEFGHIJKLMNOPQRSTUVWXYZ + // 1 [26..51] [97..122] +71 1 abcdefghijklmnopqrstuvwxyz + // 2 [52..61] [48..57] -4 [2..11] 0123456789 + // 3 [62] [43] -19 12 + + // 4 [63] [47] -16 13 / + + // Create LUT indices from the input. The index for range #0 is right, + // others are 1 less than expected: + __m256i indices = _mm256_subs_epu8(in, _mm256_set1_epi8(51)); + + // mask is 0xFF (-1) for range #[1..4] and 0x00 for range #0: + const __m256i mask = _mm256_cmpgt_epi8(in, _mm256_set1_epi8(25)); + + // Subtract -1, so add 1 to indices for range #[1..4]. All indices are + // now correct: + indices = _mm256_sub_epi8(indices, mask); + + // Add offsets to input values: + return _mm256_add_epi8(in, _mm256_shuffle_epi8(lut, indices)); +} diff --git a/deps/base64/base64/lib/arch/generic/32/dec_loop.c b/deps/base64/base64/lib/arch/generic/32/dec_loop.c new file mode 100644 index 00000000000..8a8260f25e4 --- /dev/null +++ b/deps/base64/base64/lib/arch/generic/32/dec_loop.c @@ -0,0 +1,86 @@ +static inline int +dec_loop_generic_32_inner (const uint8_t **s, uint8_t **o, size_t *rounds) +{ + const uint32_t str + = base64_table_dec_32bit_d0[(*s)[0]] + | base64_table_dec_32bit_d1[(*s)[1]] + | base64_table_dec_32bit_d2[(*s)[2]] + | base64_table_dec_32bit_d3[(*s)[3]]; + +#if BASE64_LITTLE_ENDIAN + + // LUTs for little-endian set MSB in case of invalid character: + if (str & UINT32_C(0x80000000)) { + return 0; + } +#else + // LUTs for big-endian set LSB in case of invalid character: + if (str & UINT32_C(1)) { + return 0; + } +#endif + // Store the output: + memcpy(*o, &str, sizeof (str)); + + *s += 4; + *o += 3; + *rounds -= 1; + + return 1; +} + +static inline void +dec_loop_generic_32 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + if (*slen < 8) { + return; + } + + // Process blocks of 4 bytes per round. Because one extra zero byte is + // written after the output, ensure that there will be at least 4 bytes + // of input data left to cover the gap. (Two data bytes and up to two + // end-of-string markers.) + size_t rounds = (*slen - 4) / 4; + + *slen -= rounds * 4; // 4 bytes consumed per round + *olen += rounds * 3; // 3 bytes produced per round + + do { + if (rounds >= 8) { + if (dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds)) { + continue; + } + break; + } + if (rounds >= 4) { + if (dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds)) { + continue; + } + break; + } + if (rounds >= 2) { + if (dec_loop_generic_32_inner(s, o, &rounds) && + dec_loop_generic_32_inner(s, o, &rounds)) { + continue; + } + break; + } + dec_loop_generic_32_inner(s, o, &rounds); + break; + + } while (rounds > 0); + + // Adjust for any rounds that were skipped: + *slen += rounds * 4; + *olen -= rounds * 3; +} diff --git a/deps/base64/base64/lib/arch/generic/32/enc_loop.c b/deps/base64/base64/lib/arch/generic/32/enc_loop.c new file mode 100644 index 00000000000..f4870a75dc7 --- /dev/null +++ b/deps/base64/base64/lib/arch/generic/32/enc_loop.c @@ -0,0 +1,73 @@ +static inline void +enc_loop_generic_32_inner (const uint8_t **s, uint8_t **o) +{ + uint32_t src; + + // Load input: + memcpy(&src, *s, sizeof (src)); + + // Reorder to 32-bit big-endian, if not already in that format. The + // workset must be in big-endian, otherwise the shifted bits do not + // carry over properly among adjacent bytes: + src = BASE64_HTOBE32(src); + + // Two indices for the 12-bit lookup table: + const size_t index0 = (src >> 20) & 0xFFFU; + const size_t index1 = (src >> 8) & 0xFFFU; + + // Table lookup and store: + memcpy(*o + 0, base64_table_enc_12bit + index0, 2); + memcpy(*o + 2, base64_table_enc_12bit + index1, 2); + + *s += 3; + *o += 4; +} + +static inline void +enc_loop_generic_32 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + if (*slen < 4) { + return; + } + + // Process blocks of 3 bytes at a time. Because blocks are loaded 4 + // bytes at a time, ensure that there will be at least one remaining + // byte after the last round, so that the final read will not pass + // beyond the bounds of the input buffer: + size_t rounds = (*slen - 1) / 3; + + *slen -= rounds * 3; // 3 bytes consumed per round + *olen += rounds * 4; // 4 bytes produced per round + + do { + if (rounds >= 8) { + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + rounds -= 8; + continue; + } + if (rounds >= 4) { + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + rounds -= 4; + continue; + } + if (rounds >= 2) { + enc_loop_generic_32_inner(s, o); + enc_loop_generic_32_inner(s, o); + rounds -= 2; + continue; + } + enc_loop_generic_32_inner(s, o); + break; + + } while (rounds > 0); +} diff --git a/deps/base64/base64/lib/arch/generic/64/enc_loop.c b/deps/base64/base64/lib/arch/generic/64/enc_loop.c new file mode 100644 index 00000000000..0840bc73c50 --- /dev/null +++ b/deps/base64/base64/lib/arch/generic/64/enc_loop.c @@ -0,0 +1,77 @@ +static inline void +enc_loop_generic_64_inner (const uint8_t **s, uint8_t **o) +{ + uint64_t src; + + // Load input: + memcpy(&src, *s, sizeof (src)); + + // Reorder to 64-bit big-endian, if not already in that format. The + // workset must be in big-endian, otherwise the shifted bits do not + // carry over properly among adjacent bytes: + src = BASE64_HTOBE64(src); + + // Four indices for the 12-bit lookup table: + const size_t index0 = (src >> 52) & 0xFFFU; + const size_t index1 = (src >> 40) & 0xFFFU; + const size_t index2 = (src >> 28) & 0xFFFU; + const size_t index3 = (src >> 16) & 0xFFFU; + + // Table lookup and store: + memcpy(*o + 0, base64_table_enc_12bit + index0, 2); + memcpy(*o + 2, base64_table_enc_12bit + index1, 2); + memcpy(*o + 4, base64_table_enc_12bit + index2, 2); + memcpy(*o + 6, base64_table_enc_12bit + index3, 2); + + *s += 6; + *o += 8; +} + +static inline void +enc_loop_generic_64 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + if (*slen < 8) { + return; + } + + // Process blocks of 6 bytes at a time. Because blocks are loaded 8 + // bytes at a time, ensure that there will be at least 2 remaining + // bytes after the last round, so that the final read will not pass + // beyond the bounds of the input buffer: + size_t rounds = (*slen - 2) / 6; + + *slen -= rounds * 6; // 6 bytes consumed per round + *olen += rounds * 8; // 8 bytes produced per round + + do { + if (rounds >= 8) { + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + rounds -= 8; + continue; + } + if (rounds >= 4) { + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + rounds -= 4; + continue; + } + if (rounds >= 2) { + enc_loop_generic_64_inner(s, o); + enc_loop_generic_64_inner(s, o); + rounds -= 2; + continue; + } + enc_loop_generic_64_inner(s, o); + break; + + } while (rounds > 0); +} diff --git a/deps/base64/base64/lib/arch/generic/codec.c b/deps/base64/base64/lib/arch/generic/codec.c new file mode 100644 index 00000000000..8dd5af23594 --- /dev/null +++ b/deps/base64/base64/lib/arch/generic/codec.c @@ -0,0 +1,39 @@ +#include +#include +#include + +#include "../../../include/libbase64.h" +#include "../../tables/tables.h" +#include "../../codecs.h" +#include "config.h" +#include "../../env.h" + +#if BASE64_WORDSIZE == 32 +# include "32/enc_loop.c" +#elif BASE64_WORDSIZE == 64 +# include "64/enc_loop.c" +#endif + +#if BASE64_WORDSIZE >= 32 +# include "32/dec_loop.c" +#endif + +BASE64_ENC_FUNCTION(plain) +{ + #include "enc_head.c" +#if BASE64_WORDSIZE == 32 + enc_loop_generic_32(&s, &slen, &o, &olen); +#elif BASE64_WORDSIZE == 64 + enc_loop_generic_64(&s, &slen, &o, &olen); +#endif + #include "enc_tail.c" +} + +BASE64_DEC_FUNCTION(plain) +{ + #include "dec_head.c" +#if BASE64_WORDSIZE >= 32 + dec_loop_generic_32(&s, &slen, &o, &olen); +#endif + #include "dec_tail.c" +} diff --git a/deps/base64/base64/lib/arch/generic/dec_head.c b/deps/base64/base64/lib/arch/generic/dec_head.c new file mode 100644 index 00000000000..179a31b63ff --- /dev/null +++ b/deps/base64/base64/lib/arch/generic/dec_head.c @@ -0,0 +1,37 @@ +int ret = 0; +const uint8_t *s = (const uint8_t *) src; +uint8_t *o = (uint8_t *) out; +uint8_t q; + +// Use local temporaries to avoid cache thrashing: +size_t olen = 0; +size_t slen = srclen; +struct base64_state st; +st.eof = state->eof; +st.bytes = state->bytes; +st.carry = state->carry; + +// If we previously saw an EOF or an invalid character, bail out: +if (st.eof) { + *outlen = 0; + ret = 0; + // If there was a trailing '=' to check, check it: + if (slen && (st.eof == BASE64_AEOF)) { + state->bytes = 0; + state->eof = BASE64_EOF; + ret = ((base64_table_dec_8bit[*s++] == 254) && (slen == 1)) ? 1 : 0; + } + return ret; +} + +// Turn four 6-bit numbers into three bytes: +// out[0] = 11111122 +// out[1] = 22223333 +// out[2] = 33444444 + +// Duff's device again: +switch (st.bytes) +{ + for (;;) + { + case 0: diff --git a/deps/base64/base64/lib/arch/generic/dec_tail.c b/deps/base64/base64/lib/arch/generic/dec_tail.c new file mode 100644 index 00000000000..e64f7247f3f --- /dev/null +++ b/deps/base64/base64/lib/arch/generic/dec_tail.c @@ -0,0 +1,91 @@ + if (slen-- == 0) { + ret = 1; + break; + } + if ((q = base64_table_dec_8bit[*s++]) >= 254) { + st.eof = BASE64_EOF; + // Treat character '=' as invalid for byte 0: + break; + } + st.carry = q << 2; + st.bytes++; + + // Deliberate fallthrough: + BASE64_FALLTHROUGH + + case 1: if (slen-- == 0) { + ret = 1; + break; + } + if ((q = base64_table_dec_8bit[*s++]) >= 254) { + st.eof = BASE64_EOF; + // Treat character '=' as invalid for byte 1: + break; + } + *o++ = st.carry | (q >> 4); + st.carry = q << 4; + st.bytes++; + olen++; + + // Deliberate fallthrough: + BASE64_FALLTHROUGH + + case 2: if (slen-- == 0) { + ret = 1; + break; + } + if ((q = base64_table_dec_8bit[*s++]) >= 254) { + st.bytes++; + // When q == 254, the input char is '='. + // Check if next byte is also '=': + if (q == 254) { + if (slen-- != 0) { + st.bytes = 0; + // EOF: + st.eof = BASE64_EOF; + q = base64_table_dec_8bit[*s++]; + ret = ((q == 254) && (slen == 0)) ? 1 : 0; + break; + } + else { + // Almost EOF + st.eof = BASE64_AEOF; + ret = 1; + break; + } + } + // If we get here, there was an error: + break; + } + *o++ = st.carry | (q >> 2); + st.carry = q << 6; + st.bytes++; + olen++; + + // Deliberate fallthrough: + BASE64_FALLTHROUGH + + case 3: if (slen-- == 0) { + ret = 1; + break; + } + if ((q = base64_table_dec_8bit[*s++]) >= 254) { + st.bytes = 0; + st.eof = BASE64_EOF; + // When q == 254, the input char is '='. Return 1 and EOF. + // When q == 255, the input char is invalid. Return 0 and EOF. + ret = ((q == 254) && (slen == 0)) ? 1 : 0; + break; + } + *o++ = st.carry | q; + st.carry = 0; + st.bytes = 0; + olen++; + } +} + +state->eof = st.eof; +state->bytes = st.bytes; +state->carry = st.carry; +*outlen = olen; +return ret; diff --git a/deps/base64/base64/lib/arch/generic/enc_head.c b/deps/base64/base64/lib/arch/generic/enc_head.c new file mode 100644 index 00000000000..38d60b2c62b --- /dev/null +++ b/deps/base64/base64/lib/arch/generic/enc_head.c @@ -0,0 +1,24 @@ +// Assume that *out is large enough to contain the output. +// Theoretically it should be 4/3 the length of src. +const uint8_t *s = (const uint8_t *) src; +uint8_t *o = (uint8_t *) out; + +// Use local temporaries to avoid cache thrashing: +size_t olen = 0; +size_t slen = srclen; +struct base64_state st; +st.bytes = state->bytes; +st.carry = state->carry; + +// Turn three bytes into four 6-bit numbers: +// in[0] = 00111111 +// in[1] = 00112222 +// in[2] = 00222233 +// in[3] = 00333333 + +// Duff's device, a for() loop inside a switch() statement. Legal! +switch (st.bytes) +{ + for (;;) + { + case 0: diff --git a/deps/base64/base64/lib/arch/generic/enc_tail.c b/deps/base64/base64/lib/arch/generic/enc_tail.c new file mode 100644 index 00000000000..cbd57337681 --- /dev/null +++ b/deps/base64/base64/lib/arch/generic/enc_tail.c @@ -0,0 +1,34 @@ + if (slen-- == 0) { + break; + } + *o++ = base64_table_enc_6bit[*s >> 2]; + st.carry = (*s++ << 4) & 0x30; + st.bytes++; + olen += 1; + + // Deliberate fallthrough: + BASE64_FALLTHROUGH + + case 1: if (slen-- == 0) { + break; + } + *o++ = base64_table_enc_6bit[st.carry | (*s >> 4)]; + st.carry = (*s++ << 2) & 0x3C; + st.bytes++; + olen += 1; + + // Deliberate fallthrough: + BASE64_FALLTHROUGH + + case 2: if (slen-- == 0) { + break; + } + *o++ = base64_table_enc_6bit[st.carry | (*s >> 6)]; + *o++ = base64_table_enc_6bit[*s++ & 0x3F]; + st.bytes = 0; + olen += 2; + } +} +state->bytes = st.bytes; +state->carry = st.carry; +*outlen = olen; diff --git a/deps/base64/base64/lib/arch/neon32/codec.c b/deps/base64/base64/lib/arch/neon32/codec.c new file mode 100644 index 00000000000..a0b27f9ff6a --- /dev/null +++ b/deps/base64/base64/lib/arch/neon32/codec.c @@ -0,0 +1,77 @@ +#include +#include +#include + +#include "../../../include/libbase64.h" +#include "../../tables/tables.h" +#include "../../codecs.h" +#include "config.h" +#include "../../env.h" + +#ifdef __arm__ +# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && HAVE_NEON32 +# define BASE64_USE_NEON32 +# endif +#endif + +#ifdef BASE64_USE_NEON32 +#include + +// Only enable inline assembly on supported compilers. +#if defined(__GNUC__) || defined(__clang__) +#define BASE64_NEON32_USE_ASM +#endif + +static inline uint8x16_t +vqtbl1q_u8 (const uint8x16_t lut, const uint8x16_t indices) +{ + // NEON32 only supports 64-bit wide lookups in 128-bit tables. Emulate + // the NEON64 `vqtbl1q_u8` intrinsic to do 128-bit wide lookups. + uint8x8x2_t lut2; + uint8x8x2_t result; + + lut2.val[0] = vget_low_u8(lut); + lut2.val[1] = vget_high_u8(lut); + + result.val[0] = vtbl2_u8(lut2, vget_low_u8(indices)); + result.val[1] = vtbl2_u8(lut2, vget_high_u8(indices)); + + return vcombine_u8(result.val[0], result.val[1]); +} + +#include "../generic/32/dec_loop.c" +#include "../generic/32/enc_loop.c" +#include "dec_loop.c" +#include "enc_reshuffle.c" +#include "enc_translate.c" +#include "enc_loop.c" + +#endif // BASE64_USE_NEON32 + +// Stride size is so large on these NEON 32-bit functions +// (48 bytes encode, 32 bytes decode) that we inline the +// uint32 codec to stay performant on smaller inputs. + +BASE64_ENC_FUNCTION(neon32) +{ +#ifdef BASE64_USE_NEON32 + #include "../generic/enc_head.c" + enc_loop_neon32(&s, &slen, &o, &olen); + enc_loop_generic_32(&s, &slen, &o, &olen); + #include "../generic/enc_tail.c" +#else + BASE64_ENC_STUB +#endif +} + +BASE64_DEC_FUNCTION(neon32) +{ +#ifdef BASE64_USE_NEON32 + #include "../generic/dec_head.c" + dec_loop_neon32(&s, &slen, &o, &olen); + dec_loop_generic_32(&s, &slen, &o, &olen); + #include "../generic/dec_tail.c" +#else + BASE64_DEC_STUB +#endif +} diff --git a/deps/base64/base64/lib/arch/neon32/dec_loop.c b/deps/base64/base64/lib/arch/neon32/dec_loop.c new file mode 100644 index 00000000000..2216b39599d --- /dev/null +++ b/deps/base64/base64/lib/arch/neon32/dec_loop.c @@ -0,0 +1,106 @@ +static inline int +is_nonzero (const uint8x16_t v) +{ + uint64_t u64; + const uint64x2_t v64 = vreinterpretq_u64_u8(v); + const uint32x2_t v32 = vqmovn_u64(v64); + + vst1_u64(&u64, vreinterpret_u64_u32(v32)); + return u64 != 0; +} + +static inline uint8x16_t +delta_lookup (const uint8x16_t v) +{ + const uint8x8_t lut = { + 0, 16, 19, 4, (uint8_t) -65, (uint8_t) -65, (uint8_t) -71, (uint8_t) -71, + }; + + return vcombine_u8( + vtbl1_u8(lut, vget_low_u8(v)), + vtbl1_u8(lut, vget_high_u8(v))); +} + +static inline uint8x16_t +dec_loop_neon32_lane (uint8x16_t *lane) +{ + // See the SSSE3 decoder for an explanation of the algorithm. + const uint8x16_t lut_lo = { + 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x13, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A + }; + + const uint8x16_t lut_hi = { + 0x10, 0x10, 0x01, 0x02, 0x04, 0x08, 0x04, 0x08, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 + }; + + const uint8x16_t mask_0F = vdupq_n_u8(0x0F); + const uint8x16_t mask_2F = vdupq_n_u8(0x2F); + + const uint8x16_t hi_nibbles = vshrq_n_u8(*lane, 4); + const uint8x16_t lo_nibbles = vandq_u8(*lane, mask_0F); + const uint8x16_t eq_2F = vceqq_u8(*lane, mask_2F); + + const uint8x16_t hi = vqtbl1q_u8(lut_hi, hi_nibbles); + const uint8x16_t lo = vqtbl1q_u8(lut_lo, lo_nibbles); + + // Now simply add the delta values to the input: + *lane = vaddq_u8(*lane, delta_lookup(vaddq_u8(eq_2F, hi_nibbles))); + + // Return the validity mask: + return vandq_u8(lo, hi); +} + +static inline void +dec_loop_neon32 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + if (*slen < 64) { + return; + } + + // Process blocks of 64 bytes per round. Unlike the SSE codecs, no + // extra trailing zero bytes are written, so it is not necessary to + // reserve extra input bytes: + size_t rounds = *slen / 64; + + *slen -= rounds * 64; // 64 bytes consumed per round + *olen += rounds * 48; // 48 bytes produced per round + + do { + uint8x16x3_t dec; + + // Load 64 bytes and deinterleave: + uint8x16x4_t str = vld4q_u8(*s); + + // Decode each lane, collect a mask of invalid inputs: + const uint8x16_t classified + = dec_loop_neon32_lane(&str.val[0]) + | dec_loop_neon32_lane(&str.val[1]) + | dec_loop_neon32_lane(&str.val[2]) + | dec_loop_neon32_lane(&str.val[3]); + + // Check for invalid input: if any of the delta values are + // zero, fall back on bytewise code to do error checking and + // reporting: + if (is_nonzero(classified)) { + break; + } + + // Compress four bytes into three: + dec.val[0] = vorrq_u8(vshlq_n_u8(str.val[0], 2), vshrq_n_u8(str.val[1], 4)); + dec.val[1] = vorrq_u8(vshlq_n_u8(str.val[1], 4), vshrq_n_u8(str.val[2], 2)); + dec.val[2] = vorrq_u8(vshlq_n_u8(str.val[2], 6), str.val[3]); + + // Interleave and store decoded result: + vst3q_u8(*o, dec); + + *s += 64; + *o += 48; + + } while (--rounds > 0); + + // Adjust for any rounds that were skipped: + *slen += rounds * 64; + *olen -= rounds * 48; +} diff --git a/deps/base64/base64/lib/arch/neon32/enc_loop.c b/deps/base64/base64/lib/arch/neon32/enc_loop.c new file mode 100644 index 00000000000..e9e8e285256 --- /dev/null +++ b/deps/base64/base64/lib/arch/neon32/enc_loop.c @@ -0,0 +1,169 @@ +#ifdef BASE64_NEON32_USE_ASM +static inline void +enc_loop_neon32_inner_asm (const uint8_t **s, uint8_t **o) +{ + // This function duplicates the functionality of enc_loop_neon32_inner, + // but entirely with inline assembly. This gives a significant speedup + // over using NEON intrinsics, which do not always generate very good + // code. The logic of the assembly is directly lifted from the + // intrinsics version, so it can be used as a guide to this code. + + // Temporary registers, used as scratch space. + uint8x16_t tmp0, tmp1, tmp2, tmp3; + uint8x16_t mask0, mask1, mask2, mask3; + + // A lookup table containing the absolute offsets for all ranges. + const uint8x16_t lut = { + 65U, 71U, 252U, 252U, + 252U, 252U, 252U, 252U, + 252U, 252U, 252U, 252U, + 237U, 240U, 0U, 0U + }; + + // Numeric constants. + const uint8x16_t n51 = vdupq_n_u8(51); + const uint8x16_t n25 = vdupq_n_u8(25); + const uint8x16_t n63 = vdupq_n_u8(63); + + __asm__ ( + + // Load 48 bytes and deinterleave. The bytes are loaded to + // hard-coded registers q12, q13 and q14, to ensure that they + // are contiguous. Increment the source pointer. + "vld3.8 {d24, d26, d28}, [%[src]]! \n\t" + "vld3.8 {d25, d27, d29}, [%[src]]! \n\t" + + // Reshuffle the bytes using temporaries. + "vshr.u8 %q[t0], q12, #2 \n\t" + "vshr.u8 %q[t1], q13, #4 \n\t" + "vshr.u8 %q[t2], q14, #6 \n\t" + "vsli.8 %q[t1], q12, #4 \n\t" + "vsli.8 %q[t2], q13, #2 \n\t" + "vand.u8 %q[t1], %q[t1], %q[n63] \n\t" + "vand.u8 %q[t2], %q[t2], %q[n63] \n\t" + "vand.u8 %q[t3], q14, %q[n63] \n\t" + + // t0..t3 are the reshuffled inputs. Create LUT indices. + "vqsub.u8 q12, %q[t0], %q[n51] \n\t" + "vqsub.u8 q13, %q[t1], %q[n51] \n\t" + "vqsub.u8 q14, %q[t2], %q[n51] \n\t" + "vqsub.u8 q15, %q[t3], %q[n51] \n\t" + + // Create the mask for range #0. + "vcgt.u8 %q[m0], %q[t0], %q[n25] \n\t" + "vcgt.u8 %q[m1], %q[t1], %q[n25] \n\t" + "vcgt.u8 %q[m2], %q[t2], %q[n25] \n\t" + "vcgt.u8 %q[m3], %q[t3], %q[n25] \n\t" + + // Subtract -1 to correct the LUT indices. + "vsub.u8 q12, %q[m0] \n\t" + "vsub.u8 q13, %q[m1] \n\t" + "vsub.u8 q14, %q[m2] \n\t" + "vsub.u8 q15, %q[m3] \n\t" + + // Lookup the delta values. + "vtbl.u8 d24, {%q[lut]}, d24 \n\t" + "vtbl.u8 d25, {%q[lut]}, d25 \n\t" + "vtbl.u8 d26, {%q[lut]}, d26 \n\t" + "vtbl.u8 d27, {%q[lut]}, d27 \n\t" + "vtbl.u8 d28, {%q[lut]}, d28 \n\t" + "vtbl.u8 d29, {%q[lut]}, d29 \n\t" + "vtbl.u8 d30, {%q[lut]}, d30 \n\t" + "vtbl.u8 d31, {%q[lut]}, d31 \n\t" + + // Add the delta values. + "vadd.u8 q12, %q[t0] \n\t" + "vadd.u8 q13, %q[t1] \n\t" + "vadd.u8 q14, %q[t2] \n\t" + "vadd.u8 q15, %q[t3] \n\t" + + // Store 64 bytes and interleave. Increment the dest pointer. + "vst4.8 {d24, d26, d28, d30}, [%[dst]]! \n\t" + "vst4.8 {d25, d27, d29, d31}, [%[dst]]! \n\t" + + // Outputs (modified). + : [src] "+r" (*s), + [dst] "+r" (*o), + [t0] "=&w" (tmp0), + [t1] "=&w" (tmp1), + [t2] "=&w" (tmp2), + [t3] "=&w" (tmp3), + [m0] "=&w" (mask0), + [m1] "=&w" (mask1), + [m2] "=&w" (mask2), + [m3] "=&w" (mask3) + + // Inputs (not modified). + : [lut] "w" (lut), + [n25] "w" (n25), + [n51] "w" (n51), + [n63] "w" (n63) + + // Clobbers. + : "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31" + ); +} +#endif + +static inline void +enc_loop_neon32_inner (const uint8_t **s, uint8_t **o) +{ +#ifdef BASE64_NEON32_USE_ASM + enc_loop_neon32_inner_asm(s, o); +#else + // Load 48 bytes and deinterleave: + uint8x16x3_t src = vld3q_u8(*s); + + // Reshuffle: + uint8x16x4_t out = enc_reshuffle(src); + + // Translate reshuffled bytes to the Base64 alphabet: + out = enc_translate(out); + + // Interleave and store output: + vst4q_u8(*o, out); + + *s += 48; + *o += 64; +#endif +} + +static inline void +enc_loop_neon32 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + size_t rounds = *slen / 48; + + *slen -= rounds * 48; // 48 bytes consumed per round + *olen += rounds * 64; // 64 bytes produced per round + + while (rounds > 0) { + if (rounds >= 8) { + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + rounds -= 8; + continue; + } + if (rounds >= 4) { + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + rounds -= 4; + continue; + } + if (rounds >= 2) { + enc_loop_neon32_inner(s, o); + enc_loop_neon32_inner(s, o); + rounds -= 2; + continue; + } + enc_loop_neon32_inner(s, o); + break; + } +} diff --git a/deps/base64/base64/lib/arch/neon32/enc_reshuffle.c b/deps/base64/base64/lib/arch/neon32/enc_reshuffle.c new file mode 100644 index 00000000000..d6e97cb5f81 --- /dev/null +++ b/deps/base64/base64/lib/arch/neon32/enc_reshuffle.c @@ -0,0 +1,31 @@ +static inline uint8x16x4_t +enc_reshuffle (uint8x16x3_t in) +{ + uint8x16x4_t out; + + // Input: + // in[0] = a7 a6 a5 a4 a3 a2 a1 a0 + // in[1] = b7 b6 b5 b4 b3 b2 b1 b0 + // in[2] = c7 c6 c5 c4 c3 c2 c1 c0 + + // Output: + // out[0] = 00 00 a7 a6 a5 a4 a3 a2 + // out[1] = 00 00 a1 a0 b7 b6 b5 b4 + // out[2] = 00 00 b3 b2 b1 b0 c7 c6 + // out[3] = 00 00 c5 c4 c3 c2 c1 c0 + + // Move the input bits to where they need to be in the outputs. Except + // for the first output, the high two bits are not cleared. + out.val[0] = vshrq_n_u8(in.val[0], 2); + out.val[1] = vshrq_n_u8(in.val[1], 4); + out.val[2] = vshrq_n_u8(in.val[2], 6); + out.val[1] = vsliq_n_u8(out.val[1], in.val[0], 4); + out.val[2] = vsliq_n_u8(out.val[2], in.val[1], 2); + + // Clear the high two bits in the second, third and fourth output. + out.val[1] = vandq_u8(out.val[1], vdupq_n_u8(0x3F)); + out.val[2] = vandq_u8(out.val[2], vdupq_n_u8(0x3F)); + out.val[3] = vandq_u8(in.val[2], vdupq_n_u8(0x3F)); + + return out; +} diff --git a/deps/base64/base64/lib/arch/neon32/enc_translate.c b/deps/base64/base64/lib/arch/neon32/enc_translate.c new file mode 100644 index 00000000000..e616d54bc15 --- /dev/null +++ b/deps/base64/base64/lib/arch/neon32/enc_translate.c @@ -0,0 +1,57 @@ +static inline uint8x16x4_t +enc_translate (const uint8x16x4_t in) +{ + // A lookup table containing the absolute offsets for all ranges: + const uint8x16_t lut = { + 65U, 71U, 252U, 252U, + 252U, 252U, 252U, 252U, + 252U, 252U, 252U, 252U, + 237U, 240U, 0U, 0U + }; + + const uint8x16_t offset = vdupq_n_u8(51); + + uint8x16x4_t indices, mask, delta, out; + + // Translate values 0..63 to the Base64 alphabet. There are five sets: + // # From To Abs Index Characters + // 0 [0..25] [65..90] +65 0 ABCDEFGHIJKLMNOPQRSTUVWXYZ + // 1 [26..51] [97..122] +71 1 abcdefghijklmnopqrstuvwxyz + // 2 [52..61] [48..57] -4 [2..11] 0123456789 + // 3 [62] [43] -19 12 + + // 4 [63] [47] -16 13 / + + // Create LUT indices from input: + // the index for range #0 is right, others are 1 less than expected: + indices.val[0] = vqsubq_u8(in.val[0], offset); + indices.val[1] = vqsubq_u8(in.val[1], offset); + indices.val[2] = vqsubq_u8(in.val[2], offset); + indices.val[3] = vqsubq_u8(in.val[3], offset); + + // mask is 0xFF (-1) for range #[1..4] and 0x00 for range #0: + mask.val[0] = vcgtq_u8(in.val[0], vdupq_n_u8(25)); + mask.val[1] = vcgtq_u8(in.val[1], vdupq_n_u8(25)); + mask.val[2] = vcgtq_u8(in.val[2], vdupq_n_u8(25)); + mask.val[3] = vcgtq_u8(in.val[3], vdupq_n_u8(25)); + + // Subtract -1, so add 1 to indices for range #[1..4], All indices are + // now correct: + indices.val[0] = vsubq_u8(indices.val[0], mask.val[0]); + indices.val[1] = vsubq_u8(indices.val[1], mask.val[1]); + indices.val[2] = vsubq_u8(indices.val[2], mask.val[2]); + indices.val[3] = vsubq_u8(indices.val[3], mask.val[3]); + + // Lookup delta values: + delta.val[0] = vqtbl1q_u8(lut, indices.val[0]); + delta.val[1] = vqtbl1q_u8(lut, indices.val[1]); + delta.val[2] = vqtbl1q_u8(lut, indices.val[2]); + delta.val[3] = vqtbl1q_u8(lut, indices.val[3]); + + // Add delta values: + out.val[0] = vaddq_u8(in.val[0], delta.val[0]); + out.val[1] = vaddq_u8(in.val[1], delta.val[1]); + out.val[2] = vaddq_u8(in.val[2], delta.val[2]); + out.val[3] = vaddq_u8(in.val[3], delta.val[3]); + + return out; +} diff --git a/deps/base64/base64/lib/arch/neon64/codec.c b/deps/base64/base64/lib/arch/neon64/codec.c new file mode 100644 index 00000000000..79789bb7d0e --- /dev/null +++ b/deps/base64/base64/lib/arch/neon64/codec.c @@ -0,0 +1,97 @@ +#include +#include +#include + +#include "../../../include/libbase64.h" +#include "../../tables/tables.h" +#include "../../codecs.h" +#include "config.h" +#include "../../env.h" + +#ifdef __aarch64__ +# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && HAVE_NEON64 +# define BASE64_USE_NEON64 +# endif +#endif + +#ifdef BASE64_USE_NEON64 +#include + +// Only enable inline assembly on supported compilers. +#if defined(__GNUC__) || defined(__clang__) +#define BASE64_NEON64_USE_ASM +#endif + +static inline uint8x16x4_t +load_64byte_table (const uint8_t *p) +{ +#ifdef BASE64_NEON64_USE_ASM + + // Force the table to be loaded into contiguous registers. GCC will not + // normally allocate contiguous registers for a `uint8x16x4_t'. These + // registers are chosen to not conflict with the ones in the enc loop. + register uint8x16_t t0 __asm__ ("v8"); + register uint8x16_t t1 __asm__ ("v9"); + register uint8x16_t t2 __asm__ ("v10"); + register uint8x16_t t3 __asm__ ("v11"); + + __asm__ ( + "ld1 {%[t0].16b, %[t1].16b, %[t2].16b, %[t3].16b}, [%[src]], #64 \n\t" + : [src] "+r" (p), + [t0] "=w" (t0), + [t1] "=w" (t1), + [t2] "=w" (t2), + [t3] "=w" (t3) + ); + + return (uint8x16x4_t) { + .val[0] = t0, + .val[1] = t1, + .val[2] = t2, + .val[3] = t3, + }; +#else + return vld1q_u8_x4(p); +#endif +} + +#include "../generic/32/dec_loop.c" +#include "../generic/64/enc_loop.c" +#include "dec_loop.c" + +#ifdef BASE64_NEON64_USE_ASM +# include "enc_loop_asm.c" +#else +# include "enc_reshuffle.c" +# include "enc_loop.c" +#endif + +#endif // BASE64_USE_NEON64 + +// Stride size is so large on these NEON 64-bit functions +// (48 bytes encode, 64 bytes decode) that we inline the +// uint64 codec to stay performant on smaller inputs. + +BASE64_ENC_FUNCTION(neon64) +{ +#ifdef BASE64_USE_NEON64 + #include "../generic/enc_head.c" + enc_loop_neon64(&s, &slen, &o, &olen); + enc_loop_generic_64(&s, &slen, &o, &olen); + #include "../generic/enc_tail.c" +#else + BASE64_ENC_STUB +#endif +} + +BASE64_DEC_FUNCTION(neon64) +{ +#ifdef BASE64_USE_NEON64 + #include "../generic/dec_head.c" + dec_loop_neon64(&s, &slen, &o, &olen); + dec_loop_generic_32(&s, &slen, &o, &olen); + #include "../generic/dec_tail.c" +#else + BASE64_DEC_STUB +#endif +} diff --git a/deps/base64/base64/lib/arch/neon64/dec_loop.c b/deps/base64/base64/lib/arch/neon64/dec_loop.c new file mode 100644 index 00000000000..48232f20492 --- /dev/null +++ b/deps/base64/base64/lib/arch/neon64/dec_loop.c @@ -0,0 +1,129 @@ +// The input consists of five valid character sets in the Base64 alphabet, +// which we need to map back to the 6-bit values they represent. +// There are three ranges, two singles, and then there's the rest. +// +// # From To LUT Characters +// 1 [0..42] [255] #1 invalid input +// 2 [43] [62] #1 + +// 3 [44..46] [255] #1 invalid input +// 4 [47] [63] #1 / +// 5 [48..57] [52..61] #1 0..9 +// 6 [58..63] [255] #1 invalid input +// 7 [64] [255] #2 invalid input +// 8 [65..90] [0..25] #2 A..Z +// 9 [91..96] [255] #2 invalid input +// 10 [97..122] [26..51] #2 a..z +// 11 [123..126] [255] #2 invalid input +// (12) Everything else => invalid input + +// The first LUT will use the VTBL instruction (out of range indices are set to +// 0 in destination). +static const uint8_t dec_lut1[] = { + 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, + 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, + 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 62U, 255U, 255U, 255U, 63U, + 52U, 53U, 54U, 55U, 56U, 57U, 58U, 59U, 60U, 61U, 255U, 255U, 255U, 255U, 255U, 255U, +}; + +// The second LUT will use the VTBX instruction (out of range indices will be +// unchanged in destination). Input [64..126] will be mapped to index [1..63] +// in this LUT. Index 0 means that value comes from LUT #1. +static const uint8_t dec_lut2[] = { + 0U, 255U, 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, + 14U, 15U, 16U, 17U, 18U, 19U, 20U, 21U, 22U, 23U, 24U, 25U, 255U, 255U, 255U, 255U, + 255U, 255U, 26U, 27U, 28U, 29U, 30U, 31U, 32U, 33U, 34U, 35U, 36U, 37U, 38U, 39U, + 40U, 41U, 42U, 43U, 44U, 45U, 46U, 47U, 48U, 49U, 50U, 51U, 255U, 255U, 255U, 255U, +}; + +// All input values in range for the first look-up will be 0U in the second +// look-up result. All input values out of range for the first look-up will be +// 0U in the first look-up result. Thus, the two results can be ORed without +// conflicts. +// +// Invalid characters that are in the valid range for either look-up will be +// set to 255U in the combined result. Other invalid characters will just be +// passed through with the second look-up result (using the VTBX instruction). +// Since the second LUT is 64 bytes, those passed-through values are guaranteed +// to have a value greater than 63U. Therefore, valid characters will be mapped +// to the valid [0..63] range and all invalid characters will be mapped to +// values greater than 63. + +static inline void +dec_loop_neon64 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + if (*slen < 64) { + return; + } + + // Process blocks of 64 bytes per round. Unlike the SSE codecs, no + // extra trailing zero bytes are written, so it is not necessary to + // reserve extra input bytes: + size_t rounds = *slen / 64; + + *slen -= rounds * 64; // 64 bytes consumed per round + *olen += rounds * 48; // 48 bytes produced per round + + const uint8x16x4_t tbl_dec1 = load_64byte_table(dec_lut1); + const uint8x16x4_t tbl_dec2 = load_64byte_table(dec_lut2); + + do { + const uint8x16_t offset = vdupq_n_u8(63U); + uint8x16x4_t dec1, dec2; + uint8x16x3_t dec; + + // Load 64 bytes and deinterleave: + uint8x16x4_t str = vld4q_u8((uint8_t *) *s); + + // Get indices for second LUT: + dec2.val[0] = vqsubq_u8(str.val[0], offset); + dec2.val[1] = vqsubq_u8(str.val[1], offset); + dec2.val[2] = vqsubq_u8(str.val[2], offset); + dec2.val[3] = vqsubq_u8(str.val[3], offset); + + // Get values from first LUT: + dec1.val[0] = vqtbl4q_u8(tbl_dec1, str.val[0]); + dec1.val[1] = vqtbl4q_u8(tbl_dec1, str.val[1]); + dec1.val[2] = vqtbl4q_u8(tbl_dec1, str.val[2]); + dec1.val[3] = vqtbl4q_u8(tbl_dec1, str.val[3]); + + // Get values from second LUT: + dec2.val[0] = vqtbx4q_u8(dec2.val[0], tbl_dec2, dec2.val[0]); + dec2.val[1] = vqtbx4q_u8(dec2.val[1], tbl_dec2, dec2.val[1]); + dec2.val[2] = vqtbx4q_u8(dec2.val[2], tbl_dec2, dec2.val[2]); + dec2.val[3] = vqtbx4q_u8(dec2.val[3], tbl_dec2, dec2.val[3]); + + // Get final values: + str.val[0] = vorrq_u8(dec1.val[0], dec2.val[0]); + str.val[1] = vorrq_u8(dec1.val[1], dec2.val[1]); + str.val[2] = vorrq_u8(dec1.val[2], dec2.val[2]); + str.val[3] = vorrq_u8(dec1.val[3], dec2.val[3]); + + // Check for invalid input, any value larger than 63: + const uint8x16_t classified + = vcgtq_u8(str.val[0], vdupq_n_u8(63)) + | vcgtq_u8(str.val[1], vdupq_n_u8(63)) + | vcgtq_u8(str.val[2], vdupq_n_u8(63)) + | vcgtq_u8(str.val[3], vdupq_n_u8(63)); + + // Check that all bits are zero: + if (vmaxvq_u8(classified) != 0U) { + break; + } + + // Compress four bytes into three: + dec.val[0] = vshlq_n_u8(str.val[0], 2) | vshrq_n_u8(str.val[1], 4); + dec.val[1] = vshlq_n_u8(str.val[1], 4) | vshrq_n_u8(str.val[2], 2); + dec.val[2] = vshlq_n_u8(str.val[2], 6) | str.val[3]; + + // Interleave and store decoded result: + vst3q_u8((uint8_t *) *o, dec); + + *s += 64; + *o += 48; + + } while (--rounds > 0); + + // Adjust for any rounds that were skipped: + *slen += rounds * 64; + *olen -= rounds * 48; +} diff --git a/deps/base64/base64/lib/arch/neon64/enc_loop.c b/deps/base64/base64/lib/arch/neon64/enc_loop.c new file mode 100644 index 00000000000..59a1c59728a --- /dev/null +++ b/deps/base64/base64/lib/arch/neon64/enc_loop.c @@ -0,0 +1,66 @@ +static inline void +enc_loop_neon64_inner (const uint8_t **s, uint8_t **o, const uint8x16x4_t tbl_enc) +{ + // Load 48 bytes and deinterleave: + uint8x16x3_t src = vld3q_u8(*s); + + // Divide bits of three input bytes over four output bytes: + uint8x16x4_t out = enc_reshuffle(src); + + // The bits have now been shifted to the right locations; + // translate their values 0..63 to the Base64 alphabet. + // Use a 64-byte table lookup: + out.val[0] = vqtbl4q_u8(tbl_enc, out.val[0]); + out.val[1] = vqtbl4q_u8(tbl_enc, out.val[1]); + out.val[2] = vqtbl4q_u8(tbl_enc, out.val[2]); + out.val[3] = vqtbl4q_u8(tbl_enc, out.val[3]); + + // Interleave and store output: + vst4q_u8(*o, out); + + *s += 48; + *o += 64; +} + +static inline void +enc_loop_neon64 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + size_t rounds = *slen / 48; + + *slen -= rounds * 48; // 48 bytes consumed per round + *olen += rounds * 64; // 64 bytes produced per round + + // Load the encoding table: + const uint8x16x4_t tbl_enc = load_64byte_table(base64_table_enc_6bit); + + while (rounds > 0) { + if (rounds >= 8) { + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + rounds -= 8; + continue; + } + if (rounds >= 4) { + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + rounds -= 4; + continue; + } + if (rounds >= 2) { + enc_loop_neon64_inner(s, o, tbl_enc); + enc_loop_neon64_inner(s, o, tbl_enc); + rounds -= 2; + continue; + } + enc_loop_neon64_inner(s, o, tbl_enc); + break; + } +} diff --git a/deps/base64/base64/lib/arch/neon64/enc_loop_asm.c b/deps/base64/base64/lib/arch/neon64/enc_loop_asm.c new file mode 100644 index 00000000000..cf2fd27e80d --- /dev/null +++ b/deps/base64/base64/lib/arch/neon64/enc_loop_asm.c @@ -0,0 +1,167 @@ +// Apologies in advance for combining the preprocessor with inline assembly, +// two notoriously gnarly parts of C, but it was necessary to avoid a lot of +// code repetition. The preprocessor is used to template large sections of +// inline assembly that differ only in the registers used. If the code was +// written out by hand, it would become very large and hard to audit. + +// Generate a block of inline assembly that loads three user-defined registers +// A, B, C from memory and deinterleaves them, post-incrementing the src +// pointer. The register set should be sequential. +#define LOAD(A, B, C) \ + "ld3 {"A".16b, "B".16b, "C".16b}, [%[src]], #48 \n\t" + +// Generate a block of inline assembly that takes three deinterleaved registers +// and shuffles the bytes. The output is in temporary registers t0..t3. +#define SHUF(A, B, C) \ + "ushr %[t0].16b, "A".16b, #2 \n\t" \ + "ushr %[t1].16b, "B".16b, #4 \n\t" \ + "ushr %[t2].16b, "C".16b, #6 \n\t" \ + "sli %[t1].16b, "A".16b, #4 \n\t" \ + "sli %[t2].16b, "B".16b, #2 \n\t" \ + "and %[t1].16b, %[t1].16b, %[n63].16b \n\t" \ + "and %[t2].16b, %[t2].16b, %[n63].16b \n\t" \ + "and %[t3].16b, "C".16b, %[n63].16b \n\t" + +// Generate a block of inline assembly that takes temporary registers t0..t3 +// and translates them to the base64 alphabet, using a table loaded into +// v8..v11. The output is in user-defined registers A..D. +#define TRAN(A, B, C, D) \ + "tbl "A".16b, {v8.16b-v11.16b}, %[t0].16b \n\t" \ + "tbl "B".16b, {v8.16b-v11.16b}, %[t1].16b \n\t" \ + "tbl "C".16b, {v8.16b-v11.16b}, %[t2].16b \n\t" \ + "tbl "D".16b, {v8.16b-v11.16b}, %[t3].16b \n\t" + +// Generate a block of inline assembly that interleaves four registers and +// stores them, post-incrementing the destination pointer. +#define STOR(A, B, C, D) \ + "st4 {"A".16b, "B".16b, "C".16b, "D".16b}, [%[dst]], #64 \n\t" + +// Generate a block of inline assembly that generates a single self-contained +// encoder round: fetch the data, process it, and store the result. +#define ROUND() \ + LOAD("v12", "v13", "v14") \ + SHUF("v12", "v13", "v14") \ + TRAN("v12", "v13", "v14", "v15") \ + STOR("v12", "v13", "v14", "v15") + +// Generate a block of assembly that generates a type A interleaved encoder +// round. It uses registers that were loaded by the previous type B round, and +// in turn loads registers for the next type B round. +#define ROUND_A() \ + SHUF("v2", "v3", "v4") \ + LOAD("v12", "v13", "v14") \ + TRAN("v2", "v3", "v4", "v5") \ + STOR("v2", "v3", "v4", "v5") + +// Type B interleaved encoder round. Same as type A, but register sets swapped. +#define ROUND_B() \ + SHUF("v12", "v13", "v14") \ + LOAD("v2", "v3", "v4") \ + TRAN("v12", "v13", "v14", "v15") \ + STOR("v12", "v13", "v14", "v15") + +// The first type A round needs to load its own registers. +#define ROUND_A_FIRST() \ + LOAD("v2", "v3", "v4") \ + ROUND_A() + +// The last type B round omits the load for the next step. +#define ROUND_B_LAST() \ + SHUF("v12", "v13", "v14") \ + TRAN("v12", "v13", "v14", "v15") \ + STOR("v12", "v13", "v14", "v15") + +// Suppress clang's warning that the literal string in the asm statement is +// overlong (longer than the ISO-mandated minimum size of 4095 bytes for C99 +// compilers). It may be true, but the goal here is not C99 portability. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Woverlength-strings" + +static inline void +enc_loop_neon64 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + size_t rounds = *slen / 48; + + if (rounds == 0) { + return; + } + + *slen -= rounds * 48; // 48 bytes consumed per round. + *olen += rounds * 64; // 64 bytes produced per round. + + // Number of times to go through the 8x loop. + size_t loops = rounds / 8; + + // Number of rounds remaining after the 8x loop. + rounds %= 8; + + // Temporary registers, used as scratch space. + uint8x16_t tmp0, tmp1, tmp2, tmp3; + + __asm__ volatile ( + + // Load the encoding table into v8..v11. + " ld1 {v8.16b-v11.16b}, [%[tbl]] \n\t" + + // If there are eight rounds or more, enter an 8x unrolled loop + // of interleaved encoding rounds. The rounds interleave memory + // operations (load/store) with data operations to maximize + // pipeline throughput. + " cbz %[loops], 4f \n\t" + + // The SIMD instructions do not touch the flags. + "88: subs %[loops], %[loops], #1 \n\t" + " " ROUND_A_FIRST() + " " ROUND_B() + " " ROUND_A() + " " ROUND_B() + " " ROUND_A() + " " ROUND_B() + " " ROUND_A() + " " ROUND_B_LAST() + " b.ne 88b \n\t" + + // Enter a 4x unrolled loop for rounds of 4 or more. + "4: cmp %[rounds], #4 \n\t" + " b.lt 30f \n\t" + " " ROUND_A_FIRST() + " " ROUND_B() + " " ROUND_A() + " " ROUND_B_LAST() + " sub %[rounds], %[rounds], #4 \n\t" + + // Dispatch the remaining rounds 0..3. + "30: cbz %[rounds], 0f \n\t" + " cmp %[rounds], #2 \n\t" + " b.eq 2f \n\t" + " b.lt 1f \n\t" + + // Block of non-interlaced encoding rounds, which can each + // individually be jumped to. Rounds fall through to the next. + "3: " ROUND() + "2: " ROUND() + "1: " ROUND() + "0: \n\t" + + // Outputs (modified). + : [loops] "+r" (loops), + [src] "+r" (*s), + [dst] "+r" (*o), + [t0] "=&w" (tmp0), + [t1] "=&w" (tmp1), + [t2] "=&w" (tmp2), + [t3] "=&w" (tmp3) + + // Inputs (not modified). + : [rounds] "r" (rounds), + [tbl] "r" (base64_table_enc_6bit), + [n63] "w" (vdupq_n_u8(63)) + + // Clobbers. + : "v2", "v3", "v4", "v5", + "v8", "v9", "v10", "v11", + "v12", "v13", "v14", "v15" + ); +} + +#pragma GCC diagnostic pop diff --git a/deps/base64/base64/lib/arch/neon64/enc_reshuffle.c b/deps/base64/base64/lib/arch/neon64/enc_reshuffle.c new file mode 100644 index 00000000000..ea543e04ec7 --- /dev/null +++ b/deps/base64/base64/lib/arch/neon64/enc_reshuffle.c @@ -0,0 +1,31 @@ +static inline uint8x16x4_t +enc_reshuffle (const uint8x16x3_t in) +{ + uint8x16x4_t out; + + // Input: + // in[0] = a7 a6 a5 a4 a3 a2 a1 a0 + // in[1] = b7 b6 b5 b4 b3 b2 b1 b0 + // in[2] = c7 c6 c5 c4 c3 c2 c1 c0 + + // Output: + // out[0] = 00 00 a7 a6 a5 a4 a3 a2 + // out[1] = 00 00 a1 a0 b7 b6 b5 b4 + // out[2] = 00 00 b3 b2 b1 b0 c7 c6 + // out[3] = 00 00 c5 c4 c3 c2 c1 c0 + + // Move the input bits to where they need to be in the outputs. Except + // for the first output, the high two bits are not cleared. + out.val[0] = vshrq_n_u8(in.val[0], 2); + out.val[1] = vshrq_n_u8(in.val[1], 4); + out.val[2] = vshrq_n_u8(in.val[2], 6); + out.val[1] = vsliq_n_u8(out.val[1], in.val[0], 4); + out.val[2] = vsliq_n_u8(out.val[2], in.val[1], 2); + + // Clear the high two bits in the second, third and fourth output. + out.val[1] = vandq_u8(out.val[1], vdupq_n_u8(0x3F)); + out.val[2] = vandq_u8(out.val[2], vdupq_n_u8(0x3F)); + out.val[3] = vandq_u8(in.val[2], vdupq_n_u8(0x3F)); + + return out; +} diff --git a/deps/base64/base64/lib/arch/sse41/codec.c b/deps/base64/base64/lib/arch/sse41/codec.c new file mode 100644 index 00000000000..00645feda83 --- /dev/null +++ b/deps/base64/base64/lib/arch/sse41/codec.c @@ -0,0 +1,42 @@ +#include +#include +#include + +#include "../../../include/libbase64.h" +#include "../../tables/tables.h" +#include "../../codecs.h" +#include "config.h" +#include "../../env.h" + +#if HAVE_SSE41 +#include + +#include "../ssse3/dec_reshuffle.c" +#include "../ssse3/dec_loop.c" +#include "../ssse3/enc_translate.c" +#include "../ssse3/enc_reshuffle.c" +#include "../ssse3/enc_loop.c" + +#endif // HAVE_SSE41 + +BASE64_ENC_FUNCTION(sse41) +{ +#if HAVE_SSE41 + #include "../generic/enc_head.c" + enc_loop_ssse3(&s, &slen, &o, &olen); + #include "../generic/enc_tail.c" +#else + BASE64_ENC_STUB +#endif +} + +BASE64_DEC_FUNCTION(sse41) +{ +#if HAVE_SSE41 + #include "../generic/dec_head.c" + dec_loop_ssse3(&s, &slen, &o, &olen); + #include "../generic/dec_tail.c" +#else + BASE64_DEC_STUB +#endif +} diff --git a/deps/base64/base64/lib/arch/sse42/codec.c b/deps/base64/base64/lib/arch/sse42/codec.c new file mode 100644 index 00000000000..cf5d97cfb29 --- /dev/null +++ b/deps/base64/base64/lib/arch/sse42/codec.c @@ -0,0 +1,42 @@ +#include +#include +#include + +#include "../../../include/libbase64.h" +#include "../../tables/tables.h" +#include "../../codecs.h" +#include "config.h" +#include "../../env.h" + +#if HAVE_SSE42 +#include + +#include "../ssse3/dec_reshuffle.c" +#include "../ssse3/dec_loop.c" +#include "../ssse3/enc_translate.c" +#include "../ssse3/enc_reshuffle.c" +#include "../ssse3/enc_loop.c" + +#endif // HAVE_SSE42 + +BASE64_ENC_FUNCTION(sse42) +{ +#if HAVE_SSE42 + #include "../generic/enc_head.c" + enc_loop_ssse3(&s, &slen, &o, &olen); + #include "../generic/enc_tail.c" +#else + BASE64_ENC_STUB +#endif +} + +BASE64_DEC_FUNCTION(sse42) +{ +#if HAVE_SSE42 + #include "../generic/dec_head.c" + dec_loop_ssse3(&s, &slen, &o, &olen); + #include "../generic/dec_tail.c" +#else + BASE64_DEC_STUB +#endif +} diff --git a/deps/base64/base64/lib/arch/ssse3/codec.c b/deps/base64/base64/lib/arch/ssse3/codec.c new file mode 100644 index 00000000000..ad14a4589de --- /dev/null +++ b/deps/base64/base64/lib/arch/ssse3/codec.c @@ -0,0 +1,42 @@ +#include +#include +#include + +#include "../../../include/libbase64.h" +#include "../../tables/tables.h" +#include "../../codecs.h" +#include "config.h" +#include "../../env.h" + +#if HAVE_SSSE3 +#include + +#include "dec_reshuffle.c" +#include "dec_loop.c" +#include "enc_reshuffle.c" +#include "enc_translate.c" +#include "enc_loop.c" + +#endif // HAVE_SSSE3 + +BASE64_ENC_FUNCTION(ssse3) +{ +#if HAVE_SSSE3 + #include "../generic/enc_head.c" + enc_loop_ssse3(&s, &slen, &o, &olen); + #include "../generic/enc_tail.c" +#else + BASE64_ENC_STUB +#endif +} + +BASE64_DEC_FUNCTION(ssse3) +{ +#if HAVE_SSSE3 + #include "../generic/dec_head.c" + dec_loop_ssse3(&s, &slen, &o, &olen); + #include "../generic/dec_tail.c" +#else + BASE64_DEC_STUB +#endif +} diff --git a/deps/base64/base64/lib/arch/ssse3/dec_loop.c b/deps/base64/base64/lib/arch/ssse3/dec_loop.c new file mode 100644 index 00000000000..9da71abef48 --- /dev/null +++ b/deps/base64/base64/lib/arch/ssse3/dec_loop.c @@ -0,0 +1,173 @@ +// The input consists of six character sets in the Base64 alphabet, which we +// need to map back to the 6-bit values they represent. There are three ranges, +// two singles, and then there's the rest. +// +// # From To Add Characters +// 1 [43] [62] +19 + +// 2 [47] [63] +16 / +// 3 [48..57] [52..61] +4 0..9 +// 4 [65..90] [0..25] -65 A..Z +// 5 [97..122] [26..51] -71 a..z +// (6) Everything else => invalid input +// +// We will use lookup tables for character validation and offset computation. +// Remember that 0x2X and 0x0X are the same index for _mm_shuffle_epi8, this +// allows to mask with 0x2F instead of 0x0F and thus save one constant +// declaration (register and/or memory access). +// +// For offsets: +// Perfect hash for lut = ((src >> 4) & 0x2F) + ((src == 0x2F) ? 0xFF : 0x00) +// 0000 = garbage +// 0001 = / +// 0010 = + +// 0011 = 0-9 +// 0100 = A-Z +// 0101 = A-Z +// 0110 = a-z +// 0111 = a-z +// 1000 >= garbage +// +// For validation, here's the table. +// A character is valid if and only if the AND of the 2 lookups equals 0: +// +// hi \ lo 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 +// LUT 0x15 0x11 0x11 0x11 0x11 0x11 0x11 0x11 0x11 0x11 0x13 0x1A 0x1B 0x1B 0x1B 0x1A +// +// 0000 0x10 char NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI +// andlut 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 +// +// 0001 0x10 char DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US +// andlut 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 +// +// 0010 0x01 char ! " # $ % & ' ( ) * + , - . / +// andlut 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x00 0x01 0x01 0x01 0x00 +// +// 0011 0x02 char 0 1 2 3 4 5 6 7 8 9 : ; < = > ? +// andlut 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x02 0x02 0x02 0x02 0x02 +// +// 0100 0x04 char @ A B C D E F G H I J K L M N O +// andlut 0x04 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 +// +// 0101 0x08 char P Q R S T U V W X Y Z [ \ ] ^ _ +// andlut 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x08 0x08 0x08 0x08 0x08 +// +// 0110 0x04 char ` a b c d e f g h i j k l m n o +// andlut 0x04 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 +// 0111 0x08 char p q r s t u v w x y z { | } ~ +// andlut 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x08 0x08 0x08 0x08 0x08 +// +// 1000 0x10 andlut 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 +// 1001 0x10 andlut 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 +// 1010 0x10 andlut 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 +// 1011 0x10 andlut 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 +// 1100 0x10 andlut 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 +// 1101 0x10 andlut 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 +// 1110 0x10 andlut 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 +// 1111 0x10 andlut 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 + +static inline int +dec_loop_ssse3_inner (const uint8_t **s, uint8_t **o, size_t *rounds) +{ + const __m128i lut_lo = _mm_setr_epi8( + 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x13, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A); + + const __m128i lut_hi = _mm_setr_epi8( + 0x10, 0x10, 0x01, 0x02, 0x04, 0x08, 0x04, 0x08, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10); + + const __m128i lut_roll = _mm_setr_epi8( + 0, 16, 19, 4, -65, -65, -71, -71, + 0, 0, 0, 0, 0, 0, 0, 0); + + const __m128i mask_2F = _mm_set1_epi8(0x2F); + + // Load input: + __m128i str = _mm_loadu_si128((__m128i *) *s); + + // Table lookups: + const __m128i hi_nibbles = _mm_and_si128(_mm_srli_epi32(str, 4), mask_2F); + const __m128i lo_nibbles = _mm_and_si128(str, mask_2F); + const __m128i hi = _mm_shuffle_epi8(lut_hi, hi_nibbles); + const __m128i lo = _mm_shuffle_epi8(lut_lo, lo_nibbles); + + // Check for invalid input: if any "and" values from lo and hi are not + // zero, fall back on bytewise code to do error checking and reporting: + if (_mm_movemask_epi8(_mm_cmpgt_epi8(_mm_and_si128(lo, hi), _mm_setzero_si128())) != 0) { + return 0; + } + + const __m128i eq_2F = _mm_cmpeq_epi8(str, mask_2F); + const __m128i roll = _mm_shuffle_epi8(lut_roll, _mm_add_epi8(eq_2F, hi_nibbles)); + + // Now simply add the delta values to the input: + str = _mm_add_epi8(str, roll); + + // Reshuffle the input to packed 12-byte output format: + str = dec_reshuffle(str); + + // Store the output: + _mm_storeu_si128((__m128i *) *o, str); + + *s += 16; + *o += 12; + *rounds -= 1; + + return 1; +} + +static inline void +dec_loop_ssse3 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + if (*slen < 24) { + return; + } + + // Process blocks of 16 bytes per round. Because 4 extra zero bytes are + // written after the output, ensure that there will be at least 8 bytes + // of input data left to cover the gap. (6 data bytes and up to two + // end-of-string markers.) + size_t rounds = (*slen - 8) / 16; + + *slen -= rounds * 16; // 16 bytes consumed per round + *olen += rounds * 12; // 12 bytes produced per round + + do { + if (rounds >= 8) { + if (dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds)) { + continue; + } + break; + } + if (rounds >= 4) { + if (dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds)) { + continue; + } + break; + } + if (rounds >= 2) { + if (dec_loop_ssse3_inner(s, o, &rounds) && + dec_loop_ssse3_inner(s, o, &rounds)) { + continue; + } + break; + } + dec_loop_ssse3_inner(s, o, &rounds); + break; + + } while (rounds > 0); + + // Adjust for any rounds that were skipped: + *slen += rounds * 16; + *olen -= rounds * 12; +} diff --git a/deps/base64/base64/lib/arch/ssse3/dec_reshuffle.c b/deps/base64/base64/lib/arch/ssse3/dec_reshuffle.c new file mode 100644 index 00000000000..fdf587fea2e --- /dev/null +++ b/deps/base64/base64/lib/arch/ssse3/dec_reshuffle.c @@ -0,0 +1,33 @@ +static inline __m128i +dec_reshuffle (const __m128i in) +{ + // in, bits, upper case are most significant bits, lower case are least significant bits + // 00llllll 00kkkkLL 00jjKKKK 00JJJJJJ + // 00iiiiii 00hhhhII 00ggHHHH 00GGGGGG + // 00ffffff 00eeeeFF 00ddEEEE 00DDDDDD + // 00cccccc 00bbbbCC 00aaBBBB 00AAAAAA + + const __m128i merge_ab_and_bc = _mm_maddubs_epi16(in, _mm_set1_epi32(0x01400140)); + // 0000kkkk LLllllll 0000JJJJ JJjjKKKK + // 0000hhhh IIiiiiii 0000GGGG GGggHHHH + // 0000eeee FFffffff 0000DDDD DDddEEEE + // 0000bbbb CCcccccc 0000AAAA AAaaBBBB + + const __m128i out = _mm_madd_epi16(merge_ab_and_bc, _mm_set1_epi32(0x00011000)); + // 00000000 JJJJJJjj KKKKkkkk LLllllll + // 00000000 GGGGGGgg HHHHhhhh IIiiiiii + // 00000000 DDDDDDdd EEEEeeee FFffffff + // 00000000 AAAAAAaa BBBBbbbb CCcccccc + + // Pack bytes together: + return _mm_shuffle_epi8(out, _mm_setr_epi8( + 2, 1, 0, + 6, 5, 4, + 10, 9, 8, + 14, 13, 12, + -1, -1, -1, -1)); + // 00000000 00000000 00000000 00000000 + // LLllllll KKKKkkkk JJJJJJjj IIiiiiii + // HHHHhhhh GGGGGGgg FFffffff EEEEeeee + // DDDDDDdd CCcccccc BBBBbbbb AAAAAAaa +} diff --git a/deps/base64/base64/lib/arch/ssse3/enc_loop.c b/deps/base64/base64/lib/arch/ssse3/enc_loop.c new file mode 100644 index 00000000000..6de652e1c97 --- /dev/null +++ b/deps/base64/base64/lib/arch/ssse3/enc_loop.c @@ -0,0 +1,67 @@ +static inline void +enc_loop_ssse3_inner (const uint8_t **s, uint8_t **o) +{ + // Load input: + __m128i str = _mm_loadu_si128((__m128i *) *s); + + // Reshuffle: + str = enc_reshuffle(str); + + // Translate reshuffled bytes to the Base64 alphabet: + str = enc_translate(str); + + // Store: + _mm_storeu_si128((__m128i *) *o, str); + + *s += 12; + *o += 16; +} + +static inline void +enc_loop_ssse3 (const uint8_t **s, size_t *slen, uint8_t **o, size_t *olen) +{ + if (*slen < 16) { + return; + } + + // Process blocks of 12 bytes at a time. Because blocks are loaded 16 + // bytes at a time, ensure that there will be at least 4 remaining + // bytes after the last round, so that the final read will not pass + // beyond the bounds of the input buffer: + size_t rounds = (*slen - 4) / 12; + + *slen -= rounds * 12; // 12 bytes consumed per round + *olen += rounds * 16; // 16 bytes produced per round + + do { + if (rounds >= 8) { + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + rounds -= 8; + continue; + } + if (rounds >= 4) { + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + rounds -= 4; + continue; + } + if (rounds >= 2) { + enc_loop_ssse3_inner(s, o); + enc_loop_ssse3_inner(s, o); + rounds -= 2; + continue; + } + enc_loop_ssse3_inner(s, o); + break; + + } while (rounds > 0); +} diff --git a/deps/base64/base64/lib/arch/ssse3/enc_reshuffle.c b/deps/base64/base64/lib/arch/ssse3/enc_reshuffle.c new file mode 100644 index 00000000000..b738591f9f2 --- /dev/null +++ b/deps/base64/base64/lib/arch/ssse3/enc_reshuffle.c @@ -0,0 +1,48 @@ +static inline __m128i +enc_reshuffle (__m128i in) +{ + // Input, bytes MSB to LSB: + // 0 0 0 0 l k j i h g f e d c b a + + in = _mm_shuffle_epi8(in, _mm_set_epi8( + 10, 11, 9, 10, + 7, 8, 6, 7, + 4, 5, 3, 4, + 1, 2, 0, 1)); + // in, bytes MSB to LSB: + // k l j k + // h i g h + // e f d e + // b c a b + + const __m128i t0 = _mm_and_si128(in, _mm_set1_epi32(0x0FC0FC00)); + // bits, upper case are most significant bits, lower case are least significant bits + // 0000kkkk LL000000 JJJJJJ00 00000000 + // 0000hhhh II000000 GGGGGG00 00000000 + // 0000eeee FF000000 DDDDDD00 00000000 + // 0000bbbb CC000000 AAAAAA00 00000000 + + const __m128i t1 = _mm_mulhi_epu16(t0, _mm_set1_epi32(0x04000040)); + // 00000000 00kkkkLL 00000000 00JJJJJJ + // 00000000 00hhhhII 00000000 00GGGGGG + // 00000000 00eeeeFF 00000000 00DDDDDD + // 00000000 00bbbbCC 00000000 00AAAAAA + + const __m128i t2 = _mm_and_si128(in, _mm_set1_epi32(0x003F03F0)); + // 00000000 00llllll 000000jj KKKK0000 + // 00000000 00iiiiii 000000gg HHHH0000 + // 00000000 00ffffff 000000dd EEEE0000 + // 00000000 00cccccc 000000aa BBBB0000 + + const __m128i t3 = _mm_mullo_epi16(t2, _mm_set1_epi32(0x01000010)); + // 00llllll 00000000 00jjKKKK 00000000 + // 00iiiiii 00000000 00ggHHHH 00000000 + // 00ffffff 00000000 00ddEEEE 00000000 + // 00cccccc 00000000 00aaBBBB 00000000 + + return _mm_or_si128(t1, t3); + // 00llllll 00kkkkLL 00jjKKKK 00JJJJJJ + // 00iiiiii 00hhhhII 00ggHHHH 00GGGGGG + // 00ffffff 00eeeeFF 00ddEEEE 00DDDDDD + // 00cccccc 00bbbbCC 00aaBBBB 00AAAAAA +} diff --git a/deps/base64/base64/lib/arch/ssse3/enc_translate.c b/deps/base64/base64/lib/arch/ssse3/enc_translate.c new file mode 100644 index 00000000000..04f288fccb6 --- /dev/null +++ b/deps/base64/base64/lib/arch/ssse3/enc_translate.c @@ -0,0 +1,33 @@ +static inline __m128i +enc_translate (const __m128i in) +{ + // A lookup table containing the absolute offsets for all ranges: + const __m128i lut = _mm_setr_epi8( + 65, 71, -4, -4, + -4, -4, -4, -4, + -4, -4, -4, -4, + -19, -16, 0, 0 + ); + + // Translate values 0..63 to the Base64 alphabet. There are five sets: + // # From To Abs Index Characters + // 0 [0..25] [65..90] +65 0 ABCDEFGHIJKLMNOPQRSTUVWXYZ + // 1 [26..51] [97..122] +71 1 abcdefghijklmnopqrstuvwxyz + // 2 [52..61] [48..57] -4 [2..11] 0123456789 + // 3 [62] [43] -19 12 + + // 4 [63] [47] -16 13 / + + // Create LUT indices from the input. The index for range #0 is right, + // others are 1 less than expected: + __m128i indices = _mm_subs_epu8(in, _mm_set1_epi8(51)); + + // mask is 0xFF (-1) for range #[1..4] and 0x00 for range #0: + __m128i mask = _mm_cmpgt_epi8(in, _mm_set1_epi8(25)); + + // Subtract -1, so add 1 to indices for range #[1..4]. All indices are + // now correct: + indices = _mm_sub_epi8(indices, mask); + + // Add offsets to input values: + return _mm_add_epi8(in, _mm_shuffle_epi8(lut, indices)); +} diff --git a/deps/base64/base64/lib/codec_choose.c b/deps/base64/base64/lib/codec_choose.c new file mode 100644 index 00000000000..6a07d6a74cc --- /dev/null +++ b/deps/base64/base64/lib/codec_choose.c @@ -0,0 +1,281 @@ +#include +#include +#include +#include + +#include "../include/libbase64.h" +#include "codecs.h" +#include "config.h" +#include "env.h" + +#if (__x86_64__ || __i386__ || _M_X86 || _M_X64) + #define BASE64_X86 + #if (HAVE_SSSE3 || HAVE_SSE41 || HAVE_SSE42 || HAVE_AVX || HAVE_AVX2) + #define BASE64_X86_SIMD + #endif +#endif + +#ifdef BASE64_X86 +#ifdef _MSC_VER + #include + #define __cpuid_count(__level, __count, __eax, __ebx, __ecx, __edx) \ + { \ + int info[4]; \ + __cpuidex(info, __level, __count); \ + __eax = info[0]; \ + __ebx = info[1]; \ + __ecx = info[2]; \ + __edx = info[3]; \ + } + #define __cpuid(__level, __eax, __ebx, __ecx, __edx) \ + __cpuid_count(__level, 0, __eax, __ebx, __ecx, __edx) +#else + #include + #if HAVE_AVX2 || HAVE_AVX + #if ((__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 2) || (__clang_major__ >= 3)) + static inline uint64_t _xgetbv (uint32_t index) + { + uint32_t eax, edx; + __asm__ __volatile__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(index)); + return ((uint64_t)edx << 32) | eax; + } + #else + #error "Platform not supported" + #endif + #endif +#endif + +#ifndef bit_AVX2 +#define bit_AVX2 (1 << 5) +#endif +#ifndef bit_SSSE3 +#define bit_SSSE3 (1 << 9) +#endif +#ifndef bit_SSE41 +#define bit_SSE41 (1 << 19) +#endif +#ifndef bit_SSE42 +#define bit_SSE42 (1 << 20) +#endif +#ifndef bit_AVX +#define bit_AVX (1 << 28) +#endif + +#define bit_XSAVE_XRSTORE (1 << 27) + +#ifndef _XCR_XFEATURE_ENABLED_MASK +#define _XCR_XFEATURE_ENABLED_MASK 0 +#endif + +#define _XCR_XMM_AND_YMM_STATE_ENABLED_BY_OS 0x6 +#endif + +// Function declarations: +#define BASE64_CODEC_FUNCS(arch) \ + BASE64_ENC_FUNCTION(arch); \ + BASE64_DEC_FUNCTION(arch); \ + +BASE64_CODEC_FUNCS(avx2) +BASE64_CODEC_FUNCS(neon32) +BASE64_CODEC_FUNCS(neon64) +BASE64_CODEC_FUNCS(plain) +BASE64_CODEC_FUNCS(ssse3) +BASE64_CODEC_FUNCS(sse41) +BASE64_CODEC_FUNCS(sse42) +BASE64_CODEC_FUNCS(avx) + +static bool +codec_choose_forced (struct codec *codec, int flags) +{ + // If the user wants to use a certain codec, + // always allow it, even if the codec is a no-op. + // For testing purposes. + + if (!(flags & 0xFF)) { + return false; + } + if (flags & BASE64_FORCE_AVX2) { + codec->enc = base64_stream_encode_avx2; + codec->dec = base64_stream_decode_avx2; + return true; + } + if (flags & BASE64_FORCE_NEON32) { + codec->enc = base64_stream_encode_neon32; + codec->dec = base64_stream_decode_neon32; + return true; + } + if (flags & BASE64_FORCE_NEON64) { + codec->enc = base64_stream_encode_neon64; + codec->dec = base64_stream_decode_neon64; + return true; + } + if (flags & BASE64_FORCE_PLAIN) { + codec->enc = base64_stream_encode_plain; + codec->dec = base64_stream_decode_plain; + return true; + } + if (flags & BASE64_FORCE_SSSE3) { + codec->enc = base64_stream_encode_ssse3; + codec->dec = base64_stream_decode_ssse3; + return true; + } + if (flags & BASE64_FORCE_SSE41) { + codec->enc = base64_stream_encode_sse41; + codec->dec = base64_stream_decode_sse41; + return true; + } + if (flags & BASE64_FORCE_SSE42) { + codec->enc = base64_stream_encode_sse42; + codec->dec = base64_stream_decode_sse42; + return true; + } + if (flags & BASE64_FORCE_AVX) { + codec->enc = base64_stream_encode_avx; + codec->dec = base64_stream_decode_avx; + return true; + } + return false; +} + +static bool +codec_choose_arm (struct codec *codec) +{ +#if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && ((defined(__aarch64__) && HAVE_NEON64) || HAVE_NEON32) + + // Unfortunately there is no portable way to check for NEON + // support at runtime from userland in the same way that x86 + // has cpuid, so just stick to the compile-time configuration: + + #if defined(__aarch64__) && HAVE_NEON64 + codec->enc = base64_stream_encode_neon64; + codec->dec = base64_stream_decode_neon64; + #else + codec->enc = base64_stream_encode_neon32; + codec->dec = base64_stream_decode_neon32; + #endif + + return true; + +#else + (void)codec; + return false; +#endif +} + +static bool +codec_choose_x86 (struct codec *codec) +{ +#ifdef BASE64_X86_SIMD + + unsigned int eax, ebx = 0, ecx = 0, edx; + unsigned int max_level; + + #ifdef _MSC_VER + int info[4]; + __cpuidex(info, 0, 0); + max_level = info[0]; + #else + max_level = __get_cpuid_max(0, NULL); + #endif + + #if HAVE_AVX2 || HAVE_AVX + // Check for AVX/AVX2 support: + // Checking for AVX requires 3 things: + // 1) CPUID indicates that the OS uses XSAVE and XRSTORE instructions + // (allowing saving YMM registers on context switch) + // 2) CPUID indicates support for AVX + // 3) XGETBV indicates the AVX registers will be saved and restored on + // context switch + // + // Note that XGETBV is only available on 686 or later CPUs, so the + // instruction needs to be conditionally run. + if (max_level >= 1) { + __cpuid_count(1, 0, eax, ebx, ecx, edx); + if (ecx & bit_XSAVE_XRSTORE) { + uint64_t xcr_mask; + xcr_mask = _xgetbv(_XCR_XFEATURE_ENABLED_MASK); + if (xcr_mask & _XCR_XMM_AND_YMM_STATE_ENABLED_BY_OS) { + #if HAVE_AVX2 + if (max_level >= 7) { + __cpuid_count(7, 0, eax, ebx, ecx, edx); + if (ebx & bit_AVX2) { + codec->enc = base64_stream_encode_avx2; + codec->dec = base64_stream_decode_avx2; + return true; + } + } + #endif + #if HAVE_AVX + __cpuid_count(1, 0, eax, ebx, ecx, edx); + if (ecx & bit_AVX) { + codec->enc = base64_stream_encode_avx; + codec->dec = base64_stream_decode_avx; + return true; + } + #endif + } + } + } + #endif + + #if HAVE_SSE42 + // Check for SSE42 support: + if (max_level >= 1) { + __cpuid(1, eax, ebx, ecx, edx); + if (ecx & bit_SSE42) { + codec->enc = base64_stream_encode_sse42; + codec->dec = base64_stream_decode_sse42; + return true; + } + } + #endif + + #if HAVE_SSE41 + // Check for SSE41 support: + if (max_level >= 1) { + __cpuid(1, eax, ebx, ecx, edx); + if (ecx & bit_SSE41) { + codec->enc = base64_stream_encode_sse41; + codec->dec = base64_stream_decode_sse41; + return true; + } + } + #endif + + #if HAVE_SSSE3 + // Check for SSSE3 support: + if (max_level >= 1) { + __cpuid(1, eax, ebx, ecx, edx); + if (ecx & bit_SSSE3) { + codec->enc = base64_stream_encode_ssse3; + codec->dec = base64_stream_decode_ssse3; + return true; + } + } + #endif + +#else + (void)codec; +#endif + + return false; +} + +void +codec_choose (struct codec *codec, int flags) +{ + // User forced a codec: + if (codec_choose_forced(codec, flags)) { + return; + } + + // Runtime feature detection: + if (codec_choose_arm(codec)) { + return; + } + if (codec_choose_x86(codec)) { + return; + } + codec->enc = base64_stream_encode_plain; + codec->dec = base64_stream_decode_plain; +} diff --git a/deps/base64/base64/lib/codecs.h b/deps/base64/base64/lib/codecs.h new file mode 100644 index 00000000000..441fd600a45 --- /dev/null +++ b/deps/base64/base64/lib/codecs.h @@ -0,0 +1,65 @@ +#include +#include + +#include "../include/libbase64.h" +#include "config.h" + +// Function parameters for encoding functions: +#define BASE64_ENC_PARAMS \ + ( struct base64_state *state \ + , const char *src \ + , size_t srclen \ + , char *out \ + , size_t *outlen \ + ) + +// Function parameters for decoding functions: +#define BASE64_DEC_PARAMS \ + ( struct base64_state *state \ + , const char *src \ + , size_t srclen \ + , char *out \ + , size_t *outlen \ + ) + +// Function signature for encoding functions: +#define BASE64_ENC_FUNCTION(arch) \ + void \ + base64_stream_encode_ ## arch \ + BASE64_ENC_PARAMS + +// Function signature for decoding functions: +#define BASE64_DEC_FUNCTION(arch) \ + int \ + base64_stream_decode_ ## arch \ + BASE64_DEC_PARAMS + +// Cast away unused variable, silence compiler: +#define UNUSED(x) ((void)(x)) + +// Stub function when encoder arch unsupported: +#define BASE64_ENC_STUB \ + UNUSED(state); \ + UNUSED(src); \ + UNUSED(srclen); \ + UNUSED(out); \ + \ + *outlen = 0; + +// Stub function when decoder arch unsupported: +#define BASE64_DEC_STUB \ + UNUSED(state); \ + UNUSED(src); \ + UNUSED(srclen); \ + UNUSED(out); \ + UNUSED(outlen); \ + \ + return -1; + +struct codec +{ + void (* enc) BASE64_ENC_PARAMS; + int (* dec) BASE64_DEC_PARAMS; +}; + +extern void codec_choose (struct codec *, int flags); diff --git a/deps/base64/base64/lib/config.h b/deps/base64/base64/lib/config.h new file mode 100644 index 00000000000..5885289003f --- /dev/null +++ b/deps/base64/base64/lib/config.h @@ -0,0 +1 @@ +// Intentionally empty diff --git a/deps/base64/base64/lib/env.h b/deps/base64/base64/lib/env.h new file mode 100644 index 00000000000..d5c2fdb7952 --- /dev/null +++ b/deps/base64/base64/lib/env.h @@ -0,0 +1,74 @@ +#ifndef BASE64_ENV_H +#define BASE64_ENV_H + +// This header file contains macro definitions that describe certain aspects of +// the compile-time environment. Compatibility and portability macros go here. + +// Define machine endianness. This is for GCC: +#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# define BASE64_LITTLE_ENDIAN 1 +#else +# define BASE64_LITTLE_ENDIAN 0 +#endif + +// This is for Clang: +#ifdef __LITTLE_ENDIAN__ +# define BASE64_LITTLE_ENDIAN 1 +#endif + +#ifdef __BIG_ENDIAN__ +# define BASE64_LITTLE_ENDIAN 0 +#endif + +// MSVC++ needs intrin.h for _byteswap_uint64 (issue #68): +#if BASE64_LITTLE_ENDIAN && defined(_MSC_VER) +# include +#endif + +// Endian conversion functions: +#if BASE64_LITTLE_ENDIAN +# ifdef _MSC_VER +// Microsoft Visual C++: +# define BASE64_HTOBE32(x) _byteswap_ulong(x) +# define BASE64_HTOBE64(x) _byteswap_uint64(x) +# else +// GCC and Clang: +# define BASE64_HTOBE32(x) __builtin_bswap32(x) +# define BASE64_HTOBE64(x) __builtin_bswap64(x) +# endif +#else +// No conversion needed: +# define BASE64_HTOBE32(x) (x) +# define BASE64_HTOBE64(x) (x) +#endif + +// Detect word size: +#if defined (__x86_64__) +// This also works for the x32 ABI, which has a 64-bit word size. +# define BASE64_WORDSIZE 64 +#elif defined (_INTEGRAL_MAX_BITS) +# define BASE64_WORDSIZE _INTEGRAL_MAX_BITS +#elif defined (__WORDSIZE) +# define BASE64_WORDSIZE __WORDSIZE +#elif defined (__SIZE_WIDTH__) +# define BASE64_WORDSIZE __SIZE_WIDTH__ +#else +# error BASE64_WORDSIZE_NOT_DEFINED +#endif + +// End-of-file definitions. +// Almost end-of-file when waiting for the last '=' character: +#define BASE64_AEOF 1 +// End-of-file when stream end has been reached or invalid input provided: +#define BASE64_EOF 2 + +// GCC 7 defaults to issuing a warning for fallthrough in switch statements, +// unless the fallthrough cases are marked with an attribute. As we use +// fallthrough deliberately, define an alias for the attribute: +#if __GNUC__ >= 7 +# define BASE64_FALLTHROUGH __attribute__((fallthrough)); +#else +# define BASE64_FALLTHROUGH +#endif + +#endif // BASE64_ENV_H diff --git a/deps/base64/base64/lib/exports.txt b/deps/base64/base64/lib/exports.txt new file mode 100644 index 00000000000..67d45588f50 --- /dev/null +++ b/deps/base64/base64/lib/exports.txt @@ -0,0 +1,7 @@ +base64_encode +base64_stream_encode +base64_stream_encode_init +base64_stream_encode_final +base64_decode +base64_stream_decode +base64_stream_decode_init diff --git a/deps/base64/base64/lib/lib.c b/deps/base64/base64/lib/lib.c new file mode 100644 index 00000000000..4703512b87a --- /dev/null +++ b/deps/base64/base64/lib/lib.c @@ -0,0 +1,164 @@ +#include +#include +#ifdef _OPENMP +#include +#endif + +#include "../include/libbase64.h" +#include "tables/tables.h" +#include "codecs.h" +#include "env.h" + +// These static function pointers are initialized once when the library is +// first used, and remain in use for the remaining lifetime of the program. +// The idea being that CPU features don't change at runtime. +static struct codec codec = { NULL, NULL }; + +void +base64_stream_encode_init (struct base64_state *state, int flags) +{ + // If any of the codec flags are set, redo choice: + if (codec.enc == NULL || flags & 0xFF) { + codec_choose(&codec, flags); + } + state->eof = 0; + state->bytes = 0; + state->carry = 0; + state->flags = flags; +} + +void +base64_stream_encode + ( struct base64_state *state + , const char *src + , size_t srclen + , char *out + , size_t *outlen + ) +{ + codec.enc(state, src, srclen, out, outlen); +} + +void +base64_stream_encode_final + ( struct base64_state *state + , char *out + , size_t *outlen + ) +{ + uint8_t *o = (uint8_t *)out; + + if (state->bytes == 1) { + *o++ = base64_table_enc_6bit[state->carry]; + *o++ = '='; + *o++ = '='; + *outlen = 3; + return; + } + if (state->bytes == 2) { + *o++ = base64_table_enc_6bit[state->carry]; + *o++ = '='; + *outlen = 2; + return; + } + *outlen = 0; +} + +void +base64_stream_decode_init (struct base64_state *state, int flags) +{ + // If any of the codec flags are set, redo choice: + if (codec.dec == NULL || flags & 0xFF) { + codec_choose(&codec, flags); + } + state->eof = 0; + state->bytes = 0; + state->carry = 0; + state->flags = flags; +} + +int +base64_stream_decode + ( struct base64_state *state + , const char *src + , size_t srclen + , char *out + , size_t *outlen + ) +{ + return codec.dec(state, src, srclen, out, outlen); +} + +#ifdef _OPENMP + + // Due to the overhead of initializing OpenMP and creating a team of + // threads, we require the data length to be larger than a threshold: + #define OMP_THRESHOLD 20000 + + // Conditionally include OpenMP-accelerated codec implementations: + #include "lib_openmp.c" +#endif + +void +base64_encode + ( const char *src + , size_t srclen + , char *out + , size_t *outlen + , int flags + ) +{ + size_t s; + size_t t; + struct base64_state state; + + #ifdef _OPENMP + if (srclen >= OMP_THRESHOLD) { + base64_encode_openmp(src, srclen, out, outlen, flags); + return; + } + #endif + + // Init the stream reader: + base64_stream_encode_init(&state, flags); + + // Feed the whole string to the stream reader: + base64_stream_encode(&state, src, srclen, out, &s); + + // Finalize the stream by writing trailer if any: + base64_stream_encode_final(&state, out + s, &t); + + // Final output length is stream length plus tail: + *outlen = s + t; +} + +int +base64_decode + ( const char *src + , size_t srclen + , char *out + , size_t *outlen + , int flags + ) +{ + int ret; + struct base64_state state; + + #ifdef _OPENMP + if (srclen >= OMP_THRESHOLD) { + return base64_decode_openmp(src, srclen, out, outlen, flags); + } + #endif + + // Init the stream reader: + base64_stream_decode_init(&state, flags); + + // Feed the whole string to the stream reader: + ret = base64_stream_decode(&state, src, srclen, out, outlen); + + // If when decoding a whole block, we're still waiting for input then fail: + if (ret && (state.bytes == 0)) { + return ret; + } + return 0; +} diff --git a/deps/base64/base64/lib/lib_openmp.c b/deps/base64/base64/lib/lib_openmp.c new file mode 100644 index 00000000000..6b87c52486b --- /dev/null +++ b/deps/base64/base64/lib/lib_openmp.c @@ -0,0 +1,149 @@ +// This code makes some assumptions on the implementation of +// base64_stream_encode_init(), base64_stream_encode() and base64_stream_decode(). +// Basically these assumptions boil down to that when breaking the src into +// parts, out parts can be written without side effects. +// This is met when: +// 1) base64_stream_encode() and base64_stream_decode() don't use globals; +// 2) the shared variables src and out are not read or written outside of the +// bounds of their parts, i.e. when base64_stream_encode() reads a multiple +// of 3 bytes, it must write no more then a multiple of 4 bytes, not even +// temporarily; +// 3) the state flag can be discarded after base64_stream_encode() and +// base64_stream_decode() on the parts. + +static inline void +base64_encode_openmp + ( const char *src + , size_t srclen + , char *out + , size_t *outlen + , int flags + ) +{ + size_t s; + size_t t; + size_t sum = 0, len, last_len; + struct base64_state state, initial_state; + int num_threads, i; + + // Request a number of threads but not necessarily get them: + #pragma omp parallel + { + // Get the number of threads used from one thread only, + // as num_threads is a shared var: + #pragma omp single + { + num_threads = omp_get_num_threads(); + + // Split the input string into num_threads parts, each + // part a multiple of 3 bytes. The remaining bytes will + // be done later: + len = srclen / (num_threads * 3); + len *= 3; + last_len = srclen - num_threads * len; + + // Init the stream reader: + base64_stream_encode_init(&state, flags); + initial_state = state; + } + + // Single has an implicit barrier for all threads to wait here + // for the above to complete: + #pragma omp for firstprivate(state) private(s) reduction(+:sum) schedule(static,1) + for (i = 0; i < num_threads; i++) + { + // Feed each part of the string to the stream reader: + base64_stream_encode(&state, src + i * len, len, out + i * len * 4 / 3, &s); + sum += s; + } + } + + // As encoding should never fail and we encode an exact multiple + // of 3 bytes, we can discard state: + state = initial_state; + + // Encode the remaining bytes: + base64_stream_encode(&state, src + num_threads * len, last_len, out + num_threads * len * 4 / 3, &s); + + // Finalize the stream by writing trailer if any: + base64_stream_encode_final(&state, out + num_threads * len * 4 / 3 + s, &t); + + // Final output length is stream length plus tail: + sum += s + t; + *outlen = sum; +} + +static inline int +base64_decode_openmp + ( const char *src + , size_t srclen + , char *out + , size_t *outlen + , int flags + ) +{ + int num_threads, result = 0, i; + size_t sum = 0, len, last_len, s; + struct base64_state state, initial_state; + + // Request a number of threads but not necessarily get them: + #pragma omp parallel + { + // Get the number of threads used from one thread only, + // as num_threads is a shared var: + #pragma omp single + { + num_threads = omp_get_num_threads(); + + // Split the input string into num_threads parts, each + // part a multiple of 4 bytes. The remaining bytes will + // be done later: + len = srclen / (num_threads * 4); + len *= 4; + last_len = srclen - num_threads * len; + + // Init the stream reader: + base64_stream_decode_init(&state, flags); + + initial_state = state; + } + + // Single has an implicit barrier to wait here for the above to + // complete: + #pragma omp for firstprivate(state) private(s) reduction(+:sum, result) schedule(static,1) + for (i = 0; i < num_threads; i++) + { + int this_result; + + // Feed each part of the string to the stream reader: + this_result = base64_stream_decode(&state, src + i * len, len, out + i * len * 3 / 4, &s); + sum += s; + result += this_result; + } + } + + // If `result' equals `-num_threads', then all threads returned -1, + // indicating that the requested codec is not available: + if (result == -num_threads) { + return -1; + } + + // If `result' does not equal `num_threads', then at least one of the + // threads hit a decode error: + if (result != num_threads) { + return 0; + } + + // So far so good, now decode whatever remains in the buffer. Reuse the + // initial state, since we are at a 4-byte boundary: + state = initial_state; + result = base64_stream_decode(&state, src + num_threads * len, last_len, out + num_threads * len * 3 / 4, &s); + sum += s; + *outlen = sum; + + // If when decoding a whole block, we're still waiting for input then fail: + if (result && (state.bytes == 0)) { + return result; + } + return 0; +} diff --git a/deps/base64/base64/lib/tables/.gitignore b/deps/base64/base64/lib/tables/.gitignore new file mode 100644 index 00000000000..68043ffdf17 --- /dev/null +++ b/deps/base64/base64/lib/tables/.gitignore @@ -0,0 +1 @@ +table_generator diff --git a/deps/base64/base64/lib/tables/Makefile b/deps/base64/base64/lib/tables/Makefile new file mode 100644 index 00000000000..b47b93e7749 --- /dev/null +++ b/deps/base64/base64/lib/tables/Makefile @@ -0,0 +1,17 @@ +.PHONY: all clean + +TARGETS := table_dec_32bit.h table_enc_12bit.h table_generator + +all: $(TARGETS) + +clean: + $(RM) $(TARGETS) + +table_dec_32bit.h: table_generator + ./$^ > $@ + +table_enc_12bit.h: table_enc_12bit.py + ./$^ > $@ + +table_generator: table_generator.c + $(CC) $(CFLAGS) -o $@ $^ diff --git a/deps/base64/base64/lib/tables/table_dec_32bit.h b/deps/base64/base64/lib/tables/table_dec_32bit.h new file mode 100644 index 00000000000..f5d951fa79c --- /dev/null +++ b/deps/base64/base64/lib/tables/table_dec_32bit.h @@ -0,0 +1,393 @@ +#include +#define CHAR62 '+' +#define CHAR63 '/' +#define CHARPAD '=' + + +#if BASE64_LITTLE_ENDIAN + + +/* SPECIAL DECODE TABLES FOR LITTLE ENDIAN (INTEL) CPUS */ + +const uint32_t base64_table_dec_32bit_d0[256] = { +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x000000f8, 0xffffffff, 0xffffffff, 0xffffffff, 0x000000fc, +0x000000d0, 0x000000d4, 0x000000d8, 0x000000dc, 0x000000e0, 0x000000e4, +0x000000e8, 0x000000ec, 0x000000f0, 0x000000f4, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, +0x00000004, 0x00000008, 0x0000000c, 0x00000010, 0x00000014, 0x00000018, +0x0000001c, 0x00000020, 0x00000024, 0x00000028, 0x0000002c, 0x00000030, +0x00000034, 0x00000038, 0x0000003c, 0x00000040, 0x00000044, 0x00000048, +0x0000004c, 0x00000050, 0x00000054, 0x00000058, 0x0000005c, 0x00000060, +0x00000064, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x00000068, 0x0000006c, 0x00000070, 0x00000074, 0x00000078, +0x0000007c, 0x00000080, 0x00000084, 0x00000088, 0x0000008c, 0x00000090, +0x00000094, 0x00000098, 0x0000009c, 0x000000a0, 0x000000a4, 0x000000a8, +0x000000ac, 0x000000b0, 0x000000b4, 0x000000b8, 0x000000bc, 0x000000c0, +0x000000c4, 0x000000c8, 0x000000cc, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff +}; + + +const uint32_t base64_table_dec_32bit_d1[256] = { +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x0000e003, 0xffffffff, 0xffffffff, 0xffffffff, 0x0000f003, +0x00004003, 0x00005003, 0x00006003, 0x00007003, 0x00008003, 0x00009003, +0x0000a003, 0x0000b003, 0x0000c003, 0x0000d003, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, +0x00001000, 0x00002000, 0x00003000, 0x00004000, 0x00005000, 0x00006000, +0x00007000, 0x00008000, 0x00009000, 0x0000a000, 0x0000b000, 0x0000c000, +0x0000d000, 0x0000e000, 0x0000f000, 0x00000001, 0x00001001, 0x00002001, +0x00003001, 0x00004001, 0x00005001, 0x00006001, 0x00007001, 0x00008001, +0x00009001, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x0000a001, 0x0000b001, 0x0000c001, 0x0000d001, 0x0000e001, +0x0000f001, 0x00000002, 0x00001002, 0x00002002, 0x00003002, 0x00004002, +0x00005002, 0x00006002, 0x00007002, 0x00008002, 0x00009002, 0x0000a002, +0x0000b002, 0x0000c002, 0x0000d002, 0x0000e002, 0x0000f002, 0x00000003, +0x00001003, 0x00002003, 0x00003003, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff +}; + + +const uint32_t base64_table_dec_32bit_d2[256] = { +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x00800f00, 0xffffffff, 0xffffffff, 0xffffffff, 0x00c00f00, +0x00000d00, 0x00400d00, 0x00800d00, 0x00c00d00, 0x00000e00, 0x00400e00, +0x00800e00, 0x00c00e00, 0x00000f00, 0x00400f00, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, +0x00400000, 0x00800000, 0x00c00000, 0x00000100, 0x00400100, 0x00800100, +0x00c00100, 0x00000200, 0x00400200, 0x00800200, 0x00c00200, 0x00000300, +0x00400300, 0x00800300, 0x00c00300, 0x00000400, 0x00400400, 0x00800400, +0x00c00400, 0x00000500, 0x00400500, 0x00800500, 0x00c00500, 0x00000600, +0x00400600, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x00800600, 0x00c00600, 0x00000700, 0x00400700, 0x00800700, +0x00c00700, 0x00000800, 0x00400800, 0x00800800, 0x00c00800, 0x00000900, +0x00400900, 0x00800900, 0x00c00900, 0x00000a00, 0x00400a00, 0x00800a00, +0x00c00a00, 0x00000b00, 0x00400b00, 0x00800b00, 0x00c00b00, 0x00000c00, +0x00400c00, 0x00800c00, 0x00c00c00, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff +}; + + +const uint32_t base64_table_dec_32bit_d3[256] = { +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x003e0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x003f0000, +0x00340000, 0x00350000, 0x00360000, 0x00370000, 0x00380000, 0x00390000, +0x003a0000, 0x003b0000, 0x003c0000, 0x003d0000, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, +0x00010000, 0x00020000, 0x00030000, 0x00040000, 0x00050000, 0x00060000, +0x00070000, 0x00080000, 0x00090000, 0x000a0000, 0x000b0000, 0x000c0000, +0x000d0000, 0x000e0000, 0x000f0000, 0x00100000, 0x00110000, 0x00120000, +0x00130000, 0x00140000, 0x00150000, 0x00160000, 0x00170000, 0x00180000, +0x00190000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x001a0000, 0x001b0000, 0x001c0000, 0x001d0000, 0x001e0000, +0x001f0000, 0x00200000, 0x00210000, 0x00220000, 0x00230000, 0x00240000, +0x00250000, 0x00260000, 0x00270000, 0x00280000, 0x00290000, 0x002a0000, +0x002b0000, 0x002c0000, 0x002d0000, 0x002e0000, 0x002f0000, 0x00300000, +0x00310000, 0x00320000, 0x00330000, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff +}; + + +#else + + +/* SPECIAL DECODE TABLES FOR BIG ENDIAN (IBM/MOTOROLA/SUN) CPUS */ + +const uint32_t base64_table_dec_32bit_d0[256] = { +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xf8000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xfc000000, +0xd0000000, 0xd4000000, 0xd8000000, 0xdc000000, 0xe0000000, 0xe4000000, +0xe8000000, 0xec000000, 0xf0000000, 0xf4000000, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, +0x04000000, 0x08000000, 0x0c000000, 0x10000000, 0x14000000, 0x18000000, +0x1c000000, 0x20000000, 0x24000000, 0x28000000, 0x2c000000, 0x30000000, +0x34000000, 0x38000000, 0x3c000000, 0x40000000, 0x44000000, 0x48000000, +0x4c000000, 0x50000000, 0x54000000, 0x58000000, 0x5c000000, 0x60000000, +0x64000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x68000000, 0x6c000000, 0x70000000, 0x74000000, 0x78000000, +0x7c000000, 0x80000000, 0x84000000, 0x88000000, 0x8c000000, 0x90000000, +0x94000000, 0x98000000, 0x9c000000, 0xa0000000, 0xa4000000, 0xa8000000, +0xac000000, 0xb0000000, 0xb4000000, 0xb8000000, 0xbc000000, 0xc0000000, +0xc4000000, 0xc8000000, 0xcc000000, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff +}; + + +const uint32_t base64_table_dec_32bit_d1[256] = { +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x03e00000, 0xffffffff, 0xffffffff, 0xffffffff, 0x03f00000, +0x03400000, 0x03500000, 0x03600000, 0x03700000, 0x03800000, 0x03900000, +0x03a00000, 0x03b00000, 0x03c00000, 0x03d00000, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, +0x00100000, 0x00200000, 0x00300000, 0x00400000, 0x00500000, 0x00600000, +0x00700000, 0x00800000, 0x00900000, 0x00a00000, 0x00b00000, 0x00c00000, +0x00d00000, 0x00e00000, 0x00f00000, 0x01000000, 0x01100000, 0x01200000, +0x01300000, 0x01400000, 0x01500000, 0x01600000, 0x01700000, 0x01800000, +0x01900000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x01a00000, 0x01b00000, 0x01c00000, 0x01d00000, 0x01e00000, +0x01f00000, 0x02000000, 0x02100000, 0x02200000, 0x02300000, 0x02400000, +0x02500000, 0x02600000, 0x02700000, 0x02800000, 0x02900000, 0x02a00000, +0x02b00000, 0x02c00000, 0x02d00000, 0x02e00000, 0x02f00000, 0x03000000, +0x03100000, 0x03200000, 0x03300000, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff +}; + + +const uint32_t base64_table_dec_32bit_d2[256] = { +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x000f8000, 0xffffffff, 0xffffffff, 0xffffffff, 0x000fc000, +0x000d0000, 0x000d4000, 0x000d8000, 0x000dc000, 0x000e0000, 0x000e4000, +0x000e8000, 0x000ec000, 0x000f0000, 0x000f4000, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, +0x00004000, 0x00008000, 0x0000c000, 0x00010000, 0x00014000, 0x00018000, +0x0001c000, 0x00020000, 0x00024000, 0x00028000, 0x0002c000, 0x00030000, +0x00034000, 0x00038000, 0x0003c000, 0x00040000, 0x00044000, 0x00048000, +0x0004c000, 0x00050000, 0x00054000, 0x00058000, 0x0005c000, 0x00060000, +0x00064000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x00068000, 0x0006c000, 0x00070000, 0x00074000, 0x00078000, +0x0007c000, 0x00080000, 0x00084000, 0x00088000, 0x0008c000, 0x00090000, +0x00094000, 0x00098000, 0x0009c000, 0x000a0000, 0x000a4000, 0x000a8000, +0x000ac000, 0x000b0000, 0x000b4000, 0x000b8000, 0x000bc000, 0x000c0000, +0x000c4000, 0x000c8000, 0x000cc000, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff +}; + + +const uint32_t base64_table_dec_32bit_d3[256] = { +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x00003e00, 0xffffffff, 0xffffffff, 0xffffffff, 0x00003f00, +0x00003400, 0x00003500, 0x00003600, 0x00003700, 0x00003800, 0x00003900, +0x00003a00, 0x00003b00, 0x00003c00, 0x00003d00, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, +0x00000100, 0x00000200, 0x00000300, 0x00000400, 0x00000500, 0x00000600, +0x00000700, 0x00000800, 0x00000900, 0x00000a00, 0x00000b00, 0x00000c00, +0x00000d00, 0x00000e00, 0x00000f00, 0x00001000, 0x00001100, 0x00001200, +0x00001300, 0x00001400, 0x00001500, 0x00001600, 0x00001700, 0x00001800, +0x00001900, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x00001a00, 0x00001b00, 0x00001c00, 0x00001d00, 0x00001e00, +0x00001f00, 0x00002000, 0x00002100, 0x00002200, 0x00002300, 0x00002400, +0x00002500, 0x00002600, 0x00002700, 0x00002800, 0x00002900, 0x00002a00, +0x00002b00, 0x00002c00, 0x00002d00, 0x00002e00, 0x00002f00, 0x00003000, +0x00003100, 0x00003200, 0x00003300, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff +}; + + +#endif diff --git a/deps/base64/base64/lib/tables/table_enc_12bit.h b/deps/base64/base64/lib/tables/table_enc_12bit.h new file mode 100644 index 00000000000..2bc0d230687 --- /dev/null +++ b/deps/base64/base64/lib/tables/table_enc_12bit.h @@ -0,0 +1,1031 @@ +#include + +const uint16_t base64_table_enc_12bit[] = { +#if BASE64_LITTLE_ENDIAN + 0x4141U, 0x4241U, 0x4341U, 0x4441U, 0x4541U, 0x4641U, 0x4741U, 0x4841U, + 0x4941U, 0x4A41U, 0x4B41U, 0x4C41U, 0x4D41U, 0x4E41U, 0x4F41U, 0x5041U, + 0x5141U, 0x5241U, 0x5341U, 0x5441U, 0x5541U, 0x5641U, 0x5741U, 0x5841U, + 0x5941U, 0x5A41U, 0x6141U, 0x6241U, 0x6341U, 0x6441U, 0x6541U, 0x6641U, + 0x6741U, 0x6841U, 0x6941U, 0x6A41U, 0x6B41U, 0x6C41U, 0x6D41U, 0x6E41U, + 0x6F41U, 0x7041U, 0x7141U, 0x7241U, 0x7341U, 0x7441U, 0x7541U, 0x7641U, + 0x7741U, 0x7841U, 0x7941U, 0x7A41U, 0x3041U, 0x3141U, 0x3241U, 0x3341U, + 0x3441U, 0x3541U, 0x3641U, 0x3741U, 0x3841U, 0x3941U, 0x2B41U, 0x2F41U, + 0x4142U, 0x4242U, 0x4342U, 0x4442U, 0x4542U, 0x4642U, 0x4742U, 0x4842U, + 0x4942U, 0x4A42U, 0x4B42U, 0x4C42U, 0x4D42U, 0x4E42U, 0x4F42U, 0x5042U, + 0x5142U, 0x5242U, 0x5342U, 0x5442U, 0x5542U, 0x5642U, 0x5742U, 0x5842U, + 0x5942U, 0x5A42U, 0x6142U, 0x6242U, 0x6342U, 0x6442U, 0x6542U, 0x6642U, + 0x6742U, 0x6842U, 0x6942U, 0x6A42U, 0x6B42U, 0x6C42U, 0x6D42U, 0x6E42U, + 0x6F42U, 0x7042U, 0x7142U, 0x7242U, 0x7342U, 0x7442U, 0x7542U, 0x7642U, + 0x7742U, 0x7842U, 0x7942U, 0x7A42U, 0x3042U, 0x3142U, 0x3242U, 0x3342U, + 0x3442U, 0x3542U, 0x3642U, 0x3742U, 0x3842U, 0x3942U, 0x2B42U, 0x2F42U, + 0x4143U, 0x4243U, 0x4343U, 0x4443U, 0x4543U, 0x4643U, 0x4743U, 0x4843U, + 0x4943U, 0x4A43U, 0x4B43U, 0x4C43U, 0x4D43U, 0x4E43U, 0x4F43U, 0x5043U, + 0x5143U, 0x5243U, 0x5343U, 0x5443U, 0x5543U, 0x5643U, 0x5743U, 0x5843U, + 0x5943U, 0x5A43U, 0x6143U, 0x6243U, 0x6343U, 0x6443U, 0x6543U, 0x6643U, + 0x6743U, 0x6843U, 0x6943U, 0x6A43U, 0x6B43U, 0x6C43U, 0x6D43U, 0x6E43U, + 0x6F43U, 0x7043U, 0x7143U, 0x7243U, 0x7343U, 0x7443U, 0x7543U, 0x7643U, + 0x7743U, 0x7843U, 0x7943U, 0x7A43U, 0x3043U, 0x3143U, 0x3243U, 0x3343U, + 0x3443U, 0x3543U, 0x3643U, 0x3743U, 0x3843U, 0x3943U, 0x2B43U, 0x2F43U, + 0x4144U, 0x4244U, 0x4344U, 0x4444U, 0x4544U, 0x4644U, 0x4744U, 0x4844U, + 0x4944U, 0x4A44U, 0x4B44U, 0x4C44U, 0x4D44U, 0x4E44U, 0x4F44U, 0x5044U, + 0x5144U, 0x5244U, 0x5344U, 0x5444U, 0x5544U, 0x5644U, 0x5744U, 0x5844U, + 0x5944U, 0x5A44U, 0x6144U, 0x6244U, 0x6344U, 0x6444U, 0x6544U, 0x6644U, + 0x6744U, 0x6844U, 0x6944U, 0x6A44U, 0x6B44U, 0x6C44U, 0x6D44U, 0x6E44U, + 0x6F44U, 0x7044U, 0x7144U, 0x7244U, 0x7344U, 0x7444U, 0x7544U, 0x7644U, + 0x7744U, 0x7844U, 0x7944U, 0x7A44U, 0x3044U, 0x3144U, 0x3244U, 0x3344U, + 0x3444U, 0x3544U, 0x3644U, 0x3744U, 0x3844U, 0x3944U, 0x2B44U, 0x2F44U, + 0x4145U, 0x4245U, 0x4345U, 0x4445U, 0x4545U, 0x4645U, 0x4745U, 0x4845U, + 0x4945U, 0x4A45U, 0x4B45U, 0x4C45U, 0x4D45U, 0x4E45U, 0x4F45U, 0x5045U, + 0x5145U, 0x5245U, 0x5345U, 0x5445U, 0x5545U, 0x5645U, 0x5745U, 0x5845U, + 0x5945U, 0x5A45U, 0x6145U, 0x6245U, 0x6345U, 0x6445U, 0x6545U, 0x6645U, + 0x6745U, 0x6845U, 0x6945U, 0x6A45U, 0x6B45U, 0x6C45U, 0x6D45U, 0x6E45U, + 0x6F45U, 0x7045U, 0x7145U, 0x7245U, 0x7345U, 0x7445U, 0x7545U, 0x7645U, + 0x7745U, 0x7845U, 0x7945U, 0x7A45U, 0x3045U, 0x3145U, 0x3245U, 0x3345U, + 0x3445U, 0x3545U, 0x3645U, 0x3745U, 0x3845U, 0x3945U, 0x2B45U, 0x2F45U, + 0x4146U, 0x4246U, 0x4346U, 0x4446U, 0x4546U, 0x4646U, 0x4746U, 0x4846U, + 0x4946U, 0x4A46U, 0x4B46U, 0x4C46U, 0x4D46U, 0x4E46U, 0x4F46U, 0x5046U, + 0x5146U, 0x5246U, 0x5346U, 0x5446U, 0x5546U, 0x5646U, 0x5746U, 0x5846U, + 0x5946U, 0x5A46U, 0x6146U, 0x6246U, 0x6346U, 0x6446U, 0x6546U, 0x6646U, + 0x6746U, 0x6846U, 0x6946U, 0x6A46U, 0x6B46U, 0x6C46U, 0x6D46U, 0x6E46U, + 0x6F46U, 0x7046U, 0x7146U, 0x7246U, 0x7346U, 0x7446U, 0x7546U, 0x7646U, + 0x7746U, 0x7846U, 0x7946U, 0x7A46U, 0x3046U, 0x3146U, 0x3246U, 0x3346U, + 0x3446U, 0x3546U, 0x3646U, 0x3746U, 0x3846U, 0x3946U, 0x2B46U, 0x2F46U, + 0x4147U, 0x4247U, 0x4347U, 0x4447U, 0x4547U, 0x4647U, 0x4747U, 0x4847U, + 0x4947U, 0x4A47U, 0x4B47U, 0x4C47U, 0x4D47U, 0x4E47U, 0x4F47U, 0x5047U, + 0x5147U, 0x5247U, 0x5347U, 0x5447U, 0x5547U, 0x5647U, 0x5747U, 0x5847U, + 0x5947U, 0x5A47U, 0x6147U, 0x6247U, 0x6347U, 0x6447U, 0x6547U, 0x6647U, + 0x6747U, 0x6847U, 0x6947U, 0x6A47U, 0x6B47U, 0x6C47U, 0x6D47U, 0x6E47U, + 0x6F47U, 0x7047U, 0x7147U, 0x7247U, 0x7347U, 0x7447U, 0x7547U, 0x7647U, + 0x7747U, 0x7847U, 0x7947U, 0x7A47U, 0x3047U, 0x3147U, 0x3247U, 0x3347U, + 0x3447U, 0x3547U, 0x3647U, 0x3747U, 0x3847U, 0x3947U, 0x2B47U, 0x2F47U, + 0x4148U, 0x4248U, 0x4348U, 0x4448U, 0x4548U, 0x4648U, 0x4748U, 0x4848U, + 0x4948U, 0x4A48U, 0x4B48U, 0x4C48U, 0x4D48U, 0x4E48U, 0x4F48U, 0x5048U, + 0x5148U, 0x5248U, 0x5348U, 0x5448U, 0x5548U, 0x5648U, 0x5748U, 0x5848U, + 0x5948U, 0x5A48U, 0x6148U, 0x6248U, 0x6348U, 0x6448U, 0x6548U, 0x6648U, + 0x6748U, 0x6848U, 0x6948U, 0x6A48U, 0x6B48U, 0x6C48U, 0x6D48U, 0x6E48U, + 0x6F48U, 0x7048U, 0x7148U, 0x7248U, 0x7348U, 0x7448U, 0x7548U, 0x7648U, + 0x7748U, 0x7848U, 0x7948U, 0x7A48U, 0x3048U, 0x3148U, 0x3248U, 0x3348U, + 0x3448U, 0x3548U, 0x3648U, 0x3748U, 0x3848U, 0x3948U, 0x2B48U, 0x2F48U, + 0x4149U, 0x4249U, 0x4349U, 0x4449U, 0x4549U, 0x4649U, 0x4749U, 0x4849U, + 0x4949U, 0x4A49U, 0x4B49U, 0x4C49U, 0x4D49U, 0x4E49U, 0x4F49U, 0x5049U, + 0x5149U, 0x5249U, 0x5349U, 0x5449U, 0x5549U, 0x5649U, 0x5749U, 0x5849U, + 0x5949U, 0x5A49U, 0x6149U, 0x6249U, 0x6349U, 0x6449U, 0x6549U, 0x6649U, + 0x6749U, 0x6849U, 0x6949U, 0x6A49U, 0x6B49U, 0x6C49U, 0x6D49U, 0x6E49U, + 0x6F49U, 0x7049U, 0x7149U, 0x7249U, 0x7349U, 0x7449U, 0x7549U, 0x7649U, + 0x7749U, 0x7849U, 0x7949U, 0x7A49U, 0x3049U, 0x3149U, 0x3249U, 0x3349U, + 0x3449U, 0x3549U, 0x3649U, 0x3749U, 0x3849U, 0x3949U, 0x2B49U, 0x2F49U, + 0x414AU, 0x424AU, 0x434AU, 0x444AU, 0x454AU, 0x464AU, 0x474AU, 0x484AU, + 0x494AU, 0x4A4AU, 0x4B4AU, 0x4C4AU, 0x4D4AU, 0x4E4AU, 0x4F4AU, 0x504AU, + 0x514AU, 0x524AU, 0x534AU, 0x544AU, 0x554AU, 0x564AU, 0x574AU, 0x584AU, + 0x594AU, 0x5A4AU, 0x614AU, 0x624AU, 0x634AU, 0x644AU, 0x654AU, 0x664AU, + 0x674AU, 0x684AU, 0x694AU, 0x6A4AU, 0x6B4AU, 0x6C4AU, 0x6D4AU, 0x6E4AU, + 0x6F4AU, 0x704AU, 0x714AU, 0x724AU, 0x734AU, 0x744AU, 0x754AU, 0x764AU, + 0x774AU, 0x784AU, 0x794AU, 0x7A4AU, 0x304AU, 0x314AU, 0x324AU, 0x334AU, + 0x344AU, 0x354AU, 0x364AU, 0x374AU, 0x384AU, 0x394AU, 0x2B4AU, 0x2F4AU, + 0x414BU, 0x424BU, 0x434BU, 0x444BU, 0x454BU, 0x464BU, 0x474BU, 0x484BU, + 0x494BU, 0x4A4BU, 0x4B4BU, 0x4C4BU, 0x4D4BU, 0x4E4BU, 0x4F4BU, 0x504BU, + 0x514BU, 0x524BU, 0x534BU, 0x544BU, 0x554BU, 0x564BU, 0x574BU, 0x584BU, + 0x594BU, 0x5A4BU, 0x614BU, 0x624BU, 0x634BU, 0x644BU, 0x654BU, 0x664BU, + 0x674BU, 0x684BU, 0x694BU, 0x6A4BU, 0x6B4BU, 0x6C4BU, 0x6D4BU, 0x6E4BU, + 0x6F4BU, 0x704BU, 0x714BU, 0x724BU, 0x734BU, 0x744BU, 0x754BU, 0x764BU, + 0x774BU, 0x784BU, 0x794BU, 0x7A4BU, 0x304BU, 0x314BU, 0x324BU, 0x334BU, + 0x344BU, 0x354BU, 0x364BU, 0x374BU, 0x384BU, 0x394BU, 0x2B4BU, 0x2F4BU, + 0x414CU, 0x424CU, 0x434CU, 0x444CU, 0x454CU, 0x464CU, 0x474CU, 0x484CU, + 0x494CU, 0x4A4CU, 0x4B4CU, 0x4C4CU, 0x4D4CU, 0x4E4CU, 0x4F4CU, 0x504CU, + 0x514CU, 0x524CU, 0x534CU, 0x544CU, 0x554CU, 0x564CU, 0x574CU, 0x584CU, + 0x594CU, 0x5A4CU, 0x614CU, 0x624CU, 0x634CU, 0x644CU, 0x654CU, 0x664CU, + 0x674CU, 0x684CU, 0x694CU, 0x6A4CU, 0x6B4CU, 0x6C4CU, 0x6D4CU, 0x6E4CU, + 0x6F4CU, 0x704CU, 0x714CU, 0x724CU, 0x734CU, 0x744CU, 0x754CU, 0x764CU, + 0x774CU, 0x784CU, 0x794CU, 0x7A4CU, 0x304CU, 0x314CU, 0x324CU, 0x334CU, + 0x344CU, 0x354CU, 0x364CU, 0x374CU, 0x384CU, 0x394CU, 0x2B4CU, 0x2F4CU, + 0x414DU, 0x424DU, 0x434DU, 0x444DU, 0x454DU, 0x464DU, 0x474DU, 0x484DU, + 0x494DU, 0x4A4DU, 0x4B4DU, 0x4C4DU, 0x4D4DU, 0x4E4DU, 0x4F4DU, 0x504DU, + 0x514DU, 0x524DU, 0x534DU, 0x544DU, 0x554DU, 0x564DU, 0x574DU, 0x584DU, + 0x594DU, 0x5A4DU, 0x614DU, 0x624DU, 0x634DU, 0x644DU, 0x654DU, 0x664DU, + 0x674DU, 0x684DU, 0x694DU, 0x6A4DU, 0x6B4DU, 0x6C4DU, 0x6D4DU, 0x6E4DU, + 0x6F4DU, 0x704DU, 0x714DU, 0x724DU, 0x734DU, 0x744DU, 0x754DU, 0x764DU, + 0x774DU, 0x784DU, 0x794DU, 0x7A4DU, 0x304DU, 0x314DU, 0x324DU, 0x334DU, + 0x344DU, 0x354DU, 0x364DU, 0x374DU, 0x384DU, 0x394DU, 0x2B4DU, 0x2F4DU, + 0x414EU, 0x424EU, 0x434EU, 0x444EU, 0x454EU, 0x464EU, 0x474EU, 0x484EU, + 0x494EU, 0x4A4EU, 0x4B4EU, 0x4C4EU, 0x4D4EU, 0x4E4EU, 0x4F4EU, 0x504EU, + 0x514EU, 0x524EU, 0x534EU, 0x544EU, 0x554EU, 0x564EU, 0x574EU, 0x584EU, + 0x594EU, 0x5A4EU, 0x614EU, 0x624EU, 0x634EU, 0x644EU, 0x654EU, 0x664EU, + 0x674EU, 0x684EU, 0x694EU, 0x6A4EU, 0x6B4EU, 0x6C4EU, 0x6D4EU, 0x6E4EU, + 0x6F4EU, 0x704EU, 0x714EU, 0x724EU, 0x734EU, 0x744EU, 0x754EU, 0x764EU, + 0x774EU, 0x784EU, 0x794EU, 0x7A4EU, 0x304EU, 0x314EU, 0x324EU, 0x334EU, + 0x344EU, 0x354EU, 0x364EU, 0x374EU, 0x384EU, 0x394EU, 0x2B4EU, 0x2F4EU, + 0x414FU, 0x424FU, 0x434FU, 0x444FU, 0x454FU, 0x464FU, 0x474FU, 0x484FU, + 0x494FU, 0x4A4FU, 0x4B4FU, 0x4C4FU, 0x4D4FU, 0x4E4FU, 0x4F4FU, 0x504FU, + 0x514FU, 0x524FU, 0x534FU, 0x544FU, 0x554FU, 0x564FU, 0x574FU, 0x584FU, + 0x594FU, 0x5A4FU, 0x614FU, 0x624FU, 0x634FU, 0x644FU, 0x654FU, 0x664FU, + 0x674FU, 0x684FU, 0x694FU, 0x6A4FU, 0x6B4FU, 0x6C4FU, 0x6D4FU, 0x6E4FU, + 0x6F4FU, 0x704FU, 0x714FU, 0x724FU, 0x734FU, 0x744FU, 0x754FU, 0x764FU, + 0x774FU, 0x784FU, 0x794FU, 0x7A4FU, 0x304FU, 0x314FU, 0x324FU, 0x334FU, + 0x344FU, 0x354FU, 0x364FU, 0x374FU, 0x384FU, 0x394FU, 0x2B4FU, 0x2F4FU, + 0x4150U, 0x4250U, 0x4350U, 0x4450U, 0x4550U, 0x4650U, 0x4750U, 0x4850U, + 0x4950U, 0x4A50U, 0x4B50U, 0x4C50U, 0x4D50U, 0x4E50U, 0x4F50U, 0x5050U, + 0x5150U, 0x5250U, 0x5350U, 0x5450U, 0x5550U, 0x5650U, 0x5750U, 0x5850U, + 0x5950U, 0x5A50U, 0x6150U, 0x6250U, 0x6350U, 0x6450U, 0x6550U, 0x6650U, + 0x6750U, 0x6850U, 0x6950U, 0x6A50U, 0x6B50U, 0x6C50U, 0x6D50U, 0x6E50U, + 0x6F50U, 0x7050U, 0x7150U, 0x7250U, 0x7350U, 0x7450U, 0x7550U, 0x7650U, + 0x7750U, 0x7850U, 0x7950U, 0x7A50U, 0x3050U, 0x3150U, 0x3250U, 0x3350U, + 0x3450U, 0x3550U, 0x3650U, 0x3750U, 0x3850U, 0x3950U, 0x2B50U, 0x2F50U, + 0x4151U, 0x4251U, 0x4351U, 0x4451U, 0x4551U, 0x4651U, 0x4751U, 0x4851U, + 0x4951U, 0x4A51U, 0x4B51U, 0x4C51U, 0x4D51U, 0x4E51U, 0x4F51U, 0x5051U, + 0x5151U, 0x5251U, 0x5351U, 0x5451U, 0x5551U, 0x5651U, 0x5751U, 0x5851U, + 0x5951U, 0x5A51U, 0x6151U, 0x6251U, 0x6351U, 0x6451U, 0x6551U, 0x6651U, + 0x6751U, 0x6851U, 0x6951U, 0x6A51U, 0x6B51U, 0x6C51U, 0x6D51U, 0x6E51U, + 0x6F51U, 0x7051U, 0x7151U, 0x7251U, 0x7351U, 0x7451U, 0x7551U, 0x7651U, + 0x7751U, 0x7851U, 0x7951U, 0x7A51U, 0x3051U, 0x3151U, 0x3251U, 0x3351U, + 0x3451U, 0x3551U, 0x3651U, 0x3751U, 0x3851U, 0x3951U, 0x2B51U, 0x2F51U, + 0x4152U, 0x4252U, 0x4352U, 0x4452U, 0x4552U, 0x4652U, 0x4752U, 0x4852U, + 0x4952U, 0x4A52U, 0x4B52U, 0x4C52U, 0x4D52U, 0x4E52U, 0x4F52U, 0x5052U, + 0x5152U, 0x5252U, 0x5352U, 0x5452U, 0x5552U, 0x5652U, 0x5752U, 0x5852U, + 0x5952U, 0x5A52U, 0x6152U, 0x6252U, 0x6352U, 0x6452U, 0x6552U, 0x6652U, + 0x6752U, 0x6852U, 0x6952U, 0x6A52U, 0x6B52U, 0x6C52U, 0x6D52U, 0x6E52U, + 0x6F52U, 0x7052U, 0x7152U, 0x7252U, 0x7352U, 0x7452U, 0x7552U, 0x7652U, + 0x7752U, 0x7852U, 0x7952U, 0x7A52U, 0x3052U, 0x3152U, 0x3252U, 0x3352U, + 0x3452U, 0x3552U, 0x3652U, 0x3752U, 0x3852U, 0x3952U, 0x2B52U, 0x2F52U, + 0x4153U, 0x4253U, 0x4353U, 0x4453U, 0x4553U, 0x4653U, 0x4753U, 0x4853U, + 0x4953U, 0x4A53U, 0x4B53U, 0x4C53U, 0x4D53U, 0x4E53U, 0x4F53U, 0x5053U, + 0x5153U, 0x5253U, 0x5353U, 0x5453U, 0x5553U, 0x5653U, 0x5753U, 0x5853U, + 0x5953U, 0x5A53U, 0x6153U, 0x6253U, 0x6353U, 0x6453U, 0x6553U, 0x6653U, + 0x6753U, 0x6853U, 0x6953U, 0x6A53U, 0x6B53U, 0x6C53U, 0x6D53U, 0x6E53U, + 0x6F53U, 0x7053U, 0x7153U, 0x7253U, 0x7353U, 0x7453U, 0x7553U, 0x7653U, + 0x7753U, 0x7853U, 0x7953U, 0x7A53U, 0x3053U, 0x3153U, 0x3253U, 0x3353U, + 0x3453U, 0x3553U, 0x3653U, 0x3753U, 0x3853U, 0x3953U, 0x2B53U, 0x2F53U, + 0x4154U, 0x4254U, 0x4354U, 0x4454U, 0x4554U, 0x4654U, 0x4754U, 0x4854U, + 0x4954U, 0x4A54U, 0x4B54U, 0x4C54U, 0x4D54U, 0x4E54U, 0x4F54U, 0x5054U, + 0x5154U, 0x5254U, 0x5354U, 0x5454U, 0x5554U, 0x5654U, 0x5754U, 0x5854U, + 0x5954U, 0x5A54U, 0x6154U, 0x6254U, 0x6354U, 0x6454U, 0x6554U, 0x6654U, + 0x6754U, 0x6854U, 0x6954U, 0x6A54U, 0x6B54U, 0x6C54U, 0x6D54U, 0x6E54U, + 0x6F54U, 0x7054U, 0x7154U, 0x7254U, 0x7354U, 0x7454U, 0x7554U, 0x7654U, + 0x7754U, 0x7854U, 0x7954U, 0x7A54U, 0x3054U, 0x3154U, 0x3254U, 0x3354U, + 0x3454U, 0x3554U, 0x3654U, 0x3754U, 0x3854U, 0x3954U, 0x2B54U, 0x2F54U, + 0x4155U, 0x4255U, 0x4355U, 0x4455U, 0x4555U, 0x4655U, 0x4755U, 0x4855U, + 0x4955U, 0x4A55U, 0x4B55U, 0x4C55U, 0x4D55U, 0x4E55U, 0x4F55U, 0x5055U, + 0x5155U, 0x5255U, 0x5355U, 0x5455U, 0x5555U, 0x5655U, 0x5755U, 0x5855U, + 0x5955U, 0x5A55U, 0x6155U, 0x6255U, 0x6355U, 0x6455U, 0x6555U, 0x6655U, + 0x6755U, 0x6855U, 0x6955U, 0x6A55U, 0x6B55U, 0x6C55U, 0x6D55U, 0x6E55U, + 0x6F55U, 0x7055U, 0x7155U, 0x7255U, 0x7355U, 0x7455U, 0x7555U, 0x7655U, + 0x7755U, 0x7855U, 0x7955U, 0x7A55U, 0x3055U, 0x3155U, 0x3255U, 0x3355U, + 0x3455U, 0x3555U, 0x3655U, 0x3755U, 0x3855U, 0x3955U, 0x2B55U, 0x2F55U, + 0x4156U, 0x4256U, 0x4356U, 0x4456U, 0x4556U, 0x4656U, 0x4756U, 0x4856U, + 0x4956U, 0x4A56U, 0x4B56U, 0x4C56U, 0x4D56U, 0x4E56U, 0x4F56U, 0x5056U, + 0x5156U, 0x5256U, 0x5356U, 0x5456U, 0x5556U, 0x5656U, 0x5756U, 0x5856U, + 0x5956U, 0x5A56U, 0x6156U, 0x6256U, 0x6356U, 0x6456U, 0x6556U, 0x6656U, + 0x6756U, 0x6856U, 0x6956U, 0x6A56U, 0x6B56U, 0x6C56U, 0x6D56U, 0x6E56U, + 0x6F56U, 0x7056U, 0x7156U, 0x7256U, 0x7356U, 0x7456U, 0x7556U, 0x7656U, + 0x7756U, 0x7856U, 0x7956U, 0x7A56U, 0x3056U, 0x3156U, 0x3256U, 0x3356U, + 0x3456U, 0x3556U, 0x3656U, 0x3756U, 0x3856U, 0x3956U, 0x2B56U, 0x2F56U, + 0x4157U, 0x4257U, 0x4357U, 0x4457U, 0x4557U, 0x4657U, 0x4757U, 0x4857U, + 0x4957U, 0x4A57U, 0x4B57U, 0x4C57U, 0x4D57U, 0x4E57U, 0x4F57U, 0x5057U, + 0x5157U, 0x5257U, 0x5357U, 0x5457U, 0x5557U, 0x5657U, 0x5757U, 0x5857U, + 0x5957U, 0x5A57U, 0x6157U, 0x6257U, 0x6357U, 0x6457U, 0x6557U, 0x6657U, + 0x6757U, 0x6857U, 0x6957U, 0x6A57U, 0x6B57U, 0x6C57U, 0x6D57U, 0x6E57U, + 0x6F57U, 0x7057U, 0x7157U, 0x7257U, 0x7357U, 0x7457U, 0x7557U, 0x7657U, + 0x7757U, 0x7857U, 0x7957U, 0x7A57U, 0x3057U, 0x3157U, 0x3257U, 0x3357U, + 0x3457U, 0x3557U, 0x3657U, 0x3757U, 0x3857U, 0x3957U, 0x2B57U, 0x2F57U, + 0x4158U, 0x4258U, 0x4358U, 0x4458U, 0x4558U, 0x4658U, 0x4758U, 0x4858U, + 0x4958U, 0x4A58U, 0x4B58U, 0x4C58U, 0x4D58U, 0x4E58U, 0x4F58U, 0x5058U, + 0x5158U, 0x5258U, 0x5358U, 0x5458U, 0x5558U, 0x5658U, 0x5758U, 0x5858U, + 0x5958U, 0x5A58U, 0x6158U, 0x6258U, 0x6358U, 0x6458U, 0x6558U, 0x6658U, + 0x6758U, 0x6858U, 0x6958U, 0x6A58U, 0x6B58U, 0x6C58U, 0x6D58U, 0x6E58U, + 0x6F58U, 0x7058U, 0x7158U, 0x7258U, 0x7358U, 0x7458U, 0x7558U, 0x7658U, + 0x7758U, 0x7858U, 0x7958U, 0x7A58U, 0x3058U, 0x3158U, 0x3258U, 0x3358U, + 0x3458U, 0x3558U, 0x3658U, 0x3758U, 0x3858U, 0x3958U, 0x2B58U, 0x2F58U, + 0x4159U, 0x4259U, 0x4359U, 0x4459U, 0x4559U, 0x4659U, 0x4759U, 0x4859U, + 0x4959U, 0x4A59U, 0x4B59U, 0x4C59U, 0x4D59U, 0x4E59U, 0x4F59U, 0x5059U, + 0x5159U, 0x5259U, 0x5359U, 0x5459U, 0x5559U, 0x5659U, 0x5759U, 0x5859U, + 0x5959U, 0x5A59U, 0x6159U, 0x6259U, 0x6359U, 0x6459U, 0x6559U, 0x6659U, + 0x6759U, 0x6859U, 0x6959U, 0x6A59U, 0x6B59U, 0x6C59U, 0x6D59U, 0x6E59U, + 0x6F59U, 0x7059U, 0x7159U, 0x7259U, 0x7359U, 0x7459U, 0x7559U, 0x7659U, + 0x7759U, 0x7859U, 0x7959U, 0x7A59U, 0x3059U, 0x3159U, 0x3259U, 0x3359U, + 0x3459U, 0x3559U, 0x3659U, 0x3759U, 0x3859U, 0x3959U, 0x2B59U, 0x2F59U, + 0x415AU, 0x425AU, 0x435AU, 0x445AU, 0x455AU, 0x465AU, 0x475AU, 0x485AU, + 0x495AU, 0x4A5AU, 0x4B5AU, 0x4C5AU, 0x4D5AU, 0x4E5AU, 0x4F5AU, 0x505AU, + 0x515AU, 0x525AU, 0x535AU, 0x545AU, 0x555AU, 0x565AU, 0x575AU, 0x585AU, + 0x595AU, 0x5A5AU, 0x615AU, 0x625AU, 0x635AU, 0x645AU, 0x655AU, 0x665AU, + 0x675AU, 0x685AU, 0x695AU, 0x6A5AU, 0x6B5AU, 0x6C5AU, 0x6D5AU, 0x6E5AU, + 0x6F5AU, 0x705AU, 0x715AU, 0x725AU, 0x735AU, 0x745AU, 0x755AU, 0x765AU, + 0x775AU, 0x785AU, 0x795AU, 0x7A5AU, 0x305AU, 0x315AU, 0x325AU, 0x335AU, + 0x345AU, 0x355AU, 0x365AU, 0x375AU, 0x385AU, 0x395AU, 0x2B5AU, 0x2F5AU, + 0x4161U, 0x4261U, 0x4361U, 0x4461U, 0x4561U, 0x4661U, 0x4761U, 0x4861U, + 0x4961U, 0x4A61U, 0x4B61U, 0x4C61U, 0x4D61U, 0x4E61U, 0x4F61U, 0x5061U, + 0x5161U, 0x5261U, 0x5361U, 0x5461U, 0x5561U, 0x5661U, 0x5761U, 0x5861U, + 0x5961U, 0x5A61U, 0x6161U, 0x6261U, 0x6361U, 0x6461U, 0x6561U, 0x6661U, + 0x6761U, 0x6861U, 0x6961U, 0x6A61U, 0x6B61U, 0x6C61U, 0x6D61U, 0x6E61U, + 0x6F61U, 0x7061U, 0x7161U, 0x7261U, 0x7361U, 0x7461U, 0x7561U, 0x7661U, + 0x7761U, 0x7861U, 0x7961U, 0x7A61U, 0x3061U, 0x3161U, 0x3261U, 0x3361U, + 0x3461U, 0x3561U, 0x3661U, 0x3761U, 0x3861U, 0x3961U, 0x2B61U, 0x2F61U, + 0x4162U, 0x4262U, 0x4362U, 0x4462U, 0x4562U, 0x4662U, 0x4762U, 0x4862U, + 0x4962U, 0x4A62U, 0x4B62U, 0x4C62U, 0x4D62U, 0x4E62U, 0x4F62U, 0x5062U, + 0x5162U, 0x5262U, 0x5362U, 0x5462U, 0x5562U, 0x5662U, 0x5762U, 0x5862U, + 0x5962U, 0x5A62U, 0x6162U, 0x6262U, 0x6362U, 0x6462U, 0x6562U, 0x6662U, + 0x6762U, 0x6862U, 0x6962U, 0x6A62U, 0x6B62U, 0x6C62U, 0x6D62U, 0x6E62U, + 0x6F62U, 0x7062U, 0x7162U, 0x7262U, 0x7362U, 0x7462U, 0x7562U, 0x7662U, + 0x7762U, 0x7862U, 0x7962U, 0x7A62U, 0x3062U, 0x3162U, 0x3262U, 0x3362U, + 0x3462U, 0x3562U, 0x3662U, 0x3762U, 0x3862U, 0x3962U, 0x2B62U, 0x2F62U, + 0x4163U, 0x4263U, 0x4363U, 0x4463U, 0x4563U, 0x4663U, 0x4763U, 0x4863U, + 0x4963U, 0x4A63U, 0x4B63U, 0x4C63U, 0x4D63U, 0x4E63U, 0x4F63U, 0x5063U, + 0x5163U, 0x5263U, 0x5363U, 0x5463U, 0x5563U, 0x5663U, 0x5763U, 0x5863U, + 0x5963U, 0x5A63U, 0x6163U, 0x6263U, 0x6363U, 0x6463U, 0x6563U, 0x6663U, + 0x6763U, 0x6863U, 0x6963U, 0x6A63U, 0x6B63U, 0x6C63U, 0x6D63U, 0x6E63U, + 0x6F63U, 0x7063U, 0x7163U, 0x7263U, 0x7363U, 0x7463U, 0x7563U, 0x7663U, + 0x7763U, 0x7863U, 0x7963U, 0x7A63U, 0x3063U, 0x3163U, 0x3263U, 0x3363U, + 0x3463U, 0x3563U, 0x3663U, 0x3763U, 0x3863U, 0x3963U, 0x2B63U, 0x2F63U, + 0x4164U, 0x4264U, 0x4364U, 0x4464U, 0x4564U, 0x4664U, 0x4764U, 0x4864U, + 0x4964U, 0x4A64U, 0x4B64U, 0x4C64U, 0x4D64U, 0x4E64U, 0x4F64U, 0x5064U, + 0x5164U, 0x5264U, 0x5364U, 0x5464U, 0x5564U, 0x5664U, 0x5764U, 0x5864U, + 0x5964U, 0x5A64U, 0x6164U, 0x6264U, 0x6364U, 0x6464U, 0x6564U, 0x6664U, + 0x6764U, 0x6864U, 0x6964U, 0x6A64U, 0x6B64U, 0x6C64U, 0x6D64U, 0x6E64U, + 0x6F64U, 0x7064U, 0x7164U, 0x7264U, 0x7364U, 0x7464U, 0x7564U, 0x7664U, + 0x7764U, 0x7864U, 0x7964U, 0x7A64U, 0x3064U, 0x3164U, 0x3264U, 0x3364U, + 0x3464U, 0x3564U, 0x3664U, 0x3764U, 0x3864U, 0x3964U, 0x2B64U, 0x2F64U, + 0x4165U, 0x4265U, 0x4365U, 0x4465U, 0x4565U, 0x4665U, 0x4765U, 0x4865U, + 0x4965U, 0x4A65U, 0x4B65U, 0x4C65U, 0x4D65U, 0x4E65U, 0x4F65U, 0x5065U, + 0x5165U, 0x5265U, 0x5365U, 0x5465U, 0x5565U, 0x5665U, 0x5765U, 0x5865U, + 0x5965U, 0x5A65U, 0x6165U, 0x6265U, 0x6365U, 0x6465U, 0x6565U, 0x6665U, + 0x6765U, 0x6865U, 0x6965U, 0x6A65U, 0x6B65U, 0x6C65U, 0x6D65U, 0x6E65U, + 0x6F65U, 0x7065U, 0x7165U, 0x7265U, 0x7365U, 0x7465U, 0x7565U, 0x7665U, + 0x7765U, 0x7865U, 0x7965U, 0x7A65U, 0x3065U, 0x3165U, 0x3265U, 0x3365U, + 0x3465U, 0x3565U, 0x3665U, 0x3765U, 0x3865U, 0x3965U, 0x2B65U, 0x2F65U, + 0x4166U, 0x4266U, 0x4366U, 0x4466U, 0x4566U, 0x4666U, 0x4766U, 0x4866U, + 0x4966U, 0x4A66U, 0x4B66U, 0x4C66U, 0x4D66U, 0x4E66U, 0x4F66U, 0x5066U, + 0x5166U, 0x5266U, 0x5366U, 0x5466U, 0x5566U, 0x5666U, 0x5766U, 0x5866U, + 0x5966U, 0x5A66U, 0x6166U, 0x6266U, 0x6366U, 0x6466U, 0x6566U, 0x6666U, + 0x6766U, 0x6866U, 0x6966U, 0x6A66U, 0x6B66U, 0x6C66U, 0x6D66U, 0x6E66U, + 0x6F66U, 0x7066U, 0x7166U, 0x7266U, 0x7366U, 0x7466U, 0x7566U, 0x7666U, + 0x7766U, 0x7866U, 0x7966U, 0x7A66U, 0x3066U, 0x3166U, 0x3266U, 0x3366U, + 0x3466U, 0x3566U, 0x3666U, 0x3766U, 0x3866U, 0x3966U, 0x2B66U, 0x2F66U, + 0x4167U, 0x4267U, 0x4367U, 0x4467U, 0x4567U, 0x4667U, 0x4767U, 0x4867U, + 0x4967U, 0x4A67U, 0x4B67U, 0x4C67U, 0x4D67U, 0x4E67U, 0x4F67U, 0x5067U, + 0x5167U, 0x5267U, 0x5367U, 0x5467U, 0x5567U, 0x5667U, 0x5767U, 0x5867U, + 0x5967U, 0x5A67U, 0x6167U, 0x6267U, 0x6367U, 0x6467U, 0x6567U, 0x6667U, + 0x6767U, 0x6867U, 0x6967U, 0x6A67U, 0x6B67U, 0x6C67U, 0x6D67U, 0x6E67U, + 0x6F67U, 0x7067U, 0x7167U, 0x7267U, 0x7367U, 0x7467U, 0x7567U, 0x7667U, + 0x7767U, 0x7867U, 0x7967U, 0x7A67U, 0x3067U, 0x3167U, 0x3267U, 0x3367U, + 0x3467U, 0x3567U, 0x3667U, 0x3767U, 0x3867U, 0x3967U, 0x2B67U, 0x2F67U, + 0x4168U, 0x4268U, 0x4368U, 0x4468U, 0x4568U, 0x4668U, 0x4768U, 0x4868U, + 0x4968U, 0x4A68U, 0x4B68U, 0x4C68U, 0x4D68U, 0x4E68U, 0x4F68U, 0x5068U, + 0x5168U, 0x5268U, 0x5368U, 0x5468U, 0x5568U, 0x5668U, 0x5768U, 0x5868U, + 0x5968U, 0x5A68U, 0x6168U, 0x6268U, 0x6368U, 0x6468U, 0x6568U, 0x6668U, + 0x6768U, 0x6868U, 0x6968U, 0x6A68U, 0x6B68U, 0x6C68U, 0x6D68U, 0x6E68U, + 0x6F68U, 0x7068U, 0x7168U, 0x7268U, 0x7368U, 0x7468U, 0x7568U, 0x7668U, + 0x7768U, 0x7868U, 0x7968U, 0x7A68U, 0x3068U, 0x3168U, 0x3268U, 0x3368U, + 0x3468U, 0x3568U, 0x3668U, 0x3768U, 0x3868U, 0x3968U, 0x2B68U, 0x2F68U, + 0x4169U, 0x4269U, 0x4369U, 0x4469U, 0x4569U, 0x4669U, 0x4769U, 0x4869U, + 0x4969U, 0x4A69U, 0x4B69U, 0x4C69U, 0x4D69U, 0x4E69U, 0x4F69U, 0x5069U, + 0x5169U, 0x5269U, 0x5369U, 0x5469U, 0x5569U, 0x5669U, 0x5769U, 0x5869U, + 0x5969U, 0x5A69U, 0x6169U, 0x6269U, 0x6369U, 0x6469U, 0x6569U, 0x6669U, + 0x6769U, 0x6869U, 0x6969U, 0x6A69U, 0x6B69U, 0x6C69U, 0x6D69U, 0x6E69U, + 0x6F69U, 0x7069U, 0x7169U, 0x7269U, 0x7369U, 0x7469U, 0x7569U, 0x7669U, + 0x7769U, 0x7869U, 0x7969U, 0x7A69U, 0x3069U, 0x3169U, 0x3269U, 0x3369U, + 0x3469U, 0x3569U, 0x3669U, 0x3769U, 0x3869U, 0x3969U, 0x2B69U, 0x2F69U, + 0x416AU, 0x426AU, 0x436AU, 0x446AU, 0x456AU, 0x466AU, 0x476AU, 0x486AU, + 0x496AU, 0x4A6AU, 0x4B6AU, 0x4C6AU, 0x4D6AU, 0x4E6AU, 0x4F6AU, 0x506AU, + 0x516AU, 0x526AU, 0x536AU, 0x546AU, 0x556AU, 0x566AU, 0x576AU, 0x586AU, + 0x596AU, 0x5A6AU, 0x616AU, 0x626AU, 0x636AU, 0x646AU, 0x656AU, 0x666AU, + 0x676AU, 0x686AU, 0x696AU, 0x6A6AU, 0x6B6AU, 0x6C6AU, 0x6D6AU, 0x6E6AU, + 0x6F6AU, 0x706AU, 0x716AU, 0x726AU, 0x736AU, 0x746AU, 0x756AU, 0x766AU, + 0x776AU, 0x786AU, 0x796AU, 0x7A6AU, 0x306AU, 0x316AU, 0x326AU, 0x336AU, + 0x346AU, 0x356AU, 0x366AU, 0x376AU, 0x386AU, 0x396AU, 0x2B6AU, 0x2F6AU, + 0x416BU, 0x426BU, 0x436BU, 0x446BU, 0x456BU, 0x466BU, 0x476BU, 0x486BU, + 0x496BU, 0x4A6BU, 0x4B6BU, 0x4C6BU, 0x4D6BU, 0x4E6BU, 0x4F6BU, 0x506BU, + 0x516BU, 0x526BU, 0x536BU, 0x546BU, 0x556BU, 0x566BU, 0x576BU, 0x586BU, + 0x596BU, 0x5A6BU, 0x616BU, 0x626BU, 0x636BU, 0x646BU, 0x656BU, 0x666BU, + 0x676BU, 0x686BU, 0x696BU, 0x6A6BU, 0x6B6BU, 0x6C6BU, 0x6D6BU, 0x6E6BU, + 0x6F6BU, 0x706BU, 0x716BU, 0x726BU, 0x736BU, 0x746BU, 0x756BU, 0x766BU, + 0x776BU, 0x786BU, 0x796BU, 0x7A6BU, 0x306BU, 0x316BU, 0x326BU, 0x336BU, + 0x346BU, 0x356BU, 0x366BU, 0x376BU, 0x386BU, 0x396BU, 0x2B6BU, 0x2F6BU, + 0x416CU, 0x426CU, 0x436CU, 0x446CU, 0x456CU, 0x466CU, 0x476CU, 0x486CU, + 0x496CU, 0x4A6CU, 0x4B6CU, 0x4C6CU, 0x4D6CU, 0x4E6CU, 0x4F6CU, 0x506CU, + 0x516CU, 0x526CU, 0x536CU, 0x546CU, 0x556CU, 0x566CU, 0x576CU, 0x586CU, + 0x596CU, 0x5A6CU, 0x616CU, 0x626CU, 0x636CU, 0x646CU, 0x656CU, 0x666CU, + 0x676CU, 0x686CU, 0x696CU, 0x6A6CU, 0x6B6CU, 0x6C6CU, 0x6D6CU, 0x6E6CU, + 0x6F6CU, 0x706CU, 0x716CU, 0x726CU, 0x736CU, 0x746CU, 0x756CU, 0x766CU, + 0x776CU, 0x786CU, 0x796CU, 0x7A6CU, 0x306CU, 0x316CU, 0x326CU, 0x336CU, + 0x346CU, 0x356CU, 0x366CU, 0x376CU, 0x386CU, 0x396CU, 0x2B6CU, 0x2F6CU, + 0x416DU, 0x426DU, 0x436DU, 0x446DU, 0x456DU, 0x466DU, 0x476DU, 0x486DU, + 0x496DU, 0x4A6DU, 0x4B6DU, 0x4C6DU, 0x4D6DU, 0x4E6DU, 0x4F6DU, 0x506DU, + 0x516DU, 0x526DU, 0x536DU, 0x546DU, 0x556DU, 0x566DU, 0x576DU, 0x586DU, + 0x596DU, 0x5A6DU, 0x616DU, 0x626DU, 0x636DU, 0x646DU, 0x656DU, 0x666DU, + 0x676DU, 0x686DU, 0x696DU, 0x6A6DU, 0x6B6DU, 0x6C6DU, 0x6D6DU, 0x6E6DU, + 0x6F6DU, 0x706DU, 0x716DU, 0x726DU, 0x736DU, 0x746DU, 0x756DU, 0x766DU, + 0x776DU, 0x786DU, 0x796DU, 0x7A6DU, 0x306DU, 0x316DU, 0x326DU, 0x336DU, + 0x346DU, 0x356DU, 0x366DU, 0x376DU, 0x386DU, 0x396DU, 0x2B6DU, 0x2F6DU, + 0x416EU, 0x426EU, 0x436EU, 0x446EU, 0x456EU, 0x466EU, 0x476EU, 0x486EU, + 0x496EU, 0x4A6EU, 0x4B6EU, 0x4C6EU, 0x4D6EU, 0x4E6EU, 0x4F6EU, 0x506EU, + 0x516EU, 0x526EU, 0x536EU, 0x546EU, 0x556EU, 0x566EU, 0x576EU, 0x586EU, + 0x596EU, 0x5A6EU, 0x616EU, 0x626EU, 0x636EU, 0x646EU, 0x656EU, 0x666EU, + 0x676EU, 0x686EU, 0x696EU, 0x6A6EU, 0x6B6EU, 0x6C6EU, 0x6D6EU, 0x6E6EU, + 0x6F6EU, 0x706EU, 0x716EU, 0x726EU, 0x736EU, 0x746EU, 0x756EU, 0x766EU, + 0x776EU, 0x786EU, 0x796EU, 0x7A6EU, 0x306EU, 0x316EU, 0x326EU, 0x336EU, + 0x346EU, 0x356EU, 0x366EU, 0x376EU, 0x386EU, 0x396EU, 0x2B6EU, 0x2F6EU, + 0x416FU, 0x426FU, 0x436FU, 0x446FU, 0x456FU, 0x466FU, 0x476FU, 0x486FU, + 0x496FU, 0x4A6FU, 0x4B6FU, 0x4C6FU, 0x4D6FU, 0x4E6FU, 0x4F6FU, 0x506FU, + 0x516FU, 0x526FU, 0x536FU, 0x546FU, 0x556FU, 0x566FU, 0x576FU, 0x586FU, + 0x596FU, 0x5A6FU, 0x616FU, 0x626FU, 0x636FU, 0x646FU, 0x656FU, 0x666FU, + 0x676FU, 0x686FU, 0x696FU, 0x6A6FU, 0x6B6FU, 0x6C6FU, 0x6D6FU, 0x6E6FU, + 0x6F6FU, 0x706FU, 0x716FU, 0x726FU, 0x736FU, 0x746FU, 0x756FU, 0x766FU, + 0x776FU, 0x786FU, 0x796FU, 0x7A6FU, 0x306FU, 0x316FU, 0x326FU, 0x336FU, + 0x346FU, 0x356FU, 0x366FU, 0x376FU, 0x386FU, 0x396FU, 0x2B6FU, 0x2F6FU, + 0x4170U, 0x4270U, 0x4370U, 0x4470U, 0x4570U, 0x4670U, 0x4770U, 0x4870U, + 0x4970U, 0x4A70U, 0x4B70U, 0x4C70U, 0x4D70U, 0x4E70U, 0x4F70U, 0x5070U, + 0x5170U, 0x5270U, 0x5370U, 0x5470U, 0x5570U, 0x5670U, 0x5770U, 0x5870U, + 0x5970U, 0x5A70U, 0x6170U, 0x6270U, 0x6370U, 0x6470U, 0x6570U, 0x6670U, + 0x6770U, 0x6870U, 0x6970U, 0x6A70U, 0x6B70U, 0x6C70U, 0x6D70U, 0x6E70U, + 0x6F70U, 0x7070U, 0x7170U, 0x7270U, 0x7370U, 0x7470U, 0x7570U, 0x7670U, + 0x7770U, 0x7870U, 0x7970U, 0x7A70U, 0x3070U, 0x3170U, 0x3270U, 0x3370U, + 0x3470U, 0x3570U, 0x3670U, 0x3770U, 0x3870U, 0x3970U, 0x2B70U, 0x2F70U, + 0x4171U, 0x4271U, 0x4371U, 0x4471U, 0x4571U, 0x4671U, 0x4771U, 0x4871U, + 0x4971U, 0x4A71U, 0x4B71U, 0x4C71U, 0x4D71U, 0x4E71U, 0x4F71U, 0x5071U, + 0x5171U, 0x5271U, 0x5371U, 0x5471U, 0x5571U, 0x5671U, 0x5771U, 0x5871U, + 0x5971U, 0x5A71U, 0x6171U, 0x6271U, 0x6371U, 0x6471U, 0x6571U, 0x6671U, + 0x6771U, 0x6871U, 0x6971U, 0x6A71U, 0x6B71U, 0x6C71U, 0x6D71U, 0x6E71U, + 0x6F71U, 0x7071U, 0x7171U, 0x7271U, 0x7371U, 0x7471U, 0x7571U, 0x7671U, + 0x7771U, 0x7871U, 0x7971U, 0x7A71U, 0x3071U, 0x3171U, 0x3271U, 0x3371U, + 0x3471U, 0x3571U, 0x3671U, 0x3771U, 0x3871U, 0x3971U, 0x2B71U, 0x2F71U, + 0x4172U, 0x4272U, 0x4372U, 0x4472U, 0x4572U, 0x4672U, 0x4772U, 0x4872U, + 0x4972U, 0x4A72U, 0x4B72U, 0x4C72U, 0x4D72U, 0x4E72U, 0x4F72U, 0x5072U, + 0x5172U, 0x5272U, 0x5372U, 0x5472U, 0x5572U, 0x5672U, 0x5772U, 0x5872U, + 0x5972U, 0x5A72U, 0x6172U, 0x6272U, 0x6372U, 0x6472U, 0x6572U, 0x6672U, + 0x6772U, 0x6872U, 0x6972U, 0x6A72U, 0x6B72U, 0x6C72U, 0x6D72U, 0x6E72U, + 0x6F72U, 0x7072U, 0x7172U, 0x7272U, 0x7372U, 0x7472U, 0x7572U, 0x7672U, + 0x7772U, 0x7872U, 0x7972U, 0x7A72U, 0x3072U, 0x3172U, 0x3272U, 0x3372U, + 0x3472U, 0x3572U, 0x3672U, 0x3772U, 0x3872U, 0x3972U, 0x2B72U, 0x2F72U, + 0x4173U, 0x4273U, 0x4373U, 0x4473U, 0x4573U, 0x4673U, 0x4773U, 0x4873U, + 0x4973U, 0x4A73U, 0x4B73U, 0x4C73U, 0x4D73U, 0x4E73U, 0x4F73U, 0x5073U, + 0x5173U, 0x5273U, 0x5373U, 0x5473U, 0x5573U, 0x5673U, 0x5773U, 0x5873U, + 0x5973U, 0x5A73U, 0x6173U, 0x6273U, 0x6373U, 0x6473U, 0x6573U, 0x6673U, + 0x6773U, 0x6873U, 0x6973U, 0x6A73U, 0x6B73U, 0x6C73U, 0x6D73U, 0x6E73U, + 0x6F73U, 0x7073U, 0x7173U, 0x7273U, 0x7373U, 0x7473U, 0x7573U, 0x7673U, + 0x7773U, 0x7873U, 0x7973U, 0x7A73U, 0x3073U, 0x3173U, 0x3273U, 0x3373U, + 0x3473U, 0x3573U, 0x3673U, 0x3773U, 0x3873U, 0x3973U, 0x2B73U, 0x2F73U, + 0x4174U, 0x4274U, 0x4374U, 0x4474U, 0x4574U, 0x4674U, 0x4774U, 0x4874U, + 0x4974U, 0x4A74U, 0x4B74U, 0x4C74U, 0x4D74U, 0x4E74U, 0x4F74U, 0x5074U, + 0x5174U, 0x5274U, 0x5374U, 0x5474U, 0x5574U, 0x5674U, 0x5774U, 0x5874U, + 0x5974U, 0x5A74U, 0x6174U, 0x6274U, 0x6374U, 0x6474U, 0x6574U, 0x6674U, + 0x6774U, 0x6874U, 0x6974U, 0x6A74U, 0x6B74U, 0x6C74U, 0x6D74U, 0x6E74U, + 0x6F74U, 0x7074U, 0x7174U, 0x7274U, 0x7374U, 0x7474U, 0x7574U, 0x7674U, + 0x7774U, 0x7874U, 0x7974U, 0x7A74U, 0x3074U, 0x3174U, 0x3274U, 0x3374U, + 0x3474U, 0x3574U, 0x3674U, 0x3774U, 0x3874U, 0x3974U, 0x2B74U, 0x2F74U, + 0x4175U, 0x4275U, 0x4375U, 0x4475U, 0x4575U, 0x4675U, 0x4775U, 0x4875U, + 0x4975U, 0x4A75U, 0x4B75U, 0x4C75U, 0x4D75U, 0x4E75U, 0x4F75U, 0x5075U, + 0x5175U, 0x5275U, 0x5375U, 0x5475U, 0x5575U, 0x5675U, 0x5775U, 0x5875U, + 0x5975U, 0x5A75U, 0x6175U, 0x6275U, 0x6375U, 0x6475U, 0x6575U, 0x6675U, + 0x6775U, 0x6875U, 0x6975U, 0x6A75U, 0x6B75U, 0x6C75U, 0x6D75U, 0x6E75U, + 0x6F75U, 0x7075U, 0x7175U, 0x7275U, 0x7375U, 0x7475U, 0x7575U, 0x7675U, + 0x7775U, 0x7875U, 0x7975U, 0x7A75U, 0x3075U, 0x3175U, 0x3275U, 0x3375U, + 0x3475U, 0x3575U, 0x3675U, 0x3775U, 0x3875U, 0x3975U, 0x2B75U, 0x2F75U, + 0x4176U, 0x4276U, 0x4376U, 0x4476U, 0x4576U, 0x4676U, 0x4776U, 0x4876U, + 0x4976U, 0x4A76U, 0x4B76U, 0x4C76U, 0x4D76U, 0x4E76U, 0x4F76U, 0x5076U, + 0x5176U, 0x5276U, 0x5376U, 0x5476U, 0x5576U, 0x5676U, 0x5776U, 0x5876U, + 0x5976U, 0x5A76U, 0x6176U, 0x6276U, 0x6376U, 0x6476U, 0x6576U, 0x6676U, + 0x6776U, 0x6876U, 0x6976U, 0x6A76U, 0x6B76U, 0x6C76U, 0x6D76U, 0x6E76U, + 0x6F76U, 0x7076U, 0x7176U, 0x7276U, 0x7376U, 0x7476U, 0x7576U, 0x7676U, + 0x7776U, 0x7876U, 0x7976U, 0x7A76U, 0x3076U, 0x3176U, 0x3276U, 0x3376U, + 0x3476U, 0x3576U, 0x3676U, 0x3776U, 0x3876U, 0x3976U, 0x2B76U, 0x2F76U, + 0x4177U, 0x4277U, 0x4377U, 0x4477U, 0x4577U, 0x4677U, 0x4777U, 0x4877U, + 0x4977U, 0x4A77U, 0x4B77U, 0x4C77U, 0x4D77U, 0x4E77U, 0x4F77U, 0x5077U, + 0x5177U, 0x5277U, 0x5377U, 0x5477U, 0x5577U, 0x5677U, 0x5777U, 0x5877U, + 0x5977U, 0x5A77U, 0x6177U, 0x6277U, 0x6377U, 0x6477U, 0x6577U, 0x6677U, + 0x6777U, 0x6877U, 0x6977U, 0x6A77U, 0x6B77U, 0x6C77U, 0x6D77U, 0x6E77U, + 0x6F77U, 0x7077U, 0x7177U, 0x7277U, 0x7377U, 0x7477U, 0x7577U, 0x7677U, + 0x7777U, 0x7877U, 0x7977U, 0x7A77U, 0x3077U, 0x3177U, 0x3277U, 0x3377U, + 0x3477U, 0x3577U, 0x3677U, 0x3777U, 0x3877U, 0x3977U, 0x2B77U, 0x2F77U, + 0x4178U, 0x4278U, 0x4378U, 0x4478U, 0x4578U, 0x4678U, 0x4778U, 0x4878U, + 0x4978U, 0x4A78U, 0x4B78U, 0x4C78U, 0x4D78U, 0x4E78U, 0x4F78U, 0x5078U, + 0x5178U, 0x5278U, 0x5378U, 0x5478U, 0x5578U, 0x5678U, 0x5778U, 0x5878U, + 0x5978U, 0x5A78U, 0x6178U, 0x6278U, 0x6378U, 0x6478U, 0x6578U, 0x6678U, + 0x6778U, 0x6878U, 0x6978U, 0x6A78U, 0x6B78U, 0x6C78U, 0x6D78U, 0x6E78U, + 0x6F78U, 0x7078U, 0x7178U, 0x7278U, 0x7378U, 0x7478U, 0x7578U, 0x7678U, + 0x7778U, 0x7878U, 0x7978U, 0x7A78U, 0x3078U, 0x3178U, 0x3278U, 0x3378U, + 0x3478U, 0x3578U, 0x3678U, 0x3778U, 0x3878U, 0x3978U, 0x2B78U, 0x2F78U, + 0x4179U, 0x4279U, 0x4379U, 0x4479U, 0x4579U, 0x4679U, 0x4779U, 0x4879U, + 0x4979U, 0x4A79U, 0x4B79U, 0x4C79U, 0x4D79U, 0x4E79U, 0x4F79U, 0x5079U, + 0x5179U, 0x5279U, 0x5379U, 0x5479U, 0x5579U, 0x5679U, 0x5779U, 0x5879U, + 0x5979U, 0x5A79U, 0x6179U, 0x6279U, 0x6379U, 0x6479U, 0x6579U, 0x6679U, + 0x6779U, 0x6879U, 0x6979U, 0x6A79U, 0x6B79U, 0x6C79U, 0x6D79U, 0x6E79U, + 0x6F79U, 0x7079U, 0x7179U, 0x7279U, 0x7379U, 0x7479U, 0x7579U, 0x7679U, + 0x7779U, 0x7879U, 0x7979U, 0x7A79U, 0x3079U, 0x3179U, 0x3279U, 0x3379U, + 0x3479U, 0x3579U, 0x3679U, 0x3779U, 0x3879U, 0x3979U, 0x2B79U, 0x2F79U, + 0x417AU, 0x427AU, 0x437AU, 0x447AU, 0x457AU, 0x467AU, 0x477AU, 0x487AU, + 0x497AU, 0x4A7AU, 0x4B7AU, 0x4C7AU, 0x4D7AU, 0x4E7AU, 0x4F7AU, 0x507AU, + 0x517AU, 0x527AU, 0x537AU, 0x547AU, 0x557AU, 0x567AU, 0x577AU, 0x587AU, + 0x597AU, 0x5A7AU, 0x617AU, 0x627AU, 0x637AU, 0x647AU, 0x657AU, 0x667AU, + 0x677AU, 0x687AU, 0x697AU, 0x6A7AU, 0x6B7AU, 0x6C7AU, 0x6D7AU, 0x6E7AU, + 0x6F7AU, 0x707AU, 0x717AU, 0x727AU, 0x737AU, 0x747AU, 0x757AU, 0x767AU, + 0x777AU, 0x787AU, 0x797AU, 0x7A7AU, 0x307AU, 0x317AU, 0x327AU, 0x337AU, + 0x347AU, 0x357AU, 0x367AU, 0x377AU, 0x387AU, 0x397AU, 0x2B7AU, 0x2F7AU, + 0x4130U, 0x4230U, 0x4330U, 0x4430U, 0x4530U, 0x4630U, 0x4730U, 0x4830U, + 0x4930U, 0x4A30U, 0x4B30U, 0x4C30U, 0x4D30U, 0x4E30U, 0x4F30U, 0x5030U, + 0x5130U, 0x5230U, 0x5330U, 0x5430U, 0x5530U, 0x5630U, 0x5730U, 0x5830U, + 0x5930U, 0x5A30U, 0x6130U, 0x6230U, 0x6330U, 0x6430U, 0x6530U, 0x6630U, + 0x6730U, 0x6830U, 0x6930U, 0x6A30U, 0x6B30U, 0x6C30U, 0x6D30U, 0x6E30U, + 0x6F30U, 0x7030U, 0x7130U, 0x7230U, 0x7330U, 0x7430U, 0x7530U, 0x7630U, + 0x7730U, 0x7830U, 0x7930U, 0x7A30U, 0x3030U, 0x3130U, 0x3230U, 0x3330U, + 0x3430U, 0x3530U, 0x3630U, 0x3730U, 0x3830U, 0x3930U, 0x2B30U, 0x2F30U, + 0x4131U, 0x4231U, 0x4331U, 0x4431U, 0x4531U, 0x4631U, 0x4731U, 0x4831U, + 0x4931U, 0x4A31U, 0x4B31U, 0x4C31U, 0x4D31U, 0x4E31U, 0x4F31U, 0x5031U, + 0x5131U, 0x5231U, 0x5331U, 0x5431U, 0x5531U, 0x5631U, 0x5731U, 0x5831U, + 0x5931U, 0x5A31U, 0x6131U, 0x6231U, 0x6331U, 0x6431U, 0x6531U, 0x6631U, + 0x6731U, 0x6831U, 0x6931U, 0x6A31U, 0x6B31U, 0x6C31U, 0x6D31U, 0x6E31U, + 0x6F31U, 0x7031U, 0x7131U, 0x7231U, 0x7331U, 0x7431U, 0x7531U, 0x7631U, + 0x7731U, 0x7831U, 0x7931U, 0x7A31U, 0x3031U, 0x3131U, 0x3231U, 0x3331U, + 0x3431U, 0x3531U, 0x3631U, 0x3731U, 0x3831U, 0x3931U, 0x2B31U, 0x2F31U, + 0x4132U, 0x4232U, 0x4332U, 0x4432U, 0x4532U, 0x4632U, 0x4732U, 0x4832U, + 0x4932U, 0x4A32U, 0x4B32U, 0x4C32U, 0x4D32U, 0x4E32U, 0x4F32U, 0x5032U, + 0x5132U, 0x5232U, 0x5332U, 0x5432U, 0x5532U, 0x5632U, 0x5732U, 0x5832U, + 0x5932U, 0x5A32U, 0x6132U, 0x6232U, 0x6332U, 0x6432U, 0x6532U, 0x6632U, + 0x6732U, 0x6832U, 0x6932U, 0x6A32U, 0x6B32U, 0x6C32U, 0x6D32U, 0x6E32U, + 0x6F32U, 0x7032U, 0x7132U, 0x7232U, 0x7332U, 0x7432U, 0x7532U, 0x7632U, + 0x7732U, 0x7832U, 0x7932U, 0x7A32U, 0x3032U, 0x3132U, 0x3232U, 0x3332U, + 0x3432U, 0x3532U, 0x3632U, 0x3732U, 0x3832U, 0x3932U, 0x2B32U, 0x2F32U, + 0x4133U, 0x4233U, 0x4333U, 0x4433U, 0x4533U, 0x4633U, 0x4733U, 0x4833U, + 0x4933U, 0x4A33U, 0x4B33U, 0x4C33U, 0x4D33U, 0x4E33U, 0x4F33U, 0x5033U, + 0x5133U, 0x5233U, 0x5333U, 0x5433U, 0x5533U, 0x5633U, 0x5733U, 0x5833U, + 0x5933U, 0x5A33U, 0x6133U, 0x6233U, 0x6333U, 0x6433U, 0x6533U, 0x6633U, + 0x6733U, 0x6833U, 0x6933U, 0x6A33U, 0x6B33U, 0x6C33U, 0x6D33U, 0x6E33U, + 0x6F33U, 0x7033U, 0x7133U, 0x7233U, 0x7333U, 0x7433U, 0x7533U, 0x7633U, + 0x7733U, 0x7833U, 0x7933U, 0x7A33U, 0x3033U, 0x3133U, 0x3233U, 0x3333U, + 0x3433U, 0x3533U, 0x3633U, 0x3733U, 0x3833U, 0x3933U, 0x2B33U, 0x2F33U, + 0x4134U, 0x4234U, 0x4334U, 0x4434U, 0x4534U, 0x4634U, 0x4734U, 0x4834U, + 0x4934U, 0x4A34U, 0x4B34U, 0x4C34U, 0x4D34U, 0x4E34U, 0x4F34U, 0x5034U, + 0x5134U, 0x5234U, 0x5334U, 0x5434U, 0x5534U, 0x5634U, 0x5734U, 0x5834U, + 0x5934U, 0x5A34U, 0x6134U, 0x6234U, 0x6334U, 0x6434U, 0x6534U, 0x6634U, + 0x6734U, 0x6834U, 0x6934U, 0x6A34U, 0x6B34U, 0x6C34U, 0x6D34U, 0x6E34U, + 0x6F34U, 0x7034U, 0x7134U, 0x7234U, 0x7334U, 0x7434U, 0x7534U, 0x7634U, + 0x7734U, 0x7834U, 0x7934U, 0x7A34U, 0x3034U, 0x3134U, 0x3234U, 0x3334U, + 0x3434U, 0x3534U, 0x3634U, 0x3734U, 0x3834U, 0x3934U, 0x2B34U, 0x2F34U, + 0x4135U, 0x4235U, 0x4335U, 0x4435U, 0x4535U, 0x4635U, 0x4735U, 0x4835U, + 0x4935U, 0x4A35U, 0x4B35U, 0x4C35U, 0x4D35U, 0x4E35U, 0x4F35U, 0x5035U, + 0x5135U, 0x5235U, 0x5335U, 0x5435U, 0x5535U, 0x5635U, 0x5735U, 0x5835U, + 0x5935U, 0x5A35U, 0x6135U, 0x6235U, 0x6335U, 0x6435U, 0x6535U, 0x6635U, + 0x6735U, 0x6835U, 0x6935U, 0x6A35U, 0x6B35U, 0x6C35U, 0x6D35U, 0x6E35U, + 0x6F35U, 0x7035U, 0x7135U, 0x7235U, 0x7335U, 0x7435U, 0x7535U, 0x7635U, + 0x7735U, 0x7835U, 0x7935U, 0x7A35U, 0x3035U, 0x3135U, 0x3235U, 0x3335U, + 0x3435U, 0x3535U, 0x3635U, 0x3735U, 0x3835U, 0x3935U, 0x2B35U, 0x2F35U, + 0x4136U, 0x4236U, 0x4336U, 0x4436U, 0x4536U, 0x4636U, 0x4736U, 0x4836U, + 0x4936U, 0x4A36U, 0x4B36U, 0x4C36U, 0x4D36U, 0x4E36U, 0x4F36U, 0x5036U, + 0x5136U, 0x5236U, 0x5336U, 0x5436U, 0x5536U, 0x5636U, 0x5736U, 0x5836U, + 0x5936U, 0x5A36U, 0x6136U, 0x6236U, 0x6336U, 0x6436U, 0x6536U, 0x6636U, + 0x6736U, 0x6836U, 0x6936U, 0x6A36U, 0x6B36U, 0x6C36U, 0x6D36U, 0x6E36U, + 0x6F36U, 0x7036U, 0x7136U, 0x7236U, 0x7336U, 0x7436U, 0x7536U, 0x7636U, + 0x7736U, 0x7836U, 0x7936U, 0x7A36U, 0x3036U, 0x3136U, 0x3236U, 0x3336U, + 0x3436U, 0x3536U, 0x3636U, 0x3736U, 0x3836U, 0x3936U, 0x2B36U, 0x2F36U, + 0x4137U, 0x4237U, 0x4337U, 0x4437U, 0x4537U, 0x4637U, 0x4737U, 0x4837U, + 0x4937U, 0x4A37U, 0x4B37U, 0x4C37U, 0x4D37U, 0x4E37U, 0x4F37U, 0x5037U, + 0x5137U, 0x5237U, 0x5337U, 0x5437U, 0x5537U, 0x5637U, 0x5737U, 0x5837U, + 0x5937U, 0x5A37U, 0x6137U, 0x6237U, 0x6337U, 0x6437U, 0x6537U, 0x6637U, + 0x6737U, 0x6837U, 0x6937U, 0x6A37U, 0x6B37U, 0x6C37U, 0x6D37U, 0x6E37U, + 0x6F37U, 0x7037U, 0x7137U, 0x7237U, 0x7337U, 0x7437U, 0x7537U, 0x7637U, + 0x7737U, 0x7837U, 0x7937U, 0x7A37U, 0x3037U, 0x3137U, 0x3237U, 0x3337U, + 0x3437U, 0x3537U, 0x3637U, 0x3737U, 0x3837U, 0x3937U, 0x2B37U, 0x2F37U, + 0x4138U, 0x4238U, 0x4338U, 0x4438U, 0x4538U, 0x4638U, 0x4738U, 0x4838U, + 0x4938U, 0x4A38U, 0x4B38U, 0x4C38U, 0x4D38U, 0x4E38U, 0x4F38U, 0x5038U, + 0x5138U, 0x5238U, 0x5338U, 0x5438U, 0x5538U, 0x5638U, 0x5738U, 0x5838U, + 0x5938U, 0x5A38U, 0x6138U, 0x6238U, 0x6338U, 0x6438U, 0x6538U, 0x6638U, + 0x6738U, 0x6838U, 0x6938U, 0x6A38U, 0x6B38U, 0x6C38U, 0x6D38U, 0x6E38U, + 0x6F38U, 0x7038U, 0x7138U, 0x7238U, 0x7338U, 0x7438U, 0x7538U, 0x7638U, + 0x7738U, 0x7838U, 0x7938U, 0x7A38U, 0x3038U, 0x3138U, 0x3238U, 0x3338U, + 0x3438U, 0x3538U, 0x3638U, 0x3738U, 0x3838U, 0x3938U, 0x2B38U, 0x2F38U, + 0x4139U, 0x4239U, 0x4339U, 0x4439U, 0x4539U, 0x4639U, 0x4739U, 0x4839U, + 0x4939U, 0x4A39U, 0x4B39U, 0x4C39U, 0x4D39U, 0x4E39U, 0x4F39U, 0x5039U, + 0x5139U, 0x5239U, 0x5339U, 0x5439U, 0x5539U, 0x5639U, 0x5739U, 0x5839U, + 0x5939U, 0x5A39U, 0x6139U, 0x6239U, 0x6339U, 0x6439U, 0x6539U, 0x6639U, + 0x6739U, 0x6839U, 0x6939U, 0x6A39U, 0x6B39U, 0x6C39U, 0x6D39U, 0x6E39U, + 0x6F39U, 0x7039U, 0x7139U, 0x7239U, 0x7339U, 0x7439U, 0x7539U, 0x7639U, + 0x7739U, 0x7839U, 0x7939U, 0x7A39U, 0x3039U, 0x3139U, 0x3239U, 0x3339U, + 0x3439U, 0x3539U, 0x3639U, 0x3739U, 0x3839U, 0x3939U, 0x2B39U, 0x2F39U, + 0x412BU, 0x422BU, 0x432BU, 0x442BU, 0x452BU, 0x462BU, 0x472BU, 0x482BU, + 0x492BU, 0x4A2BU, 0x4B2BU, 0x4C2BU, 0x4D2BU, 0x4E2BU, 0x4F2BU, 0x502BU, + 0x512BU, 0x522BU, 0x532BU, 0x542BU, 0x552BU, 0x562BU, 0x572BU, 0x582BU, + 0x592BU, 0x5A2BU, 0x612BU, 0x622BU, 0x632BU, 0x642BU, 0x652BU, 0x662BU, + 0x672BU, 0x682BU, 0x692BU, 0x6A2BU, 0x6B2BU, 0x6C2BU, 0x6D2BU, 0x6E2BU, + 0x6F2BU, 0x702BU, 0x712BU, 0x722BU, 0x732BU, 0x742BU, 0x752BU, 0x762BU, + 0x772BU, 0x782BU, 0x792BU, 0x7A2BU, 0x302BU, 0x312BU, 0x322BU, 0x332BU, + 0x342BU, 0x352BU, 0x362BU, 0x372BU, 0x382BU, 0x392BU, 0x2B2BU, 0x2F2BU, + 0x412FU, 0x422FU, 0x432FU, 0x442FU, 0x452FU, 0x462FU, 0x472FU, 0x482FU, + 0x492FU, 0x4A2FU, 0x4B2FU, 0x4C2FU, 0x4D2FU, 0x4E2FU, 0x4F2FU, 0x502FU, + 0x512FU, 0x522FU, 0x532FU, 0x542FU, 0x552FU, 0x562FU, 0x572FU, 0x582FU, + 0x592FU, 0x5A2FU, 0x612FU, 0x622FU, 0x632FU, 0x642FU, 0x652FU, 0x662FU, + 0x672FU, 0x682FU, 0x692FU, 0x6A2FU, 0x6B2FU, 0x6C2FU, 0x6D2FU, 0x6E2FU, + 0x6F2FU, 0x702FU, 0x712FU, 0x722FU, 0x732FU, 0x742FU, 0x752FU, 0x762FU, + 0x772FU, 0x782FU, 0x792FU, 0x7A2FU, 0x302FU, 0x312FU, 0x322FU, 0x332FU, + 0x342FU, 0x352FU, 0x362FU, 0x372FU, 0x382FU, 0x392FU, 0x2B2FU, 0x2F2FU, +#else + 0x4141U, 0x4142U, 0x4143U, 0x4144U, 0x4145U, 0x4146U, 0x4147U, 0x4148U, + 0x4149U, 0x414AU, 0x414BU, 0x414CU, 0x414DU, 0x414EU, 0x414FU, 0x4150U, + 0x4151U, 0x4152U, 0x4153U, 0x4154U, 0x4155U, 0x4156U, 0x4157U, 0x4158U, + 0x4159U, 0x415AU, 0x4161U, 0x4162U, 0x4163U, 0x4164U, 0x4165U, 0x4166U, + 0x4167U, 0x4168U, 0x4169U, 0x416AU, 0x416BU, 0x416CU, 0x416DU, 0x416EU, + 0x416FU, 0x4170U, 0x4171U, 0x4172U, 0x4173U, 0x4174U, 0x4175U, 0x4176U, + 0x4177U, 0x4178U, 0x4179U, 0x417AU, 0x4130U, 0x4131U, 0x4132U, 0x4133U, + 0x4134U, 0x4135U, 0x4136U, 0x4137U, 0x4138U, 0x4139U, 0x412BU, 0x412FU, + 0x4241U, 0x4242U, 0x4243U, 0x4244U, 0x4245U, 0x4246U, 0x4247U, 0x4248U, + 0x4249U, 0x424AU, 0x424BU, 0x424CU, 0x424DU, 0x424EU, 0x424FU, 0x4250U, + 0x4251U, 0x4252U, 0x4253U, 0x4254U, 0x4255U, 0x4256U, 0x4257U, 0x4258U, + 0x4259U, 0x425AU, 0x4261U, 0x4262U, 0x4263U, 0x4264U, 0x4265U, 0x4266U, + 0x4267U, 0x4268U, 0x4269U, 0x426AU, 0x426BU, 0x426CU, 0x426DU, 0x426EU, + 0x426FU, 0x4270U, 0x4271U, 0x4272U, 0x4273U, 0x4274U, 0x4275U, 0x4276U, + 0x4277U, 0x4278U, 0x4279U, 0x427AU, 0x4230U, 0x4231U, 0x4232U, 0x4233U, + 0x4234U, 0x4235U, 0x4236U, 0x4237U, 0x4238U, 0x4239U, 0x422BU, 0x422FU, + 0x4341U, 0x4342U, 0x4343U, 0x4344U, 0x4345U, 0x4346U, 0x4347U, 0x4348U, + 0x4349U, 0x434AU, 0x434BU, 0x434CU, 0x434DU, 0x434EU, 0x434FU, 0x4350U, + 0x4351U, 0x4352U, 0x4353U, 0x4354U, 0x4355U, 0x4356U, 0x4357U, 0x4358U, + 0x4359U, 0x435AU, 0x4361U, 0x4362U, 0x4363U, 0x4364U, 0x4365U, 0x4366U, + 0x4367U, 0x4368U, 0x4369U, 0x436AU, 0x436BU, 0x436CU, 0x436DU, 0x436EU, + 0x436FU, 0x4370U, 0x4371U, 0x4372U, 0x4373U, 0x4374U, 0x4375U, 0x4376U, + 0x4377U, 0x4378U, 0x4379U, 0x437AU, 0x4330U, 0x4331U, 0x4332U, 0x4333U, + 0x4334U, 0x4335U, 0x4336U, 0x4337U, 0x4338U, 0x4339U, 0x432BU, 0x432FU, + 0x4441U, 0x4442U, 0x4443U, 0x4444U, 0x4445U, 0x4446U, 0x4447U, 0x4448U, + 0x4449U, 0x444AU, 0x444BU, 0x444CU, 0x444DU, 0x444EU, 0x444FU, 0x4450U, + 0x4451U, 0x4452U, 0x4453U, 0x4454U, 0x4455U, 0x4456U, 0x4457U, 0x4458U, + 0x4459U, 0x445AU, 0x4461U, 0x4462U, 0x4463U, 0x4464U, 0x4465U, 0x4466U, + 0x4467U, 0x4468U, 0x4469U, 0x446AU, 0x446BU, 0x446CU, 0x446DU, 0x446EU, + 0x446FU, 0x4470U, 0x4471U, 0x4472U, 0x4473U, 0x4474U, 0x4475U, 0x4476U, + 0x4477U, 0x4478U, 0x4479U, 0x447AU, 0x4430U, 0x4431U, 0x4432U, 0x4433U, + 0x4434U, 0x4435U, 0x4436U, 0x4437U, 0x4438U, 0x4439U, 0x442BU, 0x442FU, + 0x4541U, 0x4542U, 0x4543U, 0x4544U, 0x4545U, 0x4546U, 0x4547U, 0x4548U, + 0x4549U, 0x454AU, 0x454BU, 0x454CU, 0x454DU, 0x454EU, 0x454FU, 0x4550U, + 0x4551U, 0x4552U, 0x4553U, 0x4554U, 0x4555U, 0x4556U, 0x4557U, 0x4558U, + 0x4559U, 0x455AU, 0x4561U, 0x4562U, 0x4563U, 0x4564U, 0x4565U, 0x4566U, + 0x4567U, 0x4568U, 0x4569U, 0x456AU, 0x456BU, 0x456CU, 0x456DU, 0x456EU, + 0x456FU, 0x4570U, 0x4571U, 0x4572U, 0x4573U, 0x4574U, 0x4575U, 0x4576U, + 0x4577U, 0x4578U, 0x4579U, 0x457AU, 0x4530U, 0x4531U, 0x4532U, 0x4533U, + 0x4534U, 0x4535U, 0x4536U, 0x4537U, 0x4538U, 0x4539U, 0x452BU, 0x452FU, + 0x4641U, 0x4642U, 0x4643U, 0x4644U, 0x4645U, 0x4646U, 0x4647U, 0x4648U, + 0x4649U, 0x464AU, 0x464BU, 0x464CU, 0x464DU, 0x464EU, 0x464FU, 0x4650U, + 0x4651U, 0x4652U, 0x4653U, 0x4654U, 0x4655U, 0x4656U, 0x4657U, 0x4658U, + 0x4659U, 0x465AU, 0x4661U, 0x4662U, 0x4663U, 0x4664U, 0x4665U, 0x4666U, + 0x4667U, 0x4668U, 0x4669U, 0x466AU, 0x466BU, 0x466CU, 0x466DU, 0x466EU, + 0x466FU, 0x4670U, 0x4671U, 0x4672U, 0x4673U, 0x4674U, 0x4675U, 0x4676U, + 0x4677U, 0x4678U, 0x4679U, 0x467AU, 0x4630U, 0x4631U, 0x4632U, 0x4633U, + 0x4634U, 0x4635U, 0x4636U, 0x4637U, 0x4638U, 0x4639U, 0x462BU, 0x462FU, + 0x4741U, 0x4742U, 0x4743U, 0x4744U, 0x4745U, 0x4746U, 0x4747U, 0x4748U, + 0x4749U, 0x474AU, 0x474BU, 0x474CU, 0x474DU, 0x474EU, 0x474FU, 0x4750U, + 0x4751U, 0x4752U, 0x4753U, 0x4754U, 0x4755U, 0x4756U, 0x4757U, 0x4758U, + 0x4759U, 0x475AU, 0x4761U, 0x4762U, 0x4763U, 0x4764U, 0x4765U, 0x4766U, + 0x4767U, 0x4768U, 0x4769U, 0x476AU, 0x476BU, 0x476CU, 0x476DU, 0x476EU, + 0x476FU, 0x4770U, 0x4771U, 0x4772U, 0x4773U, 0x4774U, 0x4775U, 0x4776U, + 0x4777U, 0x4778U, 0x4779U, 0x477AU, 0x4730U, 0x4731U, 0x4732U, 0x4733U, + 0x4734U, 0x4735U, 0x4736U, 0x4737U, 0x4738U, 0x4739U, 0x472BU, 0x472FU, + 0x4841U, 0x4842U, 0x4843U, 0x4844U, 0x4845U, 0x4846U, 0x4847U, 0x4848U, + 0x4849U, 0x484AU, 0x484BU, 0x484CU, 0x484DU, 0x484EU, 0x484FU, 0x4850U, + 0x4851U, 0x4852U, 0x4853U, 0x4854U, 0x4855U, 0x4856U, 0x4857U, 0x4858U, + 0x4859U, 0x485AU, 0x4861U, 0x4862U, 0x4863U, 0x4864U, 0x4865U, 0x4866U, + 0x4867U, 0x4868U, 0x4869U, 0x486AU, 0x486BU, 0x486CU, 0x486DU, 0x486EU, + 0x486FU, 0x4870U, 0x4871U, 0x4872U, 0x4873U, 0x4874U, 0x4875U, 0x4876U, + 0x4877U, 0x4878U, 0x4879U, 0x487AU, 0x4830U, 0x4831U, 0x4832U, 0x4833U, + 0x4834U, 0x4835U, 0x4836U, 0x4837U, 0x4838U, 0x4839U, 0x482BU, 0x482FU, + 0x4941U, 0x4942U, 0x4943U, 0x4944U, 0x4945U, 0x4946U, 0x4947U, 0x4948U, + 0x4949U, 0x494AU, 0x494BU, 0x494CU, 0x494DU, 0x494EU, 0x494FU, 0x4950U, + 0x4951U, 0x4952U, 0x4953U, 0x4954U, 0x4955U, 0x4956U, 0x4957U, 0x4958U, + 0x4959U, 0x495AU, 0x4961U, 0x4962U, 0x4963U, 0x4964U, 0x4965U, 0x4966U, + 0x4967U, 0x4968U, 0x4969U, 0x496AU, 0x496BU, 0x496CU, 0x496DU, 0x496EU, + 0x496FU, 0x4970U, 0x4971U, 0x4972U, 0x4973U, 0x4974U, 0x4975U, 0x4976U, + 0x4977U, 0x4978U, 0x4979U, 0x497AU, 0x4930U, 0x4931U, 0x4932U, 0x4933U, + 0x4934U, 0x4935U, 0x4936U, 0x4937U, 0x4938U, 0x4939U, 0x492BU, 0x492FU, + 0x4A41U, 0x4A42U, 0x4A43U, 0x4A44U, 0x4A45U, 0x4A46U, 0x4A47U, 0x4A48U, + 0x4A49U, 0x4A4AU, 0x4A4BU, 0x4A4CU, 0x4A4DU, 0x4A4EU, 0x4A4FU, 0x4A50U, + 0x4A51U, 0x4A52U, 0x4A53U, 0x4A54U, 0x4A55U, 0x4A56U, 0x4A57U, 0x4A58U, + 0x4A59U, 0x4A5AU, 0x4A61U, 0x4A62U, 0x4A63U, 0x4A64U, 0x4A65U, 0x4A66U, + 0x4A67U, 0x4A68U, 0x4A69U, 0x4A6AU, 0x4A6BU, 0x4A6CU, 0x4A6DU, 0x4A6EU, + 0x4A6FU, 0x4A70U, 0x4A71U, 0x4A72U, 0x4A73U, 0x4A74U, 0x4A75U, 0x4A76U, + 0x4A77U, 0x4A78U, 0x4A79U, 0x4A7AU, 0x4A30U, 0x4A31U, 0x4A32U, 0x4A33U, + 0x4A34U, 0x4A35U, 0x4A36U, 0x4A37U, 0x4A38U, 0x4A39U, 0x4A2BU, 0x4A2FU, + 0x4B41U, 0x4B42U, 0x4B43U, 0x4B44U, 0x4B45U, 0x4B46U, 0x4B47U, 0x4B48U, + 0x4B49U, 0x4B4AU, 0x4B4BU, 0x4B4CU, 0x4B4DU, 0x4B4EU, 0x4B4FU, 0x4B50U, + 0x4B51U, 0x4B52U, 0x4B53U, 0x4B54U, 0x4B55U, 0x4B56U, 0x4B57U, 0x4B58U, + 0x4B59U, 0x4B5AU, 0x4B61U, 0x4B62U, 0x4B63U, 0x4B64U, 0x4B65U, 0x4B66U, + 0x4B67U, 0x4B68U, 0x4B69U, 0x4B6AU, 0x4B6BU, 0x4B6CU, 0x4B6DU, 0x4B6EU, + 0x4B6FU, 0x4B70U, 0x4B71U, 0x4B72U, 0x4B73U, 0x4B74U, 0x4B75U, 0x4B76U, + 0x4B77U, 0x4B78U, 0x4B79U, 0x4B7AU, 0x4B30U, 0x4B31U, 0x4B32U, 0x4B33U, + 0x4B34U, 0x4B35U, 0x4B36U, 0x4B37U, 0x4B38U, 0x4B39U, 0x4B2BU, 0x4B2FU, + 0x4C41U, 0x4C42U, 0x4C43U, 0x4C44U, 0x4C45U, 0x4C46U, 0x4C47U, 0x4C48U, + 0x4C49U, 0x4C4AU, 0x4C4BU, 0x4C4CU, 0x4C4DU, 0x4C4EU, 0x4C4FU, 0x4C50U, + 0x4C51U, 0x4C52U, 0x4C53U, 0x4C54U, 0x4C55U, 0x4C56U, 0x4C57U, 0x4C58U, + 0x4C59U, 0x4C5AU, 0x4C61U, 0x4C62U, 0x4C63U, 0x4C64U, 0x4C65U, 0x4C66U, + 0x4C67U, 0x4C68U, 0x4C69U, 0x4C6AU, 0x4C6BU, 0x4C6CU, 0x4C6DU, 0x4C6EU, + 0x4C6FU, 0x4C70U, 0x4C71U, 0x4C72U, 0x4C73U, 0x4C74U, 0x4C75U, 0x4C76U, + 0x4C77U, 0x4C78U, 0x4C79U, 0x4C7AU, 0x4C30U, 0x4C31U, 0x4C32U, 0x4C33U, + 0x4C34U, 0x4C35U, 0x4C36U, 0x4C37U, 0x4C38U, 0x4C39U, 0x4C2BU, 0x4C2FU, + 0x4D41U, 0x4D42U, 0x4D43U, 0x4D44U, 0x4D45U, 0x4D46U, 0x4D47U, 0x4D48U, + 0x4D49U, 0x4D4AU, 0x4D4BU, 0x4D4CU, 0x4D4DU, 0x4D4EU, 0x4D4FU, 0x4D50U, + 0x4D51U, 0x4D52U, 0x4D53U, 0x4D54U, 0x4D55U, 0x4D56U, 0x4D57U, 0x4D58U, + 0x4D59U, 0x4D5AU, 0x4D61U, 0x4D62U, 0x4D63U, 0x4D64U, 0x4D65U, 0x4D66U, + 0x4D67U, 0x4D68U, 0x4D69U, 0x4D6AU, 0x4D6BU, 0x4D6CU, 0x4D6DU, 0x4D6EU, + 0x4D6FU, 0x4D70U, 0x4D71U, 0x4D72U, 0x4D73U, 0x4D74U, 0x4D75U, 0x4D76U, + 0x4D77U, 0x4D78U, 0x4D79U, 0x4D7AU, 0x4D30U, 0x4D31U, 0x4D32U, 0x4D33U, + 0x4D34U, 0x4D35U, 0x4D36U, 0x4D37U, 0x4D38U, 0x4D39U, 0x4D2BU, 0x4D2FU, + 0x4E41U, 0x4E42U, 0x4E43U, 0x4E44U, 0x4E45U, 0x4E46U, 0x4E47U, 0x4E48U, + 0x4E49U, 0x4E4AU, 0x4E4BU, 0x4E4CU, 0x4E4DU, 0x4E4EU, 0x4E4FU, 0x4E50U, + 0x4E51U, 0x4E52U, 0x4E53U, 0x4E54U, 0x4E55U, 0x4E56U, 0x4E57U, 0x4E58U, + 0x4E59U, 0x4E5AU, 0x4E61U, 0x4E62U, 0x4E63U, 0x4E64U, 0x4E65U, 0x4E66U, + 0x4E67U, 0x4E68U, 0x4E69U, 0x4E6AU, 0x4E6BU, 0x4E6CU, 0x4E6DU, 0x4E6EU, + 0x4E6FU, 0x4E70U, 0x4E71U, 0x4E72U, 0x4E73U, 0x4E74U, 0x4E75U, 0x4E76U, + 0x4E77U, 0x4E78U, 0x4E79U, 0x4E7AU, 0x4E30U, 0x4E31U, 0x4E32U, 0x4E33U, + 0x4E34U, 0x4E35U, 0x4E36U, 0x4E37U, 0x4E38U, 0x4E39U, 0x4E2BU, 0x4E2FU, + 0x4F41U, 0x4F42U, 0x4F43U, 0x4F44U, 0x4F45U, 0x4F46U, 0x4F47U, 0x4F48U, + 0x4F49U, 0x4F4AU, 0x4F4BU, 0x4F4CU, 0x4F4DU, 0x4F4EU, 0x4F4FU, 0x4F50U, + 0x4F51U, 0x4F52U, 0x4F53U, 0x4F54U, 0x4F55U, 0x4F56U, 0x4F57U, 0x4F58U, + 0x4F59U, 0x4F5AU, 0x4F61U, 0x4F62U, 0x4F63U, 0x4F64U, 0x4F65U, 0x4F66U, + 0x4F67U, 0x4F68U, 0x4F69U, 0x4F6AU, 0x4F6BU, 0x4F6CU, 0x4F6DU, 0x4F6EU, + 0x4F6FU, 0x4F70U, 0x4F71U, 0x4F72U, 0x4F73U, 0x4F74U, 0x4F75U, 0x4F76U, + 0x4F77U, 0x4F78U, 0x4F79U, 0x4F7AU, 0x4F30U, 0x4F31U, 0x4F32U, 0x4F33U, + 0x4F34U, 0x4F35U, 0x4F36U, 0x4F37U, 0x4F38U, 0x4F39U, 0x4F2BU, 0x4F2FU, + 0x5041U, 0x5042U, 0x5043U, 0x5044U, 0x5045U, 0x5046U, 0x5047U, 0x5048U, + 0x5049U, 0x504AU, 0x504BU, 0x504CU, 0x504DU, 0x504EU, 0x504FU, 0x5050U, + 0x5051U, 0x5052U, 0x5053U, 0x5054U, 0x5055U, 0x5056U, 0x5057U, 0x5058U, + 0x5059U, 0x505AU, 0x5061U, 0x5062U, 0x5063U, 0x5064U, 0x5065U, 0x5066U, + 0x5067U, 0x5068U, 0x5069U, 0x506AU, 0x506BU, 0x506CU, 0x506DU, 0x506EU, + 0x506FU, 0x5070U, 0x5071U, 0x5072U, 0x5073U, 0x5074U, 0x5075U, 0x5076U, + 0x5077U, 0x5078U, 0x5079U, 0x507AU, 0x5030U, 0x5031U, 0x5032U, 0x5033U, + 0x5034U, 0x5035U, 0x5036U, 0x5037U, 0x5038U, 0x5039U, 0x502BU, 0x502FU, + 0x5141U, 0x5142U, 0x5143U, 0x5144U, 0x5145U, 0x5146U, 0x5147U, 0x5148U, + 0x5149U, 0x514AU, 0x514BU, 0x514CU, 0x514DU, 0x514EU, 0x514FU, 0x5150U, + 0x5151U, 0x5152U, 0x5153U, 0x5154U, 0x5155U, 0x5156U, 0x5157U, 0x5158U, + 0x5159U, 0x515AU, 0x5161U, 0x5162U, 0x5163U, 0x5164U, 0x5165U, 0x5166U, + 0x5167U, 0x5168U, 0x5169U, 0x516AU, 0x516BU, 0x516CU, 0x516DU, 0x516EU, + 0x516FU, 0x5170U, 0x5171U, 0x5172U, 0x5173U, 0x5174U, 0x5175U, 0x5176U, + 0x5177U, 0x5178U, 0x5179U, 0x517AU, 0x5130U, 0x5131U, 0x5132U, 0x5133U, + 0x5134U, 0x5135U, 0x5136U, 0x5137U, 0x5138U, 0x5139U, 0x512BU, 0x512FU, + 0x5241U, 0x5242U, 0x5243U, 0x5244U, 0x5245U, 0x5246U, 0x5247U, 0x5248U, + 0x5249U, 0x524AU, 0x524BU, 0x524CU, 0x524DU, 0x524EU, 0x524FU, 0x5250U, + 0x5251U, 0x5252U, 0x5253U, 0x5254U, 0x5255U, 0x5256U, 0x5257U, 0x5258U, + 0x5259U, 0x525AU, 0x5261U, 0x5262U, 0x5263U, 0x5264U, 0x5265U, 0x5266U, + 0x5267U, 0x5268U, 0x5269U, 0x526AU, 0x526BU, 0x526CU, 0x526DU, 0x526EU, + 0x526FU, 0x5270U, 0x5271U, 0x5272U, 0x5273U, 0x5274U, 0x5275U, 0x5276U, + 0x5277U, 0x5278U, 0x5279U, 0x527AU, 0x5230U, 0x5231U, 0x5232U, 0x5233U, + 0x5234U, 0x5235U, 0x5236U, 0x5237U, 0x5238U, 0x5239U, 0x522BU, 0x522FU, + 0x5341U, 0x5342U, 0x5343U, 0x5344U, 0x5345U, 0x5346U, 0x5347U, 0x5348U, + 0x5349U, 0x534AU, 0x534BU, 0x534CU, 0x534DU, 0x534EU, 0x534FU, 0x5350U, + 0x5351U, 0x5352U, 0x5353U, 0x5354U, 0x5355U, 0x5356U, 0x5357U, 0x5358U, + 0x5359U, 0x535AU, 0x5361U, 0x5362U, 0x5363U, 0x5364U, 0x5365U, 0x5366U, + 0x5367U, 0x5368U, 0x5369U, 0x536AU, 0x536BU, 0x536CU, 0x536DU, 0x536EU, + 0x536FU, 0x5370U, 0x5371U, 0x5372U, 0x5373U, 0x5374U, 0x5375U, 0x5376U, + 0x5377U, 0x5378U, 0x5379U, 0x537AU, 0x5330U, 0x5331U, 0x5332U, 0x5333U, + 0x5334U, 0x5335U, 0x5336U, 0x5337U, 0x5338U, 0x5339U, 0x532BU, 0x532FU, + 0x5441U, 0x5442U, 0x5443U, 0x5444U, 0x5445U, 0x5446U, 0x5447U, 0x5448U, + 0x5449U, 0x544AU, 0x544BU, 0x544CU, 0x544DU, 0x544EU, 0x544FU, 0x5450U, + 0x5451U, 0x5452U, 0x5453U, 0x5454U, 0x5455U, 0x5456U, 0x5457U, 0x5458U, + 0x5459U, 0x545AU, 0x5461U, 0x5462U, 0x5463U, 0x5464U, 0x5465U, 0x5466U, + 0x5467U, 0x5468U, 0x5469U, 0x546AU, 0x546BU, 0x546CU, 0x546DU, 0x546EU, + 0x546FU, 0x5470U, 0x5471U, 0x5472U, 0x5473U, 0x5474U, 0x5475U, 0x5476U, + 0x5477U, 0x5478U, 0x5479U, 0x547AU, 0x5430U, 0x5431U, 0x5432U, 0x5433U, + 0x5434U, 0x5435U, 0x5436U, 0x5437U, 0x5438U, 0x5439U, 0x542BU, 0x542FU, + 0x5541U, 0x5542U, 0x5543U, 0x5544U, 0x5545U, 0x5546U, 0x5547U, 0x5548U, + 0x5549U, 0x554AU, 0x554BU, 0x554CU, 0x554DU, 0x554EU, 0x554FU, 0x5550U, + 0x5551U, 0x5552U, 0x5553U, 0x5554U, 0x5555U, 0x5556U, 0x5557U, 0x5558U, + 0x5559U, 0x555AU, 0x5561U, 0x5562U, 0x5563U, 0x5564U, 0x5565U, 0x5566U, + 0x5567U, 0x5568U, 0x5569U, 0x556AU, 0x556BU, 0x556CU, 0x556DU, 0x556EU, + 0x556FU, 0x5570U, 0x5571U, 0x5572U, 0x5573U, 0x5574U, 0x5575U, 0x5576U, + 0x5577U, 0x5578U, 0x5579U, 0x557AU, 0x5530U, 0x5531U, 0x5532U, 0x5533U, + 0x5534U, 0x5535U, 0x5536U, 0x5537U, 0x5538U, 0x5539U, 0x552BU, 0x552FU, + 0x5641U, 0x5642U, 0x5643U, 0x5644U, 0x5645U, 0x5646U, 0x5647U, 0x5648U, + 0x5649U, 0x564AU, 0x564BU, 0x564CU, 0x564DU, 0x564EU, 0x564FU, 0x5650U, + 0x5651U, 0x5652U, 0x5653U, 0x5654U, 0x5655U, 0x5656U, 0x5657U, 0x5658U, + 0x5659U, 0x565AU, 0x5661U, 0x5662U, 0x5663U, 0x5664U, 0x5665U, 0x5666U, + 0x5667U, 0x5668U, 0x5669U, 0x566AU, 0x566BU, 0x566CU, 0x566DU, 0x566EU, + 0x566FU, 0x5670U, 0x5671U, 0x5672U, 0x5673U, 0x5674U, 0x5675U, 0x5676U, + 0x5677U, 0x5678U, 0x5679U, 0x567AU, 0x5630U, 0x5631U, 0x5632U, 0x5633U, + 0x5634U, 0x5635U, 0x5636U, 0x5637U, 0x5638U, 0x5639U, 0x562BU, 0x562FU, + 0x5741U, 0x5742U, 0x5743U, 0x5744U, 0x5745U, 0x5746U, 0x5747U, 0x5748U, + 0x5749U, 0x574AU, 0x574BU, 0x574CU, 0x574DU, 0x574EU, 0x574FU, 0x5750U, + 0x5751U, 0x5752U, 0x5753U, 0x5754U, 0x5755U, 0x5756U, 0x5757U, 0x5758U, + 0x5759U, 0x575AU, 0x5761U, 0x5762U, 0x5763U, 0x5764U, 0x5765U, 0x5766U, + 0x5767U, 0x5768U, 0x5769U, 0x576AU, 0x576BU, 0x576CU, 0x576DU, 0x576EU, + 0x576FU, 0x5770U, 0x5771U, 0x5772U, 0x5773U, 0x5774U, 0x5775U, 0x5776U, + 0x5777U, 0x5778U, 0x5779U, 0x577AU, 0x5730U, 0x5731U, 0x5732U, 0x5733U, + 0x5734U, 0x5735U, 0x5736U, 0x5737U, 0x5738U, 0x5739U, 0x572BU, 0x572FU, + 0x5841U, 0x5842U, 0x5843U, 0x5844U, 0x5845U, 0x5846U, 0x5847U, 0x5848U, + 0x5849U, 0x584AU, 0x584BU, 0x584CU, 0x584DU, 0x584EU, 0x584FU, 0x5850U, + 0x5851U, 0x5852U, 0x5853U, 0x5854U, 0x5855U, 0x5856U, 0x5857U, 0x5858U, + 0x5859U, 0x585AU, 0x5861U, 0x5862U, 0x5863U, 0x5864U, 0x5865U, 0x5866U, + 0x5867U, 0x5868U, 0x5869U, 0x586AU, 0x586BU, 0x586CU, 0x586DU, 0x586EU, + 0x586FU, 0x5870U, 0x5871U, 0x5872U, 0x5873U, 0x5874U, 0x5875U, 0x5876U, + 0x5877U, 0x5878U, 0x5879U, 0x587AU, 0x5830U, 0x5831U, 0x5832U, 0x5833U, + 0x5834U, 0x5835U, 0x5836U, 0x5837U, 0x5838U, 0x5839U, 0x582BU, 0x582FU, + 0x5941U, 0x5942U, 0x5943U, 0x5944U, 0x5945U, 0x5946U, 0x5947U, 0x5948U, + 0x5949U, 0x594AU, 0x594BU, 0x594CU, 0x594DU, 0x594EU, 0x594FU, 0x5950U, + 0x5951U, 0x5952U, 0x5953U, 0x5954U, 0x5955U, 0x5956U, 0x5957U, 0x5958U, + 0x5959U, 0x595AU, 0x5961U, 0x5962U, 0x5963U, 0x5964U, 0x5965U, 0x5966U, + 0x5967U, 0x5968U, 0x5969U, 0x596AU, 0x596BU, 0x596CU, 0x596DU, 0x596EU, + 0x596FU, 0x5970U, 0x5971U, 0x5972U, 0x5973U, 0x5974U, 0x5975U, 0x5976U, + 0x5977U, 0x5978U, 0x5979U, 0x597AU, 0x5930U, 0x5931U, 0x5932U, 0x5933U, + 0x5934U, 0x5935U, 0x5936U, 0x5937U, 0x5938U, 0x5939U, 0x592BU, 0x592FU, + 0x5A41U, 0x5A42U, 0x5A43U, 0x5A44U, 0x5A45U, 0x5A46U, 0x5A47U, 0x5A48U, + 0x5A49U, 0x5A4AU, 0x5A4BU, 0x5A4CU, 0x5A4DU, 0x5A4EU, 0x5A4FU, 0x5A50U, + 0x5A51U, 0x5A52U, 0x5A53U, 0x5A54U, 0x5A55U, 0x5A56U, 0x5A57U, 0x5A58U, + 0x5A59U, 0x5A5AU, 0x5A61U, 0x5A62U, 0x5A63U, 0x5A64U, 0x5A65U, 0x5A66U, + 0x5A67U, 0x5A68U, 0x5A69U, 0x5A6AU, 0x5A6BU, 0x5A6CU, 0x5A6DU, 0x5A6EU, + 0x5A6FU, 0x5A70U, 0x5A71U, 0x5A72U, 0x5A73U, 0x5A74U, 0x5A75U, 0x5A76U, + 0x5A77U, 0x5A78U, 0x5A79U, 0x5A7AU, 0x5A30U, 0x5A31U, 0x5A32U, 0x5A33U, + 0x5A34U, 0x5A35U, 0x5A36U, 0x5A37U, 0x5A38U, 0x5A39U, 0x5A2BU, 0x5A2FU, + 0x6141U, 0x6142U, 0x6143U, 0x6144U, 0x6145U, 0x6146U, 0x6147U, 0x6148U, + 0x6149U, 0x614AU, 0x614BU, 0x614CU, 0x614DU, 0x614EU, 0x614FU, 0x6150U, + 0x6151U, 0x6152U, 0x6153U, 0x6154U, 0x6155U, 0x6156U, 0x6157U, 0x6158U, + 0x6159U, 0x615AU, 0x6161U, 0x6162U, 0x6163U, 0x6164U, 0x6165U, 0x6166U, + 0x6167U, 0x6168U, 0x6169U, 0x616AU, 0x616BU, 0x616CU, 0x616DU, 0x616EU, + 0x616FU, 0x6170U, 0x6171U, 0x6172U, 0x6173U, 0x6174U, 0x6175U, 0x6176U, + 0x6177U, 0x6178U, 0x6179U, 0x617AU, 0x6130U, 0x6131U, 0x6132U, 0x6133U, + 0x6134U, 0x6135U, 0x6136U, 0x6137U, 0x6138U, 0x6139U, 0x612BU, 0x612FU, + 0x6241U, 0x6242U, 0x6243U, 0x6244U, 0x6245U, 0x6246U, 0x6247U, 0x6248U, + 0x6249U, 0x624AU, 0x624BU, 0x624CU, 0x624DU, 0x624EU, 0x624FU, 0x6250U, + 0x6251U, 0x6252U, 0x6253U, 0x6254U, 0x6255U, 0x6256U, 0x6257U, 0x6258U, + 0x6259U, 0x625AU, 0x6261U, 0x6262U, 0x6263U, 0x6264U, 0x6265U, 0x6266U, + 0x6267U, 0x6268U, 0x6269U, 0x626AU, 0x626BU, 0x626CU, 0x626DU, 0x626EU, + 0x626FU, 0x6270U, 0x6271U, 0x6272U, 0x6273U, 0x6274U, 0x6275U, 0x6276U, + 0x6277U, 0x6278U, 0x6279U, 0x627AU, 0x6230U, 0x6231U, 0x6232U, 0x6233U, + 0x6234U, 0x6235U, 0x6236U, 0x6237U, 0x6238U, 0x6239U, 0x622BU, 0x622FU, + 0x6341U, 0x6342U, 0x6343U, 0x6344U, 0x6345U, 0x6346U, 0x6347U, 0x6348U, + 0x6349U, 0x634AU, 0x634BU, 0x634CU, 0x634DU, 0x634EU, 0x634FU, 0x6350U, + 0x6351U, 0x6352U, 0x6353U, 0x6354U, 0x6355U, 0x6356U, 0x6357U, 0x6358U, + 0x6359U, 0x635AU, 0x6361U, 0x6362U, 0x6363U, 0x6364U, 0x6365U, 0x6366U, + 0x6367U, 0x6368U, 0x6369U, 0x636AU, 0x636BU, 0x636CU, 0x636DU, 0x636EU, + 0x636FU, 0x6370U, 0x6371U, 0x6372U, 0x6373U, 0x6374U, 0x6375U, 0x6376U, + 0x6377U, 0x6378U, 0x6379U, 0x637AU, 0x6330U, 0x6331U, 0x6332U, 0x6333U, + 0x6334U, 0x6335U, 0x6336U, 0x6337U, 0x6338U, 0x6339U, 0x632BU, 0x632FU, + 0x6441U, 0x6442U, 0x6443U, 0x6444U, 0x6445U, 0x6446U, 0x6447U, 0x6448U, + 0x6449U, 0x644AU, 0x644BU, 0x644CU, 0x644DU, 0x644EU, 0x644FU, 0x6450U, + 0x6451U, 0x6452U, 0x6453U, 0x6454U, 0x6455U, 0x6456U, 0x6457U, 0x6458U, + 0x6459U, 0x645AU, 0x6461U, 0x6462U, 0x6463U, 0x6464U, 0x6465U, 0x6466U, + 0x6467U, 0x6468U, 0x6469U, 0x646AU, 0x646BU, 0x646CU, 0x646DU, 0x646EU, + 0x646FU, 0x6470U, 0x6471U, 0x6472U, 0x6473U, 0x6474U, 0x6475U, 0x6476U, + 0x6477U, 0x6478U, 0x6479U, 0x647AU, 0x6430U, 0x6431U, 0x6432U, 0x6433U, + 0x6434U, 0x6435U, 0x6436U, 0x6437U, 0x6438U, 0x6439U, 0x642BU, 0x642FU, + 0x6541U, 0x6542U, 0x6543U, 0x6544U, 0x6545U, 0x6546U, 0x6547U, 0x6548U, + 0x6549U, 0x654AU, 0x654BU, 0x654CU, 0x654DU, 0x654EU, 0x654FU, 0x6550U, + 0x6551U, 0x6552U, 0x6553U, 0x6554U, 0x6555U, 0x6556U, 0x6557U, 0x6558U, + 0x6559U, 0x655AU, 0x6561U, 0x6562U, 0x6563U, 0x6564U, 0x6565U, 0x6566U, + 0x6567U, 0x6568U, 0x6569U, 0x656AU, 0x656BU, 0x656CU, 0x656DU, 0x656EU, + 0x656FU, 0x6570U, 0x6571U, 0x6572U, 0x6573U, 0x6574U, 0x6575U, 0x6576U, + 0x6577U, 0x6578U, 0x6579U, 0x657AU, 0x6530U, 0x6531U, 0x6532U, 0x6533U, + 0x6534U, 0x6535U, 0x6536U, 0x6537U, 0x6538U, 0x6539U, 0x652BU, 0x652FU, + 0x6641U, 0x6642U, 0x6643U, 0x6644U, 0x6645U, 0x6646U, 0x6647U, 0x6648U, + 0x6649U, 0x664AU, 0x664BU, 0x664CU, 0x664DU, 0x664EU, 0x664FU, 0x6650U, + 0x6651U, 0x6652U, 0x6653U, 0x6654U, 0x6655U, 0x6656U, 0x6657U, 0x6658U, + 0x6659U, 0x665AU, 0x6661U, 0x6662U, 0x6663U, 0x6664U, 0x6665U, 0x6666U, + 0x6667U, 0x6668U, 0x6669U, 0x666AU, 0x666BU, 0x666CU, 0x666DU, 0x666EU, + 0x666FU, 0x6670U, 0x6671U, 0x6672U, 0x6673U, 0x6674U, 0x6675U, 0x6676U, + 0x6677U, 0x6678U, 0x6679U, 0x667AU, 0x6630U, 0x6631U, 0x6632U, 0x6633U, + 0x6634U, 0x6635U, 0x6636U, 0x6637U, 0x6638U, 0x6639U, 0x662BU, 0x662FU, + 0x6741U, 0x6742U, 0x6743U, 0x6744U, 0x6745U, 0x6746U, 0x6747U, 0x6748U, + 0x6749U, 0x674AU, 0x674BU, 0x674CU, 0x674DU, 0x674EU, 0x674FU, 0x6750U, + 0x6751U, 0x6752U, 0x6753U, 0x6754U, 0x6755U, 0x6756U, 0x6757U, 0x6758U, + 0x6759U, 0x675AU, 0x6761U, 0x6762U, 0x6763U, 0x6764U, 0x6765U, 0x6766U, + 0x6767U, 0x6768U, 0x6769U, 0x676AU, 0x676BU, 0x676CU, 0x676DU, 0x676EU, + 0x676FU, 0x6770U, 0x6771U, 0x6772U, 0x6773U, 0x6774U, 0x6775U, 0x6776U, + 0x6777U, 0x6778U, 0x6779U, 0x677AU, 0x6730U, 0x6731U, 0x6732U, 0x6733U, + 0x6734U, 0x6735U, 0x6736U, 0x6737U, 0x6738U, 0x6739U, 0x672BU, 0x672FU, + 0x6841U, 0x6842U, 0x6843U, 0x6844U, 0x6845U, 0x6846U, 0x6847U, 0x6848U, + 0x6849U, 0x684AU, 0x684BU, 0x684CU, 0x684DU, 0x684EU, 0x684FU, 0x6850U, + 0x6851U, 0x6852U, 0x6853U, 0x6854U, 0x6855U, 0x6856U, 0x6857U, 0x6858U, + 0x6859U, 0x685AU, 0x6861U, 0x6862U, 0x6863U, 0x6864U, 0x6865U, 0x6866U, + 0x6867U, 0x6868U, 0x6869U, 0x686AU, 0x686BU, 0x686CU, 0x686DU, 0x686EU, + 0x686FU, 0x6870U, 0x6871U, 0x6872U, 0x6873U, 0x6874U, 0x6875U, 0x6876U, + 0x6877U, 0x6878U, 0x6879U, 0x687AU, 0x6830U, 0x6831U, 0x6832U, 0x6833U, + 0x6834U, 0x6835U, 0x6836U, 0x6837U, 0x6838U, 0x6839U, 0x682BU, 0x682FU, + 0x6941U, 0x6942U, 0x6943U, 0x6944U, 0x6945U, 0x6946U, 0x6947U, 0x6948U, + 0x6949U, 0x694AU, 0x694BU, 0x694CU, 0x694DU, 0x694EU, 0x694FU, 0x6950U, + 0x6951U, 0x6952U, 0x6953U, 0x6954U, 0x6955U, 0x6956U, 0x6957U, 0x6958U, + 0x6959U, 0x695AU, 0x6961U, 0x6962U, 0x6963U, 0x6964U, 0x6965U, 0x6966U, + 0x6967U, 0x6968U, 0x6969U, 0x696AU, 0x696BU, 0x696CU, 0x696DU, 0x696EU, + 0x696FU, 0x6970U, 0x6971U, 0x6972U, 0x6973U, 0x6974U, 0x6975U, 0x6976U, + 0x6977U, 0x6978U, 0x6979U, 0x697AU, 0x6930U, 0x6931U, 0x6932U, 0x6933U, + 0x6934U, 0x6935U, 0x6936U, 0x6937U, 0x6938U, 0x6939U, 0x692BU, 0x692FU, + 0x6A41U, 0x6A42U, 0x6A43U, 0x6A44U, 0x6A45U, 0x6A46U, 0x6A47U, 0x6A48U, + 0x6A49U, 0x6A4AU, 0x6A4BU, 0x6A4CU, 0x6A4DU, 0x6A4EU, 0x6A4FU, 0x6A50U, + 0x6A51U, 0x6A52U, 0x6A53U, 0x6A54U, 0x6A55U, 0x6A56U, 0x6A57U, 0x6A58U, + 0x6A59U, 0x6A5AU, 0x6A61U, 0x6A62U, 0x6A63U, 0x6A64U, 0x6A65U, 0x6A66U, + 0x6A67U, 0x6A68U, 0x6A69U, 0x6A6AU, 0x6A6BU, 0x6A6CU, 0x6A6DU, 0x6A6EU, + 0x6A6FU, 0x6A70U, 0x6A71U, 0x6A72U, 0x6A73U, 0x6A74U, 0x6A75U, 0x6A76U, + 0x6A77U, 0x6A78U, 0x6A79U, 0x6A7AU, 0x6A30U, 0x6A31U, 0x6A32U, 0x6A33U, + 0x6A34U, 0x6A35U, 0x6A36U, 0x6A37U, 0x6A38U, 0x6A39U, 0x6A2BU, 0x6A2FU, + 0x6B41U, 0x6B42U, 0x6B43U, 0x6B44U, 0x6B45U, 0x6B46U, 0x6B47U, 0x6B48U, + 0x6B49U, 0x6B4AU, 0x6B4BU, 0x6B4CU, 0x6B4DU, 0x6B4EU, 0x6B4FU, 0x6B50U, + 0x6B51U, 0x6B52U, 0x6B53U, 0x6B54U, 0x6B55U, 0x6B56U, 0x6B57U, 0x6B58U, + 0x6B59U, 0x6B5AU, 0x6B61U, 0x6B62U, 0x6B63U, 0x6B64U, 0x6B65U, 0x6B66U, + 0x6B67U, 0x6B68U, 0x6B69U, 0x6B6AU, 0x6B6BU, 0x6B6CU, 0x6B6DU, 0x6B6EU, + 0x6B6FU, 0x6B70U, 0x6B71U, 0x6B72U, 0x6B73U, 0x6B74U, 0x6B75U, 0x6B76U, + 0x6B77U, 0x6B78U, 0x6B79U, 0x6B7AU, 0x6B30U, 0x6B31U, 0x6B32U, 0x6B33U, + 0x6B34U, 0x6B35U, 0x6B36U, 0x6B37U, 0x6B38U, 0x6B39U, 0x6B2BU, 0x6B2FU, + 0x6C41U, 0x6C42U, 0x6C43U, 0x6C44U, 0x6C45U, 0x6C46U, 0x6C47U, 0x6C48U, + 0x6C49U, 0x6C4AU, 0x6C4BU, 0x6C4CU, 0x6C4DU, 0x6C4EU, 0x6C4FU, 0x6C50U, + 0x6C51U, 0x6C52U, 0x6C53U, 0x6C54U, 0x6C55U, 0x6C56U, 0x6C57U, 0x6C58U, + 0x6C59U, 0x6C5AU, 0x6C61U, 0x6C62U, 0x6C63U, 0x6C64U, 0x6C65U, 0x6C66U, + 0x6C67U, 0x6C68U, 0x6C69U, 0x6C6AU, 0x6C6BU, 0x6C6CU, 0x6C6DU, 0x6C6EU, + 0x6C6FU, 0x6C70U, 0x6C71U, 0x6C72U, 0x6C73U, 0x6C74U, 0x6C75U, 0x6C76U, + 0x6C77U, 0x6C78U, 0x6C79U, 0x6C7AU, 0x6C30U, 0x6C31U, 0x6C32U, 0x6C33U, + 0x6C34U, 0x6C35U, 0x6C36U, 0x6C37U, 0x6C38U, 0x6C39U, 0x6C2BU, 0x6C2FU, + 0x6D41U, 0x6D42U, 0x6D43U, 0x6D44U, 0x6D45U, 0x6D46U, 0x6D47U, 0x6D48U, + 0x6D49U, 0x6D4AU, 0x6D4BU, 0x6D4CU, 0x6D4DU, 0x6D4EU, 0x6D4FU, 0x6D50U, + 0x6D51U, 0x6D52U, 0x6D53U, 0x6D54U, 0x6D55U, 0x6D56U, 0x6D57U, 0x6D58U, + 0x6D59U, 0x6D5AU, 0x6D61U, 0x6D62U, 0x6D63U, 0x6D64U, 0x6D65U, 0x6D66U, + 0x6D67U, 0x6D68U, 0x6D69U, 0x6D6AU, 0x6D6BU, 0x6D6CU, 0x6D6DU, 0x6D6EU, + 0x6D6FU, 0x6D70U, 0x6D71U, 0x6D72U, 0x6D73U, 0x6D74U, 0x6D75U, 0x6D76U, + 0x6D77U, 0x6D78U, 0x6D79U, 0x6D7AU, 0x6D30U, 0x6D31U, 0x6D32U, 0x6D33U, + 0x6D34U, 0x6D35U, 0x6D36U, 0x6D37U, 0x6D38U, 0x6D39U, 0x6D2BU, 0x6D2FU, + 0x6E41U, 0x6E42U, 0x6E43U, 0x6E44U, 0x6E45U, 0x6E46U, 0x6E47U, 0x6E48U, + 0x6E49U, 0x6E4AU, 0x6E4BU, 0x6E4CU, 0x6E4DU, 0x6E4EU, 0x6E4FU, 0x6E50U, + 0x6E51U, 0x6E52U, 0x6E53U, 0x6E54U, 0x6E55U, 0x6E56U, 0x6E57U, 0x6E58U, + 0x6E59U, 0x6E5AU, 0x6E61U, 0x6E62U, 0x6E63U, 0x6E64U, 0x6E65U, 0x6E66U, + 0x6E67U, 0x6E68U, 0x6E69U, 0x6E6AU, 0x6E6BU, 0x6E6CU, 0x6E6DU, 0x6E6EU, + 0x6E6FU, 0x6E70U, 0x6E71U, 0x6E72U, 0x6E73U, 0x6E74U, 0x6E75U, 0x6E76U, + 0x6E77U, 0x6E78U, 0x6E79U, 0x6E7AU, 0x6E30U, 0x6E31U, 0x6E32U, 0x6E33U, + 0x6E34U, 0x6E35U, 0x6E36U, 0x6E37U, 0x6E38U, 0x6E39U, 0x6E2BU, 0x6E2FU, + 0x6F41U, 0x6F42U, 0x6F43U, 0x6F44U, 0x6F45U, 0x6F46U, 0x6F47U, 0x6F48U, + 0x6F49U, 0x6F4AU, 0x6F4BU, 0x6F4CU, 0x6F4DU, 0x6F4EU, 0x6F4FU, 0x6F50U, + 0x6F51U, 0x6F52U, 0x6F53U, 0x6F54U, 0x6F55U, 0x6F56U, 0x6F57U, 0x6F58U, + 0x6F59U, 0x6F5AU, 0x6F61U, 0x6F62U, 0x6F63U, 0x6F64U, 0x6F65U, 0x6F66U, + 0x6F67U, 0x6F68U, 0x6F69U, 0x6F6AU, 0x6F6BU, 0x6F6CU, 0x6F6DU, 0x6F6EU, + 0x6F6FU, 0x6F70U, 0x6F71U, 0x6F72U, 0x6F73U, 0x6F74U, 0x6F75U, 0x6F76U, + 0x6F77U, 0x6F78U, 0x6F79U, 0x6F7AU, 0x6F30U, 0x6F31U, 0x6F32U, 0x6F33U, + 0x6F34U, 0x6F35U, 0x6F36U, 0x6F37U, 0x6F38U, 0x6F39U, 0x6F2BU, 0x6F2FU, + 0x7041U, 0x7042U, 0x7043U, 0x7044U, 0x7045U, 0x7046U, 0x7047U, 0x7048U, + 0x7049U, 0x704AU, 0x704BU, 0x704CU, 0x704DU, 0x704EU, 0x704FU, 0x7050U, + 0x7051U, 0x7052U, 0x7053U, 0x7054U, 0x7055U, 0x7056U, 0x7057U, 0x7058U, + 0x7059U, 0x705AU, 0x7061U, 0x7062U, 0x7063U, 0x7064U, 0x7065U, 0x7066U, + 0x7067U, 0x7068U, 0x7069U, 0x706AU, 0x706BU, 0x706CU, 0x706DU, 0x706EU, + 0x706FU, 0x7070U, 0x7071U, 0x7072U, 0x7073U, 0x7074U, 0x7075U, 0x7076U, + 0x7077U, 0x7078U, 0x7079U, 0x707AU, 0x7030U, 0x7031U, 0x7032U, 0x7033U, + 0x7034U, 0x7035U, 0x7036U, 0x7037U, 0x7038U, 0x7039U, 0x702BU, 0x702FU, + 0x7141U, 0x7142U, 0x7143U, 0x7144U, 0x7145U, 0x7146U, 0x7147U, 0x7148U, + 0x7149U, 0x714AU, 0x714BU, 0x714CU, 0x714DU, 0x714EU, 0x714FU, 0x7150U, + 0x7151U, 0x7152U, 0x7153U, 0x7154U, 0x7155U, 0x7156U, 0x7157U, 0x7158U, + 0x7159U, 0x715AU, 0x7161U, 0x7162U, 0x7163U, 0x7164U, 0x7165U, 0x7166U, + 0x7167U, 0x7168U, 0x7169U, 0x716AU, 0x716BU, 0x716CU, 0x716DU, 0x716EU, + 0x716FU, 0x7170U, 0x7171U, 0x7172U, 0x7173U, 0x7174U, 0x7175U, 0x7176U, + 0x7177U, 0x7178U, 0x7179U, 0x717AU, 0x7130U, 0x7131U, 0x7132U, 0x7133U, + 0x7134U, 0x7135U, 0x7136U, 0x7137U, 0x7138U, 0x7139U, 0x712BU, 0x712FU, + 0x7241U, 0x7242U, 0x7243U, 0x7244U, 0x7245U, 0x7246U, 0x7247U, 0x7248U, + 0x7249U, 0x724AU, 0x724BU, 0x724CU, 0x724DU, 0x724EU, 0x724FU, 0x7250U, + 0x7251U, 0x7252U, 0x7253U, 0x7254U, 0x7255U, 0x7256U, 0x7257U, 0x7258U, + 0x7259U, 0x725AU, 0x7261U, 0x7262U, 0x7263U, 0x7264U, 0x7265U, 0x7266U, + 0x7267U, 0x7268U, 0x7269U, 0x726AU, 0x726BU, 0x726CU, 0x726DU, 0x726EU, + 0x726FU, 0x7270U, 0x7271U, 0x7272U, 0x7273U, 0x7274U, 0x7275U, 0x7276U, + 0x7277U, 0x7278U, 0x7279U, 0x727AU, 0x7230U, 0x7231U, 0x7232U, 0x7233U, + 0x7234U, 0x7235U, 0x7236U, 0x7237U, 0x7238U, 0x7239U, 0x722BU, 0x722FU, + 0x7341U, 0x7342U, 0x7343U, 0x7344U, 0x7345U, 0x7346U, 0x7347U, 0x7348U, + 0x7349U, 0x734AU, 0x734BU, 0x734CU, 0x734DU, 0x734EU, 0x734FU, 0x7350U, + 0x7351U, 0x7352U, 0x7353U, 0x7354U, 0x7355U, 0x7356U, 0x7357U, 0x7358U, + 0x7359U, 0x735AU, 0x7361U, 0x7362U, 0x7363U, 0x7364U, 0x7365U, 0x7366U, + 0x7367U, 0x7368U, 0x7369U, 0x736AU, 0x736BU, 0x736CU, 0x736DU, 0x736EU, + 0x736FU, 0x7370U, 0x7371U, 0x7372U, 0x7373U, 0x7374U, 0x7375U, 0x7376U, + 0x7377U, 0x7378U, 0x7379U, 0x737AU, 0x7330U, 0x7331U, 0x7332U, 0x7333U, + 0x7334U, 0x7335U, 0x7336U, 0x7337U, 0x7338U, 0x7339U, 0x732BU, 0x732FU, + 0x7441U, 0x7442U, 0x7443U, 0x7444U, 0x7445U, 0x7446U, 0x7447U, 0x7448U, + 0x7449U, 0x744AU, 0x744BU, 0x744CU, 0x744DU, 0x744EU, 0x744FU, 0x7450U, + 0x7451U, 0x7452U, 0x7453U, 0x7454U, 0x7455U, 0x7456U, 0x7457U, 0x7458U, + 0x7459U, 0x745AU, 0x7461U, 0x7462U, 0x7463U, 0x7464U, 0x7465U, 0x7466U, + 0x7467U, 0x7468U, 0x7469U, 0x746AU, 0x746BU, 0x746CU, 0x746DU, 0x746EU, + 0x746FU, 0x7470U, 0x7471U, 0x7472U, 0x7473U, 0x7474U, 0x7475U, 0x7476U, + 0x7477U, 0x7478U, 0x7479U, 0x747AU, 0x7430U, 0x7431U, 0x7432U, 0x7433U, + 0x7434U, 0x7435U, 0x7436U, 0x7437U, 0x7438U, 0x7439U, 0x742BU, 0x742FU, + 0x7541U, 0x7542U, 0x7543U, 0x7544U, 0x7545U, 0x7546U, 0x7547U, 0x7548U, + 0x7549U, 0x754AU, 0x754BU, 0x754CU, 0x754DU, 0x754EU, 0x754FU, 0x7550U, + 0x7551U, 0x7552U, 0x7553U, 0x7554U, 0x7555U, 0x7556U, 0x7557U, 0x7558U, + 0x7559U, 0x755AU, 0x7561U, 0x7562U, 0x7563U, 0x7564U, 0x7565U, 0x7566U, + 0x7567U, 0x7568U, 0x7569U, 0x756AU, 0x756BU, 0x756CU, 0x756DU, 0x756EU, + 0x756FU, 0x7570U, 0x7571U, 0x7572U, 0x7573U, 0x7574U, 0x7575U, 0x7576U, + 0x7577U, 0x7578U, 0x7579U, 0x757AU, 0x7530U, 0x7531U, 0x7532U, 0x7533U, + 0x7534U, 0x7535U, 0x7536U, 0x7537U, 0x7538U, 0x7539U, 0x752BU, 0x752FU, + 0x7641U, 0x7642U, 0x7643U, 0x7644U, 0x7645U, 0x7646U, 0x7647U, 0x7648U, + 0x7649U, 0x764AU, 0x764BU, 0x764CU, 0x764DU, 0x764EU, 0x764FU, 0x7650U, + 0x7651U, 0x7652U, 0x7653U, 0x7654U, 0x7655U, 0x7656U, 0x7657U, 0x7658U, + 0x7659U, 0x765AU, 0x7661U, 0x7662U, 0x7663U, 0x7664U, 0x7665U, 0x7666U, + 0x7667U, 0x7668U, 0x7669U, 0x766AU, 0x766BU, 0x766CU, 0x766DU, 0x766EU, + 0x766FU, 0x7670U, 0x7671U, 0x7672U, 0x7673U, 0x7674U, 0x7675U, 0x7676U, + 0x7677U, 0x7678U, 0x7679U, 0x767AU, 0x7630U, 0x7631U, 0x7632U, 0x7633U, + 0x7634U, 0x7635U, 0x7636U, 0x7637U, 0x7638U, 0x7639U, 0x762BU, 0x762FU, + 0x7741U, 0x7742U, 0x7743U, 0x7744U, 0x7745U, 0x7746U, 0x7747U, 0x7748U, + 0x7749U, 0x774AU, 0x774BU, 0x774CU, 0x774DU, 0x774EU, 0x774FU, 0x7750U, + 0x7751U, 0x7752U, 0x7753U, 0x7754U, 0x7755U, 0x7756U, 0x7757U, 0x7758U, + 0x7759U, 0x775AU, 0x7761U, 0x7762U, 0x7763U, 0x7764U, 0x7765U, 0x7766U, + 0x7767U, 0x7768U, 0x7769U, 0x776AU, 0x776BU, 0x776CU, 0x776DU, 0x776EU, + 0x776FU, 0x7770U, 0x7771U, 0x7772U, 0x7773U, 0x7774U, 0x7775U, 0x7776U, + 0x7777U, 0x7778U, 0x7779U, 0x777AU, 0x7730U, 0x7731U, 0x7732U, 0x7733U, + 0x7734U, 0x7735U, 0x7736U, 0x7737U, 0x7738U, 0x7739U, 0x772BU, 0x772FU, + 0x7841U, 0x7842U, 0x7843U, 0x7844U, 0x7845U, 0x7846U, 0x7847U, 0x7848U, + 0x7849U, 0x784AU, 0x784BU, 0x784CU, 0x784DU, 0x784EU, 0x784FU, 0x7850U, + 0x7851U, 0x7852U, 0x7853U, 0x7854U, 0x7855U, 0x7856U, 0x7857U, 0x7858U, + 0x7859U, 0x785AU, 0x7861U, 0x7862U, 0x7863U, 0x7864U, 0x7865U, 0x7866U, + 0x7867U, 0x7868U, 0x7869U, 0x786AU, 0x786BU, 0x786CU, 0x786DU, 0x786EU, + 0x786FU, 0x7870U, 0x7871U, 0x7872U, 0x7873U, 0x7874U, 0x7875U, 0x7876U, + 0x7877U, 0x7878U, 0x7879U, 0x787AU, 0x7830U, 0x7831U, 0x7832U, 0x7833U, + 0x7834U, 0x7835U, 0x7836U, 0x7837U, 0x7838U, 0x7839U, 0x782BU, 0x782FU, + 0x7941U, 0x7942U, 0x7943U, 0x7944U, 0x7945U, 0x7946U, 0x7947U, 0x7948U, + 0x7949U, 0x794AU, 0x794BU, 0x794CU, 0x794DU, 0x794EU, 0x794FU, 0x7950U, + 0x7951U, 0x7952U, 0x7953U, 0x7954U, 0x7955U, 0x7956U, 0x7957U, 0x7958U, + 0x7959U, 0x795AU, 0x7961U, 0x7962U, 0x7963U, 0x7964U, 0x7965U, 0x7966U, + 0x7967U, 0x7968U, 0x7969U, 0x796AU, 0x796BU, 0x796CU, 0x796DU, 0x796EU, + 0x796FU, 0x7970U, 0x7971U, 0x7972U, 0x7973U, 0x7974U, 0x7975U, 0x7976U, + 0x7977U, 0x7978U, 0x7979U, 0x797AU, 0x7930U, 0x7931U, 0x7932U, 0x7933U, + 0x7934U, 0x7935U, 0x7936U, 0x7937U, 0x7938U, 0x7939U, 0x792BU, 0x792FU, + 0x7A41U, 0x7A42U, 0x7A43U, 0x7A44U, 0x7A45U, 0x7A46U, 0x7A47U, 0x7A48U, + 0x7A49U, 0x7A4AU, 0x7A4BU, 0x7A4CU, 0x7A4DU, 0x7A4EU, 0x7A4FU, 0x7A50U, + 0x7A51U, 0x7A52U, 0x7A53U, 0x7A54U, 0x7A55U, 0x7A56U, 0x7A57U, 0x7A58U, + 0x7A59U, 0x7A5AU, 0x7A61U, 0x7A62U, 0x7A63U, 0x7A64U, 0x7A65U, 0x7A66U, + 0x7A67U, 0x7A68U, 0x7A69U, 0x7A6AU, 0x7A6BU, 0x7A6CU, 0x7A6DU, 0x7A6EU, + 0x7A6FU, 0x7A70U, 0x7A71U, 0x7A72U, 0x7A73U, 0x7A74U, 0x7A75U, 0x7A76U, + 0x7A77U, 0x7A78U, 0x7A79U, 0x7A7AU, 0x7A30U, 0x7A31U, 0x7A32U, 0x7A33U, + 0x7A34U, 0x7A35U, 0x7A36U, 0x7A37U, 0x7A38U, 0x7A39U, 0x7A2BU, 0x7A2FU, + 0x3041U, 0x3042U, 0x3043U, 0x3044U, 0x3045U, 0x3046U, 0x3047U, 0x3048U, + 0x3049U, 0x304AU, 0x304BU, 0x304CU, 0x304DU, 0x304EU, 0x304FU, 0x3050U, + 0x3051U, 0x3052U, 0x3053U, 0x3054U, 0x3055U, 0x3056U, 0x3057U, 0x3058U, + 0x3059U, 0x305AU, 0x3061U, 0x3062U, 0x3063U, 0x3064U, 0x3065U, 0x3066U, + 0x3067U, 0x3068U, 0x3069U, 0x306AU, 0x306BU, 0x306CU, 0x306DU, 0x306EU, + 0x306FU, 0x3070U, 0x3071U, 0x3072U, 0x3073U, 0x3074U, 0x3075U, 0x3076U, + 0x3077U, 0x3078U, 0x3079U, 0x307AU, 0x3030U, 0x3031U, 0x3032U, 0x3033U, + 0x3034U, 0x3035U, 0x3036U, 0x3037U, 0x3038U, 0x3039U, 0x302BU, 0x302FU, + 0x3141U, 0x3142U, 0x3143U, 0x3144U, 0x3145U, 0x3146U, 0x3147U, 0x3148U, + 0x3149U, 0x314AU, 0x314BU, 0x314CU, 0x314DU, 0x314EU, 0x314FU, 0x3150U, + 0x3151U, 0x3152U, 0x3153U, 0x3154U, 0x3155U, 0x3156U, 0x3157U, 0x3158U, + 0x3159U, 0x315AU, 0x3161U, 0x3162U, 0x3163U, 0x3164U, 0x3165U, 0x3166U, + 0x3167U, 0x3168U, 0x3169U, 0x316AU, 0x316BU, 0x316CU, 0x316DU, 0x316EU, + 0x316FU, 0x3170U, 0x3171U, 0x3172U, 0x3173U, 0x3174U, 0x3175U, 0x3176U, + 0x3177U, 0x3178U, 0x3179U, 0x317AU, 0x3130U, 0x3131U, 0x3132U, 0x3133U, + 0x3134U, 0x3135U, 0x3136U, 0x3137U, 0x3138U, 0x3139U, 0x312BU, 0x312FU, + 0x3241U, 0x3242U, 0x3243U, 0x3244U, 0x3245U, 0x3246U, 0x3247U, 0x3248U, + 0x3249U, 0x324AU, 0x324BU, 0x324CU, 0x324DU, 0x324EU, 0x324FU, 0x3250U, + 0x3251U, 0x3252U, 0x3253U, 0x3254U, 0x3255U, 0x3256U, 0x3257U, 0x3258U, + 0x3259U, 0x325AU, 0x3261U, 0x3262U, 0x3263U, 0x3264U, 0x3265U, 0x3266U, + 0x3267U, 0x3268U, 0x3269U, 0x326AU, 0x326BU, 0x326CU, 0x326DU, 0x326EU, + 0x326FU, 0x3270U, 0x3271U, 0x3272U, 0x3273U, 0x3274U, 0x3275U, 0x3276U, + 0x3277U, 0x3278U, 0x3279U, 0x327AU, 0x3230U, 0x3231U, 0x3232U, 0x3233U, + 0x3234U, 0x3235U, 0x3236U, 0x3237U, 0x3238U, 0x3239U, 0x322BU, 0x322FU, + 0x3341U, 0x3342U, 0x3343U, 0x3344U, 0x3345U, 0x3346U, 0x3347U, 0x3348U, + 0x3349U, 0x334AU, 0x334BU, 0x334CU, 0x334DU, 0x334EU, 0x334FU, 0x3350U, + 0x3351U, 0x3352U, 0x3353U, 0x3354U, 0x3355U, 0x3356U, 0x3357U, 0x3358U, + 0x3359U, 0x335AU, 0x3361U, 0x3362U, 0x3363U, 0x3364U, 0x3365U, 0x3366U, + 0x3367U, 0x3368U, 0x3369U, 0x336AU, 0x336BU, 0x336CU, 0x336DU, 0x336EU, + 0x336FU, 0x3370U, 0x3371U, 0x3372U, 0x3373U, 0x3374U, 0x3375U, 0x3376U, + 0x3377U, 0x3378U, 0x3379U, 0x337AU, 0x3330U, 0x3331U, 0x3332U, 0x3333U, + 0x3334U, 0x3335U, 0x3336U, 0x3337U, 0x3338U, 0x3339U, 0x332BU, 0x332FU, + 0x3441U, 0x3442U, 0x3443U, 0x3444U, 0x3445U, 0x3446U, 0x3447U, 0x3448U, + 0x3449U, 0x344AU, 0x344BU, 0x344CU, 0x344DU, 0x344EU, 0x344FU, 0x3450U, + 0x3451U, 0x3452U, 0x3453U, 0x3454U, 0x3455U, 0x3456U, 0x3457U, 0x3458U, + 0x3459U, 0x345AU, 0x3461U, 0x3462U, 0x3463U, 0x3464U, 0x3465U, 0x3466U, + 0x3467U, 0x3468U, 0x3469U, 0x346AU, 0x346BU, 0x346CU, 0x346DU, 0x346EU, + 0x346FU, 0x3470U, 0x3471U, 0x3472U, 0x3473U, 0x3474U, 0x3475U, 0x3476U, + 0x3477U, 0x3478U, 0x3479U, 0x347AU, 0x3430U, 0x3431U, 0x3432U, 0x3433U, + 0x3434U, 0x3435U, 0x3436U, 0x3437U, 0x3438U, 0x3439U, 0x342BU, 0x342FU, + 0x3541U, 0x3542U, 0x3543U, 0x3544U, 0x3545U, 0x3546U, 0x3547U, 0x3548U, + 0x3549U, 0x354AU, 0x354BU, 0x354CU, 0x354DU, 0x354EU, 0x354FU, 0x3550U, + 0x3551U, 0x3552U, 0x3553U, 0x3554U, 0x3555U, 0x3556U, 0x3557U, 0x3558U, + 0x3559U, 0x355AU, 0x3561U, 0x3562U, 0x3563U, 0x3564U, 0x3565U, 0x3566U, + 0x3567U, 0x3568U, 0x3569U, 0x356AU, 0x356BU, 0x356CU, 0x356DU, 0x356EU, + 0x356FU, 0x3570U, 0x3571U, 0x3572U, 0x3573U, 0x3574U, 0x3575U, 0x3576U, + 0x3577U, 0x3578U, 0x3579U, 0x357AU, 0x3530U, 0x3531U, 0x3532U, 0x3533U, + 0x3534U, 0x3535U, 0x3536U, 0x3537U, 0x3538U, 0x3539U, 0x352BU, 0x352FU, + 0x3641U, 0x3642U, 0x3643U, 0x3644U, 0x3645U, 0x3646U, 0x3647U, 0x3648U, + 0x3649U, 0x364AU, 0x364BU, 0x364CU, 0x364DU, 0x364EU, 0x364FU, 0x3650U, + 0x3651U, 0x3652U, 0x3653U, 0x3654U, 0x3655U, 0x3656U, 0x3657U, 0x3658U, + 0x3659U, 0x365AU, 0x3661U, 0x3662U, 0x3663U, 0x3664U, 0x3665U, 0x3666U, + 0x3667U, 0x3668U, 0x3669U, 0x366AU, 0x366BU, 0x366CU, 0x366DU, 0x366EU, + 0x366FU, 0x3670U, 0x3671U, 0x3672U, 0x3673U, 0x3674U, 0x3675U, 0x3676U, + 0x3677U, 0x3678U, 0x3679U, 0x367AU, 0x3630U, 0x3631U, 0x3632U, 0x3633U, + 0x3634U, 0x3635U, 0x3636U, 0x3637U, 0x3638U, 0x3639U, 0x362BU, 0x362FU, + 0x3741U, 0x3742U, 0x3743U, 0x3744U, 0x3745U, 0x3746U, 0x3747U, 0x3748U, + 0x3749U, 0x374AU, 0x374BU, 0x374CU, 0x374DU, 0x374EU, 0x374FU, 0x3750U, + 0x3751U, 0x3752U, 0x3753U, 0x3754U, 0x3755U, 0x3756U, 0x3757U, 0x3758U, + 0x3759U, 0x375AU, 0x3761U, 0x3762U, 0x3763U, 0x3764U, 0x3765U, 0x3766U, + 0x3767U, 0x3768U, 0x3769U, 0x376AU, 0x376BU, 0x376CU, 0x376DU, 0x376EU, + 0x376FU, 0x3770U, 0x3771U, 0x3772U, 0x3773U, 0x3774U, 0x3775U, 0x3776U, + 0x3777U, 0x3778U, 0x3779U, 0x377AU, 0x3730U, 0x3731U, 0x3732U, 0x3733U, + 0x3734U, 0x3735U, 0x3736U, 0x3737U, 0x3738U, 0x3739U, 0x372BU, 0x372FU, + 0x3841U, 0x3842U, 0x3843U, 0x3844U, 0x3845U, 0x3846U, 0x3847U, 0x3848U, + 0x3849U, 0x384AU, 0x384BU, 0x384CU, 0x384DU, 0x384EU, 0x384FU, 0x3850U, + 0x3851U, 0x3852U, 0x3853U, 0x3854U, 0x3855U, 0x3856U, 0x3857U, 0x3858U, + 0x3859U, 0x385AU, 0x3861U, 0x3862U, 0x3863U, 0x3864U, 0x3865U, 0x3866U, + 0x3867U, 0x3868U, 0x3869U, 0x386AU, 0x386BU, 0x386CU, 0x386DU, 0x386EU, + 0x386FU, 0x3870U, 0x3871U, 0x3872U, 0x3873U, 0x3874U, 0x3875U, 0x3876U, + 0x3877U, 0x3878U, 0x3879U, 0x387AU, 0x3830U, 0x3831U, 0x3832U, 0x3833U, + 0x3834U, 0x3835U, 0x3836U, 0x3837U, 0x3838U, 0x3839U, 0x382BU, 0x382FU, + 0x3941U, 0x3942U, 0x3943U, 0x3944U, 0x3945U, 0x3946U, 0x3947U, 0x3948U, + 0x3949U, 0x394AU, 0x394BU, 0x394CU, 0x394DU, 0x394EU, 0x394FU, 0x3950U, + 0x3951U, 0x3952U, 0x3953U, 0x3954U, 0x3955U, 0x3956U, 0x3957U, 0x3958U, + 0x3959U, 0x395AU, 0x3961U, 0x3962U, 0x3963U, 0x3964U, 0x3965U, 0x3966U, + 0x3967U, 0x3968U, 0x3969U, 0x396AU, 0x396BU, 0x396CU, 0x396DU, 0x396EU, + 0x396FU, 0x3970U, 0x3971U, 0x3972U, 0x3973U, 0x3974U, 0x3975U, 0x3976U, + 0x3977U, 0x3978U, 0x3979U, 0x397AU, 0x3930U, 0x3931U, 0x3932U, 0x3933U, + 0x3934U, 0x3935U, 0x3936U, 0x3937U, 0x3938U, 0x3939U, 0x392BU, 0x392FU, + 0x2B41U, 0x2B42U, 0x2B43U, 0x2B44U, 0x2B45U, 0x2B46U, 0x2B47U, 0x2B48U, + 0x2B49U, 0x2B4AU, 0x2B4BU, 0x2B4CU, 0x2B4DU, 0x2B4EU, 0x2B4FU, 0x2B50U, + 0x2B51U, 0x2B52U, 0x2B53U, 0x2B54U, 0x2B55U, 0x2B56U, 0x2B57U, 0x2B58U, + 0x2B59U, 0x2B5AU, 0x2B61U, 0x2B62U, 0x2B63U, 0x2B64U, 0x2B65U, 0x2B66U, + 0x2B67U, 0x2B68U, 0x2B69U, 0x2B6AU, 0x2B6BU, 0x2B6CU, 0x2B6DU, 0x2B6EU, + 0x2B6FU, 0x2B70U, 0x2B71U, 0x2B72U, 0x2B73U, 0x2B74U, 0x2B75U, 0x2B76U, + 0x2B77U, 0x2B78U, 0x2B79U, 0x2B7AU, 0x2B30U, 0x2B31U, 0x2B32U, 0x2B33U, + 0x2B34U, 0x2B35U, 0x2B36U, 0x2B37U, 0x2B38U, 0x2B39U, 0x2B2BU, 0x2B2FU, + 0x2F41U, 0x2F42U, 0x2F43U, 0x2F44U, 0x2F45U, 0x2F46U, 0x2F47U, 0x2F48U, + 0x2F49U, 0x2F4AU, 0x2F4BU, 0x2F4CU, 0x2F4DU, 0x2F4EU, 0x2F4FU, 0x2F50U, + 0x2F51U, 0x2F52U, 0x2F53U, 0x2F54U, 0x2F55U, 0x2F56U, 0x2F57U, 0x2F58U, + 0x2F59U, 0x2F5AU, 0x2F61U, 0x2F62U, 0x2F63U, 0x2F64U, 0x2F65U, 0x2F66U, + 0x2F67U, 0x2F68U, 0x2F69U, 0x2F6AU, 0x2F6BU, 0x2F6CU, 0x2F6DU, 0x2F6EU, + 0x2F6FU, 0x2F70U, 0x2F71U, 0x2F72U, 0x2F73U, 0x2F74U, 0x2F75U, 0x2F76U, + 0x2F77U, 0x2F78U, 0x2F79U, 0x2F7AU, 0x2F30U, 0x2F31U, 0x2F32U, 0x2F33U, + 0x2F34U, 0x2F35U, 0x2F36U, 0x2F37U, 0x2F38U, 0x2F39U, 0x2F2BU, 0x2F2FU, +#endif +}; diff --git a/deps/base64/base64/lib/tables/table_enc_12bit.py b/deps/base64/base64/lib/tables/table_enc_12bit.py new file mode 100755 index 00000000000..613ab81af1d --- /dev/null +++ b/deps/base64/base64/lib/tables/table_enc_12bit.py @@ -0,0 +1,45 @@ +#!/usr/bin/python3 + +def tr(x): + """Translate a 6-bit value to the Base64 alphabet.""" + s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' \ + + 'abcdefghijklmnopqrstuvwxyz' \ + + '0123456789' \ + + '+/' + return ord(s[x]) + +def table(fn): + """Generate a 12-bit lookup table.""" + ret = [] + for n in range(0, 2**12): + pre = "\n\t" if n % 8 == 0 else " " + pre = "\t" if n == 0 else pre + ret.append("{}0x{:04X}U,".format(pre, fn(n))) + return "".join(ret) + +def table_be(): + """Generate a 12-bit big-endian lookup table.""" + return table(lambda n: (tr(n & 0x3F) << 0) | (tr(n >> 6) << 8)) + +def table_le(): + """Generate a 12-bit little-endian lookup table.""" + return table(lambda n: (tr(n >> 6) << 0) | (tr(n & 0x3F) << 8)) + +def main(): + """Entry point.""" + lines = [ + "#include ", + "", + "const uint16_t base64_table_enc_12bit[] = {", + "#if BASE64_LITTLE_ENDIAN", + table_le(), + "#else", + table_be(), + "#endif", + "};" + ] + for line in lines: + print(line) + +if __name__ == "__main__": + main() diff --git a/deps/base64/base64/lib/tables/table_generator.c b/deps/base64/base64/lib/tables/table_generator.c new file mode 100644 index 00000000000..64f239302bf --- /dev/null +++ b/deps/base64/base64/lib/tables/table_generator.c @@ -0,0 +1,184 @@ +/** + * + * Copyright 2005, 2006 Nick Galbreath -- nickg [at] modp [dot] com + * Copyright 2017 Matthieu Darbois + * All rights reserved. + * + * http://modp.com/release/base64 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/****************************/ + +#include +#include +#include +#include +#include + +static uint8_t b64chars[64] = { + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' +}; + +static uint8_t padchar = '='; + +static void printStart(void) +{ + printf("#include \n"); + printf("#define CHAR62 '%c'\n", b64chars[62]); + printf("#define CHAR63 '%c'\n", b64chars[63]); + printf("#define CHARPAD '%c'\n", padchar); +} + +static void clearDecodeTable(uint32_t* ary) +{ + int i = 0; + for (i = 0; i < 256; ++i) { + ary[i] = 0xFFFFFFFF; + } +} + +/* dump uint32_t as hex digits */ +void uint32_array_to_c_hex(const uint32_t* ary, size_t sz, const char* name) +{ + size_t i = 0; + + printf("const uint32_t %s[%d] = {\n", name, (int)sz); + for (;;) { + printf("0x%08" PRIx32, ary[i]); + ++i; + if (i == sz) + break; + if (i % 6 == 0) { + printf(",\n"); + } else { + printf(", "); + } + } + printf("\n};\n"); +} + +int main(int argc, char** argv) +{ + uint32_t x; + uint32_t i = 0; + uint32_t ary[256]; + + /* over-ride standard alphabet */ + if (argc == 2) { + uint8_t* replacements = (uint8_t*)argv[1]; + if (strlen((char*)replacements) != 3) { + fprintf(stderr, "input must be a string of 3 characters '-', '.' or '_'\n"); + exit(1); + } + fprintf(stderr, "fusing '%s' as replacements in base64 encoding\n", replacements); + b64chars[62] = replacements[0]; + b64chars[63] = replacements[1]; + padchar = replacements[2]; + } + + printStart(); + + printf("\n\n#if BASE64_LITTLE_ENDIAN\n"); + + printf("\n\n/* SPECIAL DECODE TABLES FOR LITTLE ENDIAN (INTEL) CPUS */\n\n"); + + clearDecodeTable(ary); + for (i = 0; i < 64; ++i) { + x = b64chars[i]; + ary[x] = i << 2; + } + uint32_array_to_c_hex(ary, sizeof(ary) / sizeof(uint32_t), "base64_table_dec_32bit_d0"); + printf("\n\n"); + + clearDecodeTable(ary); + for (i = 0; i < 64; ++i) { + x = b64chars[i]; + ary[x] = ((i & 0x30) >> 4) | ((i & 0x0F) << 12); + } + uint32_array_to_c_hex(ary, sizeof(ary) / sizeof(uint32_t), "base64_table_dec_32bit_d1"); + printf("\n\n"); + + clearDecodeTable(ary); + for (i = 0; i < 64; ++i) { + x = b64chars[i]; + ary[x] = ((i & 0x03) << 22) | ((i & 0x3c) << 6); + } + uint32_array_to_c_hex(ary, sizeof(ary) / sizeof(uint32_t), "base64_table_dec_32bit_d2"); + printf("\n\n"); + + clearDecodeTable(ary); + for (i = 0; i < 64; ++i) { + x = b64chars[i]; + ary[x] = i << 16; + } + uint32_array_to_c_hex(ary, sizeof(ary) / sizeof(uint32_t), "base64_table_dec_32bit_d3"); + printf("\n\n"); + + printf("#else\n"); + + printf("\n\n/* SPECIAL DECODE TABLES FOR BIG ENDIAN (IBM/MOTOROLA/SUN) CPUS */\n\n"); + + clearDecodeTable(ary); + for (i = 0; i < 64; ++i) { + x = b64chars[i]; + ary[x] = i << 26; + } + uint32_array_to_c_hex(ary, sizeof(ary) / sizeof(uint32_t), "base64_table_dec_32bit_d0"); + printf("\n\n"); + + clearDecodeTable(ary); + for (i = 0; i < 64; ++i) { + x = b64chars[i]; + ary[x] = i << 20; + } + uint32_array_to_c_hex(ary, sizeof(ary) / sizeof(uint32_t), "base64_table_dec_32bit_d1"); + printf("\n\n"); + + clearDecodeTable(ary); + for (i = 0; i < 64; ++i) { + x = b64chars[i]; + ary[x] = i << 14; + } + uint32_array_to_c_hex(ary, sizeof(ary) / sizeof(uint32_t), "base64_table_dec_32bit_d2"); + printf("\n\n"); + + clearDecodeTable(ary); + for (i = 0; i < 64; ++i) { + x = b64chars[i]; + ary[x] = i << 8; + } + uint32_array_to_c_hex(ary, sizeof(ary) / sizeof(uint32_t), "base64_table_dec_32bit_d3"); + printf("\n\n"); + + printf("#endif\n"); + + return 0; +} diff --git a/deps/base64/base64/lib/tables/tables.c b/deps/base64/base64/lib/tables/tables.c new file mode 100644 index 00000000000..45778b6befd --- /dev/null +++ b/deps/base64/base64/lib/tables/tables.c @@ -0,0 +1,40 @@ +#include "tables.h" + +const uint8_t +base64_table_enc_6bit[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+/"; + +// In the lookup table below, note that the value for '=' (character 61) is +// 254, not 255. This character is used for in-band signaling of the end of +// the datastream, and we will use that later. The characters A-Z, a-z, 0-9 +// and + / are mapped to their "decoded" values. The other bytes all map to +// the value 255, which flags them as "invalid input". + +const uint8_t +base64_table_dec_8bit[] = +{ + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, // 0..15 + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, // 16..31 + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, // 32..47 + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 254, 255, 255, // 48..63 + 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, // 64..79 + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, // 80..95 + 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // 96..111 + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 255, 255, 255, 255, 255, // 112..127 + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, // 128..143 + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +}; + +#if BASE64_WORDSIZE >= 32 +# include "table_dec_32bit.h" +# include "table_enc_12bit.h" +#endif diff --git a/deps/base64/base64/lib/tables/tables.h b/deps/base64/base64/lib/tables/tables.h new file mode 100644 index 00000000000..cb74268a4bf --- /dev/null +++ b/deps/base64/base64/lib/tables/tables.h @@ -0,0 +1,23 @@ +#ifndef BASE64_TABLES_H +#define BASE64_TABLES_H + +#include + +#include "../env.h" + +// These tables are used by all codecs for fallback plain encoding/decoding: +extern const uint8_t base64_table_enc_6bit[]; +extern const uint8_t base64_table_dec_8bit[]; + +// These tables are used for the 32-bit and 64-bit generic decoders: +#if BASE64_WORDSIZE >= 32 +extern const uint32_t base64_table_dec_32bit_d0[]; +extern const uint32_t base64_table_dec_32bit_d1[]; +extern const uint32_t base64_table_dec_32bit_d2[]; +extern const uint32_t base64_table_dec_32bit_d3[]; + +// This table is used by the 32 and 64-bit generic encoders: +extern const uint16_t base64_table_enc_12bit[]; +#endif + +#endif // BASE64_TABLES_H diff --git a/deps/base64/base64/test/CMakeLists.txt b/deps/base64/base64/test/CMakeLists.txt new file mode 100644 index 00000000000..ef8787047b2 --- /dev/null +++ b/deps/base64/base64/test/CMakeLists.txt @@ -0,0 +1,45 @@ +# Written in 2016 by Henrik Steffen Gaßmann henrik@gassmann.onl +# +# To the extent possible under law, the author(s) have dedicated all +# copyright and related and neighboring rights to this software to the +# public domain worldwide. This software is distributed without any warranty. +# +# You should have received a copy of the CC0 Public Domain Dedication +# along with this software. If not, see +# +# http://creativecommons.org/publicdomain/zero/1.0/ +# +######################################################################## + +function(add_base64_test TEST_NAME) + unset(SRC_FILE) + foreach(SRC_FILE ${ARGN}) + list(APPEND SRC_FILES "${SRC_FILE}") + endforeach() + + add_executable(${TEST_NAME} ${SRC_FILES}) + target_link_libraries(${TEST_NAME} PRIVATE base64) + + add_test(NAME ${TEST_NAME} + COMMAND ${TEST_NAME} + ) + install(TARGETS ${TEST_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) +endfunction() + + +add_base64_test(test_base64 + codec_supported.c + test_base64.c +) + +if (NOT WIN32) + add_base64_test(benchmark + codec_supported.c + benchmark.c + ) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + target_link_libraries(benchmark PRIVATE rt) +endif() + diff --git a/deps/base64/base64/test/Makefile b/deps/base64/base64/test/Makefile new file mode 100644 index 00000000000..d1045824195 --- /dev/null +++ b/deps/base64/base64/test/Makefile @@ -0,0 +1,33 @@ +CFLAGS += -std=c99 -O3 -Wall -Wextra -pedantic +ifdef OPENMP + CFLAGS += -fopenmp +endif + +TARGET := $(shell $(CC) -dumpmachine) +ifneq (, $(findstring darwin, $(TARGET))) + BENCH_LDFLAGS= +else + # default to linux, -lrt needed + BENCH_LDFLAGS=-lrt +endif + +.PHONY: clean test + +test: clean test_base64 benchmark + ./test_base64 + ./benchmark + +test_base64: test_base64.c codec_supported.o ../lib/libbase64.o + $(CC) $(CFLAGS) -o $@ $^ + +benchmark: benchmark.c codec_supported.o ../lib/libbase64.o + $(CC) $(CFLAGS) -o $@ $^ $(BENCH_LDFLAGS) + +../%: + make -C .. $* + +%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< + +clean: + rm -f benchmark test_base64 *.o diff --git a/deps/base64/base64/test/benchmark.c b/deps/base64/base64/test/benchmark.c new file mode 100644 index 00000000000..80d21a389cb --- /dev/null +++ b/deps/base64/base64/test/benchmark.c @@ -0,0 +1,233 @@ +// For clock_gettime(2): +#ifndef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 199309L +#endif + +// For CLOCK_REALTIME on FreeBSD: +#ifndef _XOPEN_SOURCE +#define _XOPEN_SOURCE 600 +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __MACH__ +#include +#endif + +#include "../include/libbase64.h" +#include "codec_supported.h" + +#define KB 1024 +#define MB (1024 * KB) + +#define RANDOMDEV "/dev/urandom" + +struct buffers { + char *reg; + char *enc; + size_t regsz; + size_t encsz; +}; + +// Define buffer sizes to test with: +static struct bufsize { + char *label; + size_t len; + int repeat; + int batch; +} +sizes[] = { + { "10 MB", MB * 10, 10, 1 }, + { "1 MB", MB * 1, 10, 10 }, + { "100 KB", KB * 100, 10, 100 }, + { "10 KB", KB * 10, 100, 100 }, + { "1 KB", KB * 1, 100, 1000 }, +}; + +static inline float +bytes_to_mb (size_t bytes) +{ + return bytes / (float) MB; +} + +static bool +get_random_data (struct buffers *b, char **errmsg) +{ + int fd; + ssize_t nread; + size_t total_read = 0; + + // Open random device for semi-random data: + if ((fd = open(RANDOMDEV, O_RDONLY)) < 0) { + *errmsg = "Cannot open " RANDOMDEV; + return false; + } + + printf("Filling buffer with %.1f MB of random data...\n", bytes_to_mb(b->regsz)); + + while (total_read < b->regsz) { + if ((nread = read(fd, b->reg + total_read, b->regsz - total_read)) < 0) { + *errmsg = "Read error"; + close(fd); + return false; + } + total_read += nread; + } + close(fd); + return true; +} + +#ifdef __MACH__ +typedef uint64_t base64_timespec; +static void +base64_gettime (base64_timespec * o_time) +{ + *o_time = mach_absolute_time(); +} + +static float +timediff_sec (base64_timespec *start, base64_timespec *end) +{ + uint64_t diff = *end - *start; + mach_timebase_info_data_t tb = { 0, 0 }; + mach_timebase_info(&tb); + + return (float)((diff * tb.numer) / tb.denom) / 1e9f; +} +#else +typedef struct timespec base64_timespec; +static void +base64_gettime (base64_timespec * o_time) +{ + clock_gettime(CLOCK_REALTIME, o_time); +} + +static float +timediff_sec (base64_timespec *start, base64_timespec *end) +{ + return (end->tv_sec - start->tv_sec) + ((float)(end->tv_nsec - start->tv_nsec)) / 1e9f; +} +#endif + +static void +codec_bench_enc (struct buffers *b, const struct bufsize *bs, const char *name, unsigned int flags) +{ + float timediff, fastest = -1.0f; + base64_timespec start, end; + + // Reset buffer size: + b->regsz = bs->len; + + // Repeat benchmark a number of times for a fair test: + for (int i = bs->repeat; i; i--) { + + // Timing loop, use batches to increase timer resolution: + base64_gettime(&start); + for (int j = bs->batch; j; j--) + base64_encode(b->reg, b->regsz, b->enc, &b->encsz, flags); + base64_gettime(&end); + + // Calculate average time of batch: + timediff = timediff_sec(&start, &end) / bs->batch; + + // Update fastest time seen: + if (fastest < 0.0f || timediff < fastest) + fastest = timediff; + } + + printf("%s\tencode\t%.02f MB/sec\n", name, bytes_to_mb(b->regsz) / fastest); +} + +static void +codec_bench_dec (struct buffers *b, const struct bufsize *bs, const char *name, unsigned int flags) +{ + float timediff, fastest = -1.0f; + base64_timespec start, end; + + // Reset buffer size: + b->encsz = bs->len; + + // Repeat benchmark a number of times for a fair test: + for (int i = bs->repeat; i; i--) { + + // Timing loop, use batches to increase timer resolution: + base64_gettime(&start); + for (int j = bs->batch; j; j--) + base64_decode(b->enc, b->encsz, b->reg, &b->regsz, flags); + base64_gettime(&end); + + // Calculate average time of batch: + timediff = timediff_sec(&start, &end) / bs->batch; + + // Update fastest time seen: + if (fastest < 0.0f || timediff < fastest) + fastest = timediff; + } + + printf("%s\tdecode\t%.02f MB/sec\n", name, bytes_to_mb(b->encsz) / fastest); +} + +static void +codec_bench (struct buffers *b, const struct bufsize *bs, const char *name, unsigned int flags) +{ + codec_bench_enc(b, bs, name, flags); + codec_bench_dec(b, bs, name, flags); +} + +int +main () +{ + int ret = 0; + char *errmsg = NULL; + struct buffers b; + + // Set buffer sizes to largest buffer length: + b.regsz = sizes[0].len; + b.encsz = sizes[0].len * 5 / 3; + + // Allocate space for megabytes of random data: + if ((b.reg = malloc(b.regsz)) == NULL) { + errmsg = "Out of memory"; + ret = 1; + goto err0; + } + + // Allocate space for encoded output: + if ((b.enc = malloc(b.encsz)) == NULL) { + errmsg = "Out of memory"; + ret = 1; + goto err1; + } + + // Fill buffer with random data: + if (get_random_data(&b, &errmsg) == false) { + ret = 1; + goto err2; + } + + // Loop over all buffer sizes: + for (size_t i = 0; i < sizeof(sizes) / sizeof(sizes[0]); i++) { + printf("Testing with buffer size %s, fastest of %d * %d\n", + sizes[i].label, sizes[i].repeat, sizes[i].batch); + + // Loop over all codecs: + for (size_t j = 0; codecs[j]; j++) + if (codec_supported(1 << j)) + codec_bench(&b, &sizes[i], codecs[j], 1 << j); + }; + + // Free memory: +err2: free(b.enc); +err1: free(b.reg); +err0: if (errmsg) + fputs(errmsg, stderr); + + return ret; +} diff --git a/deps/base64/base64/test/ci/test.sh b/deps/base64/base64/test/ci/test.sh new file mode 100755 index 00000000000..066a49f400b --- /dev/null +++ b/deps/base64/base64/test/ci/test.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -ve + +MACHINE=$(uname -m) +if [ "${MACHINE}" == "x86_64" ]; then + export SSSE3_CFLAGS=-mssse3 + export SSE41_CFLAGS=-msse4.1 + export SSE42_CFLAGS=-msse4.2 + export AVX_CFLAGS=-mavx + # no AVX2 on GHA macOS + if [ "$(uname -s)" != "Darwin" ]; then + export AVX2_CFLAGS=-mavx2 + fi +elif [ "${MACHINE}" == "aarch64" ]; then + export NEON64_CFLAGS="-march=armv8-a" +elif [ "${MACHINE}" == "armv7l" ]; then + export NEON32_CFLAGS="-march=armv7-a -mfloat-abi=hard -mfpu=neon" +fi + +if [ "${OPENMP:-}" == "0" ]; then + unset OPENMP +fi + +uname -a +${CC} --version + +make +make -C test diff --git a/deps/base64/base64/test/codec_supported.c b/deps/base64/base64/test/codec_supported.c new file mode 100644 index 00000000000..a027b9943bf --- /dev/null +++ b/deps/base64/base64/test/codec_supported.c @@ -0,0 +1,28 @@ +#include + +#include "../include/libbase64.h" + +static char *_codecs[] = +{ "AVX2" +, "NEON32" +, "NEON64" +, "plain" +, "SSSE3" +, "SSE41" +, "SSE42" +, "AVX" +, NULL +} ; + +char **codecs = _codecs; + +int +codec_supported (int flags) +{ + // Check if given codec is supported by trying to decode a test string: + char *a = "aGVsbG8="; + char b[10]; + size_t outlen; + + return (base64_decode(a, strlen(a), b, &outlen, flags) != -1); +} diff --git a/deps/base64/base64/test/codec_supported.h b/deps/base64/base64/test/codec_supported.h new file mode 100644 index 00000000000..18baec08154 --- /dev/null +++ b/deps/base64/base64/test/codec_supported.h @@ -0,0 +1,3 @@ +extern char **codecs; + +int codec_supported (int flags); diff --git a/deps/base64/base64/test/moby_dick.h b/deps/base64/base64/test/moby_dick.h new file mode 100644 index 00000000000..19705355897 --- /dev/null +++ b/deps/base64/base64/test/moby_dick.h @@ -0,0 +1,41 @@ +static const char *moby_dick_plain = + "Call me Ishmael. Some years ago--never mind how long precisely--having\n" + "little or no money in my purse, and nothing particular to interest me on\n" + "shore, I thought I would sail about a little and see the watery part of\n" + "the world. It is a way I have of driving off the spleen and regulating\n" + "the circulation. Whenever I find myself growing grim about the mouth;\n" + "whenever it is a damp, drizzly November in my soul; whenever I find\n" + "myself involuntarily pausing before coffin warehouses, and bringing up\n" + "the rear of every funeral I meet; and especially whenever my hypos get\n" + "such an upper hand of me, that it requires a strong moral principle to\n" + "prevent me from deliberately stepping into the street, and methodically\n" + "knocking people's hats off--then, I account it high time to get to sea\n" + "as soon as I can. This is my substitute for pistol and ball. With a\n" + "philosophical flourish Cato throws himself upon his sword; I quietly\n" + "take to the ship. There is nothing surprising in this. If they but knew\n" + "it, almost all men in their degree, some time or other, cherish very\n" + "nearly the same feelings towards the ocean with me.\n"; + +static const char *moby_dick_base64 = + "Q2FsbCBtZSBJc2htYWVsLiBTb21lIHllYXJzIGFnby0tbmV2ZXIgbWluZCBob3cgbG9uZ" + "yBwcmVjaXNlbHktLWhhdmluZwpsaXR0bGUgb3Igbm8gbW9uZXkgaW4gbXkgcHVyc2UsIG" + "FuZCBub3RoaW5nIHBhcnRpY3VsYXIgdG8gaW50ZXJlc3QgbWUgb24Kc2hvcmUsIEkgdGh" + "vdWdodCBJIHdvdWxkIHNhaWwgYWJvdXQgYSBsaXR0bGUgYW5kIHNlZSB0aGUgd2F0ZXJ5" + "IHBhcnQgb2YKdGhlIHdvcmxkLiBJdCBpcyBhIHdheSBJIGhhdmUgb2YgZHJpdmluZyBvZ" + "mYgdGhlIHNwbGVlbiBhbmQgcmVndWxhdGluZwp0aGUgY2lyY3VsYXRpb24uIFdoZW5ldm" + "VyIEkgZmluZCBteXNlbGYgZ3Jvd2luZyBncmltIGFib3V0IHRoZSBtb3V0aDsKd2hlbmV" + "2ZXIgaXQgaXMgYSBkYW1wLCBkcml6emx5IE5vdmVtYmVyIGluIG15IHNvdWw7IHdoZW5l" + "dmVyIEkgZmluZApteXNlbGYgaW52b2x1bnRhcmlseSBwYXVzaW5nIGJlZm9yZSBjb2Zma" + "W4gd2FyZWhvdXNlcywgYW5kIGJyaW5naW5nIHVwCnRoZSByZWFyIG9mIGV2ZXJ5IGZ1bm" + "VyYWwgSSBtZWV0OyBhbmQgZXNwZWNpYWxseSB3aGVuZXZlciBteSBoeXBvcyBnZXQKc3V" + "jaCBhbiB1cHBlciBoYW5kIG9mIG1lLCB0aGF0IGl0IHJlcXVpcmVzIGEgc3Ryb25nIG1v" + "cmFsIHByaW5jaXBsZSB0bwpwcmV2ZW50IG1lIGZyb20gZGVsaWJlcmF0ZWx5IHN0ZXBwa" + "W5nIGludG8gdGhlIHN0cmVldCwgYW5kIG1ldGhvZGljYWxseQprbm9ja2luZyBwZW9wbG" + "UncyBoYXRzIG9mZi0tdGhlbiwgSSBhY2NvdW50IGl0IGhpZ2ggdGltZSB0byBnZXQgdG8" + "gc2VhCmFzIHNvb24gYXMgSSBjYW4uIFRoaXMgaXMgbXkgc3Vic3RpdHV0ZSBmb3IgcGlz" + "dG9sIGFuZCBiYWxsLiBXaXRoIGEKcGhpbG9zb3BoaWNhbCBmbG91cmlzaCBDYXRvIHRoc" + "m93cyBoaW1zZWxmIHVwb24gaGlzIHN3b3JkOyBJIHF1aWV0bHkKdGFrZSB0byB0aGUgc2" + "hpcC4gVGhlcmUgaXMgbm90aGluZyBzdXJwcmlzaW5nIGluIHRoaXMuIElmIHRoZXkgYnV" + "0IGtuZXcKaXQsIGFsbW9zdCBhbGwgbWVuIGluIHRoZWlyIGRlZ3JlZSwgc29tZSB0aW1l" + "IG9yIG90aGVyLCBjaGVyaXNoIHZlcnkKbmVhcmx5IHRoZSBzYW1lIGZlZWxpbmdzIHRvd" + "2FyZHMgdGhlIG9jZWFuIHdpdGggbWUuCg=="; diff --git a/deps/base64/base64/test/moby_dick_base64.txt b/deps/base64/base64/test/moby_dick_base64.txt new file mode 100644 index 00000000000..3083dcfbcb3 --- /dev/null +++ b/deps/base64/base64/test/moby_dick_base64.txt @@ -0,0 +1 @@ +Q2FsbCBtZSBJc2htYWVsLiBTb21lIHllYXJzIGFnby0tbmV2ZXIgbWluZCBob3cgbG9uZyBwcmVjaXNlbHktLWhhdmluZwpsaXR0bGUgb3Igbm8gbW9uZXkgaW4gbXkgcHVyc2UsIGFuZCBub3RoaW5nIHBhcnRpY3VsYXIgdG8gaW50ZXJlc3QgbWUgb24Kc2hvcmUsIEkgdGhvdWdodCBJIHdvdWxkIHNhaWwgYWJvdXQgYSBsaXR0bGUgYW5kIHNlZSB0aGUgd2F0ZXJ5IHBhcnQgb2YKdGhlIHdvcmxkLiBJdCBpcyBhIHdheSBJIGhhdmUgb2YgZHJpdmluZyBvZmYgdGhlIHNwbGVlbiBhbmQgcmVndWxhdGluZwp0aGUgY2lyY3VsYXRpb24uIFdoZW5ldmVyIEkgZmluZCBteXNlbGYgZ3Jvd2luZyBncmltIGFib3V0IHRoZSBtb3V0aDsKd2hlbmV2ZXIgaXQgaXMgYSBkYW1wLCBkcml6emx5IE5vdmVtYmVyIGluIG15IHNvdWw7IHdoZW5ldmVyIEkgZmluZApteXNlbGYgaW52b2x1bnRhcmlseSBwYXVzaW5nIGJlZm9yZSBjb2ZmaW4gd2FyZWhvdXNlcywgYW5kIGJyaW5naW5nIHVwCnRoZSByZWFyIG9mIGV2ZXJ5IGZ1bmVyYWwgSSBtZWV0OyBhbmQgZXNwZWNpYWxseSB3aGVuZXZlciBteSBoeXBvcyBnZXQKc3VjaCBhbiB1cHBlciBoYW5kIG9mIG1lLCB0aGF0IGl0IHJlcXVpcmVzIGEgc3Ryb25nIG1vcmFsIHByaW5jaXBsZSB0bwpwcmV2ZW50IG1lIGZyb20gZGVsaWJlcmF0ZWx5IHN0ZXBwaW5nIGludG8gdGhlIHN0cmVldCwgYW5kIG1ldGhvZGljYWxseQprbm9ja2luZyBwZW9wbGUncyBoYXRzIG9mZi0tdGhlbiwgSSBhY2NvdW50IGl0IGhpZ2ggdGltZSB0byBnZXQgdG8gc2VhCmFzIHNvb24gYXMgSSBjYW4uIFRoaXMgaXMgbXkgc3Vic3RpdHV0ZSBmb3IgcGlzdG9sIGFuZCBiYWxsLiBXaXRoIGEKcGhpbG9zb3BoaWNhbCBmbG91cmlzaCBDYXRvIHRocm93cyBoaW1zZWxmIHVwb24gaGlzIHN3b3JkOyBJIHF1aWV0bHkKdGFrZSB0byB0aGUgc2hpcC4gVGhlcmUgaXMgbm90aGluZyBzdXJwcmlzaW5nIGluIHRoaXMuIElmIHRoZXkgYnV0IGtuZXcKaXQsIGFsbW9zdCBhbGwgbWVuIGluIHRoZWlyIGRlZ3JlZSwgc29tZSB0aW1lIG9yIG90aGVyLCBjaGVyaXNoIHZlcnkKbmVhcmx5IHRoZSBzYW1lIGZlZWxpbmdzIHRvd2FyZHMgdGhlIG9jZWFuIHdpdGggbWUuCg== \ No newline at end of file diff --git a/deps/base64/base64/test/moby_dick_plain.txt b/deps/base64/base64/test/moby_dick_plain.txt new file mode 100644 index 00000000000..425d1ed02c8 --- /dev/null +++ b/deps/base64/base64/test/moby_dick_plain.txt @@ -0,0 +1,16 @@ +Call me Ishmael. Some years ago--never mind how long precisely--having +little or no money in my purse, and nothing particular to interest me on +shore, I thought I would sail about a little and see the watery part of +the world. It is a way I have of driving off the spleen and regulating +the circulation. Whenever I find myself growing grim about the mouth; +whenever it is a damp, drizzly November in my soul; whenever I find +myself involuntarily pausing before coffin warehouses, and bringing up +the rear of every funeral I meet; and especially whenever my hypos get +such an upper hand of me, that it requires a strong moral principle to +prevent me from deliberately stepping into the street, and methodically +knocking people's hats off--then, I account it high time to get to sea +as soon as I can. This is my substitute for pistol and ball. With a +philosophical flourish Cato throws himself upon his sword; I quietly +take to the ship. There is nothing surprising in this. If they but knew +it, almost all men in their degree, some time or other, cherish very +nearly the same feelings towards the ocean with me. diff --git a/deps/base64/base64/test/test_base64.c b/deps/base64/base64/test/test_base64.c new file mode 100644 index 00000000000..bec52d146c8 --- /dev/null +++ b/deps/base64/base64/test/test_base64.c @@ -0,0 +1,365 @@ +#include +#include +#include +#include "../include/libbase64.h" +#include "codec_supported.h" +#include "moby_dick.h" + +static char out[2000]; +static size_t outlen; + +static bool +assert_enc (int flags, const char *src, const char *dst) +{ + size_t srclen = strlen(src); + size_t dstlen = strlen(dst); + + base64_encode(src, srclen, out, &outlen, flags); + + if (outlen != dstlen) { + printf("FAIL: encoding of '%s': length expected %lu, got %lu\n", src, + (unsigned long)dstlen, + (unsigned long)outlen + ); + return true; + } + if (strncmp(dst, out, outlen) != 0) { + out[outlen] = '\0'; + printf("FAIL: encoding of '%s': expected output '%s', got '%s'\n", src, dst, out); + return true; + } + return false; +} + +static bool +assert_dec (int flags, const char *src, const char *dst) +{ + size_t srclen = strlen(src); + size_t dstlen = strlen(dst); + + if (!base64_decode(src, srclen, out, &outlen, flags)) { + printf("FAIL: decoding of '%s': decoding error\n", src); + return true; + } + if (outlen != dstlen) { + printf("FAIL: encoding of '%s': " + "length expected %lu, got %lu\n", src, + (unsigned long)dstlen, + (unsigned long)outlen + ); + return true; + } + if (strncmp(dst, out, outlen) != 0) { + out[outlen] = '\0'; + printf("FAIL: decoding of '%s': expected output '%s', got '%s'\n", src, dst, out); + return true; + } + return false; +} + +static int +assert_roundtrip (int flags, const char *src) +{ + char tmp[1500]; + size_t tmplen; + size_t srclen = strlen(src); + + // Encode the input into global buffer: + base64_encode(src, srclen, out, &outlen, flags); + + // Decode the global buffer into local temp buffer: + if (!base64_decode(out, outlen, tmp, &tmplen, flags)) { + printf("FAIL: decoding of '%s': decoding error\n", out); + return true; + } + + // Check that 'src' is identical to 'tmp': + if (srclen != tmplen) { + printf("FAIL: roundtrip of '%s': " + "length expected %lu, got %lu\n", src, + (unsigned long)srclen, + (unsigned long)tmplen + ); + return true; + } + if (strncmp(src, tmp, tmplen) != 0) { + tmp[tmplen] = '\0'; + printf("FAIL: roundtrip of '%s': got '%s'\n", src, tmp); + return true; + } + + return false; +} + +static int +test_char_table (int flags) +{ + bool fail = false; + char chr[256]; + char enc[400], dec[400]; + size_t enclen, declen; + + // Fill array with all characters 0..255: + for (int i = 0; i < 256; i++) + chr[i] = (unsigned char)i; + + // Loop, using each char as a starting position to increase test coverage: + for (int i = 0; i < 256; i++) { + + size_t chrlen = 256 - i; + + base64_encode(&chr[i], chrlen, enc, &enclen, BASE64_FORCE_PLAIN); + + if (!base64_decode(enc, enclen, dec, &declen, flags)) { + printf("FAIL: decoding @ %d: decoding error\n", i); + fail = true; + continue; + } + if (declen != chrlen) { + printf("FAIL: roundtrip @ %d: " + "length expected %lu, got %lu\n", i, + (unsigned long)chrlen, + (unsigned long)declen + ); + fail = true; + continue; + } + if (strncmp(&chr[i], dec, declen) != 0) { + printf("FAIL: roundtrip @ %d: decoded output not same as input\n", i); + fail = true; + } + } + + return fail; +} + +static int +test_streaming (int flags) +{ + bool fail = false; + char chr[256]; + char ref[400], enc[400]; + size_t reflen; + struct base64_state state; + + // Fill array with all characters 0..255: + for (int i = 0; i < 256; i++) + chr[i] = (unsigned char)i; + + // Create reference base64 encoding: + base64_encode(chr, 256, ref, &reflen, BASE64_FORCE_PLAIN); + + // Encode the table with various block sizes and compare to reference: + for (size_t bs = 1; bs < 255; bs++) + { + size_t inpos = 0; + size_t partlen = 0; + size_t enclen = 0; + + base64_stream_encode_init(&state, flags); + memset(enc, 0, 400); + for (;;) { + base64_stream_encode(&state, &chr[inpos], (inpos + bs > 256) ? 256 - inpos : bs, &enc[enclen], &partlen); + enclen += partlen; + if (inpos + bs > 256) { + break; + } + inpos += bs; + } + base64_stream_encode_final(&state, &enc[enclen], &partlen); + enclen += partlen; + + if (enclen != reflen) { + printf("FAIL: stream encoding gave incorrect size: " + "%lu instead of %lu\n", + (unsigned long)enclen, + (unsigned long)reflen + ); + fail = true; + } + if (strncmp(ref, enc, reflen) != 0) { + printf("FAIL: stream encoding with blocksize %lu failed\n", + (unsigned long)bs + ); + fail = true; + } + } + + // Decode the reference encoding with various block sizes and + // compare to input char table: + for (size_t bs = 1; bs < 255; bs++) + { + size_t inpos = 0; + size_t partlen = 0; + size_t enclen = 0; + + base64_stream_decode_init(&state, flags); + memset(enc, 0, 400); + while (base64_stream_decode(&state, &ref[inpos], (inpos + bs > reflen) ? reflen - inpos : bs, &enc[enclen], &partlen)) { + enclen += partlen; + inpos += bs; + } + if (enclen != 256) { + printf("FAIL: stream decoding gave incorrect size: " + "%lu instead of 255\n", + (unsigned long)enclen + ); + fail = true; + } + if (strncmp(chr, enc, 256) != 0) { + printf("FAIL: stream decoding with blocksize %lu failed\n", + (unsigned long)bs + ); + fail = true; + } + } + + return fail; +} + +static int +test_invalid_dec_input (int flags) +{ + // Subset of invalid characters to cover all ranges + static const char invalid_set[] = { '\0', -1, '!', '-', ';', '_', '|' }; + static const char* invalid_strings[] = { + "Zm9vYg=", + "Zm9vYg", + "Zm9vY", + "Zm9vYmF=Zm9v" + }; + + bool fail = false; + char chr[256]; + char enc[400], dec[400]; + size_t enclen, declen; + + // Fill array with all characters 0..255: + for (int i = 0; i < 256; i++) + chr[i] = (unsigned char)i; + + // Create reference base64 encoding: + base64_encode(chr, 256, enc, &enclen, BASE64_FORCE_PLAIN); + + // Test invalid strings returns error. + for (size_t i = 0U; i < sizeof(invalid_strings) / sizeof(invalid_strings[0]); ++i) { + if (base64_decode(invalid_strings[i], strlen(invalid_strings[i]), dec, &declen, flags)) { + printf("FAIL: decoding invalid input \"%s\": no decoding error\n", invalid_strings[i]); + fail = true; + } + } + + // Loop, corrupting each char to increase test coverage: + for (size_t c = 0U; c < sizeof(invalid_set); ++c) { + for (size_t i = 0U; i < enclen; i++) { + char backup = enc[i]; + + enc[i] = invalid_set[c]; + + if (base64_decode(enc, enclen, dec, &declen, flags)) { + printf("FAIL: decoding invalid input @ %d: no decoding error\n", (int)i); + fail = true; + enc[i] = backup; + continue; + } + enc[i] = backup; + } + } + + // Loop, corrupting two chars to increase test coverage: + for (size_t c = 0U; c < sizeof(invalid_set); ++c) { + for (size_t i = 0U; i < enclen - 2U; i++) { + char backup = enc[i+0]; + char backup2 = enc[i+2]; + + enc[i+0] = invalid_set[c]; + enc[i+2] = invalid_set[c]; + + if (base64_decode(enc, enclen, dec, &declen, flags)) { + printf("FAIL: decoding invalid input @ %d: no decoding error\n", (int)i); + fail = true; + enc[i+0] = backup; + enc[i+2] = backup2; + continue; + } + enc[i+0] = backup; + enc[i+2] = backup2; + } + } + + return fail; +} + +static int +test_one_codec (const char *codec, int flags) +{ + bool fail = false; + + printf("Codec %s:\n", codec); + + // Skip if this codec is not supported: + if (!codec_supported(flags)) { + puts(" skipping"); + return false; + } + + // Test vectors: + struct { + const char *in; + const char *out; + } vec[] = { + + // These are the test vectors from RFC4648: + { "", "" }, + { "f", "Zg==" }, + { "fo", "Zm8=" }, + { "foo", "Zm9v" }, + { "foob", "Zm9vYg==" }, + { "fooba", "Zm9vYmE=" }, + { "foobar", "Zm9vYmFy" }, + + // The first paragraph from Moby Dick, + // to test the SIMD codecs with larger blocksize: + { moby_dick_plain, moby_dick_base64 }, + }; + + for (size_t i = 0; i < sizeof(vec) / sizeof(vec[0]); i++) { + + // Encode plain string, check against output: + fail |= assert_enc(flags, vec[i].in, vec[i].out); + + // Decode the output string, check if we get the input: + fail |= assert_dec(flags, vec[i].out, vec[i].in); + + // Do a roundtrip on the inputs and the outputs: + fail |= assert_roundtrip(flags, vec[i].in); + fail |= assert_roundtrip(flags, vec[i].out); + } + + fail |= test_char_table(flags); + fail |= test_streaming(flags); + fail |= test_invalid_dec_input(flags); + + if (!fail) + puts(" all tests passed."); + + return fail; +} + +int +main () +{ + bool fail = false; + + // Loop over all codecs: + for (size_t i = 0; codecs[i]; i++) { + + // Flags to invoke this codec: + int codec_flags = (1 << i); + + // Test this codec, merge the results: + fail |= test_one_codec(codecs[i], codec_flags); + } + + return (fail) ? 1 : 0; +} diff --git a/deps/cares/cares.gyp b/deps/cares/cares.gyp index 88933e00745..74f0e78e069 100644 --- a/deps/cares/cares.gyp +++ b/deps/cares/cares.gyp @@ -157,7 +157,7 @@ 'include_dirs': [ 'config/linux' ], 'sources': [ 'config/linux/ares_config.h' ] }], - [ 'OS=="mac"', { + [ 'OS=="mac" or OS=="ios"', { 'include_dirs': [ 'config/darwin' ], 'sources': [ 'config/darwin/ares_config.h' ] }], diff --git a/deps/corepack/CHANGELOG.md b/deps/corepack/CHANGELOG.md new file mode 100644 index 00000000000..b66e53f806d --- /dev/null +++ b/deps/corepack/CHANGELOG.md @@ -0,0 +1,130 @@ +# Changelog + +## [0.15.1](https://github.com/nodejs/corepack/compare/v0.15.0...v0.15.1) (2022-11-04) + + +### Features + +* update package manager versions ([#205](https://github.com/nodejs/corepack/issues/205)) ([5bfac11](https://github.com/nodejs/corepack/commit/5bfac11715474a4318c67fc806fd1ff4252c683a)) + +## [0.15.0](https://github.com/nodejs/corepack/compare/v0.14.2...v0.15.0) (2022-10-28) + + +### Features + +* add support for configurable registries and applicable auth options ([#186](https://github.com/nodejs/corepack/issues/186)) ([662ae90](https://github.com/nodejs/corepack/commit/662ae9057c7360cb05e9476914e611a9bf0074db)) +* update package manager versions ([#193](https://github.com/nodejs/corepack/issues/193)) ([0ec3a73](https://github.com/nodejs/corepack/commit/0ec3a7384729c5cf4ac566d91f1a4bb74e08a64f)) +* when strict checking is off, treat like transparent ([#197](https://github.com/nodejs/corepack/issues/197)) ([5eadc50](https://github.com/nodejs/corepack/commit/5eadc50192e205c60bfb1cad91854e9014a747b8)) + + +### Bug Fixes + +* **doc:** add package configuration instruction to readme ([#188](https://github.com/nodejs/corepack/issues/188)) ([0b7abb9](https://github.com/nodejs/corepack/commit/0b7abb9833d332bad97902260d31652482c274a0)) +* recreate cache folder if necessary ([#200](https://github.com/nodejs/corepack/issues/200)) ([7b5f2f9](https://github.com/nodejs/corepack/commit/7b5f2f9fcb24fe3fe517a96deaac7f32854f3124)) + +## [0.14.2](https://github.com/nodejs/corepack/compare/v0.14.1...v0.14.2) (2022-09-24) + +### Features + +* update package manager versions ([#184](https://github.com/nodejs/corepack/issues/184)) ([84ae313](https://github.com/nodejs/corepack/commit/84ae3139e4b9a86d97465e36b50beb9201fda732)) + +## [0.14.1](https://github.com/nodejs/corepack/compare/v0.14.0...v0.14.1) (2022-09-16) + + +### Features + +* update package manager versions ([#179](https://github.com/nodejs/corepack/issues/179)) ([0b88dcb](https://github.com/nodejs/corepack/commit/0b88dcbaaf190117c6f407b6632a4b3b10da8ad9)) + +## [0.14.0](https://github.com/nodejs/corepack/compare/v0.13.0...v0.14.0) (2022-09-02) + + +### Features + +* add `COREPACK_ENABLE_STRICT` env variable ([#167](https://github.com/nodejs/corepack/issues/167)) ([92b52f6](https://github.com/nodejs/corepack/commit/92b52f6b4918aff968c0942b89fc722ebf57bce2)) +* update package manager versions ([#170](https://github.com/nodejs/corepack/issues/170)) ([6f70bfc](https://github.com/nodejs/corepack/commit/6f70bfc4b6a8a57cccb1ff9cbf2f49240648f1ed)) + + +### Bug Fixes + +* handle tags including numbers in `prepare` command ([#165](https://github.com/nodejs/corepack/issues/165)) ([5a0727b](https://github.com/nodejs/corepack/commit/5a0727b43976e0dc299151876c0dde2c4a85174d)) + +## [0.13.0](https://github.com/nodejs/corepack/compare/v0.12.3...v0.13.0) (2022-08-19) + + +### Features + +* do not use `~/.node` as default value for `COREPACK_HOME` ([#152](https://github.com/nodejs/corepack/issues/152)) ([09e24cf](https://github.com/nodejs/corepack/commit/09e24cf497de27fe92668cf0a8e555f2c7e2530d)) +* download the latest version instead of a pinned one ([#134](https://github.com/nodejs/corepack/issues/134)) ([055b928](https://github.com/nodejs/corepack/commit/055b92807f711b5c8c8be6e62b8d3ce83e1ff002)) +* update package manager versions ([#163](https://github.com/nodejs/corepack/issues/163)) ([af38d5a](https://github.com/nodejs/corepack/commit/af38d5afbbc10d61265b2f4687c5cc498b059b41)) + +## [0.12.3](https://github.com/nodejs/corepack/compare/v0.12.2...v0.12.3) (2022-08-12) + + +### Features + +* update package manager versions ([#160](https://github.com/nodejs/corepack/issues/160)) ([ad092a7](https://github.com/nodejs/corepack/commit/ad092a7fb4296143fa5224c04dbd628451b3c158)) + +## [0.12.2](https://github.com/nodejs/corepack/compare/v0.12.1...v0.12.2) (2022-08-05) + +### Features + +* update package manager versions ([#154](https://github.com/nodejs/corepack/issues/154)) ([4b95fd3](https://github.com/nodejs/corepack/commit/4b95fd3b926659855970a887c893c10db0b98e5d)) + +## [0.12.1](https://github.com/nodejs/corepack/compare/v0.12.0...v0.12.1) (2022-07-21) + + +### Bug Fixes + +* **doc:** update DESIGN.md s/engines.pm/packageManager/ ([#141](https://github.com/nodejs/corepack/issues/141)) ([d6039c5](https://github.com/nodejs/corepack/commit/d6039c5b16cdddb33069b9aa864854ed16d17e4e)) +* update package manager versions ([#146](https://github.com/nodejs/corepack/issues/146)) ([fdb187a](https://github.com/nodejs/corepack/commit/fdb187a640de77df9b3688623ba510bdafda8702)) + +## [0.12.0](https://github.com/nodejs/corepack/compare/v0.11.2...v0.12.0) (2022-07-09) + + +### Features + +* add support for hash checking ([#133](https://github.com/nodejs/corepack/issues/133)) ([6a480a7](https://github.com/nodejs/corepack/commit/6a480a72c2e9fc6725f2ab6dfaf4c52e4d3d2ade)) +* add support for tags and ranges in `prepare` command ([#136](https://github.com/nodejs/corepack/issues/136)) ([29da06c](https://github.com/nodejs/corepack/commit/29da06c515e917829e5ffbedb34284a6597e9d56)) +* update package manager versions ([#129](https://github.com/nodejs/corepack/issues/129)) ([2470f58](https://github.com/nodejs/corepack/commit/2470f58b74491a1301221df643c55be5adf1d349)) +* update package manager versions ([#139](https://github.com/nodejs/corepack/issues/139)) ([cd0dcad](https://github.com/nodejs/corepack/commit/cd0dcade85621199048d7ca30dfc3efce11e1f37)) + + +### Bug Fixes + +* streamline the cache exploration ([#135](https://github.com/nodejs/corepack/issues/135)) ([185da44](https://github.com/nodejs/corepack/commit/185da44078fd1ca34aec2e4e6f8a52ecffcf3c11)) + +## [0.11.2](https://github.com/nodejs/corepack/compare/v0.11.1...v0.11.2) (2022-06-13) + +### Bug Fixes + +* only set bins on pack ([#127](https://github.com/nodejs/corepack/issues/127)) ([7ae489a](https://github.com/nodejs/corepack/commit/7ae489a86c3fe584b9915f4ec57deb7c316c1a25)) + +## [0.11.1](https://github.com/nodejs/corepack/compare/v0.11.0...v0.11.1) (2022-06-12) + + +### Bug Fixes + +* **ci:** YAML formatting in publish workflow ([#124](https://github.com/nodejs/corepack/issues/124)) ([01c7d63](https://github.com/nodejs/corepack/commit/01c7d638b04a1340b3939a7985e24b586e344995)) + +## 0.11.0 (2022-06-12) + + +### Features + +* auto setup proxy for http requests ([#69](https://github.com/nodejs/corepack/issues/69)) ([876ce02](https://github.com/nodejs/corepack/commit/876ce02fe7385ea5bc896b2dc93d1fb320361c64)) + + +### Bug Fixes + +* avoid symlinks to work on Windows ([#13](https://github.com/nodejs/corepack/issues/13)) ([b56df30](https://github.com/nodejs/corepack/commit/b56df30796da9c7cb0ba5e1bb7152c81582abba6)) +* avoid using eval to get the corepack version ([#45](https://github.com/nodejs/corepack/issues/45)) ([78d94eb](https://github.com/nodejs/corepack/commit/78d94eb297444d7558e8b4395f0108c97117f8ab)) +* bin file name for pnpm >=6.0 ([#35](https://github.com/nodejs/corepack/issues/35)) ([8ff2499](https://github.com/nodejs/corepack/commit/8ff2499e831c8cf2dea604ea985d830afc8a479e)) +* generate cmd shim files ([a900b4d](https://github.com/nodejs/corepack/commit/a900b4db12fcd4d99c0a4d011b426cdc6485d323)) +* handle package managers with a bin array correctly ([#20](https://github.com/nodejs/corepack/issues/20)) ([1836d17](https://github.com/nodejs/corepack/commit/1836d17b4fc4c0164df2fe1ccaca4d2f16f6f2d1)) +* handle parallel installs ([#84](https://github.com/nodejs/corepack/issues/84)) ([5cfc6c9](https://github.com/nodejs/corepack/commit/5cfc6c9df0dbec8e4de4324be37aa0a54a300552)) +* handle prereleases ([#32](https://github.com/nodejs/corepack/issues/32)) ([2a46b6d](https://github.com/nodejs/corepack/commit/2a46b6d13adae139141012254ef670d6ddcb5d11)) + + +### Performance Improvements + +* load binaries in the same process ([#97](https://github.com/nodejs/corepack/issues/97)) ([5ff6e82](https://github.com/nodejs/corepack/commit/5ff6e82028e58448ba5ba986854b61ecdc69885b)) diff --git a/deps/corepack/README.md b/deps/corepack/README.md index d58811c4cda..8d76baea4bb 100644 --- a/deps/corepack/README.md +++ b/deps/corepack/README.md @@ -8,7 +8,7 @@ Corepack is a zero-runtime-dependency Node.js script that acts as a bridge betwe ### Default Installs -Corepack is distributed by default with Node.js 16.9, but is opt-in for the time being. Run `corepack enable` to install the required shims. +Corepack is distributed by default with Node.js 14.19.0 and 16.9.0, but is opt-in for the time being. Run `corepack enable` to install the required shims. ### Manual Installs @@ -36,6 +36,8 @@ We do acknowledge the irony and overhead of using npm to install Corepack, which ## Usage +### When Building Packages + Just use your package managers as you usually would. Run `yarn install` in Yarn projects, `pnpm install` in pnpm projects, and `npm` in npm projects. Corepack will catch these calls, and depending on the situation: - **If the local project is configured for the package manager you're using**, Corepack will silently download and cache the latest compatible version. @@ -44,11 +46,30 @@ Just use your package managers as you usually would. Run `yarn install` in Yarn - **If the local project isn't configured for any package manager**, Corepack will assume that you know what you're doing, and will use whatever package manager version has been pinned as "known good release". Check the relevant section for more details. +### When Authoring Packages + +Set your package's manager with the `packageManager` field in `package.json`: + +```json +{ + "packageManager": "yarn@3.2.3+sha224.953c8233f7a92884eee2de69a1b92d1f2ec1655e66d08071ba9a02fa" +} +``` + +Here, `yarn` is the name of the package manager, specified at version `3.2.3`, along with the SHA-224 hash of this version for validation. `packageManager@x.y.z` is required. The hash is optional but strongly recommended as a security practice. Permitted values for the package manager are `yarn`, `npm`, and `pnpm`. + ## Known Good Releases -When running Yarn or pnpm within projects that don't list a supported package manager, Corepack will default to a set of Known Good Releases. In a way, you can compare this to Node.js, where each version ships with a specific version of npm. +When running Corepack within projects that don't list a supported package +manager, it will default to a set of Known Good Releases. In a way, you can +compare this to Node.js, where each version ships with a specific version of npm. -The Known Good Releases can be updated system-wide using the `--activate` flag from the `corepack prepare` and `corepack hydrate` commands. +If there is no Known Good Release for the requested package manager, Corepack +looks up the npm registry for the latest available version and cache it for +future use. + +The Known Good Releases can be updated system-wide using the `--activate` flag +from the `corepack prepare` and `corepack hydrate` commands. ## Offline Workflow @@ -104,29 +125,49 @@ This command will retrieve the given package manager from the specified archive ## Environment Variables +- `COREPACK_DEFAULT_TO_LATEST` can be set to `0` in order to instruct Corepack + not to lookup on the remote registry for the latest version of the selected + package manager. + +- `COREPACK_ENABLE_NETWORK` can be set to `0` to prevent Corepack from accessing + the network (in which case you'll be responsible for hydrating the package + manager versions that will be required for the projects you'll run, using + `corepack hydrate`). + +- `COREPACK_ENABLE_STRICT` can be set to `0` to prevent Corepack from throwing error + if the package manager does not correspond to the one defined for the current project. + This means that if a user is using the package manager specified in the current project, + it will use the version specified by the project's `packageManager` field. + But if the user is using other package manager different from the one specified + for the current project, it will use the system-wide package manager version. + +- `COREPACK_ENABLE_PROJECT_SPEC` can be set to `0` to prevent Corepack from checking + if the package manager corresponds to the one defined for the current project. + This means that it will always use the system-wide package manager regardless of + what is being specified in the project's `packageManager` field. + +- `COREPACK_HOME` can be set in order to define where Corepack should install + the package managers. By default it is set to `%LOCALAPPDATA%\node\corepack` + on Windows, and to `$HOME/.cache/node/corepack` everywhere else. + - `COREPACK_ROOT` has no functional impact on Corepack itself; it's automatically being set in your environment by Corepack when it shells out to the underlying package managers, so that they can feature-detect its presence (useful for commands like `yarn init`). -## Contributing +- `COREPACK_NPM_REGISTRY` sets the registry base url used when retrieving package managers from npm. Default value is `https://registry.npmjs.org` + +- `COREPACK_NPM_TOKEN` sets a Bearer token authorization header when connecting to a npm type registry. -If you want to build corepack yourself, you can build the project like this: +- `COREPACK_NPM_USERNAME` and `COREPACK_NPM_PASSWORD` to set a Basic authorization header when connecting to a npm type registry. Note that both environment variables are required and as plain text. If you want to send an empty password, explicitly set `COREPACK_NPM_PASSWORD` to an empty string. -1. Clone this repository -2. Run `yarn build` (no need for `yarn install`) -3. The `dist/` directory now contains the corepack build and the shims -4. Call `node ./dist/corepack --help` and behold +- `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` are supported through [`node-proxy-agent`](https://github.com/TooTallNate/node-proxy-agent). + +## Contributing -You can also run the tests with `yarn jest` (still no install needed). +See [`CONTRIBUTING.md`](./CONTRIBUTING.md). ## Design -Various tidbits about Corepack's design are explained in more details in [DESIGN.md](/DESIGN.md). +See [`DESIGN.md`](/DESIGN.md). ## License (MIT) -> **Copyright © Corepack contributors** -> -> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +See [`LICENSE.md`](./LICENSE.md). diff --git a/deps/corepack/dist/corepack.js b/deps/corepack/dist/corepack.js index f540b108b0a..122b79d491c 100755 --- a/deps/corepack/dist/corepack.js +++ b/deps/corepack/dist/corepack.js @@ -3,9276 +3,8507 @@ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Cli.js": -/*!*********************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Cli.js ***! - \*********************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/@zkochan-cmd-shim-npm-5.3.1-32f000bcac-9.zip/node_modules/@zkochan/cmd-shim/index.js": +/*!***********************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/@zkochan-cmd-shim-npm-5.3.1-32f000bcac-9.zip/node_modules/@zkochan/cmd-shim/index.js ***! + \***********************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var constants = __webpack_require__(/*! ../constants.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/constants.js"); -var Command = __webpack_require__(/*! ./Command.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Command.js"); -var core = __webpack_require__(/*! ../core.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/core.js"); -var format = __webpack_require__(/*! ../format.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/format.js"); -var HelpCommand = __webpack_require__(/*! ./HelpCommand.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/HelpCommand.js"); - -const errorCommandSymbol = Symbol(`clipanion/errorCommand`); -function getDefaultColorSettings() { - if (process.env.FORCE_COLOR === `0`) - return false; - if (process.env.FORCE_COLOR === `1`) - return true; - if (typeof process.stdout !== `undefined` && process.stdout.isTTY) - return true; - return false; +cmdShim.ifExists = cmdShimIfExists; +const util_1 = __webpack_require__(/*! util */ "util"); +const path = __webpack_require__(/*! path */ "path"); +const isWindows = __webpack_require__(/*! is-windows */ "../../../.yarn/berry/cache/is-windows-npm-1.0.2-898cd6f3d7-9.zip/node_modules/is-windows/index.js"); +const CMD_EXTENSION = __webpack_require__(/*! cmd-extension */ "../../../.yarn/berry/cache/cmd-extension-npm-1.0.2-11aa204c4b-9.zip/node_modules/cmd-extension/index.js"); +const shebangExpr = /^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/; +const DEFAULT_OPTIONS = { + // Create PowerShell file by default if the option hasn't been specified + createPwshFile: true, + createCmdFile: isWindows(), + fs: __webpack_require__(/*! fs */ "fs") +}; +/** + * Map from extensions of files that this module is frequently used for to their runtime. + * @type {Map} + */ +const extensionToProgramMap = new Map([ + ['.js', 'node'], + ['.cjs', 'node'], + ['.mjs', 'node'], + ['.cmd', 'cmd'], + ['.bat', 'cmd'], + ['.ps1', 'pwsh'], + ['.sh', 'sh'] +]); +function ingestOptions(opts) { + const opts_ = { ...DEFAULT_OPTIONS, ...opts }; + const fs = opts_.fs; + opts_.fs_ = { + chmod: fs.chmod ? (0, util_1.promisify)(fs.chmod) : (async () => { }), + mkdir: (0, util_1.promisify)(fs.mkdir), + readFile: (0, util_1.promisify)(fs.readFile), + stat: (0, util_1.promisify)(fs.stat), + unlink: (0, util_1.promisify)(fs.unlink), + writeFile: (0, util_1.promisify)(fs.writeFile) + }; + return opts_; } /** - * @template Context The context shared by all commands. Contexts are a set of values, defined when calling the `run`/`runExit` functions from the CLI instance, that will be made available to the commands via `this.context`. + * Try to create shims. + * + * @param src Path to program (executable or script). + * @param to Path to shims. + * Don't add an extension if you will create multiple types of shims. + * @param opts Options. + * @throws If `src` is missing. */ -class Cli { - constructor({ binaryLabel, binaryName: binaryNameOpt = `...`, binaryVersion, enableColors = getDefaultColorSettings() } = {}) { - this.registrations = new Map(); - this.builder = new core.CliBuilder({ binaryName: binaryNameOpt }); - this.binaryLabel = binaryLabel; - this.binaryName = binaryNameOpt; - this.binaryVersion = binaryVersion; - this.enableColors = enableColors; +async function cmdShim(src, to, opts) { + const opts_ = ingestOptions(opts); + await cmdShim_(src, to, opts_); +} +/** + * Try to create shims. + * + * Does nothing if `src` doesn't exist. + * + * @param src Path to program (executable or script). + * @param to Path to shims. + * Don't add an extension if you will create multiple types of shims. + * @param opts Options. + */ +function cmdShimIfExists(src, to, opts) { + return cmdShim(src, to, opts).catch(() => { }); +} +/** + * Try to unlink, but ignore errors. + * Any problems will surface later. + * + * @param path File to be removed. + */ +function rm(path, opts) { + return opts.fs_.unlink(path).catch(() => { }); +} +/** + * Try to create shims **even if `src` is missing**. + * + * @param src Path to program (executable or script). + * @param to Path to shims. + * Don't add an extension if you will create multiple types of shims. + * @param opts Options. + */ +async function cmdShim_(src, to, opts) { + const srcRuntimeInfo = await searchScriptRuntime(src, opts); + // Always tries to create all types of shims by calling `writeAllShims` as of now. + // Append your code here to change the behavior in response to `srcRuntimeInfo`. + // Create 3 shims for (Ba)sh in Cygwin / MSYS, no extension) & CMD (.cmd) & PowerShell (.ps1) + await writeShimsPreCommon(to, opts); + return writeAllShims(src, to, srcRuntimeInfo, opts); +} +/** + * Do processes before **all** shims are created. + * This must be called **only once** for one call of `cmdShim(IfExists)`. + * + * @param target Path of shims that are going to be created. + */ +function writeShimsPreCommon(target, opts) { + return opts.fs_.mkdir(path.dirname(target), { recursive: true }); +} +/** + * Write all types (sh & cmd & pwsh) of shims to files. + * Extensions (`.cmd` and `.ps1`) are appended to cmd and pwsh shims. + * + * + * @param src Path to program (executable or script). + * @param to Path to shims **without extensions**. + * Extensions are added for CMD and PowerShell shims. + * @param srcRuntimeInfo Return value of `await searchScriptRuntime(src)`. + * @param opts Options. + */ +function writeAllShims(src, to, srcRuntimeInfo, opts) { + const opts_ = ingestOptions(opts); + const generatorAndExts = [{ generator: generateShShim, extension: '' }]; + if (opts_.createCmdFile) { + generatorAndExts.push({ generator: generateCmdShim, extension: CMD_EXTENSION }); } - /** - * Creates a new Cli and registers all commands passed as parameters. - * - * @param commandClasses The Commands to register - * @returns The created `Cli` instance - */ - static from(commandClasses, options = {}) { - const cli = new Cli(options); - for (const commandClass of commandClasses) - cli.register(commandClass); - return cli; + if (opts_.createPwshFile) { + generatorAndExts.push({ generator: generatePwshShim, extension: '.ps1' }); } - /** - * Registers a command inside the CLI. - */ - register(commandClass) { - var _a; - const specs = new Map(); - const command = new commandClass(); - for (const key in command) { - const value = command[key]; - if (typeof value === `object` && value !== null && value[Command.Command.isOption]) { - specs.set(key, value); - } + return Promise.all(generatorAndExts.map((generatorAndExt) => writeShim(src, to + generatorAndExt.extension, srcRuntimeInfo, generatorAndExt.generator, opts_))); +} +/** + * Do processes before writing shim. + * + * @param target Path to shim that is going to be created. + */ +function writeShimPre(target, opts) { + return rm(target, opts); +} +/** + * Do processes after writing the shim. + * + * @param target Path to just created shim. + */ +function writeShimPost(target, opts) { + // Only chmoding shims as of now. + // Some other processes may be appended. + return chmodShim(target, opts); +} +/** + * Look into runtime (e.g. `node` & `sh` & `pwsh`) and its arguments + * of the target program (script or executable). + * + * @param target Path to the executable or script. + * @return Promise of infomation of runtime of `target`. + */ +async function searchScriptRuntime(target, opts) { + try { + const data = await opts.fs_.readFile(target, 'utf8'); + // First, check if the bin is a #! of some sort. + const firstLine = data.trim().split(/\r*\n/)[0]; + const shebang = firstLine.match(shebangExpr); + if (!shebang) { + // If not, infer script type from its extension. + // If the inference fails, it's something that'll be compiled, or some other + // sort of script, and just call it directly. + const targetExtension = path.extname(target).toLowerCase(); + return { + // undefined if extension is unknown but it's converted to null. + program: extensionToProgramMap.get(targetExtension) || null, + additionalArgs: '' + }; } - const builder = this.builder.command(); - const index = builder.cliIndex; - const paths = (_a = commandClass.paths) !== null && _a !== void 0 ? _a : command.paths; - if (typeof paths !== `undefined`) - for (const path of paths) - builder.addPath(path); - this.registrations.set(commandClass, { specs, builder, index }); - for (const [key, { definition }] of specs.entries()) - definition(builder, key); - builder.setContext({ - commandClass, - }); + return { + program: shebang[1], + additionalArgs: shebang[2] + }; } - process(input) { - const { contexts, process } = this.builder.compile(); - const state = process(input); - switch (state.selectedIndex) { - case constants.HELP_COMMAND_INDEX: - { - return HelpCommand.HelpCommand.from(state, contexts); - } - default: - { - const { commandClass } = contexts[state.selectedIndex]; - const record = this.registrations.get(commandClass); - if (typeof record === `undefined`) - throw new Error(`Assertion failed: Expected the command class to have been registered.`); - const command = new commandClass(); - command.path = state.path; - try { - for (const [key, { transformer }] of record.specs.entries()) - command[key] = transformer(record.builder, key, state); - return command; - } - catch (error) { - error[errorCommandSymbol] = command; - throw error; - } - } - break; + catch (err) { + if (!isWindows() || err.code !== 'ENOENT') + throw err; + if (await opts.fs_.stat(`${target}${getExeExtension()}`)) { + return { + program: null, + additionalArgs: '', + }; } + throw err; } - async run(input, context) { - let command; - if (!Array.isArray(input)) { - command = input; - } - else { - try { - command = this.process(input); - } - catch (error) { - context.stdout.write(this.error(error)); - return 1; - } - } - if (command.help) { - context.stdout.write(this.usage(command, { detailed: true })); - return 0; - } - command.context = context; - command.cli = { - binaryLabel: this.binaryLabel, - binaryName: this.binaryName, - binaryVersion: this.binaryVersion, - enableColors: this.enableColors, - definitions: () => this.definitions(), - error: (error, opts) => this.error(error, opts), - process: input => this.process(input), - run: (input, subContext) => this.run(input, { ...context, ...subContext }), - usage: (command, opts) => this.usage(command, opts), - }; - let exitCode; - try { - exitCode = await command.validateAndExecute().catch(error => command.catch(error).then(() => 0)); - } - catch (error) { - context.stdout.write(this.error(error, { command })); - return 1; - } - return exitCode; - } - /** - * Runs a command and exits the current `process` with the exit code returned by the command. - * - * @param input An array containing the name of the command and its arguments. - * - * @example - * cli.runExit(process.argv.slice(2), Cli.defaultContext) - */ - async runExit(input, context) { - process.exitCode = await this.run(input, context); - } - suggest(input, partial) { - const { suggest } = this.builder.compile(); - return suggest(input, partial); - } - definitions({ colored = false } = {}) { - const data = []; - for (const [commandClass, { index }] of this.registrations) { - if (typeof commandClass.usage === `undefined`) - continue; - const { usage: path } = this.getUsageByIndex(index, { detailed: false }); - const { usage, options } = this.getUsageByIndex(index, { detailed: true, inlineOptions: false }); - const category = typeof commandClass.usage.category !== `undefined` - ? format.formatMarkdownish(commandClass.usage.category, { format: this.format(colored), paragraphs: false }) - : undefined; - const description = typeof commandClass.usage.description !== `undefined` - ? format.formatMarkdownish(commandClass.usage.description, { format: this.format(colored), paragraphs: false }) - : undefined; - const details = typeof commandClass.usage.details !== `undefined` - ? format.formatMarkdownish(commandClass.usage.details, { format: this.format(colored), paragraphs: true }) - : undefined; - const examples = typeof commandClass.usage.examples !== `undefined` - ? commandClass.usage.examples.map(([label, cli]) => [format.formatMarkdownish(label, { format: this.format(colored), paragraphs: false }), cli.replace(/\$0/g, this.binaryName)]) - : undefined; - data.push({ path, usage, category, description, details, examples, options }); - } - return data; - } - usage(command = null, { colored, detailed = false, prefix = `$ ` } = {}) { - var _a; - // In case the default command is the only one, we can just show the command help rather than the general one - if (command === null) { - for (const commandClass of this.registrations.keys()) { - const paths = commandClass.paths; - const isDocumented = typeof commandClass.usage !== `undefined`; - const isExclusivelyDefault = !paths || paths.length === 0 || (paths.length === 1 && paths[0].length === 0); - const isDefault = isExclusivelyDefault || ((_a = paths === null || paths === void 0 ? void 0 : paths.some(path => path.length === 0)) !== null && _a !== void 0 ? _a : false); - if (isDefault) { - if (command) { - command = null; - break; - } - else { - command = commandClass; - } - } - else { - if (isDocumented) { - command = null; - continue; - } - } - } - if (command) { - detailed = true; - } - } - // @ts-ignore - const commandClass = command !== null && command instanceof Command.Command - ? command.constructor - : command; - let result = ``; - if (!commandClass) { - const commandsByCategories = new Map(); - for (const [commandClass, { index }] of this.registrations.entries()) { - if (typeof commandClass.usage === `undefined`) - continue; - const category = typeof commandClass.usage.category !== `undefined` - ? format.formatMarkdownish(commandClass.usage.category, { format: this.format(colored), paragraphs: false }) - : null; - let categoryCommands = commandsByCategories.get(category); - if (typeof categoryCommands === `undefined`) - commandsByCategories.set(category, categoryCommands = []); - const { usage } = this.getUsageByIndex(index); - categoryCommands.push({ commandClass, usage }); - } - const categoryNames = Array.from(commandsByCategories.keys()).sort((a, b) => { - if (a === null) - return -1; - if (b === null) - return +1; - return a.localeCompare(b, `en`, { usage: `sort`, caseFirst: `upper` }); - }); - const hasLabel = typeof this.binaryLabel !== `undefined`; - const hasVersion = typeof this.binaryVersion !== `undefined`; - if (hasLabel || hasVersion) { - if (hasLabel && hasVersion) - result += `${this.format(colored).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`; - else if (hasLabel) - result += `${this.format(colored).header(`${this.binaryLabel}`)}\n`; - else - result += `${this.format(colored).header(`${this.binaryVersion}`)}\n`; - result += ` ${this.format(colored).bold(prefix)}${this.binaryName} \n`; - } - else { - result += `${this.format(colored).bold(prefix)}${this.binaryName} \n`; - } - for (const categoryName of categoryNames) { - const commands = commandsByCategories.get(categoryName).slice().sort((a, b) => { - return a.usage.localeCompare(b.usage, `en`, { usage: `sort`, caseFirst: `upper` }); - }); - const header = categoryName !== null - ? categoryName.trim() - : `General commands`; - result += `\n`; - result += `${this.format(colored).header(`${header}`)}\n`; - for (const { commandClass, usage } of commands) { - const doc = commandClass.usage.description || `undocumented`; - result += `\n`; - result += ` ${this.format(colored).bold(usage)}\n`; - result += ` ${format.formatMarkdownish(doc, { format: this.format(colored), paragraphs: false })}`; - } - } - result += `\n`; - result += format.formatMarkdownish(`You can also print more details about any of these commands by calling them with the \`-h,--help\` flag right after the command name.`, { format: this.format(colored), paragraphs: true }); - } - else { - if (!detailed) { - const { usage } = this.getUsageByRegistration(commandClass); - result += `${this.format(colored).bold(prefix)}${usage}\n`; - } - else { - const { description = ``, details = ``, examples = [], } = commandClass.usage || {}; - if (description !== ``) { - result += format.formatMarkdownish(description, { format: this.format(colored), paragraphs: false }).replace(/^./, $0 => $0.toUpperCase()); - result += `\n`; - } - if (details !== `` || examples.length > 0) { - result += `${this.format(colored).header(`Usage`)}\n`; - result += `\n`; - } - const { usage, options } = this.getUsageByRegistration(commandClass, { inlineOptions: false }); - result += `${this.format(colored).bold(prefix)}${usage}\n`; - if (options.length > 0) { - result += `\n`; - result += `${format.richFormat.header(`Options`)}\n`; - const maxDefinitionLength = options.reduce((length, option) => { - return Math.max(length, option.definition.length); - }, 0); - result += `\n`; - for (const { definition, description } of options) { - result += ` ${this.format(colored).bold(definition.padEnd(maxDefinitionLength))} ${format.formatMarkdownish(description, { format: this.format(colored), paragraphs: false })}`; - } - } - if (details !== ``) { - result += `\n`; - result += `${this.format(colored).header(`Details`)}\n`; - result += `\n`; - result += format.formatMarkdownish(details, { format: this.format(colored), paragraphs: true }); - } - if (examples.length > 0) { - result += `\n`; - result += `${this.format(colored).header(`Examples`)}\n`; - for (const [description, example] of examples) { - result += `\n`; - result += format.formatMarkdownish(description, { format: this.format(colored), paragraphs: false }); - result += `${example - .replace(/^/m, ` ${this.format(colored).bold(prefix)}`) - .replace(/\$0/g, this.binaryName)}\n`; - } - } - } - } - return result; - } - error(error, _a) { - var _b; - var { colored, command = (_b = error[errorCommandSymbol]) !== null && _b !== void 0 ? _b : null } = _a === void 0 ? {} : _a; - if (!(error instanceof Error)) - error = new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(error)})`); - let result = ``; - let name = error.name.replace(/([a-z])([A-Z])/g, `$1 $2`); - if (name === `Error`) - name = `Internal Error`; - result += `${this.format(colored).error(name)}: ${error.message}\n`; - const meta = error.clipanion; - if (typeof meta !== `undefined`) { - if (meta.type === `usage`) { - result += `\n`; - result += this.usage(command); - } - } - else { - if (error.stack) { - result += `${error.stack.replace(/^.*\n/, ``)}\n`; - } - } - return result; - } - getUsageByRegistration(klass, opts) { - const record = this.registrations.get(klass); - if (typeof record === `undefined`) - throw new Error(`Assertion failed: Unregistered command`); - return this.getUsageByIndex(record.index, opts); - } - getUsageByIndex(n, opts) { - return this.builder.getBuilderByIndex(n).usage(opts); - } - format(colored = this.enableColors) { - return colored ? format.richFormat : format.textFormat; +} +function getExeExtension() { + let cmdExtension; + if (process.env.PATHEXT) { + cmdExtension = process.env.PATHEXT + .split(path.delimiter) + .find(ext => ext.toLowerCase() === '.exe'); } + return cmdExtension || '.exe'; } /** - * The default context of the CLI. + * Write shim to the file system while executing the pre- and post-processes + * defined in `WriteShimPre` and `WriteShimPost`. * - * Contains the stdio of the current `process`. + * @param src Path to the executable or script. + * @param to Path to the (sh) shim(s) that is going to be created. + * @param srcRuntimeInfo Result of `await searchScriptRuntime(src)`. + * @param generateShimScript Generator of shim script. + * @param opts Other options. */ -Cli.defaultContext = { - stdin: process.stdin, - stdout: process.stdout, - stderr: process.stderr, -}; - -exports.Cli = Cli; - - -/***/ }), - -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Command.js": -/*!*************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Command.js ***! - \*************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var utils = __webpack_require__(/*! ./options/utils.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/utils.js"); - -function _interopNamespace(e) { - if (e && e.__esModule) return e; - var n = Object.create(null); - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { - return e[k]; - } - }); - } - }); - } - n['default'] = e; - return Object.freeze(n); +async function writeShim(src, to, srcRuntimeInfo, generateShimScript, opts) { + const defaultArgs = opts.preserveSymlinks ? '--preserve-symlinks' : ''; + // `Array.prototype.filter` removes ''. + // ['--foo', '--bar'].join(' ') and [].join(' ') returns '--foo --bar' and '' respectively. + const args = [srcRuntimeInfo.additionalArgs, defaultArgs].filter(arg => arg).join(' '); + opts = Object.assign({}, opts, { + prog: srcRuntimeInfo.program, + args: args + }); + await writeShimPre(to, opts); + await opts.fs_.writeFile(to, generateShimScript(src, to, opts), 'utf8'); + return writeShimPost(to, opts); } - -class Command { - constructor() { - /** - * Predefined that will be set to true if `-h,--help` has been used, in - * which case `Command#execute` won't be called. - */ - this.help = false; +/** + * Generate the content of a shim for CMD. + * + * @param src Path to the executable or script. + * @param to Path to the shim to be created. + * It is highly recommended to end with `.cmd` (or `.bat`). + * @param opts Options. + * @return The content of shim. + */ +function generateCmdShim(src, to, opts) { + // `shTarget` is not used to generate the content. + const shTarget = path.relative(path.dirname(to), src); + let target = shTarget.split('/').join('\\'); + const quotedPathToTarget = path.isAbsolute(target) ? `"${target}"` : `"%~dp0\\${target}"`; + let longProg; + let prog = opts.prog; + let args = opts.args || ''; + const nodePath = normalizePathEnvVar(opts.nodePath).win32; + const prependToPath = normalizePathEnvVar(opts.prependToPath).win32; + if (!prog) { + prog = quotedPathToTarget; + args = ''; + target = ''; } - /** - * Defines the usage information for the given command. - */ - static Usage(usage) { - return usage; + else if (prog === 'node' && opts.nodeExecPath) { + prog = `"${opts.nodeExecPath}"`; + target = quotedPathToTarget; } - /** - * Standard error handler which will simply rethrow the error. Can be used - * to add custom logic to handle errors from the command or simply return - * the parent class error handling. - */ - async catch(error) { - throw error; + else { + longProg = `"%~dp0\\${prog}.exe"`; + target = quotedPathToTarget; } - async validateAndExecute() { - const commandClass = this.constructor; - const cascade = commandClass.schema; - if (typeof cascade !== `undefined`) { - const { isDict, isUnknown, applyCascade } = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(__webpack_require__(/*! typanion */ "./.yarn/cache/typanion-npm-3.3.1-ee9997c7cf-212d2beb55.zip/node_modules/typanion/lib/index.js")); }); - const schema = applyCascade(isDict(isUnknown()), cascade); - const errors = []; - const coercions = []; - const check = schema(this, { errors, coercions }); - if (!check) - throw utils.formatError(`Invalid option schema`, errors); - for (const [, op] of coercions) { - op(); - } - } - const exitCode = await this.execute(); - if (typeof exitCode !== `undefined`) { - return exitCode; - } - else { - return 0; - } + let progArgs = opts.progArgs ? `${opts.progArgs.join(` `)} ` : ''; + // @IF EXIST "%~dp0\node.exe" ( + // "%~dp0\node.exe" "%~dp0\.\node_modules\npm\bin\npm-cli.js" %* + // ) ELSE ( + // SETLOCAL + // SET PATHEXT=%PATHEXT:;.JS;=;% + // node "%~dp0\.\node_modules\npm\bin\npm-cli.js" %* + // ) + let cmd = '@SETLOCAL\r\n'; + if (prependToPath) { + cmd += `@SET "PATH=${prependToPath}:%PATH%"\r\n`; + } + if (nodePath) { + cmd += `\ +@IF NOT DEFINED NODE_PATH (\r + @SET "NODE_PATH=${nodePath}"\r +) ELSE (\r + @SET "NODE_PATH=%NODE_PATH%;${nodePath}"\r +)\r +`; + } + if (longProg) { + cmd += `\ +@IF EXIST ${longProg} (\r + ${longProg} ${args} ${target} ${progArgs}%*\r +) ELSE (\r + @SET PATHEXT=%PATHEXT:;.JS;=;%\r + ${prog} ${args} ${target} ${progArgs}%*\r +)\r +`; + } + else { + cmd += `@${prog} ${args} ${target} ${progArgs}%*\r\n`; } + return cmd; } /** - * Used to detect option definitions. - */ -Command.isOption = utils.isOptionSymbol; -/** - * Just an helper to use along with the `paths` fields, to make it - * clearer that a command is the default one. + * Generate the content of a shim for (Ba)sh in, for example, Cygwin and MSYS(2). * - * @example - * class MyCommand extends Command { - * static paths = [Command.Default]; - * } + * @param src Path to the executable or script. + * @param to Path to the shim to be created. + * It is highly recommended to end with `.sh` or to contain no extension. + * @param opts Options. + * @return The content of shim. */ -Command.Default = []; - -exports.Command = Command; - - -/***/ }), - -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/HelpCommand.js": -/*!*****************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/HelpCommand.js ***! - \*****************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var Command = __webpack_require__(/*! ./Command.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Command.js"); - -class HelpCommand extends Command.Command { - constructor(contexts) { - super(); - this.contexts = contexts; - this.commands = []; +function generateShShim(src, to, opts) { + let shTarget = path.relative(path.dirname(to), src); + let shProg = opts.prog && opts.prog.split('\\').join('/'); + let shLongProg; + shTarget = shTarget.split('\\').join('/'); + const quotedPathToTarget = path.isAbsolute(shTarget) ? `"${shTarget}"` : `"$basedir/${shTarget}"`; + let args = opts.args || ''; + const shNodePath = normalizePathEnvVar(opts.nodePath).posix; + if (!shProg) { + shProg = quotedPathToTarget; + args = ''; + shTarget = ''; } - static from(state, contexts) { - const command = new HelpCommand(contexts); - command.path = state.path; - for (const opt of state.options) { - switch (opt.name) { - case `-c`: - { - command.commands.push(Number(opt.value)); - } - break; - case `-i`: - { - command.index = Number(opt.value); - } - break; - } - } - return command; + else if (opts.prog === 'node' && opts.nodeExecPath) { + shProg = `"${opts.nodeExecPath}"`; + shTarget = quotedPathToTarget; } - async execute() { - let commands = this.commands; - if (typeof this.index !== `undefined` && this.index >= 0 && this.index < commands.length) - commands = [commands[this.index]]; - if (commands.length === 0) { - this.context.stdout.write(this.cli.usage()); - } - else if (commands.length === 1) { - this.context.stdout.write(this.cli.usage(this.contexts[commands[0]].commandClass, { detailed: true })); - } - else if (commands.length > 1) { - this.context.stdout.write(`Multiple commands match your selection:\n`); - this.context.stdout.write(`\n`); - let index = 0; - for (const command of this.commands) - this.context.stdout.write(this.cli.usage(this.contexts[command].commandClass, { prefix: `${index++}. `.padStart(5) })); - this.context.stdout.write(`\n`); - this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands.\n`); - } + else { + shLongProg = `"$basedir/${opts.prog}"`; + shTarget = quotedPathToTarget; } -} - -exports.HelpCommand = HelpCommand; - - -/***/ }), - -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/definitions.js": -/*!**************************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/definitions.js ***! - \**************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var Command = __webpack_require__(/*! ../Command.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Command.js"); - -/** - * A command that prints the clipanion definitions. - */ -class DefinitionsCommand extends Command.Command { - async execute() { - this.context.stdout.write(`${JSON.stringify(this.cli.definitions(), null, 2)}\n`); + let progArgs = opts.progArgs ? `${opts.progArgs.join(` `)} ` : ''; + // #!/bin/sh + // basedir=`dirname "$0"` + // + // case `uname` in + // *CYGWIN*) basedir=`cygpath -w "$basedir"`;; + // esac + // + // export NODE_PATH="" + // + // if [ -x "$basedir/node.exe" ]; then + // exec "$basedir/node.exe" "$basedir/node_modules/npm/bin/npm-cli.js" "$@" + // else + // exec node "$basedir/node_modules/npm/bin/npm-cli.js" "$@" + // fi + let sh = `\ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") + +case \`uname\` in + *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; +esac + +`; + if (opts.prependToPath) { + sh += `\ +export PATH="${opts.prependToPath}:$PATH" +`; + } + if (shNodePath) { + sh += `\ +if [ -z "$NODE_PATH" ]; then + export NODE_PATH="${shNodePath}" +else + export NODE_PATH="$NODE_PATH:${shNodePath}" +fi +`; + } + if (shLongProg) { + sh += `\ +if [ -x ${shLongProg} ]; then + exec ${shLongProg} ${args} ${shTarget} ${progArgs}"$@" +else + exec ${shProg} ${args} ${shTarget} ${progArgs}"$@" +fi +`; + } + else { + sh += `\ +${shProg} ${args} ${shTarget} ${progArgs}"$@" +exit $? +`; } + return sh; } -DefinitionsCommand.paths = [[`--clipanion=definitions`]]; - -exports.DefinitionsCommand = DefinitionsCommand; - - -/***/ }), - -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/help.js": -/*!*******************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/help.js ***! - \*******************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var Command = __webpack_require__(/*! ../Command.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Command.js"); - /** - * A command that prints the usage of all commands. + * Generate the content of a shim for PowerShell. * - * Paths: `-h`, `--help` + * @param src Path to the executable or script. + * @param to Path to the shim to be created. + * It is highly recommended to end with `.ps1`. + * @param opts Options. + * @return The content of shim. */ -class HelpCommand extends Command.Command { - async execute() { - this.context.stdout.write(this.cli.usage()); - } -} -HelpCommand.paths = [[`-h`], [`--help`]]; - -exports.HelpCommand = HelpCommand; - +function generatePwshShim(src, to, opts) { + let shTarget = path.relative(path.dirname(to), src); + const shProg = opts.prog && opts.prog.split('\\').join('/'); + let pwshProg = shProg && `"${shProg}$exe"`; + let pwshLongProg; + shTarget = shTarget.split('\\').join('/'); + const quotedPathToTarget = path.isAbsolute(shTarget) ? `"${shTarget}"` : `"$basedir/${shTarget}"`; + let args = opts.args || ''; + let normalizedNodePathEnvVar = normalizePathEnvVar(opts.nodePath); + const nodePath = normalizedNodePathEnvVar.win32; + const shNodePath = normalizedNodePathEnvVar.posix; + let normalizedPrependPathEnvVar = normalizePathEnvVar(opts.prependToPath); + const prependPath = normalizedPrependPathEnvVar.win32; + const shPrependPath = normalizedPrependPathEnvVar.posix; + if (!pwshProg) { + pwshProg = quotedPathToTarget; + args = ''; + shTarget = ''; + } + else if (opts.prog === 'node' && opts.nodeExecPath) { + pwshProg = `"${opts.nodeExecPath}"`; + shTarget = quotedPathToTarget; + } + else { + pwshLongProg = `"$basedir/${opts.prog}$exe"`; + shTarget = quotedPathToTarget; + } + let progArgs = opts.progArgs ? `${opts.progArgs.join(` `)} ` : ''; + // #!/usr/bin/env pwsh + // $basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + // + // $ret=0 + // $exe = "" + // if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + // # Fix case when both the Windows and Linux builds of Node + // # are installed in the same directory + // $exe = ".exe" + // } + // if (Test-Path "$basedir/node") { + // # Support pipeline input + // if ($MyInvocation.ExpectingInput) { + // $input | & "$basedir/node$exe" "$basedir/node_modules/npm/bin/npm-cli.js" $args + // } else { + // & "$basedir/node$exe" "$basedir/node_modules/npm/bin/npm-cli.js" $args + // } + // $ret=$LASTEXITCODE + // } else { + // # Support pipeline input + // if ($MyInvocation.ExpectingInput) { + // $input | & "node$exe" "$basedir/node_modules/npm/bin/npm-cli.js" $args + // } else { + // & "node$exe" "$basedir/node_modules/npm/bin/npm-cli.js" $args + // } + // $ret=$LASTEXITCODE + // } + // exit $ret + let pwsh = `\ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +${(nodePath || prependPath) ? '$pathsep=":"\n' : ''}\ +${nodePath ? `\ +$env_node_path=$env:NODE_PATH +$new_node_path="${nodePath}" +` : ''}\ +${prependPath ? `\ +$env_path=$env:PATH +$prepend_path="${prependPath}" +` : ''}\ +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +${(nodePath || prependPath) ? ' $pathsep=";"\n' : ''}\ +}`; + if (shNodePath || shPrependPath) { + pwsh += `\ + else { +${shNodePath ? ` $new_node_path="${shNodePath}"\n` : ''}\ +${shPrependPath ? ` $prepend_path="${shPrependPath}"\n` : ''}\ +} +`; + } + if (shNodePath) { + pwsh += `\ +if ([string]::IsNullOrEmpty($env_node_path)) { + $env:NODE_PATH=$new_node_path +} else { + $env:NODE_PATH="$env_node_path$pathsep$new_node_path" +} +`; + } + if (opts.prependToPath) { + pwsh += ` +$env:PATH="$prepend_path$pathsep$env:PATH" +`; + } + if (pwshLongProg) { + pwsh += ` +$ret=0 +if (Test-Path ${pwshLongProg}) { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${pwshLongProg} ${args} ${shTarget} ${progArgs}$args + } else { + & ${pwshLongProg} ${args} ${shTarget} ${progArgs}$args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${pwshProg} ${args} ${shTarget} ${progArgs}$args + } else { + & ${pwshProg} ${args} ${shTarget} ${progArgs}$args + } + $ret=$LASTEXITCODE +} +${nodePath ? '$env:NODE_PATH=$env_node_path\n' : ''}\ +${prependPath ? '$env:PATH=$env_path\n' : ''}\ +exit $ret +`; + } + else { + pwsh += ` +# Support pipeline input +if ($MyInvocation.ExpectingInput) { + $input | & ${pwshProg} ${args} ${shTarget} ${progArgs}$args +} else { + & ${pwshProg} ${args} ${shTarget} ${progArgs}$args +} +${nodePath ? '$env:NODE_PATH=$env_node_path\n' : ''}\ +${prependPath ? '$env:PATH=$env_path\n' : ''}\ +exit $LASTEXITCODE +`; + } + return pwsh; +} +/** + * Chmod just created shim and make it executable + * + * @param to Path to shim. + */ +function chmodShim(to, opts) { + return opts.fs_.chmod(to, 0o755); +} +function normalizePathEnvVar(nodePath) { + if (!nodePath || !nodePath.length) { + return { + win32: '', + posix: '' + }; + } + let split = (typeof nodePath === 'string' ? nodePath.split(path.delimiter) : Array.from(nodePath)); + let result = {}; + for (let i = 0; i < split.length; i++) { + const win32 = split[i].split('/').join('\\'); + const posix = isWindows() ? split[i].split('\\').join('/').replace(/^([^:\\/]*):/, (_, $1) => `/mnt/${$1.toLowerCase()}`) : split[i]; + result.win32 = result.win32 ? `${result.win32};${win32}` : win32; + result.posix = result.posix ? `${result.posix}:${posix}` : posix; + result[i] = { win32, posix }; + } + return result; +} +module.exports = cmdShim; +//# sourceMappingURL=index.js.map /***/ }), -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/index.js": -/*!********************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/index.js ***! - \********************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/chownr-npm-2.0.0-638f1c9c61-9.zip/node_modules/chownr/chownr.js": +/*!**************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/chownr-npm-2.0.0-638f1c9c61-9.zip/node_modules/chownr/chownr.js ***! + \**************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; +const fs = __webpack_require__(/*! fs */ "fs") +const path = __webpack_require__(/*! path */ "path") -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var definitions = __webpack_require__(/*! ./definitions.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/definitions.js"); -var help = __webpack_require__(/*! ./help.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/help.js"); -var version = __webpack_require__(/*! ./version.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/version.js"); +/* istanbul ignore next */ +const LCHOWN = fs.lchown ? 'lchown' : 'chown' +/* istanbul ignore next */ +const LCHOWNSYNC = fs.lchownSync ? 'lchownSync' : 'chownSync' +/* istanbul ignore next */ +const needEISDIRHandled = fs.lchown && + !process.version.match(/v1[1-9]+\./) && + !process.version.match(/v10\.[6-9]/) +const lchownSync = (path, uid, gid) => { + try { + return fs[LCHOWNSYNC](path, uid, gid) + } catch (er) { + if (er.code !== 'ENOENT') + throw er + } +} -exports.DefinitionsCommand = definitions.DefinitionsCommand; -exports.HelpCommand = help.HelpCommand; -exports.VersionCommand = version.VersionCommand; +/* istanbul ignore next */ +const chownSync = (path, uid, gid) => { + try { + return fs.chownSync(path, uid, gid) + } catch (er) { + if (er.code !== 'ENOENT') + throw er + } +} +/* istanbul ignore next */ +const handleEISDIR = + needEISDIRHandled ? (path, uid, gid, cb) => er => { + // Node prior to v10 had a very questionable implementation of + // fs.lchown, which would always try to call fs.open on a directory + // Fall back to fs.chown in those cases. + if (!er || er.code !== 'EISDIR') + cb(er) + else + fs.chown(path, uid, gid, cb) + } + : (_, __, ___, cb) => cb -/***/ }), +/* istanbul ignore next */ +const handleEISDirSync = + needEISDIRHandled ? (path, uid, gid) => { + try { + return lchownSync(path, uid, gid) + } catch (er) { + if (er.code !== 'EISDIR') + throw er + chownSync(path, uid, gid) + } + } + : (path, uid, gid) => lchownSync(path, uid, gid) -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/version.js": -/*!**********************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/version.js ***! - \**********************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +// fs.readdir could only accept an options object as of node v6 +const nodeVersion = process.version +let readdir = (path, options, cb) => fs.readdir(path, options, cb) +let readdirSync = (path, options) => fs.readdirSync(path, options) +/* istanbul ignore next */ +if (/^v4\./.test(nodeVersion)) + readdir = (path, options, cb) => fs.readdir(path, cb) -"use strict"; +const chown = (cpath, uid, gid, cb) => { + fs[LCHOWN](cpath, uid, gid, handleEISDIR(cpath, uid, gid, er => { + // Skip ENOENT error + cb(er && er.code !== 'ENOENT' ? er : null) + })) +} +const chownrKid = (p, child, uid, gid, cb) => { + if (typeof child === 'string') + return fs.lstat(path.resolve(p, child), (er, stats) => { + // Skip ENOENT error + if (er) + return cb(er.code !== 'ENOENT' ? er : null) + stats.name = child + chownrKid(p, stats, uid, gid, cb) + }) -Object.defineProperty(exports, "__esModule", ({ value: true })); + if (child.isDirectory()) { + chownr(path.resolve(p, child.name), uid, gid, er => { + if (er) + return cb(er) + const cpath = path.resolve(p, child.name) + chown(cpath, uid, gid, cb) + }) + } else { + const cpath = path.resolve(p, child.name) + chown(cpath, uid, gid, cb) + } +} -var Command = __webpack_require__(/*! ../Command.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Command.js"); -/** - * A command that prints the version of the binary (`cli.binaryVersion`). - * - * Paths: `-v`, `--version` - */ -class VersionCommand extends Command.Command { - async execute() { - var _a; - this.context.stdout.write(`${(_a = this.cli.binaryVersion) !== null && _a !== void 0 ? _a : ``}\n`); +const chownr = (p, uid, gid, cb) => { + readdir(p, { withFileTypes: true }, (er, children) => { + // any error other than ENOTDIR or ENOTSUP means it's not readable, + // or doesn't exist. give up. + if (er) { + if (er.code === 'ENOENT') + return cb() + else if (er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP') + return cb(er) } -} -VersionCommand.paths = [[`-v`], [`--version`]]; - -exports.VersionCommand = VersionCommand; + if (er || !children.length) + return chown(p, uid, gid, cb) + let len = children.length + let errState = null + const then = er => { + if (errState) + return + if (er) + return cb(errState = er) + if (-- len === 0) + return chown(p, uid, gid, cb) + } -/***/ }), + children.forEach(child => chownrKid(p, child, uid, gid, then)) + }) +} -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/index.js": -/*!***********************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/index.js ***! - \***********************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +const chownrKidSync = (p, child, uid, gid) => { + if (typeof child === 'string') { + try { + const stats = fs.lstatSync(path.resolve(p, child)) + stats.name = child + child = stats + } catch (er) { + if (er.code === 'ENOENT') + return + else + throw er + } + } -"use strict"; + if (child.isDirectory()) + chownrSync(path.resolve(p, child.name), uid, gid) + handleEISDirSync(path.resolve(p, child.name), uid, gid) +} -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var errors = __webpack_require__(/*! ../errors.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/errors.js"); -var Command = __webpack_require__(/*! ./Command.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Command.js"); -var Cli = __webpack_require__(/*! ./Cli.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/Cli.js"); -var index = __webpack_require__(/*! ./builtins/index.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/builtins/index.js"); -var index$1 = __webpack_require__(/*! ./options/index.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/index.js"); +const chownrSync = (p, uid, gid) => { + let children + try { + children = readdirSync(p, { withFileTypes: true }) + } catch (er) { + if (er.code === 'ENOENT') + return + else if (er.code === 'ENOTDIR' || er.code === 'ENOTSUP') + return handleEISDirSync(p, uid, gid) + else + throw er + } + if (children && children.length) + children.forEach(child => chownrKidSync(p, child, uid, gid)) + return handleEISDirSync(p, uid, gid) +} -exports.UsageError = errors.UsageError; -exports.Command = Command.Command; -exports.Cli = Cli.Cli; -exports.Builtins = index; -exports.Option = index$1; +module.exports = chownr +chownr.sync = chownrSync /***/ }), -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Array.js": -/*!*******************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Array.js ***! - \*******************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/cmd-extension-npm-1.0.2-11aa204c4b-9.zip/node_modules/cmd-extension/index.js": +/*!***************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/cmd-extension-npm-1.0.2-11aa204c4b-9.zip/node_modules/cmd-extension/index.js ***! + \***************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; +const path = __webpack_require__(/*! path */ "path") -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/utils.js"); +let cmdExtension -function Array(descriptor, initialValueBase, optsBase) { - const [initialValue, opts] = utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); - const { arity = 1 } = opts; - const optNames = descriptor.split(`,`); - const nameSet = new Set(optNames); - return utils.makeCommandOption({ - definition(builder) { - builder.addOption({ - names: optNames, - arity, - hidden: opts === null || opts === void 0 ? void 0 : opts.hidden, - description: opts === null || opts === void 0 ? void 0 : opts.description, - required: opts.required, - }); - }, - transformer(builder, key, state) { - let currentValue = typeof initialValue !== `undefined` - ? [...initialValue] - : undefined; - for (const { name, value } of state.options) { - if (!nameSet.has(name)) - continue; - currentValue = currentValue !== null && currentValue !== void 0 ? currentValue : []; - currentValue.push(value); - } - return currentValue; - }, - }); +if (process.env.PATHEXT) { + cmdExtension = process.env.PATHEXT + .split(path.delimiter) + .find(ext => ext.toUpperCase() === '.CMD') } -exports.Array = Array; +module.exports = cmdExtension || '.cmd' /***/ }), -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Boolean.js": -/*!*********************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Boolean.js ***! - \*********************************************************************************************************************************************************************/ +/***/ "../../../.yarn/berry/cache/fs-minipass-npm-2.1.0-501ef87306-9.zip/node_modules/fs-minipass/index.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/fs-minipass-npm-2.1.0-501ef87306-9.zip/node_modules/fs-minipass/index.js ***! + \***********************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; +const MiniPass = __webpack_require__(/*! minipass */ "../../../.yarn/berry/cache/minipass-npm-3.3.5-a555b091e7-9.zip/node_modules/minipass/index.js") +const EE = (__webpack_require__(/*! events */ "events").EventEmitter) +const fs = __webpack_require__(/*! fs */ "fs") -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/utils.js"); +let writev = fs.writev +/* istanbul ignore next */ +if (!writev) { + // This entire block can be removed if support for earlier than Node.js + // 12.9.0 is not needed. + const binding = process.binding('fs') + const FSReqWrap = binding.FSReqWrap || binding.FSReqCallback -function Boolean(descriptor, initialValueBase, optsBase) { - const [initialValue, opts] = utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); - const optNames = descriptor.split(`,`); - const nameSet = new Set(optNames); - return utils.makeCommandOption({ - definition(builder) { - builder.addOption({ - names: optNames, - allowBinding: false, - arity: 0, - hidden: opts.hidden, - description: opts.description, - required: opts.required, - }); - }, - transformer(builer, key, state) { - let currentValue = initialValue; - for (const { name, value } of state.options) { - if (!nameSet.has(name)) - continue; - currentValue = value; - } - return currentValue; - }, - }); + writev = (fd, iovec, pos, cb) => { + const done = (er, bw) => cb(er, bw, iovec) + const req = new FSReqWrap() + req.oncomplete = done + binding.writeBuffers(fd, iovec, pos, req) + } } -exports.Boolean = Boolean; - +const _autoClose = Symbol('_autoClose') +const _close = Symbol('_close') +const _ended = Symbol('_ended') +const _fd = Symbol('_fd') +const _finished = Symbol('_finished') +const _flags = Symbol('_flags') +const _flush = Symbol('_flush') +const _handleChunk = Symbol('_handleChunk') +const _makeBuf = Symbol('_makeBuf') +const _mode = Symbol('_mode') +const _needDrain = Symbol('_needDrain') +const _onerror = Symbol('_onerror') +const _onopen = Symbol('_onopen') +const _onread = Symbol('_onread') +const _onwrite = Symbol('_onwrite') +const _open = Symbol('_open') +const _path = Symbol('_path') +const _pos = Symbol('_pos') +const _queue = Symbol('_queue') +const _read = Symbol('_read') +const _readSize = Symbol('_readSize') +const _reading = Symbol('_reading') +const _remain = Symbol('_remain') +const _size = Symbol('_size') +const _write = Symbol('_write') +const _writing = Symbol('_writing') +const _defaultFlag = Symbol('_defaultFlag') +const _errored = Symbol('_errored') -/***/ }), +class ReadStream extends MiniPass { + constructor (path, opt) { + opt = opt || {} + super(opt) -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Counter.js": -/*!*********************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Counter.js ***! - \*********************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + this.readable = true + this.writable = false -"use strict"; + if (typeof path !== 'string') + throw new TypeError('path must be a string') + this[_errored] = false + this[_fd] = typeof opt.fd === 'number' ? opt.fd : null + this[_path] = path + this[_readSize] = opt.readSize || 16*1024*1024 + this[_reading] = false + this[_size] = typeof opt.size === 'number' ? opt.size : Infinity + this[_remain] = this[_size] + this[_autoClose] = typeof opt.autoClose === 'boolean' ? + opt.autoClose : true -Object.defineProperty(exports, "__esModule", ({ value: true })); + if (typeof this[_fd] === 'number') + this[_read]() + else + this[_open]() + } -var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/utils.js"); + get fd () { return this[_fd] } + get path () { return this[_path] } -function Counter(descriptor, initialValueBase, optsBase) { - const [initialValue, opts] = utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); - const optNames = descriptor.split(`,`); - const nameSet = new Set(optNames); - return utils.makeCommandOption({ - definition(builder) { - builder.addOption({ - names: optNames, - allowBinding: false, - arity: 0, - hidden: opts.hidden, - description: opts.description, - required: opts.required, - }); - }, - transformer(builder, key, state) { - let currentValue = initialValue; - for (const { name, value } of state.options) { - if (!nameSet.has(name)) - continue; - currentValue !== null && currentValue !== void 0 ? currentValue : (currentValue = 0); - // Negated options reset the counter - if (!value) { - currentValue = 0; - } - else { - currentValue += 1; - } - } - return currentValue; - }, - }); -} + write () { + throw new TypeError('this is a readable stream') + } -exports.Counter = Counter; + end () { + throw new TypeError('this is a readable stream') + } + [_open] () { + fs.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd)) + } -/***/ }), + [_onopen] (er, fd) { + if (er) + this[_onerror](er) + else { + this[_fd] = fd + this.emit('open', fd) + this[_read]() + } + } -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Proxy.js": -/*!*******************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Proxy.js ***! - \*******************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + [_makeBuf] () { + return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain])) + } -"use strict"; + [_read] () { + if (!this[_reading]) { + this[_reading] = true + const buf = this[_makeBuf]() + /* istanbul ignore if */ + if (buf.length === 0) + return process.nextTick(() => this[_onread](null, 0, buf)) + fs.read(this[_fd], buf, 0, buf.length, null, (er, br, buf) => + this[_onread](er, br, buf)) + } + } + [_onread] (er, br, buf) { + this[_reading] = false + if (er) + this[_onerror](er) + else if (this[_handleChunk](br, buf)) + this[_read]() + } -Object.defineProperty(exports, "__esModule", ({ value: true })); + [_close] () { + if (this[_autoClose] && typeof this[_fd] === 'number') { + const fd = this[_fd] + this[_fd] = null + fs.close(fd, er => er ? this.emit('error', er) : this.emit('close')) + } + } -var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/utils.js"); + [_onerror] (er) { + this[_reading] = true + this[_close]() + this.emit('error', er) + } -/** - * Used to annotate that the command wants to retrieve all trailing - * arguments that cannot be tied to a declared option. - * - * Be careful: this function is order-dependent! Make sure to define it - * after any positional argument you want to declare. - * - * This function is mutually exclusive with Option.Rest. - * - * @example - * yarn run foo hello --foo=bar world - * ► proxy = ["hello", "--foo=bar", "world"] - */ -function Proxy(opts = {}) { - return utils.makeCommandOption({ - definition(builder, key) { - var _a; - builder.addProxy({ - name: (_a = opts.name) !== null && _a !== void 0 ? _a : key, - required: opts.required, - }); - }, - transformer(builder, key, state) { - return state.positionals.map(({ value }) => value); - }, - }); -} + [_handleChunk] (br, buf) { + let ret = false + // no effect if infinite + this[_remain] -= br + if (br > 0) + ret = super.write(br < buf.length ? buf.slice(0, br) : buf) -exports.Proxy = Proxy; + if (br === 0 || this[_remain] <= 0) { + ret = false + this[_close]() + super.end() + } + return ret + } -/***/ }), + emit (ev, data) { + switch (ev) { + case 'prefinish': + case 'finish': + break -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Rest.js": -/*!******************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Rest.js ***! - \******************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + case 'drain': + if (typeof this[_fd] === 'number') + this[_read]() + break -"use strict"; + case 'error': + if (this[_errored]) + return + this[_errored] = true + return super.emit(ev, data) + default: + return super.emit(ev, data) + } + } +} -Object.defineProperty(exports, "__esModule", ({ value: true })); +class ReadStreamSync extends ReadStream { + [_open] () { + let threw = true + try { + this[_onopen](null, fs.openSync(this[_path], 'r')) + threw = false + } finally { + if (threw) + this[_close]() + } + } -var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/utils.js"); -var core = __webpack_require__(/*! ../../core.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/core.js"); + [_read] () { + let threw = true + try { + if (!this[_reading]) { + this[_reading] = true + do { + const buf = this[_makeBuf]() + /* istanbul ignore next */ + const br = buf.length === 0 ? 0 + : fs.readSync(this[_fd], buf, 0, buf.length, null) + if (!this[_handleChunk](br, buf)) + break + } while (true) + this[_reading] = false + } + threw = false + } finally { + if (threw) + this[_close]() + } + } -/** - * Used to annotate that the command supports any number of positional - * arguments. - * - * Be careful: this function is order-dependent! Make sure to define it - * after any positional argument you want to declare. - * - * This function is mutually exclusive with Option.Proxy. - * - * @example - * yarn add hello world - * ► rest = ["hello", "world"] - */ -function Rest(opts = {}) { - return utils.makeCommandOption({ - definition(builder, key) { - var _a; - builder.addRest({ - name: (_a = opts.name) !== null && _a !== void 0 ? _a : key, - required: opts.required, - }); - }, - transformer(builder, key, state) { - // The builder's arity.extra will always be NoLimits, - // because it is set when we call registerDefinition - const isRestPositional = (index) => { - const positional = state.positionals[index]; - // A NoLimits extra (i.e. an optional rest argument) - if (positional.extra === core.NoLimits) - return true; - // A leading positional (i.e. a required rest argument) - if (positional.extra === false && index < builder.arity.leading.length) - return true; - return false; - }; - let count = 0; - while (count < state.positionals.length && isRestPositional(count)) - count += 1; - return state.positionals.splice(0, count).map(({ value }) => value); - }, - }); + [_close] () { + if (this[_autoClose] && typeof this[_fd] === 'number') { + const fd = this[_fd] + this[_fd] = null + fs.closeSync(fd) + this.emit('close') + } + } } -exports.Rest = Rest; +class WriteStream extends EE { + constructor (path, opt) { + opt = opt || {} + super(opt) + this.readable = false + this.writable = true + this[_errored] = false + this[_writing] = false + this[_ended] = false + this[_needDrain] = false + this[_queue] = [] + this[_path] = path + this[_fd] = typeof opt.fd === 'number' ? opt.fd : null + this[_mode] = opt.mode === undefined ? 0o666 : opt.mode + this[_pos] = typeof opt.start === 'number' ? opt.start : null + this[_autoClose] = typeof opt.autoClose === 'boolean' ? + opt.autoClose : true + // truncating makes no sense when writing into the middle + const defaultFlag = this[_pos] !== null ? 'r+' : 'w' + this[_defaultFlag] = opt.flags === undefined + this[_flags] = this[_defaultFlag] ? defaultFlag : opt.flags -/***/ }), + if (this[_fd] === null) + this[_open]() + } -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/String.js": -/*!********************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/String.js ***! - \********************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + emit (ev, data) { + if (ev === 'error') { + if (this[_errored]) + return + this[_errored] = true + } + return super.emit(ev, data) + } -"use strict"; + get fd () { return this[_fd] } + get path () { return this[_path] } -Object.defineProperty(exports, "__esModule", ({ value: true })); + [_onerror] (er) { + this[_close]() + this[_writing] = true + this.emit('error', er) + } -var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/utils.js"); -var core = __webpack_require__(/*! ../../core.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/core.js"); + [_open] () { + fs.open(this[_path], this[_flags], this[_mode], + (er, fd) => this[_onopen](er, fd)) + } -function StringOption(descriptor, initialValueBase, optsBase) { - const [initialValue, opts] = utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); - const { arity = 1 } = opts; - const optNames = descriptor.split(`,`); - const nameSet = new Set(optNames); - return utils.makeCommandOption({ - definition(builder) { - builder.addOption({ - names: optNames, - arity: opts.tolerateBoolean ? 0 : arity, - hidden: opts.hidden, - description: opts.description, - required: opts.required, - }); - }, - transformer(builder, key, state) { - let usedName; - let currentValue = initialValue; - for (const { name, value } of state.options) { - if (!nameSet.has(name)) - continue; - usedName = name; - currentValue = value; - } - if (typeof currentValue === `string`) { - return utils.applyValidator(usedName !== null && usedName !== void 0 ? usedName : key, currentValue, opts.validator); - } - else { - return currentValue; - } - }, - }); -} -function StringPositional(opts = {}) { - const { required = true } = opts; - return utils.makeCommandOption({ - definition(builder, key) { - var _a; - builder.addPositional({ - name: (_a = opts.name) !== null && _a !== void 0 ? _a : key, - required: opts.required, - }); - }, - transformer(builder, key, state) { - var _a; - for (let i = 0; i < state.positionals.length; ++i) { - // We skip NoLimits extras. We only care about - // required and optional finite positionals. - if (state.positionals[i].extra === core.NoLimits) - continue; - // We skip optional positionals when we only - // care about required positionals. - if (required && state.positionals[i].extra === true) - continue; - // We skip required positionals when we only - // care about optional positionals. - if (!required && state.positionals[i].extra === false) - continue; - // We remove the positional from the list - const [positional] = state.positionals.splice(i, 1); - return utils.applyValidator((_a = opts.name) !== null && _a !== void 0 ? _a : key, positional.value, opts.validator); - } - return undefined; - }, - }); -} -// This function is badly typed, but it doesn't matter because the overloads provide the true public typings -function String(descriptor, ...args) { - if (typeof descriptor === `string`) { - return StringOption(descriptor, ...args); - } + [_onopen] (er, fd) { + if (this[_defaultFlag] && + this[_flags] === 'r+' && + er && er.code === 'ENOENT') { + this[_flags] = 'w' + this[_open]() + } else if (er) + this[_onerror](er) else { - return StringPositional(descriptor); + this[_fd] = fd + this.emit('open', fd) + this[_flush]() } -} - -exports.String = String; - - -/***/ }), - -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/index.js": -/*!*******************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/index.js ***! - \*******************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + } -"use strict"; + end (buf, enc) { + if (buf) + this.write(buf, enc) + this[_ended] = true -Object.defineProperty(exports, "__esModule", ({ value: true })); + // synthetic after-write logic, where drain/finish live + if (!this[_writing] && !this[_queue].length && + typeof this[_fd] === 'number') + this[_onwrite](null, 0) + return this + } -var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/utils.js"); -var _Array = __webpack_require__(/*! ./Array.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Array.js"); -var _Boolean = __webpack_require__(/*! ./Boolean.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Boolean.js"); -var Counter = __webpack_require__(/*! ./Counter.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Counter.js"); -var _Proxy = __webpack_require__(/*! ./Proxy.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Proxy.js"); -var Rest = __webpack_require__(/*! ./Rest.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/Rest.js"); -var _String = __webpack_require__(/*! ./String.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/String.js"); + write (buf, enc) { + if (typeof buf === 'string') + buf = Buffer.from(buf, enc) + if (this[_ended]) { + this.emit('error', new Error('write() after end()')) + return false + } + if (this[_fd] === null || this[_writing] || this[_queue].length) { + this[_queue].push(buf) + this[_needDrain] = true + return false + } -exports.applyValidator = utils.applyValidator; -exports.cleanValidationError = utils.cleanValidationError; -exports.formatError = utils.formatError; -exports.isOptionSymbol = utils.isOptionSymbol; -exports.makeCommandOption = utils.makeCommandOption; -exports.rerouteArguments = utils.rerouteArguments; -exports.Array = _Array.Array; -exports.Boolean = _Boolean.Boolean; -exports.Counter = Counter.Counter; -exports.Proxy = _Proxy.Proxy; -exports.Rest = Rest.Rest; -exports.String = _String.String; + this[_writing] = true + this[_write](buf) + return true + } + [_write] (buf) { + fs.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) => + this[_onwrite](er, bw)) + } -/***/ }), + [_onwrite] (er, bw) { + if (er) + this[_onerror](er) + else { + if (this[_pos] !== null) + this[_pos] += bw + if (this[_queue].length) + this[_flush]() + else { + this[_writing] = false -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/utils.js": -/*!*******************************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/options/utils.js ***! - \*******************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + if (this[_ended] && !this[_finished]) { + this[_finished] = true + this[_close]() + this.emit('finish') + } else if (this[_needDrain]) { + this[_needDrain] = false + this.emit('drain') + } + } + } + } -"use strict"; + [_flush] () { + if (this[_queue].length === 0) { + if (this[_ended]) + this[_onwrite](null, 0) + } else if (this[_queue].length === 1) + this[_write](this[_queue].pop()) + else { + const iovec = this[_queue] + this[_queue] = [] + writev(this[_fd], iovec, this[_pos], + (er, bw) => this[_onwrite](er, bw)) + } + } + [_close] () { + if (this[_autoClose] && typeof this[_fd] === 'number') { + const fd = this[_fd] + this[_fd] = null + fs.close(fd, er => er ? this.emit('error', er) : this.emit('close')) + } + } +} -Object.defineProperty(exports, "__esModule", ({ value: true })); +class WriteStreamSync extends WriteStream { + [_open] () { + let fd + // only wrap in a try{} block if we know we'll retry, to avoid + // the rethrow obscuring the error's source frame in most cases. + if (this[_defaultFlag] && this[_flags] === 'r+') { + try { + fd = fs.openSync(this[_path], this[_flags], this[_mode]) + } catch (er) { + if (er.code === 'ENOENT') { + this[_flags] = 'w' + return this[_open]() + } else + throw er + } + } else + fd = fs.openSync(this[_path], this[_flags], this[_mode]) -var errors = __webpack_require__(/*! ../../errors.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/errors.js"); + this[_onopen](null, fd) + } -const isOptionSymbol = Symbol(`clipanion/isOption`); -function makeCommandOption(spec) { - // We lie! But it's for the good cause: the cli engine will turn the specs into proper values after instantiation. - return { ...spec, [isOptionSymbol]: true }; -} -function rerouteArguments(a, b) { - if (typeof a === `undefined`) - return [a, b]; - if (typeof a === `object` && a !== null && !Array.isArray(a)) { - return [undefined, a]; - } - else { - return [a, b]; - } -} -function cleanValidationError(message, lowerCase = false) { - let cleaned = message.replace(/^\.: /, ``); - if (lowerCase) - cleaned = cleaned[0].toLowerCase() + cleaned.slice(1); - return cleaned; -} -function formatError(message, errors$1) { - if (errors$1.length === 1) { - return new errors.UsageError(`${message}: ${cleanValidationError(errors$1[0], true)}`); + [_close] () { + if (this[_autoClose] && typeof this[_fd] === 'number') { + const fd = this[_fd] + this[_fd] = null + fs.closeSync(fd) + this.emit('close') } - else { - return new errors.UsageError(`${message}:\n${errors$1.map(error => `\n- ${cleanValidationError(error)}`).join(``)}`); + } + + [_write] (buf) { + // throw the original, but try to close if it fails + let threw = true + try { + this[_onwrite](null, + fs.writeSync(this[_fd], buf, 0, buf.length, this[_pos])) + threw = false + } finally { + if (threw) + try { this[_close]() } catch (_) {} } -} -function applyValidator(name, value, validator) { - if (typeof validator === `undefined`) - return value; - const errors = []; - const coercions = []; - const coercion = (v) => { - const orig = value; - value = v; - return coercion.bind(null, orig); - }; - const check = validator(value, { errors, coercions, coercion }); - if (!check) - throw formatError(`Invalid value for ${name}`, errors); - for (const [, op] of coercions) - op(); - return value; + } } -exports.applyValidator = applyValidator; -exports.cleanValidationError = cleanValidationError; -exports.formatError = formatError; -exports.isOptionSymbol = isOptionSymbol; -exports.makeCommandOption = makeCommandOption; -exports.rerouteArguments = rerouteArguments; +exports.ReadStream = ReadStream +exports.ReadStreamSync = ReadStreamSync + +exports.WriteStream = WriteStream +exports.WriteStreamSync = WriteStreamSync /***/ }), -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/constants.js": -/*!******************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/constants.js ***! - \******************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports) => { +/***/ "../../../.yarn/berry/cache/is-windows-npm-1.0.2-898cd6f3d7-9.zip/node_modules/is-windows/index.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/is-windows-npm-1.0.2-898cd6f3d7-9.zip/node_modules/is-windows/index.js ***! + \*********************************************************************************************************/ +/***/ ((module, exports) => { -"use strict"; +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * is-windows + * + * Copyright © 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */ +(function(factory) { + if (exports && typeof exports === 'object' && "object" !== 'undefined') { + module.exports = factory(); + } else if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else {} +})(function() { + 'use strict'; + return function isWindows() { + return process && (process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE)); + }; +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); -const NODE_INITIAL = 0; -const NODE_SUCCESS = 1; -const NODE_ERRORED = 2; -const START_OF_INPUT = `\u0001`; -const END_OF_INPUT = `\u0000`; -const HELP_COMMAND_INDEX = -1; -const HELP_REGEX = /^(-h|--help)(?:=([0-9]+))?$/; -const OPTION_REGEX = /^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/; -const BATCH_REGEX = /^-[a-zA-Z]{2,}$/; -const BINDING_REGEX = /^([^=]+)=([\s\S]*)$/; -const DEBUG = process.env.DEBUG_CLI === `1`; +/***/ }), -exports.BATCH_REGEX = BATCH_REGEX; -exports.BINDING_REGEX = BINDING_REGEX; -exports.DEBUG = DEBUG; -exports.END_OF_INPUT = END_OF_INPUT; -exports.HELP_COMMAND_INDEX = HELP_COMMAND_INDEX; -exports.HELP_REGEX = HELP_REGEX; -exports.NODE_ERRORED = NODE_ERRORED; -exports.NODE_INITIAL = NODE_INITIAL; -exports.NODE_SUCCESS = NODE_SUCCESS; -exports.OPTION_REGEX = OPTION_REGEX; -exports.START_OF_INPUT = START_OF_INPUT; +/***/ "../../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-9.zip/node_modules/isexe/index.js": +/*!***********************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-9.zip/node_modules/isexe/index.js ***! + \***********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fs = __webpack_require__(/*! fs */ "fs") +var core +if (process.platform === 'win32' || global.TESTING_WINDOWS) { + core = __webpack_require__(/*! ./windows.js */ "../../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-9.zip/node_modules/isexe/windows.js") +} else { + core = __webpack_require__(/*! ./mode.js */ "../../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-9.zip/node_modules/isexe/mode.js") +} + +module.exports = isexe +isexe.sync = sync + +function isexe (path, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } + + if (!cb) { + if (typeof Promise !== 'function') { + throw new TypeError('callback not provided') + } + + return new Promise(function (resolve, reject) { + isexe(path, options || {}, function (er, is) { + if (er) { + reject(er) + } else { + resolve(is) + } + }) + }) + } + + core(path, options || {}, function (er, is) { + // ignore EACCES because that just means we aren't allowed to run it + if (er) { + if (er.code === 'EACCES' || options && options.ignoreErrors) { + er = null + is = false + } + } + cb(er, is) + }) +} + +function sync (path, options) { + // my kingdom for a filtered catch + try { + return core.sync(path, options || {}) + } catch (er) { + if (options && options.ignoreErrors || er.code === 'EACCES') { + return false + } else { + throw er + } + } +} /***/ }), -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/core.js": -/*!*************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/core.js ***! - \*************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-9.zip/node_modules/isexe/mode.js": +/*!**********************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-9.zip/node_modules/isexe/mode.js ***! + \**********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +module.exports = isexe +isexe.sync = sync +var fs = __webpack_require__(/*! fs */ "fs") -Object.defineProperty(exports, "__esModule", ({ value: true })); +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, options)) + }) +} -var constants = __webpack_require__(/*! ./constants.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/constants.js"); -var errors = __webpack_require__(/*! ./errors.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/errors.js"); +function sync (path, options) { + return checkStat(fs.statSync(path), options) +} -// ------------------------------------------------------------------------ -function debug(str) { - if (constants.DEBUG) { - console.log(str); - } +function checkStat (stat, options) { + return stat.isFile() && checkMode(stat, options) } -const basicHelpState = { - candidateUsage: null, - requiredOptions: [], - errorMessage: null, - ignoreOptions: false, - path: [], - positionals: [], - options: [], - remainder: null, - selectedIndex: constants.HELP_COMMAND_INDEX, -}; -function makeStateMachine() { - return { - nodes: [makeNode(), makeNode(), makeNode()], - }; + +function checkMode (stat, options) { + var mod = stat.mode + var uid = stat.uid + var gid = stat.gid + + var myUid = options.uid !== undefined ? + options.uid : process.getuid && process.getuid() + var myGid = options.gid !== undefined ? + options.gid : process.getgid && process.getgid() + + var u = parseInt('100', 8) + var g = parseInt('010', 8) + var o = parseInt('001', 8) + var ug = u | g + + var ret = (mod & o) || + (mod & g) && gid === myGid || + (mod & u) && uid === myUid || + (mod & ug) && myUid === 0 + + return ret } -function makeAnyOfMachine(inputs) { - const output = makeStateMachine(); - const heads = []; - let offset = output.nodes.length; - for (const input of inputs) { - heads.push(offset); - for (let t = 0; t < input.nodes.length; ++t) - if (!isTerminalNode(t)) - output.nodes.push(cloneNode(input.nodes[t], offset)); - offset += input.nodes.length - 2; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-9.zip/node_modules/isexe/windows.js": +/*!*************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-9.zip/node_modules/isexe/windows.js ***! + \*************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = isexe +isexe.sync = sync + +var fs = __webpack_require__(/*! fs */ "fs") + +function checkPathExt (path, options) { + var pathext = options.pathExt !== undefined ? + options.pathExt : process.env.PATHEXT + + if (!pathext) { + return true + } + + pathext = pathext.split(';') + if (pathext.indexOf('') !== -1) { + return true + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase() + if (p && path.substr(-p.length).toLowerCase() === p) { + return true } - for (const head of heads) - registerShortcut(output, constants.NODE_INITIAL, head); - return output; + } + return false } -function injectNode(machine, node) { - machine.nodes.push(node); - return machine.nodes.length - 1; + +function checkStat (stat, path, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false + } + return checkPathExt(path, options) } -function simplifyMachine(input) { - const visited = new Set(); - const process = (node) => { - if (visited.has(node)) - return; - visited.add(node); - const nodeDef = input.nodes[node]; - for (const transitions of Object.values(nodeDef.statics)) - for (const { to } of transitions) - process(to); - for (const [, { to }] of nodeDef.dynamics) - process(to); - for (const { to } of nodeDef.shortcuts) - process(to); - const shortcuts = new Set(nodeDef.shortcuts.map(({ to }) => to)); - while (nodeDef.shortcuts.length > 0) { - const { to } = nodeDef.shortcuts.shift(); - const toDef = input.nodes[to]; - for (const [segment, transitions] of Object.entries(toDef.statics)) { - const store = !Object.prototype.hasOwnProperty.call(nodeDef.statics, segment) - ? nodeDef.statics[segment] = [] - : nodeDef.statics[segment]; - for (const transition of transitions) { - if (!store.some(({ to }) => transition.to === to)) { - store.push(transition); - } - } - } - for (const [test, transition] of toDef.dynamics) - if (!nodeDef.dynamics.some(([otherTest, { to }]) => test === otherTest && transition.to === to)) - nodeDef.dynamics.push([test, transition]); - for (const transition of toDef.shortcuts) { - if (!shortcuts.has(transition.to)) { - nodeDef.shortcuts.push(transition); - shortcuts.add(transition.to); - } - } - } - }; - process(constants.NODE_INITIAL); + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, path, options)) + }) } -function debugMachine(machine, { prefix = `` } = {}) { - // Don't iterate unless it's needed - if (constants.DEBUG) { - debug(`${prefix}Nodes are:`); - for (let t = 0; t < machine.nodes.length; ++t) { - debug(`${prefix} ${t}: ${JSON.stringify(machine.nodes[t])}`); - } - } + +function sync (path, options) { + return checkStat(fs.statSync(path), path, options) } -function runMachineInternal(machine, input, partial = false) { - debug(`Running a vm on ${JSON.stringify(input)}`); - let branches = [{ node: constants.NODE_INITIAL, state: { - candidateUsage: null, - requiredOptions: [], - errorMessage: null, - ignoreOptions: false, - options: [], - path: [], - positionals: [], - remainder: null, - selectedIndex: null, - } }]; - debugMachine(machine, { prefix: ` ` }); - const tokens = [constants.START_OF_INPUT, ...input]; - for (let t = 0; t < tokens.length; ++t) { - const segment = tokens[t]; - debug(` Processing ${JSON.stringify(segment)}`); - const nextBranches = []; - for (const { node, state } of branches) { - debug(` Current node is ${node}`); - const nodeDef = machine.nodes[node]; - if (node === constants.NODE_ERRORED) { - nextBranches.push({ node, state }); - continue; - } - console.assert(nodeDef.shortcuts.length === 0, `Shortcuts should have been eliminated by now`); - const hasExactMatch = Object.prototype.hasOwnProperty.call(nodeDef.statics, segment); - if (!partial || t < tokens.length - 1 || hasExactMatch) { - if (hasExactMatch) { - const transitions = nodeDef.statics[segment]; - for (const { to, reducer } of transitions) { - nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); - debug(` Static transition to ${to} found`); - } - } - else { - debug(` No static transition found`); - } - } - else { - let hasMatches = false; - for (const candidate of Object.keys(nodeDef.statics)) { - if (!candidate.startsWith(segment)) - continue; - if (segment === candidate) { - for (const { to, reducer } of nodeDef.statics[candidate]) { - nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); - debug(` Static transition to ${to} found`); - } - } - else { - for (const { to } of nodeDef.statics[candidate]) { - nextBranches.push({ node: to, state: { ...state, remainder: candidate.slice(segment.length) } }); - debug(` Static transition to ${to} found (partial match)`); - } - } - hasMatches = true; - } - if (!hasMatches) { - debug(` No partial static transition found`); - } - } - if (segment !== constants.END_OF_INPUT) { - for (const [test, { to, reducer }] of nodeDef.dynamics) { - if (execute(tests, test, state, segment)) { - nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); - debug(` Dynamic transition to ${to} found (via ${test})`); - } - } - } - } - if (nextBranches.length === 0 && segment === constants.END_OF_INPUT && input.length === 1) { - return [{ - node: constants.NODE_INITIAL, - state: basicHelpState, - }]; - } - if (nextBranches.length === 0) { - throw new errors.UnknownSyntaxError(input, branches.filter(({ node }) => { - return node !== constants.NODE_ERRORED; - }).map(({ state }) => { - return { usage: state.candidateUsage, reason: null }; - })); - } - if (nextBranches.every(({ node }) => node === constants.NODE_ERRORED)) { - throw new errors.UnknownSyntaxError(input, nextBranches.map(({ state }) => { - return { usage: state.candidateUsage, reason: state.errorMessage }; - })); - } - branches = trimSmallerBranches(nextBranches); + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/lru-cache-npm-6.0.0-b4c8668fe1-9.zip/node_modules/lru-cache/index.js": +/*!*******************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/lru-cache-npm-6.0.0-b4c8668fe1-9.zip/node_modules/lru-cache/index.js ***! + \*******************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +// A linked list to keep track of recently-used-ness +const Yallist = __webpack_require__(/*! yallist */ "../../../.yarn/berry/cache/yallist-npm-4.0.0-b493d9e907-9.zip/node_modules/yallist/yallist.js") + +const MAX = Symbol('max') +const LENGTH = Symbol('length') +const LENGTH_CALCULATOR = Symbol('lengthCalculator') +const ALLOW_STALE = Symbol('allowStale') +const MAX_AGE = Symbol('maxAge') +const DISPOSE = Symbol('dispose') +const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') +const LRU_LIST = Symbol('lruList') +const CACHE = Symbol('cache') +const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') + +const naiveLength = () => 1 + +// lruList is a yallist where the head is the youngest +// item, and the tail is the oldest. the list contains the Hit +// objects as the entries. +// Each Hit object has a reference to its Yallist.Node. This +// never changes. +// +// cache is a Map (or PseudoMap) that matches the keys to +// the Yallist.Node object. +class LRUCache { + constructor (options) { + if (typeof options === 'number') + options = { max: options } + + if (!options) + options = {} + + if (options.max && (typeof options.max !== 'number' || options.max < 0)) + throw new TypeError('max must be a non-negative number') + // Kind of weird to have a default max of Infinity, but oh well. + const max = this[MAX] = options.max || Infinity + + const lc = options.length || naiveLength + this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc + this[ALLOW_STALE] = options.stale || false + if (options.maxAge && typeof options.maxAge !== 'number') + throw new TypeError('maxAge must be a number') + this[MAX_AGE] = options.maxAge || 0 + this[DISPOSE] = options.dispose + this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false + this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false + this.reset() + } + + // resize the cache when the max changes. + set max (mL) { + if (typeof mL !== 'number' || mL < 0) + throw new TypeError('max must be a non-negative number') + + this[MAX] = mL || Infinity + trim(this) + } + get max () { + return this[MAX] + } + + set allowStale (allowStale) { + this[ALLOW_STALE] = !!allowStale + } + get allowStale () { + return this[ALLOW_STALE] + } + + set maxAge (mA) { + if (typeof mA !== 'number') + throw new TypeError('maxAge must be a non-negative number') + + this[MAX_AGE] = mA + trim(this) + } + get maxAge () { + return this[MAX_AGE] + } + + // resize the cache when the lengthCalculator changes. + set lengthCalculator (lC) { + if (typeof lC !== 'function') + lC = naiveLength + + if (lC !== this[LENGTH_CALCULATOR]) { + this[LENGTH_CALCULATOR] = lC + this[LENGTH] = 0 + this[LRU_LIST].forEach(hit => { + hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) + this[LENGTH] += hit.length + }) } - if (branches.length > 0) { - debug(` Results:`); - for (const branch of branches) { - debug(` - ${branch.node} -> ${JSON.stringify(branch.state)}`); + trim(this) + } + get lengthCalculator () { return this[LENGTH_CALCULATOR] } + + get length () { return this[LENGTH] } + get itemCount () { return this[LRU_LIST].length } + + rforEach (fn, thisp) { + thisp = thisp || this + for (let walker = this[LRU_LIST].tail; walker !== null;) { + const prev = walker.prev + forEachStep(this, fn, walker, thisp) + walker = prev + } + } + + forEach (fn, thisp) { + thisp = thisp || this + for (let walker = this[LRU_LIST].head; walker !== null;) { + const next = walker.next + forEachStep(this, fn, walker, thisp) + walker = next + } + } + + keys () { + return this[LRU_LIST].toArray().map(k => k.key) + } + + values () { + return this[LRU_LIST].toArray().map(k => k.value) + } + + reset () { + if (this[DISPOSE] && + this[LRU_LIST] && + this[LRU_LIST].length) { + this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) + } + + this[CACHE] = new Map() // hash of items by key + this[LRU_LIST] = new Yallist() // list of items in order of use recency + this[LENGTH] = 0 // length of items in the list + } + + dump () { + return this[LRU_LIST].map(hit => + isStale(this, hit) ? false : { + k: hit.key, + v: hit.value, + e: hit.now + (hit.maxAge || 0) + }).toArray().filter(h => h) + } + + dumpLru () { + return this[LRU_LIST] + } + + set (key, value, maxAge) { + maxAge = maxAge || this[MAX_AGE] + + if (maxAge && typeof maxAge !== 'number') + throw new TypeError('maxAge must be a number') + + const now = maxAge ? Date.now() : 0 + const len = this[LENGTH_CALCULATOR](value, key) + + if (this[CACHE].has(key)) { + if (len > this[MAX]) { + del(this, this[CACHE].get(key)) + return false + } + + const node = this[CACHE].get(key) + const item = node.value + + // dispose of the old one before overwriting + // split out into 2 ifs for better coverage tracking + if (this[DISPOSE]) { + if (!this[NO_DISPOSE_ON_SET]) + this[DISPOSE](key, item.value) + } + + item.now = now + item.maxAge = maxAge + item.value = value + this[LENGTH] += len - item.length + item.length = len + this.get(key) + trim(this) + return true + } + + const hit = new Entry(key, value, len, now, maxAge) + + // oversized objects fall out of cache automatically. + if (hit.length > this[MAX]) { + if (this[DISPOSE]) + this[DISPOSE](key, value) + + return false + } + + this[LENGTH] += hit.length + this[LRU_LIST].unshift(hit) + this[CACHE].set(key, this[LRU_LIST].head) + trim(this) + return true + } + + has (key) { + if (!this[CACHE].has(key)) return false + const hit = this[CACHE].get(key).value + return !isStale(this, hit) + } + + get (key) { + return get(this, key, true) + } + + peek (key) { + return get(this, key, false) + } + + pop () { + const node = this[LRU_LIST].tail + if (!node) + return null + + del(this, node) + return node.value + } + + del (key) { + del(this, this[CACHE].get(key)) + } + + load (arr) { + // reset the cache + this.reset() + + const now = Date.now() + // A previous serialized cache has the most recent items first + for (let l = arr.length - 1; l >= 0; l--) { + const hit = arr[l] + const expiresAt = hit.e || 0 + if (expiresAt === 0) + // the item was created without expiration in a non aged cache + this.set(hit.k, hit.v) + else { + const maxAge = expiresAt - now + // dont add already expired items + if (maxAge > 0) { + this.set(hit.k, hit.v, maxAge) } + } } - else { - debug(` No results`); + } + + prune () { + this[CACHE].forEach((value, key) => get(this, key, false)) + } +} + +const get = (self, key, doUse) => { + const node = self[CACHE].get(key) + if (node) { + const hit = node.value + if (isStale(self, hit)) { + del(self, node) + if (!self[ALLOW_STALE]) + return undefined + } else { + if (doUse) { + if (self[UPDATE_AGE_ON_GET]) + node.value.now = Date.now() + self[LRU_LIST].unshiftNode(node) + } } - return branches; + return hit.value + } } -function checkIfNodeIsFinished(node, state) { - if (state.selectedIndex !== null) - return true; - if (Object.prototype.hasOwnProperty.call(node.statics, constants.END_OF_INPUT)) - for (const { to } of node.statics[constants.END_OF_INPUT]) - if (to === constants.NODE_SUCCESS) - return true; - return false; + +const isStale = (self, hit) => { + if (!hit || (!hit.maxAge && !self[MAX_AGE])) + return false + + const diff = Date.now() - hit.now + return hit.maxAge ? diff > hit.maxAge + : self[MAX_AGE] && (diff > self[MAX_AGE]) } -function suggestMachine(machine, input, partial) { - // If we're accepting partial matches, then exact matches need to be - // prefixed with an extra space. - const prefix = partial && input.length > 0 ? [``] : []; - const branches = runMachineInternal(machine, input, partial); - const suggestions = []; - const suggestionsJson = new Set(); - const traverseSuggestion = (suggestion, node, skipFirst = true) => { - let nextNodes = [node]; - while (nextNodes.length > 0) { - const currentNodes = nextNodes; - nextNodes = []; - for (const node of currentNodes) { - const nodeDef = machine.nodes[node]; - const keys = Object.keys(nodeDef.statics); - // The fact that `key` is unused is likely a bug, but no one has investigated it yet. - // TODO: Investigate it. - // eslint-disable-next-line @typescript-eslint/no-unused-vars - for (const key of Object.keys(nodeDef.statics)) { - const segment = keys[0]; - for (const { to, reducer } of nodeDef.statics[segment]) { - if (reducer !== `pushPath`) - continue; - if (!skipFirst) - suggestion.push(segment); - nextNodes.push(to); - } - } - } - skipFirst = false; - } - const json = JSON.stringify(suggestion); - if (suggestionsJson.has(json)) - return; - suggestions.push(suggestion); - suggestionsJson.add(json); - }; - for (const { node, state } of branches) { - if (state.remainder !== null) { - traverseSuggestion([state.remainder], node); - continue; - } - const nodeDef = machine.nodes[node]; - const isFinished = checkIfNodeIsFinished(nodeDef, state); - for (const [candidate, transitions] of Object.entries(nodeDef.statics)) - if ((isFinished && candidate !== constants.END_OF_INPUT) || (!candidate.startsWith(`-`) && transitions.some(({ reducer }) => reducer === `pushPath`))) - traverseSuggestion([...prefix, candidate], node); - if (!isFinished) - continue; - for (const [test, { to }] of nodeDef.dynamics) { - if (to === constants.NODE_ERRORED) - continue; - const tokens = suggest(test, state); - if (tokens === null) - continue; - for (const token of tokens) { - traverseSuggestion([...prefix, token], node); - } - } + +const trim = self => { + if (self[LENGTH] > self[MAX]) { + for (let walker = self[LRU_LIST].tail; + self[LENGTH] > self[MAX] && walker !== null;) { + // We know that we're about to delete this one, and also + // what the next least recently used key will be, so just + // go ahead and set it now. + const prev = walker.prev + del(self, walker) + walker = prev } - return [...suggestions].sort(); -} -function runMachine(machine, input) { - const branches = runMachineInternal(machine, [...input, constants.END_OF_INPUT]); - return selectBestState(input, branches.map(({ state }) => { - return state; - })); + } } -function trimSmallerBranches(branches) { - let maxPathSize = 0; - for (const { state } of branches) - if (state.path.length > maxPathSize) - maxPathSize = state.path.length; - return branches.filter(({ state }) => { - return state.path.length === maxPathSize; - }); -} -function selectBestState(input, states) { - const terminalStates = states.filter(state => { - return state.selectedIndex !== null; - }); - if (terminalStates.length === 0) - throw new Error(); - const requiredOptionsSetStates = terminalStates.filter(state => state.requiredOptions.every(names => names.some(name => state.options.find(opt => opt.name === name)))); - if (requiredOptionsSetStates.length === 0) { - throw new errors.UnknownSyntaxError(input, terminalStates.map(state => ({ - usage: state.candidateUsage, - reason: null, - }))); - } - let maxPathSize = 0; - for (const state of requiredOptionsSetStates) - if (state.path.length > maxPathSize) - maxPathSize = state.path.length; - const bestPathBranches = requiredOptionsSetStates.filter(state => { - return state.path.length === maxPathSize; - }); - const getPositionalCount = (state) => state.positionals.filter(({ extra }) => { - return !extra; - }).length + state.options.length; - const statesWithPositionalCount = bestPathBranches.map(state => { - return { state, positionalCount: getPositionalCount(state) }; - }); - let maxPositionalCount = 0; - for (const { positionalCount } of statesWithPositionalCount) - if (positionalCount > maxPositionalCount) - maxPositionalCount = positionalCount; - const bestPositionalStates = statesWithPositionalCount.filter(({ positionalCount }) => { - return positionalCount === maxPositionalCount; - }).map(({ state }) => { - return state; - }); - const fixedStates = aggregateHelpStates(bestPositionalStates); - if (fixedStates.length > 1) - throw new errors.AmbiguousSyntaxError(input, fixedStates.map(state => state.candidateUsage)); - return fixedStates[0]; -} -function aggregateHelpStates(states) { - const notHelps = []; - const helps = []; - for (const state of states) { - if (state.selectedIndex === constants.HELP_COMMAND_INDEX) { - helps.push(state); - } - else { - notHelps.push(state); - } - } - if (helps.length > 0) { - notHelps.push({ - ...basicHelpState, - path: findCommonPrefix(...helps.map(state => state.path)), - options: helps.reduce((options, state) => options.concat(state.options), []), - }); - } - return notHelps; -} -function findCommonPrefix(firstPath, secondPath, ...rest) { - if (secondPath === undefined) - return Array.from(firstPath); - return findCommonPrefix(firstPath.filter((segment, i) => segment === secondPath[i]), ...rest); -} -function makeNode() { - return { - dynamics: [], - shortcuts: [], - statics: {}, - }; -} -function isTerminalNode(node) { - return node === constants.NODE_SUCCESS || node === constants.NODE_ERRORED; + +const del = (self, node) => { + if (node) { + const hit = node.value + if (self[DISPOSE]) + self[DISPOSE](hit.key, hit.value) + + self[LENGTH] -= hit.length + self[CACHE].delete(hit.key) + self[LRU_LIST].removeNode(node) + } } -function cloneTransition(input, offset = 0) { - return { - to: !isTerminalNode(input.to) ? input.to > 2 ? input.to + offset - 2 : input.to + offset : input.to, - reducer: input.reducer, - }; + +class Entry { + constructor (key, value, length, now, maxAge) { + this.key = key + this.value = value + this.length = length + this.now = now + this.maxAge = maxAge || 0 + } } -function cloneNode(input, offset = 0) { - const output = makeNode(); - for (const [test, transition] of input.dynamics) - output.dynamics.push([test, cloneTransition(transition, offset)]); - for (const transition of input.shortcuts) - output.shortcuts.push(cloneTransition(transition, offset)); - for (const [segment, transitions] of Object.entries(input.statics)) - output.statics[segment] = transitions.map(transition => cloneTransition(transition, offset)); - return output; + +const forEachStep = (self, fn, node, thisp) => { + let hit = node.value + if (isStale(self, hit)) { + del(self, node) + if (!self[ALLOW_STALE]) + hit = undefined + } + if (hit) + fn.call(thisp, hit.value, hit.key, self) } -function registerDynamic(machine, from, test, to, reducer) { - machine.nodes[from].dynamics.push([ - test, - { to, reducer: reducer }, - ]); + +module.exports = LRUCache + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/minipass-npm-3.3.5-a555b091e7-9.zip/node_modules/minipass/index.js": +/*!*****************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/minipass-npm-3.3.5-a555b091e7-9.zip/node_modules/minipass/index.js ***! + \*****************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +const proc = typeof process === 'object' && process ? process : { + stdout: null, + stderr: null, } -function registerShortcut(machine, from, to, reducer) { - machine.nodes[from].shortcuts.push({ to, reducer: reducer }); +const EE = __webpack_require__(/*! events */ "events") +const Stream = __webpack_require__(/*! stream */ "stream") +const SD = (__webpack_require__(/*! string_decoder */ "string_decoder").StringDecoder) + +const EOF = Symbol('EOF') +const MAYBE_EMIT_END = Symbol('maybeEmitEnd') +const EMITTED_END = Symbol('emittedEnd') +const EMITTING_END = Symbol('emittingEnd') +const EMITTED_ERROR = Symbol('emittedError') +const CLOSED = Symbol('closed') +const READ = Symbol('read') +const FLUSH = Symbol('flush') +const FLUSHCHUNK = Symbol('flushChunk') +const ENCODING = Symbol('encoding') +const DECODER = Symbol('decoder') +const FLOWING = Symbol('flowing') +const PAUSED = Symbol('paused') +const RESUME = Symbol('resume') +const BUFFERLENGTH = Symbol('bufferLength') +const BUFFERPUSH = Symbol('bufferPush') +const BUFFERSHIFT = Symbol('bufferShift') +const OBJECTMODE = Symbol('objectMode') +const DESTROYED = Symbol('destroyed') +const EMITDATA = Symbol('emitData') +const EMITEND = Symbol('emitEnd') +const EMITEND2 = Symbol('emitEnd2') +const ASYNC = Symbol('async') + +const defer = fn => Promise.resolve().then(fn) + +// TODO remove when Node v8 support drops +const doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1' +const ASYNCITERATOR = doIter && Symbol.asyncIterator + || Symbol('asyncIterator not implemented') +const ITERATOR = doIter && Symbol.iterator + || Symbol('iterator not implemented') + +// events that mean 'the stream is over' +// these are treated specially, and re-emitted +// if they are listened for after emitting. +const isEndish = ev => + ev === 'end' || + ev === 'finish' || + ev === 'prefinish' + +const isArrayBuffer = b => b instanceof ArrayBuffer || + typeof b === 'object' && + b.constructor && + b.constructor.name === 'ArrayBuffer' && + b.byteLength >= 0 + +const isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b) + +class Pipe { + constructor (src, dest, opts) { + this.src = src + this.dest = dest + this.opts = opts + this.ondrain = () => src[RESUME]() + dest.on('drain', this.ondrain) + } + unpipe () { + this.dest.removeListener('drain', this.ondrain) + } + // istanbul ignore next - only here for the prototype + proxyErrors () {} + end () { + this.unpipe() + if (this.opts.end) + this.dest.end() + } } -function registerStatic(machine, from, test, to, reducer) { - const store = !Object.prototype.hasOwnProperty.call(machine.nodes[from].statics, test) - ? machine.nodes[from].statics[test] = [] - : machine.nodes[from].statics[test]; - store.push({ to, reducer: reducer }); + +class PipeProxyErrors extends Pipe { + unpipe () { + this.src.removeListener('error', this.proxyErrors) + super.unpipe() + } + constructor (src, dest, opts) { + super(src, dest, opts) + this.proxyErrors = er => dest.emit('error', er) + src.on('error', this.proxyErrors) + } } -function execute(store, callback, state, segment) { - // TypeScript's control flow can't properly narrow - // generic conditionals for some mysterious reason - if (Array.isArray(callback)) { - const [name, ...args] = callback; - return store[name](state, segment, ...args); + +module.exports = class Minipass extends Stream { + constructor (options) { + super() + this[FLOWING] = false + // whether we're explicitly paused + this[PAUSED] = false + this.pipes = [] + this.buffer = [] + this[OBJECTMODE] = options && options.objectMode || false + if (this[OBJECTMODE]) + this[ENCODING] = null + else + this[ENCODING] = options && options.encoding || null + if (this[ENCODING] === 'buffer') + this[ENCODING] = null + this[ASYNC] = options && !!options.async || false + this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null + this[EOF] = false + this[EMITTED_END] = false + this[EMITTING_END] = false + this[CLOSED] = false + this[EMITTED_ERROR] = null + this.writable = true + this.readable = true + this[BUFFERLENGTH] = 0 + this[DESTROYED] = false + } + + get bufferLength () { return this[BUFFERLENGTH] } + + get encoding () { return this[ENCODING] } + set encoding (enc) { + if (this[OBJECTMODE]) + throw new Error('cannot set encoding in objectMode') + + if (this[ENCODING] && enc !== this[ENCODING] && + (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH])) + throw new Error('cannot change encoding') + + if (this[ENCODING] !== enc) { + this[DECODER] = enc ? new SD(enc) : null + if (this.buffer.length) + this.buffer = this.buffer.map(chunk => this[DECODER].write(chunk)) } - else { - return store[callback](state, segment); + + this[ENCODING] = enc + } + + setEncoding (enc) { + this.encoding = enc + } + + get objectMode () { return this[OBJECTMODE] } + set objectMode (om) { this[OBJECTMODE] = this[OBJECTMODE] || !!om } + + get ['async'] () { return this[ASYNC] } + set ['async'] (a) { this[ASYNC] = this[ASYNC] || !!a } + + write (chunk, encoding, cb) { + if (this[EOF]) + throw new Error('write after end') + + if (this[DESTROYED]) { + this.emit('error', Object.assign( + new Error('Cannot call write after a stream was destroyed'), + { code: 'ERR_STREAM_DESTROYED' } + )) + return true } -} -function suggest(callback, state) { - const fn = Array.isArray(callback) - ? tests[callback[0]] - : tests[callback]; - // @ts-ignore - if (typeof fn.suggest === `undefined`) - return null; - const args = Array.isArray(callback) - ? callback.slice(1) - : []; - // @ts-ignore - return fn.suggest(state, ...args); -} -const tests = { - always: () => { - return true; - }, - isOptionLike: (state, segment) => { - return !state.ignoreOptions && (segment !== `-` && segment.startsWith(`-`)); - }, - isNotOptionLike: (state, segment) => { - return state.ignoreOptions || segment === `-` || !segment.startsWith(`-`); - }, - isOption: (state, segment, name, hidden) => { - return !state.ignoreOptions && segment === name; - }, - isBatchOption: (state, segment, names) => { - return !state.ignoreOptions && constants.BATCH_REGEX.test(segment) && [...segment.slice(1)].every(name => names.includes(`-${name}`)); - }, - isBoundOption: (state, segment, names, options) => { - const optionParsing = segment.match(constants.BINDING_REGEX); - return !state.ignoreOptions && !!optionParsing && constants.OPTION_REGEX.test(optionParsing[1]) && names.includes(optionParsing[1]) - // Disallow bound options with no arguments (i.e. booleans) - && options.filter(opt => opt.names.includes(optionParsing[1])).every(opt => opt.allowBinding); - }, - isNegatedOption: (state, segment, name) => { - return !state.ignoreOptions && segment === `--no-${name.slice(2)}`; - }, - isHelp: (state, segment) => { - return !state.ignoreOptions && constants.HELP_REGEX.test(segment); - }, - isUnsupportedOption: (state, segment, names) => { - return !state.ignoreOptions && segment.startsWith(`-`) && constants.OPTION_REGEX.test(segment) && !names.includes(segment); - }, - isInvalidOption: (state, segment) => { - return !state.ignoreOptions && segment.startsWith(`-`) && !constants.OPTION_REGEX.test(segment); - }, -}; -// @ts-ignore -tests.isOption.suggest = (state, name, hidden = true) => { - return !hidden ? [name] : null; -}; -const reducers = { - setCandidateState: (state, segment, candidateState) => { - return { ...state, ...candidateState }; - }, - setSelectedIndex: (state, segment, index) => { - return { ...state, selectedIndex: index }; - }, - pushBatch: (state, segment) => { - return { ...state, options: state.options.concat([...segment.slice(1)].map(name => ({ name: `-${name}`, value: true }))) }; - }, - pushBound: (state, segment) => { - const [, name, value] = segment.match(constants.BINDING_REGEX); - return { ...state, options: state.options.concat({ name, value }) }; - }, - pushPath: (state, segment) => { - return { ...state, path: state.path.concat(segment) }; - }, - pushPositional: (state, segment) => { - return { ...state, positionals: state.positionals.concat({ value: segment, extra: false }) }; - }, - pushExtra: (state, segment) => { - return { ...state, positionals: state.positionals.concat({ value: segment, extra: true }) }; - }, - pushExtraNoLimits: (state, segment) => { - return { ...state, positionals: state.positionals.concat({ value: segment, extra: NoLimits }) }; - }, - pushTrue: (state, segment, name = segment) => { - return { ...state, options: state.options.concat({ name: segment, value: true }) }; - }, - pushFalse: (state, segment, name = segment) => { - return { ...state, options: state.options.concat({ name, value: false }) }; - }, - pushUndefined: (state, segment) => { - return { ...state, options: state.options.concat({ name: segment, value: undefined }) }; - }, - pushStringValue: (state, segment) => { - var _a; - const copy = { ...state, options: [...state.options] }; - const lastOption = state.options[state.options.length - 1]; - lastOption.value = ((_a = lastOption.value) !== null && _a !== void 0 ? _a : []).concat([segment]); - return copy; - }, - setStringValue: (state, segment) => { - const copy = { ...state, options: [...state.options] }; - const lastOption = state.options[state.options.length - 1]; - lastOption.value = segment; - return copy; - }, - inhibateOptions: (state) => { - return { ...state, ignoreOptions: true }; - }, - useHelp: (state, segment, command) => { - const [, /* name */ , index] = segment.match(constants.HELP_REGEX); - if (typeof index !== `undefined`) { - return { ...state, options: [{ name: `-c`, value: String(command) }, { name: `-i`, value: index }] }; - } - else { - return { ...state, options: [{ name: `-c`, value: String(command) }] }; - } - }, - setError: (state, segment, errorMessage) => { - if (segment === constants.END_OF_INPUT) { - return { ...state, errorMessage: `${errorMessage}.` }; - } - else { - return { ...state, errorMessage: `${errorMessage} ("${segment}").` }; - } - }, - setOptionArityError: (state, segment) => { - const lastOption = state.options[state.options.length - 1]; - return { ...state, errorMessage: `Not enough arguments to option ${lastOption.name}.` }; - }, -}; -// ------------------------------------------------------------------------ -const NoLimits = Symbol(); -class CommandBuilder { - constructor(cliIndex, cliOpts) { - this.allOptionNames = []; - this.arity = { leading: [], trailing: [], extra: [], proxy: false }; - this.options = []; - this.paths = []; - this.cliIndex = cliIndex; - this.cliOpts = cliOpts; - } - addPath(path) { - this.paths.push(path); + + if (typeof encoding === 'function') + cb = encoding, encoding = 'utf8' + + if (!encoding) + encoding = 'utf8' + + const fn = this[ASYNC] ? defer : f => f() + + // convert array buffers and typed array views into buffers + // at some point in the future, we may want to do the opposite! + // leave strings and buffers as-is + // anything else switches us into object mode + if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) { + if (isArrayBufferView(chunk)) + chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength) + else if (isArrayBuffer(chunk)) + chunk = Buffer.from(chunk) + else if (typeof chunk !== 'string') + // use the setter so we throw if we have encoding set + this.objectMode = true } - setArity({ leading = this.arity.leading, trailing = this.arity.trailing, extra = this.arity.extra, proxy = this.arity.proxy }) { - Object.assign(this.arity, { leading, trailing, extra, proxy }); + + // handle object mode up front, since it's simpler + // this yields better performance, fewer checks later. + if (this[OBJECTMODE]) { + /* istanbul ignore if - maybe impossible? */ + if (this.flowing && this[BUFFERLENGTH] !== 0) + this[FLUSH](true) + + if (this.flowing) + this.emit('data', chunk) + else + this[BUFFERPUSH](chunk) + + if (this[BUFFERLENGTH] !== 0) + this.emit('readable') + + if (cb) + fn(cb) + + return this.flowing } - addPositional({ name = `arg`, required = true } = {}) { - if (!required && this.arity.extra === NoLimits) - throw new Error(`Optional parameters cannot be declared when using .rest() or .proxy()`); - if (!required && this.arity.trailing.length > 0) - throw new Error(`Optional parameters cannot be declared after the required trailing positional arguments`); - if (!required && this.arity.extra !== NoLimits) { - this.arity.extra.push(name); - } - else if (this.arity.extra !== NoLimits && this.arity.extra.length === 0) { - this.arity.leading.push(name); - } - else { - this.arity.trailing.push(name); - } + + // at this point the chunk is a buffer or string + // don't buffer it up or send it to the decoder + if (!chunk.length) { + if (this[BUFFERLENGTH] !== 0) + this.emit('readable') + if (cb) + fn(cb) + return this.flowing } - addRest({ name = `arg`, required = 0 } = {}) { - if (this.arity.extra === NoLimits) - throw new Error(`Infinite lists cannot be declared multiple times in the same command`); - if (this.arity.trailing.length > 0) - throw new Error(`Infinite lists cannot be declared after the required trailing positional arguments`); - for (let t = 0; t < required; ++t) - this.addPositional({ name }); - this.arity.extra = NoLimits; + + // fast-path writing strings of same encoding to a stream with + // an empty buffer, skipping the buffer/decoder dance + if (typeof chunk === 'string' && + // unless it is a string already ready for us to use + !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) { + chunk = Buffer.from(chunk, encoding) } - addProxy({ required = 0 } = {}) { - this.addRest({ required }); - this.arity.proxy = true; + + if (Buffer.isBuffer(chunk) && this[ENCODING]) + chunk = this[DECODER].write(chunk) + + // Note: flushing CAN potentially switch us into not-flowing mode + if (this.flowing && this[BUFFERLENGTH] !== 0) + this[FLUSH](true) + + if (this.flowing) + this.emit('data', chunk) + else + this[BUFFERPUSH](chunk) + + if (this[BUFFERLENGTH] !== 0) + this.emit('readable') + + if (cb) + fn(cb) + + return this.flowing + } + + read (n) { + if (this[DESTROYED]) + return null + + if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) { + this[MAYBE_EMIT_END]() + return null } - addOption({ names, description, arity = 0, hidden = false, required = false, allowBinding = true }) { - if (!allowBinding && arity > 1) - throw new Error(`The arity cannot be higher than 1 when the option only supports the --arg=value syntax`); - if (!Number.isInteger(arity)) - throw new Error(`The arity must be an integer, got ${arity}`); - if (arity < 0) - throw new Error(`The arity must be positive, got ${arity}`); - this.allOptionNames.push(...names); - this.options.push({ names, description, arity, hidden, required, allowBinding }); + + if (this[OBJECTMODE]) + n = null + + if (this.buffer.length > 1 && !this[OBJECTMODE]) { + if (this.encoding) + this.buffer = [this.buffer.join('')] + else + this.buffer = [Buffer.concat(this.buffer, this[BUFFERLENGTH])] } - setContext(context) { - this.context = context; + + const ret = this[READ](n || null, this.buffer[0]) + this[MAYBE_EMIT_END]() + return ret + } + + [READ] (n, chunk) { + if (n === chunk.length || n === null) + this[BUFFERSHIFT]() + else { + this.buffer[0] = chunk.slice(n) + chunk = chunk.slice(0, n) + this[BUFFERLENGTH] -= n } - usage({ detailed = true, inlineOptions = true } = {}) { - const segments = [this.cliOpts.binaryName]; - const detailedOptionList = []; - if (this.paths.length > 0) - segments.push(...this.paths[0]); - if (detailed) { - for (const { names, arity, hidden, description, required } of this.options) { - if (hidden) - continue; - const args = []; - for (let t = 0; t < arity; ++t) - args.push(` #${t}`); - const definition = `${names.join(`,`)}${args.join(``)}`; - if (!inlineOptions && description) { - detailedOptionList.push({ definition, description, required }); - } - else { - segments.push(required ? `<${definition}>` : `[${definition}]`); - } - } - segments.push(...this.arity.leading.map(name => `<${name}>`)); - if (this.arity.extra === NoLimits) - segments.push(`...`); - else - segments.push(...this.arity.extra.map(name => `[${name}]`)); - segments.push(...this.arity.trailing.map(name => `<${name}>`)); - } - const usage = segments.join(` `); - return { usage, options: detailedOptionList }; - } - compile() { - if (typeof this.context === `undefined`) - throw new Error(`Assertion failed: No context attached`); - const machine = makeStateMachine(); - let firstNode = constants.NODE_INITIAL; - const candidateUsage = this.usage().usage; - const requiredOptions = this.options - .filter(opt => opt.required) - .map(opt => opt.names); - firstNode = injectNode(machine, makeNode()); - registerStatic(machine, constants.NODE_INITIAL, constants.START_OF_INPUT, firstNode, [`setCandidateState`, { candidateUsage, requiredOptions }]); - const positionalArgument = this.arity.proxy - ? `always` - : `isNotOptionLike`; - const paths = this.paths.length > 0 - ? this.paths - : [[]]; - for (const path of paths) { - let lastPathNode = firstNode; - // We allow options to be specified before the path. Note that we - // only do this when there is a path, otherwise there would be - // some redundancy with the options attached later. - if (path.length > 0) { - const optionPathNode = injectNode(machine, makeNode()); - registerShortcut(machine, lastPathNode, optionPathNode); - this.registerOptions(machine, optionPathNode); - lastPathNode = optionPathNode; - } - for (let t = 0; t < path.length; ++t) { - const nextPathNode = injectNode(machine, makeNode()); - registerStatic(machine, lastPathNode, path[t], nextPathNode, `pushPath`); - lastPathNode = nextPathNode; - } - if (this.arity.leading.length > 0 || !this.arity.proxy) { - const helpNode = injectNode(machine, makeNode()); - registerDynamic(machine, lastPathNode, `isHelp`, helpNode, [`useHelp`, this.cliIndex]); - registerStatic(machine, helpNode, constants.END_OF_INPUT, constants.NODE_SUCCESS, [`setSelectedIndex`, constants.HELP_COMMAND_INDEX]); - this.registerOptions(machine, lastPathNode); - } - if (this.arity.leading.length > 0) - registerStatic(machine, lastPathNode, constants.END_OF_INPUT, constants.NODE_ERRORED, [`setError`, `Not enough positional arguments`]); - let lastLeadingNode = lastPathNode; - for (let t = 0; t < this.arity.leading.length; ++t) { - const nextLeadingNode = injectNode(machine, makeNode()); - if (!this.arity.proxy) - this.registerOptions(machine, nextLeadingNode); - if (this.arity.trailing.length > 0 || t + 1 !== this.arity.leading.length) - registerStatic(machine, nextLeadingNode, constants.END_OF_INPUT, constants.NODE_ERRORED, [`setError`, `Not enough positional arguments`]); - registerDynamic(machine, lastLeadingNode, `isNotOptionLike`, nextLeadingNode, `pushPositional`); - lastLeadingNode = nextLeadingNode; - } - let lastExtraNode = lastLeadingNode; - if (this.arity.extra === NoLimits || this.arity.extra.length > 0) { - const extraShortcutNode = injectNode(machine, makeNode()); - registerShortcut(machine, lastLeadingNode, extraShortcutNode); - if (this.arity.extra === NoLimits) { - const extraNode = injectNode(machine, makeNode()); - if (!this.arity.proxy) - this.registerOptions(machine, extraNode); - registerDynamic(machine, lastLeadingNode, positionalArgument, extraNode, `pushExtraNoLimits`); - registerDynamic(machine, extraNode, positionalArgument, extraNode, `pushExtraNoLimits`); - registerShortcut(machine, extraNode, extraShortcutNode); - } - else { - for (let t = 0; t < this.arity.extra.length; ++t) { - const nextExtraNode = injectNode(machine, makeNode()); - if (!this.arity.proxy) - this.registerOptions(machine, nextExtraNode); - registerDynamic(machine, lastExtraNode, positionalArgument, nextExtraNode, `pushExtra`); - registerShortcut(machine, nextExtraNode, extraShortcutNode); - lastExtraNode = nextExtraNode; - } - } - lastExtraNode = extraShortcutNode; - } - if (this.arity.trailing.length > 0) - registerStatic(machine, lastExtraNode, constants.END_OF_INPUT, constants.NODE_ERRORED, [`setError`, `Not enough positional arguments`]); - let lastTrailingNode = lastExtraNode; - for (let t = 0; t < this.arity.trailing.length; ++t) { - const nextTrailingNode = injectNode(machine, makeNode()); - if (!this.arity.proxy) - this.registerOptions(machine, nextTrailingNode); - if (t + 1 < this.arity.trailing.length) - registerStatic(machine, nextTrailingNode, constants.END_OF_INPUT, constants.NODE_ERRORED, [`setError`, `Not enough positional arguments`]); - registerDynamic(machine, lastTrailingNode, `isNotOptionLike`, nextTrailingNode, `pushPositional`); - lastTrailingNode = nextTrailingNode; - } - registerDynamic(machine, lastTrailingNode, positionalArgument, constants.NODE_ERRORED, [`setError`, `Extraneous positional argument`]); - registerStatic(machine, lastTrailingNode, constants.END_OF_INPUT, constants.NODE_SUCCESS, [`setSelectedIndex`, this.cliIndex]); - } - return { - machine, - context: this.context, - }; - } - registerOptions(machine, node) { - registerDynamic(machine, node, [`isOption`, `--`], node, `inhibateOptions`); - registerDynamic(machine, node, [`isBatchOption`, this.allOptionNames], node, `pushBatch`); - registerDynamic(machine, node, [`isBoundOption`, this.allOptionNames, this.options], node, `pushBound`); - registerDynamic(machine, node, [`isUnsupportedOption`, this.allOptionNames], constants.NODE_ERRORED, [`setError`, `Unsupported option name`]); - registerDynamic(machine, node, [`isInvalidOption`], constants.NODE_ERRORED, [`setError`, `Invalid option name`]); - for (const option of this.options) { - const longestName = option.names.reduce((longestName, name) => { - return name.length > longestName.length ? name : longestName; - }, ``); - if (option.arity === 0) { - for (const name of option.names) { - registerDynamic(machine, node, [`isOption`, name, option.hidden || name !== longestName], node, `pushTrue`); - if (name.startsWith(`--`) && !name.startsWith(`--no-`)) { - registerDynamic(machine, node, [`isNegatedOption`, name], node, [`pushFalse`, name]); - } - } - } - else { - // We inject a new node at the end of the state machine - let lastNode = injectNode(machine, makeNode()); - // We register transitions from the starting node to this new node - for (const name of option.names) - registerDynamic(machine, node, [`isOption`, name, option.hidden || name !== longestName], lastNode, `pushUndefined`); - // For each argument, we inject a new node at the end and we - // register a transition from the current node to this new node - for (let t = 0; t < option.arity; ++t) { - const nextNode = injectNode(machine, makeNode()); - // We can provide better errors when another option or END_OF_INPUT is encountered - registerStatic(machine, lastNode, constants.END_OF_INPUT, constants.NODE_ERRORED, `setOptionArityError`); - registerDynamic(machine, lastNode, `isOptionLike`, constants.NODE_ERRORED, `setOptionArityError`); - // If the option has a single argument, no need to store it in an array - const action = option.arity === 1 - ? `setStringValue` - : `pushStringValue`; - registerDynamic(machine, lastNode, `isNotOptionLike`, nextNode, action); - lastNode = nextNode; - } - // In the end, we register a shortcut from - // the last node back to the starting node - registerShortcut(machine, lastNode, node); - } - } - } -} -class CliBuilder { - constructor({ binaryName = `...` } = {}) { - this.builders = []; - this.opts = { binaryName }; - } - static build(cbs, opts = {}) { - return new CliBuilder(opts).commands(cbs).compile(); - } - getBuilderByIndex(n) { - if (!(n >= 0 && n < this.builders.length)) - throw new Error(`Assertion failed: Out-of-bound command index (${n})`); - return this.builders[n]; - } - commands(cbs) { - for (const cb of cbs) - cb(this.command()); - return this; - } - command() { - const builder = new CommandBuilder(this.builders.length, this.opts); - this.builders.push(builder); - return builder; - } - compile() { - const machines = []; - const contexts = []; - for (const builder of this.builders) { - const { machine, context } = builder.compile(); - machines.push(machine); - contexts.push(context); - } - const machine = makeAnyOfMachine(machines); - simplifyMachine(machine); - return { - machine, - contexts, - process: (input) => { - return runMachine(machine, input); - }, - suggest: (input, partial) => { - return suggestMachine(machine, input, partial); - }, - }; - } -} - -exports.CliBuilder = CliBuilder; -exports.CommandBuilder = CommandBuilder; -exports.NoLimits = NoLimits; -exports.aggregateHelpStates = aggregateHelpStates; -exports.cloneNode = cloneNode; -exports.cloneTransition = cloneTransition; -exports.debug = debug; -exports.debugMachine = debugMachine; -exports.execute = execute; -exports.injectNode = injectNode; -exports.isTerminalNode = isTerminalNode; -exports.makeAnyOfMachine = makeAnyOfMachine; -exports.makeNode = makeNode; -exports.makeStateMachine = makeStateMachine; -exports.reducers = reducers; -exports.registerDynamic = registerDynamic; -exports.registerShortcut = registerShortcut; -exports.registerStatic = registerStatic; -exports.runMachineInternal = runMachineInternal; -exports.selectBestState = selectBestState; -exports.simplifyMachine = simplifyMachine; -exports.suggest = suggest; -exports.tests = tests; -exports.trimSmallerBranches = trimSmallerBranches; + this.emit('data', chunk) -/***/ }), + if (!this.buffer.length && !this[EOF]) + this.emit('drain') -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/errors.js": -/*!***************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/errors.js ***! - \***************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + return chunk + } -"use strict"; + end (chunk, encoding, cb) { + if (typeof chunk === 'function') + cb = chunk, chunk = null + if (typeof encoding === 'function') + cb = encoding, encoding = 'utf8' + if (chunk) + this.write(chunk, encoding) + if (cb) + this.once('end', cb) + this[EOF] = true + this.writable = false + // if we haven't written anything, then go ahead and emit, + // even if we're not reading. + // we'll re-emit if a new 'end' listener is added anyway. + // This makes MP more suitable to write-only use cases. + if (this.flowing || !this[PAUSED]) + this[MAYBE_EMIT_END]() + return this + } -Object.defineProperty(exports, "__esModule", ({ value: true })); + // don't let the internal resume be overwritten + [RESUME] () { + if (this[DESTROYED]) + return -var constants = __webpack_require__(/*! ./constants.js */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/constants.js"); + this[PAUSED] = false + this[FLOWING] = true + this.emit('resume') + if (this.buffer.length) + this[FLUSH]() + else if (this[EOF]) + this[MAYBE_EMIT_END]() + else + this.emit('drain') + } -/** - * A generic usage error with the name `UsageError`. - * - * It should be used over `Error` only when it's the user's fault. - */ -class UsageError extends Error { - constructor(message) { - super(message); - this.clipanion = { type: `usage` }; - this.name = `UsageError`; - } -} -class UnknownSyntaxError extends Error { - constructor(input, candidates) { - super(); - this.input = input; - this.candidates = candidates; - this.clipanion = { type: `none` }; - this.name = `UnknownSyntaxError`; - if (this.candidates.length === 0) { - this.message = `Command not found, but we're not sure what's the alternative.`; - } - else if (this.candidates.every(candidate => candidate.reason !== null && candidate.reason === candidates[0].reason)) { - const [{ reason }] = this.candidates; - this.message = `${reason}\n\n${this.candidates.map(({ usage }) => `$ ${usage}`).join(`\n`)}`; - } - else if (this.candidates.length === 1) { - const [{ usage }] = this.candidates; - this.message = `Command not found; did you mean:\n\n$ ${usage}\n${whileRunning(input)}`; - } - else { - this.message = `Command not found; did you mean one of:\n\n${this.candidates.map(({ usage }, index) => { - return `${`${index}.`.padStart(4)} ${usage}`; - }).join(`\n`)}\n\n${whileRunning(input)}`; - } - } -} -class AmbiguousSyntaxError extends Error { - constructor(input, usages) { - super(); - this.input = input; - this.usages = usages; - this.clipanion = { type: `none` }; - this.name = `AmbiguousSyntaxError`; - this.message = `Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((usage, index) => { - return `${`${index}.`.padStart(4)} ${usage}`; - }).join(`\n`)}\n\n${whileRunning(input)}`; - } -} -const whileRunning = (input) => `While running ${input.filter(token => { - return token !== constants.END_OF_INPUT; -}).map(token => { - const json = JSON.stringify(token); - if (token.match(/\s/) || token.length === 0 || json !== `"${token}"`) { - return json; - } - else { - return token; - } -}).join(` `)}`; + resume () { + return this[RESUME]() + } -exports.AmbiguousSyntaxError = AmbiguousSyntaxError; -exports.UnknownSyntaxError = UnknownSyntaxError; -exports.UsageError = UsageError; + pause () { + this[FLOWING] = false + this[PAUSED] = true + } + get destroyed () { + return this[DESTROYED] + } -/***/ }), + get flowing () { + return this[FLOWING] + } -/***/ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/format.js": -/*!***************************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/format.js ***! - \***************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports) => { + get paused () { + return this[PAUSED] + } -"use strict"; + [BUFFERPUSH] (chunk) { + if (this[OBJECTMODE]) + this[BUFFERLENGTH] += 1 + else + this[BUFFERLENGTH] += chunk.length + this.buffer.push(chunk) + } + [BUFFERSHIFT] () { + if (this.buffer.length) { + if (this[OBJECTMODE]) + this[BUFFERLENGTH] -= 1 + else + this[BUFFERLENGTH] -= this.buffer[0].length + } + return this.buffer.shift() + } -Object.defineProperty(exports, "__esModule", ({ value: true })); + [FLUSH] (noDrain) { + do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]())) -const MAX_LINE_LENGTH = 80; -const richLine = Array(MAX_LINE_LENGTH).fill(`━`); -for (let t = 0; t <= 24; ++t) - richLine[richLine.length - t] = `\x1b[38;5;${232 + t}m━`; -const richFormat = { - header: str => `\x1b[1m━━━ ${str}${str.length < MAX_LINE_LENGTH - 5 ? ` ${richLine.slice(str.length + 5).join(``)}` : `:`}\x1b[0m`, - bold: str => `\x1b[1m${str}\x1b[22m`, - error: str => `\x1b[31m\x1b[1m${str}\x1b[22m\x1b[39m`, - code: str => `\x1b[36m${str}\x1b[39m`, -}; -const textFormat = { - header: str => str, - bold: str => str, - error: str => str, - code: str => str, -}; -function dedent(text) { - const lines = text.split(`\n`); - const nonEmptyLines = lines.filter(line => line.match(/\S/)); - const indent = nonEmptyLines.length > 0 ? nonEmptyLines.reduce((minLength, line) => Math.min(minLength, line.length - line.trimStart().length), Number.MAX_VALUE) : 0; - return lines - .map(line => line.slice(indent).trimRight()) - .join(`\n`); -} -function formatMarkdownish(text, { format, paragraphs }) { - // Enforce \n as newline character - text = text.replace(/\r\n?/g, `\n`); - // Remove the indentation, since it got messed up with the JS indentation - text = dedent(text); - // Remove surrounding newlines, since they got added for JS formatting - text = text.replace(/^\n+|\n+$/g, ``); - // List items always end with at least two newlines (in order to not be collapsed) - text = text.replace(/^(\s*)-([^\n]*?)\n+/gm, `$1-$2\n\n`); - // Single newlines are removed; larger than that are collapsed into one - text = text.replace(/\n(\n)?\n*/g, `$1`); - if (paragraphs) { - text = text.split(/\n/).map(paragraph => { - // Does the paragraph starts with a list? - const bulletMatch = paragraph.match(/^\s*[*-][\t ]+(.*)/); - if (!bulletMatch) - // No, cut the paragraphs into segments of 80 characters - return paragraph.match(/(.{1,80})(?: |$)/g).join(`\n`); - const indent = paragraph.length - paragraph.trimStart().length; - // Yes, cut the paragraphs into segments of (78 - indent) characters (to account for the prefix) - return bulletMatch[1].match(new RegExp(`(.{1,${78 - indent}})(?: |$)`, `g`)).map((line, index) => { - return ` `.repeat(indent) + (index === 0 ? `- ` : ` `) + line; - }).join(`\n`); - }).join(`\n\n`); - } - // Highlight the code segments - text = text.replace(/(`+)((?:.|[\n])*?)\1/g, ($0, $1, $2) => { - return format.code($1 + $2 + $1); - }); - // Highlight the code segments - text = text.replace(/(\*\*)((?:.|[\n])*?)\1/g, ($0, $1, $2) => { - return format.bold($1 + $2 + $1); - }); - return text ? `${text}\n` : ``; -} + if (!noDrain && !this.buffer.length && !this[EOF]) + this.emit('drain') + } -exports.formatMarkdownish = formatMarkdownish; -exports.richFormat = richFormat; -exports.textFormat = textFormat; + [FLUSHCHUNK] (chunk) { + return chunk ? (this.emit('data', chunk), this.flowing) : false + } + pipe (dest, opts) { + if (this[DESTROYED]) + return -/***/ }), + const ended = this[EMITTED_END] + opts = opts || {} + if (dest === proc.stdout || dest === proc.stderr) + opts.end = false + else + opts.end = opts.end !== false + opts.proxyErrors = !!opts.proxyErrors -/***/ "./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/browser.js": -/*!****************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/browser.js ***! - \****************************************************************************************************************************************/ -/***/ ((module, exports, __webpack_require__) => { + // piping an ended stream ends immediately + if (ended) { + if (opts.end) + dest.end() + } else { + this.pipes.push(!opts.proxyErrors ? new Pipe(this, dest, opts) + : new PipeProxyErrors(this, dest, opts)) + if (this[ASYNC]) + defer(() => this[RESUME]()) + else + this[RESUME]() + } -/* eslint-env browser */ + return dest + } -/** - * This is the web browser implementation of `debug()`. - */ + unpipe (dest) { + const p = this.pipes.find(p => p.dest === dest) + if (p) { + this.pipes.splice(this.pipes.indexOf(p), 1) + p.unpipe() + } + } -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.storage = localstorage(); + addListener (ev, fn) { + return this.on(ev, fn) + } -/** - * Colors. - */ + on (ev, fn) { + const ret = super.on(ev, fn) + if (ev === 'data' && !this.pipes.length && !this.flowing) + this[RESUME]() + else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) + super.emit('readable') + else if (isEndish(ev) && this[EMITTED_END]) { + super.emit(ev) + this.removeAllListeners(ev) + } else if (ev === 'error' && this[EMITTED_ERROR]) { + if (this[ASYNC]) + defer(() => fn.call(this, this[EMITTED_ERROR])) + else + fn.call(this, this[EMITTED_ERROR]) + } + return ret + } -exports.colors = [ - '#0000CC', - '#0000FF', - '#0033CC', - '#0033FF', - '#0066CC', - '#0066FF', - '#0099CC', - '#0099FF', - '#00CC00', - '#00CC33', - '#00CC66', - '#00CC99', - '#00CCCC', - '#00CCFF', - '#3300CC', - '#3300FF', - '#3333CC', - '#3333FF', - '#3366CC', - '#3366FF', - '#3399CC', - '#3399FF', - '#33CC00', - '#33CC33', - '#33CC66', - '#33CC99', - '#33CCCC', - '#33CCFF', - '#6600CC', - '#6600FF', - '#6633CC', - '#6633FF', - '#66CC00', - '#66CC33', - '#9900CC', - '#9900FF', - '#9933CC', - '#9933FF', - '#99CC00', - '#99CC33', - '#CC0000', - '#CC0033', - '#CC0066', - '#CC0099', - '#CC00CC', - '#CC00FF', - '#CC3300', - '#CC3333', - '#CC3366', - '#CC3399', - '#CC33CC', - '#CC33FF', - '#CC6600', - '#CC6633', - '#CC9900', - '#CC9933', - '#CCCC00', - '#CCCC33', - '#FF0000', - '#FF0033', - '#FF0066', - '#FF0099', - '#FF00CC', - '#FF00FF', - '#FF3300', - '#FF3333', - '#FF3366', - '#FF3399', - '#FF33CC', - '#FF33FF', - '#FF6600', - '#FF6633', - '#FF9900', - '#FF9933', - '#FFCC00', - '#FFCC33' -]; - -/** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors - */ - -// eslint-disable-next-line complexity -function useColors() { - // NB: In an Electron preload script, document will be defined but not fully - // initialized. Since we know we're in Chrome, we'll just detect this case - // explicitly - if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { - return true; - } + get emittedEnd () { + return this[EMITTED_END] + } - // Internet Explorer and Edge do not support colors. - if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } + [MAYBE_EMIT_END] () { + if (!this[EMITTING_END] && + !this[EMITTED_END] && + !this[DESTROYED] && + this.buffer.length === 0 && + this[EOF]) { + this[EMITTING_END] = true + this.emit('end') + this.emit('prefinish') + this.emit('finish') + if (this[CLOSED]) + this.emit('close') + this[EMITTING_END] = false + } + } - // Is webkit? http://stackoverflow.com/a/16459606/376773 - // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 - return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || - // Is firebug? http://stackoverflow.com/a/398120/376773 - (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || - // Is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || - // Double check webkit in userAgent just in case we are in a worker - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); -} + emit (ev, data, ...extra) { + // error and close are only events allowed after calling destroy() + if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED]) + return + else if (ev === 'data') { + return !data ? false + : this[ASYNC] ? defer(() => this[EMITDATA](data)) + : this[EMITDATA](data) + } else if (ev === 'end') { + return this[EMITEND]() + } else if (ev === 'close') { + this[CLOSED] = true + // don't emit close before 'end' and 'finish' + if (!this[EMITTED_END] && !this[DESTROYED]) + return + const ret = super.emit('close') + this.removeAllListeners('close') + return ret + } else if (ev === 'error') { + this[EMITTED_ERROR] = data + const ret = super.emit('error', data) + this[MAYBE_EMIT_END]() + return ret + } else if (ev === 'resume') { + const ret = super.emit('resume') + this[MAYBE_EMIT_END]() + return ret + } else if (ev === 'finish' || ev === 'prefinish') { + const ret = super.emit(ev) + this.removeAllListeners(ev) + return ret + } -/** - * Colorize log arguments if enabled. - * - * @api public - */ + // Some other unknown event + const ret = super.emit(ev, data, ...extra) + this[MAYBE_EMIT_END]() + return ret + } -function formatArgs(args) { - args[0] = (this.useColors ? '%c' : '') + - this.namespace + - (this.useColors ? ' %c' : ' ') + - args[0] + - (this.useColors ? '%c ' : ' ') + - '+' + module.exports.humanize(this.diff); + [EMITDATA] (data) { + for (const p of this.pipes) { + if (p.dest.write(data) === false) + this.pause() + } + const ret = super.emit('data', data) + this[MAYBE_EMIT_END]() + return ret + } - if (!this.useColors) { - return; - } + [EMITEND] () { + if (this[EMITTED_END]) + return - const c = 'color: ' + this.color; - args.splice(1, 0, c, 'color: inherit'); + this[EMITTED_END] = true + this.readable = false + if (this[ASYNC]) + defer(() => this[EMITEND2]()) + else + this[EMITEND2]() + } - // The final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - let index = 0; - let lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, match => { - if (match === '%%') { - return; - } - index++; - if (match === '%c') { - // We only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); + [EMITEND2] () { + if (this[DECODER]) { + const data = this[DECODER].end() + if (data) { + for (const p of this.pipes) { + p.dest.write(data) + } + super.emit('data', data) + } + } - args.splice(lastC, 0, c); -} + for (const p of this.pipes) { + p.end() + } + const ret = super.emit('end') + this.removeAllListeners('end') + return ret + } -/** - * Invokes `console.log()` when available. - * No-op when `console.log` is not a "function". - * - * @api public - */ -function log(...args) { - // This hackery is required for IE8/9, where - // the `console.log` function doesn't have 'apply' - return typeof console === 'object' && - console.log && - console.log(...args); -} + // const all = await stream.collect() + collect () { + const buf = [] + if (!this[OBJECTMODE]) + buf.dataLength = 0 + // set the promise first, in case an error is raised + // by triggering the flow here. + const p = this.promise() + this.on('data', c => { + buf.push(c) + if (!this[OBJECTMODE]) + buf.dataLength += c.length + }) + return p.then(() => buf) + } -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ -function save(namespaces) { - try { - if (namespaces) { - exports.storage.setItem('debug', namespaces); - } else { - exports.storage.removeItem('debug'); - } - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } -} + // const data = await stream.concat() + concat () { + return this[OBJECTMODE] + ? Promise.reject(new Error('cannot concat in objectMode')) + : this.collect().then(buf => + this[OBJECTMODE] + ? Promise.reject(new Error('cannot concat in objectMode')) + : this[ENCODING] ? buf.join('') : Buffer.concat(buf, buf.dataLength)) + } -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ -function load() { - let r; - try { - r = exports.storage.getItem('debug'); - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } + // stream.promise().then(() => done, er => emitted error) + promise () { + return new Promise((resolve, reject) => { + this.on(DESTROYED, () => reject(new Error('stream destroyed'))) + this.on('error', er => reject(er)) + this.on('end', () => resolve()) + }) + } - // If debug isn't set in LS, and we're in Electron, try to load $DEBUG - if (!r && typeof process !== 'undefined' && 'env' in process) { - r = process.env.DEBUG; - } + // for await (let chunk of stream) + [ASYNCITERATOR] () { + const next = () => { + const res = this.read() + if (res !== null) + return Promise.resolve({ done: false, value: res }) - return r; -} + if (this[EOF]) + return Promise.resolve({ done: true }) -/** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ + let resolve = null + let reject = null + const onerr = er => { + this.removeListener('data', ondata) + this.removeListener('end', onend) + reject(er) + } + const ondata = value => { + this.removeListener('error', onerr) + this.removeListener('end', onend) + this.pause() + resolve({ value: value, done: !!this[EOF] }) + } + const onend = () => { + this.removeListener('error', onerr) + this.removeListener('data', ondata) + resolve({ done: true }) + } + const ondestroy = () => onerr(new Error('stream destroyed')) + return new Promise((res, rej) => { + reject = rej + resolve = res + this.once(DESTROYED, ondestroy) + this.once('error', onerr) + this.once('end', onend) + this.once('data', ondata) + }) + } -function localstorage() { - try { - // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context - // The Browser also has localStorage in the global context. - return localStorage; - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } -} + return { next } + } -module.exports = __webpack_require__(/*! ./common */ "./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/common.js")(exports); + // for (let chunk of stream) + [ITERATOR] () { + const next = () => { + const value = this.read() + const done = value === null + return { value, done } + } + return { next } + } -const {formatters} = module.exports; + destroy (er) { + if (this[DESTROYED]) { + if (er) + this.emit('error', er) + else + this.emit(DESTROYED) + return this + } -/** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. - */ + this[DESTROYED] = true -formatters.j = function (v) { - try { - return JSON.stringify(v); - } catch (error) { - return '[UnexpectedJSONParseError]: ' + error.message; - } -}; + // throw away all buffered data, it's never coming out + this.buffer.length = 0 + this[BUFFERLENGTH] = 0 + + if (typeof this.close === 'function' && !this[CLOSED]) + this.close() + + if (er) + this.emit('error', er) + else // if no error to emit, still reject pending promises + this.emit(DESTROYED) + + return this + } + + static isStream (s) { + return !!s && (s instanceof Minipass || s instanceof Stream || + s instanceof EE && ( + typeof s.pipe === 'function' || // readable + (typeof s.write === 'function' && typeof s.end === 'function') // writable + )) + } +} /***/ }), -/***/ "./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/common.js": -/*!***************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/common.js ***! - \***************************************************************************************************************************************/ +/***/ "../../../.yarn/berry/cache/minizlib-npm-2.1.2-ea89cd0cfb-9.zip/node_modules/minizlib/constants.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/minizlib-npm-2.1.2-ea89cd0cfb-9.zip/node_modules/minizlib/constants.js ***! + \*********************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { +// Update with any zlib constants that are added or changed in the future. +// Node v6 didn't export this, so we just hard code the version and rely +// on all the other hard-coded values from zlib v4736. When node v6 +// support drops, we can just export the realZlibConstants object. +const realZlibConstants = (__webpack_require__(/*! zlib */ "zlib").constants) || + /* istanbul ignore next */ { ZLIB_VERNUM: 4736 } -/** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - */ - -function setup(env) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = __webpack_require__(/*! ms */ "./.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip/node_modules/ms/index.js"); +module.exports = Object.freeze(Object.assign(Object.create(null), { + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + Z_VERSION_ERROR: -6, + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + DEFLATE: 1, + INFLATE: 2, + GZIP: 3, + GUNZIP: 4, + DEFLATERAW: 5, + INFLATERAW: 6, + UNZIP: 7, + BROTLI_DECODE: 8, + BROTLI_ENCODE: 9, + Z_MIN_WINDOWBITS: 8, + Z_MAX_WINDOWBITS: 15, + Z_DEFAULT_WINDOWBITS: 15, + Z_MIN_CHUNK: 64, + Z_MAX_CHUNK: Infinity, + Z_DEFAULT_CHUNK: 16384, + Z_MIN_MEMLEVEL: 1, + Z_MAX_MEMLEVEL: 9, + Z_DEFAULT_MEMLEVEL: 8, + Z_MIN_LEVEL: -1, + Z_MAX_LEVEL: 9, + Z_DEFAULT_LEVEL: -1, + BROTLI_OPERATION_PROCESS: 0, + BROTLI_OPERATION_FLUSH: 1, + BROTLI_OPERATION_FINISH: 2, + BROTLI_OPERATION_EMIT_METADATA: 3, + BROTLI_MODE_GENERIC: 0, + BROTLI_MODE_TEXT: 1, + BROTLI_MODE_FONT: 2, + BROTLI_DEFAULT_MODE: 0, + BROTLI_MIN_QUALITY: 0, + BROTLI_MAX_QUALITY: 11, + BROTLI_DEFAULT_QUALITY: 11, + BROTLI_MIN_WINDOW_BITS: 10, + BROTLI_MAX_WINDOW_BITS: 24, + BROTLI_LARGE_MAX_WINDOW_BITS: 30, + BROTLI_DEFAULT_WINDOW: 22, + BROTLI_MIN_INPUT_BLOCK_BITS: 16, + BROTLI_MAX_INPUT_BLOCK_BITS: 24, + BROTLI_PARAM_MODE: 0, + BROTLI_PARAM_QUALITY: 1, + BROTLI_PARAM_LGWIN: 2, + BROTLI_PARAM_LGBLOCK: 3, + BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4, + BROTLI_PARAM_SIZE_HINT: 5, + BROTLI_PARAM_LARGE_WINDOW: 6, + BROTLI_PARAM_NPOSTFIX: 7, + BROTLI_PARAM_NDIRECT: 8, + BROTLI_DECODER_RESULT_ERROR: 0, + BROTLI_DECODER_RESULT_SUCCESS: 1, + BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2, + BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3, + BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0, + BROTLI_DECODER_PARAM_LARGE_WINDOW: 1, + BROTLI_DECODER_NO_ERROR: 0, + BROTLI_DECODER_SUCCESS: 1, + BROTLI_DECODER_NEEDS_MORE_INPUT: 2, + BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3, + BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1, + BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2, + BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3, + BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4, + BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5, + BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6, + BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7, + BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8, + BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9, + BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10, + BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11, + BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12, + BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13, + BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14, + BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15, + BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16, + BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19, + BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20, + BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21, + BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22, + BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25, + BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26, + BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27, + BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30, + BROTLI_DECODER_ERROR_UNREACHABLE: -31, +}, realZlibConstants)) - Object.keys(env).forEach(key => { - createDebug[key] = env[key]; - }); - /** - * Active `debug` instances. - */ - createDebug.instances = []; +/***/ }), - /** - * The currently active debug mode names, and names to skip. - */ +/***/ "../../../.yarn/berry/cache/minizlib-npm-2.1.2-ea89cd0cfb-9.zip/node_modules/minizlib/index.js": +/*!*****************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/minizlib-npm-2.1.2-ea89cd0cfb-9.zip/node_modules/minizlib/index.js ***! + \*****************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - createDebug.names = []; - createDebug.skips = []; +"use strict"; - /** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - createDebug.formatters = {}; - /** - * Selects a color for a debug namespace - * @param {String} namespace The namespace string for the for the debug instance to be colored - * @return {Number|String} An ANSI color code for the given namespace - * @api private - */ - function selectColor(namespace) { - let hash = 0; +const assert = __webpack_require__(/*! assert */ "assert") +const Buffer = (__webpack_require__(/*! buffer */ "buffer").Buffer) +const realZlib = __webpack_require__(/*! zlib */ "zlib") - for (let i = 0; i < namespace.length; i++) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } +const constants = exports.constants = __webpack_require__(/*! ./constants.js */ "../../../.yarn/berry/cache/minizlib-npm-2.1.2-ea89cd0cfb-9.zip/node_modules/minizlib/constants.js") +const Minipass = __webpack_require__(/*! minipass */ "../../../.yarn/berry/cache/minipass-npm-3.3.5-a555b091e7-9.zip/node_modules/minipass/index.js") - return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; +const OriginalBufferConcat = Buffer.concat - /** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - function createDebug(namespace) { - let prevTime; - - function debug(...args) { - // Disabled? - if (!debug.enabled) { - return; - } +const _superWrite = Symbol('_superWrite') +class ZlibError extends Error { + constructor (err) { + super('zlib: ' + err.message) + this.code = err.code + this.errno = err.errno + /* istanbul ignore if */ + if (!this.code) + this.code = 'ZLIB_ERROR' - const self = debug; + this.message = 'zlib: ' + err.message + Error.captureStackTrace(this, this.constructor) + } - // Set `diff` timestamp - const curr = Number(new Date()); - const ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; + get name () { + return 'ZlibError' + } +} - args[0] = createDebug.coerce(args[0]); +// the Zlib class they all inherit from +// This thing manages the queue of requests, and returns +// true or false if there is anything in the queue when +// you call the .write() method. +const _opts = Symbol('opts') +const _flushFlag = Symbol('flushFlag') +const _finishFlushFlag = Symbol('finishFlushFlag') +const _fullFlushFlag = Symbol('fullFlushFlag') +const _handle = Symbol('handle') +const _onError = Symbol('onError') +const _sawError = Symbol('sawError') +const _level = Symbol('level') +const _strategy = Symbol('strategy') +const _ended = Symbol('ended') +const _defaultFullFlush = Symbol('_defaultFullFlush') - if (typeof args[0] !== 'string') { - // Anything else let's inspect with %O - args.unshift('%O'); - } +class ZlibBase extends Minipass { + constructor (opts, mode) { + if (!opts || typeof opts !== 'object') + throw new TypeError('invalid options for ZlibBase constructor') - // Apply any `formatters` transformations - let index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { - // If we encounter an escaped % then don't increase the array index - if (match === '%%') { - return match; - } - index++; - const formatter = createDebug.formatters[format]; - if (typeof formatter === 'function') { - const val = args[index]; - match = formatter.call(self, val); + super(opts) + this[_sawError] = false + this[_ended] = false + this[_opts] = opts - // Now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); + this[_flushFlag] = opts.flush + this[_finishFlushFlag] = opts.finishFlush + // this will throw if any options are invalid for the class selected + try { + this[_handle] = new realZlib[mode](opts) + } catch (er) { + // make sure that all errors get decorated properly + throw new ZlibError(er) + } - // Apply env-specific formatting (colors, etc.) - createDebug.formatArgs.call(self, args); + this[_onError] = (err) => { + // no sense raising multiple errors, since we abort on the first one. + if (this[_sawError]) + return - const logFn = self.log || createDebug.log; - logFn.apply(self, args); - } + this[_sawError] = true - debug.namespace = namespace; - debug.enabled = createDebug.enabled(namespace); - debug.useColors = createDebug.useColors(); - debug.color = selectColor(namespace); - debug.destroy = destroy; - debug.extend = extend; - // Debug.formatArgs = formatArgs; - // debug.rawLog = rawLog; + // there is no way to cleanly recover. + // continuing only obscures problems. + this.close() + this.emit('error', err) + } - // env-specific initialization logic for debug instances - if (typeof createDebug.init === 'function') { - createDebug.init(debug); - } + this[_handle].on('error', er => this[_onError](new ZlibError(er))) + this.once('end', () => this.close) + } - createDebug.instances.push(debug); + close () { + if (this[_handle]) { + this[_handle].close() + this[_handle] = null + this.emit('close') + } + } - return debug; - } + reset () { + if (!this[_sawError]) { + assert(this[_handle], 'zlib binding closed') + return this[_handle].reset() + } + } - function destroy() { - const index = createDebug.instances.indexOf(this); - if (index !== -1) { - createDebug.instances.splice(index, 1); - return true; - } - return false; - } + flush (flushFlag) { + if (this.ended) + return - function extend(namespace, delimiter) { - const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } + if (typeof flushFlag !== 'number') + flushFlag = this[_fullFlushFlag] + this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag })) + } - /** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - function enable(namespaces) { - createDebug.save(namespaces); + end (chunk, encoding, cb) { + if (chunk) + this.write(chunk, encoding) + this.flush(this[_finishFlushFlag]) + this[_ended] = true + return super.end(null, null, cb) + } - createDebug.names = []; - createDebug.skips = []; + get ended () { + return this[_ended] + } - let i; - const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - const len = split.length; + write (chunk, encoding, cb) { + // process the chunk using the sync process + // then super.write() all the outputted chunks + if (typeof encoding === 'function') + cb = encoding, encoding = 'utf8' - for (i = 0; i < len; i++) { - if (!split[i]) { - // ignore empty strings - continue; - } + if (typeof chunk === 'string') + chunk = Buffer.from(chunk, encoding) - namespaces = split[i].replace(/\*/g, '.*?'); + if (this[_sawError]) + return + assert(this[_handle], 'zlib binding closed') - if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - createDebug.names.push(new RegExp('^' + namespaces + '$')); - } - } + // _processChunk tries to .close() the native handle after it's done, so we + // intercept that by temporarily making it a no-op. + const nativeHandle = this[_handle]._handle + const originalNativeClose = nativeHandle.close + nativeHandle.close = () => {} + const originalClose = this[_handle].close + this[_handle].close = () => {} + // It also calls `Buffer.concat()` at the end, which may be convenient + // for some, but which we are not interested in as it slows us down. + Buffer.concat = (args) => args + let result + try { + const flushFlag = typeof chunk[_flushFlag] === 'number' + ? chunk[_flushFlag] : this[_flushFlag] + result = this[_handle]._processChunk(chunk, flushFlag) + // if we don't throw, reset it back how it was + Buffer.concat = OriginalBufferConcat + } catch (err) { + // or if we do, put Buffer.concat() back before we emit error + // Error events call into user code, which may call Buffer.concat() + Buffer.concat = OriginalBufferConcat + this[_onError](new ZlibError(err)) + } finally { + if (this[_handle]) { + // Core zlib resets `_handle` to null after attempting to close the + // native handle. Our no-op handler prevented actual closure, but we + // need to restore the `._handle` property. + this[_handle]._handle = nativeHandle + nativeHandle.close = originalNativeClose + this[_handle].close = originalClose + // `_processChunk()` adds an 'error' listener. If we don't remove it + // after each call, these handlers start piling up. + this[_handle].removeAllListeners('error') + // make sure OUR error listener is still attached tho + } + } - for (i = 0; i < createDebug.instances.length; i++) { - const instance = createDebug.instances[i]; - instance.enabled = createDebug.enabled(instance.namespace); - } - } + if (this[_handle]) + this[_handle].on('error', er => this[_onError](new ZlibError(er))) - /** - * Disable debug output. - * - * @return {String} namespaces - * @api public - */ - function disable() { - const namespaces = [ - ...createDebug.names.map(toNamespace), - ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) - ].join(','); - createDebug.enable(''); - return namespaces; - } + let writeReturn + if (result) { + if (Array.isArray(result) && result.length > 0) { + // The first buffer is always `handle._outBuffer`, which would be + // re-used for later invocations; so, we always have to copy that one. + writeReturn = this[_superWrite](Buffer.from(result[0])) + for (let i = 1; i < result.length; i++) { + writeReturn = this[_superWrite](result[i]) + } + } else { + writeReturn = this[_superWrite](Buffer.from(result)) + } + } - /** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - function enabled(name) { - if (name[name.length - 1] === '*') { - return true; - } + if (cb) + cb() + return writeReturn + } - let i; - let len; + [_superWrite] (data) { + return super.write(data) + } +} - for (i = 0, len = createDebug.skips.length; i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } +class Zlib extends ZlibBase { + constructor (opts, mode) { + opts = opts || {} - for (i = 0, len = createDebug.names.length; i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } + opts.flush = opts.flush || constants.Z_NO_FLUSH + opts.finishFlush = opts.finishFlush || constants.Z_FINISH + super(opts, mode) - return false; - } + this[_fullFlushFlag] = constants.Z_FULL_FLUSH + this[_level] = opts.level + this[_strategy] = opts.strategy + } - /** - * Convert regexp to namespace - * - * @param {RegExp} regxep - * @return {String} namespace - * @api private - */ - function toNamespace(regexp) { - return regexp.toString() - .substring(2, regexp.toString().length - 2) - .replace(/\.\*\?$/, '*'); - } + params (level, strategy) { + if (this[_sawError]) + return - /** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - return val; - } + if (!this[_handle]) + throw new Error('cannot switch params when binding is closed') - createDebug.enable(createDebug.load()); + // no way to test this without also not supporting params at all + /* istanbul ignore if */ + if (!this[_handle].params) + throw new Error('not supported in this implementation') - return createDebug; + if (this[_level] !== level || this[_strategy] !== strategy) { + this.flush(constants.Z_SYNC_FLUSH) + assert(this[_handle], 'zlib binding closed') + // .params() calls .flush(), but the latter is always async in the + // core zlib. We override .flush() temporarily to intercept that and + // flush synchronously. + const origFlush = this[_handle].flush + this[_handle].flush = (flushFlag, cb) => { + this.flush(flushFlag) + cb() + } + try { + this[_handle].params(level, strategy) + } finally { + this[_handle].flush = origFlush + } + /* istanbul ignore else */ + if (this[_handle]) { + this[_level] = level + this[_strategy] = strategy + } + } + } } -module.exports = setup; +// minimal 2-byte header +class Deflate extends Zlib { + constructor (opts) { + super(opts, 'Deflate') + } +} +class Inflate extends Zlib { + constructor (opts) { + super(opts, 'Inflate') + } +} -/***/ }), +// gzip - bigger header, same deflate compression +const _portable = Symbol('_portable') +class Gzip extends Zlib { + constructor (opts) { + super(opts, 'Gzip') + this[_portable] = opts && !!opts.portable + } -/***/ "./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/index.js": -/*!**************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/index.js ***! - \**************************************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + [_superWrite] (data) { + if (!this[_portable]) + return super[_superWrite](data) -/** - * Detect Electron renderer / nwjs process, which is node, but we should - * treat as a browser. - */ + // we'll always get the header emitted in one first chunk + // overwrite the OS indicator byte with 0xFF + this[_portable] = false + data[9] = 255 + return super[_superWrite](data) + } +} -if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { - module.exports = __webpack_require__(/*! ./browser.js */ "./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/browser.js"); +class Gunzip extends Zlib { + constructor (opts) { + super(opts, 'Gunzip') + } +} + +// raw - no header +class DeflateRaw extends Zlib { + constructor (opts) { + super(opts, 'DeflateRaw') + } +} + +class InflateRaw extends Zlib { + constructor (opts) { + super(opts, 'InflateRaw') + } +} + +// auto-detect header. +class Unzip extends Zlib { + constructor (opts) { + super(opts, 'Unzip') + } +} + +class Brotli extends ZlibBase { + constructor (opts, mode) { + opts = opts || {} + + opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS + opts.finishFlush = opts.finishFlush || constants.BROTLI_OPERATION_FINISH + + super(opts, mode) + + this[_fullFlushFlag] = constants.BROTLI_OPERATION_FLUSH + } +} + +class BrotliCompress extends Brotli { + constructor (opts) { + super(opts, 'BrotliCompress') + } +} + +class BrotliDecompress extends Brotli { + constructor (opts) { + super(opts, 'BrotliDecompress') + } +} + +exports.Deflate = Deflate +exports.Inflate = Inflate +exports.Gzip = Gzip +exports.Gunzip = Gunzip +exports.DeflateRaw = DeflateRaw +exports.InflateRaw = InflateRaw +exports.Unzip = Unzip +/* istanbul ignore else */ +if (typeof realZlib.BrotliCompress === 'function') { + exports.BrotliCompress = BrotliCompress + exports.BrotliDecompress = BrotliDecompress } else { - module.exports = __webpack_require__(/*! ./node.js */ "./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/node.js"); + exports.BrotliCompress = exports.BrotliDecompress = class { + constructor () { + throw new Error('Brotli is not supported in this version of Node.js') + } + } } /***/ }), -/***/ "./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/node.js": -/*!*************************************************************************************************************************************!*\ - !*** ./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/node.js ***! - \*************************************************************************************************************************************/ -/***/ ((module, exports, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/index.js": +/*!*************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/index.js ***! + \*************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Module dependencies. - */ +const optsArg = __webpack_require__(/*! ./lib/opts-arg.js */ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/opts-arg.js") +const pathArg = __webpack_require__(/*! ./lib/path-arg.js */ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/path-arg.js") -const tty = __webpack_require__(/*! tty */ "tty"); -const util = __webpack_require__(/*! util */ "util"); +const {mkdirpNative, mkdirpNativeSync} = __webpack_require__(/*! ./lib/mkdirp-native.js */ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/mkdirp-native.js") +const {mkdirpManual, mkdirpManualSync} = __webpack_require__(/*! ./lib/mkdirp-manual.js */ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/mkdirp-manual.js") +const {useNative, useNativeSync} = __webpack_require__(/*! ./lib/use-native.js */ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/use-native.js") -/** - * This is the Node.js implementation of `debug()`. - */ -exports.init = init; -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; +const mkdirp = (path, opts) => { + path = pathArg(path) + opts = optsArg(opts) + return useNative(opts) + ? mkdirpNative(path, opts) + : mkdirpManual(path, opts) +} -/** - * Colors. - */ +const mkdirpSync = (path, opts) => { + path = pathArg(path) + opts = optsArg(opts) + return useNativeSync(opts) + ? mkdirpNativeSync(path, opts) + : mkdirpManualSync(path, opts) +} -exports.colors = [6, 2, 3, 4, 5, 1]; +mkdirp.sync = mkdirpSync +mkdirp.native = (path, opts) => mkdirpNative(pathArg(path), optsArg(opts)) +mkdirp.manual = (path, opts) => mkdirpManual(pathArg(path), optsArg(opts)) +mkdirp.nativeSync = (path, opts) => mkdirpNativeSync(pathArg(path), optsArg(opts)) +mkdirp.manualSync = (path, opts) => mkdirpManualSync(pathArg(path), optsArg(opts)) -try { - // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) - // eslint-disable-next-line import/no-extraneous-dependencies - const supportsColor = __webpack_require__(/*! supports-color */ "./.yarn/cache/supports-color-npm-7.1.0-df2ba1e338-899480ac85.zip/node_modules/supports-color/index.js"); +module.exports = mkdirp - if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { - exports.colors = [ - 20, - 21, - 26, - 27, - 32, - 33, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 56, - 57, - 62, - 63, - 68, - 69, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 92, - 93, - 98, - 99, - 112, - 113, - 128, - 129, - 134, - 135, - 148, - 149, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 178, - 179, - 184, - 185, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 214, - 215, - 220, - 221 - ]; - } -} catch (error) { - // Swallow - we only care if `supports-color` is available; it doesn't have to be. -} - -/** - * Build up the default `inspectOpts` object from the environment variables. - * - * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js - */ -exports.inspectOpts = Object.keys(process.env).filter(key => { - return /^debug_/i.test(key); -}).reduce((obj, key) => { - // Camel-case - const prop = key - .substring(6) - .toLowerCase() - .replace(/_([a-z])/g, (_, k) => { - return k.toUpperCase(); - }); +/***/ }), - // Coerce string value into JS value - let val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) { - val = true; - } else if (/^(no|off|false|disabled)$/i.test(val)) { - val = false; - } else if (val === 'null') { - val = null; - } else { - val = Number(val); - } +/***/ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/find-made.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/find-made.js ***! + \*********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - obj[prop] = val; - return obj; -}, {}); +const {dirname} = __webpack_require__(/*! path */ "path") -/** - * Is stdout a TTY? Colored output is enabled when `true`. - */ +const findMade = (opts, parent, path = undefined) => { + // we never want the 'made' return value to be a root directory + if (path === parent) + return Promise.resolve() -function useColors() { - return 'colors' in exports.inspectOpts ? - Boolean(exports.inspectOpts.colors) : - tty.isatty(process.stderr.fd); + return opts.statAsync(parent).then( + st => st.isDirectory() ? path : undefined, // will fail later + er => er.code === 'ENOENT' + ? findMade(opts, dirname(parent), parent) + : undefined + ) } -/** - * Adds ANSI color escape codes if enabled. - * - * @api public - */ - -function formatArgs(args) { - const {namespace: name, useColors} = this; - - if (useColors) { - const c = this.color; - const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); - const prefix = ` ${colorCode};1m${name} \u001B[0m`; - - args[0] = prefix + args[0].split('\n').join('\n' + prefix); - args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); - } else { - args[0] = getDate() + name + ' ' + args[0]; - } -} +const findMadeSync = (opts, parent, path = undefined) => { + if (path === parent) + return undefined -function getDate() { - if (exports.inspectOpts.hideDate) { - return ''; - } - return new Date().toISOString() + ' '; + try { + return opts.statSync(parent).isDirectory() ? path : undefined + } catch (er) { + return er.code === 'ENOENT' + ? findMadeSync(opts, dirname(parent), parent) + : undefined + } } -/** - * Invokes `util.format()` with the specified arguments and writes to stderr. - */ - -function log(...args) { - return process.stderr.write(util.format(...args) + '\n'); -} +module.exports = {findMade, findMadeSync} -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ -function save(namespaces) { - if (namespaces) { - process.env.DEBUG = namespaces; - } else { - // If you set a process.env field to null or undefined, it gets cast to the - // string 'null' or 'undefined'. Just delete instead. - delete process.env.DEBUG; - } -} -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ +/***/ }), -function load() { - return process.env.DEBUG; -} +/***/ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/mkdirp-manual.js": +/*!*************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/mkdirp-manual.js ***! + \*************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Init logic for `debug` instances. - * - * Create a new `inspectOpts` object in case `useColors` is set - * differently for a particular `debug` instance. - */ +const {dirname} = __webpack_require__(/*! path */ "path") -function init(debug) { - debug.inspectOpts = {}; +const mkdirpManual = (path, opts, made) => { + opts.recursive = false + const parent = dirname(path) + if (parent === path) { + return opts.mkdirAsync(path, opts).catch(er => { + // swallowed by recursive implementation on posix systems + // any other error is a failure + if (er.code !== 'EISDIR') + throw er + }) + } - const keys = Object.keys(exports.inspectOpts); - for (let i = 0; i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; - } + return opts.mkdirAsync(path, opts).then(() => made || path, er => { + if (er.code === 'ENOENT') + return mkdirpManual(parent, opts) + .then(made => mkdirpManual(path, opts, made)) + if (er.code !== 'EEXIST' && er.code !== 'EROFS') + throw er + return opts.statAsync(path).then(st => { + if (st.isDirectory()) + return made + else + throw er + }, () => { throw er }) + }) } -module.exports = __webpack_require__(/*! ./common */ "./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/common.js")(exports); - -const {formatters} = module.exports; +const mkdirpManualSync = (path, opts, made) => { + const parent = dirname(path) + opts.recursive = false -/** - * Map %o to `util.inspect()`, all on a single line. - */ + if (parent === path) { + try { + return opts.mkdirSync(path, opts) + } catch (er) { + // swallowed by recursive implementation on posix systems + // any other error is a failure + if (er.code !== 'EISDIR') + throw er + else + return + } + } -formatters.o = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts) - .replace(/\s*\n\s*/g, ' '); -}; - -/** - * Map %O to `util.inspect()`, allowing multiple lines if needed. - */ + try { + opts.mkdirSync(path, opts) + return made || path + } catch (er) { + if (er.code === 'ENOENT') + return mkdirpManualSync(path, opts, mkdirpManualSync(parent, opts, made)) + if (er.code !== 'EEXIST' && er.code !== 'EROFS') + throw er + try { + if (!opts.statSync(path).isDirectory()) + throw er + } catch (_) { + throw er + } + } +} -formatters.O = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); -}; +module.exports = {mkdirpManual, mkdirpManualSync} /***/ }), -/***/ "./sources/Engine.ts": -/*!***************************!*\ - !*** ./sources/Engine.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/mkdirp-native.js": +/*!*************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/mkdirp-native.js ***! + \*************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Engine": () => (/* binding */ Engine) -/* harmony export */ }); -/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/index.js"); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ "fs"); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ "path"); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/index.js"); -/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(semver__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _config_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.json */ "./config.json"); -/* harmony import */ var _folderUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./folderUtils */ "./sources/folderUtils.ts"); -/* harmony import */ var _corepackUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./corepackUtils */ "./sources/corepackUtils.ts"); -/* harmony import */ var _semverUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./semverUtils */ "./sources/semverUtils.ts"); -/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./types */ "./sources/types.ts"); +const {dirname} = __webpack_require__(/*! path */ "path") +const {findMade, findMadeSync} = __webpack_require__(/*! ./find-made.js */ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/find-made.js") +const {mkdirpManual, mkdirpManualSync} = __webpack_require__(/*! ./mkdirp-manual.js */ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/mkdirp-manual.js") +const mkdirpNative = (path, opts) => { + opts.recursive = true + const parent = dirname(path) + if (parent === path) + return opts.mkdirAsync(path, opts) + return findMade(opts, path).then(made => + opts.mkdirAsync(path, opts).then(() => made) + .catch(er => { + if (er.code === 'ENOENT') + return mkdirpManual(path, opts) + else + throw er + })) +} +const mkdirpNativeSync = (path, opts) => { + opts.recursive = true + const parent = dirname(path) + if (parent === path) + return opts.mkdirSync(path, opts) + const made = findMadeSync(opts, path) + try { + opts.mkdirSync(path, opts) + return made + } catch (er) { + if (er.code === 'ENOENT') + return mkdirpManualSync(path, opts) + else + throw er + } +} +module.exports = {mkdirpNative, mkdirpNativeSync} +/***/ }), +/***/ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/opts-arg.js": +/*!********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/opts-arg.js ***! + \********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -class Engine { - constructor(config = _config_json__WEBPACK_IMPORTED_MODULE_3__) { - this.config = config; - } - getPackageManagerFor(binaryName) { - for (const packageManager of _types__WEBPACK_IMPORTED_MODULE_7__.SupportedPackageManagerSet) { - for (const rangeDefinition of Object.values(this.config.definitions[packageManager].ranges)) { - const bins = Array.isArray(rangeDefinition.bin) - ? rangeDefinition.bin - : Object.keys(rangeDefinition.bin); - if (bins.includes(binaryName)) { - return packageManager; - } - } - } - return null; - } - getBinariesFor(name) { - const binNames = new Set(); - for (const rangeDefinition of Object.values(this.config.definitions[name].ranges)) { - const bins = Array.isArray(rangeDefinition.bin) - ? rangeDefinition.bin - : Object.keys(rangeDefinition.bin); - for (const name of bins) { - binNames.add(name); - } - } - return binNames; - } - async getDefaultDescriptors() { - const locators = []; - for (const name of _types__WEBPACK_IMPORTED_MODULE_7__.SupportedPackageManagerSet) - locators.push({ name, range: await this.getDefaultVersion(name) }); - return locators; - } - async getDefaultVersion(packageManager) { - const definition = this.config.definitions[packageManager]; - if (typeof definition === `undefined`) - throw new clipanion__WEBPACK_IMPORTED_MODULE_8__.UsageError(`This package manager (${packageManager}) isn't supported by this corepack build`); - let lastKnownGood; - try { - lastKnownGood = JSON.parse(await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.readFile(this.getLastKnownGoodFile(), `utf8`)); - } - catch (_a) { - // Ignore errors; too bad - } - if (typeof lastKnownGood !== `object` || lastKnownGood === null) - return definition.default; - if (!Object.prototype.hasOwnProperty.call(lastKnownGood, packageManager)) - return definition.default; - const override = lastKnownGood[packageManager]; - if (typeof override !== `string`) - return definition.default; - return override; - } - async activatePackageManager(locator) { - const lastKnownGoodFile = this.getLastKnownGoodFile(); - let lastKnownGood; - try { - lastKnownGood = JSON.parse(await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.readFile(lastKnownGoodFile, `utf8`)); - } - catch (_a) { - // Ignore errors; too bad - } - if (typeof lastKnownGood !== `object` || lastKnownGood === null) - lastKnownGood = {}; - lastKnownGood[locator.name] = locator.reference; - await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.mkdir(path__WEBPACK_IMPORTED_MODULE_1___default().dirname(lastKnownGoodFile), { recursive: true }); - await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.writeFile(lastKnownGoodFile, `${JSON.stringify(lastKnownGood, null, 2)}\n`); - } - async ensurePackageManager(locator) { - const definition = this.config.definitions[locator.name]; - if (typeof definition === `undefined`) - throw new clipanion__WEBPACK_IMPORTED_MODULE_8__.UsageError(`This package manager (${locator.name}) isn't supported by this corepack build`); - const ranges = Object.keys(definition.ranges).reverse(); - const range = ranges.find(range => _semverUtils__WEBPACK_IMPORTED_MODULE_6__.satisfiesWithPrereleases(locator.reference, range)); - if (typeof range === `undefined`) - throw new Error(`Assertion failed: Specified resolution (${locator.reference}) isn't supported by any of ${ranges.join(`, `)}`); - const installedLocation = await _corepackUtils__WEBPACK_IMPORTED_MODULE_5__.installVersion(_folderUtils__WEBPACK_IMPORTED_MODULE_4__.getInstallFolder(), locator, { - spec: definition.ranges[range], - }); - return { - location: installedLocation, - spec: definition.ranges[range], - }; - } - async resolveDescriptor(descriptor, { allowTags = false, useCache = true } = {}) { - const definition = this.config.definitions[descriptor.name]; - if (typeof definition === `undefined`) - throw new clipanion__WEBPACK_IMPORTED_MODULE_8__.UsageError(`This package manager (${descriptor.name}) isn't supported by this corepack build`); - let finalDescriptor = descriptor; - if (descriptor.range.match(/^[a-z-]+$/)) { - if (!allowTags) - throw new clipanion__WEBPACK_IMPORTED_MODULE_8__.UsageError(`Packages managers can't be referended via tags in this context`); - // We only resolve tags from the latest registry entry - const ranges = Object.keys(definition.ranges); - const tagRange = ranges[ranges.length - 1]; - const tags = await _corepackUtils__WEBPACK_IMPORTED_MODULE_5__.fetchAvailableTags(definition.ranges[tagRange].registry); - if (!Object.prototype.hasOwnProperty.call(tags, descriptor.range)) - throw new clipanion__WEBPACK_IMPORTED_MODULE_8__.UsageError(`Tag not found (${descriptor.range})`); - finalDescriptor = { - name: descriptor.name, - range: tags[descriptor.range], - }; - } - // If a compatible version is already installed, no need to query one - // from the remote listings - const cachedVersion = await _corepackUtils__WEBPACK_IMPORTED_MODULE_5__.findInstalledVersion(_folderUtils__WEBPACK_IMPORTED_MODULE_4__.getInstallFolder(), finalDescriptor); - if (cachedVersion !== null && useCache) - return { name: finalDescriptor.name, reference: cachedVersion }; - const candidateRangeDefinitions = Object.keys(definition.ranges).filter(range => { - return _semverUtils__WEBPACK_IMPORTED_MODULE_6__.satisfiesWithPrereleases(finalDescriptor.range, range); - }); - const tagResolutions = await Promise.all(candidateRangeDefinitions.map(async (range) => { - return [range, await _corepackUtils__WEBPACK_IMPORTED_MODULE_5__.fetchAvailableVersions(definition.ranges[range].registry)]; - })); - // If a version is available under multiple strategies (for example if - // Yarn is published to both the v1 package and git), we only care - // about the latest one - const resolutionMap = new Map(); - for (const [range, resolutions] of tagResolutions) - for (const entry of resolutions) - resolutionMap.set(entry, range); - const candidates = [...resolutionMap.keys()]; - const maxSatisfying = semver__WEBPACK_IMPORTED_MODULE_2___default().maxSatisfying(candidates, finalDescriptor.range); - if (maxSatisfying === null) - return null; - return { name: finalDescriptor.name, reference: maxSatisfying }; - } - getLastKnownGoodFile() { - return path__WEBPACK_IMPORTED_MODULE_1___default().join(_folderUtils__WEBPACK_IMPORTED_MODULE_4__.getInstallFolder(), `lastKnownGood.json`); - } +const { promisify } = __webpack_require__(/*! util */ "util") +const fs = __webpack_require__(/*! fs */ "fs") +const optsArg = opts => { + if (!opts) + opts = { mode: 0o777, fs } + else if (typeof opts === 'object') + opts = { mode: 0o777, fs, ...opts } + else if (typeof opts === 'number') + opts = { mode: opts, fs } + else if (typeof opts === 'string') + opts = { mode: parseInt(opts, 8), fs } + else + throw new TypeError('invalid options argument') + + opts.mkdir = opts.mkdir || opts.fs.mkdir || fs.mkdir + opts.mkdirAsync = promisify(opts.mkdir) + opts.stat = opts.stat || opts.fs.stat || fs.stat + opts.statAsync = promisify(opts.stat) + opts.statSync = opts.statSync || opts.fs.statSync || fs.statSync + opts.mkdirSync = opts.mkdirSync || opts.fs.mkdirSync || fs.mkdirSync + return opts } +module.exports = optsArg /***/ }), -/***/ "./sources/commands/Disable.ts": -/*!*************************************!*\ - !*** ./sources/commands/Disable.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "DisableCommand": () => (/* binding */ DisableCommand) -/* harmony export */ }); -/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/index.js"); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ "fs"); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ "path"); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var which__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! which */ "./.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip/node_modules/which/which.js"); -/* harmony import */ var which__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(which__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../types */ "./sources/types.ts"); - - - +/***/ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/path-arg.js": +/*!********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/path-arg.js ***! + \********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +const platform = process.env.__TESTING_MKDIRP_PLATFORM__ || process.platform +const { resolve, parse } = __webpack_require__(/*! path */ "path") +const pathArg = path => { + if (/\0/.test(path)) { + // simulate same failure that node raises + throw Object.assign( + new TypeError('path must be a string without null bytes'), + { + path, + code: 'ERR_INVALID_ARG_VALUE', + } + ) + } -class DisableCommand extends clipanion__WEBPACK_IMPORTED_MODULE_4__.Command { - constructor() { - super(...arguments); - this.installDirectory = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.String(`--install-directory`, { - description: `Where the shims are located`, - }); - this.names = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.Rest(); - } - async execute() { - let installDirectory = this.installDirectory; - // Node always call realpath on the module it executes, so we already - // lost track of how the binary got called. To find it back, we need to - // iterate over the PATH variable. - if (typeof installDirectory === `undefined`) - installDirectory = path__WEBPACK_IMPORTED_MODULE_1___default().dirname(await which__WEBPACK_IMPORTED_MODULE_2___default()(`corepack`)); - const names = this.names.length === 0 - ? _types__WEBPACK_IMPORTED_MODULE_3__.SupportedPackageManagerSetWithoutNpm - : this.names; - for (const name of new Set(names)) { - if (!(0,_types__WEBPACK_IMPORTED_MODULE_3__.isSupportedPackageManager)(name)) - throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Invalid package manager name '${name}'`); - for (const binName of this.context.engine.getBinariesFor(name)) { - if (process.platform === `win32`) { - await this.removeWin32Link(installDirectory, binName); - } - else { - await this.removePosixLink(installDirectory, binName); - } - } - } - } - async removePosixLink(installDirectory, binName) { - const file = path__WEBPACK_IMPORTED_MODULE_1___default().join(installDirectory, binName); - try { - await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.unlink(file); - } - catch (err) { - if (err.code !== `ENOENT`) { - throw err; - } - } - } - async removeWin32Link(installDirectory, binName) { - for (const ext of [``, `.ps1`, `.cmd`]) { - const file = path__WEBPACK_IMPORTED_MODULE_1___default().join(installDirectory, `${binName}${ext}`); - try { - await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.unlink(file); - } - catch (err) { - if (err.code !== `ENOENT`) { - throw err; - } - } - } + path = resolve(path) + if (platform === 'win32') { + const badWinChars = /[*|"<>?:]/ + const {root} = parse(path) + if (badWinChars.test(path.substr(root.length))) { + throw Object.assign(new Error('Illegal characters in path.'), { + path, + code: 'EINVAL', + }) } -} -DisableCommand.paths = [ - [`disable`], -]; -DisableCommand.usage = clipanion__WEBPACK_IMPORTED_MODULE_4__.Command.Usage({ - description: `Remove the Corepack shims from the install directory`, - details: ` - When run, this command will remove the shims for the specified package managers from the install directory, or all shims if no parameters are passed. + } - By default it will locate the install directory by running the equivalent of \`which corepack\`, but this can be tweaked by explicitly passing the install directory via the \`--bin-folder\` flag. - `, - examples: [[ - `Disable all shims, removing them if they're next to the \`coreshim\` binary`, - `$0 disable`, - ], [ - `Disable all shims, removing them from the specified directory`, - `$0 disable --install-directory /path/to/bin`, - ], [ - `Disable the Yarn shim only`, - `$0 disable yarn`, - ]], -}); + return path +} +module.exports = pathArg /***/ }), -/***/ "./sources/commands/Enable.ts": -/*!************************************!*\ - !*** ./sources/commands/Enable.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "EnableCommand": () => (/* binding */ EnableCommand) -/* harmony export */ }); -/* harmony import */ var _zkochan_cmd_shim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @zkochan/cmd-shim */ "./.yarn/cache/@zkochan-cmd-shim-npm-5.0.0-9e90407ba0-ace99c7c36.zip/node_modules/@zkochan/cmd-shim/index.js"); -/* harmony import */ var _zkochan_cmd_shim__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_zkochan_cmd_shim__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/index.js"); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ "fs"); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! path */ "path"); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var which__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! which */ "./.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip/node_modules/which/which.js"); -/* harmony import */ var which__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(which__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../types */ "./sources/types.ts"); - - - +/***/ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/use-native.js": +/*!**********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/lib/use-native.js ***! + \**********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +const fs = __webpack_require__(/*! fs */ "fs") +const version = process.env.__TESTING_MKDIRP_NODE_VERSION__ || process.version +const versArr = version.replace(/^v/, '').split('.') +const hasNative = +versArr[0] > 10 || +versArr[0] === 10 && +versArr[1] >= 12 -class EnableCommand extends clipanion__WEBPACK_IMPORTED_MODULE_5__.Command { - constructor() { - super(...arguments); - this.installDirectory = clipanion__WEBPACK_IMPORTED_MODULE_5__.Option.String(`--install-directory`, { - description: `Where the shims are to be installed`, - }); - this.names = clipanion__WEBPACK_IMPORTED_MODULE_5__.Option.Rest(); - } - async execute() { - let installDirectory = this.installDirectory; - // Node always call realpath on the module it executes, so we already - // lost track of how the binary got called. To find it back, we need to - // iterate over the PATH variable. - if (typeof installDirectory === `undefined`) - installDirectory = path__WEBPACK_IMPORTED_MODULE_2___default().dirname(await which__WEBPACK_IMPORTED_MODULE_3___default()(`corepack`)); - // Otherwise the relative symlink we'll compute will be incorrect, if the - // install directory is within a symlink - installDirectory = fs__WEBPACK_IMPORTED_MODULE_1___default().realpathSync(installDirectory); - // We use `eval` so that Webpack doesn't statically transform it. - const manifestPath = eval(`require`).resolve(`corepack/package.json`); - const distFolder = path__WEBPACK_IMPORTED_MODULE_2___default().join(path__WEBPACK_IMPORTED_MODULE_2___default().dirname(manifestPath), `dist`); - if (!fs__WEBPACK_IMPORTED_MODULE_1___default().existsSync(distFolder)) - throw new Error(`Assertion failed: The stub folder doesn't exist`); - const names = this.names.length === 0 - ? _types__WEBPACK_IMPORTED_MODULE_4__.SupportedPackageManagerSetWithoutNpm - : this.names; - for (const name of new Set(names)) { - if (!(0,_types__WEBPACK_IMPORTED_MODULE_4__.isSupportedPackageManager)(name)) - throw new clipanion__WEBPACK_IMPORTED_MODULE_5__.UsageError(`Invalid package manager name '${name}'`); - for (const binName of this.context.engine.getBinariesFor(name)) { - if (process.platform === `win32`) { - await this.generateWin32Link(installDirectory, distFolder, binName); - } - else { - await this.generatePosixLink(installDirectory, distFolder, binName); - } - } - } - } - async generatePosixLink(installDirectory, distFolder, binName) { - const file = path__WEBPACK_IMPORTED_MODULE_2___default().join(installDirectory, binName); - const symlink = path__WEBPACK_IMPORTED_MODULE_2___default().relative(installDirectory, path__WEBPACK_IMPORTED_MODULE_2___default().join(distFolder, `${binName}.js`)); - if (fs__WEBPACK_IMPORTED_MODULE_1___default().existsSync(file)) { - const currentSymlink = await fs__WEBPACK_IMPORTED_MODULE_1___default().promises.readlink(file); - if (currentSymlink !== symlink) { - await fs__WEBPACK_IMPORTED_MODULE_1___default().promises.unlink(file); - } - else { - return; - } - } - await fs__WEBPACK_IMPORTED_MODULE_1___default().promises.symlink(symlink, file); - } - async generateWin32Link(installDirectory, distFolder, binName) { - const file = path__WEBPACK_IMPORTED_MODULE_2___default().join(installDirectory, binName); - await _zkochan_cmd_shim__WEBPACK_IMPORTED_MODULE_0___default()(path__WEBPACK_IMPORTED_MODULE_2___default().join(distFolder, `${binName}.js`), file, { - createCmdFile: true, - }); - } -} -EnableCommand.paths = [ - [`enable`], -]; -EnableCommand.usage = clipanion__WEBPACK_IMPORTED_MODULE_5__.Command.Usage({ - description: `Add the Corepack shims to the install directories`, - details: ` - When run, this commmand will check whether the shims for the specified package managers can be found with the correct values inside the install directory. If not, or if they don't exist, they will be created. +const useNative = !hasNative ? () => false : opts => opts.mkdir === fs.mkdir +const useNativeSync = !hasNative ? () => false : opts => opts.mkdirSync === fs.mkdirSync - By default it will locate the install directory by running the equivalent of \`which corepack\`, but this can be tweaked by explicitly passing the install directory via the \`--bin-folder\` flag. - `, - examples: [[ - `Enable all shims, putting them next to the \`corepath\` binary`, - `$0 enable`, - ], [ - `Enable all shims, putting them in the specified directory`, - `$0 enable --install-directory /path/to/folder`, - ], [ - `Enable the Yarn shim only`, - `$0 enable yarn`, - ]], -}); +module.exports = {useNative, useNativeSync} /***/ }), -/***/ "./sources/commands/Hydrate.ts": -/*!*************************************!*\ - !*** ./sources/commands/Hydrate.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/ms-npm-2.1.2-ec0c1512ff-9.zip/node_modules/ms/index.js": +/*!*****************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ms-npm-2.1.2-ec0c1512ff-9.zip/node_modules/ms/index.js ***! + \*****************************************************************************************/ +/***/ ((module) => { -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "HydrateCommand": () => (/* binding */ HydrateCommand) -/* harmony export */ }); -/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/index.js"); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! path */ "path"); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _folderUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../folderUtils */ "./sources/folderUtils.ts"); -/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../types */ "./sources/types.ts"); +/** + * Helpers. + */ +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; -class HydrateCommand extends clipanion__WEBPACK_IMPORTED_MODULE_3__.Command { - constructor() { - super(...arguments); - this.activate = clipanion__WEBPACK_IMPORTED_MODULE_3__.Option.Boolean(`--activate`, false, { - description: `If true, this release will become the default one for this package manager`, - }); - this.fileName = clipanion__WEBPACK_IMPORTED_MODULE_3__.Option.String(); - } - async execute() { - const installFolder = _folderUtils__WEBPACK_IMPORTED_MODULE_1__.getInstallFolder(); - const fileName = path__WEBPACK_IMPORTED_MODULE_0___default().resolve(this.context.cwd, this.fileName); - const archiveEntries = new Map(); - let hasShortEntries = false; - const { default: tar } = await Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! tar */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/index.js", 19)); - await tar.t({ file: fileName, onentry: entry => { - const segments = entry.header.path.split(/\//g); - if (segments.length < 3) { - hasShortEntries = true; - } - else { - let references = archiveEntries.get(segments[0]); - if (typeof references === `undefined`) - archiveEntries.set(segments[0], references = new Set()); - references.add(segments[1]); - } - } }); - if (hasShortEntries || archiveEntries.size < 1) - throw new clipanion__WEBPACK_IMPORTED_MODULE_3__.UsageError(`Invalid archive format; did it get generated by 'corepack prepare'?`); - for (const [name, references] of archiveEntries) { - for (const reference of references) { - if (!(0,_types__WEBPACK_IMPORTED_MODULE_2__.isSupportedPackageManager)(name)) - throw new clipanion__WEBPACK_IMPORTED_MODULE_3__.UsageError(`Unsupported package manager '${name}'`); - if (this.activate) - this.context.stdout.write(`Hydrating ${name}@${reference} for immediate activation...\n`); - else - this.context.stdout.write(`Hydrating ${name}@${reference}...\n`); - await tar.x({ file: fileName, cwd: installFolder }, [`${name}/${reference}`]); - if (this.activate) { - await this.context.engine.activatePackageManager({ name, reference }); - } - } - } - this.context.stdout.write(`All done!\n`); - } -} -HydrateCommand.paths = [ - [`hydrate`], -]; -HydrateCommand.usage = clipanion__WEBPACK_IMPORTED_MODULE_3__.Command.Usage({ - description: `Import a package manager into the cache`, - details: ` - This command unpacks a package manager archive into the cache. The archive must have been generated by the \`corepack prepare\` command - no other will work. - `, - examples: [[ - `Import a package manager in the cache`, - `$0 hydrate corepack.tgz`, - ]], -}); - +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ -/***/ }), +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} -/***/ "./sources/commands/Prepare.ts": -/*!*************************************!*\ - !*** ./sources/commands/Prepare.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PrepareCommand": () => (/* binding */ PrepareCommand) -/* harmony export */ }); -/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/index.js"); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! path */ "path"); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _folderUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../folderUtils */ "./sources/folderUtils.ts"); -/* harmony import */ var _specUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../specUtils */ "./sources/specUtils.ts"); +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} +/** + * Pluralization helper. + */ -class PrepareCommand extends clipanion__WEBPACK_IMPORTED_MODULE_3__.Command { - constructor() { - super(...arguments); - this.activate = clipanion__WEBPACK_IMPORTED_MODULE_3__.Option.Boolean(`--activate`, false, { - description: `If true, this release will become the default one for this package manager`, - }); - this.all = clipanion__WEBPACK_IMPORTED_MODULE_3__.Option.Boolean(`--all`, false, { - description: `If true, all available default package managers will be installed`, - }); - this.json = clipanion__WEBPACK_IMPORTED_MODULE_3__.Option.Boolean(`--json`, false, { - description: `If true, the output will be the path of the generated tarball`, - }); - this.output = clipanion__WEBPACK_IMPORTED_MODULE_3__.Option.String(`-o,--output`, { - description: `If true, the installed package managers will also be stored in a tarball`, - tolerateBoolean: true, - }); - this.specs = clipanion__WEBPACK_IMPORTED_MODULE_3__.Option.Rest(); - } - async execute() { - if (this.all && this.specs.length > 0) - throw new clipanion__WEBPACK_IMPORTED_MODULE_3__.UsageError(`The --all option cannot be used along with an explicit package manager specification`); - const specs = this.all - ? await this.context.engine.getDefaultDescriptors() - : this.specs; - const installLocations = []; - for (const request of specs) { - let spec; - if (typeof request === `undefined`) { - const lookup = await _specUtils__WEBPACK_IMPORTED_MODULE_2__.loadSpec(this.context.cwd); - switch (lookup.type) { - case `NoProject`: - throw new clipanion__WEBPACK_IMPORTED_MODULE_3__.UsageError(`Couldn't find a project in the local directory - please explicit the package manager to pack, or run this command from a valid project`); - case `NoSpec`: - throw new clipanion__WEBPACK_IMPORTED_MODULE_3__.UsageError(`The local project doesn't feature a 'packageManager' field - please explicit the package manager to pack, or update the manifest to reference it`); - default: { - spec = lookup.spec; - } - } - } - else { - spec = typeof request === `string` - ? _specUtils__WEBPACK_IMPORTED_MODULE_2__.parseSpec(request, `CLI arguments`) - : request; - } - const resolved = await this.context.engine.resolveDescriptor(spec); - if (resolved === null) - throw new clipanion__WEBPACK_IMPORTED_MODULE_3__.UsageError(`Failed to successfully resolve '${spec.range}' to a valid ${spec.name} release`); - if (!this.json) { - if (this.activate) { - this.context.stdout.write(`Preparing ${spec.name}@${spec.range} for immediate activation...\n`); - } - else { - this.context.stdout.write(`Preparing ${spec.name}@${spec.range}...\n`); - } - } - const installSpec = await this.context.engine.ensurePackageManager(resolved); - installLocations.push(installSpec.location); - if (this.activate) { - await this.context.engine.activatePackageManager(resolved); - } - } - if (this.output) { - const outputName = typeof this.output === `string` - ? this.output - : `corepack.tgz`; - const baseInstallFolder = _folderUtils__WEBPACK_IMPORTED_MODULE_1__.getInstallFolder(); - const outputPath = path__WEBPACK_IMPORTED_MODULE_0___default().resolve(this.context.cwd, outputName); - if (!this.json) - this.context.stdout.write(`Packing the selected tools in ${path__WEBPACK_IMPORTED_MODULE_0___default().basename(outputPath)}...\n`); - const { default: tar } = await Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! tar */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/index.js", 19)); - await tar.c({ gzip: true, cwd: baseInstallFolder, file: path__WEBPACK_IMPORTED_MODULE_0___default().resolve(outputPath) }, installLocations.map(location => { - return path__WEBPACK_IMPORTED_MODULE_0___default().relative(baseInstallFolder, location); - })); - if (this.json) { - this.context.stdout.write(`${JSON.stringify(outputPath)}\n`); - } - else { - this.context.stdout.write(`All done!\n`); - } - } - } +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); } -PrepareCommand.paths = [ - [`prepare`], -]; -PrepareCommand.usage = clipanion__WEBPACK_IMPORTED_MODULE_3__.Command.Usage({ - description: `Generate a package manager archive`, - details: ` - This command makes sure that the specified package managers are installed in the local cache. Calling this command explicitly unless you operate in an environment without network access (in which case you'd have to call \`prepare\` while building your image, to make sure all tools are available for later use). - - When the \`-o,--output\` flag is set, Corepack will also compress the resulting package manager into a format suitable for \`corepack hydrate\`, and will store it at the specified location on the disk. - `, - examples: [[ - `Prepare the package manager from the active project`, - `$0 prepare`, - ], [ - `Prepare a specific Yarn version`, - `$0 prepare yarn@2.2.2`, - ], [ - `Generate an archive for a specific Yarn version`, - `$0 prepare yarn@2.2.2 -o`, - ], [ - `Generate a named archive`, - `$0 prepare yarn@2.2.2 --output=yarn.tgz`, - ]], -}); /***/ }), -/***/ "./sources/corepackUtils.ts": -/*!**********************************!*\ - !*** ./sources/corepackUtils.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "fetchAvailableTags": () => (/* binding */ fetchAvailableTags), -/* harmony export */ "fetchAvailableVersions": () => (/* binding */ fetchAvailableVersions), -/* harmony export */ "findInstalledVersion": () => (/* binding */ findInstalledVersion), -/* harmony export */ "installVersion": () => (/* binding */ installVersion), -/* harmony export */ "runVersion": () => (/* binding */ runVersion) -/* harmony export */ }); -/* harmony import */ var child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! child_process */ "child_process"); -/* harmony import */ var child_process__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(child_process__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ "fs"); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! path */ "path"); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/index.js"); -/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(semver__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _debugUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./debugUtils */ "./sources/debugUtils.ts"); -/* harmony import */ var _folderUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./folderUtils */ "./sources/folderUtils.ts"); -/* harmony import */ var _fsUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./fsUtils */ "./sources/fsUtils.ts"); -/* harmony import */ var _httpUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./httpUtils */ "./sources/httpUtils.ts"); - - - +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/comparator.js": +/*!**************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/comparator.js ***! + \**************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +const ANY = Symbol('SemVer ANY') +// hoisted class for cyclic dependency +class Comparator { + static get ANY () { + return ANY + } + constructor (comp, options) { + options = parseOptions(options) + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) -async function fetchAvailableTags(spec) { - switch (spec.type) { - case `npm`: { - const data = await _httpUtils__WEBPACK_IMPORTED_MODULE_7__.fetchAsJson(`https://registry.npmjs.org/${spec.package}`, { headers: { [`Accept`]: `application/vnd.npm.install-v1+json` } }); - return data[`dist-tags`]; - } - case `url`: { - const data = await _httpUtils__WEBPACK_IMPORTED_MODULE_7__.fetchAsJson(spec.url); - return data[spec.fields.tags]; - } - default: { - throw new Error(`Unsupported specification ${JSON.stringify(spec)}`); - } - } -} -async function fetchAvailableVersions(spec) { - switch (spec.type) { - case `npm`: { - const data = await _httpUtils__WEBPACK_IMPORTED_MODULE_7__.fetchAsJson(`https://registry.npmjs.org/${spec.package}`, { headers: { [`Accept`]: `application/vnd.npm.install-v1+json` } }); - return Object.keys(data.versions); - } - case `url`: { - const data = await _httpUtils__WEBPACK_IMPORTED_MODULE_7__.fetchAsJson(spec.url); - const field = data[spec.fields.versions]; - return Array.isArray(field) ? field : Object.keys(field); - } - default: { - throw new Error(`Unsupported specification ${JSON.stringify(spec)}`); - } - } -} -async function findInstalledVersion(installTarget, descriptor) { - const installFolder = path__WEBPACK_IMPORTED_MODULE_2___default().join(installTarget, descriptor.name); - let folderContent; - try { - folderContent = await fs__WEBPACK_IMPORTED_MODULE_1___default().promises.readdir(installFolder); - } - catch (error) { - if (error.code === `ENOENT`) { - folderContent = []; - } - else { - throw error; - } - } - const candidateVersions = []; - for (const entry of folderContent) { - // Some dot-folders tend to pop inside directories, especially on OSX - if (entry.startsWith(`.`)) - continue; - candidateVersions.push(entry); - } - const bestMatch = semver__WEBPACK_IMPORTED_MODULE_3___default().maxSatisfying(candidateVersions, descriptor.range); - if (bestMatch === null) - return null; - return bestMatch; -} -async function installVersion(installTarget, locator, { spec }) { - const { default: tar } = await Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! tar */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/index.js", 19)); - const installFolder = path__WEBPACK_IMPORTED_MODULE_2___default().join(installTarget, locator.name, locator.reference); - if (fs__WEBPACK_IMPORTED_MODULE_1___default().existsSync(installFolder)) { - _debugUtils__WEBPACK_IMPORTED_MODULE_4__.log(`Reusing ${locator.name}@${locator.reference}`); - return installFolder; - } - const url = spec.url.replace(`{}`, locator.reference); - _debugUtils__WEBPACK_IMPORTED_MODULE_4__.log(`Installing ${locator.name}@${locator.reference} from ${url}`); - return await _fsUtils__WEBPACK_IMPORTED_MODULE_6__.mutex(installFolder, async () => { - // Creating a temporary folder inside the install folder means that we - // are sure it'll be in the same drive as the destination, so we can - // just move it there atomically once we are done - const tmpFolder = _folderUtils__WEBPACK_IMPORTED_MODULE_5__.getTemporaryFolder(installTarget); - const stream = await _httpUtils__WEBPACK_IMPORTED_MODULE_7__.fetchUrlStream(url); - const parsedUrl = new URL(url); - const ext = path__WEBPACK_IMPORTED_MODULE_2___default().posix.extname(parsedUrl.pathname); - let outputFile = null; - let sendTo; - if (ext === `.tgz`) { - sendTo = tar.x({ strip: 1, cwd: tmpFolder }); - } - else if (ext === `.js`) { - outputFile = path__WEBPACK_IMPORTED_MODULE_2___default().join(tmpFolder, path__WEBPACK_IMPORTED_MODULE_2___default().posix.basename(parsedUrl.pathname)); - sendTo = fs__WEBPACK_IMPORTED_MODULE_1___default().createWriteStream(outputFile); - } - stream.pipe(sendTo); - await new Promise(resolve => { - sendTo.on(`finish`, resolve); - }); - await fs__WEBPACK_IMPORTED_MODULE_1___default().promises.mkdir(path__WEBPACK_IMPORTED_MODULE_2___default().dirname(installFolder), { recursive: true }); - await fs__WEBPACK_IMPORTED_MODULE_1___default().promises.rename(tmpFolder, installFolder); - _debugUtils__WEBPACK_IMPORTED_MODULE_4__.log(`Install finished`); - return installFolder; - }); -} -async function runVersion(installSpec, locator, binName, args, context) { - let binPath = null; - if (Array.isArray(installSpec.spec.bin)) { - if (installSpec.spec.bin.some(bin => bin === binName)) { - const parsedUrl = new URL(installSpec.spec.url); - const ext = path__WEBPACK_IMPORTED_MODULE_2___default().posix.extname(parsedUrl.pathname); - if (ext === `.js`) { - binPath = path__WEBPACK_IMPORTED_MODULE_2___default().join(installSpec.location, path__WEBPACK_IMPORTED_MODULE_2___default().posix.basename(parsedUrl.pathname)); - } - } - } - else { - for (const [name, dest] of Object.entries(installSpec.spec.bin)) { - if (name === binName) { - binPath = path__WEBPACK_IMPORTED_MODULE_2___default().join(installSpec.location, dest); - break; - } - } - } - if (!binPath) - throw new Error(`Assertion failed: Unable to locate path for bin '${binName}'`); - return new Promise((resolve, reject) => { - process.on(`SIGINT`, () => { - // We don't want to exit the process before the child, so we just - // ignore SIGINT and wait for the regular exit to happen (the child - // will receive SIGINT too since it's part of the same process grp) - }); - const stdio = [`pipe`, `pipe`, `pipe`]; - if (context.stdin === process.stdin) - stdio[0] = `inherit`; - if (context.stdout === process.stdout) - stdio[1] = `inherit`; - if (context.stderr === process.stderr) - stdio[2] = `inherit`; - const v8CompileCache = typeof require !== `undefined` - ? eval(`require`).resolve(`./vcc.js`) - : eval(`require`).resolve(`corepack/dist/vcc.js`); - const child = (0,child_process__WEBPACK_IMPORTED_MODULE_0__.spawn)(process.execPath, [`--require`, v8CompileCache, binPath, ...args], { - cwd: context.cwd, - stdio, - env: Object.assign(Object.assign({}, process.env), { COREPACK_ROOT: path__WEBPACK_IMPORTED_MODULE_2___default().dirname(eval(`__dirname`)) }), - }); - activeChildren.add(child); - if (activeChildren.size === 1) { - process.on(`SIGINT`, sigintHandler); - process.on(`SIGTERM`, sigtermHandler); - } - if (context.stdin !== process.stdin) - context.stdin.pipe(child.stdin); - if (context.stdout !== process.stdout) - child.stdout.pipe(context.stdout); - if (context.stderr !== process.stderr) - child.stderr.pipe(context.stderr); - child.on(`error`, error => { - activeChildren.delete(child); - if (activeChildren.size === 0) { - process.off(`SIGINT`, sigintHandler); - process.off(`SIGTERM`, sigtermHandler); - } - reject(error); - }); - child.on(`exit`, exitCode => { - activeChildren.delete(child); - if (activeChildren.size === 0) { - process.off(`SIGINT`, sigintHandler); - process.off(`SIGTERM`, sigtermHandler); - } - resolve(exitCode !== null ? exitCode : 1); - }); - }); -} -const activeChildren = new Set(); -function sigintHandler() { - // We don't want SIGINT to kill our process; we want it to kill the - // innermost process, whose end will cause our own to exit. -} -function sigtermHandler() { - for (const child of activeChildren) { - child.kill(); + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version } -} - -/***/ }), + debug('comp', this) + } -/***/ "./sources/debugUtils.ts": -/*!*******************************!*\ - !*** ./sources/debugUtils.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + parse (comp) { + const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const m = comp.match(r) -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "log": () => (/* binding */ log) -/* harmony export */ }); -/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! debug */ "./.yarn/__virtual__/debug-virtual-d208043b83/0/cache/debug-npm-4.1.1-540248b3aa-1e681f5cce.zip/node_modules/debug/src/index.js"); -/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_0__); + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`) + } -const log = debug__WEBPACK_IMPORTED_MODULE_0___default()(`corepack`); + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } + } -/***/ }), + toString () { + return this.value + } -/***/ "./sources/folderUtils.ts": -/*!********************************!*\ - !*** ./sources/folderUtils.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + test (version) { + debug('Comparator.test', version, this.options.loose) -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "getInstallFolder": () => (/* binding */ getInstallFolder), -/* harmony export */ "getTemporaryFolder": () => (/* binding */ getTemporaryFolder) -/* harmony export */ }); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ "fs"); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var os__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! os */ "os"); -/* harmony import */ var os__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(os__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! path */ "path"); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); + if (this.semver === ANY || version === ANY) { + return true + } + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + return cmp(version, this.operator, this.semver, this.options) + } -function getInstallFolder() { - var _a; - return (_a = process.env.COREPACK_HOME) !== null && _a !== void 0 ? _a : (0,path__WEBPACK_IMPORTED_MODULE_2__.join)((0,os__WEBPACK_IMPORTED_MODULE_1__.homedir)(), `.node/corepack`); -} -function getTemporaryFolder(target = (0,os__WEBPACK_IMPORTED_MODULE_1__.tmpdir)()) { - (0,fs__WEBPACK_IMPORTED_MODULE_0__.mkdirSync)(target, { recursive: true }); - while (true) { - const rnd = Math.random() * 0x100000000; - const hex = rnd.toString(16).padStart(8, `0`); - const path = (0,path__WEBPACK_IMPORTED_MODULE_2__.join)(target, `corepack-${process.pid}-${hex}`); - try { - (0,fs__WEBPACK_IMPORTED_MODULE_0__.mkdirSync)(path); - return path; - } - catch (error) { - if (error.code === `EEXIST`) { - continue; - } - else { - throw error; - } - } + intersects (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') } -} + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false, + } + } -/***/ }), + if (this.operator === '') { + if (this.value === '') { + return true + } + return new Range(comp.value, options).test(this.value) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + return new Range(this.value, options).test(comp.semver) + } -/***/ "./sources/fsUtils.ts": -/*!****************************!*\ - !*** ./sources/fsUtils.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + const sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + const sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + const sameSemVer = this.semver.version === comp.semver.version + const differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + const oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<') + const oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>') -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "mutex": () => (/* binding */ mutex) -/* harmony export */ }); -async function mutex(p, cb) { - return await cb(); + return ( + sameDirectionIncreasing || + sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || + oppositeDirectionsGreaterThan + ) + } } +module.exports = Comparator + +const parseOptions = __webpack_require__(/*! ../internal/parse-options */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/parse-options.js") +const { re, t } = __webpack_require__(/*! ../internal/re */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/re.js") +const cmp = __webpack_require__(/*! ../functions/cmp */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/cmp.js") +const debug = __webpack_require__(/*! ../internal/debug */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/debug.js") +const SemVer = __webpack_require__(/*! ./semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const Range = __webpack_require__(/*! ./range */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js") + /***/ }), -/***/ "./sources/httpUtils.ts": -/*!******************************!*\ - !*** ./sources/httpUtils.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js ***! + \*********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "fetchUrlStream": () => (/* binding */ fetchUrlStream), -/* harmony export */ "fetchAsBuffer": () => (/* binding */ fetchAsBuffer), -/* harmony export */ "fetchAsJson": () => (/* binding */ fetchAsJson) -/* harmony export */ }); -/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/index.js"); +// hoisted class for cyclic dependency +class Range { + constructor (range, options) { + options = parseOptions(options) -async function fetchUrlStream(url, options = {}) { - if (process.env.COREPACK_ENABLE_NETWORK === `0`) - throw new clipanion__WEBPACK_IMPORTED_MODULE_0__.UsageError(`Network access disabled by the environment; can't reach ${url}`); - const { default: https } = await Promise.resolve(/*! import() */).then(__webpack_require__.t.bind(__webpack_require__, /*! https */ "https", 23)); - return new Promise((resolve, reject) => { - const request = https.get(url, options, response => { - var _a; - const statusCode = (_a = response.statusCode) !== null && _a !== void 0 ? _a : 500; - if (!(statusCode >= 200 && statusCode < 300)) - return reject(new Error(`Server answered with HTTP ${statusCode}`)); - return resolve(response); - }); - request.on(`error`, err => { - reject(new Error(`Error when performing the request`)); - }); - }); -} -async function fetchAsBuffer(url, options) { - const response = await fetchUrlStream(url, options); - return new Promise((resolve, reject) => { - const chunks = []; - response.on(`data`, chunk => { - chunks.push(chunk); - }); - response.on(`error`, error => { - reject(error); - }); - response.on(`end`, () => { - resolve(Buffer.concat(chunks)); - }); - }); -} -async function fetchAsJson(url, options) { - const buffer = await fetchAsBuffer(url, options); - const asText = buffer.toString(); - try { - return JSON.parse(asText); + if (range instanceof Range) { + if ( + range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease + ) { + return range + } else { + return new Range(range.raw, options) + } } - catch (error) { - const truncated = asText.length > 30 - ? `${asText.slice(0, 30)}...` - : asText; - throw new Error(`Couldn't parse JSON data: ${JSON.stringify(truncated)}`); + + if (range instanceof Comparator) { + // just put it in the set and return + this.raw = range.value + this.set = [[range]] + this.format() + return this } -} + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease -/***/ }), + // First, split based on boolean or || + this.raw = range + this.set = range + .split('||') + // map the range to a 2d array of comparators + .map(r => this.parseRange(r.trim())) + // throw out any comparator lists that are empty + // this generally means that it was not a valid range, which is allowed + // in loose mode, but will still throw if the WHOLE range is invalid. + .filter(c => c.length) -/***/ "./sources/miscUtils.ts": -/*!******************************!*\ - !*** ./sources/miscUtils.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${range}`) + } -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Cancellation": () => (/* binding */ Cancellation) -/* harmony export */ }); -class Cancellation extends Error { - constructor() { - super(`Cancelled operation`); + // if we have any that are not the null set, throw out null sets. + if (this.set.length > 1) { + // keep the first one, in case they're all null sets + const first = this.set[0] + this.set = this.set.filter(c => !isNullSet(c[0])) + if (this.set.length === 0) { + this.set = [first] + } else if (this.set.length > 1) { + // if we have any that are *, then the range is just * + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c] + break + } + } + } } -} + this.format() + } -/***/ }), + format () { + this.range = this.set + .map((comps) => { + return comps.join(' ').trim() + }) + .join('||') + .trim() + return this.range + } -/***/ "./sources/semverUtils.ts": -/*!********************************!*\ - !*** ./sources/semverUtils.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + toString () { + return this.range + } -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "satisfiesWithPrereleases": () => (/* binding */ satisfiesWithPrereleases) -/* harmony export */ }); -/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/index.js"); -/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(semver__WEBPACK_IMPORTED_MODULE_0__); + parseRange (range) { + range = range.trim() -/** - * Returns whether the given semver version satisfies the given range. Notably - * this supports prerelease versions so that "2.0.0-rc.0" satisfies the range - * ">=1.0.0", for example. - * - * This function exists because the semver.satisfies method does not include - * pre releases. This means ranges such as * would not satisfy 1.0.0-rc. The - * includePrerelease flag has a weird behavior and cannot be used (if you want - * to try it out, just run the `semverUtils` testsuite using this flag instead - * of our own implementation, and you'll see the failing cases). - * - * See https://github.com/yarnpkg/berry/issues/575 for more context. - */ -function satisfiesWithPrereleases(version, range, loose = false) { - let semverRange; - try { - semverRange = new (semver__WEBPACK_IMPORTED_MODULE_0___default().Range)(range, loose); + // memoize range parsing for performance. + // this is a very hot path, and fully deterministic. + const memoOpts = Object.keys(this.options).join(',') + const memoKey = `parseRange:${memoOpts}:${range}` + const cached = cache.get(memoKey) + if (cached) { + return cached } - catch (err) { - return false; + + const loose = this.options.loose + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + let rangeList = range + .split(' ') + .map(comp => parseComparator(comp, this.options)) + .join(' ') + .split(/\s+/) + // >=0.0.0 is equivalent to * + .map(comp => replaceGTE0(comp, this.options)) + + if (loose) { + // in loose mode, throw out any that are not valid comparators + rangeList = rangeList.filter(comp => { + debug('loose invalid filter', comp, this.options) + return !!comp.match(re[t.COMPARATORLOOSE]) + }) } - if (!version) - return false; - let semverVersion; - try { - semverVersion = new (semver__WEBPACK_IMPORTED_MODULE_0___default().SemVer)(version, semverRange.loose); - if (semverVersion.prerelease) { - semverVersion.prerelease = []; - } + debug('range list', rangeList) + + // if any comparators are the null set, then replace with JUST null set + // if more than one comparator, remove any * comparators + // also, don't include the same comparator more than once + const rangeMap = new Map() + const comparators = rangeList.map(comp => new Comparator(comp, this.options)) + for (const comp of comparators) { + if (isNullSet(comp)) { + return [comp] + } + rangeMap.set(comp.value, comp) } - catch (err) { - return false; + if (rangeMap.size > 1 && rangeMap.has('')) { + rangeMap.delete('') } - // A range has multiple sets of comparators. A version must satisfy all - // comparators in a set and at least one set to satisfy the range. - return semverRange.set.some(comparatorSet => { - for (const comparator of comparatorSet) - if (comparator.semver.prerelease) - comparator.semver.prerelease = []; - return comparatorSet.every(comparator => { - return comparator.test(semverVersion); - }); - }); -} + const result = [...rangeMap.values()] + cache.set(memoKey, result) + return result + } -/***/ }), + intersects (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } -/***/ "./sources/specUtils.ts": -/*!******************************!*\ - !*** ./sources/specUtils.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + return this.set.some((thisComparators) => { + return ( + isSatisfiable(thisComparators, options) && + range.set.some((rangeComparators) => { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every((thisComparator) => { + return rangeComparators.every((rangeComparator) => { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) + } -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "parseSpec": () => (/* binding */ parseSpec), -/* harmony export */ "findProjectSpec": () => (/* binding */ findProjectSpec), -/* harmony export */ "loadSpec": () => (/* binding */ loadSpec) -/* harmony export */ }); -/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/index.js"); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ "fs"); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ "path"); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/index.js"); -/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(semver__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./types */ "./sources/types.ts"); + // if ANY of the sets match ALL of its comparators, then pass + test (version) { + if (!version) { + return false + } + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false + } +} +module.exports = Range +const LRU = __webpack_require__(/*! lru-cache */ "../../../.yarn/berry/cache/lru-cache-npm-6.0.0-b4c8668fe1-9.zip/node_modules/lru-cache/index.js") +const cache = new LRU({ max: 1000 }) +const parseOptions = __webpack_require__(/*! ../internal/parse-options */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/parse-options.js") +const Comparator = __webpack_require__(/*! ./comparator */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/comparator.js") +const debug = __webpack_require__(/*! ../internal/debug */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/debug.js") +const SemVer = __webpack_require__(/*! ./semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const { + re, + t, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace, +} = __webpack_require__(/*! ../internal/re */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/re.js") -const nodeModulesRegExp = /[\\/]node_modules[\\/](@[^\\/]*[\\/])?([^@\\/][^\\/]*)$/; -function parseSpec(raw, source) { - if (typeof raw !== `string`) - throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Invalid package manager specification in ${source}; expected a string`); - const match = raw.match(/^(?!_)(.+)@(.+)$/); - if (match === null || !semver__WEBPACK_IMPORTED_MODULE_2___default().valid(match[2])) - throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Invalid package manager specification in ${source}; expected a semver version`); - if (!(0,_types__WEBPACK_IMPORTED_MODULE_3__.isSupportedPackageManager)(match[1])) - throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Unsupported package manager specification (${match})`); - return { - name: match[1], - range: match[2], - }; +const isNullSet = c => c.value === '<0.0.0-0' +const isAny = c => c.value === '' + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +const isSatisfiable = (comparators, options) => { + let result = true + const remainingComparators = comparators.slice() + let testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every((otherComparator) => { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result } -/** - * Locates the active project's package manager specification. - * - * If the specification exists but doesn't match the active package manager, - * an error is thrown to prevent users from using the wrong package manager, - * which would lead to inconsistent project layouts. - * - * If the project doesn't include a specification file, we just assume that - * whatever the user uses is exactly what they want to use. Since the version - * isn't explicited, we fallback on known good versions. - * - * Finally, if the project doesn't exist at all, we ask the user whether they - * want to create one in the current project. If they do, we initialize a new - * project using the default package managers, and configure it so that we - * don't need to ask again in the future. - */ -async function findProjectSpec(initialCwd, locator, { transparent = false } = {}) { - // A locator is a valid descriptor (but not the other way around) - const fallbackLocator = { name: locator.name, range: locator.reference }; - while (true) { - const result = await loadSpec(initialCwd); - switch (result.type) { - case `NoProject`: - case `NoSpec`: - { - return fallbackLocator; - } - break; - case `Found`: - { - if (result.spec.name !== locator.name) { - if (transparent) { - return fallbackLocator; - } - else { - throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`This project is configured to use ${result.spec.name}`); - } - } - else { - return result.spec; - } - } - break; - } - } + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +const parseComparator = (comp, options) => { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp } -async function loadSpec(initialCwd) { - let nextCwd = initialCwd; - let currCwd = ``; - let selection = null; - while (nextCwd !== currCwd && (!selection || !selection.data.packageManager)) { - currCwd = nextCwd; - nextCwd = path__WEBPACK_IMPORTED_MODULE_1___default().dirname(currCwd); - if (nodeModulesRegExp.test(currCwd)) - continue; - const manifestPath = path__WEBPACK_IMPORTED_MODULE_1___default().join(currCwd, `package.json`); - if (!fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(manifestPath)) - continue; - const content = await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.readFile(manifestPath, `utf8`); - let data; - try { - data = JSON.parse(content); - } - catch (_a) { } - if (typeof data !== `object` || data === null) - throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Invalid package.json in ${path__WEBPACK_IMPORTED_MODULE_1___default().relative(initialCwd, manifestPath)}`); - selection = { data, manifestPath }; + +const isX = id => !id || id.toLowerCase() === 'x' || id === '*' + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 +const replaceTildes = (comp, options) => + comp.trim().split(/\s+/).map((c) => { + return replaceTilde(c, options) + }).join(' ') + +const replaceTilde = (comp, options) => { + const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, (_, M, m, p, pr) => { + debug('tilde', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0 <${+M + 1}.0.0-0` + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0-0 + ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` + } else if (pr) { + debug('replaceTilde pr', pr) + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } else { + // ~1.2.3 == >=1.2.3 <1.3.0-0 + ret = `>=${M}.${m}.${p + } <${M}.${+m + 1}.0-0` } - if (selection === null) - return { type: `NoProject`, target: path__WEBPACK_IMPORTED_MODULE_1___default().join(initialCwd, `package.json`) }; - const rawPmSpec = selection.data.packageManager; - if (typeof rawPmSpec === `undefined`) - return { type: `NoSpec`, target: selection.manifestPath }; - return { - type: `Found`, - spec: parseSpec(rawPmSpec, path__WEBPACK_IMPORTED_MODULE_1___default().relative(initialCwd, selection.manifestPath)), - }; + + debug('tilde return', ret) + return ret + }) } +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 +// ^1.2.3 --> >=1.2.3 <2.0.0-0 +// ^1.2.0 --> >=1.2.0 <2.0.0-0 +const replaceCarets = (comp, options) => + comp.trim().split(/\s+/).map((c) => { + return replaceCaret(c, options) + }).join(' ') -/***/ }), +const replaceCaret = (comp, options) => { + debug('caret', comp, options) + const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + const z = options.includePrerelease ? '-0' : '' + return comp.replace(r, (_, M, m, p, pr) => { + debug('caret', comp, _, M, m, p, pr) + let ret -/***/ "./sources/types.ts": -/*!**************************!*\ - !*** ./sources/types.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` + } else if (isX(p)) { + if (M === '0') { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` + } else { + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${+M + 1}.0.0-0` + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p + }${z} <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p + }${z} <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p + } <${+M + 1}.0.0-0` + } + } -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SupportedPackageManagers": () => (/* binding */ SupportedPackageManagers), -/* harmony export */ "SupportedPackageManagerSet": () => (/* binding */ SupportedPackageManagerSet), -/* harmony export */ "SupportedPackageManagerSetWithoutNpm": () => (/* binding */ SupportedPackageManagerSetWithoutNpm), -/* harmony export */ "isSupportedPackageManager": () => (/* binding */ isSupportedPackageManager) -/* harmony export */ }); -var SupportedPackageManagers; -(function (SupportedPackageManagers) { - SupportedPackageManagers["Npm"] = "npm"; - SupportedPackageManagers["Pnpm"] = "pnpm"; - SupportedPackageManagers["Yarn"] = "yarn"; -})(SupportedPackageManagers || (SupportedPackageManagers = {})); -const SupportedPackageManagerSet = new Set(Object.values(SupportedPackageManagers)); -const SupportedPackageManagerSetWithoutNpm = new Set(Object.values(SupportedPackageManagers)); -// npm is distributed with Node as a builtin; we don't want Corepack to override it unless the npm team is on board -SupportedPackageManagerSetWithoutNpm.delete(SupportedPackageManagers.Npm); -function isSupportedPackageManager(value) { - return SupportedPackageManagerSet.has(value); + debug('caret return', ret) + return ret + }) } +const replaceXRanges = (comp, options) => { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map((c) => { + return replaceXRange(c, options) + }).join(' ') +} -/***/ }), +const replaceXRange = (comp, options) => { + comp = comp.trim() + const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + const xM = isX(M) + const xm = xM || isX(m) + const xp = xm || isX(p) + const anyX = xp -/***/ "./.yarn/cache/@zkochan-cmd-shim-npm-5.0.0-9e90407ba0-ace99c7c36.zip/node_modules/@zkochan/cmd-shim/index.js": -/*!*******************************************************************************************************************!*\ - !*** ./.yarn/cache/@zkochan-cmd-shim-npm-5.0.0-9e90407ba0-ace99c7c36.zip/node_modules/@zkochan/cmd-shim/index.js ***! - \*******************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + if (gtlt === '=' && anyX) { + gtlt = '' + } -"use strict"; + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' -cmdShim.ifExists = cmdShimIfExists; -const util_1 = __webpack_require__(/*! util */ "util"); -const path = __webpack_require__(/*! path */ "path"); -const isWindows = __webpack_require__(/*! is-windows */ "./.yarn/cache/is-windows-npm-1.0.2-898cd6f3d7-438b7e5265.zip/node_modules/is-windows/index.js"); -const shebangExpr = /^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/; -const DEFAULT_OPTIONS = { - // Create PowerShell file by default if the option hasn't been specified - createPwshFile: true, - createCmdFile: isWindows(), - fs: __webpack_require__(/*! fs */ "fs") -}; -/** - * Map from extensions of files that this module is frequently used for to their runtime. - * @type {Map} - */ -const extensionToProgramMap = new Map([ - ['.js', 'node'], - ['.cmd', 'cmd'], - ['.bat', 'cmd'], - ['.ps1', 'pwsh'], - ['.sh', 'sh'] -]); -function ingestOptions(opts) { - const opts_ = { ...DEFAULT_OPTIONS, ...opts }; - const fs = opts_.fs; - opts_.fs_ = { - chmod: fs.chmod ? util_1.promisify(fs.chmod) : (async () => { }), - mkdir: util_1.promisify(fs.mkdir), - readFile: util_1.promisify(fs.readFile), - stat: util_1.promisify(fs.stat), - unlink: util_1.promisify(fs.unlink), - writeFile: util_1.promisify(fs.writeFile) - }; - return opts_; -} -/** - * Try to create shims. - * - * @param src Path to program (executable or script). - * @param to Path to shims. - * Don't add an extension if you will create multiple types of shims. - * @param opts Options. - * @throws If `src` is missing. - */ -async function cmdShim(src, to, opts) { - const opts_ = ingestOptions(opts); - await opts_.fs_.stat(src); - await cmdShim_(src, to, opts_); -} -/** - * Try to create shims. - * - * Does nothing if `src` doesn't exist. - * - * @param src Path to program (executable or script). - * @param to Path to shims. - * Don't add an extension if you will create multiple types of shims. - * @param opts Options. - */ -function cmdShimIfExists(src, to, opts) { - return cmdShim(src, to, opts).catch(() => { }); + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + if (gtlt === '<') { + pr = '-0' + } + + ret = `${gtlt + M}.${m}.${p}${pr}` + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` + } else if (xp) { + ret = `>=${M}.${m}.0${pr + } <${M}.${+m + 1}.0-0` + } + + debug('xRange return', ret) + + return ret + }) } -/** - * Try to unlink, but ignore errors. - * Any problems will surface later. - * - * @param path File to be removed. - */ -function rm(path, opts) { - return opts.fs_.unlink(path).catch(() => { }); + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +const replaceStars = (comp, options) => { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[t.STAR], '') } -/** - * Try to create shims **even if `src` is missing**. - * - * @param src Path to program (executable or script). - * @param to Path to shims. - * Don't add an extension if you will create multiple types of shims. - * @param opts Options. - */ -async function cmdShim_(src, to, opts) { - const srcRuntimeInfo = await searchScriptRuntime(src, opts); - // Always tries to create all types of shims by calling `writeAllShims` as of now. - // Append your code here to change the behavior in response to `srcRuntimeInfo`. - // Create 3 shims for (Ba)sh in Cygwin / MSYS, no extension) & CMD (.cmd) & PowerShell (.ps1) - await writeShimsPreCommon(to, opts); - return writeAllShims(src, to, srcRuntimeInfo, opts); + +const replaceGTE0 = (comp, options) => { + debug('replaceGTE0', comp, options) + return comp.trim() + .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') } -/** - * Do processes before **all** shims are created. - * This must be called **only once** for one call of `cmdShim(IfExists)`. - * - * @param target Path of shims that are going to be created. - */ -function writeShimsPreCommon(target, opts) { - return opts.fs_.mkdir(path.dirname(target), { recursive: true }); + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 +const hyphenReplace = incPr => ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) => { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? '-0' : ''}` + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` + } else if (fpr) { + from = `>=${from}` + } else { + from = `>=${from}${incPr ? '-0' : ''}` + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0` + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0` + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}` + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0` + } else { + to = `<=${to}` + } + + return (`${from} ${to}`).trim() } -/** - * Write all types (sh & cmd & pwsh) of shims to files. - * Extensions (`.cmd` and `.ps1`) are appended to cmd and pwsh shims. - * - * - * @param src Path to program (executable or script). - * @param to Path to shims **without extensions**. - * Extensions are added for CMD and PowerShell shims. - * @param srcRuntimeInfo Return value of `await searchScriptRuntime(src)`. - * @param opts Options. - */ -function writeAllShims(src, to, srcRuntimeInfo, opts) { - const opts_ = ingestOptions(opts); - const generatorAndExts = [{ generator: generateShShim, extension: '' }]; - if (opts_.createCmdFile) { - generatorAndExts.push({ generator: generateCmdShim, extension: '.cmd' }); + +const testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false } - if (opts_.createPwshFile) { - generatorAndExts.push({ generator: generatePwshShim, extension: '.ps1' }); + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (let i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === Comparator.ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } } - return Promise.all(generatorAndExts.map((generatorAndExt) => writeShim(src, to + generatorAndExt.extension, srcRuntimeInfo, generatorAndExt.generator, opts_))); -} -/** - * Do processes before writing shim. - * - * @param target Path to shim that is going to be created. - */ -function writeShimPre(target, opts) { - return rm(target, opts); -} -/** - * Do processes after writing the shim. - * - * @param target Path to just created shim. - */ -function writeShimPost(target, opts) { - // Only chmoding shims as of now. - // Some other processes may be appended. - return chmodShim(target, opts); + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true } -/** - * Look into runtime (e.g. `node` & `sh` & `pwsh`) and its arguments - * of the target program (script or executable). - * - * @param target Path to the executable or script. - * @return Promise of infomation of runtime of `target`. - */ -async function searchScriptRuntime(target, opts) { - const data = await opts.fs_.readFile(target, 'utf8'); - // First, check if the bin is a #! of some sort. - const firstLine = data.trim().split(/\r*\n/)[0]; - const shebang = firstLine.match(shebangExpr); - if (!shebang) { - // If not, infer script type from its extension. - // If the inference fails, it's something that'll be compiled, or some other - // sort of script, and just call it directly. - const targetExtension = path.extname(target).toLowerCase(); - return { - // undefined if extension is unknown but it's converted to null. - program: extensionToProgramMap.get(targetExtension) || null, - additionalArgs: '' - }; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js": +/*!**********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js ***! + \**********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const debug = __webpack_require__(/*! ../internal/debug */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/debug.js") +const { MAX_LENGTH, MAX_SAFE_INTEGER } = __webpack_require__(/*! ../internal/constants */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/constants.js") +const { re, t } = __webpack_require__(/*! ../internal/re */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/re.js") + +const parseOptions = __webpack_require__(/*! ../internal/parse-options */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/parse-options.js") +const { compareIdentifiers } = __webpack_require__(/*! ../internal/identifiers */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/identifiers.js") +class SemVer { + constructor (version, options) { + options = parseOptions(options) + + if (version instanceof SemVer) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid Version: ${version}`) } - return { - program: shebang[1], - additionalArgs: shebang[2] - }; -} -/** - * Write shim to the file system while executing the pre- and post-processes - * defined in `WriteShimPre` and `WriteShimPost`. - * - * @param src Path to the executable or script. - * @param to Path to the (sh) shim(s) that is going to be created. - * @param srcRuntimeInfo Result of `await searchScriptRuntime(src)`. - * @param generateShimScript Generator of shim script. - * @param opts Other options. - */ -async function writeShim(src, to, srcRuntimeInfo, generateShimScript, opts) { - const defaultArgs = opts.preserveSymlinks ? '--preserve-symlinks' : ''; - // `Array.prototype.filter` removes ''. - // ['--foo', '--bar'].join(' ') and [].join(' ') returns '--foo --bar' and '' respectively. - const args = [srcRuntimeInfo.additionalArgs, defaultArgs].filter(arg => arg).join(' '); - opts = Object.assign({}, opts, { - prog: srcRuntimeInfo.program, - args: args - }); - await writeShimPre(to, opts); - await opts.fs_.writeFile(to, generateShimScript(src, to, opts), 'utf8'); - return writeShimPost(to, opts); -} -/** - * Generate the content of a shim for CMD. - * - * @param src Path to the executable or script. - * @param to Path to the shim to be created. - * It is highly recommended to end with `.cmd` (or `.bat`). - * @param opts Options. - * @return The content of shim. - */ -function generateCmdShim(src, to, opts) { - // `shTarget` is not used to generate the content. - const shTarget = path.relative(path.dirname(to), src); - let target = shTarget.split('/').join('\\'); - const quotedPathToTarget = path.isAbsolute(target) ? `"${target}"` : `"%~dp0\\${target}"`; - let longProg; - let prog = opts.prog; - let args = opts.args || ''; - const nodePath = normalizePathEnvVar(opts.nodePath).win32; - if (!prog) { - prog = quotedPathToTarget; - args = ''; - target = ''; + + if (version.length > MAX_LENGTH) { + throw new TypeError( + `version is longer than ${MAX_LENGTH} characters` + ) } - else { - longProg = `"%~dp0\\${prog}.exe"`; - target = quotedPathToTarget; + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease + + const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) } - let progArgs = opts.progArgs ? `${opts.progArgs.join(` `)} ` : ''; - // @IF EXIST "%~dp0\node.exe" ( - // "%~dp0\node.exe" "%~dp0\.\node_modules\npm\bin\npm-cli.js" %* - // ) ELSE ( - // SETLOCAL - // SET PATHEXT=%PATHEXT:;.JS;=;% - // node "%~dp0\.\node_modules\npm\bin\npm-cli.js" %* - // ) - let cmd = nodePath ? `@SET NODE_PATH=${nodePath}\r\n` : ''; - if (longProg) { - cmd += `@IF EXIST ${longProg} (\r\n` + - ` ${longProg} ${args} ${target} ${progArgs}%*\r\n` + - ') ELSE (\r\n' + - ' @SETLOCAL\r\n' + - ' @SET PATHEXT=%PATHEXT:;.JS;=;%\r\n' + - ` ${prog} ${args} ${target} ${progArgs}%*\r\n` + - ')'; + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') } - else { - cmd += `@${prog} ${args} ${target} ${progArgs}%*\r\n`; + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') } - return cmd; -} -/** - * Generate the content of a shim for (Ba)sh in, for example, Cygwin and MSYS(2). - * - * @param src Path to the executable or script. - * @param to Path to the shim to be created. - * It is highly recommended to end with `.sh` or to contain no extension. - * @param opts Options. - * @return The content of shim. - */ -function generateShShim(src, to, opts) { - let shTarget = path.relative(path.dirname(to), src); - let shProg = opts.prog && opts.prog.split('\\').join('/'); - let shLongProg; - shTarget = shTarget.split('\\').join('/'); - const quotedPathToTarget = path.isAbsolute(shTarget) ? `"${shTarget}"` : `"$basedir/${shTarget}"`; - let args = opts.args || ''; - const shNodePath = normalizePathEnvVar(opts.nodePath).posix; - if (!shProg) { - shProg = quotedPathToTarget; - args = ''; - shTarget = ''; + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') } - else { - shLongProg = `"$basedir/${opts.prog}"`; - shTarget = quotedPathToTarget; + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) } - let progArgs = opts.progArgs ? `${opts.progArgs.join(` `)} ` : ''; - // #!/bin/sh - // basedir=`dirname "$0"` - // - // case `uname` in - // *CYGWIN*) basedir=`cygpath -w "$basedir"`;; - // esac - // - // export NODE_PATH="" - // - // if [ -x "$basedir/node.exe" ]; then - // exec "$basedir/node.exe" "$basedir/node_modules/npm/bin/npm-cli.js" "$@" - // else - // exec node "$basedir/node_modules/npm/bin/npm-cli.js" "$@" - // fi - let sh = '#!/bin/sh\n'; - sh = sh + - "basedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n" + - '\n' + - 'case `uname` in\n' + - ' *CYGWIN*) basedir=`cygpath -w "$basedir"`;;\n' + - 'esac\n' + - '\n'; - const env = opts.nodePath ? `export NODE_PATH="${shNodePath}"\n` : ''; - if (shLongProg) { - sh += env + - `if [ -x ${shLongProg} ]; then\n` + - ` exec ${shLongProg} ${args} ${shTarget} ${progArgs}"$@"\n` + - 'else \n' + - ` exec ${shProg} ${args} ${shTarget} ${progArgs}"$@"\n` + - 'fi\n'; + + this.build = m[5] ? m[5].split('.') : [] + this.format() + } + + format () { + this.version = `${this.major}.${this.minor}.${this.patch}` + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}` } - else { - sh += `${env}${shProg} ${args} ${shTarget} ${progArgs}"$@"\n` + - 'exit $?\n'; + return this.version + } + + toString () { + return this.version + } + + compare (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + if (typeof other === 'string' && other === this.version) { + return 0 + } + other = new SemVer(other, this.options) } - return sh; -} -/** - * Generate the content of a shim for PowerShell. - * - * @param src Path to the executable or script. - * @param to Path to the shim to be created. - * It is highly recommended to end with `.ps1`. - * @param opts Options. - * @return The content of shim. - */ -function generatePwshShim(src, to, opts) { - let shTarget = path.relative(path.dirname(to), src); - const shProg = opts.prog && opts.prog.split('\\').join('/'); - let pwshProg = shProg && `"${shProg}$exe"`; - let pwshLongProg; - shTarget = shTarget.split('\\').join('/'); - const quotedPathToTarget = path.isAbsolute(shTarget) ? `"${shTarget}"` : `"$basedir/${shTarget}"`; - let args = opts.args || ''; - let normalizedPathEnvVar = normalizePathEnvVar(opts.nodePath); - const nodePath = normalizedPathEnvVar.win32; - const shNodePath = normalizedPathEnvVar.posix; - if (!pwshProg) { - pwshProg = quotedPathToTarget; - args = ''; - shTarget = ''; + + if (other.version === this.version) { + return 0 } - else { - pwshLongProg = `"$basedir/${opts.prog}$exe"`; - shTarget = quotedPathToTarget; + + return this.compareMain(other) || this.comparePre(other) + } + + compareMain (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) } - let progArgs = opts.progArgs ? `${opts.progArgs.join(` `)} ` : ''; - // #!/usr/bin/env pwsh - // $basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - // - // $ret=0 - // $exe = "" - // if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - // # Fix case when both the Windows and Linux builds of Node - // # are installed in the same directory - // $exe = ".exe" - // } - // if (Test-Path "$basedir/node") { - // # Support pipeline input - // if ($MyInvocation.ExpectingInput) { - // $input | & "$basedir/node$exe" "$basedir/node_modules/npm/bin/npm-cli.js" $args - // } else { - // & "$basedir/node$exe" "$basedir/node_modules/npm/bin/npm-cli.js" $args - // } - // $ret=$LASTEXITCODE - // } else { - // # Support pipeline input - // if ($MyInvocation.ExpectingInput) { - // $input | & "node$exe" "$basedir/node_modules/npm/bin/npm-cli.js" $args - // } else { - // & "node$exe" "$basedir/node_modules/npm/bin/npm-cli.js" $args - // } - // $ret=$LASTEXITCODE - // } - // exit $ret - let pwsh = '#!/usr/bin/env pwsh\n' + - '$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n' + - '\n' + - '$exe=""\n' + - (opts.nodePath ? '$env_node_path=$env:NODE_PATH\n' + - `$env:NODE_PATH="${nodePath}"\n` : '') + - 'if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {\n' + - ' # Fix case when both the Windows and Linux builds of Node\n' + - ' # are installed in the same directory\n' + - ' $exe=".exe"\n' + - '}'; - if (opts.nodePath) { - pwsh = pwsh + - ' else {\n' + - ` $env:NODE_PATH="${shNodePath}"\n` + - '}'; - } - pwsh += '\n'; - if (pwshLongProg) { - pwsh = pwsh + - '$ret=0\n' + - `if (Test-Path ${pwshLongProg}) {\n` + - ' # Support pipeline input\n' + - ' if ($MyInvocation.ExpectingInput) {\n' + - ` $input | & ${pwshLongProg} ${args} ${shTarget} ${progArgs}$args\n` + - ' } else {\n' + - ` & ${pwshLongProg} ${args} ${shTarget} ${progArgs}$args\n` + - ' }\n' + - ' $ret=$LASTEXITCODE\n' + - '} else {\n' + - ' # Support pipeline input\n' + - ' if ($MyInvocation.ExpectingInput) {\n' + - ` $input | & ${pwshProg} ${args} ${shTarget} ${progArgs}$args\n` + - ' } else {\n' + - ` & ${pwshProg} ${args} ${shTarget} ${progArgs}$args\n` + - ' }\n' + - ' $ret=$LASTEXITCODE\n' + - '}\n' + - (opts.nodePath ? '$env:NODE_PATH=$env_node_path\n' : '') + - 'exit $ret\n'; + + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) + } + + comparePre (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) } - else { - pwsh = pwsh + - '# Support pipeline input\n' + - 'if ($MyInvocation.ExpectingInput) {\n' + - ` $input | & ${pwshProg} ${args} ${shTarget} ${progArgs}$args\n` + - '} else {\n' + - ` & ${pwshProg} ${args} ${shTarget} ${progArgs}$args\n` + - '}\n' + - (opts.nodePath ? '$env:NODE_PATH=$env_node_path\n' : '') + - 'exit $LASTEXITCODE\n'; + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 } - return pwsh; -} -/** - * Chmod just created shim and make it executable - * - * @param to Path to shim. - */ -function chmodShim(to, opts) { - return opts.fs_.chmod(to, 0o755); -} -function normalizePathEnvVar(nodePath) { - if (!nodePath) { - return { - win32: '', - posix: '' - }; - } - let split = (typeof nodePath === 'string' ? nodePath.split(path.delimiter) : Array.from(nodePath)); - let result = {}; - for (let i = 0; i < split.length; i++) { - const win32 = split[i].split('/').join('\\'); - const posix = isWindows() ? split[i].split('\\').join('/').replace(/^([^:\\/]*):/, (_, $1) => `/mnt/${$1.toLowerCase()}`) : split[i]; - result.win32 = result.win32 ? `${result.win32};${win32}` : win32; - result.posix = result.posix ? `${result.posix}:${posix}` : posix; - result[i] = { win32, posix }; - } - return result; -} -module.exports = cmdShim; -//# sourceMappingURL=index.js.map - -/***/ }), -/***/ "./.yarn/cache/chownr-npm-1.1.4-5bd400ab08-115648f8eb.zip/node_modules/chownr/chownr.js": -/*!**********************************************************************************************!*\ - !*** ./.yarn/cache/chownr-npm-1.1.4-5bd400ab08-115648f8eb.zip/node_modules/chownr/chownr.js ***! - \**********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + let i = 0 + do { + const a = this.prerelease[i] + const b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } -"use strict"; + compareBuild (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } -const fs = __webpack_require__(/*! fs */ "fs") -const path = __webpack_require__(/*! path */ "path") + let i = 0 + do { + const a = this.build[i] + const b = other.build[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } -/* istanbul ignore next */ -const LCHOWN = fs.lchown ? 'lchown' : 'chown' -/* istanbul ignore next */ -const LCHOWNSYNC = fs.lchownSync ? 'lchownSync' : 'chownSync' + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break -/* istanbul ignore next */ -const needEISDIRHandled = fs.lchown && - !process.version.match(/v1[1-9]+\./) && - !process.version.match(/v10\.[6-9]/) + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + let i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (compareIdentifiers(this.prerelease[0], identifier) === 0) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break -const lchownSync = (path, uid, gid) => { - try { - return fs[LCHOWNSYNC](path, uid, gid) - } catch (er) { - if (er.code !== 'ENOENT') - throw er + default: + throw new Error(`invalid increment argument: ${release}`) + } + this.format() + this.raw = this.version + return this } } -/* istanbul ignore next */ -const chownSync = (path, uid, gid) => { - try { - return fs.chownSync(path, uid, gid) - } catch (er) { - if (er.code !== 'ENOENT') - throw er - } -} +module.exports = SemVer -/* istanbul ignore next */ -const handleEISDIR = - needEISDIRHandled ? (path, uid, gid, cb) => er => { - // Node prior to v10 had a very questionable implementation of - // fs.lchown, which would always try to call fs.open on a directory - // Fall back to fs.chown in those cases. - if (!er || er.code !== 'EISDIR') - cb(er) - else - fs.chown(path, uid, gid, cb) - } - : (_, __, ___, cb) => cb -/* istanbul ignore next */ -const handleEISDirSync = - needEISDIRHandled ? (path, uid, gid) => { - try { - return lchownSync(path, uid, gid) - } catch (er) { - if (er.code !== 'EISDIR') - throw er - chownSync(path, uid, gid) - } - } - : (path, uid, gid) => lchownSync(path, uid, gid) +/***/ }), -// fs.readdir could only accept an options object as of node v6 -const nodeVersion = process.version -let readdir = (path, options, cb) => fs.readdir(path, options, cb) -let readdirSync = (path, options) => fs.readdirSync(path, options) -/* istanbul ignore next */ -if (/^v4\./.test(nodeVersion)) - readdir = (path, options, cb) => fs.readdir(path, cb) +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/clean.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/clean.js ***! + \***********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const chown = (cpath, uid, gid, cb) => { - fs[LCHOWN](cpath, uid, gid, handleEISDIR(cpath, uid, gid, er => { - // Skip ENOENT error - cb(er && er.code !== 'ENOENT' ? er : null) - })) +const parse = __webpack_require__(/*! ./parse */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/parse.js") +const clean = (version, options) => { + const s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null } +module.exports = clean -const chownrKid = (p, child, uid, gid, cb) => { - if (typeof child === 'string') - return fs.lstat(path.resolve(p, child), (er, stats) => { - // Skip ENOENT error - if (er) - return cb(er.code !== 'ENOENT' ? er : null) - stats.name = child - chownrKid(p, stats, uid, gid, cb) - }) - if (child.isDirectory()) { - chownr(path.resolve(p, child.name), uid, gid, er => { - if (er) - return cb(er) - const cpath = path.resolve(p, child.name) - chown(cpath, uid, gid, cb) - }) - } else { - const cpath = path.resolve(p, child.name) - chown(cpath, uid, gid, cb) - } -} +/***/ }), +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/cmp.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/cmp.js ***! + \*********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const chownr = (p, uid, gid, cb) => { - readdir(p, { withFileTypes: true }, (er, children) => { - // any error other than ENOTDIR or ENOTSUP means it's not readable, - // or doesn't exist. give up. - if (er) { - if (er.code === 'ENOENT') - return cb() - else if (er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP') - return cb(er) - } - if (er || !children.length) - return chown(p, uid, gid, cb) +const eq = __webpack_require__(/*! ./eq */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/eq.js") +const neq = __webpack_require__(/*! ./neq */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/neq.js") +const gt = __webpack_require__(/*! ./gt */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gt.js") +const gte = __webpack_require__(/*! ./gte */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gte.js") +const lt = __webpack_require__(/*! ./lt */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/lt.js") +const lte = __webpack_require__(/*! ./lte */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/lte.js") - let len = children.length - let errState = null - const then = er => { - if (errState) - return - if (er) - return cb(errState = er) - if (-- len === 0) - return chown(p, uid, gid, cb) - } +const cmp = (a, op, b, loose) => { + switch (op) { + case '===': + if (typeof a === 'object') { + a = a.version + } + if (typeof b === 'object') { + b = b.version + } + return a === b - children.forEach(child => chownrKid(p, child, uid, gid, then)) - }) -} + case '!==': + if (typeof a === 'object') { + a = a.version + } + if (typeof b === 'object') { + b = b.version + } + return a !== b -const chownrKidSync = (p, child, uid, gid) => { - if (typeof child === 'string') { - try { - const stats = fs.lstatSync(path.resolve(p, child)) - stats.name = child - child = stats - } catch (er) { - if (er.code === 'ENOENT') - return - else - throw er - } - } + case '': + case '=': + case '==': + return eq(a, b, loose) - if (child.isDirectory()) - chownrSync(path.resolve(p, child.name), uid, gid) + case '!=': + return neq(a, b, loose) - handleEISDirSync(path.resolve(p, child.name), uid, gid) -} + case '>': + return gt(a, b, loose) -const chownrSync = (p, uid, gid) => { - let children - try { - children = readdirSync(p, { withFileTypes: true }) - } catch (er) { - if (er.code === 'ENOENT') - return - else if (er.code === 'ENOTDIR' || er.code === 'ENOTSUP') - return handleEISDirSync(p, uid, gid) - else - throw er - } + case '>=': + return gte(a, b, loose) - if (children && children.length) - children.forEach(child => chownrKidSync(p, child, uid, gid)) + case '<': + return lt(a, b, loose) - return handleEISDirSync(p, uid, gid) -} + case '<=': + return lte(a, b, loose) -module.exports = chownr -chownr.sync = chownrSync + default: + throw new TypeError(`Invalid operator: ${op}`) + } +} +module.exports = cmp /***/ }), -/***/ "./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip/node_modules/fs-minipass/index.js": -/*!*******************************************************************************************************!*\ - !*** ./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip/node_modules/fs-minipass/index.js ***! - \*******************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/coerce.js": +/*!************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/coerce.js ***! + \************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const parse = __webpack_require__(/*! ./parse */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/parse.js") +const { re, t } = __webpack_require__(/*! ../internal/re */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/re.js") -const MiniPass = __webpack_require__(/*! minipass */ "./.yarn/cache/minipass-npm-3.1.1-b51d7e264d-cfcfd86adc.zip/node_modules/minipass/index.js") -const EE = __webpack_require__(/*! events */ "events").EventEmitter -const fs = __webpack_require__(/*! fs */ "fs") +const coerce = (version, options) => { + if (version instanceof SemVer) { + return version + } -let writev = fs.writev -/* istanbul ignore next */ -if (!writev) { - // This entire block can be removed if support for earlier than Node.js - // 12.9.0 is not needed. - const binding = process.binding('fs') - const FSReqWrap = binding.FSReqWrap || binding.FSReqCallback + if (typeof version === 'number') { + version = String(version) + } - writev = (fd, iovec, pos, cb) => { - const done = (er, bw) => cb(er, bw, iovec) - const req = new FSReqWrap() - req.oncomplete = done - binding.writeBuffers(fd, iovec, pos, req) + if (typeof version !== 'string') { + return null } -} -const _autoClose = Symbol('_autoClose') -const _close = Symbol('_close') -const _ended = Symbol('_ended') -const _fd = Symbol('_fd') -const _finished = Symbol('_finished') -const _flags = Symbol('_flags') -const _flush = Symbol('_flush') -const _handleChunk = Symbol('_handleChunk') -const _makeBuf = Symbol('_makeBuf') -const _mode = Symbol('_mode') -const _needDrain = Symbol('_needDrain') -const _onerror = Symbol('_onerror') -const _onopen = Symbol('_onopen') -const _onread = Symbol('_onread') -const _onwrite = Symbol('_onwrite') -const _open = Symbol('_open') -const _path = Symbol('_path') -const _pos = Symbol('_pos') -const _queue = Symbol('_queue') -const _read = Symbol('_read') -const _readSize = Symbol('_readSize') -const _reading = Symbol('_reading') -const _remain = Symbol('_remain') -const _size = Symbol('_size') -const _write = Symbol('_write') -const _writing = Symbol('_writing') -const _defaultFlag = Symbol('_defaultFlag') -const _errored = Symbol('_errored') + options = options || {} -class ReadStream extends MiniPass { - constructor (path, opt) { - opt = opt || {} - super(opt) + let match = null + if (!options.rtl) { + match = version.match(re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + let next + while ((next = re[t.COERCERTL].exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + re[t.COERCERTL].lastIndex = -1 + } - this.readable = true - this.writable = false + if (match === null) { + return null + } - if (typeof path !== 'string') - throw new TypeError('path must be a string') + return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) +} +module.exports = coerce - this[_errored] = false - this[_fd] = typeof opt.fd === 'number' ? opt.fd : null - this[_path] = path - this[_readSize] = opt.readSize || 16*1024*1024 - this[_reading] = false - this[_size] = typeof opt.size === 'number' ? opt.size : Infinity - this[_remain] = this[_size] - this[_autoClose] = typeof opt.autoClose === 'boolean' ? - opt.autoClose : true - if (typeof this[_fd] === 'number') - this[_read]() - else - this[_open]() - } +/***/ }), - get fd () { return this[_fd] } - get path () { return this[_path] } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare-build.js": +/*!*******************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare-build.js ***! + \*******************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - write () { - throw new TypeError('this is a readable stream') - } +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const compareBuild = (a, b, loose) => { + const versionA = new SemVer(a, loose) + const versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) +} +module.exports = compareBuild - end () { - throw new TypeError('this is a readable stream') - } - [_open] () { - fs.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd)) - } +/***/ }), - [_onopen] (er, fd) { - if (er) - this[_onerror](er) - else { - this[_fd] = fd - this.emit('open', fd) - this[_read]() - } - } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare-loose.js": +/*!*******************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare-loose.js ***! + \*******************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - [_makeBuf] () { - return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain])) - } +const compare = __webpack_require__(/*! ./compare */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js") +const compareLoose = (a, b) => compare(a, b, true) +module.exports = compareLoose - [_read] () { - if (!this[_reading]) { - this[_reading] = true - const buf = this[_makeBuf]() - /* istanbul ignore if */ - if (buf.length === 0) - return process.nextTick(() => this[_onread](null, 0, buf)) - fs.read(this[_fd], buf, 0, buf.length, null, (er, br, buf) => - this[_onread](er, br, buf)) - } - } - - [_onread] (er, br, buf) { - this[_reading] = false - if (er) - this[_onerror](er) - else if (this[_handleChunk](br, buf)) - this[_read]() - } - - [_close] () { - if (this[_autoClose] && typeof this[_fd] === 'number') { - const fd = this[_fd] - this[_fd] = null - fs.close(fd, er => er ? this.emit('error', er) : this.emit('close')) - } - } - - [_onerror] (er) { - this[_reading] = true - this[_close]() - this.emit('error', er) - } - [_handleChunk] (br, buf) { - let ret = false - // no effect if infinite - this[_remain] -= br - if (br > 0) - ret = super.write(br < buf.length ? buf.slice(0, br) : buf) +/***/ }), - if (br === 0 || this[_remain] <= 0) { - ret = false - this[_close]() - super.end() - } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js": +/*!*************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js ***! + \*************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - return ret - } +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const compare = (a, b, loose) => + new SemVer(a, loose).compare(new SemVer(b, loose)) - emit (ev, data) { - switch (ev) { - case 'prefinish': - case 'finish': - break +module.exports = compare - case 'drain': - if (typeof this[_fd] === 'number') - this[_read]() - break - case 'error': - if (this[_errored]) - return - this[_errored] = true - return super.emit(ev, data) +/***/ }), - default: - return super.emit(ev, data) - } - } -} +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/diff.js": +/*!**********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/diff.js ***! + \**********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -class ReadStreamSync extends ReadStream { - [_open] () { - let threw = true - try { - this[_onopen](null, fs.openSync(this[_path], 'r')) - threw = false - } finally { - if (threw) - this[_close]() - } - } +const parse = __webpack_require__(/*! ./parse */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/parse.js") +const eq = __webpack_require__(/*! ./eq */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/eq.js") - [_read] () { - let threw = true - try { - if (!this[_reading]) { - this[_reading] = true - do { - const buf = this[_makeBuf]() - /* istanbul ignore next */ - const br = buf.length === 0 ? 0 - : fs.readSync(this[_fd], buf, 0, buf.length, null) - if (!this[_handleChunk](br, buf)) - break - } while (true) - this[_reading] = false +const diff = (version1, version2) => { + if (eq(version1, version2)) { + return null + } else { + const v1 = parse(version1) + const v2 = parse(version2) + const hasPre = v1.prerelease.length || v2.prerelease.length + const prefix = hasPre ? 'pre' : '' + const defaultResult = hasPre ? 'prerelease' : '' + for (const key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } } - threw = false - } finally { - if (threw) - this[_close]() - } - } - - [_close] () { - if (this[_autoClose] && typeof this[_fd] === 'number') { - const fd = this[_fd] - this[_fd] = null - fs.closeSync(fd) - this.emit('close') } + return defaultResult // may be undefined } } +module.exports = diff -class WriteStream extends EE { - constructor (path, opt) { - opt = opt || {} - super(opt) - this.readable = false - this.writable = true - this[_errored] = false - this[_writing] = false - this[_ended] = false - this[_needDrain] = false - this[_queue] = [] - this[_path] = path - this[_fd] = typeof opt.fd === 'number' ? opt.fd : null - this[_mode] = opt.mode === undefined ? 0o666 : opt.mode - this[_pos] = typeof opt.start === 'number' ? opt.start : null - this[_autoClose] = typeof opt.autoClose === 'boolean' ? - opt.autoClose : true - // truncating makes no sense when writing into the middle - const defaultFlag = this[_pos] !== null ? 'r+' : 'w' - this[_defaultFlag] = opt.flags === undefined - this[_flags] = this[_defaultFlag] ? defaultFlag : opt.flags +/***/ }), - if (this[_fd] === null) - this[_open]() - } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/eq.js": +/*!********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/eq.js ***! + \********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - emit (ev, data) { - if (ev === 'error') { - if (this[_errored]) - return - this[_errored] = true - } - return super.emit(ev, data) - } +const compare = __webpack_require__(/*! ./compare */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js") +const eq = (a, b, loose) => compare(a, b, loose) === 0 +module.exports = eq - get fd () { return this[_fd] } - get path () { return this[_path] } +/***/ }), - [_onerror] (er) { - this[_close]() - this[_writing] = true - this.emit('error', er) - } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gt.js": +/*!********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gt.js ***! + \********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - [_open] () { - fs.open(this[_path], this[_flags], this[_mode], - (er, fd) => this[_onopen](er, fd)) - } +const compare = __webpack_require__(/*! ./compare */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js") +const gt = (a, b, loose) => compare(a, b, loose) > 0 +module.exports = gt - [_onopen] (er, fd) { - if (this[_defaultFlag] && - this[_flags] === 'r+' && - er && er.code === 'ENOENT') { - this[_flags] = 'w' - this[_open]() - } else if (er) - this[_onerror](er) - else { - this[_fd] = fd - this.emit('open', fd) - this[_flush]() - } - } - end (buf, enc) { - if (buf) - this.write(buf, enc) +/***/ }), - this[_ended] = true +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gte.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gte.js ***! + \*********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - // synthetic after-write logic, where drain/finish live - if (!this[_writing] && !this[_queue].length && - typeof this[_fd] === 'number') - this[_onwrite](null, 0) - return this - } +const compare = __webpack_require__(/*! ./compare */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js") +const gte = (a, b, loose) => compare(a, b, loose) >= 0 +module.exports = gte - write (buf, enc) { - if (typeof buf === 'string') - buf = Buffer.from(buf, enc) - if (this[_ended]) { - this.emit('error', new Error('write() after end()')) - return false - } +/***/ }), - if (this[_fd] === null || this[_writing] || this[_queue].length) { - this[_queue].push(buf) - this[_needDrain] = true - return false - } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/inc.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/inc.js ***! + \*********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - this[_writing] = true - this[_write](buf) - return true +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") + +const inc = (version, release, options, identifier) => { + if (typeof (options) === 'string') { + identifier = options + options = undefined } - [_write] (buf) { - fs.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) => - this[_onwrite](er, bw)) + try { + return new SemVer( + version instanceof SemVer ? version.version : version, + options + ).inc(release, identifier).version + } catch (er) { + return null } +} +module.exports = inc - [_onwrite] (er, bw) { - if (er) - this[_onerror](er) - else { - if (this[_pos] !== null) - this[_pos] += bw - if (this[_queue].length) - this[_flush]() - else { - this[_writing] = false - if (this[_ended] && !this[_finished]) { - this[_finished] = true - this[_close]() - this.emit('finish') - } else if (this[_needDrain]) { - this[_needDrain] = false - this.emit('drain') - } - } - } - } +/***/ }), - [_flush] () { - if (this[_queue].length === 0) { - if (this[_ended]) - this[_onwrite](null, 0) - } else if (this[_queue].length === 1) - this[_write](this[_queue].pop()) - else { - const iovec = this[_queue] - this[_queue] = [] - writev(this[_fd], iovec, this[_pos], - (er, bw) => this[_onwrite](er, bw)) - } - } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/lt.js": +/*!********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/lt.js ***! + \********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - [_close] () { - if (this[_autoClose] && typeof this[_fd] === 'number') { - const fd = this[_fd] - this[_fd] = null - fs.close(fd, er => er ? this.emit('error', er) : this.emit('close')) - } - } -} +const compare = __webpack_require__(/*! ./compare */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js") +const lt = (a, b, loose) => compare(a, b, loose) < 0 +module.exports = lt -class WriteStreamSync extends WriteStream { - [_open] () { - let fd - // only wrap in a try{} block if we know we'll retry, to avoid - // the rethrow obscuring the error's source frame in most cases. - if (this[_defaultFlag] && this[_flags] === 'r+') { - try { - fd = fs.openSync(this[_path], this[_flags], this[_mode]) - } catch (er) { - if (er.code === 'ENOENT') { - this[_flags] = 'w' - return this[_open]() - } else - throw er - } - } else - fd = fs.openSync(this[_path], this[_flags], this[_mode]) - this[_onopen](null, fd) - } +/***/ }), - [_close] () { - if (this[_autoClose] && typeof this[_fd] === 'number') { - const fd = this[_fd] - this[_fd] = null - fs.closeSync(fd) - this.emit('close') - } - } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/lte.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/lte.js ***! + \*********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - [_write] (buf) { - // throw the original, but try to close if it fails - let threw = true - try { - this[_onwrite](null, - fs.writeSync(this[_fd], buf, 0, buf.length, this[_pos])) - threw = false - } finally { - if (threw) - try { this[_close]() } catch (_) {} - } - } -} +const compare = __webpack_require__(/*! ./compare */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js") +const lte = (a, b, loose) => compare(a, b, loose) <= 0 +module.exports = lte -exports.ReadStream = ReadStream -exports.ReadStreamSync = ReadStreamSync -exports.WriteStream = WriteStream -exports.WriteStreamSync = WriteStreamSync +/***/ }), +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/major.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/major.js ***! + \***********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/***/ }), +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const major = (a, loose) => new SemVer(a, loose).major +module.exports = major -/***/ "./.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip/node_modules/has-flag/index.js": -/*!*************************************************************************************************!*\ - !*** ./.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip/node_modules/has-flag/index.js ***! - \*************************************************************************************************/ -/***/ ((module) => { -"use strict"; +/***/ }), +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/minor.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/minor.js ***! + \***********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -module.exports = (flag, argv = process.argv) => { - const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); - const position = argv.indexOf(prefix + flag); - const terminatorPosition = argv.indexOf('--'); - return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); -}; +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const minor = (a, loose) => new SemVer(a, loose).minor +module.exports = minor /***/ }), -/***/ "./.yarn/cache/is-windows-npm-1.0.2-898cd6f3d7-438b7e5265.zip/node_modules/is-windows/index.js": -/*!*****************************************************************************************************!*\ - !*** ./.yarn/cache/is-windows-npm-1.0.2-898cd6f3d7-438b7e5265.zip/node_modules/is-windows/index.js ***! - \*****************************************************************************************************/ -/***/ ((module, exports) => { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - * is-windows - * - * Copyright © 2015-2018, Jon Schlinkert. - * Released under the MIT License. - */ +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/neq.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/neq.js ***! + \*********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -(function(factory) { - if (exports && typeof exports === 'object' && "object" !== 'undefined') { - module.exports = factory(); - } else if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else {} -})(function() { - 'use strict'; - return function isWindows() { - return process && (process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE)); - }; -}); +const compare = __webpack_require__(/*! ./compare */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js") +const neq = (a, b, loose) => compare(a, b, loose) !== 0 +module.exports = neq /***/ }), -/***/ "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/index.js": -/*!*******************************************************************************************!*\ - !*** ./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/index.js ***! - \*******************************************************************************************/ +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/parse.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/parse.js ***! + \***********************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -var fs = __webpack_require__(/*! fs */ "fs") -var core -if (process.platform === 'win32' || global.TESTING_WINDOWS) { - core = __webpack_require__(/*! ./windows.js */ "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/windows.js") -} else { - core = __webpack_require__(/*! ./mode.js */ "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/mode.js") -} +const { MAX_LENGTH } = __webpack_require__(/*! ../internal/constants */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/constants.js") +const { re, t } = __webpack_require__(/*! ../internal/re */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/re.js") +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") -module.exports = isexe -isexe.sync = sync +const parseOptions = __webpack_require__(/*! ../internal/parse-options */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/parse-options.js") +const parse = (version, options) => { + options = parseOptions(options) -function isexe (path, options, cb) { - if (typeof options === 'function') { - cb = options - options = {} + if (version instanceof SemVer) { + return version } - if (!cb) { - if (typeof Promise !== 'function') { - throw new TypeError('callback not provided') - } + if (typeof version !== 'string') { + return null + } - return new Promise(function (resolve, reject) { - isexe(path, options || {}, function (er, is) { - if (er) { - reject(er) - } else { - resolve(is) - } - }) - }) + if (version.length > MAX_LENGTH) { + return null } - core(path, options || {}, function (er, is) { - // ignore EACCES because that just means we aren't allowed to run it - if (er) { - if (er.code === 'EACCES' || options && options.ignoreErrors) { - er = null - is = false - } - } - cb(er, is) - }) -} + const r = options.loose ? re[t.LOOSE] : re[t.FULL] + if (!r.test(version)) { + return null + } -function sync (path, options) { - // my kingdom for a filtered catch try { - return core.sync(path, options || {}) + return new SemVer(version, options) } catch (er) { - if (options && options.ignoreErrors || er.code === 'EACCES') { - return false - } else { - throw er - } + return null } } +module.exports = parse + /***/ }), -/***/ "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/mode.js": -/*!******************************************************************************************!*\ - !*** ./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/mode.js ***! - \******************************************************************************************/ +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/patch.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/patch.js ***! + \***********************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -module.exports = isexe -isexe.sync = sync +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const patch = (a, loose) => new SemVer(a, loose).patch +module.exports = patch -var fs = __webpack_require__(/*! fs */ "fs") -function isexe (path, options, cb) { - fs.stat(path, function (er, stat) { - cb(er, er ? false : checkStat(stat, options)) - }) -} +/***/ }), -function sync (path, options) { - return checkStat(fs.statSync(path), options) -} +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/prerelease.js": +/*!****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/prerelease.js ***! + \****************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -function checkStat (stat, options) { - return stat.isFile() && checkMode(stat, options) +const parse = __webpack_require__(/*! ./parse */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/parse.js") +const prerelease = (version, options) => { + const parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null } +module.exports = prerelease -function checkMode (stat, options) { - var mod = stat.mode - var uid = stat.uid - var gid = stat.gid - - var myUid = options.uid !== undefined ? - options.uid : process.getuid && process.getuid() - var myGid = options.gid !== undefined ? - options.gid : process.getgid && process.getgid() - var u = parseInt('100', 8) - var g = parseInt('010', 8) - var o = parseInt('001', 8) - var ug = u | g +/***/ }), - var ret = (mod & o) || - (mod & g) && gid === myGid || - (mod & u) && uid === myUid || - (mod & ug) && myUid === 0 +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/rcompare.js": +/*!**************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/rcompare.js ***! + \**************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - return ret -} +const compare = __webpack_require__(/*! ./compare */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js") +const rcompare = (a, b, loose) => compare(b, a, loose) +module.exports = rcompare /***/ }), -/***/ "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/windows.js": -/*!*********************************************************************************************!*\ - !*** ./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/windows.js ***! - \*********************************************************************************************/ +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/rsort.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/rsort.js ***! + \***********************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -module.exports = isexe -isexe.sync = sync +const compareBuild = __webpack_require__(/*! ./compare-build */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare-build.js") +const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) +module.exports = rsort -var fs = __webpack_require__(/*! fs */ "fs") -function checkPathExt (path, options) { - var pathext = options.pathExt !== undefined ? - options.pathExt : process.env.PATHEXT - - if (!pathext) { - return true - } +/***/ }), - pathext = pathext.split(';') - if (pathext.indexOf('') !== -1) { - return true - } - for (var i = 0; i < pathext.length; i++) { - var p = pathext[i].toLowerCase() - if (p && path.substr(-p.length).toLowerCase() === p) { - return true - } - } - return false -} +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/satisfies.js": +/*!***************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/satisfies.js ***! + \***************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -function checkStat (stat, path, options) { - if (!stat.isSymbolicLink() && !stat.isFile()) { +const Range = __webpack_require__(/*! ../classes/range */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js") +const satisfies = (version, range, options) => { + try { + range = new Range(range, options) + } catch (er) { return false } - return checkPathExt(path, options) + return range.test(version) } +module.exports = satisfies -function isexe (path, options, cb) { - fs.stat(path, function (er, stat) { - cb(er, er ? false : checkStat(stat, path, options)) - }) -} -function sync (path, options) { - return checkStat(fs.statSync(path), path, options) +/***/ }), + +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/sort.js": +/*!**********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/sort.js ***! + \**********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const compareBuild = __webpack_require__(/*! ./compare-build */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare-build.js") +const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) +module.exports = sort + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/valid.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/valid.js ***! + \***********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const parse = __webpack_require__(/*! ./parse */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/parse.js") +const valid = (version, options) => { + const v = parse(version, options) + return v ? v.version : null } +module.exports = valid /***/ }), -/***/ "./.yarn/cache/minipass-npm-3.1.1-b51d7e264d-cfcfd86adc.zip/node_modules/minipass/index.js": +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/index.js": /*!*************************************************************************************************!*\ - !*** ./.yarn/cache/minipass-npm-3.1.1-b51d7e264d-cfcfd86adc.zip/node_modules/minipass/index.js ***! + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/index.js ***! \*************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; +// just pre-load all the stuff that index.js lazily exports +const internalRe = __webpack_require__(/*! ./internal/re */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/re.js") +module.exports = { + re: internalRe.re, + src: internalRe.src, + tokens: internalRe.t, + SEMVER_SPEC_VERSION: (__webpack_require__(/*! ./internal/constants */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/constants.js").SEMVER_SPEC_VERSION), + SemVer: __webpack_require__(/*! ./classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js"), + compareIdentifiers: (__webpack_require__(/*! ./internal/identifiers */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/identifiers.js").compareIdentifiers), + rcompareIdentifiers: (__webpack_require__(/*! ./internal/identifiers */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/identifiers.js").rcompareIdentifiers), + parse: __webpack_require__(/*! ./functions/parse */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/parse.js"), + valid: __webpack_require__(/*! ./functions/valid */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/valid.js"), + clean: __webpack_require__(/*! ./functions/clean */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/clean.js"), + inc: __webpack_require__(/*! ./functions/inc */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/inc.js"), + diff: __webpack_require__(/*! ./functions/diff */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/diff.js"), + major: __webpack_require__(/*! ./functions/major */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/major.js"), + minor: __webpack_require__(/*! ./functions/minor */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/minor.js"), + patch: __webpack_require__(/*! ./functions/patch */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/patch.js"), + prerelease: __webpack_require__(/*! ./functions/prerelease */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/prerelease.js"), + compare: __webpack_require__(/*! ./functions/compare */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js"), + rcompare: __webpack_require__(/*! ./functions/rcompare */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/rcompare.js"), + compareLoose: __webpack_require__(/*! ./functions/compare-loose */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare-loose.js"), + compareBuild: __webpack_require__(/*! ./functions/compare-build */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare-build.js"), + sort: __webpack_require__(/*! ./functions/sort */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/sort.js"), + rsort: __webpack_require__(/*! ./functions/rsort */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/rsort.js"), + gt: __webpack_require__(/*! ./functions/gt */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gt.js"), + lt: __webpack_require__(/*! ./functions/lt */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/lt.js"), + eq: __webpack_require__(/*! ./functions/eq */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/eq.js"), + neq: __webpack_require__(/*! ./functions/neq */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/neq.js"), + gte: __webpack_require__(/*! ./functions/gte */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gte.js"), + lte: __webpack_require__(/*! ./functions/lte */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/lte.js"), + cmp: __webpack_require__(/*! ./functions/cmp */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/cmp.js"), + coerce: __webpack_require__(/*! ./functions/coerce */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/coerce.js"), + Comparator: __webpack_require__(/*! ./classes/comparator */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/comparator.js"), + Range: __webpack_require__(/*! ./classes/range */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js"), + satisfies: __webpack_require__(/*! ./functions/satisfies */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/satisfies.js"), + toComparators: __webpack_require__(/*! ./ranges/to-comparators */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/to-comparators.js"), + maxSatisfying: __webpack_require__(/*! ./ranges/max-satisfying */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/max-satisfying.js"), + minSatisfying: __webpack_require__(/*! ./ranges/min-satisfying */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/min-satisfying.js"), + minVersion: __webpack_require__(/*! ./ranges/min-version */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/min-version.js"), + validRange: __webpack_require__(/*! ./ranges/valid */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/valid.js"), + outside: __webpack_require__(/*! ./ranges/outside */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/outside.js"), + gtr: __webpack_require__(/*! ./ranges/gtr */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/gtr.js"), + ltr: __webpack_require__(/*! ./ranges/ltr */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/ltr.js"), + intersects: __webpack_require__(/*! ./ranges/intersects */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/intersects.js"), + simplifyRange: __webpack_require__(/*! ./ranges/simplify */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/simplify.js"), + subset: __webpack_require__(/*! ./ranges/subset */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/subset.js"), +} -const EE = __webpack_require__(/*! events */ "events") -const Stream = __webpack_require__(/*! stream */ "stream") -const Yallist = __webpack_require__(/*! yallist */ "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/yallist.js") -const SD = __webpack_require__(/*! string_decoder */ "string_decoder").StringDecoder -const EOF = Symbol('EOF') -const MAYBE_EMIT_END = Symbol('maybeEmitEnd') -const EMITTED_END = Symbol('emittedEnd') -const EMITTING_END = Symbol('emittingEnd') -const CLOSED = Symbol('closed') -const READ = Symbol('read') -const FLUSH = Symbol('flush') -const FLUSHCHUNK = Symbol('flushChunk') -const ENCODING = Symbol('encoding') -const DECODER = Symbol('decoder') -const FLOWING = Symbol('flowing') -const PAUSED = Symbol('paused') -const RESUME = Symbol('resume') -const BUFFERLENGTH = Symbol('bufferLength') -const BUFFERPUSH = Symbol('bufferPush') -const BUFFERSHIFT = Symbol('bufferShift') -const OBJECTMODE = Symbol('objectMode') -const DESTROYED = Symbol('destroyed') +/***/ }), -// TODO remove when Node v8 support drops -const doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1' -const ASYNCITERATOR = doIter && Symbol.asyncIterator - || Symbol('asyncIterator not implemented') -const ITERATOR = doIter && Symbol.iterator - || Symbol('iterator not implemented') +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/constants.js": +/*!**************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/constants.js ***! + \**************************************************************************************************************/ +/***/ ((module) => { -// events that mean 'the stream is over' -// these are treated specially, and re-emitted -// if they are listened for after emitting. -const isEndish = ev => - ev === 'end' || - ev === 'finish' || - ev === 'prefinish' +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0' -const isArrayBuffer = b => b instanceof ArrayBuffer || - typeof b === 'object' && - b.constructor && - b.constructor.name === 'ArrayBuffer' && - b.byteLength >= 0 +const MAX_LENGTH = 256 +const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || +/* istanbul ignore next */ 9007199254740991 -const isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b) +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16 -module.exports = class Minipass extends Stream { - constructor (options) { - super() - this[FLOWING] = false - // whether we're explicitly paused - this[PAUSED] = false - this.pipes = new Yallist() - this.buffer = new Yallist() - this[OBJECTMODE] = options && options.objectMode || false - if (this[OBJECTMODE]) - this[ENCODING] = null - else - this[ENCODING] = options && options.encoding || null - if (this[ENCODING] === 'buffer') - this[ENCODING] = null - this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null - this[EOF] = false - this[EMITTED_END] = false - this[EMITTING_END] = false - this[CLOSED] = false - this.writable = true - this.readable = true - this[BUFFERLENGTH] = 0 - this[DESTROYED] = false - } +module.exports = { + SEMVER_SPEC_VERSION, + MAX_LENGTH, + MAX_SAFE_INTEGER, + MAX_SAFE_COMPONENT_LENGTH, +} - get bufferLength () { return this[BUFFERLENGTH] } - get encoding () { return this[ENCODING] } - set encoding (enc) { - if (this[OBJECTMODE]) - throw new Error('cannot set encoding in objectMode') +/***/ }), - if (this[ENCODING] && enc !== this[ENCODING] && - (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH])) - throw new Error('cannot change encoding') +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/debug.js": +/*!**********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/debug.js ***! + \**********************************************************************************************************/ +/***/ ((module) => { - if (this[ENCODING] !== enc) { - this[DECODER] = enc ? new SD(enc) : null - if (this.buffer.length) - this.buffer = this.buffer.map(chunk => this[DECODER].write(chunk)) - } +const debug = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {} - this[ENCODING] = enc - } +module.exports = debug - setEncoding (enc) { - this.encoding = enc - } - get objectMode () { return this[OBJECTMODE] } - set objectMode (ॐ ) { this[OBJECTMODE] = this[OBJECTMODE] || !!ॐ } +/***/ }), - write (chunk, encoding, cb) { - if (this[EOF]) - throw new Error('write after end') +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/identifiers.js": +/*!****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/identifiers.js ***! + \****************************************************************************************************************/ +/***/ ((module) => { - if (this[DESTROYED]) { - this.emit('error', Object.assign( - new Error('Cannot call write after a stream was destroyed'), - { code: 'ERR_STREAM_DESTROYED' } - )) - return true - } +const numeric = /^[0-9]+$/ +const compareIdentifiers = (a, b) => { + const anum = numeric.test(a) + const bnum = numeric.test(b) - if (typeof encoding === 'function') - cb = encoding, encoding = 'utf8' + if (anum && bnum) { + a = +a + b = +b + } - if (!encoding) - encoding = 'utf8' + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} - // convert array buffers and typed array views into buffers - // at some point in the future, we may want to do the opposite! - // leave strings and buffers as-is - // anything else switches us into object mode - if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) { - if (isArrayBufferView(chunk)) - chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength) - else if (isArrayBuffer(chunk)) - chunk = Buffer.from(chunk) - else if (typeof chunk !== 'string') - // use the setter so we throw if we have encoding set - this.objectMode = true - } +const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) - // this ensures at this point that the chunk is a buffer or string - // don't buffer it up or send it to the decoder - if (!this.objectMode && !chunk.length) { - const ret = this.flowing - if (this[BUFFERLENGTH] !== 0) - this.emit('readable') - if (cb) - cb() - return ret - } +module.exports = { + compareIdentifiers, + rcompareIdentifiers, +} - // fast-path writing strings of same encoding to a stream with - // an empty buffer, skipping the buffer/decoder dance - if (typeof chunk === 'string' && !this[OBJECTMODE] && - // unless it is a string already ready for us to use - !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) { - chunk = Buffer.from(chunk, encoding) - } - if (Buffer.isBuffer(chunk) && this[ENCODING]) - chunk = this[DECODER].write(chunk) +/***/ }), - try { - return this.flowing - ? (this.emit('data', chunk), this.flowing) - : (this[BUFFERPUSH](chunk), false) - } finally { - if (this[BUFFERLENGTH] !== 0) - this.emit('readable') - if (cb) - cb() - } - } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/parse-options.js": +/*!******************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/parse-options.js ***! + \******************************************************************************************************************/ +/***/ ((module) => { - read (n) { - if (this[DESTROYED]) - return null +// parse out just the options we care about so we always get a consistent +// obj with keys in a consistent order. +const opts = ['includePrerelease', 'loose', 'rtl'] +const parseOptions = options => + !options ? {} + : typeof options !== 'object' ? { loose: true } + : opts.filter(k => options[k]).reduce((o, k) => { + o[k] = true + return o + }, {}) +module.exports = parseOptions - try { - if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) - return null - if (this[OBJECTMODE]) - n = null +/***/ }), - if (this.buffer.length > 1 && !this[OBJECTMODE]) { - if (this.encoding) - this.buffer = new Yallist([ - Array.from(this.buffer).join('') - ]) - else - this.buffer = new Yallist([ - Buffer.concat(Array.from(this.buffer), this[BUFFERLENGTH]) - ]) - } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/re.js": +/*!*******************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/re.js ***! + \*******************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { - return this[READ](n || null, this.buffer.head.value) - } finally { - this[MAYBE_EMIT_END]() - } - } +const { MAX_SAFE_COMPONENT_LENGTH } = __webpack_require__(/*! ./constants */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/constants.js") +const debug = __webpack_require__(/*! ./debug */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/internal/debug.js") +exports = module.exports = {} - [READ] (n, chunk) { - if (n === chunk.length || n === null) - this[BUFFERSHIFT]() - else { - this.buffer.head.value = chunk.slice(n) - chunk = chunk.slice(0, n) - this[BUFFERLENGTH] -= n - } +// The actual regexps go on exports.re +const re = exports.re = [] +const src = exports.src = [] +const t = exports.t = {} +let R = 0 - this.emit('data', chunk) +const createToken = (name, value, isGlobal) => { + const index = R++ + debug(name, index, value) + t[name] = index + src[index] = value + re[index] = new RegExp(value, isGlobal ? 'g' : undefined) +} - if (!this.buffer.length && !this[EOF]) - this.emit('drain') +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. - return chunk - } +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. - end (chunk, encoding, cb) { - if (typeof chunk === 'function') - cb = chunk, chunk = null - if (typeof encoding === 'function') - cb = encoding, encoding = 'utf8' - if (chunk) - this.write(chunk, encoding) - if (cb) - this.once('end', cb) - this[EOF] = true - this.writable = false +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') +createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') - // if we haven't written anything, then go ahead and emit, - // even if we're not reading. - // we'll re-emit if a new 'end' listener is added anyway. - // This makes MP more suitable to write-only use cases. - if (this.flowing || !this[PAUSED]) - this[MAYBE_EMIT_END]() - return this - } +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. - // don't let the internal resume be overwritten - [RESUME] () { - if (this[DESTROYED]) - return +createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') - this[PAUSED] = false - this[FLOWING] = true - this.emit('resume') - if (this.buffer.length) - this[FLUSH]() - else if (this[EOF]) - this[MAYBE_EMIT_END]() - else - this.emit('drain') - } +// ## Main Version +// Three dot-separated numeric identifiers. - resume () { - return this[RESUME]() - } +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`) - pause () { - this[FLOWING] = false - this[PAUSED] = true - } +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`) - get destroyed () { - return this[DESTROYED] - } +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. - get flowing () { - return this[FLOWING] - } +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] +}|${src[t.NONNUMERICIDENTIFIER]})`) - get paused () { - return this[PAUSED] - } +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] +}|${src[t.NONNUMERICIDENTIFIER]})`) - [BUFFERPUSH] (chunk) { - if (this[OBJECTMODE]) - this[BUFFERLENGTH] += 1 - else - this[BUFFERLENGTH] += chunk.length - return this.buffer.push(chunk) - } +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. - [BUFFERSHIFT] () { - if (this.buffer.length) { - if (this[OBJECTMODE]) - this[BUFFERLENGTH] -= 1 - else - this[BUFFERLENGTH] -= this.buffer.head.value.length - } - return this.buffer.shift() - } +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) - [FLUSH] () { - do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]())) +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) - if (!this.buffer.length && !this[EOF]) - this.emit('drain') - } +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. - [FLUSHCHUNK] (chunk) { - return chunk ? (this.emit('data', chunk), this.flowing) : false - } +createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') - pipe (dest, opts) { - if (this[DESTROYED]) - return +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. - const ended = this[EMITTED_END] - opts = opts || {} - if (dest === process.stdout || dest === process.stderr) - opts.end = false - else - opts.end = opts.end !== false +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) - const p = { dest: dest, opts: opts, ondrain: _ => this[RESUME]() } - this.pipes.push(p) +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. - dest.on('drain', p.ondrain) - this[RESUME]() - // piping an ended stream ends immediately - if (ended && p.opts.end) - p.dest.end() - return dest - } +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. - addListener (ev, fn) { - return this.on(ev, fn) - } +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`) - on (ev, fn) { - try { - return super.on(ev, fn) - } finally { - if (ev === 'data' && !this.pipes.length && !this.flowing) - this[RESUME]() - else if (isEndish(ev) && this[EMITTED_END]) { - super.emit(ev) - this.removeAllListeners(ev) - } - } - } +createToken('FULL', `^${src[t.FULLPLAIN]}$`) - get emittedEnd () { - return this[EMITTED_END] - } +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`) - [MAYBE_EMIT_END] () { - if (!this[EMITTING_END] && - !this[EMITTED_END] && - !this[DESTROYED] && - this.buffer.length === 0 && - this[EOF]) { - this[EMITTING_END] = true - this.emit('end') - this.emit('prefinish') - this.emit('finish') - if (this[CLOSED]) - this.emit('close') - this[EMITTING_END] = false - } - } +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) - emit (ev, data) { - // error and close are only events allowed after calling destroy() - if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED]) - return - else if (ev === 'data') { - if (!data) - return +createToken('GTLT', '((?:<|>)?=?)') - if (this.pipes.length) - this.pipes.forEach(p => - p.dest.write(data) === false && this.pause()) - } else if (ev === 'end') { - // only actual end gets this treatment - if (this[EMITTED_END] === true) - return +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) - this[EMITTED_END] = true - this.readable = false +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`) - if (this[DECODER]) { - data = this[DECODER].end() - if (data) { - this.pipes.forEach(p => p.dest.write(data)) - super.emit('data', data) - } - } +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`) - this.pipes.forEach(p => { - p.dest.removeListener('drain', p.ondrain) - if (p.opts.end) - p.dest.end() - }) - } else if (ev === 'close') { - this[CLOSED] = true - // don't emit close before 'end' and 'finish' - if (!this[EMITTED_END] && !this[DESTROYED]) - return - } +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) - // TODO: replace with a spread operator when Node v4 support drops - const args = new Array(arguments.length) - args[0] = ev - args[1] = data - if (arguments.length > 2) { - for (let i = 2; i < arguments.length; i++) { - args[i] = arguments[i] - } - } +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCE', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:$|[^\\d])`) +createToken('COERCERTL', src[t.COERCE], true) - try { - return super.emit.apply(this, args) - } finally { - if (!isEndish(ev)) - this[MAYBE_EMIT_END]() - else - this.removeAllListeners(ev) - } - } +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)') - // const all = await stream.collect() - collect () { - const buf = [] - if (!this[OBJECTMODE]) - buf.dataLength = 0 - // set the promise first, in case an error is raised - // by triggering the flow here. - const p = this.promise() - this.on('data', c => { - buf.push(c) - if (!this[OBJECTMODE]) - buf.dataLength += c.length - }) - return p.then(() => buf) - } +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) +exports.tildeTrimReplace = '$1~' - // const data = await stream.concat() - concat () { - return this[OBJECTMODE] - ? Promise.reject(new Error('cannot concat in objectMode')) - : this.collect().then(buf => - this[OBJECTMODE] - ? Promise.reject(new Error('cannot concat in objectMode')) - : this[ENCODING] ? buf.join('') : Buffer.concat(buf, buf.dataLength)) - } +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) - // stream.promise().then(() => done, er => emitted error) - promise () { - return new Promise((resolve, reject) => { - this.on(DESTROYED, () => reject(new Error('stream destroyed'))) - this.on('end', () => resolve()) - this.on('error', er => reject(er)) - }) - } +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)') - // for await (let chunk of stream) - [ASYNCITERATOR] () { - const next = () => { - const res = this.read() - if (res !== null) - return Promise.resolve({ done: false, value: res }) +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) +exports.caretTrimReplace = '$1^' - if (this[EOF]) - return Promise.resolve({ done: true }) +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) - let resolve = null - let reject = null - const onerr = er => { - this.removeListener('data', ondata) - this.removeListener('end', onend) - reject(er) - } - const ondata = value => { - this.removeListener('error', onerr) - this.removeListener('end', onend) - this.pause() - resolve({ value: value, done: !!this[EOF] }) - } - const onend = () => { - this.removeListener('error', onerr) - this.removeListener('data', ondata) - resolve({ done: true }) - } - const ondestroy = () => onerr(new Error('stream destroyed')) - return new Promise((res, rej) => { - reject = rej - resolve = res - this.once(DESTROYED, ondestroy) - this.once('error', onerr) - this.once('end', onend) - this.once('data', ondata) - }) - } +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) - return { next } - } +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) +exports.comparatorTrimReplace = '$1$2$3' - // for (let chunk of stream) - [ITERATOR] () { - const next = () => { - const value = this.read() - const done = value === null - return { value, done } - } - return { next } - } +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`) - destroy (er) { - if (this[DESTROYED]) { - if (er) - this.emit('error', er) - else - this.emit(DESTROYED) - return this - } +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`) - this[DESTROYED] = true +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*') +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$') +createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$') - // throw away all buffered data, it's never coming out - this.buffer = new Yallist() - this[BUFFERLENGTH] = 0 - if (typeof this.close === 'function' && !this[CLOSED]) - this.close() +/***/ }), - if (er) - this.emit('error', er) - else // if no error to emit, still reject pending promises - this.emit(DESTROYED) +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/gtr.js": +/*!******************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/gtr.js ***! + \******************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - return this +// Determine if version is greater than all the versions possible in the range. +const outside = __webpack_require__(/*! ./outside */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/outside.js") +const gtr = (version, range, options) => outside(version, range, '>', options) +module.exports = gtr + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/intersects.js": +/*!*************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/intersects.js ***! + \*************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const Range = __webpack_require__(/*! ../classes/range */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js") +const intersects = (r1, r2, options) => { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} +module.exports = intersects + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/ltr.js": +/*!******************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/ltr.js ***! + \******************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const outside = __webpack_require__(/*! ./outside */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/outside.js") +// Determine if version is less than all the versions possible in the range +const ltr = (version, range, options) => outside(version, range, '<', options) +module.exports = ltr + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/max-satisfying.js": +/*!*****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/max-satisfying.js ***! + \*****************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const Range = __webpack_require__(/*! ../classes/range */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js") + +const maxSatisfying = (versions, range, options) => { + let max = null + let maxSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} +module.exports = maxSatisfying - static isStream (s) { - return !!s && (s instanceof Minipass || s instanceof Stream || - s instanceof EE && ( - typeof s.pipe === 'function' || // readable - (typeof s.write === 'function' && typeof s.end === 'function') // writable - )) + +/***/ }), + +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/min-satisfying.js": +/*!*****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/min-satisfying.js ***! + \*****************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const Range = __webpack_require__(/*! ../classes/range */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js") +const minSatisfying = (versions, range, options) => { + let min = null + let minSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min } +module.exports = minSatisfying /***/ }), -/***/ "./.yarn/cache/minizlib-npm-2.1.0-9531be52b3-6a811aaa3a.zip/node_modules/minizlib/constants.js": -/*!*****************************************************************************************************!*\ - !*** ./.yarn/cache/minizlib-npm-2.1.0-9531be52b3-6a811aaa3a.zip/node_modules/minizlib/constants.js ***! - \*****************************************************************************************************/ +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/min-version.js": +/*!**************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/min-version.js ***! + \**************************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// Update with any zlib constants that are added or changed in the future. -// Node v6 didn't export this, so we just hard code the version and rely -// on all the other hard-coded values from zlib v4736. When node v6 -// support drops, we can just export the realZlibConstants object. -const realZlibConstants = __webpack_require__(/*! zlib */ "zlib").constants || - /* istanbul ignore next */ { ZLIB_VERNUM: 4736 } +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const Range = __webpack_require__(/*! ../classes/range */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js") +const gt = __webpack_require__(/*! ../functions/gt */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gt.js") -module.exports = Object.freeze(Object.assign(Object.create(null), { - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - Z_MEM_ERROR: -4, - Z_BUF_ERROR: -5, - Z_VERSION_ERROR: -6, - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - DEFLATE: 1, - INFLATE: 2, - GZIP: 3, - GUNZIP: 4, - DEFLATERAW: 5, - INFLATERAW: 6, - UNZIP: 7, - BROTLI_DECODE: 8, - BROTLI_ENCODE: 9, - Z_MIN_WINDOWBITS: 8, - Z_MAX_WINDOWBITS: 15, - Z_DEFAULT_WINDOWBITS: 15, - Z_MIN_CHUNK: 64, - Z_MAX_CHUNK: Infinity, - Z_DEFAULT_CHUNK: 16384, - Z_MIN_MEMLEVEL: 1, - Z_MAX_MEMLEVEL: 9, - Z_DEFAULT_MEMLEVEL: 8, - Z_MIN_LEVEL: -1, - Z_MAX_LEVEL: 9, - Z_DEFAULT_LEVEL: -1, - BROTLI_OPERATION_PROCESS: 0, - BROTLI_OPERATION_FLUSH: 1, - BROTLI_OPERATION_FINISH: 2, - BROTLI_OPERATION_EMIT_METADATA: 3, - BROTLI_MODE_GENERIC: 0, - BROTLI_MODE_TEXT: 1, - BROTLI_MODE_FONT: 2, - BROTLI_DEFAULT_MODE: 0, - BROTLI_MIN_QUALITY: 0, - BROTLI_MAX_QUALITY: 11, - BROTLI_DEFAULT_QUALITY: 11, - BROTLI_MIN_WINDOW_BITS: 10, - BROTLI_MAX_WINDOW_BITS: 24, - BROTLI_LARGE_MAX_WINDOW_BITS: 30, - BROTLI_DEFAULT_WINDOW: 22, - BROTLI_MIN_INPUT_BLOCK_BITS: 16, - BROTLI_MAX_INPUT_BLOCK_BITS: 24, - BROTLI_PARAM_MODE: 0, - BROTLI_PARAM_QUALITY: 1, - BROTLI_PARAM_LGWIN: 2, - BROTLI_PARAM_LGBLOCK: 3, - BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4, - BROTLI_PARAM_SIZE_HINT: 5, - BROTLI_PARAM_LARGE_WINDOW: 6, - BROTLI_PARAM_NPOSTFIX: 7, - BROTLI_PARAM_NDIRECT: 8, - BROTLI_DECODER_RESULT_ERROR: 0, - BROTLI_DECODER_RESULT_SUCCESS: 1, - BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2, - BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3, - BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0, - BROTLI_DECODER_PARAM_LARGE_WINDOW: 1, - BROTLI_DECODER_NO_ERROR: 0, - BROTLI_DECODER_SUCCESS: 1, - BROTLI_DECODER_NEEDS_MORE_INPUT: 2, - BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3, - BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1, - BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2, - BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3, - BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4, - BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5, - BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6, - BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7, - BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8, - BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9, - BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10, - BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11, - BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12, - BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13, - BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14, - BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15, - BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16, - BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19, - BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20, - BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21, - BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22, - BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25, - BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26, - BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27, - BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30, - BROTLI_DECODER_ERROR_UNREACHABLE: -31, -}, realZlibConstants)) +const minVersion = (range, loose) => { + range = new Range(range, loose) + let minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } -/***/ }), + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } -/***/ "./.yarn/cache/minizlib-npm-2.1.0-9531be52b3-6a811aaa3a.zip/node_modules/minizlib/index.js": -/*!*************************************************************************************************!*\ - !*** ./.yarn/cache/minizlib-npm-2.1.0-9531be52b3-6a811aaa3a.zip/node_modules/minizlib/index.js ***! - \*************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + minver = null + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] -"use strict"; + let setMin = null + comparators.forEach((comparator) => { + // Clone to avoid manipulating the comparator's semver object. + const compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!setMin || gt(compver, setMin)) { + setMin = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error(`Unexpected operation: ${comparator.operator}`) + } + }) + if (setMin && (!minver || gt(minver, setMin))) { + minver = setMin + } + } + if (minver && range.test(minver)) { + return minver + } -const assert = __webpack_require__(/*! assert */ "assert") -const Buffer = __webpack_require__(/*! buffer */ "buffer").Buffer -const realZlib = __webpack_require__(/*! zlib */ "zlib") + return null +} +module.exports = minVersion -const constants = exports.constants = __webpack_require__(/*! ./constants.js */ "./.yarn/cache/minizlib-npm-2.1.0-9531be52b3-6a811aaa3a.zip/node_modules/minizlib/constants.js") -const Minipass = __webpack_require__(/*! minipass */ "./.yarn/cache/minipass-npm-3.1.1-b51d7e264d-cfcfd86adc.zip/node_modules/minipass/index.js") -const OriginalBufferConcat = Buffer.concat +/***/ }), -const _superWrite = Symbol('_superWrite') -class ZlibError extends Error { - constructor (err) { - super('zlib: ' + err.message) - this.code = err.code - this.errno = err.errno - /* istanbul ignore if */ - if (!this.code) - this.code = 'ZLIB_ERROR' +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/outside.js": +/*!**********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/outside.js ***! + \**********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - this.message = 'zlib: ' + err.message - Error.captureStackTrace(this, this.constructor) +const SemVer = __webpack_require__(/*! ../classes/semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/semver.js") +const Comparator = __webpack_require__(/*! ../classes/comparator */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/comparator.js") +const { ANY } = Comparator +const Range = __webpack_require__(/*! ../classes/range */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js") +const satisfies = __webpack_require__(/*! ../functions/satisfies */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/satisfies.js") +const gt = __webpack_require__(/*! ../functions/gt */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gt.js") +const lt = __webpack_require__(/*! ../functions/lt */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/lt.js") +const lte = __webpack_require__(/*! ../functions/lte */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/lte.js") +const gte = __webpack_require__(/*! ../functions/gte */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/gte.js") + +const outside = (version, range, hilo, options) => { + version = new SemVer(version, options) + range = new Range(range, options) + + let gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') } - get name () { - return 'ZlibError' + // If it satisfies the range it is not outside + if (satisfies(version, range, options)) { + return false } -} -// the Zlib class they all inherit from -// This thing manages the queue of requests, and returns -// true or false if there is anything in the queue when -// you call the .write() method. -const _opts = Symbol('opts') -const _flushFlag = Symbol('flushFlag') -const _finishFlushFlag = Symbol('finishFlushFlag') -const _fullFlushFlag = Symbol('fullFlushFlag') -const _handle = Symbol('handle') -const _onError = Symbol('onError') -const _sawError = Symbol('sawError') -const _level = Symbol('level') -const _strategy = Symbol('strategy') -const _ended = Symbol('ended') -const _defaultFullFlush = Symbol('_defaultFullFlush') + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. -class ZlibBase extends Minipass { - constructor (opts, mode) { - if (!opts || typeof opts !== 'object') - throw new TypeError('invalid options for ZlibBase constructor') + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] - super(opts) - this[_ended] = false - this[_opts] = opts + let high = null + let low = null - this[_flushFlag] = opts.flush - this[_finishFlushFlag] = opts.finishFlush - // this will throw if any options are invalid for the class selected - try { - this[_handle] = new realZlib[mode](opts) - } catch (er) { - // make sure that all errors get decorated properly - throw new ZlibError(er) - } + comparators.forEach((comparator) => { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) - this[_onError] = (err) => { - this[_sawError] = true - // there is no way to cleanly recover. - // continuing only obscures problems. - this.close() - this.emit('error', err) + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false } - this[_handle].on('error', er => this[_onError](new ZlibError(er))) - this.once('end', () => this.close) - } - - close () { - if (this[_handle]) { - this[_handle].close() - this[_handle] = null - this.emit('close') + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false } } + return true +} - reset () { - if (!this[_sawError]) { - assert(this[_handle], 'zlib binding closed') - return this[_handle].reset() - } - } +module.exports = outside - flush (flushFlag) { - if (this.ended) - return - if (typeof flushFlag !== 'number') - flushFlag = this[_fullFlushFlag] - this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag })) - } - - end (chunk, encoding, cb) { - if (chunk) - this.write(chunk, encoding) - this.flush(this[_finishFlushFlag]) - this[_ended] = true - return super.end(null, null, cb) - } - - get ended () { - return this[_ended] - } - - write (chunk, encoding, cb) { - // process the chunk using the sync process - // then super.write() all the outputted chunks - if (typeof encoding === 'function') - cb = encoding, encoding = 'utf8' - - if (typeof chunk === 'string') - chunk = Buffer.from(chunk, encoding) +/***/ }), - if (this[_sawError]) - return - assert(this[_handle], 'zlib binding closed') +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/simplify.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/simplify.js ***! + \***********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - // _processChunk tries to .close() the native handle after it's done, so we - // intercept that by temporarily making it a no-op. - const nativeHandle = this[_handle]._handle - const originalNativeClose = nativeHandle.close - nativeHandle.close = () => {} - const originalClose = this[_handle].close - this[_handle].close = () => {} - // It also calls `Buffer.concat()` at the end, which may be convenient - // for some, but which we are not interested in as it slows us down. - Buffer.concat = (args) => args - let result - try { - const flushFlag = typeof chunk[_flushFlag] === 'number' - ? chunk[_flushFlag] : this[_flushFlag] - result = this[_handle]._processChunk(chunk, flushFlag) - // if we don't throw, reset it back how it was - Buffer.concat = OriginalBufferConcat - } catch (err) { - // or if we do, put Buffer.concat() back before we emit error - // Error events call into user code, which may call Buffer.concat() - Buffer.concat = OriginalBufferConcat - this[_onError](new ZlibError(err)) - } finally { - if (this[_handle]) { - // Core zlib resets `_handle` to null after attempting to close the - // native handle. Our no-op handler prevented actual closure, but we - // need to restore the `._handle` property. - this[_handle]._handle = nativeHandle - nativeHandle.close = originalNativeClose - this[_handle].close = originalClose - // `_processChunk()` adds an 'error' listener. If we don't remove it - // after each call, these handlers start piling up. - this[_handle].removeAllListeners('error') +// given a set of versions and a range, create a "simplified" range +// that includes the same versions that the original range does +// If the original range is shorter than the simplified one, return that. +const satisfies = __webpack_require__(/*! ../functions/satisfies.js */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/satisfies.js") +const compare = __webpack_require__(/*! ../functions/compare.js */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js") +module.exports = (versions, range, options) => { + const set = [] + let first = null + let prev = null + const v = versions.sort((a, b) => compare(a, b, options)) + for (const version of v) { + const included = satisfies(version, range, options) + if (included) { + prev = version + if (!first) { + first = version } - } - - let writeReturn - if (result) { - if (Array.isArray(result) && result.length > 0) { - // The first buffer is always `handle._outBuffer`, which would be - // re-used for later invocations; so, we always have to copy that one. - writeReturn = this[_superWrite](Buffer.from(result[0])) - for (let i = 1; i < result.length; i++) { - writeReturn = this[_superWrite](result[i]) - } - } else { - writeReturn = this[_superWrite](Buffer.from(result)) + } else { + if (prev) { + set.push([first, prev]) } + prev = null + first = null } - - if (cb) - cb() - return writeReturn + } + if (first) { + set.push([first, null]) } - [_superWrite] (data) { - return super.write(data) + const ranges = [] + for (const [min, max] of set) { + if (min === max) { + ranges.push(min) + } else if (!max && min === v[0]) { + ranges.push('*') + } else if (!max) { + ranges.push(`>=${min}`) + } else if (min === v[0]) { + ranges.push(`<=${max}`) + } else { + ranges.push(`${min} - ${max}`) + } } + const simplified = ranges.join(' || ') + const original = typeof range.raw === 'string' ? range.raw : String(range) + return simplified.length < original.length ? simplified : range } -class Zlib extends ZlibBase { - constructor (opts, mode) { - opts = opts || {} - opts.flush = opts.flush || constants.Z_NO_FLUSH - opts.finishFlush = opts.finishFlush || constants.Z_FINISH - super(opts, mode) +/***/ }), - this[_fullFlushFlag] = constants.Z_FULL_FLUSH - this[_level] = opts.level - this[_strategy] = opts.strategy - } +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/subset.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/subset.js ***! + \*********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - params (level, strategy) { - if (this[_sawError]) - return +const Range = __webpack_require__(/*! ../classes/range.js */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js") +const Comparator = __webpack_require__(/*! ../classes/comparator.js */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/comparator.js") +const { ANY } = Comparator +const satisfies = __webpack_require__(/*! ../functions/satisfies.js */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/satisfies.js") +const compare = __webpack_require__(/*! ../functions/compare.js */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/functions/compare.js") - if (!this[_handle]) - throw new Error('cannot switch params when binding is closed') +// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: +// - Every simple range `r1, r2, ...` is a null set, OR +// - Every simple range `r1, r2, ...` which is not a null set is a subset of +// some `R1, R2, ...` +// +// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: +// - If c is only the ANY comparator +// - If C is only the ANY comparator, return true +// - Else if in prerelease mode, return false +// - else replace c with `[>=0.0.0]` +// - If C is only the ANY comparator +// - if in prerelease mode, return true +// - else replace C with `[>=0.0.0]` +// - Let EQ be the set of = comparators in c +// - If EQ is more than one, return true (null set) +// - Let GT be the highest > or >= comparator in c +// - Let LT be the lowest < or <= comparator in c +// - If GT and LT, and GT.semver > LT.semver, return true (null set) +// - If any C is a = range, and GT or LT are set, return false +// - If EQ +// - If GT, and EQ does not satisfy GT, return true (null set) +// - If LT, and EQ does not satisfy LT, return true (null set) +// - If EQ satisfies every C, return true +// - Else return false +// - If GT +// - If GT.semver is lower than any > or >= comp in C, return false +// - If GT is >=, and GT.semver does not satisfy every C, return false +// - If GT.semver has a prerelease, and not in prerelease mode +// - If no C has a prerelease and the GT.semver tuple, return false +// - If LT +// - If LT.semver is greater than any < or <= comp in C, return false +// - If LT is <=, and LT.semver does not satisfy every C, return false +// - If GT.semver has a prerelease, and not in prerelease mode +// - If no C has a prerelease and the LT.semver tuple, return false +// - Else return true + +const subset = (sub, dom, options = {}) => { + if (sub === dom) { + return true + } - // no way to test this without also not supporting params at all - /* istanbul ignore if */ - if (!this[_handle].params) - throw new Error('not supported in this implementation') + sub = new Range(sub, options) + dom = new Range(dom, options) + let sawNonNull = false - if (this[_level] !== level || this[_strategy] !== strategy) { - this.flush(constants.Z_SYNC_FLUSH) - assert(this[_handle], 'zlib binding closed') - // .params() calls .flush(), but the latter is always async in the - // core zlib. We override .flush() temporarily to intercept that and - // flush synchronously. - const origFlush = this[_handle].flush - this[_handle].flush = (flushFlag, cb) => { - this.flush(flushFlag) - cb() - } - try { - this[_handle].params(level, strategy) - } finally { - this[_handle].flush = origFlush - } - /* istanbul ignore else */ - if (this[_handle]) { - this[_level] = level - this[_strategy] = strategy + OUTER: for (const simpleSub of sub.set) { + for (const simpleDom of dom.set) { + const isSub = simpleSubset(simpleSub, simpleDom, options) + sawNonNull = sawNonNull || isSub !== null + if (isSub) { + continue OUTER } } + // the null set is a subset of everything, but null simple ranges in + // a complex range should be ignored. so if we saw a non-null range, + // then we know this isn't a subset, but if EVERY simple range was null, + // then it is a subset. + if (sawNonNull) { + return false + } } + return true } -// minimal 2-byte header -class Deflate extends Zlib { - constructor (opts) { - super(opts, 'Deflate') +const simpleSubset = (sub, dom, options) => { + if (sub === dom) { + return true } -} -class Inflate extends Zlib { - constructor (opts) { - super(opts, 'Inflate') + if (sub.length === 1 && sub[0].semver === ANY) { + if (dom.length === 1 && dom[0].semver === ANY) { + return true + } else if (options.includePrerelease) { + sub = [new Comparator('>=0.0.0-0')] + } else { + sub = [new Comparator('>=0.0.0')] + } } -} -// gzip - bigger header, same deflate compression -const _portable = Symbol('_portable') -class Gzip extends Zlib { - constructor (opts) { - super(opts, 'Gzip') - this[_portable] = opts && !!opts.portable + if (dom.length === 1 && dom[0].semver === ANY) { + if (options.includePrerelease) { + return true + } else { + dom = [new Comparator('>=0.0.0')] + } } - [_superWrite] (data) { - if (!this[_portable]) - return super[_superWrite](data) - - // we'll always get the header emitted in one first chunk - // overwrite the OS indicator byte with 0xFF - this[_portable] = false - data[9] = 255 - return super[_superWrite](data) + const eqSet = new Set() + let gt, lt + for (const c of sub) { + if (c.operator === '>' || c.operator === '>=') { + gt = higherGT(gt, c, options) + } else if (c.operator === '<' || c.operator === '<=') { + lt = lowerLT(lt, c, options) + } else { + eqSet.add(c.semver) + } } -} -class Gunzip extends Zlib { - constructor (opts) { - super(opts, 'Gunzip') + if (eqSet.size > 1) { + return null } -} -// raw - no header -class DeflateRaw extends Zlib { - constructor (opts) { - super(opts, 'DeflateRaw') + let gtltComp + if (gt && lt) { + gtltComp = compare(gt.semver, lt.semver, options) + if (gtltComp > 0) { + return null + } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) { + return null + } } -} -class InflateRaw extends Zlib { - constructor (opts) { - super(opts, 'InflateRaw') - } -} + // will iterate one or zero times + for (const eq of eqSet) { + if (gt && !satisfies(eq, String(gt), options)) { + return null + } -// auto-detect header. -class Unzip extends Zlib { - constructor (opts) { - super(opts, 'Unzip') - } -} + if (lt && !satisfies(eq, String(lt), options)) { + return null + } -class Brotli extends ZlibBase { - constructor (opts, mode) { - opts = opts || {} + for (const c of dom) { + if (!satisfies(eq, String(c), options)) { + return false + } + } - opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS - opts.finishFlush = opts.finishFlush || constants.BROTLI_OPERATION_FINISH + return true + } - super(opts, mode) + let higher, lower + let hasDomLT, hasDomGT + // if the subset has a prerelease, we need a comparator in the superset + // with the same tuple and a prerelease, or it's not a subset + let needDomLTPre = lt && + !options.includePrerelease && + lt.semver.prerelease.length ? lt.semver : false + let needDomGTPre = gt && + !options.includePrerelease && + gt.semver.prerelease.length ? gt.semver : false + // exception: <1.2.3-0 is the same as <1.2.3 + if (needDomLTPre && needDomLTPre.prerelease.length === 1 && + lt.operator === '<' && needDomLTPre.prerelease[0] === 0) { + needDomLTPre = false + } + + for (const c of dom) { + hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' + hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' + if (gt) { + if (needDomGTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && + c.semver.major === needDomGTPre.major && + c.semver.minor === needDomGTPre.minor && + c.semver.patch === needDomGTPre.patch) { + needDomGTPre = false + } + } + if (c.operator === '>' || c.operator === '>=') { + higher = higherGT(gt, c, options) + if (higher === c && higher !== gt) { + return false + } + } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) { + return false + } + } + if (lt) { + if (needDomLTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && + c.semver.major === needDomLTPre.major && + c.semver.minor === needDomLTPre.minor && + c.semver.patch === needDomLTPre.patch) { + needDomLTPre = false + } + } + if (c.operator === '<' || c.operator === '<=') { + lower = lowerLT(lt, c, options) + if (lower === c && lower !== lt) { + return false + } + } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) { + return false + } + } + if (!c.operator && (lt || gt) && gtltComp !== 0) { + return false + } + } - this[_fullFlushFlag] = constants.BROTLI_OPERATION_FLUSH + // if there was a < or >, and nothing in the dom, then must be false + // UNLESS it was limited by another range in the other direction. + // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 + if (gt && hasDomLT && !lt && gtltComp !== 0) { + return false } -} -class BrotliCompress extends Brotli { - constructor (opts) { - super(opts, 'BrotliCompress') + if (lt && hasDomGT && !gt && gtltComp !== 0) { + return false + } + + // we needed a prerelease range in a specific tuple, but didn't get one + // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0, + // because it includes prereleases in the 1.2.3 tuple + if (needDomGTPre || needDomLTPre) { + return false } + + return true } -class BrotliDecompress extends Brotli { - constructor (opts) { - super(opts, 'BrotliDecompress') +// >=1.2.3 is lower than >1.2.3 +const higherGT = (a, b, options) => { + if (!a) { + return b } + const comp = compare(a.semver, b.semver, options) + return comp > 0 ? a + : comp < 0 ? b + : b.operator === '>' && a.operator === '>=' ? b + : a } -exports.Deflate = Deflate -exports.Inflate = Inflate -exports.Gzip = Gzip -exports.Gunzip = Gunzip -exports.DeflateRaw = DeflateRaw -exports.InflateRaw = InflateRaw -exports.Unzip = Unzip -/* istanbul ignore else */ -if (typeof realZlib.BrotliCompress === 'function') { - exports.BrotliCompress = BrotliCompress - exports.BrotliDecompress = BrotliDecompress -} else { - exports.BrotliCompress = exports.BrotliDecompress = class { - constructor () { - throw new Error('Brotli is not supported in this version of Node.js') - } +// <=1.2.3 is higher than <1.2.3 +const lowerLT = (a, b, options) => { + if (!a) { + return b } + const comp = compare(a.semver, b.semver, options) + return comp < 0 ? a + : comp > 0 ? b + : b.operator === '<' && a.operator === '<=' ? b + : a } +module.exports = subset + /***/ }), -/***/ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/index.js": -/*!*********************************************************************************************!*\ - !*** ./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/index.js ***! - \*********************************************************************************************/ +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/to-comparators.js": +/*!*****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/to-comparators.js ***! + \*****************************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const optsArg = __webpack_require__(/*! ./lib/opts-arg.js */ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/opts-arg.js") -const pathArg = __webpack_require__(/*! ./lib/path-arg.js */ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/path-arg.js") +const Range = __webpack_require__(/*! ../classes/range */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js") -const {mkdirpNative, mkdirpNativeSync} = __webpack_require__(/*! ./lib/mkdirp-native.js */ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/mkdirp-native.js") -const {mkdirpManual, mkdirpManualSync} = __webpack_require__(/*! ./lib/mkdirp-manual.js */ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/mkdirp-manual.js") -const {useNative, useNativeSync} = __webpack_require__(/*! ./lib/use-native.js */ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/use-native.js") +// Mostly just for testing and legacy API reasons +const toComparators = (range, options) => + new Range(range, options).set + .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) +module.exports = toComparators -const mkdirp = (path, opts) => { - path = pathArg(path) - opts = optsArg(opts) - return useNative(opts) - ? mkdirpNative(path, opts) - : mkdirpManual(path, opts) -} -const mkdirpSync = (path, opts) => { - path = pathArg(path) - opts = optsArg(opts) - return useNativeSync(opts) - ? mkdirpNativeSync(path, opts) - : mkdirpManualSync(path, opts) -} +/***/ }), -mkdirp.sync = mkdirpSync -mkdirp.native = (path, opts) => mkdirpNative(pathArg(path), optsArg(opts)) -mkdirp.manual = (path, opts) => mkdirpManual(pathArg(path), optsArg(opts)) -mkdirp.nativeSync = (path, opts) => mkdirpNativeSync(pathArg(path), optsArg(opts)) -mkdirp.manualSync = (path, opts) => mkdirpManualSync(pathArg(path), optsArg(opts)) +/***/ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/valid.js": +/*!********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/ranges/valid.js ***! + \********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -module.exports = mkdirp +const Range = __webpack_require__(/*! ../classes/range */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/classes/range.js") +const validRange = (range, options) => { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} +module.exports = validRange /***/ }), -/***/ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/find-made.js": -/*!*****************************************************************************************************!*\ - !*** ./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/find-made.js ***! - \*****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const {dirname} = __webpack_require__(/*! path */ "path") - -const findMade = (opts, parent, path = undefined) => { - // we never want the 'made' return value to be a root directory - if (path === parent) - return Promise.resolve() +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/index.js": +/*!********************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/index.js ***! + \********************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - return opts.statAsync(parent).then( - st => st.isDirectory() ? path : undefined, // will fail later - er => er.code === 'ENOENT' - ? findMade(opts, dirname(parent), parent) - : undefined - ) -} +"use strict"; -const findMadeSync = (opts, parent, path = undefined) => { - if (path === parent) - return undefined - try { - return opts.statSync(parent).isDirectory() ? path : undefined - } catch (er) { - return er.code === 'ENOENT' - ? findMadeSync(opts, dirname(parent), parent) - : undefined - } -} +// high-level commands +exports.c = exports.create = __webpack_require__(/*! ./lib/create.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/create.js") +exports.r = exports.replace = __webpack_require__(/*! ./lib/replace.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/replace.js") +exports.t = exports.list = __webpack_require__(/*! ./lib/list.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/list.js") +exports.u = exports.update = __webpack_require__(/*! ./lib/update.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/update.js") +exports.x = exports.extract = __webpack_require__(/*! ./lib/extract.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/extract.js") -module.exports = {findMade, findMadeSync} +// classes +exports.Pack = __webpack_require__(/*! ./lib/pack.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/pack.js") +exports.Unpack = __webpack_require__(/*! ./lib/unpack.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/unpack.js") +exports.Parse = __webpack_require__(/*! ./lib/parse.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/parse.js") +exports.ReadEntry = __webpack_require__(/*! ./lib/read-entry.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/read-entry.js") +exports.WriteEntry = __webpack_require__(/*! ./lib/write-entry.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/write-entry.js") +exports.Header = __webpack_require__(/*! ./lib/header.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/header.js") +exports.Pax = __webpack_require__(/*! ./lib/pax.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/pax.js") +exports.types = __webpack_require__(/*! ./lib/types.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/types.js") /***/ }), -/***/ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/mkdirp-manual.js": -/*!*********************************************************************************************************!*\ - !*** ./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/mkdirp-manual.js ***! - \*********************************************************************************************************/ +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/create.js": +/*!*************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/create.js ***! + \*************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const {dirname} = __webpack_require__(/*! path */ "path") +"use strict"; -const mkdirpManual = (path, opts, made) => { - opts.recursive = false - const parent = dirname(path) - if (parent === path) { - return opts.mkdirAsync(path, opts).catch(er => { - // swallowed by recursive implementation on posix systems - // any other error is a failure - if (er.code !== 'EISDIR') - throw er - }) - } - return opts.mkdirAsync(path, opts).then(() => made || path, er => { - if (er.code === 'ENOENT') - return mkdirpManual(parent, opts) - .then(made => mkdirpManual(path, opts, made)) - if (er.code !== 'EEXIST' && er.code !== 'EROFS') - throw er - return opts.statAsync(path).then(st => { - if (st.isDirectory()) - return made - else - throw er - }, () => { throw er }) - }) -} +// tar -c +const hlo = __webpack_require__(/*! ./high-level-opt.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/high-level-opt.js") -const mkdirpManualSync = (path, opts, made) => { - const parent = dirname(path) - opts.recursive = false +const Pack = __webpack_require__(/*! ./pack.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/pack.js") +const fsm = __webpack_require__(/*! fs-minipass */ "../../../.yarn/berry/cache/fs-minipass-npm-2.1.0-501ef87306-9.zip/node_modules/fs-minipass/index.js") +const t = __webpack_require__(/*! ./list.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/list.js") +const path = __webpack_require__(/*! path */ "path") - if (parent === path) { - try { - return opts.mkdirSync(path, opts) - } catch (er) { - // swallowed by recursive implementation on posix systems - // any other error is a failure - if (er.code !== 'EISDIR') - throw er - else - return - } - } +module.exports = (opt_, files, cb) => { + if (typeof files === 'function') + cb = files - try { - opts.mkdirSync(path, opts) - return made || path - } catch (er) { - if (er.code === 'ENOENT') - return mkdirpManualSync(path, opts, mkdirpManualSync(parent, opts, made)) - if (er.code !== 'EEXIST' && er.code !== 'EROFS') - throw er - try { - if (!opts.statSync(path).isDirectory()) - throw er - } catch (_) { - throw er - } - } -} + if (Array.isArray(opt_)) + files = opt_, opt_ = {} -module.exports = {mkdirpManual, mkdirpManualSync} + if (!files || !Array.isArray(files) || !files.length) + throw new TypeError('no files or directories specified') + files = Array.from(files) -/***/ }), + const opt = hlo(opt_) -/***/ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/mkdirp-native.js": -/*!*********************************************************************************************************!*\ - !*** ./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/mkdirp-native.js ***! - \*********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + if (opt.sync && typeof cb === 'function') + throw new TypeError('callback not supported for sync tar functions') -const {dirname} = __webpack_require__(/*! path */ "path") -const {findMade, findMadeSync} = __webpack_require__(/*! ./find-made.js */ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/find-made.js") -const {mkdirpManual, mkdirpManualSync} = __webpack_require__(/*! ./mkdirp-manual.js */ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/mkdirp-manual.js") + if (!opt.file && typeof cb === 'function') + throw new TypeError('callback only supported with file option') -const mkdirpNative = (path, opts) => { - opts.recursive = true - const parent = dirname(path) - if (parent === path) - return opts.mkdirAsync(path, opts) + return opt.file && opt.sync ? createFileSync(opt, files) + : opt.file ? createFile(opt, files, cb) + : opt.sync ? createSync(opt, files) + : create(opt, files) +} - return findMade(opts, path).then(made => - opts.mkdirAsync(path, opts).then(() => made) - .catch(er => { - if (er.code === 'ENOENT') - return mkdirpManual(path, opts) - else - throw er - })) +const createFileSync = (opt, files) => { + const p = new Pack.Sync(opt) + const stream = new fsm.WriteStreamSync(opt.file, { + mode: opt.mode || 0o666, + }) + p.pipe(stream) + addFilesSync(p, files) } -const mkdirpNativeSync = (path, opts) => { - opts.recursive = true - const parent = dirname(path) - if (parent === path) - return opts.mkdirSync(path, opts) +const createFile = (opt, files, cb) => { + const p = new Pack(opt) + const stream = new fsm.WriteStream(opt.file, { + mode: opt.mode || 0o666, + }) + p.pipe(stream) - const made = findMadeSync(opts, path) - try { - opts.mkdirSync(path, opts) - return made - } catch (er) { - if (er.code === 'ENOENT') - return mkdirpManualSync(path, opts) - else - throw er + const promise = new Promise((res, rej) => { + stream.on('error', rej) + stream.on('close', res) + p.on('error', rej) + }) + + addFilesAsync(p, files) + + return cb ? promise.then(cb, cb) : promise +} + +const addFilesSync = (p, files) => { + files.forEach(file => { + if (file.charAt(0) === '@') { + t({ + file: path.resolve(p.cwd, file.substr(1)), + sync: true, + noResume: true, + onentry: entry => p.add(entry), + }) + } else + p.add(file) + }) + p.end() +} + +const addFilesAsync = (p, files) => { + while (files.length) { + const file = files.shift() + if (file.charAt(0) === '@') { + return t({ + file: path.resolve(p.cwd, file.substr(1)), + noResume: true, + onentry: entry => p.add(entry), + }).then(_ => addFilesAsync(p, files)) + } else + p.add(file) } + p.end() } -module.exports = {mkdirpNative, mkdirpNativeSync} +const createSync = (opt, files) => { + const p = new Pack.Sync(opt) + addFilesSync(p, files) + return p +} + +const create = (opt, files) => { + const p = new Pack(opt) + addFilesAsync(p, files) + return p +} /***/ }), -/***/ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/opts-arg.js": -/*!****************************************************************************************************!*\ - !*** ./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/opts-arg.js ***! - \****************************************************************************************************/ +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/extract.js": +/*!**************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/extract.js ***! + \**************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const { promisify } = __webpack_require__(/*! util */ "util") +"use strict"; + + +// tar -x +const hlo = __webpack_require__(/*! ./high-level-opt.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/high-level-opt.js") +const Unpack = __webpack_require__(/*! ./unpack.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/unpack.js") const fs = __webpack_require__(/*! fs */ "fs") -const optsArg = opts => { - if (!opts) - opts = { mode: 0o777 & (~process.umask()), fs } - else if (typeof opts === 'object') - opts = { mode: 0o777 & (~process.umask()), fs, ...opts } - else if (typeof opts === 'number') - opts = { mode: opts, fs } - else if (typeof opts === 'string') - opts = { mode: parseInt(opts, 8), fs } +const fsm = __webpack_require__(/*! fs-minipass */ "../../../.yarn/berry/cache/fs-minipass-npm-2.1.0-501ef87306-9.zip/node_modules/fs-minipass/index.js") +const path = __webpack_require__(/*! path */ "path") +const stripSlash = __webpack_require__(/*! ./strip-trailing-slashes.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-trailing-slashes.js") + +module.exports = (opt_, files, cb) => { + if (typeof opt_ === 'function') + cb = opt_, files = null, opt_ = {} + else if (Array.isArray(opt_)) + files = opt_, opt_ = {} + + if (typeof files === 'function') + cb = files, files = null + + if (!files) + files = [] else - throw new TypeError('invalid options argument') + files = Array.from(files) - opts.mkdir = opts.mkdir || opts.fs.mkdir || fs.mkdir - opts.mkdirAsync = promisify(opts.mkdir) - opts.stat = opts.stat || opts.fs.stat || fs.stat - opts.statAsync = promisify(opts.stat) - opts.statSync = opts.statSync || opts.fs.statSync || fs.statSync - opts.mkdirSync = opts.mkdirSync || opts.fs.mkdirSync || fs.mkdirSync - return opts -} -module.exports = optsArg + const opt = hlo(opt_) + if (opt.sync && typeof cb === 'function') + throw new TypeError('callback not supported for sync tar functions') -/***/ }), + if (!opt.file && typeof cb === 'function') + throw new TypeError('callback only supported with file option') -/***/ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/path-arg.js": -/*!****************************************************************************************************!*\ - !*** ./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/path-arg.js ***! - \****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + if (files.length) + filesFilter(opt, files) -const platform = process.env.__TESTING_MKDIRP_PLATFORM__ || process.platform -const { resolve, parse } = __webpack_require__(/*! path */ "path") -const pathArg = path => { - if (/\0/.test(path)) { - // simulate same failure that node raises - throw Object.assign( - new TypeError('path must be a string without null bytes'), - { - path, - code: 'ERR_INVALID_ARG_VALUE', - } - ) - } + return opt.file && opt.sync ? extractFileSync(opt) + : opt.file ? extractFile(opt, cb) + : opt.sync ? extractSync(opt) + : extract(opt) +} - path = resolve(path) - if (platform === 'win32') { - const badWinChars = /[*|"<>?:]/ - const {root} = parse(path) - if (badWinChars.test(path.substr(root.length))) { - throw Object.assign(new Error('Illegal characters in path.'), { - path, - code: 'EINVAL', - }) - } +// construct a filter that limits the file entries listed +// include child entries if a dir is included +const filesFilter = (opt, files) => { + const map = new Map(files.map(f => [stripSlash(f), true])) + const filter = opt.filter + + const mapHas = (file, r) => { + const root = r || path.parse(file).root || '.' + const ret = file === root ? false + : map.has(file) ? map.get(file) + : mapHas(path.dirname(file), root) + + map.set(file, ret) + return ret } - return path + opt.filter = filter + ? (file, entry) => filter(file, entry) && mapHas(stripSlash(file)) + : file => mapHas(stripSlash(file)) } -module.exports = pathArg +const extractFileSync = opt => { + const u = new Unpack.Sync(opt) -/***/ }), + const file = opt.file + const stat = fs.statSync(file) + // This trades a zero-byte read() syscall for a stat + // However, it will usually result in less memory allocation + const readSize = opt.maxReadSize || 16 * 1024 * 1024 + const stream = new fsm.ReadStreamSync(file, { + readSize: readSize, + size: stat.size, + }) + stream.pipe(u) +} -/***/ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/use-native.js": -/*!******************************************************************************************************!*\ - !*** ./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/lib/use-native.js ***! - \******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +const extractFile = (opt, cb) => { + const u = new Unpack(opt) + const readSize = opt.maxReadSize || 16 * 1024 * 1024 -const fs = __webpack_require__(/*! fs */ "fs") + const file = opt.file + const p = new Promise((resolve, reject) => { + u.on('error', reject) + u.on('close', resolve) -const version = process.env.__TESTING_MKDIRP_NODE_VERSION__ || process.version -const versArr = version.replace(/^v/, '').split('.') -const hasNative = +versArr[0] > 10 || +versArr[0] === 10 && +versArr[1] >= 12 + // This trades a zero-byte read() syscall for a stat + // However, it will usually result in less memory allocation + fs.stat(file, (er, stat) => { + if (er) + reject(er) + else { + const stream = new fsm.ReadStream(file, { + readSize: readSize, + size: stat.size, + }) + stream.on('error', reject) + stream.pipe(u) + } + }) + }) + return cb ? p.then(cb, cb) : p +} -const useNative = !hasNative ? () => false : opts => opts.mkdir === fs.mkdir -const useNativeSync = !hasNative ? () => false : opts => opts.mkdirSync === fs.mkdirSync +const extractSync = opt => new Unpack.Sync(opt) -module.exports = {useNative, useNativeSync} +const extract = opt => new Unpack(opt) /***/ }), -/***/ "./.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip/node_modules/ms/index.js": -/*!*************************************************************************************!*\ - !*** ./.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip/node_modules/ms/index.js ***! - \*************************************************************************************/ -/***/ ((module) => { +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/get-write-flag.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/get-write-flag.js ***! + \*********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Helpers. - */ +// Get the appropriate flag to use for creating files +// We use fmap on Windows platforms for files less than +// 512kb. This is a fairly low limit, but avoids making +// things slower in some cases. Since most of what this +// library is used for is extracting tarballs of many +// relatively small files in npm packages and the like, +// it can be a big boost on Windows platforms. +// Only supported in Node v12.9.0 and above. +const platform = process.env.__FAKE_PLATFORM__ || process.platform +const isWindows = platform === 'win32' +const fs = global.__FAKE_TESTING_FS__ || __webpack_require__(/*! fs */ "fs") -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var w = d * 7; -var y = d * 365.25; +/* istanbul ignore next */ +const { O_CREAT, O_TRUNC, O_WRONLY, UV_FS_O_FILEMAP = 0 } = fs.constants -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ +const fMapEnabled = isWindows && !!UV_FS_O_FILEMAP +const fMapLimit = 512 * 1024 +const fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY +module.exports = !fMapEnabled ? () => 'w' + : size => size < fMapLimit ? fMapFlag : 'w' -module.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ +/***/ }), -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'weeks': - case 'week': - case 'w': - return n * w; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/header.js": +/*!*************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/header.js ***! + \*************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ +"use strict"; -function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + 'd'; - } - if (msAbs >= h) { - return Math.round(ms / h) + 'h'; - } - if (msAbs >= m) { - return Math.round(ms / m) + 'm'; - } - if (msAbs >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} +// parse a 512-byte header block to a data object, or vice-versa +// encode returns `true` if a pax extended header is needed, because +// the data could not be faithfully encoded in a simple header. +// (Also, check header.needPax to see if it needs a pax header.) -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ +const types = __webpack_require__(/*! ./types.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/types.js") +const pathModule = (__webpack_require__(/*! path */ "path").posix) +const large = __webpack_require__(/*! ./large-numbers.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/large-numbers.js") -function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural(ms, msAbs, d, 'day'); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, 'hour'); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, 'minute'); - } - if (msAbs >= s) { - return plural(ms, msAbs, s, 'second'); +const SLURP = Symbol('slurp') +const TYPE = Symbol('type') + +class Header { + constructor (data, off, ex, gex) { + this.cksumValid = false + this.needPax = false + this.nullBlock = false + + this.block = null + this.path = null + this.mode = null + this.uid = null + this.gid = null + this.size = null + this.mtime = null + this.cksum = null + this[TYPE] = '0' + this.linkpath = null + this.uname = null + this.gname = null + this.devmaj = 0 + this.devmin = 0 + this.atime = null + this.ctime = null + + if (Buffer.isBuffer(data)) + this.decode(data, off || 0, ex, gex) + else if (data) + this.set(data) } - return ms + ' ms'; -} -/** - * Pluralization helper. - */ + decode (buf, off, ex, gex) { + if (!off) + off = 0 -function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); -} + if (!buf || !(buf.length >= off + 512)) + throw new Error('need 512 bytes for header') + this.path = decString(buf, off, 100) + this.mode = decNumber(buf, off + 100, 8) + this.uid = decNumber(buf, off + 108, 8) + this.gid = decNumber(buf, off + 116, 8) + this.size = decNumber(buf, off + 124, 12) + this.mtime = decDate(buf, off + 136, 12) + this.cksum = decNumber(buf, off + 148, 12) -/***/ }), + // if we have extended or global extended headers, apply them now + // See https://github.com/npm/node-tar/pull/187 + this[SLURP](ex) + this[SLURP](gex, true) -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/comparator.js": -/*!**********************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/comparator.js ***! - \**********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + // old tar versions marked dirs as a file with a trailing / + this[TYPE] = decString(buf, off + 156, 1) + if (this[TYPE] === '') + this[TYPE] = '0' + if (this[TYPE] === '0' && this.path.substr(-1) === '/') + this[TYPE] = '5' -const ANY = Symbol('SemVer ANY') -// hoisted class for cyclic dependency -class Comparator { - static get ANY () { - return ANY - } - constructor (comp, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } + // tar implementations sometimes incorrectly put the stat(dir).size + // as the size in the tarball, even though Directory entries are + // not able to have any body at all. In the very rare chance that + // it actually DOES have a body, we weren't going to do anything with + // it anyway, and it'll just be a warning about an invalid header. + if (this[TYPE] === '5') + this.size = 0 - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp + this.linkpath = decString(buf, off + 157, 100) + if (buf.slice(off + 257, off + 265).toString() === 'ustar\u000000') { + this.uname = decString(buf, off + 265, 32) + this.gname = decString(buf, off + 297, 32) + this.devmaj = decNumber(buf, off + 329, 8) + this.devmin = decNumber(buf, off + 337, 8) + if (buf[off + 475] !== 0) { + // definitely a prefix, definitely >130 chars. + const prefix = decString(buf, off + 345, 155) + this.path = prefix + '/' + this.path } else { - comp = comp.value + const prefix = decString(buf, off + 345, 130) + if (prefix) + this.path = prefix + '/' + this.path + this.atime = decDate(buf, off + 476, 12) + this.ctime = decDate(buf, off + 488, 12) } } - debug('comparator', comp, options) - this.options = options - this.loose = !!options.loose - this.parse(comp) + let sum = 8 * 0x20 + for (let i = off; i < off + 148; i++) + sum += buf[i] - if (this.semver === ANY) { - this.value = '' - } else { - this.value = this.operator + this.semver.version - } + for (let i = off + 156; i < off + 512; i++) + sum += buf[i] - debug('comp', this) + this.cksumValid = sum === this.cksum + if (this.cksum === null && sum === 8 * 0x20) + this.nullBlock = true } - parse (comp) { - const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - const m = comp.match(r) - - if (!m) { - throw new TypeError(`Invalid comparator: ${comp}`) + [SLURP] (ex, global) { + for (const k in ex) { + // we slurp in everything except for the path attribute in + // a global extended header, because that's weird. + if (ex[k] !== null && ex[k] !== undefined && + !(global && k === 'path')) + this[k] = ex[k] } + } - this.operator = m[1] !== undefined ? m[1] : '' - if (this.operator === '=') { - this.operator = '' + encode (buf, off) { + if (!buf) { + buf = this.block = Buffer.alloc(512) + off = 0 } - // if it literally is just '>' or '' then allow anything. - if (!m[2]) { - this.semver = ANY - } else { - this.semver = new SemVer(m[2], this.options.loose) - } - } + if (!off) + off = 0 - toString () { - return this.value - } + if (!(buf.length >= off + 512)) + throw new Error('need 512 bytes for header') - test (version) { - debug('Comparator.test', version, this.options.loose) + const prefixSize = this.ctime || this.atime ? 130 : 155 + const split = splitPrefix(this.path || '', prefixSize) + const path = split[0] + const prefix = split[1] + this.needPax = split[2] - if (this.semver === ANY || version === ANY) { - return true + this.needPax = encString(buf, off, 100, path) || this.needPax + this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax + this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax + this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax + this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax + this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax + buf[off + 156] = this[TYPE].charCodeAt(0) + this.needPax = encString(buf, off + 157, 100, this.linkpath) || this.needPax + buf.write('ustar\u000000', off + 257, 8) + this.needPax = encString(buf, off + 265, 32, this.uname) || this.needPax + this.needPax = encString(buf, off + 297, 32, this.gname) || this.needPax + this.needPax = encNumber(buf, off + 329, 8, this.devmaj) || this.needPax + this.needPax = encNumber(buf, off + 337, 8, this.devmin) || this.needPax + this.needPax = encString(buf, off + 345, prefixSize, prefix) || this.needPax + if (buf[off + 475] !== 0) + this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax + else { + this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax + this.needPax = encDate(buf, off + 476, 12, this.atime) || this.needPax + this.needPax = encDate(buf, off + 488, 12, this.ctime) || this.needPax } - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } - } + let sum = 8 * 0x20 + for (let i = off; i < off + 148; i++) + sum += buf[i] - return cmp(version, this.operator, this.semver, this.options) + for (let i = off + 156; i < off + 512; i++) + sum += buf[i] + + this.cksum = sum + encNumber(buf, off + 148, 8, this.cksum) + this.cksumValid = true + + return this.needPax } - intersects (comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required') + set (data) { + for (const i in data) { + if (data[i] !== null && data[i] !== undefined) + this[i] = data[i] } + } - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } + get type () { + return types.name.get(this[TYPE]) || this[TYPE] + } - if (this.operator === '') { - if (this.value === '') { - return true - } - return new Range(comp.value, options).test(this.value) - } else if (comp.operator === '') { - if (comp.value === '') { - return true - } - return new Range(this.value, options).test(comp.semver) - } - - const sameDirectionIncreasing = - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '>=' || comp.operator === '>') - const sameDirectionDecreasing = - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '<=' || comp.operator === '<') - const sameSemVer = this.semver.version === comp.semver.version - const differentDirectionsInclusive = - (this.operator === '>=' || this.operator === '<=') && - (comp.operator === '>=' || comp.operator === '<=') - const oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, options) && - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '<=' || comp.operator === '<') - const oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, options) && - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '>=' || comp.operator === '>') + get typeKey () { + return this[TYPE] + } - return ( - sameDirectionIncreasing || - sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || - oppositeDirectionsGreaterThan - ) + set type (type) { + if (types.code.has(type)) + this[TYPE] = types.code.get(type) + else + this[TYPE] = type } } -module.exports = Comparator - -const {re, t} = __webpack_require__(/*! ../internal/re */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/re.js") -const cmp = __webpack_require__(/*! ../functions/cmp */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/cmp.js") -const debug = __webpack_require__(/*! ../internal/debug */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/debug.js") -const SemVer = __webpack_require__(/*! ./semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const Range = __webpack_require__(/*! ./range */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js") - +const splitPrefix = (p, prefixSize) => { + const pathSize = 100 + let pp = p + let prefix = '' + let ret + const root = pathModule.parse(p).root || '.' -/***/ }), + if (Buffer.byteLength(pp) < pathSize) + ret = [pp, prefix, false] + else { + // first set prefix to the dir, and path to the base + prefix = pathModule.dirname(pp) + pp = pathModule.basename(pp) -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js": -/*!*****************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js ***! - \*****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + do { + // both fit! + if (Buffer.byteLength(pp) <= pathSize && + Buffer.byteLength(prefix) <= prefixSize) + ret = [pp, prefix, false] -// hoisted class for cyclic dependency -class Range { - constructor (range, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } + // prefix fits in prefix, but path doesn't fit in path + else if (Buffer.byteLength(pp) > pathSize && + Buffer.byteLength(prefix) <= prefixSize) + ret = [pp.substr(0, pathSize - 1), prefix, true] - if (range instanceof Range) { - if ( - range.loose === !!options.loose && - range.includePrerelease === !!options.includePrerelease - ) { - return range - } else { - return new Range(range.raw, options) + else { + // make path take a bit from prefix + pp = pathModule.join(pathModule.basename(prefix), pp) + prefix = pathModule.dirname(prefix) } - } + } while (prefix !== root && !ret) - if (range instanceof Comparator) { - // just put it in the set and return - this.raw = range.value - this.set = [[range]] - this.format() - return this - } + // at this point, found no resolution, just truncate + if (!ret) + ret = [p.substr(0, pathSize - 1), '', true] + } + return ret +} - this.options = options - this.loose = !!options.loose - this.includePrerelease = !!options.includePrerelease +const decString = (buf, off, size) => + buf.slice(off, off + size).toString('utf8').replace(/\0.*/, '') - // First, split based on boolean or || - this.raw = range - this.set = range - .split(/\s*\|\|\s*/) - // map the range to a 2d array of comparators - .map(range => this.parseRange(range.trim())) - // throw out any comparator lists that are empty - // this generally means that it was not a valid range, which is allowed - // in loose mode, but will still throw if the WHOLE range is invalid. - .filter(c => c.length) +const decDate = (buf, off, size) => + numToDate(decNumber(buf, off, size)) - if (!this.set.length) { - throw new TypeError(`Invalid SemVer Range: ${range}`) - } +const numToDate = num => num === null ? null : new Date(num * 1000) - this.format() - } +const decNumber = (buf, off, size) => + buf[off] & 0x80 ? large.parse(buf.slice(off, off + size)) + : decSmallNumber(buf, off, size) - format () { - this.range = this.set - .map((comps) => { - return comps.join(' ').trim() - }) - .join('||') - .trim() - return this.range - } +const nanNull = value => isNaN(value) ? null : value - toString () { - return this.range - } +const decSmallNumber = (buf, off, size) => + nanNull(parseInt( + buf.slice(off, off + size) + .toString('utf8').replace(/\0.*$/, '').trim(), 8)) - parseRange (range) { - const loose = this.options.loose - range = range.trim() - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] - range = range.replace(hr, hyphenReplace) - debug('hyphen replace', range) - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, re[t.COMPARATORTRIM]) +// the maximum encodable as a null-terminated octal, by field size +const MAXNUM = { + 12: 0o77777777777, + 8: 0o7777777, +} - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[t.TILDETRIM], tildeTrimReplace) +const encNumber = (buf, off, size, number) => + number === null ? false : + number > MAXNUM[size] || number < 0 + ? (large.encode(number, buf.slice(off, off + size)), true) + : (encSmallNumber(buf, off, size, number), false) - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[t.CARETTRIM], caretTrimReplace) +const encSmallNumber = (buf, off, size, number) => + buf.write(octalString(number, size), off, size, 'ascii') - // normalize spaces - range = range.split(/\s+/).join(' ') +const octalString = (number, size) => + padOctal(Math.floor(number).toString(8), size) - // At this point, the range is completely trimmed and - // ready to be split into comparators. +const padOctal = (string, size) => + (string.length === size - 1 ? string + : new Array(size - string.length - 1).join('0') + string + ' ') + '\0' - const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - return range - .split(' ') - .map(comp => parseComparator(comp, this.options)) - .join(' ') - .split(/\s+/) - // in loose mode, throw out any that are not valid comparators - .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) - .map(comp => new Comparator(comp, this.options)) - } +const encDate = (buf, off, size, date) => + date === null ? false : + encNumber(buf, off, size, date.getTime() / 1000) - intersects (range, options) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required') - } +// enough to fill the longest string we've got +const NULLS = new Array(156).join('\0') +// pad with nulls, return true if it's longer or non-ascii +const encString = (buf, off, size, string) => + string === null ? false : + (buf.write(string + NULLS, off, size, 'utf8'), + string.length !== Buffer.byteLength(string) || string.length > size) - return this.set.some((thisComparators) => { - return ( - isSatisfiable(thisComparators, options) && - range.set.some((rangeComparators) => { - return ( - isSatisfiable(rangeComparators, options) && - thisComparators.every((thisComparator) => { - return rangeComparators.every((rangeComparator) => { - return thisComparator.intersects(rangeComparator, options) - }) - }) - ) - }) - ) - }) - } +module.exports = Header - // if ANY of the sets match ALL of its comparators, then pass - test (version) { - if (!version) { - return false - } - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } - } +/***/ }), - for (let i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true - } - } - return false - } -} -module.exports = Range +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/high-level-opt.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/high-level-opt.js ***! + \*********************************************************************************************************/ +/***/ ((module) => { -const Comparator = __webpack_require__(/*! ./comparator */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/comparator.js") -const debug = __webpack_require__(/*! ../internal/debug */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/debug.js") -const SemVer = __webpack_require__(/*! ./semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const { - re, - t, - comparatorTrimReplace, - tildeTrimReplace, - caretTrimReplace -} = __webpack_require__(/*! ../internal/re */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/re.js") +"use strict"; -// take a set of comparators and determine whether there -// exists a version which can satisfy it -const isSatisfiable = (comparators, options) => { - let result = true - const remainingComparators = comparators.slice() - let testComparator = remainingComparators.pop() - while (result && remainingComparators.length) { - result = remainingComparators.every((otherComparator) => { - return testComparator.intersects(otherComparator, options) - }) +// turn tar(1) style args like `C` into the more verbose things like `cwd` - testComparator = remainingComparators.pop() - } +const argmap = new Map([ + ['C', 'cwd'], + ['f', 'file'], + ['z', 'gzip'], + ['P', 'preservePaths'], + ['U', 'unlink'], + ['strip-components', 'strip'], + ['stripComponents', 'strip'], + ['keep-newer', 'newer'], + ['keepNewer', 'newer'], + ['keep-newer-files', 'newer'], + ['keepNewerFiles', 'newer'], + ['k', 'keep'], + ['keep-existing', 'keep'], + ['keepExisting', 'keep'], + ['m', 'noMtime'], + ['no-mtime', 'noMtime'], + ['p', 'preserveOwner'], + ['L', 'follow'], + ['h', 'follow'], +]) - return result -} +module.exports = opt => opt ? Object.keys(opt).map(k => [ + argmap.has(k) ? argmap.get(k) : k, opt[k], +]).reduce((set, kv) => (set[kv[0]] = kv[1], set), Object.create(null)) : {} -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -const parseComparator = (comp, options) => { - debug('comp', comp, options) - comp = replaceCarets(comp, options) - debug('caret', comp) - comp = replaceTildes(comp, options) - debug('tildes', comp) - comp = replaceXRanges(comp, options) - debug('xrange', comp) - comp = replaceStars(comp, options) - debug('stars', comp) - return comp -} -const isX = id => !id || id.toLowerCase() === 'x' || id === '*' +/***/ }), -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -const replaceTildes = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceTilde(comp, options) - }).join(' ') +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/large-numbers.js": +/*!********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/large-numbers.js ***! + \********************************************************************************************************/ +/***/ ((module) => { -const replaceTilde = (comp, options) => { - const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] - return comp.replace(r, (_, M, m, p, pr) => { - debug('tilde', comp, _, M, m, p, pr) - let ret +"use strict"; - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0` - } else if (isX(p)) { - // ~1.2 == >=1.2.0 <1.3.0 - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0` - } else if (pr) { - debug('replaceTilde pr', pr) - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${+m + 1}.0` - } else { - // ~1.2.3 == >=1.2.3 <1.3.0 - ret = `>=${M}.${m}.${p - } <${M}.${+m + 1}.0` - } +// Tar can encode large and negative numbers using a leading byte of +// 0xff for negative, and 0x80 for positive. - debug('tilde return', ret) - return ret - }) +const encode = (num, buf) => { + if (!Number.isSafeInteger(num)) + // The number is so large that javascript cannot represent it with integer + // precision. + throw Error('cannot encode number outside of javascript safe integer range') + else if (num < 0) + encodeNegative(num, buf) + else + encodePositive(num, buf) + return buf } -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 -// ^1.2.3 --> >=1.2.3 <2.0.0 -// ^1.2.0 --> >=1.2.0 <2.0.0 -const replaceCarets = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceCaret(comp, options) - }).join(' ') +const encodePositive = (num, buf) => { + buf[0] = 0x80 -const replaceCaret = (comp, options) => { - debug('caret', comp, options) - const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] - return comp.replace(r, (_, M, m, p, pr) => { - debug('caret', comp, _, M, m, p, pr) - let ret + for (var i = buf.length; i > 1; i--) { + buf[i - 1] = num & 0xff + num = Math.floor(num / 0x100) + } +} - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0` - } else if (isX(p)) { - if (M === '0') { - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0` - } else { - ret = `>=${M}.${m}.0 <${+M + 1}.0.0` - } - } else if (pr) { - debug('replaceCaret pr', pr) - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${m}.${+p + 1}` - } else { - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${+m + 1}.0` - } - } else { - ret = `>=${M}.${m}.${p}-${pr - } <${+M + 1}.0.0` - } - } else { - debug('no pr') - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p - } <${M}.${m}.${+p + 1}` - } else { - ret = `>=${M}.${m}.${p - } <${M}.${+m + 1}.0` - } - } else { - ret = `>=${M}.${m}.${p - } <${+M + 1}.0.0` - } +const encodeNegative = (num, buf) => { + buf[0] = 0xff + var flipped = false + num = num * -1 + for (var i = buf.length; i > 1; i--) { + var byte = num & 0xff + num = Math.floor(num / 0x100) + if (flipped) + buf[i - 1] = onesComp(byte) + else if (byte === 0) + buf[i - 1] = 0 + else { + flipped = true + buf[i - 1] = twosComp(byte) } + } +} - debug('caret return', ret) - return ret - }) +const parse = (buf) => { + const pre = buf[0] + const value = pre === 0x80 ? pos(buf.slice(1, buf.length)) + : pre === 0xff ? twos(buf) + : null + if (value === null) + throw Error('invalid base256 encoding') + + if (!Number.isSafeInteger(value)) + // The number is so large that javascript cannot represent it with integer + // precision. + throw Error('parsed number outside of javascript safe integer range') + + return value } -const replaceXRanges = (comp, options) => { - debug('replaceXRanges', comp, options) - return comp.split(/\s+/).map((comp) => { - return replaceXRange(comp, options) - }).join(' ') +const twos = (buf) => { + var len = buf.length + var sum = 0 + var flipped = false + for (var i = len - 1; i > -1; i--) { + var byte = buf[i] + var f + if (flipped) + f = onesComp(byte) + else if (byte === 0) + f = byte + else { + flipped = true + f = twosComp(byte) + } + if (f !== 0) + sum -= f * Math.pow(256, len - i - 1) + } + return sum } -const replaceXRange = (comp, options) => { - comp = comp.trim() - const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] - return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - debug('xRange', comp, ret, gtlt, M, m, p, pr) - const xM = isX(M) - const xm = xM || isX(m) - const xp = xm || isX(p) - const anyX = xp +const pos = (buf) => { + var len = buf.length + var sum = 0 + for (var i = len - 1; i > -1; i--) { + var byte = buf[i] + if (byte !== 0) + sum += byte * Math.pow(256, len - i - 1) + } + return sum +} - if (gtlt === '=' && anyX) { - gtlt = '' - } +const onesComp = byte => (0xff ^ byte) & 0xff - // if we're including prereleases in the match, then we need - // to fix this to -0, the lowest possible prerelease value - pr = options.includePrerelease ? '-0' : '' +const twosComp = byte => ((0xff ^ byte) + 1) & 0xff - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0-0' - } else { - // nothing is forbidden - ret = '*' - } - } else if (gtlt && anyX) { - // we know patch is an x, because we have any x at all. - // replace X with 0 - if (xm) { - m = 0 - } - p = 0 +module.exports = { + encode, + parse, +} - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - gtlt = '>=' - if (xm) { - M = +M + 1 - m = 0 - p = 0 - } else { - m = +m + 1 - p = 0 - } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) { - M = +M + 1 - } else { - m = +m + 1 - } - } - ret = `${gtlt + M}.${m}.${p}${pr}` - } else if (xm) { - ret = `>=${M}.0.0${pr} <${+M + 1}.0.0${pr}` - } else if (xp) { - ret = `>=${M}.${m}.0${pr - } <${M}.${+m + 1}.0${pr}` - } +/***/ }), - debug('xRange return', ret) +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/list.js": +/*!***********************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/list.js ***! + \***********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - return ret - }) -} +"use strict"; -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -const replaceStars = (comp, options) => { - debug('replaceStars', comp, options) - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[t.STAR], '') -} -// This function is passed to string.replace(re[t.HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0 -const hyphenReplace = ($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) => { - if (isX(fM)) { - from = '' - } else if (isX(fm)) { - from = `>=${fM}.0.0` - } else if (isX(fp)) { - from = `>=${fM}.${fm}.0` - } else { - from = `>=${from}` - } +// XXX: This shares a lot in common with extract.js +// maybe some DRY opportunity here? - if (isX(tM)) { - to = '' - } else if (isX(tm)) { - to = `<${+tM + 1}.0.0` - } else if (isX(tp)) { - to = `<${tM}.${+tm + 1}.0` - } else if (tpr) { - to = `<=${tM}.${tm}.${tp}-${tpr}` - } else { - to = `<=${to}` - } +// tar -t +const hlo = __webpack_require__(/*! ./high-level-opt.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/high-level-opt.js") +const Parser = __webpack_require__(/*! ./parse.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/parse.js") +const fs = __webpack_require__(/*! fs */ "fs") +const fsm = __webpack_require__(/*! fs-minipass */ "../../../.yarn/berry/cache/fs-minipass-npm-2.1.0-501ef87306-9.zip/node_modules/fs-minipass/index.js") +const path = __webpack_require__(/*! path */ "path") +const stripSlash = __webpack_require__(/*! ./strip-trailing-slashes.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-trailing-slashes.js") - return (`${from} ${to}`).trim() -} +module.exports = (opt_, files, cb) => { + if (typeof opt_ === 'function') + cb = opt_, files = null, opt_ = {} + else if (Array.isArray(opt_)) + files = opt_, opt_ = {} -const testSet = (set, version, options) => { - for (let i = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false - } - } + if (typeof files === 'function') + cb = files, files = null - if (version.prerelease.length && !options.includePrerelease) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (let i = 0; i < set.length; i++) { - debug(set[i].semver) - if (set[i].semver === Comparator.ANY) { - continue - } + if (!files) + files = [] + else + files = Array.from(files) - if (set[i].semver.prerelease.length > 0) { - const allowed = set[i].semver - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) { - return true - } - } - } + const opt = hlo(opt_) - // Version has a -pre, but it's not one of the ones we like. - return false - } + if (opt.sync && typeof cb === 'function') + throw new TypeError('callback not supported for sync tar functions') - return true + if (!opt.file && typeof cb === 'function') + throw new TypeError('callback only supported with file option') + + if (files.length) + filesFilter(opt, files) + + if (!opt.noResume) + onentryFunction(opt) + + return opt.file && opt.sync ? listFileSync(opt) + : opt.file ? listFile(opt, cb) + : list(opt) } +const onentryFunction = opt => { + const onentry = opt.onentry + opt.onentry = onentry ? e => { + onentry(e) + e.resume() + } : e => e.resume() +} -/***/ }), +// construct a filter that limits the file entries listed +// include child entries if a dir is included +const filesFilter = (opt, files) => { + const map = new Map(files.map(f => [stripSlash(f), true])) + const filter = opt.filter -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js": -/*!******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js ***! - \******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + const mapHas = (file, r) => { + const root = r || path.parse(file).root || '.' + const ret = file === root ? false + : map.has(file) ? map.get(file) + : mapHas(path.dirname(file), root) -const debug = __webpack_require__(/*! ../internal/debug */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/debug.js") -const { MAX_LENGTH, MAX_SAFE_INTEGER } = __webpack_require__(/*! ../internal/constants */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/constants.js") -const { re, t } = __webpack_require__(/*! ../internal/re */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/re.js") + map.set(file, ret) + return ret + } -const { compareIdentifiers } = __webpack_require__(/*! ../internal/identifiers */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/identifiers.js") -class SemVer { - constructor (version, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false + opt.filter = filter + ? (file, entry) => filter(file, entry) && mapHas(stripSlash(file)) + : file => mapHas(stripSlash(file)) +} + +const listFileSync = opt => { + const p = list(opt) + const file = opt.file + let threw = true + let fd + try { + const stat = fs.statSync(file) + const readSize = opt.maxReadSize || 16 * 1024 * 1024 + if (stat.size < readSize) + p.end(fs.readFileSync(file)) + else { + let pos = 0 + const buf = Buffer.allocUnsafe(readSize) + fd = fs.openSync(file, 'r') + while (pos < stat.size) { + const bytesRead = fs.readSync(fd, buf, 0, readSize, pos) + pos += bytesRead + p.write(buf.slice(0, bytesRead)) } + p.end() } - if (version instanceof SemVer) { - if (version.loose === !!options.loose && - version.includePrerelease === !!options.includePrerelease) { - return version - } else { - version = version.version - } - } else if (typeof version !== 'string') { - throw new TypeError(`Invalid Version: ${version}`) + threw = false + } finally { + if (threw && fd) { + try { + fs.closeSync(fd) + } catch (er) {} } + } +} - if (version.length > MAX_LENGTH) { - throw new TypeError( - `version is longer than ${MAX_LENGTH} characters` - ) - } +const listFile = (opt, cb) => { + const parse = new Parser(opt) + const readSize = opt.maxReadSize || 16 * 1024 * 1024 - debug('SemVer', version, options) - this.options = options - this.loose = !!options.loose - // this isn't actually relevant for versions, but keep it so that we - // don't run into trouble passing this.options around. - this.includePrerelease = !!options.includePrerelease + const file = opt.file + const p = new Promise((resolve, reject) => { + parse.on('error', reject) + parse.on('end', resolve) - const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + fs.stat(file, (er, stat) => { + if (er) + reject(er) + else { + const stream = new fsm.ReadStream(file, { + readSize: readSize, + size: stat.size, + }) + stream.on('error', reject) + stream.pipe(parse) + } + }) + }) + return cb ? p.then(cb, cb) : p +} - if (!m) { - throw new TypeError(`Invalid Version: ${version}`) - } +const list = opt => new Parser(opt) - this.raw = version - // these are actually numbers - this.major = +m[1] - this.minor = +m[2] - this.patch = +m[3] +/***/ }), - if (this.major > MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError('Invalid major version') - } +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/mkdir.js": +/*!************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/mkdir.js ***! + \************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError('Invalid minor version') - } +"use strict"; - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError('Invalid patch version') - } +// wrapper around mkdirp for tar's needs. - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = [] - } else { - this.prerelease = m[4].split('.').map((id) => { - if (/^[0-9]+$/.test(id)) { - const num = +id - if (num >= 0 && num < MAX_SAFE_INTEGER) { - return num - } - } - return id - }) - } +// TODO: This should probably be a class, not functionally +// passing around state in a gazillion args. - this.build = m[5] ? m[5].split('.') : [] - this.format() +const mkdirp = __webpack_require__(/*! mkdirp */ "../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-9.zip/node_modules/mkdirp/index.js") +const fs = __webpack_require__(/*! fs */ "fs") +const path = __webpack_require__(/*! path */ "path") +const chownr = __webpack_require__(/*! chownr */ "../../../.yarn/berry/cache/chownr-npm-2.0.0-638f1c9c61-9.zip/node_modules/chownr/chownr.js") +const normPath = __webpack_require__(/*! ./normalize-windows-path.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-windows-path.js") + +class SymlinkError extends Error { + constructor (symlink, path) { + super('Cannot extract through symbolic link') + this.path = path + this.symlink = symlink } - format () { - this.version = `${this.major}.${this.minor}.${this.patch}` - if (this.prerelease.length) { - this.version += `-${this.prerelease.join('.')}` - } - return this.version + get name () { + return 'SylinkError' } +} - toString () { - return this.version +class CwdError extends Error { + constructor (path, code) { + super(code + ': Cannot cd into \'' + path + '\'') + this.path = path + this.code = code } - compare (other) { - debug('SemVer.compare', this.version, this.options, other) - if (!(other instanceof SemVer)) { - if (typeof other === 'string' && other === this.version) { - return 0 - } - other = new SemVer(other, this.options) - } + get name () { + return 'CwdError' + } +} - if (other.version === this.version) { - return 0 - } +const cGet = (cache, key) => cache.get(normPath(key)) +const cSet = (cache, key, val) => cache.set(normPath(key), val) - return this.compareMain(other) || this.comparePre(other) - } - - compareMain (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - return ( - compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) - ) - } - - comparePre (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) { - return -1 - } else if (!this.prerelease.length && other.prerelease.length) { - return 1 - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0 - } - - let i = 0 - do { - const a = this.prerelease[i] - const b = other.prerelease[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) - } +const checkCwd = (dir, cb) => { + fs.stat(dir, (er, st) => { + if (er || !st.isDirectory()) + er = new CwdError(dir, er && er.code || 'ENOTDIR') + cb(er) + }) +} - compareBuild (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } +module.exports = (dir, opt, cb) => { + dir = normPath(dir) - let i = 0 - do { - const a = this.build[i] - const b = other.build[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) - } + // if there's any overlap between mask and mode, + // then we'll need an explicit chmod + const umask = opt.umask + const mode = opt.mode | 0o0700 + const needChmod = (mode & umask) !== 0 - // preminor will bump the version up to the next minor release, and immediately - // down to pre-release. premajor and prepatch work the same way. - inc (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0 - this.patch = 0 - this.minor = 0 - this.major++ - this.inc('pre', identifier) - break - case 'preminor': - this.prerelease.length = 0 - this.patch = 0 - this.minor++ - this.inc('pre', identifier) - break - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0 - this.inc('patch', identifier) - this.inc('pre', identifier) - break - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) { - this.inc('patch', identifier) - } - this.inc('pre', identifier) - break + const uid = opt.uid + const gid = opt.gid + const doChown = typeof uid === 'number' && + typeof gid === 'number' && + (uid !== opt.processUid || gid !== opt.processGid) - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if ( - this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0 - ) { - this.major++ - } - this.minor = 0 - this.patch = 0 - this.prerelease = [] - break - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++ - } - this.patch = 0 - this.prerelease = [] - break - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++ - } - this.prerelease = [] - break - // This probably shouldn't be used publicly. - // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) { - this.prerelease = [0] - } else { - let i = this.prerelease.length - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++ - i = -2 - } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0) - } - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0] - } - } else { - this.prerelease = [identifier, 0] - } - } - break + const preserve = opt.preserve + const unlink = opt.unlink + const cache = opt.cache + const cwd = normPath(opt.cwd) - default: - throw new Error(`invalid increment argument: ${release}`) + const done = (er, created) => { + if (er) + cb(er) + else { + cSet(cache, dir, true) + if (created && doChown) + chownr(created, uid, gid, er => done(er)) + else if (needChmod) + fs.chmod(dir, mode, cb) + else + cb() } - this.format() - this.raw = this.version - return this } -} -module.exports = SemVer + if (cache && cGet(cache, dir) === true) + return done() + if (dir === cwd) + return checkCwd(dir, done) -/***/ }), + if (preserve) + return mkdirp(dir, {mode}).then(made => done(null, made), done) -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/clean.js": -/*!*******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/clean.js ***! - \*******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + const sub = normPath(path.relative(cwd, dir)) + const parts = sub.split('/') + mkdir_(cwd, parts, mode, cache, unlink, cwd, null, done) +} -const parse = __webpack_require__(/*! ./parse */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/parse.js") -const clean = (version, options) => { - const s = parse(version.trim().replace(/^[=v]+/, ''), options) - return s ? s.version : null +const mkdir_ = (base, parts, mode, cache, unlink, cwd, created, cb) => { + if (!parts.length) + return cb(null, created) + const p = parts.shift() + const part = normPath(path.resolve(base + '/' + p)) + if (cGet(cache, part)) + return mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) + fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb)) } -module.exports = clean +const onmkdir = (part, parts, mode, cache, unlink, cwd, created, cb) => er => { + if (er) { + fs.lstat(part, (statEr, st) => { + if (statEr) { + statEr.path = statEr.path && normPath(statEr.path) + cb(statEr) + } else if (st.isDirectory()) + mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) + else if (unlink) { + fs.unlink(part, er => { + if (er) + return cb(er) + fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb)) + }) + } else if (st.isSymbolicLink()) + return cb(new SymlinkError(part, part + '/' + parts.join('/'))) + else + cb(er) + }) + } else { + created = created || part + mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) + } +} -/***/ }), +const checkCwdSync = dir => { + let ok = false + let code = 'ENOTDIR' + try { + ok = fs.statSync(dir).isDirectory() + } catch (er) { + code = er.code + } finally { + if (!ok) + throw new CwdError(dir, code) + } +} -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/cmp.js": -/*!*****************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/cmp.js ***! - \*****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +module.exports.sync = (dir, opt) => { + dir = normPath(dir) + // if there's any overlap between mask and mode, + // then we'll need an explicit chmod + const umask = opt.umask + const mode = opt.mode | 0o0700 + const needChmod = (mode & umask) !== 0 -const eq = __webpack_require__(/*! ./eq */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/eq.js") -const neq = __webpack_require__(/*! ./neq */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/neq.js") -const gt = __webpack_require__(/*! ./gt */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gt.js") -const gte = __webpack_require__(/*! ./gte */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gte.js") -const lt = __webpack_require__(/*! ./lt */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/lt.js") -const lte = __webpack_require__(/*! ./lte */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/lte.js") + const uid = opt.uid + const gid = opt.gid + const doChown = typeof uid === 'number' && + typeof gid === 'number' && + (uid !== opt.processUid || gid !== opt.processGid) -const cmp = (a, op, b, loose) => { - switch (op) { - case '===': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a === b - - case '!==': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a !== b - - case '': - case '=': - case '==': - return eq(a, b, loose) + const preserve = opt.preserve + const unlink = opt.unlink + const cache = opt.cache + const cwd = normPath(opt.cwd) - case '!=': - return neq(a, b, loose) + const done = (created) => { + cSet(cache, dir, true) + if (created && doChown) + chownr.sync(created, uid, gid) + if (needChmod) + fs.chmodSync(dir, mode) + } - case '>': - return gt(a, b, loose) + if (cache && cGet(cache, dir) === true) + return done() - case '>=': - return gte(a, b, loose) + if (dir === cwd) { + checkCwdSync(cwd) + return done() + } - case '<': - return lt(a, b, loose) + if (preserve) + return done(mkdirp.sync(dir, mode)) - case '<=': - return lte(a, b, loose) + const sub = normPath(path.relative(cwd, dir)) + const parts = sub.split('/') + let created = null + for (let p = parts.shift(), part = cwd; + p && (part += '/' + p); + p = parts.shift()) { + part = normPath(path.resolve(part)) + if (cGet(cache, part)) + continue - default: - throw new TypeError(`Invalid operator: ${op}`) + try { + fs.mkdirSync(part, mode) + created = created || part + cSet(cache, part, true) + } catch (er) { + const st = fs.lstatSync(part) + if (st.isDirectory()) { + cSet(cache, part, true) + continue + } else if (unlink) { + fs.unlinkSync(part) + fs.mkdirSync(part, mode) + created = created || part + cSet(cache, part, true) + continue + } else if (st.isSymbolicLink()) + return new SymlinkError(part, part + '/' + parts.join('/')) + } } + + return done(created) } -module.exports = cmp /***/ }), -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/coerce.js": -/*!********************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/coerce.js ***! - \********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const parse = __webpack_require__(/*! ./parse */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/parse.js") -const {re, t} = __webpack_require__(/*! ../internal/re */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/re.js") - -const coerce = (version, options) => { - if (version instanceof SemVer) { - return version - } +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/mode-fix.js": +/*!***************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/mode-fix.js ***! + \***************************************************************************************************/ +/***/ ((module) => { - if (typeof version === 'number') { - version = String(version) - } +"use strict"; - if (typeof version !== 'string') { - return null - } +module.exports = (mode, isDir, portable) => { + mode &= 0o7777 - options = options || {} + // in portable mode, use the minimum reasonable umask + // if this system creates files with 0o664 by default + // (as some linux distros do), then we'll write the + // archive with 0o644 instead. Also, don't ever create + // a file that is not readable/writable by the owner. + if (portable) + mode = (mode | 0o600) & ~0o22 - let match = null - if (!options.rtl) { - match = version.match(re[t.COERCE]) - } else { - // Find the right-most coercible string that does not share - // a terminus with a more left-ward coercible string. - // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' - // - // Walk through the string checking with a /g regexp - // Manually set the index so as to pick up overlapping matches. - // Stop when we get a match that ends at the string end, since no - // coercible string can be more right-ward without the same terminus. - let next - while ((next = re[t.COERCERTL].exec(version)) && - (!match || match.index + match[0].length !== version.length) - ) { - if (!match || - next.index + next[0].length !== match.index + match[0].length) { - match = next - } - re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length - } - // leave it in a clean state - re[t.COERCERTL].lastIndex = -1 + // if dirs are readable, then they should be listable + if (isDir) { + if (mode & 0o400) + mode |= 0o100 + if (mode & 0o40) + mode |= 0o10 + if (mode & 0o4) + mode |= 0o1 } - - if (match === null) - return null - - return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) + return mode } -module.exports = coerce /***/ }), -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare-build.js": -/*!***************************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare-build.js ***! - \***************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-unicode.js": +/*!************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-unicode.js ***! + \************************************************************************************************************/ +/***/ ((module) => { -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const compareBuild = (a, b, loose) => { - const versionA = new SemVer(a, loose) - const versionB = new SemVer(b, loose) - return versionA.compare(versionB) || versionA.compareBuild(versionB) +// warning: extremely hot code path. +// This has been meticulously optimized for use +// within npm install on large package trees. +// Do not edit without careful benchmarking. +const normalizeCache = Object.create(null) +const {hasOwnProperty} = Object.prototype +module.exports = s => { + if (!hasOwnProperty.call(normalizeCache, s)) + normalizeCache[s] = s.normalize('NFKD') + return normalizeCache[s] } -module.exports = compareBuild /***/ }), -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare-loose.js": -/*!***************************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare-loose.js ***! - \***************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-windows-path.js": +/*!*****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-windows-path.js ***! + \*****************************************************************************************************************/ +/***/ ((module) => { -const compare = __webpack_require__(/*! ./compare */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js") -const compareLoose = (a, b) => compare(a, b, true) -module.exports = compareLoose +// on windows, either \ or / are valid directory separators. +// on unix, \ is a valid character in filenames. +// so, on windows, and only on windows, we replace all \ chars with /, +// so that we can use / as our one and only directory separator char. + +const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform +module.exports = platform !== 'win32' ? p => p + : p => p && p.replace(/\\/g, '/') /***/ }), -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js": -/*!*********************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js ***! - \*********************************************************************************************************/ +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/pack.js": +/*!***********************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/pack.js ***! + \***********************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const compare = (a, b, loose) => - new SemVer(a, loose).compare(new SemVer(b, loose)) - -module.exports = compare - - -/***/ }), +"use strict"; -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/diff.js": -/*!******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/diff.js ***! - \******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const parse = __webpack_require__(/*! ./parse */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/parse.js") -const eq = __webpack_require__(/*! ./eq */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/eq.js") +// A readable tar stream creator +// Technically, this is a transform stream that you write paths into, +// and tar format comes out of. +// The `add()` method is like `write()` but returns this, +// and end() return `this` as well, so you can +// do `new Pack(opt).add('files').add('dir').end().pipe(output) +// You could also do something like: +// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar')) -const diff = (version1, version2) => { - if (eq(version1, version2)) { - return null - } else { - const v1 = parse(version1) - const v2 = parse(version2) - const hasPre = v1.prerelease.length || v2.prerelease.length - const prefix = hasPre ? 'pre' : '' - const defaultResult = hasPre ? 'prerelease' : '' - for (const key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return prefix + key - } - } - } - return defaultResult // may be undefined +class PackJob { + constructor (path, absolute) { + this.path = path || './' + this.absolute = absolute + this.entry = null + this.stat = null + this.readdir = null + this.pending = false + this.ignore = false + this.piped = false } } -module.exports = diff +const MiniPass = __webpack_require__(/*! minipass */ "../../../.yarn/berry/cache/minipass-npm-3.3.5-a555b091e7-9.zip/node_modules/minipass/index.js") +const zlib = __webpack_require__(/*! minizlib */ "../../../.yarn/berry/cache/minizlib-npm-2.1.2-ea89cd0cfb-9.zip/node_modules/minizlib/index.js") +const ReadEntry = __webpack_require__(/*! ./read-entry.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/read-entry.js") +const WriteEntry = __webpack_require__(/*! ./write-entry.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/write-entry.js") +const WriteEntrySync = WriteEntry.Sync +const WriteEntryTar = WriteEntry.Tar +const Yallist = __webpack_require__(/*! yallist */ "../../../.yarn/berry/cache/yallist-npm-4.0.0-b493d9e907-9.zip/node_modules/yallist/yallist.js") +const EOF = Buffer.alloc(1024) +const ONSTAT = Symbol('onStat') +const ENDED = Symbol('ended') +const QUEUE = Symbol('queue') +const CURRENT = Symbol('current') +const PROCESS = Symbol('process') +const PROCESSING = Symbol('processing') +const PROCESSJOB = Symbol('processJob') +const JOBS = Symbol('jobs') +const JOBDONE = Symbol('jobDone') +const ADDFSENTRY = Symbol('addFSEntry') +const ADDTARENTRY = Symbol('addTarEntry') +const STAT = Symbol('stat') +const READDIR = Symbol('readdir') +const ONREADDIR = Symbol('onreaddir') +const PIPE = Symbol('pipe') +const ENTRY = Symbol('entry') +const ENTRYOPT = Symbol('entryOpt') +const WRITEENTRYCLASS = Symbol('writeEntryClass') +const WRITE = Symbol('write') +const ONDRAIN = Symbol('ondrain') -/***/ }), +const fs = __webpack_require__(/*! fs */ "fs") +const path = __webpack_require__(/*! path */ "path") +const warner = __webpack_require__(/*! ./warn-mixin.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/warn-mixin.js") +const normPath = __webpack_require__(/*! ./normalize-windows-path.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-windows-path.js") -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/eq.js": -/*!****************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/eq.js ***! - \****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +const Pack = warner(class Pack extends MiniPass { + constructor (opt) { + super(opt) + opt = opt || Object.create(null) + this.opt = opt + this.file = opt.file || '' + this.cwd = opt.cwd || process.cwd() + this.maxReadSize = opt.maxReadSize + this.preservePaths = !!opt.preservePaths + this.strict = !!opt.strict + this.noPax = !!opt.noPax + this.prefix = normPath(opt.prefix || '') + this.linkCache = opt.linkCache || new Map() + this.statCache = opt.statCache || new Map() + this.readdirCache = opt.readdirCache || new Map() -const compare = __webpack_require__(/*! ./compare */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js") -const eq = (a, b, loose) => compare(a, b, loose) === 0 -module.exports = eq + this[WRITEENTRYCLASS] = WriteEntry + if (typeof opt.onwarn === 'function') + this.on('warn', opt.onwarn) + this.portable = !!opt.portable + this.zip = null + if (opt.gzip) { + if (typeof opt.gzip !== 'object') + opt.gzip = {} + if (this.portable) + opt.gzip.portable = true + this.zip = new zlib.Gzip(opt.gzip) + this.zip.on('data', chunk => super.write(chunk)) + this.zip.on('end', _ => super.end()) + this.zip.on('drain', _ => this[ONDRAIN]()) + this.on('resume', _ => this.zip.resume()) + } else + this.on('drain', this[ONDRAIN]) -/***/ }), - -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gt.js": -/*!****************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gt.js ***! - \****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const compare = __webpack_require__(/*! ./compare */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js") -const gt = (a, b, loose) => compare(a, b, loose) > 0 -module.exports = gt - - -/***/ }), - -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gte.js": -/*!*****************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gte.js ***! - \*****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const compare = __webpack_require__(/*! ./compare */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js") -const gte = (a, b, loose) => compare(a, b, loose) >= 0 -module.exports = gte - - -/***/ }), - -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/inc.js": -/*!*****************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/inc.js ***! - \*****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + this.noDirRecurse = !!opt.noDirRecurse + this.follow = !!opt.follow + this.noMtime = !!opt.noMtime + this.mtime = opt.mtime || null -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") + this.filter = typeof opt.filter === 'function' ? opt.filter : _ => true -const inc = (version, release, options, identifier) => { - if (typeof (options) === 'string') { - identifier = options - options = undefined + this[QUEUE] = new Yallist() + this[JOBS] = 0 + this.jobs = +opt.jobs || 4 + this[PROCESSING] = false + this[ENDED] = false } - try { - return new SemVer(version, options).inc(release, identifier).version - } catch (er) { - return null + [WRITE] (chunk) { + return super.write(chunk) } -} -module.exports = inc + add (path) { + this.write(path) + return this + } -/***/ }), + end (path) { + if (path) + this.write(path) + this[ENDED] = true + this[PROCESS]() + return this + } -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/lt.js": -/*!****************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/lt.js ***! - \****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + write (path) { + if (this[ENDED]) + throw new Error('write after end') -const compare = __webpack_require__(/*! ./compare */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js") -const lt = (a, b, loose) => compare(a, b, loose) < 0 -module.exports = lt + if (path instanceof ReadEntry) + this[ADDTARENTRY](path) + else + this[ADDFSENTRY](path) + return this.flowing + } + [ADDTARENTRY] (p) { + const absolute = normPath(path.resolve(this.cwd, p.path)) + // in this case, we don't have to wait for the stat + if (!this.filter(p.path, p)) + p.resume() + else { + const job = new PackJob(p.path, absolute, false) + job.entry = new WriteEntryTar(p, this[ENTRYOPT](job)) + job.entry.on('end', _ => this[JOBDONE](job)) + this[JOBS] += 1 + this[QUEUE].push(job) + } -/***/ }), + this[PROCESS]() + } -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/lte.js": -/*!*****************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/lte.js ***! - \*****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + [ADDFSENTRY] (p) { + const absolute = normPath(path.resolve(this.cwd, p)) + this[QUEUE].push(new PackJob(p, absolute)) + this[PROCESS]() + } -const compare = __webpack_require__(/*! ./compare */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js") -const lte = (a, b, loose) => compare(a, b, loose) <= 0 -module.exports = lte + [STAT] (job) { + job.pending = true + this[JOBS] += 1 + const stat = this.follow ? 'stat' : 'lstat' + fs[stat](job.absolute, (er, stat) => { + job.pending = false + this[JOBS] -= 1 + if (er) + this.emit('error', er) + else + this[ONSTAT](job, stat) + }) + } + [ONSTAT] (job, stat) { + this.statCache.set(job.absolute, stat) + job.stat = stat -/***/ }), + // now we have the stat, we can filter it. + if (!this.filter(job.path, stat)) + job.ignore = true -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/major.js": -/*!*******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/major.js ***! - \*******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + this[PROCESS]() + } -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const major = (a, loose) => new SemVer(a, loose).major -module.exports = major + [READDIR] (job) { + job.pending = true + this[JOBS] += 1 + fs.readdir(job.absolute, (er, entries) => { + job.pending = false + this[JOBS] -= 1 + if (er) + return this.emit('error', er) + this[ONREADDIR](job, entries) + }) + } + [ONREADDIR] (job, entries) { + this.readdirCache.set(job.absolute, entries) + job.readdir = entries + this[PROCESS]() + } -/***/ }), + [PROCESS] () { + if (this[PROCESSING]) + return -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/minor.js": -/*!*******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/minor.js ***! - \*******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + this[PROCESSING] = true + for (let w = this[QUEUE].head; + w !== null && this[JOBS] < this.jobs; + w = w.next) { + this[PROCESSJOB](w.value) + if (w.value.ignore) { + const p = w.next + this[QUEUE].removeNode(w) + w.next = p + } + } -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const minor = (a, loose) => new SemVer(a, loose).minor -module.exports = minor + this[PROCESSING] = false + if (this[ENDED] && !this[QUEUE].length && this[JOBS] === 0) { + if (this.zip) + this.zip.end(EOF) + else { + super.write(EOF) + super.end() + } + } + } -/***/ }), + get [CURRENT] () { + return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value + } -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/neq.js": -/*!*****************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/neq.js ***! - \*****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + [JOBDONE] (job) { + this[QUEUE].shift() + this[JOBS] -= 1 + this[PROCESS]() + } -const compare = __webpack_require__(/*! ./compare */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js") -const neq = (a, b, loose) => compare(a, b, loose) !== 0 -module.exports = neq + [PROCESSJOB] (job) { + if (job.pending) + return + if (job.entry) { + if (job === this[CURRENT] && !job.piped) + this[PIPE](job) + return + } -/***/ }), + if (!job.stat) { + if (this.statCache.has(job.absolute)) + this[ONSTAT](job, this.statCache.get(job.absolute)) + else + this[STAT](job) + } + if (!job.stat) + return -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/parse.js": -/*!*******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/parse.js ***! - \*******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + // filtered out! + if (job.ignore) + return -const {MAX_LENGTH} = __webpack_require__(/*! ../internal/constants */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/constants.js") -const { re, t } = __webpack_require__(/*! ../internal/re */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/re.js") -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") + if (!this.noDirRecurse && job.stat.isDirectory() && !job.readdir) { + if (this.readdirCache.has(job.absolute)) + this[ONREADDIR](job, this.readdirCache.get(job.absolute)) + else + this[READDIR](job) + if (!job.readdir) + return + } -const parse = (version, options) => { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false + // we know it doesn't have an entry, because that got checked above + job.entry = this[ENTRY](job) + if (!job.entry) { + job.ignore = true + return } - } - if (version instanceof SemVer) { - return version + if (job === this[CURRENT] && !job.piped) + this[PIPE](job) } - if (typeof version !== 'string') { - return null + [ENTRYOPT] (job) { + return { + onwarn: (code, msg, data) => this.warn(code, msg, data), + noPax: this.noPax, + cwd: this.cwd, + absolute: job.absolute, + preservePaths: this.preservePaths, + maxReadSize: this.maxReadSize, + strict: this.strict, + portable: this.portable, + linkCache: this.linkCache, + statCache: this.statCache, + noMtime: this.noMtime, + mtime: this.mtime, + prefix: this.prefix, + } } - if (version.length > MAX_LENGTH) { - return null + [ENTRY] (job) { + this[JOBS] += 1 + try { + return new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job)) + .on('end', () => this[JOBDONE](job)) + .on('error', er => this.emit('error', er)) + } catch (er) { + this.emit('error', er) + } } - const r = options.loose ? re[t.LOOSE] : re[t.FULL] - if (!r.test(version)) { - return null + [ONDRAIN] () { + if (this[CURRENT] && this[CURRENT].entry) + this[CURRENT].entry.resume() } - try { - return new SemVer(version, options) - } catch (er) { - return null - } -} - -module.exports = parse - - -/***/ }), - -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/patch.js": -/*!*******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/patch.js ***! - \*******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const patch = (a, loose) => new SemVer(a, loose).patch -module.exports = patch - - -/***/ }), - -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/prerelease.js": -/*!************************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/prerelease.js ***! - \************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const parse = __webpack_require__(/*! ./parse */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/parse.js") -const prerelease = (version, options) => { - const parsed = parse(version, options) - return (parsed && parsed.prerelease.length) ? parsed.prerelease : null -} -module.exports = prerelease - + // like .pipe() but using super, because our write() is special + [PIPE] (job) { + job.piped = true -/***/ }), + if (job.readdir) { + job.readdir.forEach(entry => { + const p = job.path + const base = p === './' ? '' : p.replace(/\/*$/, '/') + this[ADDFSENTRY](base + entry) + }) + } -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/rcompare.js": -/*!**********************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/rcompare.js ***! - \**********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + const source = job.entry + const zip = this.zip -const compare = __webpack_require__(/*! ./compare */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js") -const rcompare = (a, b, loose) => compare(b, a, loose) -module.exports = rcompare + if (zip) { + source.on('data', chunk => { + if (!zip.write(chunk)) + source.pause() + }) + } else { + source.on('data', chunk => { + if (!super.write(chunk)) + source.pause() + }) + } + } + pause () { + if (this.zip) + this.zip.pause() + return super.pause() + } +}) -/***/ }), +class PackSync extends Pack { + constructor (opt) { + super(opt) + this[WRITEENTRYCLASS] = WriteEntrySync + } -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/rsort.js": -/*!*******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/rsort.js ***! - \*******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + // pause/resume are no-ops in sync streams. + pause () {} + resume () {} -const compareBuild = __webpack_require__(/*! ./compare-build */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare-build.js") -const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) -module.exports = rsort + [STAT] (job) { + const stat = this.follow ? 'statSync' : 'lstatSync' + this[ONSTAT](job, fs[stat](job.absolute)) + } + [READDIR] (job, stat) { + this[ONREADDIR](job, fs.readdirSync(job.absolute)) + } -/***/ }), + // gotta get it all in this tick + [PIPE] (job) { + const source = job.entry + const zip = this.zip -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/satisfies.js": -/*!***********************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/satisfies.js ***! - \***********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + if (job.readdir) { + job.readdir.forEach(entry => { + const p = job.path + const base = p === './' ? '' : p.replace(/\/*$/, '/') + this[ADDFSENTRY](base + entry) + }) + } -const Range = __webpack_require__(/*! ../classes/range */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js") -const satisfies = (version, range, options) => { - try { - range = new Range(range, options) - } catch (er) { - return false + if (zip) { + source.on('data', chunk => { + zip.write(chunk) + }) + } else { + source.on('data', chunk => { + super[WRITE](chunk) + }) + } } - return range.test(version) } -module.exports = satisfies - - -/***/ }), -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/sort.js": -/*!******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/sort.js ***! - \******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const compareBuild = __webpack_require__(/*! ./compare-build */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare-build.js") -const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) -module.exports = sort - - -/***/ }), - -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/valid.js": -/*!*******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/valid.js ***! - \*******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +Pack.Sync = PackSync -const parse = __webpack_require__(/*! ./parse */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/parse.js") -const valid = (version, options) => { - const v = parse(version, options) - return v ? v.version : null -} -module.exports = valid +module.exports = Pack /***/ }), -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/index.js": -/*!*********************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/index.js ***! - \*********************************************************************************************/ +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/parse.js": +/*!************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/parse.js ***! + \************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// just pre-load all the stuff that index.js lazily exports -const internalRe = __webpack_require__(/*! ./internal/re */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/re.js") -module.exports = { - re: internalRe.re, - src: internalRe.src, - tokens: internalRe.t, - SEMVER_SPEC_VERSION: __webpack_require__(/*! ./internal/constants */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/constants.js").SEMVER_SPEC_VERSION, - SemVer: __webpack_require__(/*! ./classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js"), - compareIdentifiers: __webpack_require__(/*! ./internal/identifiers */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/identifiers.js").compareIdentifiers, - rcompareIdentifiers: __webpack_require__(/*! ./internal/identifiers */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/identifiers.js").rcompareIdentifiers, - parse: __webpack_require__(/*! ./functions/parse */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/parse.js"), - valid: __webpack_require__(/*! ./functions/valid */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/valid.js"), - clean: __webpack_require__(/*! ./functions/clean */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/clean.js"), - inc: __webpack_require__(/*! ./functions/inc */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/inc.js"), - diff: __webpack_require__(/*! ./functions/diff */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/diff.js"), - major: __webpack_require__(/*! ./functions/major */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/major.js"), - minor: __webpack_require__(/*! ./functions/minor */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/minor.js"), - patch: __webpack_require__(/*! ./functions/patch */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/patch.js"), - prerelease: __webpack_require__(/*! ./functions/prerelease */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/prerelease.js"), - compare: __webpack_require__(/*! ./functions/compare */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare.js"), - rcompare: __webpack_require__(/*! ./functions/rcompare */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/rcompare.js"), - compareLoose: __webpack_require__(/*! ./functions/compare-loose */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare-loose.js"), - compareBuild: __webpack_require__(/*! ./functions/compare-build */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/compare-build.js"), - sort: __webpack_require__(/*! ./functions/sort */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/sort.js"), - rsort: __webpack_require__(/*! ./functions/rsort */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/rsort.js"), - gt: __webpack_require__(/*! ./functions/gt */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gt.js"), - lt: __webpack_require__(/*! ./functions/lt */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/lt.js"), - eq: __webpack_require__(/*! ./functions/eq */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/eq.js"), - neq: __webpack_require__(/*! ./functions/neq */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/neq.js"), - gte: __webpack_require__(/*! ./functions/gte */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gte.js"), - lte: __webpack_require__(/*! ./functions/lte */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/lte.js"), - cmp: __webpack_require__(/*! ./functions/cmp */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/cmp.js"), - coerce: __webpack_require__(/*! ./functions/coerce */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/coerce.js"), - Comparator: __webpack_require__(/*! ./classes/comparator */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/comparator.js"), - Range: __webpack_require__(/*! ./classes/range */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js"), - satisfies: __webpack_require__(/*! ./functions/satisfies */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/satisfies.js"), - toComparators: __webpack_require__(/*! ./ranges/to-comparators */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/to-comparators.js"), - maxSatisfying: __webpack_require__(/*! ./ranges/max-satisfying */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/max-satisfying.js"), - minSatisfying: __webpack_require__(/*! ./ranges/min-satisfying */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/min-satisfying.js"), - minVersion: __webpack_require__(/*! ./ranges/min-version */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/min-version.js"), - validRange: __webpack_require__(/*! ./ranges/valid */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/valid.js"), - outside: __webpack_require__(/*! ./ranges/outside */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/outside.js"), - gtr: __webpack_require__(/*! ./ranges/gtr */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/gtr.js"), - ltr: __webpack_require__(/*! ./ranges/ltr */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/ltr.js"), - intersects: __webpack_require__(/*! ./ranges/intersects */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/intersects.js"), -} - - -/***/ }), - -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/constants.js": -/*!**********************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/constants.js ***! - \**********************************************************************************************************/ -/***/ ((module) => { +"use strict"; -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -const SEMVER_SPEC_VERSION = '2.0.0' -const MAX_LENGTH = 256 -const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991 +// this[BUFFER] is the remainder of a chunk if we're waiting for +// the full 512 bytes of a header to come in. We will Buffer.concat() +// it to the next write(), which is a mem copy, but a small one. +// +// this[QUEUE] is a Yallist of entries that haven't been emitted +// yet this can only get filled up if the user keeps write()ing after +// a write() returns false, or does a write() with more than one entry +// +// We don't buffer chunks, we always parse them and either create an +// entry, or push it into the active entry. The ReadEntry class knows +// to throw data away if .ignore=true +// +// Shift entry off the buffer when it emits 'end', and emit 'entry' for +// the next one in the list. +// +// At any time, we're pushing body chunks into the entry at WRITEENTRY, +// and waiting for 'end' on the entry at READENTRY +// +// ignored entries get .resume() called on them straight away -// Max safe segment length for coercion. -const MAX_SAFE_COMPONENT_LENGTH = 16 +const warner = __webpack_require__(/*! ./warn-mixin.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/warn-mixin.js") +const Header = __webpack_require__(/*! ./header.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/header.js") +const EE = __webpack_require__(/*! events */ "events") +const Yallist = __webpack_require__(/*! yallist */ "../../../.yarn/berry/cache/yallist-npm-4.0.0-b493d9e907-9.zip/node_modules/yallist/yallist.js") +const maxMetaEntrySize = 1024 * 1024 +const Entry = __webpack_require__(/*! ./read-entry.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/read-entry.js") +const Pax = __webpack_require__(/*! ./pax.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/pax.js") +const zlib = __webpack_require__(/*! minizlib */ "../../../.yarn/berry/cache/minizlib-npm-2.1.2-ea89cd0cfb-9.zip/node_modules/minizlib/index.js") -module.exports = { - SEMVER_SPEC_VERSION, - MAX_LENGTH, - MAX_SAFE_INTEGER, - MAX_SAFE_COMPONENT_LENGTH -} +const gzipHeader = Buffer.from([0x1f, 0x8b]) +const STATE = Symbol('state') +const WRITEENTRY = Symbol('writeEntry') +const READENTRY = Symbol('readEntry') +const NEXTENTRY = Symbol('nextEntry') +const PROCESSENTRY = Symbol('processEntry') +const EX = Symbol('extendedHeader') +const GEX = Symbol('globalExtendedHeader') +const META = Symbol('meta') +const EMITMETA = Symbol('emitMeta') +const BUFFER = Symbol('buffer') +const QUEUE = Symbol('queue') +const ENDED = Symbol('ended') +const EMITTEDEND = Symbol('emittedEnd') +const EMIT = Symbol('emit') +const UNZIP = Symbol('unzip') +const CONSUMECHUNK = Symbol('consumeChunk') +const CONSUMECHUNKSUB = Symbol('consumeChunkSub') +const CONSUMEBODY = Symbol('consumeBody') +const CONSUMEMETA = Symbol('consumeMeta') +const CONSUMEHEADER = Symbol('consumeHeader') +const CONSUMING = Symbol('consuming') +const BUFFERCONCAT = Symbol('bufferConcat') +const MAYBEEND = Symbol('maybeEnd') +const WRITING = Symbol('writing') +const ABORTED = Symbol('aborted') +const DONE = Symbol('onDone') +const SAW_VALID_ENTRY = Symbol('sawValidEntry') +const SAW_NULL_BLOCK = Symbol('sawNullBlock') +const SAW_EOF = Symbol('sawEOF') +const noop = _ => true -/***/ }), +module.exports = warner(class Parser extends EE { + constructor (opt) { + opt = opt || {} + super(opt) -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/debug.js": -/*!******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/debug.js ***! - \******************************************************************************************************/ -/***/ ((module) => { + this.file = opt.file || '' -const debug = ( - typeof process === 'object' && - process.env && - process.env.NODE_DEBUG && - /\bsemver\b/i.test(process.env.NODE_DEBUG) -) ? (...args) => console.error('SEMVER', ...args) - : () => {} + // set to boolean false when an entry starts. 1024 bytes of \0 + // is technically a valid tarball, albeit a boring one. + this[SAW_VALID_ENTRY] = null -module.exports = debug + // these BADARCHIVE errors can't be detected early. listen on DONE. + this.on(DONE, _ => { + if (this[STATE] === 'begin' || this[SAW_VALID_ENTRY] === false) { + // either less than 1 block of data, or all entries were invalid. + // Either way, probably not even a tarball. + this.warn('TAR_BAD_ARCHIVE', 'Unrecognized archive format') + } + }) + if (opt.ondone) + this.on(DONE, opt.ondone) + else { + this.on(DONE, _ => { + this.emit('prefinish') + this.emit('finish') + this.emit('end') + this.emit('close') + }) + } -/***/ }), + this.strict = !!opt.strict + this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize + this.filter = typeof opt.filter === 'function' ? opt.filter : noop -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/identifiers.js": -/*!************************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/identifiers.js ***! - \************************************************************************************************************/ -/***/ ((module) => { + // have to set this so that streams are ok piping into it + this.writable = true + this.readable = false -const numeric = /^[0-9]+$/ -const compareIdentifiers = (a, b) => { - const anum = numeric.test(a) - const bnum = numeric.test(b) - - if (anum && bnum) { - a = +a - b = +b + this[QUEUE] = new Yallist() + this[BUFFER] = null + this[READENTRY] = null + this[WRITEENTRY] = null + this[STATE] = 'begin' + this[META] = '' + this[EX] = null + this[GEX] = null + this[ENDED] = false + this[UNZIP] = null + this[ABORTED] = false + this[SAW_NULL_BLOCK] = false + this[SAW_EOF] = false + if (typeof opt.onwarn === 'function') + this.on('warn', opt.onwarn) + if (typeof opt.onentry === 'function') + this.on('entry', opt.onentry) } - return a === b ? 0 - : (anum && !bnum) ? -1 - : (bnum && !anum) ? 1 - : a < b ? -1 - : 1 -} - -const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) + [CONSUMEHEADER] (chunk, position) { + if (this[SAW_VALID_ENTRY] === null) + this[SAW_VALID_ENTRY] = false + let header + try { + header = new Header(chunk, position, this[EX], this[GEX]) + } catch (er) { + return this.warn('TAR_ENTRY_INVALID', er) + } -module.exports = { - compareIdentifiers, - rcompareIdentifiers -} + if (header.nullBlock) { + if (this[SAW_NULL_BLOCK]) { + this[SAW_EOF] = true + // ending an archive with no entries. pointless, but legal. + if (this[STATE] === 'begin') + this[STATE] = 'header' + this[EMIT]('eof') + } else { + this[SAW_NULL_BLOCK] = true + this[EMIT]('nullBlock') + } + } else { + this[SAW_NULL_BLOCK] = false + if (!header.cksumValid) + this.warn('TAR_ENTRY_INVALID', 'checksum failure', {header}) + else if (!header.path) + this.warn('TAR_ENTRY_INVALID', 'path is required', {header}) + else { + const type = header.type + if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) + this.warn('TAR_ENTRY_INVALID', 'linkpath required', {header}) + else if (!/^(Symbolic)?Link$/.test(type) && header.linkpath) + this.warn('TAR_ENTRY_INVALID', 'linkpath forbidden', {header}) + else { + const entry = this[WRITEENTRY] = new Entry(header, this[EX], this[GEX]) + // we do this for meta & ignored entries as well, because they + // are still valid tar, or else we wouldn't know to ignore them + if (!this[SAW_VALID_ENTRY]) { + if (entry.remain) { + // this might be the one! + const onend = () => { + if (!entry.invalid) + this[SAW_VALID_ENTRY] = true + } + entry.on('end', onend) + } else + this[SAW_VALID_ENTRY] = true + } -/***/ }), + if (entry.meta) { + if (entry.size > this.maxMetaEntrySize) { + entry.ignore = true + this[EMIT]('ignoredEntry', entry) + this[STATE] = 'ignore' + entry.resume() + } else if (entry.size > 0) { + this[META] = '' + entry.on('data', c => this[META] += c) + this[STATE] = 'meta' + } + } else { + this[EX] = null + entry.ignore = entry.ignore || !this.filter(entry.path, entry) -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/re.js": -/*!***************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/re.js ***! - \***************************************************************************************************/ -/***/ ((module, exports, __webpack_require__) => { + if (entry.ignore) { + // probably valid, just not something we care about + this[EMIT]('ignoredEntry', entry) + this[STATE] = entry.remain ? 'ignore' : 'header' + entry.resume() + } else { + if (entry.remain) + this[STATE] = 'body' + else { + this[STATE] = 'header' + entry.end() + } -const { MAX_SAFE_COMPONENT_LENGTH } = __webpack_require__(/*! ./constants */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/constants.js") -const debug = __webpack_require__(/*! ./debug */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/internal/debug.js") -exports = module.exports = {} + if (!this[READENTRY]) { + this[QUEUE].push(entry) + this[NEXTENTRY]() + } else + this[QUEUE].push(entry) + } + } + } + } + } + } -// The actual regexps go on exports.re -const re = exports.re = [] -const src = exports.src = [] -const t = exports.t = {} -let R = 0 + [PROCESSENTRY] (entry) { + let go = true -const createToken = (name, value, isGlobal) => { - const index = R++ - debug(index, value) - t[name] = index - src[index] = value - re[index] = new RegExp(value, isGlobal ? 'g' : undefined) -} + if (!entry) { + this[READENTRY] = null + go = false + } else if (Array.isArray(entry)) + this.emit.apply(this, entry) + else { + this[READENTRY] = entry + this.emit('entry', entry) + if (!entry.emittedEnd) { + entry.on('end', _ => this[NEXTENTRY]()) + go = false + } + } -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. + return go + } -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. + [NEXTENTRY] () { + do {} while (this[PROCESSENTRY](this[QUEUE].shift())) -createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') -createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') + if (!this[QUEUE].length) { + // At this point, there's nothing in the queue, but we may have an + // entry which is being consumed (readEntry). + // If we don't, then we definitely can handle more data. + // If we do, and either it's flowing, or it has never had any data + // written to it, then it needs more. + // The only other possibility is that it has returned false from a + // write() call, so we wait for the next drain to continue. + const re = this[READENTRY] + const drainNow = !re || re.flowing || re.size === re.remain + if (drainNow) { + if (!this[WRITING]) + this.emit('drain') + } else + re.once('drain', _ => this.emit('drain')) + } + } -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. + [CONSUMEBODY] (chunk, position) { + // write up to but no more than writeEntry.blockRemain + const entry = this[WRITEENTRY] + const br = entry.blockRemain + const c = (br >= chunk.length && position === 0) ? chunk + : chunk.slice(position, position + br) -createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') + entry.write(c) -// ## Main Version -// Three dot-separated numeric identifiers. + if (!entry.blockRemain) { + this[STATE] = 'header' + this[WRITEENTRY] = null + entry.end() + } -createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})`) + return c.length + } -createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})`) + [CONSUMEMETA] (chunk, position) { + const entry = this[WRITEENTRY] + const ret = this[CONSUMEBODY](chunk, position) -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. + // if we finished, then the entry is reset + if (!this[WRITEENTRY]) + this[EMITMETA](entry) -createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] -}|${src[t.NONNUMERICIDENTIFIER]})`) + return ret + } -createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] -}|${src[t.NONNUMERICIDENTIFIER]})`) + [EMIT] (ev, data, extra) { + if (!this[QUEUE].length && !this[READENTRY]) + this.emit(ev, data, extra) + else + this[QUEUE].push([ev, data, extra]) + } -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. + [EMITMETA] (entry) { + this[EMIT]('meta', this[META]) + switch (entry.type) { + case 'ExtendedHeader': + case 'OldExtendedHeader': + this[EX] = Pax.parse(this[META], this[EX], false) + break -createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] -}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) + case 'GlobalExtendedHeader': + this[GEX] = Pax.parse(this[META], this[GEX], true) + break -createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] -}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) + case 'NextFileHasLongPath': + case 'OldGnuLongPath': + this[EX] = this[EX] || Object.create(null) + this[EX].path = this[META].replace(/\0.*/, '') + break -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. + case 'NextFileHasLongLinkpath': + this[EX] = this[EX] || Object.create(null) + this[EX].linkpath = this[META].replace(/\0.*/, '') + break -createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') + /* istanbul ignore next */ + default: throw new Error('unknown meta: ' + entry.type) + } + } -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. + abort (error) { + this[ABORTED] = true + this.emit('abort', error) + // always throws, even in non-strict mode + this.warn('TAR_ABORT', error, { recoverable: false }) + } -createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] -}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) + write (chunk) { + if (this[ABORTED]) + return -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. + // first write, might be gzipped + if (this[UNZIP] === null && chunk) { + if (this[BUFFER]) { + chunk = Buffer.concat([this[BUFFER], chunk]) + this[BUFFER] = null + } + if (chunk.length < gzipHeader.length) { + this[BUFFER] = chunk + return true + } + for (let i = 0; this[UNZIP] === null && i < gzipHeader.length; i++) { + if (chunk[i] !== gzipHeader[i]) + this[UNZIP] = false + } + if (this[UNZIP] === null) { + const ended = this[ENDED] + this[ENDED] = false + this[UNZIP] = new zlib.Unzip() + this[UNZIP].on('data', chunk => this[CONSUMECHUNK](chunk)) + this[UNZIP].on('error', er => this.abort(er)) + this[UNZIP].on('end', _ => { + this[ENDED] = true + this[CONSUMECHUNK]() + }) + this[WRITING] = true + const ret = this[UNZIP][ended ? 'end' : 'write'](chunk) + this[WRITING] = false + return ret + } + } -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. + this[WRITING] = true + if (this[UNZIP]) + this[UNZIP].write(chunk) + else + this[CONSUMECHUNK](chunk) + this[WRITING] = false -createToken('FULLPLAIN', `v?${src[t.MAINVERSION] -}${src[t.PRERELEASE]}?${ - src[t.BUILD]}?`) + // return false if there's a queue, or if the current entry isn't flowing + const ret = + this[QUEUE].length ? false : + this[READENTRY] ? this[READENTRY].flowing : + true -createToken('FULL', `^${src[t.FULLPLAIN]}$`) + // if we have no queue, then that means a clogged READENTRY + if (!ret && !this[QUEUE].length) + this[READENTRY].once('drain', _ => this.emit('drain')) -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] -}${src[t.PRERELEASELOOSE]}?${ - src[t.BUILD]}?`) + return ret + } -createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) + [BUFFERCONCAT] (c) { + if (c && !this[ABORTED]) + this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c + } -createToken('GTLT', '((?:<|>)?=?)') + [MAYBEEND] () { + if (this[ENDED] && + !this[EMITTEDEND] && + !this[ABORTED] && + !this[CONSUMING]) { + this[EMITTEDEND] = true + const entry = this[WRITEENTRY] + if (entry && entry.blockRemain) { + // truncated, likely a damaged file + const have = this[BUFFER] ? this[BUFFER].length : 0 + this.warn('TAR_BAD_ARCHIVE', `Truncated input (needed ${ + entry.blockRemain} more bytes, only ${have} available)`, {entry}) + if (this[BUFFER]) + entry.write(this[BUFFER]) + entry.end() + } + this[EMIT](DONE) + } + } -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) -createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) + [CONSUMECHUNK] (chunk) { + if (this[CONSUMING]) + this[BUFFERCONCAT](chunk) + else if (!chunk && !this[BUFFER]) + this[MAYBEEND]() + else { + this[CONSUMING] = true + if (this[BUFFER]) { + this[BUFFERCONCAT](chunk) + const c = this[BUFFER] + this[BUFFER] = null + this[CONSUMECHUNKSUB](c) + } else + this[CONSUMECHUNKSUB](chunk) -createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:${src[t.PRERELEASE]})?${ - src[t.BUILD]}?` + - `)?)?`) + while (this[BUFFER] && + this[BUFFER].length >= 512 && + !this[ABORTED] && + !this[SAW_EOF]) { + const c = this[BUFFER] + this[BUFFER] = null + this[CONSUMECHUNKSUB](c) + } + this[CONSUMING] = false + } -createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:${src[t.PRERELEASELOOSE]})?${ - src[t.BUILD]}?` + - `)?)?`) + if (!this[BUFFER] || this[ENDED]) + this[MAYBEEND]() + } -createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) -createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) + [CONSUMECHUNKSUB] (chunk) { + // we know that we are in CONSUMING mode, so anything written goes into + // the buffer. Advance the position and put any remainder in the buffer. + let position = 0 + const length = chunk.length + while (position + 512 <= length && !this[ABORTED] && !this[SAW_EOF]) { + switch (this[STATE]) { + case 'begin': + case 'header': + this[CONSUMEHEADER](chunk, position) + position += 512 + break -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -createToken('COERCE', `${'(^|[^\\d])' + - '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:$|[^\\d])`) -createToken('COERCERTL', src[t.COERCE], true) + case 'ignore': + case 'body': + position += this[CONSUMEBODY](chunk, position) + break -// Tilde ranges. -// Meaning is "reasonably at or greater than" -createToken('LONETILDE', '(?:~>?)') + case 'meta': + position += this[CONSUMEMETA](chunk, position) + break -createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) -exports.tildeTrimReplace = '$1~' + /* istanbul ignore next */ + default: + throw new Error('invalid state: ' + this[STATE]) + } + } -createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) -createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) + if (position < length) { + if (this[BUFFER]) + this[BUFFER] = Buffer.concat([chunk.slice(position), this[BUFFER]]) + else + this[BUFFER] = chunk.slice(position) + } + } -// Caret ranges. -// Meaning is "at least and backwards compatible with" -createToken('LONECARET', '(?:\\^)') + end (chunk) { + if (!this[ABORTED]) { + if (this[UNZIP]) + this[UNZIP].end(chunk) + else { + this[ENDED] = true + this.write(chunk) + } + } + } +}) -createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) -exports.caretTrimReplace = '$1^' -createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) -createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) +/***/ }), -// A simple gt/lt/eq thing, or just "" to indicate "any version" -createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) -createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/path-reservations.js": +/*!************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/path-reservations.js ***! + \************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] -}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) -exports.comparatorTrimReplace = '$1$2$3' +// A path exclusive reservation system +// reserve([list, of, paths], fn) +// When the fn is first in line for all its paths, it +// is called with a cb that clears the reservation. +// +// Used by async unpack to avoid clobbering paths in use, +// while still allowing maximal safe parallelization. -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAIN]})` + - `\\s*$`) +const assert = __webpack_require__(/*! assert */ "assert") +const normalize = __webpack_require__(/*! ./normalize-unicode.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-unicode.js") +const stripSlashes = __webpack_require__(/*! ./strip-trailing-slashes.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-trailing-slashes.js") +const { join } = __webpack_require__(/*! path */ "path") -createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAINLOOSE]})` + - `\\s*$`) +const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform +const isWindows = platform === 'win32' -// Star ranges basically just allow anything at all. -createToken('STAR', '(<|>)?=?\\s*\\*') +module.exports = () => { + // path => [function or Set] + // A Set object means a directory reservation + // A fn is a direct reservation on that path + const queues = new Map() + // fn => {paths:[path,...], dirs:[path, ...]} + const reservations = new Map() -/***/ }), - -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/gtr.js": -/*!**************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/gtr.js ***! - \**************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -// Determine if version is greater than all the versions possible in the range. -const outside = __webpack_require__(/*! ./outside */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/outside.js") -const gtr = (version, range, options) => outside(version, range, '>', options) -module.exports = gtr + // return a set of parent dirs for a given path + // '/a/b/c/d' -> ['/', '/a', '/a/b', '/a/b/c', '/a/b/c/d'] + const getDirs = path => { + const dirs = path.split('/').slice(0, -1).reduce((set, path) => { + if (set.length) + path = join(set[set.length - 1], path) + set.push(path || '/') + return set + }, []) + return dirs + } + // functions currently running + const running = new Set() -/***/ }), + // return the queues for each path the function cares about + // fn => {paths, dirs} + const getQueues = fn => { + const res = reservations.get(fn) + /* istanbul ignore if - unpossible */ + if (!res) + throw new Error('function does not have any path reservations') + return { + paths: res.paths.map(path => queues.get(path)), + dirs: [...res.dirs].map(path => queues.get(path)), + } + } -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/intersects.js": -/*!*********************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/intersects.js ***! - \*********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + // check if fn is first in line for all its paths, and is + // included in the first set for all its dir queues + const check = fn => { + const {paths, dirs} = getQueues(fn) + return paths.every(q => q[0] === fn) && + dirs.every(q => q[0] instanceof Set && q[0].has(fn)) + } -const Range = __webpack_require__(/*! ../classes/range */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js") -const intersects = (r1, r2, options) => { - r1 = new Range(r1, options) - r2 = new Range(r2, options) - return r1.intersects(r2) -} -module.exports = intersects + // run the function if it's first in line and not already running + const run = fn => { + if (running.has(fn) || !check(fn)) + return false + running.add(fn) + fn(() => clear(fn)) + return true + } + const clear = fn => { + if (!running.has(fn)) + return false -/***/ }), + const { paths, dirs } = reservations.get(fn) + const next = new Set() -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/ltr.js": -/*!**************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/ltr.js ***! - \**************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + paths.forEach(path => { + const q = queues.get(path) + assert.equal(q[0], fn) + if (q.length === 1) + queues.delete(path) + else { + q.shift() + if (typeof q[0] === 'function') + next.add(q[0]) + else + q[0].forEach(fn => next.add(fn)) + } + }) -const outside = __webpack_require__(/*! ./outside */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/outside.js") -// Determine if version is less than all the versions possible in the range -const ltr = (version, range, options) => outside(version, range, '<', options) -module.exports = ltr + dirs.forEach(dir => { + const q = queues.get(dir) + assert(q[0] instanceof Set) + if (q[0].size === 1 && q.length === 1) + queues.delete(dir) + else if (q[0].size === 1) { + q.shift() + // must be a function or else the Set would've been reused + next.add(q[0]) + } else + q[0].delete(fn) + }) + running.delete(fn) -/***/ }), + next.forEach(fn => run(fn)) + return true + } -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/max-satisfying.js": -/*!*************************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/max-satisfying.js ***! - \*************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + const reserve = (paths, fn) => { + // collide on matches across case and unicode normalization + // On windows, thanks to the magic of 8.3 shortnames, it is fundamentally + // impossible to determine whether two paths refer to the same thing on + // disk, without asking the kernel for a shortname. + // So, we just pretend that every path matches every other path here, + // effectively removing all parallelization on windows. + paths = isWindows ? ['win32 parallelization disabled'] : paths.map(p => { + // don't need normPath, because we skip this entirely for windows + return normalize(stripSlashes(join(p))).toLowerCase() + }) -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const Range = __webpack_require__(/*! ../classes/range */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js") + const dirs = new Set( + paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b)) + ) + reservations.set(fn, {dirs, paths}) + paths.forEach(path => { + const q = queues.get(path) + if (!q) + queues.set(path, [fn]) + else + q.push(fn) + }) + dirs.forEach(dir => { + const q = queues.get(dir) + if (!q) + queues.set(dir, [new Set([fn])]) + else if (q[q.length - 1] instanceof Set) + q[q.length - 1].add(fn) + else + q.push(new Set([fn])) + }) -const maxSatisfying = (versions, range, options) => { - let max = null - let maxSV = null - let rangeObj = null - try { - rangeObj = new Range(range, options) - } catch (er) { - return null + return run(fn) } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!max || maxSV.compare(v) === -1) { - // compare(max, v, true) - max = v - maxSV = new SemVer(max, options) - } - } - }) - return max + + return { check, reserve } } -module.exports = maxSatisfying /***/ }), -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/min-satisfying.js": -/*!*************************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/min-satisfying.js ***! - \*************************************************************************************************************/ +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/pax.js": +/*!**********************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/pax.js ***! + \**********************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const Range = __webpack_require__(/*! ../classes/range */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js") -const minSatisfying = (versions, range, options) => { - let min = null - let minSV = null - let rangeObj = null - try { - rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v - minSV = new SemVer(min, options) - } - } - }) - return min -} -module.exports = minSatisfying +"use strict"; +const Header = __webpack_require__(/*! ./header.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/header.js") +const path = __webpack_require__(/*! path */ "path") -/***/ }), +class Pax { + constructor (obj, global) { + this.atime = obj.atime || null + this.charset = obj.charset || null + this.comment = obj.comment || null + this.ctime = obj.ctime || null + this.gid = obj.gid || null + this.gname = obj.gname || null + this.linkpath = obj.linkpath || null + this.mtime = obj.mtime || null + this.path = obj.path || null + this.size = obj.size || null + this.uid = obj.uid || null + this.uname = obj.uname || null + this.dev = obj.dev || null + this.ino = obj.ino || null + this.nlink = obj.nlink || null + this.global = global || false + } -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/min-version.js": -/*!**********************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/min-version.js ***! - \**********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + encode () { + const body = this.encodeBody() + if (body === '') + return null -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const Range = __webpack_require__(/*! ../classes/range */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js") -const gt = __webpack_require__(/*! ../functions/gt */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gt.js") + const bodyLen = Buffer.byteLength(body) + // round up to 512 bytes + // add 512 for header + const bufLen = 512 * Math.ceil(1 + bodyLen / 512) + const buf = Buffer.allocUnsafe(bufLen) -const minVersion = (range, loose) => { - range = new Range(range, loose) + // 0-fill the header section, it might not hit every field + for (let i = 0; i < 512; i++) + buf[i] = 0 - let minver = new SemVer('0.0.0') - if (range.test(minver)) { - return minver - } + new Header({ + // XXX split the path + // then the path should be PaxHeader + basename, but less than 99, + // prepend with the dirname + path: ('PaxHeader/' + path.basename(this.path)).slice(0, 99), + mode: this.mode || 0o644, + uid: this.uid || null, + gid: this.gid || null, + size: bodyLen, + mtime: this.mtime || null, + type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader', + linkpath: '', + uname: this.uname || '', + gname: this.gname || '', + devmaj: 0, + devmin: 0, + atime: this.atime || null, + ctime: this.ctime || null, + }).encode(buf) - minver = new SemVer('0.0.0-0') - if (range.test(minver)) { - return minver - } + buf.write(body, 512, bodyLen, 'utf8') - minver = null - for (let i = 0; i < range.set.length; ++i) { - const comparators = range.set[i] + // null pad after the body + for (let i = bodyLen + 512; i < buf.length; i++) + buf[i] = 0 - comparators.forEach((comparator) => { - // Clone to avoid manipulating the comparator's semver object. - const compver = new SemVer(comparator.semver.version) - switch (comparator.operator) { - case '>': - if (compver.prerelease.length === 0) { - compver.patch++ - } else { - compver.prerelease.push(0) - } - compver.raw = compver.format() - /* fallthrough */ - case '': - case '>=': - if (!minver || gt(minver, compver)) { - minver = compver - } - break - case '<': - case '<=': - /* Ignore maximum versions */ - break - /* istanbul ignore next */ - default: - throw new Error(`Unexpected operation: ${comparator.operator}`) - } - }) + return buf } - if (minver && range.test(minver)) { - return minver + encodeBody () { + return ( + this.encodeField('path') + + this.encodeField('ctime') + + this.encodeField('atime') + + this.encodeField('dev') + + this.encodeField('ino') + + this.encodeField('nlink') + + this.encodeField('charset') + + this.encodeField('comment') + + this.encodeField('gid') + + this.encodeField('gname') + + this.encodeField('linkpath') + + this.encodeField('mtime') + + this.encodeField('size') + + this.encodeField('uid') + + this.encodeField('uname') + ) } - return null + encodeField (field) { + if (this[field] === null || this[field] === undefined) + return '' + const v = this[field] instanceof Date ? this[field].getTime() / 1000 + : this[field] + const s = ' ' + + (field === 'dev' || field === 'ino' || field === 'nlink' + ? 'SCHILY.' : '') + + field + '=' + v + '\n' + const byteLen = Buffer.byteLength(s) + // the digits includes the length of the digits in ascii base-10 + // so if it's 9 characters, then adding 1 for the 9 makes it 10 + // which makes it 11 chars. + let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1 + if (byteLen + digits >= Math.pow(10, digits)) + digits += 1 + const len = digits + byteLen + return len + s + } } -module.exports = minVersion +Pax.parse = (string, ex, g) => new Pax(merge(parseKV(string), ex), g) -/***/ }), - -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/outside.js": -/*!******************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/outside.js ***! - \******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +const merge = (a, b) => + b ? Object.keys(a).reduce((s, k) => (s[k] = a[k], s), b) : a -const SemVer = __webpack_require__(/*! ../classes/semver */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/semver.js") -const Comparator = __webpack_require__(/*! ../classes/comparator */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/comparator.js") -const {ANY} = Comparator -const Range = __webpack_require__(/*! ../classes/range */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js") -const satisfies = __webpack_require__(/*! ../functions/satisfies */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/satisfies.js") -const gt = __webpack_require__(/*! ../functions/gt */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gt.js") -const lt = __webpack_require__(/*! ../functions/lt */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/lt.js") -const lte = __webpack_require__(/*! ../functions/lte */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/lte.js") -const gte = __webpack_require__(/*! ../functions/gte */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/functions/gte.js") +const parseKV = string => + string + .replace(/\n$/, '') + .split('\n') + .reduce(parseKVLine, Object.create(null)) -const outside = (version, range, hilo, options) => { - version = new SemVer(version, options) - range = new Range(range, options) +const parseKVLine = (set, line) => { + const n = parseInt(line, 10) - let gtfn, ltefn, ltfn, comp, ecomp - switch (hilo) { - case '>': - gtfn = gt - ltefn = lte - ltfn = lt - comp = '>' - ecomp = '>=' - break - case '<': - gtfn = lt - ltefn = gte - ltfn = gt - comp = '<' - ecomp = '<=' - break - default: - throw new TypeError('Must provide a hilo val of "<" or ">"') - } + // XXX Values with \n in them will fail this. + // Refactor to not be a naive line-by-line parse. + if (n !== Buffer.byteLength(line) + 1) + return set - // If it satisifes the range it is not outside - if (satisfies(version, range, options)) { - return false - } + line = line.substr((n + ' ').length) + const kv = line.split('=') + const k = kv.shift().replace(/^SCHILY\.(dev|ino|nlink)/, '$1') + if (!k) + return set - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. + const v = kv.join('=') + set[k] = /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k) + ? new Date(v * 1000) + : /^[0-9]+$/.test(v) ? +v + : v + return set +} - for (let i = 0; i < range.set.length; ++i) { - const comparators = range.set[i] +module.exports = Pax - let high = null - let low = null - comparators.forEach((comparator) => { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0') - } - high = high || comparator - low = low || comparator - if (gtfn(comparator.semver, high.semver, options)) { - high = comparator - } else if (ltfn(comparator.semver, low.semver, options)) { - low = comparator - } - }) +/***/ }), - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false - } +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/read-entry.js": +/*!*****************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/read-entry.js ***! + \*****************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false - } - } - return true -} +"use strict"; -module.exports = outside +const MiniPass = __webpack_require__(/*! minipass */ "../../../.yarn/berry/cache/minipass-npm-3.3.5-a555b091e7-9.zip/node_modules/minipass/index.js") +const normPath = __webpack_require__(/*! ./normalize-windows-path.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-windows-path.js") +const SLURP = Symbol('slurp') +module.exports = class ReadEntry extends MiniPass { + constructor (header, ex, gex) { + super() + // read entries always start life paused. this is to avoid the + // situation where Minipass's auto-ending empty streams results + // in an entry ending before we're ready for it. + this.pause() + this.extended = ex + this.globalExtended = gex + this.header = header + this.startBlockSize = 512 * Math.ceil(header.size / 512) + this.blockRemain = this.startBlockSize + this.remain = header.size + this.type = header.type + this.meta = false + this.ignore = false + switch (this.type) { + case 'File': + case 'OldFile': + case 'Link': + case 'SymbolicLink': + case 'CharacterDevice': + case 'BlockDevice': + case 'Directory': + case 'FIFO': + case 'ContiguousFile': + case 'GNUDumpDir': + break -/***/ }), + case 'NextFileHasLongLinkpath': + case 'NextFileHasLongPath': + case 'OldGnuLongPath': + case 'GlobalExtendedHeader': + case 'ExtendedHeader': + case 'OldExtendedHeader': + this.meta = true + break -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/to-comparators.js": -/*!*************************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/to-comparators.js ***! - \*************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + // NOTE: gnutar and bsdtar treat unrecognized types as 'File' + // it may be worth doing the same, but with a warning. + default: + this.ignore = true + } -const Range = __webpack_require__(/*! ../classes/range */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js") + this.path = normPath(header.path) + this.mode = header.mode + if (this.mode) + this.mode = this.mode & 0o7777 + this.uid = header.uid + this.gid = header.gid + this.uname = header.uname + this.gname = header.gname + this.size = header.size + this.mtime = header.mtime + this.atime = header.atime + this.ctime = header.ctime + this.linkpath = normPath(header.linkpath) + this.uname = header.uname + this.gname = header.gname -// Mostly just for testing and legacy API reasons -const toComparators = (range, options) => - new Range(range, options).set - .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) + if (ex) + this[SLURP](ex) + if (gex) + this[SLURP](gex, true) + } -module.exports = toComparators + write (data) { + const writeLen = data.length + if (writeLen > this.blockRemain) + throw new Error('writing more to entry than is appropriate') + const r = this.remain + const br = this.blockRemain + this.remain = Math.max(0, r - writeLen) + this.blockRemain = Math.max(0, br - writeLen) + if (this.ignore) + return true -/***/ }), + if (r >= writeLen) + return super.write(data) -/***/ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/valid.js": -/*!****************************************************************************************************!*\ - !*** ./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/ranges/valid.js ***! - \****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + // r < writeLen + return super.write(data.slice(0, r)) + } -const Range = __webpack_require__(/*! ../classes/range */ "./.yarn/cache/semver-npm-7.1.3-1741df6bad-a7700fd039.zip/node_modules/semver/classes/range.js") -const validRange = (range, options) => { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, options).range || '*' - } catch (er) { - return null + [SLURP] (ex, global) { + for (const k in ex) { + // we slurp in everything except for the path attribute in + // a global extended header, because that's weird. + if (ex[k] !== null && ex[k] !== undefined && + !(global && k === 'path')) + this[k] = k === 'path' || k === 'linkpath' ? normPath(ex[k]) : ex[k] + } } } -module.exports = validRange /***/ }), -/***/ "./.yarn/cache/supports-color-npm-7.1.0-df2ba1e338-899480ac85.zip/node_modules/supports-color/index.js": -/*!*************************************************************************************************************!*\ - !*** ./.yarn/cache/supports-color-npm-7.1.0-df2ba1e338-899480ac85.zip/node_modules/supports-color/index.js ***! - \*************************************************************************************************************/ +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/replace.js": +/*!**************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/replace.js ***! + \**************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; -const os = __webpack_require__(/*! os */ "os"); -const tty = __webpack_require__(/*! tty */ "tty"); -const hasFlag = __webpack_require__(/*! has-flag */ "./.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip/node_modules/has-flag/index.js"); - -const {env} = process; - -let forceColor; -if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false') || - hasFlag('color=never')) { - forceColor = 0; -} else if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - forceColor = 1; -} - -if ('FORCE_COLOR' in env) { - if (env.FORCE_COLOR === 'true') { - forceColor = 1; - } else if (env.FORCE_COLOR === 'false') { - forceColor = 0; - } else { - forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); - } -} -function translateLevel(level) { - if (level === 0) { - return false; - } +// tar -r +const hlo = __webpack_require__(/*! ./high-level-opt.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/high-level-opt.js") +const Pack = __webpack_require__(/*! ./pack.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/pack.js") +const fs = __webpack_require__(/*! fs */ "fs") +const fsm = __webpack_require__(/*! fs-minipass */ "../../../.yarn/berry/cache/fs-minipass-npm-2.1.0-501ef87306-9.zip/node_modules/fs-minipass/index.js") +const t = __webpack_require__(/*! ./list.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/list.js") +const path = __webpack_require__(/*! path */ "path") - return { - level, - hasBasic: true, - has256: level >= 2, - has16m: level >= 3 - }; -} +// starting at the head of the file, read a Header +// If the checksum is invalid, that's our position to start writing +// If it is, jump forward by the specified size (round up to 512) +// and try again. +// Write the new Pack stream starting there. -function supportsColor(haveStream, streamIsTTY) { - if (forceColor === 0) { - return 0; - } - - if (hasFlag('color=16m') || - hasFlag('color=full') || - hasFlag('color=truecolor')) { - return 3; - } - - if (hasFlag('color=256')) { - return 2; - } - - if (haveStream && !streamIsTTY && forceColor === undefined) { - return 0; - } +const Header = __webpack_require__(/*! ./header.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/header.js") - const min = forceColor || 0; +module.exports = (opt_, files, cb) => { + const opt = hlo(opt_) - if (env.TERM === 'dumb') { - return min; - } + if (!opt.file) + throw new TypeError('file is required') - if (process.platform === 'win32') { - // Windows 10 build 10586 is the first Windows release that supports 256 colors. - // Windows 10 build 14931 is the first release that supports 16m/TrueColor. - const osRelease = os.release().split('.'); - if ( - Number(osRelease[0]) >= 10 && - Number(osRelease[2]) >= 10586 - ) { - return Number(osRelease[2]) >= 14931 ? 3 : 2; - } + if (opt.gzip) + throw new TypeError('cannot append to compressed archives') - return 1; - } + if (!files || !Array.isArray(files) || !files.length) + throw new TypeError('no files or directories specified') - if ('CI' in env) { - if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { - return 1; - } + files = Array.from(files) - return min; - } + return opt.sync ? replaceSync(opt, files) + : replace(opt, files, cb) +} - if ('TEAMCITY_VERSION' in env) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; - } +const replaceSync = (opt, files) => { + const p = new Pack.Sync(opt) - if ('GITHUB_ACTIONS' in env) { - return 1; - } + let threw = true + let fd + let position - if (env.COLORTERM === 'truecolor') { - return 3; - } + try { + try { + fd = fs.openSync(opt.file, 'r+') + } catch (er) { + if (er.code === 'ENOENT') + fd = fs.openSync(opt.file, 'w+') + else + throw er + } - if ('TERM_PROGRAM' in env) { - const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + const st = fs.fstatSync(fd) + const headBuf = Buffer.alloc(512) - switch (env.TERM_PROGRAM) { - case 'iTerm.app': - return version >= 3 ? 3 : 2; - case 'Apple_Terminal': - return 2; - // No default - } - } + POSITION: for (position = 0; position < st.size; position += 512) { + for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) { + bytes = fs.readSync( + fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos + ) - if (/-256(color)?$/i.test(env.TERM)) { - return 2; - } + if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) + throw new Error('cannot append to compressed archives') - if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { - return 1; - } + if (!bytes) + break POSITION + } - if ('COLORTERM' in env) { - return 1; - } + const h = new Header(headBuf) + if (!h.cksumValid) + break + const entryBlockSize = 512 * Math.ceil(h.size / 512) + if (position + entryBlockSize + 512 > st.size) + break + // the 512 for the header we just parsed will be added as well + // also jump ahead all the blocks for the body + position += entryBlockSize + if (opt.mtimeCache) + opt.mtimeCache.set(h.path, h.mtime) + } + threw = false - return min; + streamSync(opt, p, position, fd, files) + } finally { + if (threw) { + try { + fs.closeSync(fd) + } catch (er) {} + } + } } -function getSupportLevel(stream) { - const level = supportsColor(stream, stream && stream.isTTY); - return translateLevel(level); +const streamSync = (opt, p, position, fd, files) => { + const stream = new fsm.WriteStreamSync(opt.file, { + fd: fd, + start: position, + }) + p.pipe(stream) + addFilesSync(p, files) } -module.exports = { - supportsColor: getSupportLevel, - stdout: translateLevel(supportsColor(true, tty.isatty(1))), - stderr: translateLevel(supportsColor(true, tty.isatty(2))) -}; - - -/***/ }), - -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/index.js": -/*!***************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/index.js ***! - \***************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -// high-level commands -exports.c = exports.create = __webpack_require__(/*! ./lib/create.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/create.js") -exports.r = exports.replace = __webpack_require__(/*! ./lib/replace.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/replace.js") -exports.t = exports.list = __webpack_require__(/*! ./lib/list.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/list.js") -exports.u = exports.update = __webpack_require__(/*! ./lib/update.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/update.js") -exports.x = exports.extract = __webpack_require__(/*! ./lib/extract.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/extract.js") - -// classes -exports.Pack = __webpack_require__(/*! ./lib/pack.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/pack.js") -exports.Unpack = __webpack_require__(/*! ./lib/unpack.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/unpack.js") -exports.Parse = __webpack_require__(/*! ./lib/parse.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/parse.js") -exports.ReadEntry = __webpack_require__(/*! ./lib/read-entry.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/read-entry.js") -exports.WriteEntry = __webpack_require__(/*! ./lib/write-entry.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/write-entry.js") -exports.Header = __webpack_require__(/*! ./lib/header.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/header.js") -exports.Pax = __webpack_require__(/*! ./lib/pax.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/pax.js") -exports.types = __webpack_require__(/*! ./lib/types.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/types.js") - - -/***/ }), - -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/create.js": -/*!********************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/create.js ***! - \********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - +const replace = (opt, files, cb) => { + files = Array.from(files) + const p = new Pack(opt) -// tar -c -const hlo = __webpack_require__(/*! ./high-level-opt.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/high-level-opt.js") + const getPos = (fd, size, cb_) => { + const cb = (er, pos) => { + if (er) + fs.close(fd, _ => cb_(er)) + else + cb_(null, pos) + } -const Pack = __webpack_require__(/*! ./pack.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/pack.js") -const fs = __webpack_require__(/*! fs */ "fs") -const fsm = __webpack_require__(/*! fs-minipass */ "./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip/node_modules/fs-minipass/index.js") -const t = __webpack_require__(/*! ./list.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/list.js") -const path = __webpack_require__(/*! path */ "path") + let position = 0 + if (size === 0) + return cb(null, 0) -const c = module.exports = (opt_, files, cb) => { - if (typeof files === 'function') - cb = files + let bufPos = 0 + const headBuf = Buffer.alloc(512) + const onread = (er, bytes) => { + if (er) + return cb(er) + bufPos += bytes + if (bufPos < 512 && bytes) { + return fs.read( + fd, headBuf, bufPos, headBuf.length - bufPos, + position + bufPos, onread + ) + } - if (Array.isArray(opt_)) - files = opt_, opt_ = {} + if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) + return cb(new Error('cannot append to compressed archives')) - if (!files || !Array.isArray(files) || !files.length) - throw new TypeError('no files or directories specified') + // truncated header + if (bufPos < 512) + return cb(null, position) - files = Array.from(files) + const h = new Header(headBuf) + if (!h.cksumValid) + return cb(null, position) - const opt = hlo(opt_) + const entryBlockSize = 512 * Math.ceil(h.size / 512) + if (position + entryBlockSize + 512 > size) + return cb(null, position) - if (opt.sync && typeof cb === 'function') - throw new TypeError('callback not supported for sync tar functions') + position += entryBlockSize + 512 + if (position >= size) + return cb(null, position) - if (!opt.file && typeof cb === 'function') - throw new TypeError('callback only supported with file option') + if (opt.mtimeCache) + opt.mtimeCache.set(h.path, h.mtime) + bufPos = 0 + fs.read(fd, headBuf, 0, 512, position, onread) + } + fs.read(fd, headBuf, 0, 512, position, onread) + } - return opt.file && opt.sync ? createFileSync(opt, files) - : opt.file ? createFile(opt, files, cb) - : opt.sync ? createSync(opt, files) - : create(opt, files) -} + const promise = new Promise((resolve, reject) => { + p.on('error', reject) + let flag = 'r+' + const onopen = (er, fd) => { + if (er && er.code === 'ENOENT' && flag === 'r+') { + flag = 'w+' + return fs.open(opt.file, flag, onopen) + } -const createFileSync = (opt, files) => { - const p = new Pack.Sync(opt) - const stream = new fsm.WriteStreamSync(opt.file, { - mode: opt.mode || 0o666 - }) - p.pipe(stream) - addFilesSync(p, files) -} + if (er) + return reject(er) -const createFile = (opt, files, cb) => { - const p = new Pack(opt) - const stream = new fsm.WriteStream(opt.file, { - mode: opt.mode || 0o666 - }) - p.pipe(stream) + fs.fstat(fd, (er, st) => { + if (er) + return fs.close(fd, () => reject(er)) - const promise = new Promise((res, rej) => { - stream.on('error', rej) - stream.on('close', res) - p.on('error', rej) + getPos(fd, st.size, (er, position) => { + if (er) + return reject(er) + const stream = new fsm.WriteStream(opt.file, { + fd: fd, + start: position, + }) + p.pipe(stream) + stream.on('error', reject) + stream.on('close', resolve) + addFilesAsync(p, files) + }) + }) + } + fs.open(opt.file, flag, onopen) }) - addFilesAsync(p, files) - return cb ? promise.then(cb, cb) : promise } const addFilesSync = (p, files) => { files.forEach(file => { - if (file.charAt(0) === '@') + if (file.charAt(0) === '@') { t({ file: path.resolve(p.cwd, file.substr(1)), sync: true, noResume: true, - onentry: entry => p.add(entry) + onentry: entry => p.add(entry), }) - else + } else p.add(file) }) p.end() @@ -9281,5338 +8512,8605 @@ const addFilesSync = (p, files) => { const addFilesAsync = (p, files) => { while (files.length) { const file = files.shift() - if (file.charAt(0) === '@') + if (file.charAt(0) === '@') { return t({ file: path.resolve(p.cwd, file.substr(1)), noResume: true, - onentry: entry => p.add(entry) + onentry: entry => p.add(entry), }).then(_ => addFilesAsync(p, files)) - else + } else p.add(file) } p.end() } -const createSync = (opt, files) => { - const p = new Pack.Sync(opt) - addFilesSync(p, files) - return p -} -const create = (opt, files) => { - const p = new Pack(opt) - addFilesAsync(p, files) - return p +/***/ }), + +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-absolute-path.js": +/*!**************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-absolute-path.js ***! + \**************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +// unix absolute paths are also absolute on win32, so we use this for both +const { isAbsolute, parse } = (__webpack_require__(/*! path */ "path").win32) + +// returns [root, stripped] +// Note that windows will think that //x/y/z/a has a "root" of //x/y, and in +// those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip / +// explicitly if it's the first character. +// drive-specific relative paths on Windows get their root stripped off even +// though they are not absolute, so `c:../foo` becomes ['c:', '../foo'] +module.exports = path => { + let r = '' + + let parsed = parse(path) + while (isAbsolute(path) || parsed.root) { + // windows will think that //x/y/z has a "root" of //x/y/ + // but strip the //?/C:/ off of //?/C:/path + const root = path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ? '/' + : parsed.root + path = path.substr(root.length) + r += root + parsed = parse(path) + } + return [r, path] } /***/ }), -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/extract.js": -/*!*********************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/extract.js ***! - \*********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-trailing-slashes.js": +/*!*****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-trailing-slashes.js ***! + \*****************************************************************************************************************/ +/***/ ((module) => { -"use strict"; +// warning: extremely hot code path. +// This has been meticulously optimized for use +// within npm install on large package trees. +// Do not edit without careful benchmarking. +module.exports = str => { + let i = str.length - 1 + let slashesStart = -1 + while (i > -1 && str.charAt(i) === '/') { + slashesStart = i + i-- + } + return slashesStart === -1 ? str : str.slice(0, slashesStart) +} -// tar -x -const hlo = __webpack_require__(/*! ./high-level-opt.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/high-level-opt.js") -const Unpack = __webpack_require__(/*! ./unpack.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/unpack.js") -const fs = __webpack_require__(/*! fs */ "fs") -const fsm = __webpack_require__(/*! fs-minipass */ "./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip/node_modules/fs-minipass/index.js") -const path = __webpack_require__(/*! path */ "path") +/***/ }), -const x = module.exports = (opt_, files, cb) => { - if (typeof opt_ === 'function') - cb = opt_, files = null, opt_ = {} - else if (Array.isArray(opt_)) - files = opt_, opt_ = {} +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/types.js": +/*!************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/types.js ***! + \************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { - if (typeof files === 'function') - cb = files, files = null +"use strict"; - if (!files) - files = [] - else - files = Array.from(files) +// map types from key to human-friendly name +exports.name = new Map([ + ['0', 'File'], + // same as File + ['', 'OldFile'], + ['1', 'Link'], + ['2', 'SymbolicLink'], + // Devices and FIFOs aren't fully supported + // they are parsed, but skipped when unpacking + ['3', 'CharacterDevice'], + ['4', 'BlockDevice'], + ['5', 'Directory'], + ['6', 'FIFO'], + // same as File + ['7', 'ContiguousFile'], + // pax headers + ['g', 'GlobalExtendedHeader'], + ['x', 'ExtendedHeader'], + // vendor-specific stuff + // skip + ['A', 'SolarisACL'], + // like 5, but with data, which should be skipped + ['D', 'GNUDumpDir'], + // metadata only, skip + ['I', 'Inode'], + // data = link path of next file + ['K', 'NextFileHasLongLinkpath'], + // data = path of next file + ['L', 'NextFileHasLongPath'], + // skip + ['M', 'ContinuationFile'], + // like L + ['N', 'OldGnuLongPath'], + // skip + ['S', 'SparseFile'], + // skip + ['V', 'TapeVolumeHeader'], + // like x + ['X', 'OldExtendedHeader'], +]) - const opt = hlo(opt_) +// map the other direction +exports.code = new Map(Array.from(exports.name).map(kv => [kv[1], kv[0]])) - if (opt.sync && typeof cb === 'function') - throw new TypeError('callback not supported for sync tar functions') - if (!opt.file && typeof cb === 'function') - throw new TypeError('callback only supported with file option') +/***/ }), - if (files.length) - filesFilter(opt, files) +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/unpack.js": +/*!*************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/unpack.js ***! + \*************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - return opt.file && opt.sync ? extractFileSync(opt) - : opt.file ? extractFile(opt, cb) - : opt.sync ? extractSync(opt) - : extract(opt) -} +"use strict"; -// construct a filter that limits the file entries listed -// include child entries if a dir is included -const filesFilter = (opt, files) => { - const map = new Map(files.map(f => [f.replace(/\/+$/, ''), true])) - const filter = opt.filter - const mapHas = (file, r) => { - const root = r || path.parse(file).root || '.' - const ret = file === root ? false - : map.has(file) ? map.get(file) - : mapHas(path.dirname(file), root) +// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet. +// but the path reservations are required to avoid race conditions where +// parallelized unpack ops may mess with one another, due to dependencies +// (like a Link depending on its target) or destructive operations (like +// clobbering an fs object to create one of a different type.) - map.set(file, ret) - return ret - } +const assert = __webpack_require__(/*! assert */ "assert") +const Parser = __webpack_require__(/*! ./parse.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/parse.js") +const fs = __webpack_require__(/*! fs */ "fs") +const fsm = __webpack_require__(/*! fs-minipass */ "../../../.yarn/berry/cache/fs-minipass-npm-2.1.0-501ef87306-9.zip/node_modules/fs-minipass/index.js") +const path = __webpack_require__(/*! path */ "path") +const mkdir = __webpack_require__(/*! ./mkdir.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/mkdir.js") +const wc = __webpack_require__(/*! ./winchars.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/winchars.js") +const pathReservations = __webpack_require__(/*! ./path-reservations.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/path-reservations.js") +const stripAbsolutePath = __webpack_require__(/*! ./strip-absolute-path.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-absolute-path.js") +const normPath = __webpack_require__(/*! ./normalize-windows-path.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-windows-path.js") +const stripSlash = __webpack_require__(/*! ./strip-trailing-slashes.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-trailing-slashes.js") +const normalize = __webpack_require__(/*! ./normalize-unicode.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-unicode.js") - opt.filter = filter - ? (file, entry) => filter(file, entry) && mapHas(file.replace(/\/+$/, '')) - : file => mapHas(file.replace(/\/+$/, '')) -} +const ONENTRY = Symbol('onEntry') +const CHECKFS = Symbol('checkFs') +const CHECKFS2 = Symbol('checkFs2') +const PRUNECACHE = Symbol('pruneCache') +const ISREUSABLE = Symbol('isReusable') +const MAKEFS = Symbol('makeFs') +const FILE = Symbol('file') +const DIRECTORY = Symbol('directory') +const LINK = Symbol('link') +const SYMLINK = Symbol('symlink') +const HARDLINK = Symbol('hardlink') +const UNSUPPORTED = Symbol('unsupported') +const CHECKPATH = Symbol('checkPath') +const MKDIR = Symbol('mkdir') +const ONERROR = Symbol('onError') +const PENDING = Symbol('pending') +const PEND = Symbol('pend') +const UNPEND = Symbol('unpend') +const ENDED = Symbol('ended') +const MAYBECLOSE = Symbol('maybeClose') +const SKIP = Symbol('skip') +const DOCHOWN = Symbol('doChown') +const UID = Symbol('uid') +const GID = Symbol('gid') +const CHECKED_CWD = Symbol('checkedCwd') +const crypto = __webpack_require__(/*! crypto */ "crypto") +const getFlag = __webpack_require__(/*! ./get-write-flag.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/get-write-flag.js") +const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform +const isWindows = platform === 'win32' -const extractFileSync = opt => { - const u = new Unpack.Sync(opt) +// Unlinks on Windows are not atomic. +// +// This means that if you have a file entry, followed by another +// file entry with an identical name, and you cannot re-use the file +// (because it's a hardlink, or because unlink:true is set, or it's +// Windows, which does not have useful nlink values), then the unlink +// will be committed to the disk AFTER the new file has been written +// over the old one, deleting the new file. +// +// To work around this, on Windows systems, we rename the file and then +// delete the renamed file. It's a sloppy kludge, but frankly, I do not +// know of a better way to do this, given windows' non-atomic unlink +// semantics. +// +// See: https://github.com/npm/node-tar/issues/183 +/* istanbul ignore next */ +const unlinkFile = (path, cb) => { + if (!isWindows) + return fs.unlink(path, cb) - const file = opt.file - let threw = true - let fd - const stat = fs.statSync(file) - // This trades a zero-byte read() syscall for a stat - // However, it will usually result in less memory allocation - const readSize = opt.maxReadSize || 16*1024*1024 - const stream = new fsm.ReadStreamSync(file, { - readSize: readSize, - size: stat.size + const name = path + '.DELETE.' + crypto.randomBytes(16).toString('hex') + fs.rename(path, name, er => { + if (er) + return cb(er) + fs.unlink(name, cb) }) - stream.pipe(u) } -const extractFile = (opt, cb) => { - const u = new Unpack(opt) - const readSize = opt.maxReadSize || 16*1024*1024 - - const file = opt.file - const p = new Promise((resolve, reject) => { - u.on('error', reject) - u.on('close', resolve) +/* istanbul ignore next */ +const unlinkFileSync = path => { + if (!isWindows) + return fs.unlinkSync(path) - // This trades a zero-byte read() syscall for a stat - // However, it will usually result in less memory allocation - fs.stat(file, (er, stat) => { - if (er) - reject(er) - else { - const stream = new fsm.ReadStream(file, { - readSize: readSize, - size: stat.size - }) - stream.on('error', reject) - stream.pipe(u) - } - }) - }) - return cb ? p.then(cb, cb) : p + const name = path + '.DELETE.' + crypto.randomBytes(16).toString('hex') + fs.renameSync(path, name) + fs.unlinkSync(name) } -const extractSync = opt => { - return new Unpack.Sync(opt) +// this.gid, entry.gid, this.processUid +const uint32 = (a, b, c) => + a === a >>> 0 ? a + : b === b >>> 0 ? b + : c + +// clear the cache if it's a case-insensitive unicode-squashing match. +// we can't know if the current file system is case-sensitive or supports +// unicode fully, so we check for similarity on the maximally compatible +// representation. Err on the side of pruning, since all it's doing is +// preventing lstats, and it's not the end of the world if we get a false +// positive. +// Note that on windows, we always drop the entire cache whenever a +// symbolic link is encountered, because 8.3 filenames are impossible +// to reason about, and collisions are hazards rather than just failures. +const cacheKeyNormalize = path => normalize(stripSlash(normPath(path))) + .toLowerCase() + +const pruneCache = (cache, abs) => { + abs = cacheKeyNormalize(abs) + for (const path of cache.keys()) { + const pnorm = cacheKeyNormalize(path) + if (pnorm === abs || pnorm.indexOf(abs + '/') === 0) + cache.delete(path) + } } -const extract = opt => { - return new Unpack(opt) +const dropCache = cache => { + for (const key of cache.keys()) + cache.delete(key) } +class Unpack extends Parser { + constructor (opt) { + if (!opt) + opt = {} -/***/ }), + opt.ondone = _ => { + this[ENDED] = true + this[MAYBECLOSE]() + } -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/get-write-flag.js": -/*!****************************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/get-write-flag.js ***! - \****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + super(opt) -// Get the appropriate flag to use for creating files -// We use fmap on Windows platforms for files less than -// 512kb. This is a fairly low limit, but avoids making -// things slower in some cases. Since most of what this -// library is used for is extracting tarballs of many -// relatively small files in npm packages and the like, -// it can be a big boost on Windows platforms. -// Only supported in Node v12.9.0 and above. -const platform = process.env.__FAKE_PLATFORM__ || process.platform -const isWindows = platform === 'win32' -const fs = global.__FAKE_TESTING_FS__ || __webpack_require__(/*! fs */ "fs") + this[CHECKED_CWD] = false -/* istanbul ignore next */ -const { O_CREAT, O_TRUNC, O_WRONLY, UV_FS_O_FILEMAP = 0 } = fs.constants + this.reservations = pathReservations() -const fMapEnabled = isWindows && !!UV_FS_O_FILEMAP -const fMapLimit = 512 * 1024 -const fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY -module.exports = !fMapEnabled ? () => 'w' - : size => size < fMapLimit ? fMapFlag : 'w' + this.transform = typeof opt.transform === 'function' ? opt.transform : null + this.writable = true + this.readable = false -/***/ }), + this[PENDING] = 0 + this[ENDED] = false -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/header.js": -/*!********************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/header.js ***! - \********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + this.dirCache = opt.dirCache || new Map() -"use strict"; - -// parse a 512-byte header block to a data object, or vice-versa -// encode returns `true` if a pax extended header is needed, because -// the data could not be faithfully encoded in a simple header. -// (Also, check header.needPax to see if it needs a pax header.) - -const types = __webpack_require__(/*! ./types.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/types.js") -const pathModule = __webpack_require__(/*! path */ "path").posix -const large = __webpack_require__(/*! ./large-numbers.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/large-numbers.js") + if (typeof opt.uid === 'number' || typeof opt.gid === 'number') { + // need both or neither + if (typeof opt.uid !== 'number' || typeof opt.gid !== 'number') + throw new TypeError('cannot set owner without number uid and gid') + if (opt.preserveOwner) { + throw new TypeError( + 'cannot preserve owner in archive and also set owner explicitly') + } + this.uid = opt.uid + this.gid = opt.gid + this.setOwner = true + } else { + this.uid = null + this.gid = null + this.setOwner = false + } -const SLURP = Symbol('slurp') -const TYPE = Symbol('type') + // default true for root + if (opt.preserveOwner === undefined && typeof opt.uid !== 'number') + this.preserveOwner = process.getuid && process.getuid() === 0 + else + this.preserveOwner = !!opt.preserveOwner -class Header { - constructor (data, off, ex, gex) { - this.cksumValid = false - this.needPax = false - this.nullBlock = false + this.processUid = (this.preserveOwner || this.setOwner) && process.getuid ? + process.getuid() : null + this.processGid = (this.preserveOwner || this.setOwner) && process.getgid ? + process.getgid() : null - this.block = null - this.path = null - this.mode = null - this.uid = null - this.gid = null - this.size = null - this.mtime = null - this.cksum = null - this[TYPE] = '0' - this.linkpath = null - this.uname = null - this.gname = null - this.devmaj = 0 - this.devmin = 0 - this.atime = null - this.ctime = null + // mostly just for testing, but useful in some cases. + // Forcibly trigger a chown on every entry, no matter what + this.forceChown = opt.forceChown === true - if (Buffer.isBuffer(data)) - this.decode(data, off || 0, ex, gex) - else if (data) - this.set(data) - } + // turn >= off + 512)) - throw new Error('need 512 bytes for header') + // do not unpack over ANY files + this.keep = !!opt.keep - this.path = decString(buf, off, 100) - this.mode = decNumber(buf, off + 100, 8) - this.uid = decNumber(buf, off + 108, 8) - this.gid = decNumber(buf, off + 116, 8) - this.size = decNumber(buf, off + 124, 12) - this.mtime = decDate(buf, off + 136, 12) - this.cksum = decNumber(buf, off + 148, 12) + // do not set mtime/atime of extracted entries + this.noMtime = !!opt.noMtime - // if we have extended or global extended headers, apply them now - // See https://github.com/npm/node-tar/pull/187 - this[SLURP](ex) - this[SLURP](gex, true) + // allow .., absolute path entries, and unpacking through symlinks + // without this, warn and skip .., relativize absolutes, and error + // on symlinks in extraction path + this.preservePaths = !!opt.preservePaths - // old tar versions marked dirs as a file with a trailing / - this[TYPE] = decString(buf, off + 156, 1) - if (this[TYPE] === '') - this[TYPE] = '0' - if (this[TYPE] === '0' && this.path.substr(-1) === '/') - this[TYPE] = '5' + // unlink files and links before writing. This breaks existing hard + // links, and removes symlink directories rather than erroring + this.unlink = !!opt.unlink - // tar implementations sometimes incorrectly put the stat(dir).size - // as the size in the tarball, even though Directory entries are - // not able to have any body at all. In the very rare chance that - // it actually DOES have a body, we weren't going to do anything with - // it anyway, and it'll just be a warning about an invalid header. - if (this[TYPE] === '5') - this.size = 0 + this.cwd = normPath(path.resolve(opt.cwd || process.cwd())) + this.strip = +opt.strip || 0 + // if we're not chmodding, then we don't need the process umask + this.processUmask = opt.noChmod ? 0 : process.umask() + this.umask = typeof opt.umask === 'number' ? opt.umask : this.processUmask - this.linkpath = decString(buf, off + 157, 100) - if (buf.slice(off + 257, off + 265).toString() === 'ustar\u000000') { - this.uname = decString(buf, off + 265, 32) - this.gname = decString(buf, off + 297, 32) - this.devmaj = decNumber(buf, off + 329, 8) - this.devmin = decNumber(buf, off + 337, 8) - if (buf[off + 475] !== 0) { - // definitely a prefix, definitely >130 chars. - const prefix = decString(buf, off + 345, 155) - this.path = prefix + '/' + this.path - } else { - const prefix = decString(buf, off + 345, 130) - if (prefix) - this.path = prefix + '/' + this.path - this.atime = decDate(buf, off + 476, 12) - this.ctime = decDate(buf, off + 488, 12) - } - } + // default mode for dirs created as parents + this.dmode = opt.dmode || (0o0777 & (~this.umask)) + this.fmode = opt.fmode || (0o0666 & (~this.umask)) - let sum = 8 * 0x20 - for (let i = off; i < off + 148; i++) { - sum += buf[i] - } - for (let i = off + 156; i < off + 512; i++) { - sum += buf[i] - } - this.cksumValid = sum === this.cksum - if (this.cksum === null && sum === 8 * 0x20) - this.nullBlock = true + this.on('entry', entry => this[ONENTRY](entry)) } - [SLURP] (ex, global) { - for (let k in ex) { - // we slurp in everything except for the path attribute in - // a global extended header, because that's weird. - if (ex[k] !== null && ex[k] !== undefined && - !(global && k === 'path')) - this[k] = ex[k] - } + // a bad or damaged archive is a warning for Parser, but an error + // when extracting. Mark those errors as unrecoverable, because + // the Unpack contract cannot be met. + warn (code, msg, data = {}) { + if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') + data.recoverable = false + return super.warn(code, msg, data) } - encode (buf, off) { - if (!buf) { - buf = this.block = Buffer.alloc(512) - off = 0 + [MAYBECLOSE] () { + if (this[ENDED] && this[PENDING] === 0) { + this.emit('prefinish') + this.emit('finish') + this.emit('end') + this.emit('close') } + } - if (!off) - off = 0 + [CHECKPATH] (entry) { + if (this.strip) { + const parts = normPath(entry.path).split('/') + if (parts.length < this.strip) + return false + entry.path = parts.slice(this.strip).join('/') - if (!(buf.length >= off + 512)) - throw new Error('need 512 bytes for header') + if (entry.type === 'Link') { + const linkparts = normPath(entry.linkpath).split('/') + if (linkparts.length >= this.strip) + entry.linkpath = linkparts.slice(this.strip).join('/') + else + return false + } + } - const prefixSize = this.ctime || this.atime ? 130 : 155 - const split = splitPrefix(this.path || '', prefixSize) - const path = split[0] - const prefix = split[1] - this.needPax = split[2] + if (!this.preservePaths) { + const p = normPath(entry.path) + const parts = p.split('/') + if (parts.includes('..') || isWindows && /^[a-z]:\.\.$/i.test(parts[0])) { + this.warn('TAR_ENTRY_ERROR', `path contains '..'`, { + entry, + path: p, + }) + return false + } - this.needPax = encString(buf, off, 100, path) || this.needPax - this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax - this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax - this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax - this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax - this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax - buf[off + 156] = this[TYPE].charCodeAt(0) - this.needPax = encString(buf, off + 157, 100, this.linkpath) || this.needPax - buf.write('ustar\u000000', off + 257, 8) - this.needPax = encString(buf, off + 265, 32, this.uname) || this.needPax - this.needPax = encString(buf, off + 297, 32, this.gname) || this.needPax - this.needPax = encNumber(buf, off + 329, 8, this.devmaj) || this.needPax - this.needPax = encNumber(buf, off + 337, 8, this.devmin) || this.needPax - this.needPax = encString(buf, off + 345, prefixSize, prefix) || this.needPax - if (buf[off + 475] !== 0) - this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax - else { - this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax - this.needPax = encDate(buf, off + 476, 12, this.atime) || this.needPax - this.needPax = encDate(buf, off + 488, 12, this.ctime) || this.needPax + // strip off the root + const [root, stripped] = stripAbsolutePath(p) + if (root) { + entry.path = stripped + this.warn('TAR_ENTRY_INFO', `stripping ${root} from absolute path`, { + entry, + path: p, + }) + } } - let sum = 8 * 0x20 - for (let i = off; i < off + 148; i++) { - sum += buf[i] - } - for (let i = off + 156; i < off + 512; i++) { - sum += buf[i] + if (path.isAbsolute(entry.path)) + entry.absolute = normPath(path.resolve(entry.path)) + else + entry.absolute = normPath(path.resolve(this.cwd, entry.path)) + + // if we somehow ended up with a path that escapes the cwd, and we are + // not in preservePaths mode, then something is fishy! This should have + // been prevented above, so ignore this for coverage. + /* istanbul ignore if - defense in depth */ + if (!this.preservePaths && + entry.absolute.indexOf(this.cwd + '/') !== 0 && + entry.absolute !== this.cwd) { + this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', { + entry, + path: normPath(entry.path), + resolvedPath: entry.absolute, + cwd: this.cwd, + }) + return false } - this.cksum = sum - encNumber(buf, off + 148, 8, this.cksum) - this.cksumValid = true - return this.needPax - } + // an archive can set properties on the extraction directory, but it + // may not replace the cwd with a different kind of thing entirely. + if (entry.absolute === this.cwd && + entry.type !== 'Directory' && + entry.type !== 'GNUDumpDir') + return false - set (data) { - for (let i in data) { - if (data[i] !== null && data[i] !== undefined) - this[i] = data[i] + // only encode : chars that aren't drive letter indicators + if (this.win32) { + const { root: aRoot } = path.win32.parse(entry.absolute) + entry.absolute = aRoot + wc.encode(entry.absolute.substr(aRoot.length)) + const { root: pRoot } = path.win32.parse(entry.path) + entry.path = pRoot + wc.encode(entry.path.substr(pRoot.length)) } - } - get type () { - return types.name.get(this[TYPE]) || this[TYPE] + return true } - get typeKey () { - return this[TYPE] - } + [ONENTRY] (entry) { + if (!this[CHECKPATH](entry)) + return entry.resume() - set type (type) { - if (types.code.has(type)) - this[TYPE] = types.code.get(type) - else - this[TYPE] = type - } -} + assert.equal(typeof entry.absolute, 'string') -const splitPrefix = (p, prefixSize) => { - const pathSize = 100 - let pp = p - let prefix = '' - let ret - const root = pathModule.parse(p).root || '.' - - if (Buffer.byteLength(pp) < pathSize) - ret = [pp, prefix, false] - else { - // first set prefix to the dir, and path to the base - prefix = pathModule.dirname(pp) - pp = pathModule.basename(pp) + switch (entry.type) { + case 'Directory': + case 'GNUDumpDir': + if (entry.mode) + entry.mode = entry.mode | 0o700 - do { - // both fit! - if (Buffer.byteLength(pp) <= pathSize && - Buffer.byteLength(prefix) <= prefixSize) - ret = [pp, prefix, false] + case 'File': + case 'OldFile': + case 'ContiguousFile': + case 'Link': + case 'SymbolicLink': + return this[CHECKFS](entry) - // prefix fits in prefix, but path doesn't fit in path - else if (Buffer.byteLength(pp) > pathSize && - Buffer.byteLength(prefix) <= prefixSize) - ret = [pp.substr(0, pathSize - 1), prefix, true] + case 'CharacterDevice': + case 'BlockDevice': + case 'FIFO': + default: + return this[UNSUPPORTED](entry) + } + } - else { - // make path take a bit from prefix - pp = pathModule.join(pathModule.basename(prefix), pp) - prefix = pathModule.dirname(prefix) - } - } while (prefix !== root && !ret) + [ONERROR] (er, entry) { + // Cwd has to exist, or else nothing works. That's serious. + // Other errors are warnings, which raise the error in strict + // mode, but otherwise continue on. + if (er.name === 'CwdError') + this.emit('error', er) + else { + this.warn('TAR_ENTRY_ERROR', er, {entry}) + this[UNPEND]() + entry.resume() + } + } - // at this point, found no resolution, just truncate - if (!ret) - ret = [p.substr(0, pathSize - 1), '', true] + [MKDIR] (dir, mode, cb) { + mkdir(normPath(dir), { + uid: this.uid, + gid: this.gid, + processUid: this.processUid, + processGid: this.processGid, + umask: this.processUmask, + preserve: this.preservePaths, + unlink: this.unlink, + cache: this.dirCache, + cwd: this.cwd, + mode: mode, + noChmod: this.noChmod, + }, cb) } - return ret -} -const decString = (buf, off, size) => - buf.slice(off, off + size).toString('utf8').replace(/\0.*/, '') + [DOCHOWN] (entry) { + // in preserve owner mode, chown if the entry doesn't match process + // in set owner mode, chown if setting doesn't match process + return this.forceChown || + this.preserveOwner && + (typeof entry.uid === 'number' && entry.uid !== this.processUid || + typeof entry.gid === 'number' && entry.gid !== this.processGid) + || + (typeof this.uid === 'number' && this.uid !== this.processUid || + typeof this.gid === 'number' && this.gid !== this.processGid) + } -const decDate = (buf, off, size) => - numToDate(decNumber(buf, off, size)) + [UID] (entry) { + return uint32(this.uid, entry.uid, this.processUid) + } -const numToDate = num => num === null ? null : new Date(num * 1000) + [GID] (entry) { + return uint32(this.gid, entry.gid, this.processGid) + } -const decNumber = (buf, off, size) => - buf[off] & 0x80 ? large.parse(buf.slice(off, off + size)) - : decSmallNumber(buf, off, size) + [FILE] (entry, fullyDone) { + const mode = entry.mode & 0o7777 || this.fmode + const stream = new fsm.WriteStream(entry.absolute, { + flags: getFlag(entry.size), + mode: mode, + autoClose: false, + }) + stream.on('error', er => { + if (stream.fd) + fs.close(stream.fd, () => {}) + + // flush all the data out so that we aren't left hanging + // if the error wasn't actually fatal. otherwise the parse + // is blocked, and we never proceed. + stream.write = () => true + this[ONERROR](er, entry) + fullyDone() + }) -const nanNull = value => isNaN(value) ? null : value + let actions = 1 + const done = er => { + if (er) { + /* istanbul ignore else - we should always have a fd by now */ + if (stream.fd) + fs.close(stream.fd, () => {}) -const decSmallNumber = (buf, off, size) => - nanNull(parseInt( - buf.slice(off, off + size) - .toString('utf8').replace(/\0.*$/, '').trim(), 8)) + this[ONERROR](er, entry) + fullyDone() + return + } -// the maximum encodable as a null-terminated octal, by field size -const MAXNUM = { - 12: 0o77777777777, - 8 : 0o7777777 -} + if (--actions === 0) { + fs.close(stream.fd, er => { + if (er) + this[ONERROR](er, entry) + else + this[UNPEND]() + fullyDone() + }) + } + } -const encNumber = (buf, off, size, number) => - number === null ? false : - number > MAXNUM[size] || number < 0 - ? (large.encode(number, buf.slice(off, off + size)), true) - : (encSmallNumber(buf, off, size, number), false) + stream.on('finish', _ => { + // if futimes fails, try utimes + // if utimes fails, fail with the original error + // same for fchown/chown + const abs = entry.absolute + const fd = stream.fd -const encSmallNumber = (buf, off, size, number) => - buf.write(octalString(number, size), off, size, 'ascii') + if (entry.mtime && !this.noMtime) { + actions++ + const atime = entry.atime || new Date() + const mtime = entry.mtime + fs.futimes(fd, atime, mtime, er => + er ? fs.utimes(abs, atime, mtime, er2 => done(er2 && er)) + : done()) + } -const octalString = (number, size) => - padOctal(Math.floor(number).toString(8), size) + if (this[DOCHOWN](entry)) { + actions++ + const uid = this[UID](entry) + const gid = this[GID](entry) + fs.fchown(fd, uid, gid, er => + er ? fs.chown(abs, uid, gid, er2 => done(er2 && er)) + : done()) + } -const padOctal = (string, size) => - (string.length === size - 1 ? string - : new Array(size - string.length - 1).join('0') + string + ' ') + '\0' + done() + }) -const encDate = (buf, off, size, date) => - date === null ? false : - encNumber(buf, off, size, date.getTime() / 1000) + const tx = this.transform ? this.transform(entry) || entry : entry + if (tx !== entry) { + tx.on('error', er => { + this[ONERROR](er, entry) + fullyDone() + }) + entry.pipe(tx) + } + tx.pipe(stream) + } -// enough to fill the longest string we've got -const NULLS = new Array(156).join('\0') -// pad with nulls, return true if it's longer or non-ascii -const encString = (buf, off, size, string) => - string === null ? false : - (buf.write(string + NULLS, off, size, 'utf8'), - string.length !== Buffer.byteLength(string) || string.length > size) + [DIRECTORY] (entry, fullyDone) { + const mode = entry.mode & 0o7777 || this.dmode + this[MKDIR](entry.absolute, mode, er => { + if (er) { + this[ONERROR](er, entry) + fullyDone() + return + } -module.exports = Header + let actions = 1 + const done = _ => { + if (--actions === 0) { + fullyDone() + this[UNPEND]() + entry.resume() + } + } + if (entry.mtime && !this.noMtime) { + actions++ + fs.utimes(entry.absolute, entry.atime || new Date(), entry.mtime, done) + } -/***/ }), + if (this[DOCHOWN](entry)) { + actions++ + fs.chown(entry.absolute, this[UID](entry), this[GID](entry), done) + } -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/high-level-opt.js": -/*!****************************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/high-level-opt.js ***! - \****************************************************************************************************/ -/***/ ((module) => { + done() + }) + } -"use strict"; + [UNSUPPORTED] (entry) { + entry.unsupported = true + this.warn('TAR_ENTRY_UNSUPPORTED', + `unsupported entry type: ${entry.type}`, {entry}) + entry.resume() + } + [SYMLINK] (entry, done) { + this[LINK](entry, entry.linkpath, 'symlink', done) + } -// turn tar(1) style args like `C` into the more verbose things like `cwd` + [HARDLINK] (entry, done) { + const linkpath = normPath(path.resolve(this.cwd, entry.linkpath)) + this[LINK](entry, linkpath, 'link', done) + } -const argmap = new Map([ - ['C', 'cwd'], - ['f', 'file'], - ['z', 'gzip'], - ['P', 'preservePaths'], - ['U', 'unlink'], - ['strip-components', 'strip'], - ['stripComponents', 'strip'], - ['keep-newer', 'newer'], - ['keepNewer', 'newer'], - ['keep-newer-files', 'newer'], - ['keepNewerFiles', 'newer'], - ['k', 'keep'], - ['keep-existing', 'keep'], - ['keepExisting', 'keep'], - ['m', 'noMtime'], - ['no-mtime', 'noMtime'], - ['p', 'preserveOwner'], - ['L', 'follow'], - ['h', 'follow'] -]) + [PEND] () { + this[PENDING]++ + } -const parse = module.exports = opt => opt ? Object.keys(opt).map(k => [ - argmap.has(k) ? argmap.get(k) : k, opt[k] -]).reduce((set, kv) => (set[kv[0]] = kv[1], set), Object.create(null)) : {} + [UNPEND] () { + this[PENDING]-- + this[MAYBECLOSE]() + } + [SKIP] (entry) { + this[UNPEND]() + entry.resume() + } -/***/ }), + // Check if we can reuse an existing filesystem entry safely and + // overwrite it, rather than unlinking and recreating + // Windows doesn't report a useful nlink, so we just never reuse entries + [ISREUSABLE] (entry, st) { + return entry.type === 'File' && + !this.unlink && + st.isFile() && + st.nlink <= 1 && + !isWindows + } -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/large-numbers.js": -/*!***************************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/large-numbers.js ***! - \***************************************************************************************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -// Tar can encode large and negative numbers using a leading byte of -// 0xff for negative, and 0x80 for positive. - -const encode = exports.encode = (num, buf) => { - if (!Number.isSafeInteger(num)) - // The number is so large that javascript cannot represent it with integer - // precision. - throw Error('cannot encode number outside of javascript safe integer range') - else if (num < 0) - encodeNegative(num, buf) - else - encodePositive(num, buf) - return buf -} - -const encodePositive = (num, buf) => { - buf[0] = 0x80 - - for (var i = buf.length; i > 1; i--) { - buf[i-1] = num & 0xff - num = Math.floor(num / 0x100) + // check if a thing is there, and if so, try to clobber it + [CHECKFS] (entry) { + this[PEND]() + const paths = [entry.path] + if (entry.linkpath) + paths.push(entry.linkpath) + this.reservations.reserve(paths, done => this[CHECKFS2](entry, done)) } -} -const encodeNegative = (num, buf) => { - buf[0] = 0xff - var flipped = false - num = num * -1 - for (var i = buf.length; i > 1; i--) { - var byte = num & 0xff - num = Math.floor(num / 0x100) - if (flipped) - buf[i-1] = onesComp(byte) - else if (byte === 0) - buf[i-1] = 0 - else { - flipped = true - buf[i-1] = twosComp(byte) - } + [PRUNECACHE] (entry) { + // if we are not creating a directory, and the path is in the dirCache, + // then that means we are about to delete the directory we created + // previously, and it is no longer going to be a directory, and neither + // is any of its children. + // If a symbolic link is encountered, all bets are off. There is no + // reasonable way to sanitize the cache in such a way we will be able to + // avoid having filesystem collisions. If this happens with a non-symlink + // entry, it'll just fail to unpack, but a symlink to a directory, using an + // 8.3 shortname or certain unicode attacks, can evade detection and lead + // to arbitrary writes to anywhere on the system. + if (entry.type === 'SymbolicLink') + dropCache(this.dirCache) + else if (entry.type !== 'Directory') + pruneCache(this.dirCache, entry.absolute) } -} - -const parse = exports.parse = (buf) => { - var post = buf[buf.length - 1] - var pre = buf[0] - var value; - if (pre === 0x80) - value = pos(buf.slice(1, buf.length)) - else if (pre === 0xff) - value = twos(buf) - else - throw Error('invalid base256 encoding') - - if (!Number.isSafeInteger(value)) - // The number is so large that javascript cannot represent it with integer - // precision. - throw Error('parsed number outside of javascript safe integer range') - return value -} + [CHECKFS2] (entry, fullyDone) { + this[PRUNECACHE](entry) -const twos = (buf) => { - var len = buf.length - var sum = 0 - var flipped = false - for (var i = len - 1; i > -1; i--) { - var byte = buf[i] - var f - if (flipped) - f = onesComp(byte) - else if (byte === 0) - f = byte - else { - flipped = true - f = twosComp(byte) + const done = er => { + this[PRUNECACHE](entry) + fullyDone(er) } - if (f !== 0) - sum -= f * Math.pow(256, len - i - 1) - } - return sum -} - -const pos = (buf) => { - var len = buf.length - var sum = 0 - for (var i = len - 1; i > -1; i--) { - var byte = buf[i] - if (byte !== 0) - sum += byte * Math.pow(256, len - i - 1) - } - return sum -} - -const onesComp = byte => (0xff ^ byte) & 0xff - -const twosComp = byte => ((0xff ^ byte) + 1) & 0xff - - -/***/ }), - -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/list.js": -/*!******************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/list.js ***! - \******************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; - - -// XXX: This shares a lot in common with extract.js -// maybe some DRY opportunity here? - -// tar -t -const hlo = __webpack_require__(/*! ./high-level-opt.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/high-level-opt.js") -const Parser = __webpack_require__(/*! ./parse.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/parse.js") -const fs = __webpack_require__(/*! fs */ "fs") -const fsm = __webpack_require__(/*! fs-minipass */ "./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip/node_modules/fs-minipass/index.js") -const path = __webpack_require__(/*! path */ "path") - -const t = module.exports = (opt_, files, cb) => { - if (typeof opt_ === 'function') - cb = opt_, files = null, opt_ = {} - else if (Array.isArray(opt_)) - files = opt_, opt_ = {} - - if (typeof files === 'function') - cb = files, files = null + const checkCwd = () => { + this[MKDIR](this.cwd, this.dmode, er => { + if (er) { + this[ONERROR](er, entry) + done() + return + } + this[CHECKED_CWD] = true + start() + }) + } - if (!files) - files = [] - else - files = Array.from(files) + const start = () => { + if (entry.absolute !== this.cwd) { + const parent = normPath(path.dirname(entry.absolute)) + if (parent !== this.cwd) { + return this[MKDIR](parent, this.dmode, er => { + if (er) { + this[ONERROR](er, entry) + done() + return + } + afterMakeParent() + }) + } + } + afterMakeParent() + } - const opt = hlo(opt_) + const afterMakeParent = () => { + fs.lstat(entry.absolute, (lstatEr, st) => { + if (st && (this.keep || this.newer && st.mtime > entry.mtime)) { + this[SKIP](entry) + done() + return + } + if (lstatEr || this[ISREUSABLE](entry, st)) + return this[MAKEFS](null, entry, done) - if (opt.sync && typeof cb === 'function') - throw new TypeError('callback not supported for sync tar functions') + if (st.isDirectory()) { + if (entry.type === 'Directory') { + const needChmod = !this.noChmod && + entry.mode && + (st.mode & 0o7777) !== entry.mode + const afterChmod = er => this[MAKEFS](er, entry, done) + if (!needChmod) + return afterChmod() + return fs.chmod(entry.absolute, entry.mode, afterChmod) + } + // Not a dir entry, have to remove it. + // NB: the only way to end up with an entry that is the cwd + // itself, in such a way that == does not detect, is a + // tricky windows absolute path with UNC or 8.3 parts (and + // preservePaths:true, or else it will have been stripped). + // In that case, the user has opted out of path protections + // explicitly, so if they blow away the cwd, c'est la vie. + if (entry.absolute !== this.cwd) { + return fs.rmdir(entry.absolute, er => + this[MAKEFS](er, entry, done)) + } + } - if (!opt.file && typeof cb === 'function') - throw new TypeError('callback only supported with file option') + // not a dir, and not reusable + // don't remove if the cwd, we want that error + if (entry.absolute === this.cwd) + return this[MAKEFS](null, entry, done) - if (files.length) - filesFilter(opt, files) + unlinkFile(entry.absolute, er => + this[MAKEFS](er, entry, done)) + }) + } - if (!opt.noResume) - onentryFunction(opt) + if (this[CHECKED_CWD]) + start() + else + checkCwd() + } - return opt.file && opt.sync ? listFileSync(opt) - : opt.file ? listFile(opt, cb) - : list(opt) -} + [MAKEFS] (er, entry, done) { + if (er) { + this[ONERROR](er, entry) + done() + return + } -const onentryFunction = opt => { - const onentry = opt.onentry - opt.onentry = onentry ? e => { - onentry(e) - e.resume() - } : e => e.resume() -} + switch (entry.type) { + case 'File': + case 'OldFile': + case 'ContiguousFile': + return this[FILE](entry, done) -// construct a filter that limits the file entries listed -// include child entries if a dir is included -const filesFilter = (opt, files) => { - const map = new Map(files.map(f => [f.replace(/\/+$/, ''), true])) - const filter = opt.filter + case 'Link': + return this[HARDLINK](entry, done) - const mapHas = (file, r) => { - const root = r || path.parse(file).root || '.' - const ret = file === root ? false - : map.has(file) ? map.get(file) - : mapHas(path.dirname(file), root) + case 'SymbolicLink': + return this[SYMLINK](entry, done) - map.set(file, ret) - return ret + case 'Directory': + case 'GNUDumpDir': + return this[DIRECTORY](entry, done) + } } - opt.filter = filter - ? (file, entry) => filter(file, entry) && mapHas(file.replace(/\/+$/, '')) - : file => mapHas(file.replace(/\/+$/, '')) + [LINK] (entry, linkpath, link, done) { + // XXX: get the type ('symlink' or 'junction') for windows + fs[link](linkpath, entry.absolute, er => { + if (er) + this[ONERROR](er, entry) + else { + this[UNPEND]() + entry.resume() + } + done() + }) + } } -const listFileSync = opt => { - const p = list(opt) - const file = opt.file - let threw = true - let fd +const callSync = fn => { try { - const stat = fs.statSync(file) - const readSize = opt.maxReadSize || 16*1024*1024 - if (stat.size < readSize) { - p.end(fs.readFileSync(file)) - } else { - let pos = 0 - const buf = Buffer.allocUnsafe(readSize) - fd = fs.openSync(file, 'r') - while (pos < stat.size) { - let bytesRead = fs.readSync(fd, buf, 0, readSize, pos) - pos += bytesRead - p.write(buf.slice(0, bytesRead)) - } - p.end() - } - threw = false - } finally { - if (threw && fd) - try { fs.closeSync(fd) } catch (er) {} + return [null, fn()] + } catch (er) { + return [er, null] } } +class UnpackSync extends Unpack { + [MAKEFS] (er, entry) { + return super[MAKEFS](er, entry, () => {}) + } -const listFile = (opt, cb) => { - const parse = new Parser(opt) - const readSize = opt.maxReadSize || 16*1024*1024 - - const file = opt.file - const p = new Promise((resolve, reject) => { - parse.on('error', reject) - parse.on('end', resolve) + [CHECKFS] (entry) { + this[PRUNECACHE](entry) - fs.stat(file, (er, stat) => { + if (!this[CHECKED_CWD]) { + const er = this[MKDIR](this.cwd, this.dmode) if (er) - reject(er) - else { - const stream = new fsm.ReadStream(file, { - readSize: readSize, - size: stat.size - }) - stream.on('error', reject) - stream.pipe(parse) - } - }) - }) - return cb ? p.then(cb, cb) : p -} + return this[ONERROR](er, entry) + this[CHECKED_CWD] = true + } -const list = opt => new Parser(opt) + // don't bother to make the parent if the current entry is the cwd, + // we've already checked it. + if (entry.absolute !== this.cwd) { + const parent = normPath(path.dirname(entry.absolute)) + if (parent !== this.cwd) { + const mkParent = this[MKDIR](parent, this.dmode) + if (mkParent) + return this[ONERROR](mkParent, entry) + } + } + const [lstatEr, st] = callSync(() => fs.lstatSync(entry.absolute)) + if (st && (this.keep || this.newer && st.mtime > entry.mtime)) + return this[SKIP](entry) -/***/ }), + if (lstatEr || this[ISREUSABLE](entry, st)) + return this[MAKEFS](null, entry) -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/mkdir.js": -/*!*******************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/mkdir.js ***! - \*******************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + if (st.isDirectory()) { + if (entry.type === 'Directory') { + const needChmod = !this.noChmod && + entry.mode && + (st.mode & 0o7777) !== entry.mode + const [er] = needChmod ? callSync(() => { + fs.chmodSync(entry.absolute, entry.mode) + }) : [] + return this[MAKEFS](er, entry) + } + // not a dir entry, have to remove it + const [er] = callSync(() => fs.rmdirSync(entry.absolute)) + this[MAKEFS](er, entry) + } -"use strict"; + // not a dir, and not reusable. + // don't remove if it's the cwd, since we want that error. + const [er] = entry.absolute === this.cwd ? [] + : callSync(() => unlinkFileSync(entry.absolute)) + this[MAKEFS](er, entry) + } -// wrapper around mkdirp for tar's needs. + [FILE] (entry, done) { + const mode = entry.mode & 0o7777 || this.fmode -// TODO: This should probably be a class, not functionally -// passing around state in a gazillion args. - -const mkdirp = __webpack_require__(/*! mkdirp */ "./.yarn/cache/mkdirp-npm-1.0.3-02fc91ac70-c5c46ae417.zip/node_modules/mkdirp/index.js") -const fs = __webpack_require__(/*! fs */ "fs") -const path = __webpack_require__(/*! path */ "path") -const chownr = __webpack_require__(/*! chownr */ "./.yarn/cache/chownr-npm-1.1.4-5bd400ab08-115648f8eb.zip/node_modules/chownr/chownr.js") - -class SymlinkError extends Error { - constructor (symlink, path) { - super('Cannot extract through symbolic link') - this.path = path - this.symlink = symlink - } - - get name () { - return 'SylinkError' - } -} - -class CwdError extends Error { - constructor (path, code) { - super(code + ': Cannot cd into \'' + path + '\'') - this.path = path - this.code = code - } - - get name () { - return 'CwdError' - } -} - -const mkdir = module.exports = (dir, opt, cb) => { - // if there's any overlap between mask and mode, - // then we'll need an explicit chmod - const umask = opt.umask - const mode = opt.mode | 0o0700 - const needChmod = (mode & umask) !== 0 - - const uid = opt.uid - const gid = opt.gid - const doChown = typeof uid === 'number' && - typeof gid === 'number' && - ( uid !== opt.processUid || gid !== opt.processGid ) - - const preserve = opt.preserve - const unlink = opt.unlink - const cache = opt.cache - const cwd = opt.cwd - - const done = (er, created) => { - if (er) - cb(er) - else { - cache.set(dir, true) - if (created && doChown) - chownr(created, uid, gid, er => done(er)) - else if (needChmod) - fs.chmod(dir, mode, cb) - else - cb() + const oner = er => { + let closeError + try { + fs.closeSync(fd) + } catch (e) { + closeError = e + } + if (er || closeError) + this[ONERROR](er || closeError, entry) + done() } - } - if (cache && cache.get(dir) === true) - return done() + let fd + try { + fd = fs.openSync(entry.absolute, getFlag(entry.size), mode) + } catch (er) { + return oner(er) + } + const tx = this.transform ? this.transform(entry) || entry : entry + if (tx !== entry) { + tx.on('error', er => this[ONERROR](er, entry)) + entry.pipe(tx) + } - if (dir === cwd) - return fs.stat(dir, (er, st) => { - if (er || !st.isDirectory()) - er = new CwdError(dir, er && er.code || 'ENOTDIR') - done(er) + tx.on('data', chunk => { + try { + fs.writeSync(fd, chunk, 0, chunk.length) + } catch (er) { + oner(er) + } }) - if (preserve) - return mkdirp(dir, {mode}).then(made => done(null, made), done) - - const sub = path.relative(cwd, dir) - const parts = sub.split(/\/|\\/) - mkdir_(cwd, parts, mode, cache, unlink, cwd, null, done) -} + tx.on('end', _ => { + let er = null + // try both, falling futimes back to utimes + // if either fails, handle the first error + if (entry.mtime && !this.noMtime) { + const atime = entry.atime || new Date() + const mtime = entry.mtime + try { + fs.futimesSync(fd, atime, mtime) + } catch (futimeser) { + try { + fs.utimesSync(entry.absolute, atime, mtime) + } catch (utimeser) { + er = futimeser + } + } + } -const mkdir_ = (base, parts, mode, cache, unlink, cwd, created, cb) => { - if (!parts.length) - return cb(null, created) - const p = parts.shift() - const part = base + '/' + p - if (cache.get(part)) - return mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) - fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb)) -} + if (this[DOCHOWN](entry)) { + const uid = this[UID](entry) + const gid = this[GID](entry) -const onmkdir = (part, parts, mode, cache, unlink, cwd, created, cb) => er => { - if (er) { - if (er.path && path.dirname(er.path) === cwd && - (er.code === 'ENOTDIR' || er.code === 'ENOENT')) - return cb(new CwdError(cwd, er.code)) + try { + fs.fchownSync(fd, uid, gid) + } catch (fchowner) { + try { + fs.chownSync(entry.absolute, uid, gid) + } catch (chowner) { + er = er || fchowner + } + } + } - fs.lstat(part, (statEr, st) => { - if (statEr) - cb(statEr) - else if (st.isDirectory()) - mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) - else if (unlink) - fs.unlink(part, er => { - if (er) - return cb(er) - fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb)) - }) - else if (st.isSymbolicLink()) - return cb(new SymlinkError(part, part + '/' + parts.join('/'))) - else - cb(er) + oner(er) }) - } else { - created = created || part - mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) } -} -const mkdirSync = module.exports.sync = (dir, opt) => { - // if there's any overlap between mask and mode, - // then we'll need an explicit chmod - const umask = opt.umask - const mode = opt.mode | 0o0700 - const needChmod = (mode & umask) !== 0 - - const uid = opt.uid - const gid = opt.gid - const doChown = typeof uid === 'number' && - typeof gid === 'number' && - ( uid !== opt.processUid || gid !== opt.processGid ) - - const preserve = opt.preserve - const unlink = opt.unlink - const cache = opt.cache - const cwd = opt.cwd - - const done = (created) => { - cache.set(dir, true) - if (created && doChown) - chownr.sync(created, uid, gid) - if (needChmod) - fs.chmodSync(dir, mode) + [DIRECTORY] (entry, done) { + const mode = entry.mode & 0o7777 || this.dmode + const er = this[MKDIR](entry.absolute, mode) + if (er) { + this[ONERROR](er, entry) + done() + return + } + if (entry.mtime && !this.noMtime) { + try { + fs.utimesSync(entry.absolute, entry.atime || new Date(), entry.mtime) + } catch (er) {} + } + if (this[DOCHOWN](entry)) { + try { + fs.chownSync(entry.absolute, this[UID](entry), this[GID](entry)) + } catch (er) {} + } + done() + entry.resume() } - if (cache && cache.get(dir) === true) - return done() - - if (dir === cwd) { - let ok = false - let code = 'ENOTDIR' + [MKDIR] (dir, mode) { try { - ok = fs.statSync(dir).isDirectory() + return mkdir.sync(normPath(dir), { + uid: this.uid, + gid: this.gid, + processUid: this.processUid, + processGid: this.processGid, + umask: this.processUmask, + preserve: this.preservePaths, + unlink: this.unlink, + cache: this.dirCache, + cwd: this.cwd, + mode: mode, + }) } catch (er) { - code = er.code - } finally { - if (!ok) - throw new CwdError(dir, code) + return er } - done() - return } - if (preserve) - return done(mkdirp.sync(dir, mode)) - - const sub = path.relative(cwd, dir) - const parts = sub.split(/\/|\\/) - let created = null - for (let p = parts.shift(), part = cwd; - p && (part += '/' + p); - p = parts.shift()) { - - if (cache.get(part)) - continue - + [LINK] (entry, linkpath, link, done) { try { - fs.mkdirSync(part, mode) - created = created || part - cache.set(part, true) + fs[link + 'Sync'](linkpath, entry.absolute) + done() + entry.resume() } catch (er) { - if (er.path && path.dirname(er.path) === cwd && - (er.code === 'ENOTDIR' || er.code === 'ENOENT')) - return new CwdError(cwd, er.code) - - const st = fs.lstatSync(part) - if (st.isDirectory()) { - cache.set(part, true) - continue - } else if (unlink) { - fs.unlinkSync(part) - fs.mkdirSync(part, mode) - created = created || part - cache.set(part, true) - continue - } else if (st.isSymbolicLink()) - return new SymlinkError(part, part + '/' + parts.join('/')) + return this[ONERROR](er, entry) } } - - return done(created) } +Unpack.Sync = UnpackSync +module.exports = Unpack + /***/ }), -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/mode-fix.js": -/*!**********************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/mode-fix.js ***! - \**********************************************************************************************/ -/***/ ((module) => { +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/update.js": +/*!*************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/update.js ***! + \*************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; -module.exports = (mode, isDir, portable) => { - mode &= 0o7777 - // in portable mode, use the minimum reasonable umask - // if this system creates files with 0o664 by default - // (as some linux distros do), then we'll write the - // archive with 0o644 instead. Also, don't ever create - // a file that is not readable/writable by the owner. - if (portable) { - mode = (mode | 0o600) &~0o22 - } +// tar -u - // if dirs are readable, then they should be listable - if (isDir) { - if (mode & 0o400) - mode |= 0o100 - if (mode & 0o40) - mode |= 0o10 - if (mode & 0o4) - mode |= 0o1 - } - return mode +const hlo = __webpack_require__(/*! ./high-level-opt.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/high-level-opt.js") +const r = __webpack_require__(/*! ./replace.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/replace.js") +// just call tar.r with the filter and mtimeCache + +module.exports = (opt_, files, cb) => { + const opt = hlo(opt_) + + if (!opt.file) + throw new TypeError('file is required') + + if (opt.gzip) + throw new TypeError('cannot append to compressed archives') + + if (!files || !Array.isArray(files) || !files.length) + throw new TypeError('no files or directories specified') + + files = Array.from(files) + + mtimeFilter(opt) + return r(opt, files, cb) +} + +const mtimeFilter = opt => { + const filter = opt.filter + + if (!opt.mtimeCache) + opt.mtimeCache = new Map() + + opt.filter = filter ? (path, stat) => + filter(path, stat) && !(opt.mtimeCache.get(path) > stat.mtime) + : (path, stat) => !(opt.mtimeCache.get(path) > stat.mtime) } /***/ }), -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/pack.js": -/*!******************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/pack.js ***! - \******************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/warn-mixin.js": +/*!*****************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/warn-mixin.js ***! + \*****************************************************************************************************/ +/***/ ((module) => { "use strict"; +module.exports = Base => class extends Base { + warn (code, message, data = {}) { + if (this.file) + data.file = this.file + if (this.cwd) + data.cwd = this.cwd + data.code = message instanceof Error && message.code || code + data.tarCode = code + if (!this.strict && data.recoverable !== false) { + if (message instanceof Error) { + data = Object.assign(message, data) + message = message.message + } + this.emit('warn', data.tarCode, message, data) + } else if (message instanceof Error) + this.emit('error', Object.assign(message, data)) + else + this.emit('error', Object.assign(new Error(`${code}: ${message}`), data)) + } +} -// A readable tar stream creator -// Technically, this is a transform stream that you write paths into, -// and tar format comes out of. -// The `add()` method is like `write()` but returns this, -// and end() return `this` as well, so you can -// do `new Pack(opt).add('files').add('dir').end().pipe(output) -// You could also do something like: -// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar')) -class PackJob { - constructor (path, absolute) { - this.path = path || './' - this.absolute = absolute - this.entry = null - this.stat = null - this.readdir = null - this.pending = false - this.ignore = false - this.piped = false - } +/***/ }), + +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/winchars.js": +/*!***************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/winchars.js ***! + \***************************************************************************************************/ +/***/ ((module) => { + +"use strict"; + + +// When writing files on Windows, translate the characters to their +// 0xf000 higher-encoded versions. + +const raw = [ + '|', + '<', + '>', + '?', + ':', +] + +const win = raw.map(char => + String.fromCharCode(0xf000 + char.charCodeAt(0))) + +const toWin = new Map(raw.map((char, i) => [char, win[i]])) +const toRaw = new Map(win.map((char, i) => [char, raw[i]])) + +module.exports = { + encode: s => raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s), + decode: s => win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s), } -const MiniPass = __webpack_require__(/*! minipass */ "./.yarn/cache/minipass-npm-3.1.1-b51d7e264d-cfcfd86adc.zip/node_modules/minipass/index.js") -const zlib = __webpack_require__(/*! minizlib */ "./.yarn/cache/minizlib-npm-2.1.0-9531be52b3-6a811aaa3a.zip/node_modules/minizlib/index.js") -const ReadEntry = __webpack_require__(/*! ./read-entry.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/read-entry.js") -const WriteEntry = __webpack_require__(/*! ./write-entry.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/write-entry.js") -const WriteEntrySync = WriteEntry.Sync -const WriteEntryTar = WriteEntry.Tar -const Yallist = __webpack_require__(/*! yallist */ "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/yallist.js") -const EOF = Buffer.alloc(1024) -const ONSTAT = Symbol('onStat') -const ENDED = Symbol('ended') -const QUEUE = Symbol('queue') -const CURRENT = Symbol('current') -const PROCESS = Symbol('process') -const PROCESSING = Symbol('processing') -const PROCESSJOB = Symbol('processJob') -const JOBS = Symbol('jobs') -const JOBDONE = Symbol('jobDone') -const ADDFSENTRY = Symbol('addFSEntry') -const ADDTARENTRY = Symbol('addTarEntry') -const STAT = Symbol('stat') -const READDIR = Symbol('readdir') -const ONREADDIR = Symbol('onreaddir') -const PIPE = Symbol('pipe') -const ENTRY = Symbol('entry') -const ENTRYOPT = Symbol('entryOpt') -const WRITEENTRYCLASS = Symbol('writeEntryClass') -const WRITE = Symbol('write') -const ONDRAIN = Symbol('ondrain') +/***/ }), + +/***/ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/write-entry.js": +/*!******************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/write-entry.js ***! + \******************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +const MiniPass = __webpack_require__(/*! minipass */ "../../../.yarn/berry/cache/minipass-npm-3.3.5-a555b091e7-9.zip/node_modules/minipass/index.js") +const Pax = __webpack_require__(/*! ./pax.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/pax.js") +const Header = __webpack_require__(/*! ./header.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/header.js") const fs = __webpack_require__(/*! fs */ "fs") const path = __webpack_require__(/*! path */ "path") -const warner = __webpack_require__(/*! ./warn-mixin.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/warn-mixin.js") +const normPath = __webpack_require__(/*! ./normalize-windows-path.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/normalize-windows-path.js") +const stripSlash = __webpack_require__(/*! ./strip-trailing-slashes.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-trailing-slashes.js") -const Pack = warner(class Pack extends MiniPass { - constructor (opt) { +const prefixPath = (path, prefix) => { + if (!prefix) + return normPath(path) + path = normPath(path).replace(/^\.(\/|$)/, '') + return stripSlash(prefix) + '/' + path +} + +const maxReadSize = 16 * 1024 * 1024 +const PROCESS = Symbol('process') +const FILE = Symbol('file') +const DIRECTORY = Symbol('directory') +const SYMLINK = Symbol('symlink') +const HARDLINK = Symbol('hardlink') +const HEADER = Symbol('header') +const READ = Symbol('read') +const LSTAT = Symbol('lstat') +const ONLSTAT = Symbol('onlstat') +const ONREAD = Symbol('onread') +const ONREADLINK = Symbol('onreadlink') +const OPENFILE = Symbol('openfile') +const ONOPENFILE = Symbol('onopenfile') +const CLOSE = Symbol('close') +const MODE = Symbol('mode') +const AWAITDRAIN = Symbol('awaitDrain') +const ONDRAIN = Symbol('ondrain') +const PREFIX = Symbol('prefix') +const HAD_ERROR = Symbol('hadError') +const warner = __webpack_require__(/*! ./warn-mixin.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/warn-mixin.js") +const winchars = __webpack_require__(/*! ./winchars.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/winchars.js") +const stripAbsolutePath = __webpack_require__(/*! ./strip-absolute-path.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/strip-absolute-path.js") + +const modeFix = __webpack_require__(/*! ./mode-fix.js */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/lib/mode-fix.js") + +const WriteEntry = warner(class WriteEntry extends MiniPass { + constructor (p, opt) { + opt = opt || {} super(opt) - opt = opt || Object.create(null) - this.opt = opt - this.file = opt.file || '' - this.cwd = opt.cwd || process.cwd() - this.maxReadSize = opt.maxReadSize + if (typeof p !== 'string') + throw new TypeError('path is required') + this.path = normPath(p) + // suppress atime, ctime, uid, gid, uname, gname + this.portable = !!opt.portable + // until node has builtin pwnam functions, this'll have to do + this.myuid = process.getuid && process.getuid() || 0 + this.myuser = process.env.USER || '' + this.maxReadSize = opt.maxReadSize || maxReadSize + this.linkCache = opt.linkCache || new Map() + this.statCache = opt.statCache || new Map() this.preservePaths = !!opt.preservePaths + this.cwd = normPath(opt.cwd || process.cwd()) this.strict = !!opt.strict this.noPax = !!opt.noPax - this.prefix = (opt.prefix || '').replace(/(\\|\/)+$/, '') - this.linkCache = opt.linkCache || new Map() - this.statCache = opt.statCache || new Map() - this.readdirCache = opt.readdirCache || new Map() + this.noMtime = !!opt.noMtime + this.mtime = opt.mtime || null + this.prefix = opt.prefix ? normPath(opt.prefix) : null + + this.fd = null + this.blockLen = null + this.blockRemain = null + this.buf = null + this.offset = null + this.length = null + this.pos = null + this.remain = null - this[WRITEENTRYCLASS] = WriteEntry if (typeof opt.onwarn === 'function') this.on('warn', opt.onwarn) - this.portable = !!opt.portable - this.zip = null - if (opt.gzip) { - if (typeof opt.gzip !== 'object') - opt.gzip = {} - if (this.portable) - opt.gzip.portable = true - this.zip = new zlib.Gzip(opt.gzip) - this.zip.on('data', chunk => super.write(chunk)) - this.zip.on('end', _ => super.end()) - this.zip.on('drain', _ => this[ONDRAIN]()) - this.on('resume', _ => this.zip.resume()) - } else - this.on('drain', this[ONDRAIN]) + let pathWarn = false + if (!this.preservePaths) { + const [root, stripped] = stripAbsolutePath(this.path) + if (root) { + this.path = stripped + pathWarn = root + } + } - this.noDirRecurse = !!opt.noDirRecurse - this.follow = !!opt.follow - this.noMtime = !!opt.noMtime - this.mtime = opt.mtime || null + this.win32 = !!opt.win32 || process.platform === 'win32' + if (this.win32) { + // force the \ to / normalization, since we might not *actually* + // be on windows, but want \ to be considered a path separator. + this.path = winchars.decode(this.path.replace(/\\/g, '/')) + p = p.replace(/\\/g, '/') + } - this.filter = typeof opt.filter === 'function' ? opt.filter : _ => true + this.absolute = normPath(opt.absolute || path.resolve(this.cwd, p)) - this[QUEUE] = new Yallist - this[JOBS] = 0 - this.jobs = +opt.jobs || 4 - this[PROCESSING] = false - this[ENDED] = false + if (this.path === '') + this.path = './' + + if (pathWarn) { + this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, { + entry: this, + path: pathWarn + this.path, + }) + } + + if (this.statCache.has(this.absolute)) + this[ONLSTAT](this.statCache.get(this.absolute)) + else + this[LSTAT]() } - [WRITE] (chunk) { - return super.write(chunk) + emit (ev, ...data) { + if (ev === 'error') + this[HAD_ERROR] = true + return super.emit(ev, ...data) } - add (path) { - this.write(path) - return this + [LSTAT] () { + fs.lstat(this.absolute, (er, stat) => { + if (er) + return this.emit('error', er) + this[ONLSTAT](stat) + }) } - end (path) { - if (path) - this.write(path) - this[ENDED] = true + [ONLSTAT] (stat) { + this.statCache.set(this.absolute, stat) + this.stat = stat + if (!stat.isFile()) + stat.size = 0 + this.type = getType(stat) + this.emit('stat', stat) this[PROCESS]() - return this } - write (path) { - if (this[ENDED]) - throw new Error('write after end') + [PROCESS] () { + switch (this.type) { + case 'File': return this[FILE]() + case 'Directory': return this[DIRECTORY]() + case 'SymbolicLink': return this[SYMLINK]() + // unsupported types are ignored. + default: return this.end() + } + } - if (path instanceof ReadEntry) - this[ADDTARENTRY](path) - else - this[ADDFSENTRY](path) - return this.flowing + [MODE] (mode) { + return modeFix(mode, this.type === 'Directory', this.portable) } - [ADDTARENTRY] (p) { - const absolute = path.resolve(this.cwd, p.path) - if (this.prefix) - p.path = this.prefix + '/' + p.path.replace(/^\.(\/+|$)/, '') + [PREFIX] (path) { + return prefixPath(path, this.prefix) + } - // in this case, we don't have to wait for the stat - if (!this.filter(p.path, p)) - p.resume() - else { - const job = new PackJob(p.path, absolute, false) - job.entry = new WriteEntryTar(p, this[ENTRYOPT](job)) - job.entry.on('end', _ => this[JOBDONE](job)) - this[JOBS] += 1 - this[QUEUE].push(job) - } + [HEADER] () { + if (this.type === 'Directory' && this.portable) + this.noMtime = true - this[PROCESS]() - } + this.header = new Header({ + path: this[PREFIX](this.path), + // only apply the prefix to hard links. + linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath) + : this.linkpath, + // only the permissions and setuid/setgid/sticky bitflags + // not the higher-order bits that specify file type + mode: this[MODE](this.stat.mode), + uid: this.portable ? null : this.stat.uid, + gid: this.portable ? null : this.stat.gid, + size: this.stat.size, + mtime: this.noMtime ? null : this.mtime || this.stat.mtime, + type: this.type, + uname: this.portable ? null : + this.stat.uid === this.myuid ? this.myuser : '', + atime: this.portable ? null : this.stat.atime, + ctime: this.portable ? null : this.stat.ctime, + }) - [ADDFSENTRY] (p) { - const absolute = path.resolve(this.cwd, p) - if (this.prefix) - p = this.prefix + '/' + p.replace(/^\.(\/+|$)/, '') + if (this.header.encode() && !this.noPax) { + super.write(new Pax({ + atime: this.portable ? null : this.header.atime, + ctime: this.portable ? null : this.header.ctime, + gid: this.portable ? null : this.header.gid, + mtime: this.noMtime ? null : this.mtime || this.header.mtime, + path: this[PREFIX](this.path), + linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath) + : this.linkpath, + size: this.header.size, + uid: this.portable ? null : this.header.uid, + uname: this.portable ? null : this.header.uname, + dev: this.portable ? null : this.stat.dev, + ino: this.portable ? null : this.stat.ino, + nlink: this.portable ? null : this.stat.nlink, + }).encode()) + } + super.write(this.header.block) + } - this[QUEUE].push(new PackJob(p, absolute)) - this[PROCESS]() + [DIRECTORY] () { + if (this.path.substr(-1) !== '/') + this.path += '/' + this.stat.size = 0 + this[HEADER]() + this.end() } - [STAT] (job) { - job.pending = true - this[JOBS] += 1 - const stat = this.follow ? 'stat' : 'lstat' - fs[stat](job.absolute, (er, stat) => { - job.pending = false - this[JOBS] -= 1 + [SYMLINK] () { + fs.readlink(this.absolute, (er, linkpath) => { if (er) - this.emit('error', er) - else - this[ONSTAT](job, stat) + return this.emit('error', er) + this[ONREADLINK](linkpath) }) } - [ONSTAT] (job, stat) { - this.statCache.set(job.absolute, stat) - job.stat = stat + [ONREADLINK] (linkpath) { + this.linkpath = normPath(linkpath) + this[HEADER]() + this.end() + } - // now we have the stat, we can filter it. - if (!this.filter(job.path, stat)) - job.ignore = true + [HARDLINK] (linkpath) { + this.type = 'Link' + this.linkpath = normPath(path.relative(this.cwd, linkpath)) + this.stat.size = 0 + this[HEADER]() + this.end() + } - this[PROCESS]() + [FILE] () { + if (this.stat.nlink > 1) { + const linkKey = this.stat.dev + ':' + this.stat.ino + if (this.linkCache.has(linkKey)) { + const linkpath = this.linkCache.get(linkKey) + if (linkpath.indexOf(this.cwd) === 0) + return this[HARDLINK](linkpath) + } + this.linkCache.set(linkKey, this.absolute) + } + + this[HEADER]() + if (this.stat.size === 0) + return this.end() + + this[OPENFILE]() } - [READDIR] (job) { - job.pending = true - this[JOBS] += 1 - fs.readdir(job.absolute, (er, entries) => { - job.pending = false - this[JOBS] -= 1 + [OPENFILE] () { + fs.open(this.absolute, 'r', (er, fd) => { if (er) return this.emit('error', er) - this[ONREADDIR](job, entries) + this[ONOPENFILE](fd) }) } - [ONREADDIR] (job, entries) { - this.readdirCache.set(job.absolute, entries) - job.readdir = entries - this[PROCESS]() + [ONOPENFILE] (fd) { + this.fd = fd + if (this[HAD_ERROR]) + return this[CLOSE]() + + this.blockLen = 512 * Math.ceil(this.stat.size / 512) + this.blockRemain = this.blockLen + const bufLen = Math.min(this.blockLen, this.maxReadSize) + this.buf = Buffer.allocUnsafe(bufLen) + this.offset = 0 + this.pos = 0 + this.remain = this.stat.size + this.length = this.buf.length + this[READ]() + } + + [READ] () { + const { fd, buf, offset, length, pos } = this + fs.read(fd, buf, offset, length, pos, (er, bytesRead) => { + if (er) { + // ignoring the error from close(2) is a bad practice, but at + // this point we already have an error, don't need another one + return this[CLOSE](() => this.emit('error', er)) + } + this[ONREAD](bytesRead) + }) } - [PROCESS] () { - if (this[PROCESSING]) - return + [CLOSE] (cb) { + fs.close(this.fd, cb) + } - this[PROCESSING] = true - for (let w = this[QUEUE].head; - w !== null && this[JOBS] < this.jobs; - w = w.next) { - this[PROCESSJOB](w.value) - if (w.value.ignore) { - const p = w.next - this[QUEUE].removeNode(w) - w.next = p - } + [ONREAD] (bytesRead) { + if (bytesRead <= 0 && this.remain > 0) { + const er = new Error('encountered unexpected EOF') + er.path = this.absolute + er.syscall = 'read' + er.code = 'EOF' + return this[CLOSE](() => this.emit('error', er)) } - this[PROCESSING] = false + if (bytesRead > this.remain) { + const er = new Error('did not encounter expected EOF') + er.path = this.absolute + er.syscall = 'read' + er.code = 'EOF' + return this[CLOSE](() => this.emit('error', er)) + } - if (this[ENDED] && !this[QUEUE].length && this[JOBS] === 0) { - if (this.zip) - this.zip.end(EOF) - else { - super.write(EOF) - super.end() + // null out the rest of the buffer, if we could fit the block padding + // at the end of this loop, we've incremented bytesRead and this.remain + // to be incremented up to the blockRemain level, as if we had expected + // to get a null-padded file, and read it until the end. then we will + // decrement both remain and blockRemain by bytesRead, and know that we + // reached the expected EOF, without any null buffer to append. + if (bytesRead === this.remain) { + for (let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++) { + this.buf[i + this.offset] = 0 + bytesRead++ + this.remain++ } } - } - get [CURRENT] () { - return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value - } + const writeBuf = this.offset === 0 && bytesRead === this.buf.length ? + this.buf : this.buf.slice(this.offset, this.offset + bytesRead) - [JOBDONE] (job) { - this[QUEUE].shift() - this[JOBS] -= 1 - this[PROCESS]() + const flushed = this.write(writeBuf) + if (!flushed) + this[AWAITDRAIN](() => this[ONDRAIN]()) + else + this[ONDRAIN]() } - [PROCESSJOB] (job) { - if (job.pending) - return + [AWAITDRAIN] (cb) { + this.once('drain', cb) + } - if (job.entry) { - if (job === this[CURRENT] && !job.piped) - this[PIPE](job) - return + write (writeBuf) { + if (this.blockRemain < writeBuf.length) { + const er = new Error('writing more data than expected') + er.path = this.absolute + return this.emit('error', er) } + this.remain -= writeBuf.length + this.blockRemain -= writeBuf.length + this.pos += writeBuf.length + this.offset += writeBuf.length + return super.write(writeBuf) + } - if (!job.stat) { - if (this.statCache.has(job.absolute)) - this[ONSTAT](job, this.statCache.get(job.absolute)) - else - this[STAT](job) + [ONDRAIN] () { + if (!this.remain) { + if (this.blockRemain) + super.write(Buffer.alloc(this.blockRemain)) + return this[CLOSE](er => er ? this.emit('error', er) : this.end()) } - if (!job.stat) - return - - // filtered out! - if (job.ignore) - return - if (!this.noDirRecurse && job.stat.isDirectory() && !job.readdir) { - if (this.readdirCache.has(job.absolute)) - this[ONREADDIR](job, this.readdirCache.get(job.absolute)) - else - this[READDIR](job) - if (!job.readdir) - return + if (this.offset >= this.length) { + // if we only have a smaller bit left to read, alloc a smaller buffer + // otherwise, keep it the same length it was before. + this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length)) + this.offset = 0 } + this.length = this.buf.length - this.offset + this[READ]() + } +}) - // we know it doesn't have an entry, because that got checked above - job.entry = this[ENTRY](job) - if (!job.entry) { - job.ignore = true - return - } +class WriteEntrySync extends WriteEntry { + [LSTAT] () { + this[ONLSTAT](fs.lstatSync(this.absolute)) + } - if (job === this[CURRENT] && !job.piped) - this[PIPE](job) + [SYMLINK] () { + this[ONREADLINK](fs.readlinkSync(this.absolute)) } - [ENTRYOPT] (job) { - return { - onwarn: (code, msg, data) => this.warn(code, msg, data), - noPax: this.noPax, - cwd: this.cwd, - absolute: job.absolute, - preservePaths: this.preservePaths, - maxReadSize: this.maxReadSize, - strict: this.strict, - portable: this.portable, - linkCache: this.linkCache, - statCache: this.statCache, - noMtime: this.noMtime, - mtime: this.mtime - } + [OPENFILE] () { + this[ONOPENFILE](fs.openSync(this.absolute, 'r')) } - [ENTRY] (job) { - this[JOBS] += 1 + [READ] () { + let threw = true try { - return new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job)) - .on('end', () => this[JOBDONE](job)) - .on('error', er => this.emit('error', er)) - } catch (er) { - this.emit('error', er) + const { fd, buf, offset, length, pos } = this + const bytesRead = fs.readSync(fd, buf, offset, length, pos) + this[ONREAD](bytesRead) + threw = false + } finally { + // ignoring the error from close(2) is a bad practice, but at + // this point we already have an error, don't need another one + if (threw) { + try { + this[CLOSE](() => {}) + } catch (er) {} + } } } - [ONDRAIN] () { - if (this[CURRENT] && this[CURRENT].entry) - this[CURRENT].entry.resume() + [AWAITDRAIN] (cb) { + cb() } - // like .pipe() but using super, because our write() is special - [PIPE] (job) { - job.piped = true - - if (job.readdir) - job.readdir.forEach(entry => { - const p = this.prefix ? - job.path.slice(this.prefix.length + 1) || './' - : job.path + [CLOSE] (cb) { + fs.closeSync(this.fd) + cb() + } +} - const base = p === './' ? '' : p.replace(/\/*$/, '/') - this[ADDFSENTRY](base + entry) - }) - - const source = job.entry - const zip = this.zip - - if (zip) - source.on('data', chunk => { - if (!zip.write(chunk)) - source.pause() - }) - else - source.on('data', chunk => { - if (!super.write(chunk)) - source.pause() - }) - } +const WriteEntryTar = warner(class WriteEntryTar extends MiniPass { + constructor (readEntry, opt) { + opt = opt || {} + super(opt) + this.preservePaths = !!opt.preservePaths + this.portable = !!opt.portable + this.strict = !!opt.strict + this.noPax = !!opt.noPax + this.noMtime = !!opt.noMtime - pause () { - if (this.zip) - this.zip.pause() - return super.pause() - } -}) + this.readEntry = readEntry + this.type = readEntry.type + if (this.type === 'Directory' && this.portable) + this.noMtime = true -class PackSync extends Pack { - constructor (opt) { - super(opt) - this[WRITEENTRYCLASS] = WriteEntrySync - } + this.prefix = opt.prefix || null - // pause/resume are no-ops in sync streams. - pause () {} - resume () {} + this.path = normPath(readEntry.path) + this.mode = this[MODE](readEntry.mode) + this.uid = this.portable ? null : readEntry.uid + this.gid = this.portable ? null : readEntry.gid + this.uname = this.portable ? null : readEntry.uname + this.gname = this.portable ? null : readEntry.gname + this.size = readEntry.size + this.mtime = this.noMtime ? null : opt.mtime || readEntry.mtime + this.atime = this.portable ? null : readEntry.atime + this.ctime = this.portable ? null : readEntry.ctime + this.linkpath = normPath(readEntry.linkpath) - [STAT] (job) { - const stat = this.follow ? 'statSync' : 'lstatSync' - this[ONSTAT](job, fs[stat](job.absolute)) - } + if (typeof opt.onwarn === 'function') + this.on('warn', opt.onwarn) - [READDIR] (job, stat) { - this[ONREADDIR](job, fs.readdirSync(job.absolute)) - } + let pathWarn = false + if (!this.preservePaths) { + const [root, stripped] = stripAbsolutePath(this.path) + if (root) { + this.path = stripped + pathWarn = root + } + } - // gotta get it all in this tick - [PIPE] (job) { - const source = job.entry - const zip = this.zip + this.remain = readEntry.size + this.blockRemain = readEntry.startBlockSize - if (job.readdir) - job.readdir.forEach(entry => { - const p = this.prefix ? - job.path.slice(this.prefix.length + 1) || './' - : job.path + this.header = new Header({ + path: this[PREFIX](this.path), + linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath) + : this.linkpath, + // only the permissions and setuid/setgid/sticky bitflags + // not the higher-order bits that specify file type + mode: this.mode, + uid: this.portable ? null : this.uid, + gid: this.portable ? null : this.gid, + size: this.size, + mtime: this.noMtime ? null : this.mtime, + type: this.type, + uname: this.portable ? null : this.uname, + atime: this.portable ? null : this.atime, + ctime: this.portable ? null : this.ctime, + }) - const base = p === './' ? '' : p.replace(/\/*$/, '/') - this[ADDFSENTRY](base + entry) + if (pathWarn) { + this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, { + entry: this, + path: pathWarn + this.path, }) + } - if (zip) - source.on('data', chunk => { - zip.write(chunk) - }) - else - source.on('data', chunk => { - super[WRITE](chunk) - }) + if (this.header.encode() && !this.noPax) { + super.write(new Pax({ + atime: this.portable ? null : this.atime, + ctime: this.portable ? null : this.ctime, + gid: this.portable ? null : this.gid, + mtime: this.noMtime ? null : this.mtime, + path: this[PREFIX](this.path), + linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath) + : this.linkpath, + size: this.size, + uid: this.portable ? null : this.uid, + uname: this.portable ? null : this.uname, + dev: this.portable ? null : this.readEntry.dev, + ino: this.portable ? null : this.readEntry.ino, + nlink: this.portable ? null : this.readEntry.nlink, + }).encode()) + } + + super.write(this.header.block) + readEntry.pipe(this) } -} -Pack.Sync = PackSync + [PREFIX] (path) { + return prefixPath(path, this.prefix) + } -module.exports = Pack + [MODE] (mode) { + return modeFix(mode, this.type === 'Directory', this.portable) + } + write (data) { + const writeLen = data.length + if (writeLen > this.blockRemain) + throw new Error('writing more to entry than is appropriate') + this.blockRemain -= writeLen + return super.write(data) + } -/***/ }), + end () { + if (this.blockRemain) + super.write(Buffer.alloc(this.blockRemain)) + return super.end() + } +}) -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/parse.js": -/*!*******************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/parse.js ***! - \*******************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +WriteEntry.Sync = WriteEntrySync +WriteEntry.Tar = WriteEntryTar -"use strict"; +const getType = stat => + stat.isFile() ? 'File' + : stat.isDirectory() ? 'Directory' + : stat.isSymbolicLink() ? 'SymbolicLink' + : 'Unsupported' +module.exports = WriteEntry -// this[BUFFER] is the remainder of a chunk if we're waiting for -// the full 512 bytes of a header to come in. We will Buffer.concat() -// it to the next write(), which is a mem copy, but a small one. -// -// this[QUEUE] is a Yallist of entries that haven't been emitted -// yet this can only get filled up if the user keeps write()ing after -// a write() returns false, or does a write() with more than one entry -// -// We don't buffer chunks, we always parse them and either create an -// entry, or push it into the active entry. The ReadEntry class knows -// to throw data away if .ignore=true -// -// Shift entry off the buffer when it emits 'end', and emit 'entry' for -// the next one in the list. -// -// At any time, we're pushing body chunks into the entry at WRITEENTRY, -// and waiting for 'end' on the entry at READENTRY -// -// ignored entries get .resume() called on them straight away -const warner = __webpack_require__(/*! ./warn-mixin.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/warn-mixin.js") -const path = __webpack_require__(/*! path */ "path") -const Header = __webpack_require__(/*! ./header.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/header.js") -const EE = __webpack_require__(/*! events */ "events") -const Yallist = __webpack_require__(/*! yallist */ "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/yallist.js") -const maxMetaEntrySize = 1024 * 1024 -const Entry = __webpack_require__(/*! ./read-entry.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/read-entry.js") -const Pax = __webpack_require__(/*! ./pax.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/pax.js") -const zlib = __webpack_require__(/*! minizlib */ "./.yarn/cache/minizlib-npm-2.1.0-9531be52b3-6a811aaa3a.zip/node_modules/minizlib/index.js") +/***/ }), -const gzipHeader = Buffer.from([0x1f, 0x8b]) -const STATE = Symbol('state') -const WRITEENTRY = Symbol('writeEntry') -const READENTRY = Symbol('readEntry') -const NEXTENTRY = Symbol('nextEntry') -const PROCESSENTRY = Symbol('processEntry') -const EX = Symbol('extendedHeader') -const GEX = Symbol('globalExtendedHeader') -const META = Symbol('meta') -const EMITMETA = Symbol('emitMeta') -const BUFFER = Symbol('buffer') -const QUEUE = Symbol('queue') -const ENDED = Symbol('ended') -const EMITTEDEND = Symbol('emittedEnd') -const EMIT = Symbol('emit') -const UNZIP = Symbol('unzip') -const CONSUMECHUNK = Symbol('consumeChunk') -const CONSUMECHUNKSUB = Symbol('consumeChunkSub') -const CONSUMEBODY = Symbol('consumeBody') -const CONSUMEMETA = Symbol('consumeMeta') -const CONSUMEHEADER = Symbol('consumeHeader') -const CONSUMING = Symbol('consuming') -const BUFFERCONCAT = Symbol('bufferConcat') -const MAYBEEND = Symbol('maybeEnd') -const WRITING = Symbol('writing') -const ABORTED = Symbol('aborted') -const DONE = Symbol('onDone') -const SAW_VALID_ENTRY = Symbol('sawValidEntry') -const SAW_NULL_BLOCK = Symbol('sawNullBlock') -const SAW_EOF = Symbol('sawEOF') +/***/ "../../../.yarn/berry/cache/typanion-npm-3.9.0-ef0bfe7e8b-9.zip/node_modules/typanion/lib/index.js": +/*!*********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/typanion-npm-3.9.0-ef0bfe7e8b-9.zip/node_modules/typanion/lib/index.js ***! + \*********************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { -const noop = _ => true +"use strict"; -module.exports = warner(class Parser extends EE { - constructor (opt) { - opt = opt || {} - super(opt) - this.file = opt.file || '' +Object.defineProperty(exports, "__esModule", ({ value: true })); - // set to boolean false when an entry starts. 1024 bytes of \0 - // is technically a valid tarball, albeit a boring one. - this[SAW_VALID_ENTRY] = null +const simpleKeyRegExp = /^[a-zA-Z_][a-zA-Z0-9_]*$/; +function getPrintable(value) { + if (value === null) + return `null`; + if (value === undefined) + return `undefined`; + if (value === ``) + return `an empty string`; + if (typeof value === 'symbol') + return `<${value.toString()}>`; + if (Array.isArray(value)) + return `an array`; + return JSON.stringify(value); +} +function getPrintableArray(value, conjunction) { + if (value.length === 0) + return `nothing`; + if (value.length === 1) + return getPrintable(value[0]); + const rest = value.slice(0, -1); + const trailing = value[value.length - 1]; + const separator = value.length > 2 + ? `, ${conjunction} ` + : ` ${conjunction} `; + return `${rest.map(value => getPrintable(value)).join(`, `)}${separator}${getPrintable(trailing)}`; +} +function computeKey(state, key) { + var _a, _b, _c; + if (typeof key === `number`) { + return `${(_a = state === null || state === void 0 ? void 0 : state.p) !== null && _a !== void 0 ? _a : `.`}[${key}]`; + } + else if (simpleKeyRegExp.test(key)) { + return `${(_b = state === null || state === void 0 ? void 0 : state.p) !== null && _b !== void 0 ? _b : ``}.${key}`; + } + else { + return `${(_c = state === null || state === void 0 ? void 0 : state.p) !== null && _c !== void 0 ? _c : `.`}[${JSON.stringify(key)}]`; + } +} +function plural(n, singular, plural) { + return n === 1 ? singular : plural; +} - // these BADARCHIVE errors can't be detected early. listen on DONE. - this.on(DONE, _ => { - if (this[STATE] === 'begin' || this[SAW_VALID_ENTRY] === false) { - // either less than 1 block of data, or all entries were invalid. - // Either way, probably not even a tarball. - this.warn('TAR_BAD_ARCHIVE', 'Unrecognized archive format') - } - }) +const colorStringRegExp = /^#[0-9a-f]{6}$/i; +const colorStringAlphaRegExp = /^#[0-9a-f]{6}([0-9a-f]{2})?$/i; +// https://stackoverflow.com/a/475217/880703 +const base64RegExp = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; +// https://stackoverflow.com/a/14166194/880703 +const uuid4RegExp = /^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i; +// https://stackoverflow.com/a/28022901/880703 + https://www.debuggex.com/r/bl8J35wMKk48a7u_ +const iso8601RegExp = /^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/; - if (opt.ondone) - this.on(DONE, opt.ondone) - else - this.on(DONE, _ => { - this.emit('prefinish') - this.emit('finish') - this.emit('end') - this.emit('close') - }) - - this.strict = !!opt.strict - this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize - this.filter = typeof opt.filter === 'function' ? opt.filter : noop - - // have to set this so that streams are ok piping into it - this.writable = true - this.readable = false - - this[QUEUE] = new Yallist() - this[BUFFER] = null - this[READENTRY] = null - this[WRITEENTRY] = null - this[STATE] = 'begin' - this[META] = '' - this[EX] = null - this[GEX] = null - this[ENDED] = false - this[UNZIP] = null - this[ABORTED] = false - this[SAW_NULL_BLOCK] = false - this[SAW_EOF] = false - if (typeof opt.onwarn === 'function') - this.on('warn', opt.onwarn) - if (typeof opt.onentry === 'function') - this.on('entry', opt.onentry) - } - - [CONSUMEHEADER] (chunk, position) { - if (this[SAW_VALID_ENTRY] === null) - this[SAW_VALID_ENTRY] = false - let header - try { - header = new Header(chunk, position, this[EX], this[GEX]) - } catch (er) { - return this.warn('TAR_ENTRY_INVALID', er) - } - - if (header.nullBlock) { - if (this[SAW_NULL_BLOCK]) { - this[SAW_EOF] = true - // ending an archive with no entries. pointless, but legal. - if (this[STATE] === 'begin') - this[STATE] = 'header' - this[EMIT]('eof') - } else { - this[SAW_NULL_BLOCK] = true - this[EMIT]('nullBlock') - } - } else { - this[SAW_NULL_BLOCK] = false - if (!header.cksumValid) - this.warn('TAR_ENTRY_INVALID', 'checksum failure', {header}) - else if (!header.path) - this.warn('TAR_ENTRY_INVALID', 'path is required', {header}) - else { - const type = header.type - if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) - this.warn('TAR_ENTRY_INVALID', 'linkpath required', {header}) - else if (!/^(Symbolic)?Link$/.test(type) && header.linkpath) - this.warn('TAR_ENTRY_INVALID', 'linkpath forbidden', {header}) - else { - const entry = this[WRITEENTRY] = new Entry(header, this[EX], this[GEX]) +function pushError({ errors, p } = {}, message) { + errors === null || errors === void 0 ? void 0 : errors.push(`${p !== null && p !== void 0 ? p : `.`}: ${message}`); + return false; +} +function makeSetter(target, key) { + return (v) => { + target[key] = v; + }; +} +function makeCoercionFn(target, key) { + return (v) => { + const previous = target[key]; + target[key] = v; + return makeCoercionFn(target, key).bind(null, previous); + }; +} +function makeLazyCoercionFn(fn, orig, generator) { + const commit = () => { + fn(generator()); + return revert; + }; + const revert = () => { + fn(orig); + return commit; + }; + return commit; +} - // we do this for meta & ignored entries as well, because they - // are still valid tar, or else we wouldn't know to ignore them - if (!this[SAW_VALID_ENTRY]) { - if (entry.remain) { - // this might be the one! - const onend = () => { - if (!entry.invalid) - this[SAW_VALID_ENTRY] = true - } - entry.on('end', onend) - } else { - this[SAW_VALID_ENTRY] = true +/** + * Create a validator that always returns true and never refines the type. + */ +function isUnknown() { + return makeValidator({ + test: (value, state) => { + return true; + }, + }); +} +function isLiteral(expected) { + return makeValidator({ + test: (value, state) => { + if (value !== expected) + return pushError(state, `Expected ${getPrintable(expected)} (got ${getPrintable(value)})`); + return true; + }, + }); +} +/** + * Create a validator that only returns true when the tested value is a string. + * Refines the type to `string`. + */ +function isString() { + return makeValidator({ + test: (value, state) => { + if (typeof value !== `string`) + return pushError(state, `Expected a string (got ${getPrintable(value)})`); + return true; + }, + }); +} +function isEnum(enumSpec) { + const valuesArray = Array.isArray(enumSpec) ? enumSpec : Object.values(enumSpec); + const isAlphaNum = valuesArray.every(item => typeof item === 'string' || typeof item === 'number'); + const values = new Set(valuesArray); + if (values.size === 1) + return isLiteral([...values][0]); + return makeValidator({ + test: (value, state) => { + if (!values.has(value)) { + if (isAlphaNum) { + return pushError(state, `Expected one of ${getPrintableArray(valuesArray, `or`)} (got ${getPrintable(value)})`); + } + else { + return pushError(state, `Expected a valid enumeration value (got ${getPrintable(value)})`); + } } - } - - if (entry.meta) { - if (entry.size > this.maxMetaEntrySize) { - entry.ignore = true - this[EMIT]('ignoredEntry', entry) - this[STATE] = 'ignore' - entry.resume() - } else if (entry.size > 0) { - this[META] = '' - entry.on('data', c => this[META] += c) - this[STATE] = 'meta' + return true; + }, + }); +} +const BOOLEAN_COERCIONS = new Map([ + [`true`, true], + [`True`, true], + [`1`, true], + [1, true], + [`false`, false], + [`False`, false], + [`0`, false], + [0, false], +]); +/** + * Create a validator that only returns true when the tested value is a + * boolean. Refines the type to `boolean`. + * + * Supports coercion: + * - 'true' / 'True' / '1' / 1 will turn to `true` + * - 'false' / 'False' / '0' / 0 will turn to `false` + */ +function isBoolean() { + return makeValidator({ + test: (value, state) => { + var _a; + if (typeof value !== `boolean`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + const coercion = BOOLEAN_COERCIONS.get(value); + if (typeof coercion !== `undefined`) { + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, coercion)]); + return true; + } + } + return pushError(state, `Expected a boolean (got ${getPrintable(value)})`); } - } else { - this[EX] = null - entry.ignore = entry.ignore || !this.filter(entry.path, entry) - - if (entry.ignore) { - // probably valid, just not something we care about - this[EMIT]('ignoredEntry', entry) - this[STATE] = entry.remain ? 'ignore' : 'header' - entry.resume() - } else { - if (entry.remain) - this[STATE] = 'body' - else { - this[STATE] = 'header' - entry.end() - } - - if (!this[READENTRY]) { - this[QUEUE].push(entry) - this[NEXTENTRY]() - } else - this[QUEUE].push(entry) + return true; + }, + }); +} +/** + * Create a validator that only returns true when the tested value is a + * number (including floating numbers; use `cascade` and `isInteger` to + * restrict the range further). Refines the type to `number`. + * + * Supports coercion. + */ +function isNumber() { + return makeValidator({ + test: (value, state) => { + var _a; + if (typeof value !== `number`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + let coercion; + if (typeof value === `string`) { + let val; + try { + val = JSON.parse(value); + } + catch (_b) { } + // We check against JSON.stringify that the output is the same to ensure that the number can be safely represented in JS + if (typeof val === `number`) { + if (JSON.stringify(val) === value) { + coercion = val; + } + else { + return pushError(state, `Received a number that can't be safely represented by the runtime (${value})`); + } + } + } + if (typeof coercion !== `undefined`) { + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, coercion)]); + return true; + } + } + return pushError(state, `Expected a number (got ${getPrintable(value)})`); } - } - } - } - } - } - - [PROCESSENTRY] (entry) { - let go = true - - if (!entry) { - this[READENTRY] = null - go = false - } else if (Array.isArray(entry)) - this.emit.apply(this, entry) - else { - this[READENTRY] = entry - this.emit('entry', entry) - if (!entry.emittedEnd) { - entry.on('end', _ => this[NEXTENTRY]()) - go = false - } - } - - return go - } - - [NEXTENTRY] () { - do {} while (this[PROCESSENTRY](this[QUEUE].shift())) - - if (!this[QUEUE].length) { - // At this point, there's nothing in the queue, but we may have an - // entry which is being consumed (readEntry). - // If we don't, then we definitely can handle more data. - // If we do, and either it's flowing, or it has never had any data - // written to it, then it needs more. - // The only other possibility is that it has returned false from a - // write() call, so we wait for the next drain to continue. - const re = this[READENTRY] - const drainNow = !re || re.flowing || re.size === re.remain - if (drainNow) { - if (!this[WRITING]) - this.emit('drain') - } else - re.once('drain', _ => this.emit('drain')) - } + return true; + }, + }); +} +/** + * Create a validator that only returns true when the tested value is a + * valid date. Refines the type to `Date`. + * + * Supports coercion via one of the following formats: + * - ISO86001 strings + * - Unix timestamps + */ +function isDate() { + return makeValidator({ + test: (value, state) => { + var _a; + if (!(value instanceof Date)) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + let coercion; + if (typeof value === `string` && iso8601RegExp.test(value)) { + coercion = new Date(value); + } + else { + let timestamp; + if (typeof value === `string`) { + let val; + try { + val = JSON.parse(value); + } + catch (_b) { } + if (typeof val === `number`) { + timestamp = val; + } + } + else if (typeof value === `number`) { + timestamp = value; + } + if (typeof timestamp !== `undefined`) { + if (Number.isSafeInteger(timestamp) || !Number.isSafeInteger(timestamp * 1000)) { + coercion = new Date(timestamp * 1000); + } + else { + return pushError(state, `Received a timestamp that can't be safely represented by the runtime (${value})`); + } + } + } + if (typeof coercion !== `undefined`) { + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, coercion)]); + return true; + } + } + return pushError(state, `Expected a date (got ${getPrintable(value)})`); + } + return true; + }, + }); +} +/** + * Create a validator that only returns true when the tested value is an + * array whose all values match the provided subspec. Refines the type to + * `Array`, with `T` being the subspec inferred type. + * + * Supports coercion if the `delimiter` option is set, in which case strings + * will be split accordingly. + */ +function isArray(spec, { delimiter } = {}) { + return makeValidator({ + test: (value, state) => { + var _a; + const originalValue = value; + if (typeof value === `string` && typeof delimiter !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + value = value.split(delimiter); + } + } + if (!Array.isArray(value)) + return pushError(state, `Expected an array (got ${getPrintable(value)})`); + let valid = true; + for (let t = 0, T = value.length; t < T; ++t) { + valid = spec(value[t], Object.assign(Object.assign({}, state), { p: computeKey(state, t), coercion: makeCoercionFn(value, t) })) && valid; + if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { + break; + } + } + if (value !== originalValue) + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); + return valid; + }, + }); +} +/** + * Create a validator that only returns true when the tested value is an + * set whose all values match the provided subspec. Refines the type to + * `Set`, with `T` being the subspec inferred type. + * + * Supports coercion from arrays (or anything that can be coerced into an + * array). + */ +function isSet(spec, { delimiter } = {}) { + const isArrayValidator = isArray(spec, { delimiter }); + return makeValidator({ + test: (value, state) => { + var _a, _b; + if (Object.getPrototypeOf(value).toString() === `[object Set]`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + const originalValues = [...value]; + const coercedValues = [...value]; + if (!isArrayValidator(coercedValues, Object.assign(Object.assign({}, state), { coercion: undefined }))) + return false; + const updateValue = () => coercedValues.some((val, t) => val !== originalValues[t]) + ? new Set(coercedValues) + : value; + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, makeLazyCoercionFn(state.coercion, value, updateValue)]); + return true; + } + else { + let valid = true; + for (const subValue of value) { + valid = spec(subValue, Object.assign({}, state)) && valid; + if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { + break; + } + } + return valid; + } + } + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + const store = { value }; + if (!isArrayValidator(value, Object.assign(Object.assign({}, state), { coercion: makeCoercionFn(store, `value`) }))) + return false; + state.coercions.push([(_b = state.p) !== null && _b !== void 0 ? _b : `.`, makeLazyCoercionFn(state.coercion, value, () => new Set(store.value))]); + return true; + } + return pushError(state, `Expected a set (got ${getPrintable(value)})`); + } + }); +} +/** + * Create a validator that only returns true when the tested value is an + * map whose all values match the provided subspecs. Refines the type to + * `Map`, with `U` being the key subspec inferred type and `V` being + * the value subspec inferred type. + * + * Supports coercion from array of tuples (or anything that can be coerced into + * an array of tuples). + */ +function isMap(keySpec, valueSpec) { + const isArrayValidator = isArray(isTuple([keySpec, valueSpec])); + const isRecordValidator = isRecord(valueSpec, { keys: keySpec }); + return makeValidator({ + test: (value, state) => { + var _a, _b, _c; + if (Object.getPrototypeOf(value).toString() === `[object Map]`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + const originalValues = [...value]; + const coercedValues = [...value]; + if (!isArrayValidator(coercedValues, Object.assign(Object.assign({}, state), { coercion: undefined }))) + return false; + const updateValue = () => coercedValues.some((val, t) => val[0] !== originalValues[t][0] || val[1] !== originalValues[t][1]) + ? new Map(coercedValues) + : value; + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, makeLazyCoercionFn(state.coercion, value, updateValue)]); + return true; + } + else { + let valid = true; + for (const [key, subValue] of value) { + valid = keySpec(key, Object.assign({}, state)) && valid; + if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { + break; + } + valid = valueSpec(subValue, Object.assign(Object.assign({}, state), { p: computeKey(state, key) })) && valid; + if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { + break; + } + } + return valid; + } + } + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + const store = { value }; + if (Array.isArray(value)) { + if (!isArrayValidator(value, Object.assign(Object.assign({}, state), { coercion: undefined }))) + return false; + state.coercions.push([(_b = state.p) !== null && _b !== void 0 ? _b : `.`, makeLazyCoercionFn(state.coercion, value, () => new Map(store.value))]); + return true; + } + else { + if (!isRecordValidator(value, Object.assign(Object.assign({}, state), { coercion: makeCoercionFn(store, `value`) }))) + return false; + state.coercions.push([(_c = state.p) !== null && _c !== void 0 ? _c : `.`, makeLazyCoercionFn(state.coercion, value, () => new Map(Object.entries(store.value)))]); + return true; + } + } + return pushError(state, `Expected a map (got ${getPrintable(value)})`); + } + }); +} +/** + * Create a validator that only returns true when the tested value is a + * tuple whose each value matches the corresponding subspec. Refines the type + * into a tuple whose each item has the type inferred by the corresponding + * tuple. + * + * Supports coercion if the `delimiter` option is set, in which case strings + * will be split accordingly. + */ +function isTuple(spec, { delimiter } = {}) { + const lengthValidator = hasExactLength(spec.length); + return makeValidator({ + test: (value, state) => { + var _a; + if (typeof value === `string` && typeof delimiter !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + value = value.split(delimiter); + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); + } + } + if (!Array.isArray(value)) + return pushError(state, `Expected a tuple (got ${getPrintable(value)})`); + let valid = lengthValidator(value, Object.assign({}, state)); + for (let t = 0, T = value.length; t < T && t < spec.length; ++t) { + valid = spec[t](value[t], Object.assign(Object.assign({}, state), { p: computeKey(state, t), coercion: makeCoercionFn(value, t) })) && valid; + if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { + break; + } + } + return valid; + }, + }); +} +/** + * Create a validator that only returns true when the tested value is an + * object with any amount of properties that must all match the provided + * subspec. Refines the type to `Record`, with `T` being the + * subspec inferred type. + * + * Keys can be optionally validated as well by using the `keys` optional + * subspec parameter. + */ +function isRecord(spec, { keys: keySpec = null, } = {}) { + const isArrayValidator = isArray(isTuple([keySpec !== null && keySpec !== void 0 ? keySpec : isString(), spec])); + return makeValidator({ + test: (value, state) => { + var _a; + if (Array.isArray(value)) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + if (!isArrayValidator(value, Object.assign(Object.assign({}, state), { coercion: undefined }))) + return false; + value = Object.fromEntries(value); + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); + return true; + } + } + if (typeof value !== `object` || value === null) + return pushError(state, `Expected an object (got ${getPrintable(value)})`); + const keys = Object.keys(value); + let valid = true; + for (let t = 0, T = keys.length; t < T && (valid || (state === null || state === void 0 ? void 0 : state.errors) != null); ++t) { + const key = keys[t]; + const sub = value[key]; + if (key === `__proto__` || key === `constructor`) { + valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Unsafe property name`); + continue; + } + if (keySpec !== null && !keySpec(key, state)) { + valid = false; + continue; + } + if (!spec(sub, Object.assign(Object.assign({}, state), { p: computeKey(state, key), coercion: makeCoercionFn(value, key) }))) { + valid = false; + continue; + } + } + return valid; + }, + }); +} +/** + * @deprecated Replace `isDict` by `isRecord` + */ +function isDict(spec, opts = {}) { + return isRecord(spec, opts); +} +/** + * Create a validator that only returns true when the tested value is an + * object whose all properties match their corresponding subspec. Refines + * the type into an object whose each property has the type inferred by the + * corresponding subspec. + * + * Unlike `t.isPartial`, `t.isObject` doesn't allow extraneous properties by + * default. This behaviour can be altered by using the `extra` optional + * subspec parameter, which will be called to validate an object only + * containing the extraneous properties. + * + * Calling `t.isObject(..., {extra: t.isRecord(t.isUnknown())})` is + * essentially the same as calling `t.isPartial(...)`. + */ +function isObject(props, { extra: extraSpec = null, } = {}) { + const specKeys = Object.keys(props); + const validator = makeValidator({ + test: (value, state) => { + if (typeof value !== `object` || value === null) + return pushError(state, `Expected an object (got ${getPrintable(value)})`); + const keys = new Set([...specKeys, ...Object.keys(value)]); + const extra = {}; + let valid = true; + for (const key of keys) { + if (key === `constructor` || key === `__proto__`) { + valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Unsafe property name`); + } + else { + const spec = Object.prototype.hasOwnProperty.call(props, key) + ? props[key] + : undefined; + const sub = Object.prototype.hasOwnProperty.call(value, key) + ? value[key] + : undefined; + if (typeof spec !== `undefined`) { + valid = spec(sub, Object.assign(Object.assign({}, state), { p: computeKey(state, key), coercion: makeCoercionFn(value, key) })) && valid; + } + else if (extraSpec === null) { + valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Extraneous property (got ${getPrintable(sub)})`); + } + else { + Object.defineProperty(extra, key, { + enumerable: true, + get: () => sub, + set: makeSetter(value, key) + }); + } + } + if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { + break; + } + } + if (extraSpec !== null && (valid || (state === null || state === void 0 ? void 0 : state.errors) != null)) + valid = extraSpec(extra, state) && valid; + return valid; + }, + }); + return Object.assign(validator, { + properties: props, + }); +} +/** + * Create a validator that only returns true when the tested value is an + * object whose all properties match their corresponding subspec. Refines + * the type into an object whose each property has the type inferred by the + * corresponding subspec. + * + * Unlike `t.isObject`, `t.isPartial` allows extraneous properties. The + * resulting type will reflect this behaviour by including an index + * signature (each extraneous property being typed `unknown`). + * + * Calling `t.isPartial(...)` is essentially the same as calling + * `t.isObject(..., {extra: t.isRecord(t.isUnknown())})`. + */ +function isPartial(props) { + return isObject(props, { extra: isRecord(isUnknown()) }); +} +/** + * Create a validator that only returns true when the tested value is an + * object whose prototype is derived from the given class. Refines the type + * into a class instance. + */ +const isInstanceOf = (constructor) => makeValidator({ + test: (value, state) => { + if (!(value instanceof constructor)) + return pushError(state, `Expected an instance of ${constructor.name} (got ${getPrintable(value)})`); + return true; + }, +}); +/** + * Create a validator that only returns true when the tested value is an + * object matching any of the provided subspecs. If the optional `exclusive` + * parameter is set to `true`, the behaviour changes so that the validator + * only returns true when exactly one subspec matches. + */ +const isOneOf = (specs, { exclusive = false, } = {}) => makeValidator({ + test: (value, state) => { + var _a, _b, _c; + const matches = []; + const errorBuffer = typeof (state === null || state === void 0 ? void 0 : state.errors) !== `undefined` + ? [] : undefined; + for (let t = 0, T = specs.length; t < T; ++t) { + const subErrors = typeof (state === null || state === void 0 ? void 0 : state.errors) !== `undefined` + ? [] : undefined; + const subCoercions = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` + ? [] : undefined; + if (specs[t](value, Object.assign(Object.assign({}, state), { errors: subErrors, coercions: subCoercions, p: `${(_a = state === null || state === void 0 ? void 0 : state.p) !== null && _a !== void 0 ? _a : `.`}#${t + 1}` }))) { + matches.push([`#${t + 1}`, subCoercions]); + if (!exclusive) { + break; + } + } + else { + errorBuffer === null || errorBuffer === void 0 ? void 0 : errorBuffer.push(subErrors[0]); + } + } + if (matches.length === 1) { + const [, subCoercions] = matches[0]; + if (typeof subCoercions !== `undefined`) + (_b = state === null || state === void 0 ? void 0 : state.coercions) === null || _b === void 0 ? void 0 : _b.push(...subCoercions); + return true; + } + if (matches.length > 1) + pushError(state, `Expected to match exactly a single predicate (matched ${matches.join(`, `)})`); + else + (_c = state === null || state === void 0 ? void 0 : state.errors) === null || _c === void 0 ? void 0 : _c.push(...errorBuffer); + return false; + }, +}); + +function makeTrait(value) { + return () => { + return value; + }; +} +function makeValidator({ test }) { + return makeTrait(test)(); +} +class TypeAssertionError extends Error { + constructor({ errors } = {}) { + let errorMessage = `Type mismatch`; + if (errors && errors.length > 0) { + errorMessage += `\n`; + for (const error of errors) { + errorMessage += `\n- ${error}`; + } + } + super(errorMessage); + } +} +/** + * Check that the specified value matches the given validator, and throws an + * exception if it doesn't. Refine the type if it passes. + */ +function assert(val, validator) { + if (!validator(val)) { + throw new TypeAssertionError(); + } +} +/** + * Check that the specified value matches the given validator, and throws an + * exception if it doesn't. Refine the type if it passes. + * + * Thrown exceptions include details about what exactly looks invalid in the + * tested value. + */ +function assertWithErrors(val, validator) { + const errors = []; + if (!validator(val, { errors })) { + throw new TypeAssertionError({ errors }); + } +} +/** + * Compile-time only. Refine the type as if the validator was matching the + * tested value, but doesn't actually run it. Similar to the classic `as` + * operator in TypeScript. + */ +function softAssert(val, validator) { + // It's a soft assert; we tell TypeScript about the type, but we don't need to check it +} +function as(value, validator, { coerce = false, errors: storeErrors, throw: throws } = {}) { + const errors = storeErrors ? [] : undefined; + if (!coerce) { + if (validator(value, { errors })) { + return throws ? value : { value, errors: undefined }; + } + else if (!throws) { + return { value: undefined, errors: errors !== null && errors !== void 0 ? errors : true }; + } + else { + throw new TypeAssertionError({ errors }); + } + } + const state = { value }; + const coercion = makeCoercionFn(state, `value`); + const coercions = []; + if (!validator(value, { errors, coercion, coercions })) { + if (!throws) { + return { value: undefined, errors: errors !== null && errors !== void 0 ? errors : true }; + } + else { + throw new TypeAssertionError({ errors }); + } + } + for (const [, apply] of coercions) + apply(); + if (throws) { + return state.value; + } + else { + return { value: state.value, errors: undefined }; + } +} +/** + * Create and return a new function that apply the given validators to each + * corresponding argument passed to the function and throws an exception in + * case of a mismatch. + */ +function fn(validators, fn) { + const isValidArgList = isTuple(validators); + return ((...args) => { + const check = isValidArgList(args); + if (!check) + throw new TypeAssertionError(); + return fn(...args); + }); +} + +/** + * Create a validator that checks that the tested array or string has at least + * the specified length. + */ +function hasMinLength(length) { + return makeValidator({ + test: (value, state) => { + if (!(value.length >= length)) + return pushError(state, `Expected to have a length of at least ${length} elements (got ${value.length})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested array or string has at most + * the specified length. + */ +function hasMaxLength(length) { + return makeValidator({ + test: (value, state) => { + if (!(value.length <= length)) + return pushError(state, `Expected to have a length of at most ${length} elements (got ${value.length})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested array or string has exactly + * the specified length. + */ +function hasExactLength(length) { + return makeValidator({ + test: (value, state) => { + if (!(value.length === length)) + return pushError(state, `Expected to have a length of exactly ${length} elements (got ${value.length})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested array only contains unique + * elements. The optional `map` parameter lets you define a transform to + * apply before making the check (the result of this transform will be + * discarded afterwards). + */ +function hasUniqueItems({ map, } = {}) { + return makeValidator({ + test: (value, state) => { + const set = new Set(); + const dup = new Set(); + for (let t = 0, T = value.length; t < T; ++t) { + const sub = value[t]; + const key = typeof map !== `undefined` + ? map(sub) + : sub; + if (set.has(key)) { + if (dup.has(key)) + continue; + pushError(state, `Expected to contain unique elements; got a duplicate with ${getPrintable(value)}`); + dup.add(key); + } + else { + set.add(key); + } + } + return dup.size === 0; + }, + }); +} +/** + * Create a validator that checks that the tested number is strictly less than 0. + */ +function isNegative() { + return makeValidator({ + test: (value, state) => { + if (!(value <= 0)) + return pushError(state, `Expected to be negative (got ${value})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested number is equal or greater + * than 0. + */ +function isPositive() { + return makeValidator({ + test: (value, state) => { + if (!(value >= 0)) + return pushError(state, `Expected to be positive (got ${value})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested number is equal or greater + * than the specified reference. + */ +function isAtLeast(n) { + return makeValidator({ + test: (value, state) => { + if (!(value >= n)) + return pushError(state, `Expected to be at least ${n} (got ${value})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested number is equal or smaller + * than the specified reference. + */ +function isAtMost(n) { + return makeValidator({ + test: (value, state) => { + if (!(value <= n)) + return pushError(state, `Expected to be at most ${n} (got ${value})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested number is between the + * specified references (including the upper boundary). + */ +function isInInclusiveRange(a, b) { + return makeValidator({ + test: (value, state) => { + if (!(value >= a && value <= b)) + return pushError(state, `Expected to be in the [${a}; ${b}] range (got ${value})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested number is between the + * specified references (excluding the upper boundary). + */ +function isInExclusiveRange(a, b) { + return makeValidator({ + test: (value, state) => { + if (!(value >= a && value < b)) + return pushError(state, `Expected to be in the [${a}; ${b}[ range (got ${value})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested number is an integer. + * + * By default Typanion will also check that it's a *safe* integer. For example, + * 2^53 wouldn't be a safe integer because 2^53+1 would be rounded to 2^53, + * which could put your applications at risk when used in loops. + */ +function isInteger({ unsafe = false, } = {}) { + return makeValidator({ + test: (value, state) => { + if (value !== Math.round(value)) + return pushError(state, `Expected to be an integer (got ${value})`); + if (!unsafe && !Number.isSafeInteger(value)) + return pushError(state, `Expected to be a safe integer (got ${value})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested string matches the given + * regular expression. + */ +function matchesRegExp(regExp) { + return makeValidator({ + test: (value, state) => { + if (!regExp.test(value)) + return pushError(state, `Expected to match the pattern ${regExp.toString()} (got ${getPrintable(value)})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested string only contain lowercase + * characters. + */ +function isLowerCase() { + return makeValidator({ + test: (value, state) => { + if (value !== value.toLowerCase()) + return pushError(state, `Expected to be all-lowercase (got ${value})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested string only contain uppercase + * characters. + */ +function isUpperCase() { + return makeValidator({ + test: (value, state) => { + if (value !== value.toUpperCase()) + return pushError(state, `Expected to be all-uppercase (got ${value})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested string is a valid UUID v4. + */ +function isUUID4() { + return makeValidator({ + test: (value, state) => { + if (!uuid4RegExp.test(value)) + return pushError(state, `Expected to be a valid UUID v4 (got ${getPrintable(value)})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested string is a valid ISO8601 + * date. + */ +function isISO8601() { + return makeValidator({ + test: (value, state) => { + if (!iso8601RegExp.test(value)) + return pushError(state, `Expected to be a valid ISO 8601 date string (got ${getPrintable(value)})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested string is a valid hexadecimal + * color. Setting the optional `alpha` parameter to `true` allows an additional + * transparency channel to be included. + */ +function isHexColor({ alpha = false, }) { + return makeValidator({ + test: (value, state) => { + const res = alpha + ? colorStringRegExp.test(value) + : colorStringAlphaRegExp.test(value); + if (!res) + return pushError(state, `Expected to be a valid hexadecimal color string (got ${getPrintable(value)})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested string is valid base64. + */ +function isBase64() { + return makeValidator({ + test: (value, state) => { + if (!base64RegExp.test(value)) + return pushError(state, `Expected to be a valid base 64 string (got ${getPrintable(value)})`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested string is valid JSON. A + * optional spec can be passed as parameter, in which case the data will be + * deserialized and validated against the spec (coercion will be disabled + * for this check, and even if successful the returned value will still be + * the original string). + */ +function isJSON(spec = isUnknown()) { + return makeValidator({ + test: (value, state) => { + let data; + try { + data = JSON.parse(value); + } + catch (_a) { + return pushError(state, `Expected to be a valid JSON string (got ${getPrintable(value)})`); + } + return spec(data, state); + }, + }); +} + +function cascade(spec, ...followups) { + const resolvedFollowups = Array.isArray(followups[0]) + ? followups[0] + : followups; + return makeValidator({ + test: (value, state) => { + var _a, _b; + const context = { value: value }; + const subCoercion = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` + ? makeCoercionFn(context, `value`) : undefined; + const subCoercions = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` + ? [] : undefined; + if (!spec(value, Object.assign(Object.assign({}, state), { coercion: subCoercion, coercions: subCoercions }))) + return false; + const reverts = []; + if (typeof subCoercions !== `undefined`) + for (const [, coercion] of subCoercions) + reverts.push(coercion()); + try { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (context.value !== value) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, context.value)]); + } + (_b = state === null || state === void 0 ? void 0 : state.coercions) === null || _b === void 0 ? void 0 : _b.push(...subCoercions); + } + return resolvedFollowups.every(spec => { + return spec(context.value, state); + }); + } + finally { + for (const revert of reverts) { + revert(); + } + } + }, + }); +} +function applyCascade(spec, ...followups) { + const resolvedFollowups = Array.isArray(followups[0]) + ? followups[0] + : followups; + return cascade(spec, resolvedFollowups); +} +/** + * Wraps the given spec to also allow `undefined`. + */ +function isOptional(spec) { + return makeValidator({ + test: (value, state) => { + if (typeof value === `undefined`) + return true; + return spec(value, state); + }, + }); +} +/** + * Wraps the given spec to also allow `null`. + */ +function isNullable(spec) { + return makeValidator({ + test: (value, state) => { + if (value === null) + return true; + return spec(value, state); + }, + }); +} +/** + * Create a validator that checks that the tested object contains the specified + * keys. + */ +function hasRequiredKeys(requiredKeys) { + const requiredSet = new Set(requiredKeys); + return makeValidator({ + test: (value, state) => { + const keys = new Set(Object.keys(value)); + const problems = []; + for (const key of requiredSet) + if (!keys.has(key)) + problems.push(key); + if (problems.length > 0) + return pushError(state, `Missing required ${plural(problems.length, `property`, `properties`)} ${getPrintableArray(problems, `and`)}`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested object contains none of the + * specified keys. + */ +function hasForbiddenKeys(forbiddenKeys) { + const forbiddenSet = new Set(forbiddenKeys); + return makeValidator({ + test: (value, state) => { + const keys = new Set(Object.keys(value)); + const problems = []; + for (const key of forbiddenSet) + if (keys.has(key)) + problems.push(key); + if (problems.length > 0) + return pushError(state, `Forbidden ${plural(problems.length, `property`, `properties`)} ${getPrintableArray(problems, `and`)}`); + return true; + }, + }); +} +/** + * Create a validator that checks that the tested object contains at most one + * of the specified keys. + */ +function hasMutuallyExclusiveKeys(exclusiveKeys) { + const exclusiveSet = new Set(exclusiveKeys); + return makeValidator({ + test: (value, state) => { + const keys = new Set(Object.keys(value)); + const used = []; + for (const key of exclusiveSet) + if (keys.has(key)) + used.push(key); + if (used.length > 1) + return pushError(state, `Mutually exclusive properties ${getPrintableArray(used, `and`)}`); + return true; + }, + }); +} +(function (KeyRelationship) { + KeyRelationship["Forbids"] = "Forbids"; + KeyRelationship["Requires"] = "Requires"; +})(exports.KeyRelationship || (exports.KeyRelationship = {})); +const keyRelationships = { + [exports.KeyRelationship.Forbids]: { + expect: false, + message: `forbids using`, + }, + [exports.KeyRelationship.Requires]: { + expect: true, + message: `requires using`, + }, +}; +/** + * Create a validator that checks that, when the specified subject property is + * set, the relationship is satisfied. + */ +function hasKeyRelationship(subject, relationship, others, { ignore = [], } = {}) { + const skipped = new Set(ignore); + const otherSet = new Set(others); + const spec = keyRelationships[relationship]; + const conjunction = relationship === exports.KeyRelationship.Forbids + ? `or` + : `and`; + return makeValidator({ + test: (value, state) => { + const keys = new Set(Object.keys(value)); + if (!keys.has(subject) || skipped.has(value[subject])) + return true; + const problems = []; + for (const key of otherSet) + if ((keys.has(key) && !skipped.has(value[key])) !== spec.expect) + problems.push(key); + if (problems.length >= 1) + return pushError(state, `Property "${subject}" ${spec.message} ${plural(problems.length, `property`, `properties`)} ${getPrintableArray(problems, conjunction)}`); + return true; + }, + }); +} + +exports.TypeAssertionError = TypeAssertionError; +exports.applyCascade = applyCascade; +exports.as = as; +exports.assert = assert; +exports.assertWithErrors = assertWithErrors; +exports.cascade = cascade; +exports.fn = fn; +exports.hasExactLength = hasExactLength; +exports.hasForbiddenKeys = hasForbiddenKeys; +exports.hasKeyRelationship = hasKeyRelationship; +exports.hasMaxLength = hasMaxLength; +exports.hasMinLength = hasMinLength; +exports.hasMutuallyExclusiveKeys = hasMutuallyExclusiveKeys; +exports.hasRequiredKeys = hasRequiredKeys; +exports.hasUniqueItems = hasUniqueItems; +exports.isArray = isArray; +exports.isAtLeast = isAtLeast; +exports.isAtMost = isAtMost; +exports.isBase64 = isBase64; +exports.isBoolean = isBoolean; +exports.isDate = isDate; +exports.isDict = isDict; +exports.isEnum = isEnum; +exports.isHexColor = isHexColor; +exports.isISO8601 = isISO8601; +exports.isInExclusiveRange = isInExclusiveRange; +exports.isInInclusiveRange = isInInclusiveRange; +exports.isInstanceOf = isInstanceOf; +exports.isInteger = isInteger; +exports.isJSON = isJSON; +exports.isLiteral = isLiteral; +exports.isLowerCase = isLowerCase; +exports.isMap = isMap; +exports.isNegative = isNegative; +exports.isNullable = isNullable; +exports.isNumber = isNumber; +exports.isObject = isObject; +exports.isOneOf = isOneOf; +exports.isOptional = isOptional; +exports.isPartial = isPartial; +exports.isPositive = isPositive; +exports.isRecord = isRecord; +exports.isSet = isSet; +exports.isString = isString; +exports.isTuple = isTuple; +exports.isUUID4 = isUUID4; +exports.isUnknown = isUnknown; +exports.isUpperCase = isUpperCase; +exports.makeTrait = makeTrait; +exports.makeValidator = makeValidator; +exports.matchesRegExp = matchesRegExp; +exports.softAssert = softAssert; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/which-npm-2.0.2-320ddf72f7-9.zip/node_modules/which/which.js": +/*!***********************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/which-npm-2.0.2-320ddf72f7-9.zip/node_modules/which/which.js ***! + \***********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const isWindows = process.platform === 'win32' || + process.env.OSTYPE === 'cygwin' || + process.env.OSTYPE === 'msys' + +const path = __webpack_require__(/*! path */ "path") +const COLON = isWindows ? ';' : ':' +const isexe = __webpack_require__(/*! isexe */ "../../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-9.zip/node_modules/isexe/index.js") + +const getNotFoundError = (cmd) => + Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) + +const getPathInfo = (cmd, opt) => { + const colon = opt.colon || COLON + + // If it has a slash, then we don't bother searching the pathenv. + // just check the file itself, and that's it. + const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [''] + : ( + [ + // windows always checks the cwd first + ...(isWindows ? [process.cwd()] : []), + ...(opt.path || process.env.PATH || + /* istanbul ignore next: very unusual */ '').split(colon), + ] + ) + const pathExtExe = isWindows + ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM' + : '' + const pathExt = isWindows ? pathExtExe.split(colon) : [''] + + if (isWindows) { + if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') + pathExt.unshift('') + } + + return { + pathEnv, + pathExt, + pathExtExe, + } +} + +const which = (cmd, opt, cb) => { + if (typeof opt === 'function') { + cb = opt + opt = {} + } + if (!opt) + opt = {} + + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) + const found = [] + + const step = i => new Promise((resolve, reject) => { + if (i === pathEnv.length) + return opt.all && found.length ? resolve(found) + : reject(getNotFoundError(cmd)) + + const ppRaw = pathEnv[i] + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw + + const pCmd = path.join(pathPart, cmd) + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd + : pCmd + + resolve(subStep(p, i, 0)) + }) + + const subStep = (p, i, ii) => new Promise((resolve, reject) => { + if (ii === pathExt.length) + return resolve(step(i + 1)) + const ext = pathExt[ii] + isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { + if (!er && is) { + if (opt.all) + found.push(p + ext) + else + return resolve(p + ext) + } + return resolve(subStep(p, i, ii + 1)) + }) + }) + + return cb ? step(0).then(res => cb(null, res), cb) : step(0) +} + +const whichSync = (cmd, opt) => { + opt = opt || {} + + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) + const found = [] + + for (let i = 0; i < pathEnv.length; i ++) { + const ppRaw = pathEnv[i] + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw + + const pCmd = path.join(pathPart, cmd) + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd + : pCmd + + for (let j = 0; j < pathExt.length; j ++) { + const cur = p + pathExt[j] + try { + const is = isexe.sync(cur, { pathExt: pathExtExe }) + if (is) { + if (opt.all) + found.push(cur) + else + return cur + } + } catch (ex) {} + } + } + + if (opt.all && found.length) + return found + + if (opt.nothrow) + return null + + throw getNotFoundError(cmd) +} + +module.exports = which +which.sync = whichSync + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/yallist-npm-4.0.0-b493d9e907-9.zip/node_modules/yallist/iterator.js": +/*!******************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/yallist-npm-4.0.0-b493d9e907-9.zip/node_modules/yallist/iterator.js ***! + \******************************************************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (Yallist) { + Yallist.prototype[Symbol.iterator] = function* () { + for (let walker = this.head; walker; walker = walker.next) { + yield walker.value + } + } +} + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/yallist-npm-4.0.0-b493d9e907-9.zip/node_modules/yallist/yallist.js": +/*!*****************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/yallist-npm-4.0.0-b493d9e907-9.zip/node_modules/yallist/yallist.js ***! + \*****************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +module.exports = Yallist + +Yallist.Node = Node +Yallist.create = Yallist + +function Yallist (list) { + var self = this + if (!(self instanceof Yallist)) { + self = new Yallist() + } + + self.tail = null + self.head = null + self.length = 0 + + if (list && typeof list.forEach === 'function') { + list.forEach(function (item) { + self.push(item) + }) + } else if (arguments.length > 0) { + for (var i = 0, l = arguments.length; i < l; i++) { + self.push(arguments[i]) + } + } + + return self +} + +Yallist.prototype.removeNode = function (node) { + if (node.list !== this) { + throw new Error('removing node which does not belong to this list') + } + + var next = node.next + var prev = node.prev + + if (next) { + next.prev = prev + } + + if (prev) { + prev.next = next + } + + if (node === this.head) { + this.head = next + } + if (node === this.tail) { + this.tail = prev + } + + node.list.length-- + node.next = null + node.prev = null + node.list = null + + return next +} + +Yallist.prototype.unshiftNode = function (node) { + if (node === this.head) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var head = this.head + node.list = this + node.next = head + if (head) { + head.prev = node + } + + this.head = node + if (!this.tail) { + this.tail = node + } + this.length++ +} + +Yallist.prototype.pushNode = function (node) { + if (node === this.tail) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var tail = this.tail + node.list = this + node.prev = tail + if (tail) { + tail.next = node + } + + this.tail = node + if (!this.head) { + this.head = node + } + this.length++ +} + +Yallist.prototype.push = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + push(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.unshift = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + unshift(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.pop = function () { + if (!this.tail) { + return undefined + } + + var res = this.tail.value + this.tail = this.tail.prev + if (this.tail) { + this.tail.next = null + } else { + this.head = null + } + this.length-- + return res +} + +Yallist.prototype.shift = function () { + if (!this.head) { + return undefined + } + + var res = this.head.value + this.head = this.head.next + if (this.head) { + this.head.prev = null + } else { + this.tail = null + } + this.length-- + return res +} + +Yallist.prototype.forEach = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.head, i = 0; walker !== null; i++) { + fn.call(thisp, walker.value, i, this) + walker = walker.next + } +} + +Yallist.prototype.forEachReverse = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { + fn.call(thisp, walker.value, i, this) + walker = walker.prev + } +} + +Yallist.prototype.get = function (n) { + for (var i = 0, walker = this.head; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.next + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.getReverse = function (n) { + for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.prev + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.map = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.head; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.next + } + return res +} + +Yallist.prototype.mapReverse = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.tail; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.prev + } + return res +} + +Yallist.prototype.reduce = function (fn, initial) { + var acc + var walker = this.head + if (arguments.length > 1) { + acc = initial + } else if (this.head) { + walker = this.head.next + acc = this.head.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = 0; walker !== null; i++) { + acc = fn(acc, walker.value, i) + walker = walker.next + } + + return acc +} + +Yallist.prototype.reduceReverse = function (fn, initial) { + var acc + var walker = this.tail + if (arguments.length > 1) { + acc = initial + } else if (this.tail) { + walker = this.tail.prev + acc = this.tail.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = this.length - 1; walker !== null; i--) { + acc = fn(acc, walker.value, i) + walker = walker.prev + } + + return acc +} + +Yallist.prototype.toArray = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.head; walker !== null; i++) { + arr[i] = walker.value + walker = walker.next + } + return arr +} + +Yallist.prototype.toArrayReverse = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.tail; walker !== null; i++) { + arr[i] = walker.value + walker = walker.prev + } + return arr +} + +Yallist.prototype.slice = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = 0, walker = this.head; walker !== null && i < from; i++) { + walker = walker.next + } + for (; walker !== null && i < to; i++, walker = walker.next) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.sliceReverse = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { + walker = walker.prev + } + for (; walker !== null && i > from; i--, walker = walker.prev) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.splice = function (start, deleteCount, ...nodes) { + if (start > this.length) { + start = this.length - 1 + } + if (start < 0) { + start = this.length + start; + } + + for (var i = 0, walker = this.head; walker !== null && i < start; i++) { + walker = walker.next + } + + var ret = [] + for (var i = 0; walker && i < deleteCount; i++) { + ret.push(walker.value) + walker = this.removeNode(walker) + } + if (walker === null) { + walker = this.tail + } + + if (walker !== this.head && walker !== this.tail) { + walker = walker.prev } - [CONSUMEBODY] (chunk, position) { - // write up to but no more than writeEntry.blockRemain - const entry = this[WRITEENTRY] - const br = entry.blockRemain - const c = (br >= chunk.length && position === 0) ? chunk - : chunk.slice(position, position + br) + for (var i = 0; i < nodes.length; i++) { + walker = insert(this, walker, nodes[i]) + } + return ret; +} + +Yallist.prototype.reverse = function () { + var head = this.head + var tail = this.tail + for (var walker = head; walker !== null; walker = walker.prev) { + var p = walker.prev + walker.prev = walker.next + walker.next = p + } + this.head = tail + this.tail = head + return this +} + +function insert (self, node, value) { + var inserted = node === self.head ? + new Node(value, null, node, self) : + new Node(value, node, node.next, self) + + if (inserted.next === null) { + self.tail = inserted + } + if (inserted.prev === null) { + self.head = inserted + } + + self.length++ + + return inserted +} + +function push (self, item) { + self.tail = new Node(item, self.tail, null, self) + if (!self.head) { + self.head = self.tail + } + self.length++ +} + +function unshift (self, item) { + self.head = new Node(item, null, self.head, self) + if (!self.tail) { + self.tail = self.head + } + self.length++ +} + +function Node (value, prev, next, list) { + if (!(this instanceof Node)) { + return new Node(value, prev, next, list) + } + + this.list = list + this.value = value + + if (prev) { + prev.next = this + this.prev = prev + } else { + this.prev = null + } + + if (next) { + next.prev = this + this.next = next + } else { + this.next = null + } +} + +try { + // add if support for Symbol.iterator is present + __webpack_require__(/*! ./iterator.js */ "../../../.yarn/berry/cache/yallist-npm-4.0.0-b493d9e907-9.zip/node_modules/yallist/iterator.js")(Yallist) +} catch (er) {} + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Cli.js": +/*!************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Cli.js ***! + \************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var constants = __webpack_require__(/*! ../constants.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/constants.js"); +var Command = __webpack_require__(/*! ./Command.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Command.js"); +var core = __webpack_require__(/*! ../core.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/core.js"); +var format = __webpack_require__(/*! ../format.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/format.js"); +var HelpCommand = __webpack_require__(/*! ./HelpCommand.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/HelpCommand.js"); + +const errorCommandSymbol = Symbol(`clipanion/errorCommand`); +function getDefaultColorSettings() { + if (process.env.FORCE_COLOR === `0`) + return false; + if (process.env.FORCE_COLOR === `1`) + return true; + if (typeof process.stdout !== `undefined` && process.stdout.isTTY) + return true; + return false; +} +/** + * @template Context The context shared by all commands. Contexts are a set of values, defined when calling the `run`/`runExit` functions from the CLI instance, that will be made available to the commands via `this.context`. + */ +class Cli { + constructor({ binaryLabel, binaryName: binaryNameOpt = `...`, binaryVersion, enableCapture = false, enableColors = getDefaultColorSettings() } = {}) { + this.registrations = new Map(); + this.builder = new core.CliBuilder({ binaryName: binaryNameOpt }); + this.binaryLabel = binaryLabel; + this.binaryName = binaryNameOpt; + this.binaryVersion = binaryVersion; + this.enableCapture = enableCapture; + this.enableColors = enableColors; + } + /** + * Creates a new Cli and registers all commands passed as parameters. + * + * @param commandClasses The Commands to register + * @returns The created `Cli` instance + */ + static from(commandClasses, options = {}) { + const cli = new Cli(options); + for (const commandClass of commandClasses) + cli.register(commandClass); + return cli; + } + /** + * Registers a command inside the CLI. + */ + register(commandClass) { + var _a; + const specs = new Map(); + const command = new commandClass(); + for (const key in command) { + const value = command[key]; + if (typeof value === `object` && value !== null && value[Command.Command.isOption]) { + specs.set(key, value); + } + } + const builder = this.builder.command(); + const index = builder.cliIndex; + const paths = (_a = commandClass.paths) !== null && _a !== void 0 ? _a : command.paths; + if (typeof paths !== `undefined`) + for (const path of paths) + builder.addPath(path); + this.registrations.set(commandClass, { specs, builder, index }); + for (const [key, { definition }] of specs.entries()) + definition(builder, key); + builder.setContext({ + commandClass, + }); + } + process(input) { + const { contexts, process } = this.builder.compile(); + const state = process(input); + switch (state.selectedIndex) { + case constants.HELP_COMMAND_INDEX: + { + return HelpCommand.HelpCommand.from(state, contexts); + } + default: + { + const { commandClass } = contexts[state.selectedIndex]; + const record = this.registrations.get(commandClass); + if (typeof record === `undefined`) + throw new Error(`Assertion failed: Expected the command class to have been registered.`); + const command = new commandClass(); + command.path = state.path; + try { + for (const [key, { transformer }] of record.specs.entries()) + command[key] = transformer(record.builder, key, state); + return command; + } + catch (error) { + error[errorCommandSymbol] = command; + throw error; + } + } + break; + } + } + async run(input, userContext) { + let command; + const context = { + ...Cli.defaultContext, + ...userContext, + }; + if (!Array.isArray(input)) { + command = input; + } + else { + try { + command = this.process(input); + } + catch (error) { + context.stdout.write(this.error(error)); + return 1; + } + } + if (command.help) { + context.stdout.write(this.usage(command, { detailed: true })); + return 0; + } + command.context = context; + command.cli = { + binaryLabel: this.binaryLabel, + binaryName: this.binaryName, + binaryVersion: this.binaryVersion, + enableCapture: this.enableCapture, + enableColors: this.enableColors, + definitions: () => this.definitions(), + error: (error, opts) => this.error(error, opts), + process: input => this.process(input), + run: (input, subContext) => this.run(input, { ...context, ...subContext }), + usage: (command, opts) => this.usage(command, opts), + }; + const activate = this.enableCapture + ? getCaptureActivator(context) + : noopCaptureActivator; + let exitCode; + try { + exitCode = await activate(() => command.validateAndExecute().catch(error => command.catch(error).then(() => 0))); + } + catch (error) { + context.stdout.write(this.error(error, { command })); + return 1; + } + return exitCode; + } + /** + * Runs a command and exits the current `process` with the exit code returned by the command. + * + * @param input An array containing the name of the command and its arguments. + * + * @example + * cli.runExit(process.argv.slice(2)) + */ + async runExit(input, context) { + process.exitCode = await this.run(input, context); + } + suggest(input, partial) { + const { suggest } = this.builder.compile(); + return suggest(input, partial); + } + definitions({ colored = false } = {}) { + const data = []; + for (const [commandClass, { index }] of this.registrations) { + if (typeof commandClass.usage === `undefined`) + continue; + const { usage: path } = this.getUsageByIndex(index, { detailed: false }); + const { usage, options } = this.getUsageByIndex(index, { detailed: true, inlineOptions: false }); + const category = typeof commandClass.usage.category !== `undefined` + ? format.formatMarkdownish(commandClass.usage.category, { format: this.format(colored), paragraphs: false }) + : undefined; + const description = typeof commandClass.usage.description !== `undefined` + ? format.formatMarkdownish(commandClass.usage.description, { format: this.format(colored), paragraphs: false }) + : undefined; + const details = typeof commandClass.usage.details !== `undefined` + ? format.formatMarkdownish(commandClass.usage.details, { format: this.format(colored), paragraphs: true }) + : undefined; + const examples = typeof commandClass.usage.examples !== `undefined` + ? commandClass.usage.examples.map(([label, cli]) => [format.formatMarkdownish(label, { format: this.format(colored), paragraphs: false }), cli.replace(/\$0/g, this.binaryName)]) + : undefined; + data.push({ path, usage, category, description, details, examples, options }); + } + return data; + } + usage(command = null, { colored, detailed = false, prefix = `$ ` } = {}) { + var _a; + // In case the default command is the only one, we can just show the command help rather than the general one + if (command === null) { + for (const commandClass of this.registrations.keys()) { + const paths = commandClass.paths; + const isDocumented = typeof commandClass.usage !== `undefined`; + const isExclusivelyDefault = !paths || paths.length === 0 || (paths.length === 1 && paths[0].length === 0); + const isDefault = isExclusivelyDefault || ((_a = paths === null || paths === void 0 ? void 0 : paths.some(path => path.length === 0)) !== null && _a !== void 0 ? _a : false); + if (isDefault) { + if (command) { + command = null; + break; + } + else { + command = commandClass; + } + } + else { + if (isDocumented) { + command = null; + continue; + } + } + } + if (command) { + detailed = true; + } + } + // @ts-ignore + const commandClass = command !== null && command instanceof Command.Command + ? command.constructor + : command; + let result = ``; + if (!commandClass) { + const commandsByCategories = new Map(); + for (const [commandClass, { index }] of this.registrations.entries()) { + if (typeof commandClass.usage === `undefined`) + continue; + const category = typeof commandClass.usage.category !== `undefined` + ? format.formatMarkdownish(commandClass.usage.category, { format: this.format(colored), paragraphs: false }) + : null; + let categoryCommands = commandsByCategories.get(category); + if (typeof categoryCommands === `undefined`) + commandsByCategories.set(category, categoryCommands = []); + const { usage } = this.getUsageByIndex(index); + categoryCommands.push({ commandClass, usage }); + } + const categoryNames = Array.from(commandsByCategories.keys()).sort((a, b) => { + if (a === null) + return -1; + if (b === null) + return +1; + return a.localeCompare(b, `en`, { usage: `sort`, caseFirst: `upper` }); + }); + const hasLabel = typeof this.binaryLabel !== `undefined`; + const hasVersion = typeof this.binaryVersion !== `undefined`; + if (hasLabel || hasVersion) { + if (hasLabel && hasVersion) + result += `${this.format(colored).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`; + else if (hasLabel) + result += `${this.format(colored).header(`${this.binaryLabel}`)}\n`; + else + result += `${this.format(colored).header(`${this.binaryVersion}`)}\n`; + result += ` ${this.format(colored).bold(prefix)}${this.binaryName} \n`; + } + else { + result += `${this.format(colored).bold(prefix)}${this.binaryName} \n`; + } + for (const categoryName of categoryNames) { + const commands = commandsByCategories.get(categoryName).slice().sort((a, b) => { + return a.usage.localeCompare(b.usage, `en`, { usage: `sort`, caseFirst: `upper` }); + }); + const header = categoryName !== null + ? categoryName.trim() + : `General commands`; + result += `\n`; + result += `${this.format(colored).header(`${header}`)}\n`; + for (const { commandClass, usage } of commands) { + const doc = commandClass.usage.description || `undocumented`; + result += `\n`; + result += ` ${this.format(colored).bold(usage)}\n`; + result += ` ${format.formatMarkdownish(doc, { format: this.format(colored), paragraphs: false })}`; + } + } + result += `\n`; + result += format.formatMarkdownish(`You can also print more details about any of these commands by calling them with the \`-h,--help\` flag right after the command name.`, { format: this.format(colored), paragraphs: true }); + } + else { + if (!detailed) { + const { usage } = this.getUsageByRegistration(commandClass); + result += `${this.format(colored).bold(prefix)}${usage}\n`; + } + else { + const { description = ``, details = ``, examples = [], } = commandClass.usage || {}; + if (description !== ``) { + result += format.formatMarkdownish(description, { format: this.format(colored), paragraphs: false }).replace(/^./, $0 => $0.toUpperCase()); + result += `\n`; + } + if (details !== `` || examples.length > 0) { + result += `${this.format(colored).header(`Usage`)}\n`; + result += `\n`; + } + const { usage, options } = this.getUsageByRegistration(commandClass, { inlineOptions: false }); + result += `${this.format(colored).bold(prefix)}${usage}\n`; + if (options.length > 0) { + result += `\n`; + result += `${format.richFormat.header(`Options`)}\n`; + const maxDefinitionLength = options.reduce((length, option) => { + return Math.max(length, option.definition.length); + }, 0); + result += `\n`; + for (const { definition, description } of options) { + result += ` ${this.format(colored).bold(definition.padEnd(maxDefinitionLength))} ${format.formatMarkdownish(description, { format: this.format(colored), paragraphs: false })}`; + } + } + if (details !== ``) { + result += `\n`; + result += `${this.format(colored).header(`Details`)}\n`; + result += `\n`; + result += format.formatMarkdownish(details, { format: this.format(colored), paragraphs: true }); + } + if (examples.length > 0) { + result += `\n`; + result += `${this.format(colored).header(`Examples`)}\n`; + for (const [description, example] of examples) { + result += `\n`; + result += format.formatMarkdownish(description, { format: this.format(colored), paragraphs: false }); + result += `${example + .replace(/^/m, ` ${this.format(colored).bold(prefix)}`) + .replace(/\$0/g, this.binaryName)}\n`; + } + } + } + } + return result; + } + error(error, _a) { + var _b; + var { colored, command = (_b = error[errorCommandSymbol]) !== null && _b !== void 0 ? _b : null } = _a === void 0 ? {} : _a; + if (!(error instanceof Error)) + error = new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(error)})`); + let result = ``; + let name = error.name.replace(/([a-z])([A-Z])/g, `$1 $2`); + if (name === `Error`) + name = `Internal Error`; + result += `${this.format(colored).error(name)}: ${error.message}\n`; + const meta = error.clipanion; + if (typeof meta !== `undefined`) { + if (meta.type === `usage`) { + result += `\n`; + result += this.usage(command); + } + } + else { + if (error.stack) { + result += `${error.stack.replace(/^.*\n/, ``)}\n`; + } + } + return result; + } + getUsageByRegistration(klass, opts) { + const record = this.registrations.get(klass); + if (typeof record === `undefined`) + throw new Error(`Assertion failed: Unregistered command`); + return this.getUsageByIndex(record.index, opts); + } + getUsageByIndex(n, opts) { + return this.builder.getBuilderByIndex(n).usage(opts); + } + format(colored = this.enableColors) { + return colored ? format.richFormat : format.textFormat; + } +} +/** + * The default context of the CLI. + * + * Contains the stdio of the current `process`. + */ +Cli.defaultContext = { + stdin: process.stdin, + stdout: process.stdout, + stderr: process.stderr, +}; +let gContextStorage; +function getCaptureActivator(context) { + let contextStorage = gContextStorage; + if (typeof contextStorage === `undefined`) { + if (context.stdout === process.stdout && context.stderr === process.stderr) + return noopCaptureActivator; + const { AsyncLocalStorage: LazyAsyncLocalStorage } = __webpack_require__(/*! async_hooks */ "async_hooks"); + contextStorage = gContextStorage = new LazyAsyncLocalStorage(); + const origStdoutWrite = process.stdout._write; + process.stdout._write = function (chunk, encoding, cb) { + const context = contextStorage.getStore(); + if (typeof context === `undefined`) + return origStdoutWrite.call(this, chunk, encoding, cb); + return context.stdout.write(chunk, encoding, cb); + }; + const origStderrWrite = process.stderr._write; + process.stderr._write = function (chunk, encoding, cb) { + const context = contextStorage.getStore(); + if (typeof context === `undefined`) + return origStderrWrite.call(this, chunk, encoding, cb); + return context.stderr.write(chunk, encoding, cb); + }; + } + return (fn) => { + return contextStorage.run(context, fn); + }; +} +function noopCaptureActivator(fn) { + return fn(); +} + +exports.Cli = Cli; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Command.js": +/*!****************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Command.js ***! + \****************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var utils = __webpack_require__(/*! ./options/utils.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/utils.js"); + +function _interopNamespace(e) { + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { + return e[k]; + } + }); + } + }); + } + n['default'] = e; + return Object.freeze(n); +} + +class Command { + constructor() { + /** + * Predefined that will be set to true if `-h,--help` has been used, in + * which case `Command#execute` won't be called. + */ + this.help = false; + } + /** + * Defines the usage information for the given command. + */ + static Usage(usage) { + return usage; + } + /** + * Standard error handler which will simply rethrow the error. Can be used + * to add custom logic to handle errors from the command or simply return + * the parent class error handling. + */ + async catch(error) { + throw error; + } + async validateAndExecute() { + const commandClass = this.constructor; + const cascade = commandClass.schema; + if (Array.isArray(cascade)) { + const { isDict, isUnknown, applyCascade } = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(__webpack_require__(/*! typanion */ "../../../.yarn/berry/cache/typanion-npm-3.9.0-ef0bfe7e8b-9.zip/node_modules/typanion/lib/index.js")); }); + const schema = applyCascade(isDict(isUnknown()), cascade); + const errors = []; + const coercions = []; + const check = schema(this, { errors, coercions }); + if (!check) + throw utils.formatError(`Invalid option schema`, errors); + for (const [, op] of coercions) { + op(); + } + } + else if (cascade != null) { + throw new Error(`Invalid command schema`); + } + const exitCode = await this.execute(); + if (typeof exitCode !== `undefined`) { + return exitCode; + } + else { + return 0; + } + } +} +/** + * Used to detect option definitions. + */ +Command.isOption = utils.isOptionSymbol; +/** + * Just an helper to use along with the `paths` fields, to make it + * clearer that a command is the default one. + * + * @example + * class MyCommand extends Command { + * static paths = [Command.Default]; + * } + */ +Command.Default = []; + +exports.Command = Command; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/HelpCommand.js": +/*!********************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/HelpCommand.js ***! + \********************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var Command = __webpack_require__(/*! ./Command.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Command.js"); + +class HelpCommand extends Command.Command { + constructor(contexts) { + super(); + this.contexts = contexts; + this.commands = []; + } + static from(state, contexts) { + const command = new HelpCommand(contexts); + command.path = state.path; + for (const opt of state.options) { + switch (opt.name) { + case `-c`: + { + command.commands.push(Number(opt.value)); + } + break; + case `-i`: + { + command.index = Number(opt.value); + } + break; + } + } + return command; + } + async execute() { + let commands = this.commands; + if (typeof this.index !== `undefined` && this.index >= 0 && this.index < commands.length) + commands = [commands[this.index]]; + if (commands.length === 0) { + this.context.stdout.write(this.cli.usage()); + } + else if (commands.length === 1) { + this.context.stdout.write(this.cli.usage(this.contexts[commands[0]].commandClass, { detailed: true })); + } + else if (commands.length > 1) { + this.context.stdout.write(`Multiple commands match your selection:\n`); + this.context.stdout.write(`\n`); + let index = 0; + for (const command of this.commands) + this.context.stdout.write(this.cli.usage(this.contexts[command].commandClass, { prefix: `${index++}. `.padStart(5) })); + this.context.stdout.write(`\n`); + this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands.\n`); + } + } +} + +exports.HelpCommand = HelpCommand; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/definitions.js": +/*!*****************************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/definitions.js ***! + \*****************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var Command = __webpack_require__(/*! ../Command.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Command.js"); + +/** + * A command that prints the clipanion definitions. + */ +class DefinitionsCommand extends Command.Command { + async execute() { + this.context.stdout.write(`${JSON.stringify(this.cli.definitions(), null, 2)}\n`); + } +} +DefinitionsCommand.paths = [[`--clipanion=definitions`]]; + +exports.DefinitionsCommand = DefinitionsCommand; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/help.js": +/*!**********************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/help.js ***! + \**********************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var Command = __webpack_require__(/*! ../Command.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Command.js"); + +/** + * A command that prints the usage of all commands. + * + * Paths: `-h`, `--help` + */ +class HelpCommand extends Command.Command { + async execute() { + this.context.stdout.write(this.cli.usage()); + } +} +HelpCommand.paths = [[`-h`], [`--help`]]; + +exports.HelpCommand = HelpCommand; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/index.js": +/*!***********************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/index.js ***! + \***********************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var definitions = __webpack_require__(/*! ./definitions.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/definitions.js"); +var help = __webpack_require__(/*! ./help.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/help.js"); +var version = __webpack_require__(/*! ./version.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/version.js"); + + + +exports.DefinitionsCommand = definitions.DefinitionsCommand; +exports.HelpCommand = help.HelpCommand; +exports.VersionCommand = version.VersionCommand; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/version.js": +/*!*************************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/version.js ***! + \*************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var Command = __webpack_require__(/*! ../Command.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Command.js"); + +/** + * A command that prints the version of the binary (`cli.binaryVersion`). + * + * Paths: `-v`, `--version` + */ +class VersionCommand extends Command.Command { + async execute() { + var _a; + this.context.stdout.write(`${(_a = this.cli.binaryVersion) !== null && _a !== void 0 ? _a : ``}\n`); + } +} +VersionCommand.paths = [[`-v`], [`--version`]]; + +exports.VersionCommand = VersionCommand; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js": +/*!**************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js ***! + \**************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var errors = __webpack_require__(/*! ../errors.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/errors.js"); +var Command = __webpack_require__(/*! ./Command.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Command.js"); +var Cli = __webpack_require__(/*! ./Cli.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/Cli.js"); +var index = __webpack_require__(/*! ./builtins/index.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/builtins/index.js"); +var index$1 = __webpack_require__(/*! ./options/index.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/index.js"); + + + +exports.UsageError = errors.UsageError; +exports.Command = Command.Command; +exports.Cli = Cli.Cli; +exports.Builtins = index; +exports.Option = index$1; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Array.js": +/*!**********************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Array.js ***! + \**********************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/utils.js"); + +function Array(descriptor, initialValueBase, optsBase) { + const [initialValue, opts] = utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); + const { arity = 1 } = opts; + const optNames = descriptor.split(`,`); + const nameSet = new Set(optNames); + return utils.makeCommandOption({ + definition(builder) { + builder.addOption({ + names: optNames, + arity, + hidden: opts === null || opts === void 0 ? void 0 : opts.hidden, + description: opts === null || opts === void 0 ? void 0 : opts.description, + required: opts.required, + }); + }, + transformer(builder, key, state) { + let currentValue = typeof initialValue !== `undefined` + ? [...initialValue] + : undefined; + for (const { name, value } of state.options) { + if (!nameSet.has(name)) + continue; + currentValue = currentValue !== null && currentValue !== void 0 ? currentValue : []; + currentValue.push(value); + } + return currentValue; + }, + }); +} + +exports.Array = Array; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Boolean.js": +/*!************************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Boolean.js ***! + \************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/utils.js"); - entry.write(c) +function Boolean(descriptor, initialValueBase, optsBase) { + const [initialValue, opts] = utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); + const optNames = descriptor.split(`,`); + const nameSet = new Set(optNames); + return utils.makeCommandOption({ + definition(builder) { + builder.addOption({ + names: optNames, + allowBinding: false, + arity: 0, + hidden: opts.hidden, + description: opts.description, + required: opts.required, + }); + }, + transformer(builer, key, state) { + let currentValue = initialValue; + for (const { name, value } of state.options) { + if (!nameSet.has(name)) + continue; + currentValue = value; + } + return currentValue; + }, + }); +} - if (!entry.blockRemain) { - this[STATE] = 'header' - this[WRITEENTRY] = null - entry.end() +exports.Boolean = Boolean; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Counter.js": +/*!************************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Counter.js ***! + \************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/utils.js"); + +function Counter(descriptor, initialValueBase, optsBase) { + const [initialValue, opts] = utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); + const optNames = descriptor.split(`,`); + const nameSet = new Set(optNames); + return utils.makeCommandOption({ + definition(builder) { + builder.addOption({ + names: optNames, + allowBinding: false, + arity: 0, + hidden: opts.hidden, + description: opts.description, + required: opts.required, + }); + }, + transformer(builder, key, state) { + let currentValue = initialValue; + for (const { name, value } of state.options) { + if (!nameSet.has(name)) + continue; + currentValue !== null && currentValue !== void 0 ? currentValue : (currentValue = 0); + // Negated options reset the counter + if (!value) { + currentValue = 0; + } + else { + currentValue += 1; + } + } + return currentValue; + }, + }); +} + +exports.Counter = Counter; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Proxy.js": +/*!**********************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Proxy.js ***! + \**********************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/utils.js"); + +/** + * Used to annotate that the command wants to retrieve all trailing + * arguments that cannot be tied to a declared option. + * + * Be careful: this function is order-dependent! Make sure to define it + * after any positional argument you want to declare. + * + * This function is mutually exclusive with Option.Rest. + * + * @example + * yarn run foo hello --foo=bar world + * ► proxy = ["hello", "--foo=bar", "world"] + */ +function Proxy(opts = {}) { + return utils.makeCommandOption({ + definition(builder, key) { + var _a; + builder.addProxy({ + name: (_a = opts.name) !== null && _a !== void 0 ? _a : key, + required: opts.required, + }); + }, + transformer(builder, key, state) { + return state.positionals.map(({ value }) => value); + }, + }); +} + +exports.Proxy = Proxy; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Rest.js": +/*!*********************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Rest.js ***! + \*********************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/utils.js"); +var core = __webpack_require__(/*! ../../core.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/core.js"); + +/** + * Used to annotate that the command supports any number of positional + * arguments. + * + * Be careful: this function is order-dependent! Make sure to define it + * after any positional argument you want to declare. + * + * This function is mutually exclusive with Option.Proxy. + * + * @example + * yarn add hello world + * ► rest = ["hello", "world"] + */ +function Rest(opts = {}) { + return utils.makeCommandOption({ + definition(builder, key) { + var _a; + builder.addRest({ + name: (_a = opts.name) !== null && _a !== void 0 ? _a : key, + required: opts.required, + }); + }, + transformer(builder, key, state) { + // The builder's arity.extra will always be NoLimits, + // because it is set when we call registerDefinition + const isRestPositional = (index) => { + const positional = state.positionals[index]; + // A NoLimits extra (i.e. an optional rest argument) + if (positional.extra === core.NoLimits) + return true; + // A leading positional (i.e. a required rest argument) + if (positional.extra === false && index < builder.arity.leading.length) + return true; + return false; + }; + let count = 0; + while (count < state.positionals.length && isRestPositional(count)) + count += 1; + return state.positionals.splice(0, count).map(({ value }) => value); + }, + }); +} + +exports.Rest = Rest; + + +/***/ }), + +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/String.js": +/*!***********************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/String.js ***! + \***********************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/utils.js"); +var core = __webpack_require__(/*! ../../core.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/core.js"); + +function StringOption(descriptor, initialValueBase, optsBase) { + const [initialValue, opts] = utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); + const { arity = 1 } = opts; + const optNames = descriptor.split(`,`); + const nameSet = new Set(optNames); + return utils.makeCommandOption({ + definition(builder) { + builder.addOption({ + names: optNames, + arity: opts.tolerateBoolean ? 0 : arity, + hidden: opts.hidden, + description: opts.description, + required: opts.required, + }); + }, + transformer(builder, key, state) { + let usedName; + let currentValue = initialValue; + for (const { name, value } of state.options) { + if (!nameSet.has(name)) + continue; + usedName = name; + currentValue = value; + } + if (typeof currentValue === `string`) { + return utils.applyValidator(usedName !== null && usedName !== void 0 ? usedName : key, currentValue, opts.validator); + } + else { + return currentValue; + } + }, + }); +} +function StringPositional(opts = {}) { + const { required = true } = opts; + return utils.makeCommandOption({ + definition(builder, key) { + var _a; + builder.addPositional({ + name: (_a = opts.name) !== null && _a !== void 0 ? _a : key, + required: opts.required, + }); + }, + transformer(builder, key, state) { + var _a; + for (let i = 0; i < state.positionals.length; ++i) { + // We skip NoLimits extras. We only care about + // required and optional finite positionals. + if (state.positionals[i].extra === core.NoLimits) + continue; + // We skip optional positionals when we only + // care about required positionals. + if (required && state.positionals[i].extra === true) + continue; + // We skip required positionals when we only + // care about optional positionals. + if (!required && state.positionals[i].extra === false) + continue; + // We remove the positional from the list + const [positional] = state.positionals.splice(i, 1); + return utils.applyValidator((_a = opts.name) !== null && _a !== void 0 ? _a : key, positional.value, opts.validator); + } + return undefined; + }, + }); +} +// This function is badly typed, but it doesn't matter because the overloads provide the true public typings +function String(descriptor, ...args) { + if (typeof descriptor === `string`) { + return StringOption(descriptor, ...args); + } + else { + return StringPositional(descriptor); } +} - return c.length - } +exports.String = String; - [CONSUMEMETA] (chunk, position) { - const entry = this[WRITEENTRY] - const ret = this[CONSUMEBODY](chunk, position) - // if we finished, then the entry is reset - if (!this[WRITEENTRY]) - this[EMITMETA](entry) +/***/ }), - return ret - } +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/index.js": +/*!**********************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/index.js ***! + \**********************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - [EMIT] (ev, data, extra) { - if (!this[QUEUE].length && !this[READENTRY]) - this.emit(ev, data, extra) - else - this[QUEUE].push([ev, data, extra]) - } +"use strict"; - [EMITMETA] (entry) { - this[EMIT]('meta', this[META]) - switch (entry.type) { - case 'ExtendedHeader': - case 'OldExtendedHeader': - this[EX] = Pax.parse(this[META], this[EX], false) - break - case 'GlobalExtendedHeader': - this[GEX] = Pax.parse(this[META], this[GEX], true) - break +Object.defineProperty(exports, "__esModule", ({ value: true })); - case 'NextFileHasLongPath': - case 'OldGnuLongPath': - this[EX] = this[EX] || Object.create(null) - this[EX].path = this[META].replace(/\0.*/, '') - break +var utils = __webpack_require__(/*! ./utils.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/utils.js"); +var _Array = __webpack_require__(/*! ./Array.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Array.js"); +var _Boolean = __webpack_require__(/*! ./Boolean.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Boolean.js"); +var Counter = __webpack_require__(/*! ./Counter.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Counter.js"); +var _Proxy = __webpack_require__(/*! ./Proxy.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Proxy.js"); +var Rest = __webpack_require__(/*! ./Rest.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/Rest.js"); +var _String = __webpack_require__(/*! ./String.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/String.js"); - case 'NextFileHasLongLinkpath': - this[EX] = this[EX] || Object.create(null) - this[EX].linkpath = this[META].replace(/\0.*/, '') - break - /* istanbul ignore next */ - default: throw new Error('unknown meta: ' + entry.type) - } - } - abort (error) { - this[ABORTED] = true - this.emit('abort', error) - // always throws, even in non-strict mode - this.warn('TAR_ABORT', error, { recoverable: false }) - } +exports.applyValidator = utils.applyValidator; +exports.cleanValidationError = utils.cleanValidationError; +exports.formatError = utils.formatError; +exports.isOptionSymbol = utils.isOptionSymbol; +exports.makeCommandOption = utils.makeCommandOption; +exports.rerouteArguments = utils.rerouteArguments; +exports.Array = _Array.Array; +exports.Boolean = _Boolean.Boolean; +exports.Counter = Counter.Counter; +exports.Proxy = _Proxy.Proxy; +exports.Rest = Rest.Rest; +exports.String = _String.String; - write (chunk) { - if (this[ABORTED]) - return - // first write, might be gzipped - if (this[UNZIP] === null && chunk) { - if (this[BUFFER]) { - chunk = Buffer.concat([this[BUFFER], chunk]) - this[BUFFER] = null - } - if (chunk.length < gzipHeader.length) { - this[BUFFER] = chunk - return true - } - for (let i = 0; this[UNZIP] === null && i < gzipHeader.length; i++) { - if (chunk[i] !== gzipHeader[i]) - this[UNZIP] = false - } - if (this[UNZIP] === null) { - const ended = this[ENDED] - this[ENDED] = false - this[UNZIP] = new zlib.Unzip() - this[UNZIP].on('data', chunk => this[CONSUMECHUNK](chunk)) - this[UNZIP].on('error', er => this.abort(er)) - this[UNZIP].on('end', _ => { - this[ENDED] = true - this[CONSUMECHUNK]() - }) - this[WRITING] = true - const ret = this[UNZIP][ended ? 'end' : 'write' ](chunk) - this[WRITING] = false - return ret - } - } +/***/ }), - this[WRITING] = true - if (this[UNZIP]) - this[UNZIP].write(chunk) - else - this[CONSUMECHUNK](chunk) - this[WRITING] = false +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/utils.js": +/*!**********************************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/options/utils.js ***! + \**********************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - // return false if there's a queue, or if the current entry isn't flowing - const ret = - this[QUEUE].length ? false : - this[READENTRY] ? this[READENTRY].flowing : - true +"use strict"; - // if we have no queue, then that means a clogged READENTRY - if (!ret && !this[QUEUE].length) - this[READENTRY].once('drain', _ => this.emit('drain')) - return ret - } +Object.defineProperty(exports, "__esModule", ({ value: true })); - [BUFFERCONCAT] (c) { - if (c && !this[ABORTED]) - this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c - } +var errors = __webpack_require__(/*! ../../errors.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/errors.js"); - [MAYBEEND] () { - if (this[ENDED] && - !this[EMITTEDEND] && - !this[ABORTED] && - !this[CONSUMING]) { - this[EMITTEDEND] = true - const entry = this[WRITEENTRY] - if (entry && entry.blockRemain) { - // truncated, likely a damaged file - const have = this[BUFFER] ? this[BUFFER].length : 0 - this.warn('TAR_BAD_ARCHIVE', `Truncated input (needed ${ - entry.blockRemain} more bytes, only ${have} available)`, {entry}) - if (this[BUFFER]) - entry.write(this[BUFFER]) - entry.end() - } - this[EMIT](DONE) +const isOptionSymbol = Symbol(`clipanion/isOption`); +function makeCommandOption(spec) { + // We lie! But it's for the good cause: the cli engine will turn the specs into proper values after instantiation. + return { ...spec, [isOptionSymbol]: true }; +} +function rerouteArguments(a, b) { + if (typeof a === `undefined`) + return [a, b]; + if (typeof a === `object` && a !== null && !Array.isArray(a)) { + return [undefined, a]; } - } - - [CONSUMECHUNK] (chunk) { - if (this[CONSUMING]) - this[BUFFERCONCAT](chunk) - else if (!chunk && !this[BUFFER]) - this[MAYBEEND]() else { - this[CONSUMING] = true - if (this[BUFFER]) { - this[BUFFERCONCAT](chunk) - const c = this[BUFFER] - this[BUFFER] = null - this[CONSUMECHUNKSUB](c) - } else { - this[CONSUMECHUNKSUB](chunk) - } - - while (this[BUFFER] && - this[BUFFER].length >= 512 && - !this[ABORTED] && - !this[SAW_EOF]) { - const c = this[BUFFER] - this[BUFFER] = null - this[CONSUMECHUNKSUB](c) - } - this[CONSUMING] = false + return [a, b]; + } +} +function cleanValidationError(message, lowerCase = false) { + let cleaned = message.replace(/^\.: /, ``); + if (lowerCase) + cleaned = cleaned[0].toLowerCase() + cleaned.slice(1); + return cleaned; +} +function formatError(message, errors$1) { + if (errors$1.length === 1) { + return new errors.UsageError(`${message}: ${cleanValidationError(errors$1[0], true)}`); } + else { + return new errors.UsageError(`${message}:\n${errors$1.map(error => `\n- ${cleanValidationError(error)}`).join(``)}`); + } +} +function applyValidator(name, value, validator) { + if (typeof validator === `undefined`) + return value; + const errors = []; + const coercions = []; + const coercion = (v) => { + const orig = value; + value = v; + return coercion.bind(null, orig); + }; + const check = validator(value, { errors, coercions, coercion }); + if (!check) + throw formatError(`Invalid value for ${name}`, errors); + for (const [, op] of coercions) + op(); + return value; +} - if (!this[BUFFER] || this[ENDED]) - this[MAYBEEND]() - } +exports.applyValidator = applyValidator; +exports.cleanValidationError = cleanValidationError; +exports.formatError = formatError; +exports.isOptionSymbol = isOptionSymbol; +exports.makeCommandOption = makeCommandOption; +exports.rerouteArguments = rerouteArguments; - [CONSUMECHUNKSUB] (chunk) { - // we know that we are in CONSUMING mode, so anything written goes into - // the buffer. Advance the position and put any remainder in the buffer. - let position = 0 - let length = chunk.length - while (position + 512 <= length && !this[ABORTED] && !this[SAW_EOF]) { - switch (this[STATE]) { - case 'begin': - case 'header': - this[CONSUMEHEADER](chunk, position) - position += 512 - break - case 'ignore': - case 'body': - position += this[CONSUMEBODY](chunk, position) - break +/***/ }), - case 'meta': - position += this[CONSUMEMETA](chunk, position) - break +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/constants.js": +/*!*********************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/constants.js ***! + \*********************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { - /* istanbul ignore next */ - default: - throw new Error('invalid state: ' + this[STATE]) - } - } +"use strict"; - if (position < length) { - if (this[BUFFER]) - this[BUFFER] = Buffer.concat([chunk.slice(position), this[BUFFER]]) - else - this[BUFFER] = chunk.slice(position) - } - } - end (chunk) { - if (!this[ABORTED]) { - if (this[UNZIP]) - this[UNZIP].end(chunk) - else { - this[ENDED] = true - this.write(chunk) - } - } - } -}) +Object.defineProperty(exports, "__esModule", ({ value: true })); +const NODE_INITIAL = 0; +const NODE_SUCCESS = 1; +const NODE_ERRORED = 2; +const START_OF_INPUT = `\u0001`; +const END_OF_INPUT = `\u0000`; +const HELP_COMMAND_INDEX = -1; +const HELP_REGEX = /^(-h|--help)(?:=([0-9]+))?$/; +const OPTION_REGEX = /^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/; +const BATCH_REGEX = /^-[a-zA-Z]{2,}$/; +const BINDING_REGEX = /^([^=]+)=([\s\S]*)$/; +const DEBUG = process.env.DEBUG_CLI === `1`; -/***/ }), +exports.BATCH_REGEX = BATCH_REGEX; +exports.BINDING_REGEX = BINDING_REGEX; +exports.DEBUG = DEBUG; +exports.END_OF_INPUT = END_OF_INPUT; +exports.HELP_COMMAND_INDEX = HELP_COMMAND_INDEX; +exports.HELP_REGEX = HELP_REGEX; +exports.NODE_ERRORED = NODE_ERRORED; +exports.NODE_INITIAL = NODE_INITIAL; +exports.NODE_SUCCESS = NODE_SUCCESS; +exports.OPTION_REGEX = OPTION_REGEX; +exports.START_OF_INPUT = START_OF_INPUT; -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/path-reservations.js": -/*!*******************************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/path-reservations.js ***! - \*******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -// A path exclusive reservation system -// reserve([list, of, paths], fn) -// When the fn is first in line for all its paths, it -// is called with a cb that clears the reservation. -// -// Used by async unpack to avoid clobbering paths in use, -// while still allowing maximal safe parallelization. +/***/ }), -const assert = __webpack_require__(/*! assert */ "assert") +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/core.js": +/*!****************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/core.js ***! + \****************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { -module.exports = () => { - // path => [function or Set] - // A Set object means a directory reservation - // A fn is a direct reservation on that path - const queues = new Map() +"use strict"; - // fn => {paths:[path,...], dirs:[path, ...]} - const reservations = new Map() - // return a set of parent dirs for a given path - const { join } = __webpack_require__(/*! path */ "path") - const getDirs = path => - join(path).split(/[\\\/]/).slice(0, -1).reduce((set, path) => - set.length ? set.concat(join(set[set.length-1], path)) : [path], []) +Object.defineProperty(exports, "__esModule", ({ value: true })); - // functions currently running - const running = new Set() +var constants = __webpack_require__(/*! ./constants.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/constants.js"); +var errors = __webpack_require__(/*! ./errors.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/errors.js"); - // return the queues for each path the function cares about - // fn => {paths, dirs} - const getQueues = fn => { - const res = reservations.get(fn) - /* istanbul ignore if - unpossible */ - if (!res) - throw new Error('function does not have any path reservations') +// ------------------------------------------------------------------------ +function debug(str) { + if (constants.DEBUG) { + console.log(str); + } +} +const basicHelpState = { + candidateUsage: null, + requiredOptions: [], + errorMessage: null, + ignoreOptions: false, + path: [], + positionals: [], + options: [], + remainder: null, + selectedIndex: constants.HELP_COMMAND_INDEX, +}; +function makeStateMachine() { return { - paths: res.paths.map(path => queues.get(path)), - dirs: [...res.dirs].map(path => queues.get(path)), + nodes: [makeNode(), makeNode(), makeNode()], + }; +} +function makeAnyOfMachine(inputs) { + const output = makeStateMachine(); + const heads = []; + let offset = output.nodes.length; + for (const input of inputs) { + heads.push(offset); + for (let t = 0; t < input.nodes.length; ++t) + if (!isTerminalNode(t)) + output.nodes.push(cloneNode(input.nodes[t], offset)); + offset += input.nodes.length - 2; + } + for (const head of heads) + registerShortcut(output, constants.NODE_INITIAL, head); + return output; +} +function injectNode(machine, node) { + machine.nodes.push(node); + return machine.nodes.length - 1; +} +function simplifyMachine(input) { + const visited = new Set(); + const process = (node) => { + if (visited.has(node)) + return; + visited.add(node); + const nodeDef = input.nodes[node]; + for (const transitions of Object.values(nodeDef.statics)) + for (const { to } of transitions) + process(to); + for (const [, { to }] of nodeDef.dynamics) + process(to); + for (const { to } of nodeDef.shortcuts) + process(to); + const shortcuts = new Set(nodeDef.shortcuts.map(({ to }) => to)); + while (nodeDef.shortcuts.length > 0) { + const { to } = nodeDef.shortcuts.shift(); + const toDef = input.nodes[to]; + for (const [segment, transitions] of Object.entries(toDef.statics)) { + const store = !Object.prototype.hasOwnProperty.call(nodeDef.statics, segment) + ? nodeDef.statics[segment] = [] + : nodeDef.statics[segment]; + for (const transition of transitions) { + if (!store.some(({ to }) => transition.to === to)) { + store.push(transition); + } + } + } + for (const [test, transition] of toDef.dynamics) + if (!nodeDef.dynamics.some(([otherTest, { to }]) => test === otherTest && transition.to === to)) + nodeDef.dynamics.push([test, transition]); + for (const transition of toDef.shortcuts) { + if (!shortcuts.has(transition.to)) { + nodeDef.shortcuts.push(transition); + shortcuts.add(transition.to); + } + } + } + }; + process(constants.NODE_INITIAL); +} +function debugMachine(machine, { prefix = `` } = {}) { + // Don't iterate unless it's needed + if (constants.DEBUG) { + debug(`${prefix}Nodes are:`); + for (let t = 0; t < machine.nodes.length; ++t) { + debug(`${prefix} ${t}: ${JSON.stringify(machine.nodes[t])}`); + } + } +} +function runMachineInternal(machine, input, partial = false) { + debug(`Running a vm on ${JSON.stringify(input)}`); + let branches = [{ node: constants.NODE_INITIAL, state: { + candidateUsage: null, + requiredOptions: [], + errorMessage: null, + ignoreOptions: false, + options: [], + path: [], + positionals: [], + remainder: null, + selectedIndex: null, + } }]; + debugMachine(machine, { prefix: ` ` }); + const tokens = [constants.START_OF_INPUT, ...input]; + for (let t = 0; t < tokens.length; ++t) { + const segment = tokens[t]; + debug(` Processing ${JSON.stringify(segment)}`); + const nextBranches = []; + for (const { node, state } of branches) { + debug(` Current node is ${node}`); + const nodeDef = machine.nodes[node]; + if (node === constants.NODE_ERRORED) { + nextBranches.push({ node, state }); + continue; + } + console.assert(nodeDef.shortcuts.length === 0, `Shortcuts should have been eliminated by now`); + const hasExactMatch = Object.prototype.hasOwnProperty.call(nodeDef.statics, segment); + if (!partial || t < tokens.length - 1 || hasExactMatch) { + if (hasExactMatch) { + const transitions = nodeDef.statics[segment]; + for (const { to, reducer } of transitions) { + nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); + debug(` Static transition to ${to} found`); + } + } + else { + debug(` No static transition found`); + } + } + else { + let hasMatches = false; + for (const candidate of Object.keys(nodeDef.statics)) { + if (!candidate.startsWith(segment)) + continue; + if (segment === candidate) { + for (const { to, reducer } of nodeDef.statics[candidate]) { + nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); + debug(` Static transition to ${to} found`); + } + } + else { + for (const { to } of nodeDef.statics[candidate]) { + nextBranches.push({ node: to, state: { ...state, remainder: candidate.slice(segment.length) } }); + debug(` Static transition to ${to} found (partial match)`); + } + } + hasMatches = true; + } + if (!hasMatches) { + debug(` No partial static transition found`); + } + } + if (segment !== constants.END_OF_INPUT) { + for (const [test, { to, reducer }] of nodeDef.dynamics) { + if (execute(tests, test, state, segment)) { + nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); + debug(` Dynamic transition to ${to} found (via ${test})`); + } + } + } + } + if (nextBranches.length === 0 && segment === constants.END_OF_INPUT && input.length === 1) { + return [{ + node: constants.NODE_INITIAL, + state: basicHelpState, + }]; + } + if (nextBranches.length === 0) { + throw new errors.UnknownSyntaxError(input, branches.filter(({ node }) => { + return node !== constants.NODE_ERRORED; + }).map(({ state }) => { + return { usage: state.candidateUsage, reason: null }; + })); + } + if (nextBranches.every(({ node }) => node === constants.NODE_ERRORED)) { + throw new errors.UnknownSyntaxError(input, nextBranches.map(({ state }) => { + return { usage: state.candidateUsage, reason: state.errorMessage }; + })); + } + branches = trimSmallerBranches(nextBranches); } - } - - // check if fn is first in line for all its paths, and is - // included in the first set for all its dir queues - const check = fn => { - const {paths, dirs} = getQueues(fn) - return paths.every(q => q[0] === fn) && - dirs.every(q => q[0] instanceof Set && q[0].has(fn)) - } - - // run the function if it's first in line and not already running - const run = fn => { - if (running.has(fn) || !check(fn)) - return false - running.add(fn) - fn(() => clear(fn)) - return true - } - - const clear = fn => { - if (!running.has(fn)) - return false - - const { paths, dirs } = reservations.get(fn) - const next = new Set() - - paths.forEach(path => { - const q = queues.get(path) - assert.equal(q[0], fn) - if (q.length === 1) - queues.delete(path) - else { - q.shift() - if (typeof q[0] === 'function') - next.add(q[0]) - else - q[0].forEach(fn => next.add(fn)) - } - }) - - dirs.forEach(dir => { - const q = queues.get(dir) - assert(q[0] instanceof Set) - if (q[0].size === 1 && q.length === 1) { - queues.delete(dir) - } else if (q[0].size === 1) { - q.shift() - - // must be a function or else the Set would've been reused - next.add(q[0]) - } else - q[0].delete(fn) - }) - running.delete(fn) - - next.forEach(fn => run(fn)) - return true - } - - const reserve = (paths, fn) => { - const dirs = new Set( - paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b)) - ) - reservations.set(fn, {dirs, paths}) - paths.forEach(path => { - const q = queues.get(path) - if (!q) - queues.set(path, [fn]) - else - q.push(fn) - }) - dirs.forEach(dir => { - const q = queues.get(dir) - if (!q) - queues.set(dir, [new Set([fn])]) - else if (q[q.length-1] instanceof Set) - q[q.length-1].add(fn) - else - q.push(new Set([fn])) - }) - - return run(fn) - } - - return { check, reserve } + if (branches.length > 0) { + debug(` Results:`); + for (const branch of branches) { + debug(` - ${branch.node} -> ${JSON.stringify(branch.state)}`); + } + } + else { + debug(` No results`); + } + return branches; } - - -/***/ }), - -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/pax.js": -/*!*****************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/pax.js ***! - \*****************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - -const Header = __webpack_require__(/*! ./header.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/header.js") -const path = __webpack_require__(/*! path */ "path") - -class Pax { - constructor (obj, global) { - this.atime = obj.atime || null - this.charset = obj.charset || null - this.comment = obj.comment || null - this.ctime = obj.ctime || null - this.gid = obj.gid || null - this.gname = obj.gname || null - this.linkpath = obj.linkpath || null - this.mtime = obj.mtime || null - this.path = obj.path || null - this.size = obj.size || null - this.uid = obj.uid || null - this.uname = obj.uname || null - this.dev = obj.dev || null - this.ino = obj.ino || null - this.nlink = obj.nlink || null - this.global = global || false - } - - encode () { - const body = this.encodeBody() - if (body === '') - return null - - const bodyLen = Buffer.byteLength(body) - // round up to 512 bytes - // add 512 for header - const bufLen = 512 * Math.ceil(1 + bodyLen / 512) - const buf = Buffer.allocUnsafe(bufLen) - - // 0-fill the header section, it might not hit every field - for (let i = 0; i < 512; i++) { - buf[i] = 0 +function checkIfNodeIsFinished(node, state) { + if (state.selectedIndex !== null) + return true; + if (Object.prototype.hasOwnProperty.call(node.statics, constants.END_OF_INPUT)) + for (const { to } of node.statics[constants.END_OF_INPUT]) + if (to === constants.NODE_SUCCESS) + return true; + return false; +} +function suggestMachine(machine, input, partial) { + // If we're accepting partial matches, then exact matches need to be + // prefixed with an extra space. + const prefix = partial && input.length > 0 ? [``] : []; + const branches = runMachineInternal(machine, input, partial); + const suggestions = []; + const suggestionsJson = new Set(); + const traverseSuggestion = (suggestion, node, skipFirst = true) => { + let nextNodes = [node]; + while (nextNodes.length > 0) { + const currentNodes = nextNodes; + nextNodes = []; + for (const node of currentNodes) { + const nodeDef = machine.nodes[node]; + const keys = Object.keys(nodeDef.statics); + // The fact that `key` is unused is likely a bug, but no one has investigated it yet. + // TODO: Investigate it. + // eslint-disable-next-line @typescript-eslint/no-unused-vars + for (const key of Object.keys(nodeDef.statics)) { + const segment = keys[0]; + for (const { to, reducer } of nodeDef.statics[segment]) { + if (reducer !== `pushPath`) + continue; + if (!skipFirst) + suggestion.push(segment); + nextNodes.push(to); + } + } + } + skipFirst = false; + } + const json = JSON.stringify(suggestion); + if (suggestionsJson.has(json)) + return; + suggestions.push(suggestion); + suggestionsJson.add(json); + }; + for (const { node, state } of branches) { + if (state.remainder !== null) { + traverseSuggestion([state.remainder], node); + continue; + } + const nodeDef = machine.nodes[node]; + const isFinished = checkIfNodeIsFinished(nodeDef, state); + for (const [candidate, transitions] of Object.entries(nodeDef.statics)) + if ((isFinished && candidate !== constants.END_OF_INPUT) || (!candidate.startsWith(`-`) && transitions.some(({ reducer }) => reducer === `pushPath`))) + traverseSuggestion([...prefix, candidate], node); + if (!isFinished) + continue; + for (const [test, { to }] of nodeDef.dynamics) { + if (to === constants.NODE_ERRORED) + continue; + const tokens = suggest(test, state); + if (tokens === null) + continue; + for (const token of tokens) { + traverseSuggestion([...prefix, token], node); + } + } + } + return [...suggestions].sort(); +} +function runMachine(machine, input) { + const branches = runMachineInternal(machine, [...input, constants.END_OF_INPUT]); + return selectBestState(input, branches.map(({ state }) => { + return state; + })); +} +function trimSmallerBranches(branches) { + let maxPathSize = 0; + for (const { state } of branches) + if (state.path.length > maxPathSize) + maxPathSize = state.path.length; + return branches.filter(({ state }) => { + return state.path.length === maxPathSize; + }); +} +function selectBestState(input, states) { + const terminalStates = states.filter(state => { + return state.selectedIndex !== null; + }); + if (terminalStates.length === 0) + throw new Error(); + const requiredOptionsSetStates = terminalStates.filter(state => state.requiredOptions.every(names => names.some(name => state.options.find(opt => opt.name === name)))); + if (requiredOptionsSetStates.length === 0) { + throw new errors.UnknownSyntaxError(input, terminalStates.map(state => ({ + usage: state.candidateUsage, + reason: null, + }))); + } + let maxPathSize = 0; + for (const state of requiredOptionsSetStates) + if (state.path.length > maxPathSize) + maxPathSize = state.path.length; + const bestPathBranches = requiredOptionsSetStates.filter(state => { + return state.path.length === maxPathSize; + }); + const getPositionalCount = (state) => state.positionals.filter(({ extra }) => { + return !extra; + }).length + state.options.length; + const statesWithPositionalCount = bestPathBranches.map(state => { + return { state, positionalCount: getPositionalCount(state) }; + }); + let maxPositionalCount = 0; + for (const { positionalCount } of statesWithPositionalCount) + if (positionalCount > maxPositionalCount) + maxPositionalCount = positionalCount; + const bestPositionalStates = statesWithPositionalCount.filter(({ positionalCount }) => { + return positionalCount === maxPositionalCount; + }).map(({ state }) => { + return state; + }); + const fixedStates = aggregateHelpStates(bestPositionalStates); + if (fixedStates.length > 1) + throw new errors.AmbiguousSyntaxError(input, fixedStates.map(state => state.candidateUsage)); + return fixedStates[0]; +} +function aggregateHelpStates(states) { + const notHelps = []; + const helps = []; + for (const state of states) { + if (state.selectedIndex === constants.HELP_COMMAND_INDEX) { + helps.push(state); + } + else { + notHelps.push(state); + } } - - new Header({ - // XXX split the path - // then the path should be PaxHeader + basename, but less than 99, - // prepend with the dirname - path: ('PaxHeader/' + path.basename(this.path)).slice(0, 99), - mode: this.mode || 0o644, - uid: this.uid || null, - gid: this.gid || null, - size: bodyLen, - mtime: this.mtime || null, - type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader', - linkpath: '', - uname: this.uname || '', - gname: this.gname || '', - devmaj: 0, - devmin: 0, - atime: this.atime || null, - ctime: this.ctime || null - }).encode(buf) - - buf.write(body, 512, bodyLen, 'utf8') - - // null pad after the body - for (let i = bodyLen + 512; i < buf.length; i++) { - buf[i] = 0 + if (helps.length > 0) { + notHelps.push({ + ...basicHelpState, + path: findCommonPrefix(...helps.map(state => state.path)), + options: helps.reduce((options, state) => options.concat(state.options), []), + }); } - - return buf - } - - encodeBody () { - return ( - this.encodeField('path') + - this.encodeField('ctime') + - this.encodeField('atime') + - this.encodeField('dev') + - this.encodeField('ino') + - this.encodeField('nlink') + - this.encodeField('charset') + - this.encodeField('comment') + - this.encodeField('gid') + - this.encodeField('gname') + - this.encodeField('linkpath') + - this.encodeField('mtime') + - this.encodeField('size') + - this.encodeField('uid') + - this.encodeField('uname') - ) - } - - encodeField (field) { - if (this[field] === null || this[field] === undefined) - return '' - const v = this[field] instanceof Date ? this[field].getTime() / 1000 - : this[field] - const s = ' ' + - (field === 'dev' || field === 'ino' || field === 'nlink' - ? 'SCHILY.' : '') + - field + '=' + v + '\n' - const byteLen = Buffer.byteLength(s) - // the digits includes the length of the digits in ascii base-10 - // so if it's 9 characters, then adding 1 for the 9 makes it 10 - // which makes it 11 chars. - let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1 - if (byteLen + digits >= Math.pow(10, digits)) - digits += 1 - const len = digits + byteLen - return len + s - } + return notHelps; } - -Pax.parse = (string, ex, g) => new Pax(merge(parseKV(string), ex), g) - -const merge = (a, b) => - b ? Object.keys(a).reduce((s, k) => (s[k] = a[k], s), b) : a - -const parseKV = string => - string - .replace(/\n$/, '') - .split('\n') - .reduce(parseKVLine, Object.create(null)) - -const parseKVLine = (set, line) => { - const n = parseInt(line, 10) - - // XXX Values with \n in them will fail this. - // Refactor to not be a naive line-by-line parse. - if (n !== Buffer.byteLength(line) + 1) - return set - - line = line.substr((n + ' ').length) - const kv = line.split('=') - const k = kv.shift().replace(/^SCHILY\.(dev|ino|nlink)/, '$1') - if (!k) - return set - - const v = kv.join('=') - set[k] = /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k) - ? new Date(v * 1000) - : /^[0-9]+$/.test(v) ? +v - : v - return set +function findCommonPrefix(firstPath, secondPath, ...rest) { + if (secondPath === undefined) + return Array.from(firstPath); + return findCommonPrefix(firstPath.filter((segment, i) => segment === secondPath[i]), ...rest); } - -module.exports = Pax - - -/***/ }), - -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/read-entry.js": -/*!************************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/read-entry.js ***! - \************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - -const types = __webpack_require__(/*! ./types.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/types.js") -const MiniPass = __webpack_require__(/*! minipass */ "./.yarn/cache/minipass-npm-3.1.1-b51d7e264d-cfcfd86adc.zip/node_modules/minipass/index.js") - -const SLURP = Symbol('slurp') -module.exports = class ReadEntry extends MiniPass { - constructor (header, ex, gex) { - super() - // read entries always start life paused. this is to avoid the - // situation where Minipass's auto-ending empty streams results - // in an entry ending before we're ready for it. - this.pause() - this.extended = ex - this.globalExtended = gex - this.header = header - this.startBlockSize = 512 * Math.ceil(header.size / 512) - this.blockRemain = this.startBlockSize - this.remain = header.size - this.type = header.type - this.meta = false - this.ignore = false - switch (this.type) { - case 'File': - case 'OldFile': - case 'Link': - case 'SymbolicLink': - case 'CharacterDevice': - case 'BlockDevice': - case 'Directory': - case 'FIFO': - case 'ContiguousFile': - case 'GNUDumpDir': - break - - case 'NextFileHasLongLinkpath': - case 'NextFileHasLongPath': - case 'OldGnuLongPath': - case 'GlobalExtendedHeader': - case 'ExtendedHeader': - case 'OldExtendedHeader': - this.meta = true - break - - // NOTE: gnutar and bsdtar treat unrecognized types as 'File' - // it may be worth doing the same, but with a warning. - default: - this.ignore = true - } - - this.path = header.path - this.mode = header.mode - if (this.mode) - this.mode = this.mode & 0o7777 - this.uid = header.uid - this.gid = header.gid - this.uname = header.uname - this.gname = header.gname - this.size = header.size - this.mtime = header.mtime - this.atime = header.atime - this.ctime = header.ctime - this.linkpath = header.linkpath - this.uname = header.uname - this.gname = header.gname - - if (ex) this[SLURP](ex) - if (gex) this[SLURP](gex, true) - } - - write (data) { - const writeLen = data.length - if (writeLen > this.blockRemain) - throw new Error('writing more to entry than is appropriate') - - const r = this.remain - const br = this.blockRemain - this.remain = Math.max(0, r - writeLen) - this.blockRemain = Math.max(0, br - writeLen) - if (this.ignore) - return true - - if (r >= writeLen) - return super.write(data) - - // r < writeLen - return super.write(data.slice(0, r)) - } - - [SLURP] (ex, global) { - for (let k in ex) { - // we slurp in everything except for the path attribute in - // a global extended header, because that's weird. - if (ex[k] !== null && ex[k] !== undefined && - !(global && k === 'path')) - this[k] = ex[k] +function makeNode() { + return { + dynamics: [], + shortcuts: [], + statics: {}, + }; +} +function isTerminalNode(node) { + return node === constants.NODE_SUCCESS || node === constants.NODE_ERRORED; +} +function cloneTransition(input, offset = 0) { + return { + to: !isTerminalNode(input.to) ? input.to > 2 ? input.to + offset - 2 : input.to + offset : input.to, + reducer: input.reducer, + }; +} +function cloneNode(input, offset = 0) { + const output = makeNode(); + for (const [test, transition] of input.dynamics) + output.dynamics.push([test, cloneTransition(transition, offset)]); + for (const transition of input.shortcuts) + output.shortcuts.push(cloneTransition(transition, offset)); + for (const [segment, transitions] of Object.entries(input.statics)) + output.statics[segment] = transitions.map(transition => cloneTransition(transition, offset)); + return output; +} +function registerDynamic(machine, from, test, to, reducer) { + machine.nodes[from].dynamics.push([ + test, + { to, reducer: reducer }, + ]); +} +function registerShortcut(machine, from, to, reducer) { + machine.nodes[from].shortcuts.push({ to, reducer: reducer }); +} +function registerStatic(machine, from, test, to, reducer) { + const store = !Object.prototype.hasOwnProperty.call(machine.nodes[from].statics, test) + ? machine.nodes[from].statics[test] = [] + : machine.nodes[from].statics[test]; + store.push({ to, reducer: reducer }); +} +function execute(store, callback, state, segment) { + // TypeScript's control flow can't properly narrow + // generic conditionals for some mysterious reason + if (Array.isArray(callback)) { + const [name, ...args] = callback; + return store[name](state, segment, ...args); + } + else { + return store[callback](state, segment); } - } } - - -/***/ }), - -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/replace.js": -/*!*********************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/replace.js ***! - \*********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -// tar -r -const hlo = __webpack_require__(/*! ./high-level-opt.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/high-level-opt.js") -const Pack = __webpack_require__(/*! ./pack.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/pack.js") -const Parse = __webpack_require__(/*! ./parse.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/parse.js") -const fs = __webpack_require__(/*! fs */ "fs") -const fsm = __webpack_require__(/*! fs-minipass */ "./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip/node_modules/fs-minipass/index.js") -const t = __webpack_require__(/*! ./list.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/list.js") -const path = __webpack_require__(/*! path */ "path") - -// starting at the head of the file, read a Header -// If the checksum is invalid, that's our position to start writing -// If it is, jump forward by the specified size (round up to 512) -// and try again. -// Write the new Pack stream starting there. - -const Header = __webpack_require__(/*! ./header.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/header.js") - -const r = module.exports = (opt_, files, cb) => { - const opt = hlo(opt_) - - if (!opt.file) - throw new TypeError('file is required') - - if (opt.gzip) - throw new TypeError('cannot append to compressed archives') - - if (!files || !Array.isArray(files) || !files.length) - throw new TypeError('no files or directories specified') - - files = Array.from(files) - - return opt.sync ? replaceSync(opt, files) - : replace(opt, files, cb) +function suggest(callback, state) { + const fn = Array.isArray(callback) + ? tests[callback[0]] + : tests[callback]; + // @ts-ignore + if (typeof fn.suggest === `undefined`) + return null; + const args = Array.isArray(callback) + ? callback.slice(1) + : []; + // @ts-ignore + return fn.suggest(state, ...args); } - -const replaceSync = (opt, files) => { - const p = new Pack.Sync(opt) - - let threw = true - let fd - let position - - try { - try { - fd = fs.openSync(opt.file, 'r+') - } catch (er) { - if (er.code === 'ENOENT') - fd = fs.openSync(opt.file, 'w+') - else - throw er +const tests = { + always: () => { + return true; + }, + isOptionLike: (state, segment) => { + return !state.ignoreOptions && (segment !== `-` && segment.startsWith(`-`)); + }, + isNotOptionLike: (state, segment) => { + return state.ignoreOptions || segment === `-` || !segment.startsWith(`-`); + }, + isOption: (state, segment, name, hidden) => { + return !state.ignoreOptions && segment === name; + }, + isBatchOption: (state, segment, names) => { + return !state.ignoreOptions && constants.BATCH_REGEX.test(segment) && [...segment.slice(1)].every(name => names.includes(`-${name}`)); + }, + isBoundOption: (state, segment, names, options) => { + const optionParsing = segment.match(constants.BINDING_REGEX); + return !state.ignoreOptions && !!optionParsing && constants.OPTION_REGEX.test(optionParsing[1]) && names.includes(optionParsing[1]) + // Disallow bound options with no arguments (i.e. booleans) + && options.filter(opt => opt.names.includes(optionParsing[1])).every(opt => opt.allowBinding); + }, + isNegatedOption: (state, segment, name) => { + return !state.ignoreOptions && segment === `--no-${name.slice(2)}`; + }, + isHelp: (state, segment) => { + return !state.ignoreOptions && constants.HELP_REGEX.test(segment); + }, + isUnsupportedOption: (state, segment, names) => { + return !state.ignoreOptions && segment.startsWith(`-`) && constants.OPTION_REGEX.test(segment) && !names.includes(segment); + }, + isInvalidOption: (state, segment) => { + return !state.ignoreOptions && segment.startsWith(`-`) && !constants.OPTION_REGEX.test(segment); + }, +}; +// @ts-ignore +tests.isOption.suggest = (state, name, hidden = true) => { + return !hidden ? [name] : null; +}; +const reducers = { + setCandidateState: (state, segment, candidateState) => { + return { ...state, ...candidateState }; + }, + setSelectedIndex: (state, segment, index) => { + return { ...state, selectedIndex: index }; + }, + pushBatch: (state, segment) => { + return { ...state, options: state.options.concat([...segment.slice(1)].map(name => ({ name: `-${name}`, value: true }))) }; + }, + pushBound: (state, segment) => { + const [, name, value] = segment.match(constants.BINDING_REGEX); + return { ...state, options: state.options.concat({ name, value }) }; + }, + pushPath: (state, segment) => { + return { ...state, path: state.path.concat(segment) }; + }, + pushPositional: (state, segment) => { + return { ...state, positionals: state.positionals.concat({ value: segment, extra: false }) }; + }, + pushExtra: (state, segment) => { + return { ...state, positionals: state.positionals.concat({ value: segment, extra: true }) }; + }, + pushExtraNoLimits: (state, segment) => { + return { ...state, positionals: state.positionals.concat({ value: segment, extra: NoLimits }) }; + }, + pushTrue: (state, segment, name = segment) => { + return { ...state, options: state.options.concat({ name: segment, value: true }) }; + }, + pushFalse: (state, segment, name = segment) => { + return { ...state, options: state.options.concat({ name, value: false }) }; + }, + pushUndefined: (state, segment) => { + return { ...state, options: state.options.concat({ name: segment, value: undefined }) }; + }, + pushStringValue: (state, segment) => { + var _a; + const copy = { ...state, options: [...state.options] }; + const lastOption = state.options[state.options.length - 1]; + lastOption.value = ((_a = lastOption.value) !== null && _a !== void 0 ? _a : []).concat([segment]); + return copy; + }, + setStringValue: (state, segment) => { + const copy = { ...state, options: [...state.options] }; + const lastOption = state.options[state.options.length - 1]; + lastOption.value = segment; + return copy; + }, + inhibateOptions: (state) => { + return { ...state, ignoreOptions: true }; + }, + useHelp: (state, segment, command) => { + const [, /* name */ , index] = segment.match(constants.HELP_REGEX); + if (typeof index !== `undefined`) { + return { ...state, options: [{ name: `-c`, value: String(command) }, { name: `-i`, value: index }] }; + } + else { + return { ...state, options: [{ name: `-c`, value: String(command) }] }; + } + }, + setError: (state, segment, errorMessage) => { + if (segment === constants.END_OF_INPUT) { + return { ...state, errorMessage: `${errorMessage}.` }; + } + else { + return { ...state, errorMessage: `${errorMessage} ("${segment}").` }; + } + }, + setOptionArityError: (state, segment) => { + const lastOption = state.options[state.options.length - 1]; + return { ...state, errorMessage: `Not enough arguments to option ${lastOption.name}.` }; + }, +}; +// ------------------------------------------------------------------------ +const NoLimits = Symbol(); +class CommandBuilder { + constructor(cliIndex, cliOpts) { + this.allOptionNames = []; + this.arity = { leading: [], trailing: [], extra: [], proxy: false }; + this.options = []; + this.paths = []; + this.cliIndex = cliIndex; + this.cliOpts = cliOpts; } - - const st = fs.fstatSync(fd) - const headBuf = Buffer.alloc(512) - - POSITION: for (position = 0; position < st.size; position += 512) { - for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) { - bytes = fs.readSync( - fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos - ) - - if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) - throw new Error('cannot append to compressed archives') - - if (!bytes) - break POSITION - } - - let h = new Header(headBuf) - if (!h.cksumValid) - break - let entryBlockSize = 512 * Math.ceil(h.size / 512) - if (position + entryBlockSize + 512 > st.size) - break - // the 512 for the header we just parsed will be added as well - // also jump ahead all the blocks for the body - position += entryBlockSize - if (opt.mtimeCache) - opt.mtimeCache.set(h.path, h.mtime) + addPath(path) { + this.paths.push(path); + } + setArity({ leading = this.arity.leading, trailing = this.arity.trailing, extra = this.arity.extra, proxy = this.arity.proxy }) { + Object.assign(this.arity, { leading, trailing, extra, proxy }); + } + addPositional({ name = `arg`, required = true } = {}) { + if (!required && this.arity.extra === NoLimits) + throw new Error(`Optional parameters cannot be declared when using .rest() or .proxy()`); + if (!required && this.arity.trailing.length > 0) + throw new Error(`Optional parameters cannot be declared after the required trailing positional arguments`); + if (!required && this.arity.extra !== NoLimits) { + this.arity.extra.push(name); + } + else if (this.arity.extra !== NoLimits && this.arity.extra.length === 0) { + this.arity.leading.push(name); + } + else { + this.arity.trailing.push(name); + } } - threw = false - - streamSync(opt, p, position, fd, files) - } finally { - if (threw) - try { fs.closeSync(fd) } catch (er) {} - } -} - -const streamSync = (opt, p, position, fd, files) => { - const stream = new fsm.WriteStreamSync(opt.file, { - fd: fd, - start: position - }) - p.pipe(stream) - addFilesSync(p, files) -} - -const replace = (opt, files, cb) => { - files = Array.from(files) - const p = new Pack(opt) - - const getPos = (fd, size, cb_) => { - const cb = (er, pos) => { - if (er) - fs.close(fd, _ => cb_(er)) - else - cb_(null, pos) + addRest({ name = `arg`, required = 0 } = {}) { + if (this.arity.extra === NoLimits) + throw new Error(`Infinite lists cannot be declared multiple times in the same command`); + if (this.arity.trailing.length > 0) + throw new Error(`Infinite lists cannot be declared after the required trailing positional arguments`); + for (let t = 0; t < required; ++t) + this.addPositional({ name }); + this.arity.extra = NoLimits; } - - let position = 0 - if (size === 0) - return cb(null, 0) - - let bufPos = 0 - const headBuf = Buffer.alloc(512) - const onread = (er, bytes) => { - if (er) - return cb(er) - bufPos += bytes - if (bufPos < 512 && bytes) - return fs.read( - fd, headBuf, bufPos, headBuf.length - bufPos, - position + bufPos, onread - ) - - if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) - return cb(new Error('cannot append to compressed archives')) - - // truncated header - if (bufPos < 512) - return cb(null, position) - - const h = new Header(headBuf) - if (!h.cksumValid) - return cb(null, position) - - const entryBlockSize = 512 * Math.ceil(h.size / 512) - if (position + entryBlockSize + 512 > size) - return cb(null, position) - - position += entryBlockSize + 512 - if (position >= size) - return cb(null, position) - - if (opt.mtimeCache) - opt.mtimeCache.set(h.path, h.mtime) - bufPos = 0 - fs.read(fd, headBuf, 0, 512, position, onread) + addProxy({ required = 0 } = {}) { + this.addRest({ required }); + this.arity.proxy = true; } - fs.read(fd, headBuf, 0, 512, position, onread) - } - - const promise = new Promise((resolve, reject) => { - p.on('error', reject) - let flag = 'r+' - const onopen = (er, fd) => { - if (er && er.code === 'ENOENT' && flag === 'r+') { - flag = 'w+' - return fs.open(opt.file, flag, onopen) - } - - if (er) - return reject(er) - - fs.fstat(fd, (er, st) => { - if (er) - return reject(er) - getPos(fd, st.size, (er, position) => { - if (er) - return reject(er) - const stream = new fsm.WriteStream(opt.file, { - fd: fd, - start: position - }) - p.pipe(stream) - stream.on('error', reject) - stream.on('close', resolve) - addFilesAsync(p, files) - }) - }) + addOption({ names, description, arity = 0, hidden = false, required = false, allowBinding = true }) { + if (!allowBinding && arity > 1) + throw new Error(`The arity cannot be higher than 1 when the option only supports the --arg=value syntax`); + if (!Number.isInteger(arity)) + throw new Error(`The arity must be an integer, got ${arity}`); + if (arity < 0) + throw new Error(`The arity must be positive, got ${arity}`); + this.allOptionNames.push(...names); + this.options.push({ names, description, arity, hidden, required, allowBinding }); + } + setContext(context) { + this.context = context; + } + usage({ detailed = true, inlineOptions = true } = {}) { + const segments = [this.cliOpts.binaryName]; + const detailedOptionList = []; + if (this.paths.length > 0) + segments.push(...this.paths[0]); + if (detailed) { + for (const { names, arity, hidden, description, required } of this.options) { + if (hidden) + continue; + const args = []; + for (let t = 0; t < arity; ++t) + args.push(` #${t}`); + const definition = `${names.join(`,`)}${args.join(``)}`; + if (!inlineOptions && description) { + detailedOptionList.push({ definition, description, required }); + } + else { + segments.push(required ? `<${definition}>` : `[${definition}]`); + } + } + segments.push(...this.arity.leading.map(name => `<${name}>`)); + if (this.arity.extra === NoLimits) + segments.push(`...`); + else + segments.push(...this.arity.extra.map(name => `[${name}]`)); + segments.push(...this.arity.trailing.map(name => `<${name}>`)); + } + const usage = segments.join(` `); + return { usage, options: detailedOptionList }; + } + compile() { + if (typeof this.context === `undefined`) + throw new Error(`Assertion failed: No context attached`); + const machine = makeStateMachine(); + let firstNode = constants.NODE_INITIAL; + const candidateUsage = this.usage().usage; + const requiredOptions = this.options + .filter(opt => opt.required) + .map(opt => opt.names); + firstNode = injectNode(machine, makeNode()); + registerStatic(machine, constants.NODE_INITIAL, constants.START_OF_INPUT, firstNode, [`setCandidateState`, { candidateUsage, requiredOptions }]); + const positionalArgument = this.arity.proxy + ? `always` + : `isNotOptionLike`; + const paths = this.paths.length > 0 + ? this.paths + : [[]]; + for (const path of paths) { + let lastPathNode = firstNode; + // We allow options to be specified before the path. Note that we + // only do this when there is a path, otherwise there would be + // some redundancy with the options attached later. + if (path.length > 0) { + const optionPathNode = injectNode(machine, makeNode()); + registerShortcut(machine, lastPathNode, optionPathNode); + this.registerOptions(machine, optionPathNode); + lastPathNode = optionPathNode; + } + for (let t = 0; t < path.length; ++t) { + const nextPathNode = injectNode(machine, makeNode()); + registerStatic(machine, lastPathNode, path[t], nextPathNode, `pushPath`); + lastPathNode = nextPathNode; + } + if (this.arity.leading.length > 0 || !this.arity.proxy) { + const helpNode = injectNode(machine, makeNode()); + registerDynamic(machine, lastPathNode, `isHelp`, helpNode, [`useHelp`, this.cliIndex]); + registerStatic(machine, helpNode, constants.END_OF_INPUT, constants.NODE_SUCCESS, [`setSelectedIndex`, constants.HELP_COMMAND_INDEX]); + this.registerOptions(machine, lastPathNode); + } + if (this.arity.leading.length > 0) + registerStatic(machine, lastPathNode, constants.END_OF_INPUT, constants.NODE_ERRORED, [`setError`, `Not enough positional arguments`]); + let lastLeadingNode = lastPathNode; + for (let t = 0; t < this.arity.leading.length; ++t) { + const nextLeadingNode = injectNode(machine, makeNode()); + if (!this.arity.proxy) + this.registerOptions(machine, nextLeadingNode); + if (this.arity.trailing.length > 0 || t + 1 !== this.arity.leading.length) + registerStatic(machine, nextLeadingNode, constants.END_OF_INPUT, constants.NODE_ERRORED, [`setError`, `Not enough positional arguments`]); + registerDynamic(machine, lastLeadingNode, `isNotOptionLike`, nextLeadingNode, `pushPositional`); + lastLeadingNode = nextLeadingNode; + } + let lastExtraNode = lastLeadingNode; + if (this.arity.extra === NoLimits || this.arity.extra.length > 0) { + const extraShortcutNode = injectNode(machine, makeNode()); + registerShortcut(machine, lastLeadingNode, extraShortcutNode); + if (this.arity.extra === NoLimits) { + const extraNode = injectNode(machine, makeNode()); + if (!this.arity.proxy) + this.registerOptions(machine, extraNode); + registerDynamic(machine, lastLeadingNode, positionalArgument, extraNode, `pushExtraNoLimits`); + registerDynamic(machine, extraNode, positionalArgument, extraNode, `pushExtraNoLimits`); + registerShortcut(machine, extraNode, extraShortcutNode); + } + else { + for (let t = 0; t < this.arity.extra.length; ++t) { + const nextExtraNode = injectNode(machine, makeNode()); + if (!this.arity.proxy) + this.registerOptions(machine, nextExtraNode); + registerDynamic(machine, lastExtraNode, positionalArgument, nextExtraNode, `pushExtra`); + registerShortcut(machine, nextExtraNode, extraShortcutNode); + lastExtraNode = nextExtraNode; + } + } + lastExtraNode = extraShortcutNode; + } + if (this.arity.trailing.length > 0) + registerStatic(machine, lastExtraNode, constants.END_OF_INPUT, constants.NODE_ERRORED, [`setError`, `Not enough positional arguments`]); + let lastTrailingNode = lastExtraNode; + for (let t = 0; t < this.arity.trailing.length; ++t) { + const nextTrailingNode = injectNode(machine, makeNode()); + if (!this.arity.proxy) + this.registerOptions(machine, nextTrailingNode); + if (t + 1 < this.arity.trailing.length) + registerStatic(machine, nextTrailingNode, constants.END_OF_INPUT, constants.NODE_ERRORED, [`setError`, `Not enough positional arguments`]); + registerDynamic(machine, lastTrailingNode, `isNotOptionLike`, nextTrailingNode, `pushPositional`); + lastTrailingNode = nextTrailingNode; + } + registerDynamic(machine, lastTrailingNode, positionalArgument, constants.NODE_ERRORED, [`setError`, `Extraneous positional argument`]); + registerStatic(machine, lastTrailingNode, constants.END_OF_INPUT, constants.NODE_SUCCESS, [`setSelectedIndex`, this.cliIndex]); + } + return { + machine, + context: this.context, + }; + } + registerOptions(machine, node) { + registerDynamic(machine, node, [`isOption`, `--`], node, `inhibateOptions`); + registerDynamic(machine, node, [`isBatchOption`, this.allOptionNames], node, `pushBatch`); + registerDynamic(machine, node, [`isBoundOption`, this.allOptionNames, this.options], node, `pushBound`); + registerDynamic(machine, node, [`isUnsupportedOption`, this.allOptionNames], constants.NODE_ERRORED, [`setError`, `Unsupported option name`]); + registerDynamic(machine, node, [`isInvalidOption`], constants.NODE_ERRORED, [`setError`, `Invalid option name`]); + for (const option of this.options) { + const longestName = option.names.reduce((longestName, name) => { + return name.length > longestName.length ? name : longestName; + }, ``); + if (option.arity === 0) { + for (const name of option.names) { + registerDynamic(machine, node, [`isOption`, name, option.hidden || name !== longestName], node, `pushTrue`); + if (name.startsWith(`--`) && !name.startsWith(`--no-`)) { + registerDynamic(machine, node, [`isNegatedOption`, name], node, [`pushFalse`, name]); + } + } + } + else { + // We inject a new node at the end of the state machine + let lastNode = injectNode(machine, makeNode()); + // We register transitions from the starting node to this new node + for (const name of option.names) + registerDynamic(machine, node, [`isOption`, name, option.hidden || name !== longestName], lastNode, `pushUndefined`); + // For each argument, we inject a new node at the end and we + // register a transition from the current node to this new node + for (let t = 0; t < option.arity; ++t) { + const nextNode = injectNode(machine, makeNode()); + // We can provide better errors when another option or END_OF_INPUT is encountered + registerStatic(machine, lastNode, constants.END_OF_INPUT, constants.NODE_ERRORED, `setOptionArityError`); + registerDynamic(machine, lastNode, `isOptionLike`, constants.NODE_ERRORED, `setOptionArityError`); + // If the option has a single argument, no need to store it in an array + const action = option.arity === 1 + ? `setStringValue` + : `pushStringValue`; + registerDynamic(machine, lastNode, `isNotOptionLike`, nextNode, action); + lastNode = nextNode; + } + // In the end, we register a shortcut from + // the last node back to the starting node + registerShortcut(machine, lastNode, node); + } + } } - fs.open(opt.file, flag, onopen) - }) - - return cb ? promise.then(cb, cb) : promise -} - -const addFilesSync = (p, files) => { - files.forEach(file => { - if (file.charAt(0) === '@') - t({ - file: path.resolve(p.cwd, file.substr(1)), - sync: true, - noResume: true, - onentry: entry => p.add(entry) - }) - else - p.add(file) - }) - p.end() } - -const addFilesAsync = (p, files) => { - while (files.length) { - const file = files.shift() - if (file.charAt(0) === '@') - return t({ - file: path.resolve(p.cwd, file.substr(1)), - noResume: true, - onentry: entry => p.add(entry) - }).then(_ => addFilesAsync(p, files)) - else - p.add(file) - } - p.end() +class CliBuilder { + constructor({ binaryName = `...` } = {}) { + this.builders = []; + this.opts = { binaryName }; + } + static build(cbs, opts = {}) { + return new CliBuilder(opts).commands(cbs).compile(); + } + getBuilderByIndex(n) { + if (!(n >= 0 && n < this.builders.length)) + throw new Error(`Assertion failed: Out-of-bound command index (${n})`); + return this.builders[n]; + } + commands(cbs) { + for (const cb of cbs) + cb(this.command()); + return this; + } + command() { + const builder = new CommandBuilder(this.builders.length, this.opts); + this.builders.push(builder); + return builder; + } + compile() { + const machines = []; + const contexts = []; + for (const builder of this.builders) { + const { machine, context } = builder.compile(); + machines.push(machine); + contexts.push(context); + } + const machine = makeAnyOfMachine(machines); + simplifyMachine(machine); + return { + machine, + contexts, + process: (input) => { + return runMachine(machine, input); + }, + suggest: (input, partial) => { + return suggestMachine(machine, input, partial); + }, + }; + } } - -/***/ }), - -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/types.js": -/*!*******************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/types.js ***! - \*******************************************************************************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -// map types from key to human-friendly name -exports.name = new Map([ - ['0', 'File'], - // same as File - ['', 'OldFile'], - ['1', 'Link'], - ['2', 'SymbolicLink'], - // Devices and FIFOs aren't fully supported - // they are parsed, but skipped when unpacking - ['3', 'CharacterDevice'], - ['4', 'BlockDevice'], - ['5', 'Directory'], - ['6', 'FIFO'], - // same as File - ['7', 'ContiguousFile'], - // pax headers - ['g', 'GlobalExtendedHeader'], - ['x', 'ExtendedHeader'], - // vendor-specific stuff - // skip - ['A', 'SolarisACL'], - // like 5, but with data, which should be skipped - ['D', 'GNUDumpDir'], - // metadata only, skip - ['I', 'Inode'], - // data = link path of next file - ['K', 'NextFileHasLongLinkpath'], - // data = path of next file - ['L', 'NextFileHasLongPath'], - // skip - ['M', 'ContinuationFile'], - // like L - ['N', 'OldGnuLongPath'], - // skip - ['S', 'SparseFile'], - // skip - ['V', 'TapeVolumeHeader'], - // like x - ['X', 'OldExtendedHeader'] -]) - -// map the other direction -exports.code = new Map(Array.from(exports.name).map(kv => [kv[1], kv[0]])) +exports.CliBuilder = CliBuilder; +exports.CommandBuilder = CommandBuilder; +exports.NoLimits = NoLimits; +exports.aggregateHelpStates = aggregateHelpStates; +exports.cloneNode = cloneNode; +exports.cloneTransition = cloneTransition; +exports.debug = debug; +exports.debugMachine = debugMachine; +exports.execute = execute; +exports.injectNode = injectNode; +exports.isTerminalNode = isTerminalNode; +exports.makeAnyOfMachine = makeAnyOfMachine; +exports.makeNode = makeNode; +exports.makeStateMachine = makeStateMachine; +exports.reducers = reducers; +exports.registerDynamic = registerDynamic; +exports.registerShortcut = registerShortcut; +exports.registerStatic = registerStatic; +exports.runMachineInternal = runMachineInternal; +exports.selectBestState = selectBestState; +exports.simplifyMachine = simplifyMachine; +exports.suggest = suggest; +exports.tests = tests; +exports.trimSmallerBranches = trimSmallerBranches; /***/ }), -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/unpack.js": -/*!********************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/unpack.js ***! - \********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/errors.js": +/*!******************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/errors.js ***! + \******************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; -// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet. -// but the path reservations are required to avoid race conditions where -// parallelized unpack ops may mess with one another, due to dependencies -// (like a Link depending on its target) or destructive operations (like -// clobbering an fs object to create one of a different type.) - -const assert = __webpack_require__(/*! assert */ "assert") -const EE = __webpack_require__(/*! events */ "events").EventEmitter -const Parser = __webpack_require__(/*! ./parse.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/parse.js") -const fs = __webpack_require__(/*! fs */ "fs") -const fsm = __webpack_require__(/*! fs-minipass */ "./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip/node_modules/fs-minipass/index.js") -const path = __webpack_require__(/*! path */ "path") -const mkdir = __webpack_require__(/*! ./mkdir.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/mkdir.js") -const mkdirSync = mkdir.sync -const wc = __webpack_require__(/*! ./winchars.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/winchars.js") -const pathReservations = __webpack_require__(/*! ./path-reservations.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/path-reservations.js") +Object.defineProperty(exports, "__esModule", ({ value: true })); -const ONENTRY = Symbol('onEntry') -const CHECKFS = Symbol('checkFs') -const CHECKFS2 = Symbol('checkFs2') -const ISREUSABLE = Symbol('isReusable') -const MAKEFS = Symbol('makeFs') -const FILE = Symbol('file') -const DIRECTORY = Symbol('directory') -const LINK = Symbol('link') -const SYMLINK = Symbol('symlink') -const HARDLINK = Symbol('hardlink') -const UNSUPPORTED = Symbol('unsupported') -const UNKNOWN = Symbol('unknown') -const CHECKPATH = Symbol('checkPath') -const MKDIR = Symbol('mkdir') -const ONERROR = Symbol('onError') -const PENDING = Symbol('pending') -const PEND = Symbol('pend') -const UNPEND = Symbol('unpend') -const ENDED = Symbol('ended') -const MAYBECLOSE = Symbol('maybeClose') -const SKIP = Symbol('skip') -const DOCHOWN = Symbol('doChown') -const UID = Symbol('uid') -const GID = Symbol('gid') -const crypto = __webpack_require__(/*! crypto */ "crypto") -const getFlag = __webpack_require__(/*! ./get-write-flag.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/get-write-flag.js") +var constants = __webpack_require__(/*! ./constants.js */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/constants.js"); -/* istanbul ignore next */ -const neverCalled = () => { - throw new Error('sync function called cb somehow?!?') +/** + * A generic usage error with the name `UsageError`. + * + * It should be used over `Error` only when it's the user's fault. + */ +class UsageError extends Error { + constructor(message) { + super(message); + this.clipanion = { type: `usage` }; + this.name = `UsageError`; + } +} +class UnknownSyntaxError extends Error { + constructor(input, candidates) { + super(); + this.input = input; + this.candidates = candidates; + this.clipanion = { type: `none` }; + this.name = `UnknownSyntaxError`; + if (this.candidates.length === 0) { + this.message = `Command not found, but we're not sure what's the alternative.`; + } + else if (this.candidates.every(candidate => candidate.reason !== null && candidate.reason === candidates[0].reason)) { + const [{ reason }] = this.candidates; + this.message = `${reason}\n\n${this.candidates.map(({ usage }) => `$ ${usage}`).join(`\n`)}`; + } + else if (this.candidates.length === 1) { + const [{ usage }] = this.candidates; + this.message = `Command not found; did you mean:\n\n$ ${usage}\n${whileRunning(input)}`; + } + else { + this.message = `Command not found; did you mean one of:\n\n${this.candidates.map(({ usage }, index) => { + return `${`${index}.`.padStart(4)} ${usage}`; + }).join(`\n`)}\n\n${whileRunning(input)}`; + } + } +} +class AmbiguousSyntaxError extends Error { + constructor(input, usages) { + super(); + this.input = input; + this.usages = usages; + this.clipanion = { type: `none` }; + this.name = `AmbiguousSyntaxError`; + this.message = `Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((usage, index) => { + return `${`${index}.`.padStart(4)} ${usage}`; + }).join(`\n`)}\n\n${whileRunning(input)}`; + } } +const whileRunning = (input) => `While running ${input.filter(token => { + return token !== constants.END_OF_INPUT; +}).map(token => { + const json = JSON.stringify(token); + if (token.match(/\s/) || token.length === 0 || json !== `"${token}"`) { + return json; + } + else { + return token; + } +}).join(` `)}`; -// Unlinks on Windows are not atomic. -// -// This means that if you have a file entry, followed by another -// file entry with an identical name, and you cannot re-use the file -// (because it's a hardlink, or because unlink:true is set, or it's -// Windows, which does not have useful nlink values), then the unlink -// will be committed to the disk AFTER the new file has been written -// over the old one, deleting the new file. -// -// To work around this, on Windows systems, we rename the file and then -// delete the renamed file. It's a sloppy kludge, but frankly, I do not -// know of a better way to do this, given windows' non-atomic unlink -// semantics. -// -// See: https://github.com/npm/node-tar/issues/183 -/* istanbul ignore next */ -const unlinkFile = (path, cb) => { - if (process.platform !== 'win32') - return fs.unlink(path, cb) - - const name = path + '.DELETE.' + crypto.randomBytes(16).toString('hex') - fs.rename(path, name, er => { - if (er) - return cb(er) - fs.unlink(name, cb) - }) -} +exports.AmbiguousSyntaxError = AmbiguousSyntaxError; +exports.UnknownSyntaxError = UnknownSyntaxError; +exports.UsageError = UsageError; -/* istanbul ignore next */ -const unlinkFileSync = path => { - if (process.platform !== 'win32') - return fs.unlinkSync(path) - const name = path + '.DELETE.' + crypto.randomBytes(16).toString('hex') - fs.renameSync(path, name) - fs.unlinkSync(name) -} +/***/ }), -// this.gid, entry.gid, this.processUid -const uint32 = (a, b, c) => - a === a >>> 0 ? a - : b === b >>> 0 ? b - : c +/***/ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/format.js": +/*!******************************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/format.js ***! + \******************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { -class Unpack extends Parser { - constructor (opt) { - if (!opt) - opt = {} +"use strict"; - opt.ondone = _ => { - this[ENDED] = true - this[MAYBECLOSE]() - } - super(opt) +Object.defineProperty(exports, "__esModule", ({ value: true })); - this.reservations = pathReservations() +const MAX_LINE_LENGTH = 80; +const richLine = Array(MAX_LINE_LENGTH).fill(`━`); +for (let t = 0; t <= 24; ++t) + richLine[richLine.length - t] = `\x1b[38;5;${232 + t}m━`; +const richFormat = { + header: str => `\x1b[1m━━━ ${str}${str.length < MAX_LINE_LENGTH - 5 ? ` ${richLine.slice(str.length + 5).join(``)}` : `:`}\x1b[0m`, + bold: str => `\x1b[1m${str}\x1b[22m`, + error: str => `\x1b[31m\x1b[1m${str}\x1b[22m\x1b[39m`, + code: str => `\x1b[36m${str}\x1b[39m`, +}; +const textFormat = { + header: str => str, + bold: str => str, + error: str => str, + code: str => str, +}; +function dedent(text) { + const lines = text.split(`\n`); + const nonEmptyLines = lines.filter(line => line.match(/\S/)); + const indent = nonEmptyLines.length > 0 ? nonEmptyLines.reduce((minLength, line) => Math.min(minLength, line.length - line.trimStart().length), Number.MAX_VALUE) : 0; + return lines + .map(line => line.slice(indent).trimRight()) + .join(`\n`); +} +function formatMarkdownish(text, { format, paragraphs }) { + // Enforce \n as newline character + text = text.replace(/\r\n?/g, `\n`); + // Remove the indentation, since it got messed up with the JS indentation + text = dedent(text); + // Remove surrounding newlines, since they got added for JS formatting + text = text.replace(/^\n+|\n+$/g, ``); + // List items always end with at least two newlines (in order to not be collapsed) + text = text.replace(/^(\s*)-([^\n]*?)\n+/gm, `$1-$2\n\n`); + // Single newlines are removed; larger than that are collapsed into one + text = text.replace(/\n(\n)?\n*/g, `$1`); + if (paragraphs) { + text = text.split(/\n/).map(paragraph => { + // Does the paragraph starts with a list? + const bulletMatch = paragraph.match(/^\s*[*-][\t ]+(.*)/); + if (!bulletMatch) + // No, cut the paragraphs into segments of 80 characters + return paragraph.match(/(.{1,80})(?: |$)/g).join(`\n`); + const indent = paragraph.length - paragraph.trimStart().length; + // Yes, cut the paragraphs into segments of (78 - indent) characters (to account for the prefix) + return bulletMatch[1].match(new RegExp(`(.{1,${78 - indent}})(?: |$)`, `g`)).map((line, index) => { + return ` `.repeat(indent) + (index === 0 ? `- ` : ` `) + line; + }).join(`\n`); + }).join(`\n\n`); + } + // Highlight the code segments + text = text.replace(/(`+)((?:.|[\n])*?)\1/g, ($0, $1, $2) => { + return format.code($1 + $2 + $1); + }); + // Highlight the code segments + text = text.replace(/(\*\*)((?:.|[\n])*?)\1/g, ($0, $1, $2) => { + return format.bold($1 + $2 + $1); + }); + return text ? `${text}\n` : ``; +} - this.transform = typeof opt.transform === 'function' ? opt.transform : null +exports.formatMarkdownish = formatMarkdownish; +exports.richFormat = richFormat; +exports.textFormat = textFormat; - this.writable = true - this.readable = false - this[PENDING] = 0 - this[ENDED] = false +/***/ }), - this.dirCache = opt.dirCache || new Map() +/***/ "./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/browser.js": +/*!*******************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/browser.js ***! + \*******************************************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { - if (typeof opt.uid === 'number' || typeof opt.gid === 'number') { - // need both or neither - if (typeof opt.uid !== 'number' || typeof opt.gid !== 'number') - throw new TypeError('cannot set owner without number uid and gid') - if (opt.preserveOwner) - throw new TypeError( - 'cannot preserve owner in archive and also set owner explicitly') - this.uid = opt.uid - this.gid = opt.gid - this.setOwner = true - } else { - this.uid = null - this.gid = null - this.setOwner = false - } +/* eslint-env browser */ - // default true for root - if (opt.preserveOwner === undefined && typeof opt.uid !== 'number') - this.preserveOwner = process.getuid && process.getuid() === 0 - else - this.preserveOwner = !!opt.preserveOwner +/** + * This is the web browser implementation of `debug()`. + */ - this.processUid = (this.preserveOwner || this.setOwner) && process.getuid ? - process.getuid() : null - this.processGid = (this.preserveOwner || this.setOwner) && process.getgid ? - process.getgid() : null +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); +exports.destroy = (() => { + let warned = false; - // mostly just for testing, but useful in some cases. - // Forcibly trigger a chown on every entry, no matter what - this.forceChown = opt.forceChown === true + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; +})(); - // turn >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ - // do not set mtime/atime of extracted entries - this.noMtime = !!opt.noMtime +// eslint-disable-next-line complexity +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } - // allow .., absolute path entries, and unpacking through symlinks - // without this, warn and skip .., relativize absolutes, and error - // on symlinks in extraction path - this.preservePaths = !!opt.preservePaths + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } - // unlink files and links before writing. This breaks existing hard - // links, and removes symlink directories rather than erroring - this.unlink = !!opt.unlink + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} - this.cwd = path.resolve(opt.cwd || process.cwd()) - this.strip = +opt.strip || 0 - this.processUmask = process.umask() - this.umask = typeof opt.umask === 'number' ? opt.umask : this.processUmask - // default mode for dirs created as parents - this.dmode = opt.dmode || (0o0777 & (~this.umask)) - this.fmode = opt.fmode || (0o0666 & (~this.umask)) - this.on('entry', entry => this[ONENTRY](entry)) - } +/** + * Colorize log arguments if enabled. + * + * @api public + */ - // a bad or damaged archive is a warning for Parser, but an error - // when extracting. Mark those errors as unrecoverable, because - // the Unpack contract cannot be met. - warn (code, msg, data = {}) { - if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') - data.recoverable = false - return super.warn(code, msg, data) - } +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); - [MAYBECLOSE] () { - if (this[ENDED] && this[PENDING] === 0) { - this.emit('prefinish') - this.emit('finish') - this.emit('end') - this.emit('close') - } - } + if (!this.useColors) { + return; + } - [CHECKPATH] (entry) { - if (this.strip) { - const parts = entry.path.split(/\/|\\/) - if (parts.length < this.strip) - return false - entry.path = parts.slice(this.strip).join('/') + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); - if (entry.type === 'Link') { - const linkparts = entry.linkpath.split(/\/|\\/) - if (linkparts.length >= this.strip) - entry.linkpath = linkparts.slice(this.strip).join('/') - } - } + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); - if (!this.preservePaths) { - const p = entry.path - if (p.match(/(^|\/|\\)\.\.(\\|\/|$)/)) { - this.warn('TAR_ENTRY_ERROR', `path contains '..'`, { - entry, - path: p, - }) - return false - } + args.splice(lastC, 0, c); +} - // absolutes on posix are also absolutes on win32 - // so we only need to test this one to get both - if (path.win32.isAbsolute(p)) { - const parsed = path.win32.parse(p) - entry.path = p.substr(parsed.root.length) - const r = parsed.root - this.warn('TAR_ENTRY_INFO', `stripping ${r} from absolute path`, { - entry, - path: p, - }) - } - } +/** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ +exports.log = console.debug || console.log || (() => {}); - // only encode : chars that aren't drive letter indicators - if (this.win32) { - const parsed = path.win32.parse(entry.path) - entry.path = parsed.root === '' ? wc.encode(entry.path) - : parsed.root + wc.encode(entry.path.substr(parsed.root.length)) - } +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} - if (path.isAbsolute(entry.path)) - entry.absolute = entry.path - else - entry.absolute = path.resolve(this.cwd, entry.path) +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ +function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } - return true - } + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } - [ONENTRY] (entry) { - if (!this[CHECKPATH](entry)) - return entry.resume() + return r; +} - assert.equal(typeof entry.absolute, 'string') +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ - switch (entry.type) { - case 'Directory': - case 'GNUDumpDir': - if (entry.mode) - entry.mode = entry.mode | 0o700 +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} - case 'File': - case 'OldFile': - case 'ContiguousFile': - case 'Link': - case 'SymbolicLink': - return this[CHECKFS](entry) +module.exports = __webpack_require__(/*! ./common */ "./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/common.js")(exports); - case 'CharacterDevice': - case 'BlockDevice': - case 'FIFO': - return this[UNSUPPORTED](entry) - } - } +const {formatters} = module.exports; - [ONERROR] (er, entry) { - // Cwd has to exist, or else nothing works. That's serious. - // Other errors are warnings, which raise the error in strict - // mode, but otherwise continue on. - if (er.name === 'CwdError') - this.emit('error', er) - else { - this.warn('TAR_ENTRY_ERROR', er, {entry}) - this[UNPEND]() - entry.resume() - } - } +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ - [MKDIR] (dir, mode, cb) { - mkdir(dir, { - uid: this.uid, - gid: this.gid, - processUid: this.processUid, - processGid: this.processGid, - umask: this.processUmask, - preserve: this.preservePaths, - unlink: this.unlink, - cache: this.dirCache, - cwd: this.cwd, - mode: mode - }, cb) - } +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; - [DOCHOWN] (entry) { - // in preserve owner mode, chown if the entry doesn't match process - // in set owner mode, chown if setting doesn't match process - return this.forceChown || - this.preserveOwner && - ( typeof entry.uid === 'number' && entry.uid !== this.processUid || - typeof entry.gid === 'number' && entry.gid !== this.processGid ) - || - ( typeof this.uid === 'number' && this.uid !== this.processUid || - typeof this.gid === 'number' && this.gid !== this.processGid ) - } - [UID] (entry) { - return uint32(this.uid, entry.uid, this.processUid) - } +/***/ }), - [GID] (entry) { - return uint32(this.gid, entry.gid, this.processGid) - } +/***/ "./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/common.js": +/*!******************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/common.js ***! + \******************************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - [FILE] (entry, fullyDone) { - const mode = entry.mode & 0o7777 || this.fmode - const stream = new fsm.WriteStream(entry.absolute, { - flags: getFlag(entry.size), - mode: mode, - autoClose: false - }) - stream.on('error', er => this[ONERROR](er, entry)) - let actions = 1 - const done = er => { - if (er) - return this[ONERROR](er, entry) +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ - if (--actions === 0) { - fs.close(stream.fd, er => { - fullyDone() - er ? this[ONERROR](er, entry) : this[UNPEND]() - }) - } - } +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = __webpack_require__(/*! ms */ "../../../.yarn/berry/cache/ms-npm-2.1.2-ec0c1512ff-9.zip/node_modules/ms/index.js"); + createDebug.destroy = destroy; - stream.on('finish', _ => { - // if futimes fails, try utimes - // if utimes fails, fail with the original error - // same for fchown/chown - const abs = entry.absolute - const fd = stream.fd + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); - if (entry.mtime && !this.noMtime) { - actions++ - const atime = entry.atime || new Date() - const mtime = entry.mtime - fs.futimes(fd, atime, mtime, er => - er ? fs.utimes(abs, atime, mtime, er2 => done(er2 && er)) - : done()) - } + /** + * The currently active debug mode names, and names to skip. + */ - if (this[DOCHOWN](entry)) { - actions++ - const uid = this[UID](entry) - const gid = this[GID](entry) - fs.fchown(fd, uid, gid, er => - er ? fs.chown(abs, uid, gid, er2 => done(er2 && er)) - : done()) - } + createDebug.names = []; + createDebug.skips = []; - done() - }) + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; - const tx = this.transform ? this.transform(entry) || entry : entry - if (tx !== entry) { - tx.on('error', er => this[ONERROR](er, entry)) - entry.pipe(tx) - } - tx.pipe(stream) - } + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; - [DIRECTORY] (entry, fullyDone) { - const mode = entry.mode & 0o7777 || this.dmode - this[MKDIR](entry.absolute, mode, er => { - if (er) { - fullyDone() - return this[ONERROR](er, entry) - } + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } - let actions = 1 - const done = _ => { - if (--actions === 0) { - fullyDone() - this[UNPEND]() - entry.resume() - } - } + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; - if (entry.mtime && !this.noMtime) { - actions++ - fs.utimes(entry.absolute, entry.atime || new Date(), entry.mtime, done) - } + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; - if (this[DOCHOWN](entry)) { - actions++ - fs.chown(entry.absolute, this[UID](entry), this[GID](entry), done) - } + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } - done() - }) - } + const self = debug; - [UNSUPPORTED] (entry) { - entry.unsupported = true - this.warn('TAR_ENTRY_UNSUPPORTED', - `unsupported entry type: ${entry.type}`, {entry}) - entry.resume() - } + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; - [SYMLINK] (entry, done) { - this[LINK](entry, entry.linkpath, 'symlink', done) - } + args[0] = createDebug.coerce(args[0]); - [HARDLINK] (entry, done) { - this[LINK](entry, path.resolve(this.cwd, entry.linkpath), 'link', done) - } + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } - [PEND] () { - this[PENDING]++ - } + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); - [UNPEND] () { - this[PENDING]-- - this[MAYBECLOSE]() - } + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); - [SKIP] (entry) { - this[UNPEND]() - entry.resume() - } + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); - // Check if we can reuse an existing filesystem entry safely and - // overwrite it, rather than unlinking and recreating - // Windows doesn't report a useful nlink, so we just never reuse entries - [ISREUSABLE] (entry, st) { - return entry.type === 'File' && - !this.unlink && - st.isFile() && - st.nlink <= 1 && - process.platform !== 'win32' - } + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } - // check if a thing is there, and if so, try to clobber it - [CHECKFS] (entry) { - this[PEND]() - const paths = [entry.path] - if (entry.linkpath) - paths.push(entry.linkpath) - this.reservations.reserve(paths, done => this[CHECKFS2](entry, done)) - } - [CHECKFS2] (entry, done) { - this[MKDIR](path.dirname(entry.absolute), this.dmode, er => { - if (er) { - done() - return this[ONERROR](er, entry) - } - fs.lstat(entry.absolute, (er, st) => { - if (st && (this.keep || this.newer && st.mtime > entry.mtime)) { - this[SKIP](entry) - done() - } else if (er || this[ISREUSABLE](entry, st)) { - this[MAKEFS](null, entry, done) - } - else if (st.isDirectory()) { - if (entry.type === 'Directory') { - if (!entry.mode || (st.mode & 0o7777) === entry.mode) - this[MAKEFS](null, entry, done) - else - fs.chmod(entry.absolute, entry.mode, - er => this[MAKEFS](er, entry, done)) - } else - fs.rmdir(entry.absolute, er => this[MAKEFS](er, entry, done)) - } else - unlinkFile(entry.absolute, er => this[MAKEFS](er, entry, done)) - }) - }) - } + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, + set: v => { + enableOverride = v; + } + }); + + // Env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; - [MAKEFS] (er, entry, done) { - if (er) - return this[ONERROR](er, entry) + createDebug.names = []; + createDebug.skips = []; - switch (entry.type) { - case 'File': - case 'OldFile': - case 'ContiguousFile': - return this[FILE](entry, done) + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; - case 'Link': - return this[HARDLINK](entry, done) + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } - case 'SymbolicLink': - return this[SYMLINK](entry, done) + namespaces = split[i].replace(/\*/g, '.*?'); - case 'Directory': - case 'GNUDumpDir': - return this[DIRECTORY](entry, done) - } - } + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } - [LINK] (entry, linkpath, link, done) { - // XXX: get the type ('file' or 'dir') for windows - fs[link](linkpath, entry.absolute, er => { - if (er) - return this[ONERROR](er, entry) - done() - this[UNPEND]() - entry.resume() - }) - } -} + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } -class UnpackSync extends Unpack { - constructor (opt) { - super(opt) - } + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } - [CHECKFS] (entry) { - const er = this[MKDIR](path.dirname(entry.absolute), this.dmode, neverCalled) - if (er) - return this[ONERROR](er, entry) - try { - const st = fs.lstatSync(entry.absolute) - if (this.keep || this.newer && st.mtime > entry.mtime) - return this[SKIP](entry) - else if (this[ISREUSABLE](entry, st)) - return this[MAKEFS](null, entry, neverCalled) - else { - try { - if (st.isDirectory()) { - if (entry.type === 'Directory') { - if (entry.mode && (st.mode & 0o7777) !== entry.mode) - fs.chmodSync(entry.absolute, entry.mode) - } else - fs.rmdirSync(entry.absolute) - } else - unlinkFileSync(entry.absolute) - return this[MAKEFS](null, entry, neverCalled) - } catch (er) { - return this[ONERROR](er, entry) - } - } - } catch (er) { - return this[MAKEFS](null, entry, neverCalled) - } - } + let i; + let len; - [FILE] (entry, _) { - const mode = entry.mode & 0o7777 || this.fmode + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } - const oner = er => { - let closeError - try { - fs.closeSync(fd) - } catch (e) { - closeError = e - } - if (er || closeError) - this[ONERROR](er || closeError, entry) - } + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } - let stream - let fd - try { - fd = fs.openSync(entry.absolute, getFlag(entry.size), mode) - } catch (er) { - return oner(er) - } - const tx = this.transform ? this.transform(entry) || entry : entry - if (tx !== entry) { - tx.on('error', er => this[ONERROR](er, entry)) - entry.pipe(tx) - } + return false; + } - tx.on('data', chunk => { - try { - fs.writeSync(fd, chunk, 0, chunk.length) - } catch (er) { - oner(er) - } - }) + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } - tx.on('end', _ => { - let er = null - // try both, falling futimes back to utimes - // if either fails, handle the first error - if (entry.mtime && !this.noMtime) { - const atime = entry.atime || new Date() - const mtime = entry.mtime - try { - fs.futimesSync(fd, atime, mtime) - } catch (futimeser) { - try { - fs.utimesSync(entry.absolute, atime, mtime) - } catch (utimeser) { - er = futimeser - } - } - } + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } - if (this[DOCHOWN](entry)) { - const uid = this[UID](entry) - const gid = this[GID](entry) + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } - try { - fs.fchownSync(fd, uid, gid) - } catch (fchowner) { - try { - fs.chownSync(entry.absolute, uid, gid) - } catch (chowner) { - er = er || fchowner - } - } - } + createDebug.enable(createDebug.load()); - oner(er) - }) - } + return createDebug; +} - [DIRECTORY] (entry, _) { - const mode = entry.mode & 0o7777 || this.dmode - const er = this[MKDIR](entry.absolute, mode) - if (er) - return this[ONERROR](er, entry) - if (entry.mtime && !this.noMtime) { - try { - fs.utimesSync(entry.absolute, entry.atime || new Date(), entry.mtime) - } catch (er) {} - } - if (this[DOCHOWN](entry)) { - try { - fs.chownSync(entry.absolute, this[UID](entry), this[GID](entry)) - } catch (er) {} - } - entry.resume() - } +module.exports = setup; - [MKDIR] (dir, mode) { - try { - return mkdir.sync(dir, { - uid: this.uid, - gid: this.gid, - processUid: this.processUid, - processGid: this.processGid, - umask: this.processUmask, - preserve: this.preservePaths, - unlink: this.unlink, - cache: this.dirCache, - cwd: this.cwd, - mode: mode - }) - } catch (er) { - return er - } - } - [LINK] (entry, linkpath, link, _) { - try { - fs[link + 'Sync'](linkpath, entry.absolute) - entry.resume() - } catch (er) { - return this[ONERROR](er, entry) - } - } +/***/ }), + +/***/ "./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/index.js": +/*!*****************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/index.js ***! + \*****************************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * Detect Electron renderer / nwjs process, which is node, but we should + * treat as a browser. + */ + +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { + module.exports = __webpack_require__(/*! ./browser.js */ "./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/browser.js"); +} else { + module.exports = __webpack_require__(/*! ./node.js */ "./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/node.js"); } -Unpack.Sync = UnpackSync -module.exports = Unpack +/***/ }), + +/***/ "./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/node.js": +/*!****************************************************************************************************************************************!*\ + !*** ./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/node.js ***! + \****************************************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +/** + * Module dependencies. + */ + +const tty = __webpack_require__(/*! tty */ "tty"); +const util = __webpack_require__(/*! util */ "util"); -/***/ }), +/** + * This is the Node.js implementation of `debug()`. + */ -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/update.js": -/*!********************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/update.js ***! - \********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.destroy = util.deprecate( + () => {}, + 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' +); -"use strict"; +/** + * Colors. + */ +exports.colors = [6, 2, 3, 4, 5, 1]; -// tar -u +try { + // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) + // eslint-disable-next-line import/no-extraneous-dependencies + const supportsColor = __webpack_require__(/*! supports-color */ "../../../.yarn/berry/cache/supports-color-npm-9.2.2-d003069e84-9.zip/node_modules/supports-color/index.js"); -const hlo = __webpack_require__(/*! ./high-level-opt.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/high-level-opt.js") -const r = __webpack_require__(/*! ./replace.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/replace.js") -// just call tar.r with the filter and mtimeCache + if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { + exports.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } +} catch (error) { + // Swallow - we only care if `supports-color` is available; it doesn't have to be. +} -const u = module.exports = (opt_, files, cb) => { - const opt = hlo(opt_) +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ - if (!opt.file) - throw new TypeError('file is required') +exports.inspectOpts = Object.keys(process.env).filter(key => { + return /^debug_/i.test(key); +}).reduce((obj, key) => { + // Camel-case + const prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, (_, k) => { + return k.toUpperCase(); + }); - if (opt.gzip) - throw new TypeError('cannot append to compressed archives') + // Coerce string value into JS value + let val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) { + val = true; + } else if (/^(no|off|false|disabled)$/i.test(val)) { + val = false; + } else if (val === 'null') { + val = null; + } else { + val = Number(val); + } - if (!files || !Array.isArray(files) || !files.length) - throw new TypeError('no files or directories specified') + obj[prop] = val; + return obj; +}, {}); - files = Array.from(files) +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ - mtimeFilter(opt) - return r(opt, files, cb) +function useColors() { + return 'colors' in exports.inspectOpts ? + Boolean(exports.inspectOpts.colors) : + tty.isatty(process.stderr.fd); } -const mtimeFilter = opt => { - const filter = opt.filter +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ - if (!opt.mtimeCache) - opt.mtimeCache = new Map() +function formatArgs(args) { + const {namespace: name, useColors} = this; - opt.filter = filter ? (path, stat) => - filter(path, stat) && !(opt.mtimeCache.get(path) > stat.mtime) - : (path, stat) => !(opt.mtimeCache.get(path) > stat.mtime) -} + if (useColors) { + const c = this.color; + const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); + const prefix = ` ${colorCode};1m${name} \u001B[0m`; + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} -/***/ }), +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } + return new Date().toISOString() + ' '; +} -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/warn-mixin.js": -/*!************************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/warn-mixin.js ***! - \************************************************************************************************/ -/***/ ((module) => { +/** + * Invokes `util.format()` with the specified arguments and writes to stderr. + */ -"use strict"; +function log(...args) { + return process.stderr.write(util.format(...args) + '\n'); +} -module.exports = Base => class extends Base { - warn (code, message, data = {}) { - if (this.file) - data.file = this.file - if (this.cwd) - data.cwd = this.cwd - data.code = message instanceof Error && message.code || code - data.tarCode = code - if (!this.strict && data.recoverable !== false) { - if (message instanceof Error) { - data = Object.assign(message, data) - message = message.message - } - this.emit('warn', data.tarCode, message, data) - } else if (message instanceof Error) { - this.emit('error', Object.assign(message, data)) - } else - this.emit('error', Object.assign(new Error(`${code}: ${message}`), data)) - } +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + if (namespaces) { + process.env.DEBUG = namespaces; + } else { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } } +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} -/***/ }), +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/winchars.js": -/*!**********************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/winchars.js ***! - \**********************************************************************************************/ -/***/ ((module) => { +function init(debug) { + debug.inspectOpts = {}; -"use strict"; + const keys = Object.keys(exports.inspectOpts); + for (let i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} +module.exports = __webpack_require__(/*! ./common */ "./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/common.js")(exports); -// When writing files on Windows, translate the characters to their -// 0xf000 higher-encoded versions. +const {formatters} = module.exports; -const raw = [ - '|', - '<', - '>', - '?', - ':' -] +/** + * Map %o to `util.inspect()`, all on a single line. + */ -const win = raw.map(char => - String.fromCharCode(0xf000 + char.charCodeAt(0))) +formatters.o = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n') + .map(str => str.trim()) + .join(' '); +}; -const toWin = new Map(raw.map((char, i) => [char, win[i]])) -const toRaw = new Map(win.map((char, i) => [char, raw[i]])) +/** + * Map %O to `util.inspect()`, allowing multiple lines if needed. + */ -module.exports = { - encode: s => raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s), - decode: s => win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s) -} +formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; /***/ }), -/***/ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/write-entry.js": -/*!*************************************************************************************************!*\ - !*** ./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/write-entry.js ***! - \*************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "./sources/Engine.ts": +/*!***************************!*\ + !*** ./sources/Engine.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Engine": () => (/* binding */ Engine) +/* harmony export */ }); +/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ "fs"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ "path"); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var process__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! process */ "process"); +/* harmony import */ var process__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(process__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/index.js"); +/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(semver__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _config_json__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.json */ "./config.json"); +/* harmony import */ var _corepackUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./corepackUtils */ "./sources/corepackUtils.ts"); +/* harmony import */ var _folderUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./folderUtils */ "./sources/folderUtils.ts"); +/* harmony import */ var _semverUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./semverUtils */ "./sources/semverUtils.ts"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./types */ "./sources/types.ts"); -const MiniPass = __webpack_require__(/*! minipass */ "./.yarn/cache/minipass-npm-3.1.1-b51d7e264d-cfcfd86adc.zip/node_modules/minipass/index.js") -const Pax = __webpack_require__(/*! ./pax.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/pax.js") -const Header = __webpack_require__(/*! ./header.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/header.js") -const ReadEntry = __webpack_require__(/*! ./read-entry.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/read-entry.js") -const fs = __webpack_require__(/*! fs */ "fs") -const path = __webpack_require__(/*! path */ "path") -const types = __webpack_require__(/*! ./types.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/types.js") -const maxReadSize = 16 * 1024 * 1024 -const PROCESS = Symbol('process') -const FILE = Symbol('file') -const DIRECTORY = Symbol('directory') -const SYMLINK = Symbol('symlink') -const HARDLINK = Symbol('hardlink') -const HEADER = Symbol('header') -const READ = Symbol('read') -const LSTAT = Symbol('lstat') -const ONLSTAT = Symbol('onlstat') -const ONREAD = Symbol('onread') -const ONREADLINK = Symbol('onreadlink') -const OPENFILE = Symbol('openfile') -const ONOPENFILE = Symbol('onopenfile') -const CLOSE = Symbol('close') -const MODE = Symbol('mode') -const warner = __webpack_require__(/*! ./warn-mixin.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/warn-mixin.js") -const winchars = __webpack_require__(/*! ./winchars.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/winchars.js") -const modeFix = __webpack_require__(/*! ./mode-fix.js */ "./.yarn/cache/tar-npm-6.0.1-aedef672fb-498c4a5671.zip/node_modules/tar/lib/mode-fix.js") -const WriteEntry = warner(class WriteEntry extends MiniPass { - constructor (p, opt) { - opt = opt || {} - super(opt) - if (typeof p !== 'string') - throw new TypeError('path is required') - this.path = p - // suppress atime, ctime, uid, gid, uname, gname - this.portable = !!opt.portable - // until node has builtin pwnam functions, this'll have to do - this.myuid = process.getuid && process.getuid() - this.myuser = process.env.USER || '' - this.maxReadSize = opt.maxReadSize || maxReadSize - this.linkCache = opt.linkCache || new Map() - this.statCache = opt.statCache || new Map() - this.preservePaths = !!opt.preservePaths - this.cwd = opt.cwd || process.cwd() - this.strict = !!opt.strict - this.noPax = !!opt.noPax - this.noMtime = !!opt.noMtime - this.mtime = opt.mtime || null - if (typeof opt.onwarn === 'function') - this.on('warn', opt.onwarn) - let pathWarn = false - if (!this.preservePaths && path.win32.isAbsolute(p)) { - // absolutes on posix are also absolutes on win32 - // so we only need to test this one to get both - const parsed = path.win32.parse(p) - this.path = p.substr(parsed.root.length) - pathWarn = parsed.root - } - this.win32 = !!opt.win32 || process.platform === 'win32' - if (this.win32) { - this.path = winchars.decode(this.path.replace(/\\/g, '/')) - p = p.replace(/\\/g, '/') - } - this.absolute = opt.absolute || path.resolve(this.cwd, p) - if (this.path === '') - this.path = './' - if (pathWarn) { - this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, { - entry: this, - path: pathWarn + this.path, - }) +class Engine { + constructor(config = _config_json__WEBPACK_IMPORTED_MODULE_4__) { + this.config = config; + } + getPackageManagerFor(binaryName) { + for (const packageManager of _types__WEBPACK_IMPORTED_MODULE_8__.SupportedPackageManagerSet) { + for (const rangeDefinition of Object.values(this.config.definitions[packageManager].ranges)) { + const bins = Array.isArray(rangeDefinition.bin) + ? rangeDefinition.bin + : Object.keys(rangeDefinition.bin); + if (bins.includes(binaryName)) { + return packageManager; + } + } + } + return null; + } + getBinariesFor(name) { + const binNames = new Set(); + for (const rangeDefinition of Object.values(this.config.definitions[name].ranges)) { + const bins = Array.isArray(rangeDefinition.bin) + ? rangeDefinition.bin + : Object.keys(rangeDefinition.bin); + for (const name of bins) { + binNames.add(name); + } + } + return binNames; + } + async getDefaultDescriptors() { + const locators = []; + for (const name of _types__WEBPACK_IMPORTED_MODULE_8__.SupportedPackageManagerSet) + locators.push({ name, range: await this.getDefaultVersion(name) }); + return locators; + } + async getDefaultVersion(packageManager) { + const definition = this.config.definitions[packageManager]; + if (typeof definition === `undefined`) + throw new clipanion__WEBPACK_IMPORTED_MODULE_9__.UsageError(`This package manager (${packageManager}) isn't supported by this corepack build`); + let lastKnownGood; + try { + lastKnownGood = JSON.parse(await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.readFile(this.getLastKnownGoodFile(), `utf8`)); + } + catch (_a) { + // Ignore errors; too bad + } + if (typeof lastKnownGood === `object` && lastKnownGood !== null && + Object.prototype.hasOwnProperty.call(lastKnownGood, packageManager)) { + const override = lastKnownGood[packageManager]; + if (typeof override === `string`) { + return override; + } + } + if ((process__WEBPACK_IMPORTED_MODULE_2___default().env.COREPACK_DEFAULT_TO_LATEST) === `0`) + return definition.default; + const reference = await _corepackUtils__WEBPACK_IMPORTED_MODULE_5__.fetchLatestStableVersion(definition.fetchLatestFrom); + await this.activatePackageManager({ + name: packageManager, + reference, + }); + return reference; + } + async activatePackageManager(locator) { + const lastKnownGoodFile = this.getLastKnownGoodFile(); + let lastKnownGood; + try { + lastKnownGood = JSON.parse(await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.readFile(lastKnownGoodFile, `utf8`)); + } + catch (_a) { + // Ignore errors; too bad + } + if (typeof lastKnownGood !== `object` || lastKnownGood === null) + lastKnownGood = {}; + lastKnownGood[locator.name] = locator.reference; + await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.mkdir(path__WEBPACK_IMPORTED_MODULE_1___default().dirname(lastKnownGoodFile), { recursive: true }); + await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.writeFile(lastKnownGoodFile, `${JSON.stringify(lastKnownGood, null, 2)}\n`); + } + async ensurePackageManager(locator) { + const definition = this.config.definitions[locator.name]; + if (typeof definition === `undefined`) + throw new clipanion__WEBPACK_IMPORTED_MODULE_9__.UsageError(`This package manager (${locator.name}) isn't supported by this corepack build`); + const ranges = Object.keys(definition.ranges).reverse(); + const range = ranges.find(range => _semverUtils__WEBPACK_IMPORTED_MODULE_7__.satisfiesWithPrereleases(locator.reference, range)); + if (typeof range === `undefined`) + throw new Error(`Assertion failed: Specified resolution (${locator.reference}) isn't supported by any of ${ranges.join(`, `)}`); + const installedLocation = await _corepackUtils__WEBPACK_IMPORTED_MODULE_5__.installVersion(_folderUtils__WEBPACK_IMPORTED_MODULE_6__.getInstallFolder(), locator, { + spec: definition.ranges[range], + }); + return { + location: installedLocation, + spec: definition.ranges[range], + }; + } + async resolveDescriptor(descriptor, { allowTags = false, useCache = true } = {}) { + const definition = this.config.definitions[descriptor.name]; + if (typeof definition === `undefined`) + throw new clipanion__WEBPACK_IMPORTED_MODULE_9__.UsageError(`This package manager (${descriptor.name}) isn't supported by this corepack build`); + let finalDescriptor = descriptor; + if (!semver__WEBPACK_IMPORTED_MODULE_3___default().valid(descriptor.range) && !semver__WEBPACK_IMPORTED_MODULE_3___default().validRange(descriptor.range)) { + if (!allowTags) + throw new clipanion__WEBPACK_IMPORTED_MODULE_9__.UsageError(`Packages managers can't be referended via tags in this context`); + // We only resolve tags from the latest registry entry + const ranges = Object.keys(definition.ranges); + const tagRange = ranges[ranges.length - 1]; + const tags = await _corepackUtils__WEBPACK_IMPORTED_MODULE_5__.fetchAvailableTags(definition.ranges[tagRange].registry); + if (!Object.prototype.hasOwnProperty.call(tags, descriptor.range)) + throw new clipanion__WEBPACK_IMPORTED_MODULE_9__.UsageError(`Tag not found (${descriptor.range})`); + finalDescriptor = { + name: descriptor.name, + range: tags[descriptor.range], + }; + } + // If a compatible version is already installed, no need to query one + // from the remote listings + const cachedVersion = await _corepackUtils__WEBPACK_IMPORTED_MODULE_5__.findInstalledVersion(_folderUtils__WEBPACK_IMPORTED_MODULE_6__.getInstallFolder(), finalDescriptor); + if (cachedVersion !== null && useCache) + return { name: finalDescriptor.name, reference: cachedVersion }; + // If the user asked for a specific version, no need to request the list of + // available versions from the registry. + if (semver__WEBPACK_IMPORTED_MODULE_3___default().valid(finalDescriptor.range)) + return { name: finalDescriptor.name, reference: finalDescriptor.range }; + const candidateRangeDefinitions = Object.keys(definition.ranges).filter(range => { + return _semverUtils__WEBPACK_IMPORTED_MODULE_7__.satisfiesWithPrereleases(finalDescriptor.range, range); + }); + const tagResolutions = await Promise.all(candidateRangeDefinitions.map(async (range) => { + return [range, await _corepackUtils__WEBPACK_IMPORTED_MODULE_5__.fetchAvailableVersions(definition.ranges[range].registry)]; + })); + // If a version is available under multiple strategies (for example if + // Yarn is published to both the v1 package and git), we only care + // about the latest one + const resolutionMap = new Map(); + for (const [range, resolutions] of tagResolutions) + for (const entry of resolutions) + resolutionMap.set(entry, range); + const candidates = [...resolutionMap.keys()]; + const maxSatisfying = semver__WEBPACK_IMPORTED_MODULE_3___default().maxSatisfying(candidates, finalDescriptor.range); + if (maxSatisfying === null) + return null; + return { name: finalDescriptor.name, reference: maxSatisfying }; + } + getLastKnownGoodFile() { + return path__WEBPACK_IMPORTED_MODULE_1___default().join(_folderUtils__WEBPACK_IMPORTED_MODULE_6__.getInstallFolder(), `lastKnownGood.json`); } +} - if (this.statCache.has(this.absolute)) - this[ONLSTAT](this.statCache.get(this.absolute)) - else - this[LSTAT]() - } - [LSTAT] () { - fs.lstat(this.absolute, (er, stat) => { - if (er) - return this.emit('error', er) - this[ONLSTAT](stat) - }) - } +/***/ }), - [ONLSTAT] (stat) { - this.statCache.set(this.absolute, stat) - this.stat = stat - if (!stat.isFile()) - stat.size = 0 - this.type = getType(stat) - this.emit('stat', stat) - this[PROCESS]() - } +/***/ "./sources/commands/Disable.ts": +/*!*************************************!*\ + !*** ./sources/commands/Disable.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DisableCommand": () => (/* binding */ DisableCommand) +/* harmony export */ }); +/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ "fs"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ "path"); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var which__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! which */ "../../../.yarn/berry/cache/which-npm-2.0.2-320ddf72f7-9.zip/node_modules/which/which.js"); +/* harmony import */ var which__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(which__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../types */ "./sources/types.ts"); - [PROCESS] () { - switch (this.type) { - case 'File': return this[FILE]() - case 'Directory': return this[DIRECTORY]() - case 'SymbolicLink': return this[SYMLINK]() - // unsupported types are ignored. - default: return this.end() - } - } - [MODE] (mode) { - return modeFix(mode, this.type === 'Directory', this.portable) - } - [HEADER] () { - if (this.type === 'Directory' && this.portable) - this.noMtime = true - this.header = new Header({ - path: this.path, - linkpath: this.linkpath, - // only the permissions and setuid/setgid/sticky bitflags - // not the higher-order bits that specify file type - mode: this[MODE](this.stat.mode), - uid: this.portable ? null : this.stat.uid, - gid: this.portable ? null : this.stat.gid, - size: this.stat.size, - mtime: this.noMtime ? null : this.mtime || this.stat.mtime, - type: this.type, - uname: this.portable ? null : - this.stat.uid === this.myuid ? this.myuser : '', - atime: this.portable ? null : this.stat.atime, - ctime: this.portable ? null : this.stat.ctime - }) - if (this.header.encode() && !this.noPax) - this.write(new Pax({ - atime: this.portable ? null : this.header.atime, - ctime: this.portable ? null : this.header.ctime, - gid: this.portable ? null : this.header.gid, - mtime: this.noMtime ? null : this.mtime || this.header.mtime, - path: this.path, - linkpath: this.linkpath, - size: this.header.size, - uid: this.portable ? null : this.header.uid, - uname: this.portable ? null : this.header.uname, - dev: this.portable ? null : this.stat.dev, - ino: this.portable ? null : this.stat.ino, - nlink: this.portable ? null : this.stat.nlink - }).encode()) - this.write(this.header.block) - } +class DisableCommand extends clipanion__WEBPACK_IMPORTED_MODULE_4__.Command { + constructor() { + super(...arguments); + this.installDirectory = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.String(`--install-directory`, { + description: `Where the shims are located`, + }); + this.names = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.Rest(); + } + async execute() { + let installDirectory = this.installDirectory; + // Node always call realpath on the module it executes, so we already + // lost track of how the binary got called. To find it back, we need to + // iterate over the PATH variable. + if (typeof installDirectory === `undefined`) + installDirectory = path__WEBPACK_IMPORTED_MODULE_1___default().dirname(await which__WEBPACK_IMPORTED_MODULE_2___default()(`corepack`)); + const names = this.names.length === 0 + ? _types__WEBPACK_IMPORTED_MODULE_3__.SupportedPackageManagerSetWithoutNpm + : this.names; + for (const name of new Set(names)) { + if (!(0,_types__WEBPACK_IMPORTED_MODULE_3__.isSupportedPackageManager)(name)) + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Invalid package manager name '${name}'`); + for (const binName of this.context.engine.getBinariesFor(name)) { + if (process.platform === `win32`) { + await this.removeWin32Link(installDirectory, binName); + } + else { + await this.removePosixLink(installDirectory, binName); + } + } + } + } + async removePosixLink(installDirectory, binName) { + const file = path__WEBPACK_IMPORTED_MODULE_1___default().join(installDirectory, binName); + try { + await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.unlink(file); + } + catch (err) { + if (err.code !== `ENOENT`) { + throw err; + } + } + } + async removeWin32Link(installDirectory, binName) { + for (const ext of [``, `.ps1`, `.cmd`]) { + const file = path__WEBPACK_IMPORTED_MODULE_1___default().join(installDirectory, `${binName}${ext}`); + try { + await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.unlink(file); + } + catch (err) { + if (err.code !== `ENOENT`) { + throw err; + } + } + } + } +} +DisableCommand.paths = [ + [`disable`], +]; +DisableCommand.usage = clipanion__WEBPACK_IMPORTED_MODULE_4__.Command.Usage({ + description: `Remove the Corepack shims from the install directory`, + details: ` + When run, this command will remove the shims for the specified package managers from the install directory, or all shims if no parameters are passed. - [DIRECTORY] () { - if (this.path.substr(-1) !== '/') - this.path += '/' - this.stat.size = 0 - this[HEADER]() - this.end() - } + By default it will locate the install directory by running the equivalent of \`which corepack\`, but this can be tweaked by explicitly passing the install directory via the \`--install-directory\` flag. + `, + examples: [[ + `Disable all shims, removing them if they're next to the \`coreshim\` binary`, + `$0 disable`, + ], [ + `Disable all shims, removing them from the specified directory`, + `$0 disable --install-directory /path/to/bin`, + ], [ + `Disable the Yarn shim only`, + `$0 disable yarn`, + ]], +}); - [SYMLINK] () { - fs.readlink(this.absolute, (er, linkpath) => { - if (er) - return this.emit('error', er) - this[ONREADLINK](linkpath) - }) - } - [ONREADLINK] (linkpath) { - this.linkpath = linkpath.replace(/\\/g, '/') - this[HEADER]() - this.end() - } +/***/ }), - [HARDLINK] (linkpath) { - this.type = 'Link' - this.linkpath = path.relative(this.cwd, linkpath).replace(/\\/g, '/') - this.stat.size = 0 - this[HEADER]() - this.end() - } +/***/ "./sources/commands/Enable.ts": +/*!************************************!*\ + !*** ./sources/commands/Enable.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - [FILE] () { - if (this.stat.nlink > 1) { - const linkKey = this.stat.dev + ':' + this.stat.ino - if (this.linkCache.has(linkKey)) { - const linkpath = this.linkCache.get(linkKey) - if (linkpath.indexOf(this.cwd) === 0) - return this[HARDLINK](linkpath) - } - this.linkCache.set(linkKey, this.absolute) - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "EnableCommand": () => (/* binding */ EnableCommand) +/* harmony export */ }); +/* harmony import */ var _zkochan_cmd_shim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @zkochan/cmd-shim */ "../../../.yarn/berry/cache/@zkochan-cmd-shim-npm-5.3.1-32f000bcac-9.zip/node_modules/@zkochan/cmd-shim/index.js"); +/* harmony import */ var _zkochan_cmd_shim__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_zkochan_cmd_shim__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ "fs"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! path */ "path"); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var which__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! which */ "../../../.yarn/berry/cache/which-npm-2.0.2-320ddf72f7-9.zip/node_modules/which/which.js"); +/* harmony import */ var which__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(which__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _nodeUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../nodeUtils */ "./sources/nodeUtils.ts"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../types */ "./sources/types.ts"); - this[HEADER]() - if (this.stat.size === 0) - return this.end() - this[OPENFILE]() - } - [OPENFILE] () { - fs.open(this.absolute, 'r', (er, fd) => { - if (er) - return this.emit('error', er) - this[ONOPENFILE](fd) - }) - } - [ONOPENFILE] (fd) { - const blockLen = 512 * Math.ceil(this.stat.size / 512) - const bufLen = Math.min(blockLen, this.maxReadSize) - const buf = Buffer.allocUnsafe(bufLen) - this[READ](fd, buf, 0, buf.length, 0, this.stat.size, blockLen) - } - [READ] (fd, buf, offset, length, pos, remain, blockRemain) { - fs.read(fd, buf, offset, length, pos, (er, bytesRead) => { - if (er) { - // ignoring the error from close(2) is a bad practice, but at - // this point we already have an error, don't need another one - return this[CLOSE](fd, () => this.emit('error', er)) - } - this[ONREAD](fd, buf, offset, length, pos, remain, blockRemain, bytesRead) - }) - } - [CLOSE] (fd, cb) { - fs.close(fd, cb) - } - [ONREAD] (fd, buf, offset, length, pos, remain, blockRemain, bytesRead) { - if (bytesRead <= 0 && remain > 0) { - const er = new Error('encountered unexpected EOF') - er.path = this.absolute - er.syscall = 'read' - er.code = 'EOF' - return this[CLOSE](fd, () => this.emit('error', er)) +class EnableCommand extends clipanion__WEBPACK_IMPORTED_MODULE_6__.Command { + constructor() { + super(...arguments); + this.installDirectory = clipanion__WEBPACK_IMPORTED_MODULE_6__.Option.String(`--install-directory`, { + description: `Where the shims are to be installed`, + }); + this.names = clipanion__WEBPACK_IMPORTED_MODULE_6__.Option.Rest(); } - - if (bytesRead > remain) { - const er = new Error('did not encounter expected EOF') - er.path = this.absolute - er.syscall = 'read' - er.code = 'EOF' - return this[CLOSE](fd, () => this.emit('error', er)) + async execute() { + let installDirectory = this.installDirectory; + // Node always call realpath on the module it executes, so we already + // lost track of how the binary got called. To find it back, we need to + // iterate over the PATH variable. + if (typeof installDirectory === `undefined`) + installDirectory = path__WEBPACK_IMPORTED_MODULE_2___default().dirname(await which__WEBPACK_IMPORTED_MODULE_3___default()(`corepack`)); + // Otherwise the relative symlink we'll compute will be incorrect, if the + // install directory is within a symlink + installDirectory = fs__WEBPACK_IMPORTED_MODULE_1___default().realpathSync(installDirectory); + // We use `eval` so that Webpack doesn't statically transform it. + const manifestPath = _nodeUtils__WEBPACK_IMPORTED_MODULE_4__.dynamicRequire.resolve(`corepack/package.json`); + const distFolder = path__WEBPACK_IMPORTED_MODULE_2___default().join(path__WEBPACK_IMPORTED_MODULE_2___default().dirname(manifestPath), `dist`); + if (!fs__WEBPACK_IMPORTED_MODULE_1___default().existsSync(distFolder)) + throw new Error(`Assertion failed: The stub folder doesn't exist`); + const names = this.names.length === 0 + ? _types__WEBPACK_IMPORTED_MODULE_5__.SupportedPackageManagerSetWithoutNpm + : this.names; + for (const name of new Set(names)) { + if (!(0,_types__WEBPACK_IMPORTED_MODULE_5__.isSupportedPackageManager)(name)) + throw new clipanion__WEBPACK_IMPORTED_MODULE_6__.UsageError(`Invalid package manager name '${name}'`); + for (const binName of this.context.engine.getBinariesFor(name)) { + if (process.platform === `win32`) { + await this.generateWin32Link(installDirectory, distFolder, binName); + } + else { + await this.generatePosixLink(installDirectory, distFolder, binName); + } + } + } + } + async generatePosixLink(installDirectory, distFolder, binName) { + const file = path__WEBPACK_IMPORTED_MODULE_2___default().join(installDirectory, binName); + const symlink = path__WEBPACK_IMPORTED_MODULE_2___default().relative(installDirectory, path__WEBPACK_IMPORTED_MODULE_2___default().join(distFolder, `${binName}.js`)); + if (fs__WEBPACK_IMPORTED_MODULE_1___default().existsSync(file)) { + const currentSymlink = await fs__WEBPACK_IMPORTED_MODULE_1___default().promises.readlink(file); + if (currentSymlink !== symlink) { + await fs__WEBPACK_IMPORTED_MODULE_1___default().promises.unlink(file); + } + else { + return; + } + } + await fs__WEBPACK_IMPORTED_MODULE_1___default().promises.symlink(symlink, file); + } + async generateWin32Link(installDirectory, distFolder, binName) { + const file = path__WEBPACK_IMPORTED_MODULE_2___default().join(installDirectory, binName); + await _zkochan_cmd_shim__WEBPACK_IMPORTED_MODULE_0___default()(path__WEBPACK_IMPORTED_MODULE_2___default().join(distFolder, `${binName}.js`), file, { + createCmdFile: true, + }); } +} +EnableCommand.paths = [ + [`enable`], +]; +EnableCommand.usage = clipanion__WEBPACK_IMPORTED_MODULE_6__.Command.Usage({ + description: `Add the Corepack shims to the install directories`, + details: ` + When run, this commmand will check whether the shims for the specified package managers can be found with the correct values inside the install directory. If not, or if they don't exist, they will be created. - // null out the rest of the buffer, if we could fit the block padding - if (bytesRead === remain) { - for (let i = bytesRead; i < length && bytesRead < blockRemain; i++) { - buf[i + offset] = 0 - bytesRead ++ - remain ++ - } - } + By default it will locate the install directory by running the equivalent of \`which corepack\`, but this can be tweaked by explicitly passing the install directory via the \`--install-directory\` flag. + `, + examples: [[ + `Enable all shims, putting them next to the \`corepack\` binary`, + `$0 enable`, + ], [ + `Enable all shims, putting them in the specified directory`, + `$0 enable --install-directory /path/to/folder`, + ], [ + `Enable the Yarn shim only`, + `$0 enable yarn`, + ]], +}); - const writeBuf = offset === 0 && bytesRead === buf.length ? - buf : buf.slice(offset, offset + bytesRead) - remain -= bytesRead - blockRemain -= bytesRead - pos += bytesRead - offset += bytesRead - this.write(writeBuf) +/***/ }), - if (!remain) { - if (blockRemain) - this.write(Buffer.alloc(blockRemain)) - return this[CLOSE](fd, er => er ? this.emit('error', er) : this.end()) - } +/***/ "./sources/commands/Hydrate.ts": +/*!*************************************!*\ + !*** ./sources/commands/Hydrate.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - if (offset >= length) { - buf = Buffer.allocUnsafe(length) - offset = 0 - } - length = buf.length - offset - this[READ](fd, buf, offset, length, pos, remain, blockRemain) - } -}) +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "HydrateCommand": () => (/* binding */ HydrateCommand) +/* harmony export */ }); +/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js"); +/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs/promises */ "fs/promises"); +/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs_promises__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ "path"); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _folderUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../folderUtils */ "./sources/folderUtils.ts"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../types */ "./sources/types.ts"); -class WriteEntrySync extends WriteEntry { - constructor (path, opt) { - super(path, opt) - } - [LSTAT] () { - this[ONLSTAT](fs.lstatSync(this.absolute)) - } - [SYMLINK] () { - this[ONREADLINK](fs.readlinkSync(this.absolute)) - } - [OPENFILE] () { - this[ONOPENFILE](fs.openSync(this.absolute, 'r')) - } - [READ] (fd, buf, offset, length, pos, remain, blockRemain) { - let threw = true - try { - const bytesRead = fs.readSync(fd, buf, offset, length, pos) - this[ONREAD](fd, buf, offset, length, pos, remain, blockRemain, bytesRead) - threw = false - } finally { - // ignoring the error from close(2) is a bad practice, but at - // this point we already have an error, don't need another one - if (threw) - try { this[CLOSE](fd, () => {}) } catch (er) {} +class HydrateCommand extends clipanion__WEBPACK_IMPORTED_MODULE_4__.Command { + constructor() { + super(...arguments); + this.activate = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.Boolean(`--activate`, false, { + description: `If true, this release will become the default one for this package manager`, + }); + this.fileName = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.String(); + } + async execute() { + const installFolder = _folderUtils__WEBPACK_IMPORTED_MODULE_2__.getInstallFolder(); + const fileName = path__WEBPACK_IMPORTED_MODULE_1___default().resolve(this.context.cwd, this.fileName); + const archiveEntries = new Map(); + let hasShortEntries = false; + const { default: tar } = await Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! tar */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/index.js", 19)); + await tar.t({ file: fileName, onentry: entry => { + const segments = entry.header.path.split(/\//g); + if (segments.length < 3) { + hasShortEntries = true; + } + else { + let references = archiveEntries.get(segments[0]); + if (typeof references === `undefined`) + archiveEntries.set(segments[0], references = new Set()); + references.add(segments[1]); + } + } }); + if (hasShortEntries || archiveEntries.size < 1) + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Invalid archive format; did it get generated by 'corepack prepare'?`); + for (const [name, references] of archiveEntries) { + for (const reference of references) { + if (!(0,_types__WEBPACK_IMPORTED_MODULE_3__.isSupportedPackageManager)(name)) + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Unsupported package manager '${name}'`); + if (this.activate) + this.context.stdout.write(`Hydrating ${name}@${reference} for immediate activation...\n`); + else + this.context.stdout.write(`Hydrating ${name}@${reference}...\n`); + // Recreate the folder in case it was deleted somewhere else: + await (0,fs_promises__WEBPACK_IMPORTED_MODULE_0__.mkdir)(installFolder, { recursive: true }); + await tar.x({ file: fileName, cwd: installFolder }, [`${name}/${reference}`]); + if (this.activate) { + await this.context.engine.activatePackageManager({ name, reference }); + } + } + } + this.context.stdout.write(`All done!\n`); } - } - - [CLOSE] (fd, cb) { - fs.closeSync(fd) - cb() - } } +HydrateCommand.paths = [ + [`hydrate`], +]; +HydrateCommand.usage = clipanion__WEBPACK_IMPORTED_MODULE_4__.Command.Usage({ + description: `Import a package manager into the cache`, + details: ` + This command unpacks a package manager archive into the cache. The archive must have been generated by the \`corepack prepare\` command - no other will work. + `, + examples: [[ + `Import a package manager in the cache`, + `$0 hydrate corepack.tgz`, + ]], +}); -const WriteEntryTar = warner(class WriteEntryTar extends MiniPass { - constructor (readEntry, opt) { - opt = opt || {} - super(opt) - this.preservePaths = !!opt.preservePaths - this.portable = !!opt.portable - this.strict = !!opt.strict - this.noPax = !!opt.noPax - this.noMtime = !!opt.noMtime - this.readEntry = readEntry - this.type = readEntry.type - if (this.type === 'Directory' && this.portable) - this.noMtime = true +/***/ }), - this.path = readEntry.path - this.mode = this[MODE](readEntry.mode) - this.uid = this.portable ? null : readEntry.uid - this.gid = this.portable ? null : readEntry.gid - this.uname = this.portable ? null : readEntry.uname - this.gname = this.portable ? null : readEntry.gname - this.size = readEntry.size - this.mtime = this.noMtime ? null : opt.mtime || readEntry.mtime - this.atime = this.portable ? null : readEntry.atime - this.ctime = this.portable ? null : readEntry.ctime - this.linkpath = readEntry.linkpath +/***/ "./sources/commands/Prepare.ts": +/*!*************************************!*\ + !*** ./sources/commands/Prepare.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - if (typeof opt.onwarn === 'function') - this.on('warn', opt.onwarn) +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PrepareCommand": () => (/* binding */ PrepareCommand) +/* harmony export */ }); +/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js"); +/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs/promises */ "fs/promises"); +/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs_promises__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ "path"); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _folderUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../folderUtils */ "./sources/folderUtils.ts"); +/* harmony import */ var _specUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../specUtils */ "./sources/specUtils.ts"); - let pathWarn = false - if (path.isAbsolute(this.path) && !this.preservePaths) { - const parsed = path.parse(this.path) - pathWarn = parsed.root - this.path = this.path.substr(parsed.root.length) - } - this.remain = readEntry.size - this.blockRemain = readEntry.startBlockSize - this.header = new Header({ - path: this.path, - linkpath: this.linkpath, - // only the permissions and setuid/setgid/sticky bitflags - // not the higher-order bits that specify file type - mode: this.mode, - uid: this.portable ? null : this.uid, - gid: this.portable ? null : this.gid, - size: this.size, - mtime: this.noMtime ? null : this.mtime, - type: this.type, - uname: this.portable ? null : this.uname, - atime: this.portable ? null : this.atime, - ctime: this.portable ? null : this.ctime - }) - if (pathWarn) { - this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, { - entry: this, - path: pathWarn + this.path, - }) + +class PrepareCommand extends clipanion__WEBPACK_IMPORTED_MODULE_4__.Command { + constructor() { + super(...arguments); + this.activate = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.Boolean(`--activate`, false, { + description: `If true, this release will become the default one for this package manager`, + }); + this.all = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.Boolean(`--all`, false, { + description: `If true, all available default package managers will be installed`, + }); + this.json = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.Boolean(`--json`, false, { + description: `If true, the output will be the path of the generated tarball`, + }); + this.output = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.String(`-o,--output`, { + description: `If true, the installed package managers will also be stored in a tarball`, + tolerateBoolean: true, + }); + this.specs = clipanion__WEBPACK_IMPORTED_MODULE_4__.Option.Rest(); + } + async execute() { + if (this.all && this.specs.length > 0) + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`The --all option cannot be used along with an explicit package manager specification`); + const specs = this.all + ? await this.context.engine.getDefaultDescriptors() + : this.specs; + const installLocations = []; + if (specs.length === 0) { + const lookup = await _specUtils__WEBPACK_IMPORTED_MODULE_3__.loadSpec(this.context.cwd); + switch (lookup.type) { + case `NoProject`: + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Couldn't find a project in the local directory - please explicit the package manager to pack, or run this command from a valid project`); + case `NoSpec`: + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`The local project doesn't feature a 'packageManager' field - please explicit the package manager to pack, or update the manifest to reference it`); + default: { + specs.push(lookup.spec); + } + } + } + for (const request of specs) { + const spec = typeof request === `string` + ? _specUtils__WEBPACK_IMPORTED_MODULE_3__.parseSpec(request, `CLI arguments`, { enforceExactVersion: false }) + : request; + const resolved = await this.context.engine.resolveDescriptor(spec, { allowTags: true }); + if (resolved === null) + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Failed to successfully resolve '${spec.range}' to a valid ${spec.name} release`); + if (!this.json) { + if (this.activate) { + this.context.stdout.write(`Preparing ${spec.name}@${spec.range} for immediate activation...\n`); + } + else { + this.context.stdout.write(`Preparing ${spec.name}@${spec.range}...\n`); + } + } + const installSpec = await this.context.engine.ensurePackageManager(resolved); + installLocations.push(installSpec.location); + if (this.activate) { + await this.context.engine.activatePackageManager(resolved); + } + } + if (this.output) { + const outputName = typeof this.output === `string` + ? this.output + : `corepack.tgz`; + const baseInstallFolder = _folderUtils__WEBPACK_IMPORTED_MODULE_2__.getInstallFolder(); + const outputPath = path__WEBPACK_IMPORTED_MODULE_1___default().resolve(this.context.cwd, outputName); + if (!this.json) + this.context.stdout.write(`Packing the selected tools in ${path__WEBPACK_IMPORTED_MODULE_1___default().basename(outputPath)}...\n`); + const { default: tar } = await Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! tar */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/index.js", 19)); + // Recreate the folder in case it was deleted somewhere else: + await (0,fs_promises__WEBPACK_IMPORTED_MODULE_0__.mkdir)(baseInstallFolder, { recursive: true }); + await tar.c({ gzip: true, cwd: baseInstallFolder, file: path__WEBPACK_IMPORTED_MODULE_1___default().resolve(outputPath) }, installLocations.map(location => { + return path__WEBPACK_IMPORTED_MODULE_1___default().relative(baseInstallFolder, location); + })); + if (this.json) { + this.context.stdout.write(`${JSON.stringify(outputPath)}\n`); + } + else { + this.context.stdout.write(`All done!\n`); + } + } } +} +PrepareCommand.paths = [ + [`prepare`], +]; +PrepareCommand.usage = clipanion__WEBPACK_IMPORTED_MODULE_4__.Command.Usage({ + description: `Generate a package manager archive`, + details: ` + This command makes sure that the specified package managers are installed in the local cache. Calling this command explicitly unless you operate in an environment without network access (in which case you'd have to call \`prepare\` while building your image, to make sure all tools are available for later use). - if (this.header.encode() && !this.noPax) - super.write(new Pax({ - atime: this.portable ? null : this.atime, - ctime: this.portable ? null : this.ctime, - gid: this.portable ? null : this.gid, - mtime: this.noMtime ? null : this.mtime, - path: this.path, - linkpath: this.linkpath, - size: this.size, - uid: this.portable ? null : this.uid, - uname: this.portable ? null : this.uname, - dev: this.portable ? null : this.readEntry.dev, - ino: this.portable ? null : this.readEntry.ino, - nlink: this.portable ? null : this.readEntry.nlink - }).encode()) + When the \`-o,--output\` flag is set, Corepack will also compress the resulting package manager into a format suitable for \`corepack hydrate\`, and will store it at the specified location on the disk. + `, + examples: [[ + `Prepare the package manager from the active project`, + `$0 prepare`, + ], [ + `Prepare a specific Yarn version`, + `$0 prepare yarn@2.2.2`, + ], [ + `Prepare the latest available pnpm version`, + `$0 prepare pnpm@latest --activate`, + ], [ + `Generate an archive for a specific Yarn version`, + `$0 prepare yarn@2.2.2 -o`, + ], [ + `Generate a named archive`, + `$0 prepare yarn@2.2.2 --output=yarn.tgz`, + ]], +}); - super.write(this.header.block) - readEntry.pipe(this) - } - [MODE] (mode) { - return modeFix(mode, this.type === 'Directory', this.portable) - } +/***/ }), + +/***/ "./sources/corepackUtils.ts": +/*!**********************************!*\ + !*** ./sources/corepackUtils.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - write (data) { - const writeLen = data.length - if (writeLen > this.blockRemain) - throw new Error('writing more to entry than is appropriate') - this.blockRemain -= writeLen - return super.write(data) - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "fetchAvailableTags": () => (/* binding */ fetchAvailableTags), +/* harmony export */ "fetchAvailableVersions": () => (/* binding */ fetchAvailableVersions), +/* harmony export */ "fetchLatestStableVersion": () => (/* binding */ fetchLatestStableVersion), +/* harmony export */ "findInstalledVersion": () => (/* binding */ findInstalledVersion), +/* harmony export */ "installVersion": () => (/* binding */ installVersion), +/* harmony export */ "runVersion": () => (/* binding */ runVersion) +/* harmony export */ }); +/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crypto */ "crypto"); +/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(crypto__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! events */ "events"); +/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(events__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! fs */ "fs"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! path */ "path"); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/index.js"); +/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(semver__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _debugUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./debugUtils */ "./sources/debugUtils.ts"); +/* harmony import */ var _folderUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./folderUtils */ "./sources/folderUtils.ts"); +/* harmony import */ var _fsUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./fsUtils */ "./sources/fsUtils.ts"); +/* harmony import */ var _httpUtils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./httpUtils */ "./sources/httpUtils.ts"); +/* harmony import */ var _nodeUtils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./nodeUtils */ "./sources/nodeUtils.ts"); +/* harmony import */ var _npmRegistryUtils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./npmRegistryUtils */ "./sources/npmRegistryUtils.ts"); +var __asyncValues = (undefined && undefined.__asyncValues) || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +}; - end () { - if (this.blockRemain) - this.write(Buffer.alloc(this.blockRemain)) - return super.end() - } -}) -WriteEntry.Sync = WriteEntrySync -WriteEntry.Tar = WriteEntryTar -const getType = stat => - stat.isFile() ? 'File' - : stat.isDirectory() ? 'Directory' - : stat.isSymbolicLink() ? 'SymbolicLink' - : 'Unsupported' -module.exports = WriteEntry -/***/ }), -/***/ "./.yarn/cache/typanion-npm-3.3.1-ee9997c7cf-212d2beb55.zip/node_modules/typanion/lib/index.js": -/*!*****************************************************************************************************!*\ - !*** ./.yarn/cache/typanion-npm-3.3.1-ee9997c7cf-212d2beb55.zip/node_modules/typanion/lib/index.js ***! - \*****************************************************************************************************/ -/***/ ((__unused_webpack_module, exports) => { -"use strict"; -Object.defineProperty(exports, "__esModule", ({ value: true })); -const simpleKeyRegExp = /^[a-zA-Z_][a-zA-Z0-9_]*$/; -const colorStringRegExp = /^#[0-9a-f]{6}$/i; -const colorStringAlphaRegExp = /^#[0-9a-f]{6}([0-9a-f]{2})?$/i; -// https://stackoverflow.com/a/475217/880703 -const base64RegExp = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; -// https://stackoverflow.com/a/14166194/880703 -const uuid4RegExp = /^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i; -// https://stackoverflow.com/a/28022901/880703 + https://www.debuggex.com/r/bl8J35wMKk48a7u_ -const iso8601RegExp = /^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/; -const makeTrait = (value) => () => { - return value; -}; -function makeValidator({ test }) { - return makeTrait(test)(); -} -function getPrintable(value) { - if (value === null) - return `null`; - if (value === undefined) - return `undefined`; - if (value === ``) - return `an empty string`; - return JSON.stringify(value); -} -function computeKey(state, key) { - var _a, _b, _c; - if (typeof key === `number`) { - return `${(_a = state === null || state === void 0 ? void 0 : state.p) !== null && _a !== void 0 ? _a : `.`}[${key}]`; - } - else if (simpleKeyRegExp.test(key)) { - return `${(_b = state === null || state === void 0 ? void 0 : state.p) !== null && _b !== void 0 ? _b : ``}.${key}`; - } - else { - return `${(_c = state === null || state === void 0 ? void 0 : state.p) !== null && _c !== void 0 ? _c : `.`}[${JSON.stringify(key)}]`; +async function fetchLatestStableVersion(spec) { + switch (spec.type) { + case `npm`: { + return await _npmRegistryUtils__WEBPACK_IMPORTED_MODULE_10__.fetchLatestStableVersion(spec.package); + } + case `url`: { + const data = await _httpUtils__WEBPACK_IMPORTED_MODULE_8__.fetchAsJson(spec.url); + return data[spec.fields.tags].stable; + } + default: { + throw new Error(`Unsupported specification ${JSON.stringify(spec)}`); + } } } -function makeCoercionFn(target, key) { - return (v) => { - const previous = target[key]; - target[key] = v; - return makeCoercionFn(target, key).bind(null, previous); - }; -} -function makeSetter(target, key) { - return (v) => { - target[key] = v; - }; -} -function plural(n, singular, plural) { - return n === 1 ? singular : plural; -} -function pushError({ errors, p } = {}, message) { - errors === null || errors === void 0 ? void 0 : errors.push(`${p !== null && p !== void 0 ? p : `.`}: ${message}`); - return false; -} -const isUnknown = () => makeValidator({ - test: (value, state) => { - return true; - }, -}); -function isLiteral(expected) { - return makeValidator({ - test: (value, state) => { - if (value !== expected) - return pushError(state, `Expected a literal (got ${getPrintable(expected)})`); - return true; - }, - }); -} -const isString = () => makeValidator({ - test: (value, state) => { - if (typeof value !== `string`) - return pushError(state, `Expected a string (got ${getPrintable(value)})`); - return true; - }, -}); -function isEnum(enumSpec) { - const valuesArray = Array.isArray(enumSpec) ? enumSpec : Object.values(enumSpec); - const values = new Set(valuesArray); - return makeValidator({ - test: (value, state) => { - if (!values.has(value)) - return pushError(state, `Expected a valid enumeration value (got ${getPrintable(value)})`); - return true; - }, - }); -} -const BOOLEAN_COERCIONS = new Map([ - [`true`, true], - [`True`, true], - [`1`, true], - [1, true], - [`false`, false], - [`False`, false], - [`0`, false], - [0, false], -]); -const isBoolean = () => makeValidator({ - test: (value, state) => { - var _a; - if (typeof value !== `boolean`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) - return pushError(state, `Unbound coercion result`); - const coercion = BOOLEAN_COERCIONS.get(value); - if (typeof coercion !== `undefined`) { - state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, coercion)]); - return true; - } - } - return pushError(state, `Expected a boolean (got ${getPrintable(value)})`); +async function fetchAvailableTags(spec) { + switch (spec.type) { + case `npm`: { + return await _npmRegistryUtils__WEBPACK_IMPORTED_MODULE_10__.fetchAvailableTags(spec.package); } - return true; - }, -}); -const isNumber = () => makeValidator({ - test: (value, state) => { - var _a; - if (typeof value !== `number`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) - return pushError(state, `Unbound coercion result`); - let coercion; - if (typeof value === `string`) { - let val; - try { - val = JSON.parse(value); - } - catch (_b) { } - // We check against JSON.stringify that the output is the same to ensure that the number can be safely represented in JS - if (typeof val === `number`) { - if (JSON.stringify(val) === value) { - coercion = val; - } - else { - return pushError(state, `Received a number that can't be safely represented by the runtime (${value})`); - } - } - } - if (typeof coercion !== `undefined`) { - state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, coercion)]); - return true; - } - } - return pushError(state, `Expected a number (got ${getPrintable(value)})`); + case `url`: { + const data = await _httpUtils__WEBPACK_IMPORTED_MODULE_8__.fetchAsJson(spec.url); + return data[spec.fields.tags]; } - return true; - }, -}); -const isDate = () => makeValidator({ - test: (value, state) => { - var _a; - if (!(value instanceof Date)) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) - return pushError(state, `Unbound coercion result`); - let coercion; - if (typeof value === `string` && iso8601RegExp.test(value)) { - coercion = new Date(value); - } - else { - let timestamp; - if (typeof value === `string`) { - let val; - try { - val = JSON.parse(value); - } - catch (_b) { } - if (typeof val === `number`) { - timestamp = val; - } - } - else if (typeof value === `number`) { - timestamp = value; - } - if (typeof timestamp !== `undefined`) { - if (Number.isSafeInteger(timestamp) || !Number.isSafeInteger(timestamp * 1000)) { - coercion = new Date(timestamp * 1000); - } - else { - return pushError(state, `Received a timestamp that can't be safely represented by the runtime (${value})`); - } - } - } - if (typeof coercion !== `undefined`) { - state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, coercion)]); - return true; - } - } - return pushError(state, `Expected a date (got ${getPrintable(value)})`); + default: { + throw new Error(`Unsupported specification ${JSON.stringify(spec)}`); } - return true; - }, -}); -const isArray = (spec, { delimiter } = {}) => makeValidator({ - test: (value, state) => { - var _a; - if (typeof value === `string` && typeof delimiter !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) - return pushError(state, `Unbound coercion result`); - value = value.split(delimiter); - state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); - } + } +} +async function fetchAvailableVersions(spec) { + switch (spec.type) { + case `npm`: { + return await _npmRegistryUtils__WEBPACK_IMPORTED_MODULE_10__.fetchAvailableVersions(spec.package); } - if (!Array.isArray(value)) - return pushError(state, `Expected an array (got ${getPrintable(value)})`); - let valid = true; - for (let t = 0, T = value.length; t < T; ++t) { - valid = spec(value[t], Object.assign(Object.assign({}, state), { p: computeKey(state, t), coercion: makeCoercionFn(value, t) })) && valid; - if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { - break; - } + case `url`: { + const data = await _httpUtils__WEBPACK_IMPORTED_MODULE_8__.fetchAsJson(spec.url); + const field = data[spec.fields.versions]; + return Array.isArray(field) ? field : Object.keys(field); } - return valid; - }, -}); -const isTuple = (spec, { delimiter } = {}) => { - const lengthValidator = hasExactLength(spec.length); - return makeValidator({ - test: (value, state) => { - var _a; - if (typeof value === `string` && typeof delimiter !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) - return pushError(state, `Unbound coercion result`); - value = value.split(delimiter); - state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); - } - } - if (!Array.isArray(value)) - return pushError(state, `Expected a tuple (got ${getPrintable(value)})`); - let valid = lengthValidator(value, Object.assign({}, state)); - for (let t = 0, T = value.length; t < T && t < spec.length; ++t) { - valid = spec[t](value[t], Object.assign(Object.assign({}, state), { p: computeKey(state, t), coercion: makeCoercionFn(value, t) })) && valid; - if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { - break; - } - } - return valid; - }, - }); -}; -const isDict = (spec, { keys: keySpec = null, } = {}) => makeValidator({ - test: (value, state) => { - if (typeof value !== `object` || value === null) - return pushError(state, `Expected an object (got ${getPrintable(value)})`); - const keys = Object.keys(value); - let valid = true; - for (let t = 0, T = keys.length; t < T && (valid || (state === null || state === void 0 ? void 0 : state.errors) != null); ++t) { - const key = keys[t]; - const sub = value[key]; - if (key === `__proto__` || key === `constructor`) { - valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Unsafe property name`); - continue; - } - if (keySpec !== null && !keySpec(key, state)) { - valid = false; - continue; - } - if (!spec(sub, Object.assign(Object.assign({}, state), { p: computeKey(state, key), coercion: makeCoercionFn(value, key) }))) { - valid = false; + default: { + throw new Error(`Unsupported specification ${JSON.stringify(spec)}`); + } + } +} +async function findInstalledVersion(installTarget, descriptor) { + var e_1, _a; + const installFolder = path__WEBPACK_IMPORTED_MODULE_3___default().join(installTarget, descriptor.name); + let cacheDirectory; + try { + cacheDirectory = await fs__WEBPACK_IMPORTED_MODULE_2___default().promises.opendir(installFolder); + } + catch (error) { + if (error.code === `ENOENT`) { + return null; + } + else { + throw error; + } + } + const range = new (semver__WEBPACK_IMPORTED_MODULE_4___default().Range)(descriptor.range); + let bestMatch = null; + let maxSV = undefined; + try { + for (var cacheDirectory_1 = __asyncValues(cacheDirectory), cacheDirectory_1_1; cacheDirectory_1_1 = await cacheDirectory_1.next(), !cacheDirectory_1_1.done;) { + const { name } = cacheDirectory_1_1.value; + // Some dot-folders tend to pop inside directories, especially on OSX + if (name.startsWith(`.`)) continue; + // If the dirname correspond to an in-range version and is not lower than + // the previous best match (or if there is not yet a previous best match), + // it's our new best match. + if (range.test(name) && (maxSV === null || maxSV === void 0 ? void 0 : maxSV.compare(name)) !== 1) { + bestMatch = name; + maxSV = new (semver__WEBPACK_IMPORTED_MODULE_4___default().SemVer)(bestMatch); } } - return valid; - }, -}); -const isObject = (props, { extra: extraSpec = null, } = {}) => { - const specKeys = Object.keys(props); - return makeValidator({ - test: (value, state) => { - if (typeof value !== `object` || value === null) - return pushError(state, `Expected an object (got ${getPrintable(value)})`); - const keys = new Set([...specKeys, ...Object.keys(value)]); - const extra = {}; - let valid = true; - for (const key of keys) { - if (key === `constructor` || key === `__proto__`) { - valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Unsafe property name`); - } - else { - const spec = Object.prototype.hasOwnProperty.call(props, key) - ? props[key] - : undefined; - const sub = Object.prototype.hasOwnProperty.call(value, key) - ? value[key] - : undefined; - if (typeof spec !== `undefined`) { - valid = spec(sub, Object.assign(Object.assign({}, state), { p: computeKey(state, key), coercion: makeCoercionFn(value, key) })) && valid; - } - else if (extraSpec === null) { - valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Extraneous property (got ${getPrintable(sub)})`); - } - else { - Object.defineProperty(extra, key, { - enumerable: true, - get: () => sub, - set: makeSetter(value, key) - }); - } - } - if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { - break; - } - } - if (extraSpec !== null && (valid || (state === null || state === void 0 ? void 0 : state.errors) != null)) - valid = extraSpec(extra, state) && valid; - return valid; - }, - }); -}; -const isInstanceOf = (constructor) => makeValidator({ - test: (value, state) => { - if (!(value instanceof constructor)) - return pushError(state, `Expected an instance of ${constructor.name} (got ${getPrintable(value)})`); - return true; - }, -}); -const isOneOf = (specs, { exclusive = false, } = {}) => makeValidator({ - test: (value, state) => { - var _a, _b, _c; - const matches = []; - const errorBuffer = typeof (state === null || state === void 0 ? void 0 : state.errors) !== `undefined` - ? [] : undefined; - for (let t = 0, T = specs.length; t < T; ++t) { - const subErrors = typeof (state === null || state === void 0 ? void 0 : state.errors) !== `undefined` - ? [] : undefined; - const subCoercions = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` - ? [] : undefined; - if (specs[t](value, Object.assign(Object.assign({}, state), { errors: subErrors, coercions: subCoercions, p: `${(_a = state === null || state === void 0 ? void 0 : state.p) !== null && _a !== void 0 ? _a : `.`}#${t + 1}` }))) { - matches.push([`#${t + 1}`, subCoercions]); - if (!exclusive) { - break; - } - } - else { - errorBuffer === null || errorBuffer === void 0 ? void 0 : errorBuffer.push(subErrors[0]); - } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (cacheDirectory_1_1 && !cacheDirectory_1_1.done && (_a = cacheDirectory_1.return)) await _a.call(cacheDirectory_1); } - if (matches.length === 1) { - const [, subCoercions] = matches[0]; - if (typeof subCoercions !== `undefined`) - (_b = state === null || state === void 0 ? void 0 : state.coercions) === null || _b === void 0 ? void 0 : _b.push(...subCoercions); - return true; + finally { if (e_1) throw e_1.error; } + } + return bestMatch; +} +async function installVersion(installTarget, locator, { spec }) { + const { default: tar } = await Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! tar */ "../../../.yarn/berry/cache/tar-npm-6.1.11-e6ac3cba9c-9.zip/node_modules/tar/index.js", 19)); + const { version, build } = semver__WEBPACK_IMPORTED_MODULE_4___default().parse(locator.reference); + const installFolder = path__WEBPACK_IMPORTED_MODULE_3___default().join(installTarget, locator.name, version); + if (fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(installFolder)) { + _debugUtils__WEBPACK_IMPORTED_MODULE_5__.log(`Reusing ${locator.name}@${locator.reference}`); + return installFolder; + } + const url = spec.url.replace(`{}`, version); + // Creating a temporary folder inside the install folder means that we + // are sure it'll be in the same drive as the destination, so we can + // just move it there atomically once we are done + const tmpFolder = _folderUtils__WEBPACK_IMPORTED_MODULE_6__.getTemporaryFolder(installTarget); + _debugUtils__WEBPACK_IMPORTED_MODULE_5__.log(`Installing ${locator.name}@${version} from ${url} to ${tmpFolder}`); + const stream = await _httpUtils__WEBPACK_IMPORTED_MODULE_8__.fetchUrlStream(url); + const parsedUrl = new URL(url); + const ext = path__WEBPACK_IMPORTED_MODULE_3___default().posix.extname(parsedUrl.pathname); + let outputFile = null; + let sendTo; + if (ext === `.tgz`) { + sendTo = tar.x({ strip: 1, cwd: tmpFolder }); + } + else if (ext === `.js`) { + outputFile = path__WEBPACK_IMPORTED_MODULE_3___default().join(tmpFolder, path__WEBPACK_IMPORTED_MODULE_3___default().posix.basename(parsedUrl.pathname)); + sendTo = fs__WEBPACK_IMPORTED_MODULE_2___default().createWriteStream(outputFile); + } + stream.pipe(sendTo); + const hash = build[0] + ? stream.pipe((0,crypto__WEBPACK_IMPORTED_MODULE_0__.createHash)(build[0])) + : null; + await (0,events__WEBPACK_IMPORTED_MODULE_1__.once)(sendTo, `finish`); + const actualHash = hash === null || hash === void 0 ? void 0 : hash.digest(`hex`); + if (actualHash !== build[1]) + throw new Error(`Mismatch hashes. Expected ${build[1]}, got ${actualHash}`); + await fs__WEBPACK_IMPORTED_MODULE_2___default().promises.mkdir(path__WEBPACK_IMPORTED_MODULE_3___default().dirname(installFolder), { recursive: true }); + try { + await fs__WEBPACK_IMPORTED_MODULE_2___default().promises.rename(tmpFolder, installFolder); + } + catch (err) { + if (err.code === `ENOTEMPTY` || + // On Windows the error code is EPERM so we check if it is a directory + (err.code === `EPERM` && (await fs__WEBPACK_IMPORTED_MODULE_2___default().promises.stat(installFolder)).isDirectory())) { + _debugUtils__WEBPACK_IMPORTED_MODULE_5__.log(`Another instance of corepack installed ${locator.name}@${locator.reference}`); + await _fsUtils__WEBPACK_IMPORTED_MODULE_7__.rimraf(tmpFolder); } - if (matches.length > 1) - pushError(state, `Expected to match exactly a single predicate (matched ${matches.join(`, `)})`); - else - (_c = state === null || state === void 0 ? void 0 : state.errors) === null || _c === void 0 ? void 0 : _c.push(...errorBuffer); - return false; - }, -}); -const applyCascade = (spec, followups) => makeValidator({ - test: (value, state) => { - var _a, _b; - const context = { value: value }; - const subCoercion = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` - ? makeCoercionFn(context, `value`) : undefined; - const subCoercions = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` - ? [] : undefined; - if (!spec(value, Object.assign(Object.assign({}, state), { coercion: subCoercion, coercions: subCoercions }))) - return false; - const reverts = []; - if (typeof subCoercions !== `undefined`) - for (const [, coercion] of subCoercions) - reverts.push(coercion()); - try { - if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { - if (context.value !== value) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) - return pushError(state, `Unbound coercion result`); - state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, context.value)]); - } - (_b = state === null || state === void 0 ? void 0 : state.coercions) === null || _b === void 0 ? void 0 : _b.push(...subCoercions); - } - return followups.every(spec => { - return spec(context.value, state); - }); + else { + throw err; } - finally { - for (const revert of reverts) { - revert(); + } + _debugUtils__WEBPACK_IMPORTED_MODULE_5__.log(`Install finished`); + return installFolder; +} +/** + * Loads the binary, taking control of the current process. + */ +async function runVersion(installSpec, binName, args) { + let binPath = null; + if (Array.isArray(installSpec.spec.bin)) { + if (installSpec.spec.bin.some(bin => bin === binName)) { + const parsedUrl = new URL(installSpec.spec.url); + const ext = path__WEBPACK_IMPORTED_MODULE_3___default().posix.extname(parsedUrl.pathname); + if (ext === `.js`) { + binPath = path__WEBPACK_IMPORTED_MODULE_3___default().join(installSpec.location, path__WEBPACK_IMPORTED_MODULE_3___default().posix.basename(parsedUrl.pathname)); } } - }, -}); -const isOptional = (spec) => makeValidator({ - test: (value, state) => { - if (typeof value === `undefined`) - return true; - return spec(value, state); - }, -}); -const isNullable = (spec) => makeValidator({ - test: (value, state) => { - if (value === null) - return true; - return spec(value, state); - }, -}); -const hasMinLength = (length) => makeValidator({ - test: (value, state) => { - if (!(value.length >= length)) - return pushError(state, `Expected to have a length of at least ${length} elements (got ${value.length})`); - return true; - }, -}); -const hasMaxLength = (length) => makeValidator({ - test: (value, state) => { - if (!(value.length <= length)) - return pushError(state, `Expected to have a length of at most ${length} elements (got ${value.length})`); - return true; - }, -}); -const hasExactLength = (length) => makeValidator({ - test: (value, state) => { - if (!(value.length === length)) - return pushError(state, `Expected to have a length of exactly ${length} elements (got ${value.length})`); - return true; - }, -}); -const hasUniqueItems = ({ map, } = {}) => makeValidator({ - test: (value, state) => { - const set = new Set(); - const dup = new Set(); - for (let t = 0, T = value.length; t < T; ++t) { - const sub = value[t]; - const key = typeof map !== `undefined` - ? map(sub) - : sub; - if (set.has(key)) { - if (dup.has(key)) - continue; - pushError(state, `Expected to contain unique elements; got a duplicate with ${getPrintable(value)}`); - dup.add(key); - } - else { - set.add(key); + } + else { + for (const [name, dest] of Object.entries(installSpec.spec.bin)) { + if (name === binName) { + binPath = path__WEBPACK_IMPORTED_MODULE_3___default().join(installSpec.location, dest); + break; } } - return dup.size === 0; - }, -}); -const isNegative = () => makeValidator({ - test: (value, state) => { - if (!(value <= 0)) - return pushError(state, `Expected to be negative (got ${value})`); - return true; - }, -}); -const isPositive = () => makeValidator({ - test: (value, state) => { - if (!(value >= 0)) - return pushError(state, `Expected to be positive (got ${value})`); - return true; - }, -}); -const isAtLeast = (n) => makeValidator({ - test: (value, state) => { - if (!(value >= n)) - return pushError(state, `Expected to be at least ${n} (got ${value})`); - return true; - }, -}); -const isAtMost = (n) => makeValidator({ - test: (value, state) => { - if (!(value <= n)) - return pushError(state, `Expected to be at most ${n} (got ${value})`); - return true; - }, -}); -const isInInclusiveRange = (a, b) => makeValidator({ - test: (value, state) => { - if (!(value >= a && value <= b)) - return pushError(state, `Expected to be in the [${a}; ${b}] range (got ${value})`); - return true; - }, -}); -const isInExclusiveRange = (a, b) => makeValidator({ - test: (value, state) => { - if (!(value >= a && value < b)) - return pushError(state, `Expected to be in the [${a}; ${b}[ range (got ${value})`); - return true; - }, -}); -const isInteger = ({ unsafe = false, } = {}) => makeValidator({ - test: (value, state) => { - if (value !== Math.round(value)) - return pushError(state, `Expected to be an integer (got ${value})`); - if (!Number.isSafeInteger(value)) - return pushError(state, `Expected to be a safe integer (got ${value})`); - return true; - }, -}); -const matchesRegExp = (regExp) => makeValidator({ - test: (value, state) => { - if (!regExp.test(value)) - return pushError(state, `Expected to match the pattern ${regExp.toString()} (got ${getPrintable(value)})`); - return true; - }, -}); -const isLowerCase = () => makeValidator({ - test: (value, state) => { - if (value !== value.toLowerCase()) - return pushError(state, `Expected to be all-lowercase (got ${value})`); - return true; - }, -}); -const isUpperCase = () => makeValidator({ - test: (value, state) => { - if (value !== value.toUpperCase()) - return pushError(state, `Expected to be all-uppercase (got ${value})`); - return true; - }, -}); -const isUUID4 = () => makeValidator({ - test: (value, state) => { - if (!uuid4RegExp.test(value)) - return pushError(state, `Expected to be a valid UUID v4 (got ${getPrintable(value)})`); - return true; - }, -}); -const isISO8601 = () => makeValidator({ - test: (value, state) => { - if (!iso8601RegExp.test(value)) - return pushError(state, `Expected to be a valid ISO 8601 date string (got ${getPrintable(value)})`); - return false; - }, -}); -const isHexColor = ({ alpha = false, }) => makeValidator({ - test: (value, state) => { - const res = alpha - ? colorStringRegExp.test(value) - : colorStringAlphaRegExp.test(value); - if (!res) - return pushError(state, `Expected to be a valid hexadecimal color string (got ${getPrintable(value)})`); - return true; - }, -}); -const isBase64 = () => makeValidator({ - test: (value, state) => { - if (!base64RegExp.test(value)) - return pushError(state, `Expected to be a valid base 64 string (got ${getPrintable(value)})`); - return true; - }, -}); -const isJSON = (spec = isUnknown()) => makeValidator({ - test: (value, state) => { - let data; + } + if (!binPath) + throw new Error(`Assertion failed: Unable to locate path for bin '${binName}'`); + _nodeUtils__WEBPACK_IMPORTED_MODULE_9__.registerV8CompileCache(); + // We load the binary into the current process, + // while making it think it was spawned. + // Non-exhaustive list of requirements: + // - Yarn uses process.argv[1] to determine its own path: https://github.com/yarnpkg/berry/blob/0da258120fc266b06f42aed67e4227e81a2a900f/packages/yarnpkg-cli/sources/main.ts#L80 + // - pnpm uses `require.main == null` to determine its own version: https://github.com/pnpm/pnpm/blob/e2866dee92991e979b2b0e960ddf5a74f6845d90/packages/cli-meta/src/index.ts#L14 + process.env.COREPACK_ROOT = path__WEBPACK_IMPORTED_MODULE_3___default().dirname(eval(`__dirname`)); + process.argv = [ + process.execPath, + binPath, + ...args, + ]; + process.execArgv = []; + return _nodeUtils__WEBPACK_IMPORTED_MODULE_9__.loadMainModule(binPath); +} + + +/***/ }), + +/***/ "./sources/debugUtils.ts": +/*!*******************************!*\ + !*** ./sources/debugUtils.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "log": () => (/* binding */ log) +/* harmony export */ }); +/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! debug */ "./.yarn/__virtual__/debug-virtual-80c19f725b/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/index.js"); +/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_0__); + +const log = debug__WEBPACK_IMPORTED_MODULE_0___default()(`corepack`); + + +/***/ }), + +/***/ "./sources/folderUtils.ts": +/*!********************************!*\ + !*** ./sources/folderUtils.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "getInstallFolder": () => (/* binding */ getInstallFolder), +/* harmony export */ "getTemporaryFolder": () => (/* binding */ getTemporaryFolder) +/* harmony export */ }); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ "fs"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var os__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! os */ "os"); +/* harmony import */ var os__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(os__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! path */ "path"); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var process__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! process */ "process"); +/* harmony import */ var process__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(process__WEBPACK_IMPORTED_MODULE_3__); + + + + +function getInstallFolder() { + var _a, _b, _c, _d, _e; + if ((process__WEBPACK_IMPORTED_MODULE_3___default().env.COREPACK_HOME) == null) { + // TODO: remove this block on the next major. + const oldCorepackDefaultHome = (0,path__WEBPACK_IMPORTED_MODULE_2__.join)((0,os__WEBPACK_IMPORTED_MODULE_1__.homedir)(), `.node`, `corepack`); + const newCorepackDefaultHome = (0,path__WEBPACK_IMPORTED_MODULE_2__.join)((_b = (_a = (process__WEBPACK_IMPORTED_MODULE_3___default().env.XDG_CACHE_HOME)) !== null && _a !== void 0 ? _a : (process__WEBPACK_IMPORTED_MODULE_3___default().env.LOCALAPPDATA)) !== null && _b !== void 0 ? _b : (0,path__WEBPACK_IMPORTED_MODULE_2__.join)((0,os__WEBPACK_IMPORTED_MODULE_1__.homedir)(), (process__WEBPACK_IMPORTED_MODULE_3___default().platform) === `win32` ? `AppData/Local` : `.cache`), `node/corepack`); + if ((0,fs__WEBPACK_IMPORTED_MODULE_0__.existsSync)(oldCorepackDefaultHome) && + !(0,fs__WEBPACK_IMPORTED_MODULE_0__.existsSync)(newCorepackDefaultHome)) { + (0,fs__WEBPACK_IMPORTED_MODULE_0__.mkdirSync)(newCorepackDefaultHome, { recursive: true }); + (0,fs__WEBPACK_IMPORTED_MODULE_0__.renameSync)(oldCorepackDefaultHome, newCorepackDefaultHome); + } + return newCorepackDefaultHome; + } + return ((_c = (process__WEBPACK_IMPORTED_MODULE_3___default().env.COREPACK_HOME)) !== null && _c !== void 0 ? _c : (0,path__WEBPACK_IMPORTED_MODULE_2__.join)((_e = (_d = (process__WEBPACK_IMPORTED_MODULE_3___default().env.XDG_CACHE_HOME)) !== null && _d !== void 0 ? _d : (process__WEBPACK_IMPORTED_MODULE_3___default().env.LOCALAPPDATA)) !== null && _e !== void 0 ? _e : (0,path__WEBPACK_IMPORTED_MODULE_2__.join)((0,os__WEBPACK_IMPORTED_MODULE_1__.homedir)(), (process__WEBPACK_IMPORTED_MODULE_3___default().platform) === `win32` ? `AppData/Local` : `.cache`), `node/corepack`)); +} +function getTemporaryFolder(target = (0,os__WEBPACK_IMPORTED_MODULE_1__.tmpdir)()) { + (0,fs__WEBPACK_IMPORTED_MODULE_0__.mkdirSync)(target, { recursive: true }); + while (true) { + const rnd = Math.random() * 0x100000000; + const hex = rnd.toString(16).padStart(8, `0`); + const path = (0,path__WEBPACK_IMPORTED_MODULE_2__.join)(target, `corepack-${(process__WEBPACK_IMPORTED_MODULE_3___default().pid)}-${hex}`); try { - data = JSON.parse(value); + (0,fs__WEBPACK_IMPORTED_MODULE_0__.mkdirSync)(path); + return path; } - catch (_a) { - return pushError(state, `Expected to be a valid JSON string (got ${getPrintable(value)})`); + catch (error) { + if (error.code === `EEXIST`) { + continue; + } + else { + throw error; + } } - return spec(data, state); - }, -}); -const hasRequiredKeys = (requiredKeys) => { - const requiredSet = new Set(requiredKeys); - return makeValidator({ - test: (value, state) => { - const keys = new Set(Object.keys(value)); - const problems = []; - for (const key of requiredSet) - if (!keys.has(key)) - problems.push(key); - if (problems.length > 0) - return pushError(state, `Missing required ${plural(problems.length, `property`, `properties`)} ${problems.map(name => `"${name}"`).join(`, `)}`); - return true; - }, - }); -}; -const hasForbiddenKeys = (forbiddenKeys) => { - const forbiddenSet = new Set(forbiddenKeys); - return makeValidator({ - test: (value, state) => { - const keys = new Set(Object.keys(value)); - const problems = []; - for (const key of forbiddenSet) - if (keys.has(key)) - problems.push(key); - if (problems.length > 0) - return pushError(state, `Forbidden ${plural(problems.length, `property`, `properties`)} ${problems.map(name => `"${name}"`).join(`, `)}`); - return true; - }, + } +} + + +/***/ }), + +/***/ "./sources/fsUtils.ts": +/*!****************************!*\ + !*** ./sources/fsUtils.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "rimraf": () => (/* binding */ rimraf) +/* harmony export */ }); +/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs/promises */ "fs/promises"); +/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs_promises__WEBPACK_IMPORTED_MODULE_0__); + +async function rimraf(path) { + return (0,fs_promises__WEBPACK_IMPORTED_MODULE_0__.rm)(path, { recursive: true, force: true }); +} + + +/***/ }), + +/***/ "./sources/httpUtils.ts": +/*!******************************!*\ + !*** ./sources/httpUtils.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "fetchAsBuffer": () => (/* binding */ fetchAsBuffer), +/* harmony export */ "fetchAsJson": () => (/* binding */ fetchAsJson), +/* harmony export */ "fetchUrlStream": () => (/* binding */ fetchUrlStream) +/* harmony export */ }); +/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js"); + +async function fetchUrlStream(url, options = {}) { + if (process.env.COREPACK_ENABLE_NETWORK === `0`) + throw new clipanion__WEBPACK_IMPORTED_MODULE_0__.UsageError(`Network access disabled by the environment; can't reach ${url}`); + const { default: https } = await Promise.resolve(/*! import() */).then(__webpack_require__.t.bind(__webpack_require__, /*! https */ "https", 23)); + const { default: ProxyAgent } = await __webpack_require__.e(/*! import() */ "vendors-_yarn_berry_cache_proxy-agent-npm-5_0_0-41772f4b01-9_zip_node_modules_proxy-agent_index_js").then(__webpack_require__.t.bind(__webpack_require__, /*! proxy-agent */ "../../../.yarn/berry/cache/proxy-agent-npm-5.0.0-41772f4b01-9.zip/node_modules/proxy-agent/index.js", 23)); + const proxyAgent = new ProxyAgent(); + return new Promise((resolve, reject) => { + const request = https.get(url, Object.assign(Object.assign({}, options), { agent: proxyAgent }), response => { + var _a; + const statusCode = (_a = response.statusCode) !== null && _a !== void 0 ? _a : 500; + if (!(statusCode >= 200 && statusCode < 300)) + return reject(new Error(`Server answered with HTTP ${statusCode}`)); + return resolve(response); + }); + request.on(`error`, err => { + reject(new Error(`Error when performing the request`)); + }); }); -}; -const hasMutuallyExclusiveKeys = (exclusiveKeys) => { - const exclusiveSet = new Set(exclusiveKeys); - return makeValidator({ - test: (value, state) => { - const keys = new Set(Object.keys(value)); - const used = []; - for (const key of exclusiveSet) - if (keys.has(key)) - used.push(key); - if (used.length > 1) - return pushError(state, `Mutually exclusive properties ${used.map(name => `"${name}"`).join(`, `)}`); - return true; - }, +} +async function fetchAsBuffer(url, options) { + const response = await fetchUrlStream(url, options); + return new Promise((resolve, reject) => { + const chunks = []; + response.on(`data`, chunk => { + chunks.push(chunk); + }); + response.on(`error`, error => { + reject(error); + }); + response.on(`end`, () => { + resolve(Buffer.concat(chunks)); + }); }); -}; -(function (KeyRelationship) { - KeyRelationship["Forbids"] = "Forbids"; - KeyRelationship["Requires"] = "Requires"; -})(exports.KeyRelationship || (exports.KeyRelationship = {})); -const keyRelationships = { - [exports.KeyRelationship.Forbids]: { - expect: false, - message: `forbids using`, - }, - [exports.KeyRelationship.Requires]: { - expect: true, - message: `requires using`, - }, -}; -const hasKeyRelationship = (subject, relationship, others, { ignore = [], } = {}) => { - const skipped = new Set(ignore); - const otherSet = new Set(others); - const spec = keyRelationships[relationship]; - return makeValidator({ - test: (value, state) => { - const keys = new Set(Object.keys(value)); - if (!keys.has(subject) || skipped.has(value[subject])) - return true; - const problems = []; - for (const key of otherSet) - if ((keys.has(key) && !skipped.has(value[key])) !== spec.expect) - problems.push(key); - if (problems.length >= 1) - return pushError(state, `Property "${subject}" ${spec.message} ${plural(problems.length, `property`, `properties`)} ${problems.map(name => `"${name}"`).join(`, `)}`); - return true; - }, +} +async function fetchAsJson(url, options) { + const buffer = await fetchAsBuffer(url, options); + const asText = buffer.toString(); + try { + return JSON.parse(asText); + } + catch (error) { + const truncated = asText.length > 30 + ? `${asText.slice(0, 30)}...` + : asText; + throw new Error(`Couldn't parse JSON data: ${JSON.stringify(truncated)}`); + } +} + + +/***/ }), + +/***/ "./sources/main.ts": +/*!*************************!*\ + !*** ./sources/main.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "runMain": () => (/* binding */ runMain) +/* harmony export */ }); +/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js"); +/* harmony import */ var _Engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Engine */ "./sources/Engine.ts"); +/* harmony import */ var _commands_Disable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./commands/Disable */ "./sources/commands/Disable.ts"); +/* harmony import */ var _commands_Enable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./commands/Enable */ "./sources/commands/Enable.ts"); +/* harmony import */ var _commands_Hydrate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./commands/Hydrate */ "./sources/commands/Hydrate.ts"); +/* harmony import */ var _commands_Prepare__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./commands/Prepare */ "./sources/commands/Prepare.ts"); +/* harmony import */ var _corepackUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./corepackUtils */ "./sources/corepackUtils.ts"); +/* harmony import */ var _miscUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./miscUtils */ "./sources/miscUtils.ts"); +/* harmony import */ var _specUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./specUtils */ "./sources/specUtils.ts"); + + + + + + + + + +function getPackageManagerRequestFromCli(parameter, context) { + if (!parameter) + return null; + const match = parameter.match(/^([^@]*)(?:@(.*))?$/); + if (!match) + return null; + const [, binaryName, binaryVersion] = match; + const packageManager = context.engine.getPackageManagerFor(binaryName); + if (!packageManager) + return null; + return { + packageManager, + binaryName, + binaryVersion: binaryVersion || null, + }; +} +async function executePackageManagerRequest({ packageManager, binaryName, binaryVersion }, args, context) { + var _a; + const defaultVersion = await context.engine.getDefaultVersion(packageManager); + const definition = context.engine.config.definitions[packageManager]; + // If all leading segments match one of the patterns defined in the `transparent` + // key, we tolerate calling this binary even if the local project isn't explicitly + // configured for it, and we use the special default version if requested. + let isTransparentCommand = false; + for (const transparentPath of definition.transparent.commands) { + if (transparentPath[0] === binaryName && transparentPath.slice(1).every((segment, index) => segment === args[index])) { + isTransparentCommand = true; + break; + } + } + const fallbackReference = isTransparentCommand + ? (_a = definition.transparent.default) !== null && _a !== void 0 ? _a : defaultVersion + : defaultVersion; + const fallbackLocator = { + name: packageManager, + reference: fallbackReference, + }; + let descriptor; + try { + descriptor = await _specUtils__WEBPACK_IMPORTED_MODULE_7__.findProjectSpec(context.cwd, fallbackLocator, { transparent: isTransparentCommand }); + } + catch (err) { + if (err instanceof _miscUtils__WEBPACK_IMPORTED_MODULE_6__.Cancellation) { + return 1; + } + else { + throw err; + } + } + if (binaryVersion) + descriptor.range = binaryVersion; + const resolved = await context.engine.resolveDescriptor(descriptor, { allowTags: true }); + if (resolved === null) + throw new clipanion__WEBPACK_IMPORTED_MODULE_8__.UsageError(`Failed to successfully resolve '${descriptor.range}' to a valid ${descriptor.name} release`); + const installSpec = await context.engine.ensurePackageManager(resolved); + return await _corepackUtils__WEBPACK_IMPORTED_MODULE_5__.runVersion(installSpec, binaryName, args); +} +async function main(argv) { + const corepackVersion = (__webpack_require__(/*! ../package.json */ "./package.json").version); + // Because we load the binaries in the same process, we don't support custom contexts. + const context = Object.assign(Object.assign({}, clipanion__WEBPACK_IMPORTED_MODULE_8__.Cli.defaultContext), { cwd: process.cwd(), engine: new _Engine__WEBPACK_IMPORTED_MODULE_0__.Engine() }); + const [firstArg, ...restArgs] = argv; + const request = getPackageManagerRequestFromCli(firstArg, context); + let cli; + if (!request) { + // If the first argument doesn't match any supported package manager, we fallback to the standard Corepack CLI + cli = new clipanion__WEBPACK_IMPORTED_MODULE_8__.Cli({ + binaryLabel: `Corepack`, + binaryName: `corepack`, + binaryVersion: corepackVersion, + }); + cli.register(clipanion__WEBPACK_IMPORTED_MODULE_8__.Builtins.HelpCommand); + cli.register(clipanion__WEBPACK_IMPORTED_MODULE_8__.Builtins.VersionCommand); + cli.register(_commands_Enable__WEBPACK_IMPORTED_MODULE_2__.EnableCommand); + cli.register(_commands_Disable__WEBPACK_IMPORTED_MODULE_1__.DisableCommand); + cli.register(_commands_Hydrate__WEBPACK_IMPORTED_MODULE_3__.HydrateCommand); + cli.register(_commands_Prepare__WEBPACK_IMPORTED_MODULE_4__.PrepareCommand); + return await cli.run(argv, context); + } + else { + // Otherwise, we create a single-command CLI to run the specified package manager (we still use Clipanion in order to pretty-print usage errors). + const cli = new clipanion__WEBPACK_IMPORTED_MODULE_8__.Cli({ + binaryLabel: `'${request.binaryName}', via Corepack`, + binaryName: request.binaryName, + binaryVersion: `corepack/${corepackVersion}`, + }); + cli.register(class BinaryCommand extends clipanion__WEBPACK_IMPORTED_MODULE_8__.Command { + constructor() { + super(...arguments); + this.proxy = clipanion__WEBPACK_IMPORTED_MODULE_8__.Option.Proxy(); + } + async execute() { + return executePackageManagerRequest(request, this.proxy, this.context); + } + }); + return await cli.run(restArgs, context); + } +} +// Important: this is the only function that the corepack binary exports. +function runMain(argv) { + main(argv).then(exitCode => { + process.exitCode = exitCode; + }, err => { + console.error(err.stack); + process.exitCode = 1; }); -}; - -exports.applyCascade = applyCascade; -exports.base64RegExp = base64RegExp; -exports.colorStringAlphaRegExp = colorStringAlphaRegExp; -exports.colorStringRegExp = colorStringRegExp; -exports.computeKey = computeKey; -exports.getPrintable = getPrintable; -exports.hasExactLength = hasExactLength; -exports.hasForbiddenKeys = hasForbiddenKeys; -exports.hasKeyRelationship = hasKeyRelationship; -exports.hasMaxLength = hasMaxLength; -exports.hasMinLength = hasMinLength; -exports.hasMutuallyExclusiveKeys = hasMutuallyExclusiveKeys; -exports.hasRequiredKeys = hasRequiredKeys; -exports.hasUniqueItems = hasUniqueItems; -exports.isArray = isArray; -exports.isAtLeast = isAtLeast; -exports.isAtMost = isAtMost; -exports.isBase64 = isBase64; -exports.isBoolean = isBoolean; -exports.isDate = isDate; -exports.isDict = isDict; -exports.isEnum = isEnum; -exports.isHexColor = isHexColor; -exports.isISO8601 = isISO8601; -exports.isInExclusiveRange = isInExclusiveRange; -exports.isInInclusiveRange = isInInclusiveRange; -exports.isInstanceOf = isInstanceOf; -exports.isInteger = isInteger; -exports.isJSON = isJSON; -exports.isLiteral = isLiteral; -exports.isLowerCase = isLowerCase; -exports.isNegative = isNegative; -exports.isNullable = isNullable; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isOneOf = isOneOf; -exports.isOptional = isOptional; -exports.isPositive = isPositive; -exports.isString = isString; -exports.isTuple = isTuple; -exports.isUUID4 = isUUID4; -exports.isUnknown = isUnknown; -exports.isUpperCase = isUpperCase; -exports.iso8601RegExp = iso8601RegExp; -exports.makeCoercionFn = makeCoercionFn; -exports.makeSetter = makeSetter; -exports.makeTrait = makeTrait; -exports.makeValidator = makeValidator; -exports.matchesRegExp = matchesRegExp; -exports.plural = plural; -exports.pushError = pushError; -exports.simpleKeyRegExp = simpleKeyRegExp; -exports.uuid4RegExp = uuid4RegExp; +} /***/ }), -/***/ "./.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip/node_modules/which/which.js": -/*!*******************************************************************************************!*\ - !*** ./.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip/node_modules/which/which.js ***! - \*******************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "./sources/miscUtils.ts": +/*!******************************!*\ + !*** ./sources/miscUtils.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -const isWindows = process.platform === 'win32' || - process.env.OSTYPE === 'cygwin' || - process.env.OSTYPE === 'msys' +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Cancellation": () => (/* binding */ Cancellation) +/* harmony export */ }); +class Cancellation extends Error { + constructor() { + super(`Cancelled operation`); + } +} -const path = __webpack_require__(/*! path */ "path") -const COLON = isWindows ? ';' : ':' -const isexe = __webpack_require__(/*! isexe */ "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/index.js") -const getNotFoundError = (cmd) => - Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) +/***/ }), -const getPathInfo = (cmd, opt) => { - const colon = opt.colon || COLON +/***/ "./sources/nodeUtils.ts": +/*!******************************!*\ + !*** ./sources/nodeUtils.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - // If it has a slash, then we don't bother searching the pathenv. - // just check the file itself, and that's it. - const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [''] - : ( - [ - // windows always checks the cwd first - ...(isWindows ? [process.cwd()] : []), - ...(opt.path || process.env.PATH || - /* istanbul ignore next: very unusual */ '').split(colon), - ] - ) - const pathExtExe = isWindows - ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM' - : '' - const pathExt = isWindows ? pathExtExe.split(colon) : [''] +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "dynamicRequire": () => (/* binding */ dynamicRequire), +/* harmony export */ "loadMainModule": () => (/* binding */ loadMainModule), +/* harmony export */ "registerV8CompileCache": () => (/* binding */ registerV8CompileCache) +/* harmony export */ }); +/* harmony import */ var module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! module */ "module"); +/* harmony import */ var module__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(module__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ "path"); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); - if (isWindows) { - if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') - pathExt.unshift('') - } - return { - pathEnv, - pathExt, - pathExtExe, - } +const dynamicRequire = typeof require !== `undefined` + ? require + : __webpack_require__("./sources sync recursive"); +function getV8CompileCachePath() { + return typeof require !== `undefined` + ? `./vcc.js` + : `corepack/dist/vcc.js`; +} +function registerV8CompileCache() { + const vccPath = getV8CompileCachePath(); + dynamicRequire(vccPath); +} +/** + * Loads a module as a main module, enabling the `require.main === module` pattern. + */ +function loadMainModule(id) { + const modulePath = module__WEBPACK_IMPORTED_MODULE_0___default()._resolveFilename(id, null, true); + const module = new (module__WEBPACK_IMPORTED_MODULE_0___default())(modulePath, undefined); + module.filename = modulePath; + module.paths = module__WEBPACK_IMPORTED_MODULE_0___default()._nodeModulePaths(path__WEBPACK_IMPORTED_MODULE_1___default().dirname(modulePath)); + (module__WEBPACK_IMPORTED_MODULE_0___default()._cache)[modulePath] = module; + process.mainModule = module; + module.id = `.`; + try { + return module.load(modulePath); + } + catch (error) { + delete (module__WEBPACK_IMPORTED_MODULE_0___default()._cache)[modulePath]; + throw error; + } } -const which = (cmd, opt, cb) => { - if (typeof opt === 'function') { - cb = opt - opt = {} - } - if (!opt) - opt = {} - - const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) - const found = [] - - const step = i => new Promise((resolve, reject) => { - if (i === pathEnv.length) - return opt.all && found.length ? resolve(found) - : reject(getNotFoundError(cmd)) - const ppRaw = pathEnv[i] - const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw +/***/ }), - const pCmd = path.join(pathPart, cmd) - const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd - : pCmd +/***/ "./sources/npmRegistryUtils.ts": +/*!*************************************!*\ + !*** ./sources/npmRegistryUtils.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - resolve(subStep(p, i, 0)) - }) +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DEFAULT_HEADERS": () => (/* binding */ DEFAULT_HEADERS), +/* harmony export */ "DEFAULT_NPM_REGISTRY_URL": () => (/* binding */ DEFAULT_NPM_REGISTRY_URL), +/* harmony export */ "fetchAsJson": () => (/* binding */ fetchAsJson), +/* harmony export */ "fetchAvailableTags": () => (/* binding */ fetchAvailableTags), +/* harmony export */ "fetchAvailableVersions": () => (/* binding */ fetchAvailableVersions), +/* harmony export */ "fetchLatestStableVersion": () => (/* binding */ fetchLatestStableVersion) +/* harmony export */ }); +/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js"); +/* harmony import */ var _httpUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./httpUtils */ "./sources/httpUtils.ts"); - const subStep = (p, i, ii) => new Promise((resolve, reject) => { - if (ii === pathExt.length) - return resolve(step(i + 1)) - const ext = pathExt[ii] - isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { - if (!er && is) { - if (opt.all) - found.push(p + ext) - else - return resolve(p + ext) - } - return resolve(subStep(p, i, ii + 1)) - }) - }) - return cb ? step(0).then(res => cb(null, res), cb) : step(0) +// load abbreviated metadata as that's all we need for these calls +// see: https://github.com/npm/registry/blob/cfe04736f34db9274a780184d1cdb2fb3e4ead2a/docs/responses/package-metadata.md +const DEFAULT_HEADERS = { + [`Accept`]: `application/vnd.npm.install-v1+json`, +}; +const DEFAULT_NPM_REGISTRY_URL = `https://registry.npmjs.org`; +async function fetchAsJson(packageName) { + const npmRegistryUrl = process.env.COREPACK_NPM_REGISTRY || DEFAULT_NPM_REGISTRY_URL; + if (process.env.COREPACK_ENABLE_NETWORK === `0`) + throw new clipanion__WEBPACK_IMPORTED_MODULE_1__.UsageError(`Network access disabled by the environment; can't reach npm repository ${npmRegistryUrl}`); + const headers = Object.assign({}, DEFAULT_HEADERS); + if (`COREPACK_NPM_TOKEN` in process.env) { + headers.authorization = `Bearer ${process.env.COREPACK_NPM_TOKEN}`; + } + else if (`COREPACK_NPM_USERNAME` in process.env + && `COREPACK_NPM_PASSWORD` in process.env) { + const encodedCreds = Buffer.from(`${process.env.COREPACK_NPM_USERNAME}:${process.env.COREPACK_NPM_PASSWORD}`, `utf8`).toString(`base64`); + headers.authorization = `Basic ${encodedCreds}`; + } + return _httpUtils__WEBPACK_IMPORTED_MODULE_0__.fetchAsJson(`${npmRegistryUrl}/${packageName}`, { headers }); +} +async function fetchLatestStableVersion(packageName) { + const metadata = await fetchAsJson(packageName); + const { latest } = metadata[`dist-tags`]; + if (latest === undefined) + throw new Error(`${packageName} does not have a "latest" tag.`); + const { shasum } = metadata.versions[latest].dist; + return `${latest}+sha1.${shasum}`; +} +async function fetchAvailableTags(packageName) { + const metadata = await fetchAsJson(packageName); + return metadata[`dist-tags`]; +} +async function fetchAvailableVersions(packageName) { + const metadata = await fetchAsJson(packageName); + return Object.keys(metadata.versions); } -const whichSync = (cmd, opt) => { - opt = opt || {} - const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) - const found = [] +/***/ }), - for (let i = 0; i < pathEnv.length; i ++) { - const ppRaw = pathEnv[i] - const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw +/***/ "./sources/semverUtils.ts": +/*!********************************!*\ + !*** ./sources/semverUtils.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - const pCmd = path.join(pathPart, cmd) - const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd - : pCmd +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "satisfiesWithPrereleases": () => (/* binding */ satisfiesWithPrereleases) +/* harmony export */ }); +/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/index.js"); +/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(semver__WEBPACK_IMPORTED_MODULE_0__); - for (let j = 0; j < pathExt.length; j ++) { - const cur = p + pathExt[j] - try { - const is = isexe.sync(cur, { pathExt: pathExtExe }) - if (is) { - if (opt.all) - found.push(cur) - else - return cur +/** + * Returns whether the given semver version satisfies the given range. Notably + * this supports prerelease versions so that "2.0.0-rc.0" satisfies the range + * ">=1.0.0", for example. + * + * This function exists because the semver.satisfies method does not include + * pre releases. This means ranges such as * would not satisfy 1.0.0-rc. The + * includePrerelease flag has a weird behavior and cannot be used (if you want + * to try it out, just run the `semverUtils` testsuite using this flag instead + * of our own implementation, and you'll see the failing cases). + * + * See https://github.com/yarnpkg/berry/issues/575 for more context. + */ +function satisfiesWithPrereleases(version, range, loose = false) { + let semverRange; + try { + semverRange = new (semver__WEBPACK_IMPORTED_MODULE_0___default().Range)(range, loose); + } + catch (err) { + return false; + } + if (!version) + return false; + let semverVersion; + try { + semverVersion = new (semver__WEBPACK_IMPORTED_MODULE_0___default().SemVer)(version, semverRange.loose); + if (semverVersion.prerelease) { + semverVersion.prerelease = []; } - } catch (ex) {} } - } - - if (opt.all && found.length) - return found - - if (opt.nothrow) - return null - - throw getNotFoundError(cmd) -} - -module.exports = which -which.sync = whichSync - - -/***/ }), - -/***/ "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/iterator.js": -/*!**************************************************************************************************!*\ - !*** ./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/iterator.js ***! - \**************************************************************************************************/ -/***/ ((module) => { - -"use strict"; - -module.exports = function (Yallist) { - Yallist.prototype[Symbol.iterator] = function* () { - for (let walker = this.head; walker; walker = walker.next) { - yield walker.value + catch (err) { + return false; } - } + // A range has multiple sets of comparators. A version must satisfy all + // comparators in a set and at least one set to satisfy the range. + return semverRange.set.some(comparatorSet => { + for (const comparator of comparatorSet) + if (comparator.semver.prerelease) + comparator.semver.prerelease = []; + return comparatorSet.every(comparator => { + return comparator.test(semverVersion); + }); + }); } /***/ }), -/***/ "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/yallist.js": -/*!*************************************************************************************************!*\ - !*** ./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/yallist.js ***! - \*************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "./sources/specUtils.ts": +/*!******************************!*\ + !*** ./sources/specUtils.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "findProjectSpec": () => (/* binding */ findProjectSpec), +/* harmony export */ "loadSpec": () => (/* binding */ loadSpec), +/* harmony export */ "parseSpec": () => (/* binding */ parseSpec) +/* harmony export */ }); +/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-72ec1bc418/4/.yarn/berry/cache/clipanion-npm-3.1.0-ced87dbbea-9.zip/node_modules/clipanion/lib/advanced/index.js"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ "fs"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ "path"); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! semver */ "../../../.yarn/berry/cache/semver-npm-7.3.7-3bfe704194-9.zip/node_modules/semver/index.js"); +/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(semver__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./types */ "./sources/types.ts"); -module.exports = Yallist -Yallist.Node = Node -Yallist.create = Yallist -function Yallist (list) { - var self = this - if (!(self instanceof Yallist)) { - self = new Yallist() - } - self.tail = null - self.head = null - self.length = 0 - if (list && typeof list.forEach === 'function') { - list.forEach(function (item) { - self.push(item) - }) - } else if (arguments.length > 0) { - for (var i = 0, l = arguments.length; i < l; i++) { - self.push(arguments[i]) +const nodeModulesRegExp = /[\\/]node_modules[\\/](@[^\\/]*[\\/])?([^@\\/][^\\/]*)$/; +function parseSpec(raw, source, { enforceExactVersion = true } = {}) { + if (typeof raw !== `string`) + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Invalid package manager specification in ${source}; expected a string`); + const match = raw.match(/^(?!_)(.+)@(.+)$/); + if (match === null || (enforceExactVersion && !semver__WEBPACK_IMPORTED_MODULE_2___default().valid(match[2]))) + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Invalid package manager specification in ${source}; expected a semver version${enforceExactVersion ? `` : `, range, or tag`}`); + if (!(0,_types__WEBPACK_IMPORTED_MODULE_3__.isSupportedPackageManager)(match[1])) + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Unsupported package manager specification (${match})`); + return { + name: match[1], + range: match[2], + }; +} +/** + * Locates the active project's package manager specification. + * + * If the specification exists but doesn't match the active package manager, + * an error is thrown to prevent users from using the wrong package manager, + * which would lead to inconsistent project layouts. + * + * If the project doesn't include a specification file, we just assume that + * whatever the user uses is exactly what they want to use. Since the version + * isn't explicited, we fallback on known good versions. + * + * Finally, if the project doesn't exist at all, we ask the user whether they + * want to create one in the current project. If they do, we initialize a new + * project using the default package managers, and configure it so that we + * don't need to ask again in the future. + */ +async function findProjectSpec(initialCwd, locator, { transparent = false } = {}) { + // A locator is a valid descriptor (but not the other way around) + const fallbackLocator = { name: locator.name, range: locator.reference }; + if (process.env.COREPACK_ENABLE_PROJECT_SPEC === `0`) + return fallbackLocator; + if (process.env.COREPACK_ENABLE_STRICT === `0`) + transparent = true; + while (true) { + const result = await loadSpec(initialCwd); + switch (result.type) { + case `NoProject`: + case `NoSpec`: + { + return fallbackLocator; + } + break; + case `Found`: + { + if (result.spec.name !== locator.name) { + if (transparent) { + return fallbackLocator; + } + else { + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`This project is configured to use ${result.spec.name}`); + } + } + else { + return result.spec; + } + } + break; + } } - } - - return self } - -Yallist.prototype.removeNode = function (node) { - if (node.list !== this) { - throw new Error('removing node which does not belong to this list') - } - - var next = node.next - var prev = node.prev - - if (next) { - next.prev = prev - } - - if (prev) { - prev.next = next - } - - if (node === this.head) { - this.head = next - } - if (node === this.tail) { - this.tail = prev - } - - node.list.length-- - node.next = null - node.prev = null - node.list = null - - return next +async function loadSpec(initialCwd) { + let nextCwd = initialCwd; + let currCwd = ``; + let selection = null; + while (nextCwd !== currCwd && (!selection || !selection.data.packageManager)) { + currCwd = nextCwd; + nextCwd = path__WEBPACK_IMPORTED_MODULE_1___default().dirname(currCwd); + if (nodeModulesRegExp.test(currCwd)) + continue; + const manifestPath = path__WEBPACK_IMPORTED_MODULE_1___default().join(currCwd, `package.json`); + if (!fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(manifestPath)) + continue; + const content = await fs__WEBPACK_IMPORTED_MODULE_0___default().promises.readFile(manifestPath, `utf8`); + let data; + try { + data = JSON.parse(content); + } + catch (_a) { } + if (typeof data !== `object` || data === null) + throw new clipanion__WEBPACK_IMPORTED_MODULE_4__.UsageError(`Invalid package.json in ${path__WEBPACK_IMPORTED_MODULE_1___default().relative(initialCwd, manifestPath)}`); + selection = { data, manifestPath }; + } + if (selection === null) + return { type: `NoProject`, target: path__WEBPACK_IMPORTED_MODULE_1___default().join(initialCwd, `package.json`) }; + const rawPmSpec = selection.data.packageManager; + if (typeof rawPmSpec === `undefined`) + return { type: `NoSpec`, target: selection.manifestPath }; + return { + type: `Found`, + spec: parseSpec(rawPmSpec, path__WEBPACK_IMPORTED_MODULE_1___default().relative(initialCwd, selection.manifestPath)), + }; } -Yallist.prototype.unshiftNode = function (node) { - if (node === this.head) { - return - } - if (node.list) { - node.list.removeNode(node) - } +/***/ }), - var head = this.head - node.list = this - node.next = head - if (head) { - head.prev = node - } +/***/ "./sources/types.ts": +/*!**************************!*\ + !*** ./sources/types.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - this.head = node - if (!this.tail) { - this.tail = node - } - this.length++ +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SupportedPackageManagerSet": () => (/* binding */ SupportedPackageManagerSet), +/* harmony export */ "SupportedPackageManagerSetWithoutNpm": () => (/* binding */ SupportedPackageManagerSetWithoutNpm), +/* harmony export */ "SupportedPackageManagers": () => (/* binding */ SupportedPackageManagers), +/* harmony export */ "isSupportedPackageManager": () => (/* binding */ isSupportedPackageManager) +/* harmony export */ }); +var SupportedPackageManagers; +(function (SupportedPackageManagers) { + SupportedPackageManagers["Npm"] = "npm"; + SupportedPackageManagers["Pnpm"] = "pnpm"; + SupportedPackageManagers["Yarn"] = "yarn"; +})(SupportedPackageManagers || (SupportedPackageManagers = {})); +const SupportedPackageManagerSet = new Set(Object.values(SupportedPackageManagers)); +const SupportedPackageManagerSetWithoutNpm = new Set(Object.values(SupportedPackageManagers)); +// npm is distributed with Node as a builtin; we don't want Corepack to override it unless the npm team is on board +SupportedPackageManagerSetWithoutNpm.delete(SupportedPackageManagers.Npm); +function isSupportedPackageManager(value) { + return SupportedPackageManagerSet.has(value); } -Yallist.prototype.pushNode = function (node) { - if (node === this.tail) { - return - } - - if (node.list) { - node.list.removeNode(node) - } - var tail = this.tail - node.list = this - node.prev = tail - if (tail) { - tail.next = node - } +/***/ }), - this.tail = node - if (!this.head) { - this.head = node - } - this.length++ -} +/***/ "./sources sync recursive": +/*!***********************!*\ + !*** ./sources/ sync ***! + \***********************/ +/***/ ((module) => { -Yallist.prototype.push = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - push(this, arguments[i]) - } - return this.length +function webpackEmptyContext(req) { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; } +webpackEmptyContext.keys = () => ([]); +webpackEmptyContext.resolve = webpackEmptyContext; +webpackEmptyContext.id = "./sources sync recursive"; +module.exports = webpackEmptyContext; -Yallist.prototype.unshift = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - unshift(this, arguments[i]) - } - return this.length -} +/***/ }), -Yallist.prototype.pop = function () { - if (!this.tail) { - return undefined - } +/***/ "assert": +/*!*************************!*\ + !*** external "assert" ***! + \*************************/ +/***/ ((module) => { - var res = this.tail.value - this.tail = this.tail.prev - if (this.tail) { - this.tail.next = null - } else { - this.head = null - } - this.length-- - return res -} +"use strict"; +module.exports = require("assert"); -Yallist.prototype.shift = function () { - if (!this.head) { - return undefined - } +/***/ }), - var res = this.head.value - this.head = this.head.next - if (this.head) { - this.head.prev = null - } else { - this.tail = null - } - this.length-- - return res -} +/***/ "async_hooks": +/*!******************************!*\ + !*** external "async_hooks" ***! + \******************************/ +/***/ ((module) => { -Yallist.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.head, i = 0; walker !== null; i++) { - fn.call(thisp, walker.value, i, this) - walker = walker.next - } -} +"use strict"; +module.exports = require("async_hooks"); -Yallist.prototype.forEachReverse = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { - fn.call(thisp, walker.value, i, this) - walker = walker.prev - } -} +/***/ }), -Yallist.prototype.get = function (n) { - for (var i = 0, walker = this.head; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.next - } - if (i === n && walker !== null) { - return walker.value - } -} +/***/ "buffer": +/*!*************************!*\ + !*** external "buffer" ***! + \*************************/ +/***/ ((module) => { -Yallist.prototype.getReverse = function (n) { - for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.prev - } - if (i === n && walker !== null) { - return walker.value - } -} +"use strict"; +module.exports = require("buffer"); -Yallist.prototype.map = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.head; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.next - } - return res -} +/***/ }), -Yallist.prototype.mapReverse = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.tail; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.prev - } - return res -} +/***/ "constants": +/*!****************************!*\ + !*** external "constants" ***! + \****************************/ +/***/ ((module) => { -Yallist.prototype.reduce = function (fn, initial) { - var acc - var walker = this.head - if (arguments.length > 1) { - acc = initial - } else if (this.head) { - walker = this.head.next - acc = this.head.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } +"use strict"; +module.exports = require("constants"); - for (var i = 0; walker !== null; i++) { - acc = fn(acc, walker.value, i) - walker = walker.next - } +/***/ }), - return acc -} +/***/ "crypto": +/*!*************************!*\ + !*** external "crypto" ***! + \*************************/ +/***/ ((module) => { -Yallist.prototype.reduceReverse = function (fn, initial) { - var acc - var walker = this.tail - if (arguments.length > 1) { - acc = initial - } else if (this.tail) { - walker = this.tail.prev - acc = this.tail.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } +"use strict"; +module.exports = require("crypto"); - for (var i = this.length - 1; walker !== null; i--) { - acc = fn(acc, walker.value, i) - walker = walker.prev - } +/***/ }), - return acc -} +/***/ "dns": +/*!**********************!*\ + !*** external "dns" ***! + \**********************/ +/***/ ((module) => { -Yallist.prototype.toArray = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.head; walker !== null; i++) { - arr[i] = walker.value - walker = walker.next - } - return arr -} +"use strict"; +module.exports = require("dns"); -Yallist.prototype.toArrayReverse = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.tail; walker !== null; i++) { - arr[i] = walker.value - walker = walker.prev - } - return arr -} +/***/ }), -Yallist.prototype.slice = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = 0, walker = this.head; walker !== null && i < from; i++) { - walker = walker.next - } - for (; walker !== null && i < to; i++, walker = walker.next) { - ret.push(walker.value) - } - return ret -} +/***/ "events": +/*!*************************!*\ + !*** external "events" ***! + \*************************/ +/***/ ((module) => { -Yallist.prototype.sliceReverse = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { - walker = walker.prev - } - for (; walker !== null && i > from; i--, walker = walker.prev) { - ret.push(walker.value) - } - return ret -} +"use strict"; +module.exports = require("events"); + +/***/ }), + +/***/ "fs": +/*!*********************!*\ + !*** external "fs" ***! + \*********************/ +/***/ ((module) => { -Yallist.prototype.splice = function (start, deleteCount, ...nodes) { - if (start > this.length) { - start = this.length - 1 - } - if (start < 0) { - start = this.length + start; - } +"use strict"; +module.exports = require("fs"); - for (var i = 0, walker = this.head; walker !== null && i < start; i++) { - walker = walker.next - } +/***/ }), - var ret = [] - for (var i = 0; walker && i < deleteCount; i++) { - ret.push(walker.value) - walker = this.removeNode(walker) - } - if (walker === null) { - walker = this.tail - } +/***/ "fs/promises": +/*!******************************!*\ + !*** external "fs/promises" ***! + \******************************/ +/***/ ((module) => { - if (walker !== this.head && walker !== this.tail) { - walker = walker.prev - } +"use strict"; +module.exports = require("fs/promises"); - for (var i = 0; i < nodes.length; i++) { - walker = insert(this, walker, nodes[i]) - } - return ret; -} +/***/ }), -Yallist.prototype.reverse = function () { - var head = this.head - var tail = this.tail - for (var walker = head; walker !== null; walker = walker.prev) { - var p = walker.prev - walker.prev = walker.next - walker.next = p - } - this.head = tail - this.tail = head - return this -} +/***/ "http": +/*!***********************!*\ + !*** external "http" ***! + \***********************/ +/***/ ((module) => { -function insert (self, node, value) { - var inserted = node === self.head ? - new Node(value, null, node, self) : - new Node(value, node, node.next, self) +"use strict"; +module.exports = require("http"); - if (inserted.next === null) { - self.tail = inserted - } - if (inserted.prev === null) { - self.head = inserted - } +/***/ }), - self.length++ +/***/ "https": +/*!************************!*\ + !*** external "https" ***! + \************************/ +/***/ ((module) => { - return inserted -} +"use strict"; +module.exports = require("https"); -function push (self, item) { - self.tail = new Node(item, self.tail, null, self) - if (!self.head) { - self.head = self.tail - } - self.length++ -} +/***/ }), -function unshift (self, item) { - self.head = new Node(item, null, self.head, self) - if (!self.tail) { - self.tail = self.head - } - self.length++ -} +/***/ "module": +/*!*************************!*\ + !*** external "module" ***! + \*************************/ +/***/ ((module) => { -function Node (value, prev, next, list) { - if (!(this instanceof Node)) { - return new Node(value, prev, next, list) - } +"use strict"; +module.exports = require("module"); - this.list = list - this.value = value +/***/ }), - if (prev) { - prev.next = this - this.prev = prev - } else { - this.prev = null - } +/***/ "net": +/*!**********************!*\ + !*** external "net" ***! + \**********************/ +/***/ ((module) => { - if (next) { - next.prev = this - this.next = next - } else { - this.next = null - } -} +"use strict"; +module.exports = require("net"); -try { - // add if support for Symbol.iterator is present - __webpack_require__(/*! ./iterator.js */ "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/iterator.js")(Yallist) -} catch (er) {} +/***/ }), +/***/ "node:os": +/*!**************************!*\ + !*** external "node:os" ***! + \**************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("node:os"); /***/ }), -/***/ "./config.json": +/***/ "node:process": +/*!*******************************!*\ + !*** external "node:process" ***! + \*******************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("node:process"); + +/***/ }), + +/***/ "node:tty": +/*!***************************!*\ + !*** external "node:tty" ***! + \***************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("node:tty"); + +/***/ }), + +/***/ "os": /*!*********************!*\ - !*** ./config.json ***! + !*** external "os" ***! \*********************/ /***/ ((module) => { "use strict"; -module.exports = JSON.parse('{"definitions":{"npm":{"default":"7.20.1","transparent":{"commands":[["npm","init"],["npx"]]},"ranges":{"*":{"url":"https://registry.npmjs.org/npm/-/npm-{}.tgz","bin":{"npm":"./bin/npm-cli.js","npx":"./bin/npx-cli.js"},"registry":{"type":"npm","package":"npm"}}}},"pnpm":{"default":"6.11.0","transparent":{"commands":[["pnpm","init"],["pnpx"]]},"ranges":{"<6.0.0":{"url":"https://registry.npmjs.org/pnpm/-/pnpm-{}.tgz","bin":{"pnpm":"./bin/pnpm.js","pnpx":"./bin/pnpx.js"},"registry":{"type":"npm","package":"pnpm"}},">=6.0.0":{"url":"https://registry.npmjs.org/pnpm/-/pnpm-{}.tgz","bin":{"pnpm":"./bin/pnpm.cjs","pnpx":"./bin/pnpx.cjs"},"registry":{"type":"npm","package":"pnpm"}}}},"yarn":{"default":"1.22.15","transparent":{"default":"3.0.0","commands":[["yarn","dlx"]]},"ranges":{"<2.0.0":{"url":"https://registry.yarnpkg.com/yarn/-/yarn-{}.tgz","bin":{"yarn":"./bin/yarn.js","yarnpkg":"./bin/yarn.js"},"registry":{"type":"npm","package":"yarn"}},">=2.0.0":{"name":"yarn","url":"https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js","bin":["yarn","yarnpkg"],"registry":{"type":"url","url":"https://repo.yarnpkg.com/tags","fields":{"tags":"latest","versions":"tags"}}}}}}}'); +module.exports = require("os"); /***/ }), -/***/ "./package.json": -/*!**********************!*\ - !*** ./package.json ***! - \**********************/ +/***/ "path": +/*!***********************!*\ + !*** external "path" ***! + \***********************/ /***/ ((module) => { "use strict"; -module.exports = JSON.parse('{"name":"corepack","version":"0.10.0","homepage":"https://github.com/nodejs/corepack#readme","bugs":{"url":"https://github.com/nodejs/corepack/issues"},"repository":{"type":"git","url":"https://github.com/nodejs/corepack.git"},"license":"MIT","bin":{"corepack":"./dist/corepack.js","pnpm":"./dist/pnpm.js","pnpx":"./dist/pnpx.js","yarn":"./dist/yarn.js","yarnpkg":"./dist/yarnpkg.js"},"packageManager":"yarn@3.0.0","devDependencies":{"@babel/core":"^7.14.3","@babel/plugin-proposal-class-properties":"^7.13.0","@babel/plugin-proposal-decorators":"^7.14.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.10.4","@babel/plugin-transform-modules-commonjs":"^7.14.0","@babel/preset-typescript":"^7.13.0","@types/debug":"^4.1.5","@types/jest":"^26.0.23","@types/node":"^13.9.2","@types/semver":"^7.1.0","@types/tar":"^4.0.3","@types/which":"^1.3.2","@typescript-eslint/eslint-plugin":"^2.0.0","@typescript-eslint/parser":"^4.2.0","@yarnpkg/eslint-config":"^0.1.0","@yarnpkg/fslib":"^2.1.0","@zkochan/cmd-shim":"^5.0.0","babel-plugin-dynamic-import-node":"^2.3.3","clipanion":"^3.0.1","debug":"^4.1.1","eslint":"^7.10.0","eslint-plugin-arca":"^0.9.5","jest":"^26.0.0","nock":"^13.0.4","semver":"^7.1.3","supports-color":"^7.1.0","tar":"^6.0.1","terser-webpack-plugin":"^5.1.2","ts-loader":"^8.0.2","ts-node":"^8.10.2","typescript":"^4.3.2","v8-compile-cache":"^2.3.0","webpack":"^5.38.1","webpack-cli":"^3.3.11","which":"^2.0.2"},"scripts":{"build":"rm -rf dist && webpack && ts-node ./mkshims.ts","corepack":"ts-node ./sources/main.ts","prepack":"node ./.yarn/releases/*.*js build","postpack":"rm -rf dist shims","test":"yarn jest"},"files":["dist","shims","LICENSE.md"],"publishConfig":{"executableFiles":["./dist/npm.js","./dist/npx.js","./dist/pnpm.js","./dist/pnpx.js","./dist/yarn.js","./dist/yarnpkg.js","./dist/corepack.js","./shims/npm","./shims/npm.ps1","./shims/npx","./shims/npx.ps1","./shims/pnpm","./shims/pnpm.ps1","./shims/pnpx","./shims/pnpx.ps1","./shims/yarn","./shims/yarn.ps1","./shims/yarnpkg","./shims/yarnpkg.ps1"]}}'); +module.exports = require("path"); /***/ }), -/***/ "assert": -/*!*************************!*\ - !*** external "assert" ***! - \*************************/ +/***/ "process": +/*!**************************!*\ + !*** external "process" ***! + \**************************/ /***/ ((module) => { "use strict"; -module.exports = require("assert");; +module.exports = require("process"); /***/ }), -/***/ "buffer": +/***/ "stream": /*!*************************!*\ - !*** external "buffer" ***! + !*** external "stream" ***! \*************************/ /***/ ((module) => { "use strict"; -module.exports = require("buffer");; +module.exports = require("stream"); /***/ }), -/***/ "child_process": -/*!********************************!*\ - !*** external "child_process" ***! - \********************************/ +/***/ "string_decoder": +/*!*********************************!*\ + !*** external "string_decoder" ***! + \*********************************/ /***/ ((module) => { "use strict"; -module.exports = require("child_process");; +module.exports = require("string_decoder"); /***/ }), -/***/ "crypto": -/*!*************************!*\ - !*** external "crypto" ***! - \*************************/ +/***/ "tls": +/*!**********************!*\ + !*** external "tls" ***! + \**********************/ /***/ ((module) => { "use strict"; -module.exports = require("crypto");; +module.exports = require("tls"); /***/ }), -/***/ "events": -/*!*************************!*\ - !*** external "events" ***! - \*************************/ +/***/ "tty": +/*!**********************!*\ + !*** external "tty" ***! + \**********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("tty"); + +/***/ }), + +/***/ "url": +/*!**********************!*\ + !*** external "url" ***! + \**********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("url"); + +/***/ }), + +/***/ "util": +/*!***********************!*\ + !*** external "util" ***! + \***********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("util"); + +/***/ }), + +/***/ "zlib": +/*!***********************!*\ + !*** external "zlib" ***! + \***********************/ /***/ ((module) => { -"use strict"; -module.exports = require("events");; +"use strict"; +module.exports = require("zlib"); + +/***/ }), + +/***/ "../../../.yarn/berry/cache/supports-color-npm-9.2.2-d003069e84-9.zip/node_modules/supports-color/index.js": +/*!*****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/supports-color-npm-9.2.2-d003069e84-9.zip/node_modules/supports-color/index.js ***! + \*****************************************************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "createSupportsColor": () => (/* binding */ createSupportsColor), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var node_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:process */ "node:process"); +/* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:os */ "node:os"); +/* harmony import */ var node_tty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:tty */ "node:tty"); + + + + +// From: https://github.com/sindresorhus/has-flag/blob/main/index.js +function hasFlag(flag, argv = node_process__WEBPACK_IMPORTED_MODULE_0__.argv) { + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const position = argv.indexOf(prefix + flag); + const terminatorPosition = argv.indexOf('--'); + return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); +} + +const {env} = node_process__WEBPACK_IMPORTED_MODULE_0__; + +let flagForceColor; +if ( + hasFlag('no-color') + || hasFlag('no-colors') + || hasFlag('color=false') + || hasFlag('color=never') +) { + flagForceColor = 0; +} else if ( + hasFlag('color') + || hasFlag('colors') + || hasFlag('color=true') + || hasFlag('color=always') +) { + flagForceColor = 1; +} + +function envForceColor() { + if ('FORCE_COLOR' in env) { + if (env.FORCE_COLOR === 'true') { + return 1; + } + + if (env.FORCE_COLOR === 'false') { + return 0; + } + + return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3); + } +} + +function translateLevel(level) { + if (level === 0) { + return false; + } + + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3, + }; +} + +function _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) { + const noFlagForceColor = envForceColor(); + if (noFlagForceColor !== undefined) { + flagForceColor = noFlagForceColor; + } + + const forceColor = sniffFlags ? flagForceColor : noFlagForceColor; + + if (forceColor === 0) { + return 0; + } + + if (sniffFlags) { + if (hasFlag('color=16m') + || hasFlag('color=full') + || hasFlag('color=truecolor')) { + return 3; + } -/***/ }), + if (hasFlag('color=256')) { + return 2; + } + } -/***/ "fs": -/*!*********************!*\ - !*** external "fs" ***! - \*********************/ -/***/ ((module) => { + if (haveStream && !streamIsTTY && forceColor === undefined) { + return 0; + } -"use strict"; -module.exports = require("fs");; + const min = forceColor || 0; -/***/ }), + if (env.TERM === 'dumb') { + return min; + } -/***/ "https": -/*!************************!*\ - !*** external "https" ***! - \************************/ -/***/ ((module) => { + if (node_process__WEBPACK_IMPORTED_MODULE_0__.platform === 'win32') { + // Windows 10 build 10586 is the first Windows release that supports 256 colors. + // Windows 10 build 14931 is the first release that supports 16m/TrueColor. + const osRelease = node_os__WEBPACK_IMPORTED_MODULE_1__.release().split('.'); + if ( + Number(osRelease[0]) >= 10 + && Number(osRelease[2]) >= 10_586 + ) { + return Number(osRelease[2]) >= 14_931 ? 3 : 2; + } -"use strict"; -module.exports = require("https");; + return 1; + } -/***/ }), + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } -/***/ "os": -/*!*********************!*\ - !*** external "os" ***! - \*********************/ -/***/ ((module) => { + return min; + } -"use strict"; -module.exports = require("os");; + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } -/***/ }), + // Check for Azure DevOps pipelines + if ('TF_BUILD' in env && 'AGENT_NAME' in env) { + return 1; + } -/***/ "path": -/*!***********************!*\ - !*** external "path" ***! - \***********************/ -/***/ ((module) => { + if (env.COLORTERM === 'truecolor') { + return 3; + } -"use strict"; -module.exports = require("path");; + if ('TERM_PROGRAM' in env) { + const version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); -/***/ }), + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } -/***/ "stream": -/*!*************************!*\ - !*** external "stream" ***! - \*************************/ -/***/ ((module) => { + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } -"use strict"; -module.exports = require("stream");; + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } -/***/ }), + if ('COLORTERM' in env) { + return 1; + } -/***/ "string_decoder": -/*!*********************************!*\ - !*** external "string_decoder" ***! - \*********************************/ -/***/ ((module) => { + return min; +} -"use strict"; -module.exports = require("string_decoder");; +function createSupportsColor(stream, options = {}) { + const level = _supportsColor(stream, { + streamIsTTY: stream && stream.isTTY, + ...options, + }); -/***/ }), + return translateLevel(level); +} -/***/ "tty": -/*!**********************!*\ - !*** external "tty" ***! - \**********************/ -/***/ ((module) => { +const supportsColor = { + stdout: createSupportsColor({isTTY: node_tty__WEBPACK_IMPORTED_MODULE_2__.isatty(1)}), + stderr: createSupportsColor({isTTY: node_tty__WEBPACK_IMPORTED_MODULE_2__.isatty(2)}), +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (supportsColor); -"use strict"; -module.exports = require("tty");; /***/ }), -/***/ "util": -/*!***********************!*\ - !*** external "util" ***! - \***********************/ +/***/ "./config.json": +/*!*********************!*\ + !*** ./config.json ***! + \*********************/ /***/ ((module) => { "use strict"; -module.exports = require("util");; +module.exports = JSON.parse('{"definitions":{"npm":{"default":"8.19.3+sha1.adb51bf8886d519dd4df162726d0ad157ecfa272","fetchLatestFrom":{"type":"npm","package":"npm"},"transparent":{"commands":[["npm","init"],["npx"]]},"ranges":{"*":{"url":"https://registry.npmjs.org/npm/-/npm-{}.tgz","bin":{"npm":"./bin/npm-cli.js","npx":"./bin/npx-cli.js"},"registry":{"type":"npm","package":"npm"}}}},"pnpm":{"default":"7.14.2+sha1.73bf8dbd968bf782db5bbc627d2facc645c6bc4a","fetchLatestFrom":{"type":"npm","package":"pnpm"},"transparent":{"commands":[["pnpm","init"],["pnpx"],["pnpm","dlx"]]},"ranges":{"<6.0.0":{"url":"https://registry.npmjs.org/pnpm/-/pnpm-{}.tgz","bin":{"pnpm":"./bin/pnpm.js","pnpx":"./bin/pnpx.js"},"registry":{"type":"npm","package":"pnpm"}},">=6.0.0":{"url":"https://registry.npmjs.org/pnpm/-/pnpm-{}.tgz","bin":{"pnpm":"./bin/pnpm.cjs","pnpx":"./bin/pnpx.cjs"},"registry":{"type":"npm","package":"pnpm"}}}},"yarn":{"default":"1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447","fetchLatestFrom":{"type":"npm","package":"yarn"},"transparent":{"default":"3.2.4+sha224.e61785c1cff5bae29570238b7718845a9d00788f5b6f32e472c908dc","commands":[["yarn","dlx"]]},"ranges":{"<2.0.0":{"url":"https://registry.yarnpkg.com/yarn/-/yarn-{}.tgz","bin":{"yarn":"./bin/yarn.js","yarnpkg":"./bin/yarn.js"},"registry":{"type":"npm","package":"yarn"}},">=2.0.0":{"name":"yarn","url":"https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js","bin":["yarn","yarnpkg"],"registry":{"type":"url","url":"https://repo.yarnpkg.com/tags","fields":{"tags":"latest","versions":"tags"}}}}}}}'); /***/ }), -/***/ "zlib": -/*!***********************!*\ - !*** external "zlib" ***! - \***********************/ +/***/ "./package.json": +/*!**********************!*\ + !*** ./package.json ***! + \**********************/ /***/ ((module) => { "use strict"; -module.exports = require("zlib");; +module.exports = JSON.parse('{"name":"corepack","version":"0.15.1","homepage":"https://github.com/nodejs/corepack#readme","bugs":{"url":"https://github.com/nodejs/corepack/issues"},"repository":{"type":"git","url":"https://github.com/nodejs/corepack.git"},"license":"MIT","packageManager":"yarn@4.0.0-rc.15+sha224.7fa5c1d1875b041cea8fcbf9a364667e398825364bf5c5c8cd5f6601","devDependencies":{"@babel/core":"^7.14.3","@babel/plugin-transform-modules-commonjs":"^7.14.0","@babel/preset-typescript":"^7.13.0","@types/debug":"^4.1.5","@types/jest":"^29.0.0","@types/node":"^18.0.0","@types/semver":"^7.1.0","@types/tar":"^6.0.0","@types/which":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.0.0","@typescript-eslint/parser":"^5.0.0","@yarnpkg/eslint-config":"^1.0.0-rc.5","@yarnpkg/fslib":"^2.1.0","@zkochan/cmd-shim":"^5.0.0","babel-plugin-dynamic-import-node":"^2.3.3","clipanion":"^3.0.1","debug":"^4.1.1","eslint":"^8.0.0","eslint-plugin-arca":"^0.15.0","jest":"^29.0.0","nock":"^13.0.4","proxy-agent":"^5.0.0","semver":"^7.1.3","supports-color":"^9.0.0","tar":"^6.0.1","terser-webpack-plugin":"^5.1.2","ts-loader":"^9.0.0","ts-node":"^10.0.0","typescript":"^4.3.2","v8-compile-cache":"^2.3.0","webpack":"^5.38.1","webpack-cli":"^4.0.0","which":"^2.0.2"},"scripts":{"build":"rm -rf dist shims && webpack && ts-node ./mkshims.ts","corepack":"ts-node ./sources/_entryPoint.ts","lint":"yarn eslint","prepack":"yarn build","postpack":"rm -rf dist shims","typecheck":"tsc --noEmit","test":"yarn jest"},"files":["dist","shims","LICENSE.md"],"publishConfig":{"bin":{"corepack":"./dist/corepack.js","pnpm":"./dist/pnpm.js","pnpx":"./dist/pnpx.js","yarn":"./dist/yarn.js","yarnpkg":"./dist/yarnpkg.js"},"executableFiles":["./dist/npm.js","./dist/npx.js","./dist/pnpm.js","./dist/pnpx.js","./dist/yarn.js","./dist/yarnpkg.js","./dist/corepack.js","./shims/npm","./shims/npm.ps1","./shims/npx","./shims/npx.ps1","./shims/pnpm","./shims/pnpm.ps1","./shims/pnpx","./shims/pnpx.ps1","./shims/yarn","./shims/yarn.ps1","./shims/yarnpkg","./shims/yarnpkg.ps1"]},"resolutions":{"vm2":"patch:vm2@npm:3.9.9#.yarn/patches/vm2-npm-3.9.9-03fd1f4dc5.patch"}}'); /***/ }) @@ -14636,12 +17134,15 @@ module.exports = require("zlib");; /******/ }; /******/ /******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { @@ -14697,6 +17198,28 @@ module.exports = require("zlib");; /******/ }; /******/ })(); /******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) @@ -14713,148 +17236,67 @@ module.exports = require("zlib");; /******/ }; /******/ })(); /******/ +/******/ /* webpack/runtime/require chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded chunks +/******/ // "1" means "loaded", otherwise not loaded yet +/******/ var installedChunks = { +/******/ "corepack": 1 +/******/ }; +/******/ +/******/ // no on chunks loaded +/******/ +/******/ var installChunk = (chunk) => { +/******/ var moreModules = chunk.modules, chunkIds = chunk.ids, runtime = chunk.runtime; +/******/ for(var moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) runtime(__webpack_require__); +/******/ for(var i = 0; i < chunkIds.length; i++) +/******/ installedChunks[chunkIds[i]] = 1; +/******/ +/******/ }; +/******/ +/******/ // require() chunk loading for javascript +/******/ __webpack_require__.f.require = (chunkId, promises) => { +/******/ // "1" is the signal for "already loaded" +/******/ if(!installedChunks[chunkId]) { +/******/ if(true) { // all chunks have JS +/******/ installChunk(require("./" + __webpack_require__.u(chunkId))); +/******/ } else installedChunks[chunkId] = 1; +/******/ } +/******/ }; +/******/ +/******/ // no external install chunk +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ })(); +/******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be in strict mode. (() => { "use strict"; -/*!*************************!*\ - !*** ./sources/main.ts ***! - \*************************/ +/*!********************************!*\ + !*** ./sources/_entryPoint.ts ***! + \********************************/ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "main": () => (/* binding */ main), -/* harmony export */ "runMain": () => (/* binding */ runMain) +/* harmony export */ "runMain": () => (/* reexport safe */ _main__WEBPACK_IMPORTED_MODULE_0__.runMain) /* harmony export */ }); -/* harmony import */ var clipanion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! clipanion */ "./.yarn/__virtual__/clipanion-virtual-119dc92083/0/cache/clipanion-npm-3.0.1-901533eeed-3a4b0c1e7d.zip/node_modules/clipanion/lib/advanced/index.js"); -/* harmony import */ var _Engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Engine */ "./sources/Engine.ts"); -/* harmony import */ var _commands_Disable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./commands/Disable */ "./sources/commands/Disable.ts"); -/* harmony import */ var _commands_Enable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./commands/Enable */ "./sources/commands/Enable.ts"); -/* harmony import */ var _commands_Hydrate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./commands/Hydrate */ "./sources/commands/Hydrate.ts"); -/* harmony import */ var _commands_Prepare__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./commands/Prepare */ "./sources/commands/Prepare.ts"); -/* harmony import */ var _miscUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./miscUtils */ "./sources/miscUtils.ts"); -/* harmony import */ var _corepackUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./corepackUtils */ "./sources/corepackUtils.ts"); -/* harmony import */ var _specUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./specUtils */ "./sources/specUtils.ts"); +/* harmony import */ var _main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./main */ "./sources/main.ts"); +// Used by the generated shims - - - - - - - -function getPackageManagerRequestFromCli(parameter, context) { - if (!parameter) - return null; - const match = parameter.match(/^([^@]*)(?:@(.*))?$/); - if (!match) - return null; - const [, binaryName, binaryVersion] = match; - const packageManager = context.engine.getPackageManagerFor(binaryName); - if (!packageManager) - return null; - return { - packageManager, - binaryName, - binaryVersion: binaryVersion || null, - }; -} -async function executePackageManagerRequest({ packageManager, binaryName, binaryVersion }, args, context) { - var _a; - const defaultVersion = await context.engine.getDefaultVersion(packageManager); - const definition = context.engine.config.definitions[packageManager]; - // If all leading segments match one of the patterns defined in the `transparent` - // key, we tolerate calling this binary even if the local project isn't explicitly - // configured for it, and we use the special default version if requested. - let isTransparentCommand = false; - for (const transparentPath of definition.transparent.commands) { - if (transparentPath[0] === binaryName && transparentPath.slice(1).every((segment, index) => segment === args[index])) { - isTransparentCommand = true; - break; - } - } - const fallbackReference = isTransparentCommand - ? (_a = definition.transparent.default) !== null && _a !== void 0 ? _a : defaultVersion - : defaultVersion; - const fallbackLocator = { - name: packageManager, - reference: fallbackReference, - }; - let descriptor; - try { - descriptor = await _specUtils__WEBPACK_IMPORTED_MODULE_7__.findProjectSpec(context.cwd, fallbackLocator, { transparent: isTransparentCommand }); - } - catch (err) { - if (err instanceof _miscUtils__WEBPACK_IMPORTED_MODULE_5__.Cancellation) { - return 1; - } - else { - throw err; - } - } - if (binaryVersion) - descriptor.range = binaryVersion; - const resolved = await context.engine.resolveDescriptor(descriptor, { allowTags: true }); - if (resolved === null) - throw new clipanion__WEBPACK_IMPORTED_MODULE_8__.UsageError(`Failed to successfully resolve '${descriptor.range}' to a valid ${descriptor.name} release`); - const installSpec = await context.engine.ensurePackageManager(resolved); - const exitCode = await _corepackUtils__WEBPACK_IMPORTED_MODULE_6__.runVersion(installSpec, resolved, binaryName, args, context); - return exitCode; -} -async function main(argv, context) { - const corepackVersion = __webpack_require__(/*! ../package.json */ "./package.json").version; - const [firstArg, ...restArgs] = argv; - const request = getPackageManagerRequestFromCli(firstArg, context); - let cli; - if (!request) { - // If the first argument doesn't match any supported package manager, we fallback to the standard Corepack CLI - cli = new clipanion__WEBPACK_IMPORTED_MODULE_8__.Cli({ - binaryLabel: `Corepack`, - binaryName: `corepack`, - binaryVersion: corepackVersion, - }); - cli.register(clipanion__WEBPACK_IMPORTED_MODULE_8__.Builtins.HelpCommand); - cli.register(clipanion__WEBPACK_IMPORTED_MODULE_8__.Builtins.VersionCommand); - cli.register(_commands_Enable__WEBPACK_IMPORTED_MODULE_2__.EnableCommand); - cli.register(_commands_Disable__WEBPACK_IMPORTED_MODULE_1__.DisableCommand); - cli.register(_commands_Hydrate__WEBPACK_IMPORTED_MODULE_3__.HydrateCommand); - cli.register(_commands_Prepare__WEBPACK_IMPORTED_MODULE_4__.PrepareCommand); - return await cli.run(argv, Object.assign(Object.assign({}, clipanion__WEBPACK_IMPORTED_MODULE_8__.Cli.defaultContext), context)); - } - else { - // Otherwise, we create a single-command CLI to run the specified package manager (we still use Clipanion in order to pretty-print usage errors). - const cli = new clipanion__WEBPACK_IMPORTED_MODULE_8__.Cli({ - binaryLabel: `'${request.binaryName}', via Corepack`, - binaryName: request.binaryName, - binaryVersion: `corepack/${corepackVersion}`, - }); - cli.register(class BinaryCommand extends clipanion__WEBPACK_IMPORTED_MODULE_8__.Command { - constructor() { - super(...arguments); - this.proxy = clipanion__WEBPACK_IMPORTED_MODULE_8__.Option.Proxy(); - } - async execute() { - return executePackageManagerRequest(request, this.proxy, this.context); - } - }); - return await cli.run(restArgs, Object.assign(Object.assign({}, clipanion__WEBPACK_IMPORTED_MODULE_8__.Cli.defaultContext), context)); - } -} -function runMain(argv) { - main(argv, { - cwd: process.cwd(), - engine: new _Engine__WEBPACK_IMPORTED_MODULE_0__.Engine(), - }).then(exitCode => { - process.exitCode = exitCode; - }, err => { - console.error(err.stack); - process.exitCode = 1; - }); -} // Using `eval` to be sure that Webpack doesn't transform it if (process.mainModule === eval(`module`)) - runMain(process.argv.slice(2)); + (0,_main__WEBPACK_IMPORTED_MODULE_0__.runMain)(process.argv.slice(2)); })(); diff --git a/deps/corepack/dist/vcc.js b/deps/corepack/dist/vcc.js index 69558e7cdd5..2a8c9014b54 100644 --- a/deps/corepack/dist/vcc.js +++ b/deps/corepack/dist/vcc.js @@ -3,10 +3,10 @@ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ -/***/ "./.yarn/cache/v8-compile-cache-npm-2.3.0-961375f150-adb0a271ea.zip/node_modules/v8-compile-cache/v8-compile-cache.js": -/*!****************************************************************************************************************************!*\ - !*** ./.yarn/cache/v8-compile-cache-npm-2.3.0-961375f150-adb0a271ea.zip/node_modules/v8-compile-cache/v8-compile-cache.js ***! - \****************************************************************************************************************************/ +/***/ "../../../.yarn/berry/cache/v8-compile-cache-npm-2.3.0-961375f150-9.zip/node_modules/v8-compile-cache/v8-compile-cache.js": +/*!********************************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/v8-compile-cache-npm-2.3.0-961375f150-9.zip/node_modules/v8-compile-cache/v8-compile-cache.js ***! + \********************************************************************************************************************************/ /***/ (function(module, exports) { 'use strict'; @@ -415,7 +415,7 @@ module.exports.__TEST__ = { /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module doesn't tell about it's top-level declarations so it can't be inlined -/******/ var __webpack_exports__ = __webpack_require__("./.yarn/cache/v8-compile-cache-npm-2.3.0-961375f150-adb0a271ea.zip/node_modules/v8-compile-cache/v8-compile-cache.js"); +/******/ var __webpack_exports__ = __webpack_require__("../../../.yarn/berry/cache/v8-compile-cache-npm-2.3.0-961375f150-9.zip/node_modules/v8-compile-cache/v8-compile-cache.js"); /******/ var __webpack_export_target__ = exports; /******/ for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; /******/ if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); diff --git a/deps/corepack/dist/vendors-_yarn_berry_cache_proxy-agent-npm-5_0_0-41772f4b01-9_zip_node_modules_proxy-agent_index_js.js b/deps/corepack/dist/vendors-_yarn_berry_cache_proxy-agent-npm-5_0_0-41772f4b01-9_zip_node_modules_proxy-agent_index_js.js new file mode 100644 index 00000000000..b2c2dd247a4 --- /dev/null +++ b/deps/corepack/dist/vendors-_yarn_berry_cache_proxy-agent-npm-5_0_0-41772f4b01-9_zip_node_modules_proxy-agent_index_js.js @@ -0,0 +1,41282 @@ +exports.id = "vendors-_yarn_berry_cache_proxy-agent-npm-5_0_0-41772f4b01-9_zip_node_modules_proxy-agent_index_js"; +exports.ids = ["vendors-_yarn_berry_cache_proxy-agent-npm-5_0_0-41772f4b01-9_zip_node_modules_proxy-agent_index_js"]; +exports.modules = { + +/***/ "../../../.yarn/berry/cache/@tootallnate-once-npm-1.1.2-0517220057-9.zip/node_modules/@tootallnate/once/dist/index.js": +/*!****************************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/@tootallnate-once-npm-1.1.2-0517220057-9.zip/node_modules/@tootallnate/once/dist/index.js ***! + \****************************************************************************************************************************/ +/***/ ((module) => { + +"use strict"; + +function noop() { } +function once(emitter, name) { + const o = once.spread(emitter, name); + const r = o.then((args) => args[0]); + r.cancel = o.cancel; + return r; +} +(function (once) { + function spread(emitter, name) { + let c = null; + const p = new Promise((resolve, reject) => { + function cancel() { + emitter.removeListener(name, onEvent); + emitter.removeListener('error', onError); + p.cancel = noop; + } + function onEvent(...args) { + cancel(); + resolve(args); + } + function onError(err) { + cancel(); + reject(err); + } + c = cancel; + emitter.on(name, onEvent); + emitter.on('error', onError); + }); + if (!c) { + throw new TypeError('Could not get `cancel()` function'); + } + p.cancel = c; + return p; + } + once.spread = spread; +})(once || (once = {})); +module.exports = once; +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ "../../../.yarn/berry/cache/agent-base-npm-6.0.2-428f325a93-9.zip/node_modules/agent-base/dist/src/index.js": +/*!******************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/agent-base-npm-6.0.2-428f325a93-9.zip/node_modules/agent-base/dist/src/index.js ***! + \******************************************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +const events_1 = __webpack_require__(/*! events */ "events"); +const debug_1 = __importDefault(__webpack_require__(/*! debug */ "./.yarn/__virtual__/debug-virtual-450dae1bfe/4/.yarn/berry/cache/debug-npm-4.3.4-4513954577-9.zip/node_modules/debug/src/index.js")); +const promisify_1 = __importDefault(__webpack_require__(/*! ./promisify */ "../../../.yarn/berry/cache/agent-base-npm-6.0.2-428f325a93-9.zip/node_modules/agent-base/dist/src/promisify.js")); +const debug = debug_1.default('agent-base'); +function isAgent(v) { + return Boolean(v) && typeof v.addRequest === 'function'; +} +function isSecureEndpoint() { + const { stack } = new Error(); + if (typeof stack !== 'string') + return false; + return stack.split('\n').some(l => l.indexOf('(https.js:') !== -1 || l.indexOf('node:https:') !== -1); +} +function createAgent(callback, opts) { + return new createAgent.Agent(callback, opts); +} +(function (createAgent) { + /** + * Base `http.Agent` implementation. + * No pooling/keep-alive is implemented by default. + * + * @param {Function} callback + * @api public + */ + class Agent extends events_1.EventEmitter { + constructor(callback, _opts) { + super(); + let opts = _opts; + if (typeof callback === 'function') { + this.callback = callback; + } + else if (callback) { + opts = callback; + } + // Timeout for the socket to be returned from the callback + this.timeout = null; + if (opts && typeof opts.timeout === 'number') { + this.timeout = opts.timeout; + } + // These aren't actually used by `agent-base`, but are required + // for the TypeScript definition files in `@types/node` :/ + this.maxFreeSockets = 1; + this.maxSockets = 1; + this.maxTotalSockets = Infinity; + this.sockets = {}; + this.freeSockets = {}; + this.requests = {}; + this.options = {}; + } + get defaultPort() { + if (typeof this.explicitDefaultPort === 'number') { + return this.explicitDefaultPort; + } + return isSecureEndpoint() ? 443 : 80; + } + set defaultPort(v) { + this.explicitDefaultPort = v; + } + get protocol() { + if (typeof this.explicitProtocol === 'string') { + return this.explicitProtocol; + } + return isSecureEndpoint() ? 'https:' : 'http:'; + } + set protocol(v) { + this.explicitProtocol = v; + } + callback(req, opts, fn) { + throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`'); + } + /** + * Called by node-core's "_http_client.js" module when creating + * a new HTTP request with this Agent instance. + * + * @api public + */ + addRequest(req, _opts) { + const opts = Object.assign({}, _opts); + if (typeof opts.secureEndpoint !== 'boolean') { + opts.secureEndpoint = isSecureEndpoint(); + } + if (opts.host == null) { + opts.host = 'localhost'; + } + if (opts.port == null) { + opts.port = opts.secureEndpoint ? 443 : 80; + } + if (opts.protocol == null) { + opts.protocol = opts.secureEndpoint ? 'https:' : 'http:'; + } + if (opts.host && opts.path) { + // If both a `host` and `path` are specified then it's most + // likely the result of a `url.parse()` call... we need to + // remove the `path` portion so that `net.connect()` doesn't + // attempt to open that as a unix socket file. + delete opts.path; + } + delete opts.agent; + delete opts.hostname; + delete opts._defaultAgent; + delete opts.defaultPort; + delete opts.createConnection; + // Hint to use "Connection: close" + // XXX: non-documented `http` module API :( + req._last = true; + req.shouldKeepAlive = false; + let timedOut = false; + let timeoutId = null; + const timeoutMs = opts.timeout || this.timeout; + const onerror = (err) => { + if (req._hadError) + return; + req.emit('error', err); + // For Safety. Some additional errors might fire later on + // and we need to make sure we don't double-fire the error event. + req._hadError = true; + }; + const ontimeout = () => { + timeoutId = null; + timedOut = true; + const err = new Error(`A "socket" was not created for HTTP request before ${timeoutMs}ms`); + err.code = 'ETIMEOUT'; + onerror(err); + }; + const callbackError = (err) => { + if (timedOut) + return; + if (timeoutId !== null) { + clearTimeout(timeoutId); + timeoutId = null; + } + onerror(err); + }; + const onsocket = (socket) => { + if (timedOut) + return; + if (timeoutId != null) { + clearTimeout(timeoutId); + timeoutId = null; + } + if (isAgent(socket)) { + // `socket` is actually an `http.Agent` instance, so + // relinquish responsibility for this `req` to the Agent + // from here on + debug('Callback returned another Agent instance %o', socket.constructor.name); + socket.addRequest(req, opts); + return; + } + if (socket) { + socket.once('free', () => { + this.freeSocket(socket, opts); + }); + req.onSocket(socket); + return; + } + const err = new Error(`no Duplex stream was returned to agent-base for \`${req.method} ${req.path}\``); + onerror(err); + }; + if (typeof this.callback !== 'function') { + onerror(new Error('`callback` is not defined')); + return; + } + if (!this.promisifiedCallback) { + if (this.callback.length >= 3) { + debug('Converting legacy callback function to promise'); + this.promisifiedCallback = promisify_1.default(this.callback); + } + else { + this.promisifiedCallback = this.callback; + } + } + if (typeof timeoutMs === 'number' && timeoutMs > 0) { + timeoutId = setTimeout(ontimeout, timeoutMs); + } + if ('port' in opts && typeof opts.port !== 'number') { + opts.port = Number(opts.port); + } + try { + debug('Resolving socket for %o request: %o', opts.protocol, `${req.method} ${req.path}`); + Promise.resolve(this.promisifiedCallback(req, opts)).then(onsocket, callbackError); + } + catch (err) { + Promise.reject(err).catch(callbackError); + } + } + freeSocket(socket, opts) { + debug('Freeing socket %o %o', socket.constructor.name, opts); + socket.destroy(); + } + destroy() { + debug('Destroying agent %o', this.constructor.name); + } + } + createAgent.Agent = Agent; + // So that `instanceof` works correctly + createAgent.prototype = createAgent.Agent.prototype; +})(createAgent || (createAgent = {})); +module.exports = createAgent; +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ "../../../.yarn/berry/cache/agent-base-npm-6.0.2-428f325a93-9.zip/node_modules/agent-base/dist/src/promisify.js": +/*!**********************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/agent-base-npm-6.0.2-428f325a93-9.zip/node_modules/agent-base/dist/src/promisify.js ***! + \**********************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +function promisify(fn) { + return function (req, opts) { + return new Promise((resolve, reject) => { + fn.call(this, req, opts, (err, rtn) => { + if (err) { + reject(err); + } + else { + resolve(rtn); + } + }); + }); + }; +} +exports["default"] = promisify; +//# sourceMappingURL=promisify.js.map + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/babel-core.js": +/*!*****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/babel-core.js ***! + \*****************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var shared_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/shared */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js")); +var es7_1 = tslib_1.__importDefault(__webpack_require__(/*! ./es7 */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es7.js")); +function default_1(fork) { + fork.use(es7_1.default); + var types = fork.use(types_1.default); + var defaults = fork.use(shared_1.default).defaults; + var def = types.Type.def; + var or = types.Type.or; + def("Noop") + .bases("Statement") + .build(); + def("DoExpression") + .bases("Expression") + .build("body") + .field("body", [def("Statement")]); + def("Super") + .bases("Expression") + .build(); + def("BindExpression") + .bases("Expression") + .build("object", "callee") + .field("object", or(def("Expression"), null)) + .field("callee", def("Expression")); + def("Decorator") + .bases("Node") + .build("expression") + .field("expression", def("Expression")); + def("Property") + .field("decorators", or([def("Decorator")], null), defaults["null"]); + def("MethodDefinition") + .field("decorators", or([def("Decorator")], null), defaults["null"]); + def("MetaProperty") + .bases("Expression") + .build("meta", "property") + .field("meta", def("Identifier")) + .field("property", def("Identifier")); + def("ParenthesizedExpression") + .bases("Expression") + .build("expression") + .field("expression", def("Expression")); + def("ImportSpecifier") + .bases("ModuleSpecifier") + .build("imported", "local") + .field("imported", def("Identifier")); + def("ImportDefaultSpecifier") + .bases("ModuleSpecifier") + .build("local"); + def("ImportNamespaceSpecifier") + .bases("ModuleSpecifier") + .build("local"); + def("ExportDefaultDeclaration") + .bases("Declaration") + .build("declaration") + .field("declaration", or(def("Declaration"), def("Expression"))); + def("ExportNamedDeclaration") + .bases("Declaration") + .build("declaration", "specifiers", "source") + .field("declaration", or(def("Declaration"), null)) + .field("specifiers", [def("ExportSpecifier")], defaults.emptyArray) + .field("source", or(def("Literal"), null), defaults["null"]); + def("ExportSpecifier") + .bases("ModuleSpecifier") + .build("local", "exported") + .field("exported", def("Identifier")); + def("ExportNamespaceSpecifier") + .bases("Specifier") + .build("exported") + .field("exported", def("Identifier")); + def("ExportDefaultSpecifier") + .bases("Specifier") + .build("exported") + .field("exported", def("Identifier")); + def("ExportAllDeclaration") + .bases("Declaration") + .build("exported", "source") + .field("exported", or(def("Identifier"), null)) + .field("source", def("Literal")); + def("CommentBlock") + .bases("Comment") + .build("value", /*optional:*/ "leading", "trailing"); + def("CommentLine") + .bases("Comment") + .build("value", /*optional:*/ "leading", "trailing"); + def("Directive") + .bases("Node") + .build("value") + .field("value", def("DirectiveLiteral")); + def("DirectiveLiteral") + .bases("Node", "Expression") + .build("value") + .field("value", String, defaults["use strict"]); + def("InterpreterDirective") + .bases("Node") + .build("value") + .field("value", String); + def("BlockStatement") + .bases("Statement") + .build("body") + .field("body", [def("Statement")]) + .field("directives", [def("Directive")], defaults.emptyArray); + def("Program") + .bases("Node") + .build("body") + .field("body", [def("Statement")]) + .field("directives", [def("Directive")], defaults.emptyArray) + .field("interpreter", or(def("InterpreterDirective"), null), defaults["null"]); + // Split Literal + def("StringLiteral") + .bases("Literal") + .build("value") + .field("value", String); + def("NumericLiteral") + .bases("Literal") + .build("value") + .field("value", Number) + .field("raw", or(String, null), defaults["null"]) + .field("extra", { + rawValue: Number, + raw: String + }, function getDefault() { + return { + rawValue: this.value, + raw: this.value + "" + }; + }); + def("BigIntLiteral") + .bases("Literal") + .build("value") + // Only String really seems appropriate here, since BigInt values + // often exceed the limits of JS numbers. + .field("value", or(String, Number)) + .field("extra", { + rawValue: String, + raw: String + }, function getDefault() { + return { + rawValue: String(this.value), + raw: this.value + "n" + }; + }); + def("NullLiteral") + .bases("Literal") + .build() + .field("value", null, defaults["null"]); + def("BooleanLiteral") + .bases("Literal") + .build("value") + .field("value", Boolean); + def("RegExpLiteral") + .bases("Literal") + .build("pattern", "flags") + .field("pattern", String) + .field("flags", String) + .field("value", RegExp, function () { + return new RegExp(this.pattern, this.flags); + }); + var ObjectExpressionProperty = or(def("Property"), def("ObjectMethod"), def("ObjectProperty"), def("SpreadProperty"), def("SpreadElement")); + // Split Property -> ObjectProperty and ObjectMethod + def("ObjectExpression") + .bases("Expression") + .build("properties") + .field("properties", [ObjectExpressionProperty]); + // ObjectMethod hoist .value properties to own properties + def("ObjectMethod") + .bases("Node", "Function") + .build("kind", "key", "params", "body", "computed") + .field("kind", or("method", "get", "set")) + .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) + .field("params", [def("Pattern")]) + .field("body", def("BlockStatement")) + .field("computed", Boolean, defaults["false"]) + .field("generator", Boolean, defaults["false"]) + .field("async", Boolean, defaults["false"]) + .field("accessibility", // TypeScript + or(def("Literal"), null), defaults["null"]) + .field("decorators", or([def("Decorator")], null), defaults["null"]); + def("ObjectProperty") + .bases("Node") + .build("key", "value") + .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) + .field("value", or(def("Expression"), def("Pattern"))) + .field("accessibility", // TypeScript + or(def("Literal"), null), defaults["null"]) + .field("computed", Boolean, defaults["false"]); + var ClassBodyElement = or(def("MethodDefinition"), def("VariableDeclarator"), def("ClassPropertyDefinition"), def("ClassProperty"), def("ClassPrivateProperty"), def("ClassMethod"), def("ClassPrivateMethod")); + // MethodDefinition -> ClassMethod + def("ClassBody") + .bases("Declaration") + .build("body") + .field("body", [ClassBodyElement]); + def("ClassMethod") + .bases("Declaration", "Function") + .build("kind", "key", "params", "body", "computed", "static") + .field("key", or(def("Literal"), def("Identifier"), def("Expression"))); + def("ClassPrivateMethod") + .bases("Declaration", "Function") + .build("key", "params", "body", "kind", "computed", "static") + .field("key", def("PrivateName")); + ["ClassMethod", + "ClassPrivateMethod", + ].forEach(function (typeName) { + def(typeName) + .field("kind", or("get", "set", "method", "constructor"), function () { return "method"; }) + .field("body", def("BlockStatement")) + .field("computed", Boolean, defaults["false"]) + .field("static", or(Boolean, null), defaults["null"]) + .field("abstract", or(Boolean, null), defaults["null"]) + .field("access", or("public", "private", "protected", null), defaults["null"]) + .field("accessibility", or("public", "private", "protected", null), defaults["null"]) + .field("decorators", or([def("Decorator")], null), defaults["null"]) + .field("optional", or(Boolean, null), defaults["null"]); + }); + def("ClassPrivateProperty") + .bases("ClassProperty") + .build("key", "value") + .field("key", def("PrivateName")) + .field("value", or(def("Expression"), null), defaults["null"]); + def("PrivateName") + .bases("Expression", "Pattern") + .build("id") + .field("id", def("Identifier")); + var ObjectPatternProperty = or(def("Property"), def("PropertyPattern"), def("SpreadPropertyPattern"), def("SpreadProperty"), // Used by Esprima + def("ObjectProperty"), // Babel 6 + def("RestProperty") // Babel 6 + ); + // Split into RestProperty and SpreadProperty + def("ObjectPattern") + .bases("Pattern") + .build("properties") + .field("properties", [ObjectPatternProperty]) + .field("decorators", or([def("Decorator")], null), defaults["null"]); + def("SpreadProperty") + .bases("Node") + .build("argument") + .field("argument", def("Expression")); + def("RestProperty") + .bases("Node") + .build("argument") + .field("argument", def("Expression")); + def("ForAwaitStatement") + .bases("Statement") + .build("left", "right", "body") + .field("left", or(def("VariableDeclaration"), def("Expression"))) + .field("right", def("Expression")) + .field("body", def("Statement")); + // The callee node of a dynamic import(...) expression. + def("Import") + .bases("Expression") + .build(); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/babel.js": +/*!************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/babel.js ***! + \************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var babel_core_1 = tslib_1.__importDefault(__webpack_require__(/*! ./babel-core */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/babel-core.js")); +var flow_1 = tslib_1.__importDefault(__webpack_require__(/*! ./flow */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/flow.js")); +function default_1(fork) { + fork.use(babel_core_1.default); + fork.use(flow_1.default); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/core.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/core.js ***! + \***********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var shared_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/shared */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js")); +function default_1(fork) { + var types = fork.use(types_1.default); + var Type = types.Type; + var def = Type.def; + var or = Type.or; + var shared = fork.use(shared_1.default); + var defaults = shared.defaults; + var geq = shared.geq; + // Abstract supertype of all syntactic entities that are allowed to have a + // .loc field. + def("Printable") + .field("loc", or(def("SourceLocation"), null), defaults["null"], true); + def("Node") + .bases("Printable") + .field("type", String) + .field("comments", or([def("Comment")], null), defaults["null"], true); + def("SourceLocation") + .field("start", def("Position")) + .field("end", def("Position")) + .field("source", or(String, null), defaults["null"]); + def("Position") + .field("line", geq(1)) + .field("column", geq(0)); + def("File") + .bases("Node") + .build("program", "name") + .field("program", def("Program")) + .field("name", or(String, null), defaults["null"]); + def("Program") + .bases("Node") + .build("body") + .field("body", [def("Statement")]); + def("Function") + .bases("Node") + .field("id", or(def("Identifier"), null), defaults["null"]) + .field("params", [def("Pattern")]) + .field("body", def("BlockStatement")) + .field("generator", Boolean, defaults["false"]) + .field("async", Boolean, defaults["false"]); + def("Statement").bases("Node"); + // The empty .build() here means that an EmptyStatement can be constructed + // (i.e. it's not abstract) but that it needs no arguments. + def("EmptyStatement").bases("Statement").build(); + def("BlockStatement") + .bases("Statement") + .build("body") + .field("body", [def("Statement")]); + // TODO Figure out how to silently coerce Expressions to + // ExpressionStatements where a Statement was expected. + def("ExpressionStatement") + .bases("Statement") + .build("expression") + .field("expression", def("Expression")); + def("IfStatement") + .bases("Statement") + .build("test", "consequent", "alternate") + .field("test", def("Expression")) + .field("consequent", def("Statement")) + .field("alternate", or(def("Statement"), null), defaults["null"]); + def("LabeledStatement") + .bases("Statement") + .build("label", "body") + .field("label", def("Identifier")) + .field("body", def("Statement")); + def("BreakStatement") + .bases("Statement") + .build("label") + .field("label", or(def("Identifier"), null), defaults["null"]); + def("ContinueStatement") + .bases("Statement") + .build("label") + .field("label", or(def("Identifier"), null), defaults["null"]); + def("WithStatement") + .bases("Statement") + .build("object", "body") + .field("object", def("Expression")) + .field("body", def("Statement")); + def("SwitchStatement") + .bases("Statement") + .build("discriminant", "cases", "lexical") + .field("discriminant", def("Expression")) + .field("cases", [def("SwitchCase")]) + .field("lexical", Boolean, defaults["false"]); + def("ReturnStatement") + .bases("Statement") + .build("argument") + .field("argument", or(def("Expression"), null)); + def("ThrowStatement") + .bases("Statement") + .build("argument") + .field("argument", def("Expression")); + def("TryStatement") + .bases("Statement") + .build("block", "handler", "finalizer") + .field("block", def("BlockStatement")) + .field("handler", or(def("CatchClause"), null), function () { + return this.handlers && this.handlers[0] || null; + }) + .field("handlers", [def("CatchClause")], function () { + return this.handler ? [this.handler] : []; + }, true) // Indicates this field is hidden from eachField iteration. + .field("guardedHandlers", [def("CatchClause")], defaults.emptyArray) + .field("finalizer", or(def("BlockStatement"), null), defaults["null"]); + def("CatchClause") + .bases("Node") + .build("param", "guard", "body") + // https://github.com/tc39/proposal-optional-catch-binding + .field("param", or(def("Pattern"), null), defaults["null"]) + .field("guard", or(def("Expression"), null), defaults["null"]) + .field("body", def("BlockStatement")); + def("WhileStatement") + .bases("Statement") + .build("test", "body") + .field("test", def("Expression")) + .field("body", def("Statement")); + def("DoWhileStatement") + .bases("Statement") + .build("body", "test") + .field("body", def("Statement")) + .field("test", def("Expression")); + def("ForStatement") + .bases("Statement") + .build("init", "test", "update", "body") + .field("init", or(def("VariableDeclaration"), def("Expression"), null)) + .field("test", or(def("Expression"), null)) + .field("update", or(def("Expression"), null)) + .field("body", def("Statement")); + def("ForInStatement") + .bases("Statement") + .build("left", "right", "body") + .field("left", or(def("VariableDeclaration"), def("Expression"))) + .field("right", def("Expression")) + .field("body", def("Statement")); + def("DebuggerStatement").bases("Statement").build(); + def("Declaration").bases("Statement"); + def("FunctionDeclaration") + .bases("Function", "Declaration") + .build("id", "params", "body") + .field("id", def("Identifier")); + def("FunctionExpression") + .bases("Function", "Expression") + .build("id", "params", "body"); + def("VariableDeclaration") + .bases("Declaration") + .build("kind", "declarations") + .field("kind", or("var", "let", "const")) + .field("declarations", [def("VariableDeclarator")]); + def("VariableDeclarator") + .bases("Node") + .build("id", "init") + .field("id", def("Pattern")) + .field("init", or(def("Expression"), null), defaults["null"]); + def("Expression").bases("Node"); + def("ThisExpression").bases("Expression").build(); + def("ArrayExpression") + .bases("Expression") + .build("elements") + .field("elements", [or(def("Expression"), null)]); + def("ObjectExpression") + .bases("Expression") + .build("properties") + .field("properties", [def("Property")]); + // TODO Not in the Mozilla Parser API, but used by Esprima. + def("Property") + .bases("Node") // Want to be able to visit Property Nodes. + .build("kind", "key", "value") + .field("kind", or("init", "get", "set")) + .field("key", or(def("Literal"), def("Identifier"))) + .field("value", def("Expression")); + def("SequenceExpression") + .bases("Expression") + .build("expressions") + .field("expressions", [def("Expression")]); + var UnaryOperator = or("-", "+", "!", "~", "typeof", "void", "delete"); + def("UnaryExpression") + .bases("Expression") + .build("operator", "argument", "prefix") + .field("operator", UnaryOperator) + .field("argument", def("Expression")) + // Esprima doesn't bother with this field, presumably because it's + // always true for unary operators. + .field("prefix", Boolean, defaults["true"]); + var BinaryOperator = or("==", "!=", "===", "!==", "<", "<=", ">", ">=", "<<", ">>", ">>>", "+", "-", "*", "/", "%", "**", "&", // TODO Missing from the Parser API. + "|", "^", "in", "instanceof"); + def("BinaryExpression") + .bases("Expression") + .build("operator", "left", "right") + .field("operator", BinaryOperator) + .field("left", def("Expression")) + .field("right", def("Expression")); + var AssignmentOperator = or("=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "|=", "^=", "&="); + def("AssignmentExpression") + .bases("Expression") + .build("operator", "left", "right") + .field("operator", AssignmentOperator) + .field("left", or(def("Pattern"), def("MemberExpression"))) + .field("right", def("Expression")); + var UpdateOperator = or("++", "--"); + def("UpdateExpression") + .bases("Expression") + .build("operator", "argument", "prefix") + .field("operator", UpdateOperator) + .field("argument", def("Expression")) + .field("prefix", Boolean); + var LogicalOperator = or("||", "&&"); + def("LogicalExpression") + .bases("Expression") + .build("operator", "left", "right") + .field("operator", LogicalOperator) + .field("left", def("Expression")) + .field("right", def("Expression")); + def("ConditionalExpression") + .bases("Expression") + .build("test", "consequent", "alternate") + .field("test", def("Expression")) + .field("consequent", def("Expression")) + .field("alternate", def("Expression")); + def("NewExpression") + .bases("Expression") + .build("callee", "arguments") + .field("callee", def("Expression")) + // The Mozilla Parser API gives this type as [or(def("Expression"), + // null)], but null values don't really make sense at the call site. + // TODO Report this nonsense. + .field("arguments", [def("Expression")]); + def("CallExpression") + .bases("Expression") + .build("callee", "arguments") + .field("callee", def("Expression")) + // See comment for NewExpression above. + .field("arguments", [def("Expression")]); + def("MemberExpression") + .bases("Expression") + .build("object", "property", "computed") + .field("object", def("Expression")) + .field("property", or(def("Identifier"), def("Expression"))) + .field("computed", Boolean, function () { + var type = this.property.type; + if (type === 'Literal' || + type === 'MemberExpression' || + type === 'BinaryExpression') { + return true; + } + return false; + }); + def("Pattern").bases("Node"); + def("SwitchCase") + .bases("Node") + .build("test", "consequent") + .field("test", or(def("Expression"), null)) + .field("consequent", [def("Statement")]); + def("Identifier") + .bases("Expression", "Pattern") + .build("name") + .field("name", String) + .field("optional", Boolean, defaults["false"]); + def("Literal") + .bases("Expression") + .build("value") + .field("value", or(String, Boolean, null, Number, RegExp)) + .field("regex", or({ + pattern: String, + flags: String + }, null), function () { + if (this.value instanceof RegExp) { + var flags = ""; + if (this.value.ignoreCase) + flags += "i"; + if (this.value.multiline) + flags += "m"; + if (this.value.global) + flags += "g"; + return { + pattern: this.value.source, + flags: flags + }; + } + return null; + }); + // Abstract (non-buildable) comment supertype. Not a Node. + def("Comment") + .bases("Printable") + .field("value", String) + // A .leading comment comes before the node, whereas a .trailing + // comment comes after it. These two fields should not both be true, + // but they might both be false when the comment falls inside a node + // and the node has no children for the comment to lead or trail, + // e.g. { /*dangling*/ }. + .field("leading", Boolean, defaults["true"]) + .field("trailing", Boolean, defaults["false"]); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es-proposals.js": +/*!*******************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es-proposals.js ***! + \*******************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var shared_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/shared */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js")); +var core_1 = tslib_1.__importDefault(__webpack_require__(/*! ./core */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/core.js")); +function default_1(fork) { + fork.use(core_1.default); + var types = fork.use(types_1.default); + var Type = types.Type; + var def = types.Type.def; + var or = Type.or; + var shared = fork.use(shared_1.default); + var defaults = shared.defaults; + // https://github.com/tc39/proposal-optional-chaining + // `a?.b` as per https://github.com/estree/estree/issues/146 + def("OptionalMemberExpression") + .bases("MemberExpression") + .build("object", "property", "computed", "optional") + .field("optional", Boolean, defaults["true"]); + // a?.b() + def("OptionalCallExpression") + .bases("CallExpression") + .build("callee", "arguments", "optional") + .field("optional", Boolean, defaults["true"]); + // https://github.com/tc39/proposal-nullish-coalescing + // `a ?? b` as per https://github.com/babel/babylon/pull/761/files + var LogicalOperator = or("||", "&&", "??"); + def("LogicalExpression") + .field("operator", LogicalOperator); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es2020.js": +/*!*************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es2020.js ***! + \*************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var es7_1 = tslib_1.__importDefault(__webpack_require__(/*! ./es7 */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es7.js")); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +function default_1(fork) { + fork.use(es7_1.default); + var types = fork.use(types_1.default); + var def = types.Type.def; + def("ImportExpression") + .bases("Expression") + .build("source") + .field("source", def("Expression")); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es6.js": +/*!**********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es6.js ***! + \**********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var core_1 = tslib_1.__importDefault(__webpack_require__(/*! ./core */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/core.js")); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var shared_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/shared */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js")); +function default_1(fork) { + fork.use(core_1.default); + var types = fork.use(types_1.default); + var def = types.Type.def; + var or = types.Type.or; + var defaults = fork.use(shared_1.default).defaults; + def("Function") + .field("generator", Boolean, defaults["false"]) + .field("expression", Boolean, defaults["false"]) + .field("defaults", [or(def("Expression"), null)], defaults.emptyArray) + // TODO This could be represented as a RestElement in .params. + .field("rest", or(def("Identifier"), null), defaults["null"]); + // The ESTree way of representing a ...rest parameter. + def("RestElement") + .bases("Pattern") + .build("argument") + .field("argument", def("Pattern")) + .field("typeAnnotation", // for Babylon. Flow parser puts it on the identifier + or(def("TypeAnnotation"), def("TSTypeAnnotation"), null), defaults["null"]); + def("SpreadElementPattern") + .bases("Pattern") + .build("argument") + .field("argument", def("Pattern")); + def("FunctionDeclaration") + .build("id", "params", "body", "generator", "expression"); + def("FunctionExpression") + .build("id", "params", "body", "generator", "expression"); + // The Parser API calls this ArrowExpression, but Esprima and all other + // actual parsers use ArrowFunctionExpression. + def("ArrowFunctionExpression") + .bases("Function", "Expression") + .build("params", "body", "expression") + // The forced null value here is compatible with the overridden + // definition of the "id" field in the Function interface. + .field("id", null, defaults["null"]) + // Arrow function bodies are allowed to be expressions. + .field("body", or(def("BlockStatement"), def("Expression"))) + // The current spec forbids arrow generators, so I have taken the + // liberty of enforcing that. TODO Report this. + .field("generator", false, defaults["false"]); + def("ForOfStatement") + .bases("Statement") + .build("left", "right", "body") + .field("left", or(def("VariableDeclaration"), def("Pattern"))) + .field("right", def("Expression")) + .field("body", def("Statement")); + def("YieldExpression") + .bases("Expression") + .build("argument", "delegate") + .field("argument", or(def("Expression"), null)) + .field("delegate", Boolean, defaults["false"]); + def("GeneratorExpression") + .bases("Expression") + .build("body", "blocks", "filter") + .field("body", def("Expression")) + .field("blocks", [def("ComprehensionBlock")]) + .field("filter", or(def("Expression"), null)); + def("ComprehensionExpression") + .bases("Expression") + .build("body", "blocks", "filter") + .field("body", def("Expression")) + .field("blocks", [def("ComprehensionBlock")]) + .field("filter", or(def("Expression"), null)); + def("ComprehensionBlock") + .bases("Node") + .build("left", "right", "each") + .field("left", def("Pattern")) + .field("right", def("Expression")) + .field("each", Boolean); + def("Property") + .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) + .field("value", or(def("Expression"), def("Pattern"))) + .field("method", Boolean, defaults["false"]) + .field("shorthand", Boolean, defaults["false"]) + .field("computed", Boolean, defaults["false"]); + def("ObjectProperty") + .field("shorthand", Boolean, defaults["false"]); + def("PropertyPattern") + .bases("Pattern") + .build("key", "pattern") + .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) + .field("pattern", def("Pattern")) + .field("computed", Boolean, defaults["false"]); + def("ObjectPattern") + .bases("Pattern") + .build("properties") + .field("properties", [or(def("PropertyPattern"), def("Property"))]); + def("ArrayPattern") + .bases("Pattern") + .build("elements") + .field("elements", [or(def("Pattern"), null)]); + def("MethodDefinition") + .bases("Declaration") + .build("kind", "key", "value", "static") + .field("kind", or("constructor", "method", "get", "set")) + .field("key", def("Expression")) + .field("value", def("Function")) + .field("computed", Boolean, defaults["false"]) + .field("static", Boolean, defaults["false"]); + def("SpreadElement") + .bases("Node") + .build("argument") + .field("argument", def("Expression")); + def("ArrayExpression") + .field("elements", [or(def("Expression"), def("SpreadElement"), def("RestElement"), null)]); + def("NewExpression") + .field("arguments", [or(def("Expression"), def("SpreadElement"))]); + def("CallExpression") + .field("arguments", [or(def("Expression"), def("SpreadElement"))]); + // Note: this node type is *not* an AssignmentExpression with a Pattern on + // the left-hand side! The existing AssignmentExpression type already + // supports destructuring assignments. AssignmentPattern nodes may appear + // wherever a Pattern is allowed, and the right-hand side represents a + // default value to be destructured against the left-hand side, if no + // value is otherwise provided. For example: default parameter values. + def("AssignmentPattern") + .bases("Pattern") + .build("left", "right") + .field("left", def("Pattern")) + .field("right", def("Expression")); + var ClassBodyElement = or(def("MethodDefinition"), def("VariableDeclarator"), def("ClassPropertyDefinition"), def("ClassProperty")); + def("ClassProperty") + .bases("Declaration") + .build("key") + .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) + .field("computed", Boolean, defaults["false"]); + def("ClassPropertyDefinition") // static property + .bases("Declaration") + .build("definition") + // Yes, Virginia, circular definitions are permitted. + .field("definition", ClassBodyElement); + def("ClassBody") + .bases("Declaration") + .build("body") + .field("body", [ClassBodyElement]); + def("ClassDeclaration") + .bases("Declaration") + .build("id", "body", "superClass") + .field("id", or(def("Identifier"), null)) + .field("body", def("ClassBody")) + .field("superClass", or(def("Expression"), null), defaults["null"]); + def("ClassExpression") + .bases("Expression") + .build("id", "body", "superClass") + .field("id", or(def("Identifier"), null), defaults["null"]) + .field("body", def("ClassBody")) + .field("superClass", or(def("Expression"), null), defaults["null"]); + // Specifier and ModuleSpecifier are abstract non-standard types + // introduced for definitional convenience. + def("Specifier").bases("Node"); + // This supertype is shared/abused by both def/babel.js and + // def/esprima.js. In the future, it will be possible to load only one set + // of definitions appropriate for a given parser, but until then we must + // rely on default functions to reconcile the conflicting AST formats. + def("ModuleSpecifier") + .bases("Specifier") + // This local field is used by Babel/Acorn. It should not technically + // be optional in the Babel/Acorn AST format, but it must be optional + // in the Esprima AST format. + .field("local", or(def("Identifier"), null), defaults["null"]) + // The id and name fields are used by Esprima. The id field should not + // technically be optional in the Esprima AST format, but it must be + // optional in the Babel/Acorn AST format. + .field("id", or(def("Identifier"), null), defaults["null"]) + .field("name", or(def("Identifier"), null), defaults["null"]); + // Like ModuleSpecifier, except type:"ImportSpecifier" and buildable. + // import {} from ...; + def("ImportSpecifier") + .bases("ModuleSpecifier") + .build("id", "name"); + // import <* as id> from ...; + def("ImportNamespaceSpecifier") + .bases("ModuleSpecifier") + .build("id"); + // import from ...; + def("ImportDefaultSpecifier") + .bases("ModuleSpecifier") + .build("id"); + def("ImportDeclaration") + .bases("Declaration") + .build("specifiers", "source", "importKind") + .field("specifiers", [or(def("ImportSpecifier"), def("ImportNamespaceSpecifier"), def("ImportDefaultSpecifier"))], defaults.emptyArray) + .field("source", def("Literal")) + .field("importKind", or("value", "type"), function () { + return "value"; + }); + def("TaggedTemplateExpression") + .bases("Expression") + .build("tag", "quasi") + .field("tag", def("Expression")) + .field("quasi", def("TemplateLiteral")); + def("TemplateLiteral") + .bases("Expression") + .build("quasis", "expressions") + .field("quasis", [def("TemplateElement")]) + .field("expressions", [def("Expression")]); + def("TemplateElement") + .bases("Node") + .build("value", "tail") + .field("value", { "cooked": String, "raw": String }) + .field("tail", Boolean); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es7.js": +/*!**********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es7.js ***! + \**********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var es6_1 = tslib_1.__importDefault(__webpack_require__(/*! ./es6 */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es6.js")); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var shared_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/shared */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js")); +function default_1(fork) { + fork.use(es6_1.default); + var types = fork.use(types_1.default); + var def = types.Type.def; + var or = types.Type.or; + var defaults = fork.use(shared_1.default).defaults; + def("Function") + .field("async", Boolean, defaults["false"]); + def("SpreadProperty") + .bases("Node") + .build("argument") + .field("argument", def("Expression")); + def("ObjectExpression") + .field("properties", [or(def("Property"), def("SpreadProperty"), def("SpreadElement"))]); + def("SpreadPropertyPattern") + .bases("Pattern") + .build("argument") + .field("argument", def("Pattern")); + def("ObjectPattern") + .field("properties", [or(def("Property"), def("PropertyPattern"), def("SpreadPropertyPattern"))]); + def("AwaitExpression") + .bases("Expression") + .build("argument", "all") + .field("argument", or(def("Expression"), null)) + .field("all", Boolean, defaults["false"]); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/esprima.js": +/*!**************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/esprima.js ***! + \**************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var es7_1 = tslib_1.__importDefault(__webpack_require__(/*! ./es7 */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es7.js")); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var shared_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/shared */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js")); +function default_1(fork) { + fork.use(es7_1.default); + var types = fork.use(types_1.default); + var defaults = fork.use(shared_1.default).defaults; + var def = types.Type.def; + var or = types.Type.or; + def("VariableDeclaration") + .field("declarations", [or(def("VariableDeclarator"), def("Identifier") // Esprima deviation. + )]); + def("Property") + .field("value", or(def("Expression"), def("Pattern") // Esprima deviation. + )); + def("ArrayPattern") + .field("elements", [or(def("Pattern"), def("SpreadElement"), null)]); + def("ObjectPattern") + .field("properties", [or(def("Property"), def("PropertyPattern"), def("SpreadPropertyPattern"), def("SpreadProperty") // Used by Esprima. + )]); + // Like ModuleSpecifier, except type:"ExportSpecifier" and buildable. + // export {} [from ...]; + def("ExportSpecifier") + .bases("ModuleSpecifier") + .build("id", "name"); + // export <*> from ...; + def("ExportBatchSpecifier") + .bases("Specifier") + .build(); + def("ExportDeclaration") + .bases("Declaration") + .build("default", "declaration", "specifiers", "source") + .field("default", Boolean) + .field("declaration", or(def("Declaration"), def("Expression"), // Implies default. + null)) + .field("specifiers", [or(def("ExportSpecifier"), def("ExportBatchSpecifier"))], defaults.emptyArray) + .field("source", or(def("Literal"), null), defaults["null"]); + def("Block") + .bases("Comment") + .build("value", /*optional:*/ "leading", "trailing"); + def("Line") + .bases("Comment") + .build("value", /*optional:*/ "leading", "trailing"); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/flow.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/flow.js ***! + \***********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var es7_1 = tslib_1.__importDefault(__webpack_require__(/*! ./es7 */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es7.js")); +var type_annotations_1 = tslib_1.__importDefault(__webpack_require__(/*! ./type-annotations */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/type-annotations.js")); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var shared_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/shared */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js")); +function default_1(fork) { + fork.use(es7_1.default); + fork.use(type_annotations_1.default); + var types = fork.use(types_1.default); + var def = types.Type.def; + var or = types.Type.or; + var defaults = fork.use(shared_1.default).defaults; + // Base types + def("Flow").bases("Node"); + def("FlowType").bases("Flow"); + // Type annotations + def("AnyTypeAnnotation") + .bases("FlowType") + .build(); + def("EmptyTypeAnnotation") + .bases("FlowType") + .build(); + def("MixedTypeAnnotation") + .bases("FlowType") + .build(); + def("VoidTypeAnnotation") + .bases("FlowType") + .build(); + def("NumberTypeAnnotation") + .bases("FlowType") + .build(); + def("NumberLiteralTypeAnnotation") + .bases("FlowType") + .build("value", "raw") + .field("value", Number) + .field("raw", String); + // Babylon 6 differs in AST from Flow + // same as NumberLiteralTypeAnnotation + def("NumericLiteralTypeAnnotation") + .bases("FlowType") + .build("value", "raw") + .field("value", Number) + .field("raw", String); + def("StringTypeAnnotation") + .bases("FlowType") + .build(); + def("StringLiteralTypeAnnotation") + .bases("FlowType") + .build("value", "raw") + .field("value", String) + .field("raw", String); + def("BooleanTypeAnnotation") + .bases("FlowType") + .build(); + def("BooleanLiteralTypeAnnotation") + .bases("FlowType") + .build("value", "raw") + .field("value", Boolean) + .field("raw", String); + def("TypeAnnotation") + .bases("Node") + .build("typeAnnotation") + .field("typeAnnotation", def("FlowType")); + def("NullableTypeAnnotation") + .bases("FlowType") + .build("typeAnnotation") + .field("typeAnnotation", def("FlowType")); + def("NullLiteralTypeAnnotation") + .bases("FlowType") + .build(); + def("NullTypeAnnotation") + .bases("FlowType") + .build(); + def("ThisTypeAnnotation") + .bases("FlowType") + .build(); + def("ExistsTypeAnnotation") + .bases("FlowType") + .build(); + def("ExistentialTypeParam") + .bases("FlowType") + .build(); + def("FunctionTypeAnnotation") + .bases("FlowType") + .build("params", "returnType", "rest", "typeParameters") + .field("params", [def("FunctionTypeParam")]) + .field("returnType", def("FlowType")) + .field("rest", or(def("FunctionTypeParam"), null)) + .field("typeParameters", or(def("TypeParameterDeclaration"), null)); + def("FunctionTypeParam") + .bases("Node") + .build("name", "typeAnnotation", "optional") + .field("name", def("Identifier")) + .field("typeAnnotation", def("FlowType")) + .field("optional", Boolean); + def("ArrayTypeAnnotation") + .bases("FlowType") + .build("elementType") + .field("elementType", def("FlowType")); + def("ObjectTypeAnnotation") + .bases("FlowType") + .build("properties", "indexers", "callProperties") + .field("properties", [ + or(def("ObjectTypeProperty"), def("ObjectTypeSpreadProperty")) + ]) + .field("indexers", [def("ObjectTypeIndexer")], defaults.emptyArray) + .field("callProperties", [def("ObjectTypeCallProperty")], defaults.emptyArray) + .field("inexact", or(Boolean, void 0), defaults["undefined"]) + .field("exact", Boolean, defaults["false"]) + .field("internalSlots", [def("ObjectTypeInternalSlot")], defaults.emptyArray); + def("Variance") + .bases("Node") + .build("kind") + .field("kind", or("plus", "minus")); + var LegacyVariance = or(def("Variance"), "plus", "minus", null); + def("ObjectTypeProperty") + .bases("Node") + .build("key", "value", "optional") + .field("key", or(def("Literal"), def("Identifier"))) + .field("value", def("FlowType")) + .field("optional", Boolean) + .field("variance", LegacyVariance, defaults["null"]); + def("ObjectTypeIndexer") + .bases("Node") + .build("id", "key", "value") + .field("id", def("Identifier")) + .field("key", def("FlowType")) + .field("value", def("FlowType")) + .field("variance", LegacyVariance, defaults["null"]); + def("ObjectTypeCallProperty") + .bases("Node") + .build("value") + .field("value", def("FunctionTypeAnnotation")) + .field("static", Boolean, defaults["false"]); + def("QualifiedTypeIdentifier") + .bases("Node") + .build("qualification", "id") + .field("qualification", or(def("Identifier"), def("QualifiedTypeIdentifier"))) + .field("id", def("Identifier")); + def("GenericTypeAnnotation") + .bases("FlowType") + .build("id", "typeParameters") + .field("id", or(def("Identifier"), def("QualifiedTypeIdentifier"))) + .field("typeParameters", or(def("TypeParameterInstantiation"), null)); + def("MemberTypeAnnotation") + .bases("FlowType") + .build("object", "property") + .field("object", def("Identifier")) + .field("property", or(def("MemberTypeAnnotation"), def("GenericTypeAnnotation"))); + def("UnionTypeAnnotation") + .bases("FlowType") + .build("types") + .field("types", [def("FlowType")]); + def("IntersectionTypeAnnotation") + .bases("FlowType") + .build("types") + .field("types", [def("FlowType")]); + def("TypeofTypeAnnotation") + .bases("FlowType") + .build("argument") + .field("argument", def("FlowType")); + def("ObjectTypeSpreadProperty") + .bases("Node") + .build("argument") + .field("argument", def("FlowType")); + def("ObjectTypeInternalSlot") + .bases("Node") + .build("id", "value", "optional", "static", "method") + .field("id", def("Identifier")) + .field("value", def("FlowType")) + .field("optional", Boolean) + .field("static", Boolean) + .field("method", Boolean); + def("TypeParameterDeclaration") + .bases("Node") + .build("params") + .field("params", [def("TypeParameter")]); + def("TypeParameterInstantiation") + .bases("Node") + .build("params") + .field("params", [def("FlowType")]); + def("TypeParameter") + .bases("FlowType") + .build("name", "variance", "bound") + .field("name", String) + .field("variance", LegacyVariance, defaults["null"]) + .field("bound", or(def("TypeAnnotation"), null), defaults["null"]); + def("ClassProperty") + .field("variance", LegacyVariance, defaults["null"]); + def("ClassImplements") + .bases("Node") + .build("id") + .field("id", def("Identifier")) + .field("superClass", or(def("Expression"), null), defaults["null"]) + .field("typeParameters", or(def("TypeParameterInstantiation"), null), defaults["null"]); + def("InterfaceTypeAnnotation") + .bases("FlowType") + .build("body", "extends") + .field("body", def("ObjectTypeAnnotation")) + .field("extends", or([def("InterfaceExtends")], null), defaults["null"]); + def("InterfaceDeclaration") + .bases("Declaration") + .build("id", "body", "extends") + .field("id", def("Identifier")) + .field("typeParameters", or(def("TypeParameterDeclaration"), null), defaults["null"]) + .field("body", def("ObjectTypeAnnotation")) + .field("extends", [def("InterfaceExtends")]); + def("DeclareInterface") + .bases("InterfaceDeclaration") + .build("id", "body", "extends"); + def("InterfaceExtends") + .bases("Node") + .build("id") + .field("id", def("Identifier")) + .field("typeParameters", or(def("TypeParameterInstantiation"), null), defaults["null"]); + def("TypeAlias") + .bases("Declaration") + .build("id", "typeParameters", "right") + .field("id", def("Identifier")) + .field("typeParameters", or(def("TypeParameterDeclaration"), null)) + .field("right", def("FlowType")); + def("OpaqueType") + .bases("Declaration") + .build("id", "typeParameters", "impltype", "supertype") + .field("id", def("Identifier")) + .field("typeParameters", or(def("TypeParameterDeclaration"), null)) + .field("impltype", def("FlowType")) + .field("supertype", def("FlowType")); + def("DeclareTypeAlias") + .bases("TypeAlias") + .build("id", "typeParameters", "right"); + def("DeclareOpaqueType") + .bases("TypeAlias") + .build("id", "typeParameters", "supertype"); + def("TypeCastExpression") + .bases("Expression") + .build("expression", "typeAnnotation") + .field("expression", def("Expression")) + .field("typeAnnotation", def("TypeAnnotation")); + def("TupleTypeAnnotation") + .bases("FlowType") + .build("types") + .field("types", [def("FlowType")]); + def("DeclareVariable") + .bases("Statement") + .build("id") + .field("id", def("Identifier")); + def("DeclareFunction") + .bases("Statement") + .build("id") + .field("id", def("Identifier")); + def("DeclareClass") + .bases("InterfaceDeclaration") + .build("id"); + def("DeclareModule") + .bases("Statement") + .build("id", "body") + .field("id", or(def("Identifier"), def("Literal"))) + .field("body", def("BlockStatement")); + def("DeclareModuleExports") + .bases("Statement") + .build("typeAnnotation") + .field("typeAnnotation", def("TypeAnnotation")); + def("DeclareExportDeclaration") + .bases("Declaration") + .build("default", "declaration", "specifiers", "source") + .field("default", Boolean) + .field("declaration", or(def("DeclareVariable"), def("DeclareFunction"), def("DeclareClass"), def("FlowType"), // Implies default. + null)) + .field("specifiers", [or(def("ExportSpecifier"), def("ExportBatchSpecifier"))], defaults.emptyArray) + .field("source", or(def("Literal"), null), defaults["null"]); + def("DeclareExportAllDeclaration") + .bases("Declaration") + .build("source") + .field("source", or(def("Literal"), null), defaults["null"]); + def("FlowPredicate").bases("Flow"); + def("InferredPredicate") + .bases("FlowPredicate") + .build(); + def("DeclaredPredicate") + .bases("FlowPredicate") + .build("value") + .field("value", def("Expression")); + def("CallExpression") + .field("typeArguments", or(null, def("TypeParameterInstantiation")), defaults["null"]); + def("NewExpression") + .field("typeArguments", or(null, def("TypeParameterInstantiation")), defaults["null"]); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/jsx.js": +/*!**********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/jsx.js ***! + \**********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var es7_1 = tslib_1.__importDefault(__webpack_require__(/*! ./es7 */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es7.js")); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var shared_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/shared */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js")); +function default_1(fork) { + fork.use(es7_1.default); + var types = fork.use(types_1.default); + var def = types.Type.def; + var or = types.Type.or; + var defaults = fork.use(shared_1.default).defaults; + def("JSXAttribute") + .bases("Node") + .build("name", "value") + .field("name", or(def("JSXIdentifier"), def("JSXNamespacedName"))) + .field("value", or(def("Literal"), // attr="value" + def("JSXExpressionContainer"), // attr={value} + null // attr= or just attr + ), defaults["null"]); + def("JSXIdentifier") + .bases("Identifier") + .build("name") + .field("name", String); + def("JSXNamespacedName") + .bases("Node") + .build("namespace", "name") + .field("namespace", def("JSXIdentifier")) + .field("name", def("JSXIdentifier")); + def("JSXMemberExpression") + .bases("MemberExpression") + .build("object", "property") + .field("object", or(def("JSXIdentifier"), def("JSXMemberExpression"))) + .field("property", def("JSXIdentifier")) + .field("computed", Boolean, defaults.false); + var JSXElementName = or(def("JSXIdentifier"), def("JSXNamespacedName"), def("JSXMemberExpression")); + def("JSXSpreadAttribute") + .bases("Node") + .build("argument") + .field("argument", def("Expression")); + var JSXAttributes = [or(def("JSXAttribute"), def("JSXSpreadAttribute"))]; + def("JSXExpressionContainer") + .bases("Expression") + .build("expression") + .field("expression", def("Expression")); + def("JSXElement") + .bases("Expression") + .build("openingElement", "closingElement", "children") + .field("openingElement", def("JSXOpeningElement")) + .field("closingElement", or(def("JSXClosingElement"), null), defaults["null"]) + .field("children", [or(def("JSXElement"), def("JSXExpressionContainer"), def("JSXFragment"), def("JSXText"), def("Literal") // TODO Esprima should return JSXText instead. + )], defaults.emptyArray) + .field("name", JSXElementName, function () { + // Little-known fact: the `this` object inside a default function + // is none other than the partially-built object itself, and any + // fields initialized directly from builder function arguments + // (like openingElement, closingElement, and children) are + // guaranteed to be available. + return this.openingElement.name; + }, true) // hidden from traversal + .field("selfClosing", Boolean, function () { + return this.openingElement.selfClosing; + }, true) // hidden from traversal + .field("attributes", JSXAttributes, function () { + return this.openingElement.attributes; + }, true); // hidden from traversal + def("JSXOpeningElement") + .bases("Node") // TODO Does this make sense? Can't really be an JSXElement. + .build("name", "attributes", "selfClosing") + .field("name", JSXElementName) + .field("attributes", JSXAttributes, defaults.emptyArray) + .field("selfClosing", Boolean, defaults["false"]); + def("JSXClosingElement") + .bases("Node") // TODO Same concern. + .build("name") + .field("name", JSXElementName); + def("JSXFragment") + .bases("Expression") + .build("openingElement", "closingElement", "children") + .field("openingElement", def("JSXOpeningFragment")) + .field("closingElement", def("JSXClosingFragment")) + .field("children", [or(def("JSXElement"), def("JSXExpressionContainer"), def("JSXFragment"), def("JSXText"), def("Literal") // TODO Esprima should return JSXText instead. + )], defaults.emptyArray); + def("JSXOpeningFragment") + .bases("Node") // TODO Same concern. + .build(); + def("JSXClosingFragment") + .bases("Node") // TODO Same concern. + .build(); + def("JSXText") + .bases("Literal") + .build("value") + .field("value", String); + def("JSXEmptyExpression").bases("Expression").build(); + // This PR has caused many people issues, but supporting it seems like a + // good idea anyway: https://github.com/babel/babel/pull/4988 + def("JSXSpreadChild") + .bases("Expression") + .build("expression") + .field("expression", def("Expression")); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/type-annotations.js": +/*!***********************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/type-annotations.js ***! + \***********************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +/** + * Type annotation defs shared between Flow and TypeScript. + * These defs could not be defined in ./flow.ts or ./typescript.ts directly + * because they use the same name. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var shared_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/shared */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js")); +function default_1(fork) { + var types = fork.use(types_1.default); + var def = types.Type.def; + var or = types.Type.or; + var defaults = fork.use(shared_1.default).defaults; + var TypeAnnotation = or(def("TypeAnnotation"), def("TSTypeAnnotation"), null); + var TypeParamDecl = or(def("TypeParameterDeclaration"), def("TSTypeParameterDeclaration"), null); + def("Identifier") + .field("typeAnnotation", TypeAnnotation, defaults["null"]); + def("ObjectPattern") + .field("typeAnnotation", TypeAnnotation, defaults["null"]); + def("Function") + .field("returnType", TypeAnnotation, defaults["null"]) + .field("typeParameters", TypeParamDecl, defaults["null"]); + def("ClassProperty") + .build("key", "value", "typeAnnotation", "static") + .field("value", or(def("Expression"), null)) + .field("static", Boolean, defaults["false"]) + .field("typeAnnotation", TypeAnnotation, defaults["null"]); + ["ClassDeclaration", + "ClassExpression", + ].forEach(function (typeName) { + def(typeName) + .field("typeParameters", TypeParamDecl, defaults["null"]) + .field("superTypeParameters", or(def("TypeParameterInstantiation"), def("TSTypeParameterInstantiation"), null), defaults["null"]) + .field("implements", or([def("ClassImplements")], [def("TSExpressionWithTypeArguments")]), defaults.emptyArray); + }); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/typescript.js": +/*!*****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/typescript.js ***! + \*****************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var babel_core_1 = tslib_1.__importDefault(__webpack_require__(/*! ./babel-core */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/babel-core.js")); +var type_annotations_1 = tslib_1.__importDefault(__webpack_require__(/*! ./type-annotations */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/type-annotations.js")); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var shared_1 = tslib_1.__importDefault(__webpack_require__(/*! ../lib/shared */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js")); +function default_1(fork) { + // Since TypeScript is parsed by Babylon, include the core Babylon types + // but omit the Flow-related types. + fork.use(babel_core_1.default); + fork.use(type_annotations_1.default); + var types = fork.use(types_1.default); + var n = types.namedTypes; + var def = types.Type.def; + var or = types.Type.or; + var defaults = fork.use(shared_1.default).defaults; + var StringLiteral = types.Type.from(function (value, deep) { + if (n.StringLiteral && + n.StringLiteral.check(value, deep)) { + return true; + } + if (n.Literal && + n.Literal.check(value, deep) && + typeof value.value === "string") { + return true; + } + return false; + }, "StringLiteral"); + def("TSType") + .bases("Node"); + var TSEntityName = or(def("Identifier"), def("TSQualifiedName")); + def("TSTypeReference") + .bases("TSType", "TSHasOptionalTypeParameterInstantiation") + .build("typeName", "typeParameters") + .field("typeName", TSEntityName); + // An abstract (non-buildable) base type that provide a commonly-needed + // optional .typeParameters field. + def("TSHasOptionalTypeParameterInstantiation") + .field("typeParameters", or(def("TSTypeParameterInstantiation"), null), defaults["null"]); + // An abstract (non-buildable) base type that provide a commonly-needed + // optional .typeParameters field. + def("TSHasOptionalTypeParameters") + .field("typeParameters", or(def("TSTypeParameterDeclaration"), null, void 0), defaults["null"]); + // An abstract (non-buildable) base type that provide a commonly-needed + // optional .typeAnnotation field. + def("TSHasOptionalTypeAnnotation") + .field("typeAnnotation", or(def("TSTypeAnnotation"), null), defaults["null"]); + def("TSQualifiedName") + .bases("Node") + .build("left", "right") + .field("left", TSEntityName) + .field("right", TSEntityName); + def("TSAsExpression") + .bases("Expression", "Pattern") + .build("expression", "typeAnnotation") + .field("expression", def("Expression")) + .field("typeAnnotation", def("TSType")) + .field("extra", or({ parenthesized: Boolean }, null), defaults["null"]); + def("TSNonNullExpression") + .bases("Expression", "Pattern") + .build("expression") + .field("expression", def("Expression")); + [ + "TSAnyKeyword", + "TSBigIntKeyword", + "TSBooleanKeyword", + "TSNeverKeyword", + "TSNullKeyword", + "TSNumberKeyword", + "TSObjectKeyword", + "TSStringKeyword", + "TSSymbolKeyword", + "TSUndefinedKeyword", + "TSUnknownKeyword", + "TSVoidKeyword", + "TSThisType", + ].forEach(function (keywordType) { + def(keywordType) + .bases("TSType") + .build(); + }); + def("TSArrayType") + .bases("TSType") + .build("elementType") + .field("elementType", def("TSType")); + def("TSLiteralType") + .bases("TSType") + .build("literal") + .field("literal", or(def("NumericLiteral"), def("StringLiteral"), def("BooleanLiteral"), def("TemplateLiteral"), def("UnaryExpression"))); + ["TSUnionType", + "TSIntersectionType", + ].forEach(function (typeName) { + def(typeName) + .bases("TSType") + .build("types") + .field("types", [def("TSType")]); + }); + def("TSConditionalType") + .bases("TSType") + .build("checkType", "extendsType", "trueType", "falseType") + .field("checkType", def("TSType")) + .field("extendsType", def("TSType")) + .field("trueType", def("TSType")) + .field("falseType", def("TSType")); + def("TSInferType") + .bases("TSType") + .build("typeParameter") + .field("typeParameter", def("TSTypeParameter")); + def("TSParenthesizedType") + .bases("TSType") + .build("typeAnnotation") + .field("typeAnnotation", def("TSType")); + var ParametersType = [or(def("Identifier"), def("RestElement"), def("ArrayPattern"), def("ObjectPattern"))]; + ["TSFunctionType", + "TSConstructorType", + ].forEach(function (typeName) { + def(typeName) + .bases("TSType", "TSHasOptionalTypeParameters", "TSHasOptionalTypeAnnotation") + .build("parameters") + .field("parameters", ParametersType); + }); + def("TSDeclareFunction") + .bases("Declaration", "TSHasOptionalTypeParameters") + .build("id", "params", "returnType") + .field("declare", Boolean, defaults["false"]) + .field("async", Boolean, defaults["false"]) + .field("generator", Boolean, defaults["false"]) + .field("id", or(def("Identifier"), null), defaults["null"]) + .field("params", [def("Pattern")]) + // tSFunctionTypeAnnotationCommon + .field("returnType", or(def("TSTypeAnnotation"), def("Noop"), // Still used? + null), defaults["null"]); + def("TSDeclareMethod") + .bases("Declaration", "TSHasOptionalTypeParameters") + .build("key", "params", "returnType") + .field("async", Boolean, defaults["false"]) + .field("generator", Boolean, defaults["false"]) + .field("params", [def("Pattern")]) + // classMethodOrPropertyCommon + .field("abstract", Boolean, defaults["false"]) + .field("accessibility", or("public", "private", "protected", void 0), defaults["undefined"]) + .field("static", Boolean, defaults["false"]) + .field("computed", Boolean, defaults["false"]) + .field("optional", Boolean, defaults["false"]) + .field("key", or(def("Identifier"), def("StringLiteral"), def("NumericLiteral"), + // Only allowed if .computed is true. + def("Expression"))) + // classMethodOrDeclareMethodCommon + .field("kind", or("get", "set", "method", "constructor"), function getDefault() { return "method"; }) + .field("access", // Not "accessibility"? + or("public", "private", "protected", void 0), defaults["undefined"]) + .field("decorators", or([def("Decorator")], null), defaults["null"]) + // tSFunctionTypeAnnotationCommon + .field("returnType", or(def("TSTypeAnnotation"), def("Noop"), // Still used? + null), defaults["null"]); + def("TSMappedType") + .bases("TSType") + .build("typeParameter", "typeAnnotation") + .field("readonly", or(Boolean, "+", "-"), defaults["false"]) + .field("typeParameter", def("TSTypeParameter")) + .field("optional", or(Boolean, "+", "-"), defaults["false"]) + .field("typeAnnotation", or(def("TSType"), null), defaults["null"]); + def("TSTupleType") + .bases("TSType") + .build("elementTypes") + .field("elementTypes", [or(def("TSType"), def("TSNamedTupleMember"))]); + def("TSNamedTupleMember") + .bases("TSType") + .build("label", "elementType", "optional") + .field("label", def("Identifier")) + .field("optional", Boolean, defaults["false"]) + .field("elementType", def("TSType")); + def("TSRestType") + .bases("TSType") + .build("typeAnnotation") + .field("typeAnnotation", def("TSType")); + def("TSOptionalType") + .bases("TSType") + .build("typeAnnotation") + .field("typeAnnotation", def("TSType")); + def("TSIndexedAccessType") + .bases("TSType") + .build("objectType", "indexType") + .field("objectType", def("TSType")) + .field("indexType", def("TSType")); + def("TSTypeOperator") + .bases("TSType") + .build("operator") + .field("operator", String) + .field("typeAnnotation", def("TSType")); + def("TSTypeAnnotation") + .bases("Node") + .build("typeAnnotation") + .field("typeAnnotation", or(def("TSType"), def("TSTypeAnnotation"))); + def("TSIndexSignature") + .bases("Declaration", "TSHasOptionalTypeAnnotation") + .build("parameters", "typeAnnotation") + .field("parameters", [def("Identifier")]) // Length === 1 + .field("readonly", Boolean, defaults["false"]); + def("TSPropertySignature") + .bases("Declaration", "TSHasOptionalTypeAnnotation") + .build("key", "typeAnnotation", "optional") + .field("key", def("Expression")) + .field("computed", Boolean, defaults["false"]) + .field("readonly", Boolean, defaults["false"]) + .field("optional", Boolean, defaults["false"]) + .field("initializer", or(def("Expression"), null), defaults["null"]); + def("TSMethodSignature") + .bases("Declaration", "TSHasOptionalTypeParameters", "TSHasOptionalTypeAnnotation") + .build("key", "parameters", "typeAnnotation") + .field("key", def("Expression")) + .field("computed", Boolean, defaults["false"]) + .field("optional", Boolean, defaults["false"]) + .field("parameters", ParametersType); + def("TSTypePredicate") + .bases("TSTypeAnnotation", "TSType") + .build("parameterName", "typeAnnotation", "asserts") + .field("parameterName", or(def("Identifier"), def("TSThisType"))) + .field("typeAnnotation", or(def("TSTypeAnnotation"), null), defaults["null"]) + .field("asserts", Boolean, defaults["false"]); + ["TSCallSignatureDeclaration", + "TSConstructSignatureDeclaration", + ].forEach(function (typeName) { + def(typeName) + .bases("Declaration", "TSHasOptionalTypeParameters", "TSHasOptionalTypeAnnotation") + .build("parameters", "typeAnnotation") + .field("parameters", ParametersType); + }); + def("TSEnumMember") + .bases("Node") + .build("id", "initializer") + .field("id", or(def("Identifier"), StringLiteral)) + .field("initializer", or(def("Expression"), null), defaults["null"]); + def("TSTypeQuery") + .bases("TSType") + .build("exprName") + .field("exprName", or(TSEntityName, def("TSImportType"))); + // Inferred from Babylon's tsParseTypeMember method. + var TSTypeMember = or(def("TSCallSignatureDeclaration"), def("TSConstructSignatureDeclaration"), def("TSIndexSignature"), def("TSMethodSignature"), def("TSPropertySignature")); + def("TSTypeLiteral") + .bases("TSType") + .build("members") + .field("members", [TSTypeMember]); + def("TSTypeParameter") + .bases("Identifier") + .build("name", "constraint", "default") + .field("name", String) + .field("constraint", or(def("TSType"), void 0), defaults["undefined"]) + .field("default", or(def("TSType"), void 0), defaults["undefined"]); + def("TSTypeAssertion") + .bases("Expression", "Pattern") + .build("typeAnnotation", "expression") + .field("typeAnnotation", def("TSType")) + .field("expression", def("Expression")) + .field("extra", or({ parenthesized: Boolean }, null), defaults["null"]); + def("TSTypeParameterDeclaration") + .bases("Declaration") + .build("params") + .field("params", [def("TSTypeParameter")]); + def("TSTypeParameterInstantiation") + .bases("Node") + .build("params") + .field("params", [def("TSType")]); + def("TSEnumDeclaration") + .bases("Declaration") + .build("id", "members") + .field("id", def("Identifier")) + .field("const", Boolean, defaults["false"]) + .field("declare", Boolean, defaults["false"]) + .field("members", [def("TSEnumMember")]) + .field("initializer", or(def("Expression"), null), defaults["null"]); + def("TSTypeAliasDeclaration") + .bases("Declaration", "TSHasOptionalTypeParameters") + .build("id", "typeAnnotation") + .field("id", def("Identifier")) + .field("declare", Boolean, defaults["false"]) + .field("typeAnnotation", def("TSType")); + def("TSModuleBlock") + .bases("Node") + .build("body") + .field("body", [def("Statement")]); + def("TSModuleDeclaration") + .bases("Declaration") + .build("id", "body") + .field("id", or(StringLiteral, TSEntityName)) + .field("declare", Boolean, defaults["false"]) + .field("global", Boolean, defaults["false"]) + .field("body", or(def("TSModuleBlock"), def("TSModuleDeclaration"), null), defaults["null"]); + def("TSImportType") + .bases("TSType", "TSHasOptionalTypeParameterInstantiation") + .build("argument", "qualifier", "typeParameters") + .field("argument", StringLiteral) + .field("qualifier", or(TSEntityName, void 0), defaults["undefined"]); + def("TSImportEqualsDeclaration") + .bases("Declaration") + .build("id", "moduleReference") + .field("id", def("Identifier")) + .field("isExport", Boolean, defaults["false"]) + .field("moduleReference", or(TSEntityName, def("TSExternalModuleReference"))); + def("TSExternalModuleReference") + .bases("Declaration") + .build("expression") + .field("expression", StringLiteral); + def("TSExportAssignment") + .bases("Statement") + .build("expression") + .field("expression", def("Expression")); + def("TSNamespaceExportDeclaration") + .bases("Declaration") + .build("id") + .field("id", def("Identifier")); + def("TSInterfaceBody") + .bases("Node") + .build("body") + .field("body", [TSTypeMember]); + def("TSExpressionWithTypeArguments") + .bases("TSType", "TSHasOptionalTypeParameterInstantiation") + .build("expression", "typeParameters") + .field("expression", TSEntityName); + def("TSInterfaceDeclaration") + .bases("Declaration", "TSHasOptionalTypeParameters") + .build("id", "body") + .field("id", TSEntityName) + .field("declare", Boolean, defaults["false"]) + .field("extends", or([def("TSExpressionWithTypeArguments")], null), defaults["null"]) + .field("body", def("TSInterfaceBody")); + def("TSParameterProperty") + .bases("Pattern") + .build("parameter") + .field("accessibility", or("public", "private", "protected", void 0), defaults["undefined"]) + .field("readonly", Boolean, defaults["false"]) + .field("parameter", or(def("Identifier"), def("AssignmentPattern"))); + def("ClassProperty") + .field("access", // Not "accessibility"? + or("public", "private", "protected", void 0), defaults["undefined"]); + // Defined already in es6 and babel-core. + def("ClassBody") + .field("body", [or(def("MethodDefinition"), def("VariableDeclarator"), def("ClassPropertyDefinition"), def("ClassProperty"), def("ClassPrivateProperty"), def("ClassMethod"), def("ClassPrivateMethod"), + // Just need to add these types: + def("TSDeclareMethod"), TSTypeMember)]); +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/fork.js": +/*!*******************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/fork.js ***! + \*******************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ./lib/types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var path_visitor_1 = tslib_1.__importDefault(__webpack_require__(/*! ./lib/path-visitor */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/path-visitor.js")); +var equiv_1 = tslib_1.__importDefault(__webpack_require__(/*! ./lib/equiv */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/equiv.js")); +var path_1 = tslib_1.__importDefault(__webpack_require__(/*! ./lib/path */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/path.js")); +var node_path_1 = tslib_1.__importDefault(__webpack_require__(/*! ./lib/node-path */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/node-path.js")); +function default_1(defs) { + var fork = createFork(); + var types = fork.use(types_1.default); + defs.forEach(fork.use); + types.finalize(); + var PathVisitor = fork.use(path_visitor_1.default); + return { + Type: types.Type, + builtInTypes: types.builtInTypes, + namedTypes: types.namedTypes, + builders: types.builders, + defineMethod: types.defineMethod, + getFieldNames: types.getFieldNames, + getFieldValue: types.getFieldValue, + eachField: types.eachField, + someField: types.someField, + getSupertypeNames: types.getSupertypeNames, + getBuilderName: types.getBuilderName, + astNodesAreEquivalent: fork.use(equiv_1.default), + finalize: types.finalize, + Path: fork.use(path_1.default), + NodePath: fork.use(node_path_1.default), + PathVisitor: PathVisitor, + use: fork.use, + visit: PathVisitor.visit, + }; +} +exports["default"] = default_1; +function createFork() { + var used = []; + var usedResult = []; + function use(plugin) { + var idx = used.indexOf(plugin); + if (idx === -1) { + idx = used.length; + used.push(plugin); + usedResult[idx] = plugin(fork); + } + return usedResult[idx]; + } + var fork = { use: use }; + return fork; +} +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/gen/namedTypes.js": +/*!*****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/gen/namedTypes.js ***! + \*****************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.namedTypes = void 0; +var namedTypes; +(function (namedTypes) { +})(namedTypes = exports.namedTypes || (exports.namedTypes = {})); + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/equiv.js": +/*!************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/equiv.js ***! + \************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ./types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +function default_1(fork) { + var types = fork.use(types_1.default); + var getFieldNames = types.getFieldNames; + var getFieldValue = types.getFieldValue; + var isArray = types.builtInTypes.array; + var isObject = types.builtInTypes.object; + var isDate = types.builtInTypes.Date; + var isRegExp = types.builtInTypes.RegExp; + var hasOwn = Object.prototype.hasOwnProperty; + function astNodesAreEquivalent(a, b, problemPath) { + if (isArray.check(problemPath)) { + problemPath.length = 0; + } + else { + problemPath = null; + } + return areEquivalent(a, b, problemPath); + } + astNodesAreEquivalent.assert = function (a, b) { + var problemPath = []; + if (!astNodesAreEquivalent(a, b, problemPath)) { + if (problemPath.length === 0) { + if (a !== b) { + throw new Error("Nodes must be equal"); + } + } + else { + throw new Error("Nodes differ in the following path: " + + problemPath.map(subscriptForProperty).join("")); + } + } + }; + function subscriptForProperty(property) { + if (/[_$a-z][_$a-z0-9]*/i.test(property)) { + return "." + property; + } + return "[" + JSON.stringify(property) + "]"; + } + function areEquivalent(a, b, problemPath) { + if (a === b) { + return true; + } + if (isArray.check(a)) { + return arraysAreEquivalent(a, b, problemPath); + } + if (isObject.check(a)) { + return objectsAreEquivalent(a, b, problemPath); + } + if (isDate.check(a)) { + return isDate.check(b) && (+a === +b); + } + if (isRegExp.check(a)) { + return isRegExp.check(b) && (a.source === b.source && + a.global === b.global && + a.multiline === b.multiline && + a.ignoreCase === b.ignoreCase); + } + return a == b; + } + function arraysAreEquivalent(a, b, problemPath) { + isArray.assert(a); + var aLength = a.length; + if (!isArray.check(b) || b.length !== aLength) { + if (problemPath) { + problemPath.push("length"); + } + return false; + } + for (var i = 0; i < aLength; ++i) { + if (problemPath) { + problemPath.push(i); + } + if (i in a !== i in b) { + return false; + } + if (!areEquivalent(a[i], b[i], problemPath)) { + return false; + } + if (problemPath) { + var problemPathTail = problemPath.pop(); + if (problemPathTail !== i) { + throw new Error("" + problemPathTail); + } + } + } + return true; + } + function objectsAreEquivalent(a, b, problemPath) { + isObject.assert(a); + if (!isObject.check(b)) { + return false; + } + // Fast path for a common property of AST nodes. + if (a.type !== b.type) { + if (problemPath) { + problemPath.push("type"); + } + return false; + } + var aNames = getFieldNames(a); + var aNameCount = aNames.length; + var bNames = getFieldNames(b); + var bNameCount = bNames.length; + if (aNameCount === bNameCount) { + for (var i = 0; i < aNameCount; ++i) { + var name = aNames[i]; + var aChild = getFieldValue(a, name); + var bChild = getFieldValue(b, name); + if (problemPath) { + problemPath.push(name); + } + if (!areEquivalent(aChild, bChild, problemPath)) { + return false; + } + if (problemPath) { + var problemPathTail = problemPath.pop(); + if (problemPathTail !== name) { + throw new Error("" + problemPathTail); + } + } + } + return true; + } + if (!problemPath) { + return false; + } + // Since aNameCount !== bNameCount, we need to find some name that's + // missing in aNames but present in bNames, or vice-versa. + var seenNames = Object.create(null); + for (i = 0; i < aNameCount; ++i) { + seenNames[aNames[i]] = true; + } + for (i = 0; i < bNameCount; ++i) { + name = bNames[i]; + if (!hasOwn.call(seenNames, name)) { + problemPath.push(name); + return false; + } + delete seenNames[name]; + } + for (name in seenNames) { + problemPath.push(name); + break; + } + return false; + } + return astNodesAreEquivalent; +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/node-path.js": +/*!****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/node-path.js ***! + \****************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ./types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var path_1 = tslib_1.__importDefault(__webpack_require__(/*! ./path */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/path.js")); +var scope_1 = tslib_1.__importDefault(__webpack_require__(/*! ./scope */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/scope.js")); +function nodePathPlugin(fork) { + var types = fork.use(types_1.default); + var n = types.namedTypes; + var b = types.builders; + var isNumber = types.builtInTypes.number; + var isArray = types.builtInTypes.array; + var Path = fork.use(path_1.default); + var Scope = fork.use(scope_1.default); + var NodePath = function NodePath(value, parentPath, name) { + if (!(this instanceof NodePath)) { + throw new Error("NodePath constructor cannot be invoked without 'new'"); + } + Path.call(this, value, parentPath, name); + }; + var NPp = NodePath.prototype = Object.create(Path.prototype, { + constructor: { + value: NodePath, + enumerable: false, + writable: true, + configurable: true + } + }); + Object.defineProperties(NPp, { + node: { + get: function () { + Object.defineProperty(this, "node", { + configurable: true, + value: this._computeNode() + }); + return this.node; + } + }, + parent: { + get: function () { + Object.defineProperty(this, "parent", { + configurable: true, + value: this._computeParent() + }); + return this.parent; + } + }, + scope: { + get: function () { + Object.defineProperty(this, "scope", { + configurable: true, + value: this._computeScope() + }); + return this.scope; + } + } + }); + NPp.replace = function () { + delete this.node; + delete this.parent; + delete this.scope; + return Path.prototype.replace.apply(this, arguments); + }; + NPp.prune = function () { + var remainingNodePath = this.parent; + this.replace(); + return cleanUpNodesAfterPrune(remainingNodePath); + }; + // The value of the first ancestor Path whose value is a Node. + NPp._computeNode = function () { + var value = this.value; + if (n.Node.check(value)) { + return value; + } + var pp = this.parentPath; + return pp && pp.node || null; + }; + // The first ancestor Path whose value is a Node distinct from this.node. + NPp._computeParent = function () { + var value = this.value; + var pp = this.parentPath; + if (!n.Node.check(value)) { + while (pp && !n.Node.check(pp.value)) { + pp = pp.parentPath; + } + if (pp) { + pp = pp.parentPath; + } + } + while (pp && !n.Node.check(pp.value)) { + pp = pp.parentPath; + } + return pp || null; + }; + // The closest enclosing scope that governs this node. + NPp._computeScope = function () { + var value = this.value; + var pp = this.parentPath; + var scope = pp && pp.scope; + if (n.Node.check(value) && + Scope.isEstablishedBy(value)) { + scope = new Scope(this, scope); + } + return scope || null; + }; + NPp.getValueProperty = function (name) { + return types.getFieldValue(this.value, name); + }; + /** + * Determine whether this.node needs to be wrapped in parentheses in order + * for a parser to reproduce the same local AST structure. + * + * For instance, in the expression `(1 + 2) * 3`, the BinaryExpression + * whose operator is "+" needs parentheses, because `1 + 2 * 3` would + * parse differently. + * + * If assumeExpressionContext === true, we don't worry about edge cases + * like an anonymous FunctionExpression appearing lexically first in its + * enclosing statement and thus needing parentheses to avoid being parsed + * as a FunctionDeclaration with a missing name. + */ + NPp.needsParens = function (assumeExpressionContext) { + var pp = this.parentPath; + if (!pp) { + return false; + } + var node = this.value; + // Only expressions need parentheses. + if (!n.Expression.check(node)) { + return false; + } + // Identifiers never need parentheses. + if (node.type === "Identifier") { + return false; + } + while (!n.Node.check(pp.value)) { + pp = pp.parentPath; + if (!pp) { + return false; + } + } + var parent = pp.value; + switch (node.type) { + case "UnaryExpression": + case "SpreadElement": + case "SpreadProperty": + return parent.type === "MemberExpression" + && this.name === "object" + && parent.object === node; + case "BinaryExpression": + case "LogicalExpression": + switch (parent.type) { + case "CallExpression": + return this.name === "callee" + && parent.callee === node; + case "UnaryExpression": + case "SpreadElement": + case "SpreadProperty": + return true; + case "MemberExpression": + return this.name === "object" + && parent.object === node; + case "BinaryExpression": + case "LogicalExpression": { + var n_1 = node; + var po = parent.operator; + var pp_1 = PRECEDENCE[po]; + var no = n_1.operator; + var np = PRECEDENCE[no]; + if (pp_1 > np) { + return true; + } + if (pp_1 === np && this.name === "right") { + if (parent.right !== n_1) { + throw new Error("Nodes must be equal"); + } + return true; + } + } + default: + return false; + } + case "SequenceExpression": + switch (parent.type) { + case "ForStatement": + // Although parentheses wouldn't hurt around sequence + // expressions in the head of for loops, traditional style + // dictates that e.g. i++, j++ should not be wrapped with + // parentheses. + return false; + case "ExpressionStatement": + return this.name !== "expression"; + default: + // Otherwise err on the side of overparenthesization, adding + // explicit exceptions above if this proves overzealous. + return true; + } + case "YieldExpression": + switch (parent.type) { + case "BinaryExpression": + case "LogicalExpression": + case "UnaryExpression": + case "SpreadElement": + case "SpreadProperty": + case "CallExpression": + case "MemberExpression": + case "NewExpression": + case "ConditionalExpression": + case "YieldExpression": + return true; + default: + return false; + } + case "Literal": + return parent.type === "MemberExpression" + && isNumber.check(node.value) + && this.name === "object" + && parent.object === node; + case "AssignmentExpression": + case "ConditionalExpression": + switch (parent.type) { + case "UnaryExpression": + case "SpreadElement": + case "SpreadProperty": + case "BinaryExpression": + case "LogicalExpression": + return true; + case "CallExpression": + return this.name === "callee" + && parent.callee === node; + case "ConditionalExpression": + return this.name === "test" + && parent.test === node; + case "MemberExpression": + return this.name === "object" + && parent.object === node; + default: + return false; + } + default: + if (parent.type === "NewExpression" && + this.name === "callee" && + parent.callee === node) { + return containsCallExpression(node); + } + } + if (assumeExpressionContext !== true && + !this.canBeFirstInStatement() && + this.firstInStatement()) + return true; + return false; + }; + function isBinary(node) { + return n.BinaryExpression.check(node) + || n.LogicalExpression.check(node); + } + // @ts-ignore 'isUnaryLike' is declared but its value is never read. [6133] + function isUnaryLike(node) { + return n.UnaryExpression.check(node) + // I considered making SpreadElement and SpreadProperty subtypes + // of UnaryExpression, but they're not really Expression nodes. + || (n.SpreadElement && n.SpreadElement.check(node)) + || (n.SpreadProperty && n.SpreadProperty.check(node)); + } + var PRECEDENCE = {}; + [["||"], + ["&&"], + ["|"], + ["^"], + ["&"], + ["==", "===", "!=", "!=="], + ["<", ">", "<=", ">=", "in", "instanceof"], + [">>", "<<", ">>>"], + ["+", "-"], + ["*", "/", "%"] + ].forEach(function (tier, i) { + tier.forEach(function (op) { + PRECEDENCE[op] = i; + }); + }); + function containsCallExpression(node) { + if (n.CallExpression.check(node)) { + return true; + } + if (isArray.check(node)) { + return node.some(containsCallExpression); + } + if (n.Node.check(node)) { + return types.someField(node, function (_name, child) { + return containsCallExpression(child); + }); + } + return false; + } + NPp.canBeFirstInStatement = function () { + var node = this.node; + return !n.FunctionExpression.check(node) + && !n.ObjectExpression.check(node); + }; + NPp.firstInStatement = function () { + return firstInStatement(this); + }; + function firstInStatement(path) { + for (var node, parent; path.parent; path = path.parent) { + node = path.node; + parent = path.parent.node; + if (n.BlockStatement.check(parent) && + path.parent.name === "body" && + path.name === 0) { + if (parent.body[0] !== node) { + throw new Error("Nodes must be equal"); + } + return true; + } + if (n.ExpressionStatement.check(parent) && + path.name === "expression") { + if (parent.expression !== node) { + throw new Error("Nodes must be equal"); + } + return true; + } + if (n.SequenceExpression.check(parent) && + path.parent.name === "expressions" && + path.name === 0) { + if (parent.expressions[0] !== node) { + throw new Error("Nodes must be equal"); + } + continue; + } + if (n.CallExpression.check(parent) && + path.name === "callee") { + if (parent.callee !== node) { + throw new Error("Nodes must be equal"); + } + continue; + } + if (n.MemberExpression.check(parent) && + path.name === "object") { + if (parent.object !== node) { + throw new Error("Nodes must be equal"); + } + continue; + } + if (n.ConditionalExpression.check(parent) && + path.name === "test") { + if (parent.test !== node) { + throw new Error("Nodes must be equal"); + } + continue; + } + if (isBinary(parent) && + path.name === "left") { + if (parent.left !== node) { + throw new Error("Nodes must be equal"); + } + continue; + } + if (n.UnaryExpression.check(parent) && + !parent.prefix && + path.name === "argument") { + if (parent.argument !== node) { + throw new Error("Nodes must be equal"); + } + continue; + } + return false; + } + return true; + } + /** + * Pruning certain nodes will result in empty or incomplete nodes, here we clean those nodes up. + */ + function cleanUpNodesAfterPrune(remainingNodePath) { + if (n.VariableDeclaration.check(remainingNodePath.node)) { + var declarations = remainingNodePath.get('declarations').value; + if (!declarations || declarations.length === 0) { + return remainingNodePath.prune(); + } + } + else if (n.ExpressionStatement.check(remainingNodePath.node)) { + if (!remainingNodePath.get('expression').value) { + return remainingNodePath.prune(); + } + } + else if (n.IfStatement.check(remainingNodePath.node)) { + cleanUpIfStatementAfterPrune(remainingNodePath); + } + return remainingNodePath; + } + function cleanUpIfStatementAfterPrune(ifStatement) { + var testExpression = ifStatement.get('test').value; + var alternate = ifStatement.get('alternate').value; + var consequent = ifStatement.get('consequent').value; + if (!consequent && !alternate) { + var testExpressionStatement = b.expressionStatement(testExpression); + ifStatement.replace(testExpressionStatement); + } + else if (!consequent && alternate) { + var negatedTestExpression = b.unaryExpression('!', testExpression, true); + if (n.UnaryExpression.check(testExpression) && testExpression.operator === '!') { + negatedTestExpression = testExpression.argument; + } + ifStatement.get("test").replace(negatedTestExpression); + ifStatement.get("consequent").replace(alternate); + ifStatement.get("alternate").replace(); + } + } + return NodePath; +} +exports["default"] = nodePathPlugin; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/path-visitor.js": +/*!*******************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/path-visitor.js ***! + \*******************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ./types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var node_path_1 = tslib_1.__importDefault(__webpack_require__(/*! ./node-path */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/node-path.js")); +var hasOwn = Object.prototype.hasOwnProperty; +function pathVisitorPlugin(fork) { + var types = fork.use(types_1.default); + var NodePath = fork.use(node_path_1.default); + var isArray = types.builtInTypes.array; + var isObject = types.builtInTypes.object; + var isFunction = types.builtInTypes.function; + var undefined; + var PathVisitor = function PathVisitor() { + if (!(this instanceof PathVisitor)) { + throw new Error("PathVisitor constructor cannot be invoked without 'new'"); + } + // Permanent state. + this._reusableContextStack = []; + this._methodNameTable = computeMethodNameTable(this); + this._shouldVisitComments = + hasOwn.call(this._methodNameTable, "Block") || + hasOwn.call(this._methodNameTable, "Line"); + this.Context = makeContextConstructor(this); + // State reset every time PathVisitor.prototype.visit is called. + this._visiting = false; + this._changeReported = false; + }; + function computeMethodNameTable(visitor) { + var typeNames = Object.create(null); + for (var methodName in visitor) { + if (/^visit[A-Z]/.test(methodName)) { + typeNames[methodName.slice("visit".length)] = true; + } + } + var supertypeTable = types.computeSupertypeLookupTable(typeNames); + var methodNameTable = Object.create(null); + var typeNameKeys = Object.keys(supertypeTable); + var typeNameCount = typeNameKeys.length; + for (var i = 0; i < typeNameCount; ++i) { + var typeName = typeNameKeys[i]; + methodName = "visit" + supertypeTable[typeName]; + if (isFunction.check(visitor[methodName])) { + methodNameTable[typeName] = methodName; + } + } + return methodNameTable; + } + PathVisitor.fromMethodsObject = function fromMethodsObject(methods) { + if (methods instanceof PathVisitor) { + return methods; + } + if (!isObject.check(methods)) { + // An empty visitor? + return new PathVisitor; + } + var Visitor = function Visitor() { + if (!(this instanceof Visitor)) { + throw new Error("Visitor constructor cannot be invoked without 'new'"); + } + PathVisitor.call(this); + }; + var Vp = Visitor.prototype = Object.create(PVp); + Vp.constructor = Visitor; + extend(Vp, methods); + extend(Visitor, PathVisitor); + isFunction.assert(Visitor.fromMethodsObject); + isFunction.assert(Visitor.visit); + return new Visitor; + }; + function extend(target, source) { + for (var property in source) { + if (hasOwn.call(source, property)) { + target[property] = source[property]; + } + } + return target; + } + PathVisitor.visit = function visit(node, methods) { + return PathVisitor.fromMethodsObject(methods).visit(node); + }; + var PVp = PathVisitor.prototype; + PVp.visit = function () { + if (this._visiting) { + throw new Error("Recursively calling visitor.visit(path) resets visitor state. " + + "Try this.visit(path) or this.traverse(path) instead."); + } + // Private state that needs to be reset before every traversal. + this._visiting = true; + this._changeReported = false; + this._abortRequested = false; + var argc = arguments.length; + var args = new Array(argc); + for (var i = 0; i < argc; ++i) { + args[i] = arguments[i]; + } + if (!(args[0] instanceof NodePath)) { + args[0] = new NodePath({ root: args[0] }).get("root"); + } + // Called with the same arguments as .visit. + this.reset.apply(this, args); + var didNotThrow; + try { + var root = this.visitWithoutReset(args[0]); + didNotThrow = true; + } + finally { + this._visiting = false; + if (!didNotThrow && this._abortRequested) { + // If this.visitWithoutReset threw an exception and + // this._abortRequested was set to true, return the root of + // the AST instead of letting the exception propagate, so that + // client code does not have to provide a try-catch block to + // intercept the AbortRequest exception. Other kinds of + // exceptions will propagate without being intercepted and + // rethrown by a catch block, so their stacks will accurately + // reflect the original throwing context. + return args[0].value; + } + } + return root; + }; + PVp.AbortRequest = function AbortRequest() { }; + PVp.abort = function () { + var visitor = this; + visitor._abortRequested = true; + var request = new visitor.AbortRequest(); + // If you decide to catch this exception and stop it from propagating, + // make sure to call its cancel method to avoid silencing other + // exceptions that might be thrown later in the traversal. + request.cancel = function () { + visitor._abortRequested = false; + }; + throw request; + }; + PVp.reset = function (_path /*, additional arguments */) { + // Empty stub; may be reassigned or overridden by subclasses. + }; + PVp.visitWithoutReset = function (path) { + if (this instanceof this.Context) { + // Since this.Context.prototype === this, there's a chance we + // might accidentally call context.visitWithoutReset. If that + // happens, re-invoke the method against context.visitor. + return this.visitor.visitWithoutReset(path); + } + if (!(path instanceof NodePath)) { + throw new Error(""); + } + var value = path.value; + var methodName = value && + typeof value === "object" && + typeof value.type === "string" && + this._methodNameTable[value.type]; + if (methodName) { + var context = this.acquireContext(path); + try { + return context.invokeVisitorMethod(methodName); + } + finally { + this.releaseContext(context); + } + } + else { + // If there was no visitor method to call, visit the children of + // this node generically. + return visitChildren(path, this); + } + }; + function visitChildren(path, visitor) { + if (!(path instanceof NodePath)) { + throw new Error(""); + } + if (!(visitor instanceof PathVisitor)) { + throw new Error(""); + } + var value = path.value; + if (isArray.check(value)) { + path.each(visitor.visitWithoutReset, visitor); + } + else if (!isObject.check(value)) { + // No children to visit. + } + else { + var childNames = types.getFieldNames(value); + // The .comments field of the Node type is hidden, so we only + // visit it if the visitor defines visitBlock or visitLine, and + // value.comments is defined. + if (visitor._shouldVisitComments && + value.comments && + childNames.indexOf("comments") < 0) { + childNames.push("comments"); + } + var childCount = childNames.length; + var childPaths = []; + for (var i = 0; i < childCount; ++i) { + var childName = childNames[i]; + if (!hasOwn.call(value, childName)) { + value[childName] = types.getFieldValue(value, childName); + } + childPaths.push(path.get(childName)); + } + for (var i = 0; i < childCount; ++i) { + visitor.visitWithoutReset(childPaths[i]); + } + } + return path.value; + } + PVp.acquireContext = function (path) { + if (this._reusableContextStack.length === 0) { + return new this.Context(path); + } + return this._reusableContextStack.pop().reset(path); + }; + PVp.releaseContext = function (context) { + if (!(context instanceof this.Context)) { + throw new Error(""); + } + this._reusableContextStack.push(context); + context.currentPath = null; + }; + PVp.reportChanged = function () { + this._changeReported = true; + }; + PVp.wasChangeReported = function () { + return this._changeReported; + }; + function makeContextConstructor(visitor) { + function Context(path) { + if (!(this instanceof Context)) { + throw new Error(""); + } + if (!(this instanceof PathVisitor)) { + throw new Error(""); + } + if (!(path instanceof NodePath)) { + throw new Error(""); + } + Object.defineProperty(this, "visitor", { + value: visitor, + writable: false, + enumerable: true, + configurable: false + }); + this.currentPath = path; + this.needToCallTraverse = true; + Object.seal(this); + } + if (!(visitor instanceof PathVisitor)) { + throw new Error(""); + } + // Note that the visitor object is the prototype of Context.prototype, + // so all visitor methods are inherited by context objects. + var Cp = Context.prototype = Object.create(visitor); + Cp.constructor = Context; + extend(Cp, sharedContextProtoMethods); + return Context; + } + // Every PathVisitor has a different this.Context constructor and + // this.Context.prototype object, but those prototypes can all use the + // same reset, invokeVisitorMethod, and traverse function objects. + var sharedContextProtoMethods = Object.create(null); + sharedContextProtoMethods.reset = + function reset(path) { + if (!(this instanceof this.Context)) { + throw new Error(""); + } + if (!(path instanceof NodePath)) { + throw new Error(""); + } + this.currentPath = path; + this.needToCallTraverse = true; + return this; + }; + sharedContextProtoMethods.invokeVisitorMethod = + function invokeVisitorMethod(methodName) { + if (!(this instanceof this.Context)) { + throw new Error(""); + } + if (!(this.currentPath instanceof NodePath)) { + throw new Error(""); + } + var result = this.visitor[methodName].call(this, this.currentPath); + if (result === false) { + // Visitor methods return false to indicate that they have handled + // their own traversal needs, and we should not complain if + // this.needToCallTraverse is still true. + this.needToCallTraverse = false; + } + else if (result !== undefined) { + // Any other non-undefined value returned from the visitor method + // is interpreted as a replacement value. + this.currentPath = this.currentPath.replace(result)[0]; + if (this.needToCallTraverse) { + // If this.traverse still hasn't been called, visit the + // children of the replacement node. + this.traverse(this.currentPath); + } + } + if (this.needToCallTraverse !== false) { + throw new Error("Must either call this.traverse or return false in " + methodName); + } + var path = this.currentPath; + return path && path.value; + }; + sharedContextProtoMethods.traverse = + function traverse(path, newVisitor) { + if (!(this instanceof this.Context)) { + throw new Error(""); + } + if (!(path instanceof NodePath)) { + throw new Error(""); + } + if (!(this.currentPath instanceof NodePath)) { + throw new Error(""); + } + this.needToCallTraverse = false; + return visitChildren(path, PathVisitor.fromMethodsObject(newVisitor || this.visitor)); + }; + sharedContextProtoMethods.visit = + function visit(path, newVisitor) { + if (!(this instanceof this.Context)) { + throw new Error(""); + } + if (!(path instanceof NodePath)) { + throw new Error(""); + } + if (!(this.currentPath instanceof NodePath)) { + throw new Error(""); + } + this.needToCallTraverse = false; + return PathVisitor.fromMethodsObject(newVisitor || this.visitor).visitWithoutReset(path); + }; + sharedContextProtoMethods.reportChanged = function reportChanged() { + this.visitor.reportChanged(); + }; + sharedContextProtoMethods.abort = function abort() { + this.needToCallTraverse = false; + this.visitor.abort(); + }; + return PathVisitor; +} +exports["default"] = pathVisitorPlugin; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/path.js": +/*!***********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/path.js ***! + \***********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ./types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var Op = Object.prototype; +var hasOwn = Op.hasOwnProperty; +function pathPlugin(fork) { + var types = fork.use(types_1.default); + var isArray = types.builtInTypes.array; + var isNumber = types.builtInTypes.number; + var Path = function Path(value, parentPath, name) { + if (!(this instanceof Path)) { + throw new Error("Path constructor cannot be invoked without 'new'"); + } + if (parentPath) { + if (!(parentPath instanceof Path)) { + throw new Error(""); + } + } + else { + parentPath = null; + name = null; + } + // The value encapsulated by this Path, generally equal to + // parentPath.value[name] if we have a parentPath. + this.value = value; + // The immediate parent Path of this Path. + this.parentPath = parentPath; + // The name of the property of parentPath.value through which this + // Path's value was reached. + this.name = name; + // Calling path.get("child") multiple times always returns the same + // child Path object, for both performance and consistency reasons. + this.__childCache = null; + }; + var Pp = Path.prototype; + function getChildCache(path) { + // Lazily create the child cache. This also cheapens cache + // invalidation, since you can just reset path.__childCache to null. + return path.__childCache || (path.__childCache = Object.create(null)); + } + function getChildPath(path, name) { + var cache = getChildCache(path); + var actualChildValue = path.getValueProperty(name); + var childPath = cache[name]; + if (!hasOwn.call(cache, name) || + // Ensure consistency between cache and reality. + childPath.value !== actualChildValue) { + childPath = cache[name] = new path.constructor(actualChildValue, path, name); + } + return childPath; + } + // This method is designed to be overridden by subclasses that need to + // handle missing properties, etc. + Pp.getValueProperty = function getValueProperty(name) { + return this.value[name]; + }; + Pp.get = function get() { + var names = []; + for (var _i = 0; _i < arguments.length; _i++) { + names[_i] = arguments[_i]; + } + var path = this; + var count = names.length; + for (var i = 0; i < count; ++i) { + path = getChildPath(path, names[i]); + } + return path; + }; + Pp.each = function each(callback, context) { + var childPaths = []; + var len = this.value.length; + var i = 0; + // Collect all the original child paths before invoking the callback. + for (var i = 0; i < len; ++i) { + if (hasOwn.call(this.value, i)) { + childPaths[i] = this.get(i); + } + } + // Invoke the callback on just the original child paths, regardless of + // any modifications made to the array by the callback. I chose these + // semantics over cleverly invoking the callback on new elements because + // this way is much easier to reason about. + context = context || this; + for (i = 0; i < len; ++i) { + if (hasOwn.call(childPaths, i)) { + callback.call(context, childPaths[i]); + } + } + }; + Pp.map = function map(callback, context) { + var result = []; + this.each(function (childPath) { + result.push(callback.call(this, childPath)); + }, context); + return result; + }; + Pp.filter = function filter(callback, context) { + var result = []; + this.each(function (childPath) { + if (callback.call(this, childPath)) { + result.push(childPath); + } + }, context); + return result; + }; + function emptyMoves() { } + function getMoves(path, offset, start, end) { + isArray.assert(path.value); + if (offset === 0) { + return emptyMoves; + } + var length = path.value.length; + if (length < 1) { + return emptyMoves; + } + var argc = arguments.length; + if (argc === 2) { + start = 0; + end = length; + } + else if (argc === 3) { + start = Math.max(start, 0); + end = length; + } + else { + start = Math.max(start, 0); + end = Math.min(end, length); + } + isNumber.assert(start); + isNumber.assert(end); + var moves = Object.create(null); + var cache = getChildCache(path); + for (var i = start; i < end; ++i) { + if (hasOwn.call(path.value, i)) { + var childPath = path.get(i); + if (childPath.name !== i) { + throw new Error(""); + } + var newIndex = i + offset; + childPath.name = newIndex; + moves[newIndex] = childPath; + delete cache[i]; + } + } + delete cache.length; + return function () { + for (var newIndex in moves) { + var childPath = moves[newIndex]; + if (childPath.name !== +newIndex) { + throw new Error(""); + } + cache[newIndex] = childPath; + path.value[newIndex] = childPath.value; + } + }; + } + Pp.shift = function shift() { + var move = getMoves(this, -1); + var result = this.value.shift(); + move(); + return result; + }; + Pp.unshift = function unshift() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var move = getMoves(this, args.length); + var result = this.value.unshift.apply(this.value, args); + move(); + return result; + }; + Pp.push = function push() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + isArray.assert(this.value); + delete getChildCache(this).length; + return this.value.push.apply(this.value, args); + }; + Pp.pop = function pop() { + isArray.assert(this.value); + var cache = getChildCache(this); + delete cache[this.value.length - 1]; + delete cache.length; + return this.value.pop(); + }; + Pp.insertAt = function insertAt(index) { + var argc = arguments.length; + var move = getMoves(this, argc - 1, index); + if (move === emptyMoves && argc <= 1) { + return this; + } + index = Math.max(index, 0); + for (var i = 1; i < argc; ++i) { + this.value[index + i - 1] = arguments[i]; + } + move(); + return this; + }; + Pp.insertBefore = function insertBefore() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var pp = this.parentPath; + var argc = args.length; + var insertAtArgs = [this.name]; + for (var i = 0; i < argc; ++i) { + insertAtArgs.push(args[i]); + } + return pp.insertAt.apply(pp, insertAtArgs); + }; + Pp.insertAfter = function insertAfter() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var pp = this.parentPath; + var argc = args.length; + var insertAtArgs = [this.name + 1]; + for (var i = 0; i < argc; ++i) { + insertAtArgs.push(args[i]); + } + return pp.insertAt.apply(pp, insertAtArgs); + }; + function repairRelationshipWithParent(path) { + if (!(path instanceof Path)) { + throw new Error(""); + } + var pp = path.parentPath; + if (!pp) { + // Orphan paths have no relationship to repair. + return path; + } + var parentValue = pp.value; + var parentCache = getChildCache(pp); + // Make sure parentCache[path.name] is populated. + if (parentValue[path.name] === path.value) { + parentCache[path.name] = path; + } + else if (isArray.check(parentValue)) { + // Something caused path.name to become out of date, so attempt to + // recover by searching for path.value in parentValue. + var i = parentValue.indexOf(path.value); + if (i >= 0) { + parentCache[path.name = i] = path; + } + } + else { + // If path.value disagrees with parentValue[path.name], and + // path.name is not an array index, let path.value become the new + // parentValue[path.name] and update parentCache accordingly. + parentValue[path.name] = path.value; + parentCache[path.name] = path; + } + if (parentValue[path.name] !== path.value) { + throw new Error(""); + } + if (path.parentPath.get(path.name) !== path) { + throw new Error(""); + } + return path; + } + Pp.replace = function replace(replacement) { + var results = []; + var parentValue = this.parentPath.value; + var parentCache = getChildCache(this.parentPath); + var count = arguments.length; + repairRelationshipWithParent(this); + if (isArray.check(parentValue)) { + var originalLength = parentValue.length; + var move = getMoves(this.parentPath, count - 1, this.name + 1); + var spliceArgs = [this.name, 1]; + for (var i = 0; i < count; ++i) { + spliceArgs.push(arguments[i]); + } + var splicedOut = parentValue.splice.apply(parentValue, spliceArgs); + if (splicedOut[0] !== this.value) { + throw new Error(""); + } + if (parentValue.length !== (originalLength - 1 + count)) { + throw new Error(""); + } + move(); + if (count === 0) { + delete this.value; + delete parentCache[this.name]; + this.__childCache = null; + } + else { + if (parentValue[this.name] !== replacement) { + throw new Error(""); + } + if (this.value !== replacement) { + this.value = replacement; + this.__childCache = null; + } + for (i = 0; i < count; ++i) { + results.push(this.parentPath.get(this.name + i)); + } + if (results[0] !== this) { + throw new Error(""); + } + } + } + else if (count === 1) { + if (this.value !== replacement) { + this.__childCache = null; + } + this.value = parentValue[this.name] = replacement; + results.push(this); + } + else if (count === 0) { + delete parentValue[this.name]; + delete this.value; + this.__childCache = null; + // Leave this path cached as parentCache[this.name], even though + // it no longer has a value defined. + } + else { + throw new Error("Could not replace path"); + } + return results; + }; + return Path; +} +exports["default"] = pathPlugin; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/scope.js": +/*!************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/scope.js ***! + \************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ./types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +var hasOwn = Object.prototype.hasOwnProperty; +function scopePlugin(fork) { + var types = fork.use(types_1.default); + var Type = types.Type; + var namedTypes = types.namedTypes; + var Node = namedTypes.Node; + var Expression = namedTypes.Expression; + var isArray = types.builtInTypes.array; + var b = types.builders; + var Scope = function Scope(path, parentScope) { + if (!(this instanceof Scope)) { + throw new Error("Scope constructor cannot be invoked without 'new'"); + } + ScopeType.assert(path.value); + var depth; + if (parentScope) { + if (!(parentScope instanceof Scope)) { + throw new Error(""); + } + depth = parentScope.depth + 1; + } + else { + parentScope = null; + depth = 0; + } + Object.defineProperties(this, { + path: { value: path }, + node: { value: path.value }, + isGlobal: { value: !parentScope, enumerable: true }, + depth: { value: depth }, + parent: { value: parentScope }, + bindings: { value: {} }, + types: { value: {} }, + }); + }; + var scopeTypes = [ + // Program nodes introduce global scopes. + namedTypes.Program, + // Function is the supertype of FunctionExpression, + // FunctionDeclaration, ArrowExpression, etc. + namedTypes.Function, + // In case you didn't know, the caught parameter shadows any variable + // of the same name in an outer scope. + namedTypes.CatchClause + ]; + var ScopeType = Type.or.apply(Type, scopeTypes); + Scope.isEstablishedBy = function (node) { + return ScopeType.check(node); + }; + var Sp = Scope.prototype; + // Will be overridden after an instance lazily calls scanScope. + Sp.didScan = false; + Sp.declares = function (name) { + this.scan(); + return hasOwn.call(this.bindings, name); + }; + Sp.declaresType = function (name) { + this.scan(); + return hasOwn.call(this.types, name); + }; + Sp.declareTemporary = function (prefix) { + if (prefix) { + if (!/^[a-z$_]/i.test(prefix)) { + throw new Error(""); + } + } + else { + prefix = "t$"; + } + // Include this.depth in the name to make sure the name does not + // collide with any variables in nested/enclosing scopes. + prefix += this.depth.toString(36) + "$"; + this.scan(); + var index = 0; + while (this.declares(prefix + index)) { + ++index; + } + var name = prefix + index; + return this.bindings[name] = types.builders.identifier(name); + }; + Sp.injectTemporary = function (identifier, init) { + identifier || (identifier = this.declareTemporary()); + var bodyPath = this.path.get("body"); + if (namedTypes.BlockStatement.check(bodyPath.value)) { + bodyPath = bodyPath.get("body"); + } + bodyPath.unshift(b.variableDeclaration("var", [b.variableDeclarator(identifier, init || null)])); + return identifier; + }; + Sp.scan = function (force) { + if (force || !this.didScan) { + for (var name in this.bindings) { + // Empty out this.bindings, just in cases. + delete this.bindings[name]; + } + scanScope(this.path, this.bindings, this.types); + this.didScan = true; + } + }; + Sp.getBindings = function () { + this.scan(); + return this.bindings; + }; + Sp.getTypes = function () { + this.scan(); + return this.types; + }; + function scanScope(path, bindings, scopeTypes) { + var node = path.value; + ScopeType.assert(node); + if (namedTypes.CatchClause.check(node)) { + // A catch clause establishes a new scope but the only variable + // bound in that scope is the catch parameter. Any other + // declarations create bindings in the outer scope. + var param = path.get("param"); + if (param.value) { + addPattern(param, bindings); + } + } + else { + recursiveScanScope(path, bindings, scopeTypes); + } + } + function recursiveScanScope(path, bindings, scopeTypes) { + var node = path.value; + if (path.parent && + namedTypes.FunctionExpression.check(path.parent.node) && + path.parent.node.id) { + addPattern(path.parent.get("id"), bindings); + } + if (!node) { + // None of the remaining cases matter if node is falsy. + } + else if (isArray.check(node)) { + path.each(function (childPath) { + recursiveScanChild(childPath, bindings, scopeTypes); + }); + } + else if (namedTypes.Function.check(node)) { + path.get("params").each(function (paramPath) { + addPattern(paramPath, bindings); + }); + recursiveScanChild(path.get("body"), bindings, scopeTypes); + } + else if ((namedTypes.TypeAlias && namedTypes.TypeAlias.check(node)) || + (namedTypes.InterfaceDeclaration && namedTypes.InterfaceDeclaration.check(node)) || + (namedTypes.TSTypeAliasDeclaration && namedTypes.TSTypeAliasDeclaration.check(node)) || + (namedTypes.TSInterfaceDeclaration && namedTypes.TSInterfaceDeclaration.check(node))) { + addTypePattern(path.get("id"), scopeTypes); + } + else if (namedTypes.VariableDeclarator.check(node)) { + addPattern(path.get("id"), bindings); + recursiveScanChild(path.get("init"), bindings, scopeTypes); + } + else if (node.type === "ImportSpecifier" || + node.type === "ImportNamespaceSpecifier" || + node.type === "ImportDefaultSpecifier") { + addPattern( + // Esprima used to use the .name field to refer to the local + // binding identifier for ImportSpecifier nodes, but .id for + // ImportNamespaceSpecifier and ImportDefaultSpecifier nodes. + // ESTree/Acorn/ESpree use .local for all three node types. + path.get(node.local ? "local" : + node.name ? "name" : "id"), bindings); + } + else if (Node.check(node) && !Expression.check(node)) { + types.eachField(node, function (name, child) { + var childPath = path.get(name); + if (!pathHasValue(childPath, child)) { + throw new Error(""); + } + recursiveScanChild(childPath, bindings, scopeTypes); + }); + } + } + function pathHasValue(path, value) { + if (path.value === value) { + return true; + } + // Empty arrays are probably produced by defaults.emptyArray, in which + // case is makes sense to regard them as equivalent, if not ===. + if (Array.isArray(path.value) && + path.value.length === 0 && + Array.isArray(value) && + value.length === 0) { + return true; + } + return false; + } + function recursiveScanChild(path, bindings, scopeTypes) { + var node = path.value; + if (!node || Expression.check(node)) { + // Ignore falsy values and Expressions. + } + else if (namedTypes.FunctionDeclaration.check(node) && + node.id !== null) { + addPattern(path.get("id"), bindings); + } + else if (namedTypes.ClassDeclaration && + namedTypes.ClassDeclaration.check(node)) { + addPattern(path.get("id"), bindings); + } + else if (ScopeType.check(node)) { + if (namedTypes.CatchClause.check(node) && + // TODO Broaden this to accept any pattern. + namedTypes.Identifier.check(node.param)) { + var catchParamName = node.param.name; + var hadBinding = hasOwn.call(bindings, catchParamName); + // Any declarations that occur inside the catch body that do + // not have the same name as the catch parameter should count + // as bindings in the outer scope. + recursiveScanScope(path.get("body"), bindings, scopeTypes); + // If a new binding matching the catch parameter name was + // created while scanning the catch body, ignore it because it + // actually refers to the catch parameter and not the outer + // scope that we're currently scanning. + if (!hadBinding) { + delete bindings[catchParamName]; + } + } + } + else { + recursiveScanScope(path, bindings, scopeTypes); + } + } + function addPattern(patternPath, bindings) { + var pattern = patternPath.value; + namedTypes.Pattern.assert(pattern); + if (namedTypes.Identifier.check(pattern)) { + if (hasOwn.call(bindings, pattern.name)) { + bindings[pattern.name].push(patternPath); + } + else { + bindings[pattern.name] = [patternPath]; + } + } + else if (namedTypes.AssignmentPattern && + namedTypes.AssignmentPattern.check(pattern)) { + addPattern(patternPath.get('left'), bindings); + } + else if (namedTypes.ObjectPattern && + namedTypes.ObjectPattern.check(pattern)) { + patternPath.get('properties').each(function (propertyPath) { + var property = propertyPath.value; + if (namedTypes.Pattern.check(property)) { + addPattern(propertyPath, bindings); + } + else if (namedTypes.Property.check(property)) { + addPattern(propertyPath.get('value'), bindings); + } + else if (namedTypes.SpreadProperty && + namedTypes.SpreadProperty.check(property)) { + addPattern(propertyPath.get('argument'), bindings); + } + }); + } + else if (namedTypes.ArrayPattern && + namedTypes.ArrayPattern.check(pattern)) { + patternPath.get('elements').each(function (elementPath) { + var element = elementPath.value; + if (namedTypes.Pattern.check(element)) { + addPattern(elementPath, bindings); + } + else if (namedTypes.SpreadElement && + namedTypes.SpreadElement.check(element)) { + addPattern(elementPath.get("argument"), bindings); + } + }); + } + else if (namedTypes.PropertyPattern && + namedTypes.PropertyPattern.check(pattern)) { + addPattern(patternPath.get('pattern'), bindings); + } + else if ((namedTypes.SpreadElementPattern && + namedTypes.SpreadElementPattern.check(pattern)) || + (namedTypes.SpreadPropertyPattern && + namedTypes.SpreadPropertyPattern.check(pattern))) { + addPattern(patternPath.get('argument'), bindings); + } + } + function addTypePattern(patternPath, types) { + var pattern = patternPath.value; + namedTypes.Pattern.assert(pattern); + if (namedTypes.Identifier.check(pattern)) { + if (hasOwn.call(types, pattern.name)) { + types[pattern.name].push(patternPath); + } + else { + types[pattern.name] = [patternPath]; + } + } + } + Sp.lookup = function (name) { + for (var scope = this; scope; scope = scope.parent) + if (scope.declares(name)) + break; + return scope; + }; + Sp.lookupType = function (name) { + for (var scope = this; scope; scope = scope.parent) + if (scope.declaresType(name)) + break; + return scope; + }; + Sp.getGlobalScope = function () { + var scope = this; + while (!scope.isGlobal) + scope = scope.parent; + return scope; + }; + return Scope; +} +exports["default"] = scopePlugin; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js": +/*!*************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/shared.js ***! + \*************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var types_1 = tslib_1.__importDefault(__webpack_require__(/*! ./types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js")); +function default_1(fork) { + var types = fork.use(types_1.default); + var Type = types.Type; + var builtin = types.builtInTypes; + var isNumber = builtin.number; + // An example of constructing a new type with arbitrary constraints from + // an existing type. + function geq(than) { + return Type.from(function (value) { return isNumber.check(value) && value >= than; }, isNumber + " >= " + than); + } + ; + // Default value-returning functions that may optionally be passed as a + // third argument to Def.prototype.field. + var defaults = { + // Functions were used because (among other reasons) that's the most + // elegant way to allow for the emptyArray one always to give a new + // array instance. + "null": function () { return null; }, + "emptyArray": function () { return []; }, + "false": function () { return false; }, + "true": function () { return true; }, + "undefined": function () { }, + "use strict": function () { return "use strict"; } + }; + var naiveIsPrimitive = Type.or(builtin.string, builtin.number, builtin.boolean, builtin.null, builtin.undefined); + var isPrimitive = Type.from(function (value) { + if (value === null) + return true; + var type = typeof value; + if (type === "object" || + type === "function") { + return false; + } + return true; + }, naiveIsPrimitive.toString()); + return { + geq: geq, + defaults: defaults, + isPrimitive: isPrimitive, + }; +} +exports["default"] = default_1; +module.exports = exports["default"]; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js": +/*!************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/lib/types.js ***! + \************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Def = void 0; +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var Op = Object.prototype; +var objToStr = Op.toString; +var hasOwn = Op.hasOwnProperty; +var BaseType = /** @class */ (function () { + function BaseType() { + } + BaseType.prototype.assert = function (value, deep) { + if (!this.check(value, deep)) { + var str = shallowStringify(value); + throw new Error(str + " does not match type " + this); + } + return true; + }; + BaseType.prototype.arrayOf = function () { + var elemType = this; + return new ArrayType(elemType); + }; + return BaseType; +}()); +var ArrayType = /** @class */ (function (_super) { + tslib_1.__extends(ArrayType, _super); + function ArrayType(elemType) { + var _this = _super.call(this) || this; + _this.elemType = elemType; + _this.kind = "ArrayType"; + return _this; + } + ArrayType.prototype.toString = function () { + return "[" + this.elemType + "]"; + }; + ArrayType.prototype.check = function (value, deep) { + var _this = this; + return Array.isArray(value) && value.every(function (elem) { return _this.elemType.check(elem, deep); }); + }; + return ArrayType; +}(BaseType)); +var IdentityType = /** @class */ (function (_super) { + tslib_1.__extends(IdentityType, _super); + function IdentityType(value) { + var _this = _super.call(this) || this; + _this.value = value; + _this.kind = "IdentityType"; + return _this; + } + IdentityType.prototype.toString = function () { + return String(this.value); + }; + IdentityType.prototype.check = function (value, deep) { + var result = value === this.value; + if (!result && typeof deep === "function") { + deep(this, value); + } + return result; + }; + return IdentityType; +}(BaseType)); +var ObjectType = /** @class */ (function (_super) { + tslib_1.__extends(ObjectType, _super); + function ObjectType(fields) { + var _this = _super.call(this) || this; + _this.fields = fields; + _this.kind = "ObjectType"; + return _this; + } + ObjectType.prototype.toString = function () { + return "{ " + this.fields.join(", ") + " }"; + }; + ObjectType.prototype.check = function (value, deep) { + return (objToStr.call(value) === objToStr.call({}) && + this.fields.every(function (field) { + return field.type.check(value[field.name], deep); + })); + }; + return ObjectType; +}(BaseType)); +var OrType = /** @class */ (function (_super) { + tslib_1.__extends(OrType, _super); + function OrType(types) { + var _this = _super.call(this) || this; + _this.types = types; + _this.kind = "OrType"; + return _this; + } + OrType.prototype.toString = function () { + return this.types.join(" | "); + }; + OrType.prototype.check = function (value, deep) { + return this.types.some(function (type) { + return type.check(value, deep); + }); + }; + return OrType; +}(BaseType)); +var PredicateType = /** @class */ (function (_super) { + tslib_1.__extends(PredicateType, _super); + function PredicateType(name, predicate) { + var _this = _super.call(this) || this; + _this.name = name; + _this.predicate = predicate; + _this.kind = "PredicateType"; + return _this; + } + PredicateType.prototype.toString = function () { + return this.name; + }; + PredicateType.prototype.check = function (value, deep) { + var result = this.predicate(value, deep); + if (!result && typeof deep === "function") { + deep(this, value); + } + return result; + }; + return PredicateType; +}(BaseType)); +var Def = /** @class */ (function () { + function Def(type, typeName) { + this.type = type; + this.typeName = typeName; + this.baseNames = []; + this.ownFields = Object.create(null); + // Includes own typeName. Populated during finalization. + this.allSupertypes = Object.create(null); + // Linear inheritance hierarchy. Populated during finalization. + this.supertypeList = []; + // Includes inherited fields. + this.allFields = Object.create(null); + // Non-hidden keys of allFields. + this.fieldNames = []; + // This property will be overridden as true by individual Def instances + // when they are finalized. + this.finalized = false; + // False by default until .build(...) is called on an instance. + this.buildable = false; + this.buildParams = []; + } + Def.prototype.isSupertypeOf = function (that) { + if (that instanceof Def) { + if (this.finalized !== true || + that.finalized !== true) { + throw new Error(""); + } + return hasOwn.call(that.allSupertypes, this.typeName); + } + else { + throw new Error(that + " is not a Def"); + } + }; + Def.prototype.checkAllFields = function (value, deep) { + var allFields = this.allFields; + if (this.finalized !== true) { + throw new Error("" + this.typeName); + } + function checkFieldByName(name) { + var field = allFields[name]; + var type = field.type; + var child = field.getValue(value); + return type.check(child, deep); + } + return value !== null && + typeof value === "object" && + Object.keys(allFields).every(checkFieldByName); + }; + Def.prototype.bases = function () { + var supertypeNames = []; + for (var _i = 0; _i < arguments.length; _i++) { + supertypeNames[_i] = arguments[_i]; + } + var bases = this.baseNames; + if (this.finalized) { + if (supertypeNames.length !== bases.length) { + throw new Error(""); + } + for (var i = 0; i < supertypeNames.length; i++) { + if (supertypeNames[i] !== bases[i]) { + throw new Error(""); + } + } + return this; + } + supertypeNames.forEach(function (baseName) { + // This indexOf lookup may be O(n), but the typical number of base + // names is very small, and indexOf is a native Array method. + if (bases.indexOf(baseName) < 0) { + bases.push(baseName); + } + }); + return this; // For chaining. + }; + return Def; +}()); +exports.Def = Def; +var Field = /** @class */ (function () { + function Field(name, type, defaultFn, hidden) { + this.name = name; + this.type = type; + this.defaultFn = defaultFn; + this.hidden = !!hidden; + } + Field.prototype.toString = function () { + return JSON.stringify(this.name) + ": " + this.type; + }; + Field.prototype.getValue = function (obj) { + var value = obj[this.name]; + if (typeof value !== "undefined") { + return value; + } + if (typeof this.defaultFn === "function") { + value = this.defaultFn.call(obj); + } + return value; + }; + return Field; +}()); +function shallowStringify(value) { + if (Array.isArray(value)) { + return "[" + value.map(shallowStringify).join(", ") + "]"; + } + if (value && typeof value === "object") { + return "{ " + Object.keys(value).map(function (key) { + return key + ": " + value[key]; + }).join(", ") + " }"; + } + return JSON.stringify(value); +} +function typesPlugin(_fork) { + var Type = { + or: function () { + var types = []; + for (var _i = 0; _i < arguments.length; _i++) { + types[_i] = arguments[_i]; + } + return new OrType(types.map(function (type) { return Type.from(type); })); + }, + from: function (value, name) { + if (value instanceof ArrayType || + value instanceof IdentityType || + value instanceof ObjectType || + value instanceof OrType || + value instanceof PredicateType) { + return value; + } + // The Def type is used as a helper for constructing compound + // interface types for AST nodes. + if (value instanceof Def) { + return value.type; + } + // Support [ElemType] syntax. + if (isArray.check(value)) { + if (value.length !== 1) { + throw new Error("only one element type is permitted for typed arrays"); + } + return new ArrayType(Type.from(value[0])); + } + // Support { someField: FieldType, ... } syntax. + if (isObject.check(value)) { + return new ObjectType(Object.keys(value).map(function (name) { + return new Field(name, Type.from(value[name], name)); + })); + } + if (typeof value === "function") { + var bicfIndex = builtInCtorFns.indexOf(value); + if (bicfIndex >= 0) { + return builtInCtorTypes[bicfIndex]; + } + if (typeof name !== "string") { + throw new Error("missing name"); + } + return new PredicateType(name, value); + } + // As a last resort, toType returns a type that matches any value that + // is === from. This is primarily useful for literal values like + // toType(null), but it has the additional advantage of allowing + // toType to be a total function. + return new IdentityType(value); + }, + // Define a type whose name is registered in a namespace (the defCache) so + // that future definitions will return the same type given the same name. + // In particular, this system allows for circular and forward definitions. + // The Def object d returned from Type.def may be used to configure the + // type d.type by calling methods such as d.bases, d.build, and d.field. + def: function (typeName) { + return hasOwn.call(defCache, typeName) + ? defCache[typeName] + : defCache[typeName] = new DefImpl(typeName); + }, + hasDef: function (typeName) { + return hasOwn.call(defCache, typeName); + } + }; + var builtInCtorFns = []; + var builtInCtorTypes = []; + function defBuiltInType(name, example) { + var objStr = objToStr.call(example); + var type = new PredicateType(name, function (value) { return objToStr.call(value) === objStr; }); + if (example && typeof example.constructor === "function") { + builtInCtorFns.push(example.constructor); + builtInCtorTypes.push(type); + } + return type; + } + // These types check the underlying [[Class]] attribute of the given + // value, rather than using the problematic typeof operator. Note however + // that no subtyping is considered; so, for instance, isObject.check + // returns false for [], /./, new Date, and null. + var isString = defBuiltInType("string", "truthy"); + var isFunction = defBuiltInType("function", function () { }); + var isArray = defBuiltInType("array", []); + var isObject = defBuiltInType("object", {}); + var isRegExp = defBuiltInType("RegExp", /./); + var isDate = defBuiltInType("Date", new Date()); + var isNumber = defBuiltInType("number", 3); + var isBoolean = defBuiltInType("boolean", true); + var isNull = defBuiltInType("null", null); + var isUndefined = defBuiltInType("undefined", undefined); + var builtInTypes = { + string: isString, + function: isFunction, + array: isArray, + object: isObject, + RegExp: isRegExp, + Date: isDate, + number: isNumber, + boolean: isBoolean, + null: isNull, + undefined: isUndefined, + }; + // In order to return the same Def instance every time Type.def is called + // with a particular name, those instances need to be stored in a cache. + var defCache = Object.create(null); + function defFromValue(value) { + if (value && typeof value === "object") { + var type = value.type; + if (typeof type === "string" && + hasOwn.call(defCache, type)) { + var d = defCache[type]; + if (d.finalized) { + return d; + } + } + } + return null; + } + var DefImpl = /** @class */ (function (_super) { + tslib_1.__extends(DefImpl, _super); + function DefImpl(typeName) { + var _this = _super.call(this, new PredicateType(typeName, function (value, deep) { return _this.check(value, deep); }), typeName) || this; + return _this; + } + DefImpl.prototype.check = function (value, deep) { + if (this.finalized !== true) { + throw new Error("prematurely checking unfinalized type " + this.typeName); + } + // A Def type can only match an object value. + if (value === null || typeof value !== "object") { + return false; + } + var vDef = defFromValue(value); + if (!vDef) { + // If we couldn't infer the Def associated with the given value, + // and we expected it to be a SourceLocation or a Position, it was + // probably just missing a "type" field (because Esprima does not + // assign a type property to such nodes). Be optimistic and let + // this.checkAllFields make the final decision. + if (this.typeName === "SourceLocation" || + this.typeName === "Position") { + return this.checkAllFields(value, deep); + } + // Calling this.checkAllFields for any other type of node is both + // bad for performance and way too forgiving. + return false; + } + // If checking deeply and vDef === this, then we only need to call + // checkAllFields once. Calling checkAllFields is too strict when deep + // is false, because then we only care about this.isSupertypeOf(vDef). + if (deep && vDef === this) { + return this.checkAllFields(value, deep); + } + // In most cases we rely exclusively on isSupertypeOf to make O(1) + // subtyping determinations. This suffices in most situations outside + // of unit tests, since interface conformance is checked whenever new + // instances are created using builder functions. + if (!this.isSupertypeOf(vDef)) { + return false; + } + // The exception is when deep is true; then, we recursively check all + // fields. + if (!deep) { + return true; + } + // Use the more specific Def (vDef) to perform the deep check, but + // shallow-check fields defined by the less specific Def (this). + return vDef.checkAllFields(value, deep) + && this.checkAllFields(value, false); + }; + DefImpl.prototype.build = function () { + var _this = this; + var buildParams = []; + for (var _i = 0; _i < arguments.length; _i++) { + buildParams[_i] = arguments[_i]; + } + // Calling Def.prototype.build multiple times has the effect of merely + // redefining this property. + this.buildParams = buildParams; + if (this.buildable) { + // If this Def is already buildable, update self.buildParams and + // continue using the old builder function. + return this; + } + // Every buildable type will have its "type" field filled in + // automatically. This includes types that are not subtypes of Node, + // like SourceLocation, but that seems harmless (TODO?). + this.field("type", String, function () { return _this.typeName; }); + // Override Dp.buildable for this Def instance. + this.buildable = true; + var addParam = function (built, param, arg, isArgAvailable) { + if (hasOwn.call(built, param)) + return; + var all = _this.allFields; + if (!hasOwn.call(all, param)) { + throw new Error("" + param); + } + var field = all[param]; + var type = field.type; + var value; + if (isArgAvailable) { + value = arg; + } + else if (field.defaultFn) { + // Expose the partially-built object to the default + // function as its `this` object. + value = field.defaultFn.call(built); + } + else { + var message = "no value or default function given for field " + + JSON.stringify(param) + " of " + _this.typeName + "(" + + _this.buildParams.map(function (name) { + return all[name]; + }).join(", ") + ")"; + throw new Error(message); + } + if (!type.check(value)) { + throw new Error(shallowStringify(value) + + " does not match field " + field + + " of type " + _this.typeName); + } + built[param] = value; + }; + // Calling the builder function will construct an instance of the Def, + // with positional arguments mapped to the fields original passed to .build. + // If not enough arguments are provided, the default value for the remaining fields + // will be used. + var builder = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var argc = args.length; + if (!_this.finalized) { + throw new Error("attempting to instantiate unfinalized type " + + _this.typeName); + } + var built = Object.create(nodePrototype); + _this.buildParams.forEach(function (param, i) { + if (i < argc) { + addParam(built, param, args[i], true); + } + else { + addParam(built, param, null, false); + } + }); + Object.keys(_this.allFields).forEach(function (param) { + // Use the default value. + addParam(built, param, null, false); + }); + // Make sure that the "type" field was filled automatically. + if (built.type !== _this.typeName) { + throw new Error(""); + } + return built; + }; + // Calling .from on the builder function will construct an instance of the Def, + // using field values from the passed object. For fields missing from the passed object, + // their default value will be used. + builder.from = function (obj) { + if (!_this.finalized) { + throw new Error("attempting to instantiate unfinalized type " + + _this.typeName); + } + var built = Object.create(nodePrototype); + Object.keys(_this.allFields).forEach(function (param) { + if (hasOwn.call(obj, param)) { + addParam(built, param, obj[param], true); + } + else { + addParam(built, param, null, false); + } + }); + // Make sure that the "type" field was filled automatically. + if (built.type !== _this.typeName) { + throw new Error(""); + } + return built; + }; + Object.defineProperty(builders, getBuilderName(this.typeName), { + enumerable: true, + value: builder + }); + return this; + }; + // The reason fields are specified using .field(...) instead of an object + // literal syntax is somewhat subtle: the object literal syntax would + // support only one key and one value, but with .field(...) we can pass + // any number of arguments to specify the field. + DefImpl.prototype.field = function (name, type, defaultFn, hidden) { + if (this.finalized) { + console.error("Ignoring attempt to redefine field " + + JSON.stringify(name) + " of finalized type " + + JSON.stringify(this.typeName)); + return this; + } + this.ownFields[name] = new Field(name, Type.from(type), defaultFn, hidden); + return this; // For chaining. + }; + DefImpl.prototype.finalize = function () { + var _this = this; + // It's not an error to finalize a type more than once, but only the + // first call to .finalize does anything. + if (!this.finalized) { + var allFields = this.allFields; + var allSupertypes = this.allSupertypes; + this.baseNames.forEach(function (name) { + var def = defCache[name]; + if (def instanceof Def) { + def.finalize(); + extend(allFields, def.allFields); + extend(allSupertypes, def.allSupertypes); + } + else { + var message = "unknown supertype name " + + JSON.stringify(name) + + " for subtype " + + JSON.stringify(_this.typeName); + throw new Error(message); + } + }); + // TODO Warn if fields are overridden with incompatible types. + extend(allFields, this.ownFields); + allSupertypes[this.typeName] = this; + this.fieldNames.length = 0; + for (var fieldName in allFields) { + if (hasOwn.call(allFields, fieldName) && + !allFields[fieldName].hidden) { + this.fieldNames.push(fieldName); + } + } + // Types are exported only once they have been finalized. + Object.defineProperty(namedTypes, this.typeName, { + enumerable: true, + value: this.type + }); + this.finalized = true; + // A linearization of the inheritance hierarchy. + populateSupertypeList(this.typeName, this.supertypeList); + if (this.buildable && + this.supertypeList.lastIndexOf("Expression") >= 0) { + wrapExpressionBuilderWithStatement(this.typeName); + } + } + }; + return DefImpl; + }(Def)); + // Note that the list returned by this function is a copy of the internal + // supertypeList, *without* the typeName itself as the first element. + function getSupertypeNames(typeName) { + if (!hasOwn.call(defCache, typeName)) { + throw new Error(""); + } + var d = defCache[typeName]; + if (d.finalized !== true) { + throw new Error(""); + } + return d.supertypeList.slice(1); + } + // Returns an object mapping from every known type in the defCache to the + // most specific supertype whose name is an own property of the candidates + // object. + function computeSupertypeLookupTable(candidates) { + var table = {}; + var typeNames = Object.keys(defCache); + var typeNameCount = typeNames.length; + for (var i = 0; i < typeNameCount; ++i) { + var typeName = typeNames[i]; + var d = defCache[typeName]; + if (d.finalized !== true) { + throw new Error("" + typeName); + } + for (var j = 0; j < d.supertypeList.length; ++j) { + var superTypeName = d.supertypeList[j]; + if (hasOwn.call(candidates, superTypeName)) { + table[typeName] = superTypeName; + break; + } + } + } + return table; + } + var builders = Object.create(null); + // This object is used as prototype for any node created by a builder. + var nodePrototype = {}; + // Call this function to define a new method to be shared by all AST + // nodes. The replaced method (if any) is returned for easy wrapping. + function defineMethod(name, func) { + var old = nodePrototype[name]; + // Pass undefined as func to delete nodePrototype[name]. + if (isUndefined.check(func)) { + delete nodePrototype[name]; + } + else { + isFunction.assert(func); + Object.defineProperty(nodePrototype, name, { + enumerable: true, + configurable: true, + value: func + }); + } + return old; + } + function getBuilderName(typeName) { + return typeName.replace(/^[A-Z]+/, function (upperCasePrefix) { + var len = upperCasePrefix.length; + switch (len) { + case 0: return ""; + // If there's only one initial capital letter, just lower-case it. + case 1: return upperCasePrefix.toLowerCase(); + default: + // If there's more than one initial capital letter, lower-case + // all but the last one, so that XMLDefaultDeclaration (for + // example) becomes xmlDefaultDeclaration. + return upperCasePrefix.slice(0, len - 1).toLowerCase() + + upperCasePrefix.charAt(len - 1); + } + }); + } + function getStatementBuilderName(typeName) { + typeName = getBuilderName(typeName); + return typeName.replace(/(Expression)?$/, "Statement"); + } + var namedTypes = {}; + // Like Object.keys, but aware of what fields each AST type should have. + function getFieldNames(object) { + var d = defFromValue(object); + if (d) { + return d.fieldNames.slice(0); + } + if ("type" in object) { + throw new Error("did not recognize object of type " + + JSON.stringify(object.type)); + } + return Object.keys(object); + } + // Get the value of an object property, taking object.type and default + // functions into account. + function getFieldValue(object, fieldName) { + var d = defFromValue(object); + if (d) { + var field = d.allFields[fieldName]; + if (field) { + return field.getValue(object); + } + } + return object && object[fieldName]; + } + // Iterate over all defined fields of an object, including those missing + // or undefined, passing each field name and effective value (as returned + // by getFieldValue) to the callback. If the object has no corresponding + // Def, the callback will never be called. + function eachField(object, callback, context) { + getFieldNames(object).forEach(function (name) { + callback.call(this, name, getFieldValue(object, name)); + }, context); + } + // Similar to eachField, except that iteration stops as soon as the + // callback returns a truthy value. Like Array.prototype.some, the final + // result is either true or false to indicates whether the callback + // returned true for any element or not. + function someField(object, callback, context) { + return getFieldNames(object).some(function (name) { + return callback.call(this, name, getFieldValue(object, name)); + }, context); + } + // Adds an additional builder for Expression subtypes + // that wraps the built Expression in an ExpressionStatements. + function wrapExpressionBuilderWithStatement(typeName) { + var wrapperName = getStatementBuilderName(typeName); + // skip if the builder already exists + if (builders[wrapperName]) + return; + // the builder function to wrap with builders.ExpressionStatement + var wrapped = builders[getBuilderName(typeName)]; + // skip if there is nothing to wrap + if (!wrapped) + return; + var builder = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return builders.expressionStatement(wrapped.apply(builders, args)); + }; + builder.from = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return builders.expressionStatement(wrapped.from.apply(builders, args)); + }; + builders[wrapperName] = builder; + } + function populateSupertypeList(typeName, list) { + list.length = 0; + list.push(typeName); + var lastSeen = Object.create(null); + for (var pos = 0; pos < list.length; ++pos) { + typeName = list[pos]; + var d = defCache[typeName]; + if (d.finalized !== true) { + throw new Error(""); + } + // If we saw typeName earlier in the breadth-first traversal, + // delete the last-seen occurrence. + if (hasOwn.call(lastSeen, typeName)) { + delete list[lastSeen[typeName]]; + } + // Record the new index of the last-seen occurrence of typeName. + lastSeen[typeName] = pos; + // Enqueue the base names of this type. + list.push.apply(list, d.baseNames); + } + // Compaction loop to remove array holes. + for (var to = 0, from = to, len = list.length; from < len; ++from) { + if (hasOwn.call(list, from)) { + list[to++] = list[from]; + } + } + list.length = to; + } + function extend(into, from) { + Object.keys(from).forEach(function (name) { + into[name] = from[name]; + }); + return into; + } + function finalize() { + Object.keys(defCache).forEach(function (name) { + defCache[name].finalize(); + }); + } + return { + Type: Type, + builtInTypes: builtInTypes, + getSupertypeNames: getSupertypeNames, + computeSupertypeLookupTable: computeSupertypeLookupTable, + builders: builders, + defineMethod: defineMethod, + getBuilderName: getBuilderName, + getStatementBuilderName: getStatementBuilderName, + namedTypes: namedTypes, + getFieldNames: getFieldNames, + getFieldValue: getFieldValue, + eachField: eachField, + someField: someField, + finalize: finalize, + }; +} +exports["default"] = typesPlugin; +; + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/main.js": +/*!*******************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/main.js ***! + \*******************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.visit = exports.use = exports.Type = exports.someField = exports.PathVisitor = exports.Path = exports.NodePath = exports.namedTypes = exports.getSupertypeNames = exports.getFieldValue = exports.getFieldNames = exports.getBuilderName = exports.finalize = exports.eachField = exports.defineMethod = exports.builtInTypes = exports.builders = exports.astNodesAreEquivalent = void 0; +var tslib_1 = __webpack_require__(/*! tslib */ "../../../.yarn/berry/cache/tslib-npm-2.4.0-9cb6dc5030-9.zip/node_modules/tslib/tslib.es6.js"); +var fork_1 = tslib_1.__importDefault(__webpack_require__(/*! ./fork */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/fork.js")); +var core_1 = tslib_1.__importDefault(__webpack_require__(/*! ./def/core */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/core.js")); +var es6_1 = tslib_1.__importDefault(__webpack_require__(/*! ./def/es6 */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es6.js")); +var es7_1 = tslib_1.__importDefault(__webpack_require__(/*! ./def/es7 */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es7.js")); +var es2020_1 = tslib_1.__importDefault(__webpack_require__(/*! ./def/es2020 */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es2020.js")); +var jsx_1 = tslib_1.__importDefault(__webpack_require__(/*! ./def/jsx */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/jsx.js")); +var flow_1 = tslib_1.__importDefault(__webpack_require__(/*! ./def/flow */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/flow.js")); +var esprima_1 = tslib_1.__importDefault(__webpack_require__(/*! ./def/esprima */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/esprima.js")); +var babel_1 = tslib_1.__importDefault(__webpack_require__(/*! ./def/babel */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/babel.js")); +var typescript_1 = tslib_1.__importDefault(__webpack_require__(/*! ./def/typescript */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/typescript.js")); +var es_proposals_1 = tslib_1.__importDefault(__webpack_require__(/*! ./def/es-proposals */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/def/es-proposals.js")); +var namedTypes_1 = __webpack_require__(/*! ./gen/namedTypes */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/gen/namedTypes.js"); +Object.defineProperty(exports, "namedTypes", ({ enumerable: true, get: function () { return namedTypes_1.namedTypes; } })); +var _a = fork_1.default([ + // This core module of AST types captures ES5 as it is parsed today by + // git://github.com/ariya/esprima.git#master. + core_1.default, + // Feel free to add to or remove from this list of extension modules to + // configure the precise type hierarchy that you need. + es6_1.default, + es7_1.default, + es2020_1.default, + jsx_1.default, + flow_1.default, + esprima_1.default, + babel_1.default, + typescript_1.default, + es_proposals_1.default, +]), astNodesAreEquivalent = _a.astNodesAreEquivalent, builders = _a.builders, builtInTypes = _a.builtInTypes, defineMethod = _a.defineMethod, eachField = _a.eachField, finalize = _a.finalize, getBuilderName = _a.getBuilderName, getFieldNames = _a.getFieldNames, getFieldValue = _a.getFieldValue, getSupertypeNames = _a.getSupertypeNames, n = _a.namedTypes, NodePath = _a.NodePath, Path = _a.Path, PathVisitor = _a.PathVisitor, someField = _a.someField, Type = _a.Type, use = _a.use, visit = _a.visit; +exports.astNodesAreEquivalent = astNodesAreEquivalent; +exports.builders = builders; +exports.builtInTypes = builtInTypes; +exports.defineMethod = defineMethod; +exports.eachField = eachField; +exports.finalize = finalize; +exports.getBuilderName = getBuilderName; +exports.getFieldNames = getFieldNames; +exports.getFieldValue = getFieldValue; +exports.getSupertypeNames = getSupertypeNames; +exports.NodePath = NodePath; +exports.Path = Path; +exports.PathVisitor = PathVisitor; +exports.someField = someField; +exports.Type = Type; +exports.use = use; +exports.visit = visit; +// Populate the exported fields of the namedTypes namespace, while still +// retaining its member types. +Object.assign(namedTypes_1.namedTypes, n); + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/bytes-npm-3.1.2-28b8643004-9.zip/node_modules/bytes/index.js": +/*!***********************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/bytes-npm-3.1.2-28b8643004-9.zip/node_modules/bytes/index.js ***! + \***********************************************************************************************/ +/***/ ((module) => { + +"use strict"; +/*! + * bytes + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015 Jed Watson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = bytes; +module.exports.format = format; +module.exports.parse = parse; + +/** + * Module variables. + * @private + */ + +var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; + +var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; + +var map = { + b: 1, + kb: 1 << 10, + mb: 1 << 20, + gb: 1 << 30, + tb: Math.pow(1024, 4), + pb: Math.pow(1024, 5), +}; + +var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i; + +/** + * Convert the given value in bytes into a string or parse to string to an integer in bytes. + * + * @param {string|number} value + * @param {{ + * case: [string], + * decimalPlaces: [number] + * fixedDecimals: [boolean] + * thousandsSeparator: [string] + * unitSeparator: [string] + * }} [options] bytes options. + * + * @returns {string|number|null} + */ + +function bytes(value, options) { + if (typeof value === 'string') { + return parse(value); + } + + if (typeof value === 'number') { + return format(value, options); + } + + return null; +} + +/** + * Format the given value in bytes into a string. + * + * If the value is negative, it is kept as such. If it is a float, + * it is rounded. + * + * @param {number} value + * @param {object} [options] + * @param {number} [options.decimalPlaces=2] + * @param {number} [options.fixedDecimals=false] + * @param {string} [options.thousandsSeparator=] + * @param {string} [options.unit=] + * @param {string} [options.unitSeparator=] + * + * @returns {string|null} + * @public + */ + +function format(value, options) { + if (!Number.isFinite(value)) { + return null; + } + + var mag = Math.abs(value); + var thousandsSeparator = (options && options.thousandsSeparator) || ''; + var unitSeparator = (options && options.unitSeparator) || ''; + var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2; + var fixedDecimals = Boolean(options && options.fixedDecimals); + var unit = (options && options.unit) || ''; + + if (!unit || !map[unit.toLowerCase()]) { + if (mag >= map.pb) { + unit = 'PB'; + } else if (mag >= map.tb) { + unit = 'TB'; + } else if (mag >= map.gb) { + unit = 'GB'; + } else if (mag >= map.mb) { + unit = 'MB'; + } else if (mag >= map.kb) { + unit = 'KB'; + } else { + unit = 'B'; + } + } + + var val = value / map[unit.toLowerCase()]; + var str = val.toFixed(decimalPlaces); + + if (!fixedDecimals) { + str = str.replace(formatDecimalsRegExp, '$1'); + } + + if (thousandsSeparator) { + str = str.split('.').map(function (s, i) { + return i === 0 + ? s.replace(formatThousandsRegExp, thousandsSeparator) + : s + }).join('.'); + } + + return str + unitSeparator + unit; +} + +/** + * Parse the string value into an integer in bytes. + * + * If no unit is given, it is assumed the value is in bytes. + * + * @param {number|string} val + * + * @returns {number|null} + * @public + */ + +function parse(val) { + if (typeof val === 'number' && !isNaN(val)) { + return val; + } + + if (typeof val !== 'string') { + return null; + } + + // Test if the string passed is valid + var results = parseRegExp.exec(val); + var floatValue; + var unit = 'b'; + + if (!results) { + // Nothing could be extracted from the given string + floatValue = parseInt(val, 10); + unit = 'b' + } else { + // Retrieve the value and the unit + floatValue = parseFloat(results[1]); + unit = results[4].toLowerCase(); + } + + if (isNaN(floatValue)) { + return null; + } + + return Math.floor(map[unit] * floatValue); +} + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/core-util-is-npm-1.0.3-ca74b76c90-9.zip/node_modules/core-util-is/lib/util.js": +/*!****************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/core-util-is-npm-1.0.3-ca74b76c90-9.zip/node_modules/core-util-is/lib/util.js ***! + \****************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = __webpack_require__(/*! buffer */ "buffer").Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/data-uri-to-buffer-npm-3.0.1-830646f9ee-9.zip/node_modules/data-uri-to-buffer/dist/src/index.js": +/*!**********************************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/data-uri-to-buffer-npm-3.0.1-830646f9ee-9.zip/node_modules/data-uri-to-buffer/dist/src/index.js ***! + \**********************************************************************************************************************************/ +/***/ ((module) => { + +"use strict"; + +/** + * Returns a `Buffer` instance from the given data URI `uri`. + * + * @param {String} uri Data URI to turn into a Buffer instance + * @return {Buffer} Buffer instance from Data URI + * @api public + */ +function dataUriToBuffer(uri) { + if (!/^data:/i.test(uri)) { + throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")'); + } + // strip newlines + uri = uri.replace(/\r?\n/g, ''); + // split the URI up into the "metadata" and the "data" portions + const firstComma = uri.indexOf(','); + if (firstComma === -1 || firstComma <= 4) { + throw new TypeError('malformed data: URI'); + } + // remove the "data:" scheme and parse the metadata + const meta = uri.substring(5, firstComma).split(';'); + let charset = ''; + let base64 = false; + const type = meta[0] || 'text/plain'; + let typeFull = type; + for (let i = 1; i < meta.length; i++) { + if (meta[i] === 'base64') { + base64 = true; + } + else { + typeFull += `;${meta[i]}`; + if (meta[i].indexOf('charset=') === 0) { + charset = meta[i].substring(8); + } + } + } + // defaults to US-ASCII only if type is not provided + if (!meta[0] && !charset.length) { + typeFull += ';charset=US-ASCII'; + charset = 'US-ASCII'; + } + // get the encoded data portion and decode URI-encoded chars + const encoding = base64 ? 'base64' : 'ascii'; + const data = unescape(uri.substring(firstComma + 1)); + const buffer = Buffer.from(data, encoding); + // set `.type` and `.typeFull` properties to MIME type + buffer.type = type; + buffer.typeFull = typeFull; + // set the `.charset` property + buffer.charset = charset; + return buffer; +} +module.exports = dataUriToBuffer; +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ "../../../.yarn/berry/cache/degenerator-npm-3.0.2-3b38df9d12-9.zip/node_modules/degenerator/dist/src/index.js": +/*!********************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/degenerator-npm-3.0.2-3b38df9d12-9.zip/node_modules/degenerator/dist/src/index.js ***! + \********************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +const util_1 = __webpack_require__(/*! util */ "util"); +const escodegen_1 = __webpack_require__(/*! escodegen */ "../../../.yarn/berry/cache/escodegen-npm-1.14.3-a4dedc6eeb-9.zip/node_modules/escodegen/escodegen.js"); +const esprima_1 = __webpack_require__(/*! esprima */ "../../../.yarn/berry/cache/esprima-npm-4.0.1-1084e98778-9.zip/node_modules/esprima/dist/esprima.js"); +const ast_types_1 = __webpack_require__(/*! ast-types */ "../../../.yarn/berry/cache/ast-types-npm-0.13.4-69f7e68df8-9.zip/node_modules/ast-types/main.js"); +const vm2_1 = __webpack_require__(/*! vm2 */ "../../../.yarn/berry/cache/vm2-patch-b52c0bba95-9.zip/node_modules/vm2/index.js"); +/** + * Compiles sync JavaScript code into JavaScript with async Functions. + * + * @param {String} code JavaScript string to convert + * @param {Array} names Array of function names to add `await` operators to + * @return {String} Converted JavaScript string with async/await injected + * @api public + */ +function degenerator(code, _names) { + if (!Array.isArray(_names)) { + throw new TypeError('an array of async function "names" is required'); + } + // Duplicate the `names` array since it's rude to augment the user args + const names = _names.slice(0); + const ast = esprima_1.parseScript(code); + // First pass is to find the `function` nodes and turn them into async or + // generator functions only if their body includes `CallExpressions` to + // function in `names`. We also add the names of the functions to the `names` + // array. We'll iterate several time, as every iteration might add new items + // to the `names` array, until no new names were added in the iteration. + let lastNamesLength = 0; + do { + lastNamesLength = names.length; + ast_types_1.visit(ast, { + visitVariableDeclaration(path) { + if (path.node.declarations) { + for (let i = 0; i < path.node.declarations.length; i++) { + const declaration = path.node.declarations[i]; + if (ast_types_1.namedTypes.VariableDeclarator.check(declaration) && + ast_types_1.namedTypes.Identifier.check(declaration.init) && + ast_types_1.namedTypes.Identifier.check(declaration.id) && + checkName(declaration.init.name, names) && + !checkName(declaration.id.name, names)) { + names.push(declaration.id.name); + } + } + } + return false; + }, + visitAssignmentExpression(path) { + if (ast_types_1.namedTypes.Identifier.check(path.node.left) && + ast_types_1.namedTypes.Identifier.check(path.node.right) && + checkName(path.node.right.name, names) && + !checkName(path.node.left.name, names)) { + names.push(path.node.left.name); + } + return false; + }, + visitFunction(path) { + if (path.node.id) { + let shouldDegenerate = false; + ast_types_1.visit(path.node, { + visitCallExpression(path) { + if (checkNames(path.node, names)) { + shouldDegenerate = true; + } + return false; + }, + }); + if (!shouldDegenerate) { + return false; + } + // Got a "function" expression/statement, + // convert it into an async function + path.node.async = true; + // Add function name to `names` array + if (!checkName(path.node.id.name, names)) { + names.push(path.node.id.name); + } + } + this.traverse(path); + }, + }); + } while (lastNamesLength !== names.length); + // Second pass is for adding `await`/`yield` statements to any function + // invocations that match the given `names` array. + ast_types_1.visit(ast, { + visitCallExpression(path) { + if (checkNames(path.node, names)) { + // A "function invocation" expression, + // we need to inject a `AwaitExpression`/`YieldExpression` + const delegate = false; + const { name, parent: { node: pNode }, } = path; + const expr = ast_types_1.builders.awaitExpression(path.node, delegate); + if (ast_types_1.namedTypes.CallExpression.check(pNode)) { + pNode.arguments[name] = expr; + } + else { + pNode[name] = expr; + } + } + this.traverse(path); + }, + }); + return escodegen_1.generate(ast); +} +(function (degenerator) { + function compile(code, returnName, names, options = {}) { + const compiled = degenerator(code, names); + const vm = new vm2_1.VM(options); + const script = new vm2_1.VMScript(`${compiled};${returnName}`, { + filename: options.filename, + }); + const fn = vm.run(script); + if (typeof fn !== 'function') { + throw new Error(`Expected a "function" to be returned for \`${returnName}\`, but got "${typeof fn}"`); + } + const r = function (...args) { + try { + const p = fn.apply(this, args); + if (typeof (p === null || p === void 0 ? void 0 : p.then) === 'function') { + return p; + } + return Promise.resolve(p); + } + catch (err) { + return Promise.reject(err); + } + }; + Object.defineProperty(r, 'toString', { + value: fn.toString.bind(fn), + enumerable: false, + }); + return r; + } + degenerator.compile = compile; +})(degenerator || (degenerator = {})); +/** + * Returns `true` if `node` has a matching name to one of the entries in the + * `names` array. + * + * @param {types.Node} node + * @param {Array} names Array of function names to return true for + * @return {Boolean} + * @api private + */ +function checkNames({ callee }, names) { + let name; + if (ast_types_1.namedTypes.Identifier.check(callee)) { + name = callee.name; + } + else if (ast_types_1.namedTypes.MemberExpression.check(callee)) { + if (ast_types_1.namedTypes.Identifier.check(callee.object) && + ast_types_1.namedTypes.Identifier.check(callee.property)) { + name = `${callee.object.name}.${callee.property.name}`; + } + else { + return false; + } + } + else if (ast_types_1.namedTypes.FunctionExpression.check(callee)) { + if (callee.id) { + name = callee.id.name; + } + else { + return false; + } + } + else { + throw new Error(`Don't know how to get name for: ${callee.type}`); + } + return checkName(name, names); +} +function checkName(name, names) { + // now that we have the `name`, check if any entries match in the `names` array + for (let i = 0; i < names.length; i++) { + const n = names[i]; + if (util_1.isRegExp(n)) { + if (n.test(name)) { + return true; + } + } + else if (name === n) { + return true; + } + } + return false; +} +module.exports = degenerator; +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ "../../../.yarn/berry/cache/depd-npm-2.0.0-b6c51a4b43-9.zip/node_modules/depd/index.js": +/*!*********************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/depd-npm-2.0.0-b6c51a4b43-9.zip/node_modules/depd/index.js ***! + \*********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/*! + * depd + * Copyright(c) 2014-2018 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var relative = (__webpack_require__(/*! path */ "path").relative) + +/** + * Module exports. + */ + +module.exports = depd + +/** + * Get the path to base files on. + */ + +var basePath = process.cwd() + +/** + * Determine if namespace is contained in the string. + */ + +function containsNamespace (str, namespace) { + var vals = str.split(/[ ,]+/) + var ns = String(namespace).toLowerCase() + + for (var i = 0; i < vals.length; i++) { + var val = vals[i] + + // namespace contained + if (val && (val === '*' || val.toLowerCase() === ns)) { + return true + } + } + + return false +} + +/** + * Convert a data descriptor to accessor descriptor. + */ + +function convertDataDescriptorToAccessor (obj, prop, message) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + var value = descriptor.value + + descriptor.get = function getter () { return value } + + if (descriptor.writable) { + descriptor.set = function setter (val) { return (value = val) } + } + + delete descriptor.value + delete descriptor.writable + + Object.defineProperty(obj, prop, descriptor) + + return descriptor +} + +/** + * Create arguments string to keep arity. + */ + +function createArgumentsString (arity) { + var str = '' + + for (var i = 0; i < arity; i++) { + str += ', arg' + i + } + + return str.substr(2) +} + +/** + * Create stack string from stack. + */ + +function createStackString (stack) { + var str = this.name + ': ' + this.namespace + + if (this.message) { + str += ' deprecated ' + this.message + } + + for (var i = 0; i < stack.length; i++) { + str += '\n at ' + stack[i].toString() + } + + return str +} + +/** + * Create deprecate for namespace in caller. + */ + +function depd (namespace) { + if (!namespace) { + throw new TypeError('argument namespace is required') + } + + var stack = getStack() + var site = callSiteLocation(stack[1]) + var file = site[0] + + function deprecate (message) { + // call to self as log + log.call(deprecate, message) + } + + deprecate._file = file + deprecate._ignored = isignored(namespace) + deprecate._namespace = namespace + deprecate._traced = istraced(namespace) + deprecate._warned = Object.create(null) + + deprecate.function = wrapfunction + deprecate.property = wrapproperty + + return deprecate +} + +/** + * Determine if event emitter has listeners of a given type. + * + * The way to do this check is done three different ways in Node.js >= 0.8 + * so this consolidates them into a minimal set using instance methods. + * + * @param {EventEmitter} emitter + * @param {string} type + * @returns {boolean} + * @private + */ + +function eehaslisteners (emitter, type) { + var count = typeof emitter.listenerCount !== 'function' + ? emitter.listeners(type).length + : emitter.listenerCount(type) + + return count > 0 +} + +/** + * Determine if namespace is ignored. + */ + +function isignored (namespace) { + if (process.noDeprecation) { + // --no-deprecation support + return true + } + + var str = process.env.NO_DEPRECATION || '' + + // namespace ignored + return containsNamespace(str, namespace) +} + +/** + * Determine if namespace is traced. + */ + +function istraced (namespace) { + if (process.traceDeprecation) { + // --trace-deprecation support + return true + } + + var str = process.env.TRACE_DEPRECATION || '' + + // namespace traced + return containsNamespace(str, namespace) +} + +/** + * Display deprecation message. + */ + +function log (message, site) { + var haslisteners = eehaslisteners(process, 'deprecation') + + // abort early if no destination + if (!haslisteners && this._ignored) { + return + } + + var caller + var callFile + var callSite + var depSite + var i = 0 + var seen = false + var stack = getStack() + var file = this._file + + if (site) { + // provided site + depSite = site + callSite = callSiteLocation(stack[1]) + callSite.name = depSite.name + file = callSite[0] + } else { + // get call site + i = 2 + depSite = callSiteLocation(stack[i]) + callSite = depSite + } + + // get caller of deprecated thing in relation to file + for (; i < stack.length; i++) { + caller = callSiteLocation(stack[i]) + callFile = caller[0] + + if (callFile === file) { + seen = true + } else if (callFile === this._file) { + file = this._file + } else if (seen) { + break + } + } + + var key = caller + ? depSite.join(':') + '__' + caller.join(':') + : undefined + + if (key !== undefined && key in this._warned) { + // already warned + return + } + + this._warned[key] = true + + // generate automatic message from call site + var msg = message + if (!msg) { + msg = callSite === depSite || !callSite.name + ? defaultMessage(depSite) + : defaultMessage(callSite) + } + + // emit deprecation if listeners exist + if (haslisteners) { + var err = DeprecationError(this._namespace, msg, stack.slice(i)) + process.emit('deprecation', err) + return + } + + // format and write message + var format = process.stderr.isTTY + ? formatColor + : formatPlain + var output = format.call(this, msg, caller, stack.slice(i)) + process.stderr.write(output + '\n', 'utf8') +} + +/** + * Get call site location as array. + */ + +function callSiteLocation (callSite) { + var file = callSite.getFileName() || '' + var line = callSite.getLineNumber() + var colm = callSite.getColumnNumber() + + if (callSite.isEval()) { + file = callSite.getEvalOrigin() + ', ' + file + } + + var site = [file, line, colm] + + site.callSite = callSite + site.name = callSite.getFunctionName() + + return site +} + +/** + * Generate a default message from the site. + */ + +function defaultMessage (site) { + var callSite = site.callSite + var funcName = site.name + + // make useful anonymous name + if (!funcName) { + funcName = '' + } + + var context = callSite.getThis() + var typeName = context && callSite.getTypeName() + + // ignore useless type name + if (typeName === 'Object') { + typeName = undefined + } + + // make useful type name + if (typeName === 'Function') { + typeName = context.name || typeName + } + + return typeName && callSite.getMethodName() + ? typeName + '.' + funcName + : funcName +} + +/** + * Format deprecation message without color. + */ + +function formatPlain (msg, caller, stack) { + var timestamp = new Date().toUTCString() + + var formatted = timestamp + + ' ' + this._namespace + + ' deprecated ' + msg + + // add stack trace + if (this._traced) { + for (var i = 0; i < stack.length; i++) { + formatted += '\n at ' + stack[i].toString() + } + + return formatted + } + + if (caller) { + formatted += ' at ' + formatLocation(caller) + } + + return formatted +} + +/** + * Format deprecation message with color. + */ + +function formatColor (msg, caller, stack) { + var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' + // bold cyan + ' \x1b[33;1mdeprecated\x1b[22;39m' + // bold yellow + ' \x1b[0m' + msg + '\x1b[39m' // reset + + // add stack trace + if (this._traced) { + for (var i = 0; i < stack.length; i++) { + formatted += '\n \x1b[36mat ' + stack[i].toString() + '\x1b[39m' // cyan + } + + return formatted + } + + if (caller) { + formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan + } + + return formatted +} + +/** + * Format call site location. + */ + +function formatLocation (callSite) { + return relative(basePath, callSite[0]) + + ':' + callSite[1] + + ':' + callSite[2] +} + +/** + * Get the stack as array of call sites. + */ + +function getStack () { + var limit = Error.stackTraceLimit + var obj = {} + var prep = Error.prepareStackTrace + + Error.prepareStackTrace = prepareObjectStackTrace + Error.stackTraceLimit = Math.max(10, limit) + + // capture the stack + Error.captureStackTrace(obj) + + // slice this function off the top + var stack = obj.stack.slice(1) + + Error.prepareStackTrace = prep + Error.stackTraceLimit = limit + + return stack +} + +/** + * Capture call site stack from v8. + */ + +function prepareObjectStackTrace (obj, stack) { + return stack +} + +/** + * Return a wrapped function in a deprecation message. + */ + +function wrapfunction (fn, message) { + if (typeof fn !== 'function') { + throw new TypeError('argument fn must be a function') + } + + var args = createArgumentsString(fn.length) + var stack = getStack() + var site = callSiteLocation(stack[1]) + + site.name = fn.name + + // eslint-disable-next-line no-new-func + var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site', + '"use strict"\n' + + 'return function (' + args + ') {' + + 'log.call(deprecate, message, site)\n' + + 'return fn.apply(this, arguments)\n' + + '}')(fn, log, this, message, site) + + return deprecatedfn +} + +/** + * Wrap property in a deprecation message. + */ + +function wrapproperty (obj, prop, message) { + if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { + throw new TypeError('argument obj must be object') + } + + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + + if (!descriptor) { + throw new TypeError('must call property on owner object') + } + + if (!descriptor.configurable) { + throw new TypeError('property must be configurable') + } + + var deprecate = this + var stack = getStack() + var site = callSiteLocation(stack[1]) + + // set site name + site.name = prop + + // convert data descriptor + if ('value' in descriptor) { + descriptor = convertDataDescriptorToAccessor(obj, prop, message) + } + + var get = descriptor.get + var set = descriptor.set + + // wrap getter + if (typeof get === 'function') { + descriptor.get = function getter () { + log.call(deprecate, message, site) + return get.apply(this, arguments) + } + } + + // wrap setter + if (typeof set === 'function') { + descriptor.set = function setter () { + log.call(deprecate, message, site) + return set.apply(this, arguments) + } + } + + Object.defineProperty(obj, prop, descriptor) +} + +/** + * Create DeprecationError for deprecation + */ + +function DeprecationError (namespace, message, stack) { + var error = new Error() + var stackString + + Object.defineProperty(error, 'constructor', { + value: DeprecationError + }) + + Object.defineProperty(error, 'message', { + configurable: true, + enumerable: false, + value: message, + writable: true + }) + + Object.defineProperty(error, 'name', { + enumerable: false, + configurable: true, + value: 'DeprecationError', + writable: true + }) + + Object.defineProperty(error, 'namespace', { + configurable: true, + enumerable: false, + value: namespace, + writable: true + }) + + Object.defineProperty(error, 'stack', { + configurable: true, + enumerable: false, + get: function () { + if (stackString !== undefined) { + return stackString + } + + // prepare stack trace + return (stackString = createStackString.call(this, stack)) + }, + set: function setter (val) { + stackString = val + } + }) + + return error +} + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/escodegen-npm-1.14.3-a4dedc6eeb-9.zip/node_modules/escodegen/escodegen.js": +/*!************************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/escodegen-npm-1.14.3-a4dedc6eeb-9.zip/node_modules/escodegen/escodegen.js ***! + \************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +/* + Copyright (C) 2012-2014 Yusuke Suzuki + Copyright (C) 2015 Ingvar Stepanyan + Copyright (C) 2014 Ivan Nikulin + Copyright (C) 2012-2013 Michael Ficarra + Copyright (C) 2012-2013 Mathias Bynens + Copyright (C) 2013 Irakli Gozalishvili + Copyright (C) 2012 Robert Gust-Bardon + Copyright (C) 2012 John Freeman + Copyright (C) 2011-2012 Ariya Hidayat + Copyright (C) 2012 Joost-Wim Boekesteijn + Copyright (C) 2012 Kris Kowal + Copyright (C) 2012 Arpad Borsos + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/*global exports:true, require:true, global:true*/ +(function () { + 'use strict'; + + var Syntax, + Precedence, + BinaryPrecedence, + SourceNode, + estraverse, + esutils, + base, + indent, + json, + renumber, + hexadecimal, + quotes, + escapeless, + newline, + space, + parentheses, + semicolons, + safeConcatenation, + directive, + extra, + parse, + sourceMap, + sourceCode, + preserveBlankLines, + FORMAT_MINIFY, + FORMAT_DEFAULTS; + + estraverse = __webpack_require__(/*! estraverse */ "../../../.yarn/berry/cache/estraverse-npm-4.3.0-920a32f3c6-9.zip/node_modules/estraverse/estraverse.js"); + esutils = __webpack_require__(/*! esutils */ "../../../.yarn/berry/cache/esutils-npm-2.0.3-f865beafd5-9.zip/node_modules/esutils/lib/utils.js"); + + Syntax = estraverse.Syntax; + + // Generation is done by generateExpression. + function isExpression(node) { + return CodeGenerator.Expression.hasOwnProperty(node.type); + } + + // Generation is done by generateStatement. + function isStatement(node) { + return CodeGenerator.Statement.hasOwnProperty(node.type); + } + + Precedence = { + Sequence: 0, + Yield: 1, + Assignment: 1, + Conditional: 2, + ArrowFunction: 2, + LogicalOR: 3, + LogicalAND: 4, + BitwiseOR: 5, + BitwiseXOR: 6, + BitwiseAND: 7, + Equality: 8, + Relational: 9, + BitwiseSHIFT: 10, + Additive: 11, + Multiplicative: 12, + Exponentiation: 13, + Await: 14, + Unary: 14, + Postfix: 15, + Call: 16, + New: 17, + TaggedTemplate: 18, + Member: 19, + Primary: 20 + }; + + BinaryPrecedence = { + '||': Precedence.LogicalOR, + '&&': Precedence.LogicalAND, + '|': Precedence.BitwiseOR, + '^': Precedence.BitwiseXOR, + '&': Precedence.BitwiseAND, + '==': Precedence.Equality, + '!=': Precedence.Equality, + '===': Precedence.Equality, + '!==': Precedence.Equality, + 'is': Precedence.Equality, + 'isnt': Precedence.Equality, + '<': Precedence.Relational, + '>': Precedence.Relational, + '<=': Precedence.Relational, + '>=': Precedence.Relational, + 'in': Precedence.Relational, + 'instanceof': Precedence.Relational, + '<<': Precedence.BitwiseSHIFT, + '>>': Precedence.BitwiseSHIFT, + '>>>': Precedence.BitwiseSHIFT, + '+': Precedence.Additive, + '-': Precedence.Additive, + '*': Precedence.Multiplicative, + '%': Precedence.Multiplicative, + '/': Precedence.Multiplicative, + '**': Precedence.Exponentiation + }; + + //Flags + var F_ALLOW_IN = 1, + F_ALLOW_CALL = 1 << 1, + F_ALLOW_UNPARATH_NEW = 1 << 2, + F_FUNC_BODY = 1 << 3, + F_DIRECTIVE_CTX = 1 << 4, + F_SEMICOLON_OPT = 1 << 5; + + //Expression flag sets + //NOTE: Flag order: + // F_ALLOW_IN + // F_ALLOW_CALL + // F_ALLOW_UNPARATH_NEW + var E_FTT = F_ALLOW_CALL | F_ALLOW_UNPARATH_NEW, + E_TTF = F_ALLOW_IN | F_ALLOW_CALL, + E_TTT = F_ALLOW_IN | F_ALLOW_CALL | F_ALLOW_UNPARATH_NEW, + E_TFF = F_ALLOW_IN, + E_FFT = F_ALLOW_UNPARATH_NEW, + E_TFT = F_ALLOW_IN | F_ALLOW_UNPARATH_NEW; + + //Statement flag sets + //NOTE: Flag order: + // F_ALLOW_IN + // F_FUNC_BODY + // F_DIRECTIVE_CTX + // F_SEMICOLON_OPT + var S_TFFF = F_ALLOW_IN, + S_TFFT = F_ALLOW_IN | F_SEMICOLON_OPT, + S_FFFF = 0x00, + S_TFTF = F_ALLOW_IN | F_DIRECTIVE_CTX, + S_TTFF = F_ALLOW_IN | F_FUNC_BODY; + + function getDefaultOptions() { + // default options + return { + indent: null, + base: null, + parse: null, + comment: false, + format: { + indent: { + style: ' ', + base: 0, + adjustMultilineComment: false + }, + newline: '\n', + space: ' ', + json: false, + renumber: false, + hexadecimal: false, + quotes: 'single', + escapeless: false, + compact: false, + parentheses: true, + semicolons: true, + safeConcatenation: false, + preserveBlankLines: false + }, + moz: { + comprehensionExpressionStartsWithAssignment: false, + starlessGenerator: false + }, + sourceMap: null, + sourceMapRoot: null, + sourceMapWithCode: false, + directive: false, + raw: true, + verbatim: null, + sourceCode: null + }; + } + + function stringRepeat(str, num) { + var result = ''; + + for (num |= 0; num > 0; num >>>= 1, str += str) { + if (num & 1) { + result += str; + } + } + + return result; + } + + function hasLineTerminator(str) { + return (/[\r\n]/g).test(str); + } + + function endsWithLineTerminator(str) { + var len = str.length; + return len && esutils.code.isLineTerminator(str.charCodeAt(len - 1)); + } + + function merge(target, override) { + var key; + for (key in override) { + if (override.hasOwnProperty(key)) { + target[key] = override[key]; + } + } + return target; + } + + function updateDeeply(target, override) { + var key, val; + + function isHashObject(target) { + return typeof target === 'object' && target instanceof Object && !(target instanceof RegExp); + } + + for (key in override) { + if (override.hasOwnProperty(key)) { + val = override[key]; + if (isHashObject(val)) { + if (isHashObject(target[key])) { + updateDeeply(target[key], val); + } else { + target[key] = updateDeeply({}, val); + } + } else { + target[key] = val; + } + } + } + return target; + } + + function generateNumber(value) { + var result, point, temp, exponent, pos; + + if (value !== value) { + throw new Error('Numeric literal whose value is NaN'); + } + if (value < 0 || (value === 0 && 1 / value < 0)) { + throw new Error('Numeric literal whose value is negative'); + } + + if (value === 1 / 0) { + return json ? 'null' : renumber ? '1e400' : '1e+400'; + } + + result = '' + value; + if (!renumber || result.length < 3) { + return result; + } + + point = result.indexOf('.'); + if (!json && result.charCodeAt(0) === 0x30 /* 0 */ && point === 1) { + point = 0; + result = result.slice(1); + } + temp = result; + result = result.replace('e+', 'e'); + exponent = 0; + if ((pos = temp.indexOf('e')) > 0) { + exponent = +temp.slice(pos + 1); + temp = temp.slice(0, pos); + } + if (point >= 0) { + exponent -= temp.length - point - 1; + temp = +(temp.slice(0, point) + temp.slice(point + 1)) + ''; + } + pos = 0; + while (temp.charCodeAt(temp.length + pos - 1) === 0x30 /* 0 */) { + --pos; + } + if (pos !== 0) { + exponent -= pos; + temp = temp.slice(0, pos); + } + if (exponent !== 0) { + temp += 'e' + exponent; + } + if ((temp.length < result.length || + (hexadecimal && value > 1e12 && Math.floor(value) === value && (temp = '0x' + value.toString(16)).length < result.length)) && + +temp === value) { + result = temp; + } + + return result; + } + + // Generate valid RegExp expression. + // This function is based on https://github.com/Constellation/iv Engine + + function escapeRegExpCharacter(ch, previousIsBackslash) { + // not handling '\' and handling \u2028 or \u2029 to unicode escape sequence + if ((ch & ~1) === 0x2028) { + return (previousIsBackslash ? 'u' : '\\u') + ((ch === 0x2028) ? '2028' : '2029'); + } else if (ch === 10 || ch === 13) { // \n, \r + return (previousIsBackslash ? '' : '\\') + ((ch === 10) ? 'n' : 'r'); + } + return String.fromCharCode(ch); + } + + function generateRegExp(reg) { + var match, result, flags, i, iz, ch, characterInBrack, previousIsBackslash; + + result = reg.toString(); + + if (reg.source) { + // extract flag from toString result + match = result.match(/\/([^/]*)$/); + if (!match) { + return result; + } + + flags = match[1]; + result = ''; + + characterInBrack = false; + previousIsBackslash = false; + for (i = 0, iz = reg.source.length; i < iz; ++i) { + ch = reg.source.charCodeAt(i); + + if (!previousIsBackslash) { + if (characterInBrack) { + if (ch === 93) { // ] + characterInBrack = false; + } + } else { + if (ch === 47) { // / + result += '\\'; + } else if (ch === 91) { // [ + characterInBrack = true; + } + } + result += escapeRegExpCharacter(ch, previousIsBackslash); + previousIsBackslash = ch === 92; // \ + } else { + // if new RegExp("\\\n') is provided, create /\n/ + result += escapeRegExpCharacter(ch, previousIsBackslash); + // prevent like /\\[/]/ + previousIsBackslash = false; + } + } + + return '/' + result + '/' + flags; + } + + return result; + } + + function escapeAllowedCharacter(code, next) { + var hex; + + if (code === 0x08 /* \b */) { + return '\\b'; + } + + if (code === 0x0C /* \f */) { + return '\\f'; + } + + if (code === 0x09 /* \t */) { + return '\\t'; + } + + hex = code.toString(16).toUpperCase(); + if (json || code > 0xFF) { + return '\\u' + '0000'.slice(hex.length) + hex; + } else if (code === 0x0000 && !esutils.code.isDecimalDigit(next)) { + return '\\0'; + } else if (code === 0x000B /* \v */) { // '\v' + return '\\x0B'; + } else { + return '\\x' + '00'.slice(hex.length) + hex; + } + } + + function escapeDisallowedCharacter(code) { + if (code === 0x5C /* \ */) { + return '\\\\'; + } + + if (code === 0x0A /* \n */) { + return '\\n'; + } + + if (code === 0x0D /* \r */) { + return '\\r'; + } + + if (code === 0x2028) { + return '\\u2028'; + } + + if (code === 0x2029) { + return '\\u2029'; + } + + throw new Error('Incorrectly classified character'); + } + + function escapeDirective(str) { + var i, iz, code, quote; + + quote = quotes === 'double' ? '"' : '\''; + for (i = 0, iz = str.length; i < iz; ++i) { + code = str.charCodeAt(i); + if (code === 0x27 /* ' */) { + quote = '"'; + break; + } else if (code === 0x22 /* " */) { + quote = '\''; + break; + } else if (code === 0x5C /* \ */) { + ++i; + } + } + + return quote + str + quote; + } + + function escapeString(str) { + var result = '', i, len, code, singleQuotes = 0, doubleQuotes = 0, single, quote; + + for (i = 0, len = str.length; i < len; ++i) { + code = str.charCodeAt(i); + if (code === 0x27 /* ' */) { + ++singleQuotes; + } else if (code === 0x22 /* " */) { + ++doubleQuotes; + } else if (code === 0x2F /* / */ && json) { + result += '\\'; + } else if (esutils.code.isLineTerminator(code) || code === 0x5C /* \ */) { + result += escapeDisallowedCharacter(code); + continue; + } else if (!esutils.code.isIdentifierPartES5(code) && (json && code < 0x20 /* SP */ || !json && !escapeless && (code < 0x20 /* SP */ || code > 0x7E /* ~ */))) { + result += escapeAllowedCharacter(code, str.charCodeAt(i + 1)); + continue; + } + result += String.fromCharCode(code); + } + + single = !(quotes === 'double' || (quotes === 'auto' && doubleQuotes < singleQuotes)); + quote = single ? '\'' : '"'; + + if (!(single ? singleQuotes : doubleQuotes)) { + return quote + result + quote; + } + + str = result; + result = quote; + + for (i = 0, len = str.length; i < len; ++i) { + code = str.charCodeAt(i); + if ((code === 0x27 /* ' */ && single) || (code === 0x22 /* " */ && !single)) { + result += '\\'; + } + result += String.fromCharCode(code); + } + + return result + quote; + } + + /** + * flatten an array to a string, where the array can contain + * either strings or nested arrays + */ + function flattenToString(arr) { + var i, iz, elem, result = ''; + for (i = 0, iz = arr.length; i < iz; ++i) { + elem = arr[i]; + result += Array.isArray(elem) ? flattenToString(elem) : elem; + } + return result; + } + + /** + * convert generated to a SourceNode when source maps are enabled. + */ + function toSourceNodeWhenNeeded(generated, node) { + if (!sourceMap) { + // with no source maps, generated is either an + // array or a string. if an array, flatten it. + // if a string, just return it + if (Array.isArray(generated)) { + return flattenToString(generated); + } else { + return generated; + } + } + if (node == null) { + if (generated instanceof SourceNode) { + return generated; + } else { + node = {}; + } + } + if (node.loc == null) { + return new SourceNode(null, null, sourceMap, generated, node.name || null); + } + return new SourceNode(node.loc.start.line, node.loc.start.column, (sourceMap === true ? node.loc.source || null : sourceMap), generated, node.name || null); + } + + function noEmptySpace() { + return (space) ? space : ' '; + } + + function join(left, right) { + var leftSource, + rightSource, + leftCharCode, + rightCharCode; + + leftSource = toSourceNodeWhenNeeded(left).toString(); + if (leftSource.length === 0) { + return [right]; + } + + rightSource = toSourceNodeWhenNeeded(right).toString(); + if (rightSource.length === 0) { + return [left]; + } + + leftCharCode = leftSource.charCodeAt(leftSource.length - 1); + rightCharCode = rightSource.charCodeAt(0); + + if ((leftCharCode === 0x2B /* + */ || leftCharCode === 0x2D /* - */) && leftCharCode === rightCharCode || + esutils.code.isIdentifierPartES5(leftCharCode) && esutils.code.isIdentifierPartES5(rightCharCode) || + leftCharCode === 0x2F /* / */ && rightCharCode === 0x69 /* i */) { // infix word operators all start with `i` + return [left, noEmptySpace(), right]; + } else if (esutils.code.isWhiteSpace(leftCharCode) || esutils.code.isLineTerminator(leftCharCode) || + esutils.code.isWhiteSpace(rightCharCode) || esutils.code.isLineTerminator(rightCharCode)) { + return [left, right]; + } + return [left, space, right]; + } + + function addIndent(stmt) { + return [base, stmt]; + } + + function withIndent(fn) { + var previousBase; + previousBase = base; + base += indent; + fn(base); + base = previousBase; + } + + function calculateSpaces(str) { + var i; + for (i = str.length - 1; i >= 0; --i) { + if (esutils.code.isLineTerminator(str.charCodeAt(i))) { + break; + } + } + return (str.length - 1) - i; + } + + function adjustMultilineComment(value, specialBase) { + var array, i, len, line, j, spaces, previousBase, sn; + + array = value.split(/\r\n|[\r\n]/); + spaces = Number.MAX_VALUE; + + // first line doesn't have indentation + for (i = 1, len = array.length; i < len; ++i) { + line = array[i]; + j = 0; + while (j < line.length && esutils.code.isWhiteSpace(line.charCodeAt(j))) { + ++j; + } + if (spaces > j) { + spaces = j; + } + } + + if (typeof specialBase !== 'undefined') { + // pattern like + // { + // var t = 20; /* + // * this is comment + // */ + // } + previousBase = base; + if (array[1][spaces] === '*') { + specialBase += ' '; + } + base = specialBase; + } else { + if (spaces & 1) { + // /* + // * + // */ + // If spaces are odd number, above pattern is considered. + // We waste 1 space. + --spaces; + } + previousBase = base; + } + + for (i = 1, len = array.length; i < len; ++i) { + sn = toSourceNodeWhenNeeded(addIndent(array[i].slice(spaces))); + array[i] = sourceMap ? sn.join('') : sn; + } + + base = previousBase; + + return array.join('\n'); + } + + function generateComment(comment, specialBase) { + if (comment.type === 'Line') { + if (endsWithLineTerminator(comment.value)) { + return '//' + comment.value; + } else { + // Always use LineTerminator + var result = '//' + comment.value; + if (!preserveBlankLines) { + result += '\n'; + } + return result; + } + } + if (extra.format.indent.adjustMultilineComment && /[\n\r]/.test(comment.value)) { + return adjustMultilineComment('/*' + comment.value + '*/', specialBase); + } + return '/*' + comment.value + '*/'; + } + + function addComments(stmt, result) { + var i, len, comment, save, tailingToStatement, specialBase, fragment, + extRange, range, prevRange, prefix, infix, suffix, count; + + if (stmt.leadingComments && stmt.leadingComments.length > 0) { + save = result; + + if (preserveBlankLines) { + comment = stmt.leadingComments[0]; + result = []; + + extRange = comment.extendedRange; + range = comment.range; + + prefix = sourceCode.substring(extRange[0], range[0]); + count = (prefix.match(/\n/g) || []).length; + if (count > 0) { + result.push(stringRepeat('\n', count)); + result.push(addIndent(generateComment(comment))); + } else { + result.push(prefix); + result.push(generateComment(comment)); + } + + prevRange = range; + + for (i = 1, len = stmt.leadingComments.length; i < len; i++) { + comment = stmt.leadingComments[i]; + range = comment.range; + + infix = sourceCode.substring(prevRange[1], range[0]); + count = (infix.match(/\n/g) || []).length; + result.push(stringRepeat('\n', count)); + result.push(addIndent(generateComment(comment))); + + prevRange = range; + } + + suffix = sourceCode.substring(range[1], extRange[1]); + count = (suffix.match(/\n/g) || []).length; + result.push(stringRepeat('\n', count)); + } else { + comment = stmt.leadingComments[0]; + result = []; + if (safeConcatenation && stmt.type === Syntax.Program && stmt.body.length === 0) { + result.push('\n'); + } + result.push(generateComment(comment)); + if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) { + result.push('\n'); + } + + for (i = 1, len = stmt.leadingComments.length; i < len; ++i) { + comment = stmt.leadingComments[i]; + fragment = [generateComment(comment)]; + if (!endsWithLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) { + fragment.push('\n'); + } + result.push(addIndent(fragment)); + } + } + + result.push(addIndent(save)); + } + + if (stmt.trailingComments) { + + if (preserveBlankLines) { + comment = stmt.trailingComments[0]; + extRange = comment.extendedRange; + range = comment.range; + + prefix = sourceCode.substring(extRange[0], range[0]); + count = (prefix.match(/\n/g) || []).length; + + if (count > 0) { + result.push(stringRepeat('\n', count)); + result.push(addIndent(generateComment(comment))); + } else { + result.push(prefix); + result.push(generateComment(comment)); + } + } else { + tailingToStatement = !endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString()); + specialBase = stringRepeat(' ', calculateSpaces(toSourceNodeWhenNeeded([base, result, indent]).toString())); + for (i = 0, len = stmt.trailingComments.length; i < len; ++i) { + comment = stmt.trailingComments[i]; + if (tailingToStatement) { + // We assume target like following script + // + // var t = 20; /** + // * This is comment of t + // */ + if (i === 0) { + // first case + result = [result, indent]; + } else { + result = [result, specialBase]; + } + result.push(generateComment(comment, specialBase)); + } else { + result = [result, addIndent(generateComment(comment))]; + } + if (i !== len - 1 && !endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) { + result = [result, '\n']; + } + } + } + } + + return result; + } + + function generateBlankLines(start, end, result) { + var j, newlineCount = 0; + + for (j = start; j < end; j++) { + if (sourceCode[j] === '\n') { + newlineCount++; + } + } + + for (j = 1; j < newlineCount; j++) { + result.push(newline); + } + } + + function parenthesize(text, current, should) { + if (current < should) { + return ['(', text, ')']; + } + return text; + } + + function generateVerbatimString(string) { + var i, iz, result; + result = string.split(/\r\n|\n/); + for (i = 1, iz = result.length; i < iz; i++) { + result[i] = newline + base + result[i]; + } + return result; + } + + function generateVerbatim(expr, precedence) { + var verbatim, result, prec; + verbatim = expr[extra.verbatim]; + + if (typeof verbatim === 'string') { + result = parenthesize(generateVerbatimString(verbatim), Precedence.Sequence, precedence); + } else { + // verbatim is object + result = generateVerbatimString(verbatim.content); + prec = (verbatim.precedence != null) ? verbatim.precedence : Precedence.Sequence; + result = parenthesize(result, prec, precedence); + } + + return toSourceNodeWhenNeeded(result, expr); + } + + function CodeGenerator() { + } + + // Helpers. + + CodeGenerator.prototype.maybeBlock = function(stmt, flags) { + var result, noLeadingComment, that = this; + + noLeadingComment = !extra.comment || !stmt.leadingComments; + + if (stmt.type === Syntax.BlockStatement && noLeadingComment) { + return [space, this.generateStatement(stmt, flags)]; + } + + if (stmt.type === Syntax.EmptyStatement && noLeadingComment) { + return ';'; + } + + withIndent(function () { + result = [ + newline, + addIndent(that.generateStatement(stmt, flags)) + ]; + }); + + return result; + }; + + CodeGenerator.prototype.maybeBlockSuffix = function (stmt, result) { + var ends = endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString()); + if (stmt.type === Syntax.BlockStatement && (!extra.comment || !stmt.leadingComments) && !ends) { + return [result, space]; + } + if (ends) { + return [result, base]; + } + return [result, newline, base]; + }; + + function generateIdentifier(node) { + return toSourceNodeWhenNeeded(node.name, node); + } + + function generateAsyncPrefix(node, spaceRequired) { + return node.async ? 'async' + (spaceRequired ? noEmptySpace() : space) : ''; + } + + function generateStarSuffix(node) { + var isGenerator = node.generator && !extra.moz.starlessGenerator; + return isGenerator ? '*' + space : ''; + } + + function generateMethodPrefix(prop) { + var func = prop.value, prefix = ''; + if (func.async) { + prefix += generateAsyncPrefix(func, !prop.computed); + } + if (func.generator) { + // avoid space before method name + prefix += generateStarSuffix(func) ? '*' : ''; + } + return prefix; + } + + CodeGenerator.prototype.generatePattern = function (node, precedence, flags) { + if (node.type === Syntax.Identifier) { + return generateIdentifier(node); + } + return this.generateExpression(node, precedence, flags); + }; + + CodeGenerator.prototype.generateFunctionParams = function (node) { + var i, iz, result, hasDefault; + + hasDefault = false; + + if (node.type === Syntax.ArrowFunctionExpression && + !node.rest && (!node.defaults || node.defaults.length === 0) && + node.params.length === 1 && node.params[0].type === Syntax.Identifier) { + // arg => { } case + result = [generateAsyncPrefix(node, true), generateIdentifier(node.params[0])]; + } else { + result = node.type === Syntax.ArrowFunctionExpression ? [generateAsyncPrefix(node, false)] : []; + result.push('('); + if (node.defaults) { + hasDefault = true; + } + for (i = 0, iz = node.params.length; i < iz; ++i) { + if (hasDefault && node.defaults[i]) { + // Handle default values. + result.push(this.generateAssignment(node.params[i], node.defaults[i], '=', Precedence.Assignment, E_TTT)); + } else { + result.push(this.generatePattern(node.params[i], Precedence.Assignment, E_TTT)); + } + if (i + 1 < iz) { + result.push(',' + space); + } + } + + if (node.rest) { + if (node.params.length) { + result.push(',' + space); + } + result.push('...'); + result.push(generateIdentifier(node.rest)); + } + + result.push(')'); + } + + return result; + }; + + CodeGenerator.prototype.generateFunctionBody = function (node) { + var result, expr; + + result = this.generateFunctionParams(node); + + if (node.type === Syntax.ArrowFunctionExpression) { + result.push(space); + result.push('=>'); + } + + if (node.expression) { + result.push(space); + expr = this.generateExpression(node.body, Precedence.Assignment, E_TTT); + if (expr.toString().charAt(0) === '{') { + expr = ['(', expr, ')']; + } + result.push(expr); + } else { + result.push(this.maybeBlock(node.body, S_TTFF)); + } + + return result; + }; + + CodeGenerator.prototype.generateIterationForStatement = function (operator, stmt, flags) { + var result = ['for' + (stmt.await ? noEmptySpace() + 'await' : '') + space + '('], that = this; + withIndent(function () { + if (stmt.left.type === Syntax.VariableDeclaration) { + withIndent(function () { + result.push(stmt.left.kind + noEmptySpace()); + result.push(that.generateStatement(stmt.left.declarations[0], S_FFFF)); + }); + } else { + result.push(that.generateExpression(stmt.left, Precedence.Call, E_TTT)); + } + + result = join(result, operator); + result = [join( + result, + that.generateExpression(stmt.right, Precedence.Assignment, E_TTT) + ), ')']; + }); + result.push(this.maybeBlock(stmt.body, flags)); + return result; + }; + + CodeGenerator.prototype.generatePropertyKey = function (expr, computed) { + var result = []; + + if (computed) { + result.push('['); + } + + result.push(this.generateExpression(expr, Precedence.Assignment, E_TTT)); + + if (computed) { + result.push(']'); + } + + return result; + }; + + CodeGenerator.prototype.generateAssignment = function (left, right, operator, precedence, flags) { + if (Precedence.Assignment < precedence) { + flags |= F_ALLOW_IN; + } + + return parenthesize( + [ + this.generateExpression(left, Precedence.Call, flags), + space + operator + space, + this.generateExpression(right, Precedence.Assignment, flags) + ], + Precedence.Assignment, + precedence + ); + }; + + CodeGenerator.prototype.semicolon = function (flags) { + if (!semicolons && flags & F_SEMICOLON_OPT) { + return ''; + } + return ';'; + }; + + // Statements. + + CodeGenerator.Statement = { + + BlockStatement: function (stmt, flags) { + var range, content, result = ['{', newline], that = this; + + withIndent(function () { + // handle functions without any code + if (stmt.body.length === 0 && preserveBlankLines) { + range = stmt.range; + if (range[1] - range[0] > 2) { + content = sourceCode.substring(range[0] + 1, range[1] - 1); + if (content[0] === '\n') { + result = ['{']; + } + result.push(content); + } + } + + var i, iz, fragment, bodyFlags; + bodyFlags = S_TFFF; + if (flags & F_FUNC_BODY) { + bodyFlags |= F_DIRECTIVE_CTX; + } + + for (i = 0, iz = stmt.body.length; i < iz; ++i) { + if (preserveBlankLines) { + // handle spaces before the first line + if (i === 0) { + if (stmt.body[0].leadingComments) { + range = stmt.body[0].leadingComments[0].extendedRange; + content = sourceCode.substring(range[0], range[1]); + if (content[0] === '\n') { + result = ['{']; + } + } + if (!stmt.body[0].leadingComments) { + generateBlankLines(stmt.range[0], stmt.body[0].range[0], result); + } + } + + // handle spaces between lines + if (i > 0) { + if (!stmt.body[i - 1].trailingComments && !stmt.body[i].leadingComments) { + generateBlankLines(stmt.body[i - 1].range[1], stmt.body[i].range[0], result); + } + } + } + + if (i === iz - 1) { + bodyFlags |= F_SEMICOLON_OPT; + } + + if (stmt.body[i].leadingComments && preserveBlankLines) { + fragment = that.generateStatement(stmt.body[i], bodyFlags); + } else { + fragment = addIndent(that.generateStatement(stmt.body[i], bodyFlags)); + } + + result.push(fragment); + if (!endsWithLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) { + if (preserveBlankLines && i < iz - 1) { + // don't add a new line if there are leading coments + // in the next statement + if (!stmt.body[i + 1].leadingComments) { + result.push(newline); + } + } else { + result.push(newline); + } + } + + if (preserveBlankLines) { + // handle spaces after the last line + if (i === iz - 1) { + if (!stmt.body[i].trailingComments) { + generateBlankLines(stmt.body[i].range[1], stmt.range[1], result); + } + } + } + } + }); + + result.push(addIndent('}')); + return result; + }, + + BreakStatement: function (stmt, flags) { + if (stmt.label) { + return 'break ' + stmt.label.name + this.semicolon(flags); + } + return 'break' + this.semicolon(flags); + }, + + ContinueStatement: function (stmt, flags) { + if (stmt.label) { + return 'continue ' + stmt.label.name + this.semicolon(flags); + } + return 'continue' + this.semicolon(flags); + }, + + ClassBody: function (stmt, flags) { + var result = [ '{', newline], that = this; + + withIndent(function (indent) { + var i, iz; + + for (i = 0, iz = stmt.body.length; i < iz; ++i) { + result.push(indent); + result.push(that.generateExpression(stmt.body[i], Precedence.Sequence, E_TTT)); + if (i + 1 < iz) { + result.push(newline); + } + } + }); + + if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) { + result.push(newline); + } + result.push(base); + result.push('}'); + return result; + }, + + ClassDeclaration: function (stmt, flags) { + var result, fragment; + result = ['class']; + if (stmt.id) { + result = join(result, this.generateExpression(stmt.id, Precedence.Sequence, E_TTT)); + } + if (stmt.superClass) { + fragment = join('extends', this.generateExpression(stmt.superClass, Precedence.Unary, E_TTT)); + result = join(result, fragment); + } + result.push(space); + result.push(this.generateStatement(stmt.body, S_TFFT)); + return result; + }, + + DirectiveStatement: function (stmt, flags) { + if (extra.raw && stmt.raw) { + return stmt.raw + this.semicolon(flags); + } + return escapeDirective(stmt.directive) + this.semicolon(flags); + }, + + DoWhileStatement: function (stmt, flags) { + // Because `do 42 while (cond)` is Syntax Error. We need semicolon. + var result = join('do', this.maybeBlock(stmt.body, S_TFFF)); + result = this.maybeBlockSuffix(stmt.body, result); + return join(result, [ + 'while' + space + '(', + this.generateExpression(stmt.test, Precedence.Sequence, E_TTT), + ')' + this.semicolon(flags) + ]); + }, + + CatchClause: function (stmt, flags) { + var result, that = this; + withIndent(function () { + var guard; + + if (stmt.param) { + result = [ + 'catch' + space + '(', + that.generateExpression(stmt.param, Precedence.Sequence, E_TTT), + ')' + ]; + + if (stmt.guard) { + guard = that.generateExpression(stmt.guard, Precedence.Sequence, E_TTT); + result.splice(2, 0, ' if ', guard); + } + } else { + result = ['catch']; + } + }); + result.push(this.maybeBlock(stmt.body, S_TFFF)); + return result; + }, + + DebuggerStatement: function (stmt, flags) { + return 'debugger' + this.semicolon(flags); + }, + + EmptyStatement: function (stmt, flags) { + return ';'; + }, + + ExportDefaultDeclaration: function (stmt, flags) { + var result = [ 'export' ], bodyFlags; + + bodyFlags = (flags & F_SEMICOLON_OPT) ? S_TFFT : S_TFFF; + + // export default HoistableDeclaration[Default] + // export default AssignmentExpression[In] ; + result = join(result, 'default'); + if (isStatement(stmt.declaration)) { + result = join(result, this.generateStatement(stmt.declaration, bodyFlags)); + } else { + result = join(result, this.generateExpression(stmt.declaration, Precedence.Assignment, E_TTT) + this.semicolon(flags)); + } + return result; + }, + + ExportNamedDeclaration: function (stmt, flags) { + var result = [ 'export' ], bodyFlags, that = this; + + bodyFlags = (flags & F_SEMICOLON_OPT) ? S_TFFT : S_TFFF; + + // export VariableStatement + // export Declaration[Default] + if (stmt.declaration) { + return join(result, this.generateStatement(stmt.declaration, bodyFlags)); + } + + // export ExportClause[NoReference] FromClause ; + // export ExportClause ; + if (stmt.specifiers) { + if (stmt.specifiers.length === 0) { + result = join(result, '{' + space + '}'); + } else if (stmt.specifiers[0].type === Syntax.ExportBatchSpecifier) { + result = join(result, this.generateExpression(stmt.specifiers[0], Precedence.Sequence, E_TTT)); + } else { + result = join(result, '{'); + withIndent(function (indent) { + var i, iz; + result.push(newline); + for (i = 0, iz = stmt.specifiers.length; i < iz; ++i) { + result.push(indent); + result.push(that.generateExpression(stmt.specifiers[i], Precedence.Sequence, E_TTT)); + if (i + 1 < iz) { + result.push(',' + newline); + } + } + }); + if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) { + result.push(newline); + } + result.push(base + '}'); + } + + if (stmt.source) { + result = join(result, [ + 'from' + space, + // ModuleSpecifier + this.generateExpression(stmt.source, Precedence.Sequence, E_TTT), + this.semicolon(flags) + ]); + } else { + result.push(this.semicolon(flags)); + } + } + return result; + }, + + ExportAllDeclaration: function (stmt, flags) { + // export * FromClause ; + return [ + 'export' + space, + '*' + space, + 'from' + space, + // ModuleSpecifier + this.generateExpression(stmt.source, Precedence.Sequence, E_TTT), + this.semicolon(flags) + ]; + }, + + ExpressionStatement: function (stmt, flags) { + var result, fragment; + + function isClassPrefixed(fragment) { + var code; + if (fragment.slice(0, 5) !== 'class') { + return false; + } + code = fragment.charCodeAt(5); + return code === 0x7B /* '{' */ || esutils.code.isWhiteSpace(code) || esutils.code.isLineTerminator(code); + } + + function isFunctionPrefixed(fragment) { + var code; + if (fragment.slice(0, 8) !== 'function') { + return false; + } + code = fragment.charCodeAt(8); + return code === 0x28 /* '(' */ || esutils.code.isWhiteSpace(code) || code === 0x2A /* '*' */ || esutils.code.isLineTerminator(code); + } + + function isAsyncPrefixed(fragment) { + var code, i, iz; + if (fragment.slice(0, 5) !== 'async') { + return false; + } + if (!esutils.code.isWhiteSpace(fragment.charCodeAt(5))) { + return false; + } + for (i = 6, iz = fragment.length; i < iz; ++i) { + if (!esutils.code.isWhiteSpace(fragment.charCodeAt(i))) { + break; + } + } + if (i === iz) { + return false; + } + if (fragment.slice(i, i + 8) !== 'function') { + return false; + } + code = fragment.charCodeAt(i + 8); + return code === 0x28 /* '(' */ || esutils.code.isWhiteSpace(code) || code === 0x2A /* '*' */ || esutils.code.isLineTerminator(code); + } + + result = [this.generateExpression(stmt.expression, Precedence.Sequence, E_TTT)]; + // 12.4 '{', 'function', 'class' is not allowed in this position. + // wrap expression with parentheses + fragment = toSourceNodeWhenNeeded(result).toString(); + if (fragment.charCodeAt(0) === 0x7B /* '{' */ || // ObjectExpression + isClassPrefixed(fragment) || + isFunctionPrefixed(fragment) || + isAsyncPrefixed(fragment) || + (directive && (flags & F_DIRECTIVE_CTX) && stmt.expression.type === Syntax.Literal && typeof stmt.expression.value === 'string')) { + result = ['(', result, ')' + this.semicolon(flags)]; + } else { + result.push(this.semicolon(flags)); + } + return result; + }, + + ImportDeclaration: function (stmt, flags) { + // ES6: 15.2.1 valid import declarations: + // - import ImportClause FromClause ; + // - import ModuleSpecifier ; + var result, cursor, that = this; + + // If no ImportClause is present, + // this should be `import ModuleSpecifier` so skip `from` + // ModuleSpecifier is StringLiteral. + if (stmt.specifiers.length === 0) { + // import ModuleSpecifier ; + return [ + 'import', + space, + // ModuleSpecifier + this.generateExpression(stmt.source, Precedence.Sequence, E_TTT), + this.semicolon(flags) + ]; + } + + // import ImportClause FromClause ; + result = [ + 'import' + ]; + cursor = 0; + + // ImportedBinding + if (stmt.specifiers[cursor].type === Syntax.ImportDefaultSpecifier) { + result = join(result, [ + this.generateExpression(stmt.specifiers[cursor], Precedence.Sequence, E_TTT) + ]); + ++cursor; + } + + if (stmt.specifiers[cursor]) { + if (cursor !== 0) { + result.push(','); + } + + if (stmt.specifiers[cursor].type === Syntax.ImportNamespaceSpecifier) { + // NameSpaceImport + result = join(result, [ + space, + this.generateExpression(stmt.specifiers[cursor], Precedence.Sequence, E_TTT) + ]); + } else { + // NamedImports + result.push(space + '{'); + + if ((stmt.specifiers.length - cursor) === 1) { + // import { ... } from "..."; + result.push(space); + result.push(this.generateExpression(stmt.specifiers[cursor], Precedence.Sequence, E_TTT)); + result.push(space + '}' + space); + } else { + // import { + // ..., + // ..., + // } from "..."; + withIndent(function (indent) { + var i, iz; + result.push(newline); + for (i = cursor, iz = stmt.specifiers.length; i < iz; ++i) { + result.push(indent); + result.push(that.generateExpression(stmt.specifiers[i], Precedence.Sequence, E_TTT)); + if (i + 1 < iz) { + result.push(',' + newline); + } + } + }); + if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) { + result.push(newline); + } + result.push(base + '}' + space); + } + } + } + + result = join(result, [ + 'from' + space, + // ModuleSpecifier + this.generateExpression(stmt.source, Precedence.Sequence, E_TTT), + this.semicolon(flags) + ]); + return result; + }, + + VariableDeclarator: function (stmt, flags) { + var itemFlags = (flags & F_ALLOW_IN) ? E_TTT : E_FTT; + if (stmt.init) { + return [ + this.generateExpression(stmt.id, Precedence.Assignment, itemFlags), + space, + '=', + space, + this.generateExpression(stmt.init, Precedence.Assignment, itemFlags) + ]; + } + return this.generatePattern(stmt.id, Precedence.Assignment, itemFlags); + }, + + VariableDeclaration: function (stmt, flags) { + // VariableDeclarator is typed as Statement, + // but joined with comma (not LineTerminator). + // So if comment is attached to target node, we should specialize. + var result, i, iz, node, bodyFlags, that = this; + + result = [ stmt.kind ]; + + bodyFlags = (flags & F_ALLOW_IN) ? S_TFFF : S_FFFF; + + function block() { + node = stmt.declarations[0]; + if (extra.comment && node.leadingComments) { + result.push('\n'); + result.push(addIndent(that.generateStatement(node, bodyFlags))); + } else { + result.push(noEmptySpace()); + result.push(that.generateStatement(node, bodyFlags)); + } + + for (i = 1, iz = stmt.declarations.length; i < iz; ++i) { + node = stmt.declarations[i]; + if (extra.comment && node.leadingComments) { + result.push(',' + newline); + result.push(addIndent(that.generateStatement(node, bodyFlags))); + } else { + result.push(',' + space); + result.push(that.generateStatement(node, bodyFlags)); + } + } + } + + if (stmt.declarations.length > 1) { + withIndent(block); + } else { + block(); + } + + result.push(this.semicolon(flags)); + + return result; + }, + + ThrowStatement: function (stmt, flags) { + return [join( + 'throw', + this.generateExpression(stmt.argument, Precedence.Sequence, E_TTT) + ), this.semicolon(flags)]; + }, + + TryStatement: function (stmt, flags) { + var result, i, iz, guardedHandlers; + + result = ['try', this.maybeBlock(stmt.block, S_TFFF)]; + result = this.maybeBlockSuffix(stmt.block, result); + + if (stmt.handlers) { + // old interface + for (i = 0, iz = stmt.handlers.length; i < iz; ++i) { + result = join(result, this.generateStatement(stmt.handlers[i], S_TFFF)); + if (stmt.finalizer || i + 1 !== iz) { + result = this.maybeBlockSuffix(stmt.handlers[i].body, result); + } + } + } else { + guardedHandlers = stmt.guardedHandlers || []; + + for (i = 0, iz = guardedHandlers.length; i < iz; ++i) { + result = join(result, this.generateStatement(guardedHandlers[i], S_TFFF)); + if (stmt.finalizer || i + 1 !== iz) { + result = this.maybeBlockSuffix(guardedHandlers[i].body, result); + } + } + + // new interface + if (stmt.handler) { + if (Array.isArray(stmt.handler)) { + for (i = 0, iz = stmt.handler.length; i < iz; ++i) { + result = join(result, this.generateStatement(stmt.handler[i], S_TFFF)); + if (stmt.finalizer || i + 1 !== iz) { + result = this.maybeBlockSuffix(stmt.handler[i].body, result); + } + } + } else { + result = join(result, this.generateStatement(stmt.handler, S_TFFF)); + if (stmt.finalizer) { + result = this.maybeBlockSuffix(stmt.handler.body, result); + } + } + } + } + if (stmt.finalizer) { + result = join(result, ['finally', this.maybeBlock(stmt.finalizer, S_TFFF)]); + } + return result; + }, + + SwitchStatement: function (stmt, flags) { + var result, fragment, i, iz, bodyFlags, that = this; + withIndent(function () { + result = [ + 'switch' + space + '(', + that.generateExpression(stmt.discriminant, Precedence.Sequence, E_TTT), + ')' + space + '{' + newline + ]; + }); + if (stmt.cases) { + bodyFlags = S_TFFF; + for (i = 0, iz = stmt.cases.length; i < iz; ++i) { + if (i === iz - 1) { + bodyFlags |= F_SEMICOLON_OPT; + } + fragment = addIndent(this.generateStatement(stmt.cases[i], bodyFlags)); + result.push(fragment); + if (!endsWithLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) { + result.push(newline); + } + } + } + result.push(addIndent('}')); + return result; + }, + + SwitchCase: function (stmt, flags) { + var result, fragment, i, iz, bodyFlags, that = this; + withIndent(function () { + if (stmt.test) { + result = [ + join('case', that.generateExpression(stmt.test, Precedence.Sequence, E_TTT)), + ':' + ]; + } else { + result = ['default:']; + } + + i = 0; + iz = stmt.consequent.length; + if (iz && stmt.consequent[0].type === Syntax.BlockStatement) { + fragment = that.maybeBlock(stmt.consequent[0], S_TFFF); + result.push(fragment); + i = 1; + } + + if (i !== iz && !endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) { + result.push(newline); + } + + bodyFlags = S_TFFF; + for (; i < iz; ++i) { + if (i === iz - 1 && flags & F_SEMICOLON_OPT) { + bodyFlags |= F_SEMICOLON_OPT; + } + fragment = addIndent(that.generateStatement(stmt.consequent[i], bodyFlags)); + result.push(fragment); + if (i + 1 !== iz && !endsWithLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) { + result.push(newline); + } + } + }); + return result; + }, + + IfStatement: function (stmt, flags) { + var result, bodyFlags, semicolonOptional, that = this; + withIndent(function () { + result = [ + 'if' + space + '(', + that.generateExpression(stmt.test, Precedence.Sequence, E_TTT), + ')' + ]; + }); + semicolonOptional = flags & F_SEMICOLON_OPT; + bodyFlags = S_TFFF; + if (semicolonOptional) { + bodyFlags |= F_SEMICOLON_OPT; + } + if (stmt.alternate) { + result.push(this.maybeBlock(stmt.consequent, S_TFFF)); + result = this.maybeBlockSuffix(stmt.consequent, result); + if (stmt.alternate.type === Syntax.IfStatement) { + result = join(result, ['else ', this.generateStatement(stmt.alternate, bodyFlags)]); + } else { + result = join(result, join('else', this.maybeBlock(stmt.alternate, bodyFlags))); + } + } else { + result.push(this.maybeBlock(stmt.consequent, bodyFlags)); + } + return result; + }, + + ForStatement: function (stmt, flags) { + var result, that = this; + withIndent(function () { + result = ['for' + space + '(']; + if (stmt.init) { + if (stmt.init.type === Syntax.VariableDeclaration) { + result.push(that.generateStatement(stmt.init, S_FFFF)); + } else { + // F_ALLOW_IN becomes false. + result.push(that.generateExpression(stmt.init, Precedence.Sequence, E_FTT)); + result.push(';'); + } + } else { + result.push(';'); + } + + if (stmt.test) { + result.push(space); + result.push(that.generateExpression(stmt.test, Precedence.Sequence, E_TTT)); + result.push(';'); + } else { + result.push(';'); + } + + if (stmt.update) { + result.push(space); + result.push(that.generateExpression(stmt.update, Precedence.Sequence, E_TTT)); + result.push(')'); + } else { + result.push(')'); + } + }); + + result.push(this.maybeBlock(stmt.body, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF)); + return result; + }, + + ForInStatement: function (stmt, flags) { + return this.generateIterationForStatement('in', stmt, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF); + }, + + ForOfStatement: function (stmt, flags) { + return this.generateIterationForStatement('of', stmt, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF); + }, + + LabeledStatement: function (stmt, flags) { + return [stmt.label.name + ':', this.maybeBlock(stmt.body, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF)]; + }, + + Program: function (stmt, flags) { + var result, fragment, i, iz, bodyFlags; + iz = stmt.body.length; + result = [safeConcatenation && iz > 0 ? '\n' : '']; + bodyFlags = S_TFTF; + for (i = 0; i < iz; ++i) { + if (!safeConcatenation && i === iz - 1) { + bodyFlags |= F_SEMICOLON_OPT; + } + + if (preserveBlankLines) { + // handle spaces before the first line + if (i === 0) { + if (!stmt.body[0].leadingComments) { + generateBlankLines(stmt.range[0], stmt.body[i].range[0], result); + } + } + + // handle spaces between lines + if (i > 0) { + if (!stmt.body[i - 1].trailingComments && !stmt.body[i].leadingComments) { + generateBlankLines(stmt.body[i - 1].range[1], stmt.body[i].range[0], result); + } + } + } + + fragment = addIndent(this.generateStatement(stmt.body[i], bodyFlags)); + result.push(fragment); + if (i + 1 < iz && !endsWithLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) { + if (preserveBlankLines) { + if (!stmt.body[i + 1].leadingComments) { + result.push(newline); + } + } else { + result.push(newline); + } + } + + if (preserveBlankLines) { + // handle spaces after the last line + if (i === iz - 1) { + if (!stmt.body[i].trailingComments) { + generateBlankLines(stmt.body[i].range[1], stmt.range[1], result); + } + } + } + } + return result; + }, + + FunctionDeclaration: function (stmt, flags) { + return [ + generateAsyncPrefix(stmt, true), + 'function', + generateStarSuffix(stmt) || noEmptySpace(), + stmt.id ? generateIdentifier(stmt.id) : '', + this.generateFunctionBody(stmt) + ]; + }, + + ReturnStatement: function (stmt, flags) { + if (stmt.argument) { + return [join( + 'return', + this.generateExpression(stmt.argument, Precedence.Sequence, E_TTT) + ), this.semicolon(flags)]; + } + return ['return' + this.semicolon(flags)]; + }, + + WhileStatement: function (stmt, flags) { + var result, that = this; + withIndent(function () { + result = [ + 'while' + space + '(', + that.generateExpression(stmt.test, Precedence.Sequence, E_TTT), + ')' + ]; + }); + result.push(this.maybeBlock(stmt.body, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF)); + return result; + }, + + WithStatement: function (stmt, flags) { + var result, that = this; + withIndent(function () { + result = [ + 'with' + space + '(', + that.generateExpression(stmt.object, Precedence.Sequence, E_TTT), + ')' + ]; + }); + result.push(this.maybeBlock(stmt.body, flags & F_SEMICOLON_OPT ? S_TFFT : S_TFFF)); + return result; + } + + }; + + merge(CodeGenerator.prototype, CodeGenerator.Statement); + + // Expressions. + + CodeGenerator.Expression = { + + SequenceExpression: function (expr, precedence, flags) { + var result, i, iz; + if (Precedence.Sequence < precedence) { + flags |= F_ALLOW_IN; + } + result = []; + for (i = 0, iz = expr.expressions.length; i < iz; ++i) { + result.push(this.generateExpression(expr.expressions[i], Precedence.Assignment, flags)); + if (i + 1 < iz) { + result.push(',' + space); + } + } + return parenthesize(result, Precedence.Sequence, precedence); + }, + + AssignmentExpression: function (expr, precedence, flags) { + return this.generateAssignment(expr.left, expr.right, expr.operator, precedence, flags); + }, + + ArrowFunctionExpression: function (expr, precedence, flags) { + return parenthesize(this.generateFunctionBody(expr), Precedence.ArrowFunction, precedence); + }, + + ConditionalExpression: function (expr, precedence, flags) { + if (Precedence.Conditional < precedence) { + flags |= F_ALLOW_IN; + } + return parenthesize( + [ + this.generateExpression(expr.test, Precedence.LogicalOR, flags), + space + '?' + space, + this.generateExpression(expr.consequent, Precedence.Assignment, flags), + space + ':' + space, + this.generateExpression(expr.alternate, Precedence.Assignment, flags) + ], + Precedence.Conditional, + precedence + ); + }, + + LogicalExpression: function (expr, precedence, flags) { + return this.BinaryExpression(expr, precedence, flags); + }, + + BinaryExpression: function (expr, precedence, flags) { + var result, leftPrecedence, rightPrecedence, currentPrecedence, fragment, leftSource; + currentPrecedence = BinaryPrecedence[expr.operator]; + leftPrecedence = expr.operator === '**' ? Precedence.Postfix : currentPrecedence; + rightPrecedence = expr.operator === '**' ? currentPrecedence : currentPrecedence + 1; + + if (currentPrecedence < precedence) { + flags |= F_ALLOW_IN; + } + + fragment = this.generateExpression(expr.left, leftPrecedence, flags); + + leftSource = fragment.toString(); + + if (leftSource.charCodeAt(leftSource.length - 1) === 0x2F /* / */ && esutils.code.isIdentifierPartES5(expr.operator.charCodeAt(0))) { + result = [fragment, noEmptySpace(), expr.operator]; + } else { + result = join(fragment, expr.operator); + } + + fragment = this.generateExpression(expr.right, rightPrecedence, flags); + + if (expr.operator === '/' && fragment.toString().charAt(0) === '/' || + expr.operator.slice(-1) === '<' && fragment.toString().slice(0, 3) === '!--') { + // If '/' concats with '/' or `<` concats with `!--`, it is interpreted as comment start + result.push(noEmptySpace()); + result.push(fragment); + } else { + result = join(result, fragment); + } + + if (expr.operator === 'in' && !(flags & F_ALLOW_IN)) { + return ['(', result, ')']; + } + return parenthesize(result, currentPrecedence, precedence); + }, + + CallExpression: function (expr, precedence, flags) { + var result, i, iz; + // F_ALLOW_UNPARATH_NEW becomes false. + result = [this.generateExpression(expr.callee, Precedence.Call, E_TTF)]; + result.push('('); + for (i = 0, iz = expr['arguments'].length; i < iz; ++i) { + result.push(this.generateExpression(expr['arguments'][i], Precedence.Assignment, E_TTT)); + if (i + 1 < iz) { + result.push(',' + space); + } + } + result.push(')'); + + if (!(flags & F_ALLOW_CALL)) { + return ['(', result, ')']; + } + return parenthesize(result, Precedence.Call, precedence); + }, + + NewExpression: function (expr, precedence, flags) { + var result, length, i, iz, itemFlags; + length = expr['arguments'].length; + + // F_ALLOW_CALL becomes false. + // F_ALLOW_UNPARATH_NEW may become false. + itemFlags = (flags & F_ALLOW_UNPARATH_NEW && !parentheses && length === 0) ? E_TFT : E_TFF; + + result = join( + 'new', + this.generateExpression(expr.callee, Precedence.New, itemFlags) + ); + + if (!(flags & F_ALLOW_UNPARATH_NEW) || parentheses || length > 0) { + result.push('('); + for (i = 0, iz = length; i < iz; ++i) { + result.push(this.generateExpression(expr['arguments'][i], Precedence.Assignment, E_TTT)); + if (i + 1 < iz) { + result.push(',' + space); + } + } + result.push(')'); + } + + return parenthesize(result, Precedence.New, precedence); + }, + + MemberExpression: function (expr, precedence, flags) { + var result, fragment; + + // F_ALLOW_UNPARATH_NEW becomes false. + result = [this.generateExpression(expr.object, Precedence.Call, (flags & F_ALLOW_CALL) ? E_TTF : E_TFF)]; + + if (expr.computed) { + result.push('['); + result.push(this.generateExpression(expr.property, Precedence.Sequence, flags & F_ALLOW_CALL ? E_TTT : E_TFT)); + result.push(']'); + } else { + if (expr.object.type === Syntax.Literal && typeof expr.object.value === 'number') { + fragment = toSourceNodeWhenNeeded(result).toString(); + // When the following conditions are all true, + // 1. No floating point + // 2. Don't have exponents + // 3. The last character is a decimal digit + // 4. Not hexadecimal OR octal number literal + // we should add a floating point. + if ( + fragment.indexOf('.') < 0 && + !/[eExX]/.test(fragment) && + esutils.code.isDecimalDigit(fragment.charCodeAt(fragment.length - 1)) && + !(fragment.length >= 2 && fragment.charCodeAt(0) === 48) // '0' + ) { + result.push(' '); + } + } + result.push('.'); + result.push(generateIdentifier(expr.property)); + } + + return parenthesize(result, Precedence.Member, precedence); + }, + + MetaProperty: function (expr, precedence, flags) { + var result; + result = []; + result.push(typeof expr.meta === "string" ? expr.meta : generateIdentifier(expr.meta)); + result.push('.'); + result.push(typeof expr.property === "string" ? expr.property : generateIdentifier(expr.property)); + return parenthesize(result, Precedence.Member, precedence); + }, + + UnaryExpression: function (expr, precedence, flags) { + var result, fragment, rightCharCode, leftSource, leftCharCode; + fragment = this.generateExpression(expr.argument, Precedence.Unary, E_TTT); + + if (space === '') { + result = join(expr.operator, fragment); + } else { + result = [expr.operator]; + if (expr.operator.length > 2) { + // delete, void, typeof + // get `typeof []`, not `typeof[]` + result = join(result, fragment); + } else { + // Prevent inserting spaces between operator and argument if it is unnecessary + // like, `!cond` + leftSource = toSourceNodeWhenNeeded(result).toString(); + leftCharCode = leftSource.charCodeAt(leftSource.length - 1); + rightCharCode = fragment.toString().charCodeAt(0); + + if (((leftCharCode === 0x2B /* + */ || leftCharCode === 0x2D /* - */) && leftCharCode === rightCharCode) || + (esutils.code.isIdentifierPartES5(leftCharCode) && esutils.code.isIdentifierPartES5(rightCharCode))) { + result.push(noEmptySpace()); + result.push(fragment); + } else { + result.push(fragment); + } + } + } + return parenthesize(result, Precedence.Unary, precedence); + }, + + YieldExpression: function (expr, precedence, flags) { + var result; + if (expr.delegate) { + result = 'yield*'; + } else { + result = 'yield'; + } + if (expr.argument) { + result = join( + result, + this.generateExpression(expr.argument, Precedence.Yield, E_TTT) + ); + } + return parenthesize(result, Precedence.Yield, precedence); + }, + + AwaitExpression: function (expr, precedence, flags) { + var result = join( + expr.all ? 'await*' : 'await', + this.generateExpression(expr.argument, Precedence.Await, E_TTT) + ); + return parenthesize(result, Precedence.Await, precedence); + }, + + UpdateExpression: function (expr, precedence, flags) { + if (expr.prefix) { + return parenthesize( + [ + expr.operator, + this.generateExpression(expr.argument, Precedence.Unary, E_TTT) + ], + Precedence.Unary, + precedence + ); + } + return parenthesize( + [ + this.generateExpression(expr.argument, Precedence.Postfix, E_TTT), + expr.operator + ], + Precedence.Postfix, + precedence + ); + }, + + FunctionExpression: function (expr, precedence, flags) { + var result = [ + generateAsyncPrefix(expr, true), + 'function' + ]; + if (expr.id) { + result.push(generateStarSuffix(expr) || noEmptySpace()); + result.push(generateIdentifier(expr.id)); + } else { + result.push(generateStarSuffix(expr) || space); + } + result.push(this.generateFunctionBody(expr)); + return result; + }, + + ArrayPattern: function (expr, precedence, flags) { + return this.ArrayExpression(expr, precedence, flags, true); + }, + + ArrayExpression: function (expr, precedence, flags, isPattern) { + var result, multiline, that = this; + if (!expr.elements.length) { + return '[]'; + } + multiline = isPattern ? false : expr.elements.length > 1; + result = ['[', multiline ? newline : '']; + withIndent(function (indent) { + var i, iz; + for (i = 0, iz = expr.elements.length; i < iz; ++i) { + if (!expr.elements[i]) { + if (multiline) { + result.push(indent); + } + if (i + 1 === iz) { + result.push(','); + } + } else { + result.push(multiline ? indent : ''); + result.push(that.generateExpression(expr.elements[i], Precedence.Assignment, E_TTT)); + } + if (i + 1 < iz) { + result.push(',' + (multiline ? newline : space)); + } + } + }); + if (multiline && !endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) { + result.push(newline); + } + result.push(multiline ? base : ''); + result.push(']'); + return result; + }, + + RestElement: function(expr, precedence, flags) { + return '...' + this.generatePattern(expr.argument); + }, + + ClassExpression: function (expr, precedence, flags) { + var result, fragment; + result = ['class']; + if (expr.id) { + result = join(result, this.generateExpression(expr.id, Precedence.Sequence, E_TTT)); + } + if (expr.superClass) { + fragment = join('extends', this.generateExpression(expr.superClass, Precedence.Unary, E_TTT)); + result = join(result, fragment); + } + result.push(space); + result.push(this.generateStatement(expr.body, S_TFFT)); + return result; + }, + + MethodDefinition: function (expr, precedence, flags) { + var result, fragment; + if (expr['static']) { + result = ['static' + space]; + } else { + result = []; + } + if (expr.kind === 'get' || expr.kind === 'set') { + fragment = [ + join(expr.kind, this.generatePropertyKey(expr.key, expr.computed)), + this.generateFunctionBody(expr.value) + ]; + } else { + fragment = [ + generateMethodPrefix(expr), + this.generatePropertyKey(expr.key, expr.computed), + this.generateFunctionBody(expr.value) + ]; + } + return join(result, fragment); + }, + + Property: function (expr, precedence, flags) { + if (expr.kind === 'get' || expr.kind === 'set') { + return [ + expr.kind, noEmptySpace(), + this.generatePropertyKey(expr.key, expr.computed), + this.generateFunctionBody(expr.value) + ]; + } + + if (expr.shorthand) { + if (expr.value.type === "AssignmentPattern") { + return this.AssignmentPattern(expr.value, Precedence.Sequence, E_TTT); + } + return this.generatePropertyKey(expr.key, expr.computed); + } + + if (expr.method) { + return [ + generateMethodPrefix(expr), + this.generatePropertyKey(expr.key, expr.computed), + this.generateFunctionBody(expr.value) + ]; + } + + return [ + this.generatePropertyKey(expr.key, expr.computed), + ':' + space, + this.generateExpression(expr.value, Precedence.Assignment, E_TTT) + ]; + }, + + ObjectExpression: function (expr, precedence, flags) { + var multiline, result, fragment, that = this; + + if (!expr.properties.length) { + return '{}'; + } + multiline = expr.properties.length > 1; + + withIndent(function () { + fragment = that.generateExpression(expr.properties[0], Precedence.Sequence, E_TTT); + }); + + if (!multiline) { + // issues 4 + // Do not transform from + // dejavu.Class.declare({ + // method2: function () {} + // }); + // to + // dejavu.Class.declare({method2: function () { + // }}); + if (!hasLineTerminator(toSourceNodeWhenNeeded(fragment).toString())) { + return [ '{', space, fragment, space, '}' ]; + } + } + + withIndent(function (indent) { + var i, iz; + result = [ '{', newline, indent, fragment ]; + + if (multiline) { + result.push(',' + newline); + for (i = 1, iz = expr.properties.length; i < iz; ++i) { + result.push(indent); + result.push(that.generateExpression(expr.properties[i], Precedence.Sequence, E_TTT)); + if (i + 1 < iz) { + result.push(',' + newline); + } + } + } + }); + + if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) { + result.push(newline); + } + result.push(base); + result.push('}'); + return result; + }, + + AssignmentPattern: function(expr, precedence, flags) { + return this.generateAssignment(expr.left, expr.right, '=', precedence, flags); + }, + + ObjectPattern: function (expr, precedence, flags) { + var result, i, iz, multiline, property, that = this; + if (!expr.properties.length) { + return '{}'; + } + + multiline = false; + if (expr.properties.length === 1) { + property = expr.properties[0]; + if ( + property.type === Syntax.Property + && property.value.type !== Syntax.Identifier + ) { + multiline = true; + } + } else { + for (i = 0, iz = expr.properties.length; i < iz; ++i) { + property = expr.properties[i]; + if ( + property.type === Syntax.Property + && !property.shorthand + ) { + multiline = true; + break; + } + } + } + result = ['{', multiline ? newline : '' ]; + + withIndent(function (indent) { + var i, iz; + for (i = 0, iz = expr.properties.length; i < iz; ++i) { + result.push(multiline ? indent : ''); + result.push(that.generateExpression(expr.properties[i], Precedence.Sequence, E_TTT)); + if (i + 1 < iz) { + result.push(',' + (multiline ? newline : space)); + } + } + }); + + if (multiline && !endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) { + result.push(newline); + } + result.push(multiline ? base : ''); + result.push('}'); + return result; + }, + + ThisExpression: function (expr, precedence, flags) { + return 'this'; + }, + + Super: function (expr, precedence, flags) { + return 'super'; + }, + + Identifier: function (expr, precedence, flags) { + return generateIdentifier(expr); + }, + + ImportDefaultSpecifier: function (expr, precedence, flags) { + return generateIdentifier(expr.id || expr.local); + }, + + ImportNamespaceSpecifier: function (expr, precedence, flags) { + var result = ['*']; + var id = expr.id || expr.local; + if (id) { + result.push(space + 'as' + noEmptySpace() + generateIdentifier(id)); + } + return result; + }, + + ImportSpecifier: function (expr, precedence, flags) { + var imported = expr.imported; + var result = [ imported.name ]; + var local = expr.local; + if (local && local.name !== imported.name) { + result.push(noEmptySpace() + 'as' + noEmptySpace() + generateIdentifier(local)); + } + return result; + }, + + ExportSpecifier: function (expr, precedence, flags) { + var local = expr.local; + var result = [ local.name ]; + var exported = expr.exported; + if (exported && exported.name !== local.name) { + result.push(noEmptySpace() + 'as' + noEmptySpace() + generateIdentifier(exported)); + } + return result; + }, + + Literal: function (expr, precedence, flags) { + var raw; + if (expr.hasOwnProperty('raw') && parse && extra.raw) { + try { + raw = parse(expr.raw).body[0].expression; + if (raw.type === Syntax.Literal) { + if (raw.value === expr.value) { + return expr.raw; + } + } + } catch (e) { + // not use raw property + } + } + + if (expr.regex) { + return '/' + expr.regex.pattern + '/' + expr.regex.flags; + } + + if (expr.value === null) { + return 'null'; + } + + if (typeof expr.value === 'string') { + return escapeString(expr.value); + } + + if (typeof expr.value === 'number') { + return generateNumber(expr.value); + } + + if (typeof expr.value === 'boolean') { + return expr.value ? 'true' : 'false'; + } + + return generateRegExp(expr.value); + }, + + GeneratorExpression: function (expr, precedence, flags) { + return this.ComprehensionExpression(expr, precedence, flags); + }, + + ComprehensionExpression: function (expr, precedence, flags) { + // GeneratorExpression should be parenthesized with (...), ComprehensionExpression with [...] + // Due to https://bugzilla.mozilla.org/show_bug.cgi?id=883468 position of expr.body can differ in Spidermonkey and ES6 + + var result, i, iz, fragment, that = this; + result = (expr.type === Syntax.GeneratorExpression) ? ['('] : ['[']; + + if (extra.moz.comprehensionExpressionStartsWithAssignment) { + fragment = this.generateExpression(expr.body, Precedence.Assignment, E_TTT); + result.push(fragment); + } + + if (expr.blocks) { + withIndent(function () { + for (i = 0, iz = expr.blocks.length; i < iz; ++i) { + fragment = that.generateExpression(expr.blocks[i], Precedence.Sequence, E_TTT); + if (i > 0 || extra.moz.comprehensionExpressionStartsWithAssignment) { + result = join(result, fragment); + } else { + result.push(fragment); + } + } + }); + } + + if (expr.filter) { + result = join(result, 'if' + space); + fragment = this.generateExpression(expr.filter, Precedence.Sequence, E_TTT); + result = join(result, [ '(', fragment, ')' ]); + } + + if (!extra.moz.comprehensionExpressionStartsWithAssignment) { + fragment = this.generateExpression(expr.body, Precedence.Assignment, E_TTT); + + result = join(result, fragment); + } + + result.push((expr.type === Syntax.GeneratorExpression) ? ')' : ']'); + return result; + }, + + ComprehensionBlock: function (expr, precedence, flags) { + var fragment; + if (expr.left.type === Syntax.VariableDeclaration) { + fragment = [ + expr.left.kind, noEmptySpace(), + this.generateStatement(expr.left.declarations[0], S_FFFF) + ]; + } else { + fragment = this.generateExpression(expr.left, Precedence.Call, E_TTT); + } + + fragment = join(fragment, expr.of ? 'of' : 'in'); + fragment = join(fragment, this.generateExpression(expr.right, Precedence.Sequence, E_TTT)); + + return [ 'for' + space + '(', fragment, ')' ]; + }, + + SpreadElement: function (expr, precedence, flags) { + return [ + '...', + this.generateExpression(expr.argument, Precedence.Assignment, E_TTT) + ]; + }, + + TaggedTemplateExpression: function (expr, precedence, flags) { + var itemFlags = E_TTF; + if (!(flags & F_ALLOW_CALL)) { + itemFlags = E_TFF; + } + var result = [ + this.generateExpression(expr.tag, Precedence.Call, itemFlags), + this.generateExpression(expr.quasi, Precedence.Primary, E_FFT) + ]; + return parenthesize(result, Precedence.TaggedTemplate, precedence); + }, + + TemplateElement: function (expr, precedence, flags) { + // Don't use "cooked". Since tagged template can use raw template + // representation. So if we do so, it breaks the script semantics. + return expr.value.raw; + }, + + TemplateLiteral: function (expr, precedence, flags) { + var result, i, iz; + result = [ '`' ]; + for (i = 0, iz = expr.quasis.length; i < iz; ++i) { + result.push(this.generateExpression(expr.quasis[i], Precedence.Primary, E_TTT)); + if (i + 1 < iz) { + result.push('${' + space); + result.push(this.generateExpression(expr.expressions[i], Precedence.Sequence, E_TTT)); + result.push(space + '}'); + } + } + result.push('`'); + return result; + }, + + ModuleSpecifier: function (expr, precedence, flags) { + return this.Literal(expr, precedence, flags); + }, + + ImportExpression: function(expr, precedence, flag) { + return parenthesize([ + 'import(', + this.generateExpression(expr.source, Precedence.Assignment, E_TTT), + ')' + ], Precedence.Call, precedence); + }, + + }; + + merge(CodeGenerator.prototype, CodeGenerator.Expression); + + CodeGenerator.prototype.generateExpression = function (expr, precedence, flags) { + var result, type; + + type = expr.type || Syntax.Property; + + if (extra.verbatim && expr.hasOwnProperty(extra.verbatim)) { + return generateVerbatim(expr, precedence); + } + + result = this[type](expr, precedence, flags); + + + if (extra.comment) { + result = addComments(expr, result); + } + return toSourceNodeWhenNeeded(result, expr); + }; + + CodeGenerator.prototype.generateStatement = function (stmt, flags) { + var result, + fragment; + + result = this[stmt.type](stmt, flags); + + // Attach comments + + if (extra.comment) { + result = addComments(stmt, result); + } + + fragment = toSourceNodeWhenNeeded(result).toString(); + if (stmt.type === Syntax.Program && !safeConcatenation && newline === '' && fragment.charAt(fragment.length - 1) === '\n') { + result = sourceMap ? toSourceNodeWhenNeeded(result).replaceRight(/\s+$/, '') : fragment.replace(/\s+$/, ''); + } + + return toSourceNodeWhenNeeded(result, stmt); + }; + + function generateInternal(node) { + var codegen; + + codegen = new CodeGenerator(); + if (isStatement(node)) { + return codegen.generateStatement(node, S_TFFF); + } + + if (isExpression(node)) { + return codegen.generateExpression(node, Precedence.Sequence, E_TTT); + } + + throw new Error('Unknown node type: ' + node.type); + } + + function generate(node, options) { + var defaultOptions = getDefaultOptions(), result, pair; + + if (options != null) { + // Obsolete options + // + // `options.indent` + // `options.base` + // + // Instead of them, we can use `option.format.indent`. + if (typeof options.indent === 'string') { + defaultOptions.format.indent.style = options.indent; + } + if (typeof options.base === 'number') { + defaultOptions.format.indent.base = options.base; + } + options = updateDeeply(defaultOptions, options); + indent = options.format.indent.style; + if (typeof options.base === 'string') { + base = options.base; + } else { + base = stringRepeat(indent, options.format.indent.base); + } + } else { + options = defaultOptions; + indent = options.format.indent.style; + base = stringRepeat(indent, options.format.indent.base); + } + json = options.format.json; + renumber = options.format.renumber; + hexadecimal = json ? false : options.format.hexadecimal; + quotes = json ? 'double' : options.format.quotes; + escapeless = options.format.escapeless; + newline = options.format.newline; + space = options.format.space; + if (options.format.compact) { + newline = space = indent = base = ''; + } + parentheses = options.format.parentheses; + semicolons = options.format.semicolons; + safeConcatenation = options.format.safeConcatenation; + directive = options.directive; + parse = json ? null : options.parse; + sourceMap = options.sourceMap; + sourceCode = options.sourceCode; + preserveBlankLines = options.format.preserveBlankLines && sourceCode !== null; + extra = options; + + if (sourceMap) { + if (!exports.browser) { + // We assume environment is node.js + // And prevent from including source-map by browserify + SourceNode = (__webpack_require__(/*! source-map */ "../../../.yarn/berry/cache/source-map-npm-0.6.1-1a3621db16-9.zip/node_modules/source-map/source-map.js").SourceNode); + } else { + SourceNode = global.sourceMap.SourceNode; + } + } + + result = generateInternal(node); + + if (!sourceMap) { + pair = {code: result.toString(), map: null}; + return options.sourceMapWithCode ? pair : pair.code; + } + + + pair = result.toStringWithSourceMap({ + file: options.file, + sourceRoot: options.sourceMapRoot + }); + + if (options.sourceContent) { + pair.map.setSourceContent(options.sourceMap, + options.sourceContent); + } + + if (options.sourceMapWithCode) { + return pair; + } + + return pair.map.toString(); + } + + FORMAT_MINIFY = { + indent: { + style: '', + base: 0 + }, + renumber: true, + hexadecimal: true, + quotes: 'auto', + escapeless: true, + compact: true, + parentheses: false, + semicolons: false + }; + + FORMAT_DEFAULTS = getDefaultOptions().format; + + exports.version = __webpack_require__(/*! ./package.json */ "../../../.yarn/berry/cache/escodegen-npm-1.14.3-a4dedc6eeb-9.zip/node_modules/escodegen/package.json").version; + exports.generate = generate; + exports.attachComments = estraverse.attachComments; + exports.Precedence = updateDeeply({}, Precedence); + exports.browser = false; + exports.FORMAT_MINIFY = FORMAT_MINIFY; + exports.FORMAT_DEFAULTS = FORMAT_DEFAULTS; +}()); +/* vim: set sw=4 ts=4 et tw=80 : */ + + +/***/ }), + +/***/ "../../../.yarn/berry/cache/esprima-npm-4.0.1-1084e98778-9.zip/node_modules/esprima/dist/esprima.js": +/*!**********************************************************************************************************!*\ + !*** ../../../.yarn/berry/cache/esprima-npm-4.0.1-1084e98778-9.zip/node_modules/esprima/dist/esprima.js ***! + \**********************************************************************************************************/ +/***/ (function(module) { + +(function webpackUniversalModuleDefinition(root, factory) { +/* istanbul ignore next */ + if(true) + module.exports = factory(); + else {} +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __nested_webpack_require_583__(moduleId) { + +/******/ // Check if module is in cache +/* istanbul ignore if */ +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_583__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_583__.m = modules; + +/******/ // expose the module cache +/******/ __nested_webpack_require_583__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_583__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_583__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __nested_webpack_require_1808__) { + + "use strict"; + /* + Copyright JS Foundation and other contributors, https://js.foundation/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + Object.defineProperty(exports, "__esModule", { value: true }); + var comment_handler_1 = __nested_webpack_require_1808__(1); + var jsx_parser_1 = __nested_webpack_require_1808__(3); + var parser_1 = __nested_webpack_require_1808__(8); + var tokenizer_1 = __nested_webpack_require_1808__(15); + function parse(code, options, delegate) { + var commentHandler = null; + var proxyDelegate = function (node, metadata) { + if (delegate) { + delegate(node, metadata); + } + if (commentHandler) { + commentHandler.visit(node, metadata); + } + }; + var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null; + var collectComment = false; + if (options) { + collectComment = (typeof options.comment === 'boolean' && options.comment); + var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment); + if (collectComment || attachComment) { + commentHandler = new comment_handler_1.CommentHandler(); + commentHandler.attach = attachComment; + options.comment = true; + parserDelegate = proxyDelegate; + } + } + var isModule = false; + if (options && typeof options.sourceType === 'string') { + isModule = (options.sourceType === 'module'); + } + var parser; + if (options && typeof options.jsx === 'boolean' && options.jsx) { + parser = new jsx_parser_1.JSXParser(code, options, parserDelegate); + } + else { + parser = new parser_1.Parser(code, options, parserDelegate); + } + var program = isModule ? parser.parseModule() : parser.parseScript(); + var ast = program; + if (collectComment && commentHandler) { + ast.comments = commentHandler.comments; + } + if (parser.config.tokens) { + ast.tokens = parser.tokens; + } + if (parser.config.tolerant) { + ast.errors = parser.errorHandler.errors; + } + return ast; + } + exports.parse = parse; + function parseModule(code, options, delegate) { + var parsingOptions = options || {}; + parsingOptions.sourceType = 'module'; + return parse(code, parsingOptions, delegate); + } + exports.parseModule = parseModule; + function parseScript(code, options, delegate) { + var parsingOptions = options || {}; + parsingOptions.sourceType = 'script'; + return parse(code, parsingOptions, delegate); + } + exports.parseScript = parseScript; + function tokenize(code, options, delegate) { + var tokenizer = new tokenizer_1.Tokenizer(code, options); + var tokens; + tokens = []; + try { + while (true) { + var token = tokenizer.getNextToken(); + if (!token) { + break; + } + if (delegate) { + token = delegate(token); + } + tokens.push(token); + } + } + catch (e) { + tokenizer.errorHandler.tolerate(e); + } + if (tokenizer.errorHandler.tolerant) { + tokens.errors = tokenizer.errors(); + } + return tokens; + } + exports.tokenize = tokenize; + var syntax_1 = __nested_webpack_require_1808__(2); + exports.Syntax = syntax_1.Syntax; + // Sync with *.json manifests. + exports.version = '4.0.1'; + + +/***/ }, +/* 1 */ +/***/ function(module, exports, __nested_webpack_require_6456__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var syntax_1 = __nested_webpack_require_6456__(2); + var CommentHandler = (function () { + function CommentHandler() { + this.attach = false; + this.comments = []; + this.stack = []; + this.leading = []; + this.trailing = []; + } + CommentHandler.prototype.insertInnerComments = function (node, metadata) { + // innnerComments for properties empty block + // `function a() {/** comments **\/}` + if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) { + var innerComments = []; + for (var i = this.leading.length - 1; i >= 0; --i) { + var entry = this.leading[i]; + if (metadata.end.offset >= entry.start) { + innerComments.unshift(entry.comment); + this.leading.splice(i, 1); + this.trailing.splice(i, 1); + } + } + if (innerComments.length) { + node.innerComments = innerComments; + } + } + }; + CommentHandler.prototype.findTrailingComments = function (metadata) { + var trailingComments = []; + if (this.trailing.length > 0) { + for (var i = this.trailing.length - 1; i >= 0; --i) { + var entry_1 = this.trailing[i]; + if (entry_1.start >= metadata.end.offset) { + trailingComments.unshift(entry_1.comment); + } + } + this.trailing.length = 0; + return trailingComments; + } + var entry = this.stack[this.stack.length - 1]; + if (entry && entry.node.trailingComments) { + var firstComment = entry.node.trailingComments[0]; + if (firstComment && firstComment.range[0] >= metadata.end.offset) { + trailingComments = entry.node.trailingComments; + delete entry.node.trailingComments; + } + } + return trailingComments; + }; + CommentHandler.prototype.findLeadingComments = function (metadata) { + var leadingComments = []; + var target; + while (this.stack.length > 0) { + var entry = this.stack[this.stack.length - 1]; + if (entry && entry.start >= metadata.start.offset) { + target = entry.node; + this.stack.pop(); + } + else { + break; + } + } + if (target) { + var count = target.leadingComments ? target.leadingComments.length : 0; + for (var i = count - 1; i >= 0; --i) { + var comment = target.leadingComments[i]; + if (comment.range[1] <= metadata.start.offset) { + leadingComments.unshift(comment); + target.leadingComments.splice(i, 1); + } + } + if (target.leadingComments && target.leadingComments.length === 0) { + delete target.leadingComments; + } + return leadingComments; + } + for (var i = this.leading.length - 1; i >= 0; --i) { + var entry = this.leading[i]; + if (entry.start <= metadata.start.offset) { + leadingComments.unshift(entry.comment); + this.leading.splice(i, 1); + } + } + return leadingComments; + }; + CommentHandler.prototype.visitNode = function (node, metadata) { + if (node.type === syntax_1.Syntax.Program && node.body.length > 0) { + return; + } + this.insertInnerComments(node, metadata); + var trailingComments = this.findTrailingComments(metadata); + var leadingComments = this.findLeadingComments(metadata); + if (leadingComments.length > 0) { + node.leadingComments = leadingComments; + } + if (trailingComments.length > 0) { + node.trailingComments = trailingComments; + } + this.stack.push({ + node: node, + start: metadata.start.offset + }); + }; + CommentHandler.prototype.visitComment = function (node, metadata) { + var type = (node.type[0] === 'L') ? 'Line' : 'Block'; + var comment = { + type: type, + value: node.value + }; + if (node.range) { + comment.range = node.range; + } + if (node.loc) { + comment.loc = node.loc; + } + this.comments.push(comment); + if (this.attach) { + var entry = { + comment: { + type: type, + value: node.value, + range: [metadata.start.offset, metadata.end.offset] + }, + start: metadata.start.offset + }; + if (node.loc) { + entry.comment.loc = node.loc; + } + node.type = type; + this.leading.push(entry); + this.trailing.push(entry); + } + }; + CommentHandler.prototype.visit = function (node, metadata) { + if (node.type === 'LineComment') { + this.visitComment(node, metadata); + } + else if (node.type === 'BlockComment') { + this.visitComment(node, metadata); + } + else if (this.attach) { + this.visitNode(node, metadata); + } + }; + return CommentHandler; + }()); + exports.CommentHandler = CommentHandler; + + +/***/ }, +/* 2 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Syntax = { + AssignmentExpression: 'AssignmentExpression', + AssignmentPattern: 'AssignmentPattern', + ArrayExpression: 'ArrayExpression', + ArrayPattern: 'ArrayPattern', + ArrowFunctionExpression: 'ArrowFunctionExpression', + AwaitExpression: 'AwaitExpression', + BlockStatement: 'BlockStatement', + BinaryExpression: 'BinaryExpression', + BreakStatement: 'BreakStatement', + CallExpression: 'CallExpression', + CatchClause: 'CatchClause', + ClassBody: 'ClassBody', + ClassDeclaration: 'ClassDeclaration', + ClassExpression: 'ClassExpression', + ConditionalExpression: 'ConditionalExpression', + ContinueStatement: 'ContinueStatement', + DoWhileStatement: 'DoWhileStatement', + DebuggerStatement: 'DebuggerStatement', + EmptyStatement: 'EmptyStatement', + ExportAllDeclaration: 'ExportAllDeclaration', + ExportDefaultDeclaration: 'ExportDefaultDeclaration', + ExportNamedDeclaration: 'ExportNamedDeclaration', + ExportSpecifier: 'ExportSpecifier', + ExpressionStatement: 'ExpressionStatement', + ForStatement: 'ForStatement', + ForOfStatement: 'ForOfStatement', + ForInStatement: 'ForInStatement', + FunctionDeclaration: 'FunctionDeclaration', + FunctionExpression: 'FunctionExpression', + Identifier: 'Identifier', + IfStatement: 'IfStatement', + ImportDeclaration: 'ImportDeclaration', + ImportDefaultSpecifier: 'ImportDefaultSpecifier', + ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', + ImportSpecifier: 'ImportSpecifier', + Literal: 'Literal', + LabeledStatement: 'LabeledStatement', + LogicalExpression: 'LogicalExpression', + MemberExpression: 'MemberExpression', + MetaProperty: 'MetaProperty', + MethodDefinition: 'MethodDefinition', + NewExpression: 'NewExpression', + ObjectExpression: 'ObjectExpression', + ObjectPattern: 'ObjectPattern', + Program: 'Program', + Property: 'Property', + RestElement: 'RestElement', + ReturnStatement: 'ReturnStatement', + SequenceExpression: 'SequenceExpression', + SpreadElement: 'SpreadElement', + Super: 'Super', + SwitchCase: 'SwitchCase', + SwitchStatement: 'SwitchStatement', + TaggedTemplateExpression: 'TaggedTemplateExpression', + TemplateElement: 'TemplateElement', + TemplateLiteral: 'TemplateLiteral', + ThisExpression: 'ThisExpression', + ThrowStatement: 'ThrowStatement', + TryStatement: 'TryStatement', + UnaryExpression: 'UnaryExpression', + UpdateExpression: 'UpdateExpression', + VariableDeclaration: 'VariableDeclaration', + VariableDeclarator: 'VariableDeclarator', + WhileStatement: 'WhileStatement', + WithStatement: 'WithStatement', + YieldExpression: 'YieldExpression' + }; + + +/***/ }, +/* 3 */ +/***/ function(module, exports, __nested_webpack_require_15019__) { + + "use strict"; +/* istanbul ignore next */ + var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(exports, "__esModule", { value: true }); + var character_1 = __nested_webpack_require_15019__(4); + var JSXNode = __nested_webpack_require_15019__(5); + var jsx_syntax_1 = __nested_webpack_require_15019__(6); + var Node = __nested_webpack_require_15019__(7); + var parser_1 = __nested_webpack_require_15019__(8); + var token_1 = __nested_webpack_require_15019__(13); + var xhtml_entities_1 = __nested_webpack_require_15019__(14); + token_1.TokenName[100 /* Identifier */] = 'JSXIdentifier'; + token_1.TokenName[101 /* Text */] = 'JSXText'; + // Fully qualified element name, e.g. returns "svg:path" + function getQualifiedElementName(elementName) { + var qualifiedName; + switch (elementName.type) { + case jsx_syntax_1.JSXSyntax.JSXIdentifier: + var id = elementName; + qualifiedName = id.name; + break; + case jsx_syntax_1.JSXSyntax.JSXNamespacedName: + var ns = elementName; + qualifiedName = getQualifiedElementName(ns.namespace) + ':' + + getQualifiedElementName(ns.name); + break; + case jsx_syntax_1.JSXSyntax.JSXMemberExpression: + var expr = elementName; + qualifiedName = getQualifiedElementName(expr.object) + '.' + + getQualifiedElementName(expr.property); + break; + /* istanbul ignore next */ + default: + break; + } + return qualifiedName; + } + var JSXParser = (function (_super) { + __extends(JSXParser, _super); + function JSXParser(code, options, delegate) { + return _super.call(this, code, options, delegate) || this; + } + JSXParser.prototype.parsePrimaryExpression = function () { + return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this); + }; + JSXParser.prototype.startJSX = function () { + // Unwind the scanner before the lookahead token. + this.scanner.index = this.startMarker.index; + this.scanner.lineNumber = this.startMarker.line; + this.scanner.lineStart = this.startMarker.index - this.startMarker.column; + }; + JSXParser.prototype.finishJSX = function () { + // Prime the next lookahead. + this.nextToken(); + }; + JSXParser.prototype.reenterJSX = function () { + this.startJSX(); + this.expectJSX('}'); + // Pop the closing '}' added from the lookahead. + if (this.config.tokens) { + this.tokens.pop(); + } + }; + JSXParser.prototype.createJSXNode = function () { + this.collectComments(); + return { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + }; + }; + JSXParser.prototype.createJSXChildNode = function () { + return { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + }; + }; + JSXParser.prototype.scanXHTMLEntity = function (quote) { + var result = '&'; + var valid = true; + var terminated = false; + var numeric = false; + var hex = false; + while (!this.scanner.eof() && valid && !terminated) { + var ch = this.scanner.source[this.scanner.index]; + if (ch === quote) { + break; + } + terminated = (ch === ';'); + result += ch; + ++this.scanner.index; + if (!terminated) { + switch (result.length) { + case 2: + // e.g. '{' + numeric = (ch === '#'); + break; + case 3: + if (numeric) { + // e.g. 'A' + hex = (ch === 'x'); + valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0)); + numeric = numeric && !hex; + } + break; + default: + valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0))); + valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0))); + break; + } + } + } + if (valid && terminated && result.length > 2) { + // e.g. 'A' becomes just '#x41' + var str = result.substr(1, result.length - 2); + if (numeric && str.length > 1) { + result = String.fromCharCode(parseInt(str.substr(1), 10)); + } + else if (hex && str.length > 2) { + result = String.fromCharCode(parseInt('0' + str.substr(1), 16)); + } + else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) { + result = xhtml_entities_1.XHTMLEntities[str]; + } + } + return result; + }; + // Scan the next JSX token. This replaces Scanner#lex when in JSX mode. + JSXParser.prototype.lexJSX = function () { + var cp = this.scanner.source.charCodeAt(this.scanner.index); + // < > / : = { } + if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) { + var value = this.scanner.source[this.scanner.index++]; + return { + type: 7 /* Punctuator */, + value: value, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: this.scanner.index - 1, + end: this.scanner.index + }; + } + // " ' + if (cp === 34 || cp === 39) { + var start = this.scanner.index; + var quote = this.scanner.source[this.scanner.index++]; + var str = ''; + while (!this.scanner.eof()) { + var ch = this.scanner.source[this.scanner.index++]; + if (ch === quote) { + break; + } + else if (ch === '&') { + str += this.scanXHTMLEntity(quote); + } + else { + str += ch; + } + } + return { + type: 8 /* StringLiteral */, + value: str, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + // ... or . + if (cp === 46) { + var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1); + var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2); + var value = (n1 === 46 && n2 === 46) ? '...' : '.'; + var start = this.scanner.index; + this.scanner.index += value.length; + return { + type: 7 /* Punctuator */, + value: value, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + // ` + if (cp === 96) { + // Only placeholder, since it will be rescanned as a real assignment expression. + return { + type: 10 /* Template */, + value: '', + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: this.scanner.index, + end: this.scanner.index + }; + } + // Identifer can not contain backslash (char code 92). + if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) { + var start = this.scanner.index; + ++this.scanner.index; + while (!this.scanner.eof()) { + var ch = this.scanner.source.charCodeAt(this.scanner.index); + if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) { + ++this.scanner.index; + } + else if (ch === 45) { + // Hyphen (char code 45) can be part of an identifier. + ++this.scanner.index; + } + else { + break; + } + } + var id = this.scanner.source.slice(start, this.scanner.index); + return { + type: 100 /* Identifier */, + value: id, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + return this.scanner.lex(); + }; + JSXParser.prototype.nextJSXToken = function () { + this.collectComments(); + this.startMarker.index = this.scanner.index; + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + var token = this.lexJSX(); + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + if (this.config.tokens) { + this.tokens.push(this.convertToken(token)); + } + return token; + }; + JSXParser.prototype.nextJSXText = function () { + this.startMarker.index = this.scanner.index; + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + var start = this.scanner.index; + var text = ''; + while (!this.scanner.eof()) { + var ch = this.scanner.source[this.scanner.index]; + if (ch === '{' || ch === '<') { + break; + } + ++this.scanner.index; + text += ch; + if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) { + ++this.scanner.lineNumber; + if (ch === '\r' && this.scanner.source[this.scanner.index] === '\n') { + ++this.scanner.index; + } + this.scanner.lineStart = this.scanner.index; + } + } + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + var token = { + type: 101 /* Text */, + value: text, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + if ((text.length > 0) && this.config.tokens) { + this.tokens.push(this.convertToken(token)); + } + return token; + }; + JSXParser.prototype.peekJSXToken = function () { + var state = this.scanner.saveState(); + this.scanner.scanComments(); + var next = this.lexJSX(); + this.scanner.restoreState(state); + return next; + }; + // Expect the next JSX token to match the specified punctuator. + // If not, an exception will be thrown. + JSXParser.prototype.expectJSX = function (value) { + var token = this.nextJSXToken(); + if (token.type !== 7 /* Punctuator */ || token.value !== value) { + this.throwUnexpectedToken(token); + } + }; + // Return true if the next JSX token matches the specified punctuator. + JSXParser.prototype.matchJSX = function (value) { + var next = this.peekJSXToken(); + return next.type === 7 /* Punctuator */ && next.value === value; + }; + JSXParser.prototype.parseJSXIdentifier = function () { + var node = this.createJSXNode(); + var token = this.nextJSXToken(); + if (token.type !== 100 /* Identifier */) { + this.throwUnexpectedToken(token); + } + return this.finalize(node, new JSXNode.JSXIdentifier(token.value)); + }; + JSXParser.prototype.parseJSXElementName = function () { + var node = this.createJSXNode(); + var elementName = this.parseJSXIdentifier(); + if (this.matchJSX(':')) { + var namespace = elementName; + this.expectJSX(':'); + var name_1 = this.parseJSXIdentifier(); + elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1)); + } + else if (this.matchJSX('.')) { + while (this.matchJSX('.')) { + var object = elementName; + this.expectJSX('.'); + var property = this.parseJSXIdentifier(); + elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property)); + } + } + return elementName; + }; + JSXParser.prototype.parseJSXAttributeName = function () { + var node = this.createJSXNode(); + var attributeName; + var identifier = this.parseJSXIdentifier(); + if (this.matchJSX(':')) { + var namespace = identifier; + this.expectJSX(':'); + var name_2 = this.parseJSXIdentifier(); + attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2)); + } + else { + attributeName = identifier; + } + return attributeName; + }; + JSXParser.prototype.parseJSXStringLiteralAttribute = function () { + var node = this.createJSXNode(); + var token = this.nextJSXToken(); + if (token.type !== 8 /* StringLiteral */) { + this.throwUnexpectedToken(token); + } + var raw = this.getTokenRaw(token); + return this.finalize(node, new Node.Literal(token.value, raw)); + }; + JSXParser.prototype.parseJSXExpressionAttribute = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + this.finishJSX(); + if (this.match('}')) { + this.tolerateError('JSX attributes must only be assigned a non-empty expression'); + } + var expression = this.parseAssignmentExpression(); + this.reenterJSX(); + return this.finalize(node, new JSXNode.JSXExpressionContainer(expression)); + }; + JSXParser.prototype.parseJSXAttributeValue = function () { + return this.matchJSX('{') ? this.parseJSXExpressionAttribute() : + this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute(); + }; + JSXParser.prototype.parseJSXNameValueAttribute = function () { + var node = this.createJSXNode(); + var name = this.parseJSXAttributeName(); + var value = null; + if (this.matchJSX('=')) { + this.expectJSX('='); + value = this.parseJSXAttributeValue(); + } + return this.finalize(node, new JSXNode.JSXAttribute(name, value)); + }; + JSXParser.prototype.parseJSXSpreadAttribute = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + this.expectJSX('...'); + this.finishJSX(); + var argument = this.parseAssignmentExpression(); + this.reenterJSX(); + return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument)); + }; + JSXParser.prototype.parseJSXAttributes = function () { + var attributes = []; + while (!this.matchJSX('/') && !this.matchJSX('>')) { + var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() : + this.parseJSXNameValueAttribute(); + attributes.push(attribute); + } + return attributes; + }; + JSXParser.prototype.parseJSXOpeningElement = function () { + var node = this.createJSXNode(); + this.expectJSX('<'); + var name = this.parseJSXElementName(); + var attributes = this.parseJSXAttributes(); + var selfClosing = this.matchJSX('/'); + if (selfClosing) { + this.expectJSX('/'); + } + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes)); + }; + JSXParser.prototype.parseJSXBoundaryElement = function () { + var node = this.createJSXNode(); + this.expectJSX('<'); + if (this.matchJSX('/')) { + this.expectJSX('/'); + var name_3 = this.parseJSXElementName(); + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXClosingElement(name_3)); + } + var name = this.parseJSXElementName(); + var attributes = this.parseJSXAttributes(); + var selfClosing = this.matchJSX('/'); + if (selfClosing) { + this.expectJSX('/'); + } + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes)); + }; + JSXParser.prototype.parseJSXEmptyExpression = function () { + var node = this.createJSXChildNode(); + this.collectComments(); + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + return this.finalize(node, new JSXNode.JSXEmptyExpression()); + }; + JSXParser.prototype.parseJSXExpressionContainer = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + var expression; + if (this.matchJSX('}')) { + expression = this.parseJSXEmptyExpression(); + this.expectJSX('}'); + } + else { + this.finishJSX(); + expression = this.parseAssignmentExpression(); + this.reenterJSX(); + } + return this.finalize(node, new JSXNode.JSXExpressionContainer(expression)); + }; + JSXParser.prototype.parseJSXChildren = function () { + var children = []; + while (!this.scanner.eof()) { + var node = this.createJSXChildNode(); + var token = this.nextJSXText(); + if (token.start < token.end) { + var raw = this.getTokenRaw(token); + var child = this.finalize(node, new JSXNode.JSXText(token.value, raw)); + children.push(child); + } + if (this.scanner.source[this.scanner.index] === '{') { + var container = this.parseJSXExpressionContainer(); + children.push(container); + } + else { + break; + } + } + return children; + }; + JSXParser.prototype.parseComplexJSXElement = function (el) { + var stack = []; + while (!this.scanner.eof()) { + el.children = el.children.concat(this.parseJSXChildren()); + var node = this.createJSXChildNode(); + var element = this.parseJSXBoundaryElement(); + if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) { + var opening = element; + if (opening.selfClosing) { + var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null)); + el.children.push(child); + } + else { + stack.push(el); + el = { node: node, opening: opening, closing: null, children: [] }; + } + } + if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) { + el.closing = element; + var open_1 = getQualifiedElementName(el.opening.name); + var close_1 = getQualifiedElementName(el.closing.name); + if (open_1 !== close_1) { + this.tolerateError('Expected corresponding JSX closing tag for %0', open_1); + } + if (stack.length > 0) { + var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing)); + el = stack[stack.length - 1]; + el.children.push(child); + stack.pop(); + } + else { + break; + } + } + } + return el; + }; + JSXParser.prototype.parseJSXElement = function () { + var node = this.createJSXNode(); + var opening = this.parseJSXOpeningElement(); + var children = []; + var closing = null; + if (!opening.selfClosing) { + var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children }); + children = el.children; + closing = el.closing; + } + return this.finalize(node, new JSXNode.JSXElement(opening, children, closing)); + }; + JSXParser.prototype.parseJSXRoot = function () { + // Pop the opening '<' added from the lookahead. + if (this.config.tokens) { + this.tokens.pop(); + } + this.startJSX(); + var element = this.parseJSXElement(); + this.finishJSX(); + return element; + }; + JSXParser.prototype.isStartOfExpression = function () { + return _super.prototype.isStartOfExpression.call(this) || this.match('<'); + }; + return JSXParser; + }(parser_1.Parser)); + exports.JSXParser = JSXParser; + + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + // See also tools/generate-unicode-regex.js. + var Regex = { + // Unicode v8.0.0 NonAsciiIdentifierStart: + NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/, + // Unicode v8.0.0 NonAsciiIdentifierPart: + NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/ + }; + exports.Character = { + /* tslint:disable:no-bitwise */ + fromCodePoint: function (cp) { + return (cp < 0x10000) ? String.fromCharCode(cp) : + String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) + + String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023)); + }, + // https://tc39.github.io/ecma262/#sec-white-space + isWhiteSpace: function (cp) { + return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) || + (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0); + }, + // https://tc39.github.io/ecma262/#sec-line-terminators + isLineTerminator: function (cp) { + return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029); + }, + // https://tc39.github.io/ecma262/#sec-names-and-keywords + isIdentifierStart: function (cp) { + return (cp === 0x24) || (cp === 0x5F) || + (cp >= 0x41 && cp <= 0x5A) || + (cp >= 0x61 && cp <= 0x7A) || + (cp === 0x5C) || + ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp))); + }, + isIdentifierPart: function (cp) { + return (cp === 0x24) || (cp === 0x5F) || + (cp >= 0x41 && cp <= 0x5A) || + (cp >= 0x61 && cp <= 0x7A) || + (cp >= 0x30 && cp <= 0x39) || + (cp === 0x5C) || + ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp))); + }, + // https://tc39.github.io/ecma262/#sec-literals-numeric-literals + isDecimalDigit: function (cp) { + return (cp >= 0x30 && cp <= 0x39); // 0..9 + }, + isHexDigit: function (cp) { + return (cp >= 0x30 && cp <= 0x39) || + (cp >= 0x41 && cp <= 0x46) || + (cp >= 0x61 && cp <= 0x66); // a..f + }, + isOctalDigit: function (cp) { + return (cp >= 0x30 && cp <= 0x37); // 0..7 + } + }; + + +/***/ }, +/* 5 */ +/***/ function(module, exports, __nested_webpack_require_54354__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var jsx_syntax_1 = __nested_webpack_require_54354__(6); + /* tslint:disable:max-classes-per-file */ + var JSXClosingElement = (function () { + function JSXClosingElement(name) { + this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement; + this.name = name; + } + return JSXClosingElement; + }()); + exports.JSXClosingElement = JSXClosingElement; + var JSXElement = (function () { + function JSXElement(openingElement, children, closingElement) { + this.type = jsx_syntax_1.JSXSyntax.JSXElement; + this.openingElement = openingElement; + this.children = children; + this.closingElement = closingElement; + } + return JSXElement; + }()); + exports.JSXElement = JSXElement; + var JSXEmptyExpression = (function () { + function JSXEmptyExpression() { + this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression; + } + return JSXEmptyExpression; + }()); + exports.JSXEmptyExpression = JSXEmptyExpression; + var JSXExpressionContainer = (function () { + function JSXExpressionContainer(expression) { + this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer; + this.expression = expression; + } + return JSXExpressionContainer; + }()); + exports.JSXExpressionContainer = JSXExpressionContainer; + var JSXIdentifier = (function () { + function JSXIdentifier(name) { + this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier; + this.name = name; + } + return JSXIdentifier; + }()); + exports.JSXIdentifier = JSXIdentifier; + var JSXMemberExpression = (function () { + function JSXMemberExpression(object, property) { + this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression; + this.object = object; + this.property = property; + } + return JSXMemberExpression; + }()); + exports.JSXMemberExpression = JSXMemberExpression; + var JSXAttribute = (function () { + function JSXAttribute(name, value) { + this.type = jsx_syntax_1.JSXSyntax.JSXAttribute; + this.name = name; + this.value = value; + } + return JSXAttribute; + }()); + exports.JSXAttribute = JSXAttribute; + var JSXNamespacedName = (function () { + function JSXNamespacedName(namespace, name) { + this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName; + this.namespace = namespace; + this.name = name; + } + return JSXNamespacedName; + }()); + exports.JSXNamespacedName = JSXNamespacedName; + var JSXOpeningElement = (function () { + function JSXOpeningElement(name, selfClosing, attributes) { + this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement; + this.name = name; + this.selfClosing = selfClosing; + this.attributes = attributes; + } + return JSXOpeningElement; + }()); + exports.JSXOpeningElement = JSXOpeningElement; + var JSXSpreadAttribute = (function () { + function JSXSpreadAttribute(argument) { + this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute; + this.argument = argument; + } + return JSXSpreadAttribute; + }()); + exports.JSXSpreadAttribute = JSXSpreadAttribute; + var JSXText = (function () { + function JSXText(value, raw) { + this.type = jsx_syntax_1.JSXSyntax.JSXText; + this.value = value; + this.raw = raw; + } + return JSXText; + }()); + exports.JSXText = JSXText; + + +/***/ }, +/* 6 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.JSXSyntax = { + JSXAttribute: 'JSXAttribute', + JSXClosingElement: 'JSXClosingElement', + JSXElement: 'JSXElement', + JSXEmptyExpression: 'JSXEmptyExpression', + JSXExpressionContainer: 'JSXExpressionContainer', + JSXIdentifier: 'JSXIdentifier', + JSXMemberExpression: 'JSXMemberExpression', + JSXNamespacedName: 'JSXNamespacedName', + JSXOpeningElement: 'JSXOpeningElement', + JSXSpreadAttribute: 'JSXSpreadAttribute', + JSXText: 'JSXText' + }; + + +/***/ }, +/* 7 */ +/***/ function(module, exports, __nested_webpack_require_58416__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var syntax_1 = __nested_webpack_require_58416__(2); + /* tslint:disable:max-classes-per-file */ + var ArrayExpression = (function () { + function ArrayExpression(elements) { + this.type = syntax_1.Syntax.ArrayExpression; + this.elements = elements; + } + return ArrayExpression; + }()); + exports.ArrayExpression = ArrayExpression; + var ArrayPattern = (function () { + function ArrayPattern(elements) { + this.type = syntax_1.Syntax.ArrayPattern; + this.elements = elements; + } + return ArrayPattern; + }()); + exports.ArrayPattern = ArrayPattern; + var ArrowFunctionExpression = (function () { + function ArrowFunctionExpression(params, body, expression) { + this.type = syntax_1.Syntax.ArrowFunctionExpression; + this.id = null; + this.params = params; + this.body = body; + this.generator = false; + this.expression = expression; + this.async = false; + } + return ArrowFunctionExpression; + }()); + exports.ArrowFunctionExpression = ArrowFunctionExpression; + var AssignmentExpression = (function () { + function AssignmentExpression(operator, left, right) { + this.type = syntax_1.Syntax.AssignmentExpression; + this.operator = operator; + this.left = left; + this.right = right; + } + return AssignmentExpression; + }()); + exports.AssignmentExpression = AssignmentExpression; + var AssignmentPattern = (function () { + function AssignmentPattern(left, right) { + this.type = syntax_1.Syntax.AssignmentPattern; + this.left = left; + this.right = right; + } + return AssignmentPattern; + }()); + exports.AssignmentPattern = AssignmentPattern; + var AsyncArrowFunctionExpression = (function () { + function AsyncArrowFunctionExpression(params, body, expression) { + this.type = syntax_1.Syntax.ArrowFunctionExpression; + this.id = null; + this.params = params; + this.body = body; + this.generator = false; + this.expression = expression; + this.async = true; + } + return AsyncArrowFunctionExpression; + }()); + exports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression; + var AsyncFunctionDeclaration = (function () { + function AsyncFunctionDeclaration(id, params, body) { + this.type = syntax_1.Syntax.FunctionDeclaration; + this.id = id; + this.params = params; + this.body = body; + this.generator = false; + this.expression = false; + this.async = true; + } + return AsyncFunctionDeclaration; + }()); + exports.AsyncFunctionDeclaration = AsyncFunctionDeclaration; + var AsyncFunctionExpression = (function () { + function AsyncFunctionExpression(id, params, body) { + this.type = syntax_1.Syntax.FunctionExpression; + this.id = id; + this.params = params; + this.body = body; + this.generator = false; + this.expression = false; + this.async = true; + } + return AsyncFunctionExpression; + }()); + exports.AsyncFunctionExpression = AsyncFunctionExpression; + var AwaitExpression = (function () { + function AwaitExpression(argument) { + this.type = syntax_1.Syntax.AwaitExpression; + this.argument = argument; + } + return AwaitExpression; + }()); + exports.AwaitExpression = AwaitExpression; + var BinaryExpression = (function () { + function BinaryExpression(operator, left, right) { + var logical = (operator === '||' || operator === '&&'); + this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression; + this.operator = operator; + this.left = left; + this.right = right; + } + return BinaryExpression; + }()); + exports.BinaryExpression = BinaryExpression; + var BlockStatement = (function () { + function BlockStatement(body) { + this.type = syntax_1.Syntax.BlockStatement; + this.body = body; + } + return BlockStatement; + }()); + exports.BlockStatement = BlockStatement; + var BreakStatement = (function () { + function BreakStatement(label) { + this.type = syntax_1.Syntax.BreakStatement; + this.label = label; + } + return BreakStatement; + }()); + exports.BreakStatement = BreakStatement; + var CallExpression = (function () { + function CallExpression(callee, args) { + this.type = syntax_1.Syntax.CallExpression; + this.callee = callee; + this.arguments = args; + } + return CallExpression; + }()); + exports.CallExpression = CallExpression; + var CatchClause = (function () { + function CatchClause(param, body) { + this.type = syntax_1.Syntax.CatchClause; + this.param = param; + this.body = body; + } + return CatchClause; + }()); + exports.CatchClause = CatchClause; + var ClassBody = (function () { + function ClassBody(body) { + this.type = syntax_1.Syntax.ClassBody; + this.body = body; + } + return ClassBody; + }()); + exports.ClassBody = ClassBody; + var ClassDeclaration = (function () { + function ClassDeclaration(id, superClass, body) { + this.type = syntax_1.Syntax.ClassDeclaration; + this.id = id; + this.superClass = superClass; + this.body = body; + } + return ClassDeclaration; + }()); + exports.ClassDeclaration = ClassDeclaration; + var ClassExpression = (function () { + function ClassExpression(id, superClass, body) { + this.type = syntax_1.Syntax.ClassExpression; + this.id = id; + this.superClass = superClass; + this.body = body; + } + return ClassExpression; + }()); + exports.ClassExpression = ClassExpression; + var ComputedMemberExpression = (function () { + function ComputedMemberExpression(object, property) { + this.type = syntax_1.Syntax.MemberExpression; + this.computed = true; + this.object = object; + this.property = property; + } + return ComputedMemberExpression; + }()); + exports.ComputedMemberExpression = ComputedMemberExpression; + var ConditionalExpression = (function () { + function ConditionalExpression(test, consequent, alternate) { + this.type = syntax_1.Syntax.ConditionalExpression; + this.test = test; + this.consequent = consequent; + this.alternate = alternate; + } + return ConditionalExpression; + }()); + exports.ConditionalExpression = ConditionalExpression; + var ContinueStatement = (function () { + function ContinueStatement(label) { + this.type = syntax_1.Syntax.ContinueStatement; + this.label = label; + } + return ContinueStatement; + }()); + exports.ContinueStatement = ContinueStatement; + var DebuggerStatement = (function () { + function DebuggerStatement() { + this.type = syntax_1.Syntax.DebuggerStatement; + } + return DebuggerStatement; + }()); + exports.DebuggerStatement = DebuggerStatement; + var Directive = (function () { + function Directive(expression, directive) { + this.type = syntax_1.Syntax.ExpressionStatement; + this.expression = expression; + this.directive = directive; + } + return Directive; + }()); + exports.Directive = Directive; + var DoWhileStatement = (function () { + function DoWhileStatement(body, test) { + this.type = syntax_1.Syntax.DoWhileStatement; + this.body = body; + this.test = test; + } + return DoWhileStatement; + }()); + exports.DoWhileStatement = DoWhileStatement; + var EmptyStatement = (function () { + function EmptyStatement() { + this.type = syntax_1.Syntax.EmptyStatement; + } + return EmptyStatement; + }()); + exports.EmptyStatement = EmptyStatement; + var ExportAllDeclaration = (function () { + function ExportAllDeclaration(source) { + this.type = syntax_1.Syntax.ExportAllDeclaration; + this.source = source; + } + return ExportAllDeclaration; + }()); + exports.ExportAllDeclaration = ExportAllDeclaration; + var ExportDefaultDeclaration = (function () { + function ExportDefaultDeclaration(declaration) { + this.type = syntax_1.Syntax.ExportDefaultDeclaration; + this.declaration = declaration; + } + return ExportDefaultDeclaration; + }()); + exports.ExportDefaultDeclaration = ExportDefaultDeclaration; + var ExportNamedDeclaration = (function () { + function ExportNamedDeclaration(declaration, specifiers, source) { + this.type = syntax_1.Syntax.ExportNamedDeclaration; + this.declaration = declaration; + this.specifiers = specifiers; + this.source = source; + } + return ExportNamedDeclaration; + }()); + exports.ExportNamedDeclaration = ExportNamedDeclaration; + var ExportSpecifier = (function () { + function ExportSpecifier(local, exported) { + this.type = syntax_1.Syntax.ExportSpecifier; + this.exported = exported; + this.local = local; + } + return ExportSpecifier; + }()); + exports.ExportSpecifier = ExportSpecifier; + var ExpressionStatement = (function () { + function ExpressionStatement(expression) { + this.type = syntax_1.Syntax.ExpressionStatement; + this.expression = expression; + } + return ExpressionStatement; + }()); + exports.ExpressionStatement = ExpressionStatement; + var ForInStatement = (function () { + function ForInStatement(left, right, body) { + this.type = syntax_1.Syntax.ForInStatement; + this.left = left; + this.right = right; + this.body = body; + this.each = false; + } + return ForInStatement; + }()); + exports.ForInStatement = ForInStatement; + var ForOfStatement = (function () { + function ForOfStatement(left, right, body) { + this.type = syntax_1.Syntax.ForOfStatement; + this.left = left; + this.right = right; + this.body = body; + } + return ForOfStatement; + }()); + exports.ForOfStatement = ForOfStatement; + var ForStatement = (function () { + function ForStatement(init, test, update, body) { + this.type = syntax_1.Syntax.ForStatement; + this.init = init; + this.test = test; + this.update = update; + this.body = body; + } + return ForStatement; + }()); + exports.ForStatement = ForStatement; + var FunctionDeclaration = (function () { + function FunctionDeclaration(id, params, body, generator) { + this.type = syntax_1.Syntax.FunctionDeclaration; + this.id = id; + this.params = params; + this.body = body; + this.generator = generator; + this.expression = false; + this.async = false; + } + return FunctionDeclaration; + }()); + exports.FunctionDeclaration = FunctionDeclaration; + var FunctionExpression = (function () { + function FunctionExpression(id, params, body, generator) { + this.type = syntax_1.Syntax.FunctionExpression; + this.id = id; + this.params = params; + this.body = body; + this.generator = generator; + this.expression = false; + this.async = false; + } + return FunctionExpression; + }()); + exports.FunctionExpression = FunctionExpression; + var Identifier = (function () { + function Identifier(name) { + this.type = syntax_1.Syntax.Identifier; + this.name = name; + } + return Identifier; + }()); + exports.Identifier = Identifier; + var IfStatement = (function () { + function IfStatement(test, consequent, alternate) { + this.type = syntax_1.Syntax.IfStatement; + this.test = test; + this.consequent = consequent; + this.alternate = alternate; + } + return IfStatement; + }()); + exports.IfStatement = IfStatement; + var ImportDeclaration = (function () { + function ImportDeclaration(specifiers, source) { + this.type = syntax_1.Syntax.ImportDeclaration; + this.specifiers = specifiers; + this.source = source; + } + return ImportDeclaration; + }()); + exports.ImportDeclaration = ImportDeclaration; + var ImportDefaultSpecifier = (function () { + function ImportDefaultSpecifier(local) { + this.type = syntax_1.Syntax.ImportDefaultSpecifier; + this.local = local; + } + return ImportDefaultSpecifier; + }()); + exports.ImportDefaultSpecifier = ImportDefaultSpecifier; + var ImportNamespaceSpecifier = (function () { + function ImportNamespaceSpecifier(local) { + this.type = syntax_1.Syntax.ImportNamespaceSpecifier; + this.local = local; + } + return ImportNamespaceSpecifier; + }()); + exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier; + var ImportSpecifier = (function () { + function ImportSpecifier(local, imported) { + this.type = syntax_1.Syntax.ImportSpecifier; + this.local = local; + this.imported = imported; + } + return ImportSpecifier; + }()); + exports.ImportSpecifier = ImportSpecifier; + var LabeledStatement = (function () { + function LabeledStatement(label, body) { + this.type = syntax_1.Syntax.LabeledStatement; + this.label = label; + this.body = body; + } + return LabeledStatement; + }()); + exports.LabeledStatement = LabeledStatement; + var Literal = (function () { + function Literal(value, raw) { + this.type = syntax_1.Syntax.Literal; + this.value = value; + this.raw = raw; + } + return Literal; + }()); + exports.Literal = Literal; + var MetaProperty = (function () { + function MetaProperty(meta, property) { + this.type = syntax_1.Syntax.MetaProperty; + this.meta = meta; + this.property = property; + } + return MetaProperty; + }()); + exports.MetaProperty = MetaProperty; + var MethodDefinition = (function () { + function MethodDefinition(key, computed, value, kind, isStatic) { + this.type = syntax_1.Syntax.MethodDefinition; + this.key = key; + this.computed = computed; + this.value = value; + this.kind = kind; + this.static = isStatic; + } + return MethodDefinition; + }()); + exports.MethodDefinition = MethodDefinition; + var Module = (function () { + function Module(body) { + this.type = syntax_1.Syntax.Program; + this.body = body; + this.sourceType = 'module'; + } + return Module; + }()); + exports.Module = Module; + var NewExpression = (function () { + function NewExpression(callee, args) { + this.type = syntax_1.Syntax.NewExpression; + this.callee = callee; + this.arguments = args; + } + return NewExpression; + }()); + exports.NewExpression = NewExpression; + var ObjectExpression = (function () { + function ObjectExpression(properties) { + this.type = syntax_1.Syntax.ObjectExpression; + this.properties = properties; + } + return ObjectExpression; + }()); + exports.ObjectExpression = ObjectExpression; + var ObjectPattern = (function () { + function ObjectPattern(properties) { + this.type = syntax_1.Syntax.ObjectPattern; + this.properties = properties; + } + return ObjectPattern; + }()); + exports.ObjectPattern = ObjectPattern; + var Property = (function () { + function Property(kind, key, computed, value, method, shorthand) { + this.type = syntax_1.Syntax.Property; + this.key = key; + this.computed = computed; + this.value = value; + this.kind = kind; + this.method = method; + this.shorthand = shorthand; + } + return Property; + }()); + exports.Property = Property; + var RegexLiteral = (function () { + function RegexLiteral(value, raw, pattern, flags) { + this.type = syntax_1.Syntax.Literal; + this.value = value; + this.raw = raw; + this.regex = { pattern: pattern, flags: flags }; + } + return RegexLiteral; + }()); + exports.RegexLiteral = RegexLiteral; + var RestElement = (function () { + function RestElement(argument) { + this.type = syntax_1.Syntax.RestElement; + this.argument = argument; + } + return RestElement; + }()); + exports.RestElement = RestElement; + var ReturnStatement = (function () { + function ReturnStatement(argument) { + this.type = syntax_1.Syntax.ReturnStatement; + this.argument = argument; + } + return ReturnStatement; + }()); + exports.ReturnStatement = ReturnStatement; + var Script = (function () { + function Script(body) { + this.type = syntax_1.Syntax.Program; + this.body = body; + this.sourceType = 'script'; + } + return Script; + }()); + exports.Script = Script; + var SequenceExpression = (function () { + function SequenceExpression(expressions) { + this.type = syntax_1.Syntax.SequenceExpression; + this.expressions = expressions; + } + return SequenceExpression; + }()); + exports.SequenceExpression = SequenceExpression; + var SpreadElement = (function () { + function SpreadElement(argument) { + this.type = syntax_1.Syntax.SpreadElement; + this.argument = argument; + } + return SpreadElement; + }()); + exports.SpreadElement = SpreadElement; + var StaticMemberExpression = (function () { + function StaticMemberExpression(object, property) { + this.type = syntax_1.Syntax.MemberExpression; + this.computed = false; + this.object = object; + this.property = property; + } + return StaticMemberExpression; + }()); + exports.StaticMemberExpression = StaticMemberExpression; + var Super = (function () { + function Super() { + this.type = syntax_1.Syntax.Super; + } + return Super; + }()); + exports.Super = Super; + var SwitchCase = (function () { + function SwitchCase(test, consequent) { + this.type = syntax_1.Syntax.SwitchCase; + this.test = test; + this.consequent = consequent; + } + return SwitchCase; + }()); + exports.SwitchCase = SwitchCase; + var SwitchStatement = (function () { + function SwitchStatement(discriminant, cases) { + this.type = syntax_1.Syntax.SwitchStatement; + this.discriminant = discriminant; + this.cases = cases; + } + return SwitchStatement; + }()); + exports.SwitchStatement = SwitchStatement; + var TaggedTemplateExpression = (function () { + function TaggedTemplateExpression(tag, quasi) { + this.type = syntax_1.Syntax.TaggedTemplateExpression; + this.tag = tag; + this.quasi = quasi; + } + return TaggedTemplateExpression; + }()); + exports.TaggedTemplateExpression = TaggedTemplateExpression; + var TemplateElement = (function () { + function TemplateElement(value, tail) { + this.type = syntax_1.Syntax.TemplateElement; + this.value = value; + this.tail = tail; + } + return TemplateElement; + }()); + exports.TemplateElement = TemplateElement; + var TemplateLiteral = (function () { + function TemplateLiteral(quasis, expressions) { + this.type = syntax_1.Syntax.TemplateLiteral; + this.quasis = quasis; + this.expressions = expressions; + } + return TemplateLiteral; + }()); + exports.TemplateLiteral = TemplateLiteral; + var ThisExpression = (function () { + function ThisExpression() { + this.type = syntax_1.Syntax.ThisExpression; + } + return ThisExpression; + }()); + exports.ThisExpression = ThisExpression; + var ThrowStatement = (function () { + function ThrowStatement(argument) { + this.type = syntax_1.Syntax.ThrowStatement; + this.argument = argument; + } + return ThrowStatement; + }()); + exports.ThrowStatement = ThrowStatement; + var TryStatement = (function () { + function TryStatement(block, handler, finalizer) { + this.type = syntax_1.Syntax.TryStatement; + this.block = block; + this.handler = handler; + this.finalizer = finalizer; + } + return TryStatement; + }()); + exports.TryStatement = TryStatement; + var UnaryExpression = (function () { + function UnaryExpression(operator, argument) { + this.type = syntax_1.Syntax.UnaryExpression; + this.operator = operator; + this.argument = argument; + this.prefix = true; + } + return UnaryExpression; + }()); + exports.UnaryExpression = UnaryExpression; + var UpdateExpression = (function () { + function UpdateExpression(operator, argument, prefix) { + this.type = syntax_1.Syntax.UpdateExpression; + this.operator = operator; + this.argument = argument; + this.prefix = prefix; + } + return UpdateExpression; + }()); + exports.UpdateExpression = UpdateExpression; + var VariableDeclaration = (function () { + function VariableDeclaration(declarations, kind) { + this.type = syntax_1.Syntax.VariableDeclaration; + this.declarations = declarations; + this.kind = kind; + } + return VariableDeclaration; + }()); + exports.VariableDeclaration = VariableDeclaration; + var VariableDeclarator = (function () { + function VariableDeclarator(id, init) { + this.type = syntax_1.Syntax.VariableDeclarator; + this.id = id; + this.init = init; + } + return VariableDeclarator; + }()); + exports.VariableDeclarator = VariableDeclarator; + var WhileStatement = (function () { + function WhileStatement(test, body) { + this.type = syntax_1.Syntax.WhileStatement; + this.test = test; + this.body = body; + } + return WhileStatement; + }()); + exports.WhileStatement = WhileStatement; + var WithStatement = (function () { + function WithStatement(object, body) { + this.type = syntax_1.Syntax.WithStatement; + this.object = object; + this.body = body; + } + return WithStatement; + }()); + exports.WithStatement = WithStatement; + var YieldExpression = (function () { + function YieldExpression(argument, delegate) { + this.type = syntax_1.Syntax.YieldExpression; + this.argument = argument; + this.delegate = delegate; + } + return YieldExpression; + }()); + exports.YieldExpression = YieldExpression; + + +/***/ }, +/* 8 */ +/***/ function(module, exports, __nested_webpack_require_80491__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var assert_1 = __nested_webpack_require_80491__(9); + var error_handler_1 = __nested_webpack_require_80491__(10); + var messages_1 = __nested_webpack_require_80491__(11); + var Node = __nested_webpack_require_80491__(7); + var scanner_1 = __nested_webpack_require_80491__(12); + var syntax_1 = __nested_webpack_require_80491__(2); + var token_1 = __nested_webpack_require_80491__(13); + var ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder'; + var Parser = (function () { + function Parser(code, options, delegate) { + if (options === void 0) { options = {}; } + this.config = { + range: (typeof options.range === 'boolean') && options.range, + loc: (typeof options.loc === 'boolean') && options.loc, + source: null, + tokens: (typeof options.tokens === 'boolean') && options.tokens, + comment: (typeof options.comment === 'boolean') && options.comment, + tolerant: (typeof options.tolerant === 'boolean') && options.tolerant + }; + if (this.config.loc && options.source && options.source !== null) { + this.config.source = String(options.source); + } + this.delegate = delegate; + this.errorHandler = new error_handler_1.ErrorHandler(); + this.errorHandler.tolerant = this.config.tolerant; + this.scanner = new scanner_1.Scanner(code, this.errorHandler); + this.scanner.trackComment = this.config.comment; + this.operatorPrecedence = { + ')': 0, + ';': 0, + ',': 0, + '=': 0, + ']': 0, + '||': 1, + '&&': 2, + '|': 3, + '^': 4, + '&': 5, + '==': 6, + '!=': 6, + '===': 6, + '!==': 6, + '<': 7, + '>': 7, + '<=': 7, + '>=': 7, + '<<': 8, + '>>': 8, + '>>>': 8, + '+': 9, + '-': 9, + '*': 11, + '/': 11, + '%': 11 + }; + this.lookahead = { + type: 2 /* EOF */, + value: '', + lineNumber: this.scanner.lineNumber, + lineStart: 0, + start: 0, + end: 0 + }; + this.hasLineTerminator = false; + this.context = { + isModule: false, + await: false, + allowIn: true, + allowStrictDirective: true, + allowYield: true, + firstCoverInitializedNameError: null, + isAssignmentTarget: false, + isBindingElement: false, + inFunctionBody: false, + inIteration: false, + inSwitch: false, + labelSet: {}, + strict: false + }; + this.tokens = []; + this.startMarker = { + index: 0, + line: this.scanner.lineNumber, + column: 0 + }; + this.lastMarker = { + index: 0, + line: this.scanner.lineNumber, + column: 0 + }; + this.nextToken(); + this.lastMarker = { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + }; + } + Parser.prototype.throwError = function (messageFormat) { + var values = []; + for (var _i = 1; _i < arguments.length; _i++) { + values[_i - 1] = arguments[_i]; + } + var args = Array.prototype.slice.call(arguments, 1); + var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) { + assert_1.assert(idx < args.length, 'Message reference must be in range'); + return args[idx]; + }); + var index = this.lastMarker.index; + var line = this.lastMarker.line; + var column = this.lastMarker.column + 1; + throw this.errorHandler.createError(index, line, column, msg); + }; + Parser.prototype.tolerateError = function (messageFormat) { + var values = []; + for (var _i = 1; _i < arguments.length; _i++) { + values[_i - 1] = arguments[_i]; + } + var args = Array.prototype.slice.call(arguments, 1); + var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) { + assert_1.assert(idx < args.length, 'Message reference must be in range'); + return args[idx]; + }); + var index = this.lastMarker.index; + var line = this.scanner.lineNumber; + var column = this.lastMarker.column + 1; + this.errorHandler.tolerateError(index, line, column, msg); + }; + // Throw an exception because of the token. + Parser.prototype.unexpectedTokenError = function (token, message) { + var msg = message || messages_1.Messages.UnexpectedToken; + var value; + if (token) { + if (!message) { + msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS : + (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier : + (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber : + (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString : + (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate : + messages_1.Messages.UnexpectedToken; + if (token.type === 4 /* Keyword */) { + if (this.scanner.isFutureReservedWord(token.value)) { + msg = messages_1.Messages.UnexpectedReserved; + } + else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) { + msg = messages_1.Messages.StrictReservedWord; + } + } + } + value = token.value; + } + else { + value = 'ILLEGAL'; + } + msg = msg.replace('%0', value); + if (token && typeof token.lineNumber === 'number') { + var index = token.start; + var line = token.lineNumber; + var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column; + var column = token.start - lastMarkerLineStart + 1; + return this.errorHandler.createError(index, line, column, msg); + } + else { + var index = this.lastMarker.index; + var line = this.lastMarker.line; + var column = this.lastMarker.column + 1; + return this.errorHandler.createError(index, line, column, msg); + } + }; + Parser.prototype.throwUnexpectedToken = function (token, message) { + throw this.unexpectedTokenError(token, message); + }; + Parser.prototype.tolerateUnexpectedToken = function (token, message) { + this.errorHandler.tolerate(this.unexpectedTokenError(token, message)); + }; + Parser.prototype.collectComments = function () { + if (!this.config.comment) { + this.scanner.scanComments(); + } + else { + var comments = this.scanner.scanComments(); + if (comments.length > 0 && this.delegate) { + for (var i = 0; i < comments.length; ++i) { + var e = comments[i]; + var node = void 0; + node = { + type: e.multiLine ? 'BlockComment' : 'LineComment', + value: this.scanner.source.slice(e.slice[0], e.slice[1]) + }; + if (this.config.range) { + node.range = e.range; + } + if (this.config.loc) { + node.loc = e.loc; + } + var metadata = { + start: { + line: e.loc.start.line, + column: e.loc.start.column, + offset: e.range[0] + }, + end: { + line: e.loc.end.line, + column: e.loc.end.column, + offset: e.range[1] + } + }; + this.delegate(node, metadata); + } + } + } + }; + // From internal representation to an external structure + Parser.prototype.getTokenRaw = function (token) { + return this.scanner.source.slice(token.start, token.end); + }; + Parser.prototype.convertToken = function (token) { + var t = { + type: token_1.TokenName[token.type], + value: this.getTokenRaw(token) + }; + if (this.config.range) { + t.range = [token.start, token.end]; + } + if (this.config.loc) { + t.loc = { + start: { + line: this.startMarker.line, + column: this.startMarker.column + }, + end: { + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + } + }; + } + if (token.type === 9 /* RegularExpression */) { + var pattern = token.pattern; + var flags = token.flags; + t.regex = { pattern: pattern, flags: flags }; + } + return t; + }; + Parser.prototype.nextToken = function () { + var token = this.lookahead; + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + this.collectComments(); + if (this.scanner.index !== this.startMarker.index) { + this.startMarker.index = this.scanner.index; + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + } + var next = this.scanner.lex(); + this.hasLineTerminator = (token.lineNumber !== next.lineNumber); + if (next && this.context.strict && next.type === 3 /* Identifier */) { + if (this.scanner.isStrictModeReservedWord(next.value)) { + next.type = 4 /* Keyword */; + } + } + this.lookahead = next; + if (this.config.tokens && next.type !== 2 /* EOF */) { + this.tokens.push(this.convertToken(next)); + } + return token; + }; + Parser.prototype.nextRegexToken = function () { + this.collectComments(); + var token = this.scanner.scanRegExp(); + if (this.config.tokens) { + // Pop the previous token, '/' or '/=' + // This is added from the lookahead token. + this.tokens.pop(); + this.tokens.push(this.convertToken(token)); + } + // Prime the next lookahead. + this.lookahead = token; + this.nextToken(); + return token; + }; + Parser.prototype.createNode = function () { + return { + index: this.startMarker.index, + line: this.startMarker.line, + column: this.startMarker.column + }; + }; + Parser.prototype.startNode = function (token, lastLineStart) { + if (lastLineStart === void 0) { lastLineStart = 0; } + var column = token.start - token.lineStart; + var line = token.lineNumber; + if (column < 0) { + column += lastLineStart; + line--; + } + return { + index: token.start, + line: line, + column: column + }; + }; + Parser.prototype.finalize = function (marker, node) { + if (this.config.range) { + node.range = [marker.index, this.lastMarker.index]; + } + if (this.config.loc) { + node.loc = { + start: { + line: marker.line, + column: marker.column, + }, + end: { + line: this.lastMarker.line, + column: this.lastMarker.column + } + }; + if (this.config.source) { + node.loc.source = this.config.source; + } + } + if (this.delegate) { + var metadata = { + start: { + line: marker.line, + column: marker.column, + offset: marker.index + }, + end: { + line: this.lastMarker.line, + column: this.lastMarker.column, + offset: this.lastMarker.index + } + }; + this.delegate(node, metadata); + } + return node; + }; + // Expect the next token to match the specified punctuator. + // If not, an exception will be thrown. + Parser.prototype.expect = function (value) { + var token = this.nextToken(); + if (token.type !== 7 /* Punctuator */ || token.value !== value) { + this.throwUnexpectedToken(token); + } + }; + // Quietly expect a comma when in tolerant mode, otherwise delegates to expect(). + Parser.prototype.expectCommaSeparator = function () { + if (this.config.tolerant) { + var token = this.lookahead; + if (token.type === 7 /* Punctuator */ && token.value === ',') { + this.nextToken(); + } + else if (token.type === 7 /* Punctuator */ && token.value === ';') { + this.nextToken(); + this.tolerateUnexpectedToken(token); + } + else { + this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken); + } + } + else { + this.expect(','); + } + }; + // Expect the next token to match the specified keyword. + // If not, an exception will be thrown. + Parser.prototype.expectKeyword = function (keyword) { + var token = this.nextToken(); + if (token.type !== 4 /* Keyword */ || token.value !== keyword) { + this.throwUnexpectedToken(token); + } + }; + // Return true if the next token matches the specified punctuator. + Parser.prototype.match = function (value) { + return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value; + }; + // Return true if the next token matches the specified keyword + Parser.prototype.matchKeyword = function (keyword) { + return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword; + }; + // Return true if the next token matches the specified contextual keyword + // (where an identifier is sometimes a keyword depending on the context) + Parser.prototype.matchContextualKeyword = function (keyword) { + return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword; + }; + // Return true if the next token is an assignment operator + Parser.prototype.matchAssign = function () { + if (this.lookahead.type !== 7 /* Punctuator */) { + return false; + } + var op = this.lookahead.value; + return op === '=' || + op === '*=' || + op === '**=' || + op === '/=' || + op === '%=' || + op === '+=' || + op === '-=' || + op === '<<=' || + op === '>>=' || + op === '>>>=' || + op === '&=' || + op === '^=' || + op === '|='; + }; + // Cover grammar support. + // + // When an assignment expression position starts with an left parenthesis, the determination of the type + // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead) + // or the first comma. This situation also defers the determination of all the expressions nested in the pair. + // + // There are three productions that can be parsed in a parentheses pair that needs to be determined + // after the outermost pair is closed. They are: + // + // 1. AssignmentExpression + // 2. BindingElements + // 3. AssignmentTargets + // + // In order to avoid exponential backtracking, we use two flags to denote if the production can be + // binding element or assignment target. + // + // The three productions have the relationship: + // + // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression + // + // with a single exception that CoverInitializedName when used directly in an Expression, generates + // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the + // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair. + // + // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not + // effect the current flags. This means the production the parser parses is only used as an expression. Therefore + // the CoverInitializedName check is conducted. + // + // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates + // the flags outside of the parser. This means the production the parser parses is used as a part of a potential + // pattern. The CoverInitializedName check is deferred. + Parser.prototype.isolateCoverGrammar = function (parseFunction) { + var previousIsBindingElement = this.context.isBindingElement; + var previousIsAssignmentTarget = this.context.isAssignmentTarget; + var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError; + this.context.isBindingElement = true; + this.context.isAssignmentTarget = true; + this.context.firstCoverInitializedNameError = null; + var result = parseFunction.call(this); + if (this.context.firstCoverInitializedNameError !== null) { + this.throwUnexpectedToken(this.context.firstCoverInitializedNameError); + } + this.context.isBindingElement = previousIsBindingElement; + this.context.isAssignmentTarget = previousIsAssignmentTarget; + this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError; + return result; + }; + Parser.prototype.inheritCoverGrammar = function (parseFunction) { + var previousIsBindingElement = this.context.isBindingElement; + var previousIsAssignmentTarget = this.context.isAssignmentTarget; + var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError; + this.context.isBindingElement = true; + this.context.isAssignmentTarget = true; + this.context.firstCoverInitializedNameError = null; + var result = parseFunction.call(this); + this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement; + this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget; + this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError; + return result; + }; + Parser.prototype.consumeSemicolon = function () { + if (this.match(';')) { + this.nextToken(); + } + else if (!this.hasLineTerminator) { + if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) { + this.throwUnexpectedToken(this.lookahead); + } + this.lastMarker.index = this.startMarker.index; + this.lastMarker.line = this.startMarker.line; + this.lastMarker.column = this.startMarker.column; + } + }; + // https://tc39.github.io/ecma262/#sec-primary-expression + Parser.prototype.parsePrimaryExpression = function () { + var node = this.createNode(); + var expr; + var token, raw; + switch (this.lookahead.type) { + case 3 /* Identifier */: + if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') { + this.tolerateUnexpectedToken(this.lookahead); + } + expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value)); + break; + case 6 /* NumericLiteral */: + case 8 /* StringLiteral */: + if (this.context.strict && this.lookahead.octal) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral); + } + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + token = this.nextToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.Literal(token.value, raw)); + break; + case 1 /* BooleanLiteral */: + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + token = this.nextToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.Literal(token.value === 'true', raw)); + break; + case 5 /* NullLiteral */: + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + token = this.nextToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.Literal(null, raw)); + break; + case 10 /* Template */: + expr = this.parseTemplateLiteral(); + break; + case 7 /* Punctuator */: + switch (this.lookahead.value) { + case '(': + this.context.isBindingElement = false; + expr = this.inheritCoverGrammar(this.parseGroupExpression); + break; + case '[': + expr = this.inheritCoverGrammar(this.parseArrayInitializer); + break; + case '{': + expr = this.inheritCoverGrammar(this.parseObjectInitializer); + break; + case '/': + case '/=': + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + this.scanner.index = this.startMarker.index; + token = this.nextRegexToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags)); + break; + default: + expr = this.throwUnexpectedToken(this.nextToken()); + } + break; + case 4 /* Keyword */: + if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) { + expr = this.parseIdentifierName(); + } + else if (!this.context.strict && this.matchKeyword('let')) { + expr = this.finalize(node, new Node.Identifier(this.nextToken().value)); + } + else { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + if (this.matchKeyword('function')) { + expr = this.parseFunctionExpression(); + } + else if (this.matchKeyword('this')) { + this.nextToken(); + expr = this.finalize(node, new Node.ThisExpression()); + } + else if (this.matchKeyword('class')) { + expr = this.parseClassExpression(); + } + else { + expr = this.throwUnexpectedToken(this.nextToken()); + } + } + break; + default: + expr = this.throwUnexpectedToken(this.nextToken()); + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-array-initializer + Parser.prototype.parseSpreadElement = function () { + var node = this.createNode(); + this.expect('...'); + var arg = this.inheritCoverGrammar(this.parseAssignmentExpression); + return this.finalize(node, new Node.SpreadElement(arg)); + }; + Parser.prototype.parseArrayInitializer = function () { + var node = this.createNode(); + var elements = []; + this.expect('['); + while (!this.match(']')) { + if (this.match(',')) { + this.nextToken(); + elements.push(null); + } + else if (this.match('...')) { + var element = this.parseSpreadElement(); + if (!this.match(']')) { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + this.expect(','); + } + elements.push(element); + } + else { + elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression)); + if (!this.match(']')) { + this.expect(','); + } + } + } + this.expect(']'); + return this.finalize(node, new Node.ArrayExpression(elements)); + }; + // https://tc39.github.io/ecma262/#sec-object-initializer + Parser.prototype.parsePropertyMethod = function (params) { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = params.simple; + var body = this.isolateCoverGrammar(this.parseFunctionSourceElements); + if (this.context.strict && params.firstRestricted) { + this.tolerateUnexpectedToken(params.firstRestricted, params.message); + } + if (this.context.strict && params.stricted) { + this.tolerateUnexpectedToken(params.stricted, params.message); + } + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + return body; + }; + Parser.prototype.parsePropertyMethodFunction = function () { + var isGenerator = false; + var node = this.createNode(); + var previousAllowYield = this.context.allowYield; + this.context.allowYield = true; + var params = this.parseFormalParameters(); + var method = this.parsePropertyMethod(params); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); + }; + Parser.prototype.parsePropertyMethodAsyncFunction = function () { + var node = this.createNode(); + var previousAllowYield = this.context.allowYield; + var previousAwait = this.context.await; + this.context.allowYield = false; + this.context.await = true; + var params = this.parseFormalParameters(); + var method = this.parsePropertyMethod(params); + this.context.allowYield = previousAllowYield; + this.context.await = previousAwait; + return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method)); + }; + Parser.prototype.parseObjectPropertyKey = function () { + var node = this.createNode(); + var token = this.nextToken(); + var key; + switch (token.type) { + case 8 /* StringLiteral */: + case 6 /* NumericLiteral */: + if (this.context.strict && token.octal) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral); + } + var raw = this.getTokenRaw(token); + key = this.finalize(node, new Node.Literal(token.value, raw)); + break; + case 3 /* Identifier */: + case 1 /* BooleanLiteral */: + case 5 /* NullLiteral */: + case 4 /* Keyword */: + key = this.finalize(node, new Node.Identifier(token.value)); + break; + case 7 /* Punctuator */: + if (token.value === '[') { + key = this.isolateCoverGrammar(this.parseAssignmentExpression); + this.expect(']'); + } + else { + key = this.throwUnexpectedToken(token); + } + break; + default: + key = this.throwUnexpectedToken(token); + } + return key; + }; + Parser.prototype.isPropertyKey = function (key, value) { + return (key.type === syntax_1.Syntax.Identifier && key.name === value) || + (key.type === syntax_1.Syntax.Literal && key.value === value); + }; + Parser.prototype.parseObjectProperty = function (hasProto) { + var node = this.createNode(); + var token = this.lookahead; + var kind; + var key = null; + var value = null; + var computed = false; + var method = false; + var shorthand = false; + var isAsync = false; + if (token.type === 3 /* Identifier */) { + var id = token.value; + this.nextToken(); + computed = this.match('['); + isAsync = !this.hasLineTerminator && (id === 'async') && + !this.match(':') && !this.match('(') && !this.match('*') && !this.match(','); + key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id)); + } + else if (this.match('*')) { + this.nextToken(); + } + else { + computed = this.match('['); + key = this.parseObjectPropertyKey(); + } + var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead); + if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) { + kind = 'get'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + this.context.allowYield = false; + value = this.parseGetterMethod(); + } + else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) { + kind = 'set'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseSetterMethod(); + } + else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) { + kind = 'init'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseGeneratorMethod(); + method = true; + } + else { + if (!key) { + this.throwUnexpectedToken(this.lookahead); + } + kind = 'init'; + if (this.match(':') && !isAsync) { + if (!computed && this.isPropertyKey(key, '__proto__')) { + if (hasProto.value) { + this.tolerateError(messages_1.Messages.DuplicateProtoProperty); + } + hasProto.value = true; + } + this.nextToken(); + value = this.inheritCoverGrammar(this.parseAssignmentExpression); + } + else if (this.match('(')) { + value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction(); + method = true; + } + else if (token.type === 3 /* Identifier */) { + var id = this.finalize(node, new Node.Identifier(token.value)); + if (this.match('=')) { + this.context.firstCoverInitializedNameError = this.lookahead; + this.nextToken(); + shorthand = true; + var init = this.isolateCoverGrammar(this.parseAssignmentExpression); + value = this.finalize(node, new Node.AssignmentPattern(id, init)); + } + else { + shorthand = true; + value = id; + } + } + else { + this.throwUnexpectedToken(this.nextToken()); + } + } + return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand)); + }; + Parser.prototype.parseObjectInitializer = function () { + var node = this.createNode(); + this.expect('{'); + var properties = []; + var hasProto = { value: false }; + while (!this.match('}')) { + properties.push(this.parseObjectProperty(hasProto)); + if (!this.match('}')) { + this.expectCommaSeparator(); + } + } + this.expect('}'); + return this.finalize(node, new Node.ObjectExpression(properties)); + }; + // https://tc39.github.io/ecma262/#sec-template-literals + Parser.prototype.parseTemplateHead = function () { + assert_1.assert(this.lookahead.head, 'Template literal must start with a template head'); + var node = this.createNode(); + var token = this.nextToken(); + var raw = token.value; + var cooked = token.cooked; + return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail)); + }; + Parser.prototype.parseTemplateElement = function () { + if (this.lookahead.type !== 10 /* Template */) { + this.throwUnexpectedToken(); + } + var node = this.createNode(); + var token = this.nextToken(); + var raw = token.value; + var cooked = token.cooked; + return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail)); + }; + Parser.prototype.parseTemplateLiteral = function () { + var node = this.createNode(); + var expressions = []; + var quasis = []; + var quasi = this.parseTemplateHead(); + quasis.push(quasi); + while (!quasi.tail) { + expressions.push(this.parseExpression()); + quasi = this.parseTemplateElement(); + quasis.push(quasi); + } + return this.finalize(node, new Node.TemplateLiteral(quasis, expressions)); + }; + // https://tc39.github.io/ecma262/#sec-grouping-operator + Parser.prototype.reinterpretExpressionAsPattern = function (expr) { + switch (expr.type) { + case syntax_1.Syntax.Identifier: + case syntax_1.Syntax.MemberExpression: + case syntax_1.Syntax.RestElement: + case syntax_1.Syntax.AssignmentPattern: + break; + case syntax_1.Syntax.SpreadElement: + expr.type = syntax_1.Syntax.RestElement; + this.reinterpretExpressionAsPattern(expr.argument); + break; + case syntax_1.Syntax.ArrayExpression: + expr.type = syntax_1.Syntax.ArrayPattern; + for (var i = 0; i < expr.elements.length; i++) { + if (expr.elements[i] !== null) { + this.reinterpretExpressionAsPattern(expr.elements[i]); + } + } + break; + case syntax_1.Syntax.ObjectExpression: + expr.type = syntax_1.Syntax.ObjectPattern; + for (var i = 0; i < expr.properties.length; i++) { + this.reinterpretExpressionAsPattern(expr.properties[i].value); + } + break; + case syntax_1.Syntax.AssignmentExpression: + expr.type = syntax_1.Syntax.AssignmentPattern; + delete expr.operator; + this.reinterpretExpressionAsPattern(expr.left); + break; + default: + // Allow other node type for tolerant parsing. + break; + } + }; + Parser.prototype.parseGroupExpression = function () { + var expr; + this.expect('('); + if (this.match(')')) { + this.nextToken(); + if (!this.match('=>')) { + this.expect('=>'); + } + expr = { + type: ArrowParameterPlaceHolder, + params: [], + async: false + }; + } + else { + var startToken = this.lookahead; + var params = []; + if (this.match('...')) { + expr = this.parseRestElement(params); + this.expect(')'); + if (!this.match('=>')) { + this.expect('=>'); + } + expr = { + type: ArrowParameterPlaceHolder, + params: [expr], + async: false + }; + } + else { + var arrow = false; + this.context.isBindingElement = true; + expr = this.inheritCoverGrammar(this.parseAssignmentExpression); + if (this.match(',')) { + var expressions = []; + this.context.isAssignmentTarget = false; + expressions.push(expr); + while (this.lookahead.type !== 2 /* EOF */) { + if (!this.match(',')) { + break; + } + this.nextToken(); + if (this.match(')')) { + this.nextToken(); + for (var i = 0; i < expressions.length; i++) { + this.reinterpretExpressionAsPattern(expressions[i]); + } + arrow = true; + expr = { + type: ArrowParameterPlaceHolder, + params: expressions, + async: false + }; + } + else if (this.match('...')) { + if (!this.context.isBindingElement) { + this.throwUnexpectedToken(this.lookahead); + } + expressions.push(this.parseRestElement(params)); + this.expect(')'); + if (!this.match('=>')) { + this.expect('=>'); + } + this.context.isBindingElement = false; + for (var i = 0; i < expressions.length; i++) { + this.reinterpretExpressionAsPattern(expressions[i]); + } + arrow = true; + expr = { + type: ArrowParameterPlaceHolder, + params: expressions, + async: false + }; + } + else { + expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression)); + } + if (arrow) { + break; + } + } + if (!arrow) { + expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)); + } + } + if (!arrow) { + this.expect(')'); + if (this.match('=>')) { + if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') { + arrow = true; + expr = { + type: ArrowParameterPlaceHolder, + params: [expr], + async: false + }; + } + if (!arrow) { + if (!this.context.isBindingElement) { + this.throwUnexpectedToken(this.lookahead); + } + if (expr.type === syntax_1.Syntax.SequenceExpression) { + for (var i = 0; i < expr.expressions.length; i++) { + this.reinterpretExpressionAsPattern(expr.expressions[i]); + } + } + else { + this.reinterpretExpressionAsPattern(expr); + } + var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]); + expr = { + type: ArrowParameterPlaceHolder, + params: parameters, + async: false + }; + } + } + this.context.isBindingElement = false; + } + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions + Parser.prototype.parseArguments = function () { + this.expect('('); + var args = []; + if (!this.match(')')) { + while (true) { + var expr = this.match('...') ? this.parseSpreadElement() : + this.isolateCoverGrammar(this.parseAssignmentExpression); + args.push(expr); + if (this.match(')')) { + break; + } + this.expectCommaSeparator(); + if (this.match(')')) { + break; + } + } + } + this.expect(')'); + return args; + }; + Parser.prototype.isIdentifierName = function (token) { + return token.type === 3 /* Identifier */ || + token.type === 4 /* Keyword */ || + token.type === 1 /* BooleanLiteral */ || + token.type === 5 /* NullLiteral */; + }; + Parser.prototype.parseIdentifierName = function () { + var node = this.createNode(); + var token = this.nextToken(); + if (!this.isIdentifierName(token)) { + this.throwUnexpectedToken(token); + } + return this.finalize(node, new Node.Identifier(token.value)); + }; + Parser.prototype.parseNewExpression = function () { + var node = this.createNode(); + var id = this.parseIdentifierName(); + assert_1.assert(id.name === 'new', 'New expression must start with `new`'); + var expr; + if (this.match('.')) { + this.nextToken(); + if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') { + var property = this.parseIdentifierName(); + expr = new Node.MetaProperty(id, property); + } + else { + this.throwUnexpectedToken(this.lookahead); + } + } + else { + var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression); + var args = this.match('(') ? this.parseArguments() : []; + expr = new Node.NewExpression(callee, args); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + return this.finalize(node, expr); + }; + Parser.prototype.parseAsyncArgument = function () { + var arg = this.parseAssignmentExpression(); + this.context.firstCoverInitializedNameError = null; + return arg; + }; + Parser.prototype.parseAsyncArguments = function () { + this.expect('('); + var args = []; + if (!this.match(')')) { + while (true) { + var expr = this.match('...') ? this.parseSpreadElement() : + this.isolateCoverGrammar(this.parseAsyncArgument); + args.push(expr); + if (this.match(')')) { + break; + } + this.expectCommaSeparator(); + if (this.match(')')) { + break; + } + } + } + this.expect(')'); + return args; + }; + Parser.prototype.parseLeftHandSideExpressionAllowCall = function () { + var startToken = this.lookahead; + var maybeAsync = this.matchContextualKeyword('async'); + var previousAllowIn = this.context.allowIn; + this.context.allowIn = true; + var expr; + if (this.matchKeyword('super') && this.context.inFunctionBody) { + expr = this.createNode(); + this.nextToken(); + expr = this.finalize(expr, new Node.Super()); + if (!this.match('(') && !this.match('.') && !this.match('[')) { + this.throwUnexpectedToken(this.lookahead); + } + } + else { + expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression); + } + while (true) { + if (this.match('.')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('.'); + var property = this.parseIdentifierName(); + expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property)); + } + else if (this.match('(')) { + var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber); + this.context.isBindingElement = false; + this.context.isAssignmentTarget = false; + var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments(); + expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args)); + if (asyncArrow && this.match('=>')) { + for (var i = 0; i < args.length; ++i) { + this.reinterpretExpressionAsPattern(args[i]); + } + expr = { + type: ArrowParameterPlaceHolder, + params: args, + async: true + }; + } + } + else if (this.match('[')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('['); + var property = this.isolateCoverGrammar(this.parseExpression); + this.expect(']'); + expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property)); + } + else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) { + var quasi = this.parseTemplateLiteral(); + expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi)); + } + else { + break; + } + } + this.context.allowIn = previousAllowIn; + return expr; + }; + Parser.prototype.parseSuper = function () { + var node = this.createNode(); + this.expectKeyword('super'); + if (!this.match('[') && !this.match('.')) { + this.throwUnexpectedToken(this.lookahead); + } + return this.finalize(node, new Node.Super()); + }; + Parser.prototype.parseLeftHandSideExpression = function () { + assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.'); + var node = this.startNode(this.lookahead); + var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() : + this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression); + while (true) { + if (this.match('[')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('['); + var property = this.isolateCoverGrammar(this.parseExpression); + this.expect(']'); + expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property)); + } + else if (this.match('.')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('.'); + var property = this.parseIdentifierName(); + expr = this.finalize(node, new Node.StaticMemberExpression(expr, property)); + } + else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) { + var quasi = this.parseTemplateLiteral(); + expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi)); + } + else { + break; + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-update-expressions + Parser.prototype.parseUpdateExpression = function () { + var expr; + var startToken = this.lookahead; + if (this.match('++') || this.match('--')) { + var node = this.startNode(startToken); + var token = this.nextToken(); + expr = this.inheritCoverGrammar(this.parseUnaryExpression); + if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) { + this.tolerateError(messages_1.Messages.StrictLHSPrefix); + } + if (!this.context.isAssignmentTarget) { + this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); + } + var prefix = true; + expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix)); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + else { + expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall); + if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) { + if (this.match('++') || this.match('--')) { + if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) { + this.tolerateError(messages_1.Messages.StrictLHSPostfix); + } + if (!this.context.isAssignmentTarget) { + this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); + } + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var operator = this.nextToken().value; + var prefix = false; + expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix)); + } + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-unary-operators + Parser.prototype.parseAwaitExpression = function () { + var node = this.createNode(); + this.nextToken(); + var argument = this.parseUnaryExpression(); + return this.finalize(node, new Node.AwaitExpression(argument)); + }; + Parser.prototype.parseUnaryExpression = function () { + var expr; + if (this.match('+') || this.match('-') || this.match('~') || this.match('!') || + this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) { + var node = this.startNode(this.lookahead); + var token = this.nextToken(); + expr = this.inheritCoverGrammar(this.parseUnaryExpression); + expr = this.finalize(node, new Node.UnaryExpression(token.value, expr)); + if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) { + this.tolerateError(messages_1.Messages.StrictDelete); + } + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + else if (this.context.await && this.matchContextualKeyword('await')) { + expr = this.parseAwaitExpression(); + } + else { + expr = this.parseUpdateExpression(); + } + return expr; + }; + Parser.prototype.parseExponentiationExpression = function () { + var startToken = this.lookahead; + var expr = this.inheritCoverGrammar(this.parseUnaryExpression); + if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) { + this.nextToken(); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var left = expr; + var right = this.isolateCoverGrammar(this.parseExponentiationExpression); + expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right)); + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-exp-operator + // https://tc39.github.io/ecma262/#sec-multiplicative-operators + // https://tc39.github.io/ecma262/#sec-additive-operators + // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators + // https://tc39.github.io/ecma262/#sec-relational-operators + // https://tc39.github.io/ecma262/#sec-equality-operators + // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators + // https://tc39.github.io/ecma262/#sec-binary-logical-operators + Parser.prototype.binaryPrecedence = function (token) { + var op = token.value; + var precedence; + if (token.type === 7 /* Punctuator */) { + precedence = this.operatorPrecedence[op] || 0; + } + else if (token.type === 4 /* Keyword */) { + precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0; + } + else { + precedence = 0; + } + return precedence; + }; + Parser.prototype.parseBinaryExpression = function () { + var startToken = this.lookahead; + var expr = this.inheritCoverGrammar(this.parseExponentiationExpression); + var token = this.lookahead; + var prec = this.binaryPrecedence(token); + if (prec > 0) { + this.nextToken(); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var markers = [startToken, this.lookahead]; + var left = expr; + var right = this.isolateCoverGrammar(this.parseExponentiationExpression); + var stack = [left, token.value, right]; + var precedences = [prec]; + while (true) { + prec = this.binaryPrecedence(this.lookahead); + if (prec <= 0) { + break; + } + // Reduce: make a binary expression from the three topmost entries. + while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) { + right = stack.pop(); + var operator = stack.pop(); + precedences.pop(); + left = stack.pop(); + markers.pop(); + var node = this.startNode(markers[markers.length - 1]); + stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right))); + } + // Shift. + stack.push(this.nextToken().value); + precedences.push(prec); + markers.push(this.lookahead); + stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression)); + } + // Final reduce to clean-up the stack. + var i = stack.length - 1; + expr = stack[i]; + var lastMarker = markers.pop(); + while (i > 1) { + var marker = markers.pop(); + var lastLineStart = lastMarker && lastMarker.lineStart; + var node = this.startNode(marker, lastLineStart); + var operator = stack[i - 1]; + expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr)); + i -= 2; + lastMarker = marker; + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-conditional-operator + Parser.prototype.parseConditionalExpression = function () { + var startToken = this.lookahead; + var expr = this.inheritCoverGrammar(this.parseBinaryExpression); + if (this.match('?')) { + this.nextToken(); + var previousAllowIn = this.context.allowIn; + this.context.allowIn = true; + var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression); + this.context.allowIn = previousAllowIn; + this.expect(':'); + var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression); + expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate)); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-assignment-operators + Parser.prototype.checkPatternParam = function (options, param) { + switch (param.type) { + case syntax_1.Syntax.Identifier: + this.validateParam(options, param, param.name); + break; + case syntax_1.Syntax.RestElement: + this.checkPatternParam(options, param.argument); + break; + case syntax_1.Syntax.AssignmentPattern: + this.checkPatternParam(options, param.left); + break; + case syntax_1.Syntax.ArrayPattern: + for (var i = 0; i < param.elements.length; i++) { + if (param.elements[i] !== null) { + this.checkPatternParam(options, param.elements[i]); + } + } + break; + case syntax_1.Syntax.ObjectPattern: + for (var i = 0; i < param.properties.length; i++) { + this.checkPatternParam(options, param.properties[i].value); + } + break; + default: + break; + } + options.simple = options.simple && (param instanceof Node.Identifier); + }; + Parser.prototype.reinterpretAsCoverFormalsList = function (expr) { + var params = [expr]; + var options; + var asyncArrow = false; + switch (expr.type) { + case syntax_1.Syntax.Identifier: + break; + case ArrowParameterPlaceHolder: + params = expr.params; + asyncArrow = expr.async; + break; + default: + return null; + } + options = { + simple: true, + paramSet: {} + }; + for (var i = 0; i < params.length; ++i) { + var param = params[i]; + if (param.type === syntax_1.Syntax.AssignmentPattern) { + if (param.right.type === syntax_1.Syntax.YieldExpression) { + if (param.right.argument) { + this.throwUnexpectedToken(this.lookahead); + } + param.right.type = syntax_1.Syntax.Identifier; + param.right.name = 'yield'; + delete param.right.argument; + delete param.right.delegate; + } + } + else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') { + this.throwUnexpectedToken(this.lookahead); + } + this.checkPatternParam(options, param); + params[i] = param; + } + if (this.context.strict || !this.context.allowYield) { + for (var i = 0; i < params.length; ++i) { + var param = params[i]; + if (param.type === syntax_1.Syntax.YieldExpression) { + this.throwUnexpectedToken(this.lookahead); + } + } + } + if (options.message === messages_1.Messages.StrictParamDupe) { + var token = this.context.strict ? options.stricted : options.firstRestricted; + this.throwUnexpectedToken(token, options.message); + } + return { + simple: options.simple, + params: params, + stricted: options.stricted, + firstRestricted: options.firstRestricted, + message: options.message + }; + }; + Parser.prototype.parseAssignmentExpression = function () { + var expr; + if (!this.context.allowYield && this.matchKeyword('yield')) { + expr = this.parseYieldExpression(); + } + else { + var startToken = this.lookahead; + var token = startToken; + expr = this.parseConditionalExpression(); + if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') { + if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) { + var arg = this.parsePrimaryExpression(); + this.reinterpretExpressionAsPattern(arg); + expr = { + type: ArrowParameterPlaceHolder, + params: [arg], + async: true + }; + } + } + if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) { + // https://tc39.github.io/ecma262/#sec-arrow-function-definitions + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var isAsync = expr.async; + var list = this.reinterpretAsCoverFormalsList(expr); + if (list) { + if (this.hasLineTerminator) { + this.tolerateUnexpectedToken(this.lookahead); + } + this.context.firstCoverInitializedNameError = null; + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = list.simple; + var previousAllowYield = this.context.allowYield; + var previousAwait = this.context.await; + this.context.allowYield = true; + this.context.await = isAsync; + var node = this.startNode(startToken); + this.expect('=>'); + var body = void 0; + if (this.match('{')) { + var previousAllowIn = this.context.allowIn; + this.context.allowIn = true; + body = this.parseFunctionSourceElements(); + this.context.allowIn = previousAllowIn; + } + else { + body = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + var expression = body.type !== syntax_1.Syntax.BlockStatement; + if (this.context.strict && list.firstRestricted) { + this.throwUnexpectedToken(list.firstRestricted, list.message); + } + if (this.context.strict && list.stricted) { + this.tolerateUnexpectedToken(list.stricted, list.message); + } + expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) : + this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression)); + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + this.context.allowYield = previousAllowYield; + this.context.await = previousAwait; + } + } + else { + if (this.matchAssign()) { + if (!this.context.isAssignmentTarget) { + this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); + } + if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) { + var id = expr; + if (this.scanner.isRestrictedWord(id.name)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment); + } + if (this.scanner.isStrictModeReservedWord(id.name)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); + } + } + if (!this.match('=')) { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + else { + this.reinterpretExpressionAsPattern(expr); + } + token = this.nextToken(); + var operator = token.value; + var right = this.isolateCoverGrammar(this.parseAssignmentExpression); + expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right)); + this.context.firstCoverInitializedNameError = null; + } + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-comma-operator + Parser.prototype.parseExpression = function () { + var startToken = this.lookahead; + var expr = this.isolateCoverGrammar(this.parseAssignmentExpression); + if (this.match(',')) { + var expressions = []; + expressions.push(expr); + while (this.lookahead.type !== 2 /* EOF */) { + if (!this.match(',')) { + break; + } + this.nextToken(); + expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression)); + } + expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)); + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-block + Parser.prototype.parseStatementListItem = function () { + var statement; + this.context.isAssignmentTarget = true; + this.context.isBindingElement = true; + if (this.lookahead.type === 4 /* Keyword */) { + switch (this.lookahead.value) { + case 'export': + if (!this.context.isModule) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration); + } + statement = this.parseExportDeclaration(); + break; + case 'import': + if (!this.context.isModule) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration); + } + statement = this.parseImportDeclaration(); + break; + case 'const': + statement = this.parseLexicalDeclaration({ inFor: false }); + break; + case 'function': + statement = this.parseFunctionDeclaration(); + break; + case 'class': + statement = this.parseClassDeclaration(); + break; + case 'let': + statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement(); + break; + default: + statement = this.parseStatement(); + break; + } + } + else { + statement = this.parseStatement(); + } + return statement; + }; + Parser.prototype.parseBlock = function () { + var node = this.createNode(); + this.expect('{'); + var block = []; + while (true) { + if (this.match('}')) { + break; + } + block.push(this.parseStatementListItem()); + } + this.expect('}'); + return this.finalize(node, new Node.BlockStatement(block)); + }; + // https://tc39.github.io/ecma262/#sec-let-and-const-declarations + Parser.prototype.parseLexicalBinding = function (kind, options) { + var node = this.createNode(); + var params = []; + var id = this.parsePattern(params, kind); + if (this.context.strict && id.type === syntax_1.Syntax.Identifier) { + if (this.scanner.isRestrictedWord(id.name)) { + this.tolerateError(messages_1.Messages.StrictVarName); + } + } + var init = null; + if (kind === 'const') { + if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) { + if (this.match('=')) { + this.nextToken(); + init = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + else { + this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const'); + } + } + } + else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) { + this.expect('='); + init = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + return this.finalize(node, new Node.VariableDeclarator(id, init)); + }; + Parser.prototype.parseBindingList = function (kind, options) { + var list = [this.parseLexicalBinding(kind, options)]; + while (this.match(',')) { + this.nextToken(); + list.push(this.parseLexicalBinding(kind, options)); + } + return list; + }; + Parser.prototype.isLexicalDeclaration = function () { + var state = this.scanner.saveState(); + this.scanner.scanComments(); + var next = this.scanner.lex(); + this.scanner.restoreState(state); + return (next.type === 3 /* Identifier */) || + (next.type === 7 /* Punctuator */ && next.value === '[') || + (next.type === 7 /* Punctuator */ && next.value === '{') || + (next.type === 4 /* Keyword */ && next.value === 'let') || + (next.type === 4 /* Keyword */ && next.value === 'yield'); + }; + Parser.prototype.parseLexicalDeclaration = function (options) { + var node = this.createNode(); + var kind = this.nextToken().value; + assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const'); + var declarations = this.parseBindingList(kind, options); + this.consumeSemicolon(); + return this.finalize(node, new Node.VariableDeclaration(declarations, kind)); + }; + // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns + Parser.prototype.parseBindingRestElement = function (params, kind) { + var node = this.createNode(); + this.expect('...'); + var arg = this.parsePattern(params, kind); + return this.finalize(node, new Node.RestElement(arg)); + }; + Parser.prototype.parseArrayPattern = function (params, kind) { + var node = this.createNode(); + this.expect('['); + var elements = []; + while (!this.match(']')) { + if (this.match(',')) { + this.nextToken(); + elements.push(null); + } + else { + if (this.match('...')) { + elements.push(this.parseBindingRestElement(params, kind)); + break; + } + else { + elements.push(this.parsePatternWithDefault(params, kind)); + } + if (!this.match(']')) { + this.expect(','); + } + } + } + this.expect(']'); + return this.finalize(node, new Node.ArrayPattern(elements)); + }; + Parser.prototype.parsePropertyPattern = function (params, kind) { + var node = this.createNode(); + var computed = false; + var shorthand = false; + var method = false; + var key; + var value; + if (this.lookahead.type === 3 /* Identifier */) { + var keyToken = this.lookahead; + key = this.parseVariableIdentifier(); + var init = this.finalize(node, new Node.Identifier(keyToken.value)); + if (this.match('=')) { + params.push(keyToken); + shorthand = true; + this.nextToken(); + var expr = this.parseAssignmentExpression(); + value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr)); + } + else if (!this.match(':')) { + params.push(keyToken); + shorthand = true; + value = init; + } + else { + this.expect(':'); + value = this.parsePatternWithDefault(params, kind); + } + } + else { + computed = this.match('['); + key = this.parseObjectPropertyKey(); + this.expect(':'); + value = this.parsePatternWithDefault(params, kind); + } + return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand)); + }; + Parser.prototype.parseObjectPattern = function (params, kind) { + var node = this.createNode(); + var properties = []; + this.expect('{'); + while (!this.match('}')) { + properties.push(this.parsePropertyPattern(params, kind)); + if (!this.match('}')) { + this.expect(','); + } + } + this.expect('}'); + return this.finalize(node, new Node.ObjectPattern(properties)); + }; + Parser.prototype.parsePattern = function (params, kind) { + var pattern; + if (this.match('[')) { + pattern = this.parseArrayPattern(params, kind); + } + else if (this.match('{')) { + pattern = this.parseObjectPattern(params, kind); + } + else { + if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding); + } + params.push(this.lookahead); + pattern = this.parseVariableIdentifier(kind); + } + return pattern; + }; + Parser.prototype.parsePatternWithDefault = function (params, kind) { + var startToken = this.lookahead; + var pattern = this.parsePattern(params, kind); + if (this.match('=')) { + this.nextToken(); + var previousAllowYield = this.context.allowYield; + this.context.allowYield = true; + var right = this.isolateCoverGrammar(this.parseAssignmentExpression); + this.context.allowYield = previousAllowYield; + pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right)); + } + return pattern; + }; + // https://tc39.github.io/ecma262/#sec-variable-statement + Parser.prototype.parseVariableIdentifier = function (kind) { + var node = this.createNode(); + var token = this.nextToken(); + if (token.type === 4 /* Keyword */ && token.value === 'yield') { + if (this.context.strict) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); + } + else if (!this.context.allowYield) { + this.throwUnexpectedToken(token); + } + } + else if (token.type !== 3 /* Identifier */) { + if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); + } + else { + if (this.context.strict || token.value !== 'let' || kind !== 'var') { + this.throwUnexpectedToken(token); + } + } + } + else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') { + this.tolerateUnexpectedToken(token); + } + return this.finalize(node, new Node.Identifier(token.value)); + }; + Parser.prototype.parseVariableDeclaration = function (options) { + var node = this.createNode(); + var params = []; + var id = this.parsePattern(params, 'var'); + if (this.context.strict && id.type === syntax_1.Syntax.Identifier) { + if (this.scanner.isRestrictedWord(id.name)) { + this.tolerateError(messages_1.Messages.StrictVarName); + } + } + var init = null; + if (this.match('=')) { + this.nextToken(); + init = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) { + this.expect('='); + } + return this.finalize(node, new Node.VariableDeclarator(id, init)); + }; + Parser.prototype.parseVariableDeclarationList = function (options) { + var opt = { inFor: options.inFor }; + var list = []; + list.push(this.parseVariableDeclaration(opt)); + while (this.match(',')) { + this.nextToken(); + list.push(this.parseVariableDeclaration(opt)); + } + return list; + }; + Parser.prototype.parseVariableStatement = function () { + var node = this.createNode(); + this.expectKeyword('var'); + var declarations = this.parseVariableDeclarationList({ inFor: false }); + this.consumeSemicolon(); + return this.finalize(node, new Node.VariableDeclaration(declarations, 'var')); + }; + // https://tc39.github.io/ecma262/#sec-empty-statement + Parser.prototype.parseEmptyStatement = function () { + var node = this.createNode(); + this.expect(';'); + return this.finalize(node, new Node.EmptyStatement()); + }; + // https://tc39.github.io/ecma262/#sec-expression-statement + Parser.prototype.parseExpressionStatement = function () { + var node = this.createNode(); + var expr = this.parseExpression(); + this.consumeSemicolon(); + return this.finalize(node, new Node.ExpressionStatement(expr)); + }; + // https://tc39.github.io/ecma262/#sec-if-statement + Parser.prototype.parseIfClause = function () { + if (this.context.strict && this.matchKeyword('function')) { + this.tolerateError(messages_1.Messages.StrictFunction); + } + return this.parseStatement(); + }; + Parser.prototype.parseIfStatement = function () { + var node = this.createNode(); + var consequent; + var alternate = null; + this.expectKeyword('if'); + this.expect('('); + var test = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + consequent = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + consequent = this.parseIfClause(); + if (this.matchKeyword('else')) { + this.nextToken(); + alternate = this.parseIfClause(); + } + } + return this.finalize(node, new Node.IfStatement(test, consequent, alternate)); + }; + // https://tc39.github.io/ecma262/#sec-do-while-statement + Parser.prototype.parseDoWhileStatement = function () { + var node = this.createNode(); + this.expectKeyword('do'); + var previousInIteration = this.context.inIteration; + this.context.inIteration = true; + var body = this.parseStatement(); + this.context.inIteration = previousInIteration; + this.expectKeyword('while'); + this.expect('('); + var test = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + } + else { + this.expect(')'); + if (this.match(';')) { + this.nextToken(); + } + } + return this.finalize(node, new Node.DoWhileStatement(body, test)); + }; + // https://tc39.github.io/ecma262/#sec-while-statement + Parser.prototype.parseWhileStatement = function () { + var node = this.createNode(); + var body; + this.expectKeyword('while'); + this.expect('('); + var test = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + body = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + var previousInIteration = this.context.inIteration; + this.context.inIteration = true; + body = this.parseStatement(); + this.context.inIteration = previousInIteration; + } + return this.finalize(node, new Node.WhileStatement(test, body)); + }; + // https://tc39.github.io/ecma262/#sec-for-statement + // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements + Parser.prototype.parseForStatement = function () { + var init = null; + var test = null; + var update = null; + var forIn = true; + var left, right; + var node = this.createNode(); + this.expectKeyword('for'); + this.expect('('); + if (this.match(';')) { + this.nextToken(); + } + else { + if (this.matchKeyword('var')) { + init = this.createNode(); + this.nextToken(); + var previousAllowIn = this.context.allowIn; + this.context.allowIn = false; + var declarations = this.parseVariableDeclarationList({ inFor: true }); + this.context.allowIn = previousAllowIn; + if (declarations.length === 1 && this.matchKeyword('in')) { + var decl = declarations[0]; + if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) { + this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in'); + } + init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); + this.nextToken(); + left = init; + right = this.parseExpression(); + init = null; + } + else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) { + init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); + this.nextToken(); + left = init; + right = this.parseAssignmentExpression(); + init = null; + forIn = false; + } + else { + init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); + this.expect(';'); + } + } + else if (this.matchKeyword('const') || this.matchKeyword('let')) { + init = this.createNode(); + var kind = this.nextToken().value; + if (!this.context.strict && this.lookahead.value === 'in') { + init = this.finalize(init, new Node.Identifier(kind)); + this.nextToken(); + left = init; + right = this.parseExpression(); + init = null; + } + else { + var previousAllowIn = this.context.allowIn; + this.context.allowIn = false; + var declarations = this.parseBindingList(kind, { inFor: true }); + this.context.allowIn = previousAllowIn; + if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) { + init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); + this.nextToken(); + left = init; + right = this.parseExpression(); + init = null; + } + else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) { + init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); + this.nextToken(); + left = init; + right = this.parseAssignmentExpression(); + init = null; + forIn = false; + } + else { + this.consumeSemicolon(); + init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); + } + } + } + else { + var initStartToken = this.lookahead; + var previousAllowIn = this.context.allowIn; + this.context.allowIn = false; + init = this.inheritCoverGrammar(this.parseAssignmentExpression); + this.context.allowIn = previousAllowIn; + if (this.matchKeyword('in')) { + if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) { + this.tolerateError(messages_1.Messages.InvalidLHSInForIn); + } + this.nextToken(); + this.reinterpretExpressionAsPattern(init); + left = init; + right = this.parseExpression(); + init = null; + } + else if (this.matchContextualKeyword('of')) { + if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) { + this.tolerateError(messages_1.Messages.InvalidLHSInForLoop); + } + this.nextToken(); + this.reinterpretExpressionAsPattern(init); + left = init; + right = this.parseAssignmentExpression(); + init = null; + forIn = false; + } + else { + if (this.match(',')) { + var initSeq = [init]; + while (this.match(',')) { + this.nextToken(); + initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression)); + } + init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq)); + } + this.expect(';'); + } + } + } + if (typeof left === 'undefined') { + if (!this.match(';')) { + test = this.parseExpression(); + } + this.expect(';'); + if (!this.match(')')) { + update = this.parseExpression(); + } + } + var body; + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + body = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + var previousInIteration = this.context.inIteration; + this.context.inIteration = true; + body = this.isolateCoverGrammar(this.parseStatement); + this.context.inIteration = previousInIteration; + } + return (typeof left === 'undefined') ? + this.finalize(node, new Node.ForStatement(init, test, update, body)) : + forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) : + this.finalize(node, new Node.ForOfStatement(left, right, body)); + }; + // https://tc39.github.io/ecma262/#sec-continue-statement + Parser.prototype.parseContinueStatement = function () { + var node = this.createNode(); + this.expectKeyword('continue'); + var label = null; + if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) { + var id = this.parseVariableIdentifier(); + label = id; + var key = '$' + id.name; + if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { + this.throwError(messages_1.Messages.UnknownLabel, id.name); + } + } + this.consumeSemicolon(); + if (label === null && !this.context.inIteration) { + this.throwError(messages_1.Messages.IllegalContinue); + } + return this.finalize(node, new Node.ContinueStatement(label)); + }; + // https://tc39.github.io/ecma262/#sec-break-statement + Parser.prototype.parseBreakStatement = function () { + var node = this.createNode(); + this.expectKeyword('break'); + var label = null; + if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) { + var id = this.parseVariableIdentifier(); + var key = '$' + id.name; + if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { + this.throwError(messages_1.Messages.UnknownLabel, id.name); + } + label = id; + } + this.consumeSemicolon(); + if (label === null && !this.context.inIteration && !this.context.inSwitch) { + this.throwError(messages_1.Messages.IllegalBreak); + } + return this.finalize(node, new Node.BreakStatement(label)); + }; + // https://tc39.github.io/ecma262/#sec-return-statement + Parser.prototype.parseReturnStatement = function () { + if (!this.context.inFunctionBody) { + this.tolerateError(messages_1.Messages.IllegalReturn); + } + var node = this.createNode(); + this.expectKeyword('return'); + var hasArgument = (!this.match(';') && !this.match('}') && + !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) || + this.lookahead.type === 8 /* StringLiteral */ || + this.lookahead.type === 10 /* Template */; + var argument = hasArgument ? this.parseExpression() : null; + this.consumeSemicolon(); + return this.finalize(node, new Node.ReturnStatement(argument)); + }; + // https://tc39.github.io/ecma262/#sec-with-statement + Parser.prototype.parseWithStatement = function () { + if (this.context.strict) { + this.tolerateError(messages_1.Messages.StrictModeWith); + } + var node = this.createNode(); + var body; + this.expectKeyword('with'); + this.expect('('); + var object = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + body = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + body = this.parseStatement(); + } + return this.finalize(node, new Node.WithStatement(object, body)); + }; + // https://tc39.github.io/ecma262/#sec-switch-statement + Parser.prototype.parseSwitchCase = function () { + var node = this.createNode(); + var test; + if (this.matchKeyword('default')) { + this.nextToken(); + test = null; + } + else { + this.expectKeyword('case'); + test = this.parseExpression(); + } + this.expect(':'); + var consequent = []; + while (true) { + if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) { + break; + } + consequent.push(this.parseStatementListItem()); + } + return this.finalize(node, new Node.SwitchCase(test, consequent)); + }; + Parser.prototype.parseSwitchStatement = function () { + var node = this.createNode(); + this.expectKeyword('switch'); + this.expect('('); + var discriminant = this.parseExpression(); + this.expect(')'); + var previousInSwitch = this.context.inSwitch; + this.context.inSwitch = true; + var cases = []; + var defaultFound = false; + this.expect('{'); + while (true) { + if (this.match('}')) { + break; + } + var clause = this.parseSwitchCase(); + if (clause.test === null) { + if (defaultFound) { + this.throwError(messages_1.Messages.MultipleDefaultsInSwitch); + } + defaultFound = true; + } + cases.push(clause); + } + this.expect('}'); + this.context.inSwitch = previousInSwitch; + return this.finalize(node, new Node.SwitchStatement(discriminant, cases)); + }; + // https://tc39.github.io/ecma262/#sec-labelled-statements + Parser.prototype.parseLabelledStatement = function () { + var node = this.createNode(); + var expr = this.parseExpression(); + var statement; + if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) { + this.nextToken(); + var id = expr; + var key = '$' + id.name; + if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { + this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name); + } + this.context.labelSet[key] = true; + var body = void 0; + if (this.matchKeyword('class')) { + this.tolerateUnexpectedToken(this.lookahead); + body = this.parseClassDeclaration(); + } + else if (this.matchKeyword('function')) { + var token = this.lookahead; + var declaration = this.parseFunctionDeclaration(); + if (this.context.strict) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction); + } + else if (declaration.generator) { + this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext); + } + body = declaration; + } + else { + body = this.parseStatement(); + } + delete this.context.labelSet[key]; + statement = new Node.LabeledStatement(id, body); + } + else { + this.consumeSemicolon(); + statement = new Node.ExpressionStatement(expr); + } + return this.finalize(node, statement); + }; + // https://tc39.github.io/ecma262/#sec-throw-statement + Parser.prototype.parseThrowStatement = function () { + var node = this.createNode(); + this.expectKeyword('throw'); + if (this.hasLineTerminator) { + this.throwError(messages_1.Messages.NewlineAfterThrow); + } + var argument = this.parseExpression(); + this.consumeSemicolon(); + return this.finalize(node, new Node.ThrowStatement(argument)); + }; + // https://tc39.github.io/ecma262/#sec-try-statement + Parser.prototype.parseCatchClause = function () { + var node = this.createNode(); + this.expectKeyword('catch'); + this.expect('('); + if (this.match(')')) { + this.throwUnexpectedToken(this.lookahead); + } + var params = []; + var param = this.parsePattern(params); + var paramMap = {}; + for (var i = 0; i < params.length; i++) { + var key = '$' + params[i].value; + if (Object.prototype.hasOwnProperty.call(paramMap, key)) { + this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value); + } + paramMap[key] = true; + } + if (this.context.strict && param.type === syntax_1.Syntax.Identifier) { + if (this.scanner.isRestrictedWord(param.name)) { + this.tolerateError(messages_1.Messages.StrictCatchVariable); + } + } + this.expect(')'); + var body = this.parseBlock(); + return this.finalize(node, new Node.CatchClause(param, body)); + }; + Parser.prototype.parseFinallyClause = function () { + this.expectKeyword('finally'); + return this.parseBlock(); + }; + Parser.prototype.parseTryStatement = function () { + var node = this.createNode(); + this.expectKeyword('try'); + var block = this.parseBlock(); + var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null; + var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null; + if (!handler && !finalizer) { + this.throwError(messages_1.Messages.NoCatchOrFinally); + } + return this.finalize(node, new Node.TryStatement(block, handler, finalizer)); + }; + // https://tc39.github.io/ecma262/#sec-debugger-statement + Parser.prototype.parseDebuggerStatement = function () { + var node = this.createNode(); + this.expectKeyword('debugger'); + this.consumeSemicolon(); + return this.finalize(node, new Node.DebuggerStatement()); + }; + // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations + Parser.prototype.parseStatement = function () { + var statement; + switch (this.lookahead.type) { + case 1 /* BooleanLiteral */: + case 5 /* NullLiteral */: + case 6 /* NumericLiteral */: + case 8 /* StringLiteral */: + case 10 /* Template */: + case 9 /* RegularExpression */: + statement = this.parseExpressionStatement(); + break; + case 7 /* Punctuator */: + var value = this.lookahead.value; + if (value === '{') { + statement = this.parseBlock(); + } + else if (value === '(') { + statement = this.parseExpressionStatement(); + } + else if (value === ';') { + statement = this.parseEmptyStatement(); + } + else { + statement = this.parseExpressionStatement(); + } + break; + case 3 /* Identifier */: + statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement(); + break; + case 4 /* Keyword */: + switch (this.lookahead.value) { + case 'break': + statement = this.parseBreakStatement(); + break; + case 'continue': + statement = this.parseContinueStatement(); + break; + case 'debugger': + statement = this.parseDebuggerStatement(); + break; + case 'do': + statement = this.parseDoWhileStatement(); + break; + case 'for': + statement = this.parseForStatement(); + break; + case 'function': + statement = this.parseFunctionDeclaration(); + break; + case 'if': + statement = this.parseIfStatement(); + break; + case 'return': + statement = this.parseReturnStatement(); + break; + case 'switch': + statement = this.parseSwitchStatement(); + break; + case 'throw': + statement = this.parseThrowStatement(); + break; + case 'try': + statement = this.parseTryStatement(); + break; + case 'var': + statement = this.parseVariableStatement(); + break; + case 'while': + statement = this.parseWhileStatement(); + break; + case 'with': + statement = this.parseWithStatement(); + break; + default: + statement = this.parseExpressionStatement(); + break; + } + break; + default: + statement = this.throwUnexpectedToken(this.lookahead); + } + return statement; + }; + // https://tc39.github.io/ecma262/#sec-function-definitions + Parser.prototype.parseFunctionSourceElements = function () { + var node = this.createNode(); + this.expect('{'); + var body = this.parseDirectivePrologues(); + var previousLabelSet = this.context.labelSet; + var previousInIteration = this.context.inIteration; + var previousInSwitch = this.context.inSwitch; + var previousInFunctionBody = this.context.inFunctionBody; + this.context.labelSet = {}; + this.context.inIteration = false; + this.context.inSwitch = false; + this.context.inFunctionBody = true; + while (this.lookahead.type !== 2 /* EOF */) { + if (this.match('}')) { + break; + } + body.push(this.parseStatementListItem()); + } + this.expect('}'); + this.context.labelSet = previousLabelSet; + this.context.inIteration = previousInIteration; + this.context.inSwitch = previousInSwitch; + this.context.inFunctionBody = previousInFunctionBody; + return this.finalize(node, new Node.BlockStatement(body)); + }; + Parser.prototype.validateParam = function (options, param, name) { + var key = '$' + name; + if (this.context.strict) { + if (this.scanner.isRestrictedWord(name)) { + options.stricted = param; + options.message = messages_1.Messages.StrictParamName; + } + if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { + options.stricted = param; + options.message = messages_1.Messages.StrictParamDupe; + } + } + else if (!options.firstRestricted) { + if (this.scanner.isRestrictedWord(name)) { + options.firstRestricted = param; + options.message = messages_1.Messages.StrictParamName; + } + else if (this.scanner.isStrictModeReservedWord(name)) { + options.firstRestricted = param; + options.message = messages_1.Messages.StrictReservedWord; + } + else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { + options.stricted = param; + options.message = messages_1.Messages.StrictParamDupe; + } + } + /* istanbul ignore next */ + if (typeof Object.defineProperty === 'function') { + Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true }); + } + else { + options.paramSet[key] = true; + } + }; + Parser.prototype.parseRestElement = function (params) { + var node = this.createNode(); + this.expect('...'); + var arg = this.parsePattern(params); + if (this.match('=')) { + this.throwError(messages_1.Messages.DefaultRestParameter); + } + if (!this.match(')')) { + this.throwError(messages_1.Messages.ParameterAfterRestParameter); + } + return this.finalize(node, new Node.RestElement(arg)); + }; + Parser.prototype.parseFormalParameter = function (options) { + var params = []; + var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params); + for (var i = 0; i < params.length; i++) { + this.validateParam(options, params[i], params[i].value); + } + options.simple = options.simple && (param instanceof Node.Identifier); + options.params.push(param); + }; + Parser.prototype.parseFormalParameters = function (firstRestricted) { + var options; + options = { + simple: true, + params: [], + firstRestricted: firstRestricted + }; + this.expect('('); + if (!this.match(')')) { + options.paramSet = {}; + while (this.lookahead.type !== 2 /* EOF */) { + this.parseFormalParameter(options); + if (this.match(')')) { + break; + } + this.expect(','); + if (this.match(')')) { + break; + } + } + } + this.expect(')'); + return { + simple: options.simple, + params: options.params, + stricted: options.stricted, + firstRestricted: options.firstRestricted, + message: options.message + }; + }; + Parser.prototype.matchAsyncFunction = function () { + var match = this.matchContextualKeyword('async'); + if (match) { + var state = this.scanner.saveState(); + this.scanner.scanComments(); + var next = this.scanner.lex(); + this.scanner.restoreState(state); + match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function'); + } + return match; + }; + Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) { + var node = this.createNode(); + var isAsync = this.matchContextualKeyword('async'); + if (isAsync) { + this.nextToken(); + } + this.expectKeyword('function'); + var isGenerator = isAsync ? false : this.match('*'); + if (isGenerator) { + this.nextToken(); + } + var message; + var id = null; + var firstRestricted = null; + if (!identifierIsOptional || !this.match('(')) { + var token = this.lookahead; + id = this.parseVariableIdentifier(); + if (this.context.strict) { + if (this.scanner.isRestrictedWord(token.value)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName); + } + } + else { + if (this.scanner.isRestrictedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictFunctionName; + } + else if (this.scanner.isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictReservedWord; + } + } + } + var previousAllowAwait = this.context.await; + var previousAllowYield = this.context.allowYield; + this.context.await = isAsync; + this.context.allowYield = !isGenerator; + var formalParameters = this.parseFormalParameters(firstRestricted); + var params = formalParameters.params; + var stricted = formalParameters.stricted; + firstRestricted = formalParameters.firstRestricted; + if (formalParameters.message) { + message = formalParameters.message; + } + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = formalParameters.simple; + var body = this.parseFunctionSourceElements(); + if (this.context.strict && firstRestricted) { + this.throwUnexpectedToken(firstRestricted, message); + } + if (this.context.strict && stricted) { + this.tolerateUnexpectedToken(stricted, message); + } + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + this.context.await = previousAllowAwait; + this.context.allowYield = previousAllowYield; + return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) : + this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator)); + }; + Parser.prototype.parseFunctionExpression = function () { + var node = this.createNode(); + var isAsync = this.matchContextualKeyword('async'); + if (isAsync) { + this.nextToken(); + } + this.expectKeyword('function'); + var isGenerator = isAsync ? false : this.match('*'); + if (isGenerator) { + this.nextToken(); + } + var message; + var id = null; + var firstRestricted; + var previousAllowAwait = this.context.await; + var previousAllowYield = this.context.allowYield; + this.context.await = isAsync; + this.context.allowYield = !isGenerator; + if (!this.match('(')) { + var token = this.lookahead; + id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier(); + if (this.context.strict) { + if (this.scanner.isRestrictedWord(token.value)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName); + } + } + else { + if (this.scanner.isRestrictedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictFunctionName; + } + else if (this.scanner.isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictReservedWord; + } + } + } + var formalParameters = this.parseFormalParameters(firstRestricted); + var params = formalParameters.params; + var stricted = formalParameters.stricted; + firstRestricted = formalParameters.firstRestricted; + if (formalParameters.message) { + message = formalParameters.message; + } + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = formalParameters.simple; + var body = this.parseFunctionSourceElements(); + if (this.context.strict && firstRestricted) { + this.throwUnexpectedToken(firstRestricted, message); + } + if (this.context.strict && stricted) { + this.tolerateUnexpectedToken(stricted, message); + } + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + this.context.await = previousAllowAwait; + this.context.allowYield = previousAllowYield; + return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) : + this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator)); + }; + // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive + Parser.prototype.parseDirective = function () { + var token = this.lookahead; + var node = this.createNode(); + var expr = this.parseExpression(); + var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null; + this.consumeSemicolon(); + return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr)); + }; + Parser.prototype.parseDirectivePrologues = function () { + var firstRestricted = null; + var body = []; + while (true) { + var token = this.lookahead; + if (token.type !== 8 /* StringLiteral */) { + break; + } + var statement = this.parseDirective(); + body.push(statement); + var directive = statement.directive; + if (typeof directive !== 'string') { + break; + } + if (directive === 'use strict') { + this.context.strict = true; + if (firstRestricted) { + this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral); + } + if (!this.context.allowStrictDirective) { + this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective); + } + } + else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + return body; + }; + // https://tc39.github.io/ecma262/#sec-method-definitions + Parser.prototype.qualifiedPropertyName = function (token) { + switch (token.type) { + case 3 /* Identifier */: + case 8 /* StringLiteral */: + case 1 /* BooleanLiteral */: + case 5 /* NullLiteral */: + case 6 /* NumericLiteral */: + case 4 /* Keyword */: + return true; + case 7 /* Punctuator */: + return token.value === '['; + default: + break; + } + return false; + }; + Parser.prototype.parseGetterMethod = function () { + var node = this.createNode(); + var isGenerator = false; + var previousAllowYield = this.context.allowYield; + this.context.allowYield = !isGenerator; + var formalParameters = this.parseFormalParameters(); + if (formalParameters.params.length > 0) { + this.tolerateError(messages_1.Messages.BadGetterArity); + } + var method = this.parsePropertyMethod(formalParameters); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator)); + }; + Parser.prototype.parseSetterMethod = function () { + var node = this.createNode(); + var isGenerator = false; + var previousAllowYield = this.context.allowYield; + this.context.allowYield = !isGenerator; + var formalParameters = this.parseFormalParameters(); + if (formalParameters.params.length !== 1) { + this.tolerateError(messages_1.Messages.BadSetterArity); + } + else if (formalParameters.params[0] instanceof Node.RestElement) { + this.tolerateError(messages_1.Messages.BadSetterRestParameter); + } + var method = this.parsePropertyMethod(formalParameters); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator)); + }; + Parser.prototype.parseGeneratorMethod = function () { + var node = this.createNode(); + var isGenerator = true; + var previousAllowYield = this.context.allowYield; + this.context.allowYield = true; + var params = this.parseFormalParameters(); + this.context.allowYield = false; + var method = this.parsePropertyMethod(params); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); + }; + // https://tc39.github.io/ecma262/#sec-generator-function-definitions + Parser.prototype.isStartOfExpression = function () { + var start = true; + var value = this.lookahead.value; + switch (this.lookahead.type) { + case 7 /* Punctuator */: + start = (value === '[') || (value === '(') || (value === '{') || + (value === '+') || (value === '-') || + (value === '!') || (value === '~') || + (value === '++') || (value === '--') || + (value === '/') || (value === '/='); // regular expression literal + break; + case 4 /* Keyword */: + start = (value === 'class') || (value === 'delete') || + (value === 'function') || (value === 'let') || (value === 'new') || + (value === 'super') || (value === 'this') || (value === 'typeof') || + (value === 'void') || (value === 'yield'); + break; + default: + break; + } + return start; + }; + Parser.prototype.parseYieldExpression = function () { + var node = this.createNode(); + this.expectKeyword('yield'); + var argument = null; + var delegate = false; + if (!this.hasLineTerminator) { + var previousAllowYield = this.context.allowYield; + this.context.allowYield = false; + delegate = this.match('*'); + if (delegate) { + this.nextToken(); + argument = this.parseAssignmentExpression(); + } + else if (this.isStartOfExpression()) { + argument = this.parseAssignmentExpression(); + } + this.context.allowYield = previousAllowYield; + } + return this.finalize(node, new Node.YieldExpression(argument, delegate)); + }; + // https://tc39.github.io/ecma262/#sec-class-definitions + Parser.prototype.parseClassElement = function (hasConstructor) { + var token = this.lookahead; + var node = this.createNode(); + var kind = ''; + var key = null; + var value = null; + var computed = false; + var method = false; + var isStatic = false; + var isAsync = false; + if (this.match('*')) { + this.nextToken(); + } + else { + computed = this.match('['); + key = this.parseObjectPropertyKey(); + var id = key; + if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) { + token = this.lookahead; + isStatic = true; + computed = this.match('['); + if (this.match('*')) { + this.nextToken(); + } + else { + key = this.parseObjectPropertyKey(); + } + } + if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) { + var punctuator = this.lookahead.value; + if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') { + isAsync = true; + token = this.lookahead; + key = this.parseObjectPropertyKey(); + if (token.type === 3 /* Identifier */ && token.value === 'constructor') { + this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync); + } + } + } + } + var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead); + if (token.type === 3 /* Identifier */) { + if (token.value === 'get' && lookaheadPropertyKey) { + kind = 'get'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + this.context.allowYield = false; + value = this.parseGetterMethod(); + } + else if (token.value === 'set' && lookaheadPropertyKey) { + kind = 'set'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseSetterMethod(); + } + } + else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) { + kind = 'init'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseGeneratorMethod(); + method = true; + } + if (!kind && key && this.match('(')) { + kind = 'init'; + value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction(); + method = true; + } + if (!kind) { + this.throwUnexpectedToken(this.lookahead); + } + if (kind === 'init') { + kind = 'method'; + } + if (!computed) { + if (isStatic && this.isPropertyKey(key, 'prototype')) { + this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype); + } + if (!isStatic && this.isPropertyKey(key, 'constructor')) { + if (kind !== 'method' || !method || (value && value.generator)) { + this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod); + } + if (hasConstructor.value) { + this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor); + } + else { + hasConstructor.value = true; + } + kind = 'constructor'; + } + } + return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic)); + }; + Parser.prototype.parseClassElementList = function () { + var body = []; + var hasConstructor = { value: false }; + this.expect('{'); + while (!this.match('}')) { + if (this.match(';')) { + this.nextToken(); + } + else { + body.push(this.parseClassElement(hasConstructor)); + } + } + this.expect('}'); + return body; + }; + Parser.prototype.parseClassBody = function () { + var node = this.createNode(); + var elementList = this.parseClassElementList(); + return this.finalize(node, new Node.ClassBody(elementList)); + }; + Parser.prototype.parseClassDeclaration = function (identifierIsOptional) { + var node = this.createNode(); + var previousStrict = this.context.strict; + this.context.strict = true; + this.expectKeyword('class'); + var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier(); + var superClass = null; + if (this.matchKeyword('extends')) { + this.nextToken(); + superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall); + } + var classBody = this.parseClassBody(); + this.context.strict = previousStrict; + return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody)); + }; + Parser.prototype.parseClassExpression = function () { + var node = this.createNode(); + var previousStrict = this.context.strict; + this.context.strict = true; + this.expectKeyword('class'); + var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null; + var superClass = null; + if (this.matchKeyword('extends')) { + this.nextToken(); + superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall); + } + var classBody = this.parseClassBody(); + this.context.strict = previousStrict; + return this.finalize(node, new Node.ClassExpression(id, superClass, classBody)); + }; + // https://tc39.github.io/ecma262/#sec-scripts + // https://tc39.github.io/ecma262/#sec-modules + Parser.prototype.parseModule = function () { + this.context.strict = true; + this.context.isModule = true; + this.scanner.isModule = true; + var node = this.createNode(); + var body = this.parseDirectivePrologues(); + while (this.lookahead.type !== 2 /* EOF */) { + body.push(this.parseStatementListItem()); + } + return this.finalize(node, new Node.Module(body)); + }; + Parser.prototype.parseScript = function () { + var node = this.createNode(); + var body = this.parseDirectivePrologues(); + while (this.lookahead.type !== 2 /* EOF */) { + body.push(this.parseStatementListItem()); + } + return this.finalize(node, new Node.Script(body)); + }; + // https://tc39.github.io/ecma262/#sec-imports + Parser.prototype.parseModuleSpecifier = function () { + var node = this.createNode(); + if (this.lookahead.type !== 8 /* StringLiteral */) { + this.throwError(messages_1.Messages.InvalidModuleSpecifier); + } + var token = this.nextToken(); + var raw = this.getTokenRaw(token); + return this.finalize(node, new Node.Literal(token.value, raw)); + }; + // import {} ...; + Parser.prototype.parseImportSpecifier = function () { + var node = this.createNode(); + var imported; + var local; + if (this.lookahead.type === 3 /* Identifier */) { + imported = this.parseVariableIdentifier(); + local = imported; + if (this.matchContextualKeyword('as')) { + this.nextToken(); + local = this.parseVariableIdentifier(); + } + } + else { + imported = this.parseIdentifierName(); + local = imported; + if (this.matchContextualKeyword('as')) { + this.nextToken(); + local = this.parseVariableIdentifier(); + } + else { + this.throwUnexpectedToken(this.nextToken()); + } + } + return this.finalize(node, new Node.ImportSpecifier(local, imported)); + }; + // {foo, bar as bas} + Parser.prototype.parseNamedImports = function () { + this.expect('{'); + var specifiers = []; + while (!this.match('}')) { + specifiers.push(this.parseImportSpecifier()); + if (!this.match('}')) { + this.expect(','); + } + } + this.expect('}'); + return specifiers; + }; + // import ...; + Parser.prototype.parseImportDefaultSpecifier = function () { + var node = this.createNode(); + var local = this.parseIdentifierName(); + return this.finalize(node, new Node.ImportDefaultSpecifier(local)); + }; + // import <* as foo> ...; + Parser.prototype.parseImportNamespaceSpecifier = function () { + var node = this.createNode(); + this.expect('*'); + if (!this.matchContextualKeyword('as')) { + this.throwError(messages_1.Messages.NoAsAfterImportNamespace); + } + this.nextToken(); + var local = this.parseIdentifierName(); + return this.finalize(node, new Node.ImportNamespaceSpecifier(local)); + }; + Parser.prototype.parseImportDeclaration = function () { + if (this.context.inFunctionBody) { + this.throwError(messages_1.Messages.IllegalImportDeclaration); + } + var node = this.createNode(); + this.expectKeyword('import'); + var src; + var specifiers = []; + if (this.lookahead.type === 8 /* StringLiteral */) { + // import 'foo'; + src = this.parseModuleSpecifier(); + } + else { + if (this.match('{')) { + // import {bar} + specifiers = specifiers.concat(this.parseNamedImports()); + } + else if (this.match('*')) { + // import * as foo + specifiers.push(this.parseImportNamespaceSpecifier()); + } + else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) { + // import foo + specifiers.push(this.parseImportDefaultSpecifier()); + if (this.match(',')) { + this.nextToken(); + if (this.match('*')) { + // import foo, * as foo + specifiers.push(this.parseImportNamespaceSpecifier()); + } + else if (this.match('{')) { + // import foo, {bar} + specifiers = specifiers.concat(this.parseNamedImports()); + } + else { + this.throwUnexpectedToken(this.lookahead); + } + } + } + else { + this.throwUnexpectedToken(this.nextToken()); + } + if (!this.matchContextualKeyword('from')) { + var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; + this.throwError(message, this.lookahead.value); + } + this.nextToken(); + src = this.parseModuleSpecifier(); + } + this.consumeSemicolon(); + return this.finalize(node, new Node.ImportDeclaration(specifiers, src)); + }; + // https://tc39.github.io/ecma262/#sec-exports + Parser.prototype.parseExportSpecifier = function () { + var node = this.createNode(); + var local = this.parseIdentifierName(); + var exported = local; + if (this.matchContextualKeyword('as')) { + this.nextToken(); + exported = this.parseIdentifierName(); + } + return this.finalize(node, new Node.ExportSpecifier(local, exported)); + }; + Parser.prototype.parseExportDeclaration = function () { + if (this.context.inFunctionBody) { + this.throwError(messages_1.Messages.IllegalExportDeclaration); + } + var node = this.createNode(); + this.expectKeyword('export'); + var exportDeclaration; + if (this.matchKeyword('default')) { + // export default ... + this.nextToken(); + if (this.matchKeyword('function')) { + // export default function foo () {} + // export default function () {} + var declaration = this.parseFunctionDeclaration(true); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + else if (this.matchKeyword('class')) { + // export default class foo {} + var declaration = this.parseClassDeclaration(true); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + else if (this.matchContextualKeyword('async')) { + // export default async function f () {} + // export default async function () {} + // export default async x => x + var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression(); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + else { + if (this.matchContextualKeyword('from')) { + this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value); + } + // export default {}; + // export default []; + // export default (1 + 2); + var declaration = this.match('{') ? this.parseObjectInitializer() : + this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression(); + this.consumeSemicolon(); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + } + else if (this.match('*')) { + // export * from 'foo'; + this.nextToken(); + if (!this.matchContextualKeyword('from')) { + var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; + this.throwError(message, this.lookahead.value); + } + this.nextToken(); + var src = this.parseModuleSpecifier(); + this.consumeSemicolon(); + exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src)); + } + else if (this.lookahead.type === 4 /* Keyword */) { + // export var f = 1; + var declaration = void 0; + switch (this.lookahead.value) { + case 'let': + case 'const': + declaration = this.parseLexicalDeclaration({ inFor: false }); + break; + case 'var': + case 'class': + case 'function': + declaration = this.parseStatementListItem(); + break; + default: + this.throwUnexpectedToken(this.lookahead); + } + exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null)); + } + else if (this.matchAsyncFunction()) { + var declaration = this.parseFunctionDeclaration(); + exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null)); + } + else { + var specifiers = []; + var source = null; + var isExportFromIdentifier = false; + this.expect('{'); + while (!this.match('}')) { + isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default'); + specifiers.push(this.parseExportSpecifier()); + if (!this.match('}')) { + this.expect(','); + } + } + this.expect('}'); + if (this.matchContextualKeyword('from')) { + // export {default} from 'foo'; + // export {foo} from 'foo'; + this.nextToken(); + source = this.parseModuleSpecifier(); + this.consumeSemicolon(); + } + else if (isExportFromIdentifier) { + // export {default}; // missing fromClause + var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; + this.throwError(message, this.lookahead.value); + } + else { + // export {foo}; + this.consumeSemicolon(); + } + exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source)); + } + return exportDeclaration; + }; + return Parser; + }()); + exports.Parser = Parser; + + +/***/ }, +/* 9 */ +/***/ function(module, exports) { + + "use strict"; + // Ensure the condition is true, otherwise throw an error. + // This is only to have a better contract semantic, i.e. another safety net + // to catch a logic error. The condition shall be fulfilled in normal case. + // Do NOT use this to enforce a certain condition on any user input. + Object.defineProperty(exports, "__esModule", { value: true }); + function assert(condition, message) { + /* istanbul ignore if */ + if (!condition) { + throw new Error('ASSERT: ' + message); + } + } + exports.assert = assert; + + +/***/ }, +/* 10 */ +/***/ function(module, exports) { + + "use strict"; + /* tslint:disable:max-classes-per-file */ + Object.defineProperty(exports, "__esModule", { value: true }); + var ErrorHandler = (function () { + function ErrorHandler() { + this.errors = []; + this.tolerant = false; + } + ErrorHandler.prototype.recordError = function (error) { + this.errors.push(error); + }; + ErrorHandler.prototype.tolerate = function (error) { + if (this.tolerant) { + this.recordError(error); + } + else { + throw error; + } + }; + ErrorHandler.prototype.constructError = function (msg, column) { + var error = new Error(msg); + try { + throw error; + } + catch (base) { + /* istanbul ignore else */ + if (Object.create && Object.defineProperty) { + error = Object.create(base); + Object.defineProperty(error, 'column', { value: column }); + } + } + /* istanbul ignore next */ + return error; + }; + ErrorHandler.prototype.createError = function (index, line, col, description) { + var msg = 'Line ' + line + ': ' + description; + var error = this.constructError(msg, col); + error.index = index; + error.lineNumber = line; + error.description = description; + return error; + }; + ErrorHandler.prototype.throwError = function (index, line, col, description) { + throw this.createError(index, line, col, description); + }; + ErrorHandler.prototype.tolerateError = function (index, line, col, description) { + var error = this.createError(index, line, col, description); + if (this.tolerant) { + this.recordError(error); + } + else { + throw error; + } + }; + return ErrorHandler; + }()); + exports.ErrorHandler = ErrorHandler; + + +/***/ }, +/* 11 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + // Error messages should be identical to V8. + exports.Messages = { + BadGetterArity: 'Getter must not have any formal parameters', + BadSetterArity: 'Setter must have exactly one formal parameter', + BadSetterRestParameter: 'Setter function argument must not be a rest parameter', + ConstructorIsAsync: 'Class constructor may not be an async method', + ConstructorSpecialMethod: 'Class constructor may not be an accessor', + DeclarationMissingInitializer: 'Missing initializer in %0 declaration', + DefaultRestParameter: 'Unexpected token =', + DuplicateBinding: 'Duplicate binding %0', + DuplicateConstructor: 'A class may only have one constructor', + DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals', + ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer', + GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts', + IllegalBreak: 'Illegal break statement', + IllegalContinue: 'Illegal continue statement', + IllegalExportDeclaration: 'Unexpected token', + IllegalImportDeclaration: 'Unexpected token', + IllegalLanguageModeDirective: 'Illegal \'use strict\' directive in function with non-simple parameter list', + IllegalReturn: 'Illegal return statement', + InvalidEscapedReservedWord: 'Keyword must not contain escaped characters', + InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence', + InvalidLHSInAssignment: 'Invalid left-hand side in assignment', + InvalidLHSInForIn: 'Invalid left-hand side in for-in', + InvalidLHSInForLoop: 'Invalid left-hand side in for-loop', + InvalidModuleSpecifier: 'Unexpected token', + InvalidRegExp: 'Invalid regular expression', + LetInLexicalBinding: 'let is disallowed as a lexically bound name', + MissingFromClause: 'Unexpected token', + MultipleDefaultsInSwitch: 'More than one default clause in switch statement', + NewlineAfterThrow: 'Illegal newline after throw', + NoAsAfterImportNamespace: 'Unexpected token', + NoCatchOrFinally: 'Missing catch or finally after try', + ParameterAfterRestParameter: 'Rest parameter must be last formal parameter', + Redeclaration: '%0 \'%1\' has already been declared', + StaticPrototype: 'Classes may not have static property named prototype', + StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', + StrictDelete: 'Delete of an unqualified identifier in strict mode.', + StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block', + StrictFunctionName: 'Function name may not be eval or arguments in strict mode', + StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', + StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', + StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', + StrictModeWith: 'Strict mode code may not include a with statement', + StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', + StrictParamDupe: 'Strict mode function may not have duplicate parameter names', + StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', + StrictReservedWord: 'Use of future reserved word in strict mode', + StrictVarName: 'Variable name may not be eval or arguments in strict mode', + TemplateOctalLiteral: 'Octal literals are not allowed in template strings.', + UnexpectedEOS: 'Unexpected end of input', + UnexpectedIdentifier: 'Unexpected identifier', + UnexpectedNumber: 'Unexpected number', + UnexpectedReserved: 'Unexpected reserved word', + UnexpectedString: 'Unexpected string', + UnexpectedTemplate: 'Unexpected quasi %0', + UnexpectedToken: 'Unexpected token %0', + UnexpectedTokenIllegal: 'Unexpected token ILLEGAL', + UnknownLabel: 'Undefined label \'%0\'', + UnterminatedRegExp: 'Invalid regular expression: missing /' + }; + + +/***/ }, +/* 12 */ +/***/ function(module, exports, __nested_webpack_require_226595__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var assert_1 = __nested_webpack_require_226595__(9); + var character_1 = __nested_webpack_require_226595__(4); + var messages_1 = __nested_webpack_require_226595__(11); + function hexValue(ch) { + return '0123456789abcdef'.indexOf(ch.toLowerCase()); + } + function octalValue(ch) { + return '01234567'.indexOf(ch); + } + var Scanner = (function () { + function Scanner(code, handler) { + this.source = code; + this.errorHandler = handler; + this.trackComment = false; + this.isModule = false; + this.length = code.length; + this.index = 0; + this.lineNumber = (code.length > 0) ? 1 : 0; + this.lineStart = 0; + this.curlyStack = []; + } + Scanner.prototype.saveState = function () { + return { + index: this.index, + lineNumber: this.lineNumber, + lineStart: this.lineStart + }; + }; + Scanner.prototype.restoreState = function (state) { + this.index = state.index; + this.lineNumber = state.lineNumber; + this.lineStart = state.lineStart; + }; + Scanner.prototype.eof = function () { + return this.index >= this.length; + }; + Scanner.prototype.throwUnexpectedToken = function (message) { + if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; } + return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message); + }; + Scanner.prototype.tolerateUnexpectedToken = function (message) { + if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; } + this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message); + }; + // https://tc39.github.io/ecma262/#sec-comments + Scanner.prototype.skipSingleLineComment = function (offset) { + var comments = []; + var start, loc; + if (this.trackComment) { + comments = []; + start = this.index - offset; + loc = { + start: { + line: this.lineNumber, + column: this.index - this.lineStart - offset + }, + end: {} + }; + } + while (!this.eof()) { + var ch = this.source.charCodeAt(this.index); + ++this.index; + if (character_1.Character.isLineTerminator(ch)) { + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart - 1 + }; + var entry = { + multiLine: false, + slice: [start + offset, this.index - 1], + range: [start, this.index - 1], + loc: loc + }; + comments.push(entry); + } + if (ch === 13 && this.source.charCodeAt(this.index) === 10) { + ++this.index; + } + ++this.lineNumber; + this.lineStart = this.index; + return comments; + } + } + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart + }; + var entry = { + multiLine: false, + slice: [start + offset, this.index], + range: [start, this.index], + loc: loc + }; + comments.push(entry); + } + return comments; + }; + Scanner.prototype.skipMultiLineComment = function () { + var comments = []; + var start, loc; + if (this.trackComment) { + comments = []; + start = this.index - 2; + loc = { + start: { + line: this.lineNumber, + column: this.index - this.lineStart - 2 + }, + end: {} + }; + } + while (!this.eof()) { + var ch = this.source.charCodeAt(this.index); + if (character_1.Character.isLineTerminator(ch)) { + if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) { + ++this.index; + } + ++this.lineNumber; + ++this.index; + this.lineStart = this.index; + } + else if (ch === 0x2A) { + // Block comment ends with '*/'. + if (this.source.charCodeAt(this.index + 1) === 0x2F) { + this.index += 2; + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart + }; + var entry = { + multiLine: true, + slice: [start + 2, this.index - 2], + range: [start, this.index], + loc: loc + }; + comments.push(entry); + } + return comments; + } + ++this.index; + } + else { + ++this.index; + } + } + // Ran off the end of the file - the whole thing is a comment + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart + }; + var entry = { + multiLine: true, + slice: [start + 2, this.index], + range: [start, this.index], + loc: loc + }; + comments.push(entry); + } + this.tolerateUnexpectedToken(); + return comments; + }; + Scanner.prototype.scanComments = function () { + var comments; + if (this.trackComment) { + comments = []; + } + var start = (this.index === 0); + while (!this.eof()) { + var ch = this.source.charCodeAt(this.index); + if (character_1.Character.isWhiteSpace(ch)) { + ++this.index; + } + else if (character_1.Character.isLineTerminator(ch)) { + ++this.index; + if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) { + ++this.index; + } + ++this.lineNumber; + this.lineStart = this.index; + start = true; + } + else if (ch === 0x2F) { + ch = this.source.charCodeAt(this.index + 1); + if (ch === 0x2F) { + this.index += 2; + var comment = this.skipSingleLineComment(2); + if (this.trackComment) { + comments = comments.concat(comment); + } + start = true; + } + else if (ch === 0x2A) { + this.index += 2; + var comment = this.skipMultiLineComment(); + if (this.trackComment) { + comments = comments.concat(comment); + } + } + else { + break; + } + } + else if (start && ch === 0x2D) { + // U+003E is '>' + if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) { + // '-->' is a single-line comment + this.index += 3; + var comment = this.skipSingleLineComment(3); + if (this.trackComment) { + comments = comments.concat(comment); + } + } + else { + break; + } + } + else if (ch === 0x3C && !this.isModule) { + if (this.source.slice(this.index + 1, this.index + 4) === '!--') { + this.index += 4; // ` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + cwalk + + + + + + + + + + + + + diff --git a/deps/cwalk/cmake/CreateTestList.cmake b/deps/cwalk/cmake/CreateTestList.cmake new file mode 100644 index 00000000000..0ace14081ec --- /dev/null +++ b/deps/cwalk/cmake/CreateTestList.cmake @@ -0,0 +1,15 @@ +function(create_test_list list_name target) + set("TEST_LIST_TARGET_${list_name}" ${target} PARENT_SCOPE) +endfunction() + +function(write_test_file list_name file) + set("TEST_LIST_FILE_${list_name}" ${file} PARENT_SCOPE) + file(WRITE ${file} "#define UNIT_TESTS(XX) \\\n") + file(APPEND ${file} ${TEST_LIST_CONTENT_${list_name}}) + file(APPEND ${file} "\n") +endfunction() + +function(create_test list_name unit_name test_name) + set(TEST_LIST_CONTENT_${list_name} "${TEST_LIST_CONTENT_${list_name}} XX(${unit_name},${test_name}) \\\n" PARENT_SCOPE) + add_test(NAME "${unit_name}_${test_name}" COMMAND ${TEST_LIST_TARGET_${list_name}} ${unit_name} ${test_name}) +endfunction() diff --git a/deps/cwalk/cmake/CwalkConfig.cmake b/deps/cwalk/cmake/CwalkConfig.cmake new file mode 100644 index 00000000000..15ca644ec15 --- /dev/null +++ b/deps/cwalk/cmake/CwalkConfig.cmake @@ -0,0 +1 @@ +include("${CMAKE_CURRENT_LIST_DIR}/CwalkTargets.cmake") diff --git a/deps/cwalk/cmake/EnableWarnings.cmake b/deps/cwalk/cmake/EnableWarnings.cmake new file mode 100755 index 00000000000..bfce52fd933 --- /dev/null +++ b/deps/cwalk/cmake/EnableWarnings.cmake @@ -0,0 +1,19 @@ +# enable warnings +function(enable_warnings target) + if(MSVC) + target_compile_definitions(${target} PRIVATE _CRT_SECURE_NO_WARNINGS) + target_compile_options(${target} PRIVATE /W4) + target_compile_options(${target} PRIVATE /WX) + elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + target_compile_options(${target} PRIVATE -Werror) + target_compile_options(${target} PRIVATE -Wall) + target_compile_options(${target} PRIVATE -Wextra) + target_compile_options(${target} PRIVATE -Wpedantic) + target_compile_options(${target} PRIVATE -Wno-gnu-zero-variadic-macro-arguments) + elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + target_compile_options(${target} PRIVATE -Wall) + target_compile_options(${target} PRIVATE -Werror) + target_compile_options(${target} PRIVATE -Wextra) + target_compile_options(${target} PRIVATE -Wpedantic) + endif() +endfunction() \ No newline at end of file diff --git a/deps/cwalk/docs/_config.yml b/deps/cwalk/docs/_config.yml new file mode 100644 index 00000000000..88f7fa8d36d --- /dev/null +++ b/deps/cwalk/docs/_config.yml @@ -0,0 +1,6 @@ +defaults: + - + scope: + path: "" # an empty string here means all files in the project + values: + layout: "default" \ No newline at end of file diff --git a/deps/cwalk/docs/_layouts/default.html b/deps/cwalk/docs/_layouts/default.html new file mode 100644 index 00000000000..ea1803f0e57 --- /dev/null +++ b/deps/cwalk/docs/_layouts/default.html @@ -0,0 +1,42 @@ + + + + + {{ page.title }} - cwalk + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +

    {{ page.title }}

    + {{ content }} +
    +
    + +
    + find this repository on github +
    + diff --git a/deps/cwalk/docs/assets/css/default.css b/deps/cwalk/docs/assets/css/default.css new file mode 100644 index 00000000000..115880c15ae --- /dev/null +++ b/deps/cwalk/docs/assets/css/default.css @@ -0,0 +1,126 @@ +html, +body { + height: 100%; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + margin: auto; + padding: 20px; + background: #FAFAFA; + padding: 0; + display: flex; + flex-flow: column; +} + +header { + text-align: right; + margin-bottom: 20px; + padding: 20px 20px; + font-family: 'Ubuntu Mono'; + background: #55FF99; + color: #D5FFE6; + border-bottom: 10px solid #37C871; +} + +header .inner { + max-width: 800px; + margin: auto; +} + +header .logo { + float: left; + vertical-align: middle; + display: inline-block; + font-weight: bold; + font-size: 32pt; + padding: 0; + margin-left: 10px; + line-height: 50px; +} + +header nav { + line-height: 50px; +} + +header a { + padding: 10px; + text-decoration: none; + font-weight: bold; + font-size: 18pt; + overflow: auto; + color: #078e3d;; +} + +.main { + flex: 1; +} + +footer { + text-align: center; + margin-top: 50px; + padding: 40px 20px; + font-family: 'Ubuntu Mono'; + background: #49483e; + color: #e6db74; +} + + +a { + color: #37C871; +} + +h1, h2 { + font-family: 'Ubuntu Mono'; + padding-bottom: 5px; + border-bottom: 1px solid rgba(255,255,255,.2); +} + +.content { + color: #49483e; + padding-top: 20px; + max-width: 800px; + margin: auto; +} + +.highlight { + padding: 10px; + margin: 0; + overflow: auto; + white-space: pre-wrap; +} + +.highlighter-rouge { + background: rgba(0,0,0,0.1); +} + +table { + border-collapse: collapse; +} + +table td, +table th { + border: 1px solid #DDDDDD; + background: #ffffff; + padding: 5px 8px; +} + +table tr:nth-child(even) td { + background: #f8f9fb; +} + +@media (max-width: 1000px) { + header { + text-align: center; + } + + header .logo { + display: block; + float: none; + margin-bottom: 10px; + } + + .content { + padding: 0 20px; + } +} diff --git a/deps/cwalk/docs/assets/css/github.css b/deps/cwalk/docs/assets/css/github.css new file mode 100644 index 00000000000..daf76adee98 --- /dev/null +++ b/deps/cwalk/docs/assets/css/github.css @@ -0,0 +1,209 @@ +.highlight table td { padding: 5px; } +.highlight table pre { margin: 0; } +.highlight .cm { + color: #999988; + font-style: italic; +} +.highlight .cp { + color: #999999; + font-weight: bold; +} +.highlight .c1 { + color: #999988; + font-style: italic; +} +.highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; +} +.highlight .c, .highlight .cd { + color: #999988; + font-style: italic; +} +.highlight .err { + color: #a61717; + background-color: #e3d2d2; +} +.highlight .gd { + color: #000000; + background-color: #ffdddd; +} +.highlight .ge { + color: #000000; + font-style: italic; +} +.highlight .gr { + color: #aa0000; +} +.highlight .gh { + color: #999999; +} +.highlight .gi { + color: #000000; + background-color: #ddffdd; +} +.highlight .go { + color: #888888; +} +.highlight .gp { + color: #555555; +} +.highlight .gs { + font-weight: bold; +} +.highlight .gu { + color: #aaaaaa; +} +.highlight .gt { + color: #aa0000; +} +.highlight .kc { + color: #000000; + font-weight: bold; +} +.highlight .kd { + color: #000000; + font-weight: bold; +} +.highlight .kn { + color: #000000; + font-weight: bold; +} +.highlight .kp { + color: #000000; + font-weight: bold; +} +.highlight .kr { + color: #000000; + font-weight: bold; +} +.highlight .kt { + color: #445588; + font-weight: bold; +} +.highlight .k, .highlight .kv { + color: #000000; + font-weight: bold; +} +.highlight .mf { + color: #009999; +} +.highlight .mh { + color: #009999; +} +.highlight .il { + color: #009999; +} +.highlight .mi { + color: #009999; +} +.highlight .mo { + color: #009999; +} +.highlight .m, .highlight .mb, .highlight .mx { + color: #009999; +} +.highlight .sb { + color: #d14; +} +.highlight .sc { + color: #d14; +} +.highlight .sd { + color: #d14; +} +.highlight .s2 { + color: #d14; +} +.highlight .se { + color: #d14; +} +.highlight .sh { + color: #d14; +} +.highlight .si { + color: #d14; +} +.highlight .sx { + color: #d14; +} +.highlight .sr { + color: #009926; +} +.highlight .s1 { + color: #d14; +} +.highlight .ss { + color: #990073; +} +.highlight .s { + color: #d14; +} +.highlight .na { + color: #008080; +} +.highlight .bp { + color: #999999; +} +.highlight .nb { + color: #0086B3; +} +.highlight .nc { + color: #445588; + font-weight: bold; +} +.highlight .no { + color: #008080; +} +.highlight .nd { + color: #3c5d5d; + font-weight: bold; +} +.highlight .ni { + color: #800080; +} +.highlight .ne { + color: #990000; + font-weight: bold; +} +.highlight .nf { + color: #990000; + font-weight: bold; +} +.highlight .nl { + color: #990000; + font-weight: bold; +} +.highlight .nn { + color: #555555; +} +.highlight .nt { + color: #000080; +} +.highlight .vc { + color: #008080; +} +.highlight .vg { + color: #008080; +} +.highlight .vi { + color: #008080; +} +.highlight .nv { + color: #008080; +} +.highlight .ow { + color: #000000; + font-weight: bold; +} +.highlight .o { + color: #000000; + font-weight: bold; +} +.highlight .w { + color: #bbbbbb; +} +.highlight { + background-color: #f8f8f8; +} diff --git a/deps/cwalk/docs/assets/css/monakai.css b/deps/cwalk/docs/assets/css/monakai.css new file mode 100644 index 00000000000..854cfb85683 --- /dev/null +++ b/deps/cwalk/docs/assets/css/monakai.css @@ -0,0 +1,210 @@ +.highlight table td { padding: 5px; } +.highlight table pre { margin: 0; } +.highlight .c, .highlight .cd { + color: #75715e; + font-style: italic; +} +.highlight .cm { + color: #75715e; + font-style: italic; +} +.highlight .c1 { + color: #75715e; + font-style: italic; +} +.highlight .cp { + color: #75715e; + font-weight: bold; +} +.highlight .cs { + color: #75715e; + font-weight: bold; + font-style: italic; +} +.highlight .err { + color: #960050; + background-color: #1e0010; +} +.highlight .gi { + color: #ffffff; + background-color: #324932; +} +.highlight .gd { + color: #ffffff; + background-color: #493131; +} +.highlight .ge { + color: #000000; + font-style: italic; +} +.highlight .gr { + color: #aa0000; +} +.highlight .gt { + color: #aa0000; +} +.highlight .gh { + color: #999999; +} +.highlight .go { + color: #888888; +} +.highlight .gp { + color: #555555; +} +.highlight .gs { + font-weight: bold; +} +.highlight .gu { + color: #aaaaaa; +} +.highlight .k, .highlight .kv { + color: #66d9ef; + font-weight: bold; +} +.highlight .kc { + color: #66d9ef; + font-weight: bold; +} +.highlight .kd { + color: #66d9ef; + font-weight: bold; +} +.highlight .kp { + color: #66d9ef; + font-weight: bold; +} +.highlight .kr { + color: #66d9ef; + font-weight: bold; +} +.highlight .kt { + color: #66d9ef; + font-weight: bold; +} +.highlight .kn { + color: #f92672; + font-weight: bold; +} +.highlight .ow { + color: #f92672; + font-weight: bold; +} +.highlight .o { + color: #f92672; + font-weight: bold; +} +.highlight .mf { + color: #ae81ff; +} +.highlight .mh { + color: #ae81ff; +} +.highlight .il { + color: #ae81ff; +} +.highlight .mi { + color: #ae81ff; +} +.highlight .mo { + color: #ae81ff; +} +.highlight .m, .highlight .mb, .highlight .mx { + color: #ae81ff; +} +.highlight .se { + color: #ae81ff; +} +.highlight .sb { + color: #e6db74; +} +.highlight .sc { + color: #e6db74; +} +.highlight .sd { + color: #e6db74; +} +.highlight .s2 { + color: #e6db74; +} +.highlight .sh { + color: #e6db74; +} +.highlight .si { + color: #e6db74; +} +.highlight .sx { + color: #e6db74; +} +.highlight .sr { + color: #e6db74; +} +.highlight .s1 { + color: #e6db74; +} +.highlight .ss { + color: #e6db74; +} +.highlight .s { + color: #e6db74; +} +.highlight .na { + color: #a6e22e; +} +.highlight .nc { + color: #a6e22e; + font-weight: bold; +} +.highlight .nd { + color: #a6e22e; + font-weight: bold; +} +.highlight .ne { + color: #a6e22e; + font-weight: bold; +} +.highlight .nf { + color: #a6e22e; + font-weight: bold; +} +.highlight .no { + color: #66d9ef; +} +.highlight .bp { + color: #f8f8f2; +} +.highlight .nb { + color: #f8f8f2; +} +.highlight .ni { + color: #f8f8f2; +} +.highlight .nn { + color: #f8f8f2; +} +.highlight .vc { + color: #f8f8f2; +} +.highlight .vg { + color: #f8f8f2; +} +.highlight .vi { + color: #f8f8f2; +} +.highlight .nv { + color: #f8f8f2; +} +.highlight .w { + color: #f8f8f2; +} +.highlight .nl { + color: #f8f8f2; + font-weight: bold; +} +.highlight .nt { + color: #f92672; +} +.highlight { + color: #f8f8f2; + background-color: #49483e; +} diff --git a/deps/cwalk/docs/assets/css/trac.css b/deps/cwalk/docs/assets/css/trac.css new file mode 100644 index 00000000000..854cfb85683 --- /dev/null +++ b/deps/cwalk/docs/assets/css/trac.css @@ -0,0 +1,210 @@ +.highlight table td { padding: 5px; } +.highlight table pre { margin: 0; } +.highlight .c, .highlight .cd { + color: #75715e; + font-style: italic; +} +.highlight .cm { + color: #75715e; + font-style: italic; +} +.highlight .c1 { + color: #75715e; + font-style: italic; +} +.highlight .cp { + color: #75715e; + font-weight: bold; +} +.highlight .cs { + color: #75715e; + font-weight: bold; + font-style: italic; +} +.highlight .err { + color: #960050; + background-color: #1e0010; +} +.highlight .gi { + color: #ffffff; + background-color: #324932; +} +.highlight .gd { + color: #ffffff; + background-color: #493131; +} +.highlight .ge { + color: #000000; + font-style: italic; +} +.highlight .gr { + color: #aa0000; +} +.highlight .gt { + color: #aa0000; +} +.highlight .gh { + color: #999999; +} +.highlight .go { + color: #888888; +} +.highlight .gp { + color: #555555; +} +.highlight .gs { + font-weight: bold; +} +.highlight .gu { + color: #aaaaaa; +} +.highlight .k, .highlight .kv { + color: #66d9ef; + font-weight: bold; +} +.highlight .kc { + color: #66d9ef; + font-weight: bold; +} +.highlight .kd { + color: #66d9ef; + font-weight: bold; +} +.highlight .kp { + color: #66d9ef; + font-weight: bold; +} +.highlight .kr { + color: #66d9ef; + font-weight: bold; +} +.highlight .kt { + color: #66d9ef; + font-weight: bold; +} +.highlight .kn { + color: #f92672; + font-weight: bold; +} +.highlight .ow { + color: #f92672; + font-weight: bold; +} +.highlight .o { + color: #f92672; + font-weight: bold; +} +.highlight .mf { + color: #ae81ff; +} +.highlight .mh { + color: #ae81ff; +} +.highlight .il { + color: #ae81ff; +} +.highlight .mi { + color: #ae81ff; +} +.highlight .mo { + color: #ae81ff; +} +.highlight .m, .highlight .mb, .highlight .mx { + color: #ae81ff; +} +.highlight .se { + color: #ae81ff; +} +.highlight .sb { + color: #e6db74; +} +.highlight .sc { + color: #e6db74; +} +.highlight .sd { + color: #e6db74; +} +.highlight .s2 { + color: #e6db74; +} +.highlight .sh { + color: #e6db74; +} +.highlight .si { + color: #e6db74; +} +.highlight .sx { + color: #e6db74; +} +.highlight .sr { + color: #e6db74; +} +.highlight .s1 { + color: #e6db74; +} +.highlight .ss { + color: #e6db74; +} +.highlight .s { + color: #e6db74; +} +.highlight .na { + color: #a6e22e; +} +.highlight .nc { + color: #a6e22e; + font-weight: bold; +} +.highlight .nd { + color: #a6e22e; + font-weight: bold; +} +.highlight .ne { + color: #a6e22e; + font-weight: bold; +} +.highlight .nf { + color: #a6e22e; + font-weight: bold; +} +.highlight .no { + color: #66d9ef; +} +.highlight .bp { + color: #f8f8f2; +} +.highlight .nb { + color: #f8f8f2; +} +.highlight .ni { + color: #f8f8f2; +} +.highlight .nn { + color: #f8f8f2; +} +.highlight .vc { + color: #f8f8f2; +} +.highlight .vg { + color: #f8f8f2; +} +.highlight .vi { + color: #f8f8f2; +} +.highlight .nv { + color: #f8f8f2; +} +.highlight .w { + color: #f8f8f2; +} +.highlight .nl { + color: #f8f8f2; + font-weight: bold; +} +.highlight .nt { + color: #f92672; +} +.highlight { + color: #f8f8f2; + background-color: #49483e; +} diff --git a/deps/cwalk/docs/assets/css/vim.css b/deps/cwalk/docs/assets/css/vim.css new file mode 100644 index 00000000000..75e00ef23f3 --- /dev/null +++ b/deps/cwalk/docs/assets/css/vim.css @@ -0,0 +1 @@ +unknown theme: vim diff --git a/deps/cwalk/docs/assets/img/favicon.png b/deps/cwalk/docs/assets/img/favicon.png new file mode 100644 index 00000000000..b4d46f632a3 Binary files /dev/null and b/deps/cwalk/docs/assets/img/favicon.png differ diff --git a/deps/cwalk/docs/assets/img/favicon.svg b/deps/cwalk/docs/assets/img/favicon.svg new file mode 100644 index 00000000000..acf0df6a9c7 --- /dev/null +++ b/deps/cwalk/docs/assets/img/favicon.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + C + + diff --git a/deps/cwalk/docs/build.md b/deps/cwalk/docs/build.md new file mode 100644 index 00000000000..f703ad6c72d --- /dev/null +++ b/deps/cwalk/docs/build.md @@ -0,0 +1,49 @@ +--- +title: Building +description: A guide on how to build the cwalk path library for C/C++. +--- + +In order to build the source, you will have to download it. You can do so using git (or download it from [here](https://github.com/likle/cwalk/archive/stable.zip)). +```bash +git clone -b stable git@github.com:likle/cwalk.git +``` + +**Note**: The *stable* branch points to the latest stable version. You should +always use a stable version in production code. + +## Using Windows +Visual Studio 2017 is recommended, then you can just open the source using ``File -> Open -> CMake...``. You can use Visual Studio to compile the source and debug the code. Make sure you have the CMake and C/C++ features enabled. + +## Using Ubuntu +You will need [CMake](https://cmake.org/download/) and either gcc or clang installed. On Ubuntu you can use the following to compile **cwalk**: +```bash +sudo apt-get install build-essential cmake +mkdir cwalk/build +cd cwalk/build +cmake .. +make +``` + +## Using MacOS +You will need [CMake](https://cmake.org/download/) and either gcc or clang installed. On MacOS you can use the following to compile **cwalk**: +``` +brew install cmake gcc +mkdir cwalk/build +cd cwalk/build +cmake .. +make +``` +# Running Tests +After building **cwalk** you can run tests to ensure everything is fine. In order to do that, make sure that you are in the build folder and then execute the test program: + +```bash +./cwalktest +``` + +That's it! + +You can even specify which tests to execute by optionally specifying the category and test name: +```bash +# ./cwalktest [category] [test] +./cwalktest normalize mixed +``` diff --git a/deps/cwalk/docs/embed.md b/deps/cwalk/docs/embed.md new file mode 100644 index 00000000000..8f3ffb09ba7 --- /dev/null +++ b/deps/cwalk/docs/embed.md @@ -0,0 +1,47 @@ +--- +title: Embedding +description: A guide on how to embed the cwalk path library for C/C++. +--- + + +In order to embed **cwalk**, you will have to download it. +You can do so using git (or download it from [here](https://github.com/likle/cwalk/archive/stable.zip)). + +```bash +git clone -b stable git@github.com:likle/cwalk.git +``` +**Note**: The *stable* branch points to the latest stable version. You should +always use a stable version in production code. + +## Using CMake to embed cwalk +If you are using CMake it is fairly easy to embed **cwalk**. +This only requires two lines, you don't even have to specify the include directories. +The following example shows how to do so: +```cmake +# Some basics you will need in your cmake file. +cmake_minimum_required(VERSION 3.9.2) +project(example C) +add_executable(example_target main.c) + +# Replace your_path_to_cwalk with the path to your cwalk copy. +# This could be something like "${CMAKE_CURRENT_SOURCE_DIR}/lib/cwalk". +add_subdirectory(your_path_to_cwalk) + +# Replace example_target with the target name which requires cwalk. +# After this, there is no need to specify any include directories. +target_link_libraries(example_target cwalk) +``` + +After that, you should be able to use cwalk in your source code: +```c +#include +``` + +## Directly embed cwalk in your source +If you don't use CMake and would like to embed **cwalk** directly, you could +just add the two files ``src/cwalk.c`` and ``ìnclude/cwalk.h`` to your project. +The folder containing ``cwalk.h`` has to be in your include directories +([Visual Studio](https://docs.microsoft.com/en-us/cpp/ide/vcpp-directories-property-page?view=vs-2017), +[Eclipse](https://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.cdt.doc.user%2Freference%2Fcdt_u_prop_general_pns_inc.htm), +[gcc](https://www.rapidtables.com/code/linux/gcc/gcc-i.html), +[clang](https://clang.llvm.org/docs/ClangCommandLineReference.html#include-path-management)). \ No newline at end of file diff --git a/deps/cwalk/docs/index.md b/deps/cwalk/docs/index.md new file mode 100644 index 00000000000..0524756470c --- /dev/null +++ b/deps/cwalk/docs/index.md @@ -0,0 +1,33 @@ +--- +title: C/C++ Path Library - Cross-Platform +description: cwalk is a lightweight C/C++ Path Library which focuses on file path manipulations. Using cwalk you can easily do things like combine paths, resolve relative paths, create relative paths based on absolute paths, canonicalize paths or read extension information from paths. +--- + +## What is cwalk? +**cwalk** is a lightweight C/C++ library which focuses on file path manipulations. Using **cwalk** you can easily do things like combine paths, resolve relative paths, create relative paths based on absolute paths, canonicalize paths or read extension information from paths. + +## Example +Here is a simple example of one thing (normalization) cwalk can do for you. However, there are more features available. +```c +#include +#include +#include + +int main(int argc, char *argv[]) +{ + char result[FILENAME_MAX]; + + // The following function cleans up the input path and writes it + // to the result buffer. + cwk_path_normalize( "/var/log/weird/////path/.././..///", result, + sizeof(result)); + + printf("%s\n", result); + return EXIT_SUCCESS; +} +``` + +Output: +``` +/var/log +``` \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_change_basename.md b/deps/cwalk/docs/reference/cwk_path_change_basename.md new file mode 100644 index 00000000000..be8c93b3f7e --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_change_basename.md @@ -0,0 +1,69 @@ +--- +title: cwk_path_change_basename +description: Changes the basename of a file path. +--- + +_(since v1.2.0)_ +Changes the basename of a file path. + +## Description +```c +size_t cwk_path_change_basename(const char *path, const char *new_basename, + char *buffer, size_t buffer_size); +``` + +This function changes the basename of a file path. This function will not +write out more than the specified buffer can contain. However, the generated +string is always null-terminated - even if not the whole path is written out. +The function returns the total number of characters the complete buffer would +have, even if it was not written out completely. The path may be the same +memory address as the buffer. + +**Note:** This function does not normalize the resulting path. You can use +**[cwk_path_normalize]({{ site.baseurl }}{% link reference/cwk_path_normalize.md %})** +to do so. Separators before and after the submitted basename will be trimmed, +but not removed from the source path. The value may contain separators which +will introduce new segments. If the submitted path does not have any segments, +the basename will be appended as a new segment. + +## Parameters + * **path**: The original path which will be used for the modified path. + * **new_basename**: The new basename which will replace the old one. + * **buffer**: The buffer where the changed path will be written to. + * **buffer_size**: The size of the result buffer where the changed path is written to. + +## Return Value +Returns the size which the complete new path would have if it was not truncated. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + cwk_path_change_basename("C:\\test.txt", "another.txt", buffer, + sizeof(buffer)); + + printf("The new path: '%s'", buffer); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The new path: 'C:\another.txt' +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.2.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_change_extension.md b/deps/cwalk/docs/reference/cwk_path_change_extension.md new file mode 100644 index 00000000000..a95e4ec8536 --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_change_extension.md @@ -0,0 +1,71 @@ +--- +title: cwk_path_change_extension +description: Changes the extension of a file path. +--- + +_(since v1.2.0)_ +Changes the extension of a file path. + +## Description +```c +size_t cwk_path_change_extension(const char *path, const char *new_extension, + char *buffer, size_t buffer_size); +``` + +This function changes the extension of a file name. The function will append +an extension if the basename does not have an extension, or use the extension +as a basename if the path does not have a basename. This function will not +write out more than the specified buffer can contain. However, the generated +string is always null-terminated - even if not the whole path is written out. +The function returns the total number of characters the complete buffer would +have, even if it was not written out completely. The path may be the same +memory address as the buffer. + +**Note:** This function does not normalize the resulting path. You can use +**[cwk_path_normalize]({{ site.baseurl }}{% link reference/cwk_path_normalize.md %})** +to do so. + +**Note:** If the ``new_extension`` parameter starts with a dot, the first dot will +be ignored when the new extension is appended. + +## Parameters + * **path**: The path which will be used to make the change. + * **new_extension**: The extension which will be placed within the new path. + * **buffer**: The output buffer where the result will be written to. + * **buffer_size**: The size of the output buffer where the result will be written to. + +## Return Value +Returns the total size which the output would have if it was not truncated. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + cwk_path_change_extension("C:\\test.txt", "md", buffer, + sizeof(buffer)); + + printf("The new path: '%s'", buffer); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The new path: 'C:\test.md' +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.2.0** | The function is introduced. | diff --git a/deps/cwalk/docs/reference/cwk_path_change_root.md b/deps/cwalk/docs/reference/cwk_path_change_root.md new file mode 100644 index 00000000000..88af35d98c1 --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_change_root.md @@ -0,0 +1,69 @@ +--- +title: cwk_path_change_root +description: Changes the root of a path. +--- + +_(since v1.2.0)_ +Changes the root of a path. + +## Description +```c +size_t cwk_path_change_root(const char *path, const char *new_root, + char *buffer, size_t buffer_size); +``` + +This function changes the root of a path. It does not normalize the result. +The result will be written to a buffer, which might be truncated if the +buffer is not large enough to hold the full path. However, the truncated +result will always be null-terminated. The returned value is the amount of +characters which the resulting path would take if it was not truncated +(excluding the null-terminating character). + +**Note:** This function does not normalize the resulting path. You can use +**[cwk_path_normalize]({{ site.baseurl }}{% link reference/cwk_path_normalize.md %})** +to do so. The new root may contain separators which will introduce new segments. +If the submitted path does not have any root, the new root will be prepended to +the path. + +## Parameters + * **path**: The original path which will get a new root. + * **new_root**: The new root which will be placed in the path. + * **buffer**: The output buffer where the result is written to. + * **buffer_size**: The size of the output buffer where the result is written + to. + +## Return Value +Returns the total amount of characters of the new path. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + cwk_path_change_root("C:\\test.txt", "D:\\", buffer, + sizeof(buffer)); + + printf("The new path: '%s'", buffer); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The new path: 'D:\another.txt' +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.2.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_change_segment.md b/deps/cwalk/docs/reference/cwk_path_change_segment.md new file mode 100644 index 00000000000..1a126b64aa1 --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_change_segment.md @@ -0,0 +1,72 @@ +--- +title: cwk_path_change_segment +description: Changes the content of a segment. +--- + +_(since v1.2.0)_ +Changes the content of a segment. + +## Description +```c +size_t cwk_path_change_segment(struct cwk_segment *segment, const char *value, + char *buffer, size_t buffer_size); +``` + +This function overrides the content of a segment to the submitted value and +outputs the whole new path to the submitted buffer. The result might require +less or more space than before if the new value length differs from the +original length. The output is truncated if the new path is larger than the +submitted buffer size, but it is always null-terminated. The source of the +segment and the submitted buffer may be the same. + +**Note:** This function does not normalize the resulting path. You can use +**[cwk_path_normalize]({{ site.baseurl }}{% link reference/cwk_path_normalize.md %})** +to do so. Separators before and after the value will be trimmed. The value may +contain separators which will introduce new segments. + +## Parameters + * **segment**: The segment which will be modifier. + * **value**: The new content of the segment. + * **buffer**: The buffer where the modified path will be written to. + * **buffer_size**: The size of the output buffer. + +## Return Value +Returns the total size which would have been written if the output was not +truncated. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + const char *path; + char buffer[FILENAME_MAX]; + struct cwk_segment segment; + + path = "/this/cool/path/"; + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + cwk_path_change_segment(&segment, "other", buffer, sizeof(buffer)); + + printf("The new path: '%s'", buffer); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The new path: '/other/cool/path/' +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.2.0** | The function is introduced. | diff --git a/deps/cwalk/docs/reference/cwk_path_get_absolute.md b/deps/cwalk/docs/reference/cwk_path_get_absolute.md new file mode 100644 index 00000000000..ea5dbaa2bce --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_absolute.md @@ -0,0 +1,66 @@ +--- +title: cwk_path_get_absolute +description: Generates an absolute path based on a base. +--- + +_(since v1.0.0)_ +Generates an absolute path based on a base. + +## Description +```c +size_t cwk_path_get_absolute(const char *base, const char *path, char *buffer, + size_t buffer_size); +``` + +This function generates an absolute path based on a base path and another path. It is guaranteed to return an absolute path. If the second submitted path is absolute, it will override the base path. The result will be written to a buffer, which might be truncated if the buffer is not large enough to hold the full path. However, the truncated result will always be null-terminated. The returned value is the amount of characters which the resulting path would take if it was not truncated (excluding the null-terminating character). + +## Parameters + * **base**: The absolute base path on which the relative path will be applied. + * **path**: The relative path which will be applied on the base path. + * **buffer**: The buffer where the result will be written to. + * **buffer_size**: The size of the result buffer. + +## Return Value +Returns the total amount of characters of the new absolute path. + +## Outcomes + +| Base | Path | Result | +|----------------------|---------------------|-----------------------| +| ``/hello/there`` | ``../../../../../`` | ``/`` | +| ``/hello//../there`` | ``test//thing`` | ``/there/test/thing`` | +| ``hello/there`` | ``/test`` | ``/test`` | +| ``hello/there`` | ``test`` | ``/hello/there/test`` | +| ``/hello/there`` | ``/test`` | ``/test`` | +| ``/hello/there`` | ``..`` | ``/hello`` | + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + char buffer[FILENAME_MAX]; + + cwk_path_get_absolute("/hello/there", "./world", buffer, sizeof(buffer)); + printf("The absolute path is: %s", buffer); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The absolute path is: /hello/there/world +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.2.4** | Fix for relative base path fallback on windows. | +| **v1.2.3** | Fix for path generation when reusing buffers. | +| **v1.0.0** | The function is introduced. | diff --git a/deps/cwalk/docs/reference/cwk_path_get_basename.md b/deps/cwalk/docs/reference/cwk_path_get_basename.md new file mode 100644 index 00000000000..9c285990efc --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_basename.md @@ -0,0 +1,62 @@ +--- +title: cwk_path_get_basename +description: Gets the basename of a file path. +--- + +_(since v1.0.0)_ +Gets the basename of a file path. + +## Description +```c +void cwk_path_get_basename(const char *path, const char **basename, + size_t *length); +``` + +This function gets the basename of a file path. The basename is the last segment of a path. For instance, ``logs`` is the basename of the path ``/var/logs``. A pointer to the beginning of the basename will be returned through the basename parameter. This pointer will be positioned on the first letter after the separator. The length of the file path will be returned through the length parameter. The length will be set to zero and the basename to NULL if there is no basename available. + +## Parameters + * **path**: The path which will be inspected. + * **basename**: The output of the basename pointer. + * **length**: The output of the length of the basename. + +## Outcomes + +| Path | Basename | +|----------------------|---------------| +| ``/my/path.txt`` | ``path.txt`` | +| ``/my/path.txt/`` | ``path.txt`` | +| ``/my/path.txt////`` | ``path.txt`` | +| ``file_name`` | ``file_name`` | +| ``..`` | ``..`` | +| ``.`` | ``.`` | +| ``/`` | `` `` | +| ``C:\path\test.txt`` | ``test.txt`` | + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + const char *basename; + size_t length; + + cwk_path_get_basename("/my/path.txt", &basename, &length); + printf("The basename is: '%.*s'", length, basename); + + return EXIT_SUCCESS; +} +``` +Ouput: +``` +The basename is: 'path.txt' +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_get_dirname.md b/deps/cwalk/docs/reference/cwk_path_get_dirname.md new file mode 100644 index 00000000000..15db556951e --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_dirname.md @@ -0,0 +1,64 @@ +--- +title: cwk_path_get_dirname +description: Gets the dirname of a file path. +--- + +_(since v1.0.0)_ +Gets the dirname of a file path. + +## Description +```c +void cwk_path_get_dirname(const char *path, size_t *length); +``` + +This function determines the dirname of a file path and returns the length up to which character is considered to be part of it. The dirname is the part of the path up to the last segment. For instance, `/var/` is the dirname of `/var/logs`. If no dirname is found, the length will be set to zero. The beginning of the dirname is always equal to the submitted path pointer. + +## Parameters + * **path**: The path which will be inspected. + * **length**: The length of the dirname. + +## Outcomes + +| Path | Basename | +|------------------------|---------------| +| ``/my/path.txt`` | ``/my/`` | +| ``/one/two/three.txt`` | ``/one/two/`` | +| ``../one/two.txt`` | ``../one/`` | +| `` `` | `` `` | +| ``/my/path.txt/`` | ``/my/`` | +| ``/my/path.txt////`` | ``/my/`` | +| ``file_name`` | `` `` | +| ``..`` | `` `` | +| ``.`` | `` `` | +| ``/`` | `` `` | + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + const char *path; + size_t length; + + path = "/my/path.txt"; + cwk_path_get_dirname(path, &length); + printf("The dirname is: '%.*s'", length, path); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The dirname is: '/my/' +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_get_extension.md b/deps/cwalk/docs/reference/cwk_path_get_extension.md new file mode 100644 index 00000000000..c735126520c --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_extension.md @@ -0,0 +1,60 @@ +--- +title: cwk_path_get_extension +description: Gets the extension of a file path. +--- + +_(since v1.0.0)_ +Gets the extension of a file path. + +## Description +```c +bool cwk_path_get_extension(const char *path, const char **extension, size_t *length); +``` + +This function extracts the extension portion of a file path. A pointer to the beginning of the extension will be returned through the extension parameter if an extension is found and true is returned. This pointer will be positioned on the dot. The length of the extension name will be returned through the length parameter. If no extension is found both parameters won't be touched and false will be returned. + +## Parameters + * **path**: The path which will be inspected. + * **extension**: The output of the extension pointer. + * **length**: The output of the length of the extension. + +## Outcomes + +| Path | Result | +|----------------------------|------------| +| ``/my/path.txt`` | ``.txt`` | +| ``/my/path`` | `` `` | +| ``/my/.path`` | ``.path`` | +| ``/my/path.`` | ``.`` | +| ``/my/path.abc.txt.tests`` | ``.tests`` | + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + const char *path, *extension; + size_t length; + + path = "/my/path.txt"; + cwk_path_get_extension(path, &extension, &length); + printf("The extension is: '%.*s'", length, path); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The extension is: '.txt' +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_get_first_segment.md b/deps/cwalk/docs/reference/cwk_path_get_first_segment.md new file mode 100644 index 00000000000..03c90e905d9 --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_first_segment.md @@ -0,0 +1,56 @@ +--- +title: cwk_path_get_first_segment +description: Gets the first segment of a path. +--- + +_(since v1.0.0)_ +Gets the first segment of a path. + +## Description +```c +bool cwk_path_get_first_segment(const char *path, struct cwk_segment *segment); +``` + +## Description +This function finds the first segment of a path. The position of the segment is set to the first character after the separator, and the length counts all characters until the next separator (excluding the separator). + +## Parameters + * **path**: The path which will be inspected. + * **segment**: The segment which will be extracted. + +## Return Value +Returns ``true`` if there is a segment or ``false`` if there is none. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + struct cwk_segment segment; + + if(!cwk_path_get_first_segment("/my/path.txt", &segment)) { + printf("Path doesn't have any segments."); + } + + printf("Segment length is '%zu'.\n", segment.size); + printf("The segment is '%.*s'.", (int)segment.size, segment.begin); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +Segment length is '2'. +The segment is 'my'. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | diff --git a/deps/cwalk/docs/reference/cwk_path_get_last_segment.md b/deps/cwalk/docs/reference/cwk_path_get_last_segment.md new file mode 100644 index 00000000000..0f27e57eebf --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_last_segment.md @@ -0,0 +1,55 @@ +--- +title: cwk_path_get_last_segment +description: Gets the last segment of the path. +--- + +_(since v1.0.0)_ +Gets the last segment of the path. + +## Description +```c +bool cwk_path_get_last_segment(const char *path, struct cwk_segment *segment); +``` + +This function gets the last segment of a path. This function may return false if the path doesn't contain any segments, in which case the submitted segment parameter is not modified. The position of the segment is set to the first character after the separator, and the length counts all characters until the end of the path (excluding the separator). + +## Parameters + * **path**: The path which will be inspected. + * **segment**: The segment which will be extracted. + +## Return Value +Returns ``true`` if there is a segment or ``false`` if there is none. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + struct cwk_segment segment; + + if(!cwk_path_get_last_segment("/my/test/path.txt", &segment)) { + printf("Path doesn't have any segments."); + } + + printf("Segment length is '%zu'.\n", segment.size); + printf("The segment is '%.*s'.", (int)segment.size, segment.begin); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +Segment length is '8'. +The segment is 'path.txt'. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | diff --git a/deps/cwalk/docs/reference/cwk_path_get_next_segment.md b/deps/cwalk/docs/reference/cwk_path_get_next_segment.md new file mode 100644 index 00000000000..392ea273325 --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_next_segment.md @@ -0,0 +1,58 @@ +--- +title: cwk_path_get_next_segment +description: Advances to the next segment. +--- + +_(since v1.0.0)_ +Advances to the next segment. + +## Description +```c +bool cwk_path_get_next_segment(struct cwk_segment *segment); +``` + +This function advances the current segment to the next segment. If there are no more segments left, the submitted segment structure will stay unchanged and false is returned. The segment should be either initialized using **[cwk_path_get_first_segment]({{ site.baseurl }}{% link reference/cwk_path_get_first_segment.md %})** or **[cwk_path_get_last_segment]({{ site.baseurl }}{% link reference/cwk_path_get_last_segment.md %})**. + +## Parameters + * **segment**: The current segment which will be advanced to the next one. + +## Return Value +Returns ``true`` if another segment was found or ``false`` otherwise. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + struct cwk_segment segment; + + if(!cwk_path_get_first_segment("/my/funny/test/path.txt", &segment)) { + printf("Path doesn't have any segments."); + return EXIT_FAILURE; + } + + do { + printf("Current segment is '%.*s'.\n", (int)segment.size, segment.begin); + } while(cwk_path_get_next_segment(&segment)); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +Current segment is 'my'. +Current segment is 'funny'. +Current segment is 'test'. +Current segment is 'path.txt'. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | diff --git a/deps/cwalk/docs/reference/cwk_path_get_previous_segment.md b/deps/cwalk/docs/reference/cwk_path_get_previous_segment.md new file mode 100644 index 00000000000..0b1f6fd0c60 --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_previous_segment.md @@ -0,0 +1,59 @@ +--- +title: cwk_path_get_previous_segment +description: Moves to the previous segment. +--- + +_(since v1.0.0)_ +Moves to the previous segment. + +## Description +```c +bool cwk_path_get_previous_segment(struct cwk_segment *segment); +``` + +This function moves the current segment to the previous segment. If the current segment is the first one, the submitted segment structure will stay unchanged and false is returned. The segment should be either initialized using **[cwk_path_get_first_segment]({{ site.baseurl }}{% link reference/cwk_path_get_first_segment.md %})** or **[cwk_path_get_last_segment]({{ site.baseurl }}{% link reference/cwk_path_get_last_segment.md %})**. + +## Parameters + * **segment**: The current segment which will be moved to the previous one. + +## Return Value +Returns ``true`` if there is a segment before this one or ``false`` otherwise. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + struct cwk_segment segment; + + if(!cwk_path_get_last_segment("/my/funny/test/path.txt", &segment)) { + printf("Path doesn't have any segments.\n"); + return EXIT_FAILURE; + } + + do { + printf("Current segment is '%.*s'.\n", (int)segment.size, segment.begin); + } while(cwk_path_get_previous_segment(&segment)); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +Current segment is 'path.txt'. +Current segment is 'test'. +Current segment is 'funny'. +Current segment is 'my'. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.2.4** | Bugfix for single char segments. | +| **v1.0.0** | The function is introduced. | diff --git a/deps/cwalk/docs/reference/cwk_path_get_relative.md b/deps/cwalk/docs/reference/cwk_path_get_relative.md new file mode 100644 index 00000000000..f9ccb5643c4 --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_relative.md @@ -0,0 +1,71 @@ +--- +title: cwk_path_get_relative +description: Generates a relative path based on a base. +--- + +_(since v1.0.0)_ +Generates a relative path based on a base. + +## Description +```c +size_t cwk_path_get_relative(const char *base_directory, const char *path, + char *buffer, size_t buffer_size); +``` + +This function generates a relative path based on a base path and another path. It determines how to get to the submitted path, starting from the base directory. The result will be written to a buffer, which might be truncated if the buffer is not large enough to hold the full path. However, the truncated result will always be null-terminated. The returned value is the amount of characters which the resulting path would take if it was not truncated (excluding the null-terminating character). + +## Parameters + * **base_directory**: The base path from which the relative path will start. + * **path**: The target path where the relative path will point to. + * **buffer**: The buffer where the result will be written to. + * **buffer_size**: The size of the result buffer. + +## Return Value +Returns the total amount of characters of the full path. + +## Outcomes + +| Style | Base | Path | Result | +|---------|--------------------------|--------------------------|-----------------| +| UNIX | ``/../../`` | ``/../../`` | ``.`` | +| UNIX | ``/path/same`` | ``/path/not_same/ho/..`` | ``../not_same`` | +| UNIX | ``/path/not_same/ho/..`` | ``/path/same`` | ``../same`` | +| UNIX | ``/path/same`` | ``/path/same/ho/..`` | ``.`` | +| UNIX | ``/path/same/ho/..`` | ``/path/same`` | ``.`` | +| UNIX | ``/path/same`` | ``/path/same`` | ``.`` | +| UNIX | ``/path/long/one`` | ``/path/long/one/two`` | ``two`` | +| UNIX | ``/path/long/one/two`` | ``/path/long/one`` | ``..`` | +| UNIX | ``./this/is/path_one`` | ``./this/is/path_two`` | ``../path_two`` | +| UNIX | ``/this/is/path_one`` | ``/this/is/path_two`` | ``../path_two`` | +| WINDOWS | ``C:/path/same`` | ``D:/path/same`` | `` `` | + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + char buffer[FILENAME_MAX]; + + cwk_path_get_relative("/hello/there/", "/hello/world", buffer, sizeof(buffer)); + printf("The relative path is: %s", buffer); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The relative path is: ../world +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.2.5** | Fixed calls with path without segments. | +| **v1.2.5** | Fixed calls with unequal roots in paths. | +| **v1.0.0** | The function is introduced. | diff --git a/deps/cwalk/docs/reference/cwk_path_get_root.md b/deps/cwalk/docs/reference/cwk_path_get_root.md new file mode 100644 index 00000000000..f98c76faeef --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_root.md @@ -0,0 +1,72 @@ +--- +title: cwk_path_get_root +description: Determines the root of a path. +--- + +_(since v1.0.0)_ +Determines the root of a path. + +## Description +```c +void cwk_path_get_root(const char *path, size_t *length); +``` +This function determines the root of a path by finding it's length. The root comes before the first segment of the path. For example, ``C:\`` is the root of ``C:\folder\file.txt``. It always starts at the submitted path. If the path has no root, the length will be set to zero. + +## Parameters + * **path**: The path which will be inspected. + * **length**: The output of the root length. + +## Outcomes + +| Style | Path | Root | +|---------|--------------------------|----------------------| +| UNIX | ``/test/`` | ``/`` | +| UNIX | ``test.txt`` | `` `` | +| UNIX | ``C:\test.txt`` | `` `` | +| UNIX | ``\folder\`` | `` `` | +| WINDOWS | ``/test.txt`` | ``/`` | +| WINDOWS | ``\test.txt`` | ``\`` | +| WINDOWS | ``C:\test.txt`` | ``C:\`` | +| WINDOWS | ``\\server\folder\data`` | ``\\server\folder\`` | +| WINDOWS | ``\\.\folder\data`` | ``\\.\`` | +| WINDOWS | ``\\?\folder\data`` | ``\\?\`` | +| WINDOWS | ``C:test.txt`` | ``C:`` | +| WINDOWS | ``..\hello\world.txt`` | `` `` | + +### Note +The style is automatically chosen during compile time, which is +UNIX for macOS and linux and WINDOWS for windows. You can change the style +using [cwk_path_set_style]({{ site.baseurl }}{% link reference/cwk_path_set_style.md %}). + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + const char *path; + size_t length; + + path = "/my/path.txt"; + cwk_path_get_root(path, &length); + printf("The root is: '%.*s'", length, path); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The root is: '/' +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.1.0** | The UNC path root now includes the shared folder name. | +| **v1.1.0** | Fixed false root detection on relative windows paths. | +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_get_segment_type.md b/deps/cwalk/docs/reference/cwk_path_get_segment_type.md new file mode 100644 index 00000000000..ebced5ad81e --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_segment_type.md @@ -0,0 +1,55 @@ +--- +title: cwk_path_get_segment_type +description: Gets the type of the submitted path segment. +--- + +_(since v1.0.0)_ +Gets the type of the submitted path segment. + +## Description +```c +enum cwk_segment_type cwk_path_get_segment_type(const struct cwk_segment *segment); +``` + +This function inspects the contents of the segment and determines the type of it. Currently, there are three types ``CWK_NORMAL``, ``CWK_CURRENT`` and ``CWK_BACK``. A ``CWK_NORMAL`` segment is a normal folder or file entry. A ``CWK_CURRENT`` is a "./" and a ``CWK_BACK`` a "../" segment. + +## Parameters + * **segment**: The segment which will be inspected. + +## Return Value +Returns the type of the segment. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + struct cwk_segment segment; + + if(!cwk_path_get_first_segment("/../funny/test/path.txt", &segment)) { + printf("Path doesn't have any segments."); + return EXIT_FAILURE; + } + + if(cwk_path_get_segment_type(&segment) == CWK_BACK) { + printf("The segment type is CWK_BACK."); + } + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The segment type is CWK_BACK. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_get_style.md b/deps/cwalk/docs/reference/cwk_path_get_style.md new file mode 100644 index 00000000000..12c3c2dedc4 --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_get_style.md @@ -0,0 +1,51 @@ +--- +title: cwk_path_get_style +description: Gets the path style configuration.. +--- + +_(since v1.0.0)_ +Gets the path style configuration.. + +## Description +```c +enum cwk_path_style cwk_path_get_style(void); +``` + +## Description +This function gets the style configuration which is currently used for the paths. This configuration determines how paths are parsed and generated. + + * ``CWK_STYLE_WINDOWS``: Use backslashes as a separator and volume for the root. + * ``CWK_STYLE_UNIX``: Use slashes as a separator and a slash for the root. + +## Return Value +Returns the current path style configuration. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + if(cwk_path_get_style() == CWK_STYLE_WINDOWS) { + printf("It's the WINDOWS style."); + } else { + printf("It's the UNIX style."); + } + + return EXIT_SUCCESS; +} +``` + +Example Ouput: +``` +It's the UNIX style. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_guess_style.md b/deps/cwalk/docs/reference/cwk_path_guess_style.md new file mode 100644 index 00000000000..f93b0e843ae --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_guess_style.md @@ -0,0 +1,78 @@ +--- +title: cwk_path_guess_style +description: Guesses the path style. +--- + +_(since v1.2.0)_ +Guesses the path style. + +## Description +```c +enum cwk_path_style cwk_path_guess_style(const char *path); +``` + +This function guesses the path style based on a submitted path-string. The guessing will look at the root and the type of slashes contained in the path and return the style which is more likely used in the path. +The algorithm checks the following: + 1. If the root is longer than 1 character -> ``CWK_STYLE_WINDOWS`` + 1. If the first separator is a backslash -> ``CWK_STYLE_WINDOWS`` + 1. If the first separator is a slash -> ``CWK_STYLE_UNIX`` + 1. If the last segment starts with a dot -> ``CWK_STYLE_UNIX`` + 1. If the last segment contains a dot -> ``CWK_STYLE_WINDOWS`` + 1. If nothing was found to determine the style -> ``CWK_STYLE_UNIX`` + +## Parameters + * **path**: The path which will be inspected. + +## Return Value +Returns the style which is most likely used for the path. + +## Outcomes + +| Path | Result | +|-----------------------------|-----------------------| +| ``C:\\test`` | ``CWK_STYLE_WINDOWS`` | +| ``C:/test`` | ``CWK_STYLE_WINDOWS`` | +| ``C:test`` | ``CWK_STYLE_WINDOWS`` | +| ``C:/.test`` | ``CWK_STYLE_WINDOWS`` | +| ``C:/folder/.test`` | ``CWK_STYLE_WINDOWS`` | +| ``\directory\other`` | ``CWK_STYLE_WINDOWS`` | +| ``\directory\.other`` | ``CWK_STYLE_WINDOWS`` | +| ``myfile.txt`` | ``CWK_STYLE_WINDOWS`` | +| ``/directory`` | ``CWK_STYLE_UNIX`` | +| ``/directory/other`` | ``CWK_STYLE_UNIX`` | +| ``/directory/other.txt`` | ``CWK_STYLE_UNIX`` | +| ``.my_hidden_file`` | ``CWK_STYLE_UNIX`` | +| ``.my_hidden_file.txt`` | ``CWK_STYLE_UNIX`` | +| ``/a/directory/myfile.txt`` | ``CWK_STYLE_UNIX`` | +| ``myfile`` | ``CWK_STYLE_UNIX`` | + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + if (cwk_path_guess_style("C:\\myfile") == CWK_STYLE_UNIX) { + printf("UNIX."); + } else { + printf("WINDOWS."); + } + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +WINDOWS. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.2.1** | Fixed crash on call with empty string. | +| **v1.2.0** | The function is introduced. | diff --git a/deps/cwalk/docs/reference/cwk_path_has_extension.md b/deps/cwalk/docs/reference/cwk_path_has_extension.md new file mode 100644 index 00000000000..6b8237d715b --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_has_extension.md @@ -0,0 +1,60 @@ +--- +title: cwk_path_has_extension +description: Determines whether the file path has an extension. +--- + +_(since v1.0.0)_ +Determines whether the file path has an extension. + +## Description +```c +bool cwk_path_has_extension(const char *path); +``` + +This function determines whether the submitted file path has an extension. This will evaluate to true if the last segment of the path contains a dot. In order to read more information about the extension see [[cwk_path_get_extension]]. + +## Parameters + * **path**: The path which will be inspected. + +## Return Value +Returns ``true`` if the path has an extension or ``false`` otherwise. + +## Outcomes + +| Path | Result | +|----------------------------|------------| +| ``/my/path.txt`` | ``true`` | +| ``/my/path`` | ``false`` | +| ``/my/.path`` | ``true`` | +| ``/my/path.`` | ``true`` | +| ``/my/path.abc.txt.tests`` | ``true`` | + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + if (cwk_path_has_extension("/my/path.txt")) { + printf("yes."); + } else { + printf("no."); + } + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +yes. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_intersection.md b/deps/cwalk/docs/reference/cwk_path_intersection.md new file mode 100644 index 00000000000..007e5f94e09 --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_intersection.md @@ -0,0 +1,69 @@ +--- +title: cwk_path_get_intersection +description: Finds common portions in two paths. +--- + +_(since v1.0.0)_ +Finds common portions in two paths. + +## Signature +```c +size_t cwk_path_get_intersection(const char *path_base, const char *path_other); +``` + +## Description +This function finds common portions in two paths and returns the number characters from the beginning of the base path which are equal to the other path. + +## Parameters + * **path_base**: The base path which will be compared with the other path. + * **path_other**: The other path which will compared with the base path. + +## Return Value +Returns the number of characters which are common in the base path. + +## Outcomes + +| Style | Base | Other | Ret. | Result | +|-------------|--------------------------|--------------------------|--------|----------------------| +| ``UNIX`` | ``/test/abc/../foo/bar`` | ``/test/foo/har`` | 16 | ``/test/abc/../foo`` | +| ``UNIX`` | ``/test/foo/har`` | ``/test/abc/../foo/bar`` | 9 | ``/test/foo`` | +| ``UNIX`` | ``/test/abc.txt`` | ``test/abc.txt`` | 0 | `` `` | +| ``UNIX`` | ``/`` | `` `` | 0 | `` `` | +| ``UNIX`` | ``/this///is/a//test`` | ``/this//is/a///file`` | 12 | ``/this///is/a`` | +| ``UNIX`` | ``/this/is/a/test`` | ``/this/is/a/`` | 10 | ``/this/is/a`` | +| ``UNIX`` | ``/this/is/a/test`` | ``/this/is/a`` | 10 | ``/this/is/a`` | +| ``UNIX`` | ``/this/is/a/test`` | ``/this/is/a/string`` | 10 | ``/this/is/a`` | +| ``WINDOWS`` | ``C:/abc/test.txt`` | ``C:/`` | 3 | ``C:/`` | +| ``WINDOWS`` | ``C:/abc/test.txt`` | ``C:/def/test.txt`` | 3 | ``C:/`` | +| ``WINDOWS`` | ``C:/test/abc.txt`` | ``D:/test/abc.txt`` | 0 | `` `` | + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + const char *path; + size_t length; + + path = "/this/is/a/test"; + length = cwk_path_get_intersection(path, "/this/is/a/string") + printf("The common portion is: '%.*s'", length, path); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The common portion is: '/this/is/a' +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_is_absolute.md b/deps/cwalk/docs/reference/cwk_path_is_absolute.md new file mode 100644 index 00000000000..34ce520cafd --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_is_absolute.md @@ -0,0 +1,66 @@ +--- +title: cwk_path_is_absolute +description: Determine whether the path is absolute or not. +--- + +_(since v1.0.0)_ +Determine whether the path is absolute or not. + +## Description +```c +bool cwk_path_is_absolute(const char *path); +``` +This function checks whether the path is an absolute (fully qualified) path or not. A path is considered to be absolute if the root ends with a separator. + +## Parameters + * **path**: The path which will be checked. + +## Return Value +Returns ``true`` if the path is absolute or ``false`` otherwise. + +## Outcomes + +| Style | Path | Result | +|---------|--------------------------|-----------| +| UNIX | ``/test/`` | ``true`` | +| UNIX | ``test.txt`` | ``false`` | +| UNIX | ``C:\test.txt`` | ``false`` | +| UNIX | ``\folder\`` | ``false`` | +| WINDOWS | ``/test.txt`` | ``true`` | +| WINDOWS | ``\test.txt`` | ``true`` | +| WINDOWS | ``C:\test.txt`` | ``true`` | +| WINDOWS | ``\\server\folder\data`` | ``true`` | +| WINDOWS | ``\\.\folder\data`` | ``true`` | +| WINDOWS | ``\\?\folder\data`` | ``true`` | +| WINDOWS | ``C:test.txt`` | ``false`` | +| WINDOWS | ``..\hello\world.txt`` | ``false`` | + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + if(cwk_path_is_absolute("/my/path.txt")) { + printf("The root is absolute."); + } else { + printf("The root is relative."); + } + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The root is absolute. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_is_relative.md b/deps/cwalk/docs/reference/cwk_path_is_relative.md new file mode 100644 index 00000000000..11574deeb07 --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_is_relative.md @@ -0,0 +1,67 @@ +--- +title: cwk_path_is_relative +description: Determine whether the path is relative or not. +--- + +_(since v1.0.0)_ +Determine whether the path is relative or not. + +## Description +```c +bool cwk_path_is_relative(const char *path); +``` + +This function checks whether the path is a relative path or not. A path is considered to be relative if the root does not end with a separator. + +## Parameters + * **path**: The path which will be checked. + +## Return Value +Returns ``true`` if the path is relative or ``false`` otherwise. + +## Outcomes + +| Style | Path | Result | +|---------|--------------------------|-----------| +| UNIX | ``/test/`` | ``false`` | +| UNIX | ``test.txt`` | ``true`` | +| UNIX | ``C:\test.txt`` | ``true`` | +| UNIX | ``\folder\`` | ``true`` | +| WINDOWS | ``/test.txt`` | ``false`` | +| WINDOWS | ``\test.txt`` | ``false`` | +| WINDOWS | ``C:\test.txt`` | ``false`` | +| WINDOWS | ``\\server\folder\data`` | ``false`` | +| WINDOWS | ``\\.\folder\data`` | ``false`` | +| WINDOWS | ``\\?\folder\data`` | ``false`` | +| WINDOWS | ``C:test.txt`` | ``true`` | +| WINDOWS | ``..\hello\world.txt`` | ``true`` | + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + if(cwk_path_is_relative("my/path.txt")) { + printf("The root is absolute."); + } else { + printf("The root is relative."); + } + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The root is relative. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_join.md b/deps/cwalk/docs/reference/cwk_path_join.md new file mode 100644 index 00000000000..52f4077b2fc --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_join.md @@ -0,0 +1,77 @@ +--- +title: cwk_path_join +description: Joins two paths together. +--- + +_(since v1.0.0)_ +Joins two paths together. + +## Description +```c +size_t cwk_path_join(const char *path_a, const char *path_b, char *buffer, + size_t buffer_size); +``` + +This function generates a new path by combining the two submitted paths. It will remove double separators, and unlike [cwk_path_get_absolute]({{ site.baseurl }}{% link reference/cwk_path_get_absolute.md %}) it permits the use of two relative paths to combine. The result will be written to a buffer, which might be truncated if the buffer is not large enough to hold the full path. However, the truncated result will always be null-terminated. The returned value is the amount of characters which the resulting path would take if it was not truncated (excluding the null-terminating character). + +## Parameters + * **path_a**: The first path which comes first. + * **path_b**: The second path which comes after the first. + * **buffer**: The buffer where the result will be written to. + * **buffer_size**: The size of the result buffer. + +## Return Value +Returns the total amount of characters of the full, combined path. + +## Outcomes + +| Style | Path A | Path B | Result | +|---------|-----------------------|-------------------------|----------------------------------------| +| UNIX | ``hello/there`` | ``../world`` | ``hello/world`` | +| UNIX | ``/first`` | ``/second`` | ``/first/second`` | +| UNIX | ``hello`` | ``..`` | ``.`` | +| UNIX | ``hello/there`` | ``..`` | ``hello`` | +| UNIX | ``hello`` | ``there`` | ``hello/there`` | +| WINDOWS | ``this\`` | ``C:\..\..\is\a\test\`` | ``is\a\test`` | +| WINDOWS | ``C:\this\path`` | ``C:\is\a\test\`` | ``C:\this\path\C:\is\a\test`` | +| WINDOWS | ``C:\this\path`` | ``C:\..\is\a\test\`` | ``C:\this\path\is\a\test`` | +| WINDOWS | ``\\s1\unc\path`` | ``\\s2\unc\pa`` | ``\\s1\unc\pa\s2\unc\path`` | + +### Style +The style is automatically chosen during compile time, which is +UNIX for macOS and linux and WINDOWS for windows. You can change the style +using [cwk_path_join]({{ site.baseurl }}{% link reference/cwk_path_join.md %}). + +### Result +The **path_b** parameter will always be treated as a relative path, so even if +a driver letter is submitted on a windows style path, it will be treated as a +folder. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + char buffer[FILENAME_MAX]; + + cwk_path_join("hello/there", "../world", buffer, sizeof(buffer)); + printf("The combined path is: %s", buffer); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The combined path is: hello/world +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | diff --git a/deps/cwalk/docs/reference/cwk_path_join_multiple.md b/deps/cwalk/docs/reference/cwk_path_join_multiple.md new file mode 100644 index 00000000000..3d5c8a731ce --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_join_multiple.md @@ -0,0 +1,58 @@ +--- +title: cwk_path_join_multiple +description: Joins multiple paths together. +--- + +_(since v1.1.0)_ +Joins multiple paths together. + +## Description +```c +size_t cwk_path_join_multiple(const char **paths, char *buffer, + size_t buffer_size); +``` +This function generates a new path by joining multiple paths together. It will remove double separators, and unlike [cwk_path_get_absolute]({{ site.baseurl }}{% link reference/cwk_path_get_absolute.md %}) it permits the use of multiple relative paths to combine. The last path of the submitted string array must be set to NULL. The result will be written to a buffer, which might be truncated if the buffer is not large enough to hold the full path. However, the truncated result will always be null-terminated. The returned value is the amount of characters which the resulting path would take if it was not truncated (excluding the null-terminating character). + +## Parameters + * **paths**: An array of paths which will be joined. + * **buffer**: The buffer where the result will be written to. + * **buffer_size**: The size of the result buffer. + +## Return Value +Returns the total amount of characters of the full, combined path. + +## Outcomes +See [cwk_path_join]({{ site.baseurl }}{% link reference/cwk_path_join.md %}) for examples how paths are joined together. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + char buffer[FILENAME_MAX]; + char paths[3]; + + paths[0] = "hello/there"; + paths[1] = "../world"; + paths[2] = NULL; + cwk_path_join_multiple(paths, buffer, sizeof(buffer)); + printf("The combined path is: %s", buffer); + + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The combined path is: hello/world +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.1.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_normalize.md b/deps/cwalk/docs/reference/cwk_path_normalize.md new file mode 100644 index 00000000000..0828850640b --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_normalize.md @@ -0,0 +1,73 @@ +--- +title: cwk_path_normalize +description: Creates a normalized version of the path. +--- + +_(since v1.0.0)_ +Creates a normalized version of the path. + +## Description +```c +size_t cwk_path_normalize(const char *path, char *buffer, size_t buffer_size); +``` + +This function creates a normalized version of the path within the specified buffer. This function will not write out more than the specified buffer can contain. However, the generated string is always null-terminated - even if not the whole path is written out. The function returns the total number of characters the complete buffer would have, even if it was not written out completely. The path may be the same memory address as the buffer. + +The following will be true for the normalized path: + * "../" will be resolved. + * "./" will be removed. + * double separators will be fixed with a single separator. + * separator suffixes will be removed. + +## Parameters + * **path**: The path which will be normalized. + * **buffer**: The buffer where the new path is written to. + * **buffer_size**: The size of the buffer. + +## Return Value +The size which the complete normalized path has if it was not truncated. + +## Outcomes + +| Input | Output | +|-------------------------------------|------------------| +| `/var` | `/var` | +| `/var/logs/test/../../` | `/var` | +| `/var/logs/test/../../../../../../` | `/` | +| `rel/../../` | `..` | +| `/var////logs//test/` | `/var/logs/test` | +| `/var/././././` | `/var` | +| `/var/./logs/.//test/..//..//////` | `/var` | + + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + char result[FILENAME_MAX]; + + // The following function cleans up the input path and writes it + // to the result buffer. + cwk_path_normalize("/var/log/weird/////path/.././..///", result, + sizeof(result)); + + printf("%s\n", result); + return EXIT_SUCCESS; +} +``` + +Output: +``` +/var/log +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/cwk_path_set_style.md b/deps/cwalk/docs/reference/cwk_path_set_style.md new file mode 100644 index 00000000000..ff09b5eec7f --- /dev/null +++ b/deps/cwalk/docs/reference/cwk_path_set_style.md @@ -0,0 +1,50 @@ +--- +title: cwk_path_set_style +description: Configures which path style is used. +--- + +_(since v1.0.0)_ +Configures which path style is used. + +## Description +```c +void cwk_path_set_style(enum cwk_path_style style); +``` + +## Description +This function configures which path style is used. A call to this function is only required if a non-native behaviour is required. The style defaults to ``CWK_STYLE_WINDOWS`` on windows builds and to ``CWK_STYLE_UNIX`` otherwise. The following styles are currently supported. + + * ``CWK_STYLE_WINDOWS``: Use backslashes as a separator and volume for the root. + * ``CWK_STYLE_UNIX``: Use slashes as a separator and a slash for the root. + +## Parameters + * **style**: The style which will be used from now on. + +## Example +```c +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("C:\\test.txt", &length); + printf("The root length is '%zu'.", length); + return EXIT_SUCCESS; +} +``` + +Ouput: +``` +The root length is '3'. +``` + +## Changelog + +| Version | Description | +|------------|--------------------------------------------------------| +| **v1.0.0** | The function is introduced. | \ No newline at end of file diff --git a/deps/cwalk/docs/reference/index.md b/deps/cwalk/docs/reference/index.md new file mode 100644 index 00000000000..2efbb82f736 --- /dev/null +++ b/deps/cwalk/docs/reference/index.md @@ -0,0 +1,99 @@ +--- +title: Reference +description: A complete reference of the cwalk path library for C/C++. +--- + +## Basics +These are some basic, helpful functions available in the library. The basename is the last portion of the path which determines the name of the file or folder which is being pointed to. For instance, the path ``/var/log/test.txt`` would have the basename ``test.txt``. The dirname is the opposite - the path up to the basename. In that example the dirname would be ``/var/log``. + +### Functions +* **[cwk_path_get_basename]({{ site.baseurl }}{% link reference/cwk_path_get_basename.md %})** +Gets the basename of a file path. + +* **[cwk_path_change_basename]({{ site.baseurl }}{% link reference/cwk_path_change_basename.md %})** +Changes the basename of a file path. + +* **[cwk_path_get_dirname]({{ site.baseurl }}{% link reference/cwk_path_get_dirname.md %})** +Gets the dirname of a file path. + +* **[cwk_path_get_root]({{ site.baseurl }}{% link reference/cwk_path_get_root.md %})** +Determines the root of a path. + +* **[cwk_path_change_root]({{ site.baseurl }}{% link reference/cwk_path_change_root.md %})** +Changes the root of a path. + +* **[cwk_path_is_absolute]({{ site.baseurl }}{% link reference/cwk_path_is_absolute.md %})** +Determine whether the path is absolute or not. + +* **[cwk_path_is_relative]({{ site.baseurl }}{% link reference/cwk_path_is_relative.md %})** +Determine whether the path is relative or not. + +* **[cwk_path_join]({{ site.baseurl }}{% link reference/cwk_path_join.md %})** +Joins two paths together. + +* **[cwk_path_join_multiple]({{ site.baseurl }}{% link reference/cwk_path_join_multiple.md %})** +Joins multiple paths together. + +* **[cwk_path_normalize]({{ site.baseurl }}{% link reference/cwk_path_normalize.md %})** +Creates a normalized version of the path. + +* **[cwk_path_intersection]({{ site.baseurl }}{% link reference/cwk_path_intersection.md %})** +Finds common portions in two paths. + +## Navigation +One might specify paths containing relative components ``../``. These functions help to resolve or create relative paths based on a base path. + +### Functions +* **[cwk_path_get_absolute]({{ site.baseurl }}{% link reference/cwk_path_get_absolute.md %})** +Generates an absolute path based on a base. + +* **[cwk_path_get_relative]({{ site.baseurl }}{% link reference/cwk_path_get_relative.md %})** +Generates a relative path based on a base. + +## Extensions +Extensions are the portion of a path which come after a `.`. For instance, the file extension of the ``/var/log/test.txt`` would be ``.txt`` - which indicates that the content is text. + +### Functions +* **[cwk_path_get_extension]({{ site.baseurl }}{% link reference/cwk_path_get_extension.md %})** +Gets the extension of a file path. + +* **[cwk_path_has_extension]({{ site.baseurl }}{% link reference/cwk_path_has_extension.md %})** +Determines whether the file path has an extension. + +* **[cwk_path_change_extension]({{ site.baseurl }}{% link reference/cwk_path_change_extension.md %})** +Changes the extension of a file path. + +## Segments +A segment represents a single component of a path. For instance, on linux a path might look like this ``/var/log/``, which consists of two segments ``var`` and ``log``. + +### Functions +* **[cwk_path_get_first_segment]({{ site.baseurl }}{% link reference/cwk_path_get_first_segment.md %})** +Gets the first segment of a path. + +* **[cwk_path_get_last_segment]({{ site.baseurl }}{% link reference/cwk_path_get_last_segment.md %})** +Gets the last segment of the path. + +* **[cwk_path_get_next_segment]({{ site.baseurl }}{% link reference/cwk_path_get_next_segment.md %})** +Advances to the next segment. + +* **[cwk_path_get_previous_segment]({{ site.baseurl }}{% link reference/cwk_path_get_previous_segment.md %})** +Moves to the previous segment. + +* **[cwk_path_get_segment_type]({{ site.baseurl }}{% link reference/cwk_path_get_segment_type.md %})** +Gets the type of the submitted path segment. + +* **[cwk_path_change_segment]({{ site.baseurl }}{% link reference/cwk_path_change_segment.md %})** +Changes the content of a segment. + +## Style +The path style describes how paths are generated and parsed. **cwalk** currently supports two path styles, ``CWK_STYLE_WINDOWS`` and ``CWK_STYLE_UNIX``. + +### Functions +* **[cwk_path_guess_style]({{ site.baseurl }}{% link reference/cwk_path_guess_style.md %})** +Guesses the path style. + +* **[cwk_path_set_style]({{ site.baseurl }}{% link reference/cwk_path_set_style.md %})** +Configures which path style is used. + +* **[cwk_path_get_style]({{ site.baseurl }}{% link reference/cwk_path_get_style.md %})** +Gets the path style configuration. \ No newline at end of file diff --git a/deps/cwalk/include/cwalk.h b/deps/cwalk/include/cwalk.h new file mode 100644 index 00000000000..d3fb241dab4 --- /dev/null +++ b/deps/cwalk/include/cwalk.h @@ -0,0 +1,497 @@ +#pragma once + +#ifndef CWK_LIBRARY_H +#define CWK_LIBRARY_H + +#include +#include + +#if defined(_WIN32) || defined(__CYGWIN__) +#define CWK_EXPORT __declspec(dllexport) +#define CWK_IMPORT __declspec(dllimport) +#elif __GNUC__ >= 4 +#define CWK_EXPORT __attribute__((visibility("default"))) +#define CWK_IMPORT __attribute__((visibility("default"))) +#else +#define CWK_EXPORT +#define CWK_IMPORT +#endif + +#if defined(CWK_SHARED) +#if defined(CWK_EXPORTS) +#define CWK_PUBLIC CWK_EXPORT +#else +#define CWK_PUBLIC CWK_IMPORT +#endif +#else +#define CWK_PUBLIC +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** + * A segment represents a single component of a path. For instance, on linux a + * path might look like this "/var/log/", which consists of two segments "var" + * and "log". + */ +struct cwk_segment +{ + const char *path; + const char *segments; + const char *begin; + const char *end; + size_t size; +}; + +/** + * The segment type can be used to identify whether a segment is a special + * segment or not. + * + * CWK_NORMAL - normal folder or file segment + * CWK_CURRENT - "./" current folder segment + * CWK_BACK - "../" relative back navigation segment + */ +enum cwk_segment_type +{ + CWK_NORMAL, + CWK_CURRENT, + CWK_BACK +}; + +/** + * @brief Determines the style which is used for the path parsing and + * generation. + */ +enum cwk_path_style +{ + CWK_STYLE_WINDOWS, + CWK_STYLE_UNIX +}; + +/** + * @brief Generates an absolute path based on a base. + * + * This function generates an absolute path based on a base path and another + * path. It is guaranteed to return an absolute path. If the second submitted + * path is absolute, it will override the base path. The result will be + * written to a buffer, which might be truncated if the buffer is not large + * enough to hold the full path. However, the truncated result will always be + * null-terminated. The returned value is the amount of characters which the + * resulting path would take if it was not truncated (excluding the + * null-terminating character). + * + * @param base The absolute base path on which the relative path will be + * applied. + * @param path The relative path which will be applied on the base path. + * @param buffer The buffer where the result will be written to. + * @param buffer_size The size of the result buffer. + * @return Returns the total amount of characters of the new absolute path. + */ +CWK_PUBLIC size_t cwk_path_get_absolute(const char *base, const char *path, + char *buffer, size_t buffer_size); + +/** + * @brief Generates a relative path based on a base. + * + * This function generates a relative path based on a base path and another + * path. It determines how to get to the submitted path, starting from the + * base directory. The result will be written to a buffer, which might be + * truncated if the buffer is not large enough to hold the full path. However, + * the truncated result will always be null-terminated. The returned value is + * the amount of characters which the resulting path would take if it was not + * truncated (excluding the null-terminating character). + * + * @param base_directory The base path from which the relative path will + * start. + * @param path The target path where the relative path will point to. + * @param buffer The buffer where the result will be written to. + * @param buffer_size The size of the result buffer. + * @return Returns the total amount of characters of the full path. + */ +CWK_PUBLIC size_t cwk_path_get_relative(const char *base_directory, + const char *path, char *buffer, size_t buffer_size); + +/** + * @brief Joins two paths together. + * + * This function generates a new path by combining the two submitted paths. It + * will remove double separators, and unlike cwk_path_get_absolute it permits + * the use of two relative paths to combine. The result will be written to a + * buffer, which might be truncated if the buffer is not large enough to hold + * the full path. However, the truncated result will always be + * null-terminated. The returned value is the amount of characters which the + * resulting path would take if it was not truncated (excluding the + * null-terminating character). + * + * @param path_a The first path which comes first. + * @param path_b The second path which comes after the first. + * @param buffer The buffer where the result will be written to. + * @param buffer_size The size of the result buffer. + * @return Returns the total amount of characters of the full, combined path. + */ +CWK_PUBLIC size_t cwk_path_join(const char *path_a, const char *path_b, + char *buffer, size_t buffer_size); + +/** + * @brief Joins multiple paths together. + * + * This function generates a new path by joining multiple paths together. It + * will remove double separators, and unlike cwk_path_get_absolute it permits + * the use of multiple relative paths to combine. The last path of the + * submitted string array must be set to NULL. The result will be written to a + * buffer, which might be truncated if the buffer is not large enough to hold + * the full path. However, the truncated result will always be + * null-terminated. The returned value is the amount of characters which the + * resulting path would take if it was not truncated (excluding the + * null-terminating character). + * + * @param paths An array of paths which will be joined. + * @param buffer The buffer where the result will be written to. + * @param buffer_size The size of the result buffer. + * @return Returns the total amount of characters of the full, combined path. + */ +CWK_PUBLIC size_t cwk_path_join_multiple(const char **paths, char *buffer, + size_t buffer_size); + +/** + * @brief Determines the root of a path. + * + * This function determines the root of a path by finding it's length. The + * root always starts at the submitted path. If the path has no root, the + * length will be set to zero. + * + * @param path The path which will be inspected. + * @param length The output of the root length. + */ +CWK_PUBLIC void cwk_path_get_root(const char *path, size_t *length); + +/** + * @brief Changes the root of a path. + * + * This function changes the root of a path. It does not normalize the result. + * The result will be written to a buffer, which might be truncated if the + * buffer is not large enough to hold the full path. However, the truncated + * result will always be null-terminated. The returned value is the amount of + * characters which the resulting path would take if it was not truncated + * (excluding the null-terminating character). + * + * @param path The original path which will get a new root. + * @param new_root The new root which will be placed in the path. + * @param buffer The output buffer where the result is written to. + * @param buffer_size The size of the output buffer where the result is + * written to. + * @return Returns the total amount of characters of the new path. + */ +CWK_PUBLIC size_t cwk_path_change_root(const char *path, const char *new_root, + char *buffer, size_t buffer_size); + +/** + * @brief Determine whether the path is absolute or not. + * + * This function checks whether the path is an absolute path or not. A path is + * considered to be absolute if the root ends with a separator. + * + * @param path The path which will be checked. + * @return Returns true if the path is absolute or false otherwise. + */ +CWK_PUBLIC bool cwk_path_is_absolute(const char *path); + +/** + * @brief Determine whether the path is relative or not. + * + * This function checks whether the path is a relative path or not. A path is + * considered to be relative if the root does not end with a separator. + * + * @param path The path which will be checked. + * @return Returns true if the path is relative or false otherwise. + */ +CWK_PUBLIC bool cwk_path_is_relative(const char *path); + +/** + * @brief Gets the basename of a file path. + * + * This function gets the basename of a file path. A pointer to the beginning + * of the basename will be returned through the basename parameter. This + * pointer will be positioned on the first letter after the separator. The + * length of the file path will be returned through the length parameter. The + * length will be set to zero and the basename to NULL if there is no basename + * available. + * + * @param path The path which will be inspected. + * @param basename The output of the basename pointer. + * @param length The output of the length of the basename. + */ +CWK_PUBLIC void cwk_path_get_basename(const char *path, const char **basename, + size_t *length); + +/** + * @brief Changes the basename of a file path. + * + * This function changes the basename of a file path. This function will not + * write out more than the specified buffer can contain. However, the + * generated string is always null-terminated - even if not the whole path is + * written out. The function returns the total number of characters the + * complete buffer would have, even if it was not written out completely. The + * path may be the same memory address as the buffer. + * + * @param path The original path which will be used for the modified path. + * @param new_basename The new basename which will replace the old one. + * @param buffer The buffer where the changed path will be written to. + * @param buffer_size The size of the result buffer where the changed path is + * written to. + * @return Returns the size which the complete new path would have if it was + * not truncated. + */ +CWK_PUBLIC size_t cwk_path_change_basename(const char *path, + const char *new_basename, char *buffer, size_t buffer_size); + +/** + * @brief Gets the dirname of a file path. + * + * This function determines the dirname of a file path and returns the length + * up to which character is considered to be part of it. If no dirname is + * found, the length will be set to zero. The beginning of the dirname is + * always equal to the submitted path pointer. + * + * @param path The path which will be inspected. + * @param length The length of the dirname. + */ +CWK_PUBLIC void cwk_path_get_dirname(const char *path, size_t *length); + +/** + * @brief Gets the extension of a file path. + * + * This function extracts the extension portion of a file path. A pointer to + * the beginning of the extension will be returned through the extension + * parameter if an extension is found and true is returned. This pointer will + * be positioned on the dot. The length of the extension name will be returned + * through the length parameter. If no extension is found both parameters + * won't be touched and false will be returned. + * + * @param path The path which will be inspected. + * @param extension The output of the extension pointer. + * @param length The output of the length of the extension. + * @return Returns true if an extension is found or false otherwise. + */ +CWK_PUBLIC bool cwk_path_get_extension(const char *path, const char **extension, + size_t *length); + +/** + * @brief Determines whether the file path has an extension. + * + * This function determines whether the submitted file path has an extension. + * This will evaluate to true if the last segment of the path contains a dot. + * + * @param path The path which will be inspected. + * @return Returns true if the path has an extension or false otherwise. + */ +CWK_PUBLIC bool cwk_path_has_extension(const char *path); + +/** + * @brief Changes the extension of a file path. + * + * This function changes the extension of a file name. The function will + * append an extension if the basename does not have an extension, or use the + * extension as a basename if the path does not have a basename. This function + * will not write out more than the specified buffer can contain. However, the + * generated string is always null-terminated - even if not the whole path is + * written out. The function returns the total number of characters the + * complete buffer would have, even if it was not written out completely. The + * path may be the same memory address as the buffer. + * + * @param path The path which will be used to make the change. + * @param new_extension The extension which will be placed within the new + * path. + * @param buffer The output buffer where the result will be written to. + * @param buffer_size The size of the output buffer where the result will be + * written to. + * @return Returns the total size which the output would have if it was not + * truncated. + */ +CWK_PUBLIC size_t cwk_path_change_extension(const char *path, + const char *new_extension, char *buffer, size_t buffer_size); + +/** + * @brief Creates a normalized version of the path. + * + * This function creates a normalized version of the path within the specified + * buffer. This function will not write out more than the specified buffer can + * contain. However, the generated string is always null-terminated - even if + * not the whole path is written out. The function returns the total number of + * characters the complete buffer would have, even if it was not written out + * completely. The path may be the same memory address as the buffer. + * + * The following will be true for the normalized path: + * 1) "../" will be resolved. + * 2) "./" will be removed. + * 3) double separators will be fixed with a single separator. + * 4) separator suffixes will be removed. + * + * @param path The path which will be normalized. + * @param buffer The buffer where the new path is written to. + * @param buffer_size The size of the buffer. + * @return The size which the complete normalized path has if it was not + * truncated. + */ +CWK_PUBLIC size_t cwk_path_normalize(const char *path, char *buffer, + size_t buffer_size); + +/** + * @brief Finds common portions in two paths. + * + * This function finds common portions in two paths and returns the number + * characters from the beginning of the base path which are equal to the other + * path. + * + * @param path_base The base path which will be compared with the other path. + * @param path_other The other path which will compared with the base path. + * @return Returns the number of characters which are common in the base path. + */ +CWK_PUBLIC size_t cwk_path_get_intersection(const char *path_base, + const char *path_other); + +/** + * @brief Gets the first segment of a path. + * + * This function finds the first segment of a path. The position of the + * segment is set to the first character after the separator, and the length + * counts all characters until the next separator (excluding the separator). + * + * @param path The path which will be inspected. + * @param segment The segment which will be extracted. + * @return Returns true if there is a segment or false if there is none. + */ +CWK_PUBLIC bool cwk_path_get_first_segment(const char *path, + struct cwk_segment *segment); + +/** + * @brief Gets the last segment of the path. + * + * This function gets the last segment of a path. This function may return + * false if the path doesn't contain any segments, in which case the submitted + * segment parameter is not modified. The position of the segment is set to + * the first character after the separator, and the length counts all + * characters until the end of the path (excluding the separator). + * + * @param path The path which will be inspected. + * @param segment The segment which will be extracted. + * @return Returns true if there is a segment or false if there is none. + */ +CWK_PUBLIC bool cwk_path_get_last_segment(const char *path, + struct cwk_segment *segment); + +/** + * @brief Advances to the next segment. + * + * This function advances the current segment to the next segment. If there + * are no more segments left, the submitted segment structure will stay + * unchanged and false is returned. + * + * @param segment The current segment which will be advanced to the next one. + * @return Returns true if another segment was found or false otherwise. + */ +CWK_PUBLIC bool cwk_path_get_next_segment(struct cwk_segment *segment); + +/** + * @brief Moves to the previous segment. + * + * This function moves the current segment to the previous segment. If the + * current segment is the first one, the submitted segment structure will stay + * unchanged and false is returned. + * + * @param segment The current segment which will be moved to the previous one. + * @return Returns true if there is a segment before this one or false + * otherwise. + */ +CWK_PUBLIC bool cwk_path_get_previous_segment(struct cwk_segment *segment); + +/** + * @brief Gets the type of the submitted path segment. + * + * This function inspects the contents of the segment and determines the type + * of it. Currently, there are three types CWK_NORMAL, CWK_CURRENT and + * CWK_BACK. A CWK_NORMAL segment is a normal folder or file entry. A + * CWK_CURRENT is a "./" and a CWK_BACK a "../" segment. + * + * @param segment The segment which will be inspected. + * @return Returns the type of the segment. + */ +CWK_PUBLIC enum cwk_segment_type cwk_path_get_segment_type( + const struct cwk_segment *segment); + +/** + * @brief Changes the content of a segment. + * + * This function overrides the content of a segment to the submitted value and + * outputs the whole new path to the submitted buffer. The result might + * require less or more space than before if the new value length differs from + * the original length. The output is truncated if the new path is larger than + * the submitted buffer size, but it is always null-terminated. The source of + * the segment and the submitted buffer may be the same. + * + * @param segment The segment which will be modifier. + * @param value The new content of the segment. + * @param buffer The buffer where the modified path will be written to. + * @param buffer_size The size of the output buffer. + * @return Returns the total size which would have been written if the output + * was not truncated. + */ +CWK_PUBLIC size_t cwk_path_change_segment(struct cwk_segment *segment, + const char *value, char *buffer, size_t buffer_size); + +/** + * @brief Checks whether the submitted pointer points to a separator. + * + * This function simply checks whether the submitted pointer points to a + * separator, which has to be null-terminated (but not necessarily after the + * separator). The function will return true if it is a separator, or false + * otherwise. + * + * @param symbol A pointer to a string. + * @return Returns true if it is a separator, or false otherwise. + */ +CWK_PUBLIC bool cwk_path_is_separator(const char *str); + +/** + * @brief Guesses the path style. + * + * This function guesses the path style based on a submitted path-string. The + * guessing will look at the root and the type of slashes contained in the + * path and return the style which is more likely used in the path. + * + * @param path The path which will be inspected. + * @return Returns the style which is most likely used for the path. + */ +CWK_PUBLIC enum cwk_path_style cwk_path_guess_style(const char *path); + +/** + * @brief Configures which path style is used. + * + * This function configures which path style is used. The following styles are + * currently supported. + * + * CWK_STYLE_WINDOWS: Use backslashes as a separator and volume for the root. + * CWK_STYLE_UNIX: Use slashes as a separator and a slash for the root. + * + * @param style The style which will be used from now on. + */ +CWK_PUBLIC void cwk_path_set_style(enum cwk_path_style style); + +/** + * @brief Gets the path style configuration. + * + * This function gets the style configuration which is currently used for the + * paths. This configuration determines how paths are parsed and generated. + * + * @return Returns the current path style configuration. + */ +CWK_PUBLIC enum cwk_path_style cwk_path_get_style(void); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/deps/cwalk/meson.build b/deps/cwalk/meson.build new file mode 100644 index 00000000000..ccf7d6f924b --- /dev/null +++ b/deps/cwalk/meson.build @@ -0,0 +1,15 @@ +project('cwalk', 'c', + license: 'MIT', + meson_version: '>= 0.45.1' +) + +cwalk_inc = include_directories('include') + +cwalk = library('cwalk', 'src/cwalk.c', + install: true, + include_directories: cwalk_inc +) + +install_headers('include/cwalk.h') + +cwalk_dep = declare_dependency(include_directories: 'include', link_with: cwalk) diff --git a/deps/cwalk/src/cwalk.c b/deps/cwalk/src/cwalk.c new file mode 100755 index 00000000000..2f0cbdd20b4 --- /dev/null +++ b/deps/cwalk/src/cwalk.c @@ -0,0 +1,1437 @@ +#include +#include +#include +#include +#include +#include + +/** + * We try to default to a different path style depending on the operating + * system. So this should detect whether we should use windows or unix paths. + */ +#if defined(WIN32) || defined(_WIN32) || \ + defined(__WIN32) && !defined(__CYGWIN__) +static enum cwk_path_style path_style = CWK_STYLE_WINDOWS; +#else +static enum cwk_path_style path_style = CWK_STYLE_UNIX; +#endif + +/** + * This is a list of separators used in different styles. Windows can read + * multiple separators, but it generally outputs just a backslash. The output + * will always use the first character for the output. + */ +static const char *separators[] = { + "\\/", // CWK_STYLE_WINDOWS + "/" // CWK_STYLE_UNIX +}; + +/** + * A joined path represents multiple path strings which are concatenated, but + * not (necessarily) stored in contiguous memory. The joined path allows to + * iterate over the segments as if it was one piece of path. + */ +struct cwk_segment_joined +{ + struct cwk_segment segment; + const char **paths; + size_t path_index; +}; + +static size_t cwk_path_output_sized(char *buffer, size_t buffer_size, + size_t position, const char *str, size_t length) +{ + size_t amount_written; + + // First we determine the amount which we can write to the buffer. There are + // three cases. In the first case we have enough to store the whole string in + // it. In the second one we can only store a part of it, and in the third we + // have no space left. + if (buffer_size > position + length) { + amount_written = length; + } else if (buffer_size > position) { + amount_written = buffer_size - position; + } else { + amount_written = 0; + } + + // If we actually want to write out something we will do that here. We will + // always append a '\0', this way we are guaranteed to have a valid string at + // all times. + if (amount_written > 0) { + memmove(&buffer[position], str, amount_written); + } + + // Return the theoretical length which would have been written when everything + // would have fit in the buffer. + return length; +} + +static size_t cwk_path_output_current(char *buffer, size_t buffer_size, + size_t position) +{ + // We output a "current" directory, which is a single character. This + // character is currently not style dependant. + return cwk_path_output_sized(buffer, buffer_size, position, ".", 1); +} + +static size_t cwk_path_output_back(char *buffer, size_t buffer_size, + size_t position) +{ + // We output a "back" directory, which ahs two characters. This + // character is currently not style dependant. + return cwk_path_output_sized(buffer, buffer_size, position, "..", 2); +} + +static size_t cwk_path_output_separator(char *buffer, size_t buffer_size, + size_t position) +{ + // We output a separator, which is a single character. + return cwk_path_output_sized(buffer, buffer_size, position, + separators[path_style], 1); +} + +static size_t cwk_path_output_dot(char *buffer, size_t buffer_size, + size_t position) +{ + // We output a dot, which is a single character. This is used for extensions. + return cwk_path_output_sized(buffer, buffer_size, position, ".", 1); +} + +static size_t cwk_path_output(char *buffer, size_t buffer_size, size_t position, + const char *str) +{ + size_t length; + + // This just does a sized output internally, but first measuring the + // null-terminated string. + length = strlen(str); + return cwk_path_output_sized(buffer, buffer_size, position, str, length); +} + +static void cwk_path_terminate_output(char *buffer, size_t buffer_size, + size_t pos) +{ + if (buffer_size > 0) { + if (pos >= buffer_size) { + buffer[buffer_size - 1] = '\0'; + } else { + buffer[pos] = '\0'; + } + } +} + +static bool cwk_path_is_string_equal(const char *first, const char *second, + size_t n) +{ + // If the path style is UNIX, we will compare case sensitively. This can be + // done easily using strncmp. + if (path_style == CWK_STYLE_UNIX) { + return strncmp(first, second, n) == 0; + } + + // However, if this is windows we will have to compare case insensitively. + // Since there is no standard method to do that we will have to do it on our + // own. + while (*first && *second && n > 0) { + // We can consider the string to be not equal if the two lowercase + // characters are not equal. + if (tolower(*first++) != tolower(*second++)) { + return false; + } + + --n; + } + + // We can consider the string to be equal if we either reached n == 0 or both + // cursors point to a null character. + return n == 0 || (*first == '\0' && *second == '\0'); +} + +static const char *cwk_path_find_next_stop(const char *c) +{ + // We just move forward until we find a '\0' or a separator, which will be our + // next "stop". + while (*c != '\0' && !cwk_path_is_separator(c)) { + ++c; + } + + // Return the pointer of the next stop. + return c; +} + +static const char *cwk_path_find_previous_stop(const char *begin, const char *c) +{ + // We just move back until we find a separator or reach the beginning of the + // path, which will be our previous "stop". + while (c > begin && !cwk_path_is_separator(c)) { + --c; + } + + // Return the pointer to the previous stop. We have to return the first + // character after the separator, not on the separator itself. + if (cwk_path_is_separator(c)) { + return c + 1; + } else { + return c; + } +} + +static bool cwk_path_get_first_segment_without_root(const char *path, + const char *segments, struct cwk_segment *segment) +{ + // Let's remember the path. We will move the path pointer afterwards, that's + // why this has to be done first. + segment->path = path; + segment->segments = segments; + segment->begin = segments; + segment->end = segments; + segment->size = 0; + + // Now let's check whether this is an empty string. An empty string has no + // segment it could use. + if (*segments == '\0') { + return false; + } + + // If the string starts with separators, we will jump over those. If there is + // only a slash and a '\0' after it, we can't determine the first segment + // since there is none. + while (cwk_path_is_separator(segments)) { + ++segments; + if (*segments == '\0') { + return false; + } + } + + // So this is the beginning of our segment. + segment->begin = segments; + + // Now let's determine the end of the segment, which we do by moving the path + // pointer further until we find a separator. + segments = cwk_path_find_next_stop(segments); + + // And finally, calculate the size of the segment by subtracting the position + // from the end. + segment->size = (size_t)(segments - segment->begin); + segment->end = segments; + + // Tell the caller that we found a segment. + return true; +} + +static bool cwk_path_get_last_segment_without_root(const char *path, + struct cwk_segment *segment) +{ + // Now this is fairly similar to the normal algorithm, however, it will assume + // that there is no root in the path. So we grab the first segment at this + // position, assuming there is no root. + if (!cwk_path_get_first_segment_without_root(path, path, segment)) { + return false; + } + + // Now we find our last segment. The segment struct of the caller + // will contain the last segment, since the function we call here will not + // change the segment struct when it reaches the end. + while (cwk_path_get_next_segment(segment)) { + // We just loop until there is no other segment left. + } + + return true; +} + +static bool cwk_path_get_first_segment_joined(const char **paths, + struct cwk_segment_joined *sj) +{ + bool result; + + // Prepare the first segment. We position the joined segment on the first path + // and assign the path array to the struct. + sj->path_index = 0; + sj->paths = paths; + + // We loop through all paths until we find one which has a segment. The result + // is stored in a variable, so we can let the caller know whether we found one + // or not. + result = false; + while (paths[sj->path_index] != NULL && + (result = cwk_path_get_first_segment(paths[sj->path_index], + &sj->segment)) == false) { + ++sj->path_index; + } + + return result; +} + +static bool cwk_path_get_next_segment_joined(struct cwk_segment_joined *sj) +{ + bool result; + + if (sj->paths[sj->path_index] == NULL) { + // We reached already the end of all paths, so there is no other segment + // left. + return false; + } else if (cwk_path_get_next_segment(&sj->segment)) { + // There was another segment on the current path, so we are good to + // continue. + return true; + } + + // We try to move to the next path which has a segment available. We must at + // least move one further since the current path reached the end. + result = false; + + do { + ++sj->path_index; + + // And we obviously have to stop this loop if there are no more paths left. + if (sj->paths[sj->path_index] == NULL) { + break; + } + + // Grab the first segment of the next path and determine whether this path + // has anything useful in it. There is one more thing we have to consider + // here - for the first time we do this we want to skip the root, but + // afterwards we will consider that to be part of the segments. + result = cwk_path_get_first_segment_without_root(sj->paths[sj->path_index], + sj->paths[sj->path_index], &sj->segment); + + } while (!result); + + // Finally, report the result back to the caller. + return result; +} + +static bool cwk_path_get_previous_segment_joined(struct cwk_segment_joined *sj) +{ + bool result; + + if (*sj->paths == NULL) { + // It's possible that there is no initialized segment available in the + // struct since there are no paths. In that case we can return false, since + // there is no previous segment. + return false; + } else if (cwk_path_get_previous_segment(&sj->segment)) { + // Now we try to get the previous segment from the current path. If we can + // do that successfully, we can let the caller know that we found one. + return true; + } + + result = false; + + do { + // We are done once we reached index 0. In that case there are no more + // segments left. + if (sj->path_index == 0) { + break; + } + + // There is another path which we have to inspect. So we decrease the path + // index. + --sj->path_index; + + // If this is the first path we will have to consider that this path might + // include a root, otherwise we just treat is as a segment. + if (sj->path_index == 0) { + result = cwk_path_get_last_segment(sj->paths[sj->path_index], + &sj->segment); + } else { + result = cwk_path_get_last_segment_without_root(sj->paths[sj->path_index], + &sj->segment); + } + + } while (!result); + + return result; +} + +static bool cwk_path_segment_back_will_be_removed(struct cwk_segment_joined *sj) +{ + enum cwk_segment_type type; + int counter; + + // We are handling back segments here. We must verify how many back segments + // and how many normal segments come before this one to decide whether we keep + // or remove it. + + // The counter determines how many normal segments are our current segment, + // which will popped off before us. If the counter goes above zero it means + // that our segment will be popped as well. + counter = 0; + + // We loop over all previous segments until we either reach the beginning, + // which means our segment will not be dropped or the counter goes above zero. + while (cwk_path_get_previous_segment_joined(sj)) { + + // Now grab the type. The type determines whether we will increase or + // decrease the counter. We don't handle a CWK_CURRENT frame here since it + // has no influence. + type = cwk_path_get_segment_type(&sj->segment); + if (type == CWK_NORMAL) { + // This is a normal segment. The normal segment will increase the counter + // since it neutralizes one back segment. If we go above zero we can + // return immediately. + ++counter; + if (counter > 0) { + return true; + } + } else if (type == CWK_BACK) { + // A CWK_BACK segment will reduce the counter by one. We can not remove a + // back segment as long we are not above zero since we don't have the + // opposite normal segment which we would remove. + --counter; + } + } + + // We never got a count larger than zero, so we will keep this segment alive. + return false; +} + +static bool cwk_path_segment_normal_will_be_removed( + struct cwk_segment_joined *sj) +{ + enum cwk_segment_type type; + int counter; + + // The counter determines how many segments are above our current segment, + // which will popped off before us. If the counter goes below zero it means + // that our segment will be popped as well. + counter = 0; + + // We loop over all following segments until we either reach the end, which + // means our segment will not be dropped or the counter goes below zero. + while (cwk_path_get_next_segment_joined(sj)) { + + // First, grab the type. The type determines whether we will increase or + // decrease the counter. We don't handle a CWK_CURRENT frame here since it + // has no influence. + type = cwk_path_get_segment_type(&sj->segment); + if (type == CWK_NORMAL) { + // This is a normal segment. The normal segment will increase the counter + // since it will be removed by a "../" before us. + ++counter; + } else if (type == CWK_BACK) { + // A CWK_BACK segment will reduce the counter by one. If we are below zero + // we can return immediately. + --counter; + if (counter < 0) { + return true; + } + } + } + + // We never got a negative count, so we will keep this segment alive. + return false; +} + +static bool +cwk_path_segment_will_be_removed(const struct cwk_segment_joined *sj, + bool absolute) +{ + enum cwk_segment_type type; + struct cwk_segment_joined sjc; + + // We copy the joined path so we don't need to modify it. + sjc = *sj; + + // First we check whether this is a CWK_CURRENT or CWK_BACK segment, since + // those will always be dropped. + type = cwk_path_get_segment_type(&sj->segment); + if (type == CWK_CURRENT) { + return true; + } else if (type == CWK_BACK && absolute) { + return true; + } else if (type == CWK_BACK) { + return cwk_path_segment_back_will_be_removed(&sjc); + } else { + return cwk_path_segment_normal_will_be_removed(&sjc); + } +} + +static bool +cwk_path_segment_joined_skip_invisible(struct cwk_segment_joined *sj, + bool absolute) +{ + while (cwk_path_segment_will_be_removed(sj, absolute)) { + if (!cwk_path_get_next_segment_joined(sj)) { + return false; + } + } + + return true; +} + +static void cwk_path_get_root_windows(const char *path, size_t *length) +{ + const char *c; + bool is_device_path; + + // A device path is a path which starts with "\\." or "\\?". A device path can + // be a UNC path as well, in which case it will take up one more segment. + is_device_path = false; + + // We can not determine the root if this is an empty string. So we set the + // root to NULL and the length to zero and cancel the whole thing. + c = path; + *length = 0; + if (!*c) { + return; + } + + // Now we have to verify whether this is a windows network path (UNC), which + // we will consider our root. + if (cwk_path_is_separator(c)) { + ++c; + + // Check whether the path starts with a single back slash, which means this + // is not a network path - just a normal path starting with a backslash. + if (!cwk_path_is_separator(c)) { + // Okay, this is not a network path but we still use the backslash as a + // root. + ++(*length); + return; + } + + // Yes, this is a network or device path. Skip the previous separator. Now + // we need to determine whether this is a device path. We might advance one + // character here if the server name starts with a '?' or a '.', but that's + // fine since we will search for a separator afterwards anyway. + ++c; + is_device_path = (*c == '?' || *c == '.') && cwk_path_is_separator(++c); + if (is_device_path) { + // That's a device path, and the root must be either "\\.\" or "\\?\" + // which is 4 characters long. (at least that's how Windows + // GetFullPathName behaves.) + *length = 4; + return; + } + + // We will grab anything up to the next stop. The next stop might be a '\0' + // or another separator. That will be the server name. + c = cwk_path_find_next_stop(c); + + // If this is a separator and not the end of a string we wil have to include + // it. However, if this is a '\0' we must not skip it. + while (cwk_path_is_separator(c)) { + ++c; + } + + // We are now skipping the shared folder name, which will end after the + // next stop. + c = cwk_path_find_next_stop(c); + + // Then there might be a separator at the end. We will include that as well, + // it will mark the path as absolute. + if (cwk_path_is_separator(c)) { + ++c; + } + + // Finally, calculate the size of the root. + *length = (size_t)(c - path); + return; + } + + // Move to the next and check whether this is a colon. + if (*++c == ':') { + *length = 2; + + // Now check whether this is a backslash (or slash). If it is not, we could + // assume that the next character is a '\0' if it is a valid path. However, + // we will not assume that - since ':' is not valid in a path it must be a + // mistake by the caller than. We will try to understand it anyway. + if (cwk_path_is_separator(++c)) { + *length = 3; + } + } +} + +static void cwk_path_get_root_unix(const char *path, size_t *length) +{ + // The slash of the unix path represents the root. There is no root if there + // is no slash. + if (cwk_path_is_separator(path)) { + *length = 1; + } else { + *length = 0; + } +} + +static bool cwk_path_is_root_absolute(const char *path, size_t length) +{ + // This is definitely not absolute if there is no root. + if (length == 0) { + return false; + } + + // If there is a separator at the end of the root, we can safely consider this + // to be an absolute path. + return cwk_path_is_separator(&path[length - 1]); +} + +static size_t cwk_path_join_and_normalize_multiple(const char **paths, + char *buffer, size_t buffer_size) +{ + size_t pos; + bool absolute, has_segment_output; + struct cwk_segment_joined sj; + + // We initialize the position after the root, which should get us started. + cwk_path_get_root(paths[0], &pos); + + // Determine whether the path is absolute or not. We need that to determine + // later on whether we can remove superfluous "../" or not. + absolute = cwk_path_is_root_absolute(paths[0], pos); + + // First copy the root to the output. We will not modify the root. + cwk_path_output_sized(buffer, buffer_size, 0, paths[0], pos); + + // So we just grab the first segment. If there is no segment we will always + // output a "/", since we currently only support absolute paths here. + if (!cwk_path_get_first_segment_joined(paths, &sj)) { + goto done; + } + + // Let's assume that we don't have any segment output for now. We will toggle + // this flag once there is some output. + has_segment_output = false; + + do { + // Check whether we have to drop this segment because of resolving a + // relative path or because it is a CWK_CURRENT segment. + if (cwk_path_segment_will_be_removed(&sj, absolute)) { + continue; + } + + // We add a separator if we previously wrote a segment. The last segment + // must not have a trailing separator. This must happen before the segment + // output, since we would override the null terminating character with + // reused buffers if this was done afterwards. + if (has_segment_output) { + pos += cwk_path_output_separator(buffer, buffer_size, pos); + } + + // Remember that we have segment output, so we can handle the trailing slash + // later on. This is necessary since we might have segments but they are all + // removed. + has_segment_output = true; + + // Write out the segment but keep in mind that we need to follow the + // buffer size limitations. That's why we use the path output functions + // here. + pos += cwk_path_output_sized(buffer, buffer_size, pos, sj.segment.begin, + sj.segment.size); + } while (cwk_path_get_next_segment_joined(&sj)); + + // Remove the trailing slash, but only if we have segment output. We don't + // want to remove anything from the root. + if (!has_segment_output && pos == 0) { + // This may happen if the path is absolute and all segments have been + // removed. We can not have an empty output - and empty output means we stay + // in the current directory. So we will output a ".". + assert(absolute == false); + pos += cwk_path_output_current(buffer, buffer_size, pos); + } + + // We must append a '\0' in any case, unless the buffer size is zero. If the + // buffer size is zero, which means we can not. +done: + cwk_path_terminate_output(buffer, buffer_size, pos); + + // And finally let our caller know about the total size of the normalized + // path. + return pos; +} + +size_t cwk_path_get_absolute(const char *base, const char *path, char *buffer, + size_t buffer_size) +{ + size_t i; + const char *paths[4]; + + // The basename should be an absolute path if the caller is using the API + // correctly. However, he might not and in that case we will append a fake + // root at the beginning. + if (cwk_path_is_absolute(base)) { + i = 0; + } else if (path_style == CWK_STYLE_WINDOWS) { + paths[0] = "\\"; + i = 1; + } else { + paths[0] = "/"; + i = 1; + } + + if (cwk_path_is_absolute(path)) { + // If the submitted path is not relative the base path becomes irrelevant. + // We will only normalize the submitted path instead. + paths[i++] = path; + paths[i] = NULL; + } else { + // Otherwise we append the relative path to the base path and normalize it. + // The result will be a new absolute path. + paths[i++] = base; + paths[i++] = path; + paths[i] = NULL; + } + + // Finally join everything together and normalize it. + return cwk_path_join_and_normalize_multiple(paths, buffer, buffer_size); +} + +static void cwk_path_skip_segments_until_diverge(struct cwk_segment_joined *bsj, + struct cwk_segment_joined *osj, bool absolute, bool *base_available, + bool *other_available) +{ + // Now looping over all segments until they start to diverge. A path may + // diverge if two segments are not equal or if one path reaches the end. + do { + + // Check whether there is anything available after we skip everything which + // is invisible. We do that for both paths, since we want to let the caller + // know which path has some trailing segments after they diverge. + *base_available = cwk_path_segment_joined_skip_invisible(bsj, absolute); + *other_available = cwk_path_segment_joined_skip_invisible(osj, absolute); + + // We are done if one or both of those paths reached the end. They either + // diverge or both reached the end - but in both cases we can not continue + // here. + if (!*base_available || !*other_available) { + break; + } + + // Compare the content of both segments. We are done if they are not equal, + // since they diverge. + if (!cwk_path_is_string_equal(bsj->segment.begin, osj->segment.begin, + bsj->segment.size)) { + break; + } + + // We keep going until one of those segments reached the end. The next + // segment might be invisible, but we will check for that in the beginning + // of the loop once again. + *base_available = cwk_path_get_next_segment_joined(bsj); + *other_available = cwk_path_get_next_segment_joined(osj); + } while (*base_available && *other_available); +} + +size_t cwk_path_get_relative(const char *base_directory, const char *path, + char *buffer, size_t buffer_size) +{ + size_t pos, base_root_length, path_root_length; + bool absolute, base_available, other_available, has_output; + const char *base_paths[2], *other_paths[2]; + struct cwk_segment_joined bsj, osj; + + pos = 0; + + // First we compare the roots of those two paths. If the roots are not equal + // we can't continue, since there is no way to get a relative path from + // different roots. + cwk_path_get_root(base_directory, &base_root_length); + cwk_path_get_root(path, &path_root_length); + if (base_root_length != path_root_length || + !cwk_path_is_string_equal(base_directory, path, base_root_length)) { + cwk_path_terminate_output(buffer, buffer_size, pos); + return pos; + } + + // Verify whether this is an absolute path. We need to know that since we can + // remove all back-segments if it is. + absolute = cwk_path_is_root_absolute(base_directory, base_root_length); + + // Initialize our joined segments. This will allow us to use the internal + // functions to skip until diverge and invisible. We only have one path in + // them though. + base_paths[0] = base_directory; + base_paths[1] = NULL; + other_paths[0] = path; + other_paths[1] = NULL; + cwk_path_get_first_segment_joined(base_paths, &bsj); + cwk_path_get_first_segment_joined(other_paths, &osj); + + // Okay, now we skip until the segments diverge. We don't have anything to do + // with the segments which are equal. + cwk_path_skip_segments_until_diverge(&bsj, &osj, absolute, &base_available, + &other_available); + + // Assume there is no output until we have got some. We will need this + // information later on to remove trailing slashes or alternatively output a + // current-segment. + has_output = false; + + // So if we still have some segments left in the base path we will now output + // a back segment for all of them. + if (base_available) { + do { + // Skip any invisible segment. We don't care about those and we don't need + // to navigate back because of them. + if (!cwk_path_segment_joined_skip_invisible(&bsj, absolute)) { + break; + } + + // Toggle the flag if we have output. We need to remember that, since we + // want to remove the trailing slash. + has_output = true; + + // Output the back segment and a separator. No need to worry about the + // superfluous segment since it will be removed later on. + pos += cwk_path_output_back(buffer, buffer_size, pos); + pos += cwk_path_output_separator(buffer, buffer_size, pos); + } while (cwk_path_get_next_segment_joined(&bsj)); + } + + // And if we have some segments available of the target path we will output + // all of those. + if (other_available) { + do { + // Again, skip any invisible segments since we don't need to navigate into + // them. + if (!cwk_path_segment_joined_skip_invisible(&osj, absolute)) { + break; + } + + // Toggle the flag if we have output. We need to remember that, since we + // want to remove the trailing slash. + has_output = true; + + // Output the current segment and a separator. No need to worry about the + // superfluous segment since it will be removed later on. + pos += cwk_path_output_sized(buffer, buffer_size, pos, osj.segment.begin, + osj.segment.size); + pos += cwk_path_output_separator(buffer, buffer_size, pos); + } while (cwk_path_get_next_segment_joined(&osj)); + } + + // If we have some output by now we will have to remove the trailing slash. We + // simply do that by moving back one character. The terminate output function + // will then place the '\0' on this position. Otherwise, if there is no + // output, we will have to output a "current directory", since the target path + // points to the base path. + if (has_output) { + --pos; + } else { + pos += cwk_path_output_current(buffer, buffer_size, pos); + } + + // Finally, we can terminate the output - which means we place a '\0' at the + // current position or at the end of the buffer. + cwk_path_terminate_output(buffer, buffer_size, pos); + + return pos; +} + +size_t cwk_path_join(const char *path_a, const char *path_b, char *buffer, + size_t buffer_size) +{ + const char *paths[3]; + + // This is simple. We will just create an array with the two paths which we + // wish to join. + paths[0] = path_a; + paths[1] = path_b; + paths[2] = NULL; + + // And then call the join and normalize function which will do the hard work + // for us. + return cwk_path_join_and_normalize_multiple(paths, buffer, buffer_size); +} + +size_t cwk_path_join_multiple(const char **paths, char *buffer, + size_t buffer_size) +{ + // We can just call the internal join and normalize function for this one, + // since it will handle everything. + return cwk_path_join_and_normalize_multiple(paths, buffer, buffer_size); +} + +void cwk_path_get_root(const char *path, size_t *length) +{ + // We use a different implementation here based on the configuration of the + // library. + if (path_style == CWK_STYLE_WINDOWS) { + cwk_path_get_root_windows(path, length); + } else { + cwk_path_get_root_unix(path, length); + } +} + +size_t cwk_path_change_root(const char *path, const char *new_root, + char *buffer, size_t buffer_size) +{ + const char *tail; + size_t root_length, path_length, tail_length, new_root_length, new_path_size; + + // First we need to determine the actual size of the root which we will + // change. + cwk_path_get_root(path, &root_length); + + // Now we determine the sizes of the new root and the path. We need that to + // determine the size of the part after the root (the tail). + new_root_length = strlen(new_root); + path_length = strlen(path); + + // Okay, now we calculate the position of the tail and the length of it. + tail = path + root_length; + tail_length = path_length - root_length; + + // We first output the tail and then the new root, that's because the source + // path and the buffer may be overlapping. This way the root will not + // overwrite the tail. + cwk_path_output_sized(buffer, buffer_size, new_root_length, tail, + tail_length); + cwk_path_output_sized(buffer, buffer_size, 0, new_root, new_root_length); + + // Finally we calculate the size o the new path and terminate the output with + // a '\0'. + new_path_size = tail_length + new_root_length; + cwk_path_terminate_output(buffer, buffer_size, new_path_size); + + return new_path_size; +} + +bool cwk_path_is_absolute(const char *path) +{ + size_t length; + + // We grab the root of the path. This root does not include the first + // separator of a path. + cwk_path_get_root(path, &length); + + // Now we can determine whether the root is absolute or not. + return cwk_path_is_root_absolute(path, length); +} + +bool cwk_path_is_relative(const char *path) +{ + // The path is relative if it is not absolute. + return !cwk_path_is_absolute(path); +} + +void cwk_path_get_basename(const char *path, const char **basename, + size_t *length) +{ + struct cwk_segment segment; + + // We get the last segment of the path. The last segment will contain the + // basename if there is any. If there are no segments we will set the basename + // to NULL and the length to 0. + if (!cwk_path_get_last_segment(path, &segment)) { + *basename = NULL; + *length = 0; + return; + } + + // Now we can just output the segment contents, since that's our basename. + // There might be trailing separators after the basename, but the size does + // not include those. + *basename = segment.begin; + *length = segment.size; +} + +size_t cwk_path_change_basename(const char *path, const char *new_basename, + char *buffer, size_t buffer_size) +{ + struct cwk_segment segment; + size_t pos, root_size, new_basename_size; + + // First we try to get the last segment. We may only have a root without any + // segments, in which case we will create one. + if (!cwk_path_get_last_segment(path, &segment)) { + + // So there is no segment in this path. First we grab the root and output + // that. We are not going to modify the root in any way. + cwk_path_get_root(path, &root_size); + pos = cwk_path_output_sized(buffer, buffer_size, 0, path, root_size); + + // We have to trim the separators from the beginning of the new basename. + // This is quite easy to do. + while (cwk_path_is_separator(new_basename)) { + ++new_basename; + } + + // Now we measure the length of the new basename, this is a two step + // process. First we find the '\0' character at the end of the string. + new_basename_size = 0; + while (new_basename[new_basename_size]) { + ++new_basename_size; + } + + // And then we trim the separators at the end of the basename until we reach + // the first valid character. + while (new_basename_size > 0 && + cwk_path_is_separator(&new_basename[new_basename_size - 1])) { + --new_basename_size; + } + + // Now we will output the new basename after the root. + pos += cwk_path_output_sized(buffer, buffer_size, pos, new_basename, + new_basename_size); + + // And finally terminate the output and return the total size of the path. + cwk_path_terminate_output(buffer, buffer_size, pos); + return pos; + } + + // If there is a last segment we can just forward this call, which is fairly + // easy. + return cwk_path_change_segment(&segment, new_basename, buffer, buffer_size); +} + +void cwk_path_get_dirname(const char *path, size_t *length) +{ + struct cwk_segment segment; + + // We get the last segment of the path. The last segment will contain the + // basename if there is any. If there are no segments we will set the length + // to 0. + if (!cwk_path_get_last_segment(path, &segment)) { + *length = 0; + return; + } + + // We can now return the length from the beginning of the string up to the + // beginning of the last segment. + *length = (size_t)(segment.begin - path); +} + +bool cwk_path_get_extension(const char *path, const char **extension, + size_t *length) +{ + struct cwk_segment segment; + const char *c; + + // We get the last segment of the path. The last segment will contain the + // extension if there is any. + if (!cwk_path_get_last_segment(path, &segment)) { + return false; + } + + // Now we search for a dot within the segment. If there is a dot, we consider + // the rest of the segment the extension. We do this from the end towards the + // beginning, since we want to find the last dot. + for (c = segment.end; c >= segment.begin; --c) { + if (*c == '.') { + // Okay, we found an extension. We can stop looking now. + *extension = c; + *length = (size_t)(segment.end - c); + return true; + } + } + + // We couldn't find any extension. + return false; +} + +bool cwk_path_has_extension(const char *path) +{ + const char *extension; + size_t length; + + // We just wrap the get_extension call which will then do the work for us. + return cwk_path_get_extension(path, &extension, &length); +} + +size_t cwk_path_change_extension(const char *path, const char *new_extension, + char *buffer, size_t buffer_size) +{ + struct cwk_segment segment; + const char *c, *old_extension; + size_t pos, root_size, trail_size, new_extension_size; + + // First we try to get the last segment. We may only have a root without any + // segments, in which case we will create one. + if (!cwk_path_get_last_segment(path, &segment)) { + + // So there is no segment in this path. First we grab the root and output + // that. We are not going to modify the root in any way. If there is no + // root, this will end up with a root size 0, and nothing will be written. + cwk_path_get_root(path, &root_size); + pos = cwk_path_output_sized(buffer, buffer_size, 0, path, root_size); + + // Add a dot if the submitted value doesn't have any. + if (*new_extension != '.') { + pos += cwk_path_output_dot(buffer, buffer_size, pos); + } + + // And finally terminate the output and return the total size of the path. + pos += cwk_path_output(buffer, buffer_size, pos, new_extension); + cwk_path_terminate_output(buffer, buffer_size, pos); + return pos; + } + + // Now we seek the old extension in the last segment, which we will replace + // with the new one. If there is no old extension, it will point to the end of + // the segment. + old_extension = segment.end; + for (c = segment.begin; c < segment.end; ++c) { + if (*c == '.') { + old_extension = c; + } + } + + pos = cwk_path_output_sized(buffer, buffer_size, 0, segment.path, + (size_t)(old_extension - segment.path)); + + // If the new extension starts with a dot, we will skip that dot. We always + // output exactly one dot before the extension. If the extension contains + // multiple dots, we will output those as part of the extension. + if (*new_extension == '.') { + ++new_extension; + } + + // We calculate the size of the new extension, including the dot, in order to + // output the trail - which is any part of the path coming after the + // extension. We must output this first, since the buffer may overlap with the + // submitted path - and it would be overridden by longer extensions. + new_extension_size = strlen(new_extension) + 1; + trail_size = cwk_path_output(buffer, buffer_size, pos + new_extension_size, + segment.end); + + // Finally we output the dot and the new extension. The new extension itself + // doesn't contain the dot anymore, so we must output that first. + pos += cwk_path_output_dot(buffer, buffer_size, pos); + pos += cwk_path_output(buffer, buffer_size, pos, new_extension); + + // Now we terminate the output with a null-terminating character, but before + // we do that we must add the size of the trail to the position which we + // output before. + pos += trail_size; + cwk_path_terminate_output(buffer, buffer_size, pos); + + // And the position is our output size now. + return pos; +} + +size_t cwk_path_normalize(const char *path, char *buffer, size_t buffer_size) +{ + const char *paths[2]; + + // Now we initialize the paths which we will normalize. Since this function + // only supports submitting a single path, we will only add that one. + paths[0] = path; + paths[1] = NULL; + + return cwk_path_join_and_normalize_multiple(paths, buffer, buffer_size); +} + +size_t cwk_path_get_intersection(const char *path_base, const char *path_other) +{ + bool absolute; + size_t base_root_length, other_root_length; + const char *end; + const char *paths_base[2], *paths_other[2]; + struct cwk_segment_joined base, other; + + // We first compare the two roots. We just return zero if they are not equal. + // This will also happen to return zero if the paths are mixed relative and + // absolute. + cwk_path_get_root(path_base, &base_root_length); + cwk_path_get_root(path_other, &other_root_length); + if (!cwk_path_is_string_equal(path_base, path_other, base_root_length)) { + return 0; + } + + // Configure our paths. We just have a single path in here for now. + paths_base[0] = path_base; + paths_base[1] = NULL; + paths_other[0] = path_other; + paths_other[1] = NULL; + + // So we get the first segment of both paths. If one of those paths don't have + // any segment, we will return 0. + if (!cwk_path_get_first_segment_joined(paths_base, &base) || + !cwk_path_get_first_segment_joined(paths_other, &other)) { + return base_root_length; + } + + // We now determine whether the path is absolute or not. This is required + // because if will ignore removed segments, and this behaves differently if + // the path is absolute. However, we only need to check the base path because + // we are guaranteed that both paths are either relative or absolute. + absolute = cwk_path_is_root_absolute(path_base, base_root_length); + + // We must keep track of the end of the previous segment. Initially, this is + // set to the beginning of the path. This means that 0 is returned if the + // first segment is not equal. + end = path_base + base_root_length; + + // Now we loop over both segments until one of them reaches the end or their + // contents are not equal. + do { + // We skip all segments which will be removed in each path, since we want to + // know about the true path. + if (!cwk_path_segment_joined_skip_invisible(&base, absolute) || + !cwk_path_segment_joined_skip_invisible(&other, absolute)) { + break; + } + + if (!cwk_path_is_string_equal(base.segment.begin, other.segment.begin, + base.segment.size)) { + // So the content of those two segments are not equal. We will return the + // size up to the beginning. + return (size_t)(end - path_base); + } + + // Remember the end of the previous segment before we go to the next one. + end = base.segment.end; + } while (cwk_path_get_next_segment_joined(&base) && + cwk_path_get_next_segment_joined(&other)); + + // Now we calculate the length up to the last point where our paths pointed to + // the same place. + return (size_t)(end - path_base); +} + +bool cwk_path_get_first_segment(const char *path, struct cwk_segment *segment) +{ + size_t length; + const char *segments; + + // We skip the root since that's not part of the first segment. The root is + // treated as a separate entity. + cwk_path_get_root(path, &length); + segments = path + length; + + // Now, after we skipped the root we can continue and find the actual segment + // content. + return cwk_path_get_first_segment_without_root(path, segments, segment); +} + +bool cwk_path_get_last_segment(const char *path, struct cwk_segment *segment) +{ + // We first grab the first segment. This might be our last segment as well, + // but we don't know yet. There is no last segment if there is no first + // segment, so we return false in that case. + if (!cwk_path_get_first_segment(path, segment)) { + return false; + } + + // Now we find our last segment. The segment struct of the caller + // will contain the last segment, since the function we call here will not + // change the segment struct when it reaches the end. + while (cwk_path_get_next_segment(segment)) { + // We just loop until there is no other segment left. + } + + return true; +} + +bool cwk_path_get_next_segment(struct cwk_segment *segment) +{ + const char *c; + + // First we jump to the end of the previous segment. The first character must + // be either a '\0' or a separator. + c = segment->begin + segment->size; + if (*c == '\0') { + return false; + } + + // Now we skip all separator until we reach something else. We are not yet + // guaranteed to have a segment, since the string could just end afterwards. + assert(cwk_path_is_separator(c)); + do { + ++c; + } while (cwk_path_is_separator(c)); + + // If the string ends here, we can safely assume that there is no other + // segment after this one. + if (*c == '\0') { + return false; + } + + // Now we are safe to assume there is a segment. We store the beginning of + // this segment in the segment struct of the caller. + segment->begin = c; + + // And now determine the size of this segment, and store it in the struct of + // the caller as well. + c = cwk_path_find_next_stop(c); + segment->end = c; + segment->size = (size_t)(c - segment->begin); + + // Tell the caller that we found a segment. + return true; +} + +bool cwk_path_get_previous_segment(struct cwk_segment *segment) +{ + const char *c; + + // The current position might point to the first character of the path, which + // means there are no previous segments available. + c = segment->begin; + if (c <= segment->segments) { + return false; + } + + // We move towards the beginning of the path until we either reached the + // beginning or the character is no separator anymore. + do { + --c; + if (c < segment->segments) { + // So we reached the beginning here and there is no segment. So we return + // false and don't change the segment structure submitted by the caller. + return false; + } + } while (cwk_path_is_separator(c)); + + // We are guaranteed now that there is another segment, since we moved before + // the previous separator and did not reach the segment path beginning. + segment->end = c + 1; + segment->begin = cwk_path_find_previous_stop(segment->segments, c); + segment->size = (size_t)(segment->end - segment->begin); + + return true; +} + +enum cwk_segment_type cwk_path_get_segment_type( + const struct cwk_segment *segment) +{ + // We just make a string comparison with the segment contents and return the + // appropriate type. + if (strncmp(segment->begin, ".", segment->size) == 0) { + return CWK_CURRENT; + } else if (strncmp(segment->begin, "..", segment->size) == 0) { + return CWK_BACK; + } + + return CWK_NORMAL; +} + +bool cwk_path_is_separator(const char *str) +{ + const char *c; + + // We loop over all characters in the read symbols. + c = separators[path_style]; + while (*c) { + if (*c == *str) { + return true; + } + + ++c; + } + + return false; +} + +size_t cwk_path_change_segment(struct cwk_segment *segment, const char *value, + char *buffer, size_t buffer_size) +{ + size_t pos, value_size, tail_size; + + // First we have to output the head, which is the whole string up to the + // beginning of the segment. This part of the path will just stay the same. + pos = cwk_path_output_sized(buffer, buffer_size, 0, segment->path, + (size_t)(segment->begin - segment->path)); + + // In order to trip the submitted value, we will skip any separator at the + // beginning of it and behave as if it was never there. + while (cwk_path_is_separator(value)) { + ++value; + } + + // Now we determine the length of the value. In order to do that we first + // locate the '\0'. + value_size = 0; + while (value[value_size]) { + ++value_size; + } + + // Since we trim separators at the beginning and in the end of the value we + // have to subtract from the size until there are either no more characters + // left or the last character is no separator. + while (value_size > 0 && cwk_path_is_separator(&value[value_size - 1])) { + --value_size; + } + + // We also have to determine the tail size, which is the part of the string + // following the current segment. This part will not change. + tail_size = strlen(segment->end); + + // Now we output the tail. We have to do that, because if the buffer and the + // source are overlapping we would override the tail if the value is + // increasing in length. + cwk_path_output_sized(buffer, buffer_size, pos + value_size, segment->end, + tail_size); + + // Finally we can output the value in the middle of the head and the tail, + // where we have enough space to fit the whole trimmed value. + pos += cwk_path_output_sized(buffer, buffer_size, pos, value, value_size); + + // Now we add the tail size to the current position and terminate the output - + // basically, ensure that there is a '\0' at the end of the buffer. + pos += tail_size; + cwk_path_terminate_output(buffer, buffer_size, pos); + + // And now tell the caller how long the whole path would be. + return pos; +} + +enum cwk_path_style cwk_path_guess_style(const char *path) +{ + const char *c; + size_t root_length; + struct cwk_segment segment; + + // First we determine the root. Only windows roots can be longer than a single + // slash, so if we can determine that it starts with something like "C:", we + // know that this is a windows path. + cwk_path_get_root_windows(path, &root_length); + if (root_length > 1) { + return CWK_STYLE_WINDOWS; + } + + // Next we check for slashes. Windows uses backslashes, while unix uses + // forward slashes. Windows actually supports both, but our best guess is to + // assume windows with backslashes and unix with forward slashes. + for (c = path; *c; ++c) { + if (*c == *separators[CWK_STYLE_UNIX]) { + return CWK_STYLE_UNIX; + } else if (*c == *separators[CWK_STYLE_WINDOWS]) { + return CWK_STYLE_WINDOWS; + } + } + + // This path does not have any slashes. We grab the last segment (which + // actually must be the first one), and determine whether the segment starts + // with a dot. A dot is a hidden folder or file in the UNIX world, in that + // case we assume the path to have UNIX style. + if (!cwk_path_get_last_segment(path, &segment)) { + // We couldn't find any segments, so we default to a UNIX path style since + // there is no way to make any assumptions. + return CWK_STYLE_UNIX; + } + + if (*segment.begin == '.') { + return CWK_STYLE_UNIX; + } + + // And finally we check whether the last segment contains a dot. If it + // contains a dot, that might be an extension. Windows is more likely to have + // file names with extensions, so our guess would be windows. + for (c = segment.begin; *c; ++c) { + if (*c == '.') { + return CWK_STYLE_WINDOWS; + } + } + + // All our checks failed, so we will return a default value which is currently + // UNIX. + return CWK_STYLE_UNIX; +} + +void cwk_path_set_style(enum cwk_path_style style) +{ + // We can just set the global path style variable and then the behaviour for + // all functions will change accordingly. + assert(style == CWK_STYLE_UNIX || style == CWK_STYLE_WINDOWS); + path_style = style; +} + +enum cwk_path_style cwk_path_get_style(void) +{ + // Simply return the path style which we store in a global variable. + return path_style; +} diff --git a/deps/cwalk/test/absolute_test.c b/deps/cwalk/test/absolute_test.c new file mode 100755 index 00000000000..1ef14706389 --- /dev/null +++ b/deps/cwalk/test/absolute_test.c @@ -0,0 +1,206 @@ +#include +#include +#include +#include +#include + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) + +int absolute_check() +{ + const char *relative_paths[] = {"..", "test", "test/test", "../another_test", + "./simple", ".././simple"}; + const char *absolute_paths[] = {"/", "/test", "/../test/", "/../another_test", + "/./simple", "/.././simple"}; + size_t i; + + cwk_path_set_style(CWK_STYLE_UNIX); + + for (i = 0; i < ARRAY_SIZE(relative_paths); ++i) { + if (cwk_path_is_absolute(relative_paths[i])) { + return EXIT_FAILURE; + } + } + + for (i = 0; i < ARRAY_SIZE(absolute_paths); ++i) { + if (!cwk_path_is_absolute(absolute_paths[i])) { + return EXIT_FAILURE; + } + } + + return EXIT_SUCCESS; +} + +int absolute_too_far() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + length = cwk_path_get_absolute("/hello/there", "../../../../../", buffer, + sizeof(buffer)); + + if (length != 1) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "/") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int absolute_normalization() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + length = cwk_path_get_absolute("/hello//../there", "test//thing", buffer, + sizeof(buffer)); + + if (length != 17) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "/there/test/thing") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int absolute_mixed() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + length = cwk_path_get_absolute("hello/there", "/test", buffer, + sizeof(buffer)); + + if (length != 5) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "/test") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int absolute_unix_relative_base() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + length = cwk_path_get_absolute("hello/there", "test", buffer, sizeof(buffer)); + + if (length != 17) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "/hello/there/test") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int absolute_windows_relative_base() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + length = cwk_path_get_absolute("hello\\there", "test", buffer, sizeof(buffer)); + + if (length != 17) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "\\hello\\there\\test") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int absolute_absolute_path() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + length = cwk_path_get_absolute("/hello/there", "/test", buffer, + sizeof(buffer)); + + if (length != 5) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "/test") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int absolute_simple() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + length = cwk_path_get_absolute("/hello/there", "..", buffer, sizeof(buffer)); + + if (length != 6) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "/hello") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + + +int absolute_buffer_reuse() +{ + char path[FILENAME_MAX]; + + memset(path, 1, FILENAME_MAX); + path[0] = '\0'; + + cwk_path_set_style(CWK_STYLE_UNIX); + + cwk_path_get_absolute(path, "/", path, FILENAME_MAX); + if (strcmp(path, "/") != 0) { + return EXIT_FAILURE; + } + cwk_path_get_absolute(path, "see", path, FILENAME_MAX); + if (strcmp(path, "/see") != 0) { + return EXIT_FAILURE; + } + + cwk_path_get_absolute(path, "dog", path, FILENAME_MAX); + if (strcmp(path, "/see/dog") != 0) { + return EXIT_FAILURE; + } + + cwk_path_get_absolute(path, "..", path, FILENAME_MAX); + if (strcmp(path, "/see") != 0) { + return EXIT_FAILURE; + } + + cwk_path_get_absolute(path, "cat", path, FILENAME_MAX); + if (strcmp(path, "/see/cat") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/basename_test.c b/deps/cwalk/test/basename_test.c new file mode 100755 index 00000000000..16e94b663c3 --- /dev/null +++ b/deps/cwalk/test/basename_test.c @@ -0,0 +1,313 @@ +#include +#include +#include +#include +#include + +int basename_change_trim_only_root() +{ + size_t n; + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_UNIX); + + n = cwk_path_change_basename("/", "///another.txt///", buffer, + sizeof(buffer)); + if (n != 12) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "/another.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_change_trim() +{ + size_t n; + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_UNIX); + + n = cwk_path_change_basename("/test.txt", "///another.txt///", buffer, + sizeof(buffer)); + if (n != 12) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "/another.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_change_relative() +{ + size_t n; + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + n = cwk_path_change_basename("../test.txt", "another.txt", buffer, + sizeof(buffer)); + if (n != 14) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "../another.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_change_empty_basename() +{ + size_t n; + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + n = cwk_path_change_basename("C:\\test.txt", "", buffer, sizeof(buffer)); + if (n != 3) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "C:\\") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_change_only_root() +{ + size_t n; + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + n = cwk_path_change_basename("C:\\", "another.txt", buffer, sizeof(buffer)); + if (n != 14) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "C:\\another.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_change_empty_path() +{ + size_t n; + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + n = cwk_path_change_basename("", "another.txt", buffer, sizeof(buffer)); + if (n != 11) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "another.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_change_simple() +{ + size_t n; + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + n = cwk_path_change_basename("C:\\test.txt", "another.txt", buffer, + sizeof(buffer)); + if (n != 14) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "C:\\another.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_windows() +{ + const char *path, *basename; + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + path = "C:\\path\\test.txt"; + cwk_path_get_basename(path, &basename, &length); + + if (length != 8) { + return EXIT_FAILURE; + } + + if (strcmp(basename, "test.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_root() +{ + const char *path, *basename; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/"; + cwk_path_get_basename(path, &basename, &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + if (basename != NULL) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_special_directories() +{ + const char *path, *basename; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = ".."; + cwk_path_get_basename(path, &basename, &length); + + if (length != 2) { + return EXIT_FAILURE; + } + + if (strncmp(basename, "..", length) != 0) { + return EXIT_FAILURE; + } + + path = "."; + cwk_path_get_basename(path, &basename, &length); + + if (length != 1) { + return EXIT_FAILURE; + } + + if (strncmp(basename, ".", length) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_no_separators() +{ + const char *path, *basename; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "file_name"; + cwk_path_get_basename(path, &basename, &length); + + if (length != 9) { + return EXIT_FAILURE; + } + + if (strncmp(basename, "file_name", length) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_trailing_separators() +{ + const char *path, *basename; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/path.txt////"; + cwk_path_get_basename(path, &basename, &length); + + if (length != 8) { + return EXIT_FAILURE; + } + + if (strncmp(basename, "path.txt", length) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_trailing_separator() +{ + const char *path, *basename; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/path.txt/"; + cwk_path_get_basename(path, &basename, &length); + + if (length != 8) { + return EXIT_FAILURE; + } + + if (strncmp(basename, "path.txt", length) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_empty() +{ + const char *path, *basename; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = ""; + cwk_path_get_basename(path, &basename, &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + if (basename != NULL) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int basename_simple() +{ + const char *path, *basename; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/path.txt"; + cwk_path_get_basename(path, &basename, &length); + + if (length != 8) { + return EXIT_FAILURE; + } + + if (strncmp(basename, "path.txt", length) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/dirname_test.c b/deps/cwalk/test/dirname_test.c new file mode 100755 index 00000000000..99f5472dba3 --- /dev/null +++ b/deps/cwalk/test/dirname_test.c @@ -0,0 +1,154 @@ +#include +#include +#include + +int dirname_relative() +{ + const char *path; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "../one/two.txt"; + cwk_path_get_dirname(path, &length); + + if (length != 7) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int dirname_three_segments() +{ + const char *path; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/one/two/three.txt"; + cwk_path_get_dirname(path, &length); + + if (length != 9) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int dirname_root() +{ + const char *path; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/"; + cwk_path_get_dirname(path, &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int dirname_special_directories() +{ + const char *path; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = ".."; + cwk_path_get_dirname(path, &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + path = "."; + cwk_path_get_dirname(path, &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int dirname_no_separators() +{ + const char *path; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "file_name"; + cwk_path_get_dirname(path, &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int dirname_trailing_separators() +{ + const char *path; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/path.txt////"; + cwk_path_get_dirname(path, &length); + + if (length != 4) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int dirname_trailing_separator() +{ + const char *path; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/path.txt/"; + cwk_path_get_dirname(path, &length); + + if (length != 4) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int dirname_empty() +{ + const char *path; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = ""; + cwk_path_get_dirname(path, &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int dirname_simple() +{ + const char *path; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/path.txt"; + cwk_path_get_dirname(path, &length); + + if (length != 4) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/extension_test.c b/deps/cwalk/test/extension_test.c new file mode 100755 index 00000000000..a23e6020138 --- /dev/null +++ b/deps/cwalk/test/extension_test.c @@ -0,0 +1,308 @@ +#include +#include +#include +#include +#include + +int extension_change_with_trailing_slash() +{ + char buffer[FILENAME_MAX] = "/folder/file.txt/"; + size_t n; + + cwk_path_set_style(CWK_STYLE_UNIX); + + n = cwk_path_change_extension(buffer, ".md", buffer, sizeof(buffer)); + if (n != 16) { + return EXIT_FAILURE; + } + + if (strcmp("/folder/file.md/", buffer) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_change_hidden_file() +{ + char buffer[FILENAME_MAX] = "/folder/.hidden_file.txt"; + size_t n; + + cwk_path_set_style(CWK_STYLE_UNIX); + + n = cwk_path_change_extension(buffer, ".md", buffer, sizeof(buffer)); + if (n != 23) { + return EXIT_FAILURE; + } + + if (strcmp("/folder/.hidden_file.md", buffer) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_change_overlap_long() +{ + char buffer[FILENAME_MAX] = "/test.txt/"; + size_t n; + + cwk_path_set_style(CWK_STYLE_UNIX); + + n = cwk_path_change_extension(buffer, ".text", buffer, sizeof(buffer)); + if (n != 11) { + return EXIT_FAILURE; + } + + if (strcmp("/test.text/", buffer) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_change_overlap() +{ + char buffer[FILENAME_MAX] = "/test.txt/"; + size_t n; + + cwk_path_set_style(CWK_STYLE_UNIX); + + n = cwk_path_change_extension(buffer, ".md", buffer, sizeof(buffer)); + if (n != 9) { + return EXIT_FAILURE; + } + + if (strcmp("/test.md/", buffer) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_change_with_dot() +{ + char buffer[FILENAME_MAX]; + size_t n; + + cwk_path_set_style(CWK_STYLE_UNIX); + + n = cwk_path_change_extension("/test.txt", ".md", buffer, sizeof(buffer)); + if (n != 8) { + return EXIT_FAILURE; + } + + if (strcmp("/test.md", buffer) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_change_remove() +{ + char buffer[FILENAME_MAX]; + size_t n; + + cwk_path_set_style(CWK_STYLE_UNIX); + + n = cwk_path_change_extension("/test.txt", "", buffer, sizeof(buffer)); + if (n != 5) { + return EXIT_FAILURE; + } + + if (strcmp("/test", buffer) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_change_no_extension() +{ + char buffer[FILENAME_MAX] = "C:\\file"; + size_t n; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + n = cwk_path_change_extension(buffer, ".md", buffer, sizeof(buffer)); + if (n != 10) { + return EXIT_FAILURE; + } + + if (strcmp("C:\\file.md", buffer) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_change_no_basename() +{ + char buffer[FILENAME_MAX] = "C:\\"; + size_t n; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + n = cwk_path_change_extension(buffer, ".md", buffer, sizeof(buffer)); + if (n != 6) { + return EXIT_FAILURE; + } + + if (strcmp("C:\\.md", buffer) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_change_simple() +{ + char buffer[FILENAME_MAX]; + size_t n; + + cwk_path_set_style(CWK_STYLE_UNIX); + + n = cwk_path_change_extension("/test.txt", "md", buffer, sizeof(buffer)); + if (n != 8) { + return EXIT_FAILURE; + } + + if (strcmp("/test.md", buffer) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_check_without() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + if (cwk_path_has_extension("/my/path")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_check_empty() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + if (cwk_path_has_extension("")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_check_simple() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + if (!cwk_path_has_extension("/my/path.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_get_multiple() +{ + const char *path, *extension; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/path.abc.txt.tests"; + if (!cwk_path_get_extension(path, &extension, &length)) { + return EXIT_FAILURE; + } + + if (length != 6) { + return EXIT_FAILURE; + } + + if (strncmp(extension, ".tests", length) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_get_last() +{ + const char *path, *extension; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/path."; + if (!cwk_path_get_extension(path, &extension, &length)) { + return EXIT_FAILURE; + } + + if (length != 1) { + return EXIT_FAILURE; + } + + if (strncmp(extension, ".", length) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_get_first() +{ + const char *path, *extension; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/.path"; + if (!cwk_path_get_extension(path, &extension, &length)) { + return EXIT_FAILURE; + } + + if (length != 5) { + return EXIT_FAILURE; + } + + if (strncmp(extension, ".path", length) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_get_without() +{ + const char *path, *extension; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/path"; + if (cwk_path_get_extension(path, &extension, &length)) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int extension_get_simple() +{ + const char *path, *extension; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + path = "/my/path.txt"; + if (!cwk_path_get_extension(path, &extension, &length)) { + return EXIT_FAILURE; + } + + if (length != 4) { + return EXIT_FAILURE; + } + + if (strncmp(extension, ".txt", length) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/guess_test.c b/deps/cwalk/test/guess_test.c new file mode 100644 index 00000000000..3a63b6945e3 --- /dev/null +++ b/deps/cwalk/test/guess_test.c @@ -0,0 +1,105 @@ +#include +#include + +int guess_empty_string() +{ + if (cwk_path_guess_style("") != CWK_STYLE_UNIX) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int guess_unguessable() +{ + if (cwk_path_guess_style("myfile") != CWK_STYLE_UNIX) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int guess_extension() +{ + if (cwk_path_guess_style("myfile.txt") != CWK_STYLE_WINDOWS) { + return EXIT_FAILURE; + } + + if (cwk_path_guess_style("/a/directory/myfile.txt") != CWK_STYLE_UNIX) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int guess_hidden_file() +{ + if (cwk_path_guess_style(".my_hidden_file") != CWK_STYLE_UNIX) { + return EXIT_FAILURE; + } + + if (cwk_path_guess_style(".my_hidden_file.txt") != CWK_STYLE_UNIX) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int guess_unix_separator() +{ + if (cwk_path_guess_style("/directory/other") != CWK_STYLE_UNIX) { + return EXIT_FAILURE; + } + + if (cwk_path_guess_style("/directory/other.txt") != CWK_STYLE_UNIX) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int guess_windows_separator() +{ + if (cwk_path_guess_style("\\directory\\other") != CWK_STYLE_WINDOWS) { + return EXIT_FAILURE; + } + if (cwk_path_guess_style("\\directory\\.other") != CWK_STYLE_WINDOWS) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int guess_unix_root() +{ + if (cwk_path_guess_style("/directory") != CWK_STYLE_UNIX) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int guess_windows_root() +{ + if (cwk_path_guess_style("C:\\test") != CWK_STYLE_WINDOWS) { + return EXIT_FAILURE; + } + + if (cwk_path_guess_style("C:/test") != CWK_STYLE_WINDOWS) { + return EXIT_FAILURE; + } + + if (cwk_path_guess_style("C:test") != CWK_STYLE_WINDOWS) { + return EXIT_FAILURE; + } + + if (cwk_path_guess_style("C:/.test") != CWK_STYLE_WINDOWS) { + return EXIT_FAILURE; + } + + if (cwk_path_guess_style("C:/folder/.test") != CWK_STYLE_WINDOWS) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/intersection_test.c b/deps/cwalk/test/intersection_test.c new file mode 100755 index 00000000000..0bfdae8b906 --- /dev/null +++ b/deps/cwalk/test/intersection_test.c @@ -0,0 +1,132 @@ +#include +#include + +int intersection_skipped_end() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (cwk_path_get_intersection("/test/foo/har/../", "/test/foo/ho") != 9) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_relative_other() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (cwk_path_get_intersection("/test/foo/har", "/test/abc/../foo/bar") != 9) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_relative_base() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (cwk_path_get_intersection("/test/abc/../foo/bar", "/test/foo/har") != + 16) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_one_root_only() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_get_intersection("C:/abc/test.txt", "C:/") != 3) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_same_roots() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_get_intersection("C:/abc/test.txt", "C:/def/test.txt") != 3) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_relative_absolute_mix() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (cwk_path_get_intersection("/test/abc.txt", "test/abc.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_unequal_roots() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_get_intersection("C:/test/abc.txt", "D:/test/abc.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_empty() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (cwk_path_get_intersection("/", "") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_double_separator() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + if (cwk_path_get_intersection("/this///is/a//test", "/this//is/a///file") != + 12) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_trailing_separator() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + if (cwk_path_get_intersection("/this/is/a/test", "/this/is/a/") != 10) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_truncated() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + if (cwk_path_get_intersection("/this/is/a/test", "/this/is/a") != 10) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int intersection_simple() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + if (cwk_path_get_intersection("/this/is/a/test", "/this/is/a/string") != 10) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/is_absolute_test.c b/deps/cwalk/test/is_absolute_test.c new file mode 100755 index 00000000000..d7a2522fd07 --- /dev/null +++ b/deps/cwalk/test/is_absolute_test.c @@ -0,0 +1,145 @@ +#include +#include + +int is_absolute_relative_windows() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_is_absolute("..\\hello\\world.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_relative_drive() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_is_absolute("C:test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_device_question_mark() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (!cwk_path_is_absolute("\\\\?\\mydevice\\test")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_device_dot() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_is_absolute("\\\\.\\mydevice\\test"); + + if (!cwk_path_is_absolute("\\\\.\\mydevice\\test")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_device_unc() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (!cwk_path_is_absolute("\\\\.\\UNC\\LOCALHOST\\c$\\temp\\test-file.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_unc() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (!cwk_path_is_absolute("\\\\server\\folder\\data")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_absolute_drive() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (!cwk_path_is_absolute("C:\\test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_unix_drive() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (cwk_path_is_absolute("C:\\test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_unix_backslash() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (cwk_path_is_absolute("\\folder\\")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_windows_slash() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (!cwk_path_is_absolute("/test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_windows_backslash() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (!cwk_path_is_absolute("\\test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_relative() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (cwk_path_is_absolute("test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_absolute_absolute() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + if (!cwk_path_is_absolute("/test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/is_relative_test.c b/deps/cwalk/test/is_relative_test.c new file mode 100755 index 00000000000..81e5d257fc3 --- /dev/null +++ b/deps/cwalk/test/is_relative_test.c @@ -0,0 +1,145 @@ +#include +#include + +int is_relative_relative_windows() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (!cwk_path_is_relative("..\\hello\\world.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_relative_drive() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (!cwk_path_is_relative("C:test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_device_question_mark() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_is_relative("\\\\?\\mydevice\\test")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_device_dot() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_is_absolute("\\\\.\\mydevice\\test"); + + if (cwk_path_is_relative("\\\\.\\mydevice\\test")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_device_unc() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_is_relative("\\\\.\\UNC\\LOCALHOST\\c$\\temp\\test-file.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_unc() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_is_relative("\\\\server\\folder\\data")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_absolute_drive() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_is_relative("C:\\test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_unix_drive() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (!cwk_path_is_relative("C:\\test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_unix_backslash() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (!cwk_path_is_relative("\\folder\\")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_windows_slash() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_is_relative("/test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_windows_backslash() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_is_relative("\\test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_relative() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + + if (!cwk_path_is_relative("test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int is_relative_absolute() +{ + cwk_path_set_style(CWK_STYLE_UNIX); + if (cwk_path_is_relative("/test.txt")) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/join_test.c b/deps/cwalk/test/join_test.c new file mode 100644 index 00000000000..7f0d7e9c341 --- /dev/null +++ b/deps/cwalk/test/join_test.c @@ -0,0 +1,186 @@ +#include +#include +#include +#include +#include + +int join_multiple() +{ + char buffer[FILENAME_MAX]; + const char *paths[3]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + paths[0] = "hello/there"; + paths[1] = "../world"; + paths[2] = NULL; + + length = cwk_path_join_multiple(paths, buffer, sizeof(buffer)); + + if (length != 11) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "hello/world") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int join_relative_back_after_root() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + length = cwk_path_join("this\\", "C:\\..\\..\\is\\a\\test\\", buffer, + sizeof(buffer)); + + if (length != 9) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "is\\a\\test") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int join_back_after_root() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + length = cwk_path_join("C:\\this\\path", "C:\\..\\is\\a\\test\\", buffer, + sizeof(buffer)); + + if (length != 22) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "C:\\this\\path\\is\\a\\test") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int join_with_two_roots() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + length = cwk_path_join("C:\\this\\path", "C:\\is\\a\\test\\", buffer, + sizeof(buffer)); + + if (length != 25) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "C:\\this\\path\\C:\\is\\a\\test") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int join_two_unc() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + length = cwk_path_join("\\\\server\\unc\\path", "\\\\server2\\unc\\path", + buffer, sizeof(buffer)); + + if (length != 34) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "\\\\server\\unc\\path\\server2\\unc\\path") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int join_two_absolute() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + length = cwk_path_join("/first", "/second", buffer, sizeof(buffer)); + + if (length != 13) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "/first/second") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int join_empty() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + length = cwk_path_join("hello", "..", buffer, sizeof(buffer)); + + if (length != 1) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, ".") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int join_navigate_back() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + length = cwk_path_join("hello/there", "..", buffer, sizeof(buffer)); + + if (length != 5) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "hello") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int join_simple() +{ + char buffer[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + length = cwk_path_join("hello", "there", buffer, sizeof(buffer)); + + if (length != 11) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "hello/there") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/main.c b/deps/cwalk/test/main.c new file mode 100644 index 00000000000..0cd71495596 --- /dev/null +++ b/deps/cwalk/test/main.c @@ -0,0 +1,113 @@ +#include "tests.h" +#include +#include +#include +#include + +/** + * This is just a small macro which calculates the size of an array. + */ +#define CWK_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) + +struct cwk_test +{ + const char *unit_name; + const char *test_name; + const char *full_name; + int (*fn)(void); +}; + +#define XX(u, t) extern int u##_##t(void); +UNIT_TESTS(XX) +#undef XX + +static struct cwk_test tests[] = { +#define XX(u, t) \ + {.unit_name = #u, .test_name = #t, .full_name = #u "/" #t, .fn = u##_##t}, + UNIT_TESTS(XX) +#undef XX +}; + +static int call_test(struct cwk_test *test) +{ + size_t i; + + printf(" Running '%s' ", test->full_name); + for (i = strlen(test->full_name); i < 45; ++i) { + fputs(".", stdout); + } + + if (test->fn() == EXIT_FAILURE) { + fputs(" FAILURE\n", stdout); + return EXIT_FAILURE; + } + + fputs(" SUCCESS\n", stdout); + return EXIT_SUCCESS; +} + +int main(int argc, char *argv[]) +{ + size_t i, count, failed, succeeded; + const char *requested_unit_name, *requested_test_name; + struct cwk_test *test; + double rate; + + count = 0; + failed = 0; + if (argc < 2) { + fputs("No unit specified. Running all tests.\n\n", stdout); + for (i = 0; i < CWK_ARRAY_SIZE(tests); ++i) { + test = &tests[i]; + ++count; + if (call_test(test) == EXIT_FAILURE) { + ++failed; + } + } + } else if (argc < 3) { + requested_unit_name = argv[1]; + printf("Running all unit tests of '%s'.\n\n", requested_unit_name); + for (i = 0; i < CWK_ARRAY_SIZE(tests); ++i) { + test = &tests[i]; + if (strcmp(test->unit_name, requested_unit_name) == 0) { + ++count; + if (call_test(test) == EXIT_FAILURE) { + ++failed; + } + } + } + } else { + requested_unit_name = argv[1]; + requested_test_name = argv[2]; + printf("Running a single test '%s/%s'.\n\n", requested_unit_name, + requested_test_name); + for (i = 0; i < CWK_ARRAY_SIZE(tests); ++i) { + test = &tests[i]; + if (strcmp(test->unit_name, requested_unit_name) == 0 && + strcmp(test->test_name, requested_test_name) == 0) { + ++count; + if (call_test(test) == EXIT_FAILURE) { + ++failed; + } + } + } + } + + if (count == 1) { + fputs("\nThe test has been executed.\n", stdout); + } else if (count > 0) { + succeeded = count - failed; + rate = (double)succeeded / (double)count * 100; + printf("\n%zu/%zu (%.2f%%) of those tests succeeded.\n", succeeded, count, + rate); + } else { + printf("\nNo tests found.\n"); + return EXIT_FAILURE; + } + + if (failed > 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/normalize_test.c b/deps/cwalk/test/normalize_test.c new file mode 100644 index 00000000000..4ab4c2547b0 --- /dev/null +++ b/deps/cwalk/test/normalize_test.c @@ -0,0 +1,242 @@ +#include +#include +#include +#include +#include +#include +#include + +int normalize_back_after_root() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + input = "C:\\..\\this\\is\\a\\test\\path"; + strcpy(result, input); + expected = "C:\\this\\is\\a\\test\\path"; + count = cwk_path_normalize(result, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int normalize_only_separators() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "////"; + strcpy(result, input); + expected = "/"; + count = cwk_path_normalize(result, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int normalize_empty() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "test/.."; + strcpy(result, input); + expected = "."; + count = cwk_path_normalize(result, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int normalize_overlap() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "/var/./logs/.//test/..//..//////"; + strcpy(result, input); + expected = "/var"; + count = cwk_path_normalize(result, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int normalize_mixed() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "/var/./logs/.//test/..//..//////"; + expected = "/var"; + count = cwk_path_normalize(input, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int normalize_remove_current() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "/var/././././"; + expected = "/var"; + count = cwk_path_normalize(input, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int normalize_double_separator() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "/var////logs//test/"; + expected = "/var/logs/test"; + count = cwk_path_normalize(input, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int normalize_terminated() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + size_t i, expected_size, n; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "/var/logs/test/../../"; + expected = "/var"; + expected_size = strlen(expected); + + memset(result, 1, sizeof(result)); + + for (i = 0; i < 7; ++i) { + count = cwk_path_normalize(input, result, i); + + if (i != 0 && expected_size < i) { + n = expected_size; + } else { + n = i - 1; + } + + if (count != strlen(expected) || + (i > 0 && (strncmp(result, expected, n) != 0 || result[n] != '\0'))) { + return EXIT_FAILURE; + } + } + + return EXIT_SUCCESS; +} + +int normalize_relative_too_far() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "rel/../../"; + expected = ".."; + count = cwk_path_normalize(input, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int normalize_absolute_too_far() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "/var/logs/test/../../../../../../"; + expected = "/"; + count = cwk_path_normalize(input, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int normalize_navigate_back() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "/var/logs/test/../../"; + expected = "/var"; + count = cwk_path_normalize(input, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int normalize_do_nothing() +{ + size_t count; + char result[FILENAME_MAX]; + char *input, *expected; + + cwk_path_set_style(CWK_STYLE_UNIX); + + input = "/var"; + expected = "/var"; + count = cwk_path_normalize(input, result, sizeof(result)); + if (count != strlen(expected) || strcmp(result, expected) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/relative_test.c b/deps/cwalk/test/relative_test.c new file mode 100755 index 00000000000..fc98a90509b --- /dev/null +++ b/deps/cwalk/test/relative_test.c @@ -0,0 +1,316 @@ +#include +#include +#include +#include +#include + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) + +int relative_root_path_windows() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + length = cwk_path_get_relative("C:\\this\\is\\path_one", "C:\\", result, + sizeof(result)); + if (length != 8) { + return EXIT_FAILURE; + } + + if (strcmp(result, "..\\..\\..") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_root_path_unix() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("/this/is/path_one", "/", result, + sizeof(result)); + if (length != 8) { + return EXIT_FAILURE; + } + + if (strcmp(result, "../../..") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_check() +{ + const char *relative_paths[] = {"..", "test", "test/test", "../another_test", + "./simple", ".././simple"}; + const char *absolute_paths[] = {"/", "/test", "/../test/", "/../another_test", + "/./simple", "/.././simple"}; + size_t i; + + cwk_path_set_style(CWK_STYLE_UNIX); + + for (i = 0; i < ARRAY_SIZE(relative_paths); ++i) { + if (!cwk_path_is_relative(relative_paths[i])) { + return EXIT_FAILURE; + } + } + + for (i = 0; i < ARRAY_SIZE(absolute_paths); ++i) { + if (cwk_path_is_relative(absolute_paths[i])) { + return EXIT_FAILURE; + } + } + + return EXIT_SUCCESS; +} + +int relative_relative_and_absolute() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + *result = 1; + + length = cwk_path_get_relative("./foo", "/bar", result, sizeof(result)); + + if (length != 0) { + return EXIT_FAILURE; + } + + if (*result != '\0') { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_different_roots() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + *result = 1; + + length = cwk_path_get_relative("C:/path/same", "D:/path/same", result, + sizeof(result)); + + if (length != 0) { + return EXIT_FAILURE; + } + + if (*result != '\0') { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_skip_all() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("/../../", "/../../", result, sizeof(result)); + if (length != 1) { + return EXIT_FAILURE; + } + + if (strcmp(result, ".") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_target_div_skipped_end() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("/path/same", "/path/not_same/ho/..", result, + sizeof(result)); + if (length != 11) { + return EXIT_FAILURE; + } + + if (strcmp(result, "../not_same") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_base_div_skipped_end() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("/path/not_same/ho/..", "/path/same", result, + sizeof(result)); + if (length != 7) { + return EXIT_FAILURE; + } + + if (strcmp(result, "../same") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_target_skipped_end() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("/path/same", "/path/same/ho/..", result, + sizeof(result)); + if (length != 1) { + return EXIT_FAILURE; + } + + if (strcmp(result, ".") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_base_skipped_end() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("/path/same/ho/..", "/path/same", result, + sizeof(result)); + if (length != 1) { + return EXIT_FAILURE; + } + + if (strcmp(result, ".") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_equal() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("/path/same", "/path/same", result, + sizeof(result)); + if (length != 1) { + return EXIT_FAILURE; + } + + if (strcmp(result, ".") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_long_target() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("/path/long/one", "/path/long/one/two", result, + sizeof(result)); + if (length != 3) { + return EXIT_FAILURE; + } + + if (strcmp(result, "two") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_long_base() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("/path/long/one/two", "/path/long/one", result, + sizeof(result)); + if (length != 2) { + return EXIT_FAILURE; + } + + if (strcmp(result, "..") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_relative() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("./this/is/path_one", "./this/is/path_two", + result, sizeof(result)); + if (length != 11) { + return EXIT_FAILURE; + } + + if (strcmp(result, "../path_two") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int relative_simple() +{ + char result[FILENAME_MAX]; + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + + length = cwk_path_get_relative("/this/is/path_one", "/this/is/path_two", + result, sizeof(result)); + if (length != 11) { + return EXIT_FAILURE; + } + + if (strcmp(result, "../path_two") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/root_test.c b/deps/cwalk/test/root_test.c new file mode 100755 index 00000000000..865d3c2a70c --- /dev/null +++ b/deps/cwalk/test/root_test.c @@ -0,0 +1,287 @@ +#include +#include +#include +#include +#include + +int root_change_without_root() +{ + size_t length; + char buffer[FILENAME_MAX] = "hello\\world.txt"; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + length = cwk_path_change_root(buffer, "D:\\", buffer, + sizeof(buffer)); + + if (length != 18) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "D:\\hello\\world.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_change_overlapping() +{ + size_t length; + char buffer[FILENAME_MAX] = "C:\\hello\\world.txt"; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + length = cwk_path_change_root(buffer, "D:\\path\\", buffer, + sizeof(buffer)); + + if (length != 23) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "D:\\path\\hello\\world.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_change_separators() +{ + size_t length; + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + length = cwk_path_change_root("C:\\hello\\world.txt", "D:\\path\\", buffer, + sizeof(buffer)); + + if (length != 23) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "D:\\path\\hello\\world.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_change_empty() +{ + size_t length; + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + length = cwk_path_change_root("C:\\hello\\world.txt", "", buffer, + sizeof(buffer)); + + if (length != 15) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "hello\\world.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_change_simple() +{ + size_t length; + char buffer[FILENAME_MAX]; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + length = cwk_path_change_root("C:\\hello\\world.txt", "D:\\", buffer, + sizeof(buffer)); + + if (length != 18) { + return EXIT_FAILURE; + } + + if (strcmp(buffer, "D:\\hello\\world.txt") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_relative_windows() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("..\\hello\\world.txt", &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_relative_drive() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("C:test.txt", &length); + + if (length != 2) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_device_question_mark() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("\\\\?\\mydevice\\test", &length); + + if (length != 4) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_device_dot() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("\\\\.\\mydevice\\test", &length); + + if (length != 4) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_device_unc() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("\\\\.\\UNC\\LOCALHOST\\c$\\temp\\test-file.txt", &length); + + if (length != 4) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_unc() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("\\\\server\\folder\\data", &length); + + if (length != 16) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_absolute_drive() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("C:\\test.txt", &length); + + if (length != 3) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_unix_drive() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + cwk_path_get_root("C:\\test.txt", &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_unix_backslash() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + cwk_path_get_root("\\folder\\", &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_windows_slash() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("/test.txt", &length); + + if (length != 1) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_windows_backslash() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("\\test.txt", &length); + + if (length != 1) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_relative() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + cwk_path_get_root("test.txt", &length); + + if (length != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int root_absolute() +{ + size_t length; + + cwk_path_set_style(CWK_STYLE_UNIX); + cwk_path_get_root("/test.txt", &length); + + if (length != 1) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/segment_test.c b/deps/cwalk/test/segment_test.c new file mode 100644 index 00000000000..1b3c3116484 --- /dev/null +++ b/deps/cwalk/test/segment_test.c @@ -0,0 +1,690 @@ +#include +#include +#include +#include +#include + +int segment_change_overlap() +{ + char buffer[FILENAME_MAX] = "C:\\this\\cool\\path\\"; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (!cwk_path_get_first_segment(buffer, &segment)) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + cwk_path_change_segment(&segment, "longer_segment", buffer, sizeof(buffer)); + + if (strcmp(buffer, "C:\\this\\longer_segment\\path\\") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_change_with_separator() +{ + const char *path; + char buffer[FILENAME_MAX]; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + path = "C:\\this\\cool\\path\\"; + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + cwk_path_change_segment(&segment, "other\\fancy", buffer, sizeof(buffer)); + + if (strcmp(buffer, "C:\\this\\other\\fancy\\path\\") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_change_empty() +{ + const char *path; + char buffer[FILENAME_MAX]; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + path = "C:\\this\\cool\\path\\"; + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + cwk_path_change_segment(&segment, "", buffer, sizeof(buffer)); + + if (strcmp(buffer, "C:\\this\\\\path\\") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_change_trim() +{ + const char *path; + char buffer[FILENAME_MAX]; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + path = "C:\\this\\cool\\path\\"; + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + cwk_path_change_segment(&segment, "//other/\\\\", buffer, sizeof(buffer)); + + if (strcmp(buffer, "C:\\this\\other\\path\\") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_change_last() +{ + const char *path; + char buffer[FILENAME_MAX]; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + path = "C:\\this\\cool\\path\\"; + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + cwk_path_change_segment(&segment, "other", buffer, sizeof(buffer)); + + if (strcmp(buffer, "C:\\this\\cool\\other\\") != 0) { + return EXIT_FAILURE; + } + + path = "C:\\this\\cool\\path"; + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + cwk_path_change_segment(&segment, "other", buffer, sizeof(buffer)); + + if (strcmp(buffer, "C:\\this\\cool\\other") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_change_first() +{ + const char *path; + char buffer[FILENAME_MAX]; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + path = "C:\\this\\cool\\path\\"; + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + cwk_path_change_segment(&segment, "other", buffer, sizeof(buffer)); + + if (strcmp(buffer, "C:\\other\\cool\\path\\") != 0) { + return EXIT_FAILURE; + } + + path = "this\\cool\\path\\"; + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + cwk_path_change_segment(&segment, "other", buffer, sizeof(buffer)); + + if (strcmp(buffer, "other\\cool\\path\\") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_change_simple() +{ + const char *path; + char buffer[FILENAME_MAX]; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + path = "C:\\this\\cool\\path\\"; + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + cwk_path_change_segment(&segment, "other", buffer, sizeof(buffer)); + + if (strcmp(buffer, "C:\\this\\other\\path\\") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_back_with_root() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + path = "C:\\this\\path"; + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "path", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "this", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_type() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "/a/./../.folder/..folder"; + + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_segment_type(&segment) != CWK_NORMAL) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_segment_type(&segment) != CWK_CURRENT) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_segment_type(&segment) != CWK_BACK) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_segment_type(&segment) != CWK_NORMAL) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_segment_type(&segment) != CWK_NORMAL) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_previous_too_far_root() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "//now/hello_world/abc/"; + + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_previous_too_far() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "//now/hello_world/abc/"; + + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_previous_relative() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "now/hello_world/abc/"; + + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "abc", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "hello_world", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "now", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_previous_absolute() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "/now/hello_world/abc/"; + + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "abc", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "hello_world", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "now", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_previous_relative_one_char_first() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "n/hello_world/abc/"; + + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "abc", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "hello_world", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "n", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + path = "t\\cool\\path\\"; + + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "path", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "cool", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "t", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_previous_absolute_one_char_first() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "/n/hello_world/abc/"; + + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "abc", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "hello_world", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "n", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + cwk_path_set_style(CWK_STYLE_WINDOWS); + + path = "C:\\t\\cool\\path\\"; + + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "path", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "cool", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "t", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (cwk_path_get_previous_segment(&segment)) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_next_too_far() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "/hello_world/abc/"; + + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + if (cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_next() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "/hello_world/abc/"; + + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "hello_world", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (!cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "abc", segment.size) != 0) { + return EXIT_FAILURE; + } + + if (cwk_path_get_next_segment(&segment)) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_last() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "/hello_world/abc"; + + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "abc", segment.size) != 0) { + return EXIT_FAILURE; + } + + path = "hello_world/abc"; + + if (!cwk_path_get_last_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "abc", segment.size) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int segment_first() +{ + const char *path; + struct cwk_segment segment; + + cwk_path_set_style(CWK_STYLE_UNIX); + + path = "/hello_world/abc"; + + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "hello_world", segment.size) != 0) { + return EXIT_FAILURE; + } + + path = "hello_world/abc"; + + if (!cwk_path_get_first_segment(path, &segment)) { + return EXIT_FAILURE; + } + + if (strncmp(segment.begin, "hello_world", segment.size) != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/deps/cwalk/test/windows_test.c b/deps/cwalk/test/windows_test.c new file mode 100755 index 00000000000..7eb80b1843a --- /dev/null +++ b/deps/cwalk/test/windows_test.c @@ -0,0 +1,116 @@ +#include +#include +#include +#include + +int windows_root_empty() +{ + size_t size; + cwk_path_set_style(CWK_STYLE_WINDOWS); + + cwk_path_get_root("", &size); + if (size != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int windows_root_backslash() +{ + size_t size; + cwk_path_set_style(CWK_STYLE_WINDOWS); + + cwk_path_get_root("\\no_network_path\\hello", &size); + if (size != 1) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int windows_intersection_case() +{ + cwk_path_set_style(CWK_STYLE_WINDOWS); + + if (cwk_path_get_intersection("C:\\MYFOLDER\\MYILE.TXT", + "c:\\myfolder\\myile.txt") != 21) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int windows_get_root_relative() +{ + size_t size; + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("C:file.txt", &size); + + if (size != 2) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int windows_get_root_separator() +{ + size_t size; + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("C:/this/is/a/test", &size); + + if (size != 3) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int windows_get_unc_root() +{ + size_t size; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("\\\\server\\share\\test.txt", &size); + + if (size != 15) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int windows_get_root() +{ + size_t size; + + cwk_path_set_style(CWK_STYLE_WINDOWS); + cwk_path_get_root("C:\\test.txt", &size); + + if (size != 3) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int windows_change_style() +{ + enum cwk_path_style style; + + style = cwk_path_get_style(); + if (style == CWK_STYLE_WINDOWS) { + cwk_path_set_style(CWK_STYLE_UNIX); + if (cwk_path_get_style() != CWK_STYLE_UNIX) { + return EXIT_FAILURE; + } + } else { + cwk_path_set_style(CWK_STYLE_WINDOWS); + if (cwk_path_get_style() != CWK_STYLE_WINDOWS) { + return EXIT_FAILURE; + } + } + + return EXIT_SUCCESS; +} diff --git a/deps/icu-small/LICENSE b/deps/icu-small/LICENSE index 970ae074cbf..80b587723a6 100644 --- a/deps/icu-small/LICENSE +++ b/deps/icu-small/LICENSE @@ -1,6 +1,19 @@ -COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE -Copyright © 1991-2020 Unicode, Inc. All rights reserved. +See Terms of Use +for definitions of Unicode Inc.’s Data Files and Software. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2022 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in https://www.unicode.org/copyright.html. Permission is hereby granted, free of charge, to any person obtaining @@ -32,7 +45,7 @@ shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. ---------------------- +---------------------------------------------------------------------- Third-Party Software Licenses @@ -40,7 +53,9 @@ This section contains third-party software notices and/or additional terms for licensed third-party software components included within ICU libraries. -1. ICU License - ICU 1.8.1 to ICU 57.1 +---------------------------------------------------------------------- + +ICU License - ICU 1.8.1 to ICU 57.1 COPYRIGHT AND PERMISSION NOTICE @@ -75,7 +90,9 @@ of the copyright holder. All trademarks and registered trademarks mentioned herein are the property of their respective owners. -2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) +---------------------------------------------------------------------- + +Chinese/Japanese Word Break Dictionary Data (cjdict.txt) # The Google Chrome software developed by Google is licensed under # the BSD license. Other software included in this distribution is @@ -279,7 +296,9 @@ property of their respective owners. # # ---------------COPYING.ipadic-----END---------------------------------- -3. Lao Word Break Dictionary Data (laodict.txt) +---------------------------------------------------------------------- + +Lao Word Break Dictionary Data (laodict.txt) # Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html @@ -319,7 +338,9 @@ property of their respective owners. # OF THE POSSIBILITY OF SUCH DAMAGE. # -------------------------------------------------------------------------- -4. Burmese Word Break Dictionary Data (burmesedict.txt) +---------------------------------------------------------------------- + +Burmese Word Break Dictionary Data (burmesedict.txt) # Copyright (c) 2014 International Business Machines Corporation # and others. All Rights Reserved. @@ -359,7 +380,9 @@ property of their respective owners. # SUCH DAMAGE. # -------------------------------------------------------------------------- -5. Time Zone Database +---------------------------------------------------------------------- + +Time Zone Database ICU uses the public domain data and code derived from Time Zone Database for its time zone support. The ownership of the TZ database @@ -382,7 +405,9 @@ Database section 7. # making a contribution to the database or code waives all rights to # future claims in that contribution or in the TZ Database. -6. Google double-conversion +---------------------------------------------------------------------- + +Google double-conversion Copyright 2006-2011, the V8 project authors. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -410,3 +435,85 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- + +File: aclocal.m4 (only for ICU4C) +Section: pkg.m4 - Macros to locate and utilise pkg-config. + + +Copyright © 2004 Scott James Remnant . +Copyright © 2012-2015 Dan Nicholson + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. + +As a special exception to the GNU General Public License, if you +distribute this file as part of a program that contains a +configuration script generated by Autoconf, you may include it under +the same distribution terms that you use for the rest of that +program. + + +(The condition for the exception is fulfilled because +ICU4C includes a configuration script generated by Autoconf, +namely the `configure` script.) + +---------------------------------------------------------------------- + +File: config.guess (only for ICU4C) + + +This file is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, see . + +As a special exception to the GNU General Public License, if you +distribute this file as part of a program that contains a +configuration script generated by Autoconf, you may include it under +the same distribution terms that you use for the rest of that +program. This Exception is an additional permission under section 7 +of the GNU General Public License, version 3 ("GPLv3"). + + +(The condition for the exception is fulfilled because +ICU4C includes a configuration script generated by Autoconf, +namely the `configure` script.) + +---------------------------------------------------------------------- + +File: install-sh (only for ICU4C) + + +Copyright 1991 by the Massachusetts Institute of Technology + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of M.I.T. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. M.I.T. makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. diff --git a/deps/icu-small/README-FULL-ICU.txt b/deps/icu-small/README-FULL-ICU.txt index a6afcf49529..0c334857689 100644 --- a/deps/icu-small/README-FULL-ICU.txt +++ b/deps/icu-small/README-FULL-ICU.txt @@ -1,8 +1,8 @@ ICU sources - auto generated by shrink-icu-src.py This directory contains the ICU subset used by --with-intl=full-icu -It is a strict subset of ICU 70 source files with the following exception(s): -* deps/icu-small/source/data/in/icudt70l.dat.bz2 : compressed data file +It is a strict subset of ICU 71 source files with the following exception(s): +* deps/icu-small/source/data/in/icudt71l.dat.bz2 : compressed data file To rebuild this directory, see ../../tools/icu/README.md diff --git a/deps/icu-small/source/common/BUILD b/deps/icu-small/source/common/BUILD.bazel similarity index 100% rename from deps/icu-small/source/common/BUILD rename to deps/icu-small/source/common/BUILD.bazel diff --git a/deps/icu-small/source/common/brkeng.cpp b/deps/icu-small/source/common/brkeng.cpp index 52e9c53621d..dc9fb99bf19 100644 --- a/deps/icu-small/source/common/brkeng.cpp +++ b/deps/icu-small/source/common/brkeng.cpp @@ -79,6 +79,7 @@ UnhandledEngine::findBreaks( UText *text, int32_t /* startPos */, int32_t endPos, UVector32 &/*foundBreaks*/, + UBool /* isPhraseBreaking */, UErrorCode &status) const { if (U_FAILURE(status)) return 0; UChar32 c = utext_current32(text); diff --git a/deps/icu-small/source/common/brkeng.h b/deps/icu-small/source/common/brkeng.h index 6843f1cc953..127ba59e186 100644 --- a/deps/icu-small/source/common/brkeng.h +++ b/deps/icu-small/source/common/brkeng.h @@ -75,6 +75,7 @@ class LanguageBreakEngine : public UMemory { int32_t startPos, int32_t endPos, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode &status) const = 0; }; @@ -194,6 +195,7 @@ class UnhandledEngine : public LanguageBreakEngine { int32_t startPos, int32_t endPos, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode &status) const override; /** diff --git a/deps/icu-small/source/common/brkiter.cpp b/deps/icu-small/source/common/brkiter.cpp index 8b228acf2c3..8a1915880ee 100644 --- a/deps/icu-small/source/common/brkiter.cpp +++ b/deps/icu-small/source/common/brkiter.cpp @@ -30,6 +30,7 @@ #include "unicode/ures.h" #include "unicode/ustring.h" #include "unicode/filteredbrk.h" +#include "bytesinkutil.h" #include "ucln_cmn.h" #include "cstring.h" #include "umutex.h" @@ -115,7 +116,7 @@ BreakIterator::buildInstance(const Locale& loc, const char *type, UErrorCode &st } // Create a RuleBasedBreakIterator - result = new RuleBasedBreakIterator(file, status); + result = new RuleBasedBreakIterator(file, uprv_strstr(type, "phrase") != NULL, status); // If there is a result, set the valid locale and actual locale, and the kind if (U_SUCCESS(status) && result != NULL) { @@ -408,7 +409,6 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) if (U_FAILURE(status)) { return NULL; } - char lbType[kKeyValueLenMax]; BreakIterator *result = NULL; switch (kind) { @@ -428,18 +428,29 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) break; case UBRK_LINE: { + char lb_lw[kKeyValueLenMax]; UTRACE_ENTRY(UTRACE_UBRK_CREATE_LINE); - uprv_strcpy(lbType, "line"); - char lbKeyValue[kKeyValueLenMax] = {0}; + uprv_strcpy(lb_lw, "line"); UErrorCode kvStatus = U_ZERO_ERROR; - int32_t kLen = loc.getKeywordValue("lb", lbKeyValue, kKeyValueLenMax, kvStatus); - if (U_SUCCESS(kvStatus) && kLen > 0 && (uprv_strcmp(lbKeyValue,"strict")==0 || uprv_strcmp(lbKeyValue,"normal")==0 || uprv_strcmp(lbKeyValue,"loose")==0)) { - uprv_strcat(lbType, "_"); - uprv_strcat(lbType, lbKeyValue); + CharString value; + CharStringByteSink valueSink(&value); + loc.getKeywordValue("lb", valueSink, kvStatus); + if (U_SUCCESS(kvStatus) && (value == "strict" || value == "normal" || value == "loose")) { + uprv_strcat(lb_lw, "_"); + uprv_strcat(lb_lw, value.data()); } - result = BreakIterator::buildInstance(loc, lbType, status); + // lw=phrase is only supported in Japanese. + if (uprv_strcmp(loc.getLanguage(), "ja") == 0) { + value.clear(); + loc.getKeywordValue("lw", valueSink, kvStatus); + if (U_SUCCESS(kvStatus) && value == "phrase") { + uprv_strcat(lb_lw, "_"); + uprv_strcat(lb_lw, value.data()); + } + } + result = BreakIterator::buildInstance(loc, lb_lw, status); - UTRACE_DATA1(UTRACE_INFO, "lb=%s", lbKeyValue); + UTRACE_DATA1(UTRACE_INFO, "lb_lw=%s", lb_lw); UTRACE_EXIT_STATUS(status); } break; diff --git a/deps/icu-small/source/common/dictbe.cpp b/deps/icu-small/source/common/dictbe.cpp index 4d158e3226d..4fdbdf2760f 100644 --- a/deps/icu-small/source/common/dictbe.cpp +++ b/deps/icu-small/source/common/dictbe.cpp @@ -17,7 +17,10 @@ #include "dictbe.h" #include "unicode/uniset.h" #include "unicode/chariter.h" +#include "unicode/resbund.h" #include "unicode/ubrk.h" +#include "unicode/usetiter.h" +#include "ubrkimpl.h" #include "utracimp.h" #include "uvectr32.h" #include "uvector.h" @@ -48,6 +51,7 @@ DictionaryBreakEngine::findBreaks( UText *text, int32_t startPos, int32_t endPos, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode& status) const { if (U_FAILURE(status)) return 0; (void)startPos; // TODO: remove this param? @@ -68,7 +72,7 @@ DictionaryBreakEngine::findBreaks( UText *text, } rangeStart = start; rangeEnd = current; - result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks, status); + result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks, isPhraseBreaking, status); utext_setNativeIndex(text, current); return result; @@ -199,13 +203,13 @@ ThaiBreakEngine::ThaiBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode { UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE); UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Thai"); - fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status); + UnicodeSet thaiWordSet(UnicodeString(u"[[:Thai:]&[:LineBreak=SA:]]"), status); if (U_SUCCESS(status)) { - setCharacters(fThaiWordSet); + setCharacters(thaiWordSet); } - fMarkSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]&[:M:]]"), status); + fMarkSet.applyPattern(UnicodeString(u"[[:Thai:]&[:LineBreak=SA:]&[:M:]]"), status); fMarkSet.add(0x0020); - fEndWordSet = fThaiWordSet; + fEndWordSet = thaiWordSet; fEndWordSet.remove(0x0E31); // MAI HAN-AKAT fEndWordSet.remove(0x0E40, 0x0E44); // SARA E through SARA AI MAIMALAI fBeginWordSet.add(0x0E01, 0x0E2E); // KO KAI through HO NOKHUK @@ -230,6 +234,7 @@ ThaiBreakEngine::divideUpDictionaryRange( UText *text, int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool /* isPhraseBreaking */, UErrorCode& status) const { if (U_FAILURE(status)) return 0; utext_setNativeIndex(text, rangeStart); @@ -441,13 +446,13 @@ LaoBreakEngine::LaoBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &s { UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE); UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Laoo"); - fLaoWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Laoo:]&[:LineBreak=SA:]]"), status); + UnicodeSet laoWordSet(UnicodeString(u"[[:Laoo:]&[:LineBreak=SA:]]"), status); if (U_SUCCESS(status)) { - setCharacters(fLaoWordSet); + setCharacters(laoWordSet); } - fMarkSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Laoo:]&[:LineBreak=SA:]&[:M:]]"), status); + fMarkSet.applyPattern(UnicodeString(u"[[:Laoo:]&[:LineBreak=SA:]&[:M:]]"), status); fMarkSet.add(0x0020); - fEndWordSet = fLaoWordSet; + fEndWordSet = laoWordSet; fEndWordSet.remove(0x0EC0, 0x0EC4); // prefix vowels fBeginWordSet.add(0x0E81, 0x0EAE); // basic consonants (including holes for corresponding Thai characters) fBeginWordSet.add(0x0EDC, 0x0EDD); // digraph consonants (no Thai equivalent) @@ -469,6 +474,7 @@ LaoBreakEngine::divideUpDictionaryRange( UText *text, int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool /* isPhraseBreaking */, UErrorCode& status) const { if (U_FAILURE(status)) return 0; if ((rangeEnd - rangeStart) < LAO_MIN_WORD_SPAN) { @@ -637,14 +643,13 @@ BurmeseBreakEngine::BurmeseBreakEngine(DictionaryMatcher *adoptDictionary, UErro { UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE); UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Mymr"); - fBurmeseWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Mymr:]&[:LineBreak=SA:]]"), status); + fBeginWordSet.add(0x1000, 0x102A); // basic consonants and independent vowels + fEndWordSet.applyPattern(UnicodeString(u"[[:Mymr:]&[:LineBreak=SA:]]"), status); + fMarkSet.applyPattern(UnicodeString(u"[[:Mymr:]&[:LineBreak=SA:]&[:M:]]"), status); + fMarkSet.add(0x0020); if (U_SUCCESS(status)) { - setCharacters(fBurmeseWordSet); + setCharacters(fEndWordSet); } - fMarkSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Mymr:]&[:LineBreak=SA:]&[:M:]]"), status); - fMarkSet.add(0x0020); - fEndWordSet = fBurmeseWordSet; - fBeginWordSet.add(0x1000, 0x102A); // basic consonants and independent vowels // Compact for caching. fMarkSet.compact(); @@ -662,6 +667,7 @@ BurmeseBreakEngine::divideUpDictionaryRange( UText *text, int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool /* isPhraseBreaking */, UErrorCode& status ) const { if (U_FAILURE(status)) return 0; if ((rangeEnd - rangeStart) < BURMESE_MIN_WORD_SPAN) { @@ -830,13 +836,13 @@ KhmerBreakEngine::KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCod { UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE); UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Khmr"); - fKhmerWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Khmr:]&[:LineBreak=SA:]]"), status); + UnicodeSet khmerWordSet(UnicodeString(u"[[:Khmr:]&[:LineBreak=SA:]]"), status); if (U_SUCCESS(status)) { - setCharacters(fKhmerWordSet); + setCharacters(khmerWordSet); } - fMarkSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Khmr:]&[:LineBreak=SA:]&[:M:]]"), status); + fMarkSet.applyPattern(UnicodeString(u"[[:Khmr:]&[:LineBreak=SA:]&[:M:]]"), status); fMarkSet.add(0x0020); - fEndWordSet = fKhmerWordSet; + fEndWordSet = khmerWordSet; fBeginWordSet.add(0x1780, 0x17B3); //fBeginWordSet.add(0x17A3, 0x17A4); // deprecated vowels //fEndWordSet.remove(0x17A5, 0x17A9); // Khmer independent vowels that can't end a word @@ -867,6 +873,7 @@ KhmerBreakEngine::divideUpDictionaryRange( UText *text, int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool /* isPhraseBreaking */, UErrorCode& status ) const { if (U_FAILURE(status)) return 0; if ((rangeEnd - rangeStart) < KHMER_MIN_WORD_SPAN) { @@ -1050,25 +1057,27 @@ CjkBreakEngine::CjkBreakEngine(DictionaryMatcher *adoptDictionary, LanguageType : DictionaryBreakEngine(), fDictionary(adoptDictionary) { UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE); UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Hani"); - // Korean dictionary only includes Hangul syllables - fHangulWordSet.applyPattern(UNICODE_STRING_SIMPLE("[\\uac00-\\ud7a3]"), status); - fHanWordSet.applyPattern(UNICODE_STRING_SIMPLE("[:Han:]"), status); - fKatakanaWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Katakana:]\\uff9e\\uff9f]"), status); - fHiraganaWordSet.applyPattern(UNICODE_STRING_SIMPLE("[:Hiragana:]"), status); nfkcNorm2 = Normalizer2::getNFKCInstance(status); - - if (U_SUCCESS(status)) { - // handle Korean and Japanese/Chinese using different dictionaries - if (type == kKorean) { + // Korean dictionary only includes Hangul syllables + fHangulWordSet.applyPattern(UnicodeString(u"[\\uac00-\\ud7a3]"), status); + fHangulWordSet.compact(); + // Digits, open puncutation and Alphabetic characters. + fDigitOrOpenPunctuationOrAlphabetSet.applyPattern( + UnicodeString(u"[[:Nd:][:Pi:][:Ps:][:Alphabetic:]]"), status); + fDigitOrOpenPunctuationOrAlphabetSet.compact(); + fClosePunctuationSet.applyPattern(UnicodeString(u"[[:Pc:][:Pd:][:Pe:][:Pf:][:Po:]]"), status); + fClosePunctuationSet.compact(); + + // handle Korean and Japanese/Chinese using different dictionaries + if (type == kKorean) { + if (U_SUCCESS(status)) { setCharacters(fHangulWordSet); - } else { //Chinese and Japanese - UnicodeSet cjSet; - cjSet.addAll(fHanWordSet); - cjSet.addAll(fKatakanaWordSet); - cjSet.addAll(fHiraganaWordSet); - cjSet.add(0xFF70); // HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK - cjSet.add(0x30FC); // KATAKANA-HIRAGANA PROLONGED SOUND MARK + } + } else { //Chinese and Japanese + UnicodeSet cjSet(UnicodeString(u"[[:Han:][:Hiragana:][:Katakana:]\\u30fc\\uff70\\uff9e\\uff9f]"), status); + if (U_SUCCESS(status)) { setCharacters(cjSet); + initJapanesePhraseParameter(status); } } UTRACE_EXIT_STATUS(status); @@ -1096,14 +1105,12 @@ static inline bool isKatakana(UChar32 value) { (value >= 0xFF66 && value <= 0xFF9f); } - // Function for accessing internal utext flags. // Replicates an internal UText function. static inline int32_t utext_i32_flag(int32_t bitIndex) { return (int32_t)1 << bitIndex; } - /* * @param text A UText representing the text @@ -1117,6 +1124,7 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode& status) const { if (U_FAILURE(status)) return 0; if (rangeStart >= rangeEnd) { @@ -1347,6 +1355,31 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, if ((uint32_t)bestSnlp.elementAti(numCodePts) == kuint32max) { t_boundary.addElement(numCodePts, status); numBreaks++; + } else if (isPhraseBreaking) { + t_boundary.addElement(numCodePts, status); + if(U_SUCCESS(status)) { + numBreaks++; + int32_t prevIdx = numCodePts; + + int32_t codeUnitIdx = -1; + int32_t prevCodeUnitIdx = -1; + int32_t length = -1; + for (int32_t i = prev.elementAti(numCodePts); i > 0; i = prev.elementAti(i)) { + codeUnitIdx = inString.moveIndex32(0, i); + prevCodeUnitIdx = inString.moveIndex32(0, prevIdx); + // Calculate the length by using the code unit. + length = prevCodeUnitIdx - codeUnitIdx; + prevIdx = i; + // Keep the breakpoint if the pattern is not in the fSkipSet and continuous Katakana + // characters don't occur. + if (!fSkipSet.containsKey(inString.tempSubString(codeUnitIdx, length)) + && (!isKatakana(inString.char32At(inString.moveIndex32(codeUnitIdx, -1))) + || !isKatakana(inString.char32At(codeUnitIdx)))) { + t_boundary.addElement(i, status); + numBreaks++; + } + } + } } else { for (int32_t i = numCodePts; i > 0; i = prev.elementAti(i)) { t_boundary.addElement(i, status); @@ -1367,7 +1400,8 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, // while reversing t_boundary and pushing values to foundBreaks. int32_t prevCPPos = -1; int32_t prevUTextPos = -1; - for (int32_t i = numBreaks-1; i >= 0; i--) { + int32_t correctedNumBreaks = 0; + for (int32_t i = numBreaks - 1; i >= 0; i--) { int32_t cpPos = t_boundary.elementAti(i); U_ASSERT(cpPos > prevCPPos); int32_t utextPos = inputMap.isValid() ? inputMap->elementAti(cpPos) : cpPos + rangeStart; @@ -1375,7 +1409,15 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, if (utextPos > prevUTextPos) { // Boundaries are added to foundBreaks output in ascending order. U_ASSERT(foundBreaks.size() == 0 || foundBreaks.peeki() < utextPos); - foundBreaks.push(utextPos, status); + // In phrase breaking, there has to be a breakpoint between Cj character and close + // punctuation. + // E.g.[携帯電話]正しい選択 -> [携帯▁電話]▁正しい▁選択 -> breakpoint between ] and 正 + if (utextPos != rangeStart + || (isPhraseBreaking && utextPos > 0 + && fClosePunctuationSet.contains(utext_char32At(inText, utextPos - 1)))) { + foundBreaks.push(utextPos, status); + correctedNumBreaks++; + } } else { // Normalization expanded the input text, the dictionary found a boundary // within the expansion, giving two boundaries with the same index in the @@ -1387,9 +1429,52 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, } (void)prevCPPos; // suppress compiler warnings about unused variable + UChar32 nextChar = utext_char32At(inText, rangeEnd); + if (!foundBreaks.isEmpty() && foundBreaks.peeki() == rangeEnd) { + // In phrase breaking, there has to be a breakpoint between Cj character and + // the number/open punctuation. + // E.g. る文字「そうだ、京都」->る▁文字▁「そうだ、▁京都」-> breakpoint between 字 and「 + // E.g. 乗車率90%程度だろうか -> 乗車▁率▁90%▁程度だろうか -> breakpoint between 率 and 9 + // E.g. しかもロゴがUnicode! -> しかも▁ロゴが▁Unicode!-> breakpoint between が and U + if (isPhraseBreaking) { + if (!fDigitOrOpenPunctuationOrAlphabetSet.contains(nextChar)) { + foundBreaks.popi(); + correctedNumBreaks--; + } + } else { + foundBreaks.popi(); + correctedNumBreaks--; + } + } + // inString goes out of scope // inputMap goes out of scope - return numBreaks; + return correctedNumBreaks; +} + +void CjkBreakEngine::initJapanesePhraseParameter(UErrorCode& error) { + loadJapaneseExtensions(error); + loadHiragana(error); +} + +void CjkBreakEngine::loadJapaneseExtensions(UErrorCode& error) { + const char* tag = "extensions"; + ResourceBundle ja(U_ICUDATA_BRKITR, "ja", error); + if (U_SUCCESS(error)) { + ResourceBundle bundle = ja.get(tag, error); + while (U_SUCCESS(error) && bundle.hasNext()) { + fSkipSet.puti(bundle.getNextString(error), 1, error); + } + } +} + +void CjkBreakEngine::loadHiragana(UErrorCode& error) { + UnicodeSet hiraganaWordSet(UnicodeString(u"[:Hiragana:]"), error); + hiraganaWordSet.compact(); + UnicodeSetIterator iterator(hiraganaWordSet); + while (iterator.next()) { + fSkipSet.puti(UnicodeString(iterator.getCodepoint()), 1, error); + } } #endif diff --git a/deps/icu-small/source/common/dictbe.h b/deps/icu-small/source/common/dictbe.h index 4e70ed38171..ca1a3c28b7b 100644 --- a/deps/icu-small/source/common/dictbe.h +++ b/deps/icu-small/source/common/dictbe.h @@ -15,6 +15,7 @@ #include "unicode/utext.h" #include "brkeng.h" +#include "hash.h" #include "uvectr32.h" U_NAMESPACE_BEGIN @@ -80,6 +81,7 @@ class DictionaryBreakEngine : public LanguageBreakEngine { int32_t startPos, int32_t endPos, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode& status ) const override; protected: @@ -105,6 +107,7 @@ class DictionaryBreakEngine : public LanguageBreakEngine { int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode& status) const = 0; }; @@ -127,7 +130,6 @@ class ThaiBreakEngine : public DictionaryBreakEngine { * @internal */ - UnicodeSet fThaiWordSet; UnicodeSet fEndWordSet; UnicodeSet fBeginWordSet; UnicodeSet fSuffixSet; @@ -164,6 +166,7 @@ class ThaiBreakEngine : public DictionaryBreakEngine { int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode& status) const override; }; @@ -186,7 +189,6 @@ class LaoBreakEngine : public DictionaryBreakEngine { * @internal */ - UnicodeSet fLaoWordSet; UnicodeSet fEndWordSet; UnicodeSet fBeginWordSet; UnicodeSet fMarkSet; @@ -222,6 +224,7 @@ class LaoBreakEngine : public DictionaryBreakEngine { int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode& status) const override; }; @@ -244,7 +247,6 @@ class BurmeseBreakEngine : public DictionaryBreakEngine { * @internal */ - UnicodeSet fBurmeseWordSet; UnicodeSet fEndWordSet; UnicodeSet fBeginWordSet; UnicodeSet fMarkSet; @@ -280,6 +282,7 @@ class BurmeseBreakEngine : public DictionaryBreakEngine { int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode& status) const override; }; @@ -302,7 +305,6 @@ class KhmerBreakEngine : public DictionaryBreakEngine { * @internal */ - UnicodeSet fKhmerWordSet; UnicodeSet fEndWordSet; UnicodeSet fBeginWordSet; UnicodeSet fMarkSet; @@ -338,6 +340,7 @@ class KhmerBreakEngine : public DictionaryBreakEngine { int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode& status) const override; }; @@ -366,13 +369,22 @@ class CjkBreakEngine : public DictionaryBreakEngine { * @internal */ UnicodeSet fHangulWordSet; - UnicodeSet fHanWordSet; - UnicodeSet fKatakanaWordSet; - UnicodeSet fHiraganaWordSet; + UnicodeSet fDigitOrOpenPunctuationOrAlphabetSet; + UnicodeSet fClosePunctuationSet; DictionaryMatcher *fDictionary; const Normalizer2 *nfkcNorm2; + private: + // Load Japanese extensions. + void loadJapaneseExtensions(UErrorCode& error); + // Load Japanese Hiragana. + void loadHiragana(UErrorCode& error); + // Initialize fSkipSet by loading Japanese Hiragana and extensions. + void initJapanesePhraseParameter(UErrorCode& error); + + Hashtable fSkipSet; + public: /** @@ -404,6 +416,7 @@ class CjkBreakEngine : public DictionaryBreakEngine { int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode& status) const override; }; diff --git a/deps/icu-small/source/common/localematcher.cpp b/deps/icu-small/source/common/localematcher.cpp index 3d178dfbaf1..2cad708d99f 100644 --- a/deps/icu-small/source/common/localematcher.cpp +++ b/deps/icu-small/source/common/localematcher.cpp @@ -168,12 +168,9 @@ void LocaleMatcher::Builder::clearSupportedLocales() { bool LocaleMatcher::Builder::ensureSupportedLocaleVector() { if (U_FAILURE(errorCode_)) { return false; } if (supportedLocales_ != nullptr) { return true; } - supportedLocales_ = new UVector(uprv_deleteUObject, nullptr, errorCode_); + LocalPointer lpSupportedLocales(new UVector(uprv_deleteUObject, nullptr, errorCode_), errorCode_); if (U_FAILURE(errorCode_)) { return false; } - if (supportedLocales_ == nullptr) { - errorCode_ = U_MEMORY_ALLOCATION_ERROR; - return false; - } + supportedLocales_ = lpSupportedLocales.orphan(); return true; } @@ -187,9 +184,8 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::setSupportedLocalesFromListStrin for (int32_t i = 0; i < length; ++i) { Locale *locale = list.orphanLocaleAt(i); if (locale == nullptr) { continue; } - supportedLocales_->addElementX(locale, errorCode_); + supportedLocales_->adoptElement(locale, errorCode_); if (U_FAILURE(errorCode_)) { - delete locale; break; } } @@ -197,35 +193,21 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::setSupportedLocalesFromListStrin } LocaleMatcher::Builder &LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator &locales) { - if (U_FAILURE(errorCode_)) { return *this; } - clearSupportedLocales(); - if (!ensureSupportedLocaleVector()) { return *this; } - while (locales.hasNext()) { - const Locale &locale = locales.next(); - Locale *clone = locale.clone(); - if (clone == nullptr) { - errorCode_ = U_MEMORY_ALLOCATION_ERROR; - break; - } - supportedLocales_->addElementX(clone, errorCode_); - if (U_FAILURE(errorCode_)) { - delete clone; - break; + if (ensureSupportedLocaleVector()) { + clearSupportedLocales(); + while (locales.hasNext() && U_SUCCESS(errorCode_)) { + const Locale &locale = locales.next(); + LocalPointer clone (locale.clone(), errorCode_); + supportedLocales_->adoptElement(clone.orphan(), errorCode_); } } return *this; } LocaleMatcher::Builder &LocaleMatcher::Builder::addSupportedLocale(const Locale &locale) { - if (!ensureSupportedLocaleVector()) { return *this; } - Locale *clone = locale.clone(); - if (clone == nullptr) { - errorCode_ = U_MEMORY_ALLOCATION_ERROR; - return *this; - } - supportedLocales_->addElementX(clone, errorCode_); - if (U_FAILURE(errorCode_)) { - delete clone; + if (ensureSupportedLocaleVector()) { + LocalPointer clone(locale.clone(), errorCode_); + supportedLocales_->adoptElement(clone.orphan(), errorCode_); } return *this; } diff --git a/deps/icu-small/source/common/locid.cpp b/deps/icu-small/source/common/locid.cpp index e8859c7048b..73bb8d8aec1 100644 --- a/deps/icu-small/source/common/locid.cpp +++ b/deps/icu-small/source/common/locid.cpp @@ -1204,14 +1204,11 @@ AliasReplacer::parseLanguageReplacement( // We have multiple field so we have to allocate and parse CharString* str = new CharString( replacement, (int32_t)uprv_strlen(replacement), status); + LocalPointer lpStr(str, status); + toBeFreed.adoptElement(lpStr.orphan(), status); if (U_FAILURE(status)) { return; } - if (str == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - toBeFreed.addElementX(str, status); char* data = str->data(); replacedLanguage = (const char*) data; char* endOfField = uprv_strchr(data, '_'); @@ -1420,12 +1417,9 @@ AliasReplacer::replaceTerritory(UVector& toBeFreed, UErrorCode& status) (int32_t)(firstSpace - replacement), status), status); } if (U_FAILURE(status)) { return false; } - if (item.isNull()) { - status = U_MEMORY_ALLOCATION_ERROR; - return false; - } replacedRegion = item->data(); - toBeFreed.addElementX(item.orphan(), status); + toBeFreed.adoptElement(item.orphan(), status); + if (U_FAILURE(status)) { return false; } } U_ASSERT(!same(region, replacedRegion)); region = replacedRegion; @@ -1659,10 +1653,10 @@ AliasReplacer::replace(const Locale& locale, CharString& out, UErrorCode& status while ((end = uprv_strchr(start, SEP_CHAR)) != nullptr && U_SUCCESS(status)) { *end = NULL_CHAR; // null terminate inside variantsBuff - variants.addElementX(start, status); + variants.addElement(start, status); start = end + 1; } - variants.addElementX(start, status); + variants.addElement(start, status); } if (U_FAILURE(status)) { return false; } diff --git a/deps/icu-small/source/common/lstmbe.cpp b/deps/icu-small/source/common/lstmbe.cpp index 3793abceb3f..f6114cdfe25 100644 --- a/deps/icu-small/source/common/lstmbe.cpp +++ b/deps/icu-small/source/common/lstmbe.cpp @@ -1,8 +1,8 @@ // © 2021 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html +#include #include -#include #include "unicode/utypes.h" @@ -639,6 +639,7 @@ LSTMBreakEngine::divideUpDictionaryRange( UText *text, int32_t startPos, int32_t endPos, UVector32 &foundBreaks, + UBool /* isPhraseBreaking */, UErrorCode& status) const { if (U_FAILURE(status)) return 0; int32_t beginFoundBreakSize = foundBreaks.size(); diff --git a/deps/icu-small/source/common/lstmbe.h b/deps/icu-small/source/common/lstmbe.h index c3f7ecf8154..ffdf805eca2 100644 --- a/deps/icu-small/source/common/lstmbe.h +++ b/deps/icu-small/source/common/lstmbe.h @@ -62,6 +62,7 @@ class LSTMBreakEngine : public DictionaryBreakEngine { int32_t rangeStart, int32_t rangeEnd, UVector32 &foundBreaks, + UBool isPhraseBreaking, UErrorCode& status) const override; private: const LSTMData* fData; diff --git a/deps/icu-small/source/common/normalizer2impl.cpp b/deps/icu-small/source/common/normalizer2impl.cpp index 5bfd49e8cb9..e6bd75e7173 100644 --- a/deps/icu-small/source/common/normalizer2impl.cpp +++ b/deps/icu-small/source/common/normalizer2impl.cpp @@ -2496,15 +2496,18 @@ void CanonIterData::addToStartSet(UChar32 origin, UChar32 decompLead, UErrorCode // origin is not the first character, or it is U+0000. UnicodeSet *set; if((canonValue&CANON_HAS_SET)==0) { - set=new UnicodeSet; - if(set==NULL) { - errorCode=U_MEMORY_ALLOCATION_ERROR; + LocalPointer lpSet(new UnicodeSet, errorCode); + set=lpSet.getAlias(); + if(U_FAILURE(errorCode)) { return; } UChar32 firstOrigin=(UChar32)(canonValue&CANON_VALUE_MASK); canonValue=(canonValue&~CANON_VALUE_MASK)|CANON_HAS_SET|(uint32_t)canonStartSets.size(); umutablecptrie_set(mutableTrie, decompLead, canonValue, &errorCode); - canonStartSets.addElementX(set, errorCode); + canonStartSets.adoptElement(lpSet.orphan(), errorCode); + if (U_FAILURE(errorCode)) { + return; + } if(firstOrigin!=0) { set->add(firstOrigin); } diff --git a/deps/icu-small/source/common/rbbi.cpp b/deps/icu-small/source/common/rbbi.cpp index f65177f2323..cae8d154b30 100644 --- a/deps/icu-small/source/common/rbbi.cpp +++ b/deps/icu-small/source/common/rbbi.cpp @@ -82,6 +82,19 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode } } +//------------------------------------------------------------------------------- +// +// Constructor from a UDataMemory handle to precompiled break rules +// stored in an ICU data file. This construcotr is private API, +// only for internal use. +// +//------------------------------------------------------------------------------- +RuleBasedBreakIterator::RuleBasedBreakIterator(UDataMemory* udm, UBool isPhraseBreaking, + UErrorCode &status) : RuleBasedBreakIterator(udm, status) +{ + fIsPhraseBreaking = isPhraseBreaking; +} + // // Construct from precompiled binary rules (tables). This constructor is public API, // taking the rules as a (const uint8_t *) to match the type produced by getBinaryRules(). @@ -322,6 +335,7 @@ void RuleBasedBreakIterator::init(UErrorCode &status) { fBreakCache = nullptr; fDictionaryCache = nullptr; fLookAheadMatches = nullptr; + fIsPhraseBreaking = false; // Note: IBM xlC is unable to assign or initialize member fText from UTEXT_INITIALIZER. // fText = UTEXT_INITIALIZER; diff --git a/deps/icu-small/source/common/rbbi_cache.cpp b/deps/icu-small/source/common/rbbi_cache.cpp index 6bfe3feca49..26d82df7811 100644 --- a/deps/icu-small/source/common/rbbi_cache.cpp +++ b/deps/icu-small/source/common/rbbi_cache.cpp @@ -163,7 +163,7 @@ void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPo // Ask the language object if there are any breaks. It will add them to the cache and // leave the text pointer on the other side of its range, ready to search for the next one. if (lbe != NULL) { - foundBreakCount += lbe->findBreaks(text, rangeStart, rangeEnd, fBreaks, status); + foundBreakCount += lbe->findBreaks(text, rangeStart, rangeEnd, fBreaks, fBI->fIsPhraseBreaking, status); } // Reload the loop variables for the next go-round diff --git a/deps/icu-small/source/common/serv.cpp b/deps/icu-small/source/common/serv.cpp index 0c54a4dce99..c26dbca1a9c 100644 --- a/deps/icu-small/source/common/serv.cpp +++ b/deps/icu-small/source/common/serv.cpp @@ -625,10 +625,7 @@ ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorC } } - LocalPointer idClone(new UnicodeString(*id), status); - if (U_SUCCESS(status) && idClone->isBogus()) { - status = U_MEMORY_ALLOCATION_ERROR; - } + LocalPointer idClone(id->clone(), status); result.adoptElement(idClone.orphan(), status); } delete fallbackKey; diff --git a/deps/icu-small/source/common/servls.cpp b/deps/icu-small/source/common/servls.cpp index 7108afd4a52..98f0a8a12b0 100644 --- a/deps/icu-small/source/common/servls.cpp +++ b/deps/icu-small/source/common/servls.cpp @@ -179,7 +179,8 @@ class ServiceEnumeration : public StringEnumeration { length = other._ids.size(); for(i = 0; i < length; ++i) { - _ids.addElementX(((UnicodeString *)other._ids.elementAt(i))->clone(), status); + LocalPointer clonedId(((UnicodeString *)other._ids.elementAt(i))->clone(), status); + _ids.adoptElement(clonedId.orphan(), status); } if(U_SUCCESS(status)) { diff --git a/deps/icu-small/source/common/servnotf.cpp b/deps/icu-small/source/common/servnotf.cpp index 342e0d9f24d..d9fb3887520 100644 --- a/deps/icu-small/source/common/servnotf.cpp +++ b/deps/icu-small/source/common/servnotf.cpp @@ -49,7 +49,11 @@ ICUNotifier::addListener(const EventListener* l, UErrorCode& status) if (acceptsListener(*l)) { Mutex lmx(¬ifyLock); if (listeners == NULL) { - listeners = new UVector(5, status); + LocalPointer lpListeners(new UVector(5, status), status); + if (U_FAILURE(status)) { + return; + } + listeners = lpListeners.orphan(); } else { for (int i = 0, e = listeners->size(); i < e; ++i) { const EventListener* el = (const EventListener*)(listeners->elementAt(i)); @@ -59,7 +63,7 @@ ICUNotifier::addListener(const EventListener* l, UErrorCode& status) } } - listeners->addElementX((void*)l, status); // cast away const + listeners->addElement((void*)l, status); // cast away const } #ifdef NOTIFIER_DEBUG else { @@ -102,13 +106,11 @@ ICUNotifier::removeListener(const EventListener *l, UErrorCode& status) void ICUNotifier::notifyChanged(void) { + Mutex lmx(¬ifyLock); if (listeners != NULL) { - Mutex lmx(¬ifyLock); - if (listeners != NULL) { - for (int i = 0, e = listeners->size(); i < e; ++i) { - EventListener* el = (EventListener*)listeners->elementAt(i); - notifyListener(*el); - } + for (int i = 0, e = listeners->size(); i < e; ++i) { + EventListener* el = (EventListener*)listeners->elementAt(i); + notifyListener(*el); } } } diff --git a/deps/icu-small/source/common/ubrk.cpp b/deps/icu-small/source/common/ubrk.cpp index bb5bdd1b501..f4e064961f3 100644 --- a/deps/icu-small/source/common/ubrk.cpp +++ b/deps/icu-small/source/common/ubrk.cpp @@ -168,7 +168,7 @@ ubrk_safeClone( BreakIterator *newBI = ((BreakIterator *)bi)->clone(); if (newBI == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; - } else { + } else if (pBufferSize != NULL) { *status = U_SAFECLONE_ALLOCATED_WARNING; } return (UBreakIterator *)newBI; @@ -176,15 +176,7 @@ ubrk_safeClone( U_CAPI UBreakIterator * U_EXPORT2 ubrk_clone(const UBreakIterator *bi, UErrorCode *status) { - if (U_FAILURE(*status)) { - return nullptr; - } - BreakIterator *newBI = ((BreakIterator *)bi)->clone(); - if (newBI == nullptr) { - *status = U_MEMORY_ALLOCATION_ERROR; - return nullptr; - } - return (UBreakIterator *)newBI; + return ubrk_safeClone(bi, nullptr, nullptr, status); } diff --git a/deps/icu-small/source/common/ucase.cpp b/deps/icu-small/source/common/ucase.cpp index 4aa856507aa..388c86b1bba 100644 --- a/deps/icu-small/source/common/ucase.cpp +++ b/deps/icu-small/source/common/ucase.cpp @@ -22,27 +22,14 @@ #include "unicode/utypes.h" #include "unicode/unistr.h" #include "unicode/uset.h" -#include "unicode/udata.h" /* UDataInfo */ #include "unicode/utf16.h" -#include "ucmndata.h" /* DataHeader */ -#include "udatamem.h" -#include "umutex.h" -#include "uassert.h" #include "cmemory.h" -#include "utrie2.h" +#include "uassert.h" #include "ucase.h" +#include "umutex.h" +#include "utrie2.h" -struct UCaseProps { - UDataMemory *mem; - const int32_t *indexes; - const uint16_t *exceptions; - const uint16_t *unfold; - - UTrie2 trie; - uint8_t formatVersion[4]; -}; - -/* ucase_props_data.h is machine-generated by gencase --csource */ +/* ucase_props_data.h is machine-generated by genprops/casepropsbuilder.cpp */ #define INCLUDED_FROM_UCASE_CPP #include "ucase_props_data.h" @@ -77,6 +64,13 @@ ucase_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { /* data access primitives --------------------------------------------------- */ +U_CAPI const struct UCaseProps * U_EXPORT2 +ucase_getSingleton(int32_t *pExceptionsLength, int32_t *pUnfoldLength) { + *pExceptionsLength = UPRV_LENGTHOF(ucase_props_exceptions); + *pUnfoldLength = UPRV_LENGTHOF(ucase_props_unfold); + return &ucase_props_singleton; +} + U_CFUNC const UTrie2 * U_EXPORT2 ucase_getTrie() { return &ucase_props_singleton.trie; @@ -690,7 +684,7 @@ ucase_isCaseSensitive(UChar32 c) { * - The general category of C is * Nonspacing Mark (Mn), or Enclosing Mark (Me), or Format Control (Cf), or * Letter Modifier (Lm), or Symbol Modifier (Sk) - * - C is one of the following characters + * - C is one of the following characters * U+0027 APOSTROPHE * U+00AD SOFT HYPHEN (SHY) * U+2019 RIGHT SINGLE QUOTATION MARK @@ -1064,6 +1058,8 @@ ucase_toFullLower(UChar32 c, // The sign of the result has meaning, input must be non-negative so that it can be returned as is. U_ASSERT(c >= 0); UChar32 result=c; + // Reset the output pointer in case it was uninitialized. + *pString=nullptr; uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!UCASE_HAS_EXCEPTION(props)) { if(UCASE_IS_UPPER_OR_TITLE(props)) { @@ -1148,7 +1144,6 @@ ucase_toFullLower(UChar32 c, 0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE 0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE */ - *pString=nullptr; return 0; /* remove the dot (continue without output) */ } else if(loc==UCASE_LOC_TURKISH && c==0x49 && !isFollowedByDotAbove(iter, context)) { /* @@ -1215,6 +1210,8 @@ toUpperOrTitle(UChar32 c, // The sign of the result has meaning, input must be non-negative so that it can be returned as is. U_ASSERT(c >= 0); UChar32 result=c; + // Reset the output pointer in case it was uninitialized. + *pString=nullptr; uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!UCASE_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)==UCASE_LOWER) { @@ -1252,7 +1249,6 @@ toUpperOrTitle(UChar32 c, 0307; 0307; ; ; lt After_Soft_Dotted; # COMBINING DOT ABOVE */ - *pString=nullptr; return 0; /* remove the dot (continue without output) */ } else if(c==0x0587) { // See ICU-13416: @@ -1449,6 +1445,8 @@ ucase_toFullFolding(UChar32 c, // The sign of the result has meaning, input must be non-negative so that it can be returned as is. U_ASSERT(c >= 0); UChar32 result=c; + // Reset the output pointer in case it was uninitialized. + *pString=nullptr; uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!UCASE_HAS_EXCEPTION(props)) { if(UCASE_IS_UPPER_OR_TITLE(props)) { @@ -1542,7 +1540,7 @@ U_CAPI UChar32 U_EXPORT2 u_tolower(UChar32 c) { return ucase_tolower(c); } - + /* Transforms the Unicode character to its upper case equivalent.*/ U_CAPI UChar32 U_EXPORT2 u_toupper(UChar32 c) { diff --git a/deps/icu-small/source/common/ucase.h b/deps/icu-small/source/common/ucase.h index a018f82b81b..7bf57fd3706 100644 --- a/deps/icu-small/source/common/ucase.h +++ b/deps/icu-small/source/common/ucase.h @@ -312,6 +312,21 @@ UCaseMapFull(UChar32 c, U_CDECL_END +/* for icuexportdata -------------------------------------------------------- */ + +struct UCaseProps { + void *mem; // TODO: was unused, and type UDataMemory -- remove + const int32_t *indexes; + const uint16_t *exceptions; + const uint16_t *unfold; + + UTrie2 trie; + uint8_t formatVersion[4]; +}; + +U_CAPI const struct UCaseProps * U_EXPORT2 +ucase_getSingleton(int32_t *pExceptionsLength, int32_t *pUnfoldLength); + /* file definitions --------------------------------------------------------- */ #define UCASE_DATA_NAME "ucase" diff --git a/deps/icu-small/source/common/ucasemap.cpp b/deps/icu-small/source/common/ucasemap.cpp index ed72bda828f..95b55d56a02 100644 --- a/deps/icu-small/source/common/ucasemap.cpp +++ b/deps/icu-small/source/common/ucasemap.cpp @@ -112,8 +112,7 @@ ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode) { if(length==sizeof(csm->locale)) { *pErrorCode=U_BUFFER_OVERFLOW_ERROR; } - if(U_SUCCESS(*pErrorCode)) { - csm->caseLocale=UCASE_LOC_UNKNOWN; + if(U_SUCCESS(*pErrorCode)) { csm->caseLocale = ucase_getCaseLocale(csm->locale); } else { csm->locale[0]=0; @@ -420,6 +419,97 @@ void toUpper(int32_t caseLocale, uint32_t options, #if !UCONFIG_NO_BREAK_ITERATION +namespace { + +constexpr uint8_t ACUTE_BYTE0 = u8"\u0301"[0]; + +constexpr uint8_t ACUTE_BYTE1 = u8"\u0301"[1]; + +/** + * Input: c is a letter I with or without acute accent. + * start is the index in src after c, and is less than segmentLimit. + * If a plain i/I is followed by a plain j/J, + * or an i/I with acute (precomposed or decomposed) is followed by a j/J with acute, + * then we output accordingly. + * + * @return the src index after the titlecased sequence, or the start index if no Dutch IJ + */ +int32_t maybeTitleDutchIJ(const uint8_t *src, UChar32 c, int32_t start, int32_t segmentLimit, + ByteSink &sink, uint32_t options, icu::Edits *edits, UErrorCode &errorCode) { + U_ASSERT(start < segmentLimit); + + int32_t index = start; + bool withAcute = false; + + // If the conditions are met, then the following variables tell us what to output. + int32_t unchanged1 = 0; // code units before the j, or the whole sequence (0..3) + bool doTitleJ = false; // true if the j needs to be titlecased + int32_t unchanged2 = 0; // after the j (0 or 1) + + // next character after the first letter + UChar32 c2; + c2 = src[index++]; + + // Is the first letter an i/I with accent? + if (c == u'I') { + if (c2 == ACUTE_BYTE0 && index < segmentLimit && src[index++] == ACUTE_BYTE1) { + withAcute = true; + unchanged1 = 2; // ACUTE is 2 code units in UTF-8 + if (index == segmentLimit) { return start; } + c2 = src[index++]; + } + } else { // Í + withAcute = true; + } + + // Is the next character a j/J? + if (c2 == u'j') { + doTitleJ = true; + } else if (c2 == u'J') { + ++unchanged1; + } else { + return start; + } + + // A plain i/I must be followed by a plain j/J. + // An i/I with acute must be followed by a j/J with acute. + if (withAcute) { + if ((index + 1) >= segmentLimit || src[index++] != ACUTE_BYTE0 || src[index++] != ACUTE_BYTE1) { + return start; + } + if (doTitleJ) { + unchanged2 = 2; // ACUTE is 2 code units in UTF-8 + } else { + unchanged1 = unchanged1 + 2; // ACUTE is 2 code units in UTF-8 + } + } + + // There must not be another combining mark. + if (index < segmentLimit) { + int32_t cp; + int32_t i = index; + U8_NEXT(src, i, segmentLimit, cp); + uint32_t typeMask = U_GET_GC_MASK(cp); + if ((typeMask & U_GC_M_MASK) != 0) { + return start; + } + } + + // Output the rest of the Dutch IJ. + ByteSinkUtil::appendUnchanged(src + start, unchanged1, sink, options, edits, errorCode); + start += unchanged1; + if (doTitleJ) { + ByteSinkUtil::appendCodePoint(1, u'J', sink, edits); + ++start; + } + ByteSinkUtil::appendUnchanged(src + start, unchanged2, sink, options, edits, errorCode); + + U_ASSERT(start + unchanged2 == index); + return index; +} + +} // namespace + U_CFUNC void U_CALLCONV ucasemap_internalUTF8ToTitle( int32_t caseLocale, uint32_t options, BreakIterator *iter, @@ -504,19 +594,14 @@ ucasemap_internalUTF8ToTitle( } /* Special case Dutch IJ titlecasing */ - if (titleStart+1 < index && - caseLocale == UCASE_LOC_DUTCH && - (src[titleStart] == 0x0049 || src[titleStart] == 0x0069)) { - if (src[titleStart+1] == 0x006A) { - ByteSinkUtil::appendCodePoint(1, 0x004A, sink, edits); - titleLimit++; - } else if (src[titleStart+1] == 0x004A) { - // Keep the capital J from getting lowercased. - if (!ByteSinkUtil::appendUnchanged(src+titleStart+1, 1, - sink, options, edits, errorCode)) { - return; - } - titleLimit++; + if (titleLimit < index && + caseLocale == UCASE_LOC_DUTCH) { + if (c < 0) { + c = ~c; + } + + if (c == u'I' || c == u'Í') { + titleLimit = maybeTitleDutchIJ(src, c, titleLimit, index, sink, options, edits, errorCode); } } diff --git a/deps/icu-small/source/common/ucnv.cpp b/deps/icu-small/source/common/ucnv.cpp index 5dcf35e0438..019bcb6a79c 100644 --- a/deps/icu-small/source/common/ucnv.cpp +++ b/deps/icu-small/source/common/ucnv.cpp @@ -252,7 +252,10 @@ ucnv_safeClone(const UConverter* cnv, void *stackBuffer, int32_t *pBufferSize, U UTRACE_EXIT_STATUS(*status); return NULL; } - *status = U_SAFECLONE_ALLOCATED_WARNING; + // If pBufferSize was NULL as the input, pBufferSize is set to &stackBufferSize in this function. + if (pBufferSize != &stackBufferSize) { + *status = U_SAFECLONE_ALLOCATED_WARNING; + } /* record the fact that memory was allocated */ *pBufferSize = bufferSizeNeeded; @@ -317,7 +320,11 @@ ucnv_safeClone(const UConverter* cnv, void *stackBuffer, int32_t *pBufferSize, U return localConverter; } - +U_CAPI UConverter* U_EXPORT2 +ucnv_clone(const UConverter* cnv, UErrorCode *status) +{ + return ucnv_safeClone(cnv, nullptr, nullptr, status); +} /*Decreases the reference counter in the shared immutable section of the object *and frees the mutable part*/ diff --git a/deps/icu-small/source/common/ucurr.cpp b/deps/icu-small/source/common/ucurr.cpp index 67aab4e8ffe..6e489e0563d 100644 --- a/deps/icu-small/source/common/ucurr.cpp +++ b/deps/icu-small/source/common/ucurr.cpp @@ -254,7 +254,7 @@ currSymbolsEquiv_cleanup(void) } /** - * Deleter for OlsonToMetaMappingEntry + * Deleter for IsoCodeEntry */ static void U_CALLCONV deleteIsoCodeEntry(void *obj) { diff --git a/deps/icu-small/source/common/uloc.cpp b/deps/icu-small/source/common/uloc.cpp index c8a3f1ff731..99c6a0af39d 100644 --- a/deps/icu-small/source/common/uloc.cpp +++ b/deps/icu-small/source/common/uloc.cpp @@ -186,10 +186,10 @@ NULL }; static const char* const DEPRECATED_LANGUAGES[]={ - "in", "iw", "ji", "jw", NULL, NULL + "in", "iw", "ji", "jw", "mo", NULL, NULL }; static const char* const REPLACEMENT_LANGUAGES[]={ - "id", "he", "yi", "jv", NULL, NULL + "id", "he", "yi", "jv", "ro", NULL, NULL }; /** @@ -444,7 +444,7 @@ static const char * const COUNTRIES_3[] = { /* "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", */ "VAT", "VCT", "VEN", "VGB", "VIR", "VNM", "VUT", "WLF", /* "WS", "XK", "YE", "YT", "ZA", "ZM", "ZW", */ - "WSM", "XXK", "YEM", "MYT", "ZAF", "ZMB", "ZWE", + "WSM", "XKK", "YEM", "MYT", "ZAF", "ZMB", "ZWE", NULL, /* "AN", "BU", "CS", "FX", "RO", "SU", "TP", "YD", "YU", "ZR" */ "ANT", "BUR", "SCG", "FXX", "ROM", "SUN", "TMP", "YMD", "YUG", "ZAR", diff --git a/deps/icu-small/source/common/unicode/localematcher.h b/deps/icu-small/source/common/unicode/localematcher.h index 252bb7fdc20..0f7e04a3afd 100644 --- a/deps/icu-small/source/common/unicode/localematcher.h +++ b/deps/icu-small/source/common/unicode/localematcher.h @@ -461,13 +461,13 @@ class U_COMMON_API LocaleMatcher : public UMemory { * Option for whether to include or ignore one-way (fallback) match data. * By default, they are included. * - * @param direction the match direction to set. + * @param matchDirection the match direction to set. * @return this Builder object * @stable ICU 67 */ - Builder &setDirection(ULocMatchDirection direction) { + Builder &setDirection(ULocMatchDirection matchDirection) { if (U_SUCCESS(errorCode_)) { - direction_ = direction; + direction_ = matchDirection; } return *this; } diff --git a/deps/icu-small/source/common/unicode/rbbi.h b/deps/icu-small/source/common/unicode/rbbi.h index 0ce93819f54..0bad0d3897c 100644 --- a/deps/icu-small/source/common/unicode/rbbi.h +++ b/deps/icu-small/source/common/unicode/rbbi.h @@ -147,6 +147,11 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { */ int32_t *fLookAheadMatches; + /** + * A flag to indicate if phrase based breaking is enabled. + */ + UBool fIsPhraseBreaking; + //======================================================================= // constructors //======================================================================= @@ -163,6 +168,21 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { */ RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status); + /** + * This constructor uses the udata interface to create a BreakIterator + * whose internal tables live in a memory-mapped file. "image" is an + * ICU UDataMemory handle for the pre-compiled break iterator tables. + * @param image handle to the memory image for the break iterator data. + * Ownership of the UDataMemory handle passes to the Break Iterator, + * which will be responsible for closing it when it is no longer needed. + * @param status Information on any errors encountered. + * @param isPhraseBreaking true if phrase based breaking is required, otherwise false. + * @see udata_open + * @see #getBinaryRules + * @internal (private) + */ + RuleBasedBreakIterator(UDataMemory* image, UBool isPhraseBreaking, UErrorCode &status); + /** @internal */ friend class RBBIRuleBuilder; /** @internal */ diff --git a/deps/icu-small/source/common/unicode/ubrk.h b/deps/icu-small/source/common/unicode/ubrk.h index c603f7c13f3..2b3dc7aa576 100644 --- a/deps/icu-small/source/common/unicode/ubrk.h +++ b/deps/icu-small/source/common/unicode/ubrk.h @@ -312,11 +312,12 @@ ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength, * If *pBufferSize is not enough for a stack-based safe clone, * new memory will be allocated. * @param status to indicate whether the operation went on smoothly or there were errors - * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any allocations were necessary. + * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used + * if pBufferSize != NULL and any allocations were necessary * @return pointer to the new clone * @deprecated ICU 69 Use ubrk_clone() instead. */ -U_CAPI UBreakIterator * U_EXPORT2 +U_DEPRECATED UBreakIterator * U_EXPORT2 ubrk_safeClone( const UBreakIterator *bi, void *stackBuffer, @@ -325,21 +326,17 @@ ubrk_safeClone( #endif /* U_HIDE_DEPRECATED_API */ -#ifndef U_HIDE_DRAFT_API - /** * Thread safe cloning operation. * @param bi iterator to be cloned * @param status to indicate whether the operation went on smoothly or there were errors * @return pointer to the new clone - * @draft ICU 69 + * @stable ICU 69 */ U_CAPI UBreakIterator * U_EXPORT2 ubrk_clone(const UBreakIterator *bi, UErrorCode *status); -#endif // U_HIDE_DRAFT_API - #ifndef U_HIDE_DEPRECATED_API /** diff --git a/deps/icu-small/source/common/unicode/ucnv.h b/deps/icu-small/source/common/unicode/ucnv.h index 2687c984d43..20c173b6628 100644 --- a/deps/icu-small/source/common/unicode/ucnv.h +++ b/deps/icu-small/source/common/unicode/ucnv.h @@ -477,7 +477,7 @@ ucnv_openCCSID(int32_t codepage, * *

    The name will NOT be looked up in the alias mechanism, nor will the converter be * stored in the converter cache or the alias table. The only way to open further converters - * is call this function multiple times, or use the ucnv_safeClone() function to clone a + * is call this function multiple times, or use the ucnv_clone() function to clone a * 'primary' converter.

    * *

    A future version of ICU may add alias table lookups and/or caching @@ -493,13 +493,27 @@ ucnv_openCCSID(int32_t codepage, * @return the created Unicode converter object, or NULL if an error occurred * @see udata_open * @see ucnv_open - * @see ucnv_safeClone + * @see ucnv_clone * @see ucnv_close * @stable ICU 2.2 */ U_CAPI UConverter* U_EXPORT2 ucnv_openPackage(const char *packageName, const char *converterName, UErrorCode *err); +/** + * Thread safe converter cloning operation. + * + * You must ucnv_close() the clone. + * + * @param cnv converter to be cloned + * @param status to indicate whether the operation went on smoothly or there were errors + * @return pointer to the new clone + * @stable ICU 71 + */ +U_CAPI UConverter* U_EXPORT2 ucnv_clone(const UConverter *cnv, UErrorCode *status); + +#ifndef U_HIDE_DEPRECATED_API + /** * Thread safe converter cloning operation. * For most efficient operation, pass in a stackBuffer (and a *pBufferSize) @@ -532,21 +546,19 @@ ucnv_openPackage(const char *packageName, const char *converterName, UErrorCode * pointer to size of allocated space. * @param status to indicate whether the operation went on smoothly or there were errors * An informational status value, U_SAFECLONE_ALLOCATED_WARNING, - * is used if any allocations were necessary. + * is used if pBufferSize != NULL and any allocations were necessary * However, it is better to check if *pBufferSize grew for checking for * allocations because warning codes can be overridden by subsequent * function calls. * @return pointer to the new clone - * @stable ICU 2.0 + * @deprecated ICU 71 Use ucnv_clone() instead. */ -U_CAPI UConverter * U_EXPORT2 +U_DEPRECATED UConverter * U_EXPORT2 ucnv_safeClone(const UConverter *cnv, void *stackBuffer, int32_t *pBufferSize, UErrorCode *status); -#ifndef U_HIDE_DEPRECATED_API - /** * \def U_CNV_SAFECLONE_BUFFERSIZE * Definition of a buffer size that is designed to be large enough for diff --git a/deps/icu-small/source/common/unicode/uniset.h b/deps/icu-small/source/common/unicode/uniset.h index 730337a3535..310c7c8d201 100644 --- a/deps/icu-small/source/common/unicode/uniset.h +++ b/deps/icu-small/source/common/unicode/uniset.h @@ -1229,7 +1229,6 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { */ UnicodeSet& retain(UChar32 c); -#ifndef U_HIDE_DRAFT_API /** * Retains only the specified string from this set if it is present. * Upon return this set will be empty if it did not contain s, or @@ -1238,10 +1237,9 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { * * @param s the source string * @return this object, for chaining - * @draft ICU 69 + * @stable ICU 69 */ UnicodeSet& retain(const UnicodeString &s); -#endif // U_HIDE_DRAFT_API /** * Removes the specified range from this set if it is present. diff --git a/deps/icu-small/source/common/unicode/urename.h b/deps/icu-small/source/common/unicode/urename.h index 4605f632ea8..d9f9b8f336c 100644 --- a/deps/icu-small/source/common/unicode/urename.h +++ b/deps/icu-small/source/common/unicode/urename.h @@ -567,6 +567,7 @@ #define ucase_addStringCaseClosure U_ICU_ENTRY_POINT_RENAME(ucase_addStringCaseClosure) #define ucase_fold U_ICU_ENTRY_POINT_RENAME(ucase_fold) #define ucase_getCaseLocale U_ICU_ENTRY_POINT_RENAME(ucase_getCaseLocale) +#define ucase_getSingleton U_ICU_ENTRY_POINT_RENAME(ucase_getSingleton) #define ucase_getTrie U_ICU_ENTRY_POINT_RENAME(ucase_getTrie) #define ucase_getType U_ICU_ENTRY_POINT_RENAME(ucase_getType) #define ucase_getTypeOrIgnorable U_ICU_ENTRY_POINT_RENAME(ucase_getTypeOrIgnorable) @@ -630,6 +631,7 @@ #define ucnv_cbFromUWriteUChars U_ICU_ENTRY_POINT_RENAME(ucnv_cbFromUWriteUChars) #define ucnv_cbToUWriteSub U_ICU_ENTRY_POINT_RENAME(ucnv_cbToUWriteSub) #define ucnv_cbToUWriteUChars U_ICU_ENTRY_POINT_RENAME(ucnv_cbToUWriteUChars) +#define ucnv_clone U_ICU_ENTRY_POINT_RENAME(ucnv_clone) #define ucnv_close U_ICU_ENTRY_POINT_RENAME(ucnv_close) #define ucnv_compareNames U_ICU_ENTRY_POINT_RENAME(ucnv_compareNames) #define ucnv_convert U_ICU_ENTRY_POINT_RENAME(ucnv_convert) @@ -725,6 +727,7 @@ #define ucnvsel_selectForString U_ICU_ENTRY_POINT_RENAME(ucnvsel_selectForString) #define ucnvsel_selectForUTF8 U_ICU_ENTRY_POINT_RENAME(ucnvsel_selectForUTF8) #define ucnvsel_serialize U_ICU_ENTRY_POINT_RENAME(ucnvsel_serialize) +#define ucol_clone U_ICU_ENTRY_POINT_RENAME(ucol_clone) #define ucol_cloneBinary U_ICU_ENTRY_POINT_RENAME(ucol_cloneBinary) #define ucol_close U_ICU_ENTRY_POINT_RENAME(ucol_close) #define ucol_closeElements U_ICU_ENTRY_POINT_RENAME(ucol_closeElements) @@ -904,6 +907,7 @@ #define udatpg_getBestPattern U_ICU_ENTRY_POINT_RENAME(udatpg_getBestPattern) #define udatpg_getBestPatternWithOptions U_ICU_ENTRY_POINT_RENAME(udatpg_getBestPatternWithOptions) #define udatpg_getDateTimeFormat U_ICU_ENTRY_POINT_RENAME(udatpg_getDateTimeFormat) +#define udatpg_getDateTimeFormatForStyle U_ICU_ENTRY_POINT_RENAME(udatpg_getDateTimeFormatForStyle) #define udatpg_getDecimal U_ICU_ENTRY_POINT_RENAME(udatpg_getDecimal) #define udatpg_getDefaultHourCycle U_ICU_ENTRY_POINT_RENAME(udatpg_getDefaultHourCycle) #define udatpg_getFieldDisplayName U_ICU_ENTRY_POINT_RENAME(udatpg_getFieldDisplayName) @@ -918,6 +922,7 @@ #define udatpg_setAppendItemFormat U_ICU_ENTRY_POINT_RENAME(udatpg_setAppendItemFormat) #define udatpg_setAppendItemName U_ICU_ENTRY_POINT_RENAME(udatpg_setAppendItemName) #define udatpg_setDateTimeFormat U_ICU_ENTRY_POINT_RENAME(udatpg_setDateTimeFormat) +#define udatpg_setDateTimeFormatForStyle U_ICU_ENTRY_POINT_RENAME(udatpg_setDateTimeFormatForStyle) #define udatpg_setDecimal U_ICU_ENTRY_POINT_RENAME(udatpg_setDecimal) #define udict_swap U_ICU_ENTRY_POINT_RENAME(udict_swap) #define udtitvfmt_close U_ICU_ENTRY_POINT_RENAME(udtitvfmt_close) diff --git a/deps/icu-small/source/common/unicode/uset.h b/deps/icu-small/source/common/unicode/uset.h index 2ef352ef563..33332f2d362 100644 --- a/deps/icu-small/source/common/unicode/uset.h +++ b/deps/icu-small/source/common/unicode/uset.h @@ -628,7 +628,6 @@ uset_removeRange(USet* set, UChar32 start, UChar32 end); U_CAPI void U_EXPORT2 uset_removeString(USet* set, const UChar* str, int32_t strLen); -#ifndef U_HIDE_DRAFT_API /** * Removes EACH of the characters in this string. Note: "ch" == {"c", "h"} * A frozen set will not be modified. @@ -636,11 +635,10 @@ uset_removeString(USet* set, const UChar* str, int32_t strLen); * @param set the object to be modified * @param str the string * @param length the length of the string, or -1 if NUL-terminated - * @draft ICU 69 + * @stable ICU 69 */ U_CAPI void U_EXPORT2 uset_removeAllCodePoints(USet *set, const UChar *str, int32_t length); -#endif // U_HIDE_DRAFT_API /** * Removes from this set all of its elements that are contained in the @@ -671,7 +669,6 @@ uset_removeAll(USet* set, const USet* removeSet); U_CAPI void U_EXPORT2 uset_retain(USet* set, UChar32 start, UChar32 end); -#ifndef U_HIDE_DRAFT_API /** * Retains only the specified string from this set if it is present. * Upon return this set will be empty if it did not contain s, or @@ -681,7 +678,7 @@ uset_retain(USet* set, UChar32 start, UChar32 end); * @param set the object to be modified * @param str the string * @param length the length of the string, or -1 if NUL-terminated - * @draft ICU 69 + * @stable ICU 69 */ U_CAPI void U_EXPORT2 uset_retainString(USet *set, const UChar *str, int32_t length); @@ -693,11 +690,10 @@ uset_retainString(USet *set, const UChar *str, int32_t length); * @param set the object to be modified * @param str the string * @param length the length of the string, or -1 if NUL-terminated - * @draft ICU 69 + * @stable ICU 69 */ U_CAPI void U_EXPORT2 uset_retainAllCodePoints(USet *set, const UChar *str, int32_t length); -#endif // U_HIDE_DRAFT_API /** * Retains only the elements in this set that are contained in the @@ -741,7 +737,6 @@ uset_compact(USet* set); U_CAPI void U_EXPORT2 uset_complement(USet* set); -#ifndef U_HIDE_DRAFT_API /** * Complements the specified range in this set. Any character in * the range will be removed if it is in this set, or will be @@ -753,7 +748,7 @@ uset_complement(USet* set); * @param set the object to be modified * @param start first character, inclusive, of range * @param end last character, inclusive, of range - * @draft ICU 69 + * @stable ICU 69 */ U_CAPI void U_EXPORT2 uset_complementRange(USet *set, UChar32 start, UChar32 end); @@ -766,7 +761,7 @@ uset_complementRange(USet *set, UChar32 start, UChar32 end); * @param set the object to be modified * @param str the string * @param length the length of the string, or -1 if NUL-terminated - * @draft ICU 69 + * @stable ICU 69 */ U_CAPI void U_EXPORT2 uset_complementString(USet *set, const UChar *str, int32_t length); @@ -778,11 +773,10 @@ uset_complementString(USet *set, const UChar *str, int32_t length); * @param set the object to be modified * @param str the string * @param length the length of the string, or -1 if NUL-terminated - * @draft ICU 69 + * @stable ICU 69 */ U_CAPI void U_EXPORT2 uset_complementAllCodePoints(USet *set, const UChar *str, int32_t length); -#endif // U_HIDE_DRAFT_API /** * Complements in this set all elements contained in the specified diff --git a/deps/icu-small/source/common/unicode/uvernum.h b/deps/icu-small/source/common/unicode/uvernum.h index 42e8865d7e3..2706e0b0606 100644 --- a/deps/icu-small/source/common/unicode/uvernum.h +++ b/deps/icu-small/source/common/unicode/uvernum.h @@ -60,7 +60,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION_MAJOR_NUM 70 +#define U_ICU_VERSION_MAJOR_NUM 71 /** The current ICU minor version as an integer. * This value will change in the subsequent releases of ICU @@ -86,7 +86,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SUFFIX _70 +#define U_ICU_VERSION_SUFFIX _71 /** * \def U_DEF2_ICU_ENTRY_POINT_RENAME @@ -139,7 +139,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION "70.1" +#define U_ICU_VERSION "71.1" /** * The current ICU library major version number as a string, for library name suffixes. @@ -152,13 +152,13 @@ * * @stable ICU 2.6 */ -#define U_ICU_VERSION_SHORT "70" +#define U_ICU_VERSION_SHORT "71" #ifndef U_HIDE_INTERNAL_API /** Data version in ICU4C. * @internal ICU 4.4 Internal Use Only **/ -#define U_ICU_DATA_VERSION "70.1" +#define U_ICU_DATA_VERSION "71.1" #endif /* U_HIDE_INTERNAL_API */ /*=========================================================================== diff --git a/deps/icu-small/source/common/unistr.cpp b/deps/icu-small/source/common/unistr.cpp index 077b4d6ef20..c18665928d8 100644 --- a/deps/icu-small/source/common/unistr.cpp +++ b/deps/icu-small/source/common/unistr.cpp @@ -334,7 +334,8 @@ Replaceable::clone() const { // UnicodeString overrides clone() with a real implementation UnicodeString * UnicodeString::clone() const { - return new UnicodeString(*this); + LocalPointer clonedString(new UnicodeString(*this)); + return clonedString.isValid() && !clonedString->isBogus() ? clonedString.orphan() : nullptr; } //======================================== @@ -1976,7 +1977,12 @@ The vector deleting destructor is already a part of UObject, but defining it here makes sure that it is included with this object file. This makes sure that static library dependencies are kept to a minimum. */ +#if defined(__clang__) || U_GCC_MAJOR_MINOR >= 1100 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" static void uprv_UnicodeStringDummy(void) { delete [] (new UnicodeString[2]); } +#pragma GCC diagnostic pop +#endif #endif diff --git a/deps/icu-small/source/common/ustrcase.cpp b/deps/icu-small/source/common/ustrcase.cpp index 36b19e75f2d..43910ea5209 100644 --- a/deps/icu-small/source/common/ustrcase.cpp +++ b/deps/icu-small/source/common/ustrcase.cpp @@ -36,6 +36,12 @@ #include "ustr_imp.h" #include "uassert.h" +/** + * Code point for COMBINING ACUTE ACCENT + * @internal + */ +#define ACUTE u'\u0301' + U_NAMESPACE_BEGIN namespace { @@ -396,6 +402,94 @@ U_NAMESPACE_USE #if !UCONFIG_NO_BREAK_ITERATION +namespace { + +/** + * Input: c is a letter I with or without acute accent. + * start is the index in src after c, and is less than segmentLimit. + * If a plain i/I is followed by a plain j/J, + * or an i/I with acute (precomposed or decomposed) is followed by a j/J with acute, + * then we output accordingly. + * + * @return the src index after the titlecased sequence, or the start index if no Dutch IJ + */ +int32_t maybeTitleDutchIJ(const UChar *src, UChar32 c, int32_t start, int32_t segmentLimit, + UChar *dest, int32_t &destIndex, int32_t destCapacity, uint32_t options, + icu::Edits *edits) { + U_ASSERT(start < segmentLimit); + + int32_t index = start; + bool withAcute = false; + + // If the conditions are met, then the following variables tell us what to output. + int32_t unchanged1 = 0; // code units before the j, or the whole sequence (0..3) + bool doTitleJ = false; // true if the j needs to be titlecased + int32_t unchanged2 = 0; // after the j (0 or 1) + + // next character after the first letter + UChar c2 = src[index++]; + + // Is the first letter an i/I with accent? + if (c == u'I') { + if (c2 == ACUTE) { + withAcute = true; + unchanged1 = 1; + if (index == segmentLimit) { return start; } + c2 = src[index++]; + } + } else { // Í + withAcute = true; + } + + // Is the next character a j/J? + if (c2 == u'j') { + doTitleJ = true; + } else if (c2 == u'J') { + ++unchanged1; + } else { + return start; + } + + // A plain i/I must be followed by a plain j/J. + // An i/I with acute must be followed by a j/J with acute. + if (withAcute) { + if (index == segmentLimit || src[index++] != ACUTE) { return start; } + if (doTitleJ) { + unchanged2 = 1; + } else { + ++unchanged1; + } + } + + // There must not be another combining mark. + if (index < segmentLimit) { + int32_t cp; + int32_t i = index; + U16_NEXT(src, i, segmentLimit, cp); + uint32_t typeMask = U_GET_GC_MASK(cp); + if ((typeMask & U_GC_M_MASK) != 0) { + return start; + } + } + + // Output the rest of the Dutch IJ. + destIndex = appendUnchanged(dest, destIndex, destCapacity, src + start, unchanged1, options, edits); + start += unchanged1; + if (doTitleJ) { + destIndex = appendUChar(dest, destIndex, destCapacity, u'J'); + if (edits != nullptr) { + edits->addReplace(1, 1); + } + ++start; + } + destIndex = appendUnchanged(dest, destIndex, destCapacity, src + start, unchanged2, options, edits); + + U_ASSERT(start + unchanged2 == index); + return index; +} + +} // namespace + U_CFUNC int32_t U_CALLCONV ustrcase_internalToTitle(int32_t caseLocale, uint32_t options, BreakIterator *iter, UChar *dest, int32_t destCapacity, @@ -412,14 +506,14 @@ ustrcase_internalToTitle(int32_t caseLocale, uint32_t options, BreakIterator *it csc.limit=srcLength; int32_t destIndex=0; int32_t prev=0; - UBool isFirstIndex=TRUE; + bool isFirstIndex=true; /* titlecasing loop */ while(prevfirst(); } else { index=iter->next(); @@ -446,7 +540,7 @@ ustrcase_internalToTitle(int32_t caseLocale, uint32_t options, BreakIterator *it // Stop with titleStartaddReplace(1, 1); - } - titleLimit++; - } else if (src[titleStart+1] == 0x004A) { - // Keep the capital J from getting lowercased. - destIndex=appendUnchanged(dest, destIndex, destCapacity, - src+titleStart+1, 1, options, edits); - if(destIndex<0) { - errorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; - } - titleLimit++; + caseLocale == UCASE_LOC_DUTCH) { + if (c < 0) { + c = ~c; + } + + if (c == u'I' || c == u'Í') { + titleLimit = maybeTitleDutchIJ(src, c, titleStart + 1, index, + dest, destIndex, destCapacity, options, + edits); } } diff --git a/deps/icu-small/source/common/uvector.cpp b/deps/icu-small/source/common/uvector.cpp index 4da8b864e1b..844463921ef 100644 --- a/deps/icu-small/source/common/uvector.cpp +++ b/deps/icu-small/source/common/uvector.cpp @@ -99,14 +99,6 @@ bool UVector::operator==(const UVector& other) const { return true; } -// TODO: delete this function once all call sites have been migrated to the -// new addElement(). -void UVector::addElementX(void* obj, UErrorCode &status) { - if (ensureCapacityX(count + 1, status)) { - elements[count++].pointer = obj; - } -} - void UVector::addElement(void* obj, UErrorCode &status) { U_ASSERT(deleter == nullptr); if (ensureCapacity(count + 1, status)) { @@ -331,38 +323,6 @@ int32_t UVector::indexOf(UElement key, int32_t startIndex, int8_t hint) const { return -1; } -UBool UVector::ensureCapacityX(int32_t minimumCapacity, UErrorCode &status) { - if (minimumCapacity < 0) { - status = U_ILLEGAL_ARGUMENT_ERROR; - return FALSE; - } - if (capacity < minimumCapacity) { - if (capacity > (INT32_MAX - 1) / 2) { // integer overflow check - status = U_ILLEGAL_ARGUMENT_ERROR; - return FALSE; - } - int32_t newCap = capacity * 2; - if (newCap < minimumCapacity) { - newCap = minimumCapacity; - } - if (newCap > (int32_t)(INT32_MAX / sizeof(UElement))) { // integer overflow check - // We keep the original memory contents on bad minimumCapacity. - status = U_ILLEGAL_ARGUMENT_ERROR; - return FALSE; - } - UElement* newElems = (UElement *)uprv_realloc(elements, sizeof(UElement)*newCap); - if (newElems == nullptr) { - // We keep the original contents on the memory failure on realloc or bad minimumCapacity. - status = U_MEMORY_ALLOCATION_ERROR; - return FALSE; - } - elements = newElems; - capacity = newCap; - } - return TRUE; -} - - UBool UVector::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) { if (U_FAILURE(status)) { return false; @@ -370,7 +330,7 @@ UBool UVector::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) { if (minimumCapacity < 0) { status = U_ILLEGAL_ARGUMENT_ERROR; return false; - } + } if (capacity < minimumCapacity) { if (capacity > (INT32_MAX - 1) / 2) { // integer overflow check status = U_ILLEGAL_ARGUMENT_ERROR; @@ -396,6 +356,7 @@ UBool UVector::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) { } return true; } + /** * Change the size of this vector as follows: If newSize is smaller, * then truncate the array, possibly deleting held elements for i >= diff --git a/deps/icu-small/source/common/uvector.h b/deps/icu-small/source/common/uvector.h index f61fcc2be60..1eb7d136e7a 100644 --- a/deps/icu-small/source/common/uvector.h +++ b/deps/icu-small/source/common/uvector.h @@ -123,12 +123,6 @@ class U_COMMON_API UVector : public UObject { // java.util.Vector API //------------------------------------------------------------ - /* - * Old version of addElement, with non-standard error handling. - * Will be removed once all uses have been switched to the new addElement(). - */ - void addElementX(void* obj, UErrorCode &status); - /** * Add an element at the end of the vector. * For use only with vectors that do not adopt their elements, which is to say, @@ -197,12 +191,6 @@ class U_COMMON_API UVector : public UObject { inline UBool isEmpty(void) const {return count == 0;} - /* - * Old version of ensureCapacity, with non-standard error handling. - * Will be removed once all uses have been switched to the new ensureCapacity(). - */ - UBool ensureCapacityX(int32_t minimumCapacity, UErrorCode &status); - UBool ensureCapacity(int32_t minimumCapacity, UErrorCode &status); /** diff --git a/deps/icu-small/source/common/uvectr32.cpp b/deps/icu-small/source/common/uvectr32.cpp index a77ecb689fd..2b4d0b8a75a 100644 --- a/deps/icu-small/source/common/uvectr32.cpp +++ b/deps/icu-small/source/common/uvectr32.cpp @@ -83,7 +83,7 @@ void UVector32::assign(const UVector32& other, UErrorCode &ec) { } -bool UVector32::operator==(const UVector32& other) { +bool UVector32::operator==(const UVector32& other) const { int32_t i; if (count != other.count) return false; for (i=0; isetDeleter(uprv_deleteUObject); // underflow bucket - Bucket *bucket = new Bucket(getUnderflowLabel(), emptyString_, U_ALPHAINDEX_UNDERFLOW); - if (bucket == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; + LocalPointer bucket(new Bucket(getUnderflowLabel(), emptyString_, U_ALPHAINDEX_UNDERFLOW), errorCode); + if (U_FAILURE(errorCode)) { return NULL; } - bucketList->addElementX(bucket, errorCode); + bucketList->adoptElement(bucket.orphan(), errorCode); if (U_FAILURE(errorCode)) { return NULL; } UnicodeString temp; @@ -481,28 +480,24 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const { if (skippedScript && bucketList->size() > 1) { // We are skipping one or more scripts, // and we are not just getting out of the underflow label. - bucket = new Bucket(getInflowLabel(), inflowBoundary, U_ALPHAINDEX_INFLOW); - if (bucket == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - bucketList->addElementX(bucket, errorCode); + bucket.adoptInsteadAndCheckErrorCode( + new Bucket(getInflowLabel(), inflowBoundary, U_ALPHAINDEX_INFLOW), errorCode); + bucketList->adoptElement(bucket.orphan(), errorCode); + if (U_FAILURE(errorCode)) { return nullptr; } } } // Add a bucket with the current label. - bucket = new Bucket(fixLabel(current, temp), current, U_ALPHAINDEX_NORMAL); - if (bucket == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - bucketList->addElementX(bucket, errorCode); + bucket.adoptInsteadAndCheckErrorCode( + new Bucket(fixLabel(current, temp), current, U_ALPHAINDEX_NORMAL), errorCode); + bucketList->adoptElement(bucket.orphan(), errorCode); + if (U_FAILURE(errorCode)) { return nullptr; } // Remember ASCII and Pinyin buckets for Pinyin redirects. UChar c; if (current.length() == 1 && 0x41 <= (c = current.charAt(0)) && c <= 0x5A) { // A-Z - asciiBuckets[c - 0x41] = bucket; + asciiBuckets[c - 0x41] = (Bucket *)bucketList->lastElement(); } else if (current.length() == BASE_LENGTH + 1 && current.startsWith(BASE, BASE_LENGTH) && 0x41 <= (c = current.charAt(BASE_LENGTH)) && c <= 0x5A) { - pinyinBuckets[c - 0x41] = bucket; + pinyinBuckets[c - 0x41] = (Bucket *)bucketList->lastElement(); hasPinyin = TRUE; } // Check for multiple primary weights. @@ -526,15 +521,16 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const { // to the previous single-character bucket. // For example, after ... Q R S Sch we add Sch\uFFFF->S // and after ... Q R S Sch Sch\uFFFF St we add St\uFFFF->S. - bucket = new Bucket(emptyString_, + bucket.adoptInsteadAndCheckErrorCode(new Bucket(emptyString_, UnicodeString(current).append((UChar)0xFFFF), - U_ALPHAINDEX_NORMAL); - if (bucket == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; + U_ALPHAINDEX_NORMAL), + errorCode); + if (U_FAILURE(errorCode)) { return NULL; } bucket->displayBucket_ = singleBucket; - bucketList->addElementX(bucket, errorCode); + bucketList->adoptElement(bucket.orphan(), errorCode); + if (U_FAILURE(errorCode)) { return nullptr; } hasInvisibleBuckets = TRUE; break; } @@ -553,12 +549,10 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const { return bl; } // overflow bucket - bucket = new Bucket(getOverflowLabel(), *scriptUpperBoundary, U_ALPHAINDEX_OVERFLOW); - if (bucket == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - bucketList->addElementX(bucket, errorCode); // final + bucket.adoptInsteadAndCheckErrorCode( + new Bucket(getOverflowLabel(), *scriptUpperBoundary, U_ALPHAINDEX_OVERFLOW), errorCode); + bucketList->adoptElement(bucket.orphan(), errorCode); // final + if (U_FAILURE(errorCode)) { return nullptr; } if (hasPinyin) { // Redirect Pinyin buckets. @@ -589,7 +583,7 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const { int32_t i = bucketList->size() - 1; Bucket *nextBucket = getBucket(*bucketList, i); while (--i > 0) { - bucket = getBucket(*bucketList, i); + Bucket *bucket = getBucket(*bucketList, i); if (bucket->displayBucket_ != NULL) { continue; // skip invisible buckets } @@ -609,9 +603,9 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const { // Do not call publicBucketList->setDeleter(): // This vector shares its objects with the bucketList. for (int32_t j = 0; j < bucketList->size(); ++j) { - bucket = getBucket(*bucketList, j); + Bucket *bucket = getBucket(*bucketList, j); if (bucket->displayBucket_ == NULL) { - publicBucketList->addElementX(bucket, errorCode); + publicBucketList->addElement(bucket, errorCode); } } if (U_FAILURE(errorCode)) { return NULL; } @@ -679,13 +673,13 @@ void AlphabeticIndex::initBuckets(UErrorCode &errorCode) { bucket = bucket->displayBucket_; } if (bucket->records_ == NULL) { - bucket->records_ = new UVector(errorCode); - if (bucket->records_ == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; + LocalPointer records(new UVector(errorCode), errorCode); + if (U_FAILURE(errorCode)) { return; } + bucket->records_ = records.orphan(); } - bucket->records_->addElementX(r, errorCode); + bucket->records_->addElement(r, errorCode); } } @@ -1011,12 +1005,11 @@ UVector *AlphabeticIndex::firstStringsInScript(UErrorCode &status) { // and the one for unassigned implicit weights (Cn). continue; } - UnicodeString *s = new UnicodeString(boundary); - if (s == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + LocalPointer s(new UnicodeString(boundary), status); + dest->adoptElement(s.orphan(), status); + if (U_FAILURE(status)) { + return nullptr; } - dest->addElementX(s, status); } return dest.orphan(); } @@ -1067,19 +1060,18 @@ AlphabeticIndex & AlphabeticIndex::addRecord(const UnicodeString &name, const vo return *this; } if (inputList_ == NULL) { - inputList_ = new UVector(status); - if (inputList_ == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + LocalPointer inputList(new UVector(status), status); + if (U_FAILURE(status)) { return *this; } + inputList_ = inputList.orphan(); inputList_->setDeleter(alphaIndex_deleteRecord); } - Record *r = new Record(name, data); - if (r == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + LocalPointer r(new Record(name, data), status); + inputList_->adoptElement(r.orphan(), status); + if (U_FAILURE(status)) { return *this; } - inputList_->addElementX(r, status); clearBuckets(); //std::string ss; //std::string ss2; diff --git a/deps/icu-small/source/i18n/collationdatabuilder.cpp b/deps/icu-small/source/i18n/collationdatabuilder.cpp index 25050aa777e..b10de993c27 100644 --- a/deps/icu-small/source/i18n/collationdatabuilder.cpp +++ b/deps/icu-small/source/i18n/collationdatabuilder.cpp @@ -522,12 +522,11 @@ CollationDataBuilder::addConditionalCE32(const UnicodeString &context, uint32_t errorCode = U_BUFFER_OVERFLOW_ERROR; return -1; } - ConditionalCE32 *cond = new ConditionalCE32(context, ce32); - if(cond == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; + LocalPointer cond(new ConditionalCE32(context, ce32), errorCode); + conditionalCE32s.adoptElement(cond.orphan(), errorCode); + if(U_FAILURE(errorCode)) { return -1; } - conditionalCE32s.addElementX(cond, errorCode); return index; } diff --git a/deps/icu-small/source/i18n/csdetect.cpp b/deps/icu-small/source/i18n/csdetect.cpp index 84f0776542d..d866eb66286 100644 --- a/deps/icu-small/source/i18n/csdetect.cpp +++ b/deps/icu-small/source/i18n/csdetect.cpp @@ -270,6 +270,11 @@ const CharsetMatch * const *CharsetDetector::detectAll(int32_t &maxMatchesFound, maxMatchesFound = resultCount; + if (maxMatchesFound == 0) { + status = U_INVALID_CHAR_FOUND; + return NULL; + } + return resultArray; } diff --git a/deps/icu-small/source/i18n/double-conversion-ieee.h b/deps/icu-small/source/i18n/double-conversion-ieee.h index 31c35867de5..2940acb1698 100644 --- a/deps/icu-small/source/i18n/double-conversion-ieee.h +++ b/deps/icu-small/source/i18n/double-conversion-ieee.h @@ -164,11 +164,19 @@ class Double { } bool IsQuietNan() const { +#if (defined(__mips__) && !defined(__mips_nan2008)) || defined(__hppa__) + return IsNan() && ((AsUint64() & kQuietNanBit) == 0); +#else return IsNan() && ((AsUint64() & kQuietNanBit) != 0); +#endif } bool IsSignalingNan() const { +#if (defined(__mips__) && !defined(__mips_nan2008)) || defined(__hppa__) + return IsNan() && ((AsUint64() & kQuietNanBit) != 0); +#else return IsNan() && ((AsUint64() & kQuietNanBit) == 0); +#endif } @@ -250,7 +258,12 @@ class Double { private: static const int kDenormalExponent = -kExponentBias + 1; static const uint64_t kInfinity = DOUBLE_CONVERSION_UINT64_2PART_C(0x7FF00000, 00000000); +#if (defined(__mips__) && !defined(__mips_nan2008)) || defined(__hppa__) + static const uint64_t kNaN = DOUBLE_CONVERSION_UINT64_2PART_C(0x7FF7FFFF, FFFFFFFF); +#else static const uint64_t kNaN = DOUBLE_CONVERSION_UINT64_2PART_C(0x7FF80000, 00000000); +#endif + const uint64_t d64_; @@ -350,11 +363,19 @@ class Single { } bool IsQuietNan() const { +#if (defined(__mips__) && !defined(__mips_nan2008)) || defined(__hppa__) + return IsNan() && ((AsUint32() & kQuietNanBit) == 0); +#else return IsNan() && ((AsUint32() & kQuietNanBit) != 0); +#endif } bool IsSignalingNan() const { +#if (defined(__mips__) && !defined(__mips_nan2008)) || defined(__hppa__) + return IsNan() && ((AsUint32() & kQuietNanBit) != 0); +#else return IsNan() && ((AsUint32() & kQuietNanBit) == 0); +#endif } @@ -424,7 +445,11 @@ class Single { static const int kDenormalExponent = -kExponentBias + 1; static const int kMaxExponent = 0xFF - kExponentBias; static const uint32_t kInfinity = 0x7F800000; +#if (defined(__mips__) && !defined(__mips_nan2008)) || defined(__hppa__) + static const uint32_t kNaN = 0x7FBFFFFF; +#else static const uint32_t kNaN = 0x7FC00000; +#endif const uint32_t d32_; diff --git a/deps/icu-small/source/i18n/double-conversion-utils.h b/deps/icu-small/source/i18n/double-conversion-utils.h index 7f23e0a8250..11c92717c10 100644 --- a/deps/icu-small/source/i18n/double-conversion-utils.h +++ b/deps/icu-small/source/i18n/double-conversion-utils.h @@ -37,6 +37,9 @@ #ifndef DOUBLE_CONVERSION_UTILS_H_ #define DOUBLE_CONVERSION_UTILS_H_ +// Use DOUBLE_CONVERSION_NON_PREFIXED_MACROS to get unprefixed macros as was +// the case in double-conversion releases prior to 3.1.6 + #include #include @@ -46,9 +49,17 @@ #define DOUBLE_CONVERSION_ASSERT(condition) \ U_ASSERT(condition) #endif +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(ASSERT) +#define ASSERT DOUBLE_CONVERSION_ASSERT +#endif + #ifndef DOUBLE_CONVERSION_UNIMPLEMENTED #define DOUBLE_CONVERSION_UNIMPLEMENTED() (abort()) #endif +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(UNIMPLEMENTED) +#define UNIMPLEMENTED DOUBLE_CONVERSION_UNIMPLEMENTED +#endif + #ifndef DOUBLE_CONVERSION_NO_RETURN #ifdef _MSC_VER #define DOUBLE_CONVERSION_NO_RETURN __declspec(noreturn) @@ -56,6 +67,10 @@ #define DOUBLE_CONVERSION_NO_RETURN __attribute__((noreturn)) #endif #endif +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(NO_RETURN) +#define NO_RETURN DOUBLE_CONVERSION_NO_RETURN +#endif + #ifndef DOUBLE_CONVERSION_UNREACHABLE #ifdef _MSC_VER void DOUBLE_CONVERSION_NO_RETURN abort_noreturn(); @@ -65,6 +80,9 @@ inline void abort_noreturn() { abort(); } #define DOUBLE_CONVERSION_UNREACHABLE() (abort()) #endif #endif +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(UNREACHABLE) +#define UNREACHABLE DOUBLE_CONVERSION_UNREACHABLE +#endif // Not all compilers support __has_attribute and combining a check for both // ifdef and __has_attribute on the same preprocessor line isn't portable. @@ -81,12 +99,18 @@ inline void abort_noreturn() { abort(); } #define DOUBLE_CONVERSION_UNUSED #endif #endif +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(UNUSED) +#define UNUSED DOUBLE_CONVERSION_UNUSED +#endif #if DOUBLE_CONVERSION_HAS_ATTRIBUTE(uninitialized) #define DOUBLE_CONVERSION_STACK_UNINITIALIZED __attribute__((uninitialized)) #else #define DOUBLE_CONVERSION_STACK_UNINITIALIZED #endif +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(STACK_UNINITIALIZED) +#define STACK_UNINITIALIZED DOUBLE_CONVERSION_STACK_UNINITIALIZED +#endif // Double operations detection based on target architecture. // Linux uses a 80bit wide floating point stack on x86. This induces double @@ -127,7 +151,7 @@ int main(int argc, char** argv) { defined(_MIPS_ARCH_MIPS32R2) || defined(__ARMEB__) ||\ defined(__AARCH64EL__) || defined(__aarch64__) || defined(__AARCH64EB__) || \ defined(__riscv) || defined(__e2k__) || \ - defined(__or1k__) || defined(__arc__) || \ + defined(__or1k__) || defined(__arc__) || defined(__ARC64__) || \ defined(__microblaze__) || defined(__XTENSA__) || \ defined(__EMSCRIPTEN__) || defined(__wasm32__) #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 @@ -144,6 +168,9 @@ int main(int argc, char** argv) { #else #error Target architecture was not detected as supported by Double-Conversion. #endif +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(CORRECT_DOUBLE_OPERATIONS) +#define CORRECT_DOUBLE_OPERATIONS DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS +#endif #if defined(_WIN32) && !defined(__MINGW32__) @@ -169,7 +196,9 @@ typedef uint16_t uc16; // Usage: instead of writing 0x1234567890123456 // write DOUBLE_CONVERSION_UINT64_2PART_C(0x12345678,90123456); #define DOUBLE_CONVERSION_UINT64_2PART_C(a, b) (((static_cast(a) << 32) + 0x##b##u)) - +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(UINT64_2PART_C) +#define UINT64_2PART_C DOUBLE_CONVERSION_UINT64_2PART_C +#endif // The expression DOUBLE_CONVERSION_ARRAY_SIZE(a) is a compile-time constant of type // size_t which represents the number of elements of the given @@ -180,6 +209,9 @@ typedef uint16_t uc16; ((sizeof(a) / sizeof(*(a))) / \ static_cast(!(sizeof(a) % sizeof(*(a))))) #endif +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(ARRAY_SIZE) +#define ARRAY_SIZE DOUBLE_CONVERSION_ARRAY_SIZE +#endif // A macro to disallow the evil copy constructor and operator= functions // This should be used in the private: declarations for a class @@ -188,6 +220,9 @@ typedef uint16_t uc16; TypeName(const TypeName&); \ void operator=(const TypeName&) #endif +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(DC_DISALLOW_COPY_AND_ASSIGN) +#define DC_DISALLOW_COPY_AND_ASSIGN DOUBLE_CONVERSION_DISALLOW_COPY_AND_ASSIGN +#endif // A macro to disallow all the implicit constructors, namely the // default constructor, copy constructor and operator= functions. @@ -200,6 +235,9 @@ typedef uint16_t uc16; TypeName(); \ DOUBLE_CONVERSION_DISALLOW_COPY_AND_ASSIGN(TypeName) #endif +#if defined(DOUBLE_CONVERSION_NON_PREFIXED_MACROS) && !defined(DC_DISALLOW_IMPLICIT_CONSTRUCTORS) +#define DC_DISALLOW_IMPLICIT_CONSTRUCTORS DOUBLE_CONVERSION_DISALLOW_IMPLICIT_CONSTRUCTORS +#endif // ICU PATCH: Wrap in ICU namespace U_NAMESPACE_BEGIN diff --git a/deps/icu-small/source/i18n/dtfmtsym.cpp b/deps/icu-small/source/i18n/dtfmtsym.cpp index ab5f2b612c1..134b919f06e 100644 --- a/deps/icu-small/source/i18n/dtfmtsym.cpp +++ b/deps/icu-small/source/i18n/dtfmtsym.cpp @@ -1574,26 +1574,20 @@ struct CalendarDataSink : public ResourceSink { errorCode); if (U_FAILURE(errorCode)) { return; } } - LocalPointer aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode); - resourcesToVisitNext->addElementX(aliasRelativePathCopy.getAlias(), errorCode); + LocalPointer aliasRelativePathCopy(aliasRelativePath.clone(), errorCode); + resourcesToVisitNext->adoptElement(aliasRelativePathCopy.orphan(), errorCode); if (U_FAILURE(errorCode)) { return; } - // Only release ownership after resourcesToVisitNext takes it (no error happened): - aliasRelativePathCopy.orphan(); continue; } else if (aliasType == SAME_CALENDAR) { // Register same-calendar alias if (arrays.get(aliasRelativePath) == NULL && maps.get(aliasRelativePath) == NULL) { - LocalPointer aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode); - aliasPathPairs.addElementX(aliasRelativePathCopy.getAlias(), errorCode); + LocalPointer aliasRelativePathCopy(aliasRelativePath.clone(), errorCode); + aliasPathPairs.adoptElement(aliasRelativePathCopy.orphan(), errorCode); if (U_FAILURE(errorCode)) { return; } - // Only release ownership after aliasPathPairs takes it (no error happened): - aliasRelativePathCopy.orphan(); - LocalPointer keyUStringCopy(new UnicodeString(keyUString), errorCode); - aliasPathPairs.addElementX(keyUStringCopy.getAlias(), errorCode); + LocalPointer keyUStringCopy(keyUString.clone(), errorCode); + aliasPathPairs.adoptElement(keyUStringCopy.orphan(), errorCode); if (U_FAILURE(errorCode)) { return; } - // Only release ownership after aliasPathPairs takes it (no error happened): - keyUStringCopy.orphan(); } continue; } @@ -1760,16 +1754,12 @@ struct CalendarDataSink : public ResourceSink { if (U_FAILURE(errorCode)) { return; } if (aliasType == SAME_CALENDAR) { // Store the alias path and the current path on aliasPathPairs - LocalPointer aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode); - aliasPathPairs.addElementX(aliasRelativePathCopy.getAlias(), errorCode); + LocalPointer aliasRelativePathCopy(aliasRelativePath.clone(), errorCode); + aliasPathPairs.adoptElement(aliasRelativePathCopy.orphan(), errorCode); if (U_FAILURE(errorCode)) { return; } - // Only release ownership after aliasPathPairs takes it (no error happened): - aliasRelativePathCopy.orphan(); - LocalPointer pathCopy(new UnicodeString(path), errorCode); - aliasPathPairs.addElementX(pathCopy.getAlias(), errorCode); + LocalPointer pathCopy(path.clone(), errorCode); + aliasPathPairs.adoptElement(pathCopy.orphan(), errorCode); if (U_FAILURE(errorCode)) { return; } - // Only release ownership after aliasPathPairs takes it (no error happened): - pathCopy.orphan(); // Drop the latest key on the path and continue path.retainBetween(0, pathLength); diff --git a/deps/icu-small/source/i18n/dtitvfmt.cpp b/deps/icu-small/source/i18n/dtitvfmt.cpp index 298fb62be0c..d51ddcd5c70 100644 --- a/deps/icu-small/source/i18n/dtitvfmt.cpp +++ b/deps/icu-small/source/i18n/dtitvfmt.cpp @@ -965,16 +965,22 @@ DateIntervalFormat::normalizeHourMetacharacters(const UnicodeString& skeleton) c UnicodeString result = skeleton; UChar hourMetachar = u'\0'; + UChar dayPeriodChar = u'\0'; int32_t metacharStart = 0; int32_t metacharCount = 0; for (int32_t i = 0; i < result.length(); i++) { UChar c = result[i]; - if (c == LOW_J || c == CAP_J || c == CAP_C) { + if (c == LOW_J || c == CAP_J || c == CAP_C || c == LOW_H || c == CAP_H || c == LOW_K || c == CAP_K) { if (hourMetachar == u'\0') { hourMetachar = c; metacharStart = i; } ++metacharCount; + } else if (c == LOW_A || c == LOW_B || c == CAP_B) { + if (dayPeriodChar == u'\0') { + dayPeriodChar = c; + } + ++metacharCount; } else { if (hourMetachar != u'\0') { break; @@ -985,7 +991,6 @@ DateIntervalFormat::normalizeHourMetacharacters(const UnicodeString& skeleton) c if (hourMetachar != u'\0') { UErrorCode err = U_ZERO_ERROR; UChar hourChar = CAP_H; - UChar dayPeriodChar = LOW_A; UnicodeString convertedPattern = DateFormat::getBestPattern(fLocale, UnicodeString(hourMetachar), err); if (U_SUCCESS(err)) { @@ -1012,6 +1017,8 @@ DateIntervalFormat::normalizeHourMetacharacters(const UnicodeString& skeleton) c dayPeriodChar = LOW_B; } else if (convertedPattern.indexOf(CAP_B) != -1) { dayPeriodChar = CAP_B; + } else if (dayPeriodChar == u'\0') { + dayPeriodChar = LOW_A; } } diff --git a/deps/icu-small/source/i18n/dtptngen.cpp b/deps/icu-small/source/i18n/dtptngen.cpp index 6aee1750f90..e781c6e26f5 100644 --- a/deps/icu-small/source/i18n/dtptngen.cpp +++ b/deps/icu-small/source/i18n/dtptngen.cpp @@ -273,8 +273,6 @@ static const char* const CLDR_FIELD_WIDTH[] = { // [UDATPG_WIDTH_COUNT] "", "-short", "-narrow" }; -// TODO(ticket:13619): remove when definition uncommented in dtptngen.h. -static const int32_t UDATPG_WIDTH_COUNT = UDATPG_NARROW + 1; static constexpr UDateTimePGDisplayWidth UDATPG_WIDTH_APPENDITEM = UDATPG_WIDE; static constexpr int32_t UDATPG_FIELD_KEY_MAX = 24; // max length of CLDR field tag (type + width) @@ -393,10 +391,13 @@ DateTimePatternGenerator::operator=(const DateTimePatternGenerator& other) { *fp = *(other.fp); dtMatcher->copyFrom(other.dtMatcher->skeleton); *distanceInfo = *(other.distanceInfo); - dateTimeFormat = other.dateTimeFormat; + for (int32_t style = UDAT_FULL; style <= UDAT_SHORT; style++) { + dateTimeFormat[style] = other.dateTimeFormat[style]; + } decimal = other.decimal; - // NUL-terminate for the C API. - dateTimeFormat.getTerminatedBuffer(); + for (int32_t style = UDAT_FULL; style <= UDAT_SHORT; style++) { + dateTimeFormat[style].getTerminatedBuffer(); // NUL-terminate for the C API. + } decimal.getTerminatedBuffer(); delete skipMatcher; if ( other.skipMatcher == nullptr ) { @@ -430,7 +431,12 @@ DateTimePatternGenerator::operator==(const DateTimePatternGenerator& other) cons return true; } if ((pLocale==other.pLocale) && (patternMap->equals(*other.patternMap)) && - (dateTimeFormat==other.dateTimeFormat) && (decimal==other.decimal)) { + (decimal==other.decimal)) { + for (int32_t style = UDAT_FULL; style <= UDAT_SHORT; style++) { + if (dateTimeFormat[style] != other.dateTimeFormat[style]) { + return false; + } + } for ( int32_t i=0 ; igetSkeletonPtr(); + UDateFormatStyle style = UDAT_SHORT; + int32_t monthFieldLen = reqSkeleton->baseOriginal.getFieldLength(UDATPG_MONTH_FIELD); + if (monthFieldLen == 4) { + if (reqSkeleton->baseOriginal.getFieldLength(UDATPG_WEEKDAY_FIELD) > 0) { + style = UDAT_FULL; + } else { + style = UDAT_LONG; + } + } else if (monthFieldLen == 3) { + style = UDAT_MEDIUM; + } + // and now use it to compose date and time + dtFormat=getDateTimeFormat(style, status); SimpleFormatter(dtFormat, 2, 2, status).format(timePattern, datePattern, resultPattern, status); return resultPattern; } @@ -1335,14 +1355,45 @@ DateTimePatternGenerator::addCanonicalItems(UErrorCode& status) { void DateTimePatternGenerator::setDateTimeFormat(const UnicodeString& dtFormat) { - dateTimeFormat = dtFormat; - // NUL-terminate for the C API. - dateTimeFormat.getTerminatedBuffer(); + UErrorCode status = U_ZERO_ERROR; + for (int32_t style = UDAT_FULL; style <= UDAT_SHORT; style++) { + setDateTimeFormat((UDateFormatStyle)style, dtFormat, status); + } } const UnicodeString& DateTimePatternGenerator::getDateTimeFormat() const { - return dateTimeFormat; + UErrorCode status = U_ZERO_ERROR; + return getDateTimeFormat(UDAT_MEDIUM, status); +} + +void +DateTimePatternGenerator::setDateTimeFormat(UDateFormatStyle style, const UnicodeString& dtFormat, UErrorCode& status) { + if (U_FAILURE(status)) { + return; + } + if (style < UDAT_FULL || style > UDAT_SHORT) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + dateTimeFormat[style] = dtFormat; + // Note for the following: getTerminatedBuffer() can re-allocate the UnicodeString + // buffer so we do this here before clients request a const ref to the UnicodeString + // or its buffer. + dateTimeFormat[style].getTerminatedBuffer(); // NUL-terminate for the C API. +} + +const UnicodeString& +DateTimePatternGenerator::getDateTimeFormat(UDateFormatStyle style, UErrorCode& status) const { + static const UnicodeString emptyString = UNICODE_STRING_SIMPLE(""); + if (U_FAILURE(status)) { + return emptyString; + } + if (style < UDAT_FULL || style > UDAT_SHORT) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return emptyString; + } + return dateTimeFormat[style]; } void @@ -1378,13 +1429,15 @@ DateTimePatternGenerator::setDateTimeFromCalendar(const Locale& locale, UErrorCo } if (U_FAILURE(status)) { return; } - if (ures_getSize(dateTimePatterns.getAlias()) <= DateFormat::kDateTime) + if (ures_getSize(dateTimePatterns.getAlias()) <= DateFormat::kDateTimeOffset + DateFormat::kShort) { status = U_INVALID_FORMAT_ERROR; return; } - resStr = ures_getStringByIndex(dateTimePatterns.getAlias(), (int32_t)DateFormat::kDateTime, &resStrLen, &status); - setDateTimeFormat(UnicodeString(TRUE, resStr, resStrLen)); + for (int32_t style = UDAT_FULL; style <= UDAT_SHORT; style++) { + resStr = ures_getStringByIndex(dateTimePatterns.getAlias(), (int32_t)DateFormat::kDateTimeOffset + style, &resStrLen, &status); + setDateTimeFormat((UDateFormatStyle)style, UnicodeString(TRUE, resStr, resStrLen), status); + } } void @@ -2788,16 +2841,17 @@ DTSkeletonEnumeration::DTSkeletonEnumeration(PatternMap& patternMap, dtStrEnum t break; } if ( !isCanonicalItem(s) ) { - LocalPointer newElem(new UnicodeString(s), status); + LocalPointer newElem(s.clone(), status); if (U_FAILURE(status)) { return; } - fSkeletons->addElementX(newElem.getAlias(), status); + fSkeletons->addElement(newElem.getAlias(), status); if (U_FAILURE(status)) { fSkeletons.adoptInstead(nullptr); return; } - newElem.orphan(); // fSkeletons vector now owns the UnicodeString. + newElem.orphan(); // fSkeletons vector now owns the UnicodeString (although it + // does not use a deleter function to manage the ownership). } curElem = curElem->next.getAlias(); } @@ -2865,12 +2919,13 @@ DTRedundantEnumeration::add(const UnicodeString& pattern, UErrorCode& status) { if (U_FAILURE(status)) { return; } - fPatterns->addElementX(newElem.getAlias(), status); + fPatterns->addElement(newElem.getAlias(), status); if (U_FAILURE(status)) { fPatterns.adoptInstead(nullptr); return; } - newElem.orphan(); // fPatterns now owns the string. + newElem.orphan(); // fPatterns now owns the string, although a UVector + // deleter function is not used to manage that ownership. } const UnicodeString* diff --git a/deps/icu-small/source/i18n/formattedval_sbimpl.cpp b/deps/icu-small/source/i18n/formattedval_sbimpl.cpp index 70ffacac4b7..72197cdd8c7 100644 --- a/deps/icu-small/source/i18n/formattedval_sbimpl.cpp +++ b/deps/icu-small/source/i18n/formattedval_sbimpl.cpp @@ -230,6 +230,11 @@ bool FormattedValueStringBuilderImpl::nextPositionImpl(ConstrainedFieldPosition& if (si + 1 < spanIndicesCount) { nextSpanStart = spanIndices[si + 1].start; } + if (length == 0) { + // ICU-21871: Don't return fields on empty spans + i--; + continue; + } if (cfpos.matchesField(spanCategory, spanValue)) { fieldStart = i - fString.fZero; int32_t end = fieldStart + length; diff --git a/deps/icu-small/source/i18n/measunit_extra.cpp b/deps/icu-small/source/i18n/measunit_extra.cpp index 82811190079..2df9edee96a 100644 --- a/deps/icu-small/source/i18n/measunit_extra.cpp +++ b/deps/icu-small/source/i18n/measunit_extra.cpp @@ -615,7 +615,7 @@ class Parser { // Set to true when we've seen a "-per-" or a "per-", after which all units // are in the denominator. Until we find an "-and-", at which point the - // identifier is invalid pending TODO(CLDR-13700). + // identifier is invalid pending TODO(CLDR-13701). bool fAfterPer = false; Parser() : fSource(""), fTrie(u"") {} @@ -669,7 +669,7 @@ class Parser { * dimensionality. * * Returns an error if we parse both compound units and "-and-", since mixed - * compound units are not yet supported - TODO(CLDR-13700). + * compound units are not yet supported - TODO(CLDR-13701). * * @param result Will be overwritten by the result, if status shows success. * @param sawAnd If an "-and-" was parsed prior to finding the "single diff --git a/deps/icu-small/source/i18n/msgfmt.cpp b/deps/icu-small/source/i18n/msgfmt.cpp index b8cb2e2ca56..13a5a089516 100644 --- a/deps/icu-small/source/i18n/msgfmt.cpp +++ b/deps/icu-small/source/i18n/msgfmt.cpp @@ -854,19 +854,21 @@ StringEnumeration* MessageFormat::getFormatNames(UErrorCode& status) { if (U_FAILURE(status)) return NULL; - UVector *fFormatNames = new UVector(status); + LocalPointer formatNames(new UVector(status), status); if (U_FAILURE(status)) { - status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + return nullptr; } - fFormatNames->setDeleter(uprv_deleteUObject); + formatNames->setDeleter(uprv_deleteUObject); for (int32_t partIndex = 0; (partIndex = nextTopLevelArgStart(partIndex)) >= 0;) { - fFormatNames->addElementX(new UnicodeString(getArgName(partIndex + 1)), status); + LocalPointer name(getArgName(partIndex + 1).clone(), status); + formatNames->adoptElement(name.orphan(), status); + if (U_FAILURE(status)) return nullptr; } - StringEnumeration* nameEnumerator = new FormatNameEnumeration(fFormatNames, status); - return nameEnumerator; + LocalPointer nameEnumerator( + new FormatNameEnumeration(std::move(formatNames), status), status); + return U_SUCCESS(status) ? nameEnumerator.orphan() : nullptr; } // ------------------------------------- @@ -1912,9 +1914,9 @@ void MessageFormat::DummyFormat::parseObject(const UnicodeString&, } -FormatNameEnumeration::FormatNameEnumeration(UVector *fNameList, UErrorCode& /*status*/) { +FormatNameEnumeration::FormatNameEnumeration(LocalPointer nameList, UErrorCode& /*status*/) { pos=0; - fFormatNames = fNameList; + fFormatNames = std::move(nameList); } const UnicodeString* @@ -1936,7 +1938,6 @@ FormatNameEnumeration::count(UErrorCode& /*status*/) const { } FormatNameEnumeration::~FormatNameEnumeration() { - delete fFormatNames; } MessageFormat::PluralSelectorProvider::PluralSelectorProvider(const MessageFormat &mf, UPluralType t) diff --git a/deps/icu-small/source/i18n/msgfmt_impl.h b/deps/icu-small/source/i18n/msgfmt_impl.h index 57988389132..80cb8a691eb 100644 --- a/deps/icu-small/source/i18n/msgfmt_impl.h +++ b/deps/icu-small/source/i18n/msgfmt_impl.h @@ -26,7 +26,7 @@ U_NAMESPACE_BEGIN class FormatNameEnumeration : public StringEnumeration { public: - FormatNameEnumeration(UVector *fFormatNames, UErrorCode& status); + FormatNameEnumeration(LocalPointer fFormatNames, UErrorCode& status); virtual ~FormatNameEnumeration(); static UClassID U_EXPORT2 getStaticClassID(void); virtual UClassID getDynamicClassID(void) const override; @@ -35,7 +35,7 @@ class FormatNameEnumeration : public StringEnumeration { virtual int32_t count(UErrorCode& status) const override; private: int32_t pos; - UVector *fFormatNames; + LocalPointer fFormatNames; }; U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/number_affixutils.cpp b/deps/icu-small/source/i18n/number_affixutils.cpp index f9c154c885c..5f5ff4c3a63 100644 --- a/deps/icu-small/source/i18n/number_affixutils.cpp +++ b/deps/icu-small/source/i18n/number_affixutils.cpp @@ -135,8 +135,7 @@ Field AffixUtils::getFieldForType(AffixPatternType type) { case TYPE_PLUS_SIGN: return {UFIELD_CATEGORY_NUMBER, UNUM_SIGN_FIELD}; case TYPE_APPROXIMATELY_SIGN: - // TODO: Introduce a new field for the approximately sign? - return {UFIELD_CATEGORY_NUMBER, UNUM_SIGN_FIELD}; + return {UFIELD_CATEGORY_NUMBER, UNUM_APPROXIMATELY_SIGN_FIELD}; case TYPE_PERCENT: return {UFIELD_CATEGORY_NUMBER, UNUM_PERCENT_FIELD}; case TYPE_PERMILLE: diff --git a/deps/icu-small/source/i18n/number_compact.cpp b/deps/icu-small/source/i18n/number_compact.cpp index 62692f444df..60cd7bedf66 100644 --- a/deps/icu-small/source/i18n/number_compact.cpp +++ b/deps/icu-small/source/i18n/number_compact.cpp @@ -157,8 +157,8 @@ void CompactData::getUniquePatterns(UVector &output, UErrorCode &status) const { } // The string was not found; add it to the UVector. - // ANDY: This requires a const_cast. Why? - output.addElementX(const_cast(pattern), status); + // Note: must cast off const from pattern to store it in a UVector, which expects (void *) + output.addElement(const_cast(pattern), status); continue_outer: continue; diff --git a/deps/icu-small/source/i18n/number_decimalquantity.cpp b/deps/icu-small/source/i18n/number_decimalquantity.cpp index 6a2847b1c18..b40e1276c35 100644 --- a/deps/icu-small/source/i18n/number_decimalquantity.cpp +++ b/deps/icu-small/source/i18n/number_decimalquantity.cpp @@ -181,20 +181,22 @@ uint64_t DecimalQuantity::getPositionFingerprint() const { return fingerprint; } -void DecimalQuantity::roundToIncrement(double roundingIncrement, RoundingMode roundingMode, - UErrorCode& status) { +void DecimalQuantity::roundToIncrement( + uint64_t increment, + digits_t magnitude, + RoundingMode roundingMode, + UErrorCode& status) { // Do not call this method with an increment having only a 1 or a 5 digit! // Use a more efficient call to either roundToMagnitude() or roundToNickel(). // Check a few popular rounding increments; a more thorough check is in Java. - U_ASSERT(roundingIncrement != 0.01); - U_ASSERT(roundingIncrement != 0.05); - U_ASSERT(roundingIncrement != 0.1); - U_ASSERT(roundingIncrement != 0.5); - U_ASSERT(roundingIncrement != 1); - U_ASSERT(roundingIncrement != 5); + U_ASSERT(increment != 1); + U_ASSERT(increment != 5); + DecimalQuantity incrementDQ; + incrementDQ.setToLong(increment); + incrementDQ.adjustMagnitude(magnitude); DecNum incrementDN; - incrementDN.setTo(roundingIncrement, status); + incrementDQ.toDecNum(incrementDN, status); if (U_FAILURE(status)) { return; } // Divide this DecimalQuantity by the increment, round, then multiply back. @@ -254,6 +256,12 @@ bool DecimalQuantity::adjustMagnitude(int32_t delta) { return false; } +int32_t DecimalQuantity::adjustToZeroScale() { + int32_t retval = scale; + scale = 0; + return retval; +} + double DecimalQuantity::getPluralOperand(PluralOperand operand) const { // If this assertion fails, you need to call roundToInfinity() or some other rounding method. // See the comment at the top of this file explaining the "isApproximate" field. @@ -549,6 +557,65 @@ void DecimalQuantity::_setToDecNum(const DecNum& decnum, UErrorCode& status) { } } +DecimalQuantity DecimalQuantity::fromExponentString(UnicodeString num, UErrorCode& status) { + if (num.indexOf(u'e') >= 0 || num.indexOf(u'c') >= 0 + || num.indexOf(u'E') >= 0 || num.indexOf(u'C') >= 0) { + int32_t ePos = num.lastIndexOf('e'); + if (ePos < 0) { + ePos = num.lastIndexOf('c'); + } + if (ePos < 0) { + ePos = num.lastIndexOf('E'); + } + if (ePos < 0) { + ePos = num.lastIndexOf('C'); + } + int32_t expNumPos = ePos + 1; + UnicodeString exponentStr = num.tempSubString(expNumPos, num.length() - expNumPos); + + // parse exponentStr into exponent, but note that parseAsciiInteger doesn't handle the minus sign + bool isExpStrNeg = num[expNumPos] == u'-'; + int32_t exponentParsePos = isExpStrNeg ? 1 : 0; + int32_t exponent = ICU_Utility::parseAsciiInteger(exponentStr, exponentParsePos); + exponent = isExpStrNeg ? -exponent : exponent; + + // Compute the decNumber representation + UnicodeString fractionStr = num.tempSubString(0, ePos); + CharString fracCharStr = CharString(); + fracCharStr.appendInvariantChars(fractionStr, status); + DecNum decnum; + decnum.setTo(fracCharStr.toStringPiece(), status); + + // Clear and set this DecimalQuantity instance + DecimalQuantity dq; + dq.setToDecNum(decnum, status); + int32_t numFracDigit = getVisibleFractionCount(fractionStr); + dq.setMinFraction(numFracDigit); + dq.adjustExponent(exponent); + + return dq; + } else { + DecimalQuantity dq; + int numFracDigit = getVisibleFractionCount(num); + + CharString numCharStr = CharString(); + numCharStr.appendInvariantChars(num, status); + dq.setToDecNumber(numCharStr.toStringPiece(), status); + + dq.setMinFraction(numFracDigit); + return dq; + } +} + +int32_t DecimalQuantity::getVisibleFractionCount(UnicodeString value) { + int decimalPos = value.indexOf('.') + 1; + if (decimalPos == 0) { + return 0; + } else { + return value.length() - decimalPos; + } +} + int64_t DecimalQuantity::toLong(bool truncateIfOverflow) const { // NOTE: Call sites should be guarded by fitsInLong(), like this: // if (dq.fitsInLong()) { /* use dq.toLong() */ } else { /* use some fallback */ } @@ -948,6 +1015,44 @@ UnicodeString DecimalQuantity::toPlainString() const { return sb; } + +UnicodeString DecimalQuantity::toExponentString() const { + U_ASSERT(!isApproximate); + UnicodeString sb; + if (isNegative()) { + sb.append(u'-'); + } + + int32_t upper = scale + precision - 1; + int32_t lower = scale; + if (upper < lReqPos - 1) { + upper = lReqPos - 1; + } + if (lower > rReqPos) { + lower = rReqPos; + } + int32_t p = upper; + if (p < 0) { + sb.append(u'0'); + } + for (; p >= 0; p--) { + sb.append(u'0' + getDigitPos(p - scale)); + } + if (lower < 0) { + sb.append(u'.'); + } + for(; p >= lower; p--) { + sb.append(u'0' + getDigitPos(p - scale)); + } + + if (exponent != 0) { + sb.append(u'c'); + ICU_Utility::appendNumber(sb, exponent); + } + + return sb; +} + UnicodeString DecimalQuantity::toScientificString() const { U_ASSERT(!isApproximate); UnicodeString result; diff --git a/deps/icu-small/source/i18n/number_decimalquantity.h b/deps/icu-small/source/i18n/number_decimalquantity.h index 107c09a96a5..862addf5d6c 100644 --- a/deps/icu-small/source/i18n/number_decimalquantity.h +++ b/deps/icu-small/source/i18n/number_decimalquantity.h @@ -81,11 +81,15 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory { * *

    If rounding to a power of ten, use the more efficient {@link #roundToMagnitude} instead. * - * @param roundingIncrement The increment to which to round. + * @param increment The increment to which to round. + * @param magnitude The power of 10 to which to round. * @param roundingMode The {@link RoundingMode} to use if rounding is necessary. */ - void roundToIncrement(double roundingIncrement, RoundingMode roundingMode, - UErrorCode& status); + void roundToIncrement( + uint64_t increment, + digits_t magnitude, + RoundingMode roundingMode, + UErrorCode& status); /** Removes all fraction digits. */ void truncate(); @@ -140,6 +144,13 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory { */ bool adjustMagnitude(int32_t delta); + /** + * Scales the number such that the least significant nonzero digit is at magnitude 0. + * + * @return The previous magnitude of the least significant digit. + */ + int32_t adjustToZeroScale(); + /** * @return The power of ten corresponding to the most significant nonzero digit. * The number must not be zero. @@ -234,6 +245,9 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory { /** Internal method if the caller already has a DecNum. */ DecimalQuantity &setToDecNum(const DecNum& n, UErrorCode& status); + /** Returns a DecimalQuantity after parsing the input string. */ + static DecimalQuantity fromExponentString(UnicodeString n, UErrorCode& status); + /** * Appends a digit, optionally with one or more leading zeros, to the end of the value represented * by this DecimalQuantity. @@ -315,6 +329,10 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory { /** Returns the string without exponential notation. Slightly slower than toScientificString(). */ UnicodeString toPlainString() const; + /** Returns the string using ASCII digits and using exponential notation for non-zero + exponents, following the UTS 35 specification for plural rule samples. */ + UnicodeString toExponentString() const; + /** Visible for testing */ inline bool isUsingBytes() { return usingBytes; } @@ -518,6 +536,8 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory { void _setToDecNum(const DecNum& dn, UErrorCode& status); + static int32_t getVisibleFractionCount(UnicodeString value); + void convertToAccurateDouble(); /** Ensure that a byte array of at least 40 digits is allocated. */ diff --git a/deps/icu-small/source/i18n/number_longnames.cpp b/deps/icu-small/source/i18n/number_longnames.cpp index 5a4cf6321c8..b4e96504ded 100644 --- a/deps/icu-small/source/i18n/number_longnames.cpp +++ b/deps/icu-small/source/i18n/number_longnames.cpp @@ -431,13 +431,33 @@ void getMeasureData(const Locale &locale, subKey.append(unit.getType(), status); subKey.append("/", status); + // Check if unitSubType is an alias or not. + LocalUResourceBundlePointer aliasBundle(ures_open(U_ICUDATA_ALIAS, "metadata", &status)); + + UErrorCode aliasStatus = status; + StackUResourceBundle aliasFillIn; + CharString aliasKey; + aliasKey.append("alias/unit/", aliasStatus); + aliasKey.append(unit.getSubtype(), aliasStatus); + aliasKey.append("/replacement", aliasStatus); + ures_getByKeyWithFallback(aliasBundle.getAlias(), aliasKey.data(), aliasFillIn.getAlias(), + &aliasStatus); + CharString unitSubType; + if (!U_FAILURE(aliasStatus)) { + // This means the subType is an alias. Then, replace unitSubType with the replacement. + auto replacement = ures_getUnicodeString(aliasFillIn.getAlias(), &status); + unitSubType.appendInvariantChars(replacement, status); + } else { + unitSubType.append(unit.getSubtype(), status); + } + // Map duration-year-person, duration-week-person, etc. to duration-year, duration-week, ... // TODO(ICU-20400): Get duration-*-person data properly with aliases. - int32_t subtypeLen = static_cast(uprv_strlen(unit.getSubtype())); - if (subtypeLen > 7 && uprv_strcmp(unit.getSubtype() + subtypeLen - 7, "-person") == 0) { - subKey.append({unit.getSubtype(), subtypeLen - 7}, status); + int32_t subtypeLen = static_cast(uprv_strlen(unitSubType.data())); + if (subtypeLen > 7 && uprv_strcmp(unitSubType.data() + subtypeLen - 7, "-person") == 0) { + subKey.append({unitSubType.data(), subtypeLen - 7}, status); } else { - subKey.append({unit.getSubtype(), subtypeLen}, status); + subKey.append({unitSubType.data(), subtypeLen}, status); } if (width != UNUM_UNIT_WIDTH_FULL_NAME) { diff --git a/deps/icu-small/source/i18n/number_mapper.cpp b/deps/icu-small/source/i18n/number_mapper.cpp index 2d4d47a094d..350c431dfdd 100644 --- a/deps/icu-small/source/i18n/number_mapper.cpp +++ b/deps/icu-small/source/i18n/number_mapper.cpp @@ -134,7 +134,8 @@ MacroProps NumberPropertyMapper::oldToNew(const DecimalFormatProperties& propert if (PatternStringUtils::ignoreRoundingIncrement(roundingIncrement, maxFrac)) { precision = Precision::constructFraction(minFrac, maxFrac); } else { - precision = Precision::constructIncrement(roundingIncrement, minFrac); + // Convert the double increment to an integer increment + precision = Precision::increment(roundingIncrement).withMinFraction(minFrac); } } else if (explicitMinMaxSig) { minSig = minSig < 1 ? 1 : minSig > kMaxIntFracSig ? kMaxIntFracSig : minSig; @@ -293,9 +294,14 @@ MacroProps NumberPropertyMapper::oldToNew(const DecimalFormatProperties& propert } else if (rounding_.fType == Precision::PrecisionType::RND_INCREMENT || rounding_.fType == Precision::PrecisionType::RND_INCREMENT_ONE || rounding_.fType == Precision::PrecisionType::RND_INCREMENT_FIVE) { - increment_ = rounding_.fUnion.increment.fIncrement; minFrac_ = rounding_.fUnion.increment.fMinFrac; + // If incrementRounding is used, maxFrac is set equal to minFrac maxFrac_ = rounding_.fUnion.increment.fMinFrac; + // Convert the integer increment to a double + DecimalQuantity dq; + dq.setToLong(rounding_.fUnion.increment.fIncrement); + dq.adjustMagnitude(rounding_.fUnion.increment.fIncrementMagnitude); + increment_ = dq.toDouble(); } else if (rounding_.fType == Precision::PrecisionType::RND_SIGNIFICANT) { minSig_ = rounding_.fUnion.fracSig.fMinSig; maxSig_ = rounding_.fUnion.fracSig.fMaxSig; diff --git a/deps/icu-small/source/i18n/number_output.cpp b/deps/icu-small/source/i18n/number_output.cpp index 2c2c25eaedb..78006da8c42 100644 --- a/deps/icu-small/source/i18n/number_output.cpp +++ b/deps/icu-small/source/i18n/number_output.cpp @@ -39,6 +39,49 @@ MeasureUnit FormattedNumber::getOutputUnit(UErrorCode& status) const { return fData->outputUnit; } +NounClass FormattedNumber::getNounClass(UErrorCode &status) const { + UPRV_FORMATTED_VALUE_METHOD_GUARD(NounClass::OTHER); + const char *nounClass = fData->gender; + + // if it is not exist, return `OTHER` + if (uprv_strcmp(nounClass, "") == 0) { + return NounClass::OTHER; + } + + if (uprv_strcmp(nounClass, "neuter") == 0) { + return NounClass::NEUTER; + } + + if (uprv_strcmp(nounClass, "feminine") == 0) { + return NounClass::FEMININE; + } + + if (uprv_strcmp(nounClass, "masculine") == 0) { + return NounClass::MASCULINE; + } + + if (uprv_strcmp(nounClass, "animate") == 0) { + return NounClass::ANIMATE; + } + + if (uprv_strcmp(nounClass, "inanimate") == 0) { + return NounClass::INANIMATE; + } + + if (uprv_strcmp(nounClass, "personal") == 0) { + return NounClass::PERSONAL; + } + + if (uprv_strcmp(nounClass, "common") == 0) { + return NounClass::COMMON; + } + + // In case there is no matching, this means there are noun classes + // that are not supported yet. + status = U_INTERNAL_PROGRAM_ERROR; + return NounClass::OTHER; +} + const char *FormattedNumber::getGender(UErrorCode &status) const { UPRV_FORMATTED_VALUE_METHOD_GUARD("") return fData->gender; diff --git a/deps/icu-small/source/i18n/number_patternstring.cpp b/deps/icu-small/source/i18n/number_patternstring.cpp index e819d39e967..2738895d8ad 100644 --- a/deps/icu-small/source/i18n/number_patternstring.cpp +++ b/deps/icu-small/source/i18n/number_patternstring.cpp @@ -750,7 +750,7 @@ UnicodeString PatternStringUtils::propertiesToPatternString(const DecimalFormatP int32_t groupingLength = grouping1 + grouping2 + 1; // Figure out the digits we need to put in the pattern. - double roundingInterval = properties.roundingIncrement; + double increment = properties.roundingIncrement; UnicodeString digitsString; int32_t digitsStringScale = 0; if (maxSig != uprv_min(dosMax, -1)) { @@ -761,14 +761,14 @@ UnicodeString PatternStringUtils::propertiesToPatternString(const DecimalFormatP while (digitsString.length() < maxSig) { digitsString.append(u'#'); } - } else if (roundingInterval != 0.0 && !ignoreRoundingIncrement(roundingInterval,maxFrac)) { - // Rounding Interval. - digitsStringScale = -roundingutils::doubleFractionLength(roundingInterval, nullptr); - // TODO: Check for DoS here? + } else if (increment != 0.0 && !ignoreRoundingIncrement(increment,maxFrac)) { + // Rounding Increment. DecimalQuantity incrementQuantity; - incrementQuantity.setToDouble(roundingInterval); + incrementQuantity.setToDouble(increment); + incrementQuantity.roundToInfinity(); + digitsStringScale = incrementQuantity.getLowerDisplayMagnitude(); incrementQuantity.adjustMagnitude(-digitsStringScale); - incrementQuantity.roundToMagnitude(0, kDefaultMode, status); + incrementQuantity.setMinInteger(minInt - digitsStringScale); UnicodeString str = incrementQuantity.toPlainString(); if (str.charAt(0) == u'-') { // TODO: Unsupported operation exception or fail silently? diff --git a/deps/icu-small/source/i18n/number_rounding.cpp b/deps/icu-small/source/i18n/number_rounding.cpp index 877df63c8f6..a9b3f16c050 100644 --- a/deps/icu-small/source/i18n/number_rounding.cpp +++ b/deps/icu-small/source/i18n/number_rounding.cpp @@ -36,27 +36,24 @@ void number::impl::parseIncrementOption(const StringSegment &segment, // Utilize DecimalQuantity/decNumber to parse this for us. DecimalQuantity dq; UErrorCode localStatus = U_ZERO_ERROR; - DecNum decnum; - decnum.setTo({buffer.data(), buffer.length()}, localStatus); - dq.setToDecNum(decnum, localStatus); - if (U_FAILURE(localStatus) || decnum.isSpecial()) { + dq.setToDecNumber({buffer.data(), buffer.length()}, localStatus); + if (U_FAILURE(localStatus) || dq.isNaN() || dq.isInfinite()) { // throw new SkeletonSyntaxException("Invalid rounding increment", segment, e); status = U_NUMBER_SKELETON_SYNTAX_ERROR; return; } - double increment = dq.toDouble(); - - // We also need to figure out how many digits. Do a brute force string operation. - int decimalOffset = 0; - while (decimalOffset < segment.length() && segment.charAt(decimalOffset) != '.') { - decimalOffset++; - } - if (decimalOffset == segment.length()) { - outPrecision = Precision::increment(increment); - } else { - int32_t fractionLength = segment.length() - decimalOffset - 1; - outPrecision = Precision::increment(increment).withMinFraction(fractionLength); + // Now we break apart the number into a mantissa and exponent (magnitude). + int32_t magnitude = dq.adjustToZeroScale(); + // setToDecNumber drops trailing zeros, so we search for the '.' manually. + for (int32_t i=0; i(length - point); -} - - Precision Precision::unlimited() { return Precision(RND_NONE, {}); } @@ -204,7 +173,19 @@ Precision Precision::trailingZeroDisplay(UNumberTrailingZeroDisplay trailingZero IncrementPrecision Precision::increment(double roundingIncrement) { if (roundingIncrement > 0.0) { - return constructIncrement(roundingIncrement, 0); + DecimalQuantity dq; + dq.setToDouble(roundingIncrement); + dq.roundToInfinity(); + int32_t magnitude = dq.adjustToZeroScale(); + return constructIncrement(dq.toLong(), magnitude); + } else { + return {U_NUMBER_ARG_OUTOFBOUNDS_ERROR}; + } +} + +IncrementPrecision Precision::incrementExact(uint64_t mantissa, int16_t magnitude) { + if (mantissa > 0.0) { + return constructIncrement(mantissa, magnitude); } else { return {U_NUMBER_ARG_OUTOFBOUNDS_ERROR}; } @@ -226,7 +207,8 @@ Precision FractionPrecision::withSignificantDigits( *this, minSignificantDigits, maxSignificantDigits, - priority); + priority, + false); } else { return {U_NUMBER_ARG_OUTOFBOUNDS_ERROR}; } @@ -239,7 +221,8 @@ Precision FractionPrecision::withMinDigits(int32_t minSignificantDigits) const { *this, 1, minSignificantDigits, - UNUM_ROUNDING_PRIORITY_RELAXED); + UNUM_ROUNDING_PRIORITY_RELAXED, + true); } else { return {U_NUMBER_ARG_OUTOFBOUNDS_ERROR}; } @@ -251,7 +234,8 @@ Precision FractionPrecision::withMaxDigits(int32_t maxSignificantDigits) const { return constructFractionSignificant(*this, 1, maxSignificantDigits, - UNUM_ROUNDING_PRIORITY_STRICT); + UNUM_ROUNDING_PRIORITY_STRICT, + true); } else { return {U_NUMBER_ARG_OUTOFBOUNDS_ERROR}; } @@ -266,8 +250,8 @@ Precision Precision::withCurrency(const CurrencyUnit ¤cy, UErrorCode &stat int32_t minMaxFrac = ucurr_getDefaultFractionDigitsForUsage( isoCode, fUnion.currencyUsage, &status); Precision retval = (increment != 0.0) - ? static_cast(constructIncrement(increment, minMaxFrac)) - : static_cast(constructFraction(minMaxFrac, minMaxFrac)); + ? Precision::increment(increment) + : static_cast(Precision::fixedFraction(minMaxFrac)); retval.fTrailingZeroDisplay = fTrailingZeroDisplay; return retval; } @@ -285,7 +269,9 @@ Precision CurrencyPrecision::withCurrency(const CurrencyUnit ¤cy) const { Precision IncrementPrecision::withMinFraction(int32_t minFrac) const { if (fType == RND_ERROR) { return *this; } // no-op in error state if (minFrac >= 0 && minFrac <= kMaxIntFracSig) { - return constructIncrement(fUnion.increment.fIncrement, minFrac); + IncrementPrecision copy = *this; + copy.fUnion.increment.fMinFrac = minFrac; + return copy; } else { return {U_NUMBER_ARG_OUTOFBOUNDS_ERROR}; } @@ -318,35 +304,34 @@ Precision::constructFractionSignificant( const FractionPrecision &base, int32_t minSig, int32_t maxSig, - UNumberRoundingPriority priority) { + UNumberRoundingPriority priority, + bool retain) { FractionSignificantSettings settings = base.fUnion.fracSig; settings.fMinSig = static_cast(minSig); settings.fMaxSig = static_cast(maxSig); settings.fPriority = priority; + settings.fRetain = retain; PrecisionUnion union_; union_.fracSig = settings; return {RND_FRACTION_SIGNIFICANT, union_}; } -IncrementPrecision Precision::constructIncrement(double increment, int32_t minFrac) { +IncrementPrecision Precision::constructIncrement(uint64_t increment, digits_t magnitude) { IncrementSettings settings; // Note: For number formatting, fIncrement is used for RND_INCREMENT but not // RND_INCREMENT_ONE or RND_INCREMENT_FIVE. However, fIncrement is used in all // three when constructing a skeleton. settings.fIncrement = increment; - settings.fMinFrac = static_cast(minFrac); - // One of the few pre-computed quantities: - // Note: it is possible for minFrac to be more than maxFrac... (misleading) - int8_t singleDigit; - settings.fMaxFrac = roundingutils::doubleFractionLength(increment, &singleDigit); + settings.fIncrementMagnitude = magnitude; + settings.fMinFrac = magnitude > 0 ? 0 : -magnitude; PrecisionUnion union_; union_.increment = settings; - if (singleDigit == 1) { + if (increment == 1) { // NOTE: In C++, we must return the correct value type with the correct union. // It would be invalid to return a RND_FRACTION here because the methods on the // IncrementPrecision type assume that the union is backed by increment data. return {RND_INCREMENT_ONE, union_}; - } else if (singleDigit == 5) { + } else if (increment == 5) { return {RND_INCREMENT_FIVE, union_}; } else { return {RND_INCREMENT, union_}; @@ -457,6 +442,23 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const break; case Precision::RND_FRACTION_SIGNIFICANT: { + // From ECMA-402: + /* + Let sResult be ToRawPrecision(...). + Let fResult be ToRawFixed(...). + If intlObj.[[RoundingType]] is morePrecision, then + If sResult.[[RoundingMagnitude]] ≤ fResult.[[RoundingMagnitude]], then + Let result be sResult. + Else, + Let result be fResult. + Else, + Assert: intlObj.[[RoundingType]] is lessPrecision. + If sResult.[[RoundingMagnitude]] ≤ fResult.[[RoundingMagnitude]], then + Let result be fResult. + Else, + Let result be sResult. + */ + int32_t roundingMag1 = getRoundingMagnitudeFraction(fPrecision.fUnion.fracSig.fMaxFrac); int32_t roundingMag2 = getRoundingMagnitudeSignificant(value, fPrecision.fUnion.fracSig.fMaxSig); int32_t roundingMag; @@ -465,11 +467,35 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const } else { roundingMag = uprv_max(roundingMag1, roundingMag2); } - value.roundToMagnitude(roundingMag, fRoundingMode, status); + if (!value.isZeroish()) { + int32_t upperMag = value.getMagnitude(); + value.roundToMagnitude(roundingMag, fRoundingMode, status); + if (!value.isZeroish() && value.getMagnitude() != upperMag && roundingMag1 == roundingMag2) { + // roundingMag2 needs to be the magnitude after rounding + roundingMag2 += 1; + } + } int32_t displayMag1 = getDisplayMagnitudeFraction(fPrecision.fUnion.fracSig.fMinFrac); int32_t displayMag2 = getDisplayMagnitudeSignificant(value, fPrecision.fUnion.fracSig.fMinSig); - int32_t displayMag = uprv_min(displayMag1, displayMag2); + int32_t displayMag; + if (fPrecision.fUnion.fracSig.fRetain) { + // withMinDigits + withMaxDigits + displayMag = uprv_min(displayMag1, displayMag2); + } else if (fPrecision.fUnion.fracSig.fPriority == UNUM_ROUNDING_PRIORITY_RELAXED) { + if (roundingMag2 <= roundingMag1) { + displayMag = displayMag2; + } else { + displayMag = displayMag1; + } + } else { + U_ASSERT(fPrecision.fUnion.fracSig.fPriority == UNUM_ROUNDING_PRIORITY_STRICT); + if (roundingMag2 <= roundingMag1) { + displayMag = displayMag1; + } else { + displayMag = displayMag2; + } + } resolvedMinFraction = uprv_max(0, -displayMag); break; @@ -478,6 +504,7 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const case Precision::RND_INCREMENT: value.roundToIncrement( fPrecision.fUnion.increment.fIncrement, + fPrecision.fUnion.increment.fIncrementMagnitude, fRoundingMode, status); resolvedMinFraction = fPrecision.fUnion.increment.fMinFrac; @@ -485,7 +512,7 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const case Precision::RND_INCREMENT_ONE: value.roundToMagnitude( - -fPrecision.fUnion.increment.fMaxFrac, + fPrecision.fUnion.increment.fIncrementMagnitude, fRoundingMode, status); resolvedMinFraction = fPrecision.fUnion.increment.fMinFrac; @@ -493,7 +520,7 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const case Precision::RND_INCREMENT_FIVE: value.roundToNickel( - -fPrecision.fUnion.increment.fMaxFrac, + fPrecision.fUnion.increment.fIncrementMagnitude, fRoundingMode, status); resolvedMinFraction = fPrecision.fUnion.increment.fMinFrac; diff --git a/deps/icu-small/source/i18n/number_roundingutils.h b/deps/icu-small/source/i18n/number_roundingutils.h index 06fadd29fd5..66571272545 100644 --- a/deps/icu-small/source/i18n/number_roundingutils.h +++ b/deps/icu-small/source/i18n/number_roundingutils.h @@ -174,15 +174,6 @@ inline bool roundsAtMidpoint(int roundingMode) { } } -/** - * Computes the number of fraction digits in a double. Used for computing maxFrac for an increment. - * Calls into the DoubleToStringConverter library to do so. - * - * @param singleDigit An output parameter; set to a number if that is the - * only digit in the double, or -1 if there is more than one digit. - */ -digits_t doubleFractionLength(double input, int8_t* singleDigit); - } // namespace roundingutils diff --git a/deps/icu-small/source/i18n/number_skeletons.cpp b/deps/icu-small/source/i18n/number_skeletons.cpp index de70c5cedff..c51831b6823 100644 --- a/deps/icu-small/source/i18n/number_skeletons.cpp +++ b/deps/icu-small/source/i18n/number_skeletons.cpp @@ -1344,8 +1344,9 @@ bool blueprint_helpers::parseFracSigOption(const StringSegment& segment, MacroPr // @, @@, @@@ maxSig = minSig; } - UNumberRoundingPriority priority; + auto& oldPrecision = static_cast(macros.precision); if (offset < segment.length()) { + UNumberRoundingPriority priority; if (maxSig == -1) { // The wildcard character is not allowed with the priority annotation status = U_NUMBER_SKELETON_SYNTAX_ERROR; @@ -1367,22 +1368,19 @@ bool blueprint_helpers::parseFracSigOption(const StringSegment& segment, MacroPr status = U_NUMBER_SKELETON_SYNTAX_ERROR; return false; } + macros.precision = oldPrecision.withSignificantDigits(minSig, maxSig, priority); } else if (maxSig == -1) { // withMinDigits - maxSig = minSig; - minSig = 1; - priority = UNUM_ROUNDING_PRIORITY_RELAXED; + macros.precision = oldPrecision.withMinDigits(minSig); } else if (minSig == 1) { // withMaxDigits - priority = UNUM_ROUNDING_PRIORITY_STRICT; + macros.precision = oldPrecision.withMaxDigits(maxSig); } else { // Digits options with both min and max sig require the priority option status = U_NUMBER_SKELETON_SYNTAX_ERROR; return false; } - auto& oldPrecision = static_cast(macros.precision); - macros.precision = oldPrecision.withSignificantDigits(minSig, maxSig, priority); return true; } @@ -1399,12 +1397,16 @@ void blueprint_helpers::parseIncrementOption(const StringSegment &segment, Macro number::impl::parseIncrementOption(segment, macros.precision, status); } -void blueprint_helpers::generateIncrementOption(double increment, int32_t minFrac, UnicodeString& sb, - UErrorCode&) { +void blueprint_helpers::generateIncrementOption( + uint32_t increment, + digits_t incrementMagnitude, + int32_t minFrac, + UnicodeString& sb, + UErrorCode&) { // Utilize DecimalQuantity/double_conversion to format this for us. DecimalQuantity dq; - dq.setToDouble(increment); - dq.roundToInfinity(); + dq.setToLong(increment); + dq.adjustMagnitude(incrementMagnitude); dq.setMinFraction(minFrac); sb.append(dq.toPlainString()); } @@ -1617,11 +1619,21 @@ bool GeneratorHelpers::precision(const MacroProps& macros, UnicodeString& sb, UE const Precision::FractionSignificantSettings& impl = macros.precision.fUnion.fracSig; blueprint_helpers::generateFractionStem(impl.fMinFrac, impl.fMaxFrac, sb, status); sb.append(u'/'); - blueprint_helpers::generateDigitsStem(impl.fMinSig, impl.fMaxSig, sb, status); - if (impl.fPriority == UNUM_ROUNDING_PRIORITY_RELAXED) { - sb.append(u'r'); + if (impl.fRetain) { + if (impl.fPriority == UNUM_ROUNDING_PRIORITY_RELAXED) { + // withMinDigits + blueprint_helpers::generateDigitsStem(impl.fMaxSig, -1, sb, status); + } else { + // withMaxDigits + blueprint_helpers::generateDigitsStem(1, impl.fMaxSig, sb, status); + } } else { - sb.append(u's'); + blueprint_helpers::generateDigitsStem(impl.fMinSig, impl.fMaxSig, sb, status); + if (impl.fPriority == UNUM_ROUNDING_PRIORITY_RELAXED) { + sb.append(u'r'); + } else { + sb.append(u's'); + } } } else if (macros.precision.fType == Precision::RND_INCREMENT || macros.precision.fType == Precision::RND_INCREMENT_ONE @@ -1630,6 +1642,7 @@ bool GeneratorHelpers::precision(const MacroProps& macros, UnicodeString& sb, UE sb.append(u"precision-increment/", -1); blueprint_helpers::generateIncrementOption( impl.fIncrement, + impl.fIncrementMagnitude, impl.fMinFrac, sb, status); diff --git a/deps/icu-small/source/i18n/number_skeletons.h b/deps/icu-small/source/i18n/number_skeletons.h index be41f1b3237..27f69cd48c3 100644 --- a/deps/icu-small/source/i18n/number_skeletons.h +++ b/deps/icu-small/source/i18n/number_skeletons.h @@ -286,7 +286,7 @@ bool parseTrailingZeroOption(const StringSegment& segment, MacroProps& macros, U void parseIncrementOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status); void -generateIncrementOption(double increment, int32_t minFrac, UnicodeString& sb, UErrorCode& status); +generateIncrementOption(uint32_t increment, digits_t incrementMagnitude, int32_t minFrac, UnicodeString& sb, UErrorCode& status); void parseIntegerWidthOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status); diff --git a/deps/icu-small/source/i18n/numsys.cpp b/deps/icu-small/source/i18n/numsys.cpp index 44aaf8e2a5f..934149039c5 100644 --- a/deps/icu-small/source/i18n/numsys.cpp +++ b/deps/icu-small/source/i18n/numsys.cpp @@ -313,12 +313,7 @@ U_CFUNC void initNumsysNames(UErrorCode &status) { } const char *nsName = ures_getKey(nsCurrent.getAlias()); LocalPointer newElem(new UnicodeString(nsName, -1, US_INV), status); - if (U_SUCCESS(status)) { - numsysNames->addElementX(newElem.getAlias(), status); - if (U_SUCCESS(status)) { - newElem.orphan(); // on success, the numsysNames vector owns newElem. - } - } + numsysNames->adoptElement(newElem.orphan(), status); } ures_close(numberingSystemsInfo); diff --git a/deps/icu-small/source/i18n/plurrule.cpp b/deps/icu-small/source/i18n/plurrule.cpp index d1918c46981..7d1037f8bdd 100644 --- a/deps/icu-small/source/i18n/plurrule.cpp +++ b/deps/icu-small/source/i18n/plurrule.cpp @@ -1548,14 +1548,9 @@ PluralKeywordEnumeration::PluralKeywordEnumeration(RuleChain *header, UErrorCode UBool addKeywordOther = TRUE; RuleChain *node = header; while (node != nullptr) { - auto newElem = new UnicodeString(node->fKeyword); - if (newElem == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - fKeywordNames.addElementX(newElem, status); + LocalPointer newElem(node->fKeyword.clone(), status); + fKeywordNames.adoptElement(newElem.orphan(), status); if (U_FAILURE(status)) { - delete newElem; return; } if (0 == node->fKeyword.compare(PLURAL_KEYWORD_OTHER, 5)) { @@ -1565,14 +1560,9 @@ PluralKeywordEnumeration::PluralKeywordEnumeration(RuleChain *header, UErrorCode } if (addKeywordOther) { - auto newElem = new UnicodeString(PLURAL_KEYWORD_OTHER); - if (newElem == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - fKeywordNames.addElementX(newElem, status); + LocalPointer newElem(new UnicodeString(PLURAL_KEYWORD_OTHER), status); + fKeywordNames.adoptElement(newElem.orphan(), status); if (U_FAILURE(status)) { - delete newElem; return; } } @@ -1628,7 +1618,7 @@ FixedDecimal::FixedDecimal(double n, int32_t v, int64_t f, int32_t e) { init(n, v, f, e); // check values. TODO make into unit test. // - // long visiblePower = (int) Math.pow(10, v); + // long visiblePower = (int) Math.pow(10.0, v); // if (decimalDigits > visiblePower) { // throw new IllegalArgumentException(); // } @@ -1881,7 +1871,7 @@ void FixedDecimal::adjustForMinFractionDigits(int32_t minFractionDigits) { double FixedDecimal::getPluralOperand(PluralOperand operand) const { switch(operand) { - case PLURAL_OPERAND_N: return (exponent == 0 ? source : source * pow(10, exponent)); + case PLURAL_OPERAND_N: return (exponent == 0 ? source : source * pow(10.0, exponent)); case PLURAL_OPERAND_I: return (double) longValue(); case PLURAL_OPERAND_F: return static_cast(decimalDigits); case PLURAL_OPERAND_T: return static_cast(decimalDigitsWithoutTrailingZeros); @@ -1932,14 +1922,14 @@ UnicodeString FixedDecimal::toString() const { } double FixedDecimal::doubleValue() const { - return (isNegative ? -source : source) * pow(10, exponent); + return (isNegative ? -source : source) * pow(10.0, exponent); } int64_t FixedDecimal::longValue() const { if (exponent == 0) { return intValue; } else { - return (long) (pow(10, exponent) * intValue); + return (long) (pow(10.0, exponent) * intValue); } } diff --git a/deps/icu-small/source/i18n/rbt_set.cpp b/deps/icu-small/source/i18n/rbt_set.cpp index abc4413c2c6..6835c03a698 100644 --- a/deps/icu-small/source/i18n/rbt_set.cpp +++ b/deps/icu-small/source/i18n/rbt_set.cpp @@ -163,16 +163,13 @@ U_NAMESPACE_BEGIN /** * Construct a new empty rule set. */ -TransliterationRuleSet::TransliterationRuleSet(UErrorCode& status) : UMemory() { - ruleVector = new UVector(&_deleteRule, NULL, status); +TransliterationRuleSet::TransliterationRuleSet(UErrorCode& status) : + UMemory(), ruleVector(nullptr), rules(nullptr), index {}, maxContextLength(0) { + LocalPointer lpRuleVector(new UVector(_deleteRule, nullptr, status), status); if (U_FAILURE(status)) { return; } - if (ruleVector == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - } - rules = NULL; - maxContextLength = 0; + ruleVector = lpRuleVector.orphan(); } /** @@ -180,27 +177,24 @@ TransliterationRuleSet::TransliterationRuleSet(UErrorCode& status) : UMemory() { */ TransliterationRuleSet::TransliterationRuleSet(const TransliterationRuleSet& other) : UMemory(other), - ruleVector(0), - rules(0), + ruleVector(nullptr), + rules(nullptr), maxContextLength(other.maxContextLength) { int32_t i, len; uprv_memcpy(index, other.index, sizeof(index)); UErrorCode status = U_ZERO_ERROR; - ruleVector = new UVector(&_deleteRule, NULL, status); - if (other.ruleVector != 0 && ruleVector != 0 && U_SUCCESS(status)) { + LocalPointer lpRuleVector(new UVector(_deleteRule, nullptr, status), status); + if (U_FAILURE(status)) { + return; + } + ruleVector = lpRuleVector.orphan(); + if (other.ruleVector != nullptr && U_SUCCESS(status)) { len = other.ruleVector->size(); for (i=0; ielementAt(i)); - // Null pointer test - if (tempTranslitRule == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - break; - } - ruleVector->addElementX(tempTranslitRule, status); - if (U_FAILURE(status)) { - break; - } + LocalPointer tempTranslitRule( + new TransliterationRule(*(TransliterationRule*)other.ruleVector->elementAt(i)), status); + ruleVector->adoptElement(tempTranslitRule.orphan(), status); } } if (other.rules != 0 && U_SUCCESS(status)) { @@ -247,11 +241,11 @@ int32_t TransliterationRuleSet::getMaximumContextLength(void) const { */ void TransliterationRuleSet::addRule(TransliterationRule* adoptedRule, UErrorCode& status) { + LocalPointer lpAdoptedRule(adoptedRule); + ruleVector->adoptElement(lpAdoptedRule.orphan(), status); if (U_FAILURE(status)) { - delete adoptedRule; return; } - ruleVector->addElementX(adoptedRule, status); int32_t len; if ((len = adoptedRule->getContextLength()) > maxContextLength) { @@ -316,7 +310,7 @@ void TransliterationRuleSet::freeze(UParseError& parseError,UErrorCode& status) for (j=0; j= 0) { if (indexValue[j] == x) { - v.addElementX(ruleVector->elementAt(j), status); + v.addElement(ruleVector->elementAt(j), status); } } else { // If the indexValue is < 0, then the first key character is @@ -325,13 +319,16 @@ void TransliterationRuleSet::freeze(UParseError& parseError,UErrorCode& status) // rarely, so we seldom treat this code path. TransliterationRule* r = (TransliterationRule*) ruleVector->elementAt(j); if (r->matchesIndexValue((uint8_t)x)) { - v.addElementX(r, status); + v.addElement(r, status); } } } } uprv_free(indexValue); index[256] = v.size(); + if (U_FAILURE(status)) { + return; + } /* Freeze things into an array. */ diff --git a/deps/icu-small/source/i18n/region.cpp b/deps/icu-small/source/i18n/region.cpp index 2e013708bb8..277a22fd091 100644 --- a/deps/icu-small/source/i18n/region.cpp +++ b/deps/icu-small/source/i18n/region.cpp @@ -39,11 +39,6 @@ U_CDECL_BEGIN -static void U_CALLCONV -deleteRegion(void *obj) { - delete (icu::Region *)obj; -} - /** * Cleanup callback func */ @@ -90,7 +85,8 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { LocalPointer continents(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status); LocalPointer groupings(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status); - allRegions = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status); + LocalPointer lpAllRegions(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status); + allRegions = lpAllRegions.orphan(); LocalUResourceBundlePointer metadata(ures_openDirect(NULL,"metadata",&status)); LocalUResourceBundlePointer metadataAlias(ures_getByKey(metadata.getAlias(),"alias",NULL,&status)); @@ -109,16 +105,17 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { LocalUResourceBundlePointer worldContainment(ures_getByKey(territoryContainment.getAlias(),"001",NULL,&status)); LocalUResourceBundlePointer groupingContainment(ures_getByKey(territoryContainment.getAlias(),"grouping",NULL,&status)); + ucln_i18n_registerCleanup(UCLN_I18N_REGION, region_cleanup); if (U_FAILURE(status)) { return; } // now, initialize - uhash_setValueDeleter(newRegionIDMap.getAlias(), deleteRegion); // regionIDMap owns objs - uhash_setKeyDeleter(newRegionAliases.getAlias(), uprv_deleteUObject); // regionAliases owns the string keys + uhash_setValueDeleter(newRegionIDMap.getAlias(), uprv_deleteUObject); // regionIDMap owns objs + uhash_setKeyDeleter(newRegionAliases.getAlias(), uprv_deleteUObject); // regionAliases owns the string keys - while ( ures_hasNext(regionRegular.getAlias()) ) { + while (U_SUCCESS(status) && ures_hasNext(regionRegular.getAlias())) { UnicodeString regionName = ures_getNextUnicodeString(regionRegular.getAlias(),NULL,&status); int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER); UChar buf[6]; @@ -126,18 +123,18 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { if ( rangeMarkerLocation > 0 ) { UChar endRange = regionName.charAt(rangeMarkerLocation+1); buf[rangeMarkerLocation] = 0; - while ( buf[rangeMarkerLocation-1] <= endRange ) { + while (U_SUCCESS(status) && buf[rangeMarkerLocation-1] <= endRange) { LocalPointer newRegion(new UnicodeString(buf), status); - allRegions->addElementX(newRegion.orphan(),status); + allRegions->adoptElement(newRegion.orphan(), status); buf[rangeMarkerLocation-1]++; } } else { LocalPointer newRegion(new UnicodeString(regionName), status); - allRegions->addElementX(newRegion.orphan(),status); + allRegions->adoptElement(newRegion.orphan(), status); } } - while ( ures_hasNext(regionMacro.getAlias()) ) { + while (U_SUCCESS(status) && ures_hasNext(regionMacro.getAlias())) { UnicodeString regionName = ures_getNextUnicodeString(regionMacro.getAlias(),NULL,&status); int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER); UChar buf[6]; @@ -145,25 +142,29 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { if ( rangeMarkerLocation > 0 ) { UChar endRange = regionName.charAt(rangeMarkerLocation+1); buf[rangeMarkerLocation] = 0; - while ( buf[rangeMarkerLocation-1] <= endRange ) { + while ( buf[rangeMarkerLocation-1] <= endRange && U_SUCCESS(status)) { LocalPointer newRegion(new UnicodeString(buf), status); - allRegions->addElementX(newRegion.orphan(),status); + allRegions->adoptElement(newRegion.orphan(),status); buf[rangeMarkerLocation-1]++; } } else { LocalPointer newRegion(new UnicodeString(regionName), status); - allRegions->addElementX(newRegion.orphan(),status); + allRegions->adoptElement(newRegion.orphan(),status); } } - while ( ures_hasNext(regionUnknown.getAlias()) ) { - LocalPointer regionName (new UnicodeString(ures_getNextUnicodeString(regionUnknown.getAlias(),NULL,&status),status)); - allRegions->addElementX(regionName.orphan(),status); + while (U_SUCCESS(status) && ures_hasNext(regionUnknown.getAlias())) { + LocalPointer regionName ( + new UnicodeString(ures_getNextUnicodeString(regionUnknown.getAlias(), nullptr, &status), status)); + allRegions->adoptElement(regionName.orphan(),status); } - while ( ures_hasNext(worldContainment.getAlias()) ) { + while (U_SUCCESS(status) && ures_hasNext(worldContainment.getAlias())) { UnicodeString *continentName = new UnicodeString(ures_getNextUnicodeString(worldContainment.getAlias(),NULL,&status)); - continents->addElementX(continentName,status); + continents->adoptElement(continentName,status); + } + if (U_FAILURE(status)) { + return; } for ( int32_t i = 0 ; i < allRegions->size() ; i++ ) { @@ -191,22 +192,32 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { } UResourceBundle *groupingBundle = nullptr; - while ( ures_hasNext(groupingContainment.getAlias()) ) { + while (U_SUCCESS(status) && ures_hasNext(groupingContainment.getAlias())) { groupingBundle = ures_getNextResource(groupingContainment.getAlias(), groupingBundle, &status); if (U_FAILURE(status)) { break; } UnicodeString *groupingName = new UnicodeString(ures_getKey(groupingBundle), -1, US_INV); - groupings->addElementX(groupingName,status); - Region *grouping = (Region *) uhash_get(newRegionIDMap.getAlias(),groupingName); + LocalPointer lpGroupingName(groupingName, status); + groupings->adoptElement(lpGroupingName.orphan(), status); + if (U_FAILURE(status)) { + break; + } + Region *grouping = (Region *) uhash_get(newRegionIDMap.getAlias(), groupingName); if (grouping != NULL) { - for (int32_t i = 0; i < ures_getSize(groupingBundle); i++) { + for (int32_t i = 0; i < ures_getSize(groupingBundle) && U_SUCCESS(status); i++) { UnicodeString child = ures_getUnicodeStringByIndex(groupingBundle, i, &status); if (U_SUCCESS(status)) { if (grouping->containedRegions == NULL) { - grouping->containedRegions = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status); + LocalPointer lpContainedRegions( + new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status); + grouping->containedRegions = lpContainedRegions.orphan(); + if (U_FAILURE(status)) { + break; + } } - grouping->containedRegions->addElementX(new UnicodeString(child), status); + LocalPointer lpChildCopy(new UnicodeString(child), status); + grouping->containedRegions->adoptElement(lpChildCopy.orphan(), status); } } } @@ -214,7 +225,7 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { ures_close(groupingBundle); // Process the territory aliases - while ( ures_hasNext(territoryAlias.getAlias()) ) { + while (U_SUCCESS(status) && ures_hasNext(territoryAlias.getAlias())) { LocalUResourceBundlePointer res(ures_getNextResource(territoryAlias.getAlias(),NULL,&status)); const char *aliasFrom = ures_getKey(res.getAlias()); LocalPointer aliasFromStr(new UnicodeString(aliasFrom, -1, US_INV), status); @@ -259,7 +270,7 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { } UnicodeString currentRegion; //currentRegion.remove(); TODO: was already 0 length? - for (int32_t i = 0 ; i < aliasTo.length() ; i++ ) { + for (int32_t i = 0 ; i < aliasTo.length() && U_SUCCESS(status); i++ ) { if ( aliasTo.charAt(i) != 0x0020 ) { currentRegion.append(aliasTo.charAt(i)); } @@ -267,7 +278,7 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { Region *target = (Region *)uhash_get(newRegionIDMap.getAlias(),(void *)¤tRegion); if (target) { LocalPointer preferredValue(new UnicodeString(target->idStr), status); - aliasFromRegion->preferredValues->addElementX((void *)preferredValue.orphan(),status); // may add null if err + aliasFromRegion->preferredValues->adoptElement(preferredValue.orphan(),status); // may add null if err } currentRegion.remove(); } @@ -276,9 +287,9 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { } // Process the code mappings - This will allow us to assign numeric codes to most of the territories. - while ( ures_hasNext(codeMappings.getAlias()) ) { + while (U_SUCCESS(status) && ures_hasNext(codeMappings.getAlias())) { UResourceBundle *mapping = ures_getNextResource(codeMappings.getAlias(),NULL,&status); - if ( ures_getType(mapping) == URES_ARRAY && ures_getSize(mapping) == 3) { + if (U_SUCCESS(status) && ures_getType(mapping) == URES_ARRAY && ures_getSize(mapping) == 3) { UnicodeString codeMappingID = ures_getUnicodeStringByIndex(mapping,0,&status); UnicodeString codeMappingNumber = ures_getUnicodeStringByIndex(mapping,1,&status); UnicodeString codeMapping3Letter = ures_getUnicodeStringByIndex(mapping,2,&status); @@ -356,15 +367,23 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { // Add the child region to the set of regions contained by the parent if (parentRegion->containedRegions == NULL) { - parentRegion->containedRegions = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status); + LocalPointer lpContainedRegions( + new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status); + parentRegion->containedRegions = lpContainedRegions.orphan(); + if (U_FAILURE(status)) { + return; + } } LocalPointer childStr(new UnicodeString(), status); - if( U_FAILURE(status) ) { + if (U_FAILURE(status)) { return; // error out } childStr->fastCopyFrom(childRegion->idStr); - parentRegion->containedRegions->addElementX((void *)childStr.orphan(),status); + parentRegion->containedRegions->adoptElement(childStr.orphan(),status); + if (U_FAILURE(status)) { + return; + } // Set the parent region to be the containing region of the child. // Regions of type GROUPING can't be set as the parent, since another region @@ -388,10 +407,9 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) { if( U_FAILURE(status) ) { return; // error out } - availableRegions[ar->fType]->addElementX((void *)arString.orphan(),status); + availableRegions[ar->fType]->adoptElement(arString.orphan(), status); } - ucln_i18n_registerCleanup(UCLN_I18N_REGION, region_cleanup); // copy hashtables numericCodeMap = newNumericCodeMap.orphan(); regionIDMap = newRegionIDMap.orphan(); @@ -402,6 +420,7 @@ void Region::cleanupRegionData() { for (int32_t i = 0 ; i < URGN_LIMIT ; i++ ) { if ( availableRegions[i] ) { delete availableRegions[i]; + availableRegions[i] = nullptr; } } @@ -417,7 +436,6 @@ void Region::cleanupRegionData() { uhash_close(regionIDMap); } if (allRegions) { - allRegions->removeAllElements(); // Don't need the temporary list anymore. delete allRegions; allRegions = NULL; } @@ -615,33 +633,30 @@ Region::getContainedRegions(UErrorCode &status) const { StringEnumeration* Region::getContainedRegions( URegionType type, UErrorCode &status ) const { umtx_initOnce(gRegionDataInitOnce, &loadRegionData, status); // returns immediately if U_FAILURE(status) + + UVector result(nullptr, uhash_compareChars, status); + LocalPointer cr(getContainedRegions(status), status); if (U_FAILURE(status)) { - return NULL; + return nullptr; } - UVector *result = new UVector(NULL, uhash_compareChars, status); - - StringEnumeration *cr = getContainedRegions(status); - - for ( int32_t i = 0 ; i < cr->count(status) ; i++ ) { - const char *regionId = cr->next(NULL,status); - const Region *r = Region::getInstance(regionId,status); + const char *regionId; + while((regionId = cr->next(nullptr, status)) != nullptr && U_SUCCESS(status)) { + const Region *r = Region::getInstance(regionId, status); if ( r->getType() == type) { - result->addElementX((void *)&r->idStr,status); + result.addElement(const_cast(&r->idStr), status); } else { - StringEnumeration *children = r->getContainedRegions(type, status); - for ( int32_t j = 0 ; j < children->count(status) ; j++ ) { - const char *id2 = children->next(NULL,status); + LocalPointer children(r->getContainedRegions(type, status)); + const char *id2; + while(U_SUCCESS(status) && ((id2 = children->next(nullptr, status)) != nullptr)) { const Region *r2 = Region::getInstance(id2,status); - result->addElementX((void *)&r2->idStr,status); + result.addElement(const_cast(&r2->idStr), status); } - delete children; } } - delete cr; - StringEnumeration* resultEnumeration = new RegionNameEnumeration(result,status); - delete result; - return resultEnumeration; + LocalPointer resultEnumeration( + new RegionNameEnumeration(&result, status), status); + return U_SUCCESS(status) ? resultEnumeration.orphan() : nullptr; } /** @@ -706,18 +721,21 @@ Region::getType() const { return fType; } -RegionNameEnumeration::RegionNameEnumeration(UVector *fNameList, UErrorCode& status) { - pos=0; - if (fNameList && U_SUCCESS(status)) { - fRegionNames = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, fNameList->size(),status); - for ( int32_t i = 0 ; i < fNameList->size() ; i++ ) { - UnicodeString* this_region_name = (UnicodeString *)fNameList->elementAt(i); - UnicodeString* new_region_name = new UnicodeString(*this_region_name); - fRegionNames->addElementX((void *)new_region_name,status); +RegionNameEnumeration::RegionNameEnumeration(UVector *nameList, UErrorCode& status) : + pos(0), fRegionNames(nullptr) { + // TODO: https://unicode-org.atlassian.net/browse/ICU-21829 + // Is all of the copying going on here really necessary? + if (nameList && U_SUCCESS(status)) { + LocalPointer regionNames( + new UVector(uprv_deleteUObject, uhash_compareUnicodeString, nameList->size(), status), status); + for ( int32_t i = 0 ; U_SUCCESS(status) && i < nameList->size() ; i++ ) { + UnicodeString* this_region_name = (UnicodeString *)nameList->elementAt(i); + LocalPointer new_region_name(new UnicodeString(*this_region_name), status); + regionNames->adoptElement(new_region_name.orphan(), status); + } + if (U_SUCCESS(status)) { + fRegionNames = regionNames.orphan(); } - } - else { - fRegionNames = NULL; } } diff --git a/deps/icu-small/source/i18n/region_impl.h b/deps/icu-small/source/i18n/region_impl.h index 62acaa4511b..b6a281393f8 100644 --- a/deps/icu-small/source/i18n/region_impl.h +++ b/deps/icu-small/source/i18n/region_impl.h @@ -26,7 +26,11 @@ U_NAMESPACE_BEGIN class RegionNameEnumeration : public StringEnumeration { public: - RegionNameEnumeration(UVector *fNameList, UErrorCode& status); + /** + * Construct an string enumeration over the supplied name list. + * Makes a copy of the supplied input name list; does not retain a reference to the original. + */ + RegionNameEnumeration(UVector *nameList, UErrorCode& status); virtual ~RegionNameEnumeration(); static UClassID U_EXPORT2 getStaticClassID(void); virtual UClassID getDynamicClassID(void) const override; diff --git a/deps/icu-small/source/i18n/smpdtfmt.cpp b/deps/icu-small/source/i18n/smpdtfmt.cpp index 91748d82f9f..c1e943a0949 100644 --- a/deps/icu-small/source/i18n/smpdtfmt.cpp +++ b/deps/icu-small/source/i18n/smpdtfmt.cpp @@ -3792,6 +3792,9 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC src = &text; } parseInt(*src, number, pos, allowNegative,currentNumberFormat); + if (!isLenient() && pos.getIndex() < start + count) { + return -start; + } if (pos.getIndex() != parseStart) { int32_t val = number.getLong(); diff --git a/deps/icu-small/source/i18n/tmutfmt.cpp b/deps/icu-small/source/i18n/tmutfmt.cpp index 057bb634ebb..f0335a81f50 100644 --- a/deps/icu-small/source/i18n/tmutfmt.cpp +++ b/deps/icu-small/source/i18n/tmutfmt.cpp @@ -320,14 +320,14 @@ void TimeUnitFormat::setup(UErrorCode& err) { initDataMembers(err); - UVector pluralCounts(0, uhash_compareUnicodeString, 6, err); + UVector pluralCounts(nullptr, uhash_compareUnicodeString, 6, err); LocalPointer keywords(getPluralRules().getKeywords(err), err); if (U_FAILURE(err)) { return; } UnicodeString* pluralCount; while ((pluralCount = const_cast(keywords->snext(err))) != NULL) { - pluralCounts.addElementX(pluralCount, err); + pluralCounts.addElement(pluralCount, err); } readFromCurrentLocale(UTMUTFMT_FULL_STYLE, gUnitsTag, pluralCounts, err); checkConsistency(UTMUTFMT_FULL_STYLE, gUnitsTag, err); diff --git a/deps/icu-small/source/i18n/tzfmt.cpp b/deps/icu-small/source/i18n/tzfmt.cpp index ef3cfad80ce..9d046c30c8f 100644 --- a/deps/icu-small/source/i18n/tzfmt.cpp +++ b/deps/icu-small/source/i18n/tzfmt.cpp @@ -2459,7 +2459,7 @@ TimeZoneFormat::parseOffsetPattern(const UnicodeString& pattern, OffsetFields re if (itemType != GMTOffsetField::TEXT) { if (GMTOffsetField::isValid(itemType, itemLength)) { GMTOffsetField* fld = GMTOffsetField::createTimeField(itemType, static_cast(itemLength), status); - result->addElementX(fld, status); + result->adoptElement(fld, status); if (U_FAILURE(status)) { break; } @@ -2485,7 +2485,7 @@ TimeZoneFormat::parseOffsetPattern(const UnicodeString& pattern, OffsetFields re if (itemType == GMTOffsetField::TEXT) { if (text.length() > 0) { GMTOffsetField* textfld = GMTOffsetField::createText(text, status); - result->addElementX(textfld, status); + result->adoptElement(textfld, status); if (U_FAILURE(status)) { break; } @@ -2494,7 +2494,7 @@ TimeZoneFormat::parseOffsetPattern(const UnicodeString& pattern, OffsetFields re } else { if (GMTOffsetField::isValid(itemType, itemLength)) { GMTOffsetField* fld = GMTOffsetField::createTimeField(itemType, static_cast(itemLength), status); - result->addElementX(fld, status); + result->adoptElement(fld, status); if (U_FAILURE(status)) { break; } @@ -2512,7 +2512,7 @@ TimeZoneFormat::parseOffsetPattern(const UnicodeString& pattern, OffsetFields re if (itemType != GMTOffsetField::TEXT) { if (GMTOffsetField::isValid(itemType, itemLength)) { GMTOffsetField* fld = GMTOffsetField::createTimeField(itemType, static_cast(itemLength), status); - result->addElementX(fld, status); + result->adoptElement(fld, status); if (U_FAILURE(status)) { break; } @@ -2532,12 +2532,12 @@ TimeZoneFormat::parseOffsetPattern(const UnicodeString& pattern, OffsetFields re if (itemType == GMTOffsetField::TEXT) { if (text.length() > 0) { GMTOffsetField* tfld = GMTOffsetField::createText(text, status); - result->addElementX(tfld, status); + result->adoptElement(tfld, status); } } else { if (GMTOffsetField::isValid(itemType, itemLength)) { GMTOffsetField* fld = GMTOffsetField::createTimeField(itemType, static_cast(itemLength), status); - result->addElementX(fld, status); + result->adoptElement(fld, status); } else { status = U_ILLEGAL_ARGUMENT_ERROR; } diff --git a/deps/icu-small/source/i18n/tzgnames.cpp b/deps/icu-small/source/i18n/tzgnames.cpp index ed5f42d7bc1..d5ee45ced78 100644 --- a/deps/icu-small/source/i18n/tzgnames.cpp +++ b/deps/icu-small/source/i18n/tzgnames.cpp @@ -229,30 +229,27 @@ GNameSearchHandler::handleMatch(int32_t matchLength, const CharacterNode *node, if ((nameinfo->type & fTypes) != 0) { // matches a requested type if (fResults == NULL) { - fResults = new UVector(uprv_free, NULL, status); - if (fResults == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + LocalPointer lpResults(new UVector(uprv_free, NULL, status), status); + if (U_FAILURE(status)) { + return false; } + fResults = lpResults.orphan(); } - if (U_SUCCESS(status)) { - U_ASSERT(fResults != NULL); - GMatchInfo *gmatch = (GMatchInfo *)uprv_malloc(sizeof(GMatchInfo)); - if (gmatch == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - } else { - // add the match to the vector - gmatch->gnameInfo = nameinfo; - gmatch->matchLength = matchLength; - gmatch->timeType = UTZFMT_TIME_TYPE_UNKNOWN; - fResults->addElementX(gmatch, status); - if (U_FAILURE(status)) { - uprv_free(gmatch); - } else { - if (matchLength > fMaxMatchLen) { - fMaxMatchLen = matchLength; - } - } - } + GMatchInfo *gmatch = (GMatchInfo *)uprv_malloc(sizeof(GMatchInfo)); + if (gmatch == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return false; + } + // add the match to the vector + gmatch->gnameInfo = nameinfo; + gmatch->matchLength = matchLength; + gmatch->timeType = UTZFMT_TIME_TYPE_UNKNOWN; + fResults->adoptElement(gmatch, status); + if (U_FAILURE(status)) { + return false; + } + if (matchLength > fMaxMatchLen) { + fMaxMatchLen = matchLength; } } } diff --git a/deps/icu-small/source/i18n/tznames.cpp b/deps/icu-small/source/i18n/tznames.cpp index 5c504d01cb6..781f1cc161f 100644 --- a/deps/icu-small/source/i18n/tznames.cpp +++ b/deps/icu-small/source/i18n/tznames.cpp @@ -414,15 +414,12 @@ TimeZoneNames::MatchInfoCollection::addZone(UTimeZoneNameType nameType, int32_t if (U_FAILURE(status)) { return; } - MatchInfo* matchInfo = new MatchInfo(nameType, matchLength, &tzID, NULL); - if (matchInfo == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - matches(status)->addElementX(matchInfo, status); + LocalPointer matchInfo(new MatchInfo(nameType, matchLength, &tzID, NULL), status); + UVector *matchesVec = matches(status); if (U_FAILURE(status)) { - delete matchInfo; + return; } + matchesVec->adoptElement(matchInfo.orphan(), status); } void @@ -431,15 +428,12 @@ TimeZoneNames::MatchInfoCollection::addMetaZone(UTimeZoneNameType nameType, int3 if (U_FAILURE(status)) { return; } - MatchInfo* matchInfo = new MatchInfo(nameType, matchLength, NULL, &mzID); - if (matchInfo == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - matches(status)->addElementX(matchInfo, status); + LocalPointer matchInfo(new MatchInfo(nameType, matchLength, NULL, &mzID), status); + UVector *matchesVec = matches(status); if (U_FAILURE(status)) { - delete matchInfo; + return; } + matchesVec->adoptElement(matchInfo.orphan(), status); } int32_t diff --git a/deps/icu-small/source/i18n/tznames_impl.cpp b/deps/icu-small/source/i18n/tznames_impl.cpp index d450b745648..69991dfef4b 100644 --- a/deps/icu-small/source/i18n/tznames_impl.cpp +++ b/deps/icu-small/source/i18n/tznames_impl.cpp @@ -148,19 +148,29 @@ CharacterNode::addValue(void *value, UObjectDeleter *valueDeleter, UErrorCode &s if (!fHasValuesVector) { // There is only one value so far, and not in a vector yet. // Create a vector and add the old value. - UVector *values = new UVector(valueDeleter, NULL, DEFAULT_CHARACTERNODE_CAPACITY, status); + LocalPointer values( + new UVector(valueDeleter, NULL, DEFAULT_CHARACTERNODE_CAPACITY, status), status); if (U_FAILURE(status)) { if (valueDeleter) { valueDeleter(value); } return; } - values->addElementX(fValues, status); - fValues = values; + if (values->hasDeleter()) { + values->adoptElement(fValues, status); + } else { + values->addElement(fValues, status); + } + fValues = values.orphan(); fHasValuesVector = TRUE; } // Add the new value. - ((UVector *)fValues)->addElementX(value, status); + UVector *values = (UVector *)fValues; + if (values->hasDeleter()) { + values->adoptElement(value, status); + } else { + values->addElement(value, status); + } } } @@ -219,10 +229,8 @@ void TextTrieMap::put(const UChar *key, void *value, UErrorCode &status) { fIsEmpty = FALSE; if (fLazyContents == NULL) { - fLazyContents = new UVector(status); - if (fLazyContents == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - } + LocalPointer lpLazyContents(new UVector(status), status); + fLazyContents = lpLazyContents.orphan(); } if (U_FAILURE(status)) { if (fValueDeleter) { @@ -233,7 +241,7 @@ TextTrieMap::put(const UChar *key, void *value, UErrorCode &status) { U_ASSERT(fLazyContents != NULL); UChar *s = const_cast(key); - fLazyContents->addElementX(s, status); + fLazyContents->addElement(s, status); if (U_FAILURE(status)) { if (fValueDeleter) { fValueDeleter((void*) key); @@ -241,7 +249,7 @@ TextTrieMap::put(const UChar *key, void *value, UErrorCode &status) { return; } - fLazyContents->addElementX(value, status); + fLazyContents->addElement(value, status); } void @@ -854,7 +862,7 @@ class MetaZoneIDsEnumeration : public StringEnumeration { public: MetaZoneIDsEnumeration(); MetaZoneIDsEnumeration(const UVector& mzIDs); - MetaZoneIDsEnumeration(UVector* mzIDs); + MetaZoneIDsEnumeration(LocalPointer mzIDs); virtual ~MetaZoneIDsEnumeration(); static UClassID U_EXPORT2 getStaticClassID(void); virtual UClassID getDynamicClassID(void) const override; @@ -865,7 +873,7 @@ class MetaZoneIDsEnumeration : public StringEnumeration { int32_t fLen; int32_t fPos; const UVector* fMetaZoneIDs; - UVector *fLocalVector; + LocalPointer fLocalVector; }; UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MetaZoneIDsEnumeration) @@ -879,8 +887,9 @@ MetaZoneIDsEnumeration::MetaZoneIDsEnumeration(const UVector& mzIDs) fLen = fMetaZoneIDs->size(); } -MetaZoneIDsEnumeration::MetaZoneIDsEnumeration(UVector *mzIDs) -: fLen(0), fPos(0), fMetaZoneIDs(mzIDs), fLocalVector(mzIDs) { +MetaZoneIDsEnumeration::MetaZoneIDsEnumeration(LocalPointer mzIDs) +: fLen(0), fPos(0), fMetaZoneIDs(nullptr), fLocalVector(std::move(mzIDs)) { + fMetaZoneIDs = fLocalVector.getAlias(); if (fMetaZoneIDs) { fLen = fMetaZoneIDs->size(); } @@ -906,9 +915,6 @@ MetaZoneIDsEnumeration::count(UErrorCode& /*status*/) const { } MetaZoneIDsEnumeration::~MetaZoneIDsEnumeration() { - if (fLocalVector) { - delete fLocalVector; - } } @@ -1153,28 +1159,23 @@ TimeZoneNamesImpl::_getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCod return new MetaZoneIDsEnumeration(); } - MetaZoneIDsEnumeration *senum = NULL; - UVector* mzIDs = new UVector(NULL, uhash_compareUChars, status); - if (mzIDs == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - } + LocalPointer senum; + LocalPointer mzIDs(new UVector(NULL, uhash_compareUChars, status), status); if (U_SUCCESS(status)) { - U_ASSERT(mzIDs != NULL); + U_ASSERT(mzIDs.isValid()); for (int32_t i = 0; U_SUCCESS(status) && i < mappings->size(); i++) { OlsonToMetaMappingEntry *map = (OlsonToMetaMappingEntry *)mappings->elementAt(i); const UChar *mzID = map->mzid; if (!mzIDs->contains((void *)mzID)) { - mzIDs->addElementX((void *)mzID, status); + mzIDs->addElement((void *)mzID, status); } } if (U_SUCCESS(status)) { - senum = new MetaZoneIDsEnumeration(mzIDs); - } else { - delete mzIDs; + senum.adoptInsteadAndCheckErrorCode(new MetaZoneIDsEnumeration(std::move(mzIDs)), status); } } - return senum; + return U_SUCCESS(status) ? senum.orphan() : nullptr; } UnicodeString& diff --git a/deps/icu-small/source/i18n/ucol.cpp b/deps/icu-small/source/i18n/ucol.cpp index f59333ede3c..8e1df8d5577 100644 --- a/deps/icu-small/source/i18n/ucol.cpp +++ b/deps/icu-small/source/i18n/ucol.cpp @@ -96,12 +96,18 @@ ucol_safeClone(const UCollator *coll, void * /*stackBuffer*/, int32_t * pBufferS if (newColl == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; return nullptr; - } else { + } else if (pBufferSize != NULL) { *status = U_SAFECLONE_ALLOCATED_WARNING; } return newColl->toUCollator(); } +U_CAPI UCollator* U_EXPORT2 +ucol_clone(const UCollator *coll, UErrorCode *status) +{ + return ucol_safeClone(coll, nullptr, nullptr, status); +} + U_CAPI void U_EXPORT2 ucol_close(UCollator *coll) { diff --git a/deps/icu-small/source/i18n/udatpg.cpp b/deps/icu-small/source/i18n/udatpg.cpp index 332636a9388..9e61a120768 100644 --- a/deps/icu-small/source/i18n/udatpg.cpp +++ b/deps/icu-small/source/i18n/udatpg.cpp @@ -210,12 +210,47 @@ udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg, U_CAPI const UChar * U_EXPORT2 udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg, int32_t *pLength) { - const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getDateTimeFormat(); - if(pLength!=NULL) { + UErrorCode status = U_ZERO_ERROR; + return udatpg_getDateTimeFormatForStyle(dtpg, UDAT_MEDIUM, pLength, &status); +} + +U_CAPI void U_EXPORT2 +udatpg_setDateTimeFormatForStyle(UDateTimePatternGenerator *udtpg, + UDateFormatStyle style, + const UChar *dateTimeFormat, int32_t length, + UErrorCode *pErrorCode) { + if (U_FAILURE(*pErrorCode)) { + return; + } else if (dateTimeFormat==nullptr) { + *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + DateTimePatternGenerator *dtpg = reinterpret_cast(udtpg); + UnicodeString dtFormatString((UBool)(length<0), dateTimeFormat, length); + dtpg->setDateTimeFormat(style, dtFormatString, *pErrorCode); +} + +U_CAPI const UChar* U_EXPORT2 +udatpg_getDateTimeFormatForStyle(const UDateTimePatternGenerator *udtpg, + UDateFormatStyle style, int32_t *pLength, + UErrorCode *pErrorCode) { + static const UChar emptyString[] = { (UChar)0 }; + if (U_FAILURE(*pErrorCode)) { + if (pLength !=nullptr) { + *pLength = 0; + } + return emptyString; + } + const DateTimePatternGenerator *dtpg = reinterpret_cast(udtpg); + const UnicodeString &result = dtpg->getDateTimeFormat(style, *pErrorCode); + if (pLength != nullptr) { *pLength=result.length(); } + // Note: The UnicodeString for the dateTimeFormat string in the DateTimePatternGenerator + // was NUL-terminated what it was set, to avoid doing it here which could re-allocate + // the buffe and affect and cont references to the string or its buffer. return result.getBuffer(); -} + } U_CAPI void U_EXPORT2 udatpg_setDecimal(UDateTimePatternGenerator *dtpg, diff --git a/deps/icu-small/source/i18n/unicode/basictz.h b/deps/icu-small/source/i18n/unicode/basictz.h index 250ea309279..d9f85e45eef 100644 --- a/deps/icu-small/source/i18n/unicode/basictz.h +++ b/deps/icu-small/source/i18n/unicode/basictz.h @@ -152,17 +152,15 @@ class U_I18N_API BasicTimeZone: public TimeZone { virtual void getSimpleRulesNear(UDate date, InitialTimeZoneRule*& initial, AnnualTimeZoneRule*& std, AnnualTimeZoneRule*& dst, UErrorCode& status) const; -#ifndef U_FORCE_HIDE_DRAFT_API /** * Get time zone offsets from local wall time. - * @draft ICU 69 + * @stable ICU 69 */ virtual void getOffsetFromLocal( UDate date, UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const; -#endif /* U_FORCE_HIDE_DRAFT_API */ #ifndef U_HIDE_INTERNAL_API /** diff --git a/deps/icu-small/source/i18n/unicode/dtptngen.h b/deps/icu-small/source/i18n/unicode/dtptngen.h index 250a0e089fe..6be0e2a571c 100644 --- a/deps/icu-small/source/i18n/unicode/dtptngen.h +++ b/deps/icu-small/source/i18n/unicode/dtptngen.h @@ -311,6 +311,11 @@ class U_I18N_API DateTimePatternGenerator : public UObject { * for those two skeletons, so the result is put together with this pattern, * resulting in "d-MMM h:mm". * + * There are four DateTimeFormats in a DateTimePatternGenerator object, + * corresponding to date styles UDAT_FULL..UDAT_SHORT. This method sets + * all of them to the specified pattern. To set them individually, see + * setDateTimeFormat(UDateFormatStyle style, ...). + * * @param dateTimeFormat * message format pattern, here {1} will be replaced by the date * pattern and {0} will be replaced by the time pattern. @@ -320,11 +325,66 @@ class U_I18N_API DateTimePatternGenerator : public UObject { /** * Getter corresponding to setDateTimeFormat. + * + * There are four DateTimeFormats in a DateTimePatternGenerator object, + * corresponding to date styles UDAT_FULL..UDAT_SHORT. This method gets + * the style for UDAT_MEDIUM (the default). To get them individually, see + * getDateTimeFormat(UDateFormatStyle style). + * * @return DateTimeFormat. * @stable ICU 3.8 */ const UnicodeString& getDateTimeFormat() const; +#if !UCONFIG_NO_FORMATTING +#ifndef U_HIDE_DRAFT_API + /** + * dateTimeFormats are message patterns used to compose combinations of date + * and time patterns. There are four length styles, corresponding to the + * inferred style of the date pattern; these are UDateFormatStyle values: + * - UDAT_FULL (for date pattern with weekday and long month), else + * - UDAT_LONG (for a date pattern with long month), else + * - UDAT_MEDIUM (for a date pattern with abbreviated month), else + * - UDAT_SHORT (for any other date pattern). + * For details on dateTimeFormats, see + * https://www.unicode.org/reports/tr35/tr35-dates.html#dateTimeFormats. + * The default pattern in the root locale for all styles is "{1} {0}". + * + * @param style + * one of DateFormat.FULL..DateFormat.SHORT. Error if out of range. + * @param dateTimeFormat + * the new dateTimeFormat to set for the the specified style + * @param status + * in/out parameter; if no failure status is already set, + * it will be set according to result of the function (e.g. + * U_ILLEGAL_ARGUMENT_ERROR for style out of range). + * @draft ICU 71 + */ + void setDateTimeFormat(UDateFormatStyle style, const UnicodeString& dateTimeFormat, + UErrorCode& status); + + /** + * Getter corresponding to setDateTimeFormat. + * + * @param style + * one of UDAT_FULL..UDAT_SHORT. Error if out of range. + * @param status + * in/out parameter; if no failure status is already set, + * it will be set according to result of the function (e.g. + * U_ILLEGAL_ARGUMENT_ERROR for style out of range). + * @return + * the current dateTimeFormat for the the specified style, or + * empty string in case of error. The UnicodeString reference, + * or the contents of the string, may no longer be valid if + * setDateTimeFormat is called, or the DateTimePatternGenerator + * object is deleted. + * @draft ICU 71 + */ + const UnicodeString& getDateTimeFormat(UDateFormatStyle style, + UErrorCode& status) const; +#endif /* U_HIDE_DRAFT_API */ +#endif /* #if !UCONFIG_NO_FORMATTING */ + /** * Return the best pattern matching the input skeleton. It is guaranteed to * have all of the fields in the skeleton. @@ -545,8 +605,7 @@ class U_I18N_API DateTimePatternGenerator : public UObject { */ DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other); - // TODO(ticket:13619): re-enable when UDATPG_NARROW no longer in draft mode. - // static const int32_t UDATPG_WIDTH_COUNT = UDATPG_NARROW + 1; + static const int32_t UDATPG_WIDTH_COUNT = UDATPG_NARROW + 1; Locale pLocale; // pattern locale FormatParser *fp; @@ -554,9 +613,8 @@ class U_I18N_API DateTimePatternGenerator : public UObject { DistanceInfo *distanceInfo; PatternMap *patternMap; UnicodeString appendItemFormats[UDATPG_FIELD_COUNT]; - // TODO(ticket:13619): [3] -> UDATPG_WIDTH_COUNT - UnicodeString fieldDisplayNames[UDATPG_FIELD_COUNT][3]; - UnicodeString dateTimeFormat; + UnicodeString fieldDisplayNames[UDATPG_FIELD_COUNT][UDATPG_WIDTH_COUNT]; + UnicodeString dateTimeFormat[4]; UnicodeString decimal; DateTimeMatcher *skipMatcher; Hashtable *fAvailableFormatKeyHash; diff --git a/deps/icu-small/source/i18n/unicode/measunit.h b/deps/icu-small/source/i18n/unicode/measunit.h index 61da62e71f2..b7e8e1676a4 100644 --- a/deps/icu-small/source/i18n/unicode/measunit.h +++ b/deps/icu-small/source/i18n/unicode/measunit.h @@ -77,14 +77,13 @@ enum UMeasureUnitComplexity { }; -#ifndef U_HIDE_DRAFT_API /** * Enumeration for SI and binary prefixes, e.g. "kilo-", "nano-", "mebi-". * * Enum values should be treated as opaque: use umeas_getPrefixPower() and * umeas_getPrefixBase() to find their corresponding values. * - * @draft ICU 69 + * @stable ICU 69 * @see umeas_getPrefixBase * @see umeas_getPrefixPower */ @@ -96,14 +95,14 @@ typedef enum UMeasurePrefix { * implementation detail and should not be relied upon: use * umeas_getPrefixPower() to obtain meaningful values. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_ONE = 30 + 0, /** * SI prefix: yotta, 10^24. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_YOTTA = UMEASURE_PREFIX_ONE + 24, @@ -119,133 +118,133 @@ typedef enum UMeasurePrefix { /** * SI prefix: zetta, 10^21. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_ZETTA = UMEASURE_PREFIX_ONE + 21, /** * SI prefix: exa, 10^18. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_EXA = UMEASURE_PREFIX_ONE + 18, /** * SI prefix: peta, 10^15. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_PETA = UMEASURE_PREFIX_ONE + 15, /** * SI prefix: tera, 10^12. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_TERA = UMEASURE_PREFIX_ONE + 12, /** * SI prefix: giga, 10^9. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_GIGA = UMEASURE_PREFIX_ONE + 9, /** * SI prefix: mega, 10^6. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_MEGA = UMEASURE_PREFIX_ONE + 6, /** * SI prefix: kilo, 10^3. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_KILO = UMEASURE_PREFIX_ONE + 3, /** * SI prefix: hecto, 10^2. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_HECTO = UMEASURE_PREFIX_ONE + 2, /** * SI prefix: deka, 10^1. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_DEKA = UMEASURE_PREFIX_ONE + 1, /** * SI prefix: deci, 10^-1. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_DECI = UMEASURE_PREFIX_ONE + -1, /** * SI prefix: centi, 10^-2. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_CENTI = UMEASURE_PREFIX_ONE + -2, /** * SI prefix: milli, 10^-3. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_MILLI = UMEASURE_PREFIX_ONE + -3, /** * SI prefix: micro, 10^-6. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_MICRO = UMEASURE_PREFIX_ONE + -6, /** * SI prefix: nano, 10^-9. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_NANO = UMEASURE_PREFIX_ONE + -9, /** * SI prefix: pico, 10^-12. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_PICO = UMEASURE_PREFIX_ONE + -12, /** * SI prefix: femto, 10^-15. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_FEMTO = UMEASURE_PREFIX_ONE + -15, /** * SI prefix: atto, 10^-18. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_ATTO = UMEASURE_PREFIX_ONE + -18, /** * SI prefix: zepto, 10^-21. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_ZEPTO = UMEASURE_PREFIX_ONE + -21, /** * SI prefix: yocto, 10^-24. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_YOCTO = UMEASURE_PREFIX_ONE + -24, @@ -270,7 +269,7 @@ typedef enum UMeasurePrefix { /** * Binary prefix: kibi, 1024^1. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_KIBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 1, @@ -286,49 +285,49 @@ typedef enum UMeasurePrefix { /** * Binary prefix: mebi, 1024^2. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_MEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 2, /** * Binary prefix: gibi, 1024^3. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_GIBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 3, /** * Binary prefix: tebi, 1024^4. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_TEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 4, /** * Binary prefix: pebi, 1024^5. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_PEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 5, /** * Binary prefix: exbi, 1024^6. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_EXBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 6, /** * Binary prefix: zebi, 1024^7. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_ZEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 7, /** * Binary prefix: yobi, 1024^8. * - * @draft ICU 69 + * @stable ICU 69 */ UMEASURE_PREFIX_YOBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 8, @@ -347,7 +346,7 @@ typedef enum UMeasurePrefix { * base is 10 for SI prefixes (kilo, micro) and 1024 for binary prefixes (kibi, * mebi). * - * @draft ICU 69 + * @stable ICU 69 */ U_CAPI int32_t U_EXPORT2 umeas_getPrefixBase(UMeasurePrefix unitPrefix); @@ -355,12 +354,10 @@ U_CAPI int32_t U_EXPORT2 umeas_getPrefixBase(UMeasurePrefix unitPrefix); * Returns the exponent of the factor associated with the given unit prefix, for * example 3 for kilo, -6 for micro, 1 for kibi, 2 for mebi, 3 for gibi. * - * @draft ICU 69 + * @stable ICU 69 */ U_CAPI int32_t U_EXPORT2 umeas_getPrefixPower(UMeasurePrefix unitPrefix); -#endif // U_HIDE_DRAFT_API - /** * A unit such as length, mass, volume, currency, etc. A unit is * coupled with a numeric amount to produce a Measure. @@ -481,7 +478,6 @@ class U_I18N_API MeasureUnit: public UObject { */ UMeasureUnitComplexity getComplexity(UErrorCode& status) const; -#ifndef U_HIDE_DRAFT_API /** * Creates a MeasureUnit which is this SINGLE unit augmented with the specified prefix. * For example, UMEASURE_PREFIX_KILO for "kilo", or UMEASURE_PREFIX_KIBI for "kibi". @@ -494,7 +490,7 @@ class U_I18N_API MeasureUnit: public UObject { * @param prefix The prefix, from UMeasurePrefix. * @param status Set if this is not a SINGLE unit or if another error occurs. * @return A new SINGLE unit. - * @draft ICU 69 + * @stable ICU 69 */ MeasureUnit withPrefix(UMeasurePrefix prefix, UErrorCode& status) const; @@ -510,10 +506,9 @@ class U_I18N_API MeasureUnit: public UObject { * @return The prefix of this SINGLE unit, from UMeasurePrefix. * @see umeas_getPrefixBase * @see umeas_getPrefixPower - * @draft ICU 69 + * @stable ICU 69 */ UMeasurePrefix getPrefix(UErrorCode& status) const; -#endif // U_HIDE_DRAFT_API /** * Creates a MeasureUnit which is this SINGLE unit augmented with the specified dimensionality @@ -989,23 +984,21 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit getKarat(); -#ifndef U_HIDE_DRAFT_API /** * Returns by pointer, unit of concentr: milligram-ofglucose-per-deciliter. * Caller owns returned value and must free it. * Also see {@link #getMilligramOfglucosePerDeciliter()}. * @param status ICU error code. - * @draft ICU 69 + * @stable ICU 69 */ static MeasureUnit *createMilligramOfglucosePerDeciliter(UErrorCode &status); /** * Returns by value, unit of concentr: milligram-ofglucose-per-deciliter. * Also see {@link #createMilligramOfglucosePerDeciliter()}. - * @draft ICU 69 + * @stable ICU 69 */ static MeasureUnit getMilligramOfglucosePerDeciliter(); -#endif /* U_HIDE_DRAFT_API */ /** * Returns by pointer, unit of concentr: milligram-per-deciliter. diff --git a/deps/icu-small/source/i18n/unicode/numberformatter.h b/deps/icu-small/source/i18n/unicode/numberformatter.h index ece433b55f0..711064ece8d 100644 --- a/deps/icu-small/source/i18n/unicode/numberformatter.h +++ b/deps/icu-small/source/i18n/unicode/numberformatter.h @@ -22,6 +22,7 @@ #include "unicode/parseerr.h" #include "unicode/plurrule.h" #include "unicode/ucurr.h" +#include "unicode/unounclass.h" #include "unicode/unum.h" #include "unicode/unumberformatter.h" #include "unicode/uobject.h" @@ -640,6 +641,33 @@ class U_I18N_API Precision : public UMemory { */ static IncrementPrecision increment(double roundingIncrement); +#ifndef U_HIDE_DRAFT_API + /** + * Version of `Precision::increment()` that takes an integer at a particular power of 10. + * + * To round to the nearest 0.5 and display 2 fraction digits, with this function, you should write one of the following: + * + *

    +     * Precision::incrementExact(5, -1).withMinFraction(2)
    +     * Precision::incrementExact(50, -2).withMinFraction(2)
    +     * Precision::incrementExact(50, -2)
    +     * 
    + * + * This is analagous to ICU4J `Precision.increment(new BigDecimal("0.50"))`. + * + * This behavior is modeled after ECMA-402. For more information, see: + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingincrement + * + * @param mantissa + * The increment to which to round numbers. + * @param magnitude + * The power of 10 of the ones digit of the mantissa. + * @return A precision for chaining or passing to the NumberFormatter precision() setter. + * @draft ICU 71 + */ + static IncrementPrecision incrementExact(uint64_t mantissa, int16_t magnitude); +#endif // U_HIDE_DRAFT_API + /** * Show numbers rounded and padded according to the rules for the currency unit. The most common * rounding precision settings for currencies include Precision::fixedFraction(2), @@ -659,16 +687,14 @@ class U_I18N_API Precision : public UMemory { */ static CurrencyPrecision currency(UCurrencyUsage currencyUsage); -#ifndef U_HIDE_DRAFT_API /** * Configure how trailing zeros are displayed on numbers. For example, to hide trailing zeros * when the number is an integer, use UNUM_TRAILING_ZERO_HIDE_IF_WHOLE. * * @param trailingZeroDisplay Option to configure the display of trailing zeros. - * @draft ICU 69 + * @stable ICU 69 */ Precision trailingZeroDisplay(UNumberTrailingZeroDisplay trailingZeroDisplay) const; -#endif // U_HIDE_DRAFT_API private: enum PrecisionType { @@ -707,16 +733,23 @@ class U_I18N_API Precision : public UMemory { impl::digits_t fMaxSig; /** @internal (private) */ UNumberRoundingPriority fPriority; + /** + * Whether to retain trailing zeros based on the looser strategy. + * @internal (private) + */ + bool fRetain; } fracSig; /** @internal (private) */ struct IncrementSettings { // For RND_INCREMENT, RND_INCREMENT_ONE, and RND_INCREMENT_FIVE + // Note: This is a union, so we shouldn't own memory, since + // the default destructor would leak it. /** @internal (private) */ - double fIncrement; + uint64_t fIncrement; /** @internal (private) */ - impl::digits_t fMinFrac; + impl::digits_t fIncrementMagnitude; /** @internal (private) */ - impl::digits_t fMaxFrac; + impl::digits_t fMinFrac; } increment; UCurrencyUsage currencyUsage; // For RND_CURRENCY UErrorCode errorCode; // For RND_ERROR @@ -759,9 +792,10 @@ class U_I18N_API Precision : public UMemory { const FractionPrecision &base, int32_t minSig, int32_t maxSig, - UNumberRoundingPriority priority); + UNumberRoundingPriority priority, + bool retain); - static IncrementPrecision constructIncrement(double increment, int32_t minFrac); + static IncrementPrecision constructIncrement(uint64_t increment, impl::digits_t magnitude); static CurrencyPrecision constructCurrency(UCurrencyUsage usage); @@ -801,7 +835,6 @@ class U_I18N_API Precision : public UMemory { */ class U_I18N_API FractionPrecision : public Precision { public: -#ifndef U_HIDE_DRAFT_API /** * Override maximum fraction digits with maximum significant digits depending on the magnitude * of the number. See UNumberRoundingPriority. @@ -814,13 +847,12 @@ class U_I18N_API FractionPrecision : public Precision { * How to disambiguate between fraction digits and significant digits. * @return A precision for chaining or passing to the NumberFormatter precision() setter. * - * @draft ICU 69 + * @stable ICU 69 */ Precision withSignificantDigits( int32_t minSignificantDigits, int32_t maxSignificantDigits, UNumberRoundingPriority priority) const; -#endif // U_HIDE_DRAFT_API /** * Ensure that no less than this number of significant digits are retained when rounding @@ -1170,31 +1202,32 @@ class U_I18N_API Scale : public UMemory { namespace impl { -// Do not enclose entire StringProp with #ifndef U_HIDE_INTERNAL_API, needed for a protected field +// Do not enclose entire StringProp with #ifndef U_HIDE_INTERNAL_API, needed for a protected field. +// And do not enclose its class boilerplate within #ifndef U_HIDE_INTERNAL_API. /** * Manages NumberFormatterSettings::usage()'s char* instance on the heap. * @internal */ class U_I18N_API StringProp : public UMemory { -#ifndef U_HIDE_INTERNAL_API - public: + /** @internal */ + ~StringProp(); + /** @internal */ StringProp(const StringProp &other); /** @internal */ StringProp &operator=(const StringProp &other); +#ifndef U_HIDE_INTERNAL_API + /** @internal */ StringProp(StringProp &&src) U_NOEXCEPT; /** @internal */ StringProp &operator=(StringProp &&src) U_NOEXCEPT; - /** @internal */ - ~StringProp(); - /** @internal */ int16_t length() const { return fLength; @@ -2735,14 +2768,20 @@ class U_I18N_API FormattedNumber : public UMemory, public FormattedValue { */ MeasureUnit getOutputUnit(UErrorCode& status) const; -#ifndef U_HIDE_INTERNAL_API +#ifndef U_HIDE_DRAFT_API + /** - * Gets the gender of the formatted output. Returns "" when the gender is - * unknown, or for ungendered languages. + * Gets the noun class of the formatted output. Returns `OTHER` when the noun class + * is not supported yet. * - * @internal ICU 69 technology preview. + * @return `NounClass` + * @draft ICU 71. */ - const char *getGender(UErrorCode& status) const; + NounClass getNounClass(UErrorCode &status) const; + +#endif // U_HIDE_DRAFT_API + +#ifndef U_HIDE_INTERNAL_API /** * Gets the raw DecimalQuantity for plural rule selection. @@ -2758,6 +2797,18 @@ class U_I18N_API FormattedNumber : public UMemory, public FormattedValue { #endif /* U_HIDE_INTERNAL_API */ +#ifndef U_HIDE_DEPRECATED_API + + /** + * Gets the gender of the formatted output. Returns "" when the gender is + * unknown, or for ungendered languages. + * + * @deprecated This API is for ICU internal use only. + */ + const char *getGender(UErrorCode &status) const; + +#endif /* U_HIDE_DEPRECATED_API */ + private: // Can't use LocalPointer because UFormattedNumberData is forward-declared const impl::UFormattedNumberData *fData; diff --git a/deps/icu-small/source/i18n/unicode/rbtz.h b/deps/icu-small/source/i18n/unicode/rbtz.h index 1eca70c338b..4fbf330cef1 100644 --- a/deps/icu-small/source/i18n/unicode/rbtz.h +++ b/deps/icu-small/source/i18n/unicode/rbtz.h @@ -303,16 +303,14 @@ class U_I18N_API RuleBasedTimeZone : public BasicTimeZone { virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const override; -#ifndef U_FORCE_HIDE_DRAFT_API /** * Get time zone offsets from local wall time. - * @draft ICU 69 + * @stable ICU 69 */ virtual void getOffsetFromLocal( UDate date, UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override; -#endif /* U_FORCE_HIDE_DRAFT_API */ private: void deleteRules(void); diff --git a/deps/icu-small/source/i18n/unicode/simpletz.h b/deps/icu-small/source/i18n/unicode/simpletz.h index f5c155de466..f73d823ee58 100644 --- a/deps/icu-small/source/i18n/unicode/simpletz.h +++ b/deps/icu-small/source/i18n/unicode/simpletz.h @@ -620,16 +620,14 @@ class U_I18N_API SimpleTimeZone: public BasicTimeZone { virtual void getOffset(UDate date, UBool local, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const override; -#ifndef U_FORCE_HIDE_DRAFT_API /** * Get time zone offsets from local wall time. - * @draft ICU 69 + * @stable ICU 69 */ virtual void getOffsetFromLocal( UDate date, UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override; -#endif /* U_FORCE_HIDE_DRAFT_API */ /** * Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add diff --git a/deps/icu-small/source/i18n/unicode/ucal.h b/deps/icu-small/source/i18n/unicode/ucal.h index 94abae83919..3a4fb69fc3e 100644 --- a/deps/icu-small/source/i18n/unicode/ucal.h +++ b/deps/icu-small/source/i18n/unicode/ucal.h @@ -1617,25 +1617,23 @@ U_CAPI int32_t U_EXPORT2 ucal_getTimeZoneIDForWindowsID(const UChar* winid, int32_t len, const char* region, UChar* id, int32_t idCapacity, UErrorCode* status); -#ifndef U_FORCE_HIDE_DRAFT_API /** * Options used by ucal_getTimeZoneOffsetFromLocal and BasicTimeZone::getOffsetFromLocal() * to specify how to interpret an input time when it does not exist, or when it is ambiguous, * around a time zone transition. - * @draft ICU 69 + * @stable ICU 69 */ enum UTimeZoneLocalOption { -#ifndef U_HIDE_DRAFT_API /** * An input time is always interpreted as local time before * a time zone transition. - * @draft ICU 69 + * @stable ICU 69 */ UCAL_TZ_LOCAL_FORMER = 0x04, /** * An input time is always interpreted as local time after * a time zone transition. - * @draft ICU 69 + * @stable ICU 69 */ UCAL_TZ_LOCAL_LATTER = 0x0C, /** @@ -1644,7 +1642,7 @@ enum UTimeZoneLocalOption { * sides of a time zone transition are standard time, * or daylight saving time, the local time before the * transition is used. - * @draft ICU 69 + * @stable ICU 69 */ UCAL_TZ_LOCAL_STANDARD_FORMER = UCAL_TZ_LOCAL_FORMER | 0x01, /** @@ -1653,7 +1651,7 @@ enum UTimeZoneLocalOption { * sides of a time zone transition are standard time, * or daylight saving time, the local time after the * transition is used. - * @draft ICU 69 + * @stable ICU 69 */ UCAL_TZ_LOCAL_STANDARD_LATTER = UCAL_TZ_LOCAL_LATTER | 0x01, /** @@ -1662,7 +1660,7 @@ enum UTimeZoneLocalOption { * sides of a time zone transition are standard time, * or daylight saving time, the local time before the * transition is used. - * @draft ICU 69 + * @stable ICU 69 */ UCAL_TZ_LOCAL_DAYLIGHT_FORMER = UCAL_TZ_LOCAL_FORMER | 0x03, /** @@ -1671,19 +1669,11 @@ enum UTimeZoneLocalOption { * sides of a time zone transition are standard time, * or daylight saving time, the local time after the * transition is used. - * @draft ICU 69 + * @stable ICU 69 */ UCAL_TZ_LOCAL_DAYLIGHT_LATTER = UCAL_TZ_LOCAL_LATTER | 0x03, -#else /* U_HIDE_DRAFT_API */ - /** - * Dummy value to prevent empty enum if U_HIDE_DRAFT_API. - * This will go away when draft conditionals are removed. - * @internal - */ - UCAL_TZ_LOCAL_NONE = 0, -#endif /* U_HIDE_DRAFT_API */ }; -typedef enum UTimeZoneLocalOption UTimeZoneLocalOption; /**< @draft ICU 69 */ +typedef enum UTimeZoneLocalOption UTimeZoneLocalOption; /**< @stable ICU 69 */ /** * Returns the time zone raw and GMT offset for the given moment @@ -1710,7 +1700,7 @@ typedef enum UTimeZoneLocalOption UTimeZoneLocalOption; /**< @draft ICU 69 */ * typically one hour. * If the status is set to one of the error code, the value set is unspecified. * @param status A pointer to a UErrorCode to receive any errors. -* @draft ICU 69 +* @stable ICU 69 */ U_CAPI void U_EXPORT2 ucal_getTimeZoneOffsetFromLocal( @@ -1718,7 +1708,6 @@ ucal_getTimeZoneOffsetFromLocal( UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt, int32_t* rawOffset, int32_t* dstOffset, UErrorCode* status); -#endif /* U_FORCE_HIDE_DRAFT_API */ #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/deps/icu-small/source/i18n/unicode/ucol.h b/deps/icu-small/source/i18n/unicode/ucol.h index 6d22eb6069e..24963312216 100644 --- a/deps/icu-small/source/i18n/unicode/ucol.h +++ b/deps/icu-small/source/i18n/unicode/ucol.h @@ -397,7 +397,7 @@ typedef enum { * @param status A pointer to a UErrorCode to receive any errors * @return A pointer to a UCollator, or 0 if an error occurred. * @see ucol_openRules - * @see ucol_safeClone + * @see ucol_clone * @see ucol_close * @stable ICU 2.0 */ @@ -425,7 +425,7 @@ ucol_open(const char *loc, UErrorCode *status); * @return A pointer to a UCollator. It is not guaranteed that NULL be returned in case * of error - please use status argument to check for errors. * @see ucol_open - * @see ucol_safeClone + * @see ucol_clone * @see ucol_close * @stable ICU 2.0 */ @@ -521,7 +521,7 @@ ucol_getContractionsAndExpansions( const UCollator *coll, * @param coll The UCollator to close. * @see ucol_open * @see ucol_openRules - * @see ucol_safeClone + * @see ucol_clone * @stable ICU 2.0 */ U_CAPI void U_EXPORT2 @@ -985,7 +985,6 @@ ucol_getShortDefinitionString(const UCollator *coll, * * @deprecated ICU 54 */ - U_DEPRECATED int32_t U_EXPORT2 ucol_normalizeShortDefinitionString(const char *source, char *destination, @@ -1310,6 +1309,20 @@ U_DEPRECATED void U_EXPORT2 ucol_restoreVariableTop(UCollator *coll, const uint32_t varTop, UErrorCode *status); #endif /* U_HIDE_DEPRECATED_API */ +/** + * Thread safe cloning operation. The result is a clone of a given collator. + * @param coll collator to be cloned + * @param status to indicate whether the operation went on smoothly or there were errors + * @return pointer to the new clone + * @see ucol_open + * @see ucol_openRules + * @see ucol_close + * @stable ICU 71 + */ +U_CAPI UCollator* U_EXPORT2 ucol_clone(const UCollator *coll, UErrorCode *status); + +#ifndef U_HIDE_DEPRECATED_API + /** * Thread safe cloning operation. The result is a clone of a given collator. * @param coll collator to be cloned @@ -1325,21 +1338,20 @@ ucol_restoreVariableTop(UCollator *coll, const uint32_t varTop, UErrorCode *stat * If *pBufferSize is not enough for a stack-based safe clone, * new memory will be allocated. * @param status to indicate whether the operation went on smoothly or there were errors - * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any - * allocations were necessary. + * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used + * if pBufferSize != NULL and any allocations were necessary * @return pointer to the new clone * @see ucol_open * @see ucol_openRules * @see ucol_close - * @stable ICU 2.0 + * @deprecated ICU 71 Use ucol_clone() instead. */ -U_CAPI UCollator* U_EXPORT2 +U_DEPRECATED UCollator* U_EXPORT2 ucol_safeClone(const UCollator *coll, void *stackBuffer, int32_t *pBufferSize, UErrorCode *status); -#ifndef U_HIDE_DEPRECATED_API /** default memory size for the new clone. * @deprecated ICU 52. Do not rely on ucol_safeClone() cloning into any provided buffer. diff --git a/deps/icu-small/source/i18n/unicode/udatpg.h b/deps/icu-small/source/i18n/unicode/udatpg.h index efe4357bfee..684a905e426 100644 --- a/deps/icu-small/source/i18n/unicode/udatpg.h +++ b/deps/icu-small/source/i18n/unicode/udatpg.h @@ -492,6 +492,11 @@ udatpg_getFieldDisplayName(const UDateTimePatternGenerator *dtpg, * for those two skeletons, so the result is put together with this pattern, * resulting in "d-MMM h:mm". * + * There are four DateTimeFormats in a UDateTimePatternGenerator object, + * corresponding to date styles UDAT_FULL..UDAT_SHORT. This method sets + * all of them to the specified pattern. To set them individually, see + * udatpg_setDateTimeFormatForStyle. + * * @param dtpg a pointer to UDateTimePatternGenerator. * @param dtFormat * message format pattern, here {1} will be replaced by the date @@ -505,6 +510,12 @@ udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg, /** * Getter corresponding to setDateTimeFormat. + * + * There are four DateTimeFormats in a UDateTimePatternGenerator object, + * corresponding to date styles UDAT_FULL..UDAT_SHORT. This method gets + * the style for UDAT_MEDIUM (the default). To get them individually, see + * udatpg_getDateTimeFormatForStyle. + * * @param dtpg a pointer to UDateTimePatternGenerator. * @param pLength A pointer that will receive the length of the format * @return dateTimeFormat. @@ -514,6 +525,70 @@ U_CAPI const UChar * U_EXPORT2 udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg, int32_t *pLength); +#if !UCONFIG_NO_FORMATTING +#ifndef U_HIDE_DRAFT_API +/** + * dateTimeFormats are message patterns used to compose combinations of date + * and time patterns. There are four length styles, corresponding to the + * inferred style of the date pattern; these are UDateFormatStyle values: + * - UDAT_FULL (for date pattern with weekday and long month), else + * - UDAT_LONG (for a date pattern with long month), else + * - UDAT_MEDIUM (for a date pattern with abbreviated month), else + * - UDAT_SHORT (for any other date pattern). + * For details on dateTimeFormats, see + * https://www.unicode.org/reports/tr35/tr35-dates.html#dateTimeFormats. + * The default pattern in the root locale for all styles is "{1} {0}". + * + * @param udtpg + * a pointer to the UDateTimePatternGenerator + * @param style + * one of UDAT_FULL..UDAT_SHORT. Error if out of range. + * @param dateTimeFormat + * the new dateTimeFormat to set for the the specified style + * @param length + * the length of dateTimeFormat, or -1 if unknown and pattern + * is null-terminated + * @param pErrorCode + * a pointer to the UErrorCode (in/out parameter); if no failure + * status is already set, it will be set according to result of the + * function (e.g. U_ILLEGAL_ARGUMENT_ERROR for style out of range). + * @draft ICU 71 + */ +U_CAPI void U_EXPORT2 +udatpg_setDateTimeFormatForStyle(UDateTimePatternGenerator *udtpg, + UDateFormatStyle style, + const UChar *dateTimeFormat, int32_t length, + UErrorCode *pErrorCode); + +/** + * Getter corresponding to udatpg_setDateTimeFormatForStyle. + * + * @param udtpg + * a pointer to the UDateTimePatternGenerator + * @param style + * one of UDAT_FULL..UDAT_SHORT. Error if out of range. + * @param pLength + * a pointer that will receive the length of the format. May be NULL + * if length is not desired. + * @param pErrorCode + * a pointer to the UErrorCode (in/out parameter); if no failure + * status is already set, it will be set according to result of the + * function (e.g. U_ILLEGAL_ARGUMENT_ERROR for style out of range). + * @return + * pointer to the current dateTimeFormat (0 terminated) for the specified + * style, or empty string in case of error. The pointer and its contents + * may no longer be valid if udatpg_setDateTimeFormat is called, or + * udatpg_setDateTimeFormatForStyle for the same style is called, or the + * UDateTimePatternGenerator object is closed. + * @draft ICU 71 + */ +U_CAPI const UChar* U_EXPORT2 +udatpg_getDateTimeFormatForStyle(const UDateTimePatternGenerator *udtpg, + UDateFormatStyle style, int32_t *pLength, + UErrorCode *pErrorCode); +#endif /* U_HIDE_DRAFT_API */ +#endif /* #if !UCONFIG_NO_FORMATTING */ + /** * The decimal value is used in formatting fractions of seconds. If the * skeleton contains fractional seconds, then this is used with the diff --git a/deps/icu-small/source/i18n/unicode/unounclass.h b/deps/icu-small/source/i18n/unicode/unounclass.h new file mode 100644 index 00000000000..1721dbd584f --- /dev/null +++ b/deps/icu-small/source/i18n/unicode/unounclass.h @@ -0,0 +1,43 @@ +// © 2022 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +#ifndef __UNOUNCLASS_H__ +#define __UNOUNCLASS_H__ + +#include "unicode/utypes.h" + +#if U_SHOW_CPLUSPLUS_API + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/uversion.h" + +U_NAMESPACE_BEGIN + +#ifndef U_HIDE_DRAFT_API + +/** + * Represents all the grammatical noun classes that are supported by CLDR. + * + * @draft ICU 71. + */ +enum NounClass { + OTHER = 0, + NEUTER = 1, + FEMININE = 2, + MASCULINE = 3, + ANIMATE = 4, + INANIMATE = 5, + PERSONAL = 6, + COMMON = 7, +}; + +#endif // U_HIDE_DRAFT_API + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif /* U_SHOW_CPLUSPLUS_API */ + +#endif // __UNOUNCLASS_H__ diff --git a/deps/icu-small/source/i18n/unicode/unum.h b/deps/icu-small/source/i18n/unicode/unum.h index 14f76168b61..863695591ab 100644 --- a/deps/icu-small/source/i18n/unicode/unum.h +++ b/deps/icu-small/source/i18n/unicode/unum.h @@ -303,23 +303,21 @@ typedef enum UNumberFormatRoundingMode { * @stable ICU 4.8 */ UNUM_ROUND_UNNECESSARY, -#ifndef U_HIDE_DRAFT_API /** * Rounds ties toward the odd number. - * @draft ICU 69 + * @stable ICU 69 */ UNUM_ROUND_HALF_ODD, /** * Rounds ties toward +∞. - * @draft ICU 69 + * @stable ICU 69 */ UNUM_ROUND_HALF_CEILING, /** * Rounds ties toward -∞. - * @draft ICU 69 + * @stable ICU 69 */ UNUM_ROUND_HALF_FLOOR, -#endif // U_HIDE_DRAFT_API } UNumberFormatRoundingMode; /** The possible number format pad positions. @@ -401,13 +399,24 @@ typedef enum UNumberFormatFields { UNUM_MEASURE_UNIT_FIELD, /** @stable ICU 64 */ UNUM_COMPACT_FIELD, +#ifndef U_HIDE_DRAFT_API + /** + * Approximately sign. In ICU 70, this was categorized under the generic SIGN field. + * @draft ICU 71 + */ + UNUM_APPROXIMATELY_SIGN_FIELD, +#endif // U_HIDE_DRAFT_API #ifndef U_HIDE_DEPRECATED_API /** * One more than the highest normal UNumberFormatFields value. * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ - UNUM_FIELD_COUNT = UNUM_SIGN_FIELD + 3 +#ifndef U_HIDE_DRAFT_API + UNUM_FIELD_COUNT = UNUM_COMPACT_FIELD + 2 +#else // U_HIDE_DRAFT_API (for UNUM_APPROXIMATELY_SIGN_FIELD) + UNUM_FIELD_COUNT = UNUM_COMPACT_FIELD + 1 +#endif // U_HIDE_DRAFT_API (for UNUM_APPROXIMATELY_SIGN_FIELD) #endif /* U_HIDE_DEPRECATED_API */ } UNumberFormatFields; diff --git a/deps/icu-small/source/i18n/unicode/unumberformatter.h b/deps/icu-small/source/i18n/unicode/unumberformatter.h index cb980cd94dd..58a75baf073 100644 --- a/deps/icu-small/source/i18n/unicode/unumberformatter.h +++ b/deps/icu-small/source/i18n/unicode/unumberformatter.h @@ -78,7 +78,6 @@ * */ -#ifndef U_FORCE_HIDE_DRAFT_API /** * An enum declaring how to resolve conflicts between maximum fraction digits and maximum * significant digits. @@ -115,24 +114,23 @@ * Here, RELAXED favors Max-Fraction and STRICT favors Max-Significant. Note that this larger * number caused the two modes to favor the opposite result. * - * @draft ICU 69 + * @stable ICU 69 */ typedef enum UNumberRoundingPriority { /** * Favor greater precision by relaxing one of the rounding constraints. * - * @draft ICU 69 + * @stable ICU 69 */ UNUM_ROUNDING_PRIORITY_RELAXED, /** * Favor adherence to all rounding constraints by producing lower precision. * - * @draft ICU 69 + * @stable ICU 69 */ UNUM_ROUNDING_PRIORITY_STRICT, } UNumberRoundingPriority; -#endif // U_FORCE_HIDE_DRAFT_API /** * An enum declaring how to render units, including currencies. Example outputs when formatting 123 USD and 123 @@ -435,21 +433,19 @@ typedef enum UNumberSignDisplay { */ UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO, -#ifndef U_HIDE_DRAFT_API /** * Same as AUTO, but do not show the sign on negative zero. * - * @draft ICU 69 + * @stable ICU 69 */ UNUM_SIGN_NEGATIVE, /** * Same as ACCOUNTING, but do not show the sign on negative zero. * - * @draft ICU 69 + * @stable ICU 69 */ UNUM_SIGN_ACCOUNTING_NEGATIVE, -#endif // U_HIDE_DRAFT_API // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API, // needed for unconditionalized struct MacroProps @@ -498,31 +494,29 @@ typedef enum UNumberDecimalSeparatorDisplay { UNUM_DECIMAL_SEPARATOR_COUNT } UNumberDecimalSeparatorDisplay; -#ifndef U_FORCE_HIDE_DRAFT_API /** * An enum declaring how to render trailing zeros. * * - UNUM_TRAILING_ZERO_AUTO: 0.90, 1.00, 1.10 * - UNUM_TRAILING_ZERO_HIDE_IF_WHOLE: 0.90, 1, 1.10 * - * @draft ICU 69 + * @stable ICU 69 */ typedef enum UNumberTrailingZeroDisplay { /** * Display trailing zeros according to the settings for minimum fraction and significant digits. * - * @draft ICU 69 + * @stable ICU 69 */ UNUM_TRAILING_ZERO_AUTO, /** * Same as AUTO, but hide trailing zeros after the decimal separator if they are all zero. * - * @draft ICU 69 + * @stable ICU 69 */ UNUM_TRAILING_ZERO_HIDE_IF_WHOLE, } UNumberTrailingZeroDisplay; -#endif // U_FORCE_HIDE_DRAFT_API struct UNumberFormatter; /** diff --git a/deps/icu-small/source/i18n/unicode/vtzone.h b/deps/icu-small/source/i18n/unicode/vtzone.h index e7d2f515410..ecf335bbe34 100644 --- a/deps/icu-small/source/i18n/unicode/vtzone.h +++ b/deps/icu-small/source/i18n/unicode/vtzone.h @@ -264,16 +264,14 @@ class U_I18N_API VTimeZone : public BasicTimeZone { virtual void getOffset(UDate date, UBool local, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const override; -#ifndef U_FORCE_HIDE_DRAFT_API /** * Get time zone offsets from local wall time. - * @draft ICU 69 + * @stable ICU 69 */ virtual void getOffsetFromLocal( UDate date, UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override; -#endif /* U_FORCE_HIDE_DRAFT_API */ /** * Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add diff --git a/deps/icu-small/source/i18n/units_complexconverter.cpp b/deps/icu-small/source/i18n/units_complexconverter.cpp index 78cefbf7ebb..ecbe3c78794 100644 --- a/deps/icu-small/source/i18n/units_complexconverter.cpp +++ b/deps/icu-small/source/i18n/units_complexconverter.cpp @@ -183,7 +183,7 @@ MaybeStackVector ComplexUnitsConverter::convert(double quantity, } else { quantity = remainder; } - } + } } applyRounder(intValues, quantity, rounder, status); @@ -210,7 +210,6 @@ MaybeStackVector ComplexUnitsConverter::convert(double quantity, } } - // Transfer values into result and return: for(int32_t i = 0, n = unitsConverters_.length(); i < n; ++i) { U_ASSERT(tmpResult[i] != nullptr); @@ -224,6 +223,12 @@ MaybeStackVector ComplexUnitsConverter::convert(double quantity, void ComplexUnitsConverter::applyRounder(MaybeStackArray &intValues, double &quantity, icu::number::impl::RoundingImpl *rounder, UErrorCode &status) const { + if (uprv_isInfinite(quantity) || uprv_isNaN(quantity)) { + // Inf and NaN can't be rounded, and calculating `carry` below is known + // to fail on Gentoo on HPPA and OpenSUSE on riscv64. Nothing to do. + return; + } + if (rounder == nullptr) { // Nothing to do for the quantity. return; diff --git a/deps/icu-small/source/i18n/units_complexconverter.h b/deps/icu-small/source/i18n/units_complexconverter.h index 5c669b45ddd..d56ce8d4ce3 100644 --- a/deps/icu-small/source/i18n/units_complexconverter.h +++ b/deps/icu-small/source/i18n/units_complexconverter.h @@ -108,13 +108,15 @@ class U_I18N_API ComplexUnitsConverter : public UMemory { MaybeStackVector convert(double quantity, icu::number::impl::RoundingImpl *rounder, UErrorCode &status) const; - private: + // TODO(ICU-21937): Make it private after submitting the public units conversion API. MaybeStackVector unitsConverters_; + // TODO(ICU-21937): Make it private after submitting the public units conversion API. // Individual units of mixed units, sorted big to small, with indices // indicating the requested output mixed unit order. MaybeStackVector units_; + private: // Sorts units_, which must be populated before calling this, and populates // unitsConverters_. void init(const MeasureUnitImpl &inputUnit, const ConversionRates &ratesInfo, UErrorCode &status); diff --git a/deps/icu-small/source/i18n/units_converter.cpp b/deps/icu-small/source/i18n/units_converter.cpp index 7e946e584bb..82b8eea3d8c 100644 --- a/deps/icu-small/source/i18n/units_converter.cpp +++ b/deps/icu-small/source/i18n/units_converter.cpp @@ -9,6 +9,7 @@ #include "cmemory.h" #include "double-conversion-string-to-double.h" #include "measunit_impl.h" +#include "putilimp.h" #include "uassert.h" #include "unicode/errorcode.h" #include "unicode/localpointer.h" @@ -588,10 +589,7 @@ double UnitsConverter::convert(double inputValue) const { if (conversionRate_.reciprocal) { if (result == 0) { - // TODO: demonstrate the resulting behaviour in tests... and figure - // out desired behaviour. (Theoretical result should be infinity, - // not 0.) - return 0.0; + return uprv_getInfinity(); } result = 1.0 / result; } @@ -603,10 +601,7 @@ double UnitsConverter::convertInverse(double inputValue) const { double result = inputValue; if (conversionRate_.reciprocal) { if (result == 0) { - // TODO: demonstrate the resulting behaviour in tests... and figure - // out desired behaviour. (Theoretical result should be infinity, - // not 0.) - return 0.0; + return uprv_getInfinity(); } result = 1.0 / result; } diff --git a/deps/icu-small/source/i18n/units_router.h b/deps/icu-small/source/i18n/units_router.h index b3300f7e277..d9fcffb2aa9 100644 --- a/deps/icu-small/source/i18n/units_router.h +++ b/deps/icu-small/source/i18n/units_router.h @@ -30,8 +30,6 @@ namespace units { struct RouteResult : UMemory { // A list of measures: a single measure for single units, multiple measures // for mixed units. - // - // TODO(icu-units/icu#21): figure out the right mixed unit API. MaybeStackVector measures; // The output unit for this RouteResult. This may be a MIXED unit - for diff --git a/deps/icu-small/source/i18n/uspoof_conf.cpp b/deps/icu-small/source/i18n/uspoof_conf.cpp index 04081cabfb0..172c0711afb 100644 --- a/deps/icu-small/source/i18n/uspoof_conf.cpp +++ b/deps/icu-small/source/i18n/uspoof_conf.cpp @@ -63,23 +63,24 @@ U_NAMESPACE_USE // at the same time // -SPUString::SPUString(UnicodeString *s) { - fStr = s; +SPUString::SPUString(LocalPointer s) { + fStr = std::move(s); fCharOrStrTableIndex = 0; } SPUString::~SPUString() { - delete fStr; } -SPUStringPool::SPUStringPool(UErrorCode &status) : fVec(NULL), fHash(NULL) { - fVec = new UVector(status); - if (fVec == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; +SPUStringPool::SPUStringPool(UErrorCode &status) : fVec(nullptr), fHash(nullptr) { + LocalPointer vec(new UVector(status), status); + if (U_FAILURE(status)) { return; } + vec->setDeleter( + [](void *obj) {delete (SPUString *)obj;}); + fVec = vec.orphan(); fHash = uhash_open(uhash_hashUnicodeString, // key hash function uhash_compareUnicodeString, // Key Comparator NULL, // Value Comparator @@ -88,11 +89,6 @@ SPUStringPool::SPUStringPool(UErrorCode &status) : fVec(NULL), fHash(NULL) { SPUStringPool::~SPUStringPool() { - int i; - for (i=fVec->size()-1; i>=0; i--) { - SPUString *s = static_cast(fVec->elementAt(i)); - delete s; - } delete fVec; uhash_close(fHash); } @@ -135,18 +131,21 @@ void SPUStringPool::sort(UErrorCode &status) { SPUString *SPUStringPool::addString(UnicodeString *src, UErrorCode &status) { + LocalPointer lpSrc(src); + if (U_FAILURE(status)) { + return nullptr; + } SPUString *hashedString = static_cast(uhash_get(fHash, src)); - if (hashedString != NULL) { - delete src; - } else { - hashedString = new SPUString(src); - if (hashedString == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - uhash_put(fHash, src, hashedString, &status); - fVec->addElementX(hashedString, status); + if (hashedString != nullptr) { + return hashedString; + } + LocalPointer spuStr(new SPUString(std::move(lpSrc)), status); + hashedString = spuStr.getAlias(); + fVec->adoptElement(spuStr.orphan(), status); + if (U_FAILURE(status)) { + return nullptr; } + uhash_put(fHash, src, hashedString, &status); return hashedString; } diff --git a/deps/icu-small/source/i18n/uspoof_conf.h b/deps/icu-small/source/i18n/uspoof_conf.h index 600d7ea42a4..1eeecdfd5e4 100644 --- a/deps/icu-small/source/i18n/uspoof_conf.h +++ b/deps/icu-small/source/i18n/uspoof_conf.h @@ -39,11 +39,12 @@ U_NAMESPACE_BEGIN // Instances of SPUString exist during the compilation process only. struct SPUString : public UMemory { - UnicodeString *fStr; // The actual string. - int32_t fCharOrStrTableIndex; // Index into the final runtime data for this - // string (or, for length 1, the single string char - // itself, there being no string table entry for it.) - SPUString(UnicodeString *s); + LocalPointer fStr; // The actual string. + int32_t fCharOrStrTableIndex; // Index into the final runtime data for this + // string (or, for length 1, the single string char + // itself, there being no string table entry for it.) + + SPUString(LocalPointer s); ~SPUString(); }; diff --git a/deps/icu-small/source/i18n/uspoof_impl.cpp b/deps/icu-small/source/i18n/uspoof_impl.cpp index b283d813210..f96826f86cc 100644 --- a/deps/icu-small/source/i18n/uspoof_impl.cpp +++ b/deps/icu-small/source/i18n/uspoof_impl.cpp @@ -945,7 +945,7 @@ uspoof_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *ou uint32_t magic = ds->readUInt32(spoofDH->fMagic); ds->writeUInt32((uint32_t *)&outputDH->fMagic, magic); - if (outputDH->fFormatVersion != spoofDH->fFormatVersion) { + if (inBytes != outBytes) { uprv_memcpy(outputDH->fFormatVersion, spoofDH->fFormatVersion, sizeof(spoofDH->fFormatVersion)); } // swap starting at fLength diff --git a/deps/icu-small/source/i18n/vtzone.cpp b/deps/icu-small/source/i18n/vtzone.cpp index 9111e08848f..06f0b84c0f5 100644 --- a/deps/icu-small/source/i18n/vtzone.cpp +++ b/deps/icu-small/source/i18n/vtzone.cpp @@ -24,14 +24,6 @@ U_NAMESPACE_BEGIN -// This is the deleter that will be use to remove TimeZoneRule -U_CDECL_BEGIN -static void U_CALLCONV -deleteTimeZoneRule(void* obj) { - delete (TimeZoneRule*) obj; -} -U_CDECL_END - // Smybol characters used by RFC2445 VTIMEZONE static const UChar COLON = 0x3A; /* : */ static const UChar SEMICOLON = 0x3B; /* ; */ @@ -976,22 +968,19 @@ VTimeZone::VTimeZone(const VTimeZone& source) if (source.vtzlines != nullptr) { UErrorCode status = U_ZERO_ERROR; int32_t size = source.vtzlines->size(); - vtzlines = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, size, status); - if (vtzlines == nullptr) { + LocalPointer lpVtzLines( + new UVector(uprv_deleteUObject, uhash_compareUnicodeString, size, status), status); + if (U_FAILURE(status)) { return; } - if (U_SUCCESS(status)) { - for (int32_t i = 0; i < size; i++) { - UnicodeString *line = (UnicodeString*)source.vtzlines->elementAt(i); - vtzlines->addElementX(line->clone(), status); - if (U_FAILURE(status)) { - break; - } + for (int32_t i = 0; i < size; i++) { + UnicodeString *line = ((UnicodeString*)source.vtzlines->elementAt(i))->clone(); + lpVtzLines->adoptElement(line, status); + if (U_FAILURE(status) || line == nullptr) { + return; } } - if (U_FAILURE(status) && vtzlines != nullptr) { - delete vtzlines; - } + vtzlines = lpVtzLines.orphan(); } } @@ -1020,23 +1009,25 @@ VTimeZone::operator=(const VTimeZone& right) { } if (vtzlines != nullptr) { delete vtzlines; + vtzlines = nullptr; } if (right.vtzlines != nullptr) { UErrorCode status = U_ZERO_ERROR; int32_t size = right.vtzlines->size(); - vtzlines = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, size, status); - if (vtzlines != nullptr && U_SUCCESS(status)) { + LocalPointer lpVtzLines( + new UVector(uprv_deleteUObject, uhash_compareUnicodeString, size, status), status); + if (U_SUCCESS(status)) { for (int32_t i = 0; i < size; i++) { - UnicodeString *line = (UnicodeString*)right.vtzlines->elementAt(i); - vtzlines->addElementX(line->clone(), status); + LocalPointer line( + ((UnicodeString*)right.vtzlines->elementAt(i))->clone(), status); + lpVtzLines->adoptElement(line.orphan(), status); if (U_FAILURE(status)) { break; } } - } - if (U_FAILURE(status) && vtzlines != nullptr) { - delete vtzlines; - vtzlines = nullptr; + if (U_SUCCESS(status)) { + vtzlines = lpVtzLines.orphan(); + } } } tzurl = right.tzurl; @@ -1272,10 +1263,9 @@ VTimeZone::getTimeZoneRules(const InitialTimeZoneRule*& initial, void VTimeZone::load(VTZReader& reader, UErrorCode& status) { - vtzlines = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, DEFAULT_VTIMEZONE_LINES, status); - if (vtzlines == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - } + U_ASSERT(vtzlines == nullptr); + LocalPointer lpVtzLines( + new UVector(uprv_deleteUObject, uhash_compareUnicodeString, DEFAULT_VTIMEZONE_LINES, status), status); if (U_FAILURE(status)) { return; } @@ -1290,14 +1280,10 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) { // end of file if (start && line.startsWith(ICAL_END_VTIMEZONE, -1)) { LocalPointer element(new UnicodeString(line), status); + lpVtzLines->adoptElement(element.orphan(), status); if (U_FAILURE(status)) { - goto cleanupVtzlines; - } - vtzlines->addElementX(element.getAlias(), status); - if (U_FAILURE(status)) { - goto cleanupVtzlines; + return; } - element.orphan(); // on success, vtzlines owns the object. success = TRUE; } break; @@ -1312,14 +1298,10 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) { if (start) { if (line.length() > 0) { LocalPointer element(new UnicodeString(line), status); + lpVtzLines->adoptElement(element.orphan(), status); if (U_FAILURE(status)) { - goto cleanupVtzlines; + return; } - vtzlines->addElementX(element.getAlias(), status); - if (U_FAILURE(status)) { - goto cleanupVtzlines; - } - element.orphan(); // on success, vtzlines owns the object. } } line.remove(); @@ -1335,28 +1317,20 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) { if (start) { if (line.startsWith(ICAL_END_VTIMEZONE, -1)) { LocalPointer element(new UnicodeString(line), status); + lpVtzLines->adoptElement(element.orphan(), status); if (U_FAILURE(status)) { - goto cleanupVtzlines; - } - vtzlines->addElementX(element.getAlias(), status); - if (U_FAILURE(status)) { - goto cleanupVtzlines; + return; } - element.orphan(); // on success, vtzlines owns the object. success = TRUE; break; } } else { if (line.startsWith(ICAL_BEGIN_VTIMEZONE, -1)) { LocalPointer element(new UnicodeString(line), status); + lpVtzLines->adoptElement(element.orphan(), status); if (U_FAILURE(status)) { - goto cleanupVtzlines; - } - vtzlines->addElementX(element.getAlias(), status); - if (U_FAILURE(status)) { - goto cleanupVtzlines; + return; } - element.orphan(); // on success, vtzlines owns the object. line.remove(); start = TRUE; eol = FALSE; @@ -1371,14 +1345,10 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) { if (U_SUCCESS(status)) { status = U_INVALID_STATE_ERROR; } - goto cleanupVtzlines; + return; } + vtzlines = lpVtzLines.orphan(); parse(status); - return; - -cleanupVtzlines: - delete vtzlines; - vtzlines = nullptr; } // parser state @@ -1398,8 +1368,6 @@ VTimeZone::parse(UErrorCode& status) { status = U_INVALID_STATE_ERROR; return; } - InitialTimeZoneRule *initialRule = nullptr; - RuleBasedTimeZone *rbtz = nullptr; // timezone ID UnicodeString tzid; @@ -1418,28 +1386,16 @@ VTimeZone::parse(UErrorCode& status) { UnicodeString name; // RFC2445 prop name UnicodeString value; // RFC2445 prop value - UVector *dates = nullptr; // list of RDATE or RRULE strings - UVector *rules = nullptr; // list of TimeZoneRule instances - int32_t finalRuleIdx = -1; int32_t finalRuleCount = 0; - rules = new UVector(status); - if (rules == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - } - if (U_FAILURE(status)) { - goto cleanupParse; - } - // Set the deleter to remove TimeZoneRule vectors to avoid memory leaks due to unowned TimeZoneRules. - rules->setDeleter(deleteTimeZoneRule); + // Set the deleter on rules to remove TimeZoneRule vectors to avoid memory leaks due to unowned TimeZoneRules. + UVector rules(uprv_deleteUObject, nullptr, status); - dates = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status); - if (dates == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - } + // list of RDATE or RRULE strings + UVector dates(uprv_deleteUObject, uhash_compareUnicodeString, status); if (U_FAILURE(status)) { - goto cleanupParse; + return; } for (n = 0; n < vtzlines->size(); n++) { @@ -1469,18 +1425,18 @@ VTimeZone::parse(UErrorCode& status) { // can be any value. lastmod = parseDateTimeString(value, 0, status); if (U_FAILURE(status)) { - goto cleanupParse; + return; } } else if (name.compare(ICAL_BEGIN, -1) == 0) { UBool isDST = (value.compare(ICAL_DAYLIGHT, -1) == 0); if (value.compare(ICAL_STANDARD, -1) == 0 || isDST) { // tzid must be ready at this point if (tzid.length() == 0) { - goto cleanupParse; + return; } // initialize current zone properties - if (dates->size() != 0) { - dates->removeAllElements(); + if (dates.size() != 0) { + dates.removeAllElements(); } isRRULE = FALSE; from.remove(); @@ -1491,7 +1447,7 @@ VTimeZone::parse(UErrorCode& status) { } else { // BEGIN property other than STANDARD/DAYLIGHT // must not be there. - goto cleanupParse; + return; } } else if (name.compare(ICAL_END, -1) == 0) { break; @@ -1509,50 +1465,42 @@ VTimeZone::parse(UErrorCode& status) { } else if (name.compare(ICAL_RDATE, -1) == 0) { // RDATE mixed with RRULE is not supported if (isRRULE) { - goto cleanupParse; + return; } // RDATE value may contain multiple date delimited // by comma UBool nextDate = TRUE; int32_t dstart = 0; - UnicodeString *dstr = nullptr; + LocalPointer dstr; while (nextDate) { int32_t dend = value.indexOf(COMMA, dstart); if (dend == -1) { - dstr = new UnicodeString(value, dstart); + dstr.adoptInsteadAndCheckErrorCode(new UnicodeString(value, dstart), status); nextDate = FALSE; } else { - dstr = new UnicodeString(value, dstart, dend - dstart); - } - if (dstr == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - } else { - dates->addElementX(dstr, status); + dstr.adoptInsteadAndCheckErrorCode(new UnicodeString(value, dstart, dend - dstart), status); } + dates.adoptElement(dstr.orphan(), status); if (U_FAILURE(status)) { - goto cleanupParse; + return; } dstart = dend + 1; } } else if (name.compare(ICAL_RRULE, -1) == 0) { // RRULE mixed with RDATE is not supported - if (!isRRULE && dates->size() != 0) { - goto cleanupParse; + if (!isRRULE && dates.size() != 0) { + return; } isRRULE = true; LocalPointer element(new UnicodeString(value), status); + dates.adoptElement(element.orphan(), status); if (U_FAILURE(status)) { - goto cleanupParse; - } - dates->addElementX(element.getAlias(), status); - if (U_FAILURE(status)) { - goto cleanupParse; + return; } - element.orphan(); // on success, dates owns the object. } else if (name.compare(ICAL_END, -1) == 0) { // Mandatory properties if (dtstart.length() == 0 || from.length() == 0 || to.length() == 0) { - goto cleanupParse; + return; } // if zonename is not available, create one from tzid if (zonename.length() == 0) { @@ -1560,7 +1508,7 @@ VTimeZone::parse(UErrorCode& status) { } // create a time zone rule - TimeZoneRule *rule = nullptr; + LocalPointer rule; int32_t fromOffset = 0; int32_t toOffset = 0; int32_t rawOffset = 0; @@ -1571,7 +1519,7 @@ VTimeZone::parse(UErrorCode& status) { fromOffset = offsetStrToMillis(from, status); toOffset = offsetStrToMillis(to, status); if (U_FAILURE(status)) { - goto cleanupParse; + return; } if (dst) { @@ -1592,18 +1540,20 @@ VTimeZone::parse(UErrorCode& status) { // start time start = parseDateTimeString(dtstart, fromOffset, status); if (U_FAILURE(status)) { - goto cleanupParse; + return; } // Create the rule UDate actualStart = MAX_MILLIS; if (isRRULE) { - rule = createRuleByRRULE(zonename, rawOffset, dstSavings, start, dates, fromOffset, status); + rule.adoptInsteadAndCheckErrorCode( + createRuleByRRULE(zonename, rawOffset, dstSavings, start, &dates, fromOffset, status), status); } else { - rule = createRuleByRDATE(zonename, rawOffset, dstSavings, start, dates, fromOffset, status); + rule.adoptInsteadAndCheckErrorCode( + createRuleByRDATE(zonename, rawOffset, dstSavings, start, &dates, fromOffset, status), status); } - if (U_FAILURE(status) || rule == nullptr) { - goto cleanupParse; + if (U_FAILURE(status)) { + return; } else { UBool startAvail = rule->getFirstStart(fromOffset, 0, actualStart); if (startAvail && actualStart < firstStart) { @@ -1626,9 +1576,9 @@ VTimeZone::parse(UErrorCode& status) { } } } - rules->addElementX(rule, status); + rules.adoptElement(rule.orphan(), status); if (U_FAILURE(status)) { - goto cleanupParse; + return; } state = VTZ; } @@ -1636,28 +1586,31 @@ VTimeZone::parse(UErrorCode& status) { } } // Must have at least one rule - if (rules->size() == 0) { - goto cleanupParse; + if (rules.size() == 0) { + return; } // Create a initial rule getDefaultTZName(tzid, FALSE, zonename); - initialRule = new InitialTimeZoneRule(zonename, initialRawOffset, initialDSTSavings); - if (initialRule == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanupParse; + LocalPointer initialRule( + new InitialTimeZoneRule(zonename, initialRawOffset, initialDSTSavings), status); + if (U_FAILURE(status)) { + return; } // Finally, create the RuleBasedTimeZone - rbtz = new RuleBasedTimeZone(tzid, initialRule); - if (rbtz == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanupParse; + // C++ awkwardness on memory allocation failure: the constructor wont be run, meaning + // that initialRule wont be adopted/deleted, as it normally would be. + LocalPointer rbtz( + new RuleBasedTimeZone(tzid, initialRule.getAlias()), status); + if (U_SUCCESS(status)) { + initialRule.orphan(); + } else { + return; } - initialRule = nullptr; // already adopted by RBTZ, no need to delete - for (n = 0; n < rules->size(); n++) { - TimeZoneRule *r = (TimeZoneRule*)rules->elementAt(n); + for (n = 0; n < rules.size(); n++) { + TimeZoneRule *r = (TimeZoneRule*)rules.elementAt(n); AnnualTimeZoneRule *atzrule = dynamic_cast(r); if (atzrule != nullptr) { if (atzrule->getEndYear() == AnnualTimeZoneRule::MAX_YEAR) { @@ -1669,18 +1622,18 @@ VTimeZone::parse(UErrorCode& status) { if (finalRuleCount > 2) { // Too many final rules status = U_ILLEGAL_ARGUMENT_ERROR; - goto cleanupParse; + return; } if (finalRuleCount == 1) { - if (rules->size() == 1) { + if (rules.size() == 1) { // Only one final rule, only governs the initial rule, // which is already initialized, thus, we do not need to // add this transition rule - rules->removeAllElements(); + rules.removeAllElements(); } else { // Normalize the final rule - AnnualTimeZoneRule *finalRule = (AnnualTimeZoneRule*)rules->elementAt(finalRuleIdx); + AnnualTimeZoneRule *finalRule = (AnnualTimeZoneRule*)rules.elementAt(finalRuleIdx); int32_t tmpRaw = finalRule->getRawOffset(); int32_t tmpDST = finalRule->getDSTSavings(); @@ -1688,11 +1641,11 @@ VTimeZone::parse(UErrorCode& status) { UDate finalStart, start; finalRule->getFirstStart(initialRawOffset, initialDSTSavings, finalStart); start = finalStart; - for (n = 0; n < rules->size(); n++) { + for (n = 0; n < rules.size(); n++) { if (finalRuleIdx == n) { continue; } - TimeZoneRule *r = (TimeZoneRule*)rules->elementAt(n); + TimeZoneRule *r = (TimeZoneRule*)rules.elementAt(n); UDate lastStart; r->getFinalStart(tmpRaw, tmpDST, lastStart); if (lastStart > start) { @@ -1704,78 +1657,58 @@ VTimeZone::parse(UErrorCode& status) { } } - TimeZoneRule *newRule = nullptr; + LocalPointer newRule; UnicodeString tznam; if (start == finalStart) { // Transform this into a single transition - newRule = new TimeArrayTimeZoneRule( - finalRule->getName(tznam), - finalRule->getRawOffset(), - finalRule->getDSTSavings(), - &finalStart, - 1, - DateTimeRule::UTC_TIME); + newRule.adoptInsteadAndCheckErrorCode( + new TimeArrayTimeZoneRule( + finalRule->getName(tznam), + finalRule->getRawOffset(), + finalRule->getDSTSavings(), + &finalStart, + 1, + DateTimeRule::UTC_TIME), + status); } else { // Update the end year int32_t y, m, d, dow, doy, mid; Grego::timeToFields(start, y, m, d, dow, doy, mid); - newRule = new AnnualTimeZoneRule( - finalRule->getName(tznam), - finalRule->getRawOffset(), - finalRule->getDSTSavings(), - *(finalRule->getRule()), - finalRule->getStartYear(), - y); + newRule.adoptInsteadAndCheckErrorCode( + new AnnualTimeZoneRule( + finalRule->getName(tznam), + finalRule->getRawOffset(), + finalRule->getDSTSavings(), + *(finalRule->getRule()), + finalRule->getStartYear(), + y), + status); } - if (newRule == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanupParse; + if (U_FAILURE(status)) { + return; } - rules->removeElementAt(finalRuleIdx); - rules->addElementX(newRule, status); + rules.removeElementAt(finalRuleIdx); + rules.adoptElement(newRule.orphan(), status); if (U_FAILURE(status)) { - delete newRule; - goto cleanupParse; + return; } } } - while (!rules->isEmpty()) { - TimeZoneRule *tzr = (TimeZoneRule*)rules->orphanElementAt(0); + while (!rules.isEmpty()) { + TimeZoneRule *tzr = (TimeZoneRule*)rules.orphanElementAt(0); rbtz->addTransitionRule(tzr, status); if (U_FAILURE(status)) { - goto cleanupParse; + return; } } rbtz->complete(status); if (U_FAILURE(status)) { - goto cleanupParse; + return; } - delete rules; - delete dates; - tz = rbtz; + tz = rbtz.orphan(); setID(tzid); - return; - -cleanupParse: - if (rules != nullptr) { - while (!rules->isEmpty()) { - TimeZoneRule *r = (TimeZoneRule*)rules->orphanElementAt(0); - delete r; - } - delete rules; - } - if (dates != nullptr) { - delete dates; - } - if (initialRule != nullptr) { - delete initialRule; - } - if (rbtz != nullptr) { - delete rbtz; - } - return; } void @@ -1809,7 +1742,7 @@ VTimeZone::write(VTZWriter& writer, UErrorCode& status) const { icutzprop.append(u'['); icutzprop.append(icutzver); icutzprop.append(u']'); - customProps.addElementX(&icutzprop, status); + customProps.addElement(&icutzprop, status); } writeZone(writer, *tz, &customProps, status); } @@ -1827,34 +1760,35 @@ VTimeZone::write(UDate start, VTZWriter& writer, UErrorCode& status) const { // Extract rules applicable to dates after the start time getTimeZoneRulesAfter(start, initial, transitionRules, status); + LocalPointer lpInitial(initial); + LocalPointer lpTransitionRules(transitionRules); if (U_FAILURE(status)) { return; } // Create a RuleBasedTimeZone with the subset rule getID(tzid); - RuleBasedTimeZone rbtz(tzid, initial); - if (transitionRules != nullptr) { - while (!transitionRules->isEmpty()) { - TimeZoneRule *tr = (TimeZoneRule*)transitionRules->orphanElementAt(0); + RuleBasedTimeZone rbtz(tzid, lpInitial.orphan()); + if (lpTransitionRules.isValid()) { + U_ASSERT(transitionRules->hasDeleter()); // Assumed for U_FAILURE early return, below. + while (!lpTransitionRules->isEmpty()) { + TimeZoneRule *tr = (TimeZoneRule*)lpTransitionRules->orphanElementAt(0); rbtz.addTransitionRule(tr, status); if (U_FAILURE(status)) { - goto cleanupWritePartial; + return; } } - delete transitionRules; - transitionRules = nullptr; } rbtz.complete(status); if (U_FAILURE(status)) { - goto cleanupWritePartial; + return; } if (olsonzid.length() > 0 && icutzver.length() > 0) { UnicodeString *icutzprop = new UnicodeString(ICU_TZINFO_PROP); if (icutzprop == nullptr) { status = U_MEMORY_ALLOCATION_ERROR; - goto cleanupWritePartial; + return; } icutzprop->append(olsonzid); icutzprop->append((UChar)0x005B/*'['*/); @@ -1862,23 +1796,12 @@ VTimeZone::write(UDate start, VTZWriter& writer, UErrorCode& status) const { icutzprop->append(ICU_TZINFO_PARTIAL, -1); appendMillis(start, *icutzprop); icutzprop->append((UChar)0x005D/*']'*/); - customProps.addElementX(icutzprop, status); + customProps.adoptElement(icutzprop, status); if (U_FAILURE(status)) { - delete icutzprop; - goto cleanupWritePartial; + return; } } writeZone(writer, rbtz, &customProps, status); - return; - -cleanupWritePartial: - if (initial != nullptr) { - delete initial; - } - if (transitionRules != nullptr) { - U_ASSERT(transitionRules->hasDeleter()); - delete transitionRules; - } } void diff --git a/deps/icu-small/source/i18n/zonemeta.cpp b/deps/icu-small/source/i18n/zonemeta.cpp index b8afa4760f1..e60215c9988 100644 --- a/deps/icu-small/source/i18n/zonemeta.cpp +++ b/deps/icu-small/source/i18n/zonemeta.cpp @@ -97,21 +97,13 @@ deleteUCharString(void *obj) { uprv_free(entry); } -/** - * Deleter for UVector - */ -static void U_CALLCONV -deleteUVector(void *obj) { - delete (icu::UVector*) obj; -} - /** * Deleter for OlsonToMetaMappingEntry */ static void U_CALLCONV deleteOlsonToMetaMappingEntry(void *obj) { icu::OlsonToMetaMappingEntry *entry = (icu::OlsonToMetaMappingEntry*)obj; - uprv_free(entry); + delete entry; } U_CDECL_END @@ -477,11 +469,11 @@ ZoneMeta::getCanonicalCountry(const UnicodeString &tzid, UnicodeString &country, UErrorCode ec = U_ZERO_ERROR; if (singleZone) { if (!gSingleZoneCountries->contains((void*)region)) { - gSingleZoneCountries->addElementX((void*)region, ec); + gSingleZoneCountries->addElement((void*)region, ec); } } else { if (!gMultiZonesCountries->contains((void*)region)) { - gMultiZonesCountries->addElementX((void*)region, ec); + gMultiZonesCountries->addElement((void*)region, ec); } } } @@ -550,7 +542,7 @@ static void U_CALLCONV olsonToMetaInit(UErrorCode &status) { gOlsonToMeta = NULL; } else { uhash_setKeyDeleter(gOlsonToMeta, deleteUCharString); - uhash_setValueDeleter(gOlsonToMeta, deleteUVector); + uhash_setValueDeleter(gOlsonToMeta, uprv_deleteUObject); } } @@ -625,7 +617,7 @@ ZoneMeta::getMetazoneMappings(const UnicodeString &tzid) { UVector* ZoneMeta::createMetazoneMappings(const UnicodeString &tzid) { - UVector *mzMappings = NULL; + LocalPointer mzMappings; UErrorCode status = U_ZERO_ERROR; UnicodeString canonicalID; @@ -677,41 +669,32 @@ ZoneMeta::createMetazoneMappings(const UnicodeString &tzid) { continue; } - OlsonToMetaMappingEntry *entry = (OlsonToMetaMappingEntry*)uprv_malloc(sizeof(OlsonToMetaMappingEntry)); - if (entry == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + LocalPointer entry(new OlsonToMetaMappingEntry, status); + if (U_FAILURE(status)) { break; } entry->mzid = mz_name; entry->from = from; entry->to = to; - if (mzMappings == NULL) { - mzMappings = new UVector(deleteOlsonToMetaMappingEntry, NULL, status); + if (mzMappings.isNull()) { + mzMappings.adoptInsteadAndCheckErrorCode( + new UVector(deleteOlsonToMetaMappingEntry, nullptr, status), status); if (U_FAILURE(status)) { - delete mzMappings; - mzMappings = NULL; - uprv_free(entry); break; } } - mzMappings->addElementX(entry, status); + mzMappings->adoptElement(entry.orphan(), status); if (U_FAILURE(status)) { break; } } ures_close(mz); - if (U_FAILURE(status)) { - if (mzMappings != NULL) { - delete mzMappings; - mzMappings = NULL; - } - } } } ures_close(rb); - return mzMappings; + return U_SUCCESS(status) ? mzMappings.orphan() : nullptr; } UnicodeString& U_EXPORT2 @@ -775,6 +758,7 @@ static void U_CALLCONV initAvailableMetaZoneIDs () { // No valueDeleter, because the vector maintain the value objects gMetaZoneIDs = new UVector(NULL, uhash_compareUChars, status); if (U_FAILURE(status) || gMetaZoneIDs == NULL) { + delete gMetaZoneIDs; gMetaZoneIDs = NULL; uhash_close(gMetaZoneIDTable); gMetaZoneIDTable = NULL; @@ -792,20 +776,22 @@ static void U_CALLCONV initAvailableMetaZoneIDs () { } const char *mzID = ures_getKey(res.getAlias()); int32_t len = static_cast(uprv_strlen(mzID)); - UChar *uMzID = (UChar*)uprv_malloc(sizeof(UChar) * (len + 1)); - if (uMzID == NULL) { + LocalMemory uMzID((UChar*)uprv_malloc(sizeof(UChar) * (len + 1))); + if (uMzID.isNull()) { status = U_MEMORY_ALLOCATION_ERROR; break; } - u_charsToUChars(mzID, uMzID, len); + u_charsToUChars(mzID, uMzID.getAlias(), len); uMzID[len] = 0; - UnicodeString *usMzID = new UnicodeString(uMzID); - if (uhash_get(gMetaZoneIDTable, usMzID) == NULL) { - gMetaZoneIDs->addElementX((void *)uMzID, status); - uhash_put(gMetaZoneIDTable, (void *)usMzID, (void *)uMzID, &status); - } else { - uprv_free(uMzID); - delete usMzID; + LocalPointer usMzID(new UnicodeString(uMzID.getAlias()), status); + if (U_FAILURE(status)) { + break; + } + if (uhash_get(gMetaZoneIDTable, usMzID.getAlias()) == NULL) { + // Note: gMetaZoneIDTable adopts its keys, but not its values. + // gMetaZoneIDs adopts its values. + uhash_put(gMetaZoneIDTable, usMzID.orphan(), uMzID.getAlias(), &status); + gMetaZoneIDs->adoptElement(uMzID.orphan(), status); } } ures_close(bundle); diff --git a/deps/icu-small/source/i18n/zonemeta.h b/deps/icu-small/source/i18n/zonemeta.h index f21399342b9..dd4fec957fe 100644 --- a/deps/icu-small/source/i18n/zonemeta.h +++ b/deps/icu-small/source/i18n/zonemeta.h @@ -18,11 +18,11 @@ U_NAMESPACE_BEGIN -typedef struct OlsonToMetaMappingEntry { +struct OlsonToMetaMappingEntry : public UMemory { const UChar *mzid; // const because it's a reference to a resource bundle string. UDate from; UDate to; -} OlsonToMetaMappingEntry; +}; class UVector; class TimeZone; diff --git a/deps/icu-small/source/stubdata/BUILD b/deps/icu-small/source/stubdata/BUILD.bazel similarity index 100% rename from deps/icu-small/source/stubdata/BUILD rename to deps/icu-small/source/stubdata/BUILD.bazel diff --git a/deps/icu-small/source/tools/icuexportdata/icuexportdata.cpp b/deps/icu-small/source/tools/icuexportdata/icuexportdata.cpp index ef933676115..7431ac74ab8 100644 --- a/deps/icu-small/source/tools/icuexportdata/icuexportdata.cpp +++ b/deps/icu-small/source/tools/icuexportdata/icuexportdata.cpp @@ -3,6 +3,7 @@ #include #include +#include #include "toolutil.h" #include "uoptions.h" #include "cmemory.h" @@ -11,8 +12,10 @@ #include "unicode/uchar.h" #include "unicode/errorcode.h" #include "unicode/uniset.h" +#include "unicode/uscript.h" #include "unicode/putil.h" #include "unicode/umutablecptrie.h" +#include "ucase.h" #include "writesrc.h" U_NAMESPACE_USE @@ -27,6 +30,75 @@ UBool haveCopyright = TRUE; UCPTrieType trieType = UCPTRIE_TYPE_SMALL; const char* destdir = ""; +// Mask constants for modified values in the Script CodePointTrie, values are logically 12-bits. +int16_t DATAEXPORT_SCRIPT_X_WITH_COMMON = 0x0400; +int16_t DATAEXPORT_SCRIPT_X_WITH_INHERITED = 0x0800; +int16_t DATAEXPORT_SCRIPT_X_WITH_OTHER = 0x0c00; + +// TODO(ICU-21821): Replace this with a call to a library function +int32_t scxCodePoints[] = { + 7415, 7377, 7380, 7387, 7390, 7391, 7394, 7395, 7396, 7397, + 7398, 7399, 7400, 7403, 7404, 7406, 7407, 7408, 7409, 113824, + 113825, 113826, 113827, 834, 837, 7616, 7617, 12294, 12350, 12351, + 12688, 12689, 12690, 12691, 12692, 12693, 12694, 12695, 12696, 12697, + 12698, 12699, 12700, 12701, 12702, 12703, 12736, 12737, 12738, 12739, + 12740, 12741, 12742, 12743, 12744, 12745, 12746, 12747, 12748, 12749, + 12750, 12751, 12752, 12753, 12754, 12755, 12756, 12757, 12758, 12759, + 12760, 12761, 12762, 12763, 12764, 12765, 12766, 12767, 12768, 12769, + 12770, 12771, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, + 12840, 12841, 12842, 12843, 12844, 12845, 12846, 12847, 12848, 12849, + 12850, 12851, 12852, 12853, 12854, 12855, 12856, 12857, 12858, 12859, + 12860, 12861, 12862, 12863, 12864, 12865, 12866, 12867, 12868, 12869, + 12870, 12871, 12928, 12929, 12930, 12931, 12932, 12933, 12934, 12935, + 12936, 12937, 12938, 12939, 12940, 12941, 12942, 12943, 12944, 12945, + 12946, 12947, 12948, 12949, 12950, 12951, 12952, 12953, 12954, 12955, + 12956, 12957, 12958, 12959, 12960, 12961, 12962, 12963, 12964, 12965, + 12966, 12967, 12968, 12969, 12970, 12971, 12972, 12973, 12974, 12975, + 12976, 12992, 12993, 12994, 12995, 12996, 12997, 12998, 12999, 13000, + 13001, 13002, 13003, 13055, 13144, 13145, 13146, 13147, 13148, 13149, + 13150, 13151, 13152, 13153, 13154, 13155, 13156, 13157, 13158, 13159, + 13160, 13161, 13162, 13163, 13164, 13165, 13166, 13167, 13168, 13179, + 13180, 13181, 13182, 13183, 13280, 13281, 13282, 13283, 13284, 13285, + 13286, 13287, 13288, 13289, 13290, 13291, 13292, 13293, 13294, 13295, + 13296, 13297, 13298, 13299, 13300, 13301, 13302, 13303, 13304, 13305, + 13306, 13307, 13308, 13309, 13310, 119648, 119649, 119650, 119651, 119652, + 119653, 119654, 119655, 119656, 119657, 119658, 119659, 119660, 119661, 119662, + 119663, 119664, 119665, 127568, 127569, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 7418, 7674, + 66272, 66273, 66274, 66275, 66276, 66277, 66278, 66279, 66280, 66281, + 66282, 66283, 66284, 66285, 66286, 66287, 66288, 66289, 66290, 66291, + 66292, 66293, 66294, 66295, 66296, 66297, 66298, 66299, 1748, 64830, + 64831, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, + 1620, 1621, 1648, 65010, 65021, 7381, 7382, 7384, 7393, 7402, + 7405, 7413, 7414, 43249, 12330, 12331, 12332, 12333, 43471, 65794, + 65847, 65848, 65849, 65850, 65851, 65852, 65853, 65854, 65855, 1156, + 1159, 11843, 42607, 1157, 1158, 1155, 7672, 7379, 7411, 7416, + 7417, 7401, 7383, 7385, 7388, 7389, 7392, 43251, 4347, 3046, + 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, + 3057, 3058, 3059, 70401, 70403, 70459, 70460, 73680, 73681, 73683, + 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, + 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, + 42752, 42753, 42754, 42755, 42756, 42757, 42758, 42759, 12337, 12338, + 12339, 12340, 12341, 12441, 12442, 12443, 12444, 12448, 12540, 65392, + 65438, 65439, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, + 3310, 3311, 8239, 68338, 6146, 6147, 6149, 1564, 1632, 1633, + 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 2534, 2535, + 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 4160, 4161, + 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 65792, 65793, + 65799, 65800, 65801, 65802, 65803, 65804, 65805, 65806, 65807, 65808, + 65809, 65810, 65811, 65812, 65813, 65814, 65815, 65816, 65817, 65818, + 65819, 65820, 65821, 65822, 65823, 65824, 65825, 65826, 65827, 65828, + 65829, 65830, 65831, 65832, 65833, 65834, 65835, 65836, 65837, 65838, + 65839, 65840, 65841, 65842, 65843, 7412, 8432, 12348, 12349, 43310, + 7376, 7378, 5941, 5942, 2406, 2407, 2408, 2409, 2410, 2411, + 2412, 2413, 2414, 2415, 12291, 12307, 12316, 12317, 12318, 12319, + 12336, 12343, 65093, 65094, 1548, 1563, 12289, 12290, 12296, 12297, + 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 12308, 12309, + 12310, 12311, 12312, 12313, 12314, 12315, 12539, 65377, 65378, 65379, + 65380, 65381, 7386, 1567, 7410, 1600, 43062, 43063, 43064, 43065, + 2386, 2385, 43059, 43060, 43061, 43056, 43057, 43058, 2404, 2405 + }; + void handleError(ErrorCode& status, const char* context) { if (status.isFailure()) { std::cerr << "Error: " << context << ": " << status.errorName() << std::endl; @@ -96,6 +168,110 @@ void dumpEnumeratedProperty(UProperty uproperty, FILE* f) { usrc_writeUCPTrie(f, shortPropName, utrie.getAlias(), UPRV_TARGET_SYNTAX_TOML); } +void dumpScriptExtensions(FILE* f) { + IcuToolErrorCode status("icuexportdata: dumpScriptExtensions"); + + fputs("[[script_extensions]]\n", f); + const char* scxFullPropName = u_getPropertyName(UCHAR_SCRIPT_EXTENSIONS, U_LONG_PROPERTY_NAME); + const char* scxShortPropName = u_getPropertyName(UCHAR_SCRIPT_EXTENSIONS, U_SHORT_PROPERTY_NAME); + fprintf(f, "long_name = \"%s\"\n", scxFullPropName); + if (scxShortPropName) fprintf(f, "short_name = \"%s\"\n", scxShortPropName); + + // We want to use 16 bits for our exported trie of sc/scx data because we + // need 12 bits to match the 12 bits of data stored for sc/scx in the trie + // in the uprops.icu data file. + UCPTrieValueWidth scWidth = UCPTRIE_VALUE_BITS_16; + + // Create a mutable UCPTrie builder populated with Script property values data. + const UCPMap* scInvMap = u_getIntPropertyMap(UCHAR_SCRIPT, status); + handleError(status, scxFullPropName); + LocalUMutableCPTriePointer builder(umutablecptrie_fromUCPMap(scInvMap, status)); + handleError(status, scxFullPropName); + + // The values for the output scx companion array. + // Invariant is that all subvectors are distinct. + std::vector< std::vector > outputDedupVec; + + // The sc/scx companion array is an array of arrays (of script codes) + fputs("script_code_array = [\n", f); + for(const UChar32 cp : scxCodePoints) { + // Get the Script value + uint32_t scVal = umutablecptrie_get(builder.getAlias(), cp); + // Get the Script_Extensions value (array of Script codes) + const int32_t SCX_ARRAY_CAPACITY = 32; + UScriptCode scxValArray[SCX_ARRAY_CAPACITY]; + int32_t numScripts = uscript_getScriptExtensions(cp, scxValArray, SCX_ARRAY_CAPACITY, status); + handleError(status, scxFullPropName); + + // Convert the scx array into a vector + std::vector scxValVec; + for(int i = 0; i < numScripts; i++) { + scxValVec.push_back(scxValArray[i]); + } + // Ensure that it is sorted + std::sort(scxValVec.begin(), scxValVec.end()); + // Copy the Script value into the first position of the scx array only + // if we have the "other" case (Script value is not Common nor Inherited). + // This offers faster access when users want only the Script value. + if (scVal != USCRIPT_COMMON && scVal != USCRIPT_INHERITED) { + scxValVec.insert(scxValVec.begin(), scVal); + } + + // See if there is already an scx value array matching the newly built one. + // If there is, then use its index. + // If not, then append the new value array. + bool isScxValUnique = true; + size_t outputIndex = 0; + for (outputIndex = 0; outputIndex < outputDedupVec.size(); outputIndex++) { + if (outputDedupVec[outputIndex] == scxValVec) { + isScxValUnique = false; + break; + } + } + + if (isScxValUnique) { + outputDedupVec.push_back(scxValVec); + usrc_writeArray(f, " [", scxValVec.data(), 16, scxValVec.size(), " ", "],\n"); + } + + // We must update the value in the UCPTrie for the code point to contain: + // 9..0 the Script code in the lower 10 bits when 11..10 is 0, else it is + // the index into the companion array + // 11..10 the same higher-order 2 bits in the trie in uprops.icu indicating whether + // 3: other + // 2: Script=Inherited + // 1: Script=Common + // 0: Script=value in 9..0 (N/A because we are in this loop to create the companion array for non-0 cases) + uint16_t mask = 0; + if (scVal == USCRIPT_COMMON) { + mask = DATAEXPORT_SCRIPT_X_WITH_COMMON; + } else if (scVal == USCRIPT_INHERITED) { + mask = DATAEXPORT_SCRIPT_X_WITH_INHERITED; + } else { + mask = DATAEXPORT_SCRIPT_X_WITH_OTHER; + } + + // The new trie value is the index into the new array with the high order bits set + uint32_t newScVal = outputIndex | mask; + + // Update the code point in the mutable trie builder with the trie value + umutablecptrie_set(builder.getAlias(), cp, newScVal, status); + handleError(status, scxFullPropName); + } + fputs("]\n\n", f); // Print the TOML close delimiter for the outer array. + + // Convert from mutable trie builder to immutable trie. + LocalUCPTriePointer utrie(umutablecptrie_buildImmutable( + builder.getAlias(), + trieType, + scWidth, + status)); + handleError(status, scxFullPropName); + + fputs("[script_extensions.code_point_trie]\n", f); + usrc_writeUCPTrie(f, scxShortPropName, utrie.getAlias(), UPRV_TARGET_SYNTAX_TOML); +} + FILE* prepareOutputFile(const char* basename) { IcuToolErrorCode status("icuexportdata"); CharString outFileName; @@ -158,45 +334,42 @@ static UOption options[]={ UOPTION_QUIET, }; -int main(int argc, char* argv[]) { - U_MAIN_INIT_ARGS(argc, argv); - - /* preset then read command line options */ - options[OPT_DESTDIR].value=u_getDataDirectory(); - argc=u_parseArgs(argc, argv, UPRV_LENGTHOF(options), options); - - if(options[OPT_VERSION].doesOccur) { - printf("icuexportdata version %s, ICU tool to dump data files for external consumers\n", - U_ICU_DATA_VERSION); - printf("%s\n", U_COPYRIGHT_STRING); - exit(0); - } - - /* error handling, printing usage message */ - if(argc<0) { - fprintf(stderr, - "error in command line argument \"%s\"\n", - argv[-argc]); - } else if(argc<2) { - argc=-1; - } - - /* get the options values */ - haveCopyright = options[OPT_COPYRIGHT].doesOccur; - destdir = options[OPT_DESTDIR].value; - VERBOSE = options[OPT_VERBOSE].doesOccur; - QUIET = options[OPT_QUIET].doesOccur; +void printHelp(FILE* stdfile, const char* program) { + fprintf(stdfile, + "usage: %s -m mode [-options] [--all | properties...]\n" + "\tdump Unicode property data to .toml files\n" + "options:\n" + "\t-h or -? or --help this usage text\n" + "\t-V or --version show a version message\n" + "\t-m or --mode mode: currently only 'uprops' and 'ucase', but more may be added\n" + "\t --trie-type set the trie type (small or fast, default small)\n" + "\t-d or --destdir destination directory, followed by the path\n" + "\t --all write out all properties known to icuexportdata\n" + "\t --index write an _index.toml summarizing all data exported\n" + "\t-c or --copyright include a copyright notice\n" + "\t-v or --verbose Turn on verbose output\n" + "\t-q or --quiet do not display warnings and progress\n", + program); +} +int exportUprops(int argc, char* argv[]) { // Load list of Unicode properties std::vector propNames; for (int i=1; i(i); const char* propName = u_getPropertyName(uprop, U_SHORT_PROPERTY_NAME); if (propName == NULL) { @@ -207,47 +380,10 @@ int main(int argc, char* argv[]) { } if (propName != NULL) { propNames.push_back(propName); + } else { + std::cerr << "Warning: Could not find name for: " << uprop << std::endl; } - } - } - - if (propNames.empty() - || options[OPT_HELP_H].doesOccur - || options[OPT_HELP_QUESTION_MARK].doesOccur - || !options[OPT_MODE].doesOccur) { - FILE *stdfile=argc<0 ? stderr : stdout; - fprintf(stdfile, - "usage: %s -m uprops [-options] [--all | properties...]\n" - "\tdump Unicode property data to .toml files\n" - "options:\n" - "\t-h or -? or --help this usage text\n" - "\t-V or --version show a version message\n" - "\t-m or --mode mode: currently only 'uprops', but more may be added\n" - "\t --trie-type set the trie type (small or fast, default small)\n" - "\t-d or --destdir destination directory, followed by the path\n" - "\t --all write out all properties known to icuexportdata\n" - "\t --index write an _index.toml summarizing all data exported\n" - "\t-c or --copyright include a copyright notice\n" - "\t-v or --verbose Turn on verbose output\n" - "\t-q or --quiet do not display warnings and progress\n", - argv[0]); - return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR; - } - - const char* mode = options[OPT_MODE].value; - if (uprv_strcmp(mode, "uprops") != 0) { - fprintf(stderr, "Invalid option for --mode (must be uprops)\n"); - return U_ILLEGAL_ARGUMENT_ERROR; - } - - if (options[OPT_TRIE_TYPE].doesOccur) { - if (uprv_strcmp(options[OPT_TRIE_TYPE].value, "fast") == 0) { - trieType = UCPTRIE_TYPE_FAST; - } else if (uprv_strcmp(options[OPT_TRIE_TYPE].value, "small") == 0) { - trieType = UCPTRIE_TYPE_SMALL; - } else { - fprintf(stderr, "Invalid option for --trie-type (must be small or fast)\n"); - return U_ILLEGAL_ARGUMENT_ERROR; + i++; } } @@ -272,6 +408,8 @@ int main(int argc, char* argv[]) { dumpBinaryProperty(propEnum, f); } else if (UCHAR_INT_START <= propEnum && propEnum <= UCHAR_INT_LIMIT) { dumpEnumeratedProperty(propEnum, f); + } else if (propEnum == UCHAR_SCRIPT_EXTENSIONS) { + dumpScriptExtensions(f); } else { std::cerr << "Don't know how to write property: " << propEnum << std::endl; return U_INTERNAL_PROGRAM_ERROR; @@ -293,3 +431,134 @@ int main(int argc, char* argv[]) { return 0; } + +struct AddRangeHelper { + UMutableCPTrie* ucptrie; +}; + +static UBool U_CALLCONV +addRangeToUCPTrie(const void* context, UChar32 start, UChar32 end, uint32_t value) { + IcuToolErrorCode status("addRangeToUCPTrie"); + UMutableCPTrie* ucptrie = ((const AddRangeHelper*) context)->ucptrie; + umutablecptrie_setRange(ucptrie, start, end, value, status); + handleError(status, "setRange"); + + return TRUE; +} + +int exportCase(int argc, char* argv[]) { + if (argc > 1) { + fprintf(stderr, "ucase mode does not expect additional arguments\n"); + return U_ILLEGAL_ARGUMENT_ERROR; + } + (void) argv; // Suppress unused variable warning + + IcuToolErrorCode status("icuexportdata"); + LocalUMutableCPTriePointer builder(umutablecptrie_open(0, 0, status)); + handleError(status, "exportCase"); + + int32_t exceptionsLength, unfoldLength; + const UCaseProps *caseProps = ucase_getSingleton(&exceptionsLength, &unfoldLength); + const UTrie2* caseTrie = &caseProps->trie; + + AddRangeHelper helper = { builder.getAlias() }; + utrie2_enum(caseTrie, NULL, addRangeToUCPTrie, &helper); + + UCPTrieValueWidth width = UCPTRIE_VALUE_BITS_16; + LocalUCPTriePointer utrie(umutablecptrie_buildImmutable( + builder.getAlias(), + trieType, + width, + status)); + handleError(status, "exportCase"); + + FILE* f = prepareOutputFile("ucase"); + + UVersionInfo versionInfo; + u_getUnicodeVersion(versionInfo); + char uvbuf[U_MAX_VERSION_STRING_LENGTH]; + u_versionToString(versionInfo, uvbuf); + fprintf(f, "icu_version = \"%s\"\nunicode_version = \"%s\"\n\n", + U_ICU_VERSION, + uvbuf); + + fputs("[ucase.code_point_trie]\n", f); + usrc_writeUCPTrie(f, "case_trie", utrie.getAlias(), UPRV_TARGET_SYNTAX_TOML); + fputs("\n", f); + + const char* indent = " "; + const char* suffix = "\n]\n"; + + fputs("[ucase.exceptions]\n", f); + const char* exceptionsPrefix = "exceptions = [\n "; + int32_t exceptionsWidth = 16; + usrc_writeArray(f, exceptionsPrefix, caseProps->exceptions, exceptionsWidth, + exceptionsLength, indent, suffix); + fputs("\n", f); + + fputs("[ucase.unfold]\n", f); + const char* unfoldPrefix = "unfold = [\n "; + int32_t unfoldWidth = 16; + usrc_writeArray(f, unfoldPrefix, caseProps->unfold, unfoldWidth, + unfoldLength, indent, suffix); + + return 0; +} + +int main(int argc, char* argv[]) { + U_MAIN_INIT_ARGS(argc, argv); + + /* preset then read command line options */ + options[OPT_DESTDIR].value=u_getDataDirectory(); + argc=u_parseArgs(argc, argv, UPRV_LENGTHOF(options), options); + + if(options[OPT_VERSION].doesOccur) { + printf("icuexportdata version %s, ICU tool to dump data files for external consumers\n", + U_ICU_DATA_VERSION); + printf("%s\n", U_COPYRIGHT_STRING); + exit(0); + } + + /* error handling, printing usage message */ + if(argc<0) { + fprintf(stderr, + "error in command line argument \"%s\"\n", + argv[-argc]); + } + + if (argc < 0 + || options[OPT_HELP_H].doesOccur + || options[OPT_HELP_QUESTION_MARK].doesOccur + || !options[OPT_MODE].doesOccur) { + FILE *stdfile=argc<0 ? stderr : stdout; + printHelp(stdfile, argv[0]); + return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR; + } + + /* get the options values */ + haveCopyright = options[OPT_COPYRIGHT].doesOccur; + destdir = options[OPT_DESTDIR].value; + VERBOSE = options[OPT_VERBOSE].doesOccur; + QUIET = options[OPT_QUIET].doesOccur; + + if (options[OPT_TRIE_TYPE].doesOccur) { + if (uprv_strcmp(options[OPT_TRIE_TYPE].value, "fast") == 0) { + trieType = UCPTRIE_TYPE_FAST; + } else if (uprv_strcmp(options[OPT_TRIE_TYPE].value, "small") == 0) { + trieType = UCPTRIE_TYPE_SMALL; + } else { + fprintf(stderr, "Invalid option for --trie-type (must be small or fast)\n"); + return U_ILLEGAL_ARGUMENT_ERROR; + } + } + + const char* mode = options[OPT_MODE].value; + if (uprv_strcmp(mode, "uprops") == 0) { + return exportUprops(argc, argv); + } else if (uprv_strcmp(mode, "ucase") == 0) { + return exportCase(argc, argv); + } + + fprintf(stderr, "Invalid option for --mode (must be uprops or ucase)\n"); + return U_ILLEGAL_ARGUMENT_ERROR; +} diff --git a/deps/icu-small/source/tools/toolutil/BUILD b/deps/icu-small/source/tools/toolutil/BUILD.bazel similarity index 100% rename from deps/icu-small/source/tools/toolutil/BUILD rename to deps/icu-small/source/tools/toolutil/BUILD.bazel diff --git a/deps/icu-small/source/tools/toolutil/toolutil.cpp b/deps/icu-small/source/tools/toolutil/toolutil.cpp index 1fc68aa69c8..a9dc37377a8 100644 --- a/deps/icu-small/source/tools/toolutil/toolutil.cpp +++ b/deps/icu-small/source/tools/toolutil/toolutil.cpp @@ -228,18 +228,19 @@ uprv_compareGoldenFiles( std::ifstream ifs(goldenFilePath, std::ifstream::in); int32_t pos = 0; char c; - while ((c = ifs.get()) != std::char_traits::eof() && pos < bufferLen) { + while (ifs.get(c) && pos < bufferLen) { if (c != buffer[pos]) { // Files differ at this position - return pos; + break; } pos++; } - if (pos < bufferLen || c != std::char_traits::eof()) { - // Files are different lengths - return pos; + if (pos == bufferLen && ifs.eof()) { + // Files are same lengths + pos = -1; } - return -1; + ifs.close(); + return pos; } /*U_CAPI UDate U_EXPORT2 diff --git a/deps/llhttp/CMakeLists.txt b/deps/llhttp/CMakeLists.txt index 41d2000e993..6474e110a1f 100644 --- a/deps/llhttp/CMakeLists.txt +++ b/deps/llhttp/CMakeLists.txt @@ -1,53 +1,115 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0069 NEW) -project(llhttp C) +project(llhttp VERSION 6.0.10) +include(GNUInstallDirs) set(CMAKE_C_STANDARD 99) +# By default build in relwithdebinfo type, supports both lowercase and uppercase +if(NOT CMAKE_CONFIGURATION_TYPES) + set(allowableBuildTypes DEBUG RELEASE RELWITHDEBINFO MINSIZEREL) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${allowableBuildTypes}") + if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RELWITHDEBINFO CACHE STRING "" FORCE) + else() + string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE) + if(NOT CMAKE_BUILD_TYPE IN_LIST allowableBuildTypes) + message(FATAL_ERROR "Invalid build type: ${CMAKE_BUILD_TYPE}") + endif() + endif() +endif() + # # Options # # Generic option -option(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" OFF) +option(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so)" ON) +option(BUILD_STATIC_LIBS "Build static libraries (.lib/.a)" OFF) # Source code set(LLHTTP_SOURCES - src/llhttp.c - src/http.c - src/api.c + ${CMAKE_CURRENT_SOURCE_DIR}/src/llhttp.c + ${CMAKE_CURRENT_SOURCE_DIR}/src/http.c + ${CMAKE_CURRENT_SOURCE_DIR}/src/api.c ) set(LLHTTP_HEADERS - include/llhttp.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/llhttp.h ) -add_library(llhttp) -add_library(llhttp::llhttp ALIAS llhttp) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/libllhttp.pc.in + ${CMAKE_CURRENT_SOURCE_DIR}/libllhttp.pc + @ONLY +) -target_sources(llhttp PRIVATE ${LLHTTP_SOURCES} ${LLHTTP_HEADERS}) +function(config_library target) + target_sources(${target} PRIVATE ${LLHTTP_SOURCES} ${LLHTTP_HEADERS}) -# On windows with Visual Studio, add a debug postfix so that release -# and debug libraries can coexist. -if(MSVC) - set(CMAKE_DEBUG_POSTFIX "d") -endif() + target_include_directories(${target} PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include + ) -target_include_directories(llhttp PUBLIC - $ - $ -) + set_target_properties(${target} PROPERTIES + OUTPUT_NAME llhttp + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + PUBLIC_HEADER ${LLHTTP_HEADERS} + ) -set_target_properties(llhttp PROPERTIES PUBLIC_HEADER ${LLHTTP_HEADERS}) + install(TARGETS ${target} + EXPORT llhttp + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ) -install(TARGETS llhttp - EXPORT llhttp - ARCHIVE DESTINATION lib - PUBLIC_HEADER DESTINATION include/ -) + install(FILES + ${CMAKE_CURRENT_SOURCE_DIR}/libllhttp.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + ) -# This is required to work with FetchContent -install(EXPORT llhttp + # This is required to work with FetchContent + install(EXPORT llhttp FILE llhttp-config.cmake NAMESPACE llhttp:: - DESTINATION lib/cmake/llhttp) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/llhttp) +endfunction(config_library target) + +if(BUILD_SHARED_LIBS) + add_library(llhttp_shared SHARED + ${llhttp_src} + ) + add_library(llhttp::llhttp ALIAS llhttp_shared) + config_library(llhttp_shared) +endif() + +if(BUILD_STATIC_LIBS) + add_library(llhttp_static STATIC + ${llhttp_src} + ) + if(BUILD_SHARED_LIBS) + add_library(llhttp::llhttp ALIAS llhttp_shared) + else() + add_library(llhttp::llhttp ALIAS llhttp_static) + endif() + config_library(llhttp_static) +endif() + +# On windows with Visual Studio, add a debug postfix so that release +# and debug libraries can coexist. +if(MSVC) + set(CMAKE_DEBUG_POSTFIX "d") +endif() + +# Print project configure summary +message(STATUS "") +message(STATUS "") +message(STATUS "Project configure summary:") +message(STATUS "") +message(STATUS " CMake build type .................: ${CMAKE_BUILD_TYPE}") +message(STATUS " Install prefix ...................: ${CMAKE_INSTALL_PREFIX}") +message(STATUS " Build shared library .............: ${BUILD_SHARED_LIBS}") +message(STATUS " Build static library .............: ${BUILD_STATIC_LIBS}") +message(STATUS "") diff --git a/deps/llhttp/README.md b/deps/llhttp/README.md index 1c37cf662b9..05c2aa681ff 100644 --- a/deps/llhttp/README.md +++ b/deps/llhttp/README.md @@ -90,7 +90,16 @@ if (err == HPE_OK) { parser.reason); } ``` -For more information on API usage, please refer to [src/native/api.h](https://github.com/nodejs/llhttp/blob/master/src/native/api.h). +For more information on API usage, please refer to [src/native/api.h](https://github.com/nodejs/llhttp/blob/main/src/native/api.h). + +## Build Instructions + +Make sure you have [Node.js](https://nodejs.org/), npm and npx installed. Then under project directory run: + +```sh +npm install +make +``` --- @@ -98,7 +107,7 @@ For more information on API usage, please refer to [src/native/api.h](https://gi * Python: [pallas/pyllhttp][8] * Ruby: [metabahn/llhttp][9] - +* Rust: [JackLiar/rust-llhttp][10] ### Using with CMake @@ -106,13 +115,35 @@ If you want to use this library in a CMake project you can use the snippet below ``` FetchContent_Declare(llhttp - URL "https://github.com/nodejs/llhttp/releases/download/v6.0.4/llhttp-release-v6.0.4.tar.gz") # Using version 6.0.4 + URL "https://github.com/nodejs/llhttp/archive/refs/tags/v6.0.5.tar.gz") # Using version 6.0.5 FetchContent_MakeAvailable(llhttp) target_link_libraries(${EXAMPLE_PROJECT_NAME} ${PROJECT_LIBRARIES} llhttp ${PROJECT_NAME}) ``` +## Building on Windows + +### Installation + +* `choco install git` +* `choco install node` +* `choco install llvm` (or install the `C++ Clang tools for Windows` optional package from the Visual Studio 2019 installer) +* `choco install make` (or if you have MinGW, it comes bundled) + +1. Ensure that `Clang` and `make` are in your system path. +2. Using Git Bash, clone the repo to your preferred location. +3. Cd into the cloned directory and run `npm install` +5. Run `make` +6. Your `repo/build` directory should now have `libllhttp.a` and `libllhttp.so` static and dynamic libraries. +7. When building your executable, you can link to these libraries. Make sure to set the build folder as an include path when building so you can reference the declarations in `repo/build/llhttp.h`. + +### A simple example on linking with the library: + +Assuming you have an executable `main.cpp` in your current working directory, you would run: `clang++ -Os -g3 -Wall -Wextra -Wno-unused-parameter -I/path/to/llhttp/build main.cpp /path/to/llhttp/build/libllhttp.a -o main.exe`. + +If you are getting `unresolved external symbol` linker errors you are likely attempting to build `llhttp.c` without linking it with object files from `api.c` and `http.c`. + #### LICENSE This software is licensed under the MIT License. @@ -148,3 +179,4 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. [7]: https://github.com/nodejs/node [8]: https://github.com/pallas/pyllhttp [9]: https://github.com/metabahn/llhttp +[10]: https://github.com/JackLiar/rust-llhttp diff --git a/deps/llhttp/include/llhttp.h b/deps/llhttp/include/llhttp.h index 336234c6a4f..6e1e71ecbce 100644 --- a/deps/llhttp/include/llhttp.h +++ b/deps/llhttp/include/llhttp.h @@ -3,7 +3,7 @@ #define LLHTTP_VERSION_MAJOR 6 #define LLHTTP_VERSION_MINOR 0 -#define LLHTTP_VERSION_PATCH 4 +#define LLHTTP_VERSION_PATCH 10 #ifndef LLHTTP_STRICT_MODE # define LLHTTP_STRICT_MODE 0 @@ -59,6 +59,7 @@ enum llhttp_errno { HPE_OK = 0, HPE_INTERNAL = 1, HPE_STRICT = 2, + HPE_CR_EXPECTED = 25, HPE_LF_EXPECTED = 3, HPE_UNEXPECTED_CONTENT_LENGTH = 4, HPE_CLOSED_CONNECTION = 5, @@ -100,7 +101,9 @@ typedef enum llhttp_flags llhttp_flags_t; enum llhttp_lenient_flags { LENIENT_HEADERS = 0x1, LENIENT_CHUNKED_LENGTH = 0x2, - LENIENT_KEEP_ALIVE = 0x4 + LENIENT_KEEP_ALIVE = 0x4, + LENIENT_TRANSFER_ENCODING = 0x8, + LENIENT_VERSION = 0x10 }; typedef enum llhttp_lenient_flags llhttp_lenient_flags_t; @@ -172,6 +175,7 @@ typedef enum llhttp_method llhttp_method_t; XX(0, OK, OK) \ XX(1, INTERNAL, INTERNAL) \ XX(2, STRICT, STRICT) \ + XX(25, CR_EXPECTED, CR_EXPECTED) \ XX(3, LF_EXPECTED, LF_EXPECTED) \ XX(4, UNEXPECTED_CONTENT_LENGTH, UNEXPECTED_CONTENT_LENGTH) \ XX(5, CLOSED_CONNECTION, CLOSED_CONNECTION) \ @@ -374,8 +378,6 @@ LLHTTP_EXPORT void llhttp_init(llhttp_t* parser, llhttp_type_t type, const llhttp_settings_t* settings); -#if defined(__wasm__) - LLHTTP_EXPORT llhttp_t* llhttp_alloc(llhttp_type_t type); @@ -400,8 +402,6 @@ int llhttp_get_status_code(llhttp_t* parser); LLHTTP_EXPORT uint8_t llhttp_get_upgrade(llhttp_t* parser); -#endif // defined(__wasm__) - /* Reset an already initialized parser back to the start state, preserving the * existing parser type, callback settings, user data, and lenient flags. */ @@ -556,6 +556,19 @@ void llhttp_set_lenient_chunked_length(llhttp_t* parser, int enabled); */ void llhttp_set_lenient_keep_alive(llhttp_t* parser, int enabled); +/* Enables/disables lenient handling of `Transfer-Encoding` header. + * + * Normally `llhttp` would error when a `Transfer-Encoding` has `chunked` value + * and another value after it (either in a single header or in multiple + * headers whose value are internally joined using `, `). + * This is mandated by the spec to reliably determine request body size and thus + * avoid request smuggling. + * With this flag the extra value will be parsed normally. + * + * **(USE AT YOUR OWN RISK)** + */ +void llhttp_set_lenient_transfer_encoding(llhttp_t* parser, int enabled); + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/deps/llhttp/libllhttp.pc.in b/deps/llhttp/libllhttp.pc.in new file mode 100644 index 00000000000..67d280a830d --- /dev/null +++ b/deps/llhttp/libllhttp.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ +includedir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@ + +Name: libllhttp +Description: Node.js llhttp Library +Version: @PROJECT_VERSION@ +Libs: -L${libdir} -lllhttp +Cflags: -I${includedir} \ No newline at end of file diff --git a/deps/llhttp/src/api.c b/deps/llhttp/src/api.c index 1a3bf7b5f35..c4ce197c585 100644 --- a/deps/llhttp/src/api.c +++ b/deps/llhttp/src/api.c @@ -253,6 +253,14 @@ void llhttp_set_lenient_keep_alive(llhttp_t* parser, int enabled) { } } +void llhttp_set_lenient_transfer_encoding(llhttp_t* parser, int enabled) { + if (enabled) { + parser->lenient_flags |= LENIENT_TRANSFER_ENCODING; + } else { + parser->lenient_flags &= ~LENIENT_TRANSFER_ENCODING; + } +} + /* Callbacks */ diff --git a/deps/llhttp/src/http.c b/deps/llhttp/src/http.c index e6279f3bc2c..3a66044f5fb 100644 --- a/deps/llhttp/src/http.c +++ b/deps/llhttp/src/http.c @@ -52,7 +52,8 @@ int llhttp__after_headers_complete(llhttp_t* parser, const char* p, return 2; } else if (parser->flags & F_TRANSFER_ENCODING) { if (parser->type == HTTP_REQUEST && - (parser->lenient_flags & LENIENT_CHUNKED_LENGTH) == 0) { + (parser->lenient_flags & LENIENT_CHUNKED_LENGTH) == 0 && + (parser->lenient_flags & LENIENT_TRANSFER_ENCODING) == 0) { /* RFC 7230 3.3.3 */ /* If a Transfer-Encoding header field diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c index eb49b0c47cc..8e63e79cff3 100644 --- a/deps/llhttp/src/llhttp.c +++ b/deps/llhttp/src/llhttp.c @@ -359,6 +359,7 @@ enum llparse_state_e { s_n_llhttp__internal__n_header_value_lws, s_n_llhttp__internal__n_header_value_almost_done, s_n_llhttp__internal__n_header_value_lenient, + s_n_llhttp__internal__n_error_24, s_n_llhttp__internal__n_header_value_otherwise, s_n_llhttp__internal__n_header_value_connection_token, s_n_llhttp__internal__n_header_value_connection_ws, @@ -366,14 +367,16 @@ enum llparse_state_e { s_n_llhttp__internal__n_header_value_connection_2, s_n_llhttp__internal__n_header_value_connection_3, s_n_llhttp__internal__n_header_value_connection, - s_n_llhttp__internal__n_error_25, s_n_llhttp__internal__n_error_26, + s_n_llhttp__internal__n_error_27, s_n_llhttp__internal__n_header_value_content_length_ws, s_n_llhttp__internal__n_header_value_content_length, - s_n_llhttp__internal__n_header_value_te_chunked_last, + s_n_llhttp__internal__n_error_29, + s_n_llhttp__internal__n_error_28, s_n_llhttp__internal__n_header_value_te_token_ows, s_n_llhttp__internal__n_header_value, s_n_llhttp__internal__n_header_value_te_token, + s_n_llhttp__internal__n_header_value_te_chunked_last, s_n_llhttp__internal__n_header_value_te_chunked, s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1, s_n_llhttp__internal__n_header_value_discard_ws, @@ -810,7 +813,7 @@ int llhttp__internal__c_or_flags_6( return 0; } -int llhttp__internal__c_update_header_state_2( +int llhttp__internal__c_update_header_state_3( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -818,7 +821,7 @@ int llhttp__internal__c_update_header_state_2( return 0; } -int llhttp__internal__c_update_header_state_4( +int llhttp__internal__c_update_header_state_1( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -826,7 +829,7 @@ int llhttp__internal__c_update_header_state_4( return 0; } -int llhttp__internal__c_update_header_state_5( +int llhttp__internal__c_update_header_state_6( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -834,7 +837,7 @@ int llhttp__internal__c_update_header_state_5( return 0; } -int llhttp__internal__c_update_header_state_6( +int llhttp__internal__c_update_header_state_7( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -883,6 +886,20 @@ int llhttp__internal__c_or_flags_15( return 0; } +int llhttp__internal__c_test_flags_3( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { + return (state->flags & 8) == 8; +} + +int llhttp__internal__c_test_lenient_flags_5( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { + return (state->lenient_flags & 8) == 8; +} + int llhttp__internal__c_or_flags_16( llhttp__internal_t* state, const unsigned char* p, @@ -899,7 +916,7 @@ int llhttp__internal__c_and_flags( return 0; } -int llhttp__internal__c_update_header_state_7( +int llhttp__internal__c_update_header_state_8( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -907,7 +924,7 @@ int llhttp__internal__c_update_header_state_7( return 0; } -int llhttp__internal__c_or_flags_17( +int llhttp__internal__c_or_flags_18( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -940,6 +957,27 @@ int llhttp__internal__c_store_http_minor( return 0; } +int llhttp__internal__c_test_lenient_flags_7( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { + return (state->lenient_flags & 16) == 16; +} + +int llhttp__internal__c_load_http_major( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { + return state->http_major; +} + +int llhttp__internal__c_load_http_minor( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { + return state->http_minor; +} + int llhttp__internal__c_update_status_code( llhttp__internal_t* state, const unsigned char* p, @@ -1643,7 +1681,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_value_discard_lws; } default: { - goto s_n_llhttp__internal__n_error_21; + goto s_n_llhttp__internal__n_error_22; } } /* UNREACHABLE */; @@ -1656,13 +1694,13 @@ static llparse_state_t llhttp__internal__run( } switch (*p) { case 9: { - goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1; + goto s_n_llhttp__internal__n_invoke_load_header_state_3; } case ' ': { - goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1; + goto s_n_llhttp__internal__n_invoke_load_header_state_3; } default: { - goto s_n_llhttp__internal__n_invoke_load_header_state_3; + goto s_n_llhttp__internal__n_invoke_load_header_state_4; } } /* UNREACHABLE */; @@ -1679,7 +1717,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_value_lws; } default: { - goto s_n_llhttp__internal__n_error_22; + goto s_n_llhttp__internal__n_error_23; } } /* UNREACHABLE */; @@ -1692,10 +1730,10 @@ static llparse_state_t llhttp__internal__run( } switch (*p) { case 10: { - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_3; } case 13: { - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_3; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_4; } default: { p++; @@ -1705,20 +1743,27 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } + case s_n_llhttp__internal__n_error_24: + s_n_llhttp__internal__n_error_24: { + state->error = 0xa; + state->reason = "Invalid header value char"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } case s_n_llhttp__internal__n_header_value_otherwise: s_n_llhttp__internal__n_header_value_otherwise: { if (p == endp) { return s_n_llhttp__internal__n_header_value_otherwise; } switch (*p) { - case 10: { - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1; - } case 13: { - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1; } default: { - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_3; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_4; } } /* UNREACHABLE */; @@ -1781,10 +1826,10 @@ static llparse_state_t llhttp__internal__run( } case ',': { p++; - goto s_n_llhttp__internal__n_invoke_load_header_state_4; + goto s_n_llhttp__internal__n_invoke_load_header_state_5; } default: { - goto s_n_llhttp__internal__n_invoke_update_header_state_4; + goto s_n_llhttp__internal__n_invoke_update_header_state_5; } } /* UNREACHABLE */; @@ -1802,7 +1847,7 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - goto s_n_llhttp__internal__n_invoke_update_header_state_2; + goto s_n_llhttp__internal__n_invoke_update_header_state_3; } case kMatchPause: { return s_n_llhttp__internal__n_header_value_connection_1; @@ -1826,7 +1871,7 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - goto s_n_llhttp__internal__n_invoke_update_header_state_5; + goto s_n_llhttp__internal__n_invoke_update_header_state_6; } case kMatchPause: { return s_n_llhttp__internal__n_header_value_connection_2; @@ -1850,7 +1895,7 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - goto s_n_llhttp__internal__n_invoke_update_header_state_6; + goto s_n_llhttp__internal__n_invoke_update_header_state_7; } case kMatchPause: { return s_n_llhttp__internal__n_header_value_connection_3; @@ -1895,8 +1940,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_25: - s_n_llhttp__internal__n_error_25: { + case s_n_llhttp__internal__n_error_26: + s_n_llhttp__internal__n_error_26: { state->error = 0xb; state->reason = "Content-Length overflow"; state->error_pos = (const char*) p; @@ -1905,8 +1950,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_26: - s_n_llhttp__internal__n_error_26: { + case s_n_llhttp__internal__n_error_27: + s_n_llhttp__internal__n_error_27: { state->error = 0xb; state->reason = "Invalid character in Content-Length"; state->error_pos = (const char*) p; @@ -1932,7 +1977,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_value_content_length_ws; } default: { - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_5; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_6; } } /* UNREACHABLE */; @@ -2001,26 +2046,23 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_header_value_te_chunked_last: - s_n_llhttp__internal__n_header_value_te_chunked_last: { - if (p == endp) { - return s_n_llhttp__internal__n_header_value_te_chunked_last; - } - switch (*p) { - case 10: { - goto s_n_llhttp__internal__n_invoke_update_header_state_7; - } - case 13: { - goto s_n_llhttp__internal__n_invoke_update_header_state_7; - } - case ' ': { - p++; - goto s_n_llhttp__internal__n_header_value_te_chunked_last; - } - default: { - goto s_n_llhttp__internal__n_header_value_te_chunked; - } - } + case s_n_llhttp__internal__n_error_29: + s_n_llhttp__internal__n_error_29: { + state->error = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + case s_n_llhttp__internal__n_error_28: + s_n_llhttp__internal__n_error_28: { + state->error = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; /* UNREACHABLE */; abort(); } @@ -2137,8 +2179,34 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_value_te_token_ows; } default: { + goto s_n_llhttp__internal__n_invoke_update_header_state_9; + } + } + /* UNREACHABLE */; + abort(); + } + case s_n_llhttp__internal__n_header_value_te_chunked_last: + s_n_llhttp__internal__n_header_value_te_chunked_last: { + if (p == endp) { + return s_n_llhttp__internal__n_header_value_te_chunked_last; + } + switch (*p) { + case 10: { + goto s_n_llhttp__internal__n_invoke_update_header_state_8; + } + case 13: { goto s_n_llhttp__internal__n_invoke_update_header_state_8; } + case ' ': { + p++; + goto s_n_llhttp__internal__n_header_value_te_chunked_last; + } + case ',': { + goto s_n_llhttp__internal__n_invoke_load_type_1; + } + default: { + goto s_n_llhttp__internal__n_header_value_te_token; + } } /* UNREACHABLE */; abort(); @@ -2190,7 +2258,7 @@ static llparse_state_t llhttp__internal__run( } case 10: { p++; - goto s_n_llhttp__internal__n_header_value_discard_lws; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_3; } case 13: { p++; @@ -2226,7 +2294,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_llhttp__on_header_field_2; } default: { - goto s_n_llhttp__internal__n_error_27; + goto s_n_llhttp__internal__n_error_30; } } /* UNREACHABLE */; @@ -2316,7 +2384,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_llhttp__on_header_field_1; } default: { - goto s_n_llhttp__internal__n_invoke_update_header_state_9; + goto s_n_llhttp__internal__n_invoke_update_header_state_10; } } /* UNREACHABLE */; @@ -2341,7 +2409,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -2366,7 +2434,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_4; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -2387,7 +2455,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_field_4; } default: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -2411,7 +2479,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_1; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -2436,7 +2504,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_5; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -2461,7 +2529,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_6; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -2486,7 +2554,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_7; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -2515,7 +2583,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_field_7; } default: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -2606,7 +2674,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_to_http_09; } default: { - goto s_n_llhttp__internal__n_error_28; + goto s_n_llhttp__internal__n_error_31; } } /* UNREACHABLE */; @@ -2631,7 +2699,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_skip_lf_to_http09_1; } default: { - goto s_n_llhttp__internal__n_error_28; + goto s_n_llhttp__internal__n_error_31; } } /* UNREACHABLE */; @@ -2649,13 +2717,13 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - goto s_n_llhttp__internal__n_error_31; + goto s_n_llhttp__internal__n_error_36; } case kMatchPause: { return s_n_llhttp__internal__n_req_pri_upgrade; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_32; + goto s_n_llhttp__internal__n_error_37; } } /* UNREACHABLE */; @@ -2672,7 +2740,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_field_start; } default: { - goto s_n_llhttp__internal__n_error_30; + goto s_n_llhttp__internal__n_error_35; } } /* UNREACHABLE */; @@ -2693,7 +2761,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_http_complete_1; } default: { - goto s_n_llhttp__internal__n_error_30; + goto s_n_llhttp__internal__n_error_35; } } /* UNREACHABLE */; @@ -2756,7 +2824,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_http_minor; } default: { - goto s_n_llhttp__internal__n_error_33; + goto s_n_llhttp__internal__n_error_40; } } /* UNREACHABLE */; @@ -2773,7 +2841,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_http_minor; } default: { - goto s_n_llhttp__internal__n_error_34; + goto s_n_llhttp__internal__n_error_41; } } /* UNREACHABLE */; @@ -2836,7 +2904,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_http_major; } default: { - goto s_n_llhttp__internal__n_error_35; + goto s_n_llhttp__internal__n_error_42; } } /* UNREACHABLE */; @@ -2860,7 +2928,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_1; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_38; + goto s_n_llhttp__internal__n_error_45; } } /* UNREACHABLE */; @@ -2884,7 +2952,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_2; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_38; + goto s_n_llhttp__internal__n_error_45; } } /* UNREACHABLE */; @@ -2908,7 +2976,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_38; + goto s_n_llhttp__internal__n_error_45; } } /* UNREACHABLE */; @@ -2937,7 +3005,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_http_start_3; } default: { - goto s_n_llhttp__internal__n_error_38; + goto s_n_llhttp__internal__n_error_45; } } /* UNREACHABLE */; @@ -3028,7 +3096,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_fragment; } default: { - goto s_n_llhttp__internal__n_error_39; + goto s_n_llhttp__internal__n_error_46; } } /* UNREACHABLE */; @@ -3089,7 +3157,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_stub_query_3; } default: { - goto s_n_llhttp__internal__n_error_40; + goto s_n_llhttp__internal__n_error_47; } } /* UNREACHABLE */; @@ -3127,7 +3195,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_query; } default: { - goto s_n_llhttp__internal__n_error_41; + goto s_n_llhttp__internal__n_error_48; } } /* UNREACHABLE */; @@ -3252,10 +3320,10 @@ static llparse_state_t llhttp__internal__run( } case 8: { p++; - goto s_n_llhttp__internal__n_error_42; + goto s_n_llhttp__internal__n_error_49; } default: { - goto s_n_llhttp__internal__n_error_43; + goto s_n_llhttp__internal__n_error_50; } } /* UNREACHABLE */; @@ -3314,7 +3382,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_server_with_at; } default: { - goto s_n_llhttp__internal__n_error_44; + goto s_n_llhttp__internal__n_error_51; } } /* UNREACHABLE */; @@ -3331,7 +3399,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_server; } default: { - goto s_n_llhttp__internal__n_error_46; + goto s_n_llhttp__internal__n_error_53; } } /* UNREACHABLE */; @@ -3349,7 +3417,7 @@ static llparse_state_t llhttp__internal__run( } case 10: { p++; - goto s_n_llhttp__internal__n_error_45; + goto s_n_llhttp__internal__n_error_52; } case 12: { p++; @@ -3357,18 +3425,18 @@ static llparse_state_t llhttp__internal__run( } case 13: { p++; - goto s_n_llhttp__internal__n_error_45; + goto s_n_llhttp__internal__n_error_52; } case ' ': { p++; - goto s_n_llhttp__internal__n_error_45; + goto s_n_llhttp__internal__n_error_52; } case '/': { p++; goto s_n_llhttp__internal__n_url_schema_delim_1; } default: { - goto s_n_llhttp__internal__n_error_46; + goto s_n_llhttp__internal__n_error_53; } } /* UNREACHABLE */; @@ -3414,7 +3482,7 @@ static llparse_state_t llhttp__internal__run( } case 2: { p++; - goto s_n_llhttp__internal__n_error_45; + goto s_n_llhttp__internal__n_error_52; } case 3: { goto s_n_llhttp__internal__n_span_end_stub_schema; @@ -3424,7 +3492,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_schema; } default: { - goto s_n_llhttp__internal__n_error_47; + goto s_n_llhttp__internal__n_error_54; } } /* UNREACHABLE */; @@ -3460,7 +3528,7 @@ static llparse_state_t llhttp__internal__run( } case 2: { p++; - goto s_n_llhttp__internal__n_error_45; + goto s_n_llhttp__internal__n_error_52; } case 3: { goto s_n_llhttp__internal__n_span_start_stub_path_2; @@ -3469,7 +3537,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_schema; } default: { - goto s_n_llhttp__internal__n_error_48; + goto s_n_llhttp__internal__n_error_55; } } /* UNREACHABLE */; @@ -3567,7 +3635,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_spaces_before_url; } default: { - goto s_n_llhttp__internal__n_error_49; + goto s_n_llhttp__internal__n_error_56; } } /* UNREACHABLE */; @@ -3585,7 +3653,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3610,7 +3678,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3631,7 +3699,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_3; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3656,7 +3724,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_4; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3681,7 +3749,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_6; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3706,7 +3774,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_8; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3724,7 +3792,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3745,7 +3813,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_9; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3766,7 +3834,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_7; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3791,7 +3859,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_12; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3816,7 +3884,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_13; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3837,7 +3905,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_13; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3854,7 +3922,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_11; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3879,7 +3947,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_14; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3904,7 +3972,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_17; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3946,7 +4014,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_15; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3971,7 +4039,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_18; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -3996,7 +4064,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_20; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4021,7 +4089,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_21; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4042,7 +4110,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_21; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4067,7 +4135,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_23; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4092,7 +4160,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_24; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4117,7 +4185,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_26; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4142,7 +4210,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_28; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4160,7 +4228,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4181,7 +4249,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_29; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4202,7 +4270,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_27; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4227,7 +4295,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_30; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4256,7 +4324,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_30; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4281,7 +4349,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_31; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4306,7 +4374,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_32; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4331,7 +4399,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_35; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4356,7 +4424,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_36; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4377,7 +4445,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_36; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4402,7 +4470,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_37; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4427,7 +4495,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_38; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4452,7 +4520,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_42; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4477,7 +4545,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_43; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4498,7 +4566,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_43; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4515,7 +4583,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_41; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4537,7 +4605,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_40; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4562,7 +4630,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_45; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4584,7 +4652,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4617,7 +4685,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_44; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4642,7 +4710,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_48; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4667,7 +4735,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_49; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4692,7 +4760,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_50; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4717,7 +4785,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_51; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4746,7 +4814,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_51; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4763,7 +4831,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_47; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4788,7 +4856,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_54; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4806,7 +4874,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4831,7 +4899,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_57; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4852,7 +4920,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_57; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4873,7 +4941,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_55; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4898,7 +4966,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_58; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4923,7 +4991,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_59; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4948,7 +5016,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_59; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4973,7 +5041,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_61; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -4998,7 +5066,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_62; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -5019,7 +5087,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_62; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -5044,7 +5112,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_65; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -5069,7 +5137,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_67; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -5094,7 +5162,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_68; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -5115,7 +5183,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_68; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -5140,7 +5208,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_69; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -5165,7 +5233,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_69; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -5182,7 +5250,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_64; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -5259,7 +5327,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_63; } default: { - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_69; } } /* UNREACHABLE */; @@ -5285,7 +5353,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_llhttp__on_status_complete; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_60; } } /* UNREACHABLE */; @@ -5360,7 +5428,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_res_status_start; } default: { - goto s_n_llhttp__internal__n_error_52; + goto s_n_llhttp__internal__n_error_61; } } /* UNREACHABLE */; @@ -5440,7 +5508,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_update_status_code; } default: { - goto s_n_llhttp__internal__n_error_53; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -5503,7 +5571,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_http_minor_1; } default: { - goto s_n_llhttp__internal__n_error_54; + goto s_n_llhttp__internal__n_error_65; } } /* UNREACHABLE */; @@ -5520,7 +5588,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_res_http_minor; } default: { - goto s_n_llhttp__internal__n_error_55; + goto s_n_llhttp__internal__n_error_66; } } /* UNREACHABLE */; @@ -5583,7 +5651,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_http_major_1; } default: { - goto s_n_llhttp__internal__n_error_56; + goto s_n_llhttp__internal__n_error_67; } } /* UNREACHABLE */; @@ -5607,7 +5675,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_res; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_59; + goto s_n_llhttp__internal__n_error_70; } } /* UNREACHABLE */; @@ -5632,7 +5700,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_or_res_method_2; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_57; + goto s_n_llhttp__internal__n_error_68; } } /* UNREACHABLE */; @@ -5656,7 +5724,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_or_res_method_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_57; + goto s_n_llhttp__internal__n_error_68; } } /* UNREACHABLE */; @@ -5677,7 +5745,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_or_res_method_3; } default: { - goto s_n_llhttp__internal__n_error_57; + goto s_n_llhttp__internal__n_error_68; } } /* UNREACHABLE */; @@ -5694,7 +5762,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_or_res_method_1; } default: { - goto s_n_llhttp__internal__n_error_57; + goto s_n_llhttp__internal__n_error_68; } } /* UNREACHABLE */; @@ -5763,7 +5831,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_45: { + s_n_llhttp__internal__n_error_52: { state->error = 0x7; state->reason = "Invalid characters in url"; state->error_pos = (const char*) p; @@ -6215,7 +6283,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_field: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_field(state, start, p); @@ -6240,7 +6308,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_20: { + s_n_llhttp__internal__n_error_21: { state->error = 0xb; state->reason = "Empty Content-Length"; state->error_pos = (const char*) p; @@ -6325,14 +6393,33 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_load_header_state: { switch (llhttp__internal__c_load_header_state(state, p, endp)) { case 2: - goto s_n_llhttp__internal__n_error_20; + goto s_n_llhttp__internal__n_error_21; default: goto s_n_llhttp__internal__n_invoke_load_header_state_1; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_21: { + s_n_llhttp__internal__n_error_20: { + state->error = 0xa; + state->reason = "Invalid header value char"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_3: { + switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_header_value_discard_lws; + default: + goto s_n_llhttp__internal__n_error_20; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_22: { state->error = 0x2; state->reason = "Expected LF after CR"; state->error_pos = (const char*) p; @@ -6342,6 +6429,24 @@ static llparse_state_t llhttp__internal__run( abort(); } s_n_llhttp__internal__n_invoke_update_header_state_1: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { + default: + goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_header_state_3: { + switch (llhttp__internal__c_load_header_state(state, p, endp)) { + case 8: + goto s_n_llhttp__internal__n_invoke_update_header_state_1; + default: + goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_update_header_state_2: { switch (llhttp__internal__c_update_header_state(state, p, endp)) { default: goto s_n_llhttp__internal__n_invoke_llhttp__on_header_value_complete; @@ -6352,7 +6457,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_7: { switch (llhttp__internal__c_or_flags_3(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_1; + goto s_n_llhttp__internal__n_invoke_update_header_state_2; } /* UNREACHABLE */; abort(); @@ -6360,7 +6465,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_8: { switch (llhttp__internal__c_or_flags_4(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_1; + goto s_n_llhttp__internal__n_invoke_update_header_state_2; } /* UNREACHABLE */; abort(); @@ -6368,7 +6473,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_9: { switch (llhttp__internal__c_or_flags_5(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_1; + goto s_n_llhttp__internal__n_invoke_update_header_state_2; } /* UNREACHABLE */; abort(); @@ -6381,7 +6486,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_load_header_state_3: { + s_n_llhttp__internal__n_invoke_load_header_state_4: { switch (llhttp__internal__c_load_header_state(state, p, endp)) { case 5: goto s_n_llhttp__internal__n_invoke_or_flags_7; @@ -6397,7 +6502,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_22: { + s_n_llhttp__internal__n_error_23: { state->error = 0x3; state->reason = "Missing expected LF after header value"; state->error_pos = (const char*) p; @@ -6415,15 +6520,16 @@ static llparse_state_t llhttp__internal__run( err = llhttp__on_header_value(state, start, p); if (err != 0) { state->error = err; - state->error_pos = (const char*) p; + state->error_pos = (const char*) (p + 1); state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_header_value_almost_done; return s_error; } + p++; goto s_n_llhttp__internal__n_header_value_almost_done; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2: { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_3: { const unsigned char* start; int err; @@ -6432,16 +6538,15 @@ static llparse_state_t llhttp__internal__run( err = llhttp__on_header_value(state, start, p); if (err != 0) { state->error = err; - state->error_pos = (const char*) (p + 1); + state->error_pos = (const char*) p; state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_header_value_almost_done; return s_error; } - p++; goto s_n_llhttp__internal__n_header_value_almost_done; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_span_end_llhttp__on_header_value_3: { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_4: { const unsigned char* start; int err; @@ -6459,26 +6564,34 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_23: { - state->error = 0xa; - state->reason = "Invalid header value char"; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_error; - return s_error; + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2: { + const unsigned char* start; + int err; + + start = state->_span_pos0; + state->_span_pos0 = NULL; + err = llhttp__on_header_value(state, start, p); + if (err != 0) { + state->error = err; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_24; + return s_error; + } + goto s_n_llhttp__internal__n_error_24; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_3: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_4: { switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_header_value_lenient; default: - goto s_n_llhttp__internal__n_error_23; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_3: { + s_n_llhttp__internal__n_invoke_update_header_state_4: { switch (llhttp__internal__c_update_header_state(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_connection; @@ -6489,7 +6602,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_11: { switch (llhttp__internal__c_or_flags_3(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_3; + goto s_n_llhttp__internal__n_invoke_update_header_state_4; } /* UNREACHABLE */; abort(); @@ -6497,7 +6610,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_12: { switch (llhttp__internal__c_or_flags_4(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_3; + goto s_n_llhttp__internal__n_invoke_update_header_state_4; } /* UNREACHABLE */; abort(); @@ -6505,7 +6618,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_13: { switch (llhttp__internal__c_or_flags_5(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_3; + goto s_n_llhttp__internal__n_invoke_update_header_state_4; } /* UNREACHABLE */; abort(); @@ -6518,7 +6631,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_load_header_state_4: { + s_n_llhttp__internal__n_invoke_load_header_state_5: { switch (llhttp__internal__c_load_header_state(state, p, endp)) { case 5: goto s_n_llhttp__internal__n_invoke_or_flags_11; @@ -6534,39 +6647,39 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_4: { - switch (llhttp__internal__c_update_header_state_4(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_5: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_connection_token; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_2: { - switch (llhttp__internal__c_update_header_state_2(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_3: { + switch (llhttp__internal__c_update_header_state_3(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_connection_ws; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_5: { - switch (llhttp__internal__c_update_header_state_5(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_6: { + switch (llhttp__internal__c_update_header_state_6(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_connection_ws; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_6: { - switch (llhttp__internal__c_update_header_state_6(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_7: { + switch (llhttp__internal__c_update_header_state_7(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_connection_ws; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_span_end_llhttp__on_header_value_4: { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_5: { const unsigned char* start; int err; @@ -6576,17 +6689,17 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_25; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_26; return s_error; } - goto s_n_llhttp__internal__n_error_25; + goto s_n_llhttp__internal__n_error_26; /* UNREACHABLE */; abort(); } s_n_llhttp__internal__n_invoke_mul_add_content_length_1: { switch (llhttp__internal__c_mul_add_content_length_1(state, p, endp, match)) { case 1: - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_4; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_5; default: goto s_n_llhttp__internal__n_header_value_content_length; } @@ -6601,7 +6714,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_span_end_llhttp__on_header_value_5: { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_6: { const unsigned char* start; int err; @@ -6611,14 +6724,14 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_26; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_27; return s_error; } - goto s_n_llhttp__internal__n_error_26; + goto s_n_llhttp__internal__n_error_27; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_24: { + s_n_llhttp__internal__n_error_25: { state->error = 0x4; state->reason = "Duplicate Content-Length"; state->error_pos = (const char*) p; @@ -6632,21 +6745,77 @@ static llparse_state_t llhttp__internal__run( case 0: goto s_n_llhttp__internal__n_header_value_content_length; default: - goto s_n_llhttp__internal__n_error_24; + goto s_n_llhttp__internal__n_error_25; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_7: { - switch (llhttp__internal__c_update_header_state_7(state, p, endp)) { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8: { + const unsigned char* start; + int err; + + start = state->_span_pos0; + state->_span_pos0 = NULL; + err = llhttp__on_header_value(state, start, p); + if (err != 0) { + state->error = err; + state->error_pos = (const char*) (p + 1); + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_29; + return s_error; + } + p++; + goto s_n_llhttp__internal__n_error_29; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_update_header_state_8: { + switch (llhttp__internal__c_update_header_state_8(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_otherwise; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_8: { - switch (llhttp__internal__c_update_header_state_4(state, p, endp)) { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_7: { + const unsigned char* start; + int err; + + start = state->_span_pos0; + state->_span_pos0 = NULL; + err = llhttp__on_header_value(state, start, p); + if (err != 0) { + state->error = err; + state->error_pos = (const char*) (p + 1); + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_28; + return s_error; + } + p++; + goto s_n_llhttp__internal__n_error_28; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_5: { + switch (llhttp__internal__c_test_lenient_flags_5(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_7; + default: + goto s_n_llhttp__internal__n_header_value_te_chunked; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_type_1: { + switch (llhttp__internal__c_load_type(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_5; + default: + goto s_n_llhttp__internal__n_header_value_te_chunked; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_update_header_state_9: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value; } @@ -6661,6 +6830,34 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } + s_n_llhttp__internal__n_invoke_or_flags_17: { + switch (llhttp__internal__c_or_flags_16(state, p, endp)) { + default: + goto s_n_llhttp__internal__n_invoke_and_flags; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_6: { + switch (llhttp__internal__c_test_lenient_flags_5(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8; + default: + goto s_n_llhttp__internal__n_invoke_or_flags_17; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_type_2: { + switch (llhttp__internal__c_load_type(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_6; + default: + goto s_n_llhttp__internal__n_invoke_or_flags_17; + } + /* UNREACHABLE */; + abort(); + } s_n_llhttp__internal__n_invoke_or_flags_16: { switch (llhttp__internal__c_or_flags_16(state, p, endp)) { default: @@ -6669,10 +6866,20 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_or_flags_17: { - switch (llhttp__internal__c_or_flags_17(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_flags_3: { + switch (llhttp__internal__c_test_flags_3(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_load_type_2; + default: + goto s_n_llhttp__internal__n_invoke_or_flags_16; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_or_flags_18: { + switch (llhttp__internal__c_or_flags_18(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_8; + goto s_n_llhttp__internal__n_invoke_update_header_state_9; } /* UNREACHABLE */; abort(); @@ -6684,9 +6891,9 @@ static llparse_state_t llhttp__internal__run( case 2: goto s_n_llhttp__internal__n_invoke_test_flags_2; case 3: - goto s_n_llhttp__internal__n_invoke_or_flags_16; + goto s_n_llhttp__internal__n_invoke_test_flags_3; case 4: - goto s_n_llhttp__internal__n_invoke_or_flags_17; + goto s_n_llhttp__internal__n_invoke_or_flags_18; default: goto s_n_llhttp__internal__n_header_value; } @@ -6729,7 +6936,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_27: { + s_n_llhttp__internal__n_error_30: { state->error = 0xa; state->reason = "Invalid header token"; state->error_pos = (const char*) p; @@ -6738,8 +6945,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_9: { - switch (llhttp__internal__c_update_header_state_4(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_10: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_field_general; } @@ -6754,8 +6961,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_10: { - switch (llhttp__internal__c_update_header_state_4(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_11: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_field_general; } @@ -6803,7 +7010,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_28: { + s_n_llhttp__internal__n_error_31: { state->error = 0x7; state->reason = "Expected CRLF"; state->error_pos = (const char*) p; @@ -6829,7 +7036,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_31: { + s_n_llhttp__internal__n_error_36: { state->error = 0x17; state->reason = "Pause on PRI/Upgrade"; state->error_pos = (const char*) p; @@ -6838,7 +7045,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_32: { + s_n_llhttp__internal__n_error_37: { state->error = 0x9; state->reason = "Expected HTTP/2 Connection Preface"; state->error_pos = (const char*) p; @@ -6847,7 +7054,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_30: { + s_n_llhttp__internal__n_error_35: { state->error = 0x9; state->reason = "Expected CRLF after version"; state->error_pos = (const char*) p; @@ -6866,78 +7073,170 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_store_http_minor: { - switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { - default: - goto s_n_llhttp__internal__n_invoke_load_method_1; - } - /* UNREACHABLE */; - abort(); - } - s_n_llhttp__internal__n_error_33: { + s_n_llhttp__internal__n_error_34: { state->error = 0x9; - state->reason = "Invalid minor version"; + state->reason = "Invalid HTTP version"; state->error_pos = (const char*) p; state->_current = (void*) (intptr_t) s_error; return s_error; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_34: { + s_n_llhttp__internal__n_invoke_load_http_minor: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 9: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: + goto s_n_llhttp__internal__n_error_34; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_38: { state->error = 0x9; - state->reason = "Expected dot"; + state->reason = "Invalid HTTP version"; state->error_pos = (const char*) p; state->_current = (void*) (intptr_t) s_error; return s_error; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_store_http_major: { - switch (llhttp__internal__c_store_http_major(state, p, endp, match)) { + s_n_llhttp__internal__n_invoke_load_http_minor_1: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_invoke_load_method_1; + case 1: + goto s_n_llhttp__internal__n_invoke_load_method_1; default: - goto s_n_llhttp__internal__n_req_http_dot; + goto s_n_llhttp__internal__n_error_38; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_35: { + s_n_llhttp__internal__n_error_39: { state->error = 0x9; - state->reason = "Invalid major version"; + state->reason = "Invalid HTTP version"; state->error_pos = (const char*) p; state->_current = (void*) (intptr_t) s_error; return s_error; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_29: { - state->error = 0x8; - state->reason = "Invalid method for HTTP/x.x request"; + s_n_llhttp__internal__n_invoke_load_http_minor_2: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: + goto s_n_llhttp__internal__n_error_39; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_33: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; state->error_pos = (const char*) p; state->_current = (void*) (intptr_t) s_error; return s_error; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_load_method: { - switch (llhttp__internal__c_load_method(state, p, endp)) { + s_n_llhttp__internal__n_invoke_load_http_major: { + switch (llhttp__internal__c_load_http_major(state, p, endp)) { case 0: - goto s_n_llhttp__internal__n_req_http_major; + goto s_n_llhttp__internal__n_invoke_load_http_minor; case 1: - goto s_n_llhttp__internal__n_req_http_major; + goto s_n_llhttp__internal__n_invoke_load_http_minor_1; case 2: - goto s_n_llhttp__internal__n_req_http_major; - case 3: - goto s_n_llhttp__internal__n_req_http_major; - case 4: - goto s_n_llhttp__internal__n_req_http_major; - case 5: - goto s_n_llhttp__internal__n_req_http_major; - case 6: - goto s_n_llhttp__internal__n_req_http_major; - case 7: - goto s_n_llhttp__internal__n_req_http_major; - case 8: - goto s_n_llhttp__internal__n_req_http_major; + goto s_n_llhttp__internal__n_invoke_load_http_minor_2; + default: + goto s_n_llhttp__internal__n_error_33; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_7: { + switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: + goto s_n_llhttp__internal__n_invoke_load_http_major; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_store_http_minor: { + switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { + default: + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_7; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_40: { + state->error = 0x9; + state->reason = "Invalid minor version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_41: { + state->error = 0x9; + state->reason = "Expected dot"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_store_http_major: { + switch (llhttp__internal__c_store_http_major(state, p, endp, match)) { + default: + goto s_n_llhttp__internal__n_req_http_dot; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_42: { + state->error = 0x9; + state->reason = "Invalid major version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_32: { + state->error = 0x8; + state->reason = "Invalid method for HTTP/x.x request"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_method: { + switch (llhttp__internal__c_load_method(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_req_http_major; + case 1: + goto s_n_llhttp__internal__n_req_http_major; + case 2: + goto s_n_llhttp__internal__n_req_http_major; + case 3: + goto s_n_llhttp__internal__n_req_http_major; + case 4: + goto s_n_llhttp__internal__n_req_http_major; + case 5: + goto s_n_llhttp__internal__n_req_http_major; + case 6: + goto s_n_llhttp__internal__n_req_http_major; + case 7: + goto s_n_llhttp__internal__n_req_http_major; + case 8: + goto s_n_llhttp__internal__n_req_http_major; case 9: goto s_n_llhttp__internal__n_req_http_major; case 10: @@ -6991,12 +7290,12 @@ static llparse_state_t llhttp__internal__run( case 34: goto s_n_llhttp__internal__n_req_http_major; default: - goto s_n_llhttp__internal__n_error_29; + goto s_n_llhttp__internal__n_error_32; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_38: { + s_n_llhttp__internal__n_error_45: { state->error = 0x8; state->reason = "Expected HTTP/"; state->error_pos = (const char*) p; @@ -7005,7 +7304,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_36: { + s_n_llhttp__internal__n_error_43: { state->error = 0x8; state->reason = "Expected SOURCE method for ICE/x.x request"; state->error_pos = (const char*) p; @@ -7019,12 +7318,12 @@ static llparse_state_t llhttp__internal__run( case 33: goto s_n_llhttp__internal__n_req_http_major; default: - goto s_n_llhttp__internal__n_error_36; + goto s_n_llhttp__internal__n_error_43; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_37: { + s_n_llhttp__internal__n_error_44: { state->error = 0x8; state->reason = "Invalid method for RTSP/x.x request"; state->error_pos = (const char*) p; @@ -7064,7 +7363,7 @@ static llparse_state_t llhttp__internal__run( case 45: goto s_n_llhttp__internal__n_req_http_major; default: - goto s_n_llhttp__internal__n_error_37; + goto s_n_llhttp__internal__n_error_44; } /* UNREACHABLE */; abort(); @@ -7145,7 +7444,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_39: { + s_n_llhttp__internal__n_error_46: { state->error = 0x7; state->reason = "Invalid char in url fragment start"; state->error_pos = (const char*) p; @@ -7205,7 +7504,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_40: { + s_n_llhttp__internal__n_error_47: { state->error = 0x7; state->reason = "Invalid char in url query"; state->error_pos = (const char*) p; @@ -7214,7 +7513,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_41: { + s_n_llhttp__internal__n_error_48: { state->error = 0x7; state->reason = "Invalid char in url path"; state->error_pos = (const char*) p; @@ -7325,7 +7624,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_42: { + s_n_llhttp__internal__n_error_49: { state->error = 0x7; state->reason = "Double @ in url"; state->error_pos = (const char*) p; @@ -7334,7 +7633,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_43: { + s_n_llhttp__internal__n_error_50: { state->error = 0x7; state->reason = "Unexpected char in url server"; state->error_pos = (const char*) p; @@ -7343,7 +7642,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_44: { + s_n_llhttp__internal__n_error_51: { state->error = 0x7; state->reason = "Unexpected char in url server"; state->error_pos = (const char*) p; @@ -7352,7 +7651,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_46: { + s_n_llhttp__internal__n_error_53: { state->error = 0x7; state->reason = "Unexpected char in url schema"; state->error_pos = (const char*) p; @@ -7361,7 +7660,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_47: { + s_n_llhttp__internal__n_error_54: { state->error = 0x7; state->reason = "Unexpected char in url schema"; state->error_pos = (const char*) p; @@ -7370,7 +7669,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_48: { + s_n_llhttp__internal__n_error_55: { state->error = 0x7; state->reason = "Unexpected start char in url"; state->error_pos = (const char*) p; @@ -7389,7 +7688,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_49: { + s_n_llhttp__internal__n_error_56: { state->error = 0x6; state->reason = "Expected space after method"; state->error_pos = (const char*) p; @@ -7406,7 +7705,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_58: { + s_n_llhttp__internal__n_error_69: { state->error = 0x6; state->reason = "Invalid method encountered"; state->error_pos = (const char*) p; @@ -7415,7 +7714,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_50: { + s_n_llhttp__internal__n_error_59: { state->error = 0xd; state->reason = "Response overflow"; state->error_pos = (const char*) p; @@ -7427,14 +7726,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_mul_add_status_code: { switch (llhttp__internal__c_mul_add_status_code(state, p, endp, match)) { case 1: - goto s_n_llhttp__internal__n_error_50; + goto s_n_llhttp__internal__n_error_59; default: goto s_n_llhttp__internal__n_res_status_code; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_51: { + s_n_llhttp__internal__n_error_60: { state->error = 0x2; state->reason = "Expected LF after CR"; state->error_pos = (const char*) p; @@ -7479,7 +7778,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_52: { + s_n_llhttp__internal__n_error_61: { state->error = 0xd; state->reason = "Invalid response status"; state->error_pos = (const char*) p; @@ -7496,7 +7795,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_53: { + s_n_llhttp__internal__n_error_62: { state->error = 0x9; state->reason = "Expected space after version"; state->error_pos = (const char*) p; @@ -7505,15 +7804,107 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } + s_n_llhttp__internal__n_error_58: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_minor_3: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 9: + goto s_n_llhttp__internal__n_res_http_end; + default: + goto s_n_llhttp__internal__n_error_58; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_63: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_minor_4: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_res_http_end; + case 1: + goto s_n_llhttp__internal__n_res_http_end; + default: + goto s_n_llhttp__internal__n_error_63; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_64: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_minor_5: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_res_http_end; + default: + goto s_n_llhttp__internal__n_error_64; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_57: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_major_1: { + switch (llhttp__internal__c_load_http_major(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_invoke_load_http_minor_3; + case 1: + goto s_n_llhttp__internal__n_invoke_load_http_minor_4; + case 2: + goto s_n_llhttp__internal__n_invoke_load_http_minor_5; + default: + goto s_n_llhttp__internal__n_error_57; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_8: { + switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_res_http_end; + default: + goto s_n_llhttp__internal__n_invoke_load_http_major_1; + } + /* UNREACHABLE */; + abort(); + } s_n_llhttp__internal__n_invoke_store_http_minor_1: { switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { default: - goto s_n_llhttp__internal__n_res_http_end; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_8; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_54: { + s_n_llhttp__internal__n_error_65: { state->error = 0x9; state->reason = "Invalid minor version"; state->error_pos = (const char*) p; @@ -7522,7 +7913,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_55: { + s_n_llhttp__internal__n_error_66: { state->error = 0x9; state->reason = "Expected dot"; state->error_pos = (const char*) p; @@ -7539,7 +7930,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_56: { + s_n_llhttp__internal__n_error_67: { state->error = 0x9; state->reason = "Invalid major version"; state->error_pos = (const char*) p; @@ -7548,7 +7939,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_59: { + s_n_llhttp__internal__n_error_70: { state->error = 0x8; state->reason = "Expected HTTP/"; state->error_pos = (const char*) p; @@ -7573,7 +7964,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_57: { + s_n_llhttp__internal__n_error_68: { state->error = 0x8; state->reason = "Invalid word encountered"; state->error_pos = (const char*) p; @@ -8040,6 +8431,7 @@ enum llparse_state_e { s_n_llhttp__internal__n_header_value_lws, s_n_llhttp__internal__n_header_value_almost_done, s_n_llhttp__internal__n_header_value_lenient, + s_n_llhttp__internal__n_error_18, s_n_llhttp__internal__n_header_value_otherwise, s_n_llhttp__internal__n_header_value_connection_token, s_n_llhttp__internal__n_header_value_connection_ws, @@ -8047,14 +8439,16 @@ enum llparse_state_e { s_n_llhttp__internal__n_header_value_connection_2, s_n_llhttp__internal__n_header_value_connection_3, s_n_llhttp__internal__n_header_value_connection, - s_n_llhttp__internal__n_error_19, s_n_llhttp__internal__n_error_20, + s_n_llhttp__internal__n_error_21, s_n_llhttp__internal__n_header_value_content_length_ws, s_n_llhttp__internal__n_header_value_content_length, - s_n_llhttp__internal__n_header_value_te_chunked_last, + s_n_llhttp__internal__n_error_23, + s_n_llhttp__internal__n_error_22, s_n_llhttp__internal__n_header_value_te_token_ows, s_n_llhttp__internal__n_header_value, s_n_llhttp__internal__n_header_value_te_token, + s_n_llhttp__internal__n_header_value_te_chunked_last, s_n_llhttp__internal__n_header_value_te_chunked, s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1, s_n_llhttp__internal__n_header_value_discard_ws, @@ -8486,7 +8880,7 @@ int llhttp__internal__c_or_flags_6( return 0; } -int llhttp__internal__c_update_header_state_2( +int llhttp__internal__c_update_header_state_3( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -8494,7 +8888,7 @@ int llhttp__internal__c_update_header_state_2( return 0; } -int llhttp__internal__c_update_header_state_4( +int llhttp__internal__c_update_header_state_1( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -8502,7 +8896,7 @@ int llhttp__internal__c_update_header_state_4( return 0; } -int llhttp__internal__c_update_header_state_5( +int llhttp__internal__c_update_header_state_6( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -8510,7 +8904,7 @@ int llhttp__internal__c_update_header_state_5( return 0; } -int llhttp__internal__c_update_header_state_6( +int llhttp__internal__c_update_header_state_7( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -8559,6 +8953,20 @@ int llhttp__internal__c_or_flags_15( return 0; } +int llhttp__internal__c_test_flags_3( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { + return (state->flags & 8) == 8; +} + +int llhttp__internal__c_test_lenient_flags_5( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { + return (state->lenient_flags & 8) == 8; +} + int llhttp__internal__c_or_flags_16( llhttp__internal_t* state, const unsigned char* p, @@ -8575,7 +8983,7 @@ int llhttp__internal__c_and_flags( return 0; } -int llhttp__internal__c_update_header_state_7( +int llhttp__internal__c_update_header_state_8( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -8583,7 +8991,7 @@ int llhttp__internal__c_update_header_state_7( return 0; } -int llhttp__internal__c_or_flags_17( +int llhttp__internal__c_or_flags_18( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -8616,6 +9024,27 @@ int llhttp__internal__c_store_http_minor( return 0; } +int llhttp__internal__c_test_lenient_flags_7( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { + return (state->lenient_flags & 16) == 16; +} + +int llhttp__internal__c_load_http_major( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { + return state->http_major; +} + +int llhttp__internal__c_load_http_minor( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { + return state->http_minor; +} + int llhttp__internal__c_update_status_code( llhttp__internal_t* state, const unsigned char* p, @@ -9295,13 +9724,13 @@ static llparse_state_t llhttp__internal__run( } switch (*p) { case 9: { - goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1; + goto s_n_llhttp__internal__n_invoke_load_header_state_3; } case ' ': { - goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1; + goto s_n_llhttp__internal__n_invoke_load_header_state_3; } default: { - goto s_n_llhttp__internal__n_invoke_load_header_state_3; + goto s_n_llhttp__internal__n_invoke_load_header_state_4; } } /* UNREACHABLE */; @@ -9318,7 +9747,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_value_lws; } default: { - goto s_n_llhttp__internal__n_error_16; + goto s_n_llhttp__internal__n_error_17; } } /* UNREACHABLE */; @@ -9331,10 +9760,10 @@ static llparse_state_t llhttp__internal__run( } switch (*p) { case 10: { - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_3; } case 13: { - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_3; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_4; } default: { p++; @@ -9344,20 +9773,27 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } + case s_n_llhttp__internal__n_error_18: + s_n_llhttp__internal__n_error_18: { + state->error = 0xa; + state->reason = "Invalid header value char"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } case s_n_llhttp__internal__n_header_value_otherwise: s_n_llhttp__internal__n_header_value_otherwise: { if (p == endp) { return s_n_llhttp__internal__n_header_value_otherwise; } switch (*p) { - case 10: { - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1; - } case 13: { - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1; } default: { - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_3; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_4; } } /* UNREACHABLE */; @@ -9420,10 +9856,10 @@ static llparse_state_t llhttp__internal__run( } case ',': { p++; - goto s_n_llhttp__internal__n_invoke_load_header_state_4; + goto s_n_llhttp__internal__n_invoke_load_header_state_5; } default: { - goto s_n_llhttp__internal__n_invoke_update_header_state_4; + goto s_n_llhttp__internal__n_invoke_update_header_state_5; } } /* UNREACHABLE */; @@ -9441,7 +9877,7 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - goto s_n_llhttp__internal__n_invoke_update_header_state_2; + goto s_n_llhttp__internal__n_invoke_update_header_state_3; } case kMatchPause: { return s_n_llhttp__internal__n_header_value_connection_1; @@ -9465,7 +9901,7 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - goto s_n_llhttp__internal__n_invoke_update_header_state_5; + goto s_n_llhttp__internal__n_invoke_update_header_state_6; } case kMatchPause: { return s_n_llhttp__internal__n_header_value_connection_2; @@ -9489,7 +9925,7 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - goto s_n_llhttp__internal__n_invoke_update_header_state_6; + goto s_n_llhttp__internal__n_invoke_update_header_state_7; } case kMatchPause: { return s_n_llhttp__internal__n_header_value_connection_3; @@ -9534,8 +9970,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_19: - s_n_llhttp__internal__n_error_19: { + case s_n_llhttp__internal__n_error_20: + s_n_llhttp__internal__n_error_20: { state->error = 0xb; state->reason = "Content-Length overflow"; state->error_pos = (const char*) p; @@ -9544,8 +9980,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_20: - s_n_llhttp__internal__n_error_20: { + case s_n_llhttp__internal__n_error_21: + s_n_llhttp__internal__n_error_21: { state->error = 0xb; state->reason = "Invalid character in Content-Length"; state->error_pos = (const char*) p; @@ -9571,7 +10007,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_value_content_length_ws; } default: { - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_5; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_6; } } /* UNREACHABLE */; @@ -9640,26 +10076,23 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_header_value_te_chunked_last: - s_n_llhttp__internal__n_header_value_te_chunked_last: { - if (p == endp) { - return s_n_llhttp__internal__n_header_value_te_chunked_last; - } - switch (*p) { - case 10: { - goto s_n_llhttp__internal__n_invoke_update_header_state_7; - } - case 13: { - goto s_n_llhttp__internal__n_invoke_update_header_state_7; - } - case ' ': { - p++; - goto s_n_llhttp__internal__n_header_value_te_chunked_last; - } - default: { - goto s_n_llhttp__internal__n_header_value_te_chunked; - } - } + case s_n_llhttp__internal__n_error_23: + s_n_llhttp__internal__n_error_23: { + state->error = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + case s_n_llhttp__internal__n_error_22: + s_n_llhttp__internal__n_error_22: { + state->error = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; /* UNREACHABLE */; abort(); } @@ -9776,8 +10209,34 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_value_te_token_ows; } default: { + goto s_n_llhttp__internal__n_invoke_update_header_state_9; + } + } + /* UNREACHABLE */; + abort(); + } + case s_n_llhttp__internal__n_header_value_te_chunked_last: + s_n_llhttp__internal__n_header_value_te_chunked_last: { + if (p == endp) { + return s_n_llhttp__internal__n_header_value_te_chunked_last; + } + switch (*p) { + case 10: { + goto s_n_llhttp__internal__n_invoke_update_header_state_8; + } + case 13: { goto s_n_llhttp__internal__n_invoke_update_header_state_8; } + case ' ': { + p++; + goto s_n_llhttp__internal__n_header_value_te_chunked_last; + } + case ',': { + goto s_n_llhttp__internal__n_invoke_load_type_1; + } + default: { + goto s_n_llhttp__internal__n_header_value_te_token; + } } /* UNREACHABLE */; abort(); @@ -9829,7 +10288,7 @@ static llparse_state_t llhttp__internal__run( } case 10: { p++; - goto s_n_llhttp__internal__n_header_value_discard_lws; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_3; } case 13: { p++; @@ -9865,7 +10324,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_llhttp__on_header_field_2; } default: { - goto s_n_llhttp__internal__n_error_21; + goto s_n_llhttp__internal__n_error_24; } } /* UNREACHABLE */; @@ -9955,7 +10414,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_llhttp__on_header_field_1; } default: { - goto s_n_llhttp__internal__n_invoke_update_header_state_9; + goto s_n_llhttp__internal__n_invoke_update_header_state_10; } } /* UNREACHABLE */; @@ -9980,7 +10439,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -10005,7 +10464,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_4; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -10026,7 +10485,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_field_4; } default: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -10050,7 +10509,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_1; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -10075,7 +10534,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_5; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -10100,7 +10559,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_6; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -10125,7 +10584,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_header_field_7; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -10154,7 +10613,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_field_7; } default: { - goto s_n_llhttp__internal__n_invoke_update_header_state_10; + goto s_n_llhttp__internal__n_invoke_update_header_state_11; } } /* UNREACHABLE */; @@ -10219,7 +10678,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_url_skip_lf_to_http09; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_22; + goto s_n_llhttp__internal__n_error_25; } } /* UNREACHABLE */; @@ -10237,13 +10696,13 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - goto s_n_llhttp__internal__n_error_25; + goto s_n_llhttp__internal__n_error_30; } case kMatchPause: { return s_n_llhttp__internal__n_req_pri_upgrade; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_26; + goto s_n_llhttp__internal__n_error_31; } } /* UNREACHABLE */; @@ -10260,7 +10719,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_field_start; } default: { - goto s_n_llhttp__internal__n_error_24; + goto s_n_llhttp__internal__n_error_29; } } /* UNREACHABLE */; @@ -10281,7 +10740,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_http_complete_1; } default: { - goto s_n_llhttp__internal__n_error_24; + goto s_n_llhttp__internal__n_error_29; } } /* UNREACHABLE */; @@ -10344,7 +10803,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_http_minor; } default: { - goto s_n_llhttp__internal__n_error_27; + goto s_n_llhttp__internal__n_error_34; } } /* UNREACHABLE */; @@ -10361,7 +10820,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_http_minor; } default: { - goto s_n_llhttp__internal__n_error_28; + goto s_n_llhttp__internal__n_error_35; } } /* UNREACHABLE */; @@ -10424,7 +10883,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_http_major; } default: { - goto s_n_llhttp__internal__n_error_29; + goto s_n_llhttp__internal__n_error_36; } } /* UNREACHABLE */; @@ -10448,7 +10907,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_1; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_32; + goto s_n_llhttp__internal__n_error_39; } } /* UNREACHABLE */; @@ -10472,7 +10931,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_2; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_32; + goto s_n_llhttp__internal__n_error_39; } } /* UNREACHABLE */; @@ -10496,7 +10955,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_32; + goto s_n_llhttp__internal__n_error_39; } } /* UNREACHABLE */; @@ -10525,7 +10984,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_http_start_3; } default: { - goto s_n_llhttp__internal__n_error_32; + goto s_n_llhttp__internal__n_error_39; } } /* UNREACHABLE */; @@ -10579,7 +11038,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_llhttp__on_url_8; } default: { - goto s_n_llhttp__internal__n_error_33; + goto s_n_llhttp__internal__n_error_40; } } /* UNREACHABLE */; @@ -10636,7 +11095,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_stub_query_3; } default: { - goto s_n_llhttp__internal__n_error_34; + goto s_n_llhttp__internal__n_error_41; } } /* UNREACHABLE */; @@ -10666,7 +11125,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_query; } default: { - goto s_n_llhttp__internal__n_error_35; + goto s_n_llhttp__internal__n_error_42; } } /* UNREACHABLE */; @@ -10807,10 +11266,10 @@ static llparse_state_t llhttp__internal__run( } case 7: { p++; - goto s_n_llhttp__internal__n_error_36; + goto s_n_llhttp__internal__n_error_43; } default: { - goto s_n_llhttp__internal__n_error_37; + goto s_n_llhttp__internal__n_error_44; } } /* UNREACHABLE */; @@ -10865,7 +11324,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_server_with_at; } default: { - goto s_n_llhttp__internal__n_error_38; + goto s_n_llhttp__internal__n_error_45; } } /* UNREACHABLE */; @@ -10882,7 +11341,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_server; } default: { - goto s_n_llhttp__internal__n_error_40; + goto s_n_llhttp__internal__n_error_47; } } /* UNREACHABLE */; @@ -10896,22 +11355,22 @@ static llparse_state_t llhttp__internal__run( switch (*p) { case 10: { p++; - goto s_n_llhttp__internal__n_error_39; + goto s_n_llhttp__internal__n_error_46; } case 13: { p++; - goto s_n_llhttp__internal__n_error_39; + goto s_n_llhttp__internal__n_error_46; } case ' ': { p++; - goto s_n_llhttp__internal__n_error_39; + goto s_n_llhttp__internal__n_error_46; } case '/': { p++; goto s_n_llhttp__internal__n_url_schema_delim_1; } default: { - goto s_n_llhttp__internal__n_error_40; + goto s_n_llhttp__internal__n_error_47; } } /* UNREACHABLE */; @@ -10953,7 +11412,7 @@ static llparse_state_t llhttp__internal__run( switch (lookup_table[(uint8_t) *p]) { case 1: { p++; - goto s_n_llhttp__internal__n_error_39; + goto s_n_llhttp__internal__n_error_46; } case 2: { goto s_n_llhttp__internal__n_span_end_stub_schema; @@ -10963,7 +11422,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_schema; } default: { - goto s_n_llhttp__internal__n_error_41; + goto s_n_llhttp__internal__n_error_48; } } /* UNREACHABLE */; @@ -10995,7 +11454,7 @@ static llparse_state_t llhttp__internal__run( switch (lookup_table[(uint8_t) *p]) { case 1: { p++; - goto s_n_llhttp__internal__n_error_39; + goto s_n_llhttp__internal__n_error_46; } case 2: { goto s_n_llhttp__internal__n_span_start_stub_path_2; @@ -11004,7 +11463,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_schema; } default: { - goto s_n_llhttp__internal__n_error_42; + goto s_n_llhttp__internal__n_error_49; } } /* UNREACHABLE */; @@ -11060,7 +11519,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_spaces_before_url; } default: { - goto s_n_llhttp__internal__n_error_43; + goto s_n_llhttp__internal__n_error_50; } } /* UNREACHABLE */; @@ -11078,7 +11537,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11103,7 +11562,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11124,7 +11583,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_3; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11149,7 +11608,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_4; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11174,7 +11633,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_6; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11199,7 +11658,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_8; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11217,7 +11676,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11238,7 +11697,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_9; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11259,7 +11718,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_7; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11284,7 +11743,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_12; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11309,7 +11768,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_13; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11330,7 +11789,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_13; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11347,7 +11806,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_11; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11372,7 +11831,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_14; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11397,7 +11856,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_17; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11439,7 +11898,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_15; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11464,7 +11923,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_18; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11489,7 +11948,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_20; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11514,7 +11973,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_21; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11535,7 +11994,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_21; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11560,7 +12019,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_23; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11585,7 +12044,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_24; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11610,7 +12069,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_26; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11635,7 +12094,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_28; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11653,7 +12112,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11674,7 +12133,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_29; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11695,7 +12154,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_27; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11720,7 +12179,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_30; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11749,7 +12208,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_30; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11774,7 +12233,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_31; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11799,7 +12258,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_32; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11824,7 +12283,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_35; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11849,7 +12308,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_36; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11870,7 +12329,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_36; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11895,7 +12354,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_37; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11920,7 +12379,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_38; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11945,7 +12404,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_42; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11970,7 +12429,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_43; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -11991,7 +12450,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_43; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12008,7 +12467,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_41; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12030,7 +12489,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_40; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12055,7 +12514,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_45; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12077,7 +12536,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12110,7 +12569,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_44; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12135,7 +12594,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_48; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12160,7 +12619,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_49; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12185,7 +12644,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_50; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12210,7 +12669,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_51; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12239,7 +12698,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_51; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12256,7 +12715,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_47; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12281,7 +12740,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_54; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12299,7 +12758,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12324,7 +12783,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_57; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12345,7 +12804,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_57; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12366,7 +12825,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_55; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12391,7 +12850,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_58; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12416,7 +12875,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_59; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12441,7 +12900,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_59; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12466,7 +12925,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_61; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12491,7 +12950,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_62; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12512,7 +12971,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_62; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12537,7 +12996,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_65; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12562,7 +13021,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_67; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12587,7 +13046,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_68; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12608,7 +13067,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_68; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12633,7 +13092,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_req_69; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12658,7 +13117,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_69; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12675,7 +13134,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_64; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12752,7 +13211,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_start_req_63; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -12846,7 +13305,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_res_status_start; } default: { - goto s_n_llhttp__internal__n_error_45; + goto s_n_llhttp__internal__n_error_54; } } /* UNREACHABLE */; @@ -12926,7 +13385,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_update_status_code; } default: { - goto s_n_llhttp__internal__n_error_46; + goto s_n_llhttp__internal__n_error_55; } } /* UNREACHABLE */; @@ -12989,7 +13448,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_http_minor_1; } default: { - goto s_n_llhttp__internal__n_error_47; + goto s_n_llhttp__internal__n_error_58; } } /* UNREACHABLE */; @@ -13006,7 +13465,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_res_http_minor; } default: { - goto s_n_llhttp__internal__n_error_48; + goto s_n_llhttp__internal__n_error_59; } } /* UNREACHABLE */; @@ -13069,7 +13528,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_http_major_1; } default: { - goto s_n_llhttp__internal__n_error_49; + goto s_n_llhttp__internal__n_error_60; } } /* UNREACHABLE */; @@ -13093,7 +13552,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_res; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_52; + goto s_n_llhttp__internal__n_error_63; } } /* UNREACHABLE */; @@ -13118,7 +13577,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_or_res_method_2; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_50; + goto s_n_llhttp__internal__n_error_61; } } /* UNREACHABLE */; @@ -13142,7 +13601,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_or_res_method_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_50; + goto s_n_llhttp__internal__n_error_61; } } /* UNREACHABLE */; @@ -13163,7 +13622,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_or_res_method_3; } default: { - goto s_n_llhttp__internal__n_error_50; + goto s_n_llhttp__internal__n_error_61; } } /* UNREACHABLE */; @@ -13180,7 +13639,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_or_res_method_1; } default: { - goto s_n_llhttp__internal__n_error_50; + goto s_n_llhttp__internal__n_error_61; } } /* UNREACHABLE */; @@ -13240,7 +13699,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */ abort(); } - s_n_llhttp__internal__n_error_39: { + s_n_llhttp__internal__n_error_46: { state->error = 0x7; state->reason = "Invalid characters in url"; state->error_pos = (const char*) p; @@ -13656,7 +14115,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_field: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_field(state, start, p); @@ -13681,7 +14140,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_15: { + s_n_llhttp__internal__n_error_16: { state->error = 0xb; state->reason = "Empty Content-Length"; state->error_pos = (const char*) p; @@ -13766,14 +14225,51 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_load_header_state: { switch (llhttp__internal__c_load_header_state(state, p, endp)) { case 2: - goto s_n_llhttp__internal__n_error_15; + goto s_n_llhttp__internal__n_error_16; default: goto s_n_llhttp__internal__n_invoke_load_header_state_1; } /* UNREACHABLE */; abort(); } + s_n_llhttp__internal__n_error_15: { + state->error = 0xa; + state->reason = "Invalid header value char"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_3: { + switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_header_value_discard_lws; + default: + goto s_n_llhttp__internal__n_error_15; + } + /* UNREACHABLE */; + abort(); + } s_n_llhttp__internal__n_invoke_update_header_state_1: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { + default: + goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_header_state_3: { + switch (llhttp__internal__c_load_header_state(state, p, endp)) { + case 8: + goto s_n_llhttp__internal__n_invoke_update_header_state_1; + default: + goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_update_header_state_2: { switch (llhttp__internal__c_update_header_state(state, p, endp)) { default: goto s_n_llhttp__internal__n_invoke_llhttp__on_header_value_complete; @@ -13784,7 +14280,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_7: { switch (llhttp__internal__c_or_flags_3(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_1; + goto s_n_llhttp__internal__n_invoke_update_header_state_2; } /* UNREACHABLE */; abort(); @@ -13792,7 +14288,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_8: { switch (llhttp__internal__c_or_flags_4(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_1; + goto s_n_llhttp__internal__n_invoke_update_header_state_2; } /* UNREACHABLE */; abort(); @@ -13800,7 +14296,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_9: { switch (llhttp__internal__c_or_flags_5(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_1; + goto s_n_llhttp__internal__n_invoke_update_header_state_2; } /* UNREACHABLE */; abort(); @@ -13813,7 +14309,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_load_header_state_3: { + s_n_llhttp__internal__n_invoke_load_header_state_4: { switch (llhttp__internal__c_load_header_state(state, p, endp)) { case 5: goto s_n_llhttp__internal__n_invoke_or_flags_7; @@ -13829,7 +14325,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_16: { + s_n_llhttp__internal__n_error_17: { state->error = 0x3; state->reason = "Missing expected LF after header value"; state->error_pos = (const char*) p; @@ -13847,15 +14343,16 @@ static llparse_state_t llhttp__internal__run( err = llhttp__on_header_value(state, start, p); if (err != 0) { state->error = err; - state->error_pos = (const char*) p; + state->error_pos = (const char*) (p + 1); state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_header_value_almost_done; return s_error; } + p++; goto s_n_llhttp__internal__n_header_value_almost_done; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2: { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_3: { const unsigned char* start; int err; @@ -13864,16 +14361,15 @@ static llparse_state_t llhttp__internal__run( err = llhttp__on_header_value(state, start, p); if (err != 0) { state->error = err; - state->error_pos = (const char*) (p + 1); + state->error_pos = (const char*) p; state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_header_value_almost_done; return s_error; } - p++; goto s_n_llhttp__internal__n_header_value_almost_done; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_span_end_llhttp__on_header_value_3: { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_4: { const unsigned char* start; int err; @@ -13891,26 +14387,34 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_17: { - state->error = 0xa; - state->reason = "Invalid header value char"; - state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_error; - return s_error; + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2: { + const unsigned char* start; + int err; + + start = state->_span_pos0; + state->_span_pos0 = NULL; + err = llhttp__on_header_value(state, start, p); + if (err != 0) { + state->error = err; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_18; + return s_error; + } + goto s_n_llhttp__internal__n_error_18; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_3: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_4: { switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_header_value_lenient; default: - goto s_n_llhttp__internal__n_error_17; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_3: { + s_n_llhttp__internal__n_invoke_update_header_state_4: { switch (llhttp__internal__c_update_header_state(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_connection; @@ -13921,7 +14425,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_11: { switch (llhttp__internal__c_or_flags_3(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_3; + goto s_n_llhttp__internal__n_invoke_update_header_state_4; } /* UNREACHABLE */; abort(); @@ -13929,7 +14433,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_12: { switch (llhttp__internal__c_or_flags_4(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_3; + goto s_n_llhttp__internal__n_invoke_update_header_state_4; } /* UNREACHABLE */; abort(); @@ -13937,7 +14441,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_or_flags_13: { switch (llhttp__internal__c_or_flags_5(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_3; + goto s_n_llhttp__internal__n_invoke_update_header_state_4; } /* UNREACHABLE */; abort(); @@ -13950,7 +14454,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_load_header_state_4: { + s_n_llhttp__internal__n_invoke_load_header_state_5: { switch (llhttp__internal__c_load_header_state(state, p, endp)) { case 5: goto s_n_llhttp__internal__n_invoke_or_flags_11; @@ -13966,39 +14470,39 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_4: { - switch (llhttp__internal__c_update_header_state_4(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_5: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_connection_token; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_2: { - switch (llhttp__internal__c_update_header_state_2(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_3: { + switch (llhttp__internal__c_update_header_state_3(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_connection_ws; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_5: { - switch (llhttp__internal__c_update_header_state_5(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_6: { + switch (llhttp__internal__c_update_header_state_6(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_connection_ws; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_6: { - switch (llhttp__internal__c_update_header_state_6(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_7: { + switch (llhttp__internal__c_update_header_state_7(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_connection_ws; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_span_end_llhttp__on_header_value_4: { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_5: { const unsigned char* start; int err; @@ -14008,17 +14512,17 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_19; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_20; return s_error; } - goto s_n_llhttp__internal__n_error_19; + goto s_n_llhttp__internal__n_error_20; /* UNREACHABLE */; abort(); } s_n_llhttp__internal__n_invoke_mul_add_content_length_1: { switch (llhttp__internal__c_mul_add_content_length_1(state, p, endp, match)) { case 1: - goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_4; + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_5; default: goto s_n_llhttp__internal__n_header_value_content_length; } @@ -14033,7 +14537,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_span_end_llhttp__on_header_value_5: { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_6: { const unsigned char* start; int err; @@ -14043,14 +14547,14 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_20; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_21; return s_error; } - goto s_n_llhttp__internal__n_error_20; + goto s_n_llhttp__internal__n_error_21; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_18: { + s_n_llhttp__internal__n_error_19: { state->error = 0x4; state->reason = "Duplicate Content-Length"; state->error_pos = (const char*) p; @@ -14064,21 +14568,77 @@ static llparse_state_t llhttp__internal__run( case 0: goto s_n_llhttp__internal__n_header_value_content_length; default: - goto s_n_llhttp__internal__n_error_18; + goto s_n_llhttp__internal__n_error_19; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_7: { - switch (llhttp__internal__c_update_header_state_7(state, p, endp)) { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8: { + const unsigned char* start; + int err; + + start = state->_span_pos0; + state->_span_pos0 = NULL; + err = llhttp__on_header_value(state, start, p); + if (err != 0) { + state->error = err; + state->error_pos = (const char*) (p + 1); + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_23; + return s_error; + } + p++; + goto s_n_llhttp__internal__n_error_23; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_update_header_state_8: { + switch (llhttp__internal__c_update_header_state_8(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value_otherwise; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_8: { - switch (llhttp__internal__c_update_header_state_4(state, p, endp)) { + s_n_llhttp__internal__n_span_end_llhttp__on_header_value_7: { + const unsigned char* start; + int err; + + start = state->_span_pos0; + state->_span_pos0 = NULL; + err = llhttp__on_header_value(state, start, p); + if (err != 0) { + state->error = err; + state->error_pos = (const char*) (p + 1); + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_22; + return s_error; + } + p++; + goto s_n_llhttp__internal__n_error_22; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_5: { + switch (llhttp__internal__c_test_lenient_flags_5(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_7; + default: + goto s_n_llhttp__internal__n_header_value_te_chunked; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_type_1: { + switch (llhttp__internal__c_load_type(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_5; + default: + goto s_n_llhttp__internal__n_header_value_te_chunked; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_update_header_state_9: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_value; } @@ -14093,6 +14653,34 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } + s_n_llhttp__internal__n_invoke_or_flags_17: { + switch (llhttp__internal__c_or_flags_16(state, p, endp)) { + default: + goto s_n_llhttp__internal__n_invoke_and_flags; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_6: { + switch (llhttp__internal__c_test_lenient_flags_5(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8; + default: + goto s_n_llhttp__internal__n_invoke_or_flags_17; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_type_2: { + switch (llhttp__internal__c_load_type(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_6; + default: + goto s_n_llhttp__internal__n_invoke_or_flags_17; + } + /* UNREACHABLE */; + abort(); + } s_n_llhttp__internal__n_invoke_or_flags_16: { switch (llhttp__internal__c_or_flags_16(state, p, endp)) { default: @@ -14101,10 +14689,20 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_or_flags_17: { - switch (llhttp__internal__c_or_flags_17(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_flags_3: { + switch (llhttp__internal__c_test_flags_3(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_load_type_2; + default: + goto s_n_llhttp__internal__n_invoke_or_flags_16; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_or_flags_18: { + switch (llhttp__internal__c_or_flags_18(state, p, endp)) { default: - goto s_n_llhttp__internal__n_invoke_update_header_state_8; + goto s_n_llhttp__internal__n_invoke_update_header_state_9; } /* UNREACHABLE */; abort(); @@ -14116,9 +14714,9 @@ static llparse_state_t llhttp__internal__run( case 2: goto s_n_llhttp__internal__n_invoke_test_flags_2; case 3: - goto s_n_llhttp__internal__n_invoke_or_flags_16; + goto s_n_llhttp__internal__n_invoke_test_flags_3; case 4: - goto s_n_llhttp__internal__n_invoke_or_flags_17; + goto s_n_llhttp__internal__n_invoke_or_flags_18; default: goto s_n_llhttp__internal__n_header_value; } @@ -14161,7 +14759,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_21: { + s_n_llhttp__internal__n_error_24: { state->error = 0xa; state->reason = "Invalid header token"; state->error_pos = (const char*) p; @@ -14170,8 +14768,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_9: { - switch (llhttp__internal__c_update_header_state_4(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_10: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_field_general; } @@ -14186,8 +14784,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_update_header_state_10: { - switch (llhttp__internal__c_update_header_state_4(state, p, endp)) { + s_n_llhttp__internal__n_invoke_update_header_state_11: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { default: goto s_n_llhttp__internal__n_header_field_general; } @@ -14235,7 +14833,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_22: { + s_n_llhttp__internal__n_error_25: { state->error = 0x7; state->reason = "Expected CRLF"; state->error_pos = (const char*) p; @@ -14261,7 +14859,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_25: { + s_n_llhttp__internal__n_error_30: { state->error = 0x17; state->reason = "Pause on PRI/Upgrade"; state->error_pos = (const char*) p; @@ -14270,7 +14868,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_26: { + s_n_llhttp__internal__n_error_31: { state->error = 0x9; state->reason = "Expected HTTP/2 Connection Preface"; state->error_pos = (const char*) p; @@ -14279,7 +14877,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_24: { + s_n_llhttp__internal__n_error_29: { state->error = 0x9; state->reason = "Expected CRLF after version"; state->error_pos = (const char*) p; @@ -14298,15 +14896,107 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_store_http_minor: { - switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { + s_n_llhttp__internal__n_error_28: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_minor: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 9: + goto s_n_llhttp__internal__n_invoke_load_method_1; default: + goto s_n_llhttp__internal__n_error_28; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_32: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_minor_1: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 0: goto s_n_llhttp__internal__n_invoke_load_method_1; + case 1: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: + goto s_n_llhttp__internal__n_error_32; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_33: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_minor_2: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: + goto s_n_llhttp__internal__n_error_33; } /* UNREACHABLE */; abort(); } s_n_llhttp__internal__n_error_27: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_major: { + switch (llhttp__internal__c_load_http_major(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_invoke_load_http_minor; + case 1: + goto s_n_llhttp__internal__n_invoke_load_http_minor_1; + case 2: + goto s_n_llhttp__internal__n_invoke_load_http_minor_2; + default: + goto s_n_llhttp__internal__n_error_27; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_7: { + switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: + goto s_n_llhttp__internal__n_invoke_load_http_major; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_store_http_minor: { + switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { + default: + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_7; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_34: { state->error = 0x9; state->reason = "Invalid minor version"; state->error_pos = (const char*) p; @@ -14315,7 +15005,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_28: { + s_n_llhttp__internal__n_error_35: { state->error = 0x9; state->reason = "Expected dot"; state->error_pos = (const char*) p; @@ -14332,7 +15022,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_29: { + s_n_llhttp__internal__n_error_36: { state->error = 0x9; state->reason = "Invalid major version"; state->error_pos = (const char*) p; @@ -14341,7 +15031,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_23: { + s_n_llhttp__internal__n_error_26: { state->error = 0x8; state->reason = "Invalid method for HTTP/x.x request"; state->error_pos = (const char*) p; @@ -14423,12 +15113,12 @@ static llparse_state_t llhttp__internal__run( case 34: goto s_n_llhttp__internal__n_req_http_major; default: - goto s_n_llhttp__internal__n_error_23; + goto s_n_llhttp__internal__n_error_26; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_32: { + s_n_llhttp__internal__n_error_39: { state->error = 0x8; state->reason = "Expected HTTP/"; state->error_pos = (const char*) p; @@ -14437,7 +15127,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_30: { + s_n_llhttp__internal__n_error_37: { state->error = 0x8; state->reason = "Expected SOURCE method for ICE/x.x request"; state->error_pos = (const char*) p; @@ -14451,12 +15141,12 @@ static llparse_state_t llhttp__internal__run( case 33: goto s_n_llhttp__internal__n_req_http_major; default: - goto s_n_llhttp__internal__n_error_30; + goto s_n_llhttp__internal__n_error_37; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_31: { + s_n_llhttp__internal__n_error_38: { state->error = 0x8; state->reason = "Invalid method for RTSP/x.x request"; state->error_pos = (const char*) p; @@ -14496,7 +15186,7 @@ static llparse_state_t llhttp__internal__run( case 45: goto s_n_llhttp__internal__n_req_http_major; default: - goto s_n_llhttp__internal__n_error_31; + goto s_n_llhttp__internal__n_error_38; } /* UNREACHABLE */; abort(); @@ -14577,7 +15267,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_33: { + s_n_llhttp__internal__n_error_40: { state->error = 0x7; state->reason = "Invalid char in url fragment start"; state->error_pos = (const char*) p; @@ -14637,7 +15327,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_34: { + s_n_llhttp__internal__n_error_41: { state->error = 0x7; state->reason = "Invalid char in url query"; state->error_pos = (const char*) p; @@ -14646,7 +15336,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_35: { + s_n_llhttp__internal__n_error_42: { state->error = 0x7; state->reason = "Invalid char in url path"; state->error_pos = (const char*) p; @@ -14757,7 +15447,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_36: { + s_n_llhttp__internal__n_error_43: { state->error = 0x7; state->reason = "Double @ in url"; state->error_pos = (const char*) p; @@ -14766,7 +15456,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_37: { + s_n_llhttp__internal__n_error_44: { state->error = 0x7; state->reason = "Unexpected char in url server"; state->error_pos = (const char*) p; @@ -14775,7 +15465,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_38: { + s_n_llhttp__internal__n_error_45: { state->error = 0x7; state->reason = "Unexpected char in url server"; state->error_pos = (const char*) p; @@ -14784,7 +15474,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_40: { + s_n_llhttp__internal__n_error_47: { state->error = 0x7; state->reason = "Unexpected char in url schema"; state->error_pos = (const char*) p; @@ -14793,7 +15483,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_41: { + s_n_llhttp__internal__n_error_48: { state->error = 0x7; state->reason = "Unexpected char in url schema"; state->error_pos = (const char*) p; @@ -14802,7 +15492,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_42: { + s_n_llhttp__internal__n_error_49: { state->error = 0x7; state->reason = "Unexpected start char in url"; state->error_pos = (const char*) p; @@ -14821,7 +15511,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_43: { + s_n_llhttp__internal__n_error_50: { state->error = 0x6; state->reason = "Expected space after method"; state->error_pos = (const char*) p; @@ -14838,7 +15528,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_51: { + s_n_llhttp__internal__n_error_62: { state->error = 0x6; state->reason = "Invalid method encountered"; state->error_pos = (const char*) p; @@ -14847,7 +15537,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_44: { + s_n_llhttp__internal__n_error_53: { state->error = 0xd; state->reason = "Response overflow"; state->error_pos = (const char*) p; @@ -14859,7 +15549,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_mul_add_status_code: { switch (llhttp__internal__c_mul_add_status_code(state, p, endp, match)) { case 1: - goto s_n_llhttp__internal__n_error_44; + goto s_n_llhttp__internal__n_error_53; default: goto s_n_llhttp__internal__n_res_status_code; } @@ -14902,7 +15592,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_45: { + s_n_llhttp__internal__n_error_54: { state->error = 0xd; state->reason = "Invalid response status"; state->error_pos = (const char*) p; @@ -14919,7 +15609,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_46: { + s_n_llhttp__internal__n_error_55: { state->error = 0x9; state->reason = "Expected space after version"; state->error_pos = (const char*) p; @@ -14928,15 +15618,107 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } + s_n_llhttp__internal__n_error_52: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_minor_3: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 9: + goto s_n_llhttp__internal__n_res_http_end; + default: + goto s_n_llhttp__internal__n_error_52; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_56: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_minor_4: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_res_http_end; + case 1: + goto s_n_llhttp__internal__n_res_http_end; + default: + goto s_n_llhttp__internal__n_error_56; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_57: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_minor_5: { + switch (llhttp__internal__c_load_http_minor(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_res_http_end; + default: + goto s_n_llhttp__internal__n_error_57; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_error_51: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_load_http_major_1: { + switch (llhttp__internal__c_load_http_major(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_invoke_load_http_minor_3; + case 1: + goto s_n_llhttp__internal__n_invoke_load_http_minor_4; + case 2: + goto s_n_llhttp__internal__n_invoke_load_http_minor_5; + default: + goto s_n_llhttp__internal__n_error_51; + } + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_8: { + switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_res_http_end; + default: + goto s_n_llhttp__internal__n_invoke_load_http_major_1; + } + /* UNREACHABLE */; + abort(); + } s_n_llhttp__internal__n_invoke_store_http_minor_1: { switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { default: - goto s_n_llhttp__internal__n_res_http_end; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_8; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_47: { + s_n_llhttp__internal__n_error_58: { state->error = 0x9; state->reason = "Invalid minor version"; state->error_pos = (const char*) p; @@ -14945,7 +15727,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_48: { + s_n_llhttp__internal__n_error_59: { state->error = 0x9; state->reason = "Expected dot"; state->error_pos = (const char*) p; @@ -14962,7 +15744,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_49: { + s_n_llhttp__internal__n_error_60: { state->error = 0x9; state->reason = "Invalid major version"; state->error_pos = (const char*) p; @@ -14971,7 +15753,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_52: { + s_n_llhttp__internal__n_error_63: { state->error = 0x8; state->reason = "Expected HTTP/"; state->error_pos = (const char*) p; @@ -14996,7 +15778,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_50: { + s_n_llhttp__internal__n_error_61: { state->error = 0x8; state->reason = "Invalid word encountered"; state->error_pos = (const char*) p; diff --git a/deps/metacache/CMakeLists.txt b/deps/metacache/CMakeLists.txt new file mode 100644 index 00000000000..59186fe73bc --- /dev/null +++ b/deps/metacache/CMakeLists.txt @@ -0,0 +1,61 @@ +project(MetaCache) + +cmake_minimum_required(VERSION 2.8) + +set(CMAKE_BUILD_TYPE Debug) + +#add_definitions(-std=c++11) +#set(CMAKE_CXX_STANDARD 11) + +include(CheckCXXCompilerFlag) +CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) +CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) + +if(COMPILER_SUPPORTS_CXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +elseif(COMPILER_SUPPORTS_CXX0X) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +else() + message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") +endif() + +add_library(mc_preload SHARED + ld_preload.c +) + +#add_executable( +# test_metacache +# test_main.cc +#) + +add_executable( + test_avltree + test_avl.cc +) + +add_executable( + test_writer + test_writer.cc +) + +add_executable( + test_hash + test_hash.cc + city.cc +) + +add_executable( + test_kv + test_kv.cc +) + + +#target_link_libraries( +# test_metacache +# libmetacache +#) + +#target_link_libraries( +# test_avltree +# libmetacache +#) diff --git a/deps/metacache/city.cc b/deps/metacache/city.cc new file mode 100644 index 00000000000..12e8829a778 --- /dev/null +++ b/deps/metacache/city.cc @@ -0,0 +1,465 @@ +// Copyright (c) 2011 Google, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +// CityHash, by Geoff Pike and Jyrki Alakuijala +// +// This file provides CityHash64() and related functions. +// +// It's probably possible to create even faster hash functions by +// writing a program that systematically explores some of the space of +// possible hash functions, by using SIMD instructions, or by +// compromising on hash quality. + +#include "city.h" + +#include +#include // for memcpy and memset + +using namespace std; + +static uint64 UNALIGNED_LOAD64(const char *p) { + uint64 result; + memcpy(&result, p, sizeof(result)); + return result; +} + +static uint32 UNALIGNED_LOAD32(const char *p) { + uint32 result; + memcpy(&result, p, sizeof(result)); + return result; +} + +#ifndef __BIG_ENDIAN__ + +#define uint32_in_expected_order(x) (x) +#define uint64_in_expected_order(x) (x) + +#else + +#ifdef _MSC_VER +#include +#define bswap_32(x) _byteswap_ulong(x) +#define bswap_64(x) _byteswap_uint64(x) + +#elif defined(__APPLE__) +// Mac OS X / Darwin features +#include +#define bswap_32(x) OSSwapInt32(x) +#define bswap_64(x) OSSwapInt64(x) + +#else +#include +#endif + +#define uint32_in_expected_order(x) (bswap_32(x)) +#define uint64_in_expected_order(x) (bswap_64(x)) + +#endif // __BIG_ENDIAN__ + +#if defined(__GNUC__) || defined(__INTEL_COMPILER) +#define MY_LIKELY(x) (__builtin_expect(!!(x), 1)) +#else +#define MY_LIKELY(x) (x) +#endif + +static uint64 Fetch64(const char *p) { + return uint64_in_expected_order(UNALIGNED_LOAD64(p)); +} + +static uint32 Fetch32(const char *p) { + return uint32_in_expected_order(UNALIGNED_LOAD32(p)); +} + +// Some primes between 2^63 and 2^64 for various uses. +static const uint64 k0 = 0xc3a5c85c97cb3127ULL; +static const uint64 k1 = 0xb492b66fbe98f273ULL; +static const uint64 k2 = 0x9ae16a3b2f90404fULL; +static const uint64 k3 = 0xc949d7c7509e6557ULL; + +// Bitwise right rotate. Normally this will compile to a single +// instruction, especially if the shift is a manifest constant. +static uint64 Rotate(uint64 val, int shift) { + // Avoid shifting by 64: doing so yields an undefined result. + return shift == 0 ? val : ((val >> shift) | (val << (64 - shift))); +} + +// Equivalent to Rotate(), but requires the second arg to be non-zero. +// On x86-64, and probably others, it's possible for this to compile +// to a single instruction if both args are already in registers. +static uint64 RotateByAtLeast1(uint64 val, int shift) { + return (val >> shift) | (val << (64 - shift)); +} + +static uint64 ShiftMix(uint64 val) { + return val ^ (val >> 47); +} + +static uint64 HashLen16(uint64 u, uint64 v) { + return Hash128to64(uint128(u, v)); +} + +static uint64 HashLen0to16(const char *s, size_t len) { + if (len > 8) { + uint64 a = Fetch64(s); + uint64 b = Fetch64(s + len - 8); + return HashLen16(a, RotateByAtLeast1(b + len, len)) ^ b; + } + if (len >= 4) { + uint64 a = Fetch32(s); + return HashLen16(len + (a << 3), Fetch32(s + len - 4)); + } + if (len > 0) { + uint8 a = s[0]; + uint8 b = s[len >> 1]; + uint8 c = s[len - 1]; + uint32 y = static_cast(a) + (static_cast(b) << 8); + uint32 z = len + (static_cast(c) << 2); + return ShiftMix(y * k2 ^ z * k3) * k2; + } + return k2; +} + +// This probably works well for 16-byte strings as well, but it may be overkill +// in that case. +static uint64 HashLen17to32(const char *s, size_t len) { + uint64 a = Fetch64(s) * k1; + uint64 b = Fetch64(s + 8); + uint64 c = Fetch64(s + len - 8) * k2; + uint64 d = Fetch64(s + len - 16) * k0; + return HashLen16(Rotate(a - b, 43) + Rotate(c, 30) + d, + a + Rotate(b ^ k3, 20) - c + len); +} + +// Return a 16-byte hash for 48 bytes. Quick and dirty. +// Callers do best to use "random-looking" values for a and b. +static pair WeakHashLen32WithSeeds( + uint64 w, uint64 x, uint64 y, uint64 z, uint64 a, uint64 b) { + a += w; + b = Rotate(b + a + z, 21); + uint64 c = a; + a += x; + a += y; + b += Rotate(a, 44); + return make_pair(a + z, b + c); +} + +// Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. +static pair WeakHashLen32WithSeeds( + const char* s, uint64 a, uint64 b) { + return WeakHashLen32WithSeeds(Fetch64(s), + Fetch64(s + 8), + Fetch64(s + 16), + Fetch64(s + 24), + a, + b); +} + +// Return an 8-byte hash for 33 to 64 bytes. +static uint64 HashLen33to64(const char *s, size_t len) { + uint64 z = Fetch64(s + 24); + uint64 a = Fetch64(s) + (len + Fetch64(s + len - 16)) * k0; + uint64 b = Rotate(a + z, 52); + uint64 c = Rotate(a, 37); + a += Fetch64(s + 8); + c += Rotate(a, 7); + a += Fetch64(s + 16); + uint64 vf = a + z; + uint64 vs = b + Rotate(a, 31) + c; + a = Fetch64(s + 16) + Fetch64(s + len - 32); + z = Fetch64(s + len - 8); + b = Rotate(a + z, 52); + c = Rotate(a, 37); + a += Fetch64(s + len - 24); + c += Rotate(a, 7); + a += Fetch64(s + len - 16); + uint64 wf = a + z; + uint64 ws = b + Rotate(a, 31) + c; + uint64 r = ShiftMix((vf + ws) * k2 + (wf + vs) * k0); + return ShiftMix(r * k0 + vs) * k2; +} + +uint64 CityHash64(const char *s, size_t len) { + if (len <= 32) { + if (len <= 16) { + return HashLen0to16(s, len); + } else { + return HashLen17to32(s, len); + } + } else if (len <= 64) { + return HashLen33to64(s, len); + } + + // For strings over 64 bytes we hash the end first, and then as we + // loop we keep 56 bytes of state: v, w, x, y, and z. + uint64 x = Fetch64(s + len - 40); + uint64 y = Fetch64(s + len - 16) + Fetch64(s + len - 56); + uint64 z = HashLen16(Fetch64(s + len - 48) + len, Fetch64(s + len - 24)); + pair v = WeakHashLen32WithSeeds(s + len - 64, len, z); + pair w = WeakHashLen32WithSeeds(s + len - 32, y + k1, x); + x = x * k1 + Fetch64(s); + + // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks. + len = (len - 1) & ~static_cast(63); + do { + x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1; + y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; + x ^= w.second; + y += v.first + Fetch64(s + 40); + z = Rotate(z + w.first, 33) * k1; + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); + std::swap(z, x); + s += 64; + len -= 64; + } while (len != 0); + return HashLen16(HashLen16(v.first, w.first) + ShiftMix(y) * k1 + z, + HashLen16(v.second, w.second) + x); +} + +uint64 CityHash64WithSeed(const char *s, size_t len, uint64 seed) { + return CityHash64WithSeeds(s, len, k2, seed); +} + +uint64 CityHash64WithSeeds(const char *s, size_t len, + uint64 seed0, uint64 seed1) { + return HashLen16(CityHash64(s, len) - seed0, seed1); +} + +// A subroutine for CityHash128(). Returns a decent 128-bit hash for strings +// of any length representable in signed long. Based on City and Murmur. +static uint128 CityMurmur(const char *s, size_t len, uint128 seed) { + uint64 a = Uint128Low64(seed); + uint64 b = Uint128High64(seed); + uint64 c = 0; + uint64 d = 0; + signed long l = len - 16; + if (l <= 0) { // len <= 16 + a = ShiftMix(a * k1) * k1; + c = b * k1 + HashLen0to16(s, len); + d = ShiftMix(a + (len >= 8 ? Fetch64(s) : c)); + } else { // len > 16 + c = HashLen16(Fetch64(s + len - 8) + k1, a); + d = HashLen16(b + len, c + Fetch64(s + len - 16)); + a += d; + do { + a ^= ShiftMix(Fetch64(s) * k1) * k1; + a *= k1; + b ^= a; + c ^= ShiftMix(Fetch64(s + 8) * k1) * k1; + c *= k1; + d ^= c; + s += 16; + l -= 16; + } while (l > 0); + } + a = HashLen16(a, c); + b = HashLen16(d, b); + return uint128(a ^ b, HashLen16(b, a)); +} + +uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed) { + if (len < 128) { + return CityMurmur(s, len, seed); + } + + // We expect len >= 128 to be the common case. Keep 56 bytes of state: + // v, w, x, y, and z. + pair v, w; + uint64 x = Uint128Low64(seed); + uint64 y = Uint128High64(seed); + uint64 z = len * k1; + v.first = Rotate(y ^ k1, 49) * k1 + Fetch64(s); + v.second = Rotate(v.first, 42) * k1 + Fetch64(s + 8); + w.first = Rotate(y + z, 35) * k1 + x; + w.second = Rotate(x + Fetch64(s + 88), 53) * k1; + + // This is the same inner loop as CityHash64(), manually unrolled. + do { + x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1; + y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; + x ^= w.second; + y += v.first + Fetch64(s + 40); + z = Rotate(z + w.first, 33) * k1; + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); + std::swap(z, x); + s += 64; + x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1; + y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; + x ^= w.second; + y += v.first + Fetch64(s + 40); + z = Rotate(z + w.first, 33) * k1; + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); + std::swap(z, x); + s += 64; + len -= 128; + } while (MY_LIKELY(len >= 128)); + x += Rotate(v.first + z, 49) * k0; + z += Rotate(w.first, 37) * k0; + // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s. + for (size_t tail_done = 0; tail_done < len; ) { + tail_done += 32; + y = Rotate(x + y, 42) * k0 + v.second; + w.first += Fetch64(s + len - tail_done + 16); + x = x * k0 + w.first; + z += w.second + Fetch64(s + len - tail_done); + w.second += v.first; + v = WeakHashLen32WithSeeds(s + len - tail_done, v.first + z, v.second); + } + // At this point our 56 bytes of state should contain more than + // enough information for a strong 128-bit hash. We use two + // different 56-byte-to-8-byte hashes to get a 16-byte final result. + x = HashLen16(x, v.first); + y = HashLen16(y + z, w.first); + return uint128(HashLen16(x + v.second, w.second) + y, + HashLen16(x + w.second, y + v.second)); +} + +uint128 CityHash128(const char *s, size_t len) { + if (len >= 16) { + return CityHash128WithSeed(s + 16, + len - 16, + uint128(Fetch64(s) ^ k3, + Fetch64(s + 8))); + } else if (len >= 8) { + return CityHash128WithSeed(NULL, + 0, + uint128(Fetch64(s) ^ (len * k0), + Fetch64(s + len - 8) ^ k1)); + } else { + return CityHash128WithSeed(s, len, uint128(k0, k1)); + } +} + +#if defined(__SSE4_2__) && defined(__x86_64__) +#include + +// Requires len >= 240. +static void CityHashCrc256Long(const char *s, size_t len, + uint32 seed, uint64 *result) { + uint64 a = Fetch64(s + 56) + k0; + uint64 b = Fetch64(s + 96) + k0; + uint64 c = result[0] = HashLen16(b, len); + uint64 d = result[1] = Fetch64(s + 120) * k0 + len; + uint64 e = Fetch64(s + 184) + seed; + uint64 f = seed; + uint64 g = 0; + uint64 h = 0; + uint64 i = 0; + uint64 j = 0; + uint64 t = c + d; + + // 240 bytes of input per iter. + size_t iters = len / 240; + len -= iters * 240; + do { +#define CHUNK(multiplier, z) \ + { \ + uint64 old_a = a; \ + a = Rotate(b, 41 ^ z) * multiplier + Fetch64(s); \ + b = Rotate(c, 27 ^ z) * multiplier + Fetch64(s + 8); \ + c = Rotate(d, 41 ^ z) * multiplier + Fetch64(s + 16); \ + d = Rotate(e, 33 ^ z) * multiplier + Fetch64(s + 24); \ + e = Rotate(t, 25 ^ z) * multiplier + Fetch64(s + 32); \ + t = old_a; \ + } \ + f = _mm_crc32_u64(f, a); \ + g = _mm_crc32_u64(g, b); \ + h = _mm_crc32_u64(h, c); \ + i = _mm_crc32_u64(i, d); \ + j = _mm_crc32_u64(j, e); \ + s += 40 + + CHUNK(1, 1); CHUNK(k0, 0); + CHUNK(1, 1); CHUNK(k0, 0); + CHUNK(1, 1); CHUNK(k0, 0); + } while (--iters > 0); + + while (len >= 40) { + CHUNK(k0, 0); + len -= 40; + } + if (len > 0) { + s = s + len - 40; + CHUNK(k0, 0); + } + j += i << 32; + a = HashLen16(a, j); + h += g << 32; + b += h; + c = HashLen16(c, f) + i; + d = HashLen16(d, e + result[0]); + j += e; + i += HashLen16(h, t); + e = HashLen16(a, d) + j; + f = HashLen16(b, c) + a; + g = HashLen16(j, i) + c; + result[0] = e + f + g + h; + a = ShiftMix((a + g) * k0) * k0 + b; + result[1] += a + result[0]; + a = ShiftMix(a * k0) * k0 + c; + result[2] = a + result[1]; + a = ShiftMix((a + e) * k0) * k0; + result[3] = a + result[2]; +} + +// Requires len < 240. +static void CityHashCrc256Short(const char *s, size_t len, uint64 *result) { + char buf[240]; + memcpy(buf, s, len); + memset(buf + len, 0, 240 - len); + CityHashCrc256Long(buf, 240, ~static_cast(len), result); +} + +void CityHashCrc256(const char *s, size_t len, uint64 *result) { + if (MY_LIKELY(len >= 240)) { + CityHashCrc256Long(s, len, 0, result); + } else { + CityHashCrc256Short(s, len, result); + } +} + +uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed) { + if (len <= 900) { + return CityHash128WithSeed(s, len, seed); + } else { + uint64 result[4]; + CityHashCrc256(s, len, result); + uint64 u = Uint128High64(seed) + result[0]; + uint64 v = Uint128Low64(seed) + result[1]; + return uint128(HashLen16(u, v + result[2]), + HashLen16(Rotate(v, 32), u * k0 + result[3])); + } +} + +uint128 CityHashCrc128(const char *s, size_t len) { + if (len <= 900) { + return CityHash128(s, len); + } else { + uint64 result[4]; + CityHashCrc256(s, len, result); + return uint128(result[2], result[3]); + } +} + +#endif + +undef MY_LIKELY \ No newline at end of file diff --git a/deps/metacache/city.h b/deps/metacache/city.h new file mode 100644 index 00000000000..99de55c42d0 --- /dev/null +++ b/deps/metacache/city.h @@ -0,0 +1,114 @@ +// Copyright (c) 2011 Google, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +// CityHash, by Geoff Pike and Jyrki Alakuijala +// +// This file provides a few functions for hashing strings. On x86-64 +// hardware in 2011, CityHash64() is faster than other high-quality +// hash functions, such as Murmur. This is largely due to higher +// instruction-level parallelism. CityHash64() and CityHash128() also perform +// well on hash-quality tests. +// +// CityHash128() is optimized for relatively long strings and returns +// a 128-bit hash. For strings more than about 2000 bytes it can be +// faster than CityHash64(). +// +// Functions in the CityHash family are not suitable for cryptography. +// +// WARNING: This code has not been tested on big-endian platforms! +// It is known to work well on little-endian platforms that have a small penalty +// for unaligned reads, such as current Intel and AMD moderate-to-high-end CPUs. +// +// By the way, for some hash functions, given strings a and b, the hash +// of a+b is easily derived from the hashes of a and b. This property +// doesn't hold for any hash functions in this file. + +#ifndef CITY_HASH_H_ +#define CITY_HASH_H_ + +#include // for size_t. +#include + +// Microsoft Visual Studio may not have stdint.h. +#if defined(_MSC_VER) && (_MSC_VER < 1600) +typedef unsigned char uint8_t; +typedef unsigned int uint32_t; +typedef unsigned __int64 uint64_t; +#else // defined(_MSC_VER) +#include +#endif // !defined(_MSC_VER) + +typedef uint8_t uint8; +typedef uint32_t uint32; +typedef uint64_t uint64; +typedef std::pair uint128; + +inline uint64 Uint128Low64(const uint128& x) { return x.first; } +inline uint64 Uint128High64(const uint128& x) { return x.second; } + +// Hash function for a byte array. +uint64 CityHash64(const char *buf, size_t len); + +// Hash function for a byte array. For convenience, a 64-bit seed is also +// hashed into the result. +uint64 CityHash64WithSeed(const char *buf, size_t len, uint64 seed); + +// Hash function for a byte array. For convenience, two seeds are also +// hashed into the result. +uint64 CityHash64WithSeeds(const char *buf, size_t len, + uint64 seed0, uint64 seed1); + +// Hash function for a byte array. +uint128 CityHash128(const char *s, size_t len); + +// Hash function for a byte array. For convenience, a 128-bit seed is also +// hashed into the result. +uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed); + +// Hash 128 input bits down to 64 bits of output. +// This is intended to be a reasonably good hash function. +inline uint64 Hash128to64(const uint128& x) { + // Murmur-inspired hashing. + const uint64 kMul = 0x9ddfea08eb382d69ULL; + uint64 a = (Uint128Low64(x) ^ Uint128High64(x)) * kMul; + a ^= (a >> 47); + uint64 b = (Uint128High64(x) ^ a) * kMul; + b ^= (b >> 47); + b *= kMul; + return b; +} + +// Conditionally include declarations for versions of City that require SSE4.2 +// instructions to be available. +#if defined(__SSE4_2__) && defined(__x86_64__) + +// Hash function for a byte array. +uint128 CityHashCrc128(const char *s, size_t len); + +// Hash function for a byte array. For convenience, a 128-bit seed is also +// hashed into the result. +uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed); + +// Hash function for a byte array. Sets result[0] ... result[3]. +void CityHashCrc256(const char *s, size_t len, uint64 *result); + +#endif // __SSE4_2__ + +#endif // CITY_HASH_H_ diff --git a/deps/metacache/ld_preload.c b/deps/metacache/ld_preload.c new file mode 100644 index 00000000000..477a222dcd3 --- /dev/null +++ b/deps/metacache/ld_preload.c @@ -0,0 +1,109 @@ + +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// GLIBC HOOKS +#define HOOK(fn, ptr) \ + if (!ptr) { \ + ptr = dlsym(RTLD_NEXT, #fn); \ + } + +static void _mc_preload_init(void) __attribute__ ((constructor)); +static void _mc_preload_exit(void) __attribute__ ((destructor)); + +int (*real_xstat)(int ver, const char *path, struct stat *buf) = NULL; +int (*real_lxstat)(int ver, const char *path, struct stat *buf) = NULL; +int (*real_xstat64)(int ver, const char * path, struct stat64 * stat_buf) = NULL; +int (*real_lxstat64)(int ver, const char * path, struct stat64 * stat_buf) = NULL; + +int (*real_fxstatat)(int ver, int dirfd, const char *path, struct stat *buf, int flags) = NULL; + +ssize_t (*real_readlink)(const char *pathname, char *buf, size_t bufsiz) = NULL; +int (*real_access)(const char *pathname, int mode) = NULL; +int (*real_open)(const char *pathname, int flags, ...) = NULL; + +static void _mc_preload_init() +{ + HOOK(__xstat, real_xstat); + HOOK(__lxstat, real_lxstat); + HOOK(__xstat64, real_xstat64); + HOOK(__lxstat64, real_lxstat64); + HOOK(__fxstatat, real_fxstatat); + HOOK(readlink, real_readlink); + //HOOK(access, real_access); + //HOOK(open, real_open); +} + +static void _mc_preload_exit() +{ + +} + +// metacache intf +int __xstat(int ver, const char *path, struct stat *buf) +{ + fprintf(stderr, "%s(%d, %s, %p)\n", __func__, ver, path, buf); + return real_xstat(ver, path, buf); +} + +int __lxstat(int ver, const char *path, struct stat *buf) +{ + fprintf(stderr, "%s(%d, %s, %p)\n", __func__, ver, path, buf); + return real_lxstat(ver, path, buf); +} + +int __xstat64(int ver, const char * path, struct stat64 * buf) +{ + fprintf(stderr, "%s(%d, %s, %p)\n", __func__, ver, path, buf); + return real_xstat64(ver, path, buf); +} + +int __lxstat64(int ver, const char * path, struct stat64 * buf) +{ + fprintf(stderr, "%s(%d, %s, %p)\n", __func__, ver, path, buf); + return real_lxstat64(ver, path, buf); +} + +int __fxstatat(int ver, int dirfd, const char *path, struct stat *buf, int flags) +{ + fprintf(stderr, "%s(%d, %d, %s, %p, %d)\n", __func__, ver, dirfd, path, buf, flags); + return real_fxstatat(ver, dirfd, path, buf, flags); +} + +ssize_t readlink(const char *pathname, char *buf, size_t bufsiz) +{ + //fprintf(stderr, "%s(%s, %p, %d)\n", __func__, pathname, buf, bufsiz); + return real_readlink(pathname, buf, bufsiz); +} + diff --git a/deps/metacache/loader.sh b/deps/metacache/loader.sh new file mode 100755 index 00000000000..4b5fbafd926 --- /dev/null +++ b/deps/metacache/loader.sh @@ -0,0 +1 @@ +LD_PRELOAD=./libmc_preload.so $* diff --git a/deps/metacache/metacache.cc b/deps/metacache/metacache.cc new file mode 100644 index 00000000000..57f7805f6b4 --- /dev/null +++ b/deps/metacache/metacache.cc @@ -0,0 +1,234 @@ +#include "metacache.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace strontium { + +// malloc pointer +static std::atomic vmem_cur(0); + +void *mc_calloc(size_t num, size_t type_size) +{ + if (!vmem_cur) + return NULL; + size_t d = num * type_size; + void *ptr = vmem_cur.fetch_add(d); + printf("%s(%lu) = %p\n", __func__, d, ptr); + return ptr; +} + +int metacache::create(uint32_t max_size) +{ + // attach cache + void *cache = mmap(MC_ADDR(0), max_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + assert(cache); + + // for malloc + vmem_cur.store(cache); + return 0; +} + +void *metacache::load(const char *file) +{ + int fd; + struct stat s; + fd = open(file, O_RDONLY); + assert(fd > 0); + int rc = fstat(fd, &s); + assert(!rc); + size_t flen = s.st_size; + void *cache = mmap(MC_ADDR(0), flen, PROT_READ, MAP_PRIVATE, fd, 0); + assert(cache); + return cache; +} + +int metacache::savefile(const char *file) +{ + std::ofstream f(file, std::ios::binary); + void *ptr = vmem_cur; + size_t size = (uint64_t)ptr - MC_VMEM; + f.write((char *)MC_VMEM, MC_ALIGN_PAGE(size)); + f.close(); + printf("%s(%s) = %lu\n", __func__, file, size); + return 0; +} + +#if 0 +int metacache::kv::get(std::string &key, struct lv *&val) +{ + + return 0; +} + +int metacache::kv::set(std::string &key, std::string &val) +{ + return 0; +} + +int metacache::lv::get(const void *&buf, int &size) +{ + if ((_val[0] & 0x1) == 0) { + size = _val[0]>>1; + buf = &_val[1]; + } else if ((_val[0] & 0x3) == 0x1) { + size = *(uint16_t *)_val >> 2; + buf = &_val[2]; + } else if ((_val[0] & 0x3) == 0x3){ + size = *(uint32_t *)_val >> 2; + buf = &_val[4]; + } else { + return -1; + } + return 0; +} + +int metacache::lv::copy(const void *buf, int len) +{ + if (len < 0x80) { // < 128 bytes + uint8_t i = len<<1; + _val[0] = i; + memcpy(&_val[1], buf, len); + } else if (len < 0x4000) { // < 16k + uint16_t i = ((uint32_t)len << 2) | 0x1; + *(uint16_t *)_val = i; + memcpy(&_val[2], buf, len); + } else { + uint32_t i = ((uint32_t)len << 2) | 0x3; + *(uint32_t *)_val = i; + memcpy(&_val[4], buf, len); + } + return 0; +} + +int metacache::lhash::put(uint32_t hash, uint32_t ofs_addr, pf_lhash_cmp *cmp) +{ + return 0; +} + +int metacache::lhash::find(uint32_t hash, uint32_t &ofs_addr, pf_lhash_cmp *cmp) +{ + return 0; +} + +uint32_t metacache::lhash::hash(const char *str) +{ + uint32_t seed=131 ;// 31 131 1313 13131 131313 etc.. + uint32_t hash=0 ; + while(*str) + { + hash=hash*seed+(*str++); + } + return(hash); +} + +metacache_writer::kv *metacache_writer::add_kv(const std::string &name) +{ + kv *n = new kv(name); + vec_kv.push_back(n); + return n; +} + +metacache_writer::kkv *metacache_writer::add_kkv(const std::string &name) +{ + kkv *n = new kkv(name); + vec_kkv.push_back(n); + return n; +} + +metacache_writer::fs *metacache_writer::add_fs(const std::string &entry) +{ + fs *n = new fs(entry); + return n; +} + +int metacache_writer::kv::set(const std::string &key, const std::string &val) +{ + map_kv[key] = val; + return 0; +} + +int metacache_writer::kkv::set(const std::string &k1, const std::string &k2, const std::string &val) +{ + kkv_key key(k1, k2); + map_kkv[key] = val; + return 0; +} + +int metacache_writer::string(const std::string &val) +{ + sz *s = NULL; + auto it = map_str.find(val); + if (it == map_str.end()) { + s = new sz(val); + } else { + s = it->second; + } + s->hash = metacache::lhash::hash(val.c_str()); + return 0; +} + +int metacache_writer::makeup() +{ + size_t i; + + // hdr + + for (i=0; iname << std::endl; + std::map::iterator it; + for (it=kv->map_kv.begin(); it!=kv->map_kv.end(); it++) { + std::cout << it->first << ":" << it->second << std::endl; + } + } + + for (i=0; iname << std::endl; + std::map::iterator it; + for (it=kkv->map_kkv.begin(); it!=kkv->map_kkv.end(); it++) { + std::cout << "(" << it->first.first << "," << it->first.second << "):" << it->second << std::endl; + } + } + + return 0; +} +#endif + +}; diff --git a/deps/metacache/metacache.h b/deps/metacache/metacache.h new file mode 100644 index 00000000000..7bcebee6ff0 --- /dev/null +++ b/deps/metacache/metacache.h @@ -0,0 +1,2583 @@ +#ifndef _STRONTIUM_METACACHE_H_ +#define _STRONTIUM_METACACHE_H_ + +//#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include "city.h" + +#if __DARWIN_ONLY_64_BIT_INO_T +struct stat64 __DARWIN_STRUCT_STAT64; +#endif + +namespace strontium { +namespace metacache { + +// likely and unlikey +#define MY_LIKELY(x) (__builtin_expect(!!(x), 1)) +#define MY_UNLIKELY(x) (__builtin_expect(!!(x), 0)) + +// default vm address the cache loading to. +// it could be a dynamic virtual address, depends on plantform. +#define MC_DEF_VMADDR (0x4000000000ULL) +#define MC_LIMIT (1*1024*1024*1024) // 1G size limit + +// place holder for Metacache globals +#define MC_GLOBAL() \ + char* cm::_vmem = 0; \ + std::atomic cm::_vmcur(0); + +// page aligned +// const int kPageSize = sysconf(_SC_PAGE_SIZE); +#define MC_PAGE_SIZE (4096) +#define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) +//#define MC_ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) +#define MC_ALIGN(x,a) __ALIGN_MASK(x,((a)-1)) +#define MC_ALIGN_PAGE(x) MC_ALIGN(x,MC_PAGE_SIZE) + +// metacache uses offset for memory saving. +// the whole metacache using 32b pointer in 64b platform. +typedef int32_t mc_ptr; + +// may need to use 128b hash value +typedef std::pair uint128_t; +inline uint64_t Uint128Low64(const uint128_t& x) { return x.first; } +inline uint64_t Uint128High64(const uint128_t& x) { return x.second; } + +// min/max helper +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + +// time stamp for debug +struct ts { + struct timeval _begin, _end; + +#if 0 + /* only work on x86-64, test purpose. + */ + static uint64_t rdtsc(){ + unsigned int lo,hi; + __asm__ __volatile__ ("rdtsc": "=a"(lo), "=d"(hi)); + return ((uint64_t)hi << 32) | lo; + } +#endif + + static struct timeval _utime_diff(struct timeval &a, struct timeval &b) + { + struct timeval ret; + if (b.tv_usec >= a.tv_usec) { + ret.tv_usec = b.tv_usec - a.tv_usec; + ret.tv_sec = b.tv_sec - a.tv_sec; + } else { + ret.tv_usec = 1000000 + b.tv_usec - a.tv_usec; + ret.tv_sec = b.tv_sec - a.tv_sec - 1; + } + return ret; + } + + void begin() + { + gettimeofday(&_begin, 0); + } + + void end() + { + gettimeofday(&_end, 0); + } + + double timediff() + { + struct timeval result = _utime_diff(_begin, _end); + double gap = result.tv_sec + result.tv_usec / 1000000.0; + return gap; + } +}; + +// print time cost in scope +struct ts_scope : ts { + std::string _name; + + ts_scope() : _name(toString()) {} + + ts_scope(const std::string& name) : _name(name) + { + printf("%s begin\n", _name.c_str()); + begin(); + } + + ~ts_scope() + { + end(); + printf("%s end, cost %f seconds.\n", _name.c_str(), timediff()); + } + + std::string toString() + { + if (_name != "") { + return _name; + } + + char buf[20]; + sprintf(buf, "%p", this); + return std::string(buf); + } +}; + +/* + * Begin of City Hash (used for string hash) + */ +class city { + + // ONLY For little endian + #define uint32_in_expected_order(x) (x) + #define uint64_in_expected_order(x) (x) + + static uint64_t UNALIGNED_LOAD64(const char *p) { + uint64_t result; + memcpy(&result, p, sizeof(result)); + return result; + } + + static uint32_t UNALIGNED_LOAD32(const char *p) { + uint32_t result; + memcpy(&result, p, sizeof(result)); + return result; + } + + static uint64_t Fetch64(const char *p) { + return uint64_in_expected_order(UNALIGNED_LOAD64(p)); + } + + static uint32_t Fetch32(const char *p) { + return uint32_in_expected_order(UNALIGNED_LOAD32(p)); + } + + // Some primes between 2^63 and 2^64 for various uses. + static const uint64_t k0 = 0xc3a5c85c97cb3127ULL; + static const uint64_t k1 = 0xb492b66fbe98f273ULL; + static const uint64_t k2 = 0x9ae16a3b2f90404fULL; + static const uint64_t k3 = 0xc949d7c7509e6557ULL; + + // Bitwise right rotate. Normally this will compile to a single + // instruction, especially if the shift is a manifest constant. + static uint64_t Rotate(uint64_t val, int shift) { + // Avoid shifting by 64: doing so yields an undefined result. + return shift == 0 ? val : ((val >> shift) | (val << (64 - shift))); + } + + // Equivalent to Rotate(), but requires the second arg to be non-zero. + // On x86-64, and probably others, it's possible for this to compile + // to a single instruction if both args are already in registers. + static uint64_t RotateByAtLeast1(uint64_t val, int shift) { + return (val >> shift) | (val << (64 - shift)); + } + + static uint64_t ShiftMix(uint64_t val) { + return val ^ (val >> 47); + } + + // Hash 128 input bits down to 64 bits of output. + // This is intended to be a reasonably good hash function. + static uint64_t Hash128to64(const uint128_t& x) { + // Murmur-inspired hashing. + const uint64_t kMul = 0x9ddfea08eb382d69ULL; + uint64_t a = (Uint128Low64(x) ^ Uint128High64(x)) * kMul; + a ^= (a >> 47); + uint64_t b = (Uint128High64(x) ^ a) * kMul; + b ^= (b >> 47); + b *= kMul; + return b; + } + + static uint64_t HashLen16(uint64_t u, uint64_t v) { + return Hash128to64(uint128_t(u, v)); + } + + static uint64_t HashLen0to16(const char *s, size_t len) { + if (len > 8) { + uint64_t a = Fetch64(s); + uint64_t b = Fetch64(s + len - 8); + return HashLen16(a, RotateByAtLeast1(b + len, len)) ^ b; + } + if (len >= 4) { + uint64_t a = Fetch32(s); + return HashLen16(len + (a << 3), Fetch32(s + len - 4)); + } + if (len > 0) { + uint8_t a = s[0]; + uint8_t b = s[len >> 1]; + uint8_t c = s[len - 1]; + uint32_t y = static_cast(a) + (static_cast(b) << 8); + uint32_t z = len + (static_cast(c) << 2); + return ShiftMix(y * k2 ^ z * k3) * k2; + } + return k2; + } + + // This probably works well for 16-byte strings as well, but it may be overkill + // in that case. + static uint64_t HashLen17to32(const char *s, size_t len) { + uint64_t a = Fetch64(s) * k1; + uint64_t b = Fetch64(s + 8); + uint64_t c = Fetch64(s + len - 8) * k2; + uint64_t d = Fetch64(s + len - 16) * k0; + return HashLen16(Rotate(a - b, 43) + Rotate(c, 30) + d, + a + Rotate(b ^ k3, 20) - c + len); + } + + // Return an 8-byte hash for 33 to 64 bytes. + static uint64_t HashLen33to64(const char *s, size_t len) { + uint64_t z = Fetch64(s + 24); + uint64_t a = Fetch64(s) + (len + Fetch64(s + len - 16)) * k0; + uint64_t b = Rotate(a + z, 52); + uint64_t c = Rotate(a, 37); + a += Fetch64(s + 8); + c += Rotate(a, 7); + a += Fetch64(s + 16); + uint64_t vf = a + z; + uint64_t vs = b + Rotate(a, 31) + c; + a = Fetch64(s + 16) + Fetch64(s + len - 32); + z = Fetch64(s + len - 8); + b = Rotate(a + z, 52); + c = Rotate(a, 37); + a += Fetch64(s + len - 24); + c += Rotate(a, 7); + a += Fetch64(s + len - 16); + uint64_t wf = a + z; + uint64_t ws = b + Rotate(a, 31) + c; + uint64_t r = ShiftMix((vf + ws) * k2 + (wf + vs) * k0); + return ShiftMix(r * k0 + vs) * k2; + } + + // Return a 16-byte hash for 48 bytes. Quick and dirty. + // Callers do best to use "random-looking" values for a and b. + static std::pair WeakHashLen32WithSeeds( + uint64_t w, uint64_t x, uint64_t y, uint64_t z, uint64_t a, uint64_t b) { + a += w; + b = Rotate(b + a + z, 21); + uint64_t c = a; + a += x; + a += y; + b += Rotate(a, 44); + return std::make_pair(a + z, b + c); + } + + // Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. + static std::pair WeakHashLen32WithSeeds( + const char* s, uint64_t a, uint64_t b) { + return WeakHashLen32WithSeeds(Fetch64(s), + Fetch64(s + 8), + Fetch64(s + 16), + Fetch64(s + 24), + a, + b); + } + +public: + // + static uint64_t CityHash64(const char *s, size_t len) { + if (len <= 32) { + if (len <= 16) { + return HashLen0to16(s, len); + } else { + return HashLen17to32(s, len); + } + } else if (len <= 64) { + return HashLen33to64(s, len); + } + + // For strings over 64 bytes we hash the end first, and then as we + // loop we keep 56 bytes of state: v, w, x, y, and z. + uint64_t x = Fetch64(s + len - 40); + uint64_t y = Fetch64(s + len - 16) + Fetch64(s + len - 56); + uint64_t z = HashLen16(Fetch64(s + len - 48) + len, Fetch64(s + len - 24)); + std::pair v = WeakHashLen32WithSeeds(s + len - 64, len, z); + std::pair w = WeakHashLen32WithSeeds(s + len - 32, y + k1, x); + x = x * k1 + Fetch64(s); + + // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks. + len = (len - 1) & ~static_cast(63); + do { + x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1; + y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; + x ^= w.second; + y += v.first + Fetch64(s + 40); + z = Rotate(z + w.first, 33) * k1; + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); + std::swap(z, x); + s += 64; + len -= 64; + } while (len != 0); + return HashLen16(HashLen16(v.first, w.first) + ShiftMix(y) * k1 + z, + HashLen16(v.second, w.second) + x); + } + + static uint64_t CityHash64WithSeed(const char *s, size_t len, uint64_t seed) { + return CityHash64WithSeeds(s, len, k2, seed); + } + + static uint64_t CityHash64WithSeeds(const char *s, size_t len, + uint64_t seed0, uint64_t seed1) { + return HashLen16(CityHash64(s, len) - seed0, seed1); + } + + // A subroutine for CityHash128(). Returns a decent 128-bit hash for strings + // of any length representable in signed long. Based on City and Murmur. + static uint128_t CityMurmur(const char *s, size_t len, uint128_t seed) { + uint64_t a = Uint128Low64(seed); + uint64_t b = Uint128High64(seed); + uint64_t c = 0; + uint64_t d = 0; + signed long l = len - 16; + if (l <= 0) { // len <= 16 + a = ShiftMix(a * k1) * k1; + c = b * k1 + HashLen0to16(s, len); + d = ShiftMix(a + (len >= 8 ? Fetch64(s) : c)); + } else { // len > 16 + c = HashLen16(Fetch64(s + len - 8) + k1, a); + d = HashLen16(b + len, c + Fetch64(s + len - 16)); + a += d; + do { + a ^= ShiftMix(Fetch64(s) * k1) * k1; + a *= k1; + b ^= a; + c ^= ShiftMix(Fetch64(s + 8) * k1) * k1; + c *= k1; + d ^= c; + s += 16; + l -= 16; + } while (l > 0); + } + a = HashLen16(a, c); + b = HashLen16(d, b); + return uint128_t(a ^ b, HashLen16(b, a)); + } + + static uint128_t CityHash128WithSeed(const char *s, size_t len, uint128_t seed) { + if (len < 128) { + return CityMurmur(s, len, seed); + } + + // We expect len >= 128 to be the common case. Keep 56 bytes of state: + // v, w, x, y, and z. + std::pair v, w; + uint64_t x = Uint128Low64(seed); + uint64_t y = Uint128High64(seed); + uint64_t z = len * k1; + v.first = Rotate(y ^ k1, 49) * k1 + Fetch64(s); + v.second = Rotate(v.first, 42) * k1 + Fetch64(s + 8); + w.first = Rotate(y + z, 35) * k1 + x; + w.second = Rotate(x + Fetch64(s + 88), 53) * k1; + + // This is the same inner loop as CityHash64(), manually unrolled. + do { + x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1; + y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; + x ^= w.second; + y += v.first + Fetch64(s + 40); + z = Rotate(z + w.first, 33) * k1; + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); + std::swap(z, x); + s += 64; + x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1; + y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; + x ^= w.second; + y += v.first + Fetch64(s + 40); + z = Rotate(z + w.first, 33) * k1; + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); + std::swap(z, x); + s += 64; + len -= 128; + } while (MY_LIKELY(len >= 128)); + x += Rotate(v.first + z, 49) * k0; + z += Rotate(w.first, 37) * k0; + // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s. + for (size_t tail_done = 0; tail_done < len; ) { + tail_done += 32; + y = Rotate(x + y, 42) * k0 + v.second; + w.first += Fetch64(s + len - tail_done + 16); + x = x * k0 + w.first; + z += w.second + Fetch64(s + len - tail_done); + w.second += v.first; + v = WeakHashLen32WithSeeds(s + len - tail_done, v.first + z, v.second); + } + // At this point our 56 bytes of state should contain more than + // enough information for a strong 128-bit hash. We use two + // different 56-byte-to-8-byte hashes to get a 16-byte final result. + x = HashLen16(x, v.first); + y = HashLen16(y + z, w.first); + return uint128_t(HashLen16(x + v.second, w.second) + y, + HashLen16(x + w.second, y + v.second)); + } + + static uint128_t CityHash128(const char *s, size_t len) { + if (len >= 16) { + return CityHash128WithSeed(s + 16, + len - 16, + uint128_t(Fetch64(s) ^ k3, + Fetch64(s + 8))); + } else if (len >= 8) { + return CityHash128WithSeed(NULL, + 0, + uint128_t(Fetch64(s) ^ (len * k0), + Fetch64(s + len - 8) ^ k1)); + } else { + return CityHash128WithSeed(s, len, uint128_t((uint64_t)k0, (uint64_t)k1)); + } + } +}; // city + +/* + * begin of cache memory base + */ + +// defines all section types +enum mc_sec_type { + MC_SEC_STR = 1, // string table section + MC_SEC_BUF, // buffer table section + MC_SEC_KV, // Key-value section + MC_SEC_KKV, // Key-Key-Val section + MC_SEC_FS, // filesystem cache section + MC_SEC_MAX +}; + +// base class, short for 'cache memory', alloced from metacache. +struct cm { + char __pad[0]; + + // indicates the cache memory startof address. + static char* _vmem; + + // indicates malloc last start vmaddr. + static std::atomic _vmcur; + + // get vmaddr from offset. + static inline void* vmaddr(mc_ptr& offs) + { + return (void*)((uint64_t)_vmem + offs); + } + + // get offset from pointer. + static inline mc_ptr offset(void *ptr) + { + return (mc_ptr)((uint64_t)ptr - (uint64_t)_vmem); + } + + // is cache memory. + static inline bool iscm(void *ptr) { + int64_t off = (uint64_t)ptr - (uint64_t)_vmem; + if (off >= 0 && off < MC_LIMIT) { + return 1; + } + return 0; + } + + // macro for round word size + #define __va_rounded_size(size) \ + ((((size) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) + + // memory alloc from cache memory (word size aligned). + static void *malloc(uint32_t size) + { + if (!_vmcur) return NULL; + if (!size) return NULL; + + void *ptr = NULL; + bool exchanged = false; + do { + char* cur = _vmcur.load(); // currut pointer is not aligned. + char* cur_aligned = (char*)__va_rounded_size((uint64_t)cur); // aligned to word size + uint64_t size_aligned = __va_rounded_size(size); + char* new_aligned = (char*)((uint64_t)cur_aligned + size_aligned); + exchanged = _vmcur.compare_exchange_strong(cur, new_aligned); + //printf("exchanged = %d\n", exchanged); + ptr = (void*)cur_aligned; + } while (!exchanged); + //printf(" %s(%u) = %p\n", __func__, size, ptr); + return ptr; + } + + // alloc memory from cache memory (not aligned). + static void *_alloc(uint32_t size) + { + if (!_vmcur) return NULL; + if (!size) return NULL; + + void *ptr = _vmcur.fetch_add(size); + //printf(" %s(%u) = %p\n", __func__, size, ptr); + return ptr; + } + + // create new cache memory + static void* mmap(void *vmaddr, uint32_t max_size) + { + // attach cache + char *cache = (char*)::mmap(vmaddr, max_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + assert(cache); + + // for malloc + _vmem = cache; + _vmcur.store(cache); + return (void*)cache; + } + + // load cache to process memory + static void* mmap(void *vmaddr, const char *file) + { + int fd; + struct stat s; + + // open file + fd = open(file, O_RDONLY); + assert(fd > 0); + + int rc = fstat(fd, &s); + assert(!rc); + + size_t flen = s.st_size; + printf("%s(%s) = %lu\n", __func__, file, flen); + +#ifdef __linux__ + // file advice + rc = posix_fadvise(fd, 0, flen, POSIX_FADV_SEQUENTIAL | POSIX_FADV_WILLNEED); + assert(rc == 0); +#endif + +#if 1 + char* cache = (char*)::mmap(vmaddr, flen, PROT_READ, MAP_PRIVATE, fd, 0); +#else + void *cache = ::malloc(flen); + rc = read(fd, cache, flen); + assert(rc == flen); +#endif + + assert(cache); + // TBD: turning memory advice + //int rc = madvise(vmaddr, flen, MADV_WILLNEED | MADV_SEQUENTIAL); + //assert(rc == 0); + + // map to global. + _vmem = cache; + _vmcur.store(cache); + return cache; + } + + // save cache memory to file + static int dump(const char* file) + { + std::ofstream f(file, std::ios::binary); + void *ptr = _vmcur; + size_t size = (uint64_t)ptr - MC_DEF_VMADDR; + f.write((char *)MC_DEF_VMADDR, MC_ALIGN_PAGE(size)); + f.close(); + printf("%s(%s) = %lu\n", __func__, file, size); + return 0; + } + + // alloc memory from cache memory, but no delete. + void* operator new(size_t size) { return malloc(size); } + + // do some memory checks. + cm () + { + printf(" %s: addr(%p), iscm(%d)\n", __func__, this, iscm(this)); + // assert if not a cache memory. + assert(iscm(this)); + } +}; + +// mc_ptr for saving memory. +template +struct ptr : cm { + + mc_ptr _offset; // 32b pointer + + /* + * mc_ptr using 32b + * value in mc_ptr is relative offset of the ptr it' self. + */ +#define MC_PTR_OFFS(vma) ((int64_t)vma - (int64_t)this) +#define MC_PTR_ADDR(offs) ((uint64_t)this + offs) + ptr() : _offset(0) + { + } + + ptr(_Tp* v) : _offset(MC_PTR_OFFS(v)) + { + } + + ptr(mc_ptr v) : _offset(MC_PTR_OFFS(v)) + { + } + + // only for Debug + void dbg() + { + printf(" %s:%d addr(%p), offset(%d)\n", __func__, __LINE__, addr(), _offset); + }; + + // ptr to _vmem means null. + inline bool isNull() const + { + // case 1, zero is null, so we DON'T support point to self pointer. + if (_offset == 0) + return true; +#if 0 + // case 2, ponter to the self storage + if (_offset >0 && _offset <4) + return true; +#endif + return false; + } + + // get real pointer + const _Tp* addr() const + { + void *ptr = (void *)MC_PTR_ADDR(_offset); + if (isNull()) { + return NULL; + } + return (_Tp *)ptr; + } + + // get offset value + mc_ptr offset() + { + return _offset; + } + + // overloaded assignment (from pointer) + void operator=(_Tp* v) + { + _offset = MC_PTR_OFFS(v); + } + + // overloaded assignment (from ptr) + void operator=(ptr& p) + { + const _Tp* v = p.addr(); + _offset = MC_PTR_OFFS(v); + } + + // overloaded '->' for directly access + const _Tp* operator->() const { + assert(!isNull()); + return (_Tp *)MC_PTR_ADDR(_offset); + } + + const _Tp& operator*() + { + return *addr(); + } + + // compare + bool operator< (ptr& p) + { + const _Tp *t1 = addr(); + const _Tp *t2 = p.addr(); + return *t1 < *t2; + } + + bool operator> (ptr& p) + { + const _Tp *t1 = addr(); + const _Tp *t2 = p.addr(); + return *t1 > *t2; + } +}; + +// lv structure, holds the Length and Buffer memory. +// L1 : **0 : 7b length <128 bytes +// L2 : *01 : 14b length <16K +// L3 : 011 : 21b length <2M +// L4 : 111 : 29b length <512M +struct lv : cm { + uint8_t _val[0]; + + // ONLY for Little Endian + union u_lv { + struct { + #define LV_L1_B 0 + uint8_t b:1; // b0 + uint8_t l:7; + } L1; + struct { + #define LV_L2_B 1 + uint16_t b:2; // b01 + uint16_t l:14; + } L2; + struct { + #define LV_L3_B 3 + uint32_t b:3; // b011 + uint32_t l:21; + uint32_t __pad:8; + } L3; + struct { + #define LV_L4_B 7 + uint32_t b:3; // b111 + uint32_t l:29; + } L4; + }; + + // get LV_B size + #define MC_LV_B(x) (1<<(x)) + + // default construct + lv() { + printf(" %s: length(%d), buf(%p)\n", __func__, length(), buf()); + } + + // + static int calc_size(int size_buf) { + int size = size_buf; + if (size_buf < MC_LV_B(7)) { // < 128 bytes + size += 1; + } else if (size_buf < MC_LV_B(14)) { // < 16k + size += 2; + } else if (size_buf < MC_LV_B(21)) { // < 2M + size += 3; + } else if (size_buf < MC_LV_B(29)) { // < 512M + size += 4; + } else { + // too large + assert(0); + } + return size; + } + + int length() const + { + int len = 0; + u_lv *u = (u_lv *)_val; + if (u->L1.b == LV_L1_B) { // < 128 bytes + len = u->L1.l; + } else if (u->L2.b == LV_L2_B) { // < 16K + len = u->L2.l; + } else if (u->L3.b == LV_L3_B) { // < 2M + len = u->L3.l; + } else if (u->L4.b == LV_L4_B) { // < 512M + len = u->L4.l; + } else { + // too large + assert(0); + } + return len; + } + + const void* buf() const + { + const void *buf = 0; + u_lv *u = (u_lv *)_val; + if (u->L1.b == LV_L1_B) { // < 128 bytes + buf = &_val[1]; + } else if (u->L2.b == LV_L2_B) { // < 16K + buf = &_val[2]; + } else if (u->L3.b == LV_L3_B) { // < 2M + buf = &_val[3]; + } else if (u->L4.b == LV_L4_B) { // < 512M + buf = &_val[4]; + } else { + // too large + assert(0); + } + return buf; + } + + // get buf pointer and length from lv. + int get(const void* &buf, int &len) + { + u_lv *u = (u_lv *)_val; + if (u->L1.b == LV_L1_B) { // < 128 bytes + len = u->L1.l; + buf = &_val[1]; + } else if (u->L2.b == LV_L2_B) { // < 16K + len = u->L2.l; + buf = &_val[2]; + } else if (u->L3.b == LV_L3_B) { // < 2M + len = u->L3.l; + buf = &_val[3]; + } else if (u->L4.b == LV_L4_B) { // < 512M + len = u->L4.l; + buf = &_val[4]; + } else { + // too large + assert(0); + return -1; + } + return 0; + } + + // copy memory to lv. + int copy(const void *buf, int len) + { + uint8_t *ptr = 0; + u_lv *u = (u_lv *)_val; + if (len < MC_LV_B(7)) { // < 128 bytes + u->L1.b = LV_L1_B; + u->L1.l = len; + ptr = &_val[1]; + } else if (len < MC_LV_B(14)) { // < 16k + u->L2.b = LV_L2_B; + u->L2.l = len; + ptr = &_val[2]; + } else if (len < MC_LV_B(21)) { // < 16k + u->L3.b = LV_L3_B; + u->L3.l = len; + ptr = &_val[3]; + } else if (len < MC_LV_B(29)) { // < 16k + u->L4.b = LV_L4_B; + u->L4.l = len; + ptr = &_val[4]; + } else { + // too large + assert(0); + return -1; + } + + memcpy(ptr, buf, len); + return 0; + } + + static int set_length(uint8_t *ptr, int len) + { + u_lv *u = (u_lv *)ptr; + if (len < MC_LV_B(7)) { // < 128 bytes + u->L1.b = LV_L1_B; + u->L1.l = len; + } else if (len < MC_LV_B(14)) { // < 16k + u->L2.b = LV_L2_B; + u->L2.l = len; + } else if (len < MC_LV_B(21)) { // < 16k + u->L3.b = LV_L3_B; + u->L3.l = len; + } else if (len < MC_LV_B(29)) { // < 16k + u->L4.b = LV_L4_B; + u->L4.l = len; + } else { + // too large + assert(0); + return -1; + } + return 0; + } + + // create a lv structure with specified size of buffer. + void *operator new (size_t size_lv, int size_buf) { + uint32_t size = calc_size(size_lv + size_buf); + printf("%s(%lu,%d)\n", __func__, size_lv, size_buf); + uint8_t *ptr = (uint8_t *)cm::malloc(size); + set_length(ptr, size_buf); + return ptr; + } + + private: + // space MUST be reserved. + void *operator new (size_t count) { + printf("%s(%lu)\n", __func__, count); + return cm::malloc(count);; + }; +}; + +/* simple a string table based on LV. + * all the string was insert to a tree + * same strings only saved once + */ +struct sz : cm { + ptr _lv; // string data + + // return the string buffer size (NOT whole LV size) + int size() const + { + return _lv->length(); + } + + // return the string in const char* + const char* c_str() + { + return (const char *)_lv->buf(); + } + + // TBD: converge the same string for space reducing. + static std::map> _map; // hold a global map of string to CM mapping. + + // disable consturctor without string. + sz() = delete; + + // constructor by std::string + sz(const std::string &s) { + int len = s.size(); + const char* buf = s.c_str(); + lv *v = new(len) lv; + _lv = v; + v->copy(buf, len); + } + + // constructor by char* + sz(const char* s) { + int len = strlen(s); + const char* buf = s; + lv *v = new(len) lv; + _lv = v; + v->copy(buf, len); + } +}; + +// triple union +template +struct triple : cm { + T1 first; + T2 second; + T3 third; +}; + +template +inline triple mk_triple(const T1& _t1, const T2& _t2, const T3& _t3) +{ + return triple(_t1, _t2, _t3); +} + +struct metacache_w; + +struct _wT { + /* + * Data with relationship maintained in heap memory, + * Classes hold the data and duty to write Cache memory calls a Writer, + * with a _w in each class/structure, + * operating from heap to CM calls 'makeup'. + * + * to omit vtable pointer, _wT has nothing in context. + */ +}; + + +/* Begin of basic structure. + */ + + +struct int_w { + typedef int raw_type; + + int _value; + + int_w() : _value(0) + { + } + + int_w(int _v) : _value(_v) + { + } + + friend std::ostream& operator<<(std::ostream& os, int_w& v) + { + os << v._value; + return os; + } + + // compare to self + bool operator< (const int_w& v) const + { + return _value < v._value; + } + + bool operator> (const int_w& v) const + { + return _value > v._value; + } + + bool operator== (const int_w& v) const + { + return _value == v._value; + } + + void *makeup(raw_type& _v) + { + _v = _value; + return &_v; + } +}; + +/* String + */ +struct str : cm { + ptr _str; // char string. + + int size() + { + return strlen(_str.addr()); + } + + const char* c_str() const + { + return _str.addr(); + } + + // support str compare to std::string + bool operator< (const std::string& v) const + { + return strcmp(_str.addr(), v.c_str()) < 0; + } + + bool operator> (const std::string& v) const + { + return strcmp(_str.addr(), v.c_str()) > 0; + } + bool operator== (const std::string& v) const + { + return strcmp(_str.addr(), v.c_str()) == 0; + } + + // compare to char* + bool operator< (const char* v) const + { + return strcmp(_str.addr(), v) < 0; + } + + bool operator> (const char* v) const + { + return strcmp(_str.addr(), v) > 0; + } + + // compare to str + bool operator< (str& v) + { + const char *p1 = _str.addr(); + const char *p2 = v.c_str(); + return strcmp(p1, p2) < 0; + } + + bool operator> (str& v) + { + const char *p1 = _str.addr(); + const char *p2 = v.c_str(); + return strcmp(p1, p2) > 0; + } + bool operator== (str& v) + { + const char *p1 = _str.addr(); + const char *p2 = v.c_str(); + return strcmp(p1, p2) == 0; + } + + friend std::ostream& operator<<(std::ostream& os, str& v) + { + os << v._str.addr(); + return os; + } +}; + +#if 0 // TBD: std::string compare to str. +inline bool operator> (const str& d, const std::string& s) +{ + return strcmp(d.c_str(), s.c_str()) > 0; +} + +inline bool operator< (const str& d, const std::string& s) +{ + return strcmp(d.c_str(), s.c_str()) < 0; +} + +inline bool operator== (const str& d, const std::string& s) +{ + return strcmp(d.c_str(), s.c_str()) == 0; +} + +inline bool operator> (const std::string& s, const str& d) +{ + return strcmp(s.c_str(), d.c_str()) > 0; +} + +inline bool operator< (const std::string& s, const str& d) +{ + return strcmp(s.c_str(), d.c_str()) < 0; +} + +inline bool operator== (const std::string& s, const str& d) +{ + return strcmp(s.c_str(), d.c_str()) == 0; +} +#endif + +// the string writer +struct str_w : _wT { + /* all the strings metacache used will be writed to separate section. + * string writed by char[] and closed by '\0'. + * string table didn't align by word width. + */ + + typedef str raw_type; // raw type in cache memory + + // represent a sz in cache_memory. + std::string _sz; // reference to key string + uint64_t _hash; // hash value in 64b + char *_cm_ptr; // pointer to chr[] in cache memory. + + std::vector _pending_slots; // ptr<> slot in cache waiting update + + // constructor + str_w() : _hash(0), _cm_ptr(0) + { + } + + // global strs + static std::set _set_str; + + str_w(const char* s) : _sz(s), _hash(0), _cm_ptr(0) + { + // calculate hash value + _hash = city::CityHash64(s, strlen(s)); + } + + str_w(const std::string& s) : _sz(s), _hash(0), _cm_ptr(0) + { + // calculate hash value + _hash = city::CityHash64(s.c_str(), s.size()); + } + + // show char[] + const char*c_str() + { + return _sz.c_str(); + } + + friend std::ostream& operator<<(std::ostream& os, str_w& v) + { + os << v._sz; + return os; + } + + // assignment operator + str_w& operator= (const std::string& s) + { + _sz = s; + return *this; + } + + str_w& operator= (const char* s) + { + _sz = s; + return *this; + } + + // relative operator + bool operator< (const str_w& v) const + { + //return _sz < v._sz; + return strcmp(_sz.c_str(), v._sz.c_str()) < 0; + } + + bool operator> (const str_w& v) const + { + //return _sz > v._sz; + return strcmp(_sz.c_str(), v._sz.c_str()) > 0; + } + + bool operator== (const str_w& v) const + { + //return _sz == v._sz; + return strcmp(_sz.c_str(), v._sz.c_str()) == 0; + } + + // calculate size, include '\0' + int calc_size() + { + return _sz.length() + 1; + } + + // makeup a string cache on specified address + int makeup(void* m) + { + if (_cm_ptr) { + return -1; + } + memcpy(m, _sz.c_str(), _sz.length()+1); + _cm_ptr = (char *)m; + return 0; + } + + void *makeup() + { + void *m= cm::_alloc(calc_size()); + makeup(m); + return m; + } + + void *makeup(raw_type& _v) + { + char *m = (char *)makeup(); + _v._str = m; + return &_v; + } +}; + +// pair +template +struct pair { + T1 first; + T2 second; + + pair() {} + pair(const T1& _t1, const T2& _t2) : first(_t1), second(_t2) {} + + + bool operator< (const pair& _v) const + { + return (first < _v.first) || \ + ((first == _v.first) && (second < _v.second)); + } + bool operator> (const pair& _v) const + { + return (first > _v.first) || \ + ((first == _v.first) && (second > _v.second)); + } + + template + bool operator< (const pair& _v) const + { + return (first < _v.first) || \ + ((first == _v.first) && (second < _v.second)); + } + template + bool operator> (const pair& _v) const + { + return (first > _v.first) || \ + ((first == _v.first) && (second > _v.second)); + } +}; + +// same as std::pair +template +struct pair_w : _wT { + T1 first; + T2 second; + + typedef pair raw_type; + + pair_w() {} + pair_w(const T1& _t1, const T2& _t2) : first(_t1), second(_t2) {} + + bool operator< (const pair_w& _v) const + { + return (first < _v.first) || \ + ((first == _v.first) && (second < _v.second)); + } + bool operator> (const pair_w& _v) const + { + return (first > _v.first) || \ + ((first == _v.first) && (second > _v.second)); + } + + friend std::ostream& operator<<(std::ostream& os, pair_w& v) + { + os << v.first << "," << v.second; + return os; + } + + + void *makeup(raw_type& _v) + { + first.makeup(_v.first); + second.makeup(_v.second); + return &_v; + } +}; + +inline pair_w kkeyw(const std::string& _t1, const std::string& _t2) +{ + return pair_w(_t1, _t2); +} + +// simple buffer storage +struct buf : cm { + ptr _lv; + + // return the buffer size (NOT whole LV size) + int size() const + { + return _lv->length(); + } + + // return the begin of buffer space. + const void* buffer() const + { + return _lv->buf(); + } + + buf(int size) + { + lv *v = new(size) lv; + _lv = v; + } +}; + +// the buffer writer +struct buf_w : _wT { + /* buf_w dosen't copy the data from buf, + * shoule keep origin buffer valid until makeup. + */ + + typedef buf raw_type; // raw type in cache memory. + + const void *_buf; // the buffer pointer in memory. + uint32_t _size; // the size of buffer. + lv *_cm_lv; // pointer to len-val structure in Cache memory. + + std::vector _pending_slots; // ptr<> in cache waiting for update + + buf_w() : _buf(0), _size(0), _cm_lv(0) + { + + } + + buf_w(const void *buf, uint32_t size) : _buf(buf), _size(size), _cm_lv(0) + { + + } + + friend std::ostream& operator<<(std::ostream& os, buf_w& v) + { + os << "buf(" << v._size << ")"; + return os; + } + + int calc_size() + { + return lv::calc_size(_size); + } + + int makeup(void* m) + { + lv *v = (lv*)m; + v->copy(_buf, _size); + _cm_lv = v; + return 0; + } + + void *makeup() + { + void *m= cm::_alloc(calc_size()); + makeup(m); + return m; + } + + void *makeup(raw_type& _v) + { + void *m = makeup(); + _v._lv = (lv *)m; + return &_v; + } + + // relative operator + bool operator< (const buf_w& v) const + { + return _buf < v._buf; + } +}; + +/* Begin of containers + */ + +// Balance Factor MC_PTR +// MUST aligned with 4 bytes, last 2b is for balance factor. +template +struct bfptr : cm { + mc_ptr _offset; + + /* bf : -2, -1, 0, 1 + */ +#define MC_PTR_OFFS(vma) ((int64_t)vma - (int64_t)this) +#define MC_PTR_ADDR(offs) ((uint64_t)this + offs) + bfptr() : _offset(MC_PTR_OFFS(0)) + { + assert(((uint64_t)this&3) == 0); + } + bfptr(T* v) : _offset(MC_PTR_OFFS(v)) + { + assert(((uint64_t)v&3) == 0); + } + bfptr(mc_ptr v) : _offset(MC_PTR_OFFS(v)) + { + assert((v&3) == 0); + } + +#define MC_BFPTR_VAL(x) ((x)&~(3)) +#define MC_BFPTR_BF(x) ((x)&3) + + // only for Debug + void dbg() + { + printf(" %s:%d addr(%p), offset(%d)\n", __func__, __LINE__, addr(), _offset); + }; + + // ptr to _vmem means null. + inline bool isNull() + { + return (int32_t)MC_PTR_OFFS(0) == (int32_t)MC_BFPTR_VAL(_offset); + } + + void set_bf(int bf) + { + mc_ptr l = 0; + if (bf < -1) { + l = 3; // b11 -1 + } else if (bf == -1) { + l = 2; // b10 -2 + } else if (bf >= 1) { + l = 1; // b01 1 + } + _offset = (MC_BFPTR_VAL(_offset)) | (MC_BFPTR_BF(l)); + } + + int bf() + { + mc_ptr l = _offset & 3; + if (l == 1) { // b01 1 + return 1; + } else if (l == 2) { // b10 -2 + return -1; + } else if (l == 3) { // b11 -1 + return -2; + } + return 0; + } + + // get real pointer + T* addr() + { + void *ptr = (void *)MC_PTR_ADDR(MC_BFPTR_VAL(_offset)); + if (isNull()) { + return 0; + } + return (T *)ptr; + } + + // get offset value + mc_ptr offset() + { + return _offset; + } + + // overloaded assignment (from pointer) + void operator=(T* v) + { + _offset = MC_PTR_OFFS(v); + } + + // overloaded assignment (from ptr) + void operator=(bfptr& p) + { + mc_ptr bf = p.bf(); + T* v = p.addr(); + _offset = MC_PTR_OFFS(v) | bf; + } + + // overloaded '->' for directly access + T* operator->() { + assert(!isNull()); + return (T *)MC_PTR_ADDR(MC_BFPTR_VAL(_offset)); + } + +}; + +// binary tree +template +struct bintree : cm { + // type defination + typedef _K key_type; + typedef _V data_type; + //typedef pair< _K, _V > value_type; + + // node object in + struct node : cm { // Node in tree + ptr _left, _right; // left and right children + //value_type _value; // key and value storing in pair + key_type _key; + data_type _data; + + // constructor + node() + { + } + + // constructor with data + node(key_type& key, data_type& value) + { + _key = key; + _data = value; + } + + // constructor with data + node(key_type key, data_type value) + { + _key = key; + _data = value; + } + }; + + // binary tree header. + ptr _root; // pointer to first node + node _nodes[0]; // all nodes + + // find bintree, return pointer to value. + const data_type* find(const key_type& k) + { + const node *cur = _root.addr(); + + while (cur) + { + // left < right + if (k < cur->_key) { + cur = cur->_left.addr(); + } else if (k > cur->_key) { + cur = cur->_right.addr(); + } else { // equal + return &cur->_data; + } + } + + // not found + return NULL; + } + + const data_type* find(const std::string& k) + { + const node *cur = _root.addr(); + + while (cur) + { + // left < right + if (cur->_key > k) { + cur = cur->_left.addr(); + } else if (cur->_key < k) { + cur = cur->_right.addr(); + } else { // equal + return &cur->_data; + } + } + + return NULL; + } + + const data_type* find(const std::string& k1, const std::string& k2) + { + const node *cur = _root.addr(); + + pair key(k1, k2); + + while (cur) + { + // left < right + if (cur->_key > key) { + cur = cur->_left.addr(); + } else if (cur->_key < key){ + cur = cur->_right.addr(); + } else { // equal + return &cur->_data; + } + } + + return NULL; + } + +}; + +// Hash Table +template +struct hashtbl : cm { + // TBD +}; + +// the shadow avltree writer +template +struct avltree_w { + + // type declare + typedef _K key_type; + typedef _V data_type; + + // raw memory type declare + typedef typename key_type::raw_type raw_key_type; + typedef typename data_type::raw_type raw_data_type; + typedef bintree bintree_type; + + + // tree node holder + struct node_w { + node_w *_left, *_right; // children + node_w *_parent; // parent node + int _height; + + key_type _key; // key + data_type _data; // value + + typename bintree_type::node *_mc_node; // metacache node + + // constructor + node_w(const key_type& k) : _left(0), _right(0), _parent(0), _mc_node(0) + { + _key = k; + } + + }; + + // avltree + node_w *_root; // root node + int _size; // how many nodes in tree. + + + // avltree constructor + avltree_w() : _root(0), _size(0) + { + + } + + // get height from root-node + int _height (node_w *rn) + { + if (rn == NULL) { + return 0; // blank tree has 0 height. + } + + return rn->_height; + } + + // four rotations + node_w *_rotation_LL(node_w *rn) + { + node_w* n; + + // right rotate + // rn n + // n ==> l rn + // l r r + n = rn->_left; + rn->_left = n->_right; + n->_right = rn; + + n->_parent = rn->_parent; + rn->_parent = n; + if (rn->_left) + rn->_left->_parent = rn; + + rn->_height = MAX(_height(rn->_left), _height(rn->_right)) + 1; + n->_height = MAX(_height(n->_left), rn->_height) + 1; + return n; + } + + node_w *_rotation_RR(node_w *rn) + { + node_w* n; + + // left rotate + // rn n + // n ==> rn r + // l r l + n = rn->_right; + rn->_right = n->_left; + n->_left = rn; + + n->_parent = rn->_parent; + rn->_parent = n; + if (rn->_right) + rn->_right->_parent = rn; + + rn->_height = MAX(_height(rn->_left), _height(rn->_right)) + 1; + n->_height = MAX(_height(n->_right), rn->_height) + 1; + return n; + } + + node_w *_rotation_LR(node_w *rn) + { + rn->_left = _rotation_RR(rn->_left); + return _rotation_LL(rn); + } + + node_w *_rotation_RL(node_w *rn) + { + rn->_right = _rotation_LL(rn->_right); + return _rotation_RR(rn); + } + + node_w* _insert(node_w* &tree, const key_type& key, node_w* &found) + { + if (tree == NULL) { + // new node + tree = new node_w(key); + assert(tree); + found = tree; + _size++; + + } else if (key < tree->_key) { // left < right + + // insert to left tree + tree->_left = _insert(tree->_left, key, found); // recursive + if (!tree->_left->_parent) + tree->_left->_parent = tree; + + // balance the tree + if ((_height(tree->_left) - _height(tree->_right)) == 2) { + if (key < tree->_left->_key) { + tree = _rotation_LL(tree); + } else { + tree = _rotation_LR(tree); + } + } + } else if (key > tree->_key) { + + // insert to right tree + tree->_right = _insert(tree->_right, key, found); // recursive + if (!tree->_right->_parent) + tree->_right->_parent = tree; + + // balance the tree + if (_height(tree->_right) - _height(tree->_left) == 2) { + if (key > tree->_right->_key) { + tree = _rotation_RR(tree); + } else { + tree = _rotation_RL(tree); + } + } + } else { // equal + // nothing changed + found = tree; + } + + // calculate new height + tree->_height = MAX(_height(tree->_left), _height(tree->_right)) + 1; + return tree; + } + + void _print(node_w* tree, key_type& key, int direction) + { + if(!tree) { + return; + } + + if(direction) { // left:0 , right:1 + std::cout << tree->_key << " is " << key << "'s " << (direction==1?"right child" : "left child") << std::endl; + if (tree->_parent) + std::cout << tree->_key << "'s parent is " << tree->_parent->_key << std::endl; + } else { + std::cout << tree->_key << " is root" << std::endl; + } + + _print(tree->_left, tree->_key, -1); + _print(tree->_right,tree->_key, 1); + } + + /* + * public methods + */ + // + data_type& insert(const key_type& key) + { + node_w *found; + _insert(_root, key, found); + //_print_node(*found); + return found->_data; + } + + // using [] for convenience + // eg. a[k] = v; + data_type& operator[] (const key_type& k) + { + //printf(" avltree_w[%s]\n", k.c_str()); + return insert(k); + } + + // debug print + void debug_print() + { + if (!_root) { + return; + } + _print(_root, _root->_key, 0); + } + + // total node count + int size() + { + return _size; + } + + int calc_size() + { + // 4 + 16*count + int size = sizeof(bintree_type) + (sizeof(typename bintree_type::node) * _size); + return size; + } + + typedef void (*pfWalkCB)(node_w& n); + static void _print_node(node_w& n) + { + + std::cout << n._key << ": "; + if (n._parent) + std::cout << "P(" << n._parent->_key << ") "; + if (n._left) + std::cout << "L(" << n._left->_key << ") "; + if (n._right) + std::cout << "R(" << n._right->_key << ") " ; + std::cout << "= " << n._data << std::endl; + } + + void walk_inorder(pfWalkCB fn = _print_node) + { + node_w *ptr = _root; + + while (ptr && ptr->_left) { + ptr = ptr->_left; + } + // reach most left + + while (ptr) + { + /* 7 + * 4 13 + * 2 6 11 15 + * 1 3 5 9 12 14 16 + * 8 10 + */ + (*fn)(*ptr); + if (ptr->_right) { + ptr = ptr->_right; + while (ptr->_left) { + ptr = ptr->_left; + } + } else { + node_w* p = ptr->_parent; + while (p && p->_right == ptr) { + ptr = p; + p = p->_parent; + } + if (ptr->_right != p) + ptr = p; + } + } + } + + void walk_preorder(pfWalkCB fn = _print_node) + { + node_w*ptr = _root; + + while (ptr) { + (*fn)(*ptr); + if (ptr->_left) { + ptr = ptr->_left; + } else if(ptr->_right) { + ptr = ptr->_right; + } else { + node_w *p = ptr->_parent; + while (p) { + if ( ptr == p->_left && p->_right) { // ptr is p's left child + ptr = p->_right; + break; + } else { // ptr is p's right child + ptr = p; + p = p->_parent; + } + } + if (!p) { + ptr = p; + } + } + } + } + + void walk_postorder(pfWalkCB fn = _print_node) + { + // TBD + } + + void _makeup(typename bintree_type::node *m) + { + using list_node_type = std::list; + list_node_type ln, ln_pending; + + if (!_root) + return; + + typename bintree_type::node *nod = m; + + // add first entry + ln.push_back(_root); + + for(;;) { + while(!ln.empty()) + { + node_w *p = ln.front(); + + //_print_node(*p); + p->_mc_node = nod; + + // makeup key and data + p->_key.makeup(nod->_key); + p->_data.makeup(nod->_data); + + // has child, add to next round. + if (p->_left) { + ln_pending.push_back(p->_left); + } + if (p->_right) { + ln_pending.push_back(p->_right); + } + + // has parent, update parent's child to me. + if (p->_parent) { + typename bintree_type::node *pn = p->_parent->_mc_node; + if (p == p->_parent->_left) { + pn->_left = nod; + } else { + pn->_right = nod; + } + } + ln.pop_front(); // pop + nod++; + } + + if (ln_pending.empty()) { // exit condition + break; + } + + ln.swap(ln_pending); + } + } + + // makeup the bintree in metacache + void makeup(void *_m) + { + bintree_type *r = (bintree_type*)_m; + _makeup(r->_nodes); + r->_root = r->_nodes; + } + + void *makeup() + { + void *m = cm::malloc(calc_size()); + makeup(m); + return m; + } +}; + +// kv cache reader +template +struct kv { + typedef _K key_type; + typedef _V data_type; + + typedef bintree<_K,_V> bintree_type; + + bintree_type *_tree; + + kv (const void *_m) : _tree((bintree_type*)_m) + { + + } + + const data_type* find(const std::string& _k) + { + return _tree->find(_k); + } + +}; + +// KV cache writer +template +struct kv_w : _wT { + typedef _K key_type; + typedef _V data_type; + + // raw memory type declare + typedef typename key_type::raw_type raw_key_type; + typedef typename data_type::raw_type raw_data_type; + + typedef avltree_w<_K, _V> writer_type; + + // avltree + writer_type _tree; + + kv_w() + { + } + + data_type& operator[] (const key_type& key) + { + return _tree.insert(key); + } + + int size() + { + return _tree.size(); + } + + // return cache memory size. + int calc_size() + { + return _tree.calc_size(); + } + + void* makeup() + { + return _tree.makeup(); + } +}; + +// kv cache reader +template +struct kkv { + typedef _K1 key1_type; + typedef _K2 key2_type; + typedef _V data_type; + + typedef bintree,_V> bintree_type; + + bintree_type *_tree; + + kkv (const void *_m) : _tree((bintree_type*)_m) + { + + } + + const data_type* find(const std::string& _k1, const std::string& _k2) + { + return _tree->find(_k1, _k2); + } +}; + + +// KKV cache writer +template +struct kkv_w : _wT { + typedef _K1 key1_type; + typedef _K2 key2_type; + typedef _V data_type; + + // raw memory type declare + typedef typename key1_type::raw_type raw_key1_type; + typedef typename key1_type::raw_type raw_key2_type; + typedef typename data_type::raw_type raw_data_type; + + typedef avltree_w, _V> writer_type; + + // avltree + writer_type _tree; + + kkv_w() + { + } + + data_type& operator[] (const pair_w& key) + { + return _tree.insert(key); + } + + int size() + { + return _tree.size(); + } + + // return cache memory size. + int calc_size() + { + return _tree.calc_size(); + } + + void* makeup() + { + return _tree.makeup(); + } +}; + + +template +struct arr +{ + uint32_t _size; + _T _array[0]; + + arr() : _size(0) {} + + int size() + { + return _size; + } + + _T& at(int _i) + { + return _array[_i]; + } + + _T& operator[] (int _i) + { + return at(_i); + } +}; + +template +struct arr_w +{ + typedef typename _T::raw_type raw_type; + + std::vector<_T> _vector; + + int size() + { + return _vector.size(); + } + + _T& at(int _i) + { + return _vector[_i]; + } + + void push_back(const _T& _v) + { + _vector.push_back(_v); + } + + _T& operator[] (int _i) + { + return _vector[_i]; + } + + int calc_size(int count) + { + return sizeof(arr<_T>) + (sizeof(_T)*count); + } + + int makeup(void* _m) + { + return 0; + } +}; + +// metacache in raw memory. +struct metacache : cm { + + // holds the entry of metacache. + #define MC_HDR_MAGIC "STONE_METACACHE" + const char magic[16] = MC_HDR_MAGIC; // MC_HDR_MAGIC + + // sections table + ptr slots[16]; + + // create a new metacache + static metacache *create(uint32_t size) + { + void *ptr = cm::mmap((char*)MC_DEF_VMADDR, size); + assert(ptr); + return new metacache(); + } + + // load a existed metacache + static metacache *load(const char* file) + { + metacache* mc = (metacache *)cm::mmap((char*)MC_DEF_VMADDR, file); + assert(mc); + printf("metacache loaded on %p.\n", mc); + return mc; + } + + // save metacache to file + static int savefile(const char* file) + { + return cm::dump(file); + } + + const void* get_slots(int _index) + { + return slots[_index].addr(); + } + + int set_slots(int _index, const void *_vma) + { + if (_index < 0 || _index > 15) { + return -1; + } + + slots[_index] = (char*)_vma; + printf("%d: %p, offset(%d)\n", _index, _vma, slots[_index].offset()); + return 0; + } + +}; + +struct lstat { + ptr _data; // cached file context + //uint16_t mode; // rwx r--r--r--(444) + //uint16_t uid; // owner of user-id === root(0) + //uint16_t gid; // owner of group-id === root(0) + //uint16_t num_dentry; // how many dentries the inode refered to +}; + +struct inode { + ptr _name; // name of the file/dir + ptr _stat[0]; // + //uint32_t _size:28; // file size + //uint32_t _type:4; // file, dir, symbollink ... +}; + +class real_path_scope { + std::string _path; + const char *_real_path; + int _errno; + const char *_delim = "/"; // linux path +public: + real_path_scope(const char *p): _path(p) { + _real_path = realpath(p, NULL); + //_real_path = canonicalize_file_name(p); + _errno = errno; + } + + ~real_path_scope() { + if (_real_path) + ::free((void *)_real_path); + } + + const char* path() + { + return _path.c_str(); + } + + const char* real_path() + { + return _real_path; + } + + int error() + { + return _errno; + } + + bool entry_check(std::string& entry) + { + if (!_real_path) { + return false; + } + std::string s(_real_path); + if (s.length() > entry.length() && + s.find(entry) == 0) { + return true; + } + return false; + } + + // split path to names + bool entry_split(std::string& entry, std::vector& vpath) + { + if (!_real_path) { + return false; + } + + std::string s(_real_path); + size_t start = 0; // _entry_realpath.length(); + size_t end = entry.length(); + while ((start = s.find_first_not_of(_delim, end)) != std::string::npos) + { + end = s.find(_delim, start); + vpath.push_back(s.substr(start, end - start)); + } + return true; + } +}; + +// hold a inode in mc writer +struct inode_w { + uint32_t _ino; + std::string _name; + std::string _real_path; + struct stat64 _stat; + uint32_t _parent_ino; + inode_w() {} + inode_w(uint32_t n) : _ino(n) + { + + } +}; + +#include + +#if defined(RTLD_NEXT) +# define REAL_LIBC RTLD_NEXT +#else +# define REAL_LIBC ((void *) -1L) +#endif + +struct fs_op { + typedef int fn_xstat64(int ver, const char * path, struct stat64 * stat_buf); + typedef int fn_lxstat64(int ver, const char * path, struct stat64 * stat_buf); + typedef int fn_open64(const char *pathname, int flags, ...); + typedef ssize_t fn_read(int fd, void *buf, size_t count); + typedef ssize_t fn_pread64(int fd, void *buf, size_t count, off_t offset); + typedef long fn_syscall(long number, ...); + + fn_xstat64 *_real_xstat64; + fn_lxstat64 *_real_lxstat64; + fn_open64 *_real_open64; + fn_read *_real_read; + fn_pread64 *_real_pread64; + fn_syscall *_real_syscall; + + template + void _hook(const char* fn, T *& pf) + { + pf = (T*) dlsym(REAL_LIBC, fn); + } + + void inject() + { + + } +}; + +// fs entry, holds a dir entry cache. +struct fs_w : _wT { + std::string _entry; // the entry dir name + std::string _entry_realpath; // the entry dir real path + + typedef std::pair tree_key_t; + typedef std::map inode_tree_t; + inode_tree_t _tree; // fs tree + + std::vector _tbl_inodes; // all inodes + int _ino_next; // next inode index, from 1 + inode_w * _root; // root inode + + /* + * Please take attention to MT-safe + */ + + struct op_cnt + { + uint32_t _stat; + uint32_t _open; + + op_cnt() : _stat(0), _open(0) + { + } + }; + + std::map _records; + + fs_w(const char* d) : _entry(d), _ino_next(1), _root(0) + { + real_path_scope rp(d); + _entry_realpath = rp.real_path(); + + // add root inode to tree + _root = new inode_w(_ino_next++); + _root->_name = _entry; + _root->_real_path = _entry_realpath; + tree_key_t key = std::make_pair(0, _entry); + _tree[key] = _root; + } + + // TBD: change to shared_ptr + inode_w* get_inode(std::vector& vpath) + { + inode_w* parent = _root; + inode_w* file; + for (size_t i=0; i_ino, vpath[i]); + inode_tree_t::iterator it = _tree.find(key); + if (it == _tree.end()) { + file = new inode_w(_ino_next++); + file->_name = vpath[i]; + file->_parent_ino = parent->_ino; + _tree[key] = file; + } else { + file = it->second; + } + parent = file; + } + return file; + } + + // cache for stat + int stat(const char* path) + { + real_path_scope rp(path); + if (rp.entry_check(_entry_realpath)) { + _records[rp.real_path()]._stat++; + + std::vector vpath; + if(rp.entry_split(_entry_realpath, vpath)) { + inode_w* f = get_inode(vpath); + f->_real_path = rp.real_path(); + std::cout << f->_name << std::endl; + } + } +#if 0 + const char *real_path = rp.real_path(); + if (!real_path) { + return rp.error(); + } + + std::string s(real_path); + const char *delim = "/"; + if (s.find(_entry_realpath) == 0) // match + { + //printf("%s: %s\n", __func__, path); + size_t start = 0; // _entry_realpath.length(); + size_t end = _entry_realpath.length(); + while ((start = s.find_first_not_of(delim, end)) != std::string::npos) + { + end = s.find(delim, start); + std::cout << " " << s.substr(start, end - start); + } + std::cout << std::endl; + } +#endif + return 0; + } + + // cache for read + int open(const char *path) + { + real_path_scope rp(path); + if (rp.entry_check(_entry_realpath)) { + _records[rp.real_path()]._open++; + } + return 0; + } + +#if 0 + int readdir(const char *path) + { + return 0; + } +#endif + + void makeup() + { + + } + + void debug_print() + { + // show records table + printf("Records table: %lu\n", _records.size()); + printf("%4s %4s %s\n", "STAT", "OPEN", "FILE_PATH"); + auto it = _records.begin(); + for (; it != _records.end(); it++) { + printf("%4u %4u %s\n", it->second._stat, it->second._open, it->first.c_str()); + } + + // show tree + auto it2 = _tree.begin(); + for (; it2 != _tree.end(); it2++) { + printf("(%u,%s), %u, %s\n", it2->first.first, it2->first.second.c_str(), it2->second->_ino, it2->second->_real_path.c_str()); + } + } +}; + +struct fsal { + + int _pathat(const std::string& path) + { + return 0; // inode + } + + int xstat64(int ver, const char *path, struct stat64 *buf) + { + + return 0; + } +}; + +// hold the metacache entry +struct metacache_w : _wT { + /* + * write all data with relation to host memory, + * then makeup a metacache in cache memory. + */ + + // represent a cache section + struct sec_w { + mc_sec_type _type; // indicate the which reader to read the section. + void *_cm_start; // start address of the section in cache memory. + uint32_t _size; // size of the section, aliged word width. + }; + + struct sec_kv { + const std::string _name; + void *_cm_start; + uint32_t _size; + + sec_kv(const std::string& table, void *start, int size) : + _name(table), _cm_start(start), _size(size) + { + + } + + }; + + std::set _set_str; // string table writer + std::set _set_buf; // buffer table writer + std::set _set_kv; + + // add string to table + const str_w& str(const std::string& s) + { + str_w w(s); + auto it = _set_str.insert(w); + printf(" wc::str('%s'), hash(%" PRIx64 "), cmptr(%p)\n", w._sz.c_str(), w._hash, w._cm_ptr); + return *it.first; + } + + // add buffer to table + const buf_w& buf(const void* buf, int len) + { + buf_w w(buf, len); + auto it = _set_buf.insert(w); + return *it.first; + } + + // add kv_table + template + int create_kv(kv_w<_K, _V>& _kv) + { + return 0; + } + + // make the whole data to cache memory. + void makeup() + { + + } +}; + +}; // namespace metacache +}; // namespace strontium + +#endif // _STRONTIUM_METACACHE_H_ + +#undef MY_LIKELY +#undef MY_UNLIKELY \ No newline at end of file diff --git a/deps/metacache/readme.md b/deps/metacache/readme.md new file mode 100644 index 00000000000..de201bbfed7 --- /dev/null +++ b/deps/metacache/readme.md @@ -0,0 +1,2 @@ +mkdir build; cd build && cmake .. && make + diff --git a/deps/metacache/test_avl.cc b/deps/metacache/test_avl.cc new file mode 100644 index 00000000000..c5c71658ac3 --- /dev/null +++ b/deps/metacache/test_avl.cc @@ -0,0 +1,340 @@ +#include +#include +#include "metacache.h" + +using namespace strontium::metacache; + +MC_GLOBAL(); + +void test_malloc(metacache *mc) +{ + // TEST, malloc always aligned + char *a = (char*)cm::malloc(4); + assert(((uint64_t)a&0x3) == 0); + + // TEST _alloc() without align + char *c1 = (char*)cm::_alloc(1); + assert(((a + 1) == c1) == 0); + char *c2 = (char*)cm::_alloc(1); + assert(((a + 2) == c2) == 0); + char *c3 = (char*)cm::_alloc(1); + assert(((a + 3) == c3) == 0); + // leave a byte + + // TEST malloc aligned + char *b = (char*)cm::malloc(4); + assert(((uint64_t)b&0x3) == 0); + assert(((a + 4) == b) == 0); +} + +void test_ptr(metacache *mc) +{ + struct t1 : cm { + ptr parent, left, right; + int i; + + t1(int x): i(x) {} + }; + + // template ptr should only 4bytes. + assert(sizeof(ptr) == 4); + + // [TEST 1] not allow alloc ptr in stack. (runtime error) + //ptr n; + + + // [TEST 2] convert mc_ptr to ptr. + int *x1 = (int *)cm::malloc(sizeof(int)); // create a int in cache memory + ptr *x2 = new ptr; // create a ptr in cm + *x2 = x1; // ptr pointer to x1 + // now the x2 pointer pointed to x1 in cache memory. + assert(x2->addr() == x1); + + // [TEST 3] test ptr assign + ptr *x3 = new ptr; // get a new pointer + *x3 = *x2; + assert(x2->addr() == x3->addr()); + + // [TEST 4] struct referentce + t1 *a = new t1(1); //new 3 t1 struct holds in a,b,c + t1 *b = new t1(2); + t1 *c = new t1(3); + + /* + * a + * / \ + * b c + */ + b->parent = a; // set reference + c->parent = a; + a->left = b; + a->right = c; + + b->parent.dbg(); + c->parent.dbg(); + a->left.dbg(); + a->right.dbg(); + + // check pointer + assert(a->parent.addr() == NULL); + assert(a->left.addr() == b); + assert(a->right.addr() == c); + assert(b->parent.addr() == a); + assert(b->left.addr() == NULL); + assert(b->right.addr() == NULL); + assert(c->parent.addr() == a); + assert(c->left.addr() == NULL); + assert(c->right.addr() == NULL); + + // [TEST 5] compare + int *y1 = (int *)cm::malloc(sizeof(int)); // create a int in cache memory + int *y2 = (int *)cm::malloc(sizeof(int)); // create a int in cache memory + ptr *py1 = new ptr; // create a ptr in cm + ptr *py2 = new ptr; // create a ptr in cm + *py1 = y1; + *py2 = y2; + *y1 = 100; + *y2 = 101; + assert(*py1 < *py2); + assert(*py2 > *py1); +} + +void test_lv(metacache *mc) +{ + int rc; + + // [TEST 1] size accuracy + uint32_t a = 0; + lv::u_lv *u = (lv::u_lv *)&a; + u->L1.b = LV_L1_B; + u->L1.l = 127; + printf("l1: 0x%x, %x, %d\n", a, a&1, a>>1); + assert((a&1) == 0); + assert(a>>1 == 127); + u->L2.b = LV_L2_B; + u->L2.l = 10*1024; + printf("l2: 0x%x, %x, %d\n", a, a&3, a>>2); + assert((a&3) == 1); + assert(a>>2 == 10*1024); + u->L3.b = LV_L3_B; + u->L3.l = 1*1000*1000; + printf("l3: 0x%x, %x, %d\n", a, a&7, a>>3); + assert((a&7) == 3); + assert(a>>3 == 1*1000*1000); + u->L4.b = LV_L4_B; + u->L4.l = 100*1000*1000; + printf("l4: 0x%x, %x, %d\n", a, a&7, a>>3); + assert((a&7) == 7); + assert(a>>3 == 100*1000*1000); + + // [TEST 2] size test + std::string small = std::string(127, 's'); + std::string mid = std::string(0x3fff, 'm'); + std::string big = std::string(768*1024, 'b'); + std::string large = std::string(2*1000*1000, 'b'); + const void *ptr = NULL; + int len; + + lv *s = (lv *)cm::malloc(2*1024*1024); + + // small test + rc = s->copy(small.c_str(), small.size()); + assert(rc == 0); + s->get(ptr, len); + assert(len == (int)small.size()); + assert(memcmp(ptr, small.c_str(), len) == 0); + + // middium test + rc = s->copy(mid.c_str(), mid.size()); + assert(rc == 0); + s->get(ptr, len); + assert(len == (int)mid.size()); + assert(memcmp(ptr, mid.c_str(), len) == 0); + + // big test + rc = s->copy(big.c_str(), big.size()); + assert(rc == 0); + s->get(ptr, len); + assert(len == (int)big.size()); + assert(memcmp(ptr, big.c_str(), len) == 0); + + + // [TEST 3] size aligned and new(size) + lv *s1 = new(1) lv; + assert(((uint64_t)s1&0x3)==0); + assert(lv::calc_size(1) == 2); + assert(s1->length() == 1); + + lv *s2 = new(999) lv; + assert(((uint64_t)s2&0x3)==0); + assert(lv::calc_size(999) == 1001); + assert(s2->length() == 999); + + rc = s2->copy(mid.c_str(), 999); + assert(rc == 0); + + s2->get(ptr, len); + assert(len == 999); + assert(memcmp(ptr, mid.c_str(), len) == 0); +} + +void test_sz(metacache *mc) +{ + // [TEST 1] basic function + //sz *s0 = new sz; // SHOULD be failed + std::string a1("from code"); + std::string a2("from std::string"); + + sz *s1 = new sz(a1.c_str()); // from const char* + sz *s2 = new sz(a2); // from std::string + + printf("s1: %s\n", s1->c_str()); + printf("s2: %s\n", s2->c_str()); + + assert(strcmp(a1.c_str(), s1->c_str()) == 0); + assert(strcmp(a2.c_str(), s2->c_str()) == 0); + + // [TEST 2] ptr function + ptr *p1 = new ptr; + *p1 = s1; + assert(p1->addr() == s1); + + // [TEST 3] sz equal test + // TBD: +} + +void test_buf(metacache *mc) +{ + buf *b1 = new buf(1000); + assert(b1->_lv->length() == 1000); +} + +void test_bfptr(metacache *mc) +{ + // bftpr size + assert(sizeof(bfptr) == 4); + + // TEST bf function + buf *k1 = new buf(1); + char *ptr = (char *)k1->buffer(); + *ptr = 'c'; + + // default bfptr is null + bfptr *p1 = new bfptr; + assert(p1->addr() == NULL); + + // let bfptr pointer to k1 + *p1 = k1; + assert(p1->addr() == k1); + assert(p1->bf() == 0); + p1->set_bf(-1); + assert(p1->addr() == k1); + assert(p1->bf() == -1); + p1->set_bf(0); + assert(p1->addr() == k1); + assert(p1->bf() == 0); + p1->set_bf(1); + assert(p1->addr() == k1); + assert(p1->bf() == 1); + p1->set_bf(-2); + assert(p1->addr() == k1); + assert(p1->bf() == -2); + p1->set_bf(999); + assert(p1->addr() == k1); + assert(p1->bf() == 1); + p1->set_bf(-99); + assert(p1->addr() == k1); + assert(p1->bf() == -2); +} + +void test_avltree(metacache *mc) +{ + // [ TEST 1 ] test bpptr + + // TEST basic avltree + using rd = bintree; // for short + rd *t1 = new rd; + + rd::node *n1 = new rd::node(1,11); + rd::node *n2 = new rd::node(2,12); + rd::node *n3 = new rd::node(3,13); + rd::node *n4 = new rd::node(4,14); + rd::node *n5 = new rd::node(5,15); + rd::node *n6 = new rd::node(6,16); + + /* 3 + * 2 5 + * 1 4 6 + */ + t1->_root = n3; + n3->_left = n2; + n3->_right = n5; + n2->_left = n1; + n5->_left = n4; + n5->_right = n6; + + const int *f; + f = t1->find(999); + assert(f == NULL); + for (int i=1; i<=6; i++) { + f = t1->find(i); + assert(*f == (10+i)); + } + + // TBD: support [] for searching. + //int i = *t1[1]; +} + +void test_array(metacache *mc) +{ + // TEST 1: int array + int test_data[] = {3,1,2,3}; + arr *a1 = (arr*)test_data; + assert(a1->size() == 3); + assert((*a1)[0] == 1); + assert(a1->at(1) == 2); + assert(a1->at(2) == 3); + + // TEST 2: ptr array + int* i1 = (int*)cm::malloc(4); + int* i2 = (int*)cm::malloc(4); + int* i3 = (int*)cm::malloc(4); + arr> *a2 = (arr>*)cm::malloc(12); + a2->_size = 3; + a2->_array[0] = i1; + a2->_array[1] = i2; + a2->_array[2] = i3; + *i1 = 10000; + *i2 = 0x7fffffff; + *i3 = -1; + arr>& a3 = *a2; + assert(*(*a2)[0] == 10000); + assert(*a2->at(1) == 0x7fffffff); + assert(*a3[2] == -1); +} + +void test_hashtbl(metacache *mc) +{ + +} + +void do_test() +{ + metacache *mc = metacache::create(100*1024*1024); + printf("magic:%s\n", mc->magic); + test_malloc(mc); + test_ptr(mc); + test_lv(mc); + test_sz(mc); + test_buf(mc); + test_bfptr(mc); + test_avltree(mc); + test_hashtbl(mc); + test_array(mc); +} + +int main(int argc, char *argv[]) +{ + do_test(); + return 0; +} diff --git a/deps/metacache/test_hash.cc b/deps/metacache/test_hash.cc new file mode 100644 index 00000000000..cb9ac7f112a --- /dev/null +++ b/deps/metacache/test_hash.cc @@ -0,0 +1,27 @@ +#include "metacache.h" +#include "city.h" + +using namespace strontium::metacache; + +void do_test() +{ + int i; + for (i=1; i<10*1024*1024; i+=3) + { + std::string a('a', i); + uint64_t h1 = CityHash64(a.c_str(), a.size()); + uint64_t h2 = city::CityHash64(a.c_str(), a.size()); + assert(h1 == h2); + + uint128_t m1 = CityHash128(a.c_str(), a.size()); + uint128_t m2 = city::CityHash128(a.c_str(), a.size()); + assert(m1 == m2); + } +} + +int main() +{ + do_test(); + return 0; +} + diff --git a/deps/metacache/test_kv.cc b/deps/metacache/test_kv.cc new file mode 100644 index 00000000000..2bdaecc76ce --- /dev/null +++ b/deps/metacache/test_kv.cc @@ -0,0 +1,135 @@ +#include "metacache.h" +#include +#include +#include +#include +#include + +using namespace strontium::metacache; + +MC_GLOBAL(); + +static const char* short_options = "lf:"; +struct option long_options[] = { + { "load", 0, NULL, 'l' }, + { "file", 1, NULL, 'f' }, + { 0, 0, 0, 0}, +}; + +static struct cfg { + const char *file; + enum { + TEST_WRITER, + TEST_READER, + } type; +} cfg = {.file="metacache.raw"}; + + +void test_writer() +{ + metacache *mc = metacache::create(100*1024*1024); + assert(mc); + + // str kv + { + using kv_t=kv_w; + kv_t kv1; + + kv1["a"] = "apple"; + kv1["b"] = "box"; + kv1["c"] = "cat"; + + void *m = kv1.makeup(); + assert(m); + mc->set_slots(0, m); + } + + // buf kv + { + using kv_buf = kv_w; + kv_buf kv2; + + char ali[] = "alibaba"; + char tc[] = "tencent"; + buf_w buf1(ali, 8); + buf_w buf2(tc, 8); + kv2["ali"] = buf1; + kv2["qq"] = buf2; + + void *m = kv2.makeup(); + assert(m); + mc->set_slots(1, m); + } + + // kkv + { + using kkv_t = kkv_w; + kkv_t tr; + tr[kkeyw("zhejiang", "hangzhou")] = "0571"; + tr[kkeyw("zhejiang", "jiaxing")] = "0573"; + tr[kkeyw("shanghai", "shanghai")] = "021"; + tr[kkeyw("guangdong", "guangzhou")] = "020"; + void *m = tr.makeup(); + assert(m); + mc->set_slots(2, m); + } + + metacache::savefile(cfg.file); +} + +void test_reader() +{ + metacache *mc = metacache::load(cfg.file); + assert(mc); + + { + const void *m = mc->get_slots(0); + using kv_t = kv; + kv_t kv1(m); + const str *a = kv1.find("a"); + std::cout << a->c_str() << std::endl; + } + + { + const void *m = mc->get_slots(1); + using kv_t = kv; + kv_t kv1(m); + const buf *a = kv1.find("ali"); + std::cout << (char *)a->buffer() << std::endl; + } + + { + const void *m = mc->get_slots(2); + using kv_t = kkv; + kv_t kv1(m); + const str *a = kv1.find("zhejiang", "hangzhou"); + std::cout << a->c_str() << std::endl; + } + +} + +int main(int argc, char *argv[]) +{ + int c; + while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1) + { + switch (c) + { + case 'l': + cfg.type = cfg::TEST_READER; + break; + case 'f': + cfg.file = optarg; + break; + } + } + + if (cfg.type == cfg::TEST_READER) { + test_reader(); + } + if (cfg.type == cfg::TEST_WRITER) { + test_writer(); + } + + return 0; +} diff --git a/deps/metacache/test_main.cc b/deps/metacache/test_main.cc new file mode 100644 index 00000000000..06427d1eefa --- /dev/null +++ b/deps/metacache/test_main.cc @@ -0,0 +1,100 @@ +#include +#include +#include +#include "metacache.h" + +using namespace strontium; +void test_lv() +{ + int rc; + metacache::lv *s = (metacache::lv *)malloc(1024*1024); + std::string small = std::string(127, 's'); + std::string mid = std::string(0x3fff, 'm'); + std::string big = std::string(768*1024, 'b'); + const void *ptr = NULL; + int len; + + // small test + rc = s->copy(small.c_str(), small.size()); + assert(rc == 0); + s->get(ptr, len); + assert(len == (int)small.size()); + assert(memcmp(ptr, small.c_str(), len) == 0); + + // middium test + rc = s->copy(mid.c_str(), mid.size()); + assert(rc == 0); + s->get(ptr, len); + assert(len == (int)mid.size()); + assert(memcmp(ptr, mid.c_str(), len) == 0); + + // big test + rc = s->copy(big.c_str(), big.size()); + assert(rc == 0); + s->get(ptr, len); + assert(len == (int)big.size()); + assert(memcmp(ptr, big.c_str(), len) == 0); + + free(s); + s = NULL; +} + +#if 0 +void test_writer() +{ + int rc; + metacache *mc = (metacache *)metacache::create(100*1024*1024); + assert(mc); + + metacache_writer *wr = new metacache_writer(); + assert(wr); + + // test kv + metacache_writer::kv *kv = wr->add_kv("words"); + assert(kv); + kv->set("a", "apple"); + kv->set("b", "box"); + kv->set("c", "cat"); + metacache_writer::kv *kv2 = wr->add_kv("domain"); + kv2->set("163", "www.163.com"); + kv2->set("taobao", "www.taobao.com"); + kv2->set("aliyun", "www.aliyun.com"); + + // test kkv + metacache_writer::kkv *kkv = wr->add_kkv("testkkv"); + assert(kkv); + kkv->set("cat", "eat", "fish"); + kkv->set("dog", "bake", "danger"); + metacache_writer::kkv *kkv2 = wr->add_kkv("quhao"); + kkv2->set("0086", "0571", "hangzhou"); + kkv2->set("0086", "020", "guangzhou"); + kkv2->set("0086", "010", "beijing"); + kkv2->set("001", "212", "newyork"); + + // add new fs cache + metacache_writer::fs *fs = wr->add_fs("node_modules"); + + // ent + rc = wr->makeup(); + assert(rc); + + rc = metacache::savefile("./metacache.raw"); + assert(rc); +} +#endif + +void test_reader() +{ + +} + +void do_test() +{ + test_lv(); +} + +int main(int argc, char *argv[]) +{ + do_test(); + return 0; +} diff --git a/deps/metacache/test_writer.cc b/deps/metacache/test_writer.cc new file mode 100644 index 00000000000..d7abd8fe4a5 --- /dev/null +++ b/deps/metacache/test_writer.cc @@ -0,0 +1,268 @@ +#include "metacache.h" +#include + +using namespace strontium::metacache; + +MC_GLOBAL(); + +#if 0 +static struct timeval _utime_diff(struct timeval &a, struct timeval &b) +{ + struct timeval ret; + if (b.tv_usec >= a.tv_usec) { + ret.tv_usec = b.tv_usec - a.tv_usec; + ret.tv_sec = b.tv_sec - a.tv_sec; + } else { + ret.tv_usec = 1000000 + b.tv_usec - a.tv_usec; + ret.tv_sec = b.tv_sec - a.tv_sec - 1; + } + return ret; +} + +static double timediff(struct timeval &a, struct timeval &b) +{ + struct timeval result = _utime_diff(a, b); + double gap = result.tv_sec + result.tv_usec / 1000000.0; + return gap; +} +#endif + +void test_sz(metacache_w* wc) +{ + const str_w& w1 = wc->str("abcd"); + const str_w& w2 = wc->str("abcd"); + printf("w1:%p, w2:%p\n", &w1, &w2); + assert(&w1 == &w2); + str_w w3 = w1; + + // TEST 2 + { + str_w s1("abcdef"); + assert(s1.calc_size() == 7); + + void* ptr = cm::_alloc(7); + s1.makeup(ptr); + assert(memcmp(ptr, s1.c_str(), 7) == 0); + } +} + +void test_buf(metacache_w* wc) +{ + { + const buf_w& w1 = wc->buf("aaa", 3); + const buf_w& w2 = wc->buf("bbb", 3); + printf("w1:%p, w2:%p\n", &w1, &w2); + } + + // TEST 2 + { + buf_w s1("aaa", 3); + void* ptr = cm::_alloc(4); + s1.makeup(ptr); + + lv *c1 = (lv*)ptr; + assert(c1->length() == 3); + } +} + +void test_int(metacache_w* wc) +{ + int_w a(1); + int b(0); + a.makeup(b); + assert(b==1); +} + +void test_city() +{ + uint64_t hash = city::CityHash64("aaaa", 4); + printf("%lx\n", hash); + uint128_t h2 = city::CityHash128("aaaa", 4); + printf("%lx, %lx\n", h2.first, h2.second); +} + +void test_avltree(metacache_w* wc) +{ + // TEST basic int + using my = avltree_w; + my t; + // test nodes + int arr[]= {3,2,1,4,5,6,7,16,15,14,13,12,11,10,8,9}; + for (int i=0; i<(int)sizeof(arr)/4; i++) { + t.insert(arr[i]) = i; + //t[i] = i; + } + assert(t._root->_height == 5); + //t.debug_print(); + t.walk_inorder(); + //t.walk_preorder(); + + int size = t.calc_size(); + printf("calc_size:%d\n", size); + + void *m = t.makeup(); + bintree *rd=(bintree*)m; + for (int i=1; i<=16; i++) { + std::cout << rd->find(i) << ":" << *rd->find(i) << std::endl; + } + assert(rd->find(0) == NULL); + assert(rd->find(100) == NULL); +} + +void test_avltree2(metacache_w* wc) +{ + // TEST large tree + using my = avltree_w; + + // 1million test + my t; + { + ts_scope a("avltree add"); + for (int i=1; i<=1000000; i++) { + t.insert(i) = i; + } + } + assert(t._root); + + printf("t.height = %d\n", t._root->_height); + assert(t._root->_height == 20); + void *tm = t.makeup(); + + // 1million test + std::map t2; + { + ts_scope a("std::map add"); + for (int i=0; i<1000000; i++) { + t2[i] = i; + } + } + + // 1m avl search + bintree *rd = (bintree*)tm; + { + ts_scope a("avltree search"); + for (int i=1; i<=1000000; i++) { + assert(*rd->find(i) == i); + } + } + + // 1m map search + { + ts_scope a("std::map search"); + for (int i=0; i<1000000; i++) { + assert(t2[i] == i); + } + } +} + +void test_avltree3(metacache_w* wc) +{ + // TEST str kv + using my = avltree_w; + my tr; + tr["a"] = "apple"; + tr["b"] = "box"; + tr["c"] = "cat"; + tr["d"] = "dog"; + tr["e"] = "egg"; + tr["f"] = "food"; + + void *m = tr.makeup(); + bintree *rd= (bintree*)m; + + assert(rd->find("food") == NULL); + assert(*rd->find("a") == "apple"); + assert(*rd->find("e") == "egg"); + + { + str *a = (str*)cm::malloc(4); + std::string b("apple"); + str_w c(b); + c.makeup(*a); + + assert(*a < "box"); + assert(*a == b); + + str *a2 = (str*) cm::malloc(4); + std::string b2("box"); + str_w c2(b2); + c2.makeup(*a2); + + assert((*a < *a2) == true); + assert((*a > *a2) == false); + assert((*a == *a2) == false); + } +} + +void test_avltree4(metacache_w* wc) +{ + // TEST str kkv + using my = avltree_w, str_w>; + my tr; + tr[kkeyw("zhejiang", "hangzhou")] = "0571"; + tr[kkeyw("zhejiang", "jiaxing")] = "0573"; + tr[kkeyw("shanghai", "shanghai")] = "021"; + tr[kkeyw("guangdong", "guangzhou")] = "020"; + void *m = tr.makeup(); + + using reader = bintree, str>; + reader *rd = (reader*)m; + + std::string hz = rd->find("zhejiang","hangzhou")->c_str(); + std::cout << hz << std::endl; + + assert(*rd->find("zhejiang", "jiaxing") == "0573"); + assert(*rd->find("guangdong", "guangzhou") == "020"); + assert(*rd->find("shanghai", "shanghai") == "021"); + assert(rd->find("jiangsu", "suzhou") == NULL); + assert(rd->find("zhejiang", "ningbo") == NULL); +} + +void test_avltree5(metacache_w* wc) +{ + using my = avltree_w; + my tr; + tr[1] = "/"; + tr[2] = "node_modules"; + void *m = tr.makeup(); + + using reader = bintree; + reader *rd = (reader*)m; + std::cout << "inode: 1 is " << rd->find(1)->c_str() << std::endl; +} + +void test_array(metacache_w* wc) +{ + arr_w a1; + a1.push_back(1); + a1.push_back(2); + a1.push_back(3); + assert(a1.size() == 3); + assert(a1[0]._value == 1); + assert(a1.at(1)._value == 2); + assert(a1.at(2)._value == 3); +} + +void do_test() +{ + test_city(); + + metacache_w *wc = new metacache_w(); + metacache::create(100*1024*1024);// 100M + assert(wc); + test_int(wc); + test_sz(wc); + test_buf(wc); + test_avltree(wc); + test_avltree2(wc); + test_avltree3(wc); + test_avltree4(wc); + test_avltree5(wc); + test_array(wc); +} + +int main() +{ + do_test(); + return 0; +} diff --git a/deps/ngtcp2/README.md b/deps/ngtcp2/README.md index 57043dcc133..3585fa1f349 100644 --- a/deps/ngtcp2/README.md +++ b/deps/ngtcp2/README.md @@ -9,7 +9,8 @@ The sources are pulled from: * nghttp3: https://github.com/ngtcp2/nghttp3 In both the `ngtcp2` and `nghttp3` git repos, the active development occurs -in the default branch (currently named `master` in each). +in the default branch (currently named `main` in each). Tagged versions do not +always point to the default branch. We only use a subset of the sources for each. @@ -17,14 +18,17 @@ We only use a subset of the sources for each. The `nghttp3` library depends on `ngtcp2`. Both should always be updated together. From `ngtcp2` we only want the contents of the `lib` and `crypto` -directories; from `nghttp3` we only want the contents o the `lib`. +directories; from `nghttp3` we only want the contents of the `lib` directory. + +After updating either dependency, check if any source files or include +directories have been added or removed and update `ngtcp2.gyp` accordingly. ### Updating ngtcp2 -To update ngtcp2: +To update ngtcp2, replace `v0.8.1` with the desired git tag: ```sh -$ git clone https://github.com/ngtcp2/ngtcp2 +$ git clone --depth=1 --branch=v0.8.1 https://github.com/ngtcp2/ngtcp2 $ cd ngtcp2 $ autoreconf -i $ ./configure --prefix=$PWD/build --enable-lib-only @@ -34,10 +38,10 @@ $ cp -R crypto/* ../node/deps/ngtcp2/ngtcp2/crypto/ ### Updating nghttp3 -To update ngtcp2: +To update nghttp3, replace `v0.7.0` with the desired git tag: ```sh -$ git clone https://github.com/ngtcp2/nghttp3 +$ git clone --depth=1 --branch=v0.7.0 https://github.com/ngtcp2/nghttp3 $ cd nghttp3 $ autoreconf -i $ ./configure --prefix=$PWD/build --enable-lib-only diff --git a/deps/ngtcp2/nghttp3/lib/includes/nghttp3/nghttp3.h b/deps/ngtcp2/nghttp3/lib/includes/nghttp3/nghttp3.h index bc66c40ce21..cd10e4def70 100644 --- a/deps/ngtcp2/nghttp3/lib/includes/nghttp3/nghttp3.h +++ b/deps/ngtcp2/nghttp3/lib/includes/nghttp3/nghttp3.h @@ -125,13 +125,6 @@ typedef ptrdiff_t nghttp3_ssize; * already in use. */ #define NGHTTP3_ERR_STREAM_IN_USE -105 -/** - * @macro - * - * :macro:`NGHTTP3_ERR_PUSH_ID_BLOCKED` indicates that there are no - * spare push ID available. - */ -#define NGHTTP3_ERR_PUSH_ID_BLOCKED -106 /** * @macro * @@ -167,13 +160,6 @@ typedef ptrdiff_t nghttp3_ssize; * field is too large to process. */ #define NGHTTP3_ERR_QPACK_HEADER_TOO_LARGE -112 -/** - * @macro - * - * :macro:`NGHTTP3_ERR_IGNORE_STREAM` indicates that a stream should - * be ignored. - */ -#define NGHTTP3_ERR_IGNORE_STREAM -113 /** * @macro * @@ -184,17 +170,17 @@ typedef ptrdiff_t nghttp3_ssize; /** * @macro * - * :macro:`NGHTTP3_ERR_IGNORE_PUSH_PROMISE` indicates that a push - * promise should be ignored. + * :macro:`NGHTTP3_ERR_CONN_CLOSING` indicates that a connection is + * closing state. */ -#define NGHTTP3_ERR_IGNORE_PUSH_PROMISE -115 +#define NGHTTP3_ERR_CONN_CLOSING -116 /** * @macro * - * :macro:`NGHTTP3_ERR_CONN_CLOSING` indicates that a connection is - * closing state. + * :macro:`NGHTTP3_ERR_STREAM_DATA_OVERFLOW` indicates that the length + * of stream data is too long and causes overflow. */ -#define NGHTTP3_ERR_CONN_CLOSING -116 +#define NGHTTP3_ERR_STREAM_DATA_OVERFLOW -117 /** * @macro * @@ -451,59 +437,69 @@ typedef ptrdiff_t nghttp3_ssize; /** * @functypedef * - * Custom memory allocator to replace malloc(). The |mem_user_data| - * is the mem_user_data member of :type:`nghttp3_mem` structure. + * :type:`nghttp3_malloc` is a custom memory allocator to replace + * :manpage:`malloc(3)`. The |user_data| is the + * :member:`nghttp3_mem.user_data`. */ -typedef void *(*nghttp3_malloc)(size_t size, void *mem_user_data); +typedef void *(*nghttp3_malloc)(size_t size, void *user_data); /** * @functypedef * - * Custom memory allocator to replace free(). The |mem_user_data| is - * the mem_user_data member of :type:`nghttp3_mem` structure. + * :type:`nghttp3_free` is a custom memory allocator to replace + * :manpage:`free(3)`. The |user_data| is the + * :member:`nghttp3_mem.user_data`. */ -typedef void (*nghttp3_free)(void *ptr, void *mem_user_data); +typedef void (*nghttp3_free)(void *ptr, void *user_data); /** * @functypedef * - * Custom memory allocator to replace calloc(). The |mem_user_data| - * is the mem_user_data member of :type:`nghttp3_mem` structure. + * :type:`nghttp3_calloc` is a custom memory allocator to replace + * :manpage:`calloc(3)`. The |user_data| is the + * :member:`nghttp3_mem.user_data`. */ -typedef void *(*nghttp3_calloc)(size_t nmemb, size_t size, void *mem_user_data); +typedef void *(*nghttp3_calloc)(size_t nmemb, size_t size, void *user_data); /** * @functypedef * - * Custom memory allocator to replace realloc(). The |mem_user_data| - * is the mem_user_data member of :type:`nghttp3_mem` structure. + * :type:`nghttp3_realloc` is a custom memory allocator to replace + * :manpage:`realloc(3)`. The |user_data| is the + * :member:`nghttp3_mem.user_data`. */ -typedef void *(*nghttp3_realloc)(void *ptr, size_t size, void *mem_user_data); +typedef void *(*nghttp3_realloc)(void *ptr, size_t size, void *user_data); /** * @struct * * :type:`nghttp3_mem` is a custom memory allocator functions and user - * defined pointer. The |mem_user_data| member is passed to each + * defined pointer. The :member:`user_data` field is passed to each * allocator function. This can be used, for example, to achieve * per-session memory pool. * * In the following example code, ``my_malloc``, ``my_free``, * ``my_calloc`` and ``my_realloc`` are the replacement of the - * standard allocators ``malloc``, ``free``, ``calloc`` and - * ``realloc`` respectively:: + * standard allocators :manpage:`malloc(3)`, :manpage:`free(3)`, + * :manpage:`calloc(3)` and :manpage:`realloc(3)` respectively:: * - * void *my_malloc_cb(size_t size, void *mem_user_data) { + * void *my_malloc_cb(size_t size, void *user_data) { + * (void)user_data; * return my_malloc(size); * } * - * void my_free_cb(void *ptr, void *mem_user_data) { my_free(ptr); } + * void my_free_cb(void *ptr, void *user_data) { + * (void)user_data; + * my_free(ptr); + * } * - * void *my_calloc_cb(size_t nmemb, size_t size, void *mem_user_data) { + * void *my_calloc_cb(size_t nmemb, size_t size, void *user_data) { + * (void)user_data; * return my_calloc(nmemb, size); * } * - * void *my_realloc_cb(void *ptr, size_t size, void *mem_user_data) { + * void *my_realloc_cb(void *ptr, size_t size, void *user_data) { + * (void)user_data; * return my_realloc(ptr, size); * } * @@ -516,27 +512,28 @@ typedef void *(*nghttp3_realloc)(void *ptr, size_t size, void *mem_user_data); */ typedef struct nghttp3_mem { /** - * :member:`mem_user_data` is an arbitrary user supplied data. This + * :member:`user_data` is an arbitrary user supplied data. This * is passed to each allocator function. */ - void *mem_user_data; + void *user_data; /** * :member:`malloc` is a custom allocator function to replace - * malloc(). + * :manpage:`malloc(3)`. */ nghttp3_malloc malloc; /** - * :member:`free` is a custom allocator function to replace free(). + * :member:`free` is a custom allocator function to replace + * :manpage:`free(3)`. */ nghttp3_free free; /** * :member:`calloc` is a custom allocator function to replace - * calloc(). + * :manpage:`calloc(3)`. */ nghttp3_calloc calloc; /** * :member:`realloc` is a custom allocator function to replace - * realloc(). + * :manpage:`realloc(3)`. */ nghttp3_realloc realloc; } nghttp3_mem; @@ -652,8 +649,8 @@ NGHTTP3_EXTERN void nghttp3_buf_init(nghttp3_buf *buf); * @function * * `nghttp3_buf_free` frees resources allocated for |buf| using |mem| - * as memory allocator. buf->begin must be a heap buffer allocated by - * |mem|. + * as memory allocator. :member:`buf->begin ` must + * be a heap buffer allocated by |mem|. */ NGHTTP3_EXTERN void nghttp3_buf_free(nghttp3_buf *buf, const nghttp3_mem *mem); @@ -662,7 +659,8 @@ NGHTTP3_EXTERN void nghttp3_buf_free(nghttp3_buf *buf, const nghttp3_mem *mem); * * `nghttp3_buf_left` returns the number of additional bytes which can * be written to the underlying buffer. In other words, it returns - * buf->end - buf->last. + * :member:`buf->end ` - :member:`buf->last + * `. */ NGHTTP3_EXTERN size_t nghttp3_buf_left(const nghttp3_buf *buf); @@ -670,14 +668,17 @@ NGHTTP3_EXTERN size_t nghttp3_buf_left(const nghttp3_buf *buf); * @function * * `nghttp3_buf_len` returns the number of bytes left to read. In - * other words, it returns buf->last - buf->pos. + * other words, it returns :member:`buf->last ` - + * :member:`buf->pos `. */ NGHTTP3_EXTERN size_t nghttp3_buf_len(const nghttp3_buf *buf); /** * @function * - * `nghttp3_buf_reset` sets buf->pos and buf->last to buf->begin. + * `nghttp3_buf_reset` sets :member:`buf->pos ` and + * :member:`buf->last ` to :member:`buf->begin + * `. */ NGHTTP3_EXTERN void nghttp3_buf_reset(nghttp3_buf *buf); @@ -692,7 +693,7 @@ NGHTTP3_EXTERN void nghttp3_buf_reset(nghttp3_buf *buf); * * :macro:`NGHTTP3_NV_FLAG_NONE` indicates no flag set. */ -#define NGHTTP3_NV_FLAG_NONE 0 +#define NGHTTP3_NV_FLAG_NONE 0x00u /** * @macro @@ -701,7 +702,7 @@ NGHTTP3_EXTERN void nghttp3_buf_reset(nghttp3_buf *buf); * pair must not be indexed. Other implementation calls this bit as * "sensitive". */ -#define NGHTTP3_NV_FLAG_NEVER_INDEX 0x01 +#define NGHTTP3_NV_FLAG_NEVER_INDEX 0x01u /** * @macro @@ -710,7 +711,7 @@ NGHTTP3_EXTERN void nghttp3_buf_reset(nghttp3_buf *buf); * If this flag is set, the library does not make a copy of header * field name. This could improve performance. */ -#define NGHTTP3_NV_FLAG_NO_COPY_NAME 0x02 +#define NGHTTP3_NV_FLAG_NO_COPY_NAME 0x02u /** * @macro @@ -719,7 +720,7 @@ NGHTTP3_EXTERN void nghttp3_buf_reset(nghttp3_buf *buf); * application. If this flag is set, the library does not make a copy * of header field value. This could improve performance. */ -#define NGHTTP3_NV_FLAG_NO_COPY_VALUE 0x04 +#define NGHTTP3_NV_FLAG_NO_COPY_VALUE 0x04u /** * @struct @@ -748,7 +749,7 @@ typedef struct nghttp3_nv { size_t valuelen; /** * :member:`flags` is bitwise OR of one or more of - * NGHTTP3_NV_FLAG_*. + * :macro:`NGHTTP3_NV_FLAG_* `. */ uint8_t flags; } nghttp3_nv; @@ -1057,7 +1058,7 @@ typedef enum nghttp3_qpack_token { * :type:`nghttp3_nv` and has reference counted buffers and tokens * which might be useful for applications. */ -typedef struct { +typedef struct nghttp3_qpack_nv { /** * :member:`name` is the buffer containing header field name. * NULL-termination is guaranteed. @@ -1076,7 +1077,7 @@ typedef struct { int32_t token; /** * :member:`flags` is a bitwise OR of one or more of - * NGHTTP3_NV_FLAG_*. See :macro:`NGHTTP3_NV_FLAG_NONE`. + * :macro:`NGHTTP3_NV_FLAG_* `. */ uint8_t flags; } nghttp3_qpack_nv; @@ -1092,11 +1093,14 @@ typedef struct nghttp3_qpack_encoder nghttp3_qpack_encoder; * @function * * `nghttp3_qpack_encoder_new` initializes QPACK encoder. |pencoder| - * must be non-NULL pointer. |max_dtable_size| is the maximum dynamic - * table size. |max_blocked| is the maximum number of streams which - * can be blocked. |mem| is a memory allocator. This function - * allocates memory for :type:`nghttp3_qpack_encoder` itself and - * assigns its pointer to |*pencoder| if it succeeds. + * must be non-NULL pointer. |hard_max_dtable_capacity| is the upper + * bound of the dynamic table capacity. |mem| is a memory allocator. + * This function allocates memory for :type:`nghttp3_qpack_encoder` + * itself and assigns its pointer to |*pencoder| if it succeeds. + * + * The maximum dynamic table capacity is still 0. In order to change + * the maximum dynamic table capacity, call + * `nghttp3_qpack_encoder_set_max_dtable_capacity`. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -1105,8 +1109,7 @@ typedef struct nghttp3_qpack_encoder nghttp3_qpack_encoder; * Out of memory. */ NGHTTP3_EXTERN int nghttp3_qpack_encoder_new(nghttp3_qpack_encoder **pencoder, - size_t max_dtable_size, - size_t max_blocked, + size_t hard_max_dtable_capacity, const nghttp3_mem *mem); /** @@ -1174,82 +1177,24 @@ NGHTTP3_EXTERN nghttp3_ssize nghttp3_qpack_encoder_read_decoder( /** * @function * - * `nghttp3_qpack_encoder_set_max_dtable_size` sets max dynamic table - * size to |max_dtable_size|. - * - * This function returns the number of bytes read, or one of the - * following negative error codes: - * - * :macro:`NGHTTP3_ERR_INVALID_ARGUMENT` - * |max_dtable_size| exceeds the hard limit that decoder specifies. - */ -NGHTTP3_EXTERN int -nghttp3_qpack_encoder_set_max_dtable_size(nghttp3_qpack_encoder *encoder, - size_t max_dtable_size); - -/** - * @function - * - * `nghttp3_qpack_encoder_set_hard_max_dtable_size` sets hard maximum - * dynamic table size to |hard_max_dtable_size|. - * - * This function returns the number of bytes read, or one of the - * following negative error codes: - * - * TBD - */ -NGHTTP3_EXTERN int -nghttp3_qpack_encoder_set_hard_max_dtable_size(nghttp3_qpack_encoder *encoder, - size_t hard_max_dtable_size); - -/** - * @function - * - * `nghttp3_qpack_encoder_set_max_blocked` sets the number of streams - * which can be blocked to |max_blocked|. - * - * This function returns the number of bytes read, or one of the - * following negative error codes: - * - * TBD - */ -NGHTTP3_EXTERN int -nghttp3_qpack_encoder_set_max_blocked(nghttp3_qpack_encoder *encoder, - size_t max_blocked); - -/** - * @function - * - * `nghttp3_qpack_encoder_ack_header` tells |encoder| that header - * block for a stream denoted by |stream_id| was acknowledged by - * decoder. This function is provided for debugging purpose only. In - * HTTP/3, |encoder| knows acknowledgement of header block by reading - * decoder stream with `nghttp3_qpack_encoder_read_decoder()`. + * `nghttp3_qpack_encoder_set_max_dtable_capacity` sets max dynamic + * table capacity to |max_dtable_capacity|. If |max_dtable_capacity| is + * larger than ``hard_max_dtable_capacity`` parameter of + * `nghttp3_qpack_encoder_new`, it is truncated to the latter. */ NGHTTP3_EXTERN void -nghttp3_qpack_encoder_ack_header(nghttp3_qpack_encoder *encoder, - int64_t stream_id); +nghttp3_qpack_encoder_set_max_dtable_capacity(nghttp3_qpack_encoder *encoder, + size_t max_dtable_capacity); /** * @function * - * `nghttp3_qpack_encoder_add_insert_count` increments known received - * count of |encoder| by |n|. This function is provided for debugging - * purpose only. In HTTP/3, |encoder| increments known received count - * by reading decoder stream with - * `nghttp3_qpack_encoder_read_decoder()`. - * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: - * - * :macro:`NGHTTP3_ERR_NOMEM` - * Out of memory. - * :macro:`NGHTTP3_ERR_QPACK_DECODER_STREAM_ERROR` - * |n| is too large. + * `nghttp3_qpack_encoder_set_max_blocked_streams` sets the number of + * streams which can be blocked to |max_blocked_streams|. */ -NGHTTP3_EXTERN int -nghttp3_qpack_encoder_add_insert_count(nghttp3_qpack_encoder *encoder, - uint64_t n); +NGHTTP3_EXTERN void +nghttp3_qpack_encoder_set_max_blocked_streams(nghttp3_qpack_encoder *encoder, + size_t max_blocked_streams); /** * @function @@ -1265,23 +1210,11 @@ nghttp3_qpack_encoder_ack_everything(nghttp3_qpack_encoder *encoder); /** * @function * - * `nghttp3_qpack_encoder_cancel_stream` tells |encoder| that stream - * denoted by |stream_id| is cancelled. This function is provided for - * debugging purpose only. In HTTP/3, |encoder| knows this by reading - * decoder stream with `nghttp3_qpack_encoder_read_decoder()`. - */ -NGHTTP3_EXTERN void -nghttp3_qpack_encoder_cancel_stream(nghttp3_qpack_encoder *encoder, - int64_t stream_id); - -/** - * @function - * - * `nghttp3_qpack_encoder_get_num_blocked` returns the number of - * streams which are potentially blocked at decoder side. + * `nghttp3_qpack_encoder_get_num_blocked_streams` returns the number + * of streams which are potentially blocked at decoder side. */ NGHTTP3_EXTERN size_t -nghttp3_qpack_encoder_get_num_blocked(nghttp3_qpack_encoder *encoder); +nghttp3_qpack_encoder_get_num_blocked_streams(nghttp3_qpack_encoder *encoder); /** * @struct @@ -1351,11 +1284,12 @@ typedef struct nghttp3_qpack_decoder nghttp3_qpack_decoder; * @function * * `nghttp3_qpack_decoder_new` initializes QPACK decoder. |pdecoder| - * must be non-NULL pointer. |max_dtable_size| is the maximum dynamic - * table size. |max_blocked| is the maximum number of streams which - * can be blocked. |mem| is a memory allocator. This function - * allocates memory for :type:`nghttp3_qpack_decoder` itself and - * assigns its pointer to |*pdecoder| if it succeeds. + * must be non-NULL pointer. |hard_max_dtable_capacity| is the upper + * bound of the dynamic table capacity. |max_blocked_streams| is the + * maximum number of streams which can be blocked. |mem| is a memory + * allocator. This function allocates memory for + * :type:`nghttp3_qpack_decoder` itself and assigns its pointer to + * |*pdecoder| if it succeeds. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -1364,8 +1298,8 @@ typedef struct nghttp3_qpack_decoder nghttp3_qpack_decoder; * Out of memory. */ NGHTTP3_EXTERN int nghttp3_qpack_decoder_new(nghttp3_qpack_decoder **pdecoder, - size_t max_dtable_size, - size_t max_blocked, + size_t hard_max_dtable_capacity, + size_t max_blocked_streams, const nghttp3_mem *mem); /** @@ -1415,7 +1349,7 @@ nghttp3_qpack_decoder_get_icnt(const nghttp3_qpack_decoder *decoder); * * :macro:`NGHTTP3_QPACK_DECODE_FLAG_NONE` indicates that no flag set. */ -#define NGHTTP3_QPACK_DECODE_FLAG_NONE 0 +#define NGHTTP3_QPACK_DECODE_FLAG_NONE 0x00u /** * @macro @@ -1423,7 +1357,7 @@ nghttp3_qpack_decoder_get_icnt(const nghttp3_qpack_decoder *decoder); * :macro:`NGHTTP3_QPACK_DECODE_FLAG_EMIT` indicates that a header * field is successfully decoded. */ -#define NGHTTP3_QPACK_DECODE_FLAG_EMIT 0x01 +#define NGHTTP3_QPACK_DECODE_FLAG_EMIT 0x01u /** * @macro @@ -1431,7 +1365,7 @@ nghttp3_qpack_decoder_get_icnt(const nghttp3_qpack_decoder *decoder); * :macro:`NGHTTP3_QPACK_DECODE_FLAG_FINAL` indicates that all header * fields have been decoded. */ -#define NGHTTP3_QPACK_DECODE_FLAG_FINAL 0x02 +#define NGHTTP3_QPACK_DECODE_FLAG_FINAL 0x02u /** * @macro @@ -1439,7 +1373,7 @@ nghttp3_qpack_decoder_get_icnt(const nghttp3_qpack_decoder *decoder); * :macro:`NGHTTP3_QPACK_DECODE_FLAG_BLOCKED` indicates that decoding * has been blocked. */ -#define NGHTTP3_QPACK_DECODE_FLAG_BLOCKED 0x04 +#define NGHTTP3_QPACK_DECODE_FLAG_BLOCKED 0x04u /** * @function @@ -1459,12 +1393,19 @@ nghttp3_qpack_decoder_get_icnt(const nghttp3_qpack_decoder *decoder); * due to required insert count. * * When a header field is decoded, an application receives it in |nv|. - * nv->name and nv->value are reference counted buffer, and their + * :member:`nv->name ` and :member:`nv->value + * ` are reference counted buffer, and their * reference counts are already incremented for application use. * Therefore, when application finishes processing the header field, * it must call `nghttp3_rcbuf_decref(nv->name) * ` and `nghttp3_rcbuf_decref(nv->value) - * ` or memory leak might occur. + * ` or memory leak might occur. These + * :type:`nghttp3_rcbuf` objects hold the pointer to + * :type:`nghttp3_mem` that is passed to `nghttp3_qpack_decoder_new` + * (or either `nghttp3_conn_client_new` or `nghttp3_conn_server_new` + * if it is used indirectly). As long as these objects are alive, the + * pointed :type:`nghttp3_mem` object must be available. Otherwise, + * `nghttp3_rcbuf_decref` will cause undefined behavior. * * This function returns the number of bytes read, or one of the * following negative error codes: @@ -1529,14 +1470,24 @@ nghttp3_qpack_decoder_cancel_stream(nghttp3_qpack_decoder *decoder, /** * @function * - * `nghttp3_qpack_decoder_set_dtable_cap` sets |cap| as maximum - * dynamic table size. Normally, the maximum capacity is communicated - * in encoder stream. This function is provided for debugging and - * testing purpose. + * `nghttp3_qpack_decoder_set_max_dtable_capacity` sets + * |max_dtable_capacity| as maximum dynamic table size. + * |max_dtable_capacity| must be equal to or smaller than + * ``hard_max_dtable_capacity`` parameter of + * `nghttp3_qpack_decoder_new`. Normally, the maximum capacity is + * communicated in encoder stream. This function is provided for + * debugging and testing purpose. + * + * This function returns 0 if it succeeds, or one of the + * following negative error codes: + * + * :macro:`NGHTTP3_ERR_INVALID_ARGUMENT` + * |max_dtable_capacity| exceeds the upper bound of the dynamic + * table capacity. */ -NGHTTP3_EXTERN void -nghttp3_qpack_decoder_set_dtable_cap(nghttp3_qpack_decoder *decoder, - size_t cap); +NGHTTP3_EXTERN int +nghttp3_qpack_decoder_set_max_dtable_capacity(nghttp3_qpack_decoder *decoder, + size_t max_dtable_capacity); /** * @function @@ -1571,10 +1522,10 @@ NGHTTP3_EXTERN uint64_t nghttp3_err_infer_quic_app_error_code(int liberr); * * :type:`nghttp3_debug_vprintf_callback` is a callback function * invoked when the library outputs debug logging. The function is - * called with arguments suitable for ``vfprintf(3)`` + * called with arguments suitable for :manpage:`vfprintf(3)`. * * The debug output is only enabled if the library is built with - * ``DEBUGBUILD`` macro defined. + * :macro:`DEBUGBUILD` macro defined. */ typedef void (*nghttp3_debug_vprintf_callback)(const char *format, va_list args); @@ -1583,27 +1534,51 @@ typedef void (*nghttp3_debug_vprintf_callback)(const char *format, * @function * * `nghttp3_set_debug_vprintf_callback` sets a debug output callback - * called by the library when built with ``DEBUGBUILD`` macro defined. - * If this option is not used, debug log is written into standard - * error output. + * called by the library when built with :macro:`DEBUGBUILD` macro + * defined. If this option is not used, debug log is written into + * standard error output. * - * For builds without ``DEBUGBUILD`` macro defined, this function is - * noop. + * For builds without :macro:`DEBUGBUILD` macro defined, this function + * is noop. * - * Note that building with ``DEBUGBUILD`` may cause significant + * Note that building with :macro:`DEBUGBUILD` may cause significant * performance penalty to libnghttp3 because of extra processing. It * should be used for debugging purpose only. * * .. Warning:: * - * Building with ``DEBUGBUILD`` may cause significant performance - * penalty to libnghttp3 because of extra processing. It should be - * used for debugging purpose only. We write this two times because - * this is important. + * Building with :macro:`DEBUGBUILD` may cause significant + * performance penalty to libnghttp3 because of extra processing. + * It should be used for debugging purpose only. We write this two + * times because this is important. */ NGHTTP3_EXTERN void nghttp3_set_debug_vprintf_callback( nghttp3_debug_vprintf_callback debug_vprintf_callback); +/** + * @macrosection + * + * Shutdown related constants + */ + +/** + * @macro + * + * :macro:`NGHTTP3_SHUTDOWN_NOTICE_STREAM_ID` specifies stream id sent + * by a server when it initiates graceful shutdown of the connection + * via `nghttp3_conn_submit_shutdown_notice`. + */ +#define NGHTTP3_SHUTDOWN_NOTICE_STREAM_ID ((1ull << 62) - 4) + +/** + * @macro + * + * :macro:`NGHTTP3_SHUTDOWN_NOTICE_PUSH_ID` specifies push id sent + * by a client when it initiates graceful shutdown of the connection + * via `nghttp3_conn_submit_shutdown_notice`. + */ +#define NGHTTP3_SHUTDOWN_NOTICE_PUSH_ID ((1ull << 62) - 1) + /** * @struct * @@ -1625,7 +1600,7 @@ typedef struct nghttp3_conn nghttp3_conn; * :macro:`NGHTTP3_ERR_CALLBACK_FAILURE`. */ typedef int (*nghttp3_acked_stream_data)(nghttp3_conn *conn, int64_t stream_id, - size_t datalen, void *conn_user_data, + uint64_t datalen, void *conn_user_data, void *stream_user_data); /** @@ -1711,7 +1686,7 @@ typedef int (*nghttp3_begin_headers)(nghttp3_conn *conn, int64_t stream_id, * |name| contains a field name and |value| contains a field value. * |token| is one of token defined in :type:`nghttp3_qpack_token` or * -1 if no token is defined for |name|. |flags| is bitwise OR of - * zero or more of NGHTTP3_NV_FLAG_*. + * zero or more of :macro:`NGHTTP3_NV_FLAG_* `. * * The buffers for |name| and |value| are reference counted. If * application needs to keep them, increment the reference count with @@ -1735,78 +1710,17 @@ typedef int (*nghttp3_recv_header)(nghttp3_conn *conn, int64_t stream_id, * :type:`nghttp3_end_headers` is a callback function which is invoked * when an incoming header block has ended. * + * If the stream ends with this header block, |fin| is set to nonzero. + * * The implementation of this callback must return 0 if it succeeds. * Returning :macro:`NGHTTP3_ERR_CALLBACK_FAILURE` will return to the * caller immediately. Any values other than 0 is treated as * :macro:`NGHTTP3_ERR_CALLBACK_FAILURE`. */ typedef int (*nghttp3_end_headers)(nghttp3_conn *conn, int64_t stream_id, - void *conn_user_data, + int fin, void *conn_user_data, void *stream_user_data); -/** - * @functypedef - * - * :type:`nghttp3_begin_push_promise` is a callback function which is - * invoked when an incoming header block section in PUSH_PROMISE is - * started on a stream denoted by |stream_id|. |push_id| identifies a - * push promise. Each header field is passed to application by - * :type:`nghttp3_recv_push_promise` callback. And then - * :type:`nghttp3_end_push_promise` is called when a whole header - * block is processed. - * - * The implementation of this callback must return 0 if it succeeds. - * Returning :macro:`NGHTTP3_ERR_CALLBACK_FAILURE` will return to the - * caller immediately. Any values other than 0 is treated as - * :macro:`NGHTTP3_ERR_CALLBACK_FAILURE`. - */ -typedef int (*nghttp3_begin_push_promise)(nghttp3_conn *conn, int64_t stream_id, - int64_t push_id, void *conn_user_data, - void *stream_user_data); - -/** - * @functypedef - * - * :type:`nghttp3_recv_push_promise` is a callback function which is - * invoked when a header field in PUSH_PROMISE is received on a stream - * denoted by |stream_id|. |push_id| identifies a push promise. - * |name| contains a field name and |value| contains a field value. - * |token| is one of token defined in :type:`nghttp3_qpack_token` or - * -1 if no token is defined for |name|. |flags| is bitwise OR of - * zero or more of NGHTTP3_NV_FLAG_*. - * - * The buffers for |name| and |value| are reference counted. If - * application needs to keep them, increment the reference count with - * `nghttp3_rcbuf_incref`. When they are no longer used, call - * `nghttp3_rcbuf_decref`. - * - * The implementation of this callback must return 0 if it succeeds. - * Returning :macro:`NGHTTP3_ERR_CALLBACK_FAILURE` will return to the - * caller immediately. Any values other than 0 is treated as - * :macro:`NGHTTP3_ERR_CALLBACK_FAILURE`. - */ -typedef int (*nghttp3_recv_push_promise)(nghttp3_conn *conn, int64_t stream_id, - int64_t push_id, int32_t token, - nghttp3_rcbuf *name, - nghttp3_rcbuf *value, uint8_t flags, - void *conn_user_data, - void *stream_user_data); - -/** - * @functypedef - * - * :type:`nghttp3_end_push_promise` is a callback function which is - * invoked when an incoming header block in PUSH_PROMISE has ended. - * - * The implementation of this callback must return 0 if it succeeds. - * Returning :macro:`NGHTTP3_ERR_CALLBACK_FAILURE` will return to the - * caller immediately. Any values other than 0 is treated as - * :macro:`NGHTTP3_ERR_CALLBACK_FAILURE`. - */ -typedef int (*nghttp3_end_push_promise)(nghttp3_conn *conn, int64_t stream_id, - int64_t push_id, void *conn_user_data, - void *stream_user_data); - /** * @functypedef * @@ -1827,26 +1741,7 @@ typedef int (*nghttp3_end_stream)(nghttp3_conn *conn, int64_t stream_id, /** * @functypedef * - * :type:`nghttp3_cancel_push` is a callback function which is invoked - * when the push identified by |push_id| is cancelled by remote - * endpoint. If a stream has been bound to the push ID, |stream_id| - * contains the stream ID and |stream_user_data| points to the stream - * user data. Otherwise, |stream_id| is -1 and |stream_user_data| is - * NULL. - * - * The implementation of this callback must return 0 if it succeeds. - * Returning :macro:`NGHTTP3_ERR_CALLBACK_FAILURE` will return to the - * caller immediately. Any values other than 0 is treated as - * :macro:`NGHTTP3_ERR_CALLBACK_FAILURE`. - */ -typedef int (*nghttp3_cancel_push)(nghttp3_conn *conn, int64_t push_id, - int64_t stream_id, void *conn_user_data, - void *stream_user_data); - -/** - * @functypedef - * - * :type:`nghttp3_send_stop_sending` is a callback function which is + * :type:`nghttp3_stop_sending` is a callback function which is * invoked when the library asks application to send STOP_SENDING to * the stream identified by |stream_id|. |app_error_code| indicates * the reason for this action. @@ -1856,43 +1751,61 @@ typedef int (*nghttp3_cancel_push)(nghttp3_conn *conn, int64_t push_id, * caller immediately. Any values other than 0 is treated as * :macro:`NGHTTP3_ERR_CALLBACK_FAILURE`. */ -typedef int (*nghttp3_send_stop_sending)(nghttp3_conn *conn, int64_t stream_id, - uint64_t app_error_code, - void *conn_user_data, - void *stream_user_data); +typedef int (*nghttp3_stop_sending)(nghttp3_conn *conn, int64_t stream_id, + uint64_t app_error_code, + void *conn_user_data, + void *stream_user_data); /** * @functypedef * - * :type:`nghttp3_push_stream` is a callback function which is invoked - * when a push stream identified by |stream_id| is opened with - * |push_id|. + * :type:`nghttp3_reset_stream` is a callback function which is + * invoked when the library asks application to reset stream + * identified by |stream_id|. |app_error_code| indicates the reason + * for this action. * * The implementation of this callback must return 0 if it succeeds. * Returning :macro:`NGHTTP3_ERR_CALLBACK_FAILURE` will return to the * caller immediately. Any values other than 0 is treated as * :macro:`NGHTTP3_ERR_CALLBACK_FAILURE`. */ -typedef int (*nghttp3_push_stream)(nghttp3_conn *conn, int64_t push_id, - int64_t stream_id, void *conn_user_data); +typedef int (*nghttp3_reset_stream)(nghttp3_conn *conn, int64_t stream_id, + uint64_t app_error_code, + void *conn_user_data, + void *stream_user_data); /** * @functypedef * - * :type:`nghttp3_reset_stream` is a callback function which is - * invoked when the library asks application to reset stream - * identified by |stream_id|. |app_error_code| indicates the reason - * for this action. + * :type:`nghttp3_shutdown` is a callback function which is invoked + * when a shutdown is initiated by the remote endpoint. For client, + * |id| contains a stream id of a client initiated stream, for server, + * it contains a push id. All client streams with stream id or pushes + * with push id equal to or larger than |id| are guaranteed to not be + * processed by the remote endpoint. + * + * Parameter |id| for client can contain a special value + * :macro:`NGHTTP3_SHUTDOWN_NOTICE_STREAM_ID` and for server it can + * contain special value + * :macro:`NGHTTP3_SHUTDOWN_NOTICE_PUSH_ID`. These values signal + * request for graceful shutdown of the connection, triggered by + * remote endpoint's invocation of + * `nghttp3_conn_submit_shutdown_notice`. + * + * It is possible that this callback is invoked multiple times on a + * single connection, however the |id| can only stay the same or + * decrease, never increase. * * The implementation of this callback must return 0 if it succeeds. * Returning :macro:`NGHTTP3_ERR_CALLBACK_FAILURE` will return to the * caller immediately. Any values other than 0 is treated as * :macro:`NGHTTP3_ERR_CALLBACK_FAILURE`. */ -typedef int (*nghttp3_reset_stream)(nghttp3_conn *conn, int64_t stream_id, - uint64_t app_error_code, - void *conn_user_data, - void *stream_user_data); +typedef int (*nghttp3_shutdown)(nghttp3_conn *conn, int64_t id, + void *conn_user_data); + +#define NGHTTP3_CALLBACKS_VERSION_V1 1 +#define NGHTTP3_CALLBACKS_VERSION NGHTTP3_CALLBACKS_VERSION_V1 /** * @struct @@ -1953,37 +1866,11 @@ typedef struct nghttp3_callbacks { */ nghttp3_end_headers end_trailers; /** - * :member:`begin_push_promise` is a callback function which is - * invoked when a push promise has started on a particular stream. - */ - nghttp3_begin_push_promise begin_push_promise; - /** - * :member:`recv_push_promise` is a callback function which is - * invoked when a single header field in a push promise is received - * on a particular stream. - */ - nghttp3_recv_push_promise recv_push_promise; - /** - * :member:`end_push_promise` is a callback function which is - * invoked when a push promise has ended on a particular stream. - */ - nghttp3_end_push_promise end_push_promise; - /** - * :member:`cancel_push` is a callback function which is invoked - * when a push promise has been cancelled by a remote endpoint. - */ - nghttp3_cancel_push cancel_push; - /** - * :member:`send_stop_sending` is a callback function which is - * invoked when the library asks application to send STOP_SENDING to - * a particular stream. - */ - nghttp3_send_stop_sending send_stop_sending; - /** - * :member:`push_stream` is a callback function which is invoked - * when a push stream has opened. + * :member:`stop_sending` is a callback function which is invoked + * when the library asks application to send STOP_SENDING to a + * particular stream. */ - nghttp3_push_stream push_stream; + nghttp3_stop_sending stop_sending; /** * :member:`end_stream` is a callback function which is invoked when * a receiving side of stream has been closed. @@ -1995,34 +1882,53 @@ typedef struct nghttp3_callbacks { * RESET_STREAM). */ nghttp3_reset_stream reset_stream; + /** + * :member:`shutdown` is a callback function which is invoked when + * the remote endpoint has signalled initiation of connection shutdown. + */ + nghttp3_shutdown shutdown; } nghttp3_callbacks; +#define NGHTTP3_SETTINGS_VERSION_V1 1 +#define NGHTTP3_SETTINGS_VERSION NGHTTP3_SETTINGS_VERSION_V1 + /** * @struct * * :type:`nghttp3_settings` defines HTTP/3 settings. */ -typedef struct { +typedef struct nghttp3_settings { /** * :member:`max_field_section_size` specifies the maximum header * section (block) size. */ uint64_t max_field_section_size; /** - * :member:`max_pushes` specifies the maximum number of concurrent - * pushes it accepts from a remote endpoint. + * :member:`qpack_max_dtable_capacity` is the maximum size of QPACK + * dynamic table. */ - uint64_t max_pushes; + size_t qpack_max_dtable_capacity; /** - * :member:`qpack_max_table_capacity` is the maximum size of QPACK - * dynamic table. + * :member:`qpack_encoder_max_dtable_capacity` is the upper bound of + * QPACK dynamic table capacity that the QPACK encoder is willing to + * use. The effective maximum dynamic table capacity is the minimum + * of this field and the value of the received + * SETTINGS_QPACK_MAX_TABLE_CAPACITY. If this field is set to 0, + * the encoder does not use the dynamic table. */ - size_t qpack_max_table_capacity; + size_t qpack_encoder_max_dtable_capacity; /** * :member:`qpack_blocked_streams` is the maximum number of streams * which can be blocked while they are being decoded. */ size_t qpack_blocked_streams; + /** + * :member:`enable_connect_protocol`, if set to nonzero, enables + * Extended CONNECT Method (see + * https://www.ietf.org/archive/id/draft-ietf-httpbis-h3-websockets-00.html). + * Client ignores this field. + */ + int enable_connect_protocol; } nghttp3_settings; /** @@ -2030,34 +1936,51 @@ typedef struct { * * `nghttp3_settings_default` fills |settings| with the default * values. + * + * - :member:`max_field_section_size + * ` = :expr:`((1ull << 62) - 1)` + * - :member:`qpack_max_dtable_capacity + * ` = 0 + * - :member:`qpack_encoder_max_dtable_capacity + * ` = 4096 + * - :member:`qpack_blocked_streams + * ` = 0 + * - :member:`enable_connect_protocol + * ` = 0 */ -NGHTTP3_EXTERN void nghttp3_settings_default(nghttp3_settings *settings); +NGHTTP3_EXTERN void +nghttp3_settings_default_versioned(int settings_version, + nghttp3_settings *settings); /** * @function * * `nghttp3_conn_client_new` creates :type:`nghttp3_conn` and * initializes it for client use. The pointer to the object is stored - * in |*pconn|. + * in |*pconn|. If |mem| is ``NULL``, the memory allocator returned + * by `nghttp3_mem_default` is used. */ -NGHTTP3_EXTERN int nghttp3_conn_client_new(nghttp3_conn **pconn, - const nghttp3_callbacks *callbacks, - const nghttp3_settings *settings, - const nghttp3_mem *mem, - void *conn_user_data); +NGHTTP3_EXTERN int +nghttp3_conn_client_new_versioned(nghttp3_conn **pconn, int callbacks_version, + const nghttp3_callbacks *callbacks, + int settings_version, + const nghttp3_settings *settings, + const nghttp3_mem *mem, void *conn_user_data); /** * @function * * `nghttp3_conn_server_new` creates :type:`nghttp3_conn` and * initializes it for server use. The pointer to the object is stored - * in |*pconn|. + * in |*pconn|. If |mem| is ``NULL``, the memory allocator returned + * by `nghttp3_mem_default` is used. */ -NGHTTP3_EXTERN int nghttp3_conn_server_new(nghttp3_conn **pconn, - const nghttp3_callbacks *callbacks, - const nghttp3_settings *settings, - const nghttp3_mem *mem, - void *conn_user_data); +NGHTTP3_EXTERN int +nghttp3_conn_server_new_versioned(nghttp3_conn **pconn, int callbacks_version, + const nghttp3_callbacks *callbacks, + int settings_version, + const nghttp3_settings *settings, + const nghttp3_mem *mem, void *conn_user_data); /** * @function @@ -2177,8 +2100,8 @@ NGHTTP3_EXTERN int nghttp3_conn_add_ack_offset(nghttp3_conn *conn, * `nghttp3_conn_block_stream` tells the library that stream * identified by |stream_id| is blocked due to QUIC flow control. */ -NGHTTP3_EXTERN int nghttp3_conn_block_stream(nghttp3_conn *conn, - int64_t stream_id); +NGHTTP3_EXTERN void nghttp3_conn_block_stream(nghttp3_conn *conn, + int64_t stream_id); /** * @function @@ -2190,6 +2113,26 @@ NGHTTP3_EXTERN int nghttp3_conn_block_stream(nghttp3_conn *conn, NGHTTP3_EXTERN int nghttp3_conn_unblock_stream(nghttp3_conn *conn, int64_t stream_id); +/** + * @function + * + * `nghttp3_conn_is_stream_writable` returns nonzero if a stream + * identified by |stream_id| is writable. It is not writable if: + * + * - the stream does not exist; or, + * - the stream is closed (e.g., `nghttp3_conn_close_stream` is + * called); or, + * - the stream is QUIC flow control blocked (e.g., + * `nghttp3_conn_block_stream` is called); or, + * - the stream is input data blocked (e.g., + * :macro:`NGHTTP3_ERR_WOULDBLOCK` is returned from + * :type:`nghttp3_read_data_callback`); or, + * - the stream is half-closed local (e.g., + * `nghttp3_conn_shutdown_stream_write` is called). + */ +NGHTTP3_EXTERN int nghttp3_conn_is_stream_writable(nghttp3_conn *conn, + int64_t stream_id); + /** * @function * @@ -2198,8 +2141,19 @@ NGHTTP3_EXTERN int nghttp3_conn_unblock_stream(nghttp3_conn *conn, * prohibited. This works like `nghttp3_conn_block_stream`, but it * cannot be unblocked by `nghttp3_conn_unblock_stream`. */ -NGHTTP3_EXTERN int nghttp3_conn_shutdown_stream_write(nghttp3_conn *conn, - int64_t stream_id); +NGHTTP3_EXTERN void nghttp3_conn_shutdown_stream_write(nghttp3_conn *conn, + int64_t stream_id); + +/** + * @function + * + * `nghttp3_conn_shutdown_stream_read` tells the library that + * read-side of stream denoted by |stream_id| is abruptly closed and + * any further incoming data and pending stream data should be + * discarded. + */ +NGHTTP3_EXTERN int nghttp3_conn_shutdown_stream_read(nghttp3_conn *conn, + int64_t stream_id); /** * @function @@ -2215,21 +2169,21 @@ NGHTTP3_EXTERN int nghttp3_conn_resume_stream(nghttp3_conn *conn, * * `nghttp3_conn_close_stream` closes stream identified by * |stream_id|. |app_error_code| is the reason of the closure. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :macro:`NGHTTP3_ERR_STREAM_NOT_FOUND` + * Stream not found. + * :macro:`NGHTTP3_ERR_H3_CLOSED_CRITICAL_STREAM` + * A critical stream is closed. + * :macro:`NGHTTP3_ERR_CALLBACK_FAILURE` + * User callback failed */ NGHTTP3_EXTERN int nghttp3_conn_close_stream(nghttp3_conn *conn, int64_t stream_id, uint64_t app_error_code); -/** - * @function - * - * `nghttp3_conn_reset_stream` must be called if stream identified by - * |stream_id| is reset by a remote endpoint. This is required in - * order to cancel QPACK stream. - */ -NGHTTP3_EXTERN int nghttp3_conn_reset_stream(nghttp3_conn *conn, - int64_t stream_id); - /** * @macrosection * @@ -2237,19 +2191,25 @@ NGHTTP3_EXTERN int nghttp3_conn_reset_stream(nghttp3_conn *conn, */ /** + * @macro + * * :macro:`NGHTTP3_DATA_FLAG_NONE` indicates no flag set. */ -#define NGHTTP3_DATA_FLAG_NONE 0x00 +#define NGHTTP3_DATA_FLAG_NONE 0x00u /** + * @macro + * * :macro:`NGHTTP3_DATA_FLAG_EOF` indicates that all request or * response body has been provided to the library. It also indicates * that sending side of stream is closed unless * :macro:`NGHTTP3_DATA_FLAG_NO_END_STREAM` is given at the same time. */ -#define NGHTTP3_DATA_FLAG_EOF 0x01 +#define NGHTTP3_DATA_FLAG_EOF 0x01u /** + * @macro + * * :macro:`NGHTTP3_DATA_FLAG_NO_END_STREAM` indicates that sending * side of stream is not closed even if :macro:`NGHTTP3_DATA_FLAG_EOF` * is set. Usually this flag is used to send trailer fields with @@ -2257,7 +2217,7 @@ NGHTTP3_EXTERN int nghttp3_conn_reset_stream(nghttp3_conn *conn, * `nghttp3_conn_submit_trailers()` has been called, regardless of * this flag, the submitted trailer fields are sent. */ -#define NGHTTP3_DATA_FLAG_NO_END_STREAM 0x02 +#define NGHTTP3_DATA_FLAG_NO_END_STREAM 0x02u /** * @function @@ -2320,7 +2280,7 @@ typedef nghttp3_ssize (*nghttp3_read_data_callback)( * :type:`nghttp3_data_reader` specifies the way how to generate * request or response body. */ -typedef struct { +typedef struct nghttp3_data_reader { /** * :member:`read_data` is a callback function to generate body. */ @@ -2343,24 +2303,6 @@ NGHTTP3_EXTERN int nghttp3_conn_submit_request( nghttp3_conn *conn, int64_t stream_id, const nghttp3_nv *nva, size_t nvlen, const nghttp3_data_reader *dr, void *stream_user_data); -/** - * @function - * - * `nghttp3_conn_submit_push_promise` submits push promise on the - * stream identified by |stream_id|. |stream_id| must be a client - * initiated bidirectional stream. Only server can submit push - * promise. On success, a push ID is assigned to |*ppush_id|. |nva| - * of length |nvlen| specifies HTTP request header fields. In order - * to submit HTTP response, first call - * `nghttp3_conn_bind_push_stream()` and then - * `nghttp3_conn_submit_response()`. - */ -NGHTTP3_EXTERN int nghttp3_conn_submit_push_promise(nghttp3_conn *conn, - int64_t *ppush_id, - int64_t stream_id, - const nghttp3_nv *nva, - size_t nvlen); - /** * @function * @@ -2401,35 +2343,12 @@ NGHTTP3_EXTERN int nghttp3_conn_submit_trailers(nghttp3_conn *conn, const nghttp3_nv *nva, size_t nvlen); -/** - * @function - * - * `nghttp3_conn_bind_push_stream` binds the stream identified by - * |stream_id| to the push identified by |push_id|. |stream_id| must - * be a server initiated unidirectional stream. |push_id| must be - * obtained from `nghttp3_conn_submit_push_promise()`. To send - * response to this push, call `nghttp3_conn_submit_response()`. - */ -NGHTTP3_EXTERN int nghttp3_conn_bind_push_stream(nghttp3_conn *conn, - int64_t push_id, - int64_t stream_id); - -/** - * @function - * - * `nghttp3_conn_cancel_push` cancels the push identified by - * |push_id|. - */ -NGHTTP3_EXTERN int nghttp3_conn_cancel_push(nghttp3_conn *conn, - int64_t push_id); - /** * @function * * `nghttp3_conn_submit_shutdown_notice` notifies the other endpoint - * to stop creating new stream (for server) or push (for client). - * After a couple of RTTs later, call `nghttp3_conn_shutdown` to start - * graceful shutdown. + * to stop creating new stream. After a couple of RTTs later, call + * `nghttp3_conn_shutdown` to start graceful shutdown. */ NGHTTP3_EXTERN int nghttp3_conn_submit_shutdown_notice(nghttp3_conn *conn); @@ -2439,8 +2358,8 @@ NGHTTP3_EXTERN int nghttp3_conn_submit_shutdown_notice(nghttp3_conn *conn); * `nghttp3_conn_shutdown` starts graceful shutdown. It should be * called after `nghttp3_conn_submit_shutdown_notice` and a couple of * RTT. After calling this function, the local endpoint starts - * rejecting new incoming streams (for server) or pushes (for client). - * The existing streams or pushes are processed normally. + * rejecting new incoming streams. The existing streams are processed + * normally. */ NGHTTP3_EXTERN int nghttp3_conn_shutdown(nghttp3_conn *conn); @@ -2459,18 +2378,23 @@ NGHTTP3_EXTERN int nghttp3_conn_set_stream_user_data(nghttp3_conn *conn, * * `nghttp3_conn_get_frame_payload_left` returns the number of bytes * left to read current frame payload for a stream denoted by - * |stream_id|. If no such stream is found, it returns - * :macro:`NGHTTP3_ERR_STREAM_NOT_FOUND`. + * |stream_id|. If no such stream is found, it returns 0. + */ +NGHTTP3_EXTERN uint64_t nghttp3_conn_get_frame_payload_left(nghttp3_conn *conn, + int64_t stream_id); + +/** + * @macrosection + * + * HTTP stream priority flags */ -NGHTTP3_EXTERN int64_t nghttp3_conn_get_frame_payload_left(nghttp3_conn *conn, - int64_t stream_id); /** * @macro * * :macro:`NGHTTP3_DEFAULT_URGENCY` is the default urgency level. */ -#define NGHTTP3_DEFAULT_URGENCY 1 +#define NGHTTP3_DEFAULT_URGENCY 3 /** * @macro @@ -2518,8 +2442,9 @@ typedef struct nghttp3_pri { * @function * * `nghttp3_conn_get_stream_priority` stores stream priority of a - * stream denoted by |stream_id| into |*dest|. Only server can use - * this function. + * stream denoted by |stream_id| into |*dest|. |stream_id| must + * identify client initiated bidirectional stream. Only server can + * use this function. * * This function must not be called if |conn| is initialized as * client. @@ -2537,15 +2462,22 @@ NGHTTP3_EXTERN int nghttp3_conn_get_stream_priority(nghttp3_conn *conn, /** * @function * - * `nghttp3_conn_set_stream_priority` updates stream priority of a - * stream denoted by |stream_id| by the value pointed by |pri|. + * `nghttp3_conn_set_stream_priority` updates priority of a stream + * denoted by |stream_id| with the value pointed by |pri|. + * |stream_id| must identify client initiated bidirectional stream. * - * This function must not be called if |conn| is initialized as - * client. + * Both client and server can update stream priority with this + * function. + * + * If server updates stream priority with this function, it completely + * overrides stream priority set by client and the attempts to update + * priority by client are ignored. * * This function returns 0 if it succeeds, or one of the following * negative error codes: * + * :macro:`NGHTTP3_ERR_INVALID_ARGUMENT` + * |stream_id| is not a client initiated bidirectional stream ID. * :macro:`NGHTTP3_ERR_STREAM_NOT_FOUND` * Stream not found. * :macro:`NGHTTP3_ERR_NOMEM` @@ -2572,14 +2504,14 @@ nghttp3_conn_is_remote_qpack_encoder_stream(nghttp3_conn *conn, * `nghttp3_vec_len` returns the sum of length in |vec| of |cnt| * elements. */ -NGHTTP3_EXTERN size_t nghttp3_vec_len(const nghttp3_vec *vec, size_t cnt); +NGHTTP3_EXTERN uint64_t nghttp3_vec_len(const nghttp3_vec *vec, size_t cnt); /** * @function * * `nghttp3_check_header_name` returns nonzero if HTTP header field * name |name| of length |len| is valid according to - * http://tools.ietf.org/html/rfc7230#section-3.2 + * :rfc:`7230#section-3.2`. * * Because this is a header field name in HTTP/3, the upper cased * alphabet is treated as error. @@ -2591,7 +2523,7 @@ NGHTTP3_EXTERN int nghttp3_check_header_name(const uint8_t *name, size_t len); * * `nghttp3_check_header_value` returns nonzero if HTTP header field * value |value| of length |len| is valid according to - * http://tools.ietf.org/html/rfc7230#section-3.2 + * :rfc:`7230#section-3.2`. */ NGHTTP3_EXTERN int nghttp3_check_header_value(const uint8_t *value, size_t len); @@ -2614,6 +2546,12 @@ NGHTTP3_EXTERN int nghttp3_http_parse_priority(nghttp3_pri *dest, const uint8_t *value, size_t len); +/** + * @macrosection + * + * nghttp3_info flags + */ + /** * @macro * @@ -2627,7 +2565,7 @@ NGHTTP3_EXTERN int nghttp3_http_parse_priority(nghttp3_pri *dest, * :type:`nghttp3_info` is what `nghttp3_version()` returns. It holds * information about the particular nghttp3 version. */ -typedef struct { +typedef struct nghttp3_info { /** * :member:`age` is the age of this struct. This instance of * nghttp3 sets it to :macro:`NGHTTP3_VERSION_AGE` but a future @@ -2657,7 +2595,49 @@ typedef struct { * met, this function will return a ``NULL``. Pass in 0 to skip the * version checking. */ -NGHTTP3_EXTERN nghttp3_info *nghttp3_version(int least_version); +NGHTTP3_EXTERN const nghttp3_info *nghttp3_version(int least_version); + +/** + * @function + * + * `nghttp3_err_is_fatal` returns nonzero if |liberr| is a fatal + * error. |liberr| must be one of nghttp3 library error codes (which + * is defined as NGHTTP3_ERR_* macro, such as + * :macro:`NGHTTP3_ERR_NOMEM`). + */ +NGHTTP3_EXTERN int nghttp3_err_is_fatal(int liberr); + +/* + * Versioned function wrappers + */ + +/* + * `nghttp3_settings_default` is a wrapper around + * `nghttp3_settings_default_versioned` to set the correct struct + * version. + */ +#define nghttp3_settings_default(SETTINGS) \ + nghttp3_settings_default_versioned(NGHTTP3_SETTINGS_VERSION, (SETTINGS)) + +/* + * `nghttp3_conn_client_new` is a wrapper around + * `nghttp3_conn_client_new_versioned` to set the correct struct + * version. + */ +#define nghttp3_conn_client_new(PCONN, CALLBACKS, SETTINGS, MEM, USER_DATA) \ + nghttp3_conn_client_new_versioned((PCONN), NGHTTP3_CALLBACKS_VERSION, \ + (CALLBACKS), NGHTTP3_SETTINGS_VERSION, \ + (SETTINGS), (MEM), (USER_DATA)) + +/* + * `nghttp3_conn_server_new` is a wrapper around + * `nghttp3_conn_server_new_versioned` to set the correct struct + * version. + */ +#define nghttp3_conn_server_new(PCONN, CALLBACKS, SETTINGS, MEM, USER_DATA) \ + nghttp3_conn_server_new_versioned((PCONN), NGHTTP3_CALLBACKS_VERSION, \ + (CALLBACKS), NGHTTP3_SETTINGS_VERSION, \ + (SETTINGS), (MEM), (USER_DATA)) #ifdef __cplusplus } diff --git a/deps/ngtcp2/nghttp3/lib/includes/nghttp3/version.h b/deps/ngtcp2/nghttp3/lib/includes/nghttp3/version.h index 69d29e9f140..bc57eb2cfcf 100644 --- a/deps/ngtcp2/nghttp3/lib/includes/nghttp3/version.h +++ b/deps/ngtcp2/nghttp3/lib/includes/nghttp3/version.h @@ -31,7 +31,7 @@ * * Version number of the nghttp3 library release. */ -#define NGHTTP3_VERSION "0.1.0-DEV" +#define NGHTTP3_VERSION "0.7.0" /** * @macro @@ -41,6 +41,6 @@ * number, 8 bits for minor and 8 bits for patch. Version 1.2.3 * becomes 0x010203. */ -#define NGHTTP3_VERSION_NUM 0x000100 +#define NGHTTP3_VERSION_NUM 0x000700 #endif /* NGHTTP3_VERSION_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_balloc.c b/deps/ngtcp2/nghttp3/lib/nghttp3_balloc.c new file mode 100644 index 00000000000..e134d0f4dce --- /dev/null +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_balloc.c @@ -0,0 +1,91 @@ +/* + * nghttp3 + * + * Copyright (c) 2022 nghttp3 contributors + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "nghttp3_balloc.h" + +#include + +#include "nghttp3_mem.h" + +void nghttp3_balloc_init(nghttp3_balloc *balloc, size_t blklen, + const nghttp3_mem *mem) { + assert((blklen & 0xfu) == 0); + + balloc->mem = mem; + balloc->blklen = blklen; + balloc->head = NULL; + nghttp3_buf_wrap_init(&balloc->buf, (void *)"", 0); +} + +void nghttp3_balloc_free(nghttp3_balloc *balloc) { + if (balloc == NULL) { + return; + } + + nghttp3_balloc_clear(balloc); +} + +void nghttp3_balloc_clear(nghttp3_balloc *balloc) { + nghttp3_memblock_hd *p, *next; + + for (p = balloc->head; p; p = next) { + next = p->next; + nghttp3_mem_free(balloc->mem, p); + } + + balloc->head = NULL; + nghttp3_buf_wrap_init(&balloc->buf, (void *)"", 0); +} + +int nghttp3_balloc_get(nghttp3_balloc *balloc, void **pbuf, size_t n) { + uint8_t *p; + nghttp3_memblock_hd *hd; + + assert(n <= balloc->blklen); + + if (nghttp3_buf_left(&balloc->buf) < n) { + p = nghttp3_mem_malloc(balloc->mem, sizeof(nghttp3_memblock_hd) + 0x10u + + balloc->blklen); + if (p == NULL) { + return NGHTTP3_ERR_NOMEM; + } + + hd = (nghttp3_memblock_hd *)(void *)p; + hd->next = balloc->head; + balloc->head = hd; + nghttp3_buf_wrap_init( + &balloc->buf, + (uint8_t *)(((uintptr_t)p + sizeof(nghttp3_memblock_hd) + 0xfu) & + ~(uintptr_t)0xfu), + balloc->blklen); + } + + assert(((uintptr_t)balloc->buf.last & 0xfu) == 0); + + *pbuf = balloc->buf.last; + balloc->buf.last += (n + 0xfu) & ~(uintptr_t)0xfu; + + return 0; +} diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_balloc.h b/deps/ngtcp2/nghttp3/lib/nghttp3_balloc.h new file mode 100644 index 00000000000..e02f61d16b5 --- /dev/null +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_balloc.h @@ -0,0 +1,92 @@ +/* + * nghttp3 + * + * Copyright (c) 2022 nghttp3 contributors + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP3_BALLOC_H +#define NGHTTP3_BALLOC_H + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +#include "nghttp3_buf.h" + +typedef struct nghttp3_memblock_hd nghttp3_memblock_hd; + +/* + * nghttp3_memblock_hd is the header of memory block. + */ +struct nghttp3_memblock_hd { + nghttp3_memblock_hd *next; +}; + +/* + * nghttp3_balloc is a custom memory allocator. It allocates |blklen| + * bytes of memory at once on demand, and returns its slice when the + * allocation is requested. + */ +typedef struct nghttp3_balloc { + /* mem is the underlying memory allocator. */ + const nghttp3_mem *mem; + /* blklen is the size of memory block. */ + size_t blklen; + /* head points to the list of memory block allocated so far. */ + nghttp3_memblock_hd *head; + /* buf wraps the current memory block for allocation requests. */ + nghttp3_buf buf; +} nghttp3_balloc; + +/* + * nghttp3_balloc_init initializes |balloc| with |blklen| which is the + * size of memory block. + */ +void nghttp3_balloc_init(nghttp3_balloc *balloc, size_t blklen, + const nghttp3_mem *mem); + +/* + * nghttp3_balloc_free releases all allocated memory blocks. + */ +void nghttp3_balloc_free(nghttp3_balloc *balloc); + +/* + * nghttp3_balloc_get allocates |n| bytes of memory and assigns its + * pointer to |*pbuf|. + * + * It returns 0 if it succeeds, or one of the following negative error + * codes: + * + * NGHTTP3_ERR_NOMEM + * Out of memory. + */ +int nghttp3_balloc_get(nghttp3_balloc *balloc, void **pbuf, size_t n); + +/* + * nghttp3_balloc_clear releases all allocated memory blocks and + * initializes its state. + */ +void nghttp3_balloc_clear(nghttp3_balloc *balloc); + +#endif /* NGHTTP3_BALLOC_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_conn.c b/deps/ngtcp2/nghttp3/lib/nghttp3_conn.c index 2f9ce7b10ca..1fbb72c98af 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_conn.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_conn.c @@ -34,6 +34,10 @@ #include "nghttp3_conv.h" #include "nghttp3_http.h" +/* NGHTTP3_QPACK_ENCODER_MAX_DTABLE_CAPACITY is the upper bound of the + dynamic table capacity that QPACK encoder is willing to use. */ +#define NGHTTP3_QPACK_ENCODER_MAX_DTABLE_CAPACITY 4096 + /* * conn_remote_stream_uni returns nonzero if |stream_id| is remote * unidirectional stream ID. @@ -62,15 +66,16 @@ static int conn_call_begin_headers(nghttp3_conn *conn, nghttp3_stream *stream) { return 0; } -static int conn_call_end_headers(nghttp3_conn *conn, nghttp3_stream *stream) { +static int conn_call_end_headers(nghttp3_conn *conn, nghttp3_stream *stream, + int fin) { int rv; if (!conn->callbacks.end_headers) { return 0; } - rv = conn->callbacks.end_headers(conn, stream->node.nid.id, conn->user_data, - stream->user_data); + rv = conn->callbacks.end_headers(conn, stream->node.nid.id, fin, + conn->user_data, stream->user_data); if (rv != 0) { /* TODO Allow ignore headers */ return NGHTTP3_ERR_CALLBACK_FAILURE; @@ -97,52 +102,16 @@ static int conn_call_begin_trailers(nghttp3_conn *conn, return 0; } -static int conn_call_end_trailers(nghttp3_conn *conn, nghttp3_stream *stream) { +static int conn_call_end_trailers(nghttp3_conn *conn, nghttp3_stream *stream, + int fin) { int rv; if (!conn->callbacks.end_trailers) { return 0; } - rv = conn->callbacks.end_trailers(conn, stream->node.nid.id, conn->user_data, - stream->user_data); - if (rv != 0) { - /* TODO Allow ignore headers */ - return NGHTTP3_ERR_CALLBACK_FAILURE; - } - - return 0; -} - -static int conn_call_begin_push_promise(nghttp3_conn *conn, - nghttp3_stream *stream, - int64_t push_id) { - int rv; - - if (!conn->callbacks.begin_push_promise) { - return 0; - } - - rv = conn->callbacks.begin_push_promise(conn, stream->node.nid.id, push_id, - conn->user_data, stream->user_data); - if (rv != 0) { - /* TODO Allow ignore headers */ - return NGHTTP3_ERR_CALLBACK_FAILURE; - } - - return 0; -} - -static int conn_call_end_push_promise(nghttp3_conn *conn, - nghttp3_stream *stream, int64_t push_id) { - int rv; - - if (!conn->callbacks.end_push_promise) { - return 0; - } - - rv = conn->callbacks.end_push_promise(conn, stream->node.nid.id, push_id, - conn->user_data, stream->user_data); + rv = conn->callbacks.end_trailers(conn, stream->node.nid.id, fin, + conn->user_data, stream->user_data); if (rv != 0) { /* TODO Allow ignore headers */ return NGHTTP3_ERR_CALLBACK_FAILURE; @@ -167,36 +136,16 @@ static int conn_call_end_stream(nghttp3_conn *conn, nghttp3_stream *stream) { return 0; } -static int conn_call_cancel_push(nghttp3_conn *conn, int64_t push_id, - nghttp3_stream *stream) { - int rv; - - if (!conn->callbacks.cancel_push) { - return 0; - } - - rv = conn->callbacks.cancel_push( - conn, push_id, stream ? stream->node.nid.id : -1, conn->user_data, - stream ? stream->user_data : NULL); - if (rv != 0) { - return NGHTTP3_ERR_CALLBACK_FAILURE; - } - - return 0; -} - -static int conn_call_send_stop_sending(nghttp3_conn *conn, - nghttp3_stream *stream, - uint64_t app_error_code) { +static int conn_call_stop_sending(nghttp3_conn *conn, nghttp3_stream *stream, + uint64_t app_error_code) { int rv; - if (!conn->callbacks.send_stop_sending) { + if (!conn->callbacks.stop_sending) { return 0; } - rv = conn->callbacks.send_stop_sending(conn, stream->node.nid.id, - app_error_code, conn->user_data, - stream->user_data); + rv = conn->callbacks.stop_sending(conn, stream->node.nid.id, app_error_code, + conn->user_data, stream->user_data); if (rv != 0) { return NGHTTP3_ERR_CALLBACK_FAILURE; } @@ -221,23 +170,6 @@ static int conn_call_reset_stream(nghttp3_conn *conn, nghttp3_stream *stream, return 0; } -static int conn_call_push_stream(nghttp3_conn *conn, int64_t push_id, - nghttp3_stream *stream) { - int rv; - - if (!conn->callbacks.push_stream) { - return 0; - } - - rv = conn->callbacks.push_stream(conn, push_id, stream->node.nid.id, - conn->user_data); - if (rv != 0) { - return NGHTTP3_ERR_CALLBACK_FAILURE; - } - - return 0; -} - static int conn_call_deferred_consume(nghttp3_conn *conn, nghttp3_stream *stream, size_t nconsumed) { @@ -278,37 +210,40 @@ static int cycle_less(const nghttp3_pq_entry *lhsx, return rhs->cycle - lhs->cycle <= NGHTTP3_TNODE_MAX_CYCLE_GAP; } -static int conn_new(nghttp3_conn **pconn, int server, - const nghttp3_callbacks *callbacks, +static int conn_new(nghttp3_conn **pconn, int server, int callbacks_version, + const nghttp3_callbacks *callbacks, int settings_version, const nghttp3_settings *settings, const nghttp3_mem *mem, void *user_data) { int rv; nghttp3_conn *conn; size_t i; + (void)callbacks_version; + (void)settings_version; + + if (mem == NULL) { + mem = nghttp3_mem_default(); + } conn = nghttp3_mem_calloc(mem, 1, sizeof(nghttp3_conn)); if (conn == NULL) { return NGHTTP3_ERR_NOMEM; } - rv = nghttp3_map_init(&conn->streams, mem); - if (rv != 0) { - goto streams_init_fail; - } + nghttp3_objalloc_init(&conn->out_chunk_objalloc, + NGHTTP3_STREAM_MIN_CHUNK_SIZE * 16, mem); + nghttp3_objalloc_stream_init(&conn->stream_objalloc, 64, mem); - rv = nghttp3_map_init(&conn->pushes, mem); - if (rv != 0) { - goto pushes_init_fail; - } + nghttp3_map_init(&conn->streams, mem); rv = nghttp3_qpack_decoder_init(&conn->qdec, - settings->qpack_max_table_capacity, + settings->qpack_max_dtable_capacity, settings->qpack_blocked_streams, mem); if (rv != 0) { goto qdec_init_fail; } - rv = nghttp3_qpack_encoder_init(&conn->qenc, 0, 0, mem); + rv = nghttp3_qpack_encoder_init( + &conn->qenc, settings->qpack_encoder_max_dtable_capacity, mem); if (rv != 0) { goto qenc_init_fail; } @@ -319,18 +254,13 @@ static int conn_new(nghttp3_conn **pconn, int server, nghttp3_pq_init(&conn->sched[i].spq, cycle_less, mem); } - rv = nghttp3_idtr_init(&conn->remote.bidi.idtr, server, mem); - if (rv != 0) { - goto remote_bidi_idtr_init_fail; - } - - rv = nghttp3_gaptr_init(&conn->remote.uni.push_idtr, mem); - if (rv != 0) { - goto push_idtr_init_fail; - } + nghttp3_idtr_init(&conn->remote.bidi.idtr, server, mem); conn->callbacks = *callbacks; conn->local.settings = *settings; + if (!server) { + conn->local.settings.enable_connect_protocol = 0; + } nghttp3_settings_default(&conn->remote.settings); conn->mem = mem; conn->user_data = user_data; @@ -338,52 +268,50 @@ static int conn_new(nghttp3_conn **pconn, int server, conn->server = server; conn->rx.goaway_id = NGHTTP3_VARINT_MAX + 1; conn->tx.goaway_id = NGHTTP3_VARINT_MAX + 1; - conn->rx.max_stream_id_bidi = 0; - conn->rx.max_push_id = 0; + conn->rx.max_stream_id_bidi = -4; *pconn = conn; return 0; -push_idtr_init_fail: - nghttp3_idtr_free(&conn->remote.bidi.idtr); -remote_bidi_idtr_init_fail: - nghttp3_qpack_encoder_free(&conn->qenc); qenc_init_fail: nghttp3_qpack_decoder_free(&conn->qdec); qdec_init_fail: - nghttp3_map_free(&conn->pushes); -pushes_init_fail: nghttp3_map_free(&conn->streams); -streams_init_fail: + nghttp3_objalloc_free(&conn->stream_objalloc); + nghttp3_objalloc_free(&conn->out_chunk_objalloc); nghttp3_mem_free(mem, conn); return rv; } -int nghttp3_conn_client_new(nghttp3_conn **pconn, - const nghttp3_callbacks *callbacks, - const nghttp3_settings *settings, - const nghttp3_mem *mem, void *user_data) { +int nghttp3_conn_client_new_versioned(nghttp3_conn **pconn, + int callbacks_version, + const nghttp3_callbacks *callbacks, + int settings_version, + const nghttp3_settings *settings, + const nghttp3_mem *mem, void *user_data) { int rv; - rv = conn_new(pconn, /* server = */ 0, callbacks, settings, mem, user_data); + rv = conn_new(pconn, /* server = */ 0, callbacks_version, callbacks, + settings_version, settings, mem, user_data); if (rv != 0) { return rv; } - (*pconn)->remote.uni.unsent_max_pushes = settings->max_pushes; - return 0; } -int nghttp3_conn_server_new(nghttp3_conn **pconn, - const nghttp3_callbacks *callbacks, - const nghttp3_settings *settings, - const nghttp3_mem *mem, void *user_data) { +int nghttp3_conn_server_new_versioned(nghttp3_conn **pconn, + int callbacks_version, + const nghttp3_callbacks *callbacks, + int settings_version, + const nghttp3_settings *settings, + const nghttp3_mem *mem, void *user_data) { int rv; - rv = conn_new(pconn, /* server = */ 1, callbacks, settings, mem, user_data); + rv = conn_new(pconn, /* server = */ 1, callbacks_version, callbacks, + settings_version, settings, mem, user_data); if (rv != 0) { return rv; } @@ -391,17 +319,8 @@ int nghttp3_conn_server_new(nghttp3_conn **pconn, return 0; } -static int free_push_promise(nghttp3_map_entry *ent, void *ptr) { - nghttp3_push_promise *pp = nghttp3_struct_of(ent, nghttp3_push_promise, me); - const nghttp3_mem *mem = ptr; - - nghttp3_push_promise_del(pp, mem); - - return 0; -} - -static int free_stream(nghttp3_map_entry *ent, void *ptr) { - nghttp3_stream *stream = nghttp3_struct_of(ent, nghttp3_stream, me); +static int free_stream(void *data, void *ptr) { + nghttp3_stream *stream = data; (void)ptr; @@ -420,8 +339,6 @@ void nghttp3_conn_del(nghttp3_conn *conn) { nghttp3_buf_free(&conn->tx.qpack.ebuf, conn->mem); nghttp3_buf_free(&conn->tx.qpack.rbuf, conn->mem); - nghttp3_gaptr_free(&conn->remote.uni.push_idtr); - nghttp3_idtr_free(&conn->remote.bidi.idtr); for (i = 0; i < NGHTTP3_URGENCY_LEVELS; ++i) { @@ -433,15 +350,30 @@ void nghttp3_conn_del(nghttp3_conn *conn) { nghttp3_qpack_encoder_free(&conn->qenc); nghttp3_qpack_decoder_free(&conn->qdec); - nghttp3_map_each_free(&conn->pushes, free_push_promise, (void *)conn->mem); - nghttp3_map_free(&conn->pushes); - nghttp3_map_each_free(&conn->streams, free_stream, NULL); nghttp3_map_free(&conn->streams); + nghttp3_objalloc_free(&conn->stream_objalloc); + nghttp3_objalloc_free(&conn->out_chunk_objalloc); + nghttp3_mem_free(conn->mem, conn); } +static int conn_bidi_idtr_open(nghttp3_conn *conn, int64_t stream_id) { + int rv; + + rv = nghttp3_idtr_open(&conn->remote.bidi.idtr, stream_id); + if (rv != 0) { + return rv; + } + + if (nghttp3_ksl_len(&conn->remote.bidi.idtr.gap.gap) > 32) { + nghttp3_gaptr_drop_first_gap(&conn->remote.bidi.idtr.gap); + } + + return 0; +} + nghttp3_ssize nghttp3_conn_read_stream(nghttp3_conn *conn, int64_t stream_id, const uint8_t *src, size_t srclen, int fin) { @@ -455,8 +387,18 @@ nghttp3_ssize nghttp3_conn_read_stream(nghttp3_conn *conn, int64_t stream_id, /* QUIC transport ensures that this is new stream. */ if (conn->server) { if (nghttp3_client_stream_bidi(stream_id)) { - rv = nghttp3_idtr_open(&conn->remote.bidi.idtr, stream_id); - assert(rv == 0); + rv = conn_bidi_idtr_open(conn, stream_id); + if (rv != 0) { + if (nghttp3_err_is_fatal(rv)) { + return rv; + } + + /* Ignore return value. We might drop the first gap if there + are many gaps if QUIC stack allows too many holes in stream + ID space. idtr is used to decide whether PRIORITY_UPDATE + frame should be ignored or not and the frame is optional. + Ignoring them causes no harm. */ + } conn->rx.max_stream_id_bidi = nghttp3_max(conn->rx.max_stream_id_bidi, stream_id); @@ -566,12 +508,7 @@ static nghttp3_ssize conn_read_type(nghttp3_conn *conn, nghttp3_stream *stream, rstate->state = NGHTTP3_CTRL_STREAM_STATE_FRAME_TYPE; break; case NGHTTP3_STREAM_TYPE_PUSH: - if (conn->server) { - return NGHTTP3_ERR_H3_STREAM_CREATION_ERROR; - } - stream->type = NGHTTP3_STREAM_TYPE_PUSH; - rstate->state = NGHTTP3_PUSH_STREAM_STATE_PUSH_ID; - break; + return NGHTTP3_ERR_H3_STREAM_CREATION_ERROR; case NGHTTP3_STREAM_TYPE_QPACK_ENCODER: if (conn->flags & NGHTTP3_CONN_FLAG_QPACK_ENCODER_OPENED) { return NGHTTP3_ERR_H3_STREAM_CREATION_ERROR; @@ -603,7 +540,6 @@ nghttp3_ssize nghttp3_conn_read_uni(nghttp3_conn *conn, nghttp3_stream *stream, int fin) { nghttp3_ssize nread = 0; nghttp3_ssize nconsumed = 0; - size_t push_nproc; int rv; assert(srclen || fin); @@ -646,13 +582,6 @@ nghttp3_ssize nghttp3_conn_read_uni(nghttp3_conn *conn, nghttp3_stream *stream, } nconsumed = nghttp3_conn_read_control(conn, stream, src, srclen); break; - case NGHTTP3_STREAM_TYPE_PUSH: - if (fin) { - stream->flags |= NGHTTP3_STREAM_FLAG_READ_EOF; - } - nconsumed = - nghttp3_conn_read_push(conn, &push_nproc, stream, src, srclen, fin); - break; case NGHTTP3_STREAM_TYPE_QPACK_ENCODER: if (fin) { return NGHTTP3_ERR_H3_CLOSED_CRITICAL_STREAM; @@ -668,8 +597,7 @@ nghttp3_ssize nghttp3_conn_read_uni(nghttp3_conn *conn, nghttp3_stream *stream, case NGHTTP3_STREAM_TYPE_UNKNOWN: nconsumed = (nghttp3_ssize)srclen; - rv = conn_call_send_stop_sending(conn, stream, - NGHTTP3_H3_STREAM_CREATION_ERROR); + rv = conn_call_stop_sending(conn, stream, NGHTTP3_H3_STREAM_CREATION_ERROR); if (rv != 0) { return rv; } @@ -701,6 +629,8 @@ nghttp3_ssize nghttp3_conn_read_control(nghttp3_conn *conn, size_t nconsumed = 0; int busy = 0; size_t len; + const uint8_t *pri_field_value = NULL; + size_t pri_field_valuelen = 0; assert(srclen); @@ -753,12 +683,6 @@ nghttp3_ssize nghttp3_conn_read_control(nghttp3_conn *conn, } switch (rstate->fr.hd.type) { - case NGHTTP3_FRAME_CANCEL_PUSH: - if (rstate->left == 0) { - return NGHTTP3_ERR_H3_FRAME_ERROR; - } - rstate->state = NGHTTP3_CTRL_STREAM_STATE_CANCEL_PUSH; - break; case NGHTTP3_FRAME_SETTINGS: /* SETTINGS frame might be empty. */ if (rstate->left == 0) { @@ -782,6 +706,19 @@ nghttp3_ssize nghttp3_conn_read_control(nghttp3_conn *conn, } rstate->state = NGHTTP3_CTRL_STREAM_STATE_MAX_PUSH_ID; break; + case NGHTTP3_FRAME_PRIORITY_UPDATE: + if (!conn->server) { + return NGHTTP3_ERR_H3_FRAME_UNEXPECTED; + } + if (rstate->left == 0) { + return NGHTTP3_ERR_H3_FRAME_ERROR; + } + rstate->state = NGHTTP3_CTRL_STREAM_STATE_PRIORITY_UPDATE_PRI_ELEM_ID; + break; + case NGHTTP3_FRAME_PRIORITY_UPDATE_PUSH_ID: + /* We do not support push */ + return NGHTTP3_ERR_H3_ID_ERROR; + case NGHTTP3_FRAME_CANCEL_PUSH: /* We do not support push */ case NGHTTP3_FRAME_DATA: case NGHTTP3_FRAME_HEADERS: case NGHTTP3_FRAME_PUSH_PROMISE: @@ -797,34 +734,6 @@ nghttp3_ssize nghttp3_conn_read_control(nghttp3_conn *conn, break; } break; - case NGHTTP3_CTRL_STREAM_STATE_CANCEL_PUSH: - len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); - assert(len > 0); - nread = nghttp3_read_varint(rvint, p, len, frame_fin(rstate, len)); - if (nread < 0) { - return NGHTTP3_ERR_H3_FRAME_ERROR; - } - - p += nread; - nconsumed += (size_t)nread; - rstate->left -= nread; - if (rvint->left) { - return (nghttp3_ssize)nconsumed; - } - rstate->fr.cancel_push.push_id = rvint->acc; - nghttp3_varint_read_state_reset(rvint); - - if (conn->server) { - rv = nghttp3_conn_on_server_cancel_push(conn, &rstate->fr.cancel_push); - } else { - rv = nghttp3_conn_on_client_cancel_push(conn, &rstate->fr.cancel_push); - } - if (rv != 0) { - return rv; - } - - nghttp3_stream_read_state_reset(rstate); - break; case NGHTTP3_CTRL_STREAM_STATE_SETTINGS: for (; p != end;) { if (rstate->left == 0) { @@ -953,7 +862,7 @@ nghttp3_ssize nghttp3_conn_read_control(nghttp3_conn *conn, return (nghttp3_ssize)nconsumed; } - if (conn->server && !nghttp3_client_stream_bidi(rvint->acc)) { + if (!conn->server && !nghttp3_client_stream_bidi(rvint->acc)) { return NGHTTP3_ERR_H3_ID_ERROR; } if (conn->rx.goaway_id < rvint->acc) { @@ -964,6 +873,14 @@ nghttp3_ssize nghttp3_conn_read_control(nghttp3_conn *conn, conn->rx.goaway_id = rvint->acc; nghttp3_varint_read_state_reset(rvint); + if (conn->callbacks.shutdown) { + rv = + conn->callbacks.shutdown(conn, conn->rx.goaway_id, conn->user_data); + if (rv != 0) { + return NGHTTP3_ERR_CALLBACK_FAILURE; + } + } + nghttp3_stream_read_state_reset(rstate); break; case NGHTTP3_CTRL_STREAM_STATE_MAX_PUSH_ID: @@ -982,13 +899,105 @@ nghttp3_ssize nghttp3_conn_read_control(nghttp3_conn *conn, return (nghttp3_ssize)nconsumed; } - if (conn->local.uni.max_pushes > (uint64_t)rvint->acc) { + if (conn->local.uni.max_pushes > (uint64_t)rvint->acc + 1) { return NGHTTP3_ERR_H3_FRAME_ERROR; } - conn->local.uni.max_pushes = (uint64_t)rvint->acc; + conn->local.uni.max_pushes = (uint64_t)rvint->acc + 1; + nghttp3_varint_read_state_reset(rvint); + + nghttp3_stream_read_state_reset(rstate); + break; + case NGHTTP3_CTRL_STREAM_STATE_PRIORITY_UPDATE_PRI_ELEM_ID: + /* server side only */ + len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); + assert(len > 0); + nread = nghttp3_read_varint(rvint, p, len, frame_fin(rstate, len)); + if (nread < 0) { + return NGHTTP3_ERR_H3_FRAME_ERROR; + } + + p += nread; + nconsumed += (size_t)nread; + rstate->left -= nread; + if (rvint->left) { + return (nghttp3_ssize)nconsumed; + } + + rstate->fr.priority_update.pri_elem_id = rvint->acc; nghttp3_varint_read_state_reset(rvint); + if (rstate->left == 0) { + rstate->fr.priority_update.pri.urgency = NGHTTP3_DEFAULT_URGENCY; + rstate->fr.priority_update.pri.inc = 0; + + rv = nghttp3_conn_on_priority_update(conn, &rstate->fr.priority_update); + if (rv != 0) { + return rv; + } + + nghttp3_stream_read_state_reset(rstate); + break; + } + + rstate->state = NGHTTP3_CTRL_STREAM_STATE_PRIORITY_UPDATE; + + /* Fall through */ + case NGHTTP3_CTRL_STREAM_STATE_PRIORITY_UPDATE: + /* We need to buffer Priority Field Value because it might be + fragmented. */ + len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); + assert(len > 0); + if (conn->rx.pri_fieldbuflen == 0 && rstate->left == (int64_t)len) { + /* Everything is in the input buffer. Apply same length + limit we impose when buffering the field. */ + if (len > sizeof(conn->rx.pri_fieldbuf)) { + busy = 1; + rstate->state = NGHTTP3_CTRL_STREAM_STATE_IGN_FRAME; + break; + } + + pri_field_value = p; + pri_field_valuelen = len; + } else if (len + conn->rx.pri_fieldbuflen > + sizeof(conn->rx.pri_fieldbuf)) { + busy = 1; + rstate->state = NGHTTP3_CTRL_STREAM_STATE_IGN_FRAME; + break; + } else { + memcpy(conn->rx.pri_fieldbuf + conn->rx.pri_fieldbuflen, p, len); + conn->rx.pri_fieldbuflen += len; + + if (rstate->left == (int64_t)len) { + pri_field_value = conn->rx.pri_fieldbuf; + pri_field_valuelen = conn->rx.pri_fieldbuflen; + } + } + + p += len; + nconsumed += len; + rstate->left -= (int64_t)len; + + if (rstate->left) { + return (nghttp3_ssize)nconsumed; + } + + rstate->fr.priority_update.pri.urgency = NGHTTP3_DEFAULT_URGENCY; + rstate->fr.priority_update.pri.inc = 0; + + if (nghttp3_http_parse_priority(&rstate->fr.priority_update.pri, + pri_field_value, + pri_field_valuelen) != 0) { + return NGHTTP3_ERR_H3_GENERAL_PROTOCOL_ERROR; + } + + rv = nghttp3_conn_on_priority_update(conn, &rstate->fr.priority_update); + if (rv != 0) { + return rv; + } + + conn->rx.pri_fieldbuflen = 0; + nghttp3_stream_read_state_reset(rstate); break; case NGHTTP3_CTRL_STREAM_STATE_IGN_FRAME: @@ -1012,365 +1021,34 @@ nghttp3_ssize nghttp3_conn_read_control(nghttp3_conn *conn, return (nghttp3_ssize)nconsumed; } -nghttp3_ssize nghttp3_conn_read_push(nghttp3_conn *conn, size_t *pnproc, - nghttp3_stream *stream, const uint8_t *src, - size_t srclen, int fin) { - const uint8_t *p = src, *end = src ? src + srclen : src; +static int conn_delete_stream(nghttp3_conn *conn, nghttp3_stream *stream) { + int bidi = nghttp3_client_stream_bidi(stream->node.nid.id); int rv; - nghttp3_stream_read_state *rstate = &stream->rstate; - nghttp3_varint_read_state *rvint = &rstate->rvint; - nghttp3_ssize nread; - size_t nconsumed = 0; - int busy = 0; - size_t len; - int64_t push_id; - - if (stream->flags & (NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED | - NGHTTP3_STREAM_FLAG_PUSH_PROMISE_BLOCKED)) { - *pnproc = 0; - if (srclen == 0) { - return 0; - } + rv = conn_call_deferred_consume(conn, stream, + nghttp3_stream_get_buffered_datalen(stream)); + if (rv != 0) { + return rv; + } - rv = nghttp3_stream_buffer_data(stream, p, (size_t)(end - p)); + if (bidi && conn->callbacks.stream_close) { + rv = conn->callbacks.stream_close(conn, stream->node.nid.id, + stream->error_code, conn->user_data, + stream->user_data); if (rv != 0) { - return rv; + return NGHTTP3_ERR_CALLBACK_FAILURE; } - return 0; } - for (; p != end || busy;) { - busy = 0; - switch (rstate->state) { - case NGHTTP3_PUSH_STREAM_STATE_PUSH_ID: - assert(end - p > 0); - nread = nghttp3_read_varint(rvint, p, (size_t)(end - p), fin); - if (nread < 0) { - return NGHTTP3_ERR_H3_GENERAL_PROTOCOL_ERROR; - } - - p += nread; - nconsumed += (size_t)nread; - if (rvint->left) { - goto almost_done; - } + rv = nghttp3_map_remove(&conn->streams, + (nghttp3_map_key_type)stream->node.nid.id); - push_id = rvint->acc; - nghttp3_varint_read_state_reset(rvint); + assert(0 == rv); - rv = nghttp3_conn_on_stream_push_id(conn, stream, push_id); - if (rv != 0) { - if (rv == NGHTTP3_ERR_IGNORE_STREAM) { - rstate->state = NGHTTP3_PUSH_STREAM_STATE_IGN_REST; - break; - } - return (nghttp3_ssize)rv; - } + nghttp3_stream_del(stream); - rstate->state = NGHTTP3_PUSH_STREAM_STATE_FRAME_TYPE; - - if (stream->flags & NGHTTP3_STREAM_FLAG_PUSH_PROMISE_BLOCKED) { - if (p != end) { - rv = nghttp3_stream_buffer_data(stream, p, (size_t)(end - p)); - if (rv != 0) { - return rv; - } - } - *pnproc = (size_t)(p - src); - return (nghttp3_ssize)nconsumed; - } - - if (end == p) { - goto almost_done; - } - - /* Fall through */ - case NGHTTP3_PUSH_STREAM_STATE_FRAME_TYPE: - assert(end - p > 0); - nread = nghttp3_read_varint(rvint, p, (size_t)(end - p), fin); - if (nread < 0) { - return NGHTTP3_ERR_H3_GENERAL_PROTOCOL_ERROR; - } - - p += nread; - nconsumed += (size_t)nread; - if (rvint->left) { - goto almost_done; - } - - rstate->fr.hd.type = rvint->acc; - nghttp3_varint_read_state_reset(rvint); - rstate->state = NGHTTP3_PUSH_STREAM_STATE_FRAME_LENGTH; - if (p == end) { - goto almost_done; - } - /* Fall through */ - case NGHTTP3_PUSH_STREAM_STATE_FRAME_LENGTH: - assert(end - p > 0); - nread = nghttp3_read_varint(rvint, p, (size_t)(end - p), fin); - if (nread < 0) { - return NGHTTP3_ERR_H3_FRAME_ERROR; - } - - p += nread; - nconsumed += (size_t)nread; - if (rvint->left) { - goto almost_done; - } - - rstate->left = rstate->fr.hd.length = rvint->acc; - nghttp3_varint_read_state_reset(rvint); - - switch (rstate->fr.hd.type) { - case NGHTTP3_FRAME_DATA: - rv = nghttp3_stream_transit_rx_http_state( - stream, NGHTTP3_HTTP_EVENT_DATA_BEGIN); - if (rv != 0) { - return rv; - } - /* DATA frame might be empty. */ - if (rstate->left == 0) { - rv = nghttp3_stream_transit_rx_http_state( - stream, NGHTTP3_HTTP_EVENT_DATA_END); - assert(0 == rv); - - nghttp3_stream_read_state_reset(rstate); - break; - } - rstate->state = NGHTTP3_PUSH_STREAM_STATE_DATA; - break; - case NGHTTP3_FRAME_HEADERS: - rv = nghttp3_stream_transit_rx_http_state( - stream, NGHTTP3_HTTP_EVENT_HEADERS_BEGIN); - if (rv != 0) { - return rv; - } - if (rstate->left == 0) { - rv = nghttp3_stream_empty_headers_allowed(stream); - if (rv != 0) { - return rv; - } - - rv = nghttp3_stream_transit_rx_http_state( - stream, NGHTTP3_HTTP_EVENT_HEADERS_END); - assert(0 == rv); - - nghttp3_stream_read_state_reset(rstate); - break; - } - - switch (stream->rx.hstate) { - case NGHTTP3_HTTP_STATE_RESP_HEADERS_BEGIN: - rv = conn_call_begin_headers(conn, stream); - break; - case NGHTTP3_HTTP_STATE_RESP_TRAILERS_BEGIN: - rv = conn_call_begin_trailers(conn, stream); - break; - default: - /* Unreachable */ - assert(0); - } - - if (rv != 0) { - return rv; - } - - rstate->state = NGHTTP3_PUSH_STREAM_STATE_HEADERS; - break; - case NGHTTP3_FRAME_PUSH_PROMISE: - case NGHTTP3_FRAME_CANCEL_PUSH: - case NGHTTP3_FRAME_SETTINGS: - case NGHTTP3_FRAME_GOAWAY: - case NGHTTP3_FRAME_MAX_PUSH_ID: - case NGHTTP3_H2_FRAME_PRIORITY: - case NGHTTP3_H2_FRAME_PING: - case NGHTTP3_H2_FRAME_WINDOW_UPDATE: - case NGHTTP3_H2_FRAME_CONTINUATION: - return NGHTTP3_ERR_H3_FRAME_UNEXPECTED; - default: - /* TODO Handle reserved frame type */ - busy = 1; - rstate->state = NGHTTP3_PUSH_STREAM_STATE_IGN_FRAME; - break; - } - break; - case NGHTTP3_PUSH_STREAM_STATE_DATA: - len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); - rv = nghttp3_conn_on_data(conn, stream, p, len); - if (rv != 0) { - return rv; - } - - p += len; - rstate->left -= (int64_t)len; - - if (rstate->left) { - goto almost_done; - } - - rv = nghttp3_stream_transit_rx_http_state(stream, - NGHTTP3_HTTP_EVENT_DATA_END); - assert(0 == rv); - - nghttp3_stream_read_state_reset(rstate); - break; - case NGHTTP3_PUSH_STREAM_STATE_HEADERS: - len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); - nread = nghttp3_conn_on_headers(conn, stream, NULL, p, len, - (int64_t)len == rstate->left); - if (nread < 0) { - return nread; - } - - p += nread; - nconsumed += (size_t)nread; - rstate->left -= nread; - - if (stream->flags & NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED) { - if (p != end && nghttp3_stream_get_buffered_datalen(stream) == 0) { - rv = nghttp3_stream_buffer_data(stream, p, (size_t)(end - p)); - if (rv != 0) { - return rv; - } - } - *pnproc = (size_t)(p - src); - return (nghttp3_ssize)nconsumed; - } - - if (rstate->left) { - goto almost_done; - } - - switch (stream->rx.hstate) { - case NGHTTP3_HTTP_STATE_RESP_HEADERS_BEGIN: - rv = nghttp3_http_on_response_headers(&stream->rx.http); - if (rv != 0) { - return rv; - } - - rv = conn_call_end_headers(conn, stream); - break; - case NGHTTP3_HTTP_STATE_RESP_TRAILERS_BEGIN: - rv = conn_call_end_trailers(conn, stream); - break; - default: - /* Unreachable */ - assert(0); - } - - if (rv != 0) { - return rv; - } - - rv = nghttp3_stream_transit_rx_http_state(stream, - NGHTTP3_HTTP_EVENT_HEADERS_END); - assert(0 == rv); - - nghttp3_stream_read_state_reset(rstate); - break; - case NGHTTP3_PUSH_STREAM_STATE_IGN_FRAME: - len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); - p += len; - nconsumed += len; - rstate->left -= (int64_t)len; - - if (rstate->left) { - goto almost_done; - } - - nghttp3_stream_read_state_reset(rstate); - break; - case NGHTTP3_PUSH_STREAM_STATE_IGN_REST: - nconsumed += (size_t)(end - p); - *pnproc = (size_t)(p - src); - return (nghttp3_ssize)nconsumed; - } - } - -almost_done: - if (fin) { - switch (rstate->state) { - case NGHTTP3_PUSH_STREAM_STATE_FRAME_TYPE: - if (rvint->left) { - return NGHTTP3_ERR_H3_GENERAL_PROTOCOL_ERROR; - } - rv = nghttp3_stream_transit_rx_http_state(stream, - NGHTTP3_HTTP_EVENT_MSG_END); - if (rv != 0) { - return rv; - } - rv = conn_call_end_stream(conn, stream); - if (rv != 0) { - return rv; - } - break; - case NGHTTP3_PUSH_STREAM_STATE_IGN_REST: - break; - default: - return NGHTTP3_ERR_H3_FRAME_ERROR; - } - } - - *pnproc = (size_t)(p - src); - return (nghttp3_ssize)nconsumed; -} - -static void conn_delete_push_promise(nghttp3_conn *conn, - nghttp3_push_promise *pp) { - int rv; - - rv = nghttp3_map_remove(&conn->pushes, (key_type)pp->node.nid.id); - assert(0 == rv); - - if (!conn->server && - !(pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_PUSH_ID_RECLAIMED)) { - ++conn->remote.uni.unsent_max_pushes; - } - - nghttp3_push_promise_del(pp, conn->mem); -} - -static int conn_delete_stream(nghttp3_conn *conn, nghttp3_stream *stream) { - int bidi_or_push = nghttp3_stream_bidi_or_push(stream); - int rv; - - if (bidi_or_push) { - rv = nghttp3_http_on_remote_end_stream(stream); - if (rv != 0) { - return rv; - } - } - - rv = conn_call_deferred_consume(conn, stream, - nghttp3_stream_get_buffered_datalen(stream)); - if (rv != 0) { - return rv; - } - - if (bidi_or_push && conn->callbacks.stream_close) { - rv = conn->callbacks.stream_close(conn, stream->node.nid.id, - stream->error_code, conn->user_data, - stream->user_data); - if (rv != 0) { - return NGHTTP3_ERR_CALLBACK_FAILURE; - } - } - - rv = nghttp3_map_remove(&conn->streams, (key_type)stream->node.nid.id); - - assert(0 == rv); - - if (stream->pp) { - assert(stream->type == NGHTTP3_STREAM_TYPE_PUSH); - - conn_delete_push_promise(conn, stream->pp); - } - - nghttp3_stream_del(stream); - - return 0; -} + return 0; +} static int conn_process_blocked_stream_data(nghttp3_conn *conn, nghttp3_stream *stream) { @@ -1380,21 +1058,19 @@ static int conn_process_blocked_stream_data(nghttp3_conn *conn, int rv; size_t len; + assert(nghttp3_client_stream_bidi(stream->node.nid.id)); + for (;;) { len = nghttp3_ringbuf_len(&stream->inq); if (len == 0) { break; } + buf = nghttp3_ringbuf_get(&stream->inq, 0); - if (nghttp3_stream_uni(stream->node.nid.id)) { - nconsumed = nghttp3_conn_read_push( - conn, &nproc, stream, buf->pos, nghttp3_buf_len(buf), - len == 1 && (stream->flags & NGHTTP3_STREAM_FLAG_READ_EOF)); - } else { - nconsumed = nghttp3_conn_read_bidi( - conn, &nproc, stream, buf->pos, nghttp3_buf_len(buf), - len == 1 && (stream->flags & NGHTTP3_STREAM_FLAG_READ_EOF)); - } + + nconsumed = nghttp3_conn_read_bidi( + conn, &nproc, stream, buf->pos, nghttp3_buf_len(buf), + len == 1 && (stream->flags & NGHTTP3_STREAM_FLAG_READ_EOF)); if (nconsumed < 0) { return (int)nconsumed; } @@ -1468,8 +1144,14 @@ nghttp3_ssize nghttp3_conn_read_qpack_decoder(nghttp3_conn *conn, return nghttp3_qpack_encoder_read_decoder(&conn->qenc, src, srclen); } +static nghttp3_tnode *stream_get_sched_node(nghttp3_stream *stream) { + return &stream->node; +} + static int conn_update_stream_priority(nghttp3_conn *conn, nghttp3_stream *stream, uint8_t pri) { + assert(nghttp3_client_stream_bidi(stream->node.nid.id)); + if (stream->node.pri == pri) { return 0; } @@ -1478,8 +1160,6 @@ static int conn_update_stream_priority(nghttp3_conn *conn, stream->node.pri = pri; - assert(nghttp3_stream_bidi_or_push(stream)); - if (nghttp3_stream_require_schedule(stream)) { return nghttp3_conn_schedule_stream(conn, stream); } @@ -1498,10 +1178,12 @@ nghttp3_ssize nghttp3_conn_read_bidi(nghttp3_conn *conn, size_t *pnproc, size_t nconsumed = 0; int busy = 0; size_t len; - nghttp3_push_promise *pp; - nghttp3_push_promise fake_pp = {{0}, {{0}, 0, {0}, 0, 0, 0}, {0}, NULL, -1, - 0}; - nghttp3_frame_entry frent; + + if (stream->flags & NGHTTP3_STREAM_FLAG_SHUT_RD) { + *pnproc = srclen; + + return (nghttp3_ssize)srclen; + } if (stream->flags & NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED) { *pnproc = 0; @@ -1614,23 +1296,13 @@ nghttp3_ssize nghttp3_conn_read_bidi(nghttp3_conn *conn, size_t *pnproc, rstate->state = NGHTTP3_REQ_STREAM_STATE_HEADERS; break; - case NGHTTP3_FRAME_PUSH_PROMISE: - if (conn->server) { - return NGHTTP3_ERR_H3_FRAME_UNEXPECTED; - } - - if (rstate->left == 0) { - return NGHTTP3_ERR_H3_FRAME_ERROR; - } - - /* No stream->rx.hstate change with PUSH_PROMISE */ - - rstate->state = NGHTTP3_REQ_STREAM_STATE_PUSH_PROMISE_PUSH_ID; - break; + case NGHTTP3_FRAME_PUSH_PROMISE: /* We do not support push */ case NGHTTP3_FRAME_CANCEL_PUSH: case NGHTTP3_FRAME_SETTINGS: case NGHTTP3_FRAME_GOAWAY: case NGHTTP3_FRAME_MAX_PUSH_ID: + case NGHTTP3_FRAME_PRIORITY_UPDATE: + case NGHTTP3_FRAME_PRIORITY_UPDATE_PUSH_ID: case NGHTTP3_H2_FRAME_PRIORITY: case NGHTTP3_H2_FRAME_PING: case NGHTTP3_H2_FRAME_WINDOW_UPDATE: @@ -1662,199 +1334,15 @@ nghttp3_ssize nghttp3_conn_read_bidi(nghttp3_conn *conn, size_t *pnproc, nghttp3_stream_read_state_reset(rstate); break; - case NGHTTP3_REQ_STREAM_STATE_PUSH_PROMISE_PUSH_ID: - len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); - nread = nghttp3_read_varint(rvint, p, (size_t)(end - p), - (int64_t)len == rstate->left); - if (nread < 0) { - return NGHTTP3_ERR_H3_FRAME_ERROR; - } - - p += nread; - nconsumed += (size_t)nread; - rstate->left -= nread; - if (rvint->left) { - goto almost_done; - } - - rstate->fr.push_promise.push_id = rvint->acc; - nghttp3_varint_read_state_reset(rvint); - - if (rstate->left == 0) { - return NGHTTP3_ERR_H3_FRAME_ERROR; - } - - rv = nghttp3_conn_on_push_promise_push_id( - conn, rstate->fr.push_promise.push_id, stream); - if (rv != 0) { - if (rv == NGHTTP3_ERR_IGNORE_PUSH_PROMISE) { - rstate->state = NGHTTP3_REQ_STREAM_STATE_IGN_PUSH_PROMISE; - if (p == end) { - goto almost_done; - } - break; - } - - return rv; - } - - rstate->state = NGHTTP3_REQ_STREAM_STATE_PUSH_PROMISE; - - if (p == end) { - goto almost_done; - } - /* Fall through */ - case NGHTTP3_REQ_STREAM_STATE_PUSH_PROMISE: - pp = - nghttp3_conn_find_push_promise(conn, rstate->fr.push_promise.push_id); - - assert(pp); - - len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); - nread = nghttp3_conn_on_headers(conn, stream, pp, p, len, - (int64_t)len == rstate->left); - if (nread < 0) { - return nread; - } - - p += nread; - nconsumed += (size_t)nread; - rstate->left -= nread; - - if (stream->flags & NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED) { - if (p != end && nghttp3_stream_get_buffered_datalen(stream) == 0) { - rv = nghttp3_stream_buffer_data(stream, p, (size_t)(end - p)); - if (rv != 0) { - return rv; - } - } - *pnproc = (size_t)(p - src); - return (nghttp3_ssize)nconsumed; - } - - if (rstate->left) { - goto almost_done; - } - - rv = nghttp3_http_on_request_headers(&pp->http); - if (rv != 0) { - return rv; - } - - pp->flags |= NGHTTP3_PUSH_PROMISE_FLAG_RECVED; - - rv = conn_call_end_push_promise(conn, stream, pp->node.nid.id); - if (rv != 0) { - return rv; - } - - /* Find pp again because application might call - nghttp3_conn_cancel_push and it may delete pp. */ - pp = - nghttp3_conn_find_push_promise(conn, rstate->fr.push_promise.push_id); - if (!pp) { - nghttp3_stream_read_state_reset(rstate); - break; - } - - if (!pp->stream && (pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_CANCELLED)) { - if (pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_RECV_CANCEL) { - rv = conn_call_cancel_push(conn, pp->node.nid.id, pp->stream); - if (rv != 0) { - return rv; - } - } - - conn_delete_push_promise(conn, pp); - - nghttp3_stream_read_state_reset(rstate); - break; - } - - if (pp->stream) { - ++conn->remote.uni.unsent_max_pushes; - pp->flags |= NGHTTP3_PUSH_PROMISE_FLAG_PUSH_ID_RECLAIMED; - - if (!(pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_SENT_CANCEL)) { - assert(pp->stream->flags & NGHTTP3_STREAM_FLAG_PUSH_PROMISE_BLOCKED); - - rv = conn_call_push_stream(conn, pp->node.nid.id, pp->stream); - if (rv != 0) { - return rv; - } - - pp->stream->flags &= - (uint16_t)~NGHTTP3_STREAM_FLAG_PUSH_PROMISE_BLOCKED; - - rv = conn_process_blocked_stream_data(conn, pp->stream); - if (rv != 0) { - return rv; - } - } - } - - nghttp3_stream_read_state_reset(rstate); - break; - case NGHTTP3_REQ_STREAM_STATE_IGN_PUSH_PROMISE: + case NGHTTP3_REQ_STREAM_STATE_HEADERS: len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); - nread = nghttp3_conn_on_headers(conn, stream, &fake_pp, p, len, + nread = nghttp3_conn_on_headers(conn, stream, p, len, (int64_t)len == rstate->left); if (nread < 0) { - return nread; - } - - p += nread; - nconsumed += (size_t)nread; - rstate->left -= nread; - - if (stream->flags & NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED) { - if (p != end && nghttp3_stream_get_buffered_datalen(stream) == 0) { - rv = nghttp3_stream_buffer_data(stream, p, (size_t)(end - p)); - if (rv != 0) { - return rv; - } - } - *pnproc = (size_t)(p - src); - return (nghttp3_ssize)nconsumed; - } - - if (rstate->left) { - goto almost_done; - } - - pp = - nghttp3_conn_find_push_promise(conn, rstate->fr.push_promise.push_id); - if (pp) { - pp->flags |= NGHTTP3_PUSH_PROMISE_FLAG_RECVED; - - if ((conn->flags & NGHTTP3_CONN_FLAG_GOAWAY_QUEUED) && - conn->tx.goaway_id <= pp->node.nid.id) { - if (pp->stream) { - rv = nghttp3_conn_reject_push_stream(conn, pp->stream); - if (rv != 0) { - return rv; - } - } else { - frent.fr.hd.type = NGHTTP3_FRAME_CANCEL_PUSH; - frent.fr.cancel_push.push_id = pp->node.nid.id; - - rv = nghttp3_stream_frq_add(conn->tx.ctrl, &frent); - if (rv != 0) { - return rv; - } - - conn_delete_push_promise(conn, pp); - } + if (nread == NGHTTP3_ERR_MALFORMED_HTTP_HEADER) { + goto http_header_error; } - } - nghttp3_stream_read_state_reset(rstate); - break; - case NGHTTP3_REQ_STREAM_STATE_HEADERS: - len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); - nread = nghttp3_conn_on_headers(conn, stream, NULL, p, len, - (int64_t)len == rstate->left); - if (nread < 0) { return nread; } @@ -1891,9 +1379,14 @@ nghttp3_ssize nghttp3_conn_read_bidi(nghttp3_conn *conn, size_t *pnproc, default: /* Unreachable */ assert(0); + abort(); } if (rv != 0) { + if (rv == NGHTTP3_ERR_MALFORMED_HTTP_HEADER) { + goto http_header_error; + } + return rv; } @@ -1901,7 +1394,10 @@ nghttp3_ssize nghttp3_conn_read_bidi(nghttp3_conn *conn, size_t *pnproc, case NGHTTP3_HTTP_STATE_REQ_HEADERS_BEGIN: /* Only server utilizes priority information to schedule streams. */ - if (conn->server) { + if (conn->server && + (stream->rx.http.flags & NGHTTP3_HTTP_FLAG_PRIORITY) && + !(stream->flags & NGHTTP3_STREAM_FLAG_PRIORITY_UPDATE_RECVED) && + !(stream->flags & NGHTTP3_STREAM_FLAG_SERVER_PRIORITY_SET)) { rv = conn_update_stream_priority(conn, stream, stream->rx.http.pri); if (rv != 0) { return rv; @@ -1909,11 +1405,11 @@ nghttp3_ssize nghttp3_conn_read_bidi(nghttp3_conn *conn, size_t *pnproc, } /* fall through */ case NGHTTP3_HTTP_STATE_RESP_HEADERS_BEGIN: - rv = conn_call_end_headers(conn, stream); + rv = conn_call_end_headers(conn, stream, p == end && fin); break; case NGHTTP3_HTTP_STATE_REQ_TRAILERS_BEGIN: case NGHTTP3_HTTP_STATE_RESP_TRAILERS_BEGIN: - rv = conn_call_end_trailers(conn, stream); + rv = conn_call_end_trailers(conn, stream, p == end && fin); break; default: /* Unreachable */ @@ -1924,11 +1420,30 @@ nghttp3_ssize nghttp3_conn_read_bidi(nghttp3_conn *conn, size_t *pnproc, return rv; } - rv = nghttp3_stream_transit_rx_http_state(stream, - NGHTTP3_HTTP_EVENT_HEADERS_END); - assert(0 == rv); + rv = nghttp3_stream_transit_rx_http_state(stream, + NGHTTP3_HTTP_EVENT_HEADERS_END); + assert(0 == rv); + + nghttp3_stream_read_state_reset(rstate); + + break; + + http_header_error: + stream->flags |= NGHTTP3_STREAM_FLAG_HTTP_ERROR; + + busy = 1; + rstate->state = NGHTTP3_REQ_STREAM_STATE_IGN_REST; + + rv = conn_call_stop_sending(conn, stream, NGHTTP3_H3_MESSAGE_ERROR); + if (rv != 0) { + return rv; + } + + rv = conn_call_reset_stream(conn, stream, NGHTTP3_H3_MESSAGE_ERROR); + if (rv != 0) { + return rv; + } - nghttp3_stream_read_state_reset(rstate); break; case NGHTTP3_REQ_STREAM_STATE_IGN_FRAME: len = (size_t)nghttp3_min(rstate->left, (int64_t)(end - p)); @@ -1944,7 +1459,7 @@ nghttp3_ssize nghttp3_conn_read_bidi(nghttp3_conn *conn, size_t *pnproc, break; case NGHTTP3_REQ_STREAM_STATE_IGN_REST: nconsumed += (size_t)(end - p); - *pnproc = (size_t)(p - src); + *pnproc = (size_t)(end - src); return (nghttp3_ssize)nconsumed; } } @@ -1999,144 +1514,6 @@ int nghttp3_conn_on_data(nghttp3_conn *conn, nghttp3_stream *stream, return 0; } -static int push_idtr_push(nghttp3_gaptr *push_idtr, int64_t push_id) { - int rv; - - rv = nghttp3_gaptr_push(push_idtr, (uint64_t)push_id, 1); - if (rv != 0) { - return rv; - } - - /* Server SHOULD use push ID sequentially, but even if it does, we - might see gaps in push IDs because we might stop reading stream - which ignores PUSH_PROMISE. In order to limit the number of - gaps, drop earlier gaps if certain limit is reached. This makes - otherwise valid push ignored.*/ - if (nghttp3_ksl_len(&push_idtr->gap) > 100) { - nghttp3_gaptr_drop_first_gap(push_idtr); - } - - return 0; -} - -int nghttp3_conn_on_push_promise_push_id(nghttp3_conn *conn, int64_t push_id, - nghttp3_stream *stream) { - int rv; - nghttp3_gaptr *push_idtr = &conn->remote.uni.push_idtr; - nghttp3_push_promise *pp; - - if (conn->remote.uni.max_pushes <= (uint64_t)push_id) { - return NGHTTP3_ERR_H3_ID_ERROR; - } - - pp = nghttp3_conn_find_push_promise(conn, push_id); - if (pp) { - if ((pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_BOUND) || - (pp->stream_id != -1 && pp->stream_id != stream->node.nid.id)) { - return NGHTTP3_ERR_IGNORE_PUSH_PROMISE; - } - if (pp->stream) { - assert(pp->stream->flags & NGHTTP3_STREAM_FLAG_PUSH_PROMISE_BLOCKED); - /* Push unidirectional stream has already been received and - blocked */ - } else if (pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_CANCELLED) { - /* We will call begin_push_promise callback even if push is - cancelled */ - } else { - return NGHTTP3_ERR_H3_FRAME_ERROR; - } - - assert(pp->stream_id == -1); - - pp->stream_id = stream->node.nid.id; - pp->flags |= NGHTTP3_PUSH_PROMISE_FLAG_BOUND; - } else if (nghttp3_gaptr_is_pushed(push_idtr, (uint64_t)push_id, 1)) { - return NGHTTP3_ERR_IGNORE_PUSH_PROMISE; - } else { - rv = push_idtr_push(push_idtr, push_id); - if (rv != 0) { - return rv; - } - - rv = nghttp3_conn_create_push_promise(conn, &pp, push_id, &stream->node); - if (rv != 0) { - return rv; - } - } - - conn->rx.max_push_id = nghttp3_max(conn->rx.max_push_id, push_id); - - if ((conn->flags & NGHTTP3_CONN_FLAG_GOAWAY_QUEUED) && - conn->tx.goaway_id <= push_id) { - return NGHTTP3_ERR_IGNORE_PUSH_PROMISE; - } - - rv = conn_call_begin_push_promise(conn, stream, push_id); - if (rv != 0) { - return rv; - } - - return 0; -} - -int nghttp3_conn_on_client_cancel_push(nghttp3_conn *conn, - const nghttp3_frame_cancel_push *fr) { - nghttp3_push_promise *pp; - nghttp3_gaptr *push_idtr = &conn->remote.uni.push_idtr; - int rv; - - if (conn->remote.uni.max_pushes <= (uint64_t)fr->push_id) { - return NGHTTP3_ERR_H3_ID_ERROR; - } - - pp = nghttp3_conn_find_push_promise(conn, fr->push_id); - if (pp == NULL) { - if (nghttp3_gaptr_is_pushed(push_idtr, (uint64_t)fr->push_id, 1)) { - /* push is already cancelled or server is misbehaving */ - return 0; - } - - /* We have not received PUSH_PROMISE yet */ - rv = push_idtr_push(push_idtr, fr->push_id); - if (rv != 0) { - return rv; - } - - conn->rx.max_push_id = nghttp3_max(conn->rx.max_push_id, fr->push_id); - - rv = nghttp3_conn_create_push_promise(conn, &pp, fr->push_id, NULL); - if (rv != 0) { - return rv; - } - - pp->flags |= NGHTTP3_PUSH_PROMISE_FLAG_RECV_CANCEL; - - /* cancel_push callback will be called after PUSH_PROMISE frame is - completely received. */ - - return 0; - } - - if (pp->stream) { - return 0; - } - - if (pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_RECVED) { - rv = conn_call_cancel_push(conn, pp->node.nid.id, pp->stream); - if (rv != 0) { - return rv; - } - - conn_delete_push_promise(conn, pp); - - return 0; - } - - pp->flags |= NGHTTP3_PUSH_PROMISE_FLAG_RECV_CANCEL; - - return 0; -} - static nghttp3_pq *conn_get_sched_pq(nghttp3_conn *conn, nghttp3_tnode *tnode) { uint32_t urgency = nghttp3_pri_uint8_urgency(tnode->pri); @@ -2145,121 +1522,8 @@ static nghttp3_pq *conn_get_sched_pq(nghttp3_conn *conn, nghttp3_tnode *tnode) { return &conn->sched[urgency].spq; } -int nghttp3_conn_on_server_cancel_push(nghttp3_conn *conn, - const nghttp3_frame_cancel_push *fr) { - nghttp3_push_promise *pp; - nghttp3_stream *stream; - int rv; - - if (conn->local.uni.next_push_id <= fr->push_id) { - return NGHTTP3_ERR_H3_ID_ERROR; - } - - pp = nghttp3_conn_find_push_promise(conn, fr->push_id); - if (pp == NULL) { - return 0; - } - - stream = pp->stream; - - rv = conn_call_cancel_push(conn, fr->push_id, stream); - if (rv != 0) { - return rv; - } - - if (stream) { - rv = nghttp3_conn_close_stream(conn, stream->node.nid.id, - NGHTTP3_H3_REQUEST_CANCELLED); - if (rv != 0) { - assert(NGHTTP3_ERR_STREAM_NOT_FOUND != rv); - return rv; - } - return 0; - } - - nghttp3_tnode_unschedule(&pp->node, conn_get_sched_pq(conn, &pp->node)); - - conn_delete_push_promise(conn, pp); - - return 0; -} - -int nghttp3_conn_on_stream_push_id(nghttp3_conn *conn, nghttp3_stream *stream, - int64_t push_id) { - nghttp3_push_promise *pp; - int rv; - - if (nghttp3_gaptr_is_pushed(&conn->remote.uni.push_idtr, (uint64_t)push_id, - 1)) { - pp = nghttp3_conn_find_push_promise(conn, push_id); - if (pp) { - if (pp->stream) { - return NGHTTP3_ERR_H3_ID_ERROR; - } - pp->stream = stream; - stream->pp = pp; - - assert(!(pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_SENT_CANCEL)); - - if ((conn->flags & NGHTTP3_CONN_FLAG_GOAWAY_QUEUED) && - conn->tx.goaway_id <= push_id) { - rv = nghttp3_conn_reject_push_stream(conn, stream); - if (rv != 0) { - return rv; - } - return NGHTTP3_ERR_IGNORE_STREAM; - } - - if (pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_RECVED) { - ++conn->remote.uni.unsent_max_pushes; - pp->flags |= NGHTTP3_PUSH_PROMISE_FLAG_PUSH_ID_RECLAIMED; - - return conn_call_push_stream(conn, push_id, stream); - } - - stream->flags |= NGHTTP3_STREAM_FLAG_PUSH_PROMISE_BLOCKED; - - return 0; - } - - /* Push ID has been received, but pp is gone. This means that - push is cancelled or server is misbehaving. We have no - information to distinguish the two, so just cancel QPACK stream - just in case, and ask application to send STOP_SENDING and - ignore all frames in this stream. */ - rv = nghttp3_conn_cancel_push_stream(conn, stream); - if (rv != 0) { - return rv; - } - return NGHTTP3_ERR_IGNORE_STREAM; - } - - if (conn->remote.uni.max_pushes <= (uint64_t)push_id) { - return NGHTTP3_ERR_H3_ID_ERROR; - } - - rv = push_idtr_push(&conn->remote.uni.push_idtr, push_id); - if (rv != 0) { - return rv; - } - - /* Don't know the associated stream of PUSH_PROMISE. It doesn't - matter because client sends nothing to this stream. */ - rv = nghttp3_conn_create_push_promise(conn, &pp, push_id, NULL); - if (rv != 0) { - return rv; - } - - pp->stream = stream; - stream->pp = pp; - stream->flags |= NGHTTP3_STREAM_FLAG_PUSH_PROMISE_BLOCKED; - - return 0; -} - static nghttp3_ssize conn_decode_headers(nghttp3_conn *conn, nghttp3_stream *stream, - nghttp3_push_promise *pp, const uint8_t *src, size_t srclen, int fin) { nghttp3_ssize nread; @@ -2272,37 +1536,26 @@ static nghttp3_ssize conn_decode_headers(nghttp3_conn *conn, nghttp3_http_state *http; int request = 0; int trailers = 0; - int ignore_pp = 0; - if (pp) { + switch (stream->rx.hstate) { + case NGHTTP3_HTTP_STATE_REQ_HEADERS_BEGIN: request = 1; - ignore_pp = pp->stream_id != stream->node.nid.id; - if (ignore_pp) { - http = NULL; - } else { - http = &pp->http; - } - } else { - switch (stream->rx.hstate) { - case NGHTTP3_HTTP_STATE_REQ_HEADERS_BEGIN: - request = 1; - /* Fall through */ - case NGHTTP3_HTTP_STATE_RESP_HEADERS_BEGIN: - recv_header = conn->callbacks.recv_header; - break; - case NGHTTP3_HTTP_STATE_REQ_TRAILERS_BEGIN: - request = 1; - /* Fall through */ - case NGHTTP3_HTTP_STATE_RESP_TRAILERS_BEGIN: - trailers = 1; - recv_header = conn->callbacks.recv_trailer; - break; - default: - /* Unreachable */ - assert(0); - } - http = &stream->rx.http; + /* Fall through */ + case NGHTTP3_HTTP_STATE_RESP_HEADERS_BEGIN: + recv_header = conn->callbacks.recv_header; + break; + case NGHTTP3_HTTP_STATE_REQ_TRAILERS_BEGIN: + request = 1; + /* Fall through */ + case NGHTTP3_HTTP_STATE_RESP_TRAILERS_BEGIN: + trailers = 1; + recv_header = conn->callbacks.recv_trailer; + break; + default: + /* Unreachable */ + assert(0); } + http = &stream->rx.http; nghttp3_buf_wrap_init(&buf, (uint8_t *)src, srclen); buf.last = buf.end; @@ -2342,17 +1595,9 @@ static nghttp3_ssize conn_decode_headers(nghttp3_conn *conn, } if (flags & NGHTTP3_QPACK_DECODE_FLAG_EMIT) { - if (ignore_pp) { - nghttp3_rcbuf_decref(nv.name); - nghttp3_rcbuf_decref(nv.value); - - continue; - } - - assert(http); - - rv = nghttp3_http_on_header(http, stream->rstate.fr.hd.type, &nv, request, - trailers); + rv = nghttp3_http_on_header( + http, &nv, request, trailers, + conn->server && conn->local.settings.enable_connect_protocol); switch (rv) { case NGHTTP3_ERR_MALFORMED_HTTP_HEADER: break; @@ -2360,18 +1605,13 @@ static nghttp3_ssize conn_decode_headers(nghttp3_conn *conn, rv = 0; break; case 0: - if (pp) { - if (conn->callbacks.recv_push_promise) { - rv = conn->callbacks.recv_push_promise( - conn, stream->node.nid.id, pp->node.nid.id, nv.token, nv.name, - nv.value, nv.flags, conn->user_data, stream->user_data); - } - break; - } if (recv_header) { rv = recv_header(conn, stream->node.nid.id, nv.token, nv.name, nv.value, nv.flags, conn->user_data, stream->user_data); + if (rv != 0) { + rv = NGHTTP3_ERR_CALLBACK_FAILURE; + } } break; default: @@ -2393,23 +1633,19 @@ static nghttp3_ssize conn_decode_headers(nghttp3_conn *conn, nghttp3_ssize nghttp3_conn_on_headers(nghttp3_conn *conn, nghttp3_stream *stream, - nghttp3_push_promise *pp, const uint8_t *src, size_t srclen, int fin) { if (srclen == 0 && !fin) { return 0; } - return conn_decode_headers(conn, stream, pp, src, srclen, fin); + return conn_decode_headers(conn, stream, src, srclen, fin); } int nghttp3_conn_on_settings_entry_received(nghttp3_conn *conn, const nghttp3_frame_settings *fr) { const nghttp3_settings_entry *ent = &fr->iv[0]; nghttp3_settings *dest = &conn->remote.settings; - int rv; - size_t max_table_capacity = SIZE_MAX; - size_t max_blocked_streams = SIZE_MAX; /* TODO Check for duplicates */ switch (ent->id) { @@ -2417,29 +1653,44 @@ int nghttp3_conn_on_settings_entry_received(nghttp3_conn *conn, dest->max_field_section_size = ent->value; break; case NGHTTP3_SETTINGS_ID_QPACK_MAX_TABLE_CAPACITY: - dest->qpack_max_table_capacity = (size_t)ent->value; - max_table_capacity = - nghttp3_min(max_table_capacity, dest->qpack_max_table_capacity); - rv = nghttp3_qpack_encoder_set_hard_max_dtable_size(&conn->qenc, - max_table_capacity); - if (rv != 0) { - return rv; + if (dest->qpack_max_dtable_capacity != 0) { + return NGHTTP3_ERR_H3_SETTINGS_ERROR; } - rv = nghttp3_qpack_encoder_set_max_dtable_size(&conn->qenc, - max_table_capacity); - if (rv != 0) { - return rv; + + if (ent->value == 0) { + break; } + + dest->qpack_max_dtable_capacity = (size_t)ent->value; + + nghttp3_qpack_encoder_set_max_dtable_capacity(&conn->qenc, + (size_t)ent->value); break; case NGHTTP3_SETTINGS_ID_QPACK_BLOCKED_STREAMS: + if (dest->qpack_blocked_streams != 0) { + return NGHTTP3_ERR_H3_SETTINGS_ERROR; + } + + if (ent->value == 0) { + break; + } + dest->qpack_blocked_streams = (size_t)ent->value; - max_blocked_streams = - nghttp3_min(max_blocked_streams, dest->qpack_blocked_streams); - rv = - nghttp3_qpack_encoder_set_max_blocked(&conn->qenc, max_blocked_streams); - if (rv != 0) { - return rv; + + nghttp3_qpack_encoder_set_max_blocked_streams( + &conn->qenc, (size_t)nghttp3_min(100, ent->value)); + break; + case NGHTTP3_SETTINGS_ID_ENABLE_CONNECT_PROTOCOL: + if (!conn->server) { + break; + } + if (ent->value != 0 && ent->value != 1) { + return NGHTTP3_ERR_H3_SETTINGS_ERROR; + } + if (ent->value == 0 && dest->enable_connect_protocol) { + return NGHTTP3_ERR_H3_SETTINGS_ERROR; } + dest->enable_connect_protocol = (int)ent->value; break; case NGHTTP3_H2_SETTINGS_ID_ENABLE_PUSH: case NGHTTP3_H2_SETTINGS_ID_MAX_CONCURRENT_STREAMS: @@ -2454,8 +1705,71 @@ int nghttp3_conn_on_settings_entry_received(nghttp3_conn *conn, return 0; } +static int +conn_on_priority_update_stream(nghttp3_conn *conn, + const nghttp3_frame_priority_update *fr) { + int64_t stream_id = fr->pri_elem_id; + nghttp3_stream *stream; + int rv; + + if (!nghttp3_client_stream_bidi(stream_id) || + nghttp3_ord_stream_id(stream_id) > conn->remote.bidi.max_client_streams) { + return NGHTTP3_ERR_H3_ID_ERROR; + } + + stream = nghttp3_conn_find_stream(conn, stream_id); + if (stream == NULL) { + if ((conn->flags & NGHTTP3_CONN_FLAG_GOAWAY_QUEUED) && + conn->tx.goaway_id <= stream_id) { + /* Connection is going down. Ignore priority signal. */ + return 0; + } + + rv = conn_bidi_idtr_open(conn, stream_id); + if (rv != 0) { + if (nghttp3_err_is_fatal(rv)) { + return rv; + } + + assert(rv == NGHTTP3_ERR_STREAM_IN_USE); + + /* The stream is gone. Just ignore. */ + return 0; + } + + conn->rx.max_stream_id_bidi = + nghttp3_max(conn->rx.max_stream_id_bidi, stream_id); + rv = nghttp3_conn_create_stream(conn, &stream, stream_id); + if (rv != 0) { + return rv; + } + + stream->node.pri = nghttp3_pri_to_uint8(&fr->pri); + stream->flags |= NGHTTP3_STREAM_FLAG_PRIORITY_UPDATE_RECVED; + + return 0; + } + + if (stream->flags & NGHTTP3_STREAM_FLAG_SERVER_PRIORITY_SET) { + return 0; + } + + stream->flags |= NGHTTP3_STREAM_FLAG_PRIORITY_UPDATE_RECVED; + + return conn_update_stream_priority(conn, stream, + nghttp3_pri_to_uint8(&fr->pri)); +} + +int nghttp3_conn_on_priority_update(nghttp3_conn *conn, + const nghttp3_frame_priority_update *fr) { + assert(conn->server); + assert(fr->hd.type == NGHTTP3_FRAME_PRIORITY_UPDATE); + + return conn_on_priority_update_stream(conn, fr); +} + static int conn_stream_acked_data(nghttp3_stream *stream, int64_t stream_id, - size_t datalen, void *user_data) { + uint64_t datalen, void *user_data) { nghttp3_conn *conn = stream->conn; int rv; @@ -2477,76 +1791,34 @@ int nghttp3_conn_create_stream(nghttp3_conn *conn, nghttp3_stream **pstream, nghttp3_stream *stream; int rv; nghttp3_stream_callbacks callbacks = { - conn_stream_acked_data, - }; - - rv = nghttp3_stream_new(&stream, stream_id, conn->next_seq, &callbacks, - conn->mem); - if (rv != 0) { - return rv; - } - - stream->conn = conn; - - rv = nghttp3_map_insert(&conn->streams, &stream->me); - if (rv != 0) { - nghttp3_stream_del(stream); - return rv; - } - - ++conn->next_seq; - *pstream = stream; - - return 0; -} - -int nghttp3_conn_create_push_promise(nghttp3_conn *conn, - nghttp3_push_promise **ppp, - int64_t push_id, - nghttp3_tnode *assoc_tnode) { - nghttp3_push_promise *pp; - int rv; + conn_stream_acked_data, + }; - rv = nghttp3_push_promise_new(&pp, push_id, conn->next_seq, assoc_tnode, - conn->mem); + rv = nghttp3_stream_new(&stream, stream_id, conn->next_seq, &callbacks, + &conn->out_chunk_objalloc, &conn->stream_objalloc, + conn->mem); if (rv != 0) { return rv; } - rv = nghttp3_map_insert(&conn->pushes, &pp->me); + stream->conn = conn; + + rv = nghttp3_map_insert(&conn->streams, + (nghttp3_map_key_type)stream->node.nid.id, stream); if (rv != 0) { - nghttp3_push_promise_del(pp, conn->mem); + nghttp3_stream_del(stream); return rv; } ++conn->next_seq; - *ppp = pp; + *pstream = stream; return 0; } nghttp3_stream *nghttp3_conn_find_stream(nghttp3_conn *conn, int64_t stream_id) { - nghttp3_map_entry *me; - - me = nghttp3_map_find(&conn->streams, (key_type)stream_id); - if (me == NULL) { - return NULL; - } - - return nghttp3_struct_of(me, nghttp3_stream, me); -} - -nghttp3_push_promise *nghttp3_conn_find_push_promise(nghttp3_conn *conn, - int64_t push_id) { - nghttp3_map_entry *me; - - me = nghttp3_map_find(&conn->pushes, (key_type)push_id); - if (me == NULL) { - return NULL; - } - - return nghttp3_struct_of(me, nghttp3_push_promise, me); + return nghttp3_map_find(&conn->streams, (nghttp3_map_key_type)stream_id); } int nghttp3_conn_bind_control_stream(nghttp3_conn *conn, int64_t stream_id) { @@ -2680,15 +1952,6 @@ nghttp3_ssize nghttp3_conn_writev_stream(nghttp3_conn *conn, } if (conn->tx.ctrl && !nghttp3_stream_is_blocked(conn->tx.ctrl)) { - if (!(conn->flags & NGHTTP3_CONN_FLAG_MAX_PUSH_ID_QUEUED) && - !(conn->flags & NGHTTP3_CONN_FLAG_GOAWAY_QUEUED) && - conn->remote.uni.unsent_max_pushes > conn->remote.uni.max_pushes) { - rv = nghttp3_conn_submit_max_push_id(conn); - if (rv != 0) { - return rv; - } - } - ncnt = conn_writev_stream(conn, pstream_id, pfin, vec, veccnt, conn->tx.ctrl); if (ncnt) { @@ -2727,7 +1990,7 @@ nghttp3_ssize nghttp3_conn_writev_stream(nghttp3_conn *conn, return ncnt; } - if (nghttp3_stream_bidi_or_push(stream) && + if (nghttp3_client_stream_bidi(stream->node.nid.id) && !nghttp3_stream_require_schedule(stream)) { nghttp3_conn_unschedule_stream(conn, stream); } @@ -2748,10 +2011,6 @@ nghttp3_stream *nghttp3_conn_get_next_tx_stream(nghttp3_conn *conn) { tnode = nghttp3_struct_of(nghttp3_pq_top(pq), nghttp3_tnode, pe); - if (tnode->nid.type == NGHTTP3_NODE_ID_TYPE_PUSH) { - return nghttp3_struct_of(tnode, nghttp3_push_promise, node)->stream; - } - return nghttp3_struct_of(tnode, nghttp3_stream, node); } @@ -2764,7 +2023,7 @@ int nghttp3_conn_add_write_offset(nghttp3_conn *conn, int64_t stream_id, int rv; if (stream == NULL) { - return NGHTTP3_ERR_STREAM_NOT_FOUND; + return 0; } rv = nghttp3_stream_add_outq_offset(stream, n); @@ -2774,7 +2033,7 @@ int nghttp3_conn_add_write_offset(nghttp3_conn *conn, int64_t stream_id, stream->unscheduled_nwrite += n; - if (!nghttp3_stream_bidi_or_push(stream)) { + if (!nghttp3_client_stream_bidi(stream->node.nid.id)) { return 0; } @@ -2795,7 +2054,7 @@ int nghttp3_conn_add_ack_offset(nghttp3_conn *conn, int64_t stream_id, nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id); if (stream == NULL) { - return NGHTTP3_ERR_STREAM_NOT_FOUND; + return 0; } return nghttp3_stream_add_ack_offset(stream, n); @@ -2840,21 +2099,12 @@ static int conn_submit_headers_data(nghttp3_conn *conn, nghttp3_stream *stream, return 0; } -static nghttp3_tnode *stream_get_dependency_node(nghttp3_stream *stream) { - if (stream->pp) { - assert(stream->type == NGHTTP3_STREAM_TYPE_PUSH); - return &stream->pp->node; - } - - return &stream->node; -} - int nghttp3_conn_schedule_stream(nghttp3_conn *conn, nghttp3_stream *stream) { /* Assume that stream stays on the same urgency level */ + nghttp3_tnode *node = stream_get_sched_node(stream); int rv; - rv = nghttp3_tnode_schedule(stream_get_dependency_node(stream), - conn_get_sched_pq(conn, &stream->node), + rv = nghttp3_tnode_schedule(node, conn_get_sched_pq(conn, node), stream->unscheduled_nwrite); if (rv != 0) { return rv; @@ -2867,7 +2117,7 @@ int nghttp3_conn_schedule_stream(nghttp3_conn *conn, nghttp3_stream *stream) { int nghttp3_conn_ensure_stream_scheduled(nghttp3_conn *conn, nghttp3_stream *stream) { - if (nghttp3_tnode_is_scheduled(stream_get_dependency_node(stream))) { + if (nghttp3_tnode_is_scheduled(stream_get_sched_node(stream))) { return 0; } @@ -2876,8 +2126,9 @@ int nghttp3_conn_ensure_stream_scheduled(nghttp3_conn *conn, void nghttp3_conn_unschedule_stream(nghttp3_conn *conn, nghttp3_stream *stream) { - nghttp3_tnode_unschedule(stream_get_dependency_node(stream), - conn_get_sched_pq(conn, &stream->node)); + nghttp3_tnode *node = stream_get_sched_node(stream); + + nghttp3_tnode_unschedule(node, conn_get_sched_pq(conn, node)); } int nghttp3_conn_submit_request(nghttp3_conn *conn, int64_t stream_id, @@ -2983,184 +2234,6 @@ int nghttp3_conn_submit_trailers(nghttp3_conn *conn, int64_t stream_id, return conn_submit_headers_data(conn, stream, nva, nvlen, NULL); } -int nghttp3_conn_submit_push_promise(nghttp3_conn *conn, int64_t *ppush_id, - int64_t stream_id, const nghttp3_nv *nva, - size_t nvlen) { - nghttp3_stream *stream; - int rv; - nghttp3_nv *nnva; - nghttp3_frame_entry frent; - int64_t push_id; - nghttp3_push_promise *pp; - - assert(conn->server); - assert(conn->tx.qenc); - assert(nghttp3_client_stream_bidi(stream_id)); - - if (conn->flags & NGHTTP3_CONN_FLAG_GOAWAY_RECVED) { - return NGHTTP3_ERR_CONN_CLOSING; - } - - stream = nghttp3_conn_find_stream(conn, stream_id); - if (stream == NULL) { - return NGHTTP3_ERR_STREAM_NOT_FOUND; - } - - if (conn->local.uni.max_pushes <= (uint64_t)conn->local.uni.next_push_id) { - return NGHTTP3_ERR_PUSH_ID_BLOCKED; - } - - push_id = conn->local.uni.next_push_id; - - rv = nghttp3_conn_create_push_promise(conn, &pp, push_id, &stream->node); - if (rv != 0) { - return rv; - } - - ++conn->local.uni.next_push_id; - - rv = nghttp3_nva_copy(&nnva, nva, nvlen, conn->mem); - if (rv != 0) { - return rv; - } - - frent.fr.hd.type = NGHTTP3_FRAME_PUSH_PROMISE; - frent.fr.push_promise.push_id = push_id; - frent.fr.push_promise.nva = nnva; - frent.fr.push_promise.nvlen = nvlen; - - rv = nghttp3_stream_frq_add(stream, &frent); - if (rv != 0) { - nghttp3_nva_del(nnva, conn->mem); - return rv; - } - - *ppush_id = push_id; - - if (nghttp3_stream_require_schedule(stream)) { - return nghttp3_conn_schedule_stream(conn, stream); - } - - return 0; -} - -int nghttp3_conn_bind_push_stream(nghttp3_conn *conn, int64_t push_id, - int64_t stream_id) { - nghttp3_push_promise *pp; - nghttp3_stream *stream; - int rv; - - assert(conn->server); - assert(nghttp3_server_stream_uni(stream_id)); - - pp = nghttp3_conn_find_push_promise(conn, push_id); - if (pp == NULL) { - return NGHTTP3_ERR_INVALID_ARGUMENT; - } - - assert(NULL == nghttp3_conn_find_stream(conn, stream_id)); - - rv = nghttp3_conn_create_stream(conn, &stream, stream_id); - if (rv != 0) { - return rv; - } - - stream->type = NGHTTP3_STREAM_TYPE_PUSH; - stream->pp = pp; - - pp->stream = stream; - - rv = nghttp3_stream_write_stream_type_push_id(stream); - if (rv != 0) { - return rv; - } - - return 0; -} - -int nghttp3_conn_cancel_push(nghttp3_conn *conn, int64_t push_id) { - if (conn->server) { - return nghttp3_conn_server_cancel_push(conn, push_id); - } - return nghttp3_conn_client_cancel_push(conn, push_id); -} - -int nghttp3_conn_server_cancel_push(nghttp3_conn *conn, int64_t push_id) { - nghttp3_push_promise *pp; - nghttp3_frame_entry frent; - int rv; - - assert(conn->tx.ctrl); - - pp = nghttp3_conn_find_push_promise(conn, push_id); - if (pp == NULL) { - return NGHTTP3_ERR_INVALID_ARGUMENT; - } - - if (!(pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_SENT_CANCEL)) { - frent.fr.hd.type = NGHTTP3_FRAME_CANCEL_PUSH; - frent.fr.cancel_push.push_id = push_id; - - rv = nghttp3_stream_frq_add(conn->tx.ctrl, &frent); - if (rv != 0) { - return rv; - } - - pp->flags |= NGHTTP3_PUSH_PROMISE_FLAG_SENT_CANCEL; - } - - if (pp->stream) { - /* CANCEL_PUSH will be sent, but it does not affect pushed stream. - Stream should be explicitly cancelled. */ - rv = conn_call_reset_stream(conn, pp->stream, NGHTTP3_H3_REQUEST_CANCELLED); - if (rv != 0) { - return rv; - } - } - - nghttp3_tnode_unschedule(&pp->node, conn_get_sched_pq(conn, &pp->node)); - - conn_delete_push_promise(conn, pp); - - return 0; -} - -int nghttp3_conn_client_cancel_push(nghttp3_conn *conn, int64_t push_id) { - nghttp3_push_promise *pp; - nghttp3_frame_entry frent; - int rv; - - pp = nghttp3_conn_find_push_promise(conn, push_id); - if (pp == NULL) { - return NGHTTP3_ERR_INVALID_ARGUMENT; - } - - if (pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_SENT_CANCEL) { - return 0; - } - - if (!(pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_RECVED)) { - return NGHTTP3_ERR_INVALID_STATE; - } - - if (pp->stream) { - pp->flags |= NGHTTP3_PUSH_PROMISE_FLAG_SENT_CANCEL; - return nghttp3_conn_cancel_push_stream(conn, pp->stream); - } - - frent.fr.hd.type = NGHTTP3_FRAME_CANCEL_PUSH; - frent.fr.cancel_push.push_id = push_id; - - rv = nghttp3_stream_frq_add(conn->tx.ctrl, &frent); - if (rv != 0) { - return rv; - } - - conn_delete_push_promise(conn, pp); - - return 0; -} - int nghttp3_conn_submit_shutdown_notice(nghttp3_conn *conn) { nghttp3_frame_entry frent; int rv; @@ -3168,7 +2241,8 @@ int nghttp3_conn_submit_shutdown_notice(nghttp3_conn *conn) { assert(conn->tx.ctrl); frent.fr.hd.type = NGHTTP3_FRAME_GOAWAY; - frent.fr.goaway.id = conn->server ? (1ull << 62) - 4 : (1ull << 62) - 1; + frent.fr.goaway.id = conn->server ? NGHTTP3_SHUTDOWN_NOTICE_STREAM_ID + : NGHTTP3_SHUTDOWN_NOTICE_PUSH_ID; assert(frent.fr.goaway.id <= conn->tx.goaway_id); @@ -3194,7 +2268,7 @@ int nghttp3_conn_shutdown(nghttp3_conn *conn) { frent.fr.goaway.id = nghttp3_min((1ll << 62) - 4, conn->rx.max_stream_id_bidi + 4); } else { - frent.fr.goaway.id = nghttp3_min((1ll << 62) - 1, conn->rx.max_push_id + 1); + frent.fr.goaway.id = 0; } assert(frent.fr.goaway.id <= conn->tx.goaway_id); @@ -3213,12 +2287,7 @@ int nghttp3_conn_shutdown(nghttp3_conn *conn) { int nghttp3_conn_reject_stream(nghttp3_conn *conn, nghttp3_stream *stream) { int rv; - rv = nghttp3_qpack_decoder_cancel_stream(&conn->qdec, stream->node.nid.id); - if (rv != 0) { - return rv; - } - - rv = conn_call_send_stop_sending(conn, stream, NGHTTP3_H3_REQUEST_REJECTED); + rv = conn_call_stop_sending(conn, stream, NGHTTP3_H3_REQUEST_REJECTED); if (rv != 0) { return rv; } @@ -3226,74 +2295,46 @@ int nghttp3_conn_reject_stream(nghttp3_conn *conn, nghttp3_stream *stream) { return conn_call_reset_stream(conn, stream, NGHTTP3_H3_REQUEST_REJECTED); } -static int conn_reject_push_stream(nghttp3_conn *conn, nghttp3_stream *stream, - uint64_t app_error_code) { - int rv; - - /* TODO Send Stream Cancellation if we have not processed all - incoming stream data up to fin */ - rv = nghttp3_qpack_decoder_cancel_stream(&conn->qdec, stream->node.nid.id); - if (rv != 0) { - return rv; - } - - return conn_call_send_stop_sending(conn, stream, app_error_code); -} - -int nghttp3_conn_reject_push_stream(nghttp3_conn *conn, - nghttp3_stream *stream) { - return conn_reject_push_stream(conn, stream, NGHTTP3_H3_REQUEST_REJECTED); -} - -int nghttp3_conn_cancel_push_stream(nghttp3_conn *conn, - nghttp3_stream *stream) { - return conn_reject_push_stream(conn, stream, NGHTTP3_H3_REQUEST_CANCELLED); -} - -int nghttp3_conn_block_stream(nghttp3_conn *conn, int64_t stream_id) { +void nghttp3_conn_block_stream(nghttp3_conn *conn, int64_t stream_id) { nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id); if (stream == NULL) { - return NGHTTP3_ERR_STREAM_NOT_FOUND; + return; } stream->flags |= NGHTTP3_STREAM_FLAG_FC_BLOCKED; stream->unscheduled_nwrite = 0; - if (nghttp3_stream_bidi_or_push(stream)) { + if (nghttp3_client_stream_bidi(stream->node.nid.id)) { nghttp3_conn_unschedule_stream(conn, stream); } - - return 0; } -int nghttp3_conn_shutdown_stream_write(nghttp3_conn *conn, int64_t stream_id) { +void nghttp3_conn_shutdown_stream_write(nghttp3_conn *conn, int64_t stream_id) { nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id); if (stream == NULL) { - return NGHTTP3_ERR_STREAM_NOT_FOUND; + return; } stream->flags |= NGHTTP3_STREAM_FLAG_SHUT_WR; stream->unscheduled_nwrite = 0; - if (nghttp3_stream_bidi_or_push(stream)) { + if (nghttp3_client_stream_bidi(stream->node.nid.id)) { nghttp3_conn_unschedule_stream(conn, stream); } - - return 0; } int nghttp3_conn_unblock_stream(nghttp3_conn *conn, int64_t stream_id) { nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id); if (stream == NULL) { - return NGHTTP3_ERR_STREAM_NOT_FOUND; + return 0; } stream->flags &= (uint16_t)~NGHTTP3_STREAM_FLAG_FC_BLOCKED; - if (nghttp3_stream_bidi_or_push(stream) && + if (nghttp3_client_stream_bidi(stream->node.nid.id) && nghttp3_stream_require_schedule(stream)) { return nghttp3_conn_ensure_stream_scheduled(conn, stream); } @@ -3301,16 +2342,29 @@ int nghttp3_conn_unblock_stream(nghttp3_conn *conn, int64_t stream_id) { return 0; } +int nghttp3_conn_is_stream_writable(nghttp3_conn *conn, int64_t stream_id) { + nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id); + + if (stream == NULL) { + return 0; + } + + return (stream->flags & + (NGHTTP3_STREAM_FLAG_FC_BLOCKED | + NGHTTP3_STREAM_FLAG_READ_DATA_BLOCKED | NGHTTP3_STREAM_FLAG_SHUT_WR | + NGHTTP3_STREAM_FLAG_CLOSED)) == 0; +} + int nghttp3_conn_resume_stream(nghttp3_conn *conn, int64_t stream_id) { nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id); if (stream == NULL) { - return NGHTTP3_ERR_STREAM_NOT_FOUND; + return 0; } stream->flags &= (uint16_t)~NGHTTP3_STREAM_FLAG_READ_DATA_BLOCKED; - if (nghttp3_stream_bidi_or_push(stream) && + if (nghttp3_client_stream_bidi(stream->node.nid.id) && nghttp3_stream_require_schedule(stream)) { return nghttp3_conn_ensure_stream_scheduled(conn, stream); } @@ -3336,9 +2390,7 @@ int nghttp3_conn_close_stream(nghttp3_conn *conn, int64_t stream_id, nghttp3_conn_unschedule_stream(conn, stream); - if (stream->qpack_blocked_pe.index == NGHTTP3_PQ_BAD_INDEX && - (conn->server || !stream->pp || - (stream->pp->flags & NGHTTP3_PUSH_PROMISE_FLAG_RECVED))) { + if (stream->qpack_blocked_pe.index == NGHTTP3_PQ_BAD_INDEX) { return conn_delete_stream(conn, stream); } @@ -3346,13 +2398,22 @@ int nghttp3_conn_close_stream(nghttp3_conn *conn, int64_t stream_id, return 0; } -int nghttp3_conn_reset_stream(nghttp3_conn *conn, int64_t stream_id) { +int nghttp3_conn_shutdown_stream_read(nghttp3_conn *conn, int64_t stream_id) { nghttp3_stream *stream; + if (!nghttp3_client_stream_bidi(stream_id)) { + return 0; + } + stream = nghttp3_conn_find_stream(conn, stream_id); if (stream) { - stream->flags |= NGHTTP3_STREAM_FLAG_RESET; + if (stream->flags & NGHTTP3_STREAM_FLAG_SHUT_RD) { + return 0; + } + + stream->flags |= NGHTTP3_STREAM_FLAG_SHUT_RD; } + return nghttp3_qpack_decoder_cancel_stream(&conn->qdec, stream_id); } @@ -3383,26 +2444,6 @@ void nghttp3_conn_set_max_concurrent_streams(nghttp3_conn *conn, max_concurrent_streams); } -int nghttp3_conn_submit_max_push_id(nghttp3_conn *conn) { - nghttp3_frame_entry frent; - int rv; - - assert(conn->tx.ctrl); - assert(!(conn->flags & NGHTTP3_CONN_FLAG_MAX_PUSH_ID_QUEUED)); - - frent.fr.hd.type = NGHTTP3_FRAME_MAX_PUSH_ID; - /* The acutal push_id is set when frame is serialized */ - - rv = nghttp3_stream_frq_add(conn->tx.ctrl, &frent); - if (rv != 0) { - return rv; - } - - conn->flags |= NGHTTP3_CONN_FLAG_MAX_PUSH_ID_QUEUED; - - return 0; -} - int nghttp3_conn_set_stream_user_data(nghttp3_conn *conn, int64_t stream_id, void *stream_user_data) { nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id); @@ -3416,48 +2457,66 @@ int nghttp3_conn_set_stream_user_data(nghttp3_conn *conn, int64_t stream_id, return 0; } -int64_t nghttp3_conn_get_frame_payload_left(nghttp3_conn *conn, - int64_t stream_id) { +uint64_t nghttp3_conn_get_frame_payload_left(nghttp3_conn *conn, + int64_t stream_id) { nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id); if (stream == NULL) { - return NGHTTP3_ERR_STREAM_NOT_FOUND; + return 0; } - return stream->rstate.left; + return (uint64_t)stream->rstate.left; } int nghttp3_conn_get_stream_priority(nghttp3_conn *conn, nghttp3_pri *dest, int64_t stream_id) { - nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id); + nghttp3_stream *stream; assert(conn->server); + if (!nghttp3_client_stream_bidi(stream_id)) { + return NGHTTP3_ERR_INVALID_ARGUMENT; + } + + stream = nghttp3_conn_find_stream(conn, stream_id); if (stream == NULL) { return NGHTTP3_ERR_STREAM_NOT_FOUND; } - dest->urgency = nghttp3_pri_uint8_urgency(stream->rx.http.pri); - dest->inc = nghttp3_pri_uint8_inc(stream->rx.http.pri); + dest->urgency = nghttp3_pri_uint8_urgency(stream->node.pri); + dest->inc = nghttp3_pri_uint8_inc(stream->node.pri); return 0; } int nghttp3_conn_set_stream_priority(nghttp3_conn *conn, int64_t stream_id, const nghttp3_pri *pri) { - nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id); + nghttp3_stream *stream; + nghttp3_frame_entry frent; - assert(conn->server); assert(pri->urgency < NGHTTP3_URGENCY_LEVELS); assert(pri->inc == 0 || pri->inc == 1); + if (!nghttp3_client_stream_bidi(stream_id)) { + return NGHTTP3_ERR_INVALID_ARGUMENT; + } + + stream = nghttp3_conn_find_stream(conn, stream_id); if (stream == NULL) { return NGHTTP3_ERR_STREAM_NOT_FOUND; } - stream->rx.http.pri = nghttp3_pri_to_uint8(pri); + if (conn->server) { + stream->flags |= NGHTTP3_STREAM_FLAG_SERVER_PRIORITY_SET; + + return conn_update_stream_priority(conn, stream, nghttp3_pri_to_uint8(pri)); + } + + frent.fr.hd.type = NGHTTP3_FRAME_PRIORITY_UPDATE; + frent.fr.priority_update.pri_elem_id = stream_id; + frent.fr.priority_update.pri = *pri; - return conn_update_stream_priority(conn, stream, stream->rx.http.pri); + return nghttp3_stream_frq_add(conn->tx.ctrl, &frent); } int nghttp3_conn_is_remote_qpack_encoder_stream(nghttp3_conn *conn, @@ -3472,52 +2531,12 @@ int nghttp3_conn_is_remote_qpack_encoder_stream(nghttp3_conn *conn, return stream && stream->type == NGHTTP3_STREAM_TYPE_QPACK_ENCODER; } -void nghttp3_settings_default(nghttp3_settings *settings) { +void nghttp3_settings_default_versioned(int settings_version, + nghttp3_settings *settings) { + (void)settings_version; + memset(settings, 0, sizeof(nghttp3_settings)); settings->max_field_section_size = NGHTTP3_VARINT_MAX; -} - -int nghttp3_push_promise_new(nghttp3_push_promise **ppp, int64_t push_id, - uint64_t seq, nghttp3_tnode *assoc_tnode, - const nghttp3_mem *mem) { - nghttp3_push_promise *pp; - nghttp3_node_id nid; - - pp = nghttp3_mem_calloc(mem, 1, sizeof(nghttp3_push_promise)); - if (pp == NULL) { - return NGHTTP3_ERR_NOMEM; - } - - nghttp3_tnode_init( - &pp->node, nghttp3_node_id_init(&nid, NGHTTP3_NODE_ID_TYPE_PUSH, push_id), - seq, NGHTTP3_DEFAULT_URGENCY); - - pp->me.key = (key_type)push_id; - pp->node.nid.id = push_id; - pp->http.status_code = -1; - pp->http.content_length = -1; - - if (assoc_tnode) { - assert(assoc_tnode->nid.type == NGHTTP3_NODE_ID_TYPE_STREAM); - - pp->stream_id = assoc_tnode->nid.id; - pp->flags |= NGHTTP3_PUSH_PROMISE_FLAG_BOUND; - } else { - pp->stream_id = -1; - } - - *ppp = pp; - - return 0; -} - -void nghttp3_push_promise_del(nghttp3_push_promise *pp, - const nghttp3_mem *mem) { - if (pp == NULL) { - return; - } - - nghttp3_tnode_free(&pp->node); - - nghttp3_mem_free(mem, pp); + settings->qpack_encoder_max_dtable_capacity = + NGHTTP3_QPACK_ENCODER_MAX_DTABLE_CAPACITY; } diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_conn.h b/deps/ngtcp2/nghttp3/lib/nghttp3_conn.h index f0f012e1770..fa7071e4b1d 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_conn.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_conn.h @@ -48,80 +48,38 @@ blocked streams for QPACK encoder. */ #define NGHTTP3_QPACK_ENCODER_MAX_BLOCK_STREAMS 100 -/* NGHTTP3_PUSH_PROMISE_FLAG_NONE indicates that no flag is set. */ -#define NGHTTP3_PUSH_PROMISE_FLAG_NONE 0x00 -/* NGHTTP3_PUSH_PROMISE_FLAG_RECVED is set when PUSH_PROMISE is - completely received. */ -#define NGHTTP3_PUSH_PROMISE_FLAG_RECVED 0x01 -/* NGHTTP3_PUSH_PROMISE_FLAG_RECV_CANCEL is set when push is - cancelled by server before receiving PUSH_PROMISE completely. - This flag should have no effect if push stream has already - opened. */ -#define NGHTTP3_PUSH_PROMISE_FLAG_RECV_CANCEL 0x02 -/* NGHTTP3_PUSH_PROMISE_FLAG_SENT_CANCEL is set when push is - canceled by the local endpoint. */ -#define NGHTTP3_PUSH_PROMISE_FLAG_SENT_CANCEL 0x04 -#define NGHTTP3_PUSH_PROMISE_FLAG_CANCELLED \ - (NGHTTP3_PUSH_PROMISE_FLAG_RECV_CANCEL | \ - NGHTTP3_PUSH_PROMISE_FLAG_SENT_CANCEL) -/* NGHTTP3_PUSH_PROMISE_FLAG_PUSH_ID_RECLAIMED indicates that - unsent_max_pushes has been updated for this push ID. */ -#define NGHTTP3_PUSH_PROMISE_FLAG_PUSH_ID_RECLAIMED 0x08 -/* NGHTTP3_PUSH_PROMISE_FLAG_BOUND is set if nghttp3_push_promise - object is bound to a stream where PUSH_PROMISE frame is received - first. nghttp3_push_promise object might be created before - receiving any PUSH_PROMISE when pushed stream is received before - it.*/ -#define NGHTTP3_PUSH_PROMISE_FLAG_BOUND 0x10 - -typedef struct nghttp3_push_promise { - nghttp3_map_entry me; - nghttp3_tnode node; - nghttp3_http_state http; - /* stream is server initiated unidirectional stream which fulfils - the push promise. */ - nghttp3_stream *stream; - /* stream_id is the stream ID where this PUSH_PROMISE is first - received. PUSH_PROMISE with same push ID is allowed to be sent - in the multiple streams. We ignore those duplicated PUSH_PROMISE - entirely because we don't see any value to add extra cost of - processing for it. Even ignoring those frame is not yet easy - because we have to decode the header blocks. Server push is - overly complex and there is no good use case after all. */ - int64_t stream_id; - /* flags is bitwise OR of zero or more of - NGHTTP3_PUSH_PROMISE_FLAG_*. */ - uint16_t flags; -} nghttp3_push_promise; - /* NGHTTP3_CONN_FLAG_NONE indicates that no flag is set. */ -#define NGHTTP3_CONN_FLAG_NONE 0x0000 +#define NGHTTP3_CONN_FLAG_NONE 0x0000u /* NGHTTP3_CONN_FLAG_SETTINGS_RECVED is set when SETTINGS frame has been received. */ -#define NGHTTP3_CONN_FLAG_SETTINGS_RECVED 0x0001 +#define NGHTTP3_CONN_FLAG_SETTINGS_RECVED 0x0001u /* NGHTTP3_CONN_FLAG_CONTROL_OPENED is set when a control stream has opened. */ -#define NGHTTP3_CONN_FLAG_CONTROL_OPENED 0x0002 +#define NGHTTP3_CONN_FLAG_CONTROL_OPENED 0x0002u /* NGHTTP3_CONN_FLAG_QPACK_ENCODER_OPENED is set when a QPACK encoder stream has opened. */ -#define NGHTTP3_CONN_FLAG_QPACK_ENCODER_OPENED 0x0004 +#define NGHTTP3_CONN_FLAG_QPACK_ENCODER_OPENED 0x0004u /* NGHTTP3_CONN_FLAG_QPACK_DECODER_OPENED is set when a QPACK decoder stream has opened. */ -#define NGHTTP3_CONN_FLAG_QPACK_DECODER_OPENED 0x0008 -/* NGHTTP3_CONN_FLAG_MAX_PUSH_ID_QUEUED indicates that MAX_PUSH_ID has - been queued to control stream. */ -#define NGHTTP3_CONN_FLAG_MAX_PUSH_ID_QUEUED 0x0010 +#define NGHTTP3_CONN_FLAG_QPACK_DECODER_OPENED 0x0008u /* NGHTTP3_CONN_FLAG_GOAWAY_RECVED indicates that GOAWAY frame has received. */ -#define NGHTTP3_CONN_FLAG_GOAWAY_RECVED 0x0020 +#define NGHTTP3_CONN_FLAG_GOAWAY_RECVED 0x0020u /* NGHTTP3_CONN_FLAG_GOAWAY_QUEUED indicates that GOAWAY frame has been submitted for transmission. */ -#define NGHTTP3_CONN_FLAG_GOAWAY_QUEUED 0x0040 +#define NGHTTP3_CONN_FLAG_GOAWAY_QUEUED 0x0040u + +typedef struct nghttp3_chunk { + nghttp3_opl_entry oplent; +} nghttp3_chunk; + +nghttp3_objalloc_def(chunk, nghttp3_chunk, oplent); struct nghttp3_conn { + nghttp3_objalloc out_chunk_objalloc; + nghttp3_objalloc stream_objalloc; nghttp3_callbacks callbacks; nghttp3_map streams; - nghttp3_map pushes; nghttp3_qpack_decoder qdec; nghttp3_qpack_encoder qenc; nghttp3_pq qpack_blocked_streams; @@ -138,11 +96,9 @@ struct nghttp3_conn { nghttp3_settings settings; struct { /* max_pushes is the number of push IDs that local endpoint can - issue. This field is used by server only. */ + issue. This field is used by server only and used just for + validation */ uint64_t max_pushes; - /* next_push_id is the next push ID server uses. This field is - used by server only. */ - int64_t next_push_id; } uni; } local; @@ -154,18 +110,6 @@ struct nghttp3_conn { issue. This field is used on server side only. */ uint64_t max_client_streams; } bidi; - struct { - /* push_idtr tracks which push ID has been used by remote - server. This field is used by client only. */ - nghttp3_gaptr push_idtr; - /* unsent_max_pushes is the maximum number of push which the local - endpoint can accept. This limit is not yet notified to the - remote endpoint. This field is used by client only. */ - uint64_t unsent_max_pushes; - /* max_push is the maximum number of push which the local - endpoint can accept. This field is used by client only. */ - uint64_t max_pushes; - } uni; nghttp3_settings settings; } remote; @@ -174,7 +118,13 @@ struct nghttp3_conn { int64_t goaway_id; int64_t max_stream_id_bidi; - int64_t max_push_id; + + /* pri_fieldbuf is a buffer to store incoming Priority Field Value + in PRIORITY_UPDATE frame. */ + uint8_t pri_fieldbuf[8]; + /* pri_fieldlen is the number of bytes written into + pri_fieldbuf. */ + size_t pri_fieldbuflen; } rx; struct { @@ -192,17 +142,9 @@ struct nghttp3_conn { nghttp3_stream *nghttp3_conn_find_stream(nghttp3_conn *conn, int64_t stream_id); -nghttp3_push_promise *nghttp3_conn_find_push_promise(nghttp3_conn *conn, - int64_t push_id); - int nghttp3_conn_create_stream(nghttp3_conn *conn, nghttp3_stream **pstream, int64_t stream_id); -int nghttp3_conn_create_push_promise(nghttp3_conn *conn, - nghttp3_push_promise **ppp, - int64_t push_id, - nghttp3_tnode *assoc_tnode); - nghttp3_ssize nghttp3_conn_read_bidi(nghttp3_conn *conn, size_t *pnproc, nghttp3_stream *stream, const uint8_t *src, size_t srclen, int fin); @@ -214,10 +156,6 @@ nghttp3_ssize nghttp3_conn_read_control(nghttp3_conn *conn, nghttp3_stream *stream, const uint8_t *src, size_t srclen); -nghttp3_ssize nghttp3_conn_read_push(nghttp3_conn *conn, size_t *pnproc, - nghttp3_stream *stream, const uint8_t *src, - size_t srclen, int fin); - nghttp3_ssize nghttp3_conn_read_qpack_encoder(nghttp3_conn *conn, const uint8_t *src, size_t srclen); @@ -226,24 +164,14 @@ nghttp3_ssize nghttp3_conn_read_qpack_decoder(nghttp3_conn *conn, const uint8_t *src, size_t srclen); -int nghttp3_conn_on_push_promise_push_id(nghttp3_conn *conn, int64_t push_id, - nghttp3_stream *stream); - -int nghttp3_conn_on_client_cancel_push(nghttp3_conn *conn, - const nghttp3_frame_cancel_push *fr); - -int nghttp3_conn_on_server_cancel_push(nghttp3_conn *conn, - const nghttp3_frame_cancel_push *fr); - -int nghttp3_conn_on_stream_push_id(nghttp3_conn *conn, nghttp3_stream *stream, - int64_t push_id); - int nghttp3_conn_on_data(nghttp3_conn *conn, nghttp3_stream *stream, const uint8_t *data, size_t datalen); +int nghttp3_conn_on_priority_update(nghttp3_conn *conn, + const nghttp3_frame_priority_update *fr); + nghttp3_ssize nghttp3_conn_on_headers(nghttp3_conn *conn, nghttp3_stream *stream, - nghttp3_push_promise *pp, const uint8_t *data, size_t datalen, int fin); @@ -255,12 +183,6 @@ int nghttp3_conn_qpack_blocked_streams_push(nghttp3_conn *conn, void nghttp3_conn_qpack_blocked_streams_pop(nghttp3_conn *conn); -int nghttp3_conn_server_cancel_push(nghttp3_conn *conn, int64_t push_id); - -int nghttp3_conn_client_cancel_push(nghttp3_conn *conn, int64_t push_id); - -int nghttp3_conn_submit_max_push_id(nghttp3_conn *conn); - int nghttp3_conn_schedule_stream(nghttp3_conn *conn, nghttp3_stream *stream); int nghttp3_conn_ensure_stream_scheduled(nghttp3_conn *conn, @@ -270,20 +192,10 @@ void nghttp3_conn_unschedule_stream(nghttp3_conn *conn, nghttp3_stream *stream); int nghttp3_conn_reject_stream(nghttp3_conn *conn, nghttp3_stream *stream); -int nghttp3_conn_reject_push_stream(nghttp3_conn *conn, nghttp3_stream *stream); - -int nghttp3_conn_cancel_push_stream(nghttp3_conn *conn, nghttp3_stream *stream); - /* * nghttp3_conn_get_next_tx_stream returns next stream to send. It * returns NULL if there is no such stream. */ nghttp3_stream *nghttp3_conn_get_next_tx_stream(nghttp3_conn *conn); -int nghttp3_push_promise_new(nghttp3_push_promise **ppp, int64_t push_id, - uint64_t seq, nghttp3_tnode *assoc_tnode, - const nghttp3_mem *mem); - -void nghttp3_push_promise_del(nghttp3_push_promise *pp, const nghttp3_mem *mem); - #endif /* NGHTTP3_CONN_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_conv.c b/deps/ngtcp2/nghttp3/lib/nghttp3_conv.c index 04bf6a0f298..cb340ab5a11 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_conv.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_conv.c @@ -58,6 +58,7 @@ int64_t nghttp3_get_varint(size_t *plen, const uint8_t *p) { } assert(0); + abort(); } int64_t nghttp3_get_varint_fb(const uint8_t *p) { return *p & 0x3f; } diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_conv.h b/deps/ngtcp2/nghttp3/lib/nghttp3_conv.h index 860326385ba..23555be7cac 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_conv.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_conv.h @@ -88,7 +88,7 @@ STIN uint32_t htonl(uint32_t hostlong) { uint32_t res; unsigned char *p = (unsigned char *)&res; - *p++ = hostlong >> 24; + *p++ = (unsigned char)(hostlong >> 24); *p++ = (hostlong >> 16) & 0xffu; *p++ = (hostlong >> 8) & 0xffu; *p = hostlong & 0xffu; @@ -98,7 +98,7 @@ STIN uint32_t htonl(uint32_t hostlong) { STIN uint16_t htons(uint16_t hostshort) { uint16_t res; unsigned char *p = (unsigned char *)&res; - *p++ = hostshort >> 8; + *p++ = (unsigned char)(hostshort >> 8); *p = hostshort & 0xffu; return res; } diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_err.c b/deps/ngtcp2/nghttp3/lib/nghttp3_err.c index fb1353ea8a4..5cf94db852f 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_err.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_err.c @@ -36,8 +36,6 @@ const char *nghttp3_strerror(int liberr) { return "ERR_WOULDBLOCK"; case NGHTTP3_ERR_STREAM_IN_USE: return "ERR_STREAM_IN_USE"; - case NGHTTP3_ERR_PUSH_ID_BLOCKED: - return "ERR_PUSH_ID_BLOCKED"; case NGHTTP3_ERR_MALFORMED_HTTP_HEADER: return "ERR_MALFORMED_HTTP_HEADER"; case NGHTTP3_ERR_REMOVE_HTTP_HEADER: @@ -48,14 +46,12 @@ const char *nghttp3_strerror(int liberr) { return "ERR_QPACK_FATAL"; case NGHTTP3_ERR_QPACK_HEADER_TOO_LARGE: return "ERR_QPACK_HEADER_TOO_LARGE"; - case NGHTTP3_ERR_IGNORE_STREAM: - return "ERR_IGNORE_STREAM"; case NGHTTP3_ERR_STREAM_NOT_FOUND: return "ERR_STREAM_NOT_FOUND"; - case NGHTTP3_ERR_IGNORE_PUSH_PROMISE: - return "ERR_IGNORE_PUSH_PROMISE"; case NGHTTP3_ERR_CONN_CLOSING: return "ERR_CONN_CLOSING"; + case NGHTTP3_ERR_STREAM_DATA_OVERFLOW: + return "ERR_STREAM_DATA_OVERFLOW"; case NGHTTP3_ERR_QPACK_DECOMPRESSION_FAILED: return "ERR_QPACK_DECOMPRESSION_FAILED"; case NGHTTP3_ERR_QPACK_ENCODER_STREAM_ERROR: @@ -106,6 +102,8 @@ uint64_t nghttp3_err_infer_quic_app_error_code(int liberr) { case NGHTTP3_ERR_H3_MISSING_SETTINGS: return NGHTTP3_H3_MISSING_SETTINGS; case NGHTTP3_ERR_H3_INTERNAL_ERROR: + case NGHTTP3_ERR_NOMEM: + case NGHTTP3_ERR_CALLBACK_FAILURE: return NGHTTP3_H3_INTERNAL_ERROR; case NGHTTP3_ERR_H3_CLOSED_CRITICAL_STREAM: return NGHTTP3_H3_CLOSED_CRITICAL_STREAM; @@ -124,3 +122,5 @@ uint64_t nghttp3_err_infer_quic_app_error_code(int liberr) { return NGHTTP3_H3_GENERAL_PROTOCOL_ERROR; } } + +int nghttp3_err_is_fatal(int liberr) { return liberr < NGHTTP3_ERR_FATAL; } diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_frame.c b/deps/ngtcp2/nghttp3/lib/nghttp3_frame.c index 6be82c6edaf..38c395ebe16 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_frame.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_frame.c @@ -26,6 +26,7 @@ #include "nghttp3_frame.h" #include +#include #include "nghttp3_conv.h" #include "nghttp3_str.h" @@ -70,59 +71,53 @@ size_t nghttp3_frame_write_settings_len(int64_t *ppayloadlen, nghttp3_put_varint_len((int64_t)payloadlen) + payloadlen; } -uint8_t *nghttp3_frame_write_cancel_push(uint8_t *p, - const nghttp3_frame_cancel_push *fr) { +uint8_t *nghttp3_frame_write_goaway(uint8_t *p, + const nghttp3_frame_goaway *fr) { p = nghttp3_frame_write_hd(p, &fr->hd); - p = nghttp3_put_varint(p, fr->push_id); + p = nghttp3_put_varint(p, fr->id); return p; } -size_t -nghttp3_frame_write_cancel_push_len(int64_t *ppayloadlen, - const nghttp3_frame_cancel_push *fr) { - size_t payloadlen = nghttp3_put_varint_len(fr->push_id); +size_t nghttp3_frame_write_goaway_len(int64_t *ppayloadlen, + const nghttp3_frame_goaway *fr) { + size_t payloadlen = nghttp3_put_varint_len(fr->id); *ppayloadlen = (int64_t)payloadlen; - return nghttp3_put_varint_len(NGHTTP3_FRAME_CANCEL_PUSH) + + return nghttp3_put_varint_len(NGHTTP3_FRAME_GOAWAY) + nghttp3_put_varint_len((int64_t)payloadlen) + payloadlen; } -uint8_t *nghttp3_frame_write_max_push_id(uint8_t *p, - const nghttp3_frame_max_push_id *fr) { +uint8_t * +nghttp3_frame_write_priority_update(uint8_t *p, + const nghttp3_frame_priority_update *fr) { p = nghttp3_frame_write_hd(p, &fr->hd); - p = nghttp3_put_varint(p, fr->push_id); + p = nghttp3_put_varint(p, fr->pri_elem_id); - return p; -} - -size_t -nghttp3_frame_write_max_push_id_len(int64_t *ppayloadlen, - const nghttp3_frame_max_push_id *fr) { - size_t payloadlen = nghttp3_put_varint_len(fr->push_id); + assert(fr->pri.urgency <= NGHTTP3_URGENCY_LOW); - *ppayloadlen = (int64_t)payloadlen; + *p++ = 'u'; + *p++ = '='; + *p++ = (uint8_t)('0' + fr->pri.urgency); - return nghttp3_put_varint_len(NGHTTP3_FRAME_MAX_PUSH_ID) + - nghttp3_put_varint_len((int64_t)payloadlen) + payloadlen; -} - -uint8_t *nghttp3_frame_write_goaway(uint8_t *p, - const nghttp3_frame_goaway *fr) { - p = nghttp3_frame_write_hd(p, &fr->hd); - p = nghttp3_put_varint(p, fr->id); + if (fr->pri.inc) { +#define NGHTTP3_PRIORITY_INCREMENTAL ", i" + p = nghttp3_cpymem(p, (const uint8_t *)NGHTTP3_PRIORITY_INCREMENTAL, + sizeof(NGHTTP3_PRIORITY_INCREMENTAL) - 1); + } return p; } -size_t nghttp3_frame_write_goaway_len(int64_t *ppayloadlen, - const nghttp3_frame_goaway *fr) { - size_t payloadlen = nghttp3_put_varint_len(fr->id); +size_t nghttp3_frame_write_priority_update_len( + int64_t *ppayloadlen, const nghttp3_frame_priority_update *fr) { + size_t payloadlen = nghttp3_put_varint_len(fr->pri_elem_id) + sizeof("u=U") - + 1 + (fr->pri.inc ? sizeof(", i") - 1 : 0); *ppayloadlen = (int64_t)payloadlen; - return nghttp3_put_varint_len(NGHTTP3_FRAME_GOAWAY) + + return nghttp3_put_varint_len(fr->hd.type) + nghttp3_put_varint_len((int64_t)payloadlen) + payloadlen; } @@ -207,12 +202,3 @@ void nghttp3_frame_headers_free(nghttp3_frame_headers *fr, nghttp3_nva_del(fr->nva, mem); } - -void nghttp3_frame_push_promise_free(nghttp3_frame_push_promise *fr, - const nghttp3_mem *mem) { - if (fr == NULL) { - return; - } - - nghttp3_nva_del(fr->nva, mem); -} diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_frame.h b/deps/ngtcp2/nghttp3/lib/nghttp3_frame.h index 9bd59a9660d..b64bbc4ecb9 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_frame.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_frame.h @@ -42,6 +42,10 @@ typedef enum nghttp3_frame_type { NGHTTP3_FRAME_PUSH_PROMISE = 0x05, NGHTTP3_FRAME_GOAWAY = 0x07, NGHTTP3_FRAME_MAX_PUSH_ID = 0x0d, + /* PRIORITY_UPDATE: + https://tools.ietf.org/html/draft-ietf-httpbis-priority-03 */ + NGHTTP3_FRAME_PRIORITY_UPDATE = 0x0f0700, + NGHTTP3_FRAME_PRIORITY_UPDATE_PUSH_ID = 0x0f0701, } nghttp3_frame_type; typedef enum nghttp3_h2_reserved_type { @@ -66,14 +70,10 @@ typedef struct nghttp3_frame_headers { size_t nvlen; } nghttp3_frame_headers; -typedef struct nghttp3_frame_cancel_push { - nghttp3_frame_hd hd; - int64_t push_id; -} nghttp3_frame_cancel_push; - #define NGHTTP3_SETTINGS_ID_MAX_FIELD_SECTION_SIZE 0x06 #define NGHTTP3_SETTINGS_ID_QPACK_MAX_TABLE_CAPACITY 0x01 #define NGHTTP3_SETTINGS_ID_QPACK_BLOCKED_STREAMS 0x07 +#define NGHTTP3_SETTINGS_ID_ENABLE_CONNECT_PROTOCOL 0x08 #define NGHTTP3_H2_SETTINGS_ID_ENABLE_PUSH 0x2 #define NGHTTP3_H2_SETTINGS_ID_MAX_CONCURRENT_STREAMS 0x3 @@ -91,32 +91,28 @@ typedef struct nghttp3_frame_settings { nghttp3_settings_entry iv[1]; } nghttp3_frame_settings; -typedef struct nghttp3_frame_push_promise { - nghttp3_frame_hd hd; - nghttp3_nv *nva; - size_t nvlen; - int64_t push_id; -} nghttp3_frame_push_promise; - typedef struct nghttp3_frame_goaway { nghttp3_frame_hd hd; int64_t id; } nghttp3_frame_goaway; -typedef struct nghttp3_frame_max_push_id { +typedef struct nghttp3_frame_priority_update { nghttp3_frame_hd hd; - int64_t push_id; -} nghttp3_frame_max_push_id; + /* pri_elem_id is stream ID if hd.type == + NGHTTP3_FRAME_PRIORITY_UPDATE. It is push ID if hd.type == + NGHTTP3_FRAME_PRIORITY_UPDATE_PUSH_ID. It is undefined + otherwise. */ + int64_t pri_elem_id; + nghttp3_pri pri; +} nghttp3_frame_priority_update; typedef union nghttp3_frame { nghttp3_frame_hd hd; nghttp3_frame_data data; nghttp3_frame_headers headers; - nghttp3_frame_cancel_push cancel_push; nghttp3_frame_settings settings; - nghttp3_frame_push_promise push_promise; nghttp3_frame_goaway goaway; - nghttp3_frame_max_push_id max_push_id; + nghttp3_frame_priority_update priority_update; } nghttp3_frame; /* @@ -150,42 +146,6 @@ uint8_t *nghttp3_frame_write_settings(uint8_t *dest, size_t nghttp3_frame_write_settings_len(int64_t *pppayloadlen, const nghttp3_frame_settings *fr); -/* - * nghttp3_frame_write_cancel_push writes CANCEL_PUSH frame |fr| to - * |dest|. This function assumes that |dest| has enough space to - * write |fr|. - * - * This function returns |dest| plus the number of bytes written. - */ -uint8_t *nghttp3_frame_write_cancel_push(uint8_t *dest, - const nghttp3_frame_cancel_push *fr); - -/* - * nghttp3_frame_write_cancel_push_len returns the number of bytes - * required to write |fr|. fr->hd.length is ignored. This function - * stores payload length in |*ppayloadlen|. - */ -size_t nghttp3_frame_write_cancel_push_len(int64_t *ppayloadlen, - const nghttp3_frame_cancel_push *fr); - -/* - * nghttp3_frame_write_max_push_id writes MAX_PUSH_ID frame |fr| to - * |dest|. This function assumes that |dest| has enough space to - * write |fr|. - * - * This function returns |dest| plus the number of bytes written. - */ -uint8_t *nghttp3_frame_write_max_push_id(uint8_t *dest, - const nghttp3_frame_max_push_id *fr); - -/* - * nghttp3_frame_write_max_push_id_len returns the number of bytes - * required to write |fr|. fr->hd.length is ignored. This function - * stores payload length in |*ppayloadlen|. - */ -size_t nghttp3_frame_write_max_push_id_len(int64_t *ppayloadlen, - const nghttp3_frame_max_push_id *fr); - /* * nghttp3_frame_write_goaway writes GOAWAY frame |fr| to |dest|. * This function assumes that |dest| has enough space to write |fr|. @@ -203,6 +163,25 @@ uint8_t *nghttp3_frame_write_goaway(uint8_t *dest, size_t nghttp3_frame_write_goaway_len(int64_t *ppayloadlen, const nghttp3_frame_goaway *fr); +/* + * nghttp3_frame_write_priority_update writes PRIORITY_UPDATE frame + * |fr| to |dest|. This function assumes that |dest| has enough space + * to write |fr|. + * + * This function returns |dest| plus the number of bytes written; + */ +uint8_t * +nghttp3_frame_write_priority_update(uint8_t *dest, + const nghttp3_frame_priority_update *fr); + +/* + * nghttp3_frame_write_priority_update_len returns the number of bytes + * required to write |fr|. fr->hd.length is ignored. This function + * stores payload length in |*ppayloadlen|. + */ +size_t nghttp3_frame_write_priority_update_len( + int64_t *ppayloadlen, const nghttp3_frame_priority_update *fr); + /* * nghttp3_nva_copy copies name/value pairs from |nva|, which contains * |nvlen| pairs, to |*nva_ptr|, which is dynamically allocated so @@ -233,11 +212,4 @@ void nghttp3_nva_del(nghttp3_nv *nva, const nghttp3_mem *mem); void nghttp3_frame_headers_free(nghttp3_frame_headers *fr, const nghttp3_mem *mem); -/* - * nghttp3_frame_push_promise_free frees memory allocated for |fr|. - * It assumes that fr->nva is created by nghttp3_nva_copy() or NULL. - */ -void nghttp3_frame_push_promise_free(nghttp3_frame_push_promise *fr, - const nghttp3_mem *mem); - #endif /* NGHTTP3_FRAME_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_gaptr.c b/deps/ngtcp2/nghttp3/lib/nghttp3_gaptr.c index c60887d1ec4..88cb49a02f8 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_gaptr.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_gaptr.c @@ -24,29 +24,26 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "nghttp3_gaptr.h" -#include "nghttp3_range.h" #include #include -int nghttp3_gaptr_init(nghttp3_gaptr *gaptr, const nghttp3_mem *mem) { - int rv; - nghttp3_range range = {0, UINT64_MAX}; +void nghttp3_gaptr_init(nghttp3_gaptr *gaptr, const nghttp3_mem *mem) { + nghttp3_ksl_init(&gaptr->gap, nghttp3_ksl_range_compar, sizeof(nghttp3_range), + mem); - rv = nghttp3_ksl_init(&gaptr->gap, nghttp3_ksl_range_compar, - sizeof(nghttp3_range), mem); - if (rv != 0) { - return rv; - } + gaptr->mem = mem; +} + +static int gaptr_gap_init(nghttp3_gaptr *gaptr) { + nghttp3_range range = {0, UINT64_MAX}; + int rv; rv = nghttp3_ksl_insert(&gaptr->gap, NULL, &range, NULL); if (rv != 0) { - nghttp3_ksl_free(&gaptr->gap); return rv; } - gaptr->mem = mem; - return 0; } @@ -58,11 +55,19 @@ void nghttp3_gaptr_free(nghttp3_gaptr *gaptr) { nghttp3_ksl_free(&gaptr->gap); } -int nghttp3_gaptr_push(nghttp3_gaptr *gaptr, uint64_t offset, size_t datalen) { +int nghttp3_gaptr_push(nghttp3_gaptr *gaptr, uint64_t offset, + uint64_t datalen) { int rv; nghttp3_range k, m, l, r, q = {offset, offset + datalen}; nghttp3_ksl_it it; + if (nghttp3_ksl_len(&gaptr->gap) == 0) { + rv = gaptr_gap_init(gaptr); + if (rv != 0) { + return rv; + } + } + it = nghttp3_ksl_lower_bound_compar(&gaptr->gap, &q, nghttp3_ksl_range_exclusive_compar); @@ -74,7 +79,7 @@ int nghttp3_gaptr_push(nghttp3_gaptr *gaptr, uint64_t offset, size_t datalen) { } if (nghttp3_range_eq(&k, &m)) { - nghttp3_ksl_remove(&gaptr->gap, &it, &k); + nghttp3_ksl_remove_hint(&gaptr->gap, &it, &it, &k); continue; } nghttp3_range_cut(&l, &r, &k, &m); @@ -96,35 +101,69 @@ int nghttp3_gaptr_push(nghttp3_gaptr *gaptr, uint64_t offset, size_t datalen) { } uint64_t nghttp3_gaptr_first_gap_offset(nghttp3_gaptr *gaptr) { - nghttp3_ksl_it it = nghttp3_ksl_begin(&gaptr->gap); - nghttp3_range r = *(nghttp3_range *)nghttp3_ksl_it_key(&it); + nghttp3_ksl_it it; + nghttp3_range r; + + if (nghttp3_ksl_len(&gaptr->gap) == 0) { + return 0; + } + + it = nghttp3_ksl_begin(&gaptr->gap); + r = *(nghttp3_range *)nghttp3_ksl_it_key(&it); + return r.begin; } -nghttp3_ksl_it nghttp3_gaptr_get_first_gap_after(nghttp3_gaptr *gaptr, - uint64_t offset) { +nghttp3_range nghttp3_gaptr_get_first_gap_after(nghttp3_gaptr *gaptr, + uint64_t offset) { nghttp3_range q = {offset, offset + 1}; - return nghttp3_ksl_lower_bound_compar(&gaptr->gap, &q, - nghttp3_ksl_range_exclusive_compar); + nghttp3_ksl_it it; + + if (nghttp3_ksl_len(&gaptr->gap) == 0) { + nghttp3_range r = {0, UINT64_MAX}; + return r; + } + + it = nghttp3_ksl_lower_bound_compar(&gaptr->gap, &q, + nghttp3_ksl_range_exclusive_compar); + + assert(!nghttp3_ksl_it_end(&it)); + + return *(nghttp3_range *)nghttp3_ksl_it_key(&it); } int nghttp3_gaptr_is_pushed(nghttp3_gaptr *gaptr, uint64_t offset, - size_t datalen) { + uint64_t datalen) { nghttp3_range q = {offset, offset + datalen}; - nghttp3_ksl_it it = nghttp3_ksl_lower_bound_compar( - &gaptr->gap, &q, nghttp3_ksl_range_exclusive_compar); - nghttp3_range k = *(nghttp3_range *)nghttp3_ksl_it_key(&it); - nghttp3_range m = nghttp3_range_intersect(&q, &k); + nghttp3_ksl_it it; + nghttp3_range k; + nghttp3_range m; + + if (nghttp3_ksl_len(&gaptr->gap) == 0) { + return 0; + } + + it = nghttp3_ksl_lower_bound_compar(&gaptr->gap, &q, + nghttp3_ksl_range_exclusive_compar); + k = *(nghttp3_range *)nghttp3_ksl_it_key(&it); + m = nghttp3_range_intersect(&q, &k); + return nghttp3_range_len(&m) == 0; } void nghttp3_gaptr_drop_first_gap(nghttp3_gaptr *gaptr) { - nghttp3_ksl_it it = nghttp3_ksl_begin(&gaptr->gap); + nghttp3_ksl_it it; nghttp3_range r; + if (nghttp3_ksl_len(&gaptr->gap) == 0) { + return; + } + + it = nghttp3_ksl_begin(&gaptr->gap); + assert(!nghttp3_ksl_it_end(&it)); r = *(nghttp3_range *)nghttp3_ksl_it_key(&it); - nghttp3_ksl_remove(&gaptr->gap, NULL, &r); + nghttp3_ksl_remove_hint(&gaptr->gap, NULL, &it, &r); } diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_gaptr.h b/deps/ngtcp2/nghttp3/lib/nghttp3_gaptr.h index b1713a048bb..7c83c847c9f 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_gaptr.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_gaptr.h @@ -34,6 +34,7 @@ #include "nghttp3_mem.h" #include "nghttp3_ksl.h" +#include "nghttp3_range.h" /* * nghttp3_gaptr maintains the gap in the range [0, UINT64_MAX). @@ -48,14 +49,8 @@ typedef struct nghttp3_gaptr { /* * nghttp3_gaptr_init initializes |gaptr|. - * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: - * - * NGHTTP3_ERR_NOMEM - * Out of memory. */ -int nghttp3_gaptr_init(nghttp3_gaptr *gaptr, const nghttp3_mem *mem); +void nghttp3_gaptr_init(nghttp3_gaptr *gaptr, const nghttp3_mem *mem); /* * nghttp3_gaptr_free frees resources allocated for |gaptr|. @@ -72,7 +67,7 @@ void nghttp3_gaptr_free(nghttp3_gaptr *gaptr); * NGHTTP3_ERR_NOMEM * Out of memory */ -int nghttp3_gaptr_push(nghttp3_gaptr *gaptr, uint64_t offset, size_t datalen); +int nghttp3_gaptr_push(nghttp3_gaptr *gaptr, uint64_t offset, uint64_t datalen); /* * nghttp3_gaptr_first_gap_offset returns the offset to the first gap. @@ -81,18 +76,18 @@ int nghttp3_gaptr_push(nghttp3_gaptr *gaptr, uint64_t offset, size_t datalen); uint64_t nghttp3_gaptr_first_gap_offset(nghttp3_gaptr *gaptr); /* - * nghttp3_gaptr_get_first_gap_after returns the iterator pointing to - * the first gap which overlaps or comes after |offset|. + * nghttp3_gaptr_get_first_gap_after returns the first gap which + * overlaps or comes after |offset|. */ -nghttp3_ksl_it nghttp3_gaptr_get_first_gap_after(nghttp3_gaptr *gaptr, - uint64_t offset); +nghttp3_range nghttp3_gaptr_get_first_gap_after(nghttp3_gaptr *gaptr, + uint64_t offset); /* * nghttp3_gaptr_is_pushed returns nonzero if range [offset, offset + * datalen) is completely pushed into this object. */ int nghttp3_gaptr_is_pushed(nghttp3_gaptr *gaptr, uint64_t offset, - size_t datalen); + uint64_t datalen); /* * nghttp3_gaptr_drop_first_gap deletes the first gap entirely as if diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_http.c b/deps/ngtcp2/nghttp3/lib/nghttp3_http.c index 465c36ab2cb..5e06d8c4765 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_http.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_http.c @@ -36,12 +36,17 @@ static uint8_t downcase(uint8_t c) { return 'A' <= c && c <= 'Z' ? (uint8_t)(c - 'A' + 'a') : c; } +/* + * memieq returns 1 if the data pointed by |a| of length |n| equals to + * |b| of the same length in case-insensitive manner. The data + * pointed by |a| must not include upper cased letters (A-Z). + */ static int memieq(const void *a, const void *b, size_t n) { size_t i; const uint8_t *aa = a, *bb = b; for (i = 0; i < n; ++i) { - if (downcase(aa[i]) != downcase(bb[i])) { + if (aa[i] != downcase(bb[i])) { return 0; } } @@ -73,25 +78,12 @@ static int64_t parse_uint(const uint8_t *s, size_t len) { return n; } -static int lws(const uint8_t *s, size_t n) { - size_t i; - for (i = 0; i < n; ++i) { - if (s[i] != ' ' && s[i] != '\t') { - return 0; - } - } - return 1; -} - static int check_pseudo_header(nghttp3_http_state *http, - const nghttp3_qpack_nv *nv, int flag) { - if (http->flags & flag) { - return 0; - } - if (lws(nv->value->base, nv->value->len)) { + const nghttp3_qpack_nv *nv, uint32_t flag) { + if ((http->flags & flag) || nv->value->len == 0) { return 0; } - http->flags = (uint16_t)(http->flags | flag); + http->flags |= flag; return 1; } @@ -106,98 +98,730 @@ static int expect_response_body(nghttp3_http_state *http) { :path header field value must start with "/". This function must be called after ":method" header field was received. This function returns nonzero if path is valid.*/ -static int check_path(nghttp3_http_state *http) { +static int check_path_flags(nghttp3_http_state *http) { return (http->flags & NGHTTP3_HTTP_FLAG_SCHEME_HTTP) == 0 || ((http->flags & NGHTTP3_HTTP_FLAG_PATH_REGULAR) || ((http->flags & NGHTTP3_HTTP_FLAG_METH_OPTIONS) && (http->flags & NGHTTP3_HTTP_FLAG_PATH_ASTERISK))); } -int nghttp3_http_parse_priority(nghttp3_pri *dest, const uint8_t *value, - size_t len) { - nghttp3_pri pri = *dest; - const uint8_t *p = value, *end = value + len; +/* Generated by genchartbl.py */ +static const int SF_KEY_CHARS[] = { + 0 /* NUL */, 0 /* SOH */, 0 /* STX */, 0 /* ETX */, 0 /* EOT */, + 0 /* ENQ */, 0 /* ACK */, 0 /* BEL */, 0 /* BS */, 0 /* HT */, + 0 /* LF */, 0 /* VT */, 0 /* FF */, 0 /* CR */, 0 /* SO */, + 0 /* SI */, 0 /* DLE */, 0 /* DC1 */, 0 /* DC2 */, 0 /* DC3 */, + 0 /* DC4 */, 0 /* NAK */, 0 /* SYN */, 0 /* ETB */, 0 /* CAN */, + 0 /* EM */, 0 /* SUB */, 0 /* ESC */, 0 /* FS */, 0 /* GS */, + 0 /* RS */, 0 /* US */, 0 /* SPC */, 0 /* ! */, 0 /* " */, + 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, + 0 /* ( */, 0 /* ) */, 1 /* * */, 0 /* + */, 0 /* , */, + 1 /* - */, 1 /* . */, 0 /* / */, 1 /* 0 */, 1 /* 1 */, + 1 /* 2 */, 1 /* 3 */, 1 /* 4 */, 1 /* 5 */, 1 /* 6 */, + 1 /* 7 */, 1 /* 8 */, 1 /* 9 */, 0 /* : */, 0 /* ; */, + 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, + 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, + 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, + 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, + 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, + 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, + 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, + 1 /* _ */, 0 /* ` */, 1 /* a */, 1 /* b */, 1 /* c */, + 1 /* d */, 1 /* e */, 1 /* f */, 1 /* g */, 1 /* h */, + 1 /* i */, 1 /* j */, 1 /* k */, 1 /* l */, 1 /* m */, + 1 /* n */, 1 /* o */, 1 /* p */, 1 /* q */, 1 /* r */, + 1 /* s */, 1 /* t */, 1 /* u */, 1 /* v */, 1 /* w */, + 1 /* x */, 1 /* y */, 1 /* z */, 0 /* { */, 0 /* | */, + 0 /* } */, 0 /* ~ */, 0 /* DEL */, 0 /* 0x80 */, 0 /* 0x81 */, + 0 /* 0x82 */, 0 /* 0x83 */, 0 /* 0x84 */, 0 /* 0x85 */, 0 /* 0x86 */, + 0 /* 0x87 */, 0 /* 0x88 */, 0 /* 0x89 */, 0 /* 0x8a */, 0 /* 0x8b */, + 0 /* 0x8c */, 0 /* 0x8d */, 0 /* 0x8e */, 0 /* 0x8f */, 0 /* 0x90 */, + 0 /* 0x91 */, 0 /* 0x92 */, 0 /* 0x93 */, 0 /* 0x94 */, 0 /* 0x95 */, + 0 /* 0x96 */, 0 /* 0x97 */, 0 /* 0x98 */, 0 /* 0x99 */, 0 /* 0x9a */, + 0 /* 0x9b */, 0 /* 0x9c */, 0 /* 0x9d */, 0 /* 0x9e */, 0 /* 0x9f */, + 0 /* 0xa0 */, 0 /* 0xa1 */, 0 /* 0xa2 */, 0 /* 0xa3 */, 0 /* 0xa4 */, + 0 /* 0xa5 */, 0 /* 0xa6 */, 0 /* 0xa7 */, 0 /* 0xa8 */, 0 /* 0xa9 */, + 0 /* 0xaa */, 0 /* 0xab */, 0 /* 0xac */, 0 /* 0xad */, 0 /* 0xae */, + 0 /* 0xaf */, 0 /* 0xb0 */, 0 /* 0xb1 */, 0 /* 0xb2 */, 0 /* 0xb3 */, + 0 /* 0xb4 */, 0 /* 0xb5 */, 0 /* 0xb6 */, 0 /* 0xb7 */, 0 /* 0xb8 */, + 0 /* 0xb9 */, 0 /* 0xba */, 0 /* 0xbb */, 0 /* 0xbc */, 0 /* 0xbd */, + 0 /* 0xbe */, 0 /* 0xbf */, 0 /* 0xc0 */, 0 /* 0xc1 */, 0 /* 0xc2 */, + 0 /* 0xc3 */, 0 /* 0xc4 */, 0 /* 0xc5 */, 0 /* 0xc6 */, 0 /* 0xc7 */, + 0 /* 0xc8 */, 0 /* 0xc9 */, 0 /* 0xca */, 0 /* 0xcb */, 0 /* 0xcc */, + 0 /* 0xcd */, 0 /* 0xce */, 0 /* 0xcf */, 0 /* 0xd0 */, 0 /* 0xd1 */, + 0 /* 0xd2 */, 0 /* 0xd3 */, 0 /* 0xd4 */, 0 /* 0xd5 */, 0 /* 0xd6 */, + 0 /* 0xd7 */, 0 /* 0xd8 */, 0 /* 0xd9 */, 0 /* 0xda */, 0 /* 0xdb */, + 0 /* 0xdc */, 0 /* 0xdd */, 0 /* 0xde */, 0 /* 0xdf */, 0 /* 0xe0 */, + 0 /* 0xe1 */, 0 /* 0xe2 */, 0 /* 0xe3 */, 0 /* 0xe4 */, 0 /* 0xe5 */, + 0 /* 0xe6 */, 0 /* 0xe7 */, 0 /* 0xe8 */, 0 /* 0xe9 */, 0 /* 0xea */, + 0 /* 0xeb */, 0 /* 0xec */, 0 /* 0xed */, 0 /* 0xee */, 0 /* 0xef */, + 0 /* 0xf0 */, 0 /* 0xf1 */, 0 /* 0xf2 */, 0 /* 0xf3 */, 0 /* 0xf4 */, + 0 /* 0xf5 */, 0 /* 0xf6 */, 0 /* 0xf7 */, 0 /* 0xf8 */, 0 /* 0xf9 */, + 0 /* 0xfa */, 0 /* 0xfb */, 0 /* 0xfc */, 0 /* 0xfd */, 0 /* 0xfe */, + 0 /* 0xff */, +}; - for (;;) { - for (; p != end && (*p == ' ' || *p == '\t'); ++p) - ; +static nghttp3_ssize sf_parse_key(const uint8_t *begin, const uint8_t *end) { + const uint8_t *p = begin; - if (p == end) { - break; + if ((*p < 'a' || 'z' < *p) && *p != '*') { + return -1; + } + + for (; p != end && SF_KEY_CHARS[*p]; ++p) + ; + + return p - begin; +} + +static nghttp3_ssize sf_parse_integer_or_decimal(nghttp3_sf_value *dest, + const uint8_t *begin, + const uint8_t *end) { + const uint8_t *p = begin; + int sign = 1; + int64_t value = 0; + int type = NGHTTP3_SF_VALUE_TYPE_INTEGER; + size_t len = 0; + size_t fpos = 0; + size_t i; + + if (*p == '-') { + if (++p == end) { + return -1; } + sign = -1; + } + + if (*p < '0' || '9' < *p) { + return -1; + } + + for (; p != end; ++p) { switch (*p) { - case 'u': - ++p; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + value *= 10; + value += *p - '0'; + + if (++len > 15) { + return -1; + } - if (p + 2 > end || *p++ != '=') { - return NGHTTP3_ERR_INVALID_ARGUMENT; + break; + case '.': + if (type != NGHTTP3_SF_VALUE_TYPE_INTEGER) { + goto fin; } - if (!('0' <= *p && *p <= '7')) { - return NGHTTP3_ERR_INVALID_ARGUMENT; + if (len > 12) { + return -1; } + fpos = len; + type = NGHTTP3_SF_VALUE_TYPE_DECIMAL; - pri.urgency = (uint32_t)(*p++ - '0'); + break; + default: + goto fin; + }; + } - if (p == end) { - goto fin; +fin: + switch (type) { + case NGHTTP3_SF_VALUE_TYPE_INTEGER: + if (dest) { + dest->type = (uint8_t)type; + dest->i = value * sign; + } + + return p - begin; + case NGHTTP3_SF_VALUE_TYPE_DECIMAL: + if (fpos == len || len - fpos > 3) { + return -1; + } + + if (dest) { + dest->type = (uint8_t)type; + dest->d = (double)value; + for (i = len - fpos; i > 0; --i) { + dest->d /= (double)10; + } + dest->d *= sign; + } + + return p - begin; + default: + assert(0); + abort(); + } +} + +/* Generated by genchartbl.py */ +static const int SF_DQUOTE_CHARS[] = { + 0 /* NUL */, 0 /* SOH */, 0 /* STX */, 0 /* ETX */, 0 /* EOT */, + 0 /* ENQ */, 0 /* ACK */, 0 /* BEL */, 0 /* BS */, 0 /* HT */, + 0 /* LF */, 0 /* VT */, 0 /* FF */, 0 /* CR */, 0 /* SO */, + 0 /* SI */, 0 /* DLE */, 0 /* DC1 */, 0 /* DC2 */, 0 /* DC3 */, + 0 /* DC4 */, 0 /* NAK */, 0 /* SYN */, 0 /* ETB */, 0 /* CAN */, + 0 /* EM */, 0 /* SUB */, 0 /* ESC */, 0 /* FS */, 0 /* GS */, + 0 /* RS */, 0 /* US */, 1 /* SPC */, 1 /* ! */, 0 /* " */, + 1 /* # */, 1 /* $ */, 1 /* % */, 1 /* & */, 1 /* ' */, + 1 /* ( */, 1 /* ) */, 1 /* * */, 1 /* + */, 1 /* , */, + 1 /* - */, 1 /* . */, 1 /* / */, 1 /* 0 */, 1 /* 1 */, + 1 /* 2 */, 1 /* 3 */, 1 /* 4 */, 1 /* 5 */, 1 /* 6 */, + 1 /* 7 */, 1 /* 8 */, 1 /* 9 */, 1 /* : */, 1 /* ; */, + 1 /* < */, 1 /* = */, 1 /* > */, 1 /* ? */, 1 /* @ */, + 1 /* A */, 1 /* B */, 1 /* C */, 1 /* D */, 1 /* E */, + 1 /* F */, 1 /* G */, 1 /* H */, 1 /* I */, 1 /* J */, + 1 /* K */, 1 /* L */, 1 /* M */, 1 /* N */, 1 /* O */, + 1 /* P */, 1 /* Q */, 1 /* R */, 1 /* S */, 1 /* T */, + 1 /* U */, 1 /* V */, 1 /* W */, 1 /* X */, 1 /* Y */, + 1 /* Z */, 1 /* [ */, 0 /* \ */, 1 /* ] */, 1 /* ^ */, + 1 /* _ */, 1 /* ` */, 1 /* a */, 1 /* b */, 1 /* c */, + 1 /* d */, 1 /* e */, 1 /* f */, 1 /* g */, 1 /* h */, + 1 /* i */, 1 /* j */, 1 /* k */, 1 /* l */, 1 /* m */, + 1 /* n */, 1 /* o */, 1 /* p */, 1 /* q */, 1 /* r */, + 1 /* s */, 1 /* t */, 1 /* u */, 1 /* v */, 1 /* w */, + 1 /* x */, 1 /* y */, 1 /* z */, 1 /* { */, 1 /* | */, + 1 /* } */, 1 /* ~ */, 0 /* DEL */, 0 /* 0x80 */, 0 /* 0x81 */, + 0 /* 0x82 */, 0 /* 0x83 */, 0 /* 0x84 */, 0 /* 0x85 */, 0 /* 0x86 */, + 0 /* 0x87 */, 0 /* 0x88 */, 0 /* 0x89 */, 0 /* 0x8a */, 0 /* 0x8b */, + 0 /* 0x8c */, 0 /* 0x8d */, 0 /* 0x8e */, 0 /* 0x8f */, 0 /* 0x90 */, + 0 /* 0x91 */, 0 /* 0x92 */, 0 /* 0x93 */, 0 /* 0x94 */, 0 /* 0x95 */, + 0 /* 0x96 */, 0 /* 0x97 */, 0 /* 0x98 */, 0 /* 0x99 */, 0 /* 0x9a */, + 0 /* 0x9b */, 0 /* 0x9c */, 0 /* 0x9d */, 0 /* 0x9e */, 0 /* 0x9f */, + 0 /* 0xa0 */, 0 /* 0xa1 */, 0 /* 0xa2 */, 0 /* 0xa3 */, 0 /* 0xa4 */, + 0 /* 0xa5 */, 0 /* 0xa6 */, 0 /* 0xa7 */, 0 /* 0xa8 */, 0 /* 0xa9 */, + 0 /* 0xaa */, 0 /* 0xab */, 0 /* 0xac */, 0 /* 0xad */, 0 /* 0xae */, + 0 /* 0xaf */, 0 /* 0xb0 */, 0 /* 0xb1 */, 0 /* 0xb2 */, 0 /* 0xb3 */, + 0 /* 0xb4 */, 0 /* 0xb5 */, 0 /* 0xb6 */, 0 /* 0xb7 */, 0 /* 0xb8 */, + 0 /* 0xb9 */, 0 /* 0xba */, 0 /* 0xbb */, 0 /* 0xbc */, 0 /* 0xbd */, + 0 /* 0xbe */, 0 /* 0xbf */, 0 /* 0xc0 */, 0 /* 0xc1 */, 0 /* 0xc2 */, + 0 /* 0xc3 */, 0 /* 0xc4 */, 0 /* 0xc5 */, 0 /* 0xc6 */, 0 /* 0xc7 */, + 0 /* 0xc8 */, 0 /* 0xc9 */, 0 /* 0xca */, 0 /* 0xcb */, 0 /* 0xcc */, + 0 /* 0xcd */, 0 /* 0xce */, 0 /* 0xcf */, 0 /* 0xd0 */, 0 /* 0xd1 */, + 0 /* 0xd2 */, 0 /* 0xd3 */, 0 /* 0xd4 */, 0 /* 0xd5 */, 0 /* 0xd6 */, + 0 /* 0xd7 */, 0 /* 0xd8 */, 0 /* 0xd9 */, 0 /* 0xda */, 0 /* 0xdb */, + 0 /* 0xdc */, 0 /* 0xdd */, 0 /* 0xde */, 0 /* 0xdf */, 0 /* 0xe0 */, + 0 /* 0xe1 */, 0 /* 0xe2 */, 0 /* 0xe3 */, 0 /* 0xe4 */, 0 /* 0xe5 */, + 0 /* 0xe6 */, 0 /* 0xe7 */, 0 /* 0xe8 */, 0 /* 0xe9 */, 0 /* 0xea */, + 0 /* 0xeb */, 0 /* 0xec */, 0 /* 0xed */, 0 /* 0xee */, 0 /* 0xef */, + 0 /* 0xf0 */, 0 /* 0xf1 */, 0 /* 0xf2 */, 0 /* 0xf3 */, 0 /* 0xf4 */, + 0 /* 0xf5 */, 0 /* 0xf6 */, 0 /* 0xf7 */, 0 /* 0xf8 */, 0 /* 0xf9 */, + 0 /* 0xfa */, 0 /* 0xfb */, 0 /* 0xfc */, 0 /* 0xfd */, 0 /* 0xfe */, + 0 /* 0xff */, +}; + +static nghttp3_ssize sf_parse_string(nghttp3_sf_value *dest, + const uint8_t *begin, const uint8_t *end) { + const uint8_t *p = begin; + + if (*p++ != '"') { + return -1; + } + + for (; p != end; ++p) { + switch (*p) { + case '\\': + if (++p == end) { + return -1; } - if (*p++ != ',') { - return NGHTTP3_ERR_INVALID_ARGUMENT; + switch (*p) { + case '"': + case '\\': + break; + default: + return -1; } break; - case 'i': + case '"': + if (dest) { + dest->type = NGHTTP3_SF_VALUE_TYPE_STRING; + dest->s.base = begin + 1; + dest->s.len = (size_t)(p - dest->s.base); + } + ++p; - if (p == end) { - pri.inc = 1; - goto fin; + return p - begin; + default: + if (!SF_DQUOTE_CHARS[*p]) { + return -1; } + } + } - if (*p == ',') { - pri.inc = 1; - ++p; - break; + return -1; +} + +/* Generated by genchartbl.py */ +static const int SF_TOKEN_CHARS[] = { + 0 /* NUL */, 0 /* SOH */, 0 /* STX */, 0 /* ETX */, 0 /* EOT */, + 0 /* ENQ */, 0 /* ACK */, 0 /* BEL */, 0 /* BS */, 0 /* HT */, + 0 /* LF */, 0 /* VT */, 0 /* FF */, 0 /* CR */, 0 /* SO */, + 0 /* SI */, 0 /* DLE */, 0 /* DC1 */, 0 /* DC2 */, 0 /* DC3 */, + 0 /* DC4 */, 0 /* NAK */, 0 /* SYN */, 0 /* ETB */, 0 /* CAN */, + 0 /* EM */, 0 /* SUB */, 0 /* ESC */, 0 /* FS */, 0 /* GS */, + 0 /* RS */, 0 /* US */, 0 /* SPC */, 1 /* ! */, 0 /* " */, + 1 /* # */, 1 /* $ */, 1 /* % */, 1 /* & */, 1 /* ' */, + 0 /* ( */, 0 /* ) */, 1 /* * */, 1 /* + */, 0 /* , */, + 1 /* - */, 1 /* . */, 1 /* / */, 1 /* 0 */, 1 /* 1 */, + 1 /* 2 */, 1 /* 3 */, 1 /* 4 */, 1 /* 5 */, 1 /* 6 */, + 1 /* 7 */, 1 /* 8 */, 1 /* 9 */, 1 /* : */, 0 /* ; */, + 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, + 1 /* A */, 1 /* B */, 1 /* C */, 1 /* D */, 1 /* E */, + 1 /* F */, 1 /* G */, 1 /* H */, 1 /* I */, 1 /* J */, + 1 /* K */, 1 /* L */, 1 /* M */, 1 /* N */, 1 /* O */, + 1 /* P */, 1 /* Q */, 1 /* R */, 1 /* S */, 1 /* T */, + 1 /* U */, 1 /* V */, 1 /* W */, 1 /* X */, 1 /* Y */, + 1 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 1 /* ^ */, + 1 /* _ */, 1 /* ` */, 1 /* a */, 1 /* b */, 1 /* c */, + 1 /* d */, 1 /* e */, 1 /* f */, 1 /* g */, 1 /* h */, + 1 /* i */, 1 /* j */, 1 /* k */, 1 /* l */, 1 /* m */, + 1 /* n */, 1 /* o */, 1 /* p */, 1 /* q */, 1 /* r */, + 1 /* s */, 1 /* t */, 1 /* u */, 1 /* v */, 1 /* w */, + 1 /* x */, 1 /* y */, 1 /* z */, 0 /* { */, 1 /* | */, + 0 /* } */, 1 /* ~ */, 0 /* DEL */, 0 /* 0x80 */, 0 /* 0x81 */, + 0 /* 0x82 */, 0 /* 0x83 */, 0 /* 0x84 */, 0 /* 0x85 */, 0 /* 0x86 */, + 0 /* 0x87 */, 0 /* 0x88 */, 0 /* 0x89 */, 0 /* 0x8a */, 0 /* 0x8b */, + 0 /* 0x8c */, 0 /* 0x8d */, 0 /* 0x8e */, 0 /* 0x8f */, 0 /* 0x90 */, + 0 /* 0x91 */, 0 /* 0x92 */, 0 /* 0x93 */, 0 /* 0x94 */, 0 /* 0x95 */, + 0 /* 0x96 */, 0 /* 0x97 */, 0 /* 0x98 */, 0 /* 0x99 */, 0 /* 0x9a */, + 0 /* 0x9b */, 0 /* 0x9c */, 0 /* 0x9d */, 0 /* 0x9e */, 0 /* 0x9f */, + 0 /* 0xa0 */, 0 /* 0xa1 */, 0 /* 0xa2 */, 0 /* 0xa3 */, 0 /* 0xa4 */, + 0 /* 0xa5 */, 0 /* 0xa6 */, 0 /* 0xa7 */, 0 /* 0xa8 */, 0 /* 0xa9 */, + 0 /* 0xaa */, 0 /* 0xab */, 0 /* 0xac */, 0 /* 0xad */, 0 /* 0xae */, + 0 /* 0xaf */, 0 /* 0xb0 */, 0 /* 0xb1 */, 0 /* 0xb2 */, 0 /* 0xb3 */, + 0 /* 0xb4 */, 0 /* 0xb5 */, 0 /* 0xb6 */, 0 /* 0xb7 */, 0 /* 0xb8 */, + 0 /* 0xb9 */, 0 /* 0xba */, 0 /* 0xbb */, 0 /* 0xbc */, 0 /* 0xbd */, + 0 /* 0xbe */, 0 /* 0xbf */, 0 /* 0xc0 */, 0 /* 0xc1 */, 0 /* 0xc2 */, + 0 /* 0xc3 */, 0 /* 0xc4 */, 0 /* 0xc5 */, 0 /* 0xc6 */, 0 /* 0xc7 */, + 0 /* 0xc8 */, 0 /* 0xc9 */, 0 /* 0xca */, 0 /* 0xcb */, 0 /* 0xcc */, + 0 /* 0xcd */, 0 /* 0xce */, 0 /* 0xcf */, 0 /* 0xd0 */, 0 /* 0xd1 */, + 0 /* 0xd2 */, 0 /* 0xd3 */, 0 /* 0xd4 */, 0 /* 0xd5 */, 0 /* 0xd6 */, + 0 /* 0xd7 */, 0 /* 0xd8 */, 0 /* 0xd9 */, 0 /* 0xda */, 0 /* 0xdb */, + 0 /* 0xdc */, 0 /* 0xdd */, 0 /* 0xde */, 0 /* 0xdf */, 0 /* 0xe0 */, + 0 /* 0xe1 */, 0 /* 0xe2 */, 0 /* 0xe3 */, 0 /* 0xe4 */, 0 /* 0xe5 */, + 0 /* 0xe6 */, 0 /* 0xe7 */, 0 /* 0xe8 */, 0 /* 0xe9 */, 0 /* 0xea */, + 0 /* 0xeb */, 0 /* 0xec */, 0 /* 0xed */, 0 /* 0xee */, 0 /* 0xef */, + 0 /* 0xf0 */, 0 /* 0xf1 */, 0 /* 0xf2 */, 0 /* 0xf3 */, 0 /* 0xf4 */, + 0 /* 0xf5 */, 0 /* 0xf6 */, 0 /* 0xf7 */, 0 /* 0xf8 */, 0 /* 0xf9 */, + 0 /* 0xfa */, 0 /* 0xfb */, 0 /* 0xfc */, 0 /* 0xfd */, 0 /* 0xfe */, + 0 /* 0xff */, +}; + +static nghttp3_ssize sf_parse_token(nghttp3_sf_value *dest, + const uint8_t *begin, const uint8_t *end) { + const uint8_t *p = begin; + + if ((*p < 'A' || 'Z' < *p) && (*p < 'a' || 'z' < *p) && *p != '*') { + return -1; + } + + for (; p != end && SF_TOKEN_CHARS[*p]; ++p) + ; + + if (dest) { + dest->type = NGHTTP3_SF_VALUE_TYPE_TOKEN; + dest->s.base = begin; + dest->s.len = (size_t)(p - begin); + } + + return p - begin; +} + +/* Generated by genchartbl.py */ +static const int SF_BYTESEQ_CHARS[] = { + 0 /* NUL */, 0 /* SOH */, 0 /* STX */, 0 /* ETX */, 0 /* EOT */, + 0 /* ENQ */, 0 /* ACK */, 0 /* BEL */, 0 /* BS */, 0 /* HT */, + 0 /* LF */, 0 /* VT */, 0 /* FF */, 0 /* CR */, 0 /* SO */, + 0 /* SI */, 0 /* DLE */, 0 /* DC1 */, 0 /* DC2 */, 0 /* DC3 */, + 0 /* DC4 */, 0 /* NAK */, 0 /* SYN */, 0 /* ETB */, 0 /* CAN */, + 0 /* EM */, 0 /* SUB */, 0 /* ESC */, 0 /* FS */, 0 /* GS */, + 0 /* RS */, 0 /* US */, 0 /* SPC */, 0 /* ! */, 0 /* " */, + 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, + 0 /* ( */, 0 /* ) */, 0 /* * */, 1 /* + */, 0 /* , */, + 0 /* - */, 0 /* . */, 1 /* / */, 1 /* 0 */, 1 /* 1 */, + 1 /* 2 */, 1 /* 3 */, 1 /* 4 */, 1 /* 5 */, 1 /* 6 */, + 1 /* 7 */, 1 /* 8 */, 1 /* 9 */, 0 /* : */, 0 /* ; */, + 0 /* < */, 1 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, + 1 /* A */, 1 /* B */, 1 /* C */, 1 /* D */, 1 /* E */, + 1 /* F */, 1 /* G */, 1 /* H */, 1 /* I */, 1 /* J */, + 1 /* K */, 1 /* L */, 1 /* M */, 1 /* N */, 1 /* O */, + 1 /* P */, 1 /* Q */, 1 /* R */, 1 /* S */, 1 /* T */, + 1 /* U */, 1 /* V */, 1 /* W */, 1 /* X */, 1 /* Y */, + 1 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, + 0 /* _ */, 0 /* ` */, 1 /* a */, 1 /* b */, 1 /* c */, + 1 /* d */, 1 /* e */, 1 /* f */, 1 /* g */, 1 /* h */, + 1 /* i */, 1 /* j */, 1 /* k */, 1 /* l */, 1 /* m */, + 1 /* n */, 1 /* o */, 1 /* p */, 1 /* q */, 1 /* r */, + 1 /* s */, 1 /* t */, 1 /* u */, 1 /* v */, 1 /* w */, + 1 /* x */, 1 /* y */, 1 /* z */, 0 /* { */, 0 /* | */, + 0 /* } */, 0 /* ~ */, 0 /* DEL */, 0 /* 0x80 */, 0 /* 0x81 */, + 0 /* 0x82 */, 0 /* 0x83 */, 0 /* 0x84 */, 0 /* 0x85 */, 0 /* 0x86 */, + 0 /* 0x87 */, 0 /* 0x88 */, 0 /* 0x89 */, 0 /* 0x8a */, 0 /* 0x8b */, + 0 /* 0x8c */, 0 /* 0x8d */, 0 /* 0x8e */, 0 /* 0x8f */, 0 /* 0x90 */, + 0 /* 0x91 */, 0 /* 0x92 */, 0 /* 0x93 */, 0 /* 0x94 */, 0 /* 0x95 */, + 0 /* 0x96 */, 0 /* 0x97 */, 0 /* 0x98 */, 0 /* 0x99 */, 0 /* 0x9a */, + 0 /* 0x9b */, 0 /* 0x9c */, 0 /* 0x9d */, 0 /* 0x9e */, 0 /* 0x9f */, + 0 /* 0xa0 */, 0 /* 0xa1 */, 0 /* 0xa2 */, 0 /* 0xa3 */, 0 /* 0xa4 */, + 0 /* 0xa5 */, 0 /* 0xa6 */, 0 /* 0xa7 */, 0 /* 0xa8 */, 0 /* 0xa9 */, + 0 /* 0xaa */, 0 /* 0xab */, 0 /* 0xac */, 0 /* 0xad */, 0 /* 0xae */, + 0 /* 0xaf */, 0 /* 0xb0 */, 0 /* 0xb1 */, 0 /* 0xb2 */, 0 /* 0xb3 */, + 0 /* 0xb4 */, 0 /* 0xb5 */, 0 /* 0xb6 */, 0 /* 0xb7 */, 0 /* 0xb8 */, + 0 /* 0xb9 */, 0 /* 0xba */, 0 /* 0xbb */, 0 /* 0xbc */, 0 /* 0xbd */, + 0 /* 0xbe */, 0 /* 0xbf */, 0 /* 0xc0 */, 0 /* 0xc1 */, 0 /* 0xc2 */, + 0 /* 0xc3 */, 0 /* 0xc4 */, 0 /* 0xc5 */, 0 /* 0xc6 */, 0 /* 0xc7 */, + 0 /* 0xc8 */, 0 /* 0xc9 */, 0 /* 0xca */, 0 /* 0xcb */, 0 /* 0xcc */, + 0 /* 0xcd */, 0 /* 0xce */, 0 /* 0xcf */, 0 /* 0xd0 */, 0 /* 0xd1 */, + 0 /* 0xd2 */, 0 /* 0xd3 */, 0 /* 0xd4 */, 0 /* 0xd5 */, 0 /* 0xd6 */, + 0 /* 0xd7 */, 0 /* 0xd8 */, 0 /* 0xd9 */, 0 /* 0xda */, 0 /* 0xdb */, + 0 /* 0xdc */, 0 /* 0xdd */, 0 /* 0xde */, 0 /* 0xdf */, 0 /* 0xe0 */, + 0 /* 0xe1 */, 0 /* 0xe2 */, 0 /* 0xe3 */, 0 /* 0xe4 */, 0 /* 0xe5 */, + 0 /* 0xe6 */, 0 /* 0xe7 */, 0 /* 0xe8 */, 0 /* 0xe9 */, 0 /* 0xea */, + 0 /* 0xeb */, 0 /* 0xec */, 0 /* 0xed */, 0 /* 0xee */, 0 /* 0xef */, + 0 /* 0xf0 */, 0 /* 0xf1 */, 0 /* 0xf2 */, 0 /* 0xf3 */, 0 /* 0xf4 */, + 0 /* 0xf5 */, 0 /* 0xf6 */, 0 /* 0xf7 */, 0 /* 0xf8 */, 0 /* 0xf9 */, + 0 /* 0xfa */, 0 /* 0xfb */, 0 /* 0xfc */, 0 /* 0xfd */, 0 /* 0xfe */, + 0 /* 0xff */, +}; + +static nghttp3_ssize sf_parse_byteseq(nghttp3_sf_value *dest, + const uint8_t *begin, + const uint8_t *end) { + const uint8_t *p = begin; + + if (*p++ != ':') { + return -1; + } + + for (; p != end; ++p) { + switch (*p) { + case ':': + if (dest) { + dest->type = NGHTTP3_SF_VALUE_TYPE_BYTESEQ; + dest->s.base = begin + 1; + dest->s.len = (size_t)(p - dest->s.base); } - if (p + 3 > end || *p != '=' || *(p + 1) != '?' || - (*(p + 2) != '0' && *(p + 2) != '1')) { - return NGHTTP3_ERR_INVALID_ARGUMENT; + ++p; + + return p - begin; + default: + if (!SF_BYTESEQ_CHARS[*p]) { + return -1; } + } + } - pri.inc = *(p + 2) == '1'; + return -1; +} - p += 3; +static nghttp3_ssize sf_parse_boolean(nghttp3_sf_value *dest, + const uint8_t *begin, + const uint8_t *end) { + const uint8_t *p = begin; + int b; - if (p == end) { - goto fin; + if (*p++ != '?') { + return -1; + } + + if (p == end) { + return -1; + } + + switch (*p++) { + case '0': + b = 0; + break; + case '1': + b = 1; + break; + default: + return -1; + } + + if (dest) { + dest->type = NGHTTP3_SF_VALUE_TYPE_BOOLEAN; + dest->b = b; + } + + return p - begin; +} + +static nghttp3_ssize sf_parse_bare_item(nghttp3_sf_value *dest, + const uint8_t *begin, + const uint8_t *end) { + switch (*begin) { + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return sf_parse_integer_or_decimal(dest, begin, end); + case '"': + return sf_parse_string(dest, begin, end); + case '*': + return sf_parse_token(dest, begin, end); + case ':': + return sf_parse_byteseq(dest, begin, end); + case '?': + return sf_parse_boolean(dest, begin, end); + default: + if (('A' <= *begin && *begin <= 'Z') || ('a' <= *begin && *begin <= 'z')) { + return sf_parse_token(dest, begin, end); + } + return -1; + } +} + +#define sf_discard_sp_end_err(BEGIN, END, ERR) \ + for (;; ++(BEGIN)) { \ + if ((BEGIN) == (END)) { \ + return (ERR); \ + } \ + if (*(BEGIN) != ' ') { \ + break; \ + } \ + } + +static nghttp3_ssize sf_parse_params(const uint8_t *begin, const uint8_t *end) { + const uint8_t *p = begin; + nghttp3_ssize slen; + + for (; p != end && *p == ';';) { + ++p; + + sf_discard_sp_end_err(p, end, -1); + + slen = sf_parse_key(p, end); + if (slen < 0) { + return -1; + } + + p += slen; + + if (p == end || *p != '=') { + /* Boolean true */ + } else if (++p == end) { + return -1; + } else { + slen = sf_parse_bare_item(NULL, p, end); + if (slen < 0) { + return -1; } - if (*p++ != ',') { - return NGHTTP3_ERR_INVALID_ARGUMENT; + p += slen; + } + } + + return p - begin; +} + +static nghttp3_ssize sf_parse_item(nghttp3_sf_value *dest, const uint8_t *begin, + const uint8_t *end) { + const uint8_t *p = begin; + nghttp3_ssize slen; + + slen = sf_parse_bare_item(dest, p, end); + if (slen < 0) { + return -1; + } + + p += slen; + + slen = sf_parse_params(p, end); + if (slen < 0) { + return -1; + } + + p += slen; + + return p - begin; +} + +nghttp3_ssize nghttp3_sf_parse_item(nghttp3_sf_value *dest, + const uint8_t *begin, const uint8_t *end) { + return sf_parse_item(dest, begin, end); +} + +static nghttp3_ssize sf_parse_inner_list(nghttp3_sf_value *dest, + const uint8_t *begin, + const uint8_t *end) { + const uint8_t *p = begin; + nghttp3_ssize slen; + + if (*p++ != '(') { + return -1; + } + + for (;;) { + sf_discard_sp_end_err(p, end, -1); + + if (*p == ')') { + ++p; + + slen = sf_parse_params(p, end); + if (slen < 0) { + return -1; } - break; - default: + p += slen; + + if (dest) { + dest->type = NGHTTP3_SF_VALUE_TYPE_INNER_LIST; + } + + return p - begin; + } + + slen = sf_parse_item(NULL, p, end); + if (slen < 0) { + return -1; + } + + p += slen; + + if (p == end || (*p != ' ' && *p != ')')) { + return -1; + } + } +} + +nghttp3_ssize nghttp3_sf_parse_inner_list(nghttp3_sf_value *dest, + const uint8_t *begin, + const uint8_t *end) { + return sf_parse_inner_list(dest, begin, end); +} + +static nghttp3_ssize sf_parse_item_or_inner_list(nghttp3_sf_value *dest, + const uint8_t *begin, + const uint8_t *end) { + if (*begin == '(') { + return sf_parse_inner_list(dest, begin, end); + } + + return sf_parse_item(dest, begin, end); +} + +#define sf_discard_ows(BEGIN, END) \ + for (;; ++(BEGIN)) { \ + if ((BEGIN) == (END)) { \ + goto fin; \ + } \ + if (*(BEGIN) != ' ' && *(BEGIN) != '\t') { \ + break; \ + } \ + } + +#define sf_discard_ows_end_err(BEGIN, END, ERR) \ + for (;; ++(BEGIN)) { \ + if ((BEGIN) == (END)) { \ + return (ERR); \ + } \ + if (*(BEGIN) != ' ' && *(BEGIN) != '\t') { \ + break; \ + } \ + } + +int nghttp3_http_parse_priority(nghttp3_pri *dest, const uint8_t *value, + size_t valuelen) { + const uint8_t *p = value, *end = value + valuelen; + nghttp3_ssize slen; + nghttp3_sf_value val; + nghttp3_pri pri = *dest; + const uint8_t *key; + size_t keylen; + + for (; p != end && *p == ' '; ++p) + ; + + for (; p != end;) { + slen = sf_parse_key(p, end); + if (slen < 0) { + return NGHTTP3_ERR_INVALID_ARGUMENT; + } + + key = p; + keylen = (size_t)slen; + + p += slen; + + if (p == end || *p != '=') { + /* Boolean true */ + val.type = NGHTTP3_SF_VALUE_TYPE_BOOLEAN; + val.b = 1; + + slen = sf_parse_params(p, end); + if (slen < 0) { + return NGHTTP3_ERR_INVALID_ARGUMENT; + } + } else if (++p == end) { return NGHTTP3_ERR_INVALID_ARGUMENT; + } else { + slen = sf_parse_item_or_inner_list(&val, p, end); + if (slen < 0) { + return NGHTTP3_ERR_INVALID_ARGUMENT; + } + } + + p += slen; + + if (keylen == 1) { + switch (key[0]) { + case 'i': + if (val.type != NGHTTP3_SF_VALUE_TYPE_BOOLEAN) { + return NGHTTP3_ERR_INVALID_ARGUMENT; + } + + pri.inc = val.b; + + break; + case 'u': + if (val.type != NGHTTP3_SF_VALUE_TYPE_INTEGER || + val.i < NGHTTP3_URGENCY_HIGH || NGHTTP3_URGENCY_LOW < val.i) { + return NGHTTP3_ERR_INVALID_ARGUMENT; + } + + pri.urgency = (uint32_t)val.i; + + break; + } } - if (p == end) { + sf_discard_ows(p, end); + + if (*p++ != ',') { return NGHTTP3_ERR_INVALID_ARGUMENT; } + + sf_discard_ows_end_err(p, end, NGHTTP3_ERR_INVALID_ARGUMENT); } fin: - *dest = pri; return 0; } -static int http_request_on_header(nghttp3_http_state *http, int64_t frame_type, +static int http_request_on_header(nghttp3_http_state *http, nghttp3_qpack_nv *nv, int trailers, int connect_protocol) { nghttp3_pri pri; @@ -229,10 +853,6 @@ static int http_request_on_header(nghttp3_http_state *http, int64_t frame_type, switch (nv->value->base[6]) { case 'T': if (lstreq("CONNECT", nv->value->base, nv->value->len)) { - if (frame_type == NGHTTP3_FRAME_PUSH_PROMISE) { - /* we won't allow CONNECT for push */ - return NGHTTP3_ERR_MALFORMED_HTTP_HEADER; - } http->flags |= NGHTTP3_HTTP_FLAG_METH_CONNECT; } break; @@ -259,8 +879,10 @@ static int http_request_on_header(nghttp3_http_state *http, int64_t frame_type, if (!check_pseudo_header(http, nv, NGHTTP3_HTTP_FLAG__SCHEME)) { return NGHTTP3_ERR_MALFORMED_HTTP_HEADER; } - if ((nv->value->len == 4 && memieq("http", nv->value->base, 4)) || - (nv->value->len == 5 && memieq("https", nv->value->base, 5))) { + /* scheme is case-insensitive: + https://datatracker.ietf.org/doc/html/rfc3986#section-3.1 */ + if (lstrieq("http", nv->value->base, nv->value->len) || + lstrieq("https", nv->value->base, nv->value->len)) { http->flags |= NGHTTP3_HTTP_FLAG_SCHEME_HTTP; } break; @@ -308,11 +930,17 @@ static int http_request_on_header(nghttp3_http_state *http, int64_t frame_type, } break; case NGHTTP3_QPACK_TOKEN_PRIORITY: - pri.urgency = nghttp3_pri_uint8_urgency(http->pri); - pri.inc = nghttp3_pri_uint8_inc(http->pri); - if (nghttp3_http_parse_priority(&pri, nv->value->base, nv->value->len) == - 0) { - http->pri = nghttp3_pri_to_uint8(&pri); + if (!trailers && !(http->flags & NGHTTP3_HTTP_FLAG_BAD_PRIORITY)) { + pri.urgency = nghttp3_pri_uint8_urgency(http->pri); + pri.inc = nghttp3_pri_uint8_inc(http->pri); + if (nghttp3_http_parse_priority(&pri, nv->value->base, nv->value->len) == + 0) { + http->pri = nghttp3_pri_to_uint8(&pri); + http->flags |= NGHTTP3_HTTP_FLAG_PRIORITY; + } else { + http->flags &= ~NGHTTP3_HTTP_FLAG_PRIORITY; + http->flags |= NGHTTP3_HTTP_FLAG_BAD_PRIORITY; + } } break; default: @@ -509,8 +1137,167 @@ static int check_scheme(const uint8_t *value, size_t len) { return 1; } -int nghttp3_http_on_header(nghttp3_http_state *http, int64_t frame_type, - nghttp3_qpack_nv *nv, int request, int trailers) { +/* Generated by genmethodchartbl.py */ +static char VALID_METHOD_CHARS[] = { + 0 /* NUL */, 0 /* SOH */, 0 /* STX */, 0 /* ETX */, + 0 /* EOT */, 0 /* ENQ */, 0 /* ACK */, 0 /* BEL */, + 0 /* BS */, 0 /* HT */, 0 /* LF */, 0 /* VT */, + 0 /* FF */, 0 /* CR */, 0 /* SO */, 0 /* SI */, + 0 /* DLE */, 0 /* DC1 */, 0 /* DC2 */, 0 /* DC3 */, + 0 /* DC4 */, 0 /* NAK */, 0 /* SYN */, 0 /* ETB */, + 0 /* CAN */, 0 /* EM */, 0 /* SUB */, 0 /* ESC */, + 0 /* FS */, 0 /* GS */, 0 /* RS */, 0 /* US */, + 0 /* SPC */, 1 /* ! */, 0 /* " */, 1 /* # */, + 1 /* $ */, 1 /* % */, 1 /* & */, 1 /* ' */, + 0 /* ( */, 0 /* ) */, 1 /* * */, 1 /* + */, + 0 /* , */, 1 /* - */, 1 /* . */, 0 /* / */, + 1 /* 0 */, 1 /* 1 */, 1 /* 2 */, 1 /* 3 */, + 1 /* 4 */, 1 /* 5 */, 1 /* 6 */, 1 /* 7 */, + 1 /* 8 */, 1 /* 9 */, 0 /* : */, 0 /* ; */, + 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, + 0 /* @ */, 1 /* A */, 1 /* B */, 1 /* C */, + 1 /* D */, 1 /* E */, 1 /* F */, 1 /* G */, + 1 /* H */, 1 /* I */, 1 /* J */, 1 /* K */, + 1 /* L */, 1 /* M */, 1 /* N */, 1 /* O */, + 1 /* P */, 1 /* Q */, 1 /* R */, 1 /* S */, + 1 /* T */, 1 /* U */, 1 /* V */, 1 /* W */, + 1 /* X */, 1 /* Y */, 1 /* Z */, 0 /* [ */, + 0 /* \ */, 0 /* ] */, 1 /* ^ */, 1 /* _ */, + 1 /* ` */, 1 /* a */, 1 /* b */, 1 /* c */, + 1 /* d */, 1 /* e */, 1 /* f */, 1 /* g */, + 1 /* h */, 1 /* i */, 1 /* j */, 1 /* k */, + 1 /* l */, 1 /* m */, 1 /* n */, 1 /* o */, + 1 /* p */, 1 /* q */, 1 /* r */, 1 /* s */, + 1 /* t */, 1 /* u */, 1 /* v */, 1 /* w */, + 1 /* x */, 1 /* y */, 1 /* z */, 0 /* { */, + 1 /* | */, 0 /* } */, 1 /* ~ */, 0 /* DEL */, + 0 /* 0x80 */, 0 /* 0x81 */, 0 /* 0x82 */, 0 /* 0x83 */, + 0 /* 0x84 */, 0 /* 0x85 */, 0 /* 0x86 */, 0 /* 0x87 */, + 0 /* 0x88 */, 0 /* 0x89 */, 0 /* 0x8a */, 0 /* 0x8b */, + 0 /* 0x8c */, 0 /* 0x8d */, 0 /* 0x8e */, 0 /* 0x8f */, + 0 /* 0x90 */, 0 /* 0x91 */, 0 /* 0x92 */, 0 /* 0x93 */, + 0 /* 0x94 */, 0 /* 0x95 */, 0 /* 0x96 */, 0 /* 0x97 */, + 0 /* 0x98 */, 0 /* 0x99 */, 0 /* 0x9a */, 0 /* 0x9b */, + 0 /* 0x9c */, 0 /* 0x9d */, 0 /* 0x9e */, 0 /* 0x9f */, + 0 /* 0xa0 */, 0 /* 0xa1 */, 0 /* 0xa2 */, 0 /* 0xa3 */, + 0 /* 0xa4 */, 0 /* 0xa5 */, 0 /* 0xa6 */, 0 /* 0xa7 */, + 0 /* 0xa8 */, 0 /* 0xa9 */, 0 /* 0xaa */, 0 /* 0xab */, + 0 /* 0xac */, 0 /* 0xad */, 0 /* 0xae */, 0 /* 0xaf */, + 0 /* 0xb0 */, 0 /* 0xb1 */, 0 /* 0xb2 */, 0 /* 0xb3 */, + 0 /* 0xb4 */, 0 /* 0xb5 */, 0 /* 0xb6 */, 0 /* 0xb7 */, + 0 /* 0xb8 */, 0 /* 0xb9 */, 0 /* 0xba */, 0 /* 0xbb */, + 0 /* 0xbc */, 0 /* 0xbd */, 0 /* 0xbe */, 0 /* 0xbf */, + 0 /* 0xc0 */, 0 /* 0xc1 */, 0 /* 0xc2 */, 0 /* 0xc3 */, + 0 /* 0xc4 */, 0 /* 0xc5 */, 0 /* 0xc6 */, 0 /* 0xc7 */, + 0 /* 0xc8 */, 0 /* 0xc9 */, 0 /* 0xca */, 0 /* 0xcb */, + 0 /* 0xcc */, 0 /* 0xcd */, 0 /* 0xce */, 0 /* 0xcf */, + 0 /* 0xd0 */, 0 /* 0xd1 */, 0 /* 0xd2 */, 0 /* 0xd3 */, + 0 /* 0xd4 */, 0 /* 0xd5 */, 0 /* 0xd6 */, 0 /* 0xd7 */, + 0 /* 0xd8 */, 0 /* 0xd9 */, 0 /* 0xda */, 0 /* 0xdb */, + 0 /* 0xdc */, 0 /* 0xdd */, 0 /* 0xde */, 0 /* 0xdf */, + 0 /* 0xe0 */, 0 /* 0xe1 */, 0 /* 0xe2 */, 0 /* 0xe3 */, + 0 /* 0xe4 */, 0 /* 0xe5 */, 0 /* 0xe6 */, 0 /* 0xe7 */, + 0 /* 0xe8 */, 0 /* 0xe9 */, 0 /* 0xea */, 0 /* 0xeb */, + 0 /* 0xec */, 0 /* 0xed */, 0 /* 0xee */, 0 /* 0xef */, + 0 /* 0xf0 */, 0 /* 0xf1 */, 0 /* 0xf2 */, 0 /* 0xf3 */, + 0 /* 0xf4 */, 0 /* 0xf5 */, 0 /* 0xf6 */, 0 /* 0xf7 */, + 0 /* 0xf8 */, 0 /* 0xf9 */, 0 /* 0xfa */, 0 /* 0xfb */, + 0 /* 0xfc */, 0 /* 0xfd */, 0 /* 0xfe */, 0 /* 0xff */ +}; + +static int check_method(const uint8_t *value, size_t len) { + const uint8_t *last; + if (len == 0) { + return 0; + } + for (last = value + len; value != last; ++value) { + if (!VALID_METHOD_CHARS[*value]) { + return 0; + } + } + return 1; +} + +/* Generated by genpathchartbl.py */ +static char VALID_PATH_CHARS[] = { + 0 /* NUL */, 0 /* SOH */, 0 /* STX */, 0 /* ETX */, + 0 /* EOT */, 0 /* ENQ */, 0 /* ACK */, 0 /* BEL */, + 0 /* BS */, 0 /* HT */, 0 /* LF */, 0 /* VT */, + 0 /* FF */, 0 /* CR */, 0 /* SO */, 0 /* SI */, + 0 /* DLE */, 0 /* DC1 */, 0 /* DC2 */, 0 /* DC3 */, + 0 /* DC4 */, 0 /* NAK */, 0 /* SYN */, 0 /* ETB */, + 0 /* CAN */, 0 /* EM */, 0 /* SUB */, 0 /* ESC */, + 0 /* FS */, 0 /* GS */, 0 /* RS */, 0 /* US */, + 0 /* SPC */, 1 /* ! */, 1 /* " */, 1 /* # */, + 1 /* $ */, 1 /* % */, 1 /* & */, 1 /* ' */, + 1 /* ( */, 1 /* ) */, 1 /* * */, 1 /* + */, + 1 /* , */, 1 /* - */, 1 /* . */, 1 /* / */, + 1 /* 0 */, 1 /* 1 */, 1 /* 2 */, 1 /* 3 */, + 1 /* 4 */, 1 /* 5 */, 1 /* 6 */, 1 /* 7 */, + 1 /* 8 */, 1 /* 9 */, 1 /* : */, 1 /* ; */, + 1 /* < */, 1 /* = */, 1 /* > */, 1 /* ? */, + 1 /* @ */, 1 /* A */, 1 /* B */, 1 /* C */, + 1 /* D */, 1 /* E */, 1 /* F */, 1 /* G */, + 1 /* H */, 1 /* I */, 1 /* J */, 1 /* K */, + 1 /* L */, 1 /* M */, 1 /* N */, 1 /* O */, + 1 /* P */, 1 /* Q */, 1 /* R */, 1 /* S */, + 1 /* T */, 1 /* U */, 1 /* V */, 1 /* W */, + 1 /* X */, 1 /* Y */, 1 /* Z */, 1 /* [ */, + 1 /* \ */, 1 /* ] */, 1 /* ^ */, 1 /* _ */, + 1 /* ` */, 1 /* a */, 1 /* b */, 1 /* c */, + 1 /* d */, 1 /* e */, 1 /* f */, 1 /* g */, + 1 /* h */, 1 /* i */, 1 /* j */, 1 /* k */, + 1 /* l */, 1 /* m */, 1 /* n */, 1 /* o */, + 1 /* p */, 1 /* q */, 1 /* r */, 1 /* s */, + 1 /* t */, 1 /* u */, 1 /* v */, 1 /* w */, + 1 /* x */, 1 /* y */, 1 /* z */, 1 /* { */, + 1 /* | */, 1 /* } */, 1 /* ~ */, 0 /* DEL */, + 1 /* 0x80 */, 1 /* 0x81 */, 1 /* 0x82 */, 1 /* 0x83 */, + 1 /* 0x84 */, 1 /* 0x85 */, 1 /* 0x86 */, 1 /* 0x87 */, + 1 /* 0x88 */, 1 /* 0x89 */, 1 /* 0x8a */, 1 /* 0x8b */, + 1 /* 0x8c */, 1 /* 0x8d */, 1 /* 0x8e */, 1 /* 0x8f */, + 1 /* 0x90 */, 1 /* 0x91 */, 1 /* 0x92 */, 1 /* 0x93 */, + 1 /* 0x94 */, 1 /* 0x95 */, 1 /* 0x96 */, 1 /* 0x97 */, + 1 /* 0x98 */, 1 /* 0x99 */, 1 /* 0x9a */, 1 /* 0x9b */, + 1 /* 0x9c */, 1 /* 0x9d */, 1 /* 0x9e */, 1 /* 0x9f */, + 1 /* 0xa0 */, 1 /* 0xa1 */, 1 /* 0xa2 */, 1 /* 0xa3 */, + 1 /* 0xa4 */, 1 /* 0xa5 */, 1 /* 0xa6 */, 1 /* 0xa7 */, + 1 /* 0xa8 */, 1 /* 0xa9 */, 1 /* 0xaa */, 1 /* 0xab */, + 1 /* 0xac */, 1 /* 0xad */, 1 /* 0xae */, 1 /* 0xaf */, + 1 /* 0xb0 */, 1 /* 0xb1 */, 1 /* 0xb2 */, 1 /* 0xb3 */, + 1 /* 0xb4 */, 1 /* 0xb5 */, 1 /* 0xb6 */, 1 /* 0xb7 */, + 1 /* 0xb8 */, 1 /* 0xb9 */, 1 /* 0xba */, 1 /* 0xbb */, + 1 /* 0xbc */, 1 /* 0xbd */, 1 /* 0xbe */, 1 /* 0xbf */, + 1 /* 0xc0 */, 1 /* 0xc1 */, 1 /* 0xc2 */, 1 /* 0xc3 */, + 1 /* 0xc4 */, 1 /* 0xc5 */, 1 /* 0xc6 */, 1 /* 0xc7 */, + 1 /* 0xc8 */, 1 /* 0xc9 */, 1 /* 0xca */, 1 /* 0xcb */, + 1 /* 0xcc */, 1 /* 0xcd */, 1 /* 0xce */, 1 /* 0xcf */, + 1 /* 0xd0 */, 1 /* 0xd1 */, 1 /* 0xd2 */, 1 /* 0xd3 */, + 1 /* 0xd4 */, 1 /* 0xd5 */, 1 /* 0xd6 */, 1 /* 0xd7 */, + 1 /* 0xd8 */, 1 /* 0xd9 */, 1 /* 0xda */, 1 /* 0xdb */, + 1 /* 0xdc */, 1 /* 0xdd */, 1 /* 0xde */, 1 /* 0xdf */, + 1 /* 0xe0 */, 1 /* 0xe1 */, 1 /* 0xe2 */, 1 /* 0xe3 */, + 1 /* 0xe4 */, 1 /* 0xe5 */, 1 /* 0xe6 */, 1 /* 0xe7 */, + 1 /* 0xe8 */, 1 /* 0xe9 */, 1 /* 0xea */, 1 /* 0xeb */, + 1 /* 0xec */, 1 /* 0xed */, 1 /* 0xee */, 1 /* 0xef */, + 1 /* 0xf0 */, 1 /* 0xf1 */, 1 /* 0xf2 */, 1 /* 0xf3 */, + 1 /* 0xf4 */, 1 /* 0xf5 */, 1 /* 0xf6 */, 1 /* 0xf7 */, + 1 /* 0xf8 */, 1 /* 0xf9 */, 1 /* 0xfa */, 1 /* 0xfb */, + 1 /* 0xfc */, 1 /* 0xfd */, 1 /* 0xfe */, 1 /* 0xff */ +}; + +static int check_path(const uint8_t *value, size_t len) { + const uint8_t *last; + for (last = value + len; value != last; ++value) { + if (!VALID_PATH_CHARS[*value]) { + return 0; + } + } + return 1; +} + +int nghttp3_http_on_header(nghttp3_http_state *http, nghttp3_qpack_nv *nv, + int request, int trailers, int connect_protocol) { int rv; size_t i; uint8_t c; @@ -535,12 +1322,27 @@ int nghttp3_http_on_header(nghttp3_http_state *http, int64_t frame_type, assert(nv->name->len > 0); - if (nv->token == NGHTTP3_QPACK_TOKEN__AUTHORITY || - nv->token == NGHTTP3_QPACK_TOKEN_HOST) { - rv = check_authority(nv->value->base, nv->value->len); - } else if (nv->token == NGHTTP3_QPACK_TOKEN__SCHEME) { + switch (nv->token) { + case NGHTTP3_QPACK_TOKEN__METHOD: + rv = check_method(nv->value->base, nv->value->len); + break; + case NGHTTP3_QPACK_TOKEN__SCHEME: rv = check_scheme(nv->value->base, nv->value->len); - } else { + break; + case NGHTTP3_QPACK_TOKEN__AUTHORITY: + case NGHTTP3_QPACK_TOKEN_HOST: + if (request) { + rv = check_authority(nv->value->base, nv->value->len); + } else { + /* The use of host field in response field section is + undefined. */ + rv = nghttp3_check_header_value(nv->value->base, nv->value->len); + } + break; + case NGHTTP3_QPACK_TOKEN__PATH: + rv = check_path(nv->value->base, nv->value->len); + break; + default: rv = nghttp3_check_header_value(nv->value->base, nv->value->len); } @@ -556,8 +1358,7 @@ int nghttp3_http_on_header(nghttp3_http_state *http, int64_t frame_type, } if (request) { - rv = http_request_on_header(http, frame_type, nv, trailers, - /* connect_protocol = */ 0); + rv = http_request_on_header(http, nv, trailers, connect_protocol); } else { rv = http_response_on_header(http, nv, trailers); } @@ -594,7 +1395,7 @@ int nghttp3_http_on_request_headers(nghttp3_http_state *http) { (http->flags & NGHTTP3_HTTP_FLAG__AUTHORITY) == 0)) { return NGHTTP3_ERR_MALFORMED_HTTP_HEADER; } - if (!check_path(http)) { + if (!check_path_flags(http)) { return NGHTTP3_ERR_MALFORMED_HTTP_HEADER; } } @@ -609,15 +1410,14 @@ int nghttp3_http_on_response_headers(nghttp3_http_state *http) { if (http->status_code / 100 == 1) { /* non-final response */ - http->flags = (uint16_t)((http->flags & NGHTTP3_HTTP_FLAG_METH_ALL) | - NGHTTP3_HTTP_FLAG_EXPECT_FINAL_RESPONSE); + http->flags = (http->flags & NGHTTP3_HTTP_FLAG_METH_ALL) | + NGHTTP3_HTTP_FLAG_EXPECT_FINAL_RESPONSE; http->content_length = -1; http->status_code = -1; return 0; } - http->flags = - (uint16_t)(http->flags & ~NGHTTP3_HTTP_FLAG_EXPECT_FINAL_RESPONSE); + http->flags &= ~NGHTTP3_HTTP_FLAG_EXPECT_FINAL_RESPONSE; if (!expect_response_body(http)) { http->content_length = 0; @@ -629,9 +1429,6 @@ int nghttp3_http_on_response_headers(nghttp3_http_state *http) { } int nghttp3_http_on_remote_end_stream(nghttp3_stream *stream) { - if (stream->flags & NGHTTP3_STREAM_FLAG_RESET) { - return 0; - } if ((stream->rx.http.flags & NGHTTP3_HTTP_FLAG_EXPECT_FINAL_RESPONSE) || (stream->rx.http.content_length != -1 && stream->rx.http.content_length != stream->rx.http.recv_content_length)) { @@ -835,6 +1632,19 @@ static const int VALID_HD_VALUE_CHARS[] = { int nghttp3_check_header_value(const uint8_t *value, size_t len) { const uint8_t *last; + + switch (len) { + case 0: + return 1; + case 1: + return !(*value == ' ' || *value == '\t'); + default: + if (*value == ' ' || *value == '\t' || *(value + len - 1) == ' ' || + *(value + len - 1) == '\t') { + return 0; + } + } + for (last = value + len; value != last; ++value) { if (!VALID_HD_VALUE_CHARS[*value]) { return 0; diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_http.h b/deps/ngtcp2/nghttp3/lib/nghttp3_http.h index 65ec91759ba..1617348ad14 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_http.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_http.h @@ -39,48 +39,55 @@ typedef struct nghttp3_http_state nghttp3_http_state; /* HTTP related flags to enforce HTTP semantics */ /* NGHTTP3_HTTP_FLAG_NONE indicates that no flag is set. */ -#define NGHTTP3_HTTP_FLAG_NONE 0x00 +#define NGHTTP3_HTTP_FLAG_NONE 0x00u /* header field seen so far */ -#define NGHTTP3_HTTP_FLAG__AUTHORITY 0x01 -#define NGHTTP3_HTTP_FLAG__PATH 0x02 -#define NGHTTP3_HTTP_FLAG__METHOD 0x04 -#define NGHTTP3_HTTP_FLAG__SCHEME 0x08 +#define NGHTTP3_HTTP_FLAG__AUTHORITY 0x01u +#define NGHTTP3_HTTP_FLAG__PATH 0x02u +#define NGHTTP3_HTTP_FLAG__METHOD 0x04u +#define NGHTTP3_HTTP_FLAG__SCHEME 0x08u /* host is not pseudo header, but we require either host or :authority */ -#define NGHTTP3_HTTP_FLAG_HOST 0x10 -#define NGHTTP3_HTTP_FLAG__STATUS 0x20 +#define NGHTTP3_HTTP_FLAG_HOST 0x10u +#define NGHTTP3_HTTP_FLAG__STATUS 0x20u /* required header fields for HTTP request except for CONNECT method. */ #define NGHTTP3_HTTP_FLAG_REQ_HEADERS \ (NGHTTP3_HTTP_FLAG__METHOD | NGHTTP3_HTTP_FLAG__PATH | \ NGHTTP3_HTTP_FLAG__SCHEME) -#define NGHTTP3_HTTP_FLAG_PSEUDO_HEADER_DISALLOWED 0x40 +#define NGHTTP3_HTTP_FLAG_PSEUDO_HEADER_DISALLOWED 0x40u /* HTTP method flags */ -#define NGHTTP3_HTTP_FLAG_METH_CONNECT 0x80 -#define NGHTTP3_HTTP_FLAG_METH_HEAD 0x0100 -#define NGHTTP3_HTTP_FLAG_METH_OPTIONS 0x0200 +#define NGHTTP3_HTTP_FLAG_METH_CONNECT 0x80u +#define NGHTTP3_HTTP_FLAG_METH_HEAD 0x0100u +#define NGHTTP3_HTTP_FLAG_METH_OPTIONS 0x0200u #define NGHTTP3_HTTP_FLAG_METH_ALL \ (NGHTTP3_HTTP_FLAG_METH_CONNECT | NGHTTP3_HTTP_FLAG_METH_HEAD | \ NGHTTP3_HTTP_FLAG_METH_OPTIONS) /* :path category */ /* path starts with "/" */ -#define NGHTTP3_HTTP_FLAG_PATH_REGULAR 0x0400 +#define NGHTTP3_HTTP_FLAG_PATH_REGULAR 0x0400u /* path "*" */ -#define NGHTTP3_HTTP_FLAG_PATH_ASTERISK 0x0800 +#define NGHTTP3_HTTP_FLAG_PATH_ASTERISK 0x0800u /* scheme */ /* "http" or "https" scheme */ -#define NGHTTP3_HTTP_FLAG_SCHEME_HTTP 0x1000 +#define NGHTTP3_HTTP_FLAG_SCHEME_HTTP 0x1000u /* set if final response is expected */ -#define NGHTTP3_HTTP_FLAG_EXPECT_FINAL_RESPONSE 0x2000 +#define NGHTTP3_HTTP_FLAG_EXPECT_FINAL_RESPONSE 0x2000u /* NGHTTP3_HTTP_FLAG__PROTOCOL is set when :protocol pseudo header field is seen. */ -#define NGHTTP3_HTTP_FLAG__PROTOCOL 0x4000 +#define NGHTTP3_HTTP_FLAG__PROTOCOL 0x4000u +/* NGHTTP3_HTTP_FLAG_PRIORITY is set when priority header field is + processed. */ +#define NGHTTP3_HTTP_FLAG_PRIORITY 0x8000u +/* NGHTTP3_HTTP_FLAG_BAD_PRIORITY is set when an error is encountered + while parsing priority header field. */ +#define NGHTTP3_HTTP_FLAG_BAD_PRIORITY 0x010000u /* - * This function is called when HTTP header field |nv| in a frame of type - * |frame_type| is received for |http|. This function will validate |nv| - * against the current state of stream. Pass nonzero if this is request - * headers. Pass nonzero to |trailers| if |nv| is included in trailers. + * This function is called when HTTP header field |nv| received for + * |http|. This function will validate |nv| against the current state + * of stream. Pass nonzero if this is request headers. Pass nonzero + * to |trailers| if |nv| is included in trailers. |connect_protocol| + * is nonzero if Extended CONNECT Method is enabled. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -91,8 +98,8 @@ typedef struct nghttp3_http_state nghttp3_http_state; * Invalid HTTP header field was received but it can be treated as * if it was not received because of compatibility reasons. */ -int nghttp3_http_on_header(nghttp3_http_state *http, int64_t frame_type, - nghttp3_qpack_nv *nv, int request, int trailers); +int nghttp3_http_on_header(nghttp3_http_state *http, nghttp3_qpack_nv *nv, + int request, int trailers, int connect_protocol); /* * This function is called when request header is received. This @@ -143,4 +150,53 @@ int nghttp3_http_on_data_chunk(nghttp3_stream *stream, size_t n); void nghttp3_http_record_request_method(nghttp3_stream *stream, const nghttp3_nv *nva, size_t nvlen); +/* + * RFC 8941 Structured Field Values. + */ +typedef enum nghttp3_sf_value_type { + NGHTTP3_SF_VALUE_TYPE_BOOLEAN, + NGHTTP3_SF_VALUE_TYPE_INTEGER, + NGHTTP3_SF_VALUE_TYPE_DECIMAL, + NGHTTP3_SF_VALUE_TYPE_STRING, + NGHTTP3_SF_VALUE_TYPE_TOKEN, + NGHTTP3_SF_VALUE_TYPE_BYTESEQ, + NGHTTP3_SF_VALUE_TYPE_INNER_LIST, +} nghttp3_sf_value_type; + +/* + * nghttp3_sf_value stores Structured Field Values item. For Inner + * List, only type is set to NGHTTP3_SF_VALUE_TYPE_INNER_LIST. + */ +typedef struct nghttp3_sf_value { + uint8_t type; + union { + int b; + int64_t i; + double d; + struct { + const uint8_t *base; + size_t len; + } s; + }; +} nghttp3_sf_value; + +/* + * nghttp3_sf_parse_item parses the input sequence [|begin|, |end|) + * and stores the parsed an Item in |dest|. It returns the number of + * bytes consumed if it succeeds, or -1. This function is declared + * here for unit tests. + */ +nghttp3_ssize nghttp3_sf_parse_item(nghttp3_sf_value *dest, + const uint8_t *begin, const uint8_t *end); + +/* + * nghttp3_sf_parse_inner_list parses the input sequence [|begin|, |end|) + * and stores the parsed an Inner List in |dest|. It returns the number of + * bytes consumed if it succeeds, or -1. This function is declared + * here for unit tests. + */ +nghttp3_ssize nghttp3_sf_parse_inner_list(nghttp3_sf_value *dest, + const uint8_t *begin, + const uint8_t *end); + #endif /* NGHTTP3_HTTP_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_idtr.c b/deps/ngtcp2/nghttp3/lib/nghttp3_idtr.c index cd8fd82e6b2..dc34841fe0f 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_idtr.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_idtr.c @@ -27,18 +27,10 @@ #include -int nghttp3_idtr_init(nghttp3_idtr *idtr, int server, const nghttp3_mem *mem) { - int rv; - - rv = nghttp3_gaptr_init(&idtr->gap, mem); - if (rv != 0) { - return rv; - } +void nghttp3_idtr_init(nghttp3_idtr *idtr, int server, const nghttp3_mem *mem) { + nghttp3_gaptr_init(&idtr->gap, mem); idtr->server = server; - idtr->mem = mem; - - return 0; } void nghttp3_idtr_free(nghttp3_idtr *idtr) { diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_idtr.h b/deps/ngtcp2/nghttp3/lib/nghttp3_idtr.h index c4d60861ab1..ea3346c9a96 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_idtr.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_idtr.h @@ -45,24 +45,15 @@ typedef struct nghttp3_idtr { /* server is nonzero if this object records server initiated stream ID. */ int server; - /* mem is custom memory allocator */ - const nghttp3_mem *mem; } nghttp3_idtr; /* - * nghttp3_idtr_init initializes |idtr|. |chunk| is the size of buffer - * per chunk. + * nghttp3_idtr_init initializes |idtr|. * * If this object records server initiated ID (even number), set * |server| to nonzero. - * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: - * - * NGHTTP3_ERR_NOMEM - * Out of memory. */ -int nghttp3_idtr_init(nghttp3_idtr *idtr, int server, const nghttp3_mem *mem); +void nghttp3_idtr_init(nghttp3_idtr *idtr, int server, const nghttp3_mem *mem); /* * nghttp3_idtr_free frees resources allocated for |idtr|. diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_ksl.c b/deps/ngtcp2/nghttp3/lib/nghttp3_ksl.c index 0896cb693f9..adea677abe1 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_ksl.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_ksl.c @@ -34,9 +34,11 @@ #include "nghttp3_mem.h" #include "nghttp3_range.h" +static nghttp3_ksl_blk null_blk = {{{NULL, NULL, 0, 0, {0}}}}; + static size_t ksl_nodelen(size_t keylen) { - return (sizeof(nghttp3_ksl_node) + keylen - sizeof(uint64_t) + 0xf) & - (size_t)~0xf; + return (sizeof(nghttp3_ksl_node) + keylen - sizeof(uint64_t) + 0xfu) & + ~(uintptr_t)0xfu; } static size_t ksl_blklen(size_t nodelen) { @@ -52,31 +54,48 @@ static void ksl_node_set_key(nghttp3_ksl *ksl, nghttp3_ksl_node *node, memcpy(node->key, key, ksl->keylen); } -int nghttp3_ksl_init(nghttp3_ksl *ksl, nghttp3_ksl_compar compar, size_t keylen, - const nghttp3_mem *mem) { +void nghttp3_ksl_init(nghttp3_ksl *ksl, nghttp3_ksl_compar compar, + size_t keylen, const nghttp3_mem *mem) { size_t nodelen = ksl_nodelen(keylen); - size_t blklen = ksl_blklen(nodelen); - nghttp3_ksl_blk *head; - ksl->head = nghttp3_mem_malloc(mem, blklen); - if (!ksl->head) { - return NGHTTP3_ERR_NOMEM; - } - ksl->front = ksl->back = ksl->head; + nghttp3_objalloc_init(&ksl->blkalloc, + ((ksl_blklen(nodelen) + 0xfu) & ~(uintptr_t)0xfu) * 8, + mem); + + ksl->head = NULL; + ksl->front = ksl->back = NULL; ksl->compar = compar; ksl->keylen = keylen; ksl->nodelen = nodelen; ksl->n = 0; - ksl->mem = mem; +} + +static nghttp3_ksl_blk *ksl_blk_objalloc_new(nghttp3_ksl *ksl) { + return nghttp3_objalloc_ksl_blk_len_get(&ksl->blkalloc, + ksl_blklen(ksl->nodelen)); +} + +static void ksl_blk_objalloc_del(nghttp3_ksl *ksl, nghttp3_ksl_blk *blk) { + nghttp3_objalloc_ksl_blk_release(&ksl->blkalloc, blk); +} + +static int ksl_head_init(nghttp3_ksl *ksl) { + nghttp3_ksl_blk *head = ksl_blk_objalloc_new(ksl); + if (!head) { + return NGHTTP3_ERR_NOMEM; + } - head = ksl->head; head->next = head->prev = NULL; head->n = 0; head->leaf = 1; + ksl->head = head; + ksl->front = ksl->back = head; + return 0; } +#ifdef NOMEMPOOL /* * ksl_free_blk frees |blk| recursively. */ @@ -89,15 +108,20 @@ static void ksl_free_blk(nghttp3_ksl *ksl, nghttp3_ksl_blk *blk) { } } - nghttp3_mem_free(ksl->mem, blk); + ksl_blk_objalloc_del(ksl, blk); } +#endif /* NOMEMPOOL */ void nghttp3_ksl_free(nghttp3_ksl *ksl) { - if (!ksl) { + if (!ksl || !ksl->head) { return; } +#ifdef NOMEMPOOL ksl_free_blk(ksl, ksl->head); +#endif /* NOMEMPOOL */ + + nghttp3_objalloc_free(&ksl->blkalloc); } /* @@ -111,7 +135,7 @@ void nghttp3_ksl_free(nghttp3_ksl *ksl) { static nghttp3_ksl_blk *ksl_split_blk(nghttp3_ksl *ksl, nghttp3_ksl_blk *blk) { nghttp3_ksl_blk *rblk; - rblk = nghttp3_mem_malloc(ksl->mem, ksl_blklen(ksl->nodelen)); + rblk = ksl_blk_objalloc_new(ksl); if (rblk == NULL) { return NULL; } @@ -197,9 +221,9 @@ static int ksl_split_head(nghttp3_ksl *ksl) { lblk = ksl->head; - nhead = nghttp3_mem_malloc(ksl->mem, ksl_blklen(ksl->nodelen)); + nhead = ksl_blk_objalloc_new(ksl); if (nhead == NULL) { - nghttp3_mem_free(ksl->mem, rblk); + ksl_blk_objalloc_del(ksl, rblk); return NGHTTP3_ERR_NOMEM; } nhead->next = nhead->prev = NULL; @@ -246,29 +270,33 @@ static void ksl_insert_node(nghttp3_ksl *ksl, nghttp3_ksl_blk *blk, size_t i, static size_t ksl_bsearch(nghttp3_ksl *ksl, nghttp3_ksl_blk *blk, const nghttp3_ksl_key *key, nghttp3_ksl_compar compar) { - nghttp3_ssize left = -1, right = (nghttp3_ssize)blk->n, mid; + size_t i; nghttp3_ksl_node *node; - while (right - left > 1) { - mid = (left + right) >> 1; - node = nghttp3_ksl_nth_node(ksl, blk, (size_t)mid); - if (compar((nghttp3_ksl_key *)node->key, key)) { - left = mid; - } else { - right = mid; - } - } + for (i = 0, node = (nghttp3_ksl_node *)(void *)blk->nodes; + i < blk->n && compar((nghttp3_ksl_key *)node->key, key); + ++i, node = (nghttp3_ksl_node *)(void *)((uint8_t *)node + ksl->nodelen)) + ; - return (size_t)right; + return i; } int nghttp3_ksl_insert(nghttp3_ksl *ksl, nghttp3_ksl_it *it, const nghttp3_ksl_key *key, void *data) { - nghttp3_ksl_blk *blk = ksl->head; + nghttp3_ksl_blk *blk; nghttp3_ksl_node *node; size_t i; int rv; + if (!ksl->head) { + rv = ksl_head_init(ksl); + if (rv != 0) { + return rv; + } + } + + blk = ksl->head; + if (blk->n == NGHTTP3_KSL_MAX_NBLK) { rv = ksl_split_head(ksl); if (rv != 0) { @@ -380,10 +408,10 @@ static nghttp3_ksl_blk *ksl_merge_node(nghttp3_ksl *ksl, nghttp3_ksl_blk *blk, ksl->back = lblk; } - nghttp3_mem_free(ksl->mem, rblk); + ksl_blk_objalloc_del(ksl, rblk); if (ksl->head == blk && blk->n == 2) { - nghttp3_mem_free(ksl->mem, ksl->head); + ksl_blk_objalloc_del(ksl, ksl->head); ksl->head = lblk; } else { ksl_remove_node(ksl, blk, i + 1); @@ -477,12 +505,42 @@ static int key_equal(nghttp3_ksl_compar compar, const nghttp3_ksl_key *lhs, return !compar(lhs, rhs) && !compar(rhs, lhs); } +int nghttp3_ksl_remove_hint(nghttp3_ksl *ksl, nghttp3_ksl_it *it, + const nghttp3_ksl_it *hint, + const nghttp3_ksl_key *key) { + nghttp3_ksl_blk *blk = hint->blk; + + assert(ksl->head); + + if (blk->n <= NGHTTP3_KSL_MIN_NBLK) { + return nghttp3_ksl_remove(ksl, it, key); + } + + ksl_remove_node(ksl, blk, hint->i); + + --ksl->n; + + if (it) { + if (hint->i == blk->n && blk->next) { + nghttp3_ksl_it_init(it, ksl, blk->next, 0); + } else { + nghttp3_ksl_it_init(it, ksl, blk, hint->i); + } + } + + return 0; +} + int nghttp3_ksl_remove(nghttp3_ksl *ksl, nghttp3_ksl_it *it, const nghttp3_ksl_key *key) { nghttp3_ksl_blk *blk = ksl->head; nghttp3_ksl_node *node; size_t i; + if (!ksl->head) { + return NGHTTP3_ERR_INVALID_ARGUMENT; + } + if (!blk->leaf && blk->n == 2 && nghttp3_ksl_nth_node(ksl, blk, 0)->blk->n == NGHTTP3_KSL_MIN_NBLK && nghttp3_ksl_nth_node(ksl, blk, 1)->blk->n == NGHTTP3_KSL_MIN_NBLK) { @@ -558,6 +616,11 @@ nghttp3_ksl_it nghttp3_ksl_lower_bound(nghttp3_ksl *ksl, nghttp3_ksl_it it; size_t i; + if (!blk) { + nghttp3_ksl_it_init(&it, ksl, &null_blk, 0); + return it; + } + for (;;) { i = ksl_bsearch(ksl, blk, key, ksl->compar); @@ -595,6 +658,11 @@ nghttp3_ksl_it nghttp3_ksl_lower_bound_compar(nghttp3_ksl *ksl, nghttp3_ksl_it it; size_t i; + if (!blk) { + nghttp3_ksl_it_init(&it, ksl, &null_blk, 0); + return it; + } + for (;;) { i = ksl_bsearch(ksl, blk, key, compar); @@ -631,6 +699,8 @@ void nghttp3_ksl_update_key(nghttp3_ksl *ksl, const nghttp3_ksl_key *old_key, nghttp3_ksl_node *node; size_t i; + assert(ksl->head); + for (;;) { i = ksl_bsearch(ksl, blk, old_key, ksl->compar); @@ -675,36 +745,49 @@ static void ksl_print(nghttp3_ksl *ksl, nghttp3_ksl_blk *blk, size_t level) { size_t nghttp3_ksl_len(nghttp3_ksl *ksl) { return ksl->n; } void nghttp3_ksl_clear(nghttp3_ksl *ksl) { - size_t i; - nghttp3_ksl_blk *head; - - if (!ksl->head->leaf) { - for (i = 0; i < ksl->head->n; ++i) { - ksl_free_blk(ksl, nghttp3_ksl_nth_node(ksl, ksl->head, i)->blk); - } + if (!ksl->head) { + return; } - ksl->front = ksl->back = ksl->head; - ksl->n = 0; +#ifdef NOMEMPOOL + ksl_free_blk(ksl, ksl->head); +#endif /* NOMEMPOOL */ - head = ksl->head; + ksl->front = ksl->back = ksl->head = NULL; + ksl->n = 0; - head->next = head->prev = NULL; - head->n = 0; - head->leaf = 1; + nghttp3_objalloc_clear(&ksl->blkalloc); } -void nghttp3_ksl_print(nghttp3_ksl *ksl) { ksl_print(ksl, ksl->head, 0); } +void nghttp3_ksl_print(nghttp3_ksl *ksl) { + if (!ksl->head) { + return; + } + + ksl_print(ksl, ksl->head, 0); +} nghttp3_ksl_it nghttp3_ksl_begin(const nghttp3_ksl *ksl) { nghttp3_ksl_it it; - nghttp3_ksl_it_init(&it, ksl, ksl->front, 0); + + if (ksl->head) { + nghttp3_ksl_it_init(&it, ksl, ksl->front, 0); + } else { + nghttp3_ksl_it_init(&it, ksl, &null_blk, 0); + } + return it; } nghttp3_ksl_it nghttp3_ksl_end(const nghttp3_ksl *ksl) { nghttp3_ksl_it it; - nghttp3_ksl_it_init(&it, ksl, ksl->back, ksl->back->n); + + if (ksl->head) { + nghttp3_ksl_it_init(&it, ksl, ksl->back, ksl->back->n); + } else { + nghttp3_ksl_it_init(&it, ksl, &null_blk, 0); + } + return it; } @@ -715,11 +798,6 @@ void nghttp3_ksl_it_init(nghttp3_ksl_it *it, const nghttp3_ksl *ksl, it->i = i; } -void *nghttp3_ksl_it_get(const nghttp3_ksl_it *it) { - assert(it->i < it->blk->n); - return nghttp3_ksl_nth_node(it->ksl, it->blk, it->i)->data; -} - void nghttp3_ksl_it_prev(nghttp3_ksl_it *it) { assert(!nghttp3_ksl_it_begin(it)); diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_ksl.h b/deps/ngtcp2/nghttp3/lib/nghttp3_ksl.h index 7ba36bb9cb1..0bc10e846fe 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_ksl.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_ksl.h @@ -34,6 +34,8 @@ #include +#include "nghttp3_objalloc.h" + /* * Skip List using single key instead of range. */ @@ -80,25 +82,34 @@ struct nghttp3_ksl_node { * nghttp3_ksl_blk contains nghttp3_ksl_node objects. */ struct nghttp3_ksl_blk { - /* next points to the next block if leaf field is nonzero. */ - nghttp3_ksl_blk *next; - /* prev points to the previous block if leaf field is nonzero. */ - nghttp3_ksl_blk *prev; - /* n is the number of nodes this object contains in nodes. */ - uint32_t n; - /* leaf is nonzero if this block contains leaf nodes. */ - uint32_t leaf; union { - uint64_t align; - /* nodes is a buffer to contain NGHTTP3_KSL_MAX_NBLK - nghttp3_ksl_node objects. Because nghttp3_ksl_node object is - allocated along with the additional variable length key - storage, the size of buffer is unknown until nghttp3_ksl_init - is called. */ - uint8_t nodes[1]; + struct { + /* next points to the next block if leaf field is nonzero. */ + nghttp3_ksl_blk *next; + /* prev points to the previous block if leaf field is + nonzero. */ + nghttp3_ksl_blk *prev; + /* n is the number of nodes this object contains in nodes. */ + uint32_t n; + /* leaf is nonzero if this block contains leaf nodes. */ + uint32_t leaf; + union { + uint64_t align; + /* nodes is a buffer to contain NGHTTP3_KSL_MAX_NBLK + nghttp3_ksl_node objects. Because nghttp3_ksl_node object + is allocated along with the additional variable length key + storage, the size of buffer is unknown until + nghttp3_ksl_init is called. */ + uint8_t nodes[1]; + }; + }; + + nghttp3_opl_entry oplent; }; }; +nghttp3_objalloc_def(ksl_blk, nghttp3_ksl_blk, oplent); + /* * nghttp3_ksl_compar is a function type which returns nonzero if key * |lhs| should be placed before |rhs|. It returns 0 otherwise. @@ -123,6 +134,7 @@ struct nghttp3_ksl_it { * nghttp3_ksl is a deterministic paged skip list. */ struct nghttp3_ksl { + nghttp3_objalloc blkalloc; /* head points to the root block. */ nghttp3_ksl_blk *head; /* front points to the first leaf block. */ @@ -136,21 +148,14 @@ struct nghttp3_ksl { /* nodelen is the actual size of nghttp3_ksl_node including key storage. */ size_t nodelen; - const nghttp3_mem *mem; }; /* * nghttp3_ksl_init initializes |ksl|. |compar| specifies compare * function. |keylen| is the length of key. - * - * It returns 0 if it succeeds, or one of the following negative error - * codes: - * - * NGHTTP3_ERR_NOMEM - * Out of memory. */ -int nghttp3_ksl_init(nghttp3_ksl *ksl, nghttp3_ksl_compar compar, size_t keylen, - const nghttp3_mem *mem); +void nghttp3_ksl_init(nghttp3_ksl *ksl, nghttp3_ksl_compar compar, + size_t keylen, const nghttp3_mem *mem); /* * nghttp3_ksl_free frees resources allocated for |ksl|. If |ksl| is @@ -192,6 +197,17 @@ int nghttp3_ksl_insert(nghttp3_ksl *ksl, nghttp3_ksl_it *it, int nghttp3_ksl_remove(nghttp3_ksl *ksl, nghttp3_ksl_it *it, const nghttp3_ksl_key *key); +/* + * nghttp3_ksl_remove_hint removes the |key| from |ksl|. |hint| must + * point to the same node denoted by |key|. |hint| is used to remove + * a node efficiently in some cases. Other than that, it behaves + * exactly like nghttp3_ksl_remove. |it| and |hint| can point to the + * same object. + */ +int nghttp3_ksl_remove_hint(nghttp3_ksl *ksl, nghttp3_ksl_it *it, + const nghttp3_ksl_it *hint, + const nghttp3_ksl_key *key); + /* * nghttp3_ksl_lower_bound returns the iterator which points to the * first node which has the key which is equal to |key| or the last @@ -267,7 +283,8 @@ void nghttp3_ksl_it_init(nghttp3_ksl_it *it, const nghttp3_ksl *ksl, * |it| points to. It is undefined to call this function when * nghttp3_ksl_it_end(it) returns nonzero. */ -void *nghttp3_ksl_it_get(const nghttp3_ksl_it *it); +#define nghttp3_ksl_it_get(IT) \ + nghttp3_ksl_nth_node((IT)->ksl, (IT)->blk, (IT)->i)->data /* * nghttp3_ksl_it_next advances the iterator by one. It is undefined diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_macro.h b/deps/ngtcp2/nghttp3/lib/nghttp3_macro.h index 6ee704cc47d..a44e907661a 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_macro.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_macro.h @@ -44,4 +44,8 @@ #define lstreq(A, B, N) ((sizeof((A)) - 1) == (N) && memcmp((A), (B), (N)) == 0) +/* NGHTTP3_MAX_VARINT` is the maximum value which can be encoded in + variable-length integer encoding. */ +#define NGHTTP3_MAX_VARINT ((1ULL << 62) - 1) + #endif /* NGHTTP3_MACRO_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_map.c b/deps/ngtcp2/nghttp3/lib/nghttp3_map.c index a80955ad7a4..fcfc31ae41e 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_map.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_map.c @@ -28,172 +28,166 @@ #include #include +#include #include "nghttp3_conv.h" -#define INITIAL_TABLE_LENGTH 256 +#define NGHTTP3_INITIAL_TABLE_LENBITS 4 -int nghttp3_map_init(nghttp3_map *map, const nghttp3_mem *mem) { +void nghttp3_map_init(nghttp3_map *map, const nghttp3_mem *mem) { map->mem = mem; - map->tablelen = INITIAL_TABLE_LENGTH; - map->table = - nghttp3_mem_calloc(mem, map->tablelen, sizeof(nghttp3_map_bucket)); - if (map->table == NULL) { - return NGHTTP3_ERR_NOMEM; - } - + map->tablelen = 0; + map->tablelenbits = 0; + map->table = NULL; map->size = 0; - - return 0; } void nghttp3_map_free(nghttp3_map *map) { - size_t i; - nghttp3_map_bucket *bkt; - if (!map) { return; } - for (i = 0; i < map->tablelen; ++i) { - bkt = &map->table[i]; - if (bkt->ksl) { - nghttp3_ksl_free(bkt->ksl); - nghttp3_mem_free(map->mem, bkt->ksl); - } - } - nghttp3_mem_free(map->mem, map->table); } -void nghttp3_map_each_free(nghttp3_map *map, - int (*func)(nghttp3_map_entry *entry, void *ptr), +void nghttp3_map_each_free(nghttp3_map *map, int (*func)(void *data, void *ptr), void *ptr) { uint32_t i; nghttp3_map_bucket *bkt; - nghttp3_ksl_it it; for (i = 0; i < map->tablelen; ++i) { bkt = &map->table[i]; - if (bkt->ptr) { - func(bkt->ptr, ptr); - bkt->ptr = NULL; - assert(bkt->ksl == NULL || nghttp3_ksl_len(bkt->ksl) == 0); + if (bkt->data == NULL) { continue; } - if (bkt->ksl) { - for (it = nghttp3_ksl_begin(bkt->ksl); !nghttp3_ksl_it_end(&it); - nghttp3_ksl_it_next(&it)) { - func(nghttp3_ksl_it_get(&it), ptr); - } - - nghttp3_ksl_free(bkt->ksl); - nghttp3_mem_free(map->mem, bkt->ksl); - bkt->ksl = NULL; - } + func(bkt->data, ptr); } } -int nghttp3_map_each(nghttp3_map *map, - int (*func)(nghttp3_map_entry *entry, void *ptr), +int nghttp3_map_each(nghttp3_map *map, int (*func)(void *data, void *ptr), void *ptr) { int rv; uint32_t i; nghttp3_map_bucket *bkt; - nghttp3_ksl_it it; + + if (map->size == 0) { + return 0; + } for (i = 0; i < map->tablelen; ++i) { bkt = &map->table[i]; - if (bkt->ptr) { - rv = func(bkt->ptr, ptr); - if (rv != 0) { - return rv; - } - assert(bkt->ksl == NULL || nghttp3_ksl_len(bkt->ksl) == 0); + if (bkt->data == NULL) { continue; } - if (bkt->ksl) { - for (it = nghttp3_ksl_begin(bkt->ksl); !nghttp3_ksl_it_end(&it); - nghttp3_ksl_it_next(&it)) { - rv = func(nghttp3_ksl_it_get(&it), ptr); - if (rv != 0) { - return rv; - } - } + rv = func(bkt->data, ptr); + if (rv != 0) { + return rv; } } + return 0; } -void nghttp3_map_entry_init(nghttp3_map_entry *entry, key_type key) { - entry->key = key; +static uint32_t hash(nghttp3_map_key_type key) { + return (uint32_t)((key * 11400714819323198485llu) >> 32); } -/* FNV1a hash */ -static uint32_t hash(key_type key, uint32_t mod) { - uint8_t *p, *end; - uint32_t h = 0x811C9DC5u; +static size_t h2idx(uint32_t hash, uint32_t bits) { + return hash >> (32 - bits); +} - key = nghttp3_htonl64(key); - p = (uint8_t *)&key; - end = p + sizeof(key_type); +static size_t distance(uint32_t tablelen, uint32_t tablelenbits, + nghttp3_map_bucket *bkt, size_t idx) { + return (idx - h2idx(bkt->hash, tablelenbits)) & (tablelen - 1); +} - for (; p != end;) { - h ^= *p++; - h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24); - } +static void map_bucket_swap(nghttp3_map_bucket *bkt, uint32_t *phash, + nghttp3_map_key_type *pkey, void **pdata) { + uint32_t h = bkt->hash; + nghttp3_map_key_type key = bkt->key; + void *data = bkt->data; - return h & (mod - 1); + bkt->hash = *phash; + bkt->key = *pkey; + bkt->data = *pdata; + + *phash = h; + *pkey = key; + *pdata = data; } -static int less(const nghttp3_ksl_key *lhs, const nghttp3_ksl_key *rhs) { - return *(key_type *)lhs < *(key_type *)rhs; +static void map_bucket_set_data(nghttp3_map_bucket *bkt, uint32_t hash, + nghttp3_map_key_type key, void *data) { + bkt->hash = hash; + bkt->key = key; + bkt->data = data; } -static int map_insert(nghttp3_map *map, nghttp3_map_bucket *table, - uint32_t tablelen, nghttp3_map_entry *entry) { - uint32_t h = hash(entry->key, tablelen); - nghttp3_map_bucket *bkt = &table[h]; - const nghttp3_mem *mem = map->mem; - int rv; +void nghttp3_map_print_distance(nghttp3_map *map) { + uint32_t i; + size_t idx; + nghttp3_map_bucket *bkt; - if (bkt->ptr == NULL && - (bkt->ksl == NULL || nghttp3_ksl_len(bkt->ksl) == 0)) { - bkt->ptr = entry; - return 0; - } + for (i = 0; i < map->tablelen; ++i) { + bkt = &map->table[i]; - if (!bkt->ksl) { - bkt->ksl = nghttp3_mem_malloc(mem, sizeof(*bkt->ksl)); - if (bkt->ksl == NULL) { - return NGHTTP3_ERR_NOMEM; + if (bkt->data == NULL) { + fprintf(stderr, "@%u \n", i); + continue; } - nghttp3_ksl_init(bkt->ksl, less, sizeof(key_type), mem); + + idx = h2idx(bkt->hash, map->tablelenbits); + fprintf(stderr, "@%u hash=%08x key=%" PRIu64 " base=%zu distance=%zu\n", i, + bkt->hash, bkt->key, idx, + distance(map->tablelen, map->tablelenbits, bkt, idx)); } +} - if (bkt->ptr) { - rv = nghttp3_ksl_insert(bkt->ksl, NULL, &bkt->ptr->key, bkt->ptr); - if (rv != 0) { - return rv; +static int insert(nghttp3_map_bucket *table, uint32_t tablelen, + uint32_t tablelenbits, uint32_t hash, + nghttp3_map_key_type key, void *data) { + size_t idx = h2idx(hash, tablelenbits); + size_t d = 0, dd; + nghttp3_map_bucket *bkt; + + for (;;) { + bkt = &table[idx]; + + if (bkt->data == NULL) { + map_bucket_set_data(bkt, hash, key, data); + return 0; } - bkt->ptr = NULL; - } + dd = distance(tablelen, tablelenbits, bkt, idx); + if (d > dd) { + map_bucket_swap(bkt, &hash, &key, &data); + d = dd; + } else if (bkt->key == key) { + /* TODO This check is just a waste after first swap or if this + function is called from map_resize. That said, there is no + difference with or without this conditional in performance + wise. */ + return NGHTTP3_ERR_INVALID_ARGUMENT; + } - return nghttp3_ksl_insert(bkt->ksl, NULL, &entry->key, entry); + ++d; + idx = (idx + 1) & (tablelen - 1); + } } -/* new_tablelen must be power of 2 */ -static int map_resize(nghttp3_map *map, uint32_t new_tablelen) { +/* new_tablelen must be power of 2 and new_tablelen == (1 << + new_tablelenbits) must hold. */ +static int map_resize(nghttp3_map *map, uint32_t new_tablelen, + uint32_t new_tablelenbits) { uint32_t i; nghttp3_map_bucket *new_table; nghttp3_map_bucket *bkt; - nghttp3_ksl_it it; int rv; + (void)rv; new_table = nghttp3_mem_calloc(map->mem, new_tablelen, sizeof(nghttp3_map_bucket)); @@ -203,64 +197,46 @@ static int map_resize(nghttp3_map *map, uint32_t new_tablelen) { for (i = 0; i < map->tablelen; ++i) { bkt = &map->table[i]; - - if (bkt->ptr) { - rv = map_insert(map, new_table, new_tablelen, bkt->ptr); - if (rv != 0) { - goto fail; - } - assert(bkt->ksl == NULL || nghttp3_ksl_len(bkt->ksl) == 0); + if (bkt->data == NULL) { continue; } + rv = insert(new_table, new_tablelen, new_tablelenbits, bkt->hash, bkt->key, + bkt->data); - if (bkt->ksl) { - for (it = nghttp3_ksl_begin(bkt->ksl); !nghttp3_ksl_it_end(&it); - nghttp3_ksl_it_next(&it)) { - rv = map_insert(map, new_table, new_tablelen, nghttp3_ksl_it_get(&it)); - if (rv != 0) { - goto fail; - } - } - } - } - - for (i = 0; i < map->tablelen; ++i) { - bkt = &map->table[i]; - if (bkt->ksl) { - nghttp3_ksl_free(bkt->ksl); - nghttp3_mem_free(map->mem, bkt->ksl); - } + assert(0 == rv); } nghttp3_mem_free(map->mem, map->table); map->tablelen = new_tablelen; + map->tablelenbits = new_tablelenbits; map->table = new_table; return 0; - -fail: - for (i = 0; i < new_tablelen; ++i) { - bkt = &new_table[i]; - if (bkt->ksl) { - nghttp3_ksl_free(bkt->ksl); - nghttp3_mem_free(map->mem, bkt->ksl); - } - } - - return rv; } -int nghttp3_map_insert(nghttp3_map *map, nghttp3_map_entry *new_entry) { +int nghttp3_map_insert(nghttp3_map *map, nghttp3_map_key_type key, void *data) { int rv; + assert(data); + /* Load factor is 0.75 */ if ((map->size + 1) * 4 > map->tablelen * 3) { - rv = map_resize(map, map->tablelen * 2); - if (rv != 0) { - return rv; + if (map->tablelen) { + rv = map_resize(map, map->tablelen * 2, map->tablelenbits + 1); + if (rv != 0) { + return rv; + } + } else { + rv = map_resize(map, 1 << NGHTTP3_INITIAL_TABLE_LENBITS, + NGHTTP3_INITIAL_TABLE_LENBITS); + if (rv != 0) { + return rv; + } } } - rv = map_insert(map, map->table, map->tablelen, new_entry); + + rv = insert(map->table, map->tablelen, map->tablelenbits, hash(key), key, + data); if (rv != 0) { return rv; } @@ -268,68 +244,93 @@ int nghttp3_map_insert(nghttp3_map *map, nghttp3_map_entry *new_entry) { return 0; } -nghttp3_map_entry *nghttp3_map_find(nghttp3_map *map, key_type key) { - nghttp3_map_bucket *bkt = &map->table[hash(key, map->tablelen)]; - nghttp3_ksl_it it; +void *nghttp3_map_find(nghttp3_map *map, nghttp3_map_key_type key) { + uint32_t h; + size_t idx; + nghttp3_map_bucket *bkt; + size_t d = 0; - if (bkt->ptr) { - if (bkt->ptr->key == key) { - return bkt->ptr; - } + if (map->size == 0) { return NULL; } - if (bkt->ksl) { - it = nghttp3_ksl_lower_bound(bkt->ksl, &key); - if (nghttp3_ksl_it_end(&it) || - *(key_type *)nghttp3_ksl_it_key(&it) != key) { + h = hash(key); + idx = h2idx(h, map->tablelenbits); + + for (;;) { + bkt = &map->table[idx]; + + if (bkt->data == NULL || + d > distance(map->tablelen, map->tablelenbits, bkt, idx)) { return NULL; } - return nghttp3_ksl_it_get(&it); - } - return NULL; + if (bkt->key == key) { + return bkt->data; + } + + ++d; + idx = (idx + 1) & (map->tablelen - 1); + } } -int nghttp3_map_remove(nghttp3_map *map, key_type key) { - nghttp3_map_bucket *bkt = &map->table[hash(key, map->tablelen)]; - int rv; +int nghttp3_map_remove(nghttp3_map *map, nghttp3_map_key_type key) { + uint32_t h; + size_t idx, didx; + nghttp3_map_bucket *bkt; + size_t d = 0; - if (bkt->ptr) { - if (bkt->ptr->key == key) { - bkt->ptr = NULL; - --map->size; - return 0; - } + if (map->size == 0) { return NGHTTP3_ERR_INVALID_ARGUMENT; } - if (bkt->ksl) { - rv = nghttp3_ksl_remove(bkt->ksl, NULL, &key); - if (rv != 0) { - return rv; + h = hash(key); + idx = h2idx(h, map->tablelenbits); + + for (;;) { + bkt = &map->table[idx]; + + if (bkt->data == NULL || + d > distance(map->tablelen, map->tablelenbits, bkt, idx)) { + return NGHTTP3_ERR_INVALID_ARGUMENT; } - --map->size; - return 0; - } - return NGHTTP3_ERR_INVALID_ARGUMENT; -} + if (bkt->key == key) { + map_bucket_set_data(bkt, 0, 0, NULL); -void nghttp3_map_clear(nghttp3_map *map) { - uint32_t i; - nghttp3_map_bucket *bkt; + didx = idx; + idx = (idx + 1) & (map->tablelen - 1); - for (i = 0; i < map->tablelen; ++i) { - bkt = &map->table[i]; - bkt->ptr = NULL; - if (bkt->ksl) { - nghttp3_ksl_free(bkt->ksl); - nghttp3_mem_free(map->mem, bkt->ksl); - bkt->ksl = NULL; + for (;;) { + bkt = &map->table[idx]; + if (bkt->data == NULL || + distance(map->tablelen, map->tablelenbits, bkt, idx) == 0) { + break; + } + + map->table[didx] = *bkt; + map_bucket_set_data(bkt, 0, 0, NULL); + didx = idx; + + idx = (idx + 1) & (map->tablelen - 1); + } + + --map->size; + + return 0; } + + ++d; + idx = (idx + 1) & (map->tablelen - 1); + } +} + +void nghttp3_map_clear(nghttp3_map *map) { + if (map->tablelen == 0) { + return; } + memset(map->table, 0, sizeof(*map->table) * map->tablelen); map->size = 0; } diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_map.h b/deps/ngtcp2/nghttp3/lib/nghttp3_map.h index 2eae2e7cb72..79dff0286bc 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_map.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_map.h @@ -34,21 +34,15 @@ #include #include "nghttp3_mem.h" -#include "nghttp3_ksl.h" /* Implementation of unordered map */ -typedef uint64_t key_type; - -typedef struct nghttp3_map_entry nghttp3_map_entry; - -struct nghttp3_map_entry { - key_type key; -}; +typedef uint64_t nghttp3_map_key_type; typedef struct nghttp3_map_bucket { - nghttp3_map_entry *ptr; - nghttp3_ksl *ksl; + uint32_t hash; + nghttp3_map_key_type key; + void *data; } nghttp3_map_bucket; typedef struct nghttp3_map { @@ -56,18 +50,13 @@ typedef struct nghttp3_map { const nghttp3_mem *mem; size_t size; uint32_t tablelen; + uint32_t tablelenbits; } nghttp3_map; /* * Initializes the map |map|. - * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: - * - * NGHTTP3_ERR_NOMEM - * Out of memory */ -int nghttp3_map_init(nghttp3_map *map, const nghttp3_mem *mem); +void nghttp3_map_init(nghttp3_map *map, const nghttp3_mem *mem); /* * Deallocates any resources allocated for |map|. The stored entries @@ -79,21 +68,14 @@ void nghttp3_map_free(nghttp3_map *map); /* * Deallocates each entries using |func| function and any resources * allocated for |map|. The |func| function is responsible for freeing - * given the |entry| object. The |ptr| will be passed to the |func| as + * given the |data| object. The |ptr| will be passed to the |func| as * send argument. The return value of the |func| will be ignored. */ -void nghttp3_map_each_free(nghttp3_map *map, - int (*func)(nghttp3_map_entry *entry, void *ptr), +void nghttp3_map_each_free(nghttp3_map *map, int (*func)(void *data, void *ptr), void *ptr); /* - * Initializes the |entry| with the |key|. All entries to be inserted - * to the map must be initialized with this function. - */ -void nghttp3_map_entry_init(nghttp3_map_entry *entry, key_type key); - -/* - * Inserts the new |entry| with the key |entry->key| to the map |map|. + * Inserts the new |data| with the |key| to the map |map|. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -103,25 +85,25 @@ void nghttp3_map_entry_init(nghttp3_map_entry *entry, key_type key); * NGHTTP3_ERR_NOMEM * Out of memory */ -int nghttp3_map_insert(nghttp3_map *map, nghttp3_map_entry *entry); +int nghttp3_map_insert(nghttp3_map *map, nghttp3_map_key_type key, void *data); /* - * Returns the entry associated by the key |key|. If there is no such - * entry, this function returns NULL. + * Returns the data associated by the key |key|. If there is no such + * data, this function returns NULL. */ -nghttp3_map_entry *nghttp3_map_find(nghttp3_map *map, key_type key); +void *nghttp3_map_find(nghttp3_map *map, nghttp3_map_key_type key); /* - * Removes the entry associated by the key |key| from the |map|. The - * removed entry is not freed by this function. + * Removes the data associated by the key |key| from the |map|. The + * removed data is not freed by this function. * * This function returns 0 if it succeeds, or one of the following * negative error codes: * * NGHTTP3_ERR_INVALID_ARGUMENT - * The entry associated by |key| does not exist. + * The data associated by |key| does not exist. */ -int nghttp3_map_remove(nghttp3_map *map, key_type key); +int nghttp3_map_remove(nghttp3_map *map, nghttp3_map_key_type key); /* * Removes all entries from |map|. @@ -134,21 +116,22 @@ void nghttp3_map_clear(nghttp3_map *map); size_t nghttp3_map_size(nghttp3_map *map); /* - * Applies the function |func| to each entry in the |map| with the + * Applies the function |func| to each data in the |map| with the * optional user supplied pointer |ptr|. * * If the |func| returns 0, this function calls the |func| with the - * next entry. If the |func| returns nonzero, it will not call the + * next data. If the |func| returns nonzero, it will not call the * |func| for further entries and return the return value of the * |func| immediately. Thus, this function returns 0 if all the * invocations of the |func| return 0, or nonzero value which the last * invocation of |func| returns. * - * Don't use this function to free each entry. Use + * Don't use this function to free each data. Use * nghttp3_map_each_free() instead. */ -int nghttp3_map_each(nghttp3_map *map, - int (*func)(nghttp3_map_entry *entry, void *ptr), +int nghttp3_map_each(nghttp3_map *map, int (*func)(void *data, void *ptr), void *ptr); +void nghttp3_map_print_distance(nghttp3_map *map); + #endif /* NGHTTP3_MAP_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_mem.c b/deps/ngtcp2/nghttp3/lib/nghttp3_mem.c index e5f93f10bda..0379e99b59c 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_mem.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_mem.c @@ -26,26 +26,28 @@ */ #include "nghttp3_mem.h" -static void *default_malloc(size_t size, void *mem_user_data) { - (void)mem_user_data; +#include + +static void *default_malloc(size_t size, void *user_data) { + (void)user_data; return malloc(size); } -static void default_free(void *ptr, void *mem_user_data) { - (void)mem_user_data; +static void default_free(void *ptr, void *user_data) { + (void)user_data; free(ptr); } -static void *default_calloc(size_t nmemb, size_t size, void *mem_user_data) { - (void)mem_user_data; +static void *default_calloc(size_t nmemb, size_t size, void *user_data) { + (void)user_data; return calloc(nmemb, size); } -static void *default_realloc(void *ptr, size_t size, void *mem_user_data) { - (void)mem_user_data; +static void *default_realloc(void *ptr, size_t size, void *user_data) { + (void)user_data; return realloc(ptr, size); } @@ -55,23 +57,68 @@ static nghttp3_mem mem_default = {NULL, default_malloc, default_free, const nghttp3_mem *nghttp3_mem_default(void) { return &mem_default; } +#ifndef MEMDEBUG void *nghttp3_mem_malloc(const nghttp3_mem *mem, size_t size) { - return mem->malloc(size, mem->mem_user_data); + return mem->malloc(size, mem->user_data); } void nghttp3_mem_free(const nghttp3_mem *mem, void *ptr) { - mem->free(ptr, mem->mem_user_data); -} - -void nghttp3_mem_free2(const nghttp3_free free_func, void *ptr, - void *mem_user_data) { - free_func(ptr, mem_user_data); + mem->free(ptr, mem->user_data); } void *nghttp3_mem_calloc(const nghttp3_mem *mem, size_t nmemb, size_t size) { - return mem->calloc(nmemb, size, mem->mem_user_data); + return mem->calloc(nmemb, size, mem->user_data); } void *nghttp3_mem_realloc(const nghttp3_mem *mem, void *ptr, size_t size) { - return mem->realloc(ptr, size, mem->mem_user_data); + return mem->realloc(ptr, size, mem->user_data); +} +#else /* MEMDEBUG */ +void *nghttp3_mem_malloc_debug(const nghttp3_mem *mem, size_t size, + const char *func, const char *file, + size_t line) { + void *nptr = mem->malloc(size, mem->user_data); + + fprintf(stderr, "malloc %p size=%zu in %s at %s:%zu\n", nptr, size, func, + file, line); + + return nptr; +} + +void nghttp3_mem_free_debug(const nghttp3_mem *mem, void *ptr, const char *func, + const char *file, size_t line) { + fprintf(stderr, "free ptr=%p in %s at %s:%zu\n", ptr, func, file, line); + + mem->free(ptr, mem->user_data); +} + +void nghttp3_mem_free2_debug(const nghttp3_free free_func, void *ptr, + void *user_data, const char *func, + const char *file, size_t line) { + fprintf(stderr, "free ptr=%p in %s at %s:%zu\n", ptr, func, file, line); + + free_func(ptr, user_data); +} + +void *nghttp3_mem_calloc_debug(const nghttp3_mem *mem, size_t nmemb, + size_t size, const char *func, const char *file, + size_t line) { + void *nptr = mem->calloc(nmemb, size, mem->user_data); + + fprintf(stderr, "calloc %p nmemb=%zu size=%zu in %s at %s:%zu\n", nptr, nmemb, + size, func, file, line); + + return nptr; +} + +void *nghttp3_mem_realloc_debug(const nghttp3_mem *mem, void *ptr, size_t size, + const char *func, const char *file, + size_t line) { + void *nptr = mem->realloc(ptr, size, mem->user_data); + + fprintf(stderr, "realloc %p ptr=%p size=%zu in %s at %s:%zu\n", nptr, ptr, + size, func, file, line); + + return nptr; } +#endif /* MEMDEBUG */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_mem.h b/deps/ngtcp2/nghttp3/lib/nghttp3_mem.h index 55ef86b4f92..d6c3ada6f7e 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_mem.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_mem.h @@ -35,11 +35,46 @@ /* Convenient wrapper functions to call allocator function in |mem|. */ +#ifndef MEMDEBUG void *nghttp3_mem_malloc(const nghttp3_mem *mem, size_t size); void nghttp3_mem_free(const nghttp3_mem *mem, void *ptr); -void nghttp3_mem_free2(const nghttp3_free free_func, void *ptr, - void *mem_user_data); void *nghttp3_mem_calloc(const nghttp3_mem *mem, size_t nmemb, size_t size); void *nghttp3_mem_realloc(const nghttp3_mem *mem, void *ptr, size_t size); +#else /* MEMDEBUG */ +void *nghttp3_mem_malloc_debug(const nghttp3_mem *mem, size_t size, + const char *func, const char *file, size_t line); + +# define nghttp3_mem_malloc(MEM, SIZE) \ + nghttp3_mem_malloc_debug((MEM), (SIZE), __func__, __FILE__, __LINE__) + +void nghttp3_mem_free_debug(const nghttp3_mem *mem, void *ptr, const char *func, + const char *file, size_t line); + +# define nghttp3_mem_free(MEM, PTR) \ + nghttp3_mem_free_debug((MEM), (PTR), __func__, __FILE__, __LINE__) + +void nghttp3_mem_free2_debug(nghttp3_free free_func, void *ptr, void *user_data, + const char *func, const char *file, size_t line); + +# define nghttp3_mem_free2(FREE_FUNC, PTR, USER_DATA) \ + nghttp3_mem_free2_debug((FREE_FUNC), (PTR), (USER_DATA), __func__, \ + __FILE__, __LINE__) + +void *nghttp3_mem_calloc_debug(const nghttp3_mem *mem, size_t nmemb, + size_t size, const char *func, const char *file, + size_t line); + +# define nghttp3_mem_calloc(MEM, NMEMB, SIZE) \ + nghttp3_mem_calloc_debug((MEM), (NMEMB), (SIZE), __func__, __FILE__, \ + __LINE__) + +void *nghttp3_mem_realloc_debug(const nghttp3_mem *mem, void *ptr, size_t size, + const char *func, const char *file, + size_t line); + +# define nghttp3_mem_realloc(MEM, PTR, SIZE) \ + nghttp3_mem_realloc_debug((MEM), (PTR), (SIZE), __func__, __FILE__, \ + __LINE__) +#endif /* MEMDEBUG */ #endif /* NGHTTP3_MEM_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_objalloc.c b/deps/ngtcp2/nghttp3/lib/nghttp3_objalloc.c new file mode 100644 index 00000000000..0c97860136e --- /dev/null +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_objalloc.c @@ -0,0 +1,41 @@ +/* + * nghttp3 + * + * Copyright (c) 2022 nghttp3 contributors + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "nghttp3_objalloc.h" + +void nghttp3_objalloc_init(nghttp3_objalloc *objalloc, size_t blklen, + const nghttp3_mem *mem) { + nghttp3_balloc_init(&objalloc->balloc, blklen, mem); + nghttp3_opl_init(&objalloc->opl); +} + +void nghttp3_objalloc_free(nghttp3_objalloc *objalloc) { + nghttp3_balloc_free(&objalloc->balloc); +} + +void nghttp3_objalloc_clear(nghttp3_objalloc *objalloc) { + nghttp3_opl_clear(&objalloc->opl); + nghttp3_balloc_clear(&objalloc->balloc); +} diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_objalloc.h b/deps/ngtcp2/nghttp3/lib/nghttp3_objalloc.h new file mode 100644 index 00000000000..da39447a872 --- /dev/null +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_objalloc.h @@ -0,0 +1,141 @@ +/* + * nghttp3 + * + * Copyright (c) 2022 nghttp3 contributors + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP3_OBJALLOC_H +#define NGHTTP3_OBJALLOC_H + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +#include "nghttp3_balloc.h" +#include "nghttp3_opl.h" +#include "nghttp3_macro.h" +#include "nghttp3_mem.h" + +/* + * nghttp3_objalloc combines nghttp3_balloc and nghttp3_opl, and + * provides an object pool with the custom allocator to reduce the + * allocation and deallocation overheads for small objects. + */ +typedef struct nghttp3_objalloc { + nghttp3_balloc balloc; + nghttp3_opl opl; +} nghttp3_objalloc; + +/* + * nghttp3_objalloc_init initializes |objalloc|. |blklen| is directly + * passed to nghttp3_balloc_init. + */ +void nghttp3_objalloc_init(nghttp3_objalloc *objalloc, size_t blklen, + const nghttp3_mem *mem); + +/* + * nghttp3_objalloc_free releases all allocated resources. + */ +void nghttp3_objalloc_free(nghttp3_objalloc *objalloc); + +/* + * nghttp3_objalloc_clear releases all allocated resources and + * initializes its state. + */ +void nghttp3_objalloc_clear(nghttp3_objalloc *objalloc); + +#ifndef NOMEMPOOL +# define nghttp3_objalloc_def(NAME, TYPE, OPLENTFIELD) \ + inline static void nghttp3_objalloc_##NAME##_init( \ + nghttp3_objalloc *objalloc, size_t nmemb, const nghttp3_mem *mem) { \ + nghttp3_objalloc_init( \ + objalloc, ((sizeof(TYPE) + 0xfu) & ~(uintptr_t)0xfu) * nmemb, mem); \ + } \ + \ + inline static TYPE *nghttp3_objalloc_##NAME##_get( \ + nghttp3_objalloc *objalloc) { \ + nghttp3_opl_entry *oplent = nghttp3_opl_pop(&objalloc->opl); \ + TYPE *obj; \ + int rv; \ + \ + if (!oplent) { \ + rv = nghttp3_balloc_get(&objalloc->balloc, (void **)&obj, \ + sizeof(TYPE)); \ + if (rv != 0) { \ + return NULL; \ + } \ + \ + return obj; \ + } \ + \ + return nghttp3_struct_of(oplent, TYPE, OPLENTFIELD); \ + } \ + \ + inline static TYPE *nghttp3_objalloc_##NAME##_len_get( \ + nghttp3_objalloc *objalloc, size_t len) { \ + nghttp3_opl_entry *oplent = nghttp3_opl_pop(&objalloc->opl); \ + TYPE *obj; \ + int rv; \ + \ + if (!oplent) { \ + rv = nghttp3_balloc_get(&objalloc->balloc, (void **)&obj, len); \ + if (rv != 0) { \ + return NULL; \ + } \ + \ + return obj; \ + } \ + \ + return nghttp3_struct_of(oplent, TYPE, OPLENTFIELD); \ + } \ + \ + inline static void nghttp3_objalloc_##NAME##_release( \ + nghttp3_objalloc *objalloc, TYPE *obj) { \ + nghttp3_opl_push(&objalloc->opl, &obj->OPLENTFIELD); \ + } +#else /* NOMEMPOOL */ +# define nghttp3_objalloc_def(NAME, TYPE, OPLENTFIELD) \ + inline static void nghttp3_objalloc_##NAME##_init( \ + nghttp3_objalloc *objalloc, size_t nmemb, const nghttp3_mem *mem) { \ + nghttp3_objalloc_init( \ + objalloc, ((sizeof(TYPE) + 0xfu) & ~(uintptr_t)0xfu) * nmemb, mem); \ + } \ + \ + inline static TYPE *nghttp3_objalloc_##NAME##_get( \ + nghttp3_objalloc *objalloc) { \ + return nghttp3_mem_malloc(objalloc->balloc.mem, sizeof(TYPE)); \ + } \ + \ + inline static TYPE *nghttp3_objalloc_##NAME##_len_get( \ + nghttp3_objalloc *objalloc, size_t len) { \ + return nghttp3_mem_malloc(objalloc->balloc.mem, len); \ + } \ + \ + inline static void nghttp3_objalloc_##NAME##_release( \ + nghttp3_objalloc *objalloc, TYPE *obj) { \ + nghttp3_mem_free(objalloc->balloc.mem, obj); \ + } +#endif /* NOMEMPOOL */ + +#endif /* NGHTTP3_OBJALLOC_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_opl.c b/deps/ngtcp2/nghttp3/lib/nghttp3_opl.c new file mode 100644 index 00000000000..eb8ebdd1854 --- /dev/null +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_opl.c @@ -0,0 +1,47 @@ +/* + * nghttp3 + * + * Copyright (c) 2022 nghttp3 contributors + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "nghttp3_opl.h" + +void nghttp3_opl_init(nghttp3_opl *opl) { opl->head = NULL; } + +void nghttp3_opl_push(nghttp3_opl *opl, nghttp3_opl_entry *ent) { + ent->next = opl->head; + opl->head = ent; +} + +nghttp3_opl_entry *nghttp3_opl_pop(nghttp3_opl *opl) { + nghttp3_opl_entry *ent = opl->head; + + if (!ent) { + return NULL; + } + + opl->head = ent->next; + + return ent; +} + +void nghttp3_opl_clear(nghttp3_opl *opl) { opl->head = NULL; } diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_opl.h b/deps/ngtcp2/nghttp3/lib/nghttp3_opl.h new file mode 100644 index 00000000000..8c8a4f2051b --- /dev/null +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_opl.h @@ -0,0 +1,66 @@ +/* + * nghttp3 + * + * Copyright (c) 2022 nghttp3 contributors + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP3_OPL_H +#define NGHTTP3_OPL_H + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +typedef struct nghttp3_opl_entry nghttp3_opl_entry; + +struct nghttp3_opl_entry { + nghttp3_opl_entry *next; +}; + +/* + * nghttp3_opl is an object memory pool. + */ +typedef struct nghttp3_opl { + nghttp3_opl_entry *head; +} nghttp3_opl; + +/* + * nghttp3_opl_init initializes |opl|. + */ +void nghttp3_opl_init(nghttp3_opl *opl); + +/* + * nghttp3_opl_push inserts |ent| to |opl| head. + */ +void nghttp3_opl_push(nghttp3_opl *opl, nghttp3_opl_entry *ent); + +/* + * nghttp3_opl_pop removes the first nghttp3_opl_entry from |opl| and + * returns it. If |opl| does not have any entry, it returns NULL. + */ +nghttp3_opl_entry *nghttp3_opl_pop(nghttp3_opl *opl); + +void nghttp3_opl_clear(nghttp3_opl *opl); + +#endif /* NGHTTP3_OPL_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_pq.h b/deps/ngtcp2/nghttp3/lib/nghttp3_pq.h index f1f369231df..c1a54f505bb 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_pq.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_pq.h @@ -111,7 +111,7 @@ size_t nghttp3_pq_size(const nghttp3_pq *pq); typedef int (*nghttp3_pq_item_cb)(nghttp3_pq_entry *item, void *arg); /* - * Applys |fun| to each item in |pq|. The |arg| is passed as arg + * Applies |fun| to each item in |pq|. The |arg| is passed as arg * parameter to callback function. This function must not change the * ordering key. If the return value from callback is nonzero, this * function returns 1 immediately without iterating remaining items. diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_qpack.c b/deps/ngtcp2/nghttp3/lib/nghttp3_qpack.c index 6837942687a..ddb3dd6d84b 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_qpack.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_qpack.c @@ -168,8 +168,8 @@ static nghttp3_qpack_static_entry token_stable[] = { /* Make scalar initialization form of nghttp3_qpack_static_entry */ #define MAKE_STATIC_HD(N, V, T) \ { \ - {NULL, NULL, (uint8_t *)(N), sizeof((N)) - 1, -1}, \ - {NULL, NULL, (uint8_t *)(V), sizeof((V)) - 1, -1}, T \ + {NULL, (uint8_t *)(N), sizeof((N)) - 1, -1}, \ + {NULL, (uint8_t *)(V), sizeof((V)) - 1, -1}, T \ } static nghttp3_qpack_static_header stable[] = { @@ -775,12 +775,12 @@ static void qpack_map_remove(nghttp3_qpack_map *map, nghttp3_qpack_entry *ent) { /* * qpack_context_can_reference returns nonzero if dynamic table entry * at |absidx| can be referenced. In other words, it is within - * ctx->max_dtable_size. + * ctx->max_dtable_capacity. */ static int qpack_context_can_reference(nghttp3_qpack_context *ctx, uint64_t absidx) { nghttp3_qpack_entry *ent = nghttp3_qpack_context_dtable_get(ctx, absidx); - return ctx->dtable_sum - ent->sum <= ctx->max_dtable_size; + return ctx->dtable_sum - ent->sum <= ctx->max_dtable_capacity; } /* |*ppb_match| (post-base match), if it is not NULL, is always exact @@ -824,8 +824,14 @@ static void encoder_qpack_map_find(nghttp3_qpack_encoder *encoder, } /* - * qpack_context_init initializes |ctx|. |max_dtable_size| is the - * maximum size of dynamic table. |mem| is a memory allocator. + * qpack_context_init initializes |ctx|. |hard_max_dtable_capacity| + * is the upper bound of the dynamic table capacity. |mem| is a + * memory allocator. + * + * The maximum dynamic table size is governed by + * ctx->max_dtable_capacity and it is initialized to 0. + * |hard_max_dtable_capacity| is the upper bound of + * ctx->max_dtable_capacity. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -834,7 +840,8 @@ static void encoder_qpack_map_find(nghttp3_qpack_encoder *encoder, * Out of memory. */ static int qpack_context_init(nghttp3_qpack_context *ctx, - size_t max_dtable_size, size_t max_blocked, + size_t hard_max_dtable_capacity, + size_t max_blocked_streams, const nghttp3_mem *mem) { int rv; size_t len = 4096 / NGHTTP3_QPACK_ENTRY_OVERHEAD; @@ -852,9 +859,9 @@ static int qpack_context_init(nghttp3_qpack_context *ctx, ctx->mem = mem; ctx->dtable_size = 0; ctx->dtable_sum = 0; - ctx->hard_max_dtable_size = max_dtable_size; - ctx->max_dtable_size = 0; - ctx->max_blocked = max_blocked; + ctx->hard_max_dtable_capacity = hard_max_dtable_capacity; + ctx->max_dtable_capacity = 0; + ctx->max_blocked_streams = max_blocked_streams; ctx->next_absidx = 0; ctx->bad = 0; @@ -896,25 +903,19 @@ static int max_cnt_greater(const nghttp3_ksl_key *lhs, } int nghttp3_qpack_encoder_init(nghttp3_qpack_encoder *encoder, - size_t max_dtable_size, size_t max_blocked, + size_t hard_max_dtable_capacity, const nghttp3_mem *mem) { int rv; - rv = qpack_context_init(&encoder->ctx, max_dtable_size, max_blocked, mem); + rv = qpack_context_init(&encoder->ctx, hard_max_dtable_capacity, 0, mem); if (rv != 0) { return rv; } - rv = nghttp3_map_init(&encoder->streams, mem); - if (rv != 0) { - goto streams_init_fail; - } + nghttp3_map_init(&encoder->streams, mem); - rv = nghttp3_ksl_init(&encoder->blocked_streams, max_cnt_greater, - sizeof(nghttp3_blocked_streams_key), mem); - if (rv != 0) { - goto blocked_streams_init_fail; - } + nghttp3_ksl_init(&encoder->blocked_streams, max_cnt_greater, + sizeof(nghttp3_blocked_streams_key), mem); qpack_map_init(&encoder->dtable_map); nghttp3_pq_init(&encoder->min_cnts, ref_min_cnt_less, mem); @@ -929,19 +930,11 @@ int nghttp3_qpack_encoder_init(nghttp3_qpack_encoder *encoder, nghttp3_qpack_read_state_reset(&encoder->rstate); return 0; - -blocked_streams_init_fail: - nghttp3_map_free(&encoder->streams); -streams_init_fail: - qpack_context_free(&encoder->ctx); - - return rv; } -static int map_stream_free(nghttp3_map_entry *entry, void *ptr) { +static int map_stream_free(void *data, void *ptr) { const nghttp3_mem *mem = ptr; - nghttp3_qpack_stream *stream = - nghttp3_struct_of(entry, nghttp3_qpack_stream, me); + nghttp3_qpack_stream *stream = data; nghttp3_qpack_stream_del(stream, mem); return 0; } @@ -955,49 +948,27 @@ void nghttp3_qpack_encoder_free(nghttp3_qpack_encoder *encoder) { qpack_context_free(&encoder->ctx); } -int nghttp3_qpack_encoder_set_max_dtable_size(nghttp3_qpack_encoder *encoder, - size_t max_dtable_size) { - if (encoder->ctx.hard_max_dtable_size < max_dtable_size) { - return NGHTTP3_ERR_INVALID_ARGUMENT; - } +void nghttp3_qpack_encoder_set_max_dtable_capacity( + nghttp3_qpack_encoder *encoder, size_t max_dtable_capacity) { + max_dtable_capacity = + nghttp3_min(max_dtable_capacity, encoder->ctx.hard_max_dtable_capacity); - if (encoder->ctx.max_dtable_size == max_dtable_size) { - return 0; + if (encoder->ctx.max_dtable_capacity == max_dtable_capacity) { + return; } encoder->flags |= NGHTTP3_QPACK_ENCODER_FLAG_PENDING_SET_DTABLE_CAP; - if (encoder->min_dtable_update > max_dtable_size) { - encoder->min_dtable_update = max_dtable_size; - encoder->ctx.max_dtable_size = max_dtable_size; + if (encoder->min_dtable_update > max_dtable_capacity) { + encoder->min_dtable_update = max_dtable_capacity; + encoder->ctx.max_dtable_capacity = max_dtable_capacity; } - encoder->last_max_dtable_update = max_dtable_size; - - return 0; + encoder->last_max_dtable_update = max_dtable_capacity; } -int nghttp3_qpack_encoder_set_hard_max_dtable_size( - nghttp3_qpack_encoder *encoder, size_t hard_max_dtable_size) { - /* TODO This is not ideal. */ - if (encoder->ctx.hard_max_dtable_size) { - return NGHTTP3_ERR_INVALID_STATE; - } - - encoder->ctx.hard_max_dtable_size = hard_max_dtable_size; - - return 0; -} - -int nghttp3_qpack_encoder_set_max_blocked(nghttp3_qpack_encoder *encoder, - size_t max_blocked) { - /* TODO This is not ideal. */ - if (encoder->ctx.max_blocked) { - return NGHTTP3_ERR_INVALID_STATE; - } - - encoder->ctx.max_blocked = max_blocked; - - return 0; +void nghttp3_qpack_encoder_set_max_blocked_streams( + nghttp3_qpack_encoder *encoder, size_t max_blocked_streams) { + encoder->ctx.max_blocked_streams = max_blocked_streams; } uint64_t nghttp3_qpack_encoder_get_min_cnt(nghttp3_qpack_encoder *encoder) { @@ -1015,7 +986,7 @@ void nghttp3_qpack_encoder_shrink_dtable(nghttp3_qpack_encoder *encoder) { size_t len; nghttp3_qpack_entry *ent; - if (encoder->ctx.dtable_size <= encoder->ctx.max_dtable_size) { + if (encoder->ctx.dtable_size <= encoder->ctx.max_dtable_capacity) { return; } @@ -1023,7 +994,7 @@ void nghttp3_qpack_encoder_shrink_dtable(nghttp3_qpack_encoder *encoder) { min_cnt = nghttp3_qpack_encoder_get_min_cnt(encoder); } - for (; encoder->ctx.dtable_size > encoder->ctx.max_dtable_size;) { + for (; encoder->ctx.dtable_size > encoder->ctx.max_dtable_capacity;) { len = nghttp3_ringbuf_len(dtable); ent = *(nghttp3_qpack_entry **)nghttp3_ringbuf_get(dtable, len - 1); if (ent->absidx + 1 == min_cnt) { @@ -1069,7 +1040,8 @@ static int qpack_encoder_add_stream_ref(nghttp3_qpack_encoder *encoder, assert(rv == NGHTTP3_ERR_NOMEM); return rv; } - rv = nghttp3_map_insert(&encoder->streams, &stream->me); + rv = nghttp3_map_insert(&encoder->streams, + (nghttp3_map_key_type)stream->stream_id, stream); if (rv != 0) { assert(rv == NGHTTP3_ERR_NOMEM); nghttp3_qpack_stream_del(stream, mem); @@ -1110,7 +1082,8 @@ static void qpack_encoder_remove_stream(nghttp3_qpack_encoder *encoder, size_t i, len; nghttp3_qpack_header_block_ref *ref; - nghttp3_map_remove(&encoder->streams, stream->me.key); + nghttp3_map_remove(&encoder->streams, + (nghttp3_map_key_type)stream->stream_id); len = nghttp3_ringbuf_len(&stream->refs); for (i = 0; i < len; ++i) { @@ -1190,8 +1163,8 @@ int nghttp3_qpack_encoder_encode(nghttp3_qpack_encoder *encoder, blocked_stream = stream && nghttp3_qpack_encoder_stream_is_blocked(encoder, stream); allow_blocking = - blocked_stream || - encoder->ctx.max_blocked > nghttp3_ksl_len(&encoder->blocked_streams); + blocked_stream || encoder->ctx.max_blocked_streams > + nghttp3_ksl_len(&encoder->blocked_streams); DEBUGF("qpack::encode: stream %ld blocked=%d allow_blocking=%d\n", stream_id, blocked_stream, allow_blocking); @@ -1265,7 +1238,7 @@ int nghttp3_qpack_encoder_process_dtable_update(nghttp3_qpack_encoder *encoder, nghttp3_qpack_encoder_shrink_dtable(encoder); - if (encoder->ctx.max_dtable_size < encoder->ctx.dtable_size || + if (encoder->ctx.max_dtable_capacity < encoder->ctx.dtable_size || !(encoder->flags & NGHTTP3_QPACK_ENCODER_FLAG_PENDING_SET_DTABLE_CAP)) { return 0; } @@ -1286,7 +1259,7 @@ int nghttp3_qpack_encoder_process_dtable_update(nghttp3_qpack_encoder *encoder, encoder->flags &= (uint8_t)~NGHTTP3_QPACK_ENCODER_FLAG_PENDING_SET_DTABLE_CAP; encoder->min_dtable_update = SIZE_MAX; - encoder->ctx.max_dtable_size = encoder->last_max_dtable_update; + encoder->ctx.max_dtable_capacity = encoder->last_max_dtable_update; return 0; } @@ -1300,9 +1273,7 @@ int nghttp3_qpack_encoder_write_set_dtable_cap(nghttp3_qpack_encoder *encoder, nghttp3_qpack_stream * nghttp3_qpack_encoder_find_stream(nghttp3_qpack_encoder *encoder, int64_t stream_id) { - nghttp3_map_entry *me = - nghttp3_map_find(&encoder->streams, (uint64_t)stream_id); - return me == NULL ? NULL : nghttp3_struct_of(me, nghttp3_qpack_stream, me); + return nghttp3_map_find(&encoder->streams, (nghttp3_map_key_type)stream_id); } int nghttp3_qpack_encoder_stream_is_blocked(nghttp3_qpack_encoder *encoder, @@ -1352,7 +1323,7 @@ qpack_encoder_decide_indexing_mode(nghttp3_qpack_encoder *encoder, } if (table_space(nv->namelen, nv->valuelen) > - encoder->ctx.max_dtable_size * 3 / 4) { + encoder->ctx.max_dtable_capacity * 3 / 4) { return NGHTTP3_QPACK_INDEXING_MODE_LITERAL; } @@ -1372,8 +1343,8 @@ static int qpack_encoder_can_index(nghttp3_qpack_encoder *encoder, size_t need, nghttp3_qpack_entry *min_ent, *last_ent; nghttp3_ringbuf *dtable = &encoder->ctx.dtable; - if (encoder->ctx.max_dtable_size > encoder->ctx.dtable_size) { - avail = encoder->ctx.max_dtable_size - encoder->ctx.dtable_size; + if (encoder->ctx.max_dtable_capacity > encoder->ctx.dtable_size) { + avail = encoder->ctx.max_dtable_capacity - encoder->ctx.dtable_size; if (need <= avail) { return 1; } @@ -1385,7 +1356,7 @@ static int qpack_encoder_can_index(nghttp3_qpack_encoder *encoder, size_t need, } if (min_cnt == UINT64_MAX) { - return encoder->ctx.max_dtable_size >= need; + return encoder->ctx.max_dtable_capacity >= need; } min_ent = nghttp3_qpack_context_dtable_get(&encoder->ctx, min_cnt - 1); @@ -1434,8 +1405,8 @@ static int qpack_encoder_can_index_duplicate(nghttp3_qpack_encoder *encoder, */ static int qpack_context_check_draining(nghttp3_qpack_context *ctx, uint64_t absidx) { - const size_t safe = - ctx->max_dtable_size - nghttp3_min(512, ctx->max_dtable_size * 1 / 8); + const size_t safe = ctx->max_dtable_capacity - + nghttp3_min(512, ctx->max_dtable_capacity * 1 / 8); nghttp3_qpack_entry *ent = nghttp3_qpack_context_dtable_get(ctx, absidx); return ctx->dtable_sum - ent->sum > safe; @@ -1714,7 +1685,7 @@ int nghttp3_qpack_stream_new(nghttp3_qpack_stream **pstream, int64_t stream_id, nghttp3_pq_init(&stream->max_cnts, ref_max_cnt_greater, mem); - stream->me.key = (uint64_t)stream_id; + stream->stream_id = stream_id; *pstream = stream; @@ -2059,9 +2030,9 @@ int nghttp3_qpack_context_dtable_add(nghttp3_qpack_context *ctx, space = table_space(qnv->name->len, qnv->value->len); - assert(space <= ctx->max_dtable_size); + assert(space <= ctx->max_dtable_capacity); - while (ctx->dtable_size + space > ctx->max_dtable_size) { + while (ctx->dtable_size + space > ctx->max_dtable_capacity) { i = nghttp3_ringbuf_len(&ctx->dtable); assert(i); ent = *(nghttp3_qpack_entry **)nghttp3_ringbuf_get(&ctx->dtable, i - 1); @@ -2265,7 +2236,7 @@ int nghttp3_qpack_encoder_block_stream(nghttp3_qpack_encoder *encoder, nghttp3_struct_of(nghttp3_pq_top(&stream->max_cnts), nghttp3_qpack_header_block_ref, max_cnts_pe) ->max_cnt, - stream->me.key}; + (uint64_t)stream->stream_id}; return nghttp3_ksl_insert(&encoder->blocked_streams, NULL, &bsk, stream); } @@ -2276,7 +2247,7 @@ void nghttp3_qpack_encoder_unblock_stream(nghttp3_qpack_encoder *encoder, nghttp3_struct_of(nghttp3_pq_top(&stream->max_cnts), nghttp3_qpack_header_block_ref, max_cnts_pe) ->max_cnt, - stream->me.key}; + (uint64_t)stream->stream_id}; nghttp3_ksl_it it; /* This is purely debugging purpose only */ @@ -2285,7 +2256,7 @@ void nghttp3_qpack_encoder_unblock_stream(nghttp3_qpack_encoder *encoder, assert(!nghttp3_ksl_it_end(&it)); assert(nghttp3_ksl_it_get(&it) == stream); - nghttp3_ksl_remove(&encoder->blocked_streams, NULL, &bsk); + nghttp3_ksl_remove_hint(&encoder->blocked_streams, NULL, &it, &bsk); } void nghttp3_qpack_encoder_unblock(nghttp3_qpack_encoder *encoder, @@ -2297,21 +2268,19 @@ void nghttp3_qpack_encoder_unblock(nghttp3_qpack_encoder *encoder, for (; !nghttp3_ksl_it_end(&it);) { bsk = *(nghttp3_blocked_streams_key *)nghttp3_ksl_it_key(&it); - nghttp3_ksl_remove(&encoder->blocked_streams, &it, &bsk); + nghttp3_ksl_remove_hint(&encoder->blocked_streams, &it, &it, &bsk); } } -void nghttp3_qpack_encoder_ack_header(nghttp3_qpack_encoder *encoder, - int64_t stream_id) { +int nghttp3_qpack_encoder_ack_header(nghttp3_qpack_encoder *encoder, + int64_t stream_id) { nghttp3_qpack_stream *stream = nghttp3_qpack_encoder_find_stream(encoder, stream_id); const nghttp3_mem *mem = encoder->ctx.mem; nghttp3_qpack_header_block_ref *ref; if (stream == NULL) { - /* This might be NGHTTP3_ERR_QPACK_DECODER_STREAM_ERROR, but we - don't create stream which does not use dynamic table. */ - return; + return NGHTTP3_ERR_QPACK_DECODER_STREAM_ERROR; } assert(nghttp3_ringbuf_len(&stream->refs)); @@ -2338,16 +2307,17 @@ void nghttp3_qpack_encoder_ack_header(nghttp3_qpack_encoder *encoder, nghttp3_qpack_header_block_ref_del(ref, mem); if (nghttp3_ringbuf_len(&stream->refs)) { - return; + return 0; } qpack_encoder_remove_stream(encoder, stream); nghttp3_qpack_stream_del(stream, mem); + + return 0; } -int nghttp3_qpack_encoder_add_insert_count(nghttp3_qpack_encoder *encoder, - uint64_t n) { +int nghttp3_qpack_encoder_add_icnt(nghttp3_qpack_encoder *encoder, uint64_t n) { if (n == 0 || encoder->ctx.next_absidx - encoder->krcnt < n) { return NGHTTP3_ERR_QPACK_DECODER_STREAM_ERROR; } @@ -2365,6 +2335,7 @@ void nghttp3_qpack_encoder_ack_everything(nghttp3_qpack_encoder *encoder) { nghttp3_pq_clear(&encoder->min_cnts); nghttp3_map_each_free(&encoder->streams, map_stream_free, (void *)encoder->ctx.mem); + nghttp3_map_clear(&encoder->streams); } void nghttp3_qpack_encoder_cancel_stream(nghttp3_qpack_encoder *encoder, @@ -2386,7 +2357,8 @@ void nghttp3_qpack_encoder_cancel_stream(nghttp3_qpack_encoder *encoder, nghttp3_qpack_stream_del(stream, mem); } -size_t nghttp3_qpack_encoder_get_num_blocked(nghttp3_qpack_encoder *encoder) { +size_t +nghttp3_qpack_encoder_get_num_blocked_streams(nghttp3_qpack_encoder *encoder) { return nghttp3_ksl_len(&encoder->blocked_streams); } @@ -2394,7 +2366,7 @@ int nghttp3_qpack_encoder_write_field_section_prefix( nghttp3_qpack_encoder *encoder, nghttp3_buf *pbuf, uint64_t ricnt, uint64_t base) { size_t max_ents = - encoder->ctx.hard_max_dtable_size / NGHTTP3_QPACK_ENTRY_OVERHEAD; + encoder->ctx.hard_max_dtable_capacity / NGHTTP3_QPACK_ENTRY_OVERHEAD; uint64_t encricnt = ricnt == 0 ? 0 : (ricnt % (2 * max_ents)) + 1; int sign = base < ricnt; uint64_t delta_base = sign ? ricnt - base - 1 : base - ricnt; @@ -2563,15 +2535,17 @@ nghttp3_ssize nghttp3_qpack_encoder_read_decoder(nghttp3_qpack_encoder *encoder, switch (encoder->opcode) { case NGHTTP3_QPACK_DS_OPCODE_ICNT_INCREMENT: - rv = nghttp3_qpack_encoder_add_insert_count(encoder, - encoder->rstate.left); + rv = nghttp3_qpack_encoder_add_icnt(encoder, encoder->rstate.left); if (rv != 0) { goto fail; } break; case NGHTTP3_QPACK_DS_OPCODE_SECTION_ACK: - nghttp3_qpack_encoder_ack_header(encoder, - (int64_t)encoder->rstate.left); + rv = nghttp3_qpack_encoder_ack_header(encoder, + (int64_t)encoder->rstate.left); + if (rv != 0) { + goto fail; + } break; case NGHTTP3_QPACK_DS_OPCODE_STREAM_CANCEL: nghttp3_qpack_encoder_cancel_stream(encoder, @@ -2661,11 +2635,13 @@ void nghttp3_qpack_read_state_reset(nghttp3_qpack_read_state *rstate) { } int nghttp3_qpack_decoder_init(nghttp3_qpack_decoder *decoder, - size_t max_dtable_size, size_t max_blocked, + size_t hard_max_dtable_capacity, + size_t max_blocked_streams, const nghttp3_mem *mem) { int rv; - rv = qpack_context_init(&decoder->ctx, max_dtable_size, max_blocked, mem); + rv = qpack_context_init(&decoder->ctx, hard_max_dtable_capacity, + max_blocked_streams, mem); if (rv != 0) { return rv; } @@ -2741,7 +2717,7 @@ static nghttp3_ssize qpack_read_string(nghttp3_qpack_read_state *rstate, /* * qpack_decoder_validate_index checks rstate->absidx is acceptable. * - * It returns 0 if it suceeds, or one of the following negative error + * It returns 0 if it succeeds, or one of the following negative error * codes: * * NGHTTP3_ERR_QPACK_FATAL @@ -2843,14 +2819,14 @@ nghttp3_ssize nghttp3_qpack_decoder_read_encoder(nghttp3_qpack_decoder *decoder, } if (decoder->opcode == NGHTTP3_QPACK_ES_OPCODE_SET_DTABLE_CAP) { - if (decoder->rstate.left > decoder->ctx.hard_max_dtable_size) { + DEBUGF("qpack::decode: Set dtable capacity to %" PRIu64 "\n", + decoder->rstate.left); + rv = nghttp3_qpack_decoder_set_max_dtable_capacity( + decoder, (size_t)decoder->rstate.left); + if (rv != 0) { rv = NGHTTP3_ERR_QPACK_ENCODER_STREAM_ERROR; goto fail; } - DEBUGF("qpack::decode: Set dtable capacity to %" PRIu64 "\n", - decoder->rstate.left); - nghttp3_qpack_decoder_set_dtable_cap(decoder, - (size_t)decoder->rstate.left); decoder->state = NGHTTP3_QPACK_ES_STATE_OPCODE; nghttp3_qpack_read_state_reset(&decoder->rstate); @@ -3036,6 +3012,7 @@ nghttp3_ssize nghttp3_qpack_decoder_read_encoder(nghttp3_qpack_decoder *decoder, default: /* Unreachable */ assert(0); + abort(); } if (rv != 0) { goto fail; @@ -3070,6 +3047,7 @@ nghttp3_ssize nghttp3_qpack_decoder_read_encoder(nghttp3_qpack_decoder *decoder, default: /* Unreachable */ assert(0); + abort(); } if (rv != 0) { goto fail; @@ -3088,16 +3066,20 @@ nghttp3_ssize nghttp3_qpack_decoder_read_encoder(nghttp3_qpack_decoder *decoder, return rv; } -void nghttp3_qpack_decoder_set_dtable_cap(nghttp3_qpack_decoder *decoder, - size_t cap) { +int nghttp3_qpack_decoder_set_max_dtable_capacity( + nghttp3_qpack_decoder *decoder, size_t max_dtable_capacity) { nghttp3_qpack_entry *ent; size_t i; nghttp3_qpack_context *ctx = &decoder->ctx; const nghttp3_mem *mem = ctx->mem; - ctx->max_dtable_size = cap; + if (max_dtable_capacity > decoder->ctx.hard_max_dtable_capacity) { + return NGHTTP3_ERR_INVALID_ARGUMENT; + } + + ctx->max_dtable_capacity = max_dtable_capacity; - while (ctx->dtable_size > cap) { + while (ctx->dtable_size > max_dtable_capacity) { i = nghttp3_ringbuf_len(&ctx->dtable); assert(i); ent = *(nghttp3_qpack_entry **)nghttp3_ringbuf_get(&ctx->dtable, i - 1); @@ -3108,6 +3090,8 @@ void nghttp3_qpack_decoder_set_dtable_cap(nghttp3_qpack_decoder *decoder, nghttp3_qpack_entry_free(ent); nghttp3_mem_free(mem, ent); } + + return 0; } int nghttp3_qpack_decoder_dtable_indexed_add(nghttp3_qpack_decoder *decoder) { @@ -3131,7 +3115,7 @@ int nghttp3_qpack_decoder_dtable_static_add(nghttp3_qpack_decoder *decoder) { shd = &stable[decoder->rstate.absidx]; if (table_space(shd->name.len, decoder->rstate.value->len) > - decoder->ctx.max_dtable_size) { + decoder->ctx.max_dtable_capacity) { return NGHTTP3_ERR_QPACK_ENCODER_STREAM_ERROR; } @@ -3155,7 +3139,7 @@ int nghttp3_qpack_decoder_dtable_dynamic_add(nghttp3_qpack_decoder *decoder) { ent = nghttp3_qpack_context_dtable_get(&decoder->ctx, decoder->rstate.absidx); if (table_space(ent->nv.name->len, decoder->rstate.value->len) > - decoder->ctx.max_dtable_size) { + decoder->ctx.max_dtable_capacity) { return NGHTTP3_ERR_QPACK_ENCODER_STREAM_ERROR; } @@ -3185,7 +3169,7 @@ int nghttp3_qpack_decoder_dtable_duplicate_add(nghttp3_qpack_decoder *decoder) { ent = nghttp3_qpack_context_dtable_get(&decoder->ctx, decoder->rstate.absidx); if (table_space(ent->nv.name->len, ent->nv.value->len) > - decoder->ctx.max_dtable_size) { + decoder->ctx.max_dtable_capacity) { return NGHTTP3_ERR_QPACK_ENCODER_STREAM_ERROR; } @@ -3210,7 +3194,7 @@ int nghttp3_qpack_decoder_dtable_literal_add(nghttp3_qpack_decoder *decoder) { (int)decoder->rstate.value->len, decoder->rstate.value->base); if (table_space(decoder->rstate.name->len, decoder->rstate.value->len) > - decoder->ctx.max_dtable_size) { + decoder->ctx.max_dtable_capacity) { return NGHTTP3_ERR_QPACK_ENCODER_STREAM_ERROR; } @@ -3328,7 +3312,7 @@ nghttp3_qpack_decoder_read_request(nghttp3_qpack_decoder *decoder, } if (sctx->dbase_sign) { - if (sctx->ricnt < sctx->rstate.left) { + if (sctx->ricnt <= sctx->rstate.left) { rv = NGHTTP3_ERR_QPACK_DECOMPRESSION_FAILED; goto fail; } @@ -3595,7 +3579,11 @@ nghttp3_qpack_decoder_read_request(nghttp3_qpack_decoder *decoder, switch (sctx->opcode) { case NGHTTP3_QPACK_RS_OPCODE_INDEXED_NAME: case NGHTTP3_QPACK_RS_OPCODE_INDEXED_NAME_PB: - nghttp3_qpack_decoder_emit_indexed_name(decoder, sctx, nv); + rv = nghttp3_qpack_decoder_emit_indexed_name(decoder, sctx, nv); + if (rv != 0) { + goto fail; + } + break; case NGHTTP3_QPACK_RS_OPCODE_LITERAL: nghttp3_qpack_decoder_emit_literal(decoder, sctx, nv); @@ -3629,7 +3617,11 @@ nghttp3_qpack_decoder_read_request(nghttp3_qpack_decoder *decoder, switch (sctx->opcode) { case NGHTTP3_QPACK_RS_OPCODE_INDEXED_NAME: case NGHTTP3_QPACK_RS_OPCODE_INDEXED_NAME_PB: - nghttp3_qpack_decoder_emit_indexed_name(decoder, sctx, nv); + rv = nghttp3_qpack_decoder_emit_indexed_name(decoder, sctx, nv); + if (rv != 0) { + goto fail; + } + break; case NGHTTP3_QPACK_RS_OPCODE_LITERAL: nghttp3_qpack_decoder_emit_literal(decoder, sctx, nv); @@ -3733,6 +3725,7 @@ void nghttp3_qpack_decoder_write_decoder(nghttp3_qpack_decoder *decoder, uint8_t *p; uint64_t n = 0; size_t len = 0; + (void)len; if (decoder->written_icnt < decoder->ctx.next_absidx) { n = decoder->ctx.next_absidx - decoder->written_icnt; @@ -3789,7 +3782,8 @@ int nghttp3_qpack_decoder_reconstruct_ricnt(nghttp3_qpack_decoder *decoder, return 0; } - max_ents = decoder->ctx.hard_max_dtable_size / NGHTTP3_QPACK_ENTRY_OVERHEAD; + max_ents = + decoder->ctx.hard_max_dtable_capacity / NGHTTP3_QPACK_ENTRY_OVERHEAD; full = 2 * max_ents; if (encricnt > full) { @@ -3938,13 +3932,19 @@ qpack_decoder_emit_static_indexed_name(nghttp3_qpack_decoder *decoder, sctx->rstate.value = NULL; } -static void +static int qpack_decoder_emit_dynamic_indexed_name(nghttp3_qpack_decoder *decoder, nghttp3_qpack_stream_context *sctx, nghttp3_qpack_nv *nv) { - nghttp3_qpack_entry *ent = - nghttp3_qpack_context_dtable_get(&decoder->ctx, sctx->rstate.absidx); - (void)decoder; + nghttp3_qpack_entry *ent; + + /* A broken encoder might change dtable capacity while processing + request stream instruction. Check the absidx again. */ + if (qpack_decoder_validate_index(decoder, &sctx->rstate) != 0) { + return NGHTTP3_ERR_QPACK_DECOMPRESSION_FAILED; + } + + ent = nghttp3_qpack_context_dtable_get(&decoder->ctx, sctx->rstate.absidx); nv->name = ent->nv.name; nv->value = sctx->rstate.value; @@ -3955,11 +3955,13 @@ qpack_decoder_emit_dynamic_indexed_name(nghttp3_qpack_decoder *decoder, nghttp3_rcbuf_incref(nv->name); sctx->rstate.value = NULL; + + return 0; } -void nghttp3_qpack_decoder_emit_indexed_name(nghttp3_qpack_decoder *decoder, - nghttp3_qpack_stream_context *sctx, - nghttp3_qpack_nv *nv) { +int nghttp3_qpack_decoder_emit_indexed_name(nghttp3_qpack_decoder *decoder, + nghttp3_qpack_stream_context *sctx, + nghttp3_qpack_nv *nv) { (void)decoder; DEBUGF("qpack::decode: Indexed name (%s) absidx=%" PRIu64 " value=%*s\n", @@ -3967,10 +3969,12 @@ void nghttp3_qpack_decoder_emit_indexed_name(nghttp3_qpack_decoder *decoder, (int)sctx->rstate.value->len, sctx->rstate.value->base); if (sctx->rstate.dynamic) { - qpack_decoder_emit_dynamic_indexed_name(decoder, sctx, nv); - } else { - qpack_decoder_emit_static_indexed_name(decoder, sctx, nv); + return qpack_decoder_emit_dynamic_indexed_name(decoder, sctx, nv); } + + qpack_decoder_emit_static_indexed_name(decoder, sctx, nv); + + return 0; } void nghttp3_qpack_decoder_emit_literal(nghttp3_qpack_decoder *decoder, @@ -3993,7 +3997,7 @@ void nghttp3_qpack_decoder_emit_literal(nghttp3_qpack_decoder *decoder, } int nghttp3_qpack_encoder_new(nghttp3_qpack_encoder **pencoder, - size_t max_dtable_size, size_t max_blocked, + size_t hard_max_dtable_capacity, const nghttp3_mem *mem) { int rv; nghttp3_qpack_encoder *p; @@ -4003,7 +4007,7 @@ int nghttp3_qpack_encoder_new(nghttp3_qpack_encoder **pencoder, return NGHTTP3_ERR_NOMEM; } - rv = nghttp3_qpack_encoder_init(p, max_dtable_size, max_blocked, mem); + rv = nghttp3_qpack_encoder_init(p, hard_max_dtable_capacity, mem); if (rv != 0) { return rv; } @@ -4057,7 +4061,8 @@ void nghttp3_qpack_stream_context_del(nghttp3_qpack_stream_context *sctx) { } int nghttp3_qpack_decoder_new(nghttp3_qpack_decoder **pdecoder, - size_t max_dtable_size, size_t max_blocked, + size_t hard_max_dtable_capacity, + size_t max_blocked_streams, const nghttp3_mem *mem) { int rv; nghttp3_qpack_decoder *p; @@ -4067,7 +4072,8 @@ int nghttp3_qpack_decoder_new(nghttp3_qpack_decoder **pdecoder, return NGHTTP3_ERR_NOMEM; } - rv = nghttp3_qpack_decoder_init(p, max_dtable_size, max_blocked, mem); + rv = nghttp3_qpack_decoder_init(p, hard_max_dtable_capacity, + max_blocked_streams, mem); if (rv != 0) { return rv; } diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_qpack.h b/deps/ngtcp2/nghttp3/lib/nghttp3_qpack.h index 429c55a7808..804969e14d6 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_qpack.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_qpack.h @@ -118,7 +118,7 @@ void nghttp3_qpack_header_block_ref_del(nghttp3_qpack_header_block_ref *ref, const nghttp3_mem *mem); typedef struct nghttp3_qpack_stream { - nghttp3_map_entry me; + int64_t stream_id; /* refs is an array of pointer to nghttp3_qpack_header_block_ref in the order of the time they are encoded. HTTP/3 allows multiple header blocks (e.g., non-final response headers, final response @@ -154,18 +154,15 @@ typedef struct nghttp3_qpack_context { NGHTTP3_QPACK_ENTRY_OVERHEAD bytes overhead per each entry. */ size_t dtable_size; size_t dtable_sum; - /* hard_max_dtable_size is the maximum size of dynamic table. In - HTTP/3, it is notified by decoder as - SETTINGS_QPACK_MAX_TABLE_CAPACITY. Any value lower than or equal - to SETTINGS_QPACK_MAX_TABLE_CAPACITY is OK because encoder has - the authority to decide how many entries are inserted into - dynamic table. */ - size_t hard_max_dtable_size; - /* max_dtable_size is the effective maximum size of dynamic table. */ - size_t max_dtable_size; - /* max_blocked is the maximum number of stream which can be + /* hard_max_dtable_capacity is the upper bound of + max_dtable_capacity. */ + size_t hard_max_dtable_capacity; + /* max_dtable_capacity is the maximum capacity of the dynamic + table. */ + size_t max_dtable_capacity; + /* max_blocked_streams is the maximum number of stream which can be blocked. */ - size_t max_blocked; + size_t max_blocked_streams; /* next_absidx is the next absolute index for nghttp3_qpack_entry. It is equivalent to insert count. */ uint64_t next_absidx; @@ -218,10 +215,10 @@ typedef enum nghttp3_qpack_decoder_stream_opcode { /* QPACK encoder flags */ /* NGHTTP3_QPACK_ENCODER_FLAG_NONE indicates that no flag is set. */ -#define NGHTTP3_QPACK_ENCODER_FLAG_NONE 0x00 +#define NGHTTP3_QPACK_ENCODER_FLAG_NONE 0x00u /* NGHTTP3_QPACK_ENCODER_FLAG_PENDING_SET_DTABLE_CAP indicates that Set Dynamic Table Capacity is required. */ -#define NGHTTP3_QPACK_ENCODER_FLAG_PENDING_SET_DTABLE_CAP 0x01 +#define NGHTTP3_QPACK_ENCODER_FLAG_PENDING_SET_DTABLE_CAP 0x01u struct nghttp3_qpack_encoder { nghttp3_qpack_context ctx; @@ -260,9 +257,8 @@ struct nghttp3_qpack_encoder { /* * nghttp3_qpack_encoder_init initializes |encoder|. - * |max_dtable_size| is the maximum size of dynamic table. - * |max_blocked| is the maximum number of stream which can be blocked. - * |mem| is a memory allocator. + * |hard_max_dtable_capacity| is the upper bound of the dynamic table + * capacity. |mem| is a memory allocator. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -271,7 +267,7 @@ struct nghttp3_qpack_encoder { * Out of memory. */ int nghttp3_qpack_encoder_init(nghttp3_qpack_encoder *encoder, - size_t max_dtable_size, size_t max_blocked, + size_t hard_max_dtable_capacity, const nghttp3_mem *mem); /* @@ -628,6 +624,44 @@ int nghttp3_qpack_encoder_dtable_literal_add(nghttp3_qpack_encoder *encoder, const nghttp3_nv *nv, int32_t token, uint32_t hash); +/* + * `nghttp3_qpack_encoder_ack_header` tells |encoder| that header + * block for a stream denoted by |stream_id| was acknowledged by + * decoder. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :macro:`NGHTTP3_ERR_QPACK_DECODER_STREAM_ERROR` + * Section Acknowledgement for a stream denoted by |stream_id| is + * unexpected. + */ +int nghttp3_qpack_encoder_ack_header(nghttp3_qpack_encoder *encoder, + int64_t stream_id); + +/* + * `nghttp3_qpack_encoder_add_icnt` increments known received count of + * |encoder| by |n|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :macro:`NGHTTP3_ERR_NOMEM` + * Out of memory. + * :macro:`NGHTTP3_ERR_QPACK_DECODER_STREAM_ERROR` + * |n| is too large. + */ +int nghttp3_qpack_encoder_add_icnt(nghttp3_qpack_encoder *encoder, uint64_t n); + +/* + * `nghttp3_qpack_encoder_cancel_stream` tells |encoder| that stream + * denoted by |stream_id| is cancelled. This function is provided for + * debugging purpose only. In HTTP/3, |encoder| knows this by reading + * decoder stream with `nghttp3_qpack_encoder_read_decoder()`. + */ +void nghttp3_qpack_encoder_cancel_stream(nghttp3_qpack_encoder *encoder, + int64_t stream_id); + /* * nghttp3_qpack_context_dtable_get returns dynamic table entry whose * absolute index is |absidx|. This function assumes that such entry @@ -749,9 +783,9 @@ struct nghttp3_qpack_decoder { /* * nghttp3_qpack_decoder_init initializes |decoder|. - * |max_dtable_size| is the maximum size of dynamic table. - * |max_blocked| is the maximum number of stream which can be blocked. - * |mem| is a memory allocator. + * |hard_max_dtable_capacity| is the upper bound of the dynamic table + * capacity. |max_blocked_streams| is the maximum number of stream + * which can be blocked. |mem| is a memory allocator. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -760,7 +794,8 @@ struct nghttp3_qpack_decoder { * Out of memory. */ int nghttp3_qpack_decoder_init(nghttp3_qpack_decoder *decoder, - size_t max_dtable_size, size_t max_blocked, + size_t hard_max_dtable_capacity, + size_t max_blocked_streams, const nghttp3_mem *mem); /* @@ -935,9 +970,9 @@ void nghttp3_qpack_decoder_emit_indexed(nghttp3_qpack_decoder *decoder, nghttp3_qpack_stream_context *sctx, nghttp3_qpack_nv *nv); -void nghttp3_qpack_decoder_emit_indexed_name(nghttp3_qpack_decoder *decoder, - nghttp3_qpack_stream_context *sctx, - nghttp3_qpack_nv *nv); +int nghttp3_qpack_decoder_emit_indexed_name(nghttp3_qpack_decoder *decoder, + nghttp3_qpack_stream_context *sctx, + nghttp3_qpack_nv *nv); void nghttp3_qpack_decoder_emit_literal(nghttp3_qpack_decoder *decoder, nghttp3_qpack_stream_context *sctx, diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_rcbuf.c b/deps/ngtcp2/nghttp3/lib/nghttp3_rcbuf.c index 1c31ecebf60..9e9dab51390 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_rcbuf.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_rcbuf.c @@ -41,8 +41,7 @@ int nghttp3_rcbuf_new(nghttp3_rcbuf **rcbuf_ptr, size_t size, *rcbuf_ptr = (void *)p; - (*rcbuf_ptr)->mem_user_data = mem->mem_user_data; - (*rcbuf_ptr)->free = mem->free; + (*rcbuf_ptr)->mem = mem; (*rcbuf_ptr)->base = p + sizeof(nghttp3_rcbuf); (*rcbuf_ptr)->len = size; (*rcbuf_ptr)->ref = 1; @@ -76,7 +75,7 @@ int nghttp3_rcbuf_new2(nghttp3_rcbuf **rcbuf_ptr, const uint8_t *src, * Frees |rcbuf| itself, regardless of its reference cout. */ void nghttp3_rcbuf_del(nghttp3_rcbuf *rcbuf) { - nghttp3_mem_free2(rcbuf->free, rcbuf, rcbuf->mem_user_data); + nghttp3_mem_free(rcbuf->mem, rcbuf); } void nghttp3_rcbuf_incref(nghttp3_rcbuf *rcbuf) { diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_rcbuf.h b/deps/ngtcp2/nghttp3/lib/nghttp3_rcbuf.h index feea8040005..f589c377bf6 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_rcbuf.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_rcbuf.h @@ -33,10 +33,9 @@ #include struct nghttp3_rcbuf { - /* custom memory allocator belongs to the mem parameter when - creating this object. */ - void *mem_user_data; - nghttp3_free free; + /* mem is the memory allocator that allocates memory for this + object. */ + const nghttp3_mem *mem; /* The pointer to the underlying buffer */ uint8_t *base; /* Size of buffer pointed by |base|. */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_stream.c b/deps/ngtcp2/nghttp3/lib/nghttp3_stream.c index 96d60fe82f9..e655a7ec01d 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_stream.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_stream.c @@ -34,6 +34,7 @@ #include "nghttp3_conn.h" #include "nghttp3_str.h" #include "nghttp3_http.h" +#include "nghttp3_vec.h" /* NGHTTP3_STREAM_MAX_COPY_THRES is the maximum size of buffer which makes a copy to outq. */ @@ -44,45 +45,36 @@ int nghttp3_stream_new(nghttp3_stream **pstream, int64_t stream_id, uint64_t seq, const nghttp3_stream_callbacks *callbacks, + nghttp3_objalloc *out_chunk_objalloc, + nghttp3_objalloc *stream_objalloc, const nghttp3_mem *mem) { - int rv; - nghttp3_stream *stream = nghttp3_mem_calloc(mem, 1, sizeof(nghttp3_stream)); + nghttp3_stream *stream = nghttp3_objalloc_stream_get(stream_objalloc); nghttp3_node_id nid; if (stream == NULL) { return NGHTTP3_ERR_NOMEM; } + memset(stream, 0, sizeof(*stream)); + + stream->out_chunk_objalloc = out_chunk_objalloc; + stream->stream_objalloc = stream_objalloc; + nghttp3_tnode_init( &stream->node, nghttp3_node_id_init(&nid, NGHTTP3_NODE_ID_TYPE_STREAM, stream_id), seq, NGHTTP3_DEFAULT_URGENCY); - rv = nghttp3_ringbuf_init(&stream->frq, 0, sizeof(nghttp3_frame_entry), mem); - if (rv != 0) { - goto frq_init_fail; - } - - rv = nghttp3_ringbuf_init(&stream->chunks, 0, sizeof(nghttp3_buf), mem); - if (rv != 0) { - goto chunks_init_fail; - } - - rv = nghttp3_ringbuf_init(&stream->outq, 0, sizeof(nghttp3_typed_buf), mem); - if (rv != 0) { - goto outq_init_fail; - } - - rv = nghttp3_ringbuf_init(&stream->inq, 0, sizeof(nghttp3_buf), mem); - if (rv != 0) { - goto inq_init_fail; - } + nghttp3_ringbuf_init(&stream->frq, 0, sizeof(nghttp3_frame_entry), mem); + nghttp3_ringbuf_init(&stream->chunks, 0, sizeof(nghttp3_buf), mem); + nghttp3_ringbuf_init(&stream->outq, 0, sizeof(nghttp3_typed_buf), mem); + nghttp3_ringbuf_init(&stream->inq, 0, sizeof(nghttp3_buf), mem); nghttp3_qpack_stream_context_init(&stream->qpack_sctx, stream_id, mem); - stream->me.key = (key_type)stream_id; stream->qpack_blocked_pe.index = NGHTTP3_PQ_BAD_INDEX; stream->mem = mem; + stream->tx.offset = 0; stream->rx.http.status_code = -1; stream->rx.http.content_length = -1; stream->rx.http.pri = NGHTTP3_DEFAULT_URGENCY; @@ -95,17 +87,6 @@ int nghttp3_stream_new(nghttp3_stream **pstream, int64_t stream_id, *pstream = stream; return 0; - -inq_init_fail: - nghttp3_ringbuf_free(&stream->outq); -outq_init_fail: - nghttp3_ringbuf_free(&stream->chunks); -chunks_init_fail: - nghttp3_ringbuf_free(&stream->frq); -frq_init_fail: - nghttp3_mem_free(mem, stream); - - return rv; } static void delete_outq(nghttp3_ringbuf *outq, const nghttp3_mem *mem) { @@ -134,6 +115,27 @@ static void delete_chunks(nghttp3_ringbuf *chunks, const nghttp3_mem *mem) { nghttp3_ringbuf_free(chunks); } +static void delete_out_chunks(nghttp3_ringbuf *chunks, + nghttp3_objalloc *out_chunk_objalloc, + const nghttp3_mem *mem) { + nghttp3_buf *buf; + size_t i, len = nghttp3_ringbuf_len(chunks); + + for (i = 0; i < len; ++i) { + buf = nghttp3_ringbuf_get(chunks, i); + + if (nghttp3_buf_cap(buf) == NGHTTP3_STREAM_MIN_CHUNK_SIZE) { + nghttp3_objalloc_chunk_release(out_chunk_objalloc, + (nghttp3_chunk *)(void *)buf->begin); + continue; + } + + nghttp3_buf_free(buf, mem); + } + + nghttp3_ringbuf_free(chunks); +} + static void delete_frq(nghttp3_ringbuf *frq, const nghttp3_mem *mem) { nghttp3_frame_entry *frent; size_t i, len = nghttp3_ringbuf_len(frq); @@ -144,9 +146,6 @@ static void delete_frq(nghttp3_ringbuf *frq, const nghttp3_mem *mem) { case NGHTTP3_FRAME_HEADERS: nghttp3_frame_headers_free(&frent->fr.headers, mem); break; - case NGHTTP3_FRAME_PUSH_PROMISE: - nghttp3_frame_push_promise_free(&frent->fr.push_promise, mem); - break; default: break; } @@ -163,11 +162,11 @@ void nghttp3_stream_del(nghttp3_stream *stream) { nghttp3_qpack_stream_context_free(&stream->qpack_sctx); delete_chunks(&stream->inq, stream->mem); delete_outq(&stream->outq, stream->mem); - delete_chunks(&stream->chunks, stream->mem); + delete_out_chunks(&stream->chunks, stream->out_chunk_objalloc, stream->mem); delete_frq(&stream->frq, stream->mem); nghttp3_tnode_free(&stream->node); - nghttp3_mem_free(stream->mem, stream); + nghttp3_objalloc_stream_release(stream->stream_objalloc, stream); } void nghttp3_varint_read_state_reset(nghttp3_varint_read_state *rvint) { @@ -267,19 +266,6 @@ int nghttp3_stream_fill_outq(nghttp3_stream *stream) { } nghttp3_frame_headers_free(&frent->fr.headers, stream->mem); break; - case NGHTTP3_FRAME_PUSH_PROMISE: - rv = nghttp3_stream_write_push_promise(stream, frent); - if (rv != 0) { - return rv; - } - nghttp3_frame_push_promise_free(&frent->fr.push_promise, stream->mem); - break; - case NGHTTP3_FRAME_CANCEL_PUSH: - rv = nghttp3_stream_write_cancel_push(stream, frent); - if (rv != 0) { - return rv; - } - break; case NGHTTP3_FRAME_DATA: rv = nghttp3_stream_write_data(stream, &data_eof, frent); if (rv != 0) { @@ -292,11 +278,14 @@ int nghttp3_stream_fill_outq(nghttp3_stream *stream) { return 0; } break; - case NGHTTP3_FRAME_MAX_PUSH_ID: - if (stream->conn->flags & NGHTTP3_CONN_FLAG_GOAWAY_QUEUED) { - break; + case NGHTTP3_FRAME_GOAWAY: + rv = nghttp3_stream_write_goaway(stream, frent); + if (rv != 0) { + return rv; } - rv = nghttp3_stream_write_max_push_id(stream, frent); + break; + case NGHTTP3_FRAME_PRIORITY_UPDATE: + rv = nghttp3_stream_write_priority_update(stream, frent); if (rv != 0) { return rv; } @@ -338,34 +327,6 @@ int nghttp3_stream_write_stream_type(nghttp3_stream *stream) { return nghttp3_stream_outq_add(stream, &tbuf); } -int nghttp3_stream_write_stream_type_push_id(nghttp3_stream *stream) { - size_t len; - nghttp3_buf *chunk; - nghttp3_typed_buf tbuf; - int rv; - nghttp3_push_promise *pp = stream->pp; - - assert(stream->type == NGHTTP3_STREAM_TYPE_PUSH); - assert(pp); - - len = nghttp3_put_varint_len((int64_t)stream->type) + - nghttp3_put_varint_len(pp->node.nid.id); - - rv = nghttp3_stream_ensure_chunk(stream, len); - if (rv != 0) { - return rv; - } - - chunk = nghttp3_stream_get_chunk(stream); - typed_buf_shared_init(&tbuf, chunk); - - chunk->last = nghttp3_put_varint(chunk->last, (int64_t)stream->type); - chunk->last = nghttp3_put_varint(chunk->last, pp->node.nid.id); - tbuf.buf.last = chunk->last; - - return nghttp3_stream_outq_add(stream, &tbuf); -} - int nghttp3_stream_write_settings(nghttp3_stream *stream, nghttp3_frame_entry *frent) { size_t len; @@ -386,10 +347,16 @@ int nghttp3_stream_write_settings(nghttp3_stream *stream, iv[0].id = NGHTTP3_SETTINGS_ID_MAX_FIELD_SECTION_SIZE; iv[0].value = local_settings->max_field_section_size; iv[1].id = NGHTTP3_SETTINGS_ID_QPACK_MAX_TABLE_CAPACITY; - iv[1].value = local_settings->qpack_max_table_capacity; + iv[1].value = local_settings->qpack_max_dtable_capacity; iv[2].id = NGHTTP3_SETTINGS_ID_QPACK_BLOCKED_STREAMS; iv[2].value = local_settings->qpack_blocked_streams; + if (local_settings->enable_connect_protocol) { + ++fr.settings.niv; + iv[3].id = NGHTTP3_SETTINGS_ID_ENABLE_CONNECT_PROTOCOL; + iv[3].value = 1; + } + len = nghttp3_frame_write_settings_len(&fr.settings.hd.length, &fr.settings); rv = nghttp3_stream_ensure_chunk(stream, len); @@ -407,15 +374,15 @@ int nghttp3_stream_write_settings(nghttp3_stream *stream, return nghttp3_stream_outq_add(stream, &tbuf); } -int nghttp3_stream_write_cancel_push(nghttp3_stream *stream, - nghttp3_frame_entry *frent) { - nghttp3_frame_cancel_push *fr = &frent->fr.cancel_push; +int nghttp3_stream_write_goaway(nghttp3_stream *stream, + nghttp3_frame_entry *frent) { + nghttp3_frame_goaway *fr = &frent->fr.goaway; size_t len; int rv; nghttp3_buf *chunk; nghttp3_typed_buf tbuf; - len = nghttp3_frame_write_cancel_push_len(&fr->hd.length, fr); + len = nghttp3_frame_write_goaway_len(&fr->hd.length, fr); rv = nghttp3_stream_ensure_chunk(stream, len); if (rv != 0) { @@ -425,30 +392,22 @@ int nghttp3_stream_write_cancel_push(nghttp3_stream *stream, chunk = nghttp3_stream_get_chunk(stream); typed_buf_shared_init(&tbuf, chunk); - chunk->last = nghttp3_frame_write_cancel_push(chunk->last, fr); + chunk->last = nghttp3_frame_write_goaway(chunk->last, fr); tbuf.buf.last = chunk->last; return nghttp3_stream_outq_add(stream, &tbuf); } -int nghttp3_stream_write_max_push_id(nghttp3_stream *stream, - nghttp3_frame_entry *frent) { - nghttp3_frame_max_push_id *fr = &frent->fr.max_push_id; - nghttp3_conn *conn = stream->conn; +int nghttp3_stream_write_priority_update(nghttp3_stream *stream, + nghttp3_frame_entry *frent) { + nghttp3_frame_priority_update *fr = &frent->fr.priority_update; size_t len; int rv; nghttp3_buf *chunk; nghttp3_typed_buf tbuf; - assert(conn); - assert(conn->flags & NGHTTP3_CONN_FLAG_MAX_PUSH_ID_QUEUED); - - fr->push_id = (int64_t)conn->remote.uni.unsent_max_pushes - 1; - conn->remote.uni.max_pushes = conn->remote.uni.unsent_max_pushes; - conn->flags &= (uint16_t)~NGHTTP3_CONN_FLAG_MAX_PUSH_ID_QUEUED; - - len = nghttp3_frame_write_max_push_id_len(&fr->hd.length, fr); + len = nghttp3_frame_write_priority_update_len(&fr->hd.length, fr); rv = nghttp3_stream_ensure_chunk(stream, len); if (rv != 0) { @@ -458,7 +417,7 @@ int nghttp3_stream_write_max_push_id(nghttp3_stream *stream, chunk = nghttp3_stream_get_chunk(stream); typed_buf_shared_init(&tbuf, chunk); - chunk->last = nghttp3_frame_write_max_push_id(chunk->last, fr); + chunk->last = nghttp3_frame_write_priority_update(chunk->last, fr); tbuf.buf.last = chunk->last; @@ -474,35 +433,21 @@ int nghttp3_stream_write_headers(nghttp3_stream *stream, return nghttp3_stream_write_header_block( stream, &conn->qenc, conn->tx.qenc, &conn->tx.qpack.rbuf, - &conn->tx.qpack.ebuf, NGHTTP3_FRAME_HEADERS, 0, fr->nva, fr->nvlen); -} - -int nghttp3_stream_write_push_promise(nghttp3_stream *stream, - nghttp3_frame_entry *frent) { - nghttp3_frame_push_promise *fr = &frent->fr.push_promise; - nghttp3_conn *conn = stream->conn; - - assert(conn); - - return nghttp3_stream_write_header_block( - stream, &conn->qenc, conn->tx.qenc, &conn->tx.qpack.rbuf, - &conn->tx.qpack.ebuf, NGHTTP3_FRAME_PUSH_PROMISE, fr->push_id, fr->nva, - fr->nvlen); + &conn->tx.qpack.ebuf, NGHTTP3_FRAME_HEADERS, fr->nva, fr->nvlen); } int nghttp3_stream_write_header_block(nghttp3_stream *stream, nghttp3_qpack_encoder *qenc, nghttp3_stream *qenc_stream, nghttp3_buf *rbuf, nghttp3_buf *ebuf, - int64_t frame_type, int64_t push_id, - const nghttp3_nv *nva, size_t nvlen) { + int64_t frame_type, const nghttp3_nv *nva, + size_t nvlen) { nghttp3_buf pbuf; int rv; size_t len; nghttp3_buf *chunk; nghttp3_typed_buf tbuf; nghttp3_frame_hd hd; - size_t push_idlen = 0; uint8_t raw_pbuf[16]; size_t pbuflen, rbuflen, ebuflen; @@ -518,14 +463,10 @@ int nghttp3_stream_write_header_block(nghttp3_stream *stream, rbuflen = nghttp3_buf_len(rbuf); ebuflen = nghttp3_buf_len(ebuf); - if (frame_type == NGHTTP3_FRAME_PUSH_PROMISE) { - push_idlen = nghttp3_put_varint_len(push_id); - } - hd.type = frame_type; - hd.length = (int64_t)(pbuflen + rbuflen + push_idlen); + hd.length = (int64_t)(pbuflen + rbuflen); - len = nghttp3_frame_write_hd_len(&hd) + push_idlen + pbuflen; + len = nghttp3_frame_write_hd_len(&hd) + pbuflen; if (rbuflen <= NGHTTP3_STREAM_MAX_COPY_THRES) { len += rbuflen; @@ -541,10 +482,6 @@ int nghttp3_stream_write_header_block(nghttp3_stream *stream, chunk->last = nghttp3_frame_write_hd(chunk->last, &hd); - if (push_idlen) { - chunk->last = nghttp3_put_varint(chunk->last, push_id); - } - chunk->last = nghttp3_cpymem(chunk->last, pbuf.pos, pbuflen); nghttp3_buf_init(&pbuf); @@ -623,7 +560,7 @@ int nghttp3_stream_write_data(nghttp3_stream *stream, int *peof, nghttp3_buf *chunk; nghttp3_read_data_callback read_data = frent->aux.data.dr.read_data; nghttp3_conn *conn = stream->conn; - size_t datalen; + int64_t datalen; uint32_t flags = 0; nghttp3_frame_hd hd; nghttp3_vec vec[8]; @@ -647,7 +584,10 @@ int nghttp3_stream_write_data(nghttp3_stream *stream, int *peof, return NGHTTP3_ERR_CALLBACK_FAILURE; } - datalen = nghttp3_vec_len(vec, (size_t)sveccnt); + datalen = nghttp3_vec_len_varint(vec, (size_t)sveccnt); + if (datalen == -1) { + return NGHTTP3_ERR_STREAM_DATA_OVERFLOW; + } assert(datalen || flags & NGHTTP3_DATA_FLAG_EOF); @@ -677,7 +617,7 @@ int nghttp3_stream_write_data(nghttp3_stream *stream, int *peof, } hd.type = NGHTTP3_FRAME_DATA; - hd.length = (int64_t)datalen; + hd.length = datalen; len = nghttp3_frame_write_hd_len(&hd); @@ -762,8 +702,14 @@ int nghttp3_stream_outq_add(nghttp3_stream *stream, int rv; nghttp3_typed_buf *dest; size_t len = nghttp3_ringbuf_len(outq); + size_t buflen = nghttp3_buf_len(&tbuf->buf); + + if (buflen > NGHTTP3_MAX_VARINT - stream->tx.offset) { + return NGHTTP3_ERR_STREAM_DATA_OVERFLOW; + } - stream->unsent_bytes += nghttp3_buf_len(&tbuf->buf); + stream->tx.offset += buflen; + stream->unsent_bytes += buflen; if (len) { dest = nghttp3_ringbuf_get(outq, len - 1); @@ -816,7 +762,12 @@ int nghttp3_stream_ensure_chunk(nghttp3_stream *stream, size_t need) { for (; n < need; n *= 2) ; - p = nghttp3_mem_malloc(stream->mem, n); + if (n == NGHTTP3_STREAM_MIN_CHUNK_SIZE) { + p = (uint8_t *)nghttp3_objalloc_chunk_len_get(stream->out_chunk_objalloc, + n); + } else { + p = nghttp3_mem_malloc(stream->mem, n); + } if (p == NULL) { return NGHTTP3_ERR_NOMEM; } @@ -863,7 +814,7 @@ nghttp3_ssize nghttp3_stream_writev(nghttp3_stream *stream, int *pfin, nghttp3_ringbuf *outq = &stream->outq; size_t len = nghttp3_ringbuf_len(outq); size_t i; - size_t offset = stream->outq_offset; + uint64_t offset = stream->outq_offset; size_t buflen; nghttp3_vec *vbegin = vec, *vend = vec + veccnt; nghttp3_typed_buf *tbuf; @@ -879,7 +830,7 @@ nghttp3_ssize nghttp3_stream_writev(nghttp3_stream *stream, int *pfin, } vec->base = tbuf->buf.pos + offset; - vec->len = buflen - offset; + vec->len = (size_t)(buflen - offset); ++vec; ++i; break; @@ -903,7 +854,7 @@ int nghttp3_stream_add_outq_offset(nghttp3_stream *stream, size_t n) { nghttp3_ringbuf *outq = &stream->outq; size_t i; size_t len = nghttp3_ringbuf_len(outq); - size_t offset = stream->outq_offset + n; + uint64_t offset = stream->outq_offset + n; size_t buflen; nghttp3_typed_buf *tbuf; @@ -945,7 +896,7 @@ static int stream_pop_outq_entry(nghttp3_stream *stream, break; case NGHTTP3_BUF_TYPE_ALIEN: break; - default: + case NGHTTP3_BUF_TYPE_SHARED: assert(nghttp3_ringbuf_len(chunks)); chunk = nghttp3_ringbuf_get(chunks, 0); @@ -954,9 +905,18 @@ static int stream_pop_outq_entry(nghttp3_stream *stream, assert(chunk->end == tbuf->buf.end); if (chunk->last == tbuf->buf.last) { - nghttp3_buf_free(chunk, stream->mem); + if (nghttp3_buf_cap(chunk) == NGHTTP3_STREAM_MIN_CHUNK_SIZE) { + nghttp3_objalloc_chunk_release(stream->out_chunk_objalloc, + (nghttp3_chunk *)(void *)chunk->begin); + } else { + nghttp3_buf_free(chunk, stream->mem); + } nghttp3_ringbuf_pop_front(chunks); } + break; + default: + assert(0); + abort(); }; nghttp3_ringbuf_pop_front(&stream->outq); @@ -969,7 +929,7 @@ int nghttp3_stream_add_ack_offset(nghttp3_stream *stream, uint64_t n) { uint64_t offset = stream->ack_offset + n; size_t buflen; size_t npopped = 0; - size_t nack; + uint64_t nack; nghttp3_typed_buf *tbuf; int rv; @@ -978,7 +938,7 @@ int nghttp3_stream_add_ack_offset(nghttp3_stream *stream, uint64_t n) { buflen = nghttp3_buf_len(&tbuf->buf); if (tbuf->type == NGHTTP3_BUF_TYPE_ALIEN) { - nack = (size_t)nghttp3_min(offset, (uint64_t)buflen) - stream->ack_done; + nack = nghttp3_min(offset, (uint64_t)buflen) - stream->ack_done; if (stream->callbacks.acked_data) { rv = stream->callbacks.acked_data(stream, stream->node.nid.id, nack, stream->user_data); @@ -1110,16 +1070,16 @@ int nghttp3_stream_transit_rx_http_state(nghttp3_stream *stream, if (stream->rx.http.flags & NGHTTP3_HTTP_FLAG_METH_CONNECT) { return NGHTTP3_ERR_H3_FRAME_UNEXPECTED; } - rv = nghttp3_http_on_remote_end_stream(stream); - if (rv != 0) { - return rv; - } stream->rx.hstate = NGHTTP3_HTTP_STATE_REQ_TRAILERS_BEGIN; return 0; case NGHTTP3_HTTP_EVENT_DATA_BEGIN: stream->rx.hstate = NGHTTP3_HTTP_STATE_REQ_DATA_BEGIN; return 0; case NGHTTP3_HTTP_EVENT_MSG_END: + rv = nghttp3_http_on_remote_end_stream(stream); + if (rv != 0) { + return rv; + } stream->rx.hstate = NGHTTP3_HTTP_STATE_REQ_END; return 0; default: @@ -1141,13 +1101,13 @@ int nghttp3_stream_transit_rx_http_state(nghttp3_stream *stream, if (stream->rx.http.flags & NGHTTP3_HTTP_FLAG_METH_CONNECT) { return NGHTTP3_ERR_H3_FRAME_UNEXPECTED; } + stream->rx.hstate = NGHTTP3_HTTP_STATE_REQ_TRAILERS_BEGIN; + return 0; + case NGHTTP3_HTTP_EVENT_MSG_END: rv = nghttp3_http_on_remote_end_stream(stream); if (rv != 0) { return rv; } - stream->rx.hstate = NGHTTP3_HTTP_STATE_REQ_TRAILERS_BEGIN; - return 0; - case NGHTTP3_HTTP_EVENT_MSG_END: stream->rx.hstate = NGHTTP3_HTTP_STATE_REQ_END; return 0; default: @@ -1165,6 +1125,10 @@ int nghttp3_stream_transit_rx_http_state(nghttp3_stream *stream, spec. */ return NGHTTP3_ERR_H3_FRAME_UNEXPECTED; } + rv = nghttp3_http_on_remote_end_stream(stream); + if (rv != 0) { + return rv; + } stream->rx.hstate = NGHTTP3_HTTP_STATE_REQ_END; return 0; case NGHTTP3_HTTP_STATE_REQ_END: @@ -1192,10 +1156,6 @@ int nghttp3_stream_transit_rx_http_state(nghttp3_stream *stream, stream->rx.http.status_code / 100 == 2) { return NGHTTP3_ERR_H3_FRAME_UNEXPECTED; } - rv = nghttp3_http_on_remote_end_stream(stream); - if (rv != 0) { - return rv; - } stream->rx.hstate = NGHTTP3_HTTP_STATE_RESP_TRAILERS_BEGIN; return 0; case NGHTTP3_HTTP_EVENT_DATA_BEGIN: @@ -1205,6 +1165,10 @@ int nghttp3_stream_transit_rx_http_state(nghttp3_stream *stream, stream->rx.hstate = NGHTTP3_HTTP_STATE_RESP_DATA_BEGIN; return 0; case NGHTTP3_HTTP_EVENT_MSG_END: + rv = nghttp3_http_on_remote_end_stream(stream); + if (rv != 0) { + return rv; + } stream->rx.hstate = NGHTTP3_HTTP_STATE_RESP_END; return 0; default: @@ -1226,13 +1190,13 @@ int nghttp3_stream_transit_rx_http_state(nghttp3_stream *stream, stream->rx.http.status_code / 100 == 2) { return NGHTTP3_ERR_H3_FRAME_UNEXPECTED; } + stream->rx.hstate = NGHTTP3_HTTP_STATE_RESP_TRAILERS_BEGIN; + return 0; + case NGHTTP3_HTTP_EVENT_MSG_END: rv = nghttp3_http_on_remote_end_stream(stream); if (rv != 0) { return rv; } - stream->rx.hstate = NGHTTP3_HTTP_STATE_RESP_TRAILERS_BEGIN; - return 0; - case NGHTTP3_HTTP_EVENT_MSG_END: stream->rx.hstate = NGHTTP3_HTTP_STATE_RESP_END; return 0; default: @@ -1248,12 +1212,17 @@ int nghttp3_stream_transit_rx_http_state(nghttp3_stream *stream, if (event != NGHTTP3_HTTP_EVENT_MSG_END) { return NGHTTP3_ERR_MALFORMED_HTTP_MESSAGING; } + rv = nghttp3_http_on_remote_end_stream(stream); + if (rv != 0) { + return rv; + } stream->rx.hstate = NGHTTP3_HTTP_STATE_RESP_END; return 0; case NGHTTP3_HTTP_STATE_RESP_END: return NGHTTP3_ERR_MALFORMED_HTTP_MESSAGING; default: assert(0); + abort(); } } @@ -1267,11 +1236,6 @@ int nghttp3_stream_empty_headers_allowed(nghttp3_stream *stream) { } } -int nghttp3_stream_bidi_or_push(nghttp3_stream *stream) { - return (!nghttp3_stream_uni(stream->node.nid.id) || - stream->type == NGHTTP3_STREAM_TYPE_PUSH); -} - int nghttp3_stream_uni(int64_t stream_id) { return (stream_id & 0x2) != 0; } int nghttp3_client_stream_bidi(int64_t stream_id) { diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_stream.h b/deps/ngtcp2/nghttp3/lib/nghttp3_stream.h index f7e375c85eb..06292738a17 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_stream.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_stream.h @@ -37,6 +37,7 @@ #include "nghttp3_buf.h" #include "nghttp3_frame.h" #include "nghttp3_qpack.h" +#include "nghttp3_objalloc.h" #define NGHTTP3_STREAM_MIN_CHUNK_SIZE 256 @@ -60,13 +61,14 @@ typedef enum nghttp3_stream_type { typedef enum nghttp3_ctrl_stream_state { NGHTTP3_CTRL_STREAM_STATE_FRAME_TYPE, NGHTTP3_CTRL_STREAM_STATE_FRAME_LENGTH, - NGHTTP3_CTRL_STREAM_STATE_CANCEL_PUSH, NGHTTP3_CTRL_STREAM_STATE_SETTINGS, NGHTTP3_CTRL_STREAM_STATE_GOAWAY, NGHTTP3_CTRL_STREAM_STATE_MAX_PUSH_ID, NGHTTP3_CTRL_STREAM_STATE_IGN_FRAME, NGHTTP3_CTRL_STREAM_STATE_SETTINGS_ID, NGHTTP3_CTRL_STREAM_STATE_SETTINGS_VALUE, + NGHTTP3_CTRL_STREAM_STATE_PRIORITY_UPDATE_PRI_ELEM_ID, + NGHTTP3_CTRL_STREAM_STATE_PRIORITY_UPDATE, } nghttp3_ctrl_stream_state; typedef enum nghttp3_req_stream_state { @@ -74,23 +76,10 @@ typedef enum nghttp3_req_stream_state { NGHTTP3_REQ_STREAM_STATE_FRAME_LENGTH, NGHTTP3_REQ_STREAM_STATE_DATA, NGHTTP3_REQ_STREAM_STATE_HEADERS, - NGHTTP3_REQ_STREAM_STATE_PUSH_PROMISE_PUSH_ID, - NGHTTP3_REQ_STREAM_STATE_PUSH_PROMISE, - NGHTTP3_REQ_STREAM_STATE_IGN_PUSH_PROMISE, NGHTTP3_REQ_STREAM_STATE_IGN_FRAME, NGHTTP3_REQ_STREAM_STATE_IGN_REST, } nghttp3_req_stream_state; -typedef enum nghttp3_push_stream_state { - NGHTTP3_PUSH_STREAM_STATE_FRAME_TYPE, - NGHTTP3_PUSH_STREAM_STATE_FRAME_LENGTH, - NGHTTP3_PUSH_STREAM_STATE_DATA, - NGHTTP3_PUSH_STREAM_STATE_HEADERS, - NGHTTP3_PUSH_STREAM_STATE_IGN_FRAME, - NGHTTP3_PUSH_STREAM_STATE_PUSH_ID, - NGHTTP3_PUSH_STREAM_STATE_IGN_REST, -} nghttp3_push_stream_state; - typedef struct nghttp3_varint_read_state { int64_t acc; size_t left; @@ -104,38 +93,46 @@ typedef struct nghttp3_stream_read_state { } nghttp3_stream_read_state; /* NGHTTP3_STREAM_FLAG_NONE indicates that no flag is set. */ -#define NGHTTP3_STREAM_FLAG_NONE 0x0000 +#define NGHTTP3_STREAM_FLAG_NONE 0x0000u /* NGHTTP3_STREAM_FLAG_TYPE_IDENTIFIED is set when a unidirectional stream type is identified. */ -#define NGHTTP3_STREAM_FLAG_TYPE_IDENTIFIED 0x0001 +#define NGHTTP3_STREAM_FLAG_TYPE_IDENTIFIED 0x0001u /* NGHTTP3_STREAM_FLAG_FC_BLOCKED indicates that stream is blocked by QUIC flow control. */ -#define NGHTTP3_STREAM_FLAG_FC_BLOCKED 0x0002 +#define NGHTTP3_STREAM_FLAG_FC_BLOCKED 0x0002u /* NGHTTP3_STREAM_FLAG_READ_DATA_BLOCKED indicates that application is temporarily unable to provide data. */ -#define NGHTTP3_STREAM_FLAG_READ_DATA_BLOCKED 0x0004 +#define NGHTTP3_STREAM_FLAG_READ_DATA_BLOCKED 0x0004u /* NGHTTP3_STREAM_FLAG_WRITE_END_STREAM indicates that application finished to feed outgoing data. */ -#define NGHTTP3_STREAM_FLAG_WRITE_END_STREAM 0x0008 +#define NGHTTP3_STREAM_FLAG_WRITE_END_STREAM 0x0008u /* NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED indicates that stream is blocked due to QPACK decoding. */ -#define NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED 0x0010 +#define NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED 0x0010u /* NGHTTP3_STREAM_FLAG_READ_EOF indicates that remote endpoint sent fin. */ -#define NGHTTP3_STREAM_FLAG_READ_EOF 0x0020 +#define NGHTTP3_STREAM_FLAG_READ_EOF 0x0020u /* NGHTTP3_STREAM_FLAG_CLOSED indicates that QUIC stream was closed. nghttp3_stream object can still alive because it might be blocked by QPACK decoder. */ -#define NGHTTP3_STREAM_FLAG_CLOSED 0x0040 -/* NGHTTP3_STREAM_FLAG_PUSH_PROMISE_BLOCKED indicates that stream is - blocked because the corresponding PUSH_PROMISE has not been - received yet. */ -#define NGHTTP3_STREAM_FLAG_PUSH_PROMISE_BLOCKED 0x0080 +#define NGHTTP3_STREAM_FLAG_CLOSED 0x0040u /* NGHTTP3_STREAM_FLAG_SHUT_WR indicates that any further write operation to a stream is prohibited. */ -#define NGHTTP3_STREAM_FLAG_SHUT_WR 0x0100 -/* NGHTTP3_STREAM_FLAG_RESET indicates that stream is reset. */ -#define NGHTTP3_STREAM_FLAG_RESET 0x0200 +#define NGHTTP3_STREAM_FLAG_SHUT_WR 0x0100u +/* NGHTTP3_STREAM_FLAG_SHUT_RD indicates that a read-side stream is + closed abruptly and any incoming and pending stream data is just + discarded for a stream. */ +#define NGHTTP3_STREAM_FLAG_SHUT_RD 0x0200u +/* NGHTTP3_STREAM_FLAG_SERVER_PRIORITY_SET indicates that server + overrides stream priority. */ +#define NGHTTP3_STREAM_FLAG_SERVER_PRIORITY_SET 0x0400u +/* NGHTTP3_STREAM_FLAG_PRIORITY_UPDATE_RECVED indicates that server + received PRIORITY_UPDATE frame for this stream. */ +#define NGHTTP3_STREAM_FLAG_PRIORITY_UPDATE_RECVED 0x0800u +/* NGHTTP3_STREAM_FLAG_HTTP_ERROR indicates that + NGHTTP3_ERR_MALFORMED_HTTP_HEADER error is encountered while + processing incoming HTTP fields. */ +#define NGHTTP3_STREAM_FLAG_HTTP_ERROR 0x1000u typedef enum nghttp3_stream_http_state { NGHTTP3_HTTP_STATE_NONE, @@ -164,15 +161,11 @@ typedef enum nghttp3_stream_http_event { NGHTTP3_HTTP_EVENT_DATA_END, NGHTTP3_HTTP_EVENT_HEADERS_BEGIN, NGHTTP3_HTTP_EVENT_HEADERS_END, - NGHTTP3_HTTP_EVENT_PUSH_PROMISE_BEGIN, - NGHTTP3_HTTP_EVENT_PUSH_PROMISE_END, NGHTTP3_HTTP_EVENT_MSG_END, } nghttp3_stream_http_event; typedef struct nghttp3_stream nghttp3_stream; -typedef struct nghttp3_push_promise nghttp3_push_promise; - /* * nghttp3_stream_acked_data is a callback function which is invoked * when data sent on stream denoted by |stream_id| supplied from @@ -185,7 +178,7 @@ typedef struct nghttp3_push_promise nghttp3_push_promise; * NGHTTP3_ERR_CALLBACK_FAILURE. */ typedef int (*nghttp3_stream_acked_data)(nghttp3_stream *stream, - int64_t stream_id, size_t datalen, + int64_t stream_id, uint64_t datalen, void *user_data); typedef struct nghttp3_stream_callbacks { @@ -202,65 +195,70 @@ typedef struct nghttp3_http_state { /* recv_content_length is the number of body bytes received so far. */ int64_t recv_content_length; - uint16_t flags; + uint32_t flags; /* pri is a stream priority produced by nghttp3_pri_to_uint8. */ uint8_t pri; } nghttp3_http_state; struct nghttp3_stream { - const nghttp3_mem *mem; - nghttp3_map_entry me; - /* node is a node in dependency tree. For server initiated - unidirectional stream (push), scheduling is done via - corresponding nghttp3_push_promise object pointed by pp. */ - nghttp3_tnode node; - nghttp3_pq_entry qpack_blocked_pe; - nghttp3_stream_callbacks callbacks; - nghttp3_ringbuf frq; - nghttp3_ringbuf chunks; - nghttp3_ringbuf outq; - /* inq stores the stream raw data which cannot be read because - stream is blocked by QPACK decoder. */ - nghttp3_ringbuf inq; - nghttp3_qpack_stream_context qpack_sctx; - /* conn is a reference to underlying connection. It could be NULL - if stream is not a request/push stream. */ - nghttp3_conn *conn; - void *user_data; - /* unsent_bytes is the number of bytes in outq not written yet */ - size_t unsent_bytes; - /* outq_idx is an index into outq where next write is made. */ - size_t outq_idx; - /* outq_offset is write offset relative to the element at outq_idx - in outq. */ - size_t outq_offset; - /* ack_offset is offset acknowledged by peer relative to the first - element in outq. */ - uint64_t ack_offset; - /* ack_done is the number of bytes notified to an application that - they are acknowledged inside the first outq element if it is of - type NGHTTP3_BUF_TYPE_ALIEN. */ - size_t ack_done; - size_t unscheduled_nwrite; - nghttp3_stream_type type; - nghttp3_stream_read_state rstate; - /* pp is nghttp3_push_promise that this stream fulfills. */ - nghttp3_push_promise *pp; - /* error_code indicates the reason of closure of this stream. */ - uint64_t error_code; - - struct { - nghttp3_stream_http_state hstate; - } tx; - - struct { - nghttp3_stream_http_state hstate; - nghttp3_http_state http; - } rx; - - uint16_t flags; + union { + struct { + const nghttp3_mem *mem; + nghttp3_objalloc *out_chunk_objalloc; + nghttp3_objalloc *stream_objalloc; + nghttp3_tnode node; + nghttp3_pq_entry qpack_blocked_pe; + nghttp3_stream_callbacks callbacks; + nghttp3_ringbuf frq; + nghttp3_ringbuf chunks; + nghttp3_ringbuf outq; + /* inq stores the stream raw data which cannot be read because + stream is blocked by QPACK decoder. */ + nghttp3_ringbuf inq; + nghttp3_qpack_stream_context qpack_sctx; + /* conn is a reference to underlying connection. It could be NULL + if stream is not a request stream. */ + nghttp3_conn *conn; + void *user_data; + /* unsent_bytes is the number of bytes in outq not written yet */ + uint64_t unsent_bytes; + /* outq_idx is an index into outq where next write is made. */ + size_t outq_idx; + /* outq_offset is write offset relative to the element at outq_idx + in outq. */ + uint64_t outq_offset; + /* ack_offset is offset acknowledged by peer relative to the first + element in outq. */ + uint64_t ack_offset; + /* ack_done is the number of bytes notified to an application that + they are acknowledged inside the first outq element if it is of + type NGHTTP3_BUF_TYPE_ALIEN. */ + uint64_t ack_done; + uint64_t unscheduled_nwrite; + nghttp3_stream_type type; + nghttp3_stream_read_state rstate; + /* error_code indicates the reason of closure of this stream. */ + uint64_t error_code; + + struct { + uint64_t offset; + nghttp3_stream_http_state hstate; + } tx; + + struct { + nghttp3_stream_http_state hstate; + nghttp3_http_state http; + } rx; + + uint16_t flags; + }; + + nghttp3_opl_entry oplent; + }; }; +nghttp3_objalloc_def(stream, nghttp3_stream, oplent); + typedef struct nghttp3_frame_entry { nghttp3_frame fr; union { @@ -275,6 +273,8 @@ typedef struct nghttp3_frame_entry { int nghttp3_stream_new(nghttp3_stream **pstream, int64_t stream_id, uint64_t seq, const nghttp3_stream_callbacks *callbacks, + nghttp3_objalloc *out_chunk_objalloc, + nghttp3_objalloc *stream_objalloc, const nghttp3_mem *mem); void nghttp3_stream_del(nghttp3_stream *stream); @@ -293,8 +293,6 @@ int nghttp3_stream_fill_outq(nghttp3_stream *stream); int nghttp3_stream_write_stream_type(nghttp3_stream *stream); -int nghttp3_stream_write_stream_type_push_id(nghttp3_stream *stream); - nghttp3_ssize nghttp3_stream_writev(nghttp3_stream *stream, int *pfin, nghttp3_vec *vec, size_t veccnt); @@ -308,15 +306,12 @@ int nghttp3_stream_outq_add(nghttp3_stream *stream, int nghttp3_stream_write_headers(nghttp3_stream *stream, nghttp3_frame_entry *frent); -int nghttp3_stream_write_push_promise(nghttp3_stream *stream, - nghttp3_frame_entry *frent); - int nghttp3_stream_write_header_block(nghttp3_stream *stream, nghttp3_qpack_encoder *qenc, nghttp3_stream *qenc_stream, nghttp3_buf *rbuf, nghttp3_buf *ebuf, - int64_t frame_type, int64_t push_id, - const nghttp3_nv *nva, size_t nvlen); + int64_t frame_type, const nghttp3_nv *nva, + size_t nvlen); int nghttp3_stream_write_data(nghttp3_stream *stream, int *peof, nghttp3_frame_entry *frent); @@ -324,11 +319,11 @@ int nghttp3_stream_write_data(nghttp3_stream *stream, int *peof, int nghttp3_stream_write_settings(nghttp3_stream *stream, nghttp3_frame_entry *frent); -int nghttp3_stream_write_cancel_push(nghttp3_stream *stream, - nghttp3_frame_entry *frent); +int nghttp3_stream_write_goaway(nghttp3_stream *stream, + nghttp3_frame_entry *frent); -int nghttp3_stream_write_max_push_id(nghttp3_stream *stream, - nghttp3_frame_entry *frent); +int nghttp3_stream_write_priority_update(nghttp3_stream *stream, + nghttp3_frame_entry *frent); int nghttp3_stream_ensure_chunk(nghttp3_stream *stream, size_t need); @@ -374,12 +369,6 @@ int nghttp3_stream_transit_rx_http_state(nghttp3_stream *stream, int nghttp3_stream_empty_headers_allowed(nghttp3_stream *stream); -/* - * nghttp3_stream_bidi_or_push returns nonzero if |stream| is - * bidirectional or push stream. - */ -int nghttp3_stream_bidi_or_push(nghttp3_stream *stream); - /* * nghttp3_stream_uni returns nonzero if stream identified by * |stream_id| is unidirectional. diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_tnode.c b/deps/ngtcp2/nghttp3/lib/nghttp3_tnode.c index 94dca7dbf76..36e738c3469 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_tnode.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_tnode.c @@ -82,7 +82,7 @@ static uint64_t pq_get_first_cycle(nghttp3_pq *pq) { } int nghttp3_tnode_schedule(nghttp3_tnode *tnode, nghttp3_pq *pq, - size_t nwrite) { + uint64_t nwrite) { uint64_t penalty = nwrite / NGHTTP3_STREAM_MIN_WRITELEN; if (tnode->pe.index == NGHTTP3_PQ_BAD_INDEX) { diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_tnode.h b/deps/ngtcp2/nghttp3/lib/nghttp3_tnode.h index 817aec034c0..f71dcf5ee31 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_tnode.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_tnode.h @@ -72,7 +72,8 @@ void nghttp3_tnode_unschedule(nghttp3_tnode *tnode, nghttp3_pq *pq); * If |tnode| has already been scheduled, it is rescheduled by the * amount of |nwrite|. */ -int nghttp3_tnode_schedule(nghttp3_tnode *tnode, nghttp3_pq *pq, size_t nwrite); +int nghttp3_tnode_schedule(nghttp3_tnode *tnode, nghttp3_pq *pq, + uint64_t nwrite); /* * nghttp3_tnode_is_scheduled returns nonzero if |tnode| is scheduled. diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_vec.c b/deps/ngtcp2/nghttp3/lib/nghttp3_vec.c index ab292ac8ae3..ab58ff5832b 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_vec.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_vec.c @@ -26,9 +26,9 @@ #include "nghttp3_vec.h" #include "nghttp3_macro.h" -size_t nghttp3_vec_len(const nghttp3_vec *vec, size_t n) { +uint64_t nghttp3_vec_len(const nghttp3_vec *vec, size_t n) { size_t i; - size_t res = 0; + uint64_t res = 0; for (i = 0; i < n; ++i) { res += vec[i].len; @@ -36,3 +36,20 @@ size_t nghttp3_vec_len(const nghttp3_vec *vec, size_t n) { return res; } + +int64_t nghttp3_vec_len_varint(const nghttp3_vec *vec, size_t n) { + uint64_t res = 0; + size_t len; + size_t i; + + for (i = 0; i < n; ++i) { + len = vec[i].len; + if (len > NGHTTP3_MAX_VARINT - res) { + return -1; + } + + res += len; + } + + return (int64_t)res; +} diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_vec.h b/deps/ngtcp2/nghttp3/lib/nghttp3_vec.h index c1a928e3e1d..473d1467310 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_vec.h +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_vec.h @@ -32,4 +32,10 @@ #include +/* + * nghttp3_vec_len_varint is similar to nghttp3_vec_len, but it + * returns -1 if the sum of the length exceeds NGHTTP3_MAX_VARINT. + */ +int64_t nghttp3_vec_len_varint(const nghttp3_vec *vec, size_t n); + #endif /* NGHTTP3_VEC_H */ diff --git a/deps/ngtcp2/nghttp3/lib/nghttp3_version.c b/deps/ngtcp2/nghttp3/lib/nghttp3_version.c index dfad4793c4b..c460cc72835 100644 --- a/deps/ngtcp2/nghttp3/lib/nghttp3_version.c +++ b/deps/ngtcp2/nghttp3/lib/nghttp3_version.c @@ -31,7 +31,7 @@ static nghttp3_info version = {NGHTTP3_VERSION_AGE, NGHTTP3_VERSION_NUM, NGHTTP3_VERSION}; -nghttp3_info *nghttp3_version(int least_version) { +const nghttp3_info *nghttp3_version(int least_version) { if (least_version > NGHTTP3_VERSION_NUM) { return NULL; } diff --git a/deps/ngtcp2/ngtcp2.gyp b/deps/ngtcp2/ngtcp2.gyp index 9ea93be2091..a47a791610e 100644 --- a/deps/ngtcp2/ngtcp2.gyp +++ b/deps/ngtcp2/ngtcp2.gyp @@ -6,6 +6,9 @@ 'ngtcp2_sources': [ 'ngtcp2/lib/ngtcp2_acktr.c', 'ngtcp2/lib/ngtcp2_addr.c', + 'ngtcp2/lib/ngtcp2_balloc.c', + 'ngtcp2/lib/ngtcp2_bbr.c', + 'ngtcp2/lib/ngtcp2_bbr2.c', 'ngtcp2/lib/ngtcp2_buf.c', 'ngtcp2/lib/ngtcp2_cc.c', 'ngtcp2/lib/ngtcp2_cid.c', @@ -19,8 +22,11 @@ 'ngtcp2/lib/ngtcp2_log.c', 'ngtcp2/lib/ngtcp2_map.c', 'ngtcp2/lib/ngtcp2_mem.c', + 'ngtcp2/lib/ngtcp2_objalloc.c', + 'ngtcp2/lib/ngtcp2_opl.c', 'ngtcp2/lib/ngtcp2_path.c', 'ngtcp2/lib/ngtcp2_pkt.c', + 'ngtcp2/lib/ngtcp2_pmtud.c', 'ngtcp2/lib/ngtcp2_ppe.c', 'ngtcp2/lib/ngtcp2_pq.c', 'ngtcp2/lib/ngtcp2_pv.c', @@ -34,7 +40,8 @@ 'ngtcp2/lib/ngtcp2_strm.c', 'ngtcp2/lib/ngtcp2_vec.c', 'ngtcp2/lib/ngtcp2_version.c', - 'ngtcp2/crypto/shared.c', + 'ngtcp2/lib/ngtcp2_window_filter.c', + 'ngtcp2/crypto/shared.c' ], 'ngtcp2_sources_openssl': [ 'ngtcp2/crypto/openssl/openssl.c' @@ -43,6 +50,7 @@ 'ngtcp2/crypto/boringssl/boringssl.c' ], 'nghttp3_sources': [ + 'nghttp3/lib/nghttp3_balloc.c', 'nghttp3/lib/nghttp3_buf.c', 'nghttp3/lib/nghttp3_conn.c', 'nghttp3/lib/nghttp3_conv.c', @@ -55,6 +63,8 @@ 'nghttp3/lib/nghttp3_ksl.c', 'nghttp3/lib/nghttp3_map.c', 'nghttp3/lib/nghttp3_mem.c', + 'nghttp3/lib/nghttp3_objalloc.c', + 'nghttp3/lib/nghttp3_opl.c', 'nghttp3/lib/nghttp3_pq.c', 'nghttp3/lib/nghttp3_qpack.c', 'nghttp3/lib/nghttp3_qpack_huffman.c', @@ -117,6 +127,7 @@ '', 'ngtcp2/lib/includes', 'ngtcp2/crypto/includes', + 'ngtcp2/crypto', ] }, 'sources': [ diff --git a/deps/ngtcp2/ngtcp2/crypto/boringssl/boringssl.c b/deps/ngtcp2/ngtcp2/crypto/boringssl/boringssl.c index 8f75b485e3e..015032d41ca 100644 --- a/deps/ngtcp2/ngtcp2/crypto/boringssl/boringssl.c +++ b/deps/ngtcp2/ngtcp2/crypto/boringssl/boringssl.c @@ -35,15 +35,15 @@ #include #include #include +#include #include +#include #include "shared.h" -/* Define cipher types because BoringSSL does not implement EVP - interface for chacha20. */ typedef enum ngtcp2_crypto_boringssl_cipher_type { - NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_EVP_AES_128_CTR, - NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_EVP_AES_256_CTR, + NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_AES_128, + NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_AES_256, NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_CHACHA20, } ngtcp2_crypto_boringssl_cipher_type; @@ -51,22 +51,31 @@ typedef struct ngtcp2_crypto_boringssl_cipher { ngtcp2_crypto_boringssl_cipher_type type; } ngtcp2_crypto_boringssl_cipher; -static ngtcp2_crypto_boringssl_cipher crypto_cipher_evp_aes_128_ctr = { - NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_EVP_AES_128_CTR, +static ngtcp2_crypto_boringssl_cipher crypto_cipher_aes_128 = { + NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_AES_128, }; -static ngtcp2_crypto_boringssl_cipher crypto_cipher_evp_aes_256_ctr = { - NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_EVP_AES_256_CTR, +static ngtcp2_crypto_boringssl_cipher crypto_cipher_aes_256 = { + NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_AES_256, }; static ngtcp2_crypto_boringssl_cipher crypto_cipher_chacha20 = { NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_CHACHA20, }; +ngtcp2_crypto_aead *ngtcp2_crypto_aead_aes_128_gcm(ngtcp2_crypto_aead *aead) { + return ngtcp2_crypto_aead_init(aead, (void *)EVP_aead_aes_128_gcm()); +} + +ngtcp2_crypto_md *ngtcp2_crypto_md_sha256(ngtcp2_crypto_md *md) { + md->native_handle = (void *)EVP_sha256(); + return md; +} + ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_initial(ngtcp2_crypto_ctx *ctx) { ngtcp2_crypto_aead_init(&ctx->aead, (void *)EVP_aead_aes_128_gcm()); ctx->md.native_handle = (void *)EVP_sha256(); - ctx->hp.native_handle = (void *)&crypto_cipher_evp_aes_128_ctr; + ctx->hp.native_handle = (void *)&crypto_cipher_aes_128; ctx->max_encryption = 0; ctx->max_decryption_failure = 0; return ctx; @@ -123,9 +132,9 @@ static uint64_t crypto_ssl_get_aead_max_decryption_failure(SSL *ssl) { static const ngtcp2_crypto_boringssl_cipher *crypto_ssl_get_hp(SSL *ssl) { switch (SSL_CIPHER_get_id(SSL_get_current_cipher(ssl))) { case TLS1_CK_AES_128_GCM_SHA256: - return &crypto_cipher_evp_aes_128_ctr; + return &crypto_cipher_aes_128; case TLS1_CK_AES_256_GCM_SHA384: - return &crypto_cipher_evp_aes_256_ctr; + return &crypto_cipher_aes_256; case TLS1_CK_CHACHA20_POLY1305_SHA256: return &crypto_cipher_chacha20; default: @@ -216,19 +225,15 @@ void ngtcp2_crypto_aead_ctx_free(ngtcp2_crypto_aead_ctx *aead_ctx) { } } -typedef enum ngtcp2_crypto_boringssl_cipher_ctx_type { - NGTCP2_CRYPTO_BORINGSSL_CIPHER_CTX_TYPE_EVP, - NGTCP2_CRYPTO_BORINGSSL_CIPHER_CTX_TYPE_CHACHA20, -} ngtcp2_crypto_boringssl_cipher_ctx_type; - typedef struct ngtcp2_crypto_boringssl_cipher_ctx { - ngtcp2_crypto_boringssl_cipher_ctx_type type; + ngtcp2_crypto_boringssl_cipher_type type; union { - /* ctx is EVP_CIPHER_CTX used when type == - NGTCP2_CRYPTO_BORINGSSL_CIPHER_CTX_TYPE_EVP. */ - EVP_CIPHER_CTX *ctx; + /* aes_key is an encryption key when type is either + NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_AES_128 or + NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_AES_256. */ + AES_KEY aes_key; /* key contains an encryption key when type == - NGTCP2_CRYPTO_BORINGSSL_CIPHER_CTX_TYPE_CHACHA20. */ + NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_CHACHA20. */ uint8_t key[32]; }; } ngtcp2_crypto_boringssl_cipher_ctx; @@ -238,70 +243,41 @@ int ngtcp2_crypto_cipher_ctx_encrypt_init(ngtcp2_crypto_cipher_ctx *cipher_ctx, const uint8_t *key) { ngtcp2_crypto_boringssl_cipher *hp_cipher = cipher->native_handle; ngtcp2_crypto_boringssl_cipher_ctx *ctx; - EVP_CIPHER_CTX *actx; - const EVP_CIPHER *evp_cipher; - - switch (hp_cipher->type) { - case NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_EVP_AES_128_CTR: - evp_cipher = EVP_aes_128_ctr(); - break; - case NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_EVP_AES_256_CTR: - evp_cipher = EVP_aes_256_ctr(); - break; - case NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_CHACHA20: - ctx = malloc(sizeof(*ctx)); - if (ctx == NULL) { - return -1; - } - - ctx->type = NGTCP2_CRYPTO_BORINGSSL_CIPHER_CTX_TYPE_CHACHA20; - memcpy(ctx->key, key, sizeof(ctx->key)); - - cipher_ctx->native_handle = ctx; - - return 0; - default: - assert(0); - }; - - actx = EVP_CIPHER_CTX_new(); - if (actx == NULL) { - return -1; - } - - if (!EVP_EncryptInit_ex(actx, evp_cipher, NULL, key, NULL)) { - EVP_CIPHER_CTX_free(actx); - return -1; - } + int rv; + (void)rv; ctx = malloc(sizeof(*ctx)); if (ctx == NULL) { - EVP_CIPHER_CTX_free(actx); return -1; } - ctx->type = NGTCP2_CRYPTO_BORINGSSL_CIPHER_CTX_TYPE_EVP; - ctx->ctx = actx; - + ctx->type = hp_cipher->type; cipher_ctx->native_handle = ctx; - return 0; + switch (hp_cipher->type) { + case NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_AES_128: + rv = AES_set_encrypt_key(key, 128, &ctx->aes_key); + assert(0 == rv); + return 0; + case NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_AES_256: + rv = AES_set_encrypt_key(key, 256, &ctx->aes_key); + assert(0 == rv); + return 0; + case NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_CHACHA20: + memcpy(ctx->key, key, sizeof(ctx->key)); + return 0; + default: + assert(0); + abort(); + }; } void ngtcp2_crypto_cipher_ctx_free(ngtcp2_crypto_cipher_ctx *cipher_ctx) { - ngtcp2_crypto_boringssl_cipher_ctx *ctx; - if (!cipher_ctx->native_handle) { return; } - ctx = cipher_ctx->native_handle; - - if (ctx->type == NGTCP2_CRYPTO_BORINGSSL_CIPHER_CTX_TYPE_EVP) { - EVP_CIPHER_CTX_free(ctx->ctx); - } - - free(ctx); + free(cipher_ctx->native_handle); } int ngtcp2_crypto_hkdf_extract(uint8_t *dest, const ngtcp2_crypto_md *md, @@ -331,18 +307,32 @@ int ngtcp2_crypto_hkdf_expand(uint8_t *dest, size_t destlen, return 0; } +int ngtcp2_crypto_hkdf(uint8_t *dest, size_t destlen, + const ngtcp2_crypto_md *md, const uint8_t *secret, + size_t secretlen, const uint8_t *salt, size_t saltlen, + const uint8_t *info, size_t infolen) { + const EVP_MD *prf = md->native_handle; + + if (HKDF(dest, destlen, prf, secret, secretlen, salt, saltlen, info, + infolen) != 1) { + return -1; + } + + return 0; +} + int ngtcp2_crypto_encrypt(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *plaintext, size_t plaintextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen) { + const uint8_t *aad, size_t aadlen) { const EVP_AEAD *cipher = aead->native_handle; EVP_AEAD_CTX *actx = aead_ctx->native_handle; size_t max_outlen = plaintextlen + EVP_AEAD_max_overhead(cipher); size_t outlen; if (EVP_AEAD_CTX_seal(actx, dest, &outlen, max_outlen, nonce, noncelen, - plaintext, plaintextlen, ad, adlen) != 1) { + plaintext, plaintextlen, aad, aadlen) != 1) { return -1; } @@ -353,15 +343,21 @@ int ngtcp2_crypto_decrypt(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *ciphertext, size_t ciphertextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen) { + const uint8_t *aad, size_t aadlen) { + const EVP_AEAD *cipher = aead->native_handle; EVP_AEAD_CTX *actx = aead_ctx->native_handle; - size_t max_outlen = ciphertextlen; + size_t max_overhead = EVP_AEAD_max_overhead(cipher); + size_t max_outlen; size_t outlen; - (void)aead; + if (ciphertextlen < max_overhead) { + return -1; + } + + max_outlen = ciphertextlen - max_overhead; if (EVP_AEAD_CTX_open(actx, dest, &outlen, max_outlen, nonce, noncelen, - ciphertext, ciphertextlen, ad, adlen) != 1) { + ciphertext, ciphertextlen, aad, aadlen) != 1) { return -1; } @@ -373,23 +369,16 @@ int ngtcp2_crypto_hp_mask(uint8_t *dest, const ngtcp2_crypto_cipher *hp, const uint8_t *sample) { static const uint8_t PLAINTEXT[] = "\x00\x00\x00\x00\x00"; ngtcp2_crypto_boringssl_cipher_ctx *ctx = hp_ctx->native_handle; - EVP_CIPHER_CTX *actx; - int len; uint32_t counter; (void)hp; switch (ctx->type) { - case NGTCP2_CRYPTO_BORINGSSL_CIPHER_CTX_TYPE_EVP: - actx = ctx->ctx; - if (!EVP_EncryptInit_ex(actx, NULL, NULL, NULL, sample) || - !EVP_EncryptUpdate(actx, dest, &len, PLAINTEXT, - sizeof(PLAINTEXT) - 1) || - !EVP_EncryptFinal_ex(actx, dest + sizeof(PLAINTEXT) - 1, &len)) { - return -1; - } + case NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_AES_128: + case NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_AES_256: + AES_ecb_encrypt(sample, dest, &ctx->aes_key, 1); return 0; - case NGTCP2_CRYPTO_BORINGSSL_CIPHER_CTX_TYPE_CHACHA20: + case NGTCP2_CRYPTO_BORINGSSL_CIPHER_TYPE_CHACHA20: #if defined(WORDS_BIGENDIAN) counter = (uint32_t)sample[0] + (uint32_t)(sample[1] << 8) + (uint32_t)(sample[2] << 16) + (uint32_t)(sample[3] << 24); @@ -434,10 +423,7 @@ int ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, SSL_reset_early_data_reject(ssl); - rv = ngtcp2_conn_early_data_rejected(conn); - if (rv != 0) { - return -1; - } + ngtcp2_conn_early_data_rejected(conn); goto retry; default: @@ -472,24 +458,13 @@ int ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, int ngtcp2_crypto_set_remote_transport_params(ngtcp2_conn *conn, void *tls) { SSL *ssl = tls; - ngtcp2_transport_params_type exttype = - ngtcp2_conn_is_server(conn) - ? NGTCP2_TRANSPORT_PARAMS_TYPE_CLIENT_HELLO - : NGTCP2_TRANSPORT_PARAMS_TYPE_ENCRYPTED_EXTENSIONS; const uint8_t *tp; size_t tplen; - ngtcp2_transport_params params; int rv; SSL_get_peer_quic_transport_params(ssl, &tp, &tplen); - rv = ngtcp2_decode_transport_params(¶ms, exttype, tp, tplen); - if (rv != 0) { - ngtcp2_conn_set_tls_error(conn, rv); - return -1; - } - - rv = ngtcp2_conn_set_remote_transport_params(conn, ¶ms); + rv = ngtcp2_conn_decode_remote_transport_params(conn, tp, tplen); if (rv != 0) { ngtcp2_conn_set_tls_error(conn, rv); return -1; @@ -520,6 +495,7 @@ ngtcp2_crypto_level ngtcp2_crypto_boringssl_from_ssl_encryption_level( return NGTCP2_CRYPTO_LEVEL_APPLICATION; default: assert(0); + abort(); } } @@ -536,5 +512,116 @@ enum ssl_encryption_level_t ngtcp2_crypto_boringssl_from_ngtcp2_crypto_level( return ssl_encryption_early_data; default: assert(0); + abort(); + } +} + +int ngtcp2_crypto_get_path_challenge_data_cb(ngtcp2_conn *conn, uint8_t *data, + void *user_data) { + (void)conn; + (void)user_data; + + if (RAND_bytes(data, NGTCP2_PATH_CHALLENGE_DATALEN) != 1) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +int ngtcp2_crypto_random(uint8_t *data, size_t datalen) { + if (RAND_bytes(data, datalen) != 1) { + return -1; + } + + return 0; +} + +static int set_read_secret(SSL *ssl, enum ssl_encryption_level_t bssl_level, + const SSL_CIPHER *cipher, const uint8_t *secret, + size_t secretlen) { + ngtcp2_crypto_conn_ref *conn_ref = SSL_get_app_data(ssl); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + ngtcp2_crypto_level level = + ngtcp2_crypto_boringssl_from_ssl_encryption_level(bssl_level); + (void)cipher; + + if (ngtcp2_crypto_derive_and_install_rx_key(conn, NULL, NULL, NULL, level, + secret, secretlen) != 0) { + return 0; + } + + return 1; +} + +static int set_write_secret(SSL *ssl, enum ssl_encryption_level_t bssl_level, + const SSL_CIPHER *cipher, const uint8_t *secret, + size_t secretlen) { + ngtcp2_crypto_conn_ref *conn_ref = SSL_get_app_data(ssl); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + ngtcp2_crypto_level level = + ngtcp2_crypto_boringssl_from_ssl_encryption_level(bssl_level); + (void)cipher; + + if (ngtcp2_crypto_derive_and_install_tx_key(conn, NULL, NULL, NULL, level, + secret, secretlen) != 0) { + return 0; } + + return 1; +} + +static int add_handshake_data(SSL *ssl, enum ssl_encryption_level_t bssl_level, + const uint8_t *data, size_t datalen) { + ngtcp2_crypto_conn_ref *conn_ref = SSL_get_app_data(ssl); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + ngtcp2_crypto_level level = + ngtcp2_crypto_boringssl_from_ssl_encryption_level(bssl_level); + int rv; + + rv = ngtcp2_conn_submit_crypto_data(conn, level, data, datalen); + if (rv != 0) { + ngtcp2_conn_set_tls_error(conn, rv); + return 0; + } + + return 1; +} + +static int flush_flight(SSL *ssl) { + (void)ssl; + return 1; +} + +static int send_alert(SSL *ssl, enum ssl_encryption_level_t bssl_level, + uint8_t alert) { + ngtcp2_crypto_conn_ref *conn_ref = SSL_get_app_data(ssl); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + (void)bssl_level; + + ngtcp2_conn_set_tls_alert(conn, alert); + + return 1; +} + +static SSL_QUIC_METHOD quic_method = { + set_read_secret, set_write_secret, add_handshake_data, + flush_flight, send_alert, +}; + +static void crypto_boringssl_configure_context(SSL_CTX *ssl_ctx) { + SSL_CTX_set_min_proto_version(ssl_ctx, TLS1_3_VERSION); + SSL_CTX_set_max_proto_version(ssl_ctx, TLS1_3_VERSION); + SSL_CTX_set_quic_method(ssl_ctx, &quic_method); +} + +int ngtcp2_crypto_boringssl_configure_server_context(SSL_CTX *ssl_ctx) { + crypto_boringssl_configure_context(ssl_ctx); + + return 0; +} + +int ngtcp2_crypto_boringssl_configure_client_context(SSL_CTX *ssl_ctx) { + crypto_boringssl_configure_context(ssl_ctx); + + return 0; } diff --git a/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h b/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h index 23901d18c16..4736b51c3cb 100644 --- a/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h +++ b/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h @@ -31,6 +31,13 @@ extern "C" { #endif +#ifdef WIN32 +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +#endif /* WIN32 */ + /** * @macro * @@ -55,22 +62,13 @@ extern "C" { */ #define NGTCP2_CRYPTO_INITIAL_IVLEN 12 -/** - * @function - * - * `ngtcp2_crypto_ctx_initial` initializes |ctx| for Initial packet - * encryption and decryption. - */ -NGTCP2_EXTERN ngtcp2_crypto_ctx * -ngtcp2_crypto_ctx_initial(ngtcp2_crypto_ctx *ctx); - /** * @function * * `ngtcp2_crypto_ctx_tls` initializes |ctx| by extracting negotiated * ciphers and message digests from native TLS session * |tls_native_handle|. This is used for encrypting/decrypting - * Handshake and Short packets. + * Handshake and Short header packets. * * If libngtcp2_crypto_openssl is linked, |tls_native_handle| must be * a pointer to SSL object. @@ -92,33 +90,6 @@ NGTCP2_EXTERN ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_tls(ngtcp2_crypto_ctx *ctx, NGTCP2_EXTERN ngtcp2_crypto_ctx * ngtcp2_crypto_ctx_tls_early(ngtcp2_crypto_ctx *ctx, void *tls_native_handle); -/** - * @function - * - * `ngtcp2_crypto_aead_init` initializes |aead| with the provided - * |aead_native_handle| which is an underlying AEAD object. - * - * If libngtcp2_crypto_openssl is linked, |aead_native_handle| must be - * a pointer to EVP_CIPHER. - * - * If libngtcp2_crypto_gnutls is linked, |aead_native_handle| must be - * gnutls_cipher_algorithm_t casted to ``void *``. - * - * If libngtcp2_crypto_boringssl is linked, |aead_native_handle| must - * be a pointer to EVP_AEAD. - */ -NGTCP2_EXTERN ngtcp2_crypto_aead * -ngtcp2_crypto_aead_init(ngtcp2_crypto_aead *aead, void *aead_native_handle); - -/** - * @function - * - * `ngtcp2_crypto_aead_retry` initializes |aead| with the AEAD cipher - * AEAD_AES_128_GCM for Retry packet integrity protection. - */ -NGTCP2_EXTERN ngtcp2_crypto_aead * -ngtcp2_crypto_aead_retry(ngtcp2_crypto_aead *aead); - /** * @function * @@ -191,6 +162,20 @@ NGTCP2_EXTERN int ngtcp2_crypto_hkdf_expand(uint8_t *dest, size_t destlen, const uint8_t *info, size_t infolen); +/** + * @function + * + * `ngtcp2_crypto_hkdf` performs HKDF operation. The result is + * |destlen| bytes long and is stored to the buffer pointed by |dest|. + * + * This function returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int ngtcp2_crypto_hkdf(uint8_t *dest, size_t destlen, + const ngtcp2_crypto_md *md, + const uint8_t *secret, size_t secretlen, + const uint8_t *salt, size_t saltlen, + const uint8_t *info, size_t infolen); + /** * @function * @@ -235,39 +220,16 @@ typedef enum ngtcp2_crypto_side { NGTCP2_EXTERN size_t ngtcp2_crypto_packet_protection_ivlen(const ngtcp2_crypto_aead *aead); -/** - * @function - * - * `ngtcp2_crypto_derive_packet_protection_key` derives packet - * protection key. This function writes packet protection key into - * the buffer pointed by |key|. |key| must point to the buffer which - * is at least ngtcp2_crypto_aead_keylen(aead) bytes long. This - * function writes packet protection IV into |iv|. |iv| must point to - * the buffer which is at least - * ngtcp2_crypto_packet_protection_ivlen(aead). |key| is - * ngtcp2_crypto_aead_keylen(aead) bytes long. |iv| is - * ngtcp2_crypto_packet_protection_ivlen(aead) bytes long. - * - * If |hp| is not NULL, this function also derives packet header - * protection key and writes the key into the buffer pointed by |hp|. - * The length of key is ngtcp2_crypto_aead_keylen(aead) bytes long. - * |hp|, if not NULL, must have enough capacity to store the key. - * - * This function returns 0 if it succeeds, or -1. - */ -NGTCP2_EXTERN int ngtcp2_crypto_derive_packet_protection_key( - uint8_t *key, uint8_t *iv, uint8_t *hp, const ngtcp2_crypto_aead *aead, - const ngtcp2_crypto_md *md, const uint8_t *secret, size_t secretlen); - /** * @function * * `ngtcp2_crypto_encrypt` encrypts |plaintext| of length * |plaintextlen| and writes the ciphertext into the buffer pointed by * |dest|. The length of ciphertext is plaintextlen + - * ngtcp2_crypto_aead_max_overhead(aead) bytes long. |dest| must have - * enough capacity to store the ciphertext. It is allowed to specify - * the same value to |dest| and |plaintext|. + * :member:`aead->max_overhead ` + * bytes long. |dest| must have enough capacity to store the + * ciphertext. It is allowed to specify the same value to |dest| and + * |plaintext|. * * This function returns 0 if it succeeds, or -1. */ @@ -277,14 +239,14 @@ NGTCP2_EXTERN int ngtcp2_crypto_encrypt(uint8_t *dest, const uint8_t *plaintext, size_t plaintextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen); + const uint8_t *aad, size_t aadlen); /** * @function * * `ngtcp2_crypto_encrypt_cb` is a wrapper function around * `ngtcp2_crypto_encrypt`. It can be directly passed to - * :member:`ngtcp2_conn_callbacks.encrypt` field. + * :member:`ngtcp2_callbacks.encrypt` field. * * This function returns 0 if it succeeds, or * :macro:`NGTCP2_ERR_CALLBACK_FAILURE`. @@ -294,7 +256,7 @@ ngtcp2_crypto_encrypt_cb(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *plaintext, size_t plaintextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen); + const uint8_t *aad, size_t aadlen); /** * @function @@ -302,9 +264,10 @@ ngtcp2_crypto_encrypt_cb(uint8_t *dest, const ngtcp2_crypto_aead *aead, * `ngtcp2_crypto_decrypt` decrypts |ciphertext| of length * |ciphertextlen| and writes the plaintext into the buffer pointed by * |dest|. The length of plaintext is ciphertextlen - - * ngtcp2_crypto_aead_max_overhead(aead) bytes long. |dest| must have - * enough capacity to store the plaintext. It is allowed to specify - * the same value to |dest| and |ciphertext|. + * :member:`aead->max_overhead ` + * bytes long. |dest| must have enough capacity to store the + * plaintext. It is allowed to specify the same value to |dest| and + * |ciphertext|. * * This function returns 0 if it succeeds, or -1. */ @@ -314,14 +277,14 @@ NGTCP2_EXTERN int ngtcp2_crypto_decrypt(uint8_t *dest, const uint8_t *ciphertext, size_t ciphertextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen); + const uint8_t *aad, size_t aadlen); /** * @function * * `ngtcp2_crypto_decrypt_cb` is a wrapper function around * `ngtcp2_crypto_decrypt`. It can be directly passed to - * :member:`ngtcp2_conn_callbacks.decrypt` field. + * :member:`ngtcp2_callbacks.decrypt` field. * * This function returns 0 if it succeeds, or * :macro:`NGTCP2_ERR_TLS_DECRYPT`. @@ -331,15 +294,19 @@ ngtcp2_crypto_decrypt_cb(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *ciphertext, size_t ciphertextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen); + const uint8_t *aad, size_t aadlen); /** * @function * * `ngtcp2_crypto_hp_mask` generates mask which is used in packet * header encryption. The mask is written to the buffer pointed by - * |dest|. The length of mask is 5 bytes. |dest| must have enough - * capacity to store the mask. + * |dest|. The sample is passed as |sample| which is + * :macro:`NGTCP2_HP_SAMPLELEN` bytes long. The length of mask must + * be at least :macro:`NGTCP2_HP_MASKLEN`. The library only uses the + * first :macro:`NGTCP2_HP_MASKLEN` bytes of the produced mask. The + * buffer pointed by |dest| must have at least + * :macro:`NGTCP2_HP_SAMPLELEN` bytes available. * * This function returns 0 if it succeeds, or -1. */ @@ -353,7 +320,7 @@ NGTCP2_EXTERN int ngtcp2_crypto_hp_mask(uint8_t *dest, * * `ngtcp2_crypto_hp_mask_cb` is a wrapper function around * `ngtcp2_crypto_hp_mask`. It can be directly passed to - * :member:`ngtcp2_conn_callbacks.hp_mask` field. + * :member:`ngtcp2_callbacks.hp_mask` field. * * This function returns 0 if it succeeds, or * :macro:`NGTCP2_ERR_CALLBACK_FAILURE`. @@ -379,16 +346,30 @@ ngtcp2_crypto_hp_mask_cb(uint8_t *dest, const ngtcp2_crypto_cipher *hp, * |secretlen| specifies the length of |secret|. * * The length of packet protection key and header protection key is - * ngtcp2_crypto_aead(ctx->aead), and the length of packet protection - * IV is ngtcp2_crypto_packet_protection_ivlen(ctx->aead) where ctx - * can be obtained by `ngtcp2_crypto_ctx_tls`. + * `ngtcp2_crypto_aead_keylen(ctx->aead) `, + * and the length of packet protection IV is + * `ngtcp2_crypto_packet_protection_ivlen(ctx->aead) + * ` where ctx is obtained by + * `ngtcp2_crypto_ctx_tls` (or `ngtcp2_crypto_ctx_tls_early` if + * |level| == :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_EARLY`). * * In the first call of this function, it calls - * `ngtcp2_conn_set_crypto_ctx` to set negotiated AEAD and message - * digest algorithm. After the successful call of this function, - * application can use `ngtcp2_conn_get_crypto_ctx` to get the object. - * It also calls `ngtcp2_conn_set_aead_overhead` to set AEAD tag - * length. + * `ngtcp2_conn_set_crypto_ctx` (or `ngtcp2_conn_set_early_crypto_ctx` + * if |level| == + * :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_EARLY`) to set + * negotiated AEAD and message digest algorithm. After the successful + * call of this function, application can use + * `ngtcp2_conn_get_crypto_ctx` (or `ngtcp2_conn_get_early_crypto_ctx` + * if |level| == + * :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_EARLY`) to get + * :type:`ngtcp2_crypto_ctx`. + * + * If |conn| is initialized as client, and |level| is + * :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_APPLICATION`, this + * function retrieves a remote QUIC transport parameters extension + * from an object obtained by `ngtcp2_conn_get_tls_native_handle` and + * sets it to |conn| by calling + * `ngtcp2_conn_decode_remote_transport_params`. * * This function returns 0 if it succeeds, or -1. */ @@ -412,20 +393,30 @@ NGTCP2_EXTERN int ngtcp2_crypto_derive_and_install_rx_key( * |secretlen| specifies the length of |secret|. * * The length of packet protection key and header protection key is - * ngtcp2_crypto_aead(ctx->aead), and the length of packet protection - * IV is ngtcp2_crypto_packet_protection_ivlen(ctx->aead) where ctx - * can be obtained by `ngtcp2_crypto_ctx_tls`. + * `ngtcp2_crypto_aead_keylen(ctx->aead) `, + * and the length of packet protection IV is + * `ngtcp2_crypto_packet_protection_ivlen(ctx->aead) + * ` where ctx is obtained by + * `ngtcp2_crypto_ctx_tls` (or `ngtcp2_crypto_ctx_tls_early` if + * |level| == :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_EARLY`). * * In the first call of this function, it calls - * `ngtcp2_conn_set_crypto_ctx` to set negotiated AEAD and message - * digest algorithm. After the successful call of this function, - * application can use `ngtcp2_conn_get_crypto_ctx` to get the object. - * It also calls `ngtcp2_conn_set_aead_overhead` to set AEAD tag - * length. - * - * If |level| is NGTCP2_CRYPTO_LEVEL_APP, this function retrieves a - * remote QUIC transport parameters extension from |tls| and sets it - * to |conn|. + * `ngtcp2_conn_set_crypto_ctx` (or `ngtcp2_conn_set_early_crypto_ctx` + * if |level| == + * :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_EARLY`) to set + * negotiated AEAD and message digest algorithm. After the successful + * call of this function, application can use + * `ngtcp2_conn_get_crypto_ctx` (or `ngtcp2_conn_get_early_crypto_ctx` + * if |level| == + * :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_EARLY`) to get + * :type:`ngtcp2_crypto_ctx`. + * + * If |conn| is initialized as server, and |level| is + * :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_APPLICATION`, this + * function retrieves a remote QUIC transport parameters extension + * from an object obtained by `ngtcp2_conn_get_tls_native_handle` and + * sets it to |conn| by calling + * `ngtcp2_conn_decode_remote_transport_params`. * * This function returns 0 if it succeeds, or -1. */ @@ -461,9 +452,11 @@ NGTCP2_EXTERN int ngtcp2_crypto_derive_and_install_tx_key( * length of |rx_secret| and |tx_secret|. * * The length of packet protection key and header protection key is - * ngtcp2_crypto_aead(ctx->aead), and the length of packet protection - * IV is ngtcp2_crypto_packet_protection_ivlen(ctx->aead) where ctx - * can be obtained by `ngtcp2_conn_get_crypto_ctx`. + * `ngtcp2_crypto_aead_keylen(ctx->aead) `, + * and the length of packet protection IV is + * `ngtcp2_crypto_packet_protection_ivlen(ctx->aead) + * ` where ctx is obtained by + * `ngtcp2_crypto_ctx_tls`. * * This function returns 0 if it succeeds, or -1. */ @@ -479,7 +472,7 @@ NGTCP2_EXTERN int ngtcp2_crypto_update_key( * * `ngtcp2_crypto_update_key_cb` is a wrapper function around * `ngtcp2_crypto_update_key`. It can be directly passed to - * :member:`ngtcp2_conn_callbacks.update_key` field. + * :member:`ngtcp2_callbacks.update_key` field. * * This function returns 0 if it succeeds, or * :macro:`NGTCP2_ERR_CALLBACK_FAILURE`. @@ -498,8 +491,8 @@ NGTCP2_EXTERN int ngtcp2_crypto_update_key_cb( * encryption keys and sets QUIC transport parameters. * * This function can be directly passed to - * :member:`ngtcp2_conn_callbacks.client_initial` field. It is only - * used by client. + * :member:`ngtcp2_callbacks.client_initial` field. It is only used + * by client. * * This function returns 0 if it succeeds, or * :macro:`NGTCP2_ERR_CALLBACK_FAILURE`. @@ -514,7 +507,7 @@ NGTCP2_EXTERN int ngtcp2_crypto_client_initial_cb(ngtcp2_conn *conn, * response to incoming Retry packet. * * This function can be directly passed to - * :member:`ngtcp2_conn_callbacks.recv_retry` field. It is only used + * :member:`ngtcp2_callbacks.recv_retry` field. It is only used * by client. * * This function returns 0 if it succeeds, or @@ -532,7 +525,7 @@ NGTCP2_EXTERN int ngtcp2_crypto_recv_retry_cb(ngtcp2_conn *conn, * transport parameters. * * This function can be directly passed to - * :member:`ngtcp2_conn_callbacks.recv_client_initial` field. It is + * :member:`ngtcp2_callbacks.recv_client_initial` field. It is * only used by server. * * This function returns 0 if it succeeds, or @@ -549,8 +542,8 @@ NGTCP2_EXTERN int ngtcp2_crypto_recv_client_initial_cb(ngtcp2_conn *conn, * length |datalen| in encryption level |crypto_level| and may feed * outgoing CRYPTO data to |conn|. This function can drive handshake. * This function can be also used after handshake completes. It is - * allowed to call this function with datalen == 0. In this case, no - * additional read operation is done. + * allowed to call this function with |datalen| == 0. In this case, + * no additional read operation is done. * * This function returns 0 if it succeeds, or a negative error code. * The generic error code is -1 if a specific error code is not @@ -563,34 +556,185 @@ ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, ngtcp2_crypto_level crypto_level, const uint8_t *data, size_t datalen); +/** + * @function + * + * `ngtcp2_crypto_recv_crypto_data_cb` is a wrapper function around + * `ngtcp2_crypto_read_write_crypto_data`. It can be directly passed + * to :member:`ngtcp2_callbacks.recv_crypto_data` field. + * + * If this function is used, the TLS implementation specific error + * codes described in `ngtcp2_crypto_read_write_crypto_data` are + * treated as if it returns -1. Do not use this function if an + * application wishes to use the TLS implementation specific error + * codes. + */ +NGTCP2_EXTERN int ngtcp2_crypto_recv_crypto_data_cb( + ngtcp2_conn *conn, ngtcp2_crypto_level crypto_level, uint64_t offset, + const uint8_t *data, size_t datalen, void *user_data); + /** * @function * * `ngtcp2_crypto_generate_stateless_reset_token` generates a - * stateless reset token using HKDF extraction with |md| using the - * given |cid| and static key |secret| as input. The token will be - * written to the buffer pointed by |token| and it must have a - * capacity of at least :macro:`NGTCP2_STATELESS_RESET_TOKENLEN` - * bytes. + * stateless reset token using HKDF extraction using the given |cid| + * and static key |secret| as input. The token will be written to + * the buffer pointed by |token| and it must have a capacity of at + * least :macro:`NGTCP2_STATELESS_RESET_TOKENLEN` bytes. * * This function returns 0 if it succeeds, or -1. */ NGTCP2_EXTERN int ngtcp2_crypto_generate_stateless_reset_token( - uint8_t *token, const ngtcp2_crypto_md *md, const uint8_t *secret, - size_t secretlen, const ngtcp2_cid *cid); + uint8_t *token, const uint8_t *secret, size_t secretlen, + const ngtcp2_cid *cid); + +/** + * @macro + * + * :macro:`NGTCP2_CRYPTO_TOKEN_RAND_DATALEN` is the length of random + * data added to a token generated by + * `ngtcp2_crypto_generate_retry_token` or + * `ngtcp2_crypto_generate_regular_token`. + */ +#define NGTCP2_CRYPTO_TOKEN_RAND_DATALEN 32 + +/** + * @macro + * + * :macro:`NGTCP2_CRYPTO_TOKEN_MAGIC_RETRY` is the magic byte for + * Retry token generated by `ngtcp2_crypto_generate_retry_token`. + */ +#define NGTCP2_CRYPTO_TOKEN_MAGIC_RETRY 0xb6 + +/** + * @macro + * + * :macro:`NGTCP2_CRYPTO_TOKEN_MAGIC_REGULAR` is the magic byte for a + * token generated by `ngtcp2_crypto_generate_regular_token`. + */ +#define NGTCP2_CRYPTO_TOKEN_MAGIC_REGULAR 0x36 + +/** + * @macro + * + * :macro:`NGTCP2_CRYPTO_MAX_RETRY_TOKENLEN` is the maximum length of + * a token generated by `ngtcp2_crypto_generate_retry_token`. + */ +#define NGTCP2_CRYPTO_MAX_RETRY_TOKENLEN \ + (/* magic = */ 1 + /* cid len = */ 1 + NGTCP2_MAX_CIDLEN + \ + sizeof(ngtcp2_tstamp) + /* aead tag = */ 16 + \ + NGTCP2_CRYPTO_TOKEN_RAND_DATALEN) + +/** + * @macro + * + * :macro:`NGTCP2_CRYPTO_MAX_REGULAR_TOKENLEN` is the maximum length + * of a token generated by `ngtcp2_crypto_generate_regular_token`. + */ +#define NGTCP2_CRYPTO_MAX_REGULAR_TOKENLEN \ + (/* magic = */ 1 + sizeof(ngtcp2_tstamp) + /* aead tag = */ 16 + \ + NGTCP2_CRYPTO_TOKEN_RAND_DATALEN) + +/** + * @function + * + * `ngtcp2_crypto_generate_retry_token` generates a token in the + * buffer pointed by |token| that is sent with Retry packet. The + * buffer pointed by |token| must have at least + * :macro:`NGTCP2_CRYPTO_MAX_RETRY_TOKENLEN` bytes long. The + * successfully generated token starts with + * :macro:`NGTCP2_CRYPTO_TOKEN_MAGIC_RETRY`. |secret| of length + * |secretlen| is an initial keying material to generate keys to + * encrypt the token. |version| is QUIC version. |remote_addr| of + * length |remote_addrlen| is an address of client. |retry_scid| is a + * Source Connection ID chosen by server and set in Retry packet. + * |odcid| is a Destination Connection ID in Initial packet sent by + * client. |ts| is the timestamp when the token is generated. + * + * This function returns the length of generated token if it succeeds, + * or -1. + */ +NGTCP2_EXTERN ngtcp2_ssize ngtcp2_crypto_generate_retry_token( + uint8_t *token, const uint8_t *secret, size_t secretlen, uint32_t version, + const ngtcp2_sockaddr *remote_addr, ngtcp2_socklen remote_addrlen, + const ngtcp2_cid *retry_scid, const ngtcp2_cid *odcid, ngtcp2_tstamp ts); + +/** + * @function + * + * `ngtcp2_crypto_verify_retry_token` verifies Retry token stored in + * the buffer pointed by |token| of length |tokenlen|. |secret| of + * length |secretlen| is an initial keying material to generate keys + * to decrypt the token. |version| is QUIC version of the Initial + * packet that contains this token. |remote_addr| of length + * |remote_addrlen| is an address of client. |dcid| is a Destination + * Connection ID in Initial packet sent by client. |timeout| is the + * period during which the token is valid. |ts| is the current + * timestamp. When validation succeeds, the extracted Destination + * Connection ID (which is the Destination Connection ID in Initial + * packet sent by client that triggered Retry packet) is stored to the + * buffer pointed by |odcid|. + * + * This function returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int ngtcp2_crypto_verify_retry_token( + ngtcp2_cid *odcid, const uint8_t *token, size_t tokenlen, + const uint8_t *secret, size_t secretlen, uint32_t version, + const ngtcp2_sockaddr *remote_addr, ngtcp2_socklen remote_addrlen, + const ngtcp2_cid *dcid, ngtcp2_duration timeout, ngtcp2_tstamp ts); + +/** + * @function + * + * `ngtcp2_crypto_generate_regular_token` generates a token in the + * buffer pointed by |token| that is sent with NEW_TOKEN frame. The + * buffer pointed by |token| must have at least + * :macro:`NGTCP2_CRYPTO_MAX_REGULAR_TOKENLEN` bytes long. The + * successfully generated token starts with + * :macro:`NGTCP2_CRYPTO_TOKEN_MAGIC_REGULAR`. |secret| of length + * |secretlen| is an initial keying material to generate keys to + * encrypt the token. |remote_addr| of length |remote_addrlen| is an + * address of client. |ts| is the timestamp when the token is + * generated. + * + * This function returns the length of generated token if it succeeds, + * or -1. + */ +NGTCP2_EXTERN ngtcp2_ssize ngtcp2_crypto_generate_regular_token( + uint8_t *token, const uint8_t *secret, size_t secretlen, + const ngtcp2_sockaddr *remote_addr, ngtcp2_socklen remote_addrlen, + ngtcp2_tstamp ts); + +/** + * @function + * + * `ngtcp2_crypto_verify_regular_token` verifies a regular token + * stored in the buffer pointed by |token| of length |tokenlen|. + * |secret| of length |secretlen| is an initial keying material to + * generate keys to decrypt the token. |remote_addr| of length + * |remote_addrlen| is an address of client. |timeout| is the period + * during which the token is valid. |ts| is the current timestamp. + * + * This function returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int ngtcp2_crypto_verify_regular_token( + const uint8_t *token, size_t tokenlen, const uint8_t *secret, + size_t secretlen, const ngtcp2_sockaddr *remote_addr, + ngtcp2_socklen remote_addrlen, ngtcp2_duration timeout, ngtcp2_tstamp ts); /** * @function * * `ngtcp2_crypto_write_connection_close` writes Initial packet - * containing CONNECTION_CLOSE with the given |error_code| to the - * buffer pointed by |dest| of length |destlen|. This function is - * designed for server to close connection without committing the - * state when validating Retry token fails. This function must not be - * used by client. The |dcid| must be the Source Connection ID in - * Initial packet from client. The |scid| must be the Destination - * Connection ID in Initial packet from client. |scid| is used to - * derive initial keying materials. + * containing CONNECTION_CLOSE with the given |error_code| and the + * optional |reason| of length |reasonlen| to the buffer pointed by + * |dest| of length |destlen|. This function is designed for server + * to close connection without committing the state when validating + * Retry token fails. This function must not be used by client. The + * |dcid| must be the Source Connection ID in Initial packet from + * client. The |scid| must be the Destination Connection ID in + * Initial packet from client. |scid| is used to derive initial + * keying materials. * * This function wraps around `ngtcp2_pkt_write_connection_close` for * easier use. @@ -599,7 +743,8 @@ NGTCP2_EXTERN int ngtcp2_crypto_generate_stateless_reset_token( */ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_crypto_write_connection_close( uint8_t *dest, size_t destlen, uint32_t version, const ngtcp2_cid *dcid, - const ngtcp2_cid *scid, uint64_t error_code); + const ngtcp2_cid *scid, uint64_t error_code, const uint8_t *reason, + size_t reasonlen); /** * @function @@ -664,7 +809,7 @@ ngtcp2_crypto_aead_ctx_free(ngtcp2_crypto_aead_ctx *aead_ctx); * `ngtcp2_crypto_delete_crypto_aead_ctx_cb` deletes the given |aead_ctx|. * * This function can be directly passed to - * :member:`ngtcp2_conn_callbacks.delete_crypto_aead_ctx` field. + * :member:`ngtcp2_callbacks.delete_crypto_aead_ctx` field. */ NGTCP2_EXTERN void ngtcp2_crypto_delete_crypto_aead_ctx_cb( ngtcp2_conn *conn, ngtcp2_crypto_aead_ctx *aead_ctx, void *user_data); @@ -676,11 +821,71 @@ NGTCP2_EXTERN void ngtcp2_crypto_delete_crypto_aead_ctx_cb( * |cipher_ctx|. * * This function can be directly passed to - * :member:`ngtcp2_conn_callbacks.delete_crypto_cipher_ctx` field. + * :member:`ngtcp2_callbacks.delete_crypto_cipher_ctx` field. */ NGTCP2_EXTERN void ngtcp2_crypto_delete_crypto_cipher_ctx_cb( ngtcp2_conn *conn, ngtcp2_crypto_cipher_ctx *cipher_ctx, void *user_data); +/** + * @function + * + * `ngtcp2_crypto_get_path_challenge_data_cb` writes unpredictable + * sequence of :macro:`NGTCP2_PATH_CHALLENGE_DATALEN` bytes to |data| + * which is sent with PATH_CHALLENGE frame. + * + * This function can be directly passed to + * :member:`ngtcp2_callbacks.get_path_challenge_data` field. + */ +NGTCP2_EXTERN int ngtcp2_crypto_get_path_challenge_data_cb(ngtcp2_conn *conn, + uint8_t *data, + void *user_data); + +/** + * @function + * + * `ngtcp2_crypto_version_negotiation_cb` installs Initial keys for + * |version| which is negotiated or being negotiated. |client_dcid| + * is the destination connection ID in first Initial packet of client. + * + * This function can be directly passed to + * :member:`ngtcp2_callbacks.version_negotiation` field. + */ +NGTCP2_EXTERN int +ngtcp2_crypto_version_negotiation_cb(ngtcp2_conn *conn, uint32_t version, + const ngtcp2_cid *client_dcid, + void *user_data); + +typedef struct ngtcp2_crypto_conn_ref ngtcp2_crypto_conn_ref; + +/** + * @functypedef + * + * :type:`ngtcp2_crypto_get_conn` is a callback function to get a + * pointer to :type:`ngtcp2_conn` from |conn_ref|. The implementation + * must return non-NULL :type:`ngtcp2_conn` object. + */ +typedef ngtcp2_conn *(*ngtcp2_crypto_get_conn)( + ngtcp2_crypto_conn_ref *conn_ref); + +/** + * @struct + * + * :type:`ngtcp2_crypto_conn_ref` is a structure to get a pointer to + * :type:`ngtcp2_conn`. It is meant to be set to TLS native handle as + * an application specific data (e.g. SSL_set_app_data in OpenSSL). + */ +typedef struct ngtcp2_crypto_conn_ref { + /** + * :member:`get_conn` is a callback function to get a pointer to + * :type:`ngtcp2_conn` object. + */ + ngtcp2_crypto_get_conn get_conn; + /** + * :member:`user_data` is a pointer to arbitrary user data. + */ + void *user_data; +} ngtcp2_crypto_conn_ref; + #ifdef __cplusplus } #endif diff --git a/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_boringssl.h b/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_boringssl.h index 65f8414249a..6497c09e798 100644 --- a/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_boringssl.h +++ b/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_boringssl.h @@ -55,6 +55,48 @@ NGTCP2_EXTERN enum ssl_encryption_level_t ngtcp2_crypto_boringssl_from_ngtcp2_crypto_level( ngtcp2_crypto_level crypto_level); +/** + * @function + * + * `ngtcp2_crypto_boringssl_configure_server_context` configures + * |ssl_ctx| for server side QUIC connection. It performs the + * following modifications: + * + * - Set minimum and maximum TLS version to TLSv1.3. + * - Set SSL_QUIC_METHOD by calling SSL_CTX_set_quic_method. + * + * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to + * SSL object by calling SSL_set_app_data, and + * :type:`ngtcp2_crypto_conn_ref` object must have + * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get + * :type:`ngtcp2_conn`. + * + * It returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int +ngtcp2_crypto_boringssl_configure_server_context(SSL_CTX *ssl_ctx); + +/** + * @function + * + * `ngtcp2_crypto_boringssl_configure_client_context` configures + * |ssl_ctx| for client side QUIC connection. It performs the + * following modifications: + * + * - Set minimum and maximum TLS version to TLSv1.3. + * - Set SSL_QUIC_METHOD by calling SSL_CTX_set_quic_method. + * + * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to + * SSL object by calling SSL_set_app_data, and + * :type:`ngtcp2_crypto_conn_ref` object must have + * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get + * :type:`ngtcp2_conn`. + * + * It returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int +ngtcp2_crypto_boringssl_configure_client_context(SSL_CTX *ssl_ctx); + #ifdef __cplusplus } #endif diff --git a/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_openssl.h b/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_openssl.h index 10a8e712cfd..844081bfa8b 100644 --- a/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_openssl.h +++ b/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_openssl.h @@ -83,6 +83,48 @@ NGTCP2_EXTERN OSSL_ENCRYPTION_LEVEL ngtcp2_crypto_openssl_from_ngtcp2_crypto_level( ngtcp2_crypto_level crypto_level); +/** + * @function + * + * `ngtcp2_crypto_openssl_configure_server_context` configures + * |ssl_ctx| for server side QUIC connection. It performs the + * following modifications: + * + * - Set minimum and maximum TLS version to TLSv1.3. + * - Set SSL_QUIC_METHOD by calling SSL_CTX_set_quic_method. + * + * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to + * SSL object by calling SSL_set_app_data, and + * :type:`ngtcp2_crypto_conn_ref` object must have + * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get + * :type:`ngtcp2_conn`. + * + * It returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int +ngtcp2_crypto_openssl_configure_server_context(SSL_CTX *ssl_ctx); + +/** + * @function + * + * `ngtcp2_crypto_openssl_configure_client_context` configures + * |ssl_ctx| for client side QUIC connection. It performs the + * following modifications: + * + * - Set minimum and maximum TLS version to TLSv1.3. + * - Set SSL_QUIC_METHOD by calling SSL_CTX_set_quic_method. + * + * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to + * SSL object by calling SSL_set_app_data, and + * :type:`ngtcp2_crypto_conn_ref` object must have + * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get + * :type:`ngtcp2_conn`. + * + * It returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int +ngtcp2_crypto_openssl_configure_client_context(SSL_CTX *ssl_ctx); + #ifdef __cplusplus } #endif diff --git a/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h b/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h new file mode 100644 index 00000000000..d4b551c382f --- /dev/null +++ b/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h @@ -0,0 +1,246 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGTCP2_CRYPTO_PICOTLS_H +#define NGTCP2_CRYPTO_PICOTLS_H + +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @struct + * + * :type:`ngtcp2_crypto_picotls_ctx` contains per-connection state + * of Picotls objects and must be an object to bet set to + * `ngtcp2_conn_set_tls_native_handle`. + */ +typedef struct ngtcp2_crypto_picotls_ctx { + /** + * :member:`ptls` is a pointer to ptls_t object. + */ + ptls_t *ptls; + /** + * :member:`handshake_properties` is a set of configurations used + * during this particular TLS handshake. + */ + ptls_handshake_properties_t handshake_properties; +} ngtcp2_crypto_picotls_ctx; + +/** + * @function + * + * `ngtcp2_crypto_picotls_ctx_init` initializes the object pointed by + * |cptls|. |cptls| must not be NULL. + */ +NGTCP2_EXTERN void +ngtcp2_crypto_picotls_ctx_init(ngtcp2_crypto_picotls_ctx *cptls); + +/** + * @function + * + * `ngtcp2_crypto_picotls_from_epoch` translates |epoch| to + * :type:`ngtcp2_crypto_level`. This function is only available for + * Picotls backend. + */ +NGTCP2_EXTERN ngtcp2_crypto_level +ngtcp2_crypto_picotls_from_epoch(size_t epoch); + +/** + * @function + * + * `ngtcp2_crypto_picotls_from_ngtcp2_crypto_level` translates + * |crypto_level| to epoch. This function is only available for + * Picotls backend. + */ +NGTCP2_EXTERN size_t ngtcp2_crypto_picotls_from_ngtcp2_crypto_level( + ngtcp2_crypto_level crypto_level); + +/** + * @function + * + * `ngtcp2_crypto_picotls_configure_server_context` configures |ctx| + * for server side QUIC connection. It performs the following + * modifications: + * + * - Set max_early_data_size to UINT32_MAX. + * - Set omit_end_of_early_data to 1. + * - Set update_traffic_key callback. + * + * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to + * ptls_t object by assigning the pointer using ptls_get_data_ptr, and + * :type:`ngtcp2_crypto_conn_ref` object must have + * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get + * :type:`ngtcp2_conn`. + * + * It returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int +ngtcp2_crypto_picotls_configure_server_context(ptls_context_t *ctx); + +/** + * @function + * + * `ngtcp2_crypto_picotls_configure_client_context` configures |ctx| + * for client side QUIC connection. It performs the following + * modifications: + * + * - Set omit_end_of_early_data to 1. + * - Set update_traffic_key callback. + * + * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to + * ptls_t object by assigning the pointer using ptls_get_data_ptr, and + * :type:`ngtcp2_crypto_conn_ref` object must have + * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get + * :type:`ngtcp2_conn`. + * + * It returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int +ngtcp2_crypto_picotls_configure_client_context(ptls_context_t *ctx); + +/** + * @function + * + * `ngtcp2_crypto_picotls_configure_server_session` configures |cptls| + * for server side QUIC connection. It performs the following + * modifications: + * + * - Set handshake_properties.collect_extension to + * `ngtcp2_crypto_picotls_collect_extension`. + * - Set handshake_properties.collected_extensions to + * `ngtcp2_crypto_picotls_collected_extensions`. + * + * The callbacks set by this function only handle QUIC Transport + * Parameters TLS extension. If an application needs to handle the + * other TLS extensions, set its own callbacks and call + * `ngtcp2_crypto_picotls_collect_extension` and + * `ngtcp2_crypto_picotls_collected_extensions` form them. + * + * During the QUIC handshake, the first element of + * handshake_properties.additional_extensions is assigned to send QUIC + * Transport Parameter TLS extension. Therefore, an application must + * allocate at least 2 elements for + * handshake_properties.additional_extensions. + * + * Call `ngtcp2_crypto_picotls_deconfigure_session` to free up the + * resources. + * + * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to + * ptls_t object by assigning the pointer using ptls_get_data_ptr, and + * :type:`ngtcp2_crypto_conn_ref` object must have + * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get + * :type:`ngtcp2_conn`. + * + * It returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int ngtcp2_crypto_picotls_configure_server_session( + ngtcp2_crypto_picotls_ctx *cptls); + +/** + * @function + * + * `ngtcp2_crypto_picotls_configure_client_session` configures |cptls| + * for client side QUIC connection. It performs the following + * modifications: + * + * - Set handshake_properties.max_early_data_size to a pointer to + * uint32_t, which is allocated dynamically by this function. + * - Set handshake_properties.collect_extension to + * `ngtcp2_crypto_picotls_collect_extension`. + * - Set handshake_properties.collected_extensions to + * `ngtcp2_crypto_picotls_collected_extensions`. + * - Set handshake_properties.additional_extensions[0].data to the + * dynamically allocated buffer which contains QUIC Transport + * Parameters TLS extension. An application must allocate at least + * 2 elements for handshake_properties.additional_extensions. + * + * The callbacks set by this function only handle QUIC Transport + * Parameters TLS extension. If an application needs to handle the + * other TLS extensions, set its own callbacks and call + * `ngtcp2_crypto_picotls_collect_extension` and + * `ngtcp2_crypto_picotls_collected_extensions` form them. + * + * Call `ngtcp2_crypto_picotls_deconfigure_session` to free up the + * resources. + * + * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to + * ptls_t object by assigning the pointer using ptls_get_data_ptr, and + * :type:`ngtcp2_crypto_conn_ref` object must have + * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get + * :type:`ngtcp2_conn`. + * + * It returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int +ngtcp2_crypto_picotls_configure_client_session(ngtcp2_crypto_picotls_ctx *cptls, + ngtcp2_conn *conn); + +/** + * @function + * + * `ngtcp2_crypto_picotls_deconfigure_session` frees the resources + * allocated for |cptls| during QUIC connection. It frees the + * following data using :manpage:`free(3)`. + * + * - handshake_properties.max_early_data_size + * - handshake_properties.additional_extensions[0].data.base + * + * If |cptls| is NULL, this function does nothing. + */ +NGTCP2_EXTERN void +ngtcp2_crypto_picotls_deconfigure_session(ngtcp2_crypto_picotls_ctx *cptls); + +/** + * @function + * + * `ngtcp2_crypto_picotls_collect_extension` is a callback function + * which only returns nonzero if |type| == + * :macro:`NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_V1`. + */ +NGTCP2_EXTERN int ngtcp2_crypto_picotls_collect_extension( + ptls_t *ptls, struct st_ptls_handshake_properties_t *properties, + uint16_t type); + +/** + * @function + * + * `ngtcp2_crypto_picotls_collected_extensions` is a callback function + * which only handles the extension of type + * :macro:`NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_V1`. The other + * extensions are ignored. + */ +NGTCP2_EXTERN int ngtcp2_crypto_picotls_collected_extensions( + ptls_t *ptls, struct st_ptls_handshake_properties_t *properties, + ptls_raw_extension_t *extensions); + +#ifdef __cplusplus +} +#endif + +#endif /* NGTCP2_CRYPTO_PICOTLS_H */ diff --git a/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_wolfssl.h b/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_wolfssl.h new file mode 100644 index 00000000000..3b10802c25b --- /dev/null +++ b/deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_wolfssl.h @@ -0,0 +1,106 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGTCP2_CRYPTO_WOLFSSL_H +#define NGTCP2_CRYPTO_WOLFSSL_H + +#include + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @function + * + * `ngtcp2_crypto_wolfssl_from_wolfssl_encryption_level` translates + * |wolfssl_level| to :type:`ngtcp2_crypto_level`. This function is only + * available for wolfSSL backend. + */ +NGTCP2_EXTERN ngtcp2_crypto_level +ngtcp2_crypto_wolfssl_from_wolfssl_encryption_level( + WOLFSSL_ENCRYPTION_LEVEL wolfssl_level); + +/** + * @function + * + * `ngtcp2_crypto_wolfssl_from_ngtcp2_crypto_level` translates + * |crypto_level| to WOLFSSL_ENCRYPTION_LEVEL. This function is only + * available for wolfSSL backend. + */ +NGTCP2_EXTERN WOLFSSL_ENCRYPTION_LEVEL +ngtcp2_crypto_wolfssl_from_ngtcp2_crypto_level( + ngtcp2_crypto_level crypto_level); + +/** + * @function + * + * `ngtcp2_crypto_wolfssl_configure_server_context` configures + * |ssl_ctx| for server side QUIC connection. It performs the + * following modifications: + * + * - Set minimum and maximum TLS version to TLSv1.3. + * - Set WOLFSSL_QUIC_METHOD by calling wolfSSL_CTX_set_quic_method. + * + * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to + * WOLFSSL object by calling wolfSSL_set_app_data, and + * :type:`ngtcp2_crypto_conn_ref` object must have + * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get + * :type:`ngtcp2_conn`. + * + * It returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int +ngtcp2_crypto_wolfssl_configure_server_context(WOLFSSL_CTX *ssl_ctx); + +/** + * @function + * + * `ngtcp2_crypto_wolfssl_configure_client_context` configures + * |ssl_ctx| for client side QUIC connection. It performs the + * following modifications: + * + * - Set minimum and maximum TLS version to TLSv1.3. + * - Set WOLFSSL_QUIC_METHOD by calling wolfSSL_CTX_set_quic_method. + * + * Application must set a pointer to :type:`ngtcp2_crypto_conn_ref` to + * SSL object by calling wolfSSL_set_app_data, and + * :type:`ngtcp2_crypto_conn_ref` object must have + * :member:`ngtcp2_crypto_conn_ref.get_conn` field assigned to get + * :type:`ngtcp2_conn`. + * + * It returns 0 if it succeeds, or -1. + */ +NGTCP2_EXTERN int +ngtcp2_crypto_wolfssl_configure_client_context(WOLFSSL_CTX *ssl_ctx); + +#ifdef __cplusplus +} +#endif + +#endif /* NGTCP2_CRYPTO_WOLFSSL_H */ diff --git a/deps/ngtcp2/ngtcp2/crypto/openssl/openssl.c b/deps/ngtcp2/ngtcp2/crypto/openssl/openssl.c index d4b9e57f275..466d9e11ca6 100644 --- a/deps/ngtcp2/ngtcp2/crypto/openssl/openssl.c +++ b/deps/ngtcp2/ngtcp2/crypto/openssl/openssl.c @@ -34,6 +34,11 @@ #include #include #include +#include + +#if OPENSSL_VERSION_NUMBER >= 0x30000000L +# include +#endif /* OPENSSL_VERSION_NUMBER >= 0x30000000L */ #include "shared.h" @@ -48,9 +53,19 @@ static size_t crypto_aead_max_overhead(const EVP_CIPHER *aead) { return EVP_CCM_TLS_TAG_LEN; default: assert(0); + abort(); /* if NDEBUG is set */ } } +ngtcp2_crypto_aead *ngtcp2_crypto_aead_aes_128_gcm(ngtcp2_crypto_aead *aead) { + return ngtcp2_crypto_aead_init(aead, (void *)EVP_aes_128_gcm()); +} + +ngtcp2_crypto_md *ngtcp2_crypto_md_sha256(ngtcp2_crypto_md *md) { + md->native_handle = (void *)EVP_sha256(); + return md; +} + ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_initial(ngtcp2_crypto_ctx *ctx) { ngtcp2_crypto_aead_init(&ctx->aead, (void *)EVP_aes_128_gcm()); ctx->md.native_handle = (void *)EVP_sha256(); @@ -187,18 +202,37 @@ int ngtcp2_crypto_aead_ctx_encrypt_init(ngtcp2_crypto_aead_ctx *aead_ctx, const EVP_CIPHER *cipher = aead->native_handle; int cipher_nid = EVP_CIPHER_nid(cipher); EVP_CIPHER_CTX *actx; + size_t taglen = crypto_aead_max_overhead(cipher); +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + OSSL_PARAM params[3]; +#endif /* OPENSSL_VERSION_NUMBER >= 0x30000000L */ actx = EVP_CIPHER_CTX_new(); if (actx == NULL) { return -1; } +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_IVLEN, &noncelen); + + if (cipher_nid == NID_aes_128_ccm) { + params[1] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, + NULL, taglen); + params[2] = OSSL_PARAM_construct_end(); + } else { + params[1] = OSSL_PARAM_construct_end(); + } +#endif /* OPENSSL_VERSION_NUMBER >= 0x30000000L */ + if (!EVP_EncryptInit_ex(actx, cipher, NULL, NULL, NULL) || +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + !EVP_CIPHER_CTX_set_params(actx, params) || +#else /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ !EVP_CIPHER_CTX_ctrl(actx, EVP_CTRL_AEAD_SET_IVLEN, (int)noncelen, NULL) || (cipher_nid == NID_aes_128_ccm && - !EVP_CIPHER_CTX_ctrl(actx, EVP_CTRL_AEAD_SET_TAG, - (int)crypto_aead_max_overhead(cipher), NULL)) || + !EVP_CIPHER_CTX_ctrl(actx, EVP_CTRL_AEAD_SET_TAG, (int)taglen, NULL)) || +#endif /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ !EVP_EncryptInit_ex(actx, NULL, NULL, key, NULL)) { EVP_CIPHER_CTX_free(actx); return -1; @@ -215,18 +249,37 @@ int ngtcp2_crypto_aead_ctx_decrypt_init(ngtcp2_crypto_aead_ctx *aead_ctx, const EVP_CIPHER *cipher = aead->native_handle; int cipher_nid = EVP_CIPHER_nid(cipher); EVP_CIPHER_CTX *actx; + size_t taglen = crypto_aead_max_overhead(cipher); +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + OSSL_PARAM params[3]; +#endif /* OPENSSL_VERSION_NUMBER >= 0x30000000L */ actx = EVP_CIPHER_CTX_new(); if (actx == NULL) { return -1; } +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_IVLEN, &noncelen); + + if (cipher_nid == NID_aes_128_ccm) { + params[1] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, + NULL, taglen); + params[2] = OSSL_PARAM_construct_end(); + } else { + params[1] = OSSL_PARAM_construct_end(); + } +#endif /* OPENSSL_VERSION_NUMBER >= 0x30000000L */ + if (!EVP_DecryptInit_ex(actx, cipher, NULL, NULL, NULL) || +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + !EVP_CIPHER_CTX_set_params(actx, params) || +#else /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ !EVP_CIPHER_CTX_ctrl(actx, EVP_CTRL_AEAD_SET_IVLEN, (int)noncelen, NULL) || (cipher_nid == NID_aes_128_ccm && - !EVP_CIPHER_CTX_ctrl(actx, EVP_CTRL_AEAD_SET_TAG, - (int)crypto_aead_max_overhead(cipher), NULL)) || + !EVP_CIPHER_CTX_ctrl(actx, EVP_CTRL_AEAD_SET_TAG, (int)taglen, NULL)) || +#endif /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ !EVP_DecryptInit_ex(actx, NULL, NULL, key, NULL)) { EVP_CIPHER_CTX_free(actx); return -1; @@ -272,6 +325,33 @@ void ngtcp2_crypto_cipher_ctx_free(ngtcp2_crypto_cipher_ctx *cipher_ctx) { int ngtcp2_crypto_hkdf_extract(uint8_t *dest, const ngtcp2_crypto_md *md, const uint8_t *secret, size_t secretlen, const uint8_t *salt, size_t saltlen) { +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + const EVP_MD *prf = md->native_handle; + EVP_KDF *kdf = EVP_KDF_fetch(NULL, "hkdf", NULL); + EVP_KDF_CTX *kctx = EVP_KDF_CTX_new(kdf); + int mode = EVP_KDF_HKDF_MODE_EXTRACT_ONLY; + OSSL_PARAM params[] = { + OSSL_PARAM_construct_int(OSSL_KDF_PARAM_MODE, &mode), + OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST, + (char *)EVP_MD_get0_name(prf), 0), + OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, (void *)secret, + secretlen), + OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT, (void *)salt, + saltlen), + OSSL_PARAM_construct_end(), + }; + int rv = 0; + + EVP_KDF_free(kdf); + + if (EVP_KDF_derive(kctx, dest, (size_t)EVP_MD_size(prf), params) <= 0) { + rv = -1; + } + + EVP_KDF_CTX_free(kctx); + + return rv; +#else /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ const EVP_MD *prf = md->native_handle; int rv = 0; EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL); @@ -293,12 +373,40 @@ int ngtcp2_crypto_hkdf_extract(uint8_t *dest, const ngtcp2_crypto_md *md, EVP_PKEY_CTX_free(pctx); return rv; +#endif /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ } int ngtcp2_crypto_hkdf_expand(uint8_t *dest, size_t destlen, const ngtcp2_crypto_md *md, const uint8_t *secret, size_t secretlen, const uint8_t *info, size_t infolen) { +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + const EVP_MD *prf = md->native_handle; + EVP_KDF *kdf = EVP_KDF_fetch(NULL, "hkdf", NULL); + EVP_KDF_CTX *kctx = EVP_KDF_CTX_new(kdf); + int mode = EVP_KDF_HKDF_MODE_EXPAND_ONLY; + OSSL_PARAM params[] = { + OSSL_PARAM_construct_int(OSSL_KDF_PARAM_MODE, &mode), + OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST, + (char *)EVP_MD_get0_name(prf), 0), + OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, (void *)secret, + secretlen), + OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO, (void *)info, + infolen), + OSSL_PARAM_construct_end(), + }; + int rv = 0; + + EVP_KDF_free(kdf); + + if (EVP_KDF_derive(kctx, dest, destlen, params) <= 0) { + rv = -1; + } + + EVP_KDF_CTX_free(kctx); + + return rv; +#else /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ const EVP_MD *prf = md->native_handle; int rv = 0; EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL); @@ -309,7 +417,7 @@ int ngtcp2_crypto_hkdf_expand(uint8_t *dest, size_t destlen, if (EVP_PKEY_derive_init(pctx) != 1 || EVP_PKEY_CTX_hkdf_mode(pctx, EVP_PKEY_HKDEF_MODE_EXPAND_ONLY) != 1 || EVP_PKEY_CTX_set_hkdf_md(pctx, prf) != 1 || - EVP_PKEY_CTX_set1_hkdf_salt(pctx, "", 0) != 1 || + EVP_PKEY_CTX_set1_hkdf_salt(pctx, (const unsigned char *)"", 0) != 1 || EVP_PKEY_CTX_set1_hkdf_key(pctx, secret, (int)secretlen) != 1 || EVP_PKEY_CTX_add1_hkdf_info(pctx, info, (int)infolen) != 1 || EVP_PKEY_derive(pctx, dest, &destlen) != 1) { @@ -319,29 +427,97 @@ int ngtcp2_crypto_hkdf_expand(uint8_t *dest, size_t destlen, EVP_PKEY_CTX_free(pctx); return rv; +#endif /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ +} + +int ngtcp2_crypto_hkdf(uint8_t *dest, size_t destlen, + const ngtcp2_crypto_md *md, const uint8_t *secret, + size_t secretlen, const uint8_t *salt, size_t saltlen, + const uint8_t *info, size_t infolen) { +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + const EVP_MD *prf = md->native_handle; + EVP_KDF *kdf = EVP_KDF_fetch(NULL, "hkdf", NULL); + EVP_KDF_CTX *kctx = EVP_KDF_CTX_new(kdf); + OSSL_PARAM params[] = { + OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST, + (char *)EVP_MD_get0_name(prf), 0), + OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, (void *)secret, + secretlen), + OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT, (void *)salt, + saltlen), + OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO, (void *)info, + infolen), + OSSL_PARAM_construct_end(), + }; + int rv = 0; + + EVP_KDF_free(kdf); + + if (EVP_KDF_derive(kctx, dest, destlen, params) <= 0) { + rv = -1; + } + + EVP_KDF_CTX_free(kctx); + + return rv; +#else /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ + const EVP_MD *prf = md->native_handle; + int rv = 0; + EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL); + if (pctx == NULL) { + return -1; + } + + if (EVP_PKEY_derive_init(pctx) != 1 || + EVP_PKEY_CTX_hkdf_mode(pctx, EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND) != + 1 || + EVP_PKEY_CTX_set_hkdf_md(pctx, prf) != 1 || + EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, (int)saltlen) != 1 || + EVP_PKEY_CTX_set1_hkdf_key(pctx, secret, (int)secretlen) != 1 || + EVP_PKEY_CTX_add1_hkdf_info(pctx, info, (int)infolen) != 1 || + EVP_PKEY_derive(pctx, dest, &destlen) != 1) { + rv = -1; + } + + EVP_PKEY_CTX_free(pctx); + + return rv; +#endif /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ } int ngtcp2_crypto_encrypt(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *plaintext, size_t plaintextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen) { + const uint8_t *aad, size_t aadlen) { const EVP_CIPHER *cipher = aead->native_handle; size_t taglen = crypto_aead_max_overhead(cipher); int cipher_nid = EVP_CIPHER_nid(cipher); EVP_CIPHER_CTX *actx = aead_ctx->native_handle; int len; +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + OSSL_PARAM params[] = { + OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, + dest + plaintextlen, taglen), + OSSL_PARAM_construct_end(), + }; +#endif /* OPENSSL_VERSION_NUMBER >= 0x30000000L */ (void)noncelen; if (!EVP_EncryptInit_ex(actx, NULL, NULL, NULL, nonce) || (cipher_nid == NID_aes_128_ccm && !EVP_EncryptUpdate(actx, NULL, &len, NULL, (int)plaintextlen)) || - !EVP_EncryptUpdate(actx, NULL, &len, ad, (int)adlen) || + !EVP_EncryptUpdate(actx, NULL, &len, aad, (int)aadlen) || !EVP_EncryptUpdate(actx, dest, &len, plaintext, (int)plaintextlen) || !EVP_EncryptFinal_ex(actx, dest + len, &len) || +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + !EVP_CIPHER_CTX_get_params(actx, params) +#else /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ !EVP_CIPHER_CTX_ctrl(actx, EVP_CTRL_AEAD_GET_TAG, (int)taglen, - dest + plaintextlen)) { + dest + plaintextlen) +#endif /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ + ) { return -1; } @@ -352,13 +528,16 @@ int ngtcp2_crypto_decrypt(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *ciphertext, size_t ciphertextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen) { + const uint8_t *aad, size_t aadlen) { const EVP_CIPHER *cipher = aead->native_handle; size_t taglen = crypto_aead_max_overhead(cipher); int cipher_nid = EVP_CIPHER_nid(cipher); EVP_CIPHER_CTX *actx = aead_ctx->native_handle; int len; const uint8_t *tag; +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + OSSL_PARAM params[2]; +#endif /* OPENSSL_VERSION_NUMBER >= 0x30000000L */ (void)noncelen; @@ -369,12 +548,22 @@ int ngtcp2_crypto_decrypt(uint8_t *dest, const ngtcp2_crypto_aead *aead, ciphertextlen -= taglen; tag = ciphertext + ciphertextlen; +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + params[0] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, + (void *)tag, taglen); + params[1] = OSSL_PARAM_construct_end(); +#endif /* OPENSSL_VERSION_NUMBER >= 0x30000000L */ + if (!EVP_DecryptInit_ex(actx, NULL, NULL, NULL, nonce) || +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + !EVP_CIPHER_CTX_set_params(actx, params) || +#else /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ !EVP_CIPHER_CTX_ctrl(actx, EVP_CTRL_AEAD_SET_TAG, (int)taglen, (uint8_t *)tag) || +#endif /* !(OPENSSL_VERSION_NUMBER >= 0x30000000L) */ (cipher_nid == NID_aes_128_ccm && !EVP_DecryptUpdate(actx, NULL, &len, NULL, (int)ciphertextlen)) || - !EVP_DecryptUpdate(actx, NULL, &len, ad, (int)adlen) || + !EVP_DecryptUpdate(actx, NULL, &len, aad, (int)aadlen) || !EVP_DecryptUpdate(actx, dest, &len, ciphertext, (int)ciphertextlen) || (cipher_nid != NID_aes_128_ccm && !EVP_DecryptFinal_ex(actx, dest + ciphertextlen, &len))) { @@ -457,24 +646,13 @@ int ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, int ngtcp2_crypto_set_remote_transport_params(ngtcp2_conn *conn, void *tls) { SSL *ssl = tls; - ngtcp2_transport_params_type exttype = - ngtcp2_conn_is_server(conn) - ? NGTCP2_TRANSPORT_PARAMS_TYPE_CLIENT_HELLO - : NGTCP2_TRANSPORT_PARAMS_TYPE_ENCRYPTED_EXTENSIONS; const uint8_t *tp; size_t tplen; - ngtcp2_transport_params params; int rv; SSL_get_peer_quic_transport_params(ssl, &tp, &tplen); - rv = ngtcp2_decode_transport_params(¶ms, exttype, tp, tplen); - if (rv != 0) { - ngtcp2_conn_set_tls_error(conn, rv); - return -1; - } - - rv = ngtcp2_conn_set_remote_transport_params(conn, ¶ms); + rv = ngtcp2_conn_decode_remote_transport_params(conn, tp, tplen); if (rv != 0) { ngtcp2_conn_set_tls_error(conn, rv); return -1; @@ -505,6 +683,7 @@ ngtcp2_crypto_level ngtcp2_crypto_openssl_from_ossl_encryption_level( return NGTCP2_CRYPTO_LEVEL_APPLICATION; default: assert(0); + abort(); /* if NDEBUG is set */ } } @@ -522,5 +701,107 @@ ngtcp2_crypto_openssl_from_ngtcp2_crypto_level( return ssl_encryption_early_data; default: assert(0); + abort(); /* if NDEBUG is set */ } } + +int ngtcp2_crypto_get_path_challenge_data_cb(ngtcp2_conn *conn, uint8_t *data, + void *user_data) { + (void)conn; + (void)user_data; + + if (RAND_bytes(data, NGTCP2_PATH_CHALLENGE_DATALEN) != 1) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +int ngtcp2_crypto_random(uint8_t *data, size_t datalen) { + if (RAND_bytes(data, (int)datalen) != 1) { + return -1; + } + + return 0; +} + +static int set_encryption_secrets(SSL *ssl, OSSL_ENCRYPTION_LEVEL ossl_level, + const uint8_t *rx_secret, + const uint8_t *tx_secret, size_t secretlen) { + ngtcp2_crypto_conn_ref *conn_ref = SSL_get_app_data(ssl); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + ngtcp2_crypto_level level = + ngtcp2_crypto_openssl_from_ossl_encryption_level(ossl_level); + + if (rx_secret && + ngtcp2_crypto_derive_and_install_rx_key(conn, NULL, NULL, NULL, level, + rx_secret, secretlen) != 0) { + return 0; + } + + if (tx_secret && + ngtcp2_crypto_derive_and_install_tx_key(conn, NULL, NULL, NULL, level, + tx_secret, secretlen) != 0) { + return 0; + } + + return 1; +} + +static int add_handshake_data(SSL *ssl, OSSL_ENCRYPTION_LEVEL ossl_level, + const uint8_t *data, size_t datalen) { + ngtcp2_crypto_conn_ref *conn_ref = SSL_get_app_data(ssl); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + ngtcp2_crypto_level level = + ngtcp2_crypto_openssl_from_ossl_encryption_level(ossl_level); + int rv; + + rv = ngtcp2_conn_submit_crypto_data(conn, level, data, datalen); + if (rv != 0) { + ngtcp2_conn_set_tls_error(conn, rv); + return 0; + } + + return 1; +} + +static int flush_flight(SSL *ssl) { + (void)ssl; + return 1; +} + +static int send_alert(SSL *ssl, enum ssl_encryption_level_t level, + uint8_t alert) { + ngtcp2_crypto_conn_ref *conn_ref = SSL_get_app_data(ssl); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + (void)level; + + ngtcp2_conn_set_tls_alert(conn, alert); + + return 1; +} + +static SSL_QUIC_METHOD quic_method = { + set_encryption_secrets, + add_handshake_data, + flush_flight, + send_alert, +}; + +static void crypto_openssl_configure_context(SSL_CTX *ssl_ctx) { + SSL_CTX_set_min_proto_version(ssl_ctx, TLS1_3_VERSION); + SSL_CTX_set_max_proto_version(ssl_ctx, TLS1_3_VERSION); + SSL_CTX_set_quic_method(ssl_ctx, &quic_method); +} + +int ngtcp2_crypto_openssl_configure_server_context(SSL_CTX *ssl_ctx) { + crypto_openssl_configure_context(ssl_ctx); + + return 0; +} + +int ngtcp2_crypto_openssl_configure_client_context(SSL_CTX *ssl_ctx) { + crypto_openssl_configure_context(ssl_ctx); + + return 0; +} diff --git a/deps/ngtcp2/ngtcp2/crypto/picotls/picotls.c b/deps/ngtcp2/ngtcp2/crypto/picotls/picotls.c new file mode 100644 index 00000000000..32d17adc6c3 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/crypto/picotls/picotls.c @@ -0,0 +1,697 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include +#include + +#include +#include + +#include +#include + +#include "shared.h" + +ngtcp2_crypto_aead *ngtcp2_crypto_aead_aes_128_gcm(ngtcp2_crypto_aead *aead) { + return ngtcp2_crypto_aead_init(aead, (void *)&ptls_openssl_aes128gcm); +} + +ngtcp2_crypto_md *ngtcp2_crypto_md_sha256(ngtcp2_crypto_md *md) { + md->native_handle = (void *)&ptls_openssl_sha256; + return md; +} + +ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_initial(ngtcp2_crypto_ctx *ctx) { + ngtcp2_crypto_aead_init(&ctx->aead, (void *)&ptls_openssl_aes128gcm); + ctx->md.native_handle = (void *)&ptls_openssl_sha256; + ctx->hp.native_handle = (void *)&ptls_openssl_aes128ctr; + ctx->max_encryption = 0; + ctx->max_decryption_failure = 0; + return ctx; +} + +ngtcp2_crypto_aead *ngtcp2_crypto_aead_init(ngtcp2_crypto_aead *aead, + void *aead_native_handle) { + ptls_aead_algorithm_t *alg = aead_native_handle; + + aead->native_handle = aead_native_handle; + aead->max_overhead = alg->tag_size; + return aead; +} + +ngtcp2_crypto_aead *ngtcp2_crypto_aead_retry(ngtcp2_crypto_aead *aead) { + return ngtcp2_crypto_aead_init(aead, (void *)&ptls_openssl_aes128gcm); +} + +static const ptls_aead_algorithm_t *crypto_ptls_get_aead(ptls_t *ptls) { + ptls_cipher_suite_t *cs = ptls_get_cipher(ptls); + + return cs->aead; +} + +static uint64_t crypto_ptls_get_aead_max_encryption(ptls_t *ptls) { + ptls_cipher_suite_t *cs = ptls_get_cipher(ptls); + + if (cs->aead == &ptls_openssl_aes128gcm || + cs->aead == &ptls_openssl_aes256gcm) { + return NGTCP2_CRYPTO_MAX_ENCRYPTION_AES_GCM; + } + + if (cs->aead == &ptls_openssl_chacha20poly1305) { + return NGTCP2_CRYPTO_MAX_ENCRYPTION_CHACHA20_POLY1305; + } + + return 0; +} + +static uint64_t crypto_ptls_get_aead_max_decryption_failure(ptls_t *ptls) { + ptls_cipher_suite_t *cs = ptls_get_cipher(ptls); + + if (cs->aead == &ptls_openssl_aes128gcm || + cs->aead == &ptls_openssl_aes256gcm) { + return NGTCP2_CRYPTO_MAX_DECRYPTION_FAILURE_AES_GCM; + } + + if (cs->aead == &ptls_openssl_chacha20poly1305) { + return NGTCP2_CRYPTO_MAX_DECRYPTION_FAILURE_CHACHA20_POLY1305; + } + + return 0; +} + +static const ptls_cipher_algorithm_t *crypto_ptls_get_hp(ptls_t *ptls) { + ptls_cipher_suite_t *cs = ptls_get_cipher(ptls); + + if (cs->aead == &ptls_openssl_aes128gcm) { + return &ptls_openssl_aes128ctr; + } + + if (cs->aead == &ptls_openssl_aes256gcm) { + return &ptls_openssl_aes256ctr; + } + + if (cs->aead == &ptls_openssl_chacha20poly1305) { + return &ptls_openssl_chacha20; + } + + return NULL; +} + +static const ptls_hash_algorithm_t *crypto_ptls_get_md(ptls_t *ptls) { + ptls_cipher_suite_t *cs = ptls_get_cipher(ptls); + + return cs->hash; +} + +ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_tls(ngtcp2_crypto_ctx *ctx, + void *tls_native_handle) { + ngtcp2_crypto_picotls_ctx *cptls = tls_native_handle; + ngtcp2_crypto_aead_init(&ctx->aead, + (void *)crypto_ptls_get_aead(cptls->ptls)); + ctx->md.native_handle = (void *)crypto_ptls_get_md(cptls->ptls); + ctx->hp.native_handle = (void *)crypto_ptls_get_hp(cptls->ptls); + ctx->max_encryption = crypto_ptls_get_aead_max_encryption(cptls->ptls); + ctx->max_decryption_failure = + crypto_ptls_get_aead_max_decryption_failure(cptls->ptls); + return ctx; +} + +ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_tls_early(ngtcp2_crypto_ctx *ctx, + void *tls_native_handle) { + return ngtcp2_crypto_ctx_tls(ctx, tls_native_handle); +} + +static size_t crypto_md_hashlen(const ptls_hash_algorithm_t *md) { + return md->digest_size; +} + +size_t ngtcp2_crypto_md_hashlen(const ngtcp2_crypto_md *md) { + return crypto_md_hashlen(md->native_handle); +} + +static size_t crypto_aead_keylen(const ptls_aead_algorithm_t *aead) { + return aead->key_size; +} + +size_t ngtcp2_crypto_aead_keylen(const ngtcp2_crypto_aead *aead) { + return crypto_aead_keylen(aead->native_handle); +} + +static size_t crypto_aead_noncelen(const ptls_aead_algorithm_t *aead) { + return aead->iv_size; +} + +size_t ngtcp2_crypto_aead_noncelen(const ngtcp2_crypto_aead *aead) { + return crypto_aead_noncelen(aead->native_handle); +} + +int ngtcp2_crypto_aead_ctx_encrypt_init(ngtcp2_crypto_aead_ctx *aead_ctx, + const ngtcp2_crypto_aead *aead, + const uint8_t *key, size_t noncelen) { + const ptls_aead_algorithm_t *cipher = aead->native_handle; + size_t keylen = crypto_aead_keylen(cipher); + ptls_aead_context_t *actx; + static const uint8_t iv[PTLS_MAX_IV_SIZE] = {0}; + + (void)noncelen; + (void)keylen; + + actx = ptls_aead_new_direct(cipher, /* is_enc = */ 1, key, iv); + if (actx == NULL) { + return -1; + } + + aead_ctx->native_handle = actx; + + return 0; +} + +int ngtcp2_crypto_aead_ctx_decrypt_init(ngtcp2_crypto_aead_ctx *aead_ctx, + const ngtcp2_crypto_aead *aead, + const uint8_t *key, size_t noncelen) { + const ptls_aead_algorithm_t *cipher = aead->native_handle; + size_t keylen = crypto_aead_keylen(cipher); + ptls_aead_context_t *actx; + const uint8_t iv[PTLS_MAX_IV_SIZE] = {0}; + + (void)noncelen; + (void)keylen; + + actx = ptls_aead_new_direct(cipher, /* is_enc = */ 0, key, iv); + if (actx == NULL) { + return -1; + } + + aead_ctx->native_handle = actx; + + return 0; +} + +void ngtcp2_crypto_aead_ctx_free(ngtcp2_crypto_aead_ctx *aead_ctx) { + if (aead_ctx->native_handle) { + ptls_aead_free(aead_ctx->native_handle); + } +} + +int ngtcp2_crypto_cipher_ctx_encrypt_init(ngtcp2_crypto_cipher_ctx *cipher_ctx, + const ngtcp2_crypto_cipher *cipher, + const uint8_t *key) { + ptls_cipher_context_t *actx; + + actx = ptls_cipher_new(cipher->native_handle, /* is_enc = */ 1, key); + if (actx == NULL) { + return -1; + } + + cipher_ctx->native_handle = actx; + + return 0; +} + +void ngtcp2_crypto_cipher_ctx_free(ngtcp2_crypto_cipher_ctx *cipher_ctx) { + if (cipher_ctx->native_handle) { + ptls_cipher_free(cipher_ctx->native_handle); + } +} + +int ngtcp2_crypto_hkdf_extract(uint8_t *dest, const ngtcp2_crypto_md *md, + const uint8_t *secret, size_t secretlen, + const uint8_t *salt, size_t saltlen) { + ptls_iovec_t saltv, ikm; + + saltv = ptls_iovec_init(salt, saltlen); + ikm = ptls_iovec_init(secret, secretlen); + + if (ptls_hkdf_extract(md->native_handle, dest, saltv, ikm) != 0) { + return -1; + } + + return 0; +} + +int ngtcp2_crypto_hkdf_expand(uint8_t *dest, size_t destlen, + const ngtcp2_crypto_md *md, const uint8_t *secret, + size_t secretlen, const uint8_t *info, + size_t infolen) { + ptls_iovec_t prk, infov; + + prk = ptls_iovec_init(secret, secretlen); + infov = ptls_iovec_init(info, infolen); + + if (ptls_hkdf_expand(md->native_handle, dest, destlen, prk, infov) != 0) { + return -1; + } + + return 0; +} + +int ngtcp2_crypto_hkdf(uint8_t *dest, size_t destlen, + const ngtcp2_crypto_md *md, const uint8_t *secret, + size_t secretlen, const uint8_t *salt, size_t saltlen, + const uint8_t *info, size_t infolen) { + ptls_iovec_t saltv, ikm, prk, infov; + uint8_t prkbuf[PTLS_MAX_DIGEST_SIZE]; + ptls_hash_algorithm_t *algo = md->native_handle; + + saltv = ptls_iovec_init(salt, saltlen); + ikm = ptls_iovec_init(secret, secretlen); + + if (ptls_hkdf_extract(algo, prkbuf, saltv, ikm) != 0) { + return -1; + } + + prk = ptls_iovec_init(prkbuf, algo->digest_size); + infov = ptls_iovec_init(info, infolen); + + if (ptls_hkdf_expand(algo, dest, destlen, prk, infov) != 0) { + return -1; + } + + return 0; +} + +int ngtcp2_crypto_encrypt(uint8_t *dest, const ngtcp2_crypto_aead *aead, + const ngtcp2_crypto_aead_ctx *aead_ctx, + const uint8_t *plaintext, size_t plaintextlen, + const uint8_t *nonce, size_t noncelen, + const uint8_t *aad, size_t aadlen) { + ptls_aead_context_t *actx = aead_ctx->native_handle; + + (void)aead; + + ptls_aead_xor_iv(actx, nonce, noncelen); + + ptls_aead_encrypt(actx, dest, plaintext, plaintextlen, 0, aad, aadlen); + + /* zero-out static iv once again */ + ptls_aead_xor_iv(actx, nonce, noncelen); + + return 0; +} + +int ngtcp2_crypto_decrypt(uint8_t *dest, const ngtcp2_crypto_aead *aead, + const ngtcp2_crypto_aead_ctx *aead_ctx, + const uint8_t *ciphertext, size_t ciphertextlen, + const uint8_t *nonce, size_t noncelen, + const uint8_t *aad, size_t aadlen) { + ptls_aead_context_t *actx = aead_ctx->native_handle; + + (void)aead; + + ptls_aead_xor_iv(actx, nonce, noncelen); + + if (ptls_aead_decrypt(actx, dest, ciphertext, ciphertextlen, 0, aad, + aadlen) == SIZE_MAX) { + return -1; + } + + /* zero-out static iv once again */ + ptls_aead_xor_iv(actx, nonce, noncelen); + + return 0; +} + +int ngtcp2_crypto_hp_mask(uint8_t *dest, const ngtcp2_crypto_cipher *hp, + const ngtcp2_crypto_cipher_ctx *hp_ctx, + const uint8_t *sample) { + ptls_cipher_context_t *actx = hp_ctx->native_handle; + static const uint8_t PLAINTEXT[] = "\x00\x00\x00\x00\x00"; + + (void)hp; + + ptls_cipher_init(actx, sample); + ptls_cipher_encrypt(actx, dest, PLAINTEXT, sizeof(PLAINTEXT) - 1); + + return 0; +} + +int ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, + ngtcp2_crypto_level crypto_level, + const uint8_t *data, size_t datalen) { + ngtcp2_crypto_picotls_ctx *cptls = ngtcp2_conn_get_tls_native_handle(conn); + ptls_buffer_t sendbuf; + size_t epoch_offsets[5] = {0}; + size_t epoch = ngtcp2_crypto_picotls_from_ngtcp2_crypto_level(crypto_level); + size_t epoch_datalen; + size_t i; + int rv; + + ptls_buffer_init(&sendbuf, (void *)"", 0); + + assert(epoch == ptls_get_read_epoch(cptls->ptls)); + + rv = ptls_handle_message(cptls->ptls, &sendbuf, epoch_offsets, epoch, data, + datalen, &cptls->handshake_properties); + if (rv != 0 && rv != PTLS_ERROR_IN_PROGRESS) { + if (PTLS_ERROR_GET_CLASS(rv) == PTLS_ERROR_CLASS_SELF_ALERT) { + ngtcp2_conn_set_tls_alert(conn, (uint8_t)PTLS_ERROR_TO_ALERT(rv)); + } + + rv = -1; + goto fin; + } + + if (!ngtcp2_conn_is_server(conn) && + cptls->handshake_properties.client.early_data_acceptance == + PTLS_EARLY_DATA_REJECTED) { + ngtcp2_conn_early_data_rejected(conn); + } + + for (i = 0; i < 4; ++i) { + epoch_datalen = epoch_offsets[i + 1] - epoch_offsets[i]; + if (epoch_datalen == 0) { + continue; + } + + assert(i != 1); + + if (ngtcp2_conn_submit_crypto_data( + conn, ngtcp2_crypto_picotls_from_epoch(i), + sendbuf.base + epoch_offsets[i], epoch_datalen) != 0) { + rv = -1; + goto fin; + } + } + + if (rv == 0) { + ngtcp2_conn_handshake_completed(conn); + } + + rv = 0; + +fin: + ptls_buffer_dispose(&sendbuf); + + return rv; +} + +int ngtcp2_crypto_set_remote_transport_params(ngtcp2_conn *conn, void *tls) { + (void)conn; + (void)tls; + + /* The remote transport parameters will be set via picotls + collected_extensions callback */ + + return 0; +} + +int ngtcp2_crypto_set_local_transport_params(void *tls, const uint8_t *buf, + size_t len) { + (void)tls; + (void)buf; + (void)len; + + /* The local transport parameters will be set in an external + call. */ + + return 0; +} + +ngtcp2_crypto_level ngtcp2_crypto_picotls_from_epoch(size_t epoch) { + switch (epoch) { + case 0: + return NGTCP2_CRYPTO_LEVEL_INITIAL; + case 1: + return NGTCP2_CRYPTO_LEVEL_EARLY; + case 2: + return NGTCP2_CRYPTO_LEVEL_HANDSHAKE; + case 3: + return NGTCP2_CRYPTO_LEVEL_APPLICATION; + default: + assert(0); + abort(); + } +} + +size_t ngtcp2_crypto_picotls_from_ngtcp2_crypto_level( + ngtcp2_crypto_level crypto_level) { + switch (crypto_level) { + case NGTCP2_CRYPTO_LEVEL_INITIAL: + return 0; + case NGTCP2_CRYPTO_LEVEL_EARLY: + return 1; + case NGTCP2_CRYPTO_LEVEL_HANDSHAKE: + return 2; + case NGTCP2_CRYPTO_LEVEL_APPLICATION: + return 3; + default: + assert(0); + abort(); + } +} + +int ngtcp2_crypto_get_path_challenge_data_cb(ngtcp2_conn *conn, uint8_t *data, + void *user_data) { + (void)conn; + (void)user_data; + + ptls_openssl_random_bytes(data, NGTCP2_PATH_CHALLENGE_DATALEN); + + return 0; +} + +int ngtcp2_crypto_random(uint8_t *data, size_t datalen) { + ptls_openssl_random_bytes(data, datalen); + + return 0; +} + +void ngtcp2_crypto_picotls_ctx_init(ngtcp2_crypto_picotls_ctx *cptls) { + cptls->ptls = NULL; + memset(&cptls->handshake_properties, 0, sizeof(cptls->handshake_properties)); +} + +static int set_additional_extensions(ptls_handshake_properties_t *hsprops, + ngtcp2_conn *conn) { + const size_t buflen = 256; + uint8_t *buf; + ngtcp2_ssize nwrite; + ptls_raw_extension_t *exts = hsprops->additional_extensions; + + assert(exts); + + buf = malloc(buflen); + if (buf == NULL) { + return -1; + } + + nwrite = ngtcp2_conn_encode_local_transport_params(conn, buf, buflen); + if (nwrite < 0) { + goto fail; + } + + exts[0].type = NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_V1; + exts[0].data.base = buf; + exts[0].data.len = (size_t)nwrite; + + return 0; + +fail: + free(buf); + + return -1; +} + +int ngtcp2_crypto_picotls_collect_extension( + ptls_t *ptls, struct st_ptls_handshake_properties_t *properties, + uint16_t type) { + (void)ptls; + (void)properties; + + return type == NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_V1; +} + +int ngtcp2_crypto_picotls_collected_extensions( + ptls_t *ptls, struct st_ptls_handshake_properties_t *properties, + ptls_raw_extension_t *extensions) { + ngtcp2_crypto_conn_ref *conn_ref; + ngtcp2_conn *conn; + int rv; + + (void)properties; + + for (; extensions->type != UINT16_MAX; ++extensions) { + if (extensions->type != NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_V1) { + continue; + } + + conn_ref = *ptls_get_data_ptr(ptls); + conn = conn_ref->get_conn(conn_ref); + + rv = ngtcp2_conn_decode_remote_transport_params(conn, extensions->data.base, + extensions->data.len); + if (rv != 0) { + ngtcp2_conn_set_tls_error(conn, rv); + return -1; + } + + return 0; + } + + return 0; +} + +static int update_traffic_key_server_cb(ptls_update_traffic_key_t *self, + ptls_t *ptls, int is_enc, size_t epoch, + const void *secret) { + ngtcp2_crypto_conn_ref *conn_ref = *ptls_get_data_ptr(ptls); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + ngtcp2_crypto_level level = ngtcp2_crypto_picotls_from_epoch(epoch); + ptls_cipher_suite_t *cipher = ptls_get_cipher(ptls); + size_t secretlen = cipher->hash->digest_size; + ngtcp2_crypto_picotls_ctx *cptls; + + (void)self; + + if (is_enc) { + if (ngtcp2_crypto_derive_and_install_tx_key(conn, NULL, NULL, NULL, level, + secret, secretlen) != 0) { + return -1; + } + + if (level == NGTCP2_CRYPTO_LEVEL_HANDSHAKE) { + /* libngtcp2 allows an application to change QUIC transport + * parameters before installing Handshake tx key. We need to + * wait for the key to get the correct local transport + * parameters from ngtcp2_conn. + */ + cptls = ngtcp2_conn_get_tls_native_handle(conn); + + if (set_additional_extensions(&cptls->handshake_properties, conn) != 0) { + return -1; + } + } + + return 0; + } + + if (ngtcp2_crypto_derive_and_install_rx_key(conn, NULL, NULL, NULL, level, + secret, secretlen) != 0) { + return -1; + } + + return 0; +} + +static ptls_update_traffic_key_t update_traffic_key_server = { + update_traffic_key_server_cb, +}; + +static int update_traffic_key_cb(ptls_update_traffic_key_t *self, ptls_t *ptls, + int is_enc, size_t epoch, const void *secret) { + ngtcp2_crypto_conn_ref *conn_ref = *ptls_get_data_ptr(ptls); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + ngtcp2_crypto_level level = ngtcp2_crypto_picotls_from_epoch(epoch); + ptls_cipher_suite_t *cipher = ptls_get_cipher(ptls); + size_t secretlen = cipher->hash->digest_size; + + (void)self; + + if (is_enc) { + if (ngtcp2_crypto_derive_and_install_tx_key(conn, NULL, NULL, NULL, level, + secret, secretlen) != 0) { + return -1; + } + + return 0; + } + + if (ngtcp2_crypto_derive_and_install_rx_key(conn, NULL, NULL, NULL, level, + secret, secretlen) != 0) { + return -1; + } + + return 0; +} + +static ptls_update_traffic_key_t update_traffic_key = {update_traffic_key_cb}; + +int ngtcp2_crypto_picotls_configure_server_context(ptls_context_t *ctx) { + ctx->max_early_data_size = UINT32_MAX; + ctx->omit_end_of_early_data = 1; + ctx->update_traffic_key = &update_traffic_key_server; + + return 0; +} + +int ngtcp2_crypto_picotls_configure_client_context(ptls_context_t *ctx) { + ctx->omit_end_of_early_data = 1; + ctx->update_traffic_key = &update_traffic_key; + + return 0; +} + +int ngtcp2_crypto_picotls_configure_server_session( + ngtcp2_crypto_picotls_ctx *cptls) { + ptls_handshake_properties_t *hsprops = &cptls->handshake_properties; + + hsprops->collect_extension = ngtcp2_crypto_picotls_collect_extension; + hsprops->collected_extensions = ngtcp2_crypto_picotls_collected_extensions; + + return 0; +} + +int ngtcp2_crypto_picotls_configure_client_session( + ngtcp2_crypto_picotls_ctx *cptls, ngtcp2_conn *conn) { + ptls_handshake_properties_t *hsprops = &cptls->handshake_properties; + + hsprops->client.max_early_data_size = calloc(1, sizeof(uint32_t)); + if (hsprops->client.max_early_data_size == NULL) { + return -1; + } + + if (set_additional_extensions(hsprops, conn) != 0) { + free(hsprops->client.max_early_data_size); + hsprops->client.max_early_data_size = NULL; + return -1; + } + + hsprops->collect_extension = ngtcp2_crypto_picotls_collect_extension; + hsprops->collected_extensions = ngtcp2_crypto_picotls_collected_extensions; + + return 0; +} + +void ngtcp2_crypto_picotls_deconfigure_session( + ngtcp2_crypto_picotls_ctx *cptls) { + ptls_handshake_properties_t *hsprops; + ptls_raw_extension_t *exts; + + if (cptls == NULL) { + return; + } + + hsprops = &cptls->handshake_properties; + + free(hsprops->client.max_early_data_size); + + exts = hsprops->additional_extensions; + if (exts) { + free(hsprops->additional_extensions[0].data.base); + } +} diff --git a/deps/ngtcp2/ngtcp2/crypto/shared.c b/deps/ngtcp2/ngtcp2/crypto/shared.c index 5d040f2ce75..78252b852b4 100644 --- a/deps/ngtcp2/ngtcp2/crypto/shared.c +++ b/deps/ngtcp2/ngtcp2/crypto/shared.c @@ -24,10 +24,18 @@ */ #include "shared.h" +#ifdef WIN32 +# include +# include +#else +# include +#endif + #include #include #include "ngtcp2_macro.h" +#include "ngtcp2_net.h" ngtcp2_crypto_md *ngtcp2_crypto_md_init(ngtcp2_crypto_md *md, void *md_native_handle) { @@ -78,10 +86,16 @@ int ngtcp2_crypto_derive_initial_secrets(uint32_t version, uint8_t *rx_secret, ngtcp2_crypto_ctx_initial(&ctx); - if (version == NGTCP2_PROTO_VER_V1) { + switch (version) { + case NGTCP2_PROTO_VER_V1: salt = (const uint8_t *)NGTCP2_INITIAL_SALT_V1; saltlen = sizeof(NGTCP2_INITIAL_SALT_V1) - 1; - } else { + break; + case NGTCP2_PROTO_VER_V2_DRAFT: + salt = (const uint8_t *)NGTCP2_INITIAL_SALT_V2_DRAFT; + saltlen = sizeof(NGTCP2_INITIAL_SALT_V2_DRAFT) - 1; + break; + default: salt = (const uint8_t *)NGTCP2_INITIAL_SALT_DRAFT; saltlen = sizeof(NGTCP2_INITIAL_SALT_DRAFT) - 1; } @@ -119,27 +133,55 @@ size_t ngtcp2_crypto_packet_protection_ivlen(const ngtcp2_crypto_aead *aead) { } int ngtcp2_crypto_derive_packet_protection_key( - uint8_t *key, uint8_t *iv, uint8_t *hp_key, const ngtcp2_crypto_aead *aead, - const ngtcp2_crypto_md *md, const uint8_t *secret, size_t secretlen) { - static const uint8_t KEY_LABEL[] = "quic key"; - static const uint8_t IV_LABEL[] = "quic iv"; - static const uint8_t HP_KEY_LABEL[] = "quic hp"; + uint8_t *key, uint8_t *iv, uint8_t *hp_key, uint32_t version, + const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_md *md, + const uint8_t *secret, size_t secretlen) { + static const uint8_t KEY_LABEL_V1[] = "quic key"; + static const uint8_t IV_LABEL_V1[] = "quic iv"; + static const uint8_t HP_KEY_LABEL_V1[] = "quic hp"; + static const uint8_t KEY_LABEL_V2_DRAFT[] = "quicv2 key"; + static const uint8_t IV_LABEL_V2_DRAFT[] = "quicv2 iv"; + static const uint8_t HP_KEY_LABEL_V2_DRAFT[] = "quicv2 hp"; size_t keylen = ngtcp2_crypto_aead_keylen(aead); size_t ivlen = ngtcp2_crypto_packet_protection_ivlen(aead); + const uint8_t *key_label; + size_t key_labellen; + const uint8_t *iv_label; + size_t iv_labellen; + const uint8_t *hp_key_label; + size_t hp_key_labellen; + + switch (version) { + case NGTCP2_PROTO_VER_V2_DRAFT: + key_label = KEY_LABEL_V2_DRAFT; + key_labellen = sizeof(KEY_LABEL_V2_DRAFT) - 1; + iv_label = IV_LABEL_V2_DRAFT; + iv_labellen = sizeof(IV_LABEL_V2_DRAFT) - 1; + hp_key_label = HP_KEY_LABEL_V2_DRAFT; + hp_key_labellen = sizeof(HP_KEY_LABEL_V2_DRAFT) - 1; + break; + default: + key_label = KEY_LABEL_V1; + key_labellen = sizeof(KEY_LABEL_V1) - 1; + iv_label = IV_LABEL_V1; + iv_labellen = sizeof(IV_LABEL_V1) - 1; + hp_key_label = HP_KEY_LABEL_V1; + hp_key_labellen = sizeof(HP_KEY_LABEL_V1) - 1; + } if (ngtcp2_crypto_hkdf_expand_label(key, keylen, md, secret, secretlen, - KEY_LABEL, sizeof(KEY_LABEL) - 1) != 0) { + key_label, key_labellen) != 0) { return -1; } if (ngtcp2_crypto_hkdf_expand_label(iv, ivlen, md, secret, secretlen, - IV_LABEL, sizeof(IV_LABEL) - 1) != 0) { + iv_label, iv_labellen) != 0) { return -1; } - if (hp_key != NULL && ngtcp2_crypto_hkdf_expand_label( - hp_key, keylen, md, secret, secretlen, HP_KEY_LABEL, - sizeof(HP_KEY_LABEL) - 1) != 0) { + if (hp_key != NULL && + ngtcp2_crypto_hkdf_expand_label(hp_key, keylen, md, secret, secretlen, + hp_key_label, hp_key_labellen) != 0) { return -1; } @@ -176,6 +218,7 @@ int ngtcp2_crypto_derive_and_install_rx_key(ngtcp2_conn *conn, uint8_t *key, size_t ivlen; int rv; ngtcp2_crypto_ctx cctx; + uint32_t version; if (level == NGTCP2_CRYPTO_LEVEL_EARLY && !ngtcp2_conn_is_server(conn)) { return 0; @@ -191,12 +234,25 @@ int ngtcp2_crypto_derive_and_install_rx_key(ngtcp2_conn *conn, uint8_t *key, hp_key = hp_keybuf; } - if (level == NGTCP2_CRYPTO_LEVEL_EARLY) { + switch (level) { + case NGTCP2_CRYPTO_LEVEL_EARLY: ngtcp2_crypto_ctx_tls_early(&cctx, tls); ngtcp2_conn_set_early_crypto_ctx(conn, &cctx); ctx = ngtcp2_conn_get_early_crypto_ctx(conn); - } else { + version = ngtcp2_conn_get_client_chosen_version(conn); + break; + case NGTCP2_CRYPTO_LEVEL_HANDSHAKE: + if (ngtcp2_conn_is_server(conn) && + !ngtcp2_conn_get_negotiated_version(conn)) { + rv = ngtcp2_crypto_set_remote_transport_params(conn, tls); + if (rv != 0) { + return -1; + } + } + /* fall through */ + default: ctx = ngtcp2_conn_get_crypto_ctx(conn); + version = ngtcp2_conn_get_negotiated_version(conn); if (!ctx->aead.native_handle) { ngtcp2_crypto_ctx_tls(&cctx, tls); @@ -210,8 +266,8 @@ int ngtcp2_crypto_derive_and_install_rx_key(ngtcp2_conn *conn, uint8_t *key, hp = &ctx->hp; ivlen = ngtcp2_crypto_packet_protection_ivlen(aead); - if (ngtcp2_crypto_derive_packet_protection_key(key, iv, hp_key, aead, md, - secret, secretlen) != 0) { + if (ngtcp2_crypto_derive_packet_protection_key(key, iv, hp_key, version, aead, + md, secret, secretlen) != 0) { return -1; } @@ -272,17 +328,10 @@ int ngtcp2_crypto_derive_and_install_rx_key(ngtcp2_conn *conn, uint8_t *key, * This function returns 0 if it succeeds, or -1. */ static int crypto_set_local_transport_params(ngtcp2_conn *conn, void *tls) { - ngtcp2_transport_params_type exttype = - ngtcp2_conn_is_server(conn) - ? NGTCP2_TRANSPORT_PARAMS_TYPE_ENCRYPTED_EXTENSIONS - : NGTCP2_TRANSPORT_PARAMS_TYPE_CLIENT_HELLO; - ngtcp2_transport_params params; ngtcp2_ssize nwrite; uint8_t buf[256]; - ngtcp2_conn_get_local_transport_params(conn, ¶ms); - - nwrite = ngtcp2_encode_transport_params(buf, sizeof(buf), exttype, ¶ms); + nwrite = ngtcp2_conn_encode_local_transport_params(conn, buf, sizeof(buf)); if (nwrite < 0) { return -1; } @@ -310,6 +359,7 @@ int ngtcp2_crypto_derive_and_install_tx_key(ngtcp2_conn *conn, uint8_t *key, size_t ivlen; int rv; ngtcp2_crypto_ctx cctx; + uint32_t version; if (level == NGTCP2_CRYPTO_LEVEL_EARLY && ngtcp2_conn_is_server(conn)) { return 0; @@ -325,12 +375,25 @@ int ngtcp2_crypto_derive_and_install_tx_key(ngtcp2_conn *conn, uint8_t *key, hp_key = hp_keybuf; } - if (level == NGTCP2_CRYPTO_LEVEL_EARLY) { + switch (level) { + case NGTCP2_CRYPTO_LEVEL_EARLY: ngtcp2_crypto_ctx_tls_early(&cctx, tls); ngtcp2_conn_set_early_crypto_ctx(conn, &cctx); ctx = ngtcp2_conn_get_early_crypto_ctx(conn); - } else { + version = ngtcp2_conn_get_client_chosen_version(conn); + break; + case NGTCP2_CRYPTO_LEVEL_HANDSHAKE: + if (ngtcp2_conn_is_server(conn) && + !ngtcp2_conn_get_negotiated_version(conn)) { + rv = ngtcp2_crypto_set_remote_transport_params(conn, tls); + if (rv != 0) { + return -1; + } + } + /* fall through */ + default: ctx = ngtcp2_conn_get_crypto_ctx(conn); + version = ngtcp2_conn_get_negotiated_version(conn); if (!ctx->aead.native_handle) { ngtcp2_crypto_ctx_tls(&cctx, tls); @@ -344,8 +407,8 @@ int ngtcp2_crypto_derive_and_install_tx_key(ngtcp2_conn *conn, uint8_t *key, hp = &ctx->hp; ivlen = ngtcp2_crypto_packet_protection_ivlen(aead); - if (ngtcp2_crypto_derive_packet_protection_key(key, iv, hp_key, aead, md, - secret, secretlen) != 0) { + if (ngtcp2_crypto_derive_packet_protection_key(key, iv, hp_key, version, aead, + md, secret, secretlen) != 0) { return -1; } @@ -371,15 +434,9 @@ int ngtcp2_crypto_derive_and_install_tx_key(ngtcp2_conn *conn, uint8_t *key, goto fail; } - if (ngtcp2_conn_is_server(conn)) { - rv = ngtcp2_crypto_set_remote_transport_params(conn, tls); - if (rv != 0) { - return rv; - } - - if (crypto_set_local_transport_params(conn, tls) != 0) { - return rv; - } + if (ngtcp2_conn_is_server(conn) && + crypto_set_local_transport_params(conn, tls) != 0) { + goto fail; } break; @@ -408,7 +465,7 @@ int ngtcp2_crypto_derive_and_install_initial_key( ngtcp2_conn *conn, uint8_t *rx_secret, uint8_t *tx_secret, uint8_t *initial_secret, uint8_t *rx_key, uint8_t *rx_iv, uint8_t *rx_hp_key, uint8_t *tx_key, uint8_t *tx_iv, uint8_t *tx_hp_key, - const ngtcp2_cid *client_dcid) { + uint32_t version, const ngtcp2_cid *client_dcid) { uint8_t rx_secretbuf[NGTCP2_CRYPTO_INITIAL_SECRETLEN]; uint8_t tx_secretbuf[NGTCP2_CRYPTO_INITIAL_SECRETLEN]; uint8_t initial_secretbuf[NGTCP2_CRYPTO_INITIAL_SECRETLEN]; @@ -427,7 +484,6 @@ int ngtcp2_crypto_derive_and_install_initial_key( ngtcp2_crypto_aead_ctx retry_aead_ctx = {0}; int rv; int server = ngtcp2_conn_is_server(conn); - uint32_t version = ngtcp2_conn_get_negotiated_version(conn); const uint8_t *retry_key; size_t retry_noncelen; @@ -472,13 +528,13 @@ int ngtcp2_crypto_derive_and_install_initial_key( } if (ngtcp2_crypto_derive_packet_protection_key( - rx_key, rx_iv, rx_hp_key, &ctx.aead, &ctx.md, rx_secret, + rx_key, rx_iv, rx_hp_key, version, &ctx.aead, &ctx.md, rx_secret, NGTCP2_CRYPTO_INITIAL_SECRETLEN) != 0) { return -1; } if (ngtcp2_crypto_derive_packet_protection_key( - tx_key, tx_iv, tx_hp_key, &ctx.aead, &ctx.md, tx_secret, + tx_key, tx_iv, tx_hp_key, version, &ctx.aead, &ctx.md, tx_secret, NGTCP2_CRYPTO_INITIAL_SECRETLEN) != 0) { return -1; } @@ -506,10 +562,16 @@ int ngtcp2_crypto_derive_and_install_initial_key( if (!server && !ngtcp2_conn_after_retry(conn)) { ngtcp2_crypto_aead_retry(&retry_aead); - if (ngtcp2_conn_get_negotiated_version(conn) == NGTCP2_PROTO_VER_V1) { + switch (version) { + case NGTCP2_PROTO_VER_V1: retry_key = (const uint8_t *)NGTCP2_RETRY_KEY_V1; retry_noncelen = sizeof(NGTCP2_RETRY_NONCE_V1) - 1; - } else { + break; + case NGTCP2_PROTO_VER_V2_DRAFT: + retry_key = (const uint8_t *)NGTCP2_RETRY_KEY_V2_DRAFT; + retry_noncelen = sizeof(NGTCP2_RETRY_NONCE_V2_DRAFT) - 1; + break; + default: retry_key = (const uint8_t *)NGTCP2_RETRY_KEY_DRAFT; retry_noncelen = sizeof(NGTCP2_RETRY_NONCE_DRAFT) - 1; } @@ -543,6 +605,114 @@ int ngtcp2_crypto_derive_and_install_initial_key( return -1; } +int ngtcp2_crypto_derive_and_install_vneg_initial_key( + ngtcp2_conn *conn, uint8_t *rx_secret, uint8_t *tx_secret, + uint8_t *initial_secret, uint8_t *rx_key, uint8_t *rx_iv, + uint8_t *rx_hp_key, uint8_t *tx_key, uint8_t *tx_iv, uint8_t *tx_hp_key, + uint32_t version, const ngtcp2_cid *client_dcid) { + uint8_t rx_secretbuf[NGTCP2_CRYPTO_INITIAL_SECRETLEN]; + uint8_t tx_secretbuf[NGTCP2_CRYPTO_INITIAL_SECRETLEN]; + uint8_t initial_secretbuf[NGTCP2_CRYPTO_INITIAL_SECRETLEN]; + uint8_t rx_keybuf[NGTCP2_CRYPTO_INITIAL_KEYLEN]; + uint8_t rx_ivbuf[NGTCP2_CRYPTO_INITIAL_IVLEN]; + uint8_t rx_hp_keybuf[NGTCP2_CRYPTO_INITIAL_KEYLEN]; + uint8_t tx_keybuf[NGTCP2_CRYPTO_INITIAL_KEYLEN]; + uint8_t tx_ivbuf[NGTCP2_CRYPTO_INITIAL_IVLEN]; + uint8_t tx_hp_keybuf[NGTCP2_CRYPTO_INITIAL_KEYLEN]; + const ngtcp2_crypto_ctx *ctx = ngtcp2_conn_get_initial_crypto_ctx(conn); + ngtcp2_crypto_aead_ctx rx_aead_ctx = {0}; + ngtcp2_crypto_cipher_ctx rx_hp_ctx = {0}; + ngtcp2_crypto_aead_ctx tx_aead_ctx = {0}; + ngtcp2_crypto_cipher_ctx tx_hp_ctx = {0}; + int rv; + int server = ngtcp2_conn_is_server(conn); + + if (!rx_secret) { + rx_secret = rx_secretbuf; + } + if (!tx_secret) { + tx_secret = tx_secretbuf; + } + if (!initial_secret) { + initial_secret = initial_secretbuf; + } + + if (!rx_key) { + rx_key = rx_keybuf; + } + if (!rx_iv) { + rx_iv = rx_ivbuf; + } + if (!rx_hp_key) { + rx_hp_key = rx_hp_keybuf; + } + if (!tx_key) { + tx_key = tx_keybuf; + } + if (!tx_iv) { + tx_iv = tx_ivbuf; + } + if (!tx_hp_key) { + tx_hp_key = tx_hp_keybuf; + } + + if (ngtcp2_crypto_derive_initial_secrets( + version, rx_secret, tx_secret, initial_secret, client_dcid, + server ? NGTCP2_CRYPTO_SIDE_SERVER : NGTCP2_CRYPTO_SIDE_CLIENT) != + 0) { + return -1; + } + + if (ngtcp2_crypto_derive_packet_protection_key( + rx_key, rx_iv, rx_hp_key, version, &ctx->aead, &ctx->md, rx_secret, + NGTCP2_CRYPTO_INITIAL_SECRETLEN) != 0) { + return -1; + } + + if (ngtcp2_crypto_derive_packet_protection_key( + tx_key, tx_iv, tx_hp_key, version, &ctx->aead, &ctx->md, tx_secret, + NGTCP2_CRYPTO_INITIAL_SECRETLEN) != 0) { + return -1; + } + + if (ngtcp2_crypto_aead_ctx_decrypt_init(&rx_aead_ctx, &ctx->aead, rx_key, + NGTCP2_CRYPTO_INITIAL_IVLEN) != 0) { + goto fail; + } + + if (ngtcp2_crypto_cipher_ctx_encrypt_init(&rx_hp_ctx, &ctx->hp, rx_hp_key) != + 0) { + goto fail; + } + + if (ngtcp2_crypto_aead_ctx_encrypt_init(&tx_aead_ctx, &ctx->aead, tx_key, + NGTCP2_CRYPTO_INITIAL_IVLEN) != 0) { + goto fail; + } + + if (ngtcp2_crypto_cipher_ctx_encrypt_init(&tx_hp_ctx, &ctx->hp, tx_hp_key) != + 0) { + goto fail; + } + + rv = ngtcp2_conn_install_vneg_initial_key( + conn, version, &rx_aead_ctx, rx_iv, &rx_hp_ctx, &tx_aead_ctx, tx_iv, + &tx_hp_ctx, NGTCP2_CRYPTO_INITIAL_IVLEN); + if (rv != 0) { + goto fail; + } + + return 0; + +fail: + ngtcp2_crypto_cipher_ctx_free(&tx_hp_ctx); + ngtcp2_crypto_aead_ctx_free(&tx_aead_ctx); + ngtcp2_crypto_cipher_ctx_free(&rx_hp_ctx); + ngtcp2_crypto_aead_ctx_free(&rx_aead_ctx); + + return -1; +} + int ngtcp2_crypto_update_key( ngtcp2_conn *conn, uint8_t *rx_secret, uint8_t *tx_secret, ngtcp2_crypto_aead_ctx *rx_aead_ctx, uint8_t *rx_key, uint8_t *rx_iv, @@ -553,14 +723,15 @@ int ngtcp2_crypto_update_key( const ngtcp2_crypto_aead *aead = &ctx->aead; const ngtcp2_crypto_md *md = &ctx->md; size_t ivlen = ngtcp2_crypto_packet_protection_ivlen(aead); + uint32_t version = ngtcp2_conn_get_negotiated_version(conn); if (ngtcp2_crypto_update_traffic_secret(rx_secret, md, current_rx_secret, secretlen) != 0) { return -1; } - if (ngtcp2_crypto_derive_packet_protection_key(rx_key, rx_iv, NULL, aead, md, - rx_secret, secretlen) != 0) { + if (ngtcp2_crypto_derive_packet_protection_key( + rx_key, rx_iv, NULL, version, aead, md, rx_secret, secretlen) != 0) { return -1; } @@ -569,8 +740,8 @@ int ngtcp2_crypto_update_key( return -1; } - if (ngtcp2_crypto_derive_packet_protection_key(tx_key, tx_iv, NULL, aead, md, - tx_secret, secretlen) != 0) { + if (ngtcp2_crypto_derive_packet_protection_key( + tx_key, tx_iv, NULL, version, aead, md, tx_secret, secretlen) != 0) { return -1; } @@ -593,9 +764,9 @@ int ngtcp2_crypto_encrypt_cb(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *plaintext, size_t plaintextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen) { + const uint8_t *aad, size_t aadlen) { if (ngtcp2_crypto_encrypt(dest, aead, aead_ctx, plaintext, plaintextlen, - nonce, noncelen, ad, adlen) != 0) { + nonce, noncelen, aad, aadlen) != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; } return 0; @@ -605,10 +776,10 @@ int ngtcp2_crypto_decrypt_cb(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *ciphertext, size_t ciphertextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen) { + const uint8_t *aad, size_t aadlen) { if (ngtcp2_crypto_decrypt(dest, aead, aead_ctx, ciphertext, ciphertextlen, - nonce, noncelen, ad, adlen) != 0) { - return NGTCP2_ERR_TLS_DECRYPT; + nonce, noncelen, aad, aadlen) != 0) { + return NGTCP2_ERR_DECRYPT; } return 0; } @@ -643,32 +814,413 @@ int ngtcp2_crypto_update_key_cb( } int ngtcp2_crypto_generate_stateless_reset_token(uint8_t *token, - const ngtcp2_crypto_md *md, const uint8_t *secret, size_t secretlen, const ngtcp2_cid *cid) { - uint8_t buf[64]; + static const uint8_t info[] = "stateless_reset"; + ngtcp2_crypto_md md; + + if (ngtcp2_crypto_hkdf(token, NGTCP2_STATELESS_RESET_TOKENLEN, + ngtcp2_crypto_md_sha256(&md), secret, secretlen, + cid->data, cid->datalen, info, + sizeof(info) - 1) != 0) { + return -1; + } + + return 0; +} + +static int crypto_derive_token_key(uint8_t *key, size_t keylen, uint8_t *iv, + size_t ivlen, const ngtcp2_crypto_md *md, + const uint8_t *secret, size_t secretlen, + const uint8_t *salt, size_t saltlen, + const uint8_t *info_prefix, + size_t info_prefixlen) { + static const uint8_t key_info_suffix[] = " key"; + static const uint8_t iv_info_suffix[] = " iv"; + uint8_t intsecret[32]; + uint8_t info[32]; + uint8_t *p; + + assert(ngtcp2_crypto_md_hashlen(md) == sizeof(intsecret)); + assert(info_prefixlen + sizeof(key_info_suffix) - 1 <= sizeof(info)); + assert(info_prefixlen + sizeof(iv_info_suffix) - 1 <= sizeof(info)); + + if (ngtcp2_crypto_hkdf_extract(intsecret, md, secret, secretlen, salt, + saltlen) != 0) { + return -1; + } + + memcpy(info, info_prefix, info_prefixlen); + p = info + info_prefixlen; + + memcpy(p, key_info_suffix, sizeof(key_info_suffix) - 1); + p += sizeof(key_info_suffix) - 1; + + if (ngtcp2_crypto_hkdf_expand(key, keylen, md, intsecret, sizeof(intsecret), + info, (size_t)(p - info)) != 0) { + return -1; + } + + p = info + info_prefixlen; + + memcpy(p, iv_info_suffix, sizeof(iv_info_suffix) - 1); + p += sizeof(iv_info_suffix) - 1; + + if (ngtcp2_crypto_hkdf_expand(iv, ivlen, md, intsecret, sizeof(intsecret), + info, (size_t)(p - info)) != 0) { + return -1; + } + + return 0; +} + +static size_t crypto_generate_retry_token_aad(uint8_t *dest, uint32_t version, + const ngtcp2_sockaddr *sa, + ngtcp2_socklen salen, + const ngtcp2_cid *retry_scid) { + uint8_t *p = dest; + + version = ngtcp2_htonl(version); + memcpy(p, &version, sizeof(version)); + memcpy(p, sa, (size_t)salen); + p += salen; + memcpy(p, retry_scid->data, retry_scid->datalen); + p += retry_scid->datalen; + + return (size_t)(p - dest); +} + +static const uint8_t retry_token_info_prefix[] = "retry_token"; + +ngtcp2_ssize ngtcp2_crypto_generate_retry_token( + uint8_t *token, const uint8_t *secret, size_t secretlen, uint32_t version, + const ngtcp2_sockaddr *remote_addr, ngtcp2_socklen remote_addrlen, + const ngtcp2_cid *retry_scid, const ngtcp2_cid *odcid, ngtcp2_tstamp ts) { + uint8_t plaintext[NGTCP2_CRYPTO_MAX_RETRY_TOKENLEN]; + uint8_t rand_data[NGTCP2_CRYPTO_TOKEN_RAND_DATALEN]; + uint8_t key[32]; + uint8_t iv[32]; + size_t keylen; + size_t ivlen; + ngtcp2_crypto_aead aead; + ngtcp2_crypto_md md; + ngtcp2_crypto_aead_ctx aead_ctx; + size_t plaintextlen; + uint8_t aad[sizeof(version) + sizeof(ngtcp2_sockaddr_storage) + + NGTCP2_MAX_CIDLEN]; + size_t aadlen; + uint8_t *p = plaintext; + ngtcp2_tstamp ts_be = ngtcp2_htonl64(ts); int rv; - assert(ngtcp2_crypto_md_hashlen(md) <= sizeof(buf)); - assert(NGTCP2_STATELESS_RESET_TOKENLEN <= sizeof(buf)); + memset(plaintext, 0, sizeof(plaintext)); + + *p++ = (uint8_t)odcid->datalen; + memcpy(p, odcid->data, odcid->datalen); + p += NGTCP2_MAX_CIDLEN; + memcpy(p, &ts_be, sizeof(ts_be)); + p += sizeof(ts_be); + + plaintextlen = (size_t)(p - plaintext); + + if (ngtcp2_crypto_random(rand_data, sizeof(rand_data)) != 0) { + return -1; + } + + ngtcp2_crypto_aead_aes_128_gcm(&aead); + ngtcp2_crypto_md_sha256(&md); + + keylen = ngtcp2_crypto_aead_keylen(&aead); + ivlen = ngtcp2_crypto_aead_noncelen(&aead); + + assert(sizeof(key) >= keylen); + assert(sizeof(iv) >= ivlen); + + if (crypto_derive_token_key(key, keylen, iv, ivlen, &md, secret, secretlen, + rand_data, sizeof(rand_data), + retry_token_info_prefix, + sizeof(retry_token_info_prefix) - 1) != 0) { + return -1; + } + + aadlen = crypto_generate_retry_token_aad(aad, version, remote_addr, + remote_addrlen, retry_scid); + + p = token; + *p++ = NGTCP2_CRYPTO_TOKEN_MAGIC_RETRY; + + if (ngtcp2_crypto_aead_ctx_encrypt_init(&aead_ctx, &aead, key, ivlen) != 0) { + return -1; + } + + rv = ngtcp2_crypto_encrypt(p, &aead, &aead_ctx, plaintext, plaintextlen, iv, + ivlen, aad, aadlen); + + ngtcp2_crypto_aead_ctx_free(&aead_ctx); - rv = ngtcp2_crypto_hkdf_extract(buf, md, secret, secretlen, cid->data, - cid->datalen); if (rv != 0) { return -1; } - memcpy(token, buf, NGTCP2_STATELESS_RESET_TOKENLEN); + p += plaintextlen + aead.max_overhead; + memcpy(p, rand_data, sizeof(rand_data)); + p += sizeof(rand_data); + + return p - token; +} + +int ngtcp2_crypto_verify_retry_token( + ngtcp2_cid *odcid, const uint8_t *token, size_t tokenlen, + const uint8_t *secret, size_t secretlen, uint32_t version, + const ngtcp2_sockaddr *remote_addr, ngtcp2_socklen remote_addrlen, + const ngtcp2_cid *dcid, ngtcp2_duration timeout, ngtcp2_tstamp ts) { + uint8_t + plaintext[/* cid len = */ 1 + NGTCP2_MAX_CIDLEN + sizeof(ngtcp2_tstamp)]; + uint8_t key[32]; + uint8_t iv[32]; + size_t keylen; + size_t ivlen; + ngtcp2_crypto_aead_ctx aead_ctx; + ngtcp2_crypto_aead aead; + ngtcp2_crypto_md md; + uint8_t aad[sizeof(version) + sizeof(ngtcp2_sockaddr_storage) + + NGTCP2_MAX_CIDLEN]; + size_t aadlen; + const uint8_t *rand_data; + const uint8_t *ciphertext; + size_t ciphertextlen; + size_t cil; + int rv; + ngtcp2_tstamp gen_ts; + + if (tokenlen != NGTCP2_CRYPTO_MAX_RETRY_TOKENLEN || + token[0] != NGTCP2_CRYPTO_TOKEN_MAGIC_RETRY) { + return -1; + } + + rand_data = token + tokenlen - NGTCP2_CRYPTO_TOKEN_RAND_DATALEN; + ciphertext = token + 1; + ciphertextlen = tokenlen - 1 - NGTCP2_CRYPTO_TOKEN_RAND_DATALEN; + + ngtcp2_crypto_aead_aes_128_gcm(&aead); + ngtcp2_crypto_md_sha256(&md); + + keylen = ngtcp2_crypto_aead_keylen(&aead); + ivlen = ngtcp2_crypto_aead_noncelen(&aead); + + if (crypto_derive_token_key(key, keylen, iv, ivlen, &md, secret, secretlen, + rand_data, NGTCP2_CRYPTO_TOKEN_RAND_DATALEN, + retry_token_info_prefix, + sizeof(retry_token_info_prefix) - 1) != 0) { + return -1; + } + + aadlen = crypto_generate_retry_token_aad(aad, version, remote_addr, + remote_addrlen, dcid); + + if (ngtcp2_crypto_aead_ctx_decrypt_init(&aead_ctx, &aead, key, ivlen) != 0) { + return -1; + } + + rv = ngtcp2_crypto_decrypt(plaintext, &aead, &aead_ctx, ciphertext, + ciphertextlen, iv, ivlen, aad, aadlen); + + ngtcp2_crypto_aead_ctx_free(&aead_ctx); + + if (rv != 0) { + return -1; + } + + cil = plaintext[0]; + + assert(cil == 0 || (cil >= NGTCP2_MIN_CIDLEN && cil <= NGTCP2_MAX_CIDLEN)); + + memcpy(&gen_ts, plaintext + /* cid len = */ 1 + NGTCP2_MAX_CIDLEN, + sizeof(gen_ts)); + + gen_ts = ngtcp2_ntohl64(gen_ts); + if (gen_ts + timeout <= ts) { + return -1; + } + + ngtcp2_cid_init(odcid, plaintext + /* cid len = */ 1, cil); return 0; } -ngtcp2_ssize ngtcp2_crypto_write_connection_close(uint8_t *dest, size_t destlen, - uint32_t version, - const ngtcp2_cid *dcid, - const ngtcp2_cid *scid, - uint64_t error_code) { +static size_t crypto_generate_regular_token_aad(uint8_t *dest, + const ngtcp2_sockaddr *sa) { + const uint8_t *addr; + size_t addrlen; + + switch (sa->sa_family) { + case AF_INET: + addr = (const uint8_t *)&((const ngtcp2_sockaddr_in *)(void *)sa)->sin_addr; + addrlen = sizeof(((const ngtcp2_sockaddr_in *)(void *)sa)->sin_addr); + break; + case AF_INET6: + addr = + (const uint8_t *)&((const ngtcp2_sockaddr_in6 *)(void *)sa)->sin6_addr; + addrlen = sizeof(((const ngtcp2_sockaddr_in6 *)(void *)sa)->sin6_addr); + break; + default: + assert(0); + abort(); + } + + memcpy(dest, addr, addrlen); + + return addrlen; +} + +static const uint8_t regular_token_info_prefix[] = "regular_token"; + +ngtcp2_ssize ngtcp2_crypto_generate_regular_token( + uint8_t *token, const uint8_t *secret, size_t secretlen, + const ngtcp2_sockaddr *remote_addr, ngtcp2_socklen remote_addrlen, + ngtcp2_tstamp ts) { + uint8_t plaintext[sizeof(ngtcp2_tstamp)]; + uint8_t rand_data[NGTCP2_CRYPTO_TOKEN_RAND_DATALEN]; + uint8_t key[32]; + uint8_t iv[32]; + size_t keylen; + size_t ivlen; + ngtcp2_crypto_aead aead; + ngtcp2_crypto_md md; + ngtcp2_crypto_aead_ctx aead_ctx; + size_t plaintextlen; + uint8_t aad[sizeof(ngtcp2_sockaddr_in6)]; + size_t aadlen; + uint8_t *p = plaintext; + ngtcp2_tstamp ts_be = ngtcp2_htonl64(ts); + int rv; + (void)remote_addrlen; + + memcpy(p, &ts_be, sizeof(ts_be)); + p += sizeof(ts_be); + + plaintextlen = (size_t)(p - plaintext); + + if (ngtcp2_crypto_random(rand_data, sizeof(rand_data)) != 0) { + return -1; + } + + ngtcp2_crypto_aead_aes_128_gcm(&aead); + ngtcp2_crypto_md_sha256(&md); + + keylen = ngtcp2_crypto_aead_keylen(&aead); + ivlen = ngtcp2_crypto_aead_noncelen(&aead); + + assert(sizeof(key) >= keylen); + assert(sizeof(iv) >= ivlen); + + if (crypto_derive_token_key(key, keylen, iv, ivlen, &md, secret, secretlen, + rand_data, sizeof(rand_data), + regular_token_info_prefix, + sizeof(regular_token_info_prefix) - 1) != 0) { + return -1; + } + + aadlen = crypto_generate_regular_token_aad(aad, remote_addr); + + p = token; + *p++ = NGTCP2_CRYPTO_TOKEN_MAGIC_REGULAR; + + if (ngtcp2_crypto_aead_ctx_encrypt_init(&aead_ctx, &aead, key, ivlen) != 0) { + return -1; + } + + rv = ngtcp2_crypto_encrypt(p, &aead, &aead_ctx, plaintext, plaintextlen, iv, + ivlen, aad, aadlen); + + ngtcp2_crypto_aead_ctx_free(&aead_ctx); + + if (rv != 0) { + return -1; + } + + p += plaintextlen + aead.max_overhead; + memcpy(p, rand_data, sizeof(rand_data)); + p += sizeof(rand_data); + + return p - token; +} + +int ngtcp2_crypto_verify_regular_token(const uint8_t *token, size_t tokenlen, + const uint8_t *secret, size_t secretlen, + const ngtcp2_sockaddr *remote_addr, + ngtcp2_socklen remote_addrlen, + ngtcp2_duration timeout, + ngtcp2_tstamp ts) { + uint8_t plaintext[sizeof(ngtcp2_tstamp)]; + uint8_t key[32]; + uint8_t iv[32]; + size_t keylen; + size_t ivlen; + ngtcp2_crypto_aead_ctx aead_ctx; + ngtcp2_crypto_aead aead; + ngtcp2_crypto_md md; + uint8_t aad[sizeof(ngtcp2_sockaddr_in6)]; + size_t aadlen; + const uint8_t *rand_data; + const uint8_t *ciphertext; + size_t ciphertextlen; + int rv; + ngtcp2_tstamp gen_ts; + (void)remote_addrlen; + + if (tokenlen != NGTCP2_CRYPTO_MAX_REGULAR_TOKENLEN || + token[0] != NGTCP2_CRYPTO_TOKEN_MAGIC_REGULAR) { + return -1; + } + + rand_data = token + tokenlen - NGTCP2_CRYPTO_TOKEN_RAND_DATALEN; + ciphertext = token + 1; + ciphertextlen = tokenlen - 1 - NGTCP2_CRYPTO_TOKEN_RAND_DATALEN; + + ngtcp2_crypto_aead_aes_128_gcm(&aead); + ngtcp2_crypto_md_sha256(&md); + + keylen = ngtcp2_crypto_aead_keylen(&aead); + ivlen = ngtcp2_crypto_aead_noncelen(&aead); + + if (crypto_derive_token_key(key, keylen, iv, ivlen, &md, secret, secretlen, + rand_data, NGTCP2_CRYPTO_TOKEN_RAND_DATALEN, + regular_token_info_prefix, + sizeof(regular_token_info_prefix) - 1) != 0) { + return -1; + } + + aadlen = crypto_generate_regular_token_aad(aad, remote_addr); + + if (ngtcp2_crypto_aead_ctx_decrypt_init(&aead_ctx, &aead, key, ivlen) != 0) { + return -1; + } + + rv = ngtcp2_crypto_decrypt(plaintext, &aead, &aead_ctx, ciphertext, + ciphertextlen, iv, ivlen, aad, aadlen); + + ngtcp2_crypto_aead_ctx_free(&aead_ctx); + + if (rv != 0) { + return -1; + } + + memcpy(&gen_ts, plaintext, sizeof(gen_ts)); + + gen_ts = ngtcp2_ntohl64(gen_ts); + if (gen_ts + timeout <= ts) { + return -1; + } + + return 0; +} + +ngtcp2_ssize ngtcp2_crypto_write_connection_close( + uint8_t *dest, size_t destlen, uint32_t version, const ngtcp2_cid *dcid, + const ngtcp2_cid *scid, uint64_t error_code, const uint8_t *reason, + size_t reasonlen) { uint8_t rx_secret[NGTCP2_CRYPTO_INITIAL_SECRETLEN]; uint8_t tx_secret[NGTCP2_CRYPTO_INITIAL_SECRETLEN]; uint8_t initial_secret[NGTCP2_CRYPTO_INITIAL_SECRETLEN]; @@ -689,7 +1241,7 @@ ngtcp2_ssize ngtcp2_crypto_write_connection_close(uint8_t *dest, size_t destlen, } if (ngtcp2_crypto_derive_packet_protection_key( - tx_key, tx_iv, tx_hp_key, &ctx.aead, &ctx.md, tx_secret, + tx_key, tx_iv, tx_hp_key, version, &ctx.aead, &ctx.md, tx_secret, NGTCP2_CRYPTO_INITIAL_SECRETLEN) != 0) { return -1; } @@ -706,8 +1258,9 @@ ngtcp2_ssize ngtcp2_crypto_write_connection_close(uint8_t *dest, size_t destlen, } spktlen = ngtcp2_pkt_write_connection_close( - dest, destlen, version, dcid, scid, error_code, ngtcp2_crypto_encrypt_cb, - &ctx.aead, &aead_ctx, tx_iv, ngtcp2_crypto_hp_mask_cb, &ctx.hp, &hp_ctx); + dest, destlen, version, dcid, scid, error_code, reason, reasonlen, + ngtcp2_crypto_encrypt_cb, &ctx.aead, &aead_ctx, tx_iv, + ngtcp2_crypto_hp_mask_cb, &ctx.hp, &hp_ctx); if (spktlen < 0) { spktlen = -1; } @@ -732,10 +1285,16 @@ ngtcp2_ssize ngtcp2_crypto_write_retry(uint8_t *dest, size_t destlen, ngtcp2_crypto_aead_retry(&aead); - if (version == NGTCP2_PROTO_VER_V1) { + switch (version) { + case NGTCP2_PROTO_VER_V1: key = (const uint8_t *)NGTCP2_RETRY_KEY_V1; noncelen = sizeof(NGTCP2_RETRY_NONCE_V1) - 1; - } else { + break; + case NGTCP2_PROTO_VER_V2_DRAFT: + key = (const uint8_t *)NGTCP2_RETRY_KEY_V2_DRAFT; + noncelen = sizeof(NGTCP2_RETRY_NONCE_V2_DRAFT) - 1; + break; + default: key = (const uint8_t *)NGTCP2_RETRY_KEY_DRAFT; noncelen = sizeof(NGTCP2_RETRY_NONCE_DRAFT) - 1; } @@ -757,22 +1316,14 @@ ngtcp2_ssize ngtcp2_crypto_write_retry(uint8_t *dest, size_t destlen, return spktlen; } -/* - * crypto_setup_initial_crypto establishes the initial secrets and - * encryption keys, and prepares local QUIC transport parameters. - */ -static int crypto_setup_initial_crypto(ngtcp2_conn *conn, - const ngtcp2_cid *dcid) { - return ngtcp2_crypto_derive_and_install_initial_key( - conn, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, dcid); -} - int ngtcp2_crypto_client_initial_cb(ngtcp2_conn *conn, void *user_data) { const ngtcp2_cid *dcid = ngtcp2_conn_get_dcid(conn); void *tls = ngtcp2_conn_get_tls_native_handle(conn); (void)user_data; - if (crypto_setup_initial_crypto(conn, dcid) != 0) { + if (ngtcp2_crypto_derive_and_install_initial_key( + conn, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + ngtcp2_conn_get_client_chosen_version(conn), dcid) != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; } @@ -792,9 +1343,9 @@ int ngtcp2_crypto_recv_retry_cb(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, void *user_data) { (void)user_data; - if (ngtcp2_crypto_derive_and_install_initial_key(conn, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, - &hd->scid) != 0) { + if (ngtcp2_crypto_derive_and_install_initial_key( + conn, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + ngtcp2_conn_get_client_chosen_version(conn), &hd->scid) != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; } @@ -806,7 +1357,23 @@ int ngtcp2_crypto_recv_client_initial_cb(ngtcp2_conn *conn, void *user_data) { (void)user_data; - if (crypto_setup_initial_crypto(conn, dcid) != 0) { + if (ngtcp2_crypto_derive_and_install_initial_key( + conn, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + ngtcp2_conn_get_client_chosen_version(conn), dcid) != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +int ngtcp2_crypto_version_negotiation_cb(ngtcp2_conn *conn, uint32_t version, + const ngtcp2_cid *client_dcid, + void *user_data) { + (void)user_data; + + if (ngtcp2_crypto_derive_and_install_vneg_initial_key( + conn, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, version, + client_dcid) != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; } @@ -829,3 +1396,23 @@ void ngtcp2_crypto_delete_crypto_cipher_ctx_cb( ngtcp2_crypto_cipher_ctx_free(cipher_ctx); } + +int ngtcp2_crypto_recv_crypto_data_cb(ngtcp2_conn *conn, + ngtcp2_crypto_level crypto_level, + uint64_t offset, const uint8_t *data, + size_t datalen, void *user_data) { + int rv; + (void)offset; + (void)user_data; + + if (ngtcp2_crypto_read_write_crypto_data(conn, crypto_level, data, datalen) != + 0) { + rv = ngtcp2_conn_get_tls_error(conn); + if (rv) { + return rv; + } + return NGTCP2_ERR_CRYPTO; + } + + return 0; +} diff --git a/deps/ngtcp2/ngtcp2/crypto/shared.h b/deps/ngtcp2/ngtcp2/crypto/shared.h index b7fe2f15da9..02b948901ae 100644 --- a/deps/ngtcp2/ngtcp2/crypto/shared.h +++ b/deps/ngtcp2/ngtcp2/crypto/shared.h @@ -51,6 +51,16 @@ "\x38\x76\x2c\xf7\xf5\x59\x34\xb3\x4d\x17\x9a\xe6\xa4\xc8\x0c\xad\xcc\xbb" \ "\x7f\x0a" +/** + * @macro + * + * :macro:`NGTCP2_INITIAL_SALT_V2_DRAFT` is a salt value which is used to + * derive initial secret. It is used for QUIC v2 draft. + */ +#define NGTCP2_INITIAL_SALT_V2_DRAFT \ + "\xa7\x07\xc2\x03\xa5\x9b\x47\x18\x4a\x1d\x62\xca\x57\x04\x06\xea\x7a\xe3" \ + "\xe5\xd3" + /* Maximum key usage (encryption) limits */ #define NGTCP2_CRYPTO_MAX_ENCRYPTION_AES_GCM (1ULL << 23) #define NGTCP2_CRYPTO_MAX_ENCRYPTION_CHACHA20_POLY1305 (1ULL << 62) @@ -62,6 +72,40 @@ #define NGTCP2_CRYPTO_MAX_DECRYPTION_FAILURE_CHACHA20_POLY1305 (1ULL << 36) #define NGTCP2_CRYPTO_MAX_DECRYPTION_FAILURE_AES_CCM (2965820ULL) +/** + * @function + * + * `ngtcp2_crypto_ctx_initial` initializes |ctx| for Initial packet + * encryption and decryption. + */ +ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_initial(ngtcp2_crypto_ctx *ctx); + +/** + * @function + * + * `ngtcp2_crypto_aead_init` initializes |aead| with the provided + * |aead_native_handle| which is an underlying AEAD object. + * + * If libngtcp2_crypto_openssl is linked, |aead_native_handle| must be + * a pointer to EVP_CIPHER. + * + * If libngtcp2_crypto_gnutls is linked, |aead_native_handle| must be + * gnutls_cipher_algorithm_t casted to ``void *``. + * + * If libngtcp2_crypto_boringssl is linked, |aead_native_handle| must + * be a pointer to EVP_AEAD. + */ +ngtcp2_crypto_aead *ngtcp2_crypto_aead_init(ngtcp2_crypto_aead *aead, + void *aead_native_handle); + +/** + * @function + * + * `ngtcp2_crypto_aead_retry` initializes |aead| with the AEAD cipher + * AEAD_AES_128_GCM for Retry packet integrity protection. + */ +ngtcp2_crypto_aead *ngtcp2_crypto_aead_retry(ngtcp2_crypto_aead *aead); + /** * @function * @@ -84,6 +128,34 @@ int ngtcp2_crypto_derive_initial_secrets(uint32_t version, uint8_t *rx_secret, const ngtcp2_cid *client_dcid, ngtcp2_crypto_side side); +/** + * @function + * + * `ngtcp2_crypto_derive_packet_protection_key` derives packet + * protection key. This function writes packet protection key into + * the buffer pointed by |key|. The length of derived key is + * `ngtcp2_crypto_aead_keylen(aead) ` + * bytes. |key| must have enough capacity to store the key. This + * function writes packet protection IV into |iv|. The length of + * derived IV is `ngtcp2_crypto_packet_protection_ivlen(aead) + * ` bytes. |iv| must have + * enough capacity to store the IV. + * + * If |hp| is not NULL, this function also derives packet header + * protection key and writes the key into the buffer pointed by |hp|. + * The length of derived key is `ngtcp2_crypto_aead_keylen(aead) + * ` bytes. |hp|, if not NULL, must have + * enough capacity to store the key. + * + * This function returns 0 if it succeeds, or -1. + */ +int ngtcp2_crypto_derive_packet_protection_key(uint8_t *key, uint8_t *iv, + uint8_t *hp, uint32_t version, + const ngtcp2_crypto_aead *aead, + const ngtcp2_crypto_md *md, + const uint8_t *secret, + size_t secretlen); + /** * @function * @@ -183,7 +255,58 @@ int ngtcp2_crypto_set_remote_transport_params(ngtcp2_conn *conn, void *tls); int ngtcp2_crypto_derive_and_install_initial_key( ngtcp2_conn *conn, uint8_t *rx_secret, uint8_t *tx_secret, uint8_t *initial_secret, uint8_t *rx_key, uint8_t *rx_iv, uint8_t *rx_hp, - uint8_t *tx_key, uint8_t *tx_iv, uint8_t *tx_hp, + uint8_t *tx_key, uint8_t *tx_iv, uint8_t *tx_hp, uint32_t version, + const ngtcp2_cid *client_dcid); + +/** + * @function + * + * `ngtcp2_crypto_derive_and_install_vneg_initial_key` derives initial + * keying materials and installs keys to |conn|. This function is + * dedicated to install keys for |version| which is negotiated, or + * being negotiated. + * + * If |rx_secret| is not NULL, the secret for decryption is written to + * the buffer pointed by |rx_secret|. The length of secret is 32 + * bytes, and |rx_secret| must point to the buffer which has enough + * capacity. + * + * If |tx_secret| is not NULL, the secret for encryption is written to + * the buffer pointed by |tx_secret|. The length of secret is 32 + * bytes, and |tx_secret| must point to the buffer which has enough + * capacity. + * + * If |initial_secret| is not NULL, the initial secret is written to + * the buffer pointed by |initial_secret|. The length of secret is 32 + * bytes, and |initial_secret| must point to the buffer which has + * enough capacity. + * + * |client_dcid| is the destination connection ID in first Initial + * packet of client. + * + * If |rx_key| is not NULL, the derived packet protection key for + * decryption is written to the buffer pointed by |rx_key|. If + * |rx_iv| is not NULL, the derived packet protection IV for + * decryption is written to the buffer pointed by |rx_iv|. If |rx_hp| + * is not NULL, the derived header protection key for decryption is + * written to the buffer pointed by |rx_hp|. + * + * If |tx_key| is not NULL, the derived packet protection key for + * encryption is written to the buffer pointed by |tx_key|. If + * |tx_iv| is not NULL, the derived packet protection IV for + * encryption is written to the buffer pointed by |tx_iv|. If |tx_hp| + * is not NULL, the derived header protection key for encryption is + * written to the buffer pointed by |tx_hp|. + * + * The length of packet protection key and header protection key is 16 + * bytes long. The length of packet protection IV is 12 bytes long. + * + * This function returns 0 if it succeeds, or -1. + */ +int ngtcp2_crypto_derive_and_install_vneg_initial_key( + ngtcp2_conn *conn, uint8_t *rx_secret, uint8_t *tx_secret, + uint8_t *initial_secret, uint8_t *rx_key, uint8_t *rx_iv, uint8_t *rx_hp, + uint8_t *tx_key, uint8_t *tx_iv, uint8_t *tx_hp, uint32_t version, const ngtcp2_cid *client_dcid); /** @@ -208,4 +331,20 @@ int ngtcp2_crypto_cipher_ctx_encrypt_init(ngtcp2_crypto_cipher_ctx *cipher_ctx, */ void ngtcp2_crypto_cipher_ctx_free(ngtcp2_crypto_cipher_ctx *cipher_ctx); +/* + * `ngtcp2_crypto_md_sha256` initializes |md| with SHA256 message + * digest algorithm and returns |md|. + */ +ngtcp2_crypto_md *ngtcp2_crypto_md_sha256(ngtcp2_crypto_md *md); + +ngtcp2_crypto_aead *ngtcp2_crypto_aead_aes_128_gcm(ngtcp2_crypto_aead *aead); + +/* + * `ngtcp2_crypto_random` writes cryptographically-secure random + * |datalen| bytes into the buffer pointed by |data|. + * + * This function returns 0 if it succeeds, or -1. + */ +int ngtcp2_crypto_random(uint8_t *data, size_t datalen); + #endif /* NGTCP2_SHARED_H */ diff --git a/deps/ngtcp2/ngtcp2/crypto/wolfssl/wolfssl.c b/deps/ngtcp2/ngtcp2/crypto/wolfssl/wolfssl.c new file mode 100644 index 00000000000..9a58b9be2b7 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/crypto/wolfssl/wolfssl.c @@ -0,0 +1,524 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +#include +#include + +#include +#include + +#include "shared.h" + +#define PRINTF_DEBUG 0 +#if PRINTF_DEBUG +# define DEBUG_MSG(...) fprintf(stderr, __VA_ARGS__) +#else +# define DEBUG_MSG(...) (void)0 +#endif + +ngtcp2_crypto_aead *ngtcp2_crypto_aead_aes_128_gcm(ngtcp2_crypto_aead *aead) { + return ngtcp2_crypto_aead_init(aead, (void *)wolfSSL_EVP_aes_128_gcm()); +} + +ngtcp2_crypto_md *ngtcp2_crypto_md_sha256(ngtcp2_crypto_md *md) { + md->native_handle = (void *)wolfSSL_EVP_sha256(); + return md; +} + +ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_initial(ngtcp2_crypto_ctx *ctx) { + ngtcp2_crypto_aead_init(&ctx->aead, (void *)wolfSSL_EVP_aes_128_gcm()); + ctx->md.native_handle = (void *)wolfSSL_EVP_sha256(); + ctx->hp.native_handle = (void *)wolfSSL_EVP_aes_128_ctr(); + ctx->max_encryption = 0; + ctx->max_decryption_failure = 0; + return ctx; +} + +ngtcp2_crypto_aead *ngtcp2_crypto_aead_init(ngtcp2_crypto_aead *aead, + void *aead_native_handle) { + aead->native_handle = aead_native_handle; + aead->max_overhead = wolfSSL_quic_get_aead_tag_len( + (const WOLFSSL_EVP_CIPHER *)(aead_native_handle)); + return aead; +} + +ngtcp2_crypto_aead *ngtcp2_crypto_aead_retry(ngtcp2_crypto_aead *aead) { + return ngtcp2_crypto_aead_init(aead, (void *)wolfSSL_EVP_aes_128_gcm()); +} + +static uint64_t crypto_wolfssl_get_aead_max_encryption(WOLFSSL *ssl) { + const WOLFSSL_EVP_CIPHER *aead = wolfSSL_quic_get_aead(ssl); + + if (wolfSSL_quic_aead_is_gcm(aead)) { + return NGTCP2_CRYPTO_MAX_ENCRYPTION_AES_GCM; + } + if (wolfSSL_quic_aead_is_chacha20(aead)) { + return NGTCP2_CRYPTO_MAX_ENCRYPTION_CHACHA20_POLY1305; + } + if (wolfSSL_quic_aead_is_ccm(aead)) { + return NGTCP2_CRYPTO_MAX_ENCRYPTION_AES_CCM; + } + return 0; +} + +static uint64_t crypto_wolfssl_get_aead_max_decryption_failure(WOLFSSL *ssl) { + const WOLFSSL_EVP_CIPHER *aead = wolfSSL_quic_get_aead(ssl); + + if (wolfSSL_quic_aead_is_gcm(aead)) { + return NGTCP2_CRYPTO_MAX_DECRYPTION_FAILURE_AES_GCM; + } + if (wolfSSL_quic_aead_is_chacha20(aead)) { + return NGTCP2_CRYPTO_MAX_DECRYPTION_FAILURE_CHACHA20_POLY1305; + } + if (wolfSSL_quic_aead_is_ccm(aead)) { + return NGTCP2_CRYPTO_MAX_DECRYPTION_FAILURE_AES_CCM; + } + return 0; +} + +ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_tls(ngtcp2_crypto_ctx *ctx, + void *tls_native_handle) { + WOLFSSL *ssl = tls_native_handle; + + ngtcp2_crypto_aead_init(&ctx->aead, (void *)wolfSSL_quic_get_aead(ssl)); + ctx->md.native_handle = (void *)wolfSSL_quic_get_md(ssl); + ctx->hp.native_handle = (void *)wolfSSL_quic_get_hp(ssl); + ctx->max_encryption = crypto_wolfssl_get_aead_max_encryption(ssl); + ctx->max_decryption_failure = + crypto_wolfssl_get_aead_max_decryption_failure(ssl); + return ctx; +} + +ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_tls_early(ngtcp2_crypto_ctx *ctx, + void *tls_native_handle) { + return ngtcp2_crypto_ctx_tls(ctx, tls_native_handle); +} + +static size_t crypto_md_hashlen(const WOLFSSL_EVP_MD *md) { + return (size_t)wolfSSL_EVP_MD_size(md); +} + +size_t ngtcp2_crypto_md_hashlen(const ngtcp2_crypto_md *md) { + return crypto_md_hashlen(md->native_handle); +} + +static size_t crypto_aead_keylen(const WOLFSSL_EVP_CIPHER *aead) { + return (size_t)wolfSSL_EVP_Cipher_key_length(aead); +} + +size_t ngtcp2_crypto_aead_keylen(const ngtcp2_crypto_aead *aead) { + return crypto_aead_keylen(aead->native_handle); +} + +static size_t crypto_aead_noncelen(const WOLFSSL_EVP_CIPHER *aead) { + return (size_t)wolfSSL_EVP_CIPHER_iv_length(aead); +} + +size_t ngtcp2_crypto_aead_noncelen(const ngtcp2_crypto_aead *aead) { + return crypto_aead_noncelen(aead->native_handle); +} + +int ngtcp2_crypto_aead_ctx_encrypt_init(ngtcp2_crypto_aead_ctx *aead_ctx, + const ngtcp2_crypto_aead *aead, + const uint8_t *key, size_t noncelen) { + const WOLFSSL_EVP_CIPHER *cipher = aead->native_handle; + WOLFSSL_EVP_CIPHER_CTX *actx; + static const uint8_t iv[AES_BLOCK_SIZE] = {0}; + + (void)noncelen; + actx = wolfSSL_quic_crypt_new(cipher, key, iv, /* encrypt */ 1); + if (actx == NULL) { + return -1; + } + + aead_ctx->native_handle = actx; + return 0; +} + +int ngtcp2_crypto_aead_ctx_decrypt_init(ngtcp2_crypto_aead_ctx *aead_ctx, + const ngtcp2_crypto_aead *aead, + const uint8_t *key, size_t noncelen) { + const WOLFSSL_EVP_CIPHER *cipher = aead->native_handle; + WOLFSSL_EVP_CIPHER_CTX *actx; + static const uint8_t iv[AES_BLOCK_SIZE] = {0}; + + (void)noncelen; + actx = wolfSSL_quic_crypt_new(cipher, key, iv, /* encrypt */ 0); + if (actx == NULL) { + return -1; + } + + aead_ctx->native_handle = actx; + return 0; +} + +void ngtcp2_crypto_aead_ctx_free(ngtcp2_crypto_aead_ctx *aead_ctx) { + if (aead_ctx->native_handle) { + wolfSSL_EVP_CIPHER_CTX_free(aead_ctx->native_handle); + } +} + +int ngtcp2_crypto_cipher_ctx_encrypt_init(ngtcp2_crypto_cipher_ctx *cipher_ctx, + const ngtcp2_crypto_cipher *cipher, + const uint8_t *key) { + WOLFSSL_EVP_CIPHER_CTX *actx; + + actx = + wolfSSL_quic_crypt_new(cipher->native_handle, key, NULL, /* encrypt */ 1); + if (actx == NULL) { + return -1; + } + + cipher_ctx->native_handle = actx; + return 0; +} + +void ngtcp2_crypto_cipher_ctx_free(ngtcp2_crypto_cipher_ctx *cipher_ctx) { + if (cipher_ctx->native_handle) { + wolfSSL_EVP_CIPHER_CTX_free(cipher_ctx->native_handle); + } +} + +int ngtcp2_crypto_hkdf_extract(uint8_t *dest, const ngtcp2_crypto_md *md, + const uint8_t *secret, size_t secretlen, + const uint8_t *salt, size_t saltlen) { + if (wolfSSL_quic_hkdf_extract(dest, md->native_handle, secret, secretlen, + salt, saltlen) != WOLFSSL_SUCCESS) { + return -1; + } + return 0; +} + +int ngtcp2_crypto_hkdf_expand(uint8_t *dest, size_t destlen, + const ngtcp2_crypto_md *md, const uint8_t *secret, + size_t secretlen, const uint8_t *info, + size_t infolen) { + if (wolfSSL_quic_hkdf_expand(dest, destlen, md->native_handle, secret, + secretlen, info, infolen) != WOLFSSL_SUCCESS) { + return -1; + } + return 0; +} + +int ngtcp2_crypto_hkdf(uint8_t *dest, size_t destlen, + const ngtcp2_crypto_md *md, const uint8_t *secret, + size_t secretlen, const uint8_t *salt, size_t saltlen, + const uint8_t *info, size_t infolen) { + if (wolfSSL_quic_hkdf(dest, destlen, md->native_handle, secret, secretlen, + salt, saltlen, info, infolen) != WOLFSSL_SUCCESS) { + return -1; + } + return 0; +} + +int ngtcp2_crypto_encrypt(uint8_t *dest, const ngtcp2_crypto_aead *aead, + const ngtcp2_crypto_aead_ctx *aead_ctx, + const uint8_t *plaintext, size_t plaintextlen, + const uint8_t *nonce, size_t noncelen, + const uint8_t *aad, size_t aadlen) { + (void)aead; + (void)noncelen; + if (wolfSSL_quic_aead_encrypt(dest, aead_ctx->native_handle, plaintext, + plaintextlen, nonce, aad, + aadlen) != WOLFSSL_SUCCESS) { + DEBUG_MSG("WOLFSSL: encrypt FAILED\n"); + return -1; + } + return 0; +} + +int ngtcp2_crypto_decrypt(uint8_t *dest, const ngtcp2_crypto_aead *aead, + const ngtcp2_crypto_aead_ctx *aead_ctx, + const uint8_t *ciphertext, size_t ciphertextlen, + const uint8_t *nonce, size_t noncelen, + const uint8_t *aad, size_t aadlen) { + (void)aead; + (void)noncelen; + if (wolfSSL_quic_aead_decrypt(dest, aead_ctx->native_handle, ciphertext, + ciphertextlen, nonce, aad, + aadlen) != WOLFSSL_SUCCESS) { + + DEBUG_MSG("WOLFSSL: decrypt FAILED\n"); + return -1; + } + return 0; +} + +int ngtcp2_crypto_hp_mask(uint8_t *dest, const ngtcp2_crypto_cipher *hp, + const ngtcp2_crypto_cipher_ctx *hp_ctx, + const uint8_t *sample) { + static const uint8_t PLAINTEXT[] = "\x00\x00\x00\x00\x00"; + WOLFSSL_EVP_CIPHER_CTX *actx = hp_ctx->native_handle; + int len; + + (void)hp; + + if (wolfSSL_EVP_EncryptInit_ex(actx, NULL, NULL, NULL, sample) != + WOLFSSL_SUCCESS || + wolfSSL_EVP_CipherUpdate(actx, dest, &len, PLAINTEXT, + sizeof(PLAINTEXT) - 1) != WOLFSSL_SUCCESS || + wolfSSL_EVP_EncryptFinal_ex(actx, dest + sizeof(PLAINTEXT) - 1, &len) != + WOLFSSL_SUCCESS) { + return -1; + } + + return 0; +} + +int ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, + ngtcp2_crypto_level crypto_level, + const uint8_t *data, size_t datalen) { + WOLFSSL *ssl = ngtcp2_conn_get_tls_native_handle(conn); + WOLFSSL_ENCRYPTION_LEVEL level = + ngtcp2_crypto_wolfssl_from_ngtcp2_crypto_level(crypto_level); + int rv; + int err; + + DEBUG_MSG("WOLFSSL: read/write crypto data, level=%d len=%lu\n", level, + datalen); + if (datalen > 0) { + rv = wolfSSL_provide_quic_data(ssl, level, data, datalen); + if (rv != WOLFSSL_SUCCESS) { + DEBUG_MSG("WOLFSSL: read/write crypto data FAILED, rv=%d\n", rv); + return -1; + } + } + + if (!ngtcp2_conn_get_handshake_completed(conn)) { + rv = wolfSSL_quic_do_handshake(ssl); + DEBUG_MSG("WOLFSSL: do_handshake, rv=%d\n", rv); + if (rv <= 0) { + err = wolfSSL_get_error(ssl, rv); + switch (err) { + case SSL_ERROR_WANT_READ: + case SSL_ERROR_WANT_WRITE: + return 0; + case SSL_ERROR_SSL: + return -1; + default: + return -1; + } + } + + DEBUG_MSG("WOLFSSL: handshake done\n"); + ngtcp2_conn_handshake_completed(conn); + } + + rv = wolfSSL_process_quic_post_handshake(ssl); + DEBUG_MSG("WOLFSSL: process post handshake, rv=%d\n", rv); + if (rv != 1) { + err = wolfSSL_get_error(ssl, rv); + switch (err) { + case SSL_ERROR_WANT_READ: + case SSL_ERROR_WANT_WRITE: + return 0; + case SSL_ERROR_SSL: + case SSL_ERROR_ZERO_RETURN: + return -1; + default: + return -1; + } + } + + return 0; +} + +int ngtcp2_crypto_set_remote_transport_params(ngtcp2_conn *conn, void *tls) { + WOLFSSL *ssl = tls; + const uint8_t *tp; + size_t tplen; + int rv; + + wolfSSL_get_peer_quic_transport_params(ssl, &tp, &tplen); + DEBUG_MSG("WOLFSSL: get peer transport params, len=%lu\n", tplen); + + rv = ngtcp2_conn_decode_remote_transport_params(conn, tp, tplen); + if (rv != 0) { + DEBUG_MSG("WOLFSSL: decode peer transport params failed, rv=%d\n", rv); + ngtcp2_conn_set_tls_error(conn, rv); + return -1; + } + + return 0; +} + +int ngtcp2_crypto_set_local_transport_params(void *tls, const uint8_t *buf, + size_t len) { + WOLFSSL *ssl = tls; + DEBUG_MSG("WOLFSSL: set local peer transport params, len=%lu\n", len); + if (wolfSSL_set_quic_transport_params(ssl, buf, len) != WOLFSSL_SUCCESS) { + return -1; + } + + return 0; +} + +ngtcp2_crypto_level ngtcp2_crypto_wolfssl_from_wolfssl_encryption_level( + WOLFSSL_ENCRYPTION_LEVEL wolfssl_level) { + switch (wolfssl_level) { + case wolfssl_encryption_initial: + return NGTCP2_CRYPTO_LEVEL_INITIAL; + case wolfssl_encryption_early_data: + return NGTCP2_CRYPTO_LEVEL_EARLY; + case wolfssl_encryption_handshake: + return NGTCP2_CRYPTO_LEVEL_HANDSHAKE; + case wolfssl_encryption_application: + return NGTCP2_CRYPTO_LEVEL_APPLICATION; + default: + assert(0); + abort(); /* if NDEBUG is set */ + } +} + +WOLFSSL_ENCRYPTION_LEVEL +ngtcp2_crypto_wolfssl_from_ngtcp2_crypto_level( + ngtcp2_crypto_level crypto_level) { + switch (crypto_level) { + case NGTCP2_CRYPTO_LEVEL_INITIAL: + return wolfssl_encryption_initial; + case NGTCP2_CRYPTO_LEVEL_HANDSHAKE: + return wolfssl_encryption_handshake; + case NGTCP2_CRYPTO_LEVEL_APPLICATION: + return wolfssl_encryption_application; + case NGTCP2_CRYPTO_LEVEL_EARLY: + return wolfssl_encryption_early_data; + default: + assert(0); + abort(); /* if NDEBUG is set */ + } +} + +int ngtcp2_crypto_get_path_challenge_data_cb(ngtcp2_conn *conn, uint8_t *data, + void *user_data) { + (void)conn; + (void)user_data; + + DEBUG_MSG("WOLFSSL: get path challenge data\n"); + if (wolfSSL_RAND_bytes(data, NGTCP2_PATH_CHALLENGE_DATALEN) != 1) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + return 0; +} + +int ngtcp2_crypto_random(uint8_t *data, size_t datalen) { + DEBUG_MSG("WOLFSSL: get random\n"); + if (wolfSSL_RAND_bytes(data, (int)datalen) != 1) { + return -1; + } + return 0; +} + +static int set_encryption_secrets(WOLFSSL *ssl, + WOLFSSL_ENCRYPTION_LEVEL wolfssl_level, + const uint8_t *rx_secret, + const uint8_t *tx_secret, size_t secretlen) { + ngtcp2_crypto_conn_ref *conn_ref = SSL_get_app_data(ssl); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + ngtcp2_crypto_level level = + ngtcp2_crypto_wolfssl_from_wolfssl_encryption_level(wolfssl_level); + + DEBUG_MSG("WOLFSSL: set encryption secrets, level=%d, rxlen=%lu, txlen=%lu\n", + wolfssl_level, rx_secret ? secretlen : 0, + tx_secret ? secretlen : 0); + if (rx_secret && + ngtcp2_crypto_derive_and_install_rx_key(conn, NULL, NULL, NULL, level, + rx_secret, secretlen) != 0) { + return 0; + } + + if (tx_secret && + ngtcp2_crypto_derive_and_install_tx_key(conn, NULL, NULL, NULL, level, + tx_secret, secretlen) != 0) { + return 0; + } + + return 1; +} + +static int add_handshake_data(WOLFSSL *ssl, + WOLFSSL_ENCRYPTION_LEVEL wolfssl_level, + const uint8_t *data, size_t datalen) { + ngtcp2_crypto_conn_ref *conn_ref = SSL_get_app_data(ssl); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + ngtcp2_crypto_level level = + ngtcp2_crypto_wolfssl_from_wolfssl_encryption_level(wolfssl_level); + int rv; + + DEBUG_MSG("WOLFSSL: add handshake data, level=%d len=%lu\n", wolfssl_level, + datalen); + rv = ngtcp2_conn_submit_crypto_data(conn, level, data, datalen); + if (rv != 0) { + ngtcp2_conn_set_tls_error(conn, rv); + return 0; + } + + return 1; +} + +static int flush_flight(WOLFSSL *ssl) { + (void)ssl; + return 1; +} + +static int send_alert(WOLFSSL *ssl, enum wolfssl_encryption_level_t level, + uint8_t alert) { + ngtcp2_crypto_conn_ref *conn_ref = SSL_get_app_data(ssl); + ngtcp2_conn *conn = conn_ref->get_conn(conn_ref); + (void)level; + + DEBUG_MSG("WOLFSSL: send alert, level=%d alert=%d\n", level, alert); + ngtcp2_conn_set_tls_alert(conn, alert); + + return 1; +} + +static WOLFSSL_QUIC_METHOD quic_method = { + set_encryption_secrets, + add_handshake_data, + flush_flight, + send_alert, +}; + +static void crypto_wolfssl_configure_context(WOLFSSL_CTX *ssl_ctx) { + wolfSSL_CTX_set_min_proto_version(ssl_ctx, TLS1_3_VERSION); + wolfSSL_CTX_set_max_proto_version(ssl_ctx, TLS1_3_VERSION); + wolfSSL_CTX_set_quic_method(ssl_ctx, &quic_method); +} + +int ngtcp2_crypto_wolfssl_configure_server_context(WOLFSSL_CTX *ssl_ctx) { + crypto_wolfssl_configure_context(ssl_ctx); + return 0; +} + +int ngtcp2_crypto_wolfssl_configure_client_context(WOLFSSL_CTX *ssl_ctx) { + crypto_wolfssl_configure_context(ssl_ctx); + wolfSSL_CTX_UseSessionTicket(ssl_ctx); + return 0; +} diff --git a/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/ngtcp2.h b/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/ngtcp2.h index 8a37bebda6b..ed71cb3ea0c 100644 --- a/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/ngtcp2.h +++ b/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/ngtcp2.h @@ -32,8 +32,9 @@ # define WIN32 #endif -#ifdef __cplusplus -extern "C" { +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable : 4324) #endif #include @@ -49,10 +50,29 @@ extern "C" { #include #include -#ifdef WIN32 -# include +#ifndef NGTCP2_USE_GENERIC_SOCKADDR +# ifdef WIN32 +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# else +# include +# include +# endif +#endif + +#ifdef AF_INET +# define NGTCP2_AF_INET AF_INET #else -# include +# define NGTCP2_AF_INET 2 +#endif + +#ifdef AF_INET6 +# define NGTCP2_AF_INET6 AF_INET6 +#else +# define NGTCP2_AF_INET6 23 +# define NGTCP2_USE_GENERIC_IPV6_SOCKADDR #endif #include @@ -73,6 +93,16 @@ extern "C" { # endif /* !BUILDING_NGTCP2 */ #endif /* !defined(WIN32) */ +#ifdef _MSC_VER +# define NGTCP2_ALIGN(N) __declspec(align(N)) +#else /* !_MSC_VER */ +# define NGTCP2_ALIGN(N) __attribute__((aligned(N))) +#endif /* !_MSC_VER */ + +#ifdef __cplusplus +extern "C" { +#endif + /** * @typedef * @@ -83,58 +113,69 @@ typedef ptrdiff_t ngtcp2_ssize; /** * @functypedef * - * Custom memory allocator to replace malloc(). The |mem_user_data| - * is the mem_user_data member of :type:`ngtcp2_mem` structure. + * :type:`ngtcp2_malloc` is a custom memory allocator to replace + * :manpage:`malloc(3)`. The |user_data| is + * :member:`ngtcp2_mem.user_data`. */ -typedef void *(*ngtcp2_malloc)(size_t size, void *mem_user_data); +typedef void *(*ngtcp2_malloc)(size_t size, void *user_data); /** * @functypedef * - * Custom memory allocator to replace free(). The |mem_user_data| is - * the mem_user_data member of :type:`ngtcp2_mem` structure. + * :type:`ngtcp2_free` is a custom memory allocator to replace + * :manpage:`free(3)`. The |user_data| is + * :member:`ngtcp2_mem.user_data`. */ -typedef void (*ngtcp2_free)(void *ptr, void *mem_user_data); +typedef void (*ngtcp2_free)(void *ptr, void *user_data); /** * @functypedef * - * Custom memory allocator to replace calloc(). The |mem_user_data| - * is the mem_user_data member of :type:`ngtcp2_mem` structure. + * :type:`ngtcp2_calloc` is a custom memory allocator to replace + * :manpage:`calloc(3)`. The |user_data| is the + * :member:`ngtcp2_mem.user_data`. */ -typedef void *(*ngtcp2_calloc)(size_t nmemb, size_t size, void *mem_user_data); +typedef void *(*ngtcp2_calloc)(size_t nmemb, size_t size, void *user_data); /** * @functypedef * - * Custom memory allocator to replace realloc(). The |mem_user_data| - * is the mem_user_data member of :type:`ngtcp2_mem` structure. + * :type:`ngtcp2_realloc` is a custom memory allocator to replace + * :manpage:`realloc(3)`. The |user_data| is the + * :member:`ngtcp2_mem.user_data`. */ -typedef void *(*ngtcp2_realloc)(void *ptr, size_t size, void *mem_user_data); +typedef void *(*ngtcp2_realloc)(void *ptr, size_t size, void *user_data); /** * @struct * - * Custom memory allocator functions and user defined pointer. The - * |mem_user_data| member is passed to each allocator function. This - * can be used, for example, to achieve per-session memory pool. + * :type:`ngtcp2_mem` is a custom memory allocator. The + * :member:`user_data` field is passed to each allocator function. + * This can be used, for example, to achieve per-connection memory + * pool. * * In the following example code, ``my_malloc``, ``my_free``, * ``my_calloc`` and ``my_realloc`` are the replacement of the - * standard allocators ``malloc``, ``free``, ``calloc`` and - * ``realloc`` respectively:: + * standard allocators :manpage:`malloc(3)`, :manpage:`free(3)`, + * :manpage:`calloc(3)` and :manpage:`realloc(3)` respectively:: * - * void *my_malloc_cb(size_t size, void *mem_user_data) { + * void *my_malloc_cb(size_t size, void *user_data) { + * (void)user_data; * return my_malloc(size); * } * - * void my_free_cb(void *ptr, void *mem_user_data) { my_free(ptr); } + * void my_free_cb(void *ptr, void *user_data) { + * (void)user_data; + * my_free(ptr); + * } * - * void *my_calloc_cb(size_t nmemb, size_t size, void *mem_user_data) { + * void *my_calloc_cb(size_t nmemb, size_t size, void *user_data) { + * (void)user_data; * return my_calloc(nmemb, size); * } * - * void *my_realloc_cb(void *ptr, size_t size, void *mem_user_data) { + * void *my_realloc_cb(void *ptr, size_t size, void *user_data) { + * (void)user_data; * return my_realloc(ptr, size); * } * @@ -147,24 +188,28 @@ typedef void *(*ngtcp2_realloc)(void *ptr, size_t size, void *mem_user_data); */ typedef struct ngtcp2_mem { /** - * An arbitrary user supplied data. This is passed to each - * allocator function. + * :member:`user_data` is an arbitrary user supplied data. This + * is passed to each allocator function. */ - void *mem_user_data; + void *user_data; /** - * Custom allocator function to replace malloc(). + * :member:`malloc` is a custom allocator function to replace + * :manpage:`malloc(3)`. */ ngtcp2_malloc malloc; /** - * Custom allocator function to replace free(). + * :member:`free` is a custom allocator function to replace + * :manpage:`free(3)`. */ ngtcp2_free free; /** - * Custom allocator function to replace calloc(). + * :member:`calloc` is a custom allocator function to replace + * :manpage:`calloc(3)`. */ ngtcp2_calloc calloc; /** - * Custom allocator function to replace realloc(). + * :member:`realloc` is a custom allocator function to replace + * :manpage:`realloc(3)`. */ ngtcp2_realloc realloc; } ngtcp2_mem; @@ -180,7 +225,7 @@ typedef struct ngtcp2_mem { * * :macro:`NGTCP2_SECONDS` is a count of tick which corresponds to 1 second. */ -#define NGTCP2_SECONDS ((uint64_t)1000000000ULL) +#define NGTCP2_SECONDS ((ngtcp2_duration)1000000000ULL) /** * @macro @@ -188,7 +233,7 @@ typedef struct ngtcp2_mem { * :macro:`NGTCP2_MILLISECONDS` is a count of tick which corresponds * to 1 millisecond. */ -#define NGTCP2_MILLISECONDS ((uint64_t)1000000ULL) +#define NGTCP2_MILLISECONDS ((ngtcp2_duration)1000000ULL) /** * @macro @@ -196,7 +241,7 @@ typedef struct ngtcp2_mem { * :macro:`NGTCP2_MICROSECONDS` is a count of tick which corresponds * to 1 microsecond. */ -#define NGTCP2_MICROSECONDS ((uint64_t)1000ULL) +#define NGTCP2_MICROSECONDS ((ngtcp2_duration)1000ULL) /** * @macro @@ -204,7 +249,7 @@ typedef struct ngtcp2_mem { * :macro:`NGTCP2_NANOSECONDS` is a count of tick which corresponds to * 1 nanosecond. */ -#define NGTCP2_NANOSECONDS ((uint64_t)1ULL) +#define NGTCP2_NANOSECONDS ((ngtcp2_duration)1ULL) /** * @macrosection @@ -217,7 +262,17 @@ typedef struct ngtcp2_mem { * * :macro:`NGTCP2_PROTO_VER_V1` is the QUIC version 1. */ -#define NGTCP2_PROTO_VER_V1 0x00000001u +#define NGTCP2_PROTO_VER_V1 ((uint32_t)0x00000001u) + +/** + * @macro + * + * :macro:`NGTCP2_PROTO_VER_V2_DRAFT` is the provisional version + * number for QUIC version 2 draft. + * + * https://quicwg.org/quic-v2/draft-ietf-quic-v2.html + */ +#define NGTCP2_PROTO_VER_V2_DRAFT ((uint32_t)0x709a50c4u) /** * @macro @@ -251,43 +306,35 @@ typedef struct ngtcp2_mem { */ #define NGTCP2_PROTO_VER_MIN NGTCP2_PROTO_VER_DRAFT_MIN -/** - * @macrosection - * - * IP packet related macros - */ - /** * @macro * - * :macro:`NGTCP2_MAX_PKTLEN_IPV4` is the maximum datagram size of - * IPv4 packet without PMTUD. + * :macro:`NGTCP2_RESERVED_VERSION_MASK` is the bit mask of reserved + * version. */ -#define NGTCP2_MAX_PKTLEN_IPV4 1252 +#define NGTCP2_RESERVED_VERSION_MASK 0x0a0a0a0au + /** - * @macro + * @macrosection * - * :macro:`NGTCP2_MAX_PKTLEN_IPV6` is the maximum datagram size of - * IPv6 packet without PMTUD. + * UDP datagram related macros */ -#define NGTCP2_MAX_PKTLEN_IPV6 1232 /** * @macro * - * :macro:`NGTCP2_MIN_INITIAL_PKTLEN` is the minimum datagram size for - * a packet sent by client which contains its first Initial packet. + * :macro:`NGTCP2_MAX_UDP_PAYLOAD_SIZE` is the default maximum UDP + * datagram payload size that this endpoint transmits. */ -#define NGTCP2_MIN_INITIAL_PKTLEN 1200 +#define NGTCP2_MAX_UDP_PAYLOAD_SIZE 1200 /** * @macro * - * :macro:`NGTCP2_DEFAULT_MAX_PKTLEN` is the default maximum datagram - * size that this endpoint transmits. It is used by congestion - * controller to compute congestion window. + * :macro:`NGTCP2_MAX_PMTUD_UDP_PAYLOAD_SIZE` is the maximum UDP + * datagram payload size that Path MTU Discovery can discover. */ -#define NGTCP2_DEFAULT_MAX_PKTLEN 1200 +#define NGTCP2_MAX_PMTUD_UDP_PAYLOAD_SIZE 1452 /** * @macrosection @@ -315,10 +362,18 @@ typedef struct ngtcp2_mem { * @macro * * :macro:`NGTCP2_MIN_STATELESS_RESET_RANDLEN` is the minimum length - * of random bytes (Unpredictable Bits) in Stateless Retry packet + * of random bytes (Unpredictable Bits) in Stateless Reset packet */ #define NGTCP2_MIN_STATELESS_RESET_RANDLEN 5 +/** + * @macro + * + * :macro:`NGTCP2_PATH_CHALLENGE_DATALEN` is the length of + * PATH_CHALLENGE data. + */ +#define NGTCP2_PATH_CHALLENGE_DATALEN 8 + /** * @macro * @@ -354,6 +409,28 @@ typedef struct ngtcp2_mem { */ #define NGTCP2_RETRY_NONCE_V1 "\x46\x15\x99\xd3\x5d\x63\x2b\xf2\x23\x98\x25\xbb" +/** + * @macro + * + * :macro:`NGTCP2_RETRY_KEY_V2_DRAFT` is an encryption key to create + * integrity tag of Retry packet. It is used for QUIC v2 draft. + * + * https://quicwg.org/quic-v2/draft-ietf-quic-v2.html + */ +#define NGTCP2_RETRY_KEY_V2_DRAFT \ + "\xba\x85\x8d\xc7\xb4\x3d\xe5\xdb\xf8\x76\x17\xff\x4a\xb2\x53\xdb" + +/** + * @macro + * + * :macro:`NGTCP2_RETRY_NONCE_V2_DRAFT` is nonce used when generating + * integrity tag of Retry packet. It is used for QUIC v2 draft. + * + * https://quicwg.org/quic-v2/draft-ietf-quic-v2.html + */ +#define NGTCP2_RETRY_NONCE_V2_DRAFT \ + "\x14\x1b\x99\xc2\x39\xb0\x3e\x78\x5d\x6a\x2e\x9f" + /** * @macro * @@ -399,6 +476,14 @@ typedef struct ngtcp2_mem { */ #define NGTCP2_MIN_INITIAL_DCIDLEN 8 +/** + * @macro + * + * :macro:`NGTCP2_DEFAULT_HANDSHAKE_TIMEOUT` is the default handshake + * timeout. + */ +#define NGTCP2_DEFAULT_HANDSHAKE_TIMEOUT (10 * NGTCP2_SECONDS) + /** * @macrosection * @@ -440,15 +525,18 @@ typedef struct ngtcp2_mem { */ #define NGTCP2_ECN_MASK 0x3 +#define NGTCP2_PKT_INFO_VERSION_V1 1 +#define NGTCP2_PKT_INFO_VERSION NGTCP2_PKT_INFO_VERSION_V1 + /** * @struct * * :type:`ngtcp2_pkt_info` is a packet metadata. */ -typedef struct ngtcp2_pkt_info { +typedef struct NGTCP2_ALIGN(8) ngtcp2_pkt_info { /** - * :member:`ecn ` is ECN marking and when - * passing `ngtcp2_conn_read_pkt()`, and it should be either + * :member:`ecn` is ECN marking and when passing + * `ngtcp2_conn_read_pkt()`, and it should be either * :macro:`NGTCP2_ECN_NOT_ECT`, :macro:`NGTCP2_ECN_ECT_1`, * :macro:`NGTCP2_ECN_ECT_0`, or :macro:`NGTCP2_ECN_CE`. */ @@ -580,9 +668,9 @@ typedef struct ngtcp2_pkt_info { /** * @macro * - * :macro:`NGTCP2_ERR_TLS_DECRYPT` indicates TLS decryption failure. + * :macro:`NGTCP2_ERR_DECRYPT` indicates a decryption failure. */ -#define NGTCP2_ERR_TLS_DECRYPT -220 +#define NGTCP2_ERR_DECRYPT -220 /** * @macro * @@ -638,13 +726,6 @@ typedef struct ngtcp2_pkt_info { * :macro:`NGTCP2_ERR_DISCARD_PKT` indicates a packet was discarded. */ #define NGTCP2_ERR_DISCARD_PKT -235 -/** - * @macro - * - * :macro:`NGTCP2_ERR_PATH_VALIDATION_FAILED` indicates that a path - * validation failed. - */ -#define NGTCP2_ERR_PATH_VALIDATION_FAILED -236 /** * @macro * @@ -699,9 +780,38 @@ typedef struct ngtcp2_pkt_info { * @macro * * :macro:`NGTCP2_ERR_NO_VIABLE_PATH` indicates that path validation - * could not probe that a path is not capable of at least 1200 MTU. + * could not probe that a path is capable of sending UDP datagram + * payload of size at least 1200 bytes. */ #define NGTCP2_ERR_NO_VIABLE_PATH -244 +/** + * @macro + * + * :macro:`NGTCP2_ERR_VERSION_NEGOTIATION` indicates that server + * should send Version Negotiation packet. + */ +#define NGTCP2_ERR_VERSION_NEGOTIATION -245 +/** + * @macro + * + * :macro:`NGTCP2_ERR_HANDSHAKE_TIMEOUT` indicates that QUIC + * connection is not established before the specified deadline. + */ +#define NGTCP2_ERR_HANDSHAKE_TIMEOUT -246 +/** + * @macro + * + * :macro:`NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE` indicates the + * version negotiation failed. + */ +#define NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE -247 +/** + * @macro + * + * :macro:`NGTCP2_ERR_IDLE_CLOSE` indicates the connection should be + * closed silently because of idle timeout. + */ +#define NGTCP2_ERR_IDLE_CLOSE -248 /** * @macro * @@ -735,54 +845,68 @@ typedef struct ngtcp2_pkt_info { * * :macro:`NGTCP2_PKT_FLAG_NONE` indicates no flag set. */ -#define NGTCP2_PKT_FLAG_NONE 0 +#define NGTCP2_PKT_FLAG_NONE 0x00u /** * @macro * - * :macro:`NGTCP2_PKT_FLAG_LONG_FORM` indicates the Long packet + * :macro:`NGTCP2_PKT_FLAG_LONG_FORM` indicates the Long header packet * header. */ -#define NGTCP2_PKT_FLAG_LONG_FORM 0x01 +#define NGTCP2_PKT_FLAG_LONG_FORM 0x01u + +/** + * @macro + * + * :macro:`NGTCP2_PKT_FLAG_FIXED_BIT_CLEAR` indicates that Fixed Bit + * (aka QUIC bit) is not set. + */ +#define NGTCP2_PKT_FLAG_FIXED_BIT_CLEAR 0x02u /** * @macro * * :macro:`NGTCP2_PKT_FLAG_KEY_PHASE` indicates Key Phase bit set. */ -#define NGTCP2_PKT_FLAG_KEY_PHASE 0x04 +#define NGTCP2_PKT_FLAG_KEY_PHASE 0x04u /** * @enum * - * :type:`ngtcp2_pkt_type` defines QUIC packet types. + * :type:`ngtcp2_pkt_type` defines QUIC version-independent QUIC + * packet types. */ typedef enum ngtcp2_pkt_type { /** * :enum:`NGTCP2_PKT_VERSION_NEGOTIATION` is defined by libngtcp2 * for convenience. */ - NGTCP2_PKT_VERSION_NEGOTIATION = 0xf0, + NGTCP2_PKT_VERSION_NEGOTIATION = 0x80, + /** + * :enum:`NGTCP2_PKT_STATELESS_RESET` is defined by libngtcp2 for + * convenience. + */ + NGTCP2_PKT_STATELESS_RESET = 0x81, /** * :enum:`NGTCP2_PKT_INITIAL` indicates Initial packet. */ - NGTCP2_PKT_INITIAL = 0x0, + NGTCP2_PKT_INITIAL = 0x10, /** * :enum:`NGTCP2_PKT_0RTT` indicates 0RTT packet. */ - NGTCP2_PKT_0RTT = 0x1, + NGTCP2_PKT_0RTT = 0x11, /** * :enum:`NGTCP2_PKT_HANDSHAKE` indicates Handshake packet. */ - NGTCP2_PKT_HANDSHAKE = 0x2, + NGTCP2_PKT_HANDSHAKE = 0x12, /** * :enum:`NGTCP2_PKT_RETRY` indicates Retry packet. */ - NGTCP2_PKT_RETRY = 0x3, + NGTCP2_PKT_RETRY = 0x13, /** - * :enum:`NGTCP2_PKT_SHORT` is defined by libngtcp2 for convenience. + * :enum:`NGTCP2_PKT_1RTT` is defined by libngtcp2 for convenience. */ - NGTCP2_PKT_SHORT = 0x70 + NGTCP2_PKT_1RTT = 0x40 } ngtcp2_pkt_type; /** @@ -934,6 +1058,16 @@ typedef enum ngtcp2_pkt_type { */ #define NGTCP2_CRYPTO_ERROR 0x100u +/** + * @macro + * + * :macro:`NGTCP2_VERSION_NEGOTIATION_ERROR_DRAFT` is QUIC transport + * error code ``VERSION_NEGOTIATION_ERROR``. + * + * https://quicwg.org/quic-v2/draft-ietf-quic-v2.html + */ +#define NGTCP2_VERSION_NEGOTIATION_ERROR_DRAFT 0x53f8u + /** * @enum * @@ -950,7 +1084,12 @@ typedef enum ngtcp2_path_validation_result { * :enum:`NGTCP2_PATH_VALIDATION_RESULT_FAILURE` indicates * validation failure. */ - NGTCP2_PATH_VALIDATION_RESULT_FAILURE + NGTCP2_PATH_VALIDATION_RESULT_FAILURE, + /** + * :enum:`NGTCP2_PATH_VALIDATION_RESULT_ABORTED` indicates that path + * validation was aborted. + */ + NGTCP2_PATH_VALIDATION_RESULT_ABORTED } ngtcp2_path_validation_result; /** @@ -975,13 +1114,11 @@ typedef uint64_t ngtcp2_duration; */ typedef struct ngtcp2_cid { /** - * :member:`datalen ` is the length of - * Connection ID. + * :member:`datalen` is the length of Connection ID. */ size_t datalen; /** - * :member:`data ` is the buffer to store - * Connection ID. + * :member:`data` is the buffer to store Connection ID. */ uint8_t data[NGTCP2_MAX_CIDLEN]; } ngtcp2_cid; @@ -994,12 +1131,12 @@ typedef struct ngtcp2_cid { */ typedef struct ngtcp2_vec { /** - * :member:`base ` points to the data. + * :member:`base` points to the data. */ uint8_t *base; /** - * :member:`len ` is the number of bytes which the - * buffer pointed by base contains. + * :member:`len` is the number of bytes which the buffer pointed by + * base contains. */ size_t len; } ngtcp2_vec; @@ -1009,12 +1146,19 @@ typedef struct ngtcp2_vec { * * `ngtcp2_cid_init` initializes Connection ID |cid| with the byte * string pointed by |data| and its length is |datalen|. |datalen| - * must be at least :macro:`NGTCP2_MIN_CIDLEN`, and at most - * :macro:`NGTCP2_MAX_CIDLEN`. + * must be at most :macro:`NGTCP2_MAX_CIDLEN`. */ NGTCP2_EXTERN void ngtcp2_cid_init(ngtcp2_cid *cid, const uint8_t *data, size_t datalen); +/** + * @function + * + * `ngtcp2_cid_eq` returns nonzero if |a| and |b| share the same + * Connection ID. + */ +NGTCP2_EXTERN int ngtcp2_cid_eq(const ngtcp2_cid *a, const ngtcp2_cid *b); + /** * @struct * @@ -1058,8 +1202,8 @@ typedef struct ngtcp2_pkt_hd { */ uint8_t type; /** - * :member:`flags` is zero or more of NGTCP2_PKT_FLAG_*. See - * :macro:`NGTCP2_PKT_FLAG_NONE`. + * :member:`flags` is zero or more of :macro:`NGTCP2_PKT_FLAG_* + * `. */ uint8_t flags; } ngtcp2_pkt_hd; @@ -1085,27 +1229,6 @@ typedef struct ngtcp2_pkt_stateless_reset { size_t randlen; } ngtcp2_pkt_stateless_reset; -typedef enum ngtcp2_transport_param_id { - NGTCP2_TRANSPORT_PARAM_ORIGINAL_DESTINATION_CONNECTION_ID = 0x0000, - NGTCP2_TRANSPORT_PARAM_MAX_IDLE_TIMEOUT = 0x0001, - NGTCP2_TRANSPORT_PARAM_STATELESS_RESET_TOKEN = 0x0002, - NGTCP2_TRANSPORT_PARAM_MAX_UDP_PAYLOAD_SIZE = 0x0003, - NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_DATA = 0x0004, - NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_BIDI_LOCAL = 0x0005, - NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_BIDI_REMOTE = 0x0006, - NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_UNI = 0x0007, - NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAMS_BIDI = 0x0008, - NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAMS_UNI = 0x0009, - NGTCP2_TRANSPORT_PARAM_ACK_DELAY_EXPONENT = 0x000a, - NGTCP2_TRANSPORT_PARAM_MAX_ACK_DELAY = 0x000b, - NGTCP2_TRANSPORT_PARAM_DISABLE_ACTIVE_MIGRATION = 0x000c, - NGTCP2_TRANSPORT_PARAM_PREFERRED_ADDRESS = 0x000d, - NGTCP2_TRANSPORT_PARAM_ACTIVE_CONNECTION_ID_LIMIT = 0x000e, - NGTCP2_TRANSPORT_PARAM_INITIAL_SOURCE_CONNECTION_ID = 0x000f, - NGTCP2_TRANSPORT_PARAM_RETRY_SOURCE_CONNECTION_ID = 0x0010, - NGTCP2_TRANSPORT_PARAM_MAX_DATAGRAM_FRAME_SIZE = 0x0020 -} ngtcp2_transport_param_id; - /** * @enum * @@ -1125,20 +1248,6 @@ typedef enum ngtcp2_transport_params_type { NGTCP2_TRANSPORT_PARAMS_TYPE_ENCRYPTED_EXTENSIONS } ngtcp2_transport_params_type; -/** - * @enum - * - * ngtcp2_rand_usage describes the usage of the generated random data. - */ -typedef enum ngtcp2_rand_usage { - NGTCP2_RAND_USAGE_NONE, - /** - * :enum:`NGTCP2_RAND_USAGE_PATH_CHALLENGE` indicates that random - * value is used for PATH_CHALLENGE. - */ - NGTCP2_RAND_USAGE_PATH_CHALLENGE -} ngtcp2_rand_usage; - /** * @macrosection * @@ -1148,10 +1257,10 @@ typedef enum ngtcp2_rand_usage { /** * @macro * - * :macro:`NGTCP2_DEFAULT_MAX_UDP_PAYLOAD_SIZE` is the default value - * of max_udp_payload_size transport parameter. + * :macro:`NGTCP2_DEFAULT_MAX_RECV_UDP_PAYLOAD_SIZE` is the default + * value of max_udp_payload_size transport parameter. */ -#define NGTCP2_DEFAULT_MAX_UDP_PAYLOAD_SIZE 65527 +#define NGTCP2_DEFAULT_MAX_RECV_UDP_PAYLOAD_SIZE 65527 /** * @macro @@ -1182,10 +1291,19 @@ typedef enum ngtcp2_rand_usage { /** * @macro * - * :macro:`NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS` is TLS extension - * type of quic_transport_parameters. + * :macro:`NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_V1` is TLS + * extension type of quic_transport_parameters. + */ +#define NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_V1 0x39u + +/** + * @macro + * + * :macro:`NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_DRAFT` is TLS + * extension type of quic_transport_parameters used during draft + * development. */ -#define NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS 0xffa5u +#define NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_DRAFT 0xffa5u /** * @struct @@ -1214,12 +1332,48 @@ typedef struct ngtcp2_preferred_addr { * :member:`ipv6_addr` contains IPv6 address in network byte order. */ uint8_t ipv6_addr[16]; + /** + * :member:`ipv4_present` indicates that :member:`ipv4_addr` and + * :member:`ipv4_port` contain IPv4 address and port respectively. + */ + uint8_t ipv4_present; + /** + * :member:`ipv6_present` indicates that :member:`ipv6_addr` and + * :member:`ipv6_port` contain IPv6 address and port respectively. + */ + uint8_t ipv6_present; /** * :member:`stateless_reset_token` contains stateless reset token. */ uint8_t stateless_reset_token[NGTCP2_STATELESS_RESET_TOKENLEN]; } ngtcp2_preferred_addr; +/** + * @struct + * + * :type:`ngtcp2_version_info` represents version_information + * structure. + */ +typedef struct ngtcp2_version_info { + /** + * :member:`chosen_version` is the version chosen by the sender. + */ + uint32_t chosen_version; + /** + * :member:`other_versions` points the wire image of other_versions + * field. The each version is therefore in network byte order. + */ + uint8_t *other_versions; + /** + * :member:`other_versionslen` is the number of bytes pointed by + * :member:`other_versions`, not the number of versions included. + */ + size_t other_versionslen; +} ngtcp2_version_info; + +#define NGTCP2_TRANSPORT_PARAMS_VERSION_V1 1 +#define NGTCP2_TRANSPORT_PARAMS_VERSION NGTCP2_TRANSPORT_PARAMS_VERSION_V1 + /** * @struct * @@ -1324,7 +1478,7 @@ typedef struct ngtcp2_transport_params { * :member:`max_datagram_frame_size` is the maximum size of DATAGRAM * frame that this endpoint willingly receives. Specifying 0 * disables DATAGRAM support. See - * https://tools.ietf.org/html/draft-ietf-quic-datagram-01 + * https://datatracker.ietf.org/doc/html/rfc9221 */ uint64_t max_datagram_frame_size; /** @@ -1351,15 +1505,28 @@ typedef struct ngtcp2_transport_params { * :member:`stateless_reset_token` contains stateless reset token. */ uint8_t stateless_reset_token[NGTCP2_STATELESS_RESET_TOKENLEN]; + /** + * :member:`grease_quic_bit` is nonzero if sender supports "Greasing + * the QUIC Bit" extension. See + * https://datatracker.ietf.org/doc/html/draft-ietf-quic-bit-grease. + * Note that the local endpoint always enables greasing QUIC bit + * regardless of this field value. + */ + uint8_t grease_quic_bit; + /** + * :member:`version_info` contains version_information field if + * :member:`version_info_present` is nonzero. Application should + * not specify this field. + */ + ngtcp2_version_info version_info; + /** + * :member:`version_info_present` is nonzero if + * :member:`version_info` is set. Application should not specify + * this field. + */ + uint8_t version_info_present; } ngtcp2_transport_params; -/** - * @struct - * - * :type:`ngtcp2_log` is ngtcp2 library internal logger. - */ -typedef struct ngtcp2_log ngtcp2_log; - /** * @enum * @@ -1388,6 +1555,9 @@ typedef enum ngtcp2_pktns_id { NGTCP2_PKTNS_ID_MAX } ngtcp2_pktns_id; +#define NGTCP2_CONN_STAT_VERSION_V1 1 +#define NGTCP2_CONN_STAT_VERSION NGTCP2_CONN_STAT_VERSION_V1 + /** * @struct * @@ -1435,13 +1605,11 @@ typedef struct ngtcp2_conn_stat { ngtcp2_tstamp loss_detection_timer; /** * :member:`last_tx_pkt_ts` corresponds to - * time_of_last_sent_ack_eliciting_packet in - * draft-ietf-quic-recovery-32. + * time_of_last_ack_eliciting_packet in :rfc:`9002`. */ ngtcp2_tstamp last_tx_pkt_ts[NGTCP2_PKTNS_ID_MAX]; /** - * :member:`loss_time` corresponds to loss_time in - * draft-ietf-quic-recovery-32. + * :member:`loss_time` corresponds to loss_time in :rfc:`9002`. */ ngtcp2_tstamp loss_time[NGTCP2_PKTNS_ID_MAX]; /** @@ -1473,6 +1641,16 @@ typedef struct ngtcp2_conn_stat { * in byte per second. */ uint64_t delivery_rate_sec; + /** + * :member:`pacing_rate` is the current packet sending rate. If + * pacing is disabled, 0 is set. + */ + double pacing_rate; + /** + * :member:`send_quantum` is the maximum size of a data aggregate + * scheduled and transmitted together. + */ + size_t send_quantum; } ngtcp2_conn_stat; /** @@ -1490,195 +1668,16 @@ typedef enum ngtcp2_cc_algo { */ NGTCP2_CC_ALGO_CUBIC = 0x01, /** - * :enum:`NGTCP2_CC_ALGO_CUSTOM` represents custom congestion - * control algorithm. - */ - NGTCP2_CC_ALGO_CUSTOM = 0xff -} ngtcp2_cc_algo; - -/** - * @struct - * - * :type:`ngtcp2_cc_base` is the base structure of custom congestion - * control algorithm. It must be the first field of custom congestion - * controller. - */ -typedef struct ngtcp2_cc_base { - /** - * :member:`log` is ngtcp2 library internal logger. - */ - ngtcp2_log *log; -} ngtcp2_cc_base; - -/** - * @struct - * - * :type:`ngtcp2_cc_pkt` is a convenient structure to include - * acked/lost/sent packet. - */ -typedef struct ngtcp2_cc_pkt { - /** - * :member:`pkt_num` is the packet number - */ - int64_t pkt_num; - /** - * :member:`pktlen` is the length of packet. - */ - size_t pktlen; - /** - * :member:`pktns_id` is the ID of packet number space which this - * packet belongs to. - */ - ngtcp2_pktns_id pktns_id; - /** - * :member:`ts_sent` is the timestamp when packet is sent. - */ - ngtcp2_tstamp ts_sent; -} ngtcp2_cc_pkt; - -typedef struct ngtcp2_cc ngtcp2_cc; - -/** - * @functypedef - * - * :type:`ngtcp2_cc_on_pkt_acked` is a callback function which is - * called with an acknowledged packet. - */ -typedef void (*ngtcp2_cc_on_pkt_acked)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, - const ngtcp2_cc_pkt *pkt, - ngtcp2_tstamp ts); - -/** - * @functypedef - * - * :type:`ngtcp2_cc_congestion_event` is a callback function which is - * called when congestion event happens (e.g., when packet is lost). - */ -typedef void (*ngtcp2_cc_congestion_event)(ngtcp2_cc *cc, - ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts_sent, - ngtcp2_tstamp ts); - -/** - * @functypedef - * - * :type:`ngtcp2_cc_on_persistent_congestion` is a callback function - * which is called when persistent congestion is established. - */ -typedef void (*ngtcp2_cc_on_persistent_congestion)(ngtcp2_cc *cc, - ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts); - -/** - * @functypedef - * - * :type:`ngtcp2_cc_on_ack_recv` is a callback function which is - * called when an acknowledgement is received. - */ -typedef void (*ngtcp2_cc_on_ack_recv)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts); - -/** - * @functypedef - * - * :type:`ngtcp2_cc_on_pkt_sent` is a callback function which is - * called when an ack-eliciting packet is sent. - */ -typedef void (*ngtcp2_cc_on_pkt_sent)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, - const ngtcp2_cc_pkt *pkt); - -/** - * @functypedef - * - * :type:`ngtcp2_cc_new_rtt_sample` is a callback function which is - * called when new RTT sample is obtained. - */ -typedef void (*ngtcp2_cc_new_rtt_sample)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts); - -/** - * @functypedef - * - * :type:`ngtcp2_cc_reset` is a callback function which is called when - * congestion state must be reset. - */ -typedef void (*ngtcp2_cc_reset)(ngtcp2_cc *cc); - -/** - * @enum - * - * :type:`ngtcp2_cc_event_type` defines congestion control events. - */ -typedef enum ngtcp2_cc_event_type { - /** - * :enum:`NGTCP2_CC_EVENT_TX_START` occurs when ack-eliciting packet - * is sent and no other ack-eliciting packet is present. - */ - NGTCP2_CC_EVENT_TYPE_TX_START -} ngtcp2_cc_event_type; - -/** - * @functypedef - * - * :type:`ngtcp2_cc_event` is a callback function which is called when - * a specific event happens. - */ -typedef void (*ngtcp2_cc_event)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, - ngtcp2_cc_event_type event, ngtcp2_tstamp ts); - -/** - * @struct - * - * :type:`ngtcp2_cc` is congestion control algorithm interface to - * allow custom implementation. - */ -typedef struct ngtcp2_cc { - /** - * :member:`ccb` is a pointer to :type:`ngtcp2_cc_base` which - * usually contains a state. - */ - ngtcp2_cc_base *ccb; - /** - * :member:`on_pkt_acked` is a callback function which is called - * when a packet is acknowledged. - */ - ngtcp2_cc_on_pkt_acked on_pkt_acked; - /** - * :member:`congestion_event` is a callback function which is called - * when congestion event happens (.e.g, packet is lost). - */ - ngtcp2_cc_congestion_event congestion_event; - /** - * :member:`on_persistent_congestion` is a callback function which - * is called when persistent congestion is established. - */ - ngtcp2_cc_on_persistent_congestion on_persistent_congestion; - /** - * :member:`on_ack_recv` is a callback function which is called when - * an acknowledgement is received. - */ - ngtcp2_cc_on_ack_recv on_ack_recv; - /** - * :member:`on_pkt_sent` is a callback function which is called when - * ack-eliciting packet is sent. + * :enum:`NGTCP2_CC_ALGO_BBR` represents BBR. If BBR is chosen, + * packet pacing is enabled. */ - ngtcp2_cc_on_pkt_sent on_pkt_sent; + NGTCP2_CC_ALGO_BBR = 0x02, /** - * :member:`new_rtt_sample` is a callback function which is called - * when new RTT sample is obtained. + * :enum:`NGTCP2_CC_ALGO_BBR2` represents BBR v2. If BBR v2 is + * chosen, packet pacing is enabled. */ - ngtcp2_cc_new_rtt_sample new_rtt_sample; - /** - * :member:`reset` is a callback function which is called when - * congestion control state must be reset. - */ - ngtcp2_cc_reset reset; - /** - * :member:`event` is a callback function which is called when a - * specific event happens. - */ - ngtcp2_cc_event event; -} ngtcp2_cc; + NGTCP2_CC_ALGO_BBR2 = 0x03 +} ngtcp2_cc_algo; /** * @functypedef @@ -1700,14 +1699,14 @@ typedef void (*ngtcp2_printf)(void *user_data, const char *format, ...); * * :macro:`NGTCP2_QLOG_WRITE_FLAG_NONE` indicates no flag set. */ -#define NGTCP2_QLOG_WRITE_FLAG_NONE 0 +#define NGTCP2_QLOG_WRITE_FLAG_NONE 0x00u /** * @macro * * :macro:`NGTCP2_QLOG_WRITE_FLAG_FIN` indicates that this is the * final call to :type:`ngtcp2_qlog_write` in the current connection. */ -#define NGTCP2_QLOG_WRITE_FLAG_FIN 0x01 +#define NGTCP2_QLOG_WRITE_FLAG_FIN 0x01u /** * @struct @@ -1730,8 +1729,8 @@ typedef struct ngtcp2_rand_ctx { * * :type:`ngtcp2_qlog_write` is a callback function which is called to * write qlog |data| of length |datalen| bytes. |flags| is bitwise OR - * of zero or more of NGTCP2_QLOG_WRITE_FLAG_*. See - * :macro:`NGTCP2_QLOG_WRITE_FLAG_NONE`. If + * of zero or more of :macro:`NGTCP2_QLOG_WRITE_FLAG_* + * `. If * :macro:`NGTCP2_QLOG_WRITE_FLAG_FIN` is set, |datalen| may be 0. */ typedef void (*ngtcp2_qlog_write)(void *user_data, uint32_t flags, @@ -1757,6 +1756,9 @@ typedef struct ngtcp2_qlog_settings { ngtcp2_qlog_write write; } ngtcp2_qlog_settings; +#define NGTCP2_SETTINGS_VERSION_V1 1 +#define NGTCP2_SETTINGS_VERSION NGTCP2_SETTINGS_VERSION_V1 + /** * @struct * @@ -1768,18 +1770,9 @@ typedef struct ngtcp2_settings { */ ngtcp2_qlog_settings qlog; /** - * :member:`cc_algo` specifies congestion control algorithm. If - * :enum:`ngtcp2_cc_algo.NGTCP2_CC_ALGO_CUSTOM` is set, :member:`cc` - * must be set to a pointer to custom congestion control algorithm. + * :member:`cc_algo` specifies congestion control algorithm. */ ngtcp2_cc_algo cc_algo; - /** - * :member:`cc` is a pointer to custom congestion control algorithm. - * :member:`cc_algo` must be set to - * :enum:`ngtcp2_cc_algo.NGTCP2_CC_ALGO_CUSTOM` in order to enable - * custom congestion control algorithm. - */ - ngtcp2_cc *cc; /** * :member:`initial_ts` is an initial timestamp given to the * library. @@ -1798,8 +1791,7 @@ typedef struct ngtcp2_settings { /** * :member:`max_udp_payload_size` is the maximum size of UDP * datagram payload that this endpoint transmits. It is used by - * congestion controller to compute congestion window. If it is set - * to 0, it defaults to :macro:`NGTCP2_DEFAULT_MAX_PKTLEN`. + * congestion controller to compute congestion window. */ size_t max_udp_payload_size; /** @@ -1847,33 +1839,193 @@ typedef struct ngtcp2_settings { * immediate acknowledgement. */ size_t ack_thresh; -} ngtcp2_settings; - -/** - * @struct - * - * :type:`ngtcp2_addr` is the endpoint address. - */ -typedef struct ngtcp2_addr { /** - * :member:`addrlen` is the length of addr. + * :member:`no_udp_payload_size_shaping`, if set to nonzero, + * instructs the library not to limit the UDP payload size to + * :macro:`NGTCP2_MAX_UDP_PAYLOAD_SIZE` (which can be extended by + * Path MTU Discovery) and instead use the mininum size among the + * given buffer size, :member:`max_udp_payload_size`, and the + * received max_udp_payload QUIC transport parameter. + */ + int no_udp_payload_size_shaping; + /** + * :member:`handshake_timeout` is the period of time before giving + * up QUIC connection establishment. If QUIC handshake is not + * complete within this period, `ngtcp2_conn_handle_expiry` returns + * :macro:`NGTCP2_ERR_HANDSHAKE_TIMEOUT` error. The deadline is + * :member:`initial_ts` + :member:`handshake_timeout`. If this + * field is set to ``UINT64_MAX``, no handshake timeout is set. + */ + ngtcp2_duration handshake_timeout; + /** + * :member:`preferred_versions` is the array of versions that are + * preferred by the local endpoint. All versions set in this array + * must be supported by the library, and compatible to QUIC v1. The + * reserved versions are not allowed. They are sorted in the order + * of preference. + * + * On compatible version negotiation, server will negotiate one of + * those versions contained in this array if a client initially + * chooses a less preferred version. This version set corresponds + * to Offered Versions in QUIC Version Negotiation draft, and it should + * be sent in Version Negotiation packet. + * + * Client uses this field and :member:`original_version` to prevent + * version downgrade attack if it reacted upon Version Negotiation + * packet. If this field is specified, client must include + * |client_chosen_version| passed to `ngtcp2_conn_client_new` unless + * |client_chosen_version| is a reserved version. */ - size_t addrlen; + uint32_t *preferred_versions; /** - * :member:`addr` points to the buffer which contains endpoint - * address. It must not be ``NULL``. + * :member:`preferred_versionslen` is the number of versions that + * are contained in the array pointed by + * :member:`preferred_versions`. */ - struct sockaddr *addr; + size_t preferred_versionslen; /** - * :member:`user_data` is an arbitrary data and opaque to the - * library. + * :member:`other_versions` is the array of versions that are set in + * :member:`other_versions ` + * field of outgoing version_information QUIC transport parameter. + * + * For server, this corresponds to Fully-Deployed Versions in QUIC + * Version Negotiation draft. If this field is set not, it is set + * to :member:`preferred_versions` internally if + * :member:`preferred_versionslen` is not zero. If this field is + * not set, and :member:`preferred_versionslen` is zero, this field + * is set to :macro:`NGTCP2_PROTO_VER_V1` internally. + * + * Client must include |client_chosen_version| passed to + * `ngtcp2_conn_client_new` in this array if this field is set and + * |client_chosen_version| is not a reserved version. If this field + * is not set, |client_chosen_version| passed to + * `ngtcp2_conn_client_new` will be set in this field internally + * unless |client_chosen_version| is a reserved version. */ - void *user_data; -} ngtcp2_addr; - -/** - * @struct - * + uint32_t *other_versions; + /** + * :member:`other_versionslen` is the number of versions that are + * contained in the array pointed by :member:`other_versions`. + */ + size_t other_versionslen; + /** + * :member:`original_version` is the original version that client + * initially used to make a connection attempt. If it is set, and + * it differs from |client_chosen_version| passed to + * `ngtcp2_conn_client_new`, the library assumes that client reacted + * upon Version Negotiation packet. Server does not use this field. + */ + uint32_t original_version; + /** + * :member:`no_pmtud`, if set to nonzero, disables Path MTU + * Discovery. + */ + int no_pmtud; +} ngtcp2_settings; + +#ifdef NGTCP2_USE_GENERIC_SOCKADDR +typedef struct ngtcp2_sockaddr { + uint16_t sa_family; + uint8_t sa_data[14]; +} ngtcp2_sockaddr; + +typedef struct ngtcp2_in_addr { + uint32_t s_addr; +} ngtcp2_in_addr; + +typedef struct ngtcp2_sockaddr_in { + uint16_t sin_family; + uint16_t sin_port; + ngtcp2_in_addr sin_addr; + uint8_t sin_zero[8]; +} ngtcp2_sockaddr_in; + +# define NGTCP2_SS_MAXSIZE 128 +# define NGTCP2_SS_ALIGNSIZE (sizeof(uint64_t)) +# define NGTCP2_SS_PAD1SIZE (NGTCP2_SS_ALIGNSIZE - sizeof(uint16_t)) +# define NGTCP2_SS_PAD2SIZE \ + (NGTCP2_SS_MAXSIZE - \ + (sizeof(uint16_t) + NGTCP2_SS_PAD1SIZE + NGTCP2_SS_ALIGNSIZE)) + +typedef struct ngtcp2_sockaddr_storage { + uint16_t ss_family; + uint8_t _ss_pad1[NGTCP2_SS_PAD1SIZE]; + uint64_t _ss_align; + uint8_t _ss_pad2[NGTCP2_SS_PAD2SIZE]; +} ngtcp2_sockaddr_storage; + +# undef NGTCP2_SS_PAD2SIZE +# undef NGTCP2_SS_PAD1SIZE +# undef NGTCP2_SS_ALIGNSIZE +# undef NGTCP2_SS_MAXSIZE + +typedef uint32_t ngtcp2_socklen; +#else +/** + * @typedef + * + * :type:`ngtcp2_sockaddr` is typedefed to struct sockaddr. If + * :macro:`NGTCP2_USE_GENERIC_SOCKADDR` is defined, it is typedefed to + * the generic struct sockaddr defined in ngtcp2.h. + */ +typedef struct sockaddr ngtcp2_sockaddr; +/** + * @typedef + * + * :type:`ngtcp2_sockaddr_storage` is typedefed to struct + * sockaddr_storage. If :macro:`NGTCP2_USE_GENERIC_SOCKADDR` is + * defined, it is typedefed to the generic struct sockaddr_storage + * defined in ngtcp2.h. + */ +typedef struct sockaddr_storage ngtcp2_sockaddr_storage; +typedef struct sockaddr_in ngtcp2_sockaddr_in; +/** + * @typedef + * + * :type:`ngtcp2_socklen` is typedefed to socklen_t. If + * :macro:`NGTCP2_USE_GENERIC_SOCKADDR` is defined, it is typedefed to + * uint32_t. + */ +typedef socklen_t ngtcp2_socklen; +#endif + +#if defined(NGTCP2_USE_GENERIC_SOCKADDR) || \ + defined(NGTCP2_USE_GENERIC_IPV6_SOCKADDR) +typedef struct ngtcp2_in6_addr { + uint8_t in6_addr[16]; +} ngtcp2_in6_addr; + +typedef struct ngtcp2_sockaddr_in6 { + uint16_t sin6_family; + uint16_t sin6_port; + uint32_t sin6_flowinfo; + ngtcp2_in6_addr sin6_addr; + uint32_t sin6_scope_id; +} ngtcp2_sockaddr_in6; +#else +typedef struct sockaddr_in6 ngtcp2_sockaddr_in6; +#endif + +/** + * @struct + * + * :type:`ngtcp2_addr` is the endpoint address. + */ +typedef struct ngtcp2_addr { + /** + * :member:`addr` points to the buffer which contains endpoint + * address. It must not be ``NULL``. + */ + ngtcp2_sockaddr *addr; + /** + * :member:`addrlen` is the length of addr. + */ + ngtcp2_socklen addrlen; +} ngtcp2_addr; + +/** + * @struct + * * :type:`ngtcp2_path` is the network endpoints where a packet is sent * and received. */ @@ -1886,6 +2038,21 @@ typedef struct ngtcp2_path { * :member:`remote` is the address of remote endpoint. */ ngtcp2_addr remote; + /** + * :member:`user_data` is an arbitrary data and opaque to the + * library. + * + * Note that :type:`ngtcp2_path` is generally passed to + * :type:`ngtcp2_conn` by an application, and :type:`ngtcp2_conn` + * stores their copies. Unfortunately, there is no way for the + * application to know when :type:`ngtcp2_conn` finishes using a + * specific :type:`ngtcp2_path` object in mid connection, which + * means that the application cannot free the data pointed by this + * field. Therefore, it is advised to use this field only when the + * data pointed by this field persists in an entire lifetime of the + * connection. + */ + void *user_data; } ngtcp2_path; /** @@ -1896,17 +2063,17 @@ typedef struct ngtcp2_path { */ typedef struct ngtcp2_path_storage { /** - * :member:`local_addrbuf` is a buffer to store local address. + * :member:`path` stores network path. */ - struct sockaddr_storage local_addrbuf; + ngtcp2_path path; /** - * :member:`remote_addrbuf` is a buffer to store remote address. + * :member:`local_addrbuf` is a buffer to store local address. */ - struct sockaddr_storage remote_addrbuf; + ngtcp2_sockaddr_storage local_addrbuf; /** - * :member:`path` stores network path. + * :member:`remote_addrbuf` is a buffer to store remote address. */ - ngtcp2_path path; + ngtcp2_sockaddr_storage remote_addrbuf; } ngtcp2_path_storage; /** @@ -1993,7 +2160,7 @@ typedef struct ngtcp2_crypto_cipher_ctx { * :type:`ngtcp2_crypto_ctx` is a convenient structure to bind all * crypto related objects in one place. Use * `ngtcp2_crypto_ctx_initial` to initialize this struct for Initial - * packet encryption. For Handshake and Short packets, use + * packet encryption. For Handshake and 1RTT packets, use * `ngtcp2_crypto_ctx_tls`. */ typedef struct ngtcp2_crypto_ctx { @@ -2027,17 +2194,21 @@ typedef struct ngtcp2_crypto_ctx { * `ngtcp2_encode_transport_params` encodes |params| in |dest| of * length |destlen|. * + * If |dest| is NULL, and |destlen| is zero, this function just + * returns the number of bytes required to store the encoded transport + * parameters. + * * This function returns the number of written, or one of the * following negative error codes: * * :macro:`NGTCP2_ERR_NOBUF` * Buffer is too small. - * :macro:`NGTCP2_ERR_INVALID_ARGUMENT`: + * :macro:`NGTCP2_ERR_INVALID_ARGUMENT` * |exttype| is invalid. */ -NGTCP2_EXTERN ngtcp2_ssize ngtcp2_encode_transport_params( +NGTCP2_EXTERN ngtcp2_ssize ngtcp2_encode_transport_params_versioned( uint8_t *dest, size_t destlen, ngtcp2_transport_params_type exttype, - const ngtcp2_transport_params *params); + int transport_params_version, const ngtcp2_transport_params *params); /** * @function @@ -2049,6 +2220,44 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_encode_transport_params( * If the optional parameters are missing, the default value is * assigned. * + * The following fields may point to somewhere inside the buffer + * pointed by |data| of length |datalen|: + * + * - :member:`ngtcp2_transport_params.version_info.other_versions + * ` + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :macro:`NGTCP2_ERR_REQUIRED_TRANSPORT_PARAM` + * The required parameter is missing. + * :macro:`NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM` + * The input is malformed. + */ +NGTCP2_EXTERN int ngtcp2_decode_transport_params_versioned( + int transport_params_version, ngtcp2_transport_params *params, + ngtcp2_transport_params_type exttype, const uint8_t *data, size_t datalen); + +/** + * @function + * + * `ngtcp2_decode_transport_params_new` decodes transport parameters + * in |data| of length |datalen|, and stores the result in the object + * allocated dynamically. The pointer to the allocated object is + * assigned to |*pparams|. Unlike `ngtcp2_decode_transport_params`, + * all direct and indirect fields are also allocated dynamically if + * needed. + * + * |mem| is a memory allocator to allocate memory. If |mem| is + * ``NULL``, the memory allocator returned by `ngtcp2_mem_default()` + * is used. + * + * If the optional parameters are missing, the default value is + * assigned. + * + * `ngtcp2_transport_params_del` frees the memory allocated by this + * function. + * * This function returns 0 if it succeeds, or one of the following * negative error codes: * @@ -2056,13 +2265,58 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_encode_transport_params( * The required parameter is missing. * :macro:`NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM` * The input is malformed. - * :macro:`NGTCP2_ERR_INVALID_ARGUMENT`: - * |exttype| is invalid. + * :macro:`NGTCP2_ERR_NOMEM` + * Out of memory. */ -NGTCP2_EXTERN int -ngtcp2_decode_transport_params(ngtcp2_transport_params *params, - ngtcp2_transport_params_type exttype, - const uint8_t *data, size_t datalen); +NGTCP2_EXTERN int ngtcp2_decode_transport_params_new( + ngtcp2_transport_params **pparams, ngtcp2_transport_params_type exttype, + const uint8_t *data, size_t datalen, const ngtcp2_mem *mem); + +/** + * @function + * + * `ngtcp2_transport_params_del` frees the |params| which must be + * dynamically allocated by `ngtcp2_decode_transport_params_new`. + * + * |mem| is a memory allocator that allocated |params|. If |mem| is + * ``NULL``, the memory allocator returned by `ngtcp2_mem_default()` + * is used. + * + * If |params| is ``NULL``, this function does nothing. + */ +NGTCP2_EXTERN void ngtcp2_transport_params_del(ngtcp2_transport_params *params, + const ngtcp2_mem *mem); + +/** + * @struct + * + * :type:`ngtcp2_version_cid` is a convenient struct to store the + * result of `ngtcp2_pkt_decode_version_cid`. + */ +typedef struct ngtcp2_version_cid { + /** + * :member:`version` stores QUIC version. + */ + uint32_t version; + /** + * :member:`dcid` points to the Destination Connection ID. + */ + const uint8_t *dcid; + /** + * :member:`dcidlen` is the length of the Destination Connection ID + * pointed by :member:`dcid`. + */ + size_t dcidlen; + /** + * :member:`scid` points to the Source Connection ID. + */ + const uint8_t *scid; + /** + * :member:`scidlen` is the length of the Source Connection ID + * pointed by :member:`scid`. + */ + size_t scidlen; +} ngtcp2_version_cid; /** * @function @@ -2076,34 +2330,44 @@ ngtcp2_decode_transport_params(ngtcp2_transport_params *params, * Longer Connection ID is only valid if the version is unsupported * QUIC version. * - * If the given packet is Long packet, this function extracts the - * version from the packet and assigns it to |*pversion|. It also + * If the given packet is Long header packet, this function extracts + * the version from the packet and assigns it to + * :member:`dest->version `. It also * extracts the pointer to the Destination Connection ID and its - * length and assigns them to |*pdcid| and |*pdcidlen| respectively. - * Similarly, it extracts the pointer to the Source Connection ID and - * its length and assigns them to |*pscid| and |*pscidlen| - * respectively. - * - * If the given packet is Short packet, |*pversion| will be 0, - * |*pscid| will be ``NULL``, and |*pscidlen| will be 0. Because the - * Short packet does not have the length of Destination Connection ID, - * the caller has to pass the length in |short_dcidlen|. This - * function extracts the pointer to the Destination Connection ID and - * assigns it to |*pdcid|. |short_dcidlen| is assigned to - * |*pdcidlen|. - * - * This function returns 0 or 1 if it succeeds. It returns 1 if - * Version Negotiation packet should be sent. Otherwise, one of the + * length and assigns them to :member:`dest->dcid + * ` and :member:`dest->dcidlen + * ` respectively. Similarly, it extracts + * the pointer to the Source Connection ID and its length and assigns + * them to :member:`dest->scid ` and + * :member:`dest->scidlen ` respectively. + * + * If the given packet is Short header packet, :member:`dest->version + * ` will be 0, :member:`dest->scid + * ` will be ``NULL``, and + * :member:`dest->scidlen ` will be 0. + * Because the Short header packet does not have the length of + * Destination Connection ID, the caller has to pass the length in + * |short_dcidlen|. This function extracts the pointer to the + * Destination Connection ID and assigns it to :member:`dest->dcid + * `. |short_dcidlen| is assigned to + * :member:`dest->dcidlen `. + * + * If Version Negotiation is required, this function returns + * :macro:`NGTCP2_ERR_VERSION_NEGOTIATION`. Unlike the other error + * cases, all fields of |dest| are assigned as described above. + * + * This function returns 0 if it succeeds. Otherwise, one of the * following negative error code: * * :macro:`NGTCP2_ERR_INVALID_ARGUMENT` * The function could not decode the packet header. + * :macro:`NGTCP2_ERR_VERSION_NEGOTIATION` + * Version Negotiation packet should be sent. */ -NGTCP2_EXTERN int -ngtcp2_pkt_decode_version_cid(uint32_t *pversion, const uint8_t **pdcid, - size_t *pdcidlen, const uint8_t **pscid, - size_t *pscidlen, const uint8_t *data, - size_t datalen, size_t short_dcidlen); +NGTCP2_EXTERN int ngtcp2_pkt_decode_version_cid(ngtcp2_version_cid *dest, + const uint8_t *data, + size_t datalen, + size_t short_dcidlen); /** * @function @@ -2124,8 +2388,11 @@ ngtcp2_pkt_decode_version_cid(uint32_t *pversion, const uint8_t **pdcid, * Negotiation packet has random type in wire format. For * convenience, this function sets * :enum:`ngtcp2_pkt_type.NGTCP2_PKT_VERSION_NEGOTIATION` to - * dest->type, and set dest->payloadlen and dest->pkt_num to 0. - * Version Negotiation packet occupies a single packet. + * :member:`dest->type `, clears + * :macro:`NGTCP2_PKT_FLAG_LONG_FORM` flag from :member:`dest->flags + * `, and sets 0 to :member:`dest->len + * `. Version Negotiation packet occupies a single + * packet. * * It stores the result in the object pointed by |dest|, and returns * the number of bytes decoded to read the packet header if it @@ -2141,12 +2408,12 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_pkt_decode_hd_long(ngtcp2_pkt_hd *dest, /** * @function * - * `ngtcp2_pkt_decode_hd_short` decodes QUIC short packet header in - * |pkt| of length |pktlen|. |dcidlen| is the length of DCID in - * packet header. Short packet does not encode the length of - * connection ID, thus we need the input from the outside. This - * function only parses the input just before packet number field. - * This function can handle Connection ID up to + * `ngtcp2_pkt_decode_hd_short` decodes QUIC short header packet + * header in |pkt| of length |pktlen|. |dcidlen| is the length of + * DCID in packet header. Short header packet does not encode the + * length of connection ID, thus we need the input from the outside. + * This function only parses the input just before packet number + * field. This function can handle Connection ID up to * :macro:`NGTCP2_MAX_CIDLEN`. Consider to use * `ngtcp2_pkt_decode_version_cid` to get longer Connection ID. It * stores the result in the object pointed by |dest|, and returns the @@ -2170,7 +2437,7 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_pkt_decode_hd_short(ngtcp2_pkt_hd *dest, * and its length must be :macro:`NGTCP2_STATELESS_RESET_TOKENLEN` * bytes long. |rand| specifies the random octets preceding Stateless * Reset Token. The length of |rand| is specified by |randlen| which - * must be at least :macro:`NGTCP2_MIN_STATELESS_RETRY_RANDLEN` bytes + * must be at least :macro:`NGTCP2_MIN_STATELESS_RESET_RANDLEN` bytes * long. * * If |randlen| is too long to write them all in the buffer, |rand| is @@ -2183,7 +2450,7 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_pkt_decode_hd_short(ngtcp2_pkt_hd *dest, * Buffer is too small. * :macro:`NGTCP2_ERR_INVALID_ARGUMENT` * |randlen| is strictly less than - * :macro:`NGTCP2_MIN_STATELESS_RETRY_RANDLEN`. + * :macro:`NGTCP2_MIN_STATELESS_RESET_RANDLEN`. */ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_pkt_write_stateless_reset( uint8_t *dest, size_t destlen, const uint8_t *stateless_reset_token, @@ -2231,15 +2498,12 @@ typedef struct ngtcp2_conn ngtcp2_conn; * `ngtcp2_conn_submit_crypto_data` function. Make sure that before * calling `ngtcp2_conn_submit_crypto_data` function, client * application must create initial packet protection keys and IVs, and - * provide them to ngtcp2 library using `ngtcp2_conn_set_initial_key` - * and + * provide them to ngtcp2 library using + * `ngtcp2_conn_install_initial_key`. * * This callback function must return 0 if it succeeds, or * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` which makes the library call * return immediately. - * - * TODO: Define error code for TLS stack failure. Suggestion: - * NGTCP2_ERR_CRYPTO. */ typedef int (*ngtcp2_client_initial)(ngtcp2_conn *conn, void *user_data); @@ -2250,16 +2514,13 @@ typedef int (*ngtcp2_client_initial)(ngtcp2_conn *conn, void *user_data); * Initial packet from client. An server application must implement * this callback, and generate initial keys and IVs for both * transmission and reception. Install them using - * `ngtcp2_conn_set_initial_key`. |dcid| is the destination + * `ngtcp2_conn_install_initial_key`. |dcid| is the destination * connection ID which client generated randomly. It is used to * derive initial packet protection keys. * * The callback function must return 0 if it succeeds. If an error * occurs, return :macro:`NGTCP2_ERR_CALLBACK_FAILURE` which makes the * library call return immediately. - * - * TODO: Define error code for TLS stack failure. Suggestion: - * NGTCP2_ERR_CRYPTO. */ typedef int (*ngtcp2_recv_client_initial)(ngtcp2_conn *conn, const ngtcp2_cid *dcid, @@ -2310,12 +2571,24 @@ typedef enum ngtcp2_crypto_level { * * The application should provide the given data to TLS stack. * - * The callback function must return 0 if it succeeds. If TLS stack - * reported error, return :macro:`NGTCP2_ERR_CRYPTO`. If application - * encounters fatal error, return :macro:`NGTCP2_ERR_CALLBACK_FAILURE` - * which makes the library call return immediately. If the other - * value is returned, it is treated as + * The callback function must return 0 if it succeeds, or one of the + * following negative error codes: + * + * - :macro:`NGTCP2_ERR_CRYPTO` + * - :macro:`NGTCP2_ERR_REQUIRED_TRANSPORT_PARAM` + * - :macro:`NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM` + * - :macro:`NGTCP2_ERR_TRANSPORT_PARAM` + * - :macro:`NGTCP2_ERR_PROTO` + * - :macro:`NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE` + * - :macro:`NGTCP2_ERR_NOMEM` + * - :macro:`NGTCP2_ERR_CALLBACK_FAILURE` + * + * If the other value is returned, it is treated as * :macro:`NGTCP2_ERR_CALLBACK_FAILURE`. + * + * If application encounters fatal error, return + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` which makes the library call + * return immediately. */ typedef int (*ngtcp2_recv_crypto_data)(ngtcp2_conn *conn, ngtcp2_crypto_level crypto_level, @@ -2369,15 +2642,15 @@ typedef int (*ngtcp2_recv_version_negotiation)(ngtcp2_conn *conn, * @functypedef * * :type:`ngtcp2_recv_retry` is invoked when Retry packet is received. - * This callback is client only. + * This callback is client use only. * * Application must regenerate packet protection key, IV, and header * protection key for Initial packets using the destination connection - * ID obtained by `ngtcp2_conn_get_dcid()` and install them by calling - * `ngtcp2_conn_install_initial_key()`. + * ID obtained by :member:`hd->scid ` and install + * them by calling `ngtcp2_conn_install_initial_key()`. * - * 0-RTT data accepted by the ngtcp2 library will be retransmitted by - * the library automatically. + * 0-RTT data accepted by the ngtcp2 library will be automatically + * retransmitted as 0-RTT data by the library. * * The callback function must return 0 if it succeeds. Returning * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` makes the library call return @@ -2394,13 +2667,13 @@ typedef int (*ngtcp2_recv_retry)(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, * encrypt is passed as |plaintext| of length |plaintextlen|. The * AEAD cipher is |aead|. |aead_ctx| is the AEAD cipher context * object which is initialized with encryption key. The nonce is - * passed as |nonce| of length |noncelen|. The ad, Additional Data to - * AEAD, is passed as |ad| of length |adlen|. + * passed as |nonce| of length |noncelen|. The Additional + * Authenticated Data is passed as |aad| of length |aadlen|. * * The implementation of this callback must encrypt |plaintext| using * the negotiated cipher suite and write the ciphertext into the * buffer pointed by |dest|. |dest| has enough capacity to store the - * ciphertext. + * ciphertext and any additional AEAD tag data. * * |dest| and |plaintext| may point to the same buffer. * @@ -2412,7 +2685,7 @@ typedef int (*ngtcp2_encrypt)(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *plaintext, size_t plaintextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen); + const uint8_t *aad, size_t aadlen); /** * @functypedef @@ -2422,8 +2695,8 @@ typedef int (*ngtcp2_encrypt)(uint8_t *dest, const ngtcp2_crypto_aead *aead, * decrypt is passed as |ciphertext| of length |ciphertextlen|. The * AEAD cipher is |aead|. |aead_ctx| is the AEAD cipher context * object which is initialized with decryption key. The nonce is - * passed as |nonce| of length |noncelen|. The ad, Additional Data to - * AEAD, is passed as |ad| of length |adlen|. + * passed as |nonce| of length |noncelen|. The Additional + * Authenticated Data is passed as |aad| of length |aadlen|. * * The implementation of this callback must decrypt |ciphertext| using * the negotiated cipher suite and write the ciphertext into the @@ -2433,34 +2706,38 @@ typedef int (*ngtcp2_encrypt)(uint8_t *dest, const ngtcp2_crypto_aead *aead, * |dest| and |ciphertext| may point to the same buffer. * * The callback function must return 0 if it succeeds. If TLS stack - * fails to decrypt data, return :macro:`NGTCP2_ERR_TLS_DECRYPT`. For - * any other errors, return :macro:`NGTCP2_ERR_CALLBACK_FAILURE` which + * fails to decrypt data, return :macro:`NGTCP2_ERR_DECRYPT`. For any + * other errors, return :macro:`NGTCP2_ERR_CALLBACK_FAILURE` which * makes the library call return immediately. */ typedef int (*ngtcp2_decrypt)(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *ciphertext, size_t ciphertextlen, const uint8_t *nonce, size_t noncelen, - const uint8_t *ad, size_t adlen); + const uint8_t *aad, size_t aadlen); /** * @functypedef * * :type:`ngtcp2_hp_mask` is invoked when the ngtcp2 library asks the - * application to produce mask to encrypt or decrypt packet header. + * application to produce a mask to encrypt or decrypt packet header. * The encryption cipher is |hp|. |hp_ctx| is the cipher context * object which is initialized with header protection key. The sample - * is passed as |sample|. + * is passed as |sample| which is :macro:`NGTCP2_HP_SAMPLELEN` bytes + * long. * * The implementation of this callback must produce a mask using the * header protection cipher suite specified by QUIC specification and * write the result into the buffer pointed by |dest|. The length of - * mask must be :macro:`NGTCP2_HP_MASKLEN`. The library ensures that - * |dest| has enough capacity. + * the mask must be at least :macro:`NGTCP2_HP_MASKLEN`. The library + * only uses the first :macro:`NGTCP2_HP_MASKLEN` bytes of the + * produced mask. The buffer pointed by |dest| is guaranteed to have + * at least :macro:`NGTCP2_HP_SAMPLELEN` bytes available for + * convenience. * * The callback function must return 0 if it succeeds, or - * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` which makes the library call - * return immediately. + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` which makes the library call + * return immediately. */ typedef int (*ngtcp2_hp_mask)(uint8_t *dest, const ngtcp2_crypto_cipher *hp, const ngtcp2_crypto_cipher_ctx *hp_ctx, @@ -2477,7 +2754,7 @@ typedef int (*ngtcp2_hp_mask)(uint8_t *dest, const ngtcp2_crypto_cipher *hp, * * :macro:`NGTCP2_STREAM_DATA_FLAG_NONE` indicates no flag set. */ -#define NGTCP2_STREAM_DATA_FLAG_NONE 0x00 +#define NGTCP2_STREAM_DATA_FLAG_NONE 0x00u /** * @macro @@ -2485,7 +2762,7 @@ typedef int (*ngtcp2_hp_mask)(uint8_t *dest, const ngtcp2_crypto_cipher *hp, * :macro:`NGTCP2_STREAM_DATA_FLAG_FIN` indicates that this chunk of * data is final piece of an incoming stream. */ -#define NGTCP2_STREAM_DATA_FLAG_FIN 0x01 +#define NGTCP2_STREAM_DATA_FLAG_FIN 0x01u /** * @macro @@ -2494,21 +2771,21 @@ typedef int (*ngtcp2_hp_mask)(uint8_t *dest, const ngtcp2_crypto_cipher *hp, * data contains data received in 0RTT packet and the handshake has * not completed yet, which means that the data might be replayed. */ -#define NGTCP2_STREAM_DATA_FLAG_EARLY 0x02 +#define NGTCP2_STREAM_DATA_FLAG_EARLY 0x02u /** * @functypedef * * :type:`ngtcp2_recv_stream_data` is invoked when stream data is * received. The stream is specified by |stream_id|. |flags| is the - * bitwise-OR of zero or more of NGTCP2_STREAM_DATA_FLAG_*. See - * :macro:`NGTCP2_STREAM_DATA_FLAG_NONE`. If |flags| & + * bitwise-OR of zero or more of :macro:`NGTCP2_STREAM_DATA_FLAG_* + * `. If |flags| & * :macro:`NGTCP2_STREAM_DATA_FLAG_FIN` is nonzero, this portion of * the data is the last data in this stream. |offset| is the offset * where this data begins. The library ensures that data is passed to - * the application in the non-decreasing order of |offset|. The data - * is passed as |data| of length |datalen|. |datalen| may be 0 if and - * only if |fin| is nonzero. + * the application in the non-decreasing order of |offset| without any + * overlap. The data is passed as |data| of length |datalen|. + * |datalen| may be 0 if and only if |fin| is nonzero. * * If :macro:`NGTCP2_STREAM_DATA_FLAG_EARLY` is set in |flags|, it * indicates that a part of or whole data was received in 0RTT packet @@ -2538,21 +2815,55 @@ typedef int (*ngtcp2_recv_stream_data)(ngtcp2_conn *conn, uint32_t flags, typedef int (*ngtcp2_stream_open)(ngtcp2_conn *conn, int64_t stream_id, void *user_data); +/** + * @macrosection + * + * Stream close flags + */ + +/** + * @macro + * + * :macro:`NGTCP2_STREAM_CLOSE_FLAG_NONE` indicates no flag set. + */ +#define NGTCP2_STREAM_CLOSE_FLAG_NONE 0x00u + +/** + * @macro + * + * :macro:`NGTCP2_STREAM_CLOSE_FLAG_APP_ERROR_CODE_SET` indicates that + * app_error_code parameter is set. + */ +#define NGTCP2_STREAM_CLOSE_FLAG_APP_ERROR_CODE_SET 0x01u + /** * @functypedef * * :type:`ngtcp2_stream_close` is invoked when a stream is closed. * This callback is not called when QUIC connection is closed before - * existing streams are closed. |app_error_code| indicates the error - * code of this closure. + * existing streams are closed. |flags| is the bitwise-OR of zero or + * more of :macro:`NGTCP2_STREAM_CLOSE_FLAG_* + * `. |app_error_code| indicates the + * error code of this closure if + * :macro:`NGTCP2_STREAM_CLOSE_FLAG_APP_ERROR_CODE_SET` is set in + * |flags|. If it is not set, the stream was closed without any error + * code, which generally means success. + * + * |app_error_code| is the first application error code sent by a + * local endpoint, or received from a remote endpoint. If a stream is + * closed cleanly, no application error code is exchanged. Since QUIC + * stack does not know the application error code which indicates "no + * errors", |app_error_code| is set to 0 and + * :macro:`NGTCP2_STREAM_CLOSE_FLAG_APP_ERROR_CODE_SET` is not set in + * |flags| in this case. * * The implementation of this callback should return 0 if it succeeds. * Returning :macro:`NGTCP2_ERR_CALLBACK_FAILURE` makes the library * call return immediately. */ -typedef int (*ngtcp2_stream_close)(ngtcp2_conn *conn, int64_t stream_id, - uint64_t app_error_code, void *user_data, - void *stream_user_data); +typedef int (*ngtcp2_stream_close)(ngtcp2_conn *conn, uint32_t flags, + int64_t stream_id, uint64_t app_error_code, + void *user_data, void *stream_user_data); /** * @functypedef @@ -2575,10 +2886,10 @@ typedef int (*ngtcp2_stream_reset)(ngtcp2_conn *conn, int64_t stream_id, * which is called when stream data is acked, and application can free * the data. The acked range of data is [offset, offset + datalen). * For a given stream_id, this callback is called sequentially in - * increasing order of |offset|. |datalen| is normally strictly - * greater than 0. One exception is that when a packet which includes - * STREAM frame which has fin flag set, and 0 length data, this - * callback is invoked with 0 passed as |datalen|. + * increasing order of |offset| without any overlap. |datalen| is + * normally strictly greater than 0. One exception is that when a + * packet which includes STREAM frame which has fin flag set, and 0 + * length data, this callback is invoked with 0 passed as |datalen|. * * If a stream is closed prematurely and stream data is still * in-flight, this callback function is not called for those data. @@ -2591,26 +2902,6 @@ typedef int (*ngtcp2_acked_stream_data_offset)( ngtcp2_conn *conn, int64_t stream_id, uint64_t offset, uint64_t datalen, void *user_data, void *stream_user_data); -/** - * @functypedef - * - * :type:`ngtcp2_acked_crypto_offset` is a callback function which is - * called when crypto stream data is acknowledged, and application can - * free the data. |crypto_level| indicates the encryption level where - * this data was sent. Crypto data never be sent in - * :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_EARLY`. This works - * like :type:`ngtcp2_acked_stream_data_offset` but crypto stream has - * no stream_id and stream_user_data, and |datalen| never become 0. - * - * The implementation of this callback should return 0 if it succeeds. - * Returning :macro:`NGTCP2_ERR_CALLBACK_FAILURE` makes the library - * call return immediately. - */ -typedef int (*ngtcp2_acked_crypto_offset)(ngtcp2_conn *conn, - ngtcp2_crypto_level crypto_level, - uint64_t offset, uint64_t datalen, - void *user_data); - /** * @functypedef * @@ -2663,16 +2954,11 @@ typedef int (*ngtcp2_extend_max_stream_data)(ngtcp2_conn *conn, * * :type:`ngtcp2_rand` is a callback function to get randomized byte * string from application. Application must fill random |destlen| - * bytes to the buffer pointed by |dest|. |usage| provides the usage - * of the generated random data. - * - * The callback function must return 0 if it succeeds. Returning - * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` makes the library call return - * immediately. + * bytes to the buffer pointed by |dest|. The generated bytes are + * used only in non-cryptographic context. */ -typedef int (*ngtcp2_rand)(uint8_t *dest, size_t destlen, - const ngtcp2_rand_ctx *rand_ctx, - ngtcp2_rand_usage usage); +typedef void (*ngtcp2_rand)(uint8_t *dest, size_t destlen, + const ngtcp2_rand_ctx *rand_ctx); /** * @functypedef @@ -2740,12 +3026,36 @@ typedef int (*ngtcp2_update_key)( const uint8_t *current_rx_secret, const uint8_t *current_tx_secret, size_t secretlen, void *user_data); +/** + * @macrosection + * + * Path validation related macros + */ + +/** + * @macro + * + * :macro:`NGTCP2_PATH_VALIDATION_FLAG_NONE` indicates no flag set. + */ +#define NGTCP2_PATH_VALIDATION_FLAG_NONE 0x00u + +/** + * @macro + * + * :macro:`NGTCP2_PATH_VALIDATION_FLAG_PREFERRED_ADDR` indicates the + * validation involving server preferred address. This flag is only + * set for client. + */ +#define NGTCP2_PATH_VALIDATION_FLAG_PREFERRED_ADDR 0x01u + /** * @functypedef * * :type:`ngtcp2_path_validation` is a callback function which tells - * the application the outcome of path validation. |path| is the path - * that was validated. If |res| is + * the application the outcome of path validation. |flags| is zero or + * more of :macro:`NGTCP2_PATH_VALIDATION_FLAG_* + * `. |path| is the path that was + * validated. If |res| is * :enum:`ngtcp2_path_validation_result.NGTCP2_PATH_VALIDATION_RESULT_SUCCESS`, * the path validation succeeded. If |res| is * :enum:`ngtcp2_path_validation_result.NGTCP2_PATH_VALIDATION_RESULT_FAILURE`, @@ -2755,7 +3065,7 @@ typedef int (*ngtcp2_update_key)( * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` makes the library call return * immediately. */ -typedef int (*ngtcp2_path_validation)(ngtcp2_conn *conn, +typedef int (*ngtcp2_path_validation)(ngtcp2_conn *conn, uint32_t flags, const ngtcp2_path *path, ngtcp2_path_validation_result res, void *user_data); @@ -2766,16 +3076,28 @@ typedef int (*ngtcp2_path_validation)(ngtcp2_conn *conn, * :type:`ngtcp2_select_preferred_addr` is a callback function which * asks a client application to choose server address from preferred * addresses |paddr| received from server. An application should - * write preferred address in |dest|. If an application denies the - * preferred addresses, just leave |dest| unmodified (or set dest->len - * to 0) and return 0. + * write a network path for a selected preferred address in |dest|. + * More specifically, the selected preferred address must be set to + * :member:`dest->remote `, a client source + * address must be set to :member:`dest->local `. + * If a client source address does not change for the new server + * address, leave :member:`dest->local ` + * unmodified, or copy the value of :member:`local + * ` field of the current network path obtained + * from `ngtcp2_conn_get_path()`. Both :member:`dest->local.addr + * ` and :member:`dest->remote.addr + * ` point to buffers which are at least + * ``sizeof(struct sockaddr_storage)`` bytes long, respectively. If + * an application denies the preferred addresses, just leave |dest| + * unmodified (or set :member:`dest->remote.addrlen + * ` to 0) and return 0. * * The callback function must return 0 if it succeeds. Returning * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` makes the library call return * immediately. */ typedef int (*ngtcp2_select_preferred_addr)(ngtcp2_conn *conn, - ngtcp2_addr *dest, + ngtcp2_path *dest, const ngtcp2_preferred_addr *paddr, void *user_data); @@ -2840,7 +3162,9 @@ typedef int (*ngtcp2_recv_new_token)(ngtcp2_conn *conn, const ngtcp2_vec *token, * @functypedef * * :type:`ngtcp2_delete_crypto_aead_ctx` is a callback function which - * must delete the native object pointed by |aead_ctx|->native_handle. + * must delete the native object pointed by + * :member:`aead_ctx->native_handle + * `. */ typedef void (*ngtcp2_delete_crypto_aead_ctx)(ngtcp2_conn *conn, ngtcp2_crypto_aead_ctx *aead_ctx, @@ -2851,7 +3175,8 @@ typedef void (*ngtcp2_delete_crypto_aead_ctx)(ngtcp2_conn *conn, * * :type:`ngtcp2_delete_crypto_cipher_ctx` is a callback function * which must delete the native object pointed by - * |cipher_ctx|->native_handle. + * :member:`cipher_ctx->native_handle + * `. */ typedef void (*ngtcp2_delete_crypto_cipher_ctx)( ngtcp2_conn *conn, ngtcp2_crypto_cipher_ctx *cipher_ctx, void *user_data); @@ -2867,7 +3192,7 @@ typedef void (*ngtcp2_delete_crypto_cipher_ctx)( * * :macro:`NGTCP2_DATAGRAM_FLAG_NONE` indicates no flag set. */ -#define NGTCP2_DATAGRAM_FLAG_NONE 0x00 +#define NGTCP2_DATAGRAM_FLAG_NONE 0x00u /** * @macro @@ -2876,14 +3201,14 @@ typedef void (*ngtcp2_delete_crypto_cipher_ctx)( * is received in 0RTT packet and the handshake has not completed yet, * which means that the data might be replayed. */ -#define NGTCP2_DATAGRAM_FLAG_EARLY 0x01 +#define NGTCP2_DATAGRAM_FLAG_EARLY 0x01u /** * @functypedef * * :type:`ngtcp2_recv_datagram` is invoked when DATAGRAM frame is * received. |flags| is bitwise-OR of zero or more of - * NGTCP2_DATAGRAM_FLAG_*. See :macro:`NGTCP2_DATAGRAM_FLAG_NONE`. + * :macro:`NGTCP2_DATAGRAM_FLAG_* `. * * If :macro:`NGTCP2_DATAGRAM_FLAG_EARLY` is set in |flags|, it * indicates that DATAGRAM frame was received in 0RTT packet and a @@ -2897,6 +3222,107 @@ typedef int (*ngtcp2_recv_datagram)(ngtcp2_conn *conn, uint32_t flags, const uint8_t *data, size_t datalen, void *user_data); +/** + * @functypedef + * + * :type:`ngtcp2_ack_datagram` is invoked when a packet which contains + * DATAGRAM frame which is identified by |dgram_id| is acknowledged. + * |dgram_id| is the valued passed to `ngtcp2_conn_writev_datagram`. + * + * The callback function must return 0 if it succeeds, or + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` which makes the library return + * immediately. + */ +typedef int (*ngtcp2_ack_datagram)(ngtcp2_conn *conn, uint64_t dgram_id, + void *user_data); + +/** + * @functypedef + * + * :type:`ngtcp2_lost_datagram` is invoked when a packet which + * contains DATAGRAM frame which is identified by |dgram_id| is + * declared lost. |dgram_id| is the valued passed to + * `ngtcp2_conn_writev_datagram`. Note that the loss might be + * spurious, and DATAGRAM frame might be acknowledged later. + * + * The callback function must return 0 if it succeeds, or + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` which makes the library return + * immediately. + */ +typedef int (*ngtcp2_lost_datagram)(ngtcp2_conn *conn, uint64_t dgram_id, + void *user_data); + +/** + * @functypedef + * + * :type:`ngtcp2_get_path_challenge_data` is a callback function to + * ask an application for new data that is sent in PATH_CHALLENGE + * frame. Application must generate new unpredictable exactly + * :macro:`NGTCP2_PATH_CHALLENGE_DATALEN` bytes of random data and + * store them into the buffer pointed by |data|. + * + * The callback function must return 0 if it succeeds. Returning + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` makes the library call return + * immediately. + */ +typedef int (*ngtcp2_get_path_challenge_data)(ngtcp2_conn *conn, uint8_t *data, + void *user_data); + +/** + * @functypedef + * + * :type:`ngtcp2_stream_stop_sending` is invoked when a stream is no + * longer read by a local endpoint before it receives all stream data. + * This function is called at most once per stream. |app_error_code| + * is the error code passed to `ngtcp2_conn_shutdown_stream_read` or + * `ngtcp2_conn_shutdown_stream`. + * + * The callback function must return 0 if it succeeds. Returning + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` makes the library call return + * immediately. + */ +typedef int (*ngtcp2_stream_stop_sending)(ngtcp2_conn *conn, int64_t stream_id, + uint64_t app_error_code, + void *user_data, + void *stream_user_data); + +/** + * @functypedef + * + * :type:`ngtcp2_version_negotiation` is invoked when the compatible + * version negotiation takes place. For client, it is called when it + * sees a change in version field of a long header packet. This + * callback function might be called multiple times for client. For + * server, it is called once when the version is negotiated. + * + * The implementation of this callback must install new Initial keys + * for |version|. Use `ngtcp2_conn_install_vneg_initial_key` to + * install keys. + * + * The callback function must return 0 if it succeeds. Returning + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` makes the library call return + * immediately. + */ +typedef int (*ngtcp2_version_negotiation)(ngtcp2_conn *conn, uint32_t version, + const ngtcp2_cid *client_dcid, + void *user_data); + +/** + * @functypedef + * + * :type:`ngtcp2_recv_key` is invoked when new key is installed to + * |conn| during QUIC cryptographic handshake. + * + * The callback function must return 0 if it succeeds. Returning + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` makes the library call return + * immediately. + */ +typedef int (*ngtcp2_recv_key)(ngtcp2_conn *conn, ngtcp2_crypto_level level, + void *user_data); + +#define NGTCP2_CALLBACKS_VERSION_V1 1 +#define NGTCP2_CALLBACKS_VERSION NGTCP2_CALLBACKS_VERSION_V1 + /** * @struct * @@ -2906,13 +3332,14 @@ typedef struct ngtcp2_callbacks { /** * :member:`client_initial` is a callback function which is invoked * when client asks TLS stack to produce first TLS cryptographic - * handshake message. This callback function must be specified. + * handshake message. This callback function must be specified for + * a client application. */ ngtcp2_client_initial client_initial; /** * :member:`recv_client_initial` is a callback function which is * invoked when a server receives the first packet from client. - * This callback function must be specified. + * This callback function must be specified for a server application. */ ngtcp2_recv_client_initial recv_client_initial; /** @@ -2956,14 +3383,6 @@ typedef struct ngtcp2_callbacks { * received. This callback function is optional. */ ngtcp2_recv_stream_data recv_stream_data; - /** - * :member:`acked_crypto_offset` is a callback function which is - * invoked when CRYPTO data is acknowledged by a remote endpoint. - * It tells an application the largest offset of acknowledged CRYPTO - * data without a gap so that the application can free memory for - * the data. This callback function is optional. - */ - ngtcp2_acked_crypto_offset acked_crypto_offset; /** * :member:`acked_stream_data_offset` is a callback function which * is invoked when STREAM data, which includes application data, is @@ -3012,8 +3431,8 @@ typedef struct ngtcp2_callbacks { ngtcp2_extend_max_streams extend_max_local_streams_uni; /** * :member:`rand` is a callback function which is invoked when the - * library needs unpredictable sequence of random data. This - * callback function must be specified. + * library needs sequence of random data. This callback function + * must be specified. */ ngtcp2_rand rand; /** @@ -3031,18 +3450,21 @@ typedef struct ngtcp2_callbacks { /** * :member:`update_key` is a callback function which is invoked when * the library tells an application that it must update keying - * materials and install new keys. This function must be specified. + * materials and install new keys. This callback function must be + * specified. */ ngtcp2_update_key update_key; /** * :member:`path_validation` is a callback function which is invoked - * when path validation completed. This function is optional. + * when path validation completed. This callback function is + * optional. */ ngtcp2_path_validation path_validation; /** * :member:`select_preferred_addr` is a callback function which is * invoked when the library asks a client to select preferred - * address presented by a server. This function is optional. + * address presented by a server. This callback function is + * optional. */ ngtcp2_select_preferred_addr select_preferred_addr; /** @@ -3075,47 +3497,97 @@ typedef struct ngtcp2_callbacks { /** * :member:`dcid_status` is a callback function which is invoked * when the new destination Connection ID is activated or the - * activated destination Connection ID is now deactivated. + * activated destination Connection ID is now deactivated. This + * callback function is optional. */ ngtcp2_connection_id_status dcid_status; /** * :member:`handshake_confirmed` is a callback function which is * invoked when both endpoints agree that handshake has finished. * This field is ignored by server because handshake_completed - * indicates the handshake confirmation for server. + * indicates the handshake confirmation for server. This callback + * function is optional. */ ngtcp2_handshake_confirmed handshake_confirmed; /** * :member:`recv_new_token` is a callback function which is invoked * when new token is received from server. This field is ignored by - * server. + * server. This callback function is optional. */ ngtcp2_recv_new_token recv_new_token; /** * :member:`delete_crypto_aead_ctx` is a callback function which - * deletes a given AEAD cipher context object. + * deletes a given AEAD cipher context object. This callback + * function must be specified. */ ngtcp2_delete_crypto_aead_ctx delete_crypto_aead_ctx; /** * :member:`delete_crypto_cipher_ctx` is a callback function which - * deletes a given cipher context object. + * deletes a given cipher context object. This callback function + * must be specified. */ ngtcp2_delete_crypto_cipher_ctx delete_crypto_cipher_ctx; /** * :member:`recv_datagram` is a callback function which is invoked - * when DATAGRAM frame is received. + * when DATAGRAM frame is received. This callback function is + * optional. */ ngtcp2_recv_datagram recv_datagram; + /** + * :member:`ack_datagram` is a callback function which is invoked + * when a packet containing DATAGRAM frame is acknowledged. This + * callback function is optional. + */ + ngtcp2_ack_datagram ack_datagram; + /** + * :member:`lost_datagram` is a callback function which is invoked + * when a packet containing DATAGRAM frame is declared lost. This + * callback function is optional. + */ + ngtcp2_lost_datagram lost_datagram; + /** + * :member:`get_path_challenge_data` is a callback function which is + * invoked when the library needs new PATH_CHALLENGE data. This + * callback must be specified. + */ + ngtcp2_get_path_challenge_data get_path_challenge_data; + /** + * :member:`stream_stop_sending` is a callback function which is + * invoked when a local endpoint no longer reads from a stream + * before it receives all stream data. This callback function is + * optional. + */ + ngtcp2_stream_stop_sending stream_stop_sending; + /** + * :member:`version_negotiation` is a callback function which is + * invoked when the compatible version negotiation takes place. + * This callback function must be specified. + */ + ngtcp2_version_negotiation version_negotiation; + /** + * :member:`recv_rx_key` is a callback function which is invoked + * when a new key for decrypting packets is installed during QUIC + * cryptographic handshake. It is not called for + * :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_INITIAL`. + */ + ngtcp2_recv_key recv_rx_key; + /** + * :member:`recv_tx_key` is a callback function which is invoked + * when a new key for encrypting packets is installed during QUIC + * cryptographic handshake. It is not called for + * :enum:`ngtcp2_crypto_level.NGTCP2_CRYPTO_LEVEL_INITIAL`. + */ + ngtcp2_recv_key recv_tx_key; } ngtcp2_callbacks; /** * @function * * `ngtcp2_pkt_write_connection_close` writes Initial packet - * containing CONNECTION_CLOSE frame with the given |error_code| to - * the buffer pointed by |dest| of length |destlen|. All encryption - * parameters are for Initial packet encryption. The packet number is - * always 0. + * containing CONNECTION_CLOSE frame with the given |error_code| and + * the optional |reason| of length |reasonlen| to the buffer pointed + * by |dest| of length |destlen|. All encryption parameters are for + * Initial packet encryption. The packet number is always 0. * * The primary use case of this function is for server to send * CONNECTION_CLOSE frame in Initial packet to close connection @@ -3131,20 +3603,24 @@ typedef struct ngtcp2_callbacks { */ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_pkt_write_connection_close( uint8_t *dest, size_t destlen, uint32_t version, const ngtcp2_cid *dcid, - const ngtcp2_cid *scid, uint64_t error_code, ngtcp2_encrypt encrypt, - const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, - const uint8_t *iv, ngtcp2_hp_mask hp_mask, const ngtcp2_crypto_cipher *hp, + const ngtcp2_cid *scid, uint64_t error_code, const uint8_t *reason, + size_t reasonlen, ngtcp2_encrypt encrypt, const ngtcp2_crypto_aead *aead, + const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *iv, + ngtcp2_hp_mask hp_mask, const ngtcp2_crypto_cipher *hp, const ngtcp2_crypto_cipher_ctx *hp_ctx); /** * @function * * `ngtcp2_pkt_write_retry` writes Retry packet in the buffer pointed - * by |dest| whose length is |destlen|. |odcid| specifies Original - * Destination Connection ID. |token| specifies Retry Token, and - * |tokenlen| specifies its length. |aead| must be AEAD_AES_128_GCM. - * |aead_ctx| must be initialized with :macro:`NGTCP2_RETRY_KEY` as an - * encryption key. + * by |dest| whose length is |destlen|. |dcid| is the destination + * connection ID which appeared in a packet as a source connection ID + * sent by client. |scid| is a server chosen source connection ID. + * |odcid| specifies Original Destination Connection ID which appeared + * in a packet as a destination connection ID sent by client. |token| + * specifies Retry Token, and |tokenlen| specifies its length. |aead| + * must be AEAD_AES_128_GCM. |aead_ctx| must be initialized with + * :macro:`NGTCP2_RETRY_KEY` as an encryption key. * * This function returns the number of bytes written to the buffer, or * one of the following negative error codes: @@ -3153,6 +3629,9 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_pkt_write_connection_close( * Buffer is too small. * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` * Callback function failed. + * :macro:`NGTCP2_ERR_INVALID_ARGUMENT` + * :member:`odcid->datalen ` is less than + * :macro:`NGTCP2_MIN_INITIAL_DCIDLEN`. */ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_pkt_write_retry( uint8_t *dest, size_t destlen, uint32_t version, const ngtcp2_cid *dcid, @@ -3164,15 +3643,21 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_pkt_write_retry( * @function * * `ngtcp2_accept` is used by server implementation, and decides - * whether packet |pkt| of length |pktlen| is acceptable for initial - * packet from client. + * whether packet |pkt| of length |pktlen| from client is acceptable + * for the very initial packet to a connection. + * + * If |dest| is not ``NULL`` and the function returns 0, or + * :macro:`NGTCP2_ERR_RETRY`, the decoded packet header is stored to + * the object pointed by |dest|. * - * If it is acceptable, it returns 0. If it is not acceptable, and - * Version Negotiation packet is required to send, it returns 1. - * Otherwise, it returns -1. + * This function returns 0 if it succeeds, or one of the following + * negative error codes: * - * If |dest| is not ``NULL``, and the return value is 0 or 1, the - * decoded packet header is stored to the object pointed by |dest|. + * :macro:`NGTCP2_ERR_RETRY` + * Retry packet should be sent. + * :macro:`NGTCP2_ERR_INVALID_ARGUMENT` + * The packet is not acceptable for the very first packet to a new + * connection; or the function failed to parse the packet header. */ NGTCP2_EXTERN int ngtcp2_accept(ngtcp2_pkt_hd *dest, const uint8_t *pkt, size_t pktlen); @@ -3182,15 +3667,16 @@ NGTCP2_EXTERN int ngtcp2_accept(ngtcp2_pkt_hd *dest, const uint8_t *pkt, * * `ngtcp2_conn_client_new` creates new :type:`ngtcp2_conn`, and * initializes it as client. |dcid| is randomized destination - * connection ID. |scid| is source connection ID. |version| is a - * QUIC version to use. |path| is the network path where this QUIC - * connection is being established and must not be ``NULL``. - * |callbacks|, |settings|, and |params| must not be ``NULL``, and the - * function make a copy of each of them. |params| is local QUIC - * transport parameters and sent to a remote endpoint during - * handshake. |user_data| is the arbitrary pointer which is passed to - * the user-defined callback functions. If |mem| is ``NULL``, the - * memory allocator returned by `ngtcp2_mem_default()` is used. + * connection ID. |scid| is source connection ID. + * |client_chosen_version| is a QUIC version that a client chooses. + * |path| is the network path where this QUIC connection is being + * established and must not be ``NULL``. |callbacks|, |settings|, and + * |params| must not be ``NULL``, and the function make a copy of each + * of them. |params| is local QUIC transport parameters and sent to a + * remote endpoint during handshake. |user_data| is the arbitrary + * pointer which is passed to the user-defined callback functions. If + * |mem| is ``NULL``, the memory allocator returned by + * `ngtcp2_mem_default()` is used. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -3198,13 +3684,13 @@ NGTCP2_EXTERN int ngtcp2_accept(ngtcp2_pkt_hd *dest, const uint8_t *pkt, * :macro:`NGTCP2_ERR_NOMEM` * Out of memory. */ -NGTCP2_EXTERN int -ngtcp2_conn_client_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, - const ngtcp2_cid *scid, const ngtcp2_path *path, - uint32_t version, const ngtcp2_callbacks *callbacks, - const ngtcp2_settings *settings, - const ngtcp2_transport_params *params, - const ngtcp2_mem *mem, void *user_data); +NGTCP2_EXTERN int ngtcp2_conn_client_new_versioned( + ngtcp2_conn **pconn, const ngtcp2_cid *dcid, const ngtcp2_cid *scid, + const ngtcp2_path *path, uint32_t client_chosen_version, + int callbacks_version, const ngtcp2_callbacks *callbacks, + int settings_version, const ngtcp2_settings *settings, + int transport_params_version, const ngtcp2_transport_params *params, + const ngtcp2_mem *mem, void *user_data); /** * @function @@ -3212,14 +3698,14 @@ ngtcp2_conn_client_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, * `ngtcp2_conn_server_new` creates new :type:`ngtcp2_conn`, and * initializes it as server. |dcid| is a destination connection ID. * |scid| is a source connection ID. |path| is the network path where - * this QUIC connection is being established and must not be ``NULL`. - * |version| is a QUIC version to use. |callbacks|, |settings|, and - * |params| must not be ``NULL``, and the function make a copy of each - * of them. |params| is local QUIC transport parameters and sent to a - * remote endpoint during handshake. |user_data| is the arbitrary - * pointer which is passed to the user-defined callback functions. If - * |mem| is ``NULL``, the memory allocator returned by - * `ngtcp2_mem_default()` is used. + * this QUIC connection is being established and must not be ``NULL``. + * |client_chosen_version| is a QUIC version that a client chooses. + * |callbacks|, |settings|, and |params| must not be ``NULL``, and the + * function make a copy of each of them. |params| is local QUIC + * transport parameters and sent to a remote endpoint during + * handshake. |user_data| is the arbitrary pointer which is passed to + * the user-defined callback functions. If |mem| is ``NULL``, the + * memory allocator returned by `ngtcp2_mem_default()` is used. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -3227,13 +3713,13 @@ ngtcp2_conn_client_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, * :macro:`NGTCP2_ERR_NOMEM` * Out of memory. */ -NGTCP2_EXTERN int -ngtcp2_conn_server_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, - const ngtcp2_cid *scid, const ngtcp2_path *path, - uint32_t version, const ngtcp2_callbacks *callbacks, - const ngtcp2_settings *settings, - const ngtcp2_transport_params *params, - const ngtcp2_mem *mem, void *user_data); +NGTCP2_EXTERN int ngtcp2_conn_server_new_versioned( + ngtcp2_conn **pconn, const ngtcp2_cid *dcid, const ngtcp2_cid *scid, + const ngtcp2_path *path, uint32_t client_chosen_version, + int callbacks_version, const ngtcp2_callbacks *callbacks, + int settings_version, const ngtcp2_settings *settings, + int transport_params_version, const ngtcp2_transport_params *params, + const ngtcp2_mem *mem, void *user_data); /** * @function @@ -3249,56 +3735,59 @@ NGTCP2_EXTERN void ngtcp2_conn_del(ngtcp2_conn *conn); * `ngtcp2_conn_read_pkt` decrypts QUIC packet given in |pkt| of * length |pktlen| and processes it. |path| is the network path the * packet is delivered and must not be ``NULL``. |pi| is packet - * metadata and must not be ``NULL``. This function performs QUIC - * handshake as well. + * metadata and may be ``NULL``. This function performs QUIC handshake + * as well. * * This function must not be called from inside the callback * functions. * * This function returns 0 if it succeeds, or negative error codes. - * In general, if the error code which satisfies - * `ngtcp2_err_is_fatal(err) ` != 0 is returned, - * the application should just close the connection by calling - * `ngtcp2_conn_write_connection_close` or just delete the QUIC - * connection using `ngtcp2_conn_del`. It is undefined to call the - * other library functions. If :macro:`NGTCP2_ERR_RETRY` is returned, - * application must be a server and it must perform address validation - * by sending Retry packet and close the connection. If + * If :macro:`NGTCP2_ERR_RETRY` is returned, application must be a + * server and it must perform address validation by sending Retry + * packet and discard the connection state. If * :macro:`NGTCP2_ERR_DROP_CONN` is returned, server application must * drop the connection silently (without sending any CONNECTION_CLOSE - * frame) and discard connection state. + * frame) and discard connection state. If + * :macro:`NGTCP2_ERR_DRAINING` is returned, a connection has entered + * the draining state, and no further packet transmission is allowed. + * If :macro:`NGTCP2_ERR_CRYPTO` is returned, the error happened in + * TLS stack and `ngtcp2_conn_get_tls_alert` returns TLS alert if set. + * + * If any other negative errors are returned, call + * `ngtcp2_conn_write_connection_close` to get terminal packet, and + * sending it makes QUIC connection enter the closing state. */ -NGTCP2_EXTERN int ngtcp2_conn_read_pkt(ngtcp2_conn *conn, - const ngtcp2_path *path, - const ngtcp2_pkt_info *pi, - const uint8_t *pkt, size_t pktlen, - ngtcp2_tstamp ts); +NGTCP2_EXTERN int +ngtcp2_conn_read_pkt_versioned(ngtcp2_conn *conn, const ngtcp2_path *path, + int pkt_info_version, const ngtcp2_pkt_info *pi, + const uint8_t *pkt, size_t pktlen, + ngtcp2_tstamp ts); /** * @function * * `ngtcp2_conn_write_pkt` is equivalent to calling - * `ngtcp2_conn_writev_stream` without specifying stream data and + * `ngtcp2_conn_writev_stream` with -1 as stream_id, no stream data, and * :macro:`NGTCP2_WRITE_STREAM_FLAG_NONE` as flags. */ -NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_pkt(ngtcp2_conn *conn, - ngtcp2_path *path, - ngtcp2_pkt_info *pi, - uint8_t *dest, size_t destlen, - ngtcp2_tstamp ts); +NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_pkt_versioned( + ngtcp2_conn *conn, ngtcp2_path *path, int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, ngtcp2_tstamp ts); /** * @function * - * `ngtcp2_conn_handshake_completed` tells |conn| that the QUIC - * handshake has completed. + * `ngtcp2_conn_handshake_completed` tells |conn| that the TLS stack + * declares TLS handshake completion. This does not mean QUIC + * handshake has completed. The library needs extra conditions to be + * met. */ NGTCP2_EXTERN void ngtcp2_conn_handshake_completed(ngtcp2_conn *conn); /** * @function * - * `ngtcp2_conn_get_handshake_completed` returns nonzero if handshake + * `ngtcp2_conn_get_handshake_completed` returns nonzero if QUIC handshake * has completed. */ NGTCP2_EXTERN int ngtcp2_conn_get_handshake_completed(ngtcp2_conn *conn); @@ -3308,14 +3797,17 @@ NGTCP2_EXTERN int ngtcp2_conn_get_handshake_completed(ngtcp2_conn *conn); * * `ngtcp2_conn_install_initial_key` installs packet protection keying * materials for Initial packets. |rx_aead_ctx| is AEAD cipher - * context object and must be initialized with decryption key, IV - * |rx_iv| of length |rx_ivlen|, and packet header protection cipher - * context object |rx_hp_ctx| to decrypt incoming Initial packets. + * context object and must be initialized with a decryption key. + * |rx_iv| is IV of length |rx_ivlen| for decryption. |rx_hp_ctx| is + * a packet header protection cipher context object for decryption. * Similarly, |tx_aead_ctx|, |tx_iv| and |tx_hp_ctx| are for * encrypting outgoing packets and are the same length with the * decryption counterpart . If they have already been set, they are * overwritten. * + * |ivlen| must be the minimum length of AEAD nonce, or 8 bytes if + * that is larger. + * * If this function succeeds, |conn| takes ownership of |rx_aead_ctx|, * |rx_hp_ctx|, |tx_aead_ctx|, and |tx_hp_ctx|. * :type:`ngtcp2_delete_crypto_aead_ctx` and @@ -3339,15 +3831,53 @@ NGTCP2_EXTERN int ngtcp2_conn_install_initial_key( const ngtcp2_crypto_aead_ctx *tx_aead_ctx, const uint8_t *tx_iv, const ngtcp2_crypto_cipher_ctx *tx_hp_ctx, size_t ivlen); +/** + * @function + * + * `ngtcp2_conn_install_vneg_initial_key` installs packet protection + * keying materials for Initial packets on compatible version + * negotiation for |version|. |rx_aead_ctx| is AEAD cipher context + * object and must be initialized with a decryption key. |rx_iv| is + * IV of length |rx_ivlen| for decryption. |rx_hp_ctx| is a packet + * header protection cipher context object for decryption. Similarly, + * |tx_aead_ctx|, |tx_iv| and |tx_hp_ctx| are for encrypting outgoing + * packets and are the same length with the decryption counterpart . + * If they have already been set, they are overwritten. + * + * |ivlen| must be the minimum length of AEAD nonce, or 8 bytes if + * that is larger. + * + * If this function succeeds, |conn| takes ownership of |rx_aead_ctx|, + * |rx_hp_ctx|, |tx_aead_ctx|, and |tx_hp_ctx|. + * :type:`ngtcp2_delete_crypto_aead_ctx` and + * :type:`ngtcp2_delete_crypto_cipher_ctx` will be called to delete + * these objects when they are no longer used. If this function + * fails, the caller is responsible to delete them. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :macro:`NGTCP2_ERR_NOMEM` + * Out of memory. + */ +NGTCP2_EXTERN int ngtcp2_conn_install_vneg_initial_key( + ngtcp2_conn *conn, uint32_t version, + const ngtcp2_crypto_aead_ctx *rx_aead_ctx, const uint8_t *rx_iv, + const ngtcp2_crypto_cipher_ctx *rx_hp_ctx, + const ngtcp2_crypto_aead_ctx *tx_aead_ctx, const uint8_t *tx_iv, + const ngtcp2_crypto_cipher_ctx *tx_hp_ctx, size_t ivlen); + /** * @function * * `ngtcp2_conn_install_rx_handshake_key` installs packet protection * keying materials for decrypting incoming Handshake packets. * |aead_ctx| is AEAD cipher context object which must be initialized - * with decryption key, IV |iv| of length |ivlen|, and packet header - * protection cipher context object |hp_ctx| to decrypt incoming - * Handshake packets. + * with a decryption key. |iv| is IV of length |ivlen|. |hp_ctx| is + * a packet header protection cipher context object. + * + * |ivlen| must be the minimum length of AEAD nonce, or 8 bytes if + * that is larger. * * If this function succeeds, |conn| takes ownership of |aead_ctx|, * and |hp_ctx|. :type:`ngtcp2_delete_crypto_aead_ctx` and @@ -3371,9 +3901,11 @@ NGTCP2_EXTERN int ngtcp2_conn_install_rx_handshake_key( * `ngtcp2_conn_install_tx_handshake_key` installs packet protection * keying materials for encrypting outgoing Handshake packets. * |aead_ctx| is AEAD cipher context object which must be initialized - * with encryption key, IV |iv| of length |ivlen|, and packet header - * protection cipher context object |hp_ctx| to encrypt outgoing - * Handshake packets. + * with an encryption key. |iv| is IV of length |ivlen|. |hp_ctx| is + * a packet header protection cipher context object. + * + * |ivlen| must be the minimum length of AEAD nonce, or 8 bytes if + * that is larger. * * If this function succeeds, |conn| takes ownership of |aead_ctx| and * |hp_ctx|. :type:`ngtcp2_delete_crypto_aead_ctx` and @@ -3399,6 +3931,9 @@ NGTCP2_EXTERN int ngtcp2_conn_install_tx_handshake_key( * packet header protection cipher context object |hp_ctx| to encrypt * (for client) or decrypt (for server) 0RTT packets. * + * |ivlen| must be the minimum length of AEAD nonce, or 8 bytes if + * that is larger. + * * If this function succeeds, |conn| takes ownership of |aead_ctx| and * |hp_ctx|. :type:`ngtcp2_delete_crypto_aead_ctx` and * :type:`ngtcp2_delete_crypto_cipher_ctx` will be called to delete @@ -3419,12 +3954,15 @@ NGTCP2_EXTERN int ngtcp2_conn_install_early_key( * @function * * `ngtcp2_conn_install_rx_key` installs packet protection keying - * materials for decrypting Short packets. |secret| of length + * materials for decrypting Short header packets. |secret| of length * |secretlen| is the decryption secret which is used to derive keying * materials passed to this function. |aead_ctx| is AEAD cipher - * context object which must be initialized with decryption key, IV - * |iv| of length |ivlen|, and packet header protection cipher context - * object |hp_ctx| to decrypt incoming Short packets. + * context object which must be initialized with a decryption key. + * |iv| is IV of length |ivlen|. |hp_ctx| is a packet header + * protection cipher context object. + * + * |ivlen| must be the minimum length of AEAD nonce, or 8 bytes if + * that is larger. * * If this function succeeds, |conn| takes ownership of |aead_ctx| and * |hp_ctx|. :type:`ngtcp2_delete_crypto_aead_ctx` and @@ -3447,12 +3985,15 @@ NGTCP2_EXTERN int ngtcp2_conn_install_rx_key( * @function * * `ngtcp2_conn_install_tx_key` installs packet protection keying - * materials for encrypting Short packets. |secret| of length + * materials for encrypting Short header packets. |secret| of length * |secretlen| is the encryption secret which is used to derive keying * materials passed to this function. |aead_ctx| is AEAD cipher - * context object which must be initialized with encryption key, IV - * |iv| of length |ivlen|, and packet header protection cipher context - * object |hp_ctx| to encrypt outgoing Short packets. + * context object which must be initialized with an encryption key. + * |iv| is IV of length |ivlen|. |hp_ctx| is a packet header + * protection cipher context object. + * + * |ivlen| must be the minimum length of AEAD nonce, or 8 bytes if + * that is larger. * * If this function succeeds, |conn| takes ownership of |aead_ctx| and * |hp_ctx|. :type:`ngtcp2_delete_crypto_aead_ctx` and @@ -3492,7 +4033,7 @@ NGTCP2_EXTERN int ngtcp2_conn_initiate_key_update(ngtcp2_conn *conn, * `ngtcp2_conn_set_tls_error` sets the TLS related error |liberr| in * |conn|. |liberr| must be one of ngtcp2 library error codes (which * is defined as NGTCP2_ERR_* macro, such as - * :macro:`NGTCP2_ERR_TLS_DECRYPT`). In general, error code should be + * :macro:`NGTCP2_ERR_DECRYPT`). In general, error code should be * propagated via return value, but sometimes ngtcp2 API is called * inside callback function of TLS stack and it does not allow to * return ngtcp2 error code directly. In this case, implementation @@ -3510,6 +4051,34 @@ NGTCP2_EXTERN void ngtcp2_conn_set_tls_error(ngtcp2_conn *conn, int liberr); */ NGTCP2_EXTERN int ngtcp2_conn_get_tls_error(ngtcp2_conn *conn); +/** + * @function + * + * `ngtcp2_conn_set_tls_alert` sets a TLS alert |alert| generated by a + * local endpoint to |conn|. + */ +NGTCP2_EXTERN void ngtcp2_conn_set_tls_alert(ngtcp2_conn *conn, uint8_t alert); + +/** + * @function + * + * `ngtcp2_conn_get_tls_alert` returns the value set by + * `ngtcp2_conn_set_tls_alert`. If no value is set, this function + * returns 0. + */ +NGTCP2_EXTERN uint8_t ngtcp2_conn_get_tls_alert(ngtcp2_conn *conn); + +/** + * @function + * + * `ngtcp2_conn_set_keep_alive_timeout` sets keep-alive timeout. If + * nonzero value is given, after a connection is idle at least in a + * given amount of time, a keep-alive packet is sent. If 0 is set, + * keep-alive functionality is disabled and this is the default. + */ +NGTCP2_EXTERN void ngtcp2_conn_set_keep_alive_timeout(ngtcp2_conn *conn, + ngtcp2_duration timeout); + /** * @function * @@ -3529,15 +4098,6 @@ NGTCP2_EXTERN ngtcp2_tstamp ngtcp2_conn_get_expiry(ngtcp2_conn *conn); NGTCP2_EXTERN int ngtcp2_conn_handle_expiry(ngtcp2_conn *conn, ngtcp2_tstamp ts); -/** - * @function - * - * `ngtcp2_conn_get_idle_expiry` returns the time when a connection - * should be closed if it continues to be idle. If idle timeout is - * disabled, this function returns ``UINT64_MAX``. - */ -NGTCP2_EXTERN ngtcp2_tstamp ngtcp2_conn_get_idle_expiry(ngtcp2_conn *conn); - /** * @function * @@ -3548,51 +4108,71 @@ NGTCP2_EXTERN ngtcp2_duration ngtcp2_conn_get_pto(ngtcp2_conn *conn); /** * @function * - * `ngtcp2_conn_set_remote_transport_params` sets transport parameter - * |params| to |conn|. + * `ngtcp2_conn_decode_remote_transport_params` decodes QUIC transport + * parameters from the buffer pointed by |data| of length |datalen|, + * and sets the result to |conn|. * * This function returns 0 if it succeeds, or one of the following * negative error codes: * - * :macro:`NGTCP2_ERR_PROTO` - * If |conn| is server, and negotiated_version field is not the - * same as the used version. + * :macro:`NGTCP2_ERR_REQUIRED_TRANSPORT_PARAM` + * The required parameter is missing. + * :macro:`NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM` + * The input is malformed. + * :macro:`NGTCP2_ERR_TRANSPORT_PARAM` + * Failed to validate the remote QUIC transport parameters. + * :macro:`NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE` + * Version negotiation failure. + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` + * User callback failed */ NGTCP2_EXTERN int -ngtcp2_conn_set_remote_transport_params(ngtcp2_conn *conn, - const ngtcp2_transport_params *params); +ngtcp2_conn_decode_remote_transport_params(ngtcp2_conn *conn, + const uint8_t *data, size_t datalen); /** * @function * - * `ngtcp2_conn_get_remote_transport_params` fills settings values in - * |params|. original_connection_id and - * original_connection_id_present are always zero filled. + * `ngtcp2_conn_get_remote_transport_params` returns a pointer to the + * remote QUIC transport parameters. If no remote transport + * parameters are set, it returns NULL. */ -NGTCP2_EXTERN void -ngtcp2_conn_get_remote_transport_params(ngtcp2_conn *conn, - ngtcp2_transport_params *params); +NGTCP2_EXTERN const ngtcp2_transport_params * +ngtcp2_conn_get_remote_transport_params(ngtcp2_conn *conn); /** * @function * * `ngtcp2_conn_set_early_remote_transport_params` sets |params| as - * transport parameter previously received from a server. The - * parameters are used to send 0-RTT data. QUIC requires that client - * application should remember transport parameter as well as session - * ticket. - * - * At least following fields must be set: - * - * * initial_max_stream_id_bidi - * * initial_max_stream_id_uni - * * initial_max_stream_data_bidi_local - * * initial_max_stream_data_bidi_remote - * * initial_max_stream_data_uni - * * initial_max_data - */ -NGTCP2_EXTERN void ngtcp2_conn_set_early_remote_transport_params( - ngtcp2_conn *conn, const ngtcp2_transport_params *params); + * transport parameters previously received from a server. The + * parameters are used to send early data. QUIC requires that client + * application should remember transport parameters along with a + * session ticket. + * + * At least following fields should be set: + * + * - initial_max_stream_id_bidi + * - initial_max_stream_id_uni + * - initial_max_stream_data_bidi_local + * - initial_max_stream_data_bidi_remote + * - initial_max_stream_data_uni + * - initial_max_data + * - active_connection_id_limit + * - max_datagram_frame_size (if DATAGRAM extension was negotiated) + * + * The following fields are ignored: + * + * - ack_delay_exponent + * - max_ack_delay + * - initial_scid + * - original_dcid + * - preferred_address and preferred_address_present + * - retry_scid and retry_scid_present + * - stateless_reset_token and stateless_reset_token_present + */ +NGTCP2_EXTERN void ngtcp2_conn_set_early_remote_transport_params_versioned( + ngtcp2_conn *conn, int transport_params_version, + const ngtcp2_transport_params *params); /** * @function @@ -3611,19 +4191,35 @@ NGTCP2_EXTERN void ngtcp2_conn_set_early_remote_transport_params( * :macro:`NGTCP2_ERR_INVALID_STATE` * `ngtcp2_conn_install_tx_handshake_key` has been called. */ -NGTCP2_EXTERN int -ngtcp2_conn_set_local_transport_params(ngtcp2_conn *conn, - const ngtcp2_transport_params *params); +NGTCP2_EXTERN int ngtcp2_conn_set_local_transport_params_versioned( + ngtcp2_conn *conn, int transport_params_version, + const ngtcp2_transport_params *params); /** * @function * - * `ngtcp2_conn_get_local_transport_params` fills settings values in - * |params|. + * `ngtcp2_conn_get_local_transport_params` returns a pointer to the + * local QUIC transport parameters. */ -NGTCP2_EXTERN void -ngtcp2_conn_get_local_transport_params(ngtcp2_conn *conn, - ngtcp2_transport_params *params); +NGTCP2_EXTERN const ngtcp2_transport_params * +ngtcp2_conn_get_local_transport_params(ngtcp2_conn *conn); + +/** + * @function + * + * `ngtcp2_conn_encode_local_transport_params` encodes the local QUIC + * transport parameters in |dest| of length |destlen|. This is + * equivalent to calling `ngtcp2_conn_get_local_transport_params` and + * then `ngtcp2_encode_transport_params`. + * + * This function returns the number of written, or one of the + * following negative error codes: + * + * :macro:`NGTCP2_ERR_NOBUF` + * Buffer is too small. + */ +NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_encode_local_transport_params( + ngtcp2_conn *conn, uint8_t *dest, size_t destlen); /** * @function @@ -3636,7 +4232,7 @@ ngtcp2_conn_get_local_transport_params(ngtcp2_conn *conn, * 0RTT packet, application can call this function after calling * `ngtcp2_conn_set_early_remote_transport_params`. For 1RTT packet, * application can call this function after calling - * `ngtcp2_conn_set_remote_transport_params` and + * `ngtcp2_conn_decode_remote_transport_params` and * `ngtcp2_conn_install_tx_key`. If ngtcp2 crypto support library is * used, application can call this function after calling * `ngtcp2_crypto_derive_and_install_tx_key` for 1RTT packet. @@ -3664,7 +4260,7 @@ NGTCP2_EXTERN int ngtcp2_conn_open_bidi_stream(ngtcp2_conn *conn, * 0RTT packet, application can call this function after calling * `ngtcp2_conn_set_early_remote_transport_params`. For 1RTT packet, * application can call this function after calling - * `ngtcp2_conn_set_remote_transport_params` and + * `ngtcp2_conn_decode_remote_transport_params` and * `ngtcp2_conn_install_tx_key`. If ngtcp2 crypto support library is * used, application can call this function after calling * `ngtcp2_crypto_derive_and_install_tx_key` for 1RTT packet. @@ -3698,8 +4294,6 @@ NGTCP2_EXTERN int ngtcp2_conn_open_uni_stream(ngtcp2_conn *conn, * * :macro:`NGTCP2_ERR_NOMEM` * Out of memory - * :macro:`NGTCP2_ERR_STREAM_NOT_FOUND` - * Stream does not exist */ NGTCP2_EXTERN int ngtcp2_conn_shutdown_stream(ngtcp2_conn *conn, int64_t stream_id, @@ -3720,8 +4314,6 @@ NGTCP2_EXTERN int ngtcp2_conn_shutdown_stream(ngtcp2_conn *conn, * * :macro:`NGTCP2_ERR_NOMEM` * Out of memory - * :macro:`NGTCP2_ERR_STREAM_NOT_FOUND` - * Stream does not exist */ NGTCP2_EXTERN int ngtcp2_conn_shutdown_stream_write(ngtcp2_conn *conn, int64_t stream_id, @@ -3741,8 +4333,6 @@ NGTCP2_EXTERN int ngtcp2_conn_shutdown_stream_write(ngtcp2_conn *conn, * * :macro:`NGTCP2_ERR_NOMEM` * Out of memory - * :macro:`NGTCP2_ERR_STREAM_NOT_FOUND` - * Stream does not exist */ NGTCP2_EXTERN int ngtcp2_conn_shutdown_stream_read(ngtcp2_conn *conn, int64_t stream_id, @@ -3759,7 +4349,7 @@ NGTCP2_EXTERN int ngtcp2_conn_shutdown_stream_read(ngtcp2_conn *conn, * * :macro:`NGTCP2_WRITE_STREAM_FLAG_NONE` indicates no flag set. */ -#define NGTCP2_WRITE_STREAM_FLAG_NONE 0x00 +#define NGTCP2_WRITE_STREAM_FLAG_NONE 0x00u /** * @macro @@ -3767,7 +4357,7 @@ NGTCP2_EXTERN int ngtcp2_conn_shutdown_stream_read(ngtcp2_conn *conn, * :macro:`NGTCP2_WRITE_STREAM_FLAG_MORE` indicates that more data may * come and should be coalesced into the same packet if possible. */ -#define NGTCP2_WRITE_STREAM_FLAG_MORE 0x01 +#define NGTCP2_WRITE_STREAM_FLAG_MORE 0x01u /** * @macro @@ -3775,7 +4365,7 @@ NGTCP2_EXTERN int ngtcp2_conn_shutdown_stream_read(ngtcp2_conn *conn, * :macro:`NGTCP2_WRITE_STREAM_FLAG_FIN` indicates that the passed * data is the final part of a stream. */ -#define NGTCP2_WRITE_STREAM_FLAG_FIN 0x02 +#define NGTCP2_WRITE_STREAM_FLAG_FIN 0x02u /** * @function @@ -3784,10 +4374,11 @@ NGTCP2_EXTERN int ngtcp2_conn_shutdown_stream_read(ngtcp2_conn *conn, * `ngtcp2_conn_writev_stream`. The only difference is that it * conveniently accepts a single buffer. */ -NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_stream( - ngtcp2_conn *conn, ngtcp2_path *path, ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, ngtcp2_ssize *pdatalen, uint32_t flags, int64_t stream_id, - const uint8_t *data, size_t datalen, ngtcp2_tstamp ts); +NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_stream_versioned( + ngtcp2_conn *conn, ngtcp2_path *path, int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, ngtcp2_ssize *pdatalen, + uint32_t flags, int64_t stream_id, const uint8_t *data, size_t datalen, + ngtcp2_tstamp ts); /** * @function @@ -3797,6 +4388,9 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_stream( * pointed by |dest| of length |destlen|. This function performs QUIC * handshake as well. * + * |destlen| should be at least + * :member:`ngtcp2_settings.max_udp_payload_size`. + * * Specifying -1 to |stream_id| means no new stream data to send. * * If |path| is not ``NULL``, this function stores the network path @@ -3839,8 +4433,8 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_stream( * by default, application can only send 1 STREAM frame in one QUIC * packet. In order to include more than 1 STREAM frame in one QUIC * packet, specify :macro:`NGTCP2_WRITE_STREAM_FLAG_MORE` in |flags|. - * This is analogous to ``MSG_MORE`` flag in ``send(2)``. If the - * :macro:`NGTCP2_WRITE_STREAM_FLAG_MORE` is used, there are 4 + * This is analogous to ``MSG_MORE`` flag in :manpage:`send(2)`. If + * the :macro:`NGTCP2_WRITE_STREAM_FLAG_MORE` is used, there are 4 * outcomes: * * - The function returns the written length of packet just like @@ -3865,12 +4459,12 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_stream( * * When application sees :macro:`NGTCP2_ERR_WRITE_MORE`, it must not * call other ngtcp2 API functions (application can still call - * `ngtcp2_conn_write_connection_close` or - * `ngtcp2_conn_write_application_close` to handle error from this + * `ngtcp2_conn_write_connection_close` to handle error from this * function). Just keep calling `ngtcp2_conn_writev_stream`, * `ngtcp2_conn_write_pkt`, or `ngtcp2_conn_writev_datagram` until it * returns a positive number (which indicates a complete packet is - * ready). + * ready). If there is no stream data to include, call this function + * with |stream_id| as -1 to stop coalescing and write a packet. * * This function returns 0 if it cannot write any frame because buffer * is too small, or packet is congestion limited. Application should @@ -3879,6 +4473,12 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_stream( * This function must not be called from inside the callback * functions. * + * If pacing is enabled, `ngtcp2_conn_update_pkt_tx_time` must be + * called after this function. Application may call this function + * multiple times before calling `ngtcp2_conn_update_pkt_tx_time`. + * Packet pacing is enabled if BBR congestion controller algorithm is + * used. + * * This function returns the number of bytes written in |dest| if it * succeeds, or one of the following negative error codes: * @@ -3892,6 +4492,8 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_stream( * Packet number is exhausted, and cannot send any more packet. * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` * User callback failed + * :macro:`NGTCP2_ERR_INVALID_ARGUMENT` + * The total length of stream data is too large. * :macro:`NGTCP2_ERR_STREAM_DATA_BLOCKED` * Stream is blocked because of flow control. * :macro:`NGTCP2_ERR_WRITE_MORE` @@ -3906,10 +4508,11 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_stream( * connection using `ngtcp2_conn_del`. It is undefined to call the * other library functions. */ -NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_writev_stream( - ngtcp2_conn *conn, ngtcp2_path *path, ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, ngtcp2_ssize *pdatalen, uint32_t flags, int64_t stream_id, - const ngtcp2_vec *datav, size_t datavcnt, ngtcp2_tstamp ts); +NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_writev_stream_versioned( + ngtcp2_conn *conn, ngtcp2_path *path, int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, ngtcp2_ssize *pdatalen, + uint32_t flags, int64_t stream_id, const ngtcp2_vec *datav, size_t datavcnt, + ngtcp2_tstamp ts); /** * @macrosection @@ -3922,7 +4525,7 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_writev_stream( * * :macro:`NGTCP2_WRITE_DATAGRAM_FLAG_NONE` indicates no flag set. */ -#define NGTCP2_WRITE_DATAGRAM_FLAG_NONE 0x00 +#define NGTCP2_WRITE_DATAGRAM_FLAG_NONE 0x00u /** * @macro @@ -3930,7 +4533,7 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_writev_stream( * :macro:`NGTCP2_WRITE_DATAGRAM_FLAG_MORE` indicates that more data * may come and should be coalesced into the same packet if possible. */ -#define NGTCP2_WRITE_DATAGRAM_FLAG_MORE 0x01 +#define NGTCP2_WRITE_DATAGRAM_FLAG_MORE 0x01u /** * @function @@ -3940,6 +4543,9 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_writev_stream( * |dest| of length |destlen|. This function performs QUIC handshake * as well. * + * |destlen| should be at least + * :member:`ngtcp2_settings.max_udp_payload_size`. + * * For |path| and |pi| parameters, refer to * `ngtcp2_conn_writev_stream`. * @@ -3947,6 +4553,14 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_writev_stream( * assigned to |*paccepted| if it is not NULL. The data in DATAGRAM * frame cannot be fragmented; writing partial data is not possible. * + * |dgram_id| is an opaque identifier which should uniquely identify + * the given DATAGRAM. It is passed to :type:`ngtcp2_ack_datagram` + * callback when a packet that contains DATAGRAM frame is + * acknowledged. It is passed to :type:`ngtcp2_lost_datagram` + * callback when a packet that contains DATAGRAM frame is declared + * lost. If an application uses neither of those callbacks, it can + * sets 0 to this parameter. + * * This function might write other frames other than DATAGRAM, just * like `ngtcp2_conn_writev_stream`. * @@ -3978,8 +4592,7 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_writev_stream( * * When application sees :macro:`NGTCP2_ERR_WRITE_MORE`, it must not * call other ngtcp2 API functions (application can still call - * `ngtcp2_conn_write_connection_close` or - * `ngtcp2_conn_write_application_close` to handle error from this + * `ngtcp2_conn_write_connection_close` to handle error from this * function). Just keep calling `ngtcp2_conn_writev_datagram`, * `ngtcp2_conn_writev_stream` or `ngtcp2_conn_write_pkt` until it * returns a positive number (which indicates a complete packet is @@ -4011,96 +4624,17 @@ NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_writev_stream( * connection using `ngtcp2_conn_del`. It is undefined to call the * other library functions. */ -NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_writev_datagram( - ngtcp2_conn *conn, ngtcp2_path *path, ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, int *paccepted, uint32_t flags, const ngtcp2_vec *datav, - size_t datavcnt, ngtcp2_tstamp ts); - -/** - * @function - * - * `ngtcp2_conn_write_connection_close` writes a packet which contains - * a CONNECTION_CLOSE frame (type 0x1c) in the buffer pointed by - * |dest| whose capacity is |datalen|. - * - * If |path| is not ``NULL``, this function stores the network path - * with which the packet should be sent. Each addr field must point - * to the buffer which should be at least ``sizeof(struct - * sockaddr_storage)`` bytes long. The assignment might not be done - * if nothing is written to |dest|. - * - * If |pi| is not ``NULL``, this function stores packet metadata in it - * if it succeeds. The metadata includes ECN markings. - * - * This function must not be called from inside the callback - * functions. - * - * At the moment, successful call to this function makes connection - * close. We may change this behaviour in the future to allow - * graceful shutdown. - * - * :macro:`NGTCP2_ERR_NOMEM` - * Out of memory - * :macro:`NGTCP2_ERR_NOBUF` - * Buffer is too small - * :macro:`NGTCP2_ERR_INVALID_STATE` - * The current state does not allow sending CONNECTION_CLOSE. - * :macro:`NGTCP2_ERR_PKT_NUM_EXHAUSTED` - * Packet number is exhausted, and cannot send any more packet. - * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` - * User callback failed - */ -NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_connection_close( - ngtcp2_conn *conn, ngtcp2_path *path, ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, uint64_t error_code, ngtcp2_tstamp ts); - -/** - * @function - * - * `ngtcp2_conn_write_application_close` writes a packet which - * contains a CONNECTION_CLOSE frame (type 0x1d) in the buffer pointed - * by |dest| whose capacity is |datalen|. - * - * If |path| is not ``NULL``, this function stores the network path - * with which the packet should be sent. Each addr field must point - * to the buffer which should be at least ``sizeof(struct - * sockaddr_storage)`` bytes long. The assignment might not be done - * if nothing is written to |dest|. - * - * If |pi| is not ``NULL``, this function stores packet metadata in it - * if it succeeds. The metadata includes ECN markings. - * - * If handshake has not been confirmed yet, CONNECTION_CLOSE (type - * 0x1c) with error code :macro:`NGTCP2_APPLICATION_ERROR` is written - * instead. - * - * This function must not be called from inside the callback - * functions. - * - * At the moment, successful call to this function makes connection - * close. We may change this behaviour in the future to allow - * graceful shutdown. - * - * :macro:`NGTCP2_ERR_NOMEM` - * Out of memory - * :macro:`NGTCP2_ERR_NOBUF` - * Buffer is too small - * :macro:`NGTCP2_ERR_INVALID_STATE` - * The current state does not allow sending CONNECTION_CLOSE. - * :macro:`NGTCP2_ERR_PKT_NUM_EXHAUSTED` - * Packet number is exhausted, and cannot send any more packet. - * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` - * User callback failed - */ -NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_application_close( - ngtcp2_conn *conn, ngtcp2_path *path, ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, uint64_t app_error_code, ngtcp2_tstamp ts); +NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_writev_datagram_versioned( + ngtcp2_conn *conn, ngtcp2_path *path, int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, int *paccepted, + uint32_t flags, uint64_t dgram_id, const ngtcp2_vec *datav, size_t datavcnt, + ngtcp2_tstamp ts); /** * @function * * `ngtcp2_conn_is_in_closing_period` returns nonzero if |conn| is in - * closing period. + * the closing period. */ NGTCP2_EXTERN int ngtcp2_conn_is_in_closing_period(ngtcp2_conn *conn); @@ -4108,7 +4642,7 @@ NGTCP2_EXTERN int ngtcp2_conn_is_in_closing_period(ngtcp2_conn *conn); * @function * * `ngtcp2_conn_is_in_draining_period` returns nonzero if |conn| is in - * draining period. + * the draining period. */ NGTCP2_EXTERN int ngtcp2_conn_is_in_draining_period(ngtcp2_conn *conn); @@ -4121,8 +4655,8 @@ NGTCP2_EXTERN int ngtcp2_conn_is_in_draining_period(ngtcp2_conn *conn); * This function returns 0 if it succeeds, or one of the following * negative error codes: * - * :macro:`NGTCP2_ERR_STREAM_NOT_FOUND` - * Stream was not found + * :macro:`NGTCP2_ERR_NOMEM` + * Out of memory. */ NGTCP2_EXTERN int ngtcp2_conn_extend_max_stream_offset(ngtcp2_conn *conn, int64_t stream_id, @@ -4175,6 +4709,16 @@ NGTCP2_EXTERN void ngtcp2_conn_extend_max_streams_uni(ngtcp2_conn *conn, */ NGTCP2_EXTERN const ngtcp2_cid *ngtcp2_conn_get_dcid(ngtcp2_conn *conn); +/** + * @function + * + * `ngtcp2_conn_get_client_initial_dcid` returns the non-NULL pointer + * to the Destination Connection ID that client sent in its Initial + * packet. + */ +NGTCP2_EXTERN const ngtcp2_cid * +ngtcp2_conn_get_client_initial_dcid(ngtcp2_conn *conn); + /** * @function * @@ -4249,49 +4793,47 @@ NGTCP2_EXTERN size_t ngtcp2_conn_get_active_dcid(ngtcp2_conn *conn, /** * @function * - * `ngtcp2_conn_get_negotiated_version` returns the negotiated version. + * `ngtcp2_conn_get_client_chosen_version` returns the client chosen + * version. */ -NGTCP2_EXTERN uint32_t ngtcp2_conn_get_negotiated_version(ngtcp2_conn *conn); +NGTCP2_EXTERN uint32_t ngtcp2_conn_get_client_chosen_version(ngtcp2_conn *conn); /** * @function * - * `ngtcp2_conn_early_data_rejected` tells |conn| that 0-RTT data was - * rejected by a server. + * `ngtcp2_conn_get_negotiated_version` returns the negotiated version. + * + * Until the version is negotiated, this function returns 0. */ -NGTCP2_EXTERN int ngtcp2_conn_early_data_rejected(ngtcp2_conn *conn); +NGTCP2_EXTERN uint32_t ngtcp2_conn_get_negotiated_version(ngtcp2_conn *conn); /** * @function * - * `ngtcp2_conn_get_conn_stat` assigns connection statistics data to - * |*cstat|. + * `ngtcp2_conn_early_data_rejected` tells |conn| that early data was + * rejected by a server. |conn| discards the following connection + * states: + * + * - Any opended streams. + * - Stream identifier allocations. + * - Max data extended by `ngtcp2_conn_extend_max_offset`. + * - Max bidi streams extended by `ngtcp2_conn_extend_max_streams_bidi`. + * - Max uni streams extended by `ngtcp2_conn_extend_max_streams_uni`. + * + * Application which wishes to retransmit early data, it has to open + * streams and send stream data again. */ -NGTCP2_EXTERN void ngtcp2_conn_get_conn_stat(ngtcp2_conn *conn, - ngtcp2_conn_stat *cstat); +NGTCP2_EXTERN void ngtcp2_conn_early_data_rejected(ngtcp2_conn *conn); /** * @function * - * `ngtcp2_conn_on_loss_detection_timer` should be called when a timer - * returned from `ngtcp2_conn_earliest_expiry` fires. - * - * Application should call `ngtcp2_conn_handshake` if handshake has - * not completed, otherwise `ngtcp2_conn_write_pkt` (or - * `ngtcp2_conn_write_stream` if it has data to send) to send PTO - * probe packets. - * - * This function must not be called from inside the callback - * functions. - * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: - * - * :macro:`NGTCP2_ERR_NOMEM` - * Out of memory + * `ngtcp2_conn_get_conn_stat` assigns connection statistics data to + * |*cstat|. */ -NGTCP2_EXTERN int ngtcp2_conn_on_loss_detection_timer(ngtcp2_conn *conn, - ngtcp2_tstamp ts); +NGTCP2_EXTERN void ngtcp2_conn_get_conn_stat_versioned(ngtcp2_conn *conn, + int conn_stat_version, + ngtcp2_conn_stat *cstat); /** * @function @@ -4300,9 +4842,8 @@ NGTCP2_EXTERN int ngtcp2_conn_on_loss_detection_timer(ngtcp2_conn *conn, * of length |datalen| to the library for transmission. The * encryption level is given in |crypto_level|. * - * Application should keep the buffer pointed by |data| alive until - * the data is acknowledged. The acknowledgement is notified by - * :type:`ngtcp2_acked_crypto_offset` callback. + * The library makes a copy of the buffer pointed by |data| of length + * |datalen|. Application can discard |data|. */ NGTCP2_EXTERN int ngtcp2_conn_submit_crypto_data(ngtcp2_conn *conn, @@ -4333,7 +4874,7 @@ NGTCP2_EXTERN int ngtcp2_conn_submit_new_token(ngtcp2_conn *conn, * @function * * `ngtcp2_conn_set_local_addr` sets local endpoint address |addr| to - * |conn|. + * the current path of |conn|. */ NGTCP2_EXTERN void ngtcp2_conn_set_local_addr(ngtcp2_conn *conn, const ngtcp2_addr *addr); @@ -4341,11 +4882,11 @@ NGTCP2_EXTERN void ngtcp2_conn_set_local_addr(ngtcp2_conn *conn, /** * @function * - * `ngtcp2_conn_set_remote_addr` sets remote endpoint address |addr| - * to |conn|. + * `ngtcp2_conn_set_path_user_data` sets the |path_user_data| to the + * current path (see :member:`ngtcp2_path.user_data`). */ -NGTCP2_EXTERN void ngtcp2_conn_set_remote_addr(ngtcp2_conn *conn, - const ngtcp2_addr *addr); +NGTCP2_EXTERN void ngtcp2_conn_set_path_user_data(ngtcp2_conn *conn, + void *path_user_data); /** * @function @@ -4354,23 +4895,73 @@ NGTCP2_EXTERN void ngtcp2_conn_set_remote_addr(ngtcp2_conn *conn, */ NGTCP2_EXTERN const ngtcp2_path *ngtcp2_conn_get_path(ngtcp2_conn *conn); +/** + * @function + * + * `ngtcp2_conn_get_max_udp_payload_size` returns the maximum UDP + * payload size that this local endpoint would send. This is the + * value of :member:`ngtcp2_settings.max_udp_payload_size` that is + * passed to `ngtcp2_conn_client_new` or `ngtcp2_conn_server_new`. + */ +NGTCP2_EXTERN size_t ngtcp2_conn_get_max_udp_payload_size(ngtcp2_conn *conn); + +/** + * @function + * + * `ngtcp2_conn_get_path_max_udp_payload_size` returns the maximum UDP + * payload size for the current path. If + * :member:`ngtcp2_settings.no_udp_payload_size_shaping` is set to + * nonzero, this function is equivalent to + * `ngtcp2_conn_get_max_udp_payload_size`. Otherwise, it returns the + * maximum UDP payload size that is probed for the current path. + */ +NGTCP2_EXTERN size_t +ngtcp2_conn_get_path_max_udp_payload_size(ngtcp2_conn *conn); + +/** + * @function + * + * `ngtcp2_conn_initiate_immediate_migration` starts connection + * migration to the given |path|. + * Only client can initiate migration. This function does + * immediate migration; it does not probe peer reachability from a new + * local address. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :macro:`NGTCP2_ERR_INVALID_STATE` + * Migration is disabled; or handshake is not yet confirmed; or + * client is migrating to server's preferred address. + * :macro:`NGTCP2_ERR_CONN_ID_BLOCKED` + * No unused connection ID is available. + * :macro:`NGTCP2_ERR_INVALID_ARGUMENT` + * |local_addr| equals the current local address. + * :macro:`NGTCP2_ERR_NOMEM` + * Out of memory + */ +NGTCP2_EXTERN int ngtcp2_conn_initiate_immediate_migration( + ngtcp2_conn *conn, const ngtcp2_path *path, ngtcp2_tstamp ts); + /** * @function * * `ngtcp2_conn_initiate_migration` starts connection migration to the - * given |path| which must not be ``NULL``. Only client can initiate - * migration. This function does immediate migration; it does not - * probe peer reachability from a new local address. + * given |path|. Only client can initiate migration. Unlike + * `ngtcp2_conn_initiate_immediate_migration`, this function starts a + * path validation with a new path and migrate to the new path after + * successful path validation. * * This function returns 0 if it succeeds, or one of the following * negative error codes: * * :macro:`NGTCP2_ERR_INVALID_STATE` - * Migration is disabled. + * Migration is disabled; or handshake is not yet confirmed; or + * client is migrating to server's preferred address. * :macro:`NGTCP2_ERR_CONN_ID_BLOCKED` * No unused connection ID is available. * :macro:`NGTCP2_ERR_INVALID_ARGUMENT` - * |path| equals the current path. + * |local_addr| equals the current local address. * :macro:`NGTCP2_ERR_NOMEM` * Out of memory */ @@ -4394,6 +4985,16 @@ NGTCP2_EXTERN uint64_t ngtcp2_conn_get_max_local_streams_uni(ngtcp2_conn *conn); */ NGTCP2_EXTERN uint64_t ngtcp2_conn_get_max_data_left(ngtcp2_conn *conn); +/** + * @function + * + * `ngtcp2_conn_get_max_stream_data_left` returns the number of bytes + * that this local endpoint can send to a stream identified by + * |stream_id|. If no such stream is found, this function returns 0. + */ +NGTCP2_EXTERN uint64_t ngtcp2_conn_get_max_stream_data_left(ngtcp2_conn *conn, + int64_t stream_id); + /** * @function * @@ -4412,6 +5013,15 @@ NGTCP2_EXTERN uint64_t ngtcp2_conn_get_streams_bidi_left(ngtcp2_conn *conn); */ NGTCP2_EXTERN uint64_t ngtcp2_conn_get_streams_uni_left(ngtcp2_conn *conn); +/** + * @function + * + * `ngtcp2_conn_get_cwnd_left` returns the cwnd minus the number of + * bytes in flight on the current path. If the former is smaller than + * the latter, this function returns 0. + */ +NGTCP2_EXTERN uint64_t ngtcp2_conn_get_cwnd_left(ngtcp2_conn *conn); + /** * @function * @@ -4436,7 +5046,7 @@ ngtcp2_conn_get_initial_crypto_ctx(ngtcp2_conn *conn); /** * @function * - * `ngtcp2_conn_set_crypto_ctx` sets |ctx| for Handshake/Short packet + * `ngtcp2_conn_set_crypto_ctx` sets |ctx| for Handshake/1RTT packet * encryption. The passed data will be passed to * :type:`ngtcp2_encrypt`, :type:`ngtcp2_decrypt` and * :type:`ngtcp2_hp_mask` callbacks. @@ -4485,7 +5095,7 @@ ngtcp2_conn_set_retry_aead(ngtcp2_conn *conn, const ngtcp2_crypto_aead *aead, * @function * * `ngtcp2_conn_get_crypto_ctx` returns :type:`ngtcp2_crypto_ctx` - * object for Handshake/Short packet encryption. + * object for Handshake/1RTT packet encryption. */ NGTCP2_EXTERN const ngtcp2_crypto_ctx * ngtcp2_conn_get_crypto_ctx(ngtcp2_conn *conn); @@ -4528,33 +5138,213 @@ typedef enum ngtcp2_connection_close_error_code_type { * indicates the error code is application error code. */ NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION, + /** + * :enum:`NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_VERSION_NEGOTIATION` + * is a special case of QUIC transport error, and it indicates that + * client receives Version Negotiation packet. + */ + NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_VERSION_NEGOTIATION, + /** + * :enum:`NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_IDLE_CLOSE` + * is a special case of QUIC transport error, and it indicates that + * connection is closed because of idle timeout. + */ + NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_IDLE_CLOSE } ngtcp2_connection_close_error_code_type; /** * @struct * - * `ngtcp2_connection_close_error_code` contains connection error code - * and its type. + * :type:`ngtcp2_connection_close_error` contains connection + * error code, its type, and the optional reason phrase. */ -typedef struct ngtcp2_connection_close_error_code { +typedef struct ngtcp2_connection_close_error { + /** + * :member:`type` is the type of :member:`error_code`. + */ + ngtcp2_connection_close_error_code_type type; /** * :member:`error_code` is the error code for connection closure. */ uint64_t error_code; /** - * :member:`type` is the type of :member:`error_code`. + * :member:`frame_type` is the type of QUIC frame which triggers + * this connection error. This field is set to 0 if the frame type + * is unknown. */ - ngtcp2_connection_close_error_code_type type; -} ngtcp2_connection_close_error_code; + uint64_t frame_type; + /** + * :member:`reason` points to the buffer which contains a reason + * phrase. It may be NULL if there is no reason phrase. If it is + * received from a remote endpoint, it is truncated to at most 1024 + * bytes. + */ + uint8_t *reason; + /** + * :member:`reasonlen` is the length of data pointed by + * :member:`reason`. + */ + size_t reasonlen; +} ngtcp2_connection_close_error; + +/** + * @function + * + * `ngtcp2_connection_close_error_default` initializes |ccerr| with + * the default values. It sets the following fields: + * + * - :member:`type ` = + * :enum:`ngtcp2_connection_close_error_code_type.NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT` + * - :member:`error_code ` = + * :macro:`NGTCP2_NO_ERROR`. + * - :member:`frame_type ` = + * 0 + * - :member:`reason ` = NULL + * - :member:`reasonlen ` = 0 + */ +NGTCP2_EXTERN void +ngtcp2_connection_close_error_default(ngtcp2_connection_close_error *ccerr); + +/** + * @function + * + * `ngtcp2_connection_close_error_set_transport_error` sets + * :member:`ccerr->type ` to + * :enum:`ngtcp2_connection_close_error_code_type.NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT`, + * and :member:`ccerr->error_code + * ` to |error_code|. + * |reason| is the reason phrase of length |reasonlen|. This function + * does not make a copy of the reason phrase. + */ +NGTCP2_EXTERN void ngtcp2_connection_close_error_set_transport_error( + ngtcp2_connection_close_error *ccerr, uint64_t error_code, + const uint8_t *reason, size_t reasonlen); + +/** + * @function + * + * `ngtcp2_connection_close_error_set_transport_error_liberr` sets + * type and error_code based on |liberr|. + * + * If |liberr| is :macro:`NGTCP2_ERR_RECV_VERSION_NEGOTIATION`, + * :member:`ccerr->type ` is set + * to + * :enum:`ngtcp2_connection_close_error_code_type.NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_VERSION_NEGOTIATION`, + * and :member:`ccerr->error_code + * ` to + * :macro:`NGTCP2_NO_ERROR`. If |liberr| is + * :macro:`NGTCP2_ERR_IDLE_CLOSE`, :member:`ccerr->type + * ` is set to + * :enum:`ngtcp2_connection_close_error_code_type.NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_IDLE_CLOSE`, + * and :member:`ccerr->error_code + * ` to + * :macro:`NGTCP2_NO_ERROR`. Otherwise, :member:`ccerr->type + * ` is set to + * :enum:`ngtcp2_connection_close_error_code_type.NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT`, + * and :member:`ccerr->error_code + * ` is set to an error code + * inferred by |liberr| (see + * `ngtcp2_err_infer_quic_transport_error_code`). |reason| is the + * reason phrase of length |reasonlen|. This function does not make a + * copy of the reason phrase. + */ +NGTCP2_EXTERN void ngtcp2_connection_close_error_set_transport_error_liberr( + ngtcp2_connection_close_error *ccerr, int liberr, const uint8_t *reason, + size_t reasonlen); + +/** + * @function + * + * `ngtcp2_connection_close_error_set_transport_error_tls_alert` sets + * :member:`ccerr->type ` to + * :enum:`ngtcp2_connection_close_error_code_type.NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT`, + * and :member:`ccerr->error_code + * ` to bitwise-OR of + * :macro:`NGTCP2_CRYPTO_ERROR` and |tls_alert|. |reason| is the + * reason phrase of length |reasonlen|. This function does not make a + * copy of the reason phrase. + */ +NGTCP2_EXTERN void ngtcp2_connection_close_error_set_transport_error_tls_alert( + ngtcp2_connection_close_error *ccerr, uint8_t tls_alert, + const uint8_t *reason, size_t reasonlen); + +/** + * @function + * + * `ngtcp2_connection_close_error_set_application_error` sets + * :member:`ccerr->type ` to + * :enum:`ngtcp2_connection_close_error_code_type.NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION`, + * and :member:`ccerr->error_code + * ` to |error_code|. + * |reason| is the reason phrase of length |reasonlen|. This function + * does not make a copy of the reason phrase. + */ +NGTCP2_EXTERN void ngtcp2_connection_close_error_set_application_error( + ngtcp2_connection_close_error *ccerr, uint64_t error_code, + const uint8_t *reason, size_t reasonlen); + +/** + * @function + * + * `ngtcp2_conn_write_connection_close` writes a packet which contains + * CONNECTION_CLOSE frame(s) (type 0x1c or 0x1d) in the buffer pointed + * by |dest| whose capacity is |destlen|. + * + * For client, |destlen| should be at least + * :macro:`NGTCP2_MAX_UDP_PAYLOAD_SIZE`. + * + * If |path| is not ``NULL``, this function stores the network path + * with which the packet should be sent. Each addr field must point + * to the buffer which should be at least ``sizeof(struct + * sockaddr_storage)`` bytes long. The assignment might not be done + * if nothing is written to |dest|. + * + * If |pi| is not ``NULL``, this function stores packet metadata in it + * if it succeeds. The metadata includes ECN markings. + * + * If :member:`ccerr->type ` == + * :enum:`ngtcp2_connection_close_error_code_type.NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT`, + * this function sends CONNECTION_CLOSE (type 0x1c) frame. If + * :member:`ccerr->type ` == + * :enum:`ngtcp2_connection_close_error_code_type.NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION`, + * it sends CONNECTION_CLOSE (type 0x1d) frame. Otherwise, it does + * not produce any data, and returns 0. + * + * This function must not be called from inside the callback + * functions. + * + * At the moment, successful call to this function makes connection + * close. We may change this behaviour in the future to allow + * graceful shutdown. + * + * This function returns the number of bytes written in |dest| if it + * succeeds, or one of the following negative error codes: + * + * :macro:`NGTCP2_ERR_NOMEM` + * Out of memory + * :macro:`NGTCP2_ERR_NOBUF` + * Buffer is too small + * :macro:`NGTCP2_ERR_INVALID_STATE` + * The current state does not allow sending CONNECTION_CLOSE. + * :macro:`NGTCP2_ERR_PKT_NUM_EXHAUSTED` + * Packet number is exhausted, and cannot send any more packet. + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` + * User callback failed + */ +NGTCP2_EXTERN ngtcp2_ssize ngtcp2_conn_write_connection_close_versioned( + ngtcp2_conn *conn, ngtcp2_path *path, int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, + const ngtcp2_connection_close_error *ccerr, ngtcp2_tstamp ts); /** * @function * - * `ngtcp2_conn_get_connection_close_error_code` stores the received - * connection close error code in |ccec|. + * `ngtcp2_conn_get_connection_close_error` stores the received + * connection close error in |ccerr|. */ -NGTCP2_EXTERN void ngtcp2_conn_get_connection_close_error_code( - ngtcp2_conn *conn, ngtcp2_connection_close_error_code *ccec); +NGTCP2_EXTERN void +ngtcp2_conn_get_connection_close_error(ngtcp2_conn *conn, + ngtcp2_connection_close_error *ccerr); /** * @function @@ -4597,13 +5387,48 @@ NGTCP2_EXTERN int ngtcp2_conn_set_stream_user_data(ngtcp2_conn *conn, int64_t stream_id, void *stream_user_data); +/** + * @function + * + * `ngtcp2_conn_update_pkt_tx_time` sets the time instant of the next + * packet transmission. This function is noop if packet pacing is + * disabled. If packet pacing is enabled, this function must be + * called after (multiple invocation of) `ngtcp2_conn_writev_stream`. + * If packet aggregation (e.g., packet batching, GSO) is used, call + * this function after all aggregated datagrams are sent, which + * indicates multiple invocation of `ngtcp2_conn_writev_stream`. + */ +NGTCP2_EXTERN void ngtcp2_conn_update_pkt_tx_time(ngtcp2_conn *conn, + ngtcp2_tstamp ts); + +/** + * @function + * + * `ngtcp2_conn_get_send_quantum` returns the maximum number of bytes + * that can be sent in one go without packet spacing. If packet + * pacing is disabled, this function returns SIZE_MAX. + */ +NGTCP2_EXTERN size_t ngtcp2_conn_get_send_quantum(ngtcp2_conn *conn); + +/** + * @function + * + * `ngtcp2_conn_get_stream_loss_count` returns the number of packets + * that contain STREAM frame for a stream identified by |stream_id| + * and are declared to be lost. The number may include the spurious + * losses. If no stream identified by |stream_id| is found, this + * function returns 0. + */ +NGTCP2_EXTERN size_t ngtcp2_conn_get_stream_loss_count(ngtcp2_conn *conn, + int64_t stream_id); + /** * @function * * `ngtcp2_strerror` returns the text representation of |liberr|. * |liberr| must be one of ngtcp2 library error codes (which is * defined as NGTCP2_ERR_* macro, such as - * :macro:`NGTCP2_ERR_TLS_DECRYPT`). + * :macro:`NGTCP2_ERR_DECRYPT`). */ NGTCP2_EXTERN const char *ngtcp2_strerror(int liberr); @@ -4613,7 +5438,7 @@ NGTCP2_EXTERN const char *ngtcp2_strerror(int liberr); * `ngtcp2_err_is_fatal` returns nonzero if |liberr| is a fatal error. * |liberr| must be one of ngtcp2 library error codes (which is * defined as NGTCP2_ERR_* macro, such as - * :macro:`NGTCP2_ERR_TLS_DECRYPT`). + * :macro:`NGTCP2_ERR_DECRYPT`). */ NGTCP2_EXTERN int ngtcp2_err_is_fatal(int liberr); @@ -4623,7 +5448,7 @@ NGTCP2_EXTERN int ngtcp2_err_is_fatal(int liberr); * `ngtcp2_err_infer_quic_transport_error_code` returns a QUIC * transport error code which corresponds to |liberr|. |liberr| must * be one of ngtcp2 library error codes (which is defined as - * NGTCP2_ERR_* macro, such as :macro:`NGTCP2_ERR_TLS_DECRYPT`). + * NGTCP2_ERR_* macro, such as :macro:`NGTCP2_ERR_DECRYPT`). */ NGTCP2_EXTERN uint64_t ngtcp2_err_infer_quic_transport_error_code(int liberr); @@ -4634,8 +5459,22 @@ NGTCP2_EXTERN uint64_t ngtcp2_err_infer_quic_transport_error_code(int liberr); * returns |dest|. */ NGTCP2_EXTERN ngtcp2_addr *ngtcp2_addr_init(ngtcp2_addr *dest, - const struct sockaddr *addr, - size_t addrlen, void *user_data); + const ngtcp2_sockaddr *addr, + ngtcp2_socklen addrlen); + +/** + * @function + * + * `ngtcp2_addr_copy_byte` copies |addr| of length |addrlen| into the + * buffer pointed by :member:`dest->addr `. + * :member:`dest->addrlen ` is updated to have + * |addrlen|. This function assumes that :member:`dest->addr + * ` points to a buffer which has a sufficient + * capacity to store the copy. + */ +NGTCP2_EXTERN void ngtcp2_addr_copy_byte(ngtcp2_addr *dest, + const ngtcp2_sockaddr *addr, + ngtcp2_socklen addrlen); /** * @function @@ -4644,12 +5483,11 @@ NGTCP2_EXTERN ngtcp2_addr *ngtcp2_addr_init(ngtcp2_addr *dest, * arguments. This function copies |local_addr| and |remote_addr|. */ NGTCP2_EXTERN void ngtcp2_path_storage_init(ngtcp2_path_storage *ps, - const struct sockaddr *local_addr, - size_t local_addrlen, - void *local_user_data, - const struct sockaddr *remote_addr, - size_t remote_addrlen, - void *remote_user_data); + const ngtcp2_sockaddr *local_addr, + ngtcp2_socklen local_addrlen, + const ngtcp2_sockaddr *remote_addr, + ngtcp2_socklen remote_addrlen, + void *user_data); /** * @function @@ -4671,8 +5509,13 @@ NGTCP2_EXTERN void ngtcp2_path_storage_zero(ngtcp2_path_storage *ps); * * :type:`initial_rtt ` = * :macro:`NGTCP2_DEFAULT_INITIAL_RTT` * * :type:`ack_thresh ` = 2 + * * :type:`max_udp_payload_size + * ` = 1452 + * * :type:`handshake_timeout ` = + * :macro:`NGTCP2_DEFAULT_HANDSHAKE_TIMEOUT`. */ -NGTCP2_EXTERN void ngtcp2_settings_default(ngtcp2_settings *settings); +NGTCP2_EXTERN void ngtcp2_settings_default_versioned(int settings_version, + ngtcp2_settings *settings); /** * @function @@ -4683,7 +5526,7 @@ NGTCP2_EXTERN void ngtcp2_settings_default(ngtcp2_settings *settings); * * * :type:`max_udp_payload_size * ` = - * :macro:`NGTCP2_DEFAULT_MAX_UDP_PAYLOAD_SIZE` + * :macro:`NGTCP2_DEFAULT_MAX_RECV_UDP_PAYLOAD_SIZE` * * :type:`ack_delay_exponent * ` = * :macro:`NGTCP2_DEFAULT_ACK_DELAY_EXPONENT` @@ -4694,7 +5537,8 @@ NGTCP2_EXTERN void ngtcp2_settings_default(ngtcp2_settings *settings); * :macro:`NGTCP2_DEFAULT_ACTIVE_CONNECTION_ID_LIMIT` */ NGTCP2_EXTERN void -ngtcp2_transport_params_default(ngtcp2_transport_params *params); +ngtcp2_transport_params_default_versioned(int transport_params_version, + ngtcp2_transport_params *params); /** * @function @@ -4746,13 +5590,14 @@ typedef struct ngtcp2_info { /** * @function * - * Returns a pointer to a ngtcp2_info struct with version information - * about the run-time library in use. The |least_version| argument - * can be set to a 24 bit numerical value for the least accepted - * version number and if the condition is not met, this function will - * return a ``NULL``. Pass in 0 to skip the version checking. + * `ngtcp2_version` returns a pointer to a ngtcp2_info struct with + * version information about the run-time library in use. The + * |least_version| argument can be set to a 24 bit numerical value for + * the least accepted version number and if the condition is not met, + * this function will return a ``NULL``. Pass in 0 to skip the + * version checking. */ -NGTCP2_EXTERN ngtcp2_info *ngtcp2_version(int least_version); +NGTCP2_EXTERN const ngtcp2_info *ngtcp2_version(int least_version); /** * @function @@ -4763,66 +5608,211 @@ NGTCP2_EXTERN ngtcp2_info *ngtcp2_version(int least_version); NGTCP2_EXTERN int ngtcp2_is_bidi_stream(int64_t stream_id); /** - * @enum + * @function * - * :type:`ngtcp2_log_event` defines an event of ngtcp2 library - * internal logger. + * `ngtcp2_path_copy` copies |src| into |dest|. This function assumes + * that |dest| has enough buffer to store the deep copy of + * :member:`src->local ` and :member:`src->remote + * `. */ -typedef enum { - /** - * :enum:`NGTCP2_LOG_EVENT_NONE` represents no event. - */ - NGTCP2_LOG_EVENT_NONE, - /** - * :enum:`NGTCP2_LOG_EVENT_CON` is a connection (catch-all) event - */ - NGTCP2_LOG_EVENT_CON, - /** - * :enum:`NGTCP2_LOG_EVENT_PKT` is a packet event. - */ - NGTCP2_LOG_EVENT_PKT, - /** - * :enum:`NGTCP2_LOG_EVENT_FRM` is a QUIC frame event. - */ - NGTCP2_LOG_EVENT_FRM, - /** - * :enum:`NGTCP2_LOG_EVENT_RCV` is a congestion and recovery event. - */ - NGTCP2_LOG_EVENT_RCV, - /** - * :enum:`NGTCP2_LOG_EVENT_CRY` is a crypto event. - */ - NGTCP2_LOG_EVENT_CRY, - /** - * :enum:`NGTCP2_LOG_EVENT_PTV` is a path validation event. - */ - NGTCP2_LOG_EVENT_PTV, -} ngtcp2_log_event; +NGTCP2_EXTERN void ngtcp2_path_copy(ngtcp2_path *dest, const ngtcp2_path *src); /** * @function * - * `ngtcp2_log_info` writes info level log. + * `ngtcp2_path_eq` returns nonzero if |a| and |b| shares the same + * local and remote addresses. */ -NGTCP2_EXTERN void ngtcp2_log_info(ngtcp2_log *log, ngtcp2_log_event ev, - const char *fmt, ...); +NGTCP2_EXTERN int ngtcp2_path_eq(const ngtcp2_path *a, const ngtcp2_path *b); /** * @function * - * `ngtcp2_path_copy` copies |src| into |dest|. This function assumes - * that |dest| has enough buffer to store the deep copy of src->local - * and src->remote. + * `ngtcp2_is_supported_version` returns nonzero if the library supports + * QUIC version |version|. */ -NGTCP2_EXTERN void ngtcp2_path_copy(ngtcp2_path *dest, const ngtcp2_path *src); +NGTCP2_EXTERN int ngtcp2_is_supported_version(uint32_t version); + +/* + * @function + * + * `ngtcp2_is_reserved_version` returns nonzero if |version| is a + * reserved version. + */ +NGTCP2_EXTERN int ngtcp2_is_reserved_version(uint32_t version); /** * @function * - * `ngtcp2_path_eq` returns nonzero if |a| and |b| shares the same - * local and remote addresses. + * `ngtcp2_select_version` selects and returns a version from the + * version set |offered_versions| of |offered_versionslen| elements. + * |preferred_versions| of |preferred_versionslen| elements specifies + * the preference of versions, which is sorted in the order of + * preference. All versions included in |preferred_versions| must be + * supported by the library, that is, passing a version to + * `ngtcp2_is_supported_version` must return nonzero. This function + * is intended to be used by client when it receives Version + * Negotiation packet. If no version is selected, this function + * returns 0. */ -NGTCP2_EXTERN int ngtcp2_path_eq(const ngtcp2_path *a, const ngtcp2_path *b); +NGTCP2_EXTERN uint32_t ngtcp2_select_version(const uint32_t *preferred_versions, + size_t preferred_versionslen, + const uint32_t *offered_versions, + size_t offered_versionslen); + +/* + * Versioned function wrappers + */ + +/* + * `ngtcp2_conn_read_pkt` is a wrapper around + * `ngtcp2_conn_read_pkt_versioned` to set the correct struct version. + */ +#define ngtcp2_conn_read_pkt(CONN, PATH, PI, PKT, PKTLEN, TS) \ + ngtcp2_conn_read_pkt_versioned((CONN), (PATH), NGTCP2_PKT_INFO_VERSION, \ + (PI), (PKT), (PKTLEN), (TS)) + +/* + * `ngtcp2_conn_write_pkt` is a wrapper around + * `ngtcp2_conn_write_pkt_versioned` to set the correct struct + * version. + */ +#define ngtcp2_conn_write_pkt(CONN, PATH, PI, DEST, DESTLEN, TS) \ + ngtcp2_conn_write_pkt_versioned((CONN), (PATH), NGTCP2_PKT_INFO_VERSION, \ + (PI), (DEST), (DESTLEN), (TS)) + +/* + * `ngtcp2_conn_write_stream` is a wrapper around + * `ngtcp2_conn_write_stream_versioned` to set the correct struct + * version. + */ +#define ngtcp2_conn_write_stream(CONN, PATH, PI, DEST, DESTLEN, PDATALEN, \ + FLAGS, STREAM_ID, DATA, DATALEN, TS) \ + ngtcp2_conn_write_stream_versioned( \ + (CONN), (PATH), NGTCP2_PKT_INFO_VERSION, (PI), (DEST), (DESTLEN), \ + (PDATALEN), (FLAGS), (STREAM_ID), (DATA), (DATALEN), (TS)) + +/* + * `ngtcp2_conn_writev_stream` is a wrapper around + * `ngtcp2_conn_writev_stream_versioned` to set the correct struct + * version. + */ +#define ngtcp2_conn_writev_stream(CONN, PATH, PI, DEST, DESTLEN, PDATALEN, \ + FLAGS, STREAM_ID, DATAV, DATAVCNT, TS) \ + ngtcp2_conn_writev_stream_versioned( \ + (CONN), (PATH), NGTCP2_PKT_INFO_VERSION, (PI), (DEST), (DESTLEN), \ + (PDATALEN), (FLAGS), (STREAM_ID), (DATAV), (DATAVCNT), (TS)) + +/* + * `ngtcp2_conn_writev_datagram` is a wrapper around + * `ngtcp2_conn_writev_datagram_versioned` to set the correct struct + * version. + */ +#define ngtcp2_conn_writev_datagram(CONN, PATH, PI, DEST, DESTLEN, PACCEPTED, \ + FLAGS, DGRAM_ID, DATAV, DATAVCNT, TS) \ + ngtcp2_conn_writev_datagram_versioned( \ + (CONN), (PATH), NGTCP2_PKT_INFO_VERSION, (PI), (DEST), (DESTLEN), \ + (PACCEPTED), (FLAGS), (DGRAM_ID), (DATAV), (DATAVCNT), (TS)) + +/* + * `ngtcp2_conn_write_connection_close` is a wrapper around + * `ngtcp2_conn_write_connection_close_versioned` to set the correct + * struct version. + */ +#define ngtcp2_conn_write_connection_close(CONN, PATH, PI, DEST, DESTLEN, \ + CCERR, TS) \ + ngtcp2_conn_write_connection_close_versioned( \ + (CONN), (PATH), NGTCP2_PKT_INFO_VERSION, (PI), (DEST), (DESTLEN), \ + (CCERR), (TS)) + +/* + * `ngtcp2_encode_transport_params` is a wrapper around + * `ngtcp2_encode_transport_params_versioned` to set the correct + * struct version. + */ +#define ngtcp2_encode_transport_params(DEST, DESTLEN, EXTTYPE, PARAMS) \ + ngtcp2_encode_transport_params_versioned( \ + (DEST), (DESTLEN), (EXTTYPE), NGTCP2_TRANSPORT_PARAMS_VERSION, (PARAMS)) + +/* + * `ngtcp2_decode_transport_params` is a wrapper around + * `ngtcp2_decode_transport_params_versioned` to set the correct + * struct version. + */ +#define ngtcp2_decode_transport_params(PARAMS, EXTTYPE, DATA, DATALEN) \ + ngtcp2_decode_transport_params_versioned( \ + NGTCP2_TRANSPORT_PARAMS_VERSION, (PARAMS), (EXTTYPE), (DATA), (DATALEN)) + +/* + * `ngtcp2_conn_client_new` is a wrapper around + * `ngtcp2_conn_client_new_versioned` to set the correct struct + * version. + */ +#define ngtcp2_conn_client_new(PCONN, DCID, SCID, PATH, VERSION, CALLBACKS, \ + SETTINGS, PARAMS, MEM, USER_DATA) \ + ngtcp2_conn_client_new_versioned( \ + (PCONN), (DCID), (SCID), (PATH), (VERSION), NGTCP2_CALLBACKS_VERSION, \ + (CALLBACKS), NGTCP2_SETTINGS_VERSION, (SETTINGS), \ + NGTCP2_TRANSPORT_PARAMS_VERSION, (PARAMS), (MEM), (USER_DATA)) + +/* + * `ngtcp2_conn_server_new` is a wrapper around + * `ngtcp2_conn_server_new_versioned` to set the correct struct + * version. + */ +#define ngtcp2_conn_server_new(PCONN, DCID, SCID, PATH, VERSION, CALLBACKS, \ + SETTINGS, PARAMS, MEM, USER_DATA) \ + ngtcp2_conn_server_new_versioned( \ + (PCONN), (DCID), (SCID), (PATH), (VERSION), NGTCP2_CALLBACKS_VERSION, \ + (CALLBACKS), NGTCP2_SETTINGS_VERSION, (SETTINGS), \ + NGTCP2_TRANSPORT_PARAMS_VERSION, (PARAMS), (MEM), (USER_DATA)) + +/* + * `ngtcp2_conn_set_early_remote_transport_params` is a wrapper around + * `ngtcp2_conn_set_early_remote_transport_params_versioned` to set + * the correct struct version. + */ +#define ngtcp2_conn_set_early_remote_transport_params(CONN, PARAMS) \ + ngtcp2_conn_set_early_remote_transport_params_versioned( \ + (CONN), NGTCP2_TRANSPORT_PARAMS_VERSION, (PARAMS)) + +/* + * `ngtcp2_conn_set_local_transport_params` is a wrapper around + * `ngtcp2_conn_set_local_transport_params_versioned` to set the + * correct struct version. + */ +#define ngtcp2_conn_set_local_transport_params(CONN, PARAMS) \ + ngtcp2_conn_set_local_transport_params_versioned( \ + (CONN), NGTCP2_TRANSPORT_PARAMS_VERSION, (PARAMS)) + +/* + * `ngtcp2_transport_params_default` is a wrapper around + * `ngtcp2_transport_params_default_versioned` to set the correct + * struct version. + */ +#define ngtcp2_transport_params_default(PARAMS) \ + ngtcp2_transport_params_default_versioned(NGTCP2_TRANSPORT_PARAMS_VERSION, \ + (PARAMS)) + +/* + * `ngtcp2_conn_get_conn_stat` is a wrapper around + * `ngtcp2_conn_get_conn_stat_versioned` to set the correct struct + * version. + */ +#define ngtcp2_conn_get_conn_stat(CONN, CSTAT) \ + ngtcp2_conn_get_conn_stat_versioned((CONN), NGTCP2_CONN_STAT_VERSION, (CSTAT)) + +/* + * `ngtcp2_settings_default` is a wrapper around + * `ngtcp2_settings_default_versioned` to set the correct struct + * version. + */ +#define ngtcp2_settings_default(SETTINGS) \ + ngtcp2_settings_default_versioned(NGTCP2_SETTINGS_VERSION, (SETTINGS)) + +#ifdef _MSC_VER +# pragma warning(pop) +#endif #ifdef __cplusplus } diff --git a/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h b/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h index fb0671de9fc..9f7592b84a4 100644 --- a/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h +++ b/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h @@ -36,7 +36,7 @@ * * Version number of the ngtcp2 library release. */ -#define NGTCP2_VERSION "0.1.0-DEV" +#define NGTCP2_VERSION "0.8.1" /** * @macro @@ -46,6 +46,6 @@ * number, 8 bits for minor and 8 bits for patch. Version 1.2.3 * becomes 0x010203. */ -#define NGTCP2_VERSION_NUM 0x000100 +#define NGTCP2_VERSION_NUM 0x000801 #endif /* VERSION_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_acktr.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_acktr.c index 7a7f3e469a2..02c45de90d1 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_acktr.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_acktr.c @@ -26,22 +26,31 @@ #include -int ngtcp2_acktr_entry_new(ngtcp2_acktr_entry **ent, int64_t pkt_num, - ngtcp2_tstamp tstamp, const ngtcp2_mem *mem) { - *ent = ngtcp2_mem_malloc(mem, sizeof(ngtcp2_acktr_entry)); +#include "ngtcp2_macro.h" + +static void acktr_entry_init(ngtcp2_acktr_entry *ent, int64_t pkt_num, + ngtcp2_tstamp tstamp) { + ent->pkt_num = pkt_num; + ent->len = 1; + ent->tstamp = tstamp; +} + +int ngtcp2_acktr_entry_objalloc_new(ngtcp2_acktr_entry **ent, int64_t pkt_num, + ngtcp2_tstamp tstamp, + ngtcp2_objalloc *objalloc) { + *ent = ngtcp2_objalloc_acktr_entry_get(objalloc); if (*ent == NULL) { return NGTCP2_ERR_NOMEM; } - (*ent)->pkt_num = pkt_num; - (*ent)->len = 1; - (*ent)->tstamp = tstamp; + acktr_entry_init(*ent, pkt_num, tstamp); return 0; } -void ngtcp2_acktr_entry_del(ngtcp2_acktr_entry *ent, const ngtcp2_mem *mem) { - ngtcp2_mem_free(mem, ent); +void ngtcp2_acktr_entry_objalloc_del(ngtcp2_acktr_entry *ent, + ngtcp2_objalloc *objalloc) { + ngtcp2_objalloc_acktr_entry_release(objalloc, ent); } static int greater(const ngtcp2_ksl_key *lhs, const ngtcp2_ksl_key *rhs) { @@ -52,17 +61,15 @@ int ngtcp2_acktr_init(ngtcp2_acktr *acktr, ngtcp2_log *log, const ngtcp2_mem *mem) { int rv; - rv = ngtcp2_ringbuf_init(&acktr->acks, 128, sizeof(ngtcp2_acktr_ack_entry), + ngtcp2_objalloc_acktr_entry_init(&acktr->objalloc, 32, mem); + + rv = ngtcp2_ringbuf_init(&acktr->acks, 32, sizeof(ngtcp2_acktr_ack_entry), mem); if (rv != 0) { return rv; } - rv = ngtcp2_ksl_init(&acktr->ents, greater, sizeof(int64_t), mem); - if (rv != 0) { - ngtcp2_ringbuf_free(&acktr->acks); - return rv; - } + ngtcp2_ksl_init(&acktr->ents, greater, sizeof(int64_t), mem); acktr->log = log; acktr->mem = mem; @@ -74,24 +81,31 @@ int ngtcp2_acktr_init(ngtcp2_acktr *acktr, ngtcp2_log *log, } void ngtcp2_acktr_free(ngtcp2_acktr *acktr) { +#ifdef NOMEMPOOL ngtcp2_ksl_it it; +#endif /* NOMEMPOOL */ if (acktr == NULL) { return; } +#ifdef NOMEMPOOL for (it = ngtcp2_ksl_begin(&acktr->ents); !ngtcp2_ksl_it_end(&it); ngtcp2_ksl_it_next(&it)) { - ngtcp2_acktr_entry_del(ngtcp2_ksl_it_get(&it), acktr->mem); + ngtcp2_acktr_entry_objalloc_del(ngtcp2_ksl_it_get(&it), &acktr->objalloc); } +#endif /* NOMEMPOOL */ + ngtcp2_ksl_free(&acktr->ents); ngtcp2_ringbuf_free(&acktr->acks); + + ngtcp2_objalloc_free(&acktr->objalloc); } int ngtcp2_acktr_add(ngtcp2_acktr *acktr, int64_t pkt_num, int active_ack, ngtcp2_tstamp ts) { - ngtcp2_ksl_it it; + ngtcp2_ksl_it it, prev_it; ngtcp2_acktr_entry *ent, *prev_ent, *delent; int rv; int added = 0; @@ -122,16 +136,17 @@ int ngtcp2_acktr_add(ngtcp2_acktr *acktr, int64_t pkt_num, int active_ack, added = 1; } } else { - ngtcp2_ksl_it_prev(&it); - prev_ent = ngtcp2_ksl_it_get(&it); + prev_it = it; + ngtcp2_ksl_it_prev(&prev_it); + prev_ent = ngtcp2_ksl_it_get(&prev_it); assert(prev_ent->pkt_num >= pkt_num + (int64_t)prev_ent->len); if (ent->pkt_num + 1 == pkt_num) { if (prev_ent->pkt_num == pkt_num + (int64_t)prev_ent->len) { prev_ent->len += ent->len + 1; - ngtcp2_ksl_remove(&acktr->ents, NULL, &ent->pkt_num); - ngtcp2_acktr_entry_del(ent, acktr->mem); + ngtcp2_ksl_remove_hint(&acktr->ents, NULL, &it, &ent->pkt_num); + ngtcp2_acktr_entry_objalloc_del(ent, &acktr->objalloc); added = 1; } else { ngtcp2_ksl_update_key(&acktr->ents, &ent->pkt_num, &pkt_num); @@ -149,13 +164,13 @@ int ngtcp2_acktr_add(ngtcp2_acktr *acktr, int64_t pkt_num, int active_ack, } if (!added) { - rv = ngtcp2_acktr_entry_new(&ent, pkt_num, ts, acktr->mem); + rv = ngtcp2_acktr_entry_objalloc_new(&ent, pkt_num, ts, &acktr->objalloc); if (rv != 0) { return rv; } rv = ngtcp2_ksl_insert(&acktr->ents, NULL, &ent->pkt_num, ent); if (rv != 0) { - ngtcp2_acktr_entry_del(ent, acktr->mem); + ngtcp2_acktr_entry_objalloc_del(ent, &acktr->objalloc); return rv; } } @@ -171,8 +186,8 @@ int ngtcp2_acktr_add(ngtcp2_acktr *acktr, int64_t pkt_num, int active_ack, it = ngtcp2_ksl_end(&acktr->ents); ngtcp2_ksl_it_prev(&it); delent = ngtcp2_ksl_it_get(&it); - ngtcp2_ksl_remove(&acktr->ents, NULL, &delent->pkt_num); - ngtcp2_acktr_entry_del(delent, acktr->mem); + ngtcp2_ksl_remove_hint(&acktr->ents, NULL, &it, &delent->pkt_num); + ngtcp2_acktr_entry_objalloc_del(delent, &acktr->objalloc); } return 0; @@ -186,8 +201,8 @@ void ngtcp2_acktr_forget(ngtcp2_acktr *acktr, ngtcp2_acktr_entry *ent) { for (; !ngtcp2_ksl_it_end(&it);) { ent = ngtcp2_ksl_it_get(&it); - ngtcp2_ksl_remove(&acktr->ents, &it, &ent->pkt_num); - ngtcp2_acktr_entry_del(ent, acktr->mem); + ngtcp2_ksl_remove_hint(&acktr->ents, &it, &it, &ent->pkt_num); + ngtcp2_acktr_entry_objalloc_del(ent, &acktr->objalloc); } } @@ -212,13 +227,14 @@ ngtcp2_acktr_ack_entry *ngtcp2_acktr_add_ack(ngtcp2_acktr *acktr, } /* - * acktr_remove removes |ent| from |acktr|. The iterator which points - * to the entry next to |ent| is assigned to |it|. + * acktr_remove removes |ent| from |acktr|. |it| must point to the + * node whose key identifies |ent|. The iterator which points to the + * entry next to |ent| is assigned to |it|. */ static void acktr_remove(ngtcp2_acktr *acktr, ngtcp2_ksl_it *it, ngtcp2_acktr_entry *ent) { - ngtcp2_ksl_remove(&acktr->ents, it, &ent->pkt_num); - ngtcp2_acktr_entry_del(ent, acktr->mem); + ngtcp2_ksl_remove_hint(&acktr->ents, it, it, &ent->pkt_num); + ngtcp2_acktr_entry_objalloc_del(ent, &acktr->objalloc); } static void acktr_on_ack(ngtcp2_acktr *acktr, ngtcp2_ringbuf *rb, @@ -310,7 +326,8 @@ void ngtcp2_acktr_commit_ack(ngtcp2_acktr *acktr) { int ngtcp2_acktr_require_active_ack(ngtcp2_acktr *acktr, ngtcp2_duration max_ack_delay, ngtcp2_tstamp ts) { - return acktr->first_unacked_ts <= ts - max_ack_delay; + return acktr->first_unacked_ts != UINT64_MAX && + acktr->first_unacked_ts + max_ack_delay <= ts; } void ngtcp2_acktr_immediate_ack(ngtcp2_acktr *acktr) { diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_acktr.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_acktr.h index 51e1588e3c4..1b00d64fe62 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_acktr.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_acktr.h @@ -35,6 +35,7 @@ #include "ngtcp2_ringbuf.h" #include "ngtcp2_ksl.h" #include "ngtcp2_pkt.h" +#include "ngtcp2_objalloc.h" /* NGTCP2_ACKTR_MAX_ENT is the maximum number of ngtcp2_acktr_entry which ngtcp2_acktr stores. */ @@ -46,22 +47,30 @@ typedef struct ngtcp2_log ngtcp2_log; * ngtcp2_acktr_entry is a range of packets which need to be acked. */ typedef struct ngtcp2_acktr_entry { - /* pkt_num is the largest packet number to acknowledge in this - range. */ - int64_t pkt_num; - /* len is the consecutive packets started from pkt_num which - includes pkt_num itself counting in decreasing order. So pkt_num - = 987 and len = 2, this entry includes packet 987 and 986. */ - size_t len; - /* tstamp is the timestamp when a packet denoted by pkt_num is - received. */ - ngtcp2_tstamp tstamp; + union { + struct { + /* pkt_num is the largest packet number to acknowledge in this + range. */ + int64_t pkt_num; + /* len is the consecutive packets started from pkt_num which + includes pkt_num itself counting in decreasing order. So pkt_num + = 987 and len = 2, this entry includes packet 987 and 986. */ + size_t len; + /* tstamp is the timestamp when a packet denoted by pkt_num is + received. */ + ngtcp2_tstamp tstamp; + }; + + ngtcp2_opl_entry oplent; + }; } ngtcp2_acktr_entry; +ngtcp2_objalloc_def(acktr_entry, ngtcp2_acktr_entry, oplent); + /* - * ngtcp2_acktr_entry_new allocates memory for ent, and initializes it - * with the given parameters. The pointer to the allocated object is - * stored to |*ent|. + * ngtcp2_acktr_entry_objalloc_new allocates memory for ent, and + * initializes it with the given parameters. The pointer to the + * allocated object is stored to |*ent|. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -69,14 +78,16 @@ typedef struct ngtcp2_acktr_entry { * NGTCP2_ERR_NOMEM * Out of memory. */ -int ngtcp2_acktr_entry_new(ngtcp2_acktr_entry **ent, int64_t pkt_num, - ngtcp2_tstamp tstamp, const ngtcp2_mem *mem); +int ngtcp2_acktr_entry_objalloc_new(ngtcp2_acktr_entry **ent, int64_t pkt_num, + ngtcp2_tstamp tstamp, + ngtcp2_objalloc *objalloc); /* - * ngtcp2_acktr_entry_del deallocates memory allocated for |ent|. It - * deallocates memory pointed by |ent|. + * ngtcp2_acktr_entry_objalloc_del deallocates memory allocated for + * |ent|. */ -void ngtcp2_acktr_entry_del(ngtcp2_acktr_entry *ent, const ngtcp2_mem *mem); +void ngtcp2_acktr_entry_objalloc_del(ngtcp2_acktr_entry *ent, + ngtcp2_objalloc *objalloc); typedef struct ngtcp2_acktr_ack_entry { /* largest_ack is the largest packet number in outgoing ACK frame */ @@ -86,25 +97,22 @@ typedef struct ngtcp2_acktr_ack_entry { } ngtcp2_acktr_ack_entry; /* NGTCP2_ACKTR_FLAG_NONE indicates that no flag set. */ -#define NGTCP2_ACKTR_FLAG_NONE 0x00 +#define NGTCP2_ACKTR_FLAG_NONE 0x00u /* NGTCP2_ACKTR_FLAG_IMMEDIATE_ACK indicates that immediate acknowledgement is required. */ -#define NGTCP2_ACKTR_FLAG_IMMEDIATE_ACK 0x01 +#define NGTCP2_ACKTR_FLAG_IMMEDIATE_ACK 0x01u /* NGTCP2_ACKTR_FLAG_ACTIVE_ACK indicates that there are pending protected packet to be acknowledged. */ -#define NGTCP2_ACKTR_FLAG_ACTIVE_ACK 0x02 -/* NGTCP2_ACKTR_FLAG_ACK_FINISHED_ACK is set when server received - acknowledgement for ACK which acknowledges the last handshake - packet from client (which contains TLSv1.3 Finished message). */ -#define NGTCP2_ACKTR_FLAG_ACK_FINISHED_ACK 0x80 +#define NGTCP2_ACKTR_FLAG_ACTIVE_ACK 0x02u /* NGTCP2_ACKTR_FLAG_CANCEL_TIMER is set when ACK delay timer is expired and canceled. */ -#define NGTCP2_ACKTR_FLAG_CANCEL_TIMER 0x0100 +#define NGTCP2_ACKTR_FLAG_CANCEL_TIMER 0x0100u /* * ngtcp2_acktr tracks received packets which we have to send ack. */ typedef struct ngtcp2_acktr { + ngtcp2_objalloc objalloc; ngtcp2_ringbuf acks; /* ents includes ngtcp2_acktr_entry sorted by decreasing order of packet number. */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_addr.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_addr.c index 22af219a9e1..daab5dd7ce6 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_addr.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_addr.c @@ -27,55 +27,41 @@ #include #include -#ifdef WIN32 -# include -# include -#else -# include -# include -# include -# include -# include -# include -#endif - -ngtcp2_addr *ngtcp2_addr_init(ngtcp2_addr *dest, const struct sockaddr *addr, - size_t addrlen, void *user_data) { +ngtcp2_addr *ngtcp2_addr_init(ngtcp2_addr *dest, const ngtcp2_sockaddr *addr, + ngtcp2_socklen addrlen) { dest->addrlen = addrlen; - dest->addr = (struct sockaddr *)addr; - dest->user_data = user_data; + dest->addr = (ngtcp2_sockaddr *)addr; return dest; } void ngtcp2_addr_copy(ngtcp2_addr *dest, const ngtcp2_addr *src) { dest->addrlen = src->addrlen; if (src->addrlen) { - memcpy(dest->addr, src->addr, src->addrlen); + memcpy(dest->addr, src->addr, (size_t)src->addrlen); } - dest->user_data = src->user_data; } -void ngtcp2_addr_copy_byte(ngtcp2_addr *dest, const struct sockaddr *addr, - size_t addrlen) { +void ngtcp2_addr_copy_byte(ngtcp2_addr *dest, const ngtcp2_sockaddr *addr, + ngtcp2_socklen addrlen) { dest->addrlen = addrlen; if (addrlen) { - memcpy(dest->addr, addr, addrlen); + memcpy(dest->addr, addr, (size_t)addrlen); } } -static int sockaddr_eq(const struct sockaddr *a, const struct sockaddr *b) { +static int sockaddr_eq(const ngtcp2_sockaddr *a, const ngtcp2_sockaddr *b) { assert(a->sa_family == b->sa_family); switch (a->sa_family) { - case AF_INET: { - const struct sockaddr_in *ai = (const struct sockaddr_in *)(void *)a, - *bi = (const struct sockaddr_in *)(void *)b; + case NGTCP2_AF_INET: { + const ngtcp2_sockaddr_in *ai = (const ngtcp2_sockaddr_in *)(void *)a, + *bi = (const ngtcp2_sockaddr_in *)(void *)b; return ai->sin_port == bi->sin_port && memcmp(&ai->sin_addr, &bi->sin_addr, sizeof(ai->sin_addr)) == 0; } - case AF_INET6: { - const struct sockaddr_in6 *ai = (const struct sockaddr_in6 *)(void *)a, - *bi = (const struct sockaddr_in6 *)(void *)b; + case NGTCP2_AF_INET6: { + const ngtcp2_sockaddr_in6 *ai = (const ngtcp2_sockaddr_in6 *)(void *)a, + *bi = (const ngtcp2_sockaddr_in6 *)(void *)b; return ai->sin6_port == bi->sin6_port && memcmp(&ai->sin6_addr, &bi->sin6_addr, sizeof(ai->sin6_addr)) == 0; } @@ -92,17 +78,17 @@ int ngtcp2_addr_eq(const ngtcp2_addr *a, const ngtcp2_addr *b) { uint32_t ngtcp2_addr_compare(const ngtcp2_addr *aa, const ngtcp2_addr *bb) { uint32_t flags = NGTCP2_ADDR_COMPARE_FLAG_NONE; - const struct sockaddr *a = aa->addr; - const struct sockaddr *b = bb->addr; + const ngtcp2_sockaddr *a = aa->addr; + const ngtcp2_sockaddr *b = bb->addr; if (a->sa_family != b->sa_family) { return NGTCP2_ADDR_COMPARE_FLAG_FAMILY; } switch (a->sa_family) { - case AF_INET: { - const struct sockaddr_in *ai = (const struct sockaddr_in *)(void *)a, - *bi = (const struct sockaddr_in *)(void *)b; + case NGTCP2_AF_INET: { + const ngtcp2_sockaddr_in *ai = (const ngtcp2_sockaddr_in *)(void *)a, + *bi = (const ngtcp2_sockaddr_in *)(void *)b; if (memcmp(&ai->sin_addr, &bi->sin_addr, sizeof(ai->sin_addr))) { flags |= NGTCP2_ADDR_COMPARE_FLAG_ADDR; } @@ -111,9 +97,9 @@ uint32_t ngtcp2_addr_compare(const ngtcp2_addr *aa, const ngtcp2_addr *bb) { } return flags; } - case AF_INET6: { - const struct sockaddr_in6 *ai = (const struct sockaddr_in6 *)(void *)a, - *bi = (const struct sockaddr_in6 *)(void *)b; + case NGTCP2_AF_INET6: { + const ngtcp2_sockaddr_in6 *ai = (const ngtcp2_sockaddr_in6 *)(void *)a, + *bi = (const ngtcp2_sockaddr_in6 *)(void *)b; if (memcmp(&ai->sin6_addr, &bi->sin6_addr, sizeof(ai->sin6_addr))) { flags |= NGTCP2_ADDR_COMPARE_FLAG_ADDR; } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_addr.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_addr.h index 84c0c01ddbf..f1d7f7bdc70 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_addr.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_addr.h @@ -38,30 +38,21 @@ */ void ngtcp2_addr_copy(ngtcp2_addr *dest, const ngtcp2_addr *src); -/* - * ngtcp2_addr_copy_byte copies |addr| of length |addrlen| into the - * buffer pointed by dest->addr. dest->len is updated to have - * |addrlen|. This function assumes that dest->addr points to a - * buffer which have sufficient size to store the copy. - */ -void ngtcp2_addr_copy_byte(ngtcp2_addr *dest, const struct sockaddr *addr, - size_t addrlen); - /* * ngtcp2_addr_eq returns nonzero if |a| equals |b|. */ int ngtcp2_addr_eq(const ngtcp2_addr *a, const ngtcp2_addr *b); /* NGTCP2_ADDR_COMPARE_FLAG_NONE indicates that no flag set. */ -#define NGTCP2_ADDR_COMPARE_FLAG_NONE 0x0 +#define NGTCP2_ADDR_COMPARE_FLAG_NONE 0x0u /* NGTCP2_ADDR_COMPARE_FLAG_ADDR indicates IP addresses do not match. */ -#define NGTCP2_ADDR_COMPARE_FLAG_ADDR 0x1 +#define NGTCP2_ADDR_COMPARE_FLAG_ADDR 0x1u /* NGTCP2_ADDR_COMPARE_FLAG_PORT indicates ports do not match. */ -#define NGTCP2_ADDR_COMPARE_FLAG_PORT 0x2 +#define NGTCP2_ADDR_COMPARE_FLAG_PORT 0x2u /* NGTCP2_ADDR_COMPARE_FLAG_FAMILY indicates address families do not match. */ -#define NGTCP2_ADDR_COMPARE_FLAG_FAMILY 0x4 +#define NGTCP2_ADDR_COMPARE_FLAG_FAMILY 0x4u /* * ngtcp2_addr_compare compares address and port between |a| and |b|, diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_balloc.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_balloc.c new file mode 100644 index 00000000000..5cc39ee3b03 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_balloc.c @@ -0,0 +1,90 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "ngtcp2_balloc.h" + +#include + +#include "ngtcp2_mem.h" + +void ngtcp2_balloc_init(ngtcp2_balloc *balloc, size_t blklen, + const ngtcp2_mem *mem) { + assert((blklen & 0xfu) == 0); + + balloc->mem = mem; + balloc->blklen = blklen; + balloc->head = NULL; + ngtcp2_buf_init(&balloc->buf, (void *)"", 0); +} + +void ngtcp2_balloc_free(ngtcp2_balloc *balloc) { + if (balloc == NULL) { + return; + } + + ngtcp2_balloc_clear(balloc); +} + +void ngtcp2_balloc_clear(ngtcp2_balloc *balloc) { + ngtcp2_memblock_hd *p, *next; + + for (p = balloc->head; p; p = next) { + next = p->next; + ngtcp2_mem_free(balloc->mem, p); + } + + balloc->head = NULL; + ngtcp2_buf_init(&balloc->buf, (void *)"", 0); +} + +int ngtcp2_balloc_get(ngtcp2_balloc *balloc, void **pbuf, size_t n) { + uint8_t *p; + ngtcp2_memblock_hd *hd; + + assert(n <= balloc->blklen); + + if (ngtcp2_buf_left(&balloc->buf) < n) { + p = ngtcp2_mem_malloc(balloc->mem, + sizeof(ngtcp2_memblock_hd) + 0x10u + balloc->blklen); + if (p == NULL) { + return NGTCP2_ERR_NOMEM; + } + + hd = (ngtcp2_memblock_hd *)(void *)p; + hd->next = balloc->head; + balloc->head = hd; + ngtcp2_buf_init( + &balloc->buf, + (uint8_t *)(((uintptr_t)p + sizeof(ngtcp2_memblock_hd) + 0xfu) & + ~(uintptr_t)0xfu), + balloc->blklen); + } + + assert(((uintptr_t)balloc->buf.last & 0xfu) == 0); + + *pbuf = balloc->buf.last; + balloc->buf.last += (n + 0xfu) & ~(uintptr_t)0xfu; + + return 0; +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_balloc.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_balloc.h new file mode 100644 index 00000000000..1fb16325d99 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_balloc.h @@ -0,0 +1,91 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGTCP2_BALLOC_H +#define NGTCP2_BALLOC_H + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +#include "ngtcp2_buf.h" + +typedef struct ngtcp2_memblock_hd ngtcp2_memblock_hd; + +/* + * ngtcp2_memblock_hd is the header of memory block. + */ +struct ngtcp2_memblock_hd { + ngtcp2_memblock_hd *next; +}; + +/* + * ngtcp2_balloc is a custom memory allocator. It allocates |blklen| + * bytes of memory at once on demand, and returns its slice when the + * allocation is requested. + */ +typedef struct ngtcp2_balloc { + /* mem is the underlying memory allocator. */ + const ngtcp2_mem *mem; + /* blklen is the size of memory block. */ + size_t blklen; + /* head points to the list of memory block allocated so far. */ + ngtcp2_memblock_hd *head; + /* buf wraps the current memory block for allocation requests. */ + ngtcp2_buf buf; +} ngtcp2_balloc; + +/* + * ngtcp2_balloc_init initializes |balloc| with |blklen| which is the + * size of memory block. + */ +void ngtcp2_balloc_init(ngtcp2_balloc *balloc, size_t blklen, + const ngtcp2_mem *mem); + +/* + * ngtcp2_balloc_free releases all allocated memory blocks. + */ +void ngtcp2_balloc_free(ngtcp2_balloc *balloc); + +/* + * ngtcp2_balloc_get allocates |n| bytes of memory and assigns its + * pointer to |*pbuf|. + * + * It returns 0 if it succeeds, or one of the following negative error + * codes: + * + * NGTCP2_ERR_NOMEM + * Out of memory. + */ +int ngtcp2_balloc_get(ngtcp2_balloc *balloc, void **pbuf, size_t n); + +/* + * ngtcp2_balloc_clear releases all allocated memory blocks and + * initializes its state. + */ +void ngtcp2_balloc_clear(ngtcp2_balloc *balloc); + +#endif /* NGTCP2_BALLOC_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr.c new file mode 100644 index 00000000000..0816d69b816 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr.c @@ -0,0 +1,692 @@ +/* + * ngtcp2 + * + * Copyright (c) 2021 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "ngtcp2_bbr.h" + +#include + +#include "ngtcp2_log.h" +#include "ngtcp2_macro.h" +#include "ngtcp2_mem.h" +#include "ngtcp2_rcvry.h" +#include "ngtcp2_rst.h" + +static const double pacing_gain_cycle[] = {1.25, 0.75, 1, 1, 1, 1, 1, 1}; + +#define NGTCP2_BBR_GAIN_CYCLELEN \ + (sizeof(pacing_gain_cycle) / sizeof(pacing_gain_cycle[0])) + +#define NGTCP2_BBR_HIGH_GAIN 2.89 +#define NGTCP2_BBR_PROBE_RTT_DURATION (200 * NGTCP2_MILLISECONDS) +#define NGTCP2_RTPROP_FILTERLEN (10 * NGTCP2_SECONDS) +#define NGTCP2_BBR_BTL_BW_FILTERLEN 10 + +static void bbr_update_on_ack(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts); +static void bbr_update_model_and_state(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts); +static void bbr_update_control_parameters(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); +static void bbr_on_transmit(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat); +static void bbr_init_round_counting(ngtcp2_bbr_cc *cc); +static void bbr_update_round(ngtcp2_bbr_cc *cc, const ngtcp2_cc_ack *ack); +static void bbr_update_btl_bw(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); +static void bbr_update_rtprop(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); +static void bbr_init_pacing_rate(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat); +static void bbr_set_pacing_rate_with_gain(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat, + double pacing_gain); +static void bbr_set_pacing_rate(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat); +static void bbr_set_send_quantum(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat); +static void bbr_update_target_cwnd(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat); +static void bbr_modulate_cwnd_for_recovery(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); +static void bbr_save_cwnd(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat); +static void bbr_restore_cwnd(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat); +static void bbr_modulate_cwnd_for_probe_rtt(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat); +static void bbr_set_cwnd(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); +static void bbr_init(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp initial_ts); +static void bbr_enter_startup(ngtcp2_bbr_cc *cc); +static void bbr_init_full_pipe(ngtcp2_bbr_cc *cc); +static void bbr_check_full_pipe(ngtcp2_bbr_cc *cc); +static void bbr_enter_drain(ngtcp2_bbr_cc *cc); +static void bbr_check_drain(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); +static void bbr_enter_probe_bw(ngtcp2_bbr_cc *cc, ngtcp2_tstamp ts); +static void bbr_check_cycle_phase(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts); +static void bbr_advance_cycle_phase(ngtcp2_bbr_cc *cc, ngtcp2_tstamp ts); +static int bbr_is_next_cycle_phase(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts); +static void bbr_handle_restart_from_idle(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat); +static void bbr_check_probe_rtt(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); +static void bbr_enter_probe_rtt(ngtcp2_bbr_cc *cc); +static void bbr_handle_probe_rtt(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); +static void bbr_exit_probe_rtt(ngtcp2_bbr_cc *cc, ngtcp2_tstamp ts); + +void ngtcp2_bbr_cc_init(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_rst *rst, ngtcp2_tstamp initial_ts, + ngtcp2_rand rand, const ngtcp2_rand_ctx *rand_ctx, + ngtcp2_log *log) { + cc->ccb.log = log; + cc->rst = rst; + cc->rand = rand; + cc->rand_ctx = *rand_ctx; + cc->initial_cwnd = cstat->cwnd; + bbr_init(cc, cstat, initial_ts); +} + +void ngtcp2_bbr_cc_free(ngtcp2_bbr_cc *cc) { (void)cc; } + +int ngtcp2_cc_bbr_cc_init(ngtcp2_cc *cc, ngtcp2_log *log, + ngtcp2_conn_stat *cstat, ngtcp2_rst *rst, + ngtcp2_tstamp initial_ts, ngtcp2_rand rand, + const ngtcp2_rand_ctx *rand_ctx, + const ngtcp2_mem *mem) { + ngtcp2_bbr_cc *bbr_cc; + + bbr_cc = ngtcp2_mem_calloc(mem, 1, sizeof(ngtcp2_bbr_cc)); + if (bbr_cc == NULL) { + return NGTCP2_ERR_NOMEM; + } + + ngtcp2_bbr_cc_init(bbr_cc, cstat, rst, initial_ts, rand, rand_ctx, log); + + cc->ccb = &bbr_cc->ccb; + cc->on_pkt_acked = ngtcp2_cc_bbr_cc_on_pkt_acked; + cc->congestion_event = ngtcp2_cc_bbr_cc_congestion_event; + cc->on_spurious_congestion = ngtcp2_cc_bbr_cc_on_spurious_congestion; + cc->on_persistent_congestion = ngtcp2_cc_bbr_cc_on_persistent_congestion; + cc->on_ack_recv = ngtcp2_cc_bbr_cc_on_ack_recv; + cc->on_pkt_sent = ngtcp2_cc_bbr_cc_on_pkt_sent; + cc->new_rtt_sample = ngtcp2_cc_bbr_cc_new_rtt_sample; + cc->reset = ngtcp2_cc_bbr_cc_reset; + cc->event = ngtcp2_cc_bbr_cc_event; + + return 0; +} + +void ngtcp2_cc_bbr_cc_free(ngtcp2_cc *cc, const ngtcp2_mem *mem) { + ngtcp2_bbr_cc *bbr_cc = ngtcp2_struct_of(cc->ccb, ngtcp2_bbr_cc, ccb); + + ngtcp2_bbr_cc_free(bbr_cc); + ngtcp2_mem_free(mem, bbr_cc); +} + +void ngtcp2_cc_bbr_cc_on_pkt_acked(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt, ngtcp2_tstamp ts) { + (void)ccx; + (void)cstat; + (void)pkt; + (void)ts; +} + +static int in_congestion_recovery(const ngtcp2_conn_stat *cstat, + ngtcp2_tstamp sent_time) { + return cstat->congestion_recovery_start_ts != UINT64_MAX && + sent_time <= cstat->congestion_recovery_start_ts; +} + +void ngtcp2_cc_bbr_cc_congestion_event(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp sent_ts, + ngtcp2_tstamp ts) { + ngtcp2_bbr_cc *cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr_cc, ccb); + + if (cc->in_loss_recovery || cc->congestion_recovery_start_ts != UINT64_MAX || + in_congestion_recovery(cstat, sent_ts)) { + return; + } + + cc->congestion_recovery_start_ts = ts; +} + +void ngtcp2_cc_bbr_cc_on_spurious_congestion(ngtcp2_cc *ccx, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + ngtcp2_bbr_cc *cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr_cc, ccb); + (void)ts; + + cc->congestion_recovery_start_ts = UINT64_MAX; + cstat->congestion_recovery_start_ts = UINT64_MAX; + + if (cc->in_loss_recovery) { + cc->in_loss_recovery = 0; + cc->packet_conservation = 0; + bbr_restore_cwnd(cc, cstat); + } +} + +void ngtcp2_cc_bbr_cc_on_persistent_congestion(ngtcp2_cc *ccx, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + ngtcp2_bbr_cc *cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr_cc, ccb); + (void)ts; + + cstat->congestion_recovery_start_ts = UINT64_MAX; + cc->congestion_recovery_start_ts = UINT64_MAX; + cc->in_loss_recovery = 0; + cc->packet_conservation = 0; + + bbr_save_cwnd(cc, cstat); + cstat->cwnd = 2 * cstat->max_udp_payload_size; +} + +void ngtcp2_cc_bbr_cc_on_ack_recv(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts) { + ngtcp2_bbr_cc *bbr_cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr_cc, ccb); + + bbr_update_on_ack(bbr_cc, cstat, ack, ts); +} + +void ngtcp2_cc_bbr_cc_on_pkt_sent(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt) { + ngtcp2_bbr_cc *bbr_cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr_cc, ccb); + (void)pkt; + + bbr_on_transmit(bbr_cc, cstat); +} + +void ngtcp2_cc_bbr_cc_new_rtt_sample(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + (void)ccx; + (void)cstat; + (void)ts; +} + +void ngtcp2_cc_bbr_cc_reset(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + ngtcp2_bbr_cc *bbr_cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr_cc, ccb); + bbr_init(bbr_cc, cstat, ts); +} + +void ngtcp2_cc_bbr_cc_event(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + ngtcp2_cc_event_type event, ngtcp2_tstamp ts) { + (void)ccx; + (void)cstat; + (void)event; + (void)ts; +} + +static void bbr_update_on_ack(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts) { + bbr_update_model_and_state(cc, cstat, ack, ts); + bbr_update_control_parameters(cc, cstat, ack); +} + +static void bbr_update_model_and_state(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts) { + bbr_update_btl_bw(cc, cstat, ack); + bbr_check_cycle_phase(cc, cstat, ack, ts); + bbr_check_full_pipe(cc); + bbr_check_drain(cc, cstat, ts); + bbr_update_rtprop(cc, cstat, ts); + bbr_check_probe_rtt(cc, cstat, ts); +} + +static void bbr_update_control_parameters(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + bbr_set_pacing_rate(cc, cstat); + bbr_set_send_quantum(cc, cstat); + bbr_set_cwnd(cc, cstat, ack); +} + +static void bbr_on_transmit(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat) { + bbr_handle_restart_from_idle(cc, cstat); +} + +static void bbr_init_round_counting(ngtcp2_bbr_cc *cc) { + cc->next_round_delivered = 0; + cc->round_start = 0; + cc->round_count = 0; +} + +static void bbr_update_round(ngtcp2_bbr_cc *cc, const ngtcp2_cc_ack *ack) { + if (ack->pkt_delivered >= cc->next_round_delivered) { + cc->next_round_delivered = cc->rst->delivered; + ++cc->round_count; + cc->round_start = 1; + + return; + } + + cc->round_start = 0; +} + +static void bbr_handle_recovery(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + if (cc->in_loss_recovery) { + if (ack->pkt_delivered >= cc->congestion_recovery_next_round_delivered) { + cc->packet_conservation = 0; + } + + if (!in_congestion_recovery(cstat, ack->largest_acked_sent_ts)) { + cc->in_loss_recovery = 0; + cc->packet_conservation = 0; + bbr_restore_cwnd(cc, cstat); + } + + return; + } + + if (cc->congestion_recovery_start_ts != UINT64_MAX) { + cc->in_loss_recovery = 1; + bbr_save_cwnd(cc, cstat); + cstat->cwnd = cstat->bytes_in_flight + + ngtcp2_max(ack->bytes_delivered, cstat->max_udp_payload_size); + + cstat->congestion_recovery_start_ts = cc->congestion_recovery_start_ts; + cc->congestion_recovery_start_ts = UINT64_MAX; + cc->packet_conservation = 1; + cc->congestion_recovery_next_round_delivered = cc->rst->delivered; + } +} + +static void bbr_update_btl_bw(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + bbr_update_round(cc, ack); + bbr_handle_recovery(cc, cstat, ack); + + if (cstat->delivery_rate_sec < cc->btl_bw && cc->rst->rs.is_app_limited) { + return; + } + + ngtcp2_window_filter_update(&cc->btl_bw_filter, cstat->delivery_rate_sec, + cc->round_count); + + cc->btl_bw = ngtcp2_window_filter_get_best(&cc->btl_bw_filter); +} + +static void bbr_update_rtprop(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + cc->rtprop_expired = ts > cc->rtprop_stamp + NGTCP2_RTPROP_FILTERLEN; + + /* Need valid RTT sample */ + if (cstat->latest_rtt && + (cstat->latest_rtt <= cc->rt_prop || cc->rtprop_expired)) { + cc->rt_prop = cstat->latest_rtt; + cc->rtprop_stamp = ts; + + ngtcp2_log_info(cc->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr update RTprop=%" PRIu64, cc->rt_prop); + } +} + +static void bbr_init_pacing_rate(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat) { + double nominal_bandwidth = + (double)cc->initial_cwnd / (double)NGTCP2_MILLISECONDS; + + cstat->pacing_rate = cc->pacing_gain * nominal_bandwidth; +} + +static void bbr_set_pacing_rate_with_gain(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat, + double pacing_gain) { + double rate = pacing_gain * (double)cc->btl_bw / NGTCP2_SECONDS; + + if (cc->filled_pipe || rate > cstat->pacing_rate) { + cstat->pacing_rate = rate; + } +} + +static void bbr_set_pacing_rate(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat) { + bbr_set_pacing_rate_with_gain(cc, cstat, cc->pacing_gain); +} + +static void bbr_set_send_quantum(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat) { + uint64_t send_quantum; + (void)cc; + + if (cstat->pacing_rate < 1.2 * 1024 * 1024 / 8 / NGTCP2_SECONDS) { + cstat->send_quantum = cstat->max_udp_payload_size; + } else if (cstat->pacing_rate < 24.0 * 1024 * 1024 / 8 / NGTCP2_SECONDS) { + cstat->send_quantum = cstat->max_udp_payload_size * 2; + } else { + send_quantum = + (uint64_t)(cstat->pacing_rate * (double)(cstat->min_rtt == UINT64_MAX + ? NGTCP2_MILLISECONDS + : cstat->min_rtt)); + cstat->send_quantum = (size_t)ngtcp2_min(send_quantum, 64 * 1024); + } + + cstat->send_quantum = + ngtcp2_max(cstat->send_quantum, cstat->max_udp_payload_size * 10); +} + +static uint64_t bbr_inflight(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + double gain) { + uint64_t quanta = 3 * cstat->send_quantum; + double estimated_bdp; + + if (cc->rt_prop == UINT64_MAX) { + /* no valid RTT samples yet */ + return cc->initial_cwnd; + } + + estimated_bdp = (double)cc->btl_bw * (double)cc->rt_prop / NGTCP2_SECONDS; + + return (uint64_t)(gain * estimated_bdp) + quanta; +} + +static void bbr_update_target_cwnd(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat) { + cc->target_cwnd = bbr_inflight(cc, cstat, cc->cwnd_gain); +} + +static void bbr_modulate_cwnd_for_recovery(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + if (ack->bytes_lost > 0) { + if (cstat->cwnd > ack->bytes_lost) { + cstat->cwnd -= ack->bytes_lost; + cstat->cwnd = ngtcp2_max(cstat->cwnd, 2 * cstat->max_udp_payload_size); + } else { + cstat->cwnd = cstat->max_udp_payload_size; + } + } + + if (cc->packet_conservation) { + cstat->cwnd = + ngtcp2_max(cstat->cwnd, cstat->bytes_in_flight + ack->bytes_delivered); + } +} + +static void bbr_save_cwnd(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat) { + if (!cc->in_loss_recovery && cc->state != NGTCP2_BBR_STATE_PROBE_RTT) { + cc->prior_cwnd = cstat->cwnd; + return; + } + + cc->prior_cwnd = ngtcp2_max(cc->prior_cwnd, cstat->cwnd); +} + +static void bbr_restore_cwnd(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat) { + cstat->cwnd = ngtcp2_max(cstat->cwnd, cc->prior_cwnd); +} + +static uint64_t min_pipe_cwnd(size_t max_udp_payload_size) { + return max_udp_payload_size * 4; +} + +static void bbr_modulate_cwnd_for_probe_rtt(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat) { + if (cc->state == NGTCP2_BBR_STATE_PROBE_RTT) { + cstat->cwnd = + ngtcp2_min(cstat->cwnd, min_pipe_cwnd(cstat->max_udp_payload_size)); + } +} + +static void bbr_set_cwnd(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + bbr_update_target_cwnd(cc, cstat); + bbr_modulate_cwnd_for_recovery(cc, cstat, ack); + + if (!cc->packet_conservation) { + if (cc->filled_pipe) { + cstat->cwnd = + ngtcp2_min(cstat->cwnd + ack->bytes_delivered, cc->target_cwnd); + } else if (cstat->cwnd < cc->target_cwnd || + cc->rst->delivered < cc->initial_cwnd) { + cstat->cwnd += ack->bytes_delivered; + } + + cstat->cwnd = + ngtcp2_max(cstat->cwnd, min_pipe_cwnd(cstat->max_udp_payload_size)); + } + + bbr_modulate_cwnd_for_probe_rtt(cc, cstat); +} + +static void bbr_init(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp initial_ts) { + cc->pacing_gain = NGTCP2_BBR_HIGH_GAIN; + cc->prior_cwnd = 0; + cc->target_cwnd = 0; + cc->btl_bw = 0; + cc->rt_prop = UINT64_MAX; + cc->rtprop_stamp = initial_ts; + cc->cycle_stamp = UINT64_MAX; + cc->probe_rtt_done_stamp = UINT64_MAX; + cc->cycle_index = 0; + cc->rtprop_expired = 0; + cc->idle_restart = 0; + cc->packet_conservation = 0; + cc->probe_rtt_round_done = 0; + + cc->congestion_recovery_start_ts = UINT64_MAX; + cc->congestion_recovery_next_round_delivered = 0; + cc->in_loss_recovery = 0; + + cstat->send_quantum = cstat->max_udp_payload_size * 10; + + ngtcp2_window_filter_init(&cc->btl_bw_filter, NGTCP2_BBR_BTL_BW_FILTERLEN); + + bbr_init_round_counting(cc); + bbr_init_full_pipe(cc); + bbr_init_pacing_rate(cc, cstat); + bbr_enter_startup(cc); +} + +static void bbr_enter_startup(ngtcp2_bbr_cc *cc) { + cc->state = NGTCP2_BBR_STATE_STARTUP; + cc->pacing_gain = NGTCP2_BBR_HIGH_GAIN; + cc->cwnd_gain = NGTCP2_BBR_HIGH_GAIN; +} + +static void bbr_init_full_pipe(ngtcp2_bbr_cc *cc) { + cc->filled_pipe = 0; + cc->full_bw = 0; + cc->full_bw_count = 0; +} + +static void bbr_check_full_pipe(ngtcp2_bbr_cc *cc) { + if (cc->filled_pipe || !cc->round_start || cc->rst->rs.is_app_limited) { + /* no need to check for a full pipe now. */ + return; + } + + /* cc->btl_bw still growing? */ + if (cc->btl_bw * 100 >= cc->full_bw * 125) { + /* record new baseline level */ + cc->full_bw = cc->btl_bw; + cc->full_bw_count = 0; + return; + } + /* another round w/o much growth */ + ++cc->full_bw_count; + if (cc->full_bw_count >= 3) { + cc->filled_pipe = 1; + ngtcp2_log_info(cc->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr filled pipe, btl_bw=%" PRIu64, cc->btl_bw); + } +} + +static void bbr_enter_drain(ngtcp2_bbr_cc *cc) { + cc->state = NGTCP2_BBR_STATE_DRAIN; + /* pace slowly */ + cc->pacing_gain = 1.0 / NGTCP2_BBR_HIGH_GAIN; + /* maintain cwnd */ + cc->cwnd_gain = NGTCP2_BBR_HIGH_GAIN; +} + +static void bbr_check_drain(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + if (cc->state == NGTCP2_BBR_STATE_STARTUP && cc->filled_pipe) { + ngtcp2_log_info(cc->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr exit Startup and enter Drain"); + + bbr_enter_drain(cc); + } + + if (cc->state == NGTCP2_BBR_STATE_DRAIN && + cstat->bytes_in_flight <= bbr_inflight(cc, cstat, 1.0)) { + ngtcp2_log_info(cc->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr exit Drain and enter ProbeBW"); + + /* we estimate queue is drained */ + bbr_enter_probe_bw(cc, ts); + } +} + +static void bbr_enter_probe_bw(ngtcp2_bbr_cc *cc, ngtcp2_tstamp ts) { + uint8_t rand; + + cc->state = NGTCP2_BBR_STATE_PROBE_BW; + cc->pacing_gain = 1; + cc->cwnd_gain = 2; + + assert(cc->rand); + + cc->rand(&rand, 1, &cc->rand_ctx); + + cc->cycle_index = NGTCP2_BBR_GAIN_CYCLELEN - 1 - (size_t)(rand * 7 / 256); + bbr_advance_cycle_phase(cc, ts); +} + +static void bbr_check_cycle_phase(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts) { + if (cc->state == NGTCP2_BBR_STATE_PROBE_BW && + bbr_is_next_cycle_phase(cc, cstat, ack, ts)) { + bbr_advance_cycle_phase(cc, ts); + } +} + +static void bbr_advance_cycle_phase(ngtcp2_bbr_cc *cc, ngtcp2_tstamp ts) { + cc->cycle_stamp = ts; + cc->cycle_index = (cc->cycle_index + 1) & (NGTCP2_BBR_GAIN_CYCLELEN - 1); + cc->pacing_gain = pacing_gain_cycle[cc->cycle_index]; +} + +static int bbr_is_next_cycle_phase(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts) { + int is_full_length = (ts - cc->cycle_stamp) > cc->rt_prop; + + if (cc->pacing_gain > 1) { + return is_full_length && (ack->bytes_lost > 0 || + ack->prior_bytes_in_flight >= + bbr_inflight(cc, cstat, cc->pacing_gain)); + } + + if (cc->pacing_gain < 1) { + return is_full_length || + ack->prior_bytes_in_flight <= bbr_inflight(cc, cstat, 1); + } + + return is_full_length; +} + +static void bbr_handle_restart_from_idle(ngtcp2_bbr_cc *cc, + ngtcp2_conn_stat *cstat) { + if (cstat->bytes_in_flight == 0 && cc->rst->app_limited) { + ngtcp2_log_info(cc->ccb.log, NGTCP2_LOG_EVENT_RCV, "bbr restart from idle"); + + cc->idle_restart = 1; + + if (cc->state == NGTCP2_BBR_STATE_PROBE_BW) { + bbr_set_pacing_rate_with_gain(cc, cstat, 1); + } + } +} + +static void bbr_check_probe_rtt(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + if (cc->state != NGTCP2_BBR_STATE_PROBE_RTT && cc->rtprop_expired && + !cc->idle_restart) { + ngtcp2_log_info(cc->ccb.log, NGTCP2_LOG_EVENT_RCV, "bbr enter ProbeRTT"); + + bbr_enter_probe_rtt(cc); + bbr_save_cwnd(cc, cstat); + cc->probe_rtt_done_stamp = UINT64_MAX; + } + + if (cc->state == NGTCP2_BBR_STATE_PROBE_RTT) { + bbr_handle_probe_rtt(cc, cstat, ts); + } + + cc->idle_restart = 0; +} + +static void bbr_enter_probe_rtt(ngtcp2_bbr_cc *cc) { + cc->state = NGTCP2_BBR_STATE_PROBE_RTT; + cc->pacing_gain = 1; + cc->cwnd_gain = 1; +} + +static void bbr_handle_probe_rtt(ngtcp2_bbr_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + uint64_t app_limited = cc->rst->delivered + cstat->bytes_in_flight; + + /* Ignore low rate samples during NGTCP2_BBR_STATE_PROBE_RTT. */ + cc->rst->app_limited = app_limited ? app_limited : 1; + + if (cc->probe_rtt_done_stamp == UINT64_MAX && + cstat->bytes_in_flight <= min_pipe_cwnd(cstat->max_udp_payload_size)) { + cc->probe_rtt_done_stamp = ts + NGTCP2_BBR_PROBE_RTT_DURATION; + cc->probe_rtt_round_done = 0; + cc->next_round_delivered = cc->rst->delivered; + + return; + } + + if (cc->probe_rtt_done_stamp != UINT64_MAX) { + if (cc->round_start) { + cc->probe_rtt_round_done = 1; + } + + if (cc->probe_rtt_round_done && ts > cc->probe_rtt_done_stamp) { + cc->rtprop_stamp = ts; + bbr_restore_cwnd(cc, cstat); + bbr_exit_probe_rtt(cc, ts); + } + } +} + +static void bbr_exit_probe_rtt(ngtcp2_bbr_cc *cc, ngtcp2_tstamp ts) { + if (cc->filled_pipe) { + ngtcp2_log_info(cc->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr exit ProbeRTT and enter ProbeBW"); + + bbr_enter_probe_bw(cc, ts); + + return; + } + + ngtcp2_log_info(cc->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr exit ProbeRTT and enter Startup"); + + bbr_enter_startup(cc); +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr.h new file mode 100644 index 00000000000..7311f051e18 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr.h @@ -0,0 +1,156 @@ +/* + * ngtcp2 + * + * Copyright (c) 2021 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGTCP2_BBR_H +#define NGTCP2_BBR_H + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +#include "ngtcp2_cc.h" +#include "ngtcp2_window_filter.h" + +typedef struct ngtcp2_rst ngtcp2_rst; + +typedef enum ngtcp2_bbr_state { + NGTCP2_BBR_STATE_STARTUP, + NGTCP2_BBR_STATE_DRAIN, + NGTCP2_BBR_STATE_PROBE_BW, + NGTCP2_BBR_STATE_PROBE_RTT, +} ngtcp2_bbr_state; + +/* + * ngtcp2_bbr_cc is BBR congestion controller, described in + * https://tools.ietf.org/html/draft-cardwell-iccrg-bbr-congestion-control-00 + */ +typedef struct ngtcp2_bbr_cc { + ngtcp2_cc_base ccb; + + /* The max filter used to estimate BBR.BtlBw. */ + ngtcp2_window_filter btl_bw_filter; + uint64_t initial_cwnd; + ngtcp2_rst *rst; + ngtcp2_rand rand; + ngtcp2_rand_ctx rand_ctx; + + /* BBR variables */ + + /* The dynamic gain factor used to scale BBR.BtlBw to + produce BBR.pacing_rate. */ + double pacing_gain; + /* The dynamic gain factor used to scale the estimated BDP to produce a + congestion window (cwnd). */ + double cwnd_gain; + uint64_t full_bw; + /* packet.delivered value denoting the end of a packet-timed round trip. */ + uint64_t next_round_delivered; + /* Count of packet-timed round trips. */ + uint64_t round_count; + uint64_t prior_cwnd; + /* target_cwnd is the upper bound on the volume of data BBR + allows in flight. */ + uint64_t target_cwnd; + /* BBR's estimated bottleneck bandwidth available to the + transport flow, estimated from the maximum delivery rate sample in a + sliding window. */ + uint64_t btl_bw; + /* BBR's estimated two-way round-trip propagation delay of + the path, estimated from the windowed minimum recent round-trip delay + sample. */ + ngtcp2_duration rt_prop; + /* The wall clock time at which the current BBR.RTProp + sample was obtained. */ + ngtcp2_tstamp rtprop_stamp; + ngtcp2_tstamp cycle_stamp; + ngtcp2_tstamp probe_rtt_done_stamp; + /* congestion_recovery_start_ts is the time when congestion recovery + period started.*/ + ngtcp2_tstamp congestion_recovery_start_ts; + uint64_t congestion_recovery_next_round_delivered; + size_t full_bw_count; + size_t cycle_index; + ngtcp2_bbr_state state; + /* A boolean that records whether BBR estimates that it has ever fully + utilized its available bandwidth ("filled the pipe"). */ + int filled_pipe; + /* A boolean that BBR sets to true once per packet-timed round trip, + on ACKs that advance BBR.round_count. */ + int round_start; + int rtprop_expired; + int idle_restart; + int packet_conservation; + int probe_rtt_round_done; + /* in_loss_recovery becomes nonzero when BBR enters loss recovery + period. */ + int in_loss_recovery; +} ngtcp2_bbr_cc; + +int ngtcp2_cc_bbr_cc_init(ngtcp2_cc *cc, ngtcp2_log *log, + ngtcp2_conn_stat *cstat, ngtcp2_rst *rst, + ngtcp2_tstamp initial_ts, ngtcp2_rand rand, + const ngtcp2_rand_ctx *rand_ctx, + const ngtcp2_mem *mem); + +void ngtcp2_cc_bbr_cc_free(ngtcp2_cc *cc, const ngtcp2_mem *mem); + +void ngtcp2_bbr_cc_init(ngtcp2_bbr_cc *bbr_cc, ngtcp2_conn_stat *cstat, + ngtcp2_rst *rst, ngtcp2_tstamp initial_ts, + ngtcp2_rand rand, const ngtcp2_rand_ctx *rand_ctx, + ngtcp2_log *log); + +void ngtcp2_bbr_cc_free(ngtcp2_bbr_cc *cc); + +void ngtcp2_cc_bbr_cc_on_pkt_acked(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt, ngtcp2_tstamp ts); + +void ngtcp2_cc_bbr_cc_congestion_event(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp sent_ts, ngtcp2_tstamp ts); + +void ngtcp2_cc_bbr_cc_on_spurious_congestion(ngtcp2_cc *ccx, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +void ngtcp2_cc_bbr_cc_on_persistent_congestion(ngtcp2_cc *cc, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +void ngtcp2_cc_bbr_cc_on_ack_recv(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts); + +void ngtcp2_cc_bbr_cc_on_pkt_sent(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt); + +void ngtcp2_cc_bbr_cc_new_rtt_sample(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +void ngtcp2_cc_bbr_cc_reset(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +void ngtcp2_cc_bbr_cc_event(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_cc_event_type event, ngtcp2_tstamp ts); + +#endif /* NGTCP2_BBR_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr2.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr2.c new file mode 100644 index 00000000000..585ea11e8e2 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr2.c @@ -0,0 +1,1486 @@ +/* + * ngtcp2 + * + * Copyright (c) 2021 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "ngtcp2_bbr2.h" + +#include + +#include "ngtcp2_log.h" +#include "ngtcp2_macro.h" +#include "ngtcp2_mem.h" +#include "ngtcp2_rcvry.h" +#include "ngtcp2_rst.h" + +#define NGTCP2_BBR_MAX_BW_FILTERLEN 2 + +#define NGTCP2_BBR_EXTRA_ACKED_FILTERLEN 10 + +#define NGTCP2_BBR_STARTUP_PACING_GAIN ((double)2.77) + +#define NGTCP2_BBR_STARTUP_CWND_GAIN 2 + +#define NGTCP2_BBR_PROBE_RTT_CWND_GAIN ((double)0.5) + +#define NGTCP2_BBR_BETA_NUMER 7 +#define NGTCP2_BBR_BETA_DENOM 10 + +#define NGTCP2_BBR_LOSS_THRESH_NUMER 2 +#define NGTCP2_BBR_LOSS_THRESH_DENOM 100 + +#define NGTCP2_BBR_HEADROOM_NUMER 15 +#define NGTCP2_BBR_HEADROOM_DENOM 100 + +#define NGTCP2_BBR_PROBE_RTT_INTERVAL (5 * NGTCP2_SECONDS) +#define NGTCP2_BBR_MIN_RTT_FILTERLEN (10 * NGTCP2_SECONDS) + +#define NGTCP2_BBR_PROBE_RTT_DURATION (200 * NGTCP2_MILLISECONDS) + +#define NGTCP2_BBR_PACING_MARGIN_PERCENT 1 + +static void bbr_on_init(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp initial_ts); + +static void bbr_on_transmit(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +static void bbr_reset_congestion_signals(ngtcp2_bbr2_cc *bbr); + +static void bbr_reset_lower_bounds(ngtcp2_bbr2_cc *bbr); + +static void bbr_init_round_counting(ngtcp2_bbr2_cc *bbr); + +static void bbr_init_full_pipe(ngtcp2_bbr2_cc *bbr); + +static void bbr_init_pacing_rate(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat); + +static void bbr_set_pacing_rate_with_gain(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + double pacing_gain); + +static void bbr_set_pacing_rate(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat); + +static void bbr_enter_startup(ngtcp2_bbr2_cc *bbr); + +static void bbr_check_startup_done(ngtcp2_bbr2_cc *bbr, + const ngtcp2_cc_ack *ack); + +static void bbr_update_on_ack(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts); + +static void bbr_update_model_and_state(ngtcp2_bbr2_cc *cc, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts); + +static void bbr_update_control_parameters(ngtcp2_bbr2_cc *cc, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); + +static void bbr_update_on_loss(ngtcp2_bbr2_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt, ngtcp2_tstamp ts); + +static void bbr_update_latest_delivery_signals(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static void bbr_advance_latest_delivery_signals(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static void bbr_update_congestion_signals(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); + +static void bbr_adapt_lower_bounds_from_congestion(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static void bbr_init_lower_bounds(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat); + +static void bbr_loss_lower_bounds(ngtcp2_bbr2_cc *bbr); + +static void bbr_bound_bw_for_model(ngtcp2_bbr2_cc *bbr); + +static void bbr_update_max_bw(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); + +static void bbr_update_round(ngtcp2_bbr2_cc *bbr, const ngtcp2_cc_ack *ack); + +static void bbr_start_round(ngtcp2_bbr2_cc *bbr); + +static int bbr_is_in_probe_bw_state(ngtcp2_bbr2_cc *bbr); + +static void bbr_update_ack_aggregation(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts); + +static void bbr_enter_drain(ngtcp2_bbr2_cc *bbr); + +static void bbr_check_drain(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +static void bbr_enter_probe_bw(ngtcp2_bbr2_cc *bbr, ngtcp2_tstamp ts); + +static void bbr_start_probe_bw_down(ngtcp2_bbr2_cc *bbr, ngtcp2_tstamp ts); + +static void bbr_start_probe_bw_cruise(ngtcp2_bbr2_cc *bbr); + +static void bbr_start_probe_bw_refill(ngtcp2_bbr2_cc *bbr); + +static void bbr_start_probe_bw_up(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +static void bbr_update_probe_bw_cycle_phase(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts); + +static int bbr_check_time_to_cruise(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, ngtcp2_tstamp ts); + +static int bbr_has_elapsed_in_phase(ngtcp2_bbr2_cc *bbr, + ngtcp2_duration interval, ngtcp2_tstamp ts); + +static uint64_t bbr_inflight_with_headroom(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static void bbr_raise_inflight_hi_slope(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static void bbr_probe_inflight_hi_upward(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); + +static void bbr_adapt_upper_bounds(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts); + +static int bbr_check_time_to_probe_bw(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +static void bbr_pick_probe_wait(ngtcp2_bbr2_cc *bbr); + +static int bbr_is_reno_coexistence_probe_time(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static uint64_t bbr_target_inflight(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static int bbr_check_inflight_too_high(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +static int is_inflight_too_high(const ngtcp2_rs *rs); + +static void bbr_handle_inflight_too_high(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_rs *rs, ngtcp2_tstamp ts); + +static void bbr_handle_lost_packet(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt, ngtcp2_tstamp ts); + +static uint64_t bbr_inflight_hi_from_lost_packet(ngtcp2_bbr2_cc *bbr, + const ngtcp2_rs *rs, + const ngtcp2_cc_pkt *pkt); + +static void bbr_update_min_rtt(ngtcp2_bbr2_cc *bbr, const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts); + +static void bbr_check_probe_rtt(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +static void bbr_enter_probe_rtt(ngtcp2_bbr2_cc *bbr); + +static void bbr_handle_probe_rtt(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +static void bbr_check_probe_rtt_done(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, ngtcp2_tstamp ts); + +static void bbr_mark_connection_app_limited(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static void bbr_exit_probe_rtt(ngtcp2_bbr2_cc *bbr, ngtcp2_tstamp ts); + +static void bbr_handle_restart_from_idle(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +static uint64_t bbr_bdp_multiple(ngtcp2_bbr2_cc *bbr, uint64_t bw, double gain); + +static uint64_t bbr_quantization_budget(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + uint64_t inflight); + +static uint64_t bbr_inflight(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + uint64_t bw, double gain); + +static void bbr_update_max_inflight(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static void bbr_update_offload_budget(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static uint64_t min_pipe_cwnd(size_t max_udp_payload_size); + +static void bbr_advance_max_bw_filter(ngtcp2_bbr2_cc *bbr); + +static void bbr_modulate_cwnd_for_recovery(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); + +static void bbr_save_cwnd(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat); + +static void bbr_restore_cwnd(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat); + +static uint64_t bbr_probe_rtt_cwnd(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static void bbr_bound_cwnd_for_probe_rtt(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static void bbr_set_cwnd(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); + +static void bbr_bound_cwnd_for_model(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat); + +static void bbr_set_send_quantum(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat); + +static int in_congestion_recovery(const ngtcp2_conn_stat *cstat, + ngtcp2_tstamp sent_time); + +static void bbr_handle_recovery(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack); + +static void bbr_on_init(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp initial_ts) { + ngtcp2_window_filter_init(&bbr->max_bw_filter, NGTCP2_BBR_MAX_BW_FILTERLEN); + ngtcp2_window_filter_init(&bbr->extra_acked_filter, + NGTCP2_BBR_EXTRA_ACKED_FILTERLEN); + + bbr->min_rtt = UINT64_MAX; + bbr->min_rtt_stamp = initial_ts; + /* remark: Use UINT64_MAX instead of 0 for consistency. */ + bbr->probe_rtt_done_stamp = UINT64_MAX; + bbr->probe_rtt_round_done = 0; + bbr->prior_cwnd = 0; + bbr->idle_restart = 0; + bbr->extra_acked_interval_start = initial_ts; + bbr->extra_acked_delivered = 0; + + bbr_reset_congestion_signals(bbr); + bbr_reset_lower_bounds(bbr); + bbr_init_round_counting(bbr); + bbr_init_full_pipe(bbr); + bbr_init_pacing_rate(bbr, cstat); + bbr_enter_startup(bbr); + + cstat->send_quantum = cstat->max_udp_payload_size * 10; + + /* Missing in documentation */ + bbr->loss_round_start = 0; + bbr->loss_round_delivered = UINT64_MAX; + + bbr->rounds_since_bw_probe = 0; + + bbr->max_bw = 0; + bbr->bw = 0; + + bbr->cycle_count = 0; + + bbr->extra_acked = 0; + + bbr->bytes_lost_in_round = 0; + bbr->loss_events_in_round = 0; + + bbr->offload_budget = 0; + + bbr->probe_up_cnt = UINT64_MAX; + bbr->cycle_stamp = UINT64_MAX; + bbr->ack_phase = 0; + bbr->bw_probe_wait = 0; + bbr->bw_probe_samples = 0; + bbr->bw_probe_up_rounds = 0; + bbr->bw_probe_up_acks = 0; + + bbr->inflight_hi = UINT64_MAX; + bbr->bw_hi = UINT64_MAX; + + bbr->probe_rtt_expired = 0; + bbr->probe_rtt_min_delay = UINT64_MAX; + bbr->probe_rtt_min_stamp = initial_ts; + + bbr->in_loss_recovery = 0; + bbr->packet_conservation = 0; + + bbr->max_inflight = 0; + + bbr->congestion_recovery_start_ts = UINT64_MAX; + bbr->congestion_recovery_next_round_delivered = 0; + + bbr->prior_inflight_lo = 0; + bbr->prior_inflight_hi = 0; + bbr->prior_bw_lo = 0; +} + +static void bbr_reset_congestion_signals(ngtcp2_bbr2_cc *bbr) { + bbr->loss_in_round = 0; + bbr->bw_latest = 0; + bbr->inflight_latest = 0; +} + +static void bbr_reset_lower_bounds(ngtcp2_bbr2_cc *bbr) { + bbr->bw_lo = UINT64_MAX; + bbr->inflight_lo = UINT64_MAX; +} + +static void bbr_init_round_counting(ngtcp2_bbr2_cc *bbr) { + bbr->next_round_delivered = 0; + bbr->round_start = 0; + bbr->round_count = 0; +} + +static void bbr_init_full_pipe(ngtcp2_bbr2_cc *bbr) { + bbr->filled_pipe = 0; + bbr->full_bw = 0; + bbr->full_bw_count = 0; +} + +static void bbr_check_startup_full_bandwidth(ngtcp2_bbr2_cc *bbr) { + if (bbr->filled_pipe || !bbr->round_start || bbr->rst->rs.is_app_limited) { + return; + } + + if (bbr->max_bw * 100 >= bbr->full_bw * 125) { + bbr->full_bw = bbr->max_bw; + bbr->full_bw_count = 0; + } + + ++bbr->full_bw_count; + + if (bbr->full_bw_count >= 3) { + bbr->filled_pipe = 1; + + ngtcp2_log_info(bbr->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr2 filled pipe, full_bw=%" PRIu64, bbr->full_bw); + } +} + +static void bbr_check_startup_high_loss(ngtcp2_bbr2_cc *bbr, + const ngtcp2_cc_ack *ack) { + if (bbr->filled_pipe || !bbr->round_start || bbr->rst->rs.is_app_limited) { + return; + } + + if (bbr->loss_events_in_round <= 3) { + return; + } + + /* loss_thresh = 2% */ + if (bbr->bytes_lost_in_round * 100 <= ack->prior_bytes_in_flight * 2) { + return; + } + + bbr->filled_pipe = 1; +} + +static void bbr_init_pacing_rate(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat) { + double nominal_bandwidth = (double)bbr->initial_cwnd; + + cstat->pacing_rate = NGTCP2_BBR_STARTUP_PACING_GAIN * nominal_bandwidth / + (double)NGTCP2_MILLISECONDS; +} + +static void bbr_set_pacing_rate_with_gain(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + double pacing_gain) { + double rate = pacing_gain * (double)bbr->bw * + (100 - NGTCP2_BBR_PACING_MARGIN_PERCENT) / 100 / NGTCP2_SECONDS; + + if (bbr->filled_pipe || rate > cstat->pacing_rate) { + cstat->pacing_rate = rate; + } +} + +static void bbr_set_pacing_rate(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat) { + bbr_set_pacing_rate_with_gain(bbr, cstat, bbr->pacing_gain); +} + +static void bbr_enter_startup(ngtcp2_bbr2_cc *bbr) { + ngtcp2_log_info(bbr->ccb.log, NGTCP2_LOG_EVENT_RCV, "bbr2 enter Startup"); + + bbr->state = NGTCP2_BBR2_STATE_STARTUP; + bbr->pacing_gain = NGTCP2_BBR_STARTUP_PACING_GAIN; + bbr->cwnd_gain = NGTCP2_BBR_STARTUP_CWND_GAIN; +} + +static void bbr_check_startup_done(ngtcp2_bbr2_cc *bbr, + const ngtcp2_cc_ack *ack) { + bbr_check_startup_full_bandwidth(bbr); + bbr_check_startup_high_loss(bbr, ack); + + if (bbr->state == NGTCP2_BBR2_STATE_STARTUP && bbr->filled_pipe) { + bbr_enter_drain(bbr); + } +} + +static void bbr_on_transmit(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + bbr_handle_restart_from_idle(bbr, cstat, ts); +} + +static void bbr_update_on_ack(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts) { + bbr_update_model_and_state(bbr, cstat, ack, ts); + bbr_update_control_parameters(bbr, cstat, ack); +} + +static void bbr_update_model_and_state(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts) { + bbr_update_latest_delivery_signals(bbr, cstat); + bbr_update_congestion_signals(bbr, cstat, ack); + bbr_update_ack_aggregation(bbr, cstat, ack, ts); + bbr_check_startup_done(bbr, ack); + bbr_check_drain(bbr, cstat, ts); + bbr_update_probe_bw_cycle_phase(bbr, cstat, ack, ts); + bbr_update_min_rtt(bbr, ack, ts); + bbr_check_probe_rtt(bbr, cstat, ts); + bbr_advance_latest_delivery_signals(bbr, cstat); + bbr_bound_bw_for_model(bbr); +} + +static void bbr_update_control_parameters(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + bbr_set_pacing_rate(bbr, cstat); + bbr_set_send_quantum(bbr, cstat); + bbr_set_cwnd(bbr, cstat, ack); +} + +static void bbr_update_on_loss(ngtcp2_bbr2_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt, ngtcp2_tstamp ts) { + bbr_handle_lost_packet(cc, cstat, pkt, ts); +} + +static void bbr_update_latest_delivery_signals(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + bbr->loss_round_start = 0; + bbr->bw_latest = ngtcp2_max(bbr->bw_latest, cstat->delivery_rate_sec); + bbr->inflight_latest = + ngtcp2_max(bbr->inflight_latest, bbr->rst->rs.delivered); + + if (bbr->rst->rs.prior_delivered >= bbr->loss_round_delivered) { + bbr->loss_round_delivered = bbr->rst->delivered; + bbr->loss_round_start = 1; + } +} + +static void bbr_advance_latest_delivery_signals(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + if (bbr->loss_round_start) { + bbr->bw_latest = cstat->delivery_rate_sec; + bbr->inflight_latest = bbr->rst->rs.delivered; + } +} + +static void bbr_update_congestion_signals(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + bbr_update_max_bw(bbr, cstat, ack); + + if (ack->bytes_lost) { + bbr->bytes_lost_in_round += ack->bytes_lost; + ++bbr->loss_events_in_round; + + if (!bbr->loss_in_round) { + bbr->loss_in_round = 1; + bbr->loss_round_delivered = bbr->rst->delivered; + } + } + + if (!bbr->loss_round_start) { + return; + } + + bbr_adapt_lower_bounds_from_congestion(bbr, cstat); + + bbr->loss_in_round = 0; +} + +static void bbr_adapt_lower_bounds_from_congestion(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + if (!bbr->filled_pipe || bbr_is_in_probe_bw_state(bbr)) { + return; + } + + if (bbr->loss_in_round) { + bbr_init_lower_bounds(bbr, cstat); + bbr_loss_lower_bounds(bbr); + } +} + +static void bbr_init_lower_bounds(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + if (bbr->bw_lo == UINT64_MAX) { + bbr->bw_lo = bbr->max_bw; + } + + if (bbr->inflight_lo == UINT64_MAX) { + bbr->inflight_lo = cstat->cwnd; + } +} + +static void bbr_loss_lower_bounds(ngtcp2_bbr2_cc *bbr) { + bbr->bw_lo = ngtcp2_max(bbr->bw_latest, bbr->bw_lo * NGTCP2_BBR_BETA_NUMER / + NGTCP2_BBR_BETA_DENOM); + bbr->inflight_lo = ngtcp2_max(bbr->inflight_latest, + bbr->inflight_lo * NGTCP2_BBR_BETA_NUMER / + NGTCP2_BBR_BETA_DENOM); +} + +static void bbr_bound_bw_for_model(ngtcp2_bbr2_cc *bbr) { + bbr->bw = ngtcp2_min(bbr->max_bw, bbr->bw_lo); + bbr->bw = ngtcp2_min(bbr->bw, bbr->bw_hi); +} + +static void bbr_update_max_bw(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + bbr_update_round(bbr, ack); + bbr_handle_recovery(bbr, cstat, ack); + + if (cstat->delivery_rate_sec >= bbr->max_bw || !bbr->rst->rs.is_app_limited) { + ngtcp2_window_filter_update(&bbr->max_bw_filter, cstat->delivery_rate_sec, + bbr->cycle_count); + + bbr->max_bw = ngtcp2_window_filter_get_best(&bbr->max_bw_filter); + } +} + +static void bbr_update_round(ngtcp2_bbr2_cc *bbr, const ngtcp2_cc_ack *ack) { + if (ack->pkt_delivered >= bbr->next_round_delivered) { + bbr_start_round(bbr); + + ++bbr->round_count; + ++bbr->rounds_since_bw_probe; + bbr->round_start = 1; + + bbr->bytes_lost_in_round = 0; + bbr->loss_events_in_round = 0; + + bbr->rst->is_cwnd_limited = 0; + + return; + } + + bbr->round_start = 0; +} + +static void bbr_start_round(ngtcp2_bbr2_cc *bbr) { + bbr->next_round_delivered = bbr->rst->delivered; +} + +static int bbr_is_in_probe_bw_state(ngtcp2_bbr2_cc *bbr) { + switch (bbr->state) { + case NGTCP2_BBR2_STATE_PROBE_BW_DOWN: + case NGTCP2_BBR2_STATE_PROBE_BW_CRUISE: + case NGTCP2_BBR2_STATE_PROBE_BW_REFILL: + case NGTCP2_BBR2_STATE_PROBE_BW_UP: + return 1; + default: + return 0; + } +} + +static void bbr_update_ack_aggregation(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts) { + ngtcp2_duration interval = ts - bbr->extra_acked_interval_start; + uint64_t expected_delivered = bbr->bw * interval / NGTCP2_SECONDS; + uint64_t extra; + + if (bbr->extra_acked_delivered <= expected_delivered) { + bbr->extra_acked_delivered = 0; + bbr->extra_acked_interval_start = ts; + expected_delivered = 0; + } + + bbr->extra_acked_delivered += ack->bytes_delivered; + extra = bbr->extra_acked_delivered - expected_delivered; + extra = ngtcp2_min(extra, cstat->cwnd); + + ngtcp2_window_filter_update(&bbr->extra_acked_filter, extra, + bbr->round_count); + + bbr->extra_acked = ngtcp2_window_filter_get_best(&bbr->extra_acked_filter); +} + +static void bbr_enter_drain(ngtcp2_bbr2_cc *bbr) { + ngtcp2_log_info(bbr->ccb.log, NGTCP2_LOG_EVENT_RCV, "bbr2 enter Drain"); + + bbr->state = NGTCP2_BBR2_STATE_DRAIN; + bbr->pacing_gain = 1. / NGTCP2_BBR_STARTUP_CWND_GAIN; + bbr->cwnd_gain = NGTCP2_BBR_STARTUP_CWND_GAIN; +} + +static void bbr_check_drain(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + if (bbr->state == NGTCP2_BBR2_STATE_DRAIN && + cstat->bytes_in_flight <= bbr_inflight(bbr, cstat, bbr->bw, 1.0)) { + bbr_enter_probe_bw(bbr, ts); + } +} + +static void bbr_enter_probe_bw(ngtcp2_bbr2_cc *bbr, ngtcp2_tstamp ts) { + bbr_start_probe_bw_down(bbr, ts); +} + +static void bbr_start_probe_bw_down(ngtcp2_bbr2_cc *bbr, ngtcp2_tstamp ts) { + ngtcp2_log_info(bbr->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr2 start ProbeBW_DOWN"); + + bbr_reset_congestion_signals(bbr); + + bbr->probe_up_cnt = UINT64_MAX; + + bbr_pick_probe_wait(bbr); + + bbr->cycle_stamp = ts; + bbr->ack_phase = NGTCP2_BBR2_ACK_PHASE_ACKS_PROBE_STOPPING; + + bbr_start_round(bbr); + + bbr->state = NGTCP2_BBR2_STATE_PROBE_BW_DOWN; + bbr->pacing_gain = 0.9; + bbr->cwnd_gain = 2; +} + +static void bbr_start_probe_bw_cruise(ngtcp2_bbr2_cc *bbr) { + ngtcp2_log_info(bbr->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr2 start ProbeBW_CRUISE"); + + bbr->state = NGTCP2_BBR2_STATE_PROBE_BW_CRUISE; + bbr->pacing_gain = 1.0; + bbr->cwnd_gain = 2; +} + +static void bbr_start_probe_bw_refill(ngtcp2_bbr2_cc *bbr) { + ngtcp2_log_info(bbr->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr2 start ProbeBW_REFILL"); + + bbr_reset_lower_bounds(bbr); + + bbr->bw_probe_up_rounds = 0; + bbr->bw_probe_up_acks = 0; + bbr->ack_phase = NGTCP2_BBR2_ACK_PHASE_ACKS_REFILLING; + + bbr_start_round(bbr); + + bbr->state = NGTCP2_BBR2_STATE_PROBE_BW_REFILL; + bbr->pacing_gain = 1.0; + bbr->cwnd_gain = 2; +} + +static void bbr_start_probe_bw_up(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + ngtcp2_log_info(bbr->ccb.log, NGTCP2_LOG_EVENT_RCV, "bbr2 start ProbeBW_UP"); + + bbr->ack_phase = NGTCP2_BBR2_ACK_PHASE_ACKS_PROBE_STARTING; + + bbr_start_round(bbr); + + bbr->cycle_stamp = ts; + bbr->state = NGTCP2_BBR2_STATE_PROBE_BW_UP; + bbr->pacing_gain = 1.25; + bbr->cwnd_gain = 2; + + bbr_raise_inflight_hi_slope(bbr, cstat); +} + +static void bbr_update_probe_bw_cycle_phase(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts) { + if (!bbr->filled_pipe) { + return; + } + + bbr_adapt_upper_bounds(bbr, cstat, ack, ts); + + if (!bbr_is_in_probe_bw_state(bbr)) { + return; + } + + switch (bbr->state) { + case NGTCP2_BBR2_STATE_PROBE_BW_DOWN: + if (bbr_check_time_to_probe_bw(bbr, cstat, ts)) { + return; + } + + if (bbr_check_time_to_cruise(bbr, cstat, ts)) { + bbr_start_probe_bw_cruise(bbr); + } + + break; + case NGTCP2_BBR2_STATE_PROBE_BW_CRUISE: + if (bbr_check_time_to_probe_bw(bbr, cstat, ts)) { + return; + } + + break; + case NGTCP2_BBR2_STATE_PROBE_BW_REFILL: + if (bbr->round_start) { + bbr->bw_probe_samples = 1; + bbr_start_probe_bw_up(bbr, cstat, ts); + } + + break; + case NGTCP2_BBR2_STATE_PROBE_BW_UP: + if (bbr_has_elapsed_in_phase(bbr, bbr->min_rtt, ts) && + cstat->bytes_in_flight > bbr_inflight(bbr, cstat, bbr->max_bw, 1.25)) { + bbr_start_probe_bw_down(bbr, ts); + } + + break; + default: + break; + } +} + +static int bbr_check_time_to_cruise(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, ngtcp2_tstamp ts) { + (void)ts; + + if (cstat->bytes_in_flight > bbr_inflight_with_headroom(bbr, cstat)) { + return 0; + } + + if (cstat->bytes_in_flight <= bbr_inflight(bbr, cstat, bbr->max_bw, 1.0)) { + return 1; + } + + return 0; +} + +static int bbr_has_elapsed_in_phase(ngtcp2_bbr2_cc *bbr, + ngtcp2_duration interval, + ngtcp2_tstamp ts) { + return ts > bbr->cycle_stamp + interval; +} + +static uint64_t bbr_inflight_with_headroom(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + uint64_t headroom; + uint64_t mpcwnd; + if (bbr->inflight_hi == UINT64_MAX) { + return UINT64_MAX; + } + + headroom = ngtcp2_max(cstat->max_udp_payload_size, + bbr->inflight_hi * NGTCP2_BBR_HEADROOM_NUMER / + NGTCP2_BBR_HEADROOM_DENOM); + mpcwnd = min_pipe_cwnd(cstat->max_udp_payload_size); + + if (bbr->inflight_hi > headroom) { + return ngtcp2_max(bbr->inflight_hi - headroom, mpcwnd); + } + + return mpcwnd; +} + +static void bbr_raise_inflight_hi_slope(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + uint64_t growth_this_round = cstat->max_udp_payload_size + << bbr->bw_probe_up_rounds; + + bbr->bw_probe_up_rounds = ngtcp2_min(bbr->bw_probe_up_rounds + 1, 30); + bbr->probe_up_cnt = ngtcp2_max(cstat->cwnd / growth_this_round, 1) * + cstat->max_udp_payload_size; +} + +static void bbr_probe_inflight_hi_upward(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + uint64_t delta; + + if (!bbr->rst->is_cwnd_limited || cstat->cwnd < bbr->inflight_hi) { + return; + } + + bbr->bw_probe_up_acks += ack->bytes_delivered; + + if (bbr->bw_probe_up_acks >= bbr->probe_up_cnt) { + delta = bbr->bw_probe_up_acks / bbr->probe_up_cnt; + bbr->bw_probe_up_acks -= delta * bbr->probe_up_cnt; + bbr->inflight_hi += delta * cstat->max_udp_payload_size; + } + + if (bbr->round_start) { + bbr_raise_inflight_hi_slope(bbr, cstat); + } +} + +static void bbr_adapt_upper_bounds(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts) { + if (bbr->ack_phase == NGTCP2_BBR2_ACK_PHASE_ACKS_PROBE_STARTING && + bbr->round_start) { + bbr->ack_phase = NGTCP2_BBR2_ACK_PHASE_ACKS_PROBE_FEEDBACK; + } + + if (bbr->ack_phase == NGTCP2_BBR2_ACK_PHASE_ACKS_PROBE_STOPPING && + bbr->round_start) { + if (bbr_is_in_probe_bw_state(bbr) && !bbr->rst->rs.is_app_limited) { + bbr_advance_max_bw_filter(bbr); + } + } + + if (!bbr_check_inflight_too_high(bbr, cstat, ts)) { + /* bbr->bw_hi never be updated */ + if (bbr->inflight_hi == UINT64_MAX /* || bbr->bw_hi == UINT64_MAX */) { + return; + } + + if (bbr->rst->rs.tx_in_flight > bbr->inflight_hi) { + bbr->inflight_hi = bbr->rst->rs.tx_in_flight; + } + + if (cstat->delivery_rate_sec > bbr->bw_hi) { + bbr->bw_hi = cstat->delivery_rate_sec; + } + + if (bbr->state == NGTCP2_BBR2_STATE_PROBE_BW_UP) { + bbr_probe_inflight_hi_upward(bbr, cstat, ack); + } + } +} + +static int bbr_check_time_to_probe_bw(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + if (bbr_has_elapsed_in_phase(bbr, bbr->bw_probe_wait, ts) || + bbr_is_reno_coexistence_probe_time(bbr, cstat)) { + bbr_start_probe_bw_refill(bbr); + + return 1; + } + + return 0; +} + +static void bbr_pick_probe_wait(ngtcp2_bbr2_cc *bbr) { + uint8_t rand; + + bbr->rand(&rand, 1, &bbr->rand_ctx); + + bbr->rounds_since_bw_probe = (uint64_t)(rand * 2 / 256); + + bbr->rand(&rand, 1, &bbr->rand_ctx); + + bbr->bw_probe_wait = 2 * NGTCP2_SECONDS + + (ngtcp2_tstamp)((double)rand / 255. * NGTCP2_SECONDS); +} + +static int bbr_is_reno_coexistence_probe_time(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + uint64_t reno_rounds = + bbr_target_inflight(bbr, cstat) / cstat->max_udp_payload_size; + + return bbr->rounds_since_bw_probe >= ngtcp2_min(reno_rounds, 63); +} + +static uint64_t bbr_target_inflight(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + uint64_t bdp = bbr_inflight(bbr, cstat, bbr->bw, 1.0); + + return ngtcp2_min(bdp, cstat->cwnd); +} + +static int bbr_check_inflight_too_high(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + if (is_inflight_too_high(&bbr->rst->rs)) { + if (bbr->bw_probe_samples) { + bbr_handle_inflight_too_high(bbr, cstat, &bbr->rst->rs, ts); + } + + return 1; + } + + return 0; +} + +static int is_inflight_too_high(const ngtcp2_rs *rs) { + return rs->lost * NGTCP2_BBR_LOSS_THRESH_DENOM > + rs->tx_in_flight * NGTCP2_BBR_LOSS_THRESH_NUMER; +} + +static void bbr_handle_inflight_too_high(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_rs *rs, + ngtcp2_tstamp ts) { + bbr->bw_probe_samples = 0; + + if (!rs->is_app_limited) { + bbr->prior_inflight_hi = bbr->inflight_hi; + + bbr->inflight_hi = ngtcp2_max( + rs->tx_in_flight, bbr_target_inflight(bbr, cstat) * + NGTCP2_BBR_BETA_NUMER / NGTCP2_BBR_BETA_DENOM); + } + + if (bbr->state == NGTCP2_BBR2_STATE_PROBE_BW_UP) { + bbr_start_probe_bw_down(bbr, ts); + } +} + +static void bbr_handle_lost_packet(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt, ngtcp2_tstamp ts) { + ngtcp2_rs rs = {0}; + + if (!bbr->bw_probe_samples) { + return; + } + + rs.tx_in_flight = pkt->tx_in_flight; + rs.lost = bbr->rst->lost - pkt->lost; + rs.is_app_limited = pkt->is_app_limited; + + if (is_inflight_too_high(&rs)) { + rs.tx_in_flight = bbr_inflight_hi_from_lost_packet(bbr, &rs, pkt); + + bbr_handle_inflight_too_high(bbr, cstat, &rs, ts); + } +} + +static uint64_t bbr_inflight_hi_from_lost_packet(ngtcp2_bbr2_cc *bbr, + const ngtcp2_rs *rs, + const ngtcp2_cc_pkt *pkt) { + uint64_t inflight_prev, lost_prefix; + (void)bbr; + + assert(rs->tx_in_flight >= pkt->pktlen); + + inflight_prev = rs->tx_in_flight - pkt->pktlen; + + assert(rs->lost >= pkt->pktlen); + + /* bbr->rst->lost is not incremented for pkt yet */ + + if (inflight_prev * NGTCP2_BBR_LOSS_THRESH_NUMER < + rs->lost * NGTCP2_BBR_LOSS_THRESH_DENOM) { + return inflight_prev; + } + + lost_prefix = (inflight_prev * NGTCP2_BBR_LOSS_THRESH_NUMER - + rs->lost * NGTCP2_BBR_LOSS_THRESH_DENOM) / + (NGTCP2_BBR_LOSS_THRESH_DENOM - NGTCP2_BBR_LOSS_THRESH_NUMER); + + return inflight_prev + lost_prefix; +} + +static void bbr_update_min_rtt(ngtcp2_bbr2_cc *bbr, const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts) { + int min_rtt_expired; + + bbr->probe_rtt_expired = + ts > bbr->probe_rtt_min_stamp + NGTCP2_BBR_PROBE_RTT_INTERVAL; + + if (ack->rtt != UINT64_MAX && + (ack->rtt < bbr->probe_rtt_min_delay || bbr->probe_rtt_expired)) { + bbr->probe_rtt_min_delay = ack->rtt; + bbr->probe_rtt_min_stamp = ts; + } + + min_rtt_expired = ts > bbr->min_rtt_stamp + NGTCP2_BBR_MIN_RTT_FILTERLEN; + + if (bbr->probe_rtt_min_delay < bbr->min_rtt || min_rtt_expired) { + bbr->min_rtt = bbr->probe_rtt_min_delay; + bbr->min_rtt_stamp = bbr->probe_rtt_min_stamp; + + ngtcp2_log_info(bbr->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr2 update min_rtt=%" PRIu64, bbr->min_rtt); + } +} + +static void bbr_check_probe_rtt(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + if (bbr->state != NGTCP2_BBR2_STATE_PROBE_RTT && bbr->probe_rtt_expired && + !bbr->idle_restart) { + bbr_enter_probe_rtt(bbr); + bbr_save_cwnd(bbr, cstat); + + bbr->probe_rtt_done_stamp = UINT64_MAX; + bbr->ack_phase = NGTCP2_BBR2_ACK_PHASE_ACKS_PROBE_STOPPING; + + bbr_start_round(bbr); + } + + if (bbr->state == NGTCP2_BBR2_STATE_PROBE_RTT) { + bbr_handle_probe_rtt(bbr, cstat, ts); + } + + if (bbr->rst->rs.delivered) { + bbr->idle_restart = 0; + } +} + +static void bbr_enter_probe_rtt(ngtcp2_bbr2_cc *bbr) { + ngtcp2_log_info(bbr->ccb.log, NGTCP2_LOG_EVENT_RCV, "bbr2 enter ProbeRTT"); + + bbr->state = NGTCP2_BBR2_STATE_PROBE_RTT; + bbr->pacing_gain = 1; + bbr->cwnd_gain = NGTCP2_BBR_PROBE_RTT_CWND_GAIN; +} + +static void bbr_handle_probe_rtt(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + bbr_mark_connection_app_limited(bbr, cstat); + + if (bbr->probe_rtt_done_stamp == UINT64_MAX && + cstat->bytes_in_flight <= bbr_probe_rtt_cwnd(bbr, cstat)) { + bbr->probe_rtt_done_stamp = ts + NGTCP2_BBR_PROBE_RTT_DURATION; + bbr->probe_rtt_round_done = 0; + + bbr_start_round(bbr); + + return; + } + + if (bbr->probe_rtt_done_stamp != UINT64_MAX) { + if (bbr->round_start) { + bbr->probe_rtt_round_done = 1; + } + + if (bbr->probe_rtt_round_done) { + bbr_check_probe_rtt_done(bbr, cstat, ts); + } + } +} + +static void bbr_check_probe_rtt_done(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + if (bbr->probe_rtt_done_stamp != UINT64_MAX && + ts > bbr->probe_rtt_done_stamp) { + bbr->probe_rtt_min_stamp = ts; + bbr_restore_cwnd(bbr, cstat); + bbr_exit_probe_rtt(bbr, ts); + } +} + +static void bbr_mark_connection_app_limited(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + uint64_t app_limited = bbr->rst->delivered + cstat->bytes_in_flight; + + if (app_limited) { + bbr->rst->app_limited = app_limited; + } else { + bbr->rst->app_limited = cstat->max_udp_payload_size; + } +} + +static void bbr_exit_probe_rtt(ngtcp2_bbr2_cc *bbr, ngtcp2_tstamp ts) { + bbr_reset_lower_bounds(bbr); + + if (bbr->filled_pipe) { + bbr_start_probe_bw_down(bbr, ts); + bbr_start_probe_bw_cruise(bbr); + } else { + bbr_enter_startup(bbr); + } +} + +static void bbr_handle_restart_from_idle(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + if (cstat->bytes_in_flight == 0 && bbr->rst->app_limited) { + ngtcp2_log_info(bbr->ccb.log, NGTCP2_LOG_EVENT_RCV, + "bbr2 restart from idle"); + + bbr->idle_restart = 1; + bbr->extra_acked_interval_start = ts; + + if (bbr_is_in_probe_bw_state(bbr)) { + bbr_set_pacing_rate_with_gain(bbr, cstat, 1); + } else if (bbr->state == NGTCP2_BBR2_STATE_PROBE_RTT) { + bbr_check_probe_rtt_done(bbr, cstat, ts); + } + } +} + +static uint64_t bbr_bdp_multiple(ngtcp2_bbr2_cc *bbr, uint64_t bw, + double gain) { + uint64_t bdp; + + if (bbr->min_rtt == UINT64_MAX) { + return bbr->initial_cwnd; + } + + bdp = bw * bbr->min_rtt / NGTCP2_SECONDS; + + return (uint64_t)(gain * (double)bdp); +} + +static uint64_t min_pipe_cwnd(size_t max_udp_payload_size) { + return max_udp_payload_size * 4; +} + +static uint64_t bbr_quantization_budget(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + uint64_t inflight) { + bbr_update_offload_budget(bbr, cstat); + + inflight = ngtcp2_max(inflight, bbr->offload_budget); + inflight = ngtcp2_max(inflight, min_pipe_cwnd(cstat->max_udp_payload_size)); + + if (bbr->state == NGTCP2_BBR2_STATE_PROBE_BW_UP) { + inflight += 2 * cstat->max_udp_payload_size; + } + + return inflight; +} + +static uint64_t bbr_inflight(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + uint64_t bw, double gain) { + uint64_t inflight = bbr_bdp_multiple(bbr, bw, gain); + + return bbr_quantization_budget(bbr, cstat, inflight); +} + +static void bbr_update_max_inflight(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + uint64_t inflight; + + /* Not documented */ + /* bbr_update_aggregation_budget(bbr); */ + + inflight = bbr_bdp_multiple(bbr, bbr->bw, bbr->cwnd_gain) + bbr->extra_acked; + bbr->max_inflight = bbr_quantization_budget(bbr, cstat, inflight); +} + +static void bbr_update_offload_budget(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + bbr->offload_budget = 3 * cstat->send_quantum; +} + +static void bbr_advance_max_bw_filter(ngtcp2_bbr2_cc *bbr) { + ++bbr->cycle_count; +} + +static void bbr_modulate_cwnd_for_recovery(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + if (ack->bytes_lost > 0) { + if (cstat->cwnd > ack->bytes_lost) { + cstat->cwnd -= ack->bytes_lost; + cstat->cwnd = ngtcp2_max(cstat->cwnd, 2 * cstat->max_udp_payload_size); + } else { + cstat->cwnd = cstat->max_udp_payload_size; + } + } + + if (bbr->packet_conservation) { + cstat->cwnd = + ngtcp2_max(cstat->cwnd, cstat->bytes_in_flight + ack->bytes_delivered); + } +} + +static void bbr_save_cwnd(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat) { + if (!bbr->in_loss_recovery && bbr->state != NGTCP2_BBR2_STATE_PROBE_RTT) { + bbr->prior_cwnd = cstat->cwnd; + return; + } + + bbr->prior_cwnd = ngtcp2_max(bbr->prior_cwnd, cstat->cwnd); +} + +static void bbr_restore_cwnd(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat) { + cstat->cwnd = ngtcp2_max(cstat->cwnd, bbr->prior_cwnd); +} + +static uint64_t bbr_probe_rtt_cwnd(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + uint64_t probe_rtt_cwnd = + bbr_bdp_multiple(bbr, bbr->bw, NGTCP2_BBR_PROBE_RTT_CWND_GAIN); + uint64_t mpcwnd = min_pipe_cwnd(cstat->max_udp_payload_size); + + return ngtcp2_max(probe_rtt_cwnd, mpcwnd); +} + +static void bbr_bound_cwnd_for_probe_rtt(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + uint64_t probe_rtt_cwnd; + + if (bbr->state == NGTCP2_BBR2_STATE_PROBE_RTT) { + probe_rtt_cwnd = bbr_probe_rtt_cwnd(bbr, cstat); + + cstat->cwnd = ngtcp2_min(cstat->cwnd, probe_rtt_cwnd); + } +} + +static void bbr_set_cwnd(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + uint64_t mpcwnd; + + bbr_update_max_inflight(bbr, cstat); + bbr_modulate_cwnd_for_recovery(bbr, cstat, ack); + + if (!bbr->packet_conservation) { + if (bbr->filled_pipe) { + cstat->cwnd += ack->bytes_delivered; + cstat->cwnd = ngtcp2_min(cstat->cwnd, bbr->max_inflight); + } else if (cstat->cwnd < bbr->max_inflight || + bbr->rst->delivered < bbr->initial_cwnd) { + cstat->cwnd += ack->bytes_delivered; + } + + mpcwnd = min_pipe_cwnd(cstat->max_udp_payload_size); + cstat->cwnd = ngtcp2_max(cstat->cwnd, mpcwnd); + } + + bbr_bound_cwnd_for_probe_rtt(bbr, cstat); + bbr_bound_cwnd_for_model(bbr, cstat); +} + +static void bbr_bound_cwnd_for_model(ngtcp2_bbr2_cc *bbr, + ngtcp2_conn_stat *cstat) { + uint64_t cap = UINT64_MAX; + uint64_t mpcwnd = min_pipe_cwnd(cstat->max_udp_payload_size); + + if (bbr_is_in_probe_bw_state(bbr) && + bbr->state != NGTCP2_BBR2_STATE_PROBE_BW_CRUISE) { + cap = bbr->inflight_hi; + } else if (bbr->state == NGTCP2_BBR2_STATE_PROBE_RTT || + bbr->state == NGTCP2_BBR2_STATE_PROBE_BW_CRUISE) { + cap = bbr_inflight_with_headroom(bbr, cstat); + } + + cap = ngtcp2_min(cap, bbr->inflight_lo); + cap = ngtcp2_max(cap, mpcwnd); + + cstat->cwnd = ngtcp2_min(cstat->cwnd, cap); +} + +static void bbr_set_send_quantum(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat) { + size_t send_quantum = + (size_t)(cstat->pacing_rate * (double)(bbr->min_rtt == UINT64_MAX + ? NGTCP2_MILLISECONDS + : bbr->min_rtt)); + (void)bbr; + + cstat->send_quantum = ngtcp2_min(send_quantum, 64 * 1024); + cstat->send_quantum = + ngtcp2_max(cstat->send_quantum, cstat->max_udp_payload_size * 10); +} + +static int in_congestion_recovery(const ngtcp2_conn_stat *cstat, + ngtcp2_tstamp sent_time) { + return cstat->congestion_recovery_start_ts != UINT64_MAX && + sent_time <= cstat->congestion_recovery_start_ts; +} + +static void bbr_handle_recovery(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack) { + if (bbr->in_loss_recovery) { + if (ack->pkt_delivered >= bbr->congestion_recovery_next_round_delivered) { + bbr->packet_conservation = 0; + } + + if (!in_congestion_recovery(cstat, ack->largest_acked_sent_ts)) { + bbr->in_loss_recovery = 0; + bbr->packet_conservation = 0; + bbr_restore_cwnd(bbr, cstat); + } + + return; + } + + if (bbr->congestion_recovery_start_ts != UINT64_MAX) { + bbr->in_loss_recovery = 1; + bbr_save_cwnd(bbr, cstat); + cstat->cwnd = cstat->bytes_in_flight + + ngtcp2_max(ack->bytes_delivered, cstat->max_udp_payload_size); + + cstat->congestion_recovery_start_ts = bbr->congestion_recovery_start_ts; + bbr->congestion_recovery_start_ts = UINT64_MAX; + bbr->packet_conservation = 1; + bbr->congestion_recovery_next_round_delivered = bbr->rst->delivered; + bbr->prior_inflight_lo = bbr->inflight_lo; + bbr->prior_bw_lo = bbr->bw_lo; + } +} + +static void bbr2_cc_init(ngtcp2_bbr2_cc *bbr, ngtcp2_conn_stat *cstat, + ngtcp2_rst *rst, ngtcp2_tstamp initial_ts, + ngtcp2_rand rand, const ngtcp2_rand_ctx *rand_ctx, + ngtcp2_log *log) { + bbr->ccb.log = log; + bbr->rst = rst; + bbr->rand = rand; + bbr->rand_ctx = *rand_ctx; + bbr->initial_cwnd = cstat->cwnd; + + bbr_on_init(bbr, cstat, initial_ts); +} + +static void bbr2_cc_free(ngtcp2_bbr2_cc *bbr) { (void)bbr; } + +static void bbr2_cc_on_pkt_acked(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt, ngtcp2_tstamp ts) { + (void)ccx; + (void)cstat; + (void)pkt; + (void)ts; +} + +static void bbr2_cc_on_pkt_lost(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt, ngtcp2_tstamp ts) { + ngtcp2_bbr2_cc *bbr = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr2_cc, ccb); + + bbr_update_on_loss(bbr, cstat, pkt, ts); +} + +static void bbr2_cc_congestion_event(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp sent_ts, ngtcp2_tstamp ts) { + ngtcp2_bbr2_cc *bbr = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr2_cc, ccb); + + if (!bbr->filled_pipe || bbr->in_loss_recovery || + bbr->congestion_recovery_start_ts != UINT64_MAX || + in_congestion_recovery(cstat, sent_ts)) { + return; + } + + bbr->congestion_recovery_start_ts = ts; +} + +static void bbr2_cc_on_spurious_congestion(ngtcp2_cc *ccx, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + ngtcp2_bbr2_cc *bbr = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr2_cc, ccb); + (void)ts; + + bbr->congestion_recovery_start_ts = UINT64_MAX; + cstat->congestion_recovery_start_ts = UINT64_MAX; + + if (bbr->in_loss_recovery) { + bbr->in_loss_recovery = 0; + bbr->packet_conservation = 0; + bbr_restore_cwnd(bbr, cstat); + bbr->full_bw_count = 0; + bbr->loss_in_round = 0; + bbr->inflight_lo = ngtcp2_max(bbr->inflight_lo, bbr->prior_inflight_lo); + bbr->inflight_hi = ngtcp2_max(bbr->inflight_hi, bbr->prior_inflight_hi); + bbr->bw_lo = ngtcp2_max(bbr->bw_lo, bbr->prior_bw_lo); + } +} + +static void bbr2_cc_on_persistent_congestion(ngtcp2_cc *ccx, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + ngtcp2_bbr2_cc *bbr = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr2_cc, ccb); + (void)ts; + + cstat->congestion_recovery_start_ts = UINT64_MAX; + bbr->congestion_recovery_start_ts = UINT64_MAX; + bbr->in_loss_recovery = 0; + bbr->packet_conservation = 0; + + bbr_save_cwnd(bbr, cstat); + cstat->cwnd = cstat->bytes_in_flight + cstat->max_udp_payload_size; + cstat->cwnd = + ngtcp2_max(cstat->cwnd, min_pipe_cwnd(cstat->max_udp_payload_size)); +} + +static void bbr2_cc_on_ack_recv(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts) { + ngtcp2_bbr2_cc *bbr = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr2_cc, ccb); + + bbr_update_on_ack(bbr, cstat, ack, ts); +} + +static void bbr2_cc_on_pkt_sent(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt) { + ngtcp2_bbr2_cc *bbr = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr2_cc, ccb); + + bbr_on_transmit(bbr, cstat, pkt->sent_ts); +} + +static void bbr2_cc_new_rtt_sample(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + (void)ccx; + (void)cstat; + (void)ts; +} + +static void bbr2_cc_reset(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + ngtcp2_bbr2_cc *bbr = ngtcp2_struct_of(ccx->ccb, ngtcp2_bbr2_cc, ccb); + + bbr_on_init(bbr, cstat, ts); +} + +static void bbr2_cc_event(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + ngtcp2_cc_event_type event, ngtcp2_tstamp ts) { + (void)ccx; + (void)cstat; + (void)event; + (void)ts; +} + +int ngtcp2_cc_bbr2_cc_init(ngtcp2_cc *cc, ngtcp2_log *log, + ngtcp2_conn_stat *cstat, ngtcp2_rst *rst, + ngtcp2_tstamp initial_ts, ngtcp2_rand rand, + const ngtcp2_rand_ctx *rand_ctx, + const ngtcp2_mem *mem) { + ngtcp2_bbr2_cc *bbr; + + bbr = ngtcp2_mem_calloc(mem, 1, sizeof(ngtcp2_bbr2_cc)); + if (bbr == NULL) { + return NGTCP2_ERR_NOMEM; + } + + bbr2_cc_init(bbr, cstat, rst, initial_ts, rand, rand_ctx, log); + + cc->ccb = &bbr->ccb; + cc->on_pkt_acked = bbr2_cc_on_pkt_acked; + cc->on_pkt_lost = bbr2_cc_on_pkt_lost; + cc->congestion_event = bbr2_cc_congestion_event; + cc->on_spurious_congestion = bbr2_cc_on_spurious_congestion; + cc->on_persistent_congestion = bbr2_cc_on_persistent_congestion; + cc->on_ack_recv = bbr2_cc_on_ack_recv; + cc->on_pkt_sent = bbr2_cc_on_pkt_sent; + cc->new_rtt_sample = bbr2_cc_new_rtt_sample; + cc->reset = bbr2_cc_reset; + cc->event = bbr2_cc_event; + + return 0; +} + +void ngtcp2_cc_bbr2_cc_free(ngtcp2_cc *cc, const ngtcp2_mem *mem) { + ngtcp2_bbr2_cc *bbr = ngtcp2_struct_of(cc->ccb, ngtcp2_bbr2_cc, ccb); + + bbr2_cc_free(bbr); + ngtcp2_mem_free(mem, bbr); +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr2.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr2.h new file mode 100644 index 00000000000..50dc05a5f26 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_bbr2.h @@ -0,0 +1,149 @@ +/* + * ngtcp2 + * + * Copyright (c) 2021 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGTCP2_BBR2_H +#define NGTCP2_BBR2_H + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +#include "ngtcp2_cc.h" +#include "ngtcp2_window_filter.h" + +typedef struct ngtcp2_rst ngtcp2_rst; + +typedef enum ngtcp2_bbr2_state { + NGTCP2_BBR2_STATE_STARTUP, + NGTCP2_BBR2_STATE_DRAIN, + NGTCP2_BBR2_STATE_PROBE_BW_DOWN, + NGTCP2_BBR2_STATE_PROBE_BW_CRUISE, + NGTCP2_BBR2_STATE_PROBE_BW_REFILL, + NGTCP2_BBR2_STATE_PROBE_BW_UP, + NGTCP2_BBR2_STATE_PROBE_RTT, +} ngtcp2_bbr2_state; + +typedef enum ngtcp2_bbr2_ack_phase { + NGTCP2_BBR2_ACK_PHASE_ACKS_PROBE_STARTING, + NGTCP2_BBR2_ACK_PHASE_ACKS_PROBE_STOPPING, + NGTCP2_BBR2_ACK_PHASE_ACKS_PROBE_FEEDBACK, + NGTCP2_BBR2_ACK_PHASE_ACKS_REFILLING, +} ngtcp2_bbr2_ack_phase; + +/* + * ngtcp2_bbr2_cc is BBR v2 congestion controller, described in + * https://datatracker.ietf.org/doc/html/draft-cardwell-iccrg-bbr-congestion-control-01 + */ +typedef struct ngtcp2_bbr2_cc { + ngtcp2_cc_base ccb; + + uint64_t initial_cwnd; + ngtcp2_rst *rst; + ngtcp2_rand rand; + ngtcp2_rand_ctx rand_ctx; + + /* max_bw_filter for tracking the maximum recent delivery rate + samples for estimating max_bw. */ + ngtcp2_window_filter max_bw_filter; + + ngtcp2_window_filter extra_acked_filter; + + ngtcp2_duration min_rtt; + ngtcp2_tstamp min_rtt_stamp; + ngtcp2_tstamp probe_rtt_done_stamp; + int probe_rtt_round_done; + uint64_t prior_cwnd; + int idle_restart; + ngtcp2_tstamp extra_acked_interval_start; + uint64_t extra_acked_delivered; + + /* Congestion signals */ + int loss_in_round; + uint64_t bw_latest; + uint64_t inflight_latest; + + /* Lower bounds */ + uint64_t bw_lo; + uint64_t inflight_lo; + + /* Round counting */ + uint64_t next_round_delivered; + int round_start; + uint64_t round_count; + + /* Full pipe */ + int filled_pipe; + uint64_t full_bw; + size_t full_bw_count; + + /* Pacing rate */ + double pacing_gain; + + ngtcp2_bbr2_state state; + double cwnd_gain; + + int loss_round_start; + uint64_t loss_round_delivered; + uint64_t rounds_since_bw_probe; + uint64_t max_bw; + uint64_t bw; + uint64_t cycle_count; + uint64_t extra_acked; + uint64_t bytes_lost_in_round; + size_t loss_events_in_round; + uint64_t offload_budget; + uint64_t probe_up_cnt; + ngtcp2_tstamp cycle_stamp; + ngtcp2_bbr2_ack_phase ack_phase; + ngtcp2_duration bw_probe_wait; + int bw_probe_samples; + size_t bw_probe_up_rounds; + uint64_t bw_probe_up_acks; + uint64_t inflight_hi; + uint64_t bw_hi; + int probe_rtt_expired; + ngtcp2_duration probe_rtt_min_delay; + ngtcp2_tstamp probe_rtt_min_stamp; + int in_loss_recovery; + int packet_conservation; + uint64_t max_inflight; + ngtcp2_tstamp congestion_recovery_start_ts; + uint64_t congestion_recovery_next_round_delivered; + + uint64_t prior_inflight_lo; + uint64_t prior_inflight_hi; + uint64_t prior_bw_lo; +} ngtcp2_bbr2_cc; + +int ngtcp2_cc_bbr2_cc_init(ngtcp2_cc *cc, ngtcp2_log *log, + ngtcp2_conn_stat *cstat, ngtcp2_rst *rst, + ngtcp2_tstamp initial_ts, ngtcp2_rand rand, + const ngtcp2_rand_ctx *rand_ctx, + const ngtcp2_mem *mem); + +void ngtcp2_cc_bbr2_cc_free(ngtcp2_cc *cc, const ngtcp2_mem *mem); + +#endif /* NGTCP2_BBR2_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.c index 373f23d91ae..75326d6b76b 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.c @@ -23,6 +23,7 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "ngtcp2_buf.h" +#include "ngtcp2_mem.h" void ngtcp2_buf_init(ngtcp2_buf *buf, uint8_t *begin, size_t len) { buf->begin = buf->pos = buf->last = begin; @@ -31,14 +32,25 @@ void ngtcp2_buf_init(ngtcp2_buf *buf, uint8_t *begin, size_t len) { void ngtcp2_buf_reset(ngtcp2_buf *buf) { buf->pos = buf->last = buf->begin; } -size_t ngtcp2_buf_left(const ngtcp2_buf *buf) { - return (size_t)(buf->end - buf->last); +size_t ngtcp2_buf_cap(const ngtcp2_buf *buf) { + return (size_t)(buf->end - buf->begin); } -size_t ngtcp2_buf_len(const ngtcp2_buf *buf) { - return (size_t)(buf->last - buf->pos); +int ngtcp2_buf_chain_new(ngtcp2_buf_chain **pbufchain, size_t len, + const ngtcp2_mem *mem) { + *pbufchain = ngtcp2_mem_malloc(mem, sizeof(ngtcp2_buf_chain) + len); + if (*pbufchain == NULL) { + return NGTCP2_ERR_NOMEM; + } + + (*pbufchain)->next = NULL; + + ngtcp2_buf_init(&(*pbufchain)->buf, + (uint8_t *)(*pbufchain) + sizeof(ngtcp2_buf_chain), len); + + return 0; } -size_t ngtcp2_buf_cap(const ngtcp2_buf *buf) { - return (size_t)(buf->end - buf->begin); +void ngtcp2_buf_chain_del(ngtcp2_buf_chain *bufchain, const ngtcp2_mem *mem) { + ngtcp2_mem_free(mem, bufchain); } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.h index 8f2c36a1bbb..107d413382d 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_buf.h @@ -62,13 +62,13 @@ void ngtcp2_buf_reset(ngtcp2_buf *buf); * written to the underlying buffer. In other words, it returns * buf->end - buf->last. */ -size_t ngtcp2_buf_left(const ngtcp2_buf *buf); +#define ngtcp2_buf_left(BUF) (size_t)((BUF)->end - (BUF)->last) /* * ngtcp2_buf_len returns the number of bytes left to read. In other * words, it returns buf->last - buf->pos. */ -size_t ngtcp2_buf_len(const ngtcp2_buf *buf); +#define ngtcp2_buf_len(BUF) (size_t)((BUF)->last - (BUF)->pos) /* * ngtcp2_buf_cap returns the capacity of the buffer. In other words, @@ -76,4 +76,33 @@ size_t ngtcp2_buf_len(const ngtcp2_buf *buf); */ size_t ngtcp2_buf_cap(const ngtcp2_buf *buf); +/* + * ngtcp2_buf_chain is a linked list of ngtcp2_buf. + */ +typedef struct ngtcp2_buf_chain ngtcp2_buf_chain; + +struct ngtcp2_buf_chain { + ngtcp2_buf_chain *next; + ngtcp2_buf buf; +}; + +/* + * ngtcp2_buf_chain_new creates new ngtcp2_buf_chain and initializes + * the internal buffer with |len| bytes space. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGTCP2_ERR_NOMEM + * Out of memory + */ +int ngtcp2_buf_chain_new(ngtcp2_buf_chain **pbufchain, size_t len, + const ngtcp2_mem *mem); + +/* + * ngtcp2_buf_chain_del deletes the resource allocated by |bufchain|. + * It also deletes the memory pointed by |bufchain|. + */ +void ngtcp2_buf_chain_del(ngtcp2_buf_chain *bufchain, const ngtcp2_mem *mem); + #endif /* NGTCP2_BUF_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.c index f4670805c73..1ee7d96b047 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.c @@ -43,11 +43,15 @@ uint64_t ngtcp2_cc_compute_initcwnd(size_t max_udp_payload_size) { ngtcp2_cc_pkt *ngtcp2_cc_pkt_init(ngtcp2_cc_pkt *pkt, int64_t pkt_num, size_t pktlen, ngtcp2_pktns_id pktns_id, - ngtcp2_tstamp ts_sent) { + ngtcp2_tstamp sent_ts, uint64_t lost, + uint64_t tx_in_flight, int is_app_limited) { pkt->pkt_num = pkt_num; pkt->pktlen = pktlen; pkt->pktns_id = pktns_id; - pkt->ts_sent = ts_sent; + pkt->sent_ts = sent_ts; + pkt->lost = lost; + pkt->tx_in_flight = tx_in_flight; + pkt->is_app_limited = is_app_limited; return pkt; } @@ -106,7 +110,7 @@ void ngtcp2_cc_reno_cc_on_pkt_acked(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, uint64_t m; (void)ts; - if (in_congestion_recovery(cstat, pkt->ts_sent)) { + if (in_congestion_recovery(cstat, pkt->sent_ts)) { return; } @@ -129,12 +133,12 @@ void ngtcp2_cc_reno_cc_on_pkt_acked(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, } void ngtcp2_cc_reno_cc_congestion_event(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts_sent, + ngtcp2_tstamp sent_ts, ngtcp2_tstamp ts) { ngtcp2_reno_cc *cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_reno_cc, ccb); uint64_t min_cwnd; - if (in_congestion_recovery(cstat, ts_sent)) { + if (in_congestion_recovery(cstat, sent_ts)) { return; } @@ -162,9 +166,10 @@ void ngtcp2_cc_reno_cc_on_persistent_congestion(ngtcp2_cc *ccx, } void ngtcp2_cc_reno_cc_on_ack_recv(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts) { + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts) { ngtcp2_reno_cc *cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_reno_cc, ccb); uint64_t target_cwnd, initcwnd; + (void)ack; (void)ts; /* TODO Use sliding window for min rtt measurement */ @@ -184,8 +189,12 @@ void ngtcp2_cc_reno_cc_on_ack_recv(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, } } -void ngtcp2_cc_reno_cc_reset(ngtcp2_cc *ccx) { +void ngtcp2_cc_reno_cc_reset(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { ngtcp2_reno_cc *cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_reno_cc, ccb); + (void)cstat; + (void)ts; + reno_cc_reset(cc); } @@ -198,6 +207,14 @@ static void cubic_cc_reset(ngtcp2_cubic_cc *cc) { cc->epoch_start = UINT64_MAX; cc->k = 0; + cc->prior.cwnd = 0; + cc->prior.ssthresh = 0; + cc->prior.w_last_max = 0; + cc->prior.w_tcp = 0; + cc->prior.origin_point = 0; + cc->prior.epoch_start = UINT64_MAX; + cc->prior.k = 0; + cc->rtt_sample_count = 0; cc->current_round_min_rtt = UINT64_MAX; cc->last_round_min_rtt = UINT64_MAX; @@ -225,6 +242,7 @@ int ngtcp2_cc_cubic_cc_init(ngtcp2_cc *cc, ngtcp2_log *log, cc->ccb = &cubic_cc->ccb; cc->on_pkt_acked = ngtcp2_cc_cubic_cc_on_pkt_acked; cc->congestion_event = ngtcp2_cc_cubic_cc_congestion_event; + cc->on_spurious_congestion = ngtcp2_cc_cubic_cc_on_spurious_congestion; cc->on_persistent_congestion = ngtcp2_cc_cubic_cc_on_persistent_congestion; cc->on_ack_recv = ngtcp2_cc_cubic_cc_on_ack_recv; cc->on_pkt_sent = ngtcp2_cc_cubic_cc_on_pkt_sent; @@ -300,7 +318,7 @@ void ngtcp2_cc_cubic_cc_on_pkt_acked(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, cc->window_end = -1; } - if (in_congestion_recovery(cstat, pkt->ts_sent)) { + if (in_congestion_recovery(cstat, pkt->sent_ts)) { return; } @@ -421,15 +439,25 @@ void ngtcp2_cc_cubic_cc_on_pkt_acked(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, void ngtcp2_cc_cubic_cc_congestion_event(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts_sent, + ngtcp2_tstamp sent_ts, ngtcp2_tstamp ts) { ngtcp2_cubic_cc *cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_cubic_cc, ccb); uint64_t min_cwnd; - if (in_congestion_recovery(cstat, ts_sent)) { + if (in_congestion_recovery(cstat, sent_ts)) { return; } + if (cc->prior.cwnd < cstat->cwnd) { + cc->prior.cwnd = cstat->cwnd; + cc->prior.ssthresh = cstat->ssthresh; + cc->prior.w_last_max = cc->w_last_max; + cc->prior.w_tcp = cc->w_tcp; + cc->prior.origin_point = cc->origin_point; + cc->prior.epoch_start = cc->epoch_start; + cc->prior.k = cc->k; + } + cstat->congestion_recovery_start_ts = ts; cc->epoch_start = UINT64_MAX; @@ -449,6 +477,40 @@ void ngtcp2_cc_cubic_cc_congestion_event(ngtcp2_cc *ccx, cstat->cwnd); } +void ngtcp2_cc_cubic_cc_on_spurious_congestion(ngtcp2_cc *ccx, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + ngtcp2_cubic_cc *cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_cubic_cc, ccb); + (void)ts; + + if (cstat->cwnd >= cc->prior.cwnd) { + return; + } + + cstat->congestion_recovery_start_ts = UINT64_MAX; + + cstat->cwnd = cc->prior.cwnd; + cstat->ssthresh = cc->prior.ssthresh; + cc->w_last_max = cc->prior.w_last_max; + cc->w_tcp = cc->prior.w_tcp; + cc->origin_point = cc->prior.origin_point; + cc->epoch_start = cc->prior.epoch_start; + cc->k = cc->prior.k; + + cc->prior.cwnd = 0; + cc->prior.ssthresh = 0; + cc->prior.w_last_max = 0; + cc->prior.w_tcp = 0; + cc->prior.origin_point = 0; + cc->prior.epoch_start = UINT64_MAX; + cc->prior.k = 0; + + ngtcp2_log_info(cc->ccb.log, NGTCP2_LOG_EVENT_RCV, + "spurious congestion is detected and congestion state is " + "restored cwnd=%" PRIu64, + cstat->cwnd); +} + void ngtcp2_cc_cubic_cc_on_persistent_congestion(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, ngtcp2_tstamp ts) { @@ -460,9 +522,11 @@ void ngtcp2_cc_cubic_cc_on_persistent_congestion(ngtcp2_cc *ccx, } void ngtcp2_cc_cubic_cc_on_ack_recv(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts) { ngtcp2_cubic_cc *cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_cubic_cc, ccb); uint64_t target_cwnd, initcwnd; + (void)ack; (void)ts; /* TODO Use sliding window for min rtt measurement */ @@ -511,8 +575,12 @@ void ngtcp2_cc_cubic_cc_new_rtt_sample(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, ++cc->rtt_sample_count; } -void ngtcp2_cc_cubic_cc_reset(ngtcp2_cc *ccx) { +void ngtcp2_cc_cubic_cc_reset(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { ngtcp2_cubic_cc *cc = ngtcp2_struct_of(ccx->ccb, ngtcp2_cubic_cc, ccb); + (void)cstat; + (void)ts; + cubic_cc_reset(cc); } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.h index e1ca7594802..6d9e0c2459e 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_cc.h @@ -36,6 +36,273 @@ typedef struct ngtcp2_log ngtcp2_log; +/** + * @struct + * + * :type:`ngtcp2_cc_base` is the base structure of custom congestion + * control algorithm. It must be the first field of custom congestion + * controller. + */ +typedef struct ngtcp2_cc_base { + /** + * :member:`log` is ngtcp2 library internal logger. + */ + ngtcp2_log *log; +} ngtcp2_cc_base; + +/** + * @struct + * + * :type:`ngtcp2_cc_pkt` is a convenient structure to include + * acked/lost/sent packet. + */ +typedef struct ngtcp2_cc_pkt { + /** + * :member:`pkt_num` is the packet number + */ + int64_t pkt_num; + /** + * :member:`pktlen` is the length of packet. + */ + size_t pktlen; + /** + * :member:`pktns_id` is the ID of packet number space which this + * packet belongs to. + */ + ngtcp2_pktns_id pktns_id; + /** + * :member:`sent_ts` is the timestamp when packet is sent. + */ + ngtcp2_tstamp sent_ts; + /** + * :member:`lost` is the number of bytes lost when this packet was + * sent. + */ + uint64_t lost; + /** + * :member:`tx_in_flight` is the bytes in flight when this packet + * was sent. + */ + uint64_t tx_in_flight; + /** + * :member:`is_app_limited` is nonzero if the connection is + * app-limited when this packet was sent. + */ + int is_app_limited; +} ngtcp2_cc_pkt; + +/** + * @struct + * + * :type:`ngtcp2_cc_ack` is a convenient structure which stores + * acknowledged and lost bytes. + */ +typedef struct ngtcp2_cc_ack { + /** + * :member:`prior_bytes_in_flight` is the in-flight bytes before + * processing this ACK. + */ + uint64_t prior_bytes_in_flight; + /** + * :member:`bytes_delivered` is the number of bytes acknowledged. + */ + uint64_t bytes_delivered; + /** + * :member:`bytes_lost` is the number of bytes declared lost. + */ + uint64_t bytes_lost; + /** + * :member:`pkt_delivered` is the cumulative acknowledged bytes when + * the last packet acknowledged by this ACK was sent. + */ + uint64_t pkt_delivered; + /** + * :member:`largest_acked_sent_ts` is the time when the largest + * acknowledged packet was sent. + */ + ngtcp2_tstamp largest_acked_sent_ts; + /** + * :member:`rtt` is the RTT sample. It is UINT64_MAX if no RTT + * sample is available. + */ + ngtcp2_duration rtt; +} ngtcp2_cc_ack; + +typedef struct ngtcp2_cc ngtcp2_cc; + +/** + * @functypedef + * + * :type:`ngtcp2_cc_on_pkt_acked` is a callback function which is + * called with an acknowledged packet. + */ +typedef void (*ngtcp2_cc_on_pkt_acked)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt, + ngtcp2_tstamp ts); + +/** + * @functypedef + * + * :type:`ngtcp2_cc_on_pkt_lost` is a callback function which is + * called with a lost packet. + */ +typedef void (*ngtcp2_cc_on_pkt_lost)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt, + ngtcp2_tstamp ts); +/** + * @functypedef + * + * :type:`ngtcp2_cc_congestion_event` is a callback function which is + * called when congestion event happens (e.g., when packet is lost). + */ +typedef void (*ngtcp2_cc_congestion_event)(ngtcp2_cc *cc, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp sent_ts, + ngtcp2_tstamp ts); + +/** + * @functypedef + * + * :type:`ngtcp2_cc_on_spurious_congestion` is a callback function + * which is called when a spurious congestion is detected. + */ +typedef void (*ngtcp2_cc_on_spurious_congestion)(ngtcp2_cc *cc, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +/** + * @functypedef + * + * :type:`ngtcp2_cc_on_persistent_congestion` is a callback function + * which is called when persistent congestion is established. + */ +typedef void (*ngtcp2_cc_on_persistent_congestion)(ngtcp2_cc *cc, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +/** + * @functypedef + * + * :type:`ngtcp2_cc_on_ack_recv` is a callback function which is + * called when an acknowledgement is received. + */ +typedef void (*ngtcp2_cc_on_ack_recv)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_ack *ack, + ngtcp2_tstamp ts); + +/** + * @functypedef + * + * :type:`ngtcp2_cc_on_pkt_sent` is a callback function which is + * called when an ack-eliciting packet is sent. + */ +typedef void (*ngtcp2_cc_on_pkt_sent)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + const ngtcp2_cc_pkt *pkt); + +/** + * @functypedef + * + * :type:`ngtcp2_cc_new_rtt_sample` is a callback function which is + * called when new RTT sample is obtained. + */ +typedef void (*ngtcp2_cc_new_rtt_sample)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +/** + * @functypedef + * + * :type:`ngtcp2_cc_reset` is a callback function which is called when + * congestion state must be reset. + */ +typedef void (*ngtcp2_cc_reset)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + +/** + * @enum + * + * :type:`ngtcp2_cc_event_type` defines congestion control events. + */ +typedef enum ngtcp2_cc_event_type { + /** + * :enum:`NGTCP2_CC_EVENT_TX_START` occurs when ack-eliciting packet + * is sent and no other ack-eliciting packet is present. + */ + NGTCP2_CC_EVENT_TYPE_TX_START +} ngtcp2_cc_event_type; + +/** + * @functypedef + * + * :type:`ngtcp2_cc_event` is a callback function which is called when + * a specific event happens. + */ +typedef void (*ngtcp2_cc_event)(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_cc_event_type event, ngtcp2_tstamp ts); + +/** + * @struct + * + * :type:`ngtcp2_cc` is congestion control algorithm interface to + * allow custom implementation. + */ +typedef struct ngtcp2_cc { + /** + * :member:`ccb` is a pointer to :type:`ngtcp2_cc_base` which + * usually contains a state. + */ + ngtcp2_cc_base *ccb; + /** + * :member:`on_pkt_acked` is a callback function which is called + * when a packet is acknowledged. + */ + ngtcp2_cc_on_pkt_acked on_pkt_acked; + /** + * :member:`on_pkt_lost` is a callback function which is called when + * a packet is lost. + */ + ngtcp2_cc_on_pkt_lost on_pkt_lost; + /** + * :member:`congestion_event` is a callback function which is called + * when congestion event happens (.e.g, packet is lost). + */ + ngtcp2_cc_congestion_event congestion_event; + /** + * :member:`on_spurious_congestion` is a callback function which is + * called when a spurious congestion is detected. + */ + ngtcp2_cc_on_spurious_congestion on_spurious_congestion; + /** + * :member:`on_persistent_congestion` is a callback function which + * is called when persistent congestion is established. + */ + ngtcp2_cc_on_persistent_congestion on_persistent_congestion; + /** + * :member:`on_ack_recv` is a callback function which is called when + * an acknowledgement is received. + */ + ngtcp2_cc_on_ack_recv on_ack_recv; + /** + * :member:`on_pkt_sent` is a callback function which is called when + * ack-eliciting packet is sent. + */ + ngtcp2_cc_on_pkt_sent on_pkt_sent; + /** + * :member:`new_rtt_sample` is a callback function which is called + * when new RTT sample is obtained. + */ + ngtcp2_cc_new_rtt_sample new_rtt_sample; + /** + * :member:`reset` is a callback function which is called when + * congestion control state must be reset. + */ + ngtcp2_cc_reset reset; + /** + * :member:`event` is a callback function which is called when a + * specific event happens. + */ + ngtcp2_cc_event event; +} ngtcp2_cc; + /* * ngtcp2_cc_compute_initcwnd computes initial cwnd. */ @@ -43,7 +310,8 @@ uint64_t ngtcp2_cc_compute_initcwnd(size_t max_packet_size); ngtcp2_cc_pkt *ngtcp2_cc_pkt_init(ngtcp2_cc_pkt *pkt, int64_t pkt_num, size_t pktlen, ngtcp2_pktns_id pktns_id, - ngtcp2_tstamp ts_sent); + ngtcp2_tstamp sent_ts, uint64_t lost, + uint64_t tx_in_flight, int is_app_limited); /* ngtcp2_reno_cc is the RENO congestion controller. */ typedef struct ngtcp2_reno_cc { @@ -66,7 +334,7 @@ void ngtcp2_cc_reno_cc_on_pkt_acked(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, const ngtcp2_cc_pkt *pkt, ngtcp2_tstamp ts); void ngtcp2_cc_reno_cc_congestion_event(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts_sent, + ngtcp2_tstamp sent_ts, ngtcp2_tstamp ts); void ngtcp2_cc_reno_cc_on_persistent_congestion(ngtcp2_cc *cc, @@ -74,9 +342,10 @@ void ngtcp2_cc_reno_cc_on_persistent_congestion(ngtcp2_cc *cc, ngtcp2_tstamp ts); void ngtcp2_cc_reno_cc_on_ack_recv(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts); + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts); -void ngtcp2_cc_reno_cc_reset(ngtcp2_cc *cc); +void ngtcp2_cc_reno_cc_reset(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); /* ngtcp2_cubic_cc is CUBIC congestion controller. */ typedef struct ngtcp2_cubic_cc { @@ -88,6 +357,18 @@ typedef struct ngtcp2_cubic_cc { uint64_t origin_point; ngtcp2_tstamp epoch_start; uint64_t k; + /* prior stores the congestion state when a congestion event occurs + in order to restore the state when it turns out that the event is + spurious. */ + struct { + uint64_t cwnd; + uint64_t ssthresh; + uint64_t w_last_max; + uint64_t w_tcp; + uint64_t origin_point; + ngtcp2_tstamp epoch_start; + uint64_t k; + } prior; /* HyStart++ variables */ size_t rtt_sample_count; uint64_t current_round_min_rtt; @@ -111,15 +392,19 @@ void ngtcp2_cc_cubic_cc_on_pkt_acked(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, ngtcp2_tstamp ts); void ngtcp2_cc_cubic_cc_congestion_event(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts_sent, + ngtcp2_tstamp sent_ts, ngtcp2_tstamp ts); +void ngtcp2_cc_cubic_cc_on_spurious_congestion(ngtcp2_cc *ccx, + ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); + void ngtcp2_cc_cubic_cc_on_persistent_congestion(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, ngtcp2_tstamp ts); void ngtcp2_cc_cubic_cc_on_ack_recv(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, - ngtcp2_tstamp ts); + const ngtcp2_cc_ack *ack, ngtcp2_tstamp ts); void ngtcp2_cc_cubic_cc_on_pkt_sent(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, const ngtcp2_cc_pkt *pkt); @@ -127,7 +412,8 @@ void ngtcp2_cc_cubic_cc_on_pkt_sent(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, void ngtcp2_cc_cubic_cc_new_rtt_sample(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, ngtcp2_tstamp ts); -void ngtcp2_cc_cubic_cc_reset(ngtcp2_cc *cc); +void ngtcp2_cc_cubic_cc_reset(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts); void ngtcp2_cc_cubic_cc_event(ngtcp2_cc *cc, ngtcp2_conn_stat *cstat, ngtcp2_cc_event_type event, ngtcp2_tstamp ts); diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_cid.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_cid.c index cdf31f8f624..f3b92b569ec 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_cid.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_cid.c @@ -30,7 +30,7 @@ #include "ngtcp2_path.h" #include "ngtcp2_str.h" -void ngtcp2_cid_zero(ngtcp2_cid *cid) { cid->datalen = 0; } +void ngtcp2_cid_zero(ngtcp2_cid *cid) { memset(cid, 0, sizeof(*cid)); } void ngtcp2_cid_init(ngtcp2_cid *cid, const uint8_t *data, size_t datalen) { assert(datalen <= NGTCP2_MAX_CIDLEN); @@ -56,23 +56,17 @@ int ngtcp2_cid_less(const ngtcp2_cid *lhs, const ngtcp2_cid *rhs) { int ngtcp2_cid_empty(const ngtcp2_cid *cid) { return cid->datalen == 0; } -void ngtcp2_scid_init(ngtcp2_scid *scid, uint64_t seq, const ngtcp2_cid *cid, - const uint8_t *token) { +void ngtcp2_scid_init(ngtcp2_scid *scid, uint64_t seq, const ngtcp2_cid *cid) { scid->pe.index = NGTCP2_PQ_BAD_INDEX; scid->seq = seq; scid->cid = *cid; - scid->ts_retired = UINT64_MAX; + scid->retired_ts = UINT64_MAX; scid->flags = NGTCP2_SCID_FLAG_NONE; - if (token) { - memcpy(scid->token, token, NGTCP2_STATELESS_RESET_TOKENLEN); - } else { - memset(scid->token, 0, NGTCP2_STATELESS_RESET_TOKENLEN); - } } void ngtcp2_scid_copy(ngtcp2_scid *dest, const ngtcp2_scid *src) { - ngtcp2_scid_init(dest, src->seq, &src->cid, src->token); - dest->ts_retired = src->ts_retired; + ngtcp2_scid_init(dest, src->seq, &src->cid); + dest->retired_ts = src->retired_ts; dest->flags = src->flags; } @@ -82,35 +76,58 @@ void ngtcp2_dcid_init(ngtcp2_dcid *dcid, uint64_t seq, const ngtcp2_cid *cid, dcid->cid = *cid; if (token) { memcpy(dcid->token, token, NGTCP2_STATELESS_RESET_TOKENLEN); + dcid->flags = NGTCP2_DCID_FLAG_TOKEN_PRESENT; } else { - memset(dcid->token, 0, NGTCP2_STATELESS_RESET_TOKENLEN); + dcid->flags = NGTCP2_DCID_FLAG_NONE; } ngtcp2_path_storage_zero(&dcid->ps); - dcid->ts_retired = UINT64_MAX; - dcid->flags = NGTCP2_DCID_FLAG_NONE; + dcid->retired_ts = UINT64_MAX; + dcid->bound_ts = UINT64_MAX; dcid->bytes_sent = 0; dcid->bytes_recv = 0; + dcid->max_udp_payload_size = NGTCP2_MAX_UDP_PAYLOAD_SIZE; +} + +void ngtcp2_dcid_set_token(ngtcp2_dcid *dcid, const uint8_t *token) { + assert(token); + + dcid->flags |= NGTCP2_DCID_FLAG_TOKEN_PRESENT; + memcpy(dcid->token, token, NGTCP2_STATELESS_RESET_TOKENLEN); +} + +void ngtcp2_dcid_set_path(ngtcp2_dcid *dcid, const ngtcp2_path *path) { + ngtcp2_path_copy(&dcid->ps.path, path); } void ngtcp2_dcid_copy(ngtcp2_dcid *dest, const ngtcp2_dcid *src) { - ngtcp2_dcid_init(dest, src->seq, &src->cid, src->token); + ngtcp2_dcid_init(dest, src->seq, &src->cid, + (src->flags & NGTCP2_DCID_FLAG_TOKEN_PRESENT) ? src->token + : NULL); ngtcp2_path_copy(&dest->ps.path, &src->ps.path); - dest->ts_retired = src->ts_retired; + dest->retired_ts = src->retired_ts; + dest->bound_ts = src->bound_ts; dest->flags = src->flags; dest->bytes_sent = src->bytes_sent; dest->bytes_recv = src->bytes_recv; + dest->max_udp_payload_size = src->max_udp_payload_size; } void ngtcp2_dcid_copy_cid_token(ngtcp2_dcid *dest, const ngtcp2_dcid *src) { dest->seq = src->seq; dest->cid = src->cid; - memcpy(dest->token, src->token, NGTCP2_STATELESS_RESET_TOKENLEN); + if (src->flags & NGTCP2_DCID_FLAG_TOKEN_PRESENT) { + dest->flags |= NGTCP2_DCID_FLAG_TOKEN_PRESENT; + memcpy(dest->token, src->token, NGTCP2_STATELESS_RESET_TOKENLEN); + } else if (dest->flags & NGTCP2_DCID_FLAG_TOKEN_PRESENT) { + dest->flags &= (uint8_t)~NGTCP2_DCID_FLAG_TOKEN_PRESENT; + } } int ngtcp2_dcid_verify_uniqueness(ngtcp2_dcid *dcid, uint64_t seq, const ngtcp2_cid *cid, const uint8_t *token) { if (dcid->seq == seq) { return ngtcp2_cid_eq(&dcid->cid, cid) && + (dcid->flags & NGTCP2_DCID_FLAG_TOKEN_PRESENT) && memcmp(dcid->token, token, NGTCP2_STATELESS_RESET_TOKENLEN) == 0 ? 0 @@ -119,3 +136,12 @@ int ngtcp2_dcid_verify_uniqueness(ngtcp2_dcid *dcid, uint64_t seq, return !ngtcp2_cid_eq(&dcid->cid, cid) ? 0 : NGTCP2_ERR_PROTO; } + +int ngtcp2_dcid_verify_stateless_reset_token(const ngtcp2_dcid *dcid, + const uint8_t *token) { + return (dcid->flags & NGTCP2_DCID_FLAG_TOKEN_PRESENT) && + ngtcp2_cmemeq(dcid->token, token, + NGTCP2_STATELESS_RESET_TOKENLEN) + ? 0 + : NGTCP2_ERR_INVALID_ARGUMENT; +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_cid.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_cid.h index a356b432d4f..0b37441178c 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_cid.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_cid.h @@ -34,14 +34,14 @@ #include "ngtcp2_pq.h" #include "ngtcp2_path.h" -/* NGTCP2_SCID_FLAG_NONE indicats that no flag is set. */ -#define NGTCP2_SCID_FLAG_NONE 0x00 +/* NGTCP2_SCID_FLAG_NONE indicates that no flag is set. */ +#define NGTCP2_SCID_FLAG_NONE 0x00u /* NGTCP2_SCID_FLAG_USED indicates that a local endpoint observed that a remote endpoint uses a particular Connection ID. */ -#define NGTCP2_SCID_FLAG_USED 0x01 +#define NGTCP2_SCID_FLAG_USED 0x01u /* NGTCP2_SCID_FLAG_RETIRED indicates that a particular Connection ID is retired. */ -#define NGTCP2_SCID_FLAG_RETIRED 0x02 +#define NGTCP2_SCID_FLAG_RETIRED 0x02u typedef struct ngtcp2_scid { ngtcp2_pq_entry pe; @@ -49,22 +49,21 @@ typedef struct ngtcp2_scid { uint64_t seq; /* cid is a connection ID */ ngtcp2_cid cid; - /* ts_retired is the timestamp when peer tells that this CID is + /* retired_ts is the timestamp when peer tells that this CID is retired. */ - ngtcp2_tstamp ts_retired; + ngtcp2_tstamp retired_ts; /* flags is the bitwise OR of zero or more of NGTCP2_SCID_FLAG_*. */ uint8_t flags; - /* token is a stateless reset token associated to this CID. - Actually, the stateless reset token is tied to the connection, - not to the particular connection ID. */ - uint8_t token[NGTCP2_STATELESS_RESET_TOKENLEN]; } ngtcp2_scid; /* NGTCP2_DCID_FLAG_NONE indicates that no flag is set. */ -#define NGTCP2_DCID_FLAG_NONE 0x00 +#define NGTCP2_DCID_FLAG_NONE 0x00u /* NGTCP2_DCID_FLAG_PATH_VALIDATED indicates that an associated path has been validated. */ -#define NGTCP2_DCID_FLAG_PATH_VALIDATED 0x01 +#define NGTCP2_DCID_FLAG_PATH_VALIDATED 0x01u +/* NGTCP2_DCID_FLAG_TOKEN_PRESENT indicates that a stateless reset + token is set in token field. */ +#define NGTCP2_DCID_FLAG_TOKEN_PRESENT 0x02u typedef struct ngtcp2_dcid { /* seq is the sequence number associated to the CID. */ @@ -74,14 +73,21 @@ typedef struct ngtcp2_dcid { /* path is a path which cid is bound to. The addresses are zero length if cid has not been bound to a particular path yet. */ ngtcp2_path_storage ps; - /* ts_retired is the timestamp when peer tells that this CID is + /* retired_ts is the timestamp when peer tells that this CID is retired. */ - ngtcp2_tstamp ts_retired; + ngtcp2_tstamp retired_ts; + /* bound_ts is the timestamp when this connection ID is bound to a + particular path. It is only assigned when a connection ID is + used just for sending PATH_RESPONSE and is not zero-length. */ + ngtcp2_tstamp bound_ts; /* bytes_sent is the number of bytes sent to an associated path. */ uint64_t bytes_sent; /* bytes_recv is the number of bytes received from an associated path. */ uint64_t bytes_recv; + /* max_udp_payload_size is the maximum size of UDP payload that is + allowed to send to this path. */ + size_t max_udp_payload_size; /* flags is bitwise OR of zero or more of NGTCP2_DCID_FLAG_*. */ uint8_t flags; /* token is a stateless reset token associated to this CID. @@ -93,12 +99,6 @@ typedef struct ngtcp2_dcid { /* ngtcp2_cid_zero makes |cid| zero-length. */ void ngtcp2_cid_zero(ngtcp2_cid *cid); -/* - * ngtcp2_cid_eq returns nonzero if |cid| and |other| share the same - * connection ID. - */ -int ngtcp2_cid_eq(const ngtcp2_cid *cid, const ngtcp2_cid *other); - /* * ngtcp2_cid_less returns nonzero if |lhs| is lexicographical smaller * than |rhs|. @@ -112,12 +112,9 @@ int ngtcp2_cid_less(const ngtcp2_cid *lhs, const ngtcp2_cid *rhs); int ngtcp2_cid_empty(const ngtcp2_cid *cid); /* - * ngtcp2_scid_init initializes |scid| with the given parameters. If - * |token| is NULL, the function fills scid->token it with 0. |token| - * must be NGTCP2_STATELESS_RESET_TOKENLEN bytes long. + * ngtcp2_scid_init initializes |scid| with the given parameters. */ -void ngtcp2_scid_init(ngtcp2_scid *scid, uint64_t seq, const ngtcp2_cid *cid, - const uint8_t *token); +void ngtcp2_scid_init(ngtcp2_scid *scid, uint64_t seq, const ngtcp2_cid *cid); /* * ngtcp2_scid_copy copies |src| into |dest|. @@ -132,6 +129,19 @@ void ngtcp2_scid_copy(ngtcp2_scid *dest, const ngtcp2_scid *src); void ngtcp2_dcid_init(ngtcp2_dcid *dcid, uint64_t seq, const ngtcp2_cid *cid, const uint8_t *token); +/* + * ngtcp2_dcid_set_token sets |token| to |dcid|. |token| must not be + * NULL and must be NGTCP2_STATELESS_RESET_TOKENLEN bytes long. + */ +void ngtcp2_dcid_set_token(ngtcp2_dcid *dcid, const uint8_t *token); + +/* + * ngtcp2_dcid_set_path sets |path| to |dcid|. It sets + * max_udp_payload_size to the minimum UDP payload size supported + * by the IP protocol version. + */ +void ngtcp2_dcid_set_path(ngtcp2_dcid *dcid, const ngtcp2_path *path); + /* * ngtcp2_dcid_copy copies |src| into |dest|. */ @@ -150,4 +160,16 @@ void ngtcp2_dcid_copy_cid_token(ngtcp2_dcid *dest, const ngtcp2_dcid *src); int ngtcp2_dcid_verify_uniqueness(ngtcp2_dcid *dcid, uint64_t seq, const ngtcp2_cid *cid, const uint8_t *token); +/* + * ngtcp2_dcid_verify_stateless_reset_token verifies stateless reset + * token |token| against the one included in |dcid|. This function + * returns 0 if the verification succeeds, or one of the following + * negative error codes: + * + * NGTCP2_ERR_INVALID_ARGUMENT + * Tokens do not match; or |dcid| does not contain a token. + */ +int ngtcp2_dcid_verify_stateless_reset_token(const ngtcp2_dcid *dcid, + const uint8_t *token); + #endif /* NGTCP2_CID_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.c index c8b1d15db5a..a3135680ca1 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.c @@ -26,7 +26,6 @@ #include #include -#include #include "ngtcp2_macro.h" #include "ngtcp2_log.h" @@ -43,6 +42,9 @@ /* NGTCP2_FLOW_WINDOW_SCALING_FACTOR is the growth factor of flow control window. */ #define NGTCP2_FLOW_WINDOW_SCALING_FACTOR 2 +/* NGTCP2_MIN_COALESCED_PAYLOADLEN is the minimum length of QUIC + packet payload that should be coalesced to a long packet. */ +#define NGTCP2_MIN_COALESCED_PAYLOADLEN 128 /* * conn_local_stream returns nonzero if |stream_id| indicates that it @@ -58,6 +60,15 @@ static int conn_local_stream(ngtcp2_conn *conn, int64_t stream_id) { */ static int bidi_stream(int64_t stream_id) { return (stream_id & 0x2) == 0; } +/* + * conn_is_handshake_completed returns nonzero if QUIC handshake has + * completed. + */ +static int conn_is_handshake_completed(ngtcp2_conn *conn) { + return (conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED) && + conn->pktns.crypto.rx.ckm && conn->pktns.crypto.tx.ckm; +} + static int conn_call_recv_client_initial(ngtcp2_conn *conn, const ngtcp2_cid *dcid) { int rv; @@ -123,6 +134,8 @@ static int conn_call_recv_crypto_data(ngtcp2_conn *conn, case NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM: case NGTCP2_ERR_TRANSPORT_PARAM: case NGTCP2_ERR_PROTO: + case NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE: + case NGTCP2_ERR_NOMEM: case NGTCP2_ERR_CALLBACK_FAILURE: return rv; default: @@ -145,16 +158,21 @@ static int conn_call_stream_open(ngtcp2_conn *conn, ngtcp2_strm *strm) { return 0; } -static int conn_call_stream_close(ngtcp2_conn *conn, ngtcp2_strm *strm, - uint64_t app_error_code) { +static int conn_call_stream_close(ngtcp2_conn *conn, ngtcp2_strm *strm) { int rv; + uint32_t flags = NGTCP2_STREAM_CLOSE_FLAG_NONE; if (!conn->callbacks.stream_close) { return 0; } - rv = conn->callbacks.stream_close(conn, strm->stream_id, app_error_code, - conn->user_data, strm->stream_user_data); + if (strm->flags & NGTCP2_STRM_FLAG_APP_ERROR_CODE_SET) { + flags |= NGTCP2_STREAM_CLOSE_FLAG_APP_ERROR_CODE_SET; + } + + rv = conn->callbacks.stream_close(conn, flags, strm->stream_id, + strm->app_error_code, conn->user_data, + strm->stream_user_data); if (rv != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; } @@ -245,15 +263,21 @@ static int conn_call_remove_connection_id(ngtcp2_conn *conn, return 0; } -static int conn_call_path_validation(ngtcp2_conn *conn, const ngtcp2_path *path, +static int conn_call_path_validation(ngtcp2_conn *conn, const ngtcp2_pv *pv, ngtcp2_path_validation_result res) { int rv; + uint32_t flags = NGTCP2_PATH_VALIDATION_FLAG_NONE; if (!conn->callbacks.path_validation) { return 0; } - rv = conn->callbacks.path_validation(conn, path, res, conn->user_data); + if (pv->flags & NGTCP2_PV_FLAG_PREFERRED_ADDR) { + flags |= NGTCP2_PATH_VALIDATION_FLAG_PREFERRED_ADDR; + } + + rv = conn->callbacks.path_validation(conn, flags, &pv->dcid.ps.path, res, + conn->user_data); if (rv != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; } @@ -262,17 +286,18 @@ static int conn_call_path_validation(ngtcp2_conn *conn, const ngtcp2_path *path, } static int conn_call_select_preferred_addr(ngtcp2_conn *conn, - ngtcp2_addr *dest) { + ngtcp2_path *dest) { int rv; if (!conn->callbacks.select_preferred_addr) { return 0; } - assert(conn->remote.transport_params.preferred_address_present); + assert(conn->remote.transport_params); + assert(conn->remote.transport_params->preferred_address_present); rv = conn->callbacks.select_preferred_addr( - conn, dest, &conn->remote.transport_params.preferred_address, + conn, dest, &conn->remote.transport_params->preferred_address, conn->user_data); if (rv != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; @@ -345,8 +370,7 @@ static int conn_call_dcid_status(ngtcp2_conn *conn, rv = conn->callbacks.dcid_status( conn, (int)type, dcid->seq, &dcid->cid, - ngtcp2_check_invalid_stateless_reset_token(dcid->token) ? NULL - : dcid->token, + (dcid->flags & NGTCP2_DCID_FLAG_TOKEN_PRESENT) ? dcid->token : NULL, conn->user_data); if (rv != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; @@ -366,6 +390,24 @@ static int conn_call_deactivate_dcid(ngtcp2_conn *conn, conn, NGTCP2_CONNECTION_ID_STATUS_TYPE_DEACTIVATE, dcid); } +static int conn_call_stream_stop_sending(ngtcp2_conn *conn, int64_t stream_id, + uint64_t app_error_code, + void *stream_user_data) { + int rv; + + if (!conn->callbacks.stream_stop_sending) { + return 0; + } + + rv = conn->callbacks.stream_stop_sending(conn, stream_id, app_error_code, + conn->user_data, stream_user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + static void conn_call_delete_crypto_aead_ctx(ngtcp2_conn *conn, ngtcp2_crypto_aead_ctx *aead_ctx) { if (!aead_ctx->native_handle) { @@ -389,6 +431,210 @@ conn_call_delete_crypto_cipher_ctx(ngtcp2_conn *conn, conn->callbacks.delete_crypto_cipher_ctx(conn, cipher_ctx, conn->user_data); } +static int conn_call_client_initial(ngtcp2_conn *conn) { + int rv; + + assert(conn->callbacks.client_initial); + + rv = conn->callbacks.client_initial(conn, conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int conn_call_get_path_challenge_data(ngtcp2_conn *conn, uint8_t *data) { + int rv; + + assert(conn->callbacks.get_path_challenge_data); + + rv = conn->callbacks.get_path_challenge_data(conn, data, conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int conn_call_recv_version_negotiation(ngtcp2_conn *conn, + const ngtcp2_pkt_hd *hd, + const uint32_t *sv, size_t nsv) { + int rv; + + if (!conn->callbacks.recv_version_negotiation) { + return 0; + } + + rv = conn->callbacks.recv_version_negotiation(conn, hd, sv, nsv, + conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int conn_call_recv_retry(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd) { + int rv; + + assert(conn->callbacks.recv_retry); + + rv = conn->callbacks.recv_retry(conn, hd, conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int +conn_call_recv_stateless_reset(ngtcp2_conn *conn, + const ngtcp2_pkt_stateless_reset *sr) { + int rv; + + if (!conn->callbacks.recv_stateless_reset) { + return 0; + } + + rv = conn->callbacks.recv_stateless_reset(conn, sr, conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int conn_call_recv_new_token(ngtcp2_conn *conn, + const ngtcp2_vec *token) { + int rv; + + if (!conn->callbacks.recv_new_token) { + return 0; + } + + rv = conn->callbacks.recv_new_token(conn, token, conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int conn_call_handshake_confirmed(ngtcp2_conn *conn) { + int rv; + + if (!conn->callbacks.handshake_confirmed) { + return 0; + } + + rv = conn->callbacks.handshake_confirmed(conn, conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int conn_call_recv_datagram(ngtcp2_conn *conn, + const ngtcp2_datagram *fr) { + const uint8_t *data; + size_t datalen; + int rv; + uint32_t flags = NGTCP2_DATAGRAM_FLAG_NONE; + + if (!conn->callbacks.recv_datagram) { + return 0; + } + + if (fr->datacnt) { + assert(fr->datacnt == 1); + + data = fr->data->base; + datalen = fr->data->len; + } else { + data = NULL; + datalen = 0; + } + + if (!conn_is_handshake_completed(conn)) { + flags |= NGTCP2_DATAGRAM_FLAG_EARLY; + } + + rv = conn->callbacks.recv_datagram(conn, flags, data, datalen, + conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int +conn_call_update_key(ngtcp2_conn *conn, uint8_t *rx_secret, uint8_t *tx_secret, + ngtcp2_crypto_aead_ctx *rx_aead_ctx, uint8_t *rx_iv, + ngtcp2_crypto_aead_ctx *tx_aead_ctx, uint8_t *tx_iv, + const uint8_t *current_rx_secret, + const uint8_t *current_tx_secret, size_t secretlen) { + int rv; + + assert(conn->callbacks.update_key); + + rv = conn->callbacks.update_key( + conn, rx_secret, tx_secret, rx_aead_ctx, rx_iv, tx_aead_ctx, tx_iv, + current_rx_secret, current_tx_secret, secretlen, conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int conn_call_version_negotiation(ngtcp2_conn *conn, uint32_t version, + const ngtcp2_cid *dcid) { + int rv; + + assert(conn->callbacks.version_negotiation); + + rv = + conn->callbacks.version_negotiation(conn, version, dcid, conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int conn_call_recv_rx_key(ngtcp2_conn *conn, ngtcp2_crypto_level level) { + int rv; + + if (!conn->callbacks.recv_rx_key) { + return 0; + } + + rv = conn->callbacks.recv_rx_key(conn, level, conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +static int conn_call_recv_tx_key(ngtcp2_conn *conn, ngtcp2_crypto_level level) { + int rv; + + if (!conn->callbacks.recv_tx_key) { + return 0; + } + + rv = conn->callbacks.recv_tx_key(conn, level, conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + static int crypto_offset_less(const ngtcp2_ksl_key *lhs, const ngtcp2_ksl_key *rhs) { return *(int64_t *)lhs < *(int64_t *)rhs; @@ -396,15 +642,13 @@ static int crypto_offset_less(const ngtcp2_ksl_key *lhs, static int pktns_init(ngtcp2_pktns *pktns, ngtcp2_pktns_id pktns_id, ngtcp2_rst *rst, ngtcp2_cc *cc, ngtcp2_log *log, - ngtcp2_qlog *qlog, const ngtcp2_mem *mem) { + ngtcp2_qlog *qlog, ngtcp2_objalloc *rtb_entry_objalloc, + ngtcp2_objalloc *frc_objalloc, const ngtcp2_mem *mem) { int rv; memset(pktns, 0, sizeof(*pktns)); - rv = ngtcp2_gaptr_init(&pktns->rx.pngap, mem); - if (rv != 0) { - return rv; - } + ngtcp2_gaptr_init(&pktns->rx.pngap, mem); pktns->tx.last_pkt_num = -1; pktns->rx.max_pkt_num = -1; @@ -415,27 +659,17 @@ static int pktns_init(ngtcp2_pktns *pktns, ngtcp2_pktns_id pktns_id, goto fail_acktr_init; } - rv = ngtcp2_strm_init(&pktns->crypto.strm, 0, NGTCP2_STRM_FLAG_NONE, 0, 0, - NULL, mem); - if (rv != 0) { - goto fail_crypto_init; - } + ngtcp2_strm_init(&pktns->crypto.strm, 0, NGTCP2_STRM_FLAG_NONE, 0, 0, NULL, + NULL, mem); - rv = ngtcp2_ksl_init(&pktns->crypto.tx.frq, crypto_offset_less, - sizeof(uint64_t), mem); - if (rv != 0) { - goto fail_tx_frq_init; - } + ngtcp2_ksl_init(&pktns->crypto.tx.frq, crypto_offset_less, sizeof(uint64_t), + mem); ngtcp2_rtb_init(&pktns->rtb, pktns_id, &pktns->crypto.strm, rst, cc, log, - qlog, mem); + qlog, rtb_entry_objalloc, frc_objalloc, mem); return 0; -fail_tx_frq_init: - ngtcp2_strm_free(&pktns->crypto.strm); -fail_crypto_init: - ngtcp2_acktr_free(&pktns->acktr); fail_acktr_init: ngtcp2_gaptr_free(&pktns->rx.pngap); @@ -444,7 +678,8 @@ static int pktns_init(ngtcp2_pktns *pktns, ngtcp2_pktns_id pktns_id, static int pktns_new(ngtcp2_pktns **ppktns, ngtcp2_pktns_id pktns_id, ngtcp2_rst *rst, ngtcp2_cc *cc, ngtcp2_log *log, - ngtcp2_qlog *qlog, const ngtcp2_mem *mem) { + ngtcp2_qlog *qlog, ngtcp2_objalloc *rtb_entry_objalloc, + ngtcp2_objalloc *frc_objalloc, const ngtcp2_mem *mem) { int rv; *ppktns = ngtcp2_mem_malloc(mem, sizeof(ngtcp2_pktns)); @@ -452,7 +687,8 @@ static int pktns_new(ngtcp2_pktns **ppktns, ngtcp2_pktns_id pktns_id, return NGTCP2_ERR_NOMEM; } - rv = pktns_init(*ppktns, pktns_id, rst, cc, log, qlog, mem); + rv = pktns_init(*ppktns, pktns_id, rst, cc, log, qlog, rtb_entry_objalloc, + frc_objalloc, mem); if (rv != 0) { ngtcp2_mem_free(mem, *ppktns); } @@ -481,13 +717,27 @@ static void delete_buffed_pkts(ngtcp2_pkt_chain *pc, const ngtcp2_mem *mem) { } } +static void delete_buf_chain(ngtcp2_buf_chain *bufchain, + const ngtcp2_mem *mem) { + ngtcp2_buf_chain *next; + + for (; bufchain;) { + next = bufchain->next; + ngtcp2_buf_chain_del(bufchain, mem); + bufchain = next; + } +} + static void pktns_free(ngtcp2_pktns *pktns, const ngtcp2_mem *mem) { ngtcp2_frame_chain *frc; ngtcp2_ksl_it it; + delete_buf_chain(pktns->crypto.tx.data, mem); + delete_buffed_pkts(pktns->rx.buffed_pkts, mem); - ngtcp2_frame_chain_list_del(pktns->tx.frq, mem); + ngtcp2_frame_chain_list_objalloc_del(pktns->tx.frq, pktns->rtb.frc_objalloc, + mem); ngtcp2_crypto_km_del(pktns->crypto.rx.ckm, mem); ngtcp2_crypto_km_del(pktns->crypto.tx.ckm, mem); @@ -495,7 +745,7 @@ static void pktns_free(ngtcp2_pktns *pktns, const ngtcp2_mem *mem) { for (it = ngtcp2_ksl_begin(&pktns->crypto.tx.frq); !ngtcp2_ksl_it_end(&it); ngtcp2_ksl_it_next(&it)) { frc = ngtcp2_ksl_it_get(&it); - ngtcp2_frame_chain_del(frc, mem); + ngtcp2_frame_chain_objalloc_del(frc, pktns->rtb.frc_objalloc, mem); } ngtcp2_ksl_free(&pktns->crypto.tx.frq); @@ -524,6 +774,12 @@ static void cc_del(ngtcp2_cc *cc, ngtcp2_cc_algo cc_algo, case NGTCP2_CC_ALGO_CUBIC: ngtcp2_cc_cubic_cc_free(cc, mem); break; + case NGTCP2_CC_ALGO_BBR: + ngtcp2_cc_bbr_cc_free(cc, mem); + break; + case NGTCP2_CC_ALGO_BBR2: + ngtcp2_cc_bbr2_cc_free(cc, mem); + break; default: break; } @@ -533,12 +789,12 @@ static int cid_less(const ngtcp2_ksl_key *lhs, const ngtcp2_ksl_key *rhs) { return ngtcp2_cid_less(lhs, rhs); } -static int ts_retired_less(const ngtcp2_pq_entry *lhs, +static int retired_ts_less(const ngtcp2_pq_entry *lhs, const ngtcp2_pq_entry *rhs) { const ngtcp2_scid *a = ngtcp2_struct_of(lhs, ngtcp2_scid, pe); const ngtcp2_scid *b = ngtcp2_struct_of(rhs, ngtcp2_scid, pe); - return a->ts_retired < b->ts_retired; + return a->retired_ts < b->retired_ts; } /* @@ -559,6 +815,8 @@ static void conn_reset_conn_stat_cc(ngtcp2_conn *conn, cstat->congestion_recovery_start_ts = UINT64_MAX; cstat->bytes_in_flight = 0; cstat->delivery_rate_sec = 0; + cstat->pacing_rate = 0.0; + cstat->send_quantum = SIZE_MAX; } /* @@ -566,7 +824,7 @@ static void conn_reset_conn_stat_cc(ngtcp2_conn *conn, * function */ static void reset_conn_stat_recovery(ngtcp2_conn_stat *cstat) { - // Initializes them with UINT64_MAX. + /* Initializes them with UINT64_MAX. */ memset(cstat->loss_time, 0xff, sizeof(cstat->loss_time)); memset(cstat->last_tx_pkt_ts, 0xff, sizeof(cstat->last_tx_pkt_ts)); } @@ -605,10 +863,14 @@ static ngtcp2_duration compute_pto(ngtcp2_duration smoothed_rtt, static ngtcp2_duration conn_compute_initial_pto(ngtcp2_conn *conn, ngtcp2_pktns *pktns) { ngtcp2_duration initial_rtt = conn->local.settings.initial_rtt; - ngtcp2_duration max_ack_delay = - pktns->rtb.pktns_id == NGTCP2_PKTNS_ID_APPLICATION - ? conn->remote.transport_params.max_ack_delay - : 0; + ngtcp2_duration max_ack_delay; + + if (pktns->rtb.pktns_id == NGTCP2_PKTNS_ID_APPLICATION && + conn->remote.transport_params) { + max_ack_delay = conn->remote.transport_params->max_ack_delay; + } else { + max_ack_delay = 0; + } return compute_pto(initial_rtt, initial_rtt / 2, max_ack_delay); } @@ -618,15 +880,24 @@ static ngtcp2_duration conn_compute_initial_pto(ngtcp2_conn *conn, static ngtcp2_duration conn_compute_pto(ngtcp2_conn *conn, ngtcp2_pktns *pktns) { ngtcp2_conn_stat *cstat = &conn->cstat; - ngtcp2_duration max_ack_delay = - pktns->rtb.pktns_id == NGTCP2_PKTNS_ID_APPLICATION - ? conn->remote.transport_params.max_ack_delay - : 0; + ngtcp2_duration max_ack_delay; + + if (pktns->rtb.pktns_id == NGTCP2_PKTNS_ID_APPLICATION && + conn->remote.transport_params) { + max_ack_delay = conn->remote.transport_params->max_ack_delay; + } else { + max_ack_delay = 0; + } return compute_pto(cstat->smoothed_rtt, cstat->rttvar, max_ack_delay); } +ngtcp2_duration ngtcp2_conn_compute_pto(ngtcp2_conn *conn, + ngtcp2_pktns *pktns) { + return conn_compute_pto(conn, pktns); +} + static void conn_handle_tx_ecn(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, - uint8_t *prtb_entry_flags, ngtcp2_pktns *pktns, + uint16_t *prtb_entry_flags, ngtcp2_pktns *pktns, const ngtcp2_pkt_hd *hd, ngtcp2_tstamp ts) { assert(pi); @@ -718,23 +989,103 @@ static void conn_reset_ecn_validation_state(ngtcp2_conn *conn) { pktns->tx.ecn.validation_pkt_lost = 0; } +/* server_default_other_versions is the default other_versions field + sent by server. */ +static uint8_t server_default_other_versions[] = {0, 0, 0, 1}; + +/* + * other_versions_new allocates new buffer, and writes |versions| of + * length |versionslen| in network byte order, suitable for sending in + * other_versions field of version_information QUIC transport + * parameter. The pointer to the allocated buffer is assigned to + * |*pbuf|. + * + * This function returns 0 if it succeeds, or one of the negative + * error codes: + * + * NGTCP2_ERR_NOMEM + * Out of memory. + */ +static int other_versions_new(uint8_t **pbuf, const uint32_t *versions, + size_t versionslen, const ngtcp2_mem *mem) { + size_t i; + uint8_t *buf = ngtcp2_mem_malloc(mem, sizeof(uint32_t) * versionslen); + + if (buf == NULL) { + return NGTCP2_ERR_NOMEM; + } + + *pbuf = buf; + + for (i = 0; i < versionslen; ++i) { + buf = ngtcp2_put_uint32be(buf, versions[i]); + } + + return 0; +} + +static void +conn_set_local_transport_params(ngtcp2_conn *conn, + const ngtcp2_transport_params *params) { + ngtcp2_transport_params *p = &conn->local.transport_params; + uint32_t chosen_version = p->version_info.chosen_version; + + *p = *params; + + /* grease_quic_bit is always enabled. */ + p->grease_quic_bit = 1; + + if (conn->server) { + p->version_info.chosen_version = chosen_version; + } else { + p->version_info.chosen_version = conn->client_chosen_version; + } + p->version_info.other_versions = conn->vneg.other_versions; + p->version_info.other_versionslen = conn->vneg.other_versionslen; + p->version_info_present = 1; +} + static int conn_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, const ngtcp2_cid *scid, const ngtcp2_path *path, - uint32_t version, const ngtcp2_callbacks *callbacks, + uint32_t client_chosen_version, int callbacks_version, + const ngtcp2_callbacks *callbacks, int settings_version, const ngtcp2_settings *settings, + int transport_params_version, const ngtcp2_transport_params *params, const ngtcp2_mem *mem, void *user_data, int server) { int rv; ngtcp2_scid *scident; uint8_t *buf; + uint8_t fixed_bit_byte; + size_t i; + uint32_t *preferred_versions; + (void)callbacks_version; + (void)settings_version; + (void)transport_params_version; assert(settings->max_window <= NGTCP2_MAX_VARINT); assert(settings->max_stream_window <= NGTCP2_MAX_VARINT); + assert(settings->max_udp_payload_size); + assert(settings->max_udp_payload_size <= NGTCP2_HARD_MAX_UDP_PAYLOAD_SIZE); assert(params->active_connection_id_limit <= NGTCP2_MAX_DCID_POOL_SIZE); assert(params->initial_max_data <= NGTCP2_MAX_VARINT); assert(params->initial_max_stream_data_bidi_local <= NGTCP2_MAX_VARINT); assert(params->initial_max_stream_data_bidi_remote <= NGTCP2_MAX_VARINT); assert(params->initial_max_stream_data_uni <= NGTCP2_MAX_VARINT); + assert(server || callbacks->client_initial); + assert(!server || callbacks->recv_client_initial); + assert(callbacks->recv_crypto_data); + assert(callbacks->encrypt); + assert(callbacks->decrypt); + assert(callbacks->hp_mask); + assert(server || callbacks->recv_retry); + assert(callbacks->rand); + assert(callbacks->get_new_connection_id); + assert(callbacks->update_key); + assert(callbacks->delete_crypto_aead_ctx); + assert(callbacks->delete_crypto_cipher_ctx); + assert(callbacks->get_path_challenge_data); + assert(!server || !ngtcp2_is_reserved_version(client_chosen_version)); if (mem == NULL) { mem = ngtcp2_mem_default(); @@ -746,60 +1097,31 @@ static int conn_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, goto fail_conn; } - rv = ngtcp2_ringbuf_init(&(*pconn)->dcid.bound, - NGTCP2_MAX_BOUND_DCID_POOL_SIZE, sizeof(ngtcp2_dcid), - mem); - if (rv != 0) { - goto fail_dcid_bound_init; - } + ngtcp2_objalloc_frame_chain_init(&(*pconn)->frc_objalloc, 64, mem); + ngtcp2_objalloc_rtb_entry_init(&(*pconn)->rtb_entry_objalloc, 64, mem); + ngtcp2_objalloc_strm_init(&(*pconn)->strm_objalloc, 64, mem); - rv = ngtcp2_ringbuf_init(&(*pconn)->dcid.unused, NGTCP2_MAX_DCID_POOL_SIZE, - sizeof(ngtcp2_dcid), mem); - if (rv != 0) { - goto fail_dcid_unused_init; - } + ngtcp2_static_ringbuf_dcid_bound_init(&(*pconn)->dcid.bound); - rv = - ngtcp2_ringbuf_init(&(*pconn)->dcid.retired, NGTCP2_MAX_DCID_RETIRED_SIZE, - sizeof(ngtcp2_dcid), mem); - if (rv != 0) { - goto fail_dcid_retired_init; - } + ngtcp2_static_ringbuf_dcid_unused_init(&(*pconn)->dcid.unused); - rv = ngtcp2_gaptr_init(&(*pconn)->dcid.seqgap, mem); - if (rv != 0) { - goto fail_seqgap_init; - } + ngtcp2_static_ringbuf_dcid_retired_init(&(*pconn)->dcid.retired); - rv = ngtcp2_ksl_init(&(*pconn)->scid.set, cid_less, sizeof(ngtcp2_cid), mem); - if (rv != 0) { - goto fail_scid_set_init; - } + ngtcp2_gaptr_init(&(*pconn)->dcid.seqgap, mem); - ngtcp2_pq_init(&(*pconn)->scid.used, ts_retired_less, mem); + ngtcp2_ksl_init(&(*pconn)->scid.set, cid_less, sizeof(ngtcp2_cid), mem); - rv = ngtcp2_map_init(&(*pconn)->strms, mem); - if (rv != 0) { - goto fail_strms_init; - } + ngtcp2_pq_init(&(*pconn)->scid.used, retired_ts_less, mem); + + ngtcp2_map_init(&(*pconn)->strms, mem); ngtcp2_pq_init(&(*pconn)->tx.strmq, cycle_less, mem); - rv = ngtcp2_idtr_init(&(*pconn)->remote.bidi.idtr, !server, mem); - if (rv != 0) { - goto fail_remote_bidi_idtr_init; - } + ngtcp2_idtr_init(&(*pconn)->remote.bidi.idtr, !server, mem); - rv = ngtcp2_idtr_init(&(*pconn)->remote.uni.idtr, !server, mem); - if (rv != 0) { - goto fail_remote_uni_idtr_init; - } + ngtcp2_idtr_init(&(*pconn)->remote.uni.idtr, !server, mem); - rv = ngtcp2_ringbuf_init(&(*pconn)->rx.path_challenge, 4, - sizeof(ngtcp2_path_challenge_entry), mem); - if (rv != 0) { - goto fail_rx_path_challenge_init; - } + ngtcp2_static_ringbuf_path_challenge_init(&(*pconn)->rx.path_challenge); ngtcp2_log_init(&(*pconn)->log, scid, settings->log_printf, settings->initial_ts, user_data); @@ -808,17 +1130,18 @@ static int conn_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, if ((*pconn)->qlog.write) { buf = ngtcp2_mem_malloc(mem, NGTCP2_QLOG_BUFLEN); if (buf == NULL) { + rv = NGTCP2_ERR_NOMEM; goto fail_qlog_buf; } ngtcp2_buf_init(&(*pconn)->qlog.buf, buf, NGTCP2_QLOG_BUFLEN); } (*pconn)->local.settings = *settings; - (*pconn)->local.transport_params = *params; if (settings->token.len) { buf = ngtcp2_mem_malloc(mem, settings->token.len); if (buf == NULL) { + rv = NGTCP2_ERR_NOMEM; goto fail_token; } memcpy(buf, settings->token.base, settings->token.len); @@ -828,8 +1151,8 @@ static int conn_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, (*pconn)->local.settings.token.len = 0; } - if (settings->max_udp_payload_size == 0) { - (*pconn)->local.settings.max_udp_payload_size = NGTCP2_DEFAULT_MAX_PKTLEN; + if (!(*pconn)->local.settings.original_version) { + (*pconn)->local.settings.original_version = client_chosen_version; } conn_reset_conn_stat(*pconn, &(*pconn)->cstat); @@ -854,29 +1177,43 @@ static int conn_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, goto fail_cc_init; } break; - case NGTCP2_CC_ALGO_CUSTOM: - assert(settings->cc); - (*pconn)->cc = *settings->cc; - (*pconn)->cc.ccb->log = &(*pconn)->log; + case NGTCP2_CC_ALGO_BBR: + rv = ngtcp2_cc_bbr_cc_init(&(*pconn)->cc, &(*pconn)->log, &(*pconn)->cstat, + &(*pconn)->rst, settings->initial_ts, + callbacks->rand, &settings->rand_ctx, mem); + if (rv != 0) { + goto fail_cc_init; + } + break; + case NGTCP2_CC_ALGO_BBR2: + rv = ngtcp2_cc_bbr2_cc_init(&(*pconn)->cc, &(*pconn)->log, &(*pconn)->cstat, + &(*pconn)->rst, settings->initial_ts, + callbacks->rand, &settings->rand_ctx, mem); + if (rv != 0) { + goto fail_cc_init; + } break; default: assert(0); } rv = pktns_new(&(*pconn)->in_pktns, NGTCP2_PKTNS_ID_INITIAL, &(*pconn)->rst, - &(*pconn)->cc, &(*pconn)->log, &(*pconn)->qlog, mem); + &(*pconn)->cc, &(*pconn)->log, &(*pconn)->qlog, + &(*pconn)->rtb_entry_objalloc, &(*pconn)->frc_objalloc, mem); if (rv != 0) { goto fail_in_pktns_init; } rv = pktns_new(&(*pconn)->hs_pktns, NGTCP2_PKTNS_ID_HANDSHAKE, &(*pconn)->rst, - &(*pconn)->cc, &(*pconn)->log, &(*pconn)->qlog, mem); + &(*pconn)->cc, &(*pconn)->log, &(*pconn)->qlog, + &(*pconn)->rtb_entry_objalloc, &(*pconn)->frc_objalloc, mem); if (rv != 0) { goto fail_hs_pktns_init; } rv = pktns_init(&(*pconn)->pktns, NGTCP2_PKTNS_ID_APPLICATION, &(*pconn)->rst, - &(*pconn)->cc, &(*pconn)->log, &(*pconn)->qlog, mem); + &(*pconn)->cc, &(*pconn)->log, &(*pconn)->qlog, + &(*pconn)->rtb_entry_objalloc, &(*pconn)->frc_objalloc, mem); if (rv != 0) { goto fail_pktns_init; } @@ -889,7 +1226,7 @@ static int conn_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, /* Set stateless reset token later if it is available in the local transport parameters */ - ngtcp2_scid_init(scident, 0, scid, NULL); + ngtcp2_scid_init(scident, 0, scid); rv = ngtcp2_ksl_insert(&(*pconn)->scid.set, NULL, &scident->cid, scident); if (rv != 0) { @@ -899,22 +1236,111 @@ static int conn_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, scident = NULL; ngtcp2_dcid_init(&(*pconn)->dcid.current, 0, dcid, NULL); - ngtcp2_path_copy(&(*pconn)->dcid.current.ps.path, path); + ngtcp2_dcid_set_path(&(*pconn)->dcid.current, path); rv = ngtcp2_gaptr_push(&(*pconn)->dcid.seqgap, 0, 1); if (rv != 0) { goto fail_seqgap_push; } + if (settings->preferred_versionslen) { + if (!server && !ngtcp2_is_reserved_version(client_chosen_version)) { + for (i = 0; i < settings->preferred_versionslen; ++i) { + if (settings->preferred_versions[i] == client_chosen_version) { + break; + } + } + + assert(i < settings->preferred_versionslen); + } + + preferred_versions = ngtcp2_mem_malloc( + mem, sizeof(uint32_t) * settings->preferred_versionslen); + if (preferred_versions == NULL) { + rv = NGTCP2_ERR_NOMEM; + goto fail_preferred_versions; + } + + for (i = 0; i < settings->preferred_versionslen; ++i) { + assert(ngtcp2_is_supported_version(settings->preferred_versions[i])); + + preferred_versions[i] = settings->preferred_versions[i]; + } + + (*pconn)->vneg.preferred_versions = preferred_versions; + (*pconn)->vneg.preferred_versionslen = settings->preferred_versionslen; + } + + if (settings->other_versionslen) { + if (!server && !ngtcp2_is_reserved_version(client_chosen_version)) { + for (i = 0; i < settings->other_versionslen; ++i) { + if (settings->other_versions[i] == client_chosen_version) { + break; + } + } + + assert(i < settings->other_versionslen); + } + + for (i = 0; i < settings->other_versionslen; ++i) { + assert(ngtcp2_is_reserved_version(settings->other_versions[i]) || + ngtcp2_is_supported_version(settings->other_versions[i])); + } + + rv = other_versions_new(&buf, settings->other_versions, + settings->other_versionslen, mem); + if (rv != 0) { + goto fail_other_versions; + } + + (*pconn)->vneg.other_versions = buf; + (*pconn)->vneg.other_versionslen = + sizeof(uint32_t) * settings->other_versionslen; + } else if (server) { + if (settings->preferred_versionslen) { + rv = other_versions_new(&buf, settings->preferred_versions, + settings->preferred_versionslen, mem); + if (rv != 0) { + goto fail_other_versions; + } + + (*pconn)->vneg.other_versions = buf; + (*pconn)->vneg.other_versionslen = + sizeof(uint32_t) * settings->preferred_versionslen; + } else { + (*pconn)->vneg.other_versions = server_default_other_versions; + (*pconn)->vneg.other_versionslen = sizeof(server_default_other_versions); + } + } else if (!server && !ngtcp2_is_reserved_version(client_chosen_version)) { + rv = other_versions_new(&buf, &client_chosen_version, 1, mem); + if (rv != 0) { + goto fail_other_versions; + } + + (*pconn)->vneg.other_versions = buf; + (*pconn)->vneg.other_versionslen = sizeof(uint32_t); + } + + (*pconn)->client_chosen_version = client_chosen_version; + + conn_set_local_transport_params(*pconn, params); + + callbacks->rand(&fixed_bit_byte, 1, &settings->rand_ctx); + if (fixed_bit_byte & 1) { + (*pconn)->flags |= NGTCP2_CONN_FLAG_CLEAR_FIXED_BIT; + } + + (*pconn)->keep_alive.last_ts = UINT64_MAX; + (*pconn)->server = server; (*pconn)->oscid = *scid; (*pconn)->callbacks = *callbacks; - (*pconn)->version = version; (*pconn)->mem = mem; (*pconn)->user_data = user_data; (*pconn)->idle_ts = settings->initial_ts; (*pconn)->crypto.key_update.confirmed_ts = UINT64_MAX; (*pconn)->tx.last_max_data_ts = UINT64_MAX; + (*pconn)->tx.pacing.next_ts = UINT64_MAX; (*pconn)->early.discard_started_ts = UINT64_MAX; conn_reset_ecn_validation_state(*pconn); @@ -924,12 +1350,13 @@ static int conn_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, return 0; +fail_other_versions: + ngtcp2_mem_free(mem, (*pconn)->vneg.preferred_versions); +fail_preferred_versions: fail_seqgap_push: fail_scid_set_insert: ngtcp2_mem_free(mem, scident); fail_scident: - ngtcp2_mem_free(mem, (*pconn)->local.settings.token.base); -fail_token: pktns_free(&(*pconn)->pktns, mem); fail_pktns_init: pktns_del((*pconn)->hs_pktns, mem); @@ -938,41 +1365,36 @@ static int conn_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, fail_in_pktns_init: cc_del(&(*pconn)->cc, settings->cc_algo, mem); fail_cc_init: + ngtcp2_mem_free(mem, (*pconn)->local.settings.token.base); +fail_token: ngtcp2_mem_free(mem, (*pconn)->qlog.buf.begin); fail_qlog_buf: - ngtcp2_ringbuf_free(&(*pconn)->rx.path_challenge); -fail_rx_path_challenge_init: ngtcp2_idtr_free(&(*pconn)->remote.uni.idtr); -fail_remote_uni_idtr_init: ngtcp2_idtr_free(&(*pconn)->remote.bidi.idtr); -fail_remote_bidi_idtr_init: ngtcp2_map_free(&(*pconn)->strms); -fail_strms_init: delete_scid(&(*pconn)->scid.set, mem); ngtcp2_ksl_free(&(*pconn)->scid.set); -fail_scid_set_init: ngtcp2_gaptr_free(&(*pconn)->dcid.seqgap); -fail_seqgap_init: - ngtcp2_ringbuf_free(&(*pconn)->dcid.retired); -fail_dcid_retired_init: - ngtcp2_ringbuf_free(&(*pconn)->dcid.unused); -fail_dcid_unused_init: - ngtcp2_ringbuf_free(&(*pconn)->dcid.bound); -fail_dcid_bound_init: + ngtcp2_objalloc_free(&(*pconn)->strm_objalloc); + ngtcp2_objalloc_free(&(*pconn)->rtb_entry_objalloc); + ngtcp2_objalloc_free(&(*pconn)->frc_objalloc); ngtcp2_mem_free(mem, *pconn); fail_conn: return rv; } -int ngtcp2_conn_client_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, - const ngtcp2_cid *scid, const ngtcp2_path *path, - uint32_t version, const ngtcp2_callbacks *callbacks, - const ngtcp2_settings *settings, - const ngtcp2_transport_params *params, - const ngtcp2_mem *mem, void *user_data) { +int ngtcp2_conn_client_new_versioned( + ngtcp2_conn **pconn, const ngtcp2_cid *dcid, const ngtcp2_cid *scid, + const ngtcp2_path *path, uint32_t client_chosen_version, + int callbacks_version, const ngtcp2_callbacks *callbacks, + int settings_version, const ngtcp2_settings *settings, + int transport_params_version, const ngtcp2_transport_params *params, + const ngtcp2_mem *mem, void *user_data) { int rv; - rv = conn_new(pconn, dcid, scid, path, version, callbacks, settings, params, - mem, user_data, 0); + + rv = conn_new(pconn, dcid, scid, path, client_chosen_version, + callbacks_version, callbacks, settings_version, settings, + transport_params_version, params, mem, user_data, 0); if (rv != 0) { return rv; } @@ -990,18 +1412,22 @@ int ngtcp2_conn_client_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, return 0; } -int ngtcp2_conn_server_new(ngtcp2_conn **pconn, const ngtcp2_cid *dcid, - const ngtcp2_cid *scid, const ngtcp2_path *path, - uint32_t version, const ngtcp2_callbacks *callbacks, - const ngtcp2_settings *settings, - const ngtcp2_transport_params *params, - const ngtcp2_mem *mem, void *user_data) { +int ngtcp2_conn_server_new_versioned( + ngtcp2_conn **pconn, const ngtcp2_cid *dcid, const ngtcp2_cid *scid, + const ngtcp2_path *path, uint32_t client_chosen_version, + int callbacks_version, const ngtcp2_callbacks *callbacks, + int settings_version, const ngtcp2_settings *settings, + int transport_params_version, const ngtcp2_transport_params *params, + const ngtcp2_mem *mem, void *user_data) { int rv; - rv = conn_new(pconn, dcid, scid, path, version, callbacks, settings, params, - mem, user_data, 1); + + rv = conn_new(pconn, dcid, scid, path, client_chosen_version, + callbacks_version, callbacks, settings_version, settings, + transport_params_version, params, mem, user_data, 1); if (rv != 0) { return rv; } + (*pconn)->state = NGTCP2_CS_SERVER_INITIAL; (*pconn)->local.bidi.next_stream_id = 1; (*pconn)->local.uni.next_stream_id = 3; @@ -1029,22 +1455,37 @@ static uint64_t conn_fc_credits(ngtcp2_conn *conn, ngtcp2_strm *strm) { * sent to the given stream. |len| might be shorted because of * available flow control credits. */ -static size_t conn_enforce_flow_control(ngtcp2_conn *conn, ngtcp2_strm *strm, - size_t len) { +static uint64_t conn_enforce_flow_control(ngtcp2_conn *conn, ngtcp2_strm *strm, + uint64_t len) { uint64_t fc_credits = conn_fc_credits(conn, strm); - return (size_t)ngtcp2_min((uint64_t)len, fc_credits); + return ngtcp2_min(len, fc_credits); } -static int delete_strms_each(ngtcp2_map_entry *ent, void *ptr) { - const ngtcp2_mem *mem = ptr; - ngtcp2_strm *s = ngtcp2_struct_of(ent, ngtcp2_strm, me); +static int delete_strms_each(void *data, void *ptr) { + ngtcp2_conn *conn = ptr; + ngtcp2_strm *s = data; ngtcp2_strm_free(s); - ngtcp2_mem_free(mem, s); + ngtcp2_objalloc_strm_release(&conn->strm_objalloc, s); return 0; } +static void conn_vneg_crypto_free(ngtcp2_conn *conn) { + if (conn->vneg.rx.ckm) { + conn_call_delete_crypto_aead_ctx(conn, &conn->vneg.rx.ckm->aead_ctx); + } + conn_call_delete_crypto_cipher_ctx(conn, &conn->vneg.rx.hp_ctx); + + if (conn->vneg.tx.ckm) { + conn_call_delete_crypto_aead_ctx(conn, &conn->vneg.tx.ckm->aead_ctx); + } + conn_call_delete_crypto_cipher_ctx(conn, &conn->vneg.tx.hp_ctx); + + ngtcp2_crypto_km_del(conn->vneg.rx.ckm, conn->mem); + ngtcp2_crypto_km_del(conn->vneg.tx.ckm, conn->mem); +} + void ngtcp2_conn_del(ngtcp2_conn *conn) { if (conn == NULL) { return; @@ -1111,6 +1552,16 @@ void ngtcp2_conn_del(ngtcp2_conn *conn) { conn_call_delete_crypto_aead_ctx(conn, &conn->crypto.retry_aead_ctx); + ngtcp2_transport_params_del(conn->remote.transport_params, conn->mem); + ngtcp2_transport_params_del(conn->remote.pending_transport_params, conn->mem); + + conn_vneg_crypto_free(conn); + + ngtcp2_mem_free(conn->mem, conn->vneg.preferred_versions); + if (conn->vneg.other_versions != server_default_other_versions) { + ngtcp2_mem_free(conn->mem, conn->vneg.other_versions); + } + ngtcp2_mem_free(conn->mem, conn->crypto.decrypt_buf.base); ngtcp2_mem_free(conn->mem, conn->crypto.decrypt_hp_buf.base); ngtcp2_mem_free(conn->mem, conn->local.settings.token.base); @@ -1128,24 +1579,26 @@ void ngtcp2_conn_del(ngtcp2_conn *conn) { ngtcp2_mem_free(conn->mem, conn->qlog.buf.begin); - ngtcp2_ringbuf_free(&conn->rx.path_challenge); - + ngtcp2_pmtud_del(conn->pmtud); ngtcp2_pv_del(conn->pv); + ngtcp2_mem_free(conn->mem, conn->rx.ccerr.reason); + ngtcp2_idtr_free(&conn->remote.uni.idtr); ngtcp2_idtr_free(&conn->remote.bidi.idtr); ngtcp2_mem_free(conn->mem, conn->tx.ack); ngtcp2_pq_free(&conn->tx.strmq); - ngtcp2_map_each_free(&conn->strms, delete_strms_each, (void *)conn->mem); + ngtcp2_map_each_free(&conn->strms, delete_strms_each, (void *)conn); ngtcp2_map_free(&conn->strms); ngtcp2_pq_free(&conn->scid.used); delete_scid(&conn->scid.set, conn->mem); ngtcp2_ksl_free(&conn->scid.set); ngtcp2_gaptr_free(&conn->dcid.seqgap); - ngtcp2_ringbuf_free(&conn->dcid.retired); - ngtcp2_ringbuf_free(&conn->dcid.unused); - ngtcp2_ringbuf_free(&conn->dcid.bound); + + ngtcp2_objalloc_free(&conn->strm_objalloc); + ngtcp2_objalloc_free(&conn->rtb_entry_objalloc); + ngtcp2_objalloc_free(&conn->frc_objalloc); ngtcp2_mem_free(conn->mem, conn); } @@ -1284,7 +1737,7 @@ static int conn_create_ack_frame(ngtcp2_conn *conn, ngtcp2_frame **pfr, ack->first_ack_blklen = 0; } - if (type == NGTCP2_PKT_SHORT) { + if (type == NGTCP2_PKT_1RTT) { ack->ack_delay_unscaled = ts - largest_ack_ts; ack->ack_delay = ack->ack_delay_unscaled / NGTCP2_MICROSECONDS / (1ULL << ack_delay_exponent); @@ -1412,11 +1865,11 @@ static size_t pktns_select_pkt_numlen(ngtcp2_pktns *pktns) { ngtcp2_rtb *rtb = &pktns->rtb; int64_t n = pkt_num - rtb->largest_acked_tx_pkt_num; - if (NGTCP2_MAX_PKT_NUM / 2 <= pkt_num) { + if (NGTCP2_MAX_PKT_NUM / 2 < n) { return 4; } - n = n * 2 + 1; + n = n * 2 - 1; if (n > 0xffffff) { return 4; @@ -1430,16 +1883,28 @@ static size_t pktns_select_pkt_numlen(ngtcp2_pktns *pktns) { return 1; } +/* + * conn_get_cwnd returns cwnd for the current path. + */ +static uint64_t conn_get_cwnd(ngtcp2_conn *conn) { + return conn->pv && (conn->pv->flags & NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE) + ? ngtcp2_cc_compute_initcwnd(conn->cstat.max_udp_payload_size) + : conn->cstat.cwnd; +} + /* * conn_cwnd_is_zero returns nonzero if the number of bytes the local * endpoint can sent at this time is zero. */ static uint64_t conn_cwnd_is_zero(ngtcp2_conn *conn) { uint64_t bytes_in_flight = conn->cstat.bytes_in_flight; - uint64_t cwnd = - conn->pv && (conn->pv->flags & NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE) - ? ngtcp2_cc_compute_initcwnd(conn->cstat.max_udp_payload_size) - : conn->cstat.cwnd; + uint64_t cwnd = conn_get_cwnd(conn); + + if (bytes_in_flight >= cwnd) { + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_RCV, + "cwnd limited bytes_in_flight=%lu cwnd=%lu", + bytes_in_flight, cwnd); + } return bytes_in_flight >= cwnd; } @@ -1447,11 +1912,12 @@ static uint64_t conn_cwnd_is_zero(ngtcp2_conn *conn) { /* * conn_retry_early_payloadlen returns the estimated wire length of * the first STREAM frame of 0-RTT packet which should be - * retransmitted due to Retry frame + * retransmitted due to Retry packet. */ -static size_t conn_retry_early_payloadlen(ngtcp2_conn *conn) { +static uint64_t conn_retry_early_payloadlen(ngtcp2_conn *conn) { ngtcp2_frame_chain *frc; ngtcp2_strm *strm; + uint64_t len; if (conn->flags & NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED) { return 0; @@ -1465,8 +1931,13 @@ static size_t conn_retry_early_payloadlen(ngtcp2_conn *conn) { } frc = ngtcp2_strm_streamfrq_top(strm); - return ngtcp2_vec_len(frc->fr.stream.data, frc->fr.stream.datacnt) + - NGTCP2_STREAM_OVERHEAD; + + len = ngtcp2_vec_len(frc->fr.stream.data, frc->fr.stream.datacnt) + + NGTCP2_STREAM_OVERHEAD; + + /* Take the min because in conn_should_pad_pkt we take max in + order to deal with unbreakable DATAGRAM. */ + return ngtcp2_min(len, NGTCP2_MIN_COALESCED_PAYLOADLEN); } return 0; @@ -1479,7 +1950,7 @@ static void conn_cryptofrq_clear(ngtcp2_conn *conn, ngtcp2_pktns *pktns) { for (it = ngtcp2_ksl_begin(&pktns->crypto.tx.frq); !ngtcp2_ksl_it_end(&it); ngtcp2_ksl_it_next(&it)) { frc = ngtcp2_ksl_it_get(&it); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); } ngtcp2_ksl_clear(&pktns->crypto.tx.frq); } @@ -1496,7 +1967,7 @@ static uint64_t conn_cryptofrq_unacked_offset(ngtcp2_conn *conn, ngtcp2_range gap; ngtcp2_rtb *rtb = &pktns->rtb; ngtcp2_ksl_it it; - size_t datalen; + uint64_t datalen; (void)conn; @@ -1539,7 +2010,7 @@ static int conn_cryptofrq_unacked_pop(ngtcp2_conn *conn, ngtcp2_pktns *pktns, frc = ngtcp2_ksl_it_get(&it); fr = &frc->fr.crypto; - ngtcp2_ksl_remove(&pktns->crypto.tx.frq, &it, &fr->offset); + ngtcp2_ksl_remove_hint(&pktns->crypto.tx.frq, &it, &it, &fr->offset); idx = 0; offset = fr->offset; @@ -1561,7 +2032,7 @@ static int conn_cryptofrq_unacked_pop(ngtcp2_conn *conn, ngtcp2_pktns *pktns, } if (idx == fr->datacnt) { - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); continue; } @@ -1600,10 +2071,10 @@ static int conn_cryptofrq_unacked_pop(ngtcp2_conn *conn, ngtcp2_pktns *pktns, return 0; } - rv = ngtcp2_frame_chain_crypto_datacnt_new(&nfrc, fr->datacnt - end_idx, - conn->mem); + rv = ngtcp2_frame_chain_crypto_datacnt_objalloc_new( + &nfrc, fr->datacnt - end_idx, &conn->frc_objalloc, conn->mem); if (rv != 0) { - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } @@ -1622,8 +2093,8 @@ static int conn_cryptofrq_unacked_pop(ngtcp2_conn *conn, ngtcp2_pktns *pktns, rv = ngtcp2_ksl_insert(&pktns->crypto.tx.frq, NULL, &nfr->offset, nfrc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(nfrc, conn->mem); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, &conn->frc_objalloc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } @@ -1656,7 +2127,7 @@ static int conn_cryptofrq_pop(ngtcp2_conn *conn, ngtcp2_frame_chain **pfrc, ngtcp2_frame_chain *frc, *nfrc; int rv; size_t nmerged; - size_t datalen; + uint64_t datalen; ngtcp2_vec a[NGTCP2_MAX_CRYPTO_DATACNT]; ngtcp2_vec b[NGTCP2_MAX_CRYPTO_DATACNT]; size_t acnt, bcnt; @@ -1684,10 +2155,11 @@ static int conn_cryptofrq_pop(ngtcp2_conn *conn, ngtcp2_frame_chain **pfrc, assert(acnt > 0); assert(bcnt > 0); - rv = ngtcp2_frame_chain_crypto_datacnt_new(&nfrc, bcnt, conn->mem); + rv = ngtcp2_frame_chain_crypto_datacnt_objalloc_new( + &nfrc, bcnt, &conn->frc_objalloc, conn->mem); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } @@ -1700,15 +2172,16 @@ static int conn_cryptofrq_pop(ngtcp2_conn *conn, ngtcp2_frame_chain **pfrc, rv = ngtcp2_ksl_insert(&pktns->crypto.tx.frq, NULL, &nfr->offset, nfrc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(nfrc, conn->mem); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, &conn->frc_objalloc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } - rv = ngtcp2_frame_chain_crypto_datacnt_new(&nfrc, acnt, conn->mem); + rv = ngtcp2_frame_chain_crypto_datacnt_objalloc_new( + &nfrc, acnt, &conn->frc_objalloc, conn->mem); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } @@ -1717,14 +2190,14 @@ static int conn_cryptofrq_pop(ngtcp2_conn *conn, ngtcp2_frame_chain **pfrc, nfr->datacnt = acnt; ngtcp2_vec_copy(nfr->data, a, acnt); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); *pfrc = nfrc; return 0; } - left -= datalen; + left -= (size_t)datalen; ngtcp2_vec_copy(a, fr->data, fr->datacnt); acnt = fr->datacnt; @@ -1742,7 +2215,7 @@ static int conn_cryptofrq_pop(ngtcp2_conn *conn, ngtcp2_frame_chain **pfrc, rv = conn_cryptofrq_unacked_pop(conn, pktns, &nfrc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } if (nfrc == NULL) { @@ -1757,8 +2230,8 @@ static int conn_cryptofrq_pop(ngtcp2_conn *conn, ngtcp2_frame_chain **pfrc, rv = ngtcp2_ksl_insert(&pktns->crypto.tx.frq, NULL, &nfr->offset, nfrc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(nfrc, conn->mem); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, &conn->frc_objalloc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } break; @@ -1768,7 +2241,7 @@ static int conn_cryptofrq_pop(ngtcp2_conn *conn, ngtcp2_frame_chain **pfrc, left -= nmerged; if (nfr->datacnt == 0) { - ngtcp2_frame_chain_del(nfrc, conn->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, &conn->frc_objalloc, conn->mem); continue; } @@ -1776,8 +2249,8 @@ static int conn_cryptofrq_pop(ngtcp2_conn *conn, ngtcp2_frame_chain **pfrc, rv = ngtcp2_ksl_insert(&pktns->crypto.tx.frq, NULL, &nfr->offset, nfrc); if (rv != 0) { - ngtcp2_frame_chain_del(nfrc, conn->mem); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, &conn->frc_objalloc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } @@ -1794,9 +2267,10 @@ static int conn_cryptofrq_pop(ngtcp2_conn *conn, ngtcp2_frame_chain **pfrc, assert(acnt > fr->datacnt); - rv = ngtcp2_frame_chain_crypto_datacnt_new(&nfrc, acnt, conn->mem); + rv = ngtcp2_frame_chain_crypto_datacnt_objalloc_new( + &nfrc, acnt, &conn->frc_objalloc, conn->mem); if (rv != 0) { - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } @@ -1805,7 +2279,7 @@ static int conn_cryptofrq_pop(ngtcp2_conn *conn, ngtcp2_frame_chain **pfrc, nfr->datacnt = acnt; ngtcp2_vec_copy(nfr->data, a, acnt); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); *pfrc = nfrc; @@ -1866,59 +2340,74 @@ static int conn_verify_dcid(ngtcp2_conn *conn, int *pnew_cid_used, /* * conn_should_pad_pkt returns nonzero if the packet should be padded. * |type| is the type of packet. |left| is the space left in packet - * buffer. |early_datalen| is the number of bytes which will be sent - * in the next, coalesced 0-RTT packet. + * buffer. |write_datalen| is the number of bytes which will be sent + * in the next, coalesced 0-RTT or 1RTT packet. */ static int conn_should_pad_pkt(ngtcp2_conn *conn, uint8_t type, size_t left, - size_t early_datalen, int ack_eliciting) { - size_t min_payloadlen; + uint64_t write_datalen, int ack_eliciting, + int require_padding) { + uint64_t min_payloadlen; - if (conn->server) { - if (type != NGTCP2_PKT_INITIAL || !ack_eliciting) { - return 0; - } + if (type == NGTCP2_PKT_INITIAL) { + if (conn->server) { + if (!ack_eliciting) { + return 0; + } - if (conn->hs_pktns->crypto.tx.ckm && - (conn->hs_pktns->rtb.probe_pkt_left || - ngtcp2_ksl_len(&conn->hs_pktns->crypto.tx.frq) || - !ngtcp2_acktr_empty(&conn->hs_pktns->acktr))) { - /* If we have something to send in Handshake packet, then add - PADDING in Handshake packet. */ - min_payloadlen = 128; + if (conn->hs_pktns->crypto.tx.ckm && + (conn->hs_pktns->rtb.probe_pkt_left || + ngtcp2_ksl_len(&conn->hs_pktns->crypto.tx.frq) || + !ngtcp2_acktr_empty(&conn->hs_pktns->acktr))) { + /* If we have something to send in Handshake packet, then add + PADDING in Handshake packet. */ + min_payloadlen = NGTCP2_MIN_COALESCED_PAYLOADLEN; + } else { + return 1; + } } else { - return 1; + if (conn->hs_pktns->crypto.tx.ckm && + (conn->hs_pktns->rtb.probe_pkt_left || + ngtcp2_ksl_len(&conn->hs_pktns->crypto.tx.frq) || + !ngtcp2_acktr_empty(&conn->hs_pktns->acktr))) { + /* If we have something to send in Handshake packet, then add + PADDING in Handshake packet. */ + min_payloadlen = NGTCP2_MIN_COALESCED_PAYLOADLEN; + } else if ((!conn->early.ckm && !conn->pktns.crypto.tx.ckm) || + write_datalen == 0) { + return 1; + } else { + /* If we have something to send in 0RTT or 1RTT packet, then + add PADDING in that packet. Take maximum in case that + write_datalen includes DATAGRAM which cannot be split. */ + min_payloadlen = + ngtcp2_max(write_datalen, NGTCP2_MIN_COALESCED_PAYLOADLEN); + } } } else { - if (type == NGTCP2_PKT_HANDSHAKE) { - return conn->in_pktns != NULL; - } - - if (conn->hs_pktns->crypto.tx.ckm && - (conn->hs_pktns->rtb.probe_pkt_left || - ngtcp2_ksl_len(&conn->hs_pktns->crypto.tx.frq) || - !ngtcp2_acktr_empty(&conn->hs_pktns->acktr))) { - /* If we have something to send in Handshake packet, then add - PADDING in Handshake packet. */ - min_payloadlen = 128; - } else if (!conn->early.ckm || early_datalen == 0) { + assert(type == NGTCP2_PKT_HANDSHAKE); + + if (!require_padding) { + return 0; + } + + if (!conn->pktns.crypto.tx.ckm || write_datalen == 0) { return 1; - } else { - /* If we have something to send in 0RTT packet, then add PADDING - in 0RTT packet. */ - min_payloadlen = ngtcp2_min(early_datalen, 128); } + + min_payloadlen = ngtcp2_max(write_datalen, NGTCP2_MIN_COALESCED_PAYLOADLEN); } + /* TODO the next packet type should be taken into account */ return left < /* TODO Assuming that pkt_num is encoded in 1 byte. */ NGTCP2_MIN_LONG_HEADERLEN + conn->dcid.current.cid.datalen + - conn->oscid.datalen + 1 /* payloadlen bytes - 1 */ + - min_payloadlen + NGTCP2_MAX_AEAD_OVERHEAD; + conn->oscid.datalen + NGTCP2_PKT_LENGTHLEN - 1 + min_payloadlen + + NGTCP2_MAX_AEAD_OVERHEAD; } static void conn_restart_timer_on_write(ngtcp2_conn *conn, ngtcp2_tstamp ts) { conn->idle_ts = ts; - conn->flags &= (uint16_t)~NGTCP2_CONN_FLAG_RESTART_IDLE_TIMER_ON_WRITE; + conn->flags &= (uint32_t)~NGTCP2_CONN_FLAG_RESTART_IDLE_TIMER_ON_WRITE; } static void conn_restart_timer_on_read(ngtcp2_conn *conn, ngtcp2_tstamp ts) { @@ -1926,14 +2415,110 @@ static void conn_restart_timer_on_read(ngtcp2_conn *conn, ngtcp2_tstamp ts) { conn->flags |= NGTCP2_CONN_FLAG_RESTART_IDLE_TIMER_ON_WRITE; } -/* NGTCP2_WRITE_PKT_FLAG_NONE indicates that no flag is set. */ -#define NGTCP2_WRITE_PKT_FLAG_NONE 0x00 -/* NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING indicates that packet should - be padded */ -#define NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING 0x01 -/* NGTCP2_WRITE_PKT_FLAG_MORE indicates that more frames might come - and it should be encoded into the current packet. */ -#define NGTCP2_WRITE_PKT_FLAG_MORE 0x02 +/* + * conn_keep_alive_enabled returns nonzero if keep-alive is enabled. + */ +static int conn_keep_alive_enabled(ngtcp2_conn *conn) { + return conn->keep_alive.last_ts != UINT64_MAX && conn->keep_alive.timeout; +} + +/* + * conn_keep_alive_expired returns nonzero if keep-alive timer has + * expired. + */ +static int conn_keep_alive_expired(ngtcp2_conn *conn, ngtcp2_tstamp ts) { + return conn_keep_alive_enabled(conn) && + conn->keep_alive.last_ts + conn->keep_alive.timeout <= ts; +} + +/* + * conn_keep_alive_expiry returns the expiry time of keep-alive timer. + */ +static ngtcp2_tstamp conn_keep_alive_expiry(ngtcp2_conn *conn) { + if ((conn->flags & NGTCP2_CONN_FLAG_KEEP_ALIVE_CANCELLED) || + !conn_keep_alive_enabled(conn)) { + return UINT64_MAX; + } + + return conn->keep_alive.last_ts + conn->keep_alive.timeout; +} + +/* + * conn_cancel_expired_keep_alive_timer cancels the expired keep-alive + * timer. + */ +static void conn_cancel_expired_keep_alive_timer(ngtcp2_conn *conn, + ngtcp2_tstamp ts) { + if (!(conn->flags & NGTCP2_CONN_FLAG_KEEP_ALIVE_CANCELLED) && + conn_keep_alive_expired(conn, ts)) { + conn->flags |= NGTCP2_CONN_FLAG_KEEP_ALIVE_CANCELLED; + } +} + +/* + * conn_update_keep_alive_last_ts updates the base time point of + * keep-alive timer. + */ +static void conn_update_keep_alive_last_ts(ngtcp2_conn *conn, + ngtcp2_tstamp ts) { + conn->keep_alive.last_ts = ts; + conn->flags &= (uint32_t)~NGTCP2_CONN_FLAG_KEEP_ALIVE_CANCELLED; +} + +void ngtcp2_conn_set_keep_alive_timeout(ngtcp2_conn *conn, + ngtcp2_duration timeout) { + conn->keep_alive.timeout = timeout; +} + +/* + * NGTCP2_PKT_PACING_OVERHEAD defines overhead of userspace event + * loop. Packet pacing might require sub milliseconds packet spacing, + * but userspace event loop might not offer such precision. + * Typically, if delay is 0.5 microseconds, the actual delay after + * which we can send packet is well over 1 millisecond when event loop + * is involved (which includes other stuff, like reading packets etc + * in a typical single threaded use case). + */ +#define NGTCP2_PKT_PACING_OVERHEAD NGTCP2_MILLISECONDS + +static void conn_cancel_expired_pkt_tx_timer(ngtcp2_conn *conn, + ngtcp2_tstamp ts) { + if (conn->tx.pacing.next_ts == UINT64_MAX) { + return; + } + + if (conn->tx.pacing.next_ts > ts + NGTCP2_PKT_PACING_OVERHEAD) { + return; + } + + conn->tx.pacing.next_ts = UINT64_MAX; +} + +static int conn_pacing_pkt_tx_allowed(ngtcp2_conn *conn, ngtcp2_tstamp ts) { + return conn->tx.pacing.next_ts == UINT64_MAX || + conn->tx.pacing.next_ts <= ts + NGTCP2_PKT_PACING_OVERHEAD; +} + +static uint8_t conn_pkt_flags(ngtcp2_conn *conn) { + if (conn->remote.transport_params && + conn->remote.transport_params->grease_quic_bit && + (conn->flags & NGTCP2_CONN_FLAG_CLEAR_FIXED_BIT)) { + return NGTCP2_PKT_FLAG_FIXED_BIT_CLEAR; + } + + return NGTCP2_PKT_FLAG_NONE; +} + +static uint8_t conn_pkt_flags_long(ngtcp2_conn *conn) { + return NGTCP2_PKT_FLAG_LONG_FORM | conn_pkt_flags(conn); +} + +static uint8_t conn_pkt_flags_short(ngtcp2_conn *conn) { + return (uint8_t)(conn_pkt_flags(conn) | ((conn->pktns.crypto.tx.ckm->flags & + NGTCP2_CRYPTO_KM_FLAG_KEY_PHASE_ONE) + ? NGTCP2_PKT_FLAG_KEY_PHASE + : NGTCP2_PKT_FLAG_NONE)); +} /* * conn_write_handshake_pkt writes handshake packet in the buffer @@ -1941,6 +2526,9 @@ static void conn_restart_timer_on_read(ngtcp2_conn *conn, ngtcp2_tstamp ts) { * packet type. It should be either NGTCP2_PKT_INITIAL or * NGTCP2_PKT_HANDSHAKE_PKT. * + * |write_datalen| is the minimum length of application data ready to + * send in subsequent 0RTT or 1RTT packet. + * * This function returns the number of bytes written in |dest| if it * succeeds, or one of the following negative error codes: * @@ -1952,7 +2540,7 @@ static void conn_restart_timer_on_read(ngtcp2_conn *conn, ngtcp2_tstamp ts) { static ngtcp2_ssize conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, uint8_t type, uint8_t flags, - size_t early_datalen, ngtcp2_tstamp ts) { + uint64_t write_datalen, ngtcp2_tstamp ts) { int rv; ngtcp2_ppe ppe; ngtcp2_pkt_hd hd; @@ -1964,13 +2552,14 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, ngtcp2_rtb_entry *rtbent; ngtcp2_pktns *pktns; size_t left; - uint8_t rtb_entry_flags = NGTCP2_RTB_ENTRY_FLAG_NONE; + uint16_t rtb_entry_flags = NGTCP2_RTB_ENTRY_FLAG_NONE; int require_padding = (flags & NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING) != 0; int pkt_empty = 1; int padded = 0; int hd_logged = 0; uint64_t crypto_offset; ngtcp2_ssize num_reclaimed; + uint32_t version; switch (type) { case NGTCP2_PKT_INITIAL: @@ -1979,28 +2568,41 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, } assert(conn->in_pktns->crypto.tx.ckm); pktns = conn->in_pktns; + version = conn->negotiated_version ? conn->negotiated_version + : conn->client_chosen_version; + if (version == conn->client_chosen_version) { + cc.ckm = pktns->crypto.tx.ckm; + cc.hp_ctx = pktns->crypto.tx.hp_ctx; + } else { + assert(conn->vneg.version == version); + + cc.ckm = conn->vneg.tx.ckm; + cc.hp_ctx = conn->vneg.tx.hp_ctx; + } break; case NGTCP2_PKT_HANDSHAKE: if (!conn->hs_pktns || !conn->hs_pktns->crypto.tx.ckm) { return 0; } pktns = conn->hs_pktns; + version = conn->negotiated_version; + cc.ckm = pktns->crypto.tx.ckm; + cc.hp_ctx = pktns->crypto.tx.hp_ctx; break; default: assert(0); + abort(); } cc.aead = pktns->crypto.ctx.aead; cc.hp = pktns->crypto.ctx.hp; - cc.ckm = pktns->crypto.tx.ckm; - cc.hp_ctx = pktns->crypto.tx.hp_ctx; cc.encrypt = conn->callbacks.encrypt; cc.hp_mask = conn->callbacks.hp_mask; - ngtcp2_pkt_hd_init(&hd, NGTCP2_PKT_FLAG_LONG_FORM, type, + ngtcp2_pkt_hd_init(&hd, conn_pkt_flags_long(conn), type, &conn->dcid.current.cid, &conn->oscid, pktns->tx.last_pkt_num + 1, pktns_select_pkt_numlen(pktns), - conn->version, 0); + version, 0); if (!conn->server && type == NGTCP2_PKT_INITIAL && conn->local.settings.token.len) { @@ -2023,7 +2625,7 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, /* ack_delay = */ 0, NGTCP2_DEFAULT_ACK_DELAY_EXPONENT); if (rv != 0) { - ngtcp2_frame_chain_list_del(frq, conn->mem); + ngtcp2_frame_chain_list_objalloc_del(frq, &conn->frc_objalloc, conn->mem); return rv; } @@ -2038,10 +2640,10 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, } } - /* Server requires at least NGTCP2_DEFAULT_MAX_PKTLEN bytes in order - to send ack-eliciting Initial packet. */ + /* Server requires at least NGTCP2_MAX_UDP_PAYLOAD_SIZE bytes in + order to send ack-eliciting Initial packet. */ if (!conn->server || type != NGTCP2_PKT_INITIAL || - destlen >= NGTCP2_DEFAULT_MAX_PKTLEN) { + destlen >= NGTCP2_MAX_UDP_PAYLOAD_SIZE) { build_pkt: for (; ngtcp2_ksl_len(&pktns->crypto.tx.frq);) { left = ngtcp2_ppe_left(&ppe); @@ -2060,7 +2662,8 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, rv = conn_cryptofrq_pop(conn, &nfrc, pktns, left); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_list_del(frq, conn->mem); + ngtcp2_frame_chain_list_objalloc_del(frq, &conn->frc_objalloc, + conn->mem); return rv; } @@ -2078,15 +2681,16 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, pkt_empty = 0; rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | + NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING | NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE; } if (!(rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) && pktns->rtb.num_retransmittable && pktns->rtb.probe_pkt_left) { - num_reclaimed = ngtcp2_rtb_reclaim_on_pto(&pktns->rtb, conn, pktns, - pktns->rtb.probe_pkt_left + 1); + num_reclaimed = ngtcp2_rtb_reclaim_on_pto(&pktns->rtb, conn, pktns, 1); if (num_reclaimed < 0) { - ngtcp2_frame_chain_list_del(frq, conn->mem); + ngtcp2_frame_chain_list_objalloc_del(frq, &conn->frc_objalloc, + conn->mem); return rv; } if (num_reclaimed) { @@ -2098,21 +2702,19 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, send any probe packet. Client needs to send probe packets until it knows that server has completed address validation or handshake has been confirmed. */ - if (pktns->rtb.num_retransmittable == 0 && + if (pktns->rtb.num_pto_eliciting == 0 && (conn->server || (conn->flags & (NGTCP2_CONN_FLAG_SERVER_ADDR_VERIFIED | NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED)))) { pktns->rtb.probe_pkt_left = 0; ngtcp2_conn_set_loss_detection_timer(conn, ts); + /* TODO If packet is empty, we should return now if cwnd is + zero. */ } } - /* Don't send any PING frame if client Initial has not been - acknowledged yet. */ if (!(rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) && - pktns->rtb.probe_pkt_left && - (type != NGTCP2_PKT_INITIAL || - ngtcp2_strm_is_all_tx_data_acked(&pktns->crypto.strm))) { + pktns->rtb.probe_pkt_left) { lfr.type = NGTCP2_FRAME_PING; rv = conn_ppe_write_frame_hd_log(conn, &ppe, &hd_logged, &hd, &lfr); @@ -2129,7 +2731,7 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, if (!(rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING)) { /* The intention of smaller limit is get more chance to measure RTT samples in early phase. */ - if (pktns->rtb.probe_pkt_left || pktns->tx.num_non_ack_pkt >= 1) { + if (pktns->tx.num_non_ack_pkt >= 1) { lfr.type = NGTCP2_FRAME_PING; rv = conn_ppe_write_frame_hd_log(conn, &ppe, &hd_logged, &hd, &lfr); @@ -2154,10 +2756,10 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, /* If we cannot write another packet, then we need to add padding to Initial here. */ - if (require_padding || - conn_should_pad_pkt( - conn, type, ngtcp2_ppe_left(&ppe), early_datalen, - (rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) != 0)) { + if (conn_should_pad_pkt( + conn, type, ngtcp2_ppe_left(&ppe), write_datalen, + (rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) != 0, + require_padding)) { lfr.type = NGTCP2_FRAME_PADDING; lfr.padding.len = ngtcp2_ppe_padding(&ppe); } else { @@ -2174,7 +2776,7 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, spktlen = ngtcp2_ppe_final(&ppe, NULL); if (spktlen < 0) { assert(ngtcp2_err_is_fatal((int)spktlen)); - ngtcp2_frame_chain_list_del(frq, conn->mem); + ngtcp2_frame_chain_list_objalloc_del(frq, &conn->frc_objalloc, conn->mem); return spktlen; } @@ -2185,17 +2787,19 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, conn_handle_tx_ecn(conn, pi, &rtb_entry_flags, pktns, &hd, ts); } - rv = ngtcp2_rtb_entry_new(&rtbent, &hd, frq, ts, (size_t)spktlen, - rtb_entry_flags, conn->mem); + rv = ngtcp2_rtb_entry_objalloc_new(&rtbent, &hd, frq, ts, (size_t)spktlen, + rtb_entry_flags, + &conn->rtb_entry_objalloc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_list_del(frq, conn->mem); + ngtcp2_frame_chain_list_objalloc_del(frq, &conn->frc_objalloc, conn->mem); return rv; } rv = conn_on_pkt_sent(conn, &pktns->rtb, rtbent); if (rv != 0) { - ngtcp2_rtb_entry_del(rtbent, conn->mem); + ngtcp2_rtb_entry_objalloc_del(rtbent, &conn->rtb_entry_objalloc, + &conn->frc_objalloc, conn->mem); return rv; } @@ -2212,8 +2816,12 @@ conn_write_handshake_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, --pktns->rtb.probe_pkt_left; } + conn_update_keep_alive_last_ts(conn, ts); + conn->dcid.current.bytes_sent += (uint64_t)spktlen; + conn->tx.pacing.pktlen += (size_t)spktlen; + ngtcp2_qlog_metrics_updated(&conn->qlog, &conn->cstat); ++pktns->tx.last_pkt_num; @@ -2258,13 +2866,14 @@ static ngtcp2_ssize conn_write_ack_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, ack_delay = 0; ack_delay_exponent = NGTCP2_DEFAULT_ACK_DELAY_EXPONENT; break; - case NGTCP2_PKT_SHORT: + case NGTCP2_PKT_1RTT: pktns = &conn->pktns; ack_delay = conn_compute_ack_delay(conn); ack_delay_exponent = conn->local.transport_params.ack_delay_exponent; break; default: assert(0); + abort(); } if (!pktns->crypto.tx.ckm) { @@ -2283,8 +2892,8 @@ static ngtcp2_ssize conn_write_ack_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, } spktlen = ngtcp2_conn_write_single_frame_pkt( - conn, pi, dest, destlen, type, &conn->dcid.current.cid, ackfr, - NGTCP2_RTB_ENTRY_FLAG_NONE, NULL, ts); + conn, pi, dest, destlen, type, NGTCP2_WRITE_PKT_FLAG_NONE, + &conn->dcid.current.cid, ackfr, NGTCP2_RTB_ENTRY_FLAG_NONE, NULL, ts); if (spktlen <= 0) { return spktlen; @@ -2333,6 +2942,11 @@ static void conn_discard_initial_state(ngtcp2_conn *conn, ngtcp2_tstamp ts) { "discarding Initial packet number space"); conn_discard_pktns(conn, &conn->in_pktns, ts); + + conn_vneg_crypto_free(conn); + + memset(&conn->vneg.rx, 0, sizeof(conn->vneg.rx)); + memset(&conn->vneg.tx, 0, sizeof(conn->vneg.tx)); } /* @@ -2429,15 +3043,13 @@ static ngtcp2_ssize conn_write_handshake_ack_pkts(ngtcp2_conn *conn, static ngtcp2_ssize conn_write_client_initial(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, - size_t early_datalen, + uint64_t early_datalen, ngtcp2_tstamp ts) { int rv; - assert(conn->callbacks.client_initial); - - rv = conn->callbacks.client_initial(conn, conn->user_data); + rv = conn_call_client_initial(conn); if (rv != 0) { - return NGTCP2_ERR_CALLBACK_FAILURE; + return rv; } return conn_write_handshake_pkt(conn, pi, dest, destlen, NGTCP2_PKT_INITIAL, @@ -2445,6 +3057,39 @@ static ngtcp2_ssize conn_write_client_initial(ngtcp2_conn *conn, ts); } +/* + * dcid_tx_left returns the maximum number of bytes that server is + * allowed to send to an unvalidated path associated to |dcid|. + */ +static uint64_t dcid_tx_left(ngtcp2_dcid *dcid) { + if (dcid->flags & NGTCP2_DCID_FLAG_PATH_VALIDATED) { + return SIZE_MAX; + } + /* From QUIC spec: Prior to validating the client address, servers + MUST NOT send more than three times as many bytes as the number + of bytes they have received. */ + assert(dcid->bytes_recv * 3 >= dcid->bytes_sent); + + return dcid->bytes_recv * 3 - dcid->bytes_sent; +} + +/* + * conn_server_tx_left returns the maximum number of bytes that server + * is allowed to send to an unvalidated path. + */ +static uint64_t conn_server_tx_left(ngtcp2_conn *conn, ngtcp2_dcid *dcid) { + assert(conn->server); + + /* If pv->dcid has the current path, use conn->dcid.current. This + is because conn->dcid.current gets update for bytes_recv and + bytes_sent. */ + if (ngtcp2_path_eq(&dcid->ps.path, &conn->dcid.current.ps.path)) { + return dcid_tx_left(&conn->dcid.current); + } + + return dcid_tx_left(dcid); +} + /* * conn_write_handshake_pkts writes Initial and Handshake packets in * the buffer pointed by |dest| whose length is |destlen|. @@ -2460,13 +3105,13 @@ static ngtcp2_ssize conn_write_client_initial(ngtcp2_conn *conn, static ngtcp2_ssize conn_write_handshake_pkts(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, - size_t early_datalen, + uint64_t write_datalen, ngtcp2_tstamp ts) { ngtcp2_ssize nwrite; ngtcp2_ssize res = 0; - int64_t prev_pkt_num = -1; ngtcp2_rtb_entry *rtbent; uint8_t wflags = NGTCP2_WRITE_PKT_FLAG_NONE; + ngtcp2_conn_stat *cstat = &conn->cstat; ngtcp2_ksl_it it; /* As a client, we would like to discard Initial packet number space @@ -2491,17 +3136,9 @@ static ngtcp2_ssize conn_write_handshake_pkts(ngtcp2_conn *conn, padded. */ conn_discard_initial_state(conn, ts); } else if (conn->in_pktns) { - if (conn->server) { - it = ngtcp2_rtb_head(&conn->in_pktns->rtb); - if (!ngtcp2_ksl_it_end(&it)) { - rtbent = ngtcp2_ksl_it_get(&it); - prev_pkt_num = rtbent->hd.pkt_num; - } - } - nwrite = conn_write_handshake_pkt(conn, pi, dest, destlen, NGTCP2_PKT_INITIAL, - NGTCP2_WRITE_PKT_FLAG_NONE, early_datalen, ts); + NGTCP2_WRITE_PKT_FLAG_NONE, write_datalen, ts); if (nwrite < 0) { assert(nwrite != NGTCP2_ERR_NOBUF); return nwrite; @@ -2510,6 +3147,15 @@ static ngtcp2_ssize conn_write_handshake_pkts(ngtcp2_conn *conn, if (nwrite == 0) { if (conn->server && (conn->in_pktns->rtb.probe_pkt_left || ngtcp2_ksl_len(&conn->in_pktns->crypto.tx.frq))) { + if (cstat->loss_detection_timer != UINT64_MAX && + conn_server_tx_left(conn, &conn->dcid.current) < + NGTCP2_MAX_UDP_PAYLOAD_SIZE) { + ngtcp2_log_info( + &conn->log, NGTCP2_LOG_EVENT_RCV, + "loss detection timer canceled due to amplification limit"); + cstat->loss_detection_timer = UINT64_MAX; + } + return 0; } } else { @@ -2517,24 +3163,27 @@ static ngtcp2_ssize conn_write_handshake_pkts(ngtcp2_conn *conn, dest += nwrite; destlen -= (size_t)nwrite; - if (conn->server && destlen) { - it = ngtcp2_rtb_head(&conn->in_pktns->rtb); - if (!ngtcp2_ksl_it_end(&it)) { - rtbent = ngtcp2_ksl_it_get(&it); - if (rtbent->hd.pkt_num != prev_pkt_num && - (rtbent->flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING)) { - /* We might have already added padding to Initial, but in - that case, we should have destlen == 0 and no Handshake - packet will be written. */ - wflags |= NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING; + if (destlen) { + /* We might have already added padding to Initial, but in that + case, we should have destlen == 0 and no Handshake packet + will be written. */ + if (conn->server) { + it = ngtcp2_rtb_head(&conn->in_pktns->rtb); + if (!ngtcp2_ksl_it_end(&it)) { + rtbent = ngtcp2_ksl_it_get(&it); + if (rtbent->flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) { + wflags |= NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING; + } } + } else { + wflags |= NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING; } } } } - nwrite = conn_write_handshake_pkt(conn, pi, dest, destlen, - NGTCP2_PKT_HANDSHAKE, wflags, 0, ts); + nwrite = conn_write_handshake_pkt( + conn, pi, dest, destlen, NGTCP2_PKT_HANDSHAKE, wflags, write_datalen, ts); if (nwrite < 0) { assert(nwrite != NGTCP2_ERR_NOBUF); return nwrite; @@ -2608,12 +3257,13 @@ static size_t conn_required_num_new_connection_id(ngtcp2_conn *conn) { return 0; } - assert(conn->remote.transport_params.active_connection_id_limit); + assert(conn->remote.transport_params); + assert(conn->remote.transport_params->active_connection_id_limit); /* len includes retired CID. We don't provide extra CID if doing so exceeds NGTCP2_MAX_SCID_POOL_SIZE. */ - n = conn->remote.transport_params.active_connection_id_limit + + n = conn->remote.transport_params->active_connection_id_limit + conn->scid.num_retired; return (size_t)ngtcp2_min(NGTCP2_MAX_SCID_POOL_SIZE, n) - len; @@ -2667,7 +3317,7 @@ static int conn_enqueue_new_connection_id(ngtcp2_conn *conn) { return NGTCP2_ERR_NOMEM; } - ngtcp2_scid_init(scid, seq, &cid, token); + ngtcp2_scid_init(scid, seq, &cid); rv = ngtcp2_ksl_insert(&conn->scid.set, NULL, &scid->cid, scid); if (rv != 0) { @@ -2675,7 +3325,7 @@ static int conn_enqueue_new_connection_id(ngtcp2_conn *conn) { return rv; } - rv = ngtcp2_frame_chain_new(&nfrc, conn->mem); + rv = ngtcp2_frame_chain_objalloc_new(&nfrc, &conn->frc_objalloc); if (rv != 0) { return rv; } @@ -2718,7 +3368,7 @@ static int conn_remove_retired_connection_id(ngtcp2_conn *conn, for (; !ngtcp2_pq_empty(&conn->scid.used);) { scid = ngtcp2_struct_of(ngtcp2_pq_top(&conn->scid.used), ngtcp2_scid, pe); - if (scid->ts_retired == UINT64_MAX || scid->ts_retired + timeout >= ts) { + if (scid->retired_ts == UINT64_MAX || scid->retired_ts + timeout >= ts) { break; } @@ -2737,9 +3387,9 @@ static int conn_remove_retired_connection_id(ngtcp2_conn *conn, --conn->scid.num_retired; } - for (; ngtcp2_ringbuf_len(&conn->dcid.retired);) { - dcid = ngtcp2_ringbuf_get(&conn->dcid.retired, 0); - if (dcid->ts_retired + timeout >= ts) { + for (; ngtcp2_ringbuf_len(&conn->dcid.retired.rb);) { + dcid = ngtcp2_ringbuf_get(&conn->dcid.retired.rb, 0); + if (dcid->retired_ts + timeout >= ts) { break; } @@ -2748,7 +3398,7 @@ static int conn_remove_retired_connection_id(ngtcp2_conn *conn, return rv; } - ngtcp2_ringbuf_pop_front(&conn->dcid.retired); + ngtcp2_ringbuf_pop_front(&conn->dcid.retired.rb); } return 0; @@ -2762,10 +3412,33 @@ static size_t conn_min_short_pktlen(ngtcp2_conn *conn) { return conn->dcid.current.cid.datalen + NGTCP2_MIN_PKT_EXPANDLEN; } +/* + * conn_handle_unconfirmed_key_update_from_remote deals with key + * update which has not been confirmed yet and initiated by the remote + * endpoint. + * + * If key update was initiated by the remote endpoint, acknowledging a + * packet encrypted with the new key completes key update procedure. + */ +static void conn_handle_unconfirmed_key_update_from_remote(ngtcp2_conn *conn, + int64_t largest_ack, + ngtcp2_tstamp ts) { + if (!(conn->flags & NGTCP2_CONN_FLAG_KEY_UPDATE_NOT_CONFIRMED) || + (conn->flags & NGTCP2_CONN_FLAG_KEY_UPDATE_INITIATOR) || + largest_ack < conn->pktns.crypto.rx.ckm->pkt_num) { + return; + } + + conn->flags &= (uint32_t)~NGTCP2_CONN_FLAG_KEY_UPDATE_NOT_CONFIRMED; + conn->crypto.key_update.confirmed_ts = ts; + + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_CRY, "key update confirmed"); +} + /* * conn_write_pkt writes a protected packet in the buffer pointed by * |dest| whose length if |destlen|. |type| specifies the type of - * packet. It can be NGTCP2_PKT_SHORT or NGTCP2_PKT_0RTT. + * packet. It can be NGTCP2_PKT_1RTT or NGTCP2_PKT_0RTT. * * This function can send new stream data. In order to send stream * data, specify the underlying stream and parameters to @@ -2804,25 +3477,24 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, ngtcp2_rtb_entry *ent; ngtcp2_strm *strm; int pkt_empty = 1; - size_t ndatalen = 0; + uint64_t ndatalen = 0; int send_stream = 0; int stream_blocked = 0; int send_datagram = 0; ngtcp2_pktns *pktns = &conn->pktns; size_t left; - size_t datalen = 0; + uint64_t datalen = 0; ngtcp2_vec data[NGTCP2_MAX_STREAM_DATACNT]; size_t datacnt; - uint8_t rtb_entry_flags = NGTCP2_RTB_ENTRY_FLAG_NONE; + uint16_t rtb_entry_flags = NGTCP2_RTB_ENTRY_FLAG_NONE; int hd_logged = 0; ngtcp2_path_challenge_entry *pcent; - uint8_t hd_flags; + uint8_t hd_flags = NGTCP2_PKT_FLAG_NONE; int require_padding = (flags & NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING) != 0; int write_more = (flags & NGTCP2_WRITE_PKT_FLAG_MORE) != 0; int ppe_pending = (conn->flags & NGTCP2_CONN_FLAG_PPE_PENDING) != 0; size_t min_pktlen = conn_min_short_pktlen(conn); int padded = 0; - int credit_expanded = 0; ngtcp2_cc_pkt cc_pkt; uint64_t crypto_offset; uint64_t stream_offset; @@ -2831,6 +3503,9 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint64_t target_max_data; ngtcp2_conn_stat *cstat = &conn->cstat; uint64_t delta; + const ngtcp2_cid *scid = NULL; + int keep_alive_expired = 0; + uint32_t version = 0; /* Return 0 if destlen is less than minimum packet length which can trigger Stateless Reset */ @@ -2861,21 +3536,22 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, if (!ppe_pending) { switch (type) { - case NGTCP2_PKT_SHORT: - hd_flags = - (pktns->crypto.tx.ckm->flags & NGTCP2_CRYPTO_KM_FLAG_KEY_PHASE_ONE) - ? NGTCP2_PKT_FLAG_KEY_PHASE - : NGTCP2_PKT_FLAG_NONE; + case NGTCP2_PKT_1RTT: + hd_flags = conn_pkt_flags_short(conn); + scid = NULL; cc->aead = pktns->crypto.ctx.aead; cc->hp = pktns->crypto.ctx.hp; cc->ckm = pktns->crypto.tx.ckm; cc->hp_ctx = pktns->crypto.tx.hp_ctx; + assert(conn->negotiated_version); + + version = conn->negotiated_version; + /* transport parameter is only valid after handshake completion which means we don't know how many connection ID that remote peer can accept before handshake completion. */ - if (conn->oscid.datalen && - (conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED)) { + if (conn->oscid.datalen && conn_is_handshake_completed(conn)) { rv = conn_enqueue_new_connection_id(conn); if (rv != 0) { return rv; @@ -2888,11 +3564,13 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, if (!conn->early.ckm) { return 0; } - hd_flags = NGTCP2_PKT_FLAG_LONG_FORM; + hd_flags = conn_pkt_flags_long(conn); + scid = &conn->oscid; cc->aead = conn->early.ctx.aead; cc->hp = conn->early.ctx.hp; cc->ckm = conn->early.ckm; cc->hp_ctx = conn->early.hp_ctx; + version = conn->client_chosen_version; break; default: /* Unreachable */ @@ -2903,7 +3581,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, cc->hp_mask = conn->callbacks.hp_mask; if (conn_should_send_max_data(conn)) { - rv = ngtcp2_frame_chain_new(&nfrc, conn->mem); + rv = ngtcp2_frame_chain_objalloc_new(&nfrc, &conn->frc_objalloc); if (rv != 0) { return rv; } @@ -2937,12 +3615,11 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, conn->rx.max_offset = conn->rx.unsent_max_offset = nfrc->fr.max_data.max_data; - credit_expanded = 1; } - ngtcp2_pkt_hd_init(hd, hd_flags, type, &conn->dcid.current.cid, - &conn->oscid, pktns->tx.last_pkt_num + 1, - pktns_select_pkt_numlen(pktns), conn->version, 0); + ngtcp2_pkt_hd_init(hd, hd_flags, type, &conn->dcid.current.cid, scid, + pktns->tx.last_pkt_num + 1, + pktns_select_pkt_numlen(pktns), version, 0); ngtcp2_ppe_init(ppe, dest, destlen, cc); @@ -2956,8 +3633,8 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, return 0; } - if (ngtcp2_ringbuf_len(&conn->rx.path_challenge)) { - pcent = ngtcp2_ringbuf_get(&conn->rx.path_challenge, 0); + if (ngtcp2_ringbuf_len(&conn->rx.path_challenge.rb)) { + pcent = ngtcp2_ringbuf_get(&conn->rx.path_challenge.rb, 0); /* PATH_RESPONSE is bound to the path that the corresponding PATH_CHALLENGE is received. */ @@ -2970,11 +3647,12 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, if (rv != 0) { assert(NGTCP2_ERR_NOBUF == rv); } else { - ngtcp2_ringbuf_pop_front(&conn->rx.path_challenge); + ngtcp2_ringbuf_pop_front(&conn->rx.path_challenge.rb); pkt_empty = 0; rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING; - require_padding = !conn->server || destlen >= 1200; + require_padding = + !conn->server || destlen >= NGTCP2_MAX_UDP_PAYLOAD_SIZE; /* We don't retransmit PATH_RESPONSE. */ } } @@ -2996,6 +3674,10 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, ngtcp2_acktr_commit_ack(&pktns->acktr); ngtcp2_acktr_add_ack(&pktns->acktr, hd->pkt_num, ackfr->ack.largest_ack); + if (type == NGTCP2_PKT_1RTT) { + conn_handle_unconfirmed_key_update_from_remote( + conn, ackfr->ack.largest_ack, ts); + } pkt_empty = 0; } } @@ -3006,7 +3688,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, ((*pfrc)->binder->flags & NGTCP2_FRAME_CHAIN_BINDER_FLAG_ACK)) { frc = *pfrc; *pfrc = (*pfrc)->next; - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); continue; } @@ -3017,9 +3699,22 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, if (strm == NULL || (strm->flags & NGTCP2_STRM_FLAG_SHUT_RD)) { frc = *pfrc; *pfrc = (*pfrc)->next; - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); continue; } + + if (!(strm->flags & NGTCP2_STRM_FLAG_STREAM_STOP_SENDING_CALLED)) { + strm->flags |= NGTCP2_STRM_FLAG_STREAM_STOP_SENDING_CALLED; + + rv = conn_call_stream_stop_sending( + conn, (*pfrc)->fr.stop_sending.stream_id, + (*pfrc)->fr.stop_sending.app_error_code, strm->stream_user_data); + if (rv != 0) { + assert(ngtcp2_err_is_fatal(rv)); + return rv; + } + } + break; case NGTCP2_FRAME_STREAM: assert(0); @@ -3029,7 +3724,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, conn->remote.bidi.max_streams) { frc = *pfrc; *pfrc = (*pfrc)->next; - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); continue; } break; @@ -3038,7 +3733,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, conn->remote.uni.max_streams) { frc = *pfrc; *pfrc = (*pfrc)->next; - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); continue; } break; @@ -3049,7 +3744,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, (*pfrc)->fr.max_stream_data.max_stream_data < strm->rx.max_offset) { frc = *pfrc; *pfrc = (*pfrc)->next; - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); continue; } break; @@ -3057,13 +3752,10 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, if ((*pfrc)->fr.max_data.max_data < conn->rx.max_offset) { frc = *pfrc; *pfrc = (*pfrc)->next; - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); continue; } break; - case NGTCP2_FRAME_RETIRE_CONNECTION_ID: - ++conn->dcid.num_retire_queued; - break; case NGTCP2_FRAME_CRYPTO: assert(0); break; @@ -3077,6 +3769,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, pkt_empty = 0; rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | + NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING | NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE; pfrc = &(*pfrc)->next; } @@ -3117,6 +3810,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, pkt_empty = 0; rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | + NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING | NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE; } } @@ -3132,7 +3826,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, return rv; } - rv = ngtcp2_frame_chain_new(&nfrc, conn->mem); + rv = ngtcp2_frame_chain_objalloc_new(&nfrc, &conn->frc_objalloc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); return rv; @@ -3149,6 +3843,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, } else { pkt_empty = 0; rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | + NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING | NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE; pfrc = &(*pfrc)->next; } @@ -3163,7 +3858,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, return rv; } - rv = ngtcp2_frame_chain_new(&nfrc, conn->mem); + rv = ngtcp2_frame_chain_objalloc_new(&nfrc, &conn->frc_objalloc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); return rv; @@ -3181,6 +3876,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, } else { pkt_empty = 0; rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | + NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING | NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE; pfrc = &(*pfrc)->next; } @@ -3193,7 +3889,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, if (!(strm->flags & NGTCP2_STRM_FLAG_SHUT_RD) && conn_should_send_max_stream_data(conn, strm)) { - rv = ngtcp2_frame_chain_new(&nfrc, conn->mem); + rv = ngtcp2_frame_chain_objalloc_new(&nfrc, &conn->frc_objalloc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); return rv; @@ -3236,8 +3932,8 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, } pkt_empty = 0; - credit_expanded = 1; rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | + NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING | NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE; pfrc = &(*pfrc)->next; strm->rx.max_offset = strm->rx.unsent_max_offset = @@ -3253,6 +3949,8 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, if (stream_offset == (uint64_t)-1) { ngtcp2_strm_streamfrq_clear(strm); ngtcp2_conn_tx_strmq_pop(conn); + assert(conn->tx.strmq_nretrans); + --conn->tx.strmq_nretrans; continue; } @@ -3286,10 +3984,13 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, pkt_empty = 0; rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | + NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING | NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE; if (ngtcp2_strm_streamfrq_empty(strm)) { ngtcp2_conn_tx_strmq_pop(conn); + assert(conn->tx.strmq_nretrans); + --conn->tx.strmq_nretrans; continue; } @@ -3303,35 +4004,11 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, } } - /* Add ACK if MAX_DATA or MAX_STREAM_DATA frame is encoded to - decrease packet count. */ - if (ackfr == NULL && credit_expanded) { - rv = conn_create_ack_frame( - conn, &ackfr, pktns, type, ts, /* ack_delay = */ 0, - conn->local.transport_params.ack_delay_exponent); - if (rv != 0) { - assert(ngtcp2_err_is_fatal(rv)); - return rv; - } - - if (ackfr) { - rv = conn_ppe_write_frame_hd_log(conn, ppe, &hd_logged, hd, ackfr); - if (rv != 0) { - assert(NGTCP2_ERR_NOBUF == rv); - } else { - ngtcp2_acktr_commit_ack(&pktns->acktr); - ngtcp2_acktr_add_ack(&pktns->acktr, hd->pkt_num, - ackfr->ack.largest_ack); - } - } - } - if (rv != NGTCP2_ERR_NOBUF && !send_stream && !send_datagram && !(rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) && pktns->rtb.num_retransmittable && pktns->tx.frq == NULL && pktns->rtb.probe_pkt_left) { - num_reclaimed = ngtcp2_rtb_reclaim_on_pto(&pktns->rtb, conn, pktns, - pktns->rtb.probe_pkt_left + 1); + num_reclaimed = ngtcp2_rtb_reclaim_on_pto(&pktns->rtb, conn, pktns, 1); if (num_reclaimed < 0) { return rv; } @@ -3343,9 +4020,11 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, those packets have been acknowledged (i.e., retransmission in another packet). In this case, we don't have to send any probe packet. */ - if (pktns->rtb.num_retransmittable == 0) { + if (pktns->rtb.num_pto_eliciting == 0) { pktns->rtb.probe_pkt_left = 0; ngtcp2_conn_set_loss_detection_timer(conn, ts); + /* TODO If packet is empty, we should return now if cwnd is + zero. */ } } } else { @@ -3362,11 +4041,15 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, vmsg->stream.strm->stream_id, vmsg->stream.strm->tx.offset, ndatalen, left)) != (size_t)-1 && (ndatalen || datalen == 0)) { - datacnt = ngtcp2_vec_copy_at_most( - data, &ndatalen, NGTCP2_MAX_STREAM_DATACNT, vmsg->stream.data, - vmsg->stream.datacnt, ndatalen); + datacnt = ngtcp2_vec_copy_at_most(data, NGTCP2_MAX_STREAM_DATACNT, + vmsg->stream.data, vmsg->stream.datacnt, + (size_t)ndatalen); + ndatalen = ngtcp2_vec_len(data, datacnt); + + assert((datacnt == 0 && datalen == 0) || (datacnt && datalen)); - rv = ngtcp2_frame_chain_stream_datacnt_new(&nfrc, datacnt, conn->mem); + rv = ngtcp2_frame_chain_stream_datacnt_objalloc_new( + &nfrc, datacnt, &conn->frc_objalloc, conn->mem); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); return rv; @@ -3393,6 +4076,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, pkt_empty = 0; rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | + NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING | NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE; vmsg->stream.strm->tx.offset += ndatalen; @@ -3410,22 +4094,49 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, } if (rv != NGTCP2_ERR_NOBUF && send_datagram && - left >= ngtcp2_pkt_datagram_framelen(datalen)) { - lfr.datagram.type = NGTCP2_FRAME_DATAGRAM_LEN; - lfr.datagram.datacnt = vmsg->datagram.datacnt; - lfr.datagram.data = (ngtcp2_vec *)vmsg->datagram.data; + left >= ngtcp2_pkt_datagram_framelen((size_t)datalen)) { + if (conn->callbacks.ack_datagram || conn->callbacks.lost_datagram) { + rv = ngtcp2_frame_chain_objalloc_new(&nfrc, &conn->frc_objalloc); + if (rv != 0) { + assert(ngtcp2_err_is_fatal(rv)); + return rv; + } - rv = conn_ppe_write_frame_hd_log(conn, ppe, &hd_logged, hd, &lfr); - assert(rv == 0); + nfrc->fr.datagram.type = NGTCP2_FRAME_DATAGRAM_LEN; + nfrc->fr.datagram.dgram_id = vmsg->datagram.dgram_id; + nfrc->fr.datagram.datacnt = vmsg->datagram.datacnt; + nfrc->fr.datagram.data = (ngtcp2_vec *)vmsg->datagram.data; - pkt_empty = 0; - rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING; + rv = conn_ppe_write_frame_hd_log(conn, ppe, &hd_logged, hd, &nfrc->fr); + assert(rv == 0); - if (vmsg->datagram.paccepted) { - *vmsg->datagram.paccepted = 1; - } - } else { - send_datagram = 0; + /* Because DATAGRAM will not be retransmitted, we do not use + data anymore. Just nullify it. The only reason to keep + track a frame is keep dgram_id to pass it to + ngtcp2_ack_datagram or ngtcp2_lost_datagram callbacks. */ + nfrc->fr.datagram.datacnt = 0; + nfrc->fr.datagram.data = NULL; + + *pfrc = nfrc; + pfrc = &(*pfrc)->next; + } else { + lfr.datagram.type = NGTCP2_FRAME_DATAGRAM_LEN; + lfr.datagram.datacnt = vmsg->datagram.datacnt; + lfr.datagram.data = (ngtcp2_vec *)vmsg->datagram.data; + + rv = conn_ppe_write_frame_hd_log(conn, ppe, &hd_logged, hd, &lfr); + assert(rv == 0); + } + + pkt_empty = 0; + rtb_entry_flags |= + NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | NGTCP2_RTB_ENTRY_FLAG_DATAGRAM; + + if (vmsg->datagram.paccepted) { + *vmsg->datagram.paccepted = 1; + } + } else { + send_datagram = 0; } if (pkt_empty) { @@ -3434,7 +4145,9 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, return NGTCP2_ERR_STREAM_DATA_BLOCKED; } - if (conn->pktns.rtb.probe_pkt_left == 0) { + keep_alive_expired = conn_keep_alive_expired(conn, ts); + + if (conn->pktns.rtb.probe_pkt_left == 0 && !keep_alive_expired) { return 0; } } else if (write_more) { @@ -3470,7 +4183,8 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, } if (!(rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING)) { - if (pktns->tx.num_non_ack_pkt >= NGTCP2_MAX_NON_ACK_TX_PKT) { + if (pktns->tx.num_non_ack_pkt >= NGTCP2_MAX_NON_ACK_TX_PKT || + keep_alive_expired || conn->pktns.rtb.probe_pkt_left) { lfr.type = NGTCP2_FRAME_PING; rv = conn_ppe_write_frame_hd_log(conn, ppe, &hd_logged, hd, &lfr); @@ -3480,6 +4194,9 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, packet is still empty. */ } else { rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING; + if (conn->pktns.rtb.probe_pkt_left) { + rtb_entry_flags |= NGTCP2_RTB_ENTRY_FLAG_PROBE; + } pktns->tx.num_non_ack_pkt = 0; } } else { @@ -3491,18 +4208,16 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, /* TODO Push STREAM frame back to ngtcp2_strm if there is an error before ngtcp2_rtb_entry is safely created and added. */ - lfr.type = NGTCP2_FRAME_PADDING; - if ((require_padding || - /* Making full sized packet will help GSO a bit */ - ngtcp2_ppe_left(ppe) < 10 || - (type == NGTCP2_PKT_0RTT && conn->state == NGTCP2_CS_CLIENT_INITIAL)) && - ngtcp2_ppe_left(ppe)) { + if (require_padding || + /* Making full sized packet will help GSO a bit */ + ngtcp2_ppe_left(ppe) < 10) { lfr.padding.len = ngtcp2_ppe_padding(ppe); } else { lfr.padding.len = ngtcp2_ppe_padding_size(ppe, min_pktlen); } if (lfr.padding.len) { + lfr.type = NGTCP2_FRAME_PADDING; padded = 1; ngtcp2_log_tx_fr(&conn->log, hd, &lfr); ngtcp2_qlog_write_frame(&conn->qlog, &lfr); @@ -3525,8 +4240,9 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, conn_handle_tx_ecn(conn, pi, &rtb_entry_flags, pktns, hd, ts); } - rv = ngtcp2_rtb_entry_new(&ent, hd, NULL, ts, (size_t)nwrite, - rtb_entry_flags, conn->mem); + rv = ngtcp2_rtb_entry_objalloc_new(&ent, hd, NULL, ts, (size_t)nwrite, + rtb_entry_flags, + &conn->rtb_entry_objalloc); if (rv != 0) { assert(ngtcp2_err_is_fatal((int)nwrite)); return rv; @@ -3547,7 +4263,8 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, rv = conn_on_pkt_sent(conn, &pktns->rtb, ent); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_rtb_entry_del(ent, conn->mem); + ngtcp2_rtb_entry_objalloc_del(ent, &conn->rtb_entry_objalloc, + &conn->frc_objalloc, conn->mem); return rv; } @@ -3556,7 +4273,8 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, conn->cc.on_pkt_sent( &conn->cc, &conn->cstat, ngtcp2_cc_pkt_init(&cc_pkt, hd->pkt_num, (size_t)nwrite, - NGTCP2_PKTNS_ID_APPLICATION, ts)); + NGTCP2_PKTNS_ID_APPLICATION, ts, ent->rst.lost, + ent->rst.tx_in_flight, ent->rst.is_app_limited)); } if (conn->flags & NGTCP2_CONN_FLAG_RESTART_IDLE_TIMER_ON_WRITE) { @@ -3567,7 +4285,7 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, conn_handle_tx_ecn(conn, pi, NULL, pktns, hd, ts); } - conn->flags &= (uint16_t)~NGTCP2_CONN_FLAG_PPE_PENDING; + conn->flags &= (uint32_t)~NGTCP2_CONN_FLAG_PPE_PENDING; if (pktns->rtb.probe_pkt_left && (rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING)) { @@ -3577,8 +4295,12 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, nwrite); } + conn_update_keep_alive_last_ts(conn, ts); + conn->dcid.current.bytes_sent += (uint64_t)nwrite; + conn->tx.pacing.pktlen += (size_t)nwrite; + ngtcp2_qlog_metrics_updated(&conn->qlog, &conn->cstat); ++pktns->tx.last_pkt_num; @@ -3588,8 +4310,8 @@ static ngtcp2_ssize conn_write_pkt(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, ngtcp2_ssize ngtcp2_conn_write_single_frame_pkt( ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, - uint8_t type, const ngtcp2_cid *dcid, ngtcp2_frame *fr, uint8_t rtb_flags, - const ngtcp2_path *path, ngtcp2_tstamp ts) { + uint8_t type, uint8_t flags, const ngtcp2_cid *dcid, ngtcp2_frame *fr, + uint16_t rtb_entry_flags, const ngtcp2_path *path, ngtcp2_tstamp ts) { int rv; ngtcp2_ppe ppe; ngtcp2_pkt_hd hd; @@ -3597,41 +4319,59 @@ ngtcp2_ssize ngtcp2_conn_write_single_frame_pkt( ngtcp2_ssize nwrite; ngtcp2_crypto_cc cc; ngtcp2_pktns *pktns; - uint8_t flags; + uint8_t hd_flags; ngtcp2_rtb_entry *rtbent; int padded = 0; + const ngtcp2_cid *scid; + uint32_t version; switch (type) { case NGTCP2_PKT_INITIAL: pktns = conn->in_pktns; - flags = NGTCP2_PKT_FLAG_LONG_FORM; + hd_flags = conn_pkt_flags_long(conn); + scid = &conn->oscid; + version = conn->negotiated_version ? conn->negotiated_version + : conn->client_chosen_version; + if (version == conn->client_chosen_version) { + cc.ckm = pktns->crypto.tx.ckm; + cc.hp_ctx = pktns->crypto.tx.hp_ctx; + } else { + assert(version == conn->vneg.version); + + cc.ckm = conn->vneg.tx.ckm; + cc.hp_ctx = conn->vneg.tx.hp_ctx; + } break; case NGTCP2_PKT_HANDSHAKE: pktns = conn->hs_pktns; - flags = NGTCP2_PKT_FLAG_LONG_FORM; + hd_flags = conn_pkt_flags_long(conn); + scid = &conn->oscid; + version = conn->negotiated_version; + cc.ckm = pktns->crypto.tx.ckm; + cc.hp_ctx = pktns->crypto.tx.hp_ctx; break; - case NGTCP2_PKT_SHORT: - /* 0 means Short packet. */ + case NGTCP2_PKT_1RTT: pktns = &conn->pktns; - flags = (pktns->crypto.tx.ckm->flags & NGTCP2_CRYPTO_KM_FLAG_KEY_PHASE_ONE) - ? NGTCP2_PKT_FLAG_KEY_PHASE - : NGTCP2_PKT_FLAG_NONE; + hd_flags = conn_pkt_flags_short(conn); + scid = NULL; + version = conn->negotiated_version; + cc.ckm = pktns->crypto.tx.ckm; + cc.hp_ctx = pktns->crypto.tx.hp_ctx; break; default: /* We don't support 0-RTT packet in this function. */ assert(0); + abort(); } cc.aead = pktns->crypto.ctx.aead; cc.hp = pktns->crypto.ctx.hp; - cc.ckm = pktns->crypto.tx.ckm; - cc.hp_ctx = pktns->crypto.tx.hp_ctx; cc.encrypt = conn->callbacks.encrypt; cc.hp_mask = conn->callbacks.hp_mask; - ngtcp2_pkt_hd_init(&hd, flags, type, dcid, &conn->oscid, + ngtcp2_pkt_hd_init(&hd, hd_flags, type, dcid, scid, pktns->tx.last_pkt_num + 1, pktns_select_pkt_numlen(pktns), - conn->version, 0); + version, 0); ngtcp2_ppe_init(&ppe, dest, destlen, &cc); @@ -3655,21 +4395,25 @@ ngtcp2_ssize ngtcp2_conn_write_single_frame_pkt( } lfr.type = NGTCP2_FRAME_PADDING; - switch (fr->type) { - case NGTCP2_FRAME_PATH_CHALLENGE: - case NGTCP2_FRAME_PATH_RESPONSE: - if (!conn->server || destlen >= 1200) { - lfr.padding.len = ngtcp2_ppe_padding(&ppe); - } else { - lfr.padding.len = 0; - } - break; - default: - if (type == NGTCP2_PKT_SHORT) { - lfr.padding.len = - ngtcp2_ppe_padding_size(&ppe, conn_min_short_pktlen(conn)); - } else { - lfr.padding.len = ngtcp2_ppe_padding_hp_sample(&ppe); + if (flags & NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING) { + lfr.padding.len = ngtcp2_ppe_padding(&ppe); + } else { + switch (fr->type) { + case NGTCP2_FRAME_PATH_CHALLENGE: + case NGTCP2_FRAME_PATH_RESPONSE: + if (!conn->server || destlen >= NGTCP2_MAX_UDP_PAYLOAD_SIZE) { + lfr.padding.len = ngtcp2_ppe_padding(&ppe); + } else { + lfr.padding.len = 0; + } + break; + default: + if (type == NGTCP2_PKT_1RTT) { + lfr.padding.len = + ngtcp2_ppe_padding_size(&ppe, conn_min_short_pktlen(conn)); + } else { + lfr.padding.len = ngtcp2_ppe_padding_hp_sample(&ppe); + } } } if (lfr.padding.len) { @@ -3683,7 +4427,7 @@ ngtcp2_ssize ngtcp2_conn_write_single_frame_pkt( return nwrite; } - if (type == NGTCP2_PKT_SHORT) { + if (type == NGTCP2_PKT_1RTT) { ++cc.ckm->use_count; } @@ -3695,35 +4439,57 @@ ngtcp2_ssize ngtcp2_conn_write_single_frame_pkt( case NGTCP2_FRAME_ACK_ECN: ngtcp2_acktr_commit_ack(&pktns->acktr); ngtcp2_acktr_add_ack(&pktns->acktr, hd.pkt_num, fr->ack.largest_ack); + if (type == NGTCP2_PKT_1RTT) { + conn_handle_unconfirmed_key_update_from_remote(conn, fr->ack.largest_ack, + ts); + } break; } - if (((rtb_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) || padded) && + if (((rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) || padded) && (!path || ngtcp2_path_eq(&conn->dcid.current.ps.path, path))) { - if (pi) { - conn_handle_tx_ecn(conn, pi, &rtb_flags, pktns, &hd, ts); + if (pi && !(rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE)) { + conn_handle_tx_ecn(conn, pi, &rtb_entry_flags, pktns, &hd, ts); } - rv = ngtcp2_rtb_entry_new(&rtbent, &hd, NULL, ts, (size_t)nwrite, rtb_flags, - conn->mem); + rv = ngtcp2_rtb_entry_objalloc_new(&rtbent, &hd, NULL, ts, (size_t)nwrite, + rtb_entry_flags, + &conn->rtb_entry_objalloc); if (rv != 0) { return rv; } rv = conn_on_pkt_sent(conn, &pktns->rtb, rtbent); if (rv != 0) { - ngtcp2_rtb_entry_del(rtbent, conn->mem); + ngtcp2_rtb_entry_objalloc_del(rtbent, &conn->rtb_entry_objalloc, + &conn->frc_objalloc, conn->mem); return rv; } - if ((rtb_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) && - (conn->flags & NGTCP2_CONN_FLAG_RESTART_IDLE_TIMER_ON_WRITE)) { - conn_restart_timer_on_write(conn, ts); + if (rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) { + if (conn->flags & NGTCP2_CONN_FLAG_RESTART_IDLE_TIMER_ON_WRITE) { + conn_restart_timer_on_write(conn, ts); + } + + if (pktns->rtb.probe_pkt_left && path && + ngtcp2_path_eq(&conn->dcid.current.ps.path, path)) { + --pktns->rtb.probe_pkt_left; + + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_CON, "probe pkt size=%td", + nwrite); + } } - } else if (pi && conn->tx.ecn.state == NGTCP2_ECN_STATE_CAPABLE) { + } else if (pi && !(rtb_entry_flags & NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE) && + conn->tx.ecn.state == NGTCP2_ECN_STATE_CAPABLE) { conn_handle_tx_ecn(conn, pi, NULL, pktns, &hd, ts); } + if (path && ngtcp2_path_eq(&conn->dcid.current.ps.path, path)) { + conn_update_keep_alive_last_ts(conn, ts); + } + + conn->tx.pacing.pktlen += (size_t)nwrite; + ngtcp2_qlog_metrics_updated(&conn->qlog, &conn->cstat); ++pktns->tx.last_pkt_num; @@ -3732,7 +4498,7 @@ ngtcp2_ssize ngtcp2_conn_write_single_frame_pkt( } /* - * conn_process_early_rtb makes any pending 0RTT packet Short packet. + * conn_process_early_rtb makes any pending 0RTT packet 1RTT packet. */ static void conn_process_early_rtb(ngtcp2_conn *conn) { ngtcp2_rtb_entry *ent; @@ -3748,9 +4514,9 @@ static void conn_process_early_rtb(ngtcp2_conn *conn) { continue; } - /* 0-RTT packet is retransmitted as a Short packet. */ + /* 0-RTT packet is retransmitted as a 1RTT packet. */ ent->hd.flags &= (uint8_t)~NGTCP2_PKT_FLAG_LONG_FORM; - ent->hd.type = NGTCP2_PKT_SHORT; + ent->hd.type = NGTCP2_PKT_1RTT; } } @@ -3763,10 +4529,10 @@ static int conn_handshake_remnants_left(ngtcp2_conn *conn) { ngtcp2_pktns *in_pktns = conn->in_pktns; ngtcp2_pktns *hs_pktns = conn->hs_pktns; - return !(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED) || - (in_pktns && (in_pktns->rtb.num_retransmittable || + return !conn_is_handshake_completed(conn) || + (in_pktns && (in_pktns->rtb.num_pto_eliciting || ngtcp2_ksl_len(&in_pktns->crypto.tx.frq))) || - (hs_pktns && (hs_pktns->rtb.num_retransmittable || + (hs_pktns && (hs_pktns->rtb.num_pto_eliciting || ngtcp2_ksl_len(&hs_pktns->crypto.tx.frq))); } @@ -3779,13 +4545,20 @@ static int conn_handshake_remnants_left(ngtcp2_conn *conn) { * * NGTCP2_ERR_NOMEM * Out of memory. + * NGTCP2_ERR_CONNECTION_ID_LIMIT + * The number of unacknowledged retirement exceeds the limit. */ static int conn_retire_dcid_seq(ngtcp2_conn *conn, uint64_t seq) { ngtcp2_pktns *pktns = &conn->pktns; ngtcp2_frame_chain *nfrc; int rv; - rv = ngtcp2_frame_chain_new(&nfrc, conn->mem); + rv = ngtcp2_conn_track_retired_dcid_seq(conn, seq); + if (rv != 0) { + return rv; + } + + rv = ngtcp2_frame_chain_objalloc_new(&nfrc, &conn->frc_objalloc); if (rv != 0) { return rv; } @@ -3809,7 +4582,7 @@ static int conn_retire_dcid_seq(ngtcp2_conn *conn, uint64_t seq) { */ static int conn_retire_dcid(ngtcp2_conn *conn, const ngtcp2_dcid *dcid, ngtcp2_tstamp ts) { - ngtcp2_ringbuf *rb = &conn->dcid.retired; + ngtcp2_ringbuf *rb = &conn->dcid.retired.rb; ngtcp2_dcid *dest, *stale_dcid; int rv; @@ -3827,7 +4600,7 @@ static int conn_retire_dcid(ngtcp2_conn *conn, const ngtcp2_dcid *dcid, dest = ngtcp2_ringbuf_push_back(rb); ngtcp2_dcid_copy(dest, dcid); - dest->ts_retired = ts; + dest->retired_ts = ts; return conn_retire_dcid_seq(conn, dcid->seq); } @@ -3848,20 +4621,19 @@ static int conn_retire_dcid(ngtcp2_conn *conn, const ngtcp2_dcid *dcid, */ static int conn_bind_dcid(ngtcp2_conn *conn, ngtcp2_dcid **pdcid, const ngtcp2_path *path, ngtcp2_tstamp ts) { - ngtcp2_pv *pv = conn->pv; ngtcp2_dcid *dcid, *ndcid; ngtcp2_cid cid; size_t i, len; int rv; assert(!ngtcp2_path_eq(&conn->dcid.current.ps.path, path)); - assert(!pv || !ngtcp2_path_eq(&pv->dcid.ps.path, path)); - assert(!pv || !(pv->flags & NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE) || - !ngtcp2_path_eq(&pv->fallback_dcid.ps.path, path)); + assert(!conn->pv || !ngtcp2_path_eq(&conn->pv->dcid.ps.path, path)); + assert(!conn->pv || !(conn->pv->flags & NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE) || + !ngtcp2_path_eq(&conn->pv->fallback_dcid.ps.path, path)); - len = ngtcp2_ringbuf_len(&conn->dcid.bound); + len = ngtcp2_ringbuf_len(&conn->dcid.bound.rb); for (i = 0; i < len; ++i) { - dcid = ngtcp2_ringbuf_get(&conn->dcid.bound, i); + dcid = ngtcp2_ringbuf_get(&conn->dcid.bound.rb, i); if (ngtcp2_path_eq(&dcid->ps.path, path)) { *pdcid = dcid; @@ -3870,41 +4642,128 @@ static int conn_bind_dcid(ngtcp2_conn *conn, ngtcp2_dcid **pdcid, } if (conn->dcid.current.cid.datalen == 0) { - ndcid = ngtcp2_ringbuf_push_back(&conn->dcid.bound); + ndcid = ngtcp2_ringbuf_push_back(&conn->dcid.bound.rb); ngtcp2_cid_zero(&cid); ngtcp2_dcid_init(ndcid, ++conn->dcid.zerolen_seq, &cid, NULL); - ngtcp2_path_copy(&ndcid->ps.path, path); + ngtcp2_dcid_set_path(ndcid, path); *pdcid = ndcid; return 0; } - if (ngtcp2_ringbuf_len(&conn->dcid.unused) == 0) { + if (ngtcp2_ringbuf_len(&conn->dcid.unused.rb) == 0) { return NGTCP2_ERR_CONN_ID_BLOCKED; } - if (ngtcp2_ringbuf_full(&conn->dcid.bound)) { - dcid = ngtcp2_ringbuf_get(&conn->dcid.bound, 0); + if (ngtcp2_ringbuf_full(&conn->dcid.bound.rb)) { + dcid = ngtcp2_ringbuf_get(&conn->dcid.bound.rb, 0); rv = conn_retire_dcid(conn, dcid, ts); if (rv != 0) { return rv; } } - dcid = ngtcp2_ringbuf_get(&conn->dcid.unused, 0); - ndcid = ngtcp2_ringbuf_push_back(&conn->dcid.bound); + dcid = ngtcp2_ringbuf_get(&conn->dcid.unused.rb, 0); + ndcid = ngtcp2_ringbuf_push_back(&conn->dcid.bound.rb); ngtcp2_dcid_copy(ndcid, dcid); - ngtcp2_path_copy(&ndcid->ps.path, path); + ndcid->bound_ts = ts; + ngtcp2_dcid_set_path(ndcid, path); - ngtcp2_ringbuf_pop_front(&conn->dcid.unused); + ngtcp2_ringbuf_pop_front(&conn->dcid.unused.rb); *pdcid = ndcid; return 0; } +static int conn_start_pmtud(ngtcp2_conn *conn) { + int rv; + size_t hard_max_udp_payload_size; + + assert(!conn->local.settings.no_pmtud); + assert(!conn->pmtud); + assert(conn_is_handshake_completed(conn)); + assert(conn->remote.transport_params); + assert(conn->remote.transport_params->max_udp_payload_size >= + NGTCP2_MAX_UDP_PAYLOAD_SIZE); + + hard_max_udp_payload_size = + (size_t)ngtcp2_min(conn->remote.transport_params->max_udp_payload_size, + (uint64_t)conn->local.settings.max_udp_payload_size); + + rv = ngtcp2_pmtud_new(&conn->pmtud, conn->dcid.current.max_udp_payload_size, + hard_max_udp_payload_size, + conn->pktns.tx.last_pkt_num + 1, conn->mem); + if (rv != 0) { + return rv; + } + + if (ngtcp2_pmtud_finished(conn->pmtud)) { + ngtcp2_conn_stop_pmtud(conn); + } + + return 0; +} + +int ngtcp2_conn_start_pmtud(ngtcp2_conn *conn) { + return conn_start_pmtud(conn); +} + +void ngtcp2_conn_stop_pmtud(ngtcp2_conn *conn) { + if (!conn->pmtud) { + return; + } + + ngtcp2_pmtud_del(conn->pmtud); + + conn->pmtud = NULL; +} + +static ngtcp2_ssize conn_write_pmtud_probe(ngtcp2_conn *conn, + ngtcp2_pkt_info *pi, uint8_t *dest, + size_t destlen, ngtcp2_tstamp ts) { + size_t probelen; + ngtcp2_ssize nwrite; + ngtcp2_frame lfr; + + assert(conn->pmtud); + assert(!ngtcp2_pmtud_finished(conn->pmtud)); + + if (!ngtcp2_pmtud_require_probe(conn->pmtud)) { + return 0; + } + + probelen = ngtcp2_pmtud_probelen(conn->pmtud); + if (probelen > destlen) { + return 0; + } + + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_CON, + "sending PMTUD probe packet len=%zu", probelen); + + lfr.type = NGTCP2_FRAME_PING; + + nwrite = ngtcp2_conn_write_single_frame_pkt( + conn, pi, dest, probelen, NGTCP2_PKT_1RTT, + NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING, &conn->dcid.current.cid, &lfr, + NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | + NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING | + NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE, + NULL, ts); + if (nwrite < 0) { + return nwrite; + } + + assert(nwrite); + + ngtcp2_pmtud_probe_sent(conn->pmtud, conn_compute_pto(conn, &conn->pktns), + ts); + + return nwrite; +} + /* * conn_stop_pv stops the path validation which is currently running. * This function does nothing if no path validation is currently being @@ -3948,7 +4807,59 @@ static int conn_stop_pv(ngtcp2_conn *conn, ngtcp2_tstamp ts) { return rv; } -static void conn_reset_congestion_state(ngtcp2_conn *conn); +/* + * conn_abort_pv aborts the current path validation and frees + * resources allocated for it. This function assumes that conn->pv is + * not NULL. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGTCP2_ERR_NOMEM + * Out of memory + * NGTCP2_ERR_CALLBACK_FAILURE + * User-defined callback function failed. + */ +static int conn_abort_pv(ngtcp2_conn *conn, ngtcp2_tstamp ts) { + ngtcp2_pv *pv = conn->pv; + int rv; + + assert(pv); + + if (!(pv->flags & NGTCP2_PV_FLAG_DONT_CARE)) { + rv = conn_call_path_validation(conn, pv, + NGTCP2_PATH_VALIDATION_RESULT_ABORTED); + if (rv != 0) { + return rv; + } + } + + return conn_stop_pv(conn, ts); +} + +static size_t conn_shape_udp_payload(ngtcp2_conn *conn, const ngtcp2_dcid *dcid, + size_t payloadlen) { + if (conn->remote.transport_params && + conn->remote.transport_params->max_udp_payload_size) { + assert(conn->remote.transport_params->max_udp_payload_size >= + NGTCP2_MAX_UDP_PAYLOAD_SIZE); + + payloadlen = + (size_t)ngtcp2_min((uint64_t)payloadlen, + conn->remote.transport_params->max_udp_payload_size); + } + + payloadlen = + ngtcp2_min(payloadlen, conn->local.settings.max_udp_payload_size); + + if (conn->local.settings.no_udp_payload_size_shaping) { + return payloadlen; + } + + return ngtcp2_min(payloadlen, dcid->max_udp_payload_size); +} + +static void conn_reset_congestion_state(ngtcp2_conn *conn, ngtcp2_tstamp ts); /* * conn_on_path_validation_failed is called when path validation @@ -3966,10 +4877,12 @@ static int conn_on_path_validation_failed(ngtcp2_conn *conn, ngtcp2_pv *pv, ngtcp2_tstamp ts) { int rv; - rv = conn_call_path_validation(conn, &pv->dcid.ps.path, - NGTCP2_PATH_VALIDATION_RESULT_FAILURE); - if (rv != 0) { - return rv; + if (!(pv->flags & NGTCP2_PV_FLAG_DONT_CARE)) { + rv = conn_call_path_validation(conn, pv, + NGTCP2_PATH_VALIDATION_RESULT_FAILURE); + if (rv != 0) { + return rv; + } } if (pv->flags & NGTCP2_PV_FLAG_MTU_PROBE) { @@ -3978,45 +4891,12 @@ static int conn_on_path_validation_failed(ngtcp2_conn *conn, ngtcp2_pv *pv, if (pv->flags & NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE) { ngtcp2_dcid_copy(&conn->dcid.current, &pv->fallback_dcid); - conn_reset_congestion_state(conn); + conn_reset_congestion_state(conn, ts); } return conn_stop_pv(conn, ts); } -/* - * dcid_tx_left returns the maximum number of bytes that server is - * allowed to send to an unvalidated path associated to |dcid|. - */ -static size_t dcid_tx_left(ngtcp2_dcid *dcid) { - if (dcid->flags & NGTCP2_DCID_FLAG_PATH_VALIDATED) { - return SIZE_MAX; - } - /* From QUIC spec: Prior to validating the client address, servers - MUST NOT send more than three times as many bytes as the number - of bytes they have received. */ - assert(dcid->bytes_recv * 3 >= dcid->bytes_sent); - - return dcid->bytes_recv * 3 - dcid->bytes_sent; -} - -/* - * conn_server_tx_left returns the maximum number of bytes that server - * is allowed to send to an unvalidated path. - */ -static size_t conn_server_tx_left(ngtcp2_conn *conn, ngtcp2_dcid *dcid) { - assert(conn->server); - - /* If pv->dcid has the current path, use conn->dcid.current. This - is because conn->dcid.current gets update for bytes_recv and - bytes_sent. */ - if (ngtcp2_path_eq(&dcid->ps.path, &conn->dcid.current.ps.path)) { - return dcid_tx_left(&conn->dcid.current); - } - - return dcid_tx_left(dcid); -} - /* * conn_write_path_challenge writes a packet which includes * PATH_CHALLENGE frame into |dest| of length |destlen|. @@ -4034,19 +4914,30 @@ static ngtcp2_ssize conn_write_path_challenge(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, ngtcp2_tstamp ts) { - int rv; ngtcp2_ssize nwrite; ngtcp2_tstamp expiry; ngtcp2_pv *pv = conn->pv; ngtcp2_frame lfr; ngtcp2_duration timeout; uint8_t flags; - size_t tx_left; + uint64_t tx_left; + int rv; if (ngtcp2_pv_validation_timed_out(pv, ts)) { ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_PTV, "path validation was timed out"); - return conn_on_path_validation_failed(conn, pv, ts); + rv = conn_on_path_validation_failed(conn, pv, ts); + if (rv != 0) { + return rv; + } + + /* We might set path to the one which we just failed validate. + Set it to the current path here. */ + if (path) { + ngtcp2_path_copy(path, &conn->dcid.current.ps.path); + } + + return 0; } ngtcp2_pv_handle_entry_expiry(pv, ts); @@ -4055,12 +4946,9 @@ static ngtcp2_ssize conn_write_path_challenge(ngtcp2_conn *conn, return 0; } - assert(conn->callbacks.rand); - rv = conn->callbacks.rand( - lfr.path_challenge.data, sizeof(lfr.path_challenge.data), - &conn->local.settings.rand_ctx, NGTCP2_RAND_USAGE_PATH_CHALLENGE); + rv = conn_call_get_path_challenge_data(conn, lfr.path_challenge.data); if (rv != 0) { - return NGTCP2_ERR_CALLBACK_FAILURE; + return rv; } lfr.type = NGTCP2_FRAME_PATH_CHALLENGE; @@ -4069,16 +4957,18 @@ static ngtcp2_ssize conn_write_path_challenge(ngtcp2_conn *conn, timeout = ngtcp2_max(timeout, 3 * conn->cstat.initial_rtt); expiry = ts + timeout * (1ULL << pv->round); + destlen = ngtcp2_min(destlen, NGTCP2_MAX_UDP_PAYLOAD_SIZE); + if (conn->server) { if (!(pv->dcid.flags & NGTCP2_DCID_FLAG_PATH_VALIDATED)) { tx_left = conn_server_tx_left(conn, &pv->dcid); - destlen = ngtcp2_min(destlen, tx_left); + destlen = (size_t)ngtcp2_min((uint64_t)destlen, tx_left); if (destlen == 0) { return 0; } } - if (destlen < 1200) { + if (destlen < NGTCP2_MAX_UDP_PAYLOAD_SIZE) { flags = NGTCP2_PV_ENTRY_FLAG_UNDERSIZED; } else { flags = NGTCP2_PV_ENTRY_FLAG_NONE; @@ -4090,8 +4980,10 @@ static ngtcp2_ssize conn_write_path_challenge(ngtcp2_conn *conn, ngtcp2_pv_add_entry(pv, lfr.path_challenge.data, expiry, flags, ts); nwrite = ngtcp2_conn_write_single_frame_pkt( - conn, pi, dest, destlen, NGTCP2_PKT_SHORT, &pv->dcid.cid, &lfr, - NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING, &pv->dcid.ps.path, ts); + conn, pi, dest, destlen, NGTCP2_PKT_1RTT, NGTCP2_WRITE_PKT_FLAG_NONE, + &pv->dcid.cid, &lfr, + NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING | NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING, + &pv->dcid.ps.path, ts); if (nwrite <= 0) { return nwrite; } @@ -4131,10 +5023,10 @@ static ngtcp2_ssize conn_write_path_response(ngtcp2_conn *conn, ngtcp2_frame lfr; ngtcp2_ssize nwrite; int rv; - size_t tx_left; + uint64_t tx_left; - for (; ngtcp2_ringbuf_len(&conn->rx.path_challenge);) { - pcent = ngtcp2_ringbuf_get(&conn->rx.path_challenge, 0); + for (; ngtcp2_ringbuf_len(&conn->rx.path_challenge.rb);) { + pcent = ngtcp2_ringbuf_get(&conn->rx.path_challenge.rb, 0); if (ngtcp2_path_eq(&conn->dcid.current.ps.path, &pcent->ps.path)) { /* Send PATH_RESPONSE from conn_write_pkt. */ @@ -4159,7 +5051,7 @@ static ngtcp2_ssize conn_write_path_response(ngtcp2_conn *conn, /* Client does not expect to respond to path validation against unknown path */ - ngtcp2_ringbuf_pop_front(&conn->rx.path_challenge); + ngtcp2_ringbuf_pop_front(&conn->rx.path_challenge.rb); pcent = NULL; } @@ -4181,9 +5073,11 @@ static ngtcp2_ssize conn_write_path_response(ngtcp2_conn *conn, } } + destlen = ngtcp2_min(destlen, NGTCP2_MAX_UDP_PAYLOAD_SIZE); + if (conn->server && !(dcid->flags & NGTCP2_DCID_FLAG_PATH_VALIDATED)) { tx_left = conn_server_tx_left(conn, dcid); - destlen = ngtcp2_min(destlen, tx_left); + destlen = (size_t)ngtcp2_min((uint64_t)destlen, tx_left); if (destlen == 0) { return 0; } @@ -4193,8 +5087,9 @@ static ngtcp2_ssize conn_write_path_response(ngtcp2_conn *conn, memcpy(lfr.path_response.data, pcent->data, sizeof(lfr.path_response.data)); nwrite = ngtcp2_conn_write_single_frame_pkt( - conn, pi, dest, destlen, NGTCP2_PKT_SHORT, &dcid->cid, &lfr, - NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING, &pcent->ps.path, ts); + conn, pi, dest, destlen, NGTCP2_PKT_1RTT, NGTCP2_WRITE_PKT_FLAG_NONE, + &dcid->cid, &lfr, NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING, &pcent->ps.path, + ts); if (nwrite <= 0) { return nwrite; } @@ -4203,21 +5098,23 @@ static ngtcp2_ssize conn_write_path_response(ngtcp2_conn *conn, ngtcp2_path_copy(path, &pcent->ps.path); } - ngtcp2_ringbuf_pop_front(&conn->rx.path_challenge); + ngtcp2_ringbuf_pop_front(&conn->rx.path_challenge.rb); dcid->bytes_sent += (uint64_t)nwrite; return nwrite; } -ngtcp2_ssize ngtcp2_conn_write_pkt(ngtcp2_conn *conn, ngtcp2_path *path, - ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, ngtcp2_tstamp ts) { - return ngtcp2_conn_writev_stream(conn, path, pi, dest, destlen, - /* pdatalen = */ NULL, - NGTCP2_WRITE_STREAM_FLAG_NONE, - /* stream_id = */ -1, - /* datav = */ NULL, /* datavcnt = */ 0, ts); +ngtcp2_ssize ngtcp2_conn_write_pkt_versioned(ngtcp2_conn *conn, + ngtcp2_path *path, + int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, + size_t destlen, ngtcp2_tstamp ts) { + return ngtcp2_conn_writev_stream_versioned( + conn, path, pkt_info_version, pi, dest, destlen, + /* pdatalen = */ NULL, NGTCP2_WRITE_STREAM_FLAG_NONE, + /* stream_id = */ -1, + /* datav = */ NULL, /* datavcnt = */ 0, ts); } /* @@ -4250,6 +5147,12 @@ static int conn_on_version_negotiation(ngtcp2_conn *conn, return NGTCP2_ERR_INVALID_ARGUMENT; } + /* Version Negotiation packet is ignored if client has reacted upon + Version Negotiation packet. */ + if (conn->local.settings.original_version != conn->client_chosen_version) { + return NGTCP2_ERR_INVALID_ARGUMENT; + } + if (payloadlen > sizeof(sv)) { p = ngtcp2_mem_malloc(conn->mem, payloadlen); if (p == NULL) { @@ -4263,29 +5166,24 @@ static int conn_on_version_negotiation(ngtcp2_conn *conn, ngtcp2_log_rx_vn(&conn->log, hd, p, nsv); - for (i = 0; i < nsv; ++i) { - if (p[i] == conn->version) { - ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_PKT, - "ignore Version Negotiation because it contains version " - "selected by client"); + ngtcp2_qlog_version_negotiation_pkt_received(&conn->qlog, hd, p, nsv); - rv = NGTCP2_ERR_INVALID_ARGUMENT; - goto fin; - } - } + if (!ngtcp2_is_reserved_version(conn->local.settings.original_version)) { + for (i = 0; i < nsv; ++i) { + if (p[i] == conn->local.settings.original_version) { + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_PKT, + "ignore Version Negotiation because it contains the " + "original version"); - if (conn->callbacks.recv_version_negotiation) { - rv = conn->callbacks.recv_version_negotiation(conn, hd, p, nsv, - conn->user_data); - if (rv != 0) { - rv = NGTCP2_ERR_CALLBACK_FAILURE; + rv = NGTCP2_ERR_INVALID_ARGUMENT; + goto fin; + } } } - if (rv == 0) { - /* TODO Just move to the terminal state for now in order not to - send CONNECTION_CLOSE frame. */ - conn->state = NGTCP2_CS_DRAINING; + rv = conn_call_recv_version_negotiation(conn, hd, p, nsv); + if (rv != 0) { + goto fin; } fin: @@ -4325,6 +5223,7 @@ int ngtcp2_conn_resched_frames(ngtcp2_conn *conn, ngtcp2_pktns *pktns, ngtcp2_stream *sfr; ngtcp2_strm *strm; int rv; + int streamfrq_empty; if (*pfrc == NULL) { return 0; @@ -4341,12 +5240,13 @@ int ngtcp2_conn_resched_frames(ngtcp2_conn *conn, ngtcp2_pktns *pktns, strm = ngtcp2_conn_find_stream(conn, sfr->stream_id); if (!strm) { - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); break; } + streamfrq_empty = ngtcp2_strm_streamfrq_empty(strm); rv = ngtcp2_strm_streamfrq_push(strm, frc); if (rv != 0) { - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } if (!ngtcp2_strm_is_tx_queued(strm)) { @@ -4356,6 +5256,9 @@ int ngtcp2_conn_resched_frames(ngtcp2_conn *conn, ngtcp2_pktns *pktns, return rv; } } + if (streamfrq_empty) { + ++conn->tx.strmq_nretrans; + } break; case NGTCP2_FRAME_CRYPTO: frc = *pfrc; @@ -4367,7 +5270,7 @@ int ngtcp2_conn_resched_frames(ngtcp2_conn *conn, ngtcp2_pktns *pktns, &frc->fr.crypto.offset, frc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } break; @@ -4401,7 +5304,8 @@ int ngtcp2_conn_resched_frames(ngtcp2_conn *conn, ngtcp2_pktns *pktns, * ODCID does not match; or Token is empty. */ static int conn_on_retry(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, - size_t hdpktlen, const uint8_t *pkt, size_t pktlen) { + size_t hdpktlen, const uint8_t *pkt, size_t pktlen, + ngtcp2_tstamp ts) { int rv; ngtcp2_pkt_retry retry; ngtcp2_pktns *in_pktns = conn->in_pktns; @@ -4424,7 +5328,7 @@ static int conn_on_retry(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, retry.odcid = conn->dcid.current.cid; rv = ngtcp2_pkt_verify_retry_tag( - conn->version, &retry, pkt, pktlen, conn->callbacks.encrypt, + conn->client_chosen_version, &retry, pkt, pktlen, conn->callbacks.encrypt, &conn->crypto.retry_aead, &conn->crypto.retry_aead_ctx); if (rv != 0) { ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_PKT, @@ -4444,7 +5348,7 @@ static int conn_on_retry(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, return 0; } - ngtcp2_qlog_retry_pkt_received(&conn->qlog, hd); + ngtcp2_qlog_retry_pkt_received(&conn->qlog, hd, &retry); /* DCID must be updated before invoking callback because client generates new initial keys there. */ @@ -4453,11 +5357,9 @@ static int conn_on_retry(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, conn->flags |= NGTCP2_CONN_FLAG_RECV_RETRY; - assert(conn->callbacks.recv_retry); - - rv = conn->callbacks.recv_retry(conn, hd, conn->user_data); + rv = conn_call_recv_retry(conn, hd); if (rv != 0) { - return NGTCP2_ERR_CALLBACK_FAILURE; + return rv; } conn->state = NGTCP2_CS_CLIENT_INITIAL; @@ -4489,7 +5391,7 @@ static int conn_on_retry(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, ngtcp2_cpymem(token->base, retry.token.base, retry.token.len); reset_conn_stat_recovery(&conn->cstat); - conn_reset_congestion_state(conn); + conn_reset_congestion_state(conn, ts); conn_reset_ecn_validation_state(conn); return 0; @@ -4497,13 +5399,7 @@ static int conn_on_retry(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, int ngtcp2_conn_detect_lost_pkt(ngtcp2_conn *conn, ngtcp2_pktns *pktns, ngtcp2_conn_stat *cstat, ngtcp2_tstamp ts) { - ngtcp2_duration pto = conn_compute_pto(conn, pktns); - int rv = ngtcp2_rtb_detect_lost_pkt(&pktns->rtb, conn, pktns, cstat, pto, ts); - if (rv != 0) { - return rv; - } - - return 0; + return ngtcp2_rtb_detect_lost_pkt(&pktns->rtb, conn, pktns, cstat, ts); } /* @@ -4547,7 +5443,7 @@ static int conn_recv_ack(ngtcp2_conn *conn, ngtcp2_pktns *pktns, ngtcp2_ack *fr, if (num_acked < 0) { /* TODO assert this */ assert(ngtcp2_err_is_fatal((int)num_acked)); - ngtcp2_frame_chain_list_del(frc, conn->mem); + ngtcp2_frame_chain_list_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return (int)num_acked; } @@ -4555,11 +5451,6 @@ static int conn_recv_ack(ngtcp2_conn *conn, ngtcp2_pktns *pktns, ngtcp2_ack *fr, return 0; } - rv = ngtcp2_conn_detect_lost_pkt(conn, pktns, &conn->cstat, ts); - if (rv != 0) { - return rv; - } - pktns->rtb.probe_pkt_left = 0; if (cstat->pto_count && @@ -4644,13 +5535,18 @@ static int conn_recv_max_stream_data(ngtcp2_conn *conn, return 0; } - strm = ngtcp2_mem_malloc(conn->mem, sizeof(ngtcp2_strm)); + strm = ngtcp2_objalloc_strm_get(&conn->strm_objalloc); if (strm == NULL) { return NGTCP2_ERR_NOMEM; } rv = ngtcp2_conn_init_stream(conn, strm, fr->stream_id, NULL); if (rv != 0) { - ngtcp2_mem_free(conn->mem, strm); + ngtcp2_objalloc_strm_release(&conn->strm_objalloc, strm); + return rv; + } + + rv = conn_call_stream_open(conn, strm); + if (rv != 0) { return rv; } } @@ -4769,22 +5665,22 @@ static int conn_ensure_decrypt_buffer(ngtcp2_conn *conn, size_t n) { /* * decrypt_pkt decrypts the data pointed by |payload| whose length is * |payloadlen|, and writes plaintext data to the buffer pointed by - * |dest|. The buffer pointed by |ad| is the Additional Data, and its - * length is |adlen|. |pkt_num| is used to create a nonce. |ckm| is - * the cryptographic key, and iv to use. |decrypt| is a callback - * function which actually decrypts a packet. + * |dest|. The buffer pointed by |aad| is the Additional + * Authenticated Data, and its length is |aadlen|. |pkt_num| is used + * to create a nonce. |ckm| is the cryptographic key, and iv to use. + * |decrypt| is a callback function which actually decrypts a packet. * * This function returns the number of bytes written in |dest| if it * succeeds, or one of the following negative error codes: * * NGTCP2_ERR_CALLBACK_FAILURE * User callback failed. - * NGTCP2_ERR_TLS_DECRYPT - * TLS backend failed to decrypt data. + * NGTCP2_ERR_DECRYPT + * Failed to decrypt a packet. */ static ngtcp2_ssize decrypt_pkt(uint8_t *dest, const ngtcp2_crypto_aead *aead, const uint8_t *payload, size_t payloadlen, - const uint8_t *ad, size_t adlen, + const uint8_t *aad, size_t aadlen, int64_t pkt_num, ngtcp2_crypto_km *ckm, ngtcp2_decrypt decrypt) { /* TODO nonce is limited to 64 bytes. */ @@ -4796,10 +5692,10 @@ static ngtcp2_ssize decrypt_pkt(uint8_t *dest, const ngtcp2_crypto_aead *aead, ngtcp2_crypto_create_nonce(nonce, ckm->iv.base, ckm->iv.len, pkt_num); rv = decrypt(dest, aead, &ckm->aead_ctx, payload, payloadlen, nonce, - ckm->iv.len, ad, adlen); + ckm->iv.len, aad, aadlen); if (rv != 0) { - if (rv == NGTCP2_ERR_TLS_DECRYPT) { + if (rv == NGTCP2_ERR_DECRYPT) { return rv; } return NGTCP2_ERR_CALLBACK_FAILURE; @@ -4825,20 +5721,17 @@ static ngtcp2_ssize decrypt_pkt(uint8_t *dest, const ngtcp2_crypto_aead *aead, * User-defined callback function failed; or it does not return * expected result. */ -static ngtcp2_ssize decrypt_hp(ngtcp2_pkt_hd *hd, uint8_t *dest, - const ngtcp2_crypto_cipher *hp, - const uint8_t *pkt, size_t pktlen, - size_t pkt_num_offset, ngtcp2_crypto_km *ckm, - const ngtcp2_crypto_cipher_ctx *hp_ctx, - ngtcp2_hp_mask hp_mask) { +static ngtcp2_ssize +decrypt_hp(ngtcp2_pkt_hd *hd, uint8_t *dest, const ngtcp2_crypto_cipher *hp, + const uint8_t *pkt, size_t pktlen, size_t pkt_num_offset, + const ngtcp2_crypto_cipher_ctx *hp_ctx, ngtcp2_hp_mask hp_mask) { size_t sample_offset; uint8_t *p = dest; - uint8_t mask[NGTCP2_HP_MASKLEN]; + uint8_t mask[NGTCP2_HP_SAMPLELEN]; size_t i; int rv; assert(hp_mask); - assert(ckm); if (pkt_num_offset + 4 + NGTCP2_HP_SAMPLELEN > pktlen) { return NGTCP2_ERR_PROTO; @@ -4921,40 +5814,65 @@ static int conn_emit_pending_crypto_data(ngtcp2_conn *conn, * conn_recv_connection_close is called when CONNECTION_CLOSE or * APPLICATION_CLOSE frame is received. */ -static void conn_recv_connection_close(ngtcp2_conn *conn, - ngtcp2_connection_close *fr) { +static int conn_recv_connection_close(ngtcp2_conn *conn, + ngtcp2_connection_close *fr) { + ngtcp2_connection_close_error *ccerr = &conn->rx.ccerr; + conn->state = NGTCP2_CS_DRAINING; if (fr->type == NGTCP2_FRAME_CONNECTION_CLOSE) { - conn->rx.ccec.type = NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT; + ccerr->type = NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT; } else { - conn->rx.ccec.type = NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION; + ccerr->type = NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION; + } + ccerr->error_code = fr->error_code; + ccerr->frame_type = fr->frame_type; + + if (!fr->reasonlen) { + ccerr->reasonlen = 0; + + return 0; + } + + if (ccerr->reason == NULL) { + ccerr->reason = ngtcp2_mem_malloc( + conn->mem, NGTCP2_CONNECTION_CLOSE_ERROR_MAX_REASONLEN); + if (ccerr->reason == NULL) { + return NGTCP2_ERR_NOMEM; + } } - conn->rx.ccec.error_code = fr->error_code; + + ccerr->reasonlen = + ngtcp2_min(fr->reasonlen, NGTCP2_CONNECTION_CLOSE_ERROR_MAX_REASONLEN); + ngtcp2_cpymem(ccerr->reason, fr->reason, ccerr->reasonlen); + + return 0; } static void conn_recv_path_challenge(ngtcp2_conn *conn, const ngtcp2_path *path, ngtcp2_path_challenge *fr) { ngtcp2_path_challenge_entry *ent; - /* client only responds to PATH_CHALLENGE from the current path. */ - if (!conn->server && !ngtcp2_path_eq(&conn->dcid.current.ps.path, path)) { - ngtcp2_log_info( - &conn->log, NGTCP2_LOG_EVENT_CON, - "discard PATH_CHALLENGE from the path which is not current"); + /* client only responds to PATH_CHALLENGE from the current path or + path which client is migrating to. */ + if (!conn->server && !ngtcp2_path_eq(&conn->dcid.current.ps.path, path) && + (!conn->pv || !ngtcp2_path_eq(&conn->pv->dcid.ps.path, path))) { + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_CON, + "discard PATH_CHALLENGE from the path which is not current " + "or endpoint is migrating to"); return; } - ent = ngtcp2_ringbuf_push_front(&conn->rx.path_challenge); + ent = ngtcp2_ringbuf_push_front(&conn->rx.path_challenge.rb); ngtcp2_path_challenge_entry_init(ent, path, fr->data); } /* * conn_reset_congestion_state resets congestion state. */ -static void conn_reset_congestion_state(ngtcp2_conn *conn) { +static void conn_reset_congestion_state(ngtcp2_conn *conn, ngtcp2_tstamp ts) { conn_reset_conn_stat_cc(conn, &conn->cstat); - conn->cc.reset(&conn->cc); + conn->cc.reset(&conn->cc, &conn->cstat, ts); if (conn->hs_pktns) { ngtcp2_rtb_reset_cc_state(&conn->hs_pktns->rtb, @@ -4962,6 +5880,8 @@ static void conn_reset_congestion_state(ngtcp2_conn *conn) { } ngtcp2_rtb_reset_cc_state(&conn->pktns.rtb, conn->pktns.tx.last_pkt_num + 1); ngtcp2_rst_init(&conn->rst); + + conn->tx.pacing.next_ts = UINT64_MAX; } static int conn_recv_path_response(ngtcp2_conn *conn, ngtcp2_path_response *fr, @@ -4977,9 +5897,8 @@ static int conn_recv_path_response(ngtcp2_conn *conn, ngtcp2_path_response *fr, rv = ngtcp2_pv_validate(pv, &ent_flags, fr->data); if (rv != 0) { - if (rv == NGTCP2_ERR_PATH_VALIDATION_FAILED) { - return conn_on_path_validation_failed(conn, pv, ts); - } + assert(!ngtcp2_err_is_fatal(rv)); + return 0; } @@ -4990,11 +5909,11 @@ static int conn_recv_path_response(ngtcp2_conn *conn, ngtcp2_path_response *fr, rv = conn_retire_dcid(conn, &conn->dcid.current, ts); if (rv != 0) { - goto fail; + return rv; } ngtcp2_dcid_copy(&conn->dcid.current, &pv->dcid); } - conn_reset_congestion_state(conn); + conn_reset_congestion_state(conn, ts); conn_reset_ecn_validation_state(conn); } @@ -5002,10 +5921,21 @@ static int conn_recv_path_response(ngtcp2_conn *conn, ngtcp2_path_response *fr, conn->dcid.current.flags |= NGTCP2_DCID_FLAG_PATH_VALIDATED; } - rv = conn_call_path_validation(conn, &pv->dcid.ps.path, + rv = conn_call_path_validation(conn, pv, NGTCP2_PATH_VALIDATION_RESULT_SUCCESS); if (rv != 0) { - goto fail; + return rv; + } + + if (!conn->local.settings.no_pmtud) { + ngtcp2_conn_stop_pmtud(conn); + + if (!(pv->flags & NGTCP2_PV_ENTRY_FLAG_UNDERSIZED)) { + rv = conn_start_pmtud(conn); + if (rv != 0) { + return rv; + } + } } } @@ -5022,7 +5952,7 @@ static int conn_recv_path_response(ngtcp2_conn *conn, ngtcp2_path_response *fr, NGTCP2_PV_FLAG_MTU_PROBE, &conn->log, conn->mem); if (rv != 0) { - goto fail; + return rv; } npv->dcid.flags |= NGTCP2_DCID_FLAG_PATH_VALIDATED; @@ -5032,7 +5962,7 @@ static int conn_recv_path_response(ngtcp2_conn *conn, ngtcp2_path_response *fr, rv = ngtcp2_pv_new(&npv, &pv->fallback_dcid, timeout, NGTCP2_PV_FLAG_DONT_CARE, &conn->log, conn->mem); if (rv != 0) { - goto fail; + return rv; } } @@ -5051,7 +5981,6 @@ static int conn_recv_path_response(ngtcp2_conn *conn, ngtcp2_path_response *fr, return 0; } -fail: return conn_stop_pv(conn, ts); } @@ -5141,6 +6070,33 @@ static void pktns_increase_ecn_counts(ngtcp2_pktns *pktns, } } +/* + * vneg_other_versions_includes returns nonzero if |other_versions| of + * length |other_versionslen| includes |version|. |other_versions| is + * the wire image of other_versions field of version_information + * transport parameter, and each version is encoded in network byte + * order. + */ +static int vneg_other_versions_includes(const uint8_t *other_versions, + size_t other_versionslen, + uint32_t version) { + size_t i; + + assert(!(other_versionslen & 0x3)); + + if (other_versionslen == 0) { + return 0; + } + + for (i = 0; i < other_versionslen; i += sizeof(uint32_t)) { + if (version == ngtcp2_get_uint32(&other_versions[i])) { + return 1; + } + } + + return 0; +} + static int conn_recv_crypto(ngtcp2_conn *conn, ngtcp2_crypto_level crypto_level, ngtcp2_strm *strm, const ngtcp2_crypto *fr); @@ -5217,13 +6173,17 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, if (!(pkt[0] & NGTCP2_HEADER_FORM_BIT)) { if (conn->state == NGTCP2_CS_SERVER_INITIAL) { - /* Ignore Short packet unless server's first Handshake packet - has been transmitted. */ + /* Ignore 1RTT packet unless server's first Handshake packet has + been transmitted. */ return (ngtcp2_ssize)pktlen; } + if (conn->pktns.crypto.rx.ckm) { + return 0; + } + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_CON, - "buffering Short packet len=%zu", pktlen); + "buffering 1RTT packet len=%zu", pktlen); rv = conn_buffer_pkt(conn, &conn->pktns, path, pi, pkt, pktlen, dgramlen, ts); @@ -5239,8 +6199,7 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, return NGTCP2_ERR_DISCARD_PKT; } - switch (hd.type) { - case NGTCP2_PKT_VERSION_NEGOTIATION: + if (hd.type == NGTCP2_PKT_VERSION_NEGOTIATION) { hdpktlen = (size_t)nread; ngtcp2_log_rx_pkt_hd(&conn->log, &hd); @@ -5276,7 +6235,7 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, return NGTCP2_ERR_DISCARD_PKT; } return NGTCP2_ERR_RECV_VERSION_NEGOTIATION; - case NGTCP2_PKT_RETRY: + } else if (hd.type == NGTCP2_PKT_RETRY) { hdpktlen = (size_t)nread; ngtcp2_log_rx_pkt_hd(&conn->log, &hd); @@ -5291,7 +6250,11 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, return NGTCP2_ERR_DISCARD_PKT; } - rv = conn_on_retry(conn, &hd, hdpktlen, pkt, pktlen); + if (conn->client_chosen_version != hd.version) { + return NGTCP2_ERR_DISCARD_PKT; + } + + rv = conn_on_retry(conn, &hd, hdpktlen, pkt, pktlen, ts); if (rv != 0) { if (ngtcp2_err_is_fatal(rv)) { return rv; @@ -5307,7 +6270,18 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, pktlen = (size_t)nread + hd.len; - if (conn->version != hd.version) { + if (!ngtcp2_is_supported_version(hd.version)) { + return NGTCP2_ERR_DISCARD_PKT; + } + + if (conn->server) { + if (hd.version != conn->client_chosen_version && + (!conn->negotiated_version || hd.version != conn->negotiated_version)) { + return NGTCP2_ERR_DISCARD_PKT; + } + } else if (hd.version != conn->client_chosen_version && + conn->negotiated_version && + hd.version != conn->negotiated_version) { return NGTCP2_ERR_DISCARD_PKT; } @@ -5326,6 +6300,11 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, if (!conn->server) { return NGTCP2_ERR_DISCARD_PKT; } + + if (hd.version != conn->client_chosen_version) { + return NGTCP2_ERR_DISCARD_PKT; + } + if (conn->flags & NGTCP2_CONN_FLAG_CONN_ID_NEGOTIATED) { if (conn->early.ckm) { ngtcp2_ssize nread2; @@ -5364,6 +6343,14 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, assert(conn->in_pktns); if (conn->server) { + if (dgramlen < NGTCP2_MAX_UDP_PAYLOAD_SIZE) { + ngtcp2_log_info( + &conn->log, NGTCP2_LOG_EVENT_PKT, + "Initial packet was ignored because it is included in UDP datagram " + "less than %zu bytes: %zu bytes", + NGTCP2_MAX_UDP_PAYLOAD_SIZE, dgramlen); + return NGTCP2_ERR_DISCARD_PKT; + } if (conn->local.settings.token.len) { rv = verify_token(&conn->local.settings.token, &hd); if (rv != 0) { @@ -5384,18 +6371,55 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, return rv; } } - } else if (hd.token.len != 0) { - ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_PKT, - "packet was ignored because token is not empty"); - return NGTCP2_ERR_DISCARD_PKT; + } else { + if (hd.token.len != 0) { + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_PKT, + "packet was ignored because token is not empty"); + return NGTCP2_ERR_DISCARD_PKT; + } + + if (hd.version != conn->client_chosen_version && + !conn->negotiated_version && conn->vneg.version != hd.version) { + if (!vneg_other_versions_includes(conn->vneg.other_versions, + conn->vneg.other_versionslen, + hd.version)) { + return NGTCP2_ERR_DISCARD_PKT; + } + + /* Install new Initial keys using QUIC version = hd.version */ + rv = conn_call_version_negotiation( + conn, hd.version, + (conn->flags & NGTCP2_CONN_FLAG_RECV_RETRY) + ? &conn->dcid.current.cid + : &conn->rcid); + if (rv != 0) { + return rv; + } + + assert(conn->vneg.version == hd.version); + } } pktns = conn->in_pktns; crypto = &pktns->crypto.strm; crypto_level = NGTCP2_CRYPTO_LEVEL_INITIAL; + if (hd.version == conn->client_chosen_version) { + ckm = pktns->crypto.rx.ckm; + hp_ctx = &pktns->crypto.rx.hp_ctx; + } else { + assert(conn->vneg.version == hd.version); + + ckm = conn->vneg.rx.ckm; + hp_ctx = &conn->vneg.rx.hp_ctx; + } + break; case NGTCP2_PKT_HANDSHAKE: + if (hd.version != conn->negotiated_version) { + return NGTCP2_ERR_DISCARD_PKT; + } + if (!conn->hs_pktns->crypto.rx.ckm) { if (conn->server) { ngtcp2_log_info( @@ -5418,6 +6442,8 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, pktns = conn->hs_pktns; crypto = &pktns->crypto.strm; crypto_level = NGTCP2_CRYPTO_LEVEL_HANDSHAKE; + ckm = pktns->crypto.rx.ckm; + hp_ctx = &pktns->crypto.rx.hp_ctx; break; default: @@ -5431,8 +6457,6 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, decrypt = conn->callbacks.decrypt; aead = &pktns->crypto.ctx.aead; hp = &pktns->crypto.ctx.hp; - ckm = pktns->crypto.rx.ckm; - hp_ctx = &pktns->crypto.rx.hp_ctx; assert(ckm); assert(hp_mask); @@ -5444,7 +6468,7 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, } nwrite = decrypt_hp(&hd, conn->crypto.decrypt_hp_buf.base, hp, pkt, pktlen, - (size_t)nread, ckm, hp_ctx, hp_mask); + (size_t)nread, hp_ctx, hp_mask); if (nwrite < 0) { if (ngtcp2_err_is_fatal((int)nwrite)) { return nwrite; @@ -5505,6 +6529,15 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, return NGTCP2_ERR_PROTO; } + if (!conn->server && hd.version != conn->client_chosen_version && + !conn->negotiated_version) { + conn->negotiated_version = hd.version; + + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_CON, + "the negotiated version is 0x%08x", + conn->negotiated_version); + } + payload = conn->crypto.decrypt_buf.base; payloadlen = (size_t)nwrite; @@ -5589,6 +6622,15 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, case NGTCP2_FRAME_PADDING: break; case NGTCP2_FRAME_CRYPTO: + if (!conn->server && !conn->negotiated_version && + ngtcp2_vec_len(fr->crypto.data, fr->crypto.datacnt)) { + conn->negotiated_version = hd.version; + + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_CON, + "the negotiated version is 0x%08x", + conn->negotiated_version); + } + rv = conn_recv_crypto(conn, crypto_level, crypto, &fr->crypto); if (rv != 0) { return rv; @@ -5596,7 +6638,10 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, require_ack = 1; break; case NGTCP2_FRAME_CONNECTION_CLOSE: - conn_recv_connection_close(conn, &fr->connection_close); + rv = conn_recv_connection_close(conn, &fr->connection_close); + if (rv != 0) { + return rv; + } break; case NGTCP2_FRAME_PING: require_ack = 1; @@ -5645,21 +6690,37 @@ conn_recv_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, : (ngtcp2_ssize)pktlen; } +static int is_unrecoverable_error(int liberr) { + switch (liberr) { + case NGTCP2_ERR_CRYPTO: + case NGTCP2_ERR_REQUIRED_TRANSPORT_PARAM: + case NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM: + case NGTCP2_ERR_TRANSPORT_PARAM: + case NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE: + return 1; + } + + return 0; +} + /* * conn_recv_handshake_cpkt processes compound packet during * handshake. The buffer pointed by |pkt| might contain multiple - * packets. The Short packet must be the last one because it does not + * packets. The 1RTT packet must be the last one because it does not * have payload length field. * * This function returns the same error code returned by * conn_recv_handshake_pkt. */ -static int conn_recv_handshake_cpkt(ngtcp2_conn *conn, const ngtcp2_path *path, - const ngtcp2_pkt_info *pi, - const uint8_t *pkt, size_t pktlen, - ngtcp2_tstamp ts) { +static ngtcp2_ssize conn_recv_handshake_cpkt(ngtcp2_conn *conn, + const ngtcp2_path *path, + const ngtcp2_pkt_info *pi, + const uint8_t *pkt, size_t pktlen, + ngtcp2_tstamp ts) { ngtcp2_ssize nread; size_t dgramlen = pktlen; + const uint8_t *origpkt = pkt; + uint32_t version; if (ngtcp2_path_eq(&conn->dcid.current.ps.path, path)) { conn->dcid.current.bytes_recv += dgramlen; @@ -5670,53 +6731,55 @@ static int conn_recv_handshake_cpkt(ngtcp2_conn *conn, const ngtcp2_path *path, conn_recv_handshake_pkt(conn, path, pi, pkt, pktlen, dgramlen, ts, ts); if (nread < 0) { if (ngtcp2_err_is_fatal((int)nread)) { - return (int)nread; + return nread; } if (nread == NGTCP2_ERR_DRAINING) { return NGTCP2_ERR_DRAINING; } - if ((pkt[0] & NGTCP2_HEADER_FORM_BIT) && - /* Not a Version Negotiation packet */ - pktlen > 4 && ngtcp2_get_uint32(&pkt[1]) > 0 && - ngtcp2_pkt_get_type_long(pkt[0]) == NGTCP2_PKT_INITIAL) { - if (conn->server) { - /* If server discards first Initial, then drop connection - state. This is because SCID in packet might be corrupted - and the current connection state might wrongly discard - valid packet and prevent the handshake from - completing. */ - if (conn->in_pktns && conn->in_pktns->rx.max_pkt_num == -1) { - /* If this is crypto related error, then return normally - in order to send CONNECTION_CLOSE with TLS alert (e.g., - no_application_protocol). */ - switch (nread) { - case NGTCP2_ERR_CRYPTO: - case NGTCP2_ERR_REQUIRED_TRANSPORT_PARAM: - case NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM: - case NGTCP2_ERR_TRANSPORT_PARAM: - return (int)nread; + if ((pkt[0] & NGTCP2_HEADER_FORM_BIT) && pktlen > 4) { + /* Not a Version Negotiation packet */ + version = ngtcp2_get_uint32(&pkt[1]); + if (ngtcp2_pkt_get_type_long(version, pkt[0]) == NGTCP2_PKT_INITIAL) { + if (conn->server) { + if (is_unrecoverable_error((int)nread)) { + /* If server gets crypto error from TLS stack, it is + unrecoverable, therefore drop connection. */ + return nread; + } + + /* If server discards first Initial, then drop connection + state. This is because SCID in packet might be corrupted + and the current connection state might wrongly discard + valid packet and prevent the handshake from + completing. */ + if (conn->in_pktns && conn->in_pktns->rx.max_pkt_num == -1) { + return NGTCP2_ERR_DROP_CONN; } - return NGTCP2_ERR_DROP_CONN; + return (ngtcp2_ssize)dgramlen; } - return 0; - } - /* client */ - if (nread == NGTCP2_ERR_CRYPTO) { - /* If client gets crypto error from TLS stack, it is - unrecoverable, therefore drop connection. */ - return (int)nread; + /* client */ + if (is_unrecoverable_error((int)nread)) { + /* If client gets crypto error from TLS stack, it is + unrecoverable, therefore drop connection. */ + return nread; + } + return (ngtcp2_ssize)dgramlen; } - return 0; } if (nread == NGTCP2_ERR_DISCARD_PKT) { - return 0; + return (ngtcp2_ssize)dgramlen; } - return (int)nread; + return nread; + } + + if (nread == 0) { + assert(!(pkt[0] & NGTCP2_HEADER_FORM_BIT)); + return pkt - origpkt; } assert(pktlen >= (size_t)nread); @@ -5727,7 +6790,7 @@ static int conn_recv_handshake_cpkt(ngtcp2_conn *conn, const ngtcp2_path *path, "read packet %td left %zu", nread, pktlen); } - return 0; + return (ngtcp2_ssize)dgramlen; } int ngtcp2_conn_init_stream(ngtcp2_conn *conn, ngtcp2_strm *strm, @@ -5737,45 +6800,39 @@ int ngtcp2_conn_init_stream(ngtcp2_conn *conn, ngtcp2_strm *strm, uint64_t max_tx_offset; int local_stream = conn_local_stream(conn, stream_id); + assert(conn->remote.transport_params); + if (bidi_stream(stream_id)) { if (local_stream) { max_rx_offset = conn->local.transport_params.initial_max_stream_data_bidi_local; max_tx_offset = - conn->remote.transport_params.initial_max_stream_data_bidi_remote; + conn->remote.transport_params->initial_max_stream_data_bidi_remote; } else { max_rx_offset = conn->local.transport_params.initial_max_stream_data_bidi_remote; max_tx_offset = - conn->remote.transport_params.initial_max_stream_data_bidi_local; + conn->remote.transport_params->initial_max_stream_data_bidi_local; } } else if (local_stream) { max_rx_offset = 0; - max_tx_offset = conn->remote.transport_params.initial_max_stream_data_uni; + max_tx_offset = conn->remote.transport_params->initial_max_stream_data_uni; } else { max_rx_offset = conn->local.transport_params.initial_max_stream_data_uni; max_tx_offset = 0; } - rv = ngtcp2_strm_init(strm, stream_id, NGTCP2_STRM_FLAG_NONE, max_rx_offset, - max_tx_offset, stream_user_data, conn->mem); - if (rv != 0) { - return rv; - } + ngtcp2_strm_init(strm, stream_id, NGTCP2_STRM_FLAG_NONE, max_rx_offset, + max_tx_offset, stream_user_data, &conn->frc_objalloc, + conn->mem); - rv = ngtcp2_map_insert(&conn->strms, &strm->me); + rv = ngtcp2_map_insert(&conn->strms, (ngtcp2_map_key_type)strm->stream_id, + strm); if (rv != 0) { assert(rv != NGTCP2_ERR_INVALID_ARGUMENT); goto fail; } - if (!conn_local_stream(conn, stream_id)) { - rv = conn_call_stream_open(conn, strm); - if (rv != 0) { - goto fail; - } - } - return 0; fail: @@ -5806,7 +6863,7 @@ static int conn_emit_pending_stream_data(ngtcp2_conn *conn, ngtcp2_strm *strm, int rv; uint64_t offset; uint32_t sdflags; - int handshake_completed = conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED; + int handshake_completed = conn_is_handshake_completed(conn); if (!strm->rx.rob) { return 0; @@ -5816,7 +6873,7 @@ static int conn_emit_pending_stream_data(ngtcp2_conn *conn, ngtcp2_strm *strm, /* Stop calling callback if application has called ngtcp2_conn_shutdown_stream_read() inside the callback. Because it doubly counts connection window. */ - if (strm->flags & (NGTCP2_STRM_FLAG_STOP_SENDING)) { + if (strm->flags & NGTCP2_STRM_FLAG_STOP_SENDING) { return 0; } @@ -5987,7 +7044,7 @@ static int conn_recv_stream(ngtcp2_conn *conn, const ngtcp2_stream *fr) { uint64_t rx_offset, fr_end_offset; int local_stream; int bidi; - size_t datalen = ngtcp2_vec_len(fr->data, fr->datacnt); + uint64_t datalen = ngtcp2_vec_len(fr->data, fr->datacnt); uint32_t sdflags = NGTCP2_STREAM_DATA_FLAG_NONE; local_stream = conn_local_stream(conn, fr->stream_id); @@ -6038,16 +7095,22 @@ static int conn_recv_stream(ngtcp2_conn *conn, const ngtcp2_stream *fr) { return 0; } - strm = ngtcp2_mem_malloc(conn->mem, sizeof(ngtcp2_strm)); + strm = ngtcp2_objalloc_strm_get(&conn->strm_objalloc); if (strm == NULL) { return NGTCP2_ERR_NOMEM; } /* TODO Perhaps, call new_stream callback? */ rv = ngtcp2_conn_init_stream(conn, strm, fr->stream_id, NULL); if (rv != 0) { - ngtcp2_mem_free(conn->mem, strm); + ngtcp2_objalloc_strm_release(&conn->strm_objalloc, strm); + return rv; + } + + rv = conn_call_stream_open(conn, strm); + if (rv != 0) { return rv; } + if (!bidi) { ngtcp2_strm_shutdown(strm, NGTCP2_STRM_FLAG_SHUT_WR); } @@ -6081,8 +7144,7 @@ static int conn_recv_stream(ngtcp2_conn *conn, const ngtcp2_stream *fr) { return NGTCP2_ERR_FINAL_SIZE; } - if (strm->flags & - (NGTCP2_STRM_FLAG_STOP_SENDING | NGTCP2_STRM_FLAG_RECV_RST)) { + if (strm->flags & NGTCP2_STRM_FLAG_RECV_RST) { return 0; } @@ -6095,11 +7157,6 @@ static int conn_recv_stream(ngtcp2_conn *conn, const ngtcp2_stream *fr) { strm->rx.last_offset = fr_end_offset; ngtcp2_strm_shutdown(strm, NGTCP2_STRM_FLAG_SHUT_RD); - - if (strm->flags & NGTCP2_STRM_FLAG_STOP_SENDING) { - return ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm, - strm->app_error_code); - } } } else { if ((strm->flags & NGTCP2_STRM_FLAG_SHUT_RD) && @@ -6113,8 +7170,7 @@ static int conn_recv_stream(ngtcp2_conn *conn, const ngtcp2_stream *fr) { return 0; } - if (strm->flags & - (NGTCP2_STRM_FLAG_STOP_SENDING | NGTCP2_STRM_FLAG_RECV_RST)) { + if (strm->flags & NGTCP2_STRM_FLAG_RECV_RST) { return 0; } } @@ -6139,6 +7195,10 @@ static int conn_recv_stream(ngtcp2_conn *conn, const ngtcp2_stream *fr) { datalen = 0; } + if (strm->flags & NGTCP2_STRM_FLAG_STOP_SENDING) { + return ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm); + } + fin = (strm->flags & NGTCP2_STRM_FLAG_SHUT_RD) && rx_offset == strm->rx.last_offset; @@ -6146,11 +7206,11 @@ static int conn_recv_stream(ngtcp2_conn *conn, const ngtcp2_stream *fr) { if (fin) { sdflags |= NGTCP2_STREAM_DATA_FLAG_FIN; } - if (!(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED)) { + if (!conn_is_handshake_completed(conn)) { sdflags |= NGTCP2_STREAM_DATA_FLAG_EARLY; } rv = conn_call_recv_stream_data(conn, strm, sdflags, offset, data, - datalen); + (size_t)datalen); if (rv != 0) { return rv; } @@ -6167,7 +7227,7 @@ static int conn_recv_stream(ngtcp2_conn *conn, const ngtcp2_stream *fr) { return rv; } } - return ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm, NGTCP2_NO_ERROR); + return ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm); } /* @@ -6186,7 +7246,7 @@ static int conn_reset_stream(ngtcp2_conn *conn, ngtcp2_strm *strm, ngtcp2_frame_chain *frc; ngtcp2_pktns *pktns = &conn->pktns; - rv = ngtcp2_frame_chain_new(&frc, conn->mem); + rv = ngtcp2_frame_chain_objalloc_new(&frc, &conn->frc_objalloc); if (rv != 0) { return rv; } @@ -6219,7 +7279,7 @@ static int conn_stop_sending(ngtcp2_conn *conn, ngtcp2_strm *strm, ngtcp2_frame_chain *frc; ngtcp2_pktns *pktns = &conn->pktns; - rv = ngtcp2_frame_chain_new(&frc, conn->mem); + rv = ngtcp2_frame_chain_objalloc_new(&frc, &conn->frc_objalloc); if (rv != 0) { return rv; } @@ -6367,26 +7427,31 @@ static int conn_recv_reset_stream(ngtcp2_conn *conn, return NGTCP2_ERR_FINAL_SIZE; } + if (strm->flags & NGTCP2_STRM_FLAG_RECV_RST) { + return 0; + } + + if (strm->rx.max_offset < fr->final_size) { + return NGTCP2_ERR_FLOW_CONTROL; + } + datalen = fr->final_size - strm->rx.last_offset; - if (strm->rx.max_offset < fr->final_size || - conn_max_data_violated(conn, datalen)) { + if (conn_max_data_violated(conn, datalen)) { return NGTCP2_ERR_FLOW_CONTROL; } - if (!(strm->flags & NGTCP2_STRM_FLAG_RECV_RST)) { - rv = conn_call_stream_reset(conn, fr->stream_id, fr->final_size, - fr->app_error_code, strm->stream_user_data); - if (rv != 0) { - return rv; - } + rv = conn_call_stream_reset(conn, fr->stream_id, fr->final_size, + fr->app_error_code, strm->stream_user_data); + if (rv != 0) { + return rv; + } - /* Extend connection flow control window for the amount of data - which are not passed to application. */ - if (!(strm->flags & NGTCP2_STRM_FLAG_STOP_SENDING)) { - ngtcp2_conn_extend_max_offset(conn, strm->rx.last_offset - - ngtcp2_strm_rx_offset(strm)); - } + /* Extend connection flow control window for the amount of data + which are not passed to application. */ + if (!(strm->flags & NGTCP2_STRM_FLAG_STOP_SENDING)) { + ngtcp2_conn_extend_max_offset(conn, strm->rx.last_offset - + ngtcp2_strm_rx_offset(strm)); } conn->rx.offset += datalen; @@ -6395,7 +7460,9 @@ static int conn_recv_reset_stream(ngtcp2_conn *conn, strm->rx.last_offset = fr->final_size; strm->flags |= NGTCP2_STRM_FLAG_SHUT_RD | NGTCP2_STRM_FLAG_RECV_RST; - return ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm, fr->app_error_code); + ngtcp2_strm_set_app_error_code(strm, fr->app_error_code); + + return ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm); } /* @@ -6459,34 +7526,44 @@ static int conn_recv_stop_sending(ngtcp2_conn *conn, /* Frame is received reset before we create ngtcp2_strm object. */ - strm = ngtcp2_mem_malloc(conn->mem, sizeof(ngtcp2_strm)); + strm = ngtcp2_objalloc_strm_get(&conn->strm_objalloc); if (strm == NULL) { return NGTCP2_ERR_NOMEM; } rv = ngtcp2_conn_init_stream(conn, strm, fr->stream_id, NULL); if (rv != 0) { - ngtcp2_mem_free(conn->mem, strm); + ngtcp2_objalloc_strm_release(&conn->strm_objalloc, strm); + return rv; + } + + rv = conn_call_stream_open(conn, strm); + if (rv != 0) { return rv; } } + ngtcp2_strm_set_app_error_code(strm, fr->app_error_code); + /* No RESET_STREAM is required if we have sent FIN and all data have been acknowledged. */ - if ((strm->flags & NGTCP2_STRM_FLAG_SHUT_WR) && - ngtcp2_strm_is_all_tx_data_acked(strm)) { - return 0; - } - - rv = conn_reset_stream(conn, strm, fr->app_error_code); - if (rv != 0) { - return rv; + if (!ngtcp2_strm_is_all_tx_data_fin_acked(strm) && + !(strm->flags & NGTCP2_STRM_FLAG_SENT_RST)) { + rv = conn_reset_stream(conn, strm, fr->app_error_code); + if (rv != 0) { + return rv; + } } strm->flags |= NGTCP2_STRM_FLAG_SHUT_WR | NGTCP2_STRM_FLAG_SENT_RST; + if (ngtcp2_strm_is_tx_queued(strm) && !ngtcp2_strm_streamfrq_empty(strm)) { + assert(conn->tx.strmq_nretrans); + --conn->tx.strmq_nretrans; + } + ngtcp2_strm_streamfrq_clear(strm); - return ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm, fr->app_error_code); + return ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm); } /* @@ -6497,8 +7574,8 @@ static int check_stateless_reset(const ngtcp2_dcid *dcid, const ngtcp2_path *path, const ngtcp2_pkt_stateless_reset *sr) { return ngtcp2_path_eq(&dcid->ps.path, path) && - ngtcp2_verify_stateless_reset_token(dcid->token, - sr->stateless_reset_token) == 0; + ngtcp2_dcid_verify_stateless_reset_token( + dcid, sr->stateless_reset_token) == 0; } /* @@ -6535,18 +7612,18 @@ static int conn_on_stateless_reset(ngtcp2_conn *conn, const ngtcp2_path *path, (!pv || (!check_stateless_reset(&pv->dcid, path, &sr) && (!(pv->flags & NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE) || !check_stateless_reset(&pv->fallback_dcid, path, &sr))))) { - len = ngtcp2_ringbuf_len(&conn->dcid.retired); + len = ngtcp2_ringbuf_len(&conn->dcid.retired.rb); for (i = 0; i < len; ++i) { - dcid = ngtcp2_ringbuf_get(&conn->dcid.retired, i); + dcid = ngtcp2_ringbuf_get(&conn->dcid.retired.rb, i); if (check_stateless_reset(dcid, path, &sr)) { break; } } if (i == len) { - len = ngtcp2_ringbuf_len(&conn->dcid.bound); + len = ngtcp2_ringbuf_len(&conn->dcid.bound.rb); for (i = 0; i < len; ++i) { - dcid = ngtcp2_ringbuf_get(&conn->dcid.bound, i); + dcid = ngtcp2_ringbuf_get(&conn->dcid.bound.rb, i); if (check_stateless_reset(dcid, path, &sr)) { break; } @@ -6562,16 +7639,9 @@ static int conn_on_stateless_reset(ngtcp2_conn *conn, const ngtcp2_path *path, ngtcp2_log_rx_sr(&conn->log, &sr); - if (!conn->callbacks.recv_stateless_reset) { - return 0; - } - - rv = conn->callbacks.recv_stateless_reset(conn, &sr, conn->user_data); - if (rv != 0) { - return NGTCP2_ERR_CALLBACK_FAILURE; - } + ngtcp2_qlog_stateless_reset_pkt_received(&conn->qlog, &sr); - return 0; + return conn_call_recv_stateless_reset(conn, &sr); } /* @@ -6628,16 +7698,20 @@ static int conn_retire_dcid_prior_to(ngtcp2_conn *conn, ngtcp2_ringbuf *rb, if (rv != 0) { return rv; } + if (i == 0) { ngtcp2_ringbuf_pop_front(rb); - } else if (i == ngtcp2_ringbuf_len(rb) - 1) { + continue; + } + + if (i == ngtcp2_ringbuf_len(rb) - 1) { ngtcp2_ringbuf_pop_back(rb); break; - } else { - last = ngtcp2_ringbuf_get(rb, ngtcp2_ringbuf_len(rb) - 1); - ngtcp2_dcid_copy(dcid, last); - ngtcp2_ringbuf_pop_back(rb); } + + last = ngtcp2_ringbuf_get(rb, ngtcp2_ringbuf_len(rb) - 1); + ngtcp2_dcid_copy(dcid, last); + ngtcp2_ringbuf_pop_back(rb); } return 0; @@ -6691,10 +7765,10 @@ static int conn_recv_new_connection_id(ngtcp2_conn *conn, } } - len = ngtcp2_ringbuf_len(&conn->dcid.bound); + len = ngtcp2_ringbuf_len(&conn->dcid.bound.rb); for (i = 0; i < len; ++i) { - dcid = ngtcp2_ringbuf_get(&conn->dcid.bound, i); + dcid = ngtcp2_ringbuf_get(&conn->dcid.bound.rb, i); rv = ngtcp2_dcid_verify_uniqueness(dcid, fr->seq, &fr->cid, fr->stateless_reset_token); if (rv != 0) { @@ -6705,10 +7779,10 @@ static int conn_recv_new_connection_id(ngtcp2_conn *conn, } } - len = ngtcp2_ringbuf_len(&conn->dcid.unused); + len = ngtcp2_ringbuf_len(&conn->dcid.unused.rb); for (i = 0; i < len; ++i) { - dcid = ngtcp2_ringbuf_get(&conn->dcid.unused, i); + dcid = ngtcp2_ringbuf_get(&conn->dcid.unused.rb, i); rv = ngtcp2_dcid_verify_uniqueness(dcid, fr->seq, &fr->cid, fr->stateless_reset_token); if (rv != 0) { @@ -6722,13 +7796,13 @@ static int conn_recv_new_connection_id(ngtcp2_conn *conn, if (conn->dcid.retire_prior_to < fr->retire_prior_to) { conn->dcid.retire_prior_to = fr->retire_prior_to; - rv = - conn_retire_dcid_prior_to(conn, &conn->dcid.bound, fr->retire_prior_to); + rv = conn_retire_dcid_prior_to(conn, &conn->dcid.bound.rb, + fr->retire_prior_to); if (rv != 0) { return rv; } - rv = conn_retire_dcid_prior_to(conn, &conn->dcid.unused, + rv = conn_retire_dcid_prior_to(conn, &conn->dcid.unused.rb, conn->dcid.retire_prior_to); if (rv != 0) { return rv; @@ -6742,13 +7816,7 @@ static int conn_recv_new_connection_id(ngtcp2_conn *conn, For example, a peer might send seq = 50000 and retire_prior_to = 50000. Then send NEW_CONNECTION_ID frames with seq < 50000. */ - /* TODO we might queue lots of RETIRE_CONNECTION_ID frame here - because conn->dcid.num_retire_queued is incremented when the - frame is serialized. */ - if (conn->dcid.num_retire_queued < NGTCP2_MAX_DCID_POOL_SIZE * 2) { - return conn_retire_dcid_seq(conn, fr->seq); - } - return 0; + return conn_retire_dcid_seq(conn, fr->seq); } if (found) { @@ -6768,7 +7836,7 @@ static int conn_recv_new_connection_id(ngtcp2_conn *conn, ngtcp2_gaptr_drop_first_gap(&conn->dcid.seqgap); } - len = ngtcp2_ringbuf_len(&conn->dcid.unused); + len = ngtcp2_ringbuf_len(&conn->dcid.unused.rb); if (conn->dcid.current.seq >= conn->dcid.retire_prior_to) { ++extra_dcid; @@ -6795,7 +7863,7 @@ static int conn_recv_new_connection_id(ngtcp2_conn *conn, return 0; } - dcid = ngtcp2_ringbuf_push_back(&conn->dcid.unused); + dcid = ngtcp2_ringbuf_push_back(&conn->dcid.unused.rb); ngtcp2_dcid_init(dcid, fr->seq, &fr->cid, fr->stateless_reset_token); return 0; @@ -6820,7 +7888,7 @@ static int conn_post_process_recv_new_connection_id(ngtcp2_conn *conn, int rv; if (conn->dcid.current.seq < conn->dcid.retire_prior_to) { - if (ngtcp2_ringbuf_len(&conn->dcid.unused) == 0) { + if (ngtcp2_ringbuf_len(&conn->dcid.unused.rb) == 0) { return 0; } @@ -6829,7 +7897,7 @@ static int conn_post_process_recv_new_connection_id(ngtcp2_conn *conn, return rv; } - dcid = ngtcp2_ringbuf_get(&conn->dcid.unused, 0); + dcid = ngtcp2_ringbuf_get(&conn->dcid.unused.rb, 0); if (pv) { if (conn->dcid.current.seq == pv->dcid.seq) { ngtcp2_dcid_copy_cid_token(&pv->dcid, dcid); @@ -6841,7 +7909,7 @@ static int conn_post_process_recv_new_connection_id(ngtcp2_conn *conn, } ngtcp2_dcid_copy_cid_token(&conn->dcid.current, dcid); - ngtcp2_ringbuf_pop_front(&conn->dcid.unused); + ngtcp2_ringbuf_pop_front(&conn->dcid.unused.rb); rv = conn_call_activate_dcid(conn, &conn->dcid.current); if (rv != 0) { @@ -6851,13 +7919,13 @@ static int conn_post_process_recv_new_connection_id(ngtcp2_conn *conn, if (pv) { if (pv->dcid.seq < conn->dcid.retire_prior_to) { - if (ngtcp2_ringbuf_len(&conn->dcid.unused)) { + if (ngtcp2_ringbuf_len(&conn->dcid.unused.rb)) { rv = conn_retire_dcid(conn, &pv->dcid, ts); if (rv != 0) { return rv; } - dcid = ngtcp2_ringbuf_get(&conn->dcid.unused, 0); + dcid = ngtcp2_ringbuf_get(&conn->dcid.unused.rb, 0); if ((pv->flags & NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE) && pv->dcid.seq == pv->fallback_dcid.seq) { @@ -6865,7 +7933,7 @@ static int conn_post_process_recv_new_connection_id(ngtcp2_conn *conn, } ngtcp2_dcid_copy_cid_token(&pv->dcid, dcid); - ngtcp2_ringbuf_pop_front(&conn->dcid.unused); + ngtcp2_ringbuf_pop_front(&conn->dcid.unused.rb); rv = conn_call_activate_dcid(conn, &pv->dcid); if (rv != 0) { @@ -6876,20 +7944,20 @@ static int conn_post_process_recv_new_connection_id(ngtcp2_conn *conn, "path migration is aborted because connection ID is" "retired and no unused connection ID is available"); - return conn_stop_pv(conn, ts); + return conn_abort_pv(conn, ts); } } if ((pv->flags & NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE) && pv->fallback_dcid.seq < conn->dcid.retire_prior_to) { - if (ngtcp2_ringbuf_len(&conn->dcid.unused)) { + if (ngtcp2_ringbuf_len(&conn->dcid.unused.rb)) { rv = conn_retire_dcid(conn, &pv->fallback_dcid, ts); if (rv != 0) { return rv; } - dcid = ngtcp2_ringbuf_get(&conn->dcid.unused, 0); + dcid = ngtcp2_ringbuf_get(&conn->dcid.unused.rb, 0); ngtcp2_dcid_copy_cid_token(&pv->fallback_dcid, dcid); - ngtcp2_ringbuf_pop_front(&conn->dcid.unused); + ngtcp2_ringbuf_pop_front(&conn->dcid.unused.rb); rv = conn_call_activate_dcid(conn, &pv->fallback_dcid); if (rv != 0) { @@ -6897,7 +7965,7 @@ static int conn_post_process_recv_new_connection_id(ngtcp2_conn *conn, } } else { /* Now we have no fallback dcid. */ - return conn_stop_pv(conn, ts); + return conn_abort_pv(conn, ts); } } } @@ -6949,7 +8017,7 @@ static int conn_recv_retire_connection_id(ngtcp2_conn *conn, scid->pe.index = NGTCP2_PQ_BAD_INDEX; } - scid->ts_retired = ts; + scid->retired_ts = ts; return ngtcp2_pq_push(&conn->scid.used, &scid->pe); } @@ -6970,8 +8038,6 @@ static int conn_recv_retire_connection_id(ngtcp2_conn *conn, * Server received NEW_TOKEN. */ static int conn_recv_new_token(ngtcp2_conn *conn, const ngtcp2_new_token *fr) { - int rv; - if (conn->server) { return NGTCP2_ERR_PROTO; } @@ -6980,14 +8046,7 @@ static int conn_recv_new_token(ngtcp2_conn *conn, const ngtcp2_new_token *fr) { return NGTCP2_ERR_FRAME_ENCODING; } - if (conn->callbacks.recv_new_token) { - rv = conn->callbacks.recv_new_token(conn, &fr->token, conn->user_data); - if (rv != 0) { - return NGTCP2_ERR_CALLBACK_FAILURE; - } - } - - return 0; + return conn_call_recv_new_token(conn, &fr->token); } /* @@ -7042,49 +8101,48 @@ static int conn_recv_streams_blocked_uni(ngtcp2_conn *conn, * User-defined callback function failed. */ static int conn_select_preferred_addr(ngtcp2_conn *conn) { - struct sockaddr_storage buf; - ngtcp2_addr addr; + ngtcp2_path_storage ps; int rv; ngtcp2_duration pto, initial_pto, timeout; ngtcp2_pv *pv; ngtcp2_dcid *dcid; - ngtcp2_addr_init(&addr, (struct sockaddr *)&buf, 0, NULL); - - if (ngtcp2_ringbuf_len(&conn->dcid.unused) == 0) { + if (ngtcp2_ringbuf_len(&conn->dcid.unused.rb) == 0) { return 0; } - rv = conn_call_select_preferred_addr(conn, &addr); + ngtcp2_path_storage_zero(&ps); + ngtcp2_addr_copy(&ps.path.local, &conn->dcid.current.ps.path.local); + + rv = conn_call_select_preferred_addr(conn, &ps.path); if (rv != 0) { return rv; } - if (addr.addrlen == 0 || - ngtcp2_addr_eq(&conn->dcid.current.ps.path.remote, &addr)) { + if (ps.path.remote.addrlen == 0 || + ngtcp2_addr_eq(&conn->dcid.current.ps.path.remote, &ps.path.remote)) { return 0; } assert(conn->pv == NULL); - dcid = ngtcp2_ringbuf_get(&conn->dcid.unused, 0); + dcid = ngtcp2_ringbuf_get(&conn->dcid.unused.rb, 0); + ngtcp2_dcid_set_path(dcid, &ps.path); + pto = conn_compute_pto(conn, &conn->pktns); initial_pto = conn_compute_initial_pto(conn, &conn->pktns); timeout = 3 * ngtcp2_max(pto, initial_pto); - rv = ngtcp2_pv_new(&pv, dcid, timeout, NGTCP2_PV_FLAG_NONE, &conn->log, - conn->mem); + rv = ngtcp2_pv_new(&pv, dcid, timeout, NGTCP2_PV_FLAG_PREFERRED_ADDR, + &conn->log, conn->mem); if (rv != 0) { /* TODO Call ngtcp2_dcid_free here if it is introduced */ return rv; } - ngtcp2_ringbuf_pop_front(&conn->dcid.unused); + ngtcp2_ringbuf_pop_front(&conn->dcid.unused.rb); conn->pv = pv; - ngtcp2_addr_copy(&pv->dcid.ps.path.local, &conn->dcid.current.ps.path.local); - ngtcp2_addr_copy(&pv->dcid.ps.path.remote, &addr); - return conn_call_activate_dcid(conn, &pv->dcid); } @@ -7120,18 +8178,18 @@ static int conn_recv_handshake_done(ngtcp2_conn *conn, ngtcp2_tstamp ts) { conn_discard_handshake_state(conn, ts); - if (conn->remote.transport_params.preferred_address_present) { + assert(conn->remote.transport_params); + + if (conn->remote.transport_params->preferred_address_present) { rv = conn_select_preferred_addr(conn); if (rv != 0) { return rv; } } - if (conn->callbacks.handshake_confirmed) { - rv = conn->callbacks.handshake_confirmed(conn, conn->user_data); - if (rv != 0) { - return NGTCP2_ERR_CALLBACK_FAILURE; - } + rv = conn_call_handshake_confirmed(conn); + if (rv != 0) { + return rv; } /* Re-arm loss detection timer after handshake has been @@ -7151,38 +8209,9 @@ static int conn_recv_handshake_done(ngtcp2_conn *conn, ngtcp2_tstamp ts) { * User-defined callback function failed. */ static int conn_recv_datagram(ngtcp2_conn *conn, ngtcp2_datagram *fr) { - const uint8_t *data; - size_t datalen; - int rv; - uint32_t flags = NGTCP2_DATAGRAM_FLAG_NONE; - assert(conn->local.transport_params.max_datagram_frame_size); - if (!conn->callbacks.recv_datagram) { - return 0; - } - - if (fr->datacnt) { - assert(fr->datacnt == 1); - - data = fr->data->base; - datalen = fr->data->len; - } else { - data = NULL; - datalen = 0; - } - - if (!(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED)) { - flags |= NGTCP2_DATAGRAM_FLAG_EARLY; - } - - rv = conn->callbacks.recv_datagram(conn, flags, data, datalen, - conn->user_data); - if (rv != 0) { - return NGTCP2_ERR_CALLBACK_FAILURE; - } - - return 0; + return conn_call_recv_datagram(conn, fr); } /* @@ -7246,14 +8275,12 @@ static int conn_prepare_key_update(ngtcp2_conn *conn, ngtcp2_tstamp ts) { new_rx_ckm = conn->crypto.key_update.new_rx_ckm; new_tx_ckm = conn->crypto.key_update.new_tx_ckm; - assert(conn->callbacks.update_key); - - rv = conn->callbacks.update_key( + rv = conn_call_update_key( conn, new_rx_ckm->secret.base, new_tx_ckm->secret.base, &rx_aead_ctx, new_rx_ckm->iv.base, &tx_aead_ctx, new_tx_ckm->iv.base, - rx_ckm->secret.base, tx_ckm->secret.base, secretlen, conn->user_data); + rx_ckm->secret.base, tx_ckm->secret.base, secretlen); if (rv != 0) { - return NGTCP2_ERR_CALLBACK_FAILURE; + return rv; } new_rx_ckm->aead_ctx = rx_aead_ctx; @@ -7276,9 +8303,11 @@ static int conn_prepare_key_update(ngtcp2_conn *conn, ngtcp2_tstamp ts) { /* * conn_rotate_keys rotates keys. The current key moves to old key, - * and new key moves to the current key. + * and new key moves to the current key. If the local endpoint + * initiated this key update, pass nonzero as |initiator|. */ -static void conn_rotate_keys(ngtcp2_conn *conn, int64_t pkt_num) { +static void conn_rotate_keys(ngtcp2_conn *conn, int64_t pkt_num, + int initiator) { ngtcp2_pktns *pktns = &conn->pktns; assert(conn->crypto.key_update.new_rx_ckm); @@ -7302,6 +8331,9 @@ static void conn_rotate_keys(ngtcp2_conn *conn, int64_t pkt_num) { pktns->crypto.tx.ckm->pkt_num = pktns->tx.last_pkt_num + 1; conn->flags |= NGTCP2_CONN_FLAG_KEY_UPDATE_NOT_CONFIRMED; + if (initiator) { + conn->flags |= NGTCP2_CONN_FLAG_KEY_UPDATE_INITIATOR; + } } /* @@ -7353,14 +8385,19 @@ static int conn_recv_non_probing_pkt_on_new_path(ngtcp2_conn *conn, ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_PTV, "path is migrated back to the original path"); ngtcp2_dcid_copy(&conn->dcid.current, &conn->pv->fallback_dcid); - conn_reset_congestion_state(conn); + conn_reset_congestion_state(conn, ts); conn->dcid.current.bytes_recv += dgramlen; conn_reset_ecn_validation_state(conn); - rv = conn_stop_pv(conn, ts); + + rv = conn_abort_pv(conn, ts); if (rv != 0) { return rv; } - return 0; + + /* Run PMTUD just in case if it is prematurely aborted */ + assert(!conn->pmtud); + + return conn_start_pmtud(conn); } remote_addr_cmp = @@ -7368,14 +8405,21 @@ static int conn_recv_non_probing_pkt_on_new_path(ngtcp2_conn *conn, local_addr_eq = ngtcp2_addr_eq(&conn->dcid.current.ps.path.local, &path->local); - /* The transport specification draft-27 says: + /* + * When to change DCID? RFC 9002 section 9.5 says: * - * An endpoint MUST use a new connection ID if it initiates - * connection migration as described in Section 9.2 or probes a new - * network path as described in Section 9.1. An endpoint MUST use a - * new connection ID in response to a change in the address of a - * peer if the packet with the new peer address uses an active - * connection ID that has not been previously used by the peer. + * An endpoint MUST NOT reuse a connection ID when sending from more + * than one local address -- for example, when initiating connection + * migration as described in Section 9.2 or when probing a new + * network path as described in Section 9.1. + * + * Similarly, an endpoint MUST NOT reuse a connection ID when + * sending to more than one destination address. Due to network + * changes outside the control of its peer, an endpoint might + * receive packets from a new source address with the same + * Destination Connection ID field value, in which case it MAY + * continue to use the current connection ID with the new remote + * address while still sending from the same local address. */ require_new_cid = conn->dcid.current.cid.datalen && ((new_cid_used && remote_addr_cmp) || !local_addr_eq); @@ -7387,10 +8431,10 @@ static int conn_recv_non_probing_pkt_on_new_path(ngtcp2_conn *conn, initial_pto = conn_compute_initial_pto(conn, &conn->pktns); timeout = 3 * ngtcp2_max(pto, initial_pto); - len = ngtcp2_ringbuf_len(&conn->dcid.bound); + len = ngtcp2_ringbuf_len(&conn->dcid.bound.rb); for (i = 0; i < len; ++i) { - bound_dcid = ngtcp2_ringbuf_get(&conn->dcid.bound, i); + bound_dcid = ngtcp2_ringbuf_get(&conn->dcid.bound.rb, i); if (ngtcp2_path_eq(&bound_dcid->ps.path, path)) { ngtcp2_log_info( &conn->log, NGTCP2_LOG_EVENT_CON, @@ -7398,13 +8442,13 @@ static int conn_recv_non_probing_pkt_on_new_path(ngtcp2_conn *conn, ngtcp2_dcid_copy(&dcid, bound_dcid); if (i == 0) { - ngtcp2_ringbuf_pop_front(&conn->dcid.bound); - } else if (i == ngtcp2_ringbuf_len(&conn->dcid.bound) - 1) { - ngtcp2_ringbuf_pop_back(&conn->dcid.bound); + ngtcp2_ringbuf_pop_front(&conn->dcid.bound.rb); + } else if (i == ngtcp2_ringbuf_len(&conn->dcid.bound.rb) - 1) { + ngtcp2_ringbuf_pop_back(&conn->dcid.bound.rb); } else { - last = ngtcp2_ringbuf_get(&conn->dcid.bound, len - 1); + last = ngtcp2_ringbuf_get(&conn->dcid.bound.rb, len - 1); ngtcp2_dcid_copy(bound_dcid, last); - ngtcp2_ringbuf_pop_back(&conn->dcid.bound); + ngtcp2_ringbuf_pop_back(&conn->dcid.bound.rb); } require_new_cid = 0; @@ -7420,11 +8464,11 @@ static int conn_recv_non_probing_pkt_on_new_path(ngtcp2_conn *conn, if (i == len) { if (require_new_cid) { - if (ngtcp2_ringbuf_len(&conn->dcid.unused) == 0) { + if (ngtcp2_ringbuf_len(&conn->dcid.unused.rb) == 0) { return NGTCP2_ERR_CONN_ID_BLOCKED; } - ngtcp2_dcid_copy(&dcid, ngtcp2_ringbuf_get(&conn->dcid.unused, 0)); - ngtcp2_ringbuf_pop_front(&conn->dcid.unused); + ngtcp2_dcid_copy(&dcid, ngtcp2_ringbuf_get(&conn->dcid.unused.rb, 0)); + ngtcp2_ringbuf_pop_front(&conn->dcid.unused.rb); rv = conn_call_activate_dcid(conn, &dcid); if (rv != 0) { @@ -7440,7 +8484,7 @@ static int conn_recv_non_probing_pkt_on_new_path(ngtcp2_conn *conn, } } - ngtcp2_path_copy(&dcid.ps.path, path); + ngtcp2_dcid_set_path(&dcid, path); dcid.bytes_recv += dgramlen; rv = ngtcp2_pv_new(&pv, &dcid, timeout, NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE, @@ -7452,24 +8496,35 @@ static int conn_recv_non_probing_pkt_on_new_path(ngtcp2_conn *conn, if (conn->pv && (conn->pv->flags & NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE)) { ngtcp2_dcid_copy(&pv->fallback_dcid, &conn->pv->fallback_dcid); pv->fallback_pto = conn->pv->fallback_pto; + /* Unset the flag bit so that conn_stop_pv does not retire + DCID. */ + conn->pv->flags &= (uint8_t)~NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE; } else { ngtcp2_dcid_copy(&pv->fallback_dcid, &conn->dcid.current); pv->fallback_pto = pto; } - ngtcp2_dcid_copy(&conn->dcid.current, &dcid); - if (!local_addr_eq || (remote_addr_cmp & (NGTCP2_ADDR_COMPARE_FLAG_ADDR | NGTCP2_ADDR_COMPARE_FLAG_FAMILY))) { - conn_reset_congestion_state(conn); + conn_reset_congestion_state(conn, ts); + } else { + /* For NAT rebinding, keep max_udp_payload_size since client most + likely does not send a padded PATH_CHALLENGE. */ + dcid.max_udp_payload_size = ngtcp2_max( + dcid.max_udp_payload_size, conn->dcid.current.max_udp_payload_size); } + + ngtcp2_dcid_copy(&conn->dcid.current, &dcid); + conn_reset_ecn_validation_state(conn); + ngtcp2_conn_stop_pmtud(conn); + if (conn->pv) { ngtcp2_log_info( &conn->log, NGTCP2_LOG_EVENT_PTV, "path migration is aborted because new migration has started"); - rv = conn_stop_pv(conn, ts); + rv = conn_abort_pv(conn, ts); if (rv != 0) { return rv; } @@ -7481,7 +8536,7 @@ static int conn_recv_non_probing_pkt_on_new_path(ngtcp2_conn *conn, } /* - * conn_recv_pkt_from_new_path is called when a Short packet is + * conn_recv_pkt_from_new_path is called when a 1RTT packet is * received from new path (not current path). This packet would be a * packet which only contains probing frame, or reordered packet, or a * path is being validated. @@ -7524,7 +8579,7 @@ static int conn_recv_pkt_from_new_path(ngtcp2_conn *conn, return rv; } - ngtcp2_path_copy(&bound_dcid->ps.path, path); + ngtcp2_dcid_set_path(bound_dcid, path); bound_dcid->bytes_recv += dgramlen; return 0; @@ -7607,7 +8662,10 @@ conn_recv_delayed_handshake_pkt(ngtcp2_conn *conn, const ngtcp2_pkt_info *pi, case NGTCP2_FRAME_PADDING: break; case NGTCP2_FRAME_CONNECTION_CLOSE: - conn_recv_connection_close(conn, &fr->connection_close); + rv = conn_recv_connection_close(conn, &fr->connection_close); + if (rv != 0) { + return rv; + } break; case NGTCP2_FRAME_CRYPTO: case NGTCP2_FRAME_PING: @@ -7719,7 +8777,14 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, return NGTCP2_ERR_DISCARD_PKT; } - if (pktlen < (size_t)nread + hd.len || conn->version != hd.version) { + if (pktlen < (size_t)nread + hd.len) { + return NGTCP2_ERR_DISCARD_PKT; + } + + assert(conn->negotiated_version); + + if (hd.version != conn->client_chosen_version && + hd.version != conn->negotiated_version) { return NGTCP2_ERR_DISCARD_PKT; } @@ -7740,6 +8805,10 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, "delayed Initial packet was discarded"); return (ngtcp2_ssize)pktlen; case NGTCP2_PKT_HANDSHAKE: + if (hd.version != conn->negotiated_version) { + return NGTCP2_ERR_DISCARD_PKT; + } + if (!conn->hs_pktns) { ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_PKT, "delayed Handshake packet was discarded"); @@ -7755,7 +8824,7 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, decrypt = conn->callbacks.decrypt; break; case NGTCP2_PKT_0RTT: - if (!conn->server) { + if (!conn->server || hd.version != conn->client_chosen_version) { return NGTCP2_ERR_DISCARD_PKT; } @@ -7800,7 +8869,7 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, } nwrite = decrypt_hp(&hd, conn->crypto.decrypt_hp_buf.base, hp, pkt, pktlen, - (size_t)nread, ckm, hp_ctx, hp_mask); + (size_t)nread, hp_ctx, hp_mask); if (nwrite < 0) { if (ngtcp2_err_is_fatal((int)nwrite)) { return nwrite; @@ -7824,7 +8893,7 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, ngtcp2_log_rx_pkt_hd(&conn->log, &hd); - if (hd.type == NGTCP2_PKT_SHORT) { + if (hd.type == NGTCP2_PKT_1RTT) { key_phase_bit_changed = conn_key_phase_changed(conn, &hd); } @@ -7834,7 +8903,7 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, } if (key_phase_bit_changed) { - assert(hd.type == NGTCP2_PKT_SHORT); + assert(hd.type == NGTCP2_PKT_1RTT); ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_PKT, "unexpected KEY_PHASE"); @@ -7867,7 +8936,7 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, ckm, decrypt); if (force_decrypt_failure) { - nwrite = NGTCP2_ERR_TLS_DECRYPT; + nwrite = NGTCP2_ERR_DECRYPT; } if (nwrite < 0) { @@ -7875,9 +8944,9 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, return nwrite; } - assert(NGTCP2_ERR_TLS_DECRYPT == nwrite); + assert(NGTCP2_ERR_DECRYPT == nwrite); - if (hd.type == NGTCP2_PKT_SHORT && + if (hd.type == NGTCP2_PKT_1RTT && ++conn->crypto.decryption_failure_count >= pktns->crypto.ctx.max_decryption_failure) { return NGTCP2_ERR_AEAD_LIMIT_REACHED; @@ -7963,8 +9032,6 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, "packet was ignored because of mismatched DCID"); return NGTCP2_ERR_DISCARD_PKT; } - - conn->flags |= NGTCP2_CONN_FLAG_RECV_PROTECTED_PKT; } ngtcp2_qlog_pkt_received_start(&conn->qlog); @@ -7985,8 +9052,9 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, hd.type == NGTCP2_PKT_0RTT) { return NGTCP2_ERR_PROTO; } + assert(conn->remote.transport_params); assign_recved_ack_delay_unscaled( - &fr->ack, conn->remote.transport_params.ack_delay_exponent); + &fr->ack, conn->remote.transport_params->ack_delay_exponent); break; } @@ -8092,8 +9160,11 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, break; case NGTCP2_FRAME_CONNECTION_CLOSE: case NGTCP2_FRAME_CONNECTION_CLOSE_APP: - conn_recv_connection_close(conn, &fr->connection_close); - break; + rv = conn_recv_connection_close(conn, &fr->connection_close); + if (rv != 0) { + return rv; + } + break; case NGTCP2_FRAME_PING: non_probing_pkt = 1; break; @@ -8180,7 +9251,7 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, } } - if (conn->server && hd.type == NGTCP2_PKT_SHORT && + if (conn->server && hd.type == NGTCP2_PKT_1RTT && !ngtcp2_path_eq(&conn->dcid.current.ps.path, path)) { if (non_probing_pkt && pktns->rx.max_pkt_num < hd.pkt_num && !conn_path_validation_in_progress(conn, path)) { @@ -8208,10 +9279,10 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, } } - if (hd.type == NGTCP2_PKT_SHORT) { + if (hd.type == NGTCP2_PKT_1RTT) { if (ckm == conn->crypto.key_update.new_rx_ckm) { ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_CON, "rotate keys"); - conn_rotate_keys(conn, hd.pkt_num); + conn_rotate_keys(conn, hd.pkt_num, /* initiator = */ 0); } else if (ckm->pkt_num > hd.pkt_num) { ckm->pkt_num = hd.pkt_num; } @@ -8220,6 +9291,10 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, conn->early.discard_started_ts == UINT64_MAX) { conn->early.discard_started_ts = ts; } + + if (ngtcp2_path_eq(&conn->dcid.current.ps.path, path)) { + conn_update_keep_alive_last_ts(conn, ts); + } } rv = pktns_commit_recv_pkt_num(pktns, hd.pkt_num, require_ack, pkt_ts); @@ -8250,8 +9325,8 @@ static ngtcp2_ssize conn_recv_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, } /* - * conn_process_buffered_protected_pkt processes buffered 0RTT or - * Short packets. + * conn_process_buffered_protected_pkt processes buffered 0RTT or 1RTT + * packets. * * This function returns 0 if it succeeds, or the same negative error * codes from conn_recv_pkt. @@ -8331,12 +9406,55 @@ static int conn_process_buffered_handshake_pkt(ngtcp2_conn *conn, } static void conn_sync_stream_id_limit(ngtcp2_conn *conn) { - ngtcp2_transport_params *params = &conn->remote.transport_params; + ngtcp2_transport_params *params = conn->remote.transport_params; + + assert(params); conn->local.bidi.max_streams = params->initial_max_streams_bidi; conn->local.uni.max_streams = params->initial_max_streams_uni; } +static int strm_set_max_offset(void *data, void *ptr) { + ngtcp2_conn *conn = ptr; + ngtcp2_transport_params *params = conn->remote.transport_params; + ngtcp2_strm *strm = data; + uint64_t max_offset; + int rv; + + assert(params); + + if (!conn_local_stream(conn, strm->stream_id)) { + return 0; + } + + if (bidi_stream(strm->stream_id)) { + max_offset = params->initial_max_stream_data_bidi_remote; + } else { + max_offset = params->initial_max_stream_data_uni; + } + + if (strm->tx.max_offset < max_offset) { + strm->tx.max_offset = max_offset; + + /* Don't call callback if stream is half-closed local */ + if (strm->flags & NGTCP2_STRM_FLAG_SHUT_WR) { + return 0; + } + + rv = conn_call_extend_max_stream_data(conn, strm, strm->stream_id, + strm->tx.max_offset); + if (rv != 0) { + return rv; + } + } + + return 0; +} + +static int conn_sync_stream_data_limit(ngtcp2_conn *conn) { + return ngtcp2_map_each(&conn->strms, strm_set_max_offset, conn); +} + /* * conn_handshake_completed is called once cryptographic handshake has * completed. @@ -8377,7 +9495,7 @@ static int conn_handshake_completed(ngtcp2_conn *conn) { /* * conn_recv_cpkt processes compound packet after handshake. The - * buffer pointed by |pkt| might contain multiple packets. The Short + * buffer pointed by |pkt| might contain multiple packets. The 1RTT * packet must be the last one because it does not have payload length * field. * @@ -8435,11 +9553,11 @@ static int conn_recv_cpkt(ngtcp2_conn *conn, const ngtcp2_path *path, * retired path list. */ static int conn_is_retired_path(ngtcp2_conn *conn, const ngtcp2_path *path) { - size_t i, len = ngtcp2_ringbuf_len(&conn->dcid.retired); + size_t i, len = ngtcp2_ringbuf_len(&conn->dcid.retired.rb); ngtcp2_dcid *dcid; for (i = 0; i < len; ++i) { - dcid = ngtcp2_ringbuf_get(&conn->dcid.retired, i); + dcid = ngtcp2_ringbuf_get(&conn->dcid.retired.rb, i); if (ngtcp2_path_eq(&dcid->ps.path, path)) { return 1; } @@ -8459,7 +9577,7 @@ static int conn_enqueue_handshake_done(ngtcp2_conn *conn) { assert(conn->server); - rv = ngtcp2_frame_chain_new(&nfrc, conn->mem); + rv = ngtcp2_frame_chain_objalloc_new(&nfrc, &conn->frc_objalloc); if (rv != 0) { return rv; } @@ -8478,27 +9596,36 @@ static int conn_enqueue_handshake_done(ngtcp2_conn *conn) { * reading given data. |pkt| points to the buffer to read and * |pktlen| is the length of the buffer. |path| is the network path. * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: (TBD). + * This function returns the number of bytes processed. Unless the + * last packet is 1RTT packet and an application decryption key has + * been installed, it returns |pktlen| if it succeeds. If it finds + * 1RTT packet and an application decryption key has been installed, + * it returns the number of bytes just before 1RTT packet begins. + * + * This function returns the number of bytes processed if it succeeds, + * or one of the following negative error codes: (TBD). */ -static int conn_read_handshake(ngtcp2_conn *conn, const ngtcp2_path *path, - const ngtcp2_pkt_info *pi, const uint8_t *pkt, - size_t pktlen, ngtcp2_tstamp ts) { +static ngtcp2_ssize conn_read_handshake(ngtcp2_conn *conn, + const ngtcp2_path *path, + const ngtcp2_pkt_info *pi, + const uint8_t *pkt, size_t pktlen, + ngtcp2_tstamp ts) { int rv; + ngtcp2_ssize nread; switch (conn->state) { case NGTCP2_CS_CLIENT_INITIAL: /* TODO Better to log something when we ignore input */ - return 0; + return (ngtcp2_ssize)pktlen; case NGTCP2_CS_CLIENT_WAIT_HANDSHAKE: - rv = conn_recv_handshake_cpkt(conn, path, pi, pkt, pktlen, ts); - if (rv < 0) { - return rv; + nread = conn_recv_handshake_cpkt(conn, path, pi, pkt, pktlen, ts); + if (nread < 0) { + return nread; } if (conn->state == NGTCP2_CS_CLIENT_INITIAL) { /* Retry packet was received */ - return 0; + return (ngtcp2_ssize)pktlen; } assert(conn->hs_pktns); @@ -8510,20 +9637,24 @@ static int conn_read_handshake(ngtcp2_conn *conn, const ngtcp2_path *path, } } - if ((conn->flags & (NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED | - NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED_HANDLED)) == - NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED) { + if (conn_is_handshake_completed(conn) && + !(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED_HANDLED)) { rv = conn_handshake_completed(conn); if (rv != 0) { return rv; } + + rv = conn_process_buffered_protected_pkt(conn, &conn->pktns, ts); + if (rv != 0) { + return rv; + } } - return 0; + return nread; case NGTCP2_CS_SERVER_INITIAL: - rv = conn_recv_handshake_cpkt(conn, path, pi, pkt, pktlen, ts); - if (rv < 0) { - return rv; + nread = conn_recv_handshake_cpkt(conn, path, pi, pkt, pktlen, ts); + if (nread < 0) { + return nread; } /* @@ -8538,7 +9669,7 @@ static int conn_read_handshake(ngtcp2_conn *conn, const ngtcp2_path *path, ngtcp2_rob_data_buffered(conn->in_pktns->crypto.strm.rx.rob)) { /* Address has been validated with token */ if (conn->local.settings.token.len) { - return 0; + return nread; } return NGTCP2_ERR_RETRY; } @@ -8562,11 +9693,11 @@ static int conn_read_handshake(ngtcp2_conn *conn, const ngtcp2_path *path, } } - return 0; + return nread; case NGTCP2_CS_SERVER_WAIT_HANDSHAKE: - rv = conn_recv_handshake_cpkt(conn, path, pi, pkt, pktlen, ts); - if (rv < 0) { - return rv; + nread = conn_recv_handshake_cpkt(conn, path, pi, pkt, pktlen, ts); + if (nread < 0) { + return nread; } if (conn->hs_pktns->crypto.rx.ckm) { @@ -8580,7 +9711,7 @@ static int conn_read_handshake(ngtcp2_conn *conn, const ngtcp2_path *path, conn_discard_initial_state(conn, ts); } - if (!(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED)) { + if (!conn_is_handshake_completed(conn)) { /* If server hits amplification limit, it cancels loss detection timer. If server receives a packet from client, the limit is increased and server can send more. If server has @@ -8603,7 +9734,24 @@ static int conn_read_handshake(ngtcp2_conn *conn, const ngtcp2_path *path, } } - return 0; + if ((size_t)nread < pktlen) { + /* We have 1RTT packet and application rx key, but the + handshake has not completed yet. */ + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_CON, + "buffering 1RTT packet len=%zu", + pktlen - (size_t)nread); + + rv = conn_buffer_pkt(conn, &conn->pktns, path, pi, pkt + nread, + pktlen - (size_t)nread, pktlen, ts); + if (rv != 0) { + assert(ngtcp2_err_is_fatal(rv)); + return rv; + } + + return (ngtcp2_ssize)pktlen; + } + + return nread; } if (!(conn->flags & NGTCP2_CONN_FLAG_TRANSPORT_PARAM_RECVED)) { @@ -8633,26 +9781,38 @@ static int conn_read_handshake(ngtcp2_conn *conn, const ngtcp2_path *path, return rv; } + if (!conn->local.settings.no_pmtud) { + rv = conn_start_pmtud(conn); + if (rv != 0) { + return rv; + } + } + conn->pktns.rtb.persistent_congestion_start_ts = ts; /* Re-arm loss detection timer here after handshake has been confirmed. */ ngtcp2_conn_set_loss_detection_timer(conn, ts); - return 0; + return nread; case NGTCP2_CS_CLOSING: return NGTCP2_ERR_CLOSING; case NGTCP2_CS_DRAINING: return NGTCP2_ERR_DRAINING; default: - return 0; + return (ngtcp2_ssize)pktlen; } } -int ngtcp2_conn_read_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, - const ngtcp2_pkt_info *pi, const uint8_t *pkt, - size_t pktlen, ngtcp2_tstamp ts) { +int ngtcp2_conn_read_pkt_versioned(ngtcp2_conn *conn, const ngtcp2_path *path, + int pkt_info_version, + const ngtcp2_pkt_info *pi, + const uint8_t *pkt, size_t pktlen, + ngtcp2_tstamp ts) { int rv = 0; + ngtcp2_ssize nread = 0; + const ngtcp2_pkt_info zero_pi = {0}; + (void)pkt_info_version; conn->log.last_ts = ts; conn->qlog.last_ts = ts; @@ -8673,11 +9833,29 @@ int ngtcp2_conn_read_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, return 0; } + if (!pi) { + pi = &zero_pi; + } + switch (conn->state) { case NGTCP2_CS_CLIENT_INITIAL: case NGTCP2_CS_CLIENT_WAIT_HANDSHAKE: case NGTCP2_CS_CLIENT_TLS_HANDSHAKE_FAILED: - return conn_read_handshake(conn, path, pi, pkt, pktlen, ts); + nread = conn_read_handshake(conn, path, pi, pkt, pktlen, ts); + if (nread < 0) { + return (int)nread; + } + + if ((size_t)nread == pktlen) { + return 0; + } + + assert(conn->pktns.crypto.rx.ckm); + + pkt += nread; + pktlen -= (size_t)nread; + + break; case NGTCP2_CS_SERVER_INITIAL: case NGTCP2_CS_SERVER_WAIT_HANDSHAKE: case NGTCP2_CS_SERVER_TLS_HANDSHAKE_FAILED: @@ -8694,7 +9872,22 @@ int ngtcp2_conn_read_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, return 0; } - return conn_read_handshake(conn, path, pi, pkt, pktlen, ts); + + nread = conn_read_handshake(conn, path, pi, pkt, pktlen, ts); + if (nread < 0) { + return (int)nread; + } + + if ((size_t)nread == pktlen) { + return 0; + } + + assert(conn->pktns.crypto.rx.ckm); + + pkt += nread; + pktlen -= (size_t)nread; + + break; case NGTCP2_CS_CLOSING: return NGTCP2_ERR_CLOSING; case NGTCP2_CS_DRAINING: @@ -8704,11 +9897,13 @@ int ngtcp2_conn_read_pkt(ngtcp2_conn *conn, const ngtcp2_path *path, if (rv != 0) { return rv; } - return conn_recv_cpkt(conn, path, pi, pkt, pktlen, ts); + break; default: assert(0); abort(); } + + return conn_recv_cpkt(conn, path, pi, pkt, pktlen, ts); } /* @@ -8731,9 +9926,10 @@ static int conn_check_pkt_num_exhausted(ngtcp2_conn *conn) { static ngtcp2_ssize conn_retransmit_retry_early(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, + uint8_t flags, ngtcp2_tstamp ts) { - return conn_write_pkt(conn, pi, dest, destlen, NULL, NGTCP2_PKT_0RTT, - NGTCP2_WRITE_PKT_FLAG_NONE, ts); + return conn_write_pkt(conn, pi, dest, destlen, NULL, NGTCP2_PKT_0RTT, flags, + ts); } /* @@ -8746,11 +9942,45 @@ static int conn_handshake_probe_left(ngtcp2_conn *conn) { conn->hs_pktns->rtb.probe_pkt_left; } +/* + * conn_validate_early_transport_params_limits validates that the + * limits in transport parameters remembered by client for early data + * are not reduced. This function is only used by client and should + * only be called when early data is accepted by server. + */ +static int conn_validate_early_transport_params_limits(ngtcp2_conn *conn) { + const ngtcp2_transport_params *params = conn->remote.transport_params; + + assert(!conn->server); + assert(params); + + if (conn->early.transport_params.active_connection_id_limit > + params->active_connection_id_limit || + conn->early.transport_params.initial_max_data > + params->initial_max_data || + conn->early.transport_params.initial_max_stream_data_bidi_local > + params->initial_max_stream_data_bidi_local || + conn->early.transport_params.initial_max_stream_data_bidi_remote > + params->initial_max_stream_data_bidi_remote || + conn->early.transport_params.initial_max_stream_data_uni > + params->initial_max_stream_data_uni || + conn->early.transport_params.initial_max_streams_bidi > + params->initial_max_streams_bidi || + conn->early.transport_params.initial_max_streams_uni > + params->initial_max_streams_uni || + conn->early.transport_params.max_datagram_frame_size > + params->max_datagram_frame_size) { + return NGTCP2_ERR_PROTO; + } + + return 0; +} + /* * conn_write_handshake writes QUIC handshake packets to the buffer - * pointed by |dest| of length |destlen|. |early_datalen| specifies - * the expected length of early data to send. Specify 0 to - * |early_datalen| if there is no early data. + * pointed by |dest| of length |destlen|. |write_datalen| specifies + * the expected length of 0RTT or 1RTT packet payload. Specify 0 to + * |write_datalen| if there is no such data. * * This function returns the number of bytes written to the buffer, or * one of the following negative error codes: @@ -8771,14 +10001,12 @@ static int conn_handshake_probe_left(ngtcp2_conn *conn) { */ static ngtcp2_ssize conn_write_handshake(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, - size_t early_datalen, + uint64_t write_datalen, ngtcp2_tstamp ts) { int rv; ngtcp2_ssize res = 0, nwrite = 0, early_spktlen = 0; size_t origlen = destlen; - size_t server_tx_left; - ngtcp2_conn_stat *cstat = &conn->cstat; - size_t pending_early_datalen; + uint64_t pending_early_datalen; ngtcp2_dcid *dcid; ngtcp2_preferred_addr *paddr; @@ -8786,27 +10014,30 @@ static ngtcp2_ssize conn_write_handshake(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, case NGTCP2_CS_CLIENT_INITIAL: pending_early_datalen = conn_retry_early_payloadlen(conn); if (pending_early_datalen) { - early_datalen = pending_early_datalen; + write_datalen = pending_early_datalen; } if (!(conn->flags & NGTCP2_CONN_FLAG_RECV_RETRY)) { nwrite = - conn_write_client_initial(conn, pi, dest, destlen, early_datalen, ts); + conn_write_client_initial(conn, pi, dest, destlen, write_datalen, ts); if (nwrite <= 0) { return nwrite; } } else { nwrite = conn_write_handshake_pkt( conn, pi, dest, destlen, NGTCP2_PKT_INITIAL, - NGTCP2_WRITE_PKT_FLAG_NONE, early_datalen, ts); + NGTCP2_WRITE_PKT_FLAG_NONE, write_datalen, ts); if (nwrite < 0) { return nwrite; } } if (pending_early_datalen) { - early_spktlen = conn_retransmit_retry_early(conn, pi, dest + nwrite, - destlen - (size_t)nwrite, ts); + early_spktlen = conn_retransmit_retry_early( + conn, pi, dest + nwrite, destlen - (size_t)nwrite, + nwrite ? NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING + : NGTCP2_WRITE_PKT_FLAG_NONE, + ts); if (early_spktlen < 0) { assert(ngtcp2_err_is_fatal((int)early_spktlen)); @@ -8826,12 +10057,12 @@ static ngtcp2_ssize conn_write_handshake(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, if (!(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED_HANDLED)) { pending_early_datalen = conn_retry_early_payloadlen(conn); if (pending_early_datalen) { - early_datalen = pending_early_datalen; + write_datalen = pending_early_datalen; } } nwrite = - conn_write_handshake_pkts(conn, pi, dest, destlen, early_datalen, ts); + conn_write_handshake_pkts(conn, pi, dest, destlen, write_datalen, ts); if (nwrite < 0) { return nwrite; } @@ -8841,9 +10072,10 @@ static ngtcp2_ssize conn_write_handshake(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, destlen -= (size_t)nwrite; } - if (!(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED)) { + if (!conn_is_handshake_completed(conn)) { if (!(conn->flags & NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED)) { - nwrite = conn_retransmit_retry_early(conn, pi, dest, destlen, ts); + nwrite = conn_retransmit_retry_early(conn, pi, dest, destlen, + NGTCP2_WRITE_PKT_FLAG_NONE, ts); if (nwrite < 0) { return nwrite; } @@ -8866,13 +10098,30 @@ static ngtcp2_ssize conn_write_handshake(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, return NGTCP2_ERR_REQUIRED_TRANSPORT_PARAM; } + if ((conn->flags & NGTCP2_CONN_FLAG_EARLY_KEY_INSTALLED) && + !(conn->flags & NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED)) { + rv = conn_validate_early_transport_params_limits(conn); + if (rv != 0) { + return rv; + } + } + + /* Server might increase stream data limits. Extend it if we have + streams created for early data. */ + rv = conn_sync_stream_data_limit(conn); + if (rv != 0) { + return rv; + } + conn->state = NGTCP2_CS_POST_HANDSHAKE; - if (conn->remote.transport_params.preferred_address_present) { - assert(!ngtcp2_ringbuf_full(&conn->dcid.unused)); + assert(conn->remote.transport_params); - paddr = &conn->remote.transport_params.preferred_address; - dcid = ngtcp2_ringbuf_push_back(&conn->dcid.unused); + if (conn->remote.transport_params->preferred_address_present) { + assert(!ngtcp2_ringbuf_full(&conn->dcid.unused.rb)); + + paddr = &conn->remote.transport_params->preferred_address; + dcid = ngtcp2_ringbuf_push_back(&conn->dcid.unused.rb); ngtcp2_dcid_init(dcid, 1, &paddr->cid, paddr->stateless_reset_token); rv = ngtcp2_gaptr_push(&conn->dcid.seqgap, 1, 1); @@ -8881,11 +10130,12 @@ static ngtcp2_ssize conn_write_handshake(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, } } - if (conn->remote.transport_params.stateless_reset_token_present) { + if (conn->remote.transport_params->stateless_reset_token_present) { assert(conn->dcid.current.seq == 0); - memcpy(conn->dcid.current.token, - conn->remote.transport_params.stateless_reset_token, - sizeof(conn->dcid.current.token)); + assert(!(conn->dcid.current.flags & NGTCP2_DCID_FLAG_TOKEN_PRESENT)); + ngtcp2_dcid_set_token( + &conn->dcid.current, + conn->remote.transport_params->stateless_reset_token); } rv = conn_call_activate_dcid(conn, &conn->dcid.current); @@ -8895,15 +10145,17 @@ static ngtcp2_ssize conn_write_handshake(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, conn_process_early_rtb(conn); - rv = conn_process_buffered_protected_pkt(conn, &conn->pktns, ts); - if (rv != 0) { - return (ngtcp2_ssize)rv; + if (!conn->local.settings.no_pmtud) { + rv = conn_start_pmtud(conn); + if (rv != 0) { + return rv; + } } return res; case NGTCP2_CS_SERVER_INITIAL: - nwrite = conn_write_handshake_pkts(conn, pi, dest, destlen, - /* early_datalen = */ 0, ts); + nwrite = + conn_write_handshake_pkts(conn, pi, dest, destlen, write_datalen, ts); if (nwrite < 0) { return nwrite; } @@ -8914,47 +10166,30 @@ static ngtcp2_ssize conn_write_handshake(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, return nwrite; case NGTCP2_CS_SERVER_WAIT_HANDSHAKE: - if (!(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED)) { - if (!(conn->dcid.current.flags & NGTCP2_DCID_FLAG_PATH_VALIDATED)) { - server_tx_left = conn_server_tx_left(conn, &conn->dcid.current); - if (server_tx_left == 0) { - if (cstat->loss_detection_timer != UINT64_MAX) { - ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_RCV, - "loss detection timer canceled"); - cstat->loss_detection_timer = UINT64_MAX; - cstat->pto_count = 0; - } - return 0; - } - } - - if (conn_handshake_probe_left(conn) || !conn_cwnd_is_zero(conn)) { - nwrite = conn_write_handshake_pkts(conn, pi, dest, destlen, - /* early_datalen = */ 0, ts); - if (nwrite < 0) { - return nwrite; - } - - res += nwrite; - dest += nwrite; - destlen -= (size_t)nwrite; + if (conn_handshake_probe_left(conn) || !conn_cwnd_is_zero(conn)) { + nwrite = + conn_write_handshake_pkts(conn, pi, dest, destlen, write_datalen, ts); + if (nwrite < 0) { + return nwrite; } - if (res == 0) { - nwrite = conn_write_handshake_ack_pkts(conn, pi, dest, origlen, ts); - if (nwrite < 0) { - return nwrite; - } + res += nwrite; + dest += nwrite; + destlen -= (size_t)nwrite; + } - res += nwrite; - dest += nwrite; - origlen -= (size_t)nwrite; + if (res == 0) { + nwrite = conn_write_handshake_ack_pkts(conn, pi, dest, origlen, ts); + if (nwrite < 0) { + return nwrite; } - return res; + res += nwrite; + dest += nwrite; + origlen -= (size_t)nwrite; } - return 0; + return res; case NGTCP2_CS_CLOSING: return NGTCP2_ERR_CLOSING; case NGTCP2_CS_DRAINING: @@ -8996,17 +10231,17 @@ static ngtcp2_ssize conn_client_write_handshake(ngtcp2_conn *conn, int send_stream = 0; int send_datagram = 0; ngtcp2_ssize spktlen, early_spktlen; - int was_client_initial; - size_t datalen; - size_t early_datalen = 0; + uint64_t datalen; + uint64_t write_datalen = 0; uint8_t wflags = NGTCP2_WRITE_PKT_FLAG_NONE; int ppe_pending = (conn->flags & NGTCP2_CONN_FLAG_PPE_PENDING) != 0; + uint32_t version; assert(!conn->server); /* conn->early.ckm might be created in the first call of conn_handshake(). Check it later. */ - if (vmsg && !(conn->flags & NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED)) { + if (vmsg) { switch (vmsg->type) { case NGTCP2_VMSG_TYPE_STREAM: datalen = ngtcp2_vec_len(vmsg->stream.data, vmsg->stream.datacnt); @@ -9018,9 +10253,11 @@ static ngtcp2_ssize conn_client_write_handshake(ngtcp2_conn *conn, (vmsg->stream.strm->tx.max_offset - vmsg->stream.strm->tx.offset) && (conn->tx.max_offset - conn->tx.offset))); if (send_stream) { - early_datalen = - conn_enforce_flow_control(conn, vmsg->stream.strm, datalen) + - NGTCP2_STREAM_OVERHEAD; + write_datalen = + conn_enforce_flow_control(conn, vmsg->stream.strm, datalen); + write_datalen = + ngtcp2_min(write_datalen, NGTCP2_MIN_COALESCED_PAYLOADLEN); + write_datalen += NGTCP2_STREAM_OVERHEAD; if (vmsg->stream.flags & NGTCP2_WRITE_STREAM_FLAG_MORE) { wflags |= NGTCP2_WRITE_PKT_FLAG_MORE; @@ -9031,11 +10268,9 @@ static ngtcp2_ssize conn_client_write_handshake(ngtcp2_conn *conn, break; case NGTCP2_VMSG_TYPE_DATAGRAM: datalen = ngtcp2_vec_len(vmsg->datagram.data, vmsg->datagram.datacnt); - /* TODO Do we need this? DATAGRAM is independent from STREAM - data and no retransmission */ send_datagram = conn_retry_early_payloadlen(conn) == 0; if (send_datagram) { - early_datalen = datalen + NGTCP2_DATAGRAM_OVERHEAD; + write_datalen = datalen + NGTCP2_DATAGRAM_OVERHEAD; if (vmsg->datagram.flags & NGTCP2_WRITE_DATAGRAM_FLAG_MORE) { wflags |= NGTCP2_WRITE_PKT_FLAG_MORE; @@ -9048,32 +10283,39 @@ static ngtcp2_ssize conn_client_write_handshake(ngtcp2_conn *conn, } if (!ppe_pending) { - was_client_initial = conn->state == NGTCP2_CS_CLIENT_INITIAL; - spktlen = conn_write_handshake(conn, pi, dest, destlen, early_datalen, ts); + spktlen = conn_write_handshake(conn, pi, dest, destlen, write_datalen, ts); if (spktlen < 0) { return spktlen; } - if (conn->pktns.crypto.tx.ckm || !conn->early.ckm || - (!send_stream && !send_datagram)) { + if ((conn->flags & NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED) || + !conn->early.ckm || (!send_stream && !send_datagram)) { return spktlen; } + + /* If spktlen > 0, we are making a compound packet. If Initial + packet is written, we have to pad bytes to 0-RTT packet. */ + version = conn->negotiated_version ? conn->negotiated_version + : conn->client_chosen_version; + if (spktlen > 0 && + ngtcp2_pkt_get_type_long(version, dest[0]) == NGTCP2_PKT_INITIAL) { + wflags |= NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING; + conn->pkt.require_padding = 1; + } else { + conn->pkt.require_padding = 0; + } } else { + assert(!conn->pktns.crypto.rx.ckm); assert(!conn->pktns.crypto.tx.ckm); assert(conn->early.ckm); - was_client_initial = conn->pkt.was_client_initial; + if (conn->pkt.require_padding) { + wflags |= NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING; + } spktlen = conn->pkt.hs_spktlen; } - /* If spktlen > 0, we are making a compound packet. If Initial - packet is written, we have to pad bytes to 0-RTT packet. */ - - if (spktlen && was_client_initial) { - wflags |= NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING; - } - dest += spktlen; destlen -= (size_t)spktlen; @@ -9089,7 +10331,6 @@ static ngtcp2_ssize conn_client_write_handshake(ngtcp2_conn *conn, case NGTCP2_ERR_STREAM_DATA_BLOCKED: return spktlen; case NGTCP2_ERR_WRITE_MORE: - conn->pkt.was_client_initial = was_client_initial; conn->pkt.hs_spktlen = spktlen; break; } @@ -9107,7 +10348,7 @@ void ngtcp2_conn_handshake_completed(ngtcp2_conn *conn) { } int ngtcp2_conn_get_handshake_completed(ngtcp2_conn *conn) { - return (conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED) && + return conn_is_handshake_completed(conn) && (conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED_HANDLED); } @@ -9136,35 +10377,29 @@ int ngtcp2_accept(ngtcp2_pkt_hd *dest, const uint8_t *pkt, size_t pktlen) { } if (pktlen == 0 || (pkt[0] & NGTCP2_HEADER_FORM_BIT) == 0) { - return -1; + return NGTCP2_ERR_INVALID_ARGUMENT; } nread = ngtcp2_pkt_decode_hd_long(p, pkt, pktlen); if (nread < 0) { - return -1; + return (int)nread; } switch (p->type) { case NGTCP2_PKT_INITIAL: - if (pktlen < NGTCP2_MIN_INITIAL_PKTLEN) { - return -1; - } - if (p->token.len == 0 && p->dcid.datalen < NGTCP2_MIN_INITIAL_DCIDLEN) { - return -1; - } break; case NGTCP2_PKT_0RTT: /* 0-RTT packet may arrive before Initial packet due to - re-ordering. */ - break; + re-ordering. ngtcp2 does not buffer 0RTT packet unless the + very first Initial packet is received or token is received. */ + return NGTCP2_ERR_RETRY; default: - return -1; + return NGTCP2_ERR_INVALID_ARGUMENT; } - if (p->version != NGTCP2_PROTO_VER_V1 && - (p->version < NGTCP2_PROTO_VER_DRAFT_MIN || - NGTCP2_PROTO_VER_DRAFT_MAX < p->version)) { - return 1; + if (pktlen < NGTCP2_MAX_UDP_PAYLOAD_SIZE || + (p->token.len == 0 && p->dcid.datalen < NGTCP2_MIN_INITIAL_DCIDLEN)) { + return NGTCP2_ERR_INVALID_ARGUMENT; } return 0; @@ -9178,6 +10413,7 @@ int ngtcp2_conn_install_initial_key( ngtcp2_pktns *pktns = conn->in_pktns; int rv; + assert(ivlen >= 8); assert(pktns); conn_call_delete_crypto_cipher_ctx(conn, &pktns->crypto.rx.hp_ctx); @@ -9220,12 +10456,64 @@ int ngtcp2_conn_install_initial_key( return 0; } +int ngtcp2_conn_install_vneg_initial_key( + ngtcp2_conn *conn, uint32_t version, + const ngtcp2_crypto_aead_ctx *rx_aead_ctx, const uint8_t *rx_iv, + const ngtcp2_crypto_cipher_ctx *rx_hp_ctx, + const ngtcp2_crypto_aead_ctx *tx_aead_ctx, const uint8_t *tx_iv, + const ngtcp2_crypto_cipher_ctx *tx_hp_ctx, size_t ivlen) { + int rv; + + assert(ivlen >= 8); + + conn_call_delete_crypto_cipher_ctx(conn, &conn->vneg.rx.hp_ctx); + conn->vneg.rx.hp_ctx.native_handle = NULL; + + if (conn->vneg.rx.ckm) { + conn_call_delete_crypto_aead_ctx(conn, &conn->vneg.rx.ckm->aead_ctx); + ngtcp2_crypto_km_del(conn->vneg.rx.ckm, conn->mem); + conn->vneg.rx.ckm = NULL; + } + + conn_call_delete_crypto_cipher_ctx(conn, &conn->vneg.tx.hp_ctx); + conn->vneg.tx.hp_ctx.native_handle = NULL; + + if (conn->vneg.tx.ckm) { + conn_call_delete_crypto_aead_ctx(conn, &conn->vneg.tx.ckm->aead_ctx); + ngtcp2_crypto_km_del(conn->vneg.tx.ckm, conn->mem); + conn->vneg.tx.ckm = NULL; + } + + rv = ngtcp2_crypto_km_new(&conn->vneg.rx.ckm, NULL, 0, NULL, rx_iv, ivlen, + conn->mem); + if (rv != 0) { + return rv; + } + + rv = ngtcp2_crypto_km_new(&conn->vneg.tx.ckm, NULL, 0, NULL, tx_iv, ivlen, + conn->mem); + if (rv != 0) { + return rv; + } + + /* Take owner ship after we are sure that no failure occurs, so that + caller can delete these contexts on failure. */ + conn->vneg.rx.ckm->aead_ctx = *rx_aead_ctx; + conn->vneg.rx.hp_ctx = *rx_hp_ctx; + conn->vneg.tx.ckm->aead_ctx = *tx_aead_ctx; + conn->vneg.tx.hp_ctx = *tx_hp_ctx; + conn->vneg.version = version; + + return 0; +} + int ngtcp2_conn_install_rx_handshake_key( ngtcp2_conn *conn, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *iv, size_t ivlen, const ngtcp2_crypto_cipher_ctx *hp_ctx) { ngtcp2_pktns *pktns = conn->hs_pktns; int rv; + assert(ivlen >= 8); assert(pktns); assert(!pktns->crypto.rx.hp_ctx.native_handle); assert(!pktns->crypto.rx.ckm); @@ -9238,6 +10526,16 @@ int ngtcp2_conn_install_rx_handshake_key( pktns->crypto.rx.hp_ctx = *hp_ctx; + rv = conn_call_recv_rx_key(conn, NGTCP2_CRYPTO_LEVEL_HANDSHAKE); + if (rv != 0) { + ngtcp2_crypto_km_del(pktns->crypto.rx.ckm, conn->mem); + pktns->crypto.rx.ckm = NULL; + + memset(&pktns->crypto.rx.hp_ctx, 0, sizeof(pktns->crypto.rx.hp_ctx)); + + return rv; + } + return 0; } @@ -9247,6 +10545,7 @@ int ngtcp2_conn_install_tx_handshake_key( ngtcp2_pktns *pktns = conn->hs_pktns; int rv; + assert(ivlen >= 8); assert(pktns); assert(!pktns->crypto.tx.hp_ctx.native_handle); assert(!pktns->crypto.tx.ckm); @@ -9260,7 +10559,20 @@ int ngtcp2_conn_install_tx_handshake_key( pktns->crypto.tx.hp_ctx = *hp_ctx; if (conn->server) { - return ngtcp2_conn_commit_local_transport_params(conn); + rv = ngtcp2_conn_commit_local_transport_params(conn); + if (rv != 0) { + return rv; + } + } + + rv = conn_call_recv_tx_key(conn, NGTCP2_CRYPTO_LEVEL_HANDSHAKE); + if (rv != 0) { + ngtcp2_crypto_km_del(pktns->crypto.tx.ckm, conn->mem); + pktns->crypto.tx.ckm = NULL; + + memset(&pktns->crypto.tx.hp_ctx, 0, sizeof(pktns->crypto.tx.hp_ctx)); + + return rv; } return 0; @@ -9272,6 +10584,7 @@ int ngtcp2_conn_install_early_key(ngtcp2_conn *conn, const ngtcp2_crypto_cipher_ctx *hp_ctx) { int rv; + assert(ivlen >= 8); assert(!conn->early.hp_ctx.native_handle); assert(!conn->early.ckm); @@ -9283,6 +10596,22 @@ int ngtcp2_conn_install_early_key(ngtcp2_conn *conn, conn->early.hp_ctx = *hp_ctx; + conn->flags |= NGTCP2_CONN_FLAG_EARLY_KEY_INSTALLED; + + if (conn->server) { + rv = conn_call_recv_rx_key(conn, NGTCP2_CRYPTO_LEVEL_EARLY); + } else { + rv = conn_call_recv_tx_key(conn, NGTCP2_CRYPTO_LEVEL_EARLY); + } + if (rv != 0) { + ngtcp2_crypto_km_del(conn->early.ckm, conn->mem); + conn->early.ckm = NULL; + + memset(&conn->early.hp_ctx, 0, sizeof(conn->early.hp_ctx)); + + return rv; + } + return 0; } @@ -9294,6 +10623,7 @@ int ngtcp2_conn_install_rx_key(ngtcp2_conn *conn, const uint8_t *secret, ngtcp2_pktns *pktns = &conn->pktns; int rv; + assert(ivlen >= 8); assert(!pktns->crypto.rx.hp_ctx.native_handle); assert(!pktns->crypto.rx.ckm); @@ -9306,22 +10636,42 @@ int ngtcp2_conn_install_rx_key(ngtcp2_conn *conn, const uint8_t *secret, pktns->crypto.rx.hp_ctx = *hp_ctx; if (!conn->server) { - conn->remote.transport_params = conn->remote.pending_transport_params; - conn_sync_stream_id_limit(conn); - conn->tx.max_offset = conn->remote.transport_params.initial_max_data; - } + if (conn->remote.pending_transport_params) { + ngtcp2_transport_params_del(conn->remote.transport_params, conn->mem); - return 0; -} + conn->remote.transport_params = conn->remote.pending_transport_params; + conn->remote.pending_transport_params = NULL; + conn_sync_stream_id_limit(conn); + conn->tx.max_offset = conn->remote.transport_params->initial_max_data; + } -int ngtcp2_conn_install_tx_key(ngtcp2_conn *conn, const uint8_t *secret, - size_t secretlen, - const ngtcp2_crypto_aead_ctx *aead_ctx, - const uint8_t *iv, size_t ivlen, - const ngtcp2_crypto_cipher_ctx *hp_ctx) { - ngtcp2_pktns *pktns = &conn->pktns; + if (conn->early.ckm) { + conn_discard_early_key(conn); + } + } + + rv = conn_call_recv_rx_key(conn, NGTCP2_CRYPTO_LEVEL_APPLICATION); + if (rv != 0) { + ngtcp2_crypto_km_del(pktns->crypto.rx.ckm, conn->mem); + pktns->crypto.rx.ckm = NULL; + + memset(&pktns->crypto.rx.hp_ctx, 0, sizeof(pktns->crypto.rx.hp_ctx)); + + return rv; + } + + return 0; +} + +int ngtcp2_conn_install_tx_key(ngtcp2_conn *conn, const uint8_t *secret, + size_t secretlen, + const ngtcp2_crypto_aead_ctx *aead_ctx, + const uint8_t *iv, size_t ivlen, + const ngtcp2_crypto_cipher_ctx *hp_ctx) { + ngtcp2_pktns *pktns = &conn->pktns; int rv; + assert(ivlen >= 8); assert(!pktns->crypto.tx.hp_ctx.native_handle); assert(!pktns->crypto.tx.ckm); @@ -9334,13 +10684,28 @@ int ngtcp2_conn_install_tx_key(ngtcp2_conn *conn, const uint8_t *secret, pktns->crypto.tx.hp_ctx = *hp_ctx; if (conn->server) { - conn->remote.transport_params = conn->remote.pending_transport_params; - conn_sync_stream_id_limit(conn); - conn->tx.max_offset = conn->remote.transport_params.initial_max_data; + if (conn->remote.pending_transport_params) { + ngtcp2_transport_params_del(conn->remote.transport_params, conn->mem); + + conn->remote.transport_params = conn->remote.pending_transport_params; + conn->remote.pending_transport_params = NULL; + conn_sync_stream_id_limit(conn); + conn->tx.max_offset = conn->remote.transport_params->initial_max_data; + } } else if (conn->early.ckm) { conn_discard_early_key(conn); } + rv = conn_call_recv_tx_key(conn, NGTCP2_CRYPTO_LEVEL_APPLICATION); + if (rv != 0) { + ngtcp2_crypto_km_del(pktns->crypto.tx.ckm, conn->mem); + pktns->crypto.tx.ckm = NULL; + + memset(&pktns->crypto.tx.hp_ctx, 0, sizeof(pktns->crypto.tx.hp_ctx)); + + return rv; + } + return 0; } @@ -9358,7 +10723,59 @@ int ngtcp2_conn_initiate_key_update(ngtcp2_conn *conn, ngtcp2_tstamp ts) { return NGTCP2_ERR_INVALID_STATE; } - conn_rotate_keys(conn, NGTCP2_MAX_PKT_NUM); + conn_rotate_keys(conn, NGTCP2_MAX_PKT_NUM, /* initiator = */ 1); + + return 0; +} + +/* + * conn_retire_stale_bound_dcid retires stale destination connection + * ID in conn->dcid.bound to keep some unused destination connection + * IDs available. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGTCP2_ERR_NOMEM + * Out of memory. + */ +static int conn_retire_stale_bound_dcid(ngtcp2_conn *conn, + ngtcp2_duration timeout, + ngtcp2_tstamp ts) { + size_t i; + ngtcp2_dcid *dcid, *last; + int rv; + + for (i = 0; i < ngtcp2_ringbuf_len(&conn->dcid.bound.rb);) { + dcid = ngtcp2_ringbuf_get(&conn->dcid.bound.rb, i); + + assert(dcid->cid.datalen); + + if (dcid->bound_ts + timeout > ts) { + ++i; + continue; + } + + rv = conn_retire_dcid_seq(conn, dcid->seq); + if (rv != 0) { + return rv; + } + + if (i == 0) { + ngtcp2_ringbuf_pop_front(&conn->dcid.bound.rb); + continue; + } + + if (i == ngtcp2_ringbuf_len(&conn->dcid.bound.rb) - 1) { + ngtcp2_ringbuf_pop_back(&conn->dcid.bound.rb); + break; + } + + last = ngtcp2_ringbuf_get(&conn->dcid.bound.rb, + ngtcp2_ringbuf_len(&conn->dcid.bound.rb) - 1); + ngtcp2_dcid_copy(dcid, last); + ngtcp2_ringbuf_pop_back(&conn->dcid.bound.rb); + } return 0; } @@ -9372,21 +10789,41 @@ ngtcp2_tstamp ngtcp2_conn_internal_expiry(ngtcp2_conn *conn) { ngtcp2_duration pto = conn_compute_pto(conn, &conn->pktns); ngtcp2_scid *scid; ngtcp2_dcid *dcid; + size_t i, len; if (conn->pv) { res = ngtcp2_pv_next_expiry(conn->pv); } + if (conn->pmtud) { + res = ngtcp2_min(res, conn->pmtud->expiry); + } + if (!ngtcp2_pq_empty(&conn->scid.used)) { scid = ngtcp2_struct_of(ngtcp2_pq_top(&conn->scid.used), ngtcp2_scid, pe); - if (scid->ts_retired != UINT64_MAX) { - res = ngtcp2_min(res, scid->ts_retired + pto); + if (scid->retired_ts != UINT64_MAX) { + t = scid->retired_ts + pto; + res = ngtcp2_min(res, t); } } - if (ngtcp2_ringbuf_len(&conn->dcid.retired)) { - dcid = ngtcp2_ringbuf_get(&conn->dcid.retired, 0); - res = ngtcp2_min(res, dcid->ts_retired + pto); + if (ngtcp2_ringbuf_len(&conn->dcid.retired.rb)) { + dcid = ngtcp2_ringbuf_get(&conn->dcid.retired.rb, 0); + t = dcid->retired_ts + pto; + res = ngtcp2_min(res, t); + } + + if (conn->dcid.current.cid.datalen) { + len = ngtcp2_ringbuf_len(&conn->dcid.bound.rb); + for (i = 0; i < len; ++i) { + dcid = ngtcp2_ringbuf_get(&conn->dcid.bound.rb, i); + + assert(dcid->cid.datalen); + assert(dcid->bound_ts != UINT64_MAX); + + t = dcid->bound_ts + 3 * pto; + res = ngtcp2_min(res, t); + } } if (conn->server && conn->early.ckm && @@ -9408,28 +10845,60 @@ ngtcp2_tstamp ngtcp2_conn_ack_delay_expiry(ngtcp2_conn *conn) { return UINT64_MAX; } +static ngtcp2_tstamp conn_handshake_expiry(ngtcp2_conn *conn) { + if (conn_is_handshake_completed(conn) || + conn->local.settings.handshake_timeout == UINT64_MAX) { + return UINT64_MAX; + } + + return conn->local.settings.initial_ts + + conn->local.settings.handshake_timeout; +} + ngtcp2_tstamp ngtcp2_conn_get_expiry(ngtcp2_conn *conn) { ngtcp2_tstamp t1 = ngtcp2_conn_loss_detection_expiry(conn); ngtcp2_tstamp t2 = ngtcp2_conn_ack_delay_expiry(conn); ngtcp2_tstamp t3 = ngtcp2_conn_internal_expiry(conn); ngtcp2_tstamp t4 = ngtcp2_conn_lost_pkt_expiry(conn); + ngtcp2_tstamp t5 = conn_keep_alive_expiry(conn); + ngtcp2_tstamp t6 = conn_handshake_expiry(conn); + ngtcp2_tstamp t7 = ngtcp2_conn_get_idle_expiry(conn); ngtcp2_tstamp res = ngtcp2_min(t1, t2); res = ngtcp2_min(res, t3); - return ngtcp2_min(res, t4); + res = ngtcp2_min(res, t4); + res = ngtcp2_min(res, t5); + res = ngtcp2_min(res, t6); + res = ngtcp2_min(res, t7); + return ngtcp2_min(res, conn->tx.pacing.next_ts); } int ngtcp2_conn_handle_expiry(ngtcp2_conn *conn, ngtcp2_tstamp ts) { int rv; ngtcp2_duration pto = conn_compute_pto(conn, &conn->pktns); + if (ngtcp2_conn_get_idle_expiry(conn) <= ts) { + return NGTCP2_ERR_IDLE_CLOSE; + } + ngtcp2_conn_cancel_expired_ack_delay_timer(conn, ts); + conn_cancel_expired_keep_alive_timer(conn, ts); + + conn_cancel_expired_pkt_tx_timer(conn, ts); + ngtcp2_conn_remove_lost_pkt(conn, ts); if (conn->pv) { ngtcp2_pv_cancel_expired_timer(conn->pv, ts); } + if (conn->pmtud) { + ngtcp2_pmtud_handle_expiry(conn->pmtud, ts); + if (ngtcp2_pmtud_finished(conn->pmtud)) { + ngtcp2_conn_stop_pmtud(conn); + } + } + if (ngtcp2_conn_loss_detection_expiry(conn) <= ts) { rv = ngtcp2_conn_on_loss_detection_timer(conn, ts); if (rv != 0) { @@ -9437,6 +10906,13 @@ int ngtcp2_conn_handle_expiry(ngtcp2_conn *conn, ngtcp2_tstamp ts) { } } + if (conn->dcid.current.cid.datalen) { + rv = conn_retire_stale_bound_dcid(conn, 3 * pto, ts); + if (rv != 0) { + return rv; + } + } + rv = conn_remove_retired_connection_id(conn, pto, ts); if (rv != 0) { return rv; @@ -9449,26 +10925,38 @@ int ngtcp2_conn_handle_expiry(ngtcp2_conn *conn, ngtcp2_tstamp ts) { } } + if (!conn_is_handshake_completed(conn) && + conn->local.settings.handshake_timeout != UINT64_MAX && + conn->local.settings.initial_ts + + conn->local.settings.handshake_timeout <= + ts) { + return NGTCP2_ERR_HANDSHAKE_TIMEOUT; + } + return 0; } static void acktr_cancel_expired_ack_delay_timer(ngtcp2_acktr *acktr, + ngtcp2_duration max_ack_delay, ngtcp2_tstamp ts) { if (!(acktr->flags & NGTCP2_ACKTR_FLAG_CANCEL_TIMER) && - acktr->first_unacked_ts <= ts) { + acktr->first_unacked_ts != UINT64_MAX && + acktr->first_unacked_ts + max_ack_delay <= ts) { acktr->flags |= NGTCP2_ACKTR_FLAG_CANCEL_TIMER; } } void ngtcp2_conn_cancel_expired_ack_delay_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts) { + ngtcp2_duration ack_delay = conn_compute_ack_delay(conn); + if (conn->in_pktns) { - acktr_cancel_expired_ack_delay_timer(&conn->in_pktns->acktr, ts); + acktr_cancel_expired_ack_delay_timer(&conn->in_pktns->acktr, 0, ts); } if (conn->hs_pktns) { - acktr_cancel_expired_ack_delay_timer(&conn->hs_pktns->acktr, ts); + acktr_cancel_expired_ack_delay_timer(&conn->hs_pktns->acktr, 0, ts); } - acktr_cancel_expired_ack_delay_timer(&conn->pktns.acktr, ts); + acktr_cancel_expired_ack_delay_timer(&conn->pktns.acktr, ack_delay, ts); } ngtcp2_tstamp ngtcp2_conn_lost_pkt_expiry(ngtcp2_conn *conn) { @@ -9514,6 +11002,42 @@ void ngtcp2_conn_remove_lost_pkt(ngtcp2_conn *conn, ngtcp2_tstamp ts) { ngtcp2_rtb_remove_expired_lost_pkt(&conn->pktns.rtb, pto, ts); } +/* + * select_preferred_version selects the most preferred version. + * |fallback_version| is chosen if no preference is made, or + * |preferred_versions| does not include any of |chosen_version| or + * |other_versions|. |chosen_version| is treated as an extra other + * version. + */ +static uint32_t select_preferred_version(const uint32_t *preferred_versions, + size_t preferred_versionslen, + uint32_t chosen_version, + const uint8_t *other_versions, + size_t other_versionslen, + uint32_t fallback_version) { + size_t i, j; + + if (!preferred_versionslen || + (!other_versionslen && chosen_version == fallback_version)) { + return fallback_version; + } + + for (i = 0; i < preferred_versionslen; ++i) { + if (preferred_versions[i] == chosen_version) { + return chosen_version; + } + for (j = 0; j < other_versionslen; j += sizeof(uint32_t)) { + if (preferred_versions[i] != ngtcp2_get_uint32(&other_versions[j])) { + continue; + } + + return preferred_versions[i]; + } + } + + return fallback_version; +} + /* * conn_client_validate_transport_params validates |params| as client. * |params| must be sent with Encrypted Extensions. @@ -9521,12 +11045,11 @@ void ngtcp2_conn_remove_lost_pkt(ngtcp2_conn *conn, ngtcp2_tstamp ts) { * This function returns 0 if it succeeds, or one of the following * negative error codes: * - * NGTCP2_ERR_PROTO - * Validation against either of original_dcid and retry_scid is - * failed. * NGTCP2_ERR_TRANSPORT_PARAM * params contains preferred address but server chose zero-length * connection ID. + * NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE + * Validation against version negotiation parameters failed. */ static int conn_client_validate_transport_params(ngtcp2_conn *conn, @@ -9551,14 +11074,76 @@ conn_client_validate_transport_params(ngtcp2_conn *conn, return NGTCP2_ERR_TRANSPORT_PARAM; } + if (params->version_info_present) { + if (conn->negotiated_version != params->version_info.chosen_version) { + return NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE; + } + + assert(vneg_other_versions_includes(conn->vneg.other_versions, + conn->vneg.other_versionslen, + conn->negotiated_version)); + } else if (conn->client_chosen_version != conn->negotiated_version || + conn->client_chosen_version != + conn->local.settings.original_version) { + return NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE; + } + + /* When client reacted upon Version Negotiation */ + if (conn->local.settings.original_version != conn->client_chosen_version) { + assert(params->version_info_present); + + /* Server choose original version after Version Negotiation. + Draft does not say this particular case, but this smells like + misbehaved server because server should accept original_version + in the original connection. */ + if (conn->local.settings.original_version == + params->version_info.chosen_version) { + return NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE; + } + + /* Check version downgrade on incompatible version negotiation. */ + if (params->version_info.other_versionslen == 0) { + return NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE; + } + + if (conn->client_chosen_version != + select_preferred_version(conn->vneg.preferred_versions, + conn->vneg.preferred_versionslen, + params->version_info.chosen_version, + params->version_info.other_versions, + params->version_info.other_versionslen, + /* fallback_version = */ 0)) { + return NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE; + } + } + return 0; } +uint32_t +ngtcp2_conn_server_negotiate_version(ngtcp2_conn *conn, + const ngtcp2_version_info *version_info) { + assert(conn->server); + assert(conn->client_chosen_version == version_info->chosen_version); + + return select_preferred_version( + conn->vneg.preferred_versions, conn->vneg.preferred_versionslen, + version_info->chosen_version, version_info->other_versions, + version_info->other_versionslen, version_info->chosen_version); +} + int ngtcp2_conn_set_remote_transport_params( ngtcp2_conn *conn, const ngtcp2_transport_params *params) { int rv; - assert(!(conn->flags & NGTCP2_CONN_FLAG_TRANSPORT_PARAM_RECVED)); + /* We expect this function is called once per QUIC connection, but + GnuTLS server seems to call TLS extension callback twice if it + sends HelloRetryRequest. In practice, same QUIC transport + parameters are sent in the 2nd client flight, just returning 0 + would cause no harm. */ + if (conn->flags & NGTCP2_CONN_FLAG_TRANSPORT_PARAM_RECVED) { + return 0; + } /* Assume that ngtcp2_decode_transport_params sets default value if active_connection_id_limit is omitted. */ @@ -9574,11 +11159,36 @@ int ngtcp2_conn_set_remote_transport_params( return NGTCP2_ERR_TRANSPORT_PARAM; } - if (params->max_udp_payload_size < 1200) { + if (params->max_udp_payload_size < NGTCP2_MAX_UDP_PAYLOAD_SIZE) { return NGTCP2_ERR_TRANSPORT_PARAM; } - if (!conn->server) { + if (conn->server) { + if (params->version_info_present) { + if (params->version_info.chosen_version != conn->client_chosen_version) { + return NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE; + } + + conn->negotiated_version = + ngtcp2_conn_server_negotiate_version(conn, ¶ms->version_info); + if (conn->negotiated_version != conn->client_chosen_version) { + rv = conn_call_version_negotiation(conn, conn->negotiated_version, + &conn->rcid); + if (rv != 0) { + return rv; + } + } + } else { + conn->negotiated_version = conn->client_chosen_version; + } + + conn->local.transport_params.version_info.chosen_version = + conn->negotiated_version; + + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_CON, + "the negotiated version is 0x%08x", + conn->negotiated_version); + } else { rv = conn_client_validate_transport_params(conn, params); if (rv != 0) { return rv; @@ -9596,11 +11206,24 @@ int ngtcp2_conn_set_remote_transport_params( if ((conn->server && conn->pktns.crypto.tx.ckm) || (!conn->server && conn->pktns.crypto.rx.ckm)) { - conn->remote.transport_params = *params; + ngtcp2_transport_params_del(conn->remote.transport_params, conn->mem); + conn->remote.transport_params = NULL; + + rv = ngtcp2_transport_params_copy_new(&conn->remote.transport_params, + params, conn->mem); + if (rv != 0) { + return rv; + } conn_sync_stream_id_limit(conn); - conn->tx.max_offset = conn->remote.transport_params.initial_max_data; + conn->tx.max_offset = conn->remote.transport_params->initial_max_data; } else { - conn->remote.pending_transport_params = *params; + assert(!conn->remote.pending_transport_params); + + rv = ngtcp2_transport_params_copy_new( + &conn->remote.pending_transport_params, params, conn->mem); + if (rv != 0) { + return rv; + } } conn->flags |= NGTCP2_CONN_FLAG_TRANSPORT_PARAM_RECVED; @@ -9608,22 +11231,46 @@ int ngtcp2_conn_set_remote_transport_params( return 0; } -void ngtcp2_conn_get_remote_transport_params(ngtcp2_conn *conn, - ngtcp2_transport_params *params) { - if (conn->pktns.crypto.rx.ckm) { - *params = conn->remote.transport_params; - } else { - *params = conn->remote.pending_transport_params; +int ngtcp2_conn_decode_remote_transport_params(ngtcp2_conn *conn, + const uint8_t *data, + size_t datalen) { + ngtcp2_transport_params params; + int rv; + + rv = ngtcp2_decode_transport_params( + ¶ms, + conn->server ? NGTCP2_TRANSPORT_PARAMS_TYPE_CLIENT_HELLO + : NGTCP2_TRANSPORT_PARAMS_TYPE_ENCRYPTED_EXTENSIONS, + data, datalen); + if (rv != 0) { + return rv; } + + return ngtcp2_conn_set_remote_transport_params(conn, ¶ms); } -void ngtcp2_conn_set_early_remote_transport_params( - ngtcp2_conn *conn, const ngtcp2_transport_params *params) { - ngtcp2_transport_params *p = &conn->remote.transport_params; +const ngtcp2_transport_params * +ngtcp2_conn_get_remote_transport_params(ngtcp2_conn *conn) { + if (conn->remote.pending_transport_params) { + return conn->remote.pending_transport_params; + } + + return conn->remote.transport_params; +} + +void ngtcp2_conn_set_early_remote_transport_params_versioned( + ngtcp2_conn *conn, int transport_params_version, + const ngtcp2_transport_params *params) { + ngtcp2_transport_params *p; + (void)transport_params_version; assert(!conn->server); + assert(!conn->remote.transport_params); + + /* Assume that all pointer fields in p are NULL */ + p = ngtcp2_mem_calloc(conn->mem, 1, sizeof(*p)); - memset(p, 0, sizeof(*p)); + conn->remote.transport_params = p; p->initial_max_streams_bidi = params->initial_max_streams_bidi; p->initial_max_streams_uni = params->initial_max_streams_uni; @@ -9633,8 +11280,38 @@ void ngtcp2_conn_set_early_remote_transport_params( params->initial_max_stream_data_bidi_remote; p->initial_max_stream_data_uni = params->initial_max_stream_data_uni; p->initial_max_data = params->initial_max_data; + p->active_connection_id_limit = + ngtcp2_max(NGTCP2_DEFAULT_ACTIVE_CONNECTION_ID_LIMIT, + params->active_connection_id_limit); + p->max_idle_timeout = params->max_idle_timeout; + if (!params->max_udp_payload_size) { + p->max_udp_payload_size = NGTCP2_DEFAULT_MAX_RECV_UDP_PAYLOAD_SIZE; + } else { + p->max_udp_payload_size = + ngtcp2_max(NGTCP2_MAX_UDP_PAYLOAD_SIZE, params->max_udp_payload_size); + } + p->disable_active_migration = params->disable_active_migration; p->max_datagram_frame_size = params->max_datagram_frame_size; + /* These parameters are treated specially. If server accepts early + data, it must not set values for these parameters that are + smaller than these remembered values. */ + conn->early.transport_params.initial_max_streams_bidi = + params->initial_max_streams_bidi; + conn->early.transport_params.initial_max_streams_uni = + params->initial_max_streams_uni; + conn->early.transport_params.initial_max_stream_data_bidi_local = + params->initial_max_stream_data_bidi_local; + conn->early.transport_params.initial_max_stream_data_bidi_remote = + params->initial_max_stream_data_bidi_remote; + conn->early.transport_params.initial_max_stream_data_uni = + params->initial_max_stream_data_uni; + conn->early.transport_params.initial_max_data = params->initial_max_data; + conn->early.transport_params.active_connection_id_limit = + params->active_connection_id_limit; + conn->early.transport_params.max_datagram_frame_size = + params->max_datagram_frame_size; + conn_sync_stream_id_limit(conn); conn->tx.max_offset = p->initial_max_data; @@ -9643,8 +11320,11 @@ void ngtcp2_conn_set_early_remote_transport_params( NGTCP2_QLOG_SIDE_REMOTE); } -int ngtcp2_conn_set_local_transport_params( - ngtcp2_conn *conn, const ngtcp2_transport_params *params) { +int ngtcp2_conn_set_local_transport_params_versioned( + ngtcp2_conn *conn, int transport_params_version, + const ngtcp2_transport_params *params) { + (void)transport_params_version; + assert(conn->server); assert(params->active_connection_id_limit <= NGTCP2_MAX_DCID_POOL_SIZE); @@ -9652,7 +11332,7 @@ int ngtcp2_conn_set_local_transport_params( return NGTCP2_ERR_INVALID_STATE; } - conn->local.transport_params = *params; + conn_set_local_transport_params(conn, params); return 0; } @@ -9661,7 +11341,6 @@ int ngtcp2_conn_commit_local_transport_params(ngtcp2_conn *conn) { const ngtcp2_mem *mem = conn->mem; ngtcp2_transport_params *params = &conn->local.transport_params; ngtcp2_scid *scident; - ngtcp2_ksl_it it; int rv; assert(1 == ngtcp2_ksl_len(&conn->scid.set)); @@ -9677,32 +11356,21 @@ int ngtcp2_conn_commit_local_transport_params(ngtcp2_conn *conn) { params->preferred_address_present = 0; } - if (conn->server) { - if (params->stateless_reset_token_present) { - it = ngtcp2_ksl_begin(&conn->scid.set); - scident = ngtcp2_ksl_it_get(&it); - - memcpy(scident->token, params->stateless_reset_token, - NGTCP2_STATELESS_RESET_TOKENLEN); + if (conn->server && params->preferred_address_present) { + scident = ngtcp2_mem_malloc(mem, sizeof(*scident)); + if (scident == NULL) { + return NGTCP2_ERR_NOMEM; } - if (params->preferred_address_present) { - scident = ngtcp2_mem_malloc(mem, sizeof(*scident)); - if (scident == NULL) { - return NGTCP2_ERR_NOMEM; - } - - ngtcp2_scid_init(scident, 1, ¶ms->preferred_address.cid, - params->preferred_address.stateless_reset_token); + ngtcp2_scid_init(scident, 1, ¶ms->preferred_address.cid); - rv = ngtcp2_ksl_insert(&conn->scid.set, NULL, &scident->cid, scident); - if (rv != 0) { - ngtcp2_mem_free(mem, scident); - return rv; - } - - conn->scid.last_seq = 1; + rv = ngtcp2_ksl_insert(&conn->scid.set, NULL, &scident->cid, scident); + if (rv != 0) { + ngtcp2_mem_free(mem, scident); + return rv; } + + conn->scid.last_seq = 1; } conn->rx.window = conn->rx.unsent_max_offset = conn->rx.max_offset = @@ -9712,15 +11380,27 @@ int ngtcp2_conn_commit_local_transport_params(ngtcp2_conn *conn) { conn->remote.uni.unsent_max_streams = params->initial_max_streams_uni; conn->remote.uni.max_streams = params->initial_max_streams_uni; + conn->flags |= NGTCP2_CONN_FLAG_LOCAL_TRANSPORT_PARAMS_COMMITTED; + ngtcp2_qlog_parameters_set_transport_params(&conn->qlog, params, conn->server, NGTCP2_QLOG_SIDE_LOCAL); return 0; } -void ngtcp2_conn_get_local_transport_params(ngtcp2_conn *conn, - ngtcp2_transport_params *params) { - *params = conn->local.transport_params; +const ngtcp2_transport_params * +ngtcp2_conn_get_local_transport_params(ngtcp2_conn *conn) { + return &conn->local.transport_params; +} + +ngtcp2_ssize ngtcp2_conn_encode_local_transport_params(ngtcp2_conn *conn, + uint8_t *dest, + size_t destlen) { + return ngtcp2_encode_transport_params( + dest, destlen, + conn->server ? NGTCP2_TRANSPORT_PARAMS_TYPE_ENCRYPTED_EXTENSIONS + : NGTCP2_TRANSPORT_PARAMS_TYPE_CLIENT_HELLO, + &conn->local.transport_params); } int ngtcp2_conn_open_bidi_stream(ngtcp2_conn *conn, int64_t *pstream_id, @@ -9732,7 +11412,7 @@ int ngtcp2_conn_open_bidi_stream(ngtcp2_conn *conn, int64_t *pstream_id, return NGTCP2_ERR_STREAM_ID_BLOCKED; } - strm = ngtcp2_mem_malloc(conn->mem, sizeof(ngtcp2_strm)); + strm = ngtcp2_objalloc_strm_get(&conn->strm_objalloc); if (strm == NULL) { return NGTCP2_ERR_NOMEM; } @@ -9740,7 +11420,7 @@ int ngtcp2_conn_open_bidi_stream(ngtcp2_conn *conn, int64_t *pstream_id, rv = ngtcp2_conn_init_stream(conn, strm, conn->local.bidi.next_stream_id, stream_user_data); if (rv != 0) { - ngtcp2_mem_free(conn->mem, strm); + ngtcp2_objalloc_strm_release(&conn->strm_objalloc, strm); return rv; } @@ -9759,7 +11439,7 @@ int ngtcp2_conn_open_uni_stream(ngtcp2_conn *conn, int64_t *pstream_id, return NGTCP2_ERR_STREAM_ID_BLOCKED; } - strm = ngtcp2_mem_malloc(conn->mem, sizeof(ngtcp2_strm)); + strm = ngtcp2_objalloc_strm_get(&conn->strm_objalloc); if (strm == NULL) { return NGTCP2_ERR_NOMEM; } @@ -9767,7 +11447,7 @@ int ngtcp2_conn_open_uni_stream(ngtcp2_conn *conn, int64_t *pstream_id, rv = ngtcp2_conn_init_stream(conn, strm, conn->local.uni.next_stream_id, stream_user_data); if (rv != 0) { - ngtcp2_mem_free(conn->mem, strm); + ngtcp2_objalloc_strm_release(&conn->strm_objalloc, strm); return rv; } ngtcp2_strm_shutdown(strm, NGTCP2_STRM_FLAG_SHUT_RD); @@ -9779,39 +11459,72 @@ int ngtcp2_conn_open_uni_stream(ngtcp2_conn *conn, int64_t *pstream_id, } ngtcp2_strm *ngtcp2_conn_find_stream(ngtcp2_conn *conn, int64_t stream_id) { - ngtcp2_map_entry *me; - - me = ngtcp2_map_find(&conn->strms, (uint64_t)stream_id); - if (me == NULL) { - return NULL; - } - - return ngtcp2_struct_of(me, ngtcp2_strm, me); + return ngtcp2_map_find(&conn->strms, (uint64_t)stream_id); } -ngtcp2_ssize ngtcp2_conn_write_stream(ngtcp2_conn *conn, ngtcp2_path *path, - ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, ngtcp2_ssize *pdatalen, - uint32_t flags, int64_t stream_id, - const uint8_t *data, size_t datalen, - ngtcp2_tstamp ts) { +ngtcp2_ssize ngtcp2_conn_write_stream_versioned( + ngtcp2_conn *conn, ngtcp2_path *path, int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, ngtcp2_ssize *pdatalen, + uint32_t flags, int64_t stream_id, const uint8_t *data, size_t datalen, + ngtcp2_tstamp ts) { ngtcp2_vec datav; datav.len = datalen; datav.base = (uint8_t *)data; - return ngtcp2_conn_writev_stream(conn, path, pi, dest, destlen, pdatalen, - flags, stream_id, &datav, 1, ts); + return ngtcp2_conn_writev_stream_versioned(conn, path, pkt_info_version, pi, + dest, destlen, pdatalen, flags, + stream_id, &datav, 1, ts); } -ngtcp2_ssize ngtcp2_conn_writev_stream(ngtcp2_conn *conn, ngtcp2_path *path, - ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, ngtcp2_ssize *pdatalen, - uint32_t flags, int64_t stream_id, - const ngtcp2_vec *datav, size_t datavcnt, - ngtcp2_tstamp ts) { +static ngtcp2_ssize conn_write_vmsg_wrapper(ngtcp2_conn *conn, + ngtcp2_path *path, + int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, + size_t destlen, ngtcp2_vmsg *vmsg, + ngtcp2_tstamp ts) { + ngtcp2_conn_stat *cstat = &conn->cstat; + ngtcp2_ssize nwrite; + int undersized; + + nwrite = ngtcp2_conn_write_vmsg(conn, path, pkt_info_version, pi, dest, + destlen, vmsg, ts); + if (nwrite < 0) { + return nwrite; + } + + if (cstat->bytes_in_flight >= cstat->cwnd) { + conn->rst.is_cwnd_limited = 1; + } + + if (vmsg == NULL && cstat->bytes_in_flight < cstat->cwnd && + conn->tx.strmq_nretrans == 0) { + if (conn->local.settings.no_udp_payload_size_shaping) { + undersized = (size_t)nwrite < conn->local.settings.max_udp_payload_size; + } else { + undersized = (size_t)nwrite < conn->dcid.current.max_udp_payload_size; + } + + if (undersized) { + conn->rst.app_limited = conn->rst.delivered + cstat->bytes_in_flight; + + if (conn->rst.app_limited == 0) { + conn->rst.app_limited = cstat->max_udp_payload_size; + } + } + } + + return nwrite; +} + +ngtcp2_ssize ngtcp2_conn_writev_stream_versioned( + ngtcp2_conn *conn, ngtcp2_path *path, int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, ngtcp2_ssize *pdatalen, + uint32_t flags, int64_t stream_id, const ngtcp2_vec *datav, size_t datavcnt, + ngtcp2_tstamp ts) { ngtcp2_vmsg vmsg, *pvmsg; ngtcp2_strm *strm; + int64_t datalen; if (pdatalen) { *pdatalen = -1; @@ -9827,6 +11540,16 @@ ngtcp2_ssize ngtcp2_conn_writev_stream(ngtcp2_conn *conn, ngtcp2_path *path, return NGTCP2_ERR_STREAM_SHUT_WR; } + datalen = ngtcp2_vec_len_varint(datav, datavcnt); + if (datalen == -1) { + return NGTCP2_ERR_INVALID_ARGUMENT; + } + + if ((uint64_t)datalen > NGTCP2_MAX_VARINT - strm->tx.offset || + (uint64_t)datalen > NGTCP2_MAX_VARINT - conn->tx.offset) { + return NGTCP2_ERR_INVALID_ARGUMENT; + } + vmsg.type = NGTCP2_VMSG_TYPE_STREAM; vmsg.stream.strm = strm; vmsg.stream.flags = flags; @@ -9839,50 +11562,67 @@ ngtcp2_ssize ngtcp2_conn_writev_stream(ngtcp2_conn *conn, ngtcp2_path *path, pvmsg = NULL; } - return ngtcp2_conn_write_vmsg(conn, path, pi, dest, destlen, pvmsg, ts); + return conn_write_vmsg_wrapper(conn, path, pkt_info_version, pi, dest, + destlen, pvmsg, ts); } -ngtcp2_ssize ngtcp2_conn_writev_datagram(ngtcp2_conn *conn, ngtcp2_path *path, - ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, int *paccepted, - uint32_t flags, - const ngtcp2_vec *datav, - size_t datavcnt, ngtcp2_tstamp ts) { +ngtcp2_ssize ngtcp2_conn_writev_datagram_versioned( + ngtcp2_conn *conn, ngtcp2_path *path, int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, int *paccepted, + uint32_t flags, uint64_t dgram_id, const ngtcp2_vec *datav, size_t datavcnt, + ngtcp2_tstamp ts) { ngtcp2_vmsg vmsg; + int64_t datalen; if (paccepted) { *paccepted = 0; } - if (conn->remote.transport_params.max_datagram_frame_size == 0) { + if (conn->remote.transport_params == NULL || + conn->remote.transport_params->max_datagram_frame_size == 0) { return NGTCP2_ERR_INVALID_STATE; } - if (conn->remote.transport_params.max_datagram_frame_size < - ngtcp2_pkt_datagram_framelen(ngtcp2_vec_len(datav, datavcnt))) { + + datalen = ngtcp2_vec_len_varint(datav, datavcnt); + if (datalen == -1 || (uint64_t)datalen > SIZE_MAX) { + return NGTCP2_ERR_INVALID_STATE; + } + + if (conn->remote.transport_params->max_datagram_frame_size < + ngtcp2_pkt_datagram_framelen((size_t)datalen)) { return NGTCP2_ERR_INVALID_ARGUMENT; } vmsg.type = NGTCP2_VMSG_TYPE_DATAGRAM; + vmsg.datagram.dgram_id = dgram_id; vmsg.datagram.flags = flags; vmsg.datagram.data = datav; vmsg.datagram.datacnt = datavcnt; vmsg.datagram.paccepted = paccepted; - return ngtcp2_conn_write_vmsg(conn, path, pi, dest, destlen, &vmsg, ts); + return conn_write_vmsg_wrapper(conn, path, pkt_info_version, pi, dest, + destlen, &vmsg, ts); } ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, - ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, ngtcp2_vmsg *vmsg, - ngtcp2_tstamp ts) { + int pkt_info_version, ngtcp2_pkt_info *pi, + uint8_t *dest, size_t destlen, + ngtcp2_vmsg *vmsg, ngtcp2_tstamp ts) { ngtcp2_ssize nwrite; - ngtcp2_pktns *pktns = &conn->pktns; - size_t origlen = destlen; + size_t origlen; + size_t origdestlen = destlen; int rv; uint8_t wflags = NGTCP2_WRITE_PKT_FLAG_NONE; int ppe_pending = (conn->flags & NGTCP2_CONN_FLAG_PPE_PENDING) != 0; + ngtcp2_conn_stat *cstat = &conn->cstat; ngtcp2_ssize res = 0; - size_t server_tx_left; + uint64_t server_tx_left; + uint64_t datalen; + uint64_t write_datalen = 0; + int64_t prev_in_pkt_num = -1; + ngtcp2_ksl_it it; + ngtcp2_rtb_entry *rtbent; + (void)pkt_info_version; conn->log.last_ts = ts; conn->qlog.last_ts = ts; @@ -9891,25 +11631,47 @@ ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, ngtcp2_path_copy(path, &conn->dcid.current.ps.path); } + origlen = destlen = + conn_shape_udp_payload(conn, &conn->dcid.current, destlen); + if (!ppe_pending && pi) { pi->ecn = NGTCP2_ECN_NOT_ECT; } + if (!conn_pacing_pkt_tx_allowed(conn, ts)) { + return 0; + } + switch (conn->state) { case NGTCP2_CS_CLIENT_INITIAL: case NGTCP2_CS_CLIENT_WAIT_HANDSHAKE: case NGTCP2_CS_CLIENT_TLS_HANDSHAKE_FAILED: nwrite = conn_client_write_handshake(conn, pi, dest, destlen, vmsg, ts); - if (nwrite < 0) { + /* We might be unable to write a packet because of depletion of + congestion window budget, perhaps due to packet loss that + shrinks the window drastically. */ + if (nwrite <= 0) { return nwrite; } if (conn->state != NGTCP2_CS_POST_HANDSHAKE) { return nwrite; } + + assert(nwrite); + assert(dest[0] & NGTCP2_HEADER_FORM_BIT); + assert(conn->negotiated_version); + + if (ngtcp2_pkt_get_type_long(conn->negotiated_version, dest[0]) == + NGTCP2_PKT_INITIAL) { + /* We have added padding already, but in that case, there is no + space left to write 1RTT packet. */ + wflags |= NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING; + } + res = nwrite; dest += nwrite; destlen -= (size_t)nwrite; - /* Break here so that we can coalesces Short packets. */ + /* Break here so that we can coalesces 1RTT packet. */ break; case NGTCP2_CS_SERVER_INITIAL: case NGTCP2_CS_SERVER_WAIT_HANDSHAKE: @@ -9917,23 +11679,74 @@ ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, if (!ppe_pending) { if (!(conn->dcid.current.flags & NGTCP2_DCID_FLAG_PATH_VALIDATED)) { server_tx_left = conn_server_tx_left(conn, &conn->dcid.current); - destlen = ngtcp2_min(destlen, server_tx_left); + if (server_tx_left == 0) { + if (cstat->loss_detection_timer != UINT64_MAX) { + ngtcp2_log_info( + &conn->log, NGTCP2_LOG_EVENT_RCV, + "loss detection timer canceled due to amplification limit"); + cstat->loss_detection_timer = UINT64_MAX; + } + + return 0; + } + + destlen = (size_t)ngtcp2_min((uint64_t)destlen, server_tx_left); + } + + if (vmsg) { + switch (vmsg->type) { + case NGTCP2_VMSG_TYPE_STREAM: + datalen = ngtcp2_vec_len(vmsg->stream.data, vmsg->stream.datacnt); + if (datalen == 0 || (datalen > 0 && + (vmsg->stream.strm->tx.max_offset - + vmsg->stream.strm->tx.offset) && + (conn->tx.max_offset - conn->tx.offset))) { + write_datalen = + conn_enforce_flow_control(conn, vmsg->stream.strm, datalen); + write_datalen = + ngtcp2_min(write_datalen, NGTCP2_MIN_COALESCED_PAYLOADLEN); + write_datalen += NGTCP2_STREAM_OVERHEAD; + } + break; + case NGTCP2_VMSG_TYPE_DATAGRAM: + write_datalen = + ngtcp2_vec_len(vmsg->datagram.data, vmsg->datagram.datacnt) + + NGTCP2_DATAGRAM_OVERHEAD; + break; + default: + assert(0); + } + + if (conn->in_pktns && write_datalen > 0) { + it = ngtcp2_rtb_head(&conn->in_pktns->rtb); + if (!ngtcp2_ksl_it_end(&it)) { + rtbent = ngtcp2_ksl_it_get(&it); + prev_in_pkt_num = rtbent->hd.pkt_num; + } + } } - nwrite = conn_write_handshake(conn, pi, dest, destlen, 0, ts); + nwrite = conn_write_handshake(conn, pi, dest, destlen, write_datalen, ts); if (nwrite < 0) { return nwrite; } - if (conn->dcid.current.flags & NGTCP2_DCID_FLAG_PATH_VALIDATED) { - destlen = origlen; - } else { - origlen = destlen; - } - res = nwrite; dest += nwrite; destlen -= (size_t)nwrite; + + if (conn->in_pktns && write_datalen > 0) { + it = ngtcp2_rtb_head(&conn->in_pktns->rtb); + if (!ngtcp2_ksl_it_end(&it)) { + rtbent = ngtcp2_ksl_it_get(&it); + if (rtbent->hd.pkt_num != prev_in_pkt_num && + (rtbent->flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING)) { + /* We have added padding already, but in that case, there + is no space left to write 1RTT packet. */ + wflags |= NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING; + } + } + } } if (conn->state != NGTCP2_CS_POST_HANDSHAKE && conn->pktns.crypto.tx.ckm == NULL) { @@ -9950,7 +11763,7 @@ ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, return 0; } - assert(pktns->crypto.tx.ckm); + assert(conn->pktns.crypto.tx.ckm); if (conn_check_pkt_num_exhausted(conn)) { return NGTCP2_ERR_PKT_NUM_EXHAUSTED; @@ -9976,12 +11789,18 @@ ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, if (ppe_pending) { res = conn->pkt.hs_spktlen; conn->pkt.hs_spktlen = 0; + if (conn->pkt.require_padding) { + wflags |= NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING; + } /* dest and destlen have already been adjusted in ppe in the first run. They are adjusted for probe packet later. */ - nwrite = conn_write_pkt(conn, pi, dest, destlen, vmsg, NGTCP2_PKT_SHORT, + nwrite = conn_write_pkt(conn, pi, dest, destlen, vmsg, NGTCP2_PKT_1RTT, wflags, ts); goto fin; } else { + conn->pkt.require_padding = + (wflags & NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING); + if (conn->state == NGTCP2_CS_POST_HANDSHAKE) { rv = conn_prepare_key_update(conn, ts); if (rv != 0) { @@ -9992,29 +11811,43 @@ ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, if (!conn->pktns.rtb.probe_pkt_left && conn_cwnd_is_zero(conn)) { destlen = 0; } else { - nwrite = conn_write_path_response(conn, path, pi, dest, destlen, ts); - if (nwrite) { - goto fin; - } - - if (conn->pv) { - nwrite = conn_write_path_challenge(conn, path, pi, dest, destlen, ts); + if (res == 0) { + nwrite = + conn_write_path_response(conn, path, pi, dest, origdestlen, ts); if (nwrite) { goto fin; } + + if (conn->pv) { + nwrite = + conn_write_path_challenge(conn, path, pi, dest, origdestlen, ts); + if (nwrite) { + goto fin; + } + } + + if (conn->pmtud && + (!conn->hs_pktns || + ngtcp2_ksl_len(&conn->hs_pktns->crypto.tx.frq) == 0)) { + nwrite = conn_write_pmtud_probe(conn, pi, dest, origdestlen, ts); + if (nwrite) { + goto fin; + } + } } if (conn->server && !(conn->dcid.current.flags & NGTCP2_DCID_FLAG_PATH_VALIDATED)) { server_tx_left = conn_server_tx_left(conn, &conn->dcid.current); - origlen = ngtcp2_min(origlen, server_tx_left); - destlen = ngtcp2_min(destlen, server_tx_left); - - if (destlen == 0 && conn->cstat.loss_detection_timer != UINT64_MAX) { - ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_RCV, - "loss detection timer canceled"); + origlen = (size_t)ngtcp2_min((uint64_t)origlen, server_tx_left); + destlen = (size_t)ngtcp2_min((uint64_t)destlen, server_tx_left); + + if (server_tx_left == 0 && + conn->cstat.loss_detection_timer != UINT64_MAX) { + ngtcp2_log_info( + &conn->log, NGTCP2_LOG_EVENT_RCV, + "loss detection timer canceled due to amplification limit"); conn->cstat.loss_detection_timer = UINT64_MAX; - conn->cstat.pto_count = 0; } } } @@ -10025,7 +11858,8 @@ ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, if (conn_handshake_probe_left(conn)) { destlen = origlen; } - nwrite = conn_write_handshake_pkts(conn, pi, dest, destlen, 0, ts); + nwrite = conn_write_handshake_pkts(conn, pi, dest, destlen, + /* write_datalen = */ 0, ts); if (nwrite < 0) { return nwrite; } @@ -10042,13 +11876,13 @@ ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, "transmit probe pkt left=%zu", conn->pktns.rtb.probe_pkt_left); - nwrite = conn_write_pkt(conn, pi, dest, destlen, vmsg, NGTCP2_PKT_SHORT, + nwrite = conn_write_pkt(conn, pi, dest, destlen, vmsg, NGTCP2_PKT_1RTT, wflags, ts); goto fin; } - nwrite = conn_write_pkt(conn, pi, dest, destlen, vmsg, NGTCP2_PKT_SHORT, + nwrite = conn_write_pkt(conn, pi, dest, destlen, vmsg, NGTCP2_PKT_1RTT, wflags, ts); if (nwrite) { assert(nwrite != NGTCP2_ERR_NOBUF); @@ -10056,7 +11890,7 @@ ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, } if (res == 0) { - nwrite = conn_write_ack_pkt(conn, pi, dest, origlen, NGTCP2_PKT_SHORT, ts); + nwrite = conn_write_ack_pkt(conn, pi, dest, origlen, NGTCP2_PKT_1RTT, ts); } fin: @@ -10078,24 +11912,27 @@ ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, static ngtcp2_ssize conn_write_connection_close(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, uint8_t pkt_type, - uint64_t error_code, ngtcp2_tstamp ts) { + uint64_t error_code, const uint8_t *reason, + size_t reasonlen, ngtcp2_tstamp ts) { ngtcp2_pktns *in_pktns = conn->in_pktns; ngtcp2_pktns *hs_pktns = conn->hs_pktns; ngtcp2_ssize res = 0, nwrite; ngtcp2_frame fr; + uint8_t flags = NGTCP2_WRITE_PKT_FLAG_NONE; fr.type = NGTCP2_FRAME_CONNECTION_CLOSE; fr.connection_close.error_code = error_code; fr.connection_close.frame_type = 0; - fr.connection_close.reasonlen = 0; - fr.connection_close.reason = NULL; + fr.connection_close.reasonlen = reasonlen; + fr.connection_close.reason = (uint8_t *)reason; if (!(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED) && pkt_type != NGTCP2_PKT_INITIAL) { if (in_pktns && conn->server) { nwrite = ngtcp2_conn_write_single_frame_pkt( - conn, pi, dest, destlen, NGTCP2_PKT_INITIAL, &conn->dcid.current.cid, - &fr, NGTCP2_RTB_ENTRY_FLAG_NONE, NULL, ts); + conn, pi, dest, destlen, NGTCP2_PKT_INITIAL, + NGTCP2_WRITE_PKT_FLAG_NONE, &conn->dcid.current.cid, &fr, + NGTCP2_RTB_ENTRY_FLAG_NONE, NULL, ts); if (nwrite < 0) { return nwrite; } @@ -10109,7 +11946,8 @@ conn_write_connection_close(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, hs_pktns->crypto.tx.ckm) { nwrite = ngtcp2_conn_write_single_frame_pkt( conn, pi, dest, destlen, NGTCP2_PKT_HANDSHAKE, - &conn->dcid.current.cid, &fr, NGTCP2_RTB_ENTRY_FLAG_NONE, NULL, ts); + NGTCP2_WRITE_PKT_FLAG_NONE, &conn->dcid.current.cid, &fr, + NGTCP2_RTB_ENTRY_FLAG_NONE, NULL, ts); if (nwrite < 0) { return nwrite; } @@ -10120,8 +11958,12 @@ conn_write_connection_close(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, } } + if (!conn->server && pkt_type == NGTCP2_PKT_INITIAL) { + flags = NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING; + } + nwrite = ngtcp2_conn_write_single_frame_pkt( - conn, pi, dest, destlen, pkt_type, &conn->dcid.current.cid, &fr, + conn, pi, dest, destlen, pkt_type, flags, &conn->dcid.current.cid, &fr, NGTCP2_RTB_ENTRY_FLAG_NONE, NULL, ts); if (nwrite < 0) { @@ -10137,13 +11979,15 @@ conn_write_connection_close(ngtcp2_conn *conn, ngtcp2_pkt_info *pi, return res; } -ngtcp2_ssize ngtcp2_conn_write_connection_close( +ngtcp2_ssize ngtcp2_conn_write_connection_close_pkt( ngtcp2_conn *conn, ngtcp2_path *path, ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, uint64_t error_code, ngtcp2_tstamp ts) { + size_t destlen, uint64_t error_code, const uint8_t *reason, + size_t reasonlen, ngtcp2_tstamp ts) { ngtcp2_pktns *in_pktns = conn->in_pktns; ngtcp2_pktns *hs_pktns = conn->hs_pktns; uint8_t pkt_type; ngtcp2_ssize nwrite; + uint64_t server_tx_left; conn->log.last_ts = ts; conn->qlog.last_ts = ts; @@ -10154,9 +11998,10 @@ ngtcp2_ssize ngtcp2_conn_write_connection_close( switch (conn->state) { case NGTCP2_CS_CLIENT_INITIAL: + return NGTCP2_ERR_INVALID_STATE; case NGTCP2_CS_CLOSING: case NGTCP2_CS_DRAINING: - return NGTCP2_ERR_INVALID_STATE; + return 0; default: break; } @@ -10165,13 +12010,20 @@ ngtcp2_ssize ngtcp2_conn_write_connection_close( ngtcp2_path_copy(path, &conn->dcid.current.ps.path); } + destlen = conn_shape_udp_payload(conn, &conn->dcid.current, destlen); + if (pi) { pi->ecn = NGTCP2_ECN_NOT_ECT; } + if (conn->server) { + server_tx_left = conn_server_tx_left(conn, &conn->dcid.current); + destlen = (size_t)ngtcp2_min((uint64_t)destlen, server_tx_left); + } + if (conn->state == NGTCP2_CS_POST_HANDSHAKE || (conn->server && conn->pktns.crypto.tx.ckm)) { - pkt_type = NGTCP2_PKT_SHORT; + pkt_type = NGTCP2_PKT_1RTT; } else if (hs_pktns && hs_pktns->crypto.tx.ckm) { pkt_type = NGTCP2_PKT_HANDSHAKE; } else if (in_pktns && in_pktns->crypto.tx.ckm) { @@ -10183,7 +12035,7 @@ ngtcp2_ssize ngtcp2_conn_write_connection_close( } nwrite = conn_write_connection_close(conn, pi, dest, destlen, pkt_type, - error_code, ts); + error_code, reason, reasonlen, ts); if (nwrite < 0) { return nwrite; } @@ -10193,12 +12045,14 @@ ngtcp2_ssize ngtcp2_conn_write_connection_close( return nwrite; } -ngtcp2_ssize ngtcp2_conn_write_application_close( +ngtcp2_ssize ngtcp2_conn_write_application_close_pkt( ngtcp2_conn *conn, ngtcp2_path *path, ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, uint64_t app_error_code, ngtcp2_tstamp ts) { + size_t destlen, uint64_t app_error_code, const uint8_t *reason, + size_t reasonlen, ngtcp2_tstamp ts) { ngtcp2_ssize nwrite; ngtcp2_ssize res = 0; ngtcp2_frame fr; + uint64_t server_tx_left; conn->log.last_ts = ts; conn->qlog.last_ts = ts; @@ -10209,9 +12063,10 @@ ngtcp2_ssize ngtcp2_conn_write_application_close( switch (conn->state) { case NGTCP2_CS_CLIENT_INITIAL: + return NGTCP2_ERR_INVALID_STATE; case NGTCP2_CS_CLOSING: case NGTCP2_CS_DRAINING: - return NGTCP2_ERR_INVALID_STATE; + return 0; default: break; } @@ -10220,16 +12075,23 @@ ngtcp2_ssize ngtcp2_conn_write_application_close( ngtcp2_path_copy(path, &conn->dcid.current.ps.path); } + destlen = conn_shape_udp_payload(conn, &conn->dcid.current, destlen); + if (pi) { pi->ecn = NGTCP2_ECN_NOT_ECT; } + if (conn->server) { + server_tx_left = conn_server_tx_left(conn, &conn->dcid.current); + destlen = (size_t)ngtcp2_min((uint64_t)destlen, server_tx_left); + } + if (!(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED)) { nwrite = conn_write_connection_close(conn, pi, dest, destlen, conn->hs_pktns->crypto.tx.ckm ? NGTCP2_PKT_HANDSHAKE : NGTCP2_PKT_INITIAL, - NGTCP2_APPLICATION_ERROR, ts); + NGTCP2_APPLICATION_ERROR, NULL, 0, ts); if (nwrite < 0) { return nwrite; } @@ -10251,12 +12113,12 @@ ngtcp2_ssize ngtcp2_conn_write_application_close( fr.type = NGTCP2_FRAME_CONNECTION_CLOSE_APP; fr.connection_close.error_code = app_error_code; fr.connection_close.frame_type = 0; - fr.connection_close.reasonlen = 0; - fr.connection_close.reason = NULL; + fr.connection_close.reasonlen = reasonlen; + fr.connection_close.reason = (uint8_t *)reason; nwrite = ngtcp2_conn_write_single_frame_pkt( - conn, pi, dest, destlen, NGTCP2_PKT_SHORT, &conn->dcid.current.cid, &fr, - NGTCP2_RTB_ENTRY_FLAG_NONE, NULL, ts); + conn, pi, dest, destlen, NGTCP2_PKT_1RTT, NGTCP2_WRITE_PKT_FLAG_NONE, + &conn->dcid.current.cid, &fr, NGTCP2_RTB_ENTRY_FLAG_NONE, NULL, ts); if (nwrite < 0) { return nwrite; @@ -10273,6 +12135,92 @@ ngtcp2_ssize ngtcp2_conn_write_application_close( return res; } +static void +connection_close_error_init(ngtcp2_connection_close_error *ccerr, + ngtcp2_connection_close_error_code_type type, + uint64_t error_code, const uint8_t *reason, + size_t reasonlen) { + ccerr->type = type; + ccerr->error_code = error_code; + ccerr->frame_type = 0; + ccerr->reason = (uint8_t *)reason; + ccerr->reasonlen = reasonlen; +} + +void ngtcp2_connection_close_error_default( + ngtcp2_connection_close_error *ccerr) { + connection_close_error_init(ccerr, + NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT, + NGTCP2_NO_ERROR, NULL, 0); +} + +void ngtcp2_connection_close_error_set_transport_error( + ngtcp2_connection_close_error *ccerr, uint64_t error_code, + const uint8_t *reason, size_t reasonlen) { + connection_close_error_init(ccerr, + NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT, + error_code, reason, reasonlen); +} + +void ngtcp2_connection_close_error_set_transport_error_liberr( + ngtcp2_connection_close_error *ccerr, int liberr, const uint8_t *reason, + size_t reasonlen) { + switch (liberr) { + case NGTCP2_ERR_RECV_VERSION_NEGOTIATION: + connection_close_error_init( + ccerr, + NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_VERSION_NEGOTIATION, + NGTCP2_NO_ERROR, reason, reasonlen); + + return; + case NGTCP2_ERR_IDLE_CLOSE: + connection_close_error_init( + ccerr, NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_IDLE_CLOSE, + NGTCP2_NO_ERROR, reason, reasonlen); + + return; + }; + + ngtcp2_connection_close_error_set_transport_error( + ccerr, ngtcp2_err_infer_quic_transport_error_code(liberr), reason, + reasonlen); +} + +void ngtcp2_connection_close_error_set_transport_error_tls_alert( + ngtcp2_connection_close_error *ccerr, uint8_t tls_alert, + const uint8_t *reason, size_t reasonlen) { + ngtcp2_connection_close_error_set_transport_error( + ccerr, NGTCP2_CRYPTO_ERROR | tls_alert, reason, reasonlen); +} + +void ngtcp2_connection_close_error_set_application_error( + ngtcp2_connection_close_error *ccerr, uint64_t error_code, + const uint8_t *reason, size_t reasonlen) { + connection_close_error_init( + ccerr, NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION, error_code, + reason, reasonlen); +} + +ngtcp2_ssize ngtcp2_conn_write_connection_close_versioned( + ngtcp2_conn *conn, ngtcp2_path *path, int pkt_info_version, + ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, + const ngtcp2_connection_close_error *ccerr, ngtcp2_tstamp ts) { + (void)pkt_info_version; + + switch (ccerr->type) { + case NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT: + return ngtcp2_conn_write_connection_close_pkt( + conn, path, pi, dest, destlen, ccerr->error_code, ccerr->reason, + ccerr->reasonlen, ts); + case NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION: + return ngtcp2_conn_write_application_close_pkt( + conn, path, pi, dest, destlen, ccerr->error_code, ccerr->reason, + ccerr->reasonlen, ts); + default: + return 0; + } +} + int ngtcp2_conn_is_in_closing_period(ngtcp2_conn *conn) { return conn->state == NGTCP2_CS_CLOSING; } @@ -10281,47 +12229,45 @@ int ngtcp2_conn_is_in_draining_period(ngtcp2_conn *conn) { return conn->state == NGTCP2_CS_DRAINING; } -int ngtcp2_conn_close_stream(ngtcp2_conn *conn, ngtcp2_strm *strm, - uint64_t app_error_code) { +int ngtcp2_conn_close_stream(ngtcp2_conn *conn, ngtcp2_strm *strm) { int rv; - if (!strm->app_error_code) { - app_error_code = strm->app_error_code; - } - - rv = ngtcp2_map_remove(&conn->strms, strm->me.key); + rv = ngtcp2_map_remove(&conn->strms, (ngtcp2_map_key_type)strm->stream_id); if (rv != 0) { assert(rv != NGTCP2_ERR_INVALID_ARGUMENT); return rv; } - rv = conn_call_stream_close(conn, strm, app_error_code); + rv = conn_call_stream_close(conn, strm); if (rv != 0) { goto fin; } if (ngtcp2_strm_is_tx_queued(strm)) { ngtcp2_pq_remove(&conn->tx.strmq, &strm->pe); + if (!ngtcp2_strm_streamfrq_empty(strm)) { + assert(conn->tx.strmq_nretrans); + --conn->tx.strmq_nretrans; + } } fin: ngtcp2_strm_free(strm); - ngtcp2_mem_free(conn->mem, strm); + ngtcp2_objalloc_strm_release(&conn->strm_objalloc, strm); return rv; } -int ngtcp2_conn_close_stream_if_shut_rdwr(ngtcp2_conn *conn, ngtcp2_strm *strm, - uint64_t app_error_code) { +int ngtcp2_conn_close_stream_if_shut_rdwr(ngtcp2_conn *conn, + ngtcp2_strm *strm) { if ((strm->flags & NGTCP2_STRM_FLAG_SHUT_RDWR) == NGTCP2_STRM_FLAG_SHUT_RDWR && ((strm->flags & NGTCP2_STRM_FLAG_RECV_RST) || ngtcp2_strm_rx_offset(strm) == strm->rx.last_offset) && (((strm->flags & NGTCP2_STRM_FLAG_SENT_RST) && (strm->flags & NGTCP2_STRM_FLAG_RST_ACKED)) || - (!(strm->flags & NGTCP2_STRM_FLAG_SENT_RST) && - ngtcp2_strm_is_all_tx_data_acked(strm)))) { - return ngtcp2_conn_close_stream(conn, strm, app_error_code); + ngtcp2_strm_is_all_tx_data_fin_acked(strm))) { + return ngtcp2_conn_close_stream(conn, strm); } return 0; } @@ -10338,14 +12284,16 @@ int ngtcp2_conn_close_stream_if_shut_rdwr(ngtcp2_conn *conn, ngtcp2_strm *strm, */ static int conn_shutdown_stream_write(ngtcp2_conn *conn, ngtcp2_strm *strm, uint64_t app_error_code) { - if (strm->flags & NGTCP2_STRM_FLAG_SENT_RST) { + ngtcp2_strm_set_app_error_code(strm, app_error_code); + + if ((strm->flags & NGTCP2_STRM_FLAG_SENT_RST) || + ngtcp2_strm_is_all_tx_data_fin_acked(strm)) { return 0; } /* Set this flag so that we don't accidentally send DATA to this stream. */ strm->flags |= NGTCP2_STRM_FLAG_SHUT_WR | NGTCP2_STRM_FLAG_SENT_RST; - strm->app_error_code = app_error_code; ngtcp2_strm_streamfrq_clear(strm); @@ -10381,7 +12329,7 @@ static int conn_shutdown_stream_read(ngtcp2_conn *conn, ngtcp2_strm *strm, } strm->flags |= NGTCP2_STRM_FLAG_STOP_SENDING; - strm->app_error_code = app_error_code; + ngtcp2_strm_set_app_error_code(strm, app_error_code); return conn_stop_sending(conn, strm, app_error_code); } @@ -10393,7 +12341,7 @@ int ngtcp2_conn_shutdown_stream(ngtcp2_conn *conn, int64_t stream_id, strm = ngtcp2_conn_find_stream(conn, stream_id); if (strm == NULL) { - return NGTCP2_ERR_STREAM_NOT_FOUND; + return 0; } rv = conn_shutdown_stream_read(conn, strm, app_error_code); @@ -10415,7 +12363,7 @@ int ngtcp2_conn_shutdown_stream_write(ngtcp2_conn *conn, int64_t stream_id, strm = ngtcp2_conn_find_stream(conn, stream_id); if (strm == NULL) { - return NGTCP2_ERR_STREAM_NOT_FOUND; + return 0; } return conn_shutdown_stream_write(conn, strm, app_error_code); @@ -10427,7 +12375,7 @@ int ngtcp2_conn_shutdown_stream_read(ngtcp2_conn *conn, int64_t stream_id, strm = ngtcp2_conn_find_stream(conn, stream_id); if (strm == NULL) { - return NGTCP2_ERR_STREAM_NOT_FOUND; + return 0; } return conn_shutdown_stream_read(conn, strm, app_error_code); @@ -10475,7 +12423,7 @@ int ngtcp2_conn_extend_max_stream_offset(ngtcp2_conn *conn, int64_t stream_id, strm = ngtcp2_conn_find_stream(conn, stream_id); if (strm == NULL) { - return NGTCP2_ERR_STREAM_NOT_FOUND; + return 0; } return conn_extend_max_stream_offset(conn, strm, datalen); @@ -10488,77 +12436,135 @@ void ngtcp2_conn_extend_max_offset(ngtcp2_conn *conn, uint64_t datalen) { return; } - conn->rx.unsent_max_offset += datalen; + conn->rx.unsent_max_offset += datalen; +} + +void ngtcp2_conn_extend_max_streams_bidi(ngtcp2_conn *conn, size_t n) { + handle_max_remote_streams_extension(&conn->remote.bidi.unsent_max_streams, n); +} + +void ngtcp2_conn_extend_max_streams_uni(ngtcp2_conn *conn, size_t n) { + handle_max_remote_streams_extension(&conn->remote.uni.unsent_max_streams, n); +} + +const ngtcp2_cid *ngtcp2_conn_get_dcid(ngtcp2_conn *conn) { + return &conn->dcid.current.cid; +} + +const ngtcp2_cid *ngtcp2_conn_get_client_initial_dcid(ngtcp2_conn *conn) { + return &conn->rcid; +} + +uint32_t ngtcp2_conn_get_client_chosen_version(ngtcp2_conn *conn) { + return conn->client_chosen_version; +} + +uint32_t ngtcp2_conn_get_negotiated_version(ngtcp2_conn *conn) { + return conn->negotiated_version; +} + +static int delete_strms_pq_each(void *data, void *ptr) { + ngtcp2_conn *conn = ptr; + ngtcp2_strm *s = data; + + if (ngtcp2_strm_is_tx_queued(s)) { + ngtcp2_pq_remove(&conn->tx.strmq, &s->pe); + if (!ngtcp2_strm_streamfrq_empty(s)) { + assert(conn->tx.strmq_nretrans); + --conn->tx.strmq_nretrans; + } + } + + ngtcp2_strm_free(s); + ngtcp2_objalloc_strm_release(&conn->strm_objalloc, s); + + return 0; } -void ngtcp2_conn_extend_max_streams_bidi(ngtcp2_conn *conn, size_t n) { - handle_max_remote_streams_extension(&conn->remote.bidi.unsent_max_streams, n); -} +/* + * conn_discard_early_data_state discards any connection states which + * are altered by any operations during early data transfer. + */ +static void conn_discard_early_data_state(ngtcp2_conn *conn) { + ngtcp2_frame_chain **pfrc, *frc; -void ngtcp2_conn_extend_max_streams_uni(ngtcp2_conn *conn, size_t n) { - handle_max_remote_streams_extension(&conn->remote.uni.unsent_max_streams, n); -} + ngtcp2_rtb_remove_early_data(&conn->pktns.rtb, &conn->cstat); -const ngtcp2_cid *ngtcp2_conn_get_dcid(ngtcp2_conn *conn) { - return &conn->dcid.current.cid; -} + ngtcp2_map_each_free(&conn->strms, delete_strms_pq_each, conn); + ngtcp2_map_clear(&conn->strms); -uint32_t ngtcp2_conn_get_negotiated_version(ngtcp2_conn *conn) { - return conn->version; -} + conn->tx.offset = 0; -int ngtcp2_conn_early_data_rejected(ngtcp2_conn *conn) { - ngtcp2_pktns *pktns = &conn->pktns; - ngtcp2_rtb *rtb = &conn->pktns.rtb; - int rv; + conn->rx.unsent_max_offset = conn->rx.max_offset = + conn->local.transport_params.initial_max_data; - conn->flags |= NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED; + conn->remote.bidi.unsent_max_streams = conn->remote.bidi.max_streams = + conn->local.transport_params.initial_max_streams_bidi; - rv = ngtcp2_rtb_remove_all(rtb, conn, pktns, &conn->cstat); - if (rv != 0) { - return rv; + conn->remote.uni.unsent_max_streams = conn->remote.uni.max_streams = + conn->local.transport_params.initial_max_streams_uni; + + if (conn->server) { + conn->local.bidi.next_stream_id = 1; + conn->local.uni.next_stream_id = 3; + } else { + conn->local.bidi.next_stream_id = 0; + conn->local.uni.next_stream_id = 2; } - return rv; + for (pfrc = &conn->pktns.tx.frq; *pfrc;) { + frc = *pfrc; + *pfrc = (*pfrc)->next; + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); + } } -void ngtcp2_conn_update_rtt(ngtcp2_conn *conn, ngtcp2_duration rtt, - ngtcp2_duration ack_delay, ngtcp2_tstamp ts) { - ngtcp2_conn_stat *cstat = &conn->cstat; - ngtcp2_duration min_rtt; +void ngtcp2_conn_early_data_rejected(ngtcp2_conn *conn) { + if (conn->flags & NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED) { + return; + } + + conn->flags |= NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED; - rtt = ngtcp2_max(rtt, NGTCP2_GRANULARITY); + conn_discard_early_data_state(conn); +} - cstat->latest_rtt = rtt; +int ngtcp2_conn_update_rtt(ngtcp2_conn *conn, ngtcp2_duration rtt, + ngtcp2_duration ack_delay, ngtcp2_tstamp ts) { + ngtcp2_conn_stat *cstat = &conn->cstat; if (cstat->min_rtt == UINT64_MAX) { + cstat->latest_rtt = rtt; cstat->min_rtt = rtt; cstat->smoothed_rtt = rtt; cstat->rttvar = rtt / 2; cstat->first_rtt_sample_ts = ts; } else { - min_rtt = ngtcp2_min(cstat->min_rtt, rtt); if (conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED) { + assert(conn->remote.transport_params); + ack_delay = - ngtcp2_min(ack_delay, conn->remote.transport_params.max_ack_delay); - } else if (ack_delay > 0 && rtt < cstat->min_rtt + ack_delay) { + ngtcp2_min(ack_delay, conn->remote.transport_params->max_ack_delay); + } else if (ack_delay > 0 && rtt >= cstat->min_rtt && + rtt < cstat->min_rtt + ack_delay) { /* Ignore RTT sample if adjusting ack_delay causes the sample less than min_rtt before handshake confirmation. */ ngtcp2_log_info( &conn->log, NGTCP2_LOG_EVENT_RCV, "ignore rtt sample because ack_delay is too large latest_rtt=%" PRIu64 " min_rtt=%" PRIu64 " ack_delay=%" PRIu64, - (uint64_t)(rtt / NGTCP2_MILLISECONDS), - (uint64_t)(cstat->min_rtt / NGTCP2_MILLISECONDS), - (uint64_t)(ack_delay / NGTCP2_MILLISECONDS)); - return; + rtt / NGTCP2_MILLISECONDS, cstat->min_rtt / NGTCP2_MILLISECONDS, + ack_delay / NGTCP2_MILLISECONDS); + return NGTCP2_ERR_INVALID_ARGUMENT; } - if (rtt > min_rtt + ack_delay) { + cstat->latest_rtt = rtt; + cstat->min_rtt = ngtcp2_min(cstat->min_rtt, rtt); + + if (rtt >= cstat->min_rtt + ack_delay) { rtt -= ack_delay; } - cstat->min_rtt = min_rtt; cstat->rttvar = (cstat->rttvar * 3 + (cstat->smoothed_rtt < rtt ? rtt - cstat->smoothed_rtt : cstat->smoothed_rtt - rtt)) / @@ -10566,56 +12572,91 @@ void ngtcp2_conn_update_rtt(ngtcp2_conn *conn, ngtcp2_duration rtt, cstat->smoothed_rtt = (cstat->smoothed_rtt * 7 + rtt) / 8; } - ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_RCV, - "latest_rtt=%" PRIu64 " min_rtt=%" PRIu64 - " smoothed_rtt=%" PRIu64 " rttvar=%" PRIu64 - " ack_delay=%" PRIu64, - (uint64_t)(cstat->latest_rtt / NGTCP2_MILLISECONDS), - (uint64_t)(cstat->min_rtt / NGTCP2_MILLISECONDS), - cstat->smoothed_rtt / NGTCP2_MILLISECONDS, - cstat->rttvar / NGTCP2_MILLISECONDS, - (uint64_t)(ack_delay / NGTCP2_MILLISECONDS)); + ngtcp2_log_info( + &conn->log, NGTCP2_LOG_EVENT_RCV, + "latest_rtt=%" PRIu64 " min_rtt=%" PRIu64 " smoothed_rtt=%" PRIu64 + " rttvar=%" PRIu64 " ack_delay=%" PRIu64, + cstat->latest_rtt / NGTCP2_MILLISECONDS, + cstat->min_rtt / NGTCP2_MILLISECONDS, + cstat->smoothed_rtt / NGTCP2_MILLISECONDS, + cstat->rttvar / NGTCP2_MILLISECONDS, ack_delay / NGTCP2_MILLISECONDS); + + return 0; } -void ngtcp2_conn_get_conn_stat(ngtcp2_conn *conn, ngtcp2_conn_stat *cstat) { +void ngtcp2_conn_get_conn_stat_versioned(ngtcp2_conn *conn, + int conn_stat_version, + ngtcp2_conn_stat *cstat) { + (void)conn_stat_version; + *cstat = conn->cstat; } -static ngtcp2_pktns *conn_get_earliest_pktns(ngtcp2_conn *conn, - ngtcp2_tstamp *pts, - const ngtcp2_tstamp *times) { +static void conn_get_loss_time_and_pktns(ngtcp2_conn *conn, + ngtcp2_tstamp *ploss_time, + ngtcp2_pktns **ppktns) { + ngtcp2_pktns *const ns[] = {conn->hs_pktns, &conn->pktns}; + ngtcp2_conn_stat *cstat = &conn->cstat; + ngtcp2_duration *loss_time = cstat->loss_time; + ngtcp2_tstamp earliest_loss_time = loss_time[NGTCP2_PKTNS_ID_INITIAL]; + ngtcp2_pktns *pktns = conn->in_pktns; + size_t i; + + for (i = 0; i < sizeof(ns) / sizeof(ns[0]); ++i) { + if (ns[i] == NULL || ns[i]->rtb.num_pto_eliciting == 0 || + loss_time[i] >= earliest_loss_time) { + continue; + } + + earliest_loss_time = loss_time[i]; + pktns = ns[i]; + } + + if (ploss_time) { + *ploss_time = earliest_loss_time; + } + if (ppktns) { + *ppktns = pktns; + } +} + +static ngtcp2_tstamp conn_get_earliest_pto_expiry(ngtcp2_conn *conn, + ngtcp2_tstamp ts) { ngtcp2_pktns *ns[] = {conn->in_pktns, conn->hs_pktns, &conn->pktns}; - ngtcp2_pktns *res = ns[0]; size_t i; - ngtcp2_tstamp earliest_ts = times[NGTCP2_PKTNS_ID_INITIAL]; + ngtcp2_tstamp earliest_ts = UINT64_MAX, t; + ngtcp2_conn_stat *cstat = &conn->cstat; + ngtcp2_tstamp *times = cstat->last_tx_pkt_ts; + ngtcp2_duration duration = + compute_pto(cstat->smoothed_rtt, cstat->rttvar, /* max_ack_delay = */ 0) * + (1ULL << cstat->pto_count); - for (i = NGTCP2_PKTNS_ID_HANDSHAKE; i < NGTCP2_PKTNS_ID_MAX; ++i) { - if (ns[i] == NULL || ns[i]->rtb.num_retransmittable == 0 || + for (i = NGTCP2_PKTNS_ID_INITIAL; i < NGTCP2_PKTNS_ID_MAX; ++i) { + if (ns[i] == NULL || ns[i]->rtb.num_pto_eliciting == 0 || (times[i] == UINT64_MAX || - (earliest_ts != UINT64_MAX && times[i] >= earliest_ts) || (i == NGTCP2_PKTNS_ID_APPLICATION && !(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED)))) { continue; } - earliest_ts = times[i]; - res = ns[i]; - } + t = times[i] + duration; - if (res == NULL && !conn->server) { - earliest_ts = UINT64_MAX; + if (i == NGTCP2_PKTNS_ID_APPLICATION) { + assert(conn->remote.transport_params); + t += conn->remote.transport_params->max_ack_delay * + (1ULL << cstat->pto_count); + } - if (conn->hs_pktns && conn->hs_pktns->crypto.tx.ckm) { - res = conn->hs_pktns; - } else { - res = conn->in_pktns; + if (t < earliest_ts) { + earliest_ts = t; } } - if (pts) { - *pts = earliest_ts; + if (earliest_ts == UINT64_MAX) { + return ts + duration; } - return res; + + return earliest_ts; } void ngtcp2_conn_set_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts) { @@ -10624,11 +12665,9 @@ void ngtcp2_conn_set_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts) { ngtcp2_pktns *in_pktns = conn->in_pktns; ngtcp2_pktns *hs_pktns = conn->hs_pktns; ngtcp2_pktns *pktns = &conn->pktns; - ngtcp2_pktns *earliest_pktns; ngtcp2_tstamp earliest_loss_time; - ngtcp2_tstamp last_tx_pkt_ts; - conn_get_earliest_pktns(conn, &earliest_loss_time, cstat->loss_time); + conn_get_loss_time_and_pktns(conn, &earliest_loss_time, NULL); if (earliest_loss_time != UINT64_MAX) { cstat->loss_detection_timer = earliest_loss_time; @@ -10639,9 +12678,9 @@ void ngtcp2_conn_set_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts) { return; } - if ((!in_pktns || in_pktns->rtb.num_retransmittable == 0) && - (!hs_pktns || hs_pktns->rtb.num_retransmittable == 0) && - (pktns->rtb.num_retransmittable == 0 || + if ((!in_pktns || in_pktns->rtb.num_pto_eliciting == 0) && + (!hs_pktns || hs_pktns->rtb.num_pto_eliciting == 0) && + (pktns->rtb.num_pto_eliciting == 0 || !(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED)) && (conn->server || (conn->flags & (NGTCP2_CONN_FLAG_SERVER_ADDR_VERIFIED | @@ -10655,24 +12694,14 @@ void ngtcp2_conn_set_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts) { return; } - earliest_pktns = - conn_get_earliest_pktns(conn, &last_tx_pkt_ts, cstat->last_tx_pkt_ts); - - assert(earliest_pktns); - - if (last_tx_pkt_ts == UINT64_MAX) { - last_tx_pkt_ts = ts; - } - - timeout = conn_compute_pto(conn, earliest_pktns) * (1ULL << cstat->pto_count); + cstat->loss_detection_timer = conn_get_earliest_pto_expiry(conn, ts); - cstat->loss_detection_timer = last_tx_pkt_ts + timeout; + timeout = + cstat->loss_detection_timer > ts ? cstat->loss_detection_timer - ts : 0; ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_RCV, - "loss_detection_timer=%" PRIu64 " last_tx_pkt_ts=%" PRIu64 - " timeout=%" PRIu64, - cstat->loss_detection_timer, last_tx_pkt_ts, - (uint64_t)(timeout / NGTCP2_MILLISECONDS)); + "loss_detection_timer=%" PRIu64 " timeout=%" PRIu64, + cstat->loss_detection_timer, timeout / NGTCP2_MILLISECONDS); } int ngtcp2_conn_on_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts) { @@ -10681,9 +12710,7 @@ int ngtcp2_conn_on_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts) { ngtcp2_pktns *in_pktns = conn->in_pktns; ngtcp2_pktns *hs_pktns = conn->hs_pktns; ngtcp2_tstamp earliest_loss_time; - ngtcp2_pktns *loss_pktns = - conn_get_earliest_pktns(conn, &earliest_loss_time, cstat->loss_time); - ngtcp2_pktns *earliest_pktns; + ngtcp2_pktns *loss_pktns = NULL; conn->log.last_ts = ts; conn->qlog.last_ts = ts; @@ -10702,10 +12729,14 @@ int ngtcp2_conn_on_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts) { return 0; } + conn_get_loss_time_and_pktns(conn, &earliest_loss_time, &loss_pktns); + ngtcp2_log_info(&conn->log, NGTCP2_LOG_EVENT_RCV, "loss detection timer fired"); if (earliest_loss_time != UINT64_MAX) { + assert(loss_pktns); + rv = ngtcp2_conn_detect_lost_pkt(conn, loss_pktns, cstat, ts); if (rv != 0) { return rv; @@ -10714,35 +12745,26 @@ int ngtcp2_conn_on_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts) { return 0; } - if (!conn->server && !(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED)) { + if (!conn->server && !conn_is_handshake_completed(conn)) { if (hs_pktns->crypto.tx.ckm) { hs_pktns->rtb.probe_pkt_left = 1; } else { in_pktns->rtb.probe_pkt_left = 1; } } else { - earliest_pktns = conn_get_earliest_pktns(conn, NULL, cstat->last_tx_pkt_ts); + if (in_pktns && in_pktns->rtb.num_pto_eliciting) { + in_pktns->rtb.probe_pkt_left = 1; - assert(earliest_pktns); + assert(hs_pktns); - switch (earliest_pktns->rtb.pktns_id) { - case NGTCP2_PKTNS_ID_INITIAL: - assert(in_pktns); - in_pktns->rtb.probe_pkt_left = 1; - if (!conn->server) { - break; + if (conn->server && hs_pktns->rtb.num_pto_eliciting) { + /* let server coalesce packets */ + hs_pktns->rtb.probe_pkt_left = 1; } - /* fall through for server so that it can coalesce packets. */ - /* fall through */ - case NGTCP2_PKTNS_ID_HANDSHAKE: - assert(hs_pktns); + } else if (hs_pktns && hs_pktns->rtb.num_pto_eliciting) { hs_pktns->rtb.probe_pkt_left = 1; - break; - case NGTCP2_PKTNS_ID_APPLICATION: + } else { conn->pktns.rtb.probe_pkt_left = 2; - break; - default: - assert(0); } } @@ -10756,6 +12778,34 @@ int ngtcp2_conn_on_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts) { return 0; } +static int conn_buffer_crypto_data(ngtcp2_conn *conn, const uint8_t **pdata, + ngtcp2_pktns *pktns, const uint8_t *data, + size_t datalen) { + int rv; + ngtcp2_buf_chain **pbufchain = &pktns->crypto.tx.data; + + if (*pbufchain) { + for (; (*pbufchain)->next; pbufchain = &(*pbufchain)->next) + ; + + if (ngtcp2_buf_left(&(*pbufchain)->buf) < datalen) { + pbufchain = &(*pbufchain)->next; + } + } + + if (!*pbufchain) { + rv = ngtcp2_buf_chain_new(pbufchain, ngtcp2_max(1024, datalen), conn->mem); + if (rv != 0) { + return rv; + } + } + + *pdata = (*pbufchain)->buf.last; + (*pbufchain)->buf.last = ngtcp2_cpymem((*pbufchain)->buf.last, data, datalen); + + return 0; +} + int ngtcp2_conn_submit_crypto_data(ngtcp2_conn *conn, ngtcp2_crypto_level crypto_level, const uint8_t *data, const size_t datalen) { @@ -10784,7 +12834,12 @@ int ngtcp2_conn_submit_crypto_data(ngtcp2_conn *conn, return NGTCP2_ERR_INVALID_ARGUMENT; } - rv = ngtcp2_frame_chain_new(&frc, conn->mem); + rv = conn_buffer_crypto_data(conn, &data, pktns, data, datalen); + if (rv != 0) { + return rv; + } + + rv = ngtcp2_frame_chain_objalloc_new(&frc, &conn->frc_objalloc); if (rv != 0) { return rv; } @@ -10799,7 +12854,7 @@ int ngtcp2_conn_submit_crypto_data(ngtcp2_conn *conn, rv = ngtcp2_ksl_insert(&pktns->crypto.tx.frq, NULL, &fr->offset, frc); if (rv != 0) { - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, &conn->frc_objalloc, conn->mem); return rv; } @@ -10813,24 +12868,18 @@ int ngtcp2_conn_submit_new_token(ngtcp2_conn *conn, const uint8_t *token, size_t tokenlen) { int rv; ngtcp2_frame_chain *nfrc; - uint8_t *p; + ngtcp2_vec tokenv = {(uint8_t *)token, tokenlen}; assert(conn->server); assert(token); assert(tokenlen); - rv = ngtcp2_frame_chain_extralen_new(&nfrc, tokenlen, conn->mem); + rv = ngtcp2_frame_chain_new_token_objalloc_new( + &nfrc, &tokenv, &conn->frc_objalloc, conn->mem); if (rv != 0) { return rv; } - nfrc->fr.type = NGTCP2_FRAME_NEW_TOKEN; - - p = (uint8_t *)nfrc + sizeof(*nfrc); - memcpy(p, token, tokenlen); - - ngtcp2_vec_init(&nfrc->fr.new_token.token, p, tokenlen); - nfrc->next = conn->pktns.tx.frq; conn->pktns.tx.frq = nfrc; @@ -10853,11 +12902,20 @@ int ngtcp2_conn_tx_strmq_push(ngtcp2_conn *conn, ngtcp2_strm *strm) { return ngtcp2_pq_push(&conn->tx.strmq, &strm->pe); } +static int conn_has_uncommited_preferred_address_cid(ngtcp2_conn *conn) { + return conn->server && + !(conn->flags & NGTCP2_CONN_FLAG_LOCAL_TRANSPORT_PARAMS_COMMITTED) && + conn->oscid.datalen && + conn->local.transport_params.preferred_address_present; +} + size_t ngtcp2_conn_get_num_scid(ngtcp2_conn *conn) { - return ngtcp2_ksl_len(&conn->scid.set); + return ngtcp2_ksl_len(&conn->scid.set) + + (size_t)conn_has_uncommited_preferred_address_cid(conn); } size_t ngtcp2_conn_get_scid(ngtcp2_conn *conn, ngtcp2_cid *dest) { + ngtcp2_cid *origdest = dest; ngtcp2_ksl_it it; ngtcp2_scid *scid; @@ -10867,7 +12925,11 @@ size_t ngtcp2_conn_get_scid(ngtcp2_conn *conn, ngtcp2_cid *dest) { *dest++ = scid->cid; } - return ngtcp2_ksl_len(&conn->scid.set); + if (conn_has_uncommited_preferred_address_cid(conn)) { + *dest++ = conn->local.transport_params.preferred_address.cid; + } + + return (size_t)(dest - origdest); } size_t ngtcp2_conn_get_num_active_dcid(ngtcp2_conn *conn) { @@ -10889,7 +12951,7 @@ size_t ngtcp2_conn_get_num_active_dcid(ngtcp2_conn *conn) { } } - n += ngtcp2_ringbuf_len(&conn->dcid.retired); + n += ngtcp2_ringbuf_len(&conn->dcid.retired.rb); return n; } @@ -10899,9 +12961,10 @@ static void copy_dcid_to_cid_token(ngtcp2_cid_token *dest, dest->seq = src->seq; dest->cid = src->cid; ngtcp2_path_storage_init2(&dest->ps, &src->ps.path); - dest->token_present = - (uint8_t)!ngtcp2_check_invalid_stateless_reset_token(src->token); - memcpy(dest->token, src->token, NGTCP2_STATELESS_RESET_TOKENLEN); + if ((dest->token_present = + (src->flags & NGTCP2_DCID_FLAG_TOKEN_PRESENT) != 0)) { + memcpy(dest->token, src->token, NGTCP2_STATELESS_RESET_TOKENLEN); + } } size_t ngtcp2_conn_get_active_dcid(ngtcp2_conn *conn, ngtcp2_cid_token *dest) { @@ -10930,9 +12993,9 @@ size_t ngtcp2_conn_get_active_dcid(ngtcp2_conn *conn, ngtcp2_cid_token *dest) { } } - len = ngtcp2_ringbuf_len(&conn->dcid.retired); + len = ngtcp2_ringbuf_len(&conn->dcid.retired.rb); for (i = 0; i < len; ++i) { - dcid = ngtcp2_ringbuf_get(&conn->dcid.retired, i); + dcid = ngtcp2_ringbuf_get(&conn->dcid.retired.rb, i); copy_dcid_to_cid_token(dest, dcid); ++dest; } @@ -10943,71 +13006,148 @@ size_t ngtcp2_conn_get_active_dcid(ngtcp2_conn *conn, ngtcp2_cid_token *dest) { void ngtcp2_conn_set_local_addr(ngtcp2_conn *conn, const ngtcp2_addr *addr) { ngtcp2_addr *dest = &conn->dcid.current.ps.path.local; - assert(addr->addrlen <= sizeof(conn->dcid.current.ps.local_addrbuf)); + assert(addr->addrlen <= + (ngtcp2_socklen)sizeof(conn->dcid.current.ps.local_addrbuf)); ngtcp2_addr_copy(dest, addr); } -void ngtcp2_conn_set_remote_addr(ngtcp2_conn *conn, const ngtcp2_addr *addr) { - ngtcp2_addr *dest = &conn->dcid.current.ps.path.remote; - - assert(addr->addrlen <= sizeof(conn->dcid.current.ps.remote_addrbuf)); - ngtcp2_addr_copy(dest, addr); +void ngtcp2_conn_set_path_user_data(ngtcp2_conn *conn, void *path_user_data) { + conn->dcid.current.ps.path.user_data = path_user_data; } const ngtcp2_path *ngtcp2_conn_get_path(ngtcp2_conn *conn) { return &conn->dcid.current.ps.path; } -int ngtcp2_conn_initiate_migration(ngtcp2_conn *conn, const ngtcp2_path *path, - ngtcp2_tstamp ts) { - int rv; - ngtcp2_dcid *dcid; +size_t ngtcp2_conn_get_max_udp_payload_size(ngtcp2_conn *conn) { + return conn->local.settings.max_udp_payload_size; +} - assert(!conn->server); +size_t ngtcp2_conn_get_path_max_udp_payload_size(ngtcp2_conn *conn) { + if (conn->local.settings.no_udp_payload_size_shaping) { + return ngtcp2_conn_get_max_udp_payload_size(conn); + } - conn->log.last_ts = ts; - conn->qlog.last_ts = ts; + return conn->dcid.current.max_udp_payload_size; +} - if (conn->remote.transport_params.disable_active_migration || +static int conn_initiate_migration_precheck(ngtcp2_conn *conn, + const ngtcp2_addr *local_addr) { + if (!(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED) || + conn->remote.transport_params->disable_active_migration || conn->dcid.current.cid.datalen == 0 || - !(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED)) { + (conn->pv && (conn->pv->flags & NGTCP2_PV_FLAG_PREFERRED_ADDR))) { return NGTCP2_ERR_INVALID_STATE; } - if (ngtcp2_ringbuf_len(&conn->dcid.unused) == 0) { + + if (ngtcp2_ringbuf_len(&conn->dcid.unused.rb) == 0) { return NGTCP2_ERR_CONN_ID_BLOCKED; } - if (ngtcp2_path_eq(&conn->dcid.current.ps.path, path)) { + if (ngtcp2_addr_eq(&conn->dcid.current.ps.path.local, local_addr)) { return NGTCP2_ERR_INVALID_ARGUMENT; } - dcid = ngtcp2_ringbuf_get(&conn->dcid.unused, 0); + return 0; +} + +int ngtcp2_conn_initiate_immediate_migration(ngtcp2_conn *conn, + const ngtcp2_path *path, + ngtcp2_tstamp ts) { + int rv; + ngtcp2_dcid *dcid; + + assert(!conn->server); + + conn->log.last_ts = ts; + conn->qlog.last_ts = ts; - rv = conn_stop_pv(conn, ts); + rv = conn_initiate_migration_precheck(conn, &path->local); if (rv != 0) { return rv; } + ngtcp2_conn_stop_pmtud(conn); + + if (conn->pv) { + rv = conn_abort_pv(conn, ts); + if (rv != 0) { + return rv; + } + } + rv = conn_retire_dcid(conn, &conn->dcid.current, ts); if (rv != 0) { return rv; } + dcid = ngtcp2_ringbuf_get(&conn->dcid.unused.rb, 0); + ngtcp2_dcid_set_path(dcid, path); + ngtcp2_dcid_copy(&conn->dcid.current, dcid); - ngtcp2_path_copy(&conn->dcid.current.ps.path, path); - ngtcp2_ringbuf_pop_front(&conn->dcid.unused); + ngtcp2_ringbuf_pop_front(&conn->dcid.unused.rb); rv = conn_call_activate_dcid(conn, &conn->dcid.current); if (rv != 0) { return rv; } - conn_reset_congestion_state(conn); + conn_reset_congestion_state(conn, ts); conn_reset_ecn_validation_state(conn); + if (!conn->local.settings.no_pmtud) { + rv = conn_start_pmtud(conn); + if (rv != 0) { + return rv; + } + } + return 0; } +int ngtcp2_conn_initiate_migration(ngtcp2_conn *conn, const ngtcp2_path *path, + ngtcp2_tstamp ts) { + int rv; + ngtcp2_dcid *dcid; + ngtcp2_duration pto, initial_pto, timeout; + ngtcp2_pv *pv; + + assert(!conn->server); + + conn->log.last_ts = ts; + conn->qlog.last_ts = ts; + + rv = conn_initiate_migration_precheck(conn, &path->local); + if (rv != 0) { + return rv; + } + + if (conn->pv) { + rv = conn_abort_pv(conn, ts); + if (rv != 0) { + return rv; + } + } + + dcid = ngtcp2_ringbuf_get(&conn->dcid.unused.rb, 0); + ngtcp2_dcid_set_path(dcid, path); + + pto = conn_compute_pto(conn, &conn->pktns); + initial_pto = conn_compute_initial_pto(conn, &conn->pktns); + timeout = 3 * ngtcp2_max(pto, initial_pto); + + rv = ngtcp2_pv_new(&pv, dcid, timeout, NGTCP2_PV_FLAG_NONE, &conn->log, + conn->mem); + if (rv != 0) { + return rv; + } + + ngtcp2_ringbuf_pop_front(&conn->dcid.unused.rb); + conn->pv = pv; + + return conn_call_activate_dcid(conn, &pv->dcid); +} + uint64_t ngtcp2_conn_get_max_local_streams_uni(ngtcp2_conn *conn) { return conn->local.uni.max_streams; } @@ -11016,6 +13156,17 @@ uint64_t ngtcp2_conn_get_max_data_left(ngtcp2_conn *conn) { return conn->tx.max_offset - conn->tx.offset; } +uint64_t ngtcp2_conn_get_max_stream_data_left(ngtcp2_conn *conn, + int64_t stream_id) { + ngtcp2_strm *strm = ngtcp2_conn_find_stream(conn, stream_id); + + if (strm == NULL) { + return 0; + } + + return strm->tx.max_offset - strm->tx.offset; +} + uint64_t ngtcp2_conn_get_streams_bidi_left(ngtcp2_conn *conn) { uint64_t n = ngtcp2_ord_stream_id(conn->local.bidi.next_stream_id); @@ -11031,6 +13182,17 @@ uint64_t ngtcp2_conn_get_streams_uni_left(ngtcp2_conn *conn) { : conn->local.uni.max_streams - n + 1; } +uint64_t ngtcp2_conn_get_cwnd_left(ngtcp2_conn *conn) { + uint64_t bytes_in_flight = conn->cstat.bytes_in_flight; + uint64_t cwnd = conn_get_cwnd(conn); + + if (cwnd > bytes_in_flight) { + return cwnd - bytes_in_flight; + } + + return 0; +} + ngtcp2_tstamp ngtcp2_conn_get_idle_expiry(ngtcp2_conn *conn) { ngtcp2_duration trpto; ngtcp2_duration idle_timeout; @@ -11038,33 +13200,30 @@ ngtcp2_tstamp ngtcp2_conn_get_idle_expiry(ngtcp2_conn *conn) { /* TODO Remote max_idle_timeout becomes effective after handshake completion. */ - if (!(conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED) || - conn->remote.transport_params.max_idle_timeout == 0 || + if (!conn_is_handshake_completed(conn) || + conn->remote.transport_params->max_idle_timeout == 0 || (conn->local.transport_params.max_idle_timeout && conn->local.transport_params.max_idle_timeout < - conn->remote.transport_params.max_idle_timeout)) { + conn->remote.transport_params->max_idle_timeout)) { idle_timeout = conn->local.transport_params.max_idle_timeout; } else { - idle_timeout = conn->remote.transport_params.max_idle_timeout; + idle_timeout = conn->remote.transport_params->max_idle_timeout; } if (idle_timeout == 0) { return UINT64_MAX; } - trpto = 3 * conn_compute_pto( - conn, (conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED) - ? &conn->pktns - : conn->hs_pktns); + trpto = 3 * conn_compute_pto(conn, conn_is_handshake_completed(conn) + ? &conn->pktns + : conn->hs_pktns); return conn->idle_ts + ngtcp2_max(idle_timeout, trpto); } ngtcp2_duration ngtcp2_conn_get_pto(ngtcp2_conn *conn) { - return conn_compute_pto(conn, - (conn->flags & NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED) - ? &conn->pktns - : conn->hs_pktns); + return conn_compute_pto( + conn, conn_is_handshake_completed(conn) ? &conn->pktns : conn->hs_pktns); } void ngtcp2_conn_set_initial_crypto_ctx(ngtcp2_conn *conn, @@ -11116,9 +13275,9 @@ void ngtcp2_conn_set_tls_native_handle(ngtcp2_conn *conn, conn->crypto.tls_native_handle = tls_native_handle; } -void ngtcp2_conn_get_connection_close_error_code( - ngtcp2_conn *conn, ngtcp2_connection_close_error_code *ccec) { - *ccec = conn->rx.ccec; +void ngtcp2_conn_get_connection_close_error( + ngtcp2_conn *conn, ngtcp2_connection_close_error *ccerr) { + *ccerr = conn->rx.ccerr; } void ngtcp2_conn_set_tls_error(ngtcp2_conn *conn, int liberr) { @@ -11129,6 +13288,14 @@ int ngtcp2_conn_get_tls_error(ngtcp2_conn *conn) { return conn->crypto.tls_error; } +void ngtcp2_conn_set_tls_alert(ngtcp2_conn *conn, uint8_t alert) { + conn->crypto.tls_alert = alert; +} + +uint8_t ngtcp2_conn_get_tls_alert(ngtcp2_conn *conn) { + return conn->crypto.tls_alert; +} + int ngtcp2_conn_is_local_stream(ngtcp2_conn *conn, int64_t stream_id) { return conn_local_stream(conn, stream_id); } @@ -11152,6 +13319,71 @@ int ngtcp2_conn_set_stream_user_data(ngtcp2_conn *conn, int64_t stream_id, return 0; } +void ngtcp2_conn_update_pkt_tx_time(ngtcp2_conn *conn, ngtcp2_tstamp ts) { + if (!(conn->cstat.pacing_rate > 0) || conn->tx.pacing.pktlen == 0) { + return; + } + + conn->tx.pacing.next_ts = + ts + (ngtcp2_duration)((double)conn->tx.pacing.pktlen / + conn->cstat.pacing_rate); + conn->tx.pacing.pktlen = 0; +} + +size_t ngtcp2_conn_get_send_quantum(ngtcp2_conn *conn) { + return conn->cstat.send_quantum; +} + +int ngtcp2_conn_track_retired_dcid_seq(ngtcp2_conn *conn, uint64_t seq) { + size_t i; + + if (conn->dcid.retire_unacked.len >= + sizeof(conn->dcid.retire_unacked.seqs) / + sizeof(conn->dcid.retire_unacked.seqs[0])) { + return NGTCP2_ERR_CONNECTION_ID_LIMIT; + } + + /* Make sure that we do not have a duplicate */ + for (i = 0; i < conn->dcid.retire_unacked.len; ++i) { + if (conn->dcid.retire_unacked.seqs[i] == seq) { + assert(0); + } + } + + conn->dcid.retire_unacked.seqs[conn->dcid.retire_unacked.len++] = seq; + + return 0; +} + +void ngtcp2_conn_untrack_retired_dcid_seq(ngtcp2_conn *conn, uint64_t seq) { + size_t i; + + for (i = 0; i < conn->dcid.retire_unacked.len; ++i) { + if (conn->dcid.retire_unacked.seqs[i] != seq) { + continue; + } + + if (i != conn->dcid.retire_unacked.len - 1) { + conn->dcid.retire_unacked.seqs[i] = + conn->dcid.retire_unacked.seqs[conn->dcid.retire_unacked.len - 1]; + } + + --conn->dcid.retire_unacked.len; + + return; + } +} + +size_t ngtcp2_conn_get_stream_loss_count(ngtcp2_conn *conn, int64_t stream_id) { + ngtcp2_strm *strm = ngtcp2_conn_find_stream(conn, stream_id); + + if (strm == NULL) { + return 0; + } + + return strm->tx.loss_count; +} + void ngtcp2_path_challenge_entry_init(ngtcp2_path_challenge_entry *pcent, const ngtcp2_path *path, const uint8_t *data) { @@ -11159,16 +13391,24 @@ void ngtcp2_path_challenge_entry_init(ngtcp2_path_challenge_entry *pcent, memcpy(pcent->data, data, sizeof(pcent->data)); } -void ngtcp2_settings_default(ngtcp2_settings *settings) { +void ngtcp2_settings_default_versioned(int settings_version, + ngtcp2_settings *settings) { + (void)settings_version; + memset(settings, 0, sizeof(*settings)); settings->cc_algo = NGTCP2_CC_ALGO_CUBIC; settings->initial_rtt = NGTCP2_DEFAULT_INITIAL_RTT; settings->ack_thresh = 2; + settings->max_udp_payload_size = 1500 - 48; + settings->handshake_timeout = NGTCP2_DEFAULT_HANDSHAKE_TIMEOUT; } -void ngtcp2_transport_params_default(ngtcp2_transport_params *params) { +void ngtcp2_transport_params_default_versioned( + int transport_params_version, ngtcp2_transport_params *params) { + (void)transport_params_version; + memset(params, 0, sizeof(*params)); - params->max_udp_payload_size = NGTCP2_DEFAULT_MAX_UDP_PAYLOAD_SIZE; + params->max_udp_payload_size = NGTCP2_DEFAULT_MAX_RECV_UDP_PAYLOAD_SIZE; params->ack_delay_exponent = NGTCP2_DEFAULT_ACK_DELAY_EXPONENT; params->max_ack_delay = NGTCP2_DEFAULT_MAX_ACK_DELAY; params->active_connection_id_limit = @@ -11181,9 +13421,10 @@ void ngtcp2_transport_params_default(ngtcp2_transport_params *params) { here. */ ngtcp2_ssize ngtcp2_pkt_write_connection_close( uint8_t *dest, size_t destlen, uint32_t version, const ngtcp2_cid *dcid, - const ngtcp2_cid *scid, uint64_t error_code, ngtcp2_encrypt encrypt, - const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, - const uint8_t *iv, ngtcp2_hp_mask hp_mask, const ngtcp2_crypto_cipher *hp, + const ngtcp2_cid *scid, uint64_t error_code, const uint8_t *reason, + size_t reasonlen, ngtcp2_encrypt encrypt, const ngtcp2_crypto_aead *aead, + const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *iv, + ngtcp2_hp_mask hp_mask, const ngtcp2_crypto_cipher *hp, const ngtcp2_crypto_cipher_ctx *hp_ctx) { ngtcp2_pkt_hd hd; ngtcp2_crypto_km ckm; @@ -11223,6 +13464,8 @@ ngtcp2_ssize ngtcp2_pkt_write_connection_close( fr.type = NGTCP2_FRAME_CONNECTION_CLOSE; fr.connection_close.error_code = error_code; + fr.connection_close.reasonlen = reasonlen; + fr.connection_close.reason = (uint8_t *)reason; rv = ngtcp2_ppe_encode_frame(&ppe, &fr); if (rv != 0) { @@ -11234,3 +13477,26 @@ ngtcp2_ssize ngtcp2_pkt_write_connection_close( } int ngtcp2_is_bidi_stream(int64_t stream_id) { return bidi_stream(stream_id); } + +uint32_t ngtcp2_select_version(const uint32_t *preferred_versions, + size_t preferred_versionslen, + const uint32_t *offered_versions, + size_t offered_versionslen) { + size_t i, j; + + if (!preferred_versionslen || !offered_versionslen) { + return 0; + } + + for (i = 0; i < preferred_versionslen; ++i) { + assert(ngtcp2_is_supported_version(preferred_versions[i])); + + for (j = 0; j < offered_versionslen; ++j) { + if (preferred_versions[i] == offered_versions[j]) { + return preferred_versions[i]; + } + } + } + + return 0; +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.h index 825e4502e13..b1c6564175d 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_conn.h @@ -36,14 +36,16 @@ #include "ngtcp2_acktr.h" #include "ngtcp2_rtb.h" #include "ngtcp2_strm.h" -#include "ngtcp2_mem.h" #include "ngtcp2_idtr.h" #include "ngtcp2_str.h" #include "ngtcp2_pkt.h" #include "ngtcp2_log.h" #include "ngtcp2_pq.h" #include "ngtcp2_cc.h" +#include "ngtcp2_bbr.h" +#include "ngtcp2_bbr2.h" #include "ngtcp2_pv.h" +#include "ngtcp2_pmtud.h" #include "ngtcp2_cid.h" #include "ngtcp2_buf.h" #include "ngtcp2_ppe.h" @@ -117,6 +119,21 @@ typedef enum { packets sent in NGTCP2_ECN_STATE_TESTING period. */ #define NGTCP2_ECN_MAX_NUM_VALIDATION_PKTS 10 +/* NGTCP2_CONNECTION_CLOSE_ERROR_MAX_REASONLEN is the maximum length + of reason phrase to remember. If the received reason phrase is + longer than this value, it is truncated. */ +#define NGTCP2_CONNECTION_CLOSE_ERROR_MAX_REASONLEN 1024 + +/* NGTCP2_WRITE_PKT_FLAG_NONE indicates that no flag is set. */ +#define NGTCP2_WRITE_PKT_FLAG_NONE 0x00u +/* NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING indicates that packet other + than Initial packet should be padded. Initial packet might be + padded based on QUIC requirement regardless of this flag. */ +#define NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING 0x01u +/* NGTCP2_WRITE_PKT_FLAG_MORE indicates that more frames might come + and it should be encoded into the current packet. */ +#define NGTCP2_WRITE_PKT_FLAG_MORE 0x02u + /* * ngtcp2_max_frame is defined so that it covers the largest ACK * frame. @@ -140,52 +157,69 @@ void ngtcp2_path_challenge_entry_init(ngtcp2_path_challenge_entry *pcent, const uint8_t *data); /* NGTCP2_CONN_FLAG_NONE indicates that no flag is set. */ -#define NGTCP2_CONN_FLAG_NONE 0x00 -/* NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED is set if handshake - completed. */ -#define NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED 0x01 +#define NGTCP2_CONN_FLAG_NONE 0x00u +/* NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED is set when TLS stack declares + that TLS handshake has completed. The condition of this + declaration varies between TLS implementations and this flag does + not indicate the completion of QUIC handshake. Some + implementations declare TLS handshake completion as server when + they write off Server Finished and before deriving application rx + secret. */ +#define NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED 0x01u /* NGTCP2_CONN_FLAG_CONN_ID_NEGOTIATED is set if connection ID is negotiated. This is only used for client. */ -#define NGTCP2_CONN_FLAG_CONN_ID_NEGOTIATED 0x02 +#define NGTCP2_CONN_FLAG_CONN_ID_NEGOTIATED 0x02u /* NGTCP2_CONN_FLAG_TRANSPORT_PARAM_RECVED is set if transport parameters are received. */ -#define NGTCP2_CONN_FLAG_TRANSPORT_PARAM_RECVED 0x04 -/* NGTCP2_CONN_FLAG_RECV_PROTECTED_PKT is set when a protected packet - is received, and decrypted successfully. This flag is used to stop - retransmitting handshake packets. It might be replaced with an - another mechanism when we implement key update. */ -#define NGTCP2_CONN_FLAG_RECV_PROTECTED_PKT 0x08 +#define NGTCP2_CONN_FLAG_TRANSPORT_PARAM_RECVED 0x04u +/* NGTCP2_CONN_FLAG_LOCAL_TRANSPORT_PARAMS_COMMITTED is set when a + local transport parameters are applied. */ +#define NGTCP2_CONN_FLAG_LOCAL_TRANSPORT_PARAMS_COMMITTED 0x08u /* NGTCP2_CONN_FLAG_RECV_RETRY is set when a client receives Retry packet. */ -#define NGTCP2_CONN_FLAG_RECV_RETRY 0x10 +#define NGTCP2_CONN_FLAG_RECV_RETRY 0x10u /* NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED is set when 0-RTT packet is rejected by a peer. */ -#define NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED 0x20 +#define NGTCP2_CONN_FLAG_EARLY_DATA_REJECTED 0x20u +/* NGTCP2_CONN_FLAG_KEEP_ALIVE_CANCELLED is set when the expired + keep-alive timer has been cancelled. */ +#define NGTCP2_CONN_FLAG_KEEP_ALIVE_CANCELLED 0x40u /* NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED is set when an endpoint confirmed completion of handshake. */ -#define NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED 0x80 +#define NGTCP2_CONN_FLAG_HANDSHAKE_CONFIRMED 0x80u /* NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED_HANDLED is set when the library transitions its state to "post handshake". */ -#define NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED_HANDLED 0x0100 +#define NGTCP2_CONN_FLAG_HANDSHAKE_COMPLETED_HANDLED 0x0100u /* NGTCP2_CONN_FLAG_HANDSHAKE_EARLY_RETRANSMIT is set when the early handshake retransmission has done when server receives overlapping Initial crypto data. */ -#define NGTCP2_CONN_FLAG_HANDSHAKE_EARLY_RETRANSMIT 0x0200 +#define NGTCP2_CONN_FLAG_HANDSHAKE_EARLY_RETRANSMIT 0x0200u +/* NGTCP2_CONN_FLAG_CLEAR_FIXED_BIT indicates that the local endpoint + sends a QUIC packet without Fixed Bit set if a remote endpoint + supports Greasing QUIC Bit extension. */ +#define NGTCP2_CONN_FLAG_CLEAR_FIXED_BIT 0x0400u /* NGTCP2_CONN_FLAG_KEY_UPDATE_NOT_CONFIRMED is set when key update is not confirmed by the local endpoint. That is, it has not received ACK frame which acknowledges packet which is encrypted with new key. */ -#define NGTCP2_CONN_FLAG_KEY_UPDATE_NOT_CONFIRMED 0x0800 +#define NGTCP2_CONN_FLAG_KEY_UPDATE_NOT_CONFIRMED 0x0800u /* NGTCP2_CONN_FLAG_PPE_PENDING is set when NGTCP2_WRITE_STREAM_FLAG_MORE is used and the intermediate state of ngtcp2_ppe is stored in pkt struct of ngtcp2_conn. */ -#define NGTCP2_CONN_FLAG_PPE_PENDING 0x1000 +#define NGTCP2_CONN_FLAG_PPE_PENDING 0x1000u /* NGTCP2_CONN_FLAG_RESTART_IDLE_TIMER_ON_WRITE is set when idle timer should be restarted on next write. */ -#define NGTCP2_CONN_FLAG_RESTART_IDLE_TIMER_ON_WRITE 0x2000 +#define NGTCP2_CONN_FLAG_RESTART_IDLE_TIMER_ON_WRITE 0x2000u /* NGTCP2_CONN_FLAG_SERVER_ADDR_VERIFIED indicates that server as peer verified client address. This flag is only used by client. */ -#define NGTCP2_CONN_FLAG_SERVER_ADDR_VERIFIED 0x4000 +#define NGTCP2_CONN_FLAG_SERVER_ADDR_VERIFIED 0x4000u +/* NGTCP2_CONN_FLAG_EARLY_KEY_INSTALLED indicates that an early key is + installed. conn->early.ckm cannot be used for this purpose because + it might be discarded when a certain condition is met. */ +#define NGTCP2_CONN_FLAG_EARLY_KEY_INSTALLED 0x8000u +/* NGTCP2_CONN_FLAG_KEY_UPDATE_INITIATOR is set when the local + endpoint has initiated key update. */ +#define NGTCP2_CONN_FLAG_KEY_UPDATE_INITIATOR 0x10000u typedef struct ngtcp2_crypto_data { ngtcp2_buf buf; @@ -264,9 +298,9 @@ typedef struct ngtcp2_pktns { struct { /* ect0, ect1, ce are the ECN counts received in the latest ACK frame. */ - size_t ect0; - size_t ect1; - size_t ce; + uint64_t ect0; + uint64_t ect1; + uint64_t ce; } ack; } ecn; } rx; @@ -283,6 +317,8 @@ typedef struct ngtcp2_pktns { ngtcp2_crypto_km *ckm; /* hp_ctx is cipher context for packet header protection. */ ngtcp2_crypto_cipher_ctx hp_ctx; + /* data is the submitted crypto data. */ + ngtcp2_buf_chain *data; } tx; struct { @@ -308,16 +344,28 @@ typedef enum ngtcp2_ecn_state { NGTCP2_ECN_STATE_CAPABLE, } ngtcp2_ecn_state; +ngtcp2_static_ringbuf_def(dcid_bound, NGTCP2_MAX_BOUND_DCID_POOL_SIZE, + sizeof(ngtcp2_dcid)); +ngtcp2_static_ringbuf_def(dcid_unused, NGTCP2_MAX_DCID_POOL_SIZE, + sizeof(ngtcp2_dcid)); +ngtcp2_static_ringbuf_def(dcid_retired, NGTCP2_MAX_DCID_RETIRED_SIZE, + sizeof(ngtcp2_dcid)); +ngtcp2_static_ringbuf_def(path_challenge, 4, + sizeof(ngtcp2_path_challenge_entry)); + +ngtcp2_objalloc_def(strm, ngtcp2_strm, oplent); + struct ngtcp2_conn { + ngtcp2_objalloc frc_objalloc; + ngtcp2_objalloc rtb_entry_objalloc; + ngtcp2_objalloc strm_objalloc; ngtcp2_conn_state state; ngtcp2_callbacks callbacks; /* rcid is a connection ID present in Initial or 0-RTT packet from client as destination connection ID. Server uses this field to check that duplicated Initial or 0-RTT packet are indeed sent to - this connection. It is also sent to client as - original_destination_connection_id transport parameter. Client - uses this field to validate original_destination_connection_id - transport parameter if no Retry packet is involved. */ + this connection. Client uses this field to validate + original_destination_connection_id transport parameter. */ ngtcp2_cid rcid; /* oscid is the source connection ID initially used by the local endpoint. */ @@ -335,21 +383,25 @@ struct ngtcp2_conn { ngtcp2_dcid current; /* bound is a set of destination connection IDs which are bound to particular paths. These paths are not validated yet. */ - ngtcp2_ringbuf bound; + ngtcp2_static_ringbuf_dcid_bound bound; /* unused is a set of unused CID received from peer. */ - ngtcp2_ringbuf unused; + ngtcp2_static_ringbuf_dcid_unused unused; /* retired is a set of CID retired by local endpoint. Keep them in 3*PTO to catch packets in flight along the old path. */ - ngtcp2_ringbuf retired; + ngtcp2_static_ringbuf_dcid_retired retired; /* seqgap tracks received sequence numbers in order to ignore retransmitted duplicated NEW_CONNECTION_ID frame. */ ngtcp2_gaptr seqgap; /* retire_prior_to is the largest retire_prior_to received so far. */ uint64_t retire_prior_to; - /* num_retire_queued is the number of RETIRE_CONNECTION_ID frames - queued for transmission. */ - size_t num_retire_queued; + struct { + /* seqs contains sequence number of Connection ID whose + retirement is not acknowledged by the remote endpoint yet. */ + uint64_t seqs[NGTCP2_MAX_DCID_POOL_SIZE * 2]; + /* len is the number of sequence numbers that seq contains. */ + size_t len; + } retire_unacked; /* zerolen_seq is a pseudo sequence number of zero-length Destination Connection ID in order to distinguish between them. */ @@ -374,6 +426,9 @@ struct ngtcp2_conn { struct { /* strmq contains ngtcp2_strm which has frames to send. */ ngtcp2_pq strmq; + /* strmq_nretrans is the number of entries in strmq which has + stream data to resent. */ + size_t strmq_nretrans; /* ack is ACK frame. The underlying buffer is reused. */ ngtcp2_frame *ack; /* max_ack_blks is the number of additional ngtcp2_ack_blk which @@ -399,6 +454,16 @@ struct ngtcp2_conn { validation period. */ size_t dgram_sent; } ecn; + + struct { + /* pktlen is the number of bytes written before calling + ngtcp2_conn_update_pkt_tx_time which resets this field to + 0. */ + size_t pktlen; + /* next_ts is the time to send next packet. It is UINT64_MAX if + packet pacing is disabled or expired.*/ + ngtcp2_tstamp next_ts; + } pacing; } tx; struct { @@ -415,9 +480,9 @@ struct ngtcp2_conn { /* window is the connection-level flow control window size. */ uint64_t window; /* path_challenge stores received PATH_CHALLENGE data. */ - ngtcp2_ringbuf path_challenge; - /* ccec is the received connection close error code. */ - ngtcp2_connection_close_error_code ccec; + ngtcp2_static_ringbuf_path_challenge path_challenge; + /* ccerr is the received connection close error. */ + ngtcp2_connection_close_error ccerr; } rx; struct { @@ -427,6 +492,21 @@ struct ngtcp2_conn { /* discard_started_ts is the timestamp when the timer to discard early key has started. Used by server only. */ ngtcp2_tstamp discard_started_ts; + /* transport_params is the values remembered by client from the + previous session. These are set by + ngtcp2_conn_set_early_remote_transport_params(). Server does + not use this field. Server must not set values for these + parameters that are smaller than the remembered values. */ + struct { + uint64_t initial_max_streams_bidi; + uint64_t initial_max_streams_uni; + uint64_t initial_max_stream_data_bidi_local; + uint64_t initial_max_stream_data_bidi_remote; + uint64_t initial_max_stream_data_uni; + uint64_t initial_max_data; + uint64_t active_connection_id_limit; + uint64_t max_datagram_frame_size; + } transport_params; } early; struct { @@ -456,11 +536,11 @@ struct ngtcp2_conn { struct { /* transport_params is the received transport parameters during handshake. It is used for Short packet only. */ - ngtcp2_transport_params transport_params; + ngtcp2_transport_params *transport_params; /* pending_transport_params is received transport parameters during handshake. It is copied to transport_params when 1RTT key is available. */ - ngtcp2_transport_params pending_transport_params; + ngtcp2_transport_params *pending_transport_params; struct { ngtcp2_idtr idtr; /* unsent_max_streams is the maximum number of streams of peer @@ -519,6 +599,8 @@ struct ngtcp2_conn { ngtcp2_crypto_aead_ctx retry_aead_ctx; /* tls_error is TLS related error. */ int tls_error; + /* tls_alert is TLS alert generated by the local endpoint. */ + uint8_t tls_alert; /* decryption_failure_count is the number of received packets that fail authentication. */ uint64_t decryption_failure_count; @@ -533,14 +615,63 @@ struct ngtcp2_conn { ngtcp2_frame_chain **pfrc; int pkt_empty; int hd_logged; - uint8_t rtb_entry_flags; - int was_client_initial; + /* flags is bitwise OR of zero or more of + NGTCP2_RTB_ENTRY_FLAG_*. */ + uint16_t rtb_entry_flags; ngtcp2_ssize hs_spktlen; + int require_padding; } pkt; + struct { + /* last_ts is a timestamp when a last packet is sent or received + on a current path. */ + ngtcp2_tstamp last_ts; + /* timeout is keep-alive timeout. When it expires, a packet + should be sent to a current path to keep connection alive. It + might be used to keep NAT binding intact. If 0 is set, + keep-alive timer is disabled. */ + ngtcp2_duration timeout; + } keep_alive; + + struct { + /* Initial keys for negotiated version. If original version == + negotiated version, these fields are not used. */ + struct { + ngtcp2_crypto_km *ckm; + ngtcp2_crypto_cipher_ctx hp_ctx; + } rx; + struct { + ngtcp2_crypto_km *ckm; + ngtcp2_crypto_cipher_ctx hp_ctx; + } tx; + /* version is QUIC version that the above Initial keys are created + for. */ + uint32_t version; + /* preferred_versions is the array of versions that are preferred + by the local endpoint. Server negotiates one of those versions + in this array if a client initially selects a less preferred + version. Client uses this field and original_version field to + prevent version downgrade attack if it reacted upon Version + Negotiation packet. */ + uint32_t *preferred_versions; + /* preferred_versionslen is the number of versions stored in the + array pointed by preferred_versions. This field is only used + by server. */ + size_t preferred_versionslen; + /* other_versions is the versions that the local endpoint sends in + version_information transport parameter. This is the wire + image of other_versions field of version_information transport + parameter. */ + uint8_t *other_versions; + /* other_versionslen is the length of data pointed by + other_versions field. */ + size_t other_versionslen; + } vneg; + ngtcp2_map strms; ngtcp2_conn_stat cstat; ngtcp2_pv *pv; + ngtcp2_pmtud *pmtud; ngtcp2_log log; ngtcp2_qlog qlog; ngtcp2_rst rst; @@ -550,9 +681,10 @@ struct ngtcp2_conn { /* idle_ts is the time instant when idle timer started. */ ngtcp2_tstamp idle_ts; void *user_data; - uint32_t version; + uint32_t client_chosen_version; + uint32_t negotiated_version; /* flags is bitwise OR of zero or more of NGTCP2_CONN_FLAG_*. */ - uint16_t flags; + uint32_t flags; int server; }; @@ -583,6 +715,8 @@ typedef struct ngtcp2_vmsg_datagram { const ngtcp2_vec *data; /* datacnt is the number of ngtcp2_vec pointed by data. */ size_t datacnt; + /* dgram_id is an opaque identifier chosen by an application. */ + uint64_t dgram_id; /* flags is bitwise OR of zero or more of NGTCP2_WRITE_DATAGRAM_FLAG_*. */ uint32_t flags; @@ -647,8 +781,7 @@ int ngtcp2_conn_init_stream(ngtcp2_conn *conn, ngtcp2_strm *strm, * NGTCP2_ERR_CALLBACK_FAILURE * User-defined callback function failed. */ -int ngtcp2_conn_close_stream(ngtcp2_conn *conn, ngtcp2_strm *strm, - uint64_t app_error_code); +int ngtcp2_conn_close_stream(ngtcp2_conn *conn, ngtcp2_strm *strm); /* * ngtcp2_conn_close_stream closes stream |strm| if no further @@ -664,8 +797,7 @@ int ngtcp2_conn_close_stream(ngtcp2_conn *conn, ngtcp2_strm *strm, * NGTCP2_ERR_CALLBACK_FAILURE * User-defined callback function failed. */ -int ngtcp2_conn_close_stream_if_shut_rdwr(ngtcp2_conn *conn, ngtcp2_strm *strm, - uint64_t app_error_code); +int ngtcp2_conn_close_stream_if_shut_rdwr(ngtcp2_conn *conn, ngtcp2_strm *strm); /* * ngtcp2_conn_update_rtt updates RTT measurements. |rtt| is a latest @@ -673,12 +805,20 @@ int ngtcp2_conn_close_stream_if_shut_rdwr(ngtcp2_conn *conn, ngtcp2_strm *strm, * ack_delay included in ACK frame. |ack_delay| is actually tainted * (sent by peer), so don't assume that |ack_delay| is always smaller * than, or equals to |rtt|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGTCP2_ERR_INVALID_ARGUMENT + * RTT sample is ignored. */ -void ngtcp2_conn_update_rtt(ngtcp2_conn *conn, ngtcp2_duration rtt, - ngtcp2_duration ack_delay, ngtcp2_tstamp ts); +int ngtcp2_conn_update_rtt(ngtcp2_conn *conn, ngtcp2_duration rtt, + ngtcp2_duration ack_delay, ngtcp2_tstamp ts); void ngtcp2_conn_set_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts); +int ngtcp2_conn_on_loss_detection_timer(ngtcp2_conn *conn, ngtcp2_tstamp ts); + /* * ngtcp2_conn_detect_lost_pkt detects lost packets. * @@ -721,16 +861,17 @@ int ngtcp2_conn_tx_strmq_push(ngtcp2_conn *conn, ngtcp2_strm *strm); ngtcp2_tstamp ngtcp2_conn_internal_expiry(ngtcp2_conn *conn); ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, - ngtcp2_pkt_info *pi, uint8_t *dest, - size_t destlen, ngtcp2_vmsg *vmsg, - ngtcp2_tstamp ts); + int pkt_info_version, ngtcp2_pkt_info *pi, + uint8_t *dest, size_t destlen, + ngtcp2_vmsg *vmsg, ngtcp2_tstamp ts); /* - * ngtcp2_conn_write_single_frame_pkt writes a packet which contains |fr| - * frame only in the buffer pointed by |dest| whose length if + * ngtcp2_conn_write_single_frame_pkt writes a packet which contains + * |fr| frame only in the buffer pointed by |dest| whose length if * |destlen|. |type| is a long packet type to send. If |type| is 0, * Short packet is used. |dcid| is used as a destination connection - * ID. + * ID. |flags| is zero or more of NGTCP2_WRITE_PKT_FLAG_*. Only + * NGTCP2_WRITE_PKT_FLAG_REQUIRE_PADDING is recognized. * * The packet written by this function will not be retransmitted. * @@ -742,8 +883,8 @@ ngtcp2_ssize ngtcp2_conn_write_vmsg(ngtcp2_conn *conn, ngtcp2_path *path, */ ngtcp2_ssize ngtcp2_conn_write_single_frame_pkt( ngtcp2_conn *conn, ngtcp2_pkt_info *pi, uint8_t *dest, size_t destlen, - uint8_t type, const ngtcp2_cid *dcid, ngtcp2_frame *fr, uint8_t rtb_flags, - const ngtcp2_path *path, ngtcp2_tstamp ts); + uint8_t type, uint8_t flags, const ngtcp2_cid *dcid, ngtcp2_frame *fr, + uint16_t rtb_entry_flags, const ngtcp2_path *path, ngtcp2_tstamp ts); /* * ngtcp2_conn_commit_local_transport_params commits the local @@ -819,4 +960,156 @@ void ngtcp2_conn_cancel_expired_ack_delay_timer(ngtcp2_conn *conn, */ ngtcp2_tstamp ngtcp2_conn_loss_detection_expiry(ngtcp2_conn *conn); +/** + * @function + * + * `ngtcp2_conn_get_idle_expiry` returns the time when a connection + * should be closed if it continues to be idle. If idle timeout is + * disabled, this function returns ``UINT64_MAX``. + */ +ngtcp2_tstamp ngtcp2_conn_get_idle_expiry(ngtcp2_conn *conn); + +ngtcp2_duration ngtcp2_conn_compute_pto(ngtcp2_conn *conn, ngtcp2_pktns *pktns); + +/* + * ngtcp2_conn_track_retired_dcid_seq tracks the sequence number |seq| + * of unacknowledged retiring Destination Connection ID. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGTCP2_ERR_CONNECTION_ID_LIMIT + * The number of unacknowledged retirement exceeds the limit. + */ +int ngtcp2_conn_track_retired_dcid_seq(ngtcp2_conn *conn, uint64_t seq); + +/* + * ngtcp2_conn_untrack_retired_dcid_seq deletes the sequence number + * |seq| of unacknowledged retiring Destination Connection ID. It is + * fine if such sequence number is not found. + */ +void ngtcp2_conn_untrack_retired_dcid_seq(ngtcp2_conn *conn, uint64_t seq); + +/* + * ngtcp2_conn_server_negotiate_version negotiates QUIC version. It + * is compatible version negotiation. It returns the negotiated QUIC + * version. This function must not be called by client. + */ +uint32_t +ngtcp2_conn_server_negotiate_version(ngtcp2_conn *conn, + const ngtcp2_version_info *version_info); + +/** + * @function + * + * `ngtcp2_conn_write_connection_close_pkt` writes a packet which + * contains a CONNECTION_CLOSE frame (type 0x1c) in the buffer pointed + * by |dest| whose capacity is |datalen|. + * + * If |path| is not ``NULL``, this function stores the network path + * with which the packet should be sent. Each addr field must point + * to the buffer which should be at least ``sizeof(struct + * sockaddr_storage)`` bytes long. The assignment might not be done + * if nothing is written to |dest|. + * + * If |pi| is not ``NULL``, this function stores packet metadata in it + * if it succeeds. The metadata includes ECN markings. + * + * This function must not be called from inside the callback + * functions. + * + * At the moment, successful call to this function makes connection + * close. We may change this behaviour in the future to allow + * graceful shutdown. + * + * This function returns the number of bytes written in |dest| if it + * succeeds, or one of the following negative error codes: + * + * :macro:`NGTCP2_ERR_NOMEM` + * Out of memory + * :macro:`NGTCP2_ERR_NOBUF` + * Buffer is too small + * :macro:`NGTCP2_ERR_INVALID_STATE` + * The current state does not allow sending CONNECTION_CLOSE. + * :macro:`NGTCP2_ERR_PKT_NUM_EXHAUSTED` + * Packet number is exhausted, and cannot send any more packet. + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` + * User callback failed + */ +ngtcp2_ssize ngtcp2_conn_write_connection_close_pkt( + ngtcp2_conn *conn, ngtcp2_path *path, ngtcp2_pkt_info *pi, uint8_t *dest, + size_t destlen, uint64_t error_code, const uint8_t *reason, + size_t reasonlen, ngtcp2_tstamp ts); + +/** + * @function + * + * `ngtcp2_conn_write_application_close_pkt` writes a packet which + * contains a CONNECTION_CLOSE frame (type 0x1d) in the buffer pointed + * by |dest| whose capacity is |datalen|. + * + * If |path| is not ``NULL``, this function stores the network path + * with which the packet should be sent. Each addr field must point + * to the buffer which should be at least ``sizeof(struct + * sockaddr_storage)`` bytes long. The assignment might not be done + * if nothing is written to |dest|. + * + * If |pi| is not ``NULL``, this function stores packet metadata in it + * if it succeeds. The metadata includes ECN markings. + * + * If handshake has not been confirmed yet, CONNECTION_CLOSE (type + * 0x1c) with error code :macro:`NGTCP2_APPLICATION_ERROR` is written + * instead. + * + * This function must not be called from inside the callback + * functions. + * + * At the moment, successful call to this function makes connection + * close. We may change this behaviour in the future to allow + * graceful shutdown. + * + * This function returns the number of bytes written in |dest| if it + * succeeds, or one of the following negative error codes: + * + * :macro:`NGTCP2_ERR_NOMEM` + * Out of memory + * :macro:`NGTCP2_ERR_NOBUF` + * Buffer is too small + * :macro:`NGTCP2_ERR_INVALID_STATE` + * The current state does not allow sending CONNECTION_CLOSE. + * :macro:`NGTCP2_ERR_PKT_NUM_EXHAUSTED` + * Packet number is exhausted, and cannot send any more packet. + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` + * User callback failed + */ +ngtcp2_ssize ngtcp2_conn_write_application_close_pkt( + ngtcp2_conn *conn, ngtcp2_path *path, ngtcp2_pkt_info *pi, uint8_t *dest, + size_t destlen, uint64_t app_error_code, const uint8_t *reason, + size_t reasonlen, ngtcp2_tstamp ts); + +int ngtcp2_conn_start_pmtud(ngtcp2_conn *conn); + +void ngtcp2_conn_stop_pmtud(ngtcp2_conn *conn); + +/** + * @function + * + * `ngtcp2_conn_set_remote_transport_params` sets transport parameter + * |params| from a remote endpoint to |conn|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :macro:`NGTCP2_ERR_TRANSPORT_PARAM` + * Failed to validate a remote transport parameters. + * :macro:`NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE` + * Version negotiation failure. + * :macro:`NGTCP2_ERR_CALLBACK_FAILURE` + * User callback failed + * :macro:`NGTCP2_ERR_NOMEM` + * Out of memory. + */ +int ngtcp2_conn_set_remote_transport_params( + ngtcp2_conn *conn, const ngtcp2_transport_params *params); + #endif /* NGTCP2_CONN_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_conv.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_conv.c index 9064218dacb..dcf72e4d0ec 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_conv.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_conv.c @@ -29,6 +29,7 @@ #include "ngtcp2_str.h" #include "ngtcp2_pkt.h" +#include "ngtcp2_net.h" uint64_t ngtcp2_get_uint64(const uint8_t *p) { uint64_t n; @@ -155,13 +156,13 @@ uint8_t *ngtcp2_put_varint(uint8_t *p, uint64_t n) { return rv; } -uint8_t *ngtcp2_put_varint14(uint8_t *p, uint16_t n) { +uint8_t *ngtcp2_put_varint30(uint8_t *p, uint32_t n) { uint8_t *rv; - assert(n < 16384); + assert(n < 1073741824); - rv = ngtcp2_put_uint16be(p, n); - *p |= 0x40; + rv = ngtcp2_put_uint32be(p, n); + *p |= 0x80; return rv; } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_conv.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_conv.h index dcff0fdb8c1..99746fdb4ce 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_conv.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_conv.h @@ -29,107 +29,8 @@ # include #endif /* HAVE_CONFIG_H */ -#ifdef HAVE_ARPA_INET_H -# include -#endif /* HAVE_ARPA_INET_H */ - -#ifdef HAVE_NETINET_IN_H -# include -#endif /* HAVE_NETINET_IN_H */ - -#ifdef HAVE_BYTESWAP_H -# include -#endif /* HAVE_BYTESWAP_H */ - -#ifdef HAVE_ENDIAN_H -# include -#endif /* HAVE_ENDIAN_H */ - -#ifdef HAVE_SYS_ENDIAN_H -# include -#endif /* HAVE_SYS_ENDIAN_H */ - #include -#if defined(HAVE_BSWAP_64) || \ - (defined(HAVE_DECL_BSWAP_64) && HAVE_DECL_BSWAP_64 > 0) -# define ngtcp2_bswap64 bswap_64 -#else /* !HAVE_BSWAP_64 */ -# define ngtcp2_bswap64(N) \ - ((uint64_t)(ngtcp2_ntohl((uint32_t)(N))) << 32 | \ - ngtcp2_ntohl((uint32_t)((N) >> 32))) -#endif /* !HAVE_BSWAP_64 */ - -#if defined(HAVE_BE64TOH) || \ - (defined(HAVE_DECL_BE64TOH) && HAVE_DECL_BE64TOH > 0) -# define ngtcp2_ntohl64(N) be64toh(N) -# define ngtcp2_htonl64(N) htobe64(N) -#else /* !HAVE_BE64TOH */ -# if defined(WORDS_BIGENDIAN) -# define ngtcp2_ntohl64(N) (N) -# define ngtcp2_htonl64(N) (N) -# else /* !WORDS_BIGENDIAN */ -# define ngtcp2_ntohl64(N) ngtcp2_bswap64(N) -# define ngtcp2_htonl64(N) ngtcp2_bswap64(N) -# endif /* !WORDS_BIGENDIAN */ -#endif /* !HAVE_BE64TOH */ - -#if defined(WIN32) -/* Windows requires ws2_32 library for ntonl family functions. We - define inline functions for those function so that we don't have - dependeny on that lib. */ - -# ifdef _MSC_VER -# define STIN static __inline -# else -# define STIN static inline -# endif - -STIN uint32_t ngtcp2_htonl(uint32_t hostlong) { - uint32_t res; - unsigned char *p = (unsigned char *)&res; - *p++ = hostlong >> 24; - *p++ = (hostlong >> 16) & 0xffu; - *p++ = (hostlong >> 8) & 0xffu; - *p = hostlong & 0xffu; - return res; -} - -STIN uint16_t ngtcp2_htons(uint16_t hostshort) { - uint16_t res; - unsigned char *p = (unsigned char *)&res; - *p++ = hostshort >> 8; - *p = hostshort & 0xffu; - return res; -} - -STIN uint32_t ngtcp2_ntohl(uint32_t netlong) { - uint32_t res; - unsigned char *p = (unsigned char *)&netlong; - res = *p++ << 24; - res += *p++ << 16; - res += *p++ << 8; - res += *p; - return res; -} - -STIN uint16_t ngtcp2_ntohs(uint16_t netshort) { - uint16_t res; - unsigned char *p = (unsigned char *)&netshort; - res = *p++ << 8; - res += *p; - return res; -} - -#else /* !WIN32 */ - -# define ngtcp2_htonl htonl -# define ngtcp2_htons htons -# define ngtcp2_ntohl ntohl -# define ngtcp2_ntohs ntohs - -#endif /* !WIN32 */ - /* * ngtcp2_get_uint64 reads 8 bytes from |p| as 64 bits unsigned * integer encoded as network byte order, and returns it in host byte @@ -220,12 +121,12 @@ uint8_t *ngtcp2_put_uint16be(uint8_t *p, uint16_t n); uint8_t *ngtcp2_put_varint(uint8_t *p, uint64_t n); /* - * ngtcp2_put_varint14 writes |n| in |p| using variable-length integer - * encoding. |n| must be strictly less than 16384. The function - * always encodes |n| in 2 bytes. It returns the one beyond of the + * ngtcp2_put_varint30 writes |n| in |p| using variable-length integer + * encoding. |n| must be strictly less than 1073741824. The function + * always encodes |n| in 4 bytes. It returns the one beyond of the * last written position. */ -uint8_t *ngtcp2_put_varint14(uint8_t *p, uint16_t n); +uint8_t *ngtcp2_put_varint30(uint8_t *p, uint32_t n); /* * ngtcp2_put_pkt_num encodes |pkt_num| using |len| bytes. It diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.c index e11287fd4ad..f7592f885b4 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.c @@ -30,6 +30,7 @@ #include "ngtcp2_str.h" #include "ngtcp2_conv.h" #include "ngtcp2_conn.h" +#include "ngtcp2_net.h" int ngtcp2_crypto_km_new(ngtcp2_crypto_km **pckm, const uint8_t *secret, size_t secretlen, @@ -91,6 +92,8 @@ void ngtcp2_crypto_create_nonce(uint8_t *dest, const uint8_t *iv, size_t ivlen, size_t i; uint64_t n; + assert(ivlen >= 8); + memcpy(dest, iv, ivlen); n = ngtcp2_htonl64((uint64_t)pkt_num); @@ -146,14 +149,17 @@ static uint8_t *write_cid_param(uint8_t *p, ngtcp2_transport_param_id id, return p; } -ngtcp2_ssize -ngtcp2_encode_transport_params(uint8_t *dest, size_t destlen, - ngtcp2_transport_params_type exttype, - const ngtcp2_transport_params *params) { +static const uint8_t empty_address[16]; + +ngtcp2_ssize ngtcp2_encode_transport_params_versioned( + uint8_t *dest, size_t destlen, ngtcp2_transport_params_type exttype, + int transport_params_version, const ngtcp2_transport_params *params) { uint8_t *p; size_t len = 0; /* For some reason, gcc 7.3.0 requires this initialization. */ size_t preferred_addrlen = 0; + size_t version_infolen = 0; + (void)transport_params_version; switch (exttype) { case NGTCP2_TRANSPORT_PARAMS_TYPE_CLIENT_HELLO: @@ -218,7 +224,8 @@ ngtcp2_encode_transport_params(uint8_t *dest, size_t destlen, len += varint_paramlen(NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAMS_UNI, params->initial_max_streams_uni); } - if (params->max_udp_payload_size != NGTCP2_DEFAULT_MAX_UDP_PAYLOAD_SIZE) { + if (params->max_udp_payload_size != + NGTCP2_DEFAULT_MAX_RECV_UDP_PAYLOAD_SIZE) { len += varint_paramlen(NGTCP2_TRANSPORT_PARAM_MAX_UDP_PAYLOAD_SIZE, params->max_udp_payload_size); } @@ -249,6 +256,20 @@ ngtcp2_encode_transport_params(uint8_t *dest, size_t destlen, len += varint_paramlen(NGTCP2_TRANSPORT_PARAM_MAX_DATAGRAM_FRAME_SIZE, params->max_datagram_frame_size); } + if (params->grease_quic_bit) { + len += ngtcp2_put_varint_len(NGTCP2_TRANSPORT_PARAM_GREASE_QUIC_BIT) + + ngtcp2_put_varint_len(0); + } + if (params->version_info_present) { + version_infolen = sizeof(uint32_t) + params->version_info.other_versionslen; + len += ngtcp2_put_varint_len( + NGTCP2_TRANSPORT_PARAM_VERSION_INFORMATION_DRAFT) + + ngtcp2_put_varint_len(version_infolen) + version_infolen; + } + + if (dest == NULL && destlen == 0) { + return (ngtcp2_ssize)len; + } if (destlen < len) { return NGTCP2_ERR_NOBUF; @@ -271,13 +292,25 @@ ngtcp2_encode_transport_params(uint8_t *dest, size_t destlen, p = ngtcp2_put_varint(p, NGTCP2_TRANSPORT_PARAM_PREFERRED_ADDRESS); p = ngtcp2_put_varint(p, preferred_addrlen); - p = ngtcp2_cpymem(p, params->preferred_address.ipv4_addr, - sizeof(params->preferred_address.ipv4_addr)); - p = ngtcp2_put_uint16be(p, params->preferred_address.ipv4_port); + if (params->preferred_address.ipv4_present) { + p = ngtcp2_cpymem(p, params->preferred_address.ipv4_addr, + sizeof(params->preferred_address.ipv4_addr)); + p = ngtcp2_put_uint16be(p, params->preferred_address.ipv4_port); + } else { + p = ngtcp2_cpymem(p, empty_address, + sizeof(params->preferred_address.ipv4_addr)); + p = ngtcp2_put_uint16be(p, 0); + } - p = ngtcp2_cpymem(p, params->preferred_address.ipv6_addr, - sizeof(params->preferred_address.ipv6_addr)); - p = ngtcp2_put_uint16be(p, params->preferred_address.ipv6_port); + if (params->preferred_address.ipv6_present) { + p = ngtcp2_cpymem(p, params->preferred_address.ipv6_addr, + sizeof(params->preferred_address.ipv6_addr)); + p = ngtcp2_put_uint16be(p, params->preferred_address.ipv6_port); + } else { + p = ngtcp2_cpymem(p, empty_address, + sizeof(params->preferred_address.ipv6_addr)); + p = ngtcp2_put_uint16be(p, 0); + } *p++ = (uint8_t)params->preferred_address.cid.datalen; if (params->preferred_address.cid.datalen) { @@ -330,7 +363,8 @@ ngtcp2_encode_transport_params(uint8_t *dest, size_t destlen, params->initial_max_streams_uni); } - if (params->max_udp_payload_size != NGTCP2_DEFAULT_MAX_UDP_PAYLOAD_SIZE) { + if (params->max_udp_payload_size != + NGTCP2_DEFAULT_MAX_RECV_UDP_PAYLOAD_SIZE) { p = write_varint_param(p, NGTCP2_TRANSPORT_PARAM_MAX_UDP_PAYLOAD_SIZE, params->max_udp_payload_size); } @@ -367,6 +401,21 @@ ngtcp2_encode_transport_params(uint8_t *dest, size_t destlen, params->max_datagram_frame_size); } + if (params->grease_quic_bit) { + p = ngtcp2_put_varint(p, NGTCP2_TRANSPORT_PARAM_GREASE_QUIC_BIT); + p = ngtcp2_put_varint(p, 0); + } + + if (params->version_info_present) { + p = ngtcp2_put_varint(p, NGTCP2_TRANSPORT_PARAM_VERSION_INFORMATION_DRAFT); + p = ngtcp2_put_varint(p, version_infolen); + p = ngtcp2_put_uint32be(p, params->version_info.chosen_version); + if (params->version_info.other_versionslen) { + p = ngtcp2_cpymem(p, params->version_info.other_versions, + params->version_info.other_versionslen); + } + } + assert((size_t)(p - dest) == len); return (ngtcp2_ssize)len; @@ -467,9 +516,9 @@ static ngtcp2_ssize decode_cid_param(ngtcp2_cid *pdest, const uint8_t *p, return (ngtcp2_ssize)(p - begin); } -int ngtcp2_decode_transport_params(ngtcp2_transport_params *params, - ngtcp2_transport_params_type exttype, - const uint8_t *data, size_t datalen) { +int ngtcp2_decode_transport_params_versioned( + int transport_params_version, ngtcp2_transport_params *params, + ngtcp2_transport_params_type exttype, const uint8_t *data, size_t datalen) { const uint8_t *p, *end; size_t len; uint64_t param_type; @@ -477,9 +526,12 @@ int ngtcp2_decode_transport_params(ngtcp2_transport_params *params, ngtcp2_ssize nread; int initial_scid_present = 0; int original_dcid_present = 0; + size_t i; + (void)transport_params_version; - p = data; - end = data + datalen; + if (datalen == 0) { + return NGTCP2_ERR_REQUIRED_TRANSPORT_PARAM; + } /* Set default values */ memset(params, 0, sizeof(*params)); @@ -488,7 +540,7 @@ int ngtcp2_decode_transport_params(ngtcp2_transport_params *params, params->initial_max_stream_data_bidi_local = 0; params->initial_max_stream_data_bidi_remote = 0; params->initial_max_stream_data_uni = 0; - params->max_udp_payload_size = NGTCP2_DEFAULT_MAX_UDP_PAYLOAD_SIZE; + params->max_udp_payload_size = NGTCP2_DEFAULT_MAX_RECV_UDP_PAYLOAD_SIZE; params->ack_delay_exponent = NGTCP2_DEFAULT_ACK_DELAY_EXPONENT; params->stateless_reset_token_present = 0; params->preferred_address_present = 0; @@ -502,10 +554,10 @@ int ngtcp2_decode_transport_params(ngtcp2_transport_params *params, memset(¶ms->retry_scid, 0, sizeof(params->retry_scid)); memset(¶ms->initial_scid, 0, sizeof(params->initial_scid)); memset(¶ms->original_dcid, 0, sizeof(params->original_dcid)); + params->version_info_present = 0; - if (datalen == 0) { - return 0; - } + p = data; + end = data + datalen; for (; (size_t)(end - p) >= 2;) { nread = decode_varint(¶m_type, p, end); @@ -634,12 +686,24 @@ int ngtcp2_decode_transport_params(ngtcp2_transport_params *params, params->preferred_address.ipv4_port = ngtcp2_get_uint16(p); p += sizeof(uint16_t); + if (params->preferred_address.ipv4_port || + memcmp(empty_address, params->preferred_address.ipv4_addr, + sizeof(params->preferred_address.ipv4_addr)) != 0) { + params->preferred_address.ipv4_present = 1; + } + memcpy(params->preferred_address.ipv6_addr, p, sizeof(params->preferred_address.ipv6_addr)); p += sizeof(params->preferred_address.ipv6_addr); params->preferred_address.ipv6_port = ngtcp2_get_uint16(p); p += sizeof(uint16_t); + if (params->preferred_address.ipv6_port || + memcmp(empty_address, params->preferred_address.ipv6_addr, + sizeof(params->preferred_address.ipv6_addr)) != 0) { + params->preferred_address.ipv6_present = 1; + } + /* cid */ params->preferred_address.cid.datalen = *p++; len += params->preferred_address.cid.datalen; @@ -720,6 +784,45 @@ int ngtcp2_decode_transport_params(ngtcp2_transport_params *params, } p += nread; break; + case NGTCP2_TRANSPORT_PARAM_GREASE_QUIC_BIT: + nread = decode_varint(&valuelen, p, end); + if (nread < 0 || valuelen != 0) { + return NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM; + } + p += nread; + params->grease_quic_bit = 1; + break; + case NGTCP2_TRANSPORT_PARAM_VERSION_INFORMATION_DRAFT: + nread = decode_varint(&valuelen, p, end); + if (nread < 0) { + return NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM; + } + p += nread; + if ((size_t)(end - p) < valuelen) { + return NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM; + } + if (valuelen < sizeof(uint32_t) || (valuelen & 0x3)) { + return NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM; + } + params->version_info.chosen_version = ngtcp2_get_uint32(p); + if (params->version_info.chosen_version == 0) { + return NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM; + } + p += sizeof(uint32_t); + if (valuelen > sizeof(uint32_t)) { + params->version_info.other_versions = (uint8_t *)p; + params->version_info.other_versionslen = + (size_t)valuelen - sizeof(uint32_t); + + for (i = sizeof(uint32_t); i < valuelen; + i += sizeof(uint32_t), p += sizeof(uint32_t)) { + if (ngtcp2_get_uint32(p) == 0) { + return NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM; + } + } + } + params->version_info_present = 1; + break; default: /* Ignore unknown parameter */ nread = decode_varint(&valuelen, p, end); @@ -747,3 +850,76 @@ int ngtcp2_decode_transport_params(ngtcp2_transport_params *params, return 0; } + +static int transport_params_copy_new(ngtcp2_transport_params **pdest, + const ngtcp2_transport_params *src, + const ngtcp2_mem *mem) { + size_t len = sizeof(**pdest); + ngtcp2_transport_params *dest; + uint8_t *p; + + if (src->version_info_present) { + len += src->version_info.other_versionslen; + } + + dest = ngtcp2_mem_malloc(mem, len); + if (dest == NULL) { + return NGTCP2_ERR_NOMEM; + } + + *dest = *src; + + if (src->version_info_present && src->version_info.other_versionslen) { + p = (uint8_t *)dest + sizeof(*dest); + memcpy(p, src->version_info.other_versions, + src->version_info.other_versionslen); + dest->version_info.other_versions = p; + } + + *pdest = dest; + + return 0; +} + +int ngtcp2_decode_transport_params_new(ngtcp2_transport_params **pparams, + ngtcp2_transport_params_type exttype, + const uint8_t *data, size_t datalen, + const ngtcp2_mem *mem) { + int rv; + ngtcp2_transport_params params; + + rv = ngtcp2_decode_transport_params(¶ms, exttype, data, datalen); + if (rv < 0) { + return rv; + } + + if (mem == NULL) { + mem = ngtcp2_mem_default(); + } + + return transport_params_copy_new(pparams, ¶ms, mem); +} + +void ngtcp2_transport_params_del(ngtcp2_transport_params *params, + const ngtcp2_mem *mem) { + if (params == NULL) { + return; + } + + if (mem == NULL) { + mem = ngtcp2_mem_default(); + } + + ngtcp2_mem_free(mem, params); +} + +int ngtcp2_transport_params_copy_new(ngtcp2_transport_params **pdest, + const ngtcp2_transport_params *src, + const ngtcp2_mem *mem) { + if (src == NULL) { + *pdest = NULL; + return 0; + } + + return transport_params_copy_new(pdest, src, mem); +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.h index 6e6f12a0956..9a9d95f5b9f 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_crypto.h @@ -41,11 +41,38 @@ /* NGTCP2_MAX_AEAD_OVERHEAD is expected maximum AEAD overhead. */ #define NGTCP2_MAX_AEAD_OVERHEAD 16 +/* ngtcp2_transport_param_id is the registry of QUIC transport + parameter ID. */ +typedef enum ngtcp2_transport_param_id { + NGTCP2_TRANSPORT_PARAM_ORIGINAL_DESTINATION_CONNECTION_ID = 0x0000, + NGTCP2_TRANSPORT_PARAM_MAX_IDLE_TIMEOUT = 0x0001, + NGTCP2_TRANSPORT_PARAM_STATELESS_RESET_TOKEN = 0x0002, + NGTCP2_TRANSPORT_PARAM_MAX_UDP_PAYLOAD_SIZE = 0x0003, + NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_DATA = 0x0004, + NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_BIDI_LOCAL = 0x0005, + NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_BIDI_REMOTE = 0x0006, + NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_UNI = 0x0007, + NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAMS_BIDI = 0x0008, + NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAMS_UNI = 0x0009, + NGTCP2_TRANSPORT_PARAM_ACK_DELAY_EXPONENT = 0x000a, + NGTCP2_TRANSPORT_PARAM_MAX_ACK_DELAY = 0x000b, + NGTCP2_TRANSPORT_PARAM_DISABLE_ACTIVE_MIGRATION = 0x000c, + NGTCP2_TRANSPORT_PARAM_PREFERRED_ADDRESS = 0x000d, + NGTCP2_TRANSPORT_PARAM_ACTIVE_CONNECTION_ID_LIMIT = 0x000e, + NGTCP2_TRANSPORT_PARAM_INITIAL_SOURCE_CONNECTION_ID = 0x000f, + NGTCP2_TRANSPORT_PARAM_RETRY_SOURCE_CONNECTION_ID = 0x0010, + /* https://datatracker.ietf.org/doc/html/rfc9221 */ + NGTCP2_TRANSPORT_PARAM_MAX_DATAGRAM_FRAME_SIZE = 0x0020, + NGTCP2_TRANSPORT_PARAM_GREASE_QUIC_BIT = 0x2ab2, + /* https://quicwg.org/quic-v2/draft-ietf-quic-v2.html */ + NGTCP2_TRANSPORT_PARAM_VERSION_INFORMATION_DRAFT = 0xff73db, +} ngtcp2_transport_param_id; + /* NGTCP2_CRYPTO_KM_FLAG_NONE indicates that no flag is set. */ -#define NGTCP2_CRYPTO_KM_FLAG_NONE 0x00 +#define NGTCP2_CRYPTO_KM_FLAG_NONE 0x00u /* NGTCP2_CRYPTO_KM_FLAG_KEY_PHASE_ONE is set if key phase bit is set. */ -#define NGTCP2_CRYPTO_KM_FLAG_KEY_PHASE_ONE 0x01 +#define NGTCP2_CRYPTO_KM_FLAG_KEY_PHASE_ONE 0x01u typedef struct ngtcp2_crypto_km { ngtcp2_vec secret; @@ -100,4 +127,21 @@ typedef struct ngtcp2_crypto_cc { void ngtcp2_crypto_create_nonce(uint8_t *dest, const uint8_t *iv, size_t ivlen, int64_t pkt_num); +/* + * ngtcp2_transport_params_copy_new makes a copy of |src|, and assigns + * it to |*pdest|. If |src| is NULL, NULL is assigned to |*pdest|. + * + * Caller is responsible to call ngtcp2_transport_params_del to free + * the memory assigned to |*pdest|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGTCP2_ERR_NOMEM + * Out of memory. + */ +int ngtcp2_transport_params_copy_new(ngtcp2_transport_params **pdest, + const ngtcp2_transport_params *src, + const ngtcp2_mem *mem); + #endif /* NGTCP2_CRYPTO_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_err.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_err.c index bd15e0988be..8f676da3ef0 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_err.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_err.c @@ -64,8 +64,8 @@ const char *ngtcp2_strerror(int liberr) { return "ERR_MALFORMED_TRANSPORT_PARAM"; case NGTCP2_ERR_FRAME_ENCODING: return "ERR_FRAME_ENCODING"; - case NGTCP2_ERR_TLS_DECRYPT: - return "ERR_TLS_DECRYPT"; + case NGTCP2_ERR_DECRYPT: + return "ERR_DECRYPT"; case NGTCP2_ERR_STREAM_SHUT_WR: return "ERR_STREAM_SHUT_WR"; case NGTCP2_ERR_STREAM_NOT_FOUND: @@ -82,8 +82,6 @@ const char *ngtcp2_strerror(int liberr) { return "ERR_TRANSPORT_PARAM"; case NGTCP2_ERR_DISCARD_PKT: return "ERR_DISCARD_PKT"; - case NGTCP2_ERR_PATH_VALIDATION_FAILED: - return "ERR_PATH_VALIDATION_FAILED"; case NGTCP2_ERR_CONN_ID_BLOCKED: return "ERR_CONN_ID_BLOCKED"; case NGTCP2_ERR_CALLBACK_FAILURE: @@ -102,6 +100,14 @@ const char *ngtcp2_strerror(int liberr) { return "ERR_AEAD_LIMIT_REACHED"; case NGTCP2_ERR_NO_VIABLE_PATH: return "ERR_NO_VIABLE_PATH"; + case NGTCP2_ERR_VERSION_NEGOTIATION: + return "ERR_VERSION_NEGOTIATION"; + case NGTCP2_ERR_HANDSHAKE_TIMEOUT: + return "ERR_HANDSHAKE_TIMEOUT"; + case NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE: + return "ERR_VERSION_NEGOTIATION_FAILURE"; + case NGTCP2_ERR_IDLE_CLOSE: + return "ERR_IDLE_CLOSE"; default: return "(unknown)"; } @@ -129,6 +135,8 @@ uint64_t ngtcp2_err_infer_quic_transport_error_code(int liberr) { case NGTCP2_ERR_TRANSPORT_PARAM: return NGTCP2_TRANSPORT_PARAMETER_ERROR; case NGTCP2_ERR_INVALID_ARGUMENT: + case NGTCP2_ERR_NOMEM: + case NGTCP2_ERR_CALLBACK_FAILURE: return NGTCP2_INTERNAL_ERROR; case NGTCP2_ERR_STREAM_STATE: return NGTCP2_STREAM_STATE_ERROR; @@ -138,6 +146,8 @@ uint64_t ngtcp2_err_infer_quic_transport_error_code(int liberr) { return NGTCP2_AEAD_LIMIT_REACHED; case NGTCP2_ERR_NO_VIABLE_PATH: return NGTCP2_NO_VIABLE_PATH; + case NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE: + return NGTCP2_VERSION_NEGOTIATION_ERROR_DRAFT; default: return NGTCP2_PROTOCOL_VIOLATION; } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_gaptr.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_gaptr.c index 6e7f3b7e554..87c23898e82 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_gaptr.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_gaptr.c @@ -23,29 +23,26 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "ngtcp2_gaptr.h" -#include "ngtcp2_range.h" #include #include -int ngtcp2_gaptr_init(ngtcp2_gaptr *gaptr, const ngtcp2_mem *mem) { - int rv; - ngtcp2_range range = {0, UINT64_MAX}; +void ngtcp2_gaptr_init(ngtcp2_gaptr *gaptr, const ngtcp2_mem *mem) { + ngtcp2_ksl_init(&gaptr->gap, ngtcp2_ksl_range_compar, sizeof(ngtcp2_range), + mem); - rv = ngtcp2_ksl_init(&gaptr->gap, ngtcp2_ksl_range_compar, - sizeof(ngtcp2_range), mem); - if (rv != 0) { - return rv; - } + gaptr->mem = mem; +} + +static int gaptr_gap_init(ngtcp2_gaptr *gaptr) { + ngtcp2_range range = {0, UINT64_MAX}; + int rv; rv = ngtcp2_ksl_insert(&gaptr->gap, NULL, &range, NULL); if (rv != 0) { - ngtcp2_ksl_free(&gaptr->gap); return rv; } - gaptr->mem = mem; - return 0; } @@ -57,11 +54,18 @@ void ngtcp2_gaptr_free(ngtcp2_gaptr *gaptr) { ngtcp2_ksl_free(&gaptr->gap); } -int ngtcp2_gaptr_push(ngtcp2_gaptr *gaptr, uint64_t offset, size_t datalen) { +int ngtcp2_gaptr_push(ngtcp2_gaptr *gaptr, uint64_t offset, uint64_t datalen) { int rv; ngtcp2_range k, m, l, r, q = {offset, offset + datalen}; ngtcp2_ksl_it it; + if (ngtcp2_ksl_len(&gaptr->gap) == 0) { + rv = gaptr_gap_init(gaptr); + if (rv != 0) { + return rv; + } + } + it = ngtcp2_ksl_lower_bound_compar(&gaptr->gap, &q, ngtcp2_ksl_range_exclusive_compar); @@ -73,7 +77,7 @@ int ngtcp2_gaptr_push(ngtcp2_gaptr *gaptr, uint64_t offset, size_t datalen) { } if (ngtcp2_range_eq(&k, &m)) { - ngtcp2_ksl_remove(&gaptr->gap, &it, &k); + ngtcp2_ksl_remove_hint(&gaptr->gap, &it, &it, &k); continue; } ngtcp2_range_cut(&l, &r, &k, &m); @@ -95,35 +99,69 @@ int ngtcp2_gaptr_push(ngtcp2_gaptr *gaptr, uint64_t offset, size_t datalen) { } uint64_t ngtcp2_gaptr_first_gap_offset(ngtcp2_gaptr *gaptr) { - ngtcp2_ksl_it it = ngtcp2_ksl_begin(&gaptr->gap); - ngtcp2_range r = *(ngtcp2_range *)ngtcp2_ksl_it_key(&it); + ngtcp2_ksl_it it; + ngtcp2_range r; + + if (ngtcp2_ksl_len(&gaptr->gap) == 0) { + return 0; + } + + it = ngtcp2_ksl_begin(&gaptr->gap); + r = *(ngtcp2_range *)ngtcp2_ksl_it_key(&it); + return r.begin; } -ngtcp2_ksl_it ngtcp2_gaptr_get_first_gap_after(ngtcp2_gaptr *gaptr, - uint64_t offset) { +ngtcp2_range ngtcp2_gaptr_get_first_gap_after(ngtcp2_gaptr *gaptr, + uint64_t offset) { ngtcp2_range q = {offset, offset + 1}; - return ngtcp2_ksl_lower_bound_compar(&gaptr->gap, &q, - ngtcp2_ksl_range_exclusive_compar); + ngtcp2_ksl_it it; + + if (ngtcp2_ksl_len(&gaptr->gap) == 0) { + ngtcp2_range r = {0, UINT64_MAX}; + return r; + } + + it = ngtcp2_ksl_lower_bound_compar(&gaptr->gap, &q, + ngtcp2_ksl_range_exclusive_compar); + + assert(!ngtcp2_ksl_it_end(&it)); + + return *(ngtcp2_range *)ngtcp2_ksl_it_key(&it); } int ngtcp2_gaptr_is_pushed(ngtcp2_gaptr *gaptr, uint64_t offset, - size_t datalen) { + uint64_t datalen) { ngtcp2_range q = {offset, offset + datalen}; - ngtcp2_ksl_it it = ngtcp2_ksl_lower_bound_compar( - &gaptr->gap, &q, ngtcp2_ksl_range_exclusive_compar); - ngtcp2_range k = *(ngtcp2_range *)ngtcp2_ksl_it_key(&it); - ngtcp2_range m = ngtcp2_range_intersect(&q, &k); + ngtcp2_ksl_it it; + ngtcp2_range k; + ngtcp2_range m; + + if (ngtcp2_ksl_len(&gaptr->gap) == 0) { + return 0; + } + + it = ngtcp2_ksl_lower_bound_compar(&gaptr->gap, &q, + ngtcp2_ksl_range_exclusive_compar); + k = *(ngtcp2_range *)ngtcp2_ksl_it_key(&it); + m = ngtcp2_range_intersect(&q, &k); + return ngtcp2_range_len(&m) == 0; } void ngtcp2_gaptr_drop_first_gap(ngtcp2_gaptr *gaptr) { - ngtcp2_ksl_it it = ngtcp2_ksl_begin(&gaptr->gap); + ngtcp2_ksl_it it; ngtcp2_range r; + if (ngtcp2_ksl_len(&gaptr->gap) == 0) { + return; + } + + it = ngtcp2_ksl_begin(&gaptr->gap); + assert(!ngtcp2_ksl_it_end(&it)); r = *(ngtcp2_range *)ngtcp2_ksl_it_key(&it); - ngtcp2_ksl_remove(&gaptr->gap, NULL, &r); + ngtcp2_ksl_remove_hint(&gaptr->gap, NULL, &it, &r); } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_gaptr.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_gaptr.h index 500d376008a..0f100a81c42 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_gaptr.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_gaptr.h @@ -33,6 +33,7 @@ #include "ngtcp2_mem.h" #include "ngtcp2_ksl.h" +#include "ngtcp2_range.h" /* * ngtcp2_gaptr maintains the gap in the range [0, UINT64_MAX). @@ -47,14 +48,8 @@ typedef struct ngtcp2_gaptr { /* * ngtcp2_gaptr_init initializes |gaptr|. - * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: - * - * NGTCP2_ERR_NOMEM - * Out of memory. */ -int ngtcp2_gaptr_init(ngtcp2_gaptr *gaptr, const ngtcp2_mem *mem); +void ngtcp2_gaptr_init(ngtcp2_gaptr *gaptr, const ngtcp2_mem *mem); /* * ngtcp2_gaptr_free frees resources allocated for |gaptr|. @@ -71,7 +66,7 @@ void ngtcp2_gaptr_free(ngtcp2_gaptr *gaptr); * NGTCP2_ERR_NOMEM * Out of memory */ -int ngtcp2_gaptr_push(ngtcp2_gaptr *gaptr, uint64_t offset, size_t datalen); +int ngtcp2_gaptr_push(ngtcp2_gaptr *gaptr, uint64_t offset, uint64_t datalen); /* * ngtcp2_gaptr_first_gap_offset returns the offset to the first gap. @@ -80,18 +75,18 @@ int ngtcp2_gaptr_push(ngtcp2_gaptr *gaptr, uint64_t offset, size_t datalen); uint64_t ngtcp2_gaptr_first_gap_offset(ngtcp2_gaptr *gaptr); /* - * ngtcp2_gaptr_get_first_gap_after returns the iterator pointing to - * the first gap which overlaps or comes after |offset|. + * ngtcp2_gaptr_get_first_gap_after returns the first gap which + * overlaps or comes after |offset|. */ -ngtcp2_ksl_it ngtcp2_gaptr_get_first_gap_after(ngtcp2_gaptr *gaptr, - uint64_t offset); +ngtcp2_range ngtcp2_gaptr_get_first_gap_after(ngtcp2_gaptr *gaptr, + uint64_t offset); /* * ngtcp2_gaptr_is_pushed returns nonzero if range [offset, offset + * datalen) is completely pushed into this object. */ int ngtcp2_gaptr_is_pushed(ngtcp2_gaptr *gaptr, uint64_t offset, - size_t datalen); + uint64_t datalen); /* * ngtcp2_gaptr_drop_first_gap deletes the first gap entirely as if diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_idtr.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_idtr.c index f04806b4a8b..d9880227690 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_idtr.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_idtr.c @@ -26,17 +26,10 @@ #include -int ngtcp2_idtr_init(ngtcp2_idtr *idtr, int server, const ngtcp2_mem *mem) { - int rv; - - rv = ngtcp2_gaptr_init(&idtr->gap, mem); - if (rv != 0) { - return rv; - } +void ngtcp2_idtr_init(ngtcp2_idtr *idtr, int server, const ngtcp2_mem *mem) { + ngtcp2_gaptr_init(&idtr->gap, mem); idtr->server = server; - - return 0; } void ngtcp2_idtr_free(ngtcp2_idtr *idtr) { diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_idtr.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_idtr.h index 1be64dc16e7..edb8c68c8db 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_idtr.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_idtr.h @@ -51,14 +51,8 @@ typedef struct ngtcp2_idtr { * * If this object records server initiated ID (even number), set * |server| to nonzero. - * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: - * - * NGTCP2_ERR_NOMEM - * Out of memory. */ -int ngtcp2_idtr_init(ngtcp2_idtr *idtr, int server, const ngtcp2_mem *mem); +void ngtcp2_idtr_init(ngtcp2_idtr *idtr, int server, const ngtcp2_mem *mem); /* * ngtcp2_idtr_free frees resources allocated for |idtr|. diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_ksl.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_ksl.c index fd25e3514e8..0bd424cb0bc 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_ksl.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_ksl.c @@ -33,9 +33,11 @@ #include "ngtcp2_mem.h" #include "ngtcp2_range.h" +static ngtcp2_ksl_blk null_blk = {{{NULL, NULL, 0, 0, {0}}}}; + static size_t ksl_nodelen(size_t keylen) { - return (sizeof(ngtcp2_ksl_node) + keylen - sizeof(uint64_t) + 0xf) & - (size_t)~0xf; + return (sizeof(ngtcp2_ksl_node) + keylen - sizeof(uint64_t) + 0xfu) & + ~(uintptr_t)0xfu; } static size_t ksl_blklen(size_t nodelen) { @@ -51,31 +53,48 @@ static void ksl_node_set_key(ngtcp2_ksl *ksl, ngtcp2_ksl_node *node, memcpy(node->key, key, ksl->keylen); } -int ngtcp2_ksl_init(ngtcp2_ksl *ksl, ngtcp2_ksl_compar compar, size_t keylen, - const ngtcp2_mem *mem) { +void ngtcp2_ksl_init(ngtcp2_ksl *ksl, ngtcp2_ksl_compar compar, size_t keylen, + const ngtcp2_mem *mem) { size_t nodelen = ksl_nodelen(keylen); - size_t blklen = ksl_blklen(nodelen); - ngtcp2_ksl_blk *head; - ksl->head = ngtcp2_mem_malloc(mem, blklen); - if (!ksl->head) { - return NGTCP2_ERR_NOMEM; - } - ksl->front = ksl->back = ksl->head; + ngtcp2_objalloc_init(&ksl->blkalloc, + ((ksl_blklen(nodelen) + 0xfu) & ~(uintptr_t)0xfu) * 8, + mem); + + ksl->head = NULL; + ksl->front = ksl->back = NULL; ksl->compar = compar; ksl->keylen = keylen; ksl->nodelen = nodelen; ksl->n = 0; - ksl->mem = mem; +} + +static ngtcp2_ksl_blk *ksl_blk_objalloc_new(ngtcp2_ksl *ksl) { + return ngtcp2_objalloc_ksl_blk_len_get(&ksl->blkalloc, + ksl_blklen(ksl->nodelen)); +} + +static void ksl_blk_objalloc_del(ngtcp2_ksl *ksl, ngtcp2_ksl_blk *blk) { + ngtcp2_objalloc_ksl_blk_release(&ksl->blkalloc, blk); +} + +static int ksl_head_init(ngtcp2_ksl *ksl) { + ngtcp2_ksl_blk *head = ksl_blk_objalloc_new(ksl); + if (!head) { + return NGTCP2_ERR_NOMEM; + } - head = ksl->head; head->next = head->prev = NULL; head->n = 0; head->leaf = 1; + ksl->head = head; + ksl->front = ksl->back = head; + return 0; } +#ifdef NOMEMPOOL /* * ksl_free_blk frees |blk| recursively. */ @@ -88,15 +107,20 @@ static void ksl_free_blk(ngtcp2_ksl *ksl, ngtcp2_ksl_blk *blk) { } } - ngtcp2_mem_free(ksl->mem, blk); + ksl_blk_objalloc_del(ksl, blk); } +#endif /* NOMEMPOOL */ void ngtcp2_ksl_free(ngtcp2_ksl *ksl) { - if (!ksl) { + if (!ksl || !ksl->head) { return; } +#ifdef NOMEMPOOL ksl_free_blk(ksl, ksl->head); +#endif /* NOMEMPOOL */ + + ngtcp2_objalloc_free(&ksl->blkalloc); } /* @@ -110,7 +134,7 @@ void ngtcp2_ksl_free(ngtcp2_ksl *ksl) { static ngtcp2_ksl_blk *ksl_split_blk(ngtcp2_ksl *ksl, ngtcp2_ksl_blk *blk) { ngtcp2_ksl_blk *rblk; - rblk = ngtcp2_mem_malloc(ksl->mem, ksl_blklen(ksl->nodelen)); + rblk = ksl_blk_objalloc_new(ksl); if (rblk == NULL) { return NULL; } @@ -194,9 +218,9 @@ static int ksl_split_head(ngtcp2_ksl *ksl) { lblk = ksl->head; - nhead = ngtcp2_mem_malloc(ksl->mem, ksl_blklen(ksl->nodelen)); + nhead = ksl_blk_objalloc_new(ksl); if (nhead == NULL) { - ngtcp2_mem_free(ksl->mem, rblk); + ksl_blk_objalloc_del(ksl, rblk); return NGTCP2_ERR_NOMEM; } nhead->next = nhead->prev = NULL; @@ -240,29 +264,33 @@ static void ksl_insert_node(ngtcp2_ksl *ksl, ngtcp2_ksl_blk *blk, size_t i, static size_t ksl_bsearch(ngtcp2_ksl *ksl, ngtcp2_ksl_blk *blk, const ngtcp2_ksl_key *key, ngtcp2_ksl_compar compar) { - ngtcp2_ssize left = -1, right = (ngtcp2_ssize)blk->n, mid; + size_t i; ngtcp2_ksl_node *node; - while (right - left > 1) { - mid = (left + right) >> 1; - node = ngtcp2_ksl_nth_node(ksl, blk, (size_t)mid); - if (compar((ngtcp2_ksl_key *)node->key, key)) { - left = mid; - } else { - right = mid; - } - } + for (i = 0, node = (ngtcp2_ksl_node *)(void *)blk->nodes; + i < blk->n && compar((ngtcp2_ksl_key *)node->key, key); + ++i, node = (ngtcp2_ksl_node *)(void *)((uint8_t *)node + ksl->nodelen)) + ; - return (size_t)right; + return i; } int ngtcp2_ksl_insert(ngtcp2_ksl *ksl, ngtcp2_ksl_it *it, const ngtcp2_ksl_key *key, void *data) { - ngtcp2_ksl_blk *blk = ksl->head; + ngtcp2_ksl_blk *blk; ngtcp2_ksl_node *node; size_t i; int rv; + if (!ksl->head) { + rv = ksl_head_init(ksl); + if (rv != 0) { + return rv; + } + } + + blk = ksl->head; + if (blk->n == NGTCP2_KSL_MAX_NBLK) { rv = ksl_split_head(ksl); if (rv != 0) { @@ -374,10 +402,10 @@ static ngtcp2_ksl_blk *ksl_merge_node(ngtcp2_ksl *ksl, ngtcp2_ksl_blk *blk, ksl->back = lblk; } - ngtcp2_mem_free(ksl->mem, rblk); + ksl_blk_objalloc_del(ksl, rblk); if (ksl->head == blk && blk->n == 2) { - ngtcp2_mem_free(ksl->mem, ksl->head); + ksl_blk_objalloc_del(ksl, ksl->head); ksl->head = lblk; } else { ksl_remove_node(ksl, blk, i + 1); @@ -469,12 +497,42 @@ static int key_equal(ngtcp2_ksl_compar compar, const ngtcp2_ksl_key *lhs, return !compar(lhs, rhs) && !compar(rhs, lhs); } +int ngtcp2_ksl_remove_hint(ngtcp2_ksl *ksl, ngtcp2_ksl_it *it, + const ngtcp2_ksl_it *hint, + const ngtcp2_ksl_key *key) { + ngtcp2_ksl_blk *blk = hint->blk; + + assert(ksl->head); + + if (blk->n <= NGTCP2_KSL_MIN_NBLK) { + return ngtcp2_ksl_remove(ksl, it, key); + } + + ksl_remove_node(ksl, blk, hint->i); + + --ksl->n; + + if (it) { + if (hint->i == blk->n && blk->next) { + ngtcp2_ksl_it_init(it, ksl, blk->next, 0); + } else { + ngtcp2_ksl_it_init(it, ksl, blk, hint->i); + } + } + + return 0; +} + int ngtcp2_ksl_remove(ngtcp2_ksl *ksl, ngtcp2_ksl_it *it, const ngtcp2_ksl_key *key) { ngtcp2_ksl_blk *blk = ksl->head; ngtcp2_ksl_node *node; size_t i; + if (!ksl->head) { + return NGTCP2_ERR_INVALID_ARGUMENT; + } + if (!blk->leaf && blk->n == 2 && ngtcp2_ksl_nth_node(ksl, blk, 0)->blk->n == NGTCP2_KSL_MIN_NBLK && ngtcp2_ksl_nth_node(ksl, blk, 1)->blk->n == NGTCP2_KSL_MIN_NBLK) { @@ -550,6 +608,11 @@ ngtcp2_ksl_it ngtcp2_ksl_lower_bound(ngtcp2_ksl *ksl, ngtcp2_ksl_it it; size_t i; + if (!blk) { + ngtcp2_ksl_it_init(&it, ksl, &null_blk, 0); + return it; + } + for (;;) { i = ksl_bsearch(ksl, blk, key, ksl->compar); @@ -587,6 +650,11 @@ ngtcp2_ksl_it ngtcp2_ksl_lower_bound_compar(ngtcp2_ksl *ksl, ngtcp2_ksl_it it; size_t i; + if (!blk) { + ngtcp2_ksl_it_init(&it, ksl, &null_blk, 0); + return it; + } + for (;;) { i = ksl_bsearch(ksl, blk, key, compar); @@ -623,6 +691,8 @@ void ngtcp2_ksl_update_key(ngtcp2_ksl *ksl, const ngtcp2_ksl_key *old_key, ngtcp2_ksl_node *node; size_t i; + assert(ksl->head); + for (;;) { i = ksl_bsearch(ksl, blk, old_key, ksl->compar); @@ -667,36 +737,49 @@ static void ksl_print(ngtcp2_ksl *ksl, ngtcp2_ksl_blk *blk, size_t level) { size_t ngtcp2_ksl_len(ngtcp2_ksl *ksl) { return ksl->n; } void ngtcp2_ksl_clear(ngtcp2_ksl *ksl) { - size_t i; - ngtcp2_ksl_blk *head; - - if (!ksl->head->leaf) { - for (i = 0; i < ksl->head->n; ++i) { - ksl_free_blk(ksl, ngtcp2_ksl_nth_node(ksl, ksl->head, i)->blk); - } + if (!ksl->head) { + return; } - ksl->front = ksl->back = ksl->head; - ksl->n = 0; +#ifdef NOMEMPOOL + ksl_free_blk(ksl, ksl->head); +#endif /* NOMEMPOOL */ - head = ksl->head; + ksl->front = ksl->back = ksl->head = NULL; + ksl->n = 0; - head->next = head->prev = NULL; - head->n = 0; - head->leaf = 1; + ngtcp2_objalloc_clear(&ksl->blkalloc); } -void ngtcp2_ksl_print(ngtcp2_ksl *ksl) { ksl_print(ksl, ksl->head, 0); } +void ngtcp2_ksl_print(ngtcp2_ksl *ksl) { + if (!ksl->head) { + return; + } + + ksl_print(ksl, ksl->head, 0); +} ngtcp2_ksl_it ngtcp2_ksl_begin(const ngtcp2_ksl *ksl) { ngtcp2_ksl_it it; - ngtcp2_ksl_it_init(&it, ksl, ksl->front, 0); + + if (ksl->head) { + ngtcp2_ksl_it_init(&it, ksl, ksl->front, 0); + } else { + ngtcp2_ksl_it_init(&it, ksl, &null_blk, 0); + } + return it; } ngtcp2_ksl_it ngtcp2_ksl_end(const ngtcp2_ksl *ksl) { ngtcp2_ksl_it it; - ngtcp2_ksl_it_init(&it, ksl, ksl->back, ksl->back->n); + + if (ksl->head) { + ngtcp2_ksl_it_init(&it, ksl, ksl->back, ksl->back->n); + } else { + ngtcp2_ksl_it_init(&it, ksl, &null_blk, 0); + } + return it; } @@ -707,11 +790,6 @@ void ngtcp2_ksl_it_init(ngtcp2_ksl_it *it, const ngtcp2_ksl *ksl, it->i = i; } -void *ngtcp2_ksl_it_get(const ngtcp2_ksl_it *it) { - assert(it->i < it->blk->n); - return ngtcp2_ksl_nth_node(it->ksl, it->blk, it->i)->data; -} - void ngtcp2_ksl_it_prev(ngtcp2_ksl_it *it) { assert(!ngtcp2_ksl_it_begin(it)); diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_ksl.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_ksl.h index f24487d03e9..312a151d4aa 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_ksl.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_ksl.h @@ -33,6 +33,8 @@ #include +#include "ngtcp2_objalloc.h" + /* * Skip List using single key instead of range. */ @@ -79,25 +81,33 @@ struct ngtcp2_ksl_node { * ngtcp2_ksl_blk contains ngtcp2_ksl_node objects. */ struct ngtcp2_ksl_blk { - /* next points to the next block if leaf field is nonzero. */ - ngtcp2_ksl_blk *next; - /* prev points to the previous block if leaf field is nonzero. */ - ngtcp2_ksl_blk *prev; - /* n is the number of nodes this object contains in nodes. */ - uint32_t n; - /* leaf is nonzero if this block contains leaf nodes. */ - uint32_t leaf; union { - uint64_t align; - /* nodes is a buffer to contain NGTCP2_KSL_MAX_NBLK - ngtcp2_ksl_node objects. Because ngtcp2_ksl_node object is - allocated along with the additional variable length key - storage, the size of buffer is unknown until ngtcp2_ksl_init is - called. */ - uint8_t nodes[1]; + struct { + /* next points to the next block if leaf field is nonzero. */ + ngtcp2_ksl_blk *next; + /* prev points to the previous block if leaf field is nonzero. */ + ngtcp2_ksl_blk *prev; + /* n is the number of nodes this object contains in nodes. */ + uint32_t n; + /* leaf is nonzero if this block contains leaf nodes. */ + uint32_t leaf; + union { + uint64_t align; + /* nodes is a buffer to contain NGTCP2_KSL_MAX_NBLK + ngtcp2_ksl_node objects. Because ngtcp2_ksl_node object is + allocated along with the additional variable length key + storage, the size of buffer is unknown until ngtcp2_ksl_init is + called. */ + uint8_t nodes[1]; + }; + }; + + ngtcp2_opl_entry oplent; }; }; +ngtcp2_objalloc_def(ksl_blk, ngtcp2_ksl_blk, oplent); + /* * ngtcp2_ksl_compar is a function type which returns nonzero if key * |lhs| should be placed before |rhs|. It returns 0 otherwise. @@ -122,6 +132,7 @@ struct ngtcp2_ksl_it { * ngtcp2_ksl is a deterministic paged skip list. */ struct ngtcp2_ksl { + ngtcp2_objalloc blkalloc; /* head points to the root block. */ ngtcp2_ksl_blk *head; /* front points to the first leaf block. */ @@ -135,21 +146,14 @@ struct ngtcp2_ksl { /* nodelen is the actual size of ngtcp2_ksl_node including key storage. */ size_t nodelen; - const ngtcp2_mem *mem; }; /* * ngtcp2_ksl_init initializes |ksl|. |compar| specifies compare * function. |keylen| is the length of key. - * - * It returns 0 if it succeeds, or one of the following negative error - * codes: - * - * NGTCP2_ERR_NOMEM - * Out of memory. */ -int ngtcp2_ksl_init(ngtcp2_ksl *ksl, ngtcp2_ksl_compar compar, size_t keylen, - const ngtcp2_mem *mem); +void ngtcp2_ksl_init(ngtcp2_ksl *ksl, ngtcp2_ksl_compar compar, size_t keylen, + const ngtcp2_mem *mem); /* * ngtcp2_ksl_free frees resources allocated for |ksl|. If |ksl| is @@ -191,6 +195,17 @@ int ngtcp2_ksl_insert(ngtcp2_ksl *ksl, ngtcp2_ksl_it *it, int ngtcp2_ksl_remove(ngtcp2_ksl *ksl, ngtcp2_ksl_it *it, const ngtcp2_ksl_key *key); +/* + * ngtcp2_ksl_remove_hint removes the |key| from |ksl|. |hint| must + * point to the same node denoted by |key|. |hint| is used to remove + * a node efficiently in some cases. Other than that, it behaves + * exactly like ngtcp2_ksl_remove. |it| and |hint| can point to the + * same object. + */ +int ngtcp2_ksl_remove_hint(ngtcp2_ksl *ksl, ngtcp2_ksl_it *it, + const ngtcp2_ksl_it *hint, + const ngtcp2_ksl_key *key); + /* * ngtcp2_ksl_lower_bound returns the iterator which points to the * first node which has the key which is equal to |key| or the last @@ -266,7 +281,8 @@ void ngtcp2_ksl_it_init(ngtcp2_ksl_it *it, const ngtcp2_ksl *ksl, * |it| points to. It is undefined to call this function when * ngtcp2_ksl_it_end(it) returns nonzero. */ -void *ngtcp2_ksl_it_get(const ngtcp2_ksl_it *it); +#define ngtcp2_ksl_it_get(IT) \ + ngtcp2_ksl_nth_node((IT)->ksl, (IT)->blk, (IT)->i)->data /* * ngtcp2_ksl_it_next advances the iterator by one. It is undefined diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_log.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_log.c index 0259404d3e2..ee37ff3517b 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_log.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_log.c @@ -34,6 +34,7 @@ #include "ngtcp2_str.h" #include "ngtcp2_vec.h" #include "ngtcp2_macro.h" +#include "ngtcp2_conv.h" void ngtcp2_log_init(ngtcp2_log *log, const ngtcp2_cid *scid, ngtcp2_printf log_printf, ngtcp2_tstamp ts, @@ -69,7 +70,7 @@ void ngtcp2_log_init(ngtcp2_log *log, const ngtcp2_cid *scid, * * # Frame event * - * () () + * () * * : * Flow direction. tx=transmission, rx=reception @@ -78,10 +79,7 @@ void ngtcp2_log_init(ngtcp2_log *log, const ngtcp2_cid *scid, * Packet number. * * : - * Packet name. (e.g., Initial, Handshake, S01) - * - * : - * Packet type in hex string. + * Packet name. (e.g., Initial, Handshake, 1RTT) * * : * Frame name. (e.g., STREAM, ACK, PING) @@ -94,16 +92,16 @@ void ngtcp2_log_init(ngtcp2_log *log, const ngtcp2_cid *scid, /* TODO Split second and remaining fraction with comma */ #define NGTCP2_LOG_HD "I%08" PRIu64 " 0x%s %s" -#define NGTCP2_LOG_PKT NGTCP2_LOG_HD " %s %" PRId64 " %s(0x%02x)" +#define NGTCP2_LOG_PKT NGTCP2_LOG_HD " %s %" PRId64 " %s" #define NGTCP2_LOG_TP NGTCP2_LOG_HD " remote transport_parameters" #define NGTCP2_LOG_FRM_HD_FIELDS(DIR) \ timestamp_cast(log->last_ts - log->ts), (const char *)log->scid, "frm", \ - (DIR), hd->pkt_num, strpkttype(hd), hd->type + (DIR), hd->pkt_num, strpkttype(hd) #define NGTCP2_LOG_PKT_HD_FIELDS(DIR) \ timestamp_cast(log->last_ts - log->ts), (const char *)log->scid, "pkt", \ - (DIR), hd->pkt_num, strpkttype(hd), hd->type + (DIR), hd->pkt_num, strpkttype(hd) #define NGTCP2_LOG_TP_HD_FIELDS \ timestamp_cast(log->last_ts - log->ts), (const char *)log->scid, "cry" @@ -140,6 +138,8 @@ static const char *strerrorcode(uint64_t error_code) { return "CRYPTO_BUFFER_EXCEEDED"; case NGTCP2_KEY_UPDATE_ERROR: return "KEY_UPDATE_ERROR"; + case NGTCP2_VERSION_NEGOTIATION_ERROR_DRAFT: + return "VERSION_NEGOTIATION_ERROR"; default: if (0x100u <= error_code && error_code <= 0x1ffu) { return "CRYPTO_ERROR"; @@ -155,8 +155,6 @@ static const char *strapperrorcode(uint64_t app_error_code) { static const char *strpkttype_long(uint8_t type) { switch (type) { - case NGTCP2_PKT_VERSION_NEGOTIATION: - return "VN"; case NGTCP2_PKT_INITIAL: return "Initial"; case NGTCP2_PKT_RETRY: @@ -174,7 +172,26 @@ static const char *strpkttype(const ngtcp2_pkt_hd *hd) { if (hd->flags & NGTCP2_PKT_FLAG_LONG_FORM) { return strpkttype_long(hd->type); } - return "Short"; + + switch (hd->type) { + case NGTCP2_PKT_VERSION_NEGOTIATION: + return "VN"; + case NGTCP2_PKT_STATELESS_RESET: + return "SR"; + case NGTCP2_PKT_1RTT: + return "1RTT"; + default: + return "(unknown)"; + } +} + +static const char *strpkttype_type_flags(uint8_t type, uint8_t flags) { + ngtcp2_pkt_hd hd = {0}; + + hd.type = type; + hd.flags = flags; + + return strpkttype(&hd); } static const char *strevent(ngtcp2_log_event ev) { @@ -201,13 +218,13 @@ static uint64_t timestamp_cast(uint64_t ns) { return ns / NGTCP2_MILLISECONDS; } static void log_fr_stream(ngtcp2_log *log, const ngtcp2_pkt_hd *hd, const ngtcp2_stream *fr, const char *dir) { - log->log_printf(log->user_data, - (NGTCP2_LOG_PKT " STREAM(0x%02x) id=0x%" PRIx64 - " fin=%d offset=%" PRIu64 " len=%zu uni=%d"), - NGTCP2_LOG_FRM_HD_FIELDS(dir), fr->type | fr->flags, - fr->stream_id, fr->fin, fr->offset, - ngtcp2_vec_len(fr->data, fr->datacnt), - (fr->stream_id & 0x2) != 0); + log->log_printf( + log->user_data, + (NGTCP2_LOG_PKT " STREAM(0x%02x) id=0x%" PRIx64 " fin=%d offset=%" PRIu64 + " len=%" PRIu64 " uni=%d"), + NGTCP2_LOG_FRM_HD_FIELDS(dir), fr->type | fr->flags, fr->stream_id, + fr->fin, fr->offset, ngtcp2_vec_len(fr->data, fr->datacnt), + (fr->stream_id & 0x2) != 0); } static void log_fr_ack(ngtcp2_log *log, const ngtcp2_pkt_hd *hd, @@ -396,17 +413,11 @@ static void log_fr_path_response(ngtcp2_log *log, const ngtcp2_pkt_hd *hd, static void log_fr_crypto(ngtcp2_log *log, const ngtcp2_pkt_hd *hd, const ngtcp2_crypto *fr, const char *dir) { - size_t datalen = 0; - size_t i; - - for (i = 0; i < fr->datacnt; ++i) { - datalen += fr->data[i].len; - } - log->log_printf( log->user_data, (NGTCP2_LOG_PKT " CRYPTO(0x%02x) offset=%" PRIu64 " len=%" PRIu64), - NGTCP2_LOG_FRM_HD_FIELDS(dir), fr->type, fr->offset, datalen); + NGTCP2_LOG_FRM_HD_FIELDS(dir), fr->type, fr->offset, + ngtcp2_vec_len(fr->data, fr->datacnt)); } static void log_fr_new_token(ngtcp2_log *log, const ngtcp2_pkt_hd *hd, @@ -446,7 +457,8 @@ static void log_fr_handshake_done(ngtcp2_log *log, const ngtcp2_pkt_hd *hd, static void log_fr_datagram(ngtcp2_log *log, const ngtcp2_pkt_hd *hd, const ngtcp2_datagram *fr, const char *dir) { - log->log_printf(log->user_data, (NGTCP2_LOG_PKT " DATAGRAM(0x%02x) len=%zu"), + log->log_printf(log->user_data, + (NGTCP2_LOG_PKT " DATAGRAM(0x%02x) len=%" PRIu64), NGTCP2_LOG_FRM_HD_FIELDS(dir), fr->type, ngtcp2_vec_len(fr->data, fr->datacnt)); } @@ -570,6 +582,8 @@ void ngtcp2_log_rx_sr(ngtcp2_log *log, const ngtcp2_pkt_stateless_reset *sr) { memset(&shd, 0, sizeof(shd)); + shd.type = NGTCP2_PKT_STATELESS_RESET; + log->log_printf( log->user_data, (NGTCP2_LOG_PKT " token=0x%s randlen=%zu"), NGTCP2_LOG_PKT_HD_FIELDS("rx"), @@ -583,6 +597,7 @@ void ngtcp2_log_remote_tp(ngtcp2_log *log, uint8_t exttype, uint8_t token[NGTCP2_STATELESS_RESET_TOKENLEN * 2 + 1]; uint8_t addr[16 * 2 + 7 + 1]; uint8_t cid[NGTCP2_MAX_CIDLEN * 2 + 1]; + size_t i; if (!log->log_printf) { return; @@ -694,6 +709,26 @@ void ngtcp2_log_remote_tp(ngtcp2_log *log, uint8_t exttype, log->log_printf(log->user_data, (NGTCP2_LOG_TP " max_datagram_frame_size=%" PRIu64), NGTCP2_LOG_TP_HD_FIELDS, params->max_datagram_frame_size); + log->log_printf(log->user_data, (NGTCP2_LOG_TP " grease_quic_bit=%d"), + NGTCP2_LOG_TP_HD_FIELDS, params->grease_quic_bit); + + if (params->version_info_present) { + log->log_printf( + log->user_data, + (NGTCP2_LOG_TP " version_information.chosen_version=0x%08x"), + NGTCP2_LOG_TP_HD_FIELDS, params->version_info.chosen_version); + + assert(!(params->version_info.other_versionslen & 0x3)); + + for (i = 0; i < params->version_info.other_versionslen; + i += sizeof(uint32_t)) { + log->log_printf( + log->user_data, + (NGTCP2_LOG_TP " version_information.other_versions[%zu]=0x%08x"), + NGTCP2_LOG_TP_HD_FIELDS, i >> 2, + ngtcp2_get_uint32(¶ms->version_info.other_versions[i])); + } + } } void ngtcp2_log_pkt_lost(ngtcp2_log *log, int64_t pkt_num, uint8_t type, @@ -702,11 +737,9 @@ void ngtcp2_log_pkt_lost(ngtcp2_log *log, int64_t pkt_num, uint8_t type, return; } - ngtcp2_log_info( - log, NGTCP2_LOG_EVENT_RCV, - "pkn=%" PRId64 " lost type=%s(0x%02x) sent_ts=%" PRIu64, pkt_num, - (flags & NGTCP2_PKT_FLAG_LONG_FORM) ? strpkttype_long(type) : "Short", - type, sent_ts); + ngtcp2_log_info(log, NGTCP2_LOG_EVENT_RCV, + "pkn=%" PRId64 " lost type=%s sent_ts=%" PRIu64, pkt_num, + strpkttype_type_flags(type, flags), sent_ts); } static void log_pkt_hd(ngtcp2_log *log, const ngtcp2_pkt_hd *hd, @@ -718,15 +751,21 @@ static void log_pkt_hd(ngtcp2_log *log, const ngtcp2_pkt_hd *hd, return; } - ngtcp2_log_info( - log, NGTCP2_LOG_EVENT_PKT, - "%s pkn=%" PRId64 " dcid=0x%s scid=0x%s type=%s(0x%02x) len=%zu k=%d", - dir, hd->pkt_num, - (const char *)ngtcp2_encode_hex(dcid, hd->dcid.data, hd->dcid.datalen), - (const char *)ngtcp2_encode_hex(scid, hd->scid.data, hd->scid.datalen), - (hd->flags & NGTCP2_PKT_FLAG_LONG_FORM) ? strpkttype_long(hd->type) - : "Short", - hd->type, hd->len, (hd->flags & NGTCP2_PKT_FLAG_KEY_PHASE) != 0); + if (hd->type == NGTCP2_PKT_1RTT) { + ngtcp2_log_info( + log, NGTCP2_LOG_EVENT_PKT, "%s pkn=%" PRId64 " dcid=0x%s type=%s k=%d", + dir, hd->pkt_num, + (const char *)ngtcp2_encode_hex(dcid, hd->dcid.data, hd->dcid.datalen), + strpkttype(hd), (hd->flags & NGTCP2_PKT_FLAG_KEY_PHASE) != 0); + } else { + ngtcp2_log_info( + log, NGTCP2_LOG_EVENT_PKT, + "%s pkn=%" PRId64 " dcid=0x%s scid=0x%s version=0x%08x type=%s len=%zu", + dir, hd->pkt_num, + (const char *)ngtcp2_encode_hex(dcid, hd->dcid.data, hd->dcid.datalen), + (const char *)ngtcp2_encode_hex(scid, hd->scid.data, hd->scid.datalen), + hd->version, strpkttype(hd), hd->len); + } } void ngtcp2_log_rx_pkt_hd(ngtcp2_log *log, const ngtcp2_pkt_hd *hd) { @@ -762,6 +801,6 @@ void ngtcp2_log_info(ngtcp2_log *log, ngtcp2_log_event ev, const char *fmt, void ngtcp2_log_tx_cancel(ngtcp2_log *log, const ngtcp2_pkt_hd *hd) { ngtcp2_log_info(log, NGTCP2_LOG_EVENT_PKT, - "cancel tx pkn=%" PRId64 " type=%s(0x%02x)", hd->pkt_num, - strpkttype(hd), hd->type); + "cancel tx pkn=%" PRId64 " type=%s", hd->pkt_num, + strpkttype(hd)); } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_log.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_log.h index bd1ac240a93..029ef1b757a 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_log.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_log.h @@ -33,9 +33,7 @@ #include "ngtcp2_pkt.h" -typedef struct ngtcp2_log ngtcp2_log; - -struct ngtcp2_log { +typedef struct ngtcp2_log { /* log_printf is a sink to write log. NULL means no logging output. */ ngtcp2_printf log_printf; @@ -49,7 +47,44 @@ struct ngtcp2_log { void *user_data; /* scid is SCID encoded as NULL-terminated hex string. */ uint8_t scid[NGTCP2_MAX_CIDLEN * 2 + 1]; -}; +} ngtcp2_log; + +/** + * @enum + * + * :type:`ngtcp2_log_event` defines an event of ngtcp2 library + * internal logger. + */ +typedef enum ngtcp2_log_event { + /** + * :enum:`NGTCP2_LOG_EVENT_NONE` represents no event. + */ + NGTCP2_LOG_EVENT_NONE, + /** + * :enum:`NGTCP2_LOG_EVENT_CON` is a connection (catch-all) event + */ + NGTCP2_LOG_EVENT_CON, + /** + * :enum:`NGTCP2_LOG_EVENT_PKT` is a packet event. + */ + NGTCP2_LOG_EVENT_PKT, + /** + * :enum:`NGTCP2_LOG_EVENT_FRM` is a QUIC frame event. + */ + NGTCP2_LOG_EVENT_FRM, + /** + * :enum:`NGTCP2_LOG_EVENT_RCV` is a congestion and recovery event. + */ + NGTCP2_LOG_EVENT_RCV, + /** + * :enum:`NGTCP2_LOG_EVENT_CRY` is a crypto event. + */ + NGTCP2_LOG_EVENT_CRY, + /** + * :enum:`NGTCP2_LOG_EVENT_PTV` is a path validation event. + */ + NGTCP2_LOG_EVENT_PTV, +} ngtcp2_log_event; void ngtcp2_log_init(ngtcp2_log *log, const ngtcp2_cid *scid, ngtcp2_printf log_printf, ngtcp2_tstamp ts, @@ -77,4 +112,12 @@ void ngtcp2_log_tx_pkt_hd(ngtcp2_log *log, const ngtcp2_pkt_hd *hd); void ngtcp2_log_tx_cancel(ngtcp2_log *log, const ngtcp2_pkt_hd *hd); +/** + * @function + * + * `ngtcp2_log_info` writes info level log. + */ +void ngtcp2_log_info(ngtcp2_log *log, ngtcp2_log_event ev, const char *fmt, + ...); + #endif /* NGTCP2_LOG_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_map.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_map.c index 5d24961dc98..12bc6e84bd4 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_map.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_map.c @@ -27,170 +27,166 @@ #include #include +#include #include "ngtcp2_conv.h" -#define INITIAL_TABLE_LENGTH 256 +#define NGTCP2_INITIAL_TABLE_LENBITS 4 -int ngtcp2_map_init(ngtcp2_map *map, const ngtcp2_mem *mem) { +void ngtcp2_map_init(ngtcp2_map *map, const ngtcp2_mem *mem) { map->mem = mem; - map->tablelen = INITIAL_TABLE_LENGTH; - map->table = ngtcp2_mem_calloc(mem, map->tablelen, sizeof(ngtcp2_map_bucket)); - if (map->table == NULL) { - return NGTCP2_ERR_NOMEM; - } - + map->tablelen = 0; + map->tablelenbits = 0; + map->table = NULL; map->size = 0; - - return 0; } void ngtcp2_map_free(ngtcp2_map *map) { - size_t i; - ngtcp2_map_bucket *bkt; - if (!map) { return; } - for (i = 0; i < map->tablelen; ++i) { - bkt = &map->table[i]; - if (bkt->ksl) { - ngtcp2_ksl_free(bkt->ksl); - ngtcp2_mem_free(map->mem, bkt->ksl); - } - } - ngtcp2_mem_free(map->mem, map->table); } -void ngtcp2_map_each_free(ngtcp2_map *map, - int (*func)(ngtcp2_map_entry *entry, void *ptr), +void ngtcp2_map_each_free(ngtcp2_map *map, int (*func)(void *data, void *ptr), void *ptr) { uint32_t i; ngtcp2_map_bucket *bkt; - ngtcp2_ksl_it it; for (i = 0; i < map->tablelen; ++i) { bkt = &map->table[i]; - if (bkt->ptr) { - func(bkt->ptr, ptr); - bkt->ptr = NULL; - assert(bkt->ksl == NULL || ngtcp2_ksl_len(bkt->ksl) == 0); + if (bkt->data == NULL) { continue; } - if (bkt->ksl) { - for (it = ngtcp2_ksl_begin(bkt->ksl); !ngtcp2_ksl_it_end(&it); - ngtcp2_ksl_it_next(&it)) { - func(ngtcp2_ksl_it_get(&it), ptr); - } - - ngtcp2_ksl_free(bkt->ksl); - ngtcp2_mem_free(map->mem, bkt->ksl); - bkt->ksl = NULL; - } + func(bkt->data, ptr); } } -int ngtcp2_map_each(ngtcp2_map *map, - int (*func)(ngtcp2_map_entry *entry, void *ptr), +int ngtcp2_map_each(ngtcp2_map *map, int (*func)(void *data, void *ptr), void *ptr) { int rv; uint32_t i; ngtcp2_map_bucket *bkt; - ngtcp2_ksl_it it; + + if (map->size == 0) { + return 0; + } for (i = 0; i < map->tablelen; ++i) { bkt = &map->table[i]; - if (bkt->ptr) { - rv = func(bkt->ptr, ptr); - if (rv != 0) { - return rv; - } - assert(bkt->ksl == NULL || ngtcp2_ksl_len(bkt->ksl) == 0); + if (bkt->data == NULL) { continue; } - if (bkt->ksl) { - for (it = ngtcp2_ksl_begin(bkt->ksl); !ngtcp2_ksl_it_end(&it); - ngtcp2_ksl_it_next(&it)) { - rv = func(ngtcp2_ksl_it_get(&it), ptr); - if (rv != 0) { - return rv; - } - } + rv = func(bkt->data, ptr); + if (rv != 0) { + return rv; } } + return 0; } -void ngtcp2_map_entry_init(ngtcp2_map_entry *entry, key_type key) { - entry->key = key; +static uint32_t hash(ngtcp2_map_key_type key) { + return (uint32_t)((key * 11400714819323198485llu) >> 32); } -/* FNV1a hash */ -static uint32_t hash(key_type key, uint32_t mod) { - uint8_t *p, *end; - uint32_t h = 0x811C9DC5u; +static size_t h2idx(uint32_t hash, uint32_t bits) { + return hash >> (32 - bits); +} - key = ngtcp2_htonl64(key); - p = (uint8_t *)&key; - end = p + sizeof(key_type); +static size_t distance(uint32_t tablelen, uint32_t tablelenbits, + ngtcp2_map_bucket *bkt, size_t idx) { + return (idx - h2idx(bkt->hash, tablelenbits)) & (tablelen - 1); +} - for (; p != end;) { - h ^= *p++; - h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24); - } +static void map_bucket_swap(ngtcp2_map_bucket *bkt, uint32_t *phash, + ngtcp2_map_key_type *pkey, void **pdata) { + uint32_t h = bkt->hash; + ngtcp2_map_key_type key = bkt->key; + void *data = bkt->data; - return h & (mod - 1); + bkt->hash = *phash; + bkt->key = *pkey; + bkt->data = *pdata; + + *phash = h; + *pkey = key; + *pdata = data; } -static int less(const ngtcp2_ksl_key *lhs, const ngtcp2_ksl_key *rhs) { - return *(key_type *)lhs < *(key_type *)rhs; +static void map_bucket_set_data(ngtcp2_map_bucket *bkt, uint32_t hash, + ngtcp2_map_key_type key, void *data) { + bkt->hash = hash; + bkt->key = key; + bkt->data = data; } -static int map_insert(ngtcp2_map *map, ngtcp2_map_bucket *table, - uint32_t tablelen, ngtcp2_map_entry *entry) { - uint32_t h = hash(entry->key, tablelen); - ngtcp2_map_bucket *bkt = &table[h]; - const ngtcp2_mem *mem = map->mem; - int rv; +void ngtcp2_map_print_distance(ngtcp2_map *map) { + uint32_t i; + size_t idx; + ngtcp2_map_bucket *bkt; - if (bkt->ptr == NULL && (bkt->ksl == NULL || ngtcp2_ksl_len(bkt->ksl) == 0)) { - bkt->ptr = entry; - return 0; - } + for (i = 0; i < map->tablelen; ++i) { + bkt = &map->table[i]; - if (!bkt->ksl) { - bkt->ksl = ngtcp2_mem_malloc(mem, sizeof(*bkt->ksl)); - if (bkt->ksl == NULL) { - return NGTCP2_ERR_NOMEM; + if (bkt->data == NULL) { + fprintf(stderr, "@%u \n", i); + continue; } - ngtcp2_ksl_init(bkt->ksl, less, sizeof(key_type), mem); + + idx = h2idx(bkt->hash, map->tablelenbits); + fprintf(stderr, "@%u hash=%08x key=%" PRIu64 " base=%zu distance=%zu\n", i, + bkt->hash, bkt->key, idx, + distance(map->tablelen, map->tablelenbits, bkt, idx)); } +} - if (bkt->ptr) { - rv = ngtcp2_ksl_insert(bkt->ksl, NULL, &bkt->ptr->key, bkt->ptr); - if (rv != 0) { - return rv; +static int insert(ngtcp2_map_bucket *table, uint32_t tablelen, + uint32_t tablelenbits, uint32_t hash, ngtcp2_map_key_type key, + void *data) { + size_t idx = h2idx(hash, tablelenbits); + size_t d = 0, dd; + ngtcp2_map_bucket *bkt; + + for (;;) { + bkt = &table[idx]; + + if (bkt->data == NULL) { + map_bucket_set_data(bkt, hash, key, data); + return 0; } - bkt->ptr = NULL; - } + dd = distance(tablelen, tablelenbits, bkt, idx); + if (d > dd) { + map_bucket_swap(bkt, &hash, &key, &data); + d = dd; + } else if (bkt->key == key) { + /* TODO This check is just a waste after first swap or if this + function is called from map_resize. That said, there is no + difference with or without this conditional in performance + wise. */ + return NGTCP2_ERR_INVALID_ARGUMENT; + } - return ngtcp2_ksl_insert(bkt->ksl, NULL, &entry->key, entry); + ++d; + idx = (idx + 1) & (tablelen - 1); + } } -/* new_tablelen must be power of 2 */ -static int map_resize(ngtcp2_map *map, uint32_t new_tablelen) { +/* new_tablelen must be power of 2 and new_tablelen == (1 << + new_tablelenbits) must hold. */ +static int map_resize(ngtcp2_map *map, uint32_t new_tablelen, + uint32_t new_tablelenbits) { uint32_t i; ngtcp2_map_bucket *new_table; ngtcp2_map_bucket *bkt; - ngtcp2_ksl_it it; int rv; + (void)rv; new_table = ngtcp2_mem_calloc(map->mem, new_tablelen, sizeof(ngtcp2_map_bucket)); @@ -200,64 +196,46 @@ static int map_resize(ngtcp2_map *map, uint32_t new_tablelen) { for (i = 0; i < map->tablelen; ++i) { bkt = &map->table[i]; - - if (bkt->ptr) { - rv = map_insert(map, new_table, new_tablelen, bkt->ptr); - if (rv != 0) { - goto fail; - } - assert(bkt->ksl == NULL || ngtcp2_ksl_len(bkt->ksl) == 0); + if (bkt->data == NULL) { continue; } + rv = insert(new_table, new_tablelen, new_tablelenbits, bkt->hash, bkt->key, + bkt->data); - if (bkt->ksl) { - for (it = ngtcp2_ksl_begin(bkt->ksl); !ngtcp2_ksl_it_end(&it); - ngtcp2_ksl_it_next(&it)) { - rv = map_insert(map, new_table, new_tablelen, ngtcp2_ksl_it_get(&it)); - if (rv != 0) { - goto fail; - } - } - } - } - - for (i = 0; i < map->tablelen; ++i) { - bkt = &map->table[i]; - if (bkt->ksl) { - ngtcp2_ksl_free(bkt->ksl); - ngtcp2_mem_free(map->mem, bkt->ksl); - } + assert(0 == rv); } ngtcp2_mem_free(map->mem, map->table); map->tablelen = new_tablelen; + map->tablelenbits = new_tablelenbits; map->table = new_table; return 0; - -fail: - for (i = 0; i < new_tablelen; ++i) { - bkt = &new_table[i]; - if (bkt->ksl) { - ngtcp2_ksl_free(bkt->ksl); - ngtcp2_mem_free(map->mem, bkt->ksl); - } - } - - return rv; } -int ngtcp2_map_insert(ngtcp2_map *map, ngtcp2_map_entry *new_entry) { +int ngtcp2_map_insert(ngtcp2_map *map, ngtcp2_map_key_type key, void *data) { int rv; + assert(data); + /* Load factor is 0.75 */ if ((map->size + 1) * 4 > map->tablelen * 3) { - rv = map_resize(map, map->tablelen * 2); - if (rv != 0) { - return rv; + if (map->tablelen) { + rv = map_resize(map, map->tablelen * 2, map->tablelenbits + 1); + if (rv != 0) { + return rv; + } + } else { + rv = map_resize(map, 1 << NGTCP2_INITIAL_TABLE_LENBITS, + NGTCP2_INITIAL_TABLE_LENBITS); + if (rv != 0) { + return rv; + } } } - rv = map_insert(map, map->table, map->tablelen, new_entry); + + rv = insert(map->table, map->tablelen, map->tablelenbits, hash(key), key, + data); if (rv != 0) { return rv; } @@ -265,67 +243,93 @@ int ngtcp2_map_insert(ngtcp2_map *map, ngtcp2_map_entry *new_entry) { return 0; } -ngtcp2_map_entry *ngtcp2_map_find(ngtcp2_map *map, key_type key) { - ngtcp2_map_bucket *bkt = &map->table[hash(key, map->tablelen)]; - ngtcp2_ksl_it it; +void *ngtcp2_map_find(ngtcp2_map *map, ngtcp2_map_key_type key) { + uint32_t h; + size_t idx; + ngtcp2_map_bucket *bkt; + size_t d = 0; - if (bkt->ptr) { - if (bkt->ptr->key == key) { - return bkt->ptr; - } + if (map->size == 0) { return NULL; } - if (bkt->ksl) { - it = ngtcp2_ksl_lower_bound(bkt->ksl, &key); - if (ngtcp2_ksl_it_end(&it) || *(key_type *)ngtcp2_ksl_it_key(&it) != key) { + h = hash(key); + idx = h2idx(h, map->tablelenbits); + + for (;;) { + bkt = &map->table[idx]; + + if (bkt->data == NULL || + d > distance(map->tablelen, map->tablelenbits, bkt, idx)) { return NULL; } - return ngtcp2_ksl_it_get(&it); - } - return NULL; + if (bkt->key == key) { + return bkt->data; + } + + ++d; + idx = (idx + 1) & (map->tablelen - 1); + } } -int ngtcp2_map_remove(ngtcp2_map *map, key_type key) { - ngtcp2_map_bucket *bkt = &map->table[hash(key, map->tablelen)]; - int rv; +int ngtcp2_map_remove(ngtcp2_map *map, ngtcp2_map_key_type key) { + uint32_t h; + size_t idx, didx; + ngtcp2_map_bucket *bkt; + size_t d = 0; - if (bkt->ptr) { - if (bkt->ptr->key == key) { - bkt->ptr = NULL; - --map->size; - return 0; - } + if (map->size == 0) { return NGTCP2_ERR_INVALID_ARGUMENT; } - if (bkt->ksl) { - rv = ngtcp2_ksl_remove(bkt->ksl, NULL, &key); - if (rv != 0) { - return rv; + h = hash(key); + idx = h2idx(h, map->tablelenbits); + + for (;;) { + bkt = &map->table[idx]; + + if (bkt->data == NULL || + d > distance(map->tablelen, map->tablelenbits, bkt, idx)) { + return NGTCP2_ERR_INVALID_ARGUMENT; } - --map->size; - return 0; - } - return NGTCP2_ERR_INVALID_ARGUMENT; -} + if (bkt->key == key) { + map_bucket_set_data(bkt, 0, 0, NULL); -void ngtcp2_map_clear(ngtcp2_map *map) { - uint32_t i; - ngtcp2_map_bucket *bkt; + didx = idx; + idx = (idx + 1) & (map->tablelen - 1); - for (i = 0; i < map->tablelen; ++i) { - bkt = &map->table[i]; - bkt->ptr = NULL; - if (bkt->ksl) { - ngtcp2_ksl_free(bkt->ksl); - ngtcp2_mem_free(map->mem, bkt->ksl); - bkt->ksl = NULL; + for (;;) { + bkt = &map->table[idx]; + if (bkt->data == NULL || + distance(map->tablelen, map->tablelenbits, bkt, idx) == 0) { + break; + } + + map->table[didx] = *bkt; + map_bucket_set_data(bkt, 0, 0, NULL); + didx = idx; + + idx = (idx + 1) & (map->tablelen - 1); + } + + --map->size; + + return 0; } + + ++d; + idx = (idx + 1) & (map->tablelen - 1); + } +} + +void ngtcp2_map_clear(ngtcp2_map *map) { + if (map->tablelen == 0) { + return; } + memset(map->table, 0, sizeof(*map->table) * map->tablelen); map->size = 0; } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_map.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_map.h index bbb2e705d69..a64344a9a30 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_map.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_map.h @@ -33,21 +33,15 @@ #include #include "ngtcp2_mem.h" -#include "ngtcp2_ksl.h" /* Implementation of unordered map */ -typedef uint64_t key_type; - -typedef struct ngtcp2_map_entry ngtcp2_map_entry; - -struct ngtcp2_map_entry { - key_type key; -}; +typedef uint64_t ngtcp2_map_key_type; typedef struct ngtcp2_map_bucket { - ngtcp2_map_entry *ptr; - ngtcp2_ksl *ksl; + uint32_t hash; + ngtcp2_map_key_type key; + void *data; } ngtcp2_map_bucket; typedef struct ngtcp2_map { @@ -55,18 +49,13 @@ typedef struct ngtcp2_map { const ngtcp2_mem *mem; size_t size; uint32_t tablelen; + uint32_t tablelenbits; } ngtcp2_map; /* * Initializes the map |map|. - * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: - * - * NGTCP2_ERR_NOMEM - * Out of memory */ -int ngtcp2_map_init(ngtcp2_map *map, const ngtcp2_mem *mem); +void ngtcp2_map_init(ngtcp2_map *map, const ngtcp2_mem *mem); /* * Deallocates any resources allocated for |map|. The stored entries @@ -78,21 +67,14 @@ void ngtcp2_map_free(ngtcp2_map *map); /* * Deallocates each entries using |func| function and any resources * allocated for |map|. The |func| function is responsible for freeing - * given the |entry| object. The |ptr| will be passed to the |func| as + * given the |data| object. The |ptr| will be passed to the |func| as * send argument. The return value of the |func| will be ignored. */ -void ngtcp2_map_each_free(ngtcp2_map *map, - int (*func)(ngtcp2_map_entry *entry, void *ptr), +void ngtcp2_map_each_free(ngtcp2_map *map, int (*func)(void *data, void *ptr), void *ptr); /* - * Initializes the |entry| with the |key|. All entries to be inserted - * to the map must be initialized with this function. - */ -void ngtcp2_map_entry_init(ngtcp2_map_entry *entry, key_type key); - -/* - * Inserts the new |entry| with the key |entry->key| to the map |map|. + * Inserts the new |data| with the |key| to the map |map|. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -102,25 +84,25 @@ void ngtcp2_map_entry_init(ngtcp2_map_entry *entry, key_type key); * NGTCP2_ERR_NOMEM * Out of memory */ -int ngtcp2_map_insert(ngtcp2_map *map, ngtcp2_map_entry *entry); +int ngtcp2_map_insert(ngtcp2_map *map, ngtcp2_map_key_type key, void *data); /* - * Returns the entry associated by the key |key|. If there is no such - * entry, this function returns NULL. + * Returns the data associated by the key |key|. If there is no such + * data, this function returns NULL. */ -ngtcp2_map_entry *ngtcp2_map_find(ngtcp2_map *map, key_type key); +void *ngtcp2_map_find(ngtcp2_map *map, ngtcp2_map_key_type key); /* - * Removes the entry associated by the key |key| from the |map|. The - * removed entry is not freed by this function. + * Removes the data associated by the key |key| from the |map|. The + * removed data is not freed by this function. * * This function returns 0 if it succeeds, or one of the following * negative error codes: * * NGTCP2_ERR_INVALID_ARGUMENT - * The entry associated by |key| does not exist. + * The data associated by |key| does not exist. */ -int ngtcp2_map_remove(ngtcp2_map *map, key_type key); +int ngtcp2_map_remove(ngtcp2_map *map, ngtcp2_map_key_type key); /* * Removes all entries from |map|. @@ -133,20 +115,22 @@ void ngtcp2_map_clear(ngtcp2_map *map); size_t ngtcp2_map_size(ngtcp2_map *map); /* - * Applies the function |func| to each entry in the |map| with the + * Applies the function |func| to each data in the |map| with the * optional user supplied pointer |ptr|. * * If the |func| returns 0, this function calls the |func| with the - * next entry. If the |func| returns nonzero, it will not call the + * next data. If the |func| returns nonzero, it will not call the * |func| for further entries and return the return value of the * |func| immediately. Thus, this function returns 0 if all the * invocations of the |func| return 0, or nonzero value which the last * invocation of |func| returns. * - * Don't use this function to free each entry. Use + * Don't use this function to free each data. Use * ngtcp2_map_each_free() instead. */ -int ngtcp2_map_each(ngtcp2_map *map, - int (*func)(ngtcp2_map_entry *entry, void *ptr), void *ptr); +int ngtcp2_map_each(ngtcp2_map *map, int (*func)(void *data, void *ptr), + void *ptr); + +void ngtcp2_map_print_distance(ngtcp2_map *map); #endif /* NGTCP2_MAP_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_mem.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_mem.c index 2c036ad1634..bcce0b5cdfc 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_mem.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_mem.c @@ -25,26 +25,28 @@ */ #include "ngtcp2_mem.h" -static void *default_malloc(size_t size, void *mem_user_data) { - (void)mem_user_data; +#include + +static void *default_malloc(size_t size, void *user_data) { + (void)user_data; return malloc(size); } -static void default_free(void *ptr, void *mem_user_data) { - (void)mem_user_data; +static void default_free(void *ptr, void *user_data) { + (void)user_data; free(ptr); } -static void *default_calloc(size_t nmemb, size_t size, void *mem_user_data) { - (void)mem_user_data; +static void *default_calloc(size_t nmemb, size_t size, void *user_data) { + (void)user_data; return calloc(nmemb, size); } -static void *default_realloc(void *ptr, size_t size, void *mem_user_data) { - (void)mem_user_data; +static void *default_realloc(void *ptr, size_t size, void *user_data) { + (void)user_data; return realloc(ptr, size); } @@ -54,22 +56,58 @@ static const ngtcp2_mem mem_default = {NULL, default_malloc, default_free, const ngtcp2_mem *ngtcp2_mem_default(void) { return &mem_default; } +#ifndef MEMDEBUG void *ngtcp2_mem_malloc(const ngtcp2_mem *mem, size_t size) { - return mem->malloc(size, mem->mem_user_data); + return mem->malloc(size, mem->user_data); } void ngtcp2_mem_free(const ngtcp2_mem *mem, void *ptr) { - mem->free(ptr, mem->mem_user_data); -} - -void ngtcp2_mem_free2(ngtcp2_free free_func, void *ptr, void *mem_user_data) { - free_func(ptr, mem_user_data); + mem->free(ptr, mem->user_data); } void *ngtcp2_mem_calloc(const ngtcp2_mem *mem, size_t nmemb, size_t size) { - return mem->calloc(nmemb, size, mem->mem_user_data); + return mem->calloc(nmemb, size, mem->user_data); } void *ngtcp2_mem_realloc(const ngtcp2_mem *mem, void *ptr, size_t size) { - return mem->realloc(ptr, size, mem->mem_user_data); + return mem->realloc(ptr, size, mem->user_data); +} +#else /* MEMDEBUG */ +void *ngtcp2_mem_malloc_debug(const ngtcp2_mem *mem, size_t size, + const char *func, const char *file, size_t line) { + void *nptr = mem->malloc(size, mem->user_data); + + fprintf(stderr, "malloc %p size=%zu in %s at %s:%zu\n", nptr, size, func, + file, line); + + return nptr; +} + +void ngtcp2_mem_free_debug(const ngtcp2_mem *mem, void *ptr, const char *func, + const char *file, size_t line) { + fprintf(stderr, "free ptr=%p in %s at %s:%zu\n", ptr, func, file, line); + + mem->free(ptr, mem->user_data); +} + +void *ngtcp2_mem_calloc_debug(const ngtcp2_mem *mem, size_t nmemb, size_t size, + const char *func, const char *file, size_t line) { + void *nptr = mem->calloc(nmemb, size, mem->user_data); + + fprintf(stderr, "calloc %p nmemb=%zu size=%zu in %s at %s:%zu\n", nptr, nmemb, + size, func, file, line); + + return nptr; +} + +void *ngtcp2_mem_realloc_debug(const ngtcp2_mem *mem, void *ptr, size_t size, + const char *func, const char *file, + size_t line) { + void *nptr = mem->realloc(ptr, size, mem->user_data); + + fprintf(stderr, "realloc %p ptr=%p size=%zu in %s at %s:%zu\n", nptr, ptr, + size, func, file, line); + + return nptr; } +#endif /* MEMDEBUG */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_mem.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_mem.h index cdecf8763a5..c99b6c59726 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_mem.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_mem.h @@ -34,10 +34,39 @@ /* Convenient wrapper functions to call allocator function in |mem|. */ +#ifndef MEMDEBUG void *ngtcp2_mem_malloc(const ngtcp2_mem *mem, size_t size); + void ngtcp2_mem_free(const ngtcp2_mem *mem, void *ptr); -void ngtcp2_mem_free2(ngtcp2_free free_func, void *ptr, void *mem_user_data); + void *ngtcp2_mem_calloc(const ngtcp2_mem *mem, size_t nmemb, size_t size); + void *ngtcp2_mem_realloc(const ngtcp2_mem *mem, void *ptr, size_t size); +#else /* MEMDEBUG */ +void *ngtcp2_mem_malloc_debug(const ngtcp2_mem *mem, size_t size, + const char *func, const char *file, size_t line); + +# define ngtcp2_mem_malloc(MEM, SIZE) \ + ngtcp2_mem_malloc_debug((MEM), (SIZE), __func__, __FILE__, __LINE__) + +void ngtcp2_mem_free_debug(const ngtcp2_mem *mem, void *ptr, const char *func, + const char *file, size_t line); + +# define ngtcp2_mem_free(MEM, PTR) \ + ngtcp2_mem_free_debug((MEM), (PTR), __func__, __FILE__, __LINE__) + +void *ngtcp2_mem_calloc_debug(const ngtcp2_mem *mem, size_t nmemb, size_t size, + const char *func, const char *file, size_t line); + +# define ngtcp2_mem_calloc(MEM, NMEMB, SIZE) \ + ngtcp2_mem_calloc_debug((MEM), (NMEMB), (SIZE), __func__, __FILE__, \ + __LINE__) + +void *ngtcp2_mem_realloc_debug(const ngtcp2_mem *mem, void *ptr, size_t size, + const char *func, const char *file, size_t line); + +# define ngtcp2_mem_realloc(MEM, PTR, SIZE) \ + ngtcp2_mem_realloc_debug((MEM), (PTR), (SIZE), __func__, __FILE__, __LINE__) +#endif /* MEMDEBUG */ #endif /* NGTCP2_MEM_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_net.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_net.h new file mode 100644 index 00000000000..b1f28096174 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_net.h @@ -0,0 +1,136 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGTCP2_NET_H +#define NGTCP2_NET_H + +/* This header file is explicitly allowed to be shared with + ngtcp2_crypto library. */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#ifdef HAVE_ARPA_INET_H +# include +#endif /* HAVE_ARPA_INET_H */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +#ifdef HAVE_BYTESWAP_H +# include +#endif /* HAVE_BYTESWAP_H */ + +#ifdef HAVE_ENDIAN_H +# include +#endif /* HAVE_ENDIAN_H */ + +#ifdef HAVE_SYS_ENDIAN_H +# include +#endif /* HAVE_SYS_ENDIAN_H */ + +#include + +#if defined(HAVE_BSWAP_64) || \ + (defined(HAVE_DECL_BSWAP_64) && HAVE_DECL_BSWAP_64 > 0) +# define ngtcp2_bswap64 bswap_64 +#else /* !HAVE_BSWAP_64 */ +# define ngtcp2_bswap64(N) \ + ((uint64_t)(ngtcp2_ntohl((uint32_t)(N))) << 32 | \ + ngtcp2_ntohl((uint32_t)((N) >> 32))) +#endif /* !HAVE_BSWAP_64 */ + +#if defined(HAVE_BE64TOH) || \ + (defined(HAVE_DECL_BE64TOH) && HAVE_DECL_BE64TOH > 0) +# define ngtcp2_ntohl64(N) be64toh(N) +# define ngtcp2_htonl64(N) htobe64(N) +#else /* !HAVE_BE64TOH */ +# if defined(WORDS_BIGENDIAN) +# define ngtcp2_ntohl64(N) (N) +# define ngtcp2_htonl64(N) (N) +# else /* !WORDS_BIGENDIAN */ +# define ngtcp2_ntohl64(N) ngtcp2_bswap64(N) +# define ngtcp2_htonl64(N) ngtcp2_bswap64(N) +# endif /* !WORDS_BIGENDIAN */ +#endif /* !HAVE_BE64TOH */ + +#if defined(WIN32) +/* Windows requires ws2_32 library for ntonl family functions. We + define inline functions for those function so that we don't have + dependeny on that lib. */ + +# ifdef _MSC_VER +# define STIN static __inline +# else +# define STIN static inline +# endif + +STIN uint32_t ngtcp2_htonl(uint32_t hostlong) { + uint32_t res; + unsigned char *p = (unsigned char *)&res; + *p++ = (unsigned char)(hostlong >> 24); + *p++ = (hostlong >> 16) & 0xffu; + *p++ = (hostlong >> 8) & 0xffu; + *p = hostlong & 0xffu; + return res; +} + +STIN uint16_t ngtcp2_htons(uint16_t hostshort) { + uint16_t res; + unsigned char *p = (unsigned char *)&res; + *p++ = (unsigned char)(hostshort >> 8); + *p = hostshort & 0xffu; + return res; +} + +STIN uint32_t ngtcp2_ntohl(uint32_t netlong) { + uint32_t res; + unsigned char *p = (unsigned char *)&netlong; + res = *p++ << 24; + res += *p++ << 16; + res += *p++ << 8; + res += *p; + return res; +} + +STIN uint16_t ngtcp2_ntohs(uint16_t netshort) { + uint16_t res; + unsigned char *p = (unsigned char *)&netshort; + res = *p++ << 8; + res += *p; + return res; +} + +#else /* !WIN32 */ + +# define ngtcp2_htonl htonl +# define ngtcp2_htons htons +# define ngtcp2_ntohl ntohl +# define ngtcp2_ntohs ntohs + +#endif /* !WIN32 */ + +#endif /* NGTCP2_NET_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_objalloc.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_objalloc.c new file mode 100644 index 00000000000..8b06cdd5de3 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_objalloc.c @@ -0,0 +1,40 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "ngtcp2_objalloc.h" + +void ngtcp2_objalloc_init(ngtcp2_objalloc *objalloc, size_t blklen, + const ngtcp2_mem *mem) { + ngtcp2_balloc_init(&objalloc->balloc, blklen, mem); + ngtcp2_opl_init(&objalloc->opl); +} + +void ngtcp2_objalloc_free(ngtcp2_objalloc *objalloc) { + ngtcp2_balloc_free(&objalloc->balloc); +} + +void ngtcp2_objalloc_clear(ngtcp2_objalloc *objalloc) { + ngtcp2_opl_clear(&objalloc->opl); + ngtcp2_balloc_clear(&objalloc->balloc); +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_objalloc.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_objalloc.h new file mode 100644 index 00000000000..f1bbd3a5c94 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_objalloc.h @@ -0,0 +1,140 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGTCP2_OBJALLOC_H +#define NGTCP2_OBJALLOC_H + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +#include "ngtcp2_balloc.h" +#include "ngtcp2_opl.h" +#include "ngtcp2_macro.h" +#include "ngtcp2_mem.h" + +/* + * ngtcp2_objalloc combines ngtcp2_balloc and ngtcp2_opl, and provides + * an object pool with the custom allocator to reduce the allocation + * and deallocation overheads for small objects. + */ +typedef struct ngtcp2_objalloc { + ngtcp2_balloc balloc; + ngtcp2_opl opl; +} ngtcp2_objalloc; + +/* + * ngtcp2_objalloc_init initializes |objalloc|. |blklen| is directly + * passed to ngtcp2_balloc_init. + */ +void ngtcp2_objalloc_init(ngtcp2_objalloc *objalloc, size_t blklen, + const ngtcp2_mem *mem); + +/* + * ngtcp2_objalloc_free releases all allocated resources. + */ +void ngtcp2_objalloc_free(ngtcp2_objalloc *objalloc); + +/* + * ngtcp2_objalloc_clear releases all allocated resources and + * initializes its state. + */ +void ngtcp2_objalloc_clear(ngtcp2_objalloc *objalloc); + +#ifndef NOMEMPOOL +# define ngtcp2_objalloc_def(NAME, TYPE, OPLENTFIELD) \ + inline static void ngtcp2_objalloc_##NAME##_init( \ + ngtcp2_objalloc *objalloc, size_t nmemb, const ngtcp2_mem *mem) { \ + ngtcp2_objalloc_init( \ + objalloc, ((sizeof(TYPE) + 0xfu) & ~(uintptr_t)0xfu) * nmemb, mem); \ + } \ + \ + inline static TYPE *ngtcp2_objalloc_##NAME##_get( \ + ngtcp2_objalloc *objalloc) { \ + ngtcp2_opl_entry *oplent = ngtcp2_opl_pop(&objalloc->opl); \ + TYPE *obj; \ + int rv; \ + \ + if (!oplent) { \ + rv = \ + ngtcp2_balloc_get(&objalloc->balloc, (void **)&obj, sizeof(TYPE)); \ + if (rv != 0) { \ + return NULL; \ + } \ + \ + return obj; \ + } \ + \ + return ngtcp2_struct_of(oplent, TYPE, OPLENTFIELD); \ + } \ + \ + inline static TYPE *ngtcp2_objalloc_##NAME##_len_get( \ + ngtcp2_objalloc *objalloc, size_t len) { \ + ngtcp2_opl_entry *oplent = ngtcp2_opl_pop(&objalloc->opl); \ + TYPE *obj; \ + int rv; \ + \ + if (!oplent) { \ + rv = ngtcp2_balloc_get(&objalloc->balloc, (void **)&obj, len); \ + if (rv != 0) { \ + return NULL; \ + } \ + \ + return obj; \ + } \ + \ + return ngtcp2_struct_of(oplent, TYPE, OPLENTFIELD); \ + } \ + \ + inline static void ngtcp2_objalloc_##NAME##_release( \ + ngtcp2_objalloc *objalloc, TYPE *obj) { \ + ngtcp2_opl_push(&objalloc->opl, &obj->OPLENTFIELD); \ + } +#else /* NOMEMPOOL */ +# define ngtcp2_objalloc_def(NAME, TYPE, OPLENTFIELD) \ + inline static void ngtcp2_objalloc_##NAME##_init( \ + ngtcp2_objalloc *objalloc, size_t nmemb, const ngtcp2_mem *mem) { \ + ngtcp2_objalloc_init( \ + objalloc, ((sizeof(TYPE) + 0xfu) & ~(uintptr_t)0xfu) * nmemb, mem); \ + } \ + \ + inline static TYPE *ngtcp2_objalloc_##NAME##_get( \ + ngtcp2_objalloc *objalloc) { \ + return ngtcp2_mem_malloc(objalloc->balloc.mem, sizeof(TYPE)); \ + } \ + \ + inline static TYPE *ngtcp2_objalloc_##NAME##_len_get( \ + ngtcp2_objalloc *objalloc, size_t len) { \ + return ngtcp2_mem_malloc(objalloc->balloc.mem, len); \ + } \ + \ + inline static void ngtcp2_objalloc_##NAME##_release( \ + ngtcp2_objalloc *objalloc, TYPE *obj) { \ + ngtcp2_mem_free(objalloc->balloc.mem, obj); \ + } +#endif /* NOMEMPOOL */ + +#endif /* NGTCP2_OBJALLOC_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_opl.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_opl.c new file mode 100644 index 00000000000..a29361c6349 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_opl.c @@ -0,0 +1,46 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "ngtcp2_opl.h" + +void ngtcp2_opl_init(ngtcp2_opl *opl) { opl->head = NULL; } + +void ngtcp2_opl_push(ngtcp2_opl *opl, ngtcp2_opl_entry *ent) { + ent->next = opl->head; + opl->head = ent; +} + +ngtcp2_opl_entry *ngtcp2_opl_pop(ngtcp2_opl *opl) { + ngtcp2_opl_entry *ent = opl->head; + + if (!ent) { + return NULL; + } + + opl->head = ent->next; + + return ent; +} + +void ngtcp2_opl_clear(ngtcp2_opl *opl) { opl->head = NULL; } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_opl.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_opl.h new file mode 100644 index 00000000000..714aa366304 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_opl.h @@ -0,0 +1,65 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGTCP2_OPL_H +#define NGTCP2_OPL_H + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +typedef struct ngtcp2_opl_entry ngtcp2_opl_entry; + +struct ngtcp2_opl_entry { + ngtcp2_opl_entry *next; +}; + +/* + * ngtcp2_opl is an object memory pool. + */ +typedef struct ngtcp2_opl { + ngtcp2_opl_entry *head; +} ngtcp2_opl; + +/* + * ngtcp2_opl_init initializes |opl|. + */ +void ngtcp2_opl_init(ngtcp2_opl *opl); + +/* + * ngtcp2_opl_push inserts |ent| to |opl| head. + */ +void ngtcp2_opl_push(ngtcp2_opl *opl, ngtcp2_opl_entry *ent); + +/* + * ngtcp2_opl_pop removes the first ngtcp2_opl_entry from |opl| and + * returns it. If |opl| does not have any entry, it returns NULL. + */ +ngtcp2_opl_entry *ngtcp2_opl_pop(ngtcp2_opl *opl); + +void ngtcp2_opl_clear(ngtcp2_opl *opl); + +#endif /* NGTCP2_OPL_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_path.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_path.c index 3f35f28ef6a..83238730033 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_path.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_path.c @@ -37,6 +37,7 @@ void ngtcp2_path_init(ngtcp2_path *path, const ngtcp2_addr *local, void ngtcp2_path_copy(ngtcp2_path *dest, const ngtcp2_path *src) { ngtcp2_addr_copy(&dest->local, &src->local); ngtcp2_addr_copy(&dest->remote, &src->remote); + dest->user_data = src->user_data; } int ngtcp2_path_eq(const ngtcp2_path *a, const ngtcp2_path *b) { @@ -45,30 +46,32 @@ int ngtcp2_path_eq(const ngtcp2_path *a, const ngtcp2_path *b) { } void ngtcp2_path_storage_init(ngtcp2_path_storage *ps, - const struct sockaddr *local_addr, - size_t local_addrlen, void *local_user_data, - const struct sockaddr *remote_addr, - size_t remote_addrlen, void *remote_user_data) { - ngtcp2_addr_init(&ps->path.local, (const struct sockaddr *)&ps->local_addrbuf, - 0, local_user_data); + const ngtcp2_sockaddr *local_addr, + ngtcp2_socklen local_addrlen, + const ngtcp2_sockaddr *remote_addr, + ngtcp2_socklen remote_addrlen, void *user_data) { + ngtcp2_addr_init(&ps->path.local, (const ngtcp2_sockaddr *)&ps->local_addrbuf, + 0); ngtcp2_addr_init(&ps->path.remote, - (const struct sockaddr *)&ps->remote_addrbuf, 0, - remote_user_data); + (const ngtcp2_sockaddr *)&ps->remote_addrbuf, 0); ngtcp2_addr_copy_byte(&ps->path.local, local_addr, local_addrlen); ngtcp2_addr_copy_byte(&ps->path.remote, remote_addr, remote_addrlen); + + ps->path.user_data = user_data; } void ngtcp2_path_storage_init2(ngtcp2_path_storage *ps, const ngtcp2_path *path) { ngtcp2_path_storage_init(ps, path->local.addr, path->local.addrlen, - path->local.user_data, path->remote.addr, - path->remote.addrlen, path->remote.user_data); + path->remote.addr, path->remote.addrlen, + path->user_data); } void ngtcp2_path_storage_zero(ngtcp2_path_storage *ps) { - ngtcp2_addr_init(&ps->path.local, (const struct sockaddr *)&ps->local_addrbuf, - 0, NULL); + ngtcp2_addr_init(&ps->path.local, (const ngtcp2_sockaddr *)&ps->local_addrbuf, + 0); ngtcp2_addr_init(&ps->path.remote, - (const struct sockaddr *)&ps->remote_addrbuf, 0, NULL); + (const ngtcp2_sockaddr *)&ps->remote_addrbuf, 0); + ps->path.user_data = NULL; } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_pkt.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pkt.c index ddfbd24bbc9..62fef7d6005 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_pkt.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pkt.c @@ -26,7 +26,6 @@ #include #include -#include #include "ngtcp2_conv.h" #include "ngtcp2_str.h" @@ -61,13 +60,12 @@ void ngtcp2_pkt_chain_del(ngtcp2_pkt_chain *pc, const ngtcp2_mem *mem) { ngtcp2_mem_free(mem, pc); } -int ngtcp2_pkt_decode_version_cid(uint32_t *pversion, const uint8_t **pdcid, - size_t *pdcidlen, const uint8_t **pscid, - size_t *pscidlen, const uint8_t *data, +int ngtcp2_pkt_decode_version_cid(ngtcp2_version_cid *dest, const uint8_t *data, size_t datalen, size_t short_dcidlen) { size_t len; uint32_t version; size_t dcidlen, scidlen; + int supported_version; assert(datalen); @@ -95,23 +93,31 @@ int ngtcp2_pkt_decode_version_cid(uint32_t *pversion, const uint8_t **pdcid, version = ngtcp2_get_uint32(&data[1]); - if ((version == 0 || version == NGTCP2_PROTO_VER_V1 || - (NGTCP2_PROTO_VER_DRAFT_MIN <= version && - version <= NGTCP2_PROTO_VER_DRAFT_MAX)) && + supported_version = ngtcp2_is_supported_version(version); + + if (supported_version && (dcidlen > NGTCP2_MAX_CIDLEN || scidlen > NGTCP2_MAX_CIDLEN)) { return NGTCP2_ERR_INVALID_ARGUMENT; } - *pversion = version; - *pdcid = &data[6]; - *pdcidlen = dcidlen; - *pscid = &data[6 + dcidlen + 1]; - *pscidlen = scidlen; + if (version && !supported_version && + datalen < NGTCP2_MAX_UDP_PAYLOAD_SIZE) { + return NGTCP2_ERR_INVALID_ARGUMENT; + } - if (version && version != NGTCP2_PROTO_VER_V1 && - (version < NGTCP2_PROTO_VER_DRAFT_MIN || - NGTCP2_PROTO_VER_DRAFT_MAX < version)) { - return 1; + dest->version = version; + dest->dcid = &data[6]; + dest->dcidlen = dcidlen; + dest->scid = &data[6 + dcidlen + 1]; + dest->scidlen = scidlen; + + if (!version) { + /* VN */ + return 0; + } + + if (!supported_version) { + return NGTCP2_ERR_VERSION_NEGOTIATION; } return 0; } @@ -123,11 +129,11 @@ int ngtcp2_pkt_decode_version_cid(uint32_t *pversion, const uint8_t **pdcid, return NGTCP2_ERR_INVALID_ARGUMENT; } - *pversion = 0; - *pdcid = &data[1]; - *pdcidlen = short_dcidlen; - *pscid = NULL; - *pscidlen = 0; + dest->version = 0; + dest->dcid = &data[1]; + dest->dcidlen = short_dcidlen; + dest->scid = NULL; + dest->scidlen = 0; return 0; } @@ -170,6 +176,7 @@ ngtcp2_ssize ngtcp2_pkt_decode_hd_long(ngtcp2_pkt_hd *dest, const uint8_t *pkt, const uint8_t *token = NULL; size_t tokenlen = 0; uint64_t vi; + uint8_t flags = NGTCP2_PKT_FLAG_LONG_FORM; if (pktlen < 5) { return NGTCP2_ERR_INVALID_ARGUMENT; @@ -183,16 +190,20 @@ ngtcp2_ssize ngtcp2_pkt_decode_hd_long(ngtcp2_pkt_hd *dest, const uint8_t *pkt, if (version == 0) { type = NGTCP2_PKT_VERSION_NEGOTIATION; + /* Version Negotiation is not a long header packet. */ + flags = NGTCP2_PKT_FLAG_NONE; /* This must be Version Negotiation packet which lacks packet number and payload length fields. */ len = 5 + 2; } else { if (!(pkt[0] & NGTCP2_FIXED_BIT_MASK)) { - return NGTCP2_ERR_INVALID_ARGUMENT; + flags |= NGTCP2_PKT_FLAG_FIXED_BIT_CLEAR; } - type = ngtcp2_pkt_get_type_long(pkt[0]); + type = ngtcp2_pkt_get_type_long(version, pkt[0]); switch (type) { + case 0: + return NGTCP2_ERR_INVALID_ARGUMENT; case NGTCP2_PKT_INITIAL: len = 1 /* Token Length */ + NGTCP2_MIN_LONG_HEADERLEN - 1; /* Cut packet number field */ @@ -267,10 +278,15 @@ ngtcp2_ssize ngtcp2_pkt_decode_hd_long(ngtcp2_pkt_hd *dest, const uint8_t *pkt, } switch (type) { - case NGTCP2_PKT_VERSION_NEGOTIATION: case NGTCP2_PKT_RETRY: break; default: + if (!(flags & NGTCP2_PKT_FLAG_LONG_FORM)) { + assert(type == NGTCP2_PKT_VERSION_NEGOTIATION); + /* Version Negotiation is not a long header packet. */ + break; + } + /* Length */ n = ngtcp2_get_varint_len(p); len += n - 1; @@ -280,7 +296,7 @@ ngtcp2_ssize ngtcp2_pkt_decode_hd_long(ngtcp2_pkt_hd *dest, const uint8_t *pkt, } } - dest->flags = NGTCP2_PKT_FLAG_LONG_FORM; + dest->flags = flags; dest->type = type; dest->version = version; dest->pkt_num = 0; @@ -297,11 +313,17 @@ ngtcp2_ssize ngtcp2_pkt_decode_hd_long(ngtcp2_pkt_hd *dest, const uint8_t *pkt, p += ntokenlen + tokenlen; switch (type) { - case NGTCP2_PKT_VERSION_NEGOTIATION: case NGTCP2_PKT_RETRY: dest->len = 0; break; default: + if (!(flags & NGTCP2_PKT_FLAG_LONG_FORM)) { + assert(type == NGTCP2_PKT_VERSION_NEGOTIATION); + /* Version Negotiation is not a long header packet. */ + dest->len = 0; + break; + } + vi = ngtcp2_get_varint(&n, p); if (vi > SIZE_MAX) { return NGTCP2_ERR_INVALID_ARGUMENT; @@ -319,6 +341,7 @@ ngtcp2_ssize ngtcp2_pkt_decode_hd_short(ngtcp2_pkt_hd *dest, const uint8_t *pkt, size_t pktlen, size_t dcidlen) { size_t len = 1 + dcidlen; const uint8_t *p = pkt; + uint8_t flags = NGTCP2_PKT_FLAG_NONE; assert(dcidlen <= NGTCP2_MAX_CIDLEN); @@ -326,14 +349,17 @@ ngtcp2_ssize ngtcp2_pkt_decode_hd_short(ngtcp2_pkt_hd *dest, const uint8_t *pkt, return NGTCP2_ERR_INVALID_ARGUMENT; } - if ((pkt[0] & NGTCP2_HEADER_FORM_BIT) || - (pkt[0] & NGTCP2_FIXED_BIT_MASK) == 0) { + if (pkt[0] & NGTCP2_HEADER_FORM_BIT) { return NGTCP2_ERR_INVALID_ARGUMENT; } + if (!(pkt[0] & NGTCP2_FIXED_BIT_MASK)) { + flags |= NGTCP2_PKT_FLAG_FIXED_BIT_CLEAR; + } + p = &pkt[1]; - dest->type = NGTCP2_PKT_SHORT; + dest->type = NGTCP2_PKT_1RTT; ngtcp2_cid_init(&dest->dcid, p, dcidlen); p += dcidlen; @@ -342,11 +368,13 @@ ngtcp2_ssize ngtcp2_pkt_decode_hd_short(ngtcp2_pkt_hd *dest, const uint8_t *pkt, garbage. */ ngtcp2_cid_zero(&dest->scid); - dest->flags = NGTCP2_PKT_FLAG_NONE; + dest->flags = flags; dest->version = 0; dest->len = 0; dest->pkt_num = 0; dest->pkt_numlen = 0; + dest->token.base = NULL; + dest->token.len = 0; assert((size_t)(p - pkt) == len); @@ -361,7 +389,7 @@ ngtcp2_ssize ngtcp2_pkt_encode_hd_long(uint8_t *out, size_t outlen, len and 1 byte for packet number. */ if (hd->type != NGTCP2_PKT_RETRY) { - len += 2 /* Length */ + hd->pkt_numlen; + len += NGTCP2_PKT_LENGTHLEN /* Length */ + hd->pkt_numlen; } if (hd->type == NGTCP2_PKT_INITIAL) { @@ -374,8 +402,15 @@ ngtcp2_ssize ngtcp2_pkt_encode_hd_long(uint8_t *out, size_t outlen, p = out; - *p++ = (uint8_t)(NGTCP2_HEADER_FORM_BIT | NGTCP2_FIXED_BIT_MASK | - (hd->type << 4) | (uint8_t)(hd->pkt_numlen - 1)); + *p = (uint8_t)(NGTCP2_HEADER_FORM_BIT | + (ngtcp2_pkt_versioned_type(hd->version, hd->type) << 4) | + (uint8_t)(hd->pkt_numlen - 1)); + if (!(hd->flags & NGTCP2_PKT_FLAG_FIXED_BIT_CLEAR)) { + *p |= NGTCP2_FIXED_BIT_MASK; + } + + ++p; + p = ngtcp2_put_uint32be(p, hd->version); *p++ = (uint8_t)hd->dcid.datalen; if (hd->dcid.datalen) { @@ -394,7 +429,7 @@ ngtcp2_ssize ngtcp2_pkt_encode_hd_long(uint8_t *out, size_t outlen, } if (hd->type != NGTCP2_PKT_RETRY) { - p = ngtcp2_put_varint14(p, (uint16_t)hd->len); + p = ngtcp2_put_varint30(p, (uint32_t)hd->len); p = ngtcp2_put_pkt_num(p, hd->pkt_num, hd->pkt_numlen); } @@ -414,7 +449,10 @@ ngtcp2_ssize ngtcp2_pkt_encode_hd_short(uint8_t *out, size_t outlen, p = out; - *p = NGTCP2_FIXED_BIT_MASK | (uint8_t)(hd->pkt_numlen - 1); + *p = (uint8_t)(hd->pkt_numlen - 1); + if (!(hd->flags & NGTCP2_PKT_FLAG_FIXED_BIT_CLEAR)) { + *p |= NGTCP2_FIXED_BIT_MASK; + } if (hd->flags & NGTCP2_PKT_FLAG_KEY_PHASE) { *p |= NGTCP2_SHORT_KEY_PHASE_BIT; } @@ -1428,7 +1466,7 @@ ngtcp2_ssize ngtcp2_pkt_decode_datagram_frame(ngtcp2_datagram *dest, vi = ngtcp2_get_varint(&n, p); if (payloadlen - len < vi) { - return NGTCP2_FRAME_ENCODING_ERROR; + return NGTCP2_ERR_FRAME_ENCODING; } datalen = (size_t)vi; @@ -1436,6 +1474,7 @@ ngtcp2_ssize ngtcp2_pkt_decode_datagram_frame(ngtcp2_datagram *dest, break; default: assert(0); + abort(); } dest->type = type; @@ -2020,8 +2059,8 @@ ngtcp2_pkt_encode_handshake_done_frame(uint8_t *out, size_t outlen, ngtcp2_ssize ngtcp2_pkt_encode_datagram_frame(uint8_t *out, size_t outlen, const ngtcp2_datagram *fr) { - size_t datalen = ngtcp2_vec_len(fr->data, fr->datacnt); - size_t len = + uint64_t datalen = ngtcp2_vec_len(fr->data, fr->datacnt); + uint64_t len = 1 + (fr->type == NGTCP2_FRAME_DATAGRAM ? 0 : ngtcp2_put_varint_len(datalen)) + datalen; @@ -2039,7 +2078,7 @@ ngtcp2_ssize ngtcp2_pkt_encode_datagram_frame(uint8_t *out, size_t outlen, *p++ = fr->type; if (fr->type == NGTCP2_FRAME_DATAGRAM_LEN) { - p = ngtcp2_put_varint(p, (uint64_t)datalen); + p = ngtcp2_put_varint(p, datalen); } for (i = 0; i < fr->datacnt; ++i) { @@ -2228,8 +2267,8 @@ ngtcp2_ssize ngtcp2_pkt_write_retry( /* Retry packet is sent at most once per one connection attempt. In the first connection attempt, client has to send random DCID - which is at least 8 bytes long. */ - if (odcid->datalen < 8) { + which is at least NGTCP2_MIN_INITIAL_DCIDLEN bytes long. */ + if (odcid->datalen < NGTCP2_MIN_INITIAL_DCIDLEN) { return NGTCP2_ERR_INVALID_ARGUMENT; } @@ -2244,10 +2283,16 @@ ngtcp2_ssize ngtcp2_pkt_write_retry( return pseudo_retrylen; } - if (version == NGTCP2_PROTO_VER_V1) { + switch (version) { + case NGTCP2_PROTO_VER_V1: nonce = (const uint8_t *)NGTCP2_RETRY_NONCE_V1; noncelen = sizeof(NGTCP2_RETRY_NONCE_V1) - 1; - } else { + break; + case NGTCP2_PROTO_VER_V2_DRAFT: + nonce = (const uint8_t *)NGTCP2_RETRY_NONCE_V2_DRAFT; + noncelen = sizeof(NGTCP2_RETRY_NONCE_V2_DRAFT) - 1; + break; + default: nonce = (const uint8_t *)NGTCP2_RETRY_NONCE_DRAFT; noncelen = sizeof(NGTCP2_RETRY_NONCE_DRAFT) - 1; } @@ -2330,10 +2375,16 @@ int ngtcp2_pkt_verify_retry_tag(uint32_t version, const ngtcp2_pkt_retry *retry, pseudo_retrylen = (size_t)(p - pseudo_retry); - if (version == NGTCP2_PROTO_VER_V1) { + switch (version) { + case NGTCP2_PROTO_VER_V1: nonce = (const uint8_t *)NGTCP2_RETRY_NONCE_V1; noncelen = sizeof(NGTCP2_RETRY_NONCE_V1) - 1; - } else { + break; + case NGTCP2_PROTO_VER_V2_DRAFT: + nonce = (const uint8_t *)NGTCP2_RETRY_NONCE_V2_DRAFT; + noncelen = sizeof(NGTCP2_RETRY_NONCE_V2_DRAFT) - 1; + break; + default: nonce = (const uint8_t *)NGTCP2_RETRY_NONCE_DRAFT; noncelen = sizeof(NGTCP2_RETRY_NONCE_DRAFT) - 1; } @@ -2353,7 +2404,7 @@ int ngtcp2_pkt_verify_retry_tag(uint32_t version, const ngtcp2_pkt_retry *retry, } size_t ngtcp2_pkt_stream_max_datalen(int64_t stream_id, uint64_t offset, - size_t len, size_t left) { + uint64_t len, size_t left) { size_t n = 1 /* type */ + ngtcp2_put_varint_len((uint64_t)stream_id) + (offset ? ngtcp2_put_varint_len(offset) : 0); @@ -2367,21 +2418,21 @@ size_t ngtcp2_pkt_stream_max_datalen(int64_t stream_id, uint64_t offset, #if SIZE_MAX > UINT32_MAX len = ngtcp2_min(len, 4611686018427387903lu); #endif /* SIZE_MAX > UINT32_MAX */ - return ngtcp2_min(len, left - 8); + return (size_t)ngtcp2_min(len, (uint64_t)(left - 8)); } if (left > 4 + 16383 && len > 16383) { len = ngtcp2_min(len, 1073741823); - return ngtcp2_min(len, left - 4); + return (size_t)ngtcp2_min(len, (uint64_t)(left - 4)); } if (left > 2 + 63 && len > 63) { len = ngtcp2_min(len, 16383); - return ngtcp2_min(len, left - 2); + return (size_t)ngtcp2_min(len, (uint64_t)(left - 2)); } len = ngtcp2_min(len, 63); - return ngtcp2_min(len, left - 1); + return (size_t)ngtcp2_min(len, (uint64_t)(left - 1)); } size_t ngtcp2_pkt_crypto_max_datalen(uint64_t offset, size_t len, size_t left) { @@ -2417,11 +2468,101 @@ size_t ngtcp2_pkt_crypto_max_datalen(uint64_t offset, size_t len, size_t left) { } size_t ngtcp2_pkt_datagram_framelen(size_t len) { - return 1 /* type */ + ngtcp2_put_varint_len((uint64_t)len) + len; + return 1 /* type */ + ngtcp2_put_varint_len(len) + len; } -uint8_t ngtcp2_pkt_get_type_long(uint8_t c) { - return (uint8_t)((c & NGTCP2_LONG_TYPE_MASK) >> 4); +int ngtcp2_is_supported_version(uint32_t version) { + switch (version) { + case NGTCP2_PROTO_VER_V1: + case NGTCP2_PROTO_VER_V2_DRAFT: + return 1; + default: + return NGTCP2_PROTO_VER_DRAFT_MIN <= version && + version <= NGTCP2_PROTO_VER_DRAFT_MAX; + } +} + +int ngtcp2_is_reserved_version(uint32_t version) { + return (version & NGTCP2_RESERVED_VERSION_MASK) == + NGTCP2_RESERVED_VERSION_MASK; +} + +uint8_t ngtcp2_pkt_get_type_long(uint32_t version, uint8_t c) { + uint8_t pkt_type = (uint8_t)((c & NGTCP2_LONG_TYPE_MASK) >> 4); + + switch (version) { + case NGTCP2_PROTO_VER_V2_DRAFT: + switch (pkt_type) { + case NGTCP2_PKT_TYPE_INITIAL_V2_DRAFT: + return NGTCP2_PKT_INITIAL; + case NGTCP2_PKT_TYPE_0RTT_V2_DRAFT: + return NGTCP2_PKT_0RTT; + case NGTCP2_PKT_TYPE_HANDSHAKE_V2_DRAFT: + return NGTCP2_PKT_HANDSHAKE; + case NGTCP2_PKT_TYPE_RETRY_V2_DRAFT: + return NGTCP2_PKT_RETRY; + default: + return 0; + } + default: + if (!ngtcp2_is_supported_version(version)) { + return 0; + } + + /* QUIC v1 and draft versions share the same numeric packet + types. */ + switch (pkt_type) { + case NGTCP2_PKT_TYPE_INITIAL_V1: + return NGTCP2_PKT_INITIAL; + case NGTCP2_PKT_TYPE_0RTT_V1: + return NGTCP2_PKT_0RTT; + case NGTCP2_PKT_TYPE_HANDSHAKE_V1: + return NGTCP2_PKT_HANDSHAKE; + case NGTCP2_PKT_TYPE_RETRY_V1: + return NGTCP2_PKT_RETRY; + default: + return 0; + } + } +} + +uint8_t ngtcp2_pkt_versioned_type(uint32_t version, uint32_t pkt_type) { + switch (version) { + case NGTCP2_PROTO_VER_V2_DRAFT: + switch (pkt_type) { + case NGTCP2_PKT_INITIAL: + return NGTCP2_PKT_TYPE_INITIAL_V2_DRAFT; + case NGTCP2_PKT_0RTT: + return NGTCP2_PKT_TYPE_0RTT_V2_DRAFT; + case NGTCP2_PKT_HANDSHAKE: + return NGTCP2_PKT_TYPE_HANDSHAKE_V2_DRAFT; + case NGTCP2_PKT_RETRY: + return NGTCP2_PKT_TYPE_RETRY_V2_DRAFT; + default: + assert(0); + abort(); + } + default: + /* Assume that unsupported versions share the numeric long packet + types with QUIC v1 in order to send a packet to elicit Version + Negotiation packet. */ + + /* QUIC v1 and draft versions share the same numeric packet + types. */ + switch (pkt_type) { + case NGTCP2_PKT_INITIAL: + return NGTCP2_PKT_TYPE_INITIAL_V1; + case NGTCP2_PKT_0RTT: + return NGTCP2_PKT_TYPE_0RTT_V1; + case NGTCP2_PKT_HANDSHAKE: + return NGTCP2_PKT_TYPE_HANDSHAKE_V1; + case NGTCP2_PKT_RETRY: + return NGTCP2_PKT_TYPE_RETRY_V1; + default: + assert(0); + abort(); + } + } } int ngtcp2_pkt_verify_reserved_bits(uint8_t c) { diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_pkt.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pkt.h index 708e0f6df3f..2f7838a08a5 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_pkt.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pkt.h @@ -103,6 +103,40 @@ /* NGTCP2_RETRY_TAGLEN is the length of Retry packet integrity tag. */ #define NGTCP2_RETRY_TAGLEN 16 +/* NGTCP2_HARD_MAX_UDP_PAYLOAD_SIZE is the maximum UDP payload size + that this library can write. */ +#define NGTCP2_HARD_MAX_UDP_PAYLOAD_SIZE ((1 << 24) - 1) + +/* NGTCP2_PKT_LENGTHLEN is the number of bytes that is occupied by + Length field in Long packet header. */ +#define NGTCP2_PKT_LENGTHLEN 4 + +/* NGTCP2_PKT_TYPE_INITIAL_V1 is Initial long header packet type for + QUIC v1. */ +#define NGTCP2_PKT_TYPE_INITIAL_V1 0x0 +/* NGTCP2_PKT_TYPE_0RTT_V1 is 0RTT long header packet type for QUIC + v1. */ +#define NGTCP2_PKT_TYPE_0RTT_V1 0x1 +/* NGTCP2_PKT_TYPE_HANDSHAKE_V1 is Handshake long header packet type + for QUIC v1. */ +#define NGTCP2_PKT_TYPE_HANDSHAKE_V1 0x2 +/* NGTCP2_PKT_TYPE_RETRY_V1 is Retry long header packet type for QUIC + v1. */ +#define NGTCP2_PKT_TYPE_RETRY_V1 0x3 + +/* NGTCP2_PKT_TYPE_INITIAL_V2_DRAFT is Initial long header packet type + for QUIC v2 draft. */ +#define NGTCP2_PKT_TYPE_INITIAL_V2_DRAFT 0x1 +/* NGTCP2_PKT_TYPE_0RTT_V2_DRAFT is 0RTT long header packet type for + QUIC v2 draft. */ +#define NGTCP2_PKT_TYPE_0RTT_V2_DRAFT 0x2 +/* NGTCP2_PKT_TYPE_HANDSHAKE_V2_DRAFT is Handshake long header packet + type for QUIC v2 draft. */ +#define NGTCP2_PKT_TYPE_HANDSHAKE_V2_DRAFT 0x3 +/* NGTCP2_PKT_TYPE_RETRY_V2_DRAFT is Retry long header packet type for + QUIC v2 draft. */ +#define NGTCP2_PKT_TYPE_RETRY_V2_DRAFT 0x0 + typedef struct ngtcp2_pkt_retry { ngtcp2_cid odcid; ngtcp2_vec token; @@ -258,12 +292,12 @@ typedef struct ngtcp2_stop_sending { typedef struct ngtcp2_path_challenge { uint8_t type; - uint8_t data[8]; + uint8_t data[NGTCP2_PATH_CHALLENGE_DATALEN]; } ngtcp2_path_challenge; typedef struct ngtcp2_path_response { uint8_t type; - uint8_t data[8]; + uint8_t data[NGTCP2_PATH_CHALLENGE_DATALEN]; } ngtcp2_path_response; typedef struct ngtcp2_crypto { @@ -293,6 +327,8 @@ typedef struct ngtcp2_handshake_done { typedef struct ngtcp2_datagram { uint8_t type; + /* dgram_id is an opaque identifier chosen by an application. */ + uint64_t dgram_id; /* datacnt is the number of elements that data contains. */ size_t datacnt; /* data is a pointer to ngtcp2_vec array that stores data. */ @@ -1123,7 +1159,7 @@ int ngtcp2_pkt_validate_ack(ngtcp2_ack *fr); * small to write STREAM frame, this function returns (size_t)-1. */ size_t ngtcp2_pkt_stream_max_datalen(int64_t stream_id, uint64_t offset, - size_t len, size_t left); + uint64_t len, size_t left); /* * ngtcp2_pkt_crypto_max_datalen returns the maximum number of bytes @@ -1184,12 +1220,21 @@ int ngtcp2_pkt_verify_retry_tag(uint32_t version, const ngtcp2_pkt_retry *retry, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx); +/* + * ngtcp2_pkt_versioned_type returns versioned packet type for a + * version |version| that corresponds to the version-independent + * |pkt_type|. + */ +uint8_t ngtcp2_pkt_versioned_type(uint32_t version, uint32_t pkt_type); + /** * @function * - * `ngtcp2_pkt_get_type_long` returns the long packet type. |c| is - * the first byte of Long packet header. + * `ngtcp2_pkt_get_type_long` returns the version-independent long + * packet type. |version| is the QUIC version. |c| is the first byte + * of Long packet header. If |version| is not supported by the + * library, it returns 0. */ -uint8_t ngtcp2_pkt_get_type_long(uint8_t c); +uint8_t ngtcp2_pkt_get_type_long(uint32_t version, uint8_t c); #endif /* NGTCP2_PKT_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_pmtud.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pmtud.c new file mode 100644 index 00000000000..26318bb1c8e --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pmtud.c @@ -0,0 +1,160 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "ngtcp2_pmtud.h" + +#include + +#include "ngtcp2_mem.h" +#include "ngtcp2_macro.h" + +/* NGTCP2_PMTUD_PROBE_NUM_MAX is the maximum number of packets sent + for each probe. */ +#define NGTCP2_PMTUD_PROBE_NUM_MAX 3 + +static size_t mtu_probes[] = { + 1454 - 48, /* The well known MTU used by a domestic optic fiber + service in Japan. */ + 1390 - 48, /* Typical Tunneled MTU */ + 1280 - 48, /* IPv6 minimum MTU */ + 1492 - 48, /* PPPoE */ +}; + +static size_t mtu_probeslen = sizeof(mtu_probes) / sizeof(mtu_probes[0]); + +int ngtcp2_pmtud_new(ngtcp2_pmtud **ppmtud, size_t max_udp_payload_size, + size_t hard_max_udp_payload_size, int64_t tx_pkt_num, + const ngtcp2_mem *mem) { + ngtcp2_pmtud *pmtud = ngtcp2_mem_malloc(mem, sizeof(ngtcp2_pmtud)); + + if (pmtud == NULL) { + return NGTCP2_ERR_NOMEM; + } + + pmtud->mem = mem; + pmtud->mtu_idx = 0; + pmtud->num_pkts_sent = 0; + pmtud->expiry = UINT64_MAX; + pmtud->tx_pkt_num = tx_pkt_num; + pmtud->max_udp_payload_size = max_udp_payload_size; + pmtud->hard_max_udp_payload_size = hard_max_udp_payload_size; + pmtud->min_fail_udp_payload_size = SIZE_MAX; + + for (; pmtud->mtu_idx < mtu_probeslen; ++pmtud->mtu_idx) { + if (mtu_probes[pmtud->mtu_idx] > pmtud->hard_max_udp_payload_size) { + continue; + } + if (mtu_probes[pmtud->mtu_idx] > pmtud->max_udp_payload_size) { + break; + } + } + + *ppmtud = pmtud; + + return 0; +} + +void ngtcp2_pmtud_del(ngtcp2_pmtud *pmtud) { + if (!pmtud) { + return; + } + + ngtcp2_mem_free(pmtud->mem, pmtud); +} + +size_t ngtcp2_pmtud_probelen(ngtcp2_pmtud *pmtud) { + assert(pmtud->mtu_idx < mtu_probeslen); + + return mtu_probes[pmtud->mtu_idx]; +} + +void ngtcp2_pmtud_probe_sent(ngtcp2_pmtud *pmtud, ngtcp2_duration pto, + ngtcp2_tstamp ts) { + ngtcp2_tstamp timeout; + + if (++pmtud->num_pkts_sent < NGTCP2_PMTUD_PROBE_NUM_MAX) { + timeout = pto; + } else { + timeout = 3 * pto; + } + + pmtud->expiry = ts + timeout; +} + +int ngtcp2_pmtud_require_probe(ngtcp2_pmtud *pmtud) { + return pmtud->expiry == UINT64_MAX; +} + +static void pmtud_next_probe(ngtcp2_pmtud *pmtud) { + assert(pmtud->mtu_idx < mtu_probeslen); + + ++pmtud->mtu_idx; + pmtud->num_pkts_sent = 0; + pmtud->expiry = UINT64_MAX; + + for (; pmtud->mtu_idx < mtu_probeslen; ++pmtud->mtu_idx) { + if (mtu_probes[pmtud->mtu_idx] <= pmtud->max_udp_payload_size || + mtu_probes[pmtud->mtu_idx] > pmtud->hard_max_udp_payload_size) { + continue; + } + + if (mtu_probes[pmtud->mtu_idx] < pmtud->min_fail_udp_payload_size) { + break; + } + } +} + +void ngtcp2_pmtud_probe_success(ngtcp2_pmtud *pmtud, size_t payloadlen) { + pmtud->max_udp_payload_size = + ngtcp2_max(pmtud->max_udp_payload_size, payloadlen); + + assert(pmtud->mtu_idx < mtu_probeslen); + + if (mtu_probes[pmtud->mtu_idx] > pmtud->max_udp_payload_size) { + return; + } + + pmtud_next_probe(pmtud); +} + +void ngtcp2_pmtud_handle_expiry(ngtcp2_pmtud *pmtud, ngtcp2_tstamp ts) { + if (ts < pmtud->expiry) { + return; + } + + pmtud->expiry = UINT64_MAX; + + if (pmtud->num_pkts_sent < NGTCP2_PMTUD_PROBE_NUM_MAX) { + return; + } + + pmtud->min_fail_udp_payload_size = + ngtcp2_min(pmtud->min_fail_udp_payload_size, mtu_probes[pmtud->mtu_idx]); + + pmtud_next_probe(pmtud); +} + +int ngtcp2_pmtud_finished(ngtcp2_pmtud *pmtud) { + return pmtud->mtu_idx >= mtu_probeslen; +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_pmtud.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pmtud.h new file mode 100644 index 00000000000..6b2e691cfc7 --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pmtud.h @@ -0,0 +1,123 @@ +/* + * ngtcp2 + * + * Copyright (c) 2022 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGTCP2_PMTUD_H +#define NGTCP2_PMTUD_H + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +typedef struct ngtcp2_pmtud { + const ngtcp2_mem *mem; + /* mtu_idx is the index of UDP payload size candidates to try + out. */ + size_t mtu_idx; + /* num_pkts_sent is the number of mtu_idx sized UDP datagram payload + sent */ + size_t num_pkts_sent; + /* expiry is the expired, if it is reached, send out the next UDP + datagram. UINT64_MAX means no expiry, or expiration is canceled. + In either case, new probe packet should be sent unless we have + done all attempts. */ + ngtcp2_tstamp expiry; + /* tx_pkt_num is the smallest outgoing packet number where the + current discovery is performed. In other words, acknowledging + packet whose packet number lower than that does not indicate the + success of Path MTU Discovery. */ + int64_t tx_pkt_num; + /* max_udp_payload_size is the maximum UDP payload size which is + known to work. */ + size_t max_udp_payload_size; + /* hard_max_udp_payload_size is the maximum UDP payload size that is + going to be probed. */ + size_t hard_max_udp_payload_size; + /* min_fail_udp_payload_size is the minimum UDP payload size that is + known to fail. */ + size_t min_fail_udp_payload_size; +} ngtcp2_pmtud; + +/* + * ngtcp2_pmtud_new creates new ngtcp2_pmtud object, and assigns its + * pointer to |*ppmtud|. |max_udp_payload_size| is the maximum UDP + * payload size that is known to work for the current path. + * |tx_pkt_num| should be the next packet number to send, which is + * used to differentiate the PMTUD probe packet sent by the previous + * PMTUD. PMTUD might finish immediately if |max_udp_payload_size| is + * larger than or equal to all UDP payload probe candidates. + * Therefore, call ngtcp2_pmtud_finished to check this situation. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGTCP2_ERR_NOMEM + * Out of memory. + */ +int ngtcp2_pmtud_new(ngtcp2_pmtud **ppmtud, size_t max_udp_payload_size, + size_t hard_max_udp_payload_size, int64_t tx_pkt_num, + const ngtcp2_mem *mem); + +/* + * ngtcp2_pmtud_del deletes |pmtud|. + */ +void ngtcp2_pmtud_del(ngtcp2_pmtud *pmtud); + +/* + * ngtcp2_pmtud_probelen returns the length of UDP payload size for a + * PMTUD probe packet. + */ +size_t ngtcp2_pmtud_probelen(ngtcp2_pmtud *pmtud); + +/* + * ngtcp2_pmtud_probe_sent should be invoked when a PMTUD probe packet is + * sent. + */ +void ngtcp2_pmtud_probe_sent(ngtcp2_pmtud *pmtud, ngtcp2_duration pto, + ngtcp2_tstamp ts); + +/* + * ngtcp2_pmtud_require_probe returns nonzero if a PMTUD probe packet + * should be sent. + */ +int ngtcp2_pmtud_require_probe(ngtcp2_pmtud *pmtud); + +/* + * ngtcp2_pmtud_probe_success should be invoked when a PMTUD probe + * UDP datagram sized |payloadlen| is acknowledged. + */ +void ngtcp2_pmtud_probe_success(ngtcp2_pmtud *pmtud, size_t payloadlen); + +/* + * ngtcp2_pmtud_handle_expiry handles expiry. + */ +void ngtcp2_pmtud_handle_expiry(ngtcp2_pmtud *pmtud, ngtcp2_tstamp ts); + +/* + * ngtcp2_pmtud_finished returns nonzero if PMTUD has finished. + */ +int ngtcp2_pmtud_finished(ngtcp2_pmtud *pmtud); + +#endif /* NGTCP2_PMTUD_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_ppe.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_ppe.c index 47f4f10a29f..5376246bd4c 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_ppe.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_ppe.c @@ -57,7 +57,7 @@ int ngtcp2_ppe_encode_hd(ngtcp2_ppe *ppe, const ngtcp2_pkt_hd *hd) { if (hd->type == NGTCP2_PKT_INITIAL) { ppe->len_offset += ngtcp2_put_varint_len(hd->token.len) + hd->token.len; } - ppe->pkt_num_offset = ppe->len_offset + 2; + ppe->pkt_num_offset = ppe->len_offset + NGTCP2_PKT_LENGTHLEN; rv = ngtcp2_pkt_encode_hd_long( buf->last, ngtcp2_buf_left(buf) - cc->aead.max_overhead, hd); } else { @@ -115,7 +115,7 @@ ngtcp2_ssize ngtcp2_ppe_final(ngtcp2_ppe *ppe, const uint8_t **ppkt) { assert(cc->hp_mask); if (ppe->len_offset) { - ngtcp2_put_varint14( + ngtcp2_put_varint30( buf->begin + ppe->len_offset, (uint16_t)(payloadlen + ppe->pkt_numlen + cc->aead.max_overhead)); } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_pv.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pv.c index d5f7759d6c9..314e005293c 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_pv.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pv.c @@ -42,19 +42,12 @@ void ngtcp2_pv_entry_init(ngtcp2_pv_entry *pvent, const uint8_t *data, int ngtcp2_pv_new(ngtcp2_pv **ppv, const ngtcp2_dcid *dcid, ngtcp2_duration timeout, uint8_t flags, ngtcp2_log *log, const ngtcp2_mem *mem) { - int rv; - (*ppv) = ngtcp2_mem_malloc(mem, sizeof(ngtcp2_pv)); if (*ppv == NULL) { return NGTCP2_ERR_NOMEM; } - rv = ngtcp2_ringbuf_init(&(*ppv)->ents, NGTCP2_PV_MAX_ENTRIES, - sizeof(ngtcp2_pv_entry), mem); - if (rv != 0) { - ngtcp2_mem_free(mem, *ppv); - return 0; - } + ngtcp2_static_ringbuf_pv_ents_init(&(*ppv)->ents); ngtcp2_dcid_copy(&(*ppv)->dcid, dcid); @@ -74,7 +67,6 @@ void ngtcp2_pv_del(ngtcp2_pv *pv) { if (pv == NULL) { return; } - ngtcp2_ringbuf_free(&pv->ents); ngtcp2_mem_free(pv->mem, pv); } @@ -85,11 +77,11 @@ void ngtcp2_pv_add_entry(ngtcp2_pv *pv, const uint8_t *data, assert(pv->probe_pkt_left); - if (ngtcp2_ringbuf_len(&pv->ents) == 0) { + if (ngtcp2_ringbuf_len(&pv->ents.rb) == 0) { pv->started_ts = ts; } - ent = ngtcp2_ringbuf_push_back(&pv->ents); + ent = ngtcp2_ringbuf_push_back(&pv->ents.rb); ngtcp2_pv_entry_init(ent, data, expiry, flags); pv->flags &= (uint8_t)~NGTCP2_PV_FLAG_CANCEL_TIMER; @@ -97,7 +89,7 @@ void ngtcp2_pv_add_entry(ngtcp2_pv *pv, const uint8_t *data, } int ngtcp2_pv_validate(ngtcp2_pv *pv, uint8_t *pflags, const uint8_t *data) { - size_t len = ngtcp2_ringbuf_len(&pv->ents); + size_t len = ngtcp2_ringbuf_len(&pv->ents.rb); size_t i; ngtcp2_pv_entry *ent; @@ -106,7 +98,7 @@ int ngtcp2_pv_validate(ngtcp2_pv *pv, uint8_t *pflags, const uint8_t *data) { } for (i = 0; i < len; ++i) { - ent = ngtcp2_ringbuf_get(&pv->ents, i); + ent = ngtcp2_ringbuf_get(&pv->ents.rb, i); if (memcmp(ent->data, data, sizeof(ent->data)) == 0) { *pflags = ent->flags; ngtcp2_log_info(pv->log, NGTCP2_LOG_EVENT_PTV, "path has been validated"); @@ -120,11 +112,11 @@ int ngtcp2_pv_validate(ngtcp2_pv *pv, uint8_t *pflags, const uint8_t *data) { void ngtcp2_pv_handle_entry_expiry(ngtcp2_pv *pv, ngtcp2_tstamp ts) { ngtcp2_pv_entry *ent; - if (ngtcp2_ringbuf_len(&pv->ents) == 0) { + if (ngtcp2_ringbuf_len(&pv->ents.rb) == 0) { return; } - ent = ngtcp2_ringbuf_get(&pv->ents, ngtcp2_ringbuf_len(&pv->ents) - 1); + ent = ngtcp2_ringbuf_get(&pv->ents.rb, ngtcp2_ringbuf_len(&pv->ents.rb) - 1); if (ent->expiry > ts) { return; @@ -146,9 +138,9 @@ int ngtcp2_pv_validation_timed_out(ngtcp2_pv *pv, ngtcp2_tstamp ts) { return 0; } - assert(ngtcp2_ringbuf_len(&pv->ents)); + assert(ngtcp2_ringbuf_len(&pv->ents.rb)); - ent = ngtcp2_ringbuf_get(&pv->ents, ngtcp2_ringbuf_len(&pv->ents) - 1); + ent = ngtcp2_ringbuf_get(&pv->ents.rb, ngtcp2_ringbuf_len(&pv->ents.rb) - 1); t = pv->started_ts + pv->timeout; t = ngtcp2_max(t, ent->expiry); @@ -160,11 +152,11 @@ ngtcp2_tstamp ngtcp2_pv_next_expiry(ngtcp2_pv *pv) { ngtcp2_pv_entry *ent; if ((pv->flags & NGTCP2_PV_FLAG_CANCEL_TIMER) || - ngtcp2_ringbuf_len(&pv->ents) == 0) { + ngtcp2_ringbuf_len(&pv->ents.rb) == 0) { return UINT64_MAX; } - ent = ngtcp2_ringbuf_get(&pv->ents, ngtcp2_ringbuf_len(&pv->ents) - 1); + ent = ngtcp2_ringbuf_get(&pv->ents.rb, ngtcp2_ringbuf_len(&pv->ents.rb) - 1); return ent->expiry; } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_pv.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pv.h index b532dbca983..293cbcaaf6e 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_pv.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_pv.h @@ -46,10 +46,10 @@ typedef struct ngtcp2_log ngtcp2_log; typedef struct ngtcp2_frame_chain ngtcp2_frame_chain; /* NGTCP2_PV_ENTRY_FLAG_NONE indicates that no flag is set. */ -#define NGTCP2_PV_ENTRY_FLAG_NONE 0x00 +#define NGTCP2_PV_ENTRY_FLAG_NONE 0x00u /* NGTCP2_PV_ENTRY_FLAG_UNDERSIZED indicates that UDP datagram which contains PATH_CHALLENGE is undersized (< 1200 bytes) */ -#define NGTCP2_PV_ENTRY_FLAG_UNDERSIZED 0x01 +#define NGTCP2_PV_ENTRY_FLAG_UNDERSIZED 0x01u typedef struct ngtcp2_pv_entry { /* expiry is the timestamp when this PATH_CHALLENGE expires. */ @@ -64,25 +64,30 @@ void ngtcp2_pv_entry_init(ngtcp2_pv_entry *pvent, const uint8_t *data, ngtcp2_tstamp expiry, uint8_t flags); /* NGTCP2_PV_FLAG_NONE indicates no flag is set. */ -#define NGTCP2_PV_FLAG_NONE 0x00 +#define NGTCP2_PV_FLAG_NONE 0x00u /* NGTCP2_PV_FLAG_DONT_CARE indicates that the outcome of path validation should be ignored entirely. */ -#define NGTCP2_PV_FLAG_DONT_CARE 0x01 +#define NGTCP2_PV_FLAG_DONT_CARE 0x01u /* NGTCP2_PV_FLAG_CANCEL_TIMER indicates that the expiry timer is cancelled. */ -#define NGTCP2_PV_FLAG_CANCEL_TIMER 0x02 +#define NGTCP2_PV_FLAG_CANCEL_TIMER 0x02u /* NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE indicates that fallback DCID is available in ngtcp2_pv. If path validation fails, fallback to the fallback DCID. If path validation succeeds, fallback DCID is retired if it does not equal to the current DCID. */ -#define NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE 0x04 +#define NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE 0x04u /* NGTCP2_PV_FLAG_MTU_PROBE indicates that a validation must probe least MTU that QUIC requires, which is 1200 bytes. If it fails, a path is not viable. */ -#define NGTCP2_PV_FLAG_MTU_PROBE 0x08 +#define NGTCP2_PV_FLAG_MTU_PROBE 0x08u +/* NGTCP2_PV_FLAG_PREFERRED_ADDR indicates that client is migrating to + server's preferred address. This flag is only used by client. */ +#define NGTCP2_PV_FLAG_PREFERRED_ADDR 0x10u typedef struct ngtcp2_pv ngtcp2_pv; +ngtcp2_static_ringbuf_def(pv_ents, NGTCP2_PV_MAX_ENTRIES, + sizeof(ngtcp2_pv_entry)); /* * ngtcp2_pv is the context of a single path validation. */ @@ -95,7 +100,7 @@ struct ngtcp2_pv { fallback if this path validation fails. */ ngtcp2_dcid fallback_dcid; /* ents is the ring buffer of ngtcp2_pv_entry */ - ngtcp2_ringbuf ents; + ngtcp2_static_ringbuf_pv_ents ents; /* timeout is the duration within which this path validation should succeed. */ ngtcp2_duration timeout; diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_qlog.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_qlog.c index 7c31ab64af6..69eaeb73674 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_qlog.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_qlog.c @@ -28,6 +28,8 @@ #include "ngtcp2_str.h" #include "ngtcp2_vec.h" +#include "ngtcp2_conv.h" +#include "ngtcp2_net.h" void ngtcp2_qlog_init(ngtcp2_qlog *qlog, ngtcp2_qlog_write write, ngtcp2_tstamp ts, void *user_data) { @@ -185,8 +187,8 @@ static uint8_t *write_pair_cid_impl(uint8_t *p, const uint8_t *name, static uint8_t *write_common_fields(uint8_t *p, const ngtcp2_cid *odcid) { p = write_verbatim( - p, "\"common_fields\":{\"protocol_type\":\"QUIC_HTTP3\",\"time_format\":" - "\"relative\",\"reference_time\":\"0\",\"group_id\":"); + p, "\"common_fields\":{\"protocol_type\":[\"QUIC\"],\"time_format\":" + "\"relative\",\"reference_time\":0,\"group_id\":"); p = write_cid(p, odcid); *p++ = '}'; return p; @@ -215,7 +217,7 @@ void ngtcp2_qlog_start(ngtcp2_qlog *qlog, const ngtcp2_cid *odcid, int server) { } p = write_verbatim( - p, "{\"qlog_format\":\"NDJSON\",\"qlog_version\":\"draft-02\","); + p, "\x1e{\"qlog_format\":\"JSON-SEQ\",\"qlog_version\":\"0.3\","); p = write_trace(p, server, odcid); p = write_verbatim(p, "}\n"); @@ -238,6 +240,10 @@ static ngtcp2_vec vec_pkt_type_handshake = ngtcp2_make_vec_lit("handshake"); static ngtcp2_vec vec_pkt_type_0rtt = ngtcp2_make_vec_lit("0RTT"); static ngtcp2_vec vec_pkt_type_1rtt = ngtcp2_make_vec_lit("1RTT"); static ngtcp2_vec vec_pkt_type_retry = ngtcp2_make_vec_lit("retry"); +static ngtcp2_vec vec_pkt_type_version_negotiation = + ngtcp2_make_vec_lit("version_negotiation"); +static ngtcp2_vec vec_pkt_type_stateless_reset = + ngtcp2_make_vec_lit("stateless_reset"); static ngtcp2_vec vec_pkt_type_unknown = ngtcp2_make_vec_lit("unknown"); static const ngtcp2_vec *qlog_pkt_type(const ngtcp2_pkt_hd *hd) { @@ -256,19 +262,33 @@ static const ngtcp2_vec *qlog_pkt_type(const ngtcp2_pkt_hd *hd) { } } - return &vec_pkt_type_1rtt; + switch (hd->type) { + case NGTCP2_PKT_VERSION_NEGOTIATION: + return &vec_pkt_type_version_negotiation; + case NGTCP2_PKT_STATELESS_RESET: + return &vec_pkt_type_stateless_reset; + case NGTCP2_PKT_1RTT: + return &vec_pkt_type_1rtt; + default: + return &vec_pkt_type_unknown; + } } static uint8_t *write_pkt_hd(uint8_t *p, const ngtcp2_pkt_hd *hd) { /* - * {"packet_type":"version_negotiation","packet_number":"0000000000000000000"} + * {"packet_type":"version_negotiation","packet_number":"0000000000000000000","token":{"data":""}} */ -#define NGTCP2_QLOG_PKT_HD_OVERHEAD 75 +#define NGTCP2_QLOG_PKT_HD_OVERHEAD 95 *p++ = '{'; p = write_pair(p, "packet_type", qlog_pkt_type(hd)); *p++ = ','; p = write_pair_number(p, "packet_number", (uint64_t)hd->pkt_num); + if (hd->type == NGTCP2_PKT_INITIAL && hd->token.len) { + p = write_verbatim(p, ",\"token\":{"); + p = write_pair_hex(p, "data", hd->token.base, hd->token.len); + *p++ = '}'; + } /* TODO Write DCIL and DCID */ /* TODO Write SCIL and SCID */ *p++ = '}'; @@ -313,10 +333,7 @@ static uint8_t *write_ack_frame(uint8_t *p, const ngtcp2_ack *fr) { p = write_verbatim(p, "{\"frame_type\":\"ack\","); p = write_pair_duration(p, "ack_delay", fr->ack_delay_unscaled); - *p++ = ','; - p = write_string(p, "acked_ranges"); - *p++ = ':'; - *p++ = '['; + p = write_verbatim(p, ",\"acked_ranges\":["); largest_ack = fr->largest_ack; min_ack = fr->largest_ack - (int64_t)fr->first_ack_blklen; @@ -410,14 +427,15 @@ static uint8_t *write_crypto_frame(uint8_t *p, const ngtcp2_crypto *fr) { static uint8_t *write_new_token_frame(uint8_t *p, const ngtcp2_new_token *fr) { /* - * {"frame_type":"new_token","length":0000000000000000000,"token":""} + * {"frame_type":"new_token","length":0000000000000000000,"token":{"data":""}} */ -#define NGTCP2_QLOG_NEW_TOKEN_FRAME_OVERHEAD 66 +#define NGTCP2_QLOG_NEW_TOKEN_FRAME_OVERHEAD 75 p = write_verbatim(p, "{\"frame_type\":\"new_token\","); p = write_pair_number(p, "length", fr->token.len); - *p++ = ','; - p = write_pair_hex(p, "token", fr->token.base, fr->token.len); + p = write_verbatim(p, ",\"token\":{"); + p = write_pair_hex(p, "data", fr->token.base, fr->token.len); + *p++ = '}'; *p++ = '}'; return p; @@ -480,9 +498,7 @@ static uint8_t *write_max_streams_frame(uint8_t *p, */ #define NGTCP2_QLOG_MAX_STREAMS_FRAME_OVERHEAD 89 - p = write_verbatim(p, "{\"frame_type\":\"max_streams\","); - p = write_string(p, "stream_type"); - *p++ = ':'; + p = write_verbatim(p, "{\"frame_type\":\"max_streams\",\"stream_type\":"); if (fr->type == NGTCP2_FRAME_MAX_STREAMS_BIDI) { p = write_string(p, "bidirectional"); } else { @@ -541,9 +557,9 @@ static uint8_t *write_streams_blocked_frame(uint8_t *p, static uint8_t * write_new_connection_id_frame(uint8_t *p, const ngtcp2_new_connection_id *fr) { /* - * {"frame_type":"new_connection_id","sequence_number":0000000000000000000,"retire_prior_to":0000000000000000000,"connection_id_length":0000000000000000000,"connection_id":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","stateless_reset_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"} + * {"frame_type":"new_connection_id","sequence_number":0000000000000000000,"retire_prior_to":0000000000000000000,"connection_id_length":0000000000000000000,"connection_id":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","stateless_reset_token":{"data":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}} */ -#define NGTCP2_QLOG_NEW_CONNECTION_ID_FRAME_OVERHEAD 271 +#define NGTCP2_QLOG_NEW_CONNECTION_ID_FRAME_OVERHEAD 280 p = write_verbatim(p, "{\"frame_type\":\"new_connection_id\","); p = write_pair_number(p, "sequence_number", fr->seq); @@ -553,10 +569,11 @@ write_new_connection_id_frame(uint8_t *p, const ngtcp2_new_connection_id *fr) { p = write_pair_number(p, "connection_id_length", fr->cid.datalen); *p++ = ','; p = write_pair_cid(p, "connection_id", &fr->cid); - *p++ = ','; - p = write_pair_hex(p, "stateless_reset_token", fr->stateless_reset_token, + p = write_verbatim(p, ",\"stateless_reset_token\":{"); + p = write_pair_hex(p, "data", fr->stateless_reset_token, sizeof(fr->stateless_reset_token)); *p++ = '}'; + *p++ = '}'; return p; } @@ -611,9 +628,8 @@ write_connection_close_frame(uint8_t *p, const ngtcp2_connection_close *fr) { */ #define NGTCP2_QLOG_CONNECTION_CLOSE_FRAME_OVERHEAD 131 - p = write_verbatim(p, "{\"frame_type\":\"connection_close\","); - p = write_string(p, "error_space"); - *p++ = ':'; + p = write_verbatim(p, + "{\"frame_type\":\"connection_close\",\"error_space\":"); if (fr->type == NGTCP2_FRAME_CONNECTION_CLOSE) { p = write_string(p, "transport"); } else { @@ -669,6 +685,7 @@ static void qlog_pkt_write_start(ngtcp2_qlog *qlog, int sent) { ngtcp2_buf_reset(&qlog->buf); p = qlog->buf.last; + *p++ = '\x1e'; *p++ = '{'; p = qlog_write_time(qlog, p); p = write_verbatim(p, ",\"name\":"); @@ -690,14 +707,18 @@ static void qlog_pkt_write_end(ngtcp2_qlog *qlog, const ngtcp2_pkt_hd *hd, } /* - * ],"header":,"raw":{"packet_size":0000000000000000000}}} + * ],"header":,"raw":{"length":0000000000000000000}}} * * plus, terminating LF */ #define NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD \ - (1 + 55 + NGTCP2_QLOG_PKT_HD_OVERHEAD) + (1 + 50 + NGTCP2_QLOG_PKT_HD_OVERHEAD) + + if (ngtcp2_buf_left(&qlog->buf) < + NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD + hd->token.len * 2) { + return; + } - assert(ngtcp2_buf_left(&qlog->buf) >= NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD); assert(ngtcp2_buf_len(&qlog->buf)); /* Eat last ',' */ @@ -707,7 +728,7 @@ static void qlog_pkt_write_end(ngtcp2_qlog *qlog, const ngtcp2_pkt_hd *hd, p = write_verbatim(p, "],\"header\":"); p = write_pkt_hd(p, hd); - p = write_verbatim(p, ",\"raw\":{\"packet_size\":"); + p = write_verbatim(p, ",\"raw\":{\"length\":"); p = write_number(p, pktlen); p = write_verbatim(p, "}}}\n"); @@ -726,15 +747,13 @@ void ngtcp2_qlog_write_frame(ngtcp2_qlog *qlog, const ngtcp2_frame *fr) { switch (fr->type) { case NGTCP2_FRAME_PADDING: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_PADDING_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_PADDING_FRAME_OVERHEAD + 1) { return; } p = write_padding_frame(p, &fr->padding); break; case NGTCP2_FRAME_PING: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_PING_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_PING_FRAME_OVERHEAD + 1) { return; } p = write_ping_frame(p, &fr->ping); @@ -746,86 +765,75 @@ void ngtcp2_qlog_write_frame(ngtcp2_qlog *qlog, const ngtcp2_frame *fr) { (size_t)(fr->type == NGTCP2_FRAME_ACK_ECN ? NGTCP2_QLOG_ACK_FRAME_ECN_OVERHEAD : 0) + - NGTCP2_QLOG_ACK_FRAME_RANGE_OVERHEAD * (1 + fr->ack.num_blks) + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + NGTCP2_QLOG_ACK_FRAME_RANGE_OVERHEAD * (1 + fr->ack.num_blks) + 1) { return; } p = write_ack_frame(p, &fr->ack); break; case NGTCP2_FRAME_RESET_STREAM: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_RESET_STREAM_FRAME_OVERHEAD + - 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < + NGTCP2_QLOG_RESET_STREAM_FRAME_OVERHEAD + 1) { return; } p = write_reset_stream_frame(p, &fr->reset_stream); break; case NGTCP2_FRAME_STOP_SENDING: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_STOP_SENDING_FRAME_OVERHEAD + - 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < + NGTCP2_QLOG_STOP_SENDING_FRAME_OVERHEAD + 1) { return; } p = write_stop_sending_frame(p, &fr->stop_sending); break; case NGTCP2_FRAME_CRYPTO: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_CRYPTO_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_CRYPTO_FRAME_OVERHEAD + 1) { return; } p = write_crypto_frame(p, &fr->crypto); break; case NGTCP2_FRAME_NEW_TOKEN: if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_NEW_TOKEN_FRAME_OVERHEAD + - fr->new_token.token.len * 2 + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + fr->new_token.token.len * 2 + 1) { return; } p = write_new_token_frame(p, &fr->new_token); break; case NGTCP2_FRAME_STREAM: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_STREAM_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_STREAM_FRAME_OVERHEAD + 1) { return; } p = write_stream_frame(p, &fr->stream); break; case NGTCP2_FRAME_MAX_DATA: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_MAX_DATA_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_MAX_DATA_FRAME_OVERHEAD + 1) { return; } p = write_max_data_frame(p, &fr->max_data); break; case NGTCP2_FRAME_MAX_STREAM_DATA: if (ngtcp2_buf_left(&qlog->buf) < - NGTCP2_QLOG_MAX_STREAM_DATA_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + NGTCP2_QLOG_MAX_STREAM_DATA_FRAME_OVERHEAD + 1) { return; } p = write_max_stream_data_frame(p, &fr->max_stream_data); break; case NGTCP2_FRAME_MAX_STREAMS_BIDI: case NGTCP2_FRAME_MAX_STREAMS_UNI: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_MAX_STREAMS_FRAME_OVERHEAD + - 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < + NGTCP2_QLOG_MAX_STREAMS_FRAME_OVERHEAD + 1) { return; } p = write_max_streams_frame(p, &fr->max_streams); break; case NGTCP2_FRAME_DATA_BLOCKED: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_DATA_BLOCKED_FRAME_OVERHEAD + - 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < + NGTCP2_QLOG_DATA_BLOCKED_FRAME_OVERHEAD + 1) { return; } p = write_data_blocked_frame(p, &fr->data_blocked); break; case NGTCP2_FRAME_STREAM_DATA_BLOCKED: if (ngtcp2_buf_left(&qlog->buf) < - NGTCP2_QLOG_STREAM_DATA_BLOCKED_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + NGTCP2_QLOG_STREAM_DATA_BLOCKED_FRAME_OVERHEAD + 1) { return; } p = write_stream_data_blocked_frame(p, &fr->stream_data_blocked); @@ -833,40 +841,35 @@ void ngtcp2_qlog_write_frame(ngtcp2_qlog *qlog, const ngtcp2_frame *fr) { case NGTCP2_FRAME_STREAMS_BLOCKED_BIDI: case NGTCP2_FRAME_STREAMS_BLOCKED_UNI: if (ngtcp2_buf_left(&qlog->buf) < - NGTCP2_QLOG_STREAMS_BLOCKED_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + NGTCP2_QLOG_STREAMS_BLOCKED_FRAME_OVERHEAD + 1) { return; } p = write_streams_blocked_frame(p, &fr->streams_blocked); break; case NGTCP2_FRAME_NEW_CONNECTION_ID: if (ngtcp2_buf_left(&qlog->buf) < - NGTCP2_QLOG_NEW_CONNECTION_ID_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + NGTCP2_QLOG_NEW_CONNECTION_ID_FRAME_OVERHEAD + 1) { return; } p = write_new_connection_id_frame(p, &fr->new_connection_id); break; case NGTCP2_FRAME_RETIRE_CONNECTION_ID: if (ngtcp2_buf_left(&qlog->buf) < - NGTCP2_QLOG_RETIRE_CONNECTION_ID_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + NGTCP2_QLOG_RETIRE_CONNECTION_ID_FRAME_OVERHEAD + 1) { return; } p = write_retire_connection_id_frame(p, &fr->retire_connection_id); break; case NGTCP2_FRAME_PATH_CHALLENGE: if (ngtcp2_buf_left(&qlog->buf) < - NGTCP2_QLOG_PATH_CHALLENGE_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + NGTCP2_QLOG_PATH_CHALLENGE_FRAME_OVERHEAD + 1) { return; } p = write_path_challenge_frame(p, &fr->path_challenge); break; case NGTCP2_FRAME_PATH_RESPONSE: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_PATH_RESPONSE_FRAME_OVERHEAD + - 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < + NGTCP2_QLOG_PATH_RESPONSE_FRAME_OVERHEAD + 1) { return; } p = write_path_response_frame(p, &fr->path_response); @@ -874,24 +877,21 @@ void ngtcp2_qlog_write_frame(ngtcp2_qlog *qlog, const ngtcp2_frame *fr) { case NGTCP2_FRAME_CONNECTION_CLOSE: case NGTCP2_FRAME_CONNECTION_CLOSE_APP: if (ngtcp2_buf_left(&qlog->buf) < - NGTCP2_QLOG_CONNECTION_CLOSE_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + NGTCP2_QLOG_CONNECTION_CLOSE_FRAME_OVERHEAD + 1) { return; } p = write_connection_close_frame(p, &fr->connection_close); break; case NGTCP2_FRAME_HANDSHAKE_DONE: if (ngtcp2_buf_left(&qlog->buf) < - NGTCP2_QLOG_HANDSHAKE_DONE_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + NGTCP2_QLOG_HANDSHAKE_DONE_FRAME_OVERHEAD + 1) { return; } p = write_handshake_done_frame(p, &fr->handshake_done); break; case NGTCP2_FRAME_DATAGRAM: case NGTCP2_FRAME_DATAGRAM_LEN: - if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_DATAGRAM_FRAME_OVERHEAD + 1 + - NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD) { + if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_DATAGRAM_FRAME_OVERHEAD + 1) { return; } p = write_datagram_frame(p, &fr->datagram); @@ -934,6 +934,7 @@ void ngtcp2_qlog_parameters_set_transport_params( return; } + *p++ = '\x1e'; *p++ = '{'; p = qlog_write_time(qlog, p); p = write_verbatim( @@ -958,9 +959,10 @@ void ngtcp2_qlog_parameters_set_transport_params( *p++ = ','; } if (params->stateless_reset_token_present) { - p = write_pair_hex(p, "stateless_reset_token", - params->stateless_reset_token, + p = write_verbatim(p, "\"stateless_reset_token\":{"); + p = write_pair_hex(p, "data", params->stateless_reset_token, sizeof(params->stateless_reset_token)); + *p++ = '}'; *p++ = ','; } p = write_pair_bool(p, "disable_active_migration", @@ -1009,14 +1011,17 @@ void ngtcp2_qlog_parameters_set_transport_params( p = write_pair_number(p, "port_v6", paddr->ipv6_port); *p++ = ','; p = write_pair_cid(p, "connection_id", &paddr->cid); - *p++ = ','; - p = write_pair_hex(p, "stateless_reset_token", paddr->stateless_reset_token, + p = write_verbatim(p, ",\"stateless_reset_token\":{"); + p = write_pair_hex(p, "data", paddr->stateless_reset_token, sizeof(paddr->stateless_reset_token)); *p++ = '}'; + *p++ = '}'; } *p++ = ','; p = write_pair_number(p, "max_datagram_frame_size", params->max_datagram_frame_size); + *p++ = ','; + p = write_pair_bool(p, "grease_quic_bit", params->grease_quic_bit); p = write_verbatim(p, "}}\n"); qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf, @@ -1032,6 +1037,7 @@ void ngtcp2_qlog_metrics_updated(ngtcp2_qlog *qlog, return; } + *p++ = '\x1e'; *p++ = '{'; p = qlog_write_time(qlog, p); p = write_verbatim(p, ",\"name\":\"recovery:metrics_updated\",\"data\":{"); @@ -1071,6 +1077,7 @@ void ngtcp2_qlog_pkt_lost(ngtcp2_qlog *qlog, ngtcp2_rtb_entry *ent) { return; } + *p++ = '\x1e'; *p++ = '{'; p = qlog_write_time(qlog, p); p = write_verbatim( @@ -1087,22 +1094,110 @@ void ngtcp2_qlog_pkt_lost(ngtcp2_qlog *qlog, ngtcp2_rtb_entry *ent) { (size_t)(p - buf)); } -void ngtcp2_qlog_retry_pkt_received(ngtcp2_qlog *qlog, - const ngtcp2_pkt_hd *hd) { +void ngtcp2_qlog_retry_pkt_received(ngtcp2_qlog *qlog, const ngtcp2_pkt_hd *hd, + const ngtcp2_pkt_retry *retry) { + uint8_t rawbuf[1024]; + ngtcp2_buf buf; + + if (!qlog->write) { + return; + } + + ngtcp2_buf_init(&buf, rawbuf, sizeof(rawbuf)); + + *buf.last++ = '\x1e'; + *buf.last++ = '{'; + buf.last = qlog_write_time(qlog, buf.last); + buf.last = write_verbatim( + buf.last, + ",\"name\":\"transport:packet_received\",\"data\":{\"header\":"); + + if (ngtcp2_buf_left(&buf) < + NGTCP2_QLOG_PKT_HD_OVERHEAD + hd->token.len * 2 + + sizeof(",\"retry_token\":{\"data\":\"\"}}}\n") - 1 + + retry->token.len * 2) { + return; + } + + buf.last = write_pkt_hd(buf.last, hd); + buf.last = write_verbatim(buf.last, ",\"retry_token\":{"); + buf.last = + write_pair_hex(buf.last, "data", retry->token.base, retry->token.len); + buf.last = write_verbatim(buf.last, "}}}\n"); + + qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf.pos, + ngtcp2_buf_len(&buf)); +} + +void ngtcp2_qlog_stateless_reset_pkt_received( + ngtcp2_qlog *qlog, const ngtcp2_pkt_stateless_reset *sr) { uint8_t buf[256]; uint8_t *p = buf; + ngtcp2_pkt_hd hd = {0}; if (!qlog->write) { return; } + hd.type = NGTCP2_PKT_STATELESS_RESET; + + *p++ = '\x1e'; *p++ = '{'; p = qlog_write_time(qlog, p); p = write_verbatim( p, ",\"name\":\"transport:packet_received\",\"data\":{\"header\":"); - p = write_pkt_hd(p, hd); + p = write_pkt_hd(p, &hd); + *p++ = ','; + p = write_pair_hex(p, "stateless_reset_token", sr->stateless_reset_token, + NGTCP2_STATELESS_RESET_TOKENLEN); p = write_verbatim(p, "}}\n"); qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf, (size_t)(p - buf)); } + +void ngtcp2_qlog_version_negotiation_pkt_received(ngtcp2_qlog *qlog, + const ngtcp2_pkt_hd *hd, + const uint32_t *sv, + size_t nsv) { + uint8_t rawbuf[512]; + ngtcp2_buf buf; + size_t i; + uint32_t v; + + if (!qlog->write) { + return; + } + + ngtcp2_buf_init(&buf, rawbuf, sizeof(rawbuf)); + + *buf.last++ = '\x1e'; + *buf.last++ = '{'; + buf.last = qlog_write_time(qlog, buf.last); + buf.last = write_verbatim( + buf.last, + ",\"name\":\"transport:packet_received\",\"data\":{\"header\":"); + buf.last = write_pkt_hd(buf.last, hd); + buf.last = write_verbatim(buf.last, ",\"supported_versions\":["); + + if (nsv) { + if (ngtcp2_buf_left(&buf) < + (sizeof("\"xxxxxxxx\",") - 1) * nsv - 1 + sizeof("]}}\n") - 1) { + return; + } + + v = ngtcp2_htonl(sv[0]); + buf.last = write_hex(buf.last, (const uint8_t *)&v, sizeof(v)); + + for (i = 1; i < nsv; ++i) { + *buf.last++ = ','; + v = ngtcp2_htonl(sv[i]); + buf.last = write_hex(buf.last, (const uint8_t *)&v, sizeof(v)); + } + } + + buf.last = write_verbatim(buf.last, "]}}\n"); + + qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf.pos, + ngtcp2_buf_len(&buf)); +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_qlog.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_qlog.h index cb3c2063f76..b9107c0e5c0 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_qlog.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_qlog.h @@ -139,6 +139,23 @@ void ngtcp2_qlog_pkt_lost(ngtcp2_qlog *qlog, ngtcp2_rtb_entry *ent); * ngtcp2_qlog_retry_pkt_received writes packet_received event for a * received Retry packet. */ -void ngtcp2_qlog_retry_pkt_received(ngtcp2_qlog *qlog, const ngtcp2_pkt_hd *hd); +void ngtcp2_qlog_retry_pkt_received(ngtcp2_qlog *qlog, const ngtcp2_pkt_hd *hd, + const ngtcp2_pkt_retry *retry); + +/* + * ngtcp2_qlog_stateless_reset_pkt_received writes packet_received + * event for a received Stateless Reset packet. + */ +void ngtcp2_qlog_stateless_reset_pkt_received( + ngtcp2_qlog *qlog, const ngtcp2_pkt_stateless_reset *sr); + +/* + * ngtcp2_qlog_version_negotiation_pkt_received writes packet_received + * event for a received Version Negotiation packet. + */ +void ngtcp2_qlog_version_negotiation_pkt_received(ngtcp2_qlog *qlog, + const ngtcp2_pkt_hd *hd, + const uint32_t *sv, + size_t nsv); #endif /* NGTCP2_QLOG_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rcvry.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rcvry.h index e392c34ebfe..4cb40882192 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rcvry.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rcvry.h @@ -31,12 +31,10 @@ #include -/* NGTCP2_PKT_THRESHOLD is kPacketThreshold described in - draft-ietf-quic-recovery-22. */ +/* NGTCP2_PKT_THRESHOLD is kPacketThreshold described in RFC 9002. */ #define NGTCP2_PKT_THRESHOLD 3 -/* NGTCP2_GRANULARITY is kGranularity described in - draft-ietf-quic-recovery-17. */ +/* NGTCP2_GRANULARITY is kGranularity described in RFC 9002. */ #define NGTCP2_GRANULARITY NGTCP2_MILLISECONDS #endif /* NGTCP2_RCVRY_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_ringbuf.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_ringbuf.c index e4deab1ff76..a6b3f73e733 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_ringbuf.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_ringbuf.c @@ -43,24 +43,30 @@ unsigned int __popcnt(unsigned int x) { int ngtcp2_ringbuf_init(ngtcp2_ringbuf *rb, size_t nmemb, size_t size, const ngtcp2_mem *mem) { + uint8_t *buf = ngtcp2_mem_malloc(mem, nmemb * size); + if (buf == NULL) { + return NGTCP2_ERR_NOMEM; + } + + ngtcp2_ringbuf_buf_init(rb, nmemb, size, buf, mem); + + return 0; +} + +void ngtcp2_ringbuf_buf_init(ngtcp2_ringbuf *rb, size_t nmemb, size_t size, + uint8_t *buf, const ngtcp2_mem *mem) { #ifdef WIN32 assert(1 == __popcnt((unsigned int)nmemb)); #else assert(1 == __builtin_popcount((unsigned int)nmemb)); #endif - rb->buf = ngtcp2_mem_malloc(mem, nmemb * size); - if (rb->buf == NULL) { - return NGTCP2_ERR_NOMEM; - } - + rb->buf = buf; rb->mem = mem; rb->nmemb = nmemb; rb->size = size; rb->first = 0; rb->len = 0; - - return 0; } void ngtcp2_ringbuf_free(ngtcp2_ringbuf *rb) { diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_ringbuf.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_ringbuf.h index c6e14215183..16635c94103 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_ringbuf.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_ringbuf.h @@ -62,6 +62,13 @@ typedef struct ngtcp2_ringbuf { int ngtcp2_ringbuf_init(ngtcp2_ringbuf *rb, size_t nmemb, size_t size, const ngtcp2_mem *mem); +/* + * ngtcp2_ringbuf_buf_init initializes |rb| with given buffer and + * size. + */ +void ngtcp2_ringbuf_buf_init(ngtcp2_ringbuf *rb, size_t nmemb, size_t size, + uint8_t *buf, const ngtcp2_mem *mem); + /* * ngtcp2_ringbuf_free frees resources allocated for |rb|. This * function does not free the memory pointed by |rb|. @@ -107,4 +114,19 @@ void *ngtcp2_ringbuf_get(ngtcp2_ringbuf *rb, size_t offset); /* ngtcp2_ringbuf_full returns nonzero if |rb| is full. */ int ngtcp2_ringbuf_full(ngtcp2_ringbuf *rb); +/* ngtcp2_static_ringbuf_def defines ngtcp2_ringbuf struct wrapper + which uses a statically allocated buffer that is suitable for a + usage that does not change buffer size with ngtcp2_ringbuf_resize. + ngtcp2_ringbuf_free should never be called for rb field. */ +#define ngtcp2_static_ringbuf_def(NAME, NMEMB, SIZE) \ + typedef struct ngtcp2_static_ringbuf_##NAME { \ + ngtcp2_ringbuf rb; \ + uint8_t buf[(NMEMB) * (SIZE)]; \ + } ngtcp2_static_ringbuf_##NAME; \ + \ + static inline void ngtcp2_static_ringbuf_##NAME##_init( \ + ngtcp2_static_ringbuf_##NAME *srb) { \ + ngtcp2_ringbuf_buf_init(&srb->rb, (NMEMB), (SIZE), srb->buf, NULL); \ + } + #endif /* NGTCP2_RINGBUF_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rob.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rob.c index 499c07ec6be..9c3d75dc33a 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rob.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rob.c @@ -69,11 +69,8 @@ int ngtcp2_rob_init(ngtcp2_rob *rob, size_t chunk, const ngtcp2_mem *mem) { int rv; ngtcp2_rob_gap *g; - rv = ngtcp2_ksl_init(&rob->gapksl, ngtcp2_ksl_range_compar, - sizeof(ngtcp2_range), mem); - if (rv != 0) { - goto fail_gapksl_ksl_init; - } + ngtcp2_ksl_init(&rob->gapksl, ngtcp2_ksl_range_compar, sizeof(ngtcp2_range), + mem); rv = ngtcp2_rob_gap_new(&g, 0, UINT64_MAX, mem); if (rv != 0) { @@ -85,23 +82,18 @@ int ngtcp2_rob_init(ngtcp2_rob *rob, size_t chunk, const ngtcp2_mem *mem) { goto fail_gapksl_ksl_insert; } - rv = ngtcp2_ksl_init(&rob->dataksl, ngtcp2_ksl_range_compar, - sizeof(ngtcp2_range), mem); - if (rv != 0) { - goto fail_dataksl_ksl_init; - } + ngtcp2_ksl_init(&rob->dataksl, ngtcp2_ksl_range_compar, sizeof(ngtcp2_range), + mem); rob->chunk = chunk; rob->mem = mem; return 0; -fail_dataksl_ksl_init: fail_gapksl_ksl_insert: ngtcp2_rob_gap_del(g, mem); fail_rob_gap_new: ngtcp2_ksl_free(&rob->gapksl); -fail_gapksl_ksl_init: return rv; } @@ -185,7 +177,7 @@ int ngtcp2_rob_push(ngtcp2_rob *rob, uint64_t offset, const uint8_t *data, break; } if (ngtcp2_range_eq(&g->range, &m)) { - ngtcp2_ksl_remove(&rob->gapksl, &it, &g->range); + ngtcp2_ksl_remove_hint(&rob->gapksl, &it, &it, &g->range); ngtcp2_rob_gap_del(g, rob->mem); rv = rob_write_data(rob, m.begin, data + (m.begin - offset), (size_t)ngtcp2_range_len(&m)); @@ -244,7 +236,7 @@ int ngtcp2_rob_remove_prefix(ngtcp2_rob *rob, uint64_t offset) { g->range.begin = offset; break; } - ngtcp2_ksl_remove(&rob->gapksl, &it, &g->range); + ngtcp2_ksl_remove_hint(&rob->gapksl, &it, &it, &g->range); ngtcp2_rob_gap_del(g, rob->mem); } @@ -255,7 +247,7 @@ int ngtcp2_rob_remove_prefix(ngtcp2_rob *rob, uint64_t offset) { if (offset < d->range.begin + rob->chunk) { return 0; } - ngtcp2_ksl_remove(&rob->dataksl, &it, &d->range); + ngtcp2_ksl_remove_hint(&rob->dataksl, &it, &it, &d->range); ngtcp2_rob_data_del(d, rob->mem); } @@ -305,7 +297,7 @@ void ngtcp2_rob_pop(ngtcp2_rob *rob, uint64_t offset, size_t len) { return; } - ngtcp2_ksl_remove(&rob->dataksl, NULL, &d->range); + ngtcp2_ksl_remove_hint(&rob->dataksl, NULL, &it, &d->range); ngtcp2_rob_data_del(d, rob->mem); } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rst.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rst.c index e546fdf85c6..7b50f98d41e 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rst.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rst.c @@ -23,6 +23,9 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "ngtcp2_rst.h" + +#include + #include "ngtcp2_rtb.h" #include "ngtcp2_cc.h" #include "ngtcp2_macro.h" @@ -32,6 +35,9 @@ void ngtcp2_rs_init(ngtcp2_rs *rs) { rs->delivered = 0; rs->prior_delivered = 0; rs->prior_ts = 0; + rs->tx_in_flight = 0; + rs->lost = 0; + rs->prior_lost = 0; rs->send_elapsed = 0; rs->ack_elapsed = 0; rs->is_app_limited = 0; @@ -39,10 +45,15 @@ void ngtcp2_rs_init(ngtcp2_rs *rs) { void ngtcp2_rst_init(ngtcp2_rst *rst) { ngtcp2_rs_init(&rst->rs); + ngtcp2_window_filter_init(&rst->wf, 12); rst->delivered = 0; rst->delivered_ts = 0; rst->first_sent_ts = 0; rst->app_limited = 0; + rst->next_round_delivered = 0; + rst->round_count = 0; + rst->is_cwnd_limited = 0; + rst->lost = 0; } void ngtcp2_rst_on_pkt_sent(ngtcp2_rst *rst, ngtcp2_rtb_entry *ent, @@ -54,15 +65,24 @@ void ngtcp2_rst_on_pkt_sent(ngtcp2_rst *rst, ngtcp2_rtb_entry *ent, ent->rst.delivered_ts = rst->delivered_ts; ent->rst.delivered = rst->delivered; ent->rst.is_app_limited = rst->app_limited != 0; + ent->rst.tx_in_flight = cstat->bytes_in_flight + ent->pktlen; + ent->rst.lost = rst->lost; } -int ngtcp2_rst_on_ack_recv(ngtcp2_rst *rst, ngtcp2_conn_stat *cstat) { +int ngtcp2_rst_on_ack_recv(ngtcp2_rst *rst, ngtcp2_conn_stat *cstat, + uint64_t pkt_delivered) { ngtcp2_rs *rs = &rst->rs; + uint64_t rate; if (rst->app_limited && rst->delivered > rst->app_limited) { rst->app_limited = 0; } + if (pkt_delivered >= rst->next_round_delivered) { + rst->next_round_delivered = pkt_delivered; + ++rst->round_count; + } + if (rs->prior_ts == 0) { return 0; } @@ -70,14 +90,22 @@ int ngtcp2_rst_on_ack_recv(ngtcp2_rst *rst, ngtcp2_conn_stat *cstat) { rs->interval = ngtcp2_max(rs->send_elapsed, rs->ack_elapsed); rs->delivered = rst->delivered - rs->prior_delivered; + rs->lost = rst->lost - rs->prior_lost; if (rs->interval < cstat->min_rtt) { rs->interval = UINT64_MAX; return 0; } - if (rs->interval) { - cstat->delivery_rate_sec = rs->delivered * NGTCP2_SECONDS / rs->interval; + if (!rs->interval) { + return 0; + } + + rate = rs->delivered * NGTCP2_SECONDS / rs->interval; + + if (rate > ngtcp2_window_filter_get_best(&rst->wf) || !rst->app_limited) { + ngtcp2_window_filter_update(&rst->wf, rate, rst->round_count); + cstat->delivery_rate_sec = ngtcp2_window_filter_get_best(&rst->wf); } return 0; @@ -96,6 +124,8 @@ void ngtcp2_rst_update_rate_sample(ngtcp2_rst *rst, const ngtcp2_rtb_entry *ent, rs->is_app_limited = ent->rst.is_app_limited; rs->send_elapsed = ent->ts - ent->rst.first_sent_ts; rs->ack_elapsed = rst->delivered_ts - ent->rst.delivered_ts; + rs->tx_in_flight = ent->rst.tx_in_flight; + rs->prior_lost = ent->rst.lost; rst->first_sent_ts = ent->ts; } } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rst.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rst.h index 14aae998ebd..488c65575a5 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rst.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rst.h @@ -31,6 +31,8 @@ #include +#include "ngtcp2_window_filter.h" + typedef struct ngtcp2_rtb_entry ngtcp2_rtb_entry; /** @@ -43,6 +45,9 @@ typedef struct ngtcp2_rs { uint64_t delivered; uint64_t prior_delivered; ngtcp2_tstamp prior_ts; + uint64_t tx_in_flight; + uint64_t lost; + uint64_t prior_lost; ngtcp2_duration send_elapsed; ngtcp2_duration ack_elapsed; int is_app_limited; @@ -56,17 +61,23 @@ void ngtcp2_rs_init(ngtcp2_rs *rs); */ typedef struct ngtcp2_rst { ngtcp2_rs rs; + ngtcp2_window_filter wf; uint64_t delivered; ngtcp2_tstamp delivered_ts; ngtcp2_tstamp first_sent_ts; uint64_t app_limited; + uint64_t next_round_delivered; + uint64_t round_count; + uint64_t lost; + int is_cwnd_limited; } ngtcp2_rst; void ngtcp2_rst_init(ngtcp2_rst *rst); void ngtcp2_rst_on_pkt_sent(ngtcp2_rst *rst, ngtcp2_rtb_entry *ent, const ngtcp2_conn_stat *cstat); -int ngtcp2_rst_on_ack_recv(ngtcp2_rst *rst, ngtcp2_conn_stat *cstat); +int ngtcp2_rst_on_ack_recv(ngtcp2_rst *rst, ngtcp2_conn_stat *cstat, + uint64_t pkt_delivered); void ngtcp2_rst_update_rate_sample(ngtcp2_rst *rst, const ngtcp2_rtb_entry *ent, ngtcp2_tstamp ts); void ngtcp2_rst_update_app_limited(ngtcp2_rst *rst, ngtcp2_conn_stat *cstat); diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.c index 1ef67ccbc6a..644071400a6 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.c @@ -46,6 +46,18 @@ int ngtcp2_frame_chain_new(ngtcp2_frame_chain **pfrc, const ngtcp2_mem *mem) { return 0; } +int ngtcp2_frame_chain_objalloc_new(ngtcp2_frame_chain **pfrc, + ngtcp2_objalloc *objalloc) { + *pfrc = ngtcp2_objalloc_frame_chain_get(objalloc); + if (*pfrc == NULL) { + return NGTCP2_ERR_NOMEM; + } + + ngtcp2_frame_chain_init(*pfrc); + + return 0; +} + int ngtcp2_frame_chain_extralen_new(ngtcp2_frame_chain **pfrc, size_t extralen, const ngtcp2_mem *mem) { *pfrc = ngtcp2_mem_malloc(mem, sizeof(ngtcp2_frame_chain) + extralen); @@ -58,35 +70,44 @@ int ngtcp2_frame_chain_extralen_new(ngtcp2_frame_chain **pfrc, size_t extralen, return 0; } -int ngtcp2_frame_chain_stream_datacnt_new(ngtcp2_frame_chain **pfrc, - size_t datacnt, - const ngtcp2_mem *mem) { - size_t need = sizeof(ngtcp2_vec) * (datacnt - 1); - size_t avail = sizeof(ngtcp2_frame) - sizeof(ngtcp2_stream); +int ngtcp2_frame_chain_stream_datacnt_objalloc_new(ngtcp2_frame_chain **pfrc, + size_t datacnt, + ngtcp2_objalloc *objalloc, + const ngtcp2_mem *mem) { + size_t need, avail = sizeof(ngtcp2_frame) - sizeof(ngtcp2_stream); - if (datacnt > 0 && need > avail) { - return ngtcp2_frame_chain_extralen_new(pfrc, need - avail, mem); + if (datacnt > 1) { + need = sizeof(ngtcp2_vec) * (datacnt - 1); + + if (need > avail) { + return ngtcp2_frame_chain_extralen_new(pfrc, need - avail, mem); + } } - return ngtcp2_frame_chain_new(pfrc, mem); + return ngtcp2_frame_chain_objalloc_new(pfrc, objalloc); } -int ngtcp2_frame_chain_crypto_datacnt_new(ngtcp2_frame_chain **pfrc, - size_t datacnt, - const ngtcp2_mem *mem) { - size_t need = sizeof(ngtcp2_vec) * (datacnt - 1); - size_t avail = sizeof(ngtcp2_frame) - sizeof(ngtcp2_crypto); +int ngtcp2_frame_chain_crypto_datacnt_objalloc_new(ngtcp2_frame_chain **pfrc, + size_t datacnt, + ngtcp2_objalloc *objalloc, + const ngtcp2_mem *mem) { + size_t need, avail = sizeof(ngtcp2_frame) - sizeof(ngtcp2_crypto); + + if (datacnt > 1) { + need = sizeof(ngtcp2_vec) * (datacnt - 1); - if (datacnt > 0 && need > avail) { - return ngtcp2_frame_chain_extralen_new(pfrc, need - avail, mem); + if (need > avail) { + return ngtcp2_frame_chain_extralen_new(pfrc, need - avail, mem); + } } - return ngtcp2_frame_chain_new(pfrc, mem); + return ngtcp2_frame_chain_objalloc_new(pfrc, objalloc); } -int ngtcp2_frame_chain_new_token_new(ngtcp2_frame_chain **pfrc, - const ngtcp2_vec *token, - const ngtcp2_mem *mem) { +int ngtcp2_frame_chain_new_token_objalloc_new(ngtcp2_frame_chain **pfrc, + const ngtcp2_vec *token, + ngtcp2_objalloc *objalloc, + const ngtcp2_mem *mem) { size_t avail = sizeof(ngtcp2_frame) - sizeof(ngtcp2_new_token); int rv; uint8_t *p; @@ -95,7 +116,7 @@ int ngtcp2_frame_chain_new_token_new(ngtcp2_frame_chain **pfrc, if (token->len > avail) { rv = ngtcp2_frame_chain_extralen_new(pfrc, token->len - avail, mem); } else { - rv = ngtcp2_frame_chain_new(pfrc, mem); + rv = ngtcp2_frame_chain_objalloc_new(pfrc, objalloc); } if (rv != 0) { return rv; @@ -104,7 +125,7 @@ int ngtcp2_frame_chain_new_token_new(ngtcp2_frame_chain **pfrc, fr = &(*pfrc)->fr; fr->type = NGTCP2_FRAME_NEW_TOKEN; - p = (uint8_t *)(*pfrc) + sizeof(ngtcp2_new_token); + p = (uint8_t *)fr + sizeof(ngtcp2_new_token); memcpy(p, token->base, token->len); ngtcp2_vec_init(&fr->new_token.token, p, token->len); @@ -127,19 +148,71 @@ void ngtcp2_frame_chain_del(ngtcp2_frame_chain *frc, const ngtcp2_mem *mem) { ngtcp2_mem_free(mem, frc); } +void ngtcp2_frame_chain_objalloc_del(ngtcp2_frame_chain *frc, + ngtcp2_objalloc *objalloc, + const ngtcp2_mem *mem) { + ngtcp2_frame_chain_binder *binder; + + if (frc == NULL) { + return; + } + + switch (frc->fr.type) { + case NGTCP2_FRAME_STREAM: + if (frc->fr.stream.datacnt && + sizeof(ngtcp2_vec) * (frc->fr.stream.datacnt - 1) > + sizeof(ngtcp2_frame) - sizeof(ngtcp2_stream)) { + ngtcp2_frame_chain_del(frc, mem); + + return; + } + + break; + case NGTCP2_FRAME_CRYPTO: + if (frc->fr.crypto.datacnt && + sizeof(ngtcp2_vec) * (frc->fr.crypto.datacnt - 1) > + sizeof(ngtcp2_frame) - sizeof(ngtcp2_crypto)) { + ngtcp2_frame_chain_del(frc, mem); + + return; + } + + break; + case NGTCP2_FRAME_NEW_TOKEN: + if (frc->fr.new_token.token.len > + sizeof(ngtcp2_frame) - sizeof(ngtcp2_new_token)) { + ngtcp2_frame_chain_del(frc, mem); + + return; + } + + break; + } + + binder = frc->binder; + if (binder && --binder->refcount == 0) { + ngtcp2_mem_free(mem, binder); + } + + frc->binder = NULL; + + ngtcp2_objalloc_frame_chain_release(objalloc, frc); +} + void ngtcp2_frame_chain_init(ngtcp2_frame_chain *frc) { frc->next = NULL; frc->binder = NULL; } -void ngtcp2_frame_chain_list_del(ngtcp2_frame_chain *frc, - const ngtcp2_mem *mem) { +void ngtcp2_frame_chain_list_objalloc_del(ngtcp2_frame_chain *frc, + ngtcp2_objalloc *objalloc, + const ngtcp2_mem *mem) { ngtcp2_frame_chain *next; - for (; frc;) { + for (; frc; frc = next) { next = frc->next; - ngtcp2_frame_chain_del(frc, mem); - frc = next; + + ngtcp2_frame_chain_objalloc_del(frc, objalloc, mem); } } @@ -176,35 +249,46 @@ int ngtcp2_bind_frame_chains(ngtcp2_frame_chain *a, ngtcp2_frame_chain *b, return 0; } -int ngtcp2_rtb_entry_new(ngtcp2_rtb_entry **pent, const ngtcp2_pkt_hd *hd, - ngtcp2_frame_chain *frc, ngtcp2_tstamp ts, - size_t pktlen, uint8_t flags, const ngtcp2_mem *mem) { - (*pent) = ngtcp2_mem_calloc(mem, 1, sizeof(ngtcp2_rtb_entry)); +static void rtb_entry_init(ngtcp2_rtb_entry *ent, const ngtcp2_pkt_hd *hd, + ngtcp2_frame_chain *frc, ngtcp2_tstamp ts, + size_t pktlen, uint16_t flags) { + memset(ent, 0, sizeof(*ent)); + + ent->hd.pkt_num = hd->pkt_num; + ent->hd.type = hd->type; + ent->hd.flags = hd->flags; + ent->frc = frc; + ent->ts = ts; + ent->lost_ts = UINT64_MAX; + ent->pktlen = pktlen; + ent->flags = flags; + ent->next = NULL; +} + +int ngtcp2_rtb_entry_objalloc_new(ngtcp2_rtb_entry **pent, + const ngtcp2_pkt_hd *hd, + ngtcp2_frame_chain *frc, ngtcp2_tstamp ts, + size_t pktlen, uint16_t flags, + ngtcp2_objalloc *objalloc) { + *pent = ngtcp2_objalloc_rtb_entry_get(objalloc); if (*pent == NULL) { return NGTCP2_ERR_NOMEM; } - (*pent)->hd.pkt_num = hd->pkt_num; - (*pent)->hd.type = hd->type; - (*pent)->hd.flags = hd->flags; - (*pent)->frc = frc; - (*pent)->ts = ts; - (*pent)->lost_ts = UINT64_MAX; - (*pent)->pktlen = pktlen; - (*pent)->flags = flags; - (*pent)->next = NULL; + rtb_entry_init(*pent, hd, frc, ts, pktlen, flags); return 0; } -void ngtcp2_rtb_entry_del(ngtcp2_rtb_entry *ent, const ngtcp2_mem *mem) { - if (ent == NULL) { - return; - } +void ngtcp2_rtb_entry_objalloc_del(ngtcp2_rtb_entry *ent, + ngtcp2_objalloc *objalloc, + ngtcp2_objalloc *frc_objalloc, + const ngtcp2_mem *mem) { + ngtcp2_frame_chain_list_objalloc_del(ent->frc, frc_objalloc, mem); - ngtcp2_frame_chain_list_del(ent->frc, mem); + ent->frc = NULL; - ngtcp2_mem_free(mem, ent); + ngtcp2_objalloc_rtb_entry_release(objalloc, ent); } static int greater(const ngtcp2_ksl_key *lhs, const ngtcp2_ksl_key *rhs) { @@ -214,7 +298,10 @@ static int greater(const ngtcp2_ksl_key *lhs, const ngtcp2_ksl_key *rhs) { void ngtcp2_rtb_init(ngtcp2_rtb *rtb, ngtcp2_pktns_id pktns_id, ngtcp2_strm *crypto, ngtcp2_rst *rst, ngtcp2_cc *cc, ngtcp2_log *log, ngtcp2_qlog *qlog, - const ngtcp2_mem *mem) { + ngtcp2_objalloc *rtb_entry_objalloc, + ngtcp2_objalloc *frc_objalloc, const ngtcp2_mem *mem) { + rtb->rtb_entry_objalloc = rtb_entry_objalloc; + rtb->frc_objalloc = frc_objalloc; ngtcp2_ksl_init(&rtb->ents, greater, sizeof(int64_t), mem); rtb->crypto = crypto; rtb->rst = rst; @@ -225,12 +312,14 @@ void ngtcp2_rtb_init(ngtcp2_rtb *rtb, ngtcp2_pktns_id pktns_id, rtb->largest_acked_tx_pkt_num = -1; rtb->num_ack_eliciting = 0; rtb->num_retransmittable = 0; + rtb->num_pto_eliciting = 0; rtb->probe_pkt_left = 0; rtb->pktns_id = pktns_id; rtb->cc_pkt_num = 0; rtb->cc_bytes_in_flight = 0; rtb->persistent_congestion_start_ts = UINT64_MAX; rtb->num_lost_pkts = 0; + rtb->num_lost_pmtud_pkts = 0; } void ngtcp2_rtb_free(ngtcp2_rtb *rtb) { @@ -243,7 +332,9 @@ void ngtcp2_rtb_free(ngtcp2_rtb *rtb) { it = ngtcp2_ksl_begin(&rtb->ents); for (; !ngtcp2_ksl_it_end(&it); ngtcp2_ksl_it_next(&it)) { - ngtcp2_rtb_entry_del(ngtcp2_ksl_it_get(&it), rtb->mem); + ngtcp2_rtb_entry_objalloc_del(ngtcp2_ksl_it_get(&it), + rtb->rtb_entry_objalloc, rtb->frc_objalloc, + rtb->mem); } ngtcp2_ksl_free(&rtb->ents); @@ -266,14 +357,23 @@ static void rtb_on_add(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE) { ++rtb->num_retransmittable; } + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING) { + ++rtb->num_pto_eliciting; + } } -static void rtb_on_remove(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, - ngtcp2_conn_stat *cstat) { +static size_t rtb_on_remove(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, + ngtcp2_conn_stat *cstat) { if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED) { assert(rtb->num_lost_pkts); --rtb->num_lost_pkts; - return; + + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE) { + assert(rtb->num_lost_pmtud_pkts); + --rtb->num_lost_pmtud_pkts; + } + + return 0; } if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING) { @@ -287,22 +387,44 @@ static void rtb_on_remove(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, --rtb->num_retransmittable; } + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING) { + assert(rtb->num_pto_eliciting); + --rtb->num_pto_eliciting; + } + if (rtb->cc_pkt_num <= ent->hd.pkt_num) { assert(cstat->bytes_in_flight >= ent->pktlen); cstat->bytes_in_flight -= ent->pktlen; assert(rtb->cc_bytes_in_flight >= ent->pktlen); rtb->cc_bytes_in_flight -= ent->pktlen; + + /* If PMTUD packet is lost, we do not report the lost bytes to the + caller in order to ignore loss of PMTUD packet. */ + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE) { + return 0; + } + + return ent->pktlen; } + + return 0; } +/* NGTCP2_RECLAIM_FLAG_NONE indicates that no flag is set. */ +#define NGTCP2_RECLAIM_FLAG_NONE 0x00u +/* NGTCP2_RECLAIM_FLAG_ON_LOSS indicates that frames are reclaimed + because of the packet loss.*/ +#define NGTCP2_RECLAIM_FLAG_ON_LOSS 0x01u + /* * rtb_reclaim_frame queues unacknowledged frames included in |ent| * for retransmission. The re-queued frames are not deleted from - * |ent|. It returns the number of frames queued. + * |ent|. It returns the number of frames queued. |flags| is bitwise + * OR of 0 or more of NGTCP2_RECLAIM_FLAG_*. */ -static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, ngtcp2_conn *conn, - ngtcp2_pktns *pktns, +static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, uint8_t flags, + ngtcp2_conn *conn, ngtcp2_pktns *pktns, ngtcp2_rtb_entry *ent) { ngtcp2_frame_chain *frc, *nfrc, **pfrc = &pktns->tx.frq; ngtcp2_frame *fr; @@ -310,9 +432,10 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, ngtcp2_conn *conn, ngtcp2_range gap, range; size_t num_reclaimed = 0; int rv; + int streamfrq_empty; + + assert(ent->flags & NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE); - /* PADDING only (or PADDING + ACK ) packets will have NULL - ent->frc. */ /* TODO Reconsider the order of pfrc */ for (frc = ent->frc; frc; frc = frc->next) { fr = &frc->fr; @@ -334,13 +457,28 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, ngtcp2_conn *conn, range.end = fr->stream.offset + ngtcp2_vec_len(fr->stream.data, fr->stream.datacnt); range = ngtcp2_range_intersect(&range, &gap); - if (ngtcp2_range_len(&range) == 0 && - (!fr->stream.fin || (strm->flags & NGTCP2_STRM_FLAG_FIN_ACKED))) { - continue; + if (ngtcp2_range_len(&range) == 0) { + if (!fr->stream.fin) { + /* 0 length STREAM frame with offset == 0 must be + retransmitted if no non-empty data is sent to this stream + and no data in this stream is acknowledged. */ + if (fr->stream.offset != 0 || fr->stream.datacnt != 0 || + strm->tx.offset || (strm->flags & NGTCP2_STRM_FLAG_ANY_ACKED)) { + continue; + } + } else if (strm->flags & NGTCP2_STRM_FLAG_FIN_ACKED) { + continue; + } + } + + if ((flags & NGTCP2_RECLAIM_FLAG_ON_LOSS) && + ent->hd.pkt_num != strm->tx.last_lost_pkt_num) { + strm->tx.last_lost_pkt_num = ent->hd.pkt_num; + ++strm->tx.loss_count; } - rv = ngtcp2_frame_chain_stream_datacnt_new(&nfrc, fr->stream.datacnt, - rtb->mem); + rv = ngtcp2_frame_chain_stream_datacnt_objalloc_new( + &nfrc, fr->stream.datacnt, rtb->frc_objalloc, rtb->mem); if (rv != 0) { return rv; } @@ -349,9 +487,10 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, ngtcp2_conn *conn, ngtcp2_vec_copy(nfrc->fr.stream.data, fr->stream.data, fr->stream.datacnt); + streamfrq_empty = ngtcp2_strm_streamfrq_empty(strm); rv = ngtcp2_strm_streamfrq_push(strm, nfrc); if (rv != 0) { - ngtcp2_frame_chain_del(nfrc, conn->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, rtb->frc_objalloc, rtb->mem); return rv; } if (!ngtcp2_strm_is_tx_queued(strm)) { @@ -361,6 +500,9 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, ngtcp2_conn *conn, return rv; } } + if (streamfrq_empty) { + ++conn->tx.strmq_nretrans; + } ++num_reclaimed; @@ -378,8 +520,8 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, ngtcp2_conn *conn, continue; } - rv = ngtcp2_frame_chain_crypto_datacnt_new(&nfrc, fr->crypto.datacnt, - rtb->mem); + rv = ngtcp2_frame_chain_crypto_datacnt_objalloc_new( + &nfrc, fr->crypto.datacnt, rtb->frc_objalloc, rtb->mem); if (rv != 0) { return rv; } @@ -392,7 +534,7 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, ngtcp2_conn *conn, &nfrc->fr.crypto.offset, nfrc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(nfrc, conn->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, rtb->frc_objalloc, rtb->mem); return rv; } @@ -400,8 +542,8 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, ngtcp2_conn *conn, continue; case NGTCP2_FRAME_NEW_TOKEN: - rv = ngtcp2_frame_chain_new_token_new(&nfrc, &fr->new_token.token, - rtb->mem); + rv = ngtcp2_frame_chain_new_token_objalloc_new( + &nfrc, &fr->new_token.token, rtb->frc_objalloc, rtb->mem); if (rv != 0) { return rv; } @@ -412,8 +554,11 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, ngtcp2_conn *conn, } break; + case NGTCP2_FRAME_DATAGRAM: + case NGTCP2_FRAME_DATAGRAM_LEN: + continue; default: - rv = ngtcp2_frame_chain_new(&nfrc, rtb->mem); + rv = ngtcp2_frame_chain_objalloc_new(&nfrc, rtb->frc_objalloc); if (rv != 0) { return rv; } @@ -438,11 +583,41 @@ static ngtcp2_ssize rtb_reclaim_frame(ngtcp2_rtb *rtb, ngtcp2_conn *conn, return (ngtcp2_ssize)num_reclaimed; } +/* + * conn_process_lost_datagram calls ngtcp2_lost_datagram callback for + * lost DATAGRAM frames. + */ +static int conn_process_lost_datagram(ngtcp2_conn *conn, + ngtcp2_rtb_entry *ent) { + ngtcp2_frame_chain *frc; + int rv; + + for (frc = ent->frc; frc; frc = frc->next) { + switch (frc->fr.type) { + case NGTCP2_FRAME_DATAGRAM: + case NGTCP2_FRAME_DATAGRAM_LEN: + assert(conn->callbacks.lost_datagram); + + rv = conn->callbacks.lost_datagram(conn, frc->fr.datagram.dgram_id, + conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + break; + } + } + + return 0; +} + static int rtb_on_pkt_lost(ngtcp2_rtb *rtb, ngtcp2_ksl_it *it, - ngtcp2_rtb_entry *ent, ngtcp2_conn *conn, - ngtcp2_pktns *pktns, ngtcp2_tstamp ts) { + ngtcp2_rtb_entry *ent, ngtcp2_conn_stat *cstat, + ngtcp2_conn *conn, ngtcp2_pktns *pktns, + ngtcp2_tstamp ts) { int rv; ngtcp2_ssize reclaimed; + ngtcp2_cc *cc = rtb->cc; + ngtcp2_cc_pkt pkt; ngtcp2_log_pkt_lost(rtb->log, ent->hd.pkt_num, ent->hd.type, ent->hd.flags, ent->ts); @@ -451,55 +626,60 @@ static int rtb_on_pkt_lost(ngtcp2_rtb *rtb, ngtcp2_ksl_it *it, ngtcp2_qlog_pkt_lost(rtb->qlog, ent); } - if (!(ent->flags & NGTCP2_RTB_ENTRY_FLAG_PROBE)) { - if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PTO_RECLAIMED) { - ngtcp2_log_info(rtb->log, NGTCP2_LOG_EVENT_RCV, - "pkn=%" PRId64 " has already been reclaimed on PTO", - ent->hd.pkt_num); - assert(!(ent->flags & NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED)); - assert(UINT64_MAX == ent->lost_ts); - - ent->flags |= NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED; - ent->lost_ts = ts; - - ++rtb->num_lost_pkts; + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE) { + ++rtb->num_lost_pmtud_pkts; + } else if (rtb->cc->on_pkt_lost) { + cc->on_pkt_lost(cc, cstat, + ngtcp2_cc_pkt_init(&pkt, ent->hd.pkt_num, ent->pktlen, + rtb->pktns_id, ent->ts, ent->rst.lost, + ent->rst.tx_in_flight, + ent->rst.is_app_limited), + ts); + } - ngtcp2_ksl_it_next(it); + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PTO_RECLAIMED) { + ngtcp2_log_info(rtb->log, NGTCP2_LOG_EVENT_RCV, + "pkn=%" PRId64 " has already been reclaimed on PTO", + ent->hd.pkt_num); + assert(!(ent->flags & NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED)); + assert(UINT64_MAX == ent->lost_ts); - return 0; - } + ent->flags |= NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED; + ent->lost_ts = ts; - if (ent->frc) { - assert(!(ent->flags & NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED)); - assert(UINT64_MAX == ent->lost_ts); + ++rtb->num_lost_pkts; - reclaimed = rtb_reclaim_frame(rtb, conn, pktns, ent); - if (reclaimed < 0) { - return (int)reclaimed; - } + ngtcp2_ksl_it_next(it); - if (reclaimed) { - ent->flags |= NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED; - ent->lost_ts = ts; + return 0; + } - ++rtb->num_lost_pkts; + if (conn->callbacks.lost_datagram && + (ent->flags & NGTCP2_RTB_ENTRY_FLAG_DATAGRAM)) { + rv = conn_process_lost_datagram(conn, ent); + if (rv != 0) { + return rv; + } + } - ngtcp2_ksl_it_next(it); + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE) { + assert(ent->frc); + assert(!(ent->flags & NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED)); + assert(UINT64_MAX == ent->lost_ts); - return 0; - } + reclaimed = + rtb_reclaim_frame(rtb, NGTCP2_RECLAIM_FLAG_ON_LOSS, conn, pktns, ent); + if (reclaimed < 0) { + return (int)reclaimed; } - } else { - ngtcp2_log_info(rtb->log, NGTCP2_LOG_EVENT_RCV, - "pkn=%" PRId64 - " is a probe packet, no retransmission is necessary", - ent->hd.pkt_num); } - rv = ngtcp2_ksl_remove(&rtb->ents, it, &ent->hd.pkt_num); - assert(0 == rv); + ent->flags |= NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED; + ent->lost_ts = ts; - ngtcp2_rtb_entry_del(ent, rtb->mem); + ++rtb->num_lost_pkts; + + ngtcp2_ksl_it_next(it); return 0; } @@ -526,7 +706,9 @@ static void rtb_remove(ngtcp2_rtb *rtb, ngtcp2_ksl_it *it, ngtcp2_rtb_entry **pent, ngtcp2_rtb_entry *ent, ngtcp2_conn_stat *cstat) { int rv; - rv = ngtcp2_ksl_remove(&rtb->ents, it, &ent->hd.pkt_num); + (void)rv; + + rv = ngtcp2_ksl_remove_hint(&rtb->ents, it, it, &ent->hd.pkt_num); assert(0 == rv); rtb_on_remove(rtb, ent, cstat); @@ -535,6 +717,35 @@ static void rtb_remove(ngtcp2_rtb *rtb, ngtcp2_ksl_it *it, ngtcp2_list_insert(ent, pent); } +static void conn_ack_crypto_data(ngtcp2_conn *conn, ngtcp2_pktns *pktns, + uint64_t datalen) { + ngtcp2_buf_chain **pbufchain, *bufchain; + size_t left; + + for (pbufchain = &pktns->crypto.tx.data; *pbufchain;) { + left = ngtcp2_buf_len(&(*pbufchain)->buf); + if (left > datalen) { + (*pbufchain)->buf.pos += datalen; + return; + } + + bufchain = *pbufchain; + *pbufchain = bufchain->next; + + ngtcp2_mem_free(conn->mem, bufchain); + + datalen -= left; + + if (datalen == 0) { + return; + } + } + + assert(datalen == 0); + + return; +} + static int rtb_process_acked_pkt(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, ngtcp2_conn *conn) { ngtcp2_frame_chain *frc; @@ -543,7 +754,19 @@ static int rtb_process_acked_pkt(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, int rv; uint64_t datalen; ngtcp2_strm *crypto = rtb->crypto; - ngtcp2_crypto_level crypto_level; + ngtcp2_pktns *pktns = NULL; + + if ((ent->flags & NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE) && conn->pmtud && + conn->pmtud->tx_pkt_num <= ent->hd.pkt_num) { + ngtcp2_pmtud_probe_success(conn->pmtud, ent->pktlen); + + conn->dcid.current.max_udp_payload_size = + ngtcp2_max(conn->dcid.current.max_udp_payload_size, ent->pktlen); + + if (ngtcp2_pmtud_finished(conn->pmtud)) { + ngtcp2_conn_stop_pmtud(conn); + } + } for (frc = ent->frc; frc; frc = frc->next) { if (frc->binder) { @@ -557,6 +780,8 @@ static int rtb_process_acked_pkt(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, break; } + strm->flags |= NGTCP2_STRM_FLAG_ANY_ACKED; + if (frc->fr.stream.fin) { strm->flags |= NGTCP2_STRM_FLAG_FIN_ACKED; } @@ -584,7 +809,7 @@ static int rtb_process_acked_pkt(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, } } - rv = ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm, NGTCP2_NO_ERROR); + rv = ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm); if (rv != 0) { return rv; } @@ -598,33 +823,28 @@ static int rtb_process_acked_pkt(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, return rv; } - if (conn->callbacks.acked_crypto_offset) { - stream_offset = ngtcp2_strm_get_acked_offset(crypto); - datalen = stream_offset - prev_stream_offset; - if (datalen == 0) { - break; - } - - switch (rtb->pktns_id) { - case NGTCP2_PKTNS_ID_INITIAL: - crypto_level = NGTCP2_CRYPTO_LEVEL_INITIAL; - break; - case NGTCP2_PKTNS_ID_HANDSHAKE: - crypto_level = NGTCP2_CRYPTO_LEVEL_HANDSHAKE; - break; - case NGTCP2_PKTNS_ID_APPLICATION: - crypto_level = NGTCP2_CRYPTO_LEVEL_APPLICATION; - break; - default: - assert(0); - } + stream_offset = ngtcp2_strm_get_acked_offset(crypto); + datalen = stream_offset - prev_stream_offset; + if (datalen == 0) { + break; + } - rv = conn->callbacks.acked_crypto_offset( - conn, crypto_level, prev_stream_offset, datalen, conn->user_data); - if (rv != 0) { - return NGTCP2_ERR_CALLBACK_FAILURE; - } + switch (rtb->pktns_id) { + case NGTCP2_PKTNS_ID_INITIAL: + pktns = conn->in_pktns; + break; + case NGTCP2_PKTNS_ID_HANDSHAKE: + pktns = conn->hs_pktns; + break; + case NGTCP2_PKTNS_ID_APPLICATION: + pktns = &conn->pktns; + break; + default: + assert(0); } + + conn_ack_crypto_data(conn, pktns, datalen); + break; case NGTCP2_FRAME_RESET_STREAM: strm = ngtcp2_conn_find_stream(conn, frc->fr.reset_stream.stream_id); @@ -632,14 +852,26 @@ static int rtb_process_acked_pkt(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, break; } strm->flags |= NGTCP2_STRM_FLAG_RST_ACKED; - rv = ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm, NGTCP2_NO_ERROR); + rv = ngtcp2_conn_close_stream_if_shut_rdwr(conn, strm); if (rv != 0) { return rv; } break; case NGTCP2_FRAME_RETIRE_CONNECTION_ID: - assert(conn->dcid.num_retire_queued); - --conn->dcid.num_retire_queued; + ngtcp2_conn_untrack_retired_dcid_seq(conn, + frc->fr.retire_connection_id.seq); + break; + case NGTCP2_FRAME_DATAGRAM: + case NGTCP2_FRAME_DATAGRAM_LEN: + if (!conn->callbacks.ack_datagram) { + break; + } + + rv = conn->callbacks.ack_datagram(conn, frc->fr.datagram.dgram_id, + conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } break; } } @@ -655,7 +887,9 @@ static void rtb_on_pkt_acked(ngtcp2_rtb *rtb, ngtcp2_rtb_entry *ent, cc->on_pkt_acked(cc, cstat, ngtcp2_cc_pkt_init(&pkt, ent->hd.pkt_num, ent->pktlen, - rtb->pktns_id, ent->ts), + rtb->pktns_id, ent->ts, ent->rst.lost, + ent->rst.tx_in_flight, + ent->rst.is_app_limited), ts); if (!(ent->flags & NGTCP2_RTB_ENTRY_FLAG_PROBE) && @@ -705,6 +939,10 @@ static void conn_verify_ecn(ngtcp2_conn *conn, ngtcp2_pktns *pktns, } } +static int rtb_detect_lost_pkt(ngtcp2_rtb *rtb, uint64_t *ppkt_lost, + ngtcp2_conn *conn, ngtcp2_pktns *pktns, + ngtcp2_conn_stat *cstat, ngtcp2_tstamp ts); + ngtcp2_ssize ngtcp2_rtb_recv_ack(ngtcp2_rtb *rtb, const ngtcp2_ack *fr, ngtcp2_conn_stat *cstat, ngtcp2_conn *conn, ngtcp2_pktns *pktns, ngtcp2_tstamp pkt_ts, @@ -723,10 +961,17 @@ ngtcp2_ssize ngtcp2_rtb_recv_ack(ngtcp2_rtb *rtb, const ngtcp2_ack *fr, int ack_eliciting_pkt_acked = 0; size_t ecn_acked = 0; int verify_ecn = 0; + ngtcp2_cc_ack cc_ack = {0}; + size_t num_lost_pkts = rtb->num_lost_pkts - rtb->num_lost_pmtud_pkts; + + cc_ack.prior_bytes_in_flight = cstat->bytes_in_flight; + cc_ack.rtt = UINT64_MAX; if (conn && (conn->flags & NGTCP2_CONN_FLAG_KEY_UPDATE_NOT_CONFIRMED) && + (conn->flags & NGTCP2_CONN_FLAG_KEY_UPDATE_INITIATOR) && largest_ack >= conn->pktns.crypto.tx.ckm->pkt_num) { - conn->flags &= (uint16_t)~NGTCP2_CONN_FLAG_KEY_UPDATE_NOT_CONFIRMED; + conn->flags &= (uint32_t) ~(NGTCP2_CONN_FLAG_KEY_UPDATE_NOT_CONFIRMED | + NGTCP2_CONN_FLAG_KEY_UPDATE_INITIATOR); conn->crypto.key_update.confirmed_ts = ts; ngtcp2_log_info(rtb->log, NGTCP2_LOG_EVENT_CRY, "key update confirmed"); @@ -740,7 +985,7 @@ ngtcp2_ssize ngtcp2_rtb_recv_ack(ngtcp2_rtb *rtb, const ngtcp2_ack *fr, /* Assume that ngtcp2_pkt_validate_ack(fr) returns 0 */ it = ngtcp2_ksl_lower_bound(&rtb->ents, &largest_ack); if (ngtcp2_ksl_it_end(&it)) { - if (verify_ecn) { + if (conn && verify_ecn) { conn_verify_ecn(conn, pktns, rtb->cc, cstat, fr, ecn_acked, largest_acked_sent_ts, ts); } @@ -800,15 +1045,14 @@ ngtcp2_ssize ngtcp2_rtb_recv_ack(ngtcp2_rtb *rtb, const ngtcp2_ack *fr, } if (largest_pkt_sent_ts != UINT64_MAX && ack_eliciting_pkt_acked) { - ngtcp2_conn_update_rtt(conn, pkt_ts - largest_pkt_sent_ts, - fr->ack_delay_unscaled, ts); - if (cc->new_rtt_sample) { + cc_ack.rtt = pkt_ts - largest_pkt_sent_ts; + + rv = ngtcp2_conn_update_rtt(conn, cc_ack.rtt, fr->ack_delay_unscaled, ts); + if (rv == 0 && cc->new_rtt_sample) { cc->new_rtt_sample(cc, cstat, ts); } } - ngtcp2_rst_on_ack_recv(rtb->rst, cstat); - if (conn) { for (ent = acked_ent; ent; ent = acked_ent) { if (ent->hd.pkt_num >= pktns->tx.ecn.start_pkt_num && @@ -826,9 +1070,17 @@ ngtcp2_ssize ngtcp2_rtb_recv_ack(ngtcp2_rtb *rtb, const ngtcp2_ack *fr, goto fail; } + if (ent->hd.pkt_num >= rtb->cc_pkt_num) { + assert(cc_ack.pkt_delivered <= ent->rst.delivered); + + cc_ack.bytes_delivered += ent->pktlen; + cc_ack.pkt_delivered = ent->rst.delivered; + } + rtb_on_pkt_acked(rtb, ent, cstat, ts); acked_ent = ent->next; - ngtcp2_rtb_entry_del(ent, rtb->mem); + ngtcp2_rtb_entry_objalloc_del(ent, rtb->rtb_entry_objalloc, + rtb->frc_objalloc, rtb->mem); } if (verify_ecn) { @@ -840,29 +1092,48 @@ ngtcp2_ssize ngtcp2_rtb_recv_ack(ngtcp2_rtb *rtb, const ngtcp2_ack *fr, for (ent = acked_ent; ent; ent = acked_ent) { rtb_on_pkt_acked(rtb, ent, cstat, ts); acked_ent = ent->next; - ngtcp2_rtb_entry_del(ent, rtb->mem); + ngtcp2_rtb_entry_objalloc_del(ent, rtb->rtb_entry_objalloc, + rtb->frc_objalloc, rtb->mem); + } + } + + if (rtb->cc->on_spurious_congestion && num_lost_pkts && + rtb->num_lost_pkts - rtb->num_lost_pmtud_pkts == 0) { + rtb->cc->on_spurious_congestion(cc, cstat, ts); + } + + ngtcp2_rst_on_ack_recv(rtb->rst, cstat, cc_ack.pkt_delivered); + + if (conn && num_acked > 0) { + rv = rtb_detect_lost_pkt(rtb, &cc_ack.bytes_lost, conn, pktns, cstat, ts); + if (rv != 0) { + return rv; } } - cc->on_ack_recv(cc, cstat, ts); + rtb->rst->lost += cc_ack.bytes_lost; + + cc_ack.largest_acked_sent_ts = largest_acked_sent_ts; + cc->on_ack_recv(cc, cstat, &cc_ack, ts); return num_acked; fail: for (ent = acked_ent; ent; ent = acked_ent) { acked_ent = ent->next; - ngtcp2_rtb_entry_del(ent, rtb->mem); + ngtcp2_rtb_entry_objalloc_del(ent, rtb->rtb_entry_objalloc, + rtb->frc_objalloc, rtb->mem); } return rv; } static int rtb_pkt_lost(ngtcp2_rtb *rtb, ngtcp2_conn_stat *cstat, - const ngtcp2_rtb_entry *ent, uint64_t loss_delay, - ngtcp2_tstamp lost_send_time, uint64_t pkt_thres) { + const ngtcp2_rtb_entry *ent, ngtcp2_duration loss_delay, + size_t pkt_thres, ngtcp2_tstamp ts) { ngtcp2_tstamp loss_time; - if (ent->ts <= lost_send_time || + if (ent->ts + loss_delay <= ts || rtb->largest_acked_tx_pkt_num >= ent->hd.pkt_num + (int64_t)pkt_thres) { return 1; } @@ -906,12 +1177,11 @@ static int conn_all_ecn_pkt_lost(ngtcp2_conn *conn) { pktns->tx.ecn.validation_pkt_sent == pktns->tx.ecn.validation_pkt_lost; } -int ngtcp2_rtb_detect_lost_pkt(ngtcp2_rtb *rtb, ngtcp2_conn *conn, - ngtcp2_pktns *pktns, ngtcp2_conn_stat *cstat, - ngtcp2_duration pto, ngtcp2_tstamp ts) { +static int rtb_detect_lost_pkt(ngtcp2_rtb *rtb, uint64_t *ppkt_lost, + ngtcp2_conn *conn, ngtcp2_pktns *pktns, + ngtcp2_conn_stat *cstat, ngtcp2_tstamp ts) { ngtcp2_rtb_entry *ent; ngtcp2_duration loss_delay; - ngtcp2_tstamp lost_send_time; ngtcp2_ksl_it it; ngtcp2_tstamp latest_ts, oldest_ts; int64_t last_lost_pkt_num; @@ -922,11 +1192,14 @@ int ngtcp2_rtb_detect_lost_pkt(ngtcp2_rtb *rtb, ngtcp2_conn *conn, rtb->cc_bytes_in_flight / cstat->max_udp_payload_size / 2; size_t ecn_pkt_lost = 0; ngtcp2_tstamp start_ts; + ngtcp2_duration pto = ngtcp2_conn_compute_pto(conn, pktns); + uint64_t bytes_lost = 0; + ngtcp2_duration max_ack_delay; pkt_thres = ngtcp2_max(pkt_thres, NGTCP2_PKT_THRESHOLD); + pkt_thres = ngtcp2_min(pkt_thres, 256); cstat->loss_time[rtb->pktns_id] = UINT64_MAX; loss_delay = compute_pkt_loss_delay(cstat); - lost_send_time = ts - loss_delay; it = ngtcp2_ksl_lower_bound(&rtb->ents, &rtb->largest_acked_tx_pkt_num); for (; !ngtcp2_ksl_it_end(&it); ngtcp2_ksl_it_next(&it)) { @@ -936,15 +1209,18 @@ int ngtcp2_rtb_detect_lost_pkt(ngtcp2_rtb *rtb, ngtcp2_conn *conn, break; } - if (rtb_pkt_lost(rtb, cstat, ent, loss_delay, lost_send_time, pkt_thres)) { + if (rtb_pkt_lost(rtb, cstat, ent, loss_delay, (size_t)pkt_thres, ts)) { /* All entries from ent are considered to be lost. */ latest_ts = oldest_ts = ent->ts; last_lost_pkt_num = ent->hd.pkt_num; + max_ack_delay = conn->remote.transport_params + ? conn->remote.transport_params->max_ack_delay + : 0; - congestion_period = (cstat->smoothed_rtt + - ngtcp2_max(4 * cstat->rttvar, NGTCP2_GRANULARITY) + - conn->remote.transport_params.max_ack_delay) * - NGTCP2_PERSISTENT_CONGESTION_THRESHOLD; + congestion_period = + (cstat->smoothed_rtt + + ngtcp2_max(4 * cstat->rttvar, NGTCP2_GRANULARITY) + max_ack_delay) * + NGTCP2_PERSISTENT_CONGESTION_THRESHOLD; start_ts = ngtcp2_max(rtb->persistent_congestion_start_ts, cstat->first_rtt_sample_ts); @@ -974,13 +1250,19 @@ int ngtcp2_rtb_detect_lost_pkt(ngtcp2_rtb *rtb, ngtcp2_conn *conn, ++ecn_pkt_lost; } - rtb_on_remove(rtb, ent, cstat); - rv = rtb_on_pkt_lost(rtb, &it, ent, conn, pktns, ts); + bytes_lost += rtb_on_remove(rtb, ent, cstat); + rv = rtb_on_pkt_lost(rtb, &it, ent, cstat, conn, pktns, ts); if (rv != 0) { return rv; } } + /* If only PMTUD packets are lost, do not trigger congestion + event. */ + if (bytes_lost == 0) { + break; + } + switch (conn->tx.ecn.state) { case NGTCP2_ECN_STATE_TESTING: if (conn->tx.ecn.validation_start_ts == UINT64_MAX) { @@ -1038,15 +1320,27 @@ int ngtcp2_rtb_detect_lost_pkt(ngtcp2_rtb *rtb, ngtcp2_conn *conn, } } - ngtcp2_rtb_remove_excessive_lost_pkt(rtb, pkt_thres); + ngtcp2_rtb_remove_excessive_lost_pkt(rtb, (size_t)pkt_thres); + + if (ppkt_lost) { + *ppkt_lost = bytes_lost; + } return 0; } +int ngtcp2_rtb_detect_lost_pkt(ngtcp2_rtb *rtb, ngtcp2_conn *conn, + ngtcp2_pktns *pktns, ngtcp2_conn_stat *cstat, + ngtcp2_tstamp ts) { + return rtb_detect_lost_pkt(rtb, /* ppkt_lost = */ NULL, conn, pktns, cstat, + ts); +} + void ngtcp2_rtb_remove_excessive_lost_pkt(ngtcp2_rtb *rtb, size_t n) { ngtcp2_ksl_it it = ngtcp2_ksl_end(&rtb->ents); ngtcp2_rtb_entry *ent; int rv; + (void)rv; for (; rtb->num_lost_pkts > n;) { assert(ngtcp2_ksl_it_end(&it)); @@ -1059,9 +1353,15 @@ void ngtcp2_rtb_remove_excessive_lost_pkt(ngtcp2_rtb *rtb, size_t n) { "removing stale lost pkn=%" PRId64, ent->hd.pkt_num); --rtb->num_lost_pkts; - rv = ngtcp2_ksl_remove(&rtb->ents, &it, &ent->hd.pkt_num); + + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE) { + --rtb->num_lost_pmtud_pkts; + } + + rv = ngtcp2_ksl_remove_hint(&rtb->ents, &it, &it, &ent->hd.pkt_num); assert(0 == rv); - ngtcp2_rtb_entry_del(ent, rtb->mem); + ngtcp2_rtb_entry_objalloc_del(ent, rtb->rtb_entry_objalloc, + rtb->frc_objalloc, rtb->mem); } } @@ -1070,6 +1370,7 @@ void ngtcp2_rtb_remove_expired_lost_pkt(ngtcp2_rtb *rtb, ngtcp2_duration pto, ngtcp2_ksl_it it; ngtcp2_rtb_entry *ent; int rv; + (void)rv; if (ngtcp2_ksl_len(&rtb->ents) == 0) { return; @@ -1092,9 +1393,15 @@ void ngtcp2_rtb_remove_expired_lost_pkt(ngtcp2_rtb *rtb, ngtcp2_duration pto, "removing stale lost pkn=%" PRId64, ent->hd.pkt_num); --rtb->num_lost_pkts; - rv = ngtcp2_ksl_remove(&rtb->ents, &it, &ent->hd.pkt_num); + + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE) { + --rtb->num_lost_pmtud_pkts; + } + + rv = ngtcp2_ksl_remove_hint(&rtb->ents, &it, &it, &ent->hd.pkt_num); assert(0 == rv); - ngtcp2_rtb_entry_del(ent, rtb->mem); + ngtcp2_rtb_entry_objalloc_del(ent, rtb->rtb_entry_objalloc, + rtb->frc_objalloc, rtb->mem); if (ngtcp2_ksl_len(&rtb->ents) == 0) { return; @@ -1128,6 +1435,7 @@ static int rtb_on_pkt_lost_resched_move(ngtcp2_rtb *rtb, ngtcp2_conn *conn, ngtcp2_stream *sfr; ngtcp2_strm *strm; int rv; + int streamfrq_empty; ngtcp2_log_pkt_lost(rtb->log, ent->hd.pkt_num, ent->hd.type, ent->hd.flags, ent->ts); @@ -1144,19 +1452,21 @@ static int rtb_on_pkt_lost_resched_move(ngtcp2_rtb *rtb, ngtcp2_conn *conn, return 0; } - if (!ent->frc) { - /* PADDING only (or PADDING + ACK ) packets will have NULL - ent->frc. */ - assert(!(ent->flags & NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED)); - assert(!(ent->flags & NGTCP2_RTB_ENTRY_FLAG_PTO_RECLAIMED)); + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE) { + ngtcp2_log_info(rtb->log, NGTCP2_LOG_EVENT_RCV, + "pkn=%" PRId64 + " is a PMTUD probe packet, no retransmission is necessary", + ent->hd.pkt_num); return 0; } if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED) { --rtb->num_lost_pkts; - } - if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED) { + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE) { + --rtb->num_lost_pmtud_pkts; + } + ngtcp2_log_info(rtb->log, NGTCP2_LOG_EVENT_RCV, "pkn=%" PRId64 " was declared lost and has already been retransmitted", @@ -1171,6 +1481,14 @@ static int rtb_on_pkt_lost_resched_move(ngtcp2_rtb *rtb, ngtcp2_conn *conn, return 0; } + if (!(ent->flags & NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE) && + (!(ent->flags & NGTCP2_RTB_ENTRY_FLAG_DATAGRAM) || + !conn->callbacks.lost_datagram)) { + /* PADDING only (or PADDING + ACK ) packets will have NULL + ent->frc. */ + return 0; + } + pfrc = &ent->frc; for (; *pfrc;) { @@ -1184,12 +1502,13 @@ static int rtb_on_pkt_lost_resched_move(ngtcp2_rtb *rtb, ngtcp2_conn *conn, strm = ngtcp2_conn_find_stream(conn, sfr->stream_id); if (!strm) { - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, rtb->frc_objalloc, rtb->mem); break; } + streamfrq_empty = ngtcp2_strm_streamfrq_empty(strm); rv = ngtcp2_strm_streamfrq_push(strm, frc); if (rv != 0) { - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, rtb->frc_objalloc, rtb->mem); return rv; } if (!ngtcp2_strm_is_tx_queued(strm)) { @@ -1199,6 +1518,9 @@ static int rtb_on_pkt_lost_resched_move(ngtcp2_rtb *rtb, ngtcp2_conn *conn, return rv; } } + if (streamfrq_empty) { + ++conn->tx.strmq_nretrans; + } break; case NGTCP2_FRAME_CRYPTO: frc = *pfrc; @@ -1210,10 +1532,26 @@ static int rtb_on_pkt_lost_resched_move(ngtcp2_rtb *rtb, ngtcp2_conn *conn, &frc->fr.crypto.offset, frc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(frc, conn->mem); + ngtcp2_frame_chain_objalloc_del(frc, rtb->frc_objalloc, rtb->mem); return rv; } break; + case NGTCP2_FRAME_DATAGRAM: + case NGTCP2_FRAME_DATAGRAM_LEN: + frc = *pfrc; + + if (conn->callbacks.lost_datagram) { + rv = conn->callbacks.lost_datagram(conn, frc->fr.datagram.dgram_id, + conn->user_data); + if (rv != 0) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + } + + *pfrc = (*pfrc)->next; + + ngtcp2_frame_chain_objalloc_del(frc, rtb->frc_objalloc, rtb->mem); + break; default: pfrc = &(*pfrc)->next; } @@ -1238,11 +1576,12 @@ int ngtcp2_rtb_remove_all(ngtcp2_rtb *rtb, ngtcp2_conn *conn, ent = ngtcp2_ksl_it_get(&it); rtb_on_remove(rtb, ent, cstat); - rv = ngtcp2_ksl_remove(&rtb->ents, &it, &ent->hd.pkt_num); + rv = ngtcp2_ksl_remove_hint(&rtb->ents, &it, &it, &ent->hd.pkt_num); assert(0 == rv); rv = rtb_on_pkt_lost_resched_move(rtb, conn, pktns, ent); - ngtcp2_rtb_entry_del(ent, rtb->mem); + ngtcp2_rtb_entry_objalloc_del(ent, rtb->rtb_entry_objalloc, + rtb->frc_objalloc, rtb->mem); if (rv != 0) { return rv; } @@ -1251,6 +1590,31 @@ int ngtcp2_rtb_remove_all(ngtcp2_rtb *rtb, ngtcp2_conn *conn, return 0; } +void ngtcp2_rtb_remove_early_data(ngtcp2_rtb *rtb, ngtcp2_conn_stat *cstat) { + ngtcp2_rtb_entry *ent; + ngtcp2_ksl_it it; + int rv; + (void)rv; + + it = ngtcp2_ksl_begin(&rtb->ents); + + for (; !ngtcp2_ksl_it_end(&it);) { + ent = ngtcp2_ksl_it_get(&it); + + if (ent->hd.type != NGTCP2_PKT_0RTT) { + ngtcp2_ksl_it_next(&it); + continue; + } + + rtb_on_remove(rtb, ent, cstat); + rv = ngtcp2_ksl_remove_hint(&rtb->ents, &it, &it, &ent->hd.pkt_num); + assert(0 == rv); + + ngtcp2_rtb_entry_objalloc_del(ent, rtb->rtb_entry_objalloc, + rtb->frc_objalloc, rtb->mem); + } +} + int ngtcp2_rtb_empty(ngtcp2_rtb *rtb) { return ngtcp2_ksl_len(&rtb->ents) == 0; } @@ -1280,7 +1644,8 @@ ngtcp2_ssize ngtcp2_rtb_reclaim_on_pto(ngtcp2_rtb *rtb, ngtcp2_conn *conn, assert(ent->frc); - reclaimed = rtb_reclaim_frame(rtb, conn, pktns, ent); + reclaimed = + rtb_reclaim_frame(rtb, NGTCP2_RECLAIM_FLAG_NONE, conn, pktns, ent); if (reclaimed < 0) { return reclaimed; } @@ -1292,6 +1657,12 @@ ngtcp2_ssize ngtcp2_rtb_reclaim_on_pto(ngtcp2_rtb *rtb, ngtcp2_conn *conn, assert(rtb->num_retransmittable); --rtb->num_retransmittable; + if (ent->flags & NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING) { + ent->flags &= (uint16_t)~NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING; + assert(rtb->num_pto_eliciting); + --rtb->num_pto_eliciting; + } + if (reclaimed) { --num_pkts; } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.h index 70f43ffd924..a97805dbaf3 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_rtb.h @@ -34,6 +34,7 @@ #include "ngtcp2_pkt.h" #include "ngtcp2_ksl.h" #include "ngtcp2_pq.h" +#include "ngtcp2_objalloc.h" typedef struct ngtcp2_conn ngtcp2_conn; typedef struct ngtcp2_pktns ngtcp2_pktns; @@ -41,13 +42,14 @@ typedef struct ngtcp2_log ngtcp2_log; typedef struct ngtcp2_qlog ngtcp2_qlog; typedef struct ngtcp2_strm ngtcp2_strm; typedef struct ngtcp2_rst ngtcp2_rst; +typedef struct ngtcp2_cc ngtcp2_cc; /* NGTCP2_FRAME_CHAIN_BINDER_FLAG_NONE indicates that no flag is set. */ -#define NGTCP2_FRAME_CHAIN_BINDER_FLAG_NONE 0x00 +#define NGTCP2_FRAME_CHAIN_BINDER_FLAG_NONE 0x00u /* NGTCP2_FRAME_CHAIN_BINDER_FLAG_ACK indicates that an information which a frame carries has been acknowledged. */ -#define NGTCP2_FRAME_CHAIN_BINDER_FLAG_ACK 0x01 +#define NGTCP2_FRAME_CHAIN_BINDER_FLAG_ACK 0x01u /* * ngtcp2_frame_chain_binder binds 2 or more of ngtcp2_frame_chain to @@ -71,11 +73,19 @@ typedef struct ngtcp2_frame_chain ngtcp2_frame_chain; * ngtcp2_frame_chain chains frames in a single packet. */ struct ngtcp2_frame_chain { - ngtcp2_frame_chain *next; - ngtcp2_frame_chain_binder *binder; - ngtcp2_frame fr; + union { + struct { + ngtcp2_frame_chain *next; + ngtcp2_frame_chain_binder *binder; + ngtcp2_frame fr; + }; + + ngtcp2_opl_entry oplent; + }; }; +ngtcp2_objalloc_def(frame_chain, ngtcp2_frame_chain, oplent); + /* * ngtcp2_bind_frame_chains binds two frame chains |a| and |b| using * new or existing ngtcp2_frame_chain_binder. |a| might have non-NULL @@ -110,6 +120,13 @@ int ngtcp2_bind_frame_chains(ngtcp2_frame_chain *a, ngtcp2_frame_chain *b, */ int ngtcp2_frame_chain_new(ngtcp2_frame_chain **pfrc, const ngtcp2_mem *mem); +/* + * ngtcp2_frame_chain_objalloc_new behaves like + * ngtcp2_frame_chain_new, but it uses |objalloc| to allocate the object. + */ +int ngtcp2_frame_chain_objalloc_new(ngtcp2_frame_chain **pfrc, + ngtcp2_objalloc *objalloc); + /* * ngtcp2_frame_chain_extralen_new works like ngtcp2_frame_chain_new, * but it allocates extra memory |extralen| in order to extend @@ -119,30 +136,33 @@ int ngtcp2_frame_chain_extralen_new(ngtcp2_frame_chain **pfrc, size_t extralen, const ngtcp2_mem *mem); /* - * ngtcp2_frame_chain_stream_datacnt_new works like + * ngtcp2_frame_chain_stream_datacnt_objalloc_new works like * ngtcp2_frame_chain_new, but it allocates enough data to store * additional |datacnt| - 1 ngtcp2_vec object after ngtcp2_stream - * object. If |datacnt| equals to 1, ngtcp2_frame_chain_new is called - * internally. + * object. If no additional space is required, + * ngtcp2_frame_chain_objalloc_new is called internally. */ -int ngtcp2_frame_chain_stream_datacnt_new(ngtcp2_frame_chain **pfrc, - size_t datacnt, - const ngtcp2_mem *mem); +int ngtcp2_frame_chain_stream_datacnt_objalloc_new(ngtcp2_frame_chain **pfrc, + size_t datacnt, + ngtcp2_objalloc *objalloc, + const ngtcp2_mem *mem); /* - * ngtcp2_frame_chain_crypto_datacnt_new works like + * ngtcp2_frame_chain_crypto_datacnt_objalloc_new works like * ngtcp2_frame_chain_new, but it allocates enough data to store * additional |datacnt| - 1 ngtcp2_vec object after ngtcp2_crypto - * object. If |datacnt| equals to 1, ngtcp2_frame_chain_new is called - * internally. + * object. If no additional space is required, + * ngtcp2_frame_chain_objalloc_new is called internally. */ -int ngtcp2_frame_chain_crypto_datacnt_new(ngtcp2_frame_chain **pfrc, - size_t datacnt, - const ngtcp2_mem *mem); +int ngtcp2_frame_chain_crypto_datacnt_objalloc_new(ngtcp2_frame_chain **pfrc, + size_t datacnt, + ngtcp2_objalloc *objalloc, + const ngtcp2_mem *mem); -int ngtcp2_frame_chain_new_token_new(ngtcp2_frame_chain **pfrc, - const ngtcp2_vec *token, - const ngtcp2_mem *mem); +int ngtcp2_frame_chain_new_token_objalloc_new(ngtcp2_frame_chain **pfrc, + const ngtcp2_vec *token, + ngtcp2_objalloc *objalloc, + const ngtcp2_mem *mem); /* * ngtcp2_frame_chain_del deallocates |frc|. It also deallocates the @@ -150,43 +170,62 @@ int ngtcp2_frame_chain_new_token_new(ngtcp2_frame_chain **pfrc, */ void ngtcp2_frame_chain_del(ngtcp2_frame_chain *frc, const ngtcp2_mem *mem); +/* + * ngtcp2_frame_chain_objalloc_del adds |frc| to |objalloc| for reuse. + * It might just delete |frc| depending on the frame type and the size + * of |frc|. + */ +void ngtcp2_frame_chain_objalloc_del(ngtcp2_frame_chain *frc, + ngtcp2_objalloc *objalloc, + const ngtcp2_mem *mem); + /* * ngtcp2_frame_chain_init initializes |frc|. */ void ngtcp2_frame_chain_init(ngtcp2_frame_chain *frc); /* - * ngtcp2_frame_chain_list_del deletes |frc|, and all objects - * connected by next field. + * ngtcp2_frame_chain_list_objalloc_del adds all ngtcp2_frame_chain + * linked from |frc| to |objalloc| for reuse. Depending on the frame type + * and its size, ngtcp2_frame_chain might be deleted instead. */ -void ngtcp2_frame_chain_list_del(ngtcp2_frame_chain *frc, - const ngtcp2_mem *mem); +void ngtcp2_frame_chain_list_objalloc_del(ngtcp2_frame_chain *frc, + ngtcp2_objalloc *objalloc, + const ngtcp2_mem *mem); /* NGTCP2_RTB_ENTRY_FLAG_NONE indicates that no flag is set. */ -#define NGTCP2_RTB_ENTRY_FLAG_NONE 0x00 +#define NGTCP2_RTB_ENTRY_FLAG_NONE 0x00u /* NGTCP2_RTB_ENTRY_FLAG_PROBE indicates that the entry includes a probe packet. */ -#define NGTCP2_RTB_ENTRY_FLAG_PROBE 0x01 +#define NGTCP2_RTB_ENTRY_FLAG_PROBE 0x01u /* NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE indicates that the entry includes a frame which must be retransmitted until it is acknowledged. In most cases, this flag is used along with - NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING. We have these 2 flags because - NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE triggers PTO, but just - NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING does not. */ -#define NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE 0x02 + NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING and + NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING. */ +#define NGTCP2_RTB_ENTRY_FLAG_RETRANSMITTABLE 0x02u /* NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING indicates that the entry elicits acknowledgement. */ -#define NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING 0x04 +#define NGTCP2_RTB_ENTRY_FLAG_ACK_ELICITING 0x04u /* NGTCP2_RTB_ENTRY_FLAG_PTO_RECLAIMED indicates that the packet has been reclaimed on PTO. It is not marked lost yet and still consumes congestion window. */ -#define NGTCP2_RTB_ENTRY_FLAG_PTO_RECLAIMED 0x08 +#define NGTCP2_RTB_ENTRY_FLAG_PTO_RECLAIMED 0x08u /* NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED indicates that the entry - has been marked lost and scheduled to retransmit. */ -#define NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED 0x10 + has been marked lost and, optionally, scheduled to retransmit. */ +#define NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED 0x10u /* NGTCP2_RTB_ENTRY_FLAG_ECN indicates that the entry is included in a UDP datagram with ECN marking. */ -#define NGTCP2_RTB_ENTRY_FLAG_ECN 0x20 +#define NGTCP2_RTB_ENTRY_FLAG_ECN 0x20u +/* NGTCP2_RTB_ENTRY_FLAG_DATAGRAM indicates that the entry includes + DATAGRAM frame. */ +#define NGTCP2_RTB_ENTRY_FLAG_DATAGRAM 0x40u +/* NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE indicates that the entry includes + a PMTUD probe packet. */ +#define NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE 0x80u +/* NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING indicates that the entry + includes a packet which elicits PTO probe packets. */ +#define NGTCP2_RTB_ENTRY_FLAG_PTO_ELICITING 0x100u typedef struct ngtcp2_rtb_entry ngtcp2_rtb_entry; @@ -195,58 +234,69 @@ typedef struct ngtcp2_rtb_entry ngtcp2_rtb_entry; * to the one packet which is waiting for its ACK. */ struct ngtcp2_rtb_entry { - ngtcp2_rtb_entry *next; - - struct { - int64_t pkt_num; - uint8_t type; - uint8_t flags; - } hd; - ngtcp2_frame_chain *frc; - /* ts is the time point when a packet included in this entry is sent - to a peer. */ - ngtcp2_tstamp ts; - /* lost_ts is the time when this entry is marked lost. */ - ngtcp2_tstamp lost_ts; - /* pktlen is the length of QUIC packet */ - size_t pktlen; - struct { - uint64_t delivered; - ngtcp2_tstamp delivered_ts; - ngtcp2_tstamp first_sent_ts; - int is_app_limited; - } rst; - /* flags is bitwise-OR of zero or more of - NGTCP2_RTB_ENTRY_FLAG_*. */ - uint8_t flags; + union { + struct { + ngtcp2_rtb_entry *next; + + struct { + int64_t pkt_num; + uint8_t type; + uint8_t flags; + } hd; + ngtcp2_frame_chain *frc; + /* ts is the time point when a packet included in this entry is sent + to a peer. */ + ngtcp2_tstamp ts; + /* lost_ts is the time when this entry is marked lost. */ + ngtcp2_tstamp lost_ts; + /* pktlen is the length of QUIC packet */ + size_t pktlen; + struct { + uint64_t delivered; + ngtcp2_tstamp delivered_ts; + ngtcp2_tstamp first_sent_ts; + uint64_t tx_in_flight; + uint64_t lost; + int is_app_limited; + } rst; + /* flags is bitwise-OR of zero or more of + NGTCP2_RTB_ENTRY_FLAG_*. */ + uint16_t flags; + }; + + ngtcp2_opl_entry oplent; + }; }; +ngtcp2_objalloc_def(rtb_entry, ngtcp2_rtb_entry, oplent); + /* * ngtcp2_rtb_entry_new allocates ngtcp2_rtb_entry object, and assigns - * its pointer to |*pent|. On success, |*pent| takes ownership of - * |frc|. - * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: - * - * NGTCP2_ERR_NOMEM - * Out of memory. + * its pointer to |*pent|. */ -int ngtcp2_rtb_entry_new(ngtcp2_rtb_entry **pent, const ngtcp2_pkt_hd *hd, - ngtcp2_frame_chain *frc, ngtcp2_tstamp ts, - size_t pktlen, uint8_t flags, const ngtcp2_mem *mem); +int ngtcp2_rtb_entry_objalloc_new(ngtcp2_rtb_entry **pent, + const ngtcp2_pkt_hd *hd, + ngtcp2_frame_chain *frc, ngtcp2_tstamp ts, + size_t pktlen, uint16_t flags, + ngtcp2_objalloc *objalloc); /* - * ngtcp2_rtb_entry_del deallocates |ent|. It also frees memory - * pointed by |ent|. + * ngtcp2_rtb_entry_objalloc_del adds |ent| to |objalloc| for reuse. + * ngtcp2_frame_chain linked from ent->frc are also added to + * |frc_objalloc| depending on their frame type and size. */ -void ngtcp2_rtb_entry_del(ngtcp2_rtb_entry *ent, const ngtcp2_mem *mem); +void ngtcp2_rtb_entry_objalloc_del(ngtcp2_rtb_entry *ent, + ngtcp2_objalloc *objalloc, + ngtcp2_objalloc *frc_objalloc, + const ngtcp2_mem *mem); /* * ngtcp2_rtb tracks sent packets, and its ACK timeout for * retransmission. */ typedef struct ngtcp2_rtb { + ngtcp2_objalloc *frc_objalloc; + ngtcp2_objalloc *rtb_entry_objalloc; /* ents includes ngtcp2_rtb_entry sorted by decreasing order of packet number. */ ngtcp2_ksl ents; @@ -265,6 +315,9 @@ typedef struct ngtcp2_rtb { /* num_retransmittable is the number of packets which contain frames that must be retransmitted on loss. */ size_t num_retransmittable; + /* num_pto_eliciting is the number of packets that elicit PTO probe + packets. */ + size_t num_pto_eliciting; /* probe_pkt_left is the number of probe packet to send */ size_t probe_pkt_left; /* pktns_id is the identifier of packet number space. */ @@ -283,6 +336,10 @@ typedef struct ngtcp2_rtb { /* num_lost_pkts is the number entries in ents which has NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED flag set. */ size_t num_lost_pkts; + /* num_lost_pmtud_pkts is the number of entries in ents which have + both NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED and + NGTCP2_RTB_ENTRY_FLAG_PMTUD_PROBE flags set. */ + size_t num_lost_pmtud_pkts; } ngtcp2_rtb; /* @@ -290,7 +347,9 @@ typedef struct ngtcp2_rtb { */ void ngtcp2_rtb_init(ngtcp2_rtb *rtb, ngtcp2_pktns_id pktns_id, ngtcp2_strm *crypto, ngtcp2_rst *rst, ngtcp2_cc *cc, - ngtcp2_log *log, ngtcp2_qlog *qlog, const ngtcp2_mem *mem); + ngtcp2_log *log, ngtcp2_qlog *qlog, + ngtcp2_objalloc *rtb_entry_objalloc, + ngtcp2_objalloc *frc_objalloc, const ngtcp2_mem *mem); /* * ngtcp2_rtb_free deallocates resources allocated for |rtb|. @@ -344,7 +403,7 @@ ngtcp2_ssize ngtcp2_rtb_recv_ack(ngtcp2_rtb *rtb, const ngtcp2_ack *fr, */ int ngtcp2_rtb_detect_lost_pkt(ngtcp2_rtb *rtb, ngtcp2_conn *conn, ngtcp2_pktns *pktns, ngtcp2_conn_stat *cstat, - ngtcp2_duration pto, ngtcp2_tstamp ts); + ngtcp2_tstamp ts); /* * ngtcp2_rtb_remove_expired_lost_pkt removes expired lost packet. @@ -367,6 +426,11 @@ ngtcp2_tstamp ngtcp2_rtb_lost_pkt_ts(ngtcp2_rtb *rtb); int ngtcp2_rtb_remove_all(ngtcp2_rtb *rtb, ngtcp2_conn *conn, ngtcp2_pktns *pktns, ngtcp2_conn_stat *cstat); +/* + * ngtcp2_rtb_remove_early_data removes all entries for 0RTT packets. + */ +void ngtcp2_rtb_remove_early_data(ngtcp2_rtb *rtb, ngtcp2_conn_stat *cstat); + /* * ngtcp2_rtb_empty returns nonzero if |rtb| have no entry. */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_str.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_str.c index 3118955b248..c1ce64a2e57 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_str.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_str.c @@ -216,20 +216,6 @@ uint8_t *ngtcp2_encode_ipv6(uint8_t *dest, const uint8_t *addr) { return dest; } -int ngtcp2_verify_stateless_reset_token(const uint8_t *want, - const uint8_t *got) { - return !ngtcp2_check_invalid_stateless_reset_token(got) && - ngtcp2_cmemeq(want, got, NGTCP2_STATELESS_RESET_TOKENLEN) - ? 0 - : NGTCP2_ERR_INVALID_ARGUMENT; -} - -int ngtcp2_check_invalid_stateless_reset_token(const uint8_t *token) { - static uint8_t invalid_token[NGTCP2_STATELESS_RESET_TOKENLEN] = {0}; - - return 0 == memcmp(invalid_token, token, NGTCP2_STATELESS_RESET_TOKENLEN); -} - int ngtcp2_cmemeq(const uint8_t *a, const uint8_t *b, size_t n) { size_t i; int rv = 0; diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_str.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_str.h index bd0145747c8..04735d6dec5 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_str.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_str.h @@ -77,25 +77,6 @@ uint8_t *ngtcp2_encode_ipv6(uint8_t *dest, const uint8_t *addr); char *ngtcp2_encode_printable_ascii(char *dest, const uint8_t *data, size_t len); -/* - * ngtcp2_verify_stateless_reset_token verifies stateless reset token - * |want| and |got|. This function returns 0 if |want| equals |got| - * and |got| is not all zero, or one of the following negative error - * codes: - * - * NGTCP2_ERR_INVALID_ARGUMENT - * Token does not match; or token is all zero. - */ -int ngtcp2_verify_stateless_reset_token(const uint8_t *want, - const uint8_t *got); - -/* - * ngtcp2_check_invalid_stateless_reset_token returns nonzero if - * |token| is invalid stateless reset token. Currently, token which - * consists of all zeros is considered invalid. - */ -int ngtcp2_check_invalid_stateless_reset_token(const uint8_t *token); - /* * ngtcp2_cmemeq returns nonzero if the first |n| bytes of the buffers * pointed by |a| and |b| are equal. The comparison is done in a diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.c index 8e8eef0c9c9..6f20e866ad5 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.c @@ -35,9 +35,11 @@ static int offset_less(const ngtcp2_ksl_key *lhs, const ngtcp2_ksl_key *rhs) { return *(int64_t *)lhs < *(int64_t *)rhs; } -int ngtcp2_strm_init(ngtcp2_strm *strm, int64_t stream_id, uint32_t flags, - uint64_t max_rx_offset, uint64_t max_tx_offset, - void *stream_user_data, const ngtcp2_mem *mem) { +void ngtcp2_strm_init(ngtcp2_strm *strm, int64_t stream_id, uint32_t flags, + uint64_t max_rx_offset, uint64_t max_tx_offset, + void *stream_user_data, ngtcp2_objalloc *frc_objalloc, + const ngtcp2_mem *mem) { + strm->frc_objalloc = frc_objalloc; strm->cycle = 0; strm->tx.acked_offset = NULL; strm->tx.cont_acked_offset = 0; @@ -45,6 +47,8 @@ int ngtcp2_strm_init(ngtcp2_strm *strm, int64_t stream_id, uint32_t flags, strm->tx.offset = 0; strm->tx.max_offset = max_tx_offset; strm->tx.last_max_stream_data_ts = UINT64_MAX; + strm->tx.loss_count = 0; + strm->tx.last_lost_pkt_num = -1; strm->rx.rob = NULL; strm->rx.cont_offset = 0; strm->rx.last_offset = 0; @@ -53,12 +57,9 @@ int ngtcp2_strm_init(ngtcp2_strm *strm, int64_t stream_id, uint32_t flags, strm->stream_user_data = stream_user_data; strm->rx.window = strm->rx.max_offset = strm->rx.unsent_max_offset = max_rx_offset; - strm->me.key = (uint64_t)stream_id; strm->pe.index = NGTCP2_PQ_BAD_INDEX; strm->mem = mem; strm->app_error_code = 0; - - return 0; } void ngtcp2_strm_free(ngtcp2_strm *strm) { @@ -71,17 +72,23 @@ void ngtcp2_strm_free(ngtcp2_strm *strm) { if (strm->tx.streamfrq) { for (it = ngtcp2_ksl_begin(strm->tx.streamfrq); !ngtcp2_ksl_it_end(&it); ngtcp2_ksl_it_next(&it)) { - ngtcp2_frame_chain_del(ngtcp2_ksl_it_get(&it), strm->mem); + ngtcp2_frame_chain_objalloc_del(ngtcp2_ksl_it_get(&it), + strm->frc_objalloc, strm->mem); } ngtcp2_ksl_free(strm->tx.streamfrq); ngtcp2_mem_free(strm->mem, strm->tx.streamfrq); } - ngtcp2_rob_free(strm->rx.rob); - ngtcp2_mem_free(strm->mem, strm->rx.rob); - ngtcp2_gaptr_free(strm->tx.acked_offset); - ngtcp2_mem_free(strm->mem, strm->tx.acked_offset); + if (strm->rx.rob) { + ngtcp2_rob_free(strm->rx.rob); + ngtcp2_mem_free(strm->mem, strm->rx.rob); + } + + if (strm->tx.acked_offset) { + ngtcp2_gaptr_free(strm->tx.acked_offset); + ngtcp2_mem_free(strm->mem, strm->tx.acked_offset); + } } static int strm_rob_init(ngtcp2_strm *strm) { @@ -155,17 +162,12 @@ void ngtcp2_strm_shutdown(ngtcp2_strm *strm, uint32_t flags) { } static int strm_streamfrq_init(ngtcp2_strm *strm) { - int rv; ngtcp2_ksl *streamfrq = ngtcp2_mem_malloc(strm->mem, sizeof(*streamfrq)); if (streamfrq == NULL) { return NGTCP2_ERR_NOMEM; } - rv = ngtcp2_ksl_init(streamfrq, offset_less, sizeof(uint64_t), strm->mem); - if (rv != 0) { - ngtcp2_mem_free(strm->mem, streamfrq); - return rv; - } + ngtcp2_ksl_init(streamfrq, offset_less, sizeof(uint64_t), strm->mem); strm->tx.streamfrq = streamfrq; @@ -210,7 +212,7 @@ static int strm_streamfrq_unacked_pop(ngtcp2_strm *strm, frc = ngtcp2_ksl_it_get(&it); fr = &frc->fr.stream; - ngtcp2_ksl_remove(strm->tx.streamfrq, &it, &fr->offset); + ngtcp2_ksl_remove_hint(strm->tx.streamfrq, &it, &it, &fr->offset); idx = 0; offset = fr->offset; @@ -234,19 +236,27 @@ static int strm_streamfrq_unacked_pop(ngtcp2_strm *strm, if (idx == fr->datacnt) { if (fr->fin) { if (strm->flags & NGTCP2_STRM_FLAG_FIN_ACKED) { - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); assert(ngtcp2_ksl_len(strm->tx.streamfrq) == 0); return 0; } - fr->offset = fr->offset + ngtcp2_vec_len(fr->data, fr->datacnt); + fr->offset += ngtcp2_vec_len(fr->data, fr->datacnt); fr->datacnt = 0; *pfrc = frc; return 0; } - ngtcp2_frame_chain_del(frc, strm->mem); + + if (fr->offset == 0 && fr->datacnt == 0 && strm->tx.offset == 0 && + !(strm->flags & NGTCP2_STRM_FLAG_ANY_ACKED)) { + *pfrc = frc; + + return 0; + } + + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); continue; } @@ -285,10 +295,10 @@ static int strm_streamfrq_unacked_pop(ngtcp2_strm *strm, return 0; } - rv = ngtcp2_frame_chain_stream_datacnt_new(&nfrc, fr->datacnt - end_idx, - strm->mem); + rv = ngtcp2_frame_chain_stream_datacnt_objalloc_new( + &nfrc, fr->datacnt - end_idx, strm->frc_objalloc, strm->mem); if (rv != 0) { - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); return rv; } @@ -310,8 +320,8 @@ static int strm_streamfrq_unacked_pop(ngtcp2_strm *strm, rv = ngtcp2_ksl_insert(strm->tx.streamfrq, NULL, &nfr->offset, nfrc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(nfrc, strm->mem); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, strm->frc_objalloc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); return rv; } @@ -346,7 +356,7 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, ngtcp2_frame_chain *frc, *nfrc; int rv; size_t nmerged; - size_t datalen; + uint64_t datalen; ngtcp2_vec a[NGTCP2_MAX_STREAM_DATACNT]; ngtcp2_vec b[NGTCP2_MAX_STREAM_DATACNT]; size_t acnt, bcnt; @@ -375,7 +385,7 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, rv = ngtcp2_ksl_insert(strm->tx.streamfrq, NULL, &fr->offset, frc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); return rv; } *pfrc = NULL; @@ -393,10 +403,11 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, assert(acnt > 0); assert(bcnt > 0); - rv = ngtcp2_frame_chain_stream_datacnt_new(&nfrc, bcnt, strm->mem); + rv = ngtcp2_frame_chain_stream_datacnt_objalloc_new( + &nfrc, bcnt, strm->frc_objalloc, strm->mem); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); return rv; } @@ -412,15 +423,16 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, rv = ngtcp2_ksl_insert(strm->tx.streamfrq, NULL, &nfr->offset, nfrc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(nfrc, strm->mem); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, strm->frc_objalloc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); return rv; } - rv = ngtcp2_frame_chain_stream_datacnt_new(&nfrc, acnt, strm->mem); + rv = ngtcp2_frame_chain_stream_datacnt_objalloc_new( + &nfrc, acnt, strm->frc_objalloc, strm->mem); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); return rv; } @@ -430,14 +442,14 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, nfr->datacnt = acnt; ngtcp2_vec_copy(nfr->data, a, acnt); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); *pfrc = nfrc; return 0; } - left -= datalen; + left -= (size_t)datalen; ngtcp2_vec_copy(a, fr->data, fr->datacnt); acnt = fr->datacnt; @@ -452,7 +464,7 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, rv = strm_streamfrq_unacked_pop(strm, &nfrc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); return rv; } if (nfrc == NULL) { @@ -463,7 +475,7 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, if (nfr->fin && nfr->datacnt == 0) { fr->fin = 1; - ngtcp2_frame_chain_del(nfrc, strm->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, strm->frc_objalloc, strm->mem); break; } @@ -473,8 +485,8 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, rv = ngtcp2_ksl_insert(strm->tx.streamfrq, NULL, &nfr->offset, nfrc); if (rv != 0) { assert(ngtcp2_err_is_fatal(rv)); - ngtcp2_frame_chain_del(nfrc, strm->mem); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, strm->frc_objalloc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); return rv; } break; @@ -485,7 +497,7 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, if (nfr->datacnt == 0) { fr->fin = nfr->fin; - ngtcp2_frame_chain_del(nfrc, strm->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, strm->frc_objalloc, strm->mem); continue; } @@ -493,8 +505,8 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, rv = ngtcp2_ksl_insert(strm->tx.streamfrq, NULL, &nfr->offset, nfrc); if (rv != 0) { - ngtcp2_frame_chain_del(nfrc, strm->mem); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(nfrc, strm->frc_objalloc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); return rv; } @@ -512,9 +524,10 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, assert(acnt > fr->datacnt); - rv = ngtcp2_frame_chain_stream_datacnt_new(&nfrc, acnt, strm->mem); + rv = ngtcp2_frame_chain_stream_datacnt_objalloc_new( + &nfrc, acnt, strm->frc_objalloc, strm->mem); if (rv != 0) { - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); return rv; } @@ -523,7 +536,7 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, nfr->datacnt = acnt; ngtcp2_vec_copy(nfr->data, a, acnt); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); *pfrc = nfrc; @@ -535,7 +548,7 @@ uint64_t ngtcp2_strm_streamfrq_unacked_offset(ngtcp2_strm *strm) { ngtcp2_stream *fr; ngtcp2_range gap; ngtcp2_ksl_it it; - size_t datalen; + uint64_t datalen; assert(strm->tx.streamfrq); assert(ngtcp2_ksl_len(strm->tx.streamfrq)); @@ -589,7 +602,7 @@ void ngtcp2_strm_streamfrq_clear(ngtcp2_strm *strm) { for (it = ngtcp2_ksl_begin(strm->tx.streamfrq); !ngtcp2_ksl_it_end(&it); ngtcp2_ksl_it_next(&it)) { frc = ngtcp2_ksl_it_get(&it); - ngtcp2_frame_chain_del(frc, strm->mem); + ngtcp2_frame_chain_objalloc_del(frc, strm->frc_objalloc, strm->mem); } ngtcp2_ksl_clear(strm->tx.streamfrq); } @@ -607,9 +620,13 @@ int ngtcp2_strm_is_all_tx_data_acked(ngtcp2_strm *strm) { strm->tx.offset; } +int ngtcp2_strm_is_all_tx_data_fin_acked(ngtcp2_strm *strm) { + return (strm->flags & NGTCP2_STRM_FLAG_FIN_ACKED) && + ngtcp2_strm_is_all_tx_data_acked(strm); +} + ngtcp2_range ngtcp2_strm_get_unacked_range_after(ngtcp2_strm *strm, uint64_t offset) { - ngtcp2_ksl_it gapit; ngtcp2_range gap; if (strm->tx.acked_offset == NULL) { @@ -618,8 +635,7 @@ ngtcp2_range ngtcp2_strm_get_unacked_range_after(ngtcp2_strm *strm, return gap; } - gapit = ngtcp2_gaptr_get_first_gap_after(strm->tx.acked_offset, offset); - return *(ngtcp2_range *)ngtcp2_ksl_it_key(&gapit); + return ngtcp2_gaptr_get_first_gap_after(strm->tx.acked_offset, offset); } uint64_t ngtcp2_strm_get_acked_offset(ngtcp2_strm *strm) { @@ -631,7 +647,6 @@ uint64_t ngtcp2_strm_get_acked_offset(ngtcp2_strm *strm) { } static int strm_acked_offset_init(ngtcp2_strm *strm) { - int rv; ngtcp2_gaptr *acked_offset = ngtcp2_mem_malloc(strm->mem, sizeof(*acked_offset)); @@ -639,11 +654,7 @@ static int strm_acked_offset_init(ngtcp2_strm *strm) { return NGTCP2_ERR_NOMEM; } - rv = ngtcp2_gaptr_init(acked_offset, strm->mem); - if (rv != 0) { - ngtcp2_mem_free(strm->mem, acked_offset); - return rv; - } + ngtcp2_gaptr_init(acked_offset, strm->mem); strm->tx.acked_offset = acked_offset; @@ -673,3 +684,15 @@ int ngtcp2_strm_ack_data(ngtcp2_strm *strm, uint64_t offset, uint64_t len) { return ngtcp2_gaptr_push(strm->tx.acked_offset, offset, len); } + +void ngtcp2_strm_set_app_error_code(ngtcp2_strm *strm, + uint64_t app_error_code) { + if (strm->flags & NGTCP2_STRM_FLAG_APP_ERROR_CODE_SET) { + return; + } + + assert(0 == strm->app_error_code); + + strm->flags |= NGTCP2_STRM_FLAG_APP_ERROR_CODE_SET; + strm->app_error_code = app_error_code; +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.h index 6b7418706c7..8e3cfe83543 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_strm.h @@ -40,110 +40,138 @@ typedef struct ngtcp2_frame_chain ngtcp2_frame_chain; /* NGTCP2_STRM_FLAG_NONE indicates that no flag is set. */ -#define NGTCP2_STRM_FLAG_NONE 0x00 +#define NGTCP2_STRM_FLAG_NONE 0x00u /* NGTCP2_STRM_FLAG_SHUT_RD indicates that further reception of stream data is not allowed. */ -#define NGTCP2_STRM_FLAG_SHUT_RD 0x01 +#define NGTCP2_STRM_FLAG_SHUT_RD 0x01u /* NGTCP2_STRM_FLAG_SHUT_WR indicates that further transmission of stream data is not allowed. */ -#define NGTCP2_STRM_FLAG_SHUT_WR 0x02 +#define NGTCP2_STRM_FLAG_SHUT_WR 0x02u #define NGTCP2_STRM_FLAG_SHUT_RDWR \ (NGTCP2_STRM_FLAG_SHUT_RD | NGTCP2_STRM_FLAG_SHUT_WR) /* NGTCP2_STRM_FLAG_SENT_RST indicates that RST_STREAM is sent from the local endpoint. In this case, NGTCP2_STRM_FLAG_SHUT_WR is also set. */ -#define NGTCP2_STRM_FLAG_SENT_RST 0x04 +#define NGTCP2_STRM_FLAG_SENT_RST 0x04u /* NGTCP2_STRM_FLAG_SENT_RST indicates that RST_STREAM is received from the remote endpoint. In this case, NGTCP2_STRM_FLAG_SHUT_RD is also set. */ -#define NGTCP2_STRM_FLAG_RECV_RST 0x08 +#define NGTCP2_STRM_FLAG_RECV_RST 0x08u /* NGTCP2_STRM_FLAG_STOP_SENDING indicates that STOP_SENDING is sent from the local endpoint. */ -#define NGTCP2_STRM_FLAG_STOP_SENDING 0x10 +#define NGTCP2_STRM_FLAG_STOP_SENDING 0x10u /* NGTCP2_STRM_FLAG_RST_ACKED indicates that the outgoing RST_STREAM is acknowledged by peer. */ -#define NGTCP2_STRM_FLAG_RST_ACKED 0x20 +#define NGTCP2_STRM_FLAG_RST_ACKED 0x20u /* NGTCP2_STRM_FLAG_FIN_ACKED indicates that a STREAM with FIN bit set is acknowledged by a remote endpoint. */ -#define NGTCP2_STRM_FLAG_FIN_ACKED 0x40 +#define NGTCP2_STRM_FLAG_FIN_ACKED 0x40u +/* NGTCP2_STRM_FLAG_ANY_ACKED indicates that any portion of stream + data, including 0 length segment, is acknowledged. */ +#define NGTCP2_STRM_FLAG_ANY_ACKED 0x80u +/* NGTCP2_STRM_FLAG_APP_ERROR_CODE_SET indicates that app_error_code + field is set. This resolves the ambiguity that the initial + app_error_code value 0 might be a proper application error code. + In this case, without this flag, we are unable to distinguish + assigned value from unassigned one. */ +#define NGTCP2_STRM_FLAG_APP_ERROR_CODE_SET 0x100u +/* NGTCP2_STRM_FLAG_STREAM_STOP_SENDING_CALLED is set when + stream_stop_sending callback is called. */ +#define NGTCP2_STRM_FLAG_STREAM_STOP_SENDING_CALLED 0x200u typedef struct ngtcp2_strm ngtcp2_strm; struct ngtcp2_strm { - ngtcp2_map_entry me; - ngtcp2_pq_entry pe; - uint64_t cycle; + union { + struct { + ngtcp2_pq_entry pe; + uint64_t cycle; + ngtcp2_objalloc *frc_objalloc; - struct { - /* acked_offset tracks acknowledged outgoing data. */ - ngtcp2_gaptr *acked_offset; - /* cont_acked_offset is the offset that all data up to this offset - is acknowledged by a remote endpoint. It is used until the - remote endpoint acknowledges data in out-of-order. After that, - acked_offset is used instead. */ - uint64_t cont_acked_offset; - /* streamfrq contains STREAM frame for retransmission. The flow - control credits have been paid when they are transmitted first - time. There are no restriction regarding flow control for - retransmission. */ - ngtcp2_ksl *streamfrq; - /* offset is the next offset of outgoing data. In other words, it - is the number of bytes sent in this stream without - duplication. */ - uint64_t offset; - /* max_tx_offset is the maximum offset that local endpoint can - send for this stream. */ - uint64_t max_offset; - /* last_max_stream_data_ts is the timestamp when last - MAX_STREAM_DATA frame is sent. */ - ngtcp2_tstamp last_max_stream_data_ts; - } tx; + struct { + /* acked_offset tracks acknowledged outgoing data. */ + ngtcp2_gaptr *acked_offset; + /* cont_acked_offset is the offset that all data up to this offset + is acknowledged by a remote endpoint. It is used until the + remote endpoint acknowledges data in out-of-order. After that, + acked_offset is used instead. */ + uint64_t cont_acked_offset; + /* streamfrq contains STREAM frame for retransmission. The flow + control credits have been paid when they are transmitted first + time. There are no restriction regarding flow control for + retransmission. */ + ngtcp2_ksl *streamfrq; + /* offset is the next offset of outgoing data. In other words, it + is the number of bytes sent in this stream without + duplication. */ + uint64_t offset; + /* max_tx_offset is the maximum offset that local endpoint can + send for this stream. */ + uint64_t max_offset; + /* last_max_stream_data_ts is the timestamp when last + MAX_STREAM_DATA frame is sent. */ + ngtcp2_tstamp last_max_stream_data_ts; + /* loss_count is the number of packets that contain STREAM + frame for this stream and are declared to be lost. It may + include the spurious losses. It does not include a packet + whose contents have been reclaimed for PTO and which is + later declared to be lost. Those data are not blocked by + the flow control and will be sent immediately if no other + restrictions are applied. */ + size_t loss_count; + /* last_lost_pkt_num is the packet number of the packet that + is counted to loss_count. It is used to avoid to count + multiple STREAM frames in one lost packet. */ + int64_t last_lost_pkt_num; + } tx; - struct { - /* rob is the reorder buffer for incoming stream data. The data - received in out of order is buffered and sorted by its offset - in this object. */ - ngtcp2_rob *rob; - /* cont_offset is the largest offset of consecutive data. It is - used until the endpoint receives out-of-order data. After - that, rob is used to track the offset and data. */ - uint64_t cont_offset; - /* last_offset is the largest offset of stream data received for - this stream. */ - uint64_t last_offset; - /* max_offset is the maximum offset that remote endpoint can send - to this stream. */ - uint64_t max_offset; - /* unsent_max_offset is the maximum offset that remote endpoint - can send to this stream, and it is not notified to the remote - endpoint. unsent_max_offset >= max_offset must be hold. */ - uint64_t unsent_max_offset; - /* window is the stream-level flow control window size. */ - uint64_t window; - } rx; + struct { + /* rob is the reorder buffer for incoming stream data. The data + received in out of order is buffered and sorted by its offset + in this object. */ + ngtcp2_rob *rob; + /* cont_offset is the largest offset of consecutive data. It is + used until the endpoint receives out-of-order data. After + that, rob is used to track the offset and data. */ + uint64_t cont_offset; + /* last_offset is the largest offset of stream data received for + this stream. */ + uint64_t last_offset; + /* max_offset is the maximum offset that remote endpoint can send + to this stream. */ + uint64_t max_offset; + /* unsent_max_offset is the maximum offset that remote endpoint + can send to this stream, and it is not notified to the remote + endpoint. unsent_max_offset >= max_offset must be hold. */ + uint64_t unsent_max_offset; + /* window is the stream-level flow control window size. */ + uint64_t window; + } rx; - const ngtcp2_mem *mem; - int64_t stream_id; - void *stream_user_data; - /* flags is bit-wise OR of zero or more of NGTCP2_STRM_FLAG_*. */ - uint32_t flags; - /* app_error_code is an error code the local endpoint sent in - RST_STREAM or STOP_SENDING. */ - uint64_t app_error_code; + const ngtcp2_mem *mem; + int64_t stream_id; + void *stream_user_data; + /* flags is bit-wise OR of zero or more of NGTCP2_STRM_FLAG_*. */ + uint32_t flags; + /* app_error_code is an error code the local endpoint sent in + RESET_STREAM or STOP_SENDING, or received from a remote endpoint + in RESET_STREAM or STOP_SENDING. First application error code is + chosen and when set, NGTCP2_STRM_FLAG_APP_ERROR_CODE_SET flag is + set in flags field. */ + uint64_t app_error_code; + }; + + ngtcp2_opl_entry oplent; + }; }; /* * ngtcp2_strm_init initializes |strm|. - * - * This function returns 0 if it succeeds, or one of the following - * negative error codes: - * - * NGTCP2_ERR_NOMEM - * Out of memory */ -int ngtcp2_strm_init(ngtcp2_strm *strm, int64_t stream_id, uint32_t flags, - uint64_t max_rx_offset, uint64_t max_tx_offset, - void *stream_user_data, const ngtcp2_mem *mem); +void ngtcp2_strm_init(ngtcp2_strm *strm, int64_t stream_id, uint32_t flags, + uint64_t max_rx_offset, uint64_t max_tx_offset, + void *stream_user_data, ngtcp2_objalloc *frc_objalloc, + const ngtcp2_mem *mem); /* * ngtcp2_strm_free deallocates memory allocated for |strm|. This @@ -245,6 +273,13 @@ int ngtcp2_strm_is_tx_queued(ngtcp2_strm *strm); */ int ngtcp2_strm_is_all_tx_data_acked(ngtcp2_strm *strm); +/* + * ngtcp2_strm_is_all_tx_data_fin_acked behaves like + * ngtcp2_strm_is_all_tx_data_acked, but it also requires that STREAM + * frame with fin bit set is acknowledged. + */ +int ngtcp2_strm_is_all_tx_data_fin_acked(ngtcp2_strm *strm); + /* * ngtcp2_strm_get_unacked_range_after returns the range that is not * acknowledged yet and intersects or comes after |offset|. @@ -265,4 +300,11 @@ uint64_t ngtcp2_strm_get_acked_offset(ngtcp2_strm *strm); */ int ngtcp2_strm_ack_data(ngtcp2_strm *strm, uint64_t offset, uint64_t len); +/* + * ngtcp2_strm_set_app_error_code sets |app_error_code| to |strm| and + * set NGTCP2_STRM_FLAG_APP_ERROR_CODE_SET flag. If the flag is + * already set, this function does nothing. + */ +void ngtcp2_strm_set_app_error_code(ngtcp2_strm *strm, uint64_t app_error_code); + #endif /* NGTCP2_STRM_H */ diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_vec.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_vec.c index 7a6f8afa051..257332e27a2 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_vec.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_vec.c @@ -61,7 +61,7 @@ void ngtcp2_vec_del(ngtcp2_vec *vec, const ngtcp2_mem *mem) { ngtcp2_mem_free(mem, vec); } -size_t ngtcp2_vec_len(const ngtcp2_vec *vec, size_t n) { +uint64_t ngtcp2_vec_len(const ngtcp2_vec *vec, size_t n) { size_t i; size_t res = 0; @@ -72,6 +72,23 @@ size_t ngtcp2_vec_len(const ngtcp2_vec *vec, size_t n) { return res; } +int64_t ngtcp2_vec_len_varint(const ngtcp2_vec *vec, size_t n) { + uint64_t res = 0; + size_t len; + size_t i; + + for (i = 0; i < n; ++i) { + len = vec[i].len; + if (len > NGTCP2_MAX_VARINT - res) { + return -1; + } + + res += len; + } + + return (int64_t)res; +} + ngtcp2_ssize ngtcp2_vec_split(ngtcp2_vec *src, size_t *psrccnt, ngtcp2_vec *dst, size_t *pdstcnt, size_t left, size_t maxcnt) { size_t i; @@ -198,13 +215,10 @@ size_t ngtcp2_vec_merge(ngtcp2_vec *dst, size_t *pdstcnt, ngtcp2_vec *src, return orig_left - left; } -size_t ngtcp2_vec_copy_at_most(ngtcp2_vec *dst, size_t *pnwritten, - size_t dstcnt, const ngtcp2_vec *src, - size_t srccnt, size_t left) { +size_t ngtcp2_vec_copy_at_most(ngtcp2_vec *dst, size_t dstcnt, + const ngtcp2_vec *src, size_t srccnt, + size_t left) { size_t i, j; - size_t len = left; - - *pnwritten = 0; for (i = 0, j = 0; left > 0 && i < srccnt && j < dstcnt;) { if (src[i].len == 0) { @@ -214,7 +228,6 @@ size_t ngtcp2_vec_copy_at_most(ngtcp2_vec *dst, size_t *pnwritten, dst[j] = src[i]; if (dst[j].len > left) { dst[j].len = left; - *pnwritten = len; return j + 1; } left -= dst[j].len; @@ -222,8 +235,6 @@ size_t ngtcp2_vec_copy_at_most(ngtcp2_vec *dst, size_t *pnwritten, ++j; } - *pnwritten = len - left; - return j; } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_vec.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_vec.h index 077820a9efe..a39c4392fd2 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_vec.h +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_vec.h @@ -65,7 +65,13 @@ void ngtcp2_vec_del(ngtcp2_vec *vec, const ngtcp2_mem *mem); /* * ngtcp2_vec_len returns the sum of length in |vec| of |n| elements. */ -size_t ngtcp2_vec_len(const ngtcp2_vec *vec, size_t n); +uint64_t ngtcp2_vec_len(const ngtcp2_vec *vec, size_t n); + +/* + * ngtcp2_vec_len_varint is similar to ngtcp2_vec_len, but it returns + * -1 if the sum of the length exceeds NGTCP2_MAX_VARINT. + */ +int64_t ngtcp2_vec_len_varint(const ngtcp2_vec *vec, size_t n); /* * ngtcp2_vec_split splits |src| to |dst| so that the sum of the @@ -97,13 +103,13 @@ size_t ngtcp2_vec_merge(ngtcp2_vec *dst, size_t *pdstcnt, ngtcp2_vec *src, /* * ngtcp2_vec_copy_at_most copies |src| of length |srccnt| to |dst| of * length |dstcnt|. The total number of bytes which the copied - * ngtcp2_vec refers to is at most |left| and is assigned to - * |*pnwritten|. The empty elements in |src| are ignored. This - * function returns the number of elements copied. + * ngtcp2_vec refers to is at most |left|. The empty elements in + * |src| are ignored. This function returns the number of elements + * copied. */ -size_t ngtcp2_vec_copy_at_most(ngtcp2_vec *dst, size_t *pnwritten, - size_t dstcnt, const ngtcp2_vec *src, - size_t srccnt, size_t left); +size_t ngtcp2_vec_copy_at_most(ngtcp2_vec *dst, size_t dstcnt, + const ngtcp2_vec *src, size_t srccnt, + size_t left); /* * ngtcp2_vec_copy copies |src| of length |cnt| to |dst|. |dst| must diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_version.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_version.c index 40f3ae3f9ea..b31162c3ebe 100644 --- a/deps/ngtcp2/ngtcp2/lib/ngtcp2_version.c +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_version.c @@ -31,7 +31,7 @@ static ngtcp2_info version = {NGTCP2_VERSION_AGE, NGTCP2_VERSION_NUM, NGTCP2_VERSION}; -ngtcp2_info *ngtcp2_version(int least_version) { +const ngtcp2_info *ngtcp2_version(int least_version) { if (least_version > NGTCP2_VERSION_NUM) { return NULL; } diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_window_filter.c b/deps/ngtcp2/ngtcp2/lib/ngtcp2_window_filter.c new file mode 100644 index 00000000000..71c816e4d3d --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_window_filter.c @@ -0,0 +1,99 @@ +/* + * ngtcp2 + * + * Copyright (c) 2021 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * Translated to C from the original C++ code + * https://quiche.googlesource.com/quiche/+/5be974e29f7e71a196e726d6e2272676d33ab77d/quic/core/congestion_control/windowed_filter.h + * with the following license: + * + * // Copyright (c) 2016 The Chromium Authors. All rights reserved. + * // Use of this source code is governed by a BSD-style license that can be + * // found in the LICENSE file. + */ +#include "ngtcp2_window_filter.h" + +#include + +void ngtcp2_window_filter_init(ngtcp2_window_filter *wf, + uint64_t window_length) { + wf->window_length = window_length; + memset(wf->estimates, 0, sizeof(wf->estimates)); +} + +void ngtcp2_window_filter_update(ngtcp2_window_filter *wf, uint64_t new_sample, + uint64_t new_time) { + if (wf->estimates[0].sample == 0 || new_sample > wf->estimates[0].sample || + new_time - wf->estimates[2].time > wf->window_length) { + ngtcp2_window_filter_reset(wf, new_sample, new_time); + return; + } + + if (new_sample > wf->estimates[1].sample) { + wf->estimates[1].sample = new_sample; + wf->estimates[1].time = new_time; + wf->estimates[2] = wf->estimates[1]; + } else if (new_sample > wf->estimates[2].sample) { + wf->estimates[2].sample = new_sample; + wf->estimates[2].time = new_time; + } + + if (new_time - wf->estimates[0].time > wf->window_length) { + wf->estimates[0] = wf->estimates[1]; + wf->estimates[1] = wf->estimates[2]; + wf->estimates[2].sample = new_sample; + wf->estimates[2].time = new_time; + + if (new_time - wf->estimates[0].time > wf->window_length) { + wf->estimates[0] = wf->estimates[1]; + wf->estimates[1] = wf->estimates[2]; + } + return; + } + + if (wf->estimates[1].sample == wf->estimates[0].sample && + new_time - wf->estimates[1].time > wf->window_length >> 2) { + wf->estimates[2].sample = new_sample; + wf->estimates[2].time = new_time; + wf->estimates[1] = wf->estimates[2]; + return; + } + + if (wf->estimates[2].sample == wf->estimates[1].sample && + new_time - wf->estimates[2].time > wf->window_length >> 1) { + wf->estimates[2].sample = new_sample; + wf->estimates[2].time = new_time; + } +} + +void ngtcp2_window_filter_reset(ngtcp2_window_filter *wf, uint64_t new_sample, + uint64_t new_time) { + wf->estimates[0].sample = new_sample; + wf->estimates[0].time = new_time; + wf->estimates[1] = wf->estimates[2] = wf->estimates[0]; +} + +uint64_t ngtcp2_window_filter_get_best(ngtcp2_window_filter *wf) { + return wf->estimates[0].sample; +} diff --git a/deps/ngtcp2/ngtcp2/lib/ngtcp2_window_filter.h b/deps/ngtcp2/ngtcp2/lib/ngtcp2_window_filter.h new file mode 100644 index 00000000000..50415f10b8c --- /dev/null +++ b/deps/ngtcp2/ngtcp2/lib/ngtcp2_window_filter.h @@ -0,0 +1,65 @@ +/* + * ngtcp2 + * + * Copyright (c) 2021 ngtcp2 contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * Translated to C from the original C++ code + * https://quiche.googlesource.com/quiche/+/5be974e29f7e71a196e726d6e2272676d33ab77d/quic/core/congestion_control/windowed_filter.h + * with the following license: + * + * // Copyright (c) 2016 The Chromium Authors. All rights reserved. + * // Use of this source code is governed by a BSD-style license that can be + * // found in the LICENSE file. + */ +#ifndef NGTCP2_WINDOW_FILTER_H +#define NGTCP2_WINDOW_FILTER_H + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#include + +typedef struct ngtcp2_window_filter_sample { + uint64_t sample; + uint64_t time; +} ngtcp2_window_filter_sample; + +typedef struct ngtcp2_window_filter { + uint64_t window_length; + ngtcp2_window_filter_sample estimates[3]; +} ngtcp2_window_filter; + +void ngtcp2_window_filter_init(ngtcp2_window_filter *wf, + uint64_t window_length); + +void ngtcp2_window_filter_update(ngtcp2_window_filter *wf, uint64_t new_sample, + uint64_t new_time); + +void ngtcp2_window_filter_reset(ngtcp2_window_filter *wf, uint64_t new_sample, + uint64_t new_time); + +uint64_t ngtcp2_window_filter_get_best(ngtcp2_window_filter *wf); + +#endif /* NGTCP2_WINDOW_FILTER_H */ diff --git a/deps/npm/docs/content/commands/npm-access.md b/deps/npm/docs/content/commands/npm-access.md index 162e94f1fec..e707eb6f5e2 100644 --- a/deps/npm/docs/content/commands/npm-access.md +++ b/deps/npm/docs/content/commands/npm-access.md @@ -6,10 +6,6 @@ description: Set access level on published packages ### Synopsis - - - - ```bash npm access public [] npm access restricted [] @@ -22,11 +18,6 @@ npm access ls-collaborators [ []] npm access edit [] ``` - - - - - ### Description Used to set access controls on private packages. @@ -35,29 +26,28 @@ For all of the subcommands, `npm access` will perform actions on the packages in the current working directory if no package name is passed to the subcommand. -* public / restricted: +* public / restricted (deprecated): Set a package to be either publicly accessible or restricted. -* grant / revoke: +* grant / revoke (deprecated): Add or remove the ability of users and teams to have read-only or read-write access to a package. -* 2fa-required / 2fa-not-required: +* 2fa-required / 2fa-not-required (deprecated): Configure whether a package requires that anyone publishing it have two-factor authentication enabled on their account. -* ls-packages: +* ls-packages (deprecated): Show all of the packages a user or a team is able to access, along with the access level, except for read-only public packages (it won't print the whole registry listing) -* ls-collaborators: +* ls-collaborators (deprecated): Show all of the access privileges for a package. Will only show permissions for packages to which you have at least read access. If `` is passed in, the list is filtered only to teams _that_ user happens to belong to. -* edit: - Set the access privileges for a package at once using `$EDITOR`. +* edit (not implemented) ### Details @@ -89,9 +79,6 @@ Management of teams and team memberships is done with the `npm team` command. ### Configuration - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -99,9 +86,6 @@ Management of teams and team memberships is done with the `npm team` command. The base URL of the npm registry. - - - #### `otp` * Default: null @@ -113,11 +97,6 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. - - - - - ### See Also * [`libnpmaccess`](https://npm.im/libnpmaccess) diff --git a/deps/npm/docs/content/commands/npm-adduser.md b/deps/npm/docs/content/commands/npm-adduser.md index 06eeb379c4d..2d040c6a4a5 100644 --- a/deps/npm/docs/content/commands/npm-adduser.md +++ b/deps/npm/docs/content/commands/npm-adduser.md @@ -6,21 +6,12 @@ description: Add a registry user account ### Synopsis - - - - ```bash npm adduser aliases: login, add-user ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -44,9 +35,6 @@ your existing record. ### Configuration - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -54,9 +42,6 @@ your existing record. The base URL of the npm registry. - - - #### `scope` * Default: the scope of the current project, if any, or "" @@ -87,10 +72,15 @@ npm init --scope=@foo --yes ``` - - +#### `auth-type` + +* Default: "legacy" +* Type: "legacy", "web", "sso", "saml", "oauth", or "webauthn" + +NOTE: auth-type values "sso", "saml", "oauth", and "webauthn" will be +removed in a future version. - +What authentication strategy to use with `login`. ### See Also diff --git a/deps/npm/docs/content/commands/npm-audit.md b/deps/npm/docs/content/commands/npm-audit.md index 9d09a4107fd..ab639550232 100644 --- a/deps/npm/docs/content/commands/npm-audit.md +++ b/deps/npm/docs/content/commands/npm-audit.md @@ -6,19 +6,10 @@ description: Run a security audit ### Synopsis - - - - ```bash -npm audit [fix] +npm audit [fix|signatures] ``` - - - - - ### Description The audit command submits a description of the dependencies configured in @@ -41,6 +32,58 @@ vulnerability is found. It may be useful in CI environments to include the will cause the command to fail. This option does not filter the report output, it simply changes the command's failure threshold. +### Audit Signatures + +To ensure the integrity of packages you download from the public npm registry, or any registry that supports signatures, you can verify the registry signatures of downloaded packages using the npm CLI. + +Registry signatures can be verified using the following `audit` command: + +```bash +$ npm audit signatures +``` + +The npm CLI supports registry signatures and signing keys provided by any registry if the following conventions are followed: + +1. Signatures are provided in the package's `packument` in each published version within the `dist` object: + +```json +"dist":{ + "..omitted..": "..omitted..", + "signatures": [{ + "keyid": "SHA256:{{SHA256_PUBLIC_KEY}}", + "sig": "a312b9c3cb4a1b693e8ebac5ee1ca9cc01f2661c14391917dcb111517f72370809..." + }] +} +``` + +See this [example](https://registry.npmjs.org/light-cycle/1.4.3) of a signed package from the public npm registry. + +The `sig` is generated using the following template: `${package.name}@${package.version}:${package.dist.integrity}` and the `keyid` has to match one of the public signing keys below. + +2. Public signing keys are provided at `registry-host.tld/-/npm/v1/keys` in the following format: + +``` +{ + "keys": [{ + "expires": null, + "keyid": "SHA256:{{SHA256_PUBLIC_KEY}}", + "keytype": "ecdsa-sha2-nistp256", + "scheme": "ecdsa-sha2-nistp256", + "key": "{{B64_PUBLIC_KEY}}" + }] +} +``` + +Keys response: + +- `expires`: null or a simplified extended ISO 8601 format: `YYYY-MM-DDTHH:mm:ss.sssZ` +- `keydid`: sha256 fingerprint of the public key +- `keytype`: only `ecdsa-sha2-nistp256` is currently supported by the npm CLI +- `scheme`: only `ecdsa-sha2-nistp256` is currently supported by the npm CLI +- `key`: base64 encoded public key + +See this example key's response from the public npm registry. + ### Audit Endpoints There are two audit endpoints that npm may use to fetch vulnerability @@ -195,9 +238,6 @@ $ npm audit --audit-level=moderate ### Configuration - - - #### `audit-level` * Default: null @@ -206,9 +246,6 @@ $ npm audit --audit-level=moderate The minimum level of vulnerability for `npm audit` to exit with a non-zero exit code. - - - #### `dry-run` * Default: false @@ -222,9 +259,6 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. - - - #### `force` * Default: false @@ -251,9 +285,6 @@ mistakes, unnecessary performance degradation, and malicious input. If you don't have a clear idea of what you want to do, it is strongly recommended that you do not use this option! - - - #### `json` * Default: false @@ -266,9 +297,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `package-lock-only` * Default: false @@ -283,9 +311,6 @@ instead of checking `node_modules` and downloading dependencies. For `list` this means the output will be based on the tree described by the `package-lock.json`, rather than the contents of `node_modules`. - - - #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -304,9 +329,6 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. - - - #### `foreground-scripts` * Default: false @@ -319,9 +341,6 @@ input, output, and error with the main npm process. Note that this will generally make installs run slower, and be much noisier, but can be useful for debugging. - - - #### `ignore-scripts` * Default: false @@ -334,9 +353,6 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - - #### `workspace` * Default: @@ -359,9 +375,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -380,9 +393,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -396,9 +406,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - #### `install-links` * Default: false @@ -408,11 +415,6 @@ When set file: protocol dependencies that exist outside of the project root will be packed and installed as regular dependencies instead of creating a symlink. This option has no effect on workspaces. - - - - - ### See Also * [npm install](/commands/npm-install) diff --git a/deps/npm/docs/content/commands/npm-bin.md b/deps/npm/docs/content/commands/npm-bin.md index b344ea2fc94..16a28a8e1c3 100644 --- a/deps/npm/docs/content/commands/npm-bin.md +++ b/deps/npm/docs/content/commands/npm-bin.md @@ -6,19 +6,10 @@ description: Display npm bin folder ### Synopsis - - - - ```bash npm bin ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -27,15 +18,10 @@ Print the folder where npm will install executables. ### Configuration - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -46,11 +32,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - - - ### See Also * [npm prefix](/commands/npm-prefix) diff --git a/deps/npm/docs/content/commands/npm-bugs.md b/deps/npm/docs/content/commands/npm-bugs.md index 6b45f1f18ac..153355fc694 100644 --- a/deps/npm/docs/content/commands/npm-bugs.md +++ b/deps/npm/docs/content/commands/npm-bugs.md @@ -6,21 +6,12 @@ description: Report bugs for a package in a web browser ### Synopsis - - - - ```bash npm bugs [ [ ...]] alias: issues ``` - - - - - ### Description This command tries to guess at the likely location of a package's bug @@ -30,9 +21,6 @@ will search for a `package.json` in the current folder and use the `name` proper ### Configuration - - - #### `browser` * Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` @@ -45,9 +33,6 @@ terminal. Set to `true` to use default system URL opener. - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -55,9 +40,6 @@ Set to `true` to use default system URL opener. The base URL of the npm registry. - - - #### `workspace` * Default: @@ -80,9 +62,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -101,9 +80,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -117,11 +93,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - - - ### See Also * [npm docs](/commands/npm-docs) diff --git a/deps/npm/docs/content/commands/npm-cache.md b/deps/npm/docs/content/commands/npm-cache.md index 091e26e8a71..a6ef86dd225 100644 --- a/deps/npm/docs/content/commands/npm-cache.md +++ b/deps/npm/docs/content/commands/npm-cache.md @@ -6,26 +6,13 @@ description: Manipulates packages cache ### Synopsis - - - - ```bash -npm cache add -npm cache add -npm cache add -npm cache add -npm cache add @ +npm cache add npm cache clean [] npm cache ls [@] npm cache verify ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -83,9 +70,6 @@ verify`. ### Configuration - - - #### `cache` * Default: Windows: `%LocalAppData%\npm-cache`, Posix: `~/.npm` @@ -94,13 +78,9 @@ verify`. The location of npm's cache directory. See [`npm cache`](/commands/npm-cache) - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [npm folders](/configuring-npm/folders) * [npm config](/commands/npm-config) * [npmrc](/configuring-npm/npmrc) diff --git a/deps/npm/docs/content/commands/npm-ci.md b/deps/npm/docs/content/commands/npm-ci.md index 3374bf1e251..474e27cdd0d 100644 --- a/deps/npm/docs/content/commands/npm-ci.md +++ b/deps/npm/docs/content/commands/npm-ci.md @@ -6,21 +6,12 @@ description: Clean install a project ### Synopsis - - - - ```bash npm ci aliases: clean-install, ic, install-clean, isntall-clean ``` - - - - - ### Description This command is similar to [`npm install`](/commands/npm-install), except @@ -67,7 +58,7 @@ $ npm ci added 154 packages in 5s ``` -Configure Travis to build using `npm ci` instead of `npm install`: +Configure Travis CI to build using `npm ci` instead of `npm install`: ```bash # .travis.yml @@ -81,21 +72,108 @@ cache: ### Configuration - - - -#### `audit` +#### `save` + +* Default: `true` unless when using `npm update` where it defaults to `false` +* Type: Boolean + +Save installed packages to a `package.json` file as dependencies. + +When used with the `npm rm` command, removes the dependency from +`package.json`. + +Will also prevent writing to `package-lock.json` if set to `false`. + +#### `save-exact` + +* Default: false +* Type: Boolean + +Dependencies saved to package.json will be configured with an exact version +rather than using npm's default semver range operator. + +#### `global` + +* Default: false +* Type: Boolean + +Operates in "global" mode, so that packages are installed into the `prefix` +folder instead of the current working directory. See +[folders](/configuring-npm/folders) for more on the differences in behavior. + +* packages are installed into the `{prefix}/lib/node_modules` folder, instead + of the current working directory. +* bin files are linked to `{prefix}/bin` +* man pages are linked to `{prefix}/share/man` + +#### `global-style` + +* Default: false +* Type: Boolean + +Causes npm to install the package into your local `node_modules` folder with +the same layout it uses with the global `node_modules` folder. Only your +direct dependencies will show in `node_modules` and everything they depend +on will be flattened in their `node_modules` folders. This obviously will +eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` +will be preferred. + +#### `legacy-bundling` + +* Default: false +* Type: Boolean + +Causes npm to install the package such that versions of npm prior to 1.4, +such as the one included with node 0.8, can install the package. This +eliminates all automatic deduping. If used with `global-style` this option +will be preferred. + +#### `omit` + +* Default: 'dev' if the `NODE_ENV` environment variable is set to + 'production', otherwise empty. +* Type: "dev", "optional", or "peer" (can be set multiple times) + +Dependency types to omit from the installation tree on disk. + +Note that these dependencies _are_ still resolved and added to the +`package-lock.json` or `npm-shrinkwrap.json` file. They are just not +physically installed on disk. + +If a package type appears in both the `--include` and `--omit` lists, then +it will be included. + +If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment +variable will be set to `'production'` for all lifecycle scripts. + +#### `strict-peer-deps` + +* Default: false +* Type: Boolean + +If set to `true`, and `--legacy-peer-deps` is not set, then _any_ +conflicting `peerDependencies` will be treated as an install failure, even +if npm could reasonably guess the appropriate resolution based on non-peer +dependency relationships. + +By default, conflicting `peerDependencies` deep in the dependency graph will +be resolved using the nearest non-peer dependency specification, even if +doing so will result in some packages receiving a peer dependency outside +the range set in their package's `peerDependencies` object. + +When such and override is performed, a warning is printed, explaining the +conflict and the packages involved. If `--strict-peer-deps` is set, then +this warning is treated as a failure. + +#### `package-lock` * Default: true * Type: Boolean -When "true" submit audit reports alongside the current npm command to the -default registry and all registries configured for scopes. See the -documentation for [`npm audit`](/commands/npm-audit) for details on what is -submitted. +If set to false, then ignore `package-lock.json` files when installing. This +will also prevent _writing_ `package-lock.json` if `save` is true. - - +This configuration does not affect `npm ci`. #### `foreground-scripts` @@ -109,9 +187,6 @@ input, output, and error with the main npm process. Note that this will generally make installs run slower, and be much noisier, but can be useful for debugging. - - - #### `ignore-scripts` * Default: false @@ -124,21 +199,111 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - +#### `audit` + +* Default: true +* Type: Boolean + +When "true" submit audit reports alongside the current npm command to the +default registry and all registries configured for scopes. See the +documentation for [`npm audit`](/commands/npm-audit) for details on what is +submitted. + +#### `bin-links` + +* Default: true +* Type: Boolean + +Tells npm to create symlinks (or `.cmd` shims on Windows) for package +executables. + +Set to false to have it not do this. This can be used to work around the +fact that some file systems don't support symlinks, even on ostensibly Unix +systems. + +#### `fund` + +* Default: true +* Type: Boolean + +When "true" displays the message at the end of each `npm install` +acknowledging the number of dependencies looking for funding. See [`npm +fund`](/commands/npm-fund) for details. -#### `script-shell` +#### `dry-run` + +* Default: false +* Type: Boolean -* Default: '/bin/sh' on POSIX systems, 'cmd.exe' on Windows -* Type: null or String +Indicates that you don't want npm to make any changes and that it should +only report what it would have done. This can be passed into any of the +commands that modify your local installation, eg, `install`, `update`, +`dedupe`, `uninstall`, as well as `pack` and `publish`. -The shell to use for scripts run with the `npm exec`, `npm run` and `npm -init ` commands. +Note: This is NOT honored by other network related commands, eg `dist-tags`, +`owner`, etc. - - +#### `workspace` + +* Default: +* Type: String (can be set multiple times) + +Enable running a command in the context of the configured workspaces of the +current project while filtering by running only the workspaces defined by +this configuration option. + +Valid values for the `workspace` config are either: + +* Workspace names +* Path to a workspace directory +* Path to a parent workspace directory (will result in selecting all + workspaces within that folder) + +When set for the `npm init` command, this may be set to the folder of a +workspace which does not yet exist, to create the folder and set it up as a +brand new workspace within the project. + +This value is not exported to the environment for child processes. + +#### `workspaces` + +* Default: null +* Type: null or Boolean + +Set to true to run the command in the context of **all** configured +workspaces. + +Explicitly setting this to false will cause commands like `install` to +ignore workspaces altogether. When not set explicitly: + +- Commands that operate on the `node_modules` tree (install, update, etc.) +will link workspaces into the `node_modules` folder. - Commands that do +other things (test, exec, publish, etc.) will operate on the root project, +_unless_ one or more workspaces are specified in the `workspace` config. + +This value is not exported to the environment for child processes. + +#### `include-workspace-root` + +* Default: false +* Type: Boolean + +Include the workspace root when workspaces are enabled for a command. + +When false, specifying individual workspaces via the `workspace` config, or +all workspaces via the `workspaces` flag, will cause npm to operate only on +the specified workspaces, and not on the root project. + +This value is not exported to the environment for child processes. + +#### `install-links` + +* Default: false +* Type: Boolean - +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. ### See Also diff --git a/deps/npm/docs/content/commands/npm-completion.md b/deps/npm/docs/content/commands/npm-completion.md index d73a98f2e50..8cbc71306c8 100644 --- a/deps/npm/docs/content/commands/npm-completion.md +++ b/deps/npm/docs/content/commands/npm-completion.md @@ -6,19 +6,10 @@ description: Tab Completion for npm ### Synopsis - - - - ```bash npm completion ``` - - - - - Note: This command is unaware of workspaces. ### Description diff --git a/deps/npm/docs/content/commands/npm-config.md b/deps/npm/docs/content/commands/npm-config.md index 809e42a1be1..311183b9170 100644 --- a/deps/npm/docs/content/commands/npm-config.md +++ b/deps/npm/docs/content/commands/npm-config.md @@ -6,10 +6,6 @@ description: Manage the npm configuration files ### Synopsis - - - - ```bash npm config set = [= ...] npm config get [ [ ...]] @@ -20,11 +16,6 @@ npm config edit alias: c ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -102,9 +93,6 @@ global config. ### Configuration - - - #### `json` * Default: false @@ -117,15 +105,10 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -136,9 +119,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - #### `editor` * Default: The EDITOR or VISUAL environment variables, or 'notepad.exe' on @@ -147,9 +127,6 @@ folder instead of the current working directory. See The command to run for `npm edit` and `npm config edit`. - - - #### `location` * Default: "user" unless `--global` is passed, which will also set this value @@ -167,9 +144,6 @@ instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - #### `long` * Default: false @@ -177,11 +151,6 @@ instead of the current working directory. See Show extended information in `ls`, `search`, and `help-search`. - - - - - ### See Also * [npm folders](/configuring-npm/folders) diff --git a/deps/npm/docs/content/commands/npm-dedupe.md b/deps/npm/docs/content/commands/npm-dedupe.md index 570e018342f..f7fff73dc17 100644 --- a/deps/npm/docs/content/commands/npm-dedupe.md +++ b/deps/npm/docs/content/commands/npm-dedupe.md @@ -6,21 +6,12 @@ description: Reduce duplication in the package tree ### Synopsis - - - - ```bash npm dedupe alias: ddp ``` - - - - - ### Description Searches the local package tree and attempts to simplify the overall @@ -86,9 +77,6 @@ values in `package.json` you can run: `npm update --save` instead. ### Configuration - - - #### `global-style` * Default: false @@ -101,9 +89,6 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. - - - #### `legacy-bundling` * Default: false @@ -114,9 +99,6 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. - - - #### `strict-peer-deps` * Default: false @@ -136,9 +118,6 @@ When such and override is performed, a warning is printed, explaining the conflict and the packages involved. If `--strict-peer-deps` is set, then this warning is treated as a failure. - - - #### `package-lock` * Default: true @@ -149,9 +128,6 @@ will also prevent _writing_ `package-lock.json` if `save` is true. This configuration does not affect `npm ci`. - - - #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -170,9 +146,6 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. - - - #### `ignore-scripts` * Default: false @@ -185,9 +158,6 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - - #### `audit` * Default: true @@ -198,9 +168,6 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. - - - #### `bin-links` * Default: true @@ -213,9 +180,6 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. - - - #### `fund` * Default: true @@ -225,9 +189,6 @@ When "true" displays the message at the end of each `npm install` acknowledging the number of dependencies looking for funding. See [`npm fund`](/commands/npm-fund) for details. - - - #### `dry-run` * Default: false @@ -241,9 +202,6 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. - - - #### `workspace` * Default: @@ -266,9 +224,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -287,9 +242,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -303,9 +255,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - #### `install-links` * Default: false @@ -315,11 +264,6 @@ When set file: protocol dependencies that exist outside of the project root will be packed and installed as regular dependencies instead of creating a symlink. This option has no effect on workspaces. - - - - - ### See Also * [npm find-dupes](/commands/npm-find-dupes) diff --git a/deps/npm/docs/content/commands/npm-deprecate.md b/deps/npm/docs/content/commands/npm-deprecate.md index 4345120d374..146aab88c5b 100644 --- a/deps/npm/docs/content/commands/npm-deprecate.md +++ b/deps/npm/docs/content/commands/npm-deprecate.md @@ -6,19 +6,10 @@ description: Deprecate a version of a package ### Synopsis - - - - ```bash -npm deprecate [@] +npm deprecate ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -45,15 +36,12 @@ In this case, a version `my-thing@1.0.0-beta.0` will also be deprecated. You must be the package owner to deprecate something. See the `owner` and `adduser` help topics. -To un-deprecate a package, specify an empty string (`""`) for the `message` -argument. Note that you must use double quotes with no space between them to +To un-deprecate a package, specify an empty string (`""`) for the `message` +argument. Note that you must use double quotes with no space between them to format an empty string. ### Configuration - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -61,9 +49,6 @@ format an empty string. The base URL of the npm registry. - - - #### `otp` * Default: null @@ -75,13 +60,9 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [npm publish](/commands/npm-publish) * [npm registry](/using-npm/registry) * [npm owner](/commands/npm-owner) diff --git a/deps/npm/docs/content/commands/npm-diff.md b/deps/npm/docs/content/commands/npm-diff.md index 7183e4a2b75..852fcf3d066 100644 --- a/deps/npm/docs/content/commands/npm-diff.md +++ b/deps/npm/docs/content/commands/npm-diff.md @@ -6,19 +6,10 @@ description: The registry diff command ### Synopsis - - - - ```bash npm diff [...] ``` - - - - - ### Description Similar to its `git diff` counterpart, this command will print diff patches @@ -158,9 +149,6 @@ located within the folder `./lib/` and changed lines of code within the ### Configuration - - - #### `diff` * Default: @@ -168,9 +156,6 @@ located within the folder `./lib/` and changed lines of code within the Define arguments to compare in `npm diff`. - - - #### `diff-name-only` * Default: false @@ -178,9 +163,6 @@ Define arguments to compare in `npm diff`. Prints only filenames when using `npm diff`. - - - #### `diff-unified` * Default: 3 @@ -188,9 +170,6 @@ Prints only filenames when using `npm diff`. The number of lines of context to print in `npm diff`. - - - #### `diff-ignore-all-space` * Default: false @@ -198,9 +177,6 @@ The number of lines of context to print in `npm diff`. Ignore whitespace when comparing lines in `npm diff`. - - - #### `diff-no-prefix` * Default: false @@ -211,9 +187,6 @@ Do not show any source or destination prefix in `npm diff` output. Note: this causes `npm diff` to ignore the `--diff-src-prefix` and `--diff-dst-prefix` configs. - - - #### `diff-src-prefix` * Default: "a/" @@ -221,9 +194,6 @@ Note: this causes `npm diff` to ignore the `--diff-src-prefix` and Source prefix to be used in `npm diff` output. - - - #### `diff-dst-prefix` * Default: "b/" @@ -231,9 +201,6 @@ Source prefix to be used in `npm diff` output. Destination prefix to be used in `npm diff` output. - - - #### `diff-text` * Default: false @@ -241,15 +208,10 @@ Destination prefix to be used in `npm diff` output. Treat all files as text in `npm diff`. - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -260,9 +222,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - #### `tag` * Default: "latest" @@ -277,9 +236,6 @@ command, if no explicit tag is given. When used by the `npm diff` command, this is the tag used to fetch the tarball that will be compared with the local files by default. - - - #### `workspace` * Default: @@ -302,9 +258,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -323,9 +276,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -338,11 +288,6 @@ all workspaces via the `workspaces` flag, will cause npm to operate only on the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - - - ## See Also * [npm outdated](/commands/npm-outdated) diff --git a/deps/npm/docs/content/commands/npm-dist-tag.md b/deps/npm/docs/content/commands/npm-dist-tag.md index b9caf1fbe7f..d22831d2ce8 100644 --- a/deps/npm/docs/content/commands/npm-dist-tag.md +++ b/deps/npm/docs/content/commands/npm-dist-tag.md @@ -6,32 +6,23 @@ description: Modify package distribution tags ### Synopsis - - - - ```bash -npm dist-tag add @ [] -npm dist-tag rm -npm dist-tag ls [] +npm dist-tag add [] +npm dist-tag rm +npm dist-tag ls [] alias: dist-tags ``` - - - - - ### Description Add, remove, and enumerate distribution tags on a package: -* add: Tags the specified version of the package with the specified tag, or - the `--tag` config if not specified. If you have two-factor - authentication on auth-and-writes then you’ll need to include a one-time - password on the command line with `--otp `, or at the - OTP prompt. +* add: Tags the specified version of the package with the specified tag, + or the `--tag` config if not specified. If you have two-factor + authentication on auth-and-writes then you’ll need to include a + one-time password on the command line with + `--otp `, or at the OTP prompt. * rm: Clear a tag that is no longer in use from the package. If you have two-factor authentication on auth-and-writes then you’ll need to include @@ -99,9 +90,6 @@ not begin with a number or the letter `v`. ### Configuration - - - #### `workspace` * Default: @@ -124,9 +112,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -145,9 +130,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -161,13 +143,9 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [npm publish](/commands/npm-publish) * [npm install](/commands/npm-install) * [npm dedupe](/commands/npm-dedupe) diff --git a/deps/npm/docs/content/commands/npm-docs.md b/deps/npm/docs/content/commands/npm-docs.md index 790d563bdb1..e4c88dc19d3 100644 --- a/deps/npm/docs/content/commands/npm-docs.md +++ b/deps/npm/docs/content/commands/npm-docs.md @@ -6,21 +6,12 @@ description: Open documentation for a package in a web browser ### Synopsis - - - - ```bash npm docs [ [ ...]] alias: home ``` - - - - - ### Description This command tries to guess at the likely location of a package's @@ -31,9 +22,6 @@ the `name` property. ### Configuration - - - #### `browser` * Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` @@ -46,9 +34,6 @@ terminal. Set to `true` to use default system URL opener. - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -56,9 +41,6 @@ Set to `true` to use default system URL opener. The base URL of the npm registry. - - - #### `workspace` * Default: @@ -81,9 +63,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -102,9 +81,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -118,11 +94,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - - - ### See Also * [npm view](/commands/npm-view) diff --git a/deps/npm/docs/content/commands/npm-doctor.md b/deps/npm/docs/content/commands/npm-doctor.md index 7fb63bab16e..34d925bce91 100644 --- a/deps/npm/docs/content/commands/npm-doctor.md +++ b/deps/npm/docs/content/commands/npm-doctor.md @@ -6,19 +6,10 @@ description: Check your npm environment ### Synopsis - - - - ```bash npm doctor ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -113,9 +104,6 @@ reset the cache. ### Configuration - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -123,11 +111,6 @@ reset the cache. The base URL of the npm registry. - - - - - ### See Also * [npm bugs](/commands/npm-bugs) diff --git a/deps/npm/docs/content/commands/npm-edit.md b/deps/npm/docs/content/commands/npm-edit.md index 39fc49592c5..9f6750ff175 100644 --- a/deps/npm/docs/content/commands/npm-edit.md +++ b/deps/npm/docs/content/commands/npm-edit.md @@ -6,19 +6,10 @@ description: Edit an installed package ### Synopsis - - - - ```bash npm edit [/...] ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -36,9 +27,6 @@ changes to your locally installed copy. ### Configuration - - - #### `editor` * Default: The EDITOR or VISUAL environment variables, or 'notepad.exe' on @@ -47,11 +35,6 @@ changes to your locally installed copy. The command to run for `npm edit` and `npm config edit`. - - - - - ### See Also * [npm folders](/configuring-npm/folders) diff --git a/deps/npm/docs/content/commands/npm-exec.md b/deps/npm/docs/content/commands/npm-exec.md index 8ccfa75c733..b968671ed84 100644 --- a/deps/npm/docs/content/commands/npm-exec.md +++ b/deps/npm/docs/content/commands/npm-exec.md @@ -6,10 +6,6 @@ description: Run a command from a local or remote npm package ### Synopsis - - - - ```bash npm exec -- [@] [args...] npm exec --package=[@] -- [args...] @@ -19,11 +15,6 @@ npm exec --package=foo -c ' [args...]' alias: x ``` - - - - - ### Description This command allows you to run an arbitrary command from an npm package @@ -119,18 +110,12 @@ $ npm exec -- foo@latest bar --package=@npmcli/foo ### Configuration - - - #### `package` * Default: * Type: String (can be set multiple times) -The package to install for [`npm exec`](/commands/npm-exec) - - - +The package or packages to install for [`npm exec`](/commands/npm-exec) #### `call` @@ -145,9 +130,6 @@ npm exec --package yo --package generator-node --call "yo node" ``` - - - #### `workspace` * Default: @@ -170,9 +152,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -191,9 +170,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -207,11 +183,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - - - ### Examples Run the version of `tap` in the local dependencies, with the provided diff --git a/deps/npm/docs/content/commands/npm-explain.md b/deps/npm/docs/content/commands/npm-explain.md index 76522105658..382429ad7e9 100644 --- a/deps/npm/docs/content/commands/npm-explain.md +++ b/deps/npm/docs/content/commands/npm-explain.md @@ -6,29 +6,21 @@ description: Explain installed packages ### Synopsis - - - - ```bash -npm explain +npm explain alias: why ``` - - - - - ### Description This command will print the chain of dependencies causing a given package to be installed in the current project. -Positional arguments can be either folders within `node_modules`, or -`name@version-range` specifiers, which will select the dependency -relationships to explain. +If one or more package specs are provided, then only packages matching +one of the specifiers will have their relationships explained. + +The package spec can also refer to a folder within `./node_modules` For example, running `npm explain glob` within npm's source tree will show: @@ -63,9 +55,6 @@ node_modules/nyc/node_modules/find-up ``` ### Configuration - - - #### `json` * Default: false @@ -78,9 +67,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `workspace` * Default: @@ -103,13 +89,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [npm config](/commands/npm-config) * [npmrc](/configuring-npm/npmrc) * [npm folders](/configuring-npm/folders) diff --git a/deps/npm/docs/content/commands/npm-explore.md b/deps/npm/docs/content/commands/npm-explore.md index 90753c7e091..cc312a0d28c 100644 --- a/deps/npm/docs/content/commands/npm-explore.md +++ b/deps/npm/docs/content/commands/npm-explore.md @@ -6,19 +6,10 @@ description: Browse an installed package ### Synopsis - - - - ```bash npm explore [ -- ] ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -40,9 +31,6 @@ sure to use `npm rebuild ` if you make any changes. ### Configuration - - - #### `shell` * Default: SHELL environment variable, or "bash" on Posix, or "cmd.exe" on @@ -51,11 +39,6 @@ sure to use `npm rebuild ` if you make any changes. The shell to run for the `npm explore` command. - - - - - ### See Also * [npm folders](/configuring-npm/folders) diff --git a/deps/npm/docs/content/commands/npm-find-dupes.md b/deps/npm/docs/content/commands/npm-find-dupes.md index 4da6c296c6b..723f04cfb11 100644 --- a/deps/npm/docs/content/commands/npm-find-dupes.md +++ b/deps/npm/docs/content/commands/npm-find-dupes.md @@ -6,19 +6,10 @@ description: Find duplication in the package tree ### Synopsis - - - - ```bash npm find-dupes ``` - - - - - ### Description Runs `npm dedupe` in `--dry-run` mode, making npm only output the @@ -26,9 +17,6 @@ duplications, without actually changing the package tree. ### Configuration - - - #### `global-style` * Default: false @@ -41,9 +29,6 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. - - - #### `legacy-bundling` * Default: false @@ -54,9 +39,6 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. - - - #### `strict-peer-deps` * Default: false @@ -76,9 +58,6 @@ When such and override is performed, a warning is printed, explaining the conflict and the packages involved. If `--strict-peer-deps` is set, then this warning is treated as a failure. - - - #### `package-lock` * Default: true @@ -89,9 +68,6 @@ will also prevent _writing_ `package-lock.json` if `save` is true. This configuration does not affect `npm ci`. - - - #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -110,9 +86,6 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. - - - #### `ignore-scripts` * Default: false @@ -125,9 +98,6 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - - #### `audit` * Default: true @@ -138,9 +108,6 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. - - - #### `bin-links` * Default: true @@ -153,9 +120,6 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. - - - #### `fund` * Default: true @@ -165,9 +129,6 @@ When "true" displays the message at the end of each `npm install` acknowledging the number of dependencies looking for funding. See [`npm fund`](/commands/npm-fund) for details. - - - #### `workspace` * Default: @@ -190,9 +151,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -211,9 +169,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -227,9 +182,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - #### `install-links` * Default: false @@ -239,11 +191,6 @@ When set file: protocol dependencies that exist outside of the project root will be packed and installed as regular dependencies instead of creating a symlink. This option has no effect on workspaces. - - - - - ### See Also * [npm dedupe](/commands/npm-dedupe) diff --git a/deps/npm/docs/content/commands/npm-fund.md b/deps/npm/docs/content/commands/npm-fund.md index 5b96e91ab8c..25a6735ec75 100644 --- a/deps/npm/docs/content/commands/npm-fund.md +++ b/deps/npm/docs/content/commands/npm-fund.md @@ -6,39 +6,30 @@ description: Retrieve funding information ### Synopsis - - - - ```bash -npm fund [[<@scope>/]] +npm fund [] ``` - - - - - ### Description This command retrieves information on how to fund the dependencies of a given project. If no package name is provided, it will list all -dependencies that are looking for funding in a tree structure, listing the -type of funding and the url to visit. If a package name is provided then it -tries to open its funding url using the `--browser` config param; if there -are multiple funding sources for the package, the user will be instructed -to pass the `--which` option to disambiguate. +dependencies that are looking for funding in a tree structure, listing +the type of funding and the url to visit. If a package name is provided +then it tries to open its funding url using the `--browser` config +param; if there are multiple funding sources for the package, the user +will be instructed to pass the `--which` option to disambiguate. The list will avoid duplicated entries and will stack all packages that -share the same url as a single entry. Thus, the list does not have the same -shape of the output from `npm ls`. +share the same url as a single entry. Thus, the list does not have the +same shape of the output from `npm ls`. #### Example ### Workspaces support -It's possible to filter the results to only include a single workspace and its -dependencies using the `workspace` config option. +It's possible to filter the results to only include a single workspace +and its dependencies using the `workspace` config option. #### Example: @@ -58,8 +49,8 @@ test-workspaces-fund@1.0.0 `-- bar@2.0.0 ``` -And here is an example of the expected result when filtering only by -a specific workspace `a` in the same project: +And here is an example of the expected result when filtering only by a +specific workspace `a` in the same project: ```bash $ npm fund -w a @@ -72,9 +63,6 @@ test-workspaces-fund@1.0.0 ### Configuration - - - #### `json` * Default: false @@ -87,9 +75,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `browser` * Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` @@ -102,9 +87,6 @@ terminal. Set to `true` to use default system URL opener. - - - #### `unicode` * Default: false on windows, true on mac/unix systems with a unicode locale, @@ -114,9 +96,6 @@ Set to `true` to use default system URL opener. When set to true, npm uses unicode characters in the tree output. When false, it uses ascii characters instead of unicode glyphs. - - - #### `workspace` * Default: @@ -139,9 +118,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `which` * Default: null @@ -149,13 +125,9 @@ This value is not exported to the environment for child processes. If there are multiple funding sources, which 1-indexed source URL to open. - - - - - ## See Also +* [package spec](/using-npm/package-spec) * [npm install](/commands/npm-install) * [npm docs](/commands/npm-docs) * [npm ls](/commands/npm-ls) diff --git a/deps/npm/docs/content/commands/npm-help-search.md b/deps/npm/docs/content/commands/npm-help-search.md index 152f9f6bec1..d92ea03aefb 100644 --- a/deps/npm/docs/content/commands/npm-help-search.md +++ b/deps/npm/docs/content/commands/npm-help-search.md @@ -6,19 +6,10 @@ description: Search npm help documentation ### Synopsis - - - - ```bash npm help-search ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -34,9 +25,6 @@ directly. ### Configuration - - - #### `long` * Default: false @@ -44,11 +32,6 @@ directly. Show extended information in `ls`, `search`, and `help-search`. - - - - - ### See Also * [npm](/commands/npm) diff --git a/deps/npm/docs/content/commands/npm-help.md b/deps/npm/docs/content/commands/npm-help.md index 83c595db696..48af6da7fa0 100644 --- a/deps/npm/docs/content/commands/npm-help.md +++ b/deps/npm/docs/content/commands/npm-help.md @@ -6,21 +6,12 @@ description: Get help on npm ### Synopsis - - - - ```bash npm help [] alias: hlep ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -34,9 +25,6 @@ topic, so unique matches are equivalent to specifying a topic name. ### Configuration - - - #### `viewer` * Default: "man" on Posix, "browser" on Windows @@ -46,11 +34,6 @@ The program to use to view help content. Set to `"browser"` to view html help content in the default web browser. - - - - - ### See Also * [npm](/commands/npm) diff --git a/deps/npm/docs/content/commands/npm-hook.md b/deps/npm/docs/content/commands/npm-hook.md index 4a9805d02f9..1304512e33a 100644 --- a/deps/npm/docs/content/commands/npm-hook.md +++ b/deps/npm/docs/content/commands/npm-hook.md @@ -6,10 +6,6 @@ description: Manage registry hooks ### Synopsis - - - - ```bash npm hook add [--type=] npm hook ls [pkg] @@ -17,11 +13,6 @@ npm hook rm npm hook update ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -94,9 +85,6 @@ $ npm hook rm id-deadbeef ### Configuration - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -104,9 +92,6 @@ $ npm hook rm id-deadbeef The base URL of the npm registry. - - - #### `otp` * Default: null @@ -118,11 +103,6 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. - - - - - ### See Also * ["Introducing Hooks" blog post](https://blog.npmjs.org/post/145260155635/introducing-hooks-get-notifications-of-npm) diff --git a/deps/npm/docs/content/commands/npm-init.md b/deps/npm/docs/content/commands/npm-init.md index 5a7dd4c97ac..cf8bb3936ac 100644 --- a/deps/npm/docs/content/commands/npm-init.md +++ b/deps/npm/docs/content/commands/npm-init.md @@ -6,23 +6,13 @@ description: Create a package.json file ### Synopsis - - - - ```bash -npm init [--force|-f|--yes|-y|--scope] +npm init (same as `npx ) npm init <@scope> (same as `npx <@scope>/create`) -npm init [<@scope>/] (same as `npx [<@scope>/]create-`) aliases: create, innit ``` - - - - - ### Description `npm init ` can be used to set up a new or existing npm @@ -39,6 +29,8 @@ follows: * `npm init foo` -> `npm exec create-foo` * `npm init @usr/foo` -> `npm exec @usr/create-foo` * `npm init @usr` -> `npm exec @usr/create` +* `npm init @usr@2.0.0` -> `npm exec @usr/create@2.0.0` +* `npm init @usr/foo@2.0.0` -> `npm exec @usr/create-foo@2.0.0` If the initializer is omitted (by just calling `npm init`), init will fall back to legacy init behavior. It will ask you a bunch of questions, and @@ -164,9 +156,6 @@ dot to represent the current directory in that context, e.g: `react-app .`: ### Configuration - - - #### `yes` * Default: null @@ -175,9 +164,6 @@ dot to represent the current directory in that context, e.g: `react-app .`: Automatically answer "yes" to any prompts that npm might print on the command line. - - - #### `force` * Default: false @@ -204,8 +190,35 @@ mistakes, unnecessary performance degradation, and malicious input. If you don't have a clear idea of what you want to do, it is strongly recommended that you do not use this option! - - +#### `scope` + +* Default: the scope of the current project, if any, or "" +* Type: String + +Associate an operation with a scope for a scoped registry. + +Useful when logging in to or out of a private registry: + +``` +# log in, linking the scope to the custom registry +npm login --scope=@mycorp --registry=https://registry.mycorp.com + +# log out, removing the link and the auth token +npm logout --scope=@mycorp +``` + +This will cause `@mycorp` to be mapped to the registry for future +installation of packages specified according to the pattern +`@mycorp/package`. + +This will also cause `npm init` to create a scoped package. + +``` +# accept all defaults, and create a package named "@foo/whatever", +# instead of just named "whatever" +npm init --scope=@foo --yes +``` + #### `workspace` @@ -229,9 +242,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -250,8 +260,13 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - +#### `workspaces-update` + +* Default: true +* Type: Boolean + +If set to true, the npm cli will run an update after operations that may +possibly change the workspaces installed to the `node_modules` folder. #### `include-workspace-root` @@ -266,13 +281,9 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [init-package-json module](http://npm.im/init-package-json) * [package.json](/configuring-npm/package-json) * [npm version](/commands/npm-version) diff --git a/deps/npm/docs/content/commands/npm-install-ci-test.md b/deps/npm/docs/content/commands/npm-install-ci-test.md index 0d9470acf58..c6c7f2196da 100644 --- a/deps/npm/docs/content/commands/npm-install-ci-test.md +++ b/deps/npm/docs/content/commands/npm-install-ci-test.md @@ -6,42 +6,120 @@ description: Install a project with a clean slate and run tests ### Synopsis - - - - ```bash npm install-ci-test alias: cit ``` - - - - - ### Description This command runs `npm ci` followed immediately by `npm test`. ### Configuration - - - -#### `audit` +#### `save` + +* Default: `true` unless when using `npm update` where it defaults to `false` +* Type: Boolean + +Save installed packages to a `package.json` file as dependencies. + +When used with the `npm rm` command, removes the dependency from +`package.json`. + +Will also prevent writing to `package-lock.json` if set to `false`. + +#### `save-exact` + +* Default: false +* Type: Boolean + +Dependencies saved to package.json will be configured with an exact version +rather than using npm's default semver range operator. + +#### `global` + +* Default: false +* Type: Boolean + +Operates in "global" mode, so that packages are installed into the `prefix` +folder instead of the current working directory. See +[folders](/configuring-npm/folders) for more on the differences in behavior. + +* packages are installed into the `{prefix}/lib/node_modules` folder, instead + of the current working directory. +* bin files are linked to `{prefix}/bin` +* man pages are linked to `{prefix}/share/man` + +#### `global-style` + +* Default: false +* Type: Boolean + +Causes npm to install the package into your local `node_modules` folder with +the same layout it uses with the global `node_modules` folder. Only your +direct dependencies will show in `node_modules` and everything they depend +on will be flattened in their `node_modules` folders. This obviously will +eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` +will be preferred. + +#### `legacy-bundling` + +* Default: false +* Type: Boolean + +Causes npm to install the package such that versions of npm prior to 1.4, +such as the one included with node 0.8, can install the package. This +eliminates all automatic deduping. If used with `global-style` this option +will be preferred. + +#### `omit` + +* Default: 'dev' if the `NODE_ENV` environment variable is set to + 'production', otherwise empty. +* Type: "dev", "optional", or "peer" (can be set multiple times) + +Dependency types to omit from the installation tree on disk. + +Note that these dependencies _are_ still resolved and added to the +`package-lock.json` or `npm-shrinkwrap.json` file. They are just not +physically installed on disk. + +If a package type appears in both the `--include` and `--omit` lists, then +it will be included. + +If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment +variable will be set to `'production'` for all lifecycle scripts. + +#### `strict-peer-deps` + +* Default: false +* Type: Boolean + +If set to `true`, and `--legacy-peer-deps` is not set, then _any_ +conflicting `peerDependencies` will be treated as an install failure, even +if npm could reasonably guess the appropriate resolution based on non-peer +dependency relationships. + +By default, conflicting `peerDependencies` deep in the dependency graph will +be resolved using the nearest non-peer dependency specification, even if +doing so will result in some packages receiving a peer dependency outside +the range set in their package's `peerDependencies` object. + +When such and override is performed, a warning is printed, explaining the +conflict and the packages involved. If `--strict-peer-deps` is set, then +this warning is treated as a failure. + +#### `package-lock` * Default: true * Type: Boolean -When "true" submit audit reports alongside the current npm command to the -default registry and all registries configured for scopes. See the -documentation for [`npm audit`](/commands/npm-audit) for details on what is -submitted. +If set to false, then ignore `package-lock.json` files when installing. This +will also prevent _writing_ `package-lock.json` if `save` is true. - - +This configuration does not affect `npm ci`. #### `foreground-scripts` @@ -55,9 +133,6 @@ input, output, and error with the main npm process. Note that this will generally make installs run slower, and be much noisier, but can be useful for debugging. - - - #### `ignore-scripts` * Default: false @@ -70,21 +145,111 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - +#### `audit` + +* Default: true +* Type: Boolean + +When "true" submit audit reports alongside the current npm command to the +default registry and all registries configured for scopes. See the +documentation for [`npm audit`](/commands/npm-audit) for details on what is +submitted. + +#### `bin-links` + +* Default: true +* Type: Boolean + +Tells npm to create symlinks (or `.cmd` shims on Windows) for package +executables. + +Set to false to have it not do this. This can be used to work around the +fact that some file systems don't support symlinks, even on ostensibly Unix +systems. + +#### `fund` + +* Default: true +* Type: Boolean + +When "true" displays the message at the end of each `npm install` +acknowledging the number of dependencies looking for funding. See [`npm +fund`](/commands/npm-fund) for details. -#### `script-shell` +#### `dry-run` + +* Default: false +* Type: Boolean -* Default: '/bin/sh' on POSIX systems, 'cmd.exe' on Windows -* Type: null or String +Indicates that you don't want npm to make any changes and that it should +only report what it would have done. This can be passed into any of the +commands that modify your local installation, eg, `install`, `update`, +`dedupe`, `uninstall`, as well as `pack` and `publish`. -The shell to use for scripts run with the `npm exec`, `npm run` and `npm -init ` commands. +Note: This is NOT honored by other network related commands, eg `dist-tags`, +`owner`, etc. - - +#### `workspace` + +* Default: +* Type: String (can be set multiple times) + +Enable running a command in the context of the configured workspaces of the +current project while filtering by running only the workspaces defined by +this configuration option. + +Valid values for the `workspace` config are either: + +* Workspace names +* Path to a workspace directory +* Path to a parent workspace directory (will result in selecting all + workspaces within that folder) + +When set for the `npm init` command, this may be set to the folder of a +workspace which does not yet exist, to create the folder and set it up as a +brand new workspace within the project. + +This value is not exported to the environment for child processes. + +#### `workspaces` + +* Default: null +* Type: null or Boolean + +Set to true to run the command in the context of **all** configured +workspaces. + +Explicitly setting this to false will cause commands like `install` to +ignore workspaces altogether. When not set explicitly: + +- Commands that operate on the `node_modules` tree (install, update, etc.) +will link workspaces into the `node_modules` folder. - Commands that do +other things (test, exec, publish, etc.) will operate on the root project, +_unless_ one or more workspaces are specified in the `workspace` config. + +This value is not exported to the environment for child processes. + +#### `include-workspace-root` + +* Default: false +* Type: Boolean + +Include the workspace root when workspaces are enabled for a command. + +When false, specifying individual workspaces via the `workspace` config, or +all workspaces via the `workspaces` flag, will cause npm to operate only on +the specified workspaces, and not on the root project. + +This value is not exported to the environment for child processes. + +#### `install-links` + +* Default: false +* Type: Boolean - +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. ### See Also diff --git a/deps/npm/docs/content/commands/npm-install-test.md b/deps/npm/docs/content/commands/npm-install-test.md index 18e374869d5..aa1ff35bc45 100644 --- a/deps/npm/docs/content/commands/npm-install-test.md +++ b/deps/npm/docs/content/commands/npm-install-test.md @@ -6,30 +6,12 @@ description: Install package(s) and run tests ### Synopsis - - - - ```bash -npm install-test [<@scope>/] -npm install-test [<@scope>/]@ -npm install-test [<@scope>/]@ -npm install-test [<@scope>/]@ -npm install-test @npm: -npm install-test -npm install-test -npm install-test -npm install-test -npm install-test / +npm install-test [ ...] alias: it ``` - - - - - ### Description This command runs an `npm install` followed immediately by an `npm test`. It @@ -37,9 +19,6 @@ takes exactly the same arguments as `npm install`. ### Configuration - - - #### `save` * Default: `true` unless when using `npm update` where it defaults to `false` @@ -52,9 +31,6 @@ When used with the `npm rm` command, removes the dependency from Will also prevent writing to `package-lock.json` if set to `false`. - - - #### `save-exact` * Default: false @@ -63,15 +39,10 @@ Will also prevent writing to `package-lock.json` if set to `false`. Dependencies saved to package.json will be configured with an exact version rather than using npm's default semver range operator. - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -82,9 +53,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - #### `global-style` * Default: false @@ -97,9 +65,6 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. - - - #### `legacy-bundling` * Default: false @@ -110,9 +75,6 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. - - - #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -131,9 +93,6 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. - - - #### `strict-peer-deps` * Default: false @@ -153,9 +112,6 @@ When such and override is performed, a warning is printed, explaining the conflict and the packages involved. If `--strict-peer-deps` is set, then this warning is treated as a failure. - - - #### `package-lock` * Default: true @@ -166,9 +122,6 @@ will also prevent _writing_ `package-lock.json` if `save` is true. This configuration does not affect `npm ci`. - - - #### `foreground-scripts` * Default: false @@ -181,9 +134,6 @@ input, output, and error with the main npm process. Note that this will generally make installs run slower, and be much noisier, but can be useful for debugging. - - - #### `ignore-scripts` * Default: false @@ -196,9 +146,6 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - - #### `audit` * Default: true @@ -209,9 +156,6 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. - - - #### `bin-links` * Default: true @@ -224,9 +168,6 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. - - - #### `fund` * Default: true @@ -236,9 +177,6 @@ When "true" displays the message at the end of each `npm install` acknowledging the number of dependencies looking for funding. See [`npm fund`](/commands/npm-fund) for details. - - - #### `dry-run` * Default: false @@ -252,9 +190,6 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. - - - #### `workspace` * Default: @@ -277,9 +212,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -298,9 +230,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -314,9 +243,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - #### `install-links` * Default: false @@ -326,11 +252,6 @@ When set file: protocol dependencies that exist outside of the project root will be packed and installed as regular dependencies instead of creating a symlink. This option has no effect on workspaces. - - - - - ### See Also * [npm install](/commands/npm-install) diff --git a/deps/npm/docs/content/commands/npm-install.md b/deps/npm/docs/content/commands/npm-install.md index 318df5780e8..dc935de70aa 100644 --- a/deps/npm/docs/content/commands/npm-install.md +++ b/deps/npm/docs/content/commands/npm-install.md @@ -6,30 +6,12 @@ description: Install a package ### Synopsis - - - - ```bash -npm install [<@scope>/] -npm install [<@scope>/]@ -npm install [<@scope>/]@ -npm install [<@scope>/]@ -npm install @npm: -npm install -npm install -npm install -npm install -npm install / +npm install [ ...] aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall ``` - - - - - ### Description This command installs a package and any packages that it depends on. If the @@ -320,7 +302,7 @@ into a tarball (b). can be any valid semver range or exact version, and npm will look for any tags or refs matching that range in the remote repository, much as it would for a registry dependency. If neither `#` or - `#semver:` is specified, then `master` is used. + `#semver:` is specified, then the default branch is used. As with regular git dependencies, `dependencies` and `devDependencies` will be installed if the package has a `prepare` script before the @@ -427,9 +409,6 @@ does. These are some of the most common options related to installation. - - - #### `save` * Default: `true` unless when using `npm update` where it defaults to `false` @@ -442,9 +421,6 @@ When used with the `npm rm` command, removes the dependency from Will also prevent writing to `package-lock.json` if set to `false`. - - - #### `save-exact` * Default: false @@ -453,15 +429,10 @@ Will also prevent writing to `package-lock.json` if set to `false`. Dependencies saved to package.json will be configured with an exact version rather than using npm's default semver range operator. - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -472,9 +443,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - #### `global-style` * Default: false @@ -487,9 +455,6 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. - - - #### `legacy-bundling` * Default: false @@ -500,9 +465,6 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. - - - #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -521,9 +483,6 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. - - - #### `strict-peer-deps` * Default: false @@ -543,9 +502,6 @@ When such and override is performed, a warning is printed, explaining the conflict and the packages involved. If `--strict-peer-deps` is set, then this warning is treated as a failure. - - - #### `package-lock` * Default: true @@ -556,9 +512,6 @@ will also prevent _writing_ `package-lock.json` if `save` is true. This configuration does not affect `npm ci`. - - - #### `foreground-scripts` * Default: false @@ -571,9 +524,6 @@ input, output, and error with the main npm process. Note that this will generally make installs run slower, and be much noisier, but can be useful for debugging. - - - #### `ignore-scripts` * Default: false @@ -586,9 +536,6 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - - #### `audit` * Default: true @@ -599,9 +546,6 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. - - - #### `bin-links` * Default: true @@ -614,9 +558,6 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. - - - #### `fund` * Default: true @@ -626,9 +567,6 @@ When "true" displays the message at the end of each `npm install` acknowledging the number of dependencies looking for funding. See [`npm fund`](/commands/npm-fund) for details. - - - #### `dry-run` * Default: false @@ -642,9 +580,6 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. - - - #### `workspace` * Default: @@ -667,9 +602,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -688,9 +620,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -704,9 +633,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - #### `install-links` * Default: false @@ -716,11 +642,6 @@ When set file: protocol dependencies that exist outside of the project root will be packed and installed as regular dependencies instead of creating a symlink. This option has no effect on workspaces. - - - - - ### Algorithm Given a `package{dep}` structure: `A{B,C}, B{C}, C{D}`, diff --git a/deps/npm/docs/content/commands/npm-link.md b/deps/npm/docs/content/commands/npm-link.md index 34c67aa3def..07917bc8330 100644 --- a/deps/npm/docs/content/commands/npm-link.md +++ b/deps/npm/docs/content/commands/npm-link.md @@ -6,22 +6,12 @@ description: Symlink a package folder ### Synopsis - - - - ```bash -npm link (in package dir) -npm link [<@scope>/][@] +npm link [] alias: ln ``` - - - - - ### Description This is handy for installing your own stuff, so that you can work on it and @@ -29,11 +19,11 @@ test iteratively without having to continually rebuild. Package linking is a two-step process. -First, `npm link` in a package folder will create a symlink in the global -folder `{prefix}/lib/node_modules/` that links to the package -where the `npm link` command was executed. It will also link any bins in -the package to `{prefix}/bin/{name}`. Note that `npm link` uses the global -prefix (see `npm prefix -g` for its value). +First, `npm link` in a package folder with no arguments will create a +symlink in the global folder `{prefix}/lib/node_modules/` that +links to the package where the `npm link` command was executed. It will +also link any bins in the package to `{prefix}/bin/{name}`. Note that +`npm link` uses the global prefix (see `npm prefix -g` for its value). Next, in some other location, `npm link package-name` will create a symbolic link from globally-installed `package-name` to `node_modules/` of @@ -120,9 +110,6 @@ workspace(s). ### Configuration - - - #### `save` * Default: `true` unless when using `npm update` where it defaults to `false` @@ -135,9 +122,6 @@ When used with the `npm rm` command, removes the dependency from Will also prevent writing to `package-lock.json` if set to `false`. - - - #### `save-exact` * Default: false @@ -146,15 +130,10 @@ Will also prevent writing to `package-lock.json` if set to `false`. Dependencies saved to package.json will be configured with an exact version rather than using npm's default semver range operator. - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -165,9 +144,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - #### `global-style` * Default: false @@ -180,9 +156,6 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. - - - #### `legacy-bundling` * Default: false @@ -193,9 +166,6 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. - - - #### `strict-peer-deps` * Default: false @@ -215,9 +185,6 @@ When such and override is performed, a warning is printed, explaining the conflict and the packages involved. If `--strict-peer-deps` is set, then this warning is treated as a failure. - - - #### `package-lock` * Default: true @@ -228,9 +195,6 @@ will also prevent _writing_ `package-lock.json` if `save` is true. This configuration does not affect `npm ci`. - - - #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -249,9 +213,6 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. - - - #### `ignore-scripts` * Default: false @@ -264,9 +225,6 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - - #### `audit` * Default: true @@ -277,9 +235,6 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. - - - #### `bin-links` * Default: true @@ -292,9 +247,6 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. - - - #### `fund` * Default: true @@ -304,9 +256,6 @@ When "true" displays the message at the end of each `npm install` acknowledging the number of dependencies looking for funding. See [`npm fund`](/commands/npm-fund) for details. - - - #### `dry-run` * Default: false @@ -320,9 +269,6 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. - - - #### `workspace` * Default: @@ -345,9 +291,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -366,9 +309,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -382,9 +322,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - #### `install-links` * Default: false @@ -394,13 +331,9 @@ When set file: protocol dependencies that exist outside of the project root will be packed and installed as regular dependencies instead of creating a symlink. This option has no effect on workspaces. - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [npm developers](/using-npm/developers) * [package.json](/configuring-npm/package-json) * [npm install](/commands/npm-install) diff --git a/deps/npm/docs/content/commands/npm-logout.md b/deps/npm/docs/content/commands/npm-logout.md index f0dd5cb856e..8ac3948f116 100644 --- a/deps/npm/docs/content/commands/npm-logout.md +++ b/deps/npm/docs/content/commands/npm-logout.md @@ -6,19 +6,10 @@ description: Log out of the registry ### Synopsis - - - - ```bash npm logout ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -36,9 +27,6 @@ connected to that scope, if set. ### Configuration - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -46,9 +34,6 @@ connected to that scope, if set. The base URL of the npm registry. - - - #### `scope` * Default: the scope of the current project, if any, or "" @@ -79,11 +64,6 @@ npm init --scope=@foo --yes ``` - - - - - ### See Also * [npm adduser](/commands/npm-adduser) diff --git a/deps/npm/docs/content/commands/npm-ls.md b/deps/npm/docs/content/commands/npm-ls.md index 5ad4593bfa2..43d4eb7d679 100644 --- a/deps/npm/docs/content/commands/npm-ls.md +++ b/deps/npm/docs/content/commands/npm-ls.md @@ -6,21 +6,12 @@ description: List installed packages ### Synopsis - - - - ```bash -npm ls [[<@scope>/] ...] +npm ls alias: list ``` - - - - - ### Description This command will print to stdout all the versions of packages that are @@ -36,7 +27,7 @@ packages will *also* show the paths to the specified packages. For example, running `npm ls promzard` in npm's source tree will show: ```bash -npm@@VERSION@ /path/to/npm +npm@8.19.3 /path/to/npm └─┬ init-package-json@0.0.4 └── promzard@0.1.5 ``` @@ -44,7 +35,7 @@ npm@@VERSION@ /path/to/npm It will print out extraneous, missing, and invalid packages. If a project specifies git urls for dependencies these are shown -in parentheses after the name@version to make it easier for users to +in parentheses after the `name@version` to make it easier for users to recognize potential forks of a project. The tree shown is the logical dependency tree, based on package @@ -62,7 +53,7 @@ disk would be roughly identical. With the advent of automatic install-time deduplication of dependencies in npm v3, the `ls` output was modified to display the logical dependency graph as a tree structure, since this was more useful to most users. -However, without using `npm ls -l`, it became impossible show _where_ a +However, without using `npm ls -l`, it became impossible to show _where_ a package was actually installed much of the time! With the advent of automatic installation of `peerDependencies` in npm v7, @@ -82,9 +73,6 @@ least the default human-readable `npm ls` output in npm v8. ### Configuration - - - #### `all` * Default: false @@ -94,9 +82,6 @@ When running `npm outdated` and `npm ls`, setting `--all` will show all outdated or installed packages, rather than only those directly depended upon by the current project. - - - #### `json` * Default: false @@ -109,9 +94,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `long` * Default: false @@ -119,9 +101,6 @@ Not supported by all npm commands. Show extended information in `ls`, `search`, and `help-search`. - - - #### `parseable` * Default: false @@ -130,15 +109,10 @@ Show extended information in `ls`, `search`, and `help-search`. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -149,9 +123,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - #### `depth` * Default: `Infinity` if `--all` is set, otherwise `1` @@ -162,9 +133,6 @@ The depth to go when recursing packages for `npm ls`. If not set, `npm ls` will show only the immediate dependencies of the root project. If `--all` is set, then npm will show all dependencies by default. - - - #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -183,9 +151,6 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. - - - #### `link` * Default: false @@ -193,9 +158,6 @@ variable will be set to `'production'` for all lifecycle scripts. Used with `npm ls`, limiting output to only those packages that are linked. - - - #### `package-lock-only` * Default: false @@ -210,9 +172,6 @@ instead of checking `node_modules` and downloading dependencies. For `list` this means the output will be based on the tree described by the `package-lock.json`, rather than the contents of `node_modules`. - - - #### `unicode` * Default: false on windows, true on mac/unix systems with a unicode locale, @@ -222,9 +181,6 @@ For `list` this means the output will be based on the tree described by the When set to true, npm uses unicode characters in the tree output. When false, it uses ascii characters instead of unicode glyphs. - - - #### `workspace` * Default: @@ -247,9 +203,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -268,9 +221,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -284,9 +234,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - #### `install-links` * Default: false @@ -296,13 +243,9 @@ When set file: protocol dependencies that exist outside of the project root will be packed and installed as regular dependencies instead of creating a symlink. This option has no effect on workspaces. - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [npm explain](/commands/npm-explain) * [npm config](/commands/npm-config) * [npmrc](/configuring-npm/npmrc) diff --git a/deps/npm/docs/content/commands/npm-org.md b/deps/npm/docs/content/commands/npm-org.md index 975581c860d..ca788b01fcb 100644 --- a/deps/npm/docs/content/commands/npm-org.md +++ b/deps/npm/docs/content/commands/npm-org.md @@ -6,10 +6,6 @@ description: Manage orgs ### Synopsis - - - - ```bash npm org set orgname username [developer | admin | owner] npm org rm orgname username @@ -18,11 +14,6 @@ npm org ls orgname [] alias: ogr ``` - - - - - Note: This command is unaware of workspaces. ### Example @@ -71,9 +62,6 @@ listing them, and finding specific ones and their roles. ### Configuration - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -81,9 +69,6 @@ listing them, and finding specific ones and their roles. The base URL of the npm registry. - - - #### `otp` * Default: null @@ -95,9 +80,6 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. - - - #### `json` * Default: false @@ -110,9 +92,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `parseable` * Default: false @@ -121,11 +100,6 @@ Not supported by all npm commands. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. - - - - - ### See Also * [using orgs](/using-npm/orgs) diff --git a/deps/npm/docs/content/commands/npm-outdated.md b/deps/npm/docs/content/commands/npm-outdated.md index 1bf2de039c3..0e1061ab168 100644 --- a/deps/npm/docs/content/commands/npm-outdated.md +++ b/deps/npm/docs/content/commands/npm-outdated.md @@ -6,19 +6,10 @@ description: Check for outdated packages ### Synopsis - - - - ```bash -npm outdated [[<@scope>/] ...] +npm outdated [ ...] ``` - - - - - ### Description This command will check the registry to see if any (or, specific) installed @@ -95,9 +86,6 @@ A few things to note: ### Configuration - - - #### `all` * Default: false @@ -107,9 +95,6 @@ When running `npm outdated` and `npm ls`, setting `--all` will show all outdated or installed packages, rather than only those directly depended upon by the current project. - - - #### `json` * Default: false @@ -122,9 +107,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `long` * Default: false @@ -132,9 +114,6 @@ Not supported by all npm commands. Show extended information in `ls`, `search`, and `help-search`. - - - #### `parseable` * Default: false @@ -143,15 +122,10 @@ Show extended information in `ls`, `search`, and `help-search`. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -162,9 +136,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - #### `workspace` * Default: @@ -187,13 +158,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [npm update](/commands/npm-update) * [npm dist-tag](/commands/npm-dist-tag) * [npm registry](/using-npm/registry) diff --git a/deps/npm/docs/content/commands/npm-owner.md b/deps/npm/docs/content/commands/npm-owner.md index 72dfe6a22d0..c5bace6b2bc 100644 --- a/deps/npm/docs/content/commands/npm-owner.md +++ b/deps/npm/docs/content/commands/npm-owner.md @@ -6,23 +6,14 @@ description: Manage package owners ### Synopsis - - - - ```bash -npm owner add [<@scope>/] -npm owner rm [<@scope>/] -npm owner ls [<@scope>/] +npm owner add +npm owner rm +npm owner ls alias: author ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -46,9 +37,6 @@ on the command line when changing ownership with `--otp`. ### Configuration - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -56,9 +44,6 @@ on the command line when changing ownership with `--otp`. The base URL of the npm registry. - - - #### `otp` * Default: null @@ -70,9 +55,6 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. - - - #### `workspace` * Default: @@ -95,9 +77,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -116,13 +95,9 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [npm profile](/commands/npm-profile) * [npm publish](/commands/npm-publish) * [npm registry](/using-npm/registry) diff --git a/deps/npm/docs/content/commands/npm-pack.md b/deps/npm/docs/content/commands/npm-pack.md index fa6c005e9d2..a39f0554391 100644 --- a/deps/npm/docs/content/commands/npm-pack.md +++ b/deps/npm/docs/content/commands/npm-pack.md @@ -6,24 +6,12 @@ description: Create a tarball from a package ### Synopsis - - - - ```bash -npm pack [[<@scope>/]...] +npm pack ``` - - - - - ### Configuration - - - #### `dry-run` * Default: false @@ -37,9 +25,6 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. - - - #### `json` * Default: false @@ -52,9 +37,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `pack-destination` * Default: "." @@ -62,9 +44,6 @@ Not supported by all npm commands. Directory in which `npm pack` will save tarballs. - - - #### `workspace` * Default: @@ -87,9 +66,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -108,9 +84,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -124,11 +97,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - - - ### Description For anything that's installable (that is, a package folder, tarball, @@ -144,6 +112,7 @@ If no arguments are supplied, then npm packs the current package folder. ### See Also +* [package spec](/using-npm/package-spec) * [npm-packlist package](http://npm.im/npm-packlist) * [npm cache](/commands/npm-cache) * [npm publish](/commands/npm-publish) diff --git a/deps/npm/docs/content/commands/npm-ping.md b/deps/npm/docs/content/commands/npm-ping.md index 161d7292f8c..812be9f002d 100644 --- a/deps/npm/docs/content/commands/npm-ping.md +++ b/deps/npm/docs/content/commands/npm-ping.md @@ -6,19 +6,10 @@ description: Ping npm registry ### Synopsis - - - - ```bash npm ping ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -39,9 +30,6 @@ npm ERR! 404 Not Found - GET http://www.foo.com/-/ping?write=true ### Configuration - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -49,11 +37,6 @@ npm ERR! 404 Not Found - GET http://www.foo.com/-/ping?write=true The base URL of the npm registry. - - - - - ### See Also * [npm doctor](/commands/npm-doctor) diff --git a/deps/npm/docs/content/commands/npm-pkg.md b/deps/npm/docs/content/commands/npm-pkg.md index deff7e82c69..519104457df 100644 --- a/deps/npm/docs/content/commands/npm-pkg.md +++ b/deps/npm/docs/content/commands/npm-pkg.md @@ -6,10 +6,6 @@ description: Manages your package.json ### Synopsis - - - - ```bash npm pkg set = [= ...] npm pkg get [ [ ...]] @@ -18,11 +14,6 @@ npm pkg set [[].= ...] npm pkg set [[].= ...] ``` - - - - - ### Description A command that automates the management of `package.json` files. @@ -183,9 +174,6 @@ npm pkg get name version --ws ### Configuration - - - #### `force` * Default: false @@ -212,9 +200,6 @@ mistakes, unnecessary performance degradation, and malicious input. If you don't have a clear idea of what you want to do, it is strongly recommended that you do not use this option! - - - #### `json` * Default: false @@ -227,9 +212,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `workspace` * Default: @@ -252,9 +234,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -272,11 +251,6 @@ other things (test, exec, publish, etc.) will operate on the root project, _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - - - ## See Also * [npm install](/commands/npm-install) diff --git a/deps/npm/docs/content/commands/npm-prefix.md b/deps/npm/docs/content/commands/npm-prefix.md index 6f08e43fa8c..2711501625d 100644 --- a/deps/npm/docs/content/commands/npm-prefix.md +++ b/deps/npm/docs/content/commands/npm-prefix.md @@ -6,19 +6,10 @@ description: Display prefix ### Synopsis - - - - ```bash npm prefix [-g] ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -44,15 +35,10 @@ npm prefix -g ### Configuration - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -63,11 +49,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - - - ### See Also * [npm root](/commands/npm-root) diff --git a/deps/npm/docs/content/commands/npm-profile.md b/deps/npm/docs/content/commands/npm-profile.md index af1f9d8aa10..b8cdde7e151 100644 --- a/deps/npm/docs/content/commands/npm-profile.md +++ b/deps/npm/docs/content/commands/npm-profile.md @@ -6,10 +6,6 @@ description: Change settings on your registry profile ### Synopsis - - - - ```bash npm profile enable-2fa [auth-only|auth-and-writes] npm profile disable-2fa @@ -17,11 +13,6 @@ npm profile get [] npm profile set ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -83,9 +74,6 @@ Some of these commands may not be available on non npmjs.com registries. ### Configuration - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -93,9 +81,6 @@ Some of these commands may not be available on non npmjs.com registries. The base URL of the npm registry. - - - #### `json` * Default: false @@ -108,9 +93,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `parseable` * Default: false @@ -119,9 +101,6 @@ Not supported by all npm commands. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. - - - #### `otp` * Default: null @@ -133,11 +112,6 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. - - - - - ### See Also * [npm adduser](/commands/npm-adduser) diff --git a/deps/npm/docs/content/commands/npm-prune.md b/deps/npm/docs/content/commands/npm-prune.md index 28f02f6add1..95946d9dc96 100644 --- a/deps/npm/docs/content/commands/npm-prune.md +++ b/deps/npm/docs/content/commands/npm-prune.md @@ -6,19 +6,10 @@ description: Remove extraneous packages ### Synopsis - - - - ```bash npm prune [[<@scope>/]...] ``` - - - - - ### Description This command removes "extraneous" packages. If a package name is provided, @@ -44,9 +35,6 @@ this command can help clean up any resulting garbage. ### Configuration - - - #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -65,9 +53,6 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. - - - #### `dry-run` * Default: false @@ -81,9 +66,6 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. - - - #### `json` * Default: false @@ -96,9 +78,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `foreground-scripts` * Default: false @@ -111,9 +90,6 @@ input, output, and error with the main npm process. Note that this will generally make installs run slower, and be much noisier, but can be useful for debugging. - - - #### `ignore-scripts` * Default: false @@ -126,9 +102,6 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - - #### `workspace` * Default: @@ -151,9 +124,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -172,9 +142,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -188,9 +155,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - #### `install-links` * Default: false @@ -200,11 +164,6 @@ When set file: protocol dependencies that exist outside of the project root will be packed and installed as regular dependencies instead of creating a symlink. This option has no effect on workspaces. - - - - - ### See Also * [npm uninstall](/commands/npm-uninstall) diff --git a/deps/npm/docs/content/commands/npm-publish.md b/deps/npm/docs/content/commands/npm-publish.md index 2995f6bc815..4963cf158a6 100644 --- a/deps/npm/docs/content/commands/npm-publish.md +++ b/deps/npm/docs/content/commands/npm-publish.md @@ -6,59 +6,34 @@ description: Publish a package ### Synopsis - - - - ```bash -npm publish [] +npm publish ``` - - - - - ### Description Publishes a package to the registry so that it can be installed by name. -By default npm will publish to the public registry. This can be overridden -by specifying a different default registry or using a -[`scope`](/using-npm/scope) in the name (see +By default npm will publish to the public registry. This can be +overridden by specifying a different default registry or using a +[`scope`](/using-npm/scope) in the name, combined with a +scope-configured registry (see [`package.json`](/configuring-npm/package-json)). -* ``: A folder containing a package.json file - -* ``: A url or file path to a gzipped tar archive containing a - single folder with a package.json file inside. - -* `[--tag ]`: Registers the published package with the given tag, such - that `npm install @` will install this version. By default, - `npm publish` updates and `npm install` installs the `latest` tag. See - [`npm-dist-tag`](npm-dist-tag) for details about tags. - -* `[--access ]`: Tells the registry whether this package - should be published as public or restricted. Only applies to scoped - packages, which default to `restricted`. If you don't have a paid - account, you must publish with `--access public` to publish scoped - packages. - -* `[--otp ]`: If you have two-factor authentication enabled in - `auth-and-writes` mode then you can provide a code from your - authenticator with this. If you don't include this and you're running - from a TTY then you'll be prompted. - -* `[--dry-run]`: As of `npm@6`, does everything publish would do except - actually publishing to the registry. Reports the details of what would - have been published. -* `[--workspaces]`: Enables workspace context while publishing. All - workspace packages will be published. +A `package` is interpreted the same way as other commands (like +`npm install` and can be: -* `[--workspace]`: Enables workspaces context and limits results to only - those specified by this config item. Only the packages in the - workspaces given will be published. +* a) a folder containing a program described by a + [`package.json`](/configuring-npm/package-json) file +* b) a gzipped tarball containing (a) +* c) a url that resolves to (b) +* d) a `@` that is published on the registry (see + [`registry`](/using-npm/registry)) with (c) +* e) a `@` (see [`npm dist-tag`](/commands/npm-dist-tag)) that + points to (d) +* f) a `` that has a "latest" tag satisfying (e) +* g) a `` that resolves to (a) The publish will fail if the package name and version combination already exists in the specified registry. @@ -112,9 +87,6 @@ built. ### Configuration - - - #### `tag` * Default: "latest" @@ -129,9 +101,6 @@ command, if no explicit tag is given. When used by the `npm diff` command, this is the tag used to fetch the tarball that will be compared with the local files by default. - - - #### `access` * Default: 'restricted' for scoped packages, 'public' for unscoped packages @@ -148,9 +117,6 @@ subsequent `npm publish` commands using the `--access` flag will not have an effect to the access level. To make changes to the access level after the initial publish use `npm access`. - - - #### `dry-run` * Default: false @@ -164,9 +130,6 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. - - - #### `otp` * Default: null @@ -178,9 +141,6 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. - - - #### `workspace` * Default: @@ -203,9 +163,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -224,9 +181,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -240,13 +194,9 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [npm-packlist package](http://npm.im/npm-packlist) * [npm registry](/using-npm/registry) * [npm scope](/using-npm/scope) diff --git a/deps/npm/docs/content/commands/npm-query.md b/deps/npm/docs/content/commands/npm-query.md new file mode 100644 index 00000000000..5a6bfb79cee --- /dev/null +++ b/deps/npm/docs/content/commands/npm-query.md @@ -0,0 +1,209 @@ +--- +title: npm-query +section: 1 +description: Dependency selector query +--- + +### Synopsis + +```bash +npm query +``` + +### Description + +The `npm query` command allows for usage of css selectors in order to retrieve +an array of dependency objects. + +### Piping npm query to other commands + +```bash +# find all dependencies with postinstall scripts & uninstall them +npm query ":attr(scripts, [postinstall])" | jq 'map(.name)|join("\n")' -r | xargs -I {} npm uninstall {} + +# find all git dependencies & explain who requires them +npm query ":type(git)" | jq 'map(.name)' | xargs -I {} npm why {} +``` + +### Extended Use Cases & Queries + +```stylus +// all deps +* + +// all direct deps +:root > * + +// direct production deps +:root > .prod + +// direct development deps +:root > .dev + +// any peer dep of a direct deps +:root > * > .peer + +// any workspace dep +.workspace + +// all workspaces that depend on another workspace +.workspace > .workspace + +// all workspaces that have peer deps +.workspace:has(.peer) + +// any dep named "lodash" +// equivalent to [name="lodash"] +#lodash + +// any deps named "lodash" & within semver range ^"1.2.3" +#lodash@^1.2.3 +// equivalent to... +[name="lodash"]:semver(^1.2.3) + +// get the hoisted node for a given semver range +#lodash@^1.2.3:not(:deduped) + +// querying deps with a specific version +#lodash@2.1.5 +// equivalent to... +[name="lodash"][version="2.1.5"] + +// has any deps +:has(*) + +// deps with no other deps (ie. "leaf" nodes) +:empty + +// manually querying git dependencies +[repository^=github:], +[repository^=git:], +[repository^=https://github.com], +[repository^=http://github.com], +[repository^=https://github.com], +[repository^=+git:...] + +// querying for all git dependencies +:type(git) + +// get production dependencies that aren't also dev deps +.prod:not(.dev) + +// get dependencies with specific licenses +[license=MIT], [license=ISC] + +// find all packages that have @ruyadorno as a contributor +:attr(contributors, [email=ruyadorno@github.com]) +``` + +### Example Response Output + +- an array of dependency objects is returned which can contain multiple copies of the same package which may or may not have been linked or deduped + +```json +[ + { + "name": "", + "version": "", + "description": "", + "homepage": "", + "bugs": {}, + "author": {}, + "license": {}, + "funding": {}, + "files": [], + "main": "", + "browser": "", + "bin": {}, + "man": [], + "directories": {}, + "repository": {}, + "scripts": {}, + "config": {}, + "dependencies": {}, + "devDependencies": {}, + "optionalDependencies": {}, + "bundledDependencies": {}, + "peerDependencies": {}, + "peerDependenciesMeta": {}, + "engines": {}, + "os": [], + "cpu": [], + "workspaces": {}, + "keywords": [], + ... + }, + ... +``` + +### Configuration + +#### `global` + +* Default: false +* Type: Boolean + +Operates in "global" mode, so that packages are installed into the `prefix` +folder instead of the current working directory. See +[folders](/configuring-npm/folders) for more on the differences in behavior. + +* packages are installed into the `{prefix}/lib/node_modules` folder, instead + of the current working directory. +* bin files are linked to `{prefix}/bin` +* man pages are linked to `{prefix}/share/man` + +#### `workspace` + +* Default: +* Type: String (can be set multiple times) + +Enable running a command in the context of the configured workspaces of the +current project while filtering by running only the workspaces defined by +this configuration option. + +Valid values for the `workspace` config are either: + +* Workspace names +* Path to a workspace directory +* Path to a parent workspace directory (will result in selecting all + workspaces within that folder) + +When set for the `npm init` command, this may be set to the folder of a +workspace which does not yet exist, to create the folder and set it up as a +brand new workspace within the project. + +This value is not exported to the environment for child processes. + +#### `workspaces` + +* Default: null +* Type: null or Boolean + +Set to true to run the command in the context of **all** configured +workspaces. + +Explicitly setting this to false will cause commands like `install` to +ignore workspaces altogether. When not set explicitly: + +- Commands that operate on the `node_modules` tree (install, update, etc.) +will link workspaces into the `node_modules` folder. - Commands that do +other things (test, exec, publish, etc.) will operate on the root project, +_unless_ one or more workspaces are specified in the `workspace` config. + +This value is not exported to the environment for child processes. + +#### `include-workspace-root` + +* Default: false +* Type: Boolean + +Include the workspace root when workspaces are enabled for a command. + +When false, specifying individual workspaces via the `workspace` config, or +all workspaces via the `workspaces` flag, will cause npm to operate only on +the specified workspaces, and not on the root project. + +This value is not exported to the environment for child processes. +## See Also + +* [dependency selectors](/using-npm/dependency-selectors) diff --git a/deps/npm/docs/content/commands/npm-rebuild.md b/deps/npm/docs/content/commands/npm-rebuild.md index fa5b0cfa97d..75f1efe1b69 100644 --- a/deps/npm/docs/content/commands/npm-rebuild.md +++ b/deps/npm/docs/content/commands/npm-rebuild.md @@ -6,21 +6,12 @@ description: Rebuild a package ### Synopsis - - - - ```bash -npm rebuild [[<@scope>/][@] ...] +npm rebuild [] ...] alias: rb ``` - - - - - ### Description This command runs the `npm build` command on the matched folders. This is @@ -29,21 +20,15 @@ C++ addons with the new binary. It is also useful when installing with `--ignore-scripts` and `--no-bin-links`, to explicitly choose which packages to build and/or link bins. -If one or more package names (and optionally version ranges) are provided, -then only packages with a name and version matching one of the specifiers -will be rebuilt. +If one or more package specs are provided, then only packages with a +name and version matching one of the specifiers will be rebuilt. ### Configuration - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -54,9 +39,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - #### `bin-links` * Default: true @@ -69,9 +51,6 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. - - - #### `foreground-scripts` * Default: false @@ -84,9 +63,6 @@ input, output, and error with the main npm process. Note that this will generally make installs run slower, and be much noisier, but can be useful for debugging. - - - #### `ignore-scripts` * Default: false @@ -99,9 +75,6 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - - #### `workspace` * Default: @@ -124,9 +97,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -145,9 +115,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -161,9 +128,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - #### `install-links` * Default: false @@ -173,11 +137,7 @@ When set file: protocol dependencies that exist outside of the project root will be packed and installed as regular dependencies instead of creating a symlink. This option has no effect on workspaces. - - - - - ### See Also +* [package spec](/using-npm/package-spec) * [npm install](/commands/npm-install) diff --git a/deps/npm/docs/content/commands/npm-repo.md b/deps/npm/docs/content/commands/npm-repo.md index fc540a9382b..eb55780de90 100644 --- a/deps/npm/docs/content/commands/npm-repo.md +++ b/deps/npm/docs/content/commands/npm-repo.md @@ -6,19 +6,10 @@ description: Open package repository page in the browser ### Synopsis - - - - ```bash npm repo [ [ ...]] ``` - - - - - ### Description This command tries to guess at the likely location of a package's @@ -28,9 +19,6 @@ in the current folder and use the `repository` property. ### Configuration - - - #### `browser` * Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` @@ -43,9 +31,6 @@ terminal. Set to `true` to use default system URL opener. - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -53,9 +38,6 @@ Set to `true` to use default system URL opener. The base URL of the npm registry. - - - #### `workspace` * Default: @@ -78,9 +60,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -99,9 +78,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -115,11 +91,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - - - ### See Also * [npm docs](/commands/npm-docs) diff --git a/deps/npm/docs/content/commands/npm-restart.md b/deps/npm/docs/content/commands/npm-restart.md index f01cd014e74..6c31cfceb51 100644 --- a/deps/npm/docs/content/commands/npm-restart.md +++ b/deps/npm/docs/content/commands/npm-restart.md @@ -6,19 +6,10 @@ description: Restart a package ### Synopsis - - - - ```bash npm restart [-- ] ``` - - - - - ### Description This restarts a project. It is equivalent to running `npm run-script @@ -45,9 +36,6 @@ If it does _not_ have a `"restart"` script specified, but it does have ### Configuration - - - #### `ignore-scripts` * Default: false @@ -60,21 +48,13 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - - #### `script-shell` * Default: '/bin/sh' on POSIX systems, 'cmd.exe' on Windows * Type: null or String The shell to use for scripts run with the `npm exec`, `npm run` and `npm -init ` commands. - - - - - +init ` commands. ### See Also diff --git a/deps/npm/docs/content/commands/npm-root.md b/deps/npm/docs/content/commands/npm-root.md index 80545235fc9..89195744c9d 100644 --- a/deps/npm/docs/content/commands/npm-root.md +++ b/deps/npm/docs/content/commands/npm-root.md @@ -6,19 +6,10 @@ description: Display npm root ### Synopsis - - - - ```bash npm root ``` - - - - - ### Description Print the effective `node_modules` folder to standard out. @@ -34,15 +25,10 @@ echo "Global packages installed in: ${global_node_modules}" ### Configuration - - - #### `global` * Default: false * Type: Boolean -* DEPRECATED: `--global`, `--local` are deprecated. Use `--location=global` - instead. Operates in "global" mode, so that packages are installed into the `prefix` folder instead of the current working directory. See @@ -53,11 +39,6 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` - - - - - ### See Also * [npm prefix](/commands/npm-prefix) diff --git a/deps/npm/docs/content/commands/npm-run-script.md b/deps/npm/docs/content/commands/npm-run-script.md index 73c4b1c7a74..16a5c693f9b 100644 --- a/deps/npm/docs/content/commands/npm-run-script.md +++ b/deps/npm/docs/content/commands/npm-run-script.md @@ -6,21 +6,12 @@ description: Run arbitrary package scripts ### Synopsis - - - - ```bash npm run-script [-- ] aliases: run, rum, urn ``` - - - - - ### Description This runs an arbitrary command from a package's `"scripts"` object. If no @@ -143,9 +134,6 @@ packages. ### Configuration - - - #### `workspace` * Default: @@ -168,9 +156,6 @@ brand new workspace within the project. This value is not exported to the environment for child processes. - - - #### `workspaces` * Default: null @@ -189,9 +174,6 @@ _unless_ one or more workspaces are specified in the `workspace` config. This value is not exported to the environment for child processes. - - - #### `include-workspace-root` * Default: false @@ -205,9 +187,6 @@ the specified workspaces, and not on the root project. This value is not exported to the environment for child processes. - - - #### `if-present` * Default: false @@ -222,9 +201,6 @@ CI setup. This value is not exported to the environment for child processes. - - - #### `ignore-scripts` * Default: false @@ -237,8 +213,17 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. - - +#### `foreground-scripts` + +* Default: false +* Type: Boolean + +Run all build scripts (ie, `preinstall`, `install`, and `postinstall`) +scripts for installed packages in the foreground process, sharing standard +input, output, and error with the main npm process. + +Note that this will generally make installs run slower, and be much noisier, +but can be useful for debugging. #### `script-shell` @@ -246,12 +231,7 @@ will *not* run any pre- or post-scripts. * Type: null or String The shell to use for scripts run with the `npm exec`, `npm run` and `npm -init ` commands. - - - - - +init ` commands. ### See Also diff --git a/deps/npm/docs/content/commands/npm-search.md b/deps/npm/docs/content/commands/npm-search.md index 340dea9684d..3e4fa455395 100644 --- a/deps/npm/docs/content/commands/npm-search.md +++ b/deps/npm/docs/content/commands/npm-search.md @@ -6,21 +6,12 @@ description: Search for packages ### Synopsis - - - - ```bash npm search [search terms ...] aliases: find, s, se ``` - - - - - Note: This command is unaware of workspaces. ### Description @@ -48,9 +39,6 @@ expression characters in most shells.) ### Configuration - - - #### `long` * Default: false @@ -58,9 +46,6 @@ expression characters in most shells.) Show extended information in `ls`, `search`, and `help-search`. - - - #### `json` * Default: false @@ -73,9 +58,6 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. - - - #### `color` * Default: true unless the NO_COLOR environ is set to something other than '0' @@ -84,9 +66,6 @@ Not supported by all npm commands. If false, never shows colors. If `"always"` then always shows colors. If true, then only prints color codes for tty file descriptors. - - - #### `parseable` * Default: false @@ -95,9 +74,6 @@ true, then only prints color codes for tty file descriptors. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. - - - #### `description` * Default: true @@ -105,9 +81,6 @@ Output parseable results from commands that write to standard output. For Show the description in `npm search` - - - #### `searchopts` * Default: "" @@ -115,9 +88,6 @@ Show the description in `npm search` Space-separated options that are always passed to search. - - - #### `searchexclude` * Default: "" @@ -125,9 +95,6 @@ Space-separated options that are always passed to search. Space-separated options that limit the results from search. - - - #### `registry` * Default: "https://registry.npmjs.org/" @@ -135,9 +102,6 @@ Space-separated options that limit the results from search. The base URL of the npm registry. - - - #### `prefer-online` * Default: false @@ -146,9 +110,6 @@ The base URL of the npm registry. If true, staleness checks for cached data will be forced, making the CLI look for updates immediately even for fresh package data. - - - #### `prefer-offline` * Default: false @@ -158,9 +119,6 @@ If true, staleness checks for cached data will be bypassed, but missing data will be requested from the server. To force full offline mode, use `--offline`. - - - #### `offline` * Default: false @@ -169,11 +127,6 @@ will be requested from the server. To force full offline mode, use Force offline mode: no network requests will be done during install. To allow the CLI to fill in missing cache data, see `--prefer-offline`. - - - - - ### See Also * [npm registry](/using-npm/registry) diff --git a/deps/npm/docs/content/commands/npm-set-script.md b/deps/npm/docs/content/commands/npm-set-script.md index 8695b43f144..9bbf09ea907 100644 --- a/deps/npm/docs/content/commands/npm-set-script.md +++ b/deps/npm/docs/content/commands/npm-set-script.md @@ -9,19 +9,10 @@ An npm command that lets you create a task in the `scripts` section of the `pack Deprecated. - - - - ```bash npm set-script [ +``` + +In [Node.js](https://nodejs.org/): + +```js +const cssesc = require('cssesc'); +``` + +In Ruby using [the `ruby-cssesc` wrapper gem](https://github.com/borodean/ruby-cssesc): + +```bash +gem install ruby-cssesc +``` + +```ruby +require 'ruby-cssesc' +CSSEsc.escape('I ♥ Ruby', is_identifier: true) +``` + +In Sass using [`sassy-escape`](https://github.com/borodean/sassy-escape): + +```bash +gem install sassy-escape +``` + +```scss +body { + content: escape('I ♥ Sass', $is-identifier: true); +} +``` + +## API + +### `cssesc(value, options)` + +This function takes a value and returns an escaped version of the value where any characters that are not printable ASCII symbols are escaped using the shortest possible (but valid) [escape sequences for use in CSS strings or identifiers](https://mathiasbynens.be/notes/css-escapes). + +```js +cssesc('Ich ♥ Bücher'); +// → 'Ich \\2665 B\\FC cher' + +cssesc('foo 𝌆 bar'); +// → 'foo \\1D306 bar' +``` + +By default, `cssesc` returns a string that can be used as part of a CSS string. If the target is a CSS identifier rather than a CSS string, use the `isIdentifier: true` setting (see below). + +The optional `options` argument accepts an object with the following options: + +#### `isIdentifier` + +The default value for the `isIdentifier` option is `false`. This means that the input text will be escaped for use in a CSS string literal. If you want to use the result as a CSS identifier instead (in a selector, for example), set this option to `true`. + +```js +cssesc('123a2b'); +// → '123a2b' + +cssesc('123a2b', { + 'isIdentifier': true +}); +// → '\\31 23a2b' +``` + +#### `quotes` + +The default value for the `quotes` option is `'single'`. This means that any occurences of `'` in the input text will be escaped as `\'`, so that the output can be used in a CSS string literal wrapped in single quotes. + +```js +cssesc('Lorem ipsum "dolor" sit \'amet\' etc.'); +// → 'Lorem ipsum "dolor" sit \\\'amet\\\' etc.' +// → "Lorem ipsum \"dolor\" sit \\'amet\\' etc." + +cssesc('Lorem ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'single' +}); +// → 'Lorem ipsum "dolor" sit \\\'amet\\\' etc.' +// → "Lorem ipsum \"dolor\" sit \\'amet\\' etc." +``` + +If you want to use the output as part of a CSS string literal wrapped in double quotes, set the `quotes` option to `'double'`. + +```js +cssesc('Lorem ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'double' +}); +// → 'Lorem ipsum \\"dolor\\" sit \'amet\' etc.' +// → "Lorem ipsum \\\"dolor\\\" sit 'amet' etc." +``` + +#### `wrap` + +The `wrap` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, the output will be a valid CSS string literal wrapped in quotes. The type of quotes can be specified through the `quotes` setting. + +```js +cssesc('Lorem ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'single', + 'wrap': true +}); +// → '\'Lorem ipsum "dolor" sit \\\'amet\\\' etc.\'' +// → "\'Lorem ipsum \"dolor\" sit \\\'amet\\\' etc.\'" + +cssesc('Lorem ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'double', + 'wrap': true +}); +// → '"Lorem ipsum \\"dolor\\" sit \'amet\' etc."' +// → "\"Lorem ipsum \\\"dolor\\\" sit \'amet\' etc.\"" +``` + +#### `escapeEverything` + +The `escapeEverything` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, all the symbols in the output will be escaped, even printable ASCII symbols. + +```js +cssesc('lolwat"foo\'bar', { + 'escapeEverything': true +}); +// → '\\6C\\6F\\6C\\77\\61\\74\\"\\66\\6F\\6F\\\'\\62\\61\\72' +// → "\\6C\\6F\\6C\\77\\61\\74\\\"\\66\\6F\\6F\\'\\62\\61\\72" +``` + +#### Overriding the default options globally + +The global default settings can be overridden by modifying the `css.options` object. This saves you from passing in an `options` object for every call to `encode` if you want to use the non-default setting. + +```js +// Read the global default setting for `escapeEverything`: +cssesc.options.escapeEverything; +// → `false` by default + +// Override the global default setting for `escapeEverything`: +cssesc.options.escapeEverything = true; + +// Using the global default setting for `escapeEverything`, which is now `true`: +cssesc('foo © bar ≠ baz 𝌆 qux'); +// → '\\66\\6F\\6F\\ \\A9\\ \\62\\61\\72\\ \\2260\\ \\62\\61\\7A\\ \\1D306\\ \\71\\75\\78' +``` + +### `cssesc.version` + +A string representing the semantic version number. + +### Using the `cssesc` binary + +To use the `cssesc` binary in your shell, simply install cssesc globally using npm: + +```bash +npm install -g cssesc +``` + +After that you will be able to escape text for use in CSS strings or identifiers from the command line: + +```bash +$ cssesc 'föo ♥ bår 𝌆 baz' +f\F6o \2665 b\E5r \1D306 baz +``` + +If the output needs to be a CSS identifier rather than part of a string literal, use the `-i`/`--identifier` option: + +```bash +$ cssesc --identifier 'föo ♥ bår 𝌆 baz' +f\F6o\ \2665\ b\E5r\ \1D306\ baz +``` + +See `cssesc --help` for the full list of options. + +## Support + +This library supports the Node.js and browser versions mentioned in [`.babelrc`](https://github.com/mathiasbynens/cssesc/blob/master/.babelrc). For a version that supports a wider variety of legacy browsers and environments out-of-the-box, [see v0.1.0](https://github.com/mathiasbynens/cssesc/releases/tag/v0.1.0). + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +This library is available under the [MIT](https://mths.be/mit) license. diff --git a/deps/npm/node_modules/cssesc/bin/cssesc b/deps/npm/node_modules/cssesc/bin/cssesc new file mode 100755 index 00000000000..188c034ffe9 --- /dev/null +++ b/deps/npm/node_modules/cssesc/bin/cssesc @@ -0,0 +1,116 @@ +#!/usr/bin/env node +const fs = require('fs'); +const cssesc = require('../cssesc.js'); +const strings = process.argv.splice(2); +const stdin = process.stdin; +const options = {}; +const log = console.log; + +const main = function() { + const option = strings[0]; + + if (/^(?:-h|--help|undefined)$/.test(option)) { + log( + 'cssesc v%s - https://mths.be/cssesc', + cssesc.version + ); + log([ + '\nUsage:\n', + '\tcssesc [string]', + '\tcssesc [-i | --identifier] [string]', + '\tcssesc [-s | --single-quotes] [string]', + '\tcssesc [-d | --double-quotes] [string]', + '\tcssesc [-w | --wrap] [string]', + '\tcssesc [-e | --escape-everything] [string]', + '\tcssesc [-v | --version]', + '\tcssesc [-h | --help]', + '\nExamples:\n', + '\tcssesc \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\tcssesc --identifier \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\tcssesc --escape-everything \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\tcssesc --double-quotes --wrap \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\techo \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\' | cssesc' + ].join('\n')); + return process.exit(1); + } + + if (/^(?:-v|--version)$/.test(option)) { + log('v%s', cssesc.version); + return process.exit(1); + } + + strings.forEach(function(string) { + // Process options + if (/^(?:-i|--identifier)$/.test(string)) { + options.isIdentifier = true; + return; + } + if (/^(?:-s|--single-quotes)$/.test(string)) { + options.quotes = 'single'; + return; + } + if (/^(?:-d|--double-quotes)$/.test(string)) { + options.quotes = 'double'; + return; + } + if (/^(?:-w|--wrap)$/.test(string)) { + options.wrap = true; + return; + } + if (/^(?:-e|--escape-everything)$/.test(string)) { + options.escapeEverything = true; + return; + } + + // Process string(s) + let result; + try { + result = cssesc(string, options); + log(result); + } catch (exception) { + log(exception.message + '\n'); + log('Error: failed to escape.'); + log('If you think this is a bug in cssesc, please report it:'); + log('https://github.com/mathiasbynens/cssesc/issues/new'); + log( + '\nStack trace using cssesc@%s:\n', + cssesc.version + ); + log(exception.stack); + return process.exit(1); + } + }); + // Return with exit status 0 outside of the `forEach` loop, in case + // multiple strings were passed in. + return process.exit(0); + +}; + +if (stdin.isTTY) { + // handle shell arguments + main(); +} else { + let timeout; + // Either the script is called from within a non-TTY context, or `stdin` + // content is being piped in. + if (!process.stdout.isTTY) { + // The script was called from a non-TTY context. This is a rather uncommon + // use case we don’t actively support. However, we don’t want the script + // to wait forever in such cases, so… + timeout = setTimeout(function() { + // …if no piped data arrived after a whole minute, handle shell + // arguments instead. + main(); + }, 60000); + } + let data = ''; + stdin.on('data', function(chunk) { + clearTimeout(timeout); + data += chunk; + }); + stdin.on('end', function() { + strings.push(data.trim()); + main(); + }); + stdin.resume(); +} diff --git a/deps/npm/node_modules/cssesc/cssesc.js b/deps/npm/node_modules/cssesc/cssesc.js new file mode 100644 index 00000000000..1c0928e4566 --- /dev/null +++ b/deps/npm/node_modules/cssesc/cssesc.js @@ -0,0 +1,110 @@ +/*! https://mths.be/cssesc v3.0.0 by @mathias */ +'use strict'; + +var object = {}; +var hasOwnProperty = object.hasOwnProperty; +var merge = function merge(options, defaults) { + if (!options) { + return defaults; + } + var result = {}; + for (var key in defaults) { + // `if (defaults.hasOwnProperty(key) { … }` is not needed here, since + // only recognized option names are used. + result[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key]; + } + return result; +}; + +var regexAnySingleEscape = /[ -,\.\/:-@\[-\^`\{-~]/; +var regexSingleEscape = /[ -,\.\/:-@\[\]\^`\{-~]/; +var regexAlwaysEscape = /['"\\]/; +var regexExcessiveSpaces = /(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g; + +// https://mathiasbynens.be/notes/css-escapes#css +var cssesc = function cssesc(string, options) { + options = merge(options, cssesc.options); + if (options.quotes != 'single' && options.quotes != 'double') { + options.quotes = 'single'; + } + var quote = options.quotes == 'double' ? '"' : '\''; + var isIdentifier = options.isIdentifier; + + var firstChar = string.charAt(0); + var output = ''; + var counter = 0; + var length = string.length; + while (counter < length) { + var character = string.charAt(counter++); + var codePoint = character.charCodeAt(); + var value = void 0; + // If it’s not a printable ASCII character… + if (codePoint < 0x20 || codePoint > 0x7E) { + if (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) { + // It’s a high surrogate, and there is a next character. + var extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { + // next character is low surrogate + codePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000; + } else { + // It’s an unmatched surrogate; only append this code unit, in case + // the next code unit is the high surrogate of a surrogate pair. + counter--; + } + } + value = '\\' + codePoint.toString(16).toUpperCase() + ' '; + } else { + if (options.escapeEverything) { + if (regexAnySingleEscape.test(character)) { + value = '\\' + character; + } else { + value = '\\' + codePoint.toString(16).toUpperCase() + ' '; + } + } else if (/[\t\n\f\r\x0B]/.test(character)) { + value = '\\' + codePoint.toString(16).toUpperCase() + ' '; + } else if (character == '\\' || !isIdentifier && (character == '"' && quote == character || character == '\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) { + value = '\\' + character; + } else { + value = character; + } + } + output += value; + } + + if (isIdentifier) { + if (/^-[-\d]/.test(output)) { + output = '\\-' + output.slice(1); + } else if (/\d/.test(firstChar)) { + output = '\\3' + firstChar + ' ' + output.slice(1); + } + } + + // Remove spaces after `\HEX` escapes that are not followed by a hex digit, + // since they’re redundant. Note that this is only possible if the escape + // sequence isn’t preceded by an odd number of backslashes. + output = output.replace(regexExcessiveSpaces, function ($0, $1, $2) { + if ($1 && $1.length % 2) { + // It’s not safe to remove the space, so don’t. + return $0; + } + // Strip the space. + return ($1 || '') + $2; + }); + + if (!isIdentifier && options.wrap) { + return quote + output + quote; + } + return output; +}; + +// Expose default options (so they can be overridden globally). +cssesc.options = { + 'escapeEverything': false, + 'isIdentifier': false, + 'quotes': 'single', + 'wrap': false +}; + +cssesc.version = '3.0.0'; + +module.exports = cssesc; diff --git a/deps/npm/node_modules/cssesc/man/cssesc.1 b/deps/npm/node_modules/cssesc/man/cssesc.1 new file mode 100644 index 00000000000..eee4996daf5 --- /dev/null +++ b/deps/npm/node_modules/cssesc/man/cssesc.1 @@ -0,0 +1,70 @@ +.Dd August 9, 2013 +.Dt cssesc 1 +.Sh NAME +.Nm cssesc +.Nd escape text for use in CSS string literals or identifiers +.Sh SYNOPSIS +.Nm +.Op Fl i | -identifier Ar string +.br +.Op Fl s | -single-quotes Ar string +.br +.Op Fl d | -double-quotes Ar string +.br +.Op Fl w | -wrap Ar string +.br +.Op Fl e | -escape-everything Ar string +.br +.Op Fl v | -version +.br +.Op Fl h | -help +.Sh DESCRIPTION +.Nm +escapes strings for use in CSS string literals or identifiers while generating the shortest possible valid ASCII-only output. +.Sh OPTIONS +.Bl -ohang -offset +.It Sy "-s, --single-quotes" +Escape any occurences of ' in the input string as \\', so that the output can be used in a CSS string literal wrapped in single quotes. +.It Sy "-d, --double-quotes" +Escape any occurences of " in the input string as \\", so that the output can be used in a CSS string literal wrapped in double quotes. +.It Sy "-w, --wrap" +Make sure the output is a valid CSS string literal wrapped in quotes. The type of quotes can be specified using the +.Ar -s | --single-quotes +or +.Ar -d | --double-quotes +settings. +.It Sy "-e, --escape-everything" +Escape all the symbols in the output, even printable ASCII symbols. +.It Sy "-v, --version" +Print cssesc's version. +.It Sy "-h, --help" +Show the help screen. +.El +.Sh EXIT STATUS +The +.Nm cssesc +utility exits with one of the following values: +.Pp +.Bl -tag -width flag -compact +.It Li 0 +.Nm +successfully escaped the given text and printed the result. +.It Li 1 +.Nm +wasn't instructed to escape anything (for example, the +.Ar --help +flag was set); or, an error occurred. +.El +.Sh EXAMPLES +.Bl -ohang -offset +.It Sy "cssesc 'foo bar baz'" +Print an escaped version of the given text. +.It Sy echo\ 'foo bar baz'\ |\ cssesc +Print an escaped version of the text that gets piped in. +.El +.Sh BUGS +cssesc's bug tracker is located at . +.Sh AUTHOR +Mathias Bynens +.Sh WWW + diff --git a/deps/npm/node_modules/cssesc/package.json b/deps/npm/node_modules/cssesc/package.json new file mode 100644 index 00000000000..076c84dc830 --- /dev/null +++ b/deps/npm/node_modules/cssesc/package.json @@ -0,0 +1,51 @@ +{ + "name": "cssesc", + "version": "3.0.0", + "description": "A JavaScript library for escaping CSS strings and identifiers while generating the shortest possible ASCII-only output.", + "homepage": "https://mths.be/cssesc", + "engines": { + "node": ">=4" + }, + "main": "cssesc.js", + "bin": "bin/cssesc", + "man": "man/cssesc.1", + "keywords": [ + "css", + "escape", + "identifier", + "string", + "tool" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/cssesc.git" + }, + "bugs": "https://github.com/mathiasbynens/cssesc/issues", + "files": [ + "LICENSE-MIT.txt", + "cssesc.js", + "bin/", + "man/" + ], + "scripts": { + "build": "grunt template && babel cssesc.js -o cssesc.js", + "test": "mocha tests", + "cover": "istanbul cover --report html node_modules/.bin/_mocha tests -- -u exports -R spec" + }, + "devDependencies": { + "babel-cli": "^6.26.0", + "babel-preset-env": "^1.6.1", + "codecov": "^1.0.1", + "grunt": "^1.0.1", + "grunt-template": "^1.0.0", + "istanbul": "^0.4.4", + "mocha": "^2.5.3", + "regenerate": "^1.2.1", + "requirejs": "^2.1.16" + } +} diff --git a/deps/npm/node_modules/debug/node_modules/ms/readme.md b/deps/npm/node_modules/debug/node_modules/ms/readme.md deleted file mode 100644 index 9a1996b17e0..00000000000 --- a/deps/npm/node_modules/debug/node_modules/ms/readme.md +++ /dev/null @@ -1,60 +0,0 @@ -# ms - -[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) -[![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit) - -Use this package to easily convert various time formats to milliseconds. - -## Examples - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('1y') // 31557600000 -ms('100') // 100 -ms('-3 days') // -259200000 -ms('-1h') // -3600000 -ms('-200') // -200 -``` - -### Convert from Milliseconds - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(-3 * 60000) // "-3m" -ms(ms('10 hours')) // "10h" -``` - -### Time Format Written-Out - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(-3 * 60000, { long: true }) // "-3 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -## Features - -- Works both in [Node.js](https://nodejs.org) and in the browser -- If a number is supplied to `ms`, a string with a unit is returned -- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) -- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned - -## Related Packages - -- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. - -## Caught a Bug? - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device -2. Link the package to the global module directory: `npm link` -3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! - -As always, you can run the tests using: `npm test` diff --git a/deps/npm/node_modules/delegates/Readme.md b/deps/npm/node_modules/delegates/Readme.md deleted file mode 100644 index ab8cf4ace15..00000000000 --- a/deps/npm/node_modules/delegates/Readme.md +++ /dev/null @@ -1,94 +0,0 @@ - -# delegates - - Node method and accessor delegation utilty. - -## Installation - -``` -$ npm install delegates -``` - -## Example - -```js -var delegate = require('delegates'); - -... - -delegate(proto, 'request') - .method('acceptsLanguages') - .method('acceptsEncodings') - .method('acceptsCharsets') - .method('accepts') - .method('is') - .access('querystring') - .access('idempotent') - .access('socket') - .access('length') - .access('query') - .access('search') - .access('status') - .access('method') - .access('path') - .access('body') - .access('host') - .access('url') - .getter('subdomains') - .getter('protocol') - .getter('header') - .getter('stale') - .getter('fresh') - .getter('secure') - .getter('ips') - .getter('ip') -``` - -# API - -## Delegate(proto, prop) - -Creates a delegator instance used to configure using the `prop` on the given -`proto` object. (which is usually a prototype) - -## Delegate#method(name) - -Allows the given method `name` to be accessed on the host. - -## Delegate#getter(name) - -Creates a "getter" for the property with the given `name` on the delegated -object. - -## Delegate#setter(name) - -Creates a "setter" for the property with the given `name` on the delegated -object. - -## Delegate#access(name) - -Creates an "accessor" (ie: both getter *and* setter) for the property with the -given `name` on the delegated object. - -## Delegate#fluent(name) - -A unique type of "accessor" that works for a "fluent" API. When called as a -getter, the method returns the expected value. However, if the method is called -with a value, it will return itself so it can be chained. For example: - -```js -delegate(proto, 'request') - .fluent('query') - -// getter -var q = request.query(); - -// setter (chainable) -request - .query({ a: 1 }) - .query({ b: 2 }); -``` - -# License - - MIT diff --git a/deps/npm/node_modules/depd/Readme.md b/deps/npm/node_modules/depd/Readme.md deleted file mode 100644 index 77906702044..00000000000 --- a/deps/npm/node_modules/depd/Readme.md +++ /dev/null @@ -1,280 +0,0 @@ -# depd - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-image]][node-url] -[![Linux Build][travis-image]][travis-url] -[![Windows Build][appveyor-image]][appveyor-url] -[![Coverage Status][coveralls-image]][coveralls-url] - -Deprecate all the things - -> With great modules comes great responsibility; mark things deprecated! - -## Install - -This module is installed directly using `npm`: - -```sh -$ npm install depd -``` - -This module can also be bundled with systems like -[Browserify](http://browserify.org/) or [webpack](https://webpack.github.io/), -though by default this module will alter it's API to no longer display or -track deprecations. - -## API - - - -```js -var deprecate = require('depd')('my-module') -``` - -This library allows you to display deprecation messages to your users. -This library goes above and beyond with deprecation warnings by -introspection of the call stack (but only the bits that it is interested -in). - -Instead of just warning on the first invocation of a deprecated -function and never again, this module will warn on the first invocation -of a deprecated function per unique call site, making it ideal to alert -users of all deprecated uses across the code base, rather than just -whatever happens to execute first. - -The deprecation warnings from this module also include the file and line -information for the call into the module that the deprecated function was -in. - -**NOTE** this library has a similar interface to the `debug` module, and -this module uses the calling file to get the boundary for the call stacks, -so you should always create a new `deprecate` object in each file and not -within some central file. - -### depd(namespace) - -Create a new deprecate function that uses the given namespace name in the -messages and will display the call site prior to the stack entering the -file this function was called from. It is highly suggested you use the -name of your module as the namespace. - -### deprecate(message) - -Call this function from deprecated code to display a deprecation message. -This message will appear once per unique caller site. Caller site is the -first call site in the stack in a different file from the caller of this -function. - -If the message is omitted, a message is generated for you based on the site -of the `deprecate()` call and will display the name of the function called, -similar to the name displayed in a stack trace. - -### deprecate.function(fn, message) - -Call this function to wrap a given function in a deprecation message on any -call to the function. An optional message can be supplied to provide a custom -message. - -### deprecate.property(obj, prop, message) - -Call this function to wrap a given property on object in a deprecation message -on any accessing or setting of the property. An optional message can be supplied -to provide a custom message. - -The method must be called on the object where the property belongs (not -inherited from the prototype). - -If the property is a data descriptor, it will be converted to an accessor -descriptor in order to display the deprecation message. - -### process.on('deprecation', fn) - -This module will allow easy capturing of deprecation errors by emitting the -errors as the type "deprecation" on the global `process`. If there are no -listeners for this type, the errors are written to STDERR as normal, but if -there are any listeners, nothing will be written to STDERR and instead only -emitted. From there, you can write the errors in a different format or to a -logging source. - -The error represents the deprecation and is emitted only once with the same -rules as writing to STDERR. The error has the following properties: - - - `message` - This is the message given by the library - - `name` - This is always `'DeprecationError'` - - `namespace` - This is the namespace the deprecation came from - - `stack` - This is the stack of the call to the deprecated thing - -Example `error.stack` output: - -``` -DeprecationError: my-cool-module deprecated oldfunction - at Object. ([eval]-wrapper:6:22) - at Module._compile (module.js:456:26) - at evalScript (node.js:532:25) - at startup (node.js:80:7) - at node.js:902:3 -``` - -### process.env.NO_DEPRECATION - -As a user of modules that are deprecated, the environment variable `NO_DEPRECATION` -is provided as a quick solution to silencing deprecation warnings from being -output. The format of this is similar to that of `DEBUG`: - -```sh -$ NO_DEPRECATION=my-module,othermod node app.js -``` - -This will suppress deprecations from being output for "my-module" and "othermod". -The value is a list of comma-separated namespaces. To suppress every warning -across all namespaces, use the value `*` for a namespace. - -Providing the argument `--no-deprecation` to the `node` executable will suppress -all deprecations (only available in Node.js 0.8 or higher). - -**NOTE** This will not suppress the deperecations given to any "deprecation" -event listeners, just the output to STDERR. - -### process.env.TRACE_DEPRECATION - -As a user of modules that are deprecated, the environment variable `TRACE_DEPRECATION` -is provided as a solution to getting more detailed location information in deprecation -warnings by including the entire stack trace. The format of this is the same as -`NO_DEPRECATION`: - -```sh -$ TRACE_DEPRECATION=my-module,othermod node app.js -``` - -This will include stack traces for deprecations being output for "my-module" and -"othermod". The value is a list of comma-separated namespaces. To trace every -warning across all namespaces, use the value `*` for a namespace. - -Providing the argument `--trace-deprecation` to the `node` executable will trace -all deprecations (only available in Node.js 0.8 or higher). - -**NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`. - -## Display - -![message](files/message.png) - -When a user calls a function in your library that you mark deprecated, they -will see the following written to STDERR (in the given colors, similar colors -and layout to the `debug` module): - -``` -bright cyan bright yellow -| | reset cyan -| | | | -▼ ▼ ▼ ▼ -my-cool-module deprecated oldfunction [eval]-wrapper:6:22 -▲ ▲ ▲ ▲ -| | | | -namespace | | location of mycoolmod.oldfunction() call - | deprecation message - the word "deprecated" -``` - -If the user redirects their STDERR to a file or somewhere that does not support -colors, they see (similar layout to the `debug` module): - -``` -Sun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22 -▲ ▲ ▲ ▲ ▲ -| | | | | -timestamp of message namespace | | location of mycoolmod.oldfunction() call - | deprecation message - the word "deprecated" -``` - -## Examples - -### Deprecating all calls to a function - -This will display a deprecated message about "oldfunction" being deprecated -from "my-module" on STDERR. - -```js -var deprecate = require('depd')('my-cool-module') - -// message automatically derived from function name -// Object.oldfunction -exports.oldfunction = deprecate.function(function oldfunction () { - // all calls to function are deprecated -}) - -// specific message -exports.oldfunction = deprecate.function(function () { - // all calls to function are deprecated -}, 'oldfunction') -``` - -### Conditionally deprecating a function call - -This will display a deprecated message about "weirdfunction" being deprecated -from "my-module" on STDERR when called with less than 2 arguments. - -```js -var deprecate = require('depd')('my-cool-module') - -exports.weirdfunction = function () { - if (arguments.length < 2) { - // calls with 0 or 1 args are deprecated - deprecate('weirdfunction args < 2') - } -} -``` - -When calling `deprecate` as a function, the warning is counted per call site -within your own module, so you can display different deprecations depending -on different situations and the users will still get all the warnings: - -```js -var deprecate = require('depd')('my-cool-module') - -exports.weirdfunction = function () { - if (arguments.length < 2) { - // calls with 0 or 1 args are deprecated - deprecate('weirdfunction args < 2') - } else if (typeof arguments[0] !== 'string') { - // calls with non-string first argument are deprecated - deprecate('weirdfunction non-string first arg') - } -} -``` - -### Deprecating property access - -This will display a deprecated message about "oldprop" being deprecated -from "my-module" on STDERR when accessed. A deprecation will be displayed -when setting the value and when getting the value. - -```js -var deprecate = require('depd')('my-cool-module') - -exports.oldprop = 'something' - -// message automatically derives from property name -deprecate.property(exports, 'oldprop') - -// explicit message -deprecate.property(exports, 'oldprop', 'oldprop >= 0.10') -``` - -## License - -[MIT](LICENSE) - -[npm-version-image]: https://img.shields.io/npm/v/depd.svg -[npm-downloads-image]: https://img.shields.io/npm/dm/depd.svg -[npm-url]: https://npmjs.org/package/depd -[travis-image]: https://img.shields.io/travis/dougwilson/nodejs-depd/master.svg?label=linux -[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd -[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/nodejs-depd/master.svg?label=windows -[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd -[coveralls-image]: https://img.shields.io/coveralls/dougwilson/nodejs-depd/master.svg -[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master -[node-image]: https://img.shields.io/node/v/depd.svg -[node-url]: https://nodejs.org/en/download/ diff --git a/deps/npm/node_modules/diff/dist/diff.js b/deps/npm/node_modules/diff/dist/diff.js index bba91954f4b..7fa3a556c42 100644 --- a/deps/npm/node_modules/diff/dist/diff.js +++ b/deps/npm/node_modules/diff/dist/diff.js @@ -1,3 +1,40 @@ +/*! + + diff v5.1.0 + +Software License Agreement (BSD License) + +Copyright (c) 2009-2015, Kevin Decker + +All rights reserved. + +Redistribution and use of this software in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of Kevin Decker nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +@license +*/ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : @@ -38,6 +75,11 @@ oldLen = oldString.length; var editLength = 1; var maxEditLength = newLen + oldLen; + + if (options.maxEditLength) { + maxEditLength = Math.min(maxEditLength, options.maxEditLength); + } + var bestPath = [{ newPos: -1, components: [] @@ -102,15 +144,13 @@ editLength++; } // Performs the length of edit iteration. Is a bit fugly as this has to support the // sync and async mode which is never fun. Loops over execEditLength until a value - // is produced. + // is produced, or until the edit length exceeds options.maxEditLength (if given), + // in which case it will return undefined. if (callback) { (function exec() { setTimeout(function () { - // This should not happen, but we want to be safe. - - /* istanbul ignore next */ if (editLength > maxEditLength) { return callback(); } @@ -928,6 +968,11 @@ } var diff = diffLines(oldStr, newStr, options); + + if (!diff) { + return; + } + diff.push({ value: '', lines: [] diff --git a/deps/npm/node_modules/diff/dist/diff.min.js b/deps/npm/node_modules/diff/dist/diff.min.js new file mode 100644 index 00000000000..80c20de5b75 --- /dev/null +++ b/deps/npm/node_modules/diff/dist/diff.min.js @@ -0,0 +1,38 @@ +/*! + + diff v5.1.0 + +Software License Agreement (BSD License) + +Copyright (c) 2009-2015, Kevin Decker + +All rights reserved. + +Redistribution and use of this software in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of Kevin Decker nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +@license +*/ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).Diff={})}(this,function(e){"use strict";function t(){}t.prototype={diff:function(u,a,e){var n=2=c&&h<=i+1)return d([{value:this.join(a),count:a.length}]);function o(){for(var e,n=-1*p;n<=p;n+=2){var t=void 0,r=v[n-1],i=v[n+1],o=(i?i.newPos:0)-n;r&&(v[n-1]=void 0);var l=r&&r.newPos+1=c&&h<=o+1)return d(function(e,n,t,r,i){for(var o=0,l=n.length,s=0,u=0;oe.length?t:e}),d.value=e.join(f)):d.value=e.join(t.slice(s,s+d.count)),s+=d.count,d.added||(u+=d.count))}var c=n[l-1];1e.length)&&(n=e.length);for(var t=0,r=new Array(n);t=c.length-2&&u.length<=d.context&&(i=/\n$/.test(a),o=/\n$/.test(f),l=0==u.length&&g.length>r.oldLines,!i&&l&&0e.length)return!1;for(var t=0;t"):i.removed&&t.push(""),t.push((n=i.value,n.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""))),i.added?t.push(""):i.removed&&t.push("")}return t.join("")},e.createPatch=function(e,n,t,r,i,o){return y(e,e,n,t,r,i,o)},e.createTwoFilesPatch=y,e.diffArrays=function(e,n,t){return g.diff(e,n,t)},e.diffChars=function(e,n,t){return r.diff(e,n,t)},e.diffCss=function(e,n,t){return f.diff(e,n,t)},e.diffJson=function(e,n,t){return p.diff(e,n,t)},e.diffLines=L,e.diffSentences=function(e,n,t){return a.diff(e,n,t)},e.diffTrimmedLines=function(e,n,t){var r=i(t,{ignoreWhitespace:!0});return u.diff(e,n,r)},e.diffWords=function(e,n,t){return t=i(t,{ignoreWhitespace:!0}),s.diff(e,n,t)},e.diffWordsWithSpace=function(e,n,t){return s.diff(e,n,t)},e.merge=function(e,n,t){e=b(e,t),n=b(n,t);var r={};(e.index||n.index)&&(r.index=e.index||n.index),(e.newFileName||n.newFileName)&&(F(e)?F(n)?(r.oldFileName=N(r,e.oldFileName,n.oldFileName),r.newFileName=N(r,e.newFileName,n.newFileName),r.oldHeader=N(r,e.oldHeader,n.oldHeader),r.newHeader=N(r,e.newHeader,n.newHeader)):(r.oldFileName=e.oldFileName,r.newFileName=e.newFileName,r.oldHeader=e.oldHeader,r.newHeader=e.newHeader):(r.oldFileName=n.oldFileName||e.oldFileName,r.newFileName=n.newFileName||e.newFileName,r.oldHeader=n.oldHeader||e.oldHeader,r.newHeader=n.newHeader||e.newHeader)),r.hunks=[];for(var i=0,o=0,l=0,s=0;i maxEditLength) { return callback(); } @@ -301,4 +304,4 @@ function clonePath(path) { components: path.components.slice(0) }; } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Jhc2UuanMiXSwibmFtZXMiOlsiRGlmZiIsInByb3RvdHlwZSIsImRpZmYiLCJvbGRTdHJpbmciLCJuZXdTdHJpbmciLCJvcHRpb25zIiwiY2FsbGJhY2siLCJzZWxmIiwiZG9uZSIsInZhbHVlIiwic2V0VGltZW91dCIsInVuZGVmaW5lZCIsImNhc3RJbnB1dCIsInJlbW92ZUVtcHR5IiwidG9rZW5pemUiLCJuZXdMZW4iLCJsZW5ndGgiLCJvbGRMZW4iLCJlZGl0TGVuZ3RoIiwibWF4RWRpdExlbmd0aCIsImJlc3RQYXRoIiwibmV3UG9zIiwiY29tcG9uZW50cyIsIm9sZFBvcyIsImV4dHJhY3RDb21tb24iLCJqb2luIiwiY291bnQiLCJleGVjRWRpdExlbmd0aCIsImRpYWdvbmFsUGF0aCIsImJhc2VQYXRoIiwiYWRkUGF0aCIsInJlbW92ZVBhdGgiLCJjYW5BZGQiLCJjYW5SZW1vdmUiLCJjbG9uZVBhdGgiLCJwdXNoQ29tcG9uZW50IiwiYnVpbGRWYWx1ZXMiLCJ1c2VMb25nZXN0VG9rZW4iLCJleGVjIiwicmV0IiwiYWRkZWQiLCJyZW1vdmVkIiwibGFzdCIsInB1c2giLCJjb21tb25Db3VudCIsImVxdWFscyIsImxlZnQiLCJyaWdodCIsImNvbXBhcmF0b3IiLCJpZ25vcmVDYXNlIiwidG9Mb3dlckNhc2UiLCJhcnJheSIsImkiLCJzcGxpdCIsImNoYXJzIiwiY29tcG9uZW50UG9zIiwiY29tcG9uZW50TGVuIiwiY29tcG9uZW50Iiwic2xpY2UiLCJtYXAiLCJvbGRWYWx1ZSIsInRtcCIsImxhc3RDb21wb25lbnQiLCJwb3AiLCJwYXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBZSxTQUFTQSxJQUFULEdBQWdCLENBQUU7O0FBRWpDQSxJQUFJLENBQUNDLFNBQUwsR0FBaUI7QUFBQTs7QUFBQTtBQUNmQyxFQUFBQSxJQURlLGdCQUNWQyxTQURVLEVBQ0NDLFNBREQsRUFDMEI7QUFBQTtBQUFBO0FBQUE7QUFBZEMsSUFBQUEsT0FBYyx1RUFBSixFQUFJO0FBQ3ZDLFFBQUlDLFFBQVEsR0FBR0QsT0FBTyxDQUFDQyxRQUF2Qjs7QUFDQSxRQUFJLE9BQU9ELE9BQVAsS0FBbUIsVUFBdkIsRUFBbUM7QUFDakNDLE1BQUFBLFFBQVEsR0FBR0QsT0FBWDtBQUNBQSxNQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNEOztBQUNELFNBQUtBLE9BQUwsR0FBZUEsT0FBZjtBQUVBLFFBQUlFLElBQUksR0FBRyxJQUFYOztBQUVBLGFBQVNDLElBQVQsQ0FBY0MsS0FBZCxFQUFxQjtBQUNuQixVQUFJSCxRQUFKLEVBQWM7QUFDWkksUUFBQUEsVUFBVSxDQUFDLFlBQVc7QUFBRUosVUFBQUEsUUFBUSxDQUFDSyxTQUFELEVBQVlGLEtBQVosQ0FBUjtBQUE2QixTQUEzQyxFQUE2QyxDQUE3QyxDQUFWO0FBQ0EsZUFBTyxJQUFQO0FBQ0QsT0FIRCxNQUdPO0FBQ0wsZUFBT0EsS0FBUDtBQUNEO0FBQ0YsS0FqQnNDLENBbUJ2Qzs7O0FBQ0FOLElBQUFBLFNBQVMsR0FBRyxLQUFLUyxTQUFMLENBQWVULFNBQWYsQ0FBWjtBQUNBQyxJQUFBQSxTQUFTLEdBQUcsS0FBS1EsU0FBTCxDQUFlUixTQUFmLENBQVo7QUFFQUQsSUFBQUEsU0FBUyxHQUFHLEtBQUtVLFdBQUwsQ0FBaUIsS0FBS0MsUUFBTCxDQUFjWCxTQUFkLENBQWpCLENBQVo7QUFDQUMsSUFBQUEsU0FBUyxHQUFHLEtBQUtTLFdBQUwsQ0FBaUIsS0FBS0MsUUFBTCxDQUFjVixTQUFkLENBQWpCLENBQVo7QUFFQSxRQUFJVyxNQUFNLEdBQUdYLFNBQVMsQ0FBQ1ksTUFBdkI7QUFBQSxRQUErQkMsTUFBTSxHQUFHZCxTQUFTLENBQUNhLE1BQWxEO0FBQ0EsUUFBSUUsVUFBVSxHQUFHLENBQWpCO0FBQ0EsUUFBSUMsYUFBYSxHQUFHSixNQUFNLEdBQUdFLE1BQTdCO0FBQ0EsUUFBSUcsUUFBUSxHQUFHLENBQUM7QUFBRUMsTUFBQUEsTUFBTSxFQUFFLENBQUMsQ0FBWDtBQUFjQyxNQUFBQSxVQUFVLEVBQUU7QUFBMUIsS0FBRCxDQUFmLENBN0J1QyxDQStCdkM7O0FBQ0EsUUFBSUMsTUFBTSxHQUFHLEtBQUtDLGFBQUwsQ0FBbUJKLFFBQVEsQ0FBQyxDQUFELENBQTNCLEVBQWdDaEIsU0FBaEMsRUFBMkNELFNBQTNDLEVBQXNELENBQXRELENBQWI7O0FBQ0EsUUFBSWlCLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWUMsTUFBWixHQUFxQixDQUFyQixJQUEwQk4sTUFBMUIsSUFBb0NRLE1BQU0sR0FBRyxDQUFULElBQWNOLE1BQXRELEVBQThEO0FBQzVEO0FBQ0EsYUFBT1QsSUFBSSxDQUFDLENBQUM7QUFBQ0MsUUFBQUEsS0FBSyxFQUFFLEtBQUtnQixJQUFMLENBQVVyQixTQUFWLENBQVI7QUFBOEJzQixRQUFBQSxLQUFLLEVBQUV0QixTQUFTLENBQUNZO0FBQS9DLE9BQUQsQ0FBRCxDQUFYO0FBQ0QsS0FwQ3NDLENBc0N2Qzs7O0FBQ0EsYUFBU1csY0FBVCxHQUEwQjtBQUN4QixXQUFLLElBQUlDLFlBQVksR0FBRyxDQUFDLENBQUQsR0FBS1YsVUFBN0IsRUFBeUNVLFlBQVksSUFBSVYsVUFBekQsRUFBcUVVLFlBQVksSUFBSSxDQUFyRixFQUF3RjtBQUN0RixZQUFJQyxRQUFRO0FBQUE7QUFBQTtBQUFaO0FBQUE7O0FBQ0EsWUFBSUMsT0FBTyxHQUFHVixRQUFRLENBQUNRLFlBQVksR0FBRyxDQUFoQixDQUF0QjtBQUFBLFlBQ0lHLFVBQVUsR0FBR1gsUUFBUSxDQUFDUSxZQUFZLEdBQUcsQ0FBaEIsQ0FEekI7QUFBQSxZQUVJTCxPQUFNLEdBQUcsQ0FBQ1EsVUFBVSxHQUFHQSxVQUFVLENBQUNWLE1BQWQsR0FBdUIsQ0FBbEMsSUFBdUNPLFlBRnBEOztBQUdBLFlBQUlFLE9BQUosRUFBYTtBQUNYO0FBQ0FWLFVBQUFBLFFBQVEsQ0FBQ1EsWUFBWSxHQUFHLENBQWhCLENBQVIsR0FBNkJqQixTQUE3QjtBQUNEOztBQUVELFlBQUlxQixNQUFNLEdBQUdGLE9BQU8sSUFBSUEsT0FBTyxDQUFDVCxNQUFSLEdBQWlCLENBQWpCLEdBQXFCTixNQUE3QztBQUFBLFlBQ0lrQixTQUFTLEdBQUdGLFVBQVUsSUFBSSxLQUFLUixPQUFuQixJQUE2QkEsT0FBTSxHQUFHTixNQUR0RDs7QUFFQSxZQUFJLENBQUNlLE1BQUQsSUFBVyxDQUFDQyxTQUFoQixFQUEyQjtBQUN6QjtBQUNBYixVQUFBQSxRQUFRLENBQUNRLFlBQUQsQ0FBUixHQUF5QmpCLFNBQXpCO0FBQ0E7QUFDRCxTQWhCcUYsQ0FrQnRGO0FBQ0E7QUFDQTs7O0FBQ0EsWUFBSSxDQUFDcUIsTUFBRCxJQUFZQyxTQUFTLElBQUlILE9BQU8sQ0FBQ1QsTUFBUixHQUFpQlUsVUFBVSxDQUFDVixNQUF6RCxFQUFrRTtBQUNoRVEsVUFBQUEsUUFBUSxHQUFHSyxTQUFTLENBQUNILFVBQUQsQ0FBcEI7QUFDQXhCLFVBQUFBLElBQUksQ0FBQzRCLGFBQUwsQ0FBbUJOLFFBQVEsQ0FBQ1AsVUFBNUIsRUFBd0NYLFNBQXhDLEVBQW1ELElBQW5EO0FBQ0QsU0FIRCxNQUdPO0FBQ0xrQixVQUFBQSxRQUFRLEdBQUdDLE9BQVgsQ0FESyxDQUNlOztBQUNwQkQsVUFBQUEsUUFBUSxDQUFDUixNQUFUO0FBQ0FkLFVBQUFBLElBQUksQ0FBQzRCLGFBQUwsQ0FBbUJOLFFBQVEsQ0FBQ1AsVUFBNUIsRUFBd0MsSUFBeEMsRUFBOENYLFNBQTlDO0FBQ0Q7O0FBRURZLFFBQUFBLE9BQU0sR0FBR2hCLElBQUksQ0FBQ2lCLGFBQUwsQ0FBbUJLLFFBQW5CLEVBQTZCekIsU0FBN0IsRUFBd0NELFNBQXhDLEVBQW1EeUIsWUFBbkQsQ0FBVCxDQTlCc0YsQ0FnQ3RGOztBQUNBLFlBQUlDLFFBQVEsQ0FBQ1IsTUFBVCxHQUFrQixDQUFsQixJQUF1Qk4sTUFBdkIsSUFBaUNRLE9BQU0sR0FBRyxDQUFULElBQWNOLE1BQW5ELEVBQTJEO0FBQ3pELGlCQUFPVCxJQUFJLENBQUM0QixXQUFXLENBQUM3QixJQUFELEVBQU9zQixRQUFRLENBQUNQLFVBQWhCLEVBQTRCbEIsU0FBNUIsRUFBdUNELFNBQXZDLEVBQWtESSxJQUFJLENBQUM4QixlQUF2RCxDQUFaLENBQVg7QUFDRCxTQUZELE1BRU87QUFDTDtBQUNBakIsVUFBQUEsUUFBUSxDQUFDUSxZQUFELENBQVIsR0FBeUJDLFFBQXpCO0FBQ0Q7QUFDRjs7QUFFRFgsTUFBQUEsVUFBVTtBQUNYLEtBbEZzQyxDQW9GdkM7QUFDQTtBQUNBOzs7QUFDQSxRQUFJWixRQUFKLEVBQWM7QUFDWCxnQkFBU2dDLElBQVQsR0FBZ0I7QUFDZjVCLFFBQUFBLFVBQVUsQ0FBQyxZQUFXO0FBQ3BCOztBQUNBO0FBQ0EsY0FBSVEsVUFBVSxHQUFHQyxhQUFqQixFQUFnQztBQUM5QixtQkFBT2IsUUFBUSxFQUFmO0FBQ0Q7O0FBRUQsY0FBSSxDQUFDcUIsY0FBYyxFQUFuQixFQUF1QjtBQUNyQlcsWUFBQUEsSUFBSTtBQUNMO0FBQ0YsU0FWUyxFQVVQLENBVk8sQ0FBVjtBQVdELE9BWkEsR0FBRDtBQWFELEtBZEQsTUFjTztBQUNMLGFBQU9wQixVQUFVLElBQUlDLGFBQXJCLEVBQW9DO0FBQ2xDLFlBQUlvQixHQUFHLEdBQUdaLGNBQWMsRUFBeEI7O0FBQ0EsWUFBSVksR0FBSixFQUFTO0FBQ1AsaUJBQU9BLEdBQVA7QUFDRDtBQUNGO0FBQ0Y7QUFDRixHQTlHYzs7QUFBQTs7QUFBQTtBQWdIZkosRUFBQUEsYUFoSGUseUJBZ0hEYixVQWhIQyxFQWdIV2tCLEtBaEhYLEVBZ0hrQkMsT0FoSGxCLEVBZ0gyQjtBQUN4QyxRQUFJQyxJQUFJLEdBQUdwQixVQUFVLENBQUNBLFVBQVUsQ0FBQ04sTUFBWCxHQUFvQixDQUFyQixDQUFyQjs7QUFDQSxRQUFJMEIsSUFBSSxJQUFJQSxJQUFJLENBQUNGLEtBQUwsS0FBZUEsS0FBdkIsSUFBZ0NFLElBQUksQ0FBQ0QsT0FBTCxLQUFpQkEsT0FBckQsRUFBOEQ7QUFDNUQ7QUFDQTtBQUNBbkIsTUFBQUEsVUFBVSxDQUFDQSxVQUFVLENBQUNOLE1BQVgsR0FBb0IsQ0FBckIsQ0FBVixHQUFvQztBQUFDVSxRQUFBQSxLQUFLLEVBQUVnQixJQUFJLENBQUNoQixLQUFMLEdBQWEsQ0FBckI7QUFBd0JjLFFBQUFBLEtBQUssRUFBRUEsS0FBL0I7QUFBc0NDLFFBQUFBLE9BQU8sRUFBRUE7QUFBL0MsT0FBcEM7QUFDRCxLQUpELE1BSU87QUFDTG5CLE1BQUFBLFVBQVUsQ0FBQ3FCLElBQVgsQ0FBZ0I7QUFBQ2pCLFFBQUFBLEtBQUssRUFBRSxDQUFSO0FBQVdjLFFBQUFBLEtBQUssRUFBRUEsS0FBbEI7QUFBeUJDLFFBQUFBLE9BQU8sRUFBRUE7QUFBbEMsT0FBaEI7QUFDRDtBQUNGLEdBekhjOztBQUFBOztBQUFBO0FBMEhmakIsRUFBQUEsYUExSGUseUJBMEhESyxRQTFIQyxFQTBIU3pCLFNBMUhULEVBMEhvQkQsU0ExSHBCLEVBMEgrQnlCLFlBMUgvQixFQTBINkM7QUFDMUQsUUFBSWIsTUFBTSxHQUFHWCxTQUFTLENBQUNZLE1BQXZCO0FBQUEsUUFDSUMsTUFBTSxHQUFHZCxTQUFTLENBQUNhLE1BRHZCO0FBQUEsUUFFSUssTUFBTSxHQUFHUSxRQUFRLENBQUNSLE1BRnRCO0FBQUEsUUFHSUUsTUFBTSxHQUFHRixNQUFNLEdBQUdPLFlBSHRCO0FBQUEsUUFLSWdCLFdBQVcsR0FBRyxDQUxsQjs7QUFNQSxXQUFPdkIsTUFBTSxHQUFHLENBQVQsR0FBYU4sTUFBYixJQUF1QlEsTUFBTSxHQUFHLENBQVQsR0FBYU4sTUFBcEMsSUFBOEMsS0FBSzRCLE1BQUwsQ0FBWXpDLFNBQVMsQ0FBQ2lCLE1BQU0sR0FBRyxDQUFWLENBQXJCLEVBQW1DbEIsU0FBUyxDQUFDb0IsTUFBTSxHQUFHLENBQVYsQ0FBNUMsQ0FBckQsRUFBZ0g7QUFDOUdGLE1BQUFBLE1BQU07QUFDTkUsTUFBQUEsTUFBTTtBQUNOcUIsTUFBQUEsV0FBVztBQUNaOztBQUVELFFBQUlBLFdBQUosRUFBaUI7QUFDZmYsTUFBQUEsUUFBUSxDQUFDUCxVQUFULENBQW9CcUIsSUFBcEIsQ0FBeUI7QUFBQ2pCLFFBQUFBLEtBQUssRUFBRWtCO0FBQVIsT0FBekI7QUFDRDs7QUFFRGYsSUFBQUEsUUFBUSxDQUFDUixNQUFULEdBQWtCQSxNQUFsQjtBQUNBLFdBQU9FLE1BQVA7QUFDRCxHQTdJYzs7QUFBQTs7QUFBQTtBQStJZnNCLEVBQUFBLE1BL0llLGtCQStJUkMsSUEvSVEsRUErSUZDLEtBL0lFLEVBK0lLO0FBQ2xCLFFBQUksS0FBSzFDLE9BQUwsQ0FBYTJDLFVBQWpCLEVBQTZCO0FBQzNCLGFBQU8sS0FBSzNDLE9BQUwsQ0FBYTJDLFVBQWIsQ0FBd0JGLElBQXhCLEVBQThCQyxLQUE5QixDQUFQO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsYUFBT0QsSUFBSSxLQUFLQyxLQUFULElBQ0QsS0FBSzFDLE9BQUwsQ0FBYTRDLFVBQWIsSUFBMkJILElBQUksQ0FBQ0ksV0FBTCxPQUF1QkgsS0FBSyxDQUFDRyxXQUFOLEVBRHhEO0FBRUQ7QUFDRixHQXRKYzs7QUFBQTs7QUFBQTtBQXVKZnJDLEVBQUFBLFdBdkplLHVCQXVKSHNDLEtBdkpHLEVBdUpJO0FBQ2pCLFFBQUlaLEdBQUcsR0FBRyxFQUFWOztBQUNBLFNBQUssSUFBSWEsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0QsS0FBSyxDQUFDbkMsTUFBMUIsRUFBa0NvQyxDQUFDLEVBQW5DLEVBQXVDO0FBQ3JDLFVBQUlELEtBQUssQ0FBQ0MsQ0FBRCxDQUFULEVBQWM7QUFDWmIsUUFBQUEsR0FBRyxDQUFDSSxJQUFKLENBQVNRLEtBQUssQ0FBQ0MsQ0FBRCxDQUFkO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPYixHQUFQO0FBQ0QsR0EvSmM7O0FBQUE7O0FBQUE7QUFnS2YzQixFQUFBQSxTQWhLZSxxQkFnS0xILEtBaEtLLEVBZ0tFO0FBQ2YsV0FBT0EsS0FBUDtBQUNELEdBbEtjOztBQUFBOztBQUFBO0FBbUtmSyxFQUFBQSxRQW5LZSxvQkFtS05MLEtBbktNLEVBbUtDO0FBQ2QsV0FBT0EsS0FBSyxDQUFDNEMsS0FBTixDQUFZLEVBQVosQ0FBUDtBQUNELEdBcktjOztBQUFBOztBQUFBO0FBc0tmNUIsRUFBQUEsSUF0S2UsZ0JBc0tWNkIsS0F0S1UsRUFzS0g7QUFDVixXQUFPQSxLQUFLLENBQUM3QixJQUFOLENBQVcsRUFBWCxDQUFQO0FBQ0Q7QUF4S2MsQ0FBakI7O0FBMktBLFNBQVNXLFdBQVQsQ0FBcUJsQyxJQUFyQixFQUEyQm9CLFVBQTNCLEVBQXVDbEIsU0FBdkMsRUFBa0RELFNBQWxELEVBQTZEa0MsZUFBN0QsRUFBOEU7QUFDNUUsTUFBSWtCLFlBQVksR0FBRyxDQUFuQjtBQUFBLE1BQ0lDLFlBQVksR0FBR2xDLFVBQVUsQ0FBQ04sTUFEOUI7QUFBQSxNQUVJSyxNQUFNLEdBQUcsQ0FGYjtBQUFBLE1BR0lFLE1BQU0sR0FBRyxDQUhiOztBQUtBLFNBQU9nQyxZQUFZLEdBQUdDLFlBQXRCLEVBQW9DRCxZQUFZLEVBQWhELEVBQW9EO0FBQ2xELFFBQUlFLFNBQVMsR0FBR25DLFVBQVUsQ0FBQ2lDLFlBQUQsQ0FBMUI7O0FBQ0EsUUFBSSxDQUFDRSxTQUFTLENBQUNoQixPQUFmLEVBQXdCO0FBQ3RCLFVBQUksQ0FBQ2dCLFNBQVMsQ0FBQ2pCLEtBQVgsSUFBb0JILGVBQXhCLEVBQXlDO0FBQ3ZDLFlBQUk1QixLQUFLLEdBQUdMLFNBQVMsQ0FBQ3NELEtBQVYsQ0FBZ0JyQyxNQUFoQixFQUF3QkEsTUFBTSxHQUFHb0MsU0FBUyxDQUFDL0IsS0FBM0MsQ0FBWjtBQUNBakIsUUFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUNrRCxHQUFOLENBQVUsVUFBU2xELEtBQVQsRUFBZ0IyQyxDQUFoQixFQUFtQjtBQUNuQyxjQUFJUSxRQUFRLEdBQUd6RCxTQUFTLENBQUNvQixNQUFNLEdBQUc2QixDQUFWLENBQXhCO0FBQ0EsaUJBQU9RLFFBQVEsQ0FBQzVDLE1BQVQsR0FBa0JQLEtBQUssQ0FBQ08sTUFBeEIsR0FBaUM0QyxRQUFqQyxHQUE0Q25ELEtBQW5EO0FBQ0QsU0FITyxDQUFSO0FBS0FnRCxRQUFBQSxTQUFTLENBQUNoRCxLQUFWLEdBQWtCUCxJQUFJLENBQUN1QixJQUFMLENBQVVoQixLQUFWLENBQWxCO0FBQ0QsT0FSRCxNQVFPO0FBQ0xnRCxRQUFBQSxTQUFTLENBQUNoRCxLQUFWLEdBQWtCUCxJQUFJLENBQUN1QixJQUFMLENBQVVyQixTQUFTLENBQUNzRCxLQUFWLENBQWdCckMsTUFBaEIsRUFBd0JBLE1BQU0sR0FBR29DLFNBQVMsQ0FBQy9CLEtBQTNDLENBQVYsQ0FBbEI7QUFDRDs7QUFDREwsTUFBQUEsTUFBTSxJQUFJb0MsU0FBUyxDQUFDL0IsS0FBcEIsQ0Fac0IsQ0FjdEI7O0FBQ0EsVUFBSSxDQUFDK0IsU0FBUyxDQUFDakIsS0FBZixFQUFzQjtBQUNwQmpCLFFBQUFBLE1BQU0sSUFBSWtDLFNBQVMsQ0FBQy9CLEtBQXBCO0FBQ0Q7QUFDRixLQWxCRCxNQWtCTztBQUNMK0IsTUFBQUEsU0FBUyxDQUFDaEQsS0FBVixHQUFrQlAsSUFBSSxDQUFDdUIsSUFBTCxDQUFVdEIsU0FBUyxDQUFDdUQsS0FBVixDQUFnQm5DLE1BQWhCLEVBQXdCQSxNQUFNLEdBQUdrQyxTQUFTLENBQUMvQixLQUEzQyxDQUFWLENBQWxCO0FBQ0FILE1BQUFBLE1BQU0sSUFBSWtDLFNBQVMsQ0FBQy9CLEtBQXBCLENBRkssQ0FJTDtBQUNBO0FBQ0E7O0FBQ0EsVUFBSTZCLFlBQVksSUFBSWpDLFVBQVUsQ0FBQ2lDLFlBQVksR0FBRyxDQUFoQixDQUFWLENBQTZCZixLQUFqRCxFQUF3RDtBQUN0RCxZQUFJcUIsR0FBRyxHQUFHdkMsVUFBVSxDQUFDaUMsWUFBWSxHQUFHLENBQWhCLENBQXBCO0FBQ0FqQyxRQUFBQSxVQUFVLENBQUNpQyxZQUFZLEdBQUcsQ0FBaEIsQ0FBVixHQUErQmpDLFVBQVUsQ0FBQ2lDLFlBQUQsQ0FBekM7QUFDQWpDLFFBQUFBLFVBQVUsQ0FBQ2lDLFlBQUQsQ0FBVixHQUEyQk0sR0FBM0I7QUFDRDtBQUNGO0FBQ0YsR0F2QzJFLENBeUM1RTtBQUNBO0FBQ0E7OztBQUNBLE1BQUlDLGFBQWEsR0FBR3hDLFVBQVUsQ0FBQ2tDLFlBQVksR0FBRyxDQUFoQixDQUE5Qjs7QUFDQSxNQUFJQSxZQUFZLEdBQUcsQ0FBZixJQUNHLE9BQU9NLGFBQWEsQ0FBQ3JELEtBQXJCLEtBQStCLFFBRGxDLEtBRUlxRCxhQUFhLENBQUN0QixLQUFkLElBQXVCc0IsYUFBYSxDQUFDckIsT0FGekMsS0FHR3ZDLElBQUksQ0FBQzJDLE1BQUwsQ0FBWSxFQUFaLEVBQWdCaUIsYUFBYSxDQUFDckQsS0FBOUIsQ0FIUCxFQUc2QztBQUMzQ2EsSUFBQUEsVUFBVSxDQUFDa0MsWUFBWSxHQUFHLENBQWhCLENBQVYsQ0FBNkIvQyxLQUE3QixJQUFzQ3FELGFBQWEsQ0FBQ3JELEtBQXBEO0FBQ0FhLElBQUFBLFVBQVUsQ0FBQ3lDLEdBQVg7QUFDRDs7QUFFRCxTQUFPekMsVUFBUDtBQUNEOztBQUVELFNBQVNZLFNBQVQsQ0FBbUI4QixJQUFuQixFQUF5QjtBQUN2QixTQUFPO0FBQUUzQyxJQUFBQSxNQUFNLEVBQUUyQyxJQUFJLENBQUMzQyxNQUFmO0FBQXVCQyxJQUFBQSxVQUFVLEVBQUUwQyxJQUFJLENBQUMxQyxVQUFMLENBQWdCb0MsS0FBaEIsQ0FBc0IsQ0FBdEI7QUFBbkMsR0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGlmZigpIHt9XG5cbkRpZmYucHJvdG90eXBlID0ge1xuICBkaWZmKG9sZFN0cmluZywgbmV3U3RyaW5nLCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gZG9uZSh2YWx1ZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKHVuZGVmaW5lZCwgdmFsdWUpOyB9LCAwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgc3ViY2xhc3NlcyB0byBtYXNzYWdlIHRoZSBpbnB1dCBwcmlvciB0byBydW5uaW5nXG4gICAgb2xkU3RyaW5nID0gdGhpcy5jYXN0SW5wdXQob2xkU3RyaW5nKTtcbiAgICBuZXdTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChuZXdTdHJpbmcpO1xuXG4gICAgb2xkU3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG9sZFN0cmluZykpO1xuICAgIG5ld1N0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShuZXdTdHJpbmcpKTtcblxuICAgIGxldCBuZXdMZW4gPSBuZXdTdHJpbmcubGVuZ3RoLCBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoO1xuICAgIGxldCBlZGl0TGVuZ3RoID0gMTtcbiAgICBsZXQgbWF4RWRpdExlbmd0aCA9IG5ld0xlbiArIG9sZExlbjtcbiAgICBsZXQgYmVzdFBhdGggPSBbeyBuZXdQb3M6IC0xLCBjb21wb25lbnRzOiBbXSB9XTtcblxuICAgIC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG4gICAgbGV0IG9sZFBvcyA9IHRoaXMuZXh0cmFjdENvbW1vbihiZXN0UGF0aFswXSwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIDApO1xuICAgIGlmIChiZXN0UGF0aFswXS5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBvbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgLy8gSWRlbnRpdHkgcGVyIHRoZSBlcXVhbGl0eSBhbmQgdG9rZW5pemVyXG4gICAgICByZXR1cm4gZG9uZShbe3ZhbHVlOiB0aGlzLmpvaW4obmV3U3RyaW5nKSwgY291bnQ6IG5ld1N0cmluZy5sZW5ndGh9XSk7XG4gICAgfVxuXG4gICAgLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuICAgIGZ1bmN0aW9uIGV4ZWNFZGl0TGVuZ3RoKCkge1xuICAgICAgZm9yIChsZXQgZGlhZ29uYWxQYXRoID0gLTEgKiBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggPD0gZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoICs9IDIpIHtcbiAgICAgICAgbGV0IGJhc2VQYXRoO1xuICAgICAgICBsZXQgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuICAgICAgICAgICAgcmVtb3ZlUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCArIDFdLFxuICAgICAgICAgICAgb2xkUG9zID0gKHJlbW92ZVBhdGggPyByZW1vdmVQYXRoLm5ld1BvcyA6IDApIC0gZGlhZ29uYWxQYXRoO1xuICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2FuQWRkID0gYWRkUGF0aCAmJiBhZGRQYXRoLm5ld1BvcyArIDEgPCBuZXdMZW4sXG4gICAgICAgICAgICBjYW5SZW1vdmUgPSByZW1vdmVQYXRoICYmIDAgPD0gb2xkUG9zICYmIG9sZFBvcyA8IG9sZExlbjtcbiAgICAgICAgaWYgKCFjYW5BZGQgJiYgIWNhblJlbW92ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgcGF0aCBpcyBhIHRlcm1pbmFsIHRoZW4gcHJ1bmVcbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSBkaWFnb25hbCB0aGF0IHdlIHdhbnQgdG8gYnJhbmNoIGZyb20uIFdlIHNlbGVjdCB0aGUgcHJpb3JcbiAgICAgICAgLy8gcGF0aCB3aG9zZSBwb3NpdGlvbiBpbiB0aGUgbmV3IHN0cmluZyBpcyB0aGUgZmFydGhlc3QgZnJvbSB0aGUgb3JpZ2luXG4gICAgICAgIC8vIGFuZCBkb2VzIG5vdCBwYXNzIHRoZSBib3VuZHMgb2YgdGhlIGRpZmYgZ3JhcGhcbiAgICAgICAgaWYgKCFjYW5BZGQgfHwgKGNhblJlbW92ZSAmJiBhZGRQYXRoLm5ld1BvcyA8IHJlbW92ZVBhdGgubmV3UG9zKSkge1xuICAgICAgICAgIGJhc2VQYXRoID0gY2xvbmVQYXRoKHJlbW92ZVBhdGgpO1xuICAgICAgICAgIHNlbGYucHVzaENvbXBvbmVudChiYXNlUGF0aC5jb21wb25lbnRzLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhc2VQYXRoID0gYWRkUGF0aDsgLy8gTm8gbmVlZCB0byBjbG9uZSwgd2UndmUgcHVsbGVkIGl0IGZyb20gdGhlIGxpc3RcbiAgICAgICAgICBiYXNlUGF0aC5uZXdQb3MrKztcbiAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdHJ1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9sZFBvcyA9IHNlbGYuZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCk7XG5cbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiBib3RoIHN0cmluZ3MsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgICAgaWYgKGJhc2VQYXRoLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAgICAgcmV0dXJuIGRvbmUoYnVpbGRWYWx1ZXMoc2VsZiwgYmFzZVBhdGguY29tcG9uZW50cywgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHNlbGYudXNlTG9uZ2VzdFRva2VuKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHRyYWNrIHRoaXMgcGF0aCBhcyBhIHBvdGVudGlhbCBjYW5kaWRhdGUgYW5kIGNvbnRpbnVlLlxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZGl0TGVuZ3RoKys7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybXMgdGhlIGxlbmd0aCBvZiBlZGl0IGl0ZXJhdGlvbi4gSXMgYSBiaXQgZnVnbHkgYXMgdGhpcyBoYXMgdG8gc3VwcG9ydCB0aGVcbiAgICAvLyBzeW5jIGFuZCBhc3luYyBtb2RlIHdoaWNoIGlzIG5ldmVyIGZ1bi4gTG9vcHMgb3ZlciBleGVjRWRpdExlbmd0aCB1bnRpbCBhIHZhbHVlXG4gICAgLy8gaXMgcHJvZHVjZWQuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAoZnVuY3Rpb24gZXhlYygpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2Ugd2FudCB0byBiZSBzYWZlLlxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWV4ZWNFZGl0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIGV4ZWMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGVkaXRMZW5ndGggPD0gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICBsZXQgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHVzaENvbXBvbmVudChjb21wb25lbnRzLCBhZGRlZCwgcmVtb3ZlZCkge1xuICAgIGxldCBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0ICYmIGxhc3QuYWRkZWQgPT09IGFkZGVkICYmIGxhc3QucmVtb3ZlZCA9PT0gcmVtb3ZlZCkge1xuICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSBoZXJlIGFzIHRoZSBjb21wb25lbnQgY2xvbmUgb3BlcmF0aW9uIGlzIGp1c3RcbiAgICAgIC8vIGFzIHNoYWxsb3cgYXJyYXkgY2xvbmVcbiAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXSA9IHtjb3VudDogbGFzdC5jb3VudCArIDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnRzLnB1c2goe2NvdW50OiAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfSk7XG4gICAgfVxuICB9LFxuICBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKSB7XG4gICAgbGV0IG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGgsXG4gICAgICAgIG5ld1BvcyA9IGJhc2VQYXRoLm5ld1BvcyxcbiAgICAgICAgb2xkUG9zID0gbmV3UG9zIC0gZGlhZ29uYWxQYXRoLFxuXG4gICAgICAgIGNvbW1vbkNvdW50ID0gMDtcbiAgICB3aGlsZSAobmV3UG9zICsgMSA8IG5ld0xlbiAmJiBvbGRQb3MgKyAxIDwgb2xkTGVuICYmIHRoaXMuZXF1YWxzKG5ld1N0cmluZ1tuZXdQb3MgKyAxXSwgb2xkU3RyaW5nW29sZFBvcyArIDFdKSkge1xuICAgICAgbmV3UG9zKys7XG4gICAgICBvbGRQb3MrKztcbiAgICAgIGNvbW1vbkNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvbW1vbkNvdW50KSB7XG4gICAgICBiYXNlUGF0aC5jb21wb25lbnRzLnB1c2goe2NvdW50OiBjb21tb25Db3VudH0pO1xuICAgIH1cblxuICAgIGJhc2VQYXRoLm5ld1BvcyA9IG5ld1BvcztcbiAgICByZXR1cm4gb2xkUG9zO1xuICB9LFxuXG4gIGVxdWFscyhsZWZ0LCByaWdodCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKGxlZnQsIHJpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0XG4gICAgICAgIHx8ICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSAmJiBsZWZ0LnRvTG93ZXJDYXNlKCkgPT09IHJpZ2h0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlRW1wdHkoYXJyYXkpIHtcbiAgICBsZXQgcmV0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycmF5W2ldKSB7XG4gICAgICAgIHJldC5wdXNoKGFycmF5W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcbiAgY2FzdElucHV0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICB0b2tlbml6ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJyk7XG4gIH0sXG4gIGpvaW4oY2hhcnMpIHtcbiAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJ1aWxkVmFsdWVzKGRpZmYsIGNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCB1c2VMb25nZXN0VG9rZW4pIHtcbiAgbGV0IGNvbXBvbmVudFBvcyA9IDAsXG4gICAgICBjb21wb25lbnRMZW4gPSBjb21wb25lbnRzLmxlbmd0aCxcbiAgICAgIG5ld1BvcyA9IDAsXG4gICAgICBvbGRQb3MgPSAwO1xuXG4gIGZvciAoOyBjb21wb25lbnRQb3MgPCBjb21wb25lbnRMZW47IGNvbXBvbmVudFBvcysrKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICBpZiAoIWNvbXBvbmVudC5yZW1vdmVkKSB7XG4gICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCAmJiB1c2VMb25nZXN0VG9rZW4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpIHtcbiAgICAgICAgICBsZXQgb2xkVmFsdWUgPSBvbGRTdHJpbmdbb2xkUG9zICsgaV07XG4gICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmxlbmd0aCA+IHZhbHVlLmxlbmd0aCA/IG9sZFZhbHVlIDogdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbih2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4obmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICB9XG4gICAgICBuZXdQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXG4gICAgICAvLyBDb21tb24gY2FzZVxuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQpIHtcbiAgICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG9sZFN0cmluZy5zbGljZShvbGRQb3MsIG9sZFBvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuICAgICAgLy8gUmV2ZXJzZSBhZGQgYW5kIHJlbW92ZSBzbyByZW1vdmVzIGFyZSBvdXRwdXQgZmlyc3QgdG8gbWF0Y2ggY29tbW9uIGNvbnZlbnRpb25cbiAgICAgIC8vIFRoZSBkaWZmaW5nIGFsZ29yaXRobSBpcyB0aWVkIHRvIGFkZCB0aGVuIHJlbW92ZSBvdXRwdXQgYW5kIHRoaXMgaXMgdGhlIHNpbXBsZXN0XG4gICAgICAvLyByb3V0ZSB0byBnZXQgdGhlIGRlc2lyZWQgb3V0cHV0IHdpdGggbWluaW1hbCBvdmVyaGVhZC5cbiAgICAgIGlmIChjb21wb25lbnRQb3MgJiYgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXS5hZGRlZCkge1xuICAgICAgICBsZXQgdG1wID0gY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXSA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3NdID0gdG1wO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpYWwgY2FzZSBoYW5kbGUgZm9yIHdoZW4gb25lIHRlcm1pbmFsIGlzIGlnbm9yZWQgKGkuZS4gd2hpdGVzcGFjZSkuXG4gIC8vIEZvciB0aGlzIGNhc2Ugd2UgbWVyZ2UgdGhlIHRlcm1pbmFsIGludG8gdGhlIHByaW9yIHN0cmluZyBhbmQgZHJvcCB0aGUgY2hhbmdlLlxuICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBzdHJpbmcgbW9kZS5cbiAgbGV0IGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuICBpZiAoY29tcG9uZW50TGVuID4gMVxuICAgICAgJiYgdHlwZW9mIGxhc3RDb21wb25lbnQudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAmJiAobGFzdENvbXBvbmVudC5hZGRlZCB8fCBsYXN0Q29tcG9uZW50LnJlbW92ZWQpXG4gICAgICAmJiBkaWZmLmVxdWFscygnJywgbGFzdENvbXBvbmVudC52YWx1ZSkpIHtcbiAgICBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDJdLnZhbHVlICs9IGxhc3RDb21wb25lbnQudmFsdWU7XG4gICAgY29tcG9uZW50cy5wb3AoKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRzO1xufVxuXG5mdW5jdGlvbiBjbG9uZVBhdGgocGF0aCkge1xuICByZXR1cm4geyBuZXdQb3M6IHBhdGgubmV3UG9zLCBjb21wb25lbnRzOiBwYXRoLmNvbXBvbmVudHMuc2xpY2UoMCkgfTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Jhc2UuanMiXSwibmFtZXMiOlsiRGlmZiIsInByb3RvdHlwZSIsImRpZmYiLCJvbGRTdHJpbmciLCJuZXdTdHJpbmciLCJvcHRpb25zIiwiY2FsbGJhY2siLCJzZWxmIiwiZG9uZSIsInZhbHVlIiwic2V0VGltZW91dCIsInVuZGVmaW5lZCIsImNhc3RJbnB1dCIsInJlbW92ZUVtcHR5IiwidG9rZW5pemUiLCJuZXdMZW4iLCJsZW5ndGgiLCJvbGRMZW4iLCJlZGl0TGVuZ3RoIiwibWF4RWRpdExlbmd0aCIsIk1hdGgiLCJtaW4iLCJiZXN0UGF0aCIsIm5ld1BvcyIsImNvbXBvbmVudHMiLCJvbGRQb3MiLCJleHRyYWN0Q29tbW9uIiwiam9pbiIsImNvdW50IiwiZXhlY0VkaXRMZW5ndGgiLCJkaWFnb25hbFBhdGgiLCJiYXNlUGF0aCIsImFkZFBhdGgiLCJyZW1vdmVQYXRoIiwiY2FuQWRkIiwiY2FuUmVtb3ZlIiwiY2xvbmVQYXRoIiwicHVzaENvbXBvbmVudCIsImJ1aWxkVmFsdWVzIiwidXNlTG9uZ2VzdFRva2VuIiwiZXhlYyIsInJldCIsImFkZGVkIiwicmVtb3ZlZCIsImxhc3QiLCJwdXNoIiwiY29tbW9uQ291bnQiLCJlcXVhbHMiLCJsZWZ0IiwicmlnaHQiLCJjb21wYXJhdG9yIiwiaWdub3JlQ2FzZSIsInRvTG93ZXJDYXNlIiwiYXJyYXkiLCJpIiwic3BsaXQiLCJjaGFycyIsImNvbXBvbmVudFBvcyIsImNvbXBvbmVudExlbiIsImNvbXBvbmVudCIsInNsaWNlIiwibWFwIiwib2xkVmFsdWUiLCJ0bXAiLCJsYXN0Q29tcG9uZW50IiwicG9wIiwicGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWUsU0FBU0EsSUFBVCxHQUFnQixDQUFFOztBQUVqQ0EsSUFBSSxDQUFDQyxTQUFMLEdBQWlCO0FBQUE7O0FBQUE7QUFDZkMsRUFBQUEsSUFEZSxnQkFDVkMsU0FEVSxFQUNDQyxTQURELEVBQzBCO0FBQUE7QUFBQTtBQUFBO0FBQWRDLElBQUFBLE9BQWMsdUVBQUosRUFBSTtBQUN2QyxRQUFJQyxRQUFRLEdBQUdELE9BQU8sQ0FBQ0MsUUFBdkI7O0FBQ0EsUUFBSSxPQUFPRCxPQUFQLEtBQW1CLFVBQXZCLEVBQW1DO0FBQ2pDQyxNQUFBQSxRQUFRLEdBQUdELE9BQVg7QUFDQUEsTUFBQUEsT0FBTyxHQUFHLEVBQVY7QUFDRDs7QUFDRCxTQUFLQSxPQUFMLEdBQWVBLE9BQWY7QUFFQSxRQUFJRSxJQUFJLEdBQUcsSUFBWDs7QUFFQSxhQUFTQyxJQUFULENBQWNDLEtBQWQsRUFBcUI7QUFDbkIsVUFBSUgsUUFBSixFQUFjO0FBQ1pJLFFBQUFBLFVBQVUsQ0FBQyxZQUFXO0FBQUVKLFVBQUFBLFFBQVEsQ0FBQ0ssU0FBRCxFQUFZRixLQUFaLENBQVI7QUFBNkIsU0FBM0MsRUFBNkMsQ0FBN0MsQ0FBVjtBQUNBLGVBQU8sSUFBUDtBQUNELE9BSEQsTUFHTztBQUNMLGVBQU9BLEtBQVA7QUFDRDtBQUNGLEtBakJzQyxDQW1CdkM7OztBQUNBTixJQUFBQSxTQUFTLEdBQUcsS0FBS1MsU0FBTCxDQUFlVCxTQUFmLENBQVo7QUFDQUMsSUFBQUEsU0FBUyxHQUFHLEtBQUtRLFNBQUwsQ0FBZVIsU0FBZixDQUFaO0FBRUFELElBQUFBLFNBQVMsR0FBRyxLQUFLVSxXQUFMLENBQWlCLEtBQUtDLFFBQUwsQ0FBY1gsU0FBZCxDQUFqQixDQUFaO0FBQ0FDLElBQUFBLFNBQVMsR0FBRyxLQUFLUyxXQUFMLENBQWlCLEtBQUtDLFFBQUwsQ0FBY1YsU0FBZCxDQUFqQixDQUFaO0FBRUEsUUFBSVcsTUFBTSxHQUFHWCxTQUFTLENBQUNZLE1BQXZCO0FBQUEsUUFBK0JDLE1BQU0sR0FBR2QsU0FBUyxDQUFDYSxNQUFsRDtBQUNBLFFBQUlFLFVBQVUsR0FBRyxDQUFqQjtBQUNBLFFBQUlDLGFBQWEsR0FBR0osTUFBTSxHQUFHRSxNQUE3Qjs7QUFDQSxRQUFHWixPQUFPLENBQUNjLGFBQVgsRUFBMEI7QUFDeEJBLE1BQUFBLGFBQWEsR0FBR0MsSUFBSSxDQUFDQyxHQUFMLENBQVNGLGFBQVQsRUFBd0JkLE9BQU8sQ0FBQ2MsYUFBaEMsQ0FBaEI7QUFDRDs7QUFFRCxRQUFJRyxRQUFRLEdBQUcsQ0FBQztBQUFFQyxNQUFBQSxNQUFNLEVBQUUsQ0FBQyxDQUFYO0FBQWNDLE1BQUFBLFVBQVUsRUFBRTtBQUExQixLQUFELENBQWYsQ0FqQ3VDLENBbUN2Qzs7QUFDQSxRQUFJQyxNQUFNLEdBQUcsS0FBS0MsYUFBTCxDQUFtQkosUUFBUSxDQUFDLENBQUQsQ0FBM0IsRUFBZ0NsQixTQUFoQyxFQUEyQ0QsU0FBM0MsRUFBc0QsQ0FBdEQsQ0FBYjs7QUFDQSxRQUFJbUIsUUFBUSxDQUFDLENBQUQsQ0FBUixDQUFZQyxNQUFaLEdBQXFCLENBQXJCLElBQTBCUixNQUExQixJQUFvQ1UsTUFBTSxHQUFHLENBQVQsSUFBY1IsTUFBdEQsRUFBOEQ7QUFDNUQ7QUFDQSxhQUFPVCxJQUFJLENBQUMsQ0FBQztBQUFDQyxRQUFBQSxLQUFLLEVBQUUsS0FBS2tCLElBQUwsQ0FBVXZCLFNBQVYsQ0FBUjtBQUE4QndCLFFBQUFBLEtBQUssRUFBRXhCLFNBQVMsQ0FBQ1k7QUFBL0MsT0FBRCxDQUFELENBQVg7QUFDRCxLQXhDc0MsQ0EwQ3ZDOzs7QUFDQSxhQUFTYSxjQUFULEdBQTBCO0FBQ3hCLFdBQUssSUFBSUMsWUFBWSxHQUFHLENBQUMsQ0FBRCxHQUFLWixVQUE3QixFQUF5Q1ksWUFBWSxJQUFJWixVQUF6RCxFQUFxRVksWUFBWSxJQUFJLENBQXJGLEVBQXdGO0FBQ3RGLFlBQUlDLFFBQVE7QUFBQTtBQUFBO0FBQVo7QUFBQTs7QUFDQSxZQUFJQyxPQUFPLEdBQUdWLFFBQVEsQ0FBQ1EsWUFBWSxHQUFHLENBQWhCLENBQXRCO0FBQUEsWUFDSUcsVUFBVSxHQUFHWCxRQUFRLENBQUNRLFlBQVksR0FBRyxDQUFoQixDQUR6QjtBQUFBLFlBRUlMLE9BQU0sR0FBRyxDQUFDUSxVQUFVLEdBQUdBLFVBQVUsQ0FBQ1YsTUFBZCxHQUF1QixDQUFsQyxJQUF1Q08sWUFGcEQ7O0FBR0EsWUFBSUUsT0FBSixFQUFhO0FBQ1g7QUFDQVYsVUFBQUEsUUFBUSxDQUFDUSxZQUFZLEdBQUcsQ0FBaEIsQ0FBUixHQUE2Qm5CLFNBQTdCO0FBQ0Q7O0FBRUQsWUFBSXVCLE1BQU0sR0FBR0YsT0FBTyxJQUFJQSxPQUFPLENBQUNULE1BQVIsR0FBaUIsQ0FBakIsR0FBcUJSLE1BQTdDO0FBQUEsWUFDSW9CLFNBQVMsR0FBR0YsVUFBVSxJQUFJLEtBQUtSLE9BQW5CLElBQTZCQSxPQUFNLEdBQUdSLE1BRHREOztBQUVBLFlBQUksQ0FBQ2lCLE1BQUQsSUFBVyxDQUFDQyxTQUFoQixFQUEyQjtBQUN6QjtBQUNBYixVQUFBQSxRQUFRLENBQUNRLFlBQUQsQ0FBUixHQUF5Qm5CLFNBQXpCO0FBQ0E7QUFDRCxTQWhCcUYsQ0FrQnRGO0FBQ0E7QUFDQTs7O0FBQ0EsWUFBSSxDQUFDdUIsTUFBRCxJQUFZQyxTQUFTLElBQUlILE9BQU8sQ0FBQ1QsTUFBUixHQUFpQlUsVUFBVSxDQUFDVixNQUF6RCxFQUFrRTtBQUNoRVEsVUFBQUEsUUFBUSxHQUFHSyxTQUFTLENBQUNILFVBQUQsQ0FBcEI7QUFDQTFCLFVBQUFBLElBQUksQ0FBQzhCLGFBQUwsQ0FBbUJOLFFBQVEsQ0FBQ1AsVUFBNUIsRUFBd0NiLFNBQXhDLEVBQW1ELElBQW5EO0FBQ0QsU0FIRCxNQUdPO0FBQ0xvQixVQUFBQSxRQUFRLEdBQUdDLE9BQVgsQ0FESyxDQUNlOztBQUNwQkQsVUFBQUEsUUFBUSxDQUFDUixNQUFUO0FBQ0FoQixVQUFBQSxJQUFJLENBQUM4QixhQUFMLENBQW1CTixRQUFRLENBQUNQLFVBQTVCLEVBQXdDLElBQXhDLEVBQThDYixTQUE5QztBQUNEOztBQUVEYyxRQUFBQSxPQUFNLEdBQUdsQixJQUFJLENBQUNtQixhQUFMLENBQW1CSyxRQUFuQixFQUE2QjNCLFNBQTdCLEVBQXdDRCxTQUF4QyxFQUFtRDJCLFlBQW5ELENBQVQsQ0E5QnNGLENBZ0N0Rjs7QUFDQSxZQUFJQyxRQUFRLENBQUNSLE1BQVQsR0FBa0IsQ0FBbEIsSUFBdUJSLE1BQXZCLElBQWlDVSxPQUFNLEdBQUcsQ0FBVCxJQUFjUixNQUFuRCxFQUEyRDtBQUN6RCxpQkFBT1QsSUFBSSxDQUFDOEIsV0FBVyxDQUFDL0IsSUFBRCxFQUFPd0IsUUFBUSxDQUFDUCxVQUFoQixFQUE0QnBCLFNBQTVCLEVBQXVDRCxTQUF2QyxFQUFrREksSUFBSSxDQUFDZ0MsZUFBdkQsQ0FBWixDQUFYO0FBQ0QsU0FGRCxNQUVPO0FBQ0w7QUFDQWpCLFVBQUFBLFFBQVEsQ0FBQ1EsWUFBRCxDQUFSLEdBQXlCQyxRQUF6QjtBQUNEO0FBQ0Y7O0FBRURiLE1BQUFBLFVBQVU7QUFDWCxLQXRGc0MsQ0F3RnZDO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxRQUFJWixRQUFKLEVBQWM7QUFDWCxnQkFBU2tDLElBQVQsR0FBZ0I7QUFDZjlCLFFBQUFBLFVBQVUsQ0FBQyxZQUFXO0FBQ3BCLGNBQUlRLFVBQVUsR0FBR0MsYUFBakIsRUFBZ0M7QUFDOUIsbUJBQU9iLFFBQVEsRUFBZjtBQUNEOztBQUVELGNBQUksQ0FBQ3VCLGNBQWMsRUFBbkIsRUFBdUI7QUFDckJXLFlBQUFBLElBQUk7QUFDTDtBQUNGLFNBUlMsRUFRUCxDQVJPLENBQVY7QUFTRCxPQVZBLEdBQUQ7QUFXRCxLQVpELE1BWU87QUFDTCxhQUFPdEIsVUFBVSxJQUFJQyxhQUFyQixFQUFvQztBQUNsQyxZQUFJc0IsR0FBRyxHQUFHWixjQUFjLEVBQXhCOztBQUNBLFlBQUlZLEdBQUosRUFBUztBQUNQLGlCQUFPQSxHQUFQO0FBQ0Q7QUFDRjtBQUNGO0FBQ0YsR0FqSGM7O0FBQUE7O0FBQUE7QUFtSGZKLEVBQUFBLGFBbkhlLHlCQW1IRGIsVUFuSEMsRUFtSFdrQixLQW5IWCxFQW1Ia0JDLE9BbkhsQixFQW1IMkI7QUFDeEMsUUFBSUMsSUFBSSxHQUFHcEIsVUFBVSxDQUFDQSxVQUFVLENBQUNSLE1BQVgsR0FBb0IsQ0FBckIsQ0FBckI7O0FBQ0EsUUFBSTRCLElBQUksSUFBSUEsSUFBSSxDQUFDRixLQUFMLEtBQWVBLEtBQXZCLElBQWdDRSxJQUFJLENBQUNELE9BQUwsS0FBaUJBLE9BQXJELEVBQThEO0FBQzVEO0FBQ0E7QUFDQW5CLE1BQUFBLFVBQVUsQ0FBQ0EsVUFBVSxDQUFDUixNQUFYLEdBQW9CLENBQXJCLENBQVYsR0FBb0M7QUFBQ1ksUUFBQUEsS0FBSyxFQUFFZ0IsSUFBSSxDQUFDaEIsS0FBTCxHQUFhLENBQXJCO0FBQXdCYyxRQUFBQSxLQUFLLEVBQUVBLEtBQS9CO0FBQXNDQyxRQUFBQSxPQUFPLEVBQUVBO0FBQS9DLE9BQXBDO0FBQ0QsS0FKRCxNQUlPO0FBQ0xuQixNQUFBQSxVQUFVLENBQUNxQixJQUFYLENBQWdCO0FBQUNqQixRQUFBQSxLQUFLLEVBQUUsQ0FBUjtBQUFXYyxRQUFBQSxLQUFLLEVBQUVBLEtBQWxCO0FBQXlCQyxRQUFBQSxPQUFPLEVBQUVBO0FBQWxDLE9BQWhCO0FBQ0Q7QUFDRixHQTVIYzs7QUFBQTs7QUFBQTtBQTZIZmpCLEVBQUFBLGFBN0hlLHlCQTZIREssUUE3SEMsRUE2SFMzQixTQTdIVCxFQTZIb0JELFNBN0hwQixFQTZIK0IyQixZQTdIL0IsRUE2SDZDO0FBQzFELFFBQUlmLE1BQU0sR0FBR1gsU0FBUyxDQUFDWSxNQUF2QjtBQUFBLFFBQ0lDLE1BQU0sR0FBR2QsU0FBUyxDQUFDYSxNQUR2QjtBQUFBLFFBRUlPLE1BQU0sR0FBR1EsUUFBUSxDQUFDUixNQUZ0QjtBQUFBLFFBR0lFLE1BQU0sR0FBR0YsTUFBTSxHQUFHTyxZQUh0QjtBQUFBLFFBS0lnQixXQUFXLEdBQUcsQ0FMbEI7O0FBTUEsV0FBT3ZCLE1BQU0sR0FBRyxDQUFULEdBQWFSLE1BQWIsSUFBdUJVLE1BQU0sR0FBRyxDQUFULEdBQWFSLE1BQXBDLElBQThDLEtBQUs4QixNQUFMLENBQVkzQyxTQUFTLENBQUNtQixNQUFNLEdBQUcsQ0FBVixDQUFyQixFQUFtQ3BCLFNBQVMsQ0FBQ3NCLE1BQU0sR0FBRyxDQUFWLENBQTVDLENBQXJELEVBQWdIO0FBQzlHRixNQUFBQSxNQUFNO0FBQ05FLE1BQUFBLE1BQU07QUFDTnFCLE1BQUFBLFdBQVc7QUFDWjs7QUFFRCxRQUFJQSxXQUFKLEVBQWlCO0FBQ2ZmLE1BQUFBLFFBQVEsQ0FBQ1AsVUFBVCxDQUFvQnFCLElBQXBCLENBQXlCO0FBQUNqQixRQUFBQSxLQUFLLEVBQUVrQjtBQUFSLE9BQXpCO0FBQ0Q7O0FBRURmLElBQUFBLFFBQVEsQ0FBQ1IsTUFBVCxHQUFrQkEsTUFBbEI7QUFDQSxXQUFPRSxNQUFQO0FBQ0QsR0FoSmM7O0FBQUE7O0FBQUE7QUFrSmZzQixFQUFBQSxNQWxKZSxrQkFrSlJDLElBbEpRLEVBa0pGQyxLQWxKRSxFQWtKSztBQUNsQixRQUFJLEtBQUs1QyxPQUFMLENBQWE2QyxVQUFqQixFQUE2QjtBQUMzQixhQUFPLEtBQUs3QyxPQUFMLENBQWE2QyxVQUFiLENBQXdCRixJQUF4QixFQUE4QkMsS0FBOUIsQ0FBUDtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU9ELElBQUksS0FBS0MsS0FBVCxJQUNELEtBQUs1QyxPQUFMLENBQWE4QyxVQUFiLElBQTJCSCxJQUFJLENBQUNJLFdBQUwsT0FBdUJILEtBQUssQ0FBQ0csV0FBTixFQUR4RDtBQUVEO0FBQ0YsR0F6SmM7O0FBQUE7O0FBQUE7QUEwSmZ2QyxFQUFBQSxXQTFKZSx1QkEwSkh3QyxLQTFKRyxFQTBKSTtBQUNqQixRQUFJWixHQUFHLEdBQUcsRUFBVjs7QUFDQSxTQUFLLElBQUlhLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELEtBQUssQ0FBQ3JDLE1BQTFCLEVBQWtDc0MsQ0FBQyxFQUFuQyxFQUF1QztBQUNyQyxVQUFJRCxLQUFLLENBQUNDLENBQUQsQ0FBVCxFQUFjO0FBQ1piLFFBQUFBLEdBQUcsQ0FBQ0ksSUFBSixDQUFTUSxLQUFLLENBQUNDLENBQUQsQ0FBZDtBQUNEO0FBQ0Y7O0FBQ0QsV0FBT2IsR0FBUDtBQUNELEdBbEtjOztBQUFBOztBQUFBO0FBbUtmN0IsRUFBQUEsU0FuS2UscUJBbUtMSCxLQW5LSyxFQW1LRTtBQUNmLFdBQU9BLEtBQVA7QUFDRCxHQXJLYzs7QUFBQTs7QUFBQTtBQXNLZkssRUFBQUEsUUF0S2Usb0JBc0tOTCxLQXRLTSxFQXNLQztBQUNkLFdBQU9BLEtBQUssQ0FBQzhDLEtBQU4sQ0FBWSxFQUFaLENBQVA7QUFDRCxHQXhLYzs7QUFBQTs7QUFBQTtBQXlLZjVCLEVBQUFBLElBektlLGdCQXlLVjZCLEtBektVLEVBeUtIO0FBQ1YsV0FBT0EsS0FBSyxDQUFDN0IsSUFBTixDQUFXLEVBQVgsQ0FBUDtBQUNEO0FBM0tjLENBQWpCOztBQThLQSxTQUFTVyxXQUFULENBQXFCcEMsSUFBckIsRUFBMkJzQixVQUEzQixFQUF1Q3BCLFNBQXZDLEVBQWtERCxTQUFsRCxFQUE2RG9DLGVBQTdELEVBQThFO0FBQzVFLE1BQUlrQixZQUFZLEdBQUcsQ0FBbkI7QUFBQSxNQUNJQyxZQUFZLEdBQUdsQyxVQUFVLENBQUNSLE1BRDlCO0FBQUEsTUFFSU8sTUFBTSxHQUFHLENBRmI7QUFBQSxNQUdJRSxNQUFNLEdBQUcsQ0FIYjs7QUFLQSxTQUFPZ0MsWUFBWSxHQUFHQyxZQUF0QixFQUFvQ0QsWUFBWSxFQUFoRCxFQUFvRDtBQUNsRCxRQUFJRSxTQUFTLEdBQUduQyxVQUFVLENBQUNpQyxZQUFELENBQTFCOztBQUNBLFFBQUksQ0FBQ0UsU0FBUyxDQUFDaEIsT0FBZixFQUF3QjtBQUN0QixVQUFJLENBQUNnQixTQUFTLENBQUNqQixLQUFYLElBQW9CSCxlQUF4QixFQUF5QztBQUN2QyxZQUFJOUIsS0FBSyxHQUFHTCxTQUFTLENBQUN3RCxLQUFWLENBQWdCckMsTUFBaEIsRUFBd0JBLE1BQU0sR0FBR29DLFNBQVMsQ0FBQy9CLEtBQTNDLENBQVo7QUFDQW5CLFFBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDb0QsR0FBTixDQUFVLFVBQVNwRCxLQUFULEVBQWdCNkMsQ0FBaEIsRUFBbUI7QUFDbkMsY0FBSVEsUUFBUSxHQUFHM0QsU0FBUyxDQUFDc0IsTUFBTSxHQUFHNkIsQ0FBVixDQUF4QjtBQUNBLGlCQUFPUSxRQUFRLENBQUM5QyxNQUFULEdBQWtCUCxLQUFLLENBQUNPLE1BQXhCLEdBQWlDOEMsUUFBakMsR0FBNENyRCxLQUFuRDtBQUNELFNBSE8sQ0FBUjtBQUtBa0QsUUFBQUEsU0FBUyxDQUFDbEQsS0FBVixHQUFrQlAsSUFBSSxDQUFDeUIsSUFBTCxDQUFVbEIsS0FBVixDQUFsQjtBQUNELE9BUkQsTUFRTztBQUNMa0QsUUFBQUEsU0FBUyxDQUFDbEQsS0FBVixHQUFrQlAsSUFBSSxDQUFDeUIsSUFBTCxDQUFVdkIsU0FBUyxDQUFDd0QsS0FBVixDQUFnQnJDLE1BQWhCLEVBQXdCQSxNQUFNLEdBQUdvQyxTQUFTLENBQUMvQixLQUEzQyxDQUFWLENBQWxCO0FBQ0Q7O0FBQ0RMLE1BQUFBLE1BQU0sSUFBSW9DLFNBQVMsQ0FBQy9CLEtBQXBCLENBWnNCLENBY3RCOztBQUNBLFVBQUksQ0FBQytCLFNBQVMsQ0FBQ2pCLEtBQWYsRUFBc0I7QUFDcEJqQixRQUFBQSxNQUFNLElBQUlrQyxTQUFTLENBQUMvQixLQUFwQjtBQUNEO0FBQ0YsS0FsQkQsTUFrQk87QUFDTCtCLE1BQUFBLFNBQVMsQ0FBQ2xELEtBQVYsR0FBa0JQLElBQUksQ0FBQ3lCLElBQUwsQ0FBVXhCLFNBQVMsQ0FBQ3lELEtBQVYsQ0FBZ0JuQyxNQUFoQixFQUF3QkEsTUFBTSxHQUFHa0MsU0FBUyxDQUFDL0IsS0FBM0MsQ0FBVixDQUFsQjtBQUNBSCxNQUFBQSxNQUFNLElBQUlrQyxTQUFTLENBQUMvQixLQUFwQixDQUZLLENBSUw7QUFDQTtBQUNBOztBQUNBLFVBQUk2QixZQUFZLElBQUlqQyxVQUFVLENBQUNpQyxZQUFZLEdBQUcsQ0FBaEIsQ0FBVixDQUE2QmYsS0FBakQsRUFBd0Q7QUFDdEQsWUFBSXFCLEdBQUcsR0FBR3ZDLFVBQVUsQ0FBQ2lDLFlBQVksR0FBRyxDQUFoQixDQUFwQjtBQUNBakMsUUFBQUEsVUFBVSxDQUFDaUMsWUFBWSxHQUFHLENBQWhCLENBQVYsR0FBK0JqQyxVQUFVLENBQUNpQyxZQUFELENBQXpDO0FBQ0FqQyxRQUFBQSxVQUFVLENBQUNpQyxZQUFELENBQVYsR0FBMkJNLEdBQTNCO0FBQ0Q7QUFDRjtBQUNGLEdBdkMyRSxDQXlDNUU7QUFDQTtBQUNBOzs7QUFDQSxNQUFJQyxhQUFhLEdBQUd4QyxVQUFVLENBQUNrQyxZQUFZLEdBQUcsQ0FBaEIsQ0FBOUI7O0FBQ0EsTUFBSUEsWUFBWSxHQUFHLENBQWYsSUFDRyxPQUFPTSxhQUFhLENBQUN2RCxLQUFyQixLQUErQixRQURsQyxLQUVJdUQsYUFBYSxDQUFDdEIsS0FBZCxJQUF1QnNCLGFBQWEsQ0FBQ3JCLE9BRnpDLEtBR0d6QyxJQUFJLENBQUM2QyxNQUFMLENBQVksRUFBWixFQUFnQmlCLGFBQWEsQ0FBQ3ZELEtBQTlCLENBSFAsRUFHNkM7QUFDM0NlLElBQUFBLFVBQVUsQ0FBQ2tDLFlBQVksR0FBRyxDQUFoQixDQUFWLENBQTZCakQsS0FBN0IsSUFBc0N1RCxhQUFhLENBQUN2RCxLQUFwRDtBQUNBZSxJQUFBQSxVQUFVLENBQUN5QyxHQUFYO0FBQ0Q7O0FBRUQsU0FBT3pDLFVBQVA7QUFDRDs7QUFFRCxTQUFTWSxTQUFULENBQW1COEIsSUFBbkIsRUFBeUI7QUFDdkIsU0FBTztBQUFFM0MsSUFBQUEsTUFBTSxFQUFFMkMsSUFBSSxDQUFDM0MsTUFBZjtBQUF1QkMsSUFBQUEsVUFBVSxFQUFFMEMsSUFBSSxDQUFDMUMsVUFBTCxDQUFnQm9DLEtBQWhCLENBQXNCLENBQXRCO0FBQW5DLEdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpZmYoKSB7fVxuXG5EaWZmLnByb3RvdHlwZSA9IHtcbiAgZGlmZihvbGRTdHJpbmcsIG5ld1N0cmluZywgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGRvbmUodmFsdWUpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayh1bmRlZmluZWQsIHZhbHVlKTsgfSwgMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gbWFzc2FnZSB0aGUgaW5wdXQgcHJpb3IgdG8gcnVubmluZ1xuICAgIG9sZFN0cmluZyA9IHRoaXMuY2FzdElucHV0KG9sZFN0cmluZyk7XG4gICAgbmV3U3RyaW5nID0gdGhpcy5jYXN0SW5wdXQobmV3U3RyaW5nKTtcblxuICAgIG9sZFN0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShvbGRTdHJpbmcpKTtcbiAgICBuZXdTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUobmV3U3RyaW5nKSk7XG5cbiAgICBsZXQgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCwgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aDtcbiAgICBsZXQgZWRpdExlbmd0aCA9IDE7XG4gICAgbGV0IG1heEVkaXRMZW5ndGggPSBuZXdMZW4gKyBvbGRMZW47XG4gICAgaWYob3B0aW9ucy5tYXhFZGl0TGVuZ3RoKSB7XG4gICAgICBtYXhFZGl0TGVuZ3RoID0gTWF0aC5taW4obWF4RWRpdExlbmd0aCwgb3B0aW9ucy5tYXhFZGl0TGVuZ3RoKTtcbiAgICB9XG5cbiAgICBsZXQgYmVzdFBhdGggPSBbeyBuZXdQb3M6IC0xLCBjb21wb25lbnRzOiBbXSB9XTtcblxuICAgIC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG4gICAgbGV0IG9sZFBvcyA9IHRoaXMuZXh0cmFjdENvbW1vbihiZXN0UGF0aFswXSwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIDApO1xuICAgIGlmIChiZXN0UGF0aFswXS5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBvbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgLy8gSWRlbnRpdHkgcGVyIHRoZSBlcXVhbGl0eSBhbmQgdG9rZW5pemVyXG4gICAgICByZXR1cm4gZG9uZShbe3ZhbHVlOiB0aGlzLmpvaW4obmV3U3RyaW5nKSwgY291bnQ6IG5ld1N0cmluZy5sZW5ndGh9XSk7XG4gICAgfVxuXG4gICAgLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuICAgIGZ1bmN0aW9uIGV4ZWNFZGl0TGVuZ3RoKCkge1xuICAgICAgZm9yIChsZXQgZGlhZ29uYWxQYXRoID0gLTEgKiBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggPD0gZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoICs9IDIpIHtcbiAgICAgICAgbGV0IGJhc2VQYXRoO1xuICAgICAgICBsZXQgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuICAgICAgICAgICAgcmVtb3ZlUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCArIDFdLFxuICAgICAgICAgICAgb2xkUG9zID0gKHJlbW92ZVBhdGggPyByZW1vdmVQYXRoLm5ld1BvcyA6IDApIC0gZGlhZ29uYWxQYXRoO1xuICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2FuQWRkID0gYWRkUGF0aCAmJiBhZGRQYXRoLm5ld1BvcyArIDEgPCBuZXdMZW4sXG4gICAgICAgICAgICBjYW5SZW1vdmUgPSByZW1vdmVQYXRoICYmIDAgPD0gb2xkUG9zICYmIG9sZFBvcyA8IG9sZExlbjtcbiAgICAgICAgaWYgKCFjYW5BZGQgJiYgIWNhblJlbW92ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgcGF0aCBpcyBhIHRlcm1pbmFsIHRoZW4gcHJ1bmVcbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSBkaWFnb25hbCB0aGF0IHdlIHdhbnQgdG8gYnJhbmNoIGZyb20uIFdlIHNlbGVjdCB0aGUgcHJpb3JcbiAgICAgICAgLy8gcGF0aCB3aG9zZSBwb3NpdGlvbiBpbiB0aGUgbmV3IHN0cmluZyBpcyB0aGUgZmFydGhlc3QgZnJvbSB0aGUgb3JpZ2luXG4gICAgICAgIC8vIGFuZCBkb2VzIG5vdCBwYXNzIHRoZSBib3VuZHMgb2YgdGhlIGRpZmYgZ3JhcGhcbiAgICAgICAgaWYgKCFjYW5BZGQgfHwgKGNhblJlbW92ZSAmJiBhZGRQYXRoLm5ld1BvcyA8IHJlbW92ZVBhdGgubmV3UG9zKSkge1xuICAgICAgICAgIGJhc2VQYXRoID0gY2xvbmVQYXRoKHJlbW92ZVBhdGgpO1xuICAgICAgICAgIHNlbGYucHVzaENvbXBvbmVudChiYXNlUGF0aC5jb21wb25lbnRzLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhc2VQYXRoID0gYWRkUGF0aDsgLy8gTm8gbmVlZCB0byBjbG9uZSwgd2UndmUgcHVsbGVkIGl0IGZyb20gdGhlIGxpc3RcbiAgICAgICAgICBiYXNlUGF0aC5uZXdQb3MrKztcbiAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdHJ1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9sZFBvcyA9IHNlbGYuZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCk7XG5cbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiBib3RoIHN0cmluZ3MsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgICAgaWYgKGJhc2VQYXRoLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAgICAgcmV0dXJuIGRvbmUoYnVpbGRWYWx1ZXMoc2VsZiwgYmFzZVBhdGguY29tcG9uZW50cywgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHNlbGYudXNlTG9uZ2VzdFRva2VuKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHRyYWNrIHRoaXMgcGF0aCBhcyBhIHBvdGVudGlhbCBjYW5kaWRhdGUgYW5kIGNvbnRpbnVlLlxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZGl0TGVuZ3RoKys7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybXMgdGhlIGxlbmd0aCBvZiBlZGl0IGl0ZXJhdGlvbi4gSXMgYSBiaXQgZnVnbHkgYXMgdGhpcyBoYXMgdG8gc3VwcG9ydCB0aGVcbiAgICAvLyBzeW5jIGFuZCBhc3luYyBtb2RlIHdoaWNoIGlzIG5ldmVyIGZ1bi4gTG9vcHMgb3ZlciBleGVjRWRpdExlbmd0aCB1bnRpbCBhIHZhbHVlXG4gICAgLy8gaXMgcHJvZHVjZWQsIG9yIHVudGlsIHRoZSBlZGl0IGxlbmd0aCBleGNlZWRzIG9wdGlvbnMubWF4RWRpdExlbmd0aCAoaWYgZ2l2ZW4pLFxuICAgIC8vIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZXR1cm4gdW5kZWZpbmVkLlxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWV4ZWNFZGl0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIGV4ZWMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGVkaXRMZW5ndGggPD0gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICBsZXQgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHVzaENvbXBvbmVudChjb21wb25lbnRzLCBhZGRlZCwgcmVtb3ZlZCkge1xuICAgIGxldCBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0ICYmIGxhc3QuYWRkZWQgPT09IGFkZGVkICYmIGxhc3QucmVtb3ZlZCA9PT0gcmVtb3ZlZCkge1xuICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSBoZXJlIGFzIHRoZSBjb21wb25lbnQgY2xvbmUgb3BlcmF0aW9uIGlzIGp1c3RcbiAgICAgIC8vIGFzIHNoYWxsb3cgYXJyYXkgY2xvbmVcbiAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXSA9IHtjb3VudDogbGFzdC5jb3VudCArIDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnRzLnB1c2goe2NvdW50OiAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfSk7XG4gICAgfVxuICB9LFxuICBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKSB7XG4gICAgbGV0IG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGgsXG4gICAgICAgIG5ld1BvcyA9IGJhc2VQYXRoLm5ld1BvcyxcbiAgICAgICAgb2xkUG9zID0gbmV3UG9zIC0gZGlhZ29uYWxQYXRoLFxuXG4gICAgICAgIGNvbW1vbkNvdW50ID0gMDtcbiAgICB3aGlsZSAobmV3UG9zICsgMSA8IG5ld0xlbiAmJiBvbGRQb3MgKyAxIDwgb2xkTGVuICYmIHRoaXMuZXF1YWxzKG5ld1N0cmluZ1tuZXdQb3MgKyAxXSwgb2xkU3RyaW5nW29sZFBvcyArIDFdKSkge1xuICAgICAgbmV3UG9zKys7XG4gICAgICBvbGRQb3MrKztcbiAgICAgIGNvbW1vbkNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvbW1vbkNvdW50KSB7XG4gICAgICBiYXNlUGF0aC5jb21wb25lbnRzLnB1c2goe2NvdW50OiBjb21tb25Db3VudH0pO1xuICAgIH1cblxuICAgIGJhc2VQYXRoLm5ld1BvcyA9IG5ld1BvcztcbiAgICByZXR1cm4gb2xkUG9zO1xuICB9LFxuXG4gIGVxdWFscyhsZWZ0LCByaWdodCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKGxlZnQsIHJpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0XG4gICAgICAgIHx8ICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSAmJiBsZWZ0LnRvTG93ZXJDYXNlKCkgPT09IHJpZ2h0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlRW1wdHkoYXJyYXkpIHtcbiAgICBsZXQgcmV0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycmF5W2ldKSB7XG4gICAgICAgIHJldC5wdXNoKGFycmF5W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcbiAgY2FzdElucHV0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICB0b2tlbml6ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJyk7XG4gIH0sXG4gIGpvaW4oY2hhcnMpIHtcbiAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJ1aWxkVmFsdWVzKGRpZmYsIGNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCB1c2VMb25nZXN0VG9rZW4pIHtcbiAgbGV0IGNvbXBvbmVudFBvcyA9IDAsXG4gICAgICBjb21wb25lbnRMZW4gPSBjb21wb25lbnRzLmxlbmd0aCxcbiAgICAgIG5ld1BvcyA9IDAsXG4gICAgICBvbGRQb3MgPSAwO1xuXG4gIGZvciAoOyBjb21wb25lbnRQb3MgPCBjb21wb25lbnRMZW47IGNvbXBvbmVudFBvcysrKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICBpZiAoIWNvbXBvbmVudC5yZW1vdmVkKSB7XG4gICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCAmJiB1c2VMb25nZXN0VG9rZW4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpIHtcbiAgICAgICAgICBsZXQgb2xkVmFsdWUgPSBvbGRTdHJpbmdbb2xkUG9zICsgaV07XG4gICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmxlbmd0aCA+IHZhbHVlLmxlbmd0aCA/IG9sZFZhbHVlIDogdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbih2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4obmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICB9XG4gICAgICBuZXdQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXG4gICAgICAvLyBDb21tb24gY2FzZVxuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQpIHtcbiAgICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG9sZFN0cmluZy5zbGljZShvbGRQb3MsIG9sZFBvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuICAgICAgLy8gUmV2ZXJzZSBhZGQgYW5kIHJlbW92ZSBzbyByZW1vdmVzIGFyZSBvdXRwdXQgZmlyc3QgdG8gbWF0Y2ggY29tbW9uIGNvbnZlbnRpb25cbiAgICAgIC8vIFRoZSBkaWZmaW5nIGFsZ29yaXRobSBpcyB0aWVkIHRvIGFkZCB0aGVuIHJlbW92ZSBvdXRwdXQgYW5kIHRoaXMgaXMgdGhlIHNpbXBsZXN0XG4gICAgICAvLyByb3V0ZSB0byBnZXQgdGhlIGRlc2lyZWQgb3V0cHV0IHdpdGggbWluaW1hbCBvdmVyaGVhZC5cbiAgICAgIGlmIChjb21wb25lbnRQb3MgJiYgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXS5hZGRlZCkge1xuICAgICAgICBsZXQgdG1wID0gY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXSA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3NdID0gdG1wO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpYWwgY2FzZSBoYW5kbGUgZm9yIHdoZW4gb25lIHRlcm1pbmFsIGlzIGlnbm9yZWQgKGkuZS4gd2hpdGVzcGFjZSkuXG4gIC8vIEZvciB0aGlzIGNhc2Ugd2UgbWVyZ2UgdGhlIHRlcm1pbmFsIGludG8gdGhlIHByaW9yIHN0cmluZyBhbmQgZHJvcCB0aGUgY2hhbmdlLlxuICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBzdHJpbmcgbW9kZS5cbiAgbGV0IGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuICBpZiAoY29tcG9uZW50TGVuID4gMVxuICAgICAgJiYgdHlwZW9mIGxhc3RDb21wb25lbnQudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAmJiAobGFzdENvbXBvbmVudC5hZGRlZCB8fCBsYXN0Q29tcG9uZW50LnJlbW92ZWQpXG4gICAgICAmJiBkaWZmLmVxdWFscygnJywgbGFzdENvbXBvbmVudC52YWx1ZSkpIHtcbiAgICBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDJdLnZhbHVlICs9IGxhc3RDb21wb25lbnQudmFsdWU7XG4gICAgY29tcG9uZW50cy5wb3AoKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRzO1xufVxuXG5mdW5jdGlvbiBjbG9uZVBhdGgocGF0aCkge1xuICByZXR1cm4geyBuZXdQb3M6IHBhdGgubmV3UG9zLCBjb21wb25lbnRzOiBwYXRoLmNvbXBvbmVudHMuc2xpY2UoMCkgfTtcbn1cbiJdfQ== diff --git a/deps/npm/node_modules/diff/lib/index.es6.js b/deps/npm/node_modules/diff/lib/index.es6.js index ca0e5917c44..c2a00135a4e 100644 --- a/deps/npm/node_modules/diff/lib/index.es6.js +++ b/deps/npm/node_modules/diff/lib/index.es6.js @@ -32,6 +32,11 @@ Diff.prototype = { oldLen = oldString.length; var editLength = 1; var maxEditLength = newLen + oldLen; + + if (options.maxEditLength) { + maxEditLength = Math.min(maxEditLength, options.maxEditLength); + } + var bestPath = [{ newPos: -1, components: [] @@ -96,15 +101,13 @@ Diff.prototype = { editLength++; } // Performs the length of edit iteration. Is a bit fugly as this has to support the // sync and async mode which is never fun. Loops over execEditLength until a value - // is produced. + // is produced, or until the edit length exceeds options.maxEditLength (if given), + // in which case it will return undefined. if (callback) { (function exec() { setTimeout(function () { - // This should not happen, but we want to be safe. - - /* istanbul ignore next */ if (editLength > maxEditLength) { return callback(); } @@ -922,6 +925,11 @@ function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, ne } var diff = diffLines(oldStr, newStr, options); + + if (!diff) { + return; + } + diff.push({ value: '', lines: [] diff --git a/deps/npm/node_modules/diff/lib/index.mjs b/deps/npm/node_modules/diff/lib/index.mjs index ca0e5917c44..c2a00135a4e 100644 --- a/deps/npm/node_modules/diff/lib/index.mjs +++ b/deps/npm/node_modules/diff/lib/index.mjs @@ -32,6 +32,11 @@ Diff.prototype = { oldLen = oldString.length; var editLength = 1; var maxEditLength = newLen + oldLen; + + if (options.maxEditLength) { + maxEditLength = Math.min(maxEditLength, options.maxEditLength); + } + var bestPath = [{ newPos: -1, components: [] @@ -96,15 +101,13 @@ Diff.prototype = { editLength++; } // Performs the length of edit iteration. Is a bit fugly as this has to support the // sync and async mode which is never fun. Loops over execEditLength until a value - // is produced. + // is produced, or until the edit length exceeds options.maxEditLength (if given), + // in which case it will return undefined. if (callback) { (function exec() { setTimeout(function () { - // This should not happen, but we want to be safe. - - /* istanbul ignore next */ if (editLength > maxEditLength) { return callback(); } @@ -922,6 +925,11 @@ function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, ne } var diff = diffLines(oldStr, newStr, options); + + if (!diff) { + return; + } + diff.push({ value: '', lines: [] diff --git a/deps/npm/node_modules/diff/lib/patch/create.js b/deps/npm/node_modules/diff/lib/patch/create.js index 48bb4668442..1d3b4c303ce 100644 --- a/deps/npm/node_modules/diff/lib/patch/create.js +++ b/deps/npm/node_modules/diff/lib/patch/create.js @@ -51,6 +51,11 @@ function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, ne diffLines) /*istanbul ignore end*/ (oldStr, newStr, options); + + if (!diff) { + return; + } + diff.push({ value: '', lines: [] @@ -264,4 +269,4 @@ function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOlsic3RydWN0dXJlZFBhdGNoIiwib2xkRmlsZU5hbWUiLCJuZXdGaWxlTmFtZSIsIm9sZFN0ciIsIm5ld1N0ciIsIm9sZEhlYWRlciIsIm5ld0hlYWRlciIsIm9wdGlvbnMiLCJjb250ZXh0IiwiZGlmZiIsImRpZmZMaW5lcyIsInB1c2giLCJ2YWx1ZSIsImxpbmVzIiwiY29udGV4dExpbmVzIiwibWFwIiwiZW50cnkiLCJodW5rcyIsIm9sZFJhbmdlU3RhcnQiLCJuZXdSYW5nZVN0YXJ0IiwiY3VyUmFuZ2UiLCJvbGRMaW5lIiwibmV3TGluZSIsImkiLCJjdXJyZW50IiwicmVwbGFjZSIsInNwbGl0IiwiYWRkZWQiLCJyZW1vdmVkIiwicHJldiIsInNsaWNlIiwibGVuZ3RoIiwiY29udGV4dFNpemUiLCJNYXRoIiwibWluIiwiaHVuayIsIm9sZFN0YXJ0Iiwib2xkTGluZXMiLCJuZXdTdGFydCIsIm5ld0xpbmVzIiwib2xkRU9GTmV3bGluZSIsInRlc3QiLCJuZXdFT0ZOZXdsaW5lIiwibm9ObEJlZm9yZUFkZHMiLCJzcGxpY2UiLCJmb3JtYXRQYXRjaCIsInJldCIsImFwcGx5Iiwiam9pbiIsImNyZWF0ZVR3b0ZpbGVzUGF0Y2giLCJjcmVhdGVQYXRjaCIsImZpbGVOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxlQUFULENBQXlCQyxXQUF6QixFQUFzQ0MsV0FBdEMsRUFBbURDLE1BQW5ELEVBQTJEQyxNQUEzRCxFQUFtRUMsU0FBbkUsRUFBOEVDLFNBQTlFLEVBQXlGQyxPQUF6RixFQUFrRztBQUN2RyxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaQSxJQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNEOztBQUNELE1BQUksT0FBT0EsT0FBTyxDQUFDQyxPQUFmLEtBQTJCLFdBQS9CLEVBQTRDO0FBQzFDRCxJQUFBQSxPQUFPLENBQUNDLE9BQVIsR0FBa0IsQ0FBbEI7QUFDRDs7QUFFRCxNQUFNQyxJQUFJO0FBQUc7QUFBQTtBQUFBOztBQUFBQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBO0FBQUEsR0FBVVAsTUFBVixFQUFrQkMsTUFBbEIsRUFBMEJHLE9BQTFCLENBQWI7QUFDQUUsRUFBQUEsSUFBSSxDQUFDRSxJQUFMLENBQVU7QUFBQ0MsSUFBQUEsS0FBSyxFQUFFLEVBQVI7QUFBWUMsSUFBQUEsS0FBSyxFQUFFO0FBQW5CLEdBQVYsRUFUdUcsQ0FTcEU7O0FBRW5DLFdBQVNDLFlBQVQsQ0FBc0JELEtBQXRCLEVBQTZCO0FBQzNCLFdBQU9BLEtBQUssQ0FBQ0UsR0FBTixDQUFVLFVBQVNDLEtBQVQsRUFBZ0I7QUFBRSxhQUFPLE1BQU1BLEtBQWI7QUFBcUIsS0FBakQsQ0FBUDtBQUNEOztBQUVELE1BQUlDLEtBQUssR0FBRyxFQUFaO0FBQ0EsTUFBSUMsYUFBYSxHQUFHLENBQXBCO0FBQUEsTUFBdUJDLGFBQWEsR0FBRyxDQUF2QztBQUFBLE1BQTBDQyxRQUFRLEdBQUcsRUFBckQ7QUFBQSxNQUNJQyxPQUFPLEdBQUcsQ0FEZDtBQUFBLE1BQ2lCQyxPQUFPLEdBQUcsQ0FEM0I7O0FBaEJ1RztBQUFBO0FBQUE7QUFrQjlGQyxFQUFBQSxDQWxCOEY7QUFtQnJHLFFBQU1DLE9BQU8sR0FBR2YsSUFBSSxDQUFDYyxDQUFELENBQXBCO0FBQUEsUUFDTVYsS0FBSyxHQUFHVyxPQUFPLENBQUNYLEtBQVIsSUFBaUJXLE9BQU8sQ0FBQ1osS0FBUixDQUFjYSxPQUFkLENBQXNCLEtBQXRCLEVBQTZCLEVBQTdCLEVBQWlDQyxLQUFqQyxDQUF1QyxJQUF2QyxDQUQvQjtBQUVBRixJQUFBQSxPQUFPLENBQUNYLEtBQVIsR0FBZ0JBLEtBQWhCOztBQUVBLFFBQUlXLE9BQU8sQ0FBQ0csS0FBUixJQUFpQkgsT0FBTyxDQUFDSSxPQUE3QixFQUFzQztBQUFBO0FBQUE7O0FBQUE7QUFDcEM7QUFDQSxVQUFJLENBQUNWLGFBQUwsRUFBb0I7QUFDbEIsWUFBTVcsSUFBSSxHQUFHcEIsSUFBSSxDQUFDYyxDQUFDLEdBQUcsQ0FBTCxDQUFqQjtBQUNBTCxRQUFBQSxhQUFhLEdBQUdHLE9BQWhCO0FBQ0FGLFFBQUFBLGFBQWEsR0FBR0csT0FBaEI7O0FBRUEsWUFBSU8sSUFBSixFQUFVO0FBQ1JULFVBQUFBLFFBQVEsR0FBR2IsT0FBTyxDQUFDQyxPQUFSLEdBQWtCLENBQWxCLEdBQXNCTSxZQUFZLENBQUNlLElBQUksQ0FBQ2hCLEtBQUwsQ0FBV2lCLEtBQVgsQ0FBaUIsQ0FBQ3ZCLE9BQU8sQ0FBQ0MsT0FBMUIsQ0FBRCxDQUFsQyxHQUF5RSxFQUFwRjtBQUNBVSxVQUFBQSxhQUFhLElBQUlFLFFBQVEsQ0FBQ1csTUFBMUI7QUFDQVosVUFBQUEsYUFBYSxJQUFJQyxRQUFRLENBQUNXLE1BQTFCO0FBQ0Q7QUFDRixPQVptQyxDQWNwQzs7O0FBQ0E7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUFYLE1BQUFBLFFBQVEsRUFBQ1QsSUFBVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQWtCRSxNQUFBQSxLQUFLLENBQUNFLEdBQU4sQ0FBVSxVQUFTQyxLQUFULEVBQWdCO0FBQzFDLGVBQU8sQ0FBQ1EsT0FBTyxDQUFDRyxLQUFSLEdBQWdCLEdBQWhCLEdBQXNCLEdBQXZCLElBQThCWCxLQUFyQztBQUNELE9BRmlCLENBQWxCLEdBZm9DLENBbUJwQzs7O0FBQ0EsVUFBSVEsT0FBTyxDQUFDRyxLQUFaLEVBQW1CO0FBQ2pCTCxRQUFBQSxPQUFPLElBQUlULEtBQUssQ0FBQ2tCLE1BQWpCO0FBQ0QsT0FGRCxNQUVPO0FBQ0xWLFFBQUFBLE9BQU8sSUFBSVIsS0FBSyxDQUFDa0IsTUFBakI7QUFDRDtBQUNGLEtBekJELE1BeUJPO0FBQ0w7QUFDQSxVQUFJYixhQUFKLEVBQW1CO0FBQ2pCO0FBQ0EsWUFBSUwsS0FBSyxDQUFDa0IsTUFBTixJQUFnQnhCLE9BQU8sQ0FBQ0MsT0FBUixHQUFrQixDQUFsQyxJQUF1Q2UsQ0FBQyxHQUFHZCxJQUFJLENBQUNzQixNQUFMLEdBQWMsQ0FBN0QsRUFBZ0U7QUFBQTtBQUFBOztBQUFBO0FBQzlEOztBQUNBOztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBWCxVQUFBQSxRQUFRLEVBQUNULElBQVQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFrQkcsVUFBQUEsWUFBWSxDQUFDRCxLQUFELENBQTlCO0FBQ0QsU0FIRCxNQUdPO0FBQUE7QUFBQTs7QUFBQTtBQUNMO0FBQ0EsY0FBSW1CLFdBQVcsR0FBR0MsSUFBSSxDQUFDQyxHQUFMLENBQVNyQixLQUFLLENBQUNrQixNQUFmLEVBQXVCeEIsT0FBTyxDQUFDQyxPQUEvQixDQUFsQjs7QUFDQTs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQVksVUFBQUEsUUFBUSxFQUFDVCxJQUFUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBa0JHLFVBQUFBLFlBQVksQ0FBQ0QsS0FBSyxDQUFDaUIsS0FBTixDQUFZLENBQVosRUFBZUUsV0FBZixDQUFELENBQTlCOztBQUVBLGNBQUlHLElBQUksR0FBRztBQUNUQyxZQUFBQSxRQUFRLEVBQUVsQixhQUREO0FBRVRtQixZQUFBQSxRQUFRLEVBQUdoQixPQUFPLEdBQUdILGFBQVYsR0FBMEJjLFdBRjVCO0FBR1RNLFlBQUFBLFFBQVEsRUFBRW5CLGFBSEQ7QUFJVG9CLFlBQUFBLFFBQVEsRUFBR2pCLE9BQU8sR0FBR0gsYUFBVixHQUEwQmEsV0FKNUI7QUFLVG5CLFlBQUFBLEtBQUssRUFBRU87QUFMRSxXQUFYOztBQU9BLGNBQUlHLENBQUMsSUFBSWQsSUFBSSxDQUFDc0IsTUFBTCxHQUFjLENBQW5CLElBQXdCbEIsS0FBSyxDQUFDa0IsTUFBTixJQUFnQnhCLE9BQU8sQ0FBQ0MsT0FBcEQsRUFBNkQ7QUFDM0Q7QUFDQSxnQkFBSWdDLGFBQWEsR0FBSyxLQUFELENBQVFDLElBQVIsQ0FBYXRDLE1BQWIsQ0FBckI7QUFDQSxnQkFBSXVDLGFBQWEsR0FBSyxLQUFELENBQVFELElBQVIsQ0FBYXJDLE1BQWIsQ0FBckI7QUFDQSxnQkFBSXVDLGNBQWMsR0FBRzlCLEtBQUssQ0FBQ2tCLE1BQU4sSUFBZ0IsQ0FBaEIsSUFBcUJYLFFBQVEsQ0FBQ1csTUFBVCxHQUFrQkksSUFBSSxDQUFDRSxRQUFqRTs7QUFDQSxnQkFBSSxDQUFDRyxhQUFELElBQWtCRyxjQUFsQixJQUFvQ3hDLE1BQU0sQ0FBQzRCLE1BQVAsR0FBZ0IsQ0FBeEQsRUFBMkQ7QUFDekQ7QUFDQTtBQUNBWCxjQUFBQSxRQUFRLENBQUN3QixNQUFULENBQWdCVCxJQUFJLENBQUNFLFFBQXJCLEVBQStCLENBQS9CLEVBQWtDLDhCQUFsQztBQUNEOztBQUNELGdCQUFLLENBQUNHLGFBQUQsSUFBa0IsQ0FBQ0csY0FBcEIsSUFBdUMsQ0FBQ0QsYUFBNUMsRUFBMkQ7QUFDekR0QixjQUFBQSxRQUFRLENBQUNULElBQVQsQ0FBYyw4QkFBZDtBQUNEO0FBQ0Y7O0FBQ0RNLFVBQUFBLEtBQUssQ0FBQ04sSUFBTixDQUFXd0IsSUFBWDtBQUVBakIsVUFBQUEsYUFBYSxHQUFHLENBQWhCO0FBQ0FDLFVBQUFBLGFBQWEsR0FBRyxDQUFoQjtBQUNBQyxVQUFBQSxRQUFRLEdBQUcsRUFBWDtBQUNEO0FBQ0Y7O0FBQ0RDLE1BQUFBLE9BQU8sSUFBSVIsS0FBSyxDQUFDa0IsTUFBakI7QUFDQVQsTUFBQUEsT0FBTyxJQUFJVCxLQUFLLENBQUNrQixNQUFqQjtBQUNEO0FBMUZvRzs7QUFrQnZHLE9BQUssSUFBSVIsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2QsSUFBSSxDQUFDc0IsTUFBekIsRUFBaUNSLENBQUMsRUFBbEMsRUFBc0M7QUFBQTtBQUFBO0FBQUE7QUFBN0JBLElBQUFBLENBQTZCO0FBeUVyQzs7QUFFRCxTQUFPO0FBQ0x0QixJQUFBQSxXQUFXLEVBQUVBLFdBRFI7QUFDcUJDLElBQUFBLFdBQVcsRUFBRUEsV0FEbEM7QUFFTEcsSUFBQUEsU0FBUyxFQUFFQSxTQUZOO0FBRWlCQyxJQUFBQSxTQUFTLEVBQUVBLFNBRjVCO0FBR0xXLElBQUFBLEtBQUssRUFBRUE7QUFIRixHQUFQO0FBS0Q7O0FBRU0sU0FBUzRCLFdBQVQsQ0FBcUJwQyxJQUFyQixFQUEyQjtBQUNoQyxNQUFNcUMsR0FBRyxHQUFHLEVBQVo7O0FBQ0EsTUFBSXJDLElBQUksQ0FBQ1IsV0FBTCxJQUFvQlEsSUFBSSxDQUFDUCxXQUE3QixFQUEwQztBQUN4QzRDLElBQUFBLEdBQUcsQ0FBQ25DLElBQUosQ0FBUyxZQUFZRixJQUFJLENBQUNSLFdBQTFCO0FBQ0Q7O0FBQ0Q2QyxFQUFBQSxHQUFHLENBQUNuQyxJQUFKLENBQVMscUVBQVQ7QUFDQW1DLEVBQUFBLEdBQUcsQ0FBQ25DLElBQUosQ0FBUyxTQUFTRixJQUFJLENBQUNSLFdBQWQsSUFBNkIsT0FBT1EsSUFBSSxDQUFDSixTQUFaLEtBQTBCLFdBQTFCLEdBQXdDLEVBQXhDLEdBQTZDLE9BQU9JLElBQUksQ0FBQ0osU0FBdEYsQ0FBVDtBQUNBeUMsRUFBQUEsR0FBRyxDQUFDbkMsSUFBSixDQUFTLFNBQVNGLElBQUksQ0FBQ1AsV0FBZCxJQUE2QixPQUFPTyxJQUFJLENBQUNILFNBQVosS0FBMEIsV0FBMUIsR0FBd0MsRUFBeEMsR0FBNkMsT0FBT0csSUFBSSxDQUFDSCxTQUF0RixDQUFUOztBQUVBLE9BQUssSUFBSWlCLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdkLElBQUksQ0FBQ1EsS0FBTCxDQUFXYyxNQUEvQixFQUF1Q1IsQ0FBQyxFQUF4QyxFQUE0QztBQUMxQyxRQUFNWSxJQUFJLEdBQUcxQixJQUFJLENBQUNRLEtBQUwsQ0FBV00sQ0FBWCxDQUFiLENBRDBDLENBRTFDO0FBQ0E7QUFDQTs7QUFDQSxRQUFJWSxJQUFJLENBQUNFLFFBQUwsS0FBa0IsQ0FBdEIsRUFBeUI7QUFDdkJGLE1BQUFBLElBQUksQ0FBQ0MsUUFBTCxJQUFpQixDQUFqQjtBQUNEOztBQUNELFFBQUlELElBQUksQ0FBQ0ksUUFBTCxLQUFrQixDQUF0QixFQUF5QjtBQUN2QkosTUFBQUEsSUFBSSxDQUFDRyxRQUFMLElBQWlCLENBQWpCO0FBQ0Q7O0FBQ0RRLElBQUFBLEdBQUcsQ0FBQ25DLElBQUosQ0FDRSxTQUFTd0IsSUFBSSxDQUFDQyxRQUFkLEdBQXlCLEdBQXpCLEdBQStCRCxJQUFJLENBQUNFLFFBQXBDLEdBQ0UsSUFERixHQUNTRixJQUFJLENBQUNHLFFBRGQsR0FDeUIsR0FEekIsR0FDK0JILElBQUksQ0FBQ0ksUUFEcEMsR0FFRSxLQUhKO0FBS0FPLElBQUFBLEdBQUcsQ0FBQ25DLElBQUosQ0FBU29DLEtBQVQsQ0FBZUQsR0FBZixFQUFvQlgsSUFBSSxDQUFDdEIsS0FBekI7QUFDRDs7QUFFRCxTQUFPaUMsR0FBRyxDQUFDRSxJQUFKLENBQVMsSUFBVCxJQUFpQixJQUF4QjtBQUNEOztBQUVNLFNBQVNDLG1CQUFULENBQTZCaEQsV0FBN0IsRUFBMENDLFdBQTFDLEVBQXVEQyxNQUF2RCxFQUErREMsTUFBL0QsRUFBdUVDLFNBQXZFLEVBQWtGQyxTQUFsRixFQUE2RkMsT0FBN0YsRUFBc0c7QUFDM0csU0FBT3NDLFdBQVcsQ0FBQzdDLGVBQWUsQ0FBQ0MsV0FBRCxFQUFjQyxXQUFkLEVBQTJCQyxNQUEzQixFQUFtQ0MsTUFBbkMsRUFBMkNDLFNBQTNDLEVBQXNEQyxTQUF0RCxFQUFpRUMsT0FBakUsQ0FBaEIsQ0FBbEI7QUFDRDs7QUFFTSxTQUFTMkMsV0FBVCxDQUFxQkMsUUFBckIsRUFBK0JoRCxNQUEvQixFQUF1Q0MsTUFBdkMsRUFBK0NDLFNBQS9DLEVBQTBEQyxTQUExRCxFQUFxRUMsT0FBckUsRUFBOEU7QUFDbkYsU0FBTzBDLG1CQUFtQixDQUFDRSxRQUFELEVBQVdBLFFBQVgsRUFBcUJoRCxNQUFyQixFQUE2QkMsTUFBN0IsRUFBcUNDLFNBQXJDLEVBQWdEQyxTQUFoRCxFQUEyREMsT0FBM0QsQ0FBMUI7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGlmZkxpbmVzfSBmcm9tICcuLi9kaWZmL2xpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zLmNvbnRleHQgPSA0O1xuICB9XG5cbiAgY29uc3QgZGlmZiA9IGRpZmZMaW5lcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG4gIGRpZmYucHVzaCh7dmFsdWU6ICcnLCBsaW5lczogW119KTsgLy8gQXBwZW5kIGFuIGVtcHR5IHZhbHVlIHRvIG1ha2UgY2xlYW51cCBlYXNpZXJcblxuICBmdW5jdGlvbiBjb250ZXh0TGluZXMobGluZXMpIHtcbiAgICByZXR1cm4gbGluZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7IHJldHVybiAnICcgKyBlbnRyeTsgfSk7XG4gIH1cblxuICBsZXQgaHVua3MgPSBbXTtcbiAgbGV0IG9sZFJhbmdlU3RhcnQgPSAwLCBuZXdSYW5nZVN0YXJ0ID0gMCwgY3VyUmFuZ2UgPSBbXSxcbiAgICAgIG9sZExpbmUgPSAxLCBuZXdMaW5lID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY3VycmVudCA9IGRpZmZbaV0sXG4gICAgICAgICAgbGluZXMgPSBjdXJyZW50LmxpbmVzIHx8IGN1cnJlbnQudmFsdWUucmVwbGFjZSgvXFxuJC8sICcnKS5zcGxpdCgnXFxuJyk7XG4gICAgY3VycmVudC5saW5lcyA9IGxpbmVzO1xuXG4gICAgaWYgKGN1cnJlbnQuYWRkZWQgfHwgY3VycmVudC5yZW1vdmVkKSB7XG4gICAgICAvLyBJZiB3ZSBoYXZlIHByZXZpb3VzIGNvbnRleHQsIHN0YXJ0IHdpdGggdGhhdFxuICAgICAgaWYgKCFvbGRSYW5nZVN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBkaWZmW2kgLSAxXTtcbiAgICAgICAgb2xkUmFuZ2VTdGFydCA9IG9sZExpbmU7XG4gICAgICAgIG5ld1JhbmdlU3RhcnQgPSBuZXdMaW5lO1xuXG4gICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgY3VyUmFuZ2UgPSBvcHRpb25zLmNvbnRleHQgPiAwID8gY29udGV4dExpbmVzKHByZXYubGluZXMuc2xpY2UoLW9wdGlvbnMuY29udGV4dCkpIDogW107XG4gICAgICAgICAgb2xkUmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgICAgbmV3UmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3V0cHV0IG91ciBjaGFuZ2VzXG4gICAgICBjdXJSYW5nZS5wdXNoKC4uLiBsaW5lcy5tYXAoZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIChjdXJyZW50LmFkZGVkID8gJysnIDogJy0nKSArIGVudHJ5O1xuICAgICAgfSkpO1xuXG4gICAgICAvLyBUcmFjayB0aGUgdXBkYXRlZCBmaWxlIHBvc2l0aW9uXG4gICAgICBpZiAoY3VycmVudC5hZGRlZCkge1xuICAgICAgICBuZXdMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZGVudGljYWwgY29udGV4dCBsaW5lcy4gVHJhY2sgbGluZSBjaGFuZ2VzXG4gICAgICBpZiAob2xkUmFuZ2VTdGFydCkge1xuICAgICAgICAvLyBDbG9zZSBvdXQgYW55IGNoYW5nZXMgdGhhdCBoYXZlIGJlZW4gb3V0cHV0IChvciBqb2luIG92ZXJsYXBwaW5nKVxuICAgICAgICBpZiAobGluZXMubGVuZ3RoIDw9IG9wdGlvbnMuY29udGV4dCAqIDIgJiYgaSA8IGRpZmYubGVuZ3RoIC0gMikge1xuICAgICAgICAgIC8vIE92ZXJsYXBwaW5nXG4gICAgICAgICAgY3VyUmFuZ2UucHVzaCguLi4gY29udGV4dExpbmVzKGxpbmVzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZW5kIHRoZSByYW5nZSBhbmQgb3V0cHV0XG4gICAgICAgICAgbGV0IGNvbnRleHRTaXplID0gTWF0aC5taW4obGluZXMubGVuZ3RoLCBvcHRpb25zLmNvbnRleHQpO1xuICAgICAgICAgIGN1clJhbmdlLnB1c2goLi4uIGNvbnRleHRMaW5lcyhsaW5lcy5zbGljZSgwLCBjb250ZXh0U2l6ZSkpKTtcblxuICAgICAgICAgIGxldCBodW5rID0ge1xuICAgICAgICAgICAgb2xkU3RhcnQ6IG9sZFJhbmdlU3RhcnQsXG4gICAgICAgICAgICBvbGRMaW5lczogKG9sZExpbmUgLSBvbGRSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUpLFxuICAgICAgICAgICAgbmV3U3RhcnQ6IG5ld1JhbmdlU3RhcnQsXG4gICAgICAgICAgICBuZXdMaW5lczogKG5ld0xpbmUgLSBuZXdSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUpLFxuICAgICAgICAgICAgbGluZXM6IGN1clJhbmdlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoaSA+PSBkaWZmLmxlbmd0aCAtIDIgJiYgbGluZXMubGVuZ3RoIDw9IG9wdGlvbnMuY29udGV4dCkge1xuICAgICAgICAgICAgLy8gRU9GIGlzIGluc2lkZSB0aGlzIGh1bmtcbiAgICAgICAgICAgIGxldCBvbGRFT0ZOZXdsaW5lID0gKCgvXFxuJC8pLnRlc3Qob2xkU3RyKSk7XG4gICAgICAgICAgICBsZXQgbmV3RU9GTmV3bGluZSA9ICgoL1xcbiQvKS50ZXN0KG5ld1N0cikpO1xuICAgICAgICAgICAgbGV0IG5vTmxCZWZvcmVBZGRzID0gbGluZXMubGVuZ3RoID09IDAgJiYgY3VyUmFuZ2UubGVuZ3RoID4gaHVuay5vbGRMaW5lcztcbiAgICAgICAgICAgIGlmICghb2xkRU9GTmV3bGluZSAmJiBub05sQmVmb3JlQWRkcyAmJiBvbGRTdHIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IG9sZCBoYXMgbm8gZW9sIGFuZCBubyB0cmFpbGluZyBjb250ZXh0OyBuby1ubCBjYW4gZW5kIHVwIGJlZm9yZSBhZGRzXG4gICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGlmIHRoZSBvbGQgZmlsZSBpcyBlbXB0eSwgZG8gbm90IG91dHB1dCB0aGUgbm8tbmwgbGluZVxuICAgICAgICAgICAgICBjdXJSYW5nZS5zcGxpY2UoaHVuay5vbGRMaW5lcywgMCwgJ1xcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCghb2xkRU9GTmV3bGluZSAmJiAhbm9ObEJlZm9yZUFkZHMpIHx8ICFuZXdFT0ZOZXdsaW5lKSB7XG4gICAgICAgICAgICAgIGN1clJhbmdlLnB1c2goJ1xcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBodW5rcy5wdXNoKGh1bmspO1xuXG4gICAgICAgICAgb2xkUmFuZ2VTdGFydCA9IDA7XG4gICAgICAgICAgbmV3UmFuZ2VTdGFydCA9IDA7XG4gICAgICAgICAgY3VyUmFuZ2UgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICBuZXdMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9sZEZpbGVOYW1lOiBvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWU6IG5ld0ZpbGVOYW1lLFxuICAgIG9sZEhlYWRlcjogb2xkSGVhZGVyLCBuZXdIZWFkZXI6IG5ld0hlYWRlcixcbiAgICBodW5rczogaHVua3NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGNoKGRpZmYpIHtcbiAgY29uc3QgcmV0ID0gW107XG4gIGlmIChkaWZmLm9sZEZpbGVOYW1lID09IGRpZmYubmV3RmlsZU5hbWUpIHtcbiAgICByZXQucHVzaCgnSW5kZXg6ICcgKyBkaWZmLm9sZEZpbGVOYW1lKTtcbiAgfVxuICByZXQucHVzaCgnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICByZXQucHVzaCgnLS0tICcgKyBkaWZmLm9sZEZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm9sZEhlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5vbGRIZWFkZXIpKTtcbiAgcmV0LnB1c2goJysrKyAnICsgZGlmZi5uZXdGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5uZXdIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYubmV3SGVhZGVyKSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmLmh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaHVuayA9IGRpZmYuaHVua3NbaV07XG4gICAgLy8gVW5pZmllZCBEaWZmIEZvcm1hdCBxdWlyazogSWYgdGhlIGNodW5rIHNpemUgaXMgMCxcbiAgICAvLyB0aGUgZmlyc3QgbnVtYmVyIGlzIG9uZSBsb3dlciB0aGFuIG9uZSB3b3VsZCBleHBlY3QuXG4gICAgLy8gaHR0cHM6Ly93d3cuYXJ0aW1hLmNvbS93ZWJsb2dzL3ZpZXdwb3N0LmpzcD90aHJlYWQ9MTY0MjkzXG4gICAgaWYgKGh1bmsub2xkTGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsub2xkU3RhcnQgLT0gMTtcbiAgICB9XG4gICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsubmV3U3RhcnQgLT0gMTtcbiAgICB9XG4gICAgcmV0LnB1c2goXG4gICAgICAnQEAgLScgKyBodW5rLm9sZFN0YXJ0ICsgJywnICsgaHVuay5vbGRMaW5lc1xuICAgICAgKyAnICsnICsgaHVuay5uZXdTdGFydCArICcsJyArIGh1bmsubmV3TGluZXNcbiAgICAgICsgJyBAQCdcbiAgICApO1xuICAgIHJldC5wdXNoLmFwcGx5KHJldCwgaHVuay5saW5lcyk7XG4gIH1cblxuICByZXR1cm4gcmV0LmpvaW4oJ1xcbicpICsgJ1xcbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUd29GaWxlc1BhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRQYXRjaChzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGNoKGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGNyZWF0ZVR3b0ZpbGVzUGF0Y2goZmlsZU5hbWUsIGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpO1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOlsic3RydWN0dXJlZFBhdGNoIiwib2xkRmlsZU5hbWUiLCJuZXdGaWxlTmFtZSIsIm9sZFN0ciIsIm5ld1N0ciIsIm9sZEhlYWRlciIsIm5ld0hlYWRlciIsIm9wdGlvbnMiLCJjb250ZXh0IiwiZGlmZiIsImRpZmZMaW5lcyIsInB1c2giLCJ2YWx1ZSIsImxpbmVzIiwiY29udGV4dExpbmVzIiwibWFwIiwiZW50cnkiLCJodW5rcyIsIm9sZFJhbmdlU3RhcnQiLCJuZXdSYW5nZVN0YXJ0IiwiY3VyUmFuZ2UiLCJvbGRMaW5lIiwibmV3TGluZSIsImkiLCJjdXJyZW50IiwicmVwbGFjZSIsInNwbGl0IiwiYWRkZWQiLCJyZW1vdmVkIiwicHJldiIsInNsaWNlIiwibGVuZ3RoIiwiY29udGV4dFNpemUiLCJNYXRoIiwibWluIiwiaHVuayIsIm9sZFN0YXJ0Iiwib2xkTGluZXMiLCJuZXdTdGFydCIsIm5ld0xpbmVzIiwib2xkRU9GTmV3bGluZSIsInRlc3QiLCJuZXdFT0ZOZXdsaW5lIiwibm9ObEJlZm9yZUFkZHMiLCJzcGxpY2UiLCJmb3JtYXRQYXRjaCIsInJldCIsImFwcGx5Iiwiam9pbiIsImNyZWF0ZVR3b0ZpbGVzUGF0Y2giLCJjcmVhdGVQYXRjaCIsImZpbGVOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxlQUFULENBQXlCQyxXQUF6QixFQUFzQ0MsV0FBdEMsRUFBbURDLE1BQW5ELEVBQTJEQyxNQUEzRCxFQUFtRUMsU0FBbkUsRUFBOEVDLFNBQTlFLEVBQXlGQyxPQUF6RixFQUFrRztBQUN2RyxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaQSxJQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNEOztBQUNELE1BQUksT0FBT0EsT0FBTyxDQUFDQyxPQUFmLEtBQTJCLFdBQS9CLEVBQTRDO0FBQzFDRCxJQUFBQSxPQUFPLENBQUNDLE9BQVIsR0FBa0IsQ0FBbEI7QUFDRDs7QUFFRCxNQUFNQyxJQUFJO0FBQUc7QUFBQTtBQUFBOztBQUFBQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBO0FBQUEsR0FBVVAsTUFBVixFQUFrQkMsTUFBbEIsRUFBMEJHLE9BQTFCLENBQWI7O0FBQ0EsTUFBRyxDQUFDRSxJQUFKLEVBQVU7QUFDUjtBQUNEOztBQUVEQSxFQUFBQSxJQUFJLENBQUNFLElBQUwsQ0FBVTtBQUFDQyxJQUFBQSxLQUFLLEVBQUUsRUFBUjtBQUFZQyxJQUFBQSxLQUFLLEVBQUU7QUFBbkIsR0FBVixFQWJ1RyxDQWFwRTs7QUFFbkMsV0FBU0MsWUFBVCxDQUFzQkQsS0FBdEIsRUFBNkI7QUFDM0IsV0FBT0EsS0FBSyxDQUFDRSxHQUFOLENBQVUsVUFBU0MsS0FBVCxFQUFnQjtBQUFFLGFBQU8sTUFBTUEsS0FBYjtBQUFxQixLQUFqRCxDQUFQO0FBQ0Q7O0FBRUQsTUFBSUMsS0FBSyxHQUFHLEVBQVo7QUFDQSxNQUFJQyxhQUFhLEdBQUcsQ0FBcEI7QUFBQSxNQUF1QkMsYUFBYSxHQUFHLENBQXZDO0FBQUEsTUFBMENDLFFBQVEsR0FBRyxFQUFyRDtBQUFBLE1BQ0lDLE9BQU8sR0FBRyxDQURkO0FBQUEsTUFDaUJDLE9BQU8sR0FBRyxDQUQzQjs7QUFwQnVHO0FBQUE7QUFBQTtBQXNCOUZDLEVBQUFBLENBdEI4RjtBQXVCckcsUUFBTUMsT0FBTyxHQUFHZixJQUFJLENBQUNjLENBQUQsQ0FBcEI7QUFBQSxRQUNNVixLQUFLLEdBQUdXLE9BQU8sQ0FBQ1gsS0FBUixJQUFpQlcsT0FBTyxDQUFDWixLQUFSLENBQWNhLE9BQWQsQ0FBc0IsS0FBdEIsRUFBNkIsRUFBN0IsRUFBaUNDLEtBQWpDLENBQXVDLElBQXZDLENBRC9CO0FBRUFGLElBQUFBLE9BQU8sQ0FBQ1gsS0FBUixHQUFnQkEsS0FBaEI7O0FBRUEsUUFBSVcsT0FBTyxDQUFDRyxLQUFSLElBQWlCSCxPQUFPLENBQUNJLE9BQTdCLEVBQXNDO0FBQUE7QUFBQTs7QUFBQTtBQUNwQztBQUNBLFVBQUksQ0FBQ1YsYUFBTCxFQUFvQjtBQUNsQixZQUFNVyxJQUFJLEdBQUdwQixJQUFJLENBQUNjLENBQUMsR0FBRyxDQUFMLENBQWpCO0FBQ0FMLFFBQUFBLGFBQWEsR0FBR0csT0FBaEI7QUFDQUYsUUFBQUEsYUFBYSxHQUFHRyxPQUFoQjs7QUFFQSxZQUFJTyxJQUFKLEVBQVU7QUFDUlQsVUFBQUEsUUFBUSxHQUFHYixPQUFPLENBQUNDLE9BQVIsR0FBa0IsQ0FBbEIsR0FBc0JNLFlBQVksQ0FBQ2UsSUFBSSxDQUFDaEIsS0FBTCxDQUFXaUIsS0FBWCxDQUFpQixDQUFDdkIsT0FBTyxDQUFDQyxPQUExQixDQUFELENBQWxDLEdBQXlFLEVBQXBGO0FBQ0FVLFVBQUFBLGFBQWEsSUFBSUUsUUFBUSxDQUFDVyxNQUExQjtBQUNBWixVQUFBQSxhQUFhLElBQUlDLFFBQVEsQ0FBQ1csTUFBMUI7QUFDRDtBQUNGLE9BWm1DLENBY3BDOzs7QUFDQTs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQVgsTUFBQUEsUUFBUSxFQUFDVCxJQUFUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBa0JFLE1BQUFBLEtBQUssQ0FBQ0UsR0FBTixDQUFVLFVBQVNDLEtBQVQsRUFBZ0I7QUFDMUMsZUFBTyxDQUFDUSxPQUFPLENBQUNHLEtBQVIsR0FBZ0IsR0FBaEIsR0FBc0IsR0FBdkIsSUFBOEJYLEtBQXJDO0FBQ0QsT0FGaUIsQ0FBbEIsR0Fmb0MsQ0FtQnBDOzs7QUFDQSxVQUFJUSxPQUFPLENBQUNHLEtBQVosRUFBbUI7QUFDakJMLFFBQUFBLE9BQU8sSUFBSVQsS0FBSyxDQUFDa0IsTUFBakI7QUFDRCxPQUZELE1BRU87QUFDTFYsUUFBQUEsT0FBTyxJQUFJUixLQUFLLENBQUNrQixNQUFqQjtBQUNEO0FBQ0YsS0F6QkQsTUF5Qk87QUFDTDtBQUNBLFVBQUliLGFBQUosRUFBbUI7QUFDakI7QUFDQSxZQUFJTCxLQUFLLENBQUNrQixNQUFOLElBQWdCeEIsT0FBTyxDQUFDQyxPQUFSLEdBQWtCLENBQWxDLElBQXVDZSxDQUFDLEdBQUdkLElBQUksQ0FBQ3NCLE1BQUwsR0FBYyxDQUE3RCxFQUFnRTtBQUFBO0FBQUE7O0FBQUE7QUFDOUQ7O0FBQ0E7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUFYLFVBQUFBLFFBQVEsRUFBQ1QsSUFBVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQWtCRyxVQUFBQSxZQUFZLENBQUNELEtBQUQsQ0FBOUI7QUFDRCxTQUhELE1BR087QUFBQTtBQUFBOztBQUFBO0FBQ0w7QUFDQSxjQUFJbUIsV0FBVyxHQUFHQyxJQUFJLENBQUNDLEdBQUwsQ0FBU3JCLEtBQUssQ0FBQ2tCLE1BQWYsRUFBdUJ4QixPQUFPLENBQUNDLE9BQS9CLENBQWxCOztBQUNBOztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBWSxVQUFBQSxRQUFRLEVBQUNULElBQVQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFrQkcsVUFBQUEsWUFBWSxDQUFDRCxLQUFLLENBQUNpQixLQUFOLENBQVksQ0FBWixFQUFlRSxXQUFmLENBQUQsQ0FBOUI7O0FBRUEsY0FBSUcsSUFBSSxHQUFHO0FBQ1RDLFlBQUFBLFFBQVEsRUFBRWxCLGFBREQ7QUFFVG1CLFlBQUFBLFFBQVEsRUFBR2hCLE9BQU8sR0FBR0gsYUFBVixHQUEwQmMsV0FGNUI7QUFHVE0sWUFBQUEsUUFBUSxFQUFFbkIsYUFIRDtBQUlUb0IsWUFBQUEsUUFBUSxFQUFHakIsT0FBTyxHQUFHSCxhQUFWLEdBQTBCYSxXQUo1QjtBQUtUbkIsWUFBQUEsS0FBSyxFQUFFTztBQUxFLFdBQVg7O0FBT0EsY0FBSUcsQ0FBQyxJQUFJZCxJQUFJLENBQUNzQixNQUFMLEdBQWMsQ0FBbkIsSUFBd0JsQixLQUFLLENBQUNrQixNQUFOLElBQWdCeEIsT0FBTyxDQUFDQyxPQUFwRCxFQUE2RDtBQUMzRDtBQUNBLGdCQUFJZ0MsYUFBYSxHQUFLLEtBQUQsQ0FBUUMsSUFBUixDQUFhdEMsTUFBYixDQUFyQjtBQUNBLGdCQUFJdUMsYUFBYSxHQUFLLEtBQUQsQ0FBUUQsSUFBUixDQUFhckMsTUFBYixDQUFyQjtBQUNBLGdCQUFJdUMsY0FBYyxHQUFHOUIsS0FBSyxDQUFDa0IsTUFBTixJQUFnQixDQUFoQixJQUFxQlgsUUFBUSxDQUFDVyxNQUFULEdBQWtCSSxJQUFJLENBQUNFLFFBQWpFOztBQUNBLGdCQUFJLENBQUNHLGFBQUQsSUFBa0JHLGNBQWxCLElBQW9DeEMsTUFBTSxDQUFDNEIsTUFBUCxHQUFnQixDQUF4RCxFQUEyRDtBQUN6RDtBQUNBO0FBQ0FYLGNBQUFBLFFBQVEsQ0FBQ3dCLE1BQVQsQ0FBZ0JULElBQUksQ0FBQ0UsUUFBckIsRUFBK0IsQ0FBL0IsRUFBa0MsOEJBQWxDO0FBQ0Q7O0FBQ0QsZ0JBQUssQ0FBQ0csYUFBRCxJQUFrQixDQUFDRyxjQUFwQixJQUF1QyxDQUFDRCxhQUE1QyxFQUEyRDtBQUN6RHRCLGNBQUFBLFFBQVEsQ0FBQ1QsSUFBVCxDQUFjLDhCQUFkO0FBQ0Q7QUFDRjs7QUFDRE0sVUFBQUEsS0FBSyxDQUFDTixJQUFOLENBQVd3QixJQUFYO0FBRUFqQixVQUFBQSxhQUFhLEdBQUcsQ0FBaEI7QUFDQUMsVUFBQUEsYUFBYSxHQUFHLENBQWhCO0FBQ0FDLFVBQUFBLFFBQVEsR0FBRyxFQUFYO0FBQ0Q7QUFDRjs7QUFDREMsTUFBQUEsT0FBTyxJQUFJUixLQUFLLENBQUNrQixNQUFqQjtBQUNBVCxNQUFBQSxPQUFPLElBQUlULEtBQUssQ0FBQ2tCLE1BQWpCO0FBQ0Q7QUE5Rm9HOztBQXNCdkcsT0FBSyxJQUFJUixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHZCxJQUFJLENBQUNzQixNQUF6QixFQUFpQ1IsQ0FBQyxFQUFsQyxFQUFzQztBQUFBO0FBQUE7QUFBQTtBQUE3QkEsSUFBQUEsQ0FBNkI7QUF5RXJDOztBQUVELFNBQU87QUFDTHRCLElBQUFBLFdBQVcsRUFBRUEsV0FEUjtBQUNxQkMsSUFBQUEsV0FBVyxFQUFFQSxXQURsQztBQUVMRyxJQUFBQSxTQUFTLEVBQUVBLFNBRk47QUFFaUJDLElBQUFBLFNBQVMsRUFBRUEsU0FGNUI7QUFHTFcsSUFBQUEsS0FBSyxFQUFFQTtBQUhGLEdBQVA7QUFLRDs7QUFFTSxTQUFTNEIsV0FBVCxDQUFxQnBDLElBQXJCLEVBQTJCO0FBQ2hDLE1BQU1xQyxHQUFHLEdBQUcsRUFBWjs7QUFDQSxNQUFJckMsSUFBSSxDQUFDUixXQUFMLElBQW9CUSxJQUFJLENBQUNQLFdBQTdCLEVBQTBDO0FBQ3hDNEMsSUFBQUEsR0FBRyxDQUFDbkMsSUFBSixDQUFTLFlBQVlGLElBQUksQ0FBQ1IsV0FBMUI7QUFDRDs7QUFDRDZDLEVBQUFBLEdBQUcsQ0FBQ25DLElBQUosQ0FBUyxxRUFBVDtBQUNBbUMsRUFBQUEsR0FBRyxDQUFDbkMsSUFBSixDQUFTLFNBQVNGLElBQUksQ0FBQ1IsV0FBZCxJQUE2QixPQUFPUSxJQUFJLENBQUNKLFNBQVosS0FBMEIsV0FBMUIsR0FBd0MsRUFBeEMsR0FBNkMsT0FBT0ksSUFBSSxDQUFDSixTQUF0RixDQUFUO0FBQ0F5QyxFQUFBQSxHQUFHLENBQUNuQyxJQUFKLENBQVMsU0FBU0YsSUFBSSxDQUFDUCxXQUFkLElBQTZCLE9BQU9PLElBQUksQ0FBQ0gsU0FBWixLQUEwQixXQUExQixHQUF3QyxFQUF4QyxHQUE2QyxPQUFPRyxJQUFJLENBQUNILFNBQXRGLENBQVQ7O0FBRUEsT0FBSyxJQUFJaUIsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2QsSUFBSSxDQUFDUSxLQUFMLENBQVdjLE1BQS9CLEVBQXVDUixDQUFDLEVBQXhDLEVBQTRDO0FBQzFDLFFBQU1ZLElBQUksR0FBRzFCLElBQUksQ0FBQ1EsS0FBTCxDQUFXTSxDQUFYLENBQWIsQ0FEMEMsQ0FFMUM7QUFDQTtBQUNBOztBQUNBLFFBQUlZLElBQUksQ0FBQ0UsUUFBTCxLQUFrQixDQUF0QixFQUF5QjtBQUN2QkYsTUFBQUEsSUFBSSxDQUFDQyxRQUFMLElBQWlCLENBQWpCO0FBQ0Q7O0FBQ0QsUUFBSUQsSUFBSSxDQUFDSSxRQUFMLEtBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCSixNQUFBQSxJQUFJLENBQUNHLFFBQUwsSUFBaUIsQ0FBakI7QUFDRDs7QUFDRFEsSUFBQUEsR0FBRyxDQUFDbkMsSUFBSixDQUNFLFNBQVN3QixJQUFJLENBQUNDLFFBQWQsR0FBeUIsR0FBekIsR0FBK0JELElBQUksQ0FBQ0UsUUFBcEMsR0FDRSxJQURGLEdBQ1NGLElBQUksQ0FBQ0csUUFEZCxHQUN5QixHQUR6QixHQUMrQkgsSUFBSSxDQUFDSSxRQURwQyxHQUVFLEtBSEo7QUFLQU8sSUFBQUEsR0FBRyxDQUFDbkMsSUFBSixDQUFTb0MsS0FBVCxDQUFlRCxHQUFmLEVBQW9CWCxJQUFJLENBQUN0QixLQUF6QjtBQUNEOztBQUVELFNBQU9pQyxHQUFHLENBQUNFLElBQUosQ0FBUyxJQUFULElBQWlCLElBQXhCO0FBQ0Q7O0FBRU0sU0FBU0MsbUJBQVQsQ0FBNkJoRCxXQUE3QixFQUEwQ0MsV0FBMUMsRUFBdURDLE1BQXZELEVBQStEQyxNQUEvRCxFQUF1RUMsU0FBdkUsRUFBa0ZDLFNBQWxGLEVBQTZGQyxPQUE3RixFQUFzRztBQUMzRyxTQUFPc0MsV0FBVyxDQUFDN0MsZUFBZSxDQUFDQyxXQUFELEVBQWNDLFdBQWQsRUFBMkJDLE1BQTNCLEVBQW1DQyxNQUFuQyxFQUEyQ0MsU0FBM0MsRUFBc0RDLFNBQXRELEVBQWlFQyxPQUFqRSxDQUFoQixDQUFsQjtBQUNEOztBQUVNLFNBQVMyQyxXQUFULENBQXFCQyxRQUFyQixFQUErQmhELE1BQS9CLEVBQXVDQyxNQUF2QyxFQUErQ0MsU0FBL0MsRUFBMERDLFNBQTFELEVBQXFFQyxPQUFyRSxFQUE4RTtBQUNuRixTQUFPMEMsbUJBQW1CLENBQUNFLFFBQUQsRUFBV0EsUUFBWCxFQUFxQmhELE1BQXJCLEVBQTZCQyxNQUE3QixFQUFxQ0MsU0FBckMsRUFBZ0RDLFNBQWhELEVBQTJEQyxPQUEzRCxDQUExQjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWZmTGluZXN9IGZyb20gJy4uL2RpZmYvbGluZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgaWYoIWRpZmYpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBkaWZmLnB1c2goe3ZhbHVlOiAnJywgbGluZXM6IFtdfSk7IC8vIEFwcGVuZCBhbiBlbXB0eSB2YWx1ZSB0byBtYWtlIGNsZWFudXAgZWFzaWVyXG5cbiAgZnVuY3Rpb24gY29udGV4dExpbmVzKGxpbmVzKSB7XG4gICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihlbnRyeSkgeyByZXR1cm4gJyAnICsgZW50cnk7IH0pO1xuICB9XG5cbiAgbGV0IGh1bmtzID0gW107XG4gIGxldCBvbGRSYW5nZVN0YXJ0ID0gMCwgbmV3UmFuZ2VTdGFydCA9IDAsIGN1clJhbmdlID0gW10sXG4gICAgICBvbGRMaW5lID0gMSwgbmV3TGluZSA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICAgIGxpbmVzID0gY3VycmVudC5saW5lcyB8fCBjdXJyZW50LnZhbHVlLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuICAgIGN1cnJlbnQubGluZXMgPSBsaW5lcztcblxuICAgIGlmIChjdXJyZW50LmFkZGVkIHx8IGN1cnJlbnQucmVtb3ZlZCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBwcmV2aW91cyBjb250ZXh0LCBzdGFydCB3aXRoIHRoYXRcbiAgICAgIGlmICghb2xkUmFuZ2VTdGFydCkge1xuICAgICAgICBjb25zdCBwcmV2ID0gZGlmZltpIC0gMV07XG4gICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gbmV3TGluZTtcblxuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE91dHB1dCBvdXIgY2hhbmdlc1xuICAgICAgY3VyUmFuZ2UucHVzaCguLi4gbGluZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcbiAgICAgIH0pKTtcblxuICAgICAgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuICAgICAgaWYgKGN1cnJlbnQuYWRkZWQpIHtcbiAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWRlbnRpY2FsIGNvbnRleHQgbGluZXMuIFRyYWNrIGxpbmUgY2hhbmdlc1xuICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgLy8gQ2xvc2Ugb3V0IGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG91dHB1dCAob3Igam9pbiBvdmVybGFwcGluZylcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQgKiAyICYmIGkgPCBkaWZmLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgIGN1clJhbmdlLnB1c2goLi4uIGNvbnRleHRMaW5lcyhsaW5lcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuICAgICAgICAgIGxldCBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAgICAgICBjdXJSYW5nZS5wdXNoKC4uLiBjb250ZXh0TGluZXMobGluZXMuc2xpY2UoMCwgY29udGV4dFNpemUpKSk7XG5cbiAgICAgICAgICBsZXQgaHVuayA9IHtcbiAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgb2xkTGluZXM6IChvbGRMaW5lIC0gb2xkUmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgbmV3TGluZXM6IChuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIGxpbmVzOiBjdXJSYW5nZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGkgPj0gZGlmZi5sZW5ndGggLSAyICYmIGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIEVPRiBpcyBpbnNpZGUgdGhpcyBodW5rXG4gICAgICAgICAgICBsZXQgb2xkRU9GTmV3bGluZSA9ICgoL1xcbiQvKS50ZXN0KG9sZFN0cikpO1xuICAgICAgICAgICAgbGV0IG5ld0VPRk5ld2xpbmUgPSAoKC9cXG4kLykudGVzdChuZXdTdHIpKTtcbiAgICAgICAgICAgIGxldCBub05sQmVmb3JlQWRkcyA9IGxpbmVzLmxlbmd0aCA9PSAwICYmIGN1clJhbmdlLmxlbmd0aCA+IGh1bmsub2xkTGluZXM7XG4gICAgICAgICAgICBpZiAoIW9sZEVPRk5ld2xpbmUgJiYgbm9ObEJlZm9yZUFkZHMgJiYgb2xkU3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBvbGQgaGFzIG5vIGVvbCBhbmQgbm8gdHJhaWxpbmcgY29udGV4dDsgbm8tbmwgY2FuIGVuZCB1cCBiZWZvcmUgYWRkc1xuICAgICAgICAgICAgICAvLyBob3dldmVyLCBpZiB0aGUgb2xkIGZpbGUgaXMgZW1wdHksIGRvIG5vdCBvdXRwdXQgdGhlIG5vLW5sIGxpbmVcbiAgICAgICAgICAgICAgY3VyUmFuZ2Uuc3BsaWNlKGh1bmsub2xkTGluZXMsIDAsICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoIW9sZEVPRk5ld2xpbmUgJiYgIW5vTmxCZWZvcmVBZGRzKSB8fCAhbmV3RU9GTmV3bGluZSkge1xuICAgICAgICAgICAgICBjdXJSYW5nZS5wdXNoKCdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaHVua3MucHVzaChodW5rKTtcblxuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgIGN1clJhbmdlID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvbGRGaWxlTmFtZTogb2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lOiBuZXdGaWxlTmFtZSxcbiAgICBvbGRIZWFkZXI6IG9sZEhlYWRlciwgbmV3SGVhZGVyOiBuZXdIZWFkZXIsXG4gICAgaHVua3M6IGh1bmtzXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQYXRjaChkaWZmKSB7XG4gIGNvbnN0IHJldCA9IFtdO1xuICBpZiAoZGlmZi5vbGRGaWxlTmFtZSA9PSBkaWZmLm5ld0ZpbGVOYW1lKSB7XG4gICAgcmV0LnB1c2goJ0luZGV4OiAnICsgZGlmZi5vbGRGaWxlTmFtZSk7XG4gIH1cbiAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgcmV0LnB1c2goJy0tLSAnICsgZGlmZi5vbGRGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5vbGRIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYub2xkSGVhZGVyKSk7XG4gIHJldC5wdXNoKCcrKysgJyArIGRpZmYubmV3RmlsZU5hbWUgKyAodHlwZW9mIGRpZmYubmV3SGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm5ld0hlYWRlcikpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5odW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGh1bmsgPSBkaWZmLmh1bmtzW2ldO1xuICAgIC8vIFVuaWZpZWQgRGlmZiBGb3JtYXQgcXVpcms6IElmIHRoZSBjaHVuayBzaXplIGlzIDAsXG4gICAgLy8gdGhlIGZpcnN0IG51bWJlciBpcyBvbmUgbG93ZXIgdGhhbiBvbmUgd291bGQgZXhwZWN0LlxuICAgIC8vIGh0dHBzOi8vd3d3LmFydGltYS5jb20vd2VibG9ncy92aWV3cG9zdC5qc3A/dGhyZWFkPTE2NDI5M1xuICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm9sZFN0YXJ0IC09IDE7XG4gICAgfVxuICAgIGlmIChodW5rLm5ld0xpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm5ld1N0YXJ0IC09IDE7XG4gICAgfVxuICAgIHJldC5wdXNoKFxuICAgICAgJ0BAIC0nICsgaHVuay5vbGRTdGFydCArICcsJyArIGh1bmsub2xkTGluZXNcbiAgICAgICsgJyArJyArIGh1bmsubmV3U3RhcnQgKyAnLCcgKyBodW5rLm5ld0xpbmVzXG4gICAgICArICcgQEAnXG4gICAgKTtcbiAgICByZXQucHVzaC5hcHBseShyZXQsIGh1bmsubGluZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJldC5qb2luKCdcXG4nKSArICdcXG4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHdvRmlsZXNQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UGF0Y2goc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRjaChmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbn1cbiJdfQ== diff --git a/deps/npm/node_modules/diff/package.json b/deps/npm/node_modules/diff/package.json index 2b6eea7f1cb..a2fc30c5812 100644 --- a/deps/npm/node_modules/diff/package.json +++ b/deps/npm/node_modules/diff/package.json @@ -1,6 +1,6 @@ { "name": "diff", - "version": "5.0.0", + "version": "5.1.0", "description": "A javascript text diff implementation.", "keywords": [ "diff", diff --git a/deps/npm/node_modules/diff/release-notes.md b/deps/npm/node_modules/diff/release-notes.md index acc75aa83d8..b7bc9c803b9 100644 --- a/deps/npm/node_modules/diff/release-notes.md +++ b/deps/npm/node_modules/diff/release-notes.md @@ -4,6 +4,12 @@ [Commits](https://github.com/kpdecker/jsdiff/compare/v5.0.0...master) +## v5.1.0 + +- [#365](https://github.com/kpdecker/jsdiff/issues/365) Allow early termination to limit execution time with degenerate cases + +[Commits](https://github.com/kpdecker/jsdiff/compare/v5.0.0...v5.0.1) + ## v5.0.0 - Breaking: UMD export renamed from `JsDiff` to `Diff`. diff --git a/deps/npm/node_modules/env-paths/readme.md b/deps/npm/node_modules/env-paths/readme.md deleted file mode 100644 index b66d571af48..00000000000 --- a/deps/npm/node_modules/env-paths/readme.md +++ /dev/null @@ -1,115 +0,0 @@ -# env-paths - -> Get paths for storing things like data, config, cache, etc - -Uses the correct OS-specific paths. Most developers get this wrong. - - -## Install - -``` -$ npm install env-paths -``` - - -## Usage - -```js -const envPaths = require('env-paths'); - -const paths = envPaths('MyApp'); - -paths.data; -//=> '/home/sindresorhus/.local/share/MyApp-nodejs' - -paths.config -//=> '/home/sindresorhus/.config/MyApp-nodejs' -``` - - -## API - -### paths = envPaths(name, options?) - -Note: It only generates the path strings. It doesn't create the directories for you. You could use [`make-dir`](https://github.com/sindresorhus/make-dir) to create the directories. - -#### name - -Type: `string` - -Name of your project. Used to generate the paths. - -#### options - -Type: `object` - -##### suffix - -Type: `string`
    -Default: `'nodejs'` - -**Don't use this option unless you really have to!**
    -Suffix appended to the project name to avoid name conflicts with native -apps. Pass an empty string to disable it. - -### paths.data - -Directory for data files. - -Example locations (with the default `nodejs` [suffix](#suffix)): - -- macOS: `~/Library/Application Support/MyApp-nodejs` -- Windows: `%LOCALAPPDATA%\MyApp-nodejs\Data` (for example, `C:\Users\USERNAME\AppData\Local\MyApp-nodejs\Data`) -- Linux: `~/.local/share/MyApp-nodejs` (or `$XDG_DATA_HOME/MyApp-nodejs`) - -### paths.config - -Directory for config files. - -Example locations (with the default `nodejs` [suffix](#suffix)): - -- macOS: `~/Library/Preferences/MyApp-nodejs` -- Windows: `%APPDATA%\MyApp-nodejs\Config` (for example, `C:\Users\USERNAME\AppData\Roaming\MyApp-nodejs\Config`) -- Linux: `~/.config/MyApp-nodejs` (or `$XDG_CONFIG_HOME/MyApp-nodejs`) - -### paths.cache - -Directory for non-essential data files. - -Example locations (with the default `nodejs` [suffix](#suffix)): - -- macOS: `~/Library/Caches/MyApp-nodejs` -- Windows: `%LOCALAPPDATA%\MyApp-nodejs\Cache` (for example, `C:\Users\USERNAME\AppData\Local\MyApp-nodejs\Cache`) -- Linux: `~/.cache/MyApp-nodejs` (or `$XDG_CACHE_HOME/MyApp-nodejs`) - -### paths.log - -Directory for log files. - -Example locations (with the default `nodejs` [suffix](#suffix)): - -- macOS: `~/Library/Logs/MyApp-nodejs` -- Windows: `%LOCALAPPDATA%\MyApp-nodejs\Log` (for example, `C:\Users\USERNAME\AppData\Local\MyApp-nodejs\Log`) -- Linux: `~/.local/state/MyApp-nodejs` (or `$XDG_STATE_HOME/MyApp-nodejs`) - -### paths.temp - -Directory for temporary files. - -Example locations (with the default `nodejs` [suffix](#suffix)): - -- macOS: `/var/folders/jf/f2twvvvs5jl_m49tf034ffpw0000gn/T/MyApp-nodejs` -- Windows: `%LOCALAPPDATA%\Temp\MyApp-nodejs` (for example, `C:\Users\USERNAME\AppData\Local\Temp\MyApp-nodejs`) -- Linux: `/tmp/USERNAME/MyApp-nodejs` - ---- - -
    - - Get professional support for this package with a Tidelift subscription - -
    - - Tidelift helps make open source sustainable for maintainers while giving companies
    assurances about security, maintenance, and licensing for their dependencies. -
    -
    diff --git a/deps/npm/node_modules/glob/common.js b/deps/npm/node_modules/glob/common.js index fc193ee6fbd..e094f750472 100644 --- a/deps/npm/node_modules/glob/common.js +++ b/deps/npm/node_modules/glob/common.js @@ -13,7 +13,7 @@ function ownProp (obj, field) { var fs = require("fs") var path = require("path") var minimatch = require("minimatch") -var isAbsolute = require("path-is-absolute") +var isAbsolute = require("path").isAbsolute var Minimatch = minimatch.Minimatch function alphasort (a, b) { @@ -88,7 +88,7 @@ function setopts (self, pattern, options) { self.changedCwd = false var cwd = process.cwd() if (!ownProp(options, "cwd")) - self.cwd = cwd + self.cwd = path.resolve(cwd) else { self.cwd = path.resolve(options.cwd) self.changedCwd = self.cwd !== cwd @@ -96,16 +96,18 @@ function setopts (self, pattern, options) { self.root = options.root || path.resolve(self.cwd, "/") self.root = path.resolve(self.root) - if (process.platform === "win32") - self.root = self.root.replace(/\\/g, "/") // TODO: is an absolute `cwd` supposed to be resolved against `root`? // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd) - if (process.platform === "win32") - self.cwdAbs = self.cwdAbs.replace(/\\/g, "/") self.nomount = !!options.nomount + if (process.platform === "win32") { + self.root = self.root.replace(/\\/g, "/") + self.cwd = self.cwd.replace(/\\/g, "/") + self.cwdAbs = self.cwdAbs.replace(/\\/g, "/") + } + // disable comments and negation in Minimatch. // Note that they are not supported in Glob itself anyway. options.nonegate = true diff --git a/deps/npm/node_modules/glob/glob.js b/deps/npm/node_modules/glob/glob.js index 37a4d7e6077..2112a957dc5 100644 --- a/deps/npm/node_modules/glob/glob.js +++ b/deps/npm/node_modules/glob/glob.js @@ -47,7 +47,7 @@ var inherits = require('inherits') var EE = require('events').EventEmitter var path = require('path') var assert = require('assert') -var isAbsolute = require('path-is-absolute') +var isAbsolute = require('path').isAbsolute var globSync = require('./sync.js') var common = require('./common.js') var setopts = common.setopts diff --git a/deps/npm/node_modules/glob/package.json b/deps/npm/node_modules/glob/package.json index 54940cbeb42..5134253e322 100644 --- a/deps/npm/node_modules/glob/package.json +++ b/deps/npm/node_modules/glob/package.json @@ -2,7 +2,7 @@ "author": "Isaac Z. Schlueter (http://blog.izs.me/)", "name": "glob", "description": "a little globber", - "version": "8.0.1", + "version": "8.0.3", "repository": { "type": "git", "url": "git://github.com/isaacs/node-glob.git" @@ -21,8 +21,7 @@ "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "once": "^1.3.0" }, "devDependencies": { "memfs": "^3.2.0", diff --git a/deps/npm/node_modules/glob/sync.js b/deps/npm/node_modules/glob/sync.js index c705a9c0291..af4600dd595 100644 --- a/deps/npm/node_modules/glob/sync.js +++ b/deps/npm/node_modules/glob/sync.js @@ -8,7 +8,7 @@ var Glob = require('./glob.js').Glob var util = require('util') var path = require('path') var assert = require('assert') -var isAbsolute = require('path-is-absolute') +var isAbsolute = require('path').isAbsolute var common = require('./common.js') var setopts = common.setopts var ownProp = common.ownProp @@ -48,7 +48,7 @@ function GlobSync (pattern, options) { } GlobSync.prototype._finish = function () { - assert(this instanceof GlobSync) + assert.ok(this instanceof GlobSync) if (this.realpath) { var self = this this.matches.forEach(function (matchset, index) { @@ -72,7 +72,7 @@ GlobSync.prototype._finish = function () { GlobSync.prototype._process = function (pattern, index, inGlobStar) { - assert(this instanceof GlobSync) + assert.ok(this instanceof GlobSync) // Get the first [n] parts of pattern that are all strings. var n = 0 diff --git a/deps/npm/node_modules/has-flag/readme.md b/deps/npm/node_modules/has-flag/readme.md deleted file mode 100644 index 3f72dff29a6..00000000000 --- a/deps/npm/node_modules/has-flag/readme.md +++ /dev/null @@ -1,89 +0,0 @@ -# has-flag [![Build Status](https://travis-ci.org/sindresorhus/has-flag.svg?branch=master)](https://travis-ci.org/sindresorhus/has-flag) - -> Check if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag - -Correctly stops looking after an `--` argument terminator. - ---- - -
    - - Get professional support for this package with a Tidelift subscription - -
    - - Tidelift helps make open source sustainable for maintainers while giving companies
    assurances about security, maintenance, and licensing for their dependencies. -
    -
    - ---- - - -## Install - -``` -$ npm install has-flag -``` - - -## Usage - -```js -// foo.js -const hasFlag = require('has-flag'); - -hasFlag('unicorn'); -//=> true - -hasFlag('--unicorn'); -//=> true - -hasFlag('f'); -//=> true - -hasFlag('-f'); -//=> true - -hasFlag('foo=bar'); -//=> true - -hasFlag('foo'); -//=> false - -hasFlag('rainbow'); -//=> false -``` - -``` -$ node foo.js -f --unicorn --foo=bar -- --rainbow -``` - - -## API - -### hasFlag(flag, [argv]) - -Returns a boolean for whether the flag exists. - -#### flag - -Type: `string` - -CLI flag to look for. The `--` prefix is optional. - -#### argv - -Type: `string[]`
    -Default: `process.argv` - -CLI arguments. - - -## Security - -To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/deps/npm/node_modules/hosted-git-info/lib/git-host-info.js b/deps/npm/node_modules/hosted-git-info/lib/git-host-info.js index 9a9720fa3c3..cdc1e4601ac 100644 --- a/deps/npm/node_modules/hosted-git-info/lib/git-host-info.js +++ b/deps/npm/node_modules/hosted-git-info/lib/git-host-info.js @@ -6,6 +6,7 @@ const maybeEncode = (arg) => arg ? encodeURIComponent(arg) : '' const defaults = { sshtemplate: ({ domain, user, project, committish }) => `git@${domain}:${user}/${project}.git${maybeJoin('#', committish)}`, sshurltemplate: ({ domain, user, project, committish }) => `git+ssh://git@${domain}/${user}/${project}.git${maybeJoin('#', committish)}`, + edittemplate: ({ domain, user, project, committish, editpath, path }) => `https://${domain}/${user}/${project}${maybeJoin('/', editpath, '/', maybeEncode(committish || 'master'), '/', path)}`, browsetemplate: ({ domain, user, project, committish, treepath }) => `https://${domain}/${user}/${project}${maybeJoin('/', treepath, '/', maybeEncode(committish))}`, browsefiletemplate: ({ domain, user, project, committish, treepath, path, fragment, hashformat }) => `https://${domain}/${user}/${project}/${treepath}/${maybeEncode(committish || 'master')}/${path}${maybeJoin('#', hashformat(fragment || ''))}`, docstemplate: ({ domain, user, project, treepath, committish }) => `https://${domain}/${user}/${project}${maybeJoin('/', treepath, '/', maybeEncode(committish))}#readme`, @@ -24,6 +25,7 @@ gitHosts.github = Object.assign({}, defaults, { protocols: ['git:', 'http:', 'git+ssh:', 'git+https:', 'ssh:', 'https:'], domain: 'github.com', treepath: 'tree', + editpath: 'edit', filetemplate: ({ auth, user, project, committish, path }) => `https://${maybeJoin(auth, '@')}raw.githubusercontent.com/${user}/${project}/${maybeEncode(committish) || 'master'}/${path}`, gittemplate: ({ auth, domain, user, project, committish }) => `git://${maybeJoin(auth, '@')}${domain}/${user}/${project}.git${maybeJoin('#', committish)}`, tarballtemplate: ({ domain, user, project, committish }) => `https://codeload.${domain}/${user}/${project}/tar.gz/${maybeEncode(committish) || 'master'}`, @@ -53,6 +55,8 @@ gitHosts.bitbucket = Object.assign({}, defaults, { protocols: ['git+ssh:', 'git+https:', 'ssh:', 'https:'], domain: 'bitbucket.org', treepath: 'src', + editpath: '?mode=edit', + edittemplate: ({ domain, user, project, committish, treepath, path, editpath }) => `https://${domain}/${user}/${project}${maybeJoin('/', treepath, '/', maybeEncode(committish || 'master'), '/', path, editpath)}`, tarballtemplate: ({ domain, user, project, committish }) => `https://${domain}/${user}/${project}/get/${maybeEncode(committish) || 'master'}.tar.gz`, extract: (url) => { let [, user, project, aux] = url.pathname.split('/', 4) @@ -76,6 +80,7 @@ gitHosts.gitlab = Object.assign({}, defaults, { protocols: ['git+ssh:', 'git+https:', 'ssh:', 'https:'], domain: 'gitlab.com', treepath: 'tree', + editpath: '-/edit', httpstemplate: ({ auth, domain, user, project, committish }) => `git+https://${maybeJoin(auth, '@')}${domain}/${user}/${project}.git${maybeJoin('#', committish)}`, tarballtemplate: ({ domain, user, project, committish }) => `https://${domain}/${user}/${project}/repository/archive.tar.gz?ref=${maybeEncode(committish) || 'master'}`, extract: (url) => { @@ -102,8 +107,10 @@ gitHosts.gitlab = Object.assign({}, defaults, { gitHosts.gist = Object.assign({}, defaults, { protocols: ['git:', 'git+ssh:', 'git+https:', 'ssh:', 'https:'], domain: 'gist.github.com', + editpath: 'edit', sshtemplate: ({ domain, project, committish }) => `git@${domain}:${project}.git${maybeJoin('#', committish)}`, sshurltemplate: ({ domain, project, committish }) => `git+ssh://git@${domain}/${project}.git${maybeJoin('#', committish)}`, + edittemplate: ({ domain, user, project, committish, editpath }) => `https://${domain}/${user}/${project}${maybeJoin('/', maybeEncode(committish))}/${editpath}`, browsetemplate: ({ domain, project, committish }) => `https://${domain}/${project}${maybeJoin('/', maybeEncode(committish))}`, browsefiletemplate: ({ domain, project, committish, path, hashformat }) => `https://${domain}/${project}${maybeJoin('/', maybeEncode(committish))}${maybeJoin('#', hashformat(path))}`, docstemplate: ({ domain, project, committish }) => `https://${domain}/${project}${maybeJoin('/', maybeEncode(committish))}`, diff --git a/deps/npm/node_modules/hosted-git-info/lib/git-host.js b/deps/npm/node_modules/hosted-git-info/lib/git-host.js index 8a975e92e58..bb65d4d992a 100644 --- a/deps/npm/node_modules/hosted-git-info/lib/git-host.js +++ b/deps/npm/node_modules/hosted-git-info/lib/git-host.js @@ -95,6 +95,10 @@ class GitHost { return this._fill(this.filetemplate, { ...opts, path }) } + edit (path, opts) { + return this._fill(this.edittemplate, { ...opts, path }) + } + getDefaultRepresentation () { return this.default } diff --git a/deps/npm/node_modules/hosted-git-info/lib/index.js b/deps/npm/node_modules/hosted-git-info/lib/index.js index 8bce6b3c28d..f6c66ff3298 100644 --- a/deps/npm/node_modules/hosted-git-info/lib/index.js +++ b/deps/npm/node_modules/hosted-git-info/lib/index.js @@ -1,32 +1,25 @@ 'use strict' -const url = require('url') const gitHosts = require('./git-host-info.js') const GitHost = module.exports = require('./git-host.js') const LRU = require('lru-cache') -const cache = new LRU({ max: 1000 }) - -const protocolToRepresentationMap = { - 'git+ssh:': 'sshurl', - 'git+https:': 'https', - 'ssh:': 'sshurl', - 'git:': 'git', -} +const parseUrl = require('./parse-url.js') -function protocolToRepresentation (protocol) { - return protocolToRepresentationMap[protocol] || protocol.slice(0, -1) -} +const cache = new LRU({ max: 1000 }) -const authProtocols = { - 'git:': true, - 'https:': true, - 'git+https:': true, - 'http:': true, - 'git+http:': true, +const protocols = { + 'git+ssh:': { name: 'sshurl' }, + 'ssh:': { name: 'sshurl' }, + 'git+https:': { name: 'https', auth: true }, + 'git:': { auth: true }, + 'http:': { auth: true }, + 'https:': { auth: true }, + 'git+http:': { auth: true }, + ...Object.keys(gitHosts.byShortcut).reduce((acc, key) => { + acc[key] = { name: gitHosts.byShortcut[key] } + return acc + }, {}), } -const knownProtocols = Object.keys(gitHosts.byShortcut) - .concat(['http:', 'https:', 'git:', 'git+ssh:', 'git+https:', 'ssh:']) - module.exports.fromUrl = function (giturl, opts) { if (typeof giturl !== 'string') { return @@ -41,22 +34,23 @@ module.exports.fromUrl = function (giturl, opts) { return cache.get(key) } +module.exports.parseUrl = parseUrl + function fromUrl (giturl, opts) { if (!giturl) { return } - const url = isGitHubShorthand(giturl) ? 'github:' + giturl : correctProtocol(giturl) - const parsed = parseGitUrl(url) + const correctedUrl = isGitHubShorthand(giturl) ? `github:${giturl}` : giturl + const parsed = parseUrl(correctedUrl, protocols) if (!parsed) { - return parsed + return } const gitHostShortcut = gitHosts.byShortcut[parsed.protocol] - const gitHostDomain = - gitHosts.byDomain[parsed.hostname.startsWith('www.') ? - parsed.hostname.slice(4) : - parsed.hostname] + const gitHostDomain = gitHosts.byDomain[parsed.hostname.startsWith('www.') + ? parsed.hostname.slice(4) + : parsed.hostname] const gitHostName = gitHostShortcut || gitHostDomain if (!gitHostName) { return @@ -64,7 +58,10 @@ function fromUrl (giturl, opts) { const gitHostInfo = gitHosts[gitHostShortcut || gitHostDomain] let auth = null - if (authProtocols[parsed.protocol] && (parsed.username || parsed.password)) { + if (protocols[parsed.protocol] && + protocols[parsed.protocol].auth && + (parsed.username || parsed.password) + ) { auth = `${parsed.username}${parsed.password ? ':' + parsed.password : ''}` } @@ -116,7 +113,8 @@ function fromUrl (giturl, opts) { user = segments.user && decodeURIComponent(segments.user) project = decodeURIComponent(segments.project) committish = decodeURIComponent(segments.committish) - defaultRepresentation = protocolToRepresentation(parsed.protocol) + defaultRepresentation = (protocols[parsed.protocol] && protocols[parsed.protocol].name) + || parsed.protocol.slice(0, -1) } } catch (err) { /* istanbul ignore else */ @@ -130,31 +128,6 @@ function fromUrl (giturl, opts) { return new GitHost(gitHostName, user, auth, project, committish, defaultRepresentation, opts) } -// accepts input like git:github.com:user/repo and inserts the // after the first : -const correctProtocol = (arg) => { - const firstColon = arg.indexOf(':') - const proto = arg.slice(0, firstColon + 1) - if (knownProtocols.includes(proto)) { - return arg - } - - const firstAt = arg.indexOf('@') - if (firstAt > -1) { - if (firstAt > firstColon) { - return `git+ssh://${arg}` - } else { - return arg - } - } - - const doubleSlash = arg.indexOf('//') - if (doubleSlash === firstColon + 1) { - return arg - } - - return arg.slice(0, firstColon + 1) + '//' + arg.slice(firstColon + 1) -} - // look for github shorthand inputs, such as npm/cli const isGitHubShorthand = (arg) => { // it cannot contain whitespace before the first # @@ -185,60 +158,3 @@ const isGitHubShorthand = (arg) => { doesNotStartWithDot && atOnlyAfterHash && colonOnlyAfterHash && secondSlashOnlyAfterHash } - -// attempt to correct an scp style url so that it will parse with `new URL()` -const correctUrl = (giturl) => { - const firstAt = giturl.indexOf('@') - const lastHash = giturl.lastIndexOf('#') - let firstColon = giturl.indexOf(':') - let lastColon = giturl.lastIndexOf(':', lastHash > -1 ? lastHash : Infinity) - - let corrected - if (lastColon > firstAt) { - // the last : comes after the first @ (or there is no @) - // like it would in: - // proto://hostname.com:user/repo - // username@hostname.com:user/repo - // :password@hostname.com:user/repo - // username:password@hostname.com:user/repo - // proto://username@hostname.com:user/repo - // proto://:password@hostname.com:user/repo - // proto://username:password@hostname.com:user/repo - // then we replace the last : with a / to create a valid path - corrected = giturl.slice(0, lastColon) + '/' + giturl.slice(lastColon + 1) - // // and we find our new : positions - firstColon = corrected.indexOf(':') - lastColon = corrected.lastIndexOf(':') - } - - if (firstColon === -1 && giturl.indexOf('//') === -1) { - // we have no : at all - // as it would be in: - // username@hostname.com/user/repo - // then we prepend a protocol - corrected = `git+ssh://${corrected}` - } - - return corrected -} - -// try to parse the url as its given to us, if that throws -// then we try to clean the url and parse that result instead -// THIS FUNCTION SHOULD NEVER THROW -const parseGitUrl = (giturl) => { - let result - try { - result = new url.URL(giturl) - } catch (err) {} - - if (result) { - return result - } - - const correctedUrl = correctUrl(giturl) - try { - result = new url.URL(correctedUrl) - } catch (err) {} - - return result -} diff --git a/deps/npm/node_modules/hosted-git-info/lib/parse-url.js b/deps/npm/node_modules/hosted-git-info/lib/parse-url.js new file mode 100644 index 00000000000..7d5489c008a --- /dev/null +++ b/deps/npm/node_modules/hosted-git-info/lib/parse-url.js @@ -0,0 +1,78 @@ +const url = require('url') + +const lastIndexOfBefore = (str, char, beforeChar) => { + const startPosition = str.indexOf(beforeChar) + return str.lastIndexOf(char, startPosition > -1 ? startPosition : Infinity) +} + +const safeUrl = (u) => { + try { + return new url.URL(u) + } catch { + // this fn should never throw + } +} + +// accepts input like git:github.com:user/repo and inserts the // after the first : +const correctProtocol = (arg, protocols) => { + const firstColon = arg.indexOf(':') + const proto = arg.slice(0, firstColon + 1) + if (Object.prototype.hasOwnProperty.call(protocols, proto)) { + return arg + } + + const firstAt = arg.indexOf('@') + if (firstAt > -1) { + if (firstAt > firstColon) { + return `git+ssh://${arg}` + } else { + return arg + } + } + + const doubleSlash = arg.indexOf('//') + if (doubleSlash === firstColon + 1) { + return arg + } + + return `${arg.slice(0, firstColon + 1)}//${arg.slice(firstColon + 1)}` +} + +// attempt to correct an scp style url so that it will parse with `new URL()` +const correctUrl = (giturl) => { + // ignore @ that come after the first hash since the denotes the start + // of a committish which can contain @ characters + const firstAt = lastIndexOfBefore(giturl, '@', '#') + // ignore colons that come after the hash since that could include colons such as: + // git@github.com:user/package-2#semver:^1.0.0 + const lastColonBeforeHash = lastIndexOfBefore(giturl, ':', '#') + + if (lastColonBeforeHash > firstAt) { + // the last : comes after the first @ (or there is no @) + // like it would in: + // proto://hostname.com:user/repo + // username@hostname.com:user/repo + // :password@hostname.com:user/repo + // username:password@hostname.com:user/repo + // proto://username@hostname.com:user/repo + // proto://:password@hostname.com:user/repo + // proto://username:password@hostname.com:user/repo + // then we replace the last : with a / to create a valid path + giturl = giturl.slice(0, lastColonBeforeHash) + '/' + giturl.slice(lastColonBeforeHash + 1) + } + + if (lastIndexOfBefore(giturl, ':', '#') === -1 && giturl.indexOf('//') === -1) { + // we have no : at all + // as it would be in: + // username@hostname.com/user/repo + // then we prepend a protocol + giturl = `git+ssh://${giturl}` + } + + return giturl +} + +module.exports = (giturl, protocols) => { + const withProtocol = protocols ? correctProtocol(giturl, protocols) : giturl + return safeUrl(withProtocol) || safeUrl(correctUrl(withProtocol)) +} diff --git a/deps/npm/node_modules/hosted-git-info/package.json b/deps/npm/node_modules/hosted-git-info/package.json index 0153b0852cb..ffd5c7d1b6b 100644 --- a/deps/npm/node_modules/hosted-git-info/package.json +++ b/deps/npm/node_modules/hosted-git-info/package.json @@ -1,11 +1,11 @@ { "name": "hosted-git-info", - "version": "5.0.0", + "version": "5.2.1", "description": "Provides metadata and conversions from repository urls for GitHub, Bitbucket and GitLab", "main": "./lib/index.js", "repository": { "type": "git", - "url": "git+https://github.com/npm/hosted-git-info.git" + "url": "https://github.com/npm/hosted-git-info.git" }, "keywords": [ "git", @@ -21,36 +21,47 @@ "homepage": "https://github.com/npm/hosted-git-info", "scripts": { "posttest": "npm run lint", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "preversion": "npm test", "snap": "tap", "test": "tap", "test:coverage": "tap --coverage-report=html", - "lint": "eslint '**/*.js'", - "postlint": "npm-template-check", - "template-copy": "npm-template-copy --force", - "lintfix": "npm run lint -- --fix" + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "lintfix": "npm run lint -- --fix", + "template-oss-apply": "template-oss-apply --force" }, "dependencies": { "lru-cache": "^7.5.1" }, "devDependencies": { - "@npmcli/template-oss": "^2.9.2", - "tap": "^15.1.6" + "@npmcli/eslint-config": "^3.0.1", + "@npmcli/template-oss": "4.7.1", + "tap": "^16.0.1" }, "files": [ - "bin", - "lib" + "bin/", + "lib/" ], "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "tap": { "color": 1, - "coverage": true + "coverage": true, + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] }, "templateOSS": { - "version": "2.9.2" + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "4.7.1", + "ciVersions": [ + "12.13.0", + "12.x", + "14.15.0", + "14.x", + "16.0.0", + "16.x" + ] } } diff --git a/deps/npm/node_modules/iconv-lite/Changelog.md b/deps/npm/node_modules/iconv-lite/Changelog.md deleted file mode 100644 index 464549b1484..00000000000 --- a/deps/npm/node_modules/iconv-lite/Changelog.md +++ /dev/null @@ -1,212 +0,0 @@ -## 0.6.3 / 2021-05-23 - * Fix HKSCS encoding to prefer Big5 codes if both Big5 and HKSCS codes are possible (#264) - - -## 0.6.2 / 2020-07-08 - * Support Uint8Array-s decoding without conversion to Buffers, plus fix an edge case. - - -## 0.6.1 / 2020-06-28 - * Support Uint8Array-s directly when decoding (#246, by @gyzerok) - * Unify package.json version ranges to be strictly semver-compatible (#241) - * Fix minor issue in UTF-32 decoder's endianness detection code. - - -## 0.6.0 / 2020-06-08 - * Updated 'gb18030' encoding to :2005 edition (see https://github.com/whatwg/encoding/issues/22). - * Removed `iconv.extendNodeEncodings()` mechanism. It was deprecated 5 years ago and didn't work - in recent Node versions. - * Reworked Streaming API behavior in browser environments to fix #204. Streaming API will be - excluded by default in browser packs, saving ~100Kb bundle size, unless enabled explicitly using - `iconv.enableStreamingAPI(require('stream'))`. - * Updates to development environment & tests: - * Added ./test/webpack private package to test complex new use cases that need custom environment. - It's tested as a separate job in Travis CI. - * Updated generation code for the new EUC-KR index file format from Encoding Standard. - * Removed Buffer() constructor in tests (#197 by @gabrielschulhof). - - -## 0.5.2 / 2020-06-08 - * Added `iconv.getEncoder()` and `iconv.getDecoder()` methods to typescript definitions (#229). - * Fixed semver version to 6.1.2 to support Node 8.x (by @tanandara). - * Capped iconv version to 2.x as 3.x has dropped support for older Node versions. - * Switched from instanbul to c8 for code coverage. - - -## 0.5.1 / 2020-01-18 - - * Added cp720 encoding (#221, by @kr-deps) - * (minor) Changed Changelog.md formatting to use h2. - - -## 0.5.0 / 2019-06-26 - - * Added UTF-32 encoding, both little-endian and big-endian variants (UTF-32LE, UTF32-BE). If endianness - is not provided for decoding, it's deduced automatically from the stream using a heuristic similar to - what we use in UTF-16. (great work in #216 by @kshetline) - * Several minor updates to README (#217 by @oldj, plus some more) - * Added Node versions 10 and 12 to Travis test harness. - - -## 0.4.24 / 2018-08-22 - - * Added MIK encoding (#196, by @Ivan-Kalatchev) - - -## 0.4.23 / 2018-05-07 - - * Fix deprecation warning in Node v10 due to the last usage of `new Buffer` (#185, by @felixbuenemann) - * Switched from NodeBuffer to Buffer in typings (#155 by @felixfbecker, #186 by @larssn) - - -## 0.4.22 / 2018-05-05 - - * Use older semver style for dependencies to be compatible with Node version 0.10 (#182, by @dougwilson) - * Fix tests to accomodate fixes in Node v10 (#182, by @dougwilson) - - -## 0.4.21 / 2018-04-06 - - * Fix encoding canonicalization (#156) - * Fix the paths in the "browser" field in package.json (#174 by @LMLB) - * Removed "contributors" section in package.json - see Git history instead. - - -## 0.4.20 / 2018-04-06 - - * Updated `new Buffer()` usages with recommended replacements as it's being deprecated in Node v10 (#176, #178 by @ChALkeR) - - -## 0.4.19 / 2017-09-09 - - * Fixed iso8859-1 codec regression in handling untranslatable characters (#162, caused by #147) - * Re-generated windows1255 codec, because it was updated in iconv project - * Fixed grammar in error message when iconv-lite is loaded with encoding other than utf8 - - -## 0.4.18 / 2017-06-13 - - * Fixed CESU-8 regression in Node v8. - - -## 0.4.17 / 2017-04-22 - - * Updated typescript definition file to support Angular 2 AoT mode (#153 by @larssn) - - -## 0.4.16 / 2017-04-22 - - * Added support for React Native (#150) - * Changed iso8859-1 encoding to usine internal 'binary' encoding, as it's the same thing (#147 by @mscdex) - * Fixed typo in Readme (#138 by @jiangzhuo) - * Fixed build for Node v6.10+ by making correct version comparison - * Added a warning if iconv-lite is loaded not as utf-8 (see #142) - - -## 0.4.15 / 2016-11-21 - - * Fixed typescript type definition (#137) - - -## 0.4.14 / 2016-11-20 - - * Preparation for v1.0 - * Added Node v6 and latest Node versions to Travis CI test rig - * Deprecated Node v0.8 support - * Typescript typings (@larssn) - * Fix encoding of Euro character in GB 18030 (inspired by @lygstate) - * Add ms prefix to dbcs windows encodings (@rokoroku) - - -## 0.4.13 / 2015-10-01 - - * Fix silly mistake in deprecation notice. - - -## 0.4.12 / 2015-09-26 - - * Node v4 support: - * Added CESU-8 decoding (#106) - * Added deprecation notice for `extendNodeEncodings` - * Added Travis tests for Node v4 and io.js latest (#105 by @Mithgol) - - -## 0.4.11 / 2015-07-03 - - * Added CESU-8 encoding. - - -## 0.4.10 / 2015-05-26 - - * Changed UTF-16 endianness heuristic to take into account any ASCII chars, not - just spaces. This should minimize the importance of "default" endianness. - - -## 0.4.9 / 2015-05-24 - - * Streamlined BOM handling: strip BOM by default, add BOM when encoding if - addBOM: true. Added docs to Readme. - * UTF16 now uses UTF16-LE by default. - * Fixed minor issue with big5 encoding. - * Added io.js testing on Travis; updated node-iconv version to test against. - Now we just skip testing SBCS encodings that node-iconv doesn't support. - * (internal refactoring) Updated codec interface to use classes. - * Use strict mode in all files. - - -## 0.4.8 / 2015-04-14 - - * added alias UNICODE-1-1-UTF-7 for UTF-7 encoding (#94) - - -## 0.4.7 / 2015-02-05 - - * stop official support of Node.js v0.8. Should still work, but no guarantees. - reason: Packages needed for testing are hard to get on Travis CI. - * work in environment where Object.prototype is monkey patched with enumerable - props (#89). - - -## 0.4.6 / 2015-01-12 - - * fix rare aliases of single-byte encodings (thanks @mscdex) - * double the timeout for dbcs tests to make them less flaky on travis - - -## 0.4.5 / 2014-11-20 - - * fix windows-31j and x-sjis encoding support (@nleush) - * minor fix: undefined variable reference when internal error happens - - -## 0.4.4 / 2014-07-16 - - * added encodings UTF-7 (RFC2152) and UTF-7-IMAP (RFC3501 Section 5.1.3) - * fixed streaming base64 encoding - - -## 0.4.3 / 2014-06-14 - - * added encodings UTF-16BE and UTF-16 with BOM - - -## 0.4.2 / 2014-06-12 - - * don't throw exception if `extendNodeEncodings()` is called more than once - - -## 0.4.1 / 2014-06-11 - - * codepage 808 added - - -## 0.4.0 / 2014-06-10 - - * code is rewritten from scratch - * all widespread encodings are supported - * streaming interface added - * browserify compatibility added - * (optional) extend core primitive encodings to make usage even simpler - * moved from vows to mocha as the testing framework - - diff --git a/deps/npm/node_modules/indent-string/readme.md b/deps/npm/node_modules/indent-string/readme.md deleted file mode 100644 index 49967de074f..00000000000 --- a/deps/npm/node_modules/indent-string/readme.md +++ /dev/null @@ -1,70 +0,0 @@ -# indent-string [![Build Status](https://travis-ci.org/sindresorhus/indent-string.svg?branch=master)](https://travis-ci.org/sindresorhus/indent-string) - -> Indent each line in a string - - -## Install - -``` -$ npm install indent-string -``` - - -## Usage - -```js -const indentString = require('indent-string'); - -indentString('Unicorns\nRainbows', 4); -//=> ' Unicorns\n Rainbows' - -indentString('Unicorns\nRainbows', 4, {indent: '♥'}); -//=> '♥♥♥♥Unicorns\n♥♥♥♥Rainbows' -``` - - -## API - -### indentString(string, [count], [options]) - -#### string - -Type: `string` - -The string to indent. - -#### count - -Type: `number`
    -Default: `1` - -How many times you want `options.indent` repeated. - -#### options - -Type: `object` - -##### indent - -Type: `string`
    -Default: `' '` - -The string to use for the indent. - -##### includeEmptyLines - -Type: `boolean`
    -Default: `false` - -Also indent empty lines. - - -## Related - -- [indent-string-cli](https://github.com/sindresorhus/indent-string-cli) - CLI for this module -- [strip-indent](https://github.com/sindresorhus/strip-indent) - Strip leading whitespace from every line in a string - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/deps/npm/node_modules/ini/lib/ini.js b/deps/npm/node_modules/ini/lib/ini.js index 965e702493b..d05682b606b 100644 --- a/deps/npm/node_modules/ini/lib/ini.js +++ b/deps/npm/node_modules/ini/lib/ini.js @@ -186,7 +186,9 @@ const unsafe = (val, doUnesc) => { } try { val = JSON.parse(val) - } catch (_) {} + } catch { + // ignore errors + } } else { // walk the val to find the first not-escaped ; character let esc = false diff --git a/deps/npm/node_modules/ini/package.json b/deps/npm/node_modules/ini/package.json index 1fe32c8f162..e41c0f0f3dc 100644 --- a/deps/npm/node_modules/ini/package.json +++ b/deps/npm/node_modules/ini/package.json @@ -2,7 +2,7 @@ "author": "GitHub Inc.", "name": "ini", "description": "An ini encoder/decoder for node", - "version": "3.0.0", + "version": "3.0.1", "repository": { "type": "git", "url": "https://github.com/npm/ini.git" @@ -23,7 +23,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.2.2", + "@npmcli/template-oss": "3.5.0", "tap": "^16.0.1" }, "license": "ISC", @@ -36,6 +36,6 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.2.2" + "version": "3.5.0" } } diff --git a/deps/npm/node_modules/ip-regex/readme.md b/deps/npm/node_modules/ip-regex/readme.md deleted file mode 100644 index 81723a0f950..00000000000 --- a/deps/npm/node_modules/ip-regex/readme.md +++ /dev/null @@ -1,86 +0,0 @@ -# ip-regex - -> Regular expression for matching IP addresses - - -## Install - -``` -$ npm install ip-regex -``` - -This module targets Node.js 8 or later and the latest version of Chrome, Firefox, and Safari. If you want support for older browsers, use version 2.1.0: `npm install ip-regex@2.1.0` - - -## Usage - -```js -const ipRegex = require('ip-regex'); - -// Contains an IP address? -ipRegex().test('unicorn 192.168.0.1'); -//=> true - -// Is an IP address? -ipRegex({exact: true}).test('unicorn 192.168.0.1'); -//=> false - -ipRegex.v6({exact: true}).test('1:2:3:4:5:6:7:8'); -//=> true - -'unicorn 192.168.0.1 cake 1:2:3:4:5:6:7:8 rainbow'.match(ipRegex()); -//=> ['192.168.0.1', '1:2:3:4:5:6:7:8'] - -// Contains an IP address? -ipRegex({includeBoundaries: true}).test('192.168.0.2000000000'); -//=> false - -// Matches an IP address? -'192.168.0.2000000000'.match(ipRegex({includeBoundaries: true})); -//=> null -``` - - -## API - -### ipRegex([options]) - -Returns a regex for matching both IPv4 and IPv6. - -### ipRegex.v4([options]) - -Returns a regex for matching IPv4. - -### ipRegex.v6([options]) - -Returns a regex for matching IPv6. - -#### options - -Type: `Object` - -##### exact - -Type: `boolean`
    -Default: `false` *(Matches any IP address in a string)* - -Only match an exact string. Useful with `RegExp#test()` to check if a string is an IP address. - -##### includeBoundaries - -Type: `boolean`
    -Default: `false` - -Include boundaries in the regex. When `true`, `192.168.0.2000000000` will report as an invalid IPv4 address. If this option is not set, the mentioned IPv4 address would report as valid (ignoring the trailing zeros). - - -## Related - -- [is-ip](https://github.com/sindresorhus/is-ip) - Check if a string is an IP address -- [is-cidr](https://github.com/silverwind/is-cidr) - Check if a string is an IP address in CIDR notation -- [cidr-regex](https://github.com/silverwind/cidr-regex) - Regular expression for matching IP addresses in CIDR notation - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/deps/npm/node_modules/ip/lib/ip.js b/deps/npm/node_modules/ip/lib/ip.js index 5b5ccc246a4..4b2adb5addd 100644 --- a/deps/npm/node_modules/ip/lib/ip.js +++ b/deps/npm/node_modules/ip/lib/ip.js @@ -1,24 +1,24 @@ -var ip = exports; -var { Buffer } = require('buffer'); -var os = require('os'); +const ip = exports; +const { Buffer } = require('buffer'); +const os = require('os'); ip.toBuffer = function (ip, buff, offset) { offset = ~~offset; - var result; + let result; if (this.isV4Format(ip)) { - result = buff || new Buffer(offset + 4); + result = buff || Buffer.alloc(offset + 4); ip.split(/\./g).map((byte) => { result[offset++] = parseInt(byte, 10) & 0xff; }); } else if (this.isV6Format(ip)) { - var sections = ip.split(':', 8); + const sections = ip.split(':', 8); - var i; + let i; for (i = 0; i < sections.length; i++) { - var isv4 = this.isV4Format(sections[i]); - var v4Buffer; + const isv4 = this.isV4Format(sections[i]); + let v4Buffer; if (isv4) { v4Buffer = this.toBuffer(sections[i]); @@ -36,16 +36,16 @@ ip.toBuffer = function (ip, buff, offset) { while (sections.length < 8) sections.push('0'); } else if (sections.length < 8) { for (i = 0; i < sections.length && sections[i] !== ''; i++); - var argv = [i, 1]; + const argv = [i, 1]; for (i = 9 - sections.length; i > 0; i--) { argv.push('0'); } - sections.splice.apply(sections, argv); + sections.splice(...argv); } - result = buff || new Buffer(offset + 16); + result = buff || Buffer.alloc(offset + 16); for (i = 0; i < sections.length; i++) { - var word = parseInt(sections[i], 16); + const word = parseInt(sections[i], 16); result[offset++] = (word >> 8) & 0xff; result[offset++] = word & 0xff; } @@ -62,17 +62,16 @@ ip.toString = function (buff, offset, length) { offset = ~~offset; length = length || (buff.length - offset); - var result = []; - var i; + let result = []; if (length === 4) { // IPv4 - for (i = 0; i < length; i++) { + for (let i = 0; i < length; i++) { result.push(buff[offset + i]); } result = result.join('.'); } else if (length === 16) { // IPv6 - for (i = 0; i < length; i += 2) { + for (let i = 0; i < length; i += 2) { result.push(buff.readUInt16BE(offset + i).toString(16)); } result = result.join(':'); @@ -83,8 +82,8 @@ ip.toString = function (buff, offset, length) { return result; }; -var ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/; -var ipv6Regex = /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i; +const ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/; +const ipv6Regex = /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i; ip.isV4Format = function (ip) { return ipv4Regex.test(ip); @@ -111,14 +110,14 @@ ip.fromPrefixLen = function (prefixlen, family) { family = _normalizeFamily(family); } - var len = 4; + let len = 4; if (family === 'ipv6') { len = 16; } - var buff = new Buffer(len); + const buff = Buffer.alloc(len); - for (var i = 0, n = buff.length; i < n; ++i) { - var bits = 8; + for (let i = 0, n = buff.length; i < n; ++i) { + let bits = 8; if (prefixlen < 8) { bits = prefixlen; } @@ -134,10 +133,10 @@ ip.mask = function (addr, mask) { addr = ip.toBuffer(addr); mask = ip.toBuffer(mask); - var result = new Buffer(Math.max(addr.length, mask.length)); + const result = Buffer.alloc(Math.max(addr.length, mask.length)); // Same protocol - do bitwise and - var i; + let i; if (addr.length === mask.length) { for (i = 0; i < addr.length; i++) { result[i] = addr[i] & mask[i]; @@ -170,30 +169,30 @@ ip.mask = function (addr, mask) { }; ip.cidr = function (cidrString) { - var cidrParts = cidrString.split('/'); + const cidrParts = cidrString.split('/'); - var addr = cidrParts[0]; + const addr = cidrParts[0]; if (cidrParts.length !== 2) { throw new Error(`invalid CIDR subnet: ${addr}`); } - var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); + const mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); return ip.mask(addr, mask); }; ip.subnet = function (addr, mask) { - var networkAddress = ip.toLong(ip.mask(addr, mask)); + const networkAddress = ip.toLong(ip.mask(addr, mask)); // Calculate the mask's length. - var maskBuffer = ip.toBuffer(mask); - var maskLength = 0; + const maskBuffer = ip.toBuffer(mask); + let maskLength = 0; - for (var i = 0; i < maskBuffer.length; i++) { + for (let i = 0; i < maskBuffer.length; i++) { if (maskBuffer[i] === 0xff) { maskLength += 8; } else { - var octet = maskBuffer[i] & 0xff; + let octet = maskBuffer[i] & 0xff; while (octet) { octet = (octet << 1) & 0xff; maskLength++; @@ -201,7 +200,7 @@ ip.subnet = function (addr, mask) { } } - var numberOfAddresses = Math.pow(2, 32 - maskLength); + const numberOfAddresses = 2 ** (32 - maskLength); return { networkAddress: ip.fromLong(networkAddress), @@ -224,50 +223,48 @@ ip.subnet = function (addr, mask) { }; ip.cidrSubnet = function (cidrString) { - var cidrParts = cidrString.split('/'); + const cidrParts = cidrString.split('/'); - var addr = cidrParts[0]; + const addr = cidrParts[0]; if (cidrParts.length !== 2) { throw new Error(`invalid CIDR subnet: ${addr}`); } - var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); + const mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); return ip.subnet(addr, mask); }; ip.not = function (addr) { - var buff = ip.toBuffer(addr); - for (var i = 0; i < buff.length; i++) { + const buff = ip.toBuffer(addr); + for (let i = 0; i < buff.length; i++) { buff[i] = 0xff ^ buff[i]; } return ip.toString(buff); }; ip.or = function (a, b) { - var i; - a = ip.toBuffer(a); b = ip.toBuffer(b); // same protocol if (a.length === b.length) { - for (i = 0; i < a.length; ++i) { + for (let i = 0; i < a.length; ++i) { a[i] |= b[i]; } return ip.toString(a); // mixed protocols } - var buff = a; - var other = b; + let buff = a; + let other = b; if (b.length > a.length) { buff = b; other = a; } - var offset = buff.length - other.length; - for (i = offset; i < buff.length; ++i) { + const offset = buff.length - other.length; + for (let i = offset; i < buff.length; ++i) { buff[i] |= other[i - offset]; } @@ -275,14 +272,12 @@ ip.or = function (a, b) { }; ip.isEqual = function (a, b) { - var i; - a = ip.toBuffer(a); b = ip.toBuffer(b); // Same protocol if (a.length === b.length) { - for (i = 0; i < a.length; i++) { + for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) return false; } return true; @@ -290,20 +285,20 @@ ip.isEqual = function (a, b) { // Swap if (b.length === 4) { - var t = b; + const t = b; b = a; a = t; } // a - IPv4, b - IPv6 - for (i = 0; i < 10; i++) { + for (let i = 0; i < 10; i++) { if (b[i] !== 0) return false; } - var word = b.readUInt16BE(10); + const word = b.readUInt16BE(10); if (word !== 0 && word !== 0xffff) return false; - for (i = 0; i < 4; i++) { + for (let i = 0; i < 4; i++) { if (a[i] !== b[i + 12]) return false; } @@ -365,7 +360,7 @@ ip.loopback = function (family) { // * undefined: First address with `ipv4` or loopback address `127.0.0.1`. // ip.address = function (name, family) { - var interfaces = os.networkInterfaces(); + const interfaces = os.networkInterfaces(); // // Default to `ipv4` @@ -377,8 +372,8 @@ ip.address = function (name, family) { // return the address. // if (name && name !== 'private' && name !== 'public') { - var res = interfaces[name].filter((details) => { - var itemFamily = _normalizeFamily(details.family); + const res = interfaces[name].filter((details) => { + const itemFamily = _normalizeFamily(details.family); return itemFamily === family; }); if (res.length === 0) { @@ -387,12 +382,12 @@ ip.address = function (name, family) { return res[0].address; } - var all = Object.keys(interfaces).map((nic) => { + const all = Object.keys(interfaces).map((nic) => { // // Note: name will only be `public` or `private` // when this is called. // - var addresses = interfaces[nic].filter((details) => { + const addresses = interfaces[nic].filter((details) => { details.family = _normalizeFamily(details.family); if (details.family !== family || ip.isLoopback(details.address)) { return false; @@ -411,7 +406,7 @@ ip.address = function (name, family) { }; ip.toLong = function (ip) { - var ipl = 0; + let ipl = 0; ip.split('.').forEach((octet) => { ipl <<= 8; ipl += parseInt(octet); diff --git a/deps/npm/node_modules/ip/package.json b/deps/npm/node_modules/ip/package.json index 70e1a4f02ae..f0d95e9b789 100644 --- a/deps/npm/node_modules/ip/package.json +++ b/deps/npm/node_modules/ip/package.json @@ -1,6 +1,6 @@ { "name": "ip", - "version": "1.1.8", + "version": "2.0.0", "author": "Fedor Indutny ", "homepage": "https://github.com/indutny/node-ip", "repository": { diff --git a/deps/npm/node_modules/is-core-module/core.json b/deps/npm/node_modules/is-core-module/core.json index 058584b7899..b1d7e46606b 100644 --- a/deps/npm/node_modules/is-core-module/core.json +++ b/deps/npm/node_modules/is-core-module/core.json @@ -112,7 +112,7 @@ "node:string_decoder": [">= 14.18 && < 15", ">= 16"], "sys": [">= 0.4 && < 0.7", ">= 0.8"], "node:sys": [">= 14.18 && < 15", ">= 16"], - "node:test": ">= 18", + "node:test": [">= 16.17 && < 17", ">= 18"], "timers": true, "node:timers": [">= 14.18 && < 15", ">= 16"], "timers/promises": ">= 15", diff --git a/deps/npm/node_modules/is-core-module/package.json b/deps/npm/node_modules/is-core-module/package.json index 80ce9f5bb17..c2830d63202 100644 --- a/deps/npm/node_modules/is-core-module/package.json +++ b/deps/npm/node_modules/is-core-module/package.json @@ -1,6 +1,6 @@ { "name": "is-core-module", - "version": "2.9.0", + "version": "2.10.0", "description": "Is this specifier a node.js core module?", "main": "index.js", "sideEffects": false, diff --git a/deps/npm/node_modules/is-core-module/test/index.js b/deps/npm/node_modules/is-core-module/test/index.js index 4385b20ea14..912808b9d00 100644 --- a/deps/npm/node_modules/is-core-module/test/index.js +++ b/deps/npm/node_modules/is-core-module/test/index.js @@ -44,7 +44,7 @@ test('core modules', function (t) { t.test('core via repl module', { skip: !data.repl }, function (st) { var libs = require('repl')._builtinLibs; // eslint-disable-line no-underscore-dangle if (!libs) { - st.skip('module.builtinModules does not exist'); + st.skip('repl._builtinLibs does not exist'); } else { for (var i = 0; i < libs.length; ++i) { var mod = libs[i]; diff --git a/deps/npm/node_modules/is-fullwidth-code-point/readme.md b/deps/npm/node_modules/is-fullwidth-code-point/readme.md deleted file mode 100644 index 4236bba980d..00000000000 --- a/deps/npm/node_modules/is-fullwidth-code-point/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) - -> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) - - -## Install - -``` -$ npm install is-fullwidth-code-point -``` - - -## Usage - -```js -const isFullwidthCodePoint = require('is-fullwidth-code-point'); - -isFullwidthCodePoint('谢'.codePointAt(0)); -//=> true - -isFullwidthCodePoint('a'.codePointAt(0)); -//=> false -``` - - -## API - -### isFullwidthCodePoint(codePoint) - -#### codePoint - -Type: `number` - -The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/deps/npm/node_modules/just-diff-apply/index.d.ts b/deps/npm/node_modules/just-diff-apply/index.d.ts index 9fc05257af0..7547b722f48 100644 --- a/deps/npm/node_modules/just-diff-apply/index.d.ts +++ b/deps/npm/node_modules/just-diff-apply/index.d.ts @@ -1,6 +1,6 @@ // Definitions by: Eddie Atkinson -type Operation = "add" | "replace" | "remove"; +type Operation = "add" | "replace" | "remove" | "move"; type DiffOps = Array<{ op: Operation; diff --git a/deps/npm/node_modules/just-diff-apply/index.mjs b/deps/npm/node_modules/just-diff-apply/index.mjs index 045830507cd..adc5f46ed51 100644 --- a/deps/npm/node_modules/just-diff-apply/index.mjs +++ b/deps/npm/node_modules/just-diff-apply/index.mjs @@ -42,6 +42,7 @@ var REMOVE = 'remove'; var REPLACE = 'replace'; var ADD = 'add'; +var MOVE = 'move'; function diffApply(obj, diff, pathConverter) { if (!obj || typeof obj != 'object') { @@ -57,23 +58,40 @@ function diffApply(obj, diff, pathConverter) { var thisDiff = diff[i]; var subObject = obj; var thisOp = thisDiff.op; - var thisPath = thisDiff.path; - if (pathConverter) { - thisPath = pathConverter(thisPath); - if (!Array.isArray(thisPath)) { - throw new Error('pathConverter must return an array'); + + var thisPath = transformPath(pathConverter, thisDiff.path); + var thisFromPath = thisDiff.from && transformPath(pathConverter, thisDiff.from); + var toPath, toPathCopy, lastToProp, subToObject, valueToMove; + + if (thisFromPath) { + // MOVE only, "fromPath" is effectively path and "path" is toPath + toPath = thisPath; + thisPath = thisFromPath; + + toPathCopy = toPath.slice(); + lastToProp = toPathCopy.pop(); + prototypeCheck(lastToProp); + if (lastToProp == null) { + return false; } - } else { - if (!Array.isArray(thisPath)) { - throw new Error('diff path must be an array, consider supplying a path converter'); + + var thisToProp; + while (((thisToProp = toPathCopy.shift())) != null) { + prototypeCheck(thisToProp); + if (!(thisToProp in subToObject)) { + subToObject[thisToProp] = {}; + } + subToObject = subToObject[thisToProp]; } } + var pathCopy = thisPath.slice(); var lastProp = pathCopy.pop(); prototypeCheck(lastProp); if (lastProp == null) { return false; } + var thisProp; while (((thisProp = pathCopy.shift())) != null) { prototypeCheck(thisProp); @@ -82,21 +100,50 @@ function diffApply(obj, diff, pathConverter) { } subObject = subObject[thisProp]; } - if (thisOp === REMOVE || thisOp === REPLACE) { + if (thisOp === REMOVE || thisOp === REPLACE || thisOp === MOVE) { + var path = thisOp === MOVE ? thisDiff.from : thisDiff.path; if (!subObject.hasOwnProperty(lastProp)) { - throw new Error(['expected to find property', thisDiff.path, 'in object', obj].join(' ')); + throw new Error(['expected to find property', path, 'in object', obj].join(' ')); } } - if (thisOp === REMOVE) { + if (thisOp === REMOVE || thisOp === MOVE) { + if (thisOp === MOVE) { + valueToMove = subObject[lastProp]; + } Array.isArray(subObject) ? subObject.splice(lastProp, 1) : delete subObject[lastProp]; } if (thisOp === REPLACE || thisOp === ADD) { subObject[lastProp] = thisDiff.value; } + + if (thisOp === MOVE) { + subObject[lastToProp] = valueToMove; + } } return subObject; } +function transformPath(pathConverter, thisPath) { + if(pathConverter) { + thisPath = pathConverter(thisPath); + if(!Array.isArray(thisPath)) { + throw new Error([ + 'pathConverter must return an array, returned:', + thisPath, + ].join(' ')); + } + } else { + if(!Array.isArray(thisPath)) { + throw new Error([ + 'diff path', + thisPath, + 'must be an array, consider supplying a path converter'] + .join(' ')); + } + } + return thisPath; +} + function jsonPatchPathConverter(stringPath) { return stringPath.split('/').slice(1); } diff --git a/deps/npm/node_modules/just-diff-apply/package.json b/deps/npm/node_modules/just-diff-apply/package.json index b8e5012ff83..5317303a8bd 100644 --- a/deps/npm/node_modules/just-diff-apply/package.json +++ b/deps/npm/node_modules/just-diff-apply/package.json @@ -1,14 +1,16 @@ { "name": "just-diff-apply", - "version": "5.2.0", + "version": "5.4.1", "description": "Apply a diff to an object. Optionally supports jsonPatch protocol", "main": "index.js", "module": "index.mjs", "exports": { ".": { "require": "./index.js", + "types": "./index.d.ts", "default": "./index.mjs" - } + }, + "./package.json": "./package.json" }, "types": "index.d.ts", "scripts": { @@ -29,4 +31,4 @@ "bugs": { "url": "https://github.com/angus-c/just/issues" } -} +} \ No newline at end of file diff --git a/deps/npm/node_modules/just-diff/index.mjs b/deps/npm/node_modules/just-diff/index.mjs index 8da5b5cea8d..a0c5834475f 100644 --- a/deps/npm/node_modules/just-diff/index.mjs +++ b/deps/npm/node_modules/just-diff/index.mjs @@ -124,9 +124,13 @@ function diff(obj1, obj2, pathConverter) { } } - return diffs.remove.reverse().concat(diffs.replace).concat(diffs.add); + return diffs; } - return getDiff(obj1, obj2, [], {remove: [], replace: [], add: []}); + const finalDiffs = getDiff(obj1, obj2, [], {remove: [], replace: [], add: []}); + return finalDiffs.remove + .reverse() + .concat(finalDiffs.replace) + .concat(finalDiffs.add); } function pushReplace(path, basePath, key, diffs, pathConverter, obj2) { diff --git a/deps/npm/node_modules/just-diff/package.json b/deps/npm/node_modules/just-diff/package.json index 5a4bb5f129c..035daf034fc 100644 --- a/deps/npm/node_modules/just-diff/package.json +++ b/deps/npm/node_modules/just-diff/package.json @@ -1,14 +1,16 @@ { "name": "just-diff", - "version": "5.0.2", + "version": "5.1.1", "description": "Return an object representing the diffs between two objects. Supports jsonPatch protocol", "main": "index.js", "module": "index.mjs", "exports": { ".": { "require": "./index.js", + "types": "./index.d.ts", "default": "./index.mjs" - } + }, + "./package.json": "./package.json" }, "types": "index.d.ts", "scripts": { @@ -28,4 +30,4 @@ "bugs": { "url": "https://github.com/angus-c/just/issues" } -} +} \ No newline at end of file diff --git a/deps/npm/node_modules/libnpmaccess/package.json b/deps/npm/node_modules/libnpmaccess/package.json index 55ad695b29d..5fa72dbf467 100644 --- a/deps/npm/node_modules/libnpmaccess/package.json +++ b/deps/npm/node_modules/libnpmaccess/package.json @@ -1,26 +1,22 @@ { "name": "libnpmaccess", - "version": "6.0.3", + "version": "6.0.4", "description": "programmatic library for `npm access` commands", "author": "GitHub Inc.", "license": "ISC", "main": "lib/index.js", "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "postpublish": "git push origin --follow-tags", "lint": "eslint \"**/*.js\"", "test": "tap", "postlint": "template-oss-check", - "lintfix": "npm run lint -- --fix", - "prepublishOnly": "git push origin --follow-tags", + "lintfix": "node ../.. run lint -- --fix", "snap": "tap", - "posttest": "npm run lint", + "posttest": "node ../.. run lint", "template-oss-apply": "template-oss-apply --force" }, "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -46,6 +42,13 @@ ], "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] } } diff --git a/deps/npm/node_modules/libnpmdiff/package.json b/deps/npm/node_modules/libnpmdiff/package.json index 3630980ccb3..be9c42521b7 100644 --- a/deps/npm/node_modules/libnpmdiff/package.json +++ b/deps/npm/node_modules/libnpmdiff/package.json @@ -1,6 +1,6 @@ { "name": "libnpmdiff", - "version": "4.0.3", + "version": "4.0.5", "description": "The registry diff", "repository": { "type": "git", @@ -34,33 +34,37 @@ "scripts": { "eslint": "eslint", "lint": "eslint \"**/*.js\"", - "lintfix": "npm run lint -- --fix", + "lintfix": "node ../.. run lint -- --fix", "test": "tap", - "posttest": "npm run lint", + "posttest": "node ../.. run lint", "snap": "tap", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", "postlint": "template-oss-check", "template-oss-apply": "template-oss-apply --force" }, "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", "tap": "^16.0.1" }, "dependencies": { "@npmcli/disparity-colors": "^2.0.0", "@npmcli/installed-package-contents": "^1.0.7", "binary-extensions": "^2.2.0", - "diff": "^5.0.0", + "diff": "^5.1.0", "minimatch": "^5.0.1", "npm-package-arg": "^9.0.1", - "pacote": "^13.0.5", + "pacote": "^13.6.1", "tar": "^6.1.0" }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] } } diff --git a/deps/npm/node_modules/libnpmexec/lib/cache-install-dir.js b/deps/npm/node_modules/libnpmexec/lib/cache-install-dir.js deleted file mode 100644 index 77466938762..00000000000 --- a/deps/npm/node_modules/libnpmexec/lib/cache-install-dir.js +++ /dev/null @@ -1,20 +0,0 @@ -const crypto = require('crypto') - -const { resolve } = require('path') - -const cacheInstallDir = ({ npxCache, packages }) => { - if (!npxCache) { - throw new Error('Must provide a valid npxCache path') - } - - // only packages not found in ${prefix}/node_modules - return resolve(npxCache, getHash(packages)) -} - -const getHash = (packages) => - crypto.createHash('sha512') - .update(packages.sort((a, b) => a.localeCompare(b, 'en')).join('\n')) - .digest('hex') - .slice(0, 16) - -module.exports = cacheInstallDir diff --git a/deps/npm/node_modules/libnpmexec/lib/file-exists.js b/deps/npm/node_modules/libnpmexec/lib/file-exists.js index f89cfc217d6..e5cd474dac3 100644 --- a/deps/npm/node_modules/libnpmexec/lib/file-exists.js +++ b/deps/npm/node_modules/libnpmexec/lib/file-exists.js @@ -1,23 +1,25 @@ const { resolve } = require('path') -const { promisify } = require('util') -const stat = promisify(require('fs').stat) +const fs = require('@npmcli/fs') const walkUp = require('walk-up-path') -const fileExists = (file) => stat(file) - .then((res) => res.isFile()) - .catch(() => false) - -const localFileExists = async (dir, binName, root = '/') => { - root = resolve(root).toLowerCase() +const fileExists = async (file) => { + try { + const res = await fs.stat(file) + return res.isFile() + } catch { + return false + } +} - for (const path of walkUp(resolve(dir))) { +const localFileExists = async (dir, binName, root) => { + for (const path of walkUp(dir)) { const binDir = resolve(path, 'node_modules', '.bin') if (await fileExists(resolve(binDir, binName))) { return binDir } - if (path.toLowerCase() === root) { + if (path.toLowerCase() === resolve(root).toLowerCase()) { return false } } diff --git a/deps/npm/node_modules/libnpmexec/lib/index.js b/deps/npm/node_modules/libnpmexec/lib/index.js index fbe5c5520c3..45c75d47156 100644 --- a/deps/npm/node_modules/libnpmexec/lib/index.js +++ b/deps/npm/node_modules/libnpmexec/lib/index.js @@ -1,27 +1,81 @@ -const { delimiter, dirname, resolve } = require('path') +'use strict' + const { promisify } = require('util') -const read = promisify(require('read')) const Arborist = require('@npmcli/arborist') const ciDetect = require('@npmcli/ci-detect') +const crypto = require('crypto') const log = require('proc-log') -const npmlog = require('npmlog') const mkdirp = require('mkdirp-infer-owner') const npa = require('npm-package-arg') +const npmlog = require('npmlog') const pacote = require('pacote') +const read = promisify(require('read')) +const semver = require('semver') -const cacheInstallDir = require('./cache-install-dir.js') const { fileExists, localFileExists } = require('./file-exists.js') const getBinFromManifest = require('./get-bin-from-manifest.js') const noTTY = require('./no-tty.js') const runScript = require('./run-script.js') const isWindows = require('./is-windows.js') -const _localManifest = Symbol('localManifest') -/* istanbul ignore next */ -const PATH = ( - process.env.PATH || process.env.Path || process.env.path -).split(delimiter) +const { dirname, resolve } = require('path') + +const binPaths = [] + +// when checking the local tree we look up manifests, cache those results by +// spec.raw so we don't have to fetch again when we check npxCache +const manifests = new Map() + +const getManifest = async (spec, flatOptions) => { + if (!manifests.has(spec.raw)) { + const manifest = await pacote.manifest(spec, { ...flatOptions, preferOnline: true }) + manifests.set(spec.raw, manifest) + } + return manifests.get(spec.raw) +} + +// Returns the required manifest if the spec is missing from the tree +// Returns the found node if it is in the tree +const missingFromTree = async ({ spec, tree, flatOptions }) => { + if (spec.registry && (spec.rawSpec === '' || spec.type !== 'tag')) { + // registry spec that is not a specific tag. + const nodesBySpec = tree.inventory.query('packageName', spec.name) + for (const node of nodesBySpec) { + if (spec.type === 'tag') { + // package requested by name only + return { node } + } else if (spec.type === 'version') { + // package requested by specific version + if (node.pkgid === spec.raw) { + return { node } + } + } else { + // package requested by version range, only remaining registry type + if (semver.satisfies(node.package.version, spec.rawSpec)) { + return { node } + } + } + } + const manifest = await getManifest(spec, flatOptions) + return { manifest } + } else { + // non-registry spec, or a specific tag. Look up manifest and check + // resolved to see if it's in the tree. + const manifest = await getManifest(spec, flatOptions) + if (spec.type === 'directory') { + return { manifest } + } + const nodesByManifest = tree.inventory.query('packageName', manifest.name) + for (const node of nodesByManifest) { + if (node.package.resolved === manifest._resolved) { + // we have a package by the same name and the same resolved destination, nothing to add. + return { node } + } + } + return { manifest } + } +} const exec = async (opts) => { const { @@ -31,19 +85,18 @@ const exec = async (opts) => { localBin = resolve('./node_modules/.bin'), locationMsg = undefined, globalBin = '', + globalPath, output, - packages: _packages = [], + // dereference values because we manipulate it later + packages: [...packages] = [], path = '.', runPath = '.', scriptShell = isWindows ? process.env.ComSpec || 'cmd' : 'sh', - yes = undefined, ...flatOptions } = opts - // dereferences values because we manipulate it later - const packages = [..._packages] - const pathArr = [...PATH] - const _run = () => runScript({ + let yes = opts.yes + const run = () => runScript({ args, call, color, @@ -51,125 +104,125 @@ const exec = async (opts) => { locationMsg, output, path, - pathArr, + binPaths, runPath, scriptShell, }) - // nothing to maybe install, skip the arborist dance + // interactive mode if (!call && !args.length && !packages.length) { - return await _run() + return run() } - const needPackageCommandSwap = args.length && !packages.length - // if there's an argument and no package has been explicitly asked for - // check the local and global bin paths for a binary named the same as - // the argument and run it if it exists, otherwise fall through to - // the behavior of treating the single argument as a package name + const needPackageCommandSwap = (args.length > 0) && (packages.length === 0) + // If they asked for a command w/o specifying a package, see if there is a + // bin that directly matches that name either globally or in the local tree. if (needPackageCommandSwap) { - let binExists = false const dir = dirname(dirname(localBin)) - const localBinPath = await localFileExists(dir, args[0]) + const localBinPath = await localFileExists(dir, args[0], '/') if (localBinPath) { - pathArr.unshift(localBinPath) - binExists = true - } else if (await fileExists(`${globalBin}/${args[0]}`)) { - pathArr.unshift(globalBin) - binExists = true - } - - if (binExists) { - return await _run() + binPaths.push(localBinPath) + return await run() + } else if (globalPath && await fileExists(`${globalBin}/${args[0]}`)) { + binPaths.push(globalBin) + return await run() } + // We swap out args[0] with the bin from the manifest later packages.push(args[0]) } - // figure out whether we need to install stuff, or if local is fine - const localArb = new Arborist({ - ...flatOptions, - path, - }) - const localTree = await localArb.loadActual() - - const getLocalManifest = ({ tree, name }) => { - // look up the package name in the current tree inventory, - // if it's found then return that normalized pkg data - const [node] = tree.inventory.query('packageName', name) - - if (node) { - return { - _id: node.pkgid, - ...node.package, - [_localManifest]: true, - } + // Resolve any directory specs so that the npx directory is unique to the + // resolved directory, not the potentially relative one (i.e. "npx .") + for (const i in packages) { + const pkg = packages[i] + const spec = npa(pkg) + if (spec.type === 'directory') { + packages[i] = spec.fetchSpec } } - // If we do `npm exec foo`, and have a `foo` locally, then we'll - // always use that, so we don't really need to fetch the manifest. - // So: run npa on each packages entry, and if it is a name with a - // rawSpec==='', then try to find that node name in the tree inventory - // and only pacote fetch if that fails. - const manis = await Promise.all(packages.map(async p => { - const spec = npa(p, path) - if (spec.type === 'tag' && spec.rawSpec === '') { - const localManifest = getLocalManifest({ - tree: localTree, - name: spec.name, - }) - if (localManifest) { - return localManifest + const localArb = new Arborist({ ...flatOptions, path }) + const localTree = await localArb.loadActual() + + // Find anything that isn't installed locally + const needInstall = [] + let commandManifest + await Promise.all(packages.map(async (pkg, i) => { + const spec = npa(pkg, path) + const { manifest, node } = await missingFromTree({ spec, tree: localTree, flatOptions }) + if (manifest) { + // Package does not exist in the local tree + needInstall.push({ spec, manifest }) + if (i === 0) { + commandManifest = manifest } + } else if (i === 0) { + // The node.package has enough to look up the bin + commandManifest = node.package } - // Force preferOnline to true so we are making sure to pull in the latest - // This is especially useful if the user didn't give us a version, and - // they expect to be running @latest - return await pacote.manifest(p, { - ...flatOptions, - preferOnline: true, - }) })) if (needPackageCommandSwap) { - args[0] = getBinFromManifest(manis[0]) - } + const spec = npa(args[0]) - // are all packages from the manifest list installed? - const needInstall = - manis.some(manifest => !manifest[_localManifest]) + if (spec.type === 'directory') { + yes = true + } - if (needInstall) { + args[0] = getBinFromManifest(commandManifest) + + if (needInstall.length > 0 && globalPath) { + // See if the package is installed globally, and run the translated bin + const globalArb = new Arborist({ ...flatOptions, path: globalPath, global: true }) + const globalTree = await globalArb.loadActual() + const { manifest: globalManifest } = + await missingFromTree({ spec, tree: globalTree, flatOptions }) + if (!globalManifest && await fileExists(`${globalBin}/${args[0]}`)) { + binPaths.push(globalBin) + return await run() + } + } + } + + const add = [] + if (needInstall.length > 0) { + // Install things to the npx cache, if needed const { npxCache } = flatOptions - const installDir = cacheInstallDir({ npxCache, packages }) + if (!npxCache) { + throw new Error('Must provide a valid npxCache path') + } + const hash = crypto.createHash('sha512') + .update(packages.map(p => { + // Keeps the npx directory unique to the resolved directory, not the + // potentially relative one (i.e. "npx .") + const spec = npa(p) + if (spec.type === 'directory') { + return spec.fetchSpec + } + return p + }).sort((a, b) => a.localeCompare(b, 'en')).join('\n')) + .digest('hex') + .slice(0, 16) + const installDir = resolve(npxCache, hash) await mkdirp(installDir) - const arb = new Arborist({ + const npxArb = new Arborist({ ...flatOptions, path: installDir, }) - const tree = await arb.loadActual() - - // inspect the npx-space installed tree to check if the package is already - // there, if that's the case also check that it's version matches the same - // version expected by the user requested pkg returned by pacote.manifest - const filterMissingPackagesFromInstallDir = (mani) => { - const localManifest = getLocalManifest({ tree, name: mani.name }) - if (localManifest) { - return localManifest.version !== mani.version + const npxTree = await npxArb.loadActual() + await Promise.all(needInstall.map(async ({ spec }) => { + const { manifest } = await missingFromTree({ spec, tree: npxTree, flatOptions }) + if (manifest) { + // Manifest is not in npxCache, we need to install it there + if (!spec.registry) { + add.push(manifest._from) + } else { + add.push(manifest._id) + } } - return true - } - - // at this point, we have to ensure that we get the exact same - // version, because it's something that has only ever been installed - // by npm exec in the cache install directory - const add = manis - .filter(mani => !mani[_localManifest]) - .filter(filterMissingPackagesFromInstallDir) - .map(mani => mani._from) - .sort((a, b) => a.localeCompare(b, 'en')) + })) - // no need to install if already present if (add.length) { if (!yes) { // set -n to always say no @@ -196,15 +249,15 @@ const exec = async (opts) => { } } } - await arb.reify({ + await npxArb.reify({ ...flatOptions, add, }) } - pathArr.unshift(resolve(installDir, 'node_modules/.bin')) + binPaths.push(resolve(installDir, 'node_modules/.bin')) } - return await _run() + return await run() } module.exports = exec diff --git a/deps/npm/node_modules/libnpmexec/lib/run-script.js b/deps/npm/node_modules/libnpmexec/lib/run-script.js index 97543e6ff0d..cee8ba45ae8 100644 --- a/deps/npm/node_modules/libnpmexec/lib/run-script.js +++ b/deps/npm/node_modules/libnpmexec/lib/run-script.js @@ -1,5 +1,3 @@ -const { delimiter } = require('path') - const chalk = require('chalk') const ciDetect = require('@npmcli/ci-detect') const runScript = require('@npmcli/run-script') @@ -22,7 +20,7 @@ const run = async ({ locationMsg, output = () => {}, path, - pathArr, + binPaths, runPath, scriptShell, }) => { @@ -71,12 +69,11 @@ const run = async ({ // we always run in cwd, not --prefix path: runPath, stdioString: true, + binPaths, event: 'npx', args, - env: { - PATH: pathArr.join(delimiter), - }, stdio: 'inherit', + scriptShell, }) } finally { npmlog.enableProgress() diff --git a/deps/npm/node_modules/libnpmexec/package.json b/deps/npm/node_modules/libnpmexec/package.json index 9fe45c7ef6d..156cebce6cc 100644 --- a/deps/npm/node_modules/libnpmexec/package.json +++ b/deps/npm/node_modules/libnpmexec/package.json @@ -1,6 +1,6 @@ { "name": "libnpmexec", - "version": "4.0.5", + "version": "4.0.14", "files": [ "bin/", "lib/" @@ -34,42 +34,48 @@ "license": "ISC", "scripts": { "lint": "eslint \"**/*.js\"", - "posttest": "npm run lint", + "posttest": "node ../.. run lint", "test": "tap", "snap": "tap", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", "postlint": "template-oss-check", - "lintfix": "npm run lint -- --fix", + "lintfix": "node ../.. run lint -- --fix", "template-oss-apply": "template-oss-apply --force" }, "tap": { "color": true, - "files": "test/*.js" + "files": "test/*.js", + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] }, "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", - "bin-links": "^3.0.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", + "bin-links": "^3.0.3", + "minify-registry-metadata": "^2.2.0", + "mkdirp": "^1.0.4", "tap": "^16.0.1" }, "dependencies": { - "@npmcli/arborist": "^5.0.0", + "@npmcli/arborist": "^5.6.3", "@npmcli/ci-detect": "^2.0.0", - "@npmcli/run-script": "^3.0.0", + "@npmcli/fs": "^2.1.1", + "@npmcli/run-script": "^4.2.0", "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", "npm-package-arg": "^9.0.1", "npmlog": "^6.0.2", - "pacote": "^13.0.5", + "pacote": "^13.6.1", "proc-log": "^2.0.0", "read": "^1.0.7", "read-package-json-fast": "^2.0.2", + "semver": "^7.3.7", "walk-up-path": "^1.0.0" }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" } } diff --git a/deps/npm/node_modules/libnpmfund/package.json b/deps/npm/node_modules/libnpmfund/package.json index 7dd3e1b6484..1ee87b055b4 100644 --- a/deps/npm/node_modules/libnpmfund/package.json +++ b/deps/npm/node_modules/libnpmfund/package.json @@ -1,6 +1,6 @@ { "name": "libnpmfund", - "version": "3.0.2", + "version": "3.0.5", "main": "lib/index.js", "files": [ "bin/", @@ -33,29 +33,33 @@ "scripts": { "eslint": "eslint", "lint": "eslint \"**/*.js\"", - "lintfix": "npm run lint -- --fix", - "posttest": "npm run lint", + "lintfix": "node ../.. run lint -- --fix", + "posttest": "node ../.. run lint", "test": "tap", "snap": "tap", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", "postlint": "template-oss-check", "template-oss-apply": "template-oss-apply --force" }, "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", "tap": "^16.0.1" }, "dependencies": { - "@npmcli/arborist": "^5.0.0" + "@npmcli/arborist": "^5.6.3" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] } } diff --git a/deps/npm/node_modules/libnpmhook/package.json b/deps/npm/node_modules/libnpmhook/package.json index 2f76b52f8e1..434149c2b58 100644 --- a/deps/npm/node_modules/libnpmhook/package.json +++ b/deps/npm/node_modules/libnpmhook/package.json @@ -1,6 +1,6 @@ { "name": "libnpmhook", - "version": "8.0.3", + "version": "8.0.4", "description": "programmatic API for managing npm registry hooks", "main": "lib/index.js", "files": [ @@ -13,12 +13,9 @@ "test": "tap", "lint": "eslint \"**/*.js\"", "postlint": "template-oss-check", - "lintfix": "npm run lint -- --fix", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", + "lintfix": "node ../.. run lint -- --fix", "snap": "tap", - "posttest": "npm run lint", + "posttest": "node ../.. run lint", "template-oss-apply": "template-oss-apply --force" }, "repository": { @@ -39,8 +36,8 @@ "npm-registry-fetch": "^13.0.0" }, "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -49,6 +46,13 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] } } diff --git a/deps/npm/node_modules/libnpmorg/package.json b/deps/npm/node_modules/libnpmorg/package.json index 280fa5339ca..926c44e7a8e 100644 --- a/deps/npm/node_modules/libnpmorg/package.json +++ b/deps/npm/node_modules/libnpmorg/package.json @@ -1,6 +1,6 @@ { "name": "libnpmorg", - "version": "4.0.3", + "version": "4.0.4", "description": "Programmatic api for `npm org` commands", "author": "GitHub Inc.", "main": "lib/index.js", @@ -14,14 +14,11 @@ ], "license": "ISC", "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", "lint": "eslint \"**/*.js\"", "test": "tap", - "posttest": "npm run lint", + "posttest": "node ../.. run lint", "postlint": "template-oss-check", - "lintfix": "npm run lint -- --fix", + "lintfix": "node ../.. run lint -- --fix", "snap": "tap", "template-oss-apply": "template-oss-apply --force" }, @@ -30,8 +27,8 @@ "lib/" ], "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", "minipass": "^3.1.1", "nock": "^13.2.4", "tap": "^16.0.1" @@ -52,6 +49,13 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] } } diff --git a/deps/npm/node_modules/libnpmpack/package.json b/deps/npm/node_modules/libnpmpack/package.json index 02f06a8bbfa..77c234beaea 100644 --- a/deps/npm/node_modules/libnpmpack/package.json +++ b/deps/npm/node_modules/libnpmpack/package.json @@ -1,6 +1,6 @@ { "name": "libnpmpack", - "version": "4.1.0", + "version": "4.1.3", "description": "Programmatic API for the bits behind npm pack", "author": "GitHub Inc.", "main": "lib/index.js", @@ -13,20 +13,17 @@ ], "license": "ISC", "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", "lint": "eslint \"**/*.js\"", "test": "tap", - "posttest": "npm run lint", + "posttest": "node ../.. run lint", "postlint": "template-oss-check", - "lintfix": "npm run lint -- --fix", + "lintfix": "node ../.. run lint -- --fix", "snap": "tap", "template-oss-apply": "template-oss-apply --force" }, "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", "nock": "^13.0.7", "tap": "^16.0.1" }, @@ -38,15 +35,22 @@ "bugs": "https://github.com/npm/libnpmpack/issues", "homepage": "https://npmjs.com/package/libnpmpack", "dependencies": { - "@npmcli/run-script": "^3.0.0", + "@npmcli/run-script": "^4.1.3", "npm-package-arg": "^9.0.1", - "pacote": "^13.5.0" + "pacote": "^13.6.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] } } diff --git a/deps/npm/node_modules/libnpmpublish/package.json b/deps/npm/node_modules/libnpmpublish/package.json index 9d1f9de5c5e..2f20e6370a5 100644 --- a/deps/npm/node_modules/libnpmpublish/package.json +++ b/deps/npm/node_modules/libnpmpublish/package.json @@ -1,6 +1,6 @@ { "name": "libnpmpublish", - "version": "6.0.4", + "version": "6.0.5", "description": "Programmatic API for the bits behind npm publish and unpublish", "author": "GitHub Inc.", "main": "lib/index.js", @@ -16,20 +16,17 @@ "scripts": { "eslint": "eslint", "lint": "eslint \"**/*.js\"", - "lintfix": "npm run lint -- --fix", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", + "lintfix": "node ../.. run lint -- --fix", "test": "tap", - "posttest": "npm run lint", + "posttest": "node ../.. run lint", "postlint": "template-oss-check", "snap": "tap", "template-oss-apply": "template-oss-apply --force" }, "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", - "libnpmpack": "^4.0.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", + "libnpmpack": "^5.0.0-pre.0", "lodash.clonedeep": "^4.5.0", "nock": "^13.2.4", "tap": "^16.0.1" @@ -53,6 +50,13 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] } } diff --git a/deps/npm/node_modules/libnpmsearch/package.json b/deps/npm/node_modules/libnpmsearch/package.json index dc28a374b21..f8a906259ec 100644 --- a/deps/npm/node_modules/libnpmsearch/package.json +++ b/deps/npm/node_modules/libnpmsearch/package.json @@ -1,6 +1,6 @@ { "name": "libnpmsearch", - "version": "5.0.3", + "version": "5.0.4", "description": "Programmatic API for searching in npm and compatible registries.", "author": "GitHub Inc.", "main": "lib/index.js", @@ -16,20 +16,17 @@ ], "license": "ISC", "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "posttest": "npm run lint", + "posttest": "node ../.. run lint", "test": "tap", "lint": "eslint \"**/*.js\"", "postlint": "template-oss-check", - "lintfix": "npm run lint -- --fix", + "lintfix": "node ../.. run lint -- --fix", "snap": "tap", "template-oss-apply": "template-oss-apply --force" }, "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -48,6 +45,13 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] } } diff --git a/deps/npm/node_modules/libnpmteam/package.json b/deps/npm/node_modules/libnpmteam/package.json index 569678b5d86..45708b0157d 100644 --- a/deps/npm/node_modules/libnpmteam/package.json +++ b/deps/npm/node_modules/libnpmteam/package.json @@ -1,25 +1,22 @@ { "name": "libnpmteam", "description": "npm Team management APIs", - "version": "4.0.3", + "version": "4.0.4", "author": "GitHub Inc.", "license": "ISC", "main": "lib/index.js", "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", "lint": "eslint \"**/*.js\"", "test": "tap", - "posttest": "npm run lint", + "posttest": "node ../.. run lint", "postlint": "template-oss-check", - "lintfix": "npm run lint -- --fix", + "lintfix": "node ../.. run lint -- --fix", "snap": "tap", "template-oss-apply": "template-oss-apply --force" }, "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -42,6 +39,13 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] } } diff --git a/deps/npm/node_modules/libnpmversion/lib/version.js b/deps/npm/node_modules/libnpmversion/lib/version.js index 12be89b040d..f14b95e3233 100644 --- a/deps/npm/node_modules/libnpmversion/lib/version.js +++ b/deps/npm/node_modules/libnpmversion/lib/version.js @@ -90,7 +90,9 @@ module.exports = async (newversion, opts) => { } await writeJson(lock, sw) haveLocks.push(lock) - } catch (er) {} + } catch { + // ignore errors + } } if (!ignoreScripts) { diff --git a/deps/npm/node_modules/libnpmversion/package.json b/deps/npm/node_modules/libnpmversion/package.json index 86f97378128..9cb6b3e09e7 100644 --- a/deps/npm/node_modules/libnpmversion/package.json +++ b/deps/npm/node_modules/libnpmversion/package.json @@ -1,6 +1,6 @@ { "name": "libnpmversion", - "version": "3.0.4", + "version": "3.0.7", "main": "lib/index.js", "files": [ "bin/", @@ -17,27 +17,28 @@ "scripts": { "lint": "eslint \"**/*.js\"", "test": "tap", - "posttest": "npm run lint", + "posttest": "node ../.. run lint", "snap": "tap", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", "postlint": "template-oss-check", - "lintfix": "npm run lint -- --fix", + "lintfix": "node ../.. run lint -- --fix", "template-oss-apply": "template-oss-apply --force" }, "tap": { - "coverage-map": "map.js" + "coverage-map": "map.js", + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] }, "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "4.8.0", "require-inject": "^1.4.4", "tap": "^16.0.1" }, "dependencies": { "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^3.0.0", + "@npmcli/run-script": "^4.1.3", "json-parse-even-better-errors": "^2.3.1", "proc-log": "^2.0.0", "semver": "^7.3.7" @@ -47,6 +48,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "4.8.0", + "content": "../../scripts/template-oss/index.js" } } diff --git a/deps/npm/node_modules/lru-cache/index.d.ts b/deps/npm/node_modules/lru-cache/index.d.ts new file mode 100644 index 00000000000..e5481b3f926 --- /dev/null +++ b/deps/npm/node_modules/lru-cache/index.d.ts @@ -0,0 +1,592 @@ +// Project: https://github.com/isaacs/node-lru-cache +// Based initially on @types/lru-cache +// https://github.com/DefinitelyTyped/DefinitelyTyped +// used under the terms of the MIT License, shown below. +// +// DefinitelyTyped license: +// ------ +// MIT License +// +// Copyright (c) Microsoft Corporation. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE +// ------ +// +// Changes by Isaac Z. Schlueter released under the terms found in the +// LICENSE file within this project. + +//tslint:disable:member-access +declare class LRUCache implements Iterable<[K, V]> { + constructor(options: LRUCache.Options) + + /** + * Number of items in the cache. + * Alias for `cache.size` + * + * @deprecated since 7.0 use `cache.size` instead + */ + public readonly length: number + + public readonly max: number + public readonly maxSize: number + public readonly sizeCalculation: + | LRUCache.SizeCalculator + | undefined + public readonly dispose: LRUCache.Disposer + /** + * @since 7.4.0 + */ + public readonly disposeAfter: LRUCache.Disposer | null + public readonly noDisposeOnSet: boolean + public readonly ttl: number + public readonly ttlResolution: number + public readonly ttlAutopurge: boolean + public readonly allowStale: boolean + public readonly updateAgeOnGet: boolean + /** + * @since 7.11.0 + */ + public readonly noDeleteOnStaleGet: boolean + /** + * @since 7.6.0 + */ + public readonly fetchMethod: LRUCache.Fetcher | null + + /** + * The total number of items held in the cache at the current moment. + */ + public readonly size: number + + /** + * The total size of items in cache when using size tracking. + */ + public readonly calculatedSize: number + + /** + * Add a value to the cache. + */ + public set( + key: K, + value: V, + options?: LRUCache.SetOptions + ): this + + /** + * Return a value from the cache. + * Will update the recency of the cache entry found. + * If the key is not found, `get()` will return `undefined`. + * This can be confusing when setting values specifically to `undefined`, + * as in `cache.set(key, undefined)`. Use `cache.has()` to determine + * whether a key is present in the cache at all. + */ + // tslint:disable-next-line:no-unnecessary-generics + public get( + key: K, + options?: LRUCache.GetOptions + ): T | undefined + + /** + * Like `get()` but doesn't update recency or delete stale items. + * Returns `undefined` if the item is stale, unless `allowStale` is set + * either on the cache or in the options object. + */ + // tslint:disable-next-line:no-unnecessary-generics + public peek( + key: K, + options?: LRUCache.PeekOptions + ): T | undefined + + /** + * Check if a key is in the cache, without updating the recency of use. + * Will return false if the item is stale, even though it is technically + * in the cache. + * Will not update item age unless `updateAgeOnHas` is set in the options + * or constructor. + */ + public has(key: K, options?: LRUCache.HasOptions): boolean + + /** + * Deletes a key out of the cache. + * Returns true if the key was deleted, false otherwise. + */ + public delete(key: K): boolean + + /** + * Clear the cache entirely, throwing away all values. + */ + public clear(): void + + /** + * Delete any stale entries. Returns true if anything was removed, false + * otherwise. + */ + public purgeStale(): boolean + + /** + * Find a value for which the supplied fn method returns a truthy value, + * similar to Array.find(). fn is called as fn(value, key, cache). + */ + // tslint:disable-next-line:no-unnecessary-generics + public find( + callbackFn: ( + value: V, + key: K, + cache: this + ) => boolean | undefined | void, + options?: LRUCache.GetOptions + ): T + + /** + * Call the supplied function on each item in the cache, in order from + * most recently used to least recently used. fn is called as + * fn(value, key, cache). Does not update age or recenty of use. + */ + public forEach( + callbackFn: (this: T, value: V, key: K, cache: this) => void, + thisArg?: T + ): void + + /** + * The same as `cache.forEach(...)` but items are iterated over in reverse + * order. (ie, less recently used items are iterated over first.) + */ + public rforEach( + callbackFn: (this: T, value: V, key: K, cache: this) => void, + thisArg?: T + ): void + + /** + * Return a generator yielding the keys in the cache, + * in order from most recently used to least recently used. + */ + public keys(): Generator + + /** + * Inverse order version of `cache.keys()` + * Return a generator yielding the keys in the cache, + * in order from least recently used to most recently used. + */ + public rkeys(): Generator + + /** + * Return a generator yielding the values in the cache, + * in order from most recently used to least recently used. + */ + public values(): Generator + + /** + * Inverse order version of `cache.values()` + * Return a generator yielding the values in the cache, + * in order from least recently used to most recently used. + */ + public rvalues(): Generator + + /** + * Return a generator yielding `[key, value]` pairs, + * in order from most recently used to least recently used. + */ + public entries(): Generator<[K, V]> + + /** + * Inverse order version of `cache.entries()` + * Return a generator yielding `[key, value]` pairs, + * in order from least recently used to most recently used. + */ + public rentries(): Generator<[K, V]> + + /** + * Iterating over the cache itself yields the same results as + * `cache.entries()` + */ + public [Symbol.iterator](): Iterator<[K, V]> + + /** + * Return an array of [key, entry] objects which can be passed to + * cache.load() + */ + public dump(): Array<[K, LRUCache.Entry]> + + /** + * Reset the cache and load in the items in entries in the order listed. + * Note that the shape of the resulting cache may be different if the + * same options are not used in both caches. + */ + public load( + cacheEntries: ReadonlyArray<[K, LRUCache.Entry]> + ): void + + /** + * Evict the least recently used item, returning its value or `undefined` + * if cache is empty. + */ + public pop(): V | undefined + + /** + * Deletes a key out of the cache. + * + * @deprecated since 7.0 use delete() instead + */ + public del(key: K): boolean + + /** + * Clear the cache entirely, throwing away all values. + * + * @deprecated since 7.0 use clear() instead + */ + public reset(): void + + /** + * Manually iterates over the entire cache proactively pruning old entries. + * + * @deprecated since 7.0 use purgeStale() instead + */ + public prune(): boolean + + /** + * since: 7.6.0 + */ + // tslint:disable-next-line:no-unnecessary-generics + public fetch( + key: K, + options?: LRUCache.FetchOptions + ): Promise + + /** + * since: 7.6.0 + */ + public getRemainingTTL(key: K): number +} + +declare namespace LRUCache { + type LRUMilliseconds = number + type DisposeReason = 'evict' | 'set' | 'delete' + + type SizeCalculator = (value: V, key: K) => number + type Disposer = ( + value: V, + key: K, + reason: DisposeReason + ) => void + type Fetcher = ( + key: K, + staleValue: V, + options: FetcherOptions + ) => Promise | V | void | undefined + + interface DeprecatedOptions { + /** + * alias for ttl + * + * @deprecated since 7.0 use options.ttl instead + */ + maxAge?: number + + /** + * alias for sizeCalculation + * + * @deprecated since 7.0 use options.sizeCalculation instead + */ + length?: SizeCalculator + + /** + * alias for allowStale + * + * @deprecated since 7.0 use options.allowStale instead + */ + stale?: boolean + } + + interface LimitedByCount { + /** + * The number of most recently used items to keep. + * Note that we may store fewer items than this if maxSize is hit. + */ + max: number + } + + interface LimitedBySize { + /** + * If you wish to track item size, you must provide a maxSize + * note that we still will only keep up to max *actual items*, + * if max is set, so size tracking may cause fewer than max items + * to be stored. At the extreme, a single item of maxSize size + * will cause everything else in the cache to be dropped when it + * is added. Use with caution! + * Note also that size tracking can negatively impact performance, + * though for most cases, only minimally. + */ + maxSize: number + + /** + * Function to calculate size of items. Useful if storing strings or + * buffers or other items where memory size depends on the object itself. + * Also note that oversized items do NOT immediately get dropped from + * the cache, though they will cause faster turnover in the storage. + */ + sizeCalculation?: SizeCalculator + } + + interface LimitedByTTL { + /** + * Max time in milliseconds for items to live in cache before they are + * considered stale. Note that stale items are NOT preemptively removed + * by default, and MAY live in the cache, contributing to its LRU max, + * long after they have expired. + * + * Also, as this cache is optimized for LRU/MRU operations, some of + * the staleness/TTL checks will reduce performance, as they will incur + * overhead by deleting items. + * + * Must be an integer number of ms, defaults to 0, which means "no TTL" + */ + ttl: number + + /** + * Boolean flag to tell the cache to not update the TTL when + * setting a new value for an existing key (ie, when updating a value + * rather than inserting a new value). Note that the TTL value is + * _always_ set (if provided) when adding a new entry into the cache. + * + * @default false + * @since 7.4.0 + */ + noUpdateTTL?: boolean + + /** + * Minimum amount of time in ms in which to check for staleness. + * Defaults to 1, which means that the current time is checked + * at most once per millisecond. + * + * Set to 0 to check the current time every time staleness is tested. + * (This reduces performance, and is theoretically unnecessary.) + * + * Setting this to a higher value will improve performance somewhat + * while using ttl tracking, albeit at the expense of keeping stale + * items around a bit longer than intended. + * + * @default 1 + * @since 7.1.0 + */ + ttlResolution?: number + + /** + * Preemptively remove stale items from the cache. + * Note that this may significantly degrade performance, + * especially if the cache is storing a large number of items. + * It is almost always best to just leave the stale items in + * the cache, and let them fall out as new items are added. + * + * Note that this means that allowStale is a bit pointless, + * as stale items will be deleted almost as soon as they expire. + * + * Use with caution! + * + * @default false + * @since 7.1.0 + */ + ttlAutopurge?: boolean + + /** + * Return stale items from cache.get() before disposing of them. + * Return stale values from cache.fetch() while performing a call + * to the `fetchMethod` in the background. + * + * @default false + */ + allowStale?: boolean + + /** + * Update the age of items on cache.get(), renewing their TTL + * + * @default false + */ + updateAgeOnGet?: boolean + + /** + * Do not delete stale items when they are retrieved with cache.get() + * Note that the get() return value will still be `undefined` unless + * allowStale is true. + * + * @default false + * @since 7.11.0 + */ + noDeleteOnStaleGet?: boolean + + /** + * Update the age of items on cache.has(), renewing their TTL + * + * @default false + */ + updateAgeOnHas?: boolean + } + + type SafetyBounds = + | LimitedByCount + | LimitedBySize + | LimitedByTTL + + // options shared by all three of the limiting scenarios + interface SharedOptions { + /** + * Function that is called on items when they are dropped from the cache. + * This can be handy if you want to close file descriptors or do other + * cleanup tasks when items are no longer accessible. Called with `key, + * value`. It's called before actually removing the item from the + * internal cache, so it is *NOT* safe to re-add them. + * Use `disposeAfter` if you wish to dispose items after they have been + * full removed, when it is safe to add them back to the cache. + */ + dispose?: Disposer + + /** + * The same as dispose, but called *after* the entry is completely + * removed and the cache is once again in a clean state. It is safe to + * add an item right back into the cache at this point. + * However, note that it is *very* easy to inadvertently create infinite + * recursion this way. + * + * @since 7.3.0 + */ + disposeAfter?: Disposer + + /** + * Set to true to suppress calling the dispose() function if the entry + * key is still accessible within the cache. + * This may be overridden by passing an options object to cache.set(). + * + * @default false + */ + noDisposeOnSet?: boolean + + /** + * `fetchMethod` Function that is used to make background asynchronous + * fetches. Called with `fetchMethod(key, staleValue)`. May return a + * Promise. + * + * If `fetchMethod` is not provided, then `cache.fetch(key)` is + * equivalent to `Promise.resolve(cache.get(key))`. + * + * @since 7.6.0 + */ + fetchMethod?: LRUCache.Fetcher + + /** + * Set to true to suppress the deletion of stale data when a + * `fetchMethod` throws an error or returns a rejected promise + * + * @default false + * @since 7.10.0 + */ + noDeleteOnFetchRejection?: boolean + + /** + * Set to any value in the constructor or fetch() options to + * pass arbitrary data to the fetch() method in the options.context + * field. + * + * @since 7.12.0 + */ + fetchContext?: any + } + + type Options = SharedOptions & + DeprecatedOptions & + SafetyBounds + + /** + * options which override the options set in the LRUCache constructor + * when making `cache.set()` calls. + */ + interface SetOptions { + /** + * A value for the size of the entry, prevents calls to + * `sizeCalculation` function. + */ + size?: number + sizeCalculation?: SizeCalculator + ttl?: number + start?: number + noDisposeOnSet?: boolean + noUpdateTTL?: boolean + } + + /** + * options which override the options set in the LRUCAche constructor + * when making `cache.has()` calls. + */ + interface HasOptions { + updateAgeOnHas?: boolean + } + + /** + * options which override the options set in the LRUCache constructor + * when making `cache.get()` calls. + */ + interface GetOptions { + allowStale?: boolean + updateAgeOnGet?: boolean + noDeleteOnStaleGet?: boolean + } + + /** + * options which override the options set in the LRUCache constructor + * when making `cache.peek()` calls. + */ + interface PeekOptions { + allowStale?: boolean + } + + interface FetcherFetchOptions { + allowStale?: boolean + updateAgeOnGet?: boolean + noDeleteOnStaleGet?: boolean + size?: number + sizeCalculation?: SizeCalculator + ttl?: number + noDisposeOnSet?: boolean + noUpdateTTL?: boolean + noDeleteOnFetchRejection?: boolean + } + + /** + * options which override the options set in the LRUCache constructor + * when making `cache.fetch()` calls. + * This is the union of GetOptions and SetOptions, plus + * `noDeleteOnFetchRejection`, `forceRefresh`, and `fetchContext` + */ + interface FetchOptions extends FetcherFetchOptions { + forceRefresh?: boolean + fetchContext?: any + } + + interface FetcherOptions { + signal: AbortSignal + options: FetcherFetchOptions + context: any + } + + interface Entry { + value: V + ttl?: number + size?: number + start?: number + } +} + +export = LRUCache diff --git a/deps/npm/node_modules/lru-cache/index.js b/deps/npm/node_modules/lru-cache/index.js index fb1a076fa3a..0a551c9d1d6 100644 --- a/deps/npm/node_modules/lru-cache/index.js +++ b/deps/npm/node_modules/lru-cache/index.js @@ -1,5 +1,9 @@ -const perf = typeof performance === 'object' && performance && - typeof performance.now === 'function' ? performance : Date +const perf = + typeof performance === 'object' && + performance && + typeof performance.now === 'function' + ? performance + : Date const hasAbortController = typeof AbortController === 'function' @@ -7,20 +11,30 @@ const hasAbortController = typeof AbortController === 'function' // this doesn't have nearly all the checks and whatnot that // actual AbortController/Signal has, but it's enough for // our purposes, and if used properly, behaves the same. -const AC = hasAbortController ? AbortController : Object.assign( - class AbortController { - constructor () { this.signal = new AC.AbortSignal } - abort () { - this.signal.dispatchEvent('abort') - } - }, - { - AbortSignal: class AbortSignal { - constructor () { +const AC = hasAbortController + ? AbortController + : class AbortController { + constructor() { + this.signal = new AS() + } + abort() { + this.signal.dispatchEvent('abort') + } + } + +const hasAbortSignal = typeof AbortSignal === 'function' +// Some polyfills put this on the AC class, not global +const hasACAbortSignal = typeof AC.AbortSignal === 'function' +const AS = hasAbortSignal + ? AbortSignal + : hasACAbortSignal + ? AC.AbortController + : class AbortSignal { + constructor() { this.aborted = false this._listeners = [] } - dispatchEvent (type) { + dispatchEvent(type) { if (type === 'abort') { this.aborted = true const e = { type, target: this } @@ -28,20 +42,18 @@ const AC = hasAbortController ? AbortController : Object.assign( this._listeners.forEach(f => f(e), this) } } - onabort () {} - addEventListener (ev, fn) { + onabort() {} + addEventListener(ev, fn) { if (ev === 'abort') { this._listeners.push(fn) } } - removeEventListener (ev, fn) { + removeEventListener(ev, fn) { if (ev === 'abort') { this._listeners = this._listeners.filter(f => f !== fn) } } } - } -) const warned = new Set() const deprecatedOption = (opt, instead) => { @@ -69,10 +81,10 @@ const deprecatedProperty = (field, instead) => { const emitWarning = (...a) => { typeof process === 'object' && - process && - typeof process.emitWarning === 'function' - ? process.emitWarning(...a) - : console.error(...a) + process && + typeof process.emitWarning === 'function' + ? process.emitWarning(...a) + : console.error(...a) } const shouldWarn = code => !warned.has(code) @@ -93,22 +105,28 @@ const isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n) * zeroes at init time is brutal when you get that big. * But why not be complete? * Maybe in the future, these limits will have expanded. */ -const getUintArray = max => !isPosInt(max) ? null -: max <= Math.pow(2, 8) ? Uint8Array -: max <= Math.pow(2, 16) ? Uint16Array -: max <= Math.pow(2, 32) ? Uint32Array -: max <= Number.MAX_SAFE_INTEGER ? ZeroArray -: null +const getUintArray = max => + !isPosInt(max) + ? null + : max <= Math.pow(2, 8) + ? Uint8Array + : max <= Math.pow(2, 16) + ? Uint16Array + : max <= Math.pow(2, 32) + ? Uint32Array + : max <= Number.MAX_SAFE_INTEGER + ? ZeroArray + : null class ZeroArray extends Array { - constructor (size) { + constructor(size) { super(size) this.fill(0) } } class Stack { - constructor (max) { + constructor(max) { if (max === 0) { return [] } @@ -116,16 +134,16 @@ class Stack { this.heap = new UintArray(max) this.length = 0 } - push (n) { + push(n) { this.heap[this.length++] = n } - pop () { + pop() { return this.heap[--this.length] } } class LRUCache { - constructor (options = {}) { + constructor(options = {}) { const { max = 0, ttl, @@ -141,15 +159,15 @@ class LRUCache { maxSize = 0, sizeCalculation, fetchMethod, + fetchContext, + noDeleteOnFetchRejection, + noDeleteOnStaleGet, } = options // deprecated options, don't trigger a warning for getting them if // the thing being passed in is another LRUCache we're copying. - const { - length, - maxAge, - stale, - } = options instanceof LRUCache ? {} : options + const { length, maxAge, stale } = + options instanceof LRUCache ? {} : options if (max !== 0 && !isPosInt(max)) { throw new TypeError('max option must be a nonnegative integer') @@ -165,7 +183,9 @@ class LRUCache { this.sizeCalculation = sizeCalculation || length if (this.sizeCalculation) { if (!this.maxSize) { - throw new TypeError('cannot set sizeCalculation without setting maxSize') + throw new TypeError( + 'cannot set sizeCalculation without setting maxSize' + ) } if (typeof this.sizeCalculation !== 'function') { throw new TypeError('sizeCalculation set to non-function') @@ -174,7 +194,16 @@ class LRUCache { this.fetchMethod = fetchMethod || null if (this.fetchMethod && typeof this.fetchMethod !== 'function') { - throw new TypeError('fetchMethod must be a function if specified') + throw new TypeError( + 'fetchMethod must be a function if specified' + ) + } + + this.fetchContext = fetchContext + if (!this.fetchMethod && fetchContext !== undefined) { + throw new TypeError( + 'cannot set fetchContext without fetchMethod' + ) } this.keyMap = new Map() @@ -200,37 +229,48 @@ class LRUCache { } this.noDisposeOnSet = !!noDisposeOnSet this.noUpdateTTL = !!noUpdateTTL + this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection if (this.maxSize !== 0) { if (!isPosInt(this.maxSize)) { - throw new TypeError('maxSize must be a positive integer if specified') + throw new TypeError( + 'maxSize must be a positive integer if specified' + ) } this.initializeSizeTracking() } this.allowStale = !!allowStale || !!stale + this.noDeleteOnStaleGet = !!noDeleteOnStaleGet this.updateAgeOnGet = !!updateAgeOnGet this.updateAgeOnHas = !!updateAgeOnHas - this.ttlResolution = isPosInt(ttlResolution) || ttlResolution === 0 - ? ttlResolution : 1 + this.ttlResolution = + isPosInt(ttlResolution) || ttlResolution === 0 + ? ttlResolution + : 1 this.ttlAutopurge = !!ttlAutopurge this.ttl = ttl || maxAge || 0 if (this.ttl) { if (!isPosInt(this.ttl)) { - throw new TypeError('ttl must be a positive integer if specified') + throw new TypeError( + 'ttl must be a positive integer if specified' + ) } this.initializeTTLTracking() } // do not allow completely unbounded caches if (this.max === 0 && this.ttl === 0 && this.maxSize === 0) { - throw new TypeError('At least one of max, maxSize, or ttl is required') + throw new TypeError( + 'At least one of max, maxSize, or ttl is required' + ) } if (!this.ttlAutopurge && !this.max && !this.maxSize) { const code = 'LRU_CACHE_UNBOUNDED' if (shouldWarn(code)) { warned.add(code) - const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' + + const msg = + 'TTL caching without ttlAutopurge, max, or maxSize can ' + 'result in unbounded memory consumption.' emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache) } @@ -247,16 +287,16 @@ class LRUCache { } } - getRemainingTTL (key) { + getRemainingTTL(key) { return this.has(key, { updateAgeOnHas: false }) ? Infinity : 0 } - initializeTTLTracking () { + initializeTTLTracking() { this.ttls = new ZeroArray(this.max) this.starts = new ZeroArray(this.max) - this.setItemTTL = (index, ttl) => { - this.starts[index] = ttl !== 0 ? perf.now() : 0 + this.setItemTTL = (index, ttl, start = perf.now()) => { + this.starts[index] = ttl !== 0 ? start : 0 this.ttls[index] = ttl if (ttl !== 0 && this.ttlAutopurge) { const t = setTimeout(() => { @@ -271,7 +311,7 @@ class LRUCache { } } - this.updateItemAge = (index) => { + this.updateItemAge = index => { this.starts[index] = this.ttls[index] !== 0 ? perf.now() : 0 } @@ -282,7 +322,10 @@ class LRUCache { const n = perf.now() if (this.ttlResolution > 0) { cachedNow = n - const t = setTimeout(() => cachedNow = 0, this.ttlResolution) + const t = setTimeout( + () => (cachedNow = 0), + this.ttlResolution + ) /* istanbul ignore else - not available on all platforms */ if (t.unref) { t.unref() @@ -291,28 +334,40 @@ class LRUCache { return n } - this.getRemainingTTL = (key) => { + this.getRemainingTTL = key => { const index = this.keyMap.get(key) if (index === undefined) { return 0 } - return this.ttls[index] === 0 || this.starts[index] === 0 ? Infinity - : ((this.starts[index] + this.ttls[index]) - (cachedNow || getNow())) + return this.ttls[index] === 0 || this.starts[index] === 0 + ? Infinity + : this.starts[index] + + this.ttls[index] - + (cachedNow || getNow()) } - this.isStale = (index) => { - return this.ttls[index] !== 0 && this.starts[index] !== 0 && - ((cachedNow || getNow()) - this.starts[index] > this.ttls[index]) + this.isStale = index => { + return ( + this.ttls[index] !== 0 && + this.starts[index] !== 0 && + (cachedNow || getNow()) - this.starts[index] > + this.ttls[index] + ) } } - updateItemAge (index) {} - setItemTTL (index, ttl) {} - isStale (index) { return false } + updateItemAge(index) {} + setItemTTL(index, ttl, start) {} + isStale(index) { + return false + } - initializeSizeTracking () { + initializeSizeTracking() { this.calculatedSize = 0 this.sizes = new ZeroArray(this.max) - this.removeItemSize = index => this.calculatedSize -= this.sizes[index] + this.removeItemSize = index => { + this.calculatedSize -= this.sizes[index] + this.sizes[index] = 0 + } this.requireSize = (k, v, size, sizeCalculation) => { if (!isPosInt(size)) { if (sizeCalculation) { @@ -321,15 +376,19 @@ class LRUCache { } size = sizeCalculation(v, k) if (!isPosInt(size)) { - throw new TypeError('sizeCalculation return invalid (expect positive integer)') + throw new TypeError( + 'sizeCalculation return invalid (expect positive integer)' + ) } } else { - throw new TypeError('invalid size value (must be positive integer)') + throw new TypeError( + 'invalid size value (must be positive integer)' + ) } } return size } - this.addItemSize = (index, v, k, size) => { + this.addItemSize = (index, size) => { this.sizes[index] = size const maxSize = this.maxSize - this.sizes[index] while (this.calculatedSize > maxSize) { @@ -338,15 +397,17 @@ class LRUCache { this.calculatedSize += this.sizes[index] } } - removeItemSize (index) {} - addItemSize (index, v, k, size) {} - requireSize (k, v, size, sizeCalculation) { + removeItemSize(index) {} + addItemSize(index, size) {} + requireSize(k, v, size, sizeCalculation) { if (size || sizeCalculation) { - throw new TypeError('cannot set size without setting maxSize on cache') + throw new TypeError( + 'cannot set size without setting maxSize on cache' + ) } } - *indexes ({ allowStale = this.allowStale } = {}) { + *indexes({ allowStale = this.allowStale } = {}) { if (this.size) { for (let i = this.tail; true; ) { if (!this.isValidIndex(i)) { @@ -364,7 +425,7 @@ class LRUCache { } } - *rindexes ({ allowStale = this.allowStale } = {}) { + *rindexes({ allowStale = this.allowStale } = {}) { if (this.size) { for (let i = this.head; true; ) { if (!this.isValidIndex(i)) { @@ -382,48 +443,48 @@ class LRUCache { } } - isValidIndex (index) { + isValidIndex(index) { return this.keyMap.get(this.keyList[index]) === index } - *entries () { + *entries() { for (const i of this.indexes()) { yield [this.keyList[i], this.valList[i]] } } - *rentries () { + *rentries() { for (const i of this.rindexes()) { yield [this.keyList[i], this.valList[i]] } } - *keys () { + *keys() { for (const i of this.indexes()) { yield this.keyList[i] } } - *rkeys () { + *rkeys() { for (const i of this.rindexes()) { yield this.keyList[i] } } - *values () { + *values() { for (const i of this.indexes()) { yield this.valList[i] } } - *rvalues () { + *rvalues() { for (const i of this.rindexes()) { yield this.valList[i] } } - [Symbol.iterator] () { + [Symbol.iterator]() { return this.entries() } - find (fn, getOptions = {}) { + find(fn, getOptions = {}) { for (const i of this.indexes()) { if (fn(this.valList[i], this.keyList[i], this)) { return this.get(this.keyList[i], getOptions) @@ -431,24 +492,24 @@ class LRUCache { } } - forEach (fn, thisp = this) { + forEach(fn, thisp = this) { for (const i of this.indexes()) { fn.call(thisp, this.valList[i], this.keyList[i], this) } } - rforEach (fn, thisp = this) { + rforEach(fn, thisp = this) { for (const i of this.rindexes()) { fn.call(thisp, this.valList[i], this.keyList[i], this) } } - get prune () { + get prune() { deprecatedMethod('prune', 'purgeStale') return this.purgeStale } - purgeStale () { + purgeStale() { let deleted = false for (const i of this.rindexes({ allowStale: true })) { if (this.isStale(i)) { @@ -459,14 +520,21 @@ class LRUCache { return deleted } - dump () { + dump() { const arr = [] - for (const i of this.indexes()) { + for (const i of this.indexes({ allowStale: true })) { const key = this.keyList[i] - const value = this.valList[i] + const v = this.valList[i] + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v const entry = { value } if (this.ttls) { entry.ttl = this.ttls[i] + // always dump the start relative to a portable timestamp + // it's ok for this to be a bit slow, it's a rare operation. + const age = perf.now() - this.starts[i] + entry.start = Math.floor(Date.now() - age) } if (this.sizes) { entry.size = this.sizes[i] @@ -476,23 +544,39 @@ class LRUCache { return arr } - load (arr) { + load(arr) { this.clear() for (const [key, entry] of arr) { + if (entry.start) { + // entry.start is a portable timestamp, but we may be using + // node's performance.now(), so calculate the offset. + // it's ok for this to be a bit slow, it's a rare operation. + const age = Date.now() - entry.start + entry.start = perf.now() - age + } this.set(key, entry.value, entry) } } - dispose (v, k, reason) {} + dispose(v, k, reason) {} - set (k, v, { - ttl = this.ttl, - noDisposeOnSet = this.noDisposeOnSet, - size = 0, - sizeCalculation = this.sizeCalculation, - noUpdateTTL = this.noUpdateTTL, - } = {}) { + set( + k, + v, + { + ttl = this.ttl, + start, + noDisposeOnSet = this.noDisposeOnSet, + size = 0, + sizeCalculation = this.sizeCalculation, + noUpdateTTL = this.noUpdateTTL, + } = {} + ) { size = this.requireSize(k, v, size, sizeCalculation) + // if the item doesn't fit, don't do anything + if (this.maxSize && size > this.maxSize) { + return this + } let index = this.size === 0 ? undefined : this.keyMap.get(k) if (index === undefined) { // addition @@ -503,8 +587,8 @@ class LRUCache { this.next[this.tail] = index this.prev[index] = this.tail this.tail = index - this.size ++ - this.addItemSize(index, v, k, size) + this.size++ + this.addItemSize(index, size) noUpdateTTL = false } else { // update @@ -522,7 +606,7 @@ class LRUCache { } this.removeItemSize(index) this.valList[index] = v - this.addItemSize(index, v, k, size) + this.addItemSize(index, size) } this.moveToTail(index) } @@ -530,7 +614,7 @@ class LRUCache { this.initializeTTLTracking() } if (!noUpdateTTL) { - this.setItemTTL(index, ttl) + this.setItemTTL(index, ttl, start) } if (this.disposeAfter) { while (this.disposed.length) { @@ -540,7 +624,7 @@ class LRUCache { return this } - newIndex () { + newIndex() { if (this.size === 0) { return this.tail } @@ -554,7 +638,7 @@ class LRUCache { return this.initialFill++ } - pop () { + pop() { if (this.size) { const val = this.valList[this.head] this.evict(true) @@ -562,7 +646,7 @@ class LRUCache { } } - evict (free) { + evict(free) { const head = this.head const k = this.keyList[head] const v = this.valList[head] @@ -583,11 +667,11 @@ class LRUCache { } this.head = this.next[head] this.keyMap.delete(k) - this.size -- + this.size-- return head } - has (k, { updateAgeOnHas = this.updateAgeOnHas } = {}) { + has(k, { updateAgeOnHas = this.updateAgeOnHas } = {}) { const index = this.keyMap.get(k) if (index !== undefined) { if (!this.isStale(index)) { @@ -601,14 +685,16 @@ class LRUCache { } // like get(), but without any LRU updating or TTL expiration - peek (k, { allowStale = this.allowStale } = {}) { + peek(k, { allowStale = this.allowStale } = {}) { const index = this.keyMap.get(k) if (index !== undefined && (allowStale || !this.isStale(index))) { - return this.valList[index] + const v = this.valList[index] + // either stale and allowed, or forcing a refresh of non-stale value + return this.isBackgroundFetch(v) ? v.__staleWhileFetching : v } } - backgroundFetch (k, index, options) { + backgroundFetch(k, index, options, context) { const v = index === undefined ? undefined : this.valList[index] if (this.isBackgroundFetch(v)) { return v @@ -617,15 +703,36 @@ class LRUCache { const fetchOpts = { signal: ac.signal, options, + context, } - const p = Promise.resolve(this.fetchMethod(k, v, fetchOpts)).then(v => { + const cb = v => { if (!ac.signal.aborted) { this.set(k, v, fetchOpts.options) } return v - }) + } + const eb = er => { + if (this.valList[index] === p) { + const del = + !options.noDeleteOnFetchRejection || + p.__staleWhileFetching === undefined + if (del) { + this.delete(k) + } else { + // still replace the *promise* with the stale value, + // since we are done with the promise at this point. + this.valList[index] = p.__staleWhileFetching + } + } + if (p.__returned === p) { + throw er + } + } + const pcall = res => res(this.fetchMethod(k, v, fetchOpts)) + const p = new Promise(pcall).then(cb, eb) p.__abortController = ac p.__staleWhileFetching = v + p.__returned = null if (index === undefined) { this.set(k, p, fetchOpts.options) index = this.keyMap.get(k) @@ -635,47 +742,76 @@ class LRUCache { return p } - isBackgroundFetch (p) { - return p && typeof p === 'object' && typeof p.then === 'function' && - Object.prototype.hasOwnProperty.call(p, '__staleWhileFetching') + isBackgroundFetch(p) { + return ( + p && + typeof p === 'object' && + typeof p.then === 'function' && + Object.prototype.hasOwnProperty.call( + p, + '__staleWhileFetching' + ) && + Object.prototype.hasOwnProperty.call(p, '__returned') && + (p.__returned === p || p.__returned === null) + ) } // this takes the union of get() and set() opts, because it does both - async fetch (k, { - allowStale = this.allowStale, - updateAgeOnGet = this.updateAgeOnGet, - ttl = this.ttl, - noDisposeOnSet = this.noDisposeOnSet, - size = 0, - sizeCalculation = this.sizeCalculation, - noUpdateTTL = this.noUpdateTTL, - } = {}) { + async fetch( + k, + { + // get options + allowStale = this.allowStale, + updateAgeOnGet = this.updateAgeOnGet, + noDeleteOnStaleGet = this.noDeleteOnStaleGet, + // set options + ttl = this.ttl, + noDisposeOnSet = this.noDisposeOnSet, + size = 0, + sizeCalculation = this.sizeCalculation, + noUpdateTTL = this.noUpdateTTL, + // fetch exclusive options + noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, + fetchContext = this.fetchContext, + forceRefresh = false, + } = {} + ) { if (!this.fetchMethod) { - return this.get(k, {allowStale, updateAgeOnGet}) + return this.get(k, { + allowStale, + updateAgeOnGet, + noDeleteOnStaleGet, + }) } const options = { allowStale, updateAgeOnGet, + noDeleteOnStaleGet, ttl, noDisposeOnSet, size, sizeCalculation, noUpdateTTL, + noDeleteOnFetchRejection, } let index = this.keyMap.get(k) if (index === undefined) { - return this.backgroundFetch(k, index, options) + const p = this.backgroundFetch(k, index, options, fetchContext) + return (p.__returned = p) } else { // in cache, maybe already fetching const v = this.valList[index] if (this.isBackgroundFetch(v)) { return allowStale && v.__staleWhileFetching !== undefined - ? v.__staleWhileFetching : v + ? v.__staleWhileFetching + : (v.__returned = v) } - if (!this.isStale(index)) { + // if we force a refresh, that means do NOT serve the cached value, + // unless we are already in the process of refreshing the cache. + if (!forceRefresh && !this.isStale(index)) { this.moveToTail(index) if (updateAgeOnGet) { this.updateItemAge(index) @@ -683,18 +819,23 @@ class LRUCache { return v } - // ok, it is stale, and not already fetching + // ok, it is stale or a forced refresh, and not already fetching. // refresh the cache. - const p = this.backgroundFetch(k, index, options) + const p = this.backgroundFetch(k, index, options, fetchContext) return allowStale && p.__staleWhileFetching !== undefined - ? p.__staleWhileFetching : p + ? p.__staleWhileFetching + : (p.__returned = p) } } - get (k, { - allowStale = this.allowStale, - updateAgeOnGet = this.updateAgeOnGet, - } = {}) { + get( + k, + { + allowStale = this.allowStale, + updateAgeOnGet = this.updateAgeOnGet, + noDeleteOnStaleGet = this.noDeleteOnStaleGet, + } = {} + ) { const index = this.keyMap.get(k) if (index !== undefined) { const value = this.valList[index] @@ -702,7 +843,9 @@ class LRUCache { if (this.isStale(index)) { // delete only if not an in-flight background fetch if (!fetching) { - this.delete(k) + if (!noDeleteOnStaleGet) { + this.delete(k) + } return allowStale ? value : undefined } else { return allowStale ? value.__staleWhileFetching : undefined @@ -723,12 +866,12 @@ class LRUCache { } } - connect (p, n) { + connect(p, n) { this.prev[n] = p this.next[p] = n } - moveToTail (index) { + moveToTail(index) { // if tail already, nothing to do // if head, move head to next[index] // else @@ -748,12 +891,12 @@ class LRUCache { } } - get del () { + get del() { deprecatedMethod('del', 'delete') return this.delete } - delete (k) { + delete(k) { let deleted = false if (this.size !== 0) { const index = this.keyMap.get(k) @@ -783,7 +926,7 @@ class LRUCache { this.next[this.prev[index]] = this.next[index] this.prev[this.next[index]] = this.prev[index] } - this.size -- + this.size-- this.free.push(index) } } @@ -796,7 +939,7 @@ class LRUCache { return deleted } - clear () { + clear() { for (const index of this.rindexes({ allowStale: true })) { const v = this.valList[index] if (this.isBackgroundFetch(v)) { @@ -833,19 +976,22 @@ class LRUCache { } } - get reset () { + get reset() { deprecatedMethod('reset', 'clear') return this.clear } - get length () { + get length() { deprecatedProperty('length', 'size') return this.size } - static get AbortController () { + static get AbortController() { return AC } + static get AbortSignal() { + return AS + } } module.exports = LRUCache diff --git a/deps/npm/node_modules/lru-cache/package.json b/deps/npm/node_modules/lru-cache/package.json index 5364b09d200..c3c62e0a325 100644 --- a/deps/npm/node_modules/lru-cache/package.json +++ b/deps/npm/node_modules/lru-cache/package.json @@ -1,43 +1,70 @@ { "name": "lru-cache", "description": "A cache object that deletes the least-recently-used items.", - "version": "7.9.0", + "version": "7.13.2", "author": "Isaac Z. Schlueter ", "keywords": [ "mru", "lru", "cache" ], + "sideEffects": false, "scripts": { "build": "", + "size": "size-limit", "test": "tap", "snap": "tap", - "size": "size-limit", "preversion": "npm test", "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags" + "prepublishOnly": "git push origin --follow-tags", + "format": "prettier --write ." }, "main": "index.js", "repository": "git://github.com/isaacs/node-lru-cache.git", "devDependencies": { "@size-limit/preset-small-lib": "^7.0.8", + "@types/node": "^17.0.31", + "@types/tap": "^15.0.6", "benchmark": "^2.1.4", - "clock-mock": "^1.0.4", + "c8": "^7.11.2", + "clock-mock": "^1.0.6", + "eslint-config-prettier": "^8.5.0", + "prettier": "^2.6.2", "size-limit": "^7.0.8", - "tap": "^15.1.6" + "tap": "^16.0.1", + "ts-node": "^10.7.0", + "tslib": "^2.4.0", + "typescript": "^4.6.4" }, "license": "ISC", "files": [ - "index.js" + "index.js", + "index.d.ts" ], "engines": { "node": ">=12" }, + "prettier": { + "semi": false, + "printWidth": 70, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, "tap": { - "coverage-map": "map.js", + "nyc-arg": [ + "--include=index.js" + ], "node-arg": [ - "--expose-gc" - ] + "--expose-gc", + "--require", + "ts-node/register" + ], + "ts": false }, "size-limit": [ { diff --git a/deps/npm/node_modules/make-fetch-happen/lib/agent.js b/deps/npm/node_modules/make-fetch-happen/lib/agent.js index f64644ff611..dd68492ed7e 100644 --- a/deps/npm/node_modules/make-fetch-happen/lib/agent.js +++ b/deps/npm/node_modules/make-fetch-happen/lib/agent.js @@ -171,7 +171,7 @@ const getPath = u => u.pathname + u.search + u.hash const HttpProxyAgent = require('http-proxy-agent') const HttpsProxyAgent = require('https-proxy-agent') -const SocksProxyAgent = require('socks-proxy-agent') +const { SocksProxyAgent } = require('socks-proxy-agent') module.exports.getProxy = getProxy function getProxy (proxyUrl, opts, isHttps) { // our current proxy agents do not support an overridden dns lookup method, so will not @@ -198,6 +198,9 @@ function getProxy (proxyUrl, opts, isHttps) { return new HttpsProxyAgent(popts) } } else if (proxyUrl.protocol.startsWith('socks')) { + // socks-proxy-agent uses hostname not host + popts.hostname = popts.host + delete popts.host return new SocksProxyAgent(popts) } else { throw Object.assign( diff --git a/deps/npm/node_modules/make-fetch-happen/lib/cache/entry.js b/deps/npm/node_modules/make-fetch-happen/lib/cache/entry.js index 7a7572ba030..dba89d715d8 100644 --- a/deps/npm/node_modules/make-fetch-happen/lib/cache/entry.js +++ b/deps/npm/node_modules/make-fetch-happen/lib/cache/entry.js @@ -35,6 +35,7 @@ const KEEP_RESPONSE_HEADERS = [ 'etag', 'expires', 'last-modified', + 'link', 'location', 'pragma', 'vary', @@ -287,6 +288,7 @@ class CacheEntry { // stick a flag on here so downstream users will know if they can expect integrity events tee.pipe(cacheStream) // TODO if the cache write fails, log a warning but return the response anyway + // eslint-disable-next-line promise/catch-or-return cacheStream.promise().then(cacheWriteResolve, cacheWriteReject) body.unshift(tee) body.unshift(this.response.body) diff --git a/deps/npm/node_modules/make-fetch-happen/lib/remote.js b/deps/npm/node_modules/make-fetch-happen/lib/remote.js index 763fc0d4880..068c73a8a7a 100644 --- a/deps/npm/node_modules/make-fetch-happen/lib/remote.js +++ b/deps/npm/node_modules/make-fetch-happen/lib/remote.js @@ -52,7 +52,11 @@ const remoteFetch = (request, options) => { if (_opts.integrity && res.status === 200) { // we got a 200 response and the user has specified an expected // integrity value, so wrap the response in an ssri stream to verify it - const integrityStream = ssri.integrityStream({ integrity: _opts.integrity }) + const integrityStream = ssri.integrityStream({ + algorithms: _opts.algorithms, + integrity: _opts.integrity, + size: _opts.size, + }) const pipeline = new CachingMinipassPipeline({ events: ['integrity', 'size'], }, res.body, integrityStream) diff --git a/deps/npm/node_modules/make-fetch-happen/package.json b/deps/npm/node_modules/make-fetch-happen/package.json index 2e6153b99fa..fc491d1152e 100644 --- a/deps/npm/node_modules/make-fetch-happen/package.json +++ b/deps/npm/node_modules/make-fetch-happen/package.json @@ -1,6 +1,6 @@ { "name": "make-fetch-happen", - "version": "10.1.5", + "version": "10.2.1", "description": "Opinionated, caching, retrying fetch client", "main": "lib/index.js", "files": [ @@ -50,7 +50,7 @@ "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.1.1", + "socks-proxy-agent": "^7.0.0", "ssri": "^9.0.0" }, "devDependencies": { @@ -69,7 +69,8 @@ "tap": { "color": 1, "files": "test/*.js", - "check-coverage": true + "check-coverage": true, + "timeout": 60 }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", diff --git a/deps/npm/node_modules/minimatch/minimatch.js b/deps/npm/node_modules/minimatch/minimatch.js index f3b491dd107..71c96a1fb71 100644 --- a/deps/npm/node_modules/minimatch/minimatch.js +++ b/deps/npm/node_modules/minimatch/minimatch.js @@ -168,6 +168,11 @@ class Minimatch { this.options = options this.set = [] this.pattern = pattern + this.windowsPathsNoEscape = !!options.windowsPathsNoEscape || + options.allowWindowsEscape === false + if (this.windowsPathsNoEscape) { + this.pattern = this.pattern.replace(/\\/g, '/') + } this.regexp = null this.negate = false this.comment = false diff --git a/deps/npm/node_modules/minimatch/package.json b/deps/npm/node_modules/minimatch/package.json index 2cc856968c0..8e1a84285d3 100644 --- a/deps/npm/node_modules/minimatch/package.json +++ b/deps/npm/node_modules/minimatch/package.json @@ -2,7 +2,7 @@ "author": "Isaac Z. Schlueter (http://blog.izs.me)", "name": "minimatch", "description": "a glob matcher in javascript", - "version": "5.0.1", + "version": "5.1.0", "repository": { "type": "git", "url": "git://github.com/isaacs/minimatch.git" diff --git a/deps/npm/node_modules/minipass-fetch/lib/body.js b/deps/npm/node_modules/minipass-fetch/lib/body.js index c7ffa5babcb..58893309e63 100644 --- a/deps/npm/node_modules/minipass-fetch/lib/body.js +++ b/deps/npm/node_modules/minipass-fetch/lib/body.js @@ -10,7 +10,9 @@ const FetchError = require('./fetch-error.js') let convert try { convert = require('encoding').convert -} catch (e) {} +} catch (e) { + // defer error until textConverted is called +} const INTERNALS = Symbol('Body internals') const CONSUME_BODY = Symbol('consumeBody') @@ -69,16 +71,16 @@ class Body { )) } - json () { - return this[CONSUME_BODY]().then(buf => { - try { - return JSON.parse(buf.toString()) - } catch (er) { - return Promise.reject(new FetchError( - `invalid json response body at ${ - this.url} reason: ${er.message}`, 'invalid-json')) - } - }) + async json () { + try { + const buf = await this[CONSUME_BODY]() + return JSON.parse(buf.toString()) + } catch (er) { + throw new FetchError( + `invalid json response body at ${this.url} reason: ${er.message}`, + 'invalid-json' + ) + } } text () { diff --git a/deps/npm/node_modules/minipass-fetch/package.json b/deps/npm/node_modules/minipass-fetch/package.json index 1f663b9245d..b47077adc11 100644 --- a/deps/npm/node_modules/minipass-fetch/package.json +++ b/deps/npm/node_modules/minipass-fetch/package.json @@ -1,6 +1,6 @@ { "name": "minipass-fetch", - "version": "2.1.0", + "version": "2.1.1", "description": "An implementation of window.fetch in Node.js using Minipass streams", "license": "MIT", "main": "lib/index.js", @@ -23,10 +23,11 @@ }, "devDependencies": { "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.1.2", + "@npmcli/template-oss": "3.5.0", "@ungap/url-search-params": "^0.2.2", "abort-controller": "^3.0.0", "abortcontroller-polyfill": "~1.7.3", + "encoding": "^0.1.13", "form-data": "^4.0.0", "nock": "^13.2.4", "parted": "^0.1.1", @@ -61,6 +62,6 @@ "author": "GitHub Inc.", "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.1.2" + "version": "3.5.0" } } diff --git a/deps/npm/node_modules/minipass-sized/package-lock.json b/deps/npm/node_modules/minipass-sized/package-lock.json deleted file mode 100644 index 944b285252b..00000000000 --- a/deps/npm/node_modules/minipass-sized/package-lock.json +++ /dev/null @@ -1,3464 +0,0 @@ -{ - "name": "minipass-sized", - "version": "1.0.3", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.0.tgz", - "integrity": "sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA==", - "dev": true, - "requires": { - "@babel/types": "^7.6.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.0.tgz", - "integrity": "sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ==", - "dev": true - }, - "@babel/runtime": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", - "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/template": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", - "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.0" - } - }, - "@babel/traverse": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.0.tgz", - "integrity": "sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", - "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.0.tgz", - "integrity": "sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arg": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", - "integrity": "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "async-hook-domain": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-1.1.0.tgz", - "integrity": "sha512-NH7V97d1yCbIanu2oDLyPT2GFNct0esPeJyRfkk8J5hTztHVSQp4UiNfL2O42sCA9XZPU8OgHvzOmt9ewBhVqA==", - "dev": true, - "requires": { - "source-map-support": "^0.5.11" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "bind-obj-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz", - "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" - }, - "dependencies": { - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.1.1.tgz", - "integrity": "sha512-df4o16uZmMHzVQwECZRHwfguOt5ixpuQVaZHjYMvYisgKhE+JXwcj/Tcr3+3bu/XeOJQ9ycYmzu7Mv8XrGxJDQ==", - "dev": true, - "requires": { - "anymatch": "^3.1.0", - "braces": "^3.0.2", - "fsevents": "^2.0.6", - "glob-parent": "^5.0.0", - "is-binary-path": "^2.1.0", - "is-glob": "^4.0.1", - "normalize-path": "^3.0.0", - "readdirp": "^3.1.1" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true, - "optional": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "coveralls": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.6.tgz", - "integrity": "sha512-Pgh4v3gCI4T/9VijVrm8Ym5v0OgjvGLKj3zTUwkvsCiwqae/p6VLzpsFNjQS2i6ewV7ef+DjFJ5TSKxYt/mCrA==", - "dev": true, - "requires": { - "growl": "~> 1.10.0", - "js-yaml": "^3.13.1", - "lcov-parse": "^0.0.10", - "log-driver": "^1.2.7", - "minimist": "^1.2.0", - "request": "^2.86.0" - } - }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", - "dev": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", - "dev": true - }, - "flow-parser": { - "version": "0.108.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.108.0.tgz", - "integrity": "sha512-Ug8VuwlyDIZq5Xgrf+T7XLpKydhqYyNd8lmFtf7PZbu90T5LL+FeHjWzxyrBn35RCCZMw7pXrjCrHOSs+2zXyg==", - "dev": true - }, - "flow-remove-types": { - "version": "2.108.0", - "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.108.0.tgz", - "integrity": "sha512-cbYe0AijNVlc6V1Xx99fNqQtRMJ+xbQwG5rQtcheFQiBPO6b6VwvhMs/OelJvpO+YUTz49IhFKzoZGj5xm74PA==", - "dev": true, - "requires": { - "flow-parser": "^0.108.0", - "pirates": "^3.0.2", - "vlq": "^0.2.1" - } - }, - "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", - "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", - "dev": true, - "optional": true - }, - "function-loop": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz", - "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "handlebars": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.2.1.tgz", - "integrity": "sha512-bqPIlDk06UWbVEIFoYj+LVo42WhK96J+b25l7hbFDpxrOXMphFM3fNIm+cluwg4Pk2jiLjWU5nHQY7igGE75NQ==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", - "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-processinfo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-1.0.0.tgz", - "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^6.0.5", - "istanbul-lib-coverage": "^2.0.3", - "rimraf": "^2.6.3", - "uuid": "^3.3.2" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", - "dev": true, - "requires": { - "handlebars": "^4.1.2" - } - }, - "jackspeak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.0.tgz", - "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==", - "dev": true, - "requires": { - "cliui": "^4.1.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "minipass": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.0.0.tgz", - "integrity": "sha512-FKNU4XrAPDX0+ynwns7njVu4RolyG1mUKSlT6n6GwGXLtYSYh2Znc0S83Rl6zEr1zgFfXvAzIBabnmItm+n19g==", - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nyc": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", - "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "caching-transform": "^3.0.2", - "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", - "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "own-or": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", - "dev": true - }, - "own-or-env": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", - "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==", - "dev": true, - "requires": { - "own-or": "^1.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", - "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pirates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz", - "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "optional": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", - "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - } - } - }, - "readdirp": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.2.tgz", - "integrity": "sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", - "dev": true - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawn-wrap": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", - "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - } - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tap": { - "version": "14.6.4", - "resolved": "https://registry.npmjs.org/tap/-/tap-14.6.4.tgz", - "integrity": "sha512-qYO/ZlQumbYzibH+wCVfkrNAomtBhKcKvMHWAMaucHrTBzZGHCmLR/WmRhb1khOKN5gzxMbCpEct3GQIKYXRlw==", - "dev": true, - "requires": { - "async-hook-domain": "^1.1.0", - "bind-obj-methods": "^2.0.0", - "browser-process-hrtime": "^1.0.0", - "capture-stack-trace": "^1.0.0", - "chokidar": "^3.0.2", - "color-support": "^1.1.0", - "coveralls": "^3.0.6", - "diff": "^4.0.1", - "esm": "^3.2.25", - "findit": "^2.0.0", - "flow-remove-types": "^2.107.0", - "foreground-child": "^1.3.3", - "fs-exists-cached": "^1.0.0", - "function-loop": "^1.0.2", - "glob": "^7.1.4", - "import-jsx": "^2.0.0", - "ink": "^2.3.0", - "isexe": "^2.0.0", - "istanbul-lib-processinfo": "^1.0.0", - "jackspeak": "^1.4.0", - "minipass": "^2.5.1", - "mkdirp": "^0.5.1", - "nyc": "^14.1.1", - "opener": "^1.5.1", - "own-or": "^1.0.0", - "own-or-env": "^1.0.1", - "react": "^16.9.0", - "rimraf": "^2.7.1", - "signal-exit": "^3.0.0", - "source-map-support": "^0.5.13", - "stack-utils": "^1.0.2", - "tap-mocha-reporter": "^4.0.1", - "tap-parser": "^9.3.3", - "tap-yaml": "^1.0.0", - "tcompare": "^2.3.0", - "treport": "^0.4.0", - "trivial-deferred": "^1.0.1", - "ts-node": "^8.3.0", - "typescript": "^3.6.3", - "which": "^1.3.1", - "write-file-atomic": "^3.0.0", - "yaml": "^1.6.0", - "yapool": "^1.0.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.5", - "bundled": true, - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.2", - "bundled": true, - "dev": true - } - } - }, - "@types/prop-types": { - "version": "15.7.1", - "bundled": true, - "dev": true - }, - "@types/react": { - "version": "16.8.22", - "bundled": true, - "dev": true, - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "bundled": true, - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "ansicolors": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "arrify": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "auto-bind": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "@types/react": "^16.8.12" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "bundled": true, - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.1", - "bundled": true, - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - } - } - }, - "babel-helper-builder-react-jsx": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "esutils": "^2.0.2" - } - }, - "babel-helpers": { - "version": "6.24.1", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "bundled": true, - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "bundled": true, - "dev": true - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-react-jsx": { - "version": "6.24.1", - "bundled": true, - "dev": true, - "requires": { - "babel-helper-builder-react-jsx": "^6.24.1", - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-register": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "bundled": true, - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "caller-callsite": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cardinal": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "chalk": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "ci-info": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-truncate": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "slice-ansi": "^1.0.0", - "string-width": "^2.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "bundled": true, - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "core-js": { - "version": "2.6.5", - "bundled": true, - "dev": true - }, - "csstype": { - "version": "2.6.5", - "bundled": true, - "dev": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "detect-indent": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "bundled": true, - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "esprima": { - "version": "4.0.1", - "bundled": true, - "dev": true - }, - "esutils": { - "version": "2.0.2", - "bundled": true, - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "globals": { - "version": "9.18.0", - "bundled": true, - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "home-or-tmp": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "import-jsx": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "babel-core": "^6.25.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-object-rest-spread": "^6.23.0", - "babel-plugin-transform-react-jsx": "^6.24.1", - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "ink": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "requires": { - "@types/react": "^16.8.6", - "arrify": "^1.0.1", - "auto-bind": "^2.0.0", - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "cli-truncate": "^1.1.0", - "is-ci": "^2.0.0", - "lodash.throttle": "^4.1.1", - "log-update": "^3.0.0", - "prop-types": "^15.6.2", - "react-reconciler": "^0.20.0", - "scheduler": "^0.13.2", - "signal-exit": "^3.0.2", - "slice-ansi": "^1.0.0", - "string-length": "^2.0.0", - "widest-line": "^2.0.0", - "wrap-ansi": "^5.0.0", - "yoga-layout-prebuilt": "^1.9.3" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "string-width": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "invariant": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-ci": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-finite": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "jsesc": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "json5": { - "version": "0.5.1", - "bundled": true, - "dev": true - }, - "lodash": { - "version": "4.17.14", - "bundled": true, - "dev": true - }, - "lodash.throttle": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "log-update": { - "version": "3.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "cli-cursor": "^2.1.0", - "wrap-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "string-width": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minipass": { - "version": "2.5.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - } - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "onetime": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "bundled": true, - "dev": true - } - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "private": { - "version": "0.1.8", - "bundled": true, - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "punycode": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "react": { - "version": "16.9.0", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-is": { - "version": "16.8.6", - "bundled": true, - "dev": true - }, - "react-reconciler": { - "version": "0.20.4", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - } - }, - "redeyed": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "esprima": "~4.0.0" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "bundled": true, - "dev": true - }, - "repeating": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "scheduler": { - "version": "0.13.6", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "slash": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "string-length": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "tap-parser": { - "version": "9.3.3", - "bundled": true, - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "minipass": "^2.2.0", - "tap-yaml": "^1.0.0" - } - }, - "tap-yaml": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "yaml": "^1.5.0" - } - }, - "to-fast-properties": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "treport": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "requires": { - "cardinal": "^2.1.1", - "chalk": "^2.4.2", - "import-jsx": "^2.0.0", - "ink": "^2.1.1", - "ms": "^2.1.1", - "react": "^16.8.6", - "string-length": "^2.0.0", - "tap-parser": "^9.3.2", - "unicode-length": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "unicode-length": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "punycode": "^2.0.0", - "strip-ansi": "^3.0.1" - } - } - } - }, - "trim-right": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "widest-line": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "yaml": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/runtime": "^7.4.5" - } - }, - "yoga-layout-prebuilt": { - "version": "1.9.3", - "bundled": true, - "dev": true - } - } - }, - "tap-mocha-reporter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-4.0.1.tgz", - "integrity": "sha512-/KfXaaYeSPn8qBi5Be8WSIP3iKV83s2uj2vzImJAXmjNu22kzqZ+1Dv1riYWa53sPCiyo1R1w1jbJrftF8SpcQ==", - "dev": true, - "requires": { - "color-support": "^1.1.0", - "debug": "^2.1.3", - "diff": "^1.3.2", - "escape-string-regexp": "^1.0.3", - "glob": "^7.0.5", - "readable-stream": "^2.1.5", - "tap-parser": "^8.0.0", - "tap-yaml": "0 || 1", - "unicode-length": "^1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "tap-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-8.1.0.tgz", - "integrity": "sha512-GgOzgDwThYLxhVR83RbS1JUR1TxcT+jfZsrETgPAvFdr12lUOnuvrHOBaUQgpkAp6ZyeW6r2Nwd91t88M0ru3w==", - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "minipass": "^2.2.0", - "tap-yaml": "0 || 1" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "tap-yaml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", - "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", - "dev": true, - "requires": { - "yaml": "^1.5.0" - } - }, - "tcompare": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-2.3.0.tgz", - "integrity": "sha512-fAfA73uFtFGybWGt4+IYT6UPLYVZQ4NfsP+IXEZGY0vh8e2IF7LVKafcQNMRBLqP0wzEA65LM9Tqj+FSmO8GLw==", - "dev": true - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "trivial-deferred": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", - "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", - "dev": true - }, - "ts-node": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.4.1.tgz", - "integrity": "sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.3.tgz", - "integrity": "sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==", - "dev": true - }, - "uglify-js": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", - "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.0", - "source-map": "~0.6.1" - } - }, - "unicode-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", - "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", - "dev": true, - "requires": { - "punycode": "^1.3.2", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "optional": true - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.0.tgz", - "integrity": "sha512-EIgkf60l2oWsffja2Sf2AL384dx328c0B+cIYPTQq5q2rOYuDV00/iPFBOUiDKKwKMOhkymH8AidPaRvzfxY+Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yaml": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.6.0.tgz", - "integrity": "sha512-iZfse3lwrJRoSlfs/9KQ9iIXxs9++RvBFVzAqbbBiFT+giYtyanevreF9r61ZTbGMgWQBxAua3FzJiniiJXWWw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.4.5" - } - }, - "yapool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", - "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", - "dev": true - }, - "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/deps/npm/node_modules/minipass/LICENSE b/deps/npm/node_modules/minipass/LICENSE index 20a47625409..bf1dece2e1f 100644 --- a/deps/npm/node_modules/minipass/LICENSE +++ b/deps/npm/node_modules/minipass/LICENSE @@ -1,6 +1,6 @@ The ISC License -Copyright (c) npm, Inc. and Contributors +Copyright (c) 2017-2022 npm, Inc., Isaac Z. Schlueter, and Contributors Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above diff --git a/deps/npm/node_modules/minipass/index.d.ts b/deps/npm/node_modules/minipass/index.d.ts new file mode 100644 index 00000000000..edbef548248 --- /dev/null +++ b/deps/npm/node_modules/minipass/index.d.ts @@ -0,0 +1,149 @@ +/// +import { EventEmitter } from 'events' +import { Stream } from 'stream' + +export type Encoding = BufferEncoding | 'buffer' | null + +interface Writable extends EventEmitter { + end(): any + write(chunk: any, ...args: any[]): any +} + +interface Readable extends EventEmitter { + pause(): any + resume(): any + pipe(): any +} + +interface Pipe { + src: Minipass + dest: Writable + opts: PipeOptions +} + +type DualIterable = Iterable & AsyncIterable + +type ContiguousData = Buffer | ArrayBufferLike | ArrayBufferView | string + +type BufferOrString = Buffer | string + +export default class Minipass< + RType extends any = Buffer, + WType extends any = RType extends BufferOrString ? ContiguousData : RType + > + extends Stream + implements DualIterable +{ + static isStream(stream: any): stream is Readable | Writable + + readonly bufferLength: number + readonly flowing: boolean + readonly writable: boolean + readonly readable: boolean + readonly paused: boolean + readonly emittedEnd: boolean + readonly destroyed: boolean + + /** + * Not technically private or readonly, but not safe to mutate. + */ + private readonly buffer: RType[] + private readonly pipes: Pipe[] + + /** + * Technically writable, but mutating it can change the type, + * so is not safe to do in TypeScript. + */ + readonly objectMode: boolean + async: boolean + + /** + * Note: encoding is not actually read-only, and setEncoding(enc) + * exists. However, this type definition will insist that TypeScript + * programs declare the type of a Minipass stream up front, and if + * that type is string, then an encoding MUST be set in the ctor. If + * the type is Buffer, then the encoding must be missing, or set to + * 'buffer' or null. If the type is anything else, then objectMode + * must be set in the constructor options. So there is effectively + * no allowed way that a TS program can set the encoding after + * construction, as doing so will destroy any hope of type safety. + * TypeScript does not provide many options for changing the type of + * an object at run-time, which is what changing the encoding does. + */ + readonly encoding: Encoding + // setEncoding(encoding: Encoding): void + + // Options required if not reading buffers + constructor( + ...args: RType extends Buffer + ? [] | [Options] + : [Options] + ) + + write(chunk: WType, cb?: () => void): boolean + write(chunk: WType, encoding?: Encoding, cb?: () => void): boolean + read(size?: number): RType + end(cb?: () => void): this + end(chunk: any, cb?: () => void): this + end(chunk: any, encoding?: Encoding, cb?: () => void): this + pause(): void + resume(): void + promise(): Promise + collect(): Promise + + concat(): RType extends BufferOrString ? Promise : never + destroy(er?: any): void + pipe(dest: W, opts?: PipeOptions): W + unpipe(dest: W): void + + /** + * alias for on() + */ + addEventHandler(event: string, listener: (...args: any[]) => any): this + + on(event: string, listener: (...args: any[]) => any): this + on(event: 'data', listener: (chunk: RType) => any): this + on(event: 'error', listener: (error: any) => any): this + on( + event: + | 'readable' + | 'drain' + | 'resume' + | 'end' + | 'prefinish' + | 'finish' + | 'close', + listener: () => any + ): this + + [Symbol.iterator](): Iterator + [Symbol.asyncIterator](): AsyncIterator +} + +interface StringOptions { + encoding: BufferEncoding + objectMode?: boolean + async?: boolean +} + +interface BufferOptions { + encoding?: null | 'buffer' + objectMode?: boolean + async?: boolean +} + +interface ObjectModeOptions { + objectMode: true + async?: boolean +} + +export declare interface PipeOptions { + end?: boolean + proxyErrors?: boolean +} + +export declare type Options = T extends string + ? StringOptions + : T extends Buffer + ? BufferOptions + : ObjectModeOptions diff --git a/deps/npm/node_modules/minipass/index.js b/deps/npm/node_modules/minipass/index.js index 1835dd9bcf5..e8797aab6cc 100644 --- a/deps/npm/node_modules/minipass/index.js +++ b/deps/npm/node_modules/minipass/index.js @@ -5,7 +5,6 @@ const proc = typeof process === 'object' && process ? process : { } const EE = require('events') const Stream = require('stream') -const Yallist = require('yallist') const SD = require('string_decoder').StringDecoder const EOF = Symbol('EOF') @@ -27,6 +26,12 @@ const BUFFERPUSH = Symbol('bufferPush') const BUFFERSHIFT = Symbol('bufferShift') const OBJECTMODE = Symbol('objectMode') const DESTROYED = Symbol('destroyed') +const EMITDATA = Symbol('emitData') +const EMITEND = Symbol('emitEnd') +const EMITEND2 = Symbol('emitEnd2') +const ASYNC = Symbol('async') + +const defer = fn => Promise.resolve().then(fn) // TODO remove when Node v8 support drops const doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1' @@ -51,14 +56,46 @@ const isArrayBuffer = b => b instanceof ArrayBuffer || const isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b) +class Pipe { + constructor (src, dest, opts) { + this.src = src + this.dest = dest + this.opts = opts + this.ondrain = () => src[RESUME]() + dest.on('drain', this.ondrain) + } + unpipe () { + this.dest.removeListener('drain', this.ondrain) + } + // istanbul ignore next - only here for the prototype + proxyErrors () {} + end () { + this.unpipe() + if (this.opts.end) + this.dest.end() + } +} + +class PipeProxyErrors extends Pipe { + unpipe () { + this.src.removeListener('error', this.proxyErrors) + super.unpipe() + } + constructor (src, dest, opts) { + super(src, dest, opts) + this.proxyErrors = er => dest.emit('error', er) + src.on('error', this.proxyErrors) + } +} + module.exports = class Minipass extends Stream { constructor (options) { super() this[FLOWING] = false // whether we're explicitly paused this[PAUSED] = false - this.pipes = new Yallist() - this.buffer = new Yallist() + this.pipes = [] + this.buffer = [] this[OBJECTMODE] = options && options.objectMode || false if (this[OBJECTMODE]) this[ENCODING] = null @@ -66,6 +103,7 @@ module.exports = class Minipass extends Stream { this[ENCODING] = options && options.encoding || null if (this[ENCODING] === 'buffer') this[ENCODING] = null + this[ASYNC] = options && !!options.async || false this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null this[EOF] = false this[EMITTED_END] = false @@ -105,6 +143,9 @@ module.exports = class Minipass extends Stream { get objectMode () { return this[OBJECTMODE] } set objectMode (om) { this[OBJECTMODE] = this[OBJECTMODE] || !!om } + get ['async'] () { return this[ASYNC] } + set ['async'] (a) { this[ASYNC] = this[ASYNC] || !!a } + write (chunk, encoding, cb) { if (this[EOF]) throw new Error('write after end') @@ -123,6 +164,8 @@ module.exports = class Minipass extends Stream { if (!encoding) encoding = 'utf8' + const fn = this[ASYNC] ? defer : f => f() + // convert array buffers and typed array views into buffers // at some point in the future, we may want to do the opposite! // leave strings and buffers as-is @@ -137,19 +180,40 @@ module.exports = class Minipass extends Stream { this.objectMode = true } - // this ensures at this point that the chunk is a buffer or string + // handle object mode up front, since it's simpler + // this yields better performance, fewer checks later. + if (this[OBJECTMODE]) { + /* istanbul ignore if - maybe impossible? */ + if (this.flowing && this[BUFFERLENGTH] !== 0) + this[FLUSH](true) + + if (this.flowing) + this.emit('data', chunk) + else + this[BUFFERPUSH](chunk) + + if (this[BUFFERLENGTH] !== 0) + this.emit('readable') + + if (cb) + fn(cb) + + return this.flowing + } + + // at this point the chunk is a buffer or string // don't buffer it up or send it to the decoder - if (!this.objectMode && !chunk.length) { + if (!chunk.length) { if (this[BUFFERLENGTH] !== 0) this.emit('readable') if (cb) - cb() + fn(cb) return this.flowing } // fast-path writing strings of same encoding to a stream with // an empty buffer, skipping the buffer/decoder dance - if (typeof chunk === 'string' && !this[OBJECTMODE] && + if (typeof chunk === 'string' && // unless it is a string already ready for us to use !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) { chunk = Buffer.from(chunk, encoding) @@ -158,27 +222,20 @@ module.exports = class Minipass extends Stream { if (Buffer.isBuffer(chunk) && this[ENCODING]) chunk = this[DECODER].write(chunk) - if (this.flowing) { - // if we somehow have something in the buffer, but we think we're - // flowing, then we need to flush all that out first, or we get - // chunks coming in out of order. Can't emit 'drain' here though, - // because we're mid-write, so that'd be bad. - if (this[BUFFERLENGTH] !== 0) - this[FLUSH](true) + // Note: flushing CAN potentially switch us into not-flowing mode + if (this.flowing && this[BUFFERLENGTH] !== 0) + this[FLUSH](true) - // if we are still flowing after flushing the buffer we can emit the - // chunk otherwise we have to buffer it. - this.flowing - ? this.emit('data', chunk) - : this[BUFFERPUSH](chunk) - } else + if (this.flowing) + this.emit('data', chunk) + else this[BUFFERPUSH](chunk) if (this[BUFFERLENGTH] !== 0) this.emit('readable') if (cb) - cb() + fn(cb) return this.flowing } @@ -187,35 +244,31 @@ module.exports = class Minipass extends Stream { if (this[DESTROYED]) return null - try { - if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) - return null + if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) { + this[MAYBE_EMIT_END]() + return null + } - if (this[OBJECTMODE]) - n = null - - if (this.buffer.length > 1 && !this[OBJECTMODE]) { - if (this.encoding) - this.buffer = new Yallist([ - Array.from(this.buffer).join('') - ]) - else - this.buffer = new Yallist([ - Buffer.concat(Array.from(this.buffer), this[BUFFERLENGTH]) - ]) - } + if (this[OBJECTMODE]) + n = null - return this[READ](n || null, this.buffer.head.value) - } finally { - this[MAYBE_EMIT_END]() + if (this.buffer.length > 1 && !this[OBJECTMODE]) { + if (this.encoding) + this.buffer = [this.buffer.join('')] + else + this.buffer = [Buffer.concat(this.buffer, this[BUFFERLENGTH])] } + + const ret = this[READ](n || null, this.buffer[0]) + this[MAYBE_EMIT_END]() + return ret } [READ] (n, chunk) { if (n === chunk.length || n === null) this[BUFFERSHIFT]() else { - this.buffer.head.value = chunk.slice(n) + this.buffer[0] = chunk.slice(n) chunk = chunk.slice(0, n) this[BUFFERLENGTH] -= n } @@ -291,7 +344,7 @@ module.exports = class Minipass extends Stream { this[BUFFERLENGTH] += 1 else this[BUFFERLENGTH] += chunk.length - return this.buffer.push(chunk) + this.buffer.push(chunk) } [BUFFERSHIFT] () { @@ -299,7 +352,7 @@ module.exports = class Minipass extends Stream { if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1 else - this[BUFFERLENGTH] -= this.buffer.head.value.length + this[BUFFERLENGTH] -= this.buffer[0].length } return this.buffer.shift() } @@ -325,35 +378,52 @@ module.exports = class Minipass extends Stream { opts.end = false else opts.end = opts.end !== false + opts.proxyErrors = !!opts.proxyErrors - const p = { dest: dest, opts: opts, ondrain: _ => this[RESUME]() } - this.pipes.push(p) - - dest.on('drain', p.ondrain) - this[RESUME]() // piping an ended stream ends immediately - if (ended && p.opts.end) - p.dest.end() + if (ended) { + if (opts.end) + dest.end() + } else { + this.pipes.push(!opts.proxyErrors ? new Pipe(this, dest, opts) + : new PipeProxyErrors(this, dest, opts)) + if (this[ASYNC]) + defer(() => this[RESUME]()) + else + this[RESUME]() + } + return dest } + unpipe (dest) { + const p = this.pipes.find(p => p.dest === dest) + if (p) { + this.pipes.splice(this.pipes.indexOf(p), 1) + p.unpipe() + } + } + addListener (ev, fn) { return this.on(ev, fn) } on (ev, fn) { - try { - return super.on(ev, fn) - } finally { - if (ev === 'data' && !this.pipes.length && !this.flowing) - this[RESUME]() - else if (isEndish(ev) && this[EMITTED_END]) { - super.emit(ev) - this.removeAllListeners(ev) - } else if (ev === 'error' && this[EMITTED_ERROR]) { + const ret = super.on(ev, fn) + if (ev === 'data' && !this.pipes.length && !this.flowing) + this[RESUME]() + else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) + super.emit('readable') + else if (isEndish(ev) && this[EMITTED_END]) { + super.emit(ev) + this.removeAllListeners(ev) + } else if (ev === 'error' && this[EMITTED_ERROR]) { + if (this[ASYNC]) + defer(() => fn.call(this, this[EMITTED_ERROR])) + else fn.call(this, this[EMITTED_ERROR]) - } } + return ret } get emittedEnd () { @@ -376,65 +446,84 @@ module.exports = class Minipass extends Stream { } } - emit (ev, data) { + emit (ev, data, ...extra) { // error and close are only events allowed after calling destroy() if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED]) return else if (ev === 'data') { - if (!data) - return - - if (this.pipes.length) - this.pipes.forEach(p => - p.dest.write(data) === false && this.pause()) + return !data ? false + : this[ASYNC] ? defer(() => this[EMITDATA](data)) + : this[EMITDATA](data) } else if (ev === 'end') { - // only actual end gets this treatment - if (this[EMITTED_END] === true) - return - - this[EMITTED_END] = true - this.readable = false - - if (this[DECODER]) { - data = this[DECODER].end() - if (data) { - this.pipes.forEach(p => p.dest.write(data)) - super.emit('data', data) - } - } - - this.pipes.forEach(p => { - p.dest.removeListener('drain', p.ondrain) - if (p.opts.end) - p.dest.end() - }) + return this[EMITEND]() } else if (ev === 'close') { this[CLOSED] = true // don't emit close before 'end' and 'finish' if (!this[EMITTED_END] && !this[DESTROYED]) return + const ret = super.emit('close') + this.removeAllListeners('close') + return ret } else if (ev === 'error') { this[EMITTED_ERROR] = data + const ret = super.emit('error', data) + this[MAYBE_EMIT_END]() + return ret + } else if (ev === 'resume') { + const ret = super.emit('resume') + this[MAYBE_EMIT_END]() + return ret + } else if (ev === 'finish' || ev === 'prefinish') { + const ret = super.emit(ev) + this.removeAllListeners(ev) + return ret } - // TODO: replace with a spread operator when Node v4 support drops - const args = new Array(arguments.length) - args[0] = ev - args[1] = data - if (arguments.length > 2) { - for (let i = 2; i < arguments.length; i++) { - args[i] = arguments[i] + // Some other unknown event + const ret = super.emit(ev, data, ...extra) + this[MAYBE_EMIT_END]() + return ret + } + + [EMITDATA] (data) { + for (const p of this.pipes) { + if (p.dest.write(data) === false) + this.pause() + } + const ret = super.emit('data', data) + this[MAYBE_EMIT_END]() + return ret + } + + [EMITEND] () { + if (this[EMITTED_END]) + return + + this[EMITTED_END] = true + this.readable = false + if (this[ASYNC]) + defer(() => this[EMITEND2]()) + else + this[EMITEND2]() + } + + [EMITEND2] () { + if (this[DECODER]) { + const data = this[DECODER].end() + if (data) { + for (const p of this.pipes) { + p.dest.write(data) + } + super.emit('data', data) } } - try { - return super.emit.apply(this, args) - } finally { - if (!isEndish(ev)) - this[MAYBE_EMIT_END]() - else - this.removeAllListeners(ev) + for (const p of this.pipes) { + p.end() } + const ret = super.emit('end') + this.removeAllListeners('end') + return ret } // const all = await stream.collect() @@ -536,7 +625,7 @@ module.exports = class Minipass extends Stream { this[DESTROYED] = true // throw away all buffered data, it's never coming out - this.buffer = new Yallist() + this.buffer.length = 0 this[BUFFERLENGTH] = 0 if (typeof this.close === 'function' && !this[CLOSED]) diff --git a/deps/npm/node_modules/minipass/package.json b/deps/npm/node_modules/minipass/package.json index 1728e5108c4..47c90a4fcf4 100644 --- a/deps/npm/node_modules/minipass/package.json +++ b/deps/npm/node_modules/minipass/package.json @@ -1,15 +1,19 @@ { "name": "minipass", - "version": "3.1.6", + "version": "3.3.4", "description": "minimal implementation of a PassThrough stream", "main": "index.js", "dependencies": { "yallist": "^4.0.0" }, "devDependencies": { + "@types/node": "^17.0.41", "end-of-stream": "^1.4.0", - "tap": "^15.0.9", - "through2": "^2.0.3" + "prettier": "^2.6.2", + "tap": "^16.2.0", + "through2": "^2.0.3", + "ts-node": "^10.8.1", + "typescript": "^4.7.3" }, "scripts": { "test": "tap", @@ -28,6 +32,7 @@ "author": "Isaac Z. Schlueter (http://blog.izs.me/)", "license": "ISC", "files": [ + "index.d.ts", "index.js" ], "tap": { @@ -35,5 +40,16 @@ }, "engines": { "node": ">=8" + }, + "prettier": { + "semi": false, + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" } } diff --git a/deps/npm/node_modules/ms/readme.md b/deps/npm/node_modules/ms/readme.md deleted file mode 100644 index 0fc1abb3b8e..00000000000 --- a/deps/npm/node_modules/ms/readme.md +++ /dev/null @@ -1,59 +0,0 @@ -# ms - -![CI](https://github.com/vercel/ms/workflows/CI/badge.svg) - -Use this package to easily convert various time formats to milliseconds. - -## Examples - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('1y') // 31557600000 -ms('100') // 100 -ms('-3 days') // -259200000 -ms('-1h') // -3600000 -ms('-200') // -200 -``` - -### Convert from Milliseconds - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(-3 * 60000) // "-3m" -ms(ms('10 hours')) // "10h" -``` - -### Time Format Written-Out - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(-3 * 60000, { long: true }) // "-3 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -## Features - -- Works both in [Node.js](https://nodejs.org) and in the browser -- If a number is supplied to `ms`, a string with a unit is returned -- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) -- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned - -## Related Packages - -- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. - -## Caught a Bug? - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device -2. Link the package to the global module directory: `npm link` -3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! - -As always, you can run the tests using: `npm test` diff --git a/deps/npm/node_modules/node-gyp/.github/workflows/release-please.yml b/deps/npm/node_modules/node-gyp/.github/workflows/release-please.yml index 7d3cf9dd450..c3057c3a315 100644 --- a/deps/npm/node_modules/node-gyp/.github/workflows/release-please.yml +++ b/deps/npm/node_modules/node-gyp/.github/workflows/release-please.yml @@ -3,7 +3,7 @@ name: release-please on: push: branches: - - master + - main jobs: release-please: diff --git a/deps/npm/node_modules/node-gyp/.github/workflows/tests.yml b/deps/npm/node_modules/node-gyp/.github/workflows/tests.yml index f7c9b979e3a..a3b68bdd5d3 100644 --- a/deps/npm/node_modules/node-gyp/.github/workflows/tests.yml +++ b/deps/npm/node_modules/node-gyp/.github/workflows/tests.yml @@ -1,45 +1,52 @@ -# TODO: Line 43, enable pytest --doctest-modules +# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources +# TODO: Line 48, enable pytest --doctest-modules name: Tests -on: [push, pull_request] +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] jobs: Tests: strategy: fail-fast: false max-parallel: 15 matrix: - node: [12.x, 14.x, 16.x] + node: [14.x, 16.x, 18.x] python: ["3.6", "3.8", "3.10"] os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} - name: Use Python ${{ matrix.python }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} env: - PYTHON_VERSION: ${{ matrix.python }} + PYTHON_VERSION: ${{ matrix.python }} # Why do this? - name: Install Dependencies run: | npm install --no-progress pip install flake8 pytest - name: Set Windows environment - if: matrix.os == 'windows-latest' + if: startsWith(matrix.os, 'windows') run: | echo 'GYP_MSVS_VERSION=2015' >> $Env:GITHUB_ENV echo 'GYP_MSVS_OVERRIDE_PATH=C:\\Dummy' >> $Env:GITHUB_ENV - name: Lint Python - if: matrix.os == 'ubuntu-latest' + if: startsWith(matrix.os, 'ubuntu') run: flake8 . --ignore=E203,W503 --max-complexity=101 --max-line-length=88 --show-source --statistics - name: Run Python tests run: python -m pytest # - name: Run doctests with pytest # run: python -m pytest --doctest-modules + - name: Environment Information + run: npx envinfo - name: Run Node tests run: npm test diff --git a/deps/npm/node_modules/node-gyp/.github/workflows/visual-studio.yml b/deps/npm/node_modules/node-gyp/.github/workflows/visual-studio.yml index 6bb4574d63f..12125e54479 100644 --- a/deps/npm/node_modules/node-gyp/.github/workflows/visual-studio.yml +++ b/deps/npm/node_modules/node-gyp/.github/workflows/visual-studio.yml @@ -1,23 +1,31 @@ -name: Tests on Windows -on: [push, pull_request] +# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources + +name: visual-studio +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] jobs: - Tests: + visual-studio: strategy: fail-fast: false - max-parallel: 15 + max-parallel: 8 matrix: - os: [windows-2022] + os: [windows-latest] + msvs-version: [2016, 2019, 2022] # https://github.com/actions/virtual-environments/tree/main/images/win runs-on: ${{ matrix.os }} steps: - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install Dependencies run: | npm install --no-progress + # npm audit fix --force - name: Set Windows environment - if: matrix.os == 'windows-latest' + if: startsWith(matrix.os, 'windows') run: | - echo 'GYP_MSVS_VERSION=2015' >> $Env:GITHUB_ENV + echo 'GYP_MSVS_VERSION=${{ matrix.msvs-version }}' >> $Env:GITHUB_ENV echo 'GYP_MSVS_OVERRIDE_PATH=C:\\Dummy' >> $Env:GITHUB_ENV - name: Environment Information run: npx envinfo diff --git a/deps/npm/node_modules/node-gyp/CHANGELOG.md b/deps/npm/node_modules/node-gyp/CHANGELOG.md index 7a474ed93f1..694823fa32e 100644 --- a/deps/npm/node_modules/node-gyp/CHANGELOG.md +++ b/deps/npm/node_modules/node-gyp/CHANGELOG.md @@ -1,5 +1,37 @@ # Changelog +## [9.1.0](https://www.github.com/nodejs/node-gyp/compare/v9.0.0...v9.1.0) (2022-07-13) + + +### Features + +* Update function getSDK() to support Windows 11 SDK ([#2565](https://www.github.com/nodejs/node-gyp/issues/2565)) ([ea8520e](https://www.github.com/nodejs/node-gyp/commit/ea8520e3855374bd15b6d001fe112d58a8d7d737)) + + +### Bug Fixes + +* extend tap timeout length to allow for slow CI ([6f74c76](https://www.github.com/nodejs/node-gyp/commit/6f74c762fe3c19bdd20245cb5c02e2dfa65d9451)) +* new ca & server certs, bundle in .js file and unpack for testing ([147e3d3](https://www.github.com/nodejs/node-gyp/commit/147e3d34f44a97deb7aa507207680cf0f4e662a2)) +* re-label ([#2689](https://www.github.com/nodejs/node-gyp/issues/2689)) ([f0b7863](https://www.github.com/nodejs/node-gyp/commit/f0b7863dadfa365afc173025ae95351aec79abd9)) +* typo on readme ([bf81cd4](https://www.github.com/nodejs/node-gyp/commit/bf81cd452b931dd4dfa82762c23dd530a075d992)) + + +### Doc + +* update docs/README.md with latest version number ([62d2815](https://www.github.com/nodejs/node-gyp/commit/62d28151bf8266a34e1bcceeb25b4e6e2ae5ca5d)) + + +### Core + +* update due to rename of primary branch ([ca1f068](https://www.github.com/nodejs/node-gyp/commit/ca1f0681a5567ca8cd51acebccd37a633f19bc6a)) + + +### Tests + +* Try msvs-version: [2016, 2019, 2022] ([#2700](https://www.github.com/nodejs/node-gyp/issues/2700)) ([68b5b5b](https://www.github.com/nodejs/node-gyp/commit/68b5b5be9c94ac20c55e88654ff6f55234d7130a)) +* Upgrade GitHub Actions ([#2623](https://www.github.com/nodejs/node-gyp/issues/2623)) ([245cd5b](https://www.github.com/nodejs/node-gyp/commit/245cd5bbe4441d4f05e88f2fa20a86425419b6af)) +* Upgrade GitHub Actions ([#2701](https://www.github.com/nodejs/node-gyp/issues/2701)) ([1c64ca7](https://www.github.com/nodejs/node-gyp/commit/1c64ca7f4702c6eb43ecd16fbd67b5d939041621)) + ## [9.0.0](https://www.github.com/nodejs/node-gyp/compare/v8.4.1...v9.0.0) (2022-02-24) diff --git a/deps/npm/node_modules/node-gyp/README.md b/deps/npm/node_modules/node-gyp/README.md index d28a0cc9ef8..7636ad54820 100644 --- a/deps/npm/node_modules/node-gyp/README.md +++ b/deps/npm/node_modules/node-gyp/README.md @@ -37,7 +37,7 @@ Depending on your operating system, you will need to install: ### On macOS -**ATTENTION**: If your Mac has been _upgraded_ to macOS Catalina (10.15), please read [macOS_Catalina.md](macOS_Catalina.md). +**ATTENTION**: If your Mac has been _upgraded_ to macOS Catalina (10.15) or higher, please read [macOS_Catalina.md](macOS_Catalina.md). * Python v3.7, v3.8, v3.9, or v3.10 * `XCode Command Line Tools` which will install `clang`, `clang++`, and `make`. @@ -89,7 +89,7 @@ searching will be done. ### Build for Third Party Node.js Runtimes -When building modules for thid party Node.js runtimes like Electron, which have +When building modules for third party Node.js runtimes like Electron, which have different build configurations from the official Node.js distribution, you should use `--dist-url` or `--nodedir` flags to specify the headers of the runtime to build for. diff --git a/deps/npm/node_modules/node-gyp/docs/README.md b/deps/npm/node_modules/node-gyp/docs/README.md index 1bec1f0d573..70279609093 100644 --- a/deps/npm/node_modules/node-gyp/docs/README.md +++ b/deps/npm/node_modules/node-gyp/docs/README.md @@ -1,4 +1,4 @@ -## Versions of `node-gyp` that are earlier than v8.x.x +## Versions of `node-gyp` that are earlier than v9.x.x Please look thru your error log for the string `gyp info using node-gyp@` and if that version number is less than the [current release of node-gyp](https://github.com/nodejs/node-gyp/releases) then __please upgrade__ using [these instructions](https://github.com/nodejs/node-gyp/blob/master/docs/Updating-npm-bundled-node-gyp.md) and then try your command again. diff --git a/deps/npm/node_modules/node-gyp/docs/Updating-npm-bundled-node-gyp.md b/deps/npm/node_modules/node-gyp/docs/Updating-npm-bundled-node-gyp.md index 1d91af6bb26..5759add3fee 100644 --- a/deps/npm/node_modules/node-gyp/docs/Updating-npm-bundled-node-gyp.md +++ b/deps/npm/node_modules/node-gyp/docs/Updating-npm-bundled-node-gyp.md @@ -4,7 +4,7 @@ **Note: These instructions will be undone if you reinstall or upgrade npm or node! For a more permanent (and simpler) solution, see [Force-npm-to-use-global-node-gyp.md](Force-npm-to-use-global-node-gyp.md). (npm 6 or older only!)** -[Many issues](https://github.com/nodejs/node-gyp/labels/ERR%21%20node-gyp%20-v%20%3C%3D%20v5.1.0) are opened by users who are +[Many issues](https://github.com/nodejs/node-gyp/issues?q=label%3A"ERR!+node-gyp+-v+<%3D+v9.x.x") are opened by users who are not running a [current version of node-gyp](https://github.com/nodejs/node-gyp/releases). `npm` bundles its own, internal, copy of `node-gyp`. This internal copy is independent of any globally installed copy of node-gyp that diff --git a/deps/npm/node_modules/node-gyp/lib/build.js b/deps/npm/node_modules/node-gyp/lib/build.js index c2388fb348c..3baba4140c9 100644 --- a/deps/npm/node_modules/node-gyp/lib/build.js +++ b/deps/npm/node_modules/node-gyp/lib/build.js @@ -185,6 +185,13 @@ function build (gyp, argv, callback) { } } + if (!win) { + // Add build-time dependency symlinks (such as Python) to PATH + const buildBinsDir = path.resolve('build', 'node_gyp_bins') + process.env.PATH = `${buildBinsDir}:${process.env.PATH}` + log.verbose('bin symlinks', `adding symlinks (such as Python), at "${buildBinsDir}", to PATH`) + } + var proc = gyp.spawn(command, argv) proc.on('exit', onExit) } diff --git a/deps/npm/node_modules/node-gyp/lib/configure.js b/deps/npm/node_modules/node-gyp/lib/configure.js index 17a6487fa9c..c7010385b5e 100644 --- a/deps/npm/node_modules/node-gyp/lib/configure.js +++ b/deps/npm/node_modules/node-gyp/lib/configure.js @@ -17,6 +17,7 @@ if (win) { function configure (gyp, argv, callback) { var python var buildDir = path.resolve('build') + var buildBinsDir = path.join(buildDir, 'node_gyp_bins') var configNames = ['config.gypi', 'common.gypi'] var configs = [] var nodeDir @@ -73,7 +74,9 @@ function configure (gyp, argv, callback) { function createBuildDir () { log.verbose('build dir', 'attempting to create "build" dir: %s', buildDir) - fs.mkdir(buildDir, { recursive: true }, function (err, isNew) { + + const deepestBuildDirSubdirectory = win ? buildDir : buildBinsDir + fs.mkdir(deepestBuildDirSubdirectory, { recursive: true }, function (err, isNew) { if (err) { return callback(err) } @@ -84,11 +87,31 @@ function configure (gyp, argv, callback) { findVisualStudio(release.semver, gyp.opts.msvs_version, createConfigFile) } else { + createPythonSymlink() createConfigFile() } }) } + function createPythonSymlink () { + const symlinkDestination = path.join(buildBinsDir, 'python3') + + log.verbose('python symlink', `creating symlink to "${python}" at "${symlinkDestination}"`) + + fs.unlink(symlinkDestination, function (err) { + if (err && err.code !== 'ENOENT') { + log.verbose('python symlink', 'error when attempting to remove existing symlink') + log.verbose('python symlink', err.stack, 'errno: ' + err.errno) + } + fs.symlink(python, symlinkDestination, function (err) { + if (err) { + log.verbose('python symlink', 'error when attempting to create Python symlink') + log.verbose('python symlink', err.stack, 'errno: ' + err.errno) + } + }) + }) + } + function createConfigFile (err, vsInfo) { if (err) { return callback(err) diff --git a/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js b/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js index 64af7be3460..8a5cfc1ea9b 100644 --- a/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js +++ b/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js @@ -314,29 +314,30 @@ VisualStudioFinder.prototype = { getSDK: function getSDK (info) { const win8SDK = 'Microsoft.VisualStudio.Component.Windows81SDK' const win10SDKPrefix = 'Microsoft.VisualStudio.Component.Windows10SDK.' + const win11SDKPrefix = 'Microsoft.VisualStudio.Component.Windows11SDK.' - var Win10SDKVer = 0 + var Win10or11SDKVer = 0 info.packages.forEach((pkg) => { - if (!pkg.startsWith(win10SDKPrefix)) { + if (!pkg.startsWith(win10SDKPrefix) && !pkg.startsWith(win11SDKPrefix)) { return } const parts = pkg.split('.') if (parts.length > 5 && parts[5] !== 'Desktop') { - this.log.silly('- ignoring non-Desktop Win10SDK:', pkg) + this.log.silly('- ignoring non-Desktop Win10/11SDK:', pkg) return } const foundSdkVer = parseInt(parts[4], 10) if (isNaN(foundSdkVer)) { // Microsoft.VisualStudio.Component.Windows10SDK.IpOverUsb - this.log.silly('- failed to parse Win10SDK number:', pkg) + this.log.silly('- failed to parse Win10/11SDK number:', pkg) return } - this.log.silly('- found Win10SDK:', foundSdkVer) - Win10SDKVer = Math.max(Win10SDKVer, foundSdkVer) + this.log.silly('- found Win10/11SDK:', foundSdkVer) + Win10or11SDKVer = Math.max(Win10or11SDKVer, foundSdkVer) }) - if (Win10SDKVer !== 0) { - return `10.0.${Win10SDKVer}.0` + if (Win10or11SDKVer !== 0) { + return `10.0.${Win10or11SDKVer}.0` } else if (info.packages.indexOf(win8SDK) !== -1) { this.log.silly('- found Win8SDK') return '8.1' diff --git a/deps/npm/node_modules/node-gyp/macOS_Catalina.md b/deps/npm/node_modules/node-gyp/macOS_Catalina.md index 4fe0f29b21e..dde5fe3f7d4 100644 --- a/deps/npm/node_modules/node-gyp/macOS_Catalina.md +++ b/deps/npm/node_modules/node-gyp/macOS_Catalina.md @@ -37,7 +37,7 @@ If `ProductVersion` is less then `10.15` then this document is not for you. Norm ### The acid test To see if `Xcode Command Line Tools` is installed in a way that will work with `node-gyp`, run: ``` -curl -sL https://github.com/nodejs/node-gyp/raw/master/macOS_Catalina_acid_test.sh | bash +curl -sL https://github.com/nodejs/node-gyp/raw/main/macOS_Catalina_acid_test.sh | bash ``` If test succeeded, _you are done_! You should be ready to [install](https://github.com/nodejs/node-gyp#installation) `node-gyp`. diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/common.js b/deps/npm/node_modules/node-gyp/node_modules/glob/common.js index 8e363b6c1f1..424c46e1dab 100644 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/common.js +++ b/deps/npm/node_modules/node-gyp/node_modules/glob/common.js @@ -110,6 +110,8 @@ function setopts (self, pattern, options) { // Note that they are not supported in Glob itself anyway. options.nonegate = true options.nocomment = true + // always treat \ in patterns as escapes, not path separators + options.allowWindowsEscape = false self.minimatch = new Minimatch(pattern, options) self.options = self.minimatch.options diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/glob.js b/deps/npm/node_modules/node-gyp/node_modules/glob/glob.js index afcf82752c3..37a4d7e6077 100644 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/glob.js +++ b/deps/npm/node_modules/node-gyp/node_modules/glob/glob.js @@ -342,7 +342,10 @@ Glob.prototype._process = function (pattern, index, inGlobStar, cb) { var read if (prefix === null) read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + else if (isAbsolute(prefix) || + isAbsolute(pattern.map(function (p) { + return typeof p === 'string' ? p : '[*]' + }).join('/'))) { if (!prefix || !isAbsolute(prefix)) prefix = '/' + prefix read = prefix diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/package.json index cc1a57a896e..5940b649b7e 100644 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/package.json +++ b/deps/npm/node_modules/node-gyp/node_modules/glob/package.json @@ -2,7 +2,10 @@ "author": "Isaac Z. Schlueter (http://blog.izs.me/)", "name": "glob", "description": "a little globber", - "version": "7.2.0", + "version": "7.2.3", + "publishConfig": { + "tag": "v7-legacy" + }, "repository": { "type": "git", "url": "git://github.com/isaacs/node-glob.git" @@ -20,7 +23,7 @@ "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/sync.js b/deps/npm/node_modules/node-gyp/node_modules/glob/sync.js index 4f46f90559a..2c4f480192d 100644 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/sync.js +++ b/deps/npm/node_modules/node-gyp/node_modules/glob/sync.js @@ -48,7 +48,7 @@ function GlobSync (pattern, options) { } GlobSync.prototype._finish = function () { - assert(this instanceof GlobSync) + assert.ok(this instanceof GlobSync) if (this.realpath) { var self = this this.matches.forEach(function (matchset, index) { @@ -72,7 +72,7 @@ GlobSync.prototype._finish = function () { GlobSync.prototype._process = function (pattern, index, inGlobStar) { - assert(this instanceof GlobSync) + assert.ok(this instanceof GlobSync) // Get the first [n] parts of pattern that are all strings. var n = 0 @@ -109,7 +109,10 @@ GlobSync.prototype._process = function (pattern, index, inGlobStar) { var read if (prefix === null) read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + else if (isAbsolute(prefix) || + isAbsolute(pattern.map(function (p) { + return typeof p === 'string' ? p : '[*]' + }).join('/'))) { if (!prefix || !isAbsolute(prefix)) prefix = '/' + prefix read = prefix diff --git a/deps/npm/node_modules/nopt/CHANGELOG.md b/deps/npm/node_modules/node-gyp/node_modules/nopt/CHANGELOG.md similarity index 100% rename from deps/npm/node_modules/nopt/CHANGELOG.md rename to deps/npm/node_modules/node-gyp/node_modules/nopt/CHANGELOG.md diff --git a/tools/node_modules/eslint/node_modules/lru-cache/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/nopt/LICENSE similarity index 100% rename from tools/node_modules/eslint/node_modules/lru-cache/LICENSE rename to deps/npm/node_modules/node-gyp/node_modules/nopt/LICENSE diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/README.md b/deps/npm/node_modules/node-gyp/node_modules/nopt/README.md new file mode 100644 index 00000000000..a99531c0465 --- /dev/null +++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/README.md @@ -0,0 +1,213 @@ +If you want to write an option parser, and have it be good, there are +two ways to do it. The Right Way, and the Wrong Way. + +The Wrong Way is to sit down and write an option parser. We've all done +that. + +The Right Way is to write some complex configurable program with so many +options that you hit the limit of your frustration just trying to +manage them all, and defer it with duct-tape solutions until you see +exactly to the core of the problem, and finally snap and write an +awesome option parser. + +If you want to write an option parser, don't write an option parser. +Write a package manager, or a source control system, or a service +restarter, or an operating system. You probably won't end up with a +good one of those, but if you don't give up, and you are relentless and +diligent enough in your procrastination, you may just end up with a very +nice option parser. + +## USAGE + +```javascript +// my-program.js +var nopt = require("nopt") + , Stream = require("stream").Stream + , path = require("path") + , knownOpts = { "foo" : [String, null] + , "bar" : [Stream, Number] + , "baz" : path + , "bloo" : [ "big", "medium", "small" ] + , "flag" : Boolean + , "pick" : Boolean + , "many1" : [String, Array] + , "many2" : [path, Array] + } + , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] + , "b7" : ["--bar", "7"] + , "m" : ["--bloo", "medium"] + , "p" : ["--pick"] + , "f" : ["--flag"] + } + // everything is optional. + // knownOpts and shorthands default to {} + // arg list defaults to process.argv + // slice defaults to 2 + , parsed = nopt(knownOpts, shortHands, process.argv, 2) +console.log(parsed) +``` + +This would give you support for any of the following: + +```console +$ node my-program.js --foo "blerp" --no-flag +{ "foo" : "blerp", "flag" : false } + +$ node my-program.js ---bar 7 --foo "Mr. Hand" --flag +{ bar: 7, foo: "Mr. Hand", flag: true } + +$ node my-program.js --foo "blerp" -f -----p +{ foo: "blerp", flag: true, pick: true } + +$ node my-program.js -fp --foofoo +{ foo: "Mr. Foo", flag: true, pick: true } + +$ node my-program.js --foofoo -- -fp # -- stops the flag parsing. +{ foo: "Mr. Foo", argv: { remain: ["-fp"] } } + +$ node my-program.js --blatzk -fp # unknown opts are ok. +{ blatzk: true, flag: true, pick: true } + +$ node my-program.js --blatzk=1000 -fp # but you need to use = if they have a value +{ blatzk: 1000, flag: true, pick: true } + +$ node my-program.js --no-blatzk -fp # unless they start with "no-" +{ blatzk: false, flag: true, pick: true } + +$ node my-program.js --baz b/a/z # known paths are resolved. +{ baz: "/Users/isaacs/b/a/z" } + +# if Array is one of the types, then it can take many +# values, and will always be an array. The other types provided +# specify what types are allowed in the list. + +$ node my-program.js --many1 5 --many1 null --many1 foo +{ many1: ["5", "null", "foo"] } + +$ node my-program.js --many2 foo --many2 bar +{ many2: ["/path/to/foo", "path/to/bar"] } +``` + +Read the tests at the bottom of `lib/nopt.js` for more examples of +what this puppy can do. + +## Types + +The following types are supported, and defined on `nopt.typeDefs` + +* String: A normal string. No parsing is done. +* path: A file system path. Gets resolved against cwd if not absolute. +* url: A url. If it doesn't parse, it isn't accepted. +* Number: Must be numeric. +* Date: Must parse as a date. If it does, and `Date` is one of the options, + then it will return a Date object, not a string. +* Boolean: Must be either `true` or `false`. If an option is a boolean, + then it does not need a value, and its presence will imply `true` as + the value. To negate boolean flags, do `--no-whatever` or `--whatever + false` +* NaN: Means that the option is strictly not allowed. Any value will + fail. +* Stream: An object matching the "Stream" class in node. Valuable + for use when validating programmatically. (npm uses this to let you + supply any WriteStream on the `outfd` and `logfd` config options.) +* Array: If `Array` is specified as one of the types, then the value + will be parsed as a list of options. This means that multiple values + can be specified, and that the value will always be an array. + +If a type is an array of values not on this list, then those are +considered valid values. For instance, in the example above, the +`--bloo` option can only be one of `"big"`, `"medium"`, or `"small"`, +and any other value will be rejected. + +When parsing unknown fields, `"true"`, `"false"`, and `"null"` will be +interpreted as their JavaScript equivalents. + +You can also mix types and values, or multiple types, in a list. For +instance `{ blah: [Number, null] }` would allow a value to be set to +either a Number or null. When types are ordered, this implies a +preference, and the first type that can be used to properly interpret +the value will be used. + +To define a new type, add it to `nopt.typeDefs`. Each item in that +hash is an object with a `type` member and a `validate` method. The +`type` member is an object that matches what goes in the type list. The +`validate` method is a function that gets called with `validate(data, +key, val)`. Validate methods should assign `data[key]` to the valid +value of `val` if it can be handled properly, or return boolean +`false` if it cannot. + +You can also call `nopt.clean(data, types, typeDefs)` to clean up a +config object and remove its invalid properties. + +## Error Handling + +By default, nopt outputs a warning to standard error when invalid values for +known options are found. You can change this behavior by assigning a method +to `nopt.invalidHandler`. This method will be called with +the offending `nopt.invalidHandler(key, val, types)`. + +If no `nopt.invalidHandler` is assigned, then it will console.error +its whining. If it is assigned to boolean `false` then the warning is +suppressed. + +## Abbreviations + +Yes, they are supported. If you define options like this: + +```javascript +{ "foolhardyelephants" : Boolean +, "pileofmonkeys" : Boolean } +``` + +Then this will work: + +```bash +node program.js --foolhar --pil +node program.js --no-f --pileofmon +# etc. +``` + +## Shorthands + +Shorthands are a hash of shorter option names to a snippet of args that +they expand to. + +If multiple one-character shorthands are all combined, and the +combination does not unambiguously match any other option or shorthand, +then they will be broken up into their constituent parts. For example: + +```json +{ "s" : ["--loglevel", "silent"] +, "g" : "--global" +, "f" : "--force" +, "p" : "--parseable" +, "l" : "--long" +} +``` + +```bash +npm ls -sgflp +# just like doing this: +npm ls --loglevel silent --global --force --long --parseable +``` + +## The Rest of the args + +The config object returned by nopt is given a special member called +`argv`, which is an object with the following fields: + +* `remain`: The remaining args after all the parsing has occurred. +* `original`: The args as they originally appeared. +* `cooked`: The args after flags and shorthands are expanded. + +## Slicing + +Node programs are called with more or less the exact argv as it appears +in C land, after the v8 and node-specific options have been plucked off. +As such, `argv[0]` is always `node` and `argv[1]` is always the +JavaScript program being run. + +That's usually not very useful to you. So they're sliced off by +default. If you want them, then you can pass in `0` as the last +argument, or any other number that you'd like to slice off the start of +the list. diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/bin/nopt.js b/deps/npm/node_modules/node-gyp/node_modules/nopt/bin/nopt.js new file mode 100755 index 00000000000..3232d4c570f --- /dev/null +++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/bin/nopt.js @@ -0,0 +1,54 @@ +#!/usr/bin/env node +var nopt = require("../lib/nopt") + , path = require("path") + , types = { num: Number + , bool: Boolean + , help: Boolean + , list: Array + , "num-list": [Number, Array] + , "str-list": [String, Array] + , "bool-list": [Boolean, Array] + , str: String + , clear: Boolean + , config: Boolean + , length: Number + , file: path + } + , shorthands = { s: [ "--str", "astring" ] + , b: [ "--bool" ] + , nb: [ "--no-bool" ] + , tft: [ "--bool-list", "--no-bool-list", "--bool-list", "true" ] + , "?": ["--help"] + , h: ["--help"] + , H: ["--help"] + , n: [ "--num", "125" ] + , c: ["--config"] + , l: ["--length"] + , f: ["--file"] + } + , parsed = nopt( types + , shorthands + , process.argv + , 2 ) + +console.log("parsed", parsed) + +if (parsed.help) { + console.log("") + console.log("nopt cli tester") + console.log("") + console.log("types") + console.log(Object.keys(types).map(function M (t) { + var type = types[t] + if (Array.isArray(type)) { + return [t, type.map(function (type) { return type.name })] + } + return [t, type && type.name] + }).reduce(function (s, i) { + s[i[0]] = i[1] + return s + }, {})) + console.log("") + console.log("shorthands") + console.log(shorthands) +} diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt.js b/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt.js new file mode 100644 index 00000000000..ecfa5da9336 --- /dev/null +++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt.js @@ -0,0 +1,441 @@ +// info about each config option. + +var debug = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG + ? function () { console.error.apply(console, arguments) } + : function () {} + +var url = require("url") + , path = require("path") + , Stream = require("stream").Stream + , abbrev = require("abbrev") + , os = require("os") + +module.exports = exports = nopt +exports.clean = clean + +exports.typeDefs = + { String : { type: String, validate: validateString } + , Boolean : { type: Boolean, validate: validateBoolean } + , url : { type: url, validate: validateUrl } + , Number : { type: Number, validate: validateNumber } + , path : { type: path, validate: validatePath } + , Stream : { type: Stream, validate: validateStream } + , Date : { type: Date, validate: validateDate } + } + +function nopt (types, shorthands, args, slice) { + args = args || process.argv + types = types || {} + shorthands = shorthands || {} + if (typeof slice !== "number") slice = 2 + + debug(types, shorthands, args, slice) + + args = args.slice(slice) + var data = {} + , key + , argv = { + remain: [], + cooked: args, + original: args.slice(0) + } + + parse(args, data, argv.remain, types, shorthands) + // now data is full + clean(data, types, exports.typeDefs) + data.argv = argv + Object.defineProperty(data.argv, 'toString', { value: function () { + return this.original.map(JSON.stringify).join(" ") + }, enumerable: false }) + return data +} + +function clean (data, types, typeDefs) { + typeDefs = typeDefs || exports.typeDefs + var remove = {} + , typeDefault = [false, true, null, String, Array] + + Object.keys(data).forEach(function (k) { + if (k === "argv") return + var val = data[k] + , isArray = Array.isArray(val) + , type = types[k] + if (!isArray) val = [val] + if (!type) type = typeDefault + if (type === Array) type = typeDefault.concat(Array) + if (!Array.isArray(type)) type = [type] + + debug("val=%j", val) + debug("types=", type) + val = val.map(function (val) { + // if it's an unknown value, then parse false/true/null/numbers/dates + if (typeof val === "string") { + debug("string %j", val) + val = val.trim() + if ((val === "null" && ~type.indexOf(null)) + || (val === "true" && + (~type.indexOf(true) || ~type.indexOf(Boolean))) + || (val === "false" && + (~type.indexOf(false) || ~type.indexOf(Boolean)))) { + val = JSON.parse(val) + debug("jsonable %j", val) + } else if (~type.indexOf(Number) && !isNaN(val)) { + debug("convert to number", val) + val = +val + } else if (~type.indexOf(Date) && !isNaN(Date.parse(val))) { + debug("convert to date", val) + val = new Date(val) + } + } + + if (!types.hasOwnProperty(k)) { + return val + } + + // allow `--no-blah` to set 'blah' to null if null is allowed + if (val === false && ~type.indexOf(null) && + !(~type.indexOf(false) || ~type.indexOf(Boolean))) { + val = null + } + + var d = {} + d[k] = val + debug("prevalidated val", d, val, types[k]) + if (!validate(d, k, val, types[k], typeDefs)) { + if (exports.invalidHandler) { + exports.invalidHandler(k, val, types[k], data) + } else if (exports.invalidHandler !== false) { + debug("invalid: "+k+"="+val, types[k]) + } + return remove + } + debug("validated val", d, val, types[k]) + return d[k] + }).filter(function (val) { return val !== remove }) + + // if we allow Array specifically, then an empty array is how we + // express 'no value here', not null. Allow it. + if (!val.length && type.indexOf(Array) === -1) { + debug('VAL HAS NO LENGTH, DELETE IT', val, k, type.indexOf(Array)) + delete data[k] + } + else if (isArray) { + debug(isArray, data[k], val) + data[k] = val + } else data[k] = val[0] + + debug("k=%s val=%j", k, val, data[k]) + }) +} + +function validateString (data, k, val) { + data[k] = String(val) +} + +function validatePath (data, k, val) { + if (val === true) return false + if (val === null) return true + + val = String(val) + + var isWin = process.platform === 'win32' + , homePattern = isWin ? /^~(\/|\\)/ : /^~\// + , home = os.homedir() + + if (home && val.match(homePattern)) { + data[k] = path.resolve(home, val.substr(2)) + } else { + data[k] = path.resolve(val) + } + return true +} + +function validateNumber (data, k, val) { + debug("validate Number %j %j %j", k, val, isNaN(val)) + if (isNaN(val)) return false + data[k] = +val +} + +function validateDate (data, k, val) { + var s = Date.parse(val) + debug("validate Date %j %j %j", k, val, s) + if (isNaN(s)) return false + data[k] = new Date(val) +} + +function validateBoolean (data, k, val) { + if (val instanceof Boolean) val = val.valueOf() + else if (typeof val === "string") { + if (!isNaN(val)) val = !!(+val) + else if (val === "null" || val === "false") val = false + else val = true + } else val = !!val + data[k] = val +} + +function validateUrl (data, k, val) { + val = url.parse(String(val)) + if (!val.host) return false + data[k] = val.href +} + +function validateStream (data, k, val) { + if (!(val instanceof Stream)) return false + data[k] = val +} + +function validate (data, k, val, type, typeDefs) { + // arrays are lists of types. + if (Array.isArray(type)) { + for (var i = 0, l = type.length; i < l; i ++) { + if (type[i] === Array) continue + if (validate(data, k, val, type[i], typeDefs)) return true + } + delete data[k] + return false + } + + // an array of anything? + if (type === Array) return true + + // NaN is poisonous. Means that something is not allowed. + if (type !== type) { + debug("Poison NaN", k, val, type) + delete data[k] + return false + } + + // explicit list of values + if (val === type) { + debug("Explicitly allowed %j", val) + // if (isArray) (data[k] = data[k] || []).push(val) + // else data[k] = val + data[k] = val + return true + } + + // now go through the list of typeDefs, validate against each one. + var ok = false + , types = Object.keys(typeDefs) + for (var i = 0, l = types.length; i < l; i ++) { + debug("test type %j %j %j", k, val, types[i]) + var t = typeDefs[types[i]] + if (t && + ((type && type.name && t.type && t.type.name) ? (type.name === t.type.name) : (type === t.type))) { + var d = {} + ok = false !== t.validate(d, k, val) + val = d[k] + if (ok) { + // if (isArray) (data[k] = data[k] || []).push(val) + // else data[k] = val + data[k] = val + break + } + } + } + debug("OK? %j (%j %j %j)", ok, k, val, types[i]) + + if (!ok) delete data[k] + return ok +} + +function parse (args, data, remain, types, shorthands) { + debug("parse", args, data, remain) + + var key = null + , abbrevs = abbrev(Object.keys(types)) + , shortAbbr = abbrev(Object.keys(shorthands)) + + for (var i = 0; i < args.length; i ++) { + var arg = args[i] + debug("arg", arg) + + if (arg.match(/^-{2,}$/)) { + // done with keys. + // the rest are args. + remain.push.apply(remain, args.slice(i + 1)) + args[i] = "--" + break + } + var hadEq = false + if (arg.charAt(0) === "-" && arg.length > 1) { + var at = arg.indexOf('=') + if (at > -1) { + hadEq = true + var v = arg.substr(at + 1) + arg = arg.substr(0, at) + args.splice(i, 1, arg, v) + } + + // see if it's a shorthand + // if so, splice and back up to re-parse it. + var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs) + debug("arg=%j shRes=%j", arg, shRes) + if (shRes) { + debug(arg, shRes) + args.splice.apply(args, [i, 1].concat(shRes)) + if (arg !== shRes[0]) { + i -- + continue + } + } + arg = arg.replace(/^-+/, "") + var no = null + while (arg.toLowerCase().indexOf("no-") === 0) { + no = !no + arg = arg.substr(3) + } + + if (abbrevs[arg]) arg = abbrevs[arg] + + var argType = types[arg] + var isTypeArray = Array.isArray(argType) + if (isTypeArray && argType.length === 1) { + isTypeArray = false + argType = argType[0] + } + + var isArray = argType === Array || + isTypeArray && argType.indexOf(Array) !== -1 + + // allow unknown things to be arrays if specified multiple times. + if (!types.hasOwnProperty(arg) && data.hasOwnProperty(arg)) { + if (!Array.isArray(data[arg])) + data[arg] = [data[arg]] + isArray = true + } + + var val + , la = args[i + 1] + + var isBool = typeof no === 'boolean' || + argType === Boolean || + isTypeArray && argType.indexOf(Boolean) !== -1 || + (typeof argType === 'undefined' && !hadEq) || + (la === "false" && + (argType === null || + isTypeArray && ~argType.indexOf(null))) + + if (isBool) { + // just set and move along + val = !no + // however, also support --bool true or --bool false + if (la === "true" || la === "false") { + val = JSON.parse(la) + la = null + if (no) val = !val + i ++ + } + + // also support "foo":[Boolean, "bar"] and "--foo bar" + if (isTypeArray && la) { + if (~argType.indexOf(la)) { + // an explicit type + val = la + i ++ + } else if ( la === "null" && ~argType.indexOf(null) ) { + // null allowed + val = null + i ++ + } else if ( !la.match(/^-{2,}[^-]/) && + !isNaN(la) && + ~argType.indexOf(Number) ) { + // number + val = +la + i ++ + } else if ( !la.match(/^-[^-]/) && ~argType.indexOf(String) ) { + // string + val = la + i ++ + } + } + + if (isArray) (data[arg] = data[arg] || []).push(val) + else data[arg] = val + + continue + } + + if (argType === String) { + if (la === undefined) { + la = "" + } else if (la.match(/^-{1,2}[^-]+/)) { + la = "" + i -- + } + } + + if (la && la.match(/^-{2,}$/)) { + la = undefined + i -- + } + + val = la === undefined ? true : la + if (isArray) (data[arg] = data[arg] || []).push(val) + else data[arg] = val + + i ++ + continue + } + remain.push(arg) + } +} + +function resolveShort (arg, shorthands, shortAbbr, abbrevs) { + // handle single-char shorthands glommed together, like + // npm ls -glp, but only if there is one dash, and only if + // all of the chars are single-char shorthands, and it's + // not a match to some other abbrev. + arg = arg.replace(/^-+/, '') + + // if it's an exact known option, then don't go any further + if (abbrevs[arg] === arg) + return null + + // if it's an exact known shortopt, same deal + if (shorthands[arg]) { + // make it an array, if it's a list of words + if (shorthands[arg] && !Array.isArray(shorthands[arg])) + shorthands[arg] = shorthands[arg].split(/\s+/) + + return shorthands[arg] + } + + // first check to see if this arg is a set of single-char shorthands + var singles = shorthands.___singles + if (!singles) { + singles = Object.keys(shorthands).filter(function (s) { + return s.length === 1 + }).reduce(function (l,r) { + l[r] = true + return l + }, {}) + shorthands.___singles = singles + debug('shorthand singles', singles) + } + + var chrs = arg.split("").filter(function (c) { + return singles[c] + }) + + if (chrs.join("") === arg) return chrs.map(function (c) { + return shorthands[c] + }).reduce(function (l, r) { + return l.concat(r) + }, []) + + + // if it's an arg abbrev, and not a literal shorthand, then prefer the arg + if (abbrevs[arg] && !shorthands[arg]) + return null + + // if it's an abbr for a shorthand, then use that + if (shortAbbr[arg]) + arg = shortAbbr[arg] + + // make it an array, if it's a list of words + if (shorthands[arg] && !Array.isArray(shorthands[arg])) + shorthands[arg] = shorthands[arg].split(/\s+/) + + return shorthands[arg] +} diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/package.json b/deps/npm/node_modules/node-gyp/node_modules/nopt/package.json new file mode 100644 index 00000000000..12ed02da5a8 --- /dev/null +++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/package.json @@ -0,0 +1,34 @@ +{ + "name": "nopt", + "version": "5.0.0", + "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.", + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "main": "lib/nopt.js", + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "test": "tap test/*.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/npm/nopt.git" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "devDependencies": { + "tap": "^14.10.6" + }, + "files": [ + "bin", + "lib" + ], + "engines": { + "node": ">=6" + } +} diff --git a/deps/npm/node_modules/node-gyp/package.json b/deps/npm/node_modules/node-gyp/package.json index e795db18345..ecf4d8ae893 100644 --- a/deps/npm/node_modules/node-gyp/package.json +++ b/deps/npm/node_modules/node-gyp/package.json @@ -11,7 +11,7 @@ "bindings", "gyp" ], - "version": "9.0.0", + "version": "9.1.0", "installVersion": 9, "author": "Nathan Rajlich (http://tootallnate.net)", "repository": { @@ -45,6 +45,6 @@ }, "scripts": { "lint": "standard */*.js test/**/*.js", - "test": "npm run lint && tap --timeout=120 test/test-*" + "test": "npm run lint && tap --timeout=600 test/test-*" } } diff --git a/deps/npm/node_modules/node-gyp/test/fixtures/ca-bundle.crt b/deps/npm/node_modules/node-gyp/test/fixtures/ca-bundle.crt deleted file mode 100644 index fb1dea98a78..00000000000 --- a/deps/npm/node_modules/node-gyp/test/fixtures/ca-bundle.crt +++ /dev/null @@ -1,40 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDJjCCAg4CAhnOMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNVBAYTAlVTMQswCQYD -VQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZMBcGA1UECgwQU3Ryb25n -TG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRowGAYDVQQDDBFjYS5zdHJv -bmdsb29wLmNvbTAeFw0xNTEyMDgyMzM1MzNaFw00MzA0MjQyMzM1MzNaMBkxFzAV -BgNVBAMMDnN0cm9uZ2xvb3AuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAwOYI7OZ2FX/YjRgLZoDQlbPc5UZXU/j0e1wwiJNPtPEax9Y5Uoza0Pnt -Ikzkc2SfvQ+IJrhXo385tI0W5juuqbHnE7UrjUuPjUX6NHevkxcs/flmjan5wnZM -cPsGhH71WDuUEEflvZihf2Se2x+xgZtMhc5XGmVmRuZFYKvkgUhA2/w8/QrK+jPT -n9QRJxZjWNh2RBdC1B7u4jffSmOSUljYFH1I2eTeY+Rdi6YUIYSU9gEoZxsv3Tia -SomfMF5jt2Mouo6MzA+IhLvvFjcrcph1Qxgi9RkfdCMMd+Ipm9YWELkyG1bDRpQy -0iyHD4gvVsAqz1Y2KdRSdc3Kt+nTqwIDAQABoxkwFzAVBgNVHREEDjAMhwQAAAAA -hwR/AAABMA0GCSqGSIb3DQEBBQUAA4IBAQAhy4J0hML3NgmDRHdL5/iTucBe22Mf -jJjg2aifD1S187dHm+Il4qZNO2plWwAhN0h704f+8wpsaALxUvBIu6nvlvcMP5PH -jGN5JLe2Km3UaPvYOQU2SgacLilu+uBcIo2JSHLV6O7ziqUj5Gior6YxDLCtEZie -Ea8aX5/YjuACtEMJ1JjRqjgkM66XAoUe0E8onOK3FgTIO3tGoTJwRp0zS50pFuP0 -PsZtT04ck6mmXEXXknNoAyBCvPypfms9OHqcUIW9fiQnrGbS/Ri4QSQYj0DtFk/1 -na4fY1gf3zTHxH8259b/TOOaPfTnCEsOQtjUrWNR4xhmVZ+HJy4yytUW ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDbzCCAlcCAmm6MA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNVBAYTAlVTMQswCQYD -VQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZMBcGA1UECgwQU3Ryb25n -TG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRowGAYDVQQDDBFjYS5zdHJv -bmdsb29wLmNvbTAeFw0xNTEyMDgyMzM1MzNaFw00MzA0MjQyMzM1MzNaMH0xCzAJ -BgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZ -MBcGA1UECgwQU3Ryb25nTG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRow -GAYDVQQDDBFjYS5zdHJvbmdsb29wLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBANfj86jkvvYDjHBgiqWhk9Cj+bqiMq3MqnV0CBO4iuK33Fo6XssE -H+yVdXlIBFbFe6t655MdBVOR2Sfj7WqNh96vhu6PyDHiwcQlTaiLU6nhIed1J4Wv -lvnJHFmp8Wbtx5AgLT4UYu03ftvXEl2DLi3vhSL2tRM1ebXHB/KPbRWkb25DPX0P -foOHot3f2dgNe2x6kponf7E/QDmAu3s7Nlkfh+ryDhgGU7wocXEhXbprNqRqOGNo -xbXgUI+/9XDxYT/7Gn5LF/fPjtN+aB0SKMnTsDhprVlZie83mlqJ46fOOrR+vrsQ -mi/1m/TadrARtZoIExC/cQRdVM05EK4tUa8CAwEAATANBgkqhkiG9w0BAQsFAAOC -AQEAQ7k5WhyhDTIGYCNzRnrMHWSzGqa1y4tJMW06wafJNRqTm1cthq1ibc6Hfq5a -K10K0qMcgauRTfQ1MWrVCTW/KnJ1vkhiTOH+RvxapGn84gSaRmV6KZen0+gMsgae -KEGe/3Hn+PmDVV+PTamHgPACfpTww38WHIe/7Ce9gHfG7MZ8cKHNZhDy0IAYPln+ -YRwMLd7JNQffHAbWb2CE1mcea4H/12U8JZW5tHCF6y9V+7IuDzqwIrLKcW3lG17n -VUG6ODF/Ryqn3V5X+TL91YyXi6c34y34IpC7MQDV/67U7+5Bp5CfeDPWW2wVSrW+ -uGZtfEvhbNm6m2i4UNmpCXxUZQ== ------END CERTIFICATE----- diff --git a/deps/npm/node_modules/node-gyp/test/fixtures/ca.crt b/deps/npm/node_modules/node-gyp/test/fixtures/ca.crt deleted file mode 100644 index aaf97575b18..00000000000 --- a/deps/npm/node_modules/node-gyp/test/fixtures/ca.crt +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDZDCCAkwCCQCAzfCLqrJvuTANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJV -UzELMAkGA1UECAwCQ0ExEDAOBgNVBAoMB05vZGUuanMxETAPBgNVBAsMCG5vZGUt -Z3lwMRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEGJ1aWxkQG5v -ZGVqcy5vcmcwHhcNMTkwNjIyMDYyMjMzWhcNMjIwNDExMDYyMjMzWjB0MQswCQYD -VQQGEwJVUzELMAkGA1UECAwCQ0ExEDAOBgNVBAoMB05vZGUuanMxETAPBgNVBAsM -CG5vZGUtZ3lwMRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEGJ1 -aWxkQG5vZGVqcy5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDS -CHjvtVW4HdbbUwZ/ZV9s6U4x0KSoyNQrsCZjB8kRpFPe50DS5mfmu2SNBGYKRgzk -4QEEwFB9N2o8YTWsCefSRl6ti4ToPZqulU4hhRKYrEGtMJcRzi3IN7s200JaO3UH -01Su8ruO0NESb5zEU1Ykfh8Lub8TGEAINmgI61d/5d5Aq3kDjUHQJt1Ekw03Ylnu -juQyCGZxLxnngu0mIvwzyL/UeeUgsfQLzvppUk6In7tC1zzMjSPWo0c8qu6KvrW4 -bKYnkZkzdQifzbpO5ERMEsh5HWq0uHa6+dgcVHFvlhdqF4Uat87ygNplVf0txsZB -MNVqbz1k6xkZYMnzDoydAgMBAAEwDQYJKoZIhvcNAQELBQADggEBADspZGtKpWxy -J1W3FA1aeQhMvequQTcMRz4avkm4K4HfTdV1iVD4CbvdezBphouBlyLVLDFJP7RZ -m7dBJVgBwnxufoFLne8cR2MGqDRoySbFT1AtDJdxabE6Fg+QGUpgOQfeBJ6ANlSB -+qJ+HG4QA+Ouh5hxz9mgYwkIsMUABHiwENdZ/kT8Edw4xKgd3uH0YP4iiePMD66c -rzW3uXH5J1jnKgBlpxtog4P6dHCcoq+PZJ17W5bdXNyqC1LPzQqniZ2BNcEZ4ix3 -slAZAOWD1zLLGJhBPMV1fa0sHNBWc6oicr3YK/IDb0cp9kiLvnUu1pHy+LWQGqtC -rceJuGsnJEQ= ------END CERTIFICATE----- diff --git a/deps/npm/node_modules/node-gyp/test/fixtures/certs.js b/deps/npm/node_modules/node-gyp/test/fixtures/certs.js new file mode 100644 index 00000000000..766e54b5ed3 --- /dev/null +++ b/deps/npm/node_modules/node-gyp/test/fixtures/certs.js @@ -0,0 +1,150 @@ +module.exports['ca.key'] = ` +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAtTbG0k2UFUyCdZuip0TTEtXRHh57qosegrpHPBreSNTxt7OT +KfOUZp2rToTHeN9w0ZbV2eKRI5AuFx8Cmlm73/KIHKzSNTBATGMeeHnGaxvL/W/s +KJdTDRNf7/qCXHQ+gsuEWWCFzOZuHmmAQa2IBX2HAQTqXJI8+2iJ9gytFfJLxjqy +6O4u9ugZVHSyQJWs49tGRcWMlNm7EMStADFvJn3S11xe/kwIA2mSI/eddDnzL0Mx +AkR9dQBL66xOABLL5v3QQdhipfHluX6HLbDd/1YsFTuOpgvLRlr72rTAFrQZCokV +hXPiqstn5zJFW5arHakvMR0+OPaICF5feh/4qQIDAQABAoIBAHWg6exnWUF+GY0Y +CrwDS/QFASpI5UNt7M809bqJQlMKjyEMmvF3YJQ/soxUWlsWx1f1TjmR/V6VX6W4 +hmsE5pRXDY13jTfja0lqacQQYAD02TRY63XpzIpHUlYnSWmUN2OVkgKmShQYW9C3 +8P4xE4Nk2TaLJ0oRzy3uzOb/kXcVaJfknBRUnOhuaTSs+w4l4pPXueYA7xuHgVsL +Qq0S4kK+PmdwCMB7gzlAAQhCM3vQ1U4cjC9JIIKSmPy7BcvD0kBfVPIFQ2byGpA1 +VkWBLSyeig0YxA5oIshK5cLiDIfBIiCSEzm4AMhVhGf0tbGEwiPljxKjbarYUUIi +ATMk83UCgYEA7kKeOveuPbMqxmT42swfa9OU5jLUjH+VExU0Kv3BbEjv/OGt0fac +/cs1Ze3vnrtCHudVajocFjydb8B4c62DbA4/T+LcUw/HaMaORbOoICQidi/zZ1Lj +gjg8Ip2WKXEhSAwqUpaFd6w16NZOxiTh+NDaRKywwbe8j57eDH4uR6MCgYEAwrTS +q5ra6+WDGUFMs0y3GMbL8j14PGhxBQBYSTM//NysI+EM6eeKn1cV3BbphEw//jgE +0pVokkjvLAQWWEG2dZyRxRE3YAMgOAIPx5zbJCim3iBVuoqY9ckLg2jF8Fqqubsb +3Rf2/Xzn/rFqsXdhsjGcJpdN66T9aEjwEkAnc0MCgYA5cOYk4UGormFJo147oaqR +nFjxhp+nn7qY9yu0kajoKk1xchct337J0Qv2nv5+DjdKrArzqT7MPaDXKFfhy5s7 +mdO5tr/XZp50rCnws/d8iDmmtLjB2EHxSw10avmg1B1p+UTa1F8pEuOMVt529r1j +9zYoCFo02c8j8PEnoeQWcQKBgQCVBCuQZu5SSM/zTkTTnU0sy0lf1qflI9IMD92B ++JVqg8HDnAR0KF+x38a9MVP7ixgXCuy19t+XxfY269HmLjTlArWV671D4GCSPRGy +plwZ6nr72ieCo3y57+q94jxL3jh3+bozlpnUG/q6tTKBLGs7JDjsWDSsuxOu8tO6 +RBttXQKBgB6LQFOTjDMfsFHKsnQXFUZId3GG/iLg3WCWxEo88T5Rq3JIR0zDpW8H +cKhl/sPY+JVHsxizNCMPtp7Hn7GrB6D/v9LbO0jpG2U0BFiJ6zhiDopbP9B0EAW4 +5JJ+JGKRKoCxs3DmSVyns0gU4j4rVte97UWyVy5TZ8Acr/qrgOA1 +-----END RSA PRIVATE KEY----- +` + +module.exports['ca.crt'] = ` +-----BEGIN CERTIFICATE----- +MIIDmzCCAoOgAwIBAgIUDA0GrvcnG41XT6LYFeNwvq8YV1UwDQYJKoZIhvcNAQEL +BQAwXTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRAwDgYDVQQKDAdOb2RlLmpz +MREwDwYDVQQLDAhub2RlLWd5cDEcMBoGA1UEAwwTbm9kZS1neXAubm9kZWpzLm9y +ZzAeFw0yMjA1MTEwNDIyMjRaFw00OTA5MjUwNDIyMjRaMF0xCzAJBgNVBAYTAlVT +MQswCQYDVQQIDAJDQTEQMA4GA1UECgwHTm9kZS5qczERMA8GA1UECwwIbm9kZS1n +eXAxHDAaBgNVBAMME25vZGUtZ3lwLm5vZGVqcy5vcmcwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQC1NsbSTZQVTIJ1m6KnRNMS1dEeHnuqix6Cukc8Gt5I +1PG3s5Mp85RmnatOhMd433DRltXZ4pEjkC4XHwKaWbvf8ogcrNI1MEBMYx54ecZr +G8v9b+wol1MNE1/v+oJcdD6Cy4RZYIXM5m4eaYBBrYgFfYcBBOpckjz7aIn2DK0V +8kvGOrLo7i726BlUdLJAlazj20ZFxYyU2bsQxK0AMW8mfdLXXF7+TAgDaZIj9510 +OfMvQzECRH11AEvrrE4AEsvm/dBB2GKl8eW5foctsN3/ViwVO46mC8tGWvvatMAW +tBkKiRWFc+Kqy2fnMkVblqsdqS8xHT449ogIXl96H/ipAgMBAAGjUzBRMB0GA1Ud +DgQWBBT6LcYYABEOAMv4hI/5bC82rGlD/DAfBgNVHSMEGDAWgBT6LcYYABEOAMv4 +hI/5bC82rGlD/DAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA9 +D+qoKw0njub+NaFRS2DFbSiKb5JKTxVjU5aNusFONFLSXBuRpnYyjjkXpJy8JMWz +g8GFDEPP6kiSb8xaPNrFcUzb4PFzJabNTuaLJpBpd2gNBj5AeYwwpRa2DPv/b4yw +y2mfULuCWS09ZAguI2OcaARlAsFxYN0IuQ6pN1AvGFGee67ve9l2VF/hhwEi4lCk +MM0CWlP6COJ8TX7X0MTtexVOgo9m3hBuTSYEZClYFIdSOk10xkPl8Y3Iz/x6mzfK +Uu2l2ZtYvSdAX1CQMds3ZWt0ChNNEjOKPv4g2QSDhGkiqrmi4wUS81g68wKqOpqn +GbN8uKxIfyMjqZKaujPR +-----END CERTIFICATE----- +` + +module.exports['server.key'] = ` +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAvPM99BkYrBcTM355dhz4XzhSDRGxa9qttUlBSgEsbu2UjsRm +XjDS+60XXd66tWpPwLeUd2uvlC/ltv5ekv+EBu35j1KfA1+K1rtFzb1i40kMCsns +OoXjgpsN2wvkxMdFkT2bkqKCS6X0xzlWea1t4poKh9iG7n3otk4RzPNawfwQ9W5n +o9/8i6AUwDbuK4dhAId/Inw2aKrMyQ+AiSvsDM2wUMq+pV7nP46f7MhR4xiGz14z +ATFdjM3Oo/1NKrr0WgVM6i0eNAtuIDqIs8YE7SfODe/SzpJySxewutfYi62OaLh/ +hmWByj/pF5SoNMLyJHxn4GyKK+Qle9NJAThLiwIDAQABAoIBAQCZs4h/Cvct7etZ +pRUqxnAoDQl5xh28LXvGj1uD1qaNacfBxvO6xR6rSedLHcZlkqBjlTI5XqjJ85h6 +njrSevWsKWMrejsNpGetO1OSA+/wEVixYgY+qPEkKftAZ1Fl3O+zMRlfU8CHxuzy +Lqsweap8fW/5h2JjmJp3ydPjE0aNqpQ+0LtYBBawKDIe2zPNOmTPwz3D8qJNQJKU +Qdj08dO/vPZncllPagGvpqhfv4hMyNChr71eBbEFsi3O5VJxfZyj+fQG0DGocr/y +sV54HtYk5j06wMxZFLQtaJn+1pOXquZMNwodSPnbrR/+CI1SZeB8N6VyqqOdmrDz +5NbfGJiRAoGBAPrCuQxJwgc2MzpEtrXA4+1uuV8QWGy3+wNKxKw4lgyC7peXXrVK +l9FkOOAPr8puPRABgDS9t6vo59BAP3Wrx0oJ9PA/Qn03WYLfJMepWqlK7ni9kS04 +5owRTduK7P190sp0m6iicsnchGSSOchECwB5UmtHysEFiuY0T+0pdNbjAoGBAMDl +57lwZDfNTGGDxLQYVzbrXgKcD60DW9MhvH3uso6cw5NYs3tmENCh9D6YrCNN4PmL +zdp4dKbOFoGJdy22TK31nrezUuNKSK+QKH2gsmNVI+a5QokNO1Cfk+PMLoOR5du2 +nwyVvzdaBwuXU4fhmwvLv/SCFNEJ0EgUILeMETE5AoGBAIwLXf9v3e3bJkb/gy8E +mAbNVLez0D5/ja9r/WTVgW9hXFDLF/iVvS4TE/SGrj2WzYF35RsPbVmUDIrwpsBX +/EfsQaA/JCn8VIBTkR31Bg4QLBjAfijMY22MaHgZIXv83lF1SE2o1ATKpCHqzFx9 +K8vK9e22PZUJPGaOhqjEA13TAoGAEPipSJFw38/6NmInfkjd84EFxmkAoBI5k/vV +36aOoyl7s40MTYEPXavCF3fLPVfuwUXhmKUcbkiXhlIX4De3y15e1n66fjDc8EVY +qqTmzQKCpBwMlI5Ld65yjoo6VW0SsiABIlRSfIY5NHXd7YiV4ZXNj6+aMUIRxyWu +Mzfpk1ECgYBZw8lML+F8XbcmCLGYuicf0V/wgFaJr8nnPeW7AiQrv13Ju1ItEaC8 +Tz8F7OfC+FoUb0MGjXHKquDVBDs4xSuS+Ol+rlZEK68ALpm8sUgp6YjARYiXlprs +6o4kN0P5F+DVU2SP6fo9zKLCxaTH9VAQ9C3VUViGAFLBt4DVDmj77g== +-----END RSA PRIVATE KEY----- +` + +module.exports['server.crt'] = ` +-----BEGIN CERTIFICATE----- +MIIDNzCCAh8CFBg1Ph5t5rBlAbCrEn/PexNy9WunMA0GCSqGSIb3DQEBCwUAMF0x +CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEQMA4GA1UECgwHTm9kZS5qczERMA8G +A1UECwwIbm9kZS1neXAxHDAaBgNVBAMME25vZGUtZ3lwLm5vZGVqcy5vcmcwHhcN +MjIwNTExMDQyMjI0WhcNMjMwOTIzMDQyMjI0WjBTMQswCQYDVQQGEwJVUzELMAkG +A1UECAwCQ0ExEDAOBgNVBAoMB05vZGUuanMxETAPBgNVBAsMCG5vZGUtZ3lwMRIw +EAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQC88z30GRisFxMzfnl2HPhfOFINEbFr2q21SUFKASxu7ZSOxGZeMNL7rRdd3rq1 +ak/At5R3a6+UL+W2/l6S/4QG7fmPUp8DX4rWu0XNvWLjSQwKyew6heOCmw3bC+TE +x0WRPZuSooJLpfTHOVZ5rW3imgqH2Ibufei2ThHM81rB/BD1bmej3/yLoBTANu4r +h2EAh38ifDZoqszJD4CJK+wMzbBQyr6lXuc/jp/syFHjGIbPXjMBMV2Mzc6j/U0q +uvRaBUzqLR40C24gOoizxgTtJ84N79LOknJLF7C619iLrY5ouH+GZYHKP+kXlKg0 +wvIkfGfgbIor5CV700kBOEuLAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAEhaNEye +JsE4eG1xaGmHq7w9eV0neOaZ58XCuF1sSEMIy9uMnl3aOdctxh/1SYkqJyMct79q +Ra2UZ6mauRlOeqdHb+HZKrFYYUOtd1HOWWJ44Gaya2EQMiTbd/Ns9Th2KTbTOCbL +CHFNska9Ty2ioT7VcrVuIEXFPMua5T4lnCkNJQla800pHHOak2baN/c66Io+8XI2 +xiqaVrLT3qvpzdiiEjo4POeRnWMIgJJshy77Am5JlhaJiAqP1AHfh/tYpliGkjXF +8DSgSoLHSQfalJ4VQvP4XLc/XnmF5Zt6bvwUxCllEBFRneU74bW7/euYX/TpYobr +Y+YM7fGiCqwHdUs= +-----END CERTIFICATE----- +` + +module.exports['ca-bundle.crt'] = ` +-----BEGIN CERTIFICATE----- +MIIDJjCCAg4CAhnOMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNVBAYTAlVTMQswCQYD +VQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZMBcGA1UECgwQU3Ryb25n +TG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRowGAYDVQQDDBFjYS5zdHJv +bmdsb29wLmNvbTAeFw0xNTEyMDgyMzM1MzNaFw00MzA0MjQyMzM1MzNaMBkxFzAV +BgNVBAMMDnN0cm9uZ2xvb3AuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAwOYI7OZ2FX/YjRgLZoDQlbPc5UZXU/j0e1wwiJNPtPEax9Y5Uoza0Pnt +Ikzkc2SfvQ+IJrhXo385tI0W5juuqbHnE7UrjUuPjUX6NHevkxcs/flmjan5wnZM +cPsGhH71WDuUEEflvZihf2Se2x+xgZtMhc5XGmVmRuZFYKvkgUhA2/w8/QrK+jPT +n9QRJxZjWNh2RBdC1B7u4jffSmOSUljYFH1I2eTeY+Rdi6YUIYSU9gEoZxsv3Tia +SomfMF5jt2Mouo6MzA+IhLvvFjcrcph1Qxgi9RkfdCMMd+Ipm9YWELkyG1bDRpQy +0iyHD4gvVsAqz1Y2KdRSdc3Kt+nTqwIDAQABoxkwFzAVBgNVHREEDjAMhwQAAAAA +hwR/AAABMA0GCSqGSIb3DQEBBQUAA4IBAQAhy4J0hML3NgmDRHdL5/iTucBe22Mf +jJjg2aifD1S187dHm+Il4qZNO2plWwAhN0h704f+8wpsaALxUvBIu6nvlvcMP5PH +jGN5JLe2Km3UaPvYOQU2SgacLilu+uBcIo2JSHLV6O7ziqUj5Gior6YxDLCtEZie +Ea8aX5/YjuACtEMJ1JjRqjgkM66XAoUe0E8onOK3FgTIO3tGoTJwRp0zS50pFuP0 +PsZtT04ck6mmXEXXknNoAyBCvPypfms9OHqcUIW9fiQnrGbS/Ri4QSQYj0DtFk/1 +na4fY1gf3zTHxH8259b/TOOaPfTnCEsOQtjUrWNR4xhmVZ+HJy4yytUW +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDbzCCAlcCAmm6MA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNVBAYTAlVTMQswCQYD +VQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZMBcGA1UECgwQU3Ryb25n +TG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRowGAYDVQQDDBFjYS5zdHJv +bmdsb29wLmNvbTAeFw0xNTEyMDgyMzM1MzNaFw00MzA0MjQyMzM1MzNaMH0xCzAJ +BgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZ +MBcGA1UECgwQU3Ryb25nTG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRow +GAYDVQQDDBFjYS5zdHJvbmdsb29wLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANfj86jkvvYDjHBgiqWhk9Cj+bqiMq3MqnV0CBO4iuK33Fo6XssE +H+yVdXlIBFbFe6t655MdBVOR2Sfj7WqNh96vhu6PyDHiwcQlTaiLU6nhIed1J4Wv +lvnJHFmp8Wbtx5AgLT4UYu03ftvXEl2DLi3vhSL2tRM1ebXHB/KPbRWkb25DPX0P +foOHot3f2dgNe2x6kponf7E/QDmAu3s7Nlkfh+ryDhgGU7wocXEhXbprNqRqOGNo +xbXgUI+/9XDxYT/7Gn5LF/fPjtN+aB0SKMnTsDhprVlZie83mlqJ46fOOrR+vrsQ +mi/1m/TadrARtZoIExC/cQRdVM05EK4tUa8CAwEAATANBgkqhkiG9w0BAQsFAAOC +AQEAQ7k5WhyhDTIGYCNzRnrMHWSzGqa1y4tJMW06wafJNRqTm1cthq1ibc6Hfq5a +K10K0qMcgauRTfQ1MWrVCTW/KnJ1vkhiTOH+RvxapGn84gSaRmV6KZen0+gMsgae +KEGe/3Hn+PmDVV+PTamHgPACfpTww38WHIe/7Ce9gHfG7MZ8cKHNZhDy0IAYPln+ +YRwMLd7JNQffHAbWb2CE1mcea4H/12U8JZW5tHCF6y9V+7IuDzqwIrLKcW3lG17n +VUG6ODF/Ryqn3V5X+TL91YyXi6c34y34IpC7MQDV/67U7+5Bp5CfeDPWW2wVSrW+ +uGZtfEvhbNm6m2i4UNmpCXxUZQ== +-----END CERTIFICATE----- +` diff --git a/deps/npm/node_modules/node-gyp/test/fixtures/server.crt b/deps/npm/node_modules/node-gyp/test/fixtures/server.crt deleted file mode 100644 index 5d0c440e078..00000000000 --- a/deps/npm/node_modules/node-gyp/test/fixtures/server.crt +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDYjCCAkoCCQCSlmGR7KzZGTANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJV -UzELMAkGA1UECAwCQ0ExEDAOBgNVBAoMB05vZGUuanMxETAPBgNVBAsMCG5vZGUt -Z3lwMRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEGJ1aWxkQG5v -ZGVqcy5vcmcwHhcNMTkwNjIyMDYyNTU1WhcNMjkwNjE5MDYyNTU1WjByMQswCQYD -VQQGEwJVUzELMAkGA1UECAwCQ0ExEDAOBgNVBAoMB05vZGUuanMxETAPBgNVBAsM -CG5vZGUtZ3lwMRIwEAYDVQQDDAlsb2NhbGhvc3QxHTAbBgkqhkiG9w0BCQEWDmJ1 -aWxkQGlvanMub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6S1E -2WchgmbJYqCnpN7310ZgHjIOqeJe6MpSue2u6z6mTNd5izgvQNaANmn3xLFCS5zs -uZaTvdPYPkcmSQzb1YcZSUYnAxZifjYARc6kb5GSBl3q+O70ELyFrimXfZ4JI+bd -IG9KiHY17DlvZZZj/csGYVWWg0mkeH3O5LPX6/DXQVh/9+gZ02/cdIBCAtZHQwqx -7tF/qZA/kD4GZNFpU1DYHzf9H6g9htoCqmNHQWrV2T9yFybt6mbZp9kglBmyKYCc -7hmQnb7N/mHn1yIuwhBsirCJTfKH86gN81u8M3+SVHA2VUHDllcNhpDWlmInXA+I -tHdGZHCp95ohqpCPgQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCdvYj6CD0ZLwT2 -3t1r+deC3TJuHlNVSeKeT7wIfFnh2FW5riGV0q/w6eXPLTHjuiS6YmpAAbdNUgX/ -sq64FqI2RLpX6pgY5yB0SKopMcJxMLKqmF4zHpIHxtYN5EmN3PR0vehneBR/nZ2T -3ikvWD5JeXlm7Dfw+tjijdxM/sEoDWErGup4mMKMd1s5s830p+ITJUa50d0DLFdH -mqPSbUZF8mMPwGJd+nu1Ht3gTLtK7+gYJgGtXMJmGC0Qg77EJHDB2NbotgDGNmSU -1H9BpAeFHHIcbh2Rr7kkTvnh/c03vFe+CsDZmezcmRpRzW1fKj3YbfqBxU4XwJrL -a5T/N9xU ------END CERTIFICATE----- diff --git a/deps/npm/node_modules/node-gyp/test/fixtures/server.key b/deps/npm/node_modules/node-gyp/test/fixtures/server.key deleted file mode 100644 index a8447391e02..00000000000 --- a/deps/npm/node_modules/node-gyp/test/fixtures/server.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA6S1E2WchgmbJYqCnpN7310ZgHjIOqeJe6MpSue2u6z6mTNd5 -izgvQNaANmn3xLFCS5zsuZaTvdPYPkcmSQzb1YcZSUYnAxZifjYARc6kb5GSBl3q -+O70ELyFrimXfZ4JI+bdIG9KiHY17DlvZZZj/csGYVWWg0mkeH3O5LPX6/DXQVh/ -9+gZ02/cdIBCAtZHQwqx7tF/qZA/kD4GZNFpU1DYHzf9H6g9htoCqmNHQWrV2T9y -Fybt6mbZp9kglBmyKYCc7hmQnb7N/mHn1yIuwhBsirCJTfKH86gN81u8M3+SVHA2 -VUHDllcNhpDWlmInXA+ItHdGZHCp95ohqpCPgQIDAQABAoIBABW8R4ewalo6dJlB -+n6O3jFt+PW3mtBRLqGqgm2cb0q0a1IMX+MPWLBFjmwEErl+AH0F4rcmBx2Ryr17 -amEy1qcf0caXyHksNAApznqzWXag7iizxnxv4cZRnHBwphNqkNWM5p3oYd04j6w2 -amDg1O9KZozaKo6QZclpiMiezwjKG+PVZLT8p7afswjv+yDWPDByhlcGiye9QD1T -VuZ0QCoXp6N/8JxW0gdkLp9NqFvGeGFzJ5h6L+d7A6BWw8akXrBRHHcKkyvVYBfd -myhSzSK4FPFMaxaEY/65FlVSyAO6ezGm3Umx4g7mkFjLdwKWaIOjkBkPeFgl3Pp4 -7Lo5X3UCgYEA/FrrIwmEU5ayulBVScEMKeavu5eNY4r0Sqbpov2oyTdYe8G49Pzy -ryMXfunY43moLKpajGwgTKRGvdqFtK08AAkaCssiAPkP3rZuZvMTF4sLo/vlWrjP -3er+tUqj22BzXi5XV0BAvH8Y3TL8KQ3he/8JxDvkC811/DQ9Y/Da3U8CgYEA7Itw -UM37URma08Bj9VTMoL9ZCyURewX+ZLDb2+O8sXGXJs28i1RkE6PTBlnRmedn+Jjk -byzQ5Cs5wA5uMbhYTA7kgXOs1bvgQqmlLmyL6FfHkucoMhr2Di7VeGf4OxE26JZ8 -JdY4+1MOyI3A2rR8WU+GmHxy0ay4K2xe6W0vsi8CgYBoGLEKIPDe8jkDtgOYivOT -jT9MaLXALB+dc8DIpU4swpHTaxP6qyUIrbcReTEolJSU6Ci16BxiwRkVU8D3yMYJ -VbfSX/zE3fh37FUaToa/nXHN0SjJBZdpeXhcHE//PIgaf48zxKNvnhYJmPB/luQ+ -m/PRaMsnOzfCM2JniYEe7QKBgGwjnxhB4tgDtaWCue/pcZc3gzS2IJS2e8N6mzie -l6Ajhu+FdOHZldrotUuc+la61OxwsVYmDeWR4VftAPGYDj3PPSX1RRl9R5wSRGLB -2wBASQvew6CMdNqtDIh8N56BUzHnwh/mHKzBHuwO6hDSHFsUITtLAY7bwGKRq55Z -fUmfAoGBANOYFyoJoDLcl+Jd750lyqfCifcGtkRdmZMtrPXaYnD8ZGme9vz1vsK/ -4iUkV3mi7Z9s1LXMa/tPPfKdVhCM1PXost3/si0+u1Bz5yKqEPXlyy2ltpIVyGu8 -yiy7y75asp8Iii/1cgtwyp9+VeSif8wJ+MHQoGdGxvAQP80R3EjF ------END RSA PRIVATE KEY----- diff --git a/deps/npm/node_modules/node-gyp/test/test-configure-python.js b/deps/npm/node_modules/node-gyp/test/test-configure-python.js index 4290e7af1bb..aacd75f7c72 100644 --- a/deps/npm/node_modules/node-gyp/test/test-configure-python.js +++ b/deps/npm/node_modules/node-gyp/test/test-configure-python.js @@ -14,7 +14,9 @@ const configure = requireInject('../lib/configure', { mkdir: function (dir, options, cb) { cb() }, promises: { writeFile: function (file, data) { return Promise.resolve(null) } - } + }, + unlink: function (path, cb) { cb() }, + symlink: function (target, path, cb) { cb() } } }) diff --git a/deps/npm/node_modules/node-gyp/test/test-download.js b/deps/npm/node_modules/node-gyp/test/test-download.js index 71a3c0d092d..c4caad9e834 100644 --- a/deps/npm/node_modules/node-gyp/test/test-download.js +++ b/deps/npm/node_modules/node-gyp/test/test-download.js @@ -12,6 +12,7 @@ const devDir = require('./common').devDir() const rimraf = require('rimraf') const gyp = require('../lib/node-gyp') const log = require('npmlog') +const certs = require('./fixtures/certs') log.level = 'warn' @@ -40,12 +41,12 @@ test('download over http', async (t) => { test('download over https with custom ca', async (t) => { t.plan(3) - const cafile = path.join(__dirname, '/fixtures/ca.crt') - const [cert, key, ca] = await Promise.all([ - fs.promises.readFile(path.join(__dirname, 'fixtures/server.crt'), 'utf8'), - fs.promises.readFile(path.join(__dirname, 'fixtures/server.key'), 'utf8'), - install.test.readCAFile(cafile) - ]) + const cafile = path.join(__dirname, 'fixtures/ca.crt') + const cacontents = certs['ca.crt'] + const cert = certs['server.crt'] + const key = certs['server.key'] + await fs.promises.writeFile(cafile, cacontents, 'utf8') + const ca = await install.test.readCAFile(cafile) t.strictEqual(ca.length, 1) @@ -55,7 +56,10 @@ test('download over https with custom ca', async (t) => { res.end('ok') }) - t.tearDown(() => new Promise((resolve) => server.close(resolve))) + t.tearDown(async () => { + await new Promise((resolve) => server.close(resolve)) + await fs.promises.unlink(cafile) + }) server.on('clientError', (err) => { throw err }) @@ -150,6 +154,12 @@ test('download with missing cafile', async (t) => { }) test('check certificate splitting', async (t) => { + const cafile = path.join(__dirname, 'fixtures/ca-bundle.crt') + const cacontents = certs['ca-bundle.crt'] + await fs.promises.writeFile(cafile, cacontents, 'utf8') + t.tearDown(async () => { + await fs.promises.unlink(cafile) + }) const cas = await install.test.readCAFile(path.join(__dirname, 'fixtures/ca-bundle.crt')) t.plan(2) t.strictEqual(cas.length, 2) diff --git a/deps/npm/node_modules/nopt/bin/nopt.js b/deps/npm/node_modules/nopt/bin/nopt.js index 3232d4c570f..bb04291c607 100755 --- a/deps/npm/node_modules/nopt/bin/nopt.js +++ b/deps/npm/node_modules/nopt/bin/nopt.js @@ -1,54 +1,56 @@ #!/usr/bin/env node -var nopt = require("../lib/nopt") - , path = require("path") - , types = { num: Number - , bool: Boolean - , help: Boolean - , list: Array - , "num-list": [Number, Array] - , "str-list": [String, Array] - , "bool-list": [Boolean, Array] - , str: String - , clear: Boolean - , config: Boolean - , length: Number - , file: path - } - , shorthands = { s: [ "--str", "astring" ] - , b: [ "--bool" ] - , nb: [ "--no-bool" ] - , tft: [ "--bool-list", "--no-bool-list", "--bool-list", "true" ] - , "?": ["--help"] - , h: ["--help"] - , H: ["--help"] - , n: [ "--num", "125" ] - , c: ["--config"] - , l: ["--length"] - , f: ["--file"] - } - , parsed = nopt( types - , shorthands - , process.argv - , 2 ) +var nopt = require('../lib/nopt') +var path = require('path') +var types = { num: Number, + bool: Boolean, + help: Boolean, + list: Array, + 'num-list': [Number, Array], + 'str-list': [String, Array], + 'bool-list': [Boolean, Array], + str: String, + clear: Boolean, + config: Boolean, + length: Number, + file: path, +} +var shorthands = { s: ['--str', 'astring'], + b: ['--bool'], + nb: ['--no-bool'], + tft: ['--bool-list', '--no-bool-list', '--bool-list', 'true'], + '?': ['--help'], + h: ['--help'], + H: ['--help'], + n: ['--num', '125'], + c: ['--config'], + l: ['--length'], + f: ['--file'], +} +var parsed = nopt(types + , shorthands + , process.argv + , 2) -console.log("parsed", parsed) +console.log('parsed', parsed) if (parsed.help) { - console.log("") - console.log("nopt cli tester") - console.log("") - console.log("types") + console.log('') + console.log('nopt cli tester') + console.log('') + console.log('types') console.log(Object.keys(types).map(function M (t) { var type = types[t] if (Array.isArray(type)) { - return [t, type.map(function (type) { return type.name })] + return [t, type.map(function (mappedType) { + return mappedType.name + })] } return [t, type && type.name] }).reduce(function (s, i) { s[i[0]] = i[1] return s }, {})) - console.log("") - console.log("shorthands") + console.log('') + console.log('shorthands') console.log(shorthands) } diff --git a/deps/npm/node_modules/nopt/lib/nopt.js b/deps/npm/node_modules/nopt/lib/nopt.js index ecfa5da9336..5829c2fe0f6 100644 --- a/deps/npm/node_modules/nopt/lib/nopt.js +++ b/deps/npm/node_modules/nopt/lib/nopt.js @@ -1,130 +1,147 @@ // info about each config option. var debug = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG - ? function () { console.error.apply(console, arguments) } + ? function () { + console.error.apply(console, arguments) + } : function () {} -var url = require("url") - , path = require("path") - , Stream = require("stream").Stream - , abbrev = require("abbrev") - , os = require("os") +var url = require('url') +var path = require('path') +var Stream = require('stream').Stream +var abbrev = require('abbrev') +var os = require('os') module.exports = exports = nopt exports.clean = clean exports.typeDefs = - { String : { type: String, validate: validateString } - , Boolean : { type: Boolean, validate: validateBoolean } - , url : { type: url, validate: validateUrl } - , Number : { type: Number, validate: validateNumber } - , path : { type: path, validate: validatePath } - , Stream : { type: Stream, validate: validateStream } - , Date : { type: Date, validate: validateDate } + { String: { type: String, validate: validateString }, + Boolean: { type: Boolean, validate: validateBoolean }, + url: { type: url, validate: validateUrl }, + Number: { type: Number, validate: validateNumber }, + path: { type: path, validate: validatePath }, + Stream: { type: Stream, validate: validateStream }, + Date: { type: Date, validate: validateDate }, } function nopt (types, shorthands, args, slice) { args = args || process.argv types = types || {} shorthands = shorthands || {} - if (typeof slice !== "number") slice = 2 + if (typeof slice !== 'number') { + slice = 2 + } debug(types, shorthands, args, slice) args = args.slice(slice) var data = {} - , key - , argv = { - remain: [], - cooked: args, - original: args.slice(0) - } + var argv = { + remain: [], + cooked: args, + original: args.slice(0), + } parse(args, data, argv.remain, types, shorthands) // now data is full clean(data, types, exports.typeDefs) data.argv = argv Object.defineProperty(data.argv, 'toString', { value: function () { - return this.original.map(JSON.stringify).join(" ") - }, enumerable: false }) + return this.original.map(JSON.stringify).join(' ') + }, + enumerable: false }) return data } function clean (data, types, typeDefs) { typeDefs = typeDefs || exports.typeDefs var remove = {} - , typeDefault = [false, true, null, String, Array] + var typeDefault = [false, true, null, String, Array] Object.keys(data).forEach(function (k) { - if (k === "argv") return + if (k === 'argv') { + return + } var val = data[k] - , isArray = Array.isArray(val) - , type = types[k] - if (!isArray) val = [val] - if (!type) type = typeDefault - if (type === Array) type = typeDefault.concat(Array) - if (!Array.isArray(type)) type = [type] - - debug("val=%j", val) - debug("types=", type) - val = val.map(function (val) { + var isArray = Array.isArray(val) + var type = types[k] + if (!isArray) { + val = [val] + } + if (!type) { + type = typeDefault + } + if (type === Array) { + type = typeDefault.concat(Array) + } + if (!Array.isArray(type)) { + type = [type] + } + + debug('val=%j', val) + debug('types=', type) + val = val.map(function (v) { // if it's an unknown value, then parse false/true/null/numbers/dates - if (typeof val === "string") { - debug("string %j", val) - val = val.trim() - if ((val === "null" && ~type.indexOf(null)) - || (val === "true" && + if (typeof v === 'string') { + debug('string %j', v) + v = v.trim() + if ((v === 'null' && ~type.indexOf(null)) + || (v === 'true' && (~type.indexOf(true) || ~type.indexOf(Boolean))) - || (val === "false" && + || (v === 'false' && (~type.indexOf(false) || ~type.indexOf(Boolean)))) { - val = JSON.parse(val) - debug("jsonable %j", val) - } else if (~type.indexOf(Number) && !isNaN(val)) { - debug("convert to number", val) - val = +val - } else if (~type.indexOf(Date) && !isNaN(Date.parse(val))) { - debug("convert to date", val) - val = new Date(val) + v = JSON.parse(v) + debug('jsonable %j', v) + } else if (~type.indexOf(Number) && !isNaN(v)) { + debug('convert to number', v) + v = +v + } else if (~type.indexOf(Date) && !isNaN(Date.parse(v))) { + debug('convert to date', v) + v = new Date(v) } } - if (!types.hasOwnProperty(k)) { - return val + if (!Object.prototype.hasOwnProperty.call(types, k)) { + return v } // allow `--no-blah` to set 'blah' to null if null is allowed - if (val === false && ~type.indexOf(null) && + if (v === false && ~type.indexOf(null) && !(~type.indexOf(false) || ~type.indexOf(Boolean))) { - val = null + v = null } var d = {} - d[k] = val - debug("prevalidated val", d, val, types[k]) - if (!validate(d, k, val, types[k], typeDefs)) { + d[k] = v + debug('prevalidated val', d, v, types[k]) + if (!validate(d, k, v, types[k], typeDefs)) { if (exports.invalidHandler) { - exports.invalidHandler(k, val, types[k], data) + exports.invalidHandler(k, v, types[k], data) } else if (exports.invalidHandler !== false) { - debug("invalid: "+k+"="+val, types[k]) + debug('invalid: ' + k + '=' + v, types[k]) } return remove } - debug("validated val", d, val, types[k]) + debug('validated v', d, v, types[k]) return d[k] - }).filter(function (val) { return val !== remove }) + }).filter(function (v) { + return v !== remove + }) // if we allow Array specifically, then an empty array is how we // express 'no value here', not null. Allow it. if (!val.length && type.indexOf(Array) === -1) { debug('VAL HAS NO LENGTH, DELETE IT', val, k, type.indexOf(Array)) delete data[k] - } - else if (isArray) { + } else if (isArray) { debug(isArray, data[k], val) data[k] = val - } else data[k] = val[0] + } else { + data[k] = val[0] + } - debug("k=%s val=%j", k, val, data[k]) + debug('k=%s val=%j', k, val, data[k]) }) } @@ -133,17 +150,21 @@ function validateString (data, k, val) { } function validatePath (data, k, val) { - if (val === true) return false - if (val === null) return true + if (val === true) { + return false + } + if (val === null) { + return true + } val = String(val) - var isWin = process.platform === 'win32' - , homePattern = isWin ? /^~(\/|\\)/ : /^~\// - , home = os.homedir() + var isWin = process.platform === 'win32' + var homePattern = isWin ? /^~(\/|\\)/ : /^~\// + var home = os.homedir() if (home && val.match(homePattern)) { - data[k] = path.resolve(home, val.substr(2)) + data[k] = path.resolve(home, val.slice(2)) } else { data[k] = path.resolve(val) } @@ -151,63 +172,92 @@ function validatePath (data, k, val) { } function validateNumber (data, k, val) { - debug("validate Number %j %j %j", k, val, isNaN(val)) - if (isNaN(val)) return false + debug('validate Number %j %j %j', k, val, isNaN(val)) + if (isNaN(val)) { + return false + } data[k] = +val } function validateDate (data, k, val) { var s = Date.parse(val) - debug("validate Date %j %j %j", k, val, s) - if (isNaN(s)) return false + debug('validate Date %j %j %j', k, val, s) + if (isNaN(s)) { + return false + } data[k] = new Date(val) } function validateBoolean (data, k, val) { - if (val instanceof Boolean) val = val.valueOf() - else if (typeof val === "string") { - if (!isNaN(val)) val = !!(+val) - else if (val === "null" || val === "false") val = false - else val = true - } else val = !!val + if (val instanceof Boolean) { + val = val.valueOf() + } else if (typeof val === 'string') { + if (!isNaN(val)) { + val = !!(+val) + } else if (val === 'null' || val === 'false') { + val = false + } else { + val = true + } + } else { + val = !!val + } data[k] = val } function validateUrl (data, k, val) { + // Changing this would be a breaking change in the npm cli + /* eslint-disable-next-line node/no-deprecated-api */ val = url.parse(String(val)) - if (!val.host) return false + if (!val.host) { + return false + } data[k] = val.href } function validateStream (data, k, val) { - if (!(val instanceof Stream)) return false + if (!(val instanceof Stream)) { + return false + } data[k] = val } function validate (data, k, val, type, typeDefs) { // arrays are lists of types. if (Array.isArray(type)) { - for (var i = 0, l = type.length; i < l; i ++) { - if (type[i] === Array) continue - if (validate(data, k, val, type[i], typeDefs)) return true + for (let i = 0, l = type.length; i < l; i++) { + if (type[i] === Array) { + continue + } + if (validate(data, k, val, type[i], typeDefs)) { + return true + } } delete data[k] return false } // an array of anything? - if (type === Array) return true + if (type === Array) { + return true + } + // Original comment: // NaN is poisonous. Means that something is not allowed. + // New comment: Changing this to an isNaN check breaks a lot of tests. + // Something is being assumed here that is not actually what happens in + // practice. Fixing it is outside the scope of getting linting to pass in + // this repo. Leaving as-is for now. + /* eslint-disable-next-line no-self-compare */ if (type !== type) { - debug("Poison NaN", k, val, type) + debug('Poison NaN', k, val, type) delete data[k] return false } // explicit list of values if (val === type) { - debug("Explicitly allowed %j", val) + debug('Explicitly allowed %j', val) // if (isArray) (data[k] = data[k] || []).push(val) // else data[k] = val data[k] = val @@ -216,14 +266,17 @@ function validate (data, k, val, type, typeDefs) { // now go through the list of typeDefs, validate against each one. var ok = false - , types = Object.keys(typeDefs) - for (var i = 0, l = types.length; i < l; i ++) { - debug("test type %j %j %j", k, val, types[i]) + var types = Object.keys(typeDefs) + for (let i = 0, l = types.length; i < l; i++) { + debug('test type %j %j %j', k, val, types[i]) var t = typeDefs[types[i]] - if (t && - ((type && type.name && t.type && t.type.name) ? (type.name === t.type.name) : (type === t.type))) { + if (t && ( + (type && type.name && t.type && t.type.name) ? + (type.name === t.type.name) : + (type === t.type) + )) { var d = {} - ok = false !== t.validate(d, k, val) + ok = t.validate(d, k, val) !== false val = d[k] if (ok) { // if (isArray) (data[k] = data[k] || []).push(val) @@ -233,60 +286,63 @@ function validate (data, k, val, type, typeDefs) { } } } - debug("OK? %j (%j %j %j)", ok, k, val, types[i]) + debug('OK? %j (%j %j %j)', ok, k, val, types[types.length - 1]) - if (!ok) delete data[k] + if (!ok) { + delete data[k] + } return ok } function parse (args, data, remain, types, shorthands) { - debug("parse", args, data, remain) + debug('parse', args, data, remain) - var key = null - , abbrevs = abbrev(Object.keys(types)) - , shortAbbr = abbrev(Object.keys(shorthands)) + var abbrevs = abbrev(Object.keys(types)) + var shortAbbr = abbrev(Object.keys(shorthands)) - for (var i = 0; i < args.length; i ++) { + for (var i = 0; i < args.length; i++) { var arg = args[i] - debug("arg", arg) + debug('arg', arg) if (arg.match(/^-{2,}$/)) { // done with keys. // the rest are args. remain.push.apply(remain, args.slice(i + 1)) - args[i] = "--" + args[i] = '--' break } var hadEq = false - if (arg.charAt(0) === "-" && arg.length > 1) { + if (arg.charAt(0) === '-' && arg.length > 1) { var at = arg.indexOf('=') if (at > -1) { hadEq = true - var v = arg.substr(at + 1) - arg = arg.substr(0, at) + var v = arg.slice(at + 1) + arg = arg.slice(0, at) args.splice(i, 1, arg, v) } // see if it's a shorthand // if so, splice and back up to re-parse it. var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs) - debug("arg=%j shRes=%j", arg, shRes) + debug('arg=%j shRes=%j', arg, shRes) if (shRes) { debug(arg, shRes) args.splice.apply(args, [i, 1].concat(shRes)) if (arg !== shRes[0]) { - i -- + i-- continue } } - arg = arg.replace(/^-+/, "") + arg = arg.replace(/^-+/, '') var no = null - while (arg.toLowerCase().indexOf("no-") === 0) { + while (arg.toLowerCase().indexOf('no-') === 0) { no = !no - arg = arg.substr(3) + arg = arg.slice(3) } - if (abbrevs[arg]) arg = abbrevs[arg] + if (abbrevs[arg]) { + arg = abbrevs[arg] + } var argType = types[arg] var isTypeArray = Array.isArray(argType) @@ -299,20 +355,24 @@ function parse (args, data, remain, types, shorthands) { isTypeArray && argType.indexOf(Array) !== -1 // allow unknown things to be arrays if specified multiple times. - if (!types.hasOwnProperty(arg) && data.hasOwnProperty(arg)) { - if (!Array.isArray(data[arg])) + if ( + !Object.prototype.hasOwnProperty.call(types, arg) && + Object.prototype.hasOwnProperty.call(data, arg) + ) { + if (!Array.isArray(data[arg])) { data[arg] = [data[arg]] + } isArray = true } var val - , la = args[i + 1] + var la = args[i + 1] var isBool = typeof no === 'boolean' || argType === Boolean || isTypeArray && argType.indexOf(Boolean) !== -1 || (typeof argType === 'undefined' && !hadEq) || - (la === "false" && + (la === 'false' && (argType === null || isTypeArray && ~argType.indexOf(null))) @@ -320,11 +380,13 @@ function parse (args, data, remain, types, shorthands) { // just set and move along val = !no // however, also support --bool true or --bool false - if (la === "true" || la === "false") { + if (la === 'true' || la === 'false') { val = JSON.parse(la) la = null - if (no) val = !val - i ++ + if (no) { + val = !val + } + i++ } // also support "foo":[Boolean, "bar"] and "--foo bar" @@ -332,49 +394,55 @@ function parse (args, data, remain, types, shorthands) { if (~argType.indexOf(la)) { // an explicit type val = la - i ++ - } else if ( la === "null" && ~argType.indexOf(null) ) { + i++ + } else if (la === 'null' && ~argType.indexOf(null)) { // null allowed val = null - i ++ - } else if ( !la.match(/^-{2,}[^-]/) && + i++ + } else if (!la.match(/^-{2,}[^-]/) && !isNaN(la) && - ~argType.indexOf(Number) ) { + ~argType.indexOf(Number)) { // number val = +la - i ++ - } else if ( !la.match(/^-[^-]/) && ~argType.indexOf(String) ) { + i++ + } else if (!la.match(/^-[^-]/) && ~argType.indexOf(String)) { // string val = la - i ++ + i++ } } - if (isArray) (data[arg] = data[arg] || []).push(val) - else data[arg] = val + if (isArray) { + (data[arg] = data[arg] || []).push(val) + } else { + data[arg] = val + } continue } if (argType === String) { if (la === undefined) { - la = "" + la = '' } else if (la.match(/^-{1,2}[^-]+/)) { - la = "" - i -- + la = '' + i-- } } if (la && la.match(/^-{2,}$/)) { la = undefined - i -- + i-- } val = la === undefined ? true : la - if (isArray) (data[arg] = data[arg] || []).push(val) - else data[arg] = val + if (isArray) { + (data[arg] = data[arg] || []).push(val) + } else { + data[arg] = val + } - i ++ + i++ continue } remain.push(arg) @@ -389,14 +457,16 @@ function resolveShort (arg, shorthands, shortAbbr, abbrevs) { arg = arg.replace(/^-+/, '') // if it's an exact known option, then don't go any further - if (abbrevs[arg] === arg) + if (abbrevs[arg] === arg) { return null + } // if it's an exact known shortopt, same deal if (shorthands[arg]) { // make it an array, if it's a list of words - if (shorthands[arg] && !Array.isArray(shorthands[arg])) + if (shorthands[arg] && !Array.isArray(shorthands[arg])) { shorthands[arg] = shorthands[arg].split(/\s+/) + } return shorthands[arg] } @@ -406,7 +476,7 @@ function resolveShort (arg, shorthands, shortAbbr, abbrevs) { if (!singles) { singles = Object.keys(shorthands).filter(function (s) { return s.length === 1 - }).reduce(function (l,r) { + }).reduce(function (l, r) { l[r] = true return l }, {}) @@ -414,28 +484,32 @@ function resolveShort (arg, shorthands, shortAbbr, abbrevs) { debug('shorthand singles', singles) } - var chrs = arg.split("").filter(function (c) { + var chrs = arg.split('').filter(function (c) { return singles[c] }) - if (chrs.join("") === arg) return chrs.map(function (c) { - return shorthands[c] - }).reduce(function (l, r) { - return l.concat(r) - }, []) - + if (chrs.join('') === arg) { + return chrs.map(function (c) { + return shorthands[c] + }).reduce(function (l, r) { + return l.concat(r) + }, []) + } // if it's an arg abbrev, and not a literal shorthand, then prefer the arg - if (abbrevs[arg] && !shorthands[arg]) + if (abbrevs[arg] && !shorthands[arg]) { return null + } // if it's an abbr for a shorthand, then use that - if (shortAbbr[arg]) + if (shortAbbr[arg]) { arg = shortAbbr[arg] + } // make it an array, if it's a list of words - if (shorthands[arg] && !Array.isArray(shorthands[arg])) + if (shorthands[arg] && !Array.isArray(shorthands[arg])) { shorthands[arg] = shorthands[arg].split(/\s+/) + } return shorthands[arg] } diff --git a/deps/npm/node_modules/nopt/package.json b/deps/npm/node_modules/nopt/package.json index 12ed02da5a8..a3cd13d8c71 100644 --- a/deps/npm/node_modules/nopt/package.json +++ b/deps/npm/node_modules/nopt/package.json @@ -1,14 +1,20 @@ { "name": "nopt", - "version": "5.0.0", + "version": "6.0.0", "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.", - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "author": "GitHub Inc.", "main": "lib/nopt.js", "scripts": { "preversion": "npm test", "postversion": "npm publish", "prepublishOnly": "git push origin --follow-tags", - "test": "tap test/*.js" + "test": "tap", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force", + "lintfix": "npm run lint -- --fix", + "snap": "tap", + "posttest": "npm run lint" }, "repository": { "type": "git", @@ -19,16 +25,29 @@ }, "license": "ISC", "dependencies": { - "abbrev": "1" + "abbrev": "^1.0.0" }, "devDependencies": { - "tap": "^14.10.6" + "@npmcli/eslint-config": "^3.0.1", + "@npmcli/template-oss": "3.5.0", + "tap": "^16.3.0" + }, + "tap": { + "lines": 87, + "functions": 91, + "branches": 81, + "statements": 87 }, "files": [ - "bin", - "lib" + "bin/", + "lib/" ], "engines": { - "node": ">=6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "windowsCI": false, + "version": "3.5.0" } } diff --git a/deps/npm/node_modules/normalize-package-data/lib/extract_description.js b/deps/npm/node_modules/normalize-package-data/lib/extract_description.js index bf9896812e5..631966b5f29 100644 --- a/deps/npm/node_modules/normalize-package-data/lib/extract_description.js +++ b/deps/npm/node_modules/normalize-package-data/lib/extract_description.js @@ -11,12 +11,14 @@ function extractDescription (d) { // the first block of text before the first heading // that isn't the first line heading d = d.trim().split('\n') - for (var s = 0; d[s] && d[s].trim().match(/^(#|$)/); s++) { - ; + let s = 0 + while (d[s] && d[s].trim().match(/^(#|$)/)) { + s++ } - var l = d.length - for (var e = s + 1; e < l && d[e].trim(); e++) { - ; + const l = d.length + let e = s + 1 + while (e < l && d[e].trim()) { + e++ } return d.slice(s, e).join(' ').trim() } diff --git a/deps/npm/node_modules/normalize-package-data/lib/fixer.js b/deps/npm/node_modules/normalize-package-data/lib/fixer.js index 0846f2c045a..bb78231d83c 100644 --- a/deps/npm/node_modules/normalize-package-data/lib/fixer.js +++ b/deps/npm/node_modules/normalize-package-data/lib/fixer.js @@ -121,17 +121,17 @@ module.exports = { this.warn('nonArrayBundleDependencies') delete data[bd] } else if (data[bd]) { - data[bd] = data[bd].filter(function (bd) { - if (!bd || typeof bd !== 'string') { - this.warn('nonStringBundleDependency', bd) + data[bd] = data[bd].filter(function (filtered) { + if (!filtered || typeof filtered !== 'string') { + this.warn('nonStringBundleDependency', filtered) return false } else { if (!data.dependencies) { data.dependencies = {} } - if (!Object.prototype.hasOwnProperty.call(data.dependencies, bd)) { - this.warn('nonDependencyBundleDependency', bd) - data.dependencies[bd] = '*' + if (!Object.prototype.hasOwnProperty.call(data.dependencies, filtered)) { + this.warn('nonDependencyBundleDependency', filtered) + data.dependencies[filtered] = '*' } return true } @@ -389,28 +389,28 @@ function unParsePerson (person) { } var name = person.name || '' var u = person.url || person.web - var url = u ? (' (' + u + ')') : '' + var wrappedUrl = u ? (' (' + u + ')') : '' var e = person.email || person.mail - var email = e ? (' <' + e + '>') : '' - return name + email + url + var wrappedEmail = e ? (' <' + e + '>') : '' + return name + wrappedEmail + wrappedUrl } function parsePerson (person) { if (typeof person !== 'string') { return person } - var name = person.match(/^([^(<]+)/) - var url = person.match(/\(([^()]+)\)/) - var email = person.match(/<([^<>]+)>/) + var matchedName = person.match(/^([^(<]+)/) + var matchedUrl = person.match(/\(([^()]+)\)/) + var matchedEmail = person.match(/<([^<>]+)>/) var obj = {} - if (name && name[0].trim()) { - obj.name = name[0].trim() + if (matchedName && matchedName[0].trim()) { + obj.name = matchedName[0].trim() } - if (email) { - obj.email = email[1] + if (matchedEmail) { + obj.email = matchedEmail[1] } - if (url) { - obj.url = url[1] + if (matchedUrl) { + obj.url = matchedUrl[1] } return obj } diff --git a/deps/npm/node_modules/normalize-package-data/package.json b/deps/npm/node_modules/normalize-package-data/package.json index a6f1244eb5a..1bec9bb8645 100644 --- a/deps/npm/node_modules/normalize-package-data/package.json +++ b/deps/npm/node_modules/normalize-package-data/package.json @@ -1,12 +1,12 @@ { "name": "normalize-package-data", - "version": "4.0.0", + "version": "4.0.1", "author": "GitHub Inc.", "description": "Normalizes data that can be found in package.json files.", "license": "BSD-2-Clause", "repository": { "type": "git", - "url": "git://github.com/npm/normalize-package-data.git" + "url": "https://github.com/npm/normalize-package-data.git" }, "main": "lib/normalize.js", "scripts": { @@ -15,13 +15,13 @@ "preversion": "npm test", "test": "tap", "npmclilint": "npmcli-lint", - "lint": "eslint '**/*.js'", + "lint": "eslint \"**/*.js\"", "lintfix": "npm run lint -- --fix", "posttest": "npm run lint", "postsnap": "npm run lintfix --", - "postlint": "npm-template-check", - "template-copy": "npm-template-copy --force", - "snap": "tap" + "postlint": "template-oss-check", + "snap": "tap", + "template-oss-apply": "template-oss-apply --force" }, "dependencies": { "hosted-git-info": "^5.0.0", @@ -30,18 +30,20 @@ "validate-npm-package-license": "^3.0.4" }, "devDependencies": { - "@npmcli/template-oss": "^2.9.2", - "tap": "^15.0.9" + "@npmcli/eslint-config": "^3.0.1", + "@npmcli/template-oss": "3.5.0", + "tap": "^16.0.1" }, "files": [ - "bin", - "lib" + "bin/", + "lib/" ], "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "templateOSS": { - "version": "2.9.2" + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "3.5.0" }, "tap": { "branches": 86, diff --git a/deps/npm/node_modules/npm-bundled/lib/index.js b/deps/npm/node_modules/npm-bundled/lib/index.js new file mode 100644 index 00000000000..4f54ca647c0 --- /dev/null +++ b/deps/npm/node_modules/npm-bundled/lib/index.js @@ -0,0 +1,254 @@ +'use strict' + +// walk the tree of deps starting from the top level list of bundled deps +// Any deps at the top level that are depended on by a bundled dep that +// does not have that dep in its own node_modules folder are considered +// bundled deps as well. This list of names can be passed to npm-packlist +// as the "bundled" argument. Additionally, packageJsonCache is shared so +// packlist doesn't have to re-read files already consumed in this pass + +const fs = require('fs') +const path = require('path') +const EE = require('events').EventEmitter +// we don't care about the package bins, but we share a pj cache +// with other modules that DO care about it, so keep it nice. +const normalizePackageBin = require('npm-normalize-package-bin') + +class BundleWalker extends EE { + constructor (opt) { + opt = opt || {} + super(opt) + this.path = path.resolve(opt.path || process.cwd()) + + this.parent = opt.parent || null + if (this.parent) { + this.result = this.parent.result + // only collect results in node_modules folders at the top level + // since the node_modules in a bundled dep is included always + if (!this.parent.parent) { + const base = path.basename(this.path) + const scope = path.basename(path.dirname(this.path)) + this.result.add(/^@/.test(scope) ? scope + '/' + base : base) + } + this.root = this.parent.root + this.packageJsonCache = this.parent.packageJsonCache + } else { + this.result = new Set() + this.root = this.path + this.packageJsonCache = opt.packageJsonCache || new Map() + } + + this.seen = new Set() + this.didDone = false + this.children = 0 + this.node_modules = [] + this.package = null + this.bundle = null + } + + addListener (ev, fn) { + return this.on(ev, fn) + } + + on (ev, fn) { + const ret = super.on(ev, fn) + if (ev === 'done' && this.didDone) { + this.emit('done', this.result) + } + return ret + } + + done () { + if (!this.didDone) { + this.didDone = true + if (!this.parent) { + const res = Array.from(this.result) + this.result = res + this.emit('done', res) + } else { + this.emit('done') + } + } + } + + start () { + const pj = path.resolve(this.path, 'package.json') + if (this.packageJsonCache.has(pj)) { + this.onPackage(this.packageJsonCache.get(pj)) + } else { + this.readPackageJson(pj) + } + return this + } + + readPackageJson (pj) { + fs.readFile(pj, (er, data) => + er ? this.done() : this.onPackageJson(pj, data)) + } + + onPackageJson (pj, data) { + try { + this.package = normalizePackageBin(JSON.parse(data + '')) + } catch (er) { + return this.done() + } + this.packageJsonCache.set(pj, this.package) + this.onPackage(this.package) + } + + allDepsBundled (pkg) { + return Object.keys(pkg.dependencies || {}).concat( + Object.keys(pkg.optionalDependencies || {})) + } + + onPackage (pkg) { + // all deps are bundled if we got here as a child. + // otherwise, only bundle bundledDeps + // Get a unique-ified array with a short-lived Set + const bdRaw = this.parent ? this.allDepsBundled(pkg) + : pkg.bundleDependencies || pkg.bundledDependencies || [] + + const bd = Array.from(new Set( + Array.isArray(bdRaw) ? bdRaw + : bdRaw === true ? this.allDepsBundled(pkg) + : Object.keys(bdRaw))) + + if (!bd.length) { + return this.done() + } + + this.bundle = bd + this.readModules() + } + + readModules () { + readdirNodeModules(this.path + '/node_modules', (er, nm) => + er ? this.onReaddir([]) : this.onReaddir(nm)) + } + + onReaddir (nm) { + // keep track of what we have, in case children need it + this.node_modules = nm + + this.bundle.forEach(dep => this.childDep(dep)) + if (this.children === 0) { + this.done() + } + } + + childDep (dep) { + if (this.node_modules.indexOf(dep) !== -1) { + if (!this.seen.has(dep)) { + this.seen.add(dep) + this.child(dep) + } + } else if (this.parent) { + this.parent.childDep(dep) + } + } + + child (dep) { + const p = this.path + '/node_modules/' + dep + this.children += 1 + const child = new BundleWalker({ + path: p, + parent: this, + }) + child.on('done', _ => { + if (--this.children === 0) { + this.done() + } + }) + child.start() + } +} + +class BundleWalkerSync extends BundleWalker { + start () { + super.start() + this.done() + return this + } + + readPackageJson (pj) { + try { + this.onPackageJson(pj, fs.readFileSync(pj)) + } catch { + // empty catch + } + return this + } + + readModules () { + try { + this.onReaddir(readdirNodeModulesSync(this.path + '/node_modules')) + } catch { + this.onReaddir([]) + } + } + + child (dep) { + new BundleWalkerSync({ + path: this.path + '/node_modules/' + dep, + parent: this, + }).start() + } +} + +const readdirNodeModules = (nm, cb) => { + fs.readdir(nm, (er, set) => { + if (er) { + cb(er) + } else { + const scopes = set.filter(f => /^@/.test(f)) + if (!scopes.length) { + cb(null, set) + } else { + const unscoped = set.filter(f => !/^@/.test(f)) + let count = scopes.length + scopes.forEach(scope => { + fs.readdir(nm + '/' + scope, (readdirEr, pkgs) => { + if (readdirEr || !pkgs.length) { + unscoped.push(scope) + } else { + unscoped.push.apply(unscoped, pkgs.map(p => scope + '/' + p)) + } + if (--count === 0) { + cb(null, unscoped) + } + }) + }) + } + } + }) +} + +const readdirNodeModulesSync = nm => { + const set = fs.readdirSync(nm) + const unscoped = set.filter(f => !/^@/.test(f)) + const scopes = set.filter(f => /^@/.test(f)).map(scope => { + try { + const pkgs = fs.readdirSync(nm + '/' + scope) + return pkgs.length ? pkgs.map(p => scope + '/' + p) : [scope] + } catch (er) { + return [scope] + } + }).reduce((a, b) => a.concat(b), []) + return unscoped.concat(scopes) +} + +const walk = (options, callback) => { + const p = new Promise((resolve, reject) => { + new BundleWalker(options).on('done', resolve).on('error', reject).start() + }) + return callback ? p.then(res => callback(null, res), callback) : p +} + +const walkSync = options => { + return new BundleWalkerSync(options).start().result +} + +module.exports = walk +walk.sync = walkSync +walk.BundleWalker = BundleWalker +walk.BundleWalkerSync = BundleWalkerSync diff --git a/deps/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin/LICENSE b/deps/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin/LICENSE new file mode 100644 index 00000000000..19cec97b184 --- /dev/null +++ b/deps/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) npm, Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/deps/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin/lib/index.js b/deps/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin/lib/index.js new file mode 100644 index 00000000000..d6f0a581b9e --- /dev/null +++ b/deps/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin/lib/index.js @@ -0,0 +1,64 @@ +// pass in a manifest with a 'bin' field here, and it'll turn it +// into a properly santized bin object +const { join, basename } = require('path') + +const normalize = pkg => + !pkg.bin ? removeBin(pkg) + : typeof pkg.bin === 'string' ? normalizeString(pkg) + : Array.isArray(pkg.bin) ? normalizeArray(pkg) + : typeof pkg.bin === 'object' ? normalizeObject(pkg) + : removeBin(pkg) + +const normalizeString = pkg => { + if (!pkg.name) { + return removeBin(pkg) + } + pkg.bin = { [pkg.name]: pkg.bin } + return normalizeObject(pkg) +} + +const normalizeArray = pkg => { + pkg.bin = pkg.bin.reduce((acc, k) => { + acc[basename(k)] = k + return acc + }, {}) + return normalizeObject(pkg) +} + +const removeBin = pkg => { + delete pkg.bin + return pkg +} + +const normalizeObject = pkg => { + const orig = pkg.bin + const clean = {} + let hasBins = false + Object.keys(orig).forEach(binKey => { + const base = join('/', basename(binKey.replace(/\\|:/g, '/'))).slice(1) + + if (typeof orig[binKey] !== 'string' || !base) { + return + } + + const binTarget = join('/', orig[binKey]) + .replace(/\\/g, '/').slice(1) + + if (!binTarget) { + return + } + + clean[base] = binTarget + hasBins = true + }) + + if (hasBins) { + pkg.bin = clean + } else { + delete pkg.bin + } + + return pkg +} + +module.exports = normalize diff --git a/deps/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin/package.json b/deps/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin/package.json new file mode 100644 index 00000000000..02de808d9b7 --- /dev/null +++ b/deps/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin/package.json @@ -0,0 +1,41 @@ +{ + "name": "npm-normalize-package-bin", + "version": "2.0.0", + "description": "Turn any flavor of allowable package.json bin into a normalized object", + "main": "lib/index.js", + "repository": { + "type": "git", + "url": "https://github.com/npm/npm-normalize-package-bin.git" + }, + "author": "GitHub Inc.", + "license": "ISC", + "scripts": { + "test": "tap", + "snap": "tap", + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --follow-tags", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force", + "lintfix": "npm run lint -- --fix", + "prepublishOnly": "git push origin --follow-tags", + "posttest": "npm run lint" + }, + "devDependencies": { + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "3.5.0", + "tap": "^16.3.0" + }, + "files": [ + "bin/", + "lib/" + ], + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "3.5.0" + } +} diff --git a/deps/npm/node_modules/npm-bundled/package.json b/deps/npm/node_modules/npm-bundled/package.json index cf20e297b0b..e4c0106c2d5 100644 --- a/deps/npm/node_modules/npm-bundled/package.json +++ b/deps/npm/node_modules/npm-bundled/package.json @@ -1,30 +1,47 @@ { "name": "npm-bundled", - "version": "1.1.2", + "version": "2.0.1", "description": "list things in node_modules that are bundledDependencies, or transitive dependencies thereof", - "main": "index.js", + "main": "lib/index.js", "repository": { "type": "git", - "url": "git+https://github.com/npm/npm-bundled.git" + "url": "https://github.com/npm/npm-bundled.git" }, - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "author": "GitHub Inc.", "license": "ISC", "devDependencies": { - "mkdirp": "^0.5.1", - "mutate-fs": "^1.1.0", - "rimraf": "^2.6.1", - "tap": "^12.0.1" + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "3.5.0", + "mkdirp": "^1.0.4", + "mutate-fs": "^2.1.1", + "rimraf": "^3.0.2", + "tap": "^16.3.0" }, "scripts": { - "test": "tap test/*.js -J --100", + "test": "tap", "preversion": "npm test", "postversion": "npm publish", - "postpublish": "git push origin --all; git push origin --tags" + "postpublish": "git push origin --all; git push origin --tags", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force", + "lintfix": "npm run lint -- --fix", + "prepublishOnly": "git push origin --follow-tags", + "snap": "tap", + "posttest": "npm run lint" }, "files": [ - "index.js" + "bin/", + "lib/" ], "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "3.5.0" } } diff --git a/deps/npm/node_modules/npm-normalize-package-bin/package-lock.json b/deps/npm/node_modules/npm-normalize-package-bin/package-lock.json deleted file mode 100644 index 0d3390d4eee..00000000000 --- a/deps/npm/node_modules/npm-normalize-package-bin/package-lock.json +++ /dev/null @@ -1,3529 +0,0 @@ -{ - "name": "npm-normalize-package-bin", - "version": "1.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", - "dev": true - }, - "@babel/runtime": { - "version": "7.7.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.6.tgz", - "integrity": "sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arg": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz", - "integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "async-hook-domain": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-1.1.3.tgz", - "integrity": "sha512-ZovMxSbADV3+biB7oR1GL5lGyptI24alp0LWHlmz1OFc5oL47pz3EiIF6nXOkDW7yLqih4NtsiYduzdDW0i+Wg==", - "dev": true, - "requires": { - "source-map-support": "^0.5.11" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", - "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "bind-obj-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz", - "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" - }, - "dependencies": { - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "coveralls": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz", - "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.0", - "request": "^2.88.0" - } - }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true - }, - "diff-frag": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/diff-frag/-/diff-frag-1.0.1.tgz", - "integrity": "sha512-6/v2PC/6UTGcWPPetb9acL8foberUg/CtPdALeJUdD1B/weHNvzftoo00gYznqHGRhHEbykUGzqfG9RWOSr5yw==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", - "dev": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", - "dev": true - }, - "flow-parser": { - "version": "0.113.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.113.0.tgz", - "integrity": "sha512-+hRyEB1sVLNMTMniDdM1JIS8BJ3HUL7IFIJaxX+t/JUy0GNYdI0Tg1QLx8DJmOF8HeoCrUDcREpnDAc/pPta3w==", - "dev": true - }, - "flow-remove-types": { - "version": "2.113.0", - "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.113.0.tgz", - "integrity": "sha512-Rp4hN/JlGmUjNxXuBXr6Or+MgDH9xKc+ZiUSRzl/fbpiH9RaCPAQKsgVEYNPcIE26q6RpAuMQfvzR0jQfuwUZQ==", - "dev": true, - "requires": { - "flow-parser": "^0.113.0", - "pirates": "^3.0.2", - "vlq": "^0.2.1" - } - }, - "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "dev": true, - "optional": true - }, - "function-loop": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz", - "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "handlebars": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", - "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-processinfo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-1.0.0.tgz", - "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^6.0.5", - "istanbul-lib-coverage": "^2.0.3", - "rimraf": "^2.6.3", - "uuid": "^3.3.2" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", - "dev": true, - "requires": { - "handlebars": "^4.1.2" - } - }, - "jackspeak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.0.tgz", - "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==", - "dev": true, - "requires": { - "cliui": "^4.1.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dev": true, - "requires": { - "mime-db": "1.42.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nyc": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", - "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "caching-transform": "^3.0.2", - "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", - "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "own-or": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", - "dev": true - }, - "own-or-env": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", - "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==", - "dev": true, - "requires": { - "own-or": "^1.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", - "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pirates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz", - "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "optional": true - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.6.0.tgz", - "integrity": "sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "react": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", - "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-is": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", - "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - } - } - }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", - "dev": true - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", - "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawn-wrap": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", - "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - } - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tap": { - "version": "14.10.2", - "resolved": "https://registry.npmjs.org/tap/-/tap-14.10.2.tgz", - "integrity": "sha512-JeUDsVrMFmR6b3p9hO9yIT/jibrK6LI7nFza5cqDGsxJyCp7yU3enRgS5nekuoAOzewbrU7P+9QDRDT01urROA==", - "dev": true, - "requires": { - "async-hook-domain": "^1.1.3", - "bind-obj-methods": "^2.0.0", - "browser-process-hrtime": "^1.0.0", - "chokidar": "^3.3.0", - "color-support": "^1.1.0", - "coveralls": "^3.0.8", - "diff": "^4.0.1", - "esm": "^3.2.25", - "findit": "^2.0.0", - "flow-remove-types": "^2.112.0", - "foreground-child": "^1.3.3", - "fs-exists-cached": "^1.0.0", - "function-loop": "^1.0.2", - "glob": "^7.1.6", - "import-jsx": "^3.0.0", - "ink": "^2.5.0", - "isexe": "^2.0.0", - "istanbul-lib-processinfo": "^1.0.0", - "jackspeak": "^1.4.0", - "minipass": "^3.1.1", - "mkdirp": "^0.5.1", - "nyc": "^14.1.1", - "opener": "^1.5.1", - "own-or": "^1.0.0", - "own-or-env": "^1.0.1", - "react": "^16.12.0", - "rimraf": "^2.7.1", - "signal-exit": "^3.0.0", - "source-map-support": "^0.5.16", - "stack-utils": "^1.0.2", - "tap-mocha-reporter": "^5.0.0", - "tap-parser": "^10.0.1", - "tap-yaml": "^1.0.0", - "tcompare": "^3.0.0", - "treport": "^1.0.0", - "trivial-deferred": "^1.0.1", - "ts-node": "^8.5.2", - "typescript": "^3.7.2", - "which": "^2.0.2", - "write-file-atomic": "^3.0.1", - "yaml": "^1.7.2", - "yapool": "^1.0.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "bundled": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.4", - "bundled": true, - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "convert-source-map": { - "version": "1.7.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.7.2", - "bundled": true, - "requires": { - "@babel/types": "^7.7.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "bundled": true - } - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "esutils": "^2.0.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "bundled": true, - "dev": true - }, - "@babel/helpers": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/generator": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.4", - "bundled": true, - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - } - } - }, - "@babel/highlight": { - "version": "7.5.0", - "bundled": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "js-tokens": { - "version": "4.0.0", - "bundled": true - } - } - }, - "@babel/parser": { - "version": "7.7.3", - "bundled": true - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-builder-react-jsx": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.7.4" - } - }, - "@babel/runtime": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/template": { - "version": "7.7.0", - "bundled": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/types": "^7.7.0" - } - }, - "@babel/types": { - "version": "7.7.2", - "bundled": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@types/color-name": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "@types/prop-types": { - "version": "15.7.3", - "bundled": true, - "dev": true - }, - "@types/react": { - "version": "16.9.13", - "bundled": true, - "dev": true, - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "ansi-escapes": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "arrify": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "auto-bind": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "@types/react": "^16.8.12" - } - }, - "caller-callsite": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cardinal": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "chalk": { - "version": "2.4.2", - "bundled": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ci-info": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-truncate": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "slice-ansi": "^1.0.0", - "string-width": "^2.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "bundled": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "bundled": true - }, - "csstype": { - "version": "2.6.7", - "bundled": true, - "dev": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "requires": { - "ms": "2.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "bundled": true, - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true - }, - "esprima": { - "version": "4.0.1", - "bundled": true, - "dev": true - }, - "esutils": { - "version": "2.0.3", - "bundled": true - }, - "events-to-array": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "globals": { - "version": "11.12.0", - "bundled": true, - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "bundled": true - }, - "import-jsx": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-react-jsx": "^7.3.0", - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "ink": { - "version": "2.5.0", - "bundled": true, - "dev": true, - "requires": { - "@types/react": "^16.8.6", - "ansi-escapes": "^4.2.1", - "arrify": "^1.0.1", - "auto-bind": "^2.0.0", - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "cli-truncate": "^1.1.0", - "is-ci": "^2.0.0", - "lodash.throttle": "^4.1.1", - "log-update": "^3.0.0", - "prop-types": "^15.6.2", - "react-reconciler": "^0.21.0", - "scheduler": "^0.15.0", - "signal-exit": "^3.0.2", - "slice-ansi": "^1.0.0", - "string-length": "^2.0.0", - "widest-line": "^2.0.0", - "wrap-ansi": "^5.0.0", - "yoga-layout-prebuilt": "^1.9.3" - } - }, - "is-ci": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "bundled": true - }, - "json5": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "lodash": { - "version": "4.17.15", - "bundled": true - }, - "lodash.throttle": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "log-update": { - "version": "3.3.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "cli-cursor": "^2.1.0", - "wrap-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "bundled": true, - "dev": true - } - } - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "bundled": true, - "dev": true - } - } - }, - "ms": { - "version": "2.0.0", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "onetime": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "path-parse": { - "version": "1.0.6", - "bundled": true, - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "punycode": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "react-is": { - "version": "16.10.2", - "bundled": true, - "dev": true - }, - "react-reconciler": { - "version": "0.21.0", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.15.0" - } - }, - "redeyed": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "esprima": "~4.0.0" - } - }, - "regenerator-runtime": { - "version": "0.13.3", - "bundled": true, - "dev": true - }, - "resolve": { - "version": "1.12.0", - "bundled": true, - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "scheduler": { - "version": "0.15.0", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "bundled": true - }, - "string-length": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "bundled": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tap-parser": { - "version": "10.0.1", - "bundled": true, - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "minipass": "^3.0.0", - "tap-yaml": "^1.0.0" - } - }, - "tap-yaml": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "yaml": "^1.5.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "bundled": true - }, - "treport": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "cardinal": "^2.1.1", - "chalk": "^3.0.0", - "import-jsx": "^3.0.0", - "ink": "^2.5.0", - "ms": "^2.1.2", - "string-length": "^3.1.0", - "tap-parser": "^10.0.1", - "unicode-length": "^2.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "4.2.0", - "bundled": true, - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "string-length": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "7.1.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "unicode-length": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "punycode": "^2.0.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - } - } - }, - "type-fest": { - "version": "0.8.1", - "bundled": true, - "dev": true - }, - "widest-line": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yaml": { - "version": "1.7.2", - "bundled": true, - "dev": true, - "requires": { - "@babel/runtime": "^7.6.3" - } - }, - "yoga-layout-prebuilt": { - "version": "1.9.3", - "bundled": true, - "dev": true - } - } - }, - "tap-mocha-reporter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.0.tgz", - "integrity": "sha512-8HlAtdmYGlDZuW83QbF/dc46L7cN+AGhLZcanX3I9ILvxUAl+G2/mtucNPSXecTlG/4iP1hv6oMo0tMhkn3Tsw==", - "dev": true, - "requires": { - "color-support": "^1.1.0", - "debug": "^2.1.3", - "diff": "^1.3.2", - "escape-string-regexp": "^1.0.3", - "glob": "^7.0.5", - "readable-stream": "^2.1.5", - "tap-parser": "^10.0.0", - "tap-yaml": "^1.0.0", - "unicode-length": "^1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "tap-parser": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.0.1.tgz", - "integrity": "sha512-qdT15H0DoJIi7zOqVXDn9X0gSM68JjNy1w3VemwTJlDnETjbi6SutnqmBfjDJAwkFS79NJ97gZKqie00ZCGmzg==", - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "minipass": "^3.0.0", - "tap-yaml": "^1.0.0" - } - }, - "tap-yaml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", - "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", - "dev": true, - "requires": { - "yaml": "^1.5.0" - } - }, - "tcompare": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-3.0.4.tgz", - "integrity": "sha512-Q3TitMVK59NyKgQyFh+857wTAUE329IzLDehuPgU4nF5e8g+EUQ+yUbjUy1/6ugiNnXztphT+NnqlCXolv9P3A==", - "dev": true, - "requires": { - "diff-frag": "^1.0.1" - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "trivial-deferred": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", - "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", - "dev": true - }, - "ts-node": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.4.tgz", - "integrity": "sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz", - "integrity": "sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==", - "dev": true - }, - "uglify-js": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.2.tgz", - "integrity": "sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.3", - "source-map": "~0.6.1" - } - }, - "unicode-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", - "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", - "dev": true, - "requires": { - "punycode": "^1.3.2", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "optional": true - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", - "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yaml": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", - "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.6.3" - } - }, - "yapool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", - "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", - "dev": true - }, - "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/deps/npm/node_modules/npm-package-arg/lib/npa.js b/deps/npm/node_modules/npm-package-arg/lib/npa.js index cc1eddaec74..61fee0783ec 100644 --- a/deps/npm/node_modules/npm-package-arg/lib/npa.js +++ b/deps/npm/node_modules/npm-package-arg/lib/npa.js @@ -9,6 +9,7 @@ const semver = require('semver') const path = global.FAKE_WINDOWS ? require('path').win32 : require('path') const validatePackageName = require('validate-npm-package-name') const { homedir } = require('os') +const log = require('proc-log') const isWindows = process.platform === 'win32' || global.FAKE_WINDOWS const hasSlashes = isWindows ? /\\|[/]/ : /[/]/ @@ -120,6 +121,7 @@ function Result (opts) { } this.gitRange = opts.gitRange this.gitCommittish = opts.gitCommittish + this.gitSubdir = opts.gitSubdir this.hosted = opts.hosted } @@ -155,11 +157,45 @@ Result.prototype.toJSON = function () { } function setGitCommittish (res, committish) { - if (committish != null && committish.length >= 7 && committish.slice(0, 7) === 'semver:') { - res.gitRange = decodeURIComponent(committish.slice(7)) + if (!committish) { res.gitCommittish = null - } else { - res.gitCommittish = committish === '' ? null : committish + return res + } + + // for each :: separated item: + for (const part of committish.split('::')) { + // if the item has no : the n it is a commit-ish + if (!part.includes(':')) { + if (res.gitRange) { + throw new Error('cannot override existing semver range with a committish') + } + if (res.gitCommittish) { + throw new Error('cannot override existing committish with a second committish') + } + res.gitCommittish = part + continue + } + // split on name:value + const [name, value] = part.split(':') + // if name is semver do semver lookup of ref or tag + if (name === 'semver') { + if (res.gitCommittish) { + throw new Error('cannot override existing committish with a semver range') + } + if (res.gitRange) { + throw new Error('cannot override existing semver range with a second semver range') + } + res.gitRange = decodeURIComponent(value) + continue + } + if (name === 'path') { + if (res.gitSubdir) { + throw new Error('cannot override existing path with a second path') + } + res.gitSubdir = `/${value}` + continue + } + log.warn('npm-package-arg', `ignoring unknown key "${name}"`) } return res diff --git a/deps/npm/node_modules/npm-package-arg/package.json b/deps/npm/node_modules/npm-package-arg/package.json index 457f1d8a2f8..b9729db5d4f 100644 --- a/deps/npm/node_modules/npm-package-arg/package.json +++ b/deps/npm/node_modules/npm-package-arg/package.json @@ -1,6 +1,6 @@ { "name": "npm-package-arg", - "version": "9.0.2", + "version": "9.1.0", "description": "Parse the things that can be arguments to `npm install`", "main": "./lib/npa.js", "directories": { @@ -12,12 +12,13 @@ ], "dependencies": { "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" }, "devDependencies": { "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.2.1", + "@npmcli/template-oss": "3.5.0", "tap": "^16.0.1" }, "scripts": { @@ -52,6 +53,6 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.2.1" + "version": "3.5.0" } } diff --git a/deps/npm/node_modules/npm-packlist/lib/index.js b/deps/npm/node_modules/npm-packlist/lib/index.js index e4a2e76c545..bd72329f027 100644 --- a/deps/npm/node_modules/npm-packlist/lib/index.js +++ b/deps/npm/node_modules/npm-packlist/lib/index.js @@ -34,10 +34,13 @@ const glob = require('glob') const globify = pattern => pattern.split('\\').join('/') const readOutOfTreeIgnoreFiles = (root, rel, result = '') => { - for (const file of ['.gitignore', '.npmignore']) { + for (const file of ['.npmignore', '.gitignore']) { try { const ignoreContent = fs.readFileSync(path.join(root, file), { encoding: 'utf8' }) result += ignoreContent + '\n' + // break the loop immediately after concatting, this allows us to prioritize the + // .npmignore and discard the .gitignore if one exists + break } catch (err) { // we ignore ENOENT errors completely because we don't care if the file doesn't exist // but we throw everything else because failing to read a file that does exist is diff --git a/deps/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin/LICENSE b/deps/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin/LICENSE new file mode 100644 index 00000000000..19cec97b184 --- /dev/null +++ b/deps/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) npm, Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/deps/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin/lib/index.js b/deps/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin/lib/index.js new file mode 100644 index 00000000000..d6f0a581b9e --- /dev/null +++ b/deps/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin/lib/index.js @@ -0,0 +1,64 @@ +// pass in a manifest with a 'bin' field here, and it'll turn it +// into a properly santized bin object +const { join, basename } = require('path') + +const normalize = pkg => + !pkg.bin ? removeBin(pkg) + : typeof pkg.bin === 'string' ? normalizeString(pkg) + : Array.isArray(pkg.bin) ? normalizeArray(pkg) + : typeof pkg.bin === 'object' ? normalizeObject(pkg) + : removeBin(pkg) + +const normalizeString = pkg => { + if (!pkg.name) { + return removeBin(pkg) + } + pkg.bin = { [pkg.name]: pkg.bin } + return normalizeObject(pkg) +} + +const normalizeArray = pkg => { + pkg.bin = pkg.bin.reduce((acc, k) => { + acc[basename(k)] = k + return acc + }, {}) + return normalizeObject(pkg) +} + +const removeBin = pkg => { + delete pkg.bin + return pkg +} + +const normalizeObject = pkg => { + const orig = pkg.bin + const clean = {} + let hasBins = false + Object.keys(orig).forEach(binKey => { + const base = join('/', basename(binKey.replace(/\\|:/g, '/'))).slice(1) + + if (typeof orig[binKey] !== 'string' || !base) { + return + } + + const binTarget = join('/', orig[binKey]) + .replace(/\\/g, '/').slice(1) + + if (!binTarget) { + return + } + + clean[base] = binTarget + hasBins = true + }) + + if (hasBins) { + pkg.bin = clean + } else { + delete pkg.bin + } + + return pkg +} + +module.exports = normalize diff --git a/deps/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin/package.json b/deps/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin/package.json new file mode 100644 index 00000000000..02de808d9b7 --- /dev/null +++ b/deps/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin/package.json @@ -0,0 +1,41 @@ +{ + "name": "npm-normalize-package-bin", + "version": "2.0.0", + "description": "Turn any flavor of allowable package.json bin into a normalized object", + "main": "lib/index.js", + "repository": { + "type": "git", + "url": "https://github.com/npm/npm-normalize-package-bin.git" + }, + "author": "GitHub Inc.", + "license": "ISC", + "scripts": { + "test": "tap", + "snap": "tap", + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --follow-tags", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force", + "lintfix": "npm run lint -- --fix", + "prepublishOnly": "git push origin --follow-tags", + "posttest": "npm run lint" + }, + "devDependencies": { + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "3.5.0", + "tap": "^16.3.0" + }, + "files": [ + "bin/", + "lib/" + ], + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "3.5.0" + } +} diff --git a/deps/npm/node_modules/npm-packlist/package.json b/deps/npm/node_modules/npm-packlist/package.json index dfa0188b4c4..c3c8817202a 100644 --- a/deps/npm/node_modules/npm-packlist/package.json +++ b/deps/npm/node_modules/npm-packlist/package.json @@ -1,6 +1,6 @@ { "name": "npm-packlist", - "version": "5.1.0", + "version": "5.1.3", "description": "Get a list of the files to add from a folder into an npm package", "directories": { "test": "test" @@ -9,8 +9,8 @@ "dependencies": { "glob": "^8.0.1", "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" }, "author": "GitHub Inc.", "license": "ISC", @@ -20,7 +20,7 @@ ], "devDependencies": { "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", + "@npmcli/template-oss": "3.6.0", "mutate-fs": "^2.1.1", "tap": "^16.0.1" }, @@ -56,6 +56,6 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.5.0" + "version": "3.6.0" } } diff --git a/deps/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin/LICENSE b/deps/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin/LICENSE new file mode 100644 index 00000000000..19cec97b184 --- /dev/null +++ b/deps/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) npm, Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/deps/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin/lib/index.js b/deps/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin/lib/index.js new file mode 100644 index 00000000000..d6f0a581b9e --- /dev/null +++ b/deps/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin/lib/index.js @@ -0,0 +1,64 @@ +// pass in a manifest with a 'bin' field here, and it'll turn it +// into a properly santized bin object +const { join, basename } = require('path') + +const normalize = pkg => + !pkg.bin ? removeBin(pkg) + : typeof pkg.bin === 'string' ? normalizeString(pkg) + : Array.isArray(pkg.bin) ? normalizeArray(pkg) + : typeof pkg.bin === 'object' ? normalizeObject(pkg) + : removeBin(pkg) + +const normalizeString = pkg => { + if (!pkg.name) { + return removeBin(pkg) + } + pkg.bin = { [pkg.name]: pkg.bin } + return normalizeObject(pkg) +} + +const normalizeArray = pkg => { + pkg.bin = pkg.bin.reduce((acc, k) => { + acc[basename(k)] = k + return acc + }, {}) + return normalizeObject(pkg) +} + +const removeBin = pkg => { + delete pkg.bin + return pkg +} + +const normalizeObject = pkg => { + const orig = pkg.bin + const clean = {} + let hasBins = false + Object.keys(orig).forEach(binKey => { + const base = join('/', basename(binKey.replace(/\\|:/g, '/'))).slice(1) + + if (typeof orig[binKey] !== 'string' || !base) { + return + } + + const binTarget = join('/', orig[binKey]) + .replace(/\\/g, '/').slice(1) + + if (!binTarget) { + return + } + + clean[base] = binTarget + hasBins = true + }) + + if (hasBins) { + pkg.bin = clean + } else { + delete pkg.bin + } + + return pkg +} + +module.exports = normalize diff --git a/deps/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin/package.json b/deps/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin/package.json new file mode 100644 index 00000000000..02de808d9b7 --- /dev/null +++ b/deps/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin/package.json @@ -0,0 +1,41 @@ +{ + "name": "npm-normalize-package-bin", + "version": "2.0.0", + "description": "Turn any flavor of allowable package.json bin into a normalized object", + "main": "lib/index.js", + "repository": { + "type": "git", + "url": "https://github.com/npm/npm-normalize-package-bin.git" + }, + "author": "GitHub Inc.", + "license": "ISC", + "scripts": { + "test": "tap", + "snap": "tap", + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --follow-tags", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force", + "lintfix": "npm run lint -- --fix", + "prepublishOnly": "git push origin --follow-tags", + "posttest": "npm run lint" + }, + "devDependencies": { + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "3.5.0", + "tap": "^16.3.0" + }, + "files": [ + "bin/", + "lib/" + ], + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "3.5.0" + } +} diff --git a/deps/npm/node_modules/npm-pick-manifest/package.json b/deps/npm/node_modules/npm-pick-manifest/package.json index 79867d9ceba..b3ebc9f8de6 100644 --- a/deps/npm/node_modules/npm-pick-manifest/package.json +++ b/deps/npm/node_modules/npm-pick-manifest/package.json @@ -1,6 +1,6 @@ { "name": "npm-pick-manifest", - "version": "7.0.1", + "version": "7.0.2", "description": "Resolves a matching manifest from a package metadata document according to standard npm semver resolution rules.", "main": "./lib", "files": [ @@ -33,7 +33,7 @@ "license": "ISC", "dependencies": { "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", + "npm-normalize-package-bin": "^2.0.0", "npm-package-arg": "^9.0.0", "semver": "^7.3.5" }, diff --git a/deps/npm/node_modules/npm-profile/lib/index.js b/deps/npm/node_modules/npm-profile/lib/index.js index 74a8084292a..ce78882a554 100644 --- a/deps/npm/node_modules/npm-profile/lib/index.js +++ b/deps/npm/node_modules/npm-profile/lib/index.js @@ -2,6 +2,7 @@ const fetch = require('npm-registry-fetch') const { HttpErrorBase } = require('npm-registry-fetch/lib/errors') +const EventEmitter = require('events') const os = require('os') const { URL } = require('url') const log = require('proc-log') @@ -55,6 +56,7 @@ const webAuth = (opener, opts, body) => { const { hostname } = opts body.hostname = hostname || os.hostname() const target = '/-/v1/login' + const doneEmitter = new EventEmitter() return fetch(target, { ...opts, method: 'POST', @@ -70,10 +72,26 @@ const webAuth = (opener, opts, body) => { return content }).then(({ doneUrl, loginUrl }) => { log.verbose('web auth', 'opening url pair') - return opener(loginUrl).then( - () => webAuthCheckLogin(doneUrl, { ...opts, cache: false }) + + const openPromise = opener(loginUrl, doneEmitter) + const webAuthCheckPromise = webAuthCheckLogin(doneUrl, { ...opts, cache: false }) + .then(authResult => { + log.verbose('web auth', 'done-check finished') + + // cancel open prompt if it's present + doneEmitter.emit('abort') + + return authResult + }) + + return Promise.all([openPromise, webAuthCheckPromise]).then( + // pick the auth result and pass it along + ([, authResult]) => authResult ) }).catch(er => { + // cancel open prompt if it's present + doneEmitter.emit('abort') + if ((er.statusCode >= 400 && er.statusCode <= 499) || er.statusCode === 500) { throw new WebLoginNotSupported('POST', { status: er.statusCode, @@ -273,4 +291,5 @@ module.exports = { listTokens, removeToken, createToken, + webAuthCheckLogin, } diff --git a/deps/npm/node_modules/npm-profile/package.json b/deps/npm/node_modules/npm-profile/package.json index 5e8f2d2391a..457a1fb0988 100644 --- a/deps/npm/node_modules/npm-profile/package.json +++ b/deps/npm/node_modules/npm-profile/package.json @@ -1,6 +1,6 @@ { "name": "npm-profile", - "version": "6.0.3", + "version": "6.2.1", "description": "Library for updating an npmjs.com profile", "keywords": [], "author": "GitHub Inc.", @@ -20,7 +20,7 @@ ], "devDependencies": { "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.4.1", + "@npmcli/template-oss": "3.5.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -44,6 +44,6 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.4.1" + "version": "3.5.0" } } diff --git a/deps/npm/node_modules/npm-registry-fetch/lib/auth.js b/deps/npm/node_modules/npm-registry-fetch/lib/auth.js index 17da6a17d71..870ce0d923c 100644 --- a/deps/npm/node_modules/npm-registry-fetch/lib/auth.js +++ b/deps/npm/node_modules/npm-registry-fetch/lib/auth.js @@ -1,4 +1,5 @@ 'use strict' +const fs = require('fs') const npa = require('npm-package-arg') const { URL } = require('url') @@ -7,7 +8,8 @@ const { URL } = require('url') const regKeyFromURI = (uri, opts) => { const parsed = new URL(uri) // try to find a config key indicating we have auth for this registry - // can be one of :_authToken, :_auth, or :_password and :username + // can be one of :_authToken, :_auth, :_password and :username, or + // :certfile and :keyfile // We walk up the "path" until we're left with just //[:], // stopping when we reach '//'. let regKey = `//${parsed.host}${parsed.pathname}` @@ -26,7 +28,8 @@ const regKeyFromURI = (uri, opts) => { const hasAuth = (regKey, opts) => ( opts[`${regKey}:_authToken`] || opts[`${regKey}:_auth`] || - opts[`${regKey}:username`] && opts[`${regKey}:_password`] + opts[`${regKey}:username`] && opts[`${regKey}:_password`] || + opts[`${regKey}:certfile`] && opts[`${regKey}:keyfile`] ) const sameHost = (a, b) => { @@ -44,6 +47,17 @@ const getRegistry = opts => { return scopeReg || opts.registry } +const maybeReadFile = file => { + try { + return fs.readFileSync(file, 'utf8') + } catch (er) { + if (er.code !== 'ENOENT') { + throw er + } + return null + } +} + const getAuth = (uri, opts = {}) => { const { forceAuth } = opts if (!uri) { @@ -59,6 +73,8 @@ const getAuth = (uri, opts = {}) => { username: forceAuth.username, password: forceAuth._password || forceAuth.password, auth: forceAuth._auth || forceAuth.auth, + certfile: forceAuth.certfile, + keyfile: forceAuth.keyfile, }) } @@ -82,6 +98,8 @@ const getAuth = (uri, opts = {}) => { [`${regKey}:username`]: username, [`${regKey}:_password`]: password, [`${regKey}:_auth`]: auth, + [`${regKey}:certfile`]: certfile, + [`${regKey}:keyfile`]: keyfile, } = opts return new Auth({ @@ -90,15 +108,19 @@ const getAuth = (uri, opts = {}) => { auth, username, password, + certfile, + keyfile, }) } class Auth { - constructor ({ token, auth, username, password, scopeAuthKey }) { + constructor ({ token, auth, username, password, scopeAuthKey, certfile, keyfile }) { this.scopeAuthKey = scopeAuthKey this.token = null this.auth = null this.isBasicAuth = false + this.cert = null + this.key = null if (token) { this.token = token } else if (auth) { @@ -108,6 +130,15 @@ class Auth { this.auth = Buffer.from(`${username}:${p}`, 'utf8').toString('base64') this.isBasicAuth = true } + // mTLS may be used in conjunction with another auth method above + if (certfile && keyfile) { + const cert = maybeReadFile(certfile, 'utf-8') + const key = maybeReadFile(keyfile, 'utf-8') + if (cert && key) { + this.cert = cert + this.key = key + } + } } } diff --git a/deps/npm/node_modules/npm-registry-fetch/lib/check-response.js b/deps/npm/node_modules/npm-registry-fetch/lib/check-response.js index 714513908df..066ac3c3242 100644 --- a/deps/npm/node_modules/npm-registry-fetch/lib/check-response.js +++ b/deps/npm/node_modules/npm-registry-fetch/lib/check-response.js @@ -61,7 +61,9 @@ function checkErrors (method, res, startTime, opts) { let parsed = body try { parsed = JSON.parse(body.toString('utf8')) - } catch (e) {} + } catch { + // ignore errors + } if (res.status === 401 && res.headers.get('www-authenticate')) { const auth = res.headers.get('www-authenticate') .split(/,\s*/) diff --git a/deps/npm/node_modules/npm-registry-fetch/lib/clean-url.js b/deps/npm/node_modules/npm-registry-fetch/lib/clean-url.js index ba31dc462f3..a419b47d6a3 100644 --- a/deps/npm/node_modules/npm-registry-fetch/lib/clean-url.js +++ b/deps/npm/node_modules/npm-registry-fetch/lib/clean-url.js @@ -14,7 +14,9 @@ const cleanUrl = (str) => { if (url.password) { str = str.replace(url.password, replace) } - } catch {} + } catch { + // ignore errors + } return str .replace(tokenRegex, `npm_${replace}`) diff --git a/deps/npm/node_modules/npm-registry-fetch/lib/index.js b/deps/npm/node_modules/npm-registry-fetch/lib/index.js index 6c834aa4af5..cc331a50c09 100644 --- a/deps/npm/node_modules/npm-registry-fetch/lib/index.js +++ b/deps/npm/node_modules/npm-registry-fetch/lib/index.js @@ -112,10 +112,10 @@ function regFetch (uri, /* istanbul ignore next */ opts_ = {}) { cache: getCacheMode(opts), cachePath: opts.cache, ca: opts.ca, - cert: opts.cert, + cert: auth.cert || opts.cert, headers, integrity: opts.integrity, - key: opts.key, + key: auth.key || opts.key, localAddress: opts.localAddress, maxSockets: opts.maxSockets, memoize: opts.memoize, @@ -213,6 +213,10 @@ function getHeaders (uri, auth, opts) { 'user-agent': opts.userAgent, }, opts.headers || {}) + if (opts.authType) { + headers['npm-auth-type'] = opts.authType + } + if (opts.scope) { headers['npm-scope'] = opts.scope } diff --git a/deps/npm/node_modules/npm-registry-fetch/package.json b/deps/npm/node_modules/npm-registry-fetch/package.json index 0ce12c63363..7a3885ae12e 100644 --- a/deps/npm/node_modules/npm-registry-fetch/package.json +++ b/deps/npm/node_modules/npm-registry-fetch/package.json @@ -1,6 +1,6 @@ { "name": "npm-registry-fetch", - "version": "13.1.1", + "version": "13.3.1", "description": "Fetch-based http client for use with npm registry APIs", "main": "lib", "files": [ @@ -44,10 +44,12 @@ }, "devDependencies": { "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.3.2", + "@npmcli/template-oss": "3.5.0", "cacache": "^16.0.2", + "mkdirp": "^1.0.4", "nock": "^13.2.4", "require-inject": "^1.4.4", + "rimraf": "^3.0.2", "ssri": "^9.0.0", "tap": "^16.0.1" }, @@ -60,6 +62,6 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.3.2" + "version": "3.5.0" } } diff --git a/deps/npm/node_modules/p-map/readme.md b/deps/npm/node_modules/p-map/readme.md deleted file mode 100644 index 53a3715747c..00000000000 --- a/deps/npm/node_modules/p-map/readme.md +++ /dev/null @@ -1,89 +0,0 @@ -# p-map [![Build Status](https://travis-ci.org/sindresorhus/p-map.svg?branch=master)](https://travis-ci.org/sindresorhus/p-map) - -> Map over promises concurrently - -Useful when you need to run promise-returning & async functions multiple times with different inputs concurrently. - -## Install - -``` -$ npm install p-map -``` - -## Usage - -```js -const pMap = require('p-map'); -const got = require('got'); - -const sites = [ - getWebsiteFromUsername('https://sindresorhus'), //=> Promise - 'https://ava.li', - 'https://github.com' -]; - -(async () => { - const mapper = async site => { - const {requestUrl} = await got.head(site); - return requestUrl; - }; - - const result = await pMap(sites, mapper, {concurrency: 2}); - - console.log(result); - //=> ['https://sindresorhus.com/', 'https://ava.li/', 'https://github.com/'] -})(); -``` - -## API - -### pMap(input, mapper, options?) - -Returns a `Promise` that is fulfilled when all promises in `input` and ones returned from `mapper` are fulfilled, or rejects if any of the promises reject. The fulfilled value is an `Array` of the fulfilled values returned from `mapper` in `input` order. - -#### input - -Type: `Iterable` - -Iterated over concurrently in the `mapper` function. - -#### mapper(element, index) - -Type: `Function` - -Expected to return a `Promise` or value. - -#### options - -Type: `object` - -##### concurrency - -Type: `number` (Integer)\ -Default: `Infinity`\ -Minimum: `1` - -Number of concurrently pending promises returned by `mapper`. - -##### stopOnError - -Type: `boolean`\ -Default: `true` - -When set to `false`, instead of stopping when a promise rejects, it will wait for all the promises to settle and then reject with an [aggregated error](https://github.com/sindresorhus/aggregate-error) containing all the errors from the rejected promises. - -## p-map for enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of p-map and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-p-map?utm_source=npm-p-map&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - -## Related - -- [p-all](https://github.com/sindresorhus/p-all) - Run promise-returning & async functions concurrently with optional limited concurrency -- [p-filter](https://github.com/sindresorhus/p-filter) - Filter promises concurrently -- [p-times](https://github.com/sindresorhus/p-times) - Run promise-returning & async functions a specific number of times concurrently -- [p-props](https://github.com/sindresorhus/p-props) - Like `Promise.all()` but for `Map` and `Object` -- [p-map-series](https://github.com/sindresorhus/p-map-series) - Map over promises serially -- [p-queue](https://github.com/sindresorhus/p-queue) - Promise queue with concurrency control -- [More…](https://github.com/sindresorhus/promise-fun) diff --git a/deps/npm/node_modules/pacote/README.md b/deps/npm/node_modules/pacote/README.md index eac48f69fe3..4403ad113a0 100644 --- a/deps/npm/node_modules/pacote/README.md +++ b/deps/npm/node_modules/pacote/README.md @@ -237,6 +237,7 @@ In addition to the common `package.json` fields, manifests include: artifact can be found. * `manifest._from` A normalized form of the spec passed in as an argument. * `manifest._integrity` The integrity value for the package artifact. +* `manifest._id` The canonical spec of this package version: name@version. * `manifest.dist` Registry manifests (those included in a packument) have a `dist` object. Only `tarball` is required, though at least one of `shasum` or `integrity` is almost always present. @@ -274,3 +275,8 @@ For Pacote's purposes, the following fields are relevant: `foo@latest` gets turned into `foo@1.2.3`. * `time` In the full packument, an object mapping version numbers to publication times, for the `opts.before` functionality. + +Pacote adds the following fields, regardless of the accept header: + +* `_cached` Whether the packument was fetched from the network or the local cache. +* `_contentLength` The size of the packument. diff --git a/deps/npm/node_modules/pacote/lib/bin.js b/deps/npm/node_modules/pacote/lib/bin.js index 4a1f911e42b..f35b62ca71a 100755 --- a/deps/npm/node_modules/pacote/lib/bin.js +++ b/deps/npm/node_modules/pacote/lib/bin.js @@ -18,10 +18,15 @@ const run = conf => { case 'tarball': if (!conf._[2] || conf._[2] === '-') { return pacote.tarball.stream(conf._[1], stream => { - stream.pipe(conf.testStdout || - /* istanbul ignore next */ process.stdout) + stream.pipe( + conf.testStdout || + /* istanbul ignore next */ + process.stdout + ) // make sure it resolves something falsey - return stream.promise().then(() => {}) + return stream.promise().then(() => { + return false + }) }, conf) } else { return pacote.tarball.file(conf._[1], conf._[2], conf) diff --git a/deps/npm/node_modules/pacote/lib/fetcher.js b/deps/npm/node_modules/pacote/lib/fetcher.js index d88724c5d19..95b6d3ee432 100644 --- a/deps/npm/node_modules/pacote/lib/fetcher.js +++ b/deps/npm/node_modules/pacote/lib/fetcher.js @@ -18,6 +18,7 @@ const removeTrailingSlashes = require('./util/trailing-slashes.js') const getContents = require('@npmcli/installed-package-contents') const readPackageJsonFast = require('read-package-json-fast') const readPackageJson = promisify(require('read-package-json')) +const Minipass = require('minipass') // we only change ownership on unix platforms, and only if uid is 0 const selfOwner = process.getuid && process.getuid() === 0 ? { @@ -105,15 +106,10 @@ class FetcherBase { this[_readPackageJson] = readPackageJsonFast } - // config values: npmjs (default), never, always - // we don't want to mutate the original value - if (opts.replaceRegistryHost !== 'never' - && opts.replaceRegistryHost !== 'always' - ) { - this.replaceRegistryHost = 'npmjs' - } else { - this.replaceRegistryHost = opts.replaceRegistryHost - } + // rrh is a registry hostname or 'never' or 'always' + // defaults to registry.npmjs.org + this.replaceRegistryHost = (!opts.replaceRegistryHost || opts.replaceRegistryHost === 'npmjs') ? + 'registry.npmjs.org' : opts.replaceRegistryHost this.defaultTag = opts.defaultTag || 'latest' this.registry = removeTrailingSlashes(opts.registry || 'https://registry.npmjs.org') @@ -224,18 +220,18 @@ class FetcherBase { } [_istream] (stream) { - // everyone will need one of these, either for verifying or calculating - // We always set it, because we have might only have a weak legacy hex - // sha1 in the packument, and this MAY upgrade it to a stronger algo. - // If we had an integrity, and it doesn't match, then this does not - // override that error; the istream will raise the error before it - // gets to the point of re-setting the integrity. - const istream = ssri.integrityStream(this.opts) - istream.on('integrity', i => this.integrity = i) - stream.on('error', er => istream.emit('error', er)) - - // if not caching this, just pipe through to the istream and return it + // if not caching this, just return it if (!this.opts.cache || !this[_cacheFetches]) { + // instead of creating a new integrity stream, we only piggyback on the + // provided stream's events + if (stream.hasIntegrityEmitter) { + stream.on('integrity', i => this.integrity = i) + return stream + } + + const istream = ssri.integrityStream(this.opts) + istream.on('integrity', i => this.integrity = i) + stream.on('error', err => istream.emit('error', err)) return stream.pipe(istream) } @@ -243,21 +239,24 @@ class FetcherBase { // but then pipe from the original tarball stream into the cache as well. // To do this without losing any data, and since the cacache put stream // is not a passthrough, we have to pipe from the original stream into - // the cache AFTER we pipe into the istream. Since the cache stream + // the cache AFTER we pipe into the middleStream. Since the cache stream // has an asynchronous flush to write its contents to disk, we need to - // defer the istream end until the cache stream ends. - stream.pipe(istream, { end: false }) + // defer the middleStream end until the cache stream ends. + const middleStream = new Minipass() + stream.on('error', err => middleStream.emit('error', err)) + stream.pipe(middleStream, { end: false }) const cstream = cacache.put.stream( this.opts.cache, `pacote:tarball:${this.from}`, this.opts ) + cstream.on('integrity', i => this.integrity = i) + cstream.on('error', err => stream.emit('error', err)) stream.pipe(cstream) - // defer istream end until after cstream - // cache write errors should not crash the fetch, this is best-effort. - cstream.promise().catch(() => {}).then(() => istream.end()) - return istream + // eslint-disable-next-line promise/catch-or-return + cstream.promise().catch(() => {}).then(() => middleStream.end()) + return middleStream } pickIntegrityAlgorithm () { @@ -271,7 +270,10 @@ class FetcherBase { } // override the types getter - get types () {} + get types () { + return false + } + [_assertType] () { if (this.types && !this.types.includes(this.spec.type)) { throw new TypeError(`Wrong spec type (${ diff --git a/deps/npm/node_modules/pacote/lib/git.js b/deps/npm/node_modules/pacote/lib/git.js index 9d84d95fa62..c4819b4fdf4 100644 --- a/deps/npm/node_modules/pacote/lib/git.js +++ b/deps/npm/node_modules/pacote/lib/git.js @@ -239,7 +239,7 @@ class GitFetcher extends Fetcher { tarballOk = tarballOk && h && resolved === repoUrl(h, { noCommittish: false }) && h.tarball - return cacache.tmp.withTmp(this.cache, o, tmp => { + return cacache.tmp.withTmp(this.cache, o, async tmp => { // if we're resolved, and have a tarball url, shell out to RemoteFetcher if (tarballOk) { const nameat = this.spec.name ? `${this.spec.name}@` : '' @@ -259,16 +259,15 @@ class GitFetcher extends Fetcher { }) } - return ( + const sha = await ( h ? this[_cloneHosted](ref, tmp) : this[_cloneRepo](this.spec.fetchSpec, ref, tmp) - ).then(sha => { - this.resolvedSha = sha - if (!this.resolved) { - this[_addGitSha](sha) - } - }) - .then(() => handler(tmp)) + ) + this.resolvedSha = sha + if (!this.resolved) { + await this[_addGitSha](sha) + } + return handler(tmp) }) } diff --git a/deps/npm/node_modules/pacote/lib/registry.js b/deps/npm/node_modules/pacote/lib/registry.js index 2eb37bcecce..c8eb6b02907 100644 --- a/deps/npm/node_modules/pacote/lib/registry.js +++ b/deps/npm/node_modules/pacote/lib/registry.js @@ -122,11 +122,12 @@ class RegistryFetcher extends Fetcher { } const packument = await this.packument() - const mani = await pickManifest(packument, this.spec.fetchSpec, { + let mani = await pickManifest(packument, this.spec.fetchSpec, { ...this.opts, defaultTag: this.defaultTag, before: this.before, }) + mani = rpj.normalize(mani) /* XXX add ETARGET and E403 revalidation of cached packuments here */ // add _resolved and _integrity from dist object @@ -165,49 +166,53 @@ class RegistryFetcher extends Fetcher { mani._integrity = String(this.integrity) if (dist.signatures) { if (this.opts.verifySignatures) { - if (this.registryKeys) { - // validate and throw on error, then set _signatures - const message = `${mani._id}:${mani._integrity}` - for (const signature of dist.signatures) { - const publicKey = this.registryKeys.filter(key => (key.keyid === signature.keyid))[0] - if (!publicKey) { - throw Object.assign(new Error( - `${mani._id} has a signature with keyid: ${signature.keyid} ` + - 'but no corresponding public key can be found.' - ), { code: 'EMISSINGSIGNATUREKEY' }) - } - const validPublicKey = - !publicKey.expires || (Date.parse(publicKey.expires) > Date.now()) - if (!validPublicKey) { - throw Object.assign(new Error( - `${mani._id} has a signature with keyid: ${signature.keyid} ` + + // validate and throw on error, then set _signatures + const message = `${mani._id}:${mani._integrity}` + for (const signature of dist.signatures) { + const publicKey = this.registryKeys && + this.registryKeys.filter(key => (key.keyid === signature.keyid))[0] + if (!publicKey) { + throw Object.assign(new Error( + `${mani._id} has a registry signature with keyid: ${signature.keyid} ` + + 'but no corresponding public key can be found' + ), { code: 'EMISSINGSIGNATUREKEY' }) + } + const validPublicKey = + !publicKey.expires || (Date.parse(publicKey.expires) > Date.now()) + if (!validPublicKey) { + throw Object.assign(new Error( + `${mani._id} has a registry signature with keyid: ${signature.keyid} ` + `but the corresponding public key has expired ${publicKey.expires}` - ), { code: 'EEXPIREDSIGNATUREKEY' }) - } - const verifier = crypto.createVerify('SHA256') - verifier.write(message) - verifier.end() - const valid = verifier.verify( - publicKey.pemkey, - signature.sig, - 'base64' - ) - if (!valid) { - throw Object.assign(new Error( - 'Integrity checksum signature failed: ' + - `key ${publicKey.keyid} signature ${signature.sig}` - ), { code: 'EINTEGRITYSIGNATURE' }) - } + ), { code: 'EEXPIREDSIGNATUREKEY' }) + } + const verifier = crypto.createVerify('SHA256') + verifier.write(message) + verifier.end() + const valid = verifier.verify( + publicKey.pemkey, + signature.sig, + 'base64' + ) + if (!valid) { + throw Object.assign(new Error( + `${mani._id} has an invalid registry signature with ` + + `keyid: ${publicKey.keyid} and signature: ${signature.sig}` + ), { + code: 'EINTEGRITYSIGNATURE', + keyid: publicKey.keyid, + signature: signature.sig, + resolved: mani._resolved, + integrity: mani._integrity, + }) } - mani._signatures = dist.signatures } - // if no keys, don't set _signatures + mani._signatures = dist.signatures } else { mani._signatures = dist.signatures } } } - this.package = rpj.normalize(mani) + this.package = mani return this.package } diff --git a/deps/npm/node_modules/pacote/lib/remote.js b/deps/npm/node_modules/pacote/lib/remote.js index 14e687805d4..a361a9e8978 100644 --- a/deps/npm/node_modules/pacote/lib/remote.js +++ b/deps/npm/node_modules/pacote/lib/remote.js @@ -4,8 +4,6 @@ const _tarballFromResolved = Symbol.for('pacote.Fetcher._tarballFromResolved') const pacoteVersion = require('../package.json').version const fetch = require('npm-registry-fetch') const Minipass = require('minipass') -// The default registry URL is a string of great magic. -const magicHost = 'https://registry.npmjs.org' const _cacheFetches = Symbol.for('pacote.Fetcher._cacheFetches') const _headers = Symbol('_headers') @@ -14,11 +12,9 @@ class RemoteFetcher extends Fetcher { super(spec, opts) this.resolved = this.spec.fetchSpec const resolvedURL = new URL(this.resolved) - if ( - (this.replaceRegistryHost === 'npmjs' - && resolvedURL.origin === magicHost) - || this.replaceRegistryHost === 'always' - ) { + if (this.replaceRegistryHost !== 'never' + && (this.replaceRegistryHost === 'always' + || this.replaceRegistryHost === resolvedURL.host)) { this.resolved = new URL(resolvedURL.pathname, this.registry).href } @@ -35,6 +31,8 @@ class RemoteFetcher extends Fetcher { [_tarballFromResolved] () { const stream = new Minipass() + stream.hasIntegrityEmitter = true + const fetchOpts = { ...this.opts, headers: this[_headers](), @@ -42,16 +40,20 @@ class RemoteFetcher extends Fetcher { integrity: this.integrity, algorithms: [this.pickIntegrityAlgorithm()], } - fetch(this.resolved, fetchOpts).then(res => { - const hash = res.headers.get('x-local-cache-hash') - if (hash) { - this.integrity = decodeURIComponent(hash) - } + // eslint-disable-next-line promise/always-return + fetch(this.resolved, fetchOpts).then(res => { res.body.on('error', /* istanbul ignore next - exceedingly rare and hard to simulate */ er => stream.emit('error', er) - ).pipe(stream) + ) + + res.body.on('integrity', i => { + this.integrity = i + stream.emit('integrity', i) + }) + + res.body.pipe(stream) }).catch(er => stream.emit('error', er)) return stream diff --git a/deps/npm/node_modules/pacote/package.json b/deps/npm/node_modules/pacote/package.json index 5045e3f06a0..960530ec0b3 100644 --- a/deps/npm/node_modules/pacote/package.json +++ b/deps/npm/node_modules/pacote/package.json @@ -1,6 +1,6 @@ { "name": "pacote", - "version": "13.5.0", + "version": "13.6.2", "description": "JavaScript package downloader", "author": "GitHub Inc.", "bin": { @@ -21,8 +21,7 @@ "template-oss-apply": "template-oss-apply --force" }, "tap": { - "timeout": 300, - "coverage-map": "map.js" + "timeout": 300 }, "devDependencies": { "@npmcli/eslint-config": "^3.0.1", @@ -46,7 +45,7 @@ "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^3.0.1", + "@npmcli/run-script": "^4.1.0", "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", diff --git a/deps/npm/node_modules/path-is-absolute/readme.md b/deps/npm/node_modules/path-is-absolute/readme.md deleted file mode 100644 index 8dbdf5fcb77..00000000000 --- a/deps/npm/node_modules/path-is-absolute/readme.md +++ /dev/null @@ -1,59 +0,0 @@ -# path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute) - -> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com) - - -## Install - -``` -$ npm install --save path-is-absolute -``` - - -## Usage - -```js -const pathIsAbsolute = require('path-is-absolute'); - -// Running on Linux -pathIsAbsolute('/home/foo'); -//=> true -pathIsAbsolute('C:/Users/foo'); -//=> false - -// Running on Windows -pathIsAbsolute('C:/Users/foo'); -//=> true -pathIsAbsolute('/home/foo'); -//=> false - -// Running on any OS -pathIsAbsolute.posix('/home/foo'); -//=> true -pathIsAbsolute.posix('C:/Users/foo'); -//=> false -pathIsAbsolute.win32('C:/Users/foo'); -//=> true -pathIsAbsolute.win32('/home/foo'); -//=> false -``` - - -## API - -See the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path). - -### pathIsAbsolute(path) - -### pathIsAbsolute.posix(path) - -POSIX specific version. - -### pathIsAbsolute.win32(path) - -Windows specific version. - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/deps/npm/node_modules/postcss-selector-parser/API.md b/deps/npm/node_modules/postcss-selector-parser/API.md new file mode 100644 index 00000000000..6aa1f1438f1 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/API.md @@ -0,0 +1,873 @@ +# API Documentation + +*Please use only this documented API when working with the parser. Methods +not documented here are subject to change at any point.* + +## `parser` function + +This is the module's main entry point. + +```js +const parser = require('postcss-selector-parser'); +``` + +### `parser([transform], [options])` + +Creates a new `processor` instance + +```js +const processor = parser(); +``` + +Or, with optional transform function + +```js +const transform = selectors => { + selectors.walkUniversals(selector => { + selector.remove(); + }); +}; + +const processor = parser(transform) + +// Example +const result = processor.processSync('*.class'); +// => .class +``` + +[See processor documentation](#processor) + +Arguments: + +* `transform (function)`: Provide a function to work with the parsed AST. +* `options (object)`: Provide default options for all calls on the returned `Processor`. + +### `parser.attribute([props])` + +Creates a new attribute selector. + +```js +parser.attribute({attribute: 'href'}); +// => [href] +``` + +Arguments: + +* `props (object)`: The new node's properties. + +### `parser.className([props])` + +Creates a new class selector. + +```js +parser.className({value: 'button'}); +// => .button +``` + +Arguments: + +* `props (object)`: The new node's properties. + +### `parser.combinator([props])` + +Creates a new selector combinator. + +```js +parser.combinator({value: '+'}); +// => + +``` + +Arguments: + +* `props (object)`: The new node's properties. + +Notes: +* **Descendant Combinators** The value of descendant combinators created by the + parser always just a single space (`" "`). For descendant selectors with no + comments, additional space is now stored in `node.spaces.before`. Depending + on the location of comments, additional spaces may be stored in + `node.raws.spaces.before`, `node.raws.spaces.after`, or `node.raws.value`. +* **Named Combinators** Although, nonstandard and unlikely to ever become a standard, + named combinators like `/deep/` and `/for/` are parsed as combinators. The + `node.value` is name after being unescaped and normalized as lowercase. The + original value for the combinator name is stored in `node.raws.value`. + + +### `parser.comment([props])` + +Creates a new comment. + +```js +parser.comment({value: '/* Affirmative, Dave. I read you. */'}); +// => /* Affirmative, Dave. I read you. */ +``` + +Arguments: + +* `props (object)`: The new node's properties. + +### `parser.id([props])` + +Creates a new id selector. + +```js +parser.id({value: 'search'}); +// => #search +``` + +Arguments: + +* `props (object)`: The new node's properties. + +### `parser.nesting([props])` + +Creates a new nesting selector. + +```js +parser.nesting(); +// => & +``` + +Arguments: + +* `props (object)`: The new node's properties. + +### `parser.pseudo([props])` + +Creates a new pseudo selector. + +```js +parser.pseudo({value: '::before'}); +// => ::before +``` + +Arguments: + +* `props (object)`: The new node's properties. + +### `parser.root([props])` + +Creates a new root node. + +```js +parser.root(); +// => (empty) +``` + +Arguments: + +* `props (object)`: The new node's properties. + +### `parser.selector([props])` + +Creates a new selector node. + +```js +parser.selector(); +// => (empty) +``` + +Arguments: + +* `props (object)`: The new node's properties. + +### `parser.string([props])` + +Creates a new string node. + +```js +parser.string(); +// => (empty) +``` + +Arguments: + +* `props (object)`: The new node's properties. + +### `parser.tag([props])` + +Creates a new tag selector. + +```js +parser.tag({value: 'button'}); +// => button +``` + +Arguments: + +* `props (object)`: The new node's properties. + +### `parser.universal([props])` + +Creates a new universal selector. + +```js +parser.universal(); +// => * +``` + +Arguments: + +* `props (object)`: The new node's properties. + +## Node types + +### `node.type` + +A string representation of the selector type. It can be one of the following; +`attribute`, `class`, `combinator`, `comment`, `id`, `nesting`, `pseudo`, +`root`, `selector`, `string`, `tag`, or `universal`. Note that for convenience, +these constants are exposed on the main `parser` as uppercased keys. So for +example you can get `id` by querying `parser.ID`. + +```js +parser.attribute({attribute: 'href'}).type; +// => 'attribute' +``` + +### `node.parent` + +Returns the parent node. + +```js +root.nodes[0].parent === root; +``` + +### `node.toString()`, `String(node)`, or `'' + node` + +Returns a string representation of the node. + +```js +const id = parser.id({value: 'search'}); +console.log(String(id)); +// => #search +``` + +### `node.next()` & `node.prev()` + +Returns the next/previous child of the parent node. + +```js +const next = id.next(); +if (next && next.type !== 'combinator') { + throw new Error('Qualified IDs are not allowed!'); +} +``` + +### `node.replaceWith(node)` + +Replace a node with another. + +```js +const attr = selectors.first.first; +const className = parser.className({value: 'test'}); +attr.replaceWith(className); +``` + +Arguments: + +* `node`: The node to substitute the original with. + +### `node.remove()` + +Removes the node from its parent node. + +```js +if (node.type === 'id') { + node.remove(); +} +``` + +### `node.clone()` + +Returns a copy of a node, detached from any parent containers that the +original might have had. + +```js +const cloned = parser.id({value: 'search'}); +String(cloned); + +// => #search +``` + +### `node.isAtPosition(line, column)` + +Return a `boolean` indicating whether this node includes the character at the +position of the given line and column. Returns `undefined` if the nodes lack +sufficient source metadata to determine the position. + +Arguments: + +* `line`: 1-index based line number relative to the start of the selector. +* `column`: 1-index based column number relative to the start of the selector. + +### `node.spaces` + +Extra whitespaces around the node will be moved into `node.spaces.before` and +`node.spaces.after`. So for example, these spaces will be moved as they have +no semantic meaning: + +```css + h1 , h2 {} +``` + +For descendent selectors, the value is always a single space. + +```css +h1 h2 {} +``` + +Additional whitespace is found in either the `node.spaces.before` and `node.spaces.after` depending on the presence of comments or other whitespace characters. If the actual whitespace does not start or end with a single space, the node's raw value is set to the actual space(s) found in the source. + +### `node.source` + +An object describing the node's start/end, line/column source position. + +Within the following CSS, the `.bar` class node ... + +```css +.foo, + .bar {} +``` + +... will contain the following `source` object. + +```js +source: { + start: { + line: 2, + column: 3 + }, + end: { + line: 2, + column: 6 + } +} +``` + +### `node.sourceIndex` + +The zero-based index of the node within the original source string. + +Within the following CSS, the `.baz` class node will have a `sourceIndex` of `12`. + +```css +.foo, .bar, .baz {} +``` + +## Container types + +The `root`, `selector`, and `pseudo` nodes have some helper methods for working +with their children. + +### `container.nodes` + +An array of the container's children. + +```js +// Input: h1 h2 +selectors.at(0).nodes.length // => 3 +selectors.at(0).nodes[0].value // => 'h1' +selectors.at(0).nodes[1].value // => ' ' +``` + +### `container.first` & `container.last` + +The first/last child of the container. + +```js +selector.first === selector.nodes[0]; +selector.last === selector.nodes[selector.nodes.length - 1]; +``` + +### `container.at(index)` + +Returns the node at position `index`. + +```js +selector.at(0) === selector.first; +selector.at(0) === selector.nodes[0]; +``` + +Arguments: + +* `index`: The index of the node to return. + +### `container.atPosition(line, column)` + +Returns the node at the source position `index`. + +```js +selector.at(0) === selector.first; +selector.at(0) === selector.nodes[0]; +``` + +Arguments: + +* `index`: The index of the node to return. + +### `container.index(node)` + +Return the index of the node within its container. + +```js +selector.index(selector.nodes[2]) // => 2 +``` + +Arguments: + +* `node`: A node within the current container. + +### `container.length` + +Proxy to the length of the container's nodes. + +```js +container.length === container.nodes.length +``` + +### `container` Array iterators + +The container class provides proxies to certain Array methods; these are: + +* `container.map === container.nodes.map` +* `container.reduce === container.nodes.reduce` +* `container.every === container.nodes.every` +* `container.some === container.nodes.some` +* `container.filter === container.nodes.filter` +* `container.sort === container.nodes.sort` + +Note that these methods only work on a container's immediate children; recursive +iteration is provided by `container.walk`. + +### `container.each(callback)` + +Iterate the container's immediate children, calling `callback` for each child. +You may return `false` within the callback to break the iteration. + +```js +let className; +selectors.each((selector, index) => { + if (selector.type === 'class') { + className = selector.value; + return false; + } +}); +``` + +Note that unlike `Array#forEach()`, this iterator is safe to use whilst adding +or removing nodes from the container. + +Arguments: + +* `callback (function)`: A function to call for each node, which receives `node` + and `index` arguments. + +### `container.walk(callback)` + +Like `container#each`, but will also iterate child nodes as long as they are +`container` types. + +```js +selectors.walk((selector, index) => { + // all nodes +}); +``` + +Arguments: + +* `callback (function)`: A function to call for each node, which receives `node` + and `index` arguments. + +This iterator is safe to use whilst mutating `container.nodes`, +like `container#each`. + +### `container.walk` proxies + +The container class provides proxy methods for iterating over types of nodes, +so that it is easier to write modules that target specific selectors. Those +methods are: + +* `container.walkAttributes` +* `container.walkClasses` +* `container.walkCombinators` +* `container.walkComments` +* `container.walkIds` +* `container.walkNesting` +* `container.walkPseudos` +* `container.walkTags` +* `container.walkUniversals` + +### `container.split(callback)` + +This method allows you to split a group of nodes by returning `true` from +a callback. It returns an array of arrays, where each inner array corresponds +to the groups that you created via the callback. + +```js +// (input) => h1 h2>>h3 +const list = selectors.first.split(selector => { + return selector.type === 'combinator'; +}); + +// (node values) => [['h1', ' '], ['h2', '>>'], ['h3']] +``` + +Arguments: + +* `callback (function)`: A function to call for each node, which receives `node` + as an argument. + +### `container.prepend(node)` & `container.append(node)` + +Add a node to the start/end of the container. Note that doing so will set +the parent property of the node to this container. + +```js +const id = parser.id({value: 'search'}); +selector.append(id); +``` + +Arguments: + +* `node`: The node to add. + +### `container.insertBefore(old, new)` & `container.insertAfter(old, new)` + +Add a node before or after an existing node in a container: + +```js +selectors.walk(selector => { + if (selector.type !== 'class') { + const className = parser.className({value: 'theme-name'}); + selector.parent.insertAfter(selector, className); + } +}); +``` + +Arguments: + +* `old`: The existing node in the container. +* `new`: The new node to add before/after the existing node. + +### `container.removeChild(node)` + +Remove the node from the container. Note that you can also use +`node.remove()` if you would like to remove just a single node. + +```js +selector.length // => 2 +selector.remove(id) +selector.length // => 1; +id.parent // undefined +``` + +Arguments: + +* `node`: The node to remove. + +### `container.removeAll()` or `container.empty()` + +Remove all children from the container. + +```js +selector.removeAll(); +selector.length // => 0 +``` + +## Root nodes + +A root node represents a comma separated list of selectors. Indeed, all +a root's `toString()` method does is join its selector children with a ','. +Other than this, it has no special functionality and acts like a container. + +### `root.trailingComma` + +This will be set to `true` if the input has a trailing comma, in order to +support parsing of legacy CSS hacks. + +## Selector nodes + +A selector node represents a single complex selector. For example, this +selector string `h1 h2 h3, [href] > p`, is represented as two selector nodes. +It has no special functionality of its own. + +## Pseudo nodes + +A pseudo selector extends a container node; if it has any parameters of its +own (such as `h1:not(h2, h3)`), they will be its children. Note that the pseudo +`value` will always contain the colons preceding the pseudo identifier. This +is so that both `:before` and `::before` are properly represented in the AST. + +## Attribute nodes + +### `attribute.quoted` + +Returns `true` if the attribute's value is wrapped in quotation marks, false if it is not. +Remains `undefined` if there is no attribute value. + +```css +[href=foo] /* false */ +[href='foo'] /* true */ +[href="foo"] /* true */ +[href] /* undefined */ +``` + +### `attribute.qualifiedAttribute` + +Returns the attribute name qualified with the namespace if one is given. + +### `attribute.offsetOf(part)` + + Returns the offset of the attribute part specified relative to the + start of the node of the output string. This is useful in raising + error messages about a specific part of the attribute, especially + in combination with `attribute.sourceIndex`. + + Returns `-1` if the name is invalid or the value doesn't exist in this + attribute. + + The legal values for `part` are: + + * `"ns"` - alias for "namespace" + * `"namespace"` - the namespace if it exists. + * `"attribute"` - the attribute name + * `"attributeNS"` - the start of the attribute or its namespace + * `"operator"` - the match operator of the attribute + * `"value"` - The value (string or identifier) + * `"insensitive"` - the case insensitivity flag + +### `attribute.raws.unquoted` + +Returns the unquoted content of the attribute's value. +Remains `undefined` if there is no attribute value. + +```css +[href=foo] /* foo */ +[href='foo'] /* foo */ +[href="foo"] /* foo */ +[href] /* undefined */ +``` + +### `attribute.spaces` + +Like `node.spaces` with the `before` and `after` values containing the spaces +around the element, the parts of the attribute can also have spaces before +and after them. The for each of `attribute`, `operator`, `value` and +`insensitive` there is corresponding property of the same nam in +`node.spaces` that has an optional `before` or `after` string containing only +whitespace. + +Note that corresponding values in `attributes.raws.spaces` contain values +including any comments. If set, these values will override the +`attribute.spaces` value. Take care to remove them if changing +`attribute.spaces`. + +### `attribute.raws` + +The raws object stores comments and other information necessary to re-render +the node exactly as it was in the source. + +If a comment is embedded within the identifiers for the `namespace`, `attribute` +or `value` then a property is placed in the raws for that value containing the full source of the propery including comments. + +If a comment is embedded within the space between parts of the attribute +then the raw for that space is set accordingly. + +Setting an attribute's property `raws` value to be deleted. + +For now, changing the spaces required also updating or removing any of the +raws values that override them. + +Example: `[ /*before*/ href /* after-attr */ = /* after-operator */ te/*inside-value*/st/* wow */ /*omg*/i/*bbq*/ /*whodoesthis*/]` would parse as: + +```js +{ + attribute: "href", + operator: "=", + value: "test", + spaces: { + before: '', + after: '', + attribute: { before: ' ', after: ' ' }, + operator: { after: ' ' }, + value: { after: ' ' }, + insensitive: { after: ' ' } + }, + raws: { + spaces: { + attribute: { before: ' /*before*/ ', after: ' /* after-attr */ ' }, + operator: { after: ' /* after-operator */ ' }, + value: { after: '/* wow */ /*omg*/' }, + insensitive: { after: '/*bbq*/ /*whodoesthis*/' } + }, + unquoted: 'test', + value: 'te/*inside-value*/st' + } +} +``` + +## `Processor` + +### `ProcessorOptions` + +* `lossless` - When `true`, whitespace is preserved. Defaults to `true`. +* `updateSelector` - When `true`, if any processor methods are passed a postcss + `Rule` node instead of a string, then that Rule's selector is updated + with the results of the processing. Defaults to `true`. + +### `process|processSync(selectors, [options])` + +Processes the `selectors`, returning a string from the result of processing. + +Note: when the `updateSelector` option is set, the rule's selector +will be updated with the resulting string. + +**Example:** + +```js +const parser = require("postcss-selector-parser"); +const processor = parser(); + +let result = processor.processSync(' .class'); +console.log(result); +// => .class + +// Asynchronous operation +let promise = processor.process(' .class').then(result => { + console.log(result) + // => .class +}); + +// To have the parser normalize whitespace values, utilize the options +result = processor.processSync(' .class ', {lossless: false}); +console.log(result); +// => .class + +// For better syntax errors, pass a PostCSS Rule node. +const postcss = require('postcss'); +rule = postcss.rule({selector: ' #foo > a, .class '}); +processor.process(rule, {lossless: false, updateSelector: true}).then(result => { + console.log(result); + // => #foo>a,.class + console.log("rule:", rule.selector); + // => rule: #foo>a,.class +}) +``` + +Arguments: + +* `selectors (string|postcss.Rule)`: Either a selector string or a PostCSS Rule + node. +* `[options] (object)`: Process options + + +### `ast|astSync(selectors, [options])` + +Like `process()` and `processSync()` but after +processing the `selectors` these methods return the `Root` node of the result +instead of a string. + +Note: when the `updateSelector` option is set, the rule's selector +will be updated with the resulting string. + +### `transform|transformSync(selectors, [options])` + +Like `process()` and `processSync()` but after +processing the `selectors` these methods return the value returned by the +processor callback. + +Note: when the `updateSelector` option is set, the rule's selector +will be updated with the resulting string. + +### Error Handling Within Selector Processors + +The root node passed to the selector processor callback +has a method `error(message, options)` that returns an +error object. This method should always be used to raise +errors relating to the syntax of selectors. The options +to this method are passed to postcss's error constructor +([documentation](http://api.postcss.org/Container.html#error)). + +#### Async Error Example + +```js +let processor = (root) => { + return new Promise((resolve, reject) => { + root.walkClasses((classNode) => { + if (/^(.*)[-_]/.test(classNode.value)) { + let msg = "classes may not have underscores or dashes in them"; + reject(root.error(msg, { + index: classNode.sourceIndex + RegExp.$1.length + 1, + word: classNode.value + })); + } + }); + resolve(); + }); +}; + +const postcss = require("postcss"); +const parser = require("postcss-selector-parser"); +const selectorProcessor = parser(processor); +const plugin = postcss.plugin('classValidator', (options) => { + return (root) => { + let promises = []; + root.walkRules(rule => { + promises.push(selectorProcessor.process(rule)); + }); + return Promise.all(promises); + }; +}); +postcss(plugin()).process(` +.foo-bar { + color: red; +} +`.trim(), {from: 'test.css'}).catch((e) => console.error(e.toString())); + +// CssSyntaxError: classValidator: ./test.css:1:5: classes may not have underscores or dashes in them +// +// > 1 | .foo-bar { +// | ^ +// 2 | color: red; +// 3 | } +``` + +#### Synchronous Error Example + +```js +let processor = (root) => { + root.walkClasses((classNode) => { + if (/.*[-_]/.test(classNode.value)) { + let msg = "classes may not have underscores or dashes in them"; + throw root.error(msg, { + index: classNode.sourceIndex, + word: classNode.value + }); + } + }); +}; + +const postcss = require("postcss"); +const parser = require("postcss-selector-parser"); +const selectorProcessor = parser(processor); +const plugin = postcss.plugin('classValidator', (options) => { + return (root) => { + root.walkRules(rule => { + selectorProcessor.processSync(rule); + }); + }; +}); +postcss(plugin()).process(` +.foo-bar { + color: red; +} +`.trim(), {from: 'test.css'}).catch((e) => console.error(e.toString())); + +// CssSyntaxError: classValidator: ./test.css:1:5: classes may not have underscores or dashes in them +// +// > 1 | .foo-bar { +// | ^ +// 2 | color: red; +// 3 | } +``` diff --git a/deps/npm/node_modules/postcss-selector-parser/LICENSE-MIT b/deps/npm/node_modules/postcss-selector-parser/LICENSE-MIT new file mode 100644 index 00000000000..fd0e863a614 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/LICENSE-MIT @@ -0,0 +1,22 @@ +Copyright (c) Ben Briggs (http://beneb.info) + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/index.js b/deps/npm/node_modules/postcss-selector-parser/dist/index.js new file mode 100644 index 00000000000..6e76a32bdd4 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/index.js @@ -0,0 +1,24 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _processor = _interopRequireDefault(require("./processor")); + +var selectors = _interopRequireWildcard(require("./selectors")); + +function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var parser = function parser(processor) { + return new _processor["default"](processor); +}; + +Object.assign(parser, selectors); +delete parser.__esModule; +var _default = parser; +exports["default"] = _default; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/parser.js b/deps/npm/node_modules/postcss-selector-parser/dist/parser.js new file mode 100644 index 00000000000..8af1cff1ba0 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/parser.js @@ -0,0 +1,1243 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _root = _interopRequireDefault(require("./selectors/root")); + +var _selector = _interopRequireDefault(require("./selectors/selector")); + +var _className = _interopRequireDefault(require("./selectors/className")); + +var _comment = _interopRequireDefault(require("./selectors/comment")); + +var _id = _interopRequireDefault(require("./selectors/id")); + +var _tag = _interopRequireDefault(require("./selectors/tag")); + +var _string = _interopRequireDefault(require("./selectors/string")); + +var _pseudo = _interopRequireDefault(require("./selectors/pseudo")); + +var _attribute = _interopRequireWildcard(require("./selectors/attribute")); + +var _universal = _interopRequireDefault(require("./selectors/universal")); + +var _combinator = _interopRequireDefault(require("./selectors/combinator")); + +var _nesting = _interopRequireDefault(require("./selectors/nesting")); + +var _sortAscending = _interopRequireDefault(require("./sortAscending")); + +var _tokenize = _interopRequireWildcard(require("./tokenize")); + +var tokens = _interopRequireWildcard(require("./tokenTypes")); + +var types = _interopRequireWildcard(require("./selectors/types")); + +var _util = require("./util"); + +var _WHITESPACE_TOKENS, _Object$assign; + +function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS); +var WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign)); + +function tokenStart(token) { + return { + line: token[_tokenize.FIELDS.START_LINE], + column: token[_tokenize.FIELDS.START_COL] + }; +} + +function tokenEnd(token) { + return { + line: token[_tokenize.FIELDS.END_LINE], + column: token[_tokenize.FIELDS.END_COL] + }; +} + +function getSource(startLine, startColumn, endLine, endColumn) { + return { + start: { + line: startLine, + column: startColumn + }, + end: { + line: endLine, + column: endColumn + } + }; +} + +function getTokenSource(token) { + return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]); +} + +function getTokenSourceSpan(startToken, endToken) { + if (!startToken) { + return undefined; + } + + return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]); +} + +function unescapeProp(node, prop) { + var value = node[prop]; + + if (typeof value !== "string") { + return; + } + + if (value.indexOf("\\") !== -1) { + (0, _util.ensureObject)(node, 'raws'); + node[prop] = (0, _util.unesc)(value); + + if (node.raws[prop] === undefined) { + node.raws[prop] = value; + } + } + + return node; +} + +function indexesOf(array, item) { + var i = -1; + var indexes = []; + + while ((i = array.indexOf(item, i + 1)) !== -1) { + indexes.push(i); + } + + return indexes; +} + +function uniqs() { + var list = Array.prototype.concat.apply([], arguments); + return list.filter(function (item, i) { + return i === list.indexOf(item); + }); +} + +var Parser = /*#__PURE__*/function () { + function Parser(rule, options) { + if (options === void 0) { + options = {}; + } + + this.rule = rule; + this.options = Object.assign({ + lossy: false, + safe: false + }, options); + this.position = 0; + this.css = typeof this.rule === 'string' ? this.rule : this.rule.selector; + this.tokens = (0, _tokenize["default"])({ + css: this.css, + error: this._errorGenerator(), + safe: this.options.safe + }); + var rootSource = getTokenSourceSpan(this.tokens[0], this.tokens[this.tokens.length - 1]); + this.root = new _root["default"]({ + source: rootSource + }); + this.root.errorGenerator = this._errorGenerator(); + var selector = new _selector["default"]({ + source: { + start: { + line: 1, + column: 1 + } + } + }); + this.root.append(selector); + this.current = selector; + this.loop(); + } + + var _proto = Parser.prototype; + + _proto._errorGenerator = function _errorGenerator() { + var _this = this; + + return function (message, errorOptions) { + if (typeof _this.rule === 'string') { + return new Error(message); + } + + return _this.rule.error(message, errorOptions); + }; + }; + + _proto.attribute = function attribute() { + var attr = []; + var startingToken = this.currToken; + this.position++; + + while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) { + attr.push(this.currToken); + this.position++; + } + + if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) { + return this.expected('closing square bracket', this.currToken[_tokenize.FIELDS.START_POS]); + } + + var len = attr.length; + var node = { + source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]), + sourceIndex: startingToken[_tokenize.FIELDS.START_POS] + }; + + if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) { + return this.expected('attribute', attr[0][_tokenize.FIELDS.START_POS]); + } + + var pos = 0; + var spaceBefore = ''; + var commentBefore = ''; + var lastAdded = null; + var spaceAfterMeaningfulToken = false; + + while (pos < len) { + var token = attr[pos]; + var content = this.content(token); + var next = attr[pos + 1]; + + switch (token[_tokenize.FIELDS.TYPE]) { + case tokens.space: + // if ( + // len === 1 || + // pos === 0 && this.content(next) === '|' + // ) { + // return this.expected('attribute', token[TOKEN.START_POS], content); + // } + spaceAfterMeaningfulToken = true; + + if (this.options.lossy) { + break; + } + + if (lastAdded) { + (0, _util.ensureObject)(node, 'spaces', lastAdded); + var prevContent = node.spaces[lastAdded].after || ''; + node.spaces[lastAdded].after = prevContent + content; + var existingComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || null; + + if (existingComment) { + node.raws.spaces[lastAdded].after = existingComment + content; + } + } else { + spaceBefore = spaceBefore + content; + commentBefore = commentBefore + content; + } + + break; + + case tokens.asterisk: + if (next[_tokenize.FIELDS.TYPE] === tokens.equals) { + node.operator = content; + lastAdded = 'operator'; + } else if ((!node.namespace || lastAdded === "namespace" && !spaceAfterMeaningfulToken) && next) { + if (spaceBefore) { + (0, _util.ensureObject)(node, 'spaces', 'attribute'); + node.spaces.attribute.before = spaceBefore; + spaceBefore = ''; + } + + if (commentBefore) { + (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute'); + node.raws.spaces.attribute.before = spaceBefore; + commentBefore = ''; + } + + node.namespace = (node.namespace || "") + content; + var rawValue = (0, _util.getProp)(node, 'raws', 'namespace') || null; + + if (rawValue) { + node.raws.namespace += content; + } + + lastAdded = 'namespace'; + } + + spaceAfterMeaningfulToken = false; + break; + + case tokens.dollar: + if (lastAdded === "value") { + var oldRawValue = (0, _util.getProp)(node, 'raws', 'value'); + node.value += "$"; + + if (oldRawValue) { + node.raws.value = oldRawValue + "$"; + } + + break; + } + + // Falls through + + case tokens.caret: + if (next[_tokenize.FIELDS.TYPE] === tokens.equals) { + node.operator = content; + lastAdded = 'operator'; + } + + spaceAfterMeaningfulToken = false; + break; + + case tokens.combinator: + if (content === '~' && next[_tokenize.FIELDS.TYPE] === tokens.equals) { + node.operator = content; + lastAdded = 'operator'; + } + + if (content !== '|') { + spaceAfterMeaningfulToken = false; + break; + } + + if (next[_tokenize.FIELDS.TYPE] === tokens.equals) { + node.operator = content; + lastAdded = 'operator'; + } else if (!node.namespace && !node.attribute) { + node.namespace = true; + } + + spaceAfterMeaningfulToken = false; + break; + + case tokens.word: + if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved. + !node.operator && !node.namespace) { + node.namespace = content; + lastAdded = 'namespace'; + } else if (!node.attribute || lastAdded === "attribute" && !spaceAfterMeaningfulToken) { + if (spaceBefore) { + (0, _util.ensureObject)(node, 'spaces', 'attribute'); + node.spaces.attribute.before = spaceBefore; + spaceBefore = ''; + } + + if (commentBefore) { + (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute'); + node.raws.spaces.attribute.before = commentBefore; + commentBefore = ''; + } + + node.attribute = (node.attribute || "") + content; + + var _rawValue = (0, _util.getProp)(node, 'raws', 'attribute') || null; + + if (_rawValue) { + node.raws.attribute += content; + } + + lastAdded = 'attribute'; + } else if (!node.value && node.value !== "" || lastAdded === "value" && !spaceAfterMeaningfulToken) { + var _unescaped = (0, _util.unesc)(content); + + var _oldRawValue = (0, _util.getProp)(node, 'raws', 'value') || ''; + + var oldValue = node.value || ''; + node.value = oldValue + _unescaped; + node.quoteMark = null; + + if (_unescaped !== content || _oldRawValue) { + (0, _util.ensureObject)(node, 'raws'); + node.raws.value = (_oldRawValue || oldValue) + content; + } + + lastAdded = 'value'; + } else { + var insensitive = content === 'i' || content === "I"; + + if ((node.value || node.value === '') && (node.quoteMark || spaceAfterMeaningfulToken)) { + node.insensitive = insensitive; + + if (!insensitive || content === "I") { + (0, _util.ensureObject)(node, 'raws'); + node.raws.insensitiveFlag = content; + } + + lastAdded = 'insensitive'; + + if (spaceBefore) { + (0, _util.ensureObject)(node, 'spaces', 'insensitive'); + node.spaces.insensitive.before = spaceBefore; + spaceBefore = ''; + } + + if (commentBefore) { + (0, _util.ensureObject)(node, 'raws', 'spaces', 'insensitive'); + node.raws.spaces.insensitive.before = commentBefore; + commentBefore = ''; + } + } else if (node.value || node.value === '') { + lastAdded = 'value'; + node.value += content; + + if (node.raws.value) { + node.raws.value += content; + } + } + } + + spaceAfterMeaningfulToken = false; + break; + + case tokens.str: + if (!node.attribute || !node.operator) { + return this.error("Expected an attribute followed by an operator preceding the string.", { + index: token[_tokenize.FIELDS.START_POS] + }); + } + + var _unescapeValue = (0, _attribute.unescapeValue)(content), + unescaped = _unescapeValue.unescaped, + quoteMark = _unescapeValue.quoteMark; + + node.value = unescaped; + node.quoteMark = quoteMark; + lastAdded = 'value'; + (0, _util.ensureObject)(node, 'raws'); + node.raws.value = content; + spaceAfterMeaningfulToken = false; + break; + + case tokens.equals: + if (!node.attribute) { + return this.expected('attribute', token[_tokenize.FIELDS.START_POS], content); + } + + if (node.value) { + return this.error('Unexpected "=" found; an operator was already defined.', { + index: token[_tokenize.FIELDS.START_POS] + }); + } + + node.operator = node.operator ? node.operator + content : content; + lastAdded = 'operator'; + spaceAfterMeaningfulToken = false; + break; + + case tokens.comment: + if (lastAdded) { + if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === 'insensitive') { + var lastComment = (0, _util.getProp)(node, 'spaces', lastAdded, 'after') || ''; + var rawLastComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || lastComment; + (0, _util.ensureObject)(node, 'raws', 'spaces', lastAdded); + node.raws.spaces[lastAdded].after = rawLastComment + content; + } else { + var lastValue = node[lastAdded] || ''; + var rawLastValue = (0, _util.getProp)(node, 'raws', lastAdded) || lastValue; + (0, _util.ensureObject)(node, 'raws'); + node.raws[lastAdded] = rawLastValue + content; + } + } else { + commentBefore = commentBefore + content; + } + + break; + + default: + return this.error("Unexpected \"" + content + "\" found.", { + index: token[_tokenize.FIELDS.START_POS] + }); + } + + pos++; + } + + unescapeProp(node, "attribute"); + unescapeProp(node, "namespace"); + this.newNode(new _attribute["default"](node)); + this.position++; + } + /** + * return a node containing meaningless garbage up to (but not including) the specified token position. + * if the token position is negative, all remaining tokens are consumed. + * + * This returns an array containing a single string node if all whitespace, + * otherwise an array of comment nodes with space before and after. + * + * These tokens are not added to the current selector, the caller can add them or use them to amend + * a previous node's space metadata. + * + * In lossy mode, this returns only comments. + */ + ; + + _proto.parseWhitespaceEquivalentTokens = function parseWhitespaceEquivalentTokens(stopPosition) { + if (stopPosition < 0) { + stopPosition = this.tokens.length; + } + + var startPosition = this.position; + var nodes = []; + var space = ""; + var lastComment = undefined; + + do { + if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) { + if (!this.options.lossy) { + space += this.content(); + } + } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) { + var spaces = {}; + + if (space) { + spaces.before = space; + space = ""; + } + + lastComment = new _comment["default"]({ + value: this.content(), + source: getTokenSource(this.currToken), + sourceIndex: this.currToken[_tokenize.FIELDS.START_POS], + spaces: spaces + }); + nodes.push(lastComment); + } + } while (++this.position < stopPosition); + + if (space) { + if (lastComment) { + lastComment.spaces.after = space; + } else if (!this.options.lossy) { + var firstToken = this.tokens[startPosition]; + var lastToken = this.tokens[this.position - 1]; + nodes.push(new _string["default"]({ + value: '', + source: getSource(firstToken[_tokenize.FIELDS.START_LINE], firstToken[_tokenize.FIELDS.START_COL], lastToken[_tokenize.FIELDS.END_LINE], lastToken[_tokenize.FIELDS.END_COL]), + sourceIndex: firstToken[_tokenize.FIELDS.START_POS], + spaces: { + before: space, + after: '' + } + })); + } + } + + return nodes; + } + /** + * + * @param {*} nodes + */ + ; + + _proto.convertWhitespaceNodesToSpace = function convertWhitespaceNodesToSpace(nodes, requiredSpace) { + var _this2 = this; + + if (requiredSpace === void 0) { + requiredSpace = false; + } + + var space = ""; + var rawSpace = ""; + nodes.forEach(function (n) { + var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace); + + var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace); + + space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0); + rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0); + }); + + if (rawSpace === space) { + rawSpace = undefined; + } + + var result = { + space: space, + rawSpace: rawSpace + }; + return result; + }; + + _proto.isNamedCombinator = function isNamedCombinator(position) { + if (position === void 0) { + position = this.position; + } + + return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash; + }; + + _proto.namedCombinator = function namedCombinator() { + if (this.isNamedCombinator()) { + var nameRaw = this.content(this.tokens[this.position + 1]); + var name = (0, _util.unesc)(nameRaw).toLowerCase(); + var raws = {}; + + if (name !== nameRaw) { + raws.value = "/" + nameRaw + "/"; + } + + var node = new _combinator["default"]({ + value: "/" + name + "/", + source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]), + sourceIndex: this.currToken[_tokenize.FIELDS.START_POS], + raws: raws + }); + this.position = this.position + 3; + return node; + } else { + this.unexpected(); + } + }; + + _proto.combinator = function combinator() { + var _this3 = this; + + if (this.content() === '|') { + return this.namespace(); + } // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector. + + + var nextSigTokenPos = this.locateNextMeaningfulToken(this.position); + + if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma) { + var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos); + + if (nodes.length > 0) { + var last = this.current.last; + + if (last) { + var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes), + space = _this$convertWhitespa.space, + rawSpace = _this$convertWhitespa.rawSpace; + + if (rawSpace !== undefined) { + last.rawSpaceAfter += rawSpace; + } + + last.spaces.after += space; + } else { + nodes.forEach(function (n) { + return _this3.newNode(n); + }); + } + } + + return; + } + + var firstToken = this.currToken; + var spaceOrDescendantSelectorNodes = undefined; + + if (nextSigTokenPos > this.position) { + spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos); + } + + var node; + + if (this.isNamedCombinator()) { + node = this.namedCombinator(); + } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) { + node = new _combinator["default"]({ + value: this.content(), + source: getTokenSource(this.currToken), + sourceIndex: this.currToken[_tokenize.FIELDS.START_POS] + }); + this.position++; + } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {// pass + } else if (!spaceOrDescendantSelectorNodes) { + this.unexpected(); + } + + if (node) { + if (spaceOrDescendantSelectorNodes) { + var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes), + _space = _this$convertWhitespa2.space, + _rawSpace = _this$convertWhitespa2.rawSpace; + + node.spaces.before = _space; + node.rawSpaceBefore = _rawSpace; + } + } else { + // descendant combinator + var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true), + _space2 = _this$convertWhitespa3.space, + _rawSpace2 = _this$convertWhitespa3.rawSpace; + + if (!_rawSpace2) { + _rawSpace2 = _space2; + } + + var spaces = {}; + var raws = { + spaces: {} + }; + + if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) { + spaces.before = _space2.slice(0, _space2.length - 1); + raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1); + } else if (_space2.startsWith(' ') && _rawSpace2.startsWith(' ')) { + spaces.after = _space2.slice(1); + raws.spaces.after = _rawSpace2.slice(1); + } else { + raws.value = _rawSpace2; + } + + node = new _combinator["default"]({ + value: ' ', + source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]), + sourceIndex: firstToken[_tokenize.FIELDS.START_POS], + spaces: spaces, + raws: raws + }); + } + + if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) { + node.spaces.after = this.optionalSpace(this.content()); + this.position++; + } + + return this.newNode(node); + }; + + _proto.comma = function comma() { + if (this.position === this.tokens.length - 1) { + this.root.trailingComma = true; + this.position++; + return; + } + + this.current._inferEndPosition(); + + var selector = new _selector["default"]({ + source: { + start: tokenStart(this.tokens[this.position + 1]) + } + }); + this.current.parent.append(selector); + this.current = selector; + this.position++; + }; + + _proto.comment = function comment() { + var current = this.currToken; + this.newNode(new _comment["default"]({ + value: this.content(), + source: getTokenSource(current), + sourceIndex: current[_tokenize.FIELDS.START_POS] + })); + this.position++; + }; + + _proto.error = function error(message, opts) { + throw this.root.error(message, opts); + }; + + _proto.missingBackslash = function missingBackslash() { + return this.error('Expected a backslash preceding the semicolon.', { + index: this.currToken[_tokenize.FIELDS.START_POS] + }); + }; + + _proto.missingParenthesis = function missingParenthesis() { + return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]); + }; + + _proto.missingSquareBracket = function missingSquareBracket() { + return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]); + }; + + _proto.unexpected = function unexpected() { + return this.error("Unexpected '" + this.content() + "'. Escaping special characters with \\ may help.", this.currToken[_tokenize.FIELDS.START_POS]); + }; + + _proto.namespace = function namespace() { + var before = this.prevToken && this.content(this.prevToken) || true; + + if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) { + this.position++; + return this.word(before); + } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) { + this.position++; + return this.universal(before); + } + }; + + _proto.nesting = function nesting() { + if (this.nextToken) { + var nextContent = this.content(this.nextToken); + + if (nextContent === "|") { + this.position++; + return; + } + } + + var current = this.currToken; + this.newNode(new _nesting["default"]({ + value: this.content(), + source: getTokenSource(current), + sourceIndex: current[_tokenize.FIELDS.START_POS] + })); + this.position++; + }; + + _proto.parentheses = function parentheses() { + var last = this.current.last; + var unbalanced = 1; + this.position++; + + if (last && last.type === types.PSEUDO) { + var selector = new _selector["default"]({ + source: { + start: tokenStart(this.tokens[this.position - 1]) + } + }); + var cache = this.current; + last.append(selector); + this.current = selector; + + while (this.position < this.tokens.length && unbalanced) { + if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) { + unbalanced++; + } + + if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) { + unbalanced--; + } + + if (unbalanced) { + this.parse(); + } else { + this.current.source.end = tokenEnd(this.currToken); + this.current.parent.source.end = tokenEnd(this.currToken); + this.position++; + } + } + + this.current = cache; + } else { + // I think this case should be an error. It's used to implement a basic parse of media queries + // but I don't think it's a good idea. + var parenStart = this.currToken; + var parenValue = "("; + var parenEnd; + + while (this.position < this.tokens.length && unbalanced) { + if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) { + unbalanced++; + } + + if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) { + unbalanced--; + } + + parenEnd = this.currToken; + parenValue += this.parseParenthesisToken(this.currToken); + this.position++; + } + + if (last) { + last.appendToPropertyAndEscape("value", parenValue, parenValue); + } else { + this.newNode(new _string["default"]({ + value: parenValue, + source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]), + sourceIndex: parenStart[_tokenize.FIELDS.START_POS] + })); + } + } + + if (unbalanced) { + return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]); + } + }; + + _proto.pseudo = function pseudo() { + var _this4 = this; + + var pseudoStr = ''; + var startingToken = this.currToken; + + while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) { + pseudoStr += this.content(); + this.position++; + } + + if (!this.currToken) { + return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1); + } + + if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) { + this.splitWord(false, function (first, length) { + pseudoStr += first; + + _this4.newNode(new _pseudo["default"]({ + value: pseudoStr, + source: getTokenSourceSpan(startingToken, _this4.currToken), + sourceIndex: startingToken[_tokenize.FIELDS.START_POS] + })); + + if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) { + _this4.error('Misplaced parenthesis.', { + index: _this4.nextToken[_tokenize.FIELDS.START_POS] + }); + } + }); + } else { + return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]); + } + }; + + _proto.space = function space() { + var content = this.content(); // Handle space before and after the selector + + if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) { + return node.type === 'comment'; + })) { + this.spaces = this.optionalSpace(content); + this.position++; + } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) { + this.current.last.spaces.after = this.optionalSpace(content); + this.position++; + } else { + this.combinator(); + } + }; + + _proto.string = function string() { + var current = this.currToken; + this.newNode(new _string["default"]({ + value: this.content(), + source: getTokenSource(current), + sourceIndex: current[_tokenize.FIELDS.START_POS] + })); + this.position++; + }; + + _proto.universal = function universal(namespace) { + var nextToken = this.nextToken; + + if (nextToken && this.content(nextToken) === '|') { + this.position++; + return this.namespace(); + } + + var current = this.currToken; + this.newNode(new _universal["default"]({ + value: this.content(), + source: getTokenSource(current), + sourceIndex: current[_tokenize.FIELDS.START_POS] + }), namespace); + this.position++; + }; + + _proto.splitWord = function splitWord(namespace, firstCallback) { + var _this5 = this; + + var nextToken = this.nextToken; + var word = this.content(); + + while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) { + this.position++; + var current = this.content(); + word += current; + + if (current.lastIndexOf('\\') === current.length - 1) { + var next = this.nextToken; + + if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) { + word += this.requiredSpace(this.content(next)); + this.position++; + } + } + + nextToken = this.nextToken; + } + + var hasClass = indexesOf(word, '.').filter(function (i) { + // Allow escaped dot within class name + var escapedDot = word[i - 1] === '\\'; // Allow decimal numbers percent in @keyframes + + var isKeyframesPercent = /^\d+\.\d+%$/.test(word); + return !escapedDot && !isKeyframesPercent; + }); + var hasId = indexesOf(word, '#').filter(function (i) { + return word[i - 1] !== '\\'; + }); // Eliminate Sass interpolations from the list of id indexes + + var interpolations = indexesOf(word, '#{'); + + if (interpolations.length) { + hasId = hasId.filter(function (hashIndex) { + return !~interpolations.indexOf(hashIndex); + }); + } + + var indices = (0, _sortAscending["default"])(uniqs([0].concat(hasClass, hasId))); + indices.forEach(function (ind, i) { + var index = indices[i + 1] || word.length; + var value = word.slice(ind, index); + + if (i === 0 && firstCallback) { + return firstCallback.call(_this5, value, indices.length); + } + + var node; + var current = _this5.currToken; + var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i]; + var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1)); + + if (~hasClass.indexOf(ind)) { + var classNameOpts = { + value: value.slice(1), + source: source, + sourceIndex: sourceIndex + }; + node = new _className["default"](unescapeProp(classNameOpts, "value")); + } else if (~hasId.indexOf(ind)) { + var idOpts = { + value: value.slice(1), + source: source, + sourceIndex: sourceIndex + }; + node = new _id["default"](unescapeProp(idOpts, "value")); + } else { + var tagOpts = { + value: value, + source: source, + sourceIndex: sourceIndex + }; + unescapeProp(tagOpts, "value"); + node = new _tag["default"](tagOpts); + } + + _this5.newNode(node, namespace); // Ensure that the namespace is used only once + + + namespace = null; + }); + this.position++; + }; + + _proto.word = function word(namespace) { + var nextToken = this.nextToken; + + if (nextToken && this.content(nextToken) === '|') { + this.position++; + return this.namespace(); + } + + return this.splitWord(namespace); + }; + + _proto.loop = function loop() { + while (this.position < this.tokens.length) { + this.parse(true); + } + + this.current._inferEndPosition(); + + return this.root; + }; + + _proto.parse = function parse(throwOnParenthesis) { + switch (this.currToken[_tokenize.FIELDS.TYPE]) { + case tokens.space: + this.space(); + break; + + case tokens.comment: + this.comment(); + break; + + case tokens.openParenthesis: + this.parentheses(); + break; + + case tokens.closeParenthesis: + if (throwOnParenthesis) { + this.missingParenthesis(); + } + + break; + + case tokens.openSquare: + this.attribute(); + break; + + case tokens.dollar: + case tokens.caret: + case tokens.equals: + case tokens.word: + this.word(); + break; + + case tokens.colon: + this.pseudo(); + break; + + case tokens.comma: + this.comma(); + break; + + case tokens.asterisk: + this.universal(); + break; + + case tokens.ampersand: + this.nesting(); + break; + + case tokens.slash: + case tokens.combinator: + this.combinator(); + break; + + case tokens.str: + this.string(); + break; + // These cases throw; no break needed. + + case tokens.closeSquare: + this.missingSquareBracket(); + + case tokens.semicolon: + this.missingBackslash(); + + default: + this.unexpected(); + } + } + /** + * Helpers + */ + ; + + _proto.expected = function expected(description, index, found) { + if (Array.isArray(description)) { + var last = description.pop(); + description = description.join(', ') + " or " + last; + } + + var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a'; + + if (!found) { + return this.error("Expected " + an + " " + description + ".", { + index: index + }); + } + + return this.error("Expected " + an + " " + description + ", found \"" + found + "\" instead.", { + index: index + }); + }; + + _proto.requiredSpace = function requiredSpace(space) { + return this.options.lossy ? ' ' : space; + }; + + _proto.optionalSpace = function optionalSpace(space) { + return this.options.lossy ? '' : space; + }; + + _proto.lossySpace = function lossySpace(space, required) { + if (this.options.lossy) { + return required ? ' ' : ''; + } else { + return space; + } + }; + + _proto.parseParenthesisToken = function parseParenthesisToken(token) { + var content = this.content(token); + + if (token[_tokenize.FIELDS.TYPE] === tokens.space) { + return this.requiredSpace(content); + } else { + return content; + } + }; + + _proto.newNode = function newNode(node, namespace) { + if (namespace) { + if (/^ +$/.test(namespace)) { + if (!this.options.lossy) { + this.spaces = (this.spaces || '') + namespace; + } + + namespace = true; + } + + node.namespace = namespace; + unescapeProp(node, "namespace"); + } + + if (this.spaces) { + node.spaces.before = this.spaces; + this.spaces = ''; + } + + return this.current.append(node); + }; + + _proto.content = function content(token) { + if (token === void 0) { + token = this.currToken; + } + + return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]); + }; + + /** + * returns the index of the next non-whitespace, non-comment token. + * returns -1 if no meaningful token is found. + */ + _proto.locateNextMeaningfulToken = function locateNextMeaningfulToken(startPosition) { + if (startPosition === void 0) { + startPosition = this.position + 1; + } + + var searchPosition = startPosition; + + while (searchPosition < this.tokens.length) { + if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) { + searchPosition++; + continue; + } else { + return searchPosition; + } + } + + return -1; + }; + + _createClass(Parser, [{ + key: "currToken", + get: function get() { + return this.tokens[this.position]; + } + }, { + key: "nextToken", + get: function get() { + return this.tokens[this.position + 1]; + } + }, { + key: "prevToken", + get: function get() { + return this.tokens[this.position - 1]; + } + }]); + + return Parser; +}(); + +exports["default"] = Parser; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/processor.js b/deps/npm/node_modules/postcss-selector-parser/dist/processor.js new file mode 100644 index 00000000000..a00170c281f --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/processor.js @@ -0,0 +1,206 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _parser = _interopRequireDefault(require("./parser")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var Processor = /*#__PURE__*/function () { + function Processor(func, options) { + this.func = func || function noop() {}; + + this.funcRes = null; + this.options = options; + } + + var _proto = Processor.prototype; + + _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) { + if (options === void 0) { + options = {}; + } + + var merged = Object.assign({}, this.options, options); + + if (merged.updateSelector === false) { + return false; + } else { + return typeof rule !== "string"; + } + }; + + _proto._isLossy = function _isLossy(options) { + if (options === void 0) { + options = {}; + } + + var merged = Object.assign({}, this.options, options); + + if (merged.lossless === false) { + return true; + } else { + return false; + } + }; + + _proto._root = function _root(rule, options) { + if (options === void 0) { + options = {}; + } + + var parser = new _parser["default"](rule, this._parseOptions(options)); + return parser.root; + }; + + _proto._parseOptions = function _parseOptions(options) { + return { + lossy: this._isLossy(options) + }; + }; + + _proto._run = function _run(rule, options) { + var _this = this; + + if (options === void 0) { + options = {}; + } + + return new Promise(function (resolve, reject) { + try { + var root = _this._root(rule, options); + + Promise.resolve(_this.func(root)).then(function (transform) { + var string = undefined; + + if (_this._shouldUpdateSelector(rule, options)) { + string = root.toString(); + rule.selector = string; + } + + return { + transform: transform, + root: root, + string: string + }; + }).then(resolve, reject); + } catch (e) { + reject(e); + return; + } + }); + }; + + _proto._runSync = function _runSync(rule, options) { + if (options === void 0) { + options = {}; + } + + var root = this._root(rule, options); + + var transform = this.func(root); + + if (transform && typeof transform.then === "function") { + throw new Error("Selector processor returned a promise to a synchronous call."); + } + + var string = undefined; + + if (options.updateSelector && typeof rule !== "string") { + string = root.toString(); + rule.selector = string; + } + + return { + transform: transform, + root: root, + string: string + }; + } + /** + * Process rule into a selector AST. + * + * @param rule {postcss.Rule | string} The css selector to be processed + * @param options The options for processing + * @returns {Promise} The AST of the selector after processing it. + */ + ; + + _proto.ast = function ast(rule, options) { + return this._run(rule, options).then(function (result) { + return result.root; + }); + } + /** + * Process rule into a selector AST synchronously. + * + * @param rule {postcss.Rule | string} The css selector to be processed + * @param options The options for processing + * @returns {parser.Root} The AST of the selector after processing it. + */ + ; + + _proto.astSync = function astSync(rule, options) { + return this._runSync(rule, options).root; + } + /** + * Process a selector into a transformed value asynchronously + * + * @param rule {postcss.Rule | string} The css selector to be processed + * @param options The options for processing + * @returns {Promise} The value returned by the processor. + */ + ; + + _proto.transform = function transform(rule, options) { + return this._run(rule, options).then(function (result) { + return result.transform; + }); + } + /** + * Process a selector into a transformed value synchronously. + * + * @param rule {postcss.Rule | string} The css selector to be processed + * @param options The options for processing + * @returns {any} The value returned by the processor. + */ + ; + + _proto.transformSync = function transformSync(rule, options) { + return this._runSync(rule, options).transform; + } + /** + * Process a selector into a new selector string asynchronously. + * + * @param rule {postcss.Rule | string} The css selector to be processed + * @param options The options for processing + * @returns {string} the selector after processing. + */ + ; + + _proto.process = function process(rule, options) { + return this._run(rule, options).then(function (result) { + return result.string || result.root.toString(); + }); + } + /** + * Process a selector into a new selector string synchronously. + * + * @param rule {postcss.Rule | string} The css selector to be processed + * @param options The options for processing + * @returns {string} the selector after processing. + */ + ; + + _proto.processSync = function processSync(rule, options) { + var result = this._runSync(rule, options); + + return result.string || result.root.toString(); + }; + + return Processor; +}(); + +exports["default"] = Processor; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js new file mode 100644 index 00000000000..8f535e5d731 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js @@ -0,0 +1,515 @@ +"use strict"; + +exports.__esModule = true; +exports.unescapeValue = unescapeValue; +exports["default"] = void 0; + +var _cssesc = _interopRequireDefault(require("cssesc")); + +var _unesc = _interopRequireDefault(require("../util/unesc")); + +var _namespace = _interopRequireDefault(require("./namespace")); + +var _types = require("./types"); + +var _CSSESC_QUOTE_OPTIONS; + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var deprecate = require("util-deprecate"); + +var WRAPPED_IN_QUOTES = /^('|")([^]*)\1$/; +var warnOfDeprecatedValueAssignment = deprecate(function () {}, "Assigning an attribute a value containing characters that might need to be escaped is deprecated. " + "Call attribute.setValue() instead."); +var warnOfDeprecatedQuotedAssignment = deprecate(function () {}, "Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead."); +var warnOfDeprecatedConstructor = deprecate(function () {}, "Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now."); + +function unescapeValue(value) { + var deprecatedUsage = false; + var quoteMark = null; + var unescaped = value; + var m = unescaped.match(WRAPPED_IN_QUOTES); + + if (m) { + quoteMark = m[1]; + unescaped = m[2]; + } + + unescaped = (0, _unesc["default"])(unescaped); + + if (unescaped !== value) { + deprecatedUsage = true; + } + + return { + deprecatedUsage: deprecatedUsage, + unescaped: unescaped, + quoteMark: quoteMark + }; +} + +function handleDeprecatedContructorOpts(opts) { + if (opts.quoteMark !== undefined) { + return opts; + } + + if (opts.value === undefined) { + return opts; + } + + warnOfDeprecatedConstructor(); + + var _unescapeValue = unescapeValue(opts.value), + quoteMark = _unescapeValue.quoteMark, + unescaped = _unescapeValue.unescaped; + + if (!opts.raws) { + opts.raws = {}; + } + + if (opts.raws.value === undefined) { + opts.raws.value = opts.value; + } + + opts.value = unescaped; + opts.quoteMark = quoteMark; + return opts; +} + +var Attribute = /*#__PURE__*/function (_Namespace) { + _inheritsLoose(Attribute, _Namespace); + + function Attribute(opts) { + var _this; + + if (opts === void 0) { + opts = {}; + } + + _this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this; + _this.type = _types.ATTRIBUTE; + _this.raws = _this.raws || {}; + Object.defineProperty(_this.raws, 'unquoted', { + get: deprecate(function () { + return _this.value; + }, "attr.raws.unquoted is deprecated. Call attr.value instead."), + set: deprecate(function () { + return _this.value; + }, "Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.") + }); + _this._constructed = true; + return _this; + } + /** + * Returns the Attribute's value quoted such that it would be legal to use + * in the value of a css file. The original value's quotation setting + * used for stringification is left unchanged. See `setValue(value, options)` + * if you want to control the quote settings of a new value for the attribute. + * + * You can also change the quotation used for the current value by setting quoteMark. + * + * Options: + * * quoteMark {'"' | "'" | null} - Use this value to quote the value. If this + * option is not set, the original value for quoteMark will be used. If + * indeterminate, a double quote is used. The legal values are: + * * `null` - the value will be unquoted and characters will be escaped as necessary. + * * `'` - the value will be quoted with a single quote and single quotes are escaped. + * * `"` - the value will be quoted with a double quote and double quotes are escaped. + * * preferCurrentQuoteMark {boolean} - if true, prefer the source quote mark + * over the quoteMark option value. + * * smart {boolean} - if true, will select a quote mark based on the value + * and the other options specified here. See the `smartQuoteMark()` + * method. + **/ + + + var _proto = Attribute.prototype; + + _proto.getQuotedValue = function getQuotedValue(options) { + if (options === void 0) { + options = {}; + } + + var quoteMark = this._determineQuoteMark(options); + + var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark]; + var escaped = (0, _cssesc["default"])(this._value, cssescopts); + return escaped; + }; + + _proto._determineQuoteMark = function _determineQuoteMark(options) { + return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options); + } + /** + * Set the unescaped value with the specified quotation options. The value + * provided must not include any wrapping quote marks -- those quotes will + * be interpreted as part of the value and escaped accordingly. + */ + ; + + _proto.setValue = function setValue(value, options) { + if (options === void 0) { + options = {}; + } + + this._value = value; + this._quoteMark = this._determineQuoteMark(options); + + this._syncRawValue(); + } + /** + * Intelligently select a quoteMark value based on the value's contents. If + * the value is a legal CSS ident, it will not be quoted. Otherwise a quote + * mark will be picked that minimizes the number of escapes. + * + * If there's no clear winner, the quote mark from these options is used, + * then the source quote mark (this is inverted if `preferCurrentQuoteMark` is + * true). If the quoteMark is unspecified, a double quote is used. + * + * @param options This takes the quoteMark and preferCurrentQuoteMark options + * from the quoteValue method. + */ + ; + + _proto.smartQuoteMark = function smartQuoteMark(options) { + var v = this.value; + var numSingleQuotes = v.replace(/[^']/g, '').length; + var numDoubleQuotes = v.replace(/[^"]/g, '').length; + + if (numSingleQuotes + numDoubleQuotes === 0) { + var escaped = (0, _cssesc["default"])(v, { + isIdentifier: true + }); + + if (escaped === v) { + return Attribute.NO_QUOTE; + } else { + var pref = this.preferredQuoteMark(options); + + if (pref === Attribute.NO_QUOTE) { + // pick a quote mark that isn't none and see if it's smaller + var quote = this.quoteMark || options.quoteMark || Attribute.DOUBLE_QUOTE; + var opts = CSSESC_QUOTE_OPTIONS[quote]; + var quoteValue = (0, _cssesc["default"])(v, opts); + + if (quoteValue.length < escaped.length) { + return quote; + } + } + + return pref; + } + } else if (numDoubleQuotes === numSingleQuotes) { + return this.preferredQuoteMark(options); + } else if (numDoubleQuotes < numSingleQuotes) { + return Attribute.DOUBLE_QUOTE; + } else { + return Attribute.SINGLE_QUOTE; + } + } + /** + * Selects the preferred quote mark based on the options and the current quote mark value. + * If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)` + * instead. + */ + ; + + _proto.preferredQuoteMark = function preferredQuoteMark(options) { + var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark; + + if (quoteMark === undefined) { + quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark; + } + + if (quoteMark === undefined) { + quoteMark = Attribute.DOUBLE_QUOTE; + } + + return quoteMark; + }; + + _proto._syncRawValue = function _syncRawValue() { + var rawValue = (0, _cssesc["default"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]); + + if (rawValue === this._value) { + if (this.raws) { + delete this.raws.value; + } + } else { + this.raws.value = rawValue; + } + }; + + _proto._handleEscapes = function _handleEscapes(prop, value) { + if (this._constructed) { + var escaped = (0, _cssesc["default"])(value, { + isIdentifier: true + }); + + if (escaped !== value) { + this.raws[prop] = escaped; + } else { + delete this.raws[prop]; + } + } + }; + + _proto._spacesFor = function _spacesFor(name) { + var attrSpaces = { + before: '', + after: '' + }; + var spaces = this.spaces[name] || {}; + var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {}; + return Object.assign(attrSpaces, spaces, rawSpaces); + }; + + _proto._stringFor = function _stringFor(name, spaceName, concat) { + if (spaceName === void 0) { + spaceName = name; + } + + if (concat === void 0) { + concat = defaultAttrConcat; + } + + var attrSpaces = this._spacesFor(spaceName); + + return concat(this.stringifyProperty(name), attrSpaces); + } + /** + * returns the offset of the attribute part specified relative to the + * start of the node of the output string. + * + * * "ns" - alias for "namespace" + * * "namespace" - the namespace if it exists. + * * "attribute" - the attribute name + * * "attributeNS" - the start of the attribute or its namespace + * * "operator" - the match operator of the attribute + * * "value" - The value (string or identifier) + * * "insensitive" - the case insensitivity flag; + * @param part One of the possible values inside an attribute. + * @returns -1 if the name is invalid or the value doesn't exist in this attribute. + */ + ; + + _proto.offsetOf = function offsetOf(name) { + var count = 1; + + var attributeSpaces = this._spacesFor("attribute"); + + count += attributeSpaces.before.length; + + if (name === "namespace" || name === "ns") { + return this.namespace ? count : -1; + } + + if (name === "attributeNS") { + return count; + } + + count += this.namespaceString.length; + + if (this.namespace) { + count += 1; + } + + if (name === "attribute") { + return count; + } + + count += this.stringifyProperty("attribute").length; + count += attributeSpaces.after.length; + + var operatorSpaces = this._spacesFor("operator"); + + count += operatorSpaces.before.length; + var operator = this.stringifyProperty("operator"); + + if (name === "operator") { + return operator ? count : -1; + } + + count += operator.length; + count += operatorSpaces.after.length; + + var valueSpaces = this._spacesFor("value"); + + count += valueSpaces.before.length; + var value = this.stringifyProperty("value"); + + if (name === "value") { + return value ? count : -1; + } + + count += value.length; + count += valueSpaces.after.length; + + var insensitiveSpaces = this._spacesFor("insensitive"); + + count += insensitiveSpaces.before.length; + + if (name === "insensitive") { + return this.insensitive ? count : -1; + } + + return -1; + }; + + _proto.toString = function toString() { + var _this2 = this; + + var selector = [this.rawSpaceBefore, '[']; + selector.push(this._stringFor('qualifiedAttribute', 'attribute')); + + if (this.operator && (this.value || this.value === '')) { + selector.push(this._stringFor('operator')); + selector.push(this._stringFor('value')); + selector.push(this._stringFor('insensitiveFlag', 'insensitive', function (attrValue, attrSpaces) { + if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) { + attrSpaces.before = " "; + } + + return defaultAttrConcat(attrValue, attrSpaces); + })); + } + + selector.push(']'); + selector.push(this.rawSpaceAfter); + return selector.join(''); + }; + + _createClass(Attribute, [{ + key: "quoted", + get: function get() { + var qm = this.quoteMark; + return qm === "'" || qm === '"'; + }, + set: function set(value) { + warnOfDeprecatedQuotedAssignment(); + } + /** + * returns a single (`'`) or double (`"`) quote character if the value is quoted. + * returns `null` if the value is not quoted. + * returns `undefined` if the quotation state is unknown (this can happen when + * the attribute is constructed without specifying a quote mark.) + */ + + }, { + key: "quoteMark", + get: function get() { + return this._quoteMark; + } + /** + * Set the quote mark to be used by this attribute's value. + * If the quote mark changes, the raw (escaped) value at `attr.raws.value` of the attribute + * value is updated accordingly. + * + * @param {"'" | '"' | null} quoteMark The quote mark or `null` if the value should be unquoted. + */ + , + set: function set(quoteMark) { + if (!this._constructed) { + this._quoteMark = quoteMark; + return; + } + + if (this._quoteMark !== quoteMark) { + this._quoteMark = quoteMark; + + this._syncRawValue(); + } + } + }, { + key: "qualifiedAttribute", + get: function get() { + return this.qualifiedName(this.raws.attribute || this.attribute); + } + }, { + key: "insensitiveFlag", + get: function get() { + return this.insensitive ? 'i' : ''; + } + }, { + key: "value", + get: function get() { + return this._value; + } + /** + * Before 3.0, the value had to be set to an escaped value including any wrapped + * quote marks. In 3.0, the semantics of `Attribute.value` changed so that the value + * is unescaped during parsing and any quote marks are removed. + * + * Because the ambiguity of this semantic change, if you set `attr.value = newValue`, + * a deprecation warning is raised when the new value contains any characters that would + * require escaping (including if it contains wrapped quotes). + * + * Instead, you should call `attr.setValue(newValue, opts)` and pass options that describe + * how the new value is quoted. + */ + , + set: function set(v) { + if (this._constructed) { + var _unescapeValue2 = unescapeValue(v), + deprecatedUsage = _unescapeValue2.deprecatedUsage, + unescaped = _unescapeValue2.unescaped, + quoteMark = _unescapeValue2.quoteMark; + + if (deprecatedUsage) { + warnOfDeprecatedValueAssignment(); + } + + if (unescaped === this._value && quoteMark === this._quoteMark) { + return; + } + + this._value = unescaped; + this._quoteMark = quoteMark; + + this._syncRawValue(); + } else { + this._value = v; + } + } + }, { + key: "attribute", + get: function get() { + return this._attribute; + }, + set: function set(name) { + this._handleEscapes("attribute", name); + + this._attribute = name; + } + }]); + + return Attribute; +}(_namespace["default"]); + +exports["default"] = Attribute; +Attribute.NO_QUOTE = null; +Attribute.SINGLE_QUOTE = "'"; +Attribute.DOUBLE_QUOTE = '"'; +var CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = { + "'": { + quotes: 'single', + wrap: true + }, + '"': { + quotes: 'double', + wrap: true + } +}, _CSSESC_QUOTE_OPTIONS[null] = { + isIdentifier: true +}, _CSSESC_QUOTE_OPTIONS); + +function defaultAttrConcat(attrValue, attrSpaces) { + return "" + attrSpaces.before + attrValue + attrSpaces.after; +} \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/className.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/className.js new file mode 100644 index 00000000000..22409914cf7 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/className.js @@ -0,0 +1,69 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _cssesc = _interopRequireDefault(require("cssesc")); + +var _util = require("../util"); + +var _node = _interopRequireDefault(require("./node")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var ClassName = /*#__PURE__*/function (_Node) { + _inheritsLoose(ClassName, _Node); + + function ClassName(opts) { + var _this; + + _this = _Node.call(this, opts) || this; + _this.type = _types.CLASS; + _this._constructed = true; + return _this; + } + + var _proto = ClassName.prototype; + + _proto.valueToString = function valueToString() { + return '.' + _Node.prototype.valueToString.call(this); + }; + + _createClass(ClassName, [{ + key: "value", + get: function get() { + return this._value; + }, + set: function set(v) { + if (this._constructed) { + var escaped = (0, _cssesc["default"])(v, { + isIdentifier: true + }); + + if (escaped !== v) { + (0, _util.ensureObject)(this, "raws"); + this.raws.value = escaped; + } else if (this.raws) { + delete this.raws.value; + } + } + + this._value = v; + } + }]); + + return ClassName; +}(_node["default"]); + +exports["default"] = ClassName; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js new file mode 100644 index 00000000000..271ab4d3b1f --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js @@ -0,0 +1,31 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _node = _interopRequireDefault(require("./node")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var Combinator = /*#__PURE__*/function (_Node) { + _inheritsLoose(Combinator, _Node); + + function Combinator(opts) { + var _this; + + _this = _Node.call(this, opts) || this; + _this.type = _types.COMBINATOR; + return _this; + } + + return Combinator; +}(_node["default"]); + +exports["default"] = Combinator; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js new file mode 100644 index 00000000000..e778094e110 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js @@ -0,0 +1,31 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _node = _interopRequireDefault(require("./node")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var Comment = /*#__PURE__*/function (_Node) { + _inheritsLoose(Comment, _Node); + + function Comment(opts) { + var _this; + + _this = _Node.call(this, opts) || this; + _this.type = _types.COMMENT; + return _this; + } + + return Comment; +}(_node["default"]); + +exports["default"] = Comment; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js new file mode 100644 index 00000000000..078023eb28f --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js @@ -0,0 +1,102 @@ +"use strict"; + +exports.__esModule = true; +exports.universal = exports.tag = exports.string = exports.selector = exports.root = exports.pseudo = exports.nesting = exports.id = exports.comment = exports.combinator = exports.className = exports.attribute = void 0; + +var _attribute = _interopRequireDefault(require("./attribute")); + +var _className = _interopRequireDefault(require("./className")); + +var _combinator = _interopRequireDefault(require("./combinator")); + +var _comment = _interopRequireDefault(require("./comment")); + +var _id = _interopRequireDefault(require("./id")); + +var _nesting = _interopRequireDefault(require("./nesting")); + +var _pseudo = _interopRequireDefault(require("./pseudo")); + +var _root = _interopRequireDefault(require("./root")); + +var _selector = _interopRequireDefault(require("./selector")); + +var _string = _interopRequireDefault(require("./string")); + +var _tag = _interopRequireDefault(require("./tag")); + +var _universal = _interopRequireDefault(require("./universal")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var attribute = function attribute(opts) { + return new _attribute["default"](opts); +}; + +exports.attribute = attribute; + +var className = function className(opts) { + return new _className["default"](opts); +}; + +exports.className = className; + +var combinator = function combinator(opts) { + return new _combinator["default"](opts); +}; + +exports.combinator = combinator; + +var comment = function comment(opts) { + return new _comment["default"](opts); +}; + +exports.comment = comment; + +var id = function id(opts) { + return new _id["default"](opts); +}; + +exports.id = id; + +var nesting = function nesting(opts) { + return new _nesting["default"](opts); +}; + +exports.nesting = nesting; + +var pseudo = function pseudo(opts) { + return new _pseudo["default"](opts); +}; + +exports.pseudo = pseudo; + +var root = function root(opts) { + return new _root["default"](opts); +}; + +exports.root = root; + +var selector = function selector(opts) { + return new _selector["default"](opts); +}; + +exports.selector = selector; + +var string = function string(opts) { + return new _string["default"](opts); +}; + +exports.string = string; + +var tag = function tag(opts) { + return new _tag["default"](opts); +}; + +exports.tag = tag; + +var universal = function universal(opts) { + return new _universal["default"](opts); +}; + +exports.universal = universal; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/container.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/container.js new file mode 100644 index 00000000000..cf6176d9be6 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/container.js @@ -0,0 +1,395 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _node = _interopRequireDefault(require("./node")); + +var types = _interopRequireWildcard(require("./types")); + +function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var Container = /*#__PURE__*/function (_Node) { + _inheritsLoose(Container, _Node); + + function Container(opts) { + var _this; + + _this = _Node.call(this, opts) || this; + + if (!_this.nodes) { + _this.nodes = []; + } + + return _this; + } + + var _proto = Container.prototype; + + _proto.append = function append(selector) { + selector.parent = this; + this.nodes.push(selector); + return this; + }; + + _proto.prepend = function prepend(selector) { + selector.parent = this; + this.nodes.unshift(selector); + return this; + }; + + _proto.at = function at(index) { + return this.nodes[index]; + }; + + _proto.index = function index(child) { + if (typeof child === 'number') { + return child; + } + + return this.nodes.indexOf(child); + }; + + _proto.removeChild = function removeChild(child) { + child = this.index(child); + this.at(child).parent = undefined; + this.nodes.splice(child, 1); + var index; + + for (var id in this.indexes) { + index = this.indexes[id]; + + if (index >= child) { + this.indexes[id] = index - 1; + } + } + + return this; + }; + + _proto.removeAll = function removeAll() { + for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) { + var node = _step.value; + node.parent = undefined; + } + + this.nodes = []; + return this; + }; + + _proto.empty = function empty() { + return this.removeAll(); + }; + + _proto.insertAfter = function insertAfter(oldNode, newNode) { + newNode.parent = this; + var oldIndex = this.index(oldNode); + this.nodes.splice(oldIndex + 1, 0, newNode); + newNode.parent = this; + var index; + + for (var id in this.indexes) { + index = this.indexes[id]; + + if (oldIndex <= index) { + this.indexes[id] = index + 1; + } + } + + return this; + }; + + _proto.insertBefore = function insertBefore(oldNode, newNode) { + newNode.parent = this; + var oldIndex = this.index(oldNode); + this.nodes.splice(oldIndex, 0, newNode); + newNode.parent = this; + var index; + + for (var id in this.indexes) { + index = this.indexes[id]; + + if (index <= oldIndex) { + this.indexes[id] = index + 1; + } + } + + return this; + }; + + _proto._findChildAtPosition = function _findChildAtPosition(line, col) { + var found = undefined; + this.each(function (node) { + if (node.atPosition) { + var foundChild = node.atPosition(line, col); + + if (foundChild) { + found = foundChild; + return false; + } + } else if (node.isAtPosition(line, col)) { + found = node; + return false; + } + }); + return found; + } + /** + * Return the most specific node at the line and column number given. + * The source location is based on the original parsed location, locations aren't + * updated as selector nodes are mutated. + * + * Note that this location is relative to the location of the first character + * of the selector, and not the location of the selector in the overall document + * when used in conjunction with postcss. + * + * If not found, returns undefined. + * @param {number} line The line number of the node to find. (1-based index) + * @param {number} col The column number of the node to find. (1-based index) + */ + ; + + _proto.atPosition = function atPosition(line, col) { + if (this.isAtPosition(line, col)) { + return this._findChildAtPosition(line, col) || this; + } else { + return undefined; + } + }; + + _proto._inferEndPosition = function _inferEndPosition() { + if (this.last && this.last.source && this.last.source.end) { + this.source = this.source || {}; + this.source.end = this.source.end || {}; + Object.assign(this.source.end, this.last.source.end); + } + }; + + _proto.each = function each(callback) { + if (!this.lastEach) { + this.lastEach = 0; + } + + if (!this.indexes) { + this.indexes = {}; + } + + this.lastEach++; + var id = this.lastEach; + this.indexes[id] = 0; + + if (!this.length) { + return undefined; + } + + var index, result; + + while (this.indexes[id] < this.length) { + index = this.indexes[id]; + result = callback(this.at(index), index); + + if (result === false) { + break; + } + + this.indexes[id] += 1; + } + + delete this.indexes[id]; + + if (result === false) { + return false; + } + }; + + _proto.walk = function walk(callback) { + return this.each(function (node, i) { + var result = callback(node, i); + + if (result !== false && node.length) { + result = node.walk(callback); + } + + if (result === false) { + return false; + } + }); + }; + + _proto.walkAttributes = function walkAttributes(callback) { + var _this2 = this; + + return this.walk(function (selector) { + if (selector.type === types.ATTRIBUTE) { + return callback.call(_this2, selector); + } + }); + }; + + _proto.walkClasses = function walkClasses(callback) { + var _this3 = this; + + return this.walk(function (selector) { + if (selector.type === types.CLASS) { + return callback.call(_this3, selector); + } + }); + }; + + _proto.walkCombinators = function walkCombinators(callback) { + var _this4 = this; + + return this.walk(function (selector) { + if (selector.type === types.COMBINATOR) { + return callback.call(_this4, selector); + } + }); + }; + + _proto.walkComments = function walkComments(callback) { + var _this5 = this; + + return this.walk(function (selector) { + if (selector.type === types.COMMENT) { + return callback.call(_this5, selector); + } + }); + }; + + _proto.walkIds = function walkIds(callback) { + var _this6 = this; + + return this.walk(function (selector) { + if (selector.type === types.ID) { + return callback.call(_this6, selector); + } + }); + }; + + _proto.walkNesting = function walkNesting(callback) { + var _this7 = this; + + return this.walk(function (selector) { + if (selector.type === types.NESTING) { + return callback.call(_this7, selector); + } + }); + }; + + _proto.walkPseudos = function walkPseudos(callback) { + var _this8 = this; + + return this.walk(function (selector) { + if (selector.type === types.PSEUDO) { + return callback.call(_this8, selector); + } + }); + }; + + _proto.walkTags = function walkTags(callback) { + var _this9 = this; + + return this.walk(function (selector) { + if (selector.type === types.TAG) { + return callback.call(_this9, selector); + } + }); + }; + + _proto.walkUniversals = function walkUniversals(callback) { + var _this10 = this; + + return this.walk(function (selector) { + if (selector.type === types.UNIVERSAL) { + return callback.call(_this10, selector); + } + }); + }; + + _proto.split = function split(callback) { + var _this11 = this; + + var current = []; + return this.reduce(function (memo, node, index) { + var split = callback.call(_this11, node); + current.push(node); + + if (split) { + memo.push(current); + current = []; + } else if (index === _this11.length - 1) { + memo.push(current); + } + + return memo; + }, []); + }; + + _proto.map = function map(callback) { + return this.nodes.map(callback); + }; + + _proto.reduce = function reduce(callback, memo) { + return this.nodes.reduce(callback, memo); + }; + + _proto.every = function every(callback) { + return this.nodes.every(callback); + }; + + _proto.some = function some(callback) { + return this.nodes.some(callback); + }; + + _proto.filter = function filter(callback) { + return this.nodes.filter(callback); + }; + + _proto.sort = function sort(callback) { + return this.nodes.sort(callback); + }; + + _proto.toString = function toString() { + return this.map(String).join(''); + }; + + _createClass(Container, [{ + key: "first", + get: function get() { + return this.at(0); + } + }, { + key: "last", + get: function get() { + return this.at(this.length - 1); + } + }, { + key: "length", + get: function get() { + return this.nodes.length; + } + }]); + + return Container; +}(_node["default"]); + +exports["default"] = Container; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js new file mode 100644 index 00000000000..c949af57eb1 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js @@ -0,0 +1,64 @@ +"use strict"; + +exports.__esModule = true; +exports.isNode = isNode; +exports.isPseudoElement = isPseudoElement; +exports.isPseudoClass = isPseudoClass; +exports.isContainer = isContainer; +exports.isNamespace = isNamespace; +exports.isUniversal = exports.isTag = exports.isString = exports.isSelector = exports.isRoot = exports.isPseudo = exports.isNesting = exports.isIdentifier = exports.isComment = exports.isCombinator = exports.isClassName = exports.isAttribute = void 0; + +var _types = require("./types"); + +var _IS_TYPE; + +var IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE); + +function isNode(node) { + return typeof node === "object" && IS_TYPE[node.type]; +} + +function isNodeType(type, node) { + return isNode(node) && node.type === type; +} + +var isAttribute = isNodeType.bind(null, _types.ATTRIBUTE); +exports.isAttribute = isAttribute; +var isClassName = isNodeType.bind(null, _types.CLASS); +exports.isClassName = isClassName; +var isCombinator = isNodeType.bind(null, _types.COMBINATOR); +exports.isCombinator = isCombinator; +var isComment = isNodeType.bind(null, _types.COMMENT); +exports.isComment = isComment; +var isIdentifier = isNodeType.bind(null, _types.ID); +exports.isIdentifier = isIdentifier; +var isNesting = isNodeType.bind(null, _types.NESTING); +exports.isNesting = isNesting; +var isPseudo = isNodeType.bind(null, _types.PSEUDO); +exports.isPseudo = isPseudo; +var isRoot = isNodeType.bind(null, _types.ROOT); +exports.isRoot = isRoot; +var isSelector = isNodeType.bind(null, _types.SELECTOR); +exports.isSelector = isSelector; +var isString = isNodeType.bind(null, _types.STRING); +exports.isString = isString; +var isTag = isNodeType.bind(null, _types.TAG); +exports.isTag = isTag; +var isUniversal = isNodeType.bind(null, _types.UNIVERSAL); +exports.isUniversal = isUniversal; + +function isPseudoElement(node) { + return isPseudo(node) && node.value && (node.value.startsWith("::") || node.value.toLowerCase() === ":before" || node.value.toLowerCase() === ":after" || node.value.toLowerCase() === ":first-letter" || node.value.toLowerCase() === ":first-line"); +} + +function isPseudoClass(node) { + return isPseudo(node) && !isPseudoElement(node); +} + +function isContainer(node) { + return !!(isNode(node) && node.walk); +} + +function isNamespace(node) { + return isAttribute(node) || isTag(node); +} \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/id.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/id.js new file mode 100644 index 00000000000..4e83147e3c4 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/id.js @@ -0,0 +1,37 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _node = _interopRequireDefault(require("./node")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var ID = /*#__PURE__*/function (_Node) { + _inheritsLoose(ID, _Node); + + function ID(opts) { + var _this; + + _this = _Node.call(this, opts) || this; + _this.type = _types.ID; + return _this; + } + + var _proto = ID.prototype; + + _proto.valueToString = function valueToString() { + return '#' + _Node.prototype.valueToString.call(this); + }; + + return ID; +}(_node["default"]); + +exports["default"] = ID; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/index.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/index.js new file mode 100644 index 00000000000..1fe9b138a5a --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/index.js @@ -0,0 +1,27 @@ +"use strict"; + +exports.__esModule = true; + +var _types = require("./types"); + +Object.keys(_types).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _types[key]) return; + exports[key] = _types[key]; +}); + +var _constructors = require("./constructors"); + +Object.keys(_constructors).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _constructors[key]) return; + exports[key] = _constructors[key]; +}); + +var _guards = require("./guards"); + +Object.keys(_guards).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _guards[key]) return; + exports[key] = _guards[key]; +}); \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js new file mode 100644 index 00000000000..fd6c729e166 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js @@ -0,0 +1,101 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _cssesc = _interopRequireDefault(require("cssesc")); + +var _util = require("../util"); + +var _node = _interopRequireDefault(require("./node")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var Namespace = /*#__PURE__*/function (_Node) { + _inheritsLoose(Namespace, _Node); + + function Namespace() { + return _Node.apply(this, arguments) || this; + } + + var _proto = Namespace.prototype; + + _proto.qualifiedName = function qualifiedName(value) { + if (this.namespace) { + return this.namespaceString + "|" + value; + } else { + return value; + } + }; + + _proto.valueToString = function valueToString() { + return this.qualifiedName(_Node.prototype.valueToString.call(this)); + }; + + _createClass(Namespace, [{ + key: "namespace", + get: function get() { + return this._namespace; + }, + set: function set(namespace) { + if (namespace === true || namespace === "*" || namespace === "&") { + this._namespace = namespace; + + if (this.raws) { + delete this.raws.namespace; + } + + return; + } + + var escaped = (0, _cssesc["default"])(namespace, { + isIdentifier: true + }); + this._namespace = namespace; + + if (escaped !== namespace) { + (0, _util.ensureObject)(this, "raws"); + this.raws.namespace = escaped; + } else if (this.raws) { + delete this.raws.namespace; + } + } + }, { + key: "ns", + get: function get() { + return this._namespace; + }, + set: function set(namespace) { + this.namespace = namespace; + } + }, { + key: "namespaceString", + get: function get() { + if (this.namespace) { + var ns = this.stringifyProperty("namespace"); + + if (ns === true) { + return ''; + } else { + return ns; + } + } else { + return ''; + } + } + }]); + + return Namespace; +}(_node["default"]); + +exports["default"] = Namespace; +; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js new file mode 100644 index 00000000000..3288c78f2dd --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js @@ -0,0 +1,32 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _node = _interopRequireDefault(require("./node")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var Nesting = /*#__PURE__*/function (_Node) { + _inheritsLoose(Nesting, _Node); + + function Nesting(opts) { + var _this; + + _this = _Node.call(this, opts) || this; + _this.type = _types.NESTING; + _this.value = '&'; + return _this; + } + + return Nesting; +}(_node["default"]); + +exports["default"] = Nesting; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/node.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/node.js new file mode 100644 index 00000000000..e8eca11c70e --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/node.js @@ -0,0 +1,239 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _util = require("../util"); + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var cloneNode = function cloneNode(obj, parent) { + if (typeof obj !== 'object' || obj === null) { + return obj; + } + + var cloned = new obj.constructor(); + + for (var i in obj) { + if (!obj.hasOwnProperty(i)) { + continue; + } + + var value = obj[i]; + var type = typeof value; + + if (i === 'parent' && type === 'object') { + if (parent) { + cloned[i] = parent; + } + } else if (value instanceof Array) { + cloned[i] = value.map(function (j) { + return cloneNode(j, cloned); + }); + } else { + cloned[i] = cloneNode(value, cloned); + } + } + + return cloned; +}; + +var Node = /*#__PURE__*/function () { + function Node(opts) { + if (opts === void 0) { + opts = {}; + } + + Object.assign(this, opts); + this.spaces = this.spaces || {}; + this.spaces.before = this.spaces.before || ''; + this.spaces.after = this.spaces.after || ''; + } + + var _proto = Node.prototype; + + _proto.remove = function remove() { + if (this.parent) { + this.parent.removeChild(this); + } + + this.parent = undefined; + return this; + }; + + _proto.replaceWith = function replaceWith() { + if (this.parent) { + for (var index in arguments) { + this.parent.insertBefore(this, arguments[index]); + } + + this.remove(); + } + + return this; + }; + + _proto.next = function next() { + return this.parent.at(this.parent.index(this) + 1); + }; + + _proto.prev = function prev() { + return this.parent.at(this.parent.index(this) - 1); + }; + + _proto.clone = function clone(overrides) { + if (overrides === void 0) { + overrides = {}; + } + + var cloned = cloneNode(this); + + for (var name in overrides) { + cloned[name] = overrides[name]; + } + + return cloned; + } + /** + * Some non-standard syntax doesn't follow normal escaping rules for css. + * This allows non standard syntax to be appended to an existing property + * by specifying the escaped value. By specifying the escaped value, + * illegal characters are allowed to be directly inserted into css output. + * @param {string} name the property to set + * @param {any} value the unescaped value of the property + * @param {string} valueEscaped optional. the escaped value of the property. + */ + ; + + _proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) { + if (!this.raws) { + this.raws = {}; + } + + var originalValue = this[name]; + var originalEscaped = this.raws[name]; + this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first. + + if (originalEscaped || valueEscaped !== value) { + this.raws[name] = (originalEscaped || originalValue) + valueEscaped; + } else { + delete this.raws[name]; // delete any escaped value that was created by the setter. + } + } + /** + * Some non-standard syntax doesn't follow normal escaping rules for css. + * This allows the escaped value to be specified directly, allowing illegal + * characters to be directly inserted into css output. + * @param {string} name the property to set + * @param {any} value the unescaped value of the property + * @param {string} valueEscaped the escaped value of the property. + */ + ; + + _proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) { + if (!this.raws) { + this.raws = {}; + } + + this[name] = value; // this may trigger a setter that updates raws, so it has to be set first. + + this.raws[name] = valueEscaped; + } + /** + * When you want a value to passed through to CSS directly. This method + * deletes the corresponding raw value causing the stringifier to fallback + * to the unescaped value. + * @param {string} name the property to set. + * @param {any} value The value that is both escaped and unescaped. + */ + ; + + _proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) { + this[name] = value; // this may trigger a setter that updates raws, so it has to be set first. + + if (this.raws) { + delete this.raws[name]; + } + } + /** + * + * @param {number} line The number (starting with 1) + * @param {number} column The column number (starting with 1) + */ + ; + + _proto.isAtPosition = function isAtPosition(line, column) { + if (this.source && this.source.start && this.source.end) { + if (this.source.start.line > line) { + return false; + } + + if (this.source.end.line < line) { + return false; + } + + if (this.source.start.line === line && this.source.start.column > column) { + return false; + } + + if (this.source.end.line === line && this.source.end.column < column) { + return false; + } + + return true; + } + + return undefined; + }; + + _proto.stringifyProperty = function stringifyProperty(name) { + return this.raws && this.raws[name] || this[name]; + }; + + _proto.valueToString = function valueToString() { + return String(this.stringifyProperty("value")); + }; + + _proto.toString = function toString() { + return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join(''); + }; + + _createClass(Node, [{ + key: "rawSpaceBefore", + get: function get() { + var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before; + + if (rawSpace === undefined) { + rawSpace = this.spaces && this.spaces.before; + } + + return rawSpace || ""; + }, + set: function set(raw) { + (0, _util.ensureObject)(this, "raws", "spaces"); + this.raws.spaces.before = raw; + } + }, { + key: "rawSpaceAfter", + get: function get() { + var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after; + + if (rawSpace === undefined) { + rawSpace = this.spaces.after; + } + + return rawSpace || ""; + }, + set: function set(raw) { + (0, _util.ensureObject)(this, "raws", "spaces"); + this.raws.spaces.after = raw; + } + }]); + + return Node; +}(); + +exports["default"] = Node; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js new file mode 100644 index 00000000000..a0e7bca170a --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js @@ -0,0 +1,38 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _container = _interopRequireDefault(require("./container")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var Pseudo = /*#__PURE__*/function (_Container) { + _inheritsLoose(Pseudo, _Container); + + function Pseudo(opts) { + var _this; + + _this = _Container.call(this, opts) || this; + _this.type = _types.PSEUDO; + return _this; + } + + var _proto = Pseudo.prototype; + + _proto.toString = function toString() { + var params = this.length ? '(' + this.map(String).join(',') + ')' : ''; + return [this.rawSpaceBefore, this.stringifyProperty("value"), params, this.rawSpaceAfter].join(''); + }; + + return Pseudo; +}(_container["default"]); + +exports["default"] = Pseudo; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/root.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/root.js new file mode 100644 index 00000000000..be5c2ccb2da --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/root.js @@ -0,0 +1,60 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _container = _interopRequireDefault(require("./container")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var Root = /*#__PURE__*/function (_Container) { + _inheritsLoose(Root, _Container); + + function Root(opts) { + var _this; + + _this = _Container.call(this, opts) || this; + _this.type = _types.ROOT; + return _this; + } + + var _proto = Root.prototype; + + _proto.toString = function toString() { + var str = this.reduce(function (memo, selector) { + memo.push(String(selector)); + return memo; + }, []).join(','); + return this.trailingComma ? str + ',' : str; + }; + + _proto.error = function error(message, options) { + if (this._error) { + return this._error(message, options); + } else { + return new Error(message); + } + }; + + _createClass(Root, [{ + key: "errorGenerator", + set: function set(handler) { + this._error = handler; + } + }]); + + return Root; +}(_container["default"]); + +exports["default"] = Root; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js new file mode 100644 index 00000000000..699eeb6e546 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js @@ -0,0 +1,31 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _container = _interopRequireDefault(require("./container")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var Selector = /*#__PURE__*/function (_Container) { + _inheritsLoose(Selector, _Container); + + function Selector(opts) { + var _this; + + _this = _Container.call(this, opts) || this; + _this.type = _types.SELECTOR; + return _this; + } + + return Selector; +}(_container["default"]); + +exports["default"] = Selector; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/string.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/string.js new file mode 100644 index 00000000000..e61df30c74a --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/string.js @@ -0,0 +1,31 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _node = _interopRequireDefault(require("./node")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var String = /*#__PURE__*/function (_Node) { + _inheritsLoose(String, _Node); + + function String(opts) { + var _this; + + _this = _Node.call(this, opts) || this; + _this.type = _types.STRING; + return _this; + } + + return String; +}(_node["default"]); + +exports["default"] = String; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js new file mode 100644 index 00000000000..e298db15faf --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js @@ -0,0 +1,31 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _namespace = _interopRequireDefault(require("./namespace")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var Tag = /*#__PURE__*/function (_Namespace) { + _inheritsLoose(Tag, _Namespace); + + function Tag(opts) { + var _this; + + _this = _Namespace.call(this, opts) || this; + _this.type = _types.TAG; + return _this; + } + + return Tag; +}(_namespace["default"]); + +exports["default"] = Tag; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/types.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/types.js new file mode 100644 index 00000000000..ab897b8ce5c --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/types.js @@ -0,0 +1,28 @@ +"use strict"; + +exports.__esModule = true; +exports.UNIVERSAL = exports.ATTRIBUTE = exports.CLASS = exports.COMBINATOR = exports.COMMENT = exports.ID = exports.NESTING = exports.PSEUDO = exports.ROOT = exports.SELECTOR = exports.STRING = exports.TAG = void 0; +var TAG = 'tag'; +exports.TAG = TAG; +var STRING = 'string'; +exports.STRING = STRING; +var SELECTOR = 'selector'; +exports.SELECTOR = SELECTOR; +var ROOT = 'root'; +exports.ROOT = ROOT; +var PSEUDO = 'pseudo'; +exports.PSEUDO = PSEUDO; +var NESTING = 'nesting'; +exports.NESTING = NESTING; +var ID = 'id'; +exports.ID = ID; +var COMMENT = 'comment'; +exports.COMMENT = COMMENT; +var COMBINATOR = 'combinator'; +exports.COMBINATOR = COMBINATOR; +var CLASS = 'class'; +exports.CLASS = CLASS; +var ATTRIBUTE = 'attribute'; +exports.ATTRIBUTE = ATTRIBUTE; +var UNIVERSAL = 'universal'; +exports.UNIVERSAL = UNIVERSAL; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js new file mode 100644 index 00000000000..cf25473d1c3 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js @@ -0,0 +1,32 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = void 0; + +var _namespace = _interopRequireDefault(require("./namespace")); + +var _types = require("./types"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var Universal = /*#__PURE__*/function (_Namespace) { + _inheritsLoose(Universal, _Namespace); + + function Universal(opts) { + var _this; + + _this = _Namespace.call(this, opts) || this; + _this.type = _types.UNIVERSAL; + _this.value = '*'; + return _this; + } + + return Universal; +}(_namespace["default"]); + +exports["default"] = Universal; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/sortAscending.js b/deps/npm/node_modules/postcss-selector-parser/dist/sortAscending.js new file mode 100644 index 00000000000..3ef56acc570 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/sortAscending.js @@ -0,0 +1,13 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = sortAscending; + +function sortAscending(list) { + return list.sort(function (a, b) { + return a - b; + }); +} + +; +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js b/deps/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js new file mode 100644 index 00000000000..48314b93e00 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js @@ -0,0 +1,95 @@ +"use strict"; + +exports.__esModule = true; +exports.combinator = exports.word = exports.comment = exports.str = exports.tab = exports.newline = exports.feed = exports.cr = exports.backslash = exports.bang = exports.slash = exports.doubleQuote = exports.singleQuote = exports.space = exports.greaterThan = exports.pipe = exports.equals = exports.plus = exports.caret = exports.tilde = exports.dollar = exports.closeSquare = exports.openSquare = exports.closeParenthesis = exports.openParenthesis = exports.semicolon = exports.colon = exports.comma = exports.at = exports.asterisk = exports.ampersand = void 0; +var ampersand = 38; // `&`.charCodeAt(0); + +exports.ampersand = ampersand; +var asterisk = 42; // `*`.charCodeAt(0); + +exports.asterisk = asterisk; +var at = 64; // `@`.charCodeAt(0); + +exports.at = at; +var comma = 44; // `,`.charCodeAt(0); + +exports.comma = comma; +var colon = 58; // `:`.charCodeAt(0); + +exports.colon = colon; +var semicolon = 59; // `;`.charCodeAt(0); + +exports.semicolon = semicolon; +var openParenthesis = 40; // `(`.charCodeAt(0); + +exports.openParenthesis = openParenthesis; +var closeParenthesis = 41; // `)`.charCodeAt(0); + +exports.closeParenthesis = closeParenthesis; +var openSquare = 91; // `[`.charCodeAt(0); + +exports.openSquare = openSquare; +var closeSquare = 93; // `]`.charCodeAt(0); + +exports.closeSquare = closeSquare; +var dollar = 36; // `$`.charCodeAt(0); + +exports.dollar = dollar; +var tilde = 126; // `~`.charCodeAt(0); + +exports.tilde = tilde; +var caret = 94; // `^`.charCodeAt(0); + +exports.caret = caret; +var plus = 43; // `+`.charCodeAt(0); + +exports.plus = plus; +var equals = 61; // `=`.charCodeAt(0); + +exports.equals = equals; +var pipe = 124; // `|`.charCodeAt(0); + +exports.pipe = pipe; +var greaterThan = 62; // `>`.charCodeAt(0); + +exports.greaterThan = greaterThan; +var space = 32; // ` `.charCodeAt(0); + +exports.space = space; +var singleQuote = 39; // `'`.charCodeAt(0); + +exports.singleQuote = singleQuote; +var doubleQuote = 34; // `"`.charCodeAt(0); + +exports.doubleQuote = doubleQuote; +var slash = 47; // `/`.charCodeAt(0); + +exports.slash = slash; +var bang = 33; // `!`.charCodeAt(0); + +exports.bang = bang; +var backslash = 92; // '\\'.charCodeAt(0); + +exports.backslash = backslash; +var cr = 13; // '\r'.charCodeAt(0); + +exports.cr = cr; +var feed = 12; // '\f'.charCodeAt(0); + +exports.feed = feed; +var newline = 10; // '\n'.charCodeAt(0); + +exports.newline = newline; +var tab = 9; // '\t'.charCodeAt(0); +// Expose aliases primarily for readability. + +exports.tab = tab; +var str = singleQuote; // No good single character representation! + +exports.str = str; +var comment = -1; +exports.comment = comment; +var word = -2; +exports.word = word; +var combinator = -3; +exports.combinator = combinator; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/tokenize.js b/deps/npm/node_modules/postcss-selector-parser/dist/tokenize.js new file mode 100644 index 00000000000..bee9fee632e --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/tokenize.js @@ -0,0 +1,271 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = tokenize; +exports.FIELDS = void 0; + +var t = _interopRequireWildcard(require("./tokenTypes")); + +var _unescapable, _wordDelimiters; + +function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +var unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable); +var wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters); +var hex = {}; +var hexChars = "0123456789abcdefABCDEF"; + +for (var i = 0; i < hexChars.length; i++) { + hex[hexChars.charCodeAt(i)] = true; +} +/** + * Returns the last index of the bar css word + * @param {string} css The string in which the word begins + * @param {number} start The index into the string where word's first letter occurs + */ + + +function consumeWord(css, start) { + var next = start; + var code; + + do { + code = css.charCodeAt(next); + + if (wordDelimiters[code]) { + return next - 1; + } else if (code === t.backslash) { + next = consumeEscape(css, next) + 1; + } else { + // All other characters are part of the word + next++; + } + } while (next < css.length); + + return next - 1; +} +/** + * Returns the last index of the escape sequence + * @param {string} css The string in which the sequence begins + * @param {number} start The index into the string where escape character (`\`) occurs. + */ + + +function consumeEscape(css, start) { + var next = start; + var code = css.charCodeAt(next + 1); + + if (unescapable[code]) {// just consume the escape char + } else if (hex[code]) { + var hexDigits = 0; // consume up to 6 hex chars + + do { + next++; + hexDigits++; + code = css.charCodeAt(next + 1); + } while (hex[code] && hexDigits < 6); // if fewer than 6 hex chars, a trailing space ends the escape + + + if (hexDigits < 6 && code === t.space) { + next++; + } + } else { + // the next char is part of the current word + next++; + } + + return next; +} + +var FIELDS = { + TYPE: 0, + START_LINE: 1, + START_COL: 2, + END_LINE: 3, + END_COL: 4, + START_POS: 5, + END_POS: 6 +}; +exports.FIELDS = FIELDS; + +function tokenize(input) { + var tokens = []; + var css = input.css.valueOf(); + var _css = css, + length = _css.length; + var offset = -1; + var line = 1; + var start = 0; + var end = 0; + var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType; + + function unclosed(what, fix) { + if (input.safe) { + // fyi: this is never set to true. + css += fix; + next = css.length - 1; + } else { + throw input.error('Unclosed ' + what, line, start - offset, start); + } + } + + while (start < length) { + code = css.charCodeAt(start); + + if (code === t.newline) { + offset = start; + line += 1; + } + + switch (code) { + case t.space: + case t.tab: + case t.newline: + case t.cr: + case t.feed: + next = start; + + do { + next += 1; + code = css.charCodeAt(next); + + if (code === t.newline) { + offset = next; + line += 1; + } + } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed); + + tokenType = t.space; + endLine = line; + endColumn = next - offset - 1; + end = next; + break; + + case t.plus: + case t.greaterThan: + case t.tilde: + case t.pipe: + next = start; + + do { + next += 1; + code = css.charCodeAt(next); + } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe); + + tokenType = t.combinator; + endLine = line; + endColumn = start - offset; + end = next; + break; + // Consume these characters as single tokens. + + case t.asterisk: + case t.ampersand: + case t.bang: + case t.comma: + case t.equals: + case t.dollar: + case t.caret: + case t.openSquare: + case t.closeSquare: + case t.colon: + case t.semicolon: + case t.openParenthesis: + case t.closeParenthesis: + next = start; + tokenType = code; + endLine = line; + endColumn = start - offset; + end = next + 1; + break; + + case t.singleQuote: + case t.doubleQuote: + quote = code === t.singleQuote ? "'" : '"'; + next = start; + + do { + escaped = false; + next = css.indexOf(quote, next + 1); + + if (next === -1) { + unclosed('quote', quote); + } + + escapePos = next; + + while (css.charCodeAt(escapePos - 1) === t.backslash) { + escapePos -= 1; + escaped = !escaped; + } + } while (escaped); + + tokenType = t.str; + endLine = line; + endColumn = start - offset; + end = next + 1; + break; + + default: + if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) { + next = css.indexOf('*/', start + 2) + 1; + + if (next === 0) { + unclosed('comment', '*/'); + } + + content = css.slice(start, next + 1); + lines = content.split('\n'); + last = lines.length - 1; + + if (last > 0) { + nextLine = line + last; + nextOffset = next - lines[last].length; + } else { + nextLine = line; + nextOffset = offset; + } + + tokenType = t.comment; + line = nextLine; + endLine = nextLine; + endColumn = next - nextOffset; + } else if (code === t.slash) { + next = start; + tokenType = code; + endLine = line; + endColumn = start - offset; + end = next + 1; + } else { + next = consumeWord(css, start); + tokenType = t.word; + endLine = line; + endColumn = next - offset; + } + + end = next + 1; + break; + } // Ensure that the token structure remains consistent + + + tokens.push([tokenType, // [0] Token type + line, // [1] Starting line + start - offset, // [2] Starting column + endLine, // [3] Ending line + endColumn, // [4] Ending column + start, // [5] Start position / Source index + end // [6] End position + ]); // Reset offset for the next token + + if (nextOffset) { + offset = nextOffset; + nextOffset = null; + } + + start = end; + } + + return tokens; +} \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js b/deps/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js new file mode 100644 index 00000000000..3472e075228 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js @@ -0,0 +1,22 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = ensureObject; + +function ensureObject(obj) { + for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + props[_key - 1] = arguments[_key]; + } + + while (props.length > 0) { + var prop = props.shift(); + + if (!obj[prop]) { + obj[prop] = {}; + } + + obj = obj[prop]; + } +} + +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/util/getProp.js b/deps/npm/node_modules/postcss-selector-parser/dist/util/getProp.js new file mode 100644 index 00000000000..53e07c90253 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/util/getProp.js @@ -0,0 +1,24 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = getProp; + +function getProp(obj) { + for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + props[_key - 1] = arguments[_key]; + } + + while (props.length > 0) { + var prop = props.shift(); + + if (!obj[prop]) { + return undefined; + } + + obj = obj[prop]; + } + + return obj; +} + +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/util/index.js b/deps/npm/node_modules/postcss-selector-parser/dist/util/index.js new file mode 100644 index 00000000000..043fda8c64b --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/util/index.js @@ -0,0 +1,22 @@ +"use strict"; + +exports.__esModule = true; +exports.stripComments = exports.ensureObject = exports.getProp = exports.unesc = void 0; + +var _unesc = _interopRequireDefault(require("./unesc")); + +exports.unesc = _unesc["default"]; + +var _getProp = _interopRequireDefault(require("./getProp")); + +exports.getProp = _getProp["default"]; + +var _ensureObject = _interopRequireDefault(require("./ensureObject")); + +exports.ensureObject = _ensureObject["default"]; + +var _stripComments = _interopRequireDefault(require("./stripComments")); + +exports.stripComments = _stripComments["default"]; + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js b/deps/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js new file mode 100644 index 00000000000..c74f1fecdcc --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js @@ -0,0 +1,27 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = stripComments; + +function stripComments(str) { + var s = ""; + var commentStart = str.indexOf("/*"); + var lastEnd = 0; + + while (commentStart >= 0) { + s = s + str.slice(lastEnd, commentStart); + var commentEnd = str.indexOf("*/", commentStart + 2); + + if (commentEnd < 0) { + return s; + } + + lastEnd = commentEnd + 2; + commentStart = str.indexOf("/*", lastEnd); + } + + s = s + str.slice(lastEnd); + return s; +} + +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/util/unesc.js b/deps/npm/node_modules/postcss-selector-parser/dist/util/unesc.js new file mode 100644 index 00000000000..e4fac839ddd --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/dist/util/unesc.js @@ -0,0 +1,93 @@ +"use strict"; + +exports.__esModule = true; +exports["default"] = unesc; + +// Many thanks for this post which made this migration much easier. +// https://mathiasbynens.be/notes/css-escapes + +/** + * + * @param {string} str + * @returns {[string, number]|undefined} + */ +function gobbleHex(str) { + var lower = str.toLowerCase(); + var hex = ''; + var spaceTerminated = false; + + for (var i = 0; i < 6 && lower[i] !== undefined; i++) { + var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9] + + var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point + + spaceTerminated = code === 32; + + if (!valid) { + break; + } + + hex += lower[i]; + } + + if (hex.length === 0) { + return undefined; + } + + var codePoint = parseInt(hex, 16); + var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for + // "If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point" + // https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point + + if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) { + return ["\uFFFD", hex.length + (spaceTerminated ? 1 : 0)]; + } + + return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)]; +} + +var CONTAINS_ESCAPE = /\\/; + +function unesc(str) { + var needToProcess = CONTAINS_ESCAPE.test(str); + + if (!needToProcess) { + return str; + } + + var ret = ""; + + for (var i = 0; i < str.length; i++) { + if (str[i] === "\\") { + var gobbled = gobbleHex(str.slice(i + 1, i + 7)); + + if (gobbled !== undefined) { + ret += gobbled[0]; + i += gobbled[1]; + continue; + } // Retain a pair of \\ if double escaped `\\\\` + // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e + + + if (str[i + 1] === "\\") { + ret += "\\"; + i++; + continue; + } // if \\ is at the end of the string retain it + // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb + + + if (str.length === i + 1) { + ret += str[i]; + } + + continue; + } + + ret += str[i]; + } + + return ret; +} + +module.exports = exports.default; \ No newline at end of file diff --git a/deps/npm/node_modules/postcss-selector-parser/package.json b/deps/npm/node_modules/postcss-selector-parser/package.json new file mode 100644 index 00000000000..a6f33589ba0 --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/package.json @@ -0,0 +1,78 @@ +{ + "name": "postcss-selector-parser", + "version": "6.0.10", + "devDependencies": { + "@babel/cli": "^7.11.6", + "@babel/core": "^7.11.6", + "@babel/eslint-parser": "^7.11.5", + "@babel/eslint-plugin": "^7.11.5", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/preset-env": "^7.11.5", + "@babel/register": "^7.11.5", + "ava": "^3.12.1", + "babel-plugin-add-module-exports": "^1.0.4", + "coveralls": "^3.1.0", + "del-cli": "^3.0.1", + "eslint": "^7.9.0", + "eslint-plugin-import": "^2.22.0", + "glob": "^7.1.6", + "minimist": "^1.2.5", + "nyc": "^15.1.0", + "postcss": "^8.0.0", + "semver": "^7.3.2", + "typescript": "^4.0.3" + }, + "main": "dist/index.js", + "types": "postcss-selector-parser.d.ts", + "files": [ + "API.md", + "CHANGELOG.md", + "LICENSE-MIT", + "dist", + "postcss-selector-parser.d.ts", + "!**/__tests__" + ], + "scripts": { + "pretest": "eslint src && tsc --noEmit postcss-selector-parser.d.ts", + "prepare": "del-cli dist && BABEL_ENV=publish babel src --out-dir dist --ignore /__tests__/", + "lintfix": "eslint --fix src", + "report": "nyc report --reporter=html", + "test": "nyc ava src/__tests__/*.js ", + "testone": "ava" + }, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "license": "MIT", + "engines": { + "node": ">=4" + }, + "homepage": "https://github.com/postcss/postcss-selector-parser", + "contributors": [ + { + "name": "Ben Briggs", + "email": "beneb.info@gmail.com", + "url": "http://beneb.info" + }, + { + "name": "Chris Eppstein", + "email": "chris@eppsteins.net", + "url": "http://twitter.com/chriseppstein" + } + ], + "repository": "postcss/postcss-selector-parser", + "ava": { + "require": [ + "@babel/register" + ], + "concurrency": 5, + "timeout": "25s" + }, + "nyc": { + "exclude": [ + "node_modules", + "**/__tests__" + ] + } +} diff --git a/deps/npm/node_modules/postcss-selector-parser/postcss-selector-parser.d.ts b/deps/npm/node_modules/postcss-selector-parser/postcss-selector-parser.d.ts new file mode 100644 index 00000000000..89a2c5239ed --- /dev/null +++ b/deps/npm/node_modules/postcss-selector-parser/postcss-selector-parser.d.ts @@ -0,0 +1,555 @@ +// Type definitions for postcss-selector-parser 2.2.3 +// Definitions by: Chris Eppstein + +/*~ Note that ES6 modules cannot directly export callable functions. + *~ This file should be imported using the CommonJS-style: + *~ import x = require('someLibrary'); + *~ + *~ Refer to the documentation to understand common + *~ workarounds for this limitation of ES6 modules. + */ + +/*~ This declaration specifies that the function + *~ is the exported object from the file + */ +export = parser; + +// A type that's T but not U. +type Diff = T extends U ? never : T; + +// TODO: Conditional types in TS 1.8 will really clean this up. +declare function parser(): parser.Processor; +declare function parser(processor: parser.AsyncProcessor): parser.Processor; +declare function parser(processor: parser.AsyncProcessor): parser.Processor; +declare function parser(processor: parser.SyncProcessor): parser.Processor; +declare function parser(processor: parser.SyncProcessor): parser.Processor; +declare function parser(processor?: parser.SyncProcessor | parser.AsyncProcessor): parser.Processor; + +/*~ If you want to expose types from your module as well, you can + *~ place them in this block. Often you will want to describe the + *~ shape of the return type of the function; that type should + *~ be declared in here, as this example shows. + */ +declare namespace parser { + /* copied from postcss -- so we don't need to add a dependency */ + type ErrorOptions = { + plugin?: string; + word?: string; + index?: number + }; + /* the bits we use of postcss.Rule, copied from postcss -- so we don't need to add a dependency */ + type PostCSSRuleNode = { + selector: string + /** + * @returns postcss.CssSyntaxError but it's a complex object, caller + * should cast to it if they have a dependency on postcss. + */ + error(message: string, options?: ErrorOptions): Error; + }; + /** Accepts a string */ + type Selectors = string | PostCSSRuleNode + type ProcessorFn = (root: parser.Root) => ReturnType; + type SyncProcessor = ProcessorFn; + type AsyncProcessor = ProcessorFn>; + + const TAG: "tag"; + const STRING: "string"; + const SELECTOR: "selector"; + const ROOT: "root"; + const PSEUDO: "pseudo"; + const NESTING: "nesting"; + const ID: "id"; + const COMMENT: "comment"; + const COMBINATOR: "combinator"; + const CLASS: "class"; + const ATTRIBUTE: "attribute"; + const UNIVERSAL: "universal"; + + interface NodeTypes { + tag: Tag, + string: String, + selector: Selector, + root: Root, + pseudo: Pseudo, + nesting: Nesting, + id: Identifier, + comment: Comment, + combinator: Combinator, + class: ClassName, + attribute: Attribute, + universal: Universal + } + + type Node = NodeTypes[keyof NodeTypes]; + + function isNode(node: any): node is Node; + + interface Options { + /** + * Preserve whitespace when true. Default: false; + */ + lossless: boolean; + /** + * When true and a postcss.Rule is passed, set the result of + * processing back onto the rule when done. Default: false. + */ + updateSelector: boolean; + } + class Processor< + TransformType = never, + SyncSelectorsType extends Selectors | never = Selectors + > { + res: Root; + readonly result: String; + ast(selectors: Selectors, options?: Partial): Promise; + astSync(selectors: SyncSelectorsType, options?: Partial): Root; + transform(selectors: Selectors, options?: Partial): Promise; + transformSync(selectors: SyncSelectorsType, options?: Partial): TransformType; + process(selectors: Selectors, options?: Partial): Promise; + processSync(selectors: SyncSelectorsType, options?: Partial): string; + } + interface ParserOptions { + css: string; + error: (message: string, options: ErrorOptions) => Error; + options: Options; + } + class Parser { + input: ParserOptions; + lossy: boolean; + position: number; + root: Root; + selectors: string; + current: Selector; + constructor(input: ParserOptions); + /** + * Raises an error, if the processor is invoked on + * a postcss Rule node, a better error message is raised. + */ + error(message: string, options?: ErrorOptions): void; + } + interface NodeSource { + start?: { + line: number, + column: number + }, + end?: { + line: number, + column: number + } + } + interface SpaceAround { + before: string; + after: string; + } + interface Spaces extends SpaceAround { + [spaceType: string]: string | Partial | undefined; + } + interface NodeOptions { + value: Value; + spaces?: Partial; + source?: NodeSource; + sourceIndex?: number; + } + interface Base< + Value extends string | undefined = string, + ParentType extends Container | undefined = Container | undefined + > { + type: keyof NodeTypes; + parent: ParentType; + value: Value; + spaces: Spaces; + source?: NodeSource; + sourceIndex: number; + rawSpaceBefore: string; + rawSpaceAfter: string; + remove(): Node; + replaceWith(...nodes: Node[]): Node; + next(): Node; + prev(): Node; + clone(opts: {[override: string]:any}): Node; + /** + * Return whether this node includes the character at the position of the given line and column. + * Returns undefined if the nodes lack sufficient source metadata to determine the position. + * @param line 1-index based line number relative to the start of the selector. + * @param column 1-index based column number relative to the start of the selector. + */ + isAtPosition(line: number, column: number): boolean | undefined; + /** + * Some non-standard syntax doesn't follow normal escaping rules for css, + * this allows the escaped value to be specified directly, allowing illegal characters to be + * directly inserted into css output. + * @param name the property to set + * @param value the unescaped value of the property + * @param valueEscaped optional. the escaped value of the property. + */ + setPropertyAndEscape(name: string, value: any, valueEscaped: string): void; + /** + * When you want a value to passed through to CSS directly. This method + * deletes the corresponding raw value causing the stringifier to fallback + * to the unescaped value. + * @param name the property to set. + * @param value The value that is both escaped and unescaped. + */ + setPropertyWithoutEscape(name: string, value: any): void; + /** + * Some non-standard syntax doesn't follow normal escaping rules for css. + * This allows non standard syntax to be appended to an existing property + * by specifying the escaped value. By specifying the escaped value, + * illegal characters are allowed to be directly inserted into css output. + * @param {string} name the property to set + * @param {any} value the unescaped value of the property + * @param {string} valueEscaped optional. the escaped value of the property. + */ + appendToPropertyAndEscape(name: string, value: any, valueEscaped: string): void; + toString(): string; + } + interface ContainerOptions extends NodeOptions { + nodes?: Array; + } + interface Container< + Value extends string | undefined = string, + Child extends Node = Node + > extends Base { + nodes: Array; + append(selector: Selector): this; + prepend(selector: Selector): this; + at(index: number): Child; + /** + * Return the most specific node at the line and column number given. + * The source location is based on the original parsed location, locations aren't + * updated as selector nodes are mutated. + * + * Note that this location is relative to the location of the first character + * of the selector, and not the location of the selector in the overall document + * when used in conjunction with postcss. + * + * If not found, returns undefined. + * @param line The line number of the node to find. (1-based index) + * @param col The column number of the node to find. (1-based index) + */ + atPosition(line: number, column: number): Child; + index(child: Child): number; + readonly first: Child; + readonly last: Child; + readonly length: number; + removeChild(child: Child): this; + removeAll(): Container; + empty(): Container; + insertAfter(oldNode: Child, newNode: Child): this; + insertBefore(oldNode: Child, newNode: Child): this; + each(callback: (node: Child) => boolean | void): boolean | undefined; + walk( + callback: (node: Node) => boolean | void + ): boolean | undefined; + walkAttributes( + callback: (node: Attribute) => boolean | void + ): boolean | undefined; + walkClasses( + callback: (node: ClassName) => boolean | void + ): boolean | undefined; + walkCombinators( + callback: (node: Combinator) => boolean | void + ): boolean | undefined; + walkComments( + callback: (node: Comment) => boolean | void + ): boolean | undefined; + walkIds( + callback: (node: Identifier) => boolean | void + ): boolean | undefined; + walkNesting( + callback: (node: Nesting) => boolean | void + ): boolean | undefined; + walkPseudos( + callback: (node: Pseudo) => boolean | void + ): boolean | undefined; + walkTags(callback: (node: Tag) => boolean | void): boolean | undefined; + split(callback: (node: Child) => boolean): [Child[], Child[]]; + map(callback: (node: Child) => T): T[]; + reduce( + callback: ( + previousValue: Child, + currentValue: Child, + currentIndex: number, + array: readonly Child[] + ) => Child + ): Child; + reduce( + callback: ( + previousValue: Child, + currentValue: Child, + currentIndex: number, + array: readonly Child[] + ) => Child, + initialValue: Child + ): Child; + reduce( + callback: ( + previousValue: T, + currentValue: Child, + currentIndex: number, + array: readonly Child[] + ) => T, + initialValue: T + ): T; + every(callback: (node: Child) => boolean): boolean; + some(callback: (node: Child) => boolean): boolean; + filter(callback: (node: Child) => boolean): Child[]; + sort(callback: (nodeA: Child, nodeB: Child) => number): Child[]; + toString(): string; + } + function isContainer(node: any): node is Root | Selector | Pseudo; + + interface NamespaceOptions extends NodeOptions { + namespace?: string | true; + } + interface Namespace extends Base { + /** alias for namespace */ + ns: string | true; + /** + * namespace prefix. + */ + namespace: string | true; + /** + * If a namespace exists, prefix the value provided with it, separated by |. + */ + qualifiedName(value: string): string; + /** + * A string representing the namespace suitable for output. + */ + readonly namespaceString: string; + } + function isNamespace(node: any): node is Attribute | Tag; + + interface Root extends Container { + type: "root"; + /** + * Raises an error, if the processor is invoked on + * a postcss Rule node, a better error message is raised. + */ + error(message: string, options?: ErrorOptions): Error; + nodeAt(line: number, column: number): Node + } + function root(opts: ContainerOptions): Root; + function isRoot(node: any): node is Root; + + interface _Selector extends Container> { + type: "selector"; + } + type Selector = _Selector; + function selector(opts: ContainerOptions): Selector; + function isSelector(node: any): node is Selector; + + interface CombinatorRaws { + value?: string; + spaces?: { + before?: string; + after?: string; + }; + } + interface Combinator extends Base { + type: "combinator"; + raws?: CombinatorRaws; + } + function combinator(opts: NodeOptions): Combinator; + function isCombinator(node: any): node is Combinator; + + interface ClassName extends Base { + type: "class"; + } + function className(opts: NamespaceOptions): ClassName; + function isClassName(node: any): node is ClassName; + + type AttributeOperator = "=" | "~=" | "|=" | "^=" | "$=" | "*="; + type QuoteMark = '"' | "'" | null; + interface PreferredQuoteMarkOptions { + quoteMark?: QuoteMark; + preferCurrentQuoteMark?: boolean; + } + interface SmartQuoteMarkOptions extends PreferredQuoteMarkOptions { + smart?: boolean; + } + interface AttributeOptions extends NamespaceOptions { + attribute: string; + operator?: AttributeOperator; + insensitive?: boolean; + quoteMark?: QuoteMark; + /** @deprecated Use quoteMark instead. */ + quoted?: boolean; + spaces?: { + before?: string; + after?: string; + attribute?: Partial; + operator?: Partial; + value?: Partial; + insensitive?: Partial; + } + raws: { + unquoted?: string; + attribute?: string; + operator?: string; + value?: string; + insensitive?: string; + spaces?: { + attribute?: Partial; + operator?: Partial; + value?: Partial; + insensitive?: Partial; + } + }; + } + interface Attribute extends Namespace { + type: "attribute"; + attribute: string; + operator?: AttributeOperator; + insensitive?: boolean; + quoteMark: QuoteMark; + quoted?: boolean; + spaces: { + before: string; + after: string; + attribute?: Partial; + operator?: Partial; + value?: Partial; + insensitive?: Partial; + } + raws: { + /** @deprecated The attribute value is unquoted, use that instead.. */ + unquoted?: string; + attribute?: string; + operator?: string; + /** The value of the attribute with quotes and escapes. */ + value?: string; + insensitive?: string; + spaces?: { + attribute?: Partial; + operator?: Partial; + value?: Partial; + insensitive?: Partial; + } + }; + /** + * The attribute name after having been qualified with a namespace. + */ + readonly qualifiedAttribute: string; + + /** + * The case insensitivity flag or an empty string depending on whether this + * attribute is case insensitive. + */ + readonly insensitiveFlag : 'i' | ''; + + /** + * Returns the attribute's value quoted such that it would be legal to use + * in the value of a css file. The original value's quotation setting + * used for stringification is left unchanged. See `setValue(value, options)` + * if you want to control the quote settings of a new value for the attribute or + * `set quoteMark(mark)` if you want to change the quote settings of the current + * value. + * + * You can also change the quotation used for the current value by setting quoteMark. + **/ + getQuotedValue(options?: SmartQuoteMarkOptions): string; + + /** + * Set the unescaped value with the specified quotation options. The value + * provided must not include any wrapping quote marks -- those quotes will + * be interpreted as part of the value and escaped accordingly. + * @param value + */ + setValue(value: string, options?: SmartQuoteMarkOptions): void; + + /** + * Intelligently select a quoteMark value based on the value's contents. If + * the value is a legal CSS ident, it will not be quoted. Otherwise a quote + * mark will be picked that minimizes the number of escapes. + * + * If there's no clear winner, the quote mark from these options is used, + * then the source quote mark (this is inverted if `preferCurrentQuoteMark` is + * true). If the quoteMark is unspecified, a double quote is used. + **/ + smartQuoteMark(options: PreferredQuoteMarkOptions): QuoteMark; + + /** + * Selects the preferred quote mark based on the options and the current quote mark value. + * If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)` + * instead. + */ + preferredQuoteMark(options: PreferredQuoteMarkOptions): QuoteMark + + /** + * returns the offset of the attribute part specified relative to the + * start of the node of the output string. + * + * * "ns" - alias for "namespace" + * * "namespace" - the namespace if it exists. + * * "attribute" - the attribute name + * * "attributeNS" - the start of the attribute or its namespace + * * "operator" - the match operator of the attribute + * * "value" - The value (string or identifier) + * * "insensitive" - the case insensitivity flag; + * @param part One of the possible values inside an attribute. + * @returns -1 if the name is invalid or the value doesn't exist in this attribute. + */ + offsetOf(part: "ns" | "namespace" | "attribute" | "attributeNS" | "operator" | "value" | "insensitive"): number; + } + function attribute(opts: AttributeOptions): Attribute; + function isAttribute(node: any): node is Attribute; + + interface Pseudo extends Container { + type: "pseudo"; + } + function pseudo(opts: ContainerOptions): Pseudo; + /** + * Checks wether the node is the Psuedo subtype of node. + */ + function isPseudo(node: any): node is Pseudo; + + /** + * Checks wether the node is, specifically, a pseudo element instead of + * pseudo class. + */ + function isPseudoElement(node: any): node is Pseudo; + + /** + * Checks wether the node is, specifically, a pseudo class instead of + * pseudo element. + */ + function isPseudoClass(node: any): node is Pseudo; + + + interface Tag extends Namespace { + type: "tag"; + } + function tag(opts: NamespaceOptions): Tag; + function isTag(node: any): node is Tag; + + interface Comment extends Base { + type: "comment"; + } + function comment(opts: NodeOptions): Comment; + function isComment(node: any): node is Comment; + + interface Identifier extends Base { + type: "id"; + } + function id(opts: any): any; + function isIdentifier(node: any): node is Identifier; + + interface Nesting extends Base { + type: "nesting"; + } + function nesting(opts: any): any; + function isNesting(node: any): node is Nesting; + + interface String extends Base { + type: "string"; + } + function string(opts: NodeOptions): String; + function isString(node: any): node is String; + + interface Universal extends Base { + type: "universal"; + } + function universal(opts?: NamespaceOptions): any; + function isUniversal(node: any): node is Universal; +} diff --git a/deps/npm/node_modules/promise-all-reject-late/package-lock.json b/deps/npm/node_modules/promise-all-reject-late/package-lock.json deleted file mode 100644 index 4d485cd40bc..00000000000 --- a/deps/npm/node_modules/promise-all-reject-late/package-lock.json +++ /dev/null @@ -1,3447 +0,0 @@ -{ - "name": "promise-all-reject-late", - "version": "1.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/runtime": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", - "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arg": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz", - "integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "async-hook-domain": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-1.1.3.tgz", - "integrity": "sha512-ZovMxSbADV3+biB7oR1GL5lGyptI24alp0LWHlmz1OFc5oL47pz3EiIF6nXOkDW7yLqih4NtsiYduzdDW0i+Wg==", - "dev": true, - "requires": { - "source-map-support": "^0.5.11" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", - "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "bind-obj-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz", - "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" - }, - "dependencies": { - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "coveralls": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz", - "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.0", - "request": "^2.88.0" - } - }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true - }, - "diff-frag": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/diff-frag/-/diff-frag-1.0.1.tgz", - "integrity": "sha512-6/v2PC/6UTGcWPPetb9acL8foberUg/CtPdALeJUdD1B/weHNvzftoo00gYznqHGRhHEbykUGzqfG9RWOSr5yw==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", - "dev": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", - "dev": true - }, - "flow-parser": { - "version": "0.114.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.114.0.tgz", - "integrity": "sha512-Qt9HT3v507bCerJfp4FX4N5E7ysinBzxjpK1rL7bJ/Bw12puF6lva2MAIXYS1d83bV7BT/F7EDk+faJQY5MpRA==", - "dev": true - }, - "flow-remove-types": { - "version": "2.114.0", - "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.114.0.tgz", - "integrity": "sha512-ckon8RO7tFcVGW3Ll0jAWgULVrNa/cEN0JXp2I7XmzWT/GCQghSb+0312NjtAb+y3W9iXpPxkVMI86+SDU0E0Q==", - "dev": true, - "requires": { - "flow-parser": "^0.114.0", - "pirates": "^3.0.2", - "vlq": "^0.2.1" - } - }, - "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "dev": true, - "optional": true - }, - "function-loop": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz", - "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "handlebars": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", - "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-processinfo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-1.0.0.tgz", - "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^6.0.5", - "istanbul-lib-coverage": "^2.0.3", - "rimraf": "^2.6.3", - "uuid": "^3.3.2" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", - "dev": true, - "requires": { - "handlebars": "^4.1.2" - } - }, - "jackspeak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.0.tgz", - "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==", - "dev": true, - "requires": { - "cliui": "^4.1.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dev": true, - "requires": { - "mime-db": "1.42.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nyc": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", - "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "caching-transform": "^3.0.2", - "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", - "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "own-or": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", - "dev": true - }, - "own-or-env": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", - "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==", - "dev": true, - "requires": { - "own-or": "^1.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", - "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pirates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz", - "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "optional": true - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.6.0.tgz", - "integrity": "sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "react": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", - "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-is": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", - "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - } - } - }, - "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.7" - } - }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", - "dev": true - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz", - "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawn-wrap": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", - "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - } - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tap": { - "version": "14.10.5", - "resolved": "https://registry.npmjs.org/tap/-/tap-14.10.5.tgz", - "integrity": "sha512-8I8zMFEVu7e7RVcjK1GUNf1vW+6B9TRCZWGgif5siMBfvwTE9/EPN/7aH6W2r+WR2H2YHXcrCJ3XhRitYEVKfQ==", - "dev": true, - "requires": { - "@types/react": "^16.9.16", - "async-hook-domain": "^1.1.3", - "bind-obj-methods": "^2.0.0", - "browser-process-hrtime": "^1.0.0", - "chokidar": "^3.3.0", - "color-support": "^1.1.0", - "coveralls": "^3.0.8", - "diff": "^4.0.1", - "esm": "^3.2.25", - "findit": "^2.0.0", - "flow-remove-types": "^2.112.0", - "foreground-child": "^1.3.3", - "fs-exists-cached": "^1.0.0", - "function-loop": "^1.0.2", - "glob": "^7.1.6", - "import-jsx": "^3.0.0", - "ink": "^2.5.0", - "isexe": "^2.0.0", - "istanbul-lib-processinfo": "^1.0.0", - "jackspeak": "^1.4.0", - "minipass": "^3.1.1", - "mkdirp": "^0.5.1", - "nyc": "^14.1.1", - "opener": "^1.5.1", - "own-or": "^1.0.0", - "own-or-env": "^1.0.1", - "react": "^16.12.0", - "rimraf": "^2.7.1", - "signal-exit": "^3.0.0", - "source-map-support": "^0.5.16", - "stack-utils": "^1.0.2", - "tap-mocha-reporter": "^5.0.0", - "tap-parser": "^10.0.1", - "tap-yaml": "^1.0.0", - "tcompare": "^3.0.0", - "treport": "^1.0.1", - "trivial-deferred": "^1.0.1", - "ts-node": "^8.5.2", - "typescript": "^3.7.2", - "which": "^2.0.2", - "write-file-atomic": "^3.0.1", - "yaml": "^1.7.2", - "yapool": "^1.0.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "bundled": true, - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.7.5", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.5", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - } - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "esutils": "^2.0.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "bundled": true, - "dev": true - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helpers": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/highlight": { - "version": "7.5.0", - "bundled": true, - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.7.5", - "bundled": true, - "dev": true - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-builder-react-jsx": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.7.4" - } - }, - "@babel/runtime": { - "version": "7.7.6", - "bundled": true, - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/template": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "bundled": true, - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@types/color-name": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "@types/prop-types": { - "version": "15.7.3", - "bundled": true, - "dev": true - }, - "@types/react": { - "version": "16.9.16", - "bundled": true, - "dev": true, - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "ansi-escapes": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ansi-regex": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "arrify": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "auto-bind": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cardinal": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "chalk": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.0", - "bundled": true, - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - } - } - }, - "ci-info": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "color-convert": { - "version": "1.9.3", - "bundled": true, - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - } - } - }, - "csstype": { - "version": "2.6.8", - "bundled": true, - "dev": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true, - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "esprima": { - "version": "4.0.1", - "bundled": true, - "dev": true - }, - "esutils": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "globals": { - "version": "11.12.0", - "bundled": true, - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "import-jsx": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-react-jsx": "^7.3.0", - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "ink": { - "version": "2.6.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "arrify": "^2.0.1", - "auto-bind": "^3.0.0", - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.0.0", - "is-ci": "^2.0.0", - "lodash.throttle": "^4.1.1", - "log-update": "^3.0.0", - "prop-types": "^15.6.2", - "react-reconciler": "^0.24.0", - "scheduler": "^0.18.0", - "signal-exit": "^3.0.2", - "slice-ansi": "^3.0.0", - "string-length": "^3.1.0", - "widest-line": "^3.1.0", - "wrap-ansi": "^6.2.0", - "yoga-layout-prebuilt": "^1.9.3" - } - }, - "is-ci": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "bundled": true, - "dev": true - }, - "json5": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "lodash": { - "version": "4.17.15", - "bundled": true, - "dev": true - }, - "lodash.throttle": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "log-update": { - "version": "3.3.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "cli-cursor": "^2.1.0", - "wrap-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "bundled": true, - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "onetime": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "string-width": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "bundled": true, - "dev": true - } - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "onetime": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "path-parse": { - "version": "1.0.6", - "bundled": true, - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "punycode": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "react-is": { - "version": "16.12.0", - "bundled": true, - "dev": true - }, - "react-reconciler": { - "version": "0.24.0", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.18.0" - } - }, - "redeyed": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "esprima": "~4.0.0" - } - }, - "regenerator-runtime": { - "version": "0.13.3", - "bundled": true, - "dev": true - }, - "resolve": { - "version": "1.13.1", - "bundled": true, - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "scheduler": { - "version": "0.18.0", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.0", - "bundled": true, - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - } - } - }, - "string-length": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string-width": { - "version": "4.2.0", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^4.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "bundled": true, - "dev": true - } - } - }, - "tap-parser": { - "version": "10.0.1", - "bundled": true, - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "minipass": "^3.0.0", - "tap-yaml": "^1.0.0" - } - }, - "tap-yaml": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "yaml": "^1.5.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "treport": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "cardinal": "^2.1.1", - "chalk": "^3.0.0", - "import-jsx": "^3.0.0", - "ink": "^2.5.0", - "ms": "^2.1.2", - "string-length": "^3.1.0", - "tap-parser": "^10.0.1", - "unicode-length": "^2.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "unicode-length": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "punycode": "^2.0.0", - "strip-ansi": "^3.0.1" - } - } - } - }, - "type-fest": { - "version": "0.8.1", - "bundled": true, - "dev": true - }, - "widest-line": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.0", - "bundled": true, - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - } - } - }, - "yaml": { - "version": "1.7.2", - "bundled": true, - "dev": true, - "requires": { - "@babel/runtime": "^7.6.3" - } - }, - "yoga-layout-prebuilt": { - "version": "1.9.3", - "bundled": true, - "dev": true - } - } - }, - "tap-mocha-reporter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.0.tgz", - "integrity": "sha512-8HlAtdmYGlDZuW83QbF/dc46L7cN+AGhLZcanX3I9ILvxUAl+G2/mtucNPSXecTlG/4iP1hv6oMo0tMhkn3Tsw==", - "dev": true, - "requires": { - "color-support": "^1.1.0", - "debug": "^2.1.3", - "diff": "^1.3.2", - "escape-string-regexp": "^1.0.3", - "glob": "^7.0.5", - "readable-stream": "^2.1.5", - "tap-parser": "^10.0.0", - "tap-yaml": "^1.0.0", - "unicode-length": "^1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "tap-parser": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.0.1.tgz", - "integrity": "sha512-qdT15H0DoJIi7zOqVXDn9X0gSM68JjNy1w3VemwTJlDnETjbi6SutnqmBfjDJAwkFS79NJ97gZKqie00ZCGmzg==", - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "minipass": "^3.0.0", - "tap-yaml": "^1.0.0" - } - }, - "tap-yaml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", - "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", - "dev": true, - "requires": { - "yaml": "^1.5.0" - } - }, - "tcompare": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-3.0.4.tgz", - "integrity": "sha512-Q3TitMVK59NyKgQyFh+857wTAUE329IzLDehuPgU4nF5e8g+EUQ+yUbjUy1/6ugiNnXztphT+NnqlCXolv9P3A==", - "dev": true, - "requires": { - "diff-frag": "^1.0.1" - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "trivial-deferred": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", - "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", - "dev": true - }, - "ts-node": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.4.tgz", - "integrity": "sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", - "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==", - "dev": true - }, - "uglify-js": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.3.tgz", - "integrity": "sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.3", - "source-map": "~0.6.1" - } - }, - "unicode-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", - "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", - "dev": true, - "requires": { - "punycode": "^1.3.2", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "optional": true - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", - "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yaml": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", - "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.6.3" - } - }, - "yapool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", - "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", - "dev": true - }, - "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/deps/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin/LICENSE b/deps/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin/LICENSE new file mode 100644 index 00000000000..19cec97b184 --- /dev/null +++ b/deps/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) npm, Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/deps/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin/lib/index.js b/deps/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin/lib/index.js new file mode 100644 index 00000000000..d6f0a581b9e --- /dev/null +++ b/deps/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin/lib/index.js @@ -0,0 +1,64 @@ +// pass in a manifest with a 'bin' field here, and it'll turn it +// into a properly santized bin object +const { join, basename } = require('path') + +const normalize = pkg => + !pkg.bin ? removeBin(pkg) + : typeof pkg.bin === 'string' ? normalizeString(pkg) + : Array.isArray(pkg.bin) ? normalizeArray(pkg) + : typeof pkg.bin === 'object' ? normalizeObject(pkg) + : removeBin(pkg) + +const normalizeString = pkg => { + if (!pkg.name) { + return removeBin(pkg) + } + pkg.bin = { [pkg.name]: pkg.bin } + return normalizeObject(pkg) +} + +const normalizeArray = pkg => { + pkg.bin = pkg.bin.reduce((acc, k) => { + acc[basename(k)] = k + return acc + }, {}) + return normalizeObject(pkg) +} + +const removeBin = pkg => { + delete pkg.bin + return pkg +} + +const normalizeObject = pkg => { + const orig = pkg.bin + const clean = {} + let hasBins = false + Object.keys(orig).forEach(binKey => { + const base = join('/', basename(binKey.replace(/\\|:/g, '/'))).slice(1) + + if (typeof orig[binKey] !== 'string' || !base) { + return + } + + const binTarget = join('/', orig[binKey]) + .replace(/\\/g, '/').slice(1) + + if (!binTarget) { + return + } + + clean[base] = binTarget + hasBins = true + }) + + if (hasBins) { + pkg.bin = clean + } else { + delete pkg.bin + } + + return pkg +} + +module.exports = normalize diff --git a/deps/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin/package.json b/deps/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin/package.json new file mode 100644 index 00000000000..02de808d9b7 --- /dev/null +++ b/deps/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin/package.json @@ -0,0 +1,41 @@ +{ + "name": "npm-normalize-package-bin", + "version": "2.0.0", + "description": "Turn any flavor of allowable package.json bin into a normalized object", + "main": "lib/index.js", + "repository": { + "type": "git", + "url": "https://github.com/npm/npm-normalize-package-bin.git" + }, + "author": "GitHub Inc.", + "license": "ISC", + "scripts": { + "test": "tap", + "snap": "tap", + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --follow-tags", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force", + "lintfix": "npm run lint -- --fix", + "prepublishOnly": "git push origin --follow-tags", + "posttest": "npm run lint" + }, + "devDependencies": { + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "3.5.0", + "tap": "^16.3.0" + }, + "files": [ + "bin/", + "lib/" + ], + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "3.5.0" + } +} diff --git a/deps/npm/node_modules/read-package-json/package.json b/deps/npm/node_modules/read-package-json/package.json index 8bb77ca01f6..82d0b729651 100644 --- a/deps/npm/node_modules/read-package-json/package.json +++ b/deps/npm/node_modules/read-package-json/package.json @@ -1,6 +1,6 @@ { "name": "read-package-json", - "version": "5.0.1", + "version": "5.0.2", "author": "GitHub Inc.", "description": "The thing npm uses to read package.json files with semantics and defaults and validation", "repository": { @@ -29,11 +29,11 @@ "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^2.0.0" }, "devDependencies": { "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.4.1", + "@npmcli/template-oss": "3.6.0", "tap": "^16.0.1" }, "license": "ISC", @@ -52,6 +52,6 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "3.4.1" + "version": "3.6.0" } } diff --git a/deps/npm/node_modules/rimraf/node_modules/glob/common.js b/deps/npm/node_modules/rimraf/node_modules/glob/common.js index 8e363b6c1f1..424c46e1dab 100644 --- a/deps/npm/node_modules/rimraf/node_modules/glob/common.js +++ b/deps/npm/node_modules/rimraf/node_modules/glob/common.js @@ -110,6 +110,8 @@ function setopts (self, pattern, options) { // Note that they are not supported in Glob itself anyway. options.nonegate = true options.nocomment = true + // always treat \ in patterns as escapes, not path separators + options.allowWindowsEscape = false self.minimatch = new Minimatch(pattern, options) self.options = self.minimatch.options diff --git a/deps/npm/node_modules/rimraf/node_modules/glob/glob.js b/deps/npm/node_modules/rimraf/node_modules/glob/glob.js index afcf82752c3..37a4d7e6077 100644 --- a/deps/npm/node_modules/rimraf/node_modules/glob/glob.js +++ b/deps/npm/node_modules/rimraf/node_modules/glob/glob.js @@ -342,7 +342,10 @@ Glob.prototype._process = function (pattern, index, inGlobStar, cb) { var read if (prefix === null) read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + else if (isAbsolute(prefix) || + isAbsolute(pattern.map(function (p) { + return typeof p === 'string' ? p : '[*]' + }).join('/'))) { if (!prefix || !isAbsolute(prefix)) prefix = '/' + prefix read = prefix diff --git a/deps/npm/node_modules/rimraf/node_modules/glob/package.json b/deps/npm/node_modules/rimraf/node_modules/glob/package.json index cc1a57a896e..5940b649b7e 100644 --- a/deps/npm/node_modules/rimraf/node_modules/glob/package.json +++ b/deps/npm/node_modules/rimraf/node_modules/glob/package.json @@ -2,7 +2,10 @@ "author": "Isaac Z. Schlueter (http://blog.izs.me/)", "name": "glob", "description": "a little globber", - "version": "7.2.0", + "version": "7.2.3", + "publishConfig": { + "tag": "v7-legacy" + }, "repository": { "type": "git", "url": "git://github.com/isaacs/node-glob.git" @@ -20,7 +23,7 @@ "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, diff --git a/deps/npm/node_modules/rimraf/node_modules/glob/sync.js b/deps/npm/node_modules/rimraf/node_modules/glob/sync.js index 4f46f90559a..2c4f480192d 100644 --- a/deps/npm/node_modules/rimraf/node_modules/glob/sync.js +++ b/deps/npm/node_modules/rimraf/node_modules/glob/sync.js @@ -48,7 +48,7 @@ function GlobSync (pattern, options) { } GlobSync.prototype._finish = function () { - assert(this instanceof GlobSync) + assert.ok(this instanceof GlobSync) if (this.realpath) { var self = this this.matches.forEach(function (matchset, index) { @@ -72,7 +72,7 @@ GlobSync.prototype._finish = function () { GlobSync.prototype._process = function (pattern, index, inGlobStar) { - assert(this instanceof GlobSync) + assert.ok(this instanceof GlobSync) // Get the first [n] parts of pattern that are all strings. var n = 0 @@ -109,7 +109,10 @@ GlobSync.prototype._process = function (pattern, index, inGlobStar) { var read if (prefix === null) read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + else if (isAbsolute(prefix) || + isAbsolute(pattern.map(function (p) { + return typeof p === 'string' ? p : '[*]' + }).join('/'))) { if (!prefix || !isAbsolute(prefix)) prefix = '/' + prefix read = prefix diff --git a/deps/npm/node_modules/safer-buffer/Readme.md b/deps/npm/node_modules/safer-buffer/Readme.md deleted file mode 100644 index 14b08229093..00000000000 --- a/deps/npm/node_modules/safer-buffer/Readme.md +++ /dev/null @@ -1,156 +0,0 @@ -# safer-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![javascript style guide][standard-image]][standard-url] [![Security Responsible Disclosure][secuirty-image]][secuirty-url] - -[travis-image]: https://travis-ci.org/ChALkeR/safer-buffer.svg?branch=master -[travis-url]: https://travis-ci.org/ChALkeR/safer-buffer -[npm-image]: https://img.shields.io/npm/v/safer-buffer.svg -[npm-url]: https://npmjs.org/package/safer-buffer -[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg -[standard-url]: https://standardjs.com -[secuirty-image]: https://img.shields.io/badge/Security-Responsible%20Disclosure-green.svg -[secuirty-url]: https://github.com/nodejs/security-wg/blob/master/processes/responsible_disclosure_template.md - -Modern Buffer API polyfill without footguns, working on Node.js from 0.8 to current. - -## How to use? - -First, port all `Buffer()` and `new Buffer()` calls to `Buffer.alloc()` and `Buffer.from()` API. - -Then, to achieve compatibility with outdated Node.js versions (`<4.5.0` and 5.x `<5.9.0`), use -`const Buffer = require('safer-buffer').Buffer` in all files where you make calls to the new -Buffer API. _Use `var` instead of `const` if you need that for your Node.js version range support._ - -Also, see the -[porting Buffer](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) guide. - -## Do I need it? - -Hopefully, not — dropping support for outdated Node.js versions should be fine nowdays, and that -is the recommended path forward. You _do_ need to port to the `Buffer.alloc()` and `Buffer.from()` -though. - -See the [porting guide](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) -for a better description. - -## Why not [safe-buffer](https://npmjs.com/safe-buffer)? - -_In short: while `safe-buffer` serves as a polyfill for the new API, it allows old API usage and -itself contains footguns._ - -`safe-buffer` could be used safely to get the new API while still keeping support for older -Node.js versions (like this module), but while analyzing ecosystem usage of the old Buffer API -I found out that `safe-buffer` is itself causing problems in some cases. - -For example, consider the following snippet: - -```console -$ cat example.unsafe.js -console.log(Buffer(20)) -$ ./node-v6.13.0-linux-x64/bin/node example.unsafe.js - -$ standard example.unsafe.js -standard: Use JavaScript Standard Style (https://standardjs.com) - /home/chalker/repo/safer-buffer/example.unsafe.js:2:13: 'Buffer()' was deprecated since v6. Use 'Buffer.alloc()' or 'Buffer.from()' (use 'https://www.npmjs.com/package/safe-buffer' for '<4.5.0') instead. -``` - -This is allocates and writes to console an uninitialized chunk of memory. -[standard](https://www.npmjs.com/package/standard) linter (among others) catch that and warn people -to avoid using unsafe API. - -Let's now throw in `safe-buffer`! - -```console -$ cat example.safe-buffer.js -const Buffer = require('safe-buffer').Buffer -console.log(Buffer(20)) -$ standard example.safe-buffer.js -$ ./node-v6.13.0-linux-x64/bin/node example.safe-buffer.js - -``` - -See the problem? Adding in `safe-buffer` _magically removes the lint warning_, but the behavior -remains identiсal to what we had before, and when launched on Node.js 6.x LTS — this dumps out -chunks of uninitialized memory. -_And this code will still emit runtime warnings on Node.js 10.x and above._ - -That was done by design. I first considered changing `safe-buffer`, prohibiting old API usage or -emitting warnings on it, but that significantly diverges from `safe-buffer` design. After some -discussion, it was decided to move my approach into a separate package, and _this is that separate -package_. - -This footgun is not imaginary — I observed top-downloaded packages doing that kind of thing, -«fixing» the lint warning by blindly including `safe-buffer` without any actual changes. - -Also in some cases, even if the API _was_ migrated to use of safe Buffer API — a random pull request -can bring unsafe Buffer API usage back to the codebase by adding new calls — and that could go -unnoticed even if you have a linter prohibiting that (becase of the reason stated above), and even -pass CI. _I also observed that being done in popular packages._ - -Some examples: - * [webdriverio](https://github.com/webdriverio/webdriverio/commit/05cbd3167c12e4930f09ef7cf93b127ba4effae4#diff-124380949022817b90b622871837d56cR31) - (a module with 548 759 downloads/month), - * [websocket-stream](https://github.com/maxogden/websocket-stream/commit/c9312bd24d08271687d76da0fe3c83493871cf61) - (218 288 d/m, fix in [maxogden/websocket-stream#142](https://github.com/maxogden/websocket-stream/pull/142)), - * [node-serialport](https://github.com/node-serialport/node-serialport/commit/e8d9d2b16c664224920ce1c895199b1ce2def48c) - (113 138 d/m, fix in [node-serialport/node-serialport#1510](https://github.com/node-serialport/node-serialport/pull/1510)), - * [karma](https://github.com/karma-runner/karma/commit/3d94b8cf18c695104ca195334dc75ff054c74eec) - (3 973 193 d/m, fix in [karma-runner/karma#2947](https://github.com/karma-runner/karma/pull/2947)), - * [spdy-transport](https://github.com/spdy-http2/spdy-transport/commit/5375ac33f4a62a4f65bcfc2827447d42a5dbe8b1) - (5 970 727 d/m, fix in [spdy-http2/spdy-transport#53](https://github.com/spdy-http2/spdy-transport/pull/53)). - * And there are a lot more over the ecosystem. - -I filed a PR at -[mysticatea/eslint-plugin-node#110](https://github.com/mysticatea/eslint-plugin-node/pull/110) to -partially fix that (for cases when that lint rule is used), but it is a semver-major change for -linter rules and presets, so it would take significant time for that to reach actual setups. -_It also hasn't been released yet (2018-03-20)._ - -Also, `safer-buffer` discourages the usage of `.allocUnsafe()`, which is often done by a mistake. -It still supports it with an explicit concern barier, by placing it under -`require('safer-buffer/dangereous')`. - -## But isn't throwing bad? - -Not really. It's an error that could be noticed and fixed early, instead of causing havoc later like -unguarded `new Buffer()` calls that end up receiving user input can do. - -This package affects only the files where `var Buffer = require('safer-buffer').Buffer` was done, so -it is really simple to keep track of things and make sure that you don't mix old API usage with that. -Also, CI should hint anything that you might have missed. - -New commits, if tested, won't land new usage of unsafe Buffer API this way. -_Node.js 10.x also deals with that by printing a runtime depecation warning._ - -### Would it affect third-party modules? - -No, unless you explicitly do an awful thing like monkey-patching or overriding the built-in `Buffer`. -Don't do that. - -### But I don't want throwing… - -That is also fine! - -Also, it could be better in some cases when you don't comprehensive enough test coverage. - -In that case — just don't override `Buffer` and use -`var SaferBuffer = require('safer-buffer').Buffer` instead. - -That way, everything using `Buffer` natively would still work, but there would be two drawbacks: - -* `Buffer.from`/`Buffer.alloc` won't be polyfilled — use `SaferBuffer.from` and - `SaferBuffer.alloc` instead. -* You are still open to accidentally using the insecure deprecated API — use a linter to catch that. - -Note that using a linter to catch accidential `Buffer` constructor usage in this case is strongly -recommended. `Buffer` is not overriden in this usecase, so linters won't get confused. - -## «Without footguns»? - -Well, it is still possible to do _some_ things with `Buffer` API, e.g. accessing `.buffer` property -on older versions and duping things from there. You shouldn't do that in your code, probabably. - -The intention is to remove the most significant footguns that affect lots of packages in the -ecosystem, and to do it in the proper way. - -Also, this package doesn't protect against security issues affecting some Node.js versions, so for -usage in your own production code, it is still recommended to update to a Node.js version -[supported by upstream](https://github.com/nodejs/release#release-schedule). diff --git a/deps/npm/node_modules/socks-proxy-agent/package.json b/deps/npm/node_modules/socks-proxy-agent/package.json index 268b8a5b187..aa2999969c1 100644 --- a/deps/npm/node_modules/socks-proxy-agent/package.json +++ b/deps/npm/node_modules/socks-proxy-agent/package.json @@ -2,7 +2,7 @@ "name": "socks-proxy-agent", "description": "A SOCKS proxy `http.Agent` implementation for HTTP and HTTPS", "homepage": "https://github.com/TooTallNate/node-socks-proxy-agent#readme", - "version": "6.2.0", + "version": "7.0.0", "main": "dist/index.js", "author": { "email": "nathan@tootallnate.net", @@ -38,6 +38,10 @@ "name": "Matheus Fernandes", "email": "matheus.frndes@gmail.com" }, + { + "name": "Ricky Miller", + "email": "richardkazuomiller@gmail.com" + }, { "name": "Shantanu Sharma", "email": "shantanu34@outlook.com" @@ -111,12 +115,12 @@ "@commitlint/config-conventional": "latest", "@types/debug": "latest", "@types/node": "latest", - "cacheable-lookup": "^6.0.4", + "cacheable-lookup": "latest", "conventional-github-releaser": "latest", - "dns2": "^2.0.1", + "dns2": "latest", "finepack": "latest", "git-authors-cli": "latest", - "mocha": "latest", + "mocha": "9", "nano-staged": "latest", "npm-check-updates": "latest", "prettier-standard": "latest", @@ -136,6 +140,22 @@ "files": [ "dist" ], + "scripts": { + "build": "tsc", + "clean": "rimraf node_modules", + "contributors": "(git-authors-cli && finepack && git add package.json && git commit -m 'build: contributors' --no-verify) || true", + "lint": "ts-standard", + "postrelease": "npm run release:tags && npm run release:github && (ci-publish || npm publish --access=public)", + "prebuild": "rimraf dist", + "prepublishOnly": "npm run build", + "prerelease": "npm run update:check && npm run contributors", + "release": "standard-version -a", + "release:github": "conventional-github-releaser -p angular", + "release:tags": "git push --follow-tags origin HEAD:master", + "test": "mocha --reporter spec", + "update": "ncu -u", + "update:check": "ncu -- --error-level 2" + }, "license": "MIT", "commitlint": { "extends": [ @@ -157,21 +177,5 @@ "commit-msg": "npx commitlint --edit", "pre-commit": "npx nano-staged" }, - "typings": "dist/index.d.ts", - "scripts": { - "build": "tsc", - "clean": "rimraf node_modules", - "contributors": "(git-authors-cli && finepack && git add package.json && git commit -m 'build: contributors' --no-verify) || true", - "lint": "ts-standard", - "postrelease": "npm run release:tags && npm run release:github && (ci-publish || npm publish --access=public)", - "prebuild": "rimraf dist", - "prerelease": "npm run update:check && npm run contributors", - "release": "standard-version -a", - "release:github": "conventional-github-releaser -p angular", - "release:tags": "git push --follow-tags origin HEAD:master", - "test": "mocha --reporter spec", - "update": "ncu -u", - "update:check": "ncu -- --error-level 2" - }, - "readme": "socks-proxy-agent\n================\n### A SOCKS proxy `http.Agent` implementation for HTTP and HTTPS\n[![Build Status](https://github.com/TooTallNate/node-socks-proxy-agent/workflows/Node%20CI/badge.svg)](https://github.com/TooTallNate/node-socks-proxy-agent/actions?workflow=Node+CI)\n\nThis module provides an `http.Agent` implementation that connects to a\nspecified SOCKS proxy server, and can be used with the built-in `http`\nand `https` modules.\n\nIt can also be used in conjunction with the `ws` module to establish a WebSocket\nconnection over a SOCKS proxy. See the \"Examples\" section below.\n\nInstallation\n------------\n\nInstall with `npm`:\n\n``` bash\nnpm install socks-proxy-agent\n```\n\n\nExamples\n--------\n\n#### TypeScript example\n\n```ts\nimport https from 'https';\nimport { SocksProxyAgent } from 'socks-proxy-agent';\n\nconst info = {\n\thostname: 'br41.nordvpn.com',\n\tuserId: 'your-name@gmail.com',\n\tpassword: 'abcdef12345124'\n};\nconst agent = new SocksProxyAgent(info);\n\nhttps.get('https://ipinfo.io', { agent }, (res) => {\n\tconsole.log(res.headers);\n\tres.pipe(process.stdout);\n});\n```\n\n#### `http` module example\n\n```js\nvar url = require('url');\nvar http = require('http');\nvar { SocksProxyAgent } = require('socks-proxy-agent');\n\n// SOCKS proxy to connect to\nvar proxy = process.env.socks_proxy || 'socks://127.0.0.1:1080';\nconsole.log('using proxy server %j', proxy);\n\n// HTTP endpoint for the proxy to connect to\nvar endpoint = process.argv[2] || 'http://nodejs.org/api/';\nconsole.log('attempting to GET %j', endpoint);\nvar opts = url.parse(endpoint);\n\n// create an instance of the `SocksProxyAgent` class with the proxy server information\nvar agent = new SocksProxyAgent(proxy);\nopts.agent = agent;\n\nhttp.get(opts, function (res) {\n\tconsole.log('\"response\" event!', res.headers);\n\tres.pipe(process.stdout);\n});\n```\n\n#### `https` module example\n\n```js\nvar url = require('url');\nvar https = require('https');\nvar { SocksProxyAgent } = require('socks-proxy-agent');\n\n// SOCKS proxy to connect to\nvar proxy = process.env.socks_proxy || 'socks://127.0.0.1:1080';\nconsole.log('using proxy server %j', proxy);\n\n// HTTP endpoint for the proxy to connect to\nvar endpoint = process.argv[2] || 'https://encrypted.google.com/';\nconsole.log('attempting to GET %j', endpoint);\nvar opts = url.parse(endpoint);\n\n// create an instance of the `SocksProxyAgent` class with the proxy server information\nvar agent = new SocksProxyAgent(proxy);\nopts.agent = agent;\n\nhttps.get(opts, function (res) {\n\tconsole.log('\"response\" event!', res.headers);\n\tres.pipe(process.stdout);\n});\n```\n\n#### `ws` WebSocket connection example\n\n``` js\nvar WebSocket = require('ws');\nvar { SocksProxyAgent } = require('socks-proxy-agent');\n\n// SOCKS proxy to connect to\nvar proxy = process.env.socks_proxy || 'socks://127.0.0.1:1080';\nconsole.log('using proxy server %j', proxy);\n\n// WebSocket endpoint for the proxy to connect to\nvar endpoint = process.argv[2] || 'ws://echo.websocket.org';\nconsole.log('attempting to connect to WebSocket %j', endpoint);\n\n// create an instance of the `SocksProxyAgent` class with the proxy server information\nvar agent = new SocksProxyAgent(proxy);\n\n// initiate the WebSocket connection\nvar socket = new WebSocket(endpoint, { agent: agent });\n\nsocket.on('open', function () {\n\tconsole.log('\"open\" event!');\n\tsocket.send('hello world');\n});\n\nsocket.on('message', function (data, flags) {\n\tconsole.log('\"message\" event! %j %j', data, flags);\n\tsocket.close();\n});\n```\n\nLicense\n-------\n\n(The MIT License)\n\nCopyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n" -} \ No newline at end of file + "typings": "dist/index.d.ts" +} diff --git a/deps/npm/node_modules/socks/build/client/socksclient.js b/deps/npm/node_modules/socks/build/client/socksclient.js index 40a82a53214..05da4baa4b0 100644 --- a/deps/npm/node_modules/socks/build/client/socksclient.js +++ b/deps/npm/node_modules/socks/build/client/socksclient.js @@ -45,6 +45,7 @@ class SocksClient extends events_1.EventEmitter { catch (err) { if (typeof callback === 'function') { callback(err); + // eslint-disable-next-line @typescript-eslint/no-explicit-any return resolve(err); // Resolves pending promise (prevents memory leaks). } else { @@ -68,6 +69,7 @@ class SocksClient extends events_1.EventEmitter { client.removeAllListeners(); if (typeof callback === 'function') { callback(err); + // eslint-disable-next-line @typescript-eslint/no-explicit-any resolve(err); // Resolves pending promise (prevents memory leaks). } else { @@ -86,6 +88,7 @@ class SocksClient extends events_1.EventEmitter { * @returns { Promise } */ static createConnectionChain(options, callback) { + // eslint-disable-next-line no-async-promise-executor return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { // Validate SocksClientChainOptions try { @@ -94,6 +97,7 @@ class SocksClient extends events_1.EventEmitter { catch (err) { if (typeof callback === 'function') { callback(err); + // eslint-disable-next-line @typescript-eslint/no-explicit-any return resolve(err); // Resolves pending promise (prevents memory leaks). } else { @@ -106,7 +110,6 @@ class SocksClient extends events_1.EventEmitter { (0, util_1.shuffleArray)(options.proxies); } try { - // tslint:disable-next-line:no-increment-decrement for (let i = 0; i < options.proxies.length; i++) { const nextProxy = options.proxies[i]; // If we've reached the last proxy in the chain, the destination is the actual destination, otherwise it's the next proxy. @@ -140,6 +143,7 @@ class SocksClient extends events_1.EventEmitter { catch (err) { if (typeof callback === 'function') { callback(err); + // eslint-disable-next-line @typescript-eslint/no-explicit-any resolve(err); // Resolves pending promise (prevents memory leaks). } else { diff --git a/deps/npm/node_modules/socks/build/client/socksclient.js.map b/deps/npm/node_modules/socks/build/client/socksclient.js.map index 15d0b565ac3..b39f3add4cb 100644 --- a/deps/npm/node_modules/socks/build/client/socksclient.js.map +++ b/deps/npm/node_modules/socks/build/client/socksclient.js.map @@ -1 +1 @@ -{"version":3,"file":"socksclient.js","sourceRoot":"","sources":["../../src/client/socksclient.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAoC;AACpC,2BAA2B;AAC3B,yBAAyB;AACzB,+CAAyC;AACzC,mDAkB6B;AAC7B,+CAG2B;AAC3B,2DAAsD;AACtD,yCAA8D;AAg7B5D,iGAh7BM,uBAAgB,OAg7BN;AAt5BlB,MAAM,WAAY,SAAQ,qBAAY;IAgBpC,YAAY,OAA2B;QACrC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,qBACP,OAAO,CACX,CAAC;QAEF,8BAA8B;QAC9B,IAAA,oCAA0B,EAAC,OAAO,CAAC,CAAC;QAEpC,gBAAgB;QAChB,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,gBAAgB,CACrB,OAA2B,EAC3B,QAAmB;QAEnB,OAAO,IAAI,OAAO,CAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClE,8BAA8B;YAC9B,IAAI;gBACF,IAAA,oCAA0B,EAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;aAClD;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACd,OAAO,OAAO,CAAC,GAAU,CAAC,CAAC,CAAC,oDAAoD;iBACjF;qBAAM;oBACL,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;iBACpB;aACF;YAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAiC,EAAE,EAAE;gBAC/D,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,oDAAoD;iBACpE;qBAAM;oBACL,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;YACH,CAAC,CAAC,CAAC;YAEH,kDAAkD;YAClD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBAClC,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACd,OAAO,CAAC,GAAU,CAAC,CAAC,CAAC,oDAAoD;iBAC1E;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,CAAC;iBACb;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,qBAAqB,CAC1B,OAAgC,EAChC,QAAmB;QAEnB,OAAO,IAAI,OAAO,CAA8B,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YACxE,mCAAmC;YACnC,IAAI;gBACF,IAAA,yCAA+B,EAAC,OAAO,CAAC,CAAC;aAC1C;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACd,OAAO,OAAO,CAAC,GAAU,CAAC,CAAC,CAAC,oDAAoD;iBACjF;qBAAM;oBACL,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;iBACpB;aACF;YAED,IAAI,IAAgB,CAAC;YAErB,kBAAkB;YAClB,IAAI,OAAO,CAAC,cAAc,EAAE;gBAC1B,IAAA,mBAAY,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aAC/B;YAED,IAAI;gBACF,kDAAkD;gBAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAErC,0HAA0H;oBAC1H,MAAM,eAAe,GACnB,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;wBAC9B,CAAC,CAAC,OAAO,CAAC,WAAW;wBACrB,CAAC,CAAC;4BACE,IAAI,EACF,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;gCAC3B,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;4BAClC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;yBAClC,CAAC;oBAER,4CAA4C;oBAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC;wBAChD,OAAO,EAAE,SAAS;wBAClB,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,eAAe;wBAC5B,8HAA8H;qBAC/H,CAAC,CAAC;oBAEH,wCAAwC;oBACxC,IAAI,CAAC,IAAI,EAAE;wBACT,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;qBACtB;iBACF;gBAED,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,IAAI,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;oBAC/B,OAAO,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,oDAAoD;iBAC9E;qBAAM;oBACL,OAAO,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;iBACzB;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACd,OAAO,CAAC,GAAU,CAAC,CAAC,CAAC,oDAAoD;iBAC1E;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,CAAC;iBACb;aACF;QACH,CAAC,CAAA,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,OAA6B;QACjD,MAAM,IAAI,GAAG,IAAI,0BAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QAE1C,qBAAqB;QACrB,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACvC,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;SACxD;aAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;SACxD;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC3C;QAED,OAAO;QACP,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE5C,OAAO;QACP,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE/B,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,IAAY;QAC/B,MAAM,IAAI,GAAG,0BAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAEpB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAmB,IAAI,CAAC,SAAS,EAAE,CAAC;QAClD,IAAI,UAAU,CAAC;QAEf,IAAI,QAAQ,KAAK,0BAAc,CAAC,IAAI,EAAE;YACpC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;SAC/C;aAAM,IAAI,QAAQ,KAAK,0BAAc,CAAC,IAAI,EAAE;YAC3C,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/C;aAAM;YACL,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;SAChD;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEvC,OAAO;YACL,WAAW;YACX,UAAU,EAAE;gBACV,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,UAAU;aACjB;YACD,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,QAA0B;QACzC,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,KAAK,EAAE;YACzC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;SACvB;IACH,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,cAAuB;QACpC,IAAI,CAAC,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE/C,+CAA+C;QAC/C,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EACjC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,2BAAe,CACxC,CAAC;QAEF,8EAA8E;QAC9E,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE;YACpD,KAAK,CAAC,KAAK,EAAE,CAAC;SACf;QAED,yGAAyG;QACzG,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;SAC9B;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;SAChC;QAED,gCAAgC;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,6BAAa,EAAE,CAAC;QAEzC,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B;aAAM;YACJ,IAAI,CAAC,MAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAE7D,IACE,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;gBAC1C,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI,EACrC;gBACC,IAAI,CAAC,MAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;aACxE;SACF;QAED,6FAA6F;QAC7F,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/C,YAAY,CAAC,GAAG,EAAE;gBAChB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;oBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBAErE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;iBACtC;gBACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IACvE,gBAAgB;QACtB,uCACK,IAAI,CAAC,OAAO,CAAC,cAAc,KAC9B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAC7D,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAC7B;IACJ,CAAC;IAED;;;OAGG;IACK,oBAAoB;QAC1B,IACE,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,WAAW;YAC3C,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,yBAAyB,EACzD;YACA,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,uBAAuB,CAAC,CAAC;SAClD;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,SAAS,CAAC,CAAC;QAE1C,0BAA0B;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;YACjC,IAAI,CAAC,0BAA0B,EAAE,CAAC;SACnC;aAAM;YACL,IAAI,CAAC,0BAA0B,EAAE,CAAC;SACnC;QAED,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,oBAAoB,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACK,qBAAqB,CAAC,IAAY;QACxC;;;UAGE;QACF,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhC,6BAA6B;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,mFAAmF;QACnF,OACE,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,WAAW;YAC3C,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,KAAK;YACrC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,4BAA4B,EAC9D;YACA,gDAAgD;YAChD,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,oBAAoB,EAAE;gBACxD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;oBACjC,4CAA4C;oBAC5C,IAAI,CAAC,kCAAkC,EAAE,CAAC;iBAC3C;qBAAM;oBACL,wDAAwD;oBACxD,IAAI,CAAC,oCAAoC,EAAE,CAAC;iBAC7C;gBACD,wDAAwD;aACzD;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,kBAAkB,EAAE;gBAC7D,IAAI,CAAC,kDAAkD,EAAE,CAAC;gBAC1D,6DAA6D;aAC9D;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,kBAAkB,EAAE;gBAC7D,IAAI,CAAC,kCAAkC,EAAE,CAAC;gBAC1C,mEAAmE;aACpE;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,yBAAyB,EAAE;gBACpE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;oBACjC,IAAI,CAAC,sCAAsC,EAAE,CAAC;iBAC/C;qBAAM;oBACL,IAAI,CAAC,sCAAsC,EAAE,CAAC;iBAC/C;aACF;iBAAM;gBACL,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,aAAa,CAAC,CAAC;gBACvC,MAAM;aACP;SACF;IACH,CAAC;IAED;;;OAGG;IACK,cAAc;QACpB,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,GAAU;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,4BAA4B;QAClC,6FAA6F;QAC7F,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,GAAW;QAC7B,2FAA2F;QAC3F,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,KAAK,EAAE;YACzC,+BAA+B;YAC/B,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,KAAK,CAAC,CAAC;YAEtC,iBAAiB;YACjB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAEtB,4BAA4B;YAC5B,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAEpC,sBAAsB;YACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,uBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;SAC7D;IACH,CAAC;IAED;;OAEG;IACK,0BAA0B;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAE/C,MAAM,IAAI,GAAG,IAAI,0BAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAElD,iBAAiB;QACjB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC7C,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC3B,sBAAsB;SACvB;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACnD;QAED,IAAI,CAAC,4BAA4B;YAC/B,uCAA2B,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACK,kCAAkC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,0BAAc,CAAC,OAAO,EAAE;YACtC,IAAI,CAAC,WAAW,CACd,GAAG,kBAAM,CAAC,6BAA6B,OACrC,0BAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CACxB,GAAG,CACJ,CAAC;SACH;aAAM;YACL,gBAAgB;YAChB,IAAI,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,wBAAY,CAAC,IAAI,EAAE;gBAC5D,MAAM,IAAI,GAAG,0BAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBAEpB,MAAM,UAAU,GAAoB;oBAClC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;oBACzB,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;iBACvC,CAAC;gBAEF,yCAAyC;gBACzC,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;oBACjC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;iBAChD;gBACD,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,yBAAyB,CAAC,CAAC;gBAC1D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;gBAEtD,mBAAmB;aACpB;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,WAAW,CAAC,CAAC;gBAC5C,IAAI,CAAC,4BAA4B,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;aACjD;SACF;IACH,CAAC;IAED;;;OAGG;IACK,sCAAsC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,0BAAc,CAAC,OAAO,EAAE;YACtC,IAAI,CAAC,WAAW,CACd,GAAG,kBAAM,CAAC,0CAA0C,OAClD,0BAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CACxB,GAAG,CACJ,CAAC;SACH;aAAM;YACL,MAAM,IAAI,GAAG,0BAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YAEpB,MAAM,UAAU,GAAoB;gBAClC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;gBACzB,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;aACvC,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,WAAW,CAAC,CAAC;YAC5C,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;SAC7D;IACH,CAAC;IAED;;OAEG;IACK,0BAA0B;QAChC,MAAM,IAAI,GAAG,IAAI,0BAAW,EAAE,CAAC;QAE/B,wCAAwC;QACxC,MAAM,oBAAoB,GAAG,CAAC,sBAAU,CAAC,MAAM,CAAC,CAAC;QAEjD,6FAA6F;QAC7F,sHAAsH;QACtH,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5D,oBAAoB,CAAC,IAAI,CAAC,sBAAU,CAAC,QAAQ,CAAC,CAAC;SAChD;QAED,sBAAsB;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,SAAS,EAAE;YACvD,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;SAClE;QAED,yBAAyB;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,MAAM,UAAU,IAAI,oBAAoB,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SAC7B;QAED,IAAI,CAAC,4BAA4B;YAC/B,uCAA2B,CAAC,8BAA8B,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,oBAAoB,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACK,oCAAoC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,yCAAyC,CAAC,CAAC;SACpE;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,qCAAyB,EAAE;YAChD,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,+CAA+C,CAAC,CAAC;SAC1E;aAAM;YACL,6EAA6E;YAC7E,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,sBAAU,CAAC,MAAM,EAAE;gBACjC,IAAI,CAAC,oBAAoB,GAAG,sBAAU,CAAC,MAAM,CAAC;gBAC9C,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAChC,0EAA0E;aAC3E;iBAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,sBAAU,CAAC,QAAQ,EAAE;gBAC1C,IAAI,CAAC,oBAAoB,GAAG,sBAAU,CAAC,QAAQ,CAAC;gBAChD,IAAI,CAAC,gCAAgC,EAAE,CAAC;gBACxC,qFAAqF;aACtF;iBAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE;gBAC5D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;gBAClE,IAAI,CAAC,8BAA8B,EAAE,CAAC;aACvC;iBAAM;gBACL,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,4CAA4C,CAAC,CAAC;aACvE;SACF;IACH,CAAC;IAED;;;;OAIG;IACK,gCAAgC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QAEnD,MAAM,IAAI,GAAG,IAAI,0BAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE3B,IAAI,CAAC,4BAA4B;YAC/B,uCAA2B,CAAC,oCAAoC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,kBAAkB,CAAC,CAAC;IACrD,CAAC;IAEa,8BAA8B;;YAC1C,IAAI,CAAC,4BAA4B;gBAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC;KAAA;IAEa,uCAAuC,CAAC,IAAY;;YAChE,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC;KAAA;IAEa,iDAAiD,CAC7D,IAAY;;YAEZ,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAC1B,CAAC;KAAA;IAEa,mDAAmD,CAC/D,IAAY;;YAEZ,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAC1B,CAAC;KAAA;IAED;;;OAGG;IACW,kDAAkD;;YAC9D,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,8BAA8B,CAAC,CAAC;YAE/D,IAAI,UAAU,GAAY,KAAK,CAAC;YAEhC,IAAI,IAAI,CAAC,oBAAoB,KAAK,sBAAU,CAAC,MAAM,EAAE;gBACnD,UAAU,GAAG,MAAM,IAAI,CAAC,iDAAiD,CACvE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAC1B,CAAC;aACH;iBAAM,IAAI,IAAI,CAAC,oBAAoB,KAAK,sBAAU,CAAC,QAAQ,EAAE;gBAC5D,UAAU;oBACR,MAAM,IAAI,CAAC,mDAAmD,CAC5D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAC1B,CAAC;aACL;iBAAM,IACL,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EACnE;gBACA,UAAU,GAAG,MAAM,IAAI,CAAC,uCAAuC,CAC7D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CACrE,CAAC;aACH;YAED,IAAI,CAAC,UAAU,EAAE;gBACf,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,0BAA0B,CAAC,CAAC;aACrD;iBAAM;gBACL,IAAI,CAAC,wBAAwB,EAAE,CAAC;aACjC;QACH,CAAC;KAAA;IAED;;OAEG;IACK,wBAAwB;QAC9B,MAAM,IAAI,GAAG,IAAI,0BAAW,EAAE,CAAC;QAE/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEtB,sBAAsB;QACtB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;SAC9D;aAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACpD,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;SAC9D;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAElD,IAAI,CAAC,4BAA4B;YAC/B,uCAA2B,CAAC,oBAAoB,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,kBAAkB,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACK,kCAAkC;QACxC,+EAA+E;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE1C,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,0BAAc,CAAC,OAAO,EAAE;YAC9D,IAAI,CAAC,WAAW,CACd,GAAG,kBAAM,CAAC,mCAAmC,MAC3C,0BAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAC1B,EAAE,CACH,CAAC;SACH;aAAM;YACL,oBAAoB;YACpB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAE9B,IAAI,UAA2B,CAAC;YAChC,IAAI,IAAiB,CAAC;YAEtB,OAAO;YACP,IAAI,WAAW,KAAK,0BAAc,CAAC,IAAI,EAAE;gBACvC,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,uCAA2B,CAAC,kBAAkB,CAAC;gBAClE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;gBAEF,4DAA4D;gBAC5D,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;oBACjC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;iBAChD;gBAED,WAAW;aACZ;iBAAM,IAAI,WAAW,KAAK,0BAAc,CAAC,QAAQ,EAAE;gBAClD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,UAAU,GACd,uCAA2B,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,qCAAqC;gBAEvG,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;oBACjC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;gBACF,OAAO;aACR;iBAAM,IAAI,WAAW,KAAK,0BAAc,CAAC,IAAI,EAAE;gBAC9C,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,uCAA2B,CAAC,kBAAkB,CAAC;gBAClE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;aACH;YAED,6BAA6B;YAC7B,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,qBAAqB,CAAC,CAAC;YAEtD,gEAAgE;YAChE,IAAI,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,wBAAY,CAAC,OAAO,EAAE;gBAC/D,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,WAAW,CAAC,CAAC;gBAC5C,IAAI,CAAC,4BAA4B,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;aAC7D;iBAAM,IAAI,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,wBAAY,CAAC,IAAI,EAAE;gBACnE;mHACmG;gBACnG,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,yBAAyB,CAAC,CAAC;gBAC1D,IAAI,CAAC,4BAA4B;oBAC/B,uCAA2B,CAAC,oBAAoB,CAAC;gBACnD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;gBACtD;;;kBAGE;aACH;iBAAM,IACL,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,wBAAY,CAAC,SAAS,EAC7D;gBACA,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,WAAW,CAAC,CAAC;gBAC5C,IAAI,CAAC,4BAA4B,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACvB,UAAU;oBACV,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;aACJ;SACF;IACH,CAAC;IAED;;OAEG;IACK,sCAAsC;QAC5C,+EAA+E;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE1C,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,0BAAc,CAAC,OAAO,EAAE;YAC9D,IAAI,CAAC,WAAW,CACd,GAAG,kBAAM,CAAC,0CAA0C,MAClD,0BAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAC1B,EAAE,CACH,CAAC;SACH;aAAM;YACL,oBAAoB;YACpB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAE9B,IAAI,UAA2B,CAAC;YAChC,IAAI,IAAiB,CAAC;YAEtB,OAAO;YACP,IAAI,WAAW,KAAK,0BAAc,CAAC,IAAI,EAAE;gBACvC,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,uCAA2B,CAAC,kBAAkB,CAAC;gBAClE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;gBAEF,4DAA4D;gBAC5D,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;oBACjC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;iBAChD;gBAED,WAAW;aACZ;iBAAM,IAAI,WAAW,KAAK,0BAAc,CAAC,QAAQ,EAAE;gBAClD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,UAAU,GACd,uCAA2B,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,8BAA8B;gBAEhG,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;oBACjC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;gBACF,OAAO;aACR;iBAAM,IAAI,WAAW,KAAK,0BAAc,CAAC,IAAI,EAAE;gBAC9C,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,uCAA2B,CAAC,kBAAkB,CAAC;gBAClE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;aACH;YAED,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,WAAW,CAAC,CAAC;YAC5C,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;SAC7D;IACH,CAAC;IAED,IAAI,kBAAkB;QACpB,yBACK,IAAI,CAAC,OAAO,EACf;IACJ,CAAC;CACF;AAGC,kCAAW"} \ No newline at end of file +{"version":3,"file":"socksclient.js","sourceRoot":"","sources":["../../src/client/socksclient.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAoC;AACpC,2BAA2B;AAC3B,yBAAyB;AACzB,+CAAyC;AACzC,mDAkB6B;AAC7B,+CAG2B;AAC3B,2DAAsD;AACtD,yCAA8D;AA07B5D,iGA17BM,uBAAgB,OA07BN;AAh6BlB,MAAM,WAAY,SAAQ,qBAAY;IAgBpC,YAAY,OAA2B;QACrC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,qBACP,OAAO,CACX,CAAC;QAEF,8BAA8B;QAC9B,IAAA,oCAA0B,EAAC,OAAO,CAAC,CAAC;QAEpC,gBAAgB;QAChB,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,gBAAgB,CACrB,OAA2B,EAC3B,QAGS;QAET,OAAO,IAAI,OAAO,CAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClE,8BAA8B;YAC9B,IAAI;gBACF,IAAA,oCAA0B,EAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;aAClD;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACd,8DAA8D;oBAC9D,OAAO,OAAO,CAAC,GAAU,CAAC,CAAC,CAAC,oDAAoD;iBACjF;qBAAM;oBACL,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;iBACpB;aACF;YAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAiC,EAAE,EAAE;gBAC/D,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,oDAAoD;iBACpE;qBAAM;oBACL,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;YACH,CAAC,CAAC,CAAC;YAEH,kDAAkD;YAClD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBAClC,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACd,8DAA8D;oBAC9D,OAAO,CAAC,GAAU,CAAC,CAAC,CAAC,oDAAoD;iBAC1E;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,CAAC;iBACb;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,qBAAqB,CAC1B,OAAgC,EAChC,QAGS;QAET,qDAAqD;QACrD,OAAO,IAAI,OAAO,CAA8B,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YACxE,mCAAmC;YACnC,IAAI;gBACF,IAAA,yCAA+B,EAAC,OAAO,CAAC,CAAC;aAC1C;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACd,8DAA8D;oBAC9D,OAAO,OAAO,CAAC,GAAU,CAAC,CAAC,CAAC,oDAAoD;iBACjF;qBAAM;oBACL,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;iBACpB;aACF;YAED,IAAI,IAAgB,CAAC;YAErB,kBAAkB;YAClB,IAAI,OAAO,CAAC,cAAc,EAAE;gBAC1B,IAAA,mBAAY,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aAC/B;YAED,IAAI;gBACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAErC,0HAA0H;oBAC1H,MAAM,eAAe,GACnB,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;wBAC9B,CAAC,CAAC,OAAO,CAAC,WAAW;wBACrB,CAAC,CAAC;4BACE,IAAI,EACF,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;gCAC3B,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;4BAClC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;yBAClC,CAAC;oBAER,4CAA4C;oBAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC;wBAChD,OAAO,EAAE,SAAS;wBAClB,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,eAAe;wBAC5B,8HAA8H;qBAC/H,CAAC,CAAC;oBAEH,wCAAwC;oBACxC,IAAI,CAAC,IAAI,EAAE;wBACT,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;qBACtB;iBACF;gBAED,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,IAAI,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;oBAC/B,OAAO,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,oDAAoD;iBAC9E;qBAAM;oBACL,OAAO,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;iBACzB;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACd,8DAA8D;oBAC9D,OAAO,CAAC,GAAU,CAAC,CAAC,CAAC,oDAAoD;iBAC1E;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,CAAC;iBACb;aACF;QACH,CAAC,CAAA,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,OAA6B;QACjD,MAAM,IAAI,GAAG,IAAI,0BAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QAE1C,qBAAqB;QACrB,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACvC,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;SACxD;aAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;SACxD;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC3C;QAED,OAAO;QACP,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE5C,OAAO;QACP,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE/B,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,IAAY;QAC/B,MAAM,IAAI,GAAG,0BAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAEpB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAmB,IAAI,CAAC,SAAS,EAAE,CAAC;QAClD,IAAI,UAAU,CAAC;QAEf,IAAI,QAAQ,KAAK,0BAAc,CAAC,IAAI,EAAE;YACpC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;SAC/C;aAAM,IAAI,QAAQ,KAAK,0BAAc,CAAC,IAAI,EAAE;YAC3C,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/C;aAAM;YACL,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;SAChD;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEvC,OAAO;YACL,WAAW;YACX,UAAU,EAAE;gBACV,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,UAAU;aACjB;YACD,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,QAA0B;QACzC,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,KAAK,EAAE;YACzC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;SACvB;IACH,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,cAAuB;QACpC,IAAI,CAAC,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE/C,+CAA+C;QAC/C,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EACjC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,2BAAe,CACxC,CAAC;QAEF,8EAA8E;QAC9E,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE;YACpD,KAAK,CAAC,KAAK,EAAE,CAAC;SACf;QAED,yGAAyG;QACzG,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;SAC9B;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;SAChC;QAED,gCAAgC;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,6BAAa,EAAE,CAAC;QAEzC,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B;aAAM;YACJ,IAAI,CAAC,MAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAE7D,IACE,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;gBAC1C,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI,EACrC;gBACC,IAAI,CAAC,MAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;aACxE;SACF;QAED,6FAA6F;QAC7F,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/C,YAAY,CAAC,GAAG,EAAE;gBAChB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;oBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBAErE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;iBACtC;gBACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IACvE,gBAAgB;QACtB,uCACK,IAAI,CAAC,OAAO,CAAC,cAAc,KAC9B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAC7D,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAC7B;IACJ,CAAC;IAED;;;OAGG;IACK,oBAAoB;QAC1B,IACE,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,WAAW;YAC3C,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,yBAAyB,EACzD;YACA,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,uBAAuB,CAAC,CAAC;SAClD;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,SAAS,CAAC,CAAC;QAE1C,0BAA0B;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;YACjC,IAAI,CAAC,0BAA0B,EAAE,CAAC;SACnC;aAAM;YACL,IAAI,CAAC,0BAA0B,EAAE,CAAC;SACnC;QAED,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,oBAAoB,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACK,qBAAqB,CAAC,IAAY;QACxC;;;UAGE;QACF,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhC,6BAA6B;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,mFAAmF;QACnF,OACE,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,WAAW;YAC3C,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,KAAK;YACrC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,4BAA4B,EAC9D;YACA,gDAAgD;YAChD,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,oBAAoB,EAAE;gBACxD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;oBACjC,4CAA4C;oBAC5C,IAAI,CAAC,kCAAkC,EAAE,CAAC;iBAC3C;qBAAM;oBACL,wDAAwD;oBACxD,IAAI,CAAC,oCAAoC,EAAE,CAAC;iBAC7C;gBACD,wDAAwD;aACzD;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,kBAAkB,EAAE;gBAC7D,IAAI,CAAC,kDAAkD,EAAE,CAAC;gBAC1D,6DAA6D;aAC9D;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,kBAAkB,EAAE;gBAC7D,IAAI,CAAC,kCAAkC,EAAE,CAAC;gBAC1C,mEAAmE;aACpE;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,yBAAyB,EAAE;gBACpE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;oBACjC,IAAI,CAAC,sCAAsC,EAAE,CAAC;iBAC/C;qBAAM;oBACL,IAAI,CAAC,sCAAsC,EAAE,CAAC;iBAC/C;aACF;iBAAM;gBACL,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,aAAa,CAAC,CAAC;gBACvC,MAAM;aACP;SACF;IACH,CAAC;IAED;;;OAGG;IACK,cAAc;QACpB,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,GAAU;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,4BAA4B;QAClC,6FAA6F;QAC7F,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,GAAW;QAC7B,2FAA2F;QAC3F,IAAI,IAAI,CAAC,KAAK,KAAK,4BAAgB,CAAC,KAAK,EAAE;YACzC,+BAA+B;YAC/B,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,KAAK,CAAC,CAAC;YAEtC,iBAAiB;YACjB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAEtB,4BAA4B;YAC5B,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAEpC,sBAAsB;YACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,uBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;SAC7D;IACH,CAAC;IAED;;OAEG;IACK,0BAA0B;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAE/C,MAAM,IAAI,GAAG,IAAI,0BAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAElD,iBAAiB;QACjB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC7C,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC3B,sBAAsB;SACvB;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACnD;QAED,IAAI,CAAC,4BAA4B;YAC/B,uCAA2B,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACK,kCAAkC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,0BAAc,CAAC,OAAO,EAAE;YACtC,IAAI,CAAC,WAAW,CACd,GAAG,kBAAM,CAAC,6BAA6B,OACrC,0BAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CACxB,GAAG,CACJ,CAAC;SACH;aAAM;YACL,gBAAgB;YAChB,IAAI,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,wBAAY,CAAC,IAAI,EAAE;gBAC5D,MAAM,IAAI,GAAG,0BAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBAEpB,MAAM,UAAU,GAAoB;oBAClC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;oBACzB,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;iBACvC,CAAC;gBAEF,yCAAyC;gBACzC,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;oBACjC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;iBAChD;gBACD,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,yBAAyB,CAAC,CAAC;gBAC1D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;gBAEtD,mBAAmB;aACpB;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,WAAW,CAAC,CAAC;gBAC5C,IAAI,CAAC,4BAA4B,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;aACjD;SACF;IACH,CAAC;IAED;;;OAGG;IACK,sCAAsC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,0BAAc,CAAC,OAAO,EAAE;YACtC,IAAI,CAAC,WAAW,CACd,GAAG,kBAAM,CAAC,0CAA0C,OAClD,0BAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CACxB,GAAG,CACJ,CAAC;SACH;aAAM;YACL,MAAM,IAAI,GAAG,0BAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YAEpB,MAAM,UAAU,GAAoB;gBAClC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;gBACzB,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;aACvC,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,WAAW,CAAC,CAAC;YAC5C,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;SAC7D;IACH,CAAC;IAED;;OAEG;IACK,0BAA0B;QAChC,MAAM,IAAI,GAAG,IAAI,0BAAW,EAAE,CAAC;QAE/B,wCAAwC;QACxC,MAAM,oBAAoB,GAAG,CAAC,sBAAU,CAAC,MAAM,CAAC,CAAC;QAEjD,6FAA6F;QAC7F,sHAAsH;QACtH,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5D,oBAAoB,CAAC,IAAI,CAAC,sBAAU,CAAC,QAAQ,CAAC,CAAC;SAChD;QAED,sBAAsB;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,SAAS,EAAE;YACvD,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;SAClE;QAED,yBAAyB;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,MAAM,UAAU,IAAI,oBAAoB,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SAC7B;QAED,IAAI,CAAC,4BAA4B;YAC/B,uCAA2B,CAAC,8BAA8B,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,oBAAoB,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACK,oCAAoC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,yCAAyC,CAAC,CAAC;SACpE;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,qCAAyB,EAAE;YAChD,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,+CAA+C,CAAC,CAAC;SAC1E;aAAM;YACL,6EAA6E;YAC7E,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,sBAAU,CAAC,MAAM,EAAE;gBACjC,IAAI,CAAC,oBAAoB,GAAG,sBAAU,CAAC,MAAM,CAAC;gBAC9C,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAChC,0EAA0E;aAC3E;iBAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,sBAAU,CAAC,QAAQ,EAAE;gBAC1C,IAAI,CAAC,oBAAoB,GAAG,sBAAU,CAAC,QAAQ,CAAC;gBAChD,IAAI,CAAC,gCAAgC,EAAE,CAAC;gBACxC,qFAAqF;aACtF;iBAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE;gBAC5D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;gBAClE,IAAI,CAAC,8BAA8B,EAAE,CAAC;aACvC;iBAAM;gBACL,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,4CAA4C,CAAC,CAAC;aACvE;SACF;IACH,CAAC;IAED;;;;OAIG;IACK,gCAAgC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QAEnD,MAAM,IAAI,GAAG,IAAI,0BAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE3B,IAAI,CAAC,4BAA4B;YAC/B,uCAA2B,CAAC,oCAAoC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,kBAAkB,CAAC,CAAC;IACrD,CAAC;IAEa,8BAA8B;;YAC1C,IAAI,CAAC,4BAA4B;gBAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC;KAAA;IAEa,uCAAuC,CAAC,IAAY;;YAChE,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC;KAAA;IAEa,iDAAiD,CAC7D,IAAY;;YAEZ,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAC1B,CAAC;KAAA;IAEa,mDAAmD,CAC/D,IAAY;;YAEZ,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAC1B,CAAC;KAAA;IAED;;;OAGG;IACW,kDAAkD;;YAC9D,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,8BAA8B,CAAC,CAAC;YAE/D,IAAI,UAAU,GAAG,KAAK,CAAC;YAEvB,IAAI,IAAI,CAAC,oBAAoB,KAAK,sBAAU,CAAC,MAAM,EAAE;gBACnD,UAAU,GAAG,MAAM,IAAI,CAAC,iDAAiD,CACvE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAC1B,CAAC;aACH;iBAAM,IAAI,IAAI,CAAC,oBAAoB,KAAK,sBAAU,CAAC,QAAQ,EAAE;gBAC5D,UAAU;oBACR,MAAM,IAAI,CAAC,mDAAmD,CAC5D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAC1B,CAAC;aACL;iBAAM,IACL,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EACnE;gBACA,UAAU,GAAG,MAAM,IAAI,CAAC,uCAAuC,CAC7D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CACrE,CAAC;aACH;YAED,IAAI,CAAC,UAAU,EAAE;gBACf,IAAI,CAAC,WAAW,CAAC,kBAAM,CAAC,0BAA0B,CAAC,CAAC;aACrD;iBAAM;gBACL,IAAI,CAAC,wBAAwB,EAAE,CAAC;aACjC;QACH,CAAC;KAAA;IAED;;OAEG;IACK,wBAAwB;QAC9B,MAAM,IAAI,GAAG,IAAI,0BAAW,EAAE,CAAC;QAE/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEtB,sBAAsB;QACtB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;SAC9D;aAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACpD,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;SAC9D;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,0BAAc,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAElD,IAAI,CAAC,4BAA4B;YAC/B,uCAA2B,CAAC,oBAAoB,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,kBAAkB,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACK,kCAAkC;QACxC,+EAA+E;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE1C,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,0BAAc,CAAC,OAAO,EAAE;YAC9D,IAAI,CAAC,WAAW,CACd,GAAG,kBAAM,CAAC,mCAAmC,MAC3C,0BAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAC1B,EAAE,CACH,CAAC;SACH;aAAM;YACL,oBAAoB;YACpB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAE9B,IAAI,UAA2B,CAAC;YAChC,IAAI,IAAiB,CAAC;YAEtB,OAAO;YACP,IAAI,WAAW,KAAK,0BAAc,CAAC,IAAI,EAAE;gBACvC,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,uCAA2B,CAAC,kBAAkB,CAAC;gBAClE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;gBAEF,4DAA4D;gBAC5D,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;oBACjC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;iBAChD;gBAED,WAAW;aACZ;iBAAM,IAAI,WAAW,KAAK,0BAAc,CAAC,QAAQ,EAAE;gBAClD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,UAAU,GACd,uCAA2B,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,qCAAqC;gBAEvG,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;oBACjC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;gBACF,OAAO;aACR;iBAAM,IAAI,WAAW,KAAK,0BAAc,CAAC,IAAI,EAAE;gBAC9C,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,uCAA2B,CAAC,kBAAkB,CAAC;gBAClE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;aACH;YAED,6BAA6B;YAC7B,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,qBAAqB,CAAC,CAAC;YAEtD,gEAAgE;YAChE,IAAI,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,wBAAY,CAAC,OAAO,EAAE;gBAC/D,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,WAAW,CAAC,CAAC;gBAC5C,IAAI,CAAC,4BAA4B,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;aAC7D;iBAAM,IAAI,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,wBAAY,CAAC,IAAI,EAAE;gBACnE;mHACmG;gBACnG,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,yBAAyB,CAAC,CAAC;gBAC1D,IAAI,CAAC,4BAA4B;oBAC/B,uCAA2B,CAAC,oBAAoB,CAAC;gBACnD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;gBACtD;;;kBAGE;aACH;iBAAM,IACL,wBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,wBAAY,CAAC,SAAS,EAC7D;gBACA,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,WAAW,CAAC,CAAC;gBAC5C,IAAI,CAAC,4BAA4B,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACvB,UAAU;oBACV,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;aACJ;SACF;IACH,CAAC;IAED;;OAEG;IACK,sCAAsC;QAC5C,+EAA+E;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE1C,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,0BAAc,CAAC,OAAO,EAAE;YAC9D,IAAI,CAAC,WAAW,CACd,GAAG,kBAAM,CAAC,0CAA0C,MAClD,0BAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAC1B,EAAE,CACH,CAAC;SACH;aAAM;YACL,oBAAoB;YACpB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAE9B,IAAI,UAA2B,CAAC;YAChC,IAAI,IAAiB,CAAC;YAEtB,OAAO;YACP,IAAI,WAAW,KAAK,0BAAc,CAAC,IAAI,EAAE;gBACvC,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,uCAA2B,CAAC,kBAAkB,CAAC;gBAClE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;gBAEF,4DAA4D;gBAC5D,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;oBACjC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;iBAChD;gBAED,WAAW;aACZ;iBAAM,IAAI,WAAW,KAAK,0BAAc,CAAC,QAAQ,EAAE;gBAClD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,UAAU,GACd,uCAA2B,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,8BAA8B;gBAEhG,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;oBACjC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;gBACF,OAAO;aACR;iBAAM,IAAI,WAAW,KAAK,0BAAc,CAAC,IAAI,EAAE;gBAC9C,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,uCAA2B,CAAC,kBAAkB,CAAC;gBAClE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;oBAC1C,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC;oBAC/C,OAAO;iBACR;gBAED,IAAI,GAAG,0BAAW,CAAC,UAAU,CAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5C,CAAC;gBAEF,UAAU,GAAG;oBACX,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;iBAC1B,CAAC;aACH;YAED,IAAI,CAAC,QAAQ,CAAC,4BAAgB,CAAC,WAAW,CAAC,CAAC;YAC5C,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;SAC7D;IACH,CAAC;IAED,IAAI,kBAAkB;QACpB,yBACK,IAAI,CAAC,OAAO,EACf;IACJ,CAAC;CACF;AAGC,kCAAW"} \ No newline at end of file diff --git a/deps/npm/node_modules/socks/build/common/receivebuffer.js.map b/deps/npm/node_modules/socks/build/common/receivebuffer.js.map index 144edb0b9b3..af5e2209016 100644 --- a/deps/npm/node_modules/socks/build/common/receivebuffer.js.map +++ b/deps/npm/node_modules/socks/build/common/receivebuffer.js.map @@ -1 +1 @@ -{"version":3,"file":"receivebuffer.js","sourceRoot":"","sources":["../../src/common/receivebuffer.ts"],"names":[],"mappings":";;;AAAA,MAAM,aAAa;IAKjB,YAAY,OAAe,IAAI;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;SACH;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACnD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAC9B,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EACtC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CACjC,CACF,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACvB;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,MAAc;QACjB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;SACH;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;SACH;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;QAEtB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAEO,sCAAa"} \ No newline at end of file +{"version":3,"file":"receivebuffer.js","sourceRoot":"","sources":["../../src/common/receivebuffer.ts"],"names":[],"mappings":";;;AAAA,MAAM,aAAa;IAKjB,YAAY,IAAI,GAAG,IAAI;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;SACH;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACnD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAC9B,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EACtC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CACjC,CACF,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACvB;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,MAAc;QACjB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;SACH;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;SACH;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;QAEtB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAEO,sCAAa"} \ No newline at end of file diff --git a/deps/npm/node_modules/socks/build/common/util.js b/deps/npm/node_modules/socks/build/common/util.js index 283314a0d44..f66b72e43e3 100644 --- a/deps/npm/node_modules/socks/build/common/util.js +++ b/deps/npm/node_modules/socks/build/common/util.js @@ -16,7 +16,6 @@ exports.SocksClientError = SocksClientError; * @param array The array to shuffle. */ function shuffleArray(array) { - // tslint:disable-next-line:no-increment-decrement for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; diff --git a/deps/npm/node_modules/socks/build/common/util.js.map b/deps/npm/node_modules/socks/build/common/util.js.map index 8d94a2ace78..f1993233d69 100644 --- a/deps/npm/node_modules/socks/build/common/util.js.map +++ b/deps/npm/node_modules/socks/build/common/util.js.map @@ -1 +1 @@ -{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/common/util.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAM,gBAAiB,SAAQ,KAAK;IAClC,YACE,OAAe,EACR,OAAqD;QAE5D,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,YAAO,GAAP,OAAO,CAA8C;IAG9D,CAAC;CACF;AAwBuB,4CAAgB;AAtBxC;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAY;IAChC,kDAAkD;IAClD,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7C;AACH,CAAC;AAYyC,oCAAY"} \ No newline at end of file +{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/common/util.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAM,gBAAiB,SAAQ,KAAK;IAClC,YACE,OAAe,EACR,OAAqD;QAE5D,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,YAAO,GAAP,OAAO,CAA8C;IAG9D,CAAC;CACF;AAuBuB,4CAAgB;AArBxC;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAgB;IACpC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7C;AACH,CAAC;AAYyC,oCAAY"} \ No newline at end of file diff --git a/deps/npm/node_modules/socks/build/index.js b/deps/npm/node_modules/socks/build/index.js index 17b6f42df8e..05fbb1d949b 100644 --- a/deps/npm/node_modules/socks/build/index.js +++ b/deps/npm/node_modules/socks/build/index.js @@ -1,7 +1,11 @@ "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; diff --git a/deps/npm/node_modules/socks/build/index.js.map b/deps/npm/node_modules/socks/build/index.js.map index ff654a08e01..0e2bcb27b8b 100644 --- a/deps/npm/node_modules/socks/build/index.js.map +++ b/deps/npm/node_modules/socks/build/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAqC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC"} \ No newline at end of file diff --git a/deps/npm/node_modules/socks/package.json b/deps/npm/node_modules/socks/package.json index 61c3f1dcf17..ac0b6d39fbd 100644 --- a/deps/npm/node_modules/socks/package.json +++ b/deps/npm/node_modules/socks/package.json @@ -1,7 +1,7 @@ { "name": "socks", "private": false, - "version": "2.6.2", + "version": "2.7.0", "description": "Fully featured SOCKS proxy client supporting SOCKSv4, SOCKSv4a, and SOCKSv5. Includes Bind and Associate functionality.", "main": "build/index.js", "typings": "typings/index.d.ts", @@ -34,50 +34,25 @@ "readmeFilename": "README.md", "devDependencies": { "@types/ip": "1.1.0", - "@types/mocha": "^9.1.0", - "@types/node": "^17.0.15", - "coveralls": "^3.1.1", - "mocha": "^9.2.0", - "nyc": "15.1.0", - "prettier": "^2.5.1", - "socks5-server": "^0.1.1", - "ts-node": "^10.4.0", - "typescript": "^4.5.5" + "@types/mocha": "^9.1.1", + "@types/node": "^18.0.6", + "@typescript-eslint/eslint-plugin": "^5.30.6", + "@typescript-eslint/parser": "^5.30.6", + "eslint": "^8.20.0", + "mocha": "^10.0.0", + "prettier": "^2.7.1", + "ts-node": "^10.9.1", + "typescript": "^4.7.4" }, "dependencies": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "scripts": { "prepublish": "npm install -g typescript && npm run build", "test": "NODE_ENV=test mocha --recursive --require ts-node/register test/**/*.ts", "prettier": "prettier --write ./src/**/*.ts --config .prettierrc.yaml", - "coverage": "NODE_ENV=test nyc npm test", - "coveralls": "NODE_ENV=test nyc npm test && nyc report --reporter=text-lcov | coveralls", - "lint": "tslint --project tsconfig.json 'src/**/*.ts'", + "lint": "eslint 'src/**/*.ts'", "build": "rm -rf build typings && prettier --write ./src/**/*.ts --config .prettierrc.yaml && tsc -p ." - }, - "nyc": { - "extension": [ - ".ts", - ".tsx" - ], - "include": [ - "src/*.ts", - "src/**/*.ts" - ], - "exclude": [ - "**.*.d.ts", - "node_modules", - "typings" - ], - "require": [ - "ts-node/register" - ], - "reporter": [ - "json", - "html" - ], - "all": true } } diff --git a/deps/npm/node_modules/socks/typings/client/socksclient.d.ts b/deps/npm/node_modules/socks/typings/client/socksclient.d.ts index d8ce1b965f0..b886d95710b 100644 --- a/deps/npm/node_modules/socks/typings/client/socksclient.d.ts +++ b/deps/npm/node_modules/socks/typings/client/socksclient.d.ts @@ -1,4 +1,6 @@ /// +/// +/// import { EventEmitter } from 'events'; import { SocksClientOptions, SocksClientChainOptions, SocksRemoteHost, SocksProxy, SocksClientBoundEvent, SocksClientEstablishedEvent, SocksUDPFrameDetails } from '../common/constants'; import { SocksClientError } from '../common/util'; @@ -7,11 +9,11 @@ declare interface SocksClient { on(event: 'error', listener: (err: SocksClientError) => void): this; on(event: 'bound', listener: (info: SocksClientBoundEvent) => void): this; on(event: 'established', listener: (info: SocksClientEstablishedEvent) => void): this; - once(event: string, listener: (...args: any[]) => void): this; + once(event: string, listener: (...args: unknown[]) => void): this; once(event: 'error', listener: (err: SocksClientError) => void): this; once(event: 'bound', listener: (info: SocksClientBoundEvent) => void): this; once(event: 'established', listener: (info: SocksClientEstablishedEvent) => void): this; - emit(event: string | symbol, ...args: any[]): boolean; + emit(event: string | symbol, ...args: unknown[]): boolean; emit(event: 'error', err: SocksClientError): boolean; emit(event: 'bound', info: SocksClientBoundEvent): boolean; emit(event: 'established', info: SocksClientEstablishedEvent): boolean; @@ -36,7 +38,7 @@ declare class SocksClient extends EventEmitter implements SocksClient { * @param callback { Function } An optional callback function. * @returns { Promise } */ - static createConnection(options: SocksClientOptions, callback?: Function): Promise; + static createConnection(options: SocksClientOptions, callback?: (error: Error | null, info?: SocksClientEstablishedEvent) => void): Promise; /** * Creates a new SOCKS connection chain to a destination host through 2 or more SOCKS proxies. * @@ -46,7 +48,7 @@ declare class SocksClient extends EventEmitter implements SocksClient { * @param callback { Function } An optional callback function. * @returns { Promise } */ - static createConnectionChain(options: SocksClientChainOptions, callback?: Function): Promise; + static createConnectionChain(options: SocksClientChainOptions, callback?: (error: Error | null, socket?: SocksClientEstablishedEvent) => void): Promise; /** * Creates a SOCKS UDP Frame. * @param options diff --git a/deps/npm/node_modules/socks/typings/common/constants.d.ts b/deps/npm/node_modules/socks/typings/common/constants.d.ts index 664795cb180..32a57052835 100644 --- a/deps/npm/node_modules/socks/typings/common/constants.d.ts +++ b/deps/npm/node_modules/socks/typings/common/constants.d.ts @@ -1,4 +1,6 @@ /// +/// +/// import { Duplex } from 'stream'; import { Socket, SocketConnectOpts } from 'net'; import { RequireOnlyOne } from './util'; diff --git a/deps/npm/node_modules/socks/typings/common/util.d.ts b/deps/npm/node_modules/socks/typings/common/util.d.ts index 29c539adaab..83f20e7b597 100644 --- a/deps/npm/node_modules/socks/typings/common/util.d.ts +++ b/deps/npm/node_modules/socks/typings/common/util.d.ts @@ -10,7 +10,7 @@ declare class SocksClientError extends Error { * Shuffles a given array. * @param array The array to shuffle. */ -declare function shuffleArray(array: any[]): void; +declare function shuffleArray(array: unknown[]): void; declare type RequireOnlyOne = Pick> & { [K in Keys]?: Required> & Partial, undefined>>; }[Keys]; diff --git a/deps/npm/node_modules/string-width/readme.md b/deps/npm/node_modules/string-width/readme.md deleted file mode 100644 index bdd314129ca..00000000000 --- a/deps/npm/node_modules/string-width/readme.md +++ /dev/null @@ -1,50 +0,0 @@ -# string-width - -> Get the visual width of a string - the number of columns required to display it - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -Useful to be able to measure the actual width of command-line output. - - -## Install - -``` -$ npm install string-width -``` - - -## Usage - -```js -const stringWidth = require('string-width'); - -stringWidth('a'); -//=> 1 - -stringWidth('古'); -//=> 2 - -stringWidth('\u001B[1m古\u001B[22m'); -//=> 2 -``` - - -## Related - -- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module -- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string -- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string - - ---- - -
    - - Get professional support for this package with a Tidelift subscription - -
    - - Tidelift helps make open source sustainable for maintainers while giving companies
    assurances about security, maintenance, and licensing for their dependencies. -
    -
    diff --git a/deps/npm/node_modules/strip-ansi/readme.md b/deps/npm/node_modules/strip-ansi/readme.md deleted file mode 100644 index e0ef1a809b6..00000000000 --- a/deps/npm/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,45 +0,0 @@ -# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) - -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string - - -## Install - -``` -$ npm install strip-ansi -``` - - -## Usage - -```js -const stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` - - -## strip-ansi for enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) diff --git a/deps/npm/node_modules/supports-color/readme.md b/deps/npm/node_modules/supports-color/readme.md deleted file mode 100644 index 36542285863..00000000000 --- a/deps/npm/node_modules/supports-color/readme.md +++ /dev/null @@ -1,76 +0,0 @@ -# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color) - -> Detect whether a terminal supports color - - -## Install - -``` -$ npm install supports-color -``` - - -## Usage - -```js -const supportsColor = require('supports-color'); - -if (supportsColor.stdout) { - console.log('Terminal stdout supports color'); -} - -if (supportsColor.stdout.has256) { - console.log('Terminal stdout supports 256 colors'); -} - -if (supportsColor.stderr.has16m) { - console.log('Terminal stderr supports 16 million colors (truecolor)'); -} -``` - - -## API - -Returns an `Object` with a `stdout` and `stderr` property for testing either streams. Each property is an `Object`, or `false` if color is not supported. - -The `stdout`/`stderr` objects specifies a level of support for color through a `.level` property and a corresponding flag: - -- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors) -- `.level = 2` and `.has256 = true`: 256 color support -- `.level = 3` and `.has16m = true`: Truecolor support (16 million colors) - - -## Info - -It obeys the `--color` and `--no-color` CLI flags. - -For situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks. - -Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively. - - -## Related - -- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - ---- - -
    - - Get professional support for this package with a Tidelift subscription - -
    - - Tidelift helps make open source sustainable for maintainers while giving companies
    assurances about security, maintenance, and licensing for their dependencies. -
    -
    - ---- diff --git a/deps/npm/node_modules/text-table/readme.markdown b/deps/npm/node_modules/text-table/readme.markdown deleted file mode 100644 index 18806acd9ef..00000000000 --- a/deps/npm/node_modules/text-table/readme.markdown +++ /dev/null @@ -1,134 +0,0 @@ -# text-table - -generate borderless text table strings suitable for printing to stdout - -[![build status](https://secure.travis-ci.org/substack/text-table.png)](http://travis-ci.org/substack/text-table) - -[![browser support](https://ci.testling.com/substack/text-table.png)](http://ci.testling.com/substack/text-table) - -# example - -## default align - -``` js -var table = require('text-table'); -var t = table([ - [ 'master', '0123456789abcdef' ], - [ 'staging', 'fedcba9876543210' ] -]); -console.log(t); -``` - -``` -master 0123456789abcdef -staging fedcba9876543210 -``` - -## left-right align - -``` js -var table = require('text-table'); -var t = table([ - [ 'beep', '1024' ], - [ 'boop', '33450' ], - [ 'foo', '1006' ], - [ 'bar', '45' ] -], { align: [ 'l', 'r' ] }); -console.log(t); -``` - -``` -beep 1024 -boop 33450 -foo 1006 -bar 45 -``` - -## dotted align - -``` js -var table = require('text-table'); -var t = table([ - [ 'beep', '1024' ], - [ 'boop', '334.212' ], - [ 'foo', '1006' ], - [ 'bar', '45.6' ], - [ 'baz', '123.' ] -], { align: [ 'l', '.' ] }); -console.log(t); -``` - -``` -beep 1024 -boop 334.212 -foo 1006 -bar 45.6 -baz 123. -``` - -## centered - -``` js -var table = require('text-table'); -var t = table([ - [ 'beep', '1024', 'xyz' ], - [ 'boop', '3388450', 'tuv' ], - [ 'foo', '10106', 'qrstuv' ], - [ 'bar', '45', 'lmno' ] -], { align: [ 'l', 'c', 'l' ] }); -console.log(t); -``` - -``` -beep 1024 xyz -boop 3388450 tuv -foo 10106 qrstuv -bar 45 lmno -``` - -# methods - -``` js -var table = require('text-table') -``` - -## var s = table(rows, opts={}) - -Return a formatted table string `s` from an array of `rows` and some options -`opts`. - -`rows` should be an array of arrays containing strings, numbers, or other -printable values. - -options can be: - -* `opts.hsep` - separator to use between columns, default `' '` -* `opts.align` - array of alignment types for each column, default `['l','l',...]` -* `opts.stringLength` - callback function to use when calculating the string length - -alignment types are: - -* `'l'` - left -* `'r'` - right -* `'c'` - center -* `'.'` - decimal - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install text-table -``` - -# Use with ANSI-colors - -Since the string length of ANSI color schemes does not equal the length -JavaScript sees internally it is necessary to pass the a custom string length -calculator during the main function call. - -See the `test/ansi-colors.js` file for an example. - -# license - -MIT diff --git a/deps/npm/node_modules/unique-filename/coverage/__root__/index.html b/deps/npm/node_modules/unique-filename/coverage/__root__/index.html deleted file mode 100644 index cd55391a67a..00000000000 --- a/deps/npm/node_modules/unique-filename/coverage/__root__/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Code coverage report for __root__/ - - - - - - -
    -

    Code coverage report for __root__/

    -

    - Statements: 100% (4 / 4)      - Branches: 100% (2 / 2)      - Functions: 100% (1 / 1)      - Lines: 100% (4 / 4)      - Ignored: none      -

    -
    All files » __root__/
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileStatementsBranchesFunctionsLines
    index.js100%(4 / 4)100%(2 / 2)100%(1 / 1)100%(4 / 4)
    -
    -
    - - - - - - diff --git a/deps/npm/node_modules/unique-filename/coverage/__root__/index.js.html b/deps/npm/node_modules/unique-filename/coverage/__root__/index.js.html deleted file mode 100644 index 02e5768d3fb..00000000000 --- a/deps/npm/node_modules/unique-filename/coverage/__root__/index.js.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - Code coverage report for index.js - - - - - - -
    -

    Code coverage report for index.js

    -

    - Statements: 100% (4 / 4)      - Branches: 100% (2 / 2)      - Functions: 100% (1 / 1)      - Lines: 100% (4 / 4)      - Ignored: none      -

    -
    All files » __root__/ » index.js
    -
    -
    -
    
    -
    -
    1 -2 -3 -4 -5 -6 -7 -8 -9  -1 -  -1 -  -1 -6 -  - 
    'use strict'
    -var path = require('path')
    - 
    -var uniqueSlug = require('unique-slug')
    - 
    -module.exports = function (filepath, prefix, uniq) {
    -  return path.join(filepath, (prefix ? prefix + '-' : '') + uniqueSlug(uniq))
    -}
    - 
    - -
    - - - - - - diff --git a/deps/npm/node_modules/unique-filename/coverage/base.css b/deps/npm/node_modules/unique-filename/coverage/base.css deleted file mode 100644 index a6a2f3284d0..00000000000 --- a/deps/npm/node_modules/unique-filename/coverage/base.css +++ /dev/null @@ -1,182 +0,0 @@ -body, html { - margin:0; padding: 0; -} -body { - font-family: Helvetica Neue, Helvetica,Arial; - font-size: 10pt; -} -div.header, div.footer { - background: #eee; - padding: 1em; -} -div.header { - z-index: 100; - position: fixed; - top: 0; - border-bottom: 1px solid #666; - width: 100%; -} -div.footer { - border-top: 1px solid #666; -} -div.body { - margin-top: 10em; -} -div.meta { - font-size: 90%; - text-align: center; -} -h1, h2, h3 { - font-weight: normal; -} -h1 { - font-size: 12pt; -} -h2 { - font-size: 10pt; -} -pre { - font-family: Consolas, Menlo, Monaco, monospace; - margin: 0; - padding: 0; - line-height: 1.3; - font-size: 14px; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} - -div.path { font-size: 110%; } -div.path a:link, div.path a:visited { color: #000; } -table.coverage { border-collapse: collapse; margin:0; padding: 0 } - -table.coverage td { - margin: 0; - padding: 0; - color: #111; - vertical-align: top; -} -table.coverage td.line-count { - width: 50px; - text-align: right; - padding-right: 5px; -} -table.coverage td.line-coverage { - color: #777 !important; - text-align: right; - border-left: 1px solid #666; - border-right: 1px solid #666; -} - -table.coverage td.text { -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 40px; -} -table.coverage td span.cline-neutral { - background: #eee; -} -table.coverage td span.cline-yes { - background: #b5d592; - color: #999; -} -table.coverage td span.cline-no { - background: #fc8c84; -} - -.cstat-yes { color: #111; } -.cstat-no { background: #fc8c84; color: #111; } -.fstat-no { background: #ffc520; color: #111 !important; } -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -.missing-if-branch { - display: inline-block; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: black; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} - -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} - -.entity, .metric { font-weight: bold; } -.metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; } -.metric small { font-size: 80%; font-weight: normal; color: #666; } - -div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; } -div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; } -div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; } -div.coverage-summary th.file { border-right: none !important; } -div.coverage-summary th.pic { border-left: none !important; text-align: right; } -div.coverage-summary th.pct { border-right: none !important; } -div.coverage-summary th.abs { border-left: none !important; text-align: right; } -div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; } -div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; } -div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; } -div.coverage-summary td.pic { min-width: 120px !important; } -div.coverage-summary a:link { text-decoration: none; color: #000; } -div.coverage-summary a:visited { text-decoration: none; color: #777; } -div.coverage-summary a:hover { text-decoration: underline; } -div.coverage-summary tfoot td { border-top: 1px solid #666; } - -div.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -div.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -div.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} - -.high { background: #b5d592 !important; } -.medium { background: #ffe87c !important; } -.low { background: #fc8c84 !important; } - -span.cover-fill, span.cover-empty { - display:inline-block; - border:1px solid #444; - background: white; - height: 12px; -} -span.cover-fill { - background: #ccc; - border-right: 1px solid #444; -} -span.cover-empty { - background: white; - border-left: none; -} -span.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } diff --git a/deps/npm/node_modules/unique-filename/coverage/index.html b/deps/npm/node_modules/unique-filename/coverage/index.html deleted file mode 100644 index b10d186cc39..00000000000 --- a/deps/npm/node_modules/unique-filename/coverage/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Code coverage report for All files - - - - - - -
    -

    Code coverage report for All files

    -

    - Statements: 100% (4 / 4)      - Branches: 100% (2 / 2)      - Functions: 100% (1 / 1)      - Lines: 100% (4 / 4)      - Ignored: none      -

    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileStatementsBranchesFunctionsLines
    __root__/100%(4 / 4)100%(2 / 2)100%(1 / 1)100%(4 / 4)
    -
    -
    - - - - - - diff --git a/deps/npm/node_modules/unique-filename/coverage/prettify.css b/deps/npm/node_modules/unique-filename/coverage/prettify.css deleted file mode 100644 index b317a7cda31..00000000000 --- a/deps/npm/node_modules/unique-filename/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/deps/npm/node_modules/unique-filename/coverage/prettify.js b/deps/npm/node_modules/unique-filename/coverage/prettify.js deleted file mode 100644 index ef51e038668..00000000000 --- a/deps/npm/node_modules/unique-filename/coverage/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/deps/npm/node_modules/unique-filename/coverage/sort-arrow-sprite.png b/deps/npm/node_modules/unique-filename/coverage/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c..00000000000 Binary files a/deps/npm/node_modules/unique-filename/coverage/sort-arrow-sprite.png and /dev/null differ diff --git a/deps/npm/node_modules/unique-filename/coverage/sorter.js b/deps/npm/node_modules/unique-filename/coverage/sorter.js deleted file mode 100644 index 6afb736c39f..00000000000 --- a/deps/npm/node_modules/unique-filename/coverage/sorter.js +++ /dev/null @@ -1,156 +0,0 @@ -var addSorting = (function () { - "use strict"; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { return document.querySelector('.coverage-summary table'); } - // returns the thead element of the summary table - function getTableHeader() { return getTable().querySelector('thead tr'); } - // returns the tbody element of the summary table - function getTableBody() { return getTable().querySelector('tbody'); } - // returns the th element for nth column - function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - el = getNthColumn(i).querySelector('.sorter'); - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/deps/npm/node_modules/unique-filename/index.js b/deps/npm/node_modules/unique-filename/index.js deleted file mode 100644 index 02bf1e27314..00000000000 --- a/deps/npm/node_modules/unique-filename/index.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict' -var path = require('path') - -var uniqueSlug = require('unique-slug') - -module.exports = function (filepath, prefix, uniq) { - return path.join(filepath, (prefix ? prefix + '-' : '') + uniqueSlug(uniq)) -} diff --git a/deps/npm/node_modules/unique-filename/lib/index.js b/deps/npm/node_modules/unique-filename/lib/index.js new file mode 100644 index 00000000000..d067d2e7098 --- /dev/null +++ b/deps/npm/node_modules/unique-filename/lib/index.js @@ -0,0 +1,7 @@ +var path = require('path') + +var uniqueSlug = require('unique-slug') + +module.exports = function (filepath, prefix, uniq) { + return path.join(filepath, (prefix ? prefix + '-' : '') + uniqueSlug(uniq)) +} diff --git a/deps/npm/node_modules/unique-filename/package.json b/deps/npm/node_modules/unique-filename/package.json index bc429aa44b0..bfdec2c3722 100644 --- a/deps/npm/node_modules/unique-filename/package.json +++ b/deps/npm/node_modules/unique-filename/package.json @@ -1,27 +1,48 @@ { "name": "unique-filename", - "version": "1.1.1", + "version": "2.0.1", "description": "Generate a unique filename for use in temporary directories or caches.", - "main": "index.js", + "main": "lib/index.js", "scripts": { - "test": "standard && tap test" + "test": "tap", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force", + "lintfix": "npm run lint -- --fix", + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "snap": "tap", + "posttest": "npm run lint" }, "repository": { "type": "git", - "url": "https://github.com/iarna/unique-filename.git" + "url": "https://github.com/npm/unique-filename.git" }, "keywords": [], - "author": "Rebecca Turner (http://re-becca.org/)", + "author": "GitHub Inc.", "license": "ISC", "bugs": { "url": "https://github.com/iarna/unique-filename/issues" }, "homepage": "https://github.com/iarna/unique-filename", "devDependencies": { - "standard": "^5.4.1", - "tap": "^2.3.1" + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "3.5.0", + "tap": "^16.3.0" }, "dependencies": { - "unique-slug": "^2.0.0" + "unique-slug": "^3.0.0" + }, + "files": [ + "bin/", + "lib/" + ], + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "3.5.0" } } diff --git a/deps/npm/node_modules/unique-filename/test/index.js b/deps/npm/node_modules/unique-filename/test/index.js deleted file mode 100644 index 105b4e52e8b..00000000000 --- a/deps/npm/node_modules/unique-filename/test/index.js +++ /dev/null @@ -1,23 +0,0 @@ -'sue strict' -var t = require('tap') -var uniqueFilename = require('../index.js') - -t.plan(6) - -var randomTmpfile = uniqueFilename('tmp') -t.like(randomTmpfile, /^tmp.[a-f0-9]{8}$/, 'random tmp file') - -var randomAgain = uniqueFilename('tmp') -t.notEqual(randomAgain, randomTmpfile, 'random tmp files are not the same') - -var randomPrefixedTmpfile = uniqueFilename('tmp', 'my-test') -t.like(randomPrefixedTmpfile, /^tmp.my-test-[a-f0-9]{8}$/, 'random prefixed tmp file') - -var randomPrefixedAgain = uniqueFilename('tmp', 'my-test') -t.notEqual(randomPrefixedAgain, randomPrefixedTmpfile, 'random prefixed tmp files are not the same') - -var uniqueTmpfile = uniqueFilename('tmp', 'testing', '/my/thing/to/uniq/on') -t.like(uniqueTmpfile, /^tmp.testing-7ddd44c0$/, 'unique filename') - -var uniqueAgain = uniqueFilename('tmp', 'testing', '/my/thing/to/uniq/on') -t.is(uniqueTmpfile, uniqueAgain, 'same unique string component produces same filename') diff --git a/deps/npm/node_modules/unique-slug/index.js b/deps/npm/node_modules/unique-slug/index.js deleted file mode 100644 index fa4761ad2e2..00000000000 --- a/deps/npm/node_modules/unique-slug/index.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict' -var MurmurHash3 = require('imurmurhash') - -module.exports = function (uniq) { - if (uniq) { - var hash = new MurmurHash3(uniq) - return ('00000000' + hash.result().toString(16)).substr(-8) - } else { - return (Math.random().toString(16) + '0000000').substr(2, 8) - } -} diff --git a/deps/npm/node_modules/unique-slug/lib/index.js b/deps/npm/node_modules/unique-slug/lib/index.js new file mode 100644 index 00000000000..1bac84d95d7 --- /dev/null +++ b/deps/npm/node_modules/unique-slug/lib/index.js @@ -0,0 +1,11 @@ +'use strict' +var MurmurHash3 = require('imurmurhash') + +module.exports = function (uniq) { + if (uniq) { + var hash = new MurmurHash3(uniq) + return ('00000000' + hash.result().toString(16)).slice(-8) + } else { + return (Math.random().toString(16) + '0000000').slice(2, 10) + } +} diff --git a/deps/npm/node_modules/unique-slug/package.json b/deps/npm/node_modules/unique-slug/package.json index 2142e68561f..3194408f27f 100644 --- a/deps/npm/node_modules/unique-slug/package.json +++ b/deps/npm/node_modules/unique-slug/package.json @@ -1,23 +1,44 @@ { "name": "unique-slug", - "version": "2.0.2", + "version": "3.0.0", "description": "Generate a unique character string suitible for use in files and URLs.", - "main": "index.js", + "main": "lib/index.js", "scripts": { - "test": "standard && tap --coverage test" + "test": "tap", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force", + "lintfix": "npm run lint -- --fix", + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "snap": "tap", + "posttest": "npm run lint" }, "keywords": [], - "author": "Rebecca Turner (http://re-becca.org)", + "author": "GitHub Inc.", "license": "ISC", "devDependencies": { - "standard": "^12.0.1", - "tap": "^12.7.0" + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/template-oss": "3.5.0", + "tap": "^16.3.0" }, "repository": { "type": "git", - "url": "git://github.com/iarna/unique-slug.git" + "url": "https://github.com/npm/unique-slug.git" }, "dependencies": { "imurmurhash": "^0.1.4" + }, + "files": [ + "bin/", + "lib/" + ], + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "3.5.0" } } diff --git a/deps/npm/node_modules/unique-slug/test/index.js b/deps/npm/node_modules/unique-slug/test/index.js deleted file mode 100644 index 0f4ccad04af..00000000000 --- a/deps/npm/node_modules/unique-slug/test/index.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict' -var t = require('tap') -var uniqueSlug = require('../index.js') - -t.plan(5) -var slugA = uniqueSlug() -t.is(slugA.length, 8, 'random slugs are 8 chars') -t.notEqual(slugA, uniqueSlug(), "two slugs aren't the same") -var base = '/path/to/thingy' -var slugB = uniqueSlug(base) -t.is(slugB.length, 8, 'string based slugs are 8 chars') -t.is(slugB, uniqueSlug(base), 'two string based slugs, from the same string are the same') -t.notEqual(slugB, uniqueSlug(slugA), 'two string based slongs, from diff strings are different') diff --git a/deps/npm/node_modules/wcwidth/Readme.md b/deps/npm/node_modules/wcwidth/Readme.md deleted file mode 100644 index 0649a319872..00000000000 --- a/deps/npm/node_modules/wcwidth/Readme.md +++ /dev/null @@ -1,33 +0,0 @@ -# wcwidth - -Determine columns needed for a fixed-size wide-character string - ----- - -wcwidth is a simple JavaScript port of [wcwidth](http://man7.org/linux/man-pages/man3/wcswidth.3.html) implemented in C by Markus Kuhn. - -JavaScript port [originally](https://github.com/mycoboco/wcwidth.js) written by Woong Jun (http://code.woong.org/) - -## Example - -```js -'한'.length // => 1 -wcwidth('한'); // => 2 - -'한글'.length // => 2 -wcwidth('한글'); // => 4 -``` - -`wcwidth()` and its string version, `wcswidth()` are defined by IEEE Std -1002.1-2001, a.k.a. POSIX.1-2001, and return the number of columns used -to represent the given wide character and string. - -Markus's implementation assumes the wide character given to those -functions to be encoded in ISO 10646, which is almost true for -JavaScript's characters. - -[Further explaination here](docs) - -## License - -MIT diff --git a/deps/npm/node_modules/write-file-atomic/lib/index.js b/deps/npm/node_modules/write-file-atomic/lib/index.js index 118666d2ce6..9d79d797a55 100644 --- a/deps/npm/node_modules/write-file-atomic/lib/index.js +++ b/deps/npm/node_modules/write-file-atomic/lib/index.js @@ -39,7 +39,9 @@ function cleanupOnExit (tmpfile) { return () => { try { fs.unlinkSync(typeof tmpfile === 'function' ? tmpfile() : tmpfile) - } catch (_) {} + } catch { + // ignore errors + } } } @@ -156,7 +158,7 @@ async function writeFileAsync (filename, data, options = {}) { } } -function writeFile (filename, data, options, callback) { +async function writeFile (filename, data, options, callback) { if (options instanceof Function) { callback = options options = {} @@ -164,7 +166,12 @@ function writeFile (filename, data, options, callback) { const promise = writeFileAsync(filename, data, options) if (callback) { - promise.then(callback, callback) + try { + const result = await promise + return callback(result) + } catch (err) { + return callback(err) + } } return promise diff --git a/deps/npm/node_modules/write-file-atomic/package.json b/deps/npm/node_modules/write-file-atomic/package.json index 7219f90b97b..86e2a0fbadf 100644 --- a/deps/npm/node_modules/write-file-atomic/package.json +++ b/deps/npm/node_modules/write-file-atomic/package.json @@ -1,23 +1,23 @@ { "name": "write-file-atomic", - "version": "4.0.1", + "version": "4.0.2", "description": "Write files in an atomic fashion w/configurable ownership", "main": "./lib/index.js", "scripts": { "test": "tap", "posttest": "npm run lint", - "lint": "eslint '**/*.js'", - "postlint": "npm-template-check", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", "preversion": "npm test", "postversion": "npm publish", "prepublishOnly": "git push origin --follow-tags", "lintfix": "npm run lint -- --fix", "snap": "tap", - "template-copy": "npm-template-copy --force" + "template-oss-apply": "template-oss-apply --force" }, "repository": { "type": "git", - "url": "git://github.com/npm/write-file-atomic.git" + "url": "https://github.com/npm/write-file-atomic.git" }, "keywords": [ "writeFile", @@ -34,20 +34,22 @@ "signal-exit": "^3.0.7" }, "devDependencies": { - "@npmcli/template-oss": "^2.7.1", + "@npmcli/eslint-config": "^3.0.1", + "@npmcli/template-oss": "3.5.0", "mkdirp": "^1.0.4", "rimraf": "^3.0.2", - "tap": "^15.1.6" + "tap": "^16.0.1" }, "files": [ - "bin", - "lib" + "bin/", + "lib/" ], "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", "windowsCI": false, - "version": "2.7.1" + "version": "3.5.0" } } diff --git a/deps/npm/package.json b/deps/npm/package.json index f616f038dbf..4692c09c83a 100644 --- a/deps/npm/package.json +++ b/deps/npm/package.json @@ -1,5 +1,5 @@ { - "version": "8.11.0", + "version": "8.19.3", "name": "npm", "description": "a package manager for JavaScript", "workspaces": [ @@ -8,12 +8,12 @@ "workspaces/*" ], "files": [ + "bin/", + "lib/", "index.js", - "bin", - "docs/content/**/*.md", - "docs/output/**/*.html", - "lib", - "man" + "docs/content/", + "docs/output/", + "man/" ], "keywords": [ "install", @@ -26,10 +26,10 @@ "publishtest": false }, "homepage": "https://docs.npmjs.com/", - "author": "Isaac Z. Schlueter (http://blog.izs.me)", + "author": "GitHub Inc.", "repository": { "type": "git", - "url": "https://github.com/npm/cli" + "url": "https://github.com/npm/cli.git" }, "bugs": { "url": "https://github.com/npm/cli/issues" @@ -56,63 +56,66 @@ }, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.0.4", + "@npmcli/arborist": "^5.6.3", "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.1.0", + "@npmcli/config": "^4.2.1", "@npmcli/fs": "^2.1.0", "@npmcli/map-workspaces": "^2.0.3", "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.1", + "@npmcli/run-script": "^4.2.1", "abbrev": "~1.1.1", "archy": "~1.0.0", - "cacache": "^16.1.0", + "cacache": "^16.1.3", "chalk": "^4.1.2", "chownr": "^2.0.0", "cli-columns": "^4.0.0", "cli-table3": "^0.6.2", "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.12", + "fs-minipass": "^2.1.0", "glob": "^8.0.1", "graceful-fs": "^4.2.10", - "hosted-git-info": "^5.0.0", - "ini": "^3.0.0", + "hosted-git-info": "^5.2.1", + "ini": "^3.0.1", "init-package-json": "^3.0.2", "is-cidr": "^4.0.2", "json-parse-even-better-errors": "^2.3.1", - "libnpmaccess": "^6.0.2", - "libnpmdiff": "^4.0.2", - "libnpmexec": "^4.0.2", - "libnpmfund": "^3.0.1", - "libnpmhook": "^8.0.2", - "libnpmorg": "^4.0.2", - "libnpmpack": "^4.0.2", - "libnpmpublish": "^6.0.2", - "libnpmsearch": "^5.0.2", - "libnpmteam": "^4.0.2", - "libnpmversion": "^3.0.1", - "make-fetch-happen": "^10.1.5", + "libnpmaccess": "^6.0.4", + "libnpmdiff": "^4.0.5", + "libnpmexec": "^4.0.14", + "libnpmfund": "^3.0.5", + "libnpmhook": "^8.0.4", + "libnpmorg": "^4.0.4", + "libnpmpack": "^4.1.3", + "libnpmpublish": "^6.0.5", + "libnpmsearch": "^5.0.4", + "libnpmteam": "^4.0.4", + "libnpmversion": "^3.0.7", + "make-fetch-happen": "^10.2.0", + "minimatch": "^5.1.0", "minipass": "^3.1.6", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", "ms": "^2.1.2", - "node-gyp": "^9.0.0", - "nopt": "^5.0.0", + "node-gyp": "^9.1.0", + "nopt": "^6.0.0", "npm-audit-report": "^3.0.0", "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.2", - "npm-pick-manifest": "^7.0.1", - "npm-profile": "^6.0.3", - "npm-registry-fetch": "^13.1.1", + "npm-package-arg": "^9.1.0", + "npm-pick-manifest": "^7.0.2", + "npm-profile": "^6.2.0", + "npm-registry-fetch": "^13.3.1", "npm-user-validate": "^1.0.1", "npmlog": "^6.0.2", "opener": "^1.5.2", - "pacote": "^13.4.1", + "p-map": "^4.0.0", + "pacote": "^13.6.2", "parse-conflict-json": "^2.0.2", "proc-log": "^2.0.1", "qrcode-terminal": "^0.12.0", "read": "~1.0.7", - "read-package-json": "^5.0.1", + "read-package-json": "^5.0.2", "read-package-json-fast": "^2.0.3", "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", @@ -144,6 +147,7 @@ "cli-table3", "columnify", "fastest-levenshtein", + "fs-minipass", "glob", "graceful-fs", "hosted-git-info", @@ -163,6 +167,7 @@ "libnpmteam", "libnpmversion", "make-fetch-happen", + "minimatch", "minipass", "minipass-pipeline", "mkdirp", @@ -179,6 +184,7 @@ "npm-user-validate", "npmlog", "opener", + "p-map", "pacote", "parse-conflict-json", "proc-log", @@ -199,30 +205,38 @@ "write-file-atomic" ], "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "3.5.0", - "licensee": "^8.2.0", + "@npmcli/docs": "^1.0.0", + "@npmcli/eslint-config": "^3.1.0", + "@npmcli/git": "^3.0.2", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/template-oss": "4.8.0", + "licensee": "^9.0.0", "nock": "^13.2.4", + "npm-packlist": "^5.1.3", "spawk": "^1.7.1", "tap": "^16.0.1" }, "scripts": { + "dependencies": "node scripts/bundle-and-gitignore-deps.js && node scripts/dependency-graph.js", "dumpconf": "env | grep npm | sort | uniq", - "preversion": "bash scripts/update-authors.sh && git add AUTHORS && git commit -m \"chore: update AUTHORS\" || true", "licenses": "licensee --production --errors-only", + "pretest": "node scripts/rebuild.js cmark-gfm", "test": "tap", - "test-all": "npm run test --if-present --workspaces --include-workspace-root", + "test-all": "node . run test -ws -iwr --if-present", "snap": "tap", - "postsnap": "make -s docs", - "test:nocleanup": "NO_TEST_CLEANUP=1 npm run test --", - "sudotest": "sudo npm run test --", - "sudotest:nocleanup": "sudo NO_TEST_CLEANUP=1 npm run test --", - "posttest": "npm run lint", + "prepack": "node . run build -w docs", + "test:nocleanup": "NO_TEST_CLEANUP=1 node . run test --", + "sudotest": "sudo node . run run test --", + "sudotest:nocleanup": "sudo NO_TEST_CLEANUP=1 node . run test --", + "posttest": "node . run lint", "lint": "eslint \"**/*.js\"", - "lintfix": "npm run lint -- --fix", - "lint-all": "npm run lint --if-present --workspaces --include-workspace-root", + "lintfix": "node . run lint -- --fix", + "lint-all": "node . run lint -ws -iwr --if-present", "prelint": "rimraf test/npm_cache*", - "resetdeps": "bash scripts/resetdeps.sh" + "resetdeps": "node scripts/resetdeps.js", + "rp-pull-request": "node scripts/update-authors.js", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force" }, "tap": { "test-env": [ @@ -232,19 +246,24 @@ "files": "test/{lib,bin,index.js}", "timeout": 600, "nyc-arg": [ + "--exclude", + "docs/**", + "--exclude", + "smoke-tests/**", "--exclude", "workspaces/**", "--exclude", "tap-snapshots/**" - ] + ], + "test-ignore": "^(docs|smoke-tests|workspaces)/" }, "templateOSS": { - "rootRepo": false, - "rootModule": false, - "version": "3.5.0" + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "4.8.0", + "content": "./scripts/template-oss/root.js" }, "license": "Artistic-2.0", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } } diff --git a/deps/npm/tap-snapshots/test/lib/commands/adduser.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/adduser.js.test.cjs new file mode 100644 index 00000000000..ba27a6a781a --- /dev/null +++ b/deps/npm/tap-snapshots/test/lib/commands/adduser.js.test.cjs @@ -0,0 +1,17 @@ +/* IMPORTANT + * This snapshot file is auto-generated, but designed for humans. + * It should be checked into source control and tracked carefully. + * Re-generate by setting TAP_SNAPSHOT=1 and running tests. + * Make sure to inspect the output below. Do not ignore changes! + */ +'use strict' +exports[`test/lib/commands/adduser.js TAP auth-type sso warning > warning 1`] = ` +Object { + "warn": Array [ + Array [ + "config", + "--auth-type=sso is will be removed in a future version.", + ], + ], +} +` diff --git a/deps/npm/tap-snapshots/test/lib/commands/audit.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/audit.js.test.cjs index c3680933e6a..3e7658c14bb 100644 --- a/deps/npm/tap-snapshots/test/lib/commands/audit.js.test.cjs +++ b/deps/npm/tap-snapshots/test/lib/commands/audit.js.test.cjs @@ -41,6 +41,233 @@ added 1 package, and audited 2 packages in xxx found 0 vulnerabilities ` +exports[`test/lib/commands/audit.js TAP audit signatures ignores optional dependencies > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has a verified registry signature + +` + +exports[`test/lib/commands/audit.js TAP audit signatures json output with invalid and missing signatures > must match snapshot 1`] = ` +{ + "invalid": [ + { + "name": "kms-demo", + "version": "1.0.0", + "location": "node_modules/kms-demo", + "resolved": "https://registry.npmjs.org/kms-demo/-/kms-demo-1.0.0.tgz", + "integrity": "sha512-QqZ7VJ/8xPkS9s2IWB7Shj3qTJdcRyeXKbPQnsZjsPEwvutGv0EGeVchPcauoiDFJlGbZMFq5GDCurAGNSghJQ==", + "signature": "bogus", + "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA" + } + ], + "missing": [ + { + "name": "async", + "version": "1.1.1", + "location": "node_modules/async", + "resolved": "https://registry.npmjs.org/async/-/async-1.1.1.tgz" + } + ] +} +` + +exports[`test/lib/commands/audit.js TAP audit signatures json output with invalid signatures > must match snapshot 1`] = ` +{ + "invalid": [ + { + "name": "kms-demo", + "version": "1.0.0", + "location": "node_modules/kms-demo", + "resolved": "https://registry.npmjs.org/kms-demo/-/kms-demo-1.0.0.tgz", + "integrity": "sha512-QqZ7VJ/8xPkS9s2IWB7Shj3qTJdcRyeXKbPQnsZjsPEwvutGv0EGeVchPcauoiDFJlGbZMFq5GDCurAGNSghJQ==", + "signature": "bogus", + "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA" + } + ], + "missing": [] +} +` + +exports[`test/lib/commands/audit.js TAP audit signatures json output with valid signatures > must match snapshot 1`] = ` +{ + "invalid": [], + "missing": [] +} +` + +exports[`test/lib/commands/audit.js TAP audit signatures multiple registries with keys and signatures > must match snapshot 1`] = ` +audited 2 packages in xxx + +2 packages have verified registry signatures + +` + +exports[`test/lib/commands/audit.js TAP audit signatures omit dev dependencies with missing signature > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has a verified registry signature + +` + +exports[`test/lib/commands/audit.js TAP audit signatures output details about missing signatures > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has a missing registry signature but the registry is providing signing keys: + +kms-demo@1.0.0 (https://registry.npmjs.org/) +` + +exports[`test/lib/commands/audit.js TAP audit signatures third-party registry with invalid signatures errors > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has an invalid registry signature: + +@npmcli/arborist@1.0.14 (https://verdaccio-clone.org) + +Someone might have tampered with this package since it was published on the registry! + +` + +exports[`test/lib/commands/audit.js TAP audit signatures third-party registry with keys and missing signatures errors > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has a missing registry signature but the registry is providing signing keys: + +@npmcli/arborist@1.0.14 (https://verdaccio-clone.org) +` + +exports[`test/lib/commands/audit.js TAP audit signatures third-party registry with keys and signatures > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has a verified registry signature + +` + +exports[`test/lib/commands/audit.js TAP audit signatures with both invalid and missing signatures > must match snapshot 1`] = ` +audited 2 packages in xxx + +1 package has a missing registry signature but the registry is providing signing keys: + +async@1.1.1 (https://registry.npmjs.org/) + +1 package has an invalid registry signature: + +kms-demo@1.0.0 (https://registry.npmjs.org/) + +Someone might have tampered with this package since it was published on the registry! + +` + +exports[`test/lib/commands/audit.js TAP audit signatures with bundled and peer deps and no signatures > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has a verified registry signature + +` + +exports[`test/lib/commands/audit.js TAP audit signatures with invalid signatures > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has an invalid registry signature: + +kms-demo@1.0.0 (https://registry.npmjs.org/) + +Someone might have tampered with this package since it was published on the registry! + +` + +exports[`test/lib/commands/audit.js TAP audit signatures with invalid signtaures and color output enabled > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has an invalid registry signature: + +kms-demo@1.0.0 (https://registry.npmjs.org/) + +Someone might have tampered with this package since it was published on the registry! + +` + +exports[`test/lib/commands/audit.js TAP audit signatures with keys but missing signature > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has a missing registry signature but the registry is providing signing keys: + +kms-demo@1.0.0 (https://registry.npmjs.org/) +` + +exports[`test/lib/commands/audit.js TAP audit signatures with multiple invalid signatures > must match snapshot 1`] = ` +audited 2 packages in xxx + +2 packages have invalid registry signatures: + +async@1.1.1 (https://registry.npmjs.org/) +kms-demo@1.0.0 (https://registry.npmjs.org/) + +Someone might have tampered with these packages since they where published on the registry! + +` + +exports[`test/lib/commands/audit.js TAP audit signatures with multiple missing signatures > must match snapshot 1`] = ` +audited 2 packages in xxx + +2 packages have missing registry signatures but the registry is providing signing keys: + +async@1.1.1 (https://registry.npmjs.org/) +kms-demo@1.0.0 (https://registry.npmjs.org/) +` + +exports[`test/lib/commands/audit.js TAP audit signatures with multiple valid signatures and one invalid > must match snapshot 1`] = ` +audited 3 packages in xxx + +2 packages have verified registry signatures + +1 package has an invalid registry signature: + +node-fetch@1.6.0 (https://registry.npmjs.org/) + +Someone might have tampered with this package since it was published on the registry! + +` + +exports[`test/lib/commands/audit.js TAP audit signatures with valid and missing signatures > must match snapshot 1`] = ` +audited 2 packages in xxx + +1 package has a verified registry signature + +1 package has a missing registry signature but the registry is providing signing keys: + +async@1.1.1 (https://registry.npmjs.org/) +` + +exports[`test/lib/commands/audit.js TAP audit signatures with valid signatures > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has a verified registry signature + +` + +exports[`test/lib/commands/audit.js TAP audit signatures with valid signatures using alias > must match snapshot 1`] = ` +audited 1 package in xxx + +1 package has a verified registry signature + +` + +exports[`test/lib/commands/audit.js TAP audit signatures workspaces verifies registry deps and ignores local workspace deps > must match snapshot 1`] = ` +audited 3 packages in xxx + +3 packages have verified registry signatures + +` + +exports[`test/lib/commands/audit.js TAP audit signatures workspaces verifies registry deps when filtering by workspace name > must match snapshot 1`] = ` +audited 2 packages in xxx + +2 packages have verified registry signatures + +` + exports[`test/lib/commands/audit.js TAP fallback audit > must match snapshot 1`] = ` # npm audit report diff --git a/deps/npm/tap-snapshots/test/lib/commands/completion.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/completion.js.test.cjs index 232cfec6697..f08ef0f37c3 100644 --- a/deps/npm/tap-snapshots/test/lib/commands/completion.js.test.cjs +++ b/deps/npm/tap-snapshots/test/lib/commands/completion.js.test.cjs @@ -87,6 +87,7 @@ Array [ profile prune publish + query rebuild repo restart diff --git a/deps/npm/tap-snapshots/test/lib/commands/config.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/config.js.test.cjs index 095fd9b7886..a455def634c 100644 --- a/deps/npm/tap-snapshots/test/lib/commands/config.js.test.cjs +++ b/deps/npm/tap-snapshots/test/lib/commands/config.js.test.cjs @@ -121,6 +121,7 @@ exports[`test/lib/commands/config.js TAP config list --json > output matches sna "read-only": false, "rebuild-bundle": true, "registry": "https://registry.npmjs.org/", + "replace-registry-host": "npmjs", "save": true, "save-bundle": false, "save-dev": false, @@ -277,6 +278,7 @@ proxy = null read-only = false rebuild-bundle = true registry = "https://registry.npmjs.org/" +replace-registry-host = "npmjs" save = true save-bundle = false save-dev = false diff --git a/deps/npm/tap-snapshots/test/lib/commands/init.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/init.js.test.cjs index 9dd0b4b6be3..a544b864035 100644 --- a/deps/npm/tap-snapshots/test/lib/commands/init.js.test.cjs +++ b/deps/npm/tap-snapshots/test/lib/commands/init.js.test.cjs @@ -10,26 +10,53 @@ Array [] ` exports[`test/lib/commands/init.js TAP workspaces no args > should print helper info 1`] = ` +Array [] +` + +exports[`test/lib/commands/init.js TAP workspaces no args, existing folder > should print helper info 1`] = ` +Array [] +` + +exports[`test/lib/commands/init.js TAP workspaces post workspace-init reify > should print helper info 1`] = ` Array [ Array [ String( - This utility will walk you through creating a package.json file. - It only covers the most common items, and tries to guess sensible defaults. - - See \`npm help init\` for definitive documentation on these fields - and exactly what they do. - - Use \`npm install \` afterwards to install a package and - save it as a dependency in the package.json file. - Press ^C at any time to quit. + added 1 package in 100ms ), ], ] ` -exports[`test/lib/commands/init.js TAP workspaces no args, existing folder > should print helper info 1`] = ` -Array [] +exports[`test/lib/commands/init.js TAP workspaces post workspace-init reify > should reify tree on init ws complete 1`] = ` +{ + "name": "top-level", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "top-level", + "workspaces": [ + "a" + ] + }, + "a": { + "version": "1.0.0", + "license": "ISC", + "devDependencies": {} + }, + "node_modules/a": { + "resolved": "a", + "link": true + } + }, + "dependencies": { + "a": { + "version": "file:a" + } + } +} + ` exports[`test/lib/commands/init.js TAP workspaces with arg but missing workspace folder > should print helper info 1`] = ` diff --git a/deps/npm/tap-snapshots/test/lib/commands/link.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/link.js.test.cjs index a9a10b20a2f..e01409e4ce1 100644 --- a/deps/npm/tap-snapshots/test/lib/commands/link.js.test.cjs +++ b/deps/npm/tap-snapshots/test/lib/commands/link.js.test.cjs @@ -5,6 +5,11 @@ * Make sure to inspect the output below. Do not ignore changes! */ 'use strict' +exports[`test/lib/commands/link.js TAP hash character in working directory path > should create a global link to current pkg, even within path with hash 1`] = ` +{CWD}/test/lib/commands/tap-testdir-link-hash-character-in-working-directory-path/global-prefix/lib/node_modules/test-pkg-link -> {CWD}/test/lib/commands/tap-testdir-link-hash-character-in-working-directory-path/i_like_#_in_my_paths/test-pkg-link + +` + exports[`test/lib/commands/link.js TAP link global linked pkg to local nm when using args > should create a local symlink to global pkg 1`] = ` {CWD}/test/lib/commands/tap-testdir-link-link-global-linked-pkg-to-local-nm-when-using-args/my-project/node_modules/@myscope/bar -> {CWD}/test/lib/commands/tap-testdir-link-link-global-linked-pkg-to-local-nm-when-using-args/global-prefix/lib/node_modules/@myscope/bar {CWD}/test/lib/commands/tap-testdir-link-link-global-linked-pkg-to-local-nm-when-using-args/my-project/node_modules/@myscope/linked -> {CWD}/test/lib/commands/tap-testdir-link-link-global-linked-pkg-to-local-nm-when-using-args/scoped-linked diff --git a/deps/npm/tap-snapshots/test/lib/commands/ls.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/ls.js.test.cjs index 1c8d3e59c3f..84bfed4c915 100644 --- a/deps/npm/tap-snapshots/test/lib/commands/ls.js.test.cjs +++ b/deps/npm/tap-snapshots/test/lib/commands/ls.js.test.cjs @@ -255,6 +255,12 @@ exports[`test/lib/commands/ls.js TAP ls --parseable no args > should output pars {CWD}/tap-testdir-ls-ls---parseable-no-args/node_modules/dog ` +exports[`test/lib/commands/ls.js TAP ls --parseable overridden dep > should contain overridden outout 1`] = ` +{CWD}/tap-testdir-ls-ls---parseable-overridden-dep:test-overridden@1.0.0 +{CWD}/tap-testdir-ls-ls---parseable-overridden-dep/node_modules/foo:foo@1.0.0 +{CWD}/tap-testdir-ls-ls---parseable-overridden-dep/node_modules/bar:bar@1.0.0:OVERRIDDEN +` + exports[`test/lib/commands/ls.js TAP ls --parseable resolved points to git ref > should output tree containing git refs 1`] = ` {CWD}/tap-testdir-ls-ls---parseable-resolved-points-to-git-ref {CWD}/tap-testdir-ls-ls---parseable-resolved-points-to-git-ref/node_modules/abbrev @@ -567,6 +573,20 @@ test-npm-ls@1.0.0 {CWD}/tap-testdir-ls-ls-no-args ` +exports[`test/lib/commands/ls.js TAP ls overridden dep > should contain overridden outout 1`] = ` +test-overridden@1.0.0 {CWD}/tap-testdir-ls-ls-overridden-dep +\`-- foo@1.0.0 + \`-- bar@1.0.0 overridden + +` + +exports[`test/lib/commands/ls.js TAP ls overridden dep w/ color > should contain overridden outout 1`] = ` +test-overridden@1.0.0 {CWD}/tap-testdir-ls-ls-overridden-dep-w-color +\`-- foo@1.0.0 + \`-- bar@1.0.0 overridden + +` + exports[`test/lib/commands/ls.js TAP ls print deduped symlinks > should output tree containing linked deps 1`] = ` print-deduped-symlinks@1.0.0 {CWD}/tap-testdir-ls-ls-print-deduped-symlinks +-- a@1.0.0 @@ -678,6 +698,13 @@ dedupe-entries@1.0.0 {CWD}/tap-testdir-ls-ls-with-no-args-dedupe-entries-and-not ` +exports[`test/lib/commands/ls.js TAP ls workspace and missing optional dep > should omit missing optional dep 1`] = ` +root@ {CWD}/tap-testdir-ls-ls-workspace-and-missing-optional-dep ++-- baz@1.0.0 -> ./baz +\`-- foo@1.0.0 + +` + exports[`test/lib/commands/ls.js TAP show multiple invalid reasons > ls result 1`] = ` test-npm-ls@1.0.0 {cwd}/tap-testdir-ls-show-multiple-invalid-reasons +-- cat@1.0.0 invalid: "^2.0.0" from the root project diff --git a/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs index e2d248edf5b..65a9ee02eb9 100644 --- a/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs +++ b/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs @@ -56,7 +56,11 @@ Array [ ] ` -exports[`test/lib/commands/publish.js TAP has auth for scope configured registry > new package version 1`] = ` +exports[`test/lib/commands/publish.js TAP has mTLS auth for scope configured registry > new package version 1`] = ` ++ @npm/test-package@1.0.0 +` + +exports[`test/lib/commands/publish.js TAP has token auth for scope configured registry > new package version 1`] = ` + @npm/test-package@1.0.0 ` diff --git a/deps/npm/tap-snapshots/test/lib/commands/query.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/query.js.test.cjs new file mode 100644 index 00000000000..d827b62eef7 --- /dev/null +++ b/deps/npm/tap-snapshots/test/lib/commands/query.js.test.cjs @@ -0,0 +1,232 @@ +/* IMPORTANT + * This snapshot file is auto-generated, but designed for humans. + * It should be checked into source control and tracked carefully. + * Re-generate by setting TAP_SNAPSHOT=1 and running tests. + * Make sure to inspect the output below. Do not ignore changes! + */ +'use strict' +exports[`test/lib/commands/query.js TAP global > should return global package 1`] = ` +[ + { + "name": "lorem", + "version": "2.0.0", + "_id": "lorem@2.0.0", + "pkgid": "lorem@2.0.0", + "location": "node_modules/lorem", + "path": "{CWD}/test/lib/commands/tap-testdir-query-global/global/node_modules/lorem", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-global/global/node_modules/lorem", + "resolved": null, + "from": [ + "" + ], + "to": [], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + } +] +` + +exports[`test/lib/commands/query.js TAP include-workspace-root > should return workspace object and root object 1`] = ` +[ + { + "name": "project", + "workspaces": [ + "c" + ], + "dependencies": { + "a": "^1.0.0", + "b": "^1.0.0" + }, + "pkgid": "project@", + "location": "", + "path": "{CWD}/test/lib/commands/tap-testdir-query-include-workspace-root/prefix", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-include-workspace-root/prefix", + "resolved": null, + "from": [], + "to": [ + "node_modules/c", + "node_modules/a", + "node_modules/b" + ], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + }, + { + "name": "c", + "version": "1.0.0", + "_id": "c@1.0.0", + "pkgid": "c@1.0.0", + "location": "c", + "path": "{CWD}/test/lib/commands/tap-testdir-query-include-workspace-root/prefix/c", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-include-workspace-root/prefix/c", + "resolved": null, + "from": [], + "to": [], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + } +] +` + +exports[`test/lib/commands/query.js TAP linked node > should return linked node res 1`] = ` +[ + { + "name": "a", + "version": "1.0.0", + "_id": "a@1.0.0", + "pkgid": "a@1.0.0", + "location": "a", + "path": "{CWD}/test/lib/commands/tap-testdir-query-linked-node/prefix/a", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-linked-node/prefix/a", + "resolved": null, + "from": [], + "to": [], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + } +] +` + +exports[`test/lib/commands/query.js TAP recursive tree > should return everything in the tree, accounting for recursion 1`] = ` +[ + { + "name": "project", + "dependencies": { + "a": "^1.0.0", + "b": "^1.0.0" + }, + "pkgid": "project@", + "location": "", + "path": "{CWD}/test/lib/commands/tap-testdir-query-recursive-tree/prefix", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-recursive-tree/prefix", + "resolved": null, + "from": [], + "to": [ + "node_modules/a", + "node_modules/b" + ], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + }, + { + "pkgid": "a@", + "location": "node_modules/a", + "path": "{CWD}/test/lib/commands/tap-testdir-query-recursive-tree/prefix/node_modules/a", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-recursive-tree/prefix/node_modules/a", + "resolved": null, + "from": [ + "" + ], + "to": [], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + }, + { + "pkgid": "b@", + "location": "node_modules/b", + "path": "{CWD}/test/lib/commands/tap-testdir-query-recursive-tree/prefix/node_modules/b", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-recursive-tree/prefix/node_modules/b", + "resolved": null, + "from": [ + "" + ], + "to": [], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + } +] +` + +exports[`test/lib/commands/query.js TAP simple query > should return root object and direct children 1`] = ` +[ + { + "name": "project", + "dependencies": { + "a": "^1.0.0", + "b": "^1.0.0" + }, + "peerDependencies": { + "c": "1.0.0" + }, + "pkgid": "project@", + "location": "", + "path": "{CWD}/test/lib/commands/tap-testdir-query-simple-query/prefix", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-simple-query/prefix", + "resolved": null, + "from": [], + "to": [ + "node_modules/a", + "node_modules/b" + ], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + }, + { + "pkgid": "a@", + "location": "node_modules/a", + "path": "{CWD}/test/lib/commands/tap-testdir-query-simple-query/prefix/node_modules/a", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-simple-query/prefix/node_modules/a", + "resolved": null, + "from": [ + "" + ], + "to": [], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + }, + { + "pkgid": "b@", + "location": "node_modules/b", + "path": "{CWD}/test/lib/commands/tap-testdir-query-simple-query/prefix/node_modules/b", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-simple-query/prefix/node_modules/b", + "resolved": null, + "from": [ + "" + ], + "to": [], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + } +] +` + +exports[`test/lib/commands/query.js TAP workspace query > should return workspace object 1`] = ` +[ + { + "name": "c", + "version": "1.0.0", + "_id": "c@1.0.0", + "pkgid": "c@1.0.0", + "location": "c", + "path": "{CWD}/test/lib/commands/tap-testdir-query-workspace-query/prefix/c", + "realpath": "{CWD}/test/lib/commands/tap-testdir-query-workspace-query/prefix/c", + "resolved": null, + "from": [], + "to": [], + "dev": false, + "inBundle": false, + "deduped": false, + "overridden": false + } +] +` diff --git a/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs b/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs new file mode 100644 index 00000000000..b6ac1788aeb --- /dev/null +++ b/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs @@ -0,0 +1,4321 @@ +/* IMPORTANT + * This snapshot file is auto-generated, but designed for humans. + * It should be checked into source control and tracked carefully. + * Re-generate by setting TAP_SNAPSHOT=1 and running tests. + * Make sure to inspect the output below. Do not ignore changes! + */ +'use strict' +exports[`test/lib/docs.js TAP basic usage > must match snapshot 1`] = ` +npm + +Usage: + +npm install install all the dependencies in your project +npm install add the dependency to your project +npm test run this project's tests +npm run run the script named +npm -h quick help on +npm -l display usage info for all commands +npm help search for help on +npm help npm more involved overview + +All commands: + + + +Specify configs in the ini-formatted file: + /some/config/file/.npmrc +or on the command line via: npm --key=value + +More configuration info: npm help config +Configuration fields: npm help 7 config + +npm@{VERSION} {BASEDIR} +` + +exports[`test/lib/docs.js TAP command list > abbrevs 1`] = ` +Object { + "ac": "access", + "acc": "access", + "acce": "access", + "acces": "access", + "access": "access", + "add": "add", + "add-": "add-user", + "add-u": "add-user", + "add-us": "add-user", + "add-use": "add-user", + "add-user": "add-user", + "addu": "adduser", + "addus": "adduser", + "adduse": "adduser", + "adduser": "adduser", + "aud": "audit", + "audi": "audit", + "audit": "audit", + "aut": "author", + "auth": "author", + "autho": "author", + "author": "author", + "bi": "bin", + "bin": "bin", + "bu": "bugs", + "bug": "bugs", + "bugs": "bugs", + "c": "c", + "ca": "cache", + "cac": "cache", + "cach": "cache", + "cache": "cache", + "ci": "ci", + "cit": "cit", + "clean-install": "clean-install", + "clean-install-": "clean-install-test", + "clean-install-t": "clean-install-test", + "clean-install-te": "clean-install-test", + "clean-install-tes": "clean-install-test", + "clean-install-test": "clean-install-test", + "com": "completion", + "comp": "completion", + "compl": "completion", + "comple": "completion", + "complet": "completion", + "completi": "completion", + "completio": "completion", + "completion": "completion", + "con": "config", + "conf": "config", + "confi": "config", + "config": "config", + "cr": "create", + "cre": "create", + "crea": "create", + "creat": "create", + "create": "create", + "dd": "ddp", + "ddp": "ddp", + "ded": "dedupe", + "dedu": "dedupe", + "dedup": "dedupe", + "dedupe": "dedupe", + "dep": "deprecate", + "depr": "deprecate", + "depre": "deprecate", + "deprec": "deprecate", + "depreca": "deprecate", + "deprecat": "deprecate", + "deprecate": "deprecate", + "dif": "diff", + "diff": "diff", + "dist-tag": "dist-tag", + "dist-tags": "dist-tags", + "docs": "docs", + "doct": "doctor", + "docto": "doctor", + "doctor": "doctor", + "ed": "edit", + "edi": "edit", + "edit": "edit", + "exe": "exec", + "exec": "exec", + "expla": "explain", + "explai": "explain", + "explain": "explain", + "explo": "explore", + "explor": "explore", + "explore": "explore", + "find": "find", + "find-": "find-dupes", + "find-d": "find-dupes", + "find-du": "find-dupes", + "find-dup": "find-dupes", + "find-dupe": "find-dupes", + "find-dupes": "find-dupes", + "fu": "fund", + "fun": "fund", + "fund": "fund", + "g": "get", + "ge": "get", + "get": "get", + "he": "help", + "hel": "help", + "help": "help", + "hl": "hlep", + "hle": "hlep", + "hlep": "hlep", + "hom": "home", + "home": "home", + "hoo": "hook", + "hook": "hook", + "i": "i", + "ic": "ic", + "in": "in", + "inf": "info", + "info": "info", + "ini": "init", + "init": "init", + "inn": "innit", + "inni": "innit", + "innit": "innit", + "ins": "ins", + "inst": "inst", + "insta": "insta", + "instal": "instal", + "install": "install", + "install-ci": "install-ci-test", + "install-ci-": "install-ci-test", + "install-ci-t": "install-ci-test", + "install-ci-te": "install-ci-test", + "install-ci-tes": "install-ci-test", + "install-ci-test": "install-ci-test", + "install-cl": "install-clean", + "install-cle": "install-clean", + "install-clea": "install-clean", + "install-clean": "install-clean", + "install-t": "install-test", + "install-te": "install-test", + "install-tes": "install-test", + "install-test": "install-test", + "isnt": "isnt", + "isnta": "isnta", + "isntal": "isntal", + "isntall": "isntall", + "isntall-": "isntall-clean", + "isntall-c": "isntall-clean", + "isntall-cl": "isntall-clean", + "isntall-cle": "isntall-clean", + "isntall-clea": "isntall-clean", + "isntall-clean": "isntall-clean", + "iss": "issues", + "issu": "issues", + "issue": "issues", + "issues": "issues", + "it": "it", + "la": "la", + "lin": "link", + "link": "link", + "lis": "list", + "list": "list", + "ll": "ll", + "ln": "ln", + "logi": "login", + "login": "login", + "logo": "logout", + "logou": "logout", + "logout": "logout", + "ls": "ls", + "og": "ogr", + "ogr": "ogr", + "or": "org", + "org": "org", + "ou": "outdated", + "out": "outdated", + "outd": "outdated", + "outda": "outdated", + "outdat": "outdated", + "outdate": "outdated", + "outdated": "outdated", + "ow": "owner", + "own": "owner", + "owne": "owner", + "owner": "owner", + "pa": "pack", + "pac": "pack", + "pack": "pack", + "pi": "ping", + "pin": "ping", + "ping": "ping", + "pk": "pkg", + "pkg": "pkg", + "pre": "prefix", + "pref": "prefix", + "prefi": "prefix", + "prefix": "prefix", + "pro": "profile", + "prof": "profile", + "profi": "profile", + "profil": "profile", + "profile": "profile", + "pru": "prune", + "prun": "prune", + "prune": "prune", + "pu": "publish", + "pub": "publish", + "publ": "publish", + "publi": "publish", + "publis": "publish", + "publish": "publish", + "q": "query", + "qu": "query", + "que": "query", + "quer": "query", + "query": "query", + "r": "r", + "rb": "rb", + "reb": "rebuild", + "rebu": "rebuild", + "rebui": "rebuild", + "rebuil": "rebuild", + "rebuild": "rebuild", + "rem": "remove", + "remo": "remove", + "remov": "remove", + "remove": "remove", + "rep": "repo", + "repo": "repo", + "res": "restart", + "rest": "restart", + "resta": "restart", + "restar": "restart", + "restart": "restart", + "rm": "rm", + "ro": "root", + "roo": "root", + "root": "root", + "rum": "rum", + "run": "run", + "run-": "run-script", + "run-s": "run-script", + "run-sc": "run-script", + "run-scr": "run-script", + "run-scri": "run-script", + "run-scrip": "run-script", + "run-script": "run-script", + "s": "s", + "se": "se", + "sea": "search", + "sear": "search", + "searc": "search", + "search": "search", + "set": "set", + "set-": "set-script", + "set-s": "set-script", + "set-sc": "set-script", + "set-scr": "set-script", + "set-scri": "set-script", + "set-scrip": "set-script", + "set-script": "set-script", + "sho": "show", + "show": "show", + "shr": "shrinkwrap", + "shri": "shrinkwrap", + "shrin": "shrinkwrap", + "shrink": "shrinkwrap", + "shrinkw": "shrinkwrap", + "shrinkwr": "shrinkwrap", + "shrinkwra": "shrinkwrap", + "shrinkwrap": "shrinkwrap", + "si": "sit", + "sit": "sit", + "star": "star", + "stars": "stars", + "start": "start", + "sto": "stop", + "stop": "stop", + "t": "t", + "tea": "team", + "team": "team", + "tes": "test", + "test": "test", + "to": "token", + "tok": "token", + "toke": "token", + "token": "token", + "ts": "tst", + "tst": "tst", + "ud": "udpate", + "udp": "udpate", + "udpa": "udpate", + "udpat": "udpate", + "udpate": "udpate", + "un": "un", + "uni": "uninstall", + "unin": "uninstall", + "unins": "uninstall", + "uninst": "uninstall", + "uninsta": "uninstall", + "uninstal": "uninstall", + "uninstall": "uninstall", + "unl": "unlink", + "unli": "unlink", + "unlin": "unlink", + "unlink": "unlink", + "unp": "unpublish", + "unpu": "unpublish", + "unpub": "unpublish", + "unpubl": "unpublish", + "unpubli": "unpublish", + "unpublis": "unpublish", + "unpublish": "unpublish", + "uns": "unstar", + "unst": "unstar", + "unsta": "unstar", + "unstar": "unstar", + "up": "up", + "upd": "update", + "upda": "update", + "updat": "update", + "update": "update", + "upg": "upgrade", + "upgr": "upgrade", + "upgra": "upgrade", + "upgrad": "upgrade", + "upgrade": "upgrade", + "ur": "urn", + "urn": "urn", + "v": "v", + "veri": "verison", + "veris": "verison", + "veriso": "verison", + "verison": "verison", + "vers": "version", + "versi": "version", + "versio": "version", + "version": "version", + "vi": "view", + "vie": "view", + "view": "view", + "who": "whoami", + "whoa": "whoami", + "whoam": "whoami", + "whoami": "whoami", + "why": "why", + "x": "x", +} +` + +exports[`test/lib/docs.js TAP command list > aliases 1`] = ` +Object { + "add": "install", + "add-user": "adduser", + "author": "owner", + "c": "config", + "cit": "install-ci-test", + "clean-install": "ci", + "clean-install-test": "cit", + "create": "init", + "ddp": "dedupe", + "dist-tags": "dist-tag", + "find": "search", + "hlep": "help", + "home": "docs", + "i": "install", + "ic": "ci", + "in": "install", + "info": "view", + "innit": "init", + "ins": "install", + "inst": "install", + "insta": "install", + "instal": "install", + "install-clean": "ci", + "isnt": "install", + "isnta": "install", + "isntal": "install", + "isntall": "install", + "isntall-clean": "ci", + "issues": "bugs", + "it": "install-test", + "la": "ll", + "list": "ls", + "ln": "link", + "login": "adduser", + "ogr": "org", + "r": "uninstall", + "rb": "rebuild", + "remove": "uninstall", + "rm": "uninstall", + "rum": "run-script", + "run": "run-script", + "s": "search", + "se": "search", + "show": "view", + "sit": "cit", + "t": "test", + "tst": "test", + "udpate": "update", + "un": "uninstall", + "unlink": "uninstall", + "up": "update", + "upgrade": "update", + "urn": "run-script", + "v": "view", + "verison": "version", + "why": "explain", + "x": "exec", +} +` + +exports[`test/lib/docs.js TAP command list > allCommands 1`] = ` +Array [ + "access", + "adduser", + "audit", + "bin", + "birthday", + "bugs", + "cache", + "ci", + "completion", + "config", + "dedupe", + "deprecate", + "diff", + "dist-tag", + "docs", + "doctor", + "edit", + "exec", + "explain", + "explore", + "find-dupes", + "fund", + "get", + "help", + "help-search", + "hook", + "init", + "install", + "install-ci-test", + "install-test", + "link", + "ll", + "login", + "logout", + "ls", + "org", + "outdated", + "owner", + "pack", + "ping", + "pkg", + "prefix", + "profile", + "prune", + "publish", + "query", + "rebuild", + "repo", + "restart", + "root", + "run-script", + "search", + "set", + "set-script", + "shrinkwrap", + "star", + "stars", + "start", + "stop", + "team", + "test", + "token", + "uninstall", + "unpublish", + "unstar", + "update", + "version", + "view", + "whoami", +] +` + +exports[`test/lib/docs.js TAP command list > commands 1`] = ` +Array [ + "access", + "adduser", + "audit", + "bin", + "bugs", + "cache", + "ci", + "completion", + "config", + "dedupe", + "deprecate", + "diff", + "dist-tag", + "docs", + "doctor", + "edit", + "exec", + "explain", + "explore", + "find-dupes", + "fund", + "get", + "help", + "hook", + "init", + "install", + "install-ci-test", + "install-test", + "link", + "ll", + "login", + "logout", + "ls", + "org", + "outdated", + "owner", + "pack", + "ping", + "pkg", + "prefix", + "profile", + "prune", + "publish", + "query", + "rebuild", + "repo", + "restart", + "root", + "run-script", + "search", + "set", + "set-script", + "shrinkwrap", + "star", + "stars", + "start", + "stop", + "team", + "test", + "token", + "uninstall", + "unpublish", + "unstar", + "update", + "version", + "view", + "whoami", +] +` + +exports[`test/lib/docs.js TAP command list > plumbing 1`] = ` +Array [ + "birthday", + "help-search", +] +` + +exports[`test/lib/docs.js TAP config > all definitions 1`] = ` +#### \`_auth\` + +* Default: null +* Type: null or String + +A basic-auth string to use when authenticating against the npm registry. +This will ONLY be used to authenticate against the npm registry. For other +registries you will need to scope it like "//other-registry.tld/:_auth" + +Warning: This should generally not be set via a command-line option. It is +safer to use a registry-provided authentication bearer token stored in the +~/.npmrc file by running \`npm login\`. + +#### \`access\` + +* Default: 'restricted' for scoped packages, 'public' for unscoped packages +* Type: null, "restricted", or "public" + +When publishing scoped packages, the access level defaults to \`restricted\`. +If you want your scoped package to be publicly viewable (and installable) +set \`--access=public\`. The only valid values for \`access\` are \`public\` and +\`restricted\`. Unscoped packages _always_ have an access level of \`public\`. + +Note: Using the \`--access\` flag on the \`npm publish\` command will only set +the package access level on the initial publish of the package. Any +subsequent \`npm publish\` commands using the \`--access\` flag will not have an +effect to the access level. To make changes to the access level after the +initial publish use \`npm access\`. + +#### \`all\` + +* Default: false +* Type: Boolean + +When running \`npm outdated\` and \`npm ls\`, setting \`--all\` will show all +outdated or installed packages, rather than only those directly depended +upon by the current project. + +#### \`allow-same-version\` + +* Default: false +* Type: Boolean + +Prevents throwing an error when \`npm version\` is used to set the new version +to the same value as the current version. + +#### \`audit\` + +* Default: true +* Type: Boolean + +When "true" submit audit reports alongside the current npm command to the +default registry and all registries configured for scopes. See the +documentation for [\`npm audit\`](/commands/npm-audit) for details on what is +submitted. + +#### \`audit-level\` + +* Default: null +* Type: null, "info", "low", "moderate", "high", "critical", or "none" + +The minimum level of vulnerability for \`npm audit\` to exit with a non-zero +exit code. + +#### \`auth-type\` + +* Default: "legacy" +* Type: "legacy", "web", "sso", "saml", "oauth", or "webauthn" + +NOTE: auth-type values "sso", "saml", "oauth", and "webauthn" will be +removed in a future version. + +What authentication strategy to use with \`login\`. + +#### \`before\` + +* Default: null +* Type: null or Date + +If passed to \`npm install\`, will rebuild the npm tree such that only +versions that were available **on or before** the \`--before\` time get +installed. If there's no versions available for the current set of direct +dependencies, the command will error. + +If the requested version is a \`dist-tag\` and the given tag does not pass the +\`--before\` filter, the most recent version less than or equal to that tag +will be used. For example, \`foo@latest\` might install \`foo@1.2\` even though +\`latest\` is \`2.0\`. + +#### \`bin-links\` + +* Default: true +* Type: Boolean + +Tells npm to create symlinks (or \`.cmd\` shims on Windows) for package +executables. + +Set to false to have it not do this. This can be used to work around the +fact that some file systems don't support symlinks, even on ostensibly Unix +systems. + +#### \`browser\` + +* Default: OS X: \`"open"\`, Windows: \`"start"\`, Others: \`"xdg-open"\` +* Type: null, Boolean, or String + +The browser that is called by npm commands to open websites. + +Set to \`false\` to suppress browser behavior and instead print urls to +terminal. + +Set to \`true\` to use default system URL opener. + +#### \`ca\` + +* Default: null +* Type: null or String (can be set multiple times) + +The Certificate Authority signing certificate that is trusted for SSL +connections to the registry. Values should be in PEM format (Windows calls +it "Base-64 encoded X.509 (.CER)") with newlines replaced by the string +"\\n". For example: + +\`\`\`ini +ca="-----BEGIN CERTIFICATE-----\\nXXXX\\nXXXX\\n-----END CERTIFICATE-----" +\`\`\` + +Set to \`null\` to only allow "known" registrars, or to a specific CA cert to +trust only that specific signing authority. + +Multiple CAs can be trusted by specifying an array of certificates: + +\`\`\`ini +ca[]="..." +ca[]="..." +\`\`\` + +See also the \`strict-ssl\` config. + +#### \`cache\` + +* Default: Windows: \`%LocalAppData%\\npm-cache\`, Posix: \`~/.npm\` +* Type: Path + +The location of npm's cache directory. See [\`npm +cache\`](/commands/npm-cache) + +#### \`cafile\` + +* Default: null +* Type: Path + +A path to a file containing one or multiple Certificate Authority signing +certificates. Similar to the \`ca\` setting, but allows for multiple CA's, as +well as for the CA information to be stored in a file on disk. + +#### \`call\` + +* Default: "" +* Type: String + +Optional companion option for \`npm exec\`, \`npx\` that allows for specifying a +custom command to be run along with the installed packages. + +\`\`\`bash +npm exec --package yo --package generator-node --call "yo node" +\`\`\` + + +#### \`cert\` + +* Default: null +* Type: null or String + +A client certificate to pass when accessing the registry. Values should be +in PEM format (Windows calls it "Base-64 encoded X.509 (.CER)") with +newlines replaced by the string "\\n". For example: + +\`\`\`ini +cert="-----BEGIN CERTIFICATE-----\\nXXXX\\nXXXX\\n-----END CERTIFICATE-----" +\`\`\` + +It is _not_ the path to a certificate file, though you can set a +registry-scoped "certfile" path like +"//other-registry.tld/:certfile=/path/to/cert.pem". + +#### \`ci-name\` + +* Default: The name of the current CI system, or \`null\` when not on a known CI + platform. +* Type: null or String + +The name of a continuous integration system. If not set explicitly, npm will +detect the current CI environment using the +[\`@npmcli/ci-detect\`](http://npm.im/@npmcli/ci-detect) module. + +#### \`cidr\` + +* Default: null +* Type: null or String (can be set multiple times) + +This is a list of CIDR address to be used when configuring limited access +tokens with the \`npm token create\` command. + +#### \`color\` + +* Default: true unless the NO_COLOR environ is set to something other than '0' +* Type: "always" or Boolean + +If false, never shows colors. If \`"always"\` then always shows colors. If +true, then only prints color codes for tty file descriptors. + +#### \`commit-hooks\` + +* Default: true +* Type: Boolean + +Run git commit hooks when using the \`npm version\` command. + +#### \`depth\` + +* Default: \`Infinity\` if \`--all\` is set, otherwise \`1\` +* Type: null or Number + +The depth to go when recursing packages for \`npm ls\`. + +If not set, \`npm ls\` will show only the immediate dependencies of the root +project. If \`--all\` is set, then npm will show all dependencies by default. + +#### \`description\` + +* Default: true +* Type: Boolean + +Show the description in \`npm search\` + +#### \`diff\` + +* Default: +* Type: String (can be set multiple times) + +Define arguments to compare in \`npm diff\`. + +#### \`diff-dst-prefix\` + +* Default: "b/" +* Type: String + +Destination prefix to be used in \`npm diff\` output. + +#### \`diff-ignore-all-space\` + +* Default: false +* Type: Boolean + +Ignore whitespace when comparing lines in \`npm diff\`. + +#### \`diff-name-only\` + +* Default: false +* Type: Boolean + +Prints only filenames when using \`npm diff\`. + +#### \`diff-no-prefix\` + +* Default: false +* Type: Boolean + +Do not show any source or destination prefix in \`npm diff\` output. + +Note: this causes \`npm diff\` to ignore the \`--diff-src-prefix\` and +\`--diff-dst-prefix\` configs. + +#### \`diff-src-prefix\` + +* Default: "a/" +* Type: String + +Source prefix to be used in \`npm diff\` output. + +#### \`diff-text\` + +* Default: false +* Type: Boolean + +Treat all files as text in \`npm diff\`. + +#### \`diff-unified\` + +* Default: 3 +* Type: Number + +The number of lines of context to print in \`npm diff\`. + +#### \`dry-run\` + +* Default: false +* Type: Boolean + +Indicates that you don't want npm to make any changes and that it should +only report what it would have done. This can be passed into any of the +commands that modify your local installation, eg, \`install\`, \`update\`, +\`dedupe\`, \`uninstall\`, as well as \`pack\` and \`publish\`. + +Note: This is NOT honored by other network related commands, eg \`dist-tags\`, +\`owner\`, etc. + +#### \`editor\` + +* Default: The EDITOR or VISUAL environment variables, or 'notepad.exe' on + Windows, or 'vim' on Unix systems +* Type: String + +The command to run for \`npm edit\` and \`npm config edit\`. + +#### \`engine-strict\` + +* Default: false +* Type: Boolean + +If set to true, then npm will stubbornly refuse to install (or even consider +installing) any package that claims to not be compatible with the current +Node.js version. + +This can be overridden by setting the \`--force\` flag. + +#### \`fetch-retries\` + +* Default: 2 +* Type: Number + +The "retries" config for the \`retry\` module to use when fetching packages +from the registry. + +npm will retry idempotent read requests to the registry in the case of +network failures or 5xx HTTP errors. + +#### \`fetch-retry-factor\` + +* Default: 10 +* Type: Number + +The "factor" config for the \`retry\` module to use when fetching packages. + +#### \`fetch-retry-maxtimeout\` + +* Default: 60000 (1 minute) +* Type: Number + +The "maxTimeout" config for the \`retry\` module to use when fetching +packages. + +#### \`fetch-retry-mintimeout\` + +* Default: 10000 (10 seconds) +* Type: Number + +The "minTimeout" config for the \`retry\` module to use when fetching +packages. + +#### \`fetch-timeout\` + +* Default: 300000 (5 minutes) +* Type: Number + +The maximum amount of time to wait for HTTP requests to complete. + +#### \`force\` + +* Default: false +* Type: Boolean + +Removes various protections against unfortunate side effects, common +mistakes, unnecessary performance degradation, and malicious input. + +* Allow clobbering non-npm files in global installs. +* Allow the \`npm version\` command to work on an unclean git repository. +* Allow deleting the cache folder with \`npm cache clean\`. +* Allow installing packages that have an \`engines\` declaration requiring a + different version of npm. +* Allow installing packages that have an \`engines\` declaration requiring a + different version of \`node\`, even if \`--engine-strict\` is enabled. +* Allow \`npm audit fix\` to install modules outside your stated dependency + range (including SemVer-major changes). +* Allow unpublishing all versions of a published package. +* Allow conflicting peerDependencies to be installed in the root project. +* Implicitly set \`--yes\` during \`npm init\`. +* Allow clobbering existing values in \`npm pkg\` +* Allow unpublishing of entire packages (not just a single version). + +If you don't have a clear idea of what you want to do, it is strongly +recommended that you do not use this option! + +#### \`foreground-scripts\` + +* Default: false +* Type: Boolean + +Run all build scripts (ie, \`preinstall\`, \`install\`, and \`postinstall\`) +scripts for installed packages in the foreground process, sharing standard +input, output, and error with the main npm process. + +Note that this will generally make installs run slower, and be much noisier, +but can be useful for debugging. + +#### \`format-package-lock\` + +* Default: true +* Type: Boolean + +Format \`package-lock.json\` or \`npm-shrinkwrap.json\` as a human readable +file. + +#### \`fund\` + +* Default: true +* Type: Boolean + +When "true" displays the message at the end of each \`npm install\` +acknowledging the number of dependencies looking for funding. See [\`npm +fund\`](/commands/npm-fund) for details. + +#### \`git\` + +* Default: "git" +* Type: String + +The command to use for git commands. If git is installed on the computer, +but is not in the \`PATH\`, then set this to the full path to the git binary. + +#### \`git-tag-version\` + +* Default: true +* Type: Boolean + +Tag the commit when using the \`npm version\` command. Setting this to false +results in no commit being made at all. + +#### \`global\` + +* Default: false +* Type: Boolean + +Operates in "global" mode, so that packages are installed into the \`prefix\` +folder instead of the current working directory. See +[folders](/configuring-npm/folders) for more on the differences in behavior. + +* packages are installed into the \`{prefix}/lib/node_modules\` folder, instead + of the current working directory. +* bin files are linked to \`{prefix}/bin\` +* man pages are linked to \`{prefix}/share/man\` + +#### \`global-style\` + +* Default: false +* Type: Boolean + +Causes npm to install the package into your local \`node_modules\` folder with +the same layout it uses with the global \`node_modules\` folder. Only your +direct dependencies will show in \`node_modules\` and everything they depend +on will be flattened in their \`node_modules\` folders. This obviously will +eliminate some deduping. If used with \`legacy-bundling\`, \`legacy-bundling\` +will be preferred. + +#### \`globalconfig\` + +* Default: The global --prefix setting plus 'etc/npmrc'. For example, + '/usr/local/etc/npmrc' +* Type: Path + +The config file to read for global config options. + +#### \`heading\` + +* Default: "npm" +* Type: String + +The string that starts all the debugging log output. + +#### \`https-proxy\` + +* Default: null +* Type: null or URL + +A proxy to use for outgoing https requests. If the \`HTTPS_PROXY\` or +\`https_proxy\` or \`HTTP_PROXY\` or \`http_proxy\` environment variables are set, +proxy settings will be honored by the underlying \`make-fetch-happen\` +library. + +#### \`if-present\` + +* Default: false +* Type: Boolean + +If true, npm will not exit with an error code when \`run-script\` is invoked +for a script that isn't defined in the \`scripts\` section of \`package.json\`. +This option can be used when it's desirable to optionally run a script when +it's present and fail if the script fails. This is useful, for example, when +running scripts that may only apply for some builds in an otherwise generic +CI setup. + +This value is not exported to the environment for child processes. + +#### \`ignore-scripts\` + +* Default: false +* Type: Boolean + +If true, npm does not run scripts specified in package.json files. + +Note that commands explicitly intended to run a particular script, such as +\`npm start\`, \`npm stop\`, \`npm restart\`, \`npm test\`, and \`npm run-script\` +will still run their intended script if \`ignore-scripts\` is set, but they +will *not* run any pre- or post-scripts. + +#### \`include\` + +* Default: +* Type: "prod", "dev", "optional", or "peer" (can be set multiple times) + +Option that allows for defining which types of dependencies to install. + +This is the inverse of \`--omit=\`. + +Dependency types specified in \`--include\` will not be omitted, regardless of +the order in which omit/include are specified on the command-line. + +#### \`include-staged\` + +* Default: false +* Type: Boolean + +Allow installing "staged" published packages, as defined by [npm RFC PR +#92](https://github.com/npm/rfcs/pull/92). + +This is experimental, and not implemented by the npm public registry. + +#### \`include-workspace-root\` + +* Default: false +* Type: Boolean + +Include the workspace root when workspaces are enabled for a command. + +When false, specifying individual workspaces via the \`workspace\` config, or +all workspaces via the \`workspaces\` flag, will cause npm to operate only on +the specified workspaces, and not on the root project. + +This value is not exported to the environment for child processes. + +#### \`init-author-email\` + +* Default: "" +* Type: String + +The value \`npm init\` should use by default for the package author's email. + +#### \`init-author-name\` + +* Default: "" +* Type: String + +The value \`npm init\` should use by default for the package author's name. + +#### \`init-author-url\` + +* Default: "" +* Type: "" or URL + +The value \`npm init\` should use by default for the package author's +homepage. + +#### \`init-license\` + +* Default: "ISC" +* Type: String + +The value \`npm init\` should use by default for the package license. + +#### \`init-module\` + +* Default: "~/.npm-init.js" +* Type: Path + +A module that will be loaded by the \`npm init\` command. See the +documentation for the +[init-package-json](https://github.com/npm/init-package-json) module for +more information, or [npm init](/commands/npm-init). + +#### \`init-version\` + +* Default: "1.0.0" +* Type: SemVer string + +The value that \`npm init\` should use by default for the package version +number, if not already set in package.json. + +#### \`install-links\` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + +#### \`json\` + +* Default: false +* Type: Boolean + +Whether or not to output JSON data, rather than the normal output. + +* In \`npm pkg set\` it enables parsing set values with JSON.parse() before + saving them to your \`package.json\`. + +Not supported by all npm commands. + +#### \`key\` + +* Default: null +* Type: null or String + +A client key to pass when accessing the registry. Values should be in PEM +format with newlines replaced by the string "\\n". For example: + +\`\`\`ini +key="-----BEGIN PRIVATE KEY-----\\nXXXX\\nXXXX\\n-----END PRIVATE KEY-----" +\`\`\` + +It is _not_ the path to a key file, though you can set a registry-scoped +"keyfile" path like "//other-registry.tld/:keyfile=/path/to/key.pem". + +#### \`legacy-bundling\` + +* Default: false +* Type: Boolean + +Causes npm to install the package such that versions of npm prior to 1.4, +such as the one included with node 0.8, can install the package. This +eliminates all automatic deduping. If used with \`global-style\` this option +will be preferred. + +#### \`legacy-peer-deps\` + +* Default: false +* Type: Boolean + +Causes npm to completely ignore \`peerDependencies\` when building a package +tree, as in npm versions 3 through 6. + +If a package cannot be installed because of overly strict \`peerDependencies\` +that collide, it provides a way to move forward resolving the situation. + +This differs from \`--omit=peer\`, in that \`--omit=peer\` will avoid unpacking +\`peerDependencies\` on disk, but will still design a tree such that +\`peerDependencies\` _could_ be unpacked in a correct place. + +Use of \`legacy-peer-deps\` is not recommended, as it will not enforce the +\`peerDependencies\` contract that meta-dependencies may rely on. + +#### \`link\` + +* Default: false +* Type: Boolean + +Used with \`npm ls\`, limiting output to only those packages that are linked. + +#### \`local-address\` + +* Default: null +* Type: IP Address + +The IP address of the local interface to use when making connections to the +npm registry. Must be IPv4 in versions of Node prior to 0.12. + +#### \`location\` + +* Default: "user" unless \`--global\` is passed, which will also set this value + to "global" +* Type: "global", "user", or "project" + +When passed to \`npm config\` this refers to which config file to use. + +When set to "global" mode, packages are installed into the \`prefix\` folder +instead of the current working directory. See +[folders](/configuring-npm/folders) for more on the differences in behavior. + +* packages are installed into the \`{prefix}/lib/node_modules\` folder, instead + of the current working directory. +* bin files are linked to \`{prefix}/bin\` +* man pages are linked to \`{prefix}/share/man\` + +#### \`lockfile-version\` + +* Default: Version 2 if no lockfile or current lockfile version less than or + equal to 2, otherwise maintain current lockfile version +* Type: null, 1, 2, 3, "1", "2", or "3" + +Set the lockfile format version to be used in package-lock.json and +npm-shrinkwrap-json files. Possible options are: + +1: The lockfile version used by npm versions 5 and 6. Lacks some data that +is used during the install, resulting in slower and possibly less +deterministic installs. Prevents lockfile churn when interoperating with +older npm versions. + +2: The default lockfile version used by npm version 7. Includes both the +version 1 lockfile data and version 3 lockfile data, for maximum determinism +and interoperability, at the expense of more bytes on disk. + +3: Only the new lockfile information introduced in npm version 7. Smaller on +disk than lockfile version 2, but not interoperable with older npm versions. +Ideal if all users are on npm version 7 and higher. + +#### \`loglevel\` + +* Default: "notice" +* Type: "silent", "error", "warn", "notice", "http", "timing", "info", + "verbose", or "silly" + +What level of logs to report. All logs are written to a debug log, with the +path to that file printed if the execution of a command fails. + +Any logs of a higher level than the setting are shown. The default is +"notice". + +See also the \`foreground-scripts\` config. + +#### \`logs-dir\` + +* Default: A directory named \`_logs\` inside the cache +* Type: null or Path + +The location of npm's log directory. See [\`npm logging\`](/using-npm/logging) +for more information. + +#### \`logs-max\` + +* Default: 10 +* Type: Number + +The maximum number of log files to store. + +If set to 0, no log files will be written for the current run. + +#### \`long\` + +* Default: false +* Type: Boolean + +Show extended information in \`ls\`, \`search\`, and \`help-search\`. + +#### \`maxsockets\` + +* Default: 15 +* Type: Number + +The maximum number of connections to use per origin (protocol/host/port +combination). + +#### \`message\` + +* Default: "%s" +* Type: String + +Commit message which is used by \`npm version\` when creating version commit. + +Any "%s" in the message will be replaced with the version number. + +#### \`node-options\` + +* Default: null +* Type: null or String + +Options to pass through to Node.js via the \`NODE_OPTIONS\` environment +variable. This does not impact how npm itself is executed but it does impact +how lifecycle scripts are called. + +#### \`node-version\` + +* Default: Node.js \`process.version\` value +* Type: SemVer string + +The node version to use when checking a package's \`engines\` setting. + +#### \`noproxy\` + +* Default: The value of the NO_PROXY environment variable +* Type: String (can be set multiple times) + +Domain extensions that should bypass any proxies. + +Also accepts a comma-delimited string. + +#### \`npm-version\` + +* Default: Output of \`npm --version\` +* Type: SemVer string + +The npm version to use when checking a package's \`engines\` setting. + +#### \`offline\` + +* Default: false +* Type: Boolean + +Force offline mode: no network requests will be done during install. To +allow the CLI to fill in missing cache data, see \`--prefer-offline\`. + +#### \`omit\` + +* Default: 'dev' if the \`NODE_ENV\` environment variable is set to + 'production', otherwise empty. +* Type: "dev", "optional", or "peer" (can be set multiple times) + +Dependency types to omit from the installation tree on disk. + +Note that these dependencies _are_ still resolved and added to the +\`package-lock.json\` or \`npm-shrinkwrap.json\` file. They are just not +physically installed on disk. + +If a package type appears in both the \`--include\` and \`--omit\` lists, then +it will be included. + +If the resulting omit list includes \`'dev'\`, then the \`NODE_ENV\` environment +variable will be set to \`'production'\` for all lifecycle scripts. + +#### \`omit-lockfile-registry-resolved\` + +* Default: false +* Type: Boolean + +This option causes npm to create lock files without a \`resolved\` key for +registry dependencies. Subsequent installs will need to resolve tarball +endpoints with the configured registry, likely resulting in a longer install +time. + +#### \`otp\` + +* Default: null +* Type: null or String + +This is a one-time password from a two-factor authenticator. It's needed +when publishing or changing package permissions with \`npm access\`. + +If not set, and a registry response fails with a challenge for a one-time +password, npm will prompt on the command line for one. + +#### \`pack-destination\` + +* Default: "." +* Type: String + +Directory in which \`npm pack\` will save tarballs. + +#### \`package\` + +* Default: +* Type: String (can be set multiple times) + +The package or packages to install for [\`npm exec\`](/commands/npm-exec) + +#### \`package-lock\` + +* Default: true +* Type: Boolean + +If set to false, then ignore \`package-lock.json\` files when installing. This +will also prevent _writing_ \`package-lock.json\` if \`save\` is true. + +This configuration does not affect \`npm ci\`. + +#### \`package-lock-only\` + +* Default: false +* Type: Boolean + +If set to true, the current operation will only use the \`package-lock.json\`, +ignoring \`node_modules\`. + +For \`update\` this means only the \`package-lock.json\` will be updated, +instead of checking \`node_modules\` and downloading dependencies. + +For \`list\` this means the output will be based on the tree described by the +\`package-lock.json\`, rather than the contents of \`node_modules\`. + +#### \`parseable\` + +* Default: false +* Type: Boolean + +Output parseable results from commands that write to standard output. For +\`npm search\`, this will be tab-separated table format. + +#### \`prefer-offline\` + +* Default: false +* Type: Boolean + +If true, staleness checks for cached data will be bypassed, but missing data +will be requested from the server. To force full offline mode, use +\`--offline\`. + +#### \`prefer-online\` + +* Default: false +* Type: Boolean + +If true, staleness checks for cached data will be forced, making the CLI +look for updates immediately even for fresh package data. + +#### \`prefix\` + +* Default: In global mode, the folder where the node executable is installed. + In local mode, the nearest parent folder containing either a package.json + file or a node_modules folder. +* Type: Path + +The location to install global items. If set on the command line, then it +forces non-global commands to run in the specified folder. + +#### \`preid\` + +* Default: "" +* Type: String + +The "prerelease identifier" to use as a prefix for the "prerelease" part of +a semver. Like the \`rc\` in \`1.2.0-rc.8\`. + +#### \`progress\` + +* Default: \`true\` unless running in a known CI system +* Type: Boolean + +When set to \`true\`, npm will display a progress bar during time intensive +operations, if \`process.stderr\` is a TTY. + +Set to \`false\` to suppress the progress bar. + +#### \`proxy\` + +* Default: null +* Type: null, false, or URL + +A proxy to use for outgoing http requests. If the \`HTTP_PROXY\` or +\`http_proxy\` environment variables are set, proxy settings will be honored +by the underlying \`request\` library. + +#### \`read-only\` + +* Default: false +* Type: Boolean + +This is used to mark a token as unable to publish when configuring limited +access tokens with the \`npm token create\` command. + +#### \`rebuild-bundle\` + +* Default: true +* Type: Boolean + +Rebuild bundled dependencies after installation. + +#### \`registry\` + +* Default: "https://registry.npmjs.org/" +* Type: URL + +The base URL of the npm registry. + +#### \`replace-registry-host\` + +* Default: "npmjs" +* Type: "npmjs", "never", "always", or String + +Defines behavior for replacing the registry host in a lockfile with the +configured registry. + +The default behavior is to replace package dist URLs from the default +registry (https://registry.npmjs.org) to the configured registry. If set to +"never", then use the registry value. If set to "always", then replace the +registry host with the configured host every time. + +You may also specify a bare hostname (e.g., "registry.npmjs.org"). + +#### \`save\` + +* Default: \`true\` unless when using \`npm update\` where it defaults to \`false\` +* Type: Boolean + +Save installed packages to a \`package.json\` file as dependencies. + +When used with the \`npm rm\` command, removes the dependency from +\`package.json\`. + +Will also prevent writing to \`package-lock.json\` if set to \`false\`. + +#### \`save-bundle\` + +* Default: false +* Type: Boolean + +If a package would be saved at install time by the use of \`--save\`, +\`--save-dev\`, or \`--save-optional\`, then also put it in the +\`bundleDependencies\` list. + +Ignored if \`--save-peer\` is set, since peerDependencies cannot be bundled. + +#### \`save-dev\` + +* Default: false +* Type: Boolean + +Save installed packages to a package.json file as \`devDependencies\`. + +#### \`save-exact\` + +* Default: false +* Type: Boolean + +Dependencies saved to package.json will be configured with an exact version +rather than using npm's default semver range operator. + +#### \`save-optional\` + +* Default: false +* Type: Boolean + +Save installed packages to a package.json file as \`optionalDependencies\`. + +#### \`save-peer\` + +* Default: false +* Type: Boolean + +Save installed packages to a package.json file as \`peerDependencies\` + +#### \`save-prefix\` + +* Default: "^" +* Type: String + +Configure how versions of packages installed to a package.json file via +\`--save\` or \`--save-dev\` get prefixed. + +For example if a package has version \`1.2.3\`, by default its version is set +to \`^1.2.3\` which allows minor upgrades for that package, but after \`npm +config set save-prefix='~'\` it would be set to \`~1.2.3\` which only allows +patch upgrades. + +#### \`save-prod\` + +* Default: false +* Type: Boolean + +Save installed packages into \`dependencies\` specifically. This is useful if +a package already exists in \`devDependencies\` or \`optionalDependencies\`, but +you want to move it to be a non-optional production dependency. + +This is the default behavior if \`--save\` is true, and neither \`--save-dev\` +or \`--save-optional\` are true. + +#### \`scope\` + +* Default: the scope of the current project, if any, or "" +* Type: String + +Associate an operation with a scope for a scoped registry. + +Useful when logging in to or out of a private registry: + +\`\`\` +# log in, linking the scope to the custom registry +npm login --scope=@mycorp --registry=https://registry.mycorp.com + +# log out, removing the link and the auth token +npm logout --scope=@mycorp +\`\`\` + +This will cause \`@mycorp\` to be mapped to the registry for future +installation of packages specified according to the pattern +\`@mycorp/package\`. + +This will also cause \`npm init\` to create a scoped package. + +\`\`\` +# accept all defaults, and create a package named "@foo/whatever", +# instead of just named "whatever" +npm init --scope=@foo --yes +\`\`\` + + +#### \`script-shell\` + +* Default: '/bin/sh' on POSIX systems, 'cmd.exe' on Windows +* Type: null or String + +The shell to use for scripts run with the \`npm exec\`, \`npm run\` and \`npm +init \` commands. + +#### \`searchexclude\` + +* Default: "" +* Type: String + +Space-separated options that limit the results from search. + +#### \`searchlimit\` + +* Default: 20 +* Type: Number + +Number of items to limit search results to. Will not apply at all to legacy +searches. + +#### \`searchopts\` + +* Default: "" +* Type: String + +Space-separated options that are always passed to search. + +#### \`searchstaleness\` + +* Default: 900 +* Type: Number + +The age of the cache, in seconds, before another registry request is made if +using legacy search endpoint. + +#### \`shell\` + +* Default: SHELL environment variable, or "bash" on Posix, or "cmd.exe" on + Windows +* Type: String + +The shell to run for the \`npm explore\` command. + +#### \`sign-git-commit\` + +* Default: false +* Type: Boolean + +If set to true, then the \`npm version\` command will commit the new package +version using \`-S\` to add a signature. + +Note that git requires you to have set up GPG keys in your git configs for +this to work properly. + +#### \`sign-git-tag\` + +* Default: false +* Type: Boolean + +If set to true, then the \`npm version\` command will tag the version using +\`-s\` to add a signature. + +Note that git requires you to have set up GPG keys in your git configs for +this to work properly. + +#### \`strict-peer-deps\` + +* Default: false +* Type: Boolean + +If set to \`true\`, and \`--legacy-peer-deps\` is not set, then _any_ +conflicting \`peerDependencies\` will be treated as an install failure, even +if npm could reasonably guess the appropriate resolution based on non-peer +dependency relationships. + +By default, conflicting \`peerDependencies\` deep in the dependency graph will +be resolved using the nearest non-peer dependency specification, even if +doing so will result in some packages receiving a peer dependency outside +the range set in their package's \`peerDependencies\` object. + +When such and override is performed, a warning is printed, explaining the +conflict and the packages involved. If \`--strict-peer-deps\` is set, then +this warning is treated as a failure. + +#### \`strict-ssl\` + +* Default: true +* Type: Boolean + +Whether or not to do SSL key validation when making requests to the registry +via https. + +See also the \`ca\` config. + +#### \`tag\` + +* Default: "latest" +* Type: String + +If you ask npm to install a package and don't tell it a specific version, +then it will install the specified tag. + +Also the tag that is added to the package@version specified by the \`npm tag\` +command, if no explicit tag is given. + +When used by the \`npm diff\` command, this is the tag used to fetch the +tarball that will be compared with the local files by default. + +#### \`tag-version-prefix\` + +* Default: "v" +* Type: String + +If set, alters the prefix used when tagging a new version when performing a +version increment using \`npm-version\`. To remove the prefix altogether, set +it to the empty string: \`""\`. + +Because other tools may rely on the convention that npm version tags look +like \`v1.0.0\`, _only use this property if it is absolutely necessary_. In +particular, use care when overriding this setting for public packages. + +#### \`timing\` + +* Default: false +* Type: Boolean + +If true, writes a debug log to \`logs-dir\` and timing information to +\`_timing.json\` in the cache, even if the command completes successfully. +\`_timing.json\` is a newline delimited list of JSON objects. + +You can quickly view it with this [json](https://npm.im/json) command line: +\`npm exec -- json -g < ~/.npm/_timing.json\`. + +#### \`umask\` + +* Default: 0 +* Type: Octal numeric string in range 0000..0777 (0..511) + +The "umask" value to use when setting the file creation mode on files and +folders. + +Folders and executables are given a mode which is \`0o777\` masked against +this value. Other files are given a mode which is \`0o666\` masked against +this value. + +Note that the underlying system will _also_ apply its own umask value to +files and folders that are created, and npm does not circumvent this, but +rather adds the \`--umask\` config to it. + +Thus, the effective default umask value on most POSIX systems is 0o22, +meaning that folders and executables are created with a mode of 0o755 and +other files are created with a mode of 0o644. + +#### \`unicode\` + +* Default: false on windows, true on mac/unix systems with a unicode locale, + as defined by the \`LC_ALL\`, \`LC_CTYPE\`, or \`LANG\` environment variables. +* Type: Boolean + +When set to true, npm uses unicode characters in the tree output. When +false, it uses ascii characters instead of unicode glyphs. + +#### \`update-notifier\` + +* Default: true +* Type: Boolean + +Set to false to suppress the update notification when using an older version +of npm than the latest. + +#### \`usage\` + +* Default: false +* Type: Boolean + +Show short usage output about the command specified. + +#### \`user-agent\` + +* Default: "npm/{npm-version} node/{node-version} {platform} {arch} + workspaces/{workspaces} {ci}" +* Type: String + +Sets the User-Agent request header. The following fields are replaced with +their actual counterparts: + +* \`{npm-version}\` - The npm version in use +* \`{node-version}\` - The Node.js version in use +* \`{platform}\` - The value of \`process.platform\` +* \`{arch}\` - The value of \`process.arch\` +* \`{workspaces}\` - Set to \`true\` if the \`workspaces\` or \`workspace\` options + are set. +* \`{ci}\` - The value of the \`ci-name\` config, if set, prefixed with \`ci/\`, or + an empty string if \`ci-name\` is empty. + +#### \`userconfig\` + +* Default: "~/.npmrc" +* Type: Path + +The location of user-level configuration settings. + +This may be overridden by the \`npm_config_userconfig\` environment variable +or the \`--userconfig\` command line option, but may _not_ be overridden by +settings in the \`globalconfig\` file. + +#### \`version\` + +* Default: false +* Type: Boolean + +If true, output the npm version and exit successfully. + +Only relevant when specified explicitly on the command line. + +#### \`versions\` + +* Default: false +* Type: Boolean + +If true, output the npm version as well as node's \`process.versions\` map and +the version in the current working directory's \`package.json\` file if one +exists, and exit successfully. + +Only relevant when specified explicitly on the command line. + +#### \`viewer\` + +* Default: "man" on Posix, "browser" on Windows +* Type: String + +The program to use to view help content. + +Set to \`"browser"\` to view html help content in the default web browser. + +#### \`which\` + +* Default: null +* Type: null or Number + +If there are multiple funding sources, which 1-indexed source URL to open. + +#### \`workspace\` + +* Default: +* Type: String (can be set multiple times) + +Enable running a command in the context of the configured workspaces of the +current project while filtering by running only the workspaces defined by +this configuration option. + +Valid values for the \`workspace\` config are either: + +* Workspace names +* Path to a workspace directory +* Path to a parent workspace directory (will result in selecting all + workspaces within that folder) + +When set for the \`npm init\` command, this may be set to the folder of a +workspace which does not yet exist, to create the folder and set it up as a +brand new workspace within the project. + +This value is not exported to the environment for child processes. + +#### \`workspaces\` + +* Default: null +* Type: null or Boolean + +Set to true to run the command in the context of **all** configured +workspaces. + +Explicitly setting this to false will cause commands like \`install\` to +ignore workspaces altogether. When not set explicitly: + +- Commands that operate on the \`node_modules\` tree (install, update, etc.) +will link workspaces into the \`node_modules\` folder. - Commands that do +other things (test, exec, publish, etc.) will operate on the root project, +_unless_ one or more workspaces are specified in the \`workspace\` config. + +This value is not exported to the environment for child processes. + +#### \`workspaces-update\` + +* Default: true +* Type: Boolean + +If set to true, the npm cli will run an update after operations that may +possibly change the workspaces installed to the \`node_modules\` folder. + +#### \`yes\` + +* Default: null +* Type: null or Boolean + +Automatically answer "yes" to any prompts that npm might print on the +command line. + +#### \`also\` + +* Default: null +* Type: null, "dev", or "development" +* DEPRECATED: Please use --include=dev instead. + +When set to \`dev\` or \`development\`, this is an alias for \`--include=dev\`. + +#### \`cache-max\` + +* Default: Infinity +* Type: Number +* DEPRECATED: This option has been deprecated in favor of \`--prefer-online\` + +\`--cache-max=0\` is an alias for \`--prefer-online\` + +#### \`cache-min\` + +* Default: 0 +* Type: Number +* DEPRECATED: This option has been deprecated in favor of \`--prefer-offline\`. + +\`--cache-min=9999 (or bigger)\` is an alias for \`--prefer-offline\`. + +#### \`dev\` + +* Default: false +* Type: Boolean +* DEPRECATED: Please use --include=dev instead. + +Alias for \`--include=dev\`. + +#### \`init.author.email\` + +* Default: "" +* Type: String +* DEPRECATED: Use \`--init-author-email\` instead. + +Alias for \`--init-author-email\` + +#### \`init.author.name\` + +* Default: "" +* Type: String +* DEPRECATED: Use \`--init-author-name\` instead. + +Alias for \`--init-author-name\` + +#### \`init.author.url\` + +* Default: "" +* Type: "" or URL +* DEPRECATED: Use \`--init-author-url\` instead. + +Alias for \`--init-author-url\` + +#### \`init.license\` + +* Default: "ISC" +* Type: String +* DEPRECATED: Use \`--init-license\` instead. + +Alias for \`--init-license\` + +#### \`init.module\` + +* Default: "~/.npm-init.js" +* Type: Path +* DEPRECATED: Use \`--init-module\` instead. + +Alias for \`--init-module\` + +#### \`init.version\` + +* Default: "1.0.0" +* Type: SemVer string +* DEPRECATED: Use \`--init-version\` instead. + +Alias for \`--init-version\` + +#### \`only\` + +* Default: null +* Type: null, "prod", or "production" +* DEPRECATED: Use \`--omit=dev\` to omit dev dependencies from the install. + +When set to \`prod\` or \`production\`, this is an alias for \`--omit=dev\`. + +#### \`optional\` + +* Default: null +* Type: null or Boolean +* DEPRECATED: Use \`--omit=optional\` to exclude optional dependencies, or + \`--include=optional\` to include them. + +Default value does install optional deps unless otherwise omitted. + +Alias for --include=optional or --omit=optional + +#### \`production\` + +* Default: null +* Type: null or Boolean +* DEPRECATED: Use \`--omit=dev\` instead. + +Alias for \`--omit=dev\` + +#### \`shrinkwrap\` + +* Default: true +* Type: Boolean +* DEPRECATED: Use the --package-lock setting instead. + +Alias for --package-lock + +#### \`sso-poll-frequency\` + +* Default: 500 +* Type: Number +* DEPRECATED: The --auth-type method of SSO/SAML/OAuth will be removed in a + future version of npm in favor of web-based login. + +When used with SSO-enabled \`auth-type\`s, configures how regularly the +registry should be polled while the user is completing authentication. + +#### \`sso-type\` + +* Default: "oauth" +* Type: null, "oauth", or "saml" +* DEPRECATED: The --auth-type method of SSO/SAML/OAuth will be removed in a + future version of npm in favor of web-based login. + +If \`--auth-type=sso\`, the type of SSO type to use. + +#### \`tmp\` + +* Default: The value returned by the Node.js \`os.tmpdir()\` method + +* Type: Path +* DEPRECATED: This setting is no longer used. npm stores temporary files in a + special location in the cache, and they are managed by + [\`cacache\`](http://npm.im/cacache). + +Historically, the location where temporary files were stored. No longer +relevant. +` + +exports[`test/lib/docs.js TAP config > all keys 1`] = ` +Array [ + "_auth", + "access", + "all", + "allow-same-version", + "also", + "audit", + "audit-level", + "auth-type", + "before", + "bin-links", + "browser", + "ca", + "cache", + "cache-max", + "cache-min", + "cafile", + "call", + "cert", + "ci-name", + "cidr", + "color", + "commit-hooks", + "depth", + "description", + "dev", + "diff", + "diff-ignore-all-space", + "diff-name-only", + "diff-no-prefix", + "diff-dst-prefix", + "diff-src-prefix", + "diff-text", + "diff-unified", + "dry-run", + "editor", + "engine-strict", + "fetch-retries", + "fetch-retry-factor", + "fetch-retry-maxtimeout", + "fetch-retry-mintimeout", + "fetch-timeout", + "force", + "foreground-scripts", + "format-package-lock", + "fund", + "git", + "git-tag-version", + "global", + "global-style", + "globalconfig", + "heading", + "https-proxy", + "if-present", + "ignore-scripts", + "include", + "include-staged", + "include-workspace-root", + "init-author-email", + "init-author-name", + "init-author-url", + "init-license", + "init-module", + "init-version", + "init.author.email", + "init.author.name", + "init.author.url", + "init.license", + "init.module", + "init.version", + "install-links", + "json", + "key", + "legacy-bundling", + "legacy-peer-deps", + "link", + "local-address", + "location", + "lockfile-version", + "loglevel", + "logs-dir", + "logs-max", + "long", + "maxsockets", + "message", + "node-options", + "node-version", + "noproxy", + "npm-version", + "offline", + "omit", + "omit-lockfile-registry-resolved", + "only", + "optional", + "otp", + "package", + "package-lock", + "package-lock-only", + "pack-destination", + "parseable", + "prefer-offline", + "prefer-online", + "prefix", + "preid", + "production", + "progress", + "proxy", + "read-only", + "rebuild-bundle", + "registry", + "replace-registry-host", + "save", + "save-bundle", + "save-dev", + "save-exact", + "save-optional", + "save-peer", + "save-prefix", + "save-prod", + "scope", + "script-shell", + "searchexclude", + "searchlimit", + "searchopts", + "searchstaleness", + "shell", + "shrinkwrap", + "sign-git-commit", + "sign-git-tag", + "sso-poll-frequency", + "sso-type", + "strict-peer-deps", + "strict-ssl", + "tag", + "tag-version-prefix", + "timing", + "tmp", + "umask", + "unicode", + "update-notifier", + "usage", + "user-agent", + "userconfig", + "version", + "versions", + "viewer", + "which", + "workspace", + "workspaces", + "workspaces-update", + "yes", +] +` + +exports[`test/lib/docs.js TAP config > keys that are flattened 1`] = ` +Array [ + "_auth", + "access", + "all", + "allow-same-version", + "also", + "audit", + "audit-level", + "auth-type", + "before", + "bin-links", + "browser", + "ca", + "cache", + "cache-max", + "cache-min", + "cafile", + "call", + "cert", + "ci-name", + "cidr", + "color", + "commit-hooks", + "depth", + "description", + "dev", + "diff", + "diff-ignore-all-space", + "diff-name-only", + "diff-no-prefix", + "diff-dst-prefix", + "diff-src-prefix", + "diff-text", + "diff-unified", + "dry-run", + "editor", + "engine-strict", + "fetch-retries", + "fetch-retry-factor", + "fetch-retry-maxtimeout", + "fetch-retry-mintimeout", + "fetch-timeout", + "force", + "foreground-scripts", + "format-package-lock", + "fund", + "git", + "git-tag-version", + "global", + "global-style", + "globalconfig", + "heading", + "https-proxy", + "if-present", + "ignore-scripts", + "include", + "include-staged", + "include-workspace-root", + "install-links", + "json", + "key", + "legacy-bundling", + "legacy-peer-deps", + "local-address", + "location", + "lockfile-version", + "loglevel", + "maxsockets", + "message", + "node-version", + "noproxy", + "npm-version", + "offline", + "omit", + "omit-lockfile-registry-resolved", + "only", + "optional", + "otp", + "package", + "package-lock", + "package-lock-only", + "pack-destination", + "parseable", + "prefer-offline", + "prefer-online", + "preid", + "production", + "progress", + "proxy", + "read-only", + "rebuild-bundle", + "registry", + "replace-registry-host", + "save", + "save-bundle", + "save-dev", + "save-exact", + "save-optional", + "save-peer", + "save-prefix", + "save-prod", + "scope", + "script-shell", + "searchexclude", + "searchlimit", + "searchopts", + "searchstaleness", + "shell", + "shrinkwrap", + "sign-git-commit", + "sign-git-tag", + "sso-poll-frequency", + "sso-type", + "strict-peer-deps", + "strict-ssl", + "tag", + "tag-version-prefix", + "umask", + "user-agent", + "workspace", + "workspaces", + "workspaces-update", +] +` + +exports[`test/lib/docs.js TAP config > keys that are not flattened 1`] = ` +Array [ + "init-author-email", + "init-author-name", + "init-author-url", + "init-license", + "init-module", + "init-version", + "init.author.email", + "init.author.name", + "init.author.url", + "init.license", + "init.module", + "init.version", + "link", + "logs-dir", + "logs-max", + "long", + "node-options", + "prefix", + "timing", + "tmp", + "unicode", + "update-notifier", + "usage", + "userconfig", + "version", + "versions", + "viewer", + "which", + "yes", +] +` + +exports[`test/lib/docs.js TAP shorthands > docs 1`] = ` +* \`-a\`: \`--all\` +* \`--enjoy-by\`: \`--before\` +* \`-c\`: \`--call\` +* \`--desc\`: \`--description\` +* \`-f\`: \`--force\` +* \`-g\`: \`--global\` +* \`--iwr\`: \`--include-workspace-root\` +* \`-L\`: \`--location\` +* \`-d\`: \`--loglevel info\` +* \`-s\`: \`--loglevel silent\` +* \`--silent\`: \`--loglevel silent\` +* \`--ddd\`: \`--loglevel silly\` +* \`--dd\`: \`--loglevel verbose\` +* \`--verbose\`: \`--loglevel verbose\` +* \`-q\`: \`--loglevel warn\` +* \`--quiet\`: \`--loglevel warn\` +* \`-l\`: \`--long\` +* \`-m\`: \`--message\` +* \`--local\`: \`--no-global\` +* \`-n\`: \`--no-yes\` +* \`--no\`: \`--no-yes\` +* \`-p\`: \`--parseable\` +* \`--porcelain\`: \`--parseable\` +* \`-C\`: \`--prefix\` +* \`--readonly\`: \`--read-only\` +* \`--reg\`: \`--registry\` +* \`-S\`: \`--save\` +* \`-B\`: \`--save-bundle\` +* \`-D\`: \`--save-dev\` +* \`-E\`: \`--save-exact\` +* \`-O\`: \`--save-optional\` +* \`-P\`: \`--save-prod\` +* \`-?\`: \`--usage\` +* \`-h\`: \`--usage\` +* \`-H\`: \`--usage\` +* \`--help\`: \`--usage\` +* \`-v\`: \`--version\` +* \`-w\`: \`--workspace\` +* \`--ws\`: \`--workspaces\` +* \`-y\`: \`--yes\` +` + +exports[`test/lib/docs.js TAP usage access > must match snapshot 1`] = ` +Set access level on published packages + +Usage: +npm access public [] +npm access restricted [] +npm access grant [] +npm access revoke [] +npm access 2fa-required [] +npm access 2fa-not-required [] +npm access ls-packages [||] +npm access ls-collaborators [ []] +npm access edit [] + +Options: +[--registry ] [--otp ] + +Run "npm help access" for more info + +\`\`\`bash +npm access public [] +npm access restricted [] +npm access grant [] +npm access revoke [] +npm access 2fa-required [] +npm access 2fa-not-required [] +npm access ls-packages [||] +npm access ls-collaborators [ []] +npm access edit [] +\`\`\` + +#### \`registry\` +#### \`otp\` +` + +exports[`test/lib/docs.js TAP usage adduser > must match snapshot 1`] = ` +Add a registry user account + +Usage: +npm adduser + +Options: +[--registry ] [--scope <@scope>] +[--auth-type ] + +aliases: login, add-user + +Run "npm help adduser" for more info + +\`\`\`bash +npm adduser + +aliases: login, add-user +\`\`\` + +#### \`registry\` +#### \`scope\` +#### \`auth-type\` +` + +exports[`test/lib/docs.js TAP usage audit > must match snapshot 1`] = ` +Run a security audit + +Usage: +npm audit [fix|signatures] + +Options: +[--audit-level ] [--dry-run] [-f|--force] +[--json] [--package-lock-only] +[--omit [--omit ...]] +[--foreground-scripts] [--ignore-scripts] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +Run "npm help audit" for more info + +\`\`\`bash +npm audit [fix|signatures] +\`\`\` + +#### \`audit-level\` +#### \`dry-run\` +#### \`force\` +#### \`json\` +#### \`package-lock-only\` +#### \`omit\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage bin > must match snapshot 1`] = ` +Display npm bin folder + +Usage: +npm bin + +Options: +[-g|--global] + +Run "npm help bin" for more info + +\`\`\`bash +npm bin +\`\`\` + +#### \`global\` +` + +exports[`test/lib/docs.js TAP usage bugs > must match snapshot 1`] = ` +Report bugs for a package in a web browser + +Usage: +npm bugs [ [ ...]] + +Options: +[--no-browser|--browser ] [--registry ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +alias: issues + +Run "npm help bugs" for more info + +\`\`\`bash +npm bugs [ [ ...]] + +alias: issues +\`\`\` + +#### \`browser\` +#### \`registry\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage cache > must match snapshot 1`] = ` +Manipulates packages cache + +Usage: +npm cache add +npm cache clean [] +npm cache ls [@] +npm cache verify + +Options: +[--cache ] + +Run "npm help cache" for more info + +\`\`\`bash +npm cache add +npm cache clean [] +npm cache ls [@] +npm cache verify +\`\`\` + +#### \`cache\` +` + +exports[`test/lib/docs.js TAP usage ci > must match snapshot 1`] = ` +Clean install a project + +Usage: +npm ci + +Options: +[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] +[-E|--save-exact] [-g|--global] [--global-style] [--legacy-bundling] +[--omit [--omit ...]] +[--strict-peer-deps] [--no-package-lock] [--foreground-scripts] +[--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +aliases: clean-install, ic, install-clean, isntall-clean + +Run "npm help ci" for more info + +\`\`\`bash +npm ci + +aliases: clean-install, ic, install-clean, isntall-clean +\`\`\` + +#### \`save\` +#### \`save-exact\` +#### \`global\` +#### \`global-style\` +#### \`legacy-bundling\` +#### \`omit\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage completion > must match snapshot 1`] = ` +Tab Completion for npm + +Usage: +npm completion + +Run "npm help completion" for more info + +\`\`\`bash +npm completion +\`\`\` + +NO PARAMS +` + +exports[`test/lib/docs.js TAP usage config > must match snapshot 1`] = ` +Manage the npm configuration files + +Usage: +npm config set = [= ...] +npm config get [ [ ...]] +npm config delete [ ...] +npm config list [--json] +npm config edit + +Options: +[--json] [-g|--global] [--editor ] [-L|--location ] +[-l|--long] + +alias: c + +Run "npm help config" for more info + +\`\`\`bash +npm config set = [= ...] +npm config get [ [ ...]] +npm config delete [ ...] +npm config list [--json] +npm config edit + +alias: c +\`\`\` + +#### \`json\` +#### \`global\` +#### \`editor\` +#### \`location\` +#### \`long\` +` + +exports[`test/lib/docs.js TAP usage dedupe > must match snapshot 1`] = ` +Reduce duplication in the package tree + +Usage: +npm dedupe + +Options: +[--global-style] [--legacy-bundling] [--strict-peer-deps] [--no-package-lock] +[--omit [--omit ...]] [--ignore-scripts] +[--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: ddp + +Run "npm help dedupe" for more info + +\`\`\`bash +npm dedupe + +alias: ddp +\`\`\` + +#### \`global-style\` +#### \`legacy-bundling\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`omit\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage deprecate > must match snapshot 1`] = ` +Deprecate a version of a package + +Usage: +npm deprecate + +Options: +[--registry ] [--otp ] + +Run "npm help deprecate" for more info + +\`\`\`bash +npm deprecate +\`\`\` + +#### \`registry\` +#### \`otp\` +` + +exports[`test/lib/docs.js TAP usage diff > must match snapshot 1`] = ` +The registry diff command + +Usage: +npm diff [...] + +Options: +[--diff [--diff ...]] [--diff-name-only] +[--diff-unified ] [--diff-ignore-all-space] [--diff-no-prefix] +[--diff-src-prefix ] [--diff-dst-prefix ] [--diff-text] [-g|--global] +[--tag ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +Run "npm help diff" for more info + +\`\`\`bash +npm diff [...] +\`\`\` + +#### \`diff\` +#### \`diff-name-only\` +#### \`diff-unified\` +#### \`diff-ignore-all-space\` +#### \`diff-no-prefix\` +#### \`diff-src-prefix\` +#### \`diff-dst-prefix\` +#### \`diff-text\` +#### \`global\` +#### \`tag\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage dist-tag > must match snapshot 1`] = ` +Modify package distribution tags + +Usage: +npm dist-tag add [] +npm dist-tag rm +npm dist-tag ls [] + +Options: +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +alias: dist-tags + +Run "npm help dist-tag" for more info + +\`\`\`bash +npm dist-tag add [] +npm dist-tag rm +npm dist-tag ls [] + +alias: dist-tags +\`\`\` + +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage docs > must match snapshot 1`] = ` +Open documentation for a package in a web browser + +Usage: +npm docs [ [ ...]] + +Options: +[--no-browser|--browser ] [--registry ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +alias: home + +Run "npm help docs" for more info + +\`\`\`bash +npm docs [ [ ...]] + +alias: home +\`\`\` + +#### \`browser\` +#### \`registry\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage doctor > must match snapshot 1`] = ` +Check your npm environment + +Usage: +npm doctor + +Options: +[--registry ] + +Run "npm help doctor" for more info + +\`\`\`bash +npm doctor +\`\`\` + +#### \`registry\` +` + +exports[`test/lib/docs.js TAP usage edit > must match snapshot 1`] = ` +Edit an installed package + +Usage: +npm edit [/...] + +Options: +[--editor ] + +Run "npm help edit" for more info + +\`\`\`bash +npm edit [/...] +\`\`\` + +#### \`editor\` +` + +exports[`test/lib/docs.js TAP usage exec > must match snapshot 1`] = ` +Run a command from a local or remote npm package + +Usage: +npm exec -- [@] [args...] +npm exec --package=[@] -- [args...] +npm exec -c ' [args...]' +npm exec --package=foo -c ' [args...]' + +Options: +[--package [--package ...]] [-c|--call ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +alias: x + +Run "npm help exec" for more info + +\`\`\`bash +npm exec -- [@] [args...] +npm exec --package=[@] -- [args...] +npm exec -c ' [args...]' +npm exec --package=foo -c ' [args...]' + +alias: x +\`\`\` + +#### \`package\` +#### \`call\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage explain > must match snapshot 1`] = ` +Explain installed packages + +Usage: +npm explain + +Options: +[--json] [-w|--workspace [-w|--workspace ...]] + +alias: why + +Run "npm help explain" for more info + +\`\`\`bash +npm explain + +alias: why +\`\`\` + +#### \`json\` +#### \`workspace\` +` + +exports[`test/lib/docs.js TAP usage explore > must match snapshot 1`] = ` +Browse an installed package + +Usage: +npm explore [ -- ] + +Options: +[--shell ] + +Run "npm help explore" for more info + +\`\`\`bash +npm explore [ -- ] +\`\`\` + +#### \`shell\` +` + +exports[`test/lib/docs.js TAP usage find-dupes > must match snapshot 1`] = ` +Find duplication in the package tree + +Usage: +npm find-dupes + +Options: +[--global-style] [--legacy-bundling] [--strict-peer-deps] [--no-package-lock] +[--omit [--omit ...]] [--ignore-scripts] +[--no-audit] [--no-bin-links] [--no-fund] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +Run "npm help find-dupes" for more info + +\`\`\`bash +npm find-dupes +\`\`\` + +#### \`global-style\` +#### \`legacy-bundling\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`omit\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage fund > must match snapshot 1`] = ` +Retrieve funding information + +Usage: +npm fund [] + +Options: +[--json] [--no-browser|--browser ] [--unicode] +[-w|--workspace [-w|--workspace ...]] +[--which ] + +Run "npm help fund" for more info + +\`\`\`bash +npm fund [] +\`\`\` + +#### \`json\` +#### \`browser\` +#### \`unicode\` +#### \`workspace\` +#### \`which\` +` + +exports[`test/lib/docs.js TAP usage get > must match snapshot 1`] = ` +Get a value from the npm configuration + +Usage: +npm get [ ...] (See \`npm config\`) + +Run "npm help get" for more info + +\`\`\`bash +npm get [ ...] (See \`npm config\`) +\`\`\` + +NO PARAMS +` + +exports[`test/lib/docs.js TAP usage help > must match snapshot 1`] = ` +Get help on npm + +Usage: +npm help [] + +Options: +[--viewer ] + +alias: hlep + +Run "npm help help" for more info + +\`\`\`bash +npm help [] + +alias: hlep +\`\`\` + +#### \`viewer\` +` + +exports[`test/lib/docs.js TAP usage help-search > must match snapshot 1`] = ` +Search npm help documentation + +Usage: +npm help-search + +Options: +[-l|--long] + +Run "npm help help-search" for more info + +\`\`\`bash +npm help-search +\`\`\` + +#### \`long\` +` + +exports[`test/lib/docs.js TAP usage hook > must match snapshot 1`] = ` +Manage registry hooks + +Usage: +npm hook add [--type=] +npm hook ls [pkg] +npm hook rm +npm hook update + +Options: +[--registry ] [--otp ] + +Run "npm help hook" for more info + +\`\`\`bash +npm hook add [--type=] +npm hook ls [pkg] +npm hook rm +npm hook update +\`\`\` + +#### \`registry\` +#### \`otp\` +` + +exports[`test/lib/docs.js TAP usage init > must match snapshot 1`] = ` +Create a package.json file + +Usage: +npm init (same as \`npx ) +npm init <@scope> (same as \`npx <@scope>/create\`) + +Options: +[-y|--yes] [-f|--force] [--scope <@scope>] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--no-workspaces-update] [--include-workspace-root] + +aliases: create, innit + +Run "npm help init" for more info + +\`\`\`bash +npm init (same as \`npx ) +npm init <@scope> (same as \`npx <@scope>/create\`) + +aliases: create, innit +\`\`\` + +#### \`yes\` +#### \`force\` +#### \`scope\` +#### \`workspace\` +#### \`workspaces\` +#### \`workspaces-update\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage install > must match snapshot 1`] = ` +Install a package + +Usage: +npm install [ ...] + +Options: +[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] +[-E|--save-exact] [-g|--global] [--global-style] [--legacy-bundling] +[--omit [--omit ...]] +[--strict-peer-deps] [--no-package-lock] [--foreground-scripts] +[--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall + +Run "npm help install" for more info + +\`\`\`bash +npm install [ ...] + +aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall +\`\`\` + +#### \`save\` +#### \`save-exact\` +#### \`global\` +#### \`global-style\` +#### \`legacy-bundling\` +#### \`omit\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage install-ci-test > must match snapshot 1`] = ` +Install a project with a clean slate and run tests + +Usage: +npm install-ci-test + +Options: +[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] +[-E|--save-exact] [-g|--global] [--global-style] [--legacy-bundling] +[--omit [--omit ...]] +[--strict-peer-deps] [--no-package-lock] [--foreground-scripts] +[--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: cit + +Run "npm help install-ci-test" for more info + +\`\`\`bash +npm install-ci-test + +alias: cit +\`\`\` + +#### \`save\` +#### \`save-exact\` +#### \`global\` +#### \`global-style\` +#### \`legacy-bundling\` +#### \`omit\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage install-test > must match snapshot 1`] = ` +Install package(s) and run tests + +Usage: +npm install-test [ ...] + +Options: +[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] +[-E|--save-exact] [-g|--global] [--global-style] [--legacy-bundling] +[--omit [--omit ...]] +[--strict-peer-deps] [--no-package-lock] [--foreground-scripts] +[--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: it + +Run "npm help install-test" for more info + +\`\`\`bash +npm install-test [ ...] + +alias: it +\`\`\` + +#### \`save\` +#### \`save-exact\` +#### \`global\` +#### \`global-style\` +#### \`legacy-bundling\` +#### \`omit\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage link > must match snapshot 1`] = ` +Symlink a package folder + +Usage: +npm link [] + +Options: +[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] +[-E|--save-exact] [-g|--global] [--global-style] [--legacy-bundling] +[--strict-peer-deps] [--no-package-lock] +[--omit [--omit ...]] [--ignore-scripts] +[--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: ln + +Run "npm help link" for more info + +\`\`\`bash +npm link [] + +alias: ln +\`\`\` + +#### \`save\` +#### \`save-exact\` +#### \`global\` +#### \`global-style\` +#### \`legacy-bundling\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`omit\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage ll > must match snapshot 1`] = ` +List installed packages + +Usage: +npm ll [[<@scope>/] ...] + +Options: +[-a|--all] [--json] [-l|--long] [-p|--parseable] [-g|--global] [--depth ] +[--omit [--omit ...]] [--link] +[--package-lock-only] [--unicode] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: la + +Run "npm help ll" for more info + +\`\`\`bash +npm ll [[<@scope>/] ...] + +alias: la +\`\`\` + +#### \`all\` +#### \`json\` +#### \`long\` +#### \`parseable\` +#### \`global\` +#### \`depth\` +#### \`omit\` +#### \`link\` +#### \`package-lock-only\` +#### \`unicode\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage logout > must match snapshot 1`] = ` +Log out of the registry + +Usage: +npm logout + +Options: +[--registry ] [--scope <@scope>] + +Run "npm help logout" for more info + +\`\`\`bash +npm logout +\`\`\` + +#### \`registry\` +#### \`scope\` +` + +exports[`test/lib/docs.js TAP usage ls > must match snapshot 1`] = ` +List installed packages + +Usage: +npm ls + +Options: +[-a|--all] [--json] [-l|--long] [-p|--parseable] [-g|--global] [--depth ] +[--omit [--omit ...]] [--link] +[--package-lock-only] [--unicode] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: list + +Run "npm help ls" for more info + +\`\`\`bash +npm ls + +alias: list +\`\`\` + +#### \`all\` +#### \`json\` +#### \`long\` +#### \`parseable\` +#### \`global\` +#### \`depth\` +#### \`omit\` +#### \`link\` +#### \`package-lock-only\` +#### \`unicode\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage npm > must match snapshot 1`] = ` +\`\`\`bash +npm +\`\`\` + +NO PARAMS +` + +exports[`test/lib/docs.js TAP usage npx > must match snapshot 1`] = ` +\`\`\`bash +npx -- [@] [args...] +npx --package=[@] -- [args...] +npx -c ' [args...]' +npx --package=foo -c ' [args...]' +\`\`\` + +NO PARAMS +` + +exports[`test/lib/docs.js TAP usage org > must match snapshot 1`] = ` +Manage orgs + +Usage: +npm org set orgname username [developer | admin | owner] +npm org rm orgname username +npm org ls orgname [] + +Options: +[--registry ] [--otp ] [--json] [-p|--parseable] + +alias: ogr + +Run "npm help org" for more info + +\`\`\`bash +npm org set orgname username [developer | admin | owner] +npm org rm orgname username +npm org ls orgname [] + +alias: ogr +\`\`\` + +#### \`registry\` +#### \`otp\` +#### \`json\` +#### \`parseable\` +` + +exports[`test/lib/docs.js TAP usage outdated > must match snapshot 1`] = ` +Check for outdated packages + +Usage: +npm outdated [ ...] + +Options: +[-a|--all] [--json] [-l|--long] [-p|--parseable] [-g|--global] +[-w|--workspace [-w|--workspace ...]] + +Run "npm help outdated" for more info + +\`\`\`bash +npm outdated [ ...] +\`\`\` + +#### \`all\` +#### \`json\` +#### \`long\` +#### \`parseable\` +#### \`global\` +#### \`workspace\` +` + +exports[`test/lib/docs.js TAP usage owner > must match snapshot 1`] = ` +Manage package owners + +Usage: +npm owner add +npm owner rm +npm owner ls + +Options: +[--registry ] [--otp ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] + +alias: author + +Run "npm help owner" for more info + +\`\`\`bash +npm owner add +npm owner rm +npm owner ls + +alias: author +\`\`\` + +#### \`registry\` +#### \`otp\` +#### \`workspace\` +#### \`workspaces\` +` + +exports[`test/lib/docs.js TAP usage pack > must match snapshot 1`] = ` +Create a tarball from a package + +Usage: +npm pack + +Options: +[--dry-run] [--json] [--pack-destination ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +Run "npm help pack" for more info + +\`\`\`bash +npm pack +\`\`\` + +#### \`dry-run\` +#### \`json\` +#### \`pack-destination\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage ping > must match snapshot 1`] = ` +Ping npm registry + +Usage: +npm ping + +Options: +[--registry ] + +Run "npm help ping" for more info + +\`\`\`bash +npm ping +\`\`\` + +#### \`registry\` +` + +exports[`test/lib/docs.js TAP usage pkg > must match snapshot 1`] = ` +Manages your package.json + +Usage: +npm pkg set = [= ...] +npm pkg get [ [ ...]] +npm pkg delete [ ...] +npm pkg set [[].= ...] +npm pkg set [[].= ...] + +Options: +[-f|--force] [--json] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] + +Run "npm help pkg" for more info + +\`\`\`bash +npm pkg set = [= ...] +npm pkg get [ [ ...]] +npm pkg delete [ ...] +npm pkg set [[].= ...] +npm pkg set [[].= ...] +\`\`\` + +#### \`force\` +#### \`json\` +#### \`workspace\` +#### \`workspaces\` +` + +exports[`test/lib/docs.js TAP usage prefix > must match snapshot 1`] = ` +Display prefix + +Usage: +npm prefix [-g] + +Options: +[-g|--global] + +Run "npm help prefix" for more info + +\`\`\`bash +npm prefix [-g] +\`\`\` + +#### \`global\` +` + +exports[`test/lib/docs.js TAP usage profile > must match snapshot 1`] = ` +Change settings on your registry profile + +Usage: +npm profile enable-2fa [auth-only|auth-and-writes] +npm profile disable-2fa +npm profile get [] +npm profile set + +Options: +[--registry ] [--json] [-p|--parseable] [--otp ] + +Run "npm help profile" for more info + +\`\`\`bash +npm profile enable-2fa [auth-only|auth-and-writes] +npm profile disable-2fa +npm profile get [] +npm profile set +\`\`\` + +#### \`registry\` +#### \`json\` +#### \`parseable\` +#### \`otp\` +` + +exports[`test/lib/docs.js TAP usage prune > must match snapshot 1`] = ` +Remove extraneous packages + +Usage: +npm prune [[<@scope>/]...] + +Options: +[--omit [--omit ...]] [--dry-run] +[--json] [--foreground-scripts] [--ignore-scripts] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +Run "npm help prune" for more info + +\`\`\`bash +npm prune [[<@scope>/]...] +\`\`\` + +#### \`omit\` +#### \`dry-run\` +#### \`json\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage publish > must match snapshot 1`] = ` +Publish a package + +Usage: +npm publish + +Options: +[--tag ] [--access ] [--dry-run] [--otp ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +Run "npm help publish" for more info + +\`\`\`bash +npm publish +\`\`\` + +#### \`tag\` +#### \`access\` +#### \`dry-run\` +#### \`otp\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage query > must match snapshot 1`] = ` +Retrieve a filtered list of packages + +Usage: +npm query + +Options: +[-g|--global] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +Run "npm help query" for more info + +\`\`\`bash +npm query +\`\`\` + +#### \`global\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage rebuild > must match snapshot 1`] = ` +Rebuild a package + +Usage: +npm rebuild [] ...] + +Options: +[-g|--global] [--no-bin-links] [--foreground-scripts] [--ignore-scripts] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: rb + +Run "npm help rebuild" for more info + +\`\`\`bash +npm rebuild [] ...] + +alias: rb +\`\`\` + +#### \`global\` +#### \`bin-links\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage repo > must match snapshot 1`] = ` +Open package repository page in the browser + +Usage: +npm repo [ [ ...]] + +Options: +[--no-browser|--browser ] [--registry ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +Run "npm help repo" for more info + +\`\`\`bash +npm repo [ [ ...]] +\`\`\` + +#### \`browser\` +#### \`registry\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage restart > must match snapshot 1`] = ` +Restart a package + +Usage: +npm restart [-- ] + +Options: +[--ignore-scripts] [--script-shell ] + +Run "npm help restart" for more info + +\`\`\`bash +npm restart [-- ] +\`\`\` + +#### \`ignore-scripts\` +#### \`script-shell\` +` + +exports[`test/lib/docs.js TAP usage root > must match snapshot 1`] = ` +Display npm root + +Usage: +npm root + +Options: +[-g|--global] + +Run "npm help root" for more info + +\`\`\`bash +npm root +\`\`\` + +#### \`global\` +` + +exports[`test/lib/docs.js TAP usage run-script > must match snapshot 1`] = ` +Run arbitrary package scripts + +Usage: +npm run-script [-- ] + +Options: +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--if-present] [--ignore-scripts] +[--foreground-scripts] [--script-shell ] + +aliases: run, rum, urn + +Run "npm help run-script" for more info + +\`\`\`bash +npm run-script [-- ] + +aliases: run, rum, urn +\`\`\` + +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`if-present\` +#### \`ignore-scripts\` +#### \`foreground-scripts\` +#### \`script-shell\` +` + +exports[`test/lib/docs.js TAP usage search > must match snapshot 1`] = ` +Search for packages + +Usage: +npm search [search terms ...] + +Options: +[-l|--long] [--json] [--color|--no-color|--color always] [-p|--parseable] +[--no-description] [--searchopts ] [--searchexclude ] +[--registry ] [--prefer-online] [--prefer-offline] [--offline] + +aliases: find, s, se + +Run "npm help search" for more info + +\`\`\`bash +npm search [search terms ...] + +aliases: find, s, se +\`\`\` + +#### \`long\` +#### \`json\` +#### \`color\` +#### \`parseable\` +#### \`description\` +#### \`searchopts\` +#### \`searchexclude\` +#### \`registry\` +#### \`prefer-online\` +#### \`prefer-offline\` +#### \`offline\` +` + +exports[`test/lib/docs.js TAP usage set > must match snapshot 1`] = ` +Set a value in the npm configuration + +Usage: +npm set = [= ...] (See \`npm config\`) + +Run "npm help set" for more info + +\`\`\`bash +npm set = [= ...] (See \`npm config\`) +\`\`\` + +NO PARAMS +` + +exports[`test/lib/docs.js TAP usage set-script > must match snapshot 1`] = ` +Set tasks in the scripts section of package.json, deprecated + +Usage: +npm set-script [ + __JS_FLAVORED_DYNAMIC_CSS__
    @@ -39,6 +41,7 @@

    Node.js __VERSION__ documentation

      +
    • Node.js __VERSION__
    • __TOC_PICKER__ __GTOC_PICKER__ __ALTDOCS__ @@ -73,41 +76,5 @@

      Node.js __VERSION__ documentation

    - diff --git a/glossary.md b/glossary.md index ccc1e495dff..12c0ca177ea 100644 --- a/glossary.md +++ b/glossary.md @@ -1,5 +1,9 @@ You may also need to check . +* CITGM: "The Canary in the Goldmine". CITGM is a simple tool for pulling down + an arbitrary module from npm and testing it using a specific version of the + node runtime. The Node.js project uses CITGM to smoke test our releases and + controversial changes. See more details on the [CITGM repository](https://github.com/nodejs/citgm). * LGTM: "Looks good to me", commonly used to approve a code review. * PTAL: Please take a look. * RSLGTM: "Rubber-stamp looks good to me". The reviewer approving without doing @@ -14,3 +18,5 @@ You may also need to check { @@ -93,6 +113,8 @@ const kError = Symbol('kError'); const kLenientAll = HTTPParser.kLenientAll | 0; const kLenientNone = HTTPParser.kLenientNone | 0; +const HTTP_CLIENT_TRACE_EVENT_NAME = 'http.client.request'; + function validateHost(host, name) { if (host !== null && host !== undefined && typeof host !== 'string') { throw new ERR_INVALID_ARG_TYPE(`options.${name}`, @@ -127,7 +149,7 @@ function ClientRequest(input, options, cb) { if (typeof options === 'function') { cb = options; - options = input || {}; + options = input || kEmptyObject; } else { options = ObjectAssign(input || {}, options); } @@ -156,7 +178,7 @@ function ClientRequest(input, options, cb) { if (options.path) { const path = String(options.path); - if (RegExpPrototypeTest(INVALID_PATH_REGEX, path)) + if (RegExpPrototypeExec(INVALID_PATH_REGEX, path) !== null) throw new ERR_UNESCAPED_CHARACTERS('Request path'); } @@ -300,6 +322,8 @@ function ClientRequest(input, options, cb) { options.headers); } + this[kUniqueHeaders] = parseUniqueHeadersOption(options.uniqueHeaders); + let optsWithoutSignal = options; if (optsWithoutSignal.signal) { optsWithoutSignal = ObjectAssign({}, options); @@ -344,10 +368,26 @@ ClientRequest.prototype._finish = function _finish() { DTRACE_HTTP_CLIENT_REQUEST(this, this.socket); FunctionPrototypeCall(OutgoingMessage.prototype._finish, this); if (hasObserver('http')) { - this[kClientRequestStatistics] = { - startTime: process.hrtime(), - type: 'HttpClient', - }; + startPerf(this, kClientRequestStatistics, { + type: 'http', + name: 'HttpClient', + detail: { + req: { + method: this.method, + url: `${this.protocol}//${this.host}${this.path}`, + headers: typeof this.getHeaders === 'function' ? this.getHeaders() : {}, + }, + }, + }); + } + if (onClientRequestStartChannel.hasSubscribers) { + onClientRequestStartChannel.publish({ + request: this, + }); + } + if (isTraceHTTPEnabled()) { + this._traceEventId = getNextTraceEventId(); + traceBegin(HTTP_CLIENT_TRACE_EVENT_NAME, this._traceEventId); } }; @@ -616,13 +656,35 @@ function parserOnIncomingClient(res, shouldKeepAlive) { } DTRACE_HTTP_CLIENT_RESPONSE(socket, req); - emitStatistics(req[kClientRequestStatistics]); + if (req[kClientRequestStatistics] && hasObserver('http')) { + stopPerf(req, kClientRequestStatistics, { + detail: { + res: { + statusCode: res.statusCode, + statusMessage: res.statusMessage, + headers: res.headers, + }, + }, + }); + } + if (onClientResponseFinishChannel.hasSubscribers) { + onClientResponseFinishChannel.publish({ + request: req, + response: res, + }); + } + if (isTraceHTTPEnabled() && typeof req._traceEventId === 'number') { + traceEnd(HTTP_CLIENT_TRACE_EVENT_NAME, req._traceEventId, { + path: req.path, + statusCode: res.statusCode, + }); + } req.res = res; res.req = req; // Add our listener first, so that we guarantee socket cleanup res.on('end', responseOnEnd); - req.on('prefinish', requestOnPrefinish); + req.on('finish', requestOnFinish); socket.on('timeout', responseOnTimeout); // If the user did not listen for the 'response' event, then they @@ -694,12 +756,16 @@ function responseOnEnd() { socket.end(); } assert(!socket.writable); - } else if (req.finished && !this.aborted) { + } else if (req.writableFinished && !this.aborted) { + assert(req.finished); // We can assume `req.finished` means all data has been written since: // - `'responseOnEnd'` means we have been assigned a socket. // - when we have a socket we write directly to it without buffering. // - `req.finished` means `end()` has been called and no further data. // can be written + // In addition, `req.writableFinished` means all data written has been + // accepted by the kernel. (i.e. the `req.socket` is drained).Without + // this constraint, we may assign a non drained socket to a request. responseKeepAlive(req); } } @@ -712,7 +778,9 @@ function responseOnTimeout() { res.emit('timeout'); } -function requestOnPrefinish() { +// This function is necessary in the case where we receive the entire reponse +// from server before we finish sending out the request +function requestOnFinish() { const req = this; if (req.shouldKeepAlive && req._ended) diff --git a/lib/_http_common.js b/lib/_http_common.js index 796deeff055..0b324ae231e 100644 --- a/lib/_http_common.js +++ b/lib/_http_common.js @@ -24,7 +24,7 @@ const { MathMin, Symbol, - RegExpPrototypeTest, + RegExpPrototypeExec, } = primordials; const { setImmediate } = require('timers'); @@ -128,7 +128,7 @@ function parserOnHeadersComplete(versionMajor, versionMinor, headers, method, return parser.onIncoming(incoming, shouldKeepAlive); } -function parserOnBody(b, start, len) { +function parserOnBody(b) { const stream = this.incoming; // If the stream has already been removed, then drop it. @@ -136,9 +136,8 @@ function parserOnBody(b, start, len) { return; // Pretend this was the result of a stream._read call. - if (len > 0 && !stream._dumped) { - const slice = b.slice(start, start + len); - const ret = stream.push(slice); + if (!stream._dumped) { + const ret = stream.push(b); if (!ret) readStop(this.socket); } @@ -219,7 +218,7 @@ const tokenRegExp = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/; * See https://tools.ietf.org/html/rfc7230#section-3.2.6 */ function checkIsHttpToken(val) { - return RegExpPrototypeTest(tokenRegExp, val); + return RegExpPrototypeExec(tokenRegExp, val) !== null; } const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/; @@ -230,7 +229,7 @@ const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/; * field-vchar = VCHAR / obs-text */ function checkInvalidHeaderChar(val) { - return RegExpPrototypeTest(headerCharRegex, val); + return RegExpPrototypeExec(headerCharRegex, val) !== null; } function cleanParser(parser) { diff --git a/lib/_http_incoming.js b/lib/_http_incoming.js index 383d50bb578..51ceb96d4c1 100644 --- a/lib/_http_incoming.js +++ b/lib/_http_incoming.js @@ -33,8 +33,10 @@ const { const { Readable, finished } = require('stream'); const kHeaders = Symbol('kHeaders'); +const kHeadersDistinct = Symbol('kHeadersDistinct'); const kHeadersCount = Symbol('kHeadersCount'); const kTrailers = Symbol('kTrailers'); +const kTrailersDistinct = Symbol('kTrailersDistinct'); const kTrailersCount = Symbol('kTrailersCount'); function readStart(socket) { @@ -96,6 +98,7 @@ ObjectSetPrototypeOf(IncomingMessage.prototype, Readable.prototype); ObjectSetPrototypeOf(IncomingMessage, Readable); ObjectDefineProperty(IncomingMessage.prototype, 'connection', { + __proto__: null, get: function() { return this.socket; }, @@ -105,6 +108,7 @@ ObjectDefineProperty(IncomingMessage.prototype, 'connection', { }); ObjectDefineProperty(IncomingMessage.prototype, 'headers', { + __proto__: null, get: function() { if (!this[kHeaders]) { this[kHeaders] = {}; @@ -123,7 +127,28 @@ ObjectDefineProperty(IncomingMessage.prototype, 'headers', { } }); +ObjectDefineProperty(IncomingMessage.prototype, 'headersDistinct', { + __proto__: null, + get: function() { + if (!this[kHeadersDistinct]) { + this[kHeadersDistinct] = {}; + + const src = this.rawHeaders; + const dst = this[kHeadersDistinct]; + + for (let n = 0; n < this[kHeadersCount]; n += 2) { + this._addHeaderLineDistinct(src[n + 0], src[n + 1], dst); + } + } + return this[kHeadersDistinct]; + }, + set: function(val) { + this[kHeadersDistinct] = val; + } +}); + ObjectDefineProperty(IncomingMessage.prototype, 'trailers', { + __proto__: null, get: function() { if (!this[kTrailers]) { this[kTrailers] = {}; @@ -142,6 +167,26 @@ ObjectDefineProperty(IncomingMessage.prototype, 'trailers', { } }); +ObjectDefineProperty(IncomingMessage.prototype, 'trailersDistinct', { + __proto__: null, + get: function() { + if (!this[kTrailersDistinct]) { + this[kTrailersDistinct] = {}; + + const src = this.rawTrailers; + const dst = this[kTrailersDistinct]; + + for (let n = 0; n < this[kTrailersCount]; n += 2) { + this._addHeaderLineDistinct(src[n + 0], src[n + 1], dst); + } + } + return this[kTrailersDistinct]; + }, + set: function(val) { + this[kTrailersDistinct] = val; + } +}); + IncomingMessage.prototype.setTimeout = function setTimeout(msecs, callback) { if (callback) this.on('timeout', callback); @@ -358,6 +403,16 @@ function _addHeaderLine(field, value, dest) { } } +IncomingMessage.prototype._addHeaderLineDistinct = _addHeaderLineDistinct; +function _addHeaderLineDistinct(field, value, dest) { + field = StringPrototypeToLowerCase(field); + if (!dest[field]) { + dest[field] = [value]; + } else { + dest[field].push(value); + } +} + // Call this instead of resume() if we want to just // dump all the data to /dev/null diff --git a/lib/_http_outgoing.js b/lib/_http_outgoing.js index 71f6e3e7237..a5b3863abae 100644 --- a/lib/_http_outgoing.js +++ b/lib/_http_outgoing.js @@ -25,6 +25,7 @@ const { Array, ArrayIsArray, ArrayPrototypeJoin, + MathAbs, MathFloor, NumberPrototypeToString, ObjectCreate, @@ -33,7 +34,8 @@ const { ObjectValues, ObjectPrototypeHasOwnProperty, ObjectSetPrototypeOf, - RegExpPrototypeTest, + RegExpPrototypeExec, + SafeSet, StringPrototypeToLowerCase, Symbol, } = primordials; @@ -56,6 +58,7 @@ const { } = require('internal/async_hooks'); const { codes: { + ERR_HTTP_CONTENT_LENGTH_MISMATCH, ERR_HTTP_HEADERS_SENT, ERR_HTTP_INVALID_HEADER_VALUE, ERR_HTTP_TRAILER_INVALID, @@ -82,6 +85,9 @@ let debug = require('internal/util/debuglog').debuglog('http', (fn) => { const HIGH_WATER_MARK = getDefaultHighWaterMark(); const kCorked = Symbol('corked'); +const kUniqueHeaders = Symbol('kUniqueHeaders'); +const kBytesWritten = Symbol('kBytesWritten'); +const kEndCalled = Symbol('kEndCalled'); const nop = () => {}; @@ -121,6 +127,9 @@ function OutgoingMessage() { this._removedContLen = false; this._removedTE = false; + this.strictContentLength = false; + this[kBytesWritten] = 0; + this[kEndCalled] = false; this._contentLength = null; this._hasBody = true; this._trailer = ''; @@ -143,6 +152,7 @@ ObjectSetPrototypeOf(OutgoingMessage.prototype, Stream.prototype); ObjectSetPrototypeOf(OutgoingMessage, Stream); ObjectDefineProperty(OutgoingMessage.prototype, 'writableFinished', { + __proto__: null, get() { return ( this.finished && @@ -153,24 +163,28 @@ ObjectDefineProperty(OutgoingMessage.prototype, 'writableFinished', { }); ObjectDefineProperty(OutgoingMessage.prototype, 'writableObjectMode', { + __proto__: null, get() { return false; } }); ObjectDefineProperty(OutgoingMessage.prototype, 'writableLength', { + __proto__: null, get() { return this.outputSize + (this.socket ? this.socket.writableLength : 0); } }); ObjectDefineProperty(OutgoingMessage.prototype, 'writableHighWaterMark', { + __proto__: null, get() { return this.socket ? this.socket.writableHighWaterMark : HIGH_WATER_MARK; } }); ObjectDefineProperty(OutgoingMessage.prototype, 'writableCorked', { + __proto__: null, get() { const corked = this.socket ? this.socket.writableCorked : 0; return corked + this[kCorked]; @@ -178,6 +192,7 @@ ObjectDefineProperty(OutgoingMessage.prototype, 'writableCorked', { }); ObjectDefineProperty(OutgoingMessage.prototype, '_headers', { + __proto__: null, get: internalUtil.deprecate(function() { return this.getHeaders(); }, 'OutgoingMessage.prototype._headers is deprecated', 'DEP0066'), @@ -198,6 +213,7 @@ ObjectDefineProperty(OutgoingMessage.prototype, '_headers', { }); ObjectDefineProperty(OutgoingMessage.prototype, 'connection', { + __proto__: null, get: function() { return this.socket; }, @@ -207,6 +223,7 @@ ObjectDefineProperty(OutgoingMessage.prototype, 'connection', { }); ObjectDefineProperty(OutgoingMessage.prototype, '_headerNames', { + __proto__: null, get: internalUtil.deprecate(function() { const headers = this[kOutHeaders]; if (headers !== null) { @@ -320,7 +337,9 @@ OutgoingMessage.prototype._send = function _send(data, encoding, callback) { // This is a shameful hack to get the headers and first body chunk onto // the same packet. Future versions of Node are going to take care of // this at a lower level and in a more general way. - if (!this._headerSent) { + if (!this._headerSent && this._header !== null) { + // `this._header` can be null if OutgoingMessage is used without a proper Socket + // See: /test/parallel/test-http-outgoing-message-inheritance.js if (typeof data === 'string' && (encoding === 'utf8' || encoding === 'latin1' || !encoding)) { data = this._header + data; @@ -339,6 +358,14 @@ OutgoingMessage.prototype._send = function _send(data, encoding, callback) { return this._writeRaw(data, encoding, callback); }; +function _getMessageBodySize(chunk, headers, encoding) { + if (Buffer.isBuffer(chunk)) return chunk.length; + const chunkLength = chunk ? Buffer.byteLength(chunk, encoding) : 0; + const headerLength = headers ? headers.length : 0; + if (headerLength === chunkLength) return 0; + if (headerLength < chunkLength) return MathAbs(chunkLength - headerLength); + return chunkLength; +} OutgoingMessage.prototype._writeRaw = _writeRaw; function _writeRaw(data, encoding, callback) { @@ -354,6 +381,25 @@ function _writeRaw(data, encoding, callback) { encoding = null; } + // TODO(sidwebworks): flip the `strictContentLength` default to `true` in a future PR + if (this.strictContentLength && conn && conn.writable && !this._removedContLen && this._hasBody) { + const skip = conn._httpMessage.statusCode === 304 || (this.hasHeader('transfer-encoding') || this.chunkedEncoding); + + if (typeof this._contentLength === 'number' && !skip) { + const size = _getMessageBodySize(data, conn._httpMessage._header, encoding); + + if ((size + this[kBytesWritten]) > this._contentLength) { + throw new ERR_HTTP_CONTENT_LENGTH_MISMATCH(size + this[kBytesWritten], this._contentLength); + } + + if (this[kEndCalled] && (size + this[kBytesWritten]) !== this._contentLength) { + throw new ERR_HTTP_CONTENT_LENGTH_MISMATCH(size + this[kBytesWritten], this._contentLength); + } + + this[kBytesWritten] += size; + } + } + if (conn && conn._httpMessage === this && conn.writable) { // There might be pending data in the this.output buffer. if (this.outputData.length) { @@ -453,7 +499,11 @@ function _storeHeader(firstLine, headers) { header += 'Connection: keep-alive\r\n'; if (this._keepAliveTimeout && this._defaultKeepAlive) { const timeoutSeconds = MathFloor(this._keepAliveTimeout / 1000); - header += `Keep-Alive: timeout=${timeoutSeconds}\r\n`; + let max = ''; + if (~~this._maxRequestsPerSocket > 0) { + max = `, max=${this._maxRequestsPerSocket}`; + } + header += `Keep-Alive: timeout=${timeoutSeconds}${max}\r\n`; } } else { this._last = true; @@ -502,7 +552,10 @@ function processHeader(self, state, key, value, validate) { if (validate) validateHeaderName(key); if (ArrayIsArray(value)) { - if (value.length < 2 || !isCookieField(key)) { + if ( + (value.length < 2 || !isCookieField(key)) && + (!self[kUniqueHeaders] || !self[kUniqueHeaders].has(StringPrototypeToLowerCase(key))) + ) { // Retain for(;;) loop for performance reasons // Refs: https://github.com/nodejs/node/pull/30958 for (let i = 0; i < value.length; i++) @@ -529,7 +582,7 @@ function matchHeader(self, state, field, value) { case 'connection': state.connection = true; self._removedConnection = false; - if (RegExpPrototypeTest(RE_CONN_CLOSE, value)) + if (RegExpPrototypeExec(RE_CONN_CLOSE, value) !== null) self._last = true; else self.shouldKeepAlive = true; @@ -537,11 +590,12 @@ function matchHeader(self, state, field, value) { case 'transfer-encoding': state.te = true; self._removedTE = false; - if (RegExpPrototypeTest(RE_TE_CHUNKED, value)) + if (RegExpPrototypeExec(RE_TE_CHUNKED, value) !== null) self.chunkedEncoding = true; break; case 'content-length': state.contLen = true; + self._contentLength = value; self._removedContLen = false; break; case 'date': @@ -571,6 +625,20 @@ const validateHeaderValue = hideStackFrames((name, value) => { } }); +function parseUniqueHeadersOption(headers) { + if (!ArrayIsArray(headers)) { + return null; + } + + const unique = new SafeSet(); + const l = headers.length; + for (let i = 0; i < l; i++) { + unique.add(StringPrototypeToLowerCase(headers[i])); + } + + return unique; +} + OutgoingMessage.prototype.setHeader = function setHeader(name, value) { if (this._header) { throw new ERR_HTTP_HEADERS_SENT('set'); @@ -586,6 +654,36 @@ OutgoingMessage.prototype.setHeader = function setHeader(name, value) { return this; }; +OutgoingMessage.prototype.appendHeader = function appendHeader(name, value) { + if (this._header) { + throw new ERR_HTTP_HEADERS_SENT('append'); + } + validateHeaderName(name); + validateHeaderValue(name, value); + + const field = StringPrototypeToLowerCase(name); + const headers = this[kOutHeaders]; + if (headers === null || !headers[field]) { + return this.setHeader(name, value); + } + + // Prepare the field for appending, if required + if (!ArrayIsArray(headers[field][1])) { + headers[field][1] = [headers[field][1]]; + } + + const existingValues = headers[field][1]; + if (ArrayIsArray(value)) { + for (let i = 0, length = value.length; i < length; i++) { + existingValues.push(value[i]); + } + } else { + existingValues.push(value); + } + + return this; +}; + OutgoingMessage.prototype.getHeader = function getHeader(name) { validateString(name, 'name'); @@ -682,16 +780,19 @@ OutgoingMessage.prototype._implicitHeader = function _implicitHeader() { }; ObjectDefineProperty(OutgoingMessage.prototype, 'headersSent', { + __proto__: null, configurable: true, enumerable: true, get: function() { return !!this._header; } }); ObjectDefineProperty(OutgoingMessage.prototype, 'writableEnded', { + __proto__: null, get: function() { return this.finished; } }); ObjectDefineProperty(OutgoingMessage.prototype, 'writableNeedDrain', { + __proto__: null, get: function() { return !this.destroyed && !this.finished && this[kNeedDrain]; } @@ -797,7 +898,6 @@ function connectionCorkNT(conn) { conn.uncork(); } - OutgoingMessage.prototype.addTrailers = function addTrailers(headers) { this._trailer = ''; const keys = ObjectKeys(headers); @@ -817,11 +917,31 @@ OutgoingMessage.prototype.addTrailers = function addTrailers(headers) { if (typeof field !== 'string' || !field || !checkIsHttpToken(field)) { throw new ERR_INVALID_HTTP_TOKEN('Trailer name', field); } - if (checkInvalidHeaderChar(value)) { - debug('Trailer "%s" contains invalid characters', field); - throw new ERR_INVALID_CHAR('trailer content', field); + + // Check if the field must be sent several times + const isArrayValue = ArrayIsArray(value); + if ( + isArrayValue && value.length > 1 && + (!this[kUniqueHeaders] || !this[kUniqueHeaders].has(StringPrototypeToLowerCase(field))) + ) { + for (let j = 0, l = value.length; j < l; j++) { + if (checkInvalidHeaderChar(value[j])) { + debug('Trailer "%s"[%d] contains invalid characters', field, j); + throw new ERR_INVALID_CHAR('trailer content', field); + } + this._trailer += field + ': ' + value[j] + '\r\n'; + } + } else { + if (isArrayValue) { + value = ArrayPrototypeJoin(value, '; '); + } + + if (checkInvalidHeaderChar(value)) { + debug('Trailer "%s" contains invalid characters', field); + throw new ERR_INVALID_CHAR('trailer content', field); + } + this._trailer += field + ': ' + value + '\r\n'; } - this._trailer += field + ': ' + value + '\r\n'; } }; @@ -840,6 +960,8 @@ OutgoingMessage.prototype.end = function end(chunk, encoding, callback) { encoding = null; } + this[kEndCalled] = true; + if (chunk) { if (this.finished) { onError(this, @@ -906,6 +1028,8 @@ OutgoingMessage.prototype.end = function end(chunk, encoding, callback) { }; +// This function is called once all user data are flushed to the socket. +// Note that it has a chance that the socket is not drained. OutgoingMessage.prototype._finish = function _finish() { assert(this.socket); this.emit('prefinish'); @@ -929,7 +1053,7 @@ OutgoingMessage.prototype._finish = function _finish() { // the socket yet. Thus the outgoing messages need to be prepared to queue // up data internally before sending it on further to the socket's queue. // -// This function, outgoingFlush(), is called by both the Server and Client +// This function, _flush(), is called by both the Server and Client // to attempt to flush any pending messages out to the socket. OutgoingMessage.prototype._flush = function _flush() { const socket = this.socket; @@ -997,6 +1121,8 @@ function(err, event) { }; module.exports = { + kUniqueHeaders, + parseUniqueHeadersOption, validateHeaderName, validateHeaderValue, OutgoingMessage diff --git a/lib/_http_server.js b/lib/_http_server.js index 2e285f5fd74..4e23266f630 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -26,7 +26,7 @@ const { Error, ObjectKeys, ObjectSetPrototypeOf, - RegExpPrototypeTest, + RegExpPrototypeExec, Symbol, SymbolFor, } = primordials; @@ -46,11 +46,18 @@ const { _checkInvalidHeaderChar: checkInvalidHeaderChar, prepareError, } = require('_http_common'); -const { OutgoingMessage } = require('_http_outgoing'); +const { + kUniqueHeaders, + parseUniqueHeadersOption, + OutgoingMessage +} = require('_http_outgoing'); const { kOutHeaders, kNeedDrain, - emitStatistics + isTraceHTTPEnabled, + traceBegin, + traceEnd, + getNextTraceEventId, } = require('internal/http'); const { defaultTriggerAsyncIdScope, @@ -94,6 +101,8 @@ const kServerResponseStatistics = Symbol('ServerResponseStatistics'); const { hasObserver, + startPerf, + stopPerf, } = require('internal/perf/observe'); const STATUS_CODES = { @@ -168,6 +177,8 @@ const kOnTimeout = HTTPParser.kOnTimeout | 0; const kLenientAll = HTTPParser.kLenientAll | 0; const kLenientNone = HTTPParser.kLenientNone | 0; +const HTTP_SERVER_TRACE_EVENT_NAME = 'http.server.request'; + class HTTPServerAsyncResource { constructor(type, socket) { this.type = type; @@ -186,16 +197,27 @@ function ServerResponse(req) { this._expect_continue = false; if (req.httpVersionMajor < 1 || req.httpVersionMinor < 1) { - this.useChunkedEncodingByDefault = RegExpPrototypeTest(chunkExpression, - req.headers.te); + this.useChunkedEncodingByDefault = RegExpPrototypeExec(chunkExpression, + req.headers.te) !== null; this.shouldKeepAlive = false; } if (hasObserver('http')) { - this[kServerResponseStatistics] = { - startTime: process.hrtime(), - type: 'HttpRequest', - }; + startPerf(this, kServerResponseStatistics, { + type: 'http', + name: 'HttpRequest', + detail: { + req: { + method: req.method, + url: req.url, + headers: req.headers, + }, + }, + }); + } + if (isTraceHTTPEnabled()) { + this._traceEventId = getNextTraceEventId(); + traceBegin(HTTP_SERVER_TRACE_EVENT_NAME, this._traceEventId); } } ObjectSetPrototypeOf(ServerResponse.prototype, OutgoingMessage.prototype); @@ -203,8 +225,25 @@ ObjectSetPrototypeOf(ServerResponse, OutgoingMessage); ServerResponse.prototype._finish = function _finish() { DTRACE_HTTP_SERVER_RESPONSE(this.socket); - emitStatistics(this[kServerResponseStatistics]); + if (this[kServerResponseStatistics] && hasObserver('http')) { + stopPerf(this, kServerResponseStatistics, { + detail: { + res: { + statusCode: this.statusCode, + statusMessage: this.statusMessage, + headers: typeof this.getHeaders === 'function' ? this.getHeaders() : {}, + }, + }, + }); + } OutgoingMessage.prototype._finish.call(this); + if (isTraceHTTPEnabled() && typeof this._traceEventId === 'number') { + const data = { + url: this.req?.url, + statusCode: this.statusCode, + }; + traceEnd(HTTP_SERVER_TRACE_EVENT_NAME, this._traceEventId, data); + } }; @@ -404,6 +443,7 @@ function Server(options, requestListener) { this.maxRequestsPerSocket = 0; this.headersTimeout = 60 * 1000; // 60 seconds this.requestTimeout = 0; + this[kUniqueHeaders] = parseUniqueHeadersOption(options.uniqueHeaders); } ObjectSetPrototypeOf(Server.prototype, net.Server.prototype); ObjectSetPrototypeOf(Server, net.Server); @@ -882,10 +922,12 @@ function parserOnIncoming(server, socket, state, req, keepAlive) { const res = new server[kServerResponse](req); res._keepAliveTimeout = server.keepAliveTimeout; + res._maxRequestsPerSocket = server.maxRequestsPerSocket; res._onPendingData = updateOutgoingData.bind(undefined, socket, state); res.shouldKeepAlive = keepAlive; + res[kUniqueHeaders] = server[kUniqueHeaders]; DTRACE_HTTP_SERVER_REQUEST(req, socket); if (onRequestStartChannel.hasSubscribers) { @@ -927,13 +969,13 @@ function parserOnIncoming(server, socket, state, req, keepAlive) { if (isRequestsLimitSet && (server.maxRequestsPerSocket < state.requestsCount)) { handled = true; - + server.emit('dropRequest', req, socket); res.writeHead(503); res.end(); } else if (req.headers.expect !== undefined) { handled = true; - if (RegExpPrototypeTest(continueExpression, req.headers.expect)) { + if (RegExpPrototypeExec(continueExpression, req.headers.expect) !== null) { res._expect_continue = true; if (server.listenerCount('checkContinue') > 0) { diff --git a/lib/_tls_common.js b/lib/_tls_common.js index 533fbe7fd25..eac85c16b5e 100644 --- a/lib/_tls_common.js +++ b/lib/_tls_common.js @@ -27,7 +27,7 @@ const { ArrayPrototypePush, JSONParse, ObjectCreate, - StringPrototypeReplace, + RegExpPrototypeSymbolReplace, } = primordials; const { @@ -47,6 +47,10 @@ const { }, } = internalBinding('constants'); +const { + kEmptyObject, +} = require('internal/util'); + const { validateInteger, } = require('internal/validators'); @@ -97,7 +101,7 @@ function SecureContext(secureProtocol, secureOptions, minVersion, maxVersion) { } function createSecureContext(options) { - if (!options) options = {}; + if (!options) options = kEmptyObject; const { honorCipherOrder, @@ -138,21 +142,21 @@ function translatePeerCertificate(c) { c.infoAccess = ObjectCreate(null); // XXX: More key validation? - StringPrototypeReplace(info, /([^\n:]*):([^\n]*)(?:\n|$)/g, - (all, key, val) => { - if (val.charCodeAt(0) === 0x22) { - // The translatePeerCertificate function is only - // used on internally created legacy certificate - // objects, and any value that contains a quote - // will always be a valid JSON string literal, - // so this should never throw. - val = JSONParse(val); - } - if (key in c.infoAccess) - ArrayPrototypePush(c.infoAccess[key], val); - else - c.infoAccess[key] = [val]; - }); + RegExpPrototypeSymbolReplace(/([^\n:]*):([^\n]*)(?:\n|$)/g, info, + (all, key, val) => { + if (val.charCodeAt(0) === 0x22) { + // The translatePeerCertificate function is only + // used on internally created legacy certificate + // objects, and any value that contains a quote + // will always be a valid JSON string literal, + // so this should never throw. + val = JSONParse(val); + } + if (key in c.infoAccess) + ArrayPrototypePush(c.infoAccess[key], val); + else + c.infoAccess[key] = [val]; + }); } return c; } diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index 6db61991f50..37ec68e880e 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -31,8 +31,9 @@ const { ObjectSetPrototypeOf, ReflectApply, RegExp, - RegExpPrototypeTest, - StringPrototypeReplace, + RegExpPrototypeExec, + RegExpPrototypeSymbolReplace, + StringPrototypeReplaceAll, StringPrototypeSlice, Symbol, SymbolFor, @@ -40,7 +41,8 @@ const { const { assertCrypto, - deprecate + deprecate, + kEmptyObject, } = require('internal/util'); assertCrypto(); @@ -422,11 +424,15 @@ function onerror(err) { if (!owner._secureEstablished) { // When handshake fails control is not yet released, // so self._tlsError will return null instead of actual error + + // Set closing the socket after emitting an event since the socket needs to + // be accessible when the `tlsClientError` event is emmited. + owner._closeAfterHandlingError = true; owner.destroy(err); } else if (owner._tlsOptions?.isServer && owner._rejectUnauthorized && - RegExpPrototypeTest(/peer did not return a certificate/, - err.message)) { + RegExpPrototypeExec(/peer did not return a certificate/, + err.message) !== null) { // Ignore server's authorization errors owner.destroy(); } else { @@ -632,6 +638,7 @@ TLSSocket.prototype._wrapHandle = function(wrap) { // Ref: https://github.com/nodejs/node/commit/f7620fb96d339f704932f9bb9a0dceb9952df2d4 function defineHandleReading(socket, handle) { ObjectDefineProperty(handle, 'reading', { + __proto__: null, get: () => { return socket[kRes].reading; }, @@ -1182,9 +1189,9 @@ function Server(options, listener) { if (typeof options === 'function') { listener = options; - options = {}; + options = kEmptyObject; } else if (options == null || typeof options === 'object') { - options = options || {}; + options = options ?? kEmptyObject; } else { throw new ERR_INVALID_ARG_TYPE('options', 'Object', options); } @@ -1446,9 +1453,9 @@ Server.prototype.addContext = function(servername, context) { throw new ERR_TLS_REQUIRED_SERVER_NAME(); } - const re = new RegExp('^' + StringPrototypeReplace( - StringPrototypeReplace(servername, /([.^$+?\-\\[\]{}])/g, '\\$1'), - /\*/g, '[^.]*' + const re = new RegExp('^' + StringPrototypeReplaceAll( + RegExpPrototypeSymbolReplace(/([.^$+?\-\\[\]{}])/g, servername, '\\$1'), + '*', '[^.]*' ) + '$'); ArrayPrototypePush(this._contexts, [re, tls.createSecureContext(context).context]); @@ -1472,7 +1479,7 @@ function SNICallback(servername, callback) { for (let i = contexts.length - 1; i >= 0; --i) { const elem = contexts[i]; - if (RegExpPrototypeTest(elem[0], servername)) { + if (RegExpPrototypeExec(elem[0], servername) !== null) { callback(null, elem[1]); return; } diff --git a/lib/alinode/relational_require_cache.js b/lib/alinode/relational_require_cache.js new file mode 100644 index 00000000000..0781bd55ce8 --- /dev/null +++ b/lib/alinode/relational_require_cache.js @@ -0,0 +1,63 @@ +'use strict'; + +const { ArrayIsArray } = primordials; +const assert = require('assert'); + +const CostWatcher = require('internal/relational_require_cache/cost_watcher'); +const Loader = require('internal/relational_require_cache/loader'); +const Recorder = require('internal/relational_require_cache/recorder'); +const requireCache = require('internal/relational_require_cache/require_cache'); + +let costWatcher = null; +let loader = null; +let recorder = null; + +function record(entries = process.cwd()) { + assert(!loader, 'Strontium should not run in Load Require Cache mode'); + assert(!recorder, 'Record called'); + assert(typeof entries === 'string' || ArrayIsArray(entries), '`entries` should be string or array.'); + + recorder = new Recorder(entries); + recorder.start(); +} + +function dump(filename) { + assert(recorder && recorder.isLoaded(), 'Not recorded yet'); + assert(typeof filename === 'string', 'Filename should be a string'); + recorder.dump(filename); +} + +function load(filename, entries = process.cwd(), options = undefined) { + assert(!loader, 'Load called'); + assert(!recorder, 'Strontium should not run in Record Require Cache mode'); + assert(typeof entries === 'string' || ArrayIsArray(entries), '`entries` should be string or array.'); + assert(typeof filename === 'string', 'Filename should be a string'); + + loader = new Loader(filename, entries, options); + loader.start(); +} + +function trackCost() { + if (!costWatcher) { + costWatcher = new CostWatcher(); + } + + costWatcher.start(); +} + +function stopTrackCost() { + if (!costWatcher) return 0; + costWatcher.stop(); + return costWatcher.cost; +} + +module.exports = { + record, + dump, + load, + trackCost, + stopTrackCost, + + RequireCacheReader: requireCache.Reader, + RequireCacheWriter: requireCache.Writer, +}; diff --git a/lib/assert.js b/lib/assert.js index bbd3c283c5f..82c3a285f51 100644 --- a/lib/assert.js +++ b/lib/assert.js @@ -35,7 +35,8 @@ const { ObjectKeys, ObjectPrototypeIsPrototypeOf, ReflectApply, - RegExpPrototypeTest, + RegExpPrototypeExec, + RegExpPrototypeSymbolReplace, SafeMap, String, StringPrototypeCharCodeAt, @@ -64,7 +65,7 @@ const { openSync, closeSync, readSync } = require('fs'); const { inspect } = require('internal/util/inspect'); const { isPromise, isRegExp } = require('internal/util/types'); const { EOL } = require('internal/constants'); -const { NativeModule } = require('internal/bootstrap/loaders'); +const { BuiltinModule } = require('internal/bootstrap/loaders'); const { isError } = require('internal/util'); const errorCache = new SafeMap(); @@ -213,7 +214,7 @@ function getCode(fd, line, column) { let lines = 0; // Prevent blocking the event loop by limiting the maximum amount of // data that may be read. - let maxReads = 32; // bytesPerRead * maxReads = 512 kb + let maxReads = 32; // bytesPerRead * maxReads = 512 KiB const bytesPerRead = 16384; // Use a single buffer up front that is reused until the call site is found. let buffer = Buffer.allocUnsafe(bytesPerRead); @@ -302,7 +303,7 @@ function getErrMessage(message, fn) { // Skip Node.js modules! if (StringPrototypeStartsWith(filename, 'node:') && - NativeModule.exists(StringPrototypeSlice(filename, 5))) { + BuiltinModule.exists(StringPrototypeSlice(filename, 5))) { errorCache.set(identifier, undefined); return; } @@ -345,7 +346,7 @@ function getErrMessage(message, fn) { // Always normalize indentation, otherwise the message could look weird. if (StringPrototypeIncludes(message, '\n')) { if (EOL === '\r\n') { - message = StringPrototypeReplace(message, /\r\n/g, '\n'); + message = RegExpPrototypeSymbolReplace(/\r\n/g, message, '\n'); } const frames = StringPrototypeSplit(message, '\n'); message = ArrayPrototypeShift(frames); @@ -606,7 +607,7 @@ class Comparison { if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && - RegExpPrototypeTest(obj[key], actual[key])) { + RegExpPrototypeExec(obj[key], actual[key]) !== null) { this[key] = actual[key]; } else { this[key] = obj[key]; @@ -652,7 +653,7 @@ function expectedException(actual, expected, message, fn) { // Handle regular expressions. if (isRegExp(expected)) { const str = String(actual); - if (RegExpPrototypeTest(expected, str)) + if (RegExpPrototypeExec(expected, str) !== null) return; if (!message) { @@ -687,7 +688,7 @@ function expectedException(actual, expected, message, fn) { for (const key of keys) { if (typeof actual[key] === 'string' && isRegExp(expected[key]) && - RegExpPrototypeTest(expected[key], actual[key])) { + RegExpPrototypeExec(expected[key], actual[key]) !== null) { continue; } compareExceptionKey(actual, expected, key, message, keys, fn); @@ -851,7 +852,7 @@ function hasMatchingError(actual, expected) { if (typeof expected !== 'function') { if (isRegExp(expected)) { const str = String(actual); - return RegExpPrototypeTest(expected, str); + return RegExpPrototypeExec(expected, str) !== null; } throw new ERR_INVALID_ARG_TYPE( 'expected', ['Function', 'RegExp'], expected @@ -1000,7 +1001,7 @@ function internalMatch(string, regexp, message, fn) { } const match = fn === assert.match; if (typeof string !== 'string' || - RegExpPrototypeTest(regexp, string) !== match) { + RegExpPrototypeExec(regexp, string) !== null !== match) { if (message instanceof Error) { throw message; } diff --git a/lib/async_hooks.js b/lib/async_hooks.js index 6cc2052474d..8638bb4d7b3 100644 --- a/lib/async_hooks.js +++ b/lib/async_hooks.js @@ -20,6 +20,7 @@ const { ERR_ASYNC_TYPE, ERR_INVALID_ASYNC_ID } = require('internal/errors').codes; +const { kEmptyObject } = require('internal/util'); const { validateFunction, validateString, @@ -156,7 +157,7 @@ function createHook(fns) { const destroyedSymbol = Symbol('destroyed'); class AsyncResource { - constructor(type, opts = {}) { + constructor(type, opts = kEmptyObject) { validateString(type, 'type'); let triggerAsyncId = opts; @@ -238,12 +239,14 @@ class AsyncResource { } ObjectDefineProperties(bound, { 'length': { + __proto__: null, configurable: true, enumerable: false, value: fn.length, writable: false, }, 'asyncResource': { + __proto__: null, configurable: true, enumerable: true, value: this, diff --git a/lib/buffer.js b/lib/buffer.js index 57d6cddbaa2..cb29d93f35e 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -23,8 +23,10 @@ const { Array, + ArrayFrom, ArrayIsArray, ArrayPrototypeForEach, + ArrayPrototypeIndexOf, MathFloor, MathMin, MathTrunc, @@ -35,8 +37,8 @@ const { ObjectDefineProperties, ObjectDefineProperty, ObjectSetPrototypeOf, + RegExpPrototypeSymbolReplace, StringPrototypeCharCodeAt, - StringPrototypeReplace, StringPrototypeSlice, StringPrototypeToLowerCase, StringPrototypeTrim, @@ -130,11 +132,13 @@ addBufferPrototypeMethods(Buffer.prototype); const constants = ObjectDefineProperties({}, { MAX_LENGTH: { + __proto__: null, value: kMaxLength, writable: false, enumerable: true }, MAX_STRING_LENGTH: { + __proto__: null, value: kStringMaxLength, writable: false, enumerable: true @@ -280,6 +284,7 @@ function Buffer(arg, encodingOrOffset, length) { } ObjectDefineProperty(Buffer, SymbolSpecies, { + __proto__: null, enumerable: false, configurable: true, get() { return FastBuffer; } @@ -755,6 +760,7 @@ Buffer.byteLength = byteLength; // For backwards compatibility. ObjectDefineProperty(Buffer.prototype, 'parent', { + __proto__: null, enumerable: true, get() { if (!(this instanceof Buffer)) @@ -763,6 +769,7 @@ ObjectDefineProperty(Buffer.prototype, 'parent', { } }); ObjectDefineProperty(Buffer.prototype, 'offset', { + __proto__: null, enumerable: true, get() { if (!(this instanceof Buffer)) @@ -833,8 +840,8 @@ Buffer.prototype[customInspectSymbol] = function inspect(recurseTimes, ctx) { const max = INSPECT_MAX_BYTES; const actualMax = MathMin(max, this.length); const remaining = this.length - max; - let str = StringPrototypeTrim(StringPrototypeReplace( - this.hexSlice(0, actualMax), /(.{2})/g, '$1 ')); + let str = StringPrototypeTrim(RegExpPrototypeSymbolReplace( + /(.{2})/g, this.hexSlice(0, actualMax), '$1 ')); if (remaining > 0) str += ` ... ${remaining} more byte${remaining > 1 ? 's' : ''}`; // Inspect special properties as well, if possible. @@ -1231,8 +1238,25 @@ function btoa(input) { return buf.toString('base64'); } -const kBase64Digits = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; +// Refs: https://infra.spec.whatwg.org/#forgiving-base64-decode +const kForgivingBase64AllowedChars = [ + // ASCII whitespace + // Refs: https://infra.spec.whatwg.org/#ascii-whitespace + 0x09, 0x0A, 0x0C, 0x0D, 0x20, + + // Uppercase letters + ...ArrayFrom({ length: 26 }, (_, i) => StringPrototypeCharCodeAt('A') + i), + + // Lowercase letters + ...ArrayFrom({ length: 26 }, (_, i) => StringPrototypeCharCodeAt('a') + i), + + // Decimal digits + ...ArrayFrom({ length: 10 }, (_, i) => StringPrototypeCharCodeAt('0') + i), + + 0x2B, // + + 0x2F, // / + 0x3D, // = +]; function atob(input) { // The implementation here has not been performance optimized in any way and @@ -1241,11 +1265,31 @@ function atob(input) { if (arguments.length === 0) { throw new ERR_MISSING_ARGS('input'); } + input = `${input}`; + let nonAsciiWhitespaceCharCount = 0; + for (let n = 0; n < input.length; n++) { - if (!kBase64Digits.includes(input[n])) + const index = ArrayPrototypeIndexOf( + kForgivingBase64AllowedChars, + StringPrototypeCharCodeAt(input, n)); + + if (index > 4) { + // The first 5 elements of `kForgivingBase64AllowedChars` are + // ASCII whitespace char codes. + nonAsciiWhitespaceCharCount++; + } else if (index === -1) { throw lazyDOMException('Invalid character', 'InvalidCharacterError'); + } } + + // See #3 - https://infra.spec.whatwg.org/#forgiving-base64 + if (nonAsciiWhitespaceCharCount % 4 === 1) { + throw lazyDOMException( + 'The string to be decoded is not correctly encoded.', + 'InvalidCharacterError'); + } + return Buffer.from(input, 'base64').toString('latin1'); } @@ -1264,11 +1308,13 @@ module.exports = { ObjectDefineProperties(module.exports, { constants: { + __proto__: null, configurable: false, enumerable: true, value: constants }, INSPECT_MAX_BYTES: { + __proto__: null, configurable: true, enumerable: true, get() { return INSPECT_MAX_BYTES; }, diff --git a/lib/child_process.js b/lib/child_process.js index 415010241cd..a4def6acce9 100644 --- a/lib/child_process.js +++ b/lib/child_process.js @@ -36,17 +36,18 @@ const { ObjectAssign, ObjectDefineProperty, ObjectPrototypeHasOwnProperty, - RegExpPrototypeTest, + RegExpPrototypeExec, SafeSet, StringPrototypeSlice, StringPrototypeToUpperCase, } = primordials; const { - promisify, convertToValidSignal, createDeferredPromise, - getSystemErrorName + getSystemErrorName, + kEmptyObject, + promisify, } = require('internal/util'); const { isArrayBufferView } = require('internal/util/types'); let debug = require('internal/util/debuglog').debuglog( @@ -89,6 +90,8 @@ const { const MAX_BUFFER = 1024 * 1024; +const isZOS = process.platform === 'os390'; + /** * Spawns a new Node.js process + fork. * @param {string|URL} modulePath @@ -96,7 +99,7 @@ const MAX_BUFFER = 1024 * 1024; * @param {{ * cwd?: string; * detached?: boolean; - * env?: Object; + * env?: Record; * execPath?: string; * execArgv?: string[]; * gid?: number; @@ -202,7 +205,7 @@ function normalizeExecArgs(command, options, callback) { * @param {string} command * @param {{ * cmd?: string; - * env?: Object; + * env?: Record; * encoding?: string; * shell?: string; * signal?: AbortSignal; @@ -246,6 +249,7 @@ const customPromiseExecFunction = (orig) => { }; ObjectDefineProperty(exec, promisify.custom, { + __proto__: null, enumerable: false, value: customPromiseExecFunction(exec) }); @@ -256,7 +260,7 @@ ObjectDefineProperty(exec, promisify.custom, { * @param {string[]} [args] * @param {{ * cwd?: string; - * env?: Object; + * env?: Record; * encoding?: string; * timeout?: number; * maxBuffer?: number; @@ -446,6 +450,11 @@ function execFile(file, args = [], options, callback) { child.stdout.setEncoding(encoding); child.stdout.on('data', function onChildStdout(chunk) { + // Do not need to count the length + if (options.maxBuffer === Infinity) { + ArrayPrototypePush(_stdout, chunk); + return; + } const encoding = child.stdout.readableEncoding; const length = encoding ? Buffer.byteLength(chunk, encoding) : @@ -471,6 +480,11 @@ function execFile(file, args = [], options, callback) { child.stderr.setEncoding(encoding); child.stderr.on('data', function onChildStderr(chunk) { + // Do not need to count the length + if (options.maxBuffer === Infinity) { + ArrayPrototypePush(_stderr, chunk); + return; + } const encoding = child.stderr.readableEncoding; const length = encoding ? Buffer.byteLength(chunk, encoding) : @@ -485,7 +499,7 @@ function execFile(file, args = [], options, callback) { ex = new ERR_CHILD_PROCESS_STDIO_MAXBUFFER('stderr'); kill(); } else { - _stderr.push(chunk); + ArrayPrototypePush(_stderr, chunk); } }); } @@ -497,10 +511,19 @@ function execFile(file, args = [], options, callback) { } ObjectDefineProperty(execFile, promisify.custom, { + __proto__: null, enumerable: false, value: customPromiseExecFunction(execFile) }); +function copyProcessEnvToEnv(env, name, optionEnv) { + if (process.env[name] && + (!optionEnv || + !ObjectPrototypeHasOwnProperty(optionEnv, name))) { + env[name] = process.env[name]; + } +} + function normalizeSpawnArguments(file, args, options) { validateString(file, 'file'); @@ -519,7 +542,7 @@ function normalizeSpawnArguments(file, args, options) { } if (options === undefined) - options = {}; + options = kEmptyObject; else validateObject(options, 'options'); @@ -579,7 +602,7 @@ function normalizeSpawnArguments(file, args, options) { else file = process.env.comspec || 'cmd.exe'; // '/d /s /c' is used only for cmd.exe. - if (RegExpPrototypeTest(/^(?:.*\\)?cmd(?:\.exe)?$/i, file)) { + if (RegExpPrototypeExec(/^(?:.*\\)?cmd(?:\.exe)?$/i, file) !== null) { args = ['/d', '/s', '/c', `"${command}"`]; windowsVerbatimArguments = true; } else { @@ -607,9 +630,19 @@ function normalizeSpawnArguments(file, args, options) { // process.env.NODE_V8_COVERAGE always propagates, making it possible to // collect coverage for programs that spawn with white-listed environment. - if (process.env.NODE_V8_COVERAGE && - !ObjectPrototypeHasOwnProperty(options.env || {}, 'NODE_V8_COVERAGE')) { - env.NODE_V8_COVERAGE = process.env.NODE_V8_COVERAGE; + copyProcessEnvToEnv(env, 'NODE_V8_COVERAGE', options.env); + + if (isZOS) { + // The following environment variables must always propagate if set. + copyProcessEnvToEnv(env, '_BPXK_AUTOCVT', options.env); + copyProcessEnvToEnv(env, '_CEE_RUNOPTS', options.env); + copyProcessEnvToEnv(env, '_TAG_REDIR_ERR', options.env); + copyProcessEnvToEnv(env, '_TAG_REDIR_IN', options.env); + copyProcessEnvToEnv(env, '_TAG_REDIR_OUT', options.env); + copyProcessEnvToEnv(env, 'STEPLIB', options.env); + copyProcessEnvToEnv(env, 'LIBPATH', options.env); + copyProcessEnvToEnv(env, '_EDC_SIG_DFLT', options.env); + copyProcessEnvToEnv(env, '_EDC_SUSV3', options.env); } let envKeys = []; @@ -673,7 +706,7 @@ function abortChildProcess(child, killSignal) { * @param {string[]} [args] * @param {{ * cwd?: string; - * env?: Object; + * env?: Record; * argv0?: string; * stdio?: Array | string; * detached?: boolean; @@ -746,7 +779,7 @@ function spawn(file, args, options) { * input?: string | Buffer | TypedArray | DataView; * argv0?: string; * stdio?: string | Array; - * env?: Object; + * env?: Record; * uid?: number; * gid?: number; * timeout?: number; @@ -838,7 +871,7 @@ function checkExecSyncError(ret, args, cmd) { * cwd?: string; * input?: string | Buffer | TypedArray | DataView; * stdio?: string | Array; - * env?: Object; + * env?: Record; * uid?: number; * gid?: number; * timeout?: number; @@ -875,7 +908,7 @@ function execFileSync(command, args, options) { * cwd?: string; * input?: string | Buffer | TypedArray | DataView; * stdio?: string | Array; - * env?: Object; + * env?: Record; * shell?: string; * uid?: number; * gid?: number; @@ -896,7 +929,7 @@ function execSync(command, options) { if (inheritStderr && ret.stderr) process.stderr.write(ret.stderr); - const err = checkExecSyncError(ret, opts.args, command); + const err = checkExecSyncError(ret, undefined, command); if (err) throw err; diff --git a/lib/crypto.js b/lib/crypto.js index 6e050068b20..3ec03cbe731 100644 --- a/lib/crypto.js +++ b/lib/crypto.js @@ -248,26 +248,31 @@ function getFipsForced() { } ObjectDefineProperty(constants, 'defaultCipherList', { + __proto__: null, value: getOptionValue('--tls-cipher-list') }); ObjectDefineProperties(module.exports, { createCipher: { + __proto__: null, enumerable: false, value: deprecate(createCipher, 'crypto.createCipher is deprecated.', 'DEP0106') }, createDecipher: { + __proto__: null, enumerable: false, value: deprecate(createDecipher, 'crypto.createDecipher is deprecated.', 'DEP0106') }, // crypto.fips is deprecated. DEP0093. Use crypto.getFips()/crypto.setFips() fips: { + __proto__: null, get: fipsForced ? getFipsForced : getFipsCrypto, set: fipsForced ? setFipsForced : setFipsCrypto }, DEFAULT_ENCODING: { + __proto__: null, enumerable: false, configurable: true, get: deprecate(getDefaultEncoding, @@ -276,12 +281,14 @@ ObjectDefineProperties(module.exports, { 'crypto.DEFAULT_ENCODING is deprecated.', 'DEP0091') }, constants: { + __proto__: null, configurable: false, enumerable: true, value: constants }, webcrypto: { + __proto__: null, configurable: false, enumerable: true, get() { return lazyRequire('internal/crypto/webcrypto').crypto; } @@ -290,6 +297,7 @@ ObjectDefineProperties(module.exports, { // Aliases for randomBytes are deprecated. // The ecosystem needs those to exist for backwards compatibility. prng: { + __proto__: null, enumerable: false, configurable: true, writable: true, @@ -298,6 +306,7 @@ ObjectDefineProperties(module.exports, { randomBytes }, pseudoRandomBytes: { + __proto__: null, enumerable: false, configurable: true, writable: true, @@ -307,6 +316,7 @@ ObjectDefineProperties(module.exports, { randomBytes }, rng: { + __proto__: null, enumerable: false, configurable: true, writable: true, diff --git a/lib/dgram.js b/lib/dgram.js index 8aaafb5f90b..3dcd99c7c45 100644 --- a/lib/dgram.js +++ b/lib/dgram.js @@ -74,6 +74,9 @@ const { SendWrap } = internalBinding('udp_wrap'); +const dc = require('diagnostics_channel'); +const udpSocketChannel = dc.channel('udp.socket'); + const BIND_STATE_UNBOUND = 0; const BIND_STATE_BINDING = 1; const BIND_STATE_BOUND = 2; @@ -145,6 +148,11 @@ function Socket(type, listener) { this.once('close', () => signal.removeEventListener('abort', onAborted)); } } + if (udpSocketChannel.hasSubscribers) { + udpSocketChannel.publish({ + socket: this, + }); + } } ObjectSetPrototypeOf(Socket.prototype, EventEmitter.prototype); ObjectSetPrototypeOf(Socket, EventEmitter); @@ -159,7 +167,7 @@ function startListening(socket) { const state = socket[kStateSymbol]; state.handle.onmessage = onMessage; - // Todo: handle errors + state.handle.onerror = onError; state.handle.recvStart(); state.receiving = true; state.bindState = BIND_STATE_BOUND; @@ -923,6 +931,12 @@ function onMessage(nread, handle, buf, rinfo) { } +function onError(nread, handle, error) { + const self = handle[owner_symbol]; + return self.emit('error', error); +} + + Socket.prototype.ref = function() { const handle = this[kStateSymbol].handle; @@ -962,9 +976,17 @@ Socket.prototype.getSendBufferSize = function() { return bufferSize(this, 0, SEND_BUFFER); }; +Socket.prototype.getSendQueueSize = function() { + return this[kStateSymbol].handle.getSendQueueSize(); +}; + +Socket.prototype.getSendQueueCount = function() { + return this[kStateSymbol].handle.getSendQueueCount(); +}; // Deprecated private APIs. ObjectDefineProperty(Socket.prototype, '_handle', { + __proto__: null, get: deprecate(function() { return this[kStateSymbol].handle; }, 'Socket.prototype._handle is deprecated', 'DEP0112'), @@ -975,6 +997,7 @@ ObjectDefineProperty(Socket.prototype, '_handle', { ObjectDefineProperty(Socket.prototype, '_receiving', { + __proto__: null, get: deprecate(function() { return this[kStateSymbol].receiving; }, 'Socket.prototype._receiving is deprecated', 'DEP0112'), @@ -985,6 +1008,7 @@ ObjectDefineProperty(Socket.prototype, '_receiving', { ObjectDefineProperty(Socket.prototype, '_bindState', { + __proto__: null, get: deprecate(function() { return this[kStateSymbol].bindState; }, 'Socket.prototype._bindState is deprecated', 'DEP0112'), @@ -995,6 +1019,7 @@ ObjectDefineProperty(Socket.prototype, '_bindState', { ObjectDefineProperty(Socket.prototype, '_queue', { + __proto__: null, get: deprecate(function() { return this[kStateSymbol].queue; }, 'Socket.prototype._queue is deprecated', 'DEP0112'), @@ -1005,6 +1030,7 @@ ObjectDefineProperty(Socket.prototype, '_queue', { ObjectDefineProperty(Socket.prototype, '_reuseAddr', { + __proto__: null, get: deprecate(function() { return this[kStateSymbol].reuseAddr; }, 'Socket.prototype._reuseAddr is deprecated', 'DEP0112'), @@ -1027,6 +1053,7 @@ Socket.prototype._stopReceiving = deprecate(function() { // Legacy alias on the C++ wrapper object. This is not public API, so we may // want to runtime-deprecate it at some point. There's no hurry, though. ObjectDefineProperty(UDP.prototype, 'owner', { + __proto__: null, get() { return this[owner_symbol]; }, set(v) { return this[owner_symbol] = v; } }); diff --git a/lib/diagnostics_channel.js b/lib/diagnostics_channel.js index c85a9532b4d..f8c1edb96df 100644 --- a/lib/diagnostics_channel.js +++ b/lib/diagnostics_channel.js @@ -109,6 +109,22 @@ function channel(name) { return channel; } +function subscribe(name, subscription) { + const chan = channel(name); + channels[name].incRef(); + chan.subscribe(subscription); +} + +function unsubscribe(name, subscription) { + const chan = channel(name); + if (!chan.unsubscribe(subscription)) { + return false; + } + + channels[name].decRef(); + return true; +} + function hasSubscribers(name) { let channel; const ref = channels[name]; @@ -123,5 +139,7 @@ function hasSubscribers(name) { module.exports = { channel, hasSubscribers, + subscribe, + unsubscribe, Channel }; diff --git a/lib/dns.js b/lib/dns.js index 4eadbd04158..01e85292d4f 100644 --- a/lib/dns.js +++ b/lib/dns.js @@ -27,6 +27,7 @@ const { ObjectDefineProperties, ObjectDefineProperty, ReflectApply, + Symbol, } = primordials; const cares = internalBinding('cares_wrap'); @@ -43,7 +44,34 @@ const { emitInvalidHostnameWarning, getDefaultVerbatim, setDefaultResultOrder, + errorCodes: dnsErrorCodes, } = require('internal/dns/utils'); +const { + NODATA, + FORMERR, + SERVFAIL, + NOTFOUND, + NOTIMP, + REFUSED, + BADQUERY, + BADNAME, + BADFAMILY, + BADRESP, + CONNREFUSED, + TIMEOUT, + EOF, + FILE, + NOMEM, + DESTRUCTION, + BADSTR, + BADFLAGS, + NONAME, + BADHINTS, + NOTINITIALIZED, + LOADIPHLPAPI, + ADDRGETNETWORKPARAMS, + CANCELLED, +} = dnsErrorCodes; const { ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, @@ -62,6 +90,16 @@ const { QueryReqWrap, } = cares; +const kPerfHooksDnsLookupContext = Symbol('kPerfHooksDnsLookupContext'); +const kPerfHooksDnsLookupServiceContext = Symbol('kPerfHooksDnsLookupServiceContext'); +const kPerfHooksDnsLookupResolveContext = Symbol('kPerfHooksDnsLookupResolveContext'); + +const { + hasObserver, + startPerf, + stopPerf, +} = require('internal/perf/observe'); + const dnsException = errors.dnsException; let promises = null; // Lazy loaded @@ -71,6 +109,9 @@ function onlookup(err, addresses) { return this.callback(dnsException(err, 'getaddrinfo', this.hostname)); } this.callback(null, addresses[0], this.family || isIP(addresses[0])); + if (this[kPerfHooksDnsLookupContext] && hasObserver('dns')) { + stopPerf(this, kPerfHooksDnsLookupContext, { detail: { addresses } }); + } } @@ -89,6 +130,9 @@ function onlookupall(err, addresses) { } this.callback(null, addresses); + if (this[kPerfHooksDnsLookupContext] && hasObserver('dns')) { + stopPerf(this, kPerfHooksDnsLookupContext, { detail: { addresses } }); + } } @@ -161,11 +205,20 @@ function lookup(hostname, options, callback) { process.nextTick(callback, dnsException(err, 'getaddrinfo', hostname)); return {}; } + if (hasObserver('dns')) { + const detail = { + hostname, + family, + hints, + verbatim, + }; + startPerf(req, kPerfHooksDnsLookupContext, { type: 'dns', name: 'lookup', detail }); + } return req; } ObjectDefineProperty(lookup, customPromisifyArgs, - { value: ['address', 'family'], enumerable: false }); + { __proto__: null, value: ['address', 'family'], enumerable: false }); function onlookupservice(err, hostname, service) { @@ -173,6 +226,9 @@ function onlookupservice(err, hostname, service) { return this.callback(dnsException(err, 'getnameinfo', this.hostname)); this.callback(null, hostname, service); + if (this[kPerfHooksDnsLookupServiceContext] && hasObserver('dns')) { + stopPerf(this, kPerfHooksDnsLookupServiceContext, { detail: { hostname, service } }); + } } @@ -197,11 +253,21 @@ function lookupService(address, port, callback) { const err = cares.getnameinfo(req, address, port); if (err) throw dnsException(err, 'getnameinfo', address); + if (hasObserver('dns')) { + startPerf(req, kPerfHooksDnsLookupServiceContext, { + type: 'dns', + name: 'lookupService', + detail: { + host: address, + port, + }, + }); + } return req; } ObjectDefineProperty(lookupService, customPromisifyArgs, - { value: ['hostname', 'service'], enumerable: false }); + { __proto__: null, value: ['hostname', 'service'], enumerable: false }); function onresolve(err, result, ttls) { @@ -211,8 +277,12 @@ function onresolve(err, result, ttls) { if (err) this.callback(dnsException(err, this.bindingName, this.hostname)); - else + else { this.callback(null, result); + if (this[kPerfHooksDnsLookupResolveContext] && hasObserver('dns')) { + stopPerf(this, kPerfHooksDnsLookupResolveContext, { detail: { result } }); + } + } } function resolver(bindingName) { @@ -234,9 +304,19 @@ function resolver(bindingName) { req.ttl = !!(options && options.ttl); const err = this._handle[bindingName](req, toASCII(name)); if (err) throw dnsException(err, bindingName, name); + if (hasObserver('dns')) { + startPerf(req, kPerfHooksDnsLookupResolveContext, { + type: 'dns', + name: bindingName, + detail: { + host: name, + ttl: req.ttl, + }, + }); + } return req; } - ObjectDefineProperty(query, 'name', { value: bindingName }); + ObjectDefineProperty(query, 'name', { __proto__: null, value: bindingName }); return query; } @@ -299,43 +379,42 @@ module.exports = { V4MAPPED: cares.AI_V4MAPPED, // ERROR CODES - NODATA: 'ENODATA', - FORMERR: 'EFORMERR', - SERVFAIL: 'ESERVFAIL', - NOTFOUND: 'ENOTFOUND', - NOTIMP: 'ENOTIMP', - REFUSED: 'EREFUSED', - BADQUERY: 'EBADQUERY', - BADNAME: 'EBADNAME', - BADFAMILY: 'EBADFAMILY', - BADRESP: 'EBADRESP', - CONNREFUSED: 'ECONNREFUSED', - TIMEOUT: 'ETIMEOUT', - EOF: 'EOF', - FILE: 'EFILE', - NOMEM: 'ENOMEM', - DESTRUCTION: 'EDESTRUCTION', - BADSTR: 'EBADSTR', - BADFLAGS: 'EBADFLAGS', - NONAME: 'ENONAME', - BADHINTS: 'EBADHINTS', - NOTINITIALIZED: 'ENOTINITIALIZED', - LOADIPHLPAPI: 'ELOADIPHLPAPI', - ADDRGETNETWORKPARAMS: 'EADDRGETNETWORKPARAMS', - CANCELLED: 'ECANCELLED' + NODATA, + FORMERR, + SERVFAIL, + NOTFOUND, + NOTIMP, + REFUSED, + BADQUERY, + BADNAME, + BADFAMILY, + BADRESP, + CONNREFUSED, + TIMEOUT, + EOF, + FILE, + NOMEM, + DESTRUCTION, + BADSTR, + BADFLAGS, + NONAME, + BADHINTS, + NOTINITIALIZED, + LOADIPHLPAPI, + ADDRGETNETWORKPARAMS, + CANCELLED, }; bindDefaultResolver(module.exports, getDefaultResolver()); ObjectDefineProperties(module.exports, { promises: { + __proto__: null, configurable: true, enumerable: true, get() { if (promises === null) { promises = require('internal/dns/promises'); - promises.setServers = defaultResolverSetServers; - promises.setDefaultResultOrder = setDefaultResultOrder; } return promises; } diff --git a/lib/dns/promises.js b/lib/dns/promises.js index ad8a2561ef5..35881e5bb47 100644 --- a/lib/dns/promises.js +++ b/lib/dns/promises.js @@ -1,5 +1,3 @@ 'use strict'; -const dnsPromises = require('internal/dns/promises'); -dnsPromises.setServers = require('dns').setServers; -module.exports = dnsPromises; +module.exports = require('internal/dns/promises'); diff --git a/lib/domain.js b/lib/domain.js index fbce94bad5f..4951c0ae21b 100644 --- a/lib/domain.js +++ b/lib/domain.js @@ -39,6 +39,7 @@ const { Promise, ReflectApply, SafeMap, + SafeWeakMap, Symbol, } = primordials; @@ -59,6 +60,7 @@ const { WeakReference } = internalBinding('util'); // effective optimizations const _domain = [null]; ObjectDefineProperty(process, 'domain', { + __proto__: null, enumerable: true, get: function() { return _domain[0]; @@ -68,6 +70,7 @@ ObjectDefineProperty(process, 'domain', { } }); +const vmPromises = new SafeWeakMap(); const pairing = new SafeMap(); const asyncHook = createHook({ init(asyncId, type, triggerAsyncId, resource) { @@ -78,11 +81,17 @@ const asyncHook = createHook({ // have a domain property as it can be used to escape the sandbox. if (type !== 'PROMISE' || resource instanceof Promise) { ObjectDefineProperty(resource, 'domain', { + __proto__: null, configurable: true, enumerable: false, value: process.domain, writable: true }); + // Because promises from other contexts don't get a domain field, + // the domain needs to be held alive another way. Stuffing it in a + // weakmap connected to the promise lifetime can fix that. + } else { + vmPromises.set(resource, process.domain); } } }, @@ -231,6 +240,7 @@ Domain.prototype._errorHandler = function(er) { if ((typeof er === 'object' && er !== null) || typeof er === 'function') { ObjectDefineProperty(er, 'domain', { + __proto__: null, configurable: true, enumerable: false, value: this, @@ -356,6 +366,7 @@ Domain.prototype.add = function(ee) { } ObjectDefineProperty(ee, 'domain', { + __proto__: null, configurable: true, enumerable: false, value: this, @@ -388,6 +399,7 @@ function intercepted(_this, self, cb, fnargs) { er.domainBound = cb; er.domainThrown = false; ObjectDefineProperty(er, 'domain', { + __proto__: null, configurable: true, enumerable: false, value: self, @@ -433,6 +445,7 @@ Domain.prototype.bind = function(cb) { } ObjectDefineProperty(runBound, 'domain', { + __proto__: null, configurable: true, enumerable: false, value: this, @@ -448,6 +461,7 @@ EventEmitter.usingDomains = true; const eventInit = EventEmitter.init; EventEmitter.init = function(opts) { ObjectDefineProperty(this, 'domain', { + __proto__: null, configurable: true, enumerable: false, value: null, @@ -482,6 +496,7 @@ EventEmitter.prototype.emit = function emit(...args) { if (typeof er === 'object') { er.domainEmitter = this; ObjectDefineProperty(er, 'domain', { + __proto__: null, configurable: true, enumerable: false, value: domain, diff --git a/lib/events.js b/lib/events.js index 9162e8ca8b2..7abf18f42c0 100644 --- a/lib/events.js +++ b/lib/events.js @@ -22,7 +22,6 @@ 'use strict'; const { - ArrayPrototypeIndexOf, ArrayPrototypeJoin, ArrayPrototypeShift, ArrayPrototypeSlice, @@ -33,7 +32,6 @@ const { ErrorCaptureStackTrace, FunctionPrototypeBind, FunctionPrototypeCall, - MathMin, NumberIsNaN, ObjectCreate, ObjectDefineProperty, @@ -52,7 +50,13 @@ const { SymbolAsyncIterator, } = primordials; const kRejection = SymbolFor('nodejs.rejection'); -const { inspect } = require('internal/util/inspect'); + +const { kEmptyObject } = require('internal/util'); + +const { + inspect, + identicalSequenceRange, +} = require('internal/util/inspect'); let spliceOne; @@ -219,6 +223,7 @@ EventEmitter.usingDomains = false; EventEmitter.captureRejectionSymbol = kRejection; ObjectDefineProperty(EventEmitter, 'captureRejections', { + __proto__: null, get() { return EventEmitter.prototype[kCapture]; }, @@ -231,6 +236,7 @@ ObjectDefineProperty(EventEmitter, 'captureRejections', { }); ObjectDefineProperty(EventEmitter, 'EventEmitterAsyncResource', { + __proto__: null, enumerable: true, get: lazyEventEmitterAsyncResource, set: undefined, @@ -241,6 +247,7 @@ EventEmitter.errorMonitor = kErrorMonitor; // The default for captureRejections is false ObjectDefineProperty(EventEmitter.prototype, kCapture, { + __proto__: null, value: false, writable: true, enumerable: false @@ -260,6 +267,7 @@ function checkListener(listener) { } ObjectDefineProperty(EventEmitter, 'defaultMaxListeners', { + __proto__: null, enumerable: true, get: function() { return defaultMaxListeners; @@ -276,12 +284,14 @@ ObjectDefineProperty(EventEmitter, 'defaultMaxListeners', { ObjectDefineProperties(EventEmitter, { kMaxEventTargetListeners: { + __proto__: null, value: kMaxEventTargetListeners, enumerable: false, configurable: false, writable: false, }, kMaxEventTargetListenersWarned: { + __proto__: null, value: kMaxEventTargetListenersWarned, enumerable: false, configurable: false, @@ -415,31 +425,6 @@ EventEmitter.prototype.getMaxListeners = function getMaxListeners() { return _getMaxListeners(this); }; -// Returns the length and line number of the first sequence of `a` that fully -// appears in `b` with a length of at least 4. -function identicalSequenceRange(a, b) { - for (let i = 0; i < a.length - 3; i++) { - // Find the first entry of b that matches the current entry of a. - const pos = ArrayPrototypeIndexOf(b, a[i]); - if (pos !== -1) { - const rest = b.length - pos; - if (rest > 3) { - let len = 1; - const maxLen = MathMin(a.length - i, rest); - // Count the number of consecutive entries. - while (maxLen > len && a[i + len] === b[pos + len]) { - len++; - } - if (len > 3) { - return [len, i]; - } - } - } - } - - return [0, 0]; -} - function enhanceStackTrace(err, own) { let ctorInfo = ''; try { @@ -456,9 +441,9 @@ function enhanceStackTrace(err, own) { const ownStack = ArrayPrototypeSlice( StringPrototypeSplit(own.stack, '\n'), 1); - const { 0: len, 1: off } = identicalSequenceRange(ownStack, errStack); + const { len, offset } = identicalSequenceRange(ownStack, errStack); if (len > 0) { - ArrayPrototypeSplice(ownStack, off + 1, len - 2, + ArrayPrototypeSplice(ownStack, offset + 1, len - 2, ' [... lines matching original stack trace ...]'); } @@ -493,6 +478,7 @@ EventEmitter.prototype.emit = function emit(type, ...args) { const capture = {}; ErrorCaptureStackTrace(capture, EventEmitter.prototype.emit); ObjectDefineProperty(er, kEnhanceStackBeforeInspector, { + __proto__: null, value: FunctionPrototypeBind(enhanceStackTrace, this, er, capture), configurable: true }); @@ -938,11 +924,11 @@ function getEventListeners(emitterOrTarget, type) { * @param {{ signal: AbortSignal; }} [options] * @returns {Promise} */ -async function once(emitter, name, options = {}) { +async function once(emitter, name, options = kEmptyObject) { const signal = options?.signal; validateAbortSignal(signal, 'options.signal'); if (signal?.aborted) - throw new AbortError(); + throw new AbortError(undefined, { cause: signal?.reason }); return new Promise((resolve, reject) => { const errorListener = (err) => { emitter.removeListener(name, resolver); @@ -962,12 +948,14 @@ async function once(emitter, name, options = {}) { }; eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); if (name !== 'error' && typeof emitter.once === 'function') { + // EventTarget does not have `error` event semantics like Node + // EventEmitters, we listen to `error` events only on EventEmitters. emitter.once('error', errorListener); } function abortListener() { eventTargetAgnosticRemoveListener(emitter, name, resolver); eventTargetAgnosticRemoveListener(emitter, 'error', errorListener); - reject(new AbortError()); + reject(new AbortError(undefined, { cause: signal?.reason })); } if (signal != null) { eventTargetAgnosticAddListener( @@ -1001,9 +989,7 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) { emitter.on(name, listener); } } else if (typeof emitter.addEventListener === 'function') { - // EventTarget does not have `error` event semantics like Node - // EventEmitters, we do not listen to `error` events here. - emitter.addEventListener(name, (arg) => { listener(arg); }, flags); + emitter.addEventListener(name, listener, flags); } else { throw new ERR_INVALID_ARG_TYPE('emitter', 'EventEmitter', emitter); } @@ -1020,7 +1006,7 @@ function on(emitter, event, options) { const signal = options?.signal; validateAbortSignal(signal, 'options.signal'); if (signal?.aborted) - throw new AbortError(); + throw new AbortError(undefined, { cause: signal?.reason }); const unconsumedEvents = []; const unconsumedPromises = []; @@ -1108,7 +1094,7 @@ function on(emitter, event, options) { return iterator; function abortListener() { - errorHandler(new AbortError()); + errorHandler(new AbortError(undefined, { cause: signal?.reason })); } function eventHandler(...args) { diff --git a/lib/fs.js b/lib/fs.js index c33450fce85..ffc0ab63284 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -24,22 +24,17 @@ 'use strict'; -// When using FSReqCallback, make sure to create the object only *after* all -// parameter validation has happened, so that the objects are not kept in memory -// in case they are created but never used due to an exception. - const { ArrayPrototypePush, BigIntPrototypeToString, MathMax, Number, - ObjectCreate, ObjectDefineProperties, ObjectDefineProperty, Promise, ReflectApply, - RegExpPrototypeExec, SafeMap, + SafeSet, String, StringPrototypeCharCodeAt, StringPrototypeIndexOf, @@ -83,7 +78,14 @@ const { const { FSReqCallback } = binding; const { toPathIfFileURL } = require('internal/url'); -const internalUtil = require('internal/util'); +const { + customPromisifyArgs: kCustomPromisifyArgsSymbol, + kEmptyObject, + promisify: { + custom: kCustomPromisifiedSymbol, + }, + SideEffectFreeRegExpPrototypeExec, +} = require('internal/util'); const { constants: { kIoMaxLength, @@ -116,6 +118,7 @@ const { validateRmOptionsSync, validateRmdirOptions, validateStringAfterArrayBufferView, + validatePrimitiveStringAfterArrayBufferView, warnOnNonPortableTemplate } = require('internal/fs/utils'); const { @@ -136,6 +139,7 @@ const { validateEncoding, validateFunction, validateInteger, + validateObject, validateString, } = require('internal/validators'); @@ -270,10 +274,11 @@ function exists(path, callback) { } } -ObjectDefineProperty(exists, internalUtil.promisify.custom, { - value: (path) => { +ObjectDefineProperty(exists, kCustomPromisifiedSymbol, { + __proto__: null, + value: function exists(path) { // eslint-disable-line func-name-matching return new Promise((resolve) => fs.exists(path, resolve)); - } + }, }); // fs.existsSync never throws, it only returns true or false. @@ -350,7 +355,7 @@ function readFileAfterStat(err, stats) { function checkAborted(signal, callback) { if (signal?.aborted) { - callback(new AbortError()); + callback(new AbortError(undefined, { cause: signal?.reason })); return true; } return false; @@ -590,9 +595,9 @@ function openSync(path, flags, mode) { * Reads file from the specified `fd` (file descriptor). * @param {number} fd * @param {Buffer | TypedArray | DataView} buffer - * @param {number} offset + * @param {number} offsetOrOptions * @param {number} length - * @param {number | bigint} position + * @param {number | bigint | null} position * @param {( * err?: Error, * bytesRead?: number, @@ -600,30 +605,36 @@ function openSync(path, flags, mode) { * ) => any} callback * @returns {void} */ -function read(fd, buffer, offset, length, position, callback) { +function read(fd, buffer, offsetOrOptions, length, position, callback) { fd = getValidatedFd(fd); - if (arguments.length <= 3) { - // Assume fs.read(fd, options, callback) - let options = ObjectCreate(null); - if (arguments.length < 3) { + let offset = offsetOrOptions; + let params = null; + if (arguments.length <= 4) { + if (arguments.length === 4) { + // This is fs.read(fd, buffer, options, callback) + validateObject(offsetOrOptions, 'options', { nullable: true }); + callback = length; + params = offsetOrOptions; + } else if (arguments.length === 3) { + // This is fs.read(fd, bufferOrParams, callback) + if (!isArrayBufferView(buffer)) { + // This is fs.read(fd, params, callback) + params = buffer; + ({ buffer = Buffer.alloc(16384) } = params ?? kEmptyObject); + } + callback = offsetOrOptions; + } else { // This is fs.read(fd, callback) - // buffer will be the callback callback = buffer; - } else { - // This is fs.read(fd, {}, callback) - // buffer will be the options object - // offset is the callback - options = buffer; - callback = offset; + buffer = Buffer.alloc(16384); } ({ - buffer = Buffer.alloc(16384), offset = 0, length = buffer.byteLength - offset, - position = null - } = options); + position = null, + } = params ?? kEmptyObject); } validateBuffer(buffer); @@ -666,8 +677,8 @@ function read(fd, buffer, offset, length, position, callback) { binding.read(fd, buffer, offset, length, position, req); } -ObjectDefineProperty(read, internalUtil.customPromisifyArgs, - { value: ['bytesRead', 'buffer'], enumerable: false }); +ObjectDefineProperty(read, kCustomPromisifyArgsSymbol, + { __proto__: null, value: ['bytesRead', 'buffer'], enumerable: false }); /** * Synchronously reads the file from the @@ -677,7 +688,7 @@ ObjectDefineProperty(read, internalUtil.customPromisifyArgs, * @param {{ * offset?: number; * length?: number; - * position?: number | bigint; + * position?: number | bigint | null; * }} [offset] * @returns {number} */ @@ -688,12 +699,12 @@ function readSync(fd, buffer, offset, length, position) { if (arguments.length <= 3) { // Assume fs.readSync(fd, buffer, options) - const options = offset || ObjectCreate(null); + const options = offset || kEmptyObject; ({ offset = 0, length = buffer.byteLength - offset, - position = null + position = null, } = options); } @@ -733,7 +744,7 @@ function readSync(fd, buffer, offset, length, position) { * and writes to an array of `ArrayBufferView`s. * @param {number} fd * @param {ArrayBufferView[]} buffers - * @param {number} [position] + * @param {number | null} [position] * @param {( * err?: Error, * bytesRead?: number, @@ -759,8 +770,8 @@ function readv(fd, buffers, position, callback) { return binding.readBuffers(fd, buffers, position, req); } -ObjectDefineProperty(readv, internalUtil.customPromisifyArgs, - { value: ['bytesRead', 'buffers'], enumerable: false }); +ObjectDefineProperty(readv, kCustomPromisifyArgsSymbol, + { __proto__: null, value: ['bytesRead', 'buffers'], enumerable: false }); /** * Synchronously reads file from the @@ -768,7 +779,7 @@ ObjectDefineProperty(readv, internalUtil.customPromisifyArgs, * of `ArrayBufferView`s. * @param {number} fd * @param {ArrayBufferView[]} buffers - * @param {number} [position] + * @param {number | null} [position] * @returns {number} */ function readvSync(fd, buffers, position) { @@ -789,9 +800,9 @@ function readvSync(fd, buffers, position) { * Writes `buffer` to the specified `fd` (file descriptor). * @param {number} fd * @param {Buffer | TypedArray | DataView | string | object} buffer - * @param {number} [offset] + * @param {number | object} [offsetOrOptions] * @param {number} [length] - * @param {number} [position] + * @param {number | null} [position] * @param {( * err?: Error, * bytesWritten?: number; @@ -799,7 +810,7 @@ function readvSync(fd, buffers, position) { * ) => any} callback * @returns {void} */ -function write(fd, buffer, offset, length, position, callback) { +function write(fd, buffer, offsetOrOptions, length, position, callback) { function wrapper(err, written) { // Retain a reference to buffer so that it can't be GC'ed too soon. callback(err, written || 0, buffer); @@ -807,8 +818,18 @@ function write(fd, buffer, offset, length, position, callback) { fd = getValidatedFd(fd); + let offset = offsetOrOptions; if (isArrayBufferView(buffer)) { callback = maybeCallback(callback || position || length || offset); + + if (typeof offset === 'object') { + ({ + offset = 0, + length = buffer.byteLength - offset, + position = null, + } = offsetOrOptions ?? kEmptyObject); + } + if (offset == null || typeof offset === 'function') { offset = 0; } else { @@ -846,24 +867,35 @@ function write(fd, buffer, offset, length, position, callback) { return binding.writeString(fd, str, offset, length, req); } -ObjectDefineProperty(write, internalUtil.customPromisifyArgs, - { value: ['bytesWritten', 'buffer'], enumerable: false }); +ObjectDefineProperty(write, kCustomPromisifyArgsSymbol, + { __proto__: null, value: ['bytesWritten', 'buffer'], enumerable: false }); /** * Synchronously writes `buffer` to the * specified `fd` (file descriptor). * @param {number} fd - * @param {Buffer | TypedArray | DataView | string | object} buffer - * @param {number} [offset] - * @param {number} [length] - * @param {number} [position] + * @param {Buffer | TypedArray | DataView | string} buffer + * @param {{ + * offset?: number; + * length?: number; + * position?: number | null; + * }} [offsetOrOptions] * @returns {number} */ -function writeSync(fd, buffer, offset, length, position) { +function writeSync(fd, buffer, offsetOrOptions, length, position) { fd = getValidatedFd(fd); const ctx = {}; let result; + + let offset = offsetOrOptions; if (isArrayBufferView(buffer)) { + if (typeof offset === 'object') { + ({ + offset = 0, + length = buffer.byteLength - offset, + position = null, + } = offsetOrOptions ?? kEmptyObject); + } if (position === undefined) position = null; if (offset == null) { @@ -877,7 +909,7 @@ function writeSync(fd, buffer, offset, length, position) { result = binding.writeBuffer(fd, buffer, offset, length, position, undefined, ctx); } else { - validateStringAfterArrayBufferView(buffer, 'buffer'); + validatePrimitiveStringAfterArrayBufferView(buffer, 'buffer'); validateEncoding(buffer, length); if (offset === undefined) @@ -894,7 +926,7 @@ function writeSync(fd, buffer, offset, length, position) { * specified `fd` (file descriptor). * @param {number} fd * @param {ArrayBufferView[]} buffers - * @param {number} [position] + * @param {number | null} [position] * @param {( * err?: Error, * bytesWritten?: number, @@ -925,7 +957,8 @@ function writev(fd, buffers, position, callback) { return binding.writeBuffers(fd, buffers, position, req); } -ObjectDefineProperty(writev, internalUtil.customPromisifyArgs, { +ObjectDefineProperty(writev, kCustomPromisifyArgsSymbol, { + __proto__: null, value: ['bytesWritten', 'buffer'], enumerable: false }); @@ -935,7 +968,7 @@ ObjectDefineProperty(writev, internalUtil.customPromisifyArgs, { * to the specified `fd` (file descriptor). * @param {number} fd * @param {ArrayBufferView[]} buffers - * @param {number} [position] + * @param {number | null} [position] * @returns {number} */ function writevSync(fd, buffers, position) { @@ -1367,7 +1400,7 @@ function mkdirSync(path, options) { */ function readdir(path, options, callback) { callback = makeCallback(typeof options === 'function' ? options : callback); - options = getOptions(options, {}); + options = getOptions(options); path = getValidatedPath(path); const req = new FSReqCallback(); @@ -1396,7 +1429,7 @@ function readdir(path, options, callback) { * @returns {string | Buffer[] | Dirent[]} */ function readdirSync(path, options) { - options = getOptions(options, {}); + options = getOptions(options); path = getValidatedPath(path); const ctx = { path }; const result = binding.readdir(pathModule.toNamespacedPath(path), @@ -1420,7 +1453,7 @@ function readdirSync(path, options) { function fstat(fd, options = { bigint: false }, callback) { if (typeof options === 'function') { callback = options; - options = {}; + options = kEmptyObject; } fd = getValidatedFd(fd); callback = makeStatsCallback(callback); @@ -1444,7 +1477,7 @@ function fstat(fd, options = { bigint: false }, callback) { function lstat(path, options = { bigint: false }, callback) { if (typeof options === 'function') { callback = options; - options = {}; + options = kEmptyObject; } callback = makeStatsCallback(callback); path = getValidatedPath(path); @@ -1467,7 +1500,7 @@ function lstat(path, options = { bigint: false }, callback) { function stat(path, options = { bigint: false }, callback) { if (typeof options === 'function') { callback = options; - options = {}; + options = kEmptyObject; } callback = makeStatsCallback(callback); path = getValidatedPath(path); @@ -1496,11 +1529,10 @@ function hasNoEntryError(ctx) { * @param {number} fd * @param {{ * bigint?: boolean; - * throwIfNoEntry?: boolean; * }} [options] * @returns {Stats} */ -function fstatSync(fd, options = { bigint: false, throwIfNoEntry: true }) { +function fstatSync(fd, options = { bigint: false }) { fd = getValidatedFd(fd); const ctx = { fd }; const stats = binding.fstat(fd, options.bigint, undefined, ctx); @@ -1565,7 +1597,7 @@ function statSync(path, options = { bigint: false, throwIfNoEntry: true }) { */ function readlink(path, options, callback) { callback = makeCallback(typeof options === 'function' ? options : callback); - options = getOptions(options, {}); + options = getOptions(options); path = getValidatedPath(path, 'oldPath'); const req = new FSReqCallback(); req.oncomplete = callback; @@ -1580,7 +1612,7 @@ function readlink(path, options, callback) { * @returns {string | Buffer} */ function readlinkSync(path, options) { - options = getOptions(options, {}); + options = getOptions(options); path = getValidatedPath(path, 'oldPath'); const ctx = { path }; const result = binding.readlink(pathModule.toNamespacedPath(path), @@ -1593,7 +1625,7 @@ function readlinkSync(path, options) { * Creates the link called `path` pointing to `target`. * @param {string | Buffer | URL} target * @param {string | Buffer | URL} path - * @param {string} [type_] + * @param {string | null} [type_] * @param {(err?: Error) => any} callback_ * @returns {void} */ @@ -1646,7 +1678,7 @@ function symlink(target, path, type_, callback_) { * pointing to `target`. * @param {string | Buffer | URL} target * @param {string | Buffer | URL} path - * @param {string} [type] + * @param {string | null} [type] * @returns {void} */ function symlinkSync(target, path, type) { @@ -2067,7 +2099,7 @@ function lutimesSync(path, atime, mtime) { function writeAll(fd, isUserFd, buffer, offset, length, signal, callback) { if (signal?.aborted) { - const abortError = new AbortError(); + const abortError = new AbortError(undefined, { cause: signal?.reason }); if (isUserFd) { callback(abortError); } else { @@ -2251,7 +2283,7 @@ function watch(filename, options, listener) { if (typeof options === 'function') { listener = options; } - options = getOptions(options, {}); + options = getOptions(options); // Don't make changes directly on options object options = copyObject(options); @@ -2373,7 +2405,7 @@ if (isWindows) { // slash. const splitRootRe = /^(?:[a-zA-Z]:|[\\/]{2}[^\\/]+[\\/][^\\/]+)?[\\/]*/; splitRoot = function splitRoot(str) { - return RegExpPrototypeExec(splitRootRe, str)[0]; + return SideEffectFreeRegExpPrototypeExec(splitRootRe, str)[0]; }; } else { splitRoot = function splitRoot(str) { @@ -2414,8 +2446,6 @@ if (isWindows) { }; } -const emptyObj = ObjectCreate(null); - /** * Returns the resolved pathname. * @param {string | Buffer | URL} p @@ -2423,7 +2453,7 @@ const emptyObj = ObjectCreate(null); * @returns {string | Buffer} */ function realpathSync(p, options) { - options = getOptions(options, emptyObj); + options = getOptions(options); p = toPathIfFileURL(p); if (typeof p !== 'string') { p += ''; @@ -2437,8 +2467,8 @@ function realpathSync(p, options) { return maybeCachedResult; } - const seenLinks = ObjectCreate(null); - const knownHard = ObjectCreate(null); + const seenLinks = new SafeMap(); + const knownHard = new SafeSet(); const original = p; // Current character position in p @@ -2459,7 +2489,7 @@ function realpathSync(p, options) { const ctx = { path: base }; binding.lstat(pathModule.toNamespacedPath(base), false, undefined, ctx); handleErrorFromBinding(ctx); - knownHard[base] = true; + knownHard.add(base); } // Walk down the path, swapping out linked path parts for their real @@ -2481,7 +2511,7 @@ function realpathSync(p, options) { } // Continue if not a symlink, break if a pipe/socket - if (knownHard[base] || cache?.get(base) === base) { + if (knownHard.has(base) || cache?.get(base) === base) { if (isFileType(binding.statValues, S_IFIFO) || isFileType(binding.statValues, S_IFSOCK)) { break; @@ -2503,7 +2533,7 @@ function realpathSync(p, options) { handleErrorFromBinding(ctx); if (!isFileType(stats, S_IFLNK)) { - knownHard[base] = true; + knownHard.add(base); cache?.set(base, base); continue; } @@ -2516,8 +2546,8 @@ function realpathSync(p, options) { const dev = BigIntPrototypeToString(stats[0], 32); const ino = BigIntPrototypeToString(stats[7], 32); id = `${dev}:${ino}`; - if (seenLinks[id]) { - linkTarget = seenLinks[id]; + if (seenLinks.has(id)) { + linkTarget = seenLinks.get(id); } } if (linkTarget === null) { @@ -2530,7 +2560,7 @@ function realpathSync(p, options) { resolvedLink = pathModule.resolve(previous, linkTarget); cache?.set(base, resolvedLink); - if (!isWindows) seenLinks[id] = linkTarget; + if (!isWindows) seenLinks.set(id, linkTarget); } // Resolve the link, then start over @@ -2541,11 +2571,11 @@ function realpathSync(p, options) { pos = current.length; // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { + if (isWindows && !knownHard.has(base)) { const ctx = { path: base }; binding.lstat(pathModule.toNamespacedPath(base), false, undefined, ctx); handleErrorFromBinding(ctx); - knownHard[base] = true; + knownHard.add(base); } } @@ -2560,10 +2590,10 @@ function realpathSync(p, options) { * @returns {string | Buffer} */ realpathSync.native = (path, options) => { - options = getOptions(options, {}); + options = getOptions(options); path = getValidatedPath(path); const ctx = { path }; - const result = binding.realpath(path, options.encoding, undefined, ctx); + const result = binding.realpath(pathModule.toNamespacedPath(path), options.encoding, undefined, ctx); handleErrorFromBinding(ctx); return result; }; @@ -2581,7 +2611,7 @@ realpathSync.native = (path, options) => { */ function realpath(p, options, callback) { callback = typeof options === 'function' ? options : maybeCallback(callback); - options = getOptions(options, {}); + options = getOptions(options); p = toPathIfFileURL(p); if (typeof p !== 'string') { @@ -2590,8 +2620,8 @@ function realpath(p, options, callback) { validatePath(p); p = pathModule.resolve(p); - const seenLinks = ObjectCreate(null); - const knownHard = ObjectCreate(null); + const seenLinks = new SafeMap(); + const knownHard = new SafeSet(); // Current character position in p let pos; @@ -2606,10 +2636,10 @@ function realpath(p, options, callback) { pos = current.length; // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { + if (isWindows && !knownHard.has(base)) { fs.lstat(base, (err, stats) => { if (err) return callback(err); - knownHard[base] = true; + knownHard.add(base); LOOP(); }); } else { @@ -2639,7 +2669,7 @@ function realpath(p, options, callback) { } // Continue if not a symlink, break if a pipe/socket - if (knownHard[base]) { + if (knownHard.has(base)) { if (isFileType(binding.statValues, S_IFIFO) || isFileType(binding.statValues, S_IFSOCK)) { return callback(null, encodeRealpathResult(p, options)); @@ -2655,7 +2685,7 @@ function realpath(p, options, callback) { // If not a symlink, skip to the next path part if (!stats.isSymbolicLink()) { - knownHard[base] = true; + knownHard.add(base); return process.nextTick(LOOP); } @@ -2667,15 +2697,15 @@ function realpath(p, options, callback) { const dev = BigIntPrototypeToString(stats.dev, 32); const ino = BigIntPrototypeToString(stats.ino, 32); id = `${dev}:${ino}`; - if (seenLinks[id]) { - return gotTarget(null, seenLinks[id]); + if (seenLinks.has(id)) { + return gotTarget(null, seenLinks.get(id)); } } fs.stat(base, (err) => { if (err) return callback(err); fs.readlink(base, (err, target) => { - if (!isWindows) seenLinks[id] = target; + if (!isWindows) seenLinks.set(id, target); gotTarget(err, target); }); }); @@ -2694,10 +2724,10 @@ function realpath(p, options, callback) { pos = current.length; // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { + if (isWindows && !knownHard.has(base)) { fs.lstat(base, (err) => { if (err) return callback(err); - knownHard[base] = true; + knownHard.add(base); LOOP(); }); } else { @@ -2719,11 +2749,11 @@ function realpath(p, options, callback) { */ realpath.native = (path, options, callback) => { callback = makeCallback(callback || options); - options = getOptions(options, {}); + options = getOptions(options); path = getValidatedPath(path); const req = new FSReqCallback(); req.oncomplete = callback; - return binding.realpath(path, options.encoding, req); + return binding.realpath(pathModule.toNamespacedPath(path), options.encoding, req); }; /** @@ -2738,7 +2768,7 @@ realpath.native = (path, options, callback) => { */ function mkdtemp(prefix, options, callback) { callback = makeCallback(typeof options === 'function' ? options : callback); - options = getOptions(options, {}); + options = getOptions(options); validateString(prefix, 'prefix'); nullCheck(prefix, 'prefix'); @@ -2755,7 +2785,7 @@ function mkdtemp(prefix, options, callback) { * @returns {string} */ function mkdtempSync(prefix, options) { - options = getOptions(options, {}); + options = getOptions(options); validateString(prefix, 'prefix'); nullCheck(prefix, 'prefix'); @@ -2865,7 +2895,7 @@ function lazyLoadStreams() { /** * Creates a readable stream with a default `highWaterMark` - * of 64 kb. + * of 64 KiB. * @param {string | Buffer | URL} path * @param {string | { * flags?: string; @@ -2877,7 +2907,7 @@ function lazyLoadStreams() { * start: number; * end?: number; * highWaterMark?: number; - * fs?: Object | null; + * fs?: object | null; * }} [options] * @returns {ReadStream} */ @@ -2897,7 +2927,7 @@ function createReadStream(path, options) { * autoClose?: boolean; * emitClose?: boolean; * start: number; - * fs?: Object | null; + * fs?: object | null; * }} [options] * @returns {WriteStream} */ @@ -3041,16 +3071,18 @@ module.exports = fs = { }; ObjectDefineProperties(fs, { - F_OK: { enumerable: true, value: F_OK || 0 }, - R_OK: { enumerable: true, value: R_OK || 0 }, - W_OK: { enumerable: true, value: W_OK || 0 }, - X_OK: { enumerable: true, value: X_OK || 0 }, + F_OK: { __proto__: null, enumerable: true, value: F_OK || 0 }, + R_OK: { __proto__: null, enumerable: true, value: R_OK || 0 }, + W_OK: { __proto__: null, enumerable: true, value: W_OK || 0 }, + X_OK: { __proto__: null, enumerable: true, value: X_OK || 0 }, constants: { + __proto__: null, configurable: false, enumerable: true, value: constants }, promises: { + __proto__: null, configurable: true, enumerable: true, get() { diff --git a/lib/http.js b/lib/http.js index 5120ec65e3f..d7acafe4f31 100644 --- a/lib/http.js +++ b/lib/http.js @@ -27,9 +27,10 @@ const { ObjectDefineProperty, } = primordials; +const { validateInteger } = require('internal/validators'); const httpAgent = require('_http_agent'); const { ClientRequest } = require('_http_client'); -const { methods } = require('_http_common'); +const { methods, parsers } = require('_http_common'); const { IncomingMessage } = require('_http_incoming'); const { validateHeaderName, @@ -123,10 +124,15 @@ module.exports = { validateHeaderName, validateHeaderValue, get, - request + request, + setMaxIdleHTTPParsers(max) { + validateInteger(max, 'max', 1); + parsers.max = max; + } }; ObjectDefineProperty(module.exports, 'maxHeaderSize', { + __proto__: null, configurable: true, enumerable: true, get() { @@ -140,6 +146,7 @@ ObjectDefineProperty(module.exports, 'maxHeaderSize', { }); ObjectDefineProperty(module.exports, 'globalAgent', { + __proto__: null, configurable: true, enumerable: true, get() { diff --git a/lib/https.js b/lib/https.js index 7a9a4243aaa..e41d79951fb 100644 --- a/lib/https.js +++ b/lib/https.js @@ -34,7 +34,11 @@ const { ReflectConstruct, } = primordials; -require('internal/util').assertCrypto(); +const { + assertCrypto, + kEmptyObject, +} = require('internal/util'); +assertCrypto(); const tls = require('tls'); const { Agent: HttpAgent } = require('_http_agent'); @@ -203,7 +207,7 @@ Agent.prototype.createConnection = createConnection; * }} [options] * @returns {string} */ -Agent.prototype.getName = function getName(options = {}) { +Agent.prototype.getName = function getName(options = kEmptyObject) { let name = FunctionPrototypeCall(HttpAgent.prototype.getName, this, options); name += ':'; @@ -362,7 +366,7 @@ function request(...args) { * createConnection?: Function; * defaultPort?: number; * family?: number; - * headers?: Object; + * headers?: object; * hints?: number; * host?: string; * hostname?: string; diff --git a/lib/inspector.js b/lib/inspector.js index 46779a0ec21..4212ebb34f8 100644 --- a/lib/inspector.js +++ b/lib/inspector.js @@ -26,10 +26,13 @@ const EventEmitter = require('events'); const { queueMicrotask } = require('internal/process/task_queues'); const { validateCallback, + isUint32, + validateInt32, validateObject, validateString, } = require('internal/validators'); const { isMainThread } = require('worker_threads'); +const { _debugEnd } = internalBinding('process_methods'); const { Connection, @@ -167,6 +170,13 @@ function inspectorOpen(port, host, wait) { if (isEnabled()) { throw new ERR_INSPECTOR_ALREADY_ACTIVATED(); } + // inspectorOpen() currently does not typecheck its arguments and adding + // such checks would be a potentially breaking change. However, the native + // open() function requires the port to fit into a 16-bit unsigned integer, + // causing an integer overflow otherwise, so we at least need to prevent that. + if (isUint32(port)) { + validateInt32(port, 'port', 0, 65535); + } open(port, host); if (wait) waitForDebugger(); @@ -185,7 +195,7 @@ function inspectorWaitForDebugger() { module.exports = { open: inspectorOpen, - close: process._debugEnd, + close: _debugEnd, url, waitForDebugger: inspectorWaitForDebugger, // This is dynamically added during bootstrap, diff --git a/lib/internal/abort_controller.js b/lib/internal/abort_controller.js index 3233fb8c0c2..48da6c68d62 100644 --- a/lib/internal/abort_controller.js +++ b/lib/internal/abort_controller.js @@ -141,6 +141,12 @@ class AbortSignal extends EventTarget { return this[kReason]; } + throwIfAborted() { + if (this.aborted) { + throw this.reason; + } + } + [customInspectSymbol](depth, options) { return customInspect(this, { aborted: this.aborted @@ -151,7 +157,8 @@ class AbortSignal extends EventTarget { * @param {any} reason * @returns {AbortSignal} */ - static abort(reason) { + static abort( + reason = new DOMException('This operation was aborted', 'AbortError')) { return createAbortSignal(true, reason); } @@ -258,6 +265,7 @@ ObjectDefineProperties(AbortSignal.prototype, { }); ObjectDefineProperty(AbortSignal.prototype, SymbolToStringTag, { + __proto__: null, writable: false, enumerable: false, configurable: true, @@ -310,7 +318,7 @@ class AbortController { /** * @param {any} reason */ - abort(reason) { + abort(reason = new DOMException('This operation was aborted', 'AbortError')) { validateAbortController(this); abortSignal(this[kSignal], reason); } @@ -328,6 +336,7 @@ ObjectDefineProperties(AbortController.prototype, { }); ObjectDefineProperty(AbortController.prototype, SymbolToStringTag, { + __proto__: null, writable: false, enumerable: false, configurable: true, diff --git a/lib/internal/assert/assertion_error.js b/lib/internal/assert/assertion_error.js index 837c37b1221..17e261bd4cb 100644 --- a/lib/internal/assert/assertion_error.js +++ b/lib/internal/assert/assertion_error.js @@ -21,15 +21,12 @@ const { inspect } = require('internal/util/inspect'); const { removeColors, } = require('internal/util'); +const colors = require('internal/util/colors'); const { validateObject, } = require('internal/validators'); const { isErrorStackTraceLimitWritable } = require('internal/errors'); -let blue = ''; -let green = ''; -let red = ''; -let white = ''; const kReadableOperator = { deepStrictEqual: 'Expected values to be strictly deep-equal:', @@ -55,7 +52,7 @@ function copyError(source) { for (const key of keys) { target[key] = source[key]; } - ObjectDefineProperty(target, 'message', { value: source.message }); + ObjectDefineProperty(target, 'message', { __proto__: null, value: source.message }); return target; } @@ -169,7 +166,7 @@ function createErrDiff(actual, expected, operator) { // Only remove lines in case it makes sense to collapse those. // TODO: Accept env to always show the full error. if (actualLines.length > 50) { - actualLines[46] = `${blue}...${white}`; + actualLines[46] = `${colors.blue}...${colors.white}`; while (actualLines.length > 47) { ArrayPrototypePop(actualLines); } @@ -182,7 +179,7 @@ function createErrDiff(actual, expected, operator) { // There were at least five identical lines at the end. Mark a couple of // skipped. if (i >= 5) { - end = `\n${blue}...${white}${end}`; + end = `\n${colors.blue}...${colors.white}${end}`; skipped = true; } if (other !== '') { @@ -193,15 +190,15 @@ function createErrDiff(actual, expected, operator) { let printedLines = 0; let identical = 0; const msg = kReadableOperator[operator] + - `\n${green}+ actual${white} ${red}- expected${white}`; - const skippedMsg = ` ${blue}...${white} Lines skipped`; + `\n${colors.green}+ actual${colors.white} ${colors.red}- expected${colors.white}`; + const skippedMsg = ` ${colors.blue}...${colors.white} Lines skipped`; let lines = actualLines; - let plusMinus = `${green}+${white}`; + let plusMinus = `${colors.green}+${colors.white}`; let maxLength = expectedLines.length; if (actualLines.length < maxLines) { lines = expectedLines; - plusMinus = `${red}-${white}`; + plusMinus = `${colors.red}-${colors.white}`; maxLength = actualLines.length; } @@ -216,7 +213,7 @@ function createErrDiff(actual, expected, operator) { res += `\n ${lines[i - 3]}`; printedLines++; } else { - res += `\n${blue}...${white}`; + res += `\n${colors.blue}...${colors.white}`; skipped = true; } } @@ -272,7 +269,7 @@ function createErrDiff(actual, expected, operator) { res += `\n ${actualLines[i - 3]}`; printedLines++; } else { - res += `\n${blue}...${white}`; + res += `\n${colors.blue}...${colors.white}`; skipped = true; } } @@ -286,8 +283,8 @@ function createErrDiff(actual, expected, operator) { identical = 0; // Add the actual line to the result and cache the expected diverging // line so consecutive diverging lines show up as +++--- and not +-+-+-. - res += `\n${green}+${white} ${actualLine}`; - other += `\n${red}-${white} ${expectedLine}`; + res += `\n${colors.green}+${colors.white} ${actualLine}`; + other += `\n${colors.red}-${colors.white} ${expectedLine}`; printedLines += 2; // Lines are identical } else { @@ -306,8 +303,8 @@ function createErrDiff(actual, expected, operator) { } // Inspected object to big (Show ~50 rows max) if (printedLines > 50 && i < maxLines - 2) { - return `${msg}${skippedMsg}\n${res}\n${blue}...${white}${other}\n` + - `${blue}...${white}`; + return `${msg}${skippedMsg}\n${res}\n${colors.blue}...${colors.white}${other}\n` + + `${colors.blue}...${colors.white}`; } } @@ -347,21 +344,9 @@ class AssertionError extends Error { if (message != null) { super(String(message)); } else { - if (process.stderr.isTTY) { - // Reset on each call to make sure we handle dynamically set environment - // variables correct. - if (process.stderr.hasColors()) { - blue = '\u001b[34m'; - green = '\u001b[32m'; - white = '\u001b[39m'; - red = '\u001b[31m'; - } else { - blue = ''; - green = ''; - white = ''; - red = ''; - } - } + // Reset colors on each call to make sure we handle dynamically set environment + // variables correct. + colors.refresh(); // Prevent the error stack from being visible by duplicating the error // in a very close way to the original in case both sides are actually // instances of Error. @@ -393,7 +378,7 @@ class AssertionError extends Error { // Only remove lines in case it makes sense to collapse those. // TODO: Accept env to always show the full error. if (res.length > 50) { - res[46] = `${blue}...${white}`; + res[46] = `${colors.blue}...${colors.white}`; while (res.length > 47) { ArrayPrototypePop(res); } @@ -441,6 +426,7 @@ class AssertionError extends Error { this.generatedMessage = !message; ObjectDefineProperty(this, 'name', { + __proto__: null, value: 'AssertionError [ERR_ASSERTION]', enumerable: false, writable: true, diff --git a/lib/internal/assert/calltracker.js b/lib/internal/assert/calltracker.js index 0fbdf70e5d8..2046634932d 100644 --- a/lib/internal/assert/calltracker.js +++ b/lib/internal/assert/calltracker.js @@ -2,15 +2,20 @@ const { ArrayPrototypePush, + ArrayPrototypeSlice, Error, FunctionPrototype, + ObjectFreeze, + Proxy, ReflectApply, SafeSet, + SafeWeakMap, } = primordials; const { codes: { ERR_UNAVAILABLE_DURING_EXIT, + ERR_INVALID_ARG_VALUE, }, } = require('internal/errors'); const AssertionError = require('internal/assert/assertion_error'); @@ -20,63 +25,111 @@ const { const noop = FunctionPrototype; +class CallTrackerContext { + #expected; + #calls; + #name; + #stackTrace; + constructor({ expected, stackTrace, name }) { + this.#calls = []; + this.#expected = expected; + this.#stackTrace = stackTrace; + this.#name = name; + } + + track(thisArg, args) { + const argsClone = ObjectFreeze(ArrayPrototypeSlice(args)); + ArrayPrototypePush(this.#calls, ObjectFreeze({ thisArg, arguments: argsClone })); + } + + get delta() { + return this.#calls.length - this.#expected; + } + + reset() { + this.#calls = []; + } + getCalls() { + return ObjectFreeze(ArrayPrototypeSlice(this.#calls)); + } + + report() { + if (this.delta !== 0) { + const message = `Expected the ${this.#name} function to be ` + + `executed ${this.#expected} time(s) but was ` + + `executed ${this.#calls.length} time(s).`; + return { + message, + actual: this.#calls.length, + expected: this.#expected, + operator: this.#name, + stack: this.#stackTrace + }; + } + } +} + class CallTracker { #callChecks = new SafeSet(); + #trackedFunctions = new SafeWeakMap(); + + #getTrackedFunction(tracked) { + if (!this.#trackedFunctions.has(tracked)) { + throw new ERR_INVALID_ARG_VALUE('tracked', tracked, 'is not a tracked function'); + } + return this.#trackedFunctions.get(tracked); + } + + reset(tracked) { + if (tracked === undefined) { + this.#callChecks.forEach((check) => check.reset()); + return; + } - calls(fn, exact = 1) { + this.#getTrackedFunction(tracked).reset(); + } + + getCalls(tracked) { + return this.#getTrackedFunction(tracked).getCalls(); + } + + calls(fn, expected = 1) { if (process._exiting) throw new ERR_UNAVAILABLE_DURING_EXIT(); if (typeof fn === 'number') { - exact = fn; + expected = fn; fn = noop; } else if (fn === undefined) { fn = noop; } - validateUint32(exact, 'exact', true); + validateUint32(expected, 'expected', true); - const context = { - exact, - actual: 0, + const context = new CallTrackerContext({ + expected, // eslint-disable-next-line no-restricted-syntax stackTrace: new Error(), name: fn.name || 'calls' - }; - const callChecks = this.#callChecks; - callChecks.add(context); - - return function() { - context.actual++; - if (context.actual === context.exact) { - // Once function has reached its call count remove it from - // callChecks set to prevent memory leaks. - callChecks.delete(context); - } - // If function has been called more than expected times, add back into - // callchecks. - if (context.actual === context.exact + 1) { - callChecks.add(context); - } - return ReflectApply(fn, this, arguments); - }; + }); + const tracked = new Proxy(fn, { + __proto__: null, + apply(fn, thisArg, argList) { + context.track(thisArg, argList); + return ReflectApply(fn, thisArg, argList); + }, + }); + this.#callChecks.add(context); + this.#trackedFunctions.set(tracked, context); + return tracked; } report() { const errors = []; for (const context of this.#callChecks) { - // If functions have not been called exact times - if (context.actual !== context.exact) { - const message = `Expected the ${context.name} function to be ` + - `executed ${context.exact} time(s) but was ` + - `executed ${context.actual} time(s).`; - ArrayPrototypePush(errors, { - message, - actual: context.actual, - expected: context.exact, - operator: context.name, - stack: context.stackTrace - }); + const message = context.report(); + if (message !== undefined) { + ArrayPrototypePush(errors, message); } } return errors; @@ -84,12 +137,16 @@ class CallTracker { verify() { const errors = this.report(); - if (errors.length > 0) { - throw new AssertionError({ - message: 'Function(s) were not called the expected number of times', - details: errors, - }); + if (errors.length === 0) { + return; } + const message = errors.length === 1 ? + errors[0].message : + 'Functions were not called the expected number of times'; + throw new AssertionError({ + message, + details: errors, + }); } } diff --git a/lib/internal/async_hooks.js b/lib/internal/async_hooks.js index f15fe5cc99b..25f0075bf45 100644 --- a/lib/internal/async_hooks.js +++ b/lib/internal/async_hooks.js @@ -196,6 +196,7 @@ function emitInitNative(asyncId, type, triggerAsyncId, resource) { try { // Using var here instead of let because "for (var ...)" is faster than let. // Refs: https://github.com/nodejs/node/pull/30380#issuecomment-552948364 + // eslint-disable-next-line no-var for (var i = 0; i < active_hooks.array.length; i++) { if (typeof active_hooks.array[i][init_symbol] === 'function') { active_hooks.array[i][init_symbol]( @@ -228,6 +229,7 @@ function emitHook(symbol, asyncId) { try { // Using var here instead of let because "for (var ...)" is faster than let. // Refs: https://github.com/nodejs/node/pull/30380#issuecomment-552948364 + // eslint-disable-next-line no-var for (var i = 0; i < active_hooks.array.length; i++) { if (typeof active_hooks.array[i][symbol] === 'function') { active_hooks.array[i][symbol](asyncId); @@ -253,6 +255,7 @@ function emitHookFactory(symbol, name) { // Set the name property of the function as it looks good in the stack trace. ObjectDefineProperty(fn, 'name', { + __proto__: null, value: name }); return fn; @@ -326,14 +329,10 @@ function promiseInitHookWithDestroyTracking(promise, parent) { destroyTracking(promise, parent); } -const destroyedSymbol = Symbol('destroyed'); - function destroyTracking(promise, parent) { trackPromise(promise, parent); const asyncId = promise[async_id_symbol]; - const destroyed = { destroyed: false }; - promise[destroyedSymbol] = destroyed; - registerDestroyHook(promise, asyncId, destroyed); + registerDestroyHook(promise, asyncId); } function promiseBeforeHook(promise) { diff --git a/lib/internal/blob.js b/lib/internal/blob.js index a620552d846..7070524c6c4 100644 --- a/lib/internal/blob.js +++ b/lib/internal/blob.js @@ -9,8 +9,8 @@ const { PromiseReject, SafePromisePrototypeFinally, ReflectConstruct, + RegExpPrototypeExec, RegExpPrototypeSymbolReplace, - RegExpPrototypeTest, StringPrototypeToLowerCase, StringPrototypeSplit, Symbol, @@ -44,7 +44,7 @@ const { const { createDeferredPromise, customInspectSymbol: kInspect, - emitExperimentalWarning, + kEmptyObject, } = require('internal/util'); const { inspect } = require('internal/util/inspect'); @@ -134,12 +134,11 @@ class Blob { * }} [options] * @constructs {Blob} */ - constructor(sources = [], options = {}) { - emitExperimentalWarning('buffer.Blob'); + constructor(sources = [], options = kEmptyObject) { if (sources === null || typeof sources[SymbolIterator] !== 'function' || typeof sources === 'string') { - throw new ERR_INVALID_ARG_TYPE('sources', 'Iterable', sources); + throw new ERR_INVALID_ARG_TYPE('sources', 'a sequence', sources); } validateObject(options, 'options'); let { @@ -165,7 +164,7 @@ class Blob { this[kLength] = length; type = `${type}`; - this[kType] = RegExpPrototypeTest(disallowedTypeCharacters, type) ? + this[kType] = RegExpPrototypeExec(disallowedTypeCharacters, type) !== null ? '' : StringPrototypeToLowerCase(type); // eslint-disable-next-line no-constructor-return @@ -247,7 +246,7 @@ class Blob { end |= 0; contentType = `${contentType}`; - if (RegExpPrototypeTest(disallowedTypeCharacters, contentType)) { + if (RegExpPrototypeExec(disallowedTypeCharacters, contentType) !== null) { contentType = ''; } else { contentType = StringPrototypeToLowerCase(contentType); @@ -293,7 +292,7 @@ class Blob { job.ondone = (err, ab) => { if (err !== undefined) - return reject(new AbortError()); + return reject(new AbortError(undefined, { cause: err })); resolve(ab); }; this[kArrayBufferPromise] = @@ -357,6 +356,7 @@ function createBlob(handle, length, type = '') { } ObjectDefineProperty(Blob.prototype, SymbolToStringTag, { + __proto__: null, configurable: true, value: 'Blob', }); diff --git a/lib/internal/bootstrap/loaders.js b/lib/internal/bootstrap/loaders.js index d6869ef6334..a3c3d375f70 100644 --- a/lib/internal/bootstrap/loaders.js +++ b/lib/internal/bootstrap/loaders.js @@ -24,7 +24,7 @@ // and have their nm_flags set to NM_F_INTERNAL. // // Internal JavaScript module loader: -// - NativeModule: a minimal module system used to load the JavaScript core +// - BuiltinModule: a minimal module system used to load the JavaScript core // modules found in lib/**/*.js and deps/**/*.js. All core modules are // compiled into the node binary via node_javascript.cc generated by js2c.py, // so they can be loaded faster without the cost of I/O. This class makes the @@ -44,6 +44,7 @@ /* global process, getLinkedBinding, getInternalBinding, primordials */ const { + ArrayFrom, ArrayPrototypeMap, ArrayPrototypePush, ArrayPrototypeSlice, @@ -63,6 +64,7 @@ const { // Set up process.moduleLoadList. const moduleLoadList = []; ObjectDefineProperty(process, 'moduleLoadList', { + __proto__: null, value: moduleLoadList, configurable: true, enumerable: true, @@ -119,6 +121,11 @@ const legacyWrapperList = new SafeSet([ 'util', ]); +// Modules that can only be imported via the node: scheme. +const schemelessBlockList = new SafeSet([ + 'test', +]); + // Set up process.binding() and process._linkedBinding(). { const bindingObj = ObjectCreate(null); @@ -173,9 +180,9 @@ let internalBinding; const loaderId = 'internal/bootstrap/loaders'; const { - moduleIds, + builtinIds, compileFunction -} = internalBinding('native_module'); +} = internalBinding('builtins'); const getOwn = (target, property, receiver) => { return ObjectPrototypeHasOwnProperty(target, property) ? @@ -188,13 +195,13 @@ const getOwn = (target, property, receiver) => { * Be careful not to expose this to user land unless --expose-internals is * used, in which case there is no compatibility guarantee about this class. */ -class NativeModule { +class BuiltinModule { /** * A map from the module IDs to the module instances. - * @type {Map} + * @type {Map} */ static map = new SafeMap( - ArrayPrototypeMap(moduleIds, (id) => [id, new NativeModule(id)]) + ArrayPrototypeMap(builtinIds, (id) => [id, new BuiltinModule(id)]) ); constructor(id) { @@ -209,7 +216,7 @@ class NativeModule { this.loading = false; // The following properties are used by the ESM implementation and only - // initialized when the native module is loaded by users. + // initialized when the built-in module is loaded by users. /** * The C++ ModuleWrap binding used to interface with the ESM implementation. * @type {ModuleWrap|undefined} @@ -225,7 +232,7 @@ class NativeModule { // To be called during pre-execution when --expose-internals is on. // Enables the user-land module loader to access internal modules. static exposeInternals() { - for (const { 0: id, 1: mod } of NativeModule.map) { + for (const { 0: id, 1: mod } of BuiltinModule.map) { // Do not expose this to user land even with --expose-internals. if (id !== loaderId) { mod.canBeRequiredByUsers = true; @@ -234,14 +241,24 @@ class NativeModule { } static exists(id) { - return NativeModule.map.has(id); + return BuiltinModule.map.has(id); } static canBeRequiredByUsers(id) { - const mod = NativeModule.map.get(id); + const mod = BuiltinModule.map.get(id); return mod && mod.canBeRequiredByUsers; } + // Determine if a core module can be loaded without the node: prefix. This + // function does not validate if the module actually exists. + static canBeRequiredWithoutScheme(id) { + return !schemelessBlockList.has(id); + } + + static getSchemeOnlyModuleNames() { + return ArrayFrom(schemelessBlockList); + } + // Used by user-land module loaders to compile and load builtins. compileForPublicLoader() { if (!this.canBeRequiredByUsers) { @@ -309,6 +326,8 @@ class NativeModule { requireWithFallbackInDeps : nativeModuleRequire; const fn = compileFunction(id); + // Arguments must match the parameters specified in + // BuiltinLoader::LookupAndCompile(). fn(this.exports, requireFn, this, process, internalBinding, primordials); this.loaded = true; @@ -316,6 +335,8 @@ class NativeModule { this.loading = false; } + // "NativeModule" is a legacy name of "BuiltinModule". We keep it + // here to avoid breaking users who parse process.moduleLoadList. ArrayPrototypePush(moduleLoadList, `NativeModule ${id}`); return this.exports; } @@ -325,7 +346,7 @@ class NativeModule { // written in CommonJS style. const loaderExports = { internalBinding, - NativeModule, + BuiltinModule, require: nativeModuleRequire }; @@ -334,7 +355,7 @@ function nativeModuleRequire(id) { return loaderExports; } - const mod = NativeModule.map.get(id); + const mod = BuiltinModule.map.get(id); // Can't load the internal errors module from here, have to use a raw error. // eslint-disable-next-line no-restricted-syntax if (!mod) throw new TypeError(`Missing internal module '${id}'`); @@ -344,7 +365,7 @@ function nativeModuleRequire(id) { // Allow internal modules from dependencies to require // other modules from dependencies by providing fallbacks. function requireWithFallbackInDeps(request) { - if (!NativeModule.map.has(request)) { + if (!BuiltinModule.map.has(request)) { request = `internal/deps/${request}`; } return nativeModuleRequire(request); diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index dfae7675e16..d02c70466b1 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -1,39 +1,55 @@ // Hello, and welcome to hacking node.js! // -// This file is invoked by `node::RunBootstrapping()` in `src/node.cc`, and is -// responsible for setting up node.js core before executing main scripts -// under `lib/internal/main/`. +// This file is invoked by `Realm::BootstrapNode()` in `src/node_realm.cc`, +// and is responsible for setting up Node.js core before main scripts +// under `lib/internal/main/` are executed. // -// This file is expected not to perform any asynchronous operations itself +// By default, Node.js binaries come with an embedded V8 startup snapshot +// that is generated at build-time with a `node_mksnapshot` executable. +// The snapshot generation code can be found in `SnapshotBuilder::Generate()` +// from `src/node_snapshotable.cc`. +// This snapshot captures the V8 heap initialized by scripts under +// `lib/internal/bootstrap/`, including this file. When initializing the main +// thread, Node.js deserializes the heap from the snapshot, instead of actually +// running this script and others in `lib/internal/bootstrap/`. To disable this +// behavior, pass `--no-node-snapshot` when starting the process so that +// Node.js actually runs this script to initialize the heap. +// +// This script is expected not to perform any asynchronous operations itself // when being executed - those should be done in either -// `lib/internal/bootstrap/pre_execution.js` or in main scripts. The majority -// of the code here focuses on setting up the global proxy and the process -// object in a synchronous manner. -// As special caution is given to the performance of the startup process, -// many dependencies are invoked lazily. +// `lib/internal/process/pre_execution.js` or in main scripts. It should not +// query any run-time states (e.g. command line arguments, environment +// variables) when being executed - functions in this script that are invoked +// at a later time can, however, query those states lazily. +// The majority of the code here focuses on setting up the global object and +// the process object in a synchronous, environment-independent manner. // // Scripts run before this file: -// - `lib/internal/per_context/primordials.js`: to save copies of JavaScript +// - `lib/internal/per_context/primordials.js`: this saves copies of JavaScript // builtins that won't be affected by user land monkey-patching for internal // modules to use. -// - `lib/internal/bootstrap/loaders.js`: to setup internal binding and +// - `lib/internal/per_context/domexception.js`: implementation of the +// `DOMException` class. +// - `lib/internal/per_context/messageport.js`: JS-side components of the +// `MessagePort` implementation. +// - `lib/internal/bootstrap/loaders.js`: this sets up internal binding and // module loaders, including `process.binding()`, `process._linkedBinding()`, -// `internalBinding()` and `NativeModule`. +// `internalBinding()` and `BuiltinModule`. // -// This file is run to bootstrap both the main thread and the worker threads. -// After this file is run, certain properties are setup according to the -// configuration of the Node.js instance using the files in +// The initialization done in this script is included in both the main thread +// and the worker threads. After this, further initialization is done based +// on the configuration of the Node.js instance by executing the scripts in // `lib/internal/bootstrap/switches/`. // // Then, depending on how the Node.js instance is launched, one of the main // scripts in `lib/internal/main` will be selected by C++ to start the actual // execution. They may run additional setups exported by -// `lib/internal/bootstrap/pre_execution.js` depending on the runtime states. +// `lib/internal/process/pre_execution.js` depending on the run-time states. 'use strict'; // This file is compiled as if it's wrapped in a function with arguments -// passed by node::RunBootstrapping() +// passed by `BuiltinLoader::CompileAndCall()`. /* global process, require, internalBinding, primordials */ setupPrepareStackTrace(); @@ -57,6 +73,10 @@ const { const config = internalBinding('config'); const internalTimers = require('internal/timers'); const { deprecate } = require('internal/util'); +const { + exiting_aliased_Uint32Array, + getHiddenValue, +} = internalBinding('util'); setupProcessObject(); @@ -64,10 +84,25 @@ setupGlobalProxy(); setupBuffer(); process.domain = null; +{ + const exitingAliasedUint32Array = + getHiddenValue(process, exiting_aliased_Uint32Array); + ObjectDefineProperty(process, '_exiting', { + __proto__: null, + get() { + return exitingAliasedUint32Array[0] === 1; + }, + set(value) { + exitingAliasedUint32Array[0] = value ? 1 : 0; + }, + enumerable: true, + configurable: true, + }); +} process._exiting = false; // process.config is serialized config.gypi -const nativeModule = internalBinding('native_module'); +const nativeModule = internalBinding('builtins'); // TODO(@jasnell): Once this has gone through one full major // release cycle, remove the Proxy and setter and update the @@ -130,6 +165,7 @@ let processConfig = new Proxy( deprecationHandler); ObjectDefineProperty(process, 'config', { + __proto__: null, enumerable: true, configurable: true, get() { return processConfig; }, @@ -275,6 +311,7 @@ setTraceCategoryStateUpdateHandler(perThreadSetup.toggleTraceCategoryState); // process.allowedNodeEnvironmentFlags ObjectDefineProperty(process, 'allowedNodeEnvironmentFlags', { + __proto__: null, get() { const flags = perThreadSetup.buildAllowedFlags(); process.allowedNodeEnvironmentFlags = flags; @@ -284,6 +321,7 @@ ObjectDefineProperty(process, 'allowedNodeEnvironmentFlags', { // this completely to that value. set(value) { ObjectDefineProperty(this, 'allowedNodeEnvironmentFlags', { + __proto__: null, value, configurable: true, enumerable: true, @@ -321,6 +359,7 @@ const features = { }; ObjectDefineProperty(process, 'features', { + __proto__: null, enumerable: true, writable: false, configurable: false, @@ -407,6 +446,7 @@ function setupProcessObject() { ObjectSetPrototypeOf(origProcProto, EventEmitter.prototype); FunctionPrototypeCall(EventEmitter, process); ObjectDefineProperty(process, SymbolToStringTag, { + __proto__: null, enumerable: false, writable: true, configurable: false, @@ -414,6 +454,7 @@ function setupProcessObject() { }); // Make process globally available to users by putting it on the global proxy ObjectDefineProperty(globalThis, 'process', { + __proto__: null, value: process, enumerable: false, writable: true, @@ -423,11 +464,13 @@ function setupProcessObject() { function setupGlobalProxy() { ObjectDefineProperty(globalThis, SymbolToStringTag, { + __proto__: null, value: 'global', writable: false, enumerable: false, configurable: true }); + globalThis.global = globalThis; } function setupBuffer() { @@ -445,18 +488,21 @@ function setupBuffer() { ObjectDefineProperties(globalThis, { 'Buffer': { + __proto__: null, value: Buffer, enumerable: false, writable: true, configurable: true, }, 'atob': { + __proto__: null, value: atob, enumerable: false, writable: true, configurable: true, }, 'btoa': { + __proto__: null, value: btoa, enumerable: false, writable: true, @@ -485,6 +531,7 @@ function createGlobalConsole(consoleFromVM) { // https://heycam.github.io/webidl/#es-namespaces function exposeNamespace(target, name, namespaceObject) { ObjectDefineProperty(target, name, { + __proto__: null, writable: true, enumerable: false, configurable: true, @@ -495,6 +542,7 @@ function exposeNamespace(target, name, namespaceObject) { // https://heycam.github.io/webidl/#es-interfaces function exposeInterface(target, name, interfaceObject) { ObjectDefineProperty(target, name, { + __proto__: null, writable: true, enumerable: false, configurable: true, @@ -505,6 +553,7 @@ function exposeInterface(target, name, interfaceObject) { // https://heycam.github.io/webidl/#define-the-operations function defineOperation(target, name, method) { ObjectDefineProperty(target, name, { + __proto__: null, writable: true, enumerable: true, configurable: true, @@ -515,6 +564,7 @@ function defineOperation(target, name, method) { // https://heycam.github.io/webidl/#Replaceable function defineReplacableAttribute(target, name, value) { ObjectDefineProperty(target, name, { + __proto__: null, writable: true, enumerable: true, configurable: true, diff --git a/lib/internal/bootstrap/pre_execution.js b/lib/internal/bootstrap/pre_execution.js index 8de57a56661..a9f463c4d00 100644 --- a/lib/internal/bootstrap/pre_execution.js +++ b/lib/internal/bootstrap/pre_execution.js @@ -13,6 +13,7 @@ const { const { getOptionValue, getEmbedderOptions, + refreshOptions, } = require('internal/options'); const { reconnectZeroFillToggle } = require('internal/buffer'); const { @@ -25,7 +26,10 @@ const { Buffer } = require('buffer'); const { ERR_MANIFEST_ASSERT_INTEGRITY } = require('internal/errors').codes; const assert = require('internal/assert'); -function prepareMainThreadExecution(expandArgv1 = false) { +function prepareMainThreadExecution(expandArgv1 = false, + initialzeModules = true) { + refreshRuntimeOptions(); + // TODO(joyeecheung): this is also necessary for workers when they deserialize // this toggle from the snapshot. reconnectZeroFillToggle(); @@ -38,6 +42,7 @@ function prepareMainThreadExecution(expandArgv1 = false) { setupWarningHandler(); setupFetch(); setupWebCrypto(); + setupCustomEvent(); // Resolve the coverage directory to an absolute path, and // overwrite process.env so that the original path gets passed @@ -47,7 +52,6 @@ function prepareMainThreadExecution(expandArgv1 = false) { setupCoverageHooks(process.env.NODE_V8_COVERAGE); } - setupDebugEnv(); // Print stack trace on `SIGINT` if option `--trace-sigint` presents. @@ -77,15 +81,25 @@ function prepareMainThreadExecution(expandArgv1 = false) { initializeSourceMapsHandlers(); initializeDeprecations(); initializeWASI(); + + require('internal/v8/startup_snapshot').runDeserializeCallbacks(); + + if (!initialzeModules) { + return; + } + initializeCJSLoader(); initializeESMLoader(); - const CJSLoader = require('internal/modules/cjs/loader'); assert(!CJSLoader.hasLoadedAnyUserCJSModule); loadPreloadModules(); initializeFrozenIntrinsics(); } +function refreshRuntimeOptions() { + refreshOptions(); +} + function patchProcessObject(expandArgv1) { const binding = internalBinding('process_methods'); binding.patchProcessObject(process); @@ -93,10 +107,15 @@ function patchProcessObject(expandArgv1) { require('internal/process/per_thread').refreshHrtimeBuffer(); ObjectDefineProperty(process, 'argv0', { + __proto__: null, enumerable: true, - configurable: false, + // Only set it to true during snapshot building. + configurable: getOptionValue('--build-snapshot'), value: process.argv[0] }); + + process.exitCode = undefined; + process._exiting = false; process.argv[0] = process.execPath; if (expandArgv1 && process.argv[1] && @@ -110,6 +129,12 @@ function patchProcessObject(expandArgv1) { } } + // We need to initialize the global console here again with process.stdout + // and friends for snapshot deserialization. + const globalConsole = require('internal/console/global'); + const { initializeGlobalConsole } = require('internal/console/constructor'); + initializeGlobalConsole(globalConsole); + // TODO(joyeecheung): most of these should be deprecated and removed, // except some that we need to be able to mutate during run time. addReadOnlyProcessAlias('_eval', '--eval'); @@ -131,6 +156,7 @@ function addReadOnlyProcessAlias(name, option, enumerable = true) { const value = getOptionValue(option); if (value) { ObjectDefineProperty(process, name, { + __proto__: null, writable: false, configurable: true, enumerable, @@ -175,27 +201,30 @@ function setupWebCrypto() { let webcrypto; ObjectDefineProperty(globalThis, 'crypto', - ObjectGetOwnPropertyDescriptor({ + { __proto__: null, ...ObjectGetOwnPropertyDescriptor({ get crypto() { webcrypto ??= require('internal/crypto/webcrypto'); return webcrypto.crypto; } - }, 'crypto')); + }, 'crypto') }); if (internalBinding('config').hasOpenSSL) { webcrypto ??= require('internal/crypto/webcrypto'); ObjectDefineProperty(globalThis, 'Crypto', { + __proto__: null, writable: true, enumerable: false, configurable: true, value: webcrypto.Crypto }); ObjectDefineProperty(globalThis, 'CryptoKey', { + __proto__: null, writable: true, enumerable: false, configurable: true, value: webcrypto.CryptoKey }); ObjectDefineProperty(globalThis, 'SubtleCrypto', { + __proto__: null, writable: true, enumerable: false, configurable: true, @@ -204,6 +233,17 @@ function setupWebCrypto() { } } +// TODO(daeyeon): move this to internal/bootstrap/browser when the CLI flag is +// removed. +function setupCustomEvent() { + if (process.config.variables.node_no_browser_globals || + !getOptionValue('--experimental-global-customevent')) { + return; + } + const { CustomEvent } = require('internal/event_target'); + exposeInterface(globalThis, 'CustomEvent', CustomEvent); +} + // Setup User-facing NODE_V8_COVERAGE environment variable that writes // ScriptCoverage to a specified file. function setupCoverageHooks(dir) { @@ -238,6 +278,7 @@ function setupStacktracePrinterOnSigint() { function initializeReport() { const { report } = require('internal/process/report'); ObjectDefineProperty(process, 'report', { + __proto__: null, enumerable: true, configurable: true, get() { @@ -249,7 +290,7 @@ function initializeReport() { function setupDebugEnv() { require('internal/util/debuglog').initializeDebugEnv(process.env.NODE_DEBUG); if (getOptionValue('--expose-internals')) { - require('internal/bootstrap/loaders').NativeModule.exposeInternals(); + require('internal/bootstrap/loaders').BuiltinModule.exposeInternals(); } } @@ -345,6 +386,7 @@ function initializeDeprecations() { const { noBrowserGlobals } = internalBinding('config'); if (noBrowserGlobals) { ObjectDefineProperty(process, '_noBrowserGlobals', { + __proto__: null, writable: false, enumerable: true, configurable: true, @@ -367,6 +409,7 @@ function initializeDeprecations() { // See https://github.com/nodejs/node/pull/26334. let _process = process; ObjectDefineProperty(globalThis, 'process', { + __proto__: null, get() { return _process; }, @@ -379,6 +422,7 @@ function initializeDeprecations() { let _Buffer = Buffer; ObjectDefineProperty(globalThis, 'Buffer', { + __proto__: null, get() { return _Buffer; }, @@ -468,8 +512,8 @@ function initializePolicy() { } function initializeWASI() { - const { NativeModule } = require('internal/bootstrap/loaders'); - const mod = NativeModule.map.get('wasi'); + const { BuiltinModule } = require('internal/bootstrap/loaders'); + const mod = BuiltinModule.map.get('wasi'); mod.canBeRequiredByUsers = getOptionValue('--experimental-wasi-unstable-preview1'); } @@ -541,11 +585,13 @@ function loadPreloadModules() { } module.exports = { + refreshRuntimeOptions, patchProcessObject, setupCoverageHooks, setupWarningHandler, setupFetch, setupWebCrypto, + setupCustomEvent, setupDebugEnv, setupPerfHooks, prepareMainThreadExecution, diff --git a/lib/internal/bootstrap/switches/is_main_thread.js b/lib/internal/bootstrap/switches/is_main_thread.js index 15977f0d57b..a45505b36db 100644 --- a/lib/internal/bootstrap/switches/is_main_thread.js +++ b/lib/internal/bootstrap/switches/is_main_thread.js @@ -2,7 +2,10 @@ const { ObjectDefineProperty } = primordials; const rawMethods = internalBinding('process_methods'); - +const { + addSerializeCallback, + isBuildingSnapshot +} = require('v8').startupSnapshot; // TODO(joyeecheung): deprecate and remove these underscore methods process._debugProcess = rawMethods._debugProcess; process._debugEnd = rawMethods._debugEnd; @@ -15,6 +18,7 @@ process._stopProfilerIdleNotifier = () => {}; function defineStream(name, getter) { ObjectDefineProperty(process, name, { + __proto__: null, configurable: true, enumerable: true, get: getter @@ -122,15 +126,42 @@ let stdin; let stdout; let stderr; +let stdoutDestroy; +let stderrDestroy; + +function refreshStdoutOnSigWinch() { + stdout._refreshSize(); +} + +function refreshStderrOnSigWinch() { + stderr._refreshSize(); +} + +function addCleanup(fn) { + if (isBuildingSnapshot()) { + addSerializeCallback(fn); + } +} + function getStdout() { if (stdout) return stdout; stdout = createWritableStdioStream(1); stdout.destroySoon = stdout.destroy; // Override _destroy so that the fd is never actually closed. + stdoutDestroy = stdout._destroy; stdout._destroy = dummyDestroy; if (stdout.isTTY) { - process.on('SIGWINCH', () => stdout._refreshSize()); + process.on('SIGWINCH', refreshStdoutOnSigWinch); } + + addCleanup(function cleanupStdout() { + stdout._destroy = stdoutDestroy; + stdout.destroy(); + process.removeListener('SIGWINCH', refreshStdoutOnSigWinch); + stdout = undefined; + }); + // No need to add deserialize callback because stdout = undefined above + // causes the stream to be lazily initialized again later. return stdout; } @@ -138,11 +169,20 @@ function getStderr() { if (stderr) return stderr; stderr = createWritableStdioStream(2); stderr.destroySoon = stderr.destroy; + stderrDestroy = stderr._destroy; // Override _destroy so that the fd is never actually closed. stderr._destroy = dummyDestroy; if (stderr.isTTY) { - process.on('SIGWINCH', () => stderr._refreshSize()); + process.on('SIGWINCH', refreshStderrOnSigWinch); } + addCleanup(function cleanupStderr() { + stderr._destroy = stderrDestroy; + stderr.destroy(); + process.removeListener('SIGWINCH', refreshStderrOnSigWinch); + stderr = undefined; + }); + // No need to add deserialize callback because stderr = undefined above + // causes the stream to be lazily initialized again later. return stderr; } @@ -233,6 +273,12 @@ function getStdin() { } } + addCleanup(function cleanupStdin() { + stdin.destroy(); + stdin = undefined; + }); + // No need to add deserialize callback because stdin = undefined above + // causes the stream to be lazily initialized again later. return stdin; } diff --git a/lib/internal/bootstrap/switches/is_not_main_thread.js b/lib/internal/bootstrap/switches/is_not_main_thread.js index 379ad0a587a..cb129189b20 100644 --- a/lib/internal/bootstrap/switches/is_not_main_thread.js +++ b/lib/internal/bootstrap/switches/is_not_main_thread.js @@ -7,6 +7,7 @@ delete process._debugEnd; function defineStream(name, getter) { ObjectDefineProperty(process, name, { + __proto__: null, configurable: true, enumerable: true, get: getter diff --git a/lib/internal/child_process.js b/lib/internal/child_process.js index 5b212d345d5..980273c200d 100644 --- a/lib/internal/child_process.js +++ b/lib/internal/child_process.js @@ -59,6 +59,8 @@ const { convertToValidSignal, deprecate } = require('internal/util'); const { isArrayBufferView } = require('internal/util/types'); const spawn_sync = internalBinding('spawn_sync'); const { kStateSymbol } = require('internal/dgram'); +const dc = require('diagnostics_channel'); +const childProcessChannel = dc.channel('child_process'); const { UV_EACCES, @@ -301,6 +303,11 @@ function ChildProcess() { maybeClose(this); }; + if (childProcessChannel.hasSubscribers) { + childProcessChannel.publish({ + process: this, + }); + } } ObjectSetPrototypeOf(ChildProcess.prototype, EventEmitter.prototype); ObjectSetPrototypeOf(ChildProcess, EventEmitter); @@ -574,6 +581,7 @@ function setupChannel(target, channel, serializationMode) { target[kChannelHandle] = channel; ObjectDefineProperty(target, '_channel', { + __proto__: null, get: deprecate(() => { return target.channel; }, channelDeprecationMsg, 'DEP0129'), diff --git a/lib/internal/child_process/serialization.js b/lib/internal/child_process/serialization.js index ec858f401be..497bf233d77 100644 --- a/lib/internal/child_process/serialization.js +++ b/lib/internal/child_process/serialization.js @@ -4,6 +4,7 @@ const { JSONParse, JSONStringify, StringPrototypeSplit, + ArrayPrototypePush, Symbol, TypedArrayPrototypeSubarray, } = primordials; @@ -15,6 +16,7 @@ const assert = require('internal/assert'); const { streamBaseState, kLastWriteWasAsync } = internalBinding('stream_wrap'); const kMessageBuffer = Symbol('kMessageBuffer'); +const kMessageBufferSize = Symbol('kMessageBufferSize'); const kJSONBuffer = Symbol('kJSONBuffer'); const kStringDecoder = Symbol('kStringDecoder'); @@ -51,47 +53,77 @@ class ChildProcessDeserializer extends v8.DefaultDeserializer { // (aka 'advanced') const advanced = { initMessageChannel(channel) { - channel[kMessageBuffer] = Buffer.alloc(0); + channel[kMessageBuffer] = []; + channel[kMessageBufferSize] = 0; channel.buffering = false; }, *parseChannelMessages(channel, readData) { if (readData.length === 0) return; - let messageBuffer = Buffer.concat([channel[kMessageBuffer], readData]); - while (messageBuffer.length > 4) { - const size = messageBuffer.readUInt32BE(); - if (messageBuffer.length < 4 + size) { - break; - } + ArrayPrototypePush(channel[kMessageBuffer], readData); + channel[kMessageBufferSize] += readData.length; + + // Index 0 should always be present because we just pushed data into it. + let messageBufferHead = channel[kMessageBuffer][0]; + while (messageBufferHead.length >= 4) { + // We call `readUInt32BE` manually here, because this is faster than first converting + // it to a buffer and using `readUInt32BE` on that. + const fullMessageSize = ( + messageBufferHead[0] << 24 | + messageBufferHead[1] << 16 | + messageBufferHead[2] << 8 | + messageBufferHead[3] + ) + 4; + + if (channel[kMessageBufferSize] < fullMessageSize) break; + + const concatenatedBuffer = channel[kMessageBuffer].length === 1 ? + channel[kMessageBuffer][0] : + Buffer.concat( + channel[kMessageBuffer], + channel[kMessageBufferSize] + ); const deserializer = new ChildProcessDeserializer( - TypedArrayPrototypeSubarray(messageBuffer, 4, 4 + size)); - messageBuffer = TypedArrayPrototypeSubarray(messageBuffer, 4 + size); + TypedArrayPrototypeSubarray(concatenatedBuffer, 4, fullMessageSize) + ); + + messageBufferHead = TypedArrayPrototypeSubarray(concatenatedBuffer, fullMessageSize); + channel[kMessageBufferSize] = messageBufferHead.length; + channel[kMessageBuffer] = + channel[kMessageBufferSize] !== 0 ? [messageBufferHead] : []; deserializer.readHeader(); yield deserializer.readValue(); } - channel[kMessageBuffer] = messageBuffer; - channel.buffering = messageBuffer.length > 0; + + channel.buffering = channel[kMessageBufferSize] > 0; }, writeChannelMessage(channel, req, message, handle) { const ser = new ChildProcessSerializer(); + // Add 4 bytes, to later populate with message length + ser.writeRawBytes(Buffer.allocUnsafe(4)); ser.writeHeader(); ser.writeValue(message); + const serializedMessage = ser.releaseBuffer(); - const sizeBuffer = Buffer.allocUnsafe(4); - sizeBuffer.writeUInt32BE(serializedMessage.length); - - const buffer = Buffer.concat([ - sizeBuffer, - serializedMessage, - ]); - const result = channel.writeBuffer(req, buffer, handle); + const serializedMessageLength = serializedMessage.length - 4; + + serializedMessage.set([ + serializedMessageLength >> 24 & 0xFF, + serializedMessageLength >> 16 & 0xFF, + serializedMessageLength >> 8 & 0xFF, + serializedMessageLength & 0xFF, + ], 0); + + const result = channel.writeBuffer(req, serializedMessage, handle); + // Mirror what stream_base_commons.js does for Buffer retention. if (streamBaseState[kLastWriteWasAsync]) - req.buffer = buffer; + req.buffer = serializedMessage; + return result; }, }; diff --git a/lib/internal/cluster/child.js b/lib/internal/cluster/child.js index 00638e77845..f960878a70a 100644 --- a/lib/internal/cluster/child.js +++ b/lib/internal/cluster/child.js @@ -111,6 +111,10 @@ cluster._getServer = function(obj, options, cb) { }); obj.once('listening', () => { + // short-lived sockets might have been closed + if (!indexes.has(indexesKey)) { + return; + } cluster.worker.state = 'listening'; const address = obj.address(); message.act = 'listening'; @@ -204,12 +208,21 @@ function rr(message, { indexesKey, index }, cb) { function onconnection(message, handle) { const key = message.key; const server = handles.get(key); - const accepted = server !== undefined; + let accepted = server !== undefined; + + if (accepted && server[owner_symbol]) { + const self = server[owner_symbol]; + if (self.maxConnections && self._connections >= self.maxConnections) { + accepted = false; + } + } send({ ack: message.seq, accepted }); if (accepted) server.onconnection(0, handle); + else + handle.close(); } function send(message, cb) { diff --git a/lib/internal/cluster/primary.js b/lib/internal/cluster/primary.js index 69e97eb8a68..fc366680fb7 100644 --- a/lib/internal/cluster/primary.js +++ b/lib/internal/cluster/primary.js @@ -6,10 +6,14 @@ const { ArrayPrototypeSome, ObjectKeys, ObjectValues, - RegExpPrototypeTest, SafeMap, StringPrototypeStartsWith, } = primordials; +const { + codes: { + ERR_SOCKET_BAD_PORT, + } +} = require('internal/errors'); const assert = require('internal/assert'); const { fork } = require('child_process'); @@ -18,14 +22,12 @@ const EventEmitter = require('events'); const RoundRobinHandle = require('internal/cluster/round_robin_handle'); const SharedHandle = require('internal/cluster/shared_handle'); const Worker = require('internal/cluster/worker'); +const { getInspectPort, isUsingInspector } = require('internal/util/inspector'); const { internal, sendHelper } = require('internal/cluster/utils'); const cluster = new EventEmitter(); const intercom = new EventEmitter(); const SCHED_NONE = 1; const SCHED_RR = 2; -const minPort = 1024; -const maxPort = 65535; -const { validatePort } = require('internal/validators'); module.exports = cluster; @@ -40,7 +42,6 @@ cluster.SCHED_NONE = SCHED_NONE; // Leave it to the operating system. cluster.SCHED_RR = SCHED_RR; // Primary distributes connections. let ids = 0; -let debugPortOffset = 1; let initialized = false; // XXX(bnoordhuis) Fold cluster.schedulingPolicy into cluster.settings? @@ -117,28 +118,12 @@ function setupSettingsNT(settings) { function createWorkerProcess(id, env) { const workerEnv = { ...process.env, ...env, NODE_UNIQUE_ID: `${id}` }; const execArgv = [...cluster.settings.execArgv]; - const debugArgRegex = /--inspect(?:-brk|-port)?|--debug-port/; - const nodeOptions = process.env.NODE_OPTIONS || ''; - - if (ArrayPrototypeSome(execArgv, - (arg) => RegExpPrototypeTest(debugArgRegex, arg)) || - RegExpPrototypeTest(debugArgRegex, nodeOptions)) { - let inspectPort; - if ('inspectPort' in cluster.settings) { - if (typeof cluster.settings.inspectPort === 'function') - inspectPort = cluster.settings.inspectPort(); - else - inspectPort = cluster.settings.inspectPort; - - validatePort(inspectPort); - } else { - inspectPort = process.debugPort + debugPortOffset; - if (inspectPort > maxPort) - inspectPort = inspectPort - maxPort + minPort - 1; - debugPortOffset++; - } - ArrayPrototypePush(execArgv, `--inspect-port=${inspectPort}`); + if (cluster.settings.inspectPort === null) { + throw new ERR_SOCKET_BAD_PORT('Port', null, true); + } + if (isUsingInspector(cluster.settings.execArgv)) { + ArrayPrototypePush(execArgv, `--inspect-port=${getInspectPort(cluster.settings.inspectPort)}`); } return fork(cluster.settings.exec, cluster.settings.args, { diff --git a/lib/internal/cluster/round_robin_handle.js b/lib/internal/cluster/round_robin_handle.js index 9d242cc60ad..29a87e716e8 100644 --- a/lib/internal/cluster/round_robin_handle.js +++ b/lib/internal/cluster/round_robin_handle.js @@ -15,7 +15,7 @@ const { constants } = internalBinding('tcp_wrap'); module.exports = RoundRobinHandle; -function RoundRobinHandle(key, address, { port, fd, flags, backlog }) { +function RoundRobinHandle(key, address, { port, fd, flags, backlog, readableAll, writableAll }) { this.key = key; this.all = new SafeMap(); this.free = new SafeMap(); @@ -34,8 +34,12 @@ function RoundRobinHandle(key, address, { port, fd, flags, backlog }) { backlog, }); } else - this.server.listen(address, backlog); // UNIX socket path. - + this.server.listen({ + path: address, + backlog, + readableAll, + writableAll, + }); // UNIX socket path. this.server.once('listening', () => { this.handle = this.server._handle; this.handle.onconnection = (err, handle) => this.distribute(err, handle); @@ -94,6 +98,10 @@ RoundRobinHandle.prototype.remove = function(worker) { }; RoundRobinHandle.prototype.distribute = function(err, handle) { + // If `accept` fails just skip it (handle is undefined) + if (err) { + return; + } append(this.handles, handle); // eslint-disable-next-line node-core/no-array-destructuring const [ workerEntry ] = this.free; // this.free is a SafeMap diff --git a/lib/internal/cluster/worker.js b/lib/internal/cluster/worker.js index 53285413530..d5dfef43871 100644 --- a/lib/internal/cluster/worker.js +++ b/lib/internal/cluster/worker.js @@ -7,6 +7,8 @@ const { const EventEmitter = require('events'); +const { kEmptyObject } = require('internal/util'); + module.exports = Worker; // Common Worker implementation shared between the cluster primary and workers. @@ -17,7 +19,7 @@ function Worker(options) { ReflectApply(EventEmitter, this, []); if (options === null || typeof options !== 'object') - options = {}; + options = kEmptyObject; this.exitedAfterDisconnect = undefined; diff --git a/lib/internal/console/constructor.js b/lib/internal/console/constructor.js index 695a56164b7..d8434f2311a 100644 --- a/lib/internal/console/constructor.js +++ b/lib/internal/console/constructor.js @@ -24,13 +24,13 @@ const { ReflectApply, ReflectConstruct, ReflectOwnKeys, + RegExpPrototypeSymbolReplace, SafeArrayIterator, SafeMap, SafeWeakMap, StringPrototypeIncludes, StringPrototypePadStart, StringPrototypeRepeat, - StringPrototypeReplace, StringPrototypeSlice, StringPrototypeSplit, Symbol, @@ -100,7 +100,7 @@ function Console(options /* or: stdout, stderr, ignoreErrors = true */) { // We have to test new.target here to see if this function is called // with new, because we need to define a custom instanceof to accommodate // the global console. - if (!new.target) { + if (new.target === undefined) { return ReflectConstruct(Console, arguments); } @@ -154,6 +154,7 @@ function Console(options /* or: stdout, stderr, ignoreErrors = true */) { // from the prototype chain of the subclass. this[key] = FunctionPrototypeBind(this[key], this); ObjectDefineProperty(this[key], 'name', { + __proto__: null, value: key }); }); @@ -170,6 +171,7 @@ const consolePropAttributes = { // Fixup global.console instanceof global.console.Console ObjectDefineProperty(Console, SymbolHasInstance, { + __proto__: null, value(instance) { return instance[kIsConsole]; } @@ -180,16 +182,18 @@ const kNoColorInspectOptions = {}; ObjectDefineProperties(Console.prototype, { [kBindStreamsEager]: { + __proto__: null, ...consolePropAttributes, // Eager version for the Console constructor value: function(stdout, stderr) { ObjectDefineProperties(this, { - '_stdout': { ...consolePropAttributes, value: stdout }, - '_stderr': { ...consolePropAttributes, value: stderr } + '_stdout': { __proto__: null, ...consolePropAttributes, value: stdout }, + '_stderr': { __proto__: null, ...consolePropAttributes, value: stderr }, }); } }, [kBindStreamsLazy]: { + __proto__: null, ...consolePropAttributes, // Lazily load the stdout and stderr from an object so we don't // create the stdio streams when they are not even accessed @@ -198,6 +202,7 @@ ObjectDefineProperties(Console.prototype, { let stderr; ObjectDefineProperties(this, { '_stdout': { + __proto__: null, enumerable: false, configurable: true, get() { @@ -207,6 +212,7 @@ ObjectDefineProperties(Console.prototype, { set(value) { stdout = value; } }, '_stderr': { + __proto__: null, enumerable: false, configurable: true, get() { @@ -219,32 +225,38 @@ ObjectDefineProperties(Console.prototype, { } }, [kBindProperties]: { + __proto__: null, ...consolePropAttributes, value: function(ignoreErrors, colorMode, groupIndentation = 2) { ObjectDefineProperties(this, { '_stdoutErrorHandler': { + __proto__: null, ...consolePropAttributes, value: createWriteErrorHandler(this, kUseStdout) }, '_stderrErrorHandler': { ...consolePropAttributes, + __proto__: null, value: createWriteErrorHandler(this, kUseStderr) }, '_ignoreErrors': { + __proto__: null, ...consolePropAttributes, value: Boolean(ignoreErrors) }, - '_times': { ...consolePropAttributes, value: new SafeMap() }, + '_times': { __proto__: null, ...consolePropAttributes, value: new SafeMap() }, // Corresponds to https://console.spec.whatwg.org/#count-map - [kCounts]: { ...consolePropAttributes, value: new SafeMap() }, - [kColorMode]: { ...consolePropAttributes, value: colorMode }, - [kIsConsole]: { ...consolePropAttributes, value: true }, - [kGroupIndent]: { ...consolePropAttributes, value: '' }, + [kCounts]: { __proto__: null, ...consolePropAttributes, value: new SafeMap() }, + [kColorMode]: { __proto__: null, ...consolePropAttributes, value: colorMode }, + [kIsConsole]: { __proto__: null, ...consolePropAttributes, value: true }, + [kGroupIndent]: { __proto__: null, ...consolePropAttributes, value: '' }, [kGroupIndentationWidth]: { + __proto__: null, ...consolePropAttributes, value: groupIndentation }, [SymbolToStringTag]: { + __proto__: null, writable: false, enumerable: false, configurable: true, @@ -254,6 +266,7 @@ ObjectDefineProperties(Console.prototype, { } }, [kWriteToConsole]: { + __proto__: null, ...consolePropAttributes, value: function(streamSymbol, string) { const ignoreErrors = this._ignoreErrors; @@ -266,7 +279,7 @@ ObjectDefineProperties(Console.prototype, { if (groupIndent.length !== 0) { if (StringPrototypeIncludes(string, '\n')) { - string = StringPrototypeReplace(string, /\n/g, `\n${groupIndent}`); + string = RegExpPrototypeSymbolReplace(/\n/g, string, `\n${groupIndent}`); } string = groupIndent + string; } @@ -296,6 +309,7 @@ ObjectDefineProperties(Console.prototype, { } }, [kGetInspectOptions]: { + __proto__: null, ...consolePropAttributes, value: function(stream) { let color = this[kColorMode]; @@ -317,6 +331,7 @@ ObjectDefineProperties(Console.prototype, { } }, [kFormatForStdout]: { + __proto__: null, ...consolePropAttributes, value: function(args) { const opts = this[kGetInspectOptions](this._stdout); @@ -325,6 +340,7 @@ ObjectDefineProperties(Console.prototype, { } }, [kFormatForStderr]: { + __proto__: null, ...consolePropAttributes, value: function(args) { const opts = this[kGetInspectOptions](this._stderr); @@ -486,7 +502,7 @@ const consoleMethods = { if (tabularData === null || typeof tabularData !== 'object') return this.log(tabularData); - if (cliTable === undefined) cliTable = require('internal/cli_table'); + cliTable ??= require('internal/cli_table'); const final = (k, v) => this.log(cliTable(k, v)); const _inspect = (v) => { @@ -570,8 +586,7 @@ const consoleMethods = { } else { const keys = properties || ObjectKeys(item); for (const key of keys) { - if (map[key] === undefined) - map[key] = []; + map[key] ??= []; if ((primitive && properties) || !ObjectPrototypeHasOwnProperty(item, key)) map[key][i] = ''; @@ -669,9 +684,15 @@ Console.prototype.dirxml = Console.prototype.log; Console.prototype.error = Console.prototype.warn; Console.prototype.groupCollapsed = Console.prototype.group; +function initializeGlobalConsole(globalConsole) { + globalConsole[kBindStreamsLazy](process); + globalConsole[kBindProperties](true, 'auto'); +} + module.exports = { Console, kBindStreamsLazy, kBindProperties, + initializeGlobalConsole, formatTime // exported for tests }; diff --git a/lib/internal/console/global.js b/lib/internal/console/global.js index d6c0c24d529..dd293b9f195 100644 --- a/lib/internal/console/global.js +++ b/lib/internal/console/global.js @@ -21,9 +21,7 @@ const { } = primordials; const { - Console, - kBindStreamsLazy, - kBindProperties + Console } = require('internal/console/constructor'); const globalConsole = ObjectCreate({}); @@ -39,14 +37,11 @@ for (const prop of ReflectOwnKeys(Console.prototype)) { if (typeof desc.value === 'function') { // fix the receiver const name = desc.value.name; desc.value = FunctionPrototypeBind(desc.value, globalConsole); - ReflectDefineProperty(desc.value, 'name', { value: name }); + ReflectDefineProperty(desc.value, 'name', { __proto__: null, value: name }); } ReflectDefineProperty(globalConsole, prop, desc); } -globalConsole[kBindStreamsLazy](process); -globalConsole[kBindProperties](true, 'auto'); - // This is a legacy feature - the Console constructor is exposed on // the global console instance. globalConsole.Console = Console; diff --git a/lib/internal/crypto/aes.js b/lib/internal/crypto/aes.js index 9136913b7b9..79ca61c5ff2 100644 --- a/lib/internal/crypto/aes.js +++ b/lib/internal/crypto/aes.js @@ -7,7 +7,6 @@ const { ArrayPrototypeIncludes, ArrayPrototypePush, MathFloor, - Promise, SafeSet, TypedArrayPrototypeSlice, } = primordials; @@ -46,34 +45,24 @@ const { const { lazyDOMException, + promisify, } = require('internal/util'); const { PromiseReject } = primordials; -const { - codes: { - ERR_INVALID_ARG_TYPE, - } -} = require('internal/errors'); - const { InternalCryptoKey, SecretKeyObject, createSecretKey, - isKeyObject, } = require('internal/crypto/keys'); const { - generateKey, + generateKey: _generateKey, } = require('internal/crypto/keygen'); -const { - validateInteger, - validateOneOf, -} = require('internal/validators'); - const kMaxCounterLength = 128; const kTagLengths = [32, 64, 96, 104, 112, 120, 128]; +const generateKey = promisify(_generateKey); function getAlgorithmName(name, length) { switch (name) { @@ -234,32 +223,36 @@ function aesCipher(mode, key, data, algorithm) { async function aesGenerateKey(algorithm, extractable, keyUsages) { const { name, length } = algorithm; - validateInteger(length, 'algorithm.length'); - validateOneOf(length, 'algorithm.length', kAesKeyLengths); + if (!ArrayPrototypeIncludes(kAesKeyLengths, length)) { + throw lazyDOMException( + 'AES key length must be 128, 192, or 256 bits', + 'OperationError'); + } - const usageSet = new SafeSet(keyUsages); + const checkUsages = ['wrapKey', 'unwrapKey']; + if (name !== 'AES-KW') + ArrayPrototypePush(checkUsages, 'encrypt', 'decrypt'); - if (hasAnyNotIn(usageSet, ['encrypt', 'decrypt', 'wrapKey', 'unwrapKey'])) { + const usagesSet = new SafeSet(keyUsages); + if (hasAnyNotIn(usagesSet, checkUsages)) { throw lazyDOMException( 'Unsupported key usage for an AES key', 'SyntaxError'); } - return new Promise((resolve, reject) => { - generateKey('aes', { length }, (err, key) => { - if (err) { - return reject(lazyDOMException( - 'The operation failed for an operation-specific reason ' + - `[${err.message}]`, - 'OperationError')); - } - resolve(new InternalCryptoKey( - key, - { name, length }, - ArrayFrom(usageSet), - extractable)); - }); + const key = await generateKey('aes', { length }).catch((err) => { + // TODO(@panva): add err as cause to DOMException + throw lazyDOMException( + 'The operation failed for an operation-specific reason' + + `[${err.message}]`, + 'OperationError'); }); + + return new InternalCryptoKey( + key, + { name, length }, + ArrayFrom(usagesSet), + extractable); } async function aesImportKey( @@ -283,19 +276,6 @@ async function aesImportKey( let keyObject; let length; switch (format) { - case 'node.keyObject': { - if (!isKeyObject(keyData)) - throw new ERR_INVALID_ARG_TYPE('keyData', 'KeyObject', keyData); - - if (keyData.type !== 'secret') { - throw lazyDOMException( - `Unable to import AES key with format ${format}`, - 'NotSupportedError'); - } - - keyObject = keyData; - break; - } case 'raw': { validateKeyLength(keyData.byteLength * 8); keyObject = createSecretKey(keyData); diff --git a/lib/internal/crypto/cfrg.js b/lib/internal/crypto/cfrg.js new file mode 100644 index 00000000000..17358c7ccca --- /dev/null +++ b/lib/internal/crypto/cfrg.js @@ -0,0 +1,346 @@ +'use strict'; + +const { + SafeSet, +} = primordials; + +const { Buffer } = require('buffer'); + +const { + ECKeyExportJob, + KeyObjectHandle, + SignJob, + kCryptoJobAsync, + kKeyTypePrivate, + kKeyTypePublic, + kSignJobModeSign, + kSignJobModeVerify, +} = internalBinding('crypto'); + +const { + getArrayBufferOrView, + getUsagesUnion, + hasAnyNotIn, + jobPromise, + validateKeyOps, + kHandle, + kKeyObject, +} = require('internal/crypto/util'); + +const { + emitExperimentalWarning, + lazyDOMException, + promisify, +} = require('internal/util'); + +const { + generateKeyPair: _generateKeyPair, +} = require('internal/crypto/keygen'); + +const { + InternalCryptoKey, + PrivateKeyObject, + PublicKeyObject, + createPrivateKey, + createPublicKey, +} = require('internal/crypto/keys'); + +const generateKeyPair = promisify(_generateKeyPair); + +function verifyAcceptableCfrgKeyUse(name, type, usages) { + let checkSet; + switch (name) { + case 'X25519': + // Fall through + case 'X448': + checkSet = ['deriveKey', 'deriveBits']; + break; + case 'Ed25519': + // Fall through + case 'Ed448': + switch (type) { + case 'private': + checkSet = ['sign']; + break; + case 'public': + checkSet = ['verify']; + break; + } + } + if (hasAnyNotIn(usages, checkSet)) { + throw lazyDOMException( + `Unsupported key usage for a ${name} key`, + 'SyntaxError'); + } +} + +function createCFRGRawKey(name, keyData, isPublic) { + const handle = new KeyObjectHandle(); + keyData = getArrayBufferOrView(keyData, 'keyData'); + + switch (name) { + case 'Ed25519': + case 'X25519': + if (keyData.byteLength !== 32) { + throw lazyDOMException( + `${name} raw keys must be exactly 32-bytes`); + } + break; + case 'Ed448': + if (keyData.byteLength !== 57) { + throw lazyDOMException( + `${name} raw keys must be exactly 57-bytes`); + } + break; + case 'X448': + if (keyData.byteLength !== 56) { + throw lazyDOMException( + `${name} raw keys must be exactly 56-bytes`); + } + break; + } + + const keyType = isPublic ? kKeyTypePublic : kKeyTypePrivate; + if (!handle.initEDRaw(name, keyData, keyType)) { + throw lazyDOMException('Failure to generate key object'); + } + + return isPublic ? new PublicKeyObject(handle) : new PrivateKeyObject(handle); +} + +async function cfrgGenerateKey(algorithm, extractable, keyUsages) { + const { name } = algorithm; + emitExperimentalWarning(`The ${name} Web Crypto API algorithm`); + + const usageSet = new SafeSet(keyUsages); + switch (name) { + case 'Ed25519': + // Fall through + case 'Ed448': + if (hasAnyNotIn(usageSet, ['sign', 'verify'])) { + throw lazyDOMException( + `Unsupported key usage for an ${name} key`, + 'SyntaxError'); + } + break; + case 'X25519': + // Fall through + case 'X448': + if (hasAnyNotIn(usageSet, ['deriveKey', 'deriveBits'])) { + throw lazyDOMException( + `Unsupported key usage for an ${name} key`, + 'SyntaxError'); + } + break; + } + let genKeyType; + switch (name) { + case 'Ed25519': + genKeyType = 'ed25519'; + break; + case 'Ed448': + genKeyType = 'ed448'; + break; + case 'X25519': + genKeyType = 'x25519'; + break; + case 'X448': + genKeyType = 'x448'; + break; + } + + const keyPair = await generateKeyPair(genKeyType).catch((err) => { + // TODO(@panva): add err as cause to DOMException + throw lazyDOMException( + 'The operation failed for an operation-specific reason', + 'OperationError'); + }); + + let publicUsages; + let privateUsages; + switch (name) { + case 'Ed25519': + // Fall through + case 'Ed448': + publicUsages = getUsagesUnion(usageSet, 'verify'); + privateUsages = getUsagesUnion(usageSet, 'sign'); + break; + case 'X25519': + // Fall through + case 'X448': + publicUsages = []; + privateUsages = getUsagesUnion(usageSet, 'deriveKey', 'deriveBits'); + break; + } + + const keyAlgorithm = { name }; + + const publicKey = + new InternalCryptoKey( + keyPair.publicKey, + keyAlgorithm, + publicUsages, + true); + + const privateKey = + new InternalCryptoKey( + keyPair.privateKey, + keyAlgorithm, + privateUsages, + extractable); + + return { privateKey, publicKey }; +} + +function cfrgExportKey(key, format) { + emitExperimentalWarning(`The ${key.algorithm.name} Web Crypto API algorithm`); + return jobPromise(new ECKeyExportJob( + kCryptoJobAsync, + format, + key[kKeyObject][kHandle])); +} + +async function cfrgImportKey( + format, + keyData, + algorithm, + extractable, + keyUsages) { + + const { name } = algorithm; + emitExperimentalWarning(`The ${name} Web Crypto API algorithm`); + let keyObject; + const usagesSet = new SafeSet(keyUsages); + switch (format) { + case 'spki': { + verifyAcceptableCfrgKeyUse(name, 'public', usagesSet); + keyObject = createPublicKey({ + key: keyData, + format: 'der', + type: 'spki' + }); + break; + } + case 'pkcs8': { + verifyAcceptableCfrgKeyUse(name, 'private', usagesSet); + keyObject = createPrivateKey({ + key: keyData, + format: 'der', + type: 'pkcs8' + }); + break; + } + case 'jwk': { + if (keyData == null || typeof keyData !== 'object') + throw lazyDOMException('Invalid JWK keyData', 'DataError'); + if (keyData.kty !== 'OKP') + throw lazyDOMException('Invalid key type', 'DataError'); + if (keyData.crv !== name) + throw lazyDOMException('Subtype mismatch', 'DataError'); + const isPublic = keyData.d === undefined; + + if (usagesSet.size > 0 && keyData.use !== undefined) { + let checkUse; + switch (name) { + case 'Ed25519': + // Fall through + case 'Ed448': + checkUse = 'sig'; + break; + case 'X25519': + // Fall through + case 'X448': + checkUse = 'enc'; + break; + } + if (keyData.use !== checkUse) + throw lazyDOMException('Invalid use type', 'DataError'); + } + + validateKeyOps(keyData.key_ops, usagesSet); + + if (keyData.ext !== undefined && + keyData.ext === false && + extractable === true) { + throw lazyDOMException('JWK is not extractable', 'DataError'); + } + + if (keyData.alg !== undefined) { + if (typeof keyData.alg !== 'string') + throw lazyDOMException('Invalid alg', 'DataError'); + if ( + (name === 'Ed25519' || name === 'Ed448') && + keyData.alg !== 'EdDSA' + ) { + throw lazyDOMException('Invalid alg', 'DataError'); + } + } + + verifyAcceptableCfrgKeyUse( + name, + isPublic ? 'public' : 'private', + usagesSet); + keyObject = createCFRGRawKey( + name, + Buffer.from( + isPublic ? keyData.x : keyData.d, + 'base64'), + isPublic); + break; + } + case 'raw': { + verifyAcceptableCfrgKeyUse(name, 'public', usagesSet); + keyObject = createCFRGRawKey(name, keyData, true); + break; + } + } + + if (keyObject.asymmetricKeyType !== name.toLowerCase()) { + throw lazyDOMException('Invalid key type', 'DataError'); + } + + return new InternalCryptoKey( + keyObject, + { name }, + keyUsages, + extractable); +} + +function eddsaSignVerify(key, data, { name, context }, signature) { + emitExperimentalWarning(`The ${name} Web Crypto API algorithm`); + const mode = signature === undefined ? kSignJobModeSign : kSignJobModeVerify; + const type = mode === kSignJobModeSign ? 'private' : 'public'; + + if (key.type !== type) + throw lazyDOMException(`Key must be a ${type} key`, 'InvalidAccessError'); + + if (name === 'Ed448' && context !== undefined) { + context = + getArrayBufferOrView(context, 'algorithm.context'); + if (context.byteLength !== 0) { + throw lazyDOMException( + 'Non zero-length context is not yet supported.', 'NotSupportedError'); + } + } + + return jobPromise(new SignJob( + kCryptoJobAsync, + mode, + key[kKeyObject][kHandle], + undefined, + undefined, + undefined, + data, + undefined, + undefined, + undefined, + undefined, + signature)); +} + +module.exports = { + cfrgExportKey, + cfrgImportKey, + cfrgGenerateKey, + eddsaSignVerify, +}; diff --git a/lib/internal/crypto/diffiehellman.js b/lib/internal/crypto/diffiehellman.js index 2efdbdd5bac..62107a31a4f 100644 --- a/lib/internal/crypto/diffiehellman.js +++ b/lib/internal/crypto/diffiehellman.js @@ -3,7 +3,7 @@ const { ArrayBufferPrototypeSlice, FunctionPrototypeCall, - MathFloor, + MathCeil, ObjectDefineProperty, Promise, SafeSet, @@ -12,8 +12,6 @@ const { const { Buffer } = require('buffer'); const { - DHBitsJob, - DHKeyExportJob, DiffieHellman: _DiffieHellman, DiffieHellmanGroup: _DiffieHellmanGroup, ECDH: _ECDH, @@ -53,23 +51,12 @@ const { const { KeyObject, - InternalCryptoKey, - createPrivateKey, - createPublicKey, isCryptoKey, - isKeyObject, } = require('internal/crypto/keys'); -const { - generateKeyPair, -} = require('internal/crypto/keygen'); - const { getArrayBufferOrView, getDefaultEncoding, - getUsagesUnion, - hasAnyNotIn, - jobPromise, toBuf, kHandle, kKeyObject, @@ -138,6 +125,7 @@ function DiffieHellman(sizeOrKey, keyEncoding, generator, genEncoding) { this[kHandle] = new _DiffieHellman(sizeOrKey, generator); ObjectDefineProperty(this, 'verifyError', { + __proto__: null, enumerable: true, value: this[kHandle].verifyError, writable: false @@ -150,6 +138,7 @@ function DiffieHellmanGroup(name) { return new DiffieHellmanGroup(name); this[kHandle] = new _DiffieHellmanGroup(name); ObjectDefineProperty(this, 'verifyError', { + __proto__: null, enumerable: true, value: this[kHandle].verifyError, writable: false @@ -343,89 +332,6 @@ function deriveBitsECDH(name, publicKey, privateKey, callback) { job.run(); } -// The deriveBitsDH function is part of the Web Crypto API and serves both -// deriveKeys and deriveBits functions. -function deriveBitsDH(publicKey, privateKey, callback) { - validateObject(publicKey, 'publicKey'); - validateObject(privateKey, 'privateKey'); - validateCallback(callback); - const job = new DHBitsJob(kCryptoJobAsync, publicKey, privateKey); - job.ondone = (error, bits) => { - if (error) return FunctionPrototypeCall(callback, job, error); - FunctionPrototypeCall(callback, job, null, bits); - }; - job.run(); -} - -function verifyAcceptableDhKeyUse(name, type, usages) { - let checkSet; - switch (type) { - case 'private': - checkSet = ['deriveBits', 'deriveKey']; - break; - case 'public': - checkSet = []; - break; - } - if (hasAnyNotIn(usages, checkSet)) { - throw lazyDOMException( - `Unsupported key usage for an ${name} key`, - 'SyntaxError'); - } -} - -async function dhGenerateKey( - algorithm, - extractable, - keyUsages) { - const usageSet = new SafeSet(keyUsages); - - if (hasAnyNotIn(usageSet, ['deriveKey', 'deriveBits'])) { - throw lazyDOMException( - 'Unsupported key usage for a DH key', - 'SyntaxError'); - } - - const { - name, - primeLength, - generator, - group - } = algorithm; - let { prime } = algorithm; - - if (prime !== undefined) - prime = getArrayBufferOrView(prime); - - return new Promise((resolve, reject) => { - generateKeyPair('dh', { - prime, - primeLength, - generator, - group, - }, (err, pubKey, privKey) => { - if (err) { - return reject(lazyDOMException( - 'The operation failed for an operation-specific reason', - 'OperationError')); - } - - const algorithm = { name, prime, primeLength, generator, group }; - - const publicKey = new InternalCryptoKey(pubKey, algorithm, [], true); - - const privateKey = - new InternalCryptoKey( - privKey, - algorithm, - getUsagesUnion(usageSet, 'deriveBits', 'deriveKey'), - extractable); - - resolve({ publicKey, privateKey }); - }); - }); -} - async function asyncDeriveBitsECDH(algorithm, baseKey, length) { const { 'public': key } = algorithm; @@ -445,8 +351,12 @@ async function asyncDeriveBitsECDH(algorithm, baseKey, length) { 'baseKey must be a private key', 'InvalidAccessError'); } - if (key.algorithm.name !== 'ECDH') { - throw lazyDOMException('Keys must be ECDH keys', 'InvalidAccessError'); + if ( + key.algorithm.name !== 'ECDH' && + key.algorithm.name !== 'X25519' && + key.algorithm.name !== 'X448' + ) { + throw lazyDOMException('Keys must be ECDH, X25519, or X448 keys', 'InvalidAccessError'); } if (key.algorithm.name !== baseKey.algorithm.name) { @@ -455,67 +365,16 @@ async function asyncDeriveBitsECDH(algorithm, baseKey, length) { 'InvalidAccessError'); } - if (key.algorithm.namedCurve !== baseKey.algorithm.namedCurve) + if ( + key.algorithm.name === 'ECDH' && + key.algorithm.namedCurve !== baseKey.algorithm.namedCurve + ) { throw lazyDOMException('Named curve mismatch', 'InvalidAccessError'); - - const bits = await new Promise((resolve, reject) => { - deriveBitsECDH( - baseKey.algorithm.namedCurve, - key[kKeyObject][kHandle], - baseKey[kKeyObject][kHandle], (err, bits) => { - if (err) return reject(err); - resolve(bits); - }); - }); - - // If a length is not specified, return the full derived secret - if (length === null) - return bits; - - // If the length is not a multiple of 8, it will be truncated - // down to the nearest multiple of 8. - length = MathFloor(length / 8); - const { byteLength } = bits; - - // If the length is larger than the derived secret, throw. - // Otherwise, we either return the secret or a truncated - // slice. - if (byteLength < length) - throw lazyDOMException('derived bit length is too small', 'OperationError'); - - return length === byteLength ? - bits : - ArrayBufferPrototypeSlice(bits, 0, length); -} - -async function asyncDeriveBitsDH(algorithm, baseKey, length) { - const { 'public': key } = algorithm; - // Null has a specific meaning for DH - if (length !== null) - validateUint32(length, 'length'); - if (!isCryptoKey(key)) - throw new ERR_INVALID_ARG_TYPE('algorithm.public', 'CryptoKey', key); - - if (key.type !== 'public') { - throw lazyDOMException( - 'algorithm.public must be a public key', 'InvalidAccessError'); - } - if (baseKey.type !== 'private') { - throw lazyDOMException( - 'baseKey must be a private key', 'InvalidAccessError'); - } - - if (key.algorithm.name !== 'NODE-DH') - throw lazyDOMException('Keys must be DH keys', 'InvalidAccessError'); - - if (key.algorithm.name !== baseKey.algorithm.name) { - throw lazyDOMException( - 'The public and private keys must be of the same type', - 'InvalidAccessError'); } const bits = await new Promise((resolve, reject) => { - deriveBitsDH( + deriveBitsECDH( + key.algorithm.name === 'ECDH' ? baseKey.algorithm.namedCurve : baseKey.algorithm.name, key[kKeyObject][kHandle], baseKey[kKeyObject][kHandle], (err, bits) => { if (err) return reject(err); @@ -527,9 +386,9 @@ async function asyncDeriveBitsDH(algorithm, baseKey, length) { if (length === null) return bits; - // If the length is not a multiple of 8, it will be truncated - // down to the nearest multiple of 8. - length = MathFloor(length / 8); + // If the length is not a multiple of 8 the nearest ceiled + // multiple of 8 is sliced. + length = MathCeil(length / 8); const { byteLength } = bits; // If the length is larger than the derived secret, throw. @@ -543,81 +402,11 @@ async function asyncDeriveBitsDH(algorithm, baseKey, length) { ArrayBufferPrototypeSlice(bits, 0, length); } -function dhExportKey(key, format) { - return jobPromise(new DHKeyExportJob( - kCryptoJobAsync, - format, - key[kKeyObject][kHandle])); -} - -async function dhImportKey( - format, - keyData, - algorithm, - extractable, - keyUsages) { - const usagesSet = new SafeSet(keyUsages); - let keyObject; - switch (format) { - case 'node.keyObject': { - if (!isKeyObject(keyData)) - throw new ERR_INVALID_ARG_TYPE('keyData', 'KeyObject', keyData); - if (keyData.type === 'secret') - throw lazyDOMException('Invalid key type', 'InvalidAccessException'); - verifyAcceptableDhKeyUse(algorithm.name, keyData.type, usagesSet); - keyObject = keyData; - break; - } - case 'spki': { - verifyAcceptableDhKeyUse(algorithm.name, 'public', usagesSet); - keyObject = createPublicKey({ - key: keyData, - format: 'der', - type: 'spki' - }); - break; - } - case 'pkcs8': { - verifyAcceptableDhKeyUse(algorithm.name, 'private', usagesSet); - keyObject = createPrivateKey({ - key: keyData, - format: 'der', - type: 'pkcs8' - }); - break; - } - default: - throw lazyDOMException( - `Unable to import DH key with format ${format}`, - 'NotSupportedError'); - } - - const { - prime, - primeLength, - generator, - group, - } = keyObject[kHandle].keyDetail({}); - - return new InternalCryptoKey(keyObject, { - name: algorithm.name, - prime, - primeLength, - generator, - group, - }, keyUsages, extractable); -} - module.exports = { DiffieHellman, DiffieHellmanGroup, ECDH, diffieHellman, deriveBitsECDH, - deriveBitsDH, - dhGenerateKey, asyncDeriveBitsECDH, - asyncDeriveBitsDH, - dhExportKey, - dhImportKey, }; diff --git a/lib/internal/crypto/dsa.js b/lib/internal/crypto/dsa.js deleted file mode 100644 index 12e327c6ed1..00000000000 --- a/lib/internal/crypto/dsa.js +++ /dev/null @@ -1,276 +0,0 @@ -'use strict'; - -const { - Promise, - SafeSet, -} = primordials; - -const { - DSAKeyExportJob, - KeyObjectHandle, - SignJob, - kCryptoJobAsync, - kSigEncDER, - kKeyTypePrivate, - kSignJobModeSign, - kSignJobModeVerify, -} = internalBinding('crypto'); - -const { - codes: { - ERR_INVALID_ARG_TYPE, - ERR_MISSING_OPTION, - } -} = require('internal/errors'); - -const { - validateUint32, -} = require('internal/validators'); - -const { - InternalCryptoKey, - PrivateKeyObject, - PublicKeyObject, - createPrivateKey, - createPublicKey, - isKeyObject, -} = require('internal/crypto/keys'); - -const { - generateKeyPair, -} = require('internal/crypto/keygen'); - -const { - getUsagesUnion, - hasAnyNotIn, - jobPromise, - normalizeHashName, - validateKeyOps, - kKeyObject, - kHandle, -} = require('internal/crypto/util'); - -const { - lazyDOMException, -} = require('internal/util'); - -function verifyAcceptableDsaKeyUse(name, type, usages) { - let checkSet; - switch (type) { - case 'private': - checkSet = ['sign']; - break; - case 'public': - checkSet = ['verify']; - break; - } - if (hasAnyNotIn(usages, checkSet)) { - throw lazyDOMException( - `Unsupported key usage for an ${name} key`, - 'SyntaxError'); - } -} - -async function dsaGenerateKey( - algorithm, - extractable, - keyUsages) { - const { - name, - modulusLength, - divisorLength, - hash - } = algorithm; - - if (hash === undefined) - throw new ERR_MISSING_OPTION('algorithm.hash'); - validateUint32(modulusLength, 'algorithm.modulusLength'); - - const usageSet = new SafeSet(keyUsages); - - if (hasAnyNotIn(usageSet, ['sign', 'verify'])) { - throw lazyDOMException( - 'Unsupported key usage for a DSA key', - 'SyntaxError'); - } - - return new Promise((resolve, reject) => { - generateKeyPair('dsa', { - modulusLength, - divisorLength, - }, (err, pubKey, privKey) => { - if (err) { - return reject(lazyDOMException( - 'The operation failed for an operation-specific reason', - 'OperationError')); - } - - const algorithm = { - name, - modulusLength, - divisorLength, - hash: { name: hash.name } - }; - - const publicKey = - new InternalCryptoKey( - pubKey, - algorithm, - getUsagesUnion(usageSet, 'verify'), - true); - - const privateKey = - new InternalCryptoKey( - privKey, - algorithm, - getUsagesUnion(usageSet, 'sign'), - extractable); - - resolve({ publicKey, privateKey }); - }); - }); -} - -function dsaExportKey(key, format) { - return jobPromise(new DSAKeyExportJob( - kCryptoJobAsync, - format, - key[kKeyObject][kHandle])); -} - -async function dsaImportKey( - format, - keyData, - algorithm, - extractable, - keyUsages) { - const { hash } = algorithm; - if (hash === undefined) - throw new ERR_MISSING_OPTION('algorithm.hash'); - - const usagesSet = new SafeSet(keyUsages); - let keyObject; - switch (format) { - case 'node.keyObject': { - if (!isKeyObject(keyData)) - throw new ERR_INVALID_ARG_TYPE('keyData', 'KeyObject', keyData); - if (keyData.type === 'secret') - throw lazyDOMException('Invalid key type', 'InvalidAccessException'); - verifyAcceptableDsaKeyUse(algorithm.name, keyData.type, usagesSet); - keyObject = keyData; - break; - } - case 'spki': { - verifyAcceptableDsaKeyUse(algorithm.name, 'public', usagesSet); - keyObject = createPublicKey({ - key: keyData, - format: 'der', - type: 'spki' - }); - break; - } - case 'pkcs8': { - verifyAcceptableDsaKeyUse(algorithm.name, 'private', usagesSet); - keyObject = createPrivateKey({ - key: keyData, - format: 'der', - type: 'pkcs8' - }); - break; - } - case 'jwk': { - if (keyData == null || typeof keyData !== 'object') - throw lazyDOMException('Invalid JWK keyData', 'DataError'); - - verifyAcceptableDsaKeyUse( - algorithm.name, - keyData.x !== undefined ? 'private' : 'public', - usagesSet); - - if (keyData.kty !== 'DSA') - throw lazyDOMException('Invalid key type', 'DataError'); - - if (usagesSet.size > 0 && - keyData.use !== undefined && - keyData.use !== 'sig') { - throw lazyDOMException('Invalid use type', 'DataError'); - } - - validateKeyOps(keyData.key_ops, usagesSet); - - if (keyData.ext !== undefined && - keyData.ext === false && - extractable === true) { - throw lazyDOMException('JWK is not extractable', 'DataError'); - } - - if (keyData.alg !== undefined) { - if (typeof keyData.alg !== 'string') - throw lazyDOMException('Invalid alg', 'DataError'); - const hash = - normalizeHashName(keyData.alg, normalizeHashName.kContextWebCrypto); - if (hash !== algorithm.hash.name) - throw lazyDOMException('Hash mismatch', 'DataError'); - } - - const handle = new KeyObjectHandle(); - const type = handle.initJwk(keyData); - if (type === undefined) - throw lazyDOMException('Invalid JWK keyData', 'DataError'); - - keyObject = type === kKeyTypePrivate ? - new PrivateKeyObject(handle) : - new PublicKeyObject(handle); - - break; - } - default: - throw lazyDOMException( - `Unable to import DSA key with format ${format}`, - 'NotSupportedError'); - } - - if (keyObject.asymmetricKeyType !== 'dsa') - throw lazyDOMException('Invalid key type', 'DataError'); - - const { - modulusLength, - divisorLength, - } = keyObject[kHandle].keyDetail({}); - - return new InternalCryptoKey(keyObject, { - name: algorithm.name, - modulusLength, - divisorLength, - hash: algorithm.hash - }, keyUsages, extractable); -} - -function dsaSignVerify(key, data, algorithm, signature) { - const mode = signature === undefined ? kSignJobModeSign : kSignJobModeVerify; - const type = mode === kSignJobModeSign ? 'private' : 'public'; - - if (key.type !== type) - throw lazyDOMException(`Key must be a ${type} key`, 'InvalidAccessError'); - - return jobPromise(new SignJob( - kCryptoJobAsync, - signature === undefined ? kSignJobModeSign : kSignJobModeVerify, - key[kKeyObject][kHandle], - undefined, - undefined, - undefined, - data, - normalizeHashName(key.algorithm.hash.name), - undefined, // Salt-length is not used in DSA - undefined, // Padding is not used in DSA - kSigEncDER, - signature)); -} - -module.exports = { - dsaExportKey, - dsaGenerateKey, - dsaImportKey, - dsaSignVerify, -}; diff --git a/lib/internal/crypto/ec.js b/lib/internal/crypto/ec.js index b64922bcdc8..ed7484dbbb5 100644 --- a/lib/internal/crypto/ec.js +++ b/lib/internal/crypto/ec.js @@ -1,34 +1,24 @@ 'use strict'; const { + ArrayPrototypeIncludes, ObjectKeys, - Promise, SafeSet, } = primordials; -const { Buffer } = require('buffer'); - const { ECKeyExportJob, KeyObjectHandle, SignJob, kCryptoJobAsync, kKeyTypePrivate, - kKeyTypePublic, kSignJobModeSign, kSignJobModeVerify, kSigEncP1363, } = internalBinding('crypto'); -const { - validateBoolean, - validateOneOf, - validateString, -} = require('internal/validators'); - const { codes: { - ERR_INVALID_ARG_TYPE, ERR_MISSING_OPTION, } } = require('internal/errors'); @@ -47,10 +37,11 @@ const { const { lazyDOMException, + promisify, } = require('internal/util'); const { - generateKeyPair, + generateKeyPair: _generateKeyPair, } = require('internal/crypto/keygen'); const { @@ -59,19 +50,16 @@ const { PublicKeyObject, createPrivateKey, createPublicKey, - isKeyObject, } = require('internal/crypto/keys'); +const generateKeyPair = promisify(_generateKeyPair); + function verifyAcceptableEcKeyUse(name, type, usages) { let checkSet; switch (name) { case 'ECDH': checkSet = ['deriveKey', 'deriveBits']; break; - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - // Fall through case 'ECDSA': switch (type) { case 'private': @@ -96,61 +84,18 @@ function createECPublicKeyRaw(namedCurve, keyData) { return new PublicKeyObject(handle); } -function createECRawKey(namedCurve, keyData, isPublic) { - const handle = new KeyObjectHandle(); - keyData = getArrayBufferOrView(keyData, 'keyData'); - - switch (namedCurve) { - case 'NODE-ED25519': - case 'NODE-X25519': - if (keyData.byteLength !== 32) { - throw lazyDOMException( - `${namedCurve} raw keys must be exactly 32-bytes`); - } - break; - case 'NODE-ED448': - if (keyData.byteLength !== 57) { - throw lazyDOMException( - `${namedCurve} raw keys must be exactly 57-bytes`); - } - break; - case 'NODE-X448': - if (keyData.byteLength !== 56) { - throw lazyDOMException( - `${namedCurve} raw keys must be exactly 56-bytes`); - } - break; - } - - const keyType = isPublic ? kKeyTypePublic : kKeyTypePrivate; - if (!handle.initEDRaw(namedCurve, keyData, keyType)) { - throw lazyDOMException('Failure to generate key object'); - } - - return isPublic ? new PublicKeyObject(handle) : new PrivateKeyObject(handle); -} - async function ecGenerateKey(algorithm, extractable, keyUsages) { const { name, namedCurve } = algorithm; - validateString(namedCurve, 'algorithm.namedCurve'); - validateOneOf( - namedCurve, - 'algorithm.namedCurve', - ObjectKeys(kNamedCurveAliases)); + + if (!ArrayPrototypeIncludes(ObjectKeys(kNamedCurveAliases), namedCurve)) { + throw lazyDOMException( + 'Unrecognized namedCurve', + 'NotSupportedError'); + } const usageSet = new SafeSet(keyUsages); switch (name) { case 'ECDSA': - if (namedCurve === 'NODE-ED25519' || - namedCurve === 'NODE-ED448' || - namedCurve === 'NODE-X25519' || - namedCurve === 'NODE-X448') { - throw lazyDOMException('Unsupported named curves for ECDSA'); - } - // Fall through - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': if (hasAnyNotIn(usageSet, ['sign', 'verify'])) { throw lazyDOMException( 'Unsupported key usage for an ECDSA key', @@ -163,75 +108,46 @@ async function ecGenerateKey(algorithm, extractable, keyUsages) { 'Unsupported key usage for an ECDH key', 'SyntaxError'); } - if (namedCurve === 'NODE-ED25519' || namedCurve === 'NODE-ED448') { - throw lazyDOMException('Unsupported named curves for ECDH'); - } // Fall through } - return new Promise((resolve, reject) => { - let genKeyType; - let genOpts; - switch (namedCurve) { - case 'NODE-ED25519': - genKeyType = 'ed25519'; - break; - case 'NODE-ED448': - genKeyType = 'ed448'; - break; - case 'NODE-X25519': - genKeyType = 'x25519'; - break; - case 'NODE-X448': - genKeyType = 'x448'; - break; - default: - genKeyType = 'ec'; - genOpts = { namedCurve }; - break; - } - generateKeyPair(genKeyType, genOpts, (err, pubKey, privKey) => { - if (err) { - return reject(lazyDOMException( - 'The operation failed for an operation-specific reason', - 'OperationError')); - } - const algorithm = { name, namedCurve }; - - let publicUsages; - let privateUsages; - switch (name) { - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - // Fall through - case 'ECDSA': - publicUsages = getUsagesUnion(usageSet, 'verify'); - privateUsages = getUsagesUnion(usageSet, 'sign'); - break; - case 'ECDH': - publicUsages = []; - privateUsages = getUsagesUnion(usageSet, 'deriveKey', 'deriveBits'); - break; - } - - const publicKey = - new InternalCryptoKey( - pubKey, - algorithm, - publicUsages, - true); - - const privateKey = - new InternalCryptoKey( - privKey, - algorithm, - privateUsages, - extractable); - - resolve({ publicKey, privateKey }); - }); + const keypair = await generateKeyPair('ec', { namedCurve }).catch((err) => { + // TODO(@panva): add err as cause to DOMException + throw lazyDOMException( + 'The operation failed for an operation-specific reason', + 'OperationError'); }); + + let publicUsages; + let privateUsages; + switch (name) { + case 'ECDSA': + publicUsages = getUsagesUnion(usageSet, 'verify'); + privateUsages = getUsagesUnion(usageSet, 'sign'); + break; + case 'ECDH': + publicUsages = []; + privateUsages = getUsagesUnion(usageSet, 'deriveKey', 'deriveBits'); + break; + } + + const keyAlgorithm = { name, namedCurve }; + + const publicKey = + new InternalCryptoKey( + keypair.publicKey, + keyAlgorithm, + publicUsages, + true); + + const privateKey = + new InternalCryptoKey( + keypair.privateKey, + keyAlgorithm, + privateUsages, + extractable); + + return { publicKey, privateKey }; } function ecExportKey(key, format) { @@ -249,40 +165,16 @@ async function ecImportKey( keyUsages) { const { name, namedCurve } = algorithm; - validateString(namedCurve, 'algorithm.namedCurve'); - validateOneOf( - namedCurve, - 'algorithm.namedCurve', - ObjectKeys(kNamedCurveAliases)); + + if (!ArrayPrototypeIncludes(ObjectKeys(kNamedCurveAliases), namedCurve)) { + throw lazyDOMException( + 'Unrecognized namedCurve', + 'NotSupportedError'); + } + let keyObject; const usagesSet = new SafeSet(keyUsages); - let checkNamedCurve = true; switch (format) { - case 'node.keyObject': { - if (!isKeyObject(keyData)) - throw new ERR_INVALID_ARG_TYPE('keyData', 'KeyObject', keyData); - if (keyData.type === 'secret') - throw lazyDOMException('Invalid key type', 'InvalidAccessException'); - - switch (namedCurve) { - case 'NODE-X25519': - // Fall through - case 'NODE-X448': - if (algorithm.name !== 'ECDH') - throw lazyDOMException('Invalid algorithm name.', 'DataError'); - break; - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - if (algorithm.name !== namedCurve) - throw lazyDOMException('Invalid algorithm name.', 'DataError'); - break; - } - - verifyAcceptableEcKeyUse(name, keyData.type, usagesSet); - keyObject = keyData; - break; - } case 'spki': { verifyAcceptableEcKeyUse(name, 'public', usagesSet); keyObject = createPublicKey({ @@ -302,122 +194,59 @@ async function ecImportKey( break; } case 'jwk': { - let curve; if (keyData == null || typeof keyData !== 'object') throw lazyDOMException('Invalid JWK keyData', 'DataError'); - switch (keyData.kty) { - case 'OKP': { - const isPublic = keyData.d === undefined; - - let type; - switch (namedCurve) { - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - type = `NODE-${keyData.crv.toUpperCase()}`; - break; - case 'NODE-X25519': - // Fall through - case 'NODE-X448': - type = 'ECDH'; - break; - } - - if (algorithm.name !== type) - throw lazyDOMException('Invalid algorithm name.', 'DataError'); - - verifyAcceptableEcKeyUse( - type, - isPublic ? 'public' : 'private', - usagesSet); - keyObject = createECRawKey( - namedCurve, - Buffer.from( - isPublic ? keyData.x : keyData.d, - 'base64'), - isPublic); - break; - } - default: { - if (keyData.kty !== 'EC') - throw lazyDOMException('Invalid key type', 'DataError'); - - if (keyData.d !== undefined) { - verifyAcceptableEcKeyUse(name, 'private', usagesSet); - } else { - verifyAcceptableEcKeyUse(name, 'public', usagesSet); - } - - if (usagesSet.size > 0 && keyData.use !== undefined) { - if (algorithm.name === 'ECDSA' && keyData.use !== 'sig') - throw lazyDOMException('Invalid use type', 'DataError'); - if (algorithm.name === 'ECDH' && keyData.use !== 'enc') - throw lazyDOMException('Invalid use type', 'DataError'); - } - - validateKeyOps(keyData.key_ops, usagesSet); - - if (keyData.ext !== undefined && - keyData.ext === false && - extractable === true) { - throw lazyDOMException('JWK is not extractable', 'DataError'); - } - - if (algorithm.name === 'ECDSA' && keyData.alg !== undefined) { - if (typeof keyData.alg !== 'string') - throw lazyDOMException('Invalid alg', 'DataError'); - switch (keyData.alg) { - case 'ES256': curve = 'P-256'; break; - case 'ES384': curve = 'P-384'; break; - case 'ES512': curve = 'P-521'; break; - } - if (curve !== namedCurve) - throw lazyDOMException('Named curve mismatch', 'DataError'); - } - - const handle = new KeyObjectHandle(); - const type = handle.initJwk(keyData, namedCurve); - if (type === undefined) - throw lazyDOMException('Invalid JWK keyData', 'DataError'); - keyObject = type === kKeyTypePrivate ? - new PrivateKeyObject(handle) : - new PublicKeyObject(handle); + if (keyData.kty !== 'EC') + throw lazyDOMException('Invalid key type', 'DataError'); + if (keyData.crv !== namedCurve) + throw lazyDOMException('Named curve mismatch', 'DataError'); + + if (keyData.d !== undefined) { + verifyAcceptableEcKeyUse(name, 'private', usagesSet); + } else { + verifyAcceptableEcKeyUse(name, 'public', usagesSet); + } + + if (usagesSet.size > 0 && keyData.use !== undefined) { + if (algorithm.name === 'ECDSA' && keyData.use !== 'sig') + throw lazyDOMException('Invalid use type', 'DataError'); + if (algorithm.name === 'ECDH' && keyData.use !== 'enc') + throw lazyDOMException('Invalid use type', 'DataError'); + } + + validateKeyOps(keyData.key_ops, usagesSet); + + if (keyData.ext !== undefined && + keyData.ext === false && + extractable === true) { + throw lazyDOMException('JWK is not extractable', 'DataError'); + } + + if (algorithm.name === 'ECDSA' && keyData.alg !== undefined) { + if (typeof keyData.alg !== 'string') + throw lazyDOMException('Invalid alg', 'DataError'); + let algNamedCurve; + switch (keyData.alg) { + case 'ES256': algNamedCurve = 'P-256'; break; + case 'ES384': algNamedCurve = 'P-384'; break; + case 'ES512': algNamedCurve = 'P-521'; break; } + if (algNamedCurve !== namedCurve) + throw lazyDOMException('Named curve mismatch', 'DataError'); } + + const handle = new KeyObjectHandle(); + const type = handle.initJwk(keyData, namedCurve); + if (type === undefined) + throw lazyDOMException('Invalid JWK keyData', 'DataError'); + keyObject = type === kKeyTypePrivate ? + new PrivateKeyObject(handle) : + new PublicKeyObject(handle); break; } case 'raw': { - switch (namedCurve) { - case 'NODE-X25519': - // Fall through - case 'NODE-X448': - if (algorithm.public !== undefined) - validateBoolean(algorithm.public, 'algorithm.public'); - if (algorithm.name !== 'ECDH') - throw lazyDOMException('Invalid algorithm name.', 'DataError'); - verifyAcceptableEcKeyUse( - algorithm.name, - algorithm.public === true ? 'public' : 'private', - usagesSet); - keyObject = createECRawKey(namedCurve, keyData, algorithm.public); - break; - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - if (algorithm.public !== undefined) - validateBoolean(algorithm.public, 'algorithm.public'); - if (algorithm.name !== namedCurve) - throw lazyDOMException('Invalid algorithm name.', 'DataError'); - verifyAcceptableEcKeyUse( - algorithm.name, - algorithm.public === true ? 'public' : 'private', - usagesSet); - keyObject = createECRawKey(namedCurve, keyData, algorithm.public); - break; - default: - verifyAcceptableEcKeyUse(name, 'public', usagesSet); - keyObject = createECPublicKeyRaw(namedCurve, keyData); - } + verifyAcceptableEcKeyUse(name, 'public', usagesSet); + keyObject = createECPublicKeyRaw(namedCurve, keyData); if (keyObject === undefined) throw lazyDOMException('Unable to import EC key', 'OperationError'); break; @@ -426,41 +255,18 @@ async function ecImportKey( switch (algorithm.name) { case 'ECDSA': - if (keyObject.asymmetricKeyType !== 'ec') - throw lazyDOMException('Invalid key type', 'DataError'); - break; + // Fall through case 'ECDH': - if (algorithm.namedCurve === 'NODE-X25519') { - if (keyObject.asymmetricKeyType !== 'x25519') - throw lazyDOMException('Invalid key type', 'DataError'); - checkNamedCurve = false; - } else if (algorithm.namedCurve === 'NODE-X448') { - if (keyObject.asymmetricKeyType !== 'x448') - throw lazyDOMException('Invalid key type', 'DataError'); - checkNamedCurve = false; - } else if (keyObject.asymmetricKeyType !== 'ec') { - throw lazyDOMException('Invalid key type', 'DataError'); - } - break; - case 'NODE-ED25519': - if (keyObject.asymmetricKeyType !== 'ed25519') - throw lazyDOMException('Invalid key type', 'DataError'); - checkNamedCurve = false; - break; - case 'NODE-ED448': - if (keyObject.asymmetricKeyType !== 'ed448') + if (keyObject.asymmetricKeyType !== 'ec') throw lazyDOMException('Invalid key type', 'DataError'); - checkNamedCurve = false; break; } - if (checkNamedCurve) { - const { - namedCurve: checkNamedCurve - } = keyObject[kHandle].keyDetail({}); - if (kNamedCurveAliases[namedCurve] !== checkNamedCurve) - throw lazyDOMException('Named curve mismatch', 'DataError'); - } + const { + namedCurve: checkNamedCurve + } = keyObject[kHandle].keyDetail({}); + if (kNamedCurveAliases[namedCurve] !== checkNamedCurve) + throw lazyDOMException('Named curve mismatch', 'DataError'); return new InternalCryptoKey( keyObject, @@ -476,19 +282,9 @@ function ecdsaSignVerify(key, data, { name, hash }, signature) { if (key.type !== type) throw lazyDOMException(`Key must be a ${type} key`, 'InvalidAccessError'); - let hashname; - switch (name) { - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - if (hash !== undefined) - throw lazyDOMException(`Hash is not permitted for ${name}`); - break; - default: - if (hash === undefined) - throw new ERR_MISSING_OPTION('algorithm.hash'); - hashname = normalizeHashName(hash.name); - } + if (hash === undefined) + throw new ERR_MISSING_OPTION('algorithm.hash'); + const hashname = normalizeHashName(hash.name); return jobPromise(new SignJob( kCryptoJobAsync, diff --git a/lib/internal/crypto/hash.js b/lib/internal/crypto/hash.js index 6c502f52b66..956053af0a8 100644 --- a/lib/internal/crypto/hash.js +++ b/lib/internal/crypto/hash.js @@ -28,6 +28,10 @@ const { prepareSecretKey, } = require('internal/crypto/keys'); +const { + lazyDOMException, +} = require('internal/util'); + const { Buffer, } = require('buffer'); @@ -171,11 +175,22 @@ async function asyncDigest(algorithm, data) { if (algorithm.length !== undefined) validateUint32(algorithm.length, 'algorithm.length'); - return jobPromise(new HashJob( - kCryptoJobAsync, - normalizeHashName(algorithm.name), - data, - algorithm.length)); + switch (algorithm.name) { + case 'SHA-1': + // Fall through + case 'SHA-256': + // Fall through + case 'SHA-384': + // Fall through + case 'SHA-512': + return jobPromise(new HashJob( + kCryptoJobAsync, + normalizeHashName(algorithm.name), + data, + algorithm.length)); + } + + throw lazyDOMException('Unrecognized name.', 'NotSupportedError'); } module.exports = { diff --git a/lib/internal/crypto/hashnames.js b/lib/internal/crypto/hashnames.js index be5064532c8..5c0051e0a8f 100644 --- a/lib/internal/crypto/hashnames.js +++ b/lib/internal/crypto/hashnames.js @@ -11,7 +11,6 @@ const kHashContextJwkRsa = 3; const kHashContextJwkRsaPss = 4; const kHashContextJwkRsaOaep = 5; const kHashContextJwkHmac = 6; -const kHashContextJwkDsa = 7; // WebCrypto and JWK use a bunch of different names for the // standard set of SHA-* digest algorithms... which is ... fun. @@ -26,7 +25,6 @@ const kHashNames = { [kHashContextJwkRsaPss]: 'PS1', [kHashContextJwkRsaOaep]: 'RSA-OAEP', [kHashContextJwkHmac]: 'HS1', - [kHashContextJwkDsa]: 'NODE-DSA-SHA-1', }, sha256: { [kHashContextNode]: 'sha256', @@ -35,7 +33,6 @@ const kHashNames = { [kHashContextJwkRsaPss]: 'PS256', [kHashContextJwkRsaOaep]: 'RSA-OAEP-256', [kHashContextJwkHmac]: 'HS256', - [kHashContextJwkDsa]: 'NODE-DSA-SHA-256', }, sha384: { [kHashContextNode]: 'sha384', @@ -44,7 +41,6 @@ const kHashNames = { [kHashContextJwkRsaPss]: 'PS384', [kHashContextJwkRsaOaep]: 'RSA-OAEP-384', [kHashContextJwkHmac]: 'HS384', - [kHashContextJwkDsa]: 'NODE-DSA-SHA-384', }, sha512: { [kHashContextNode]: 'sha512', @@ -53,7 +49,6 @@ const kHashNames = { [kHashContextJwkRsaPss]: 'PS512', [kHashContextJwkRsaOaep]: 'RSA-OAEP-512', [kHashContextJwkHmac]: 'HS512', - [kHashContextJwkDsa]: 'NODE-DSA-SHA-512', } }; @@ -85,6 +80,5 @@ normalizeHashName.kContextJwkRsa = kHashContextJwkRsa; normalizeHashName.kContextJwkRsaPss = kHashContextJwkRsaPss; normalizeHashName.kContextJwkRsaOaep = kHashContextJwkRsaOaep; normalizeHashName.kContextJwkHmac = kHashContextJwkHmac; -normalizeHashName.kContextJwkDsa = kHashContextJwkDsa; module.exports = normalizeHashName; diff --git a/lib/internal/crypto/hkdf.js b/lib/internal/crypto/hkdf.js index 1d8251a9245..635e07dd594 100644 --- a/lib/internal/crypto/hkdf.js +++ b/lib/internal/crypto/hkdf.js @@ -3,7 +3,6 @@ const { FunctionPrototypeCall, Promise, - Uint8Array, } = primordials; const { @@ -53,13 +52,10 @@ const { } = require('internal/errors'); const validateParameters = hideStackFrames((hash, key, salt, info, length) => { - key = prepareKey(key); - salt = toBuf(salt); - info = toBuf(info); - validateString(hash, 'digest'); - validateByteSource(salt, 'salt'); - validateByteSource(info, 'info'); + key = prepareKey(key); + salt = validateByteSource(salt, 'salt'); + info = validateByteSource(info, 'info'); validateInteger(length, 'length', 0, kMaxLength); @@ -83,9 +79,8 @@ function prepareKey(key) { if (isKeyObject(key)) return key; - // TODO(@jasnell): createSecretKey should allow using an ArrayBuffer if (isAnyArrayBuffer(key)) - return createSecretKey(new Uint8Array(key)); + return createSecretKey(key); key = toBuf(key); @@ -145,7 +140,6 @@ function hkdfSync(hash, key, salt, info, length) { } async function hkdfDeriveBits(algorithm, baseKey, length) { - validateUint32(length, 'length'); const { hash } = algorithm; const salt = getArrayBufferOrView(algorithm.salt, 'algorithm.salt'); const info = getArrayBufferOrView(algorithm.info, 'algorithm.info'); @@ -156,6 +150,9 @@ async function hkdfDeriveBits(algorithm, baseKey, length) { if (length !== undefined) { if (length === 0) throw lazyDOMException('length cannot be zero', 'OperationError'); + if (length === null) + throw lazyDOMException('length cannot be null', 'OperationError'); + validateUint32(length, 'length'); if (length % 8) { throw lazyDOMException( 'length must be a multiple of 8', diff --git a/lib/internal/crypto/keygen.js b/lib/internal/crypto/keygen.js index 1469a01682e..865e137072b 100644 --- a/lib/internal/crypto/keygen.js +++ b/lib/internal/crypto/keygen.js @@ -31,14 +31,16 @@ const { SecretKeyObject, parsePublicKeyEncoding, parsePrivateKeyEncoding, - isJwk } = require('internal/crypto/keys'); const { kAesKeyLengths, } = require('internal/crypto/util'); -const { customPromisifyArgs } = require('internal/util'); +const { + customPromisifyArgs, + kEmptyObject, +} = require('internal/util'); const { isInt32, @@ -63,6 +65,10 @@ const { isArrayBufferView } = require('internal/util/types'); const { getOptionValue } = require('internal/options'); const pendingDeprecation = getOptionValue('--pending-deprecation'); +function isJwk(obj) { + return obj != null && obj.kty !== undefined; +} + function wrapKey(key, ctor) { if (typeof key === 'string' || isArrayBufferView(key) || @@ -93,6 +99,7 @@ function generateKeyPair(type, options, callback) { } ObjectDefineProperty(generateKeyPair, customPromisifyArgs, { + __proto__: null, value: ['publicKey', 'privateKey'], enumerable: false }); @@ -118,7 +125,7 @@ function handleError(ret) { }; } -function parseKeyEncoding(keyType, options = {}) { +function parseKeyEncoding(keyType, options = kEmptyObject) { const { publicKeyEncoding, privateKeyEncoding } = options; let publicFormat, publicType; @@ -356,7 +363,7 @@ function generateKeyJob(mode, keyType, options) { const { length } = options; switch (keyType) { case 'hmac': - validateInteger(length, 'options.length', 1, 2 ** 31 - 1); + validateInteger(length, 'options.length', 8, 2 ** 31 - 1); break; case 'aes': validateOneOf(length, 'options.length', kAesKeyLengths); diff --git a/lib/internal/crypto/keys.js b/lib/internal/crypto/keys.js index 5c9f1fd0926..4303dc44fe6 100644 --- a/lib/internal/crypto/keys.js +++ b/lib/internal/crypto/keys.js @@ -38,7 +38,6 @@ const { ERR_ILLEGAL_CONSTRUCTOR, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, - ERR_OUT_OF_RANGE, } } = require('internal/errors'); @@ -85,7 +84,7 @@ for (const m of [[kKeyEncodingPKCS1, 'pkcs1'], [kKeyEncodingPKCS8, 'pkcs8'], encodingNames[m[0]] = m[1]; // Creating the KeyObject class is a little complicated due to inheritance -// and that fact that KeyObjects should be transferrable between threads, +// and the fact that KeyObjects should be transferrable between threads, // which requires the KeyObject base class to be implemented in C++. // The creation requires a callback to make sure that the NativeKeyObject // base class cannot exist without the other KeyObject implementations. @@ -108,6 +107,7 @@ const { this[kKeyType] = type; ObjectDefineProperty(this, kHandle, { + __proto__: null, value: handle, enumerable: false, configurable: false, @@ -447,7 +447,7 @@ function getKeyObjectHandleFromJwk(key, ctx) { const handle = new KeyObjectHandle(); const keyType = isPublic ? kKeyTypePublic : kKeyTypePrivate; - if (!handle.initEDRaw(`NODE-${key.crv.toUpperCase()}`, keyData, keyType)) { + if (!handle.initEDRaw(key.crv, keyData, keyType)) { throw new ERR_CRYPTO_INVALID_JWK(); } @@ -525,14 +525,18 @@ function prepareAsymmetricKey(key, ctx) { return { format: kKeyFormatPEM, data: getArrayBufferOrView(key, 'key') }; } else if (typeof key === 'object') { const { key: data, encoding, format } = key; + // The 'key' property can be a KeyObject as well to allow specifying // additional options such as padding along with the key. if (isKeyObject(data)) return { data: getKeyObjectHandle(data, ctx) }; else if (isCryptoKey(data)) return { data: getKeyObjectHandle(data[kKeyObject], ctx) }; - else if (isJwk(data) && format === 'jwk') + else if (format === 'jwk') { + validateObject(data, 'key.key'); return { data: getKeyObjectHandleFromJwk(data, ctx), format: 'jwk' }; + } + // Either PEM or DER using PKCS#1 or SPKI. if (!isStringOrBuffer(data)) { throw new ERR_INVALID_ARG_TYPE( @@ -587,8 +591,6 @@ function prepareSecretKey(key, encoding, bufferOnly = false) { function createSecretKey(key, encoding) { key = prepareSecretKey(key, encoding, true); - if (key.byteLength === 0) - throw new ERR_OUT_OF_RANGE('key.byteLength', '> 0', key.byteLength); const handle = new KeyObjectHandle(); handle.init(kKeyTypeSecret, key); return new SecretKeyObject(handle); @@ -722,10 +724,6 @@ function isCryptoKey(obj) { return obj != null && obj[kKeyObject] !== undefined; } -function isJwk(obj) { - return obj != null && obj.kty !== undefined; -} - module.exports = { // Public API. createSecretKey, @@ -747,5 +745,4 @@ module.exports = { PrivateKeyObject, isKeyObject, isCryptoKey, - isJwk, }; diff --git a/lib/internal/crypto/mac.js b/lib/internal/crypto/mac.js index 61fcc88a923..15b3378e2ed 100644 --- a/lib/internal/crypto/mac.js +++ b/lib/internal/crypto/mac.js @@ -2,7 +2,6 @@ const { ArrayFrom, - Promise, SafeSet, } = primordials; @@ -27,26 +26,27 @@ const { const { lazyDOMException, + promisify, } = require('internal/util'); const { codes: { ERR_MISSING_OPTION, - ERR_INVALID_ARG_TYPE, } } = require('internal/errors'); const { - generateKey, + generateKey: _generateKey, } = require('internal/crypto/keygen'); const { InternalCryptoKey, SecretKeyObject, createSecretKey, - isKeyObject, } = require('internal/crypto/keys'); +const generateKey = promisify(_generateKey); + async function hmacGenerateKey(algorithm, extractable, keyUsages) { const { hash, name } = algorithm; let { length } = algorithm; @@ -64,21 +64,19 @@ async function hmacGenerateKey(algorithm, extractable, keyUsages) { 'Unsupported key usage for an HMAC key', 'SyntaxError'); } - return new Promise((resolve, reject) => { - generateKey('hmac', { length }, (err, key) => { - if (err) { - return reject(lazyDOMException( - 'The operation failed for an operation-specific reason', - 'OperationError')); - } - resolve(new InternalCryptoKey( - key, - { name, length, hash: { name: hash.name } }, - ArrayFrom(usageSet), - extractable)); - }); + const key = await generateKey('hmac', { length }).catch((err) => { + // TODO(@panva): add err as cause to DOMException + throw lazyDOMException( + 'The operation failed for an operation-specific reason', + 'OperationError'); }); + + return new InternalCryptoKey( + key, + { name, length, hash: { name: hash.name } }, + ArrayFrom(usageSet), + extractable); } async function hmacImportKey( @@ -99,18 +97,6 @@ async function hmacImportKey( } let keyObject; switch (format) { - case 'node.keyObject': { - if (!isKeyObject(keyData)) - throw new ERR_INVALID_ARG_TYPE('keyData', 'KeyObject', keyData); - - if (keyData.type !== 'secret') { - throw lazyDOMException( - `Unable to import HMAC key with format ${format}`); - } - - keyObject = keyData; - break; - } case 'raw': { const checkLength = keyData.byteLength * 8; diff --git a/lib/internal/crypto/pbkdf2.js b/lib/internal/crypto/pbkdf2.js index 753c4f2d9da..ce65c9b6ebb 100644 --- a/lib/internal/crypto/pbkdf2.js +++ b/lib/internal/crypto/pbkdf2.js @@ -15,6 +15,7 @@ const { const { validateCallback, + validateInt32, validateInteger, validateString, validateUint32, @@ -91,20 +92,25 @@ function check(password, salt, iterations, keylen, digest) { password = getArrayBufferOrView(password, 'password'); salt = getArrayBufferOrView(salt, 'salt'); - validateUint32(iterations, 'iterations', true); - validateUint32(keylen, 'keylen'); + // OpenSSL uses a signed int to represent these values, so we are restricted + // to the 31-bit range here (which is plenty). + validateInt32(iterations, 'iterations', 1); + validateInt32(keylen, 'keylen', 0); return { password, salt, iterations, keylen, digest }; } async function pbkdf2DeriveBits(algorithm, baseKey, length) { - validateUint32(length, 'length'); const { iterations } = algorithm; let { hash } = algorithm; const salt = getArrayBufferOrView(algorithm.salt, 'algorithm.salt'); if (hash === undefined) throw new ERR_MISSING_OPTION('algorithm.hash'); - validateInteger(iterations, 'algorithm.iterations', 1); + validateInteger(iterations, 'algorithm.iterations'); + if (iterations === 0) + throw lazyDOMException( + 'iterations cannot be zero', + 'OperationError'); hash = normalizeHashName(hash.name); @@ -114,6 +120,9 @@ async function pbkdf2DeriveBits(algorithm, baseKey, length) { if (length !== undefined) { if (length === 0) throw lazyDOMException('length cannot be zero', 'OperationError'); + if (length === null) + throw lazyDOMException('length cannot be null', 'OperationError'); + validateUint32(length, 'length'); if (length % 8) { throw lazyDOMException( 'length must be a multiple of 8', diff --git a/lib/internal/crypto/random.js b/lib/internal/crypto/random.js index 1423ea42954..277ddf95eb4 100644 --- a/lib/internal/crypto/random.js +++ b/lib/internal/crypto/random.js @@ -26,6 +26,7 @@ const { } = internalBinding('crypto'); const { + kEmptyObject, lazyDOMException, } = require('internal/util'); @@ -43,6 +44,7 @@ const { validateNumber, validateBoolean, validateCallback, + validateInt32, validateObject, validateUint32, } = require('internal/validators'); @@ -398,7 +400,7 @@ function randomUUID(options) { validateObject(options, 'options'); const { disableEntropyCache = false, - } = options || {}; + } = options || kEmptyObject; validateBoolean(disableEntropyCache, 'options.disableEntropyCache'); @@ -460,10 +462,10 @@ function createRandomPrimeJob(type, size, options) { } function generatePrime(size, options, callback) { - validateUint32(size, 'size', true); + validateInt32(size, 'size', 1); if (typeof options === 'function') { callback = options; - options = {}; + options = kEmptyObject; } validateCallback(callback); @@ -481,8 +483,8 @@ function generatePrime(size, options, callback) { job.run(); } -function generatePrimeSync(size, options = {}) { - validateUint32(size, 'size', true); +function generatePrimeSync(size, options = kEmptyObject) { + validateInt32(size, 'size', 1); const job = createRandomPrimeJob(kCryptoJobSync, size, options); const { 0: err, 1: prime } = job.run(); @@ -505,7 +507,7 @@ function unsignedBigIntToBuffer(bigint, name) { return Buffer.from(padded, 'hex'); } -function checkPrime(candidate, options = {}, callback) { +function checkPrime(candidate, options = kEmptyObject, callback) { if (typeof candidate === 'bigint') candidate = unsignedBigIntToBuffer(candidate, 'candidate'); if (!isAnyArrayBuffer(candidate) && !isArrayBufferView(candidate)) { @@ -523,7 +525,7 @@ function checkPrime(candidate, options = {}, callback) { } if (typeof options === 'function') { callback = options; - options = {}; + options = kEmptyObject; } validateCallback(callback); validateObject(options, 'options'); @@ -538,7 +540,7 @@ function checkPrime(candidate, options = {}, callback) { job.run(); } -function checkPrimeSync(candidate, options = {}) { +function checkPrimeSync(candidate, options = kEmptyObject) { if (typeof candidate === 'bigint') candidate = unsignedBigIntToBuffer(candidate, 'candidate'); if (!isAnyArrayBuffer(candidate) && !isArrayBufferView(candidate)) { diff --git a/lib/internal/crypto/rsa.js b/lib/internal/crypto/rsa.js index 8e4b6af571d..fa6928e4d78 100644 --- a/lib/internal/crypto/rsa.js +++ b/lib/internal/crypto/rsa.js @@ -1,7 +1,6 @@ 'use strict'; const { - Promise, SafeSet, Uint8Array, } = primordials; @@ -49,6 +48,7 @@ const { const { lazyDOMException, + promisify, } = require('internal/util'); const { @@ -61,11 +61,10 @@ const { PublicKeyObject, createPublicKey, createPrivateKey, - isKeyObject, } = require('internal/crypto/keys'); const { - generateKeyPair, + generateKeyPair: _generateKeyPair, } = require('internal/crypto/keygen'); const kRsaVariants = { @@ -73,6 +72,7 @@ const kRsaVariants = { 'RSA-PSS': kKeyVariantRSA_PSS, 'RSA-OAEP': kKeyVariantRSA_OAEP, }; +const generateKeyPair = promisify(_generateKeyPair); function verifyAcceptableRsaKeyUse(name, type, usages) { let checkSet; @@ -174,56 +174,53 @@ async function rsaKeyGenerate( } } - return new Promise((resolve, reject) => { - generateKeyPair('rsa', { - modulusLength, - publicExponentConverted, - }, (err, pubKey, privKey) => { - if (err) { - return reject(lazyDOMException( - 'The operation failed for an operation-specific reason', - 'OperationError')); - } + const keypair = await generateKeyPair('rsa', { + modulusLength, + publicExponent: publicExponentConverted, + }).catch((err) => { + // TODO(@panva): add err as cause to DOMException + throw lazyDOMException( + 'The operation failed for an operation-specific reason', + 'OperationError'); + }); - const algorithm = { - name, - modulusLength, - publicExponent, - hash: { name: hash.name } - }; - - let publicUsages; - let privateUsages; - switch (name) { - case 'RSA-OAEP': { - publicUsages = getUsagesUnion(usageSet, 'encrypt', 'wrapKey'); - privateUsages = getUsagesUnion(usageSet, 'decrypt', 'unwrapKey'); - break; - } - default: { - publicUsages = getUsagesUnion(usageSet, 'verify'); - privateUsages = getUsagesUnion(usageSet, 'sign'); - break; - } - } + const keyAlgorithm = { + name, + modulusLength, + publicExponent, + hash: { name: hash.name } + }; - const publicKey = - new InternalCryptoKey( - pubKey, - algorithm, - publicUsages, - true); - - const privateKey = - new InternalCryptoKey( - privKey, - algorithm, - privateUsages, - extractable); - - resolve({ publicKey, privateKey }); - }); - }); + let publicUsages; + let privateUsages; + switch (name) { + case 'RSA-OAEP': { + publicUsages = getUsagesUnion(usageSet, 'encrypt', 'wrapKey'); + privateUsages = getUsagesUnion(usageSet, 'decrypt', 'unwrapKey'); + break; + } + default: { + publicUsages = getUsagesUnion(usageSet, 'verify'); + privateUsages = getUsagesUnion(usageSet, 'sign'); + break; + } + } + + const publicKey = + new InternalCryptoKey( + keypair.publicKey, + keyAlgorithm, + publicUsages, + true); + + const privateKey = + new InternalCryptoKey( + keypair.privateKey, + keyAlgorithm, + privateUsages, + extractable); + + return { publicKey, privateKey }; } function rsaExportKey(key, format) { @@ -247,15 +244,6 @@ async function rsaImportKey( const usagesSet = new SafeSet(keyUsages); let keyObject; switch (format) { - case 'node.keyObject': { - if (!isKeyObject(keyData)) - throw new ERR_INVALID_ARG_TYPE('keyData', 'KeyObject', keyData); - if (keyData.type === 'secret') - throw lazyDOMException('Invalid key type', 'InvalidAccessException'); - verifyAcceptableRsaKeyUse(algorithm.name, keyData.type, usagesSet); - keyObject = keyData; - break; - } case 'spki': { verifyAcceptableRsaKeyUse(algorithm.name, 'public', usagesSet); keyObject = createPublicKey({ @@ -326,14 +314,7 @@ async function rsaImportKey( 'NotSupportedError'); } - if (algorithm.name === 'RSA-PSS') { - if ( - keyObject.asymmetricKeyType !== 'rsa' && - keyObject.asymmetricKeyType !== 'rsa-pss' - ) { - throw lazyDOMException('Invalid key type', 'DataError'); - } - } else if (keyObject.asymmetricKeyType !== 'rsa') { + if (keyObject.asymmetricKeyType !== 'rsa') { throw lazyDOMException('Invalid key type', 'DataError'); } diff --git a/lib/internal/crypto/scrypt.js b/lib/internal/crypto/scrypt.js index 49e5b0624e1..781b4823b52 100644 --- a/lib/internal/crypto/scrypt.js +++ b/lib/internal/crypto/scrypt.js @@ -2,7 +2,6 @@ const { FunctionPrototypeCall, - Promise, } = primordials; const { Buffer } = require('buffer'); @@ -30,18 +29,13 @@ const { const { getArrayBufferOrView, getDefaultEncoding, - kKeyObject, } = require('internal/crypto/util'); -const { - lazyDOMException, -} = require('internal/util'); - const defaults = { N: 16384, r: 8, p: 1, - maxmem: 32 << 20, // 32 MB, matches SCRYPT_MAX_MEM. + maxmem: 32 << 20, // 32 MiB, matches SCRYPT_MAX_MEM. }; function scrypt(password, salt, keylen, options, callback = defaults) { @@ -141,45 +135,7 @@ function check(password, salt, keylen, options) { return { password, salt, keylen, N, r, p, maxmem }; } -async function scryptDeriveBits(algorithm, baseKey, length) { - validateUint32(length, 'length'); - const { - N = 16384, - r = 8, - p = 1, - maxmem = 32 * 1024 * 1024, - encoding, - } = algorithm; - validateUint32(N, 'algorithm.N'); - validateUint32(r, 'algorithm.r'); - validateUint32(p, 'algorithm.p'); - validateUint32(maxmem, 'algorithm.maxmem'); - const salt = getArrayBufferOrView(algorithm.salt, 'algorithm.salt', encoding); - - const raw = baseKey[kKeyObject].export(); - - let byteLength = 64; // the default - if (length !== undefined) { - if (length === 0) - throw lazyDOMException('length cannot be zero', 'OperationError'); - if (length % 8) { - throw lazyDOMException( - 'length must be a multiple of 8', - 'OperationError'); - } - byteLength = length / 8; - } - - return new Promise((resolve, reject) => { - scrypt(raw, salt, byteLength, { N, r, p, maxmem }, (err, result) => { - if (err) return reject(err); - resolve(result.buffer); - }); - }); -} - module.exports = { scrypt, scryptSync, - scryptDeriveBits, }; diff --git a/lib/internal/crypto/util.js b/lib/internal/crypto/util.js index eafcc3d9669..dbd816cff99 100644 --- a/lib/internal/crypto/util.js +++ b/lib/internal/crypto/util.js @@ -71,7 +71,7 @@ function lazyRequire(name) { return ret; } -var defaultEncoding = 'buffer'; +let defaultEncoding = 'buffer'; function setDefaultEncoding(val) { defaultEncoding = val; @@ -143,10 +143,6 @@ const kNamedCurveAliases = { 'P-256': 'prime256v1', 'P-384': 'secp384r1', 'P-521': 'secp521r1', - 'NODE-ED25519': 'ed25519', - 'NODE-ED448': 'ed448', - 'NODE-X25519': 'x25519', - 'NODE-X448': 'x448', }; const kAesKeyLengths = [128, 192, 256]; @@ -170,13 +166,10 @@ const kAlgorithms = { 'sha-512': 'SHA-512', 'hkdf': 'HKDF', 'pbkdf2': 'PBKDF2', - // Following here are Node.js specific extensions. All - // should be prefixed with 'node-' - 'node-dsa': 'NODE-DSA', - 'node-dh': 'NODE-DH', - 'node-scrypt': 'NODE-SCRYPT', - 'node-ed25519': 'NODE-ED25519', - 'node-ed448': 'NODE-ED448', + 'ed25519': 'Ed25519', + 'ed448': 'Ed448', + 'x25519': 'X25519', + 'x448': 'X448', }; const kAlgorithmsKeys = ObjectKeys(kAlgorithms); @@ -186,8 +179,7 @@ const kExportFormats = [ 'raw', 'pkcs8', 'spki', - 'jwk', - 'node.keyObject']; + 'jwk']; // These are the only hash algorithms we currently support via // the Web Crypto API. @@ -206,30 +198,33 @@ function validateMaxBufferLength(data, name) { } } -function normalizeAlgorithm(algorithm, label = 'algorithm') { +function normalizeAlgorithm(algorithm) { if (algorithm != null) { if (typeof algorithm === 'string') algorithm = { name: algorithm }; if (typeof algorithm === 'object') { const { name } = algorithm; - let hash; if (typeof name !== 'string' || !ArrayPrototypeIncludes( kAlgorithmsKeys, StringPrototypeToLowerCase(name))) { throw lazyDOMException('Unrecognized name.', 'NotSupportedError'); } - if (algorithm.hash !== undefined) { - hash = normalizeAlgorithm(algorithm.hash, 'algorithm.hash'); + let { hash } = algorithm; + if (hash !== undefined) { + hash = normalizeAlgorithm(hash); if (!ArrayPrototypeIncludes(kHashTypes, hash.name)) throw lazyDOMException('Unrecognized name.', 'NotSupportedError'); } - return { + const normalized = { ...algorithm, name: kAlgorithms[StringPrototypeToLowerCase(name)], - hash, }; + if (hash) { + normalized.hash = hash; + } + return normalized; } } throw lazyDOMException('Unrecognized name.', 'NotSupportedError'); @@ -268,7 +263,7 @@ const validateByteSource = hideStackFrames((val, name) => { val = toBuf(val); if (isAnyArrayBuffer(val) || isArrayBufferView(val)) - return; + return val; throw new ERR_INVALID_ARG_TYPE( name, @@ -283,7 +278,12 @@ const validateByteSource = hideStackFrames((val, name) => { }); function onDone(resolve, reject, err, result) { - if (err) return reject(err); + if (err) { + // TODO(@panva): add err as cause to DOMException + return reject(lazyDOMException( + 'The operation failed for an operation-specific reason', + 'OperationError')); + } resolve(result); } diff --git a/lib/internal/crypto/webcrypto.js b/lib/internal/crypto/webcrypto.js index 63dd03bd00e..df4bb072043 100644 --- a/lib/internal/crypto/webcrypto.js +++ b/lib/internal/crypto/webcrypto.js @@ -6,6 +6,7 @@ const { JSONStringify, ObjectDefineProperties, ReflectApply, + ReflectConstruct, SafeSet, SymbolToStringTag, StringPrototypeRepeat, @@ -31,6 +32,7 @@ const { TextDecoder, TextEncoder } = require('internal/encoding'); const { codes: { + ERR_ILLEGAL_CONSTRUCTOR, ERR_INVALID_ARG_TYPE, ERR_INVALID_THIS, } @@ -41,7 +43,6 @@ const { InternalCryptoKey, createSecretKey, isCryptoKey, - isKeyObject, } = require('internal/crypto/keys'); const { @@ -70,35 +71,59 @@ const { randomUUID: _randomUUID, } = require('internal/crypto/random'); -const randomUUID = () => _randomUUID(); +async function digest(algorithm, data) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); + return ReflectApply(asyncDigest, this, arguments); +} + +function randomUUID() { + if (this !== crypto) throw new ERR_INVALID_THIS('Crypto'); + return _randomUUID(); +} async function generateKey( algorithm, extractable, keyUsages) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); algorithm = normalizeAlgorithm(algorithm); validateBoolean(extractable, 'extractable'); validateArray(keyUsages, 'keyUsages'); + let result; + let resultType; switch (algorithm.name) { case 'RSASSA-PKCS1-v1_5': // Fall through case 'RSA-PSS': // Fall through case 'RSA-OAEP': - return lazyRequire('internal/crypto/rsa') + resultType = 'CryptoKeyPair'; + result = await lazyRequire('internal/crypto/rsa') .rsaKeyGenerate(algorithm, extractable, keyUsages); - case 'NODE-ED25519': + break; + case 'Ed25519': + // Fall through + case 'Ed448': // Fall through - case 'NODE-ED448': + case 'X25519': // Fall through + case 'X448': + resultType = 'CryptoKeyPair'; + result = await lazyRequire('internal/crypto/cfrg') + .cfrgGenerateKey(algorithm, extractable, keyUsages); + break; case 'ECDSA': // Fall through case 'ECDH': - return lazyRequire('internal/crypto/ec') + resultType = 'CryptoKeyPair'; + result = await lazyRequire('internal/crypto/ec') .ecGenerateKey(algorithm, extractable, keyUsages); + break; case 'HMAC': - return lazyRequire('internal/crypto/mac') + resultType = 'CryptoKey'; + result = await lazyRequire('internal/crypto/mac') .hmacGenerateKey(algorithm, extractable, keyUsages); + break; case 'AES-CTR': // Fall through case 'AES-CBC': @@ -106,23 +131,30 @@ async function generateKey( case 'AES-GCM': // Fall through case 'AES-KW': - return lazyRequire('internal/crypto/aes') + resultType = 'CryptoKey'; + result = await lazyRequire('internal/crypto/aes') .aesGenerateKey(algorithm, extractable, keyUsages); - - // Following are Node.js specific extensions. Names must be prefixed - // with the `NODE-` - case 'NODE-DSA': - return lazyRequire('internal/crypto/dsa') - .dsaGenerateKey(algorithm, extractable, keyUsages); - case 'NODE-DH': - return lazyRequire('internal/crypto/diffiehellman') - .dhGenerateKey(algorithm, extractable, keyUsages); + break; default: throw lazyDOMException('Unrecognized name.'); } + + if ( + (resultType === 'CryptoKey' && + (result.type === 'secret' || result.type === 'private') && + result.usages.length === 0) || + (resultType === 'CryptoKeyPair' && result.privateKey.usages.length === 0) + ) { + throw lazyDOMException( + 'Usages cannot be empty when creating a key.', + 'SyntaxError'); + } + + return result; } async function deriveBits(algorithm, baseKey, length) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); algorithm = normalizeAlgorithm(algorithm); if (!isCryptoKey(baseKey)) throw new ERR_INVALID_ARG_TYPE('baseKey', 'CryptoKey', baseKey); @@ -134,6 +166,10 @@ async function deriveBits(algorithm, baseKey, length) { if (baseKey.algorithm.name !== algorithm.name) throw lazyDOMException('Key algorithm mismatch', 'InvalidAccessError'); switch (algorithm.name) { + case 'X25519': + // Fall through + case 'X448': + // Fall through case 'ECDH': return lazyRequire('internal/crypto/diffiehellman') .asyncDeriveBitsECDH(algorithm, baseKey, length); @@ -143,22 +179,52 @@ async function deriveBits(algorithm, baseKey, length) { case 'PBKDF2': return lazyRequire('internal/crypto/pbkdf2') .pbkdf2DeriveBits(algorithm, baseKey, length); - case 'NODE-SCRYPT': - return lazyRequire('internal/crypto/scrypt') - .scryptDeriveBits(algorithm, baseKey, length); - case 'NODE-DH': - return lazyRequire('internal/crypto/diffiehellman') - .asyncDeriveBitsDH(algorithm, baseKey, length); } throw lazyDOMException('Unrecognized name.'); } +function getKeyLength({ name, length, hash }) { + switch (name) { + case 'AES-CTR': + case 'AES-CBC': + case 'AES-GCM': + case 'AES-KW': + if (length !== 128 && length !== 192 && length !== 256) + throw lazyDOMException('Invalid key length', 'OperationError'); + + return length; + case 'HMAC': + if (length === undefined) { + switch (hash?.name) { + case 'SHA-1': + return 160; + case 'SHA-256': + return 256; + case 'SHA-384': + return 384; + case 'SHA-512': + return 512; + } + } + + if (typeof length === 'number' && length !== 0) { + return length; + } + + throw lazyDOMException('Invalid key length', 'OperationError'); + case 'HKDF': + case 'PBKDF2': + return null; + } +} + async function deriveKey( algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); algorithm = normalizeAlgorithm(algorithm); derivedKeyAlgorithm = normalizeAlgorithm(derivedKeyAlgorithm); if (!isCryptoKey(baseKey)) @@ -176,9 +242,13 @@ async function deriveKey( validateBoolean(extractable, 'extractable'); validateArray(keyUsages, 'keyUsages'); - const { length } = derivedKeyAlgorithm; + const length = getKeyLength(derivedKeyAlgorithm); let bits; switch (algorithm.name) { + case 'X25519': + // Fall through + case 'X448': + // Fall through case 'ECDH': bits = await lazyRequire('internal/crypto/diffiehellman') .asyncDeriveBitsECDH(algorithm, baseKey, length); @@ -191,19 +261,15 @@ async function deriveKey( bits = await lazyRequire('internal/crypto/pbkdf2') .pbkdf2DeriveBits(algorithm, baseKey, length); break; - case 'NODE-SCRYPT': - bits = await lazyRequire('internal/crypto/scrypt') - .scryptDeriveBits(algorithm, baseKey, length); - break; - case 'NODE-DH': - bits = await lazyRequire('internal/crypto/diffiehellman') - .asyncDeriveBitsDH(algorithm, baseKey, length); - break; default: throw lazyDOMException('Unrecognized name.'); } - return importKey('raw', bits, derivedKeyAlgorithm, extractable, keyUsages); + return ReflectApply( + importKey, + this, + ['raw', bits, derivedKeyAlgorithm, extractable, keyUsages], + ); } async function exportKeySpki(key) { @@ -218,10 +284,6 @@ async function exportKeySpki(key) { .rsaExportKey(key, kWebCryptoKeyFormatSPKI); } break; - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - // Fall through case 'ECDSA': // Fall through case 'ECDH': @@ -230,16 +292,16 @@ async function exportKeySpki(key) { .ecExportKey(key, kWebCryptoKeyFormatSPKI); } break; - case 'NODE-DSA': - if (key.type === 'public') { - return lazyRequire('internal/crypto/dsa') - .dsaExportKey(key, kWebCryptoKeyFormatSPKI); - } - break; - case 'NODE-DH': + case 'Ed25519': + // Fall through + case 'Ed448': + // Fall through + case 'X25519': + // Fall through + case 'X448': if (key.type === 'public') { - return lazyRequire('internal/crypto/diffiehellman') - .dhExportKey(key, kWebCryptoKeyFormatSPKI); + return lazyRequire('internal/crypto/cfrg') + .cfrgExportKey(key, kWebCryptoKeyFormatSPKI); } break; } @@ -261,10 +323,6 @@ async function exportKeyPkcs8(key) { .rsaExportKey(key, kWebCryptoKeyFormatPKCS8); } break; - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - // Fall through case 'ECDSA': // Fall through case 'ECDH': @@ -273,16 +331,16 @@ async function exportKeyPkcs8(key) { .ecExportKey(key, kWebCryptoKeyFormatPKCS8); } break; - case 'NODE-DSA': - if (key.type === 'private') { - return lazyRequire('internal/crypto/dsa') - .dsaExportKey(key, kWebCryptoKeyFormatPKCS8); - } - break; - case 'NODE-DH': + case 'Ed25519': + // Fall through + case 'Ed448': + // Fall through + case 'X25519': + // Fall through + case 'X448': if (key.type === 'private') { - return lazyRequire('internal/crypto/diffiehellman') - .dhExportKey(key, kWebCryptoKeyFormatPKCS8); + return lazyRequire('internal/crypto/cfrg') + .cfrgExportKey(key, kWebCryptoKeyFormatPKCS8); } break; } @@ -294,20 +352,24 @@ async function exportKeyPkcs8(key) { async function exportKeyRaw(key) { switch (key.algorithm.name) { - case 'NODE-ED25519': + case 'ECDSA': // Fall through - case 'NODE-ED448': + case 'ECDH': if (key.type === 'public') { return lazyRequire('internal/crypto/ec') .ecExportKey(key, kWebCryptoKeyFormatRaw); } break; - case 'ECDSA': + case 'Ed25519': // Fall through - case 'ECDH': + case 'Ed448': + // Fall through + case 'X25519': + // Fall through + case 'X448': if (key.type === 'public') { - return lazyRequire('internal/crypto/ec') - .ecExportKey(key, kWebCryptoKeyFormatRaw); + return lazyRequire('internal/crypto/cfrg') + .cfrgExportKey(key, kWebCryptoKeyFormatRaw); } break; case 'AES-CTR': @@ -353,6 +415,17 @@ async function exportKeyJWK(key) { case 'ECDH': jwk.crv ||= key.algorithm.namedCurve; return jwk; + case 'X25519': + // Fall through + case 'X448': + jwk.crv ||= key.algorithm.name; + return jwk; + case 'Ed25519': + // Fall through + case 'Ed448': + jwk.crv ||= key.algorithm.name; + jwk.alg = 'EdDSA'; + return jwk; case 'AES-CTR': // Fall through case 'AES-CBC': @@ -368,15 +441,6 @@ async function exportKeyJWK(key) { key.algorithm.hash.name, normalizeHashName.kContextJwkHmac); return jwk; - case 'NODE-DSA': - jwk.alg = normalizeHashName( - key.algorithm.hash.name, - normalizeHashName.kContextJwkDsa); - return jwk; - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - return jwk; default: // Fall through } @@ -385,6 +449,7 @@ async function exportKeyJWK(key) { } async function exportKey(format, key) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); validateString(format, 'format'); validateOneOf(format, 'format', kExportFormats); if (!isCryptoKey(key)) @@ -394,7 +459,6 @@ async function exportKey(format, key) { throw lazyDOMException('key is not extractable', 'InvalidAccessException'); switch (format) { - case 'node.keyObject': return key[kKeyObject]; case 'spki': return exportKeySpki(key); case 'pkcs8': return exportKeyPkcs8(key); case 'jwk': return exportKeyJWK(key); @@ -421,15 +485,6 @@ async function importGenericSecretKey( } switch (format) { - case 'node.keyObject': { - if (!isKeyObject(keyData)) - throw new ERR_INVALID_ARG_TYPE('keyData', 'KeyObject', keyData); - - if (keyData.type === 'secret') - return new InternalCryptoKey(keyData, { name }, keyUsages, extractable); - - break; - } case 'raw': { if (hasAnyNotIn(usagesSet, ['deriveKey', 'deriveBits'])) { throw lazyDOMException( @@ -439,9 +494,6 @@ async function importGenericSecretKey( const checkLength = keyData.byteLength * 8; - if (checkLength === 0 || length === 0) - throw lazyDOMException('Zero-length key is not supported', 'DataError'); - // The Web Crypto spec allows for key lengths that are not multiples of // 8. We don't. Our check here is stricter than that defined by the spec // in that we require that algorithm.length match keyData.length * 8 if @@ -466,9 +518,10 @@ async function importKey( algorithm, extractable, keyUsages) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); validateString(format, 'format'); validateOneOf(format, 'format', kExportFormats); - if (format !== 'node.keyObject' && format !== 'jwk') + if (format !== 'jwk') keyData = getArrayBufferOrView(keyData, 'keyData'); algorithm = normalizeAlgorithm(algorithm); validateBoolean(extractable, 'extractable'); @@ -481,15 +534,20 @@ async function importKey( case 'RSA-OAEP': return lazyRequire('internal/crypto/rsa') .rsaImportKey(format, keyData, algorithm, extractable, keyUsages); - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - // Fall through case 'ECDSA': // Fall through case 'ECDH': return lazyRequire('internal/crypto/ec') .ecImportKey(format, keyData, algorithm, extractable, keyUsages); + case 'Ed25519': + // Fall through + case 'Ed448': + // Fall through + case 'X25519': + // Fall through + case 'X448': + return lazyRequire('internal/crypto/cfrg') + .cfrgImportKey(format, keyData, algorithm, extractable, keyUsages); case 'HMAC': return lazyRequire('internal/crypto/mac') .hmacImportKey(format, keyData, algorithm, extractable, keyUsages); @@ -504,8 +562,6 @@ async function importKey( .aesImportKey(algorithm, format, keyData, extractable, keyUsages); case 'HKDF': // Fall through - case 'NODE-SCRYPT': - // Fall through case 'PBKDF2': return importGenericSecretKey( algorithm, @@ -513,12 +569,6 @@ async function importKey( keyData, extractable, keyUsages); - case 'NODE-DSA': - return lazyRequire('internal/crypto/dsa') - .dsaImportKey(format, keyData, algorithm, extractable, keyUsages); - case 'NODE-DH': - return lazyRequire('internal/crypto/diffiehellman') - .dhImportKey(format, keyData, algorithm, extractable, keyUsages); } throw lazyDOMException('Unrecognized name.', 'NotSupportedError'); @@ -527,8 +577,9 @@ async function importKey( // subtle.wrapKey() is essentially a subtle.exportKey() followed // by a subtle.encrypt(). async function wrapKey(format, key, wrappingKey, algorithm) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); algorithm = normalizeAlgorithm(algorithm); - let keyData = await exportKey(format, key); + let keyData = await ReflectApply(exportKey, this, [format, key]); if (format === 'jwk') { if (keyData == null || typeof keyData !== 'object') @@ -556,11 +607,12 @@ async function unwrapKey( unwrappedKeyAlgo, extractable, keyUsages) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); wrappedKey = getArrayBufferOrView(wrappedKey, 'wrappedKey'); - + unwrapAlgo = normalizeAlgorithm(unwrapAlgo); let keyData = await cipherOrWrap( kWebCryptoCipherDecrypt, - normalizeAlgorithm(unwrapAlgo), + unwrapAlgo, unwrappingKey, wrappedKey, 'unwrapKey'); @@ -577,7 +629,11 @@ async function unwrapKey( } } - return importKey(format, keyData, unwrappedKeyAlgo, extractable, keyUsages); + return ReflectApply( + importKey, + this, + [format, keyData, unwrappedKeyAlgo, extractable, keyUsages], + ); } function signVerify(algorithm, key, data, signature) { @@ -604,30 +660,29 @@ function signVerify(algorithm, key, data, signature) { case 'RSASSA-PKCS1-v1_5': return lazyRequire('internal/crypto/rsa') .rsaSignVerify(key, data, algorithm, signature); - case 'NODE-ED25519': - // Fall through - case 'NODE-ED448': - // Fall through case 'ECDSA': return lazyRequire('internal/crypto/ec') .ecdsaSignVerify(key, data, algorithm, signature); + case 'Ed25519': + // Fall through + case 'Ed448': + // Fall through + return lazyRequire('internal/crypto/cfrg') + .eddsaSignVerify(key, data, algorithm, signature); case 'HMAC': return lazyRequire('internal/crypto/mac') .hmacSignVerify(key, data, algorithm, signature); - // The following are Node.js specific extensions. They must begin with - // the `NODE-` prefix - case 'NODE-DSA': - return lazyRequire('internal/crypto/dsa') - .dsaSignVerify(key, data, algorithm, signature); } throw lazyDOMException('Unrecognized named.', 'NotSupportedError'); } async function sign(algorithm, key, data) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); return signVerify(algorithm, key, data); } async function verify(algorithm, key, signature, data) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); return signVerify(algorithm, key, data, signature); } @@ -677,36 +732,46 @@ async function cipherOrWrap(mode, algorithm, key, data, op) { } async function encrypt(algorithm, key, data) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); return cipherOrWrap(kWebCryptoCipherEncrypt, algorithm, key, data, 'encrypt'); } async function decrypt(algorithm, key, data) { + if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto'); return cipherOrWrap(kWebCryptoCipherDecrypt, algorithm, key, data, 'decrypt'); } // The SubtleCrypto and Crypto classes are defined as part of the // Web Crypto API standard: https://www.w3.org/TR/WebCryptoAPI/ -class SubtleCrypto {} -const subtle = new SubtleCrypto(); +class SubtleCrypto { + constructor() { + throw new ERR_ILLEGAL_CONSTRUCTOR(); + } +} +const subtle = ReflectConstruct(function() {}, [], SubtleCrypto); class Crypto { + constructor() { + throw new ERR_ILLEGAL_CONSTRUCTOR(); + } + get subtle() { + if (this !== crypto) throw new ERR_INVALID_THIS('Crypto'); return subtle; } } -const crypto = new Crypto(); +const crypto = ReflectConstruct(function() {}, [], Crypto); function getRandomValues(array) { - if (!(this instanceof Crypto)) { - throw new ERR_INVALID_THIS('Crypto'); - } + if (this !== crypto) throw new ERR_INVALID_THIS('Crypto'); return ReflectApply(_getRandomValues, this, arguments); } ObjectDefineProperties( Crypto.prototype, { [SymbolToStringTag]: { + __proto__: null, enumerable: false, configurable: true, writable: false, @@ -714,18 +779,21 @@ ObjectDefineProperties( }, subtle: kEnumerableProperty, getRandomValues: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: getRandomValues, }, randomUUID: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: randomUUID, }, CryptoKey: { + __proto__: null, enumerable: true, configurable: true, writable: true, @@ -736,78 +804,91 @@ ObjectDefineProperties( ObjectDefineProperties( SubtleCrypto.prototype, { [SymbolToStringTag]: { + __proto__: null, enumerable: false, configurable: true, writable: false, value: 'SubtleCrypto', }, encrypt: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: encrypt, }, decrypt: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: decrypt, }, sign: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: sign, }, verify: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: verify, }, digest: { + __proto__: null, enumerable: true, configurable: true, writable: true, - value: asyncDigest, + value: digest, }, generateKey: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: generateKey, }, deriveKey: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: deriveKey, }, deriveBits: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: deriveBits, }, importKey: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: importKey, }, exportKey: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: exportKey, }, wrapKey: { + __proto__: null, enumerable: true, configurable: true, writable: true, value: wrapKey, }, unwrapKey: { + __proto__: null, enumerable: true, configurable: true, writable: true, diff --git a/lib/internal/crypto/x509.js b/lib/internal/crypto/x509.js index cd20f6868da..c8356dea2b2 100644 --- a/lib/internal/crypto/x509.js +++ b/lib/internal/crypto/x509.js @@ -23,6 +23,7 @@ const { const { customInspectSymbol: kInspect, + kEmptyObject, } = require('internal/util'); const { @@ -62,7 +63,7 @@ function isX509Certificate(value) { return value[kInternalState] !== undefined; } -function getFlags(options = {}) { +function getFlags(options = kEmptyObject) { validateObject(options, 'options'); const { // TODO(tniessen): change the default to 'default' diff --git a/lib/internal/debugger/inspect.js b/lib/internal/debugger/inspect.js index 7f1017886f6..e006f513f9b 100644 --- a/lib/internal/debugger/inspect.js +++ b/lib/internal/debugger/inspect.js @@ -11,13 +11,11 @@ const { FunctionPrototypeBind, Number, Promise, - PromisePrototypeCatch, PromisePrototypeThen, PromiseResolve, Proxy, - RegExpPrototypeSymbolMatch, + RegExpPrototypeExec, RegExpPrototypeSymbolSplit, - RegExpPrototypeTest, StringPrototypeEndsWith, StringPrototypeSplit, } = primordials; @@ -47,7 +45,7 @@ const debuglog = util.debuglog('inspect'); const { ERR_DEBUGGER_STARTUP_ERROR } = require('internal/errors').codes; -async function portIsFree(host, port, timeout = 9999) { +async function portIsFree(host, port, timeout = 3000) { if (port === 0) return; // Binding to a random port. const retryDelay = 150; @@ -66,7 +64,10 @@ async function portIsFree(host, port, timeout = 9999) { const error = await new Promise((resolve) => { const socket = net.connect(port, host); socket.on('error', resolve); - socket.on('connect', resolve); + socket.on('connect', () => { + socket.end(); + resolve(); + }); }); if (error?.code === 'ECONNREFUSED') { return; @@ -91,7 +92,7 @@ async function runScript(script, scriptArgs, inspectHost, inspectPort, return new Promise((resolve) => { function waitForListenHint(text) { output += text; - const debug = RegExpPrototypeSymbolMatch(debugRegex, output); + const debug = RegExpPrototypeExec(debugRegex, output); if (debug) { const host = debug[1]; const port = Number(debug[2]); @@ -117,6 +118,7 @@ function createAgentProxy(domain, client) { }; return new Proxy(agent, { + __proto__: null, get(target, name) { if (name in target) return target[name]; return function callVirtualMethod(params) { @@ -169,12 +171,17 @@ class NodeInspector { process.once('SIGTERM', exitCodeZero); process.once('SIGHUP', exitCodeZero); - PromisePrototypeCatch(PromisePrototypeThen(this.run(), async () => { - const repl = await startRepl(); - this.repl = repl; - this.repl.on('exit', exitCodeZero); - this.paused = false; - }), (error) => process.nextTick(() => { throw error; })); + (async () => { + try { + await this.run(); + const repl = await startRepl(); + this.repl = repl; + this.repl.on('exit', exitCodeZero); + this.paused = false; + } catch (error) { + process.nextTick(() => { throw error; }); + } + })(); } suspendReplWhile(fn) { @@ -183,16 +190,19 @@ class NodeInspector { } this.stdin.pause(); this.paused = true; - return PromisePrototypeCatch(PromisePrototypeThen(new Promise((resolve) => { - resolve(fn()); - }), () => { - this.paused = false; - if (this.repl) { - this.repl.resume(); - this.repl.displayPrompt(); + return (async () => { + try { + await fn(); + this.paused = false; + if (this.repl) { + this.repl.resume(); + this.repl.displayPrompt(); + } + this.stdin.resume(); + } catch (error) { + process.nextTick(() => { throw error; }); } - this.stdin.resume(); - }), (error) => process.nextTick(() => { throw error; })); + })(); } killChild() { @@ -281,8 +291,8 @@ function parseArgv(args) { let script = target; let scriptArgs = args; - const hostMatch = RegExpPrototypeSymbolMatch(/^([^:]+):(\d+)$/, target); - const portMatch = RegExpPrototypeSymbolMatch(/^--port=(\d+)$/, target); + const hostMatch = RegExpPrototypeExec(/^([^:]+):(\d+)$/, target); + const portMatch = RegExpPrototypeExec(/^--port=(\d+)$/, target); if (hostMatch) { // Connecting to remote debugger @@ -295,7 +305,7 @@ function parseArgv(args) { port = Number(portMatch[1]); script = args[0]; scriptArgs = ArrayPrototypeSlice(args, 1); - } else if (args.length === 1 && RegExpPrototypeTest(/^\d+$/, args[0]) && + } else if (args.length === 1 && RegExpPrototypeExec(/^\d+$/, args[0]) !== null && target === '-p') { // Start debugger against a given pid const pid = Number(args[0]); diff --git a/lib/internal/debugger/inspect_repl.js b/lib/internal/debugger/inspect_repl.js index 4b11023554e..965aa64b0fb 100644 --- a/lib/internal/debugger/inspect_repl.js +++ b/lib/internal/debugger/inspect_repl.js @@ -23,16 +23,14 @@ const { ObjectKeys, ObjectValues, Promise, - PromiseAll, - PromisePrototypeCatch, PromisePrototypeThen, PromiseResolve, ReflectGetOwnPropertyDescriptor, ReflectOwnKeys, - RegExpPrototypeSymbolMatch, + RegExpPrototypeExec, RegExpPrototypeSymbolReplace, - SafeArrayIterator, SafeMap, + SafePromiseAll, String, StringFromCharCode, StringPrototypeEndsWith, @@ -114,13 +112,13 @@ takeHeapSnapshot(filepath = 'node.heapsnapshot') const FUNCTION_NAME_PATTERN = /^(?:function\*? )?([^(\s]+)\(/; function extractFunctionName(description) { const fnNameMatch = - RegExpPrototypeSymbolMatch(FUNCTION_NAME_PATTERN, description); + RegExpPrototypeExec(FUNCTION_NAME_PATTERN, description); return fnNameMatch ? `: ${fnNameMatch[1]}` : ''; } const { - moduleIds: PUBLIC_BUILTINS, -} = internalBinding('native_module'); + builtinIds: PUBLIC_BUILTINS, +} = internalBinding('builtins'); const NATIVES = internalBinding('natives'); function isNativeUrl(url) { url = RegExpPrototypeSymbolReplace(/\.js$/, url, ''); @@ -171,7 +169,7 @@ function markSourceColumn(sourceText, position, useColors) { function extractErrorMessage(stack) { if (!stack) return ''; - const m = RegExpPrototypeSymbolMatch(/^\w+: ([^\n]+)/, stack); + const m = RegExpPrototypeExec(/^\w+: ([^\n]+)/, stack); return m?.[1] ?? stack; } @@ -179,96 +177,142 @@ function convertResultToError(result) { const { className, description } = result; const err = new ERR_DEBUGGER_ERROR(extractErrorMessage(description)); err.stack = description; - ObjectDefineProperty(err, 'name', { value: className }); + ObjectDefineProperty(err, 'name', { __proto__: null, value: className }); return err; } -class RemoteObject { +class PropertyPreview { constructor(attributes) { ObjectAssign(this, attributes); - if (this.type === 'number') { - this.value = - this.unserializableValue ? +this.unserializableValue : +this.value; + } + + [customInspectSymbol](depth, opts) { + switch (this.type) { + case 'string': + case 'undefined': + return utilInspect(this.value, opts); + case 'number': + case 'boolean': + return opts.stylize(this.value, this.type); + case 'object': + case 'symbol': + if (this.subtype === 'date') { + return utilInspect(new Date(this.value), opts); + } + if (this.subtype === 'array') { + return opts.stylize(this.value, 'special'); + } + return opts.stylize(this.value, this.subtype || 'special'); + default: + return this.value; } } +} + +class ObjectPreview { + constructor(attributes) { + ObjectAssign(this, attributes); + } [customInspectSymbol](depth, opts) { - function formatProperty(prop) { - switch (prop.type) { - case 'string': - case 'undefined': - return utilInspect(prop.value, opts); - - case 'number': - case 'boolean': - return opts.stylize(prop.value, prop.type); - - case 'object': - case 'symbol': - if (prop.subtype === 'date') { - return utilInspect(new Date(prop.value), opts); + switch (this.type) { + case 'object': { + switch (this.subtype) { + case 'date': + return utilInspect(new Date(this.description), opts); + case 'null': + return utilInspect(null, opts); + case 'regexp': + return opts.stylize(this.description, 'regexp'); + case 'set': { + if (!this.entries) { + return `${this.description} ${this.overflow ? '{ ... }' : '{}'}`; + } + const values = ArrayPrototypeMap(this.entries, (entry) => + utilInspect(new ObjectPreview(entry.value), opts)); + return `${this.description} { ${ArrayPrototypeJoin(values, ', ')} }`; } - if (prop.subtype === 'array') { - return opts.stylize(prop.value, 'special'); + case 'map': { + if (!this.entries) { + return `${this.description} ${this.overflow ? '{ ... }' : '{}'}`; + } + const mappings = ArrayPrototypeMap(this.entries, (entry) => { + const key = utilInspect(new ObjectPreview(entry.key), opts); + const value = utilInspect(new ObjectPreview(entry.value), opts); + return `${key} => ${value}`; + }); + return `${this.description} { ${ArrayPrototypeJoin(mappings, ', ')} }`; } - return opts.stylize(prop.value, prop.subtype || 'special'); - - default: - return prop.value; + case 'array': + case undefined: { + if (this.properties.length === 0) { + return this.subtype === 'array' ? '[]' : '{}'; + } + const props = ArrayPrototypeMap(this.properties, (prop, idx) => { + const value = utilInspect(new PropertyPreview(prop)); + if (prop.name === `${idx}`) return value; + return `${prop.name}: ${value}`; + }); + if (this.overflow) { + ArrayPrototypePush(props, '...'); + } + const singleLine = ArrayPrototypeJoin(props, ', '); + const propString = singleLine.length > 60 ? ArrayPrototypeJoin(props, ',\n ') : singleLine; + return this.subtype === 'array' ? `[ ${propString} ]` : `{ ${propString} }`; + } + default: + return this.description; + } } + default: + return this.description; } + } +} + +class RemoteObject { + constructor(attributes) { + ObjectAssign(this, attributes); + if (this.type === 'number') { + this.value = + this.unserializableValue ? +this.unserializableValue : +this.value; + } + } + + [customInspectSymbol](depth, opts) { switch (this.type) { case 'boolean': case 'number': case 'string': case 'undefined': return utilInspect(this.value, opts); - case 'symbol': return opts.stylize(this.description, 'special'); - case 'function': { const fnName = extractFunctionName(this.description); const formatted = `[${this.className}${fnName}]`; return opts.stylize(formatted, 'special'); } - case 'object': switch (this.subtype) { case 'date': return utilInspect(new Date(this.description), opts); - case 'null': return utilInspect(null, opts); - case 'regexp': return opts.stylize(this.description, 'regexp'); - + case 'map': + case 'set': { + const preview = utilInspect(new ObjectPreview(this.preview), opts); + return `${this.description} ${preview}`; + } default: break; } if (this.preview) { - const props = ArrayPrototypeMap( - this.preview.properties, - (prop, idx) => { - const value = formatProperty(prop); - if (prop.name === `${idx}`) return value; - return `${prop.name}: ${value}`; - }); - if (this.preview.overflow) { - ArrayPrototypePush(props, '...'); - } - const singleLine = ArrayPrototypeJoin(props, ', '); - const propString = - singleLine.length > 60 ? - ArrayPrototypeJoin(props, ',\n ') : - singleLine; - - return this.subtype === 'array' ? - `[ ${propString} ]` : `{ ${propString} }`; + return utilInspect(new ObjectPreview(this.preview), opts); } return this.description; - default: return this.description; } @@ -473,22 +517,19 @@ function createRepl(inspector) { } loadScopes() { - return PromiseAll( - new SafeArrayIterator(ArrayPrototypeMap( - ArrayPrototypeFilter( - this.scopeChain, - (scope) => scope.type !== 'global' - ), - async (scope) => { - const { objectId } = scope.object; - const { result } = await Runtime.getProperties({ - objectId, - generatePreview: true, - }); - return new ScopeSnapshot(scope, result); - }) - ) - ); + return SafePromiseAll( + ArrayPrototypeFilter( + this.scopeChain, + (scope) => scope.type !== 'global' + ), + async (scope) => { + const { objectId } = scope.object; + const { result } = await Runtime.getProperties({ + objectId, + generatePreview: true, + }); + return new ScopeSnapshot(scope, result); + }); } list(delta = 5) { @@ -532,7 +573,7 @@ function createRepl(inspector) { function prepareControlCode(input) { if (input === '\n') return lastCommand; // Add parentheses: exec process.title => exec("process.title"); - const match = RegExpPrototypeSymbolMatch(/^\s*(?:exec|p)\s+([^\n]*)/, input); + const match = RegExpPrototypeExec(/^\s*(?:exec|p)\s+([^\n]*)/, input); if (match) { lastCommand = `exec(${JSONStringify(match[1])})`; } else { @@ -611,12 +652,11 @@ function createRepl(inspector) { } const inspectValue = (expr) => - PromisePrototypeCatch(evalInCurrentContext(expr), - (error) => `<${error.message}>`); + PromisePrototypeThen(evalInCurrentContext(expr), undefined, + (error) => `<${error.message}>`); const lastIndex = watchedExpressions.length - 1; - const values = await PromiseAll(new SafeArrayIterator( - ArrayPrototypeMap(watchedExpressions, inspectValue))); + const values = await SafePromiseAll(watchedExpressions, inspectValue); const lines = ArrayPrototypeMap(watchedExpressions, (expr, idx) => { const prefix = `${leftPad(idx, ' ', lastIndex)}: ${expr} =`; const value = inspect(values[idx]); @@ -635,6 +675,9 @@ function createRepl(inspector) { // List source code function list(delta = 5) { + if (!selectedFrame) { + throw new ERR_DEBUGGER_ERROR('Requires execution to be paused'); + } return selectedFrame.list(delta).then(null, (error) => { print("You can't list source code right now"); throw error; @@ -817,7 +860,7 @@ function createRepl(inspector) { location.lineNumber + 1)); if (!newBreakpoints.length) return PromiseResolve(); return PromisePrototypeThen( - PromiseAll(new SafeArrayIterator(newBreakpoints)), + SafePromiseAll(newBreakpoints), (results) => { print(`${results.length} breakpoints restored.`); }); @@ -853,8 +896,7 @@ function createRepl(inspector) { inspector.suspendReplWhile(() => PromisePrototypeThen( - PromiseAll(new SafeArrayIterator( - [formatWatchers(true), selectedFrame.list(2)])), + SafePromiseAll([formatWatchers(true), selectedFrame.list(2)]), ({ 0: watcherList, 1: context }) => { const breakContext = watcherList ? `${watcherList}\n${inspect(context)}` : @@ -890,6 +932,7 @@ function createRepl(inspector) { function initializeContext(context) { ArrayPrototypeForEach(inspector.domainNames, (domain) => { ObjectDefineProperty(context, domain, { + __proto__: null, value: inspector[domain], enumerable: true, configurable: true, diff --git a/lib/internal/dns/promises.js b/lib/internal/dns/promises.js index c6f8acba745..1dcf78d92ea 100644 --- a/lib/internal/dns/promises.js +++ b/lib/internal/dns/promises.js @@ -5,6 +5,7 @@ const { ObjectDefineProperty, Promise, ReflectApply, + Symbol, } = primordials; const { @@ -15,7 +16,36 @@ const { validateTries, emitInvalidHostnameWarning, getDefaultVerbatim, + errorCodes: dnsErrorCodes, + setDefaultResultOrder, + setDefaultResolver, } = require('internal/dns/utils'); +const { + NODATA, + FORMERR, + SERVFAIL, + NOTFOUND, + NOTIMP, + REFUSED, + BADQUERY, + BADNAME, + BADFAMILY, + BADRESP, + CONNREFUSED, + TIMEOUT, + EOF, + FILE, + NOMEM, + DESTRUCTION, + BADSTR, + BADFLAGS, + NONAME, + BADHINTS, + NOTINITIALIZED, + LOADIPHLPAPI, + ADDRGETNETWORKPARAMS, + CANCELLED, +} = dnsErrorCodes; const { codes, dnsException } = require('internal/errors'); const { toASCII } = require('internal/idna'); const { isIP } = require('internal/net'); @@ -37,6 +67,16 @@ const { validateOneOf, } = require('internal/validators'); +const kPerfHooksDnsLookupContext = Symbol('kPerfHooksDnsLookupContext'); +const kPerfHooksDnsLookupServiceContext = Symbol('kPerfHooksDnsLookupServiceContext'); +const kPerfHooksDnsLookupResolveContext = Symbol('kPerfHooksDnsLookupResolveContext'); + +const { + hasObserver, + startPerf, + stopPerf, +} = require('internal/perf/observe'); + function onlookup(err, addresses) { if (err) { this.reject(dnsException(err, 'getaddrinfo', this.hostname)); @@ -45,6 +85,9 @@ function onlookup(err, addresses) { const family = this.family || isIP(addresses[0]); this.resolve({ address: addresses[0], family }); + if (this[kPerfHooksDnsLookupContext] && hasObserver('dns')) { + stopPerf(this, kPerfHooksDnsLookupContext, { detail: { addresses } }); + } } function onlookupall(err, addresses) { @@ -55,7 +98,7 @@ function onlookupall(err, addresses) { const family = this.family; - for (var i = 0; i < addresses.length; i++) { + for (let i = 0; i < addresses.length; i++) { const address = addresses[i]; addresses[i] = { @@ -65,6 +108,9 @@ function onlookupall(err, addresses) { } this.resolve(addresses); + if (this[kPerfHooksDnsLookupContext] && hasObserver('dns')) { + stopPerf(this, kPerfHooksDnsLookupContext, { detail: { addresses } }); + } } function createLookupPromise(family, hostname, all, hints, verbatim) { @@ -95,15 +141,23 @@ function createLookupPromise(family, hostname, all, hints, verbatim) { if (err) { reject(dnsException(err, 'getaddrinfo', hostname)); + } else if (hasObserver('dns')) { + const detail = { + hostname, + family, + hints, + verbatim, + }; + startPerf(req, kPerfHooksDnsLookupContext, { type: 'dns', name: 'lookup', detail }); } }); } function lookup(hostname, options) { - var hints = 0; - var family = -1; - var all = false; - var verbatim = getDefaultVerbatim(); + let hints = 0; + let family = -1; + let all = false; + let verbatim = getDefaultVerbatim(); // Parse arguments if (hostname) { @@ -136,6 +190,9 @@ function onlookupservice(err, hostname, service) { } this.resolve({ hostname, service }); + if (this[kPerfHooksDnsLookupServiceContext] && hasObserver('dns')) { + stopPerf(this, kPerfHooksDnsLookupServiceContext, { detail: { hostname, service } }); + } } function createLookupServicePromise(hostname, port) { @@ -152,6 +209,16 @@ function createLookupServicePromise(hostname, port) { if (err) reject(dnsException(err, 'getnameinfo', hostname)); + else if (hasObserver('dns')) { + startPerf(req, kPerfHooksDnsLookupServiceContext, { + type: 'dns', + name: 'lookupService', + detail: { + host: hostname, + port + } + }); + } }); } @@ -179,6 +246,9 @@ function onresolve(err, result, ttls) { result, (address, index) => ({ address, ttl: ttls[index] })); this.resolve(result); + if (this[kPerfHooksDnsLookupResolveContext] && hasObserver('dns')) { + stopPerf(this, kPerfHooksDnsLookupResolveContext, { detail: { result } }); + } } function createResolverPromise(resolver, bindingName, hostname, ttl) { @@ -196,6 +266,16 @@ function createResolverPromise(resolver, bindingName, hostname, ttl) { if (err) reject(dnsException(err, bindingName, hostname)); + else if (hasObserver('dns')) { + startPerf(req, kPerfHooksDnsLookupResolveContext, { + type: 'dns', + name: bindingName, + detail: { + host: hostname, + ttl + } + }); + } }); } @@ -207,7 +287,7 @@ function resolver(bindingName) { return createResolverPromise(this, bindingName, name, ttl); } - ObjectDefineProperty(query, 'name', { value: bindingName }); + ObjectDefineProperty(query, 'name', { __proto__: null, value: bindingName }); return query; } @@ -241,7 +321,7 @@ Resolver.prototype.resolveNaptr = resolveMap.NAPTR = resolver('queryNaptr'); Resolver.prototype.resolveSoa = resolveMap.SOA = resolver('querySoa'); Resolver.prototype.reverse = resolver('getHostByAddr'); Resolver.prototype.resolve = function resolve(hostname, rrtype) { - var resolver; + let resolver; if (rrtype !== undefined) { validateString(rrtype, 'rrtype'); @@ -257,6 +337,45 @@ Resolver.prototype.resolve = function resolve(hostname, rrtype) { return ReflectApply(resolver, this, [hostname]); }; +function defaultResolverSetServers(servers) { + const resolver = new Resolver(); -module.exports = { lookup, lookupService, Resolver }; + resolver.setServers(servers); + setDefaultResolver(resolver); + bindDefaultResolver(module.exports, Resolver.prototype); +} + +module.exports = { + lookup, + lookupService, + Resolver, + setDefaultResultOrder, + setServers: defaultResolverSetServers, + + // ERROR CODES + NODATA, + FORMERR, + SERVFAIL, + NOTFOUND, + NOTIMP, + REFUSED, + BADQUERY, + BADNAME, + BADFAMILY, + BADRESP, + CONNREFUSED, + TIMEOUT, + EOF, + FILE, + NOMEM, + DESTRUCTION, + BADSTR, + BADFLAGS, + NONAME, + BADHINTS, + NOTINITIALIZED, + LOADIPHLPAPI, + ADDRGETNETWORKPARAMS, + CANCELLED, +}; bindDefaultResolver(module.exports, Resolver.prototype); diff --git a/lib/internal/dns/utils.js b/lib/internal/dns/utils.js index fa7e19c7847..923fe302aca 100644 --- a/lib/internal/dns/utils.js +++ b/lib/internal/dns/utils.js @@ -7,8 +7,8 @@ const { ArrayPrototypePush, FunctionPrototypeBind, NumberParseInt, - StringPrototypeMatch, - StringPrototypeReplace, + RegExpPrototypeExec, + RegExpPrototypeSymbolReplace, } = primordials; const errors = require('internal/errors'); @@ -38,13 +38,13 @@ const { function validateTimeout(options) { const { timeout = -1 } = { ...options }; - validateInt32(timeout, 'options.timeout', -1, 2 ** 31 - 1); + validateInt32(timeout, 'options.timeout', -1); return timeout; } function validateTries(options) { const { tries = 4 } = { ...options }; - validateInt32(tries, 'options.tries', 1, 2 ** 31 - 1); + validateInt32(tries, 'options.tries', 1); return tries; } @@ -61,7 +61,7 @@ class Resolver { } getServers() { - return ArrayPrototypeMap(this._handle.getServers(), (val) => { + return ArrayPrototypeMap(this._handle.getServers() || [], (val) => { if (!val[1] || val[1] === IANA_DNS_PORT) return val[0]; @@ -76,7 +76,7 @@ class Resolver { // Cache the original servers because in the event of an error while // setting the servers, c-ares won't have any servers available for // resolution. - const orig = this._handle.getServers(); + const orig = this._handle.getServers() || []; const newSet = []; ArrayPrototypeForEach(servers, (serv, index) => { @@ -86,7 +86,7 @@ class Resolver { if (ipVersion !== 0) return ArrayPrototypePush(newSet, [ipVersion, serv, IANA_DNS_PORT]); - const match = StringPrototypeMatch(serv, IPv6RE); + const match = RegExpPrototypeExec(IPv6RE, serv); // Check for an IPv6 in brackets. if (match) { @@ -94,13 +94,13 @@ class Resolver { if (ipVersion !== 0) { const port = NumberParseInt( - StringPrototypeReplace(serv, addrSplitRE, '$2')) || IANA_DNS_PORT; + RegExpPrototypeSymbolReplace(addrSplitRE, serv, '$2')) || IANA_DNS_PORT; return ArrayPrototypePush(newSet, [ipVersion, match[1], port]); } } // addr::port - const addrSplitMatch = StringPrototypeMatch(serv, addrSplitRE); + const addrSplitMatch = RegExpPrototypeExec(addrSplitRE, serv); if (addrSplitMatch) { const hostIP = addrSplitMatch[1]; @@ -207,6 +207,34 @@ function setDefaultResultOrder(value) { dnsOrder = value; } +// ERROR CODES +const errorCodes = { + NODATA: 'ENODATA', + FORMERR: 'EFORMERR', + SERVFAIL: 'ESERVFAIL', + NOTFOUND: 'ENOTFOUND', + NOTIMP: 'ENOTIMP', + REFUSED: 'EREFUSED', + BADQUERY: 'EBADQUERY', + BADNAME: 'EBADNAME', + BADFAMILY: 'EBADFAMILY', + BADRESP: 'EBADRESP', + CONNREFUSED: 'ECONNREFUSED', + TIMEOUT: 'ETIMEOUT', + EOF: 'EOF', + FILE: 'EFILE', + NOMEM: 'ENOMEM', + DESTRUCTION: 'EDESTRUCTION', + BADSTR: 'EBADSTR', + BADFLAGS: 'EBADFLAGS', + NONAME: 'ENONAME', + BADHINTS: 'EBADHINTS', + NOTINITIALIZED: 'ENOTINITIALIZED', + LOADIPHLPAPI: 'ELOADIPHLPAPI', + ADDRGETNETWORKPARAMS: 'EADDRGETNETWORKPARAMS', + CANCELLED: 'ECANCELLED', +}; + module.exports = { bindDefaultResolver, getDefaultResolver, @@ -218,4 +246,5 @@ module.exports = { emitInvalidHostnameWarning, getDefaultVerbatim, setDefaultResultOrder, + errorCodes, }; diff --git a/lib/internal/encoding.js b/lib/internal/encoding.js index def0e9223b8..f9fa43228d5 100644 --- a/lib/internal/encoding.js +++ b/lib/internal/encoding.js @@ -7,6 +7,8 @@ const { ObjectCreate, ObjectDefineProperties, ObjectGetOwnPropertyDescriptors, + ObjectSetPrototypeOf, + ObjectValues, SafeMap, StringPrototypeSlice, Symbol, @@ -31,6 +33,7 @@ const kEncoder = Symbol('encoder'); const { getConstructorOf, customInspectSymbol: inspect, + kEmptyObject, kEnumerableProperty, } = require('internal/util'); @@ -362,7 +365,7 @@ ObjectDefineProperties( 'encode': kEnumerableProperty, 'encodeInto': kEnumerableProperty, 'encoding': kEnumerableProperty, - [SymbolToStringTag]: { configurable: true, value: 'TextEncoder' }, + [SymbolToStringTag]: { __proto__: null, configurable: true, value: 'TextEncoder' }, }); const TextDecoder = @@ -377,7 +380,7 @@ function makeTextDecoderICU() { } = internalBinding('icu'); class TextDecoder { - constructor(encoding = 'utf-8', options = {}) { + constructor(encoding = 'utf-8', options = kEmptyObject) { encoding = `${encoding}`; validateObject(options, 'options', { nullable: true, @@ -406,7 +409,7 @@ function makeTextDecoderICU() { } - decode(input = empty, options = {}) { + decode(input = empty, options = kEmptyObject) { validateDecoder(this); if (isAnyArrayBuffer(input)) { input = lazyBuffer().from(input); @@ -451,7 +454,7 @@ function makeTextDecoderJS() { } class TextDecoder { - constructor(encoding = 'utf-8', options = {}) { + constructor(encoding = 'utf-8', options = kEmptyObject) { encoding = `${encoding}`; validateObject(options, 'options', { nullable: true, @@ -479,7 +482,7 @@ function makeTextDecoderJS() { this[kBOMSeen] = false; } - decode(input = empty, options = {}) { + decode(input = empty, options = kEmptyObject) { validateDecoder(this); if (isAnyArrayBuffer(input)) { input = lazyBuffer().from(input); @@ -530,49 +533,54 @@ function makeTextDecoderJS() { } // Mix in some shared properties. -ObjectDefineProperties( - TextDecoder.prototype, - ObjectGetOwnPropertyDescriptors({ - get encoding() { - validateDecoder(this); - return this[kEncoding]; - }, - - get fatal() { - validateDecoder(this); - return (this[kFlags] & CONVERTER_FLAGS_FATAL) === CONVERTER_FLAGS_FATAL; - }, - - get ignoreBOM() { - validateDecoder(this); - return (this[kFlags] & CONVERTER_FLAGS_IGNORE_BOM) === +const sharedProperties = ObjectGetOwnPropertyDescriptors({ + get encoding() { + validateDecoder(this); + return this[kEncoding]; + }, + + get fatal() { + validateDecoder(this); + return (this[kFlags] & CONVERTER_FLAGS_FATAL) === CONVERTER_FLAGS_FATAL; + }, + + get ignoreBOM() { + validateDecoder(this); + return (this[kFlags] & CONVERTER_FLAGS_IGNORE_BOM) === CONVERTER_FLAGS_IGNORE_BOM; - }, + }, - [inspect](depth, opts) { - validateDecoder(this); - if (typeof depth === 'number' && depth < 0) - return this; - const constructor = getConstructorOf(this) || TextDecoder; - const obj = ObjectCreate({ constructor }); - obj.encoding = this.encoding; - obj.fatal = this.fatal; - obj.ignoreBOM = this.ignoreBOM; - if (opts.showHidden) { - obj[kFlags] = this[kFlags]; - obj[kHandle] = this[kHandle]; - } - // Lazy to avoid circular dependency - const { inspect } = require('internal/util/inspect'); - return `${constructor.name} ${inspect(obj)}`; + [inspect](depth, opts) { + validateDecoder(this); + if (typeof depth === 'number' && depth < 0) + return this; + const constructor = getConstructorOf(this) || TextDecoder; + const obj = ObjectCreate({ constructor }); + obj.encoding = this.encoding; + obj.fatal = this.fatal; + obj.ignoreBOM = this.ignoreBOM; + if (opts.showHidden) { + obj[kFlags] = this[kFlags]; + obj[kHandle] = this[kHandle]; } - }) -); + // Lazy to avoid circular dependency + const { inspect } = require('internal/util/inspect'); + return `${constructor.name} ${inspect(obj)}`; + } +}); +const propertiesValues = ObjectValues(sharedProperties); +for (let i = 0; i < propertiesValues.length; i++) { + // We want to use null-prototype objects to not rely on globally mutable + // %Object.prototype%. + ObjectSetPrototypeOf(propertiesValues[i], null); +} +sharedProperties[inspect].enumerable = false; ObjectDefineProperties(TextDecoder.prototype, { decode: kEnumerableProperty, - [inspect]: { enumerable: false }, + ...sharedProperties, [SymbolToStringTag]: { + __proto__: null, configurable: true, value: 'TextDecoder' } diff --git a/lib/internal/error_serdes.js b/lib/internal/error_serdes.js index c364820f60b..68576c1c24d 100644 --- a/lib/internal/error_serdes.js +++ b/lib/internal/error_serdes.js @@ -70,6 +70,7 @@ function GetConstructors(object) { const desc = ObjectGetOwnPropertyDescriptor(current, 'constructor'); if (desc && desc.value) { ObjectDefineProperty(constructors, constructors.length, { + __proto__: null, value: desc.value, enumerable: true }); } @@ -130,6 +131,7 @@ function deserializeError(error) { const { constructor, properties } = deserialize(error.subarray(1)); const ctor = errors[constructor]; ObjectDefineProperty(properties, SymbolToStringTag, { + __proto__: null, value: { value: 'Error', configurable: true }, enumerable: true }); diff --git a/lib/internal/errors.js b/lib/internal/errors.js index 04a752ea652..a75e7ccd056 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -42,14 +42,13 @@ const { ObjectPrototypeHasOwnProperty, RangeError, ReflectApply, - RegExpPrototypeTest, + RegExpPrototypeExec, SafeArrayIterator, SafeMap, SafeWeakMap, String, StringPrototypeEndsWith, StringPrototypeIncludes, - StringPrototypeMatch, StringPrototypeSlice, StringPrototypeSplit, StringPrototypeStartsWith, @@ -175,24 +174,19 @@ let assert; let internalUtil = null; function lazyInternalUtil() { - if (!internalUtil) { - internalUtil = require('internal/util'); - } + internalUtil ??= require('internal/util'); return internalUtil; } let internalUtilInspect = null; function lazyInternalUtilInspect() { - if (!internalUtilInspect) { - internalUtilInspect = require('internal/util/inspect'); - } + internalUtilInspect ??= require('internal/util/inspect'); return internalUtilInspect; } let buffer; function lazyBuffer() { - if (buffer === undefined) - buffer = require('buffer').Buffer; + buffer ??= require('buffer').Buffer; return buffer; } @@ -207,6 +201,16 @@ function isErrorStackTraceLimitWritable() { desc.set !== undefined; } +function inspectWithNoCustomRetry(obj, options) { + const utilInspect = lazyInternalUtilInspect(); + + try { + return utilInspect.inspect(obj, options); + } catch { + return utilInspect.inspect(obj, { ...options, customInspect: false }); + } +} + // A specialized Error that includes an additional info property with // additional information about the error condition. // It has the properties present in a UVException but with a custom error @@ -237,30 +241,35 @@ class SystemError extends Error { ObjectDefineProperties(this, { [kIsNodeError]: { + __proto__: null, value: true, enumerable: false, writable: false, configurable: true, }, name: { + __proto__: null, value: 'SystemError', enumerable: false, writable: true, configurable: true, }, message: { + __proto__: null, value: message, enumerable: false, writable: true, configurable: true, }, info: { + __proto__: null, value: context, enumerable: true, configurable: true, writable: false, }, errno: { + __proto__: null, get() { return context.errno; }, @@ -271,6 +280,7 @@ class SystemError extends Error { configurable: true, }, syscall: { + __proto__: null, get() { return context.syscall; }, @@ -289,6 +299,7 @@ class SystemError extends Error { // `.toString()` and `Buffer.from()` operations and set the value on the // context as the user did. ObjectDefineProperty(this, 'path', { + __proto__: null, get() { return context.path != null ? context.path.toString() : context.path; @@ -304,6 +315,7 @@ class SystemError extends Error { if (context.dest !== undefined) { ObjectDefineProperty(this, 'dest', { + __proto__: null, get() { return context.dest != null ? context.dest.toString() : context.dest; @@ -349,18 +361,21 @@ function makeNodeErrorWithCode(Base, key) { const message = getMessage(key, args, error); ObjectDefineProperties(error, { [kIsNodeError]: { + __proto__: null, value: true, enumerable: false, writable: false, configurable: true, }, message: { + __proto__: null, value: message, enumerable: false, writable: true, configurable: true, }, toString: { + __proto__: null, value() { return `${this.name} [${key}]: ${this.message}`; }, @@ -377,14 +392,15 @@ function makeNodeErrorWithCode(Base, key) { /** * This function removes unnecessary frames from Node.js core errors. - * @template {(...args: any[]) => any} T - * @type {(fn: T) => T} + * @template {(...args: unknown[]) => unknown} T + * @param {T} fn + * @returns {T} */ function hideStackFrames(fn) { // We rename the functions that will be hidden to cut off the stacktrace // at the outermost one const hidden = nodeInternalPrefix + fn.name; - ObjectDefineProperty(fn, 'name', { value: hidden }); + ObjectDefineProperty(fn, 'name', { __proto__: null, value: hidden }); return fn; } @@ -411,7 +427,7 @@ function E(sym, val, def, ...otherClasses) { function getMessage(key, args, self) { const msg = messages.get(key); - if (assert === undefined) assert = require('internal/assert'); + assert ??= require('internal/assert'); if (typeof msg === 'function') { assert( @@ -422,8 +438,9 @@ function getMessage(key, args, self) { return ReflectApply(msg, self, args); } - const expectedLength = - (StringPrototypeMatch(msg, /%[dfijoOs]/g) || []).length; + const regex = /%[dfijoOs]/g; + let expectedLength = 0; + while (RegExpPrototypeExec(regex, msg) !== null) expectedLength++; assert( expectedLength === args.length, `Code: ${key}; The provided arguments length (${args.length}) does not ` + @@ -439,9 +456,7 @@ function getMessage(key, args, self) { let uvBinding; function lazyUv() { - if (!uvBinding) { - uvBinding = internalBinding('uv'); - } + uvBinding ??= internalBinding('uv'); return uvBinding; } @@ -449,9 +464,7 @@ const uvUnmappedError = ['UNKNOWN', 'unknown error']; function uvErrmapGet(name) { uvBinding = lazyUv(); - if (!uvBinding.errmap) { - uvBinding.errmap = uvBinding.getErrorMap(); - } + uvBinding.errmap ??= uvBinding.getErrorMap(); return MapPrototypeGet(uvBinding.errmap, name); } @@ -578,7 +591,7 @@ const errnoException = hideStackFrames( // getSystemErrorName(err) to guard against invalid arguments from users. // This can be replaced with [ code ] = errmap.get(err) when this method // is no longer exposed to user land. - if (util === undefined) util = require('util'); + util ??= require('util'); const code = util.getSystemErrorName(err); const message = original ? `${syscall} ${code} ${original}` : `${syscall} ${code}`; @@ -612,7 +625,7 @@ const exceptionWithHostPort = hideStackFrames( // getSystemErrorName(err) to guard against invalid arguments from users. // This can be replaced with [ code ] = errmap.get(err) when this method // is no longer exposed to user land. - if (util === undefined) util = require('util'); + util ??= require('util'); const code = util.getSystemErrorName(err); let details = ''; if (port && port > 0) { @@ -822,8 +835,11 @@ function hideInternalStackFrames(error) { // to make usage of the error in userland and readable-stream easier. // It is a regular error with `.code` and `.name`. class AbortError extends Error { - constructor() { - super('The operation was aborted'); + constructor(message = 'The operation was aborted', options = undefined) { + if (options !== undefined && typeof options !== 'object') { + throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options); + } + super(message, options); this.code = 'ABORT_ERR'; this.name = 'AbortError'; } @@ -843,6 +859,31 @@ const genericNodeError = hideStackFrames(function genericNodeError(message, erro return err; }); +/** + * Determine the specific type of a value for type-mismatch errors. + * @param {*} value + * @returns {string} + */ +function determineSpecificType(value) { + if (value == null) { + return '' + value; + } + if (typeof value === 'function' && value.name) { + return `function ${value.name}`; + } + if (typeof value === 'object') { + if (value.constructor?.name) { + return `an instance of ${value.constructor.name}`; + } + return `${lazyInternalUtilInspect().inspect(value, { depth: -1 })}`; + } + let inspected = lazyInternalUtilInspect() + .inspect(value, { colors: false }); + if (inspected.length > 28) { inspected = `${StringPrototypeSlice(inspected, 0, 25)}...`; } + + return `type ${typeof value} (${inspected})`; +} + module.exports = { AbortError, aggregateTwoErrors, @@ -851,6 +892,7 @@ module.exports = { connResetException, dnsException, // This is exported only to facilitate testing. + determineSpecificType, E, errnoException, exceptionWithHostPort, @@ -859,6 +901,7 @@ module.exports = { getMessage, hideInternalStackFrames, hideStackFrames, + inspectWithNoCustomRetry, isErrorStackTraceLimitWritable, isStackOverflowError, kEnhanceStackBeforeInspector, @@ -962,6 +1005,8 @@ E('ERR_DOMAIN_CANNOT_SET_UNCAUGHT_EXCEPTION_CAPTURE', 'The `domain` module is in use, which is mutually exclusive with calling ' + 'process.setUncaughtExceptionCaptureCallback()', Error); +E('ERR_DUPLICATE_STARTUP_SNAPSHOT_MAIN_FUNCTION', + 'Deserialize main function is already configured.', Error); E('ERR_ENCODING_INVALID_ENCODED_DATA', function(encoding, ret) { this.errno = ret; return `The encoded data was not valid for encoding ${encoding}`; @@ -990,7 +1035,7 @@ E('ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY', 'Cannot overwrite symlink in subdirectory of self', SystemError); E('ERR_FS_CP_UNKNOWN', 'Cannot copy an unknown file type', SystemError); E('ERR_FS_EISDIR', 'Path is a directory', SystemError); -E('ERR_FS_FILE_TOO_LARGE', 'File size (%s) is greater than 2 GB', RangeError); +E('ERR_FS_FILE_TOO_LARGE', 'File size (%s) is greater than 2 GiB', RangeError); E('ERR_FS_INVALID_SYMLINK_TYPE', 'Symlink type must be one of "dir", "file", or "junction". Received "%s"', Error); // Switch to TypeError. The current implementation does not seem right @@ -1089,6 +1134,8 @@ E('ERR_HTTP2_TRAILERS_NOT_READY', 'Trailing headers cannot be sent until after the wantTrailers event is ' + 'emitted', Error); E('ERR_HTTP2_UNSUPPORTED_PROTOCOL', 'protocol "%s" is unsupported.', Error); +E('ERR_HTTP_CONTENT_LENGTH_MISMATCH', + 'Response body\'s content-length of %s byte(s) does not match the content-length of %s byte(s) set in header', Error); E('ERR_HTTP_HEADERS_SENT', 'Cannot %s headers after they are sent to the client', Error); E('ERR_HTTP_INVALID_HEADER_VALUE', @@ -1159,7 +1206,7 @@ E('ERR_INVALID_ARG_TYPE', 'All expected entries have to be of type string'); if (ArrayPrototypeIncludes(kTypes, value)) { ArrayPrototypePush(types, StringPrototypeToLowerCase(value)); - } else if (RegExpPrototypeTest(classRegExp, value)) { + } else if (RegExpPrototypeExec(classRegExp, value) !== null) { ArrayPrototypePush(instances, value); } else { assert(value !== 'object', @@ -1219,25 +1266,8 @@ E('ERR_INVALID_ARG_TYPE', } } - if (actual == null) { - msg += `. Received ${actual}`; - } else if (typeof actual === 'function' && actual.name) { - msg += `. Received function ${actual.name}`; - } else if (typeof actual === 'object') { - if (actual.constructor && actual.constructor.name) { - msg += `. Received an instance of ${actual.constructor.name}`; - } else { - const inspected = lazyInternalUtilInspect() - .inspect(actual, { depth: -1 }); - msg += `. Received ${inspected}`; - } - } else { - let inspected = lazyInternalUtilInspect() - .inspect(actual, { colors: false }); - if (inspected.length > 25) - inspected = `${StringPrototypeSlice(inspected, 0, 25)}...`; - msg += `. Received type ${typeof actual} (${inspected})`; - } + msg += `. Received ${determineSpecificType(actual)}`; + return msg; }, TypeError); E('ERR_INVALID_ARG_VALUE', (name, value, reason = 'is invalid') => { @@ -1310,7 +1340,7 @@ E('ERR_INVALID_RETURN_PROPERTY', (input, name, prop, value) => { }, TypeError); E('ERR_INVALID_RETURN_PROPERTY_VALUE', (input, name, prop, value) => { let type; - if (value && value.constructor && value.constructor.name) { + if (value?.constructor?.name) { type = `instance of ${value.constructor.name}`; } else { type = `type ${typeof value}`; @@ -1319,12 +1349,8 @@ E('ERR_INVALID_RETURN_PROPERTY_VALUE', (input, name, prop, value) => { ` "${name}" function but got ${type}.`; }, TypeError); E('ERR_INVALID_RETURN_VALUE', (input, name, value) => { - let type; - if (value && value.constructor && value.constructor.name) { - type = `instance of ${value.constructor.name}`; - } else { - type = `type ${typeof value}`; - } + const type = determineSpecificType(value); + return `Expected ${input} to be returned from the "${name}"` + ` function but got ${type}.`; }, TypeError, RangeError); @@ -1356,6 +1382,13 @@ E('ERR_IPC_CHANNEL_CLOSED', 'Channel closed', Error); E('ERR_IPC_DISCONNECTED', 'IPC channel is already disconnected', Error); E('ERR_IPC_ONE_PIPE', 'Child process can have only one IPC pipe', Error); E('ERR_IPC_SYNC_FORK', 'IPC cannot be used with synchronous forks', Error); +E( + 'ERR_LOADER_CHAIN_INCOMPLETE', + '"%s" did not call the next hook in its chain and did not' + + ' explicitly signal a short circuit. If this is intentional, include' + + ' `shortCircuit: true` in the hook\'s return.', + Error +); E('ERR_MANIFEST_ASSERT_INTEGRITY', (moduleURL, realIntegrities) => { let msg = `The content of "${ @@ -1435,6 +1468,8 @@ E('ERR_NETWORK_IMPORT_BAD_RESPONSE', "import '%s' received a bad response: %s", Error); E('ERR_NETWORK_IMPORT_DISALLOWED', "import of '%s' by %s is not supported: %s", Error); +E('ERR_NOT_BUILDING_SNAPSHOT', + 'Operation cannot be invoked when not building startup snapshot', Error); E('ERR_NO_CRYPTO', 'Node.js is not compiled with OpenSSL crypto support', Error); E('ERR_NO_ICU', @@ -1471,6 +1506,15 @@ E('ERR_PACKAGE_PATH_NOT_EXPORTED', (pkgPath, subpath, base = undefined) => { return `Package subpath '${subpath}' is not defined by "exports" in ${ pkgPath}package.json${base ? ` imported from ${base}` : ''}`; }, Error); +E('ERR_PARSE_ARGS_INVALID_OPTION_VALUE', '%s', TypeError); +E('ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL', "Unexpected argument '%s'. This " + + 'command does not take positional arguments', TypeError); +E('ERR_PARSE_ARGS_UNKNOWN_OPTION', (option, allowPositionals) => { + const suggestDashDash = allowPositionals ? '. To specify a positional ' + + "argument starting with a '-', place it at the end of the command after " + + `'--', as in '-- ${JSONStringify(option)}` : ''; + return `Unknown option '${option}'${suggestDashDash}`; +}, TypeError); E('ERR_PERFORMANCE_INVALID_TIMESTAMP', '%d is not a valid timestamp', TypeError); E('ERR_PERFORMANCE_MEASURE_INVALID_OPTIONS', '%s', TypeError); @@ -1543,6 +1587,21 @@ E('ERR_STREAM_WRAP', 'Stream has StringDecoder set or is in objectMode', Error); E('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error); E('ERR_SYNTHETIC', 'JavaScript Callstack', Error); E('ERR_SYSTEM_ERROR', 'A system error occurred', SystemError); +E('ERR_TEST_FAILURE', function(error, failureType) { + hideInternalStackFrames(this); + assert(typeof failureType === 'string', + "The 'failureType' argument must be of type string."); + + let msg = error?.message ?? error; + + if (typeof msg !== 'string') { + msg = inspectWithNoCustomRetry(msg); + } + + this.failureType = failureType; + this.cause = error; + return msg; +}, Error); E('ERR_TLS_CERT_ALTNAME_FORMAT', 'Invalid subject alternative name string', SyntaxError); E('ERR_TLS_CERT_ALTNAME_INVALID', function(reason, host, cert) { @@ -1625,8 +1684,10 @@ E('ERR_VM_MODULE_CANNOT_CREATE_CACHED_DATA', 'Cached data cannot be created for a module which has been evaluated', Error); E('ERR_VM_MODULE_DIFFERENT_CONTEXT', 'Linked modules must use the same context', Error); -E('ERR_VM_MODULE_LINKING_ERRORED', - 'Linking has already failed for the provided module', Error); +E('ERR_VM_MODULE_LINK_FAILURE', function(message, cause) { + this.cause = cause; + return message; +}, Error); E('ERR_VM_MODULE_NOT_MODULE', 'Provided module is not an instance of Module', Error); E('ERR_VM_MODULE_STATUS', 'Module status %s', Error); diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index 7c539db2eb3..5cf2f0b7a1b 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -4,7 +4,6 @@ const { ArrayFrom, Boolean, Error, - FunctionPrototypeBind, FunctionPrototypeCall, NumberIsInteger, ObjectAssign, @@ -12,6 +11,8 @@ const { ObjectDefineProperty, ObjectGetOwnPropertyDescriptor, ObjectGetOwnPropertyDescriptors, + ObjectSetPrototypeOf, + ObjectValues, ReflectApply, SafeArrayIterator, SafeFinalizationRegistry, @@ -35,7 +36,11 @@ const { } = require('internal/errors'); const { validateObject, validateString } = require('internal/validators'); -const { customInspectSymbol, kEnumerableProperty } = require('internal/util'); +const { + customInspectSymbol, + kEmptyObject, + kEnumerableProperty, +} = require('internal/util'); const { inspect } = require('util'); const kIsEventTarget = SymbolFor('nodejs.event_target'); @@ -73,6 +78,7 @@ const kTimestamp = Symbol('timestamp'); const kBubbles = Symbol('bubbles'); const kComposed = Symbol('composed'); const kPropagationStopped = Symbol('propagationStopped'); +const kDetail = Symbol('detail'); const isTrustedSet = new SafeWeakSet(); const isTrusted = ObjectGetOwnPropertyDescriptor({ @@ -94,16 +100,15 @@ class Event { * composed?: boolean, * }} [options] */ - constructor(type, options = null) { + constructor(type, options = kEmptyObject) { if (arguments.length === 0) throw new ERR_MISSING_ARGS('type'); - validateObject(options, 'options', { - allowArray: true, allowFunction: true, nullable: true, - }); - const { cancelable, bubbles, composed } = { ...options }; + validateObject(options, 'options'); + const { bubbles, cancelable, composed } = options; this[kCancelable] = !!cancelable; this[kBubbles] = !!bubbles; this[kComposed] = !!composed; + this[kType] = `${type}`; this[kDefaultPrevented] = false; this[kTimestamp] = now(); @@ -114,6 +119,7 @@ class Event { // isTrusted is special (LegacyUnforgeable) ObjectDefineProperty(this, 'isTrusted', { + __proto__: null, get: isTrusted, enumerable: true, configurable: false @@ -300,6 +306,7 @@ class Event { ObjectDefineProperties( Event.prototype, { [SymbolToStringTag]: { + __proto__: null, writable: false, enumerable: false, configurable: true, @@ -323,6 +330,49 @@ ObjectDefineProperties( stopPropagation: kEnumerableProperty, }); +function isCustomEvent(value) { + return isEvent(value) && (value?.[kDetail] !== undefined); +} + +class CustomEvent extends Event { + /** + * @constructor + * @param {string} type + * @param {{ + * bubbles?: boolean, + * cancelable?: boolean, + * composed?: boolean, + * detail?: any, + * }} [options] + */ + constructor(type, options = kEmptyObject) { + if (arguments.length === 0) + throw new ERR_MISSING_ARGS('type'); + super(type, options); + this[kDetail] = options?.detail ?? null; + } + + /** + * @type {any} + */ + get detail() { + if (!isCustomEvent(this)) + throw new ERR_INVALID_THIS('CustomEvent'); + return this[kDetail]; + } +} + +ObjectDefineProperties(CustomEvent.prototype, { + [SymbolToStringTag]: { + __proto__: null, + writable: false, + enumerable: false, + configurable: true, + value: 'CustomEvent', + }, + detail: kEnumerableProperty, +}); + class NodeCustomEvent extends Event { constructor(type, options) { super(type, options); @@ -346,6 +396,13 @@ function weakListeners() { return { registry: weakListenersState, map: objectToWeakListenerMap }; } +const kFlagOnce = 1 << 0; +const kFlagCapture = 1 << 1; +const kFlagPassive = 1 << 2; +const kFlagNodeStyle = 1 << 3; +const kFlagWeak = 1 << 4; +const kFlagRemoved = 1 << 5; + // The listeners for an EventTarget are maintained as a linked list. // Unfortunately, the way EventTarget is defined, listeners are accounted // using the tuple [handler,capture], and even if we don't actually make @@ -361,13 +418,21 @@ class Listener { previous.next = this; this.previous = previous; this.listener = listener; - // TODO(benjamingr) these 4 can be 'flags' to save 3 slots - this.once = once; - this.capture = capture; - this.passive = passive; - this.isNodeStyleListener = isNodeStyleListener; + + let flags = 0b0; + if (once) + flags |= kFlagOnce; + if (capture) + flags |= kFlagCapture; + if (passive) + flags |= kFlagPassive; + if (isNodeStyleListener) + flags |= kFlagNodeStyle; + if (weak) + flags |= kFlagWeak; + this.flags = flags; + this.removed = false; - this.weak = Boolean(weak); // Don't retain the object if (this.weak) { this.callback = new SafeWeakRef(listener); @@ -379,11 +444,39 @@ class Listener { this.callback = listener; this.listener = listener; } else { - this.callback = FunctionPrototypeBind(listener.handleEvent, listener); + this.callback = async (...args) => { + if (listener.handleEvent) + await ReflectApply(listener.handleEvent, listener, args); + }; this.listener = listener; } } + get once() { + return Boolean(this.flags & kFlagOnce); + } + get capture() { + return Boolean(this.flags & kFlagCapture); + } + get passive() { + return Boolean(this.flags & kFlagPassive); + } + get isNodeStyleListener() { + return Boolean(this.flags & kFlagNodeStyle); + } + get weak() { + return Boolean(this.flags & kFlagWeak); + } + get removed() { + return Boolean(this.flags & kFlagRemoved); + } + set removed(value) { + if (value) + this.flags |= kFlagRemoved; + else + this.flags &= ~kFlagRemoved; + } + same(listener, capture) { const myListener = this.weak ? this.listener.deref() : this.listener; return myListener === listener && this.capture === capture; @@ -455,13 +548,13 @@ class EventTarget { * signal?: AbortSignal * }} [options] */ - addEventListener(type, listener, options = {}) { + addEventListener(type, listener, options = kEmptyObject) { if (!isEventTarget(this)) throw new ERR_INVALID_THIS('EventTarget'); if (arguments.length < 2) throw new ERR_MISSING_ARGS('type', 'listener'); - // We validateOptions before the shouldAddListeners check because the spec + // We validateOptions before the validateListener check because the spec // requires us to hit getters. const { once, @@ -472,7 +565,7 @@ class EventTarget { weak, } = validateEventListenerOptions(options); - if (!shouldAddListener(listener)) { + if (!validateEventListener(listener)) { // The DOM silently allows passing undefined as a second argument // No error code for this since it is a Warning // eslint-disable-next-line no-restricted-syntax @@ -542,10 +635,10 @@ class EventTarget { * capture?: boolean, * }} [options] */ - removeEventListener(type, listener, options = {}) { + removeEventListener(type, listener, options = kEmptyObject) { if (!isEventTarget(this)) throw new ERR_INVALID_THIS('EventTarget'); - if (!shouldAddListener(listener)) + if (!validateEventListener(listener)) return; type = String(type); @@ -681,6 +774,7 @@ ObjectDefineProperties(EventTarget.prototype, { removeEventListener: kEnumerableProperty, dispatchEvent: kEnumerableProperty, [SymbolToStringTag]: { + __proto__: null, writable: false, enumerable: false, configurable: true, @@ -853,7 +947,7 @@ ObjectDefineProperties(NodeEventTarget.prototype, { // EventTarget API -function shouldAddListener(listener) { +function validateEventListener(listener) { if (typeof listener === 'function' || typeof listener?.handleEvent === 'function') { return true; @@ -862,6 +956,11 @@ function shouldAddListener(listener) { if (listener == null) return false; + if (typeof listener === 'object') { + // Require `handleEvent` lazily. + return true; + } + throw new ERR_INVALID_ARG_TYPE('listener', 'EventListener', listener); } @@ -870,7 +969,7 @@ function validateEventListenerOptions(options) { return { capture: options }; if (options === null) - return {}; + return kEmptyObject; validateObject(options, 'options', { allowArray: true, allowFunction: true, }); @@ -928,6 +1027,7 @@ function makeEventHandler(handler) { function defineEventHandler(emitter, name) { // 8.1.5.1 Event handlers - basically `on[eventName]` attributes ObjectDefineProperty(emitter, `on${name}`, { + __proto__: null, get() { return this[kHandlers]?.get(name)?.handler ?? null; }, @@ -969,12 +1069,19 @@ const EventEmitterMixin = (Superclass) => { } const protoProps = ObjectGetOwnPropertyDescriptors(EventEmitter.prototype); delete protoProps.constructor; + const propertiesValues = ObjectValues(protoProps); + for (let i = 0; i < propertiesValues.length; i++) { + // We want to use null-prototype objects to not rely on globally mutable + // %Object.prototype%. + ObjectSetPrototypeOf(propertiesValues[i], null); + } ObjectDefineProperties(MixedEventEmitter.prototype, protoProps); return MixedEventEmitter; }; module.exports = { Event, + CustomEvent, EventEmitterMixin, EventTarget, NodeEventTarget, diff --git a/lib/internal/fixed_queue.js b/lib/internal/fixed_queue.js index f6f3110d8ec..4019d6e6dc4 100644 --- a/lib/internal/fixed_queue.js +++ b/lib/internal/fixed_queue.js @@ -111,6 +111,7 @@ module.exports = class FixedQueue { if (tail.isEmpty() && tail.next !== null) { // If there is another queue, it forms the new tail. this.tail = tail.next; + tail.next = null; } return next; } diff --git a/lib/internal/freeze_intrinsics.js b/lib/internal/freeze_intrinsics.js index 0dcfea1ef2e..508b071c7c0 100644 --- a/lib/internal/freeze_intrinsics.js +++ b/lib/internal/freeze_intrinsics.js @@ -372,6 +372,7 @@ module.exports = function() { // 19.1 Value Properties of the Global Object ObjectDefineProperty(globalThis, 'globalThis', { + __proto__: null, configurable: false, writable: false, value: globalThis, @@ -427,16 +428,8 @@ module.exports = function() { const descs = ObjectGetOwnPropertyDescriptors(obj); enqueue(proto); ArrayPrototypeForEach(ReflectOwnKeys(descs), (name) => { - // TODO: Uncurried form - // TODO: getOwnPropertyDescriptors is guaranteed to return well-formed - // descriptors, but they still inherit from Object.prototype. If - // someone has poisoned Object.prototype to add 'value' or 'get' - // properties, then a simple 'if ("value" in desc)' or 'desc.value' - // test could be confused. We use hasOwnProperty to be sure about - // whether 'value' is present or not, which tells us for sure that - // this is a data property. const desc = descs[name]; - if ('value' in desc) { + if (ObjectPrototypeHasOwnProperty(desc, 'value')) { // todo uncurried form enqueue(desc.value); } else { @@ -488,7 +481,7 @@ module.exports = function() { * objects succeed if otherwise possible. */ function enableDerivedOverride(obj, prop, desc) { - if ('value' in desc && desc.configurable) { + if (ObjectPrototypeHasOwnProperty(desc, 'value') && desc.configurable) { const value = desc.value; function getter() { @@ -510,6 +503,7 @@ module.exports = function() { this[prop] = newValue; } else { ObjectDefineProperty(this, prop, { + __proto__: null, value: newValue, writable: true, enumerable: true, @@ -519,6 +513,7 @@ module.exports = function() { } ObjectDefineProperty(obj, prop, { + __proto__: null, get: getter, set: setter, enumerable: desc.enumerable, diff --git a/lib/internal/fs/cp/cp.js b/lib/internal/fs/cp/cp.js index bcbc8aa3279..e0b7a74b1c7 100644 --- a/lib/internal/fs/cp/cp.js +++ b/lib/internal/fs/cp/cp.js @@ -6,11 +6,9 @@ const { ArrayPrototypeEvery, ArrayPrototypeFilter, Boolean, - PromiseAll, - PromisePrototypeCatch, PromisePrototypeThen, PromiseReject, - SafeArrayIterator, + SafePromiseAll, StringPrototypeSplit, } = primordials; const { @@ -128,13 +126,13 @@ function getStats(src, dest, opts) { const statFunc = opts.dereference ? (file) => stat(file, { bigint: true }) : (file) => lstat(file, { bigint: true }); - return PromiseAll(new SafeArrayIterator([ + return SafePromiseAll([ statFunc(src), - PromisePrototypeCatch(statFunc(dest), (err) => { + PromisePrototypeThen(statFunc(dest), undefined, (err) => { if (err.code === 'ENOENT') return null; throw err; }), - ])); + ]); } async function checkParentDir(destStat, src, dest, opts) { diff --git a/lib/internal/fs/dir.js b/lib/internal/fs/dir.js index 917319661a6..b6e8d4a4b09 100644 --- a/lib/internal/fs/dir.js +++ b/lib/internal/fs/dir.js @@ -226,6 +226,7 @@ class Dir { } ObjectDefineProperty(Dir.prototype, SymbolAsyncIterator, { + __proto__: null, value: Dir.prototype.entries, enumerable: false, writable: true, diff --git a/lib/internal/fs/promises.js b/lib/internal/fs/promises.js index 123656c4b0c..2b98adaba3d 100644 --- a/lib/internal/fs/promises.js +++ b/lib/internal/fs/promises.js @@ -5,7 +5,6 @@ const { Error, MathMax, MathMin, - ObjectCreate, NumberIsSafeInteger, Promise, PromisePrototypeThen, @@ -16,13 +15,15 @@ const { Uint8Array, } = primordials; +const { fs: constants } = internalBinding('constants'); const { F_OK, O_SYMLINK, O_WRONLY, S_IFMT, S_IFREG -} = internalBinding('constants').fs; +} = constants; + const binding = internalBinding('fs'); const { Buffer } = require('buffer'); @@ -62,7 +63,7 @@ const { validateOffsetLengthWrite, validateRmOptions, validateRmdirOptions, - validateStringAfterArrayBufferView, + validatePrimitiveStringAfterArrayBufferView, warnOnNonPortableTemplate, } = require('internal/fs/utils'); const { opendir } = require('internal/fs/dir'); @@ -76,7 +77,11 @@ const { validateString, } = require('internal/validators'); const pathModule = require('path'); -const { lazyDOMException, promisify } = require('internal/util'); +const { + kEmptyObject, + lazyDOMException, + promisify, +} = require('internal/util'); const { EventEmitterMixin } = require('internal/event_target'); const { watch } = require('internal/fs/watchers'); const { isIterable } = require('internal/streams/utils'); @@ -319,7 +324,7 @@ async function fsCall(fn, handle, ...args) { function checkAborted(signal) { if (signal?.aborted) - throw new AbortError(); + throw new AbortError(undefined, { cause: signal?.reason }); } async function writeFileHandle(filehandle, data, signal, encoding) { @@ -456,20 +461,29 @@ async function open(path, flags, mode) { flagsNumber, mode, kUsePromises)); } -async function read(handle, bufferOrOptions, offset, length, position) { - let buffer = bufferOrOptions; +async function read(handle, bufferOrParams, offset, length, position) { + let buffer = bufferOrParams; if (!isArrayBufferView(buffer)) { - bufferOrOptions ??= ObjectCreate(null); + // This is fh.read(params) ({ buffer = Buffer.alloc(16384), offset = 0, length = buffer.byteLength - offset, - position = null - } = bufferOrOptions); + position = null, + } = bufferOrParams ?? kEmptyObject); validateBuffer(buffer); } + if (offset !== null && typeof offset === 'object') { + // This is fh.read(buffer, options) + ({ + offset = 0, + length = buffer.byteLength - offset, + position = null, + } = offset); + } + if (offset == null) { offset = 0; } else { @@ -508,11 +522,20 @@ async function readv(handle, buffers, position) { return { bytesRead, buffers }; } -async function write(handle, buffer, offset, length, position) { +async function write(handle, buffer, offsetOrOptions, length, position) { if (buffer?.byteLength === 0) return { bytesWritten: 0, buffer }; + let offset = offsetOrOptions; if (isArrayBufferView(buffer)) { + if (typeof offset === 'object') { + ({ + offset = 0, + length = buffer.byteLength - offset, + position = null, + } = offsetOrOptions ?? kEmptyObject); + } + if (offset == null) { offset = 0; } else { @@ -529,7 +552,7 @@ async function write(handle, buffer, offset, length, position) { return { bytesWritten, buffer }; } - validateStringAfterArrayBufferView(buffer, 'buffer'); + validatePrimitiveStringAfterArrayBufferView(buffer, 'buffer'); validateEncoding(buffer, length); const bytesWritten = (await binding.writeString(handle.fd, buffer, offset, length, kUsePromises)) || 0; @@ -606,7 +629,7 @@ async function mkdir(path, options) { const { recursive = false, mode = 0o777 - } = options || {}; + } = options || kEmptyObject; path = getValidatedPath(path); validateBoolean(recursive, 'options.recursive'); @@ -616,7 +639,7 @@ async function mkdir(path, options) { } async function readdir(path, options) { - options = getOptions(options, {}); + options = getOptions(options); path = getValidatedPath(path); const result = await binding.readdir(pathModule.toNamespacedPath(path), options.encoding, @@ -628,7 +651,7 @@ async function readdir(path, options) { } async function readlink(path, options) { - options = getOptions(options, {}); + options = getOptions(options); path = getValidatedPath(path, 'oldPath'); return binding.readlink(pathModule.toNamespacedPath(path), options.encoding, kUsePromises); @@ -740,13 +763,13 @@ async function lutimes(path, atime, mtime) { } async function realpath(path, options) { - options = getOptions(options, {}); + options = getOptions(options); path = getValidatedPath(path); return binding.realpath(path, options.encoding, kUsePromises); } async function mkdtemp(prefix, options) { - options = getOptions(options, {}); + options = getOptions(options); validateString(prefix, 'prefix'); nullCheck(prefix); @@ -759,7 +782,7 @@ async function writeFile(path, data, options) { const flag = options.flag || 'w'; if (!isArrayBufferView(data) && !isCustomIterable(data)) { - validateStringAfterArrayBufferView(data, 'data'); + validatePrimitiveStringAfterArrayBufferView(data, 'data'); data = Buffer.from(data, options.encoding || 'utf8'); } @@ -829,6 +852,7 @@ module.exports = { appendFile, readFile, watch, + constants, }, FileHandle, diff --git a/lib/internal/fs/read_file_context.js b/lib/internal/fs/read_file_context.js index afa4b7852f6..55ad6d767ec 100644 --- a/lib/internal/fs/read_file_context.js +++ b/lib/internal/fs/read_file_context.js @@ -88,7 +88,8 @@ class ReadFileContext { let length; if (this.signal?.aborted) { - return this.close(new AbortError()); + return this.close( + new AbortError(undefined, { cause: this.signal?.reason })); } if (this.size === 0) { buffer = Buffer.allocUnsafeSlow(kReadFileUnknownBufferLength); diff --git a/lib/internal/fs/streams.js b/lib/internal/fs/streams.js index 5e9e338ab1f..954cf6ae3c4 100644 --- a/lib/internal/fs/streams.js +++ b/lib/internal/fs/streams.js @@ -16,7 +16,10 @@ const { ERR_OUT_OF_RANGE, ERR_METHOD_NOT_IMPLEMENTED, } = require('internal/errors').codes; -const { deprecate } = require('internal/util'); +const { + deprecate, + kEmptyObject, +} = require('internal/util'); const { validateFunction, validateInteger, @@ -150,7 +153,7 @@ function ReadStream(path, options) { return new ReadStream(path, options); // A little bit bigger buffer and water marks by default - options = copyObject(getOptions(options, {})); + options = copyObject(getOptions(options, kEmptyObject)); if (options.highWaterMark === undefined) options.highWaterMark = 64 * 1024; @@ -216,6 +219,7 @@ ObjectSetPrototypeOf(ReadStream.prototype, Readable.prototype); ObjectSetPrototypeOf(ReadStream, Readable); ObjectDefineProperty(ReadStream.prototype, 'autoClose', { + __proto__: null, get() { return this._readableState.autoDestroy; }, @@ -299,6 +303,7 @@ ReadStream.prototype.close = function(cb) { }; ObjectDefineProperty(ReadStream.prototype, 'pending', { + __proto__: null, get() { return this.fd === null; }, configurable: true }); @@ -307,7 +312,7 @@ function WriteStream(path, options) { if (!(this instanceof WriteStream)) return new WriteStream(path, options); - options = copyObject(getOptions(options, {})); + options = copyObject(getOptions(options, kEmptyObject)); // Only buffers are supported. options.decodeStrings = true; @@ -377,6 +382,7 @@ ObjectSetPrototypeOf(WriteStream.prototype, Writable.prototype); ObjectSetPrototypeOf(WriteStream, Writable); ObjectDefineProperty(WriteStream.prototype, 'autoClose', { + __proto__: null, get() { return this._writableState.autoDestroy; }, @@ -485,6 +491,7 @@ WriteStream.prototype.close = function(cb) { WriteStream.prototype.destroySoon = WriteStream.prototype.end; ObjectDefineProperty(WriteStream.prototype, 'pending', { + __proto__: null, get() { return this.fd === null; }, configurable: true }); diff --git a/lib/internal/fs/sync_write_stream.js b/lib/internal/fs/sync_write_stream.js index df366edce47..8fa5c56aaff 100644 --- a/lib/internal/fs/sync_write_stream.js +++ b/lib/internal/fs/sync_write_stream.js @@ -4,6 +4,7 @@ const { ObjectSetPrototypeOf, ReflectApply, } = primordials; +const { kEmptyObject } = require('internal/util'); const { Writable } = require('stream'); const { closeSync, writeSync } = require('fs'); @@ -11,7 +12,7 @@ const { closeSync, writeSync } = require('fs'); function SyncWriteStream(fd, options) { ReflectApply(Writable, this, [{ autoDestroy: true }]); - options = options || {}; + options = options || kEmptyObject; this.fd = fd; this.readable = false; diff --git a/lib/internal/fs/utils.js b/lib/internal/fs/utils.js index 481b5292b1d..651349a9c81 100644 --- a/lib/internal/fs/utils.js +++ b/lib/internal/fs/utils.js @@ -17,9 +17,9 @@ const { ObjectSetPrototypeOf, ReflectApply, ReflectOwnKeys, + RegExpPrototypeSymbolReplace, StringPrototypeEndsWith, StringPrototypeIncludes, - StringPrototypeReplace, Symbol, TypedArrayPrototypeIncludes, } = primordials; @@ -43,7 +43,10 @@ const { isDate, isBigUint64Array } = require('internal/util/types'); -const { once } = require('internal/util'); +const { + kEmptyObject, + once, +} = require('internal/util'); const { toPathIfFileURL } = require('internal/url'); const { validateAbortSignal, @@ -122,7 +125,7 @@ const kMaximumCopyMode = COPYFILE_EXCL | COPYFILE_FICLONE | COPYFILE_FICLONE_FORCE; -// Most platforms don't allow reads or writes >= 2 GB. +// Most platforms don't allow reads or writes >= 2 GiB. // See https://github.com/libuv/libuv/pull/1501. const kIoMaxLength = 2 ** 31 - 1; @@ -312,9 +315,8 @@ function getDirent(path, name, type, callback) { } } -function getOptions(options, defaultOptions) { - if (options === null || options === undefined || - typeof options === 'function') { +function getOptions(options, defaultOptions = kEmptyObject) { + if (options == null || typeof options === 'function') { return defaultOptions; } @@ -394,7 +396,7 @@ function preprocessSymlinkDestination(path, type, linkPath) { return pathModule.toNamespacedPath(path); } // Windows symlinks don't tolerate forward slashes. - return StringPrototypeReplace(path, /\//g, '\\'); + return RegExpPrototypeSymbolReplace(/\//g, path, '\\'); } // Constructor for file stats. @@ -889,19 +891,27 @@ const validateStringAfterArrayBufferView = hideStackFrames((buffer, name) => { ); }); +const validatePrimitiveStringAfterArrayBufferView = hideStackFrames((buffer, name) => { + if (typeof buffer !== 'string') { + throw new ERR_INVALID_ARG_TYPE( + name, + ['string', 'Buffer', 'TypedArray', 'DataView'], + buffer + ); + } +}); + const validatePosition = hideStackFrames((position, name) => { if (typeof position === 'number') { - validateInteger(position, 'position'); + validateInteger(position, name); } else if (typeof position === 'bigint') { if (!(position >= -(2n ** 63n) && position <= 2n ** 63n - 1n)) { - throw new ERR_OUT_OF_RANGE('position', + throw new ERR_OUT_OF_RANGE(name, `>= ${-(2n ** 63n)} && <= ${2n ** 63n - 1n}`, position); } } else { - throw new ERR_INVALID_ARG_TYPE('position', - ['integer', 'bigint'], - position); + throw new ERR_INVALID_ARG_TYPE(name, ['integer', 'bigint'], position); } }); @@ -943,5 +953,6 @@ module.exports = { validateRmOptionsSync, validateRmdirOptions, validateStringAfterArrayBufferView, + validatePrimitiveStringAfterArrayBufferView, warnOnNonPortableTemplate }; diff --git a/lib/internal/fs/watchers.js b/lib/internal/fs/watchers.js index b45af42d12f..7b820e70df1 100644 --- a/lib/internal/fs/watchers.js +++ b/lib/internal/fs/watchers.js @@ -291,6 +291,7 @@ function emitCloseNT(self) { // Legacy alias on the C++ wrapper object. This is not public API, so we may // want to runtime-deprecate it at some point. There's no hurry, though. ObjectDefineProperty(FSEvent.prototype, 'owner', { + __proto__: null, get() { return this[owner_symbol]; }, set(v) { return this[owner_symbol] = v; } }); @@ -316,13 +317,13 @@ async function* watch(filename, options = {}) { } if (signal?.aborted) - throw new AbortError(); + throw new AbortError(undefined, { cause: signal?.reason }); const handle = new FSEvent(); let { promise, resolve, reject } = createDeferredPromise(); const oncancel = () => { handle.close(); - reject(new AbortError()); + reject(new AbortError(undefined, { cause: signal?.reason })); }; try { @@ -361,7 +362,7 @@ async function* watch(filename, options = {}) { yield await promise; ({ promise, resolve, reject } = createDeferredPromise()); } - throw new AbortError(); + throw new AbortError(undefined, { cause: signal?.reason }); } finally { handle.close(); signal?.removeEventListener('abort', oncancel); diff --git a/lib/internal/histogram.js b/lib/internal/histogram.js index 4237e716dc0..ca540e555e0 100644 --- a/lib/internal/histogram.js +++ b/lib/internal/histogram.js @@ -17,6 +17,7 @@ const { const { customInspectSymbol: kInspect, + kEmptyObject, } = require('internal/util'); const { inspect } = require('util'); @@ -352,7 +353,7 @@ internalRecordableHistogram.prototype[kDeserialize] = () => {}; * }} [options] * @returns {RecordableHistogram} */ -function createHistogram(options = {}) { +function createHistogram(options = kEmptyObject) { validateObject(options, 'options'); const { lowest = 1, diff --git a/lib/internal/http.js b/lib/internal/http.js index 375118da49f..b20b3cd229e 100644 --- a/lib/internal/http.js +++ b/lib/internal/http.js @@ -8,13 +8,11 @@ const { } = primordials; const { setUnrefTimeout } = require('internal/timers'); - -const { InternalPerformanceEntry } = require('internal/perf/performance_entry'); - +const { trace, isTraceCategoryEnabled } = internalBinding('trace_events'); const { - enqueue, - hasObserver, -} = require('internal/perf/observe'); + CHAR_LOWERCASE_B, + CHAR_LOWERCASE_E, +} = require('internal/constants'); let utcCache; @@ -33,23 +31,32 @@ function resetCache() { utcCache = undefined; } -function emitStatistics(statistics) { - if (!hasObserver('http') || statistics == null) return; - const startTime = statistics.startTime; - const diff = process.hrtime(startTime); - const entry = new InternalPerformanceEntry( - statistics.type, - 'http', - startTime[0] * 1000 + startTime[1] / 1e6, - diff[0] * 1000 + diff[1] / 1e6, - undefined, - ); - enqueue(entry); +let traceEventId = 0; + +function getNextTraceEventId() { + return ++traceEventId; +} + +function isTraceHTTPEnabled() { + return isTraceCategoryEnabled('node.http'); +} + +const traceEventCategory = 'node,node.http'; + +function traceBegin(...args) { + trace(CHAR_LOWERCASE_B, traceEventCategory, ...args); +} + +function traceEnd(...args) { + trace(CHAR_LOWERCASE_E, traceEventCategory, ...args); } module.exports = { kOutHeaders: Symbol('kOutHeaders'), kNeedDrain: Symbol('kNeedDrain'), utcDate, - emitStatistics, + traceBegin, + traceEnd, + getNextTraceEventId, + isTraceHTTPEnabled, }; diff --git a/lib/internal/http2/compat.js b/lib/internal/http2/compat.js index 0c4519dfff5..c390ccb11a8 100644 --- a/lib/internal/http2/compat.js +++ b/lib/internal/http2/compat.js @@ -682,9 +682,19 @@ class Http2ServerResponse extends Stream { let i; if (ArrayIsArray(headers)) { - for (i = 0; i < headers.length; i++) { - const header = headers[i]; - this[kSetHeader](header[0], header[1]); + if (headers.length && ArrayIsArray(headers[0])) { + for (i = 0; i < headers.length; i++) { + const header = headers[i]; + this[kSetHeader](header[0], header[1]); + } + } else { + if (headers.length % 2 !== 0) { + throw new ERR_INVALID_ARG_VALUE('headers', headers); + } + + for (i = 0; i < headers.length; i += 2) { + this[kSetHeader](headers[i], headers[i + 1]); + } } } else if (typeof headers === 'object') { const keys = ObjectKeys(headers); diff --git a/lib/internal/http2/core.js b/lib/internal/http2/core.js index cc0bfe743ff..d59d4a76070 100644 --- a/lib/internal/http2/core.js +++ b/lib/internal/http2/core.js @@ -17,13 +17,13 @@ const { ObjectDefineProperty, ObjectPrototypeHasOwnProperty, Promise, - PromisePrototypeCatch, + PromisePrototypeThen, Proxy, ReflectApply, ReflectGet, ReflectGetPrototypeOf, ReflectSet, - RegExpPrototypeTest, + RegExpPrototypeExec, SafeArrayIterator, SafeMap, SafeSet, @@ -37,7 +37,8 @@ const { const { assertCrypto, customInspectSymbol: kInspect, - promisify + kEmptyObject, + promisify, } = require('internal/util'); assertCrypto(); @@ -189,10 +190,10 @@ let debug = require('internal/util/debuglog').debuglog('http2', (fn) => { debug = fn; }); -// TODO(addaleax): See if this can be made more efficient by figuring out -// whether debugging is enabled before we perform any further steps. Currently, -// this seems pretty fast, though. function debugStream(id, sessionType, message, ...args) { + if (!debug.enabled) { + return; + } debug('Http2Stream %s [Http2Session %s]: ' + message, id, sessionName(sessionType), ...new SafeArrayIterator(args)); } @@ -981,6 +982,7 @@ function trackAssignmentsTypedArray(typedArray) { } return new Proxy(typedArray, { + __proto__: null, get(obj, prop, receiver) { if (prop === 'copyAssigned') { return copyAssigned; @@ -1658,7 +1660,7 @@ class ServerHttp2Session extends Http2Session { } validateString(alt, 'alt'); - if (!RegExpPrototypeTest(kQuotedString, alt)) + if (RegExpPrototypeExec(kQuotedString, alt) === null) throw new ERR_INVALID_CHAR('alt'); // Max length permitted for ALTSVC @@ -1792,7 +1794,9 @@ class ClientHttp2Session extends Http2Session { const { signal } = options; if (signal) { validateAbortSignal(signal, 'options.signal'); - const aborter = () => stream.destroy(new AbortError()); + const aborter = () => { + stream.destroy(new AbortError(undefined, { cause: signal.reason })); + }; if (signal.aborted) { aborter(); } else { @@ -2447,8 +2451,8 @@ function processHeaders(oldHeaders, options) { function onFileUnpipe() { const stream = this.sink[kOwner]; if (stream.ownsFd) - PromisePrototypeCatch(this.source.close(), - FunctionPrototypeBind(stream.destroy, stream)); + PromisePrototypeThen(this.source.close(), undefined, + FunctionPrototypeBind(stream.destroy, stream)); else this.source.releaseFD(); } @@ -3111,7 +3115,7 @@ function initializeTLSOptions(options, servername) { options.ALPNProtocols = ['h2']; if (options.allowHTTP1 === true) ArrayPrototypePush(options.ALPNProtocols, 'http/1.1'); - if (servername !== undefined && options.servername === undefined) + if (servername !== undefined && !options.servername) options.servername = servername; return options; } @@ -3294,6 +3298,7 @@ function connect(authority, options, listener) { // Support util.promisify ObjectDefineProperty(connect, promisify.custom, { + __proto__: null, value: (authority, options) => { return new Promise((resolve) => { const server = connect(authority, options, () => resolve(server)); @@ -3323,7 +3328,7 @@ function getPackedSettings(settings) { return binding.packSettings(); } -function getUnpackedSettings(buf, options = {}) { +function getUnpackedSettings(buf, options = kEmptyObject) { if (!isArrayBufferView(buf) || buf.length === undefined) { throw new ERR_INVALID_ARG_TYPE('buf', ['Buffer', 'TypedArray'], buf); @@ -3393,6 +3398,7 @@ module.exports = { sensitiveHeaders: kSensitiveHeaders, Http2Session, Http2Stream, + ServerHttp2Session, Http2ServerRequest, Http2ServerResponse }; diff --git a/lib/internal/http2/util.js b/lib/internal/http2/util.js index 38578d2a151..ecb943c9b8e 100644 --- a/lib/internal/http2/util.js +++ b/lib/internal/http2/util.js @@ -555,6 +555,7 @@ class NghttpError extends Error { this.errno = integerCode; captureLargerStackTrace(this); ObjectDefineProperty(this, kIsNodeError, { + __proto__: null, value: true, enumerable: false, writable: false, @@ -588,7 +589,7 @@ const assertWithinRange = hideStackFrames( function toHeaderObject(headers, sensitiveHeaders) { const obj = ObjectCreate(null); - for (var n = 0; n < headers.length; n += 2) { + for (let n = 0; n < headers.length; n += 2) { const name = headers[n]; let value = headers[n + 1]; if (name === HTTP2_HEADER_STATUS) diff --git a/lib/internal/js_stream_socket.js b/lib/internal/js_stream_socket.js index faad988e820..f2a0ecaa1d8 100644 --- a/lib/internal/js_stream_socket.js +++ b/lib/internal/js_stream_socket.js @@ -171,6 +171,7 @@ class JSStreamSocket extends Socket { this.stream.cork(); // Use `var` over `let` for performance optimization. + // eslint-disable-next-line no-var for (var i = 0; i < bufs.length; ++i) this.stream.write(bufs[i], done); this.stream.uncork(); diff --git a/lib/internal/main/mksnapshot.js b/lib/internal/main/mksnapshot.js new file mode 100644 index 00000000000..053457cfebb --- /dev/null +++ b/lib/internal/main/mksnapshot.js @@ -0,0 +1,139 @@ +'use strict'; + +const { + Error, + SafeSet, + SafeArrayIterator +} = primordials; + +const binding = internalBinding('mksnapshot'); +const { BuiltinModule } = require('internal/bootstrap/loaders'); +const { + compileSerializeMain, +} = binding; + +const { + getOptionValue +} = require('internal/options'); + +const { + readFileSync +} = require('fs'); + +const supportedModules = new SafeSet(new SafeArrayIterator([ + // '_http_agent', + // '_http_client', + // '_http_common', + // '_http_incoming', + // '_http_outgoing', + // '_http_server', + '_stream_duplex', + '_stream_passthrough', + '_stream_readable', + '_stream_transform', + '_stream_wrap', + '_stream_writable', + // '_tls_common', + // '_tls_wrap', + 'assert', + 'assert/strict', + // 'async_hooks', + 'buffer', + // 'child_process', + // 'cluster', + 'console', + 'constants', + 'crypto', + // 'dgram', + // 'diagnostics_channel', + // 'dns', + // 'dns/promises', + // 'domain', + 'events', + 'fs', + 'fs/promises', + // 'http', + // 'http2', + // 'https', + // 'inspector', + // 'module', + // 'net', + 'os', + 'path', + 'path/posix', + 'path/win32', + // 'perf_hooks', + 'process', + 'punycode', + 'querystring', + // 'readline', + // 'repl', + 'stream', + 'stream/promises', + 'string_decoder', + 'sys', + 'timers', + 'timers/promises', + // 'tls', + // 'trace_events', + // 'tty', + 'url', + 'util', + 'util/types', + 'v8', + // 'vm', + // 'worker_threads', + 'zlib', +])); + +const warnedModules = new SafeSet(); +function supportedInUserSnapshot(id) { + return supportedModules.has(id); +} + +function requireForUserSnapshot(id) { + if (!BuiltinModule.canBeRequiredByUsers(id)) { + // eslint-disable-next-line no-restricted-syntax + const err = new Error( + `Cannot find module '${id}'. ` + ); + err.code = 'MODULE_NOT_FOUND'; + throw err; + } + if (!supportedInUserSnapshot(id)) { + if (!warnedModules.has(id)) { + process.emitWarning( + `built-in module ${id} is not yet supported in user snapshots`); + warnedModules.add(id); + } + } + + return require(id); +} + +function main() { + const { + prepareMainThreadExecution + } = require('internal/bootstrap/pre_execution'); + + prepareMainThreadExecution(true, false); + + const file = process.argv[1]; + const path = require('path'); + const filename = path.resolve(file); + const dirname = path.dirname(filename); + const source = readFileSync(file, 'utf-8'); + const serializeMainFunction = compileSerializeMain(filename, source); + + require('internal/v8/startup_snapshot').initializeCallbacks(); + + if (getOptionValue('--inspect-brk')) { + internalBinding('inspector').callAndPauseOnStart( + serializeMainFunction, undefined, + requireForUserSnapshot, filename, dirname); + } else { + serializeMainFunction(requireForUserSnapshot, filename, dirname); + } +} + +main(); diff --git a/lib/internal/main/print_help.js b/lib/internal/main/print_help.js index 6aa422c657b..f8fc5a6075f 100644 --- a/lib/internal/main/print_help.js +++ b/lib/internal/main/print_help.js @@ -8,11 +8,11 @@ const { MathMax, ObjectKeys, RegExp, + RegExpPrototypeSymbolReplace, StringPrototypeLocaleCompare, StringPrototypeSlice, StringPrototypeTrimLeft, StringPrototypeRepeat, - StringPrototypeReplace, SafeMap, } = primordials; @@ -55,10 +55,15 @@ const envVars = new SafeMap(ArrayPrototypeConcat([ 'of stderr' }], ['NODE_REPL_HISTORY', { helpText: 'path to the persistent REPL ' + 'history file' }], + ['NODE_REPL_EXTERNAL_MODULE', { helpText: 'path to a Node.js module ' + + 'which will be loaded in place of the built-in REPL' }], + ['NODE_SKIP_PLATFORM_CHECK', { helpText: 'set to 1 to skip ' + + 'the check for a supported platform during Node.js startup' }], ['NODE_TLS_REJECT_UNAUTHORIZED', { helpText: 'set to 0 to disable TLS ' + 'certificate validation' }], ['NODE_V8_COVERAGE', { helpText: 'directory to output v8 coverage JSON ' + 'to' }], + ['TZ', { helpText: 'specify the timezone configuration' }], ['UV_THREADPOOL_SIZE', { helpText: 'sets the number of threads used in ' + 'libuv\'s threadpool' }], ], hasIntl ? [ @@ -77,14 +82,15 @@ const envVars = new SafeMap(ArrayPrototypeConcat([ function indent(text, depth) { - return StringPrototypeReplace(text, /^/gm, StringPrototypeRepeat(' ', depth)); + return RegExpPrototypeSymbolReplace(/^/gm, text, StringPrototypeRepeat(' ', depth)); } function fold(text, width) { - return StringPrototypeReplace(text, - new RegExp(`([^\n]{0,${width}})( |$)`, 'g'), - (_, newLine, end) => - newLine + (end === ' ' ? '\n' : '')); + return RegExpPrototypeSymbolReplace( + new RegExp(`([^\n]{0,${width}})( |$)`, 'g'), + text, + (_, newLine, end) => newLine + (end === ' ' ? '\n' : '') + ); } function getArgDescription(type) { diff --git a/lib/internal/main/run_main_module.js b/lib/internal/main/run_main_module.js index ca5d1122c59..97313cdeb38 100644 --- a/lib/internal/main/run_main_module.js +++ b/lib/internal/main/run_main_module.js @@ -1,5 +1,7 @@ 'use strict'; +const { RegExpPrototypeExec } = primordials; + const { prepareMainThreadExecution } = require('internal/bootstrap/pre_execution'); @@ -8,6 +10,9 @@ prepareMainThreadExecution(true); markBootstrapComplete(); +// Necessary to reset RegExp statics before user code runs. +RegExpPrototypeExec(/^/, ''); + // Note: this loads the module through the ESM loader if the module is // determined to be an ES module. This hangs from the CJS module loader // because we currently allow monkey-patching of the module loaders diff --git a/lib/internal/main/test_runner.js b/lib/internal/main/test_runner.js new file mode 100644 index 00000000000..bf68b6933be --- /dev/null +++ b/lib/internal/main/test_runner.js @@ -0,0 +1,25 @@ +'use strict'; +const { + prepareMainThreadExecution, +} = require('internal/bootstrap/pre_execution'); +const { isUsingInspector } = require('internal/util/inspector'); +const { run } = require('internal/test_runner/runner'); + +prepareMainThreadExecution(false); +markBootstrapComplete(); + +let concurrency = true; +let inspectPort; + +if (isUsingInspector()) { + process.emitWarning('Using the inspector with --test forces running at a concurrency of 1. ' + + 'Use the inspectPort option to run with concurrency'); + concurrency = 1; + inspectPort = process.debugPort; +} + +const tapStream = run({ concurrency, inspectPort }); +tapStream.pipe(process.stdout); +tapStream.once('test:fail', () => { + process.exitCode = 1; +}); diff --git a/lib/internal/main/watch_mode.js b/lib/internal/main/watch_mode.js new file mode 100644 index 00000000000..0e41bbc335a --- /dev/null +++ b/lib/internal/main/watch_mode.js @@ -0,0 +1,131 @@ +'use strict'; +const { + ArrayPrototypeFilter, + ArrayPrototypeForEach, + ArrayPrototypeJoin, + ArrayPrototypeMap, + ArrayPrototypePushApply, + ArrayPrototypeSlice, +} = primordials; + +const { + prepareMainThreadExecution, +} = require('internal/bootstrap/pre_execution'); +const { triggerUncaughtException } = internalBinding('errors'); +const { getOptionValue } = require('internal/options'); +const { emitExperimentalWarning } = require('internal/util'); +const { FilesWatcher } = require('internal/watch_mode/files_watcher'); +const { green, blue, red, white, clear } = require('internal/util/colors'); + +const { spawn } = require('child_process'); +const { inspect } = require('util'); +const { setTimeout, clearTimeout } = require('timers'); +const { resolve } = require('path'); +const { once, on } = require('events'); + + +prepareMainThreadExecution(false, false); +markBootstrapComplete(); + +// TODO(MoLow): Make kill signal configurable +const kKillSignal = 'SIGTERM'; +const kShouldFilterModules = getOptionValue('--watch-path').length === 0; +const kWatchedPaths = ArrayPrototypeMap(getOptionValue('--watch-path'), (path) => resolve(path)); +const kCommand = ArrayPrototypeSlice(process.argv, 1); +const kCommandStr = inspect(ArrayPrototypeJoin(kCommand, ' ')); +const args = ArrayPrototypeFilter(process.execArgv, (arg, i, arr) => + arg !== '--watch-path' && arr[i - 1] !== '--watch-path' && arg !== '--watch'); +ArrayPrototypePushApply(args, kCommand); + +const watcher = new FilesWatcher({ throttle: 500, mode: kShouldFilterModules ? 'filter' : 'all' }); +ArrayPrototypeForEach(kWatchedPaths, (p) => watcher.watchPath(p)); + +let graceTimer; +let child; +let exited; + +function start() { + exited = false; + const stdio = kShouldFilterModules ? ['inherit', 'inherit', 'inherit', 'ipc'] : undefined; + child = spawn(process.execPath, args, { stdio, env: { ...process.env, WATCH_REPORT_DEPENDENCIES: '1' } }); + watcher.watchChildProcessModules(child); + child.once('exit', (code) => { + exited = true; + if (code === 0) { + process.stdout.write(`${blue}Completed running ${kCommandStr}${white}\n`); + } else { + process.stdout.write(`${red}Failed running ${kCommandStr}${white}\n`); + } + }); +} + +async function killAndWait(signal = kKillSignal, force = false) { + child?.removeAllListeners(); + if (!child) { + return; + } + if ((child.killed || exited) && !force) { + return; + } + const onExit = once(child, 'exit'); + child.kill(signal); + const { 0: exitCode } = await onExit; + return exitCode; +} + +function reportGracefulTermination() { + // Log if process takes more than 500ms to stop. + let reported = false; + clearTimeout(graceTimer); + graceTimer = setTimeout(() => { + reported = true; + process.stdout.write(`${blue}Waiting for graceful termination...${white}\n`); + }, 500).unref(); + return () => { + clearTimeout(graceTimer); + if (reported) { + process.stdout.write(`${clear}${green}Gracefully restarted ${kCommandStr}${white}\n`); + } + }; +} + +async function stop() { + watcher.clearFileFilters(); + const clearGraceReport = reportGracefulTermination(); + await killAndWait(); + clearGraceReport(); +} + +async function restart() { + process.stdout.write(`${clear}${green}Restarting ${kCommandStr}${white}\n`); + await stop(); + start(); +} + +(async () => { + emitExperimentalWarning('Watch mode'); + + try { + start(); + + // eslint-disable-next-line no-unused-vars + for await (const _ of on(watcher, 'changed')) { + await restart(); + } + } catch (error) { + triggerUncaughtException(error, true /* fromPromise */); + } +})(); + +// Exiting gracefully to avoid stdout/stderr getting written after +// parent process is killed. +// this is fairly safe since user code cannot run in this process +function signalHandler(signal) { + return async () => { + watcher.clear(); + const exitCode = await killAndWait(signal, true); + process.exit(exitCode ?? 0); + }; +} +process.on('SIGTERM', signalHandler('SIGTERM')); +process.on('SIGINT', signalHandler('SIGINT')); diff --git a/lib/internal/main/worker_thread.js b/lib/internal/main/worker_thread.js index a8167b86ca2..dc094dc8a2d 100644 --- a/lib/internal/main/worker_thread.js +++ b/lib/internal/main/worker_thread.js @@ -8,7 +8,8 @@ const { ArrayPrototypePushApply, ArrayPrototypeSplice, ObjectDefineProperty, - PromisePrototypeCatch, + PromisePrototypeThen, + RegExpPrototypeExec, globalThis: { Atomics }, } = primordials; @@ -19,6 +20,7 @@ const { setupWarningHandler, setupFetch, setupWebCrypto, + setupCustomEvent, setupDebugEnv, setupPerfHooks, initializeDeprecations, @@ -71,6 +73,7 @@ setupDebugEnv(); setupWarningHandler(); setupFetch(); setupWebCrypto(); +setupCustomEvent(); initializeSourceMapsHandlers(); // Since worker threads cannot switch cwd, we do not need to @@ -90,11 +93,13 @@ const port = getEnvMessagePort(); if (process.env.NODE_CHANNEL_FD) { const workerThreadSetup = require('internal/process/worker_thread_only'); ObjectDefineProperty(process, 'channel', { + __proto__: null, enumerable: false, get: workerThreadSetup.unavailable('process.channel') }); ObjectDefineProperty(process, 'connected', { + __proto__: null, enumerable: false, get: workerThreadSetup.unavailable('process.connected') }); @@ -172,6 +177,7 @@ port.on('message', (message) => { // This is necessary for CJS module compilation. // TODO: pass this with something really internal. ObjectDefineProperty(process, '_eval', { + __proto__: null, configurable: true, enumerable: true, value: filename, @@ -180,7 +186,7 @@ port.on('message', (message) => { evalScript(name, filename); } else if (doEval === 'module') { const { evalModule } = require('internal/process/execution'); - PromisePrototypeCatch(evalModule(filename), (e) => { + PromisePrototypeThen(evalModule(filename), undefined, (e) => { workerOnGlobalUncaughtException(e, true); }); } else { @@ -261,4 +267,7 @@ process._fatalException = workerOnGlobalUncaughtException; markBootstrapComplete(); +// Necessary to reset RegExp statics before user code runs. +RegExpPrototypeExec(/^/, ''); + port.start(); diff --git a/lib/internal/modules/cjs/helpers.js b/lib/internal/modules/cjs/helpers.js index 3ae63b46195..3c49ab0a5d8 100644 --- a/lib/internal/modules/cjs/helpers.js +++ b/lib/internal/modules/cjs/helpers.js @@ -17,13 +17,14 @@ const { ERR_MANIFEST_DEPENDENCY_MISSING, ERR_UNKNOWN_BUILTIN_MODULE } = require('internal/errors').codes; -const { NativeModule } = require('internal/bootstrap/loaders'); +const { BuiltinModule } = require('internal/bootstrap/loaders'); const { validateString } = require('internal/validators'); const path = require('path'); const { pathToFileURL, fileURLToPath, URL } = require('internal/url'); const { getOptionValue } = require('internal/options'); +const { setOwnProperty } = require('internal/util'); const userConditions = getOptionValue('--conditions'); let debug = require('internal/util/debuglog').debuglog('module', (fn) => { @@ -41,10 +42,10 @@ const cjsConditions = new SafeSet([ ...userConditions, ]); -function loadNativeModule(filename, request) { - const mod = NativeModule.map.get(filename); +function loadBuiltinModule(filename, request) { + const mod = BuiltinModule.map.get(filename); if (mod?.canBeRequiredByUsers) { - debug('load native module %s', request); + debug('load built-in module %s', request); // compileForPublicLoader() throws if mod.canBeRequiredByUsers is false: mod.compileForPublicLoader(); return mod; @@ -72,7 +73,7 @@ function makeRequireFunction(mod, redirects) { const href = destination.href; if (destination.protocol === 'node:') { const specifier = destination.pathname; - const mod = loadNativeModule(specifier, href); + const mod = loadBuiltinModule(specifier, href); if (mod && mod.canBeRequiredByUsers) { return mod.exports; } @@ -117,7 +118,7 @@ function makeRequireFunction(mod, redirects) { resolve.paths = paths; - require.main = process.mainModule; + setOwnProperty(require, 'main', process.mainModule); // Enable support to add extra extension types. require.extensions = Module._extensions; @@ -171,6 +172,7 @@ function addBuiltinLibsToObject(object, dummyModuleName) { }; ObjectDefineProperty(object, name, { + __proto__: null, get: () => { const lib = dummyModule.require(name); @@ -178,6 +180,7 @@ function addBuiltinLibsToObject(object, dummyModuleName) { // non-enumerable property. delete object[name]; ObjectDefineProperty(object, name, { + __proto__: null, get: () => lib, set: setReal, configurable: true, @@ -227,7 +230,7 @@ module.exports = { addBuiltinLibsToObject, cjsConditions, hasEsmSyntax, - loadNativeModule, + loadBuiltinModule, makeRequireFunction, normalizeReferrerURL, stripBOM, diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index b4902850c7f..1bca6706ea9 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -33,6 +33,7 @@ const { ArrayPrototypeSplice, ArrayPrototypeUnshift, ArrayPrototypeUnshiftApply, + ArrayPrototypeFlatMap, Boolean, Error, JSONParse, @@ -49,8 +50,8 @@ const { ReflectApply, ReflectSet, RegExpPrototypeExec, - RegExpPrototypeTest, SafeMap, + SafeSet, SafeWeakMap, String, StringPrototypeCharAt, @@ -58,7 +59,6 @@ const { StringPrototypeEndsWith, StringPrototypeLastIndexOf, StringPrototypeIndexOf, - StringPrototypeMatch, StringPrototypeRepeat, StringPrototypeSlice, StringPrototypeSplit, @@ -74,12 +74,18 @@ module.exports = { get hasLoadedAnyUserCJSModule() { return hasLoadedAnyUserCJSModule; } }; -const { NativeModule } = require('internal/bootstrap/loaders'); +const { BuiltinModule } = require('internal/bootstrap/loaders'); const { maybeCacheSourceMap, } = require('internal/source_map/source_map_cache'); const { pathToFileURL, fileURLToPath, isURLInstance } = require('internal/url'); -const { deprecate } = require('internal/util'); +const { + deprecate, + emitExperimentalWarning, + kEmptyObject, + filterOwnProperties, + setOwnProperty, +} = require('internal/util'); const vm = require('vm'); const assert = require('internal/assert'); const fs = require('fs'); @@ -92,7 +98,7 @@ const { safeGetenv } = internalBinding('credentials'); const { cjsConditions, hasEsmSyntax, - loadNativeModule, + loadBuiltinModule, makeRequireFunction, normalizeReferrerURL, stripBOM, @@ -100,6 +106,7 @@ const { const { getOptionValue } = require('internal/options'); const preserveSymlinks = getOptionValue('--preserve-symlinks'); const preserveSymlinksMain = getOptionValue('--preserve-symlinks-main'); +const shouldReportRequiredModules = process.env.WATCH_REPORT_DEPENDENCIES; // Do not eagerly grab .manifest, it may be in TDZ const policy = getOptionValue('--experimental-policy') ? require('internal/process/policy') : @@ -162,17 +169,35 @@ function stat(filename) { return result; } +let _stat = stat; +ObjectDefineProperty(Module, '_stat', { + __proto__: null, + get() { return _stat; }, + set(stat) { + emitExperimentalWarning('Module._stat'); + _stat = stat; + return true; + }, + configurable: true, +}); + function updateChildren(parent, child, scan) { const children = parent?.children; if (children && !(scan && ArrayPrototypeIncludes(children, child))) ArrayPrototypePush(children, child); } +function reportModuleToWatchMode(filename) { + if (shouldReportRequiredModules && process.send) { + process.send({ 'watch:require': filename }); + } +} + const moduleParentCache = new SafeWeakMap(); function Module(id = '', parent) { this.id = id; this.path = path.dirname(id); - this.exports = {}; + setOwnProperty(this, 'exports', {}); moduleParentCache.set(this, parent); updateChildren(parent, this, false); this.filename = null; @@ -181,12 +206,18 @@ function Module(id = '', parent) { } const builtinModules = []; -for (const { 0: id, 1: mod } of NativeModule.map) { - if (mod.canBeRequiredByUsers) { +for (const { 0: id, 1: mod } of BuiltinModule.map) { + if (mod.canBeRequiredByUsers && + BuiltinModule.canBeRequiredWithoutScheme(id)) { ArrayPrototypePush(builtinModules, id); } } +const allBuiltins = new SafeSet( + ArrayPrototypeFlatMap(builtinModules, (bm) => [bm, `node:${bm}`]) +); +BuiltinModule.getSchemeOnlyModuleNames().forEach((builtin) => allBuiltins.add(`node:${builtin}`)); + ObjectFreeze(builtinModules); Module.builtinModules = builtinModules; @@ -209,6 +240,8 @@ const wrapper = [ ]; let wrapperProxy = new Proxy(wrapper, { + __proto__: null, + set(target, property, value, receiver) { patched = true; return ReflectSet(target, property, value, receiver); @@ -221,6 +254,7 @@ let wrapperProxy = new Proxy(wrapper, { }); ObjectDefineProperty(Module, 'wrap', { + __proto__: null, get() { return wrap; }, @@ -232,6 +266,7 @@ ObjectDefineProperty(Module, 'wrap', { }); ObjectDefineProperty(Module, 'wrapper', { + __proto__: null, get() { return wrapperProxy; }, @@ -244,7 +279,7 @@ ObjectDefineProperty(Module, 'wrapper', { const isPreloadingDesc = { get() { return isPreloading; } }; ObjectDefineProperty(Module.prototype, 'isPreloading', isPreloadingDesc); -ObjectDefineProperty(NativeModule.prototype, 'isPreloading', isPreloadingDesc); +ObjectDefineProperty(BuiltinModule.prototype, 'isPreloading', isPreloadingDesc); function getModuleParent() { return moduleParentCache.get(this); @@ -255,6 +290,7 @@ function setModuleParent(value) { } ObjectDefineProperty(Module.prototype, 'parent', { + __proto__: null, get: pendingDeprecation ? deprecate( getModuleParent, 'module.parent is deprecated due to accuracy issues. Please use ' + @@ -301,14 +337,13 @@ function readPackage(requestPath) { } try { - const parsed = JSONParse(json); - const filtered = { - name: parsed.name, - main: parsed.main, - exports: parsed.exports, - imports: parsed.imports, - type: parsed.type - }; + const filtered = filterOwnProperties(JSONParse(json), [ + 'name', + 'main', + 'exports', + 'imports', + 'type', + ]); packageJsonCache.set(jsonPath, filtered); return filtered; } catch (e) { @@ -318,6 +353,18 @@ function readPackage(requestPath) { } } +let _readPackage = readPackage; +ObjectDefineProperty(Module, '_readPackage', { + __proto__: null, + get() { return _readPackage; }, + set(readPackage) { + emitExperimentalWarning('Module._readPackage'); + _readPackage = readPackage; + return true; + }, + configurable: true, +}); + function readPackageScope(checkPath) { const rootSeparatorIndex = StringPrototypeIndexOf(checkPath, sep); let separatorIndex; @@ -326,7 +373,7 @@ function readPackageScope(checkPath) { checkPath = StringPrototypeSlice(checkPath, 0, separatorIndex); if (StringPrototypeEndsWith(checkPath, sep + 'node_modules')) return false; - const pjson = readPackage(checkPath + sep); + const pjson = _readPackage(checkPath + sep); if (pjson) return { data: pjson, path: checkPath, @@ -336,7 +383,7 @@ function readPackageScope(checkPath) { } function tryPackage(requestPath, exts, isMain, originalPath) { - const pkg = readPackage(requestPath)?.main; + const pkg = _readPackage(requestPath)?.main; if (!pkg) { return tryExtensions(path.resolve(requestPath, 'index'), exts, isMain); @@ -382,7 +429,7 @@ const realpathCache = new SafeMap(); // keep symlinks intact, otherwise resolve to the // absolute realpath. function tryFile(requestPath, isMain) { - const rc = stat(requestPath); + const rc = _stat(requestPath); if (rc !== 0) return; if (preserveSymlinks && !isMain) { return path.resolve(requestPath); @@ -472,11 +519,11 @@ const EXPORTS_PATTERN = /^((?:@[^/\\%]+\/)?[^./\\%][^/\\%]*)(\/.*)?$/; function resolveExports(nmPath, request) { // The implementation's behavior is meant to mirror resolution in ESM. const { 1: name, 2: expansion = '' } = - StringPrototypeMatch(request, EXPORTS_PATTERN) || []; + RegExpPrototypeExec(EXPORTS_PATTERN, request) || kEmptyObject; if (!name) return; const pkgPath = path.resolve(nmPath, name); - const pkg = readPackage(pkgPath); + const pkg = _readPackage(pkgPath); if (pkg?.exports != null) { try { return finalizeEsmResolution(packageExportsResolve( @@ -509,14 +556,14 @@ Module._findPath = function(request, paths, isMain) { StringPrototypeCharCodeAt(request, request.length - 1) === CHAR_FORWARD_SLASH; if (!trailingSlash) { - trailingSlash = RegExpPrototypeTest(trailingSlashRegex, request); + trailingSlash = RegExpPrototypeExec(trailingSlashRegex, request) !== null; } // For each path for (let i = 0; i < paths.length; i++) { // Don't search further if path doesn't exist const curPath = paths[i]; - if (curPath && stat(curPath) < 1) continue; + if (curPath && _stat(curPath) < 1) continue; if (!absoluteRequest) { const exportsResolved = resolveExports(curPath, request); @@ -527,7 +574,7 @@ Module._findPath = function(request, paths, isMain) { const basePath = path.resolve(curPath, request); let filename; - const rc = stat(basePath); + const rc = _stat(basePath); if (!trailingSlash) { if (rc === 0) { // File. if (!isMain) { @@ -665,7 +712,8 @@ if (isWindows) { } Module._resolveLookupPaths = function(request, parent) { - if (NativeModule.canBeRequiredByUsers(request)) { + if (BuiltinModule.canBeRequiredByUsers(request) && + BuiltinModule.canBeRequiredWithoutScheme(request)) { debug('looking for %j in []', request); return null; } @@ -713,6 +761,8 @@ function emitCircularRequireWarning(prop) { // A Proxy that can be used as the prototype of a module.exports object and // warns when non-existent properties are accessed. const CircularRequirePrototypeWarningProxy = new Proxy({}, { + __proto__: null, + get(target, prop) { // Allow __esModule access in any case because it is used in the output // of transpiled code to determine whether something comes from an @@ -750,7 +800,7 @@ function getExportsForCircularRequire(module) { // Check the cache for the requested file. // 1. If a module already exists in the cache: return its exports object. // 2. If the module is native: call -// `NativeModule.prototype.compileForPublicLoader()` and return the exports. +// `BuiltinModule.prototype.compileForPublicLoader()` and return the exports. // 3. Otherwise, create a new module for the file and save it to the cache. // Then have it load the file contents before returning its exports // object. @@ -763,6 +813,7 @@ Module._load = function(request, parent, isMain) { // cache key names. relResolveCacheIdentifier = `${parent.path}\x00${request}`; const filename = relativeResolveCache[relResolveCacheIdentifier]; + reportModuleToWatchMode(filename); if (filename !== undefined) { const cachedModule = Module._cache[filename]; if (cachedModule !== undefined) { @@ -775,19 +826,19 @@ Module._load = function(request, parent, isMain) { } } - const filename = Module._resolveFilename(request, parent, isMain); - if (StringPrototypeStartsWith(filename, 'node:')) { + if (StringPrototypeStartsWith(request, 'node:')) { // Slice 'node:' prefix - const id = StringPrototypeSlice(filename, 5); + const id = StringPrototypeSlice(request, 5); - const module = loadNativeModule(id, request); + const module = loadBuiltinModule(id, request); if (!module?.canBeRequiredByUsers) { - throw new ERR_UNKNOWN_BUILTIN_MODULE(filename); + throw new ERR_UNKNOWN_BUILTIN_MODULE(request); } return module.exports; } + const filename = Module._resolveFilename(request, parent, isMain); const cachedModule = Module._cache[filename]; if (cachedModule !== undefined) { updateChildren(parent, cachedModule, true); @@ -801,8 +852,11 @@ Module._load = function(request, parent, isMain) { } } - const mod = loadNativeModule(filename, request); - if (mod?.canBeRequiredByUsers) return mod.exports; + const mod = loadBuiltinModule(filename, request); + if (mod?.canBeRequiredByUsers && + BuiltinModule.canBeRequiredWithoutScheme(filename)) { + return mod.exports; + } // Don't call updateChildren(), Module constructor already does. const module = cachedModule || new Module(filename, parent); @@ -812,6 +866,8 @@ Module._load = function(request, parent, isMain) { module.id = '.'; } + reportModuleToWatchMode(filename); + Module._cache[filename] = module; if (parent !== undefined) { relativeResolveCache[relResolveCacheIdentifier] = filename; @@ -846,8 +902,15 @@ Module._load = function(request, parent, isMain) { }; Module._resolveFilename = function(request, parent, isMain, options) { - if (StringPrototypeStartsWith(request, 'node:') || - NativeModule.canBeRequiredByUsers(request)) { + if ( + ( + StringPrototypeStartsWith(request, 'node:') && + BuiltinModule.canBeRequiredByUsers(StringPrototypeSlice(request, 5)) + ) || ( + BuiltinModule.canBeRequiredByUsers(request) && + BuiltinModule.canBeRequiredWithoutScheme(request) + ) + ) { return request; } @@ -887,20 +950,19 @@ Module._resolveFilename = function(request, parent, isMain, options) { paths = Module._resolveLookupPaths(request, parent); } - if (parent?.filename) { - if (request[0] === '#') { - const pkg = readPackageScope(parent.filename) || {}; - if (pkg.data?.imports != null) { - try { - return finalizeEsmResolution( - packageImportsResolve(request, pathToFileURL(parent.filename), - cjsConditions), request, parent.filename, - pkg.path); - } catch (e) { - if (e.code === 'ERR_MODULE_NOT_FOUND') - throw createEsmNotFoundErr(request); - throw e; - } + if (request[0] === '#' && (parent?.filename || parent?.id === '')) { + const parentPath = parent?.filename ?? process.cwd() + path.sep; + const pkg = readPackageScope(parentPath) || {}; + if (pkg.data?.imports != null) { + try { + return finalizeEsmResolution( + packageImportsResolve(request, pathToFileURL(parentPath), + cjsConditions), parentPath, request, + pkg.path); + } catch (e) { + if (e.code === 'ERR_MODULE_NOT_FOUND') + throw createEsmNotFoundErr(request); + throw e; } } } @@ -938,7 +1000,7 @@ Module._resolveFilename = function(request, parent, isMain, options) { function finalizeEsmResolution(match, request, parentPath, pkgPath) { const { resolved, exact } = match; - if (RegExpPrototypeTest(encodedSepRegEx, resolved)) + if (RegExpPrototypeExec(encodedSepRegEx, resolved) !== null) throw new ERR_INVALID_MODULE_SPECIFIER( resolved, 'must not include encoded "/" or "\\" characters', parentPath); const filename = fileURLToPath(resolved); @@ -1023,8 +1085,7 @@ function wrapSafe(filename, content, cjsModuleInstance) { displayErrors: true, importModuleDynamically: async (specifier, _, importAssertions) => { const loader = asyncESM.esmLoader; - return loader.import(specifier, - loader.getBaseURL(normalizeReferrerURL(filename)), + return loader.import(specifier, normalizeReferrerURL(filename), importAssertions); }, }); @@ -1040,8 +1101,7 @@ function wrapSafe(filename, content, cjsModuleInstance) { filename, importModuleDynamically(specifier, _, importAssertions) { const loader = asyncESM.esmLoader; - return loader.import(specifier, - loader.getBaseURL(normalizeReferrerURL(filename)), + return loader.import(specifier, normalizeReferrerURL(filename), importAssertions); }, }); @@ -1170,7 +1230,7 @@ Module._extensions['.json'] = function(module, filename) { } try { - module.exports = JSONParse(stripBOM(content)); + setOwnProperty(module, 'exports', JSONParse(stripBOM(content))); } catch (err) { err.message = filename + ': ' + err.message; throw err; @@ -1284,12 +1344,17 @@ Module._preloadModules = function(requests) { }; Module.syncBuiltinESMExports = function syncBuiltinESMExports() { - for (const mod of NativeModule.map.values()) { - if (mod.canBeRequiredByUsers) { + for (const mod of BuiltinModule.map.values()) { + if (mod.canBeRequiredByUsers && + BuiltinModule.canBeRequiredWithoutScheme(mod.id)) { mod.syncExports(); } } }; +Module.isBuiltin = function isBuiltin(moduleName) { + return allBuiltins.has(moduleName); +}; + // Backwards compatibility Module.Module = Module; diff --git a/lib/internal/modules/esm/fetch_module.js b/lib/internal/modules/esm/fetch_module.js index 2cbc6ea72d0..7638f94b3fe 100644 --- a/lib/internal/modules/esm/fetch_module.js +++ b/lib/internal/modules/esm/fetch_module.js @@ -1,26 +1,24 @@ 'use strict'; const { - ArrayPrototypePush, - Promise, + ObjectPrototypeHasOwnProperty, PromisePrototypeThen, - PromiseResolve, SafeMap, StringPrototypeEndsWith, StringPrototypeSlice, StringPrototypeStartsWith, } = primordials; const { - Buffer: { - concat: BufferConcat - } + Buffer: { concat: BufferConcat }, } = require('buffer'); const { ERR_NETWORK_IMPORT_DISALLOWED, ERR_NETWORK_IMPORT_BAD_RESPONSE, + ERR_MODULE_NOT_FOUND, } = require('internal/errors').codes; const { URL } = require('internal/url'); const net = require('net'); - +const { once } = require('events'); +const { compose } = require('stream'); /** * @typedef CacheEntry * @property {Promise | string} resolvedHREF @@ -32,6 +30,9 @@ const net = require('net'); * Only for GET requests, other requests would need new Map * HTTP cache semantics keep diff caches * + * It caches either the promise or the cache entry since import.meta.url needs + * the value synchronously for the response location after all redirects. + * * Maps HREF to pending cache entry * @type {Map | CacheEntry>} */ @@ -47,11 +48,11 @@ let HTTPSAgent; function HTTPSGet(url, opts) { const https = require('https'); // [1] HTTPSAgent ??= new https.Agent({ // [2] - keepAlive: true + keepAlive: true, }); return https.get(url, { agent: HTTPSAgent, - ...opts + ...opts, }); } @@ -59,11 +60,11 @@ let HTTPAgent; function HTTPGet(url, opts) { const http = require('http'); // [1] HTTPAgent ??= new http.Agent({ // [2] - keepAlive: true + keepAlive: true, }); return http.get(url, { agent: HTTPAgent, - ...opts + ...opts, }); } @@ -88,6 +89,28 @@ function createUnzip() { return createUnzip(); } +/** + * Redirection status code as per section 6.4 of RFC 7231: + * https://datatracker.ietf.org/doc/html/rfc7231#section-6.4 + * and RFC 7238: + * https://datatracker.ietf.org/doc/html/rfc7238 + * @param {number} statusCode + * @returns {boolean} + */ +function isRedirect(statusCode) { + switch (statusCode) { + case 300: // Multiple Choices + case 301: // Moved Permanently + case 302: // Found + case 303: // See Other + case 307: // Temporary Redirect + case 308: // Permanent Redirect + return true; + default: + return false; + } +} + /** * @param {URL} parsed * @returns {Promise | CacheEntry} @@ -98,59 +121,48 @@ function fetchWithRedirects(parsed) { return existing; } const handler = parsed.protocol === 'http:' ? HTTPGet : HTTPSGet; - const result = new Promise((fulfill, reject) => { + const result = (async () => { const req = handler(parsed, { - headers: { - Accept: '*/*' - } - }) - .on('error', reject) - .on('response', (res) => { - function dispose() { - req.destroy(); - res.destroy(); - } - if (res.statusCode >= 300 && res.statusCode <= 303) { - if (res.headers.location) { - dispose(); - try { - const location = new URL(res.headers.location, parsed); - if (location.protocol !== 'http:' && - location.protocol !== 'https:') { - reject(new ERR_NETWORK_IMPORT_DISALLOWED( - res.headers.location, - parsed.href, - 'cannot redirect to non-network location')); - return; - } - return PromisePrototypeThen( - PromiseResolve(fetchWithRedirects(location)), - (entry) => { - cacheForGET.set(parsed.href, entry); - fulfill(entry); - }); - } catch (e) { - dispose(); - reject(e); - } + headers: { Accept: '*/*' }, + }); + // Note that `once` is used here to handle `error` and that it hits the + // `finally` on network error/timeout. + const { 0: res } = await once(req, 'response'); + try { + const hasLocation = ObjectPrototypeHasOwnProperty(res.headers, 'location'); + if (isRedirect(res.statusCode) && hasLocation) { + const location = new URL(res.headers.location, parsed); + if (location.protocol !== 'http:' && location.protocol !== 'https:') { + throw new ERR_NETWORK_IMPORT_DISALLOWED( + res.headers.location, + parsed.href, + 'cannot redirect to non-network location' + ); } + const entry = await fetchWithRedirects(location); + cacheForGET.set(parsed.href, entry); + return entry; } - if (res.statusCode > 303 || res.statusCode < 200) { - dispose(); - reject( - new ERR_NETWORK_IMPORT_BAD_RESPONSE( - parsed.href, - 'HTTP response returned status code of ' + res.statusCode)); - return; + if (res.statusCode === 404) { + const err = new ERR_MODULE_NOT_FOUND(parsed.href, null); + err.message = `Cannot find module '${parsed.href}', HTTP 404`; + throw err; + } + // This condition catches all unsupported status codes, including + // 3xx redirection codes without `Location` HTTP header. + if (res.statusCode < 200 || res.statusCode >= 300) { + throw new ERR_NETWORK_IMPORT_DISALLOWED( + res.headers.location, + parsed.href, + 'cannot redirect to non-network location'); } const { headers } = res; const contentType = headers['content-type']; if (!contentType) { - dispose(); - reject(new ERR_NETWORK_IMPORT_BAD_RESPONSE( + throw new ERR_NETWORK_IMPORT_BAD_RESPONSE( parsed.href, - 'the \'Content-Type\' header is required')); - return; + "the 'Content-Type' header is required" + ); } /** * @type {CacheEntry} @@ -158,58 +170,31 @@ function fetchWithRedirects(parsed) { const entry = { resolvedHREF: parsed.href, headers: { - 'content-type': res.headers['content-type'] + 'content-type': res.headers['content-type'], }, - body: new Promise((f, r) => { - const buffers = []; - let size = 0; + body: (async () => { let bodyStream = res; - let onError; if (res.headers['content-encoding'] === 'br') { - bodyStream = createBrotliDecompress(); - onError = function onError(error) { - bodyStream.close(); - dispose(); - reject(error); - r(error); - }; - res.on('error', onError); - res.pipe(bodyStream); - } else if (res.headers['content-encoding'] === 'gzip' || - res.headers['content-encoding'] === 'deflate') { - bodyStream = createUnzip(); - onError = function onError(error) { - bodyStream.close(); - dispose(); - reject(error); - r(error); - }; - res.on('error', onError); - res.pipe(bodyStream); - } else { - onError = function onError(error) { - dispose(); - reject(error); - r(error); - }; + bodyStream = compose(res, createBrotliDecompress()); + } else if ( + res.headers['content-encoding'] === 'gzip' || + res.headers['content-encoding'] === 'deflate' + ) { + bodyStream = compose(res, createUnzip()); } - bodyStream.on('error', onError); - bodyStream.on('data', (d) => { - ArrayPrototypePush(buffers, d); - size += d.length; - }); - bodyStream.on('end', () => { - const body = entry.body = /** @type {Buffer} */( - BufferConcat(buffers, size) - ); - f(body); - }); - }), + const buffers = await bodyStream.toArray(); + const body = BufferConcat(buffers); + entry.body = body; + return body; + })(), }; cacheForGET.set(parsed.href, entry); - fulfill(entry); - }); - }); + await entry.body; + return entry; + } finally { + req.destroy(); + } + })(); cacheForGET.set(parsed.href, result); return result; } @@ -226,8 +211,10 @@ allowList.addRange('127.0.0.1', '127.255.255.255'); */ async function isLocalAddress(hostname) { try { - if (StringPrototypeStartsWith(hostname, '[') && - StringPrototypeEndsWith(hostname, ']')) { + if ( + StringPrototypeStartsWith(hostname, '[') && + StringPrototypeEndsWith(hostname, ']') + ) { hostname = StringPrototypeSlice(hostname, 1, -1); } const addr = await dnsLookup(hostname, { verbatim: true }); @@ -275,5 +262,5 @@ function fetchModule(parsed, { parentURL }) { } module.exports = { - fetchModule: fetchModule + fetchModule, }; diff --git a/lib/internal/modules/esm/formats.js b/lib/internal/modules/esm/formats.js index f9da01402e7..f71e6ae689c 100644 --- a/lib/internal/modules/esm/formats.js +++ b/lib/internal/modules/esm/formats.js @@ -1,7 +1,7 @@ 'use strict'; const { - RegExpPrototypeTest, + RegExpPrototypeExec, } = primordials; const { getOptionValue } = require('internal/options'); @@ -35,10 +35,10 @@ if (experimentalWasmModules) { */ function mimeToFormat(mime) { if ( - RegExpPrototypeTest( + RegExpPrototypeExec( /\s*(text|application)\/javascript\s*(;\s*charset=utf-?8\s*)?/i, mime - ) + ) !== null ) return 'module'; if (mime === 'application/json') return 'json'; if (experimentalWasmModules && mime === 'application/wasm') return 'wasm'; diff --git a/lib/internal/modules/esm/get_format.js b/lib/internal/modules/esm/get_format.js index 5ae0e17dcfb..5fd9a256f1c 100644 --- a/lib/internal/modules/esm/get_format.js +++ b/lib/internal/modules/esm/get_format.js @@ -1,7 +1,5 @@ 'use strict'; const { - ObjectAssign, - ObjectCreate, ObjectPrototypeHasOwnProperty, PromisePrototypeThen, PromiseResolve, @@ -25,13 +23,14 @@ const { getPackageType, getPackageScopeConfig } = require('internal/modules/esm/ const { URL, fileURLToPath } = require('internal/url'); const { ERR_UNKNOWN_FILE_EXTENSION } = require('internal/errors').codes; -const protocolHandlers = ObjectAssign(ObjectCreate(null), { +const protocolHandlers = { + '__proto__': null, 'data:': getDataProtocolModuleFormat, 'file:': getFileProtocolModuleFormat, 'http:': getHttpProtocolModuleFormat, 'https:': getHttpProtocolModuleFormat, 'node:'() { return 'builtin'; }, -}); +}; function getDataProtocolModuleFormat(parsed) { const { 1: mime } = RegExpPrototypeExec( diff --git a/lib/internal/modules/esm/get_source.js b/lib/internal/modules/esm/get_source.js deleted file mode 100644 index ab2a9888f76..00000000000 --- a/lib/internal/modules/esm/get_source.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -const { - ArrayPrototypeConcat, - RegExpPrototypeExec, - decodeURIComponent, -} = primordials; -const { getOptionValue } = require('internal/options'); -const { fetchModule } = require('internal/modules/esm/fetch_module'); - -// Do not eagerly grab .manifest, it may be in TDZ -const policy = getOptionValue('--experimental-policy') ? - require('internal/process/policy') : - null; -const experimentalNetworkImports = - getOptionValue('--experimental-network-imports'); - -const { Buffer: { from: BufferFrom } } = require('buffer'); - -const fs = require('internal/fs/promises').exports; -const { URL } = require('internal/url'); -const { - ERR_INVALID_URL, - ERR_UNSUPPORTED_ESM_URL_SCHEME, -} = require('internal/errors').codes; -const readFileAsync = fs.readFile; - -const DATA_URL_PATTERN = /^[^/]+\/[^,;]+(?:[^,]*?)(;base64)?,([\s\S]*)$/; - -async function defaultGetSource(url, context, defaultGetSource) { - const parsed = new URL(url); - let source; - if (parsed.protocol === 'file:') { - source = await readFileAsync(parsed); - } else if (parsed.protocol === 'data:') { - const match = RegExpPrototypeExec(DATA_URL_PATTERN, parsed.pathname); - if (!match) { - throw new ERR_INVALID_URL(url); - } - const { 1: base64, 2: body } = match; - source = BufferFrom(decodeURIComponent(body), base64 ? 'base64' : 'utf8'); - } else if (experimentalNetworkImports && ( - parsed.protocol === 'https:' || - parsed.protocol === 'http:' - )) { - const res = await fetchModule(parsed, context); - source = await res.body; - } else { - throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, ArrayPrototypeConcat([ - 'file', - 'data', - experimentalNetworkImports ? ['https', 'http'] : [], - ])); - } - if (policy?.manifest) { - policy.manifest.assertIntegrity(parsed, source); - } - return source; -} -exports.defaultGetSource = defaultGetSource; diff --git a/lib/internal/modules/esm/initialize_import_meta.js b/lib/internal/modules/esm/initialize_import_meta.js index f1daabbb642..d6be06f23e1 100644 --- a/lib/internal/modules/esm/initialize_import_meta.js +++ b/lib/internal/modules/esm/initialize_import_meta.js @@ -26,15 +26,13 @@ function createImportMetaResolve(defaultParentUrl) { * @param {{url: string}} context */ function initializeImportMeta(meta, context) { - let url = context.url; + const { url } = context; // Alphabetical if (experimentalImportMetaResolve) { meta.resolve = createImportMetaResolve(url); } - url = asyncESM.esmLoader.getBaseURL(url); - meta.url = url; } diff --git a/lib/internal/modules/esm/load.js b/lib/internal/modules/esm/load.js index 6defb598a2a..86b31830457 100644 --- a/lib/internal/modules/esm/load.js +++ b/lib/internal/modules/esm/load.js @@ -1,8 +1,67 @@ 'use strict'; +const { + ArrayPrototypePush, + RegExpPrototypeExec, + decodeURIComponent, +} = primordials; + const { defaultGetFormat } = require('internal/modules/esm/get_format'); -const { defaultGetSource } = require('internal/modules/esm/get_source'); const { validateAssertions } = require('internal/modules/esm/assert'); +const { getOptionValue } = require('internal/options'); +const { fetchModule } = require('internal/modules/esm/fetch_module'); + +// Do not eagerly grab .manifest, it may be in TDZ +const policy = getOptionValue('--experimental-policy') ? + require('internal/process/policy') : + null; +const experimentalNetworkImports = + getOptionValue('--experimental-network-imports'); + +const { Buffer: { from: BufferFrom } } = require('buffer'); + +const { readFile: readFileAsync } = require('internal/fs/promises').exports; +const { URL } = require('internal/url'); +const { + ERR_INVALID_URL, + ERR_UNSUPPORTED_ESM_URL_SCHEME, +} = require('internal/errors').codes; + +const DATA_URL_PATTERN = /^[^/]+\/[^,;]+(?:[^,]*?)(;base64)?,([\s\S]*)$/; + +async function getSource(url, context) { + const parsed = new URL(url); + let responseURL = url; + let source; + if (parsed.protocol === 'file:') { + source = await readFileAsync(parsed); + } else if (parsed.protocol === 'data:') { + const match = RegExpPrototypeExec(DATA_URL_PATTERN, parsed.pathname); + if (!match) { + throw new ERR_INVALID_URL(url); + } + const { 1: base64, 2: body } = match; + source = BufferFrom(decodeURIComponent(body), base64 ? 'base64' : 'utf8'); + } else if (experimentalNetworkImports && ( + parsed.protocol === 'https:' || + parsed.protocol === 'http:' + )) { + const res = await fetchModule(parsed, context); + source = await res.body; + responseURL = res.resolvedHREF; + } else { + const supportedSchemes = ['file', 'data']; + if (experimentalNetworkImports) { + ArrayPrototypePush(supportedSchemes, 'http', 'https'); + } + throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, supportedSchemes); + } + if (policy?.manifest) { + policy.manifest.assertIntegrity(parsed, source); + } + return { responseURL, source }; +} + /** * Node.js default load hook. @@ -11,6 +70,7 @@ const { validateAssertions } = require('internal/modules/esm/assert'); * @returns {object} */ async function defaultLoad(url, context) { + let responseURL = url; const { importAssertions } = context; let { format, @@ -29,11 +89,12 @@ async function defaultLoad(url, context) { ) { source = null; } else if (source == null) { - source = await defaultGetSource(url, context); + ({ responseURL, source } = await getSource(url, context)); } return { format, + responseURL, source, }; } diff --git a/lib/internal/modules/esm/loader.js b/lib/internal/modules/esm/loader.js index 16b832527f7..d247f5327ed 100644 --- a/lib/internal/modules/esm/loader.js +++ b/lib/internal/modules/esm/loader.js @@ -8,33 +8,39 @@ const { ArrayIsArray, ArrayPrototypeJoin, ArrayPrototypePush, - FunctionPrototypeBind, FunctionPrototypeCall, ObjectAssign, ObjectCreate, + ObjectDefineProperty, ObjectSetPrototypeOf, - PromiseAll, RegExpPrototypeExec, - SafeArrayIterator, + SafePromiseAll, SafeWeakMap, - StringPrototypeStartsWith, + StringPrototypeSlice, + StringPrototypeToUpperCase, globalThis, } = primordials; const { MessageChannel } = require('internal/worker/io'); const { + ERR_LOADER_CHAIN_INCOMPLETE, ERR_INTERNAL_ASSERTION, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_INVALID_RETURN_PROPERTY_VALUE, ERR_INVALID_RETURN_VALUE, - ERR_UNKNOWN_MODULE_FORMAT + ERR_UNKNOWN_MODULE_FORMAT, } = require('internal/errors').codes; const { pathToFileURL, isURLInstance, URL } = require('internal/url'); +const { emitExperimentalWarning } = require('internal/util'); const { isAnyArrayBuffer, isArrayBufferView, } = require('internal/util/types'); +const { + validateObject, + validateString, +} = require('internal/validators'); const ModuleMap = require('internal/modules/esm/module_map'); const ModuleJob = require('internal/modules/esm/module_job'); @@ -49,9 +55,123 @@ const { defaultLoad } = require('internal/modules/esm/load'); const { translators } = require( 'internal/modules/esm/translators'); const { getOptionValue } = require('internal/options'); -const { - fetchModule, -} = require('internal/modules/esm/fetch_module'); + +/** + * @typedef {object} ExportedHooks + * @property {Function} globalPreload + * @property {Function} resolve + * @property {Function} load + */ + +/** + * @typedef {Record} ModuleExports + */ + +/** + * @typedef {object} KeyedExports + * @property {ModuleExports} exports + * @property {URL['href']} url + */ + +/** + * @typedef {object} KeyedHook + * @property {Function} fn + * @property {URL['href']} url + */ + +/** + * @typedef {'builtin'|'commonjs'|'json'|'module'|'wasm'} ModuleFormat + */ + +/** + * @typedef {ArrayBuffer|TypedArray|string} ModuleSource + */ + +// [2] `validate...()`s throw the wrong error + +let emittedSpecifierResolutionWarning = false; + +/** + * A utility function to iterate through a hook chain, track advancement in the + * chain, and generate and supply the `next` argument to the custom + * hook. + * @param {KeyedHook[]} chain The whole hook chain. + * @param {object} meta Properties that change as the current hook advances + * along the chain. + * @param {boolean} meta.chainFinished Whether the end of the chain has been + * reached AND invoked. + * @param {string} meta.hookErrIdentifier A user-facing identifier to help + * pinpoint where an error occurred. Ex "file:///foo.mjs 'resolve'". + * @param {number} meta.hookIndex A non-negative integer tracking the current + * position in the hook chain. + * @param {string} meta.hookName The kind of hook the chain is (ex 'resolve') + * @param {boolean} meta.shortCircuited Whether a hook signaled a short-circuit. + * @param {(hookErrIdentifier, hookArgs) => void} validate A wrapper function + * containing all validation of a custom loader hook's intermediary output. Any + * validation within MUST throw. + * @returns {function next(...hookArgs)} The next hook in the chain. + */ +function nextHookFactory(chain, meta, { validateArgs, validateOutput }) { + // First, prepare the current + const { hookName } = meta; + const { + fn: hook, + url: hookFilePath, + } = chain[meta.hookIndex]; + + // ex 'nextResolve' + const nextHookName = `next${ + StringPrototypeToUpperCase(hookName[0]) + + StringPrototypeSlice(hookName, 1) + }`; + + // When hookIndex is 0, it's reached the default, which does not call next() + // so feed it a noop that blows up if called, so the problem is obvious. + const generatedHookIndex = meta.hookIndex; + let nextNextHook; + if (meta.hookIndex > 0) { + // Now, prepare the next: decrement the pointer so the next call to the + // factory generates the next link in the chain. + meta.hookIndex--; + + nextNextHook = nextHookFactory(chain, meta, { validateArgs, validateOutput }); + } else { + // eslint-disable-next-line func-name-matching + nextNextHook = function chainAdvancedTooFar() { + throw new ERR_INTERNAL_ASSERTION( + `ESM custom loader '${hookName}' advanced beyond the end of the chain.` + ); + }; + } + + return ObjectDefineProperty( + async (arg0 = undefined, context) => { + // Update only when hook is invoked to avoid fingering the wrong filePath + meta.hookErrIdentifier = `${hookFilePath} '${hookName}'`; + + validateArgs(`${meta.hookErrIdentifier} hook's ${nextHookName}()`, arg0, context); + + const outputErrIdentifier = `${chain[generatedHookIndex].url} '${hookName}' hook's ${nextHookName}()`; + + // Set when next is actually called, not just generated. + if (generatedHookIndex === 0) { meta.chainFinished = true; } + + if (context) { // `context` has already been validated, so no fancy check needed. + ObjectAssign(meta.context, context); + } + + const output = await hook(arg0, meta.context, nextNextHook); + + validateOutput(outputErrIdentifier, output); + + if (output?.shortCircuit === true) { meta.shortCircuited = true; } + return output; + + }, + 'name', + { __proto__: null, value: nextHookName }, + ); +} /** * An ESMLoader instance is used as the main entry point for loading ES modules. @@ -59,31 +179,38 @@ const { * the main module and everything in its dependency graph. */ class ESMLoader { - /** - * Prior to ESM loading. These are called once before any modules are started. - * @private - * @property {Function[]} globalPreloaders First-in-first-out list of - * preload hooks. - */ - #globalPreloaders = []; - - /** - * Phase 2 of 2 in ESM loading. - * @private - * @property {Function[]} loaders First-in-first-out list of loader hooks. - */ - #loaders = [ - defaultLoad, - ]; - - /** - * Phase 1 of 2 in ESM loading. - * @private - * @property {Function[]} resolvers First-in-first-out list of resolver hooks - */ - #resolvers = [ - defaultResolve, - ]; + #hooks = { + /** + * Prior to ESM loading. These are called once before any modules are started. + * @private + * @property {KeyedHook[]} globalPreload Last-in-first-out list of preload hooks. + */ + globalPreload: [], + + /** + * Phase 2 of 2 in ESM loading (phase 1 is below). + * @private + * @property {KeyedHook[]} load Last-in-first-out collection of loader hooks. + */ + load: [ + { + fn: defaultLoad, + url: 'node:internal/modules/esm/load', + }, + ], + + /** + * Phase 1 of 2 in ESM loading. + * @private + * @property {KeyedHook[]} resolve Last-in-first-out collection of resolve hooks. + */ + resolve: [ + { + fn: defaultResolve, + url: 'node:internal/modules/esm/resolve', + }, + ], + }; #importMetaInitializer = initializeImportMeta; @@ -107,6 +234,30 @@ class ESMLoader { */ translators = translators; + constructor() { + if (getOptionValue('--experimental-loader').length > 0) { + emitExperimentalWarning('Custom ESM Loaders'); + } + if (getOptionValue('--experimental-network-imports')) { + emitExperimentalWarning('Network Imports'); + } + if ( + !emittedSpecifierResolutionWarning && + getOptionValue('--experimental-specifier-resolution') === 'node' + ) { + process.emitWarning( + 'The Node.js specifier resolution flag is experimental. It could change or be removed at any time.', + 'ExperimentalWarning' + ); + emittedSpecifierResolutionWarning = true; + } + } + + /** + * + * @param {ModuleExports} exports + * @returns {ExportedHooks} + */ static pluckHooks({ globalPreload, resolve, @@ -152,16 +303,14 @@ class ESMLoader { 'DeprecationWarning', ); - // Use .bind() to avoid giving access to the Loader instance when called. if (globalPreload) { - acceptedHooks.globalPreloader = - FunctionPrototypeBind(globalPreload, null); + acceptedHooks.globalPreload = globalPreload; } if (resolve) { - acceptedHooks.resolver = FunctionPrototypeBind(resolve, null); + acceptedHooks.resolve = resolve; } if (load) { - acceptedHooks.loader = FunctionPrototypeBind(load, null); + acceptedHooks.load = load; } return acceptedHooks; @@ -170,38 +319,53 @@ class ESMLoader { /** * Collect custom/user-defined hook(s). After all hooks have been collected, * calls global preload hook(s). - * @param {object | object[]} customLoaders A list of exports from - * user-defined loaders (as returned by ESMLoader.import()). + * @param {KeyedExports} customLoaders + * A list of exports from user-defined loaders (as returned by + * ESMLoader.import()). */ - async addCustomLoaders( + addCustomLoaders( customLoaders = [], ) { - if (!ArrayIsArray(customLoaders)) customLoaders = [customLoaders]; - for (let i = 0; i < customLoaders.length; i++) { - const exports = customLoaders[i]; const { - globalPreloader, - resolver, - loader, + exports, + url, + } = customLoaders[i]; + const { + globalPreload, + resolve, + load, } = ESMLoader.pluckHooks(exports); - if (globalPreloader) ArrayPrototypePush( - this.#globalPreloaders, - FunctionPrototypeBind(globalPreloader, null), // [1] - ); - if (resolver) ArrayPrototypePush( - this.#resolvers, - FunctionPrototypeBind(resolver, null), // [1] - ); - if (loader) ArrayPrototypePush( - this.#loaders, - FunctionPrototypeBind(loader, null), // [1] - ); + if (globalPreload) { + ArrayPrototypePush( + this.#hooks.globalPreload, + { + fn: globalPreload, + url, + }, + ); + } + if (resolve) { + ArrayPrototypePush( + this.#hooks.resolve, + { + fn: resolve, + url, + }, + ); + } + if (load) { + ArrayPrototypePush( + this.#hooks.load, + { + fn: load, + url, + }, + ); + } } - // [1] ensure hook function is not bound to ESMLoader instance - this.preload(); } @@ -214,9 +378,7 @@ class ESMLoader { const module = new ModuleWrap(url, undefined, source, 0, 0); callbackMap.set(module, { importModuleDynamically: (specifier, { url }, importAssertions) => { - return this.import(specifier, - this.getBaseURL(url), - importAssertions); + return this.import(specifier, url, importAssertions); } }); @@ -232,43 +394,6 @@ class ESMLoader { }; } - /** - * Returns the url to use for the resolution of a given cache key url - * These are not guaranteed to be the same. - * - * In WHATWG HTTP spec for ESM the cache key is the non-I/O bound - * synchronous resolution using only string operations - * ~= resolveImportMap(new URL(specifier, importerHREF)) - * - * The url used for subsequent resolution is the response URL after - * all redirects have been resolved. - * - * https://example.com/foo redirecting to https://example.com/bar - * would have a cache key of https://example.com/foo and baseURL - * of https://example.com/bar - * - * MUST BE SYNCHRONOUS for import.meta initialization - * MUST BE CALLED AFTER receiving the url body due to I/O - * @param {string} url - * @returns {string} - */ - getBaseURL(url) { - if ( - StringPrototypeStartsWith(url, 'http:') || - StringPrototypeStartsWith(url, 'https:') - ) { - // The request & response have already settled, so they are in - // fetchModule's cache, in which case, fetchModule returns - // immediately and synchronously - url = fetchModule(new URL(url), { parentURL: url }).resolvedHREF; - // This should only occur if the module hasn't been fetched yet - if (typeof url !== 'string') { - throw new ERR_INTERNAL_ASSERTION(`Base url for module ${url} not loaded.`); - } - } - return url; - } - /** * Get a (possibly still pending) module job from the cache, * or create one and return its Promise. @@ -284,12 +409,17 @@ class ESMLoader { */ async getModuleJob(specifier, parentURL, importAssertions) { let importAssertionsForResolve; - if (this.#loaders.length !== 1) { - // We can skip cloning if there are no user provided loaders because + + // By default, `this.#hooks.load` contains just the Node default load hook + if (this.#hooks.load.length !== 1) { + // We can skip cloning if there are no user-provided loaders because // the Node.js default resolve hook does not use import assertions. - importAssertionsForResolve = - ObjectAssign(ObjectCreate(null), importAssertions); + importAssertionsForResolve = { + __proto__: null, + ...importAssertions, + }; } + const { format, url } = await this.resolve(specifier, parentURL, importAssertionsForResolve); @@ -322,6 +452,7 @@ class ESMLoader { const moduleProvider = async (url, isMain) => { const { format: finalFormat, + responseURL, source, } = await this.load(url, { format, @@ -331,10 +462,10 @@ class ESMLoader { const translator = translators.get(finalFormat); if (!translator) { - throw new ERR_UNKNOWN_MODULE_FORMAT(finalFormat, url); + throw new ERR_UNKNOWN_MODULE_FORMAT(finalFormat, responseURL); } - return FunctionPrototypeCall(translator, this, url, source, isMain); + return FunctionPrototypeCall(translator, this, responseURL, source, isMain); }; const inspectBrk = ( @@ -342,6 +473,10 @@ class ESMLoader { getOptionValue('--inspect-brk') ); + if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { + process.send({ 'watch:import': url }); + } + const job = new ModuleJob( this, url, @@ -367,11 +502,21 @@ class ESMLoader { * @param {string} parentURL Path of the parent importing the module. * @param {Record} importAssertions Validations for the * module import. - * @returns {Promise} A list of module export(s). + * @returns {Promise} + * A collection of module export(s) or a list of collections of module + * export(s). */ async import(specifiers, parentURL, importAssertions) { + // For loaders, `import` is passed multiple things to process, it returns a + // list pairing the url and exports collected. This is especially useful for + // error messaging, to identity from where an export came. But, in most + // cases, only a single url is being "imported" (ex `import()`), so there is + // only 1 possible url from which the exports were collected and it is + // already known to the caller. Nesting that in a list would only ever + // create redundant work for the caller, so it is later popped off the + // internal list. const wasArr = ArrayIsArray(specifiers); - if (!wasArr) specifiers = [specifiers]; + if (!wasArr) { specifiers = [specifiers]; } const count = specifiers.length; const jobs = new Array(count); @@ -382,42 +527,119 @@ class ESMLoader { .then(({ module }) => module.getNamespace()); } - const namespaces = await PromiseAll(new SafeArrayIterator(jobs)); + const namespaces = await SafePromiseAll(jobs); - return wasArr ? - namespaces : - namespaces[0]; + if (!wasArr) { return namespaces[0]; } // We can skip the pairing below + + for (let i = 0; i < count; i++) { + namespaces[i] = { + __proto__: null, + url: specifiers[i], + exports: namespaces[i], + }; + } + + return namespaces; } /** * Provide source that is understood by one of Node's translators. * - * The internals of this WILL change when chaining is implemented, - * depending on the resolution/consensus from #36954 - * @param {string} url The URL/path of the module to be loaded + * Internally, this behaves like a backwards iterator, wherein the stack of + * hooks starts at the top and each call to `nextLoad()` moves down 1 step + * until it reaches the bottom or short-circuits. + * + * @param {URL['href']} url The URL/path of the module to be loaded * @param {object} context Metadata about the module - * @returns {object} + * @returns {{ format: ModuleFormat, source: ModuleSource }} */ async load(url, context = {}) { - const defaultLoader = this.#loaders[0]; - - const loader = this.#loaders.length === 1 ? - defaultLoader : - this.#loaders[1]; - const loaded = await loader(url, context, defaultLoader); - - if (typeof loaded !== 'object') { - throw new ERR_INVALID_RETURN_VALUE( - 'object', - 'loader load', - loaded, - ); + const chain = this.#hooks.load; + const meta = { + chainFinished: null, + context, + hookErrIdentifier: '', + hookIndex: chain.length - 1, + hookName: 'load', + shortCircuited: false, + }; + + const validateArgs = (hookErrIdentifier, nextUrl, ctx) => { + if (typeof nextUrl !== 'string') { + // non-strings can be coerced to a url string + // validateString() throws a less-specific error + throw new ERR_INVALID_ARG_TYPE( + `${hookErrIdentifier} url`, + 'a url string', + nextUrl, + ); + } + + // Try to avoid expensive URL instantiation for known-good urls + if (!this.moduleMap.has(nextUrl)) { + try { + new URL(nextUrl); + } catch { + throw new ERR_INVALID_ARG_VALUE( + `${hookErrIdentifier} url`, + nextUrl, + 'should be a url string', + ); + } + } + + if (ctx) validateObject(ctx, `${hookErrIdentifier} context`); + }; + const validateOutput = (hookErrIdentifier, output) => { + if (typeof output !== 'object' || output === null) { // [2] + throw new ERR_INVALID_RETURN_VALUE( + 'an object', + hookErrIdentifier, + output, + ); + } + }; + + const nextLoad = nextHookFactory(chain, meta, { validateArgs, validateOutput }); + + const loaded = await nextLoad(url, context); + const { hookErrIdentifier } = meta; // Retrieve the value after all settled + + validateOutput(hookErrIdentifier, loaded); + + if (loaded?.shortCircuit === true) { meta.shortCircuited = true; } + + if (!meta.chainFinished && !meta.shortCircuited) { + throw new ERR_LOADER_CHAIN_INCOMPLETE(hookErrIdentifier); } const { format, source, } = loaded; + let responseURL = loaded.responseURL; + + if (responseURL === undefined) { + responseURL = url; + } + + let responseURLObj; + if (typeof responseURL === 'string') { + try { + responseURLObj = new URL(responseURL); + } catch { + // responseURLObj not defined will throw in next branch. + } + } + + if (responseURLObj?.href !== responseURL) { + throw new ERR_INVALID_RETURN_PROPERTY_VALUE( + 'undefined or a fully resolved URL string', + hookErrIdentifier, + 'responseURL', + responseURL, + ); + } if (format == null) { const dataUrl = RegExpPrototypeExec( @@ -430,10 +652,10 @@ class ESMLoader { url); } - if (typeof format !== 'string') { + if (typeof format !== 'string') { // [2] throw new ERR_INVALID_RETURN_PROPERTY_VALUE( - 'string', - 'loader resolve', + 'a string', + hookErrIdentifier, 'format', format, ); @@ -444,24 +666,24 @@ class ESMLoader { typeof source !== 'string' && !isAnyArrayBuffer(source) && !isArrayBufferView(source) - ) throw ERR_INVALID_RETURN_PROPERTY_VALUE( - 'string, an ArrayBuffer, or a TypedArray', - 'loader load', - 'source', - source - ); + ) { + throw ERR_INVALID_RETURN_PROPERTY_VALUE( + 'a string, an ArrayBuffer, or a TypedArray', + hookErrIdentifier, + 'source', + source + ); + } return { format, + responseURL, source, }; } preload() { - const count = this.#globalPreloaders.length; - if (!count) return; - - for (let i = 0; i < count; i++) { + for (let i = this.#hooks.globalPreload.length - 1; i >= 0; i--) { const channel = new MessageChannel(); const { port1: insidePreload, @@ -471,28 +693,35 @@ class ESMLoader { insidePreload.unref(); insideLoader.unref(); - const preload = this.#globalPreloaders[i]({ - port: insideLoader + const { + fn: preload, + url: specifier, + } = this.#hooks.globalPreload[i]; + + const preloaded = preload({ + port: insideLoader, }); - if (preload == null) return; + if (preloaded == null) { return; } - if (typeof preload !== 'string') { + const hookErrIdentifier = `${specifier} globalPreload`; + + if (typeof preloaded !== 'string') { // [2] throw new ERR_INVALID_RETURN_VALUE( - 'string', - 'loader globalPreloadCode', + 'a string', + hookErrIdentifier, preload, ); } const { compileFunction } = require('vm'); const preloadInit = compileFunction( - preload, + preloaded, ['getBuiltin', 'port', 'setImportMetaCallback'], { filename: '', } ); - const { NativeModule } = require('internal/bootstrap/loaders'); + const { BuiltinModule } = require('internal/bootstrap/loaders'); // We only allow replacing the importMetaInitializer during preload, // after preload is finished, we disable the ability to replace it // @@ -510,7 +739,8 @@ class ESMLoader { globalThis, // Param getBuiltin (builtinName) => { - if (NativeModule.canBeRequiredByUsers(builtinName)) { + if (BuiltinModule.canBeRequiredByUsers(builtinName) && + BuiltinModule.canBeRequiredWithoutScheme(builtinName)) { return require(builtinName); } throw new ERR_INVALID_ARG_VALUE('builtinName', builtinName); @@ -544,19 +774,21 @@ class ESMLoader { /** * Resolve the location of the module. * - * The internals of this WILL change when chaining is implemented, - * depending on the resolution/consensus from #36954. + * Internally, this behaves like a backwards iterator, wherein the stack of + * hooks starts at the top and each call to `nextResolve()` moves down 1 step + * until it reaches the bottom or short-circuits. + * * @param {string} originalSpecifier The specified URL path of the module to * be resolved. * @param {string} [parentURL] The URL path of the module's parent. * @param {ImportAssertions} [importAssertions] Assertions from the import * statement or expression. - * @returns {{ url: string }} + * @returns {{ format: string, url: URL['href'] }} */ async resolve( originalSpecifier, parentURL, - importAssertions = ObjectCreate(null) + importAssertions = ObjectCreate(null), ) { const isMain = parentURL === undefined; @@ -564,61 +796,100 @@ class ESMLoader { !isMain && typeof parentURL !== 'string' && !isURLInstance(parentURL) - ) throw new ERR_INVALID_ARG_TYPE( - 'parentURL', - ['string', 'URL'], + ) { + throw new ERR_INVALID_ARG_TYPE( + 'parentURL', + ['string', 'URL'], + parentURL, + ); + } + const chain = this.#hooks.resolve; + const context = { + conditions: DEFAULT_CONDITIONS, + importAssertions, parentURL, - ); + }; + const meta = { + chainFinished: null, + context, + hookErrIdentifier: '', + hookIndex: chain.length - 1, + hookName: 'resolve', + shortCircuited: false, + }; - const conditions = DEFAULT_CONDITIONS; + const validateArgs = (hookErrIdentifier, suppliedSpecifier, ctx) => { + validateString( + suppliedSpecifier, + `${hookErrIdentifier} specifier`, + ); // non-strings can be coerced to a url string - const defaultResolver = this.#resolvers[0]; + if (ctx) validateObject(ctx, `${hookErrIdentifier} context`); + }; + const validateOutput = (hookErrIdentifier, output) => { + if (typeof output !== 'object' || output === null) { // [2] + throw new ERR_INVALID_RETURN_VALUE( + 'an object', + hookErrIdentifier, + output, + ); + } + }; - const resolver = this.#resolvers.length === 1 ? - defaultResolver : - this.#resolvers[1]; - const resolution = await resolver( - originalSpecifier, - { - conditions, - importAssertions, - parentURL, - }, - defaultResolver, - ); + const nextResolve = nextHookFactory(chain, meta, { validateArgs, validateOutput }); - if (typeof resolution !== 'object') { - throw new ERR_INVALID_RETURN_VALUE( - 'object', - 'loader resolve', - resolution, - ); + const resolution = await nextResolve(originalSpecifier, context); + const { hookErrIdentifier } = meta; // Retrieve the value after all settled + + validateOutput(hookErrIdentifier, resolution); + + if (resolution?.shortCircuit === true) { meta.shortCircuited = true; } + + if (!meta.chainFinished && !meta.shortCircuited) { + throw new ERR_LOADER_CHAIN_INCOMPLETE(hookErrIdentifier); } - const { format, url } = resolution; + const { + format, + url, + } = resolution; if ( format != null && - typeof format !== 'string' + typeof format !== 'string' // [2] ) { throw new ERR_INVALID_RETURN_PROPERTY_VALUE( - 'string', - 'loader resolve', + 'a string', + hookErrIdentifier, 'format', format, ); } - if (typeof url !== 'string') { // non-strings can be coerced to a url string + if (typeof url !== 'string') { + // non-strings can be coerced to a url string + // validateString() throws a less-specific error throw new ERR_INVALID_RETURN_PROPERTY_VALUE( - 'string', - 'loader resolve', + 'a url string', + hookErrIdentifier, 'url', url, ); } - new URL(url); // Intentionally trigger error if `url` is invalid + // Try to avoid expensive URL instantiation for known-good urls + if (!this.moduleMap.has(url)) { + try { + new URL(url); + } catch { + throw new ERR_INVALID_RETURN_PROPERTY_VALUE( + 'a url string', + hookErrIdentifier, + 'url', + url, + ); + } + } return { format, diff --git a/lib/internal/modules/esm/module_job.js b/lib/internal/modules/esm/module_job.js index e012eebc4ac..2dd69b32f77 100644 --- a/lib/internal/modules/esm/module_job.js +++ b/lib/internal/modules/esm/module_job.js @@ -2,22 +2,19 @@ const { ArrayPrototypeJoin, - ArrayPrototypeMap, ArrayPrototypePush, ArrayPrototypeSome, FunctionPrototype, ObjectCreate, ObjectSetPrototypeOf, - PromiseAll, PromiseResolve, - PromisePrototypeCatch, + PromisePrototypeThen, ReflectApply, - RegExpPrototypeTest, - SafeArrayIterator, + RegExpPrototypeExec, + RegExpPrototypeSymbolReplace, + SafePromiseAll, SafeSet, StringPrototypeIncludes, - StringPrototypeMatch, - StringPrototypeReplace, StringPrototypeSplit, StringPrototypeStartsWith, } = primordials; @@ -76,23 +73,22 @@ class ModuleJob { // these `link` callbacks depending on each other. const dependencyJobs = []; const promises = this.module.link(async (specifier, assertions) => { - const baseURL = this.loader.getBaseURL(url); - const jobPromise = this.loader.getModuleJob(specifier, baseURL, assertions); + const jobPromise = this.loader.getModuleJob(specifier, url, assertions); ArrayPrototypePush(dependencyJobs, jobPromise); const job = await jobPromise; return job.modulePromise; }); if (promises !== undefined) - await PromiseAll(new SafeArrayIterator(promises)); + await SafePromiseAll(promises); - return PromiseAll(new SafeArrayIterator(dependencyJobs)); + return SafePromiseAll(dependencyJobs); }; // Promise for the list of all dependencyJobs. this.linked = link(); // This promise is awaited later anyway, so silence // 'unhandled rejection' warnings. - PromisePrototypeCatch(this.linked, noop); + PromisePrototypeThen(this.linked, undefined, noop); // instantiated == deep dependency jobs wrappers are instantiated, // and module wrapper is instantiated. @@ -114,8 +110,7 @@ class ModuleJob { } jobsInGraph.add(moduleJob); const dependencyJobs = await moduleJob.linked; - return PromiseAll(new SafeArrayIterator( - ArrayPrototypeMap(dependencyJobs, addJobsToDependencyGraph))); + return SafePromiseAll(dependencyJobs, addJobsToDependencyGraph); }; await addJobsToDependencyGraph(this); @@ -137,14 +132,14 @@ class ModuleJob { StringPrototypeIncludes(e.message, ' does not provide an export named')) { const splitStack = StringPrototypeSplit(e.stack, '\n'); - const parentFileUrl = StringPrototypeReplace( - splitStack[0], + const parentFileUrl = RegExpPrototypeSymbolReplace( /:\d+$/, + splitStack[0], '' ); - const { 1: childSpecifier, 2: name } = StringPrototypeMatch( - e.message, - /module '(.*)' does not provide an export named '(.+)'/); + const { 1: childSpecifier, 2: name } = RegExpPrototypeExec( + /module '(.*)' does not provide an export named '(.+)'/, + e.message); const { url: childFileURL } = await this.loader.resolve( childSpecifier, parentFileUrl, ); @@ -165,9 +160,9 @@ class ModuleJob { // line which causes the error. For multi-line import statements we // cannot generate an equivalent object destructuring assignment by // just parsing the error stack. - const oneLineNamedImports = StringPrototypeMatch(importStatement, /{.*}/); + const oneLineNamedImports = RegExpPrototypeExec(/{.*}/, importStatement); const destructuringAssignment = oneLineNamedImports && - StringPrototypeReplace(oneLineNamedImports, /\s+as\s+/g, ': '); + RegExpPrototypeSymbolReplace(/\s+as\s+/g, oneLineNamedImports, ': '); e.message = `Named export '${name}' not found. The requested module` + ` '${childSpecifier}' is a CommonJS module, which may not support` + ' all module.exports as named exports.\nCommonJS modules can ' + @@ -207,7 +202,7 @@ class ModuleJob { const packageConfig = StringPrototypeStartsWith(this.module.url, 'file://') && - RegExpPrototypeTest(/\.js(\?[^#]*)?(#.*)?$/, this.module.url) && + RegExpPrototypeExec(/\.js(\?[^#]*)?(#.*)?$/, this.module.url) !== null && require('internal/modules/esm/resolve') .getPackageScopeConfig(this.module.url); if (packageConfig.type === 'module') { diff --git a/lib/internal/modules/esm/package_config.js b/lib/internal/modules/esm/package_config.js new file mode 100644 index 00000000000..7271d065de9 --- /dev/null +++ b/lib/internal/modules/esm/package_config.js @@ -0,0 +1,144 @@ +'use strict'; + +const { + JSONParse, + ObjectPrototypeHasOwnProperty, + SafeMap, + StringPrototypeEndsWith, +} = primordials; +const { URL, fileURLToPath } = require('internal/url'); +const { + ERR_INVALID_PACKAGE_CONFIG, +} = require('internal/errors').codes; + +const packageJsonReader = require('internal/modules/package_json_reader'); +const { filterOwnProperties } = require('internal/util'); + + +/** + * @typedef {string | string[] | Record} Exports + * @typedef {'module' | 'commonjs'} PackageType + * @typedef {{ + * pjsonPath: string, + * exports?: ExportConfig, + * name?: string, + * main?: string, + * type?: PackageType, + * }} PackageConfig + */ + +/** @type {Map} */ +const packageJSONCache = new SafeMap(); + + +/** + * @param {string} path + * @param {string} specifier + * @param {string | URL | undefined} base + * @returns {PackageConfig} + */ +function getPackageConfig(path, specifier, base) { + const existing = packageJSONCache.get(path); + if (existing !== undefined) { + return existing; + } + const source = packageJsonReader.read(path).string; + if (source === undefined) { + const packageConfig = { + pjsonPath: path, + exists: false, + main: undefined, + name: undefined, + type: 'none', + exports: undefined, + imports: undefined, + }; + packageJSONCache.set(path, packageConfig); + return packageConfig; + } + + let packageJSON; + try { + packageJSON = JSONParse(source); + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : '') + fileURLToPath(base || specifier), + error.message + ); + } + + let { imports, main, name, type } = filterOwnProperties(packageJSON, ['imports', 'main', 'name', 'type']); + const exports = ObjectPrototypeHasOwnProperty(packageJSON, 'exports') ? packageJSON.exports : undefined; + if (typeof imports !== 'object' || imports === null) { + imports = undefined; + } + if (typeof main !== 'string') { + main = undefined; + } + if (typeof name !== 'string') { + name = undefined; + } + // Ignore unknown types for forwards compatibility + if (type !== 'module' && type !== 'commonjs') { + type = 'none'; + } + + const packageConfig = { + pjsonPath: path, + exists: true, + main, + name, + type, + exports, + imports, + }; + packageJSONCache.set(path, packageConfig); + return packageConfig; +} + + +/** + * @param {URL | string} resolved + * @returns {PackageConfig} + */ +function getPackageScopeConfig(resolved) { + let packageJSONUrl = new URL('./package.json', resolved); + while (true) { + const packageJSONPath = packageJSONUrl.pathname; + if (StringPrototypeEndsWith(packageJSONPath, 'node_modules/package.json')) { + break; + } + const packageConfig = getPackageConfig(fileURLToPath(packageJSONUrl), resolved); + if (packageConfig.exists) { + return packageConfig; + } + + const lastPackageJSONUrl = packageJSONUrl; + packageJSONUrl = new URL('../package.json', packageJSONUrl); + + // Terminates at root where ../package.json equals ../../package.json + // (can't just check "/package.json" for Windows support). + if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { + break; + } + } + const packageJSONPath = fileURLToPath(packageJSONUrl); + const packageConfig = { + pjsonPath: packageJSONPath, + exists: false, + main: undefined, + name: undefined, + type: 'none', + exports: undefined, + imports: undefined, + }; + packageJSONCache.set(packageJSONPath, packageConfig); + return packageConfig; +} + + +module.exports = { + getPackageConfig, + getPackageScopeConfig, +}; diff --git a/lib/internal/modules/esm/resolve.js b/lib/internal/modules/esm/resolve.js index 3576f75f0a4..b0748394b2d 100644 --- a/lib/internal/modules/esm/resolve.js +++ b/lib/internal/modules/esm/resolve.js @@ -13,7 +13,6 @@ const { RegExp, RegExpPrototypeExec, RegExpPrototypeSymbolReplace, - RegExpPrototypeTest, SafeMap, SafeSet, String, @@ -21,12 +20,13 @@ const { StringPrototypeIncludes, StringPrototypeIndexOf, StringPrototypeLastIndexOf, + StringPrototypeReplace, StringPrototypeSlice, StringPrototypeSplit, StringPrototypeStartsWith, } = primordials; const internalFS = require('internal/fs/utils'); -const { NativeModule } = require('internal/bootstrap/loaders'); +const { BuiltinModule } = require('internal/bootstrap/loaders'); const { realpathSync, statSync, @@ -59,9 +59,16 @@ const { ERR_NETWORK_IMPORT_DISALLOWED, ERR_UNSUPPORTED_ESM_URL_SCHEME, } = require('internal/errors').codes; -const { Module: CJSModule } = require('internal/modules/cjs/loader'); +const { Module: CJSModule } = require('internal/modules/cjs/loader'); const packageJsonReader = require('internal/modules/package_json_reader'); +const { getPackageConfig, getPackageScopeConfig } = require('internal/modules/esm/package_config'); + +/** + * @typedef {import('internal/modules/esm/package_config.js').PackageConfig} PackageConfig + */ + + const userConditions = getOptionValue('--conditions'); const noAddons = getOptionValue('--no-addons'); const addonConditions = noAddons ? [] : ['node-addons']; @@ -75,18 +82,6 @@ const DEFAULT_CONDITIONS = ObjectFreeze([ const DEFAULT_CONDITIONS_SET = new SafeSet(DEFAULT_CONDITIONS); -/** - * @typedef {string | string[] | Record} Exports - * @typedef {'module' | 'commonjs'} PackageType - * @typedef {{ - * pjsonPath: string, - * exports?: ExportConfig, - * name?: string, - * main?: string, - * type?: PackageType, - * }} PackageConfig - */ - const emittedPackageWarnings = new SafeSet(); /** @@ -179,7 +174,6 @@ function getConditionsSet(conditions) { } const realpathCache = new SafeMap(); -const packageJSONCache = new SafeMap(); /* string -> PackageConfig */ /** * @param {string | URL} path @@ -188,99 +182,6 @@ const packageJSONCache = new SafeMap(); /* string -> PackageConfig */ const tryStatSync = (path) => statSync(path, { throwIfNoEntry: false }) ?? new Stats(); -/** - * @param {string} path - * @param {string} specifier - * @param {string | URL | undefined} base - * @returns {PackageConfig} - */ -function getPackageConfig(path, specifier, base) { - const existing = packageJSONCache.get(path); - if (existing !== undefined) { - return existing; - } - const source = packageJsonReader.read(path).string; - if (source === undefined) { - const packageConfig = { - pjsonPath: path, - exists: false, - main: undefined, - name: undefined, - type: 'none', - exports: undefined, - imports: undefined, - }; - packageJSONCache.set(path, packageConfig); - return packageConfig; - } - - let packageJSON; - try { - packageJSON = JSONParse(source); - } catch (error) { - throw new ERR_INVALID_PACKAGE_CONFIG( - path, - (base ? `"${specifier}" from ` : '') + fileURLToPath(base || specifier), - error.message - ); - } - - let { imports, main, name, type } = packageJSON; - const { exports } = packageJSON; - if (typeof imports !== 'object' || imports === null) imports = undefined; - if (typeof main !== 'string') main = undefined; - if (typeof name !== 'string') name = undefined; - // Ignore unknown types for forwards compatibility - if (type !== 'module' && type !== 'commonjs') type = 'none'; - - const packageConfig = { - pjsonPath: path, - exists: true, - main, - name, - type, - exports, - imports, - }; - packageJSONCache.set(path, packageConfig); - return packageConfig; -} - -/** - * @param {URL | string} resolved - * @returns {PackageConfig} - */ -function getPackageScopeConfig(resolved) { - let packageJSONUrl = new URL('./package.json', resolved); - while (true) { - const packageJSONPath = packageJSONUrl.pathname; - if (StringPrototypeEndsWith(packageJSONPath, 'node_modules/package.json')) - break; - const packageConfig = getPackageConfig(fileURLToPath(packageJSONUrl), - resolved); - if (packageConfig.exists) return packageConfig; - - const lastPackageJSONUrl = packageJSONUrl; - packageJSONUrl = new URL('../package.json', packageJSONUrl); - - // Terminates at root where ../package.json equals ../../package.json - // (can't just check "/package.json" for Windows support). - if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) break; - } - const packageJSONPath = fileURLToPath(packageJSONUrl); - const packageConfig = { - pjsonPath: packageJSONPath, - exists: false, - main: undefined, - name: undefined, - type: 'none', - exports: undefined, - imports: undefined, - }; - packageJSONCache.set(packageJSONPath, packageConfig); - return packageConfig; -} - /** * @param {string | URL} url * @returns {boolean} @@ -387,7 +288,6 @@ function resolveDirectoryEntry(search) { } const encodedSepRegEx = /%2F|%5C/i; -let experimentalSpecifierResolutionWarned = false; /** * @param {URL} resolved * @param {string | URL | undefined} base @@ -395,20 +295,13 @@ let experimentalSpecifierResolutionWarned = false; * @returns {URL | undefined} */ function finalizeResolution(resolved, base, preserveSymlinks) { - if (RegExpPrototypeTest(encodedSepRegEx, resolved.pathname)) + if (RegExpPrototypeExec(encodedSepRegEx, resolved.pathname) !== null) throw new ERR_INVALID_MODULE_SPECIFIER( resolved.pathname, 'must not include encoded "/" or "\\" characters', fileURLToPath(base)); let path = fileURLToPath(resolved); if (getOptionValue('--experimental-specifier-resolution') === 'node') { - if (!experimentalSpecifierResolutionWarned) { - process.emitWarning( - 'The Node.js specifier resolution flag is experimental. It could change or be removed at any time.', - 'ExperimentalWarning'); - experimentalSpecifierResolutionWarned = true; - } - let file = resolveExtensionsWithTryExactName(resolved); // Directory @@ -531,7 +424,7 @@ function resolvePackageTargetString( throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); } - if (RegExpPrototypeTest(invalidSegmentRegEx, StringPrototypeSlice(target, 2))) + if (RegExpPrototypeExec(invalidSegmentRegEx, StringPrototypeSlice(target, 2)) !== null) throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); const resolved = new URL(target, packageJSONUrl); @@ -543,8 +436,11 @@ function resolvePackageTargetString( if (subpath === '') return resolved; - if (RegExpPrototypeTest(invalidSegmentRegEx, subpath)) - throwInvalidSubpath(match + subpath, packageJSONUrl, internal, base); + if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { + const request = pattern ? + StringPrototypeReplace(match, '*', () => subpath) : match + subpath; + throwInvalidSubpath(request, packageJSONUrl, internal, base); + } if (pattern) { return new URL( @@ -639,7 +535,7 @@ function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, /** * - * @param {Exports} exports + * @param {import('internal/modules/esm/package_config.js').Exports} exports * @param {URL} packageJSONUrl * @param {string | URL | undefined} base * @returns {boolean} @@ -843,7 +739,7 @@ function packageImportsResolve(name, base, conditions) { /** * @param {URL} url - * @returns {PackageType} + * @returns {import('internal/modules/esm/package_config.js').PackageType} */ function getPackageType(url) { const packageConfig = getPackageScopeConfig(url); @@ -895,8 +791,10 @@ function parsePackageName(specifier, base) { * @returns {URL} */ function packageResolve(specifier, base, conditions) { - if (NativeModule.canBeRequiredByUsers(specifier)) + if (BuiltinModule.canBeRequiredByUsers(specifier) && + BuiltinModule.canBeRequiredWithoutScheme(specifier)) { return new URL('node:' + specifier); + } const { packageName, packageSubpath, isScoped } = parsePackageName(specifier, base); @@ -1058,8 +956,6 @@ function resolveAsCommonJS(specifier, parentURL) { // TODO(@JakobJingleheimer): de-dupe `specifier` & `parsed` function checkIfDisallowedImport(specifier, parsed, parsedParentURL) { if (parsedParentURL) { - const parentURL = fileURLToPath(parsedParentURL?.href); - if ( parsedParentURL.protocol === 'http:' || parsedParentURL.protocol === 'https:' @@ -1073,24 +969,25 @@ function checkIfDisallowedImport(specifier, parsed, parsedParentURL) { ) { throw new ERR_NETWORK_IMPORT_DISALLOWED( specifier, - parentURL, + parsedParentURL, 'remote imports cannot import from a local location.' ); } return { url: parsed.href }; } - if (NativeModule.canBeRequiredByUsers(specifier)) { + if (BuiltinModule.canBeRequiredByUsers(specifier) && + BuiltinModule.canBeRequiredWithoutScheme(specifier)) { throw new ERR_NETWORK_IMPORT_DISALLOWED( specifier, - parentURL, + parsedParentURL, 'remote imports cannot import from a local location.' ); } throw new ERR_NETWORK_IMPORT_DISALLOWED( specifier, - parentURL, + parsedParentURL, 'only relative and absolute specifiers are supported.' ); } @@ -1125,7 +1022,7 @@ function throwIfUnsupportedURLScheme(parsed, experimentalNetworkImports) { } } -async function defaultResolve(specifier, context = {}, defaultResolveUnused) { +async function defaultResolve(specifier, context = {}) { let { parentURL, conditions } = context; if (parentURL && policy?.manifest) { const redirects = policy.manifest.getDependencyMapper(parentURL); @@ -1271,7 +1168,7 @@ if (policy) { specifier, context ) { - const ret = await $defaultResolve(specifier, context, $defaultResolve); + const ret = await $defaultResolve(specifier, context); // This is a preflight check to avoid data exfiltration by query params etc. policy.manifest.mightAllow(ret.url, () => new ERR_MANIFEST_DEPENDENCY_MISSING( diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js index d7f4c7edec6..6f25b2e67ab 100644 --- a/lib/internal/modules/esm/translators.js +++ b/lib/internal/modules/esm/translators.js @@ -11,7 +11,7 @@ const { SafeArrayIterator, SafeMap, SafeSet, - StringPrototypeReplace, + StringPrototypeReplaceAll, StringPrototypeSlice, StringPrototypeStartsWith, SyntaxErrorPrototype, @@ -28,7 +28,7 @@ const { readFileSync } = require('fs'); const { extname, isAbsolute } = require('path'); const { hasEsmSyntax, - loadNativeModule, + loadBuiltinModule, stripBOM, } = require('internal/modules/cjs/helpers'); const { @@ -61,8 +61,12 @@ async function initCJSParse() { } else { const { parse, init } = require('internal/deps/cjs-module-lexer/dist/lexer'); - await init(); - cjsParse = parse; + try { + await init(); + cjsParse = parse; + } catch { + cjsParse = require('internal/deps/cjs-module-lexer/lexer').parse; + } } } @@ -103,9 +107,7 @@ function errPath(url) { } async function importModuleDynamically(specifier, { url }, assertions) { - return asyncESM.esmLoader.import(specifier, - asyncESM.esmLoader.getBaseURL(url), - assertions); + return asyncESM.esmLoader.import(specifier, url, assertions); } // Strategy for loading a standard JavaScript module. @@ -116,9 +118,7 @@ translators.set('module', async function moduleStrategy(url, source, isMain) { debug(`Translating StandardModule ${url}`); const module = new ModuleWrap(url, undefined, source, 0, 0); moduleWrap.callbackMap.set(module, { - initializeImportMeta: (meta, wrap) => this.importMetaInitialize(meta, { - url: wrap.url - }), + initializeImportMeta: (meta, wrap) => this.importMetaInitialize(meta, { url }), importModuleDynamically, }); return module; @@ -144,14 +144,13 @@ function enrichCJSError(err, content, filename) { // Strategy for loading a node-style CommonJS module const isWindows = process.platform === 'win32'; -const winSepRegEx = /\//g; translators.set('commonjs', async function commonjsStrategy(url, source, isMain) { debug(`Translating CJSModule ${url}`); let filename = internalURLModule.fileURLToPath(new URL(url)); if (isWindows) - filename = StringPrototypeReplace(filename, winSepRegEx, '\\'); + filename = StringPrototypeReplaceAll(filename, '/', '\\'); if (!cjsParse) await initCJSParse(); const { module, exportNames } = cjsPreparseModuleExports(filename); @@ -255,7 +254,7 @@ translators.set('builtin', async function builtinStrategy(url) { debug(`Translating BuiltinModule ${url}`); // Slice 'node:' scheme const id = StringPrototypeSlice(url, 5); - const module = loadNativeModule(id, url); + const module = loadBuiltinModule(id, url); if (!StringPrototypeStartsWith(url, 'node:') || !module) { throw new ERR_UNKNOWN_BUILTIN_MODULE(url); } @@ -274,7 +273,7 @@ translators.set('json', async function jsonStrategy(url, source) { let module; if (pathname) { modulePath = isWindows ? - StringPrototypeReplace(pathname, winSepRegEx, '\\') : pathname; + StringPrototypeReplaceAll(pathname, '/', '\\') : pathname; module = CJSModule._cache[modulePath]; if (module && module.loaded) { const exports = module.exports; diff --git a/lib/internal/modules/run_main.js b/lib/internal/modules/run_main.js index 924c4836bb2..5a50d5d6afa 100644 --- a/lib/internal/modules/run_main.js +++ b/lib/internal/modules/run_main.js @@ -28,8 +28,12 @@ function resolveMainPath(main) { } function shouldUseESMLoader(mainPath) { - const userLoader = getOptionValue('--experimental-loader'); - if (userLoader) + /** + * @type {string[]} userLoaders A list of custom loaders registered by the user + * (or an empty list when none have been registered). + */ + const userLoaders = getOptionValue('--experimental-loader'); + if (userLoaders.length > 0) return true; const esModuleSpecifierResolution = getOptionValue('--experimental-specifier-resolution'); diff --git a/lib/internal/net.js b/lib/internal/net.js index 8ae3170228d..625377acd57 100644 --- a/lib/internal/net.js +++ b/lib/internal/net.js @@ -29,10 +29,16 @@ const IPv6Reg = new RegExp('^(' + ')(%[0-9a-zA-Z-.:]{1,})?$'); function isIPv4(s) { + // TODO(aduh95): Replace RegExpPrototypeTest with RegExpPrototypeExec when it + // no longer creates a perf regression in the dns benchmark. + // eslint-disable-next-line node-core/avoid-prototype-pollution return RegExpPrototypeTest(IPv4Reg, s); } function isIPv6(s) { + // TODO(aduh95): Replace RegExpPrototypeTest with RegExpPrototypeExec when it + // no longer creates a perf regression in the dns benchmark. + // eslint-disable-next-line node-core/avoid-prototype-pollution return RegExpPrototypeTest(IPv6Reg, s); } diff --git a/lib/internal/options.js b/lib/internal/options.js index 01b334d4ec5..4d92ad681a1 100644 --- a/lib/internal/options.js +++ b/lib/internal/options.js @@ -36,6 +36,11 @@ function getEmbedderOptions() { return embedderOptions; } +function refreshOptions() { + optionsMap = undefined; + aliasesMap = undefined; +} + function getOptionValue(optionName) { const options = getCLIOptionsFromBinding(); if (optionName.startsWith('--no-')) { @@ -68,5 +73,6 @@ module.exports = { }, getOptionValue, getAllowUnauthorized, - getEmbedderOptions + getEmbedderOptions, + refreshOptions }; diff --git a/lib/internal/per_context/domexception.js b/lib/internal/per_context/domexception.js index 06bb3fa3053..917e2c00bcc 100644 --- a/lib/internal/per_context/domexception.js +++ b/lib/internal/per_context/domexception.js @@ -1,46 +1,56 @@ 'use strict'; const { - Error, + ErrorCaptureStackTrace, + ErrorPrototype, ObjectDefineProperties, ObjectDefineProperty, + ObjectSetPrototypeOf, SafeWeakMap, SafeMap, + SafeSet, SymbolToStringTag, TypeError, } = primordials; -class ERR_INVALID_THIS extends TypeError { - constructor(type) { - super('Value of "this" must be of ' + type); - } - - get code() { return 'ERR_INVALID_THIS'; } +function throwInvalidThisError(Base, type) { + const err = new Base(); + const key = 'ERR_INVALID_THIS'; + ObjectDefineProperties(err, { + message: { + __proto__: null, + value: `Value of "this" must be of ${type}`, + enumerable: false, + writable: true, + configurable: true, + }, + toString: { + __proto__: null, + value() { + return `${this.name} [${key}]: ${this.message}`; + }, + enumerable: false, + writable: true, + configurable: true, + }, + }); + err.code = key; + throw err; } -let internalsMap; -let nameToCodeMap; -let isInitialized = false; +const internalsMap = new SafeWeakMap(); +const nameToCodeMap = new SafeMap(); -// We need to instantiate the maps lazily because they render -// the snapshot non-rehashable. -// https://bugs.chromium.org/p/v8/issues/detail?id=6593 -function ensureInitialized() { - if (isInitialized) { - return; - } - internalsMap = new SafeWeakMap(); - nameToCodeMap = new SafeMap(); - forEachCode((name, codeName, value) => { - nameToCodeMap.set(name, value); - }); - isInitialized = true; -} +// These were removed from the error names table. +// See https://github.com/heycam/webidl/pull/946. +const disusedNamesSet = new SafeSet() + .add('DOMStringSizeError') + .add('NoDataAllowedError') + .add('ValidationError'); -class DOMException extends Error { +class DOMException { constructor(message = '', name = 'Error') { - ensureInitialized(); - super(); + ErrorCaptureStackTrace(this); internalsMap.set(this, { message: `${message}`, name: `${name}` @@ -48,75 +58,77 @@ class DOMException extends Error { } get name() { - ensureInitialized(); const internals = internalsMap.get(this); if (internals === undefined) { - throw new ERR_INVALID_THIS('DOMException'); + throwInvalidThisError(TypeError, 'DOMException'); } return internals.name; } get message() { - ensureInitialized(); const internals = internalsMap.get(this); if (internals === undefined) { - throw new ERR_INVALID_THIS('DOMException'); + throwInvalidThisError(TypeError, 'DOMException'); } return internals.message; } get code() { - ensureInitialized(); const internals = internalsMap.get(this); if (internals === undefined) { - throw new ERR_INVALID_THIS('DOMException'); + throwInvalidThisError(TypeError, 'DOMException'); } + + if (disusedNamesSet.has(internals.name)) { + return 0; + } + const code = nameToCodeMap.get(internals.name); return code === undefined ? 0 : code; } } +ObjectSetPrototypeOf(DOMException.prototype, ErrorPrototype); ObjectDefineProperties(DOMException.prototype, { - [SymbolToStringTag]: { configurable: true, value: 'DOMException' }, - name: { enumerable: true, configurable: true }, - message: { enumerable: true, configurable: true }, - code: { enumerable: true, configurable: true } + [SymbolToStringTag]: { __proto__: null, configurable: true, value: 'DOMException' }, + name: { __proto__: null, enumerable: true, configurable: true }, + message: { __proto__: null, enumerable: true, configurable: true }, + code: { __proto__: null, enumerable: true, configurable: true } }); -function forEachCode(fn) { - fn('IndexSizeError', 'INDEX_SIZE_ERR', 1); - fn('DOMStringSizeError', 'DOMSTRING_SIZE_ERR', 2); - fn('HierarchyRequestError', 'HIERARCHY_REQUEST_ERR', 3); - fn('WrongDocumentError', 'WRONG_DOCUMENT_ERR', 4); - fn('InvalidCharacterError', 'INVALID_CHARACTER_ERR', 5); - fn('NoDataAllowedError', 'NO_DATA_ALLOWED_ERR', 6); - fn('NoModificationAllowedError', 'NO_MODIFICATION_ALLOWED_ERR', 7); - fn('NotFoundError', 'NOT_FOUND_ERR', 8); - fn('NotSupportedError', 'NOT_SUPPORTED_ERR', 9); - fn('InUseAttributeError', 'INUSE_ATTRIBUTE_ERR', 10); - fn('InvalidStateError', 'INVALID_STATE_ERR', 11); - fn('SyntaxError', 'SYNTAX_ERR', 12); - fn('InvalidModificationError', 'INVALID_MODIFICATION_ERR', 13); - fn('NamespaceError', 'NAMESPACE_ERR', 14); - fn('InvalidAccessError', 'INVALID_ACCESS_ERR', 15); - fn('ValidationError', 'VALIDATION_ERR', 16); - fn('TypeMismatchError', 'TYPE_MISMATCH_ERR', 17); - fn('SecurityError', 'SECURITY_ERR', 18); - fn('NetworkError', 'NETWORK_ERR', 19); - fn('AbortError', 'ABORT_ERR', 20); - fn('URLMismatchError', 'URL_MISMATCH_ERR', 21); - fn('QuotaExceededError', 'QUOTA_EXCEEDED_ERR', 22); - fn('TimeoutError', 'TIMEOUT_ERR', 23); - fn('InvalidNodeTypeError', 'INVALID_NODE_TYPE_ERR', 24); - fn('DataCloneError', 'DATA_CLONE_ERR', 25); +for (const { 0: name, 1: codeName, 2: value } of [ + ['IndexSizeError', 'INDEX_SIZE_ERR', 1], + ['DOMStringSizeError', 'DOMSTRING_SIZE_ERR', 2], + ['HierarchyRequestError', 'HIERARCHY_REQUEST_ERR', 3], + ['WrongDocumentError', 'WRONG_DOCUMENT_ERR', 4], + ['InvalidCharacterError', 'INVALID_CHARACTER_ERR', 5], + ['NoDataAllowedError', 'NO_DATA_ALLOWED_ERR', 6], + ['NoModificationAllowedError', 'NO_MODIFICATION_ALLOWED_ERR', 7], + ['NotFoundError', 'NOT_FOUND_ERR', 8], + ['NotSupportedError', 'NOT_SUPPORTED_ERR', 9], + ['InUseAttributeError', 'INUSE_ATTRIBUTE_ERR', 10], + ['InvalidStateError', 'INVALID_STATE_ERR', 11], + ['SyntaxError', 'SYNTAX_ERR', 12], + ['InvalidModificationError', 'INVALID_MODIFICATION_ERR', 13], + ['NamespaceError', 'NAMESPACE_ERR', 14], + ['InvalidAccessError', 'INVALID_ACCESS_ERR', 15], + ['ValidationError', 'VALIDATION_ERR', 16], + ['TypeMismatchError', 'TYPE_MISMATCH_ERR', 17], + ['SecurityError', 'SECURITY_ERR', 18], + ['NetworkError', 'NETWORK_ERR', 19], + ['AbortError', 'ABORT_ERR', 20], + ['URLMismatchError', 'URL_MISMATCH_ERR', 21], + ['QuotaExceededError', 'QUOTA_EXCEEDED_ERR', 22], + ['TimeoutError', 'TIMEOUT_ERR', 23], + ['InvalidNodeTypeError', 'INVALID_NODE_TYPE_ERR', 24], + ['DataCloneError', 'DATA_CLONE_ERR', 25], // There are some more error names, but since they don't have codes assigned, // we don't need to care about them. -} - -forEachCode((name, codeName, value) => { +]) { const desc = { enumerable: true, value }; ObjectDefineProperty(DOMException, codeName, desc); ObjectDefineProperty(DOMException.prototype, codeName, desc); -}); + nameToCodeMap.set(name, value); +} exports.DOMException = DOMException; diff --git a/lib/internal/per_context/primordials.js b/lib/internal/per_context/primordials.js index 7d9368e678c..2ee5efb6cb7 100644 --- a/lib/internal/per_context/primordials.js +++ b/lib/internal/per_context/primordials.js @@ -57,11 +57,13 @@ function getNewKey(key) { function copyAccessor(dest, prefix, key, { enumerable, get, set }) { ReflectDefineProperty(dest, `${prefix}Get${key}`, { + __proto__: null, value: uncurryThis(get), enumerable }); if (set !== undefined) { ReflectDefineProperty(dest, `${prefix}Set${key}`, { + __proto__: null, value: uncurryThis(set), enumerable }); @@ -76,9 +78,10 @@ function copyPropsRenamed(src, dest, prefix) { copyAccessor(dest, prefix, newKey, desc); } else { const name = `${prefix}${newKey}`; - ReflectDefineProperty(dest, name, desc); + ReflectDefineProperty(dest, name, { __proto__: null, ...desc }); if (varargsMethods.includes(name)) { ReflectDefineProperty(dest, `${name}Apply`, { + __proto__: null, // `src` is bound as the `this` so that the static `this` points // to the object it was defined on, // e.g.: `ArrayOfApply` gets a `this` of `Array`: @@ -102,9 +105,10 @@ function copyPropsRenamedBound(src, dest, prefix) { } const name = `${prefix}${newKey}`; - ReflectDefineProperty(dest, name, desc); + ReflectDefineProperty(dest, name, { __proto__: null, ...desc }); if (varargsMethods.includes(name)) { ReflectDefineProperty(dest, `${name}Apply`, { + __proto__: null, value: applyBind(value, src), }); } @@ -125,9 +129,10 @@ function copyPrototype(src, dest, prefix) { } const name = `${prefix}${newKey}`; - ReflectDefineProperty(dest, name, desc); + ReflectDefineProperty(dest, name, { __proto__: null, ...desc }); if (varargsMethods.includes(name)) { ReflectDefineProperty(dest, `${name}Apply`, { + __proto__: null, value: applyBind(value), }); } @@ -257,6 +262,7 @@ function copyPrototype(src, dest, prefix) { const { ArrayPrototypeForEach, + ArrayPrototypeMap, FinalizationRegistry, FunctionPrototypeCall, Map, @@ -307,7 +313,7 @@ const copyProps = (src, dest) => { ReflectDefineProperty( dest, key, - ReflectGetOwnPropertyDescriptor(src, key)); + { __proto__: null, ...ReflectGetOwnPropertyDescriptor(src, key) }); } }); }; @@ -335,7 +341,7 @@ const makeSafe = (unsafe, safe) => { return new SafeIterator(this); }; } - ReflectDefineProperty(safe.prototype, key, desc); + ReflectDefineProperty(safe.prototype, key, { __proto__: null, ...desc }); } }); } else { @@ -403,9 +409,6 @@ const SafePromise = makeSafe( } ); -primordials.PromisePrototypeCatch = (thisPromise, onRejected) => - PromisePrototypeThen(thisPromise, undefined, onRejected); - /** * Attaches a callback that is invoked when the Promise is settled (fulfilled or * rejected). The resolved value cannot be modified from the callback. @@ -429,5 +432,63 @@ primordials.AsyncIteratorPrototype = primordials.ReflectGetPrototypeOf( async function* () {}).prototype); +const arrayToSafePromiseIterable = (promises, mapFn) => + new primordials.SafeArrayIterator( + ArrayPrototypeMap( + promises, + (promise, i) => + new SafePromise((a, b) => PromisePrototypeThen(mapFn == null ? promise : mapFn(promise, i), a, b)) + ) + ); + +/** + * @param {Promise[]} promises + * @param {(v: Promise, k: number) => Promise} [mapFn] + * @returns {Promise} + */ +primordials.SafePromiseAll = (promises, mapFn) => + // Wrapping on a new Promise is necessary to not expose the SafePromise + // prototype to user-land. + new Promise((a, b) => + SafePromise.all(arrayToSafePromiseIterable(promises, mapFn)).then(a, b) + ); + +/** + * @param {Promise[]} promises + * @param {(v: Promise, k: number) => Promise} [mapFn] + * @returns {Promise[]>} + */ +primordials.SafePromiseAllSettled = (promises, mapFn) => + // Wrapping on a new Promise is necessary to not expose the SafePromise + // prototype to user-land. + new Promise((a, b) => + SafePromise.allSettled(arrayToSafePromiseIterable(promises, mapFn)).then(a, b) + ); + +/** + * @param {Promise[]} promises + * @param {(v: Promise, k: number) => Promise} [mapFn] + * @returns {Promise} + */ +primordials.SafePromiseAny = (promises, mapFn) => + // Wrapping on a new Promise is necessary to not expose the SafePromise + // prototype to user-land. + new Promise((a, b) => + SafePromise.any(arrayToSafePromiseIterable(promises, mapFn)).then(a, b) + ); + +/** + * @param {Promise[]} promises + * @param {(v: Promise, k: number) => Promise} [mapFn] + * @returns {Promise} + */ +primordials.SafePromiseRace = (promises, mapFn) => + // Wrapping on a new Promise is necessary to not expose the SafePromise + // prototype to user-land. + new Promise((a, b) => + SafePromise.race(arrayToSafePromiseIterable(promises, mapFn)).then(a, b) + ); + + ObjectSetPrototypeOf(primordials, null); ObjectFreeze(primordials); diff --git a/lib/internal/perf/event_loop_delay.js b/lib/internal/perf/event_loop_delay.js index efd45f4ed77..18d7967477e 100644 --- a/lib/internal/perf/event_loop_delay.js +++ b/lib/internal/perf/event_loop_delay.js @@ -27,6 +27,10 @@ const { kMap, } = require('internal/histogram'); +const { + kEmptyObject, +} = require('internal/util'); + const { makeTransferable, } = require('internal/worker/js_transferable'); @@ -69,7 +73,7 @@ class ELDHistogram extends Histogram { * }} [options] * @returns {ELDHistogram} */ -function monitorEventLoopDelay(options = {}) { +function monitorEventLoopDelay(options = kEmptyObject) { validateObject(options, 'options'); const { resolution = 10 } = options; diff --git a/lib/internal/perf/nodetiming.js b/lib/internal/perf/nodetiming.js index fcbd7efff49..b0ab9df4473 100644 --- a/lib/internal/perf/nodetiming.js +++ b/lib/internal/perf/nodetiming.js @@ -34,30 +34,35 @@ class PerformanceNodeTiming { constructor() { ObjectDefineProperties(this, { name: { + __proto__: null, enumerable: true, configurable: true, value: 'node' }, entryType: { + __proto__: null, enumerable: true, configurable: true, value: 'node' }, startTime: { + __proto__: null, enumerable: true, configurable: true, value: 0 }, duration: { + __proto__: null, enumerable: true, configurable: true, get: now }, nodeStart: { + __proto__: null, enumerable: true, configurable: true, get() { @@ -66,6 +71,7 @@ class PerformanceNodeTiming { }, v8Start: { + __proto__: null, enumerable: true, configurable: true, get() { @@ -74,6 +80,7 @@ class PerformanceNodeTiming { }, environment: { + __proto__: null, enumerable: true, configurable: true, get() { @@ -82,6 +89,7 @@ class PerformanceNodeTiming { }, loopStart: { + __proto__: null, enumerable: true, configurable: true, get() { @@ -90,6 +98,7 @@ class PerformanceNodeTiming { }, loopExit: { + __proto__: null, enumerable: true, configurable: true, get() { @@ -98,6 +107,7 @@ class PerformanceNodeTiming { }, bootstrapComplete: { + __proto__: null, enumerable: true, configurable: true, get() { @@ -107,6 +117,7 @@ class PerformanceNodeTiming { }, idleTime: { + __proto__: null, enumerable: true, configurable: true, get: loopIdleTime, diff --git a/lib/internal/perf/observe.js b/lib/internal/perf/observe.js index 37c389e1497..2404a750c0e 100644 --- a/lib/internal/perf/observe.js +++ b/lib/internal/perf/observe.js @@ -24,6 +24,8 @@ const { NODE_PERFORMANCE_ENTRY_TYPE_GC, NODE_PERFORMANCE_ENTRY_TYPE_HTTP2, NODE_PERFORMANCE_ENTRY_TYPE_HTTP, + NODE_PERFORMANCE_ENTRY_TYPE_NET, + NODE_PERFORMANCE_ENTRY_TYPE_DNS, }, installGarbageCollectionTracking, observerCounts, @@ -53,6 +55,7 @@ const { customInspectSymbol: kInspect, deprecate, lazyDOMException, + kEmptyObject, } = require('internal/util'); const { @@ -61,6 +64,8 @@ const { const { inspect } = require('util'); +const { now } = require('internal/perf/utils'); + const kBuffer = Symbol('kBuffer'); const kCallback = Symbol('kCallback'); const kDispatch = Symbol('kDispatch'); @@ -79,21 +84,26 @@ const kTypeMultiple = 1; let gcTrackingInstalled = false; const kSupportedEntryTypes = ObjectFreeze([ + 'dns', 'function', 'gc', 'http', 'http2', 'mark', 'measure', + 'net', + 'resource', ]); // Performance timeline entry Buffers let markEntryBuffer = []; let measureEntryBuffer = []; +let resourceTimingBuffer = []; const kMaxPerformanceEntryBuffers = 1e6; const kClearPerformanceEntryBuffers = ObjectFreeze({ 'mark': 'performance.clearMarks', 'measure': 'performance.clearMeasures', + 'resource': 'performance.clearResourceTimings', }); const kWarnedEntryTypes = new SafeMap(); @@ -118,6 +128,8 @@ function getObserverType(type) { case 'gc': return NODE_PERFORMANCE_ENTRY_TYPE_GC; case 'http2': return NODE_PERFORMANCE_ENTRY_TYPE_HTTP2; case 'http': return NODE_PERFORMANCE_ENTRY_TYPE_HTTP; + case 'net': return NODE_PERFORMANCE_ENTRY_TYPE_NET; + case 'dns': return NODE_PERFORMANCE_ENTRY_TYPE_DNS; } } @@ -204,7 +216,7 @@ class PerformanceObserver { this[kCallback] = callback; } - observe(options = {}) { + observe(options = kEmptyObject) { validateObject(options, 'options'); const { entryTypes, @@ -337,6 +349,8 @@ function enqueue(entry) { buffer = markEntryBuffer; } else if (entryType === 'measure') { buffer = measureEntryBuffer; + } else if (entryType === 'resource') { + buffer = resourceTimingBuffer; } else { return; } @@ -362,16 +376,19 @@ function enqueue(entry) { } function clearEntriesFromBuffer(type, name) { - if (type !== 'mark' && type !== 'measure') { + if (type !== 'mark' && type !== 'measure' && type !== 'resource') { return; } if (type === 'mark') { markEntryBuffer = name === undefined ? [] : ArrayPrototypeFilter(markEntryBuffer, (entry) => entry.name !== name); - } else { + } else if (type === 'measure') { measureEntryBuffer = name === undefined ? [] : ArrayPrototypeFilter(measureEntryBuffer, (entry) => entry.name !== name); + } else { + resourceTimingBuffer = name === undefined ? + [] : ArrayPrototypeFilter(resourceTimingBuffer, (entry) => entry.name !== name); } } @@ -381,11 +398,13 @@ function filterBufferMapByNameAndType(name, type) { bufferList = markEntryBuffer; } else if (type === 'measure') { bufferList = measureEntryBuffer; + } else if (type === 'resource') { + bufferList = resourceTimingBuffer; } else if (type !== undefined) { // Unrecognized type; return []; } else { - bufferList = ArrayPrototypeConcat(markEntryBuffer, measureEntryBuffer); + bufferList = ArrayPrototypeConcat(markEntryBuffer, measureEntryBuffer, resourceTimingBuffer); } if (name !== undefined) { bufferList = ArrayPrototypeFilter(bufferList, (buffer) => buffer.name === name); @@ -443,6 +462,30 @@ function hasObserver(type) { return observerCounts[observerType] > 0; } + +function startPerf(target, key, context = {}) { + target[key] = { + ...context, + startTime: now(), + }; +} + +function stopPerf(target, key, context = {}) { + const ctx = target[key]; + if (!ctx) { + return; + } + const startTime = ctx.startTime; + const entry = new InternalPerformanceEntry( + ctx.name, + ctx.type, + startTime, + now() - startTime, + { ...ctx.detail, ...context.detail }, + ); + enqueue(entry); +} + module.exports = { PerformanceObserver, PerformanceObserverEntryList, @@ -450,4 +493,6 @@ module.exports = { hasObserver, clearEntriesFromBuffer, filterBufferMapByNameAndType, + startPerf, + stopPerf, }; diff --git a/lib/internal/perf/performance.js b/lib/internal/perf/performance.js index 20603fa382e..26a80f51cf6 100644 --- a/lib/internal/perf/performance.js +++ b/lib/internal/perf/performance.js @@ -19,6 +19,8 @@ const { const { now } = require('internal/perf/utils'); +const { markResourceTiming } = require('internal/perf/resource_timing'); + const { mark, measure, @@ -82,6 +84,13 @@ function clearMeasures(name) { clearEntriesFromBuffer('measure', name); } +function clearResourceTimings(name) { + if (name !== undefined) { + name = `${name}`; + } + clearEntriesFromBuffer('resource', name); +} + function getEntries() { return filterBufferMapByNameAndType(); } @@ -108,56 +117,81 @@ ObjectSetPrototypeOf(InternalPerformance.prototype, Performance.prototype); ObjectDefineProperties(Performance.prototype, { clearMarks: { + __proto__: null, configurable: true, enumerable: false, value: clearMarks, }, clearMeasures: { + __proto__: null, configurable: true, enumerable: false, value: clearMeasures, }, + clearResourceTimings: { + __proto__: null, + configurable: true, + enumerable: false, + value: clearResourceTimings, + }, eventLoopUtilization: { + __proto__: null, configurable: true, enumerable: false, value: eventLoopUtilization, }, getEntries: { + __proto__: null, configurable: true, enumerable: false, value: getEntries, }, getEntriesByName: { + __proto__: null, configurable: true, enumerable: false, value: getEntriesByName, }, getEntriesByType: { + __proto__: null, configurable: true, enumerable: false, value: getEntriesByType, }, mark: { + __proto__: null, configurable: true, enumerable: false, value: mark, }, measure: { + __proto__: null, configurable: true, enumerable: false, value: measure, }, nodeTiming: { + __proto__: null, configurable: true, enumerable: false, value: nodeTiming, }, + // In the browser, this function is not public. However, it must be used inside fetch + // which is a Node.js dependency, not a internal module + markResourceTiming: { + __proto__: null, + configurable: true, + enumerable: false, + value: markResourceTiming, + }, now: { + __proto__: null, configurable: true, enumerable: false, value: now, }, timerify: { + __proto__: null, configurable: true, enumerable: false, value: timerify, @@ -167,11 +201,13 @@ ObjectDefineProperties(Performance.prototype, { // TODO(joyeecheung): we may want to warn about access to // this during snapshot building. timeOrigin: { + __proto__: null, configurable: true, enumerable: true, value: getTimeOriginTimestamp(), }, toJSON: { + __proto__: null, configurable: true, enumerable: true, value: toJSON, @@ -180,6 +216,7 @@ ObjectDefineProperties(Performance.prototype, { function refreshTimeOrigin() { ObjectDefineProperty(Performance.prototype, 'timeOrigin', { + __proto__: null, configurable: true, enumerable: true, value: getTimeOriginTimestamp(), diff --git a/lib/internal/perf/resource_timing.js b/lib/internal/perf/resource_timing.js new file mode 100644 index 00000000000..63403bf0ac4 --- /dev/null +++ b/lib/internal/perf/resource_timing.js @@ -0,0 +1,183 @@ +'use strict'; +// https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming + +const { InternalPerformanceEntry } = require('internal/perf/performance_entry'); +const { SymbolToStringTag } = primordials; +const assert = require('internal/assert'); +const { enqueue } = require('internal/perf/observe'); +const { Symbol, ObjectSetPrototypeOf } = primordials; + +const kCacheMode = Symbol('kCacheMode'); +const kRequestedUrl = Symbol('kRequestedUrl'); +const kTimingInfo = Symbol('kTimingInfo'); +const kInitiatorType = Symbol('kInitiatorType'); + +const { + codes: { + ERR_ILLEGAL_CONSTRUCTOR, + } +} = require('internal/errors'); + +class InternalPerformanceResourceTiming extends InternalPerformanceEntry { + constructor(requestedUrl, initiatorType, timingInfo, cacheMode = '') { + super(requestedUrl, 'resource'); + this[kInitiatorType] = initiatorType; + this[kRequestedUrl] = requestedUrl; + // https://fetch.spec.whatwg.org/#fetch-timing-info + // This class is using timingInfo assuming it's already validated. + // The spec doesn't say to validate it in the class construction. + this[kTimingInfo] = timingInfo; + this[kCacheMode] = cacheMode; + } + + get [SymbolToStringTag]() { + return 'PerformanceResourceTiming'; + } + + get name() { + return this[kRequestedUrl]; + } + + get startTime() { + return this[kTimingInfo].startTime; + } + + get duration() { + return this[kTimingInfo].endTime - this[kTimingInfo].startTime; + } + + get initiatorType() { + return this[kInitiatorType]; + } + + get workerStart() { + return this[kTimingInfo].finalServiceWorkerStartTime; + } + + get redirectStart() { + return this[kTimingInfo].redirectStartTime; + } + + get redirectEnd() { + return this[kTimingInfo].redirectEndTime; + } + + get fetchStart() { + return this[kTimingInfo].postRedirectStartTime; + } + + get domainLookupStart() { + return this[kTimingInfo].finalConnectionTimingInfo?.domainLookupStartTime; + } + + get domainLookupEnd() { + return this[kTimingInfo].finalConnectionTimingInfo?.domainLookupEndTime; + } + + get connectStart() { + return this[kTimingInfo].finalConnectionTimingInfo?.connectionStartTime; + } + + get connectEnd() { + return this[kTimingInfo].finalConnectionTimingInfo?.connectionEndTime; + } + + get secureConnectionStart() { + return this[kTimingInfo] + .finalConnectionTimingInfo?.secureConnectionStartTime; + } + + get nextHopProtocol() { + return this[kTimingInfo] + .finalConnectionTimingInfo?.ALPNNegotiatedProtocol; + } + + get requestStart() { + return this[kTimingInfo].finalNetworkRequestStartTime; + } + + get responseStart() { + return this[kTimingInfo].finalNetworkResponseStartTime; + } + + get responseEnd() { + return this[kTimingInfo].endTime; + } + + get encodedBodySize() { + return this[kTimingInfo].encodedBodySize; + } + + get decodedBodySize() { + return this[kTimingInfo].decodedBodySize; + } + + get transferSize() { + if (this[kCacheMode] === 'local') return 0; + if (this[kCacheMode] === 'validated') return 300; + + return this[kTimingInfo].encodedBodySize + 300; + } + + toJSON() { + return { + name: this.name, + entryType: this.entryType, + startTime: this.startTime, + duration: this.duration, + initiatorType: this[kInitiatorType], + nextHopProtocol: this.nextHopProtocol, + workerStart: this.workerStart, + redirectStart: this.redirectStart, + redirectEnd: this.redirectEnd, + fetchStart: this.fetchStart, + domainLookupStart: this.domainLookupStart, + domainLookupEnd: this.domainLookupEnd, + connectStart: this.connectStart, + connectEnd: this.connectEnd, + secureConnectionStart: this.secureConnectionStart, + requestStart: this.requestStart, + responseStart: this.responseStart, + responseEnd: this.responseEnd, + transferSize: this.transferSize, + encodedBodySize: this.encodedBodySize, + decodedBodySize: this.decodedBodySize, + }; + } +} + +class PerformanceResourceTiming extends InternalPerformanceResourceTiming { + constructor() { + throw new ERR_ILLEGAL_CONSTRUCTOR(); + } +} + +// https://w3c.github.io/resource-timing/#dfn-mark-resource-timing +function markResourceTiming( + timingInfo, + requestedUrl, + initiatorType, + global, + cacheMode, +) { + // https://w3c.github.io/resource-timing/#dfn-setup-the-resource-timing-entry + assert( + cacheMode === '' || cacheMode === 'local', + 'cache must be an empty string or \'local\'', + ); + const resource = new InternalPerformanceResourceTiming( + requestedUrl, + initiatorType, + timingInfo, + cacheMode, + ); + + ObjectSetPrototypeOf(resource, PerformanceResourceTiming.prototype); + enqueue(resource); + return resource; +} + +module.exports = { + PerformanceResourceTiming, + markResourceTiming, +}; diff --git a/lib/internal/perf/timerify.js b/lib/internal/perf/timerify.js index dae0b06bf80..e4c97e70353 100644 --- a/lib/internal/perf/timerify.js +++ b/lib/internal/perf/timerify.js @@ -6,7 +6,6 @@ const { MathCeil, ReflectApply, ReflectConstruct, - Symbol, } = primordials; const { InternalPerformanceEntry } = require('internal/perf/performance_entry'); @@ -21,10 +20,6 @@ const { isHistogram } = require('internal/histogram'); -const { - isConstructor, -} = internalBinding('util'); - const { codes: { ERR_INVALID_ARG_TYPE, @@ -35,7 +30,9 @@ const { enqueue, } = require('internal/perf/observe'); -const kTimerified = Symbol('kTimerified'); +const { + kEmptyObject, +} = require('internal/util'); function processComplete(name, start, args, histogram) { const duration = now() - start; @@ -55,7 +52,7 @@ function processComplete(name, start, args, histogram) { enqueue(entry); } -function timerify(fn, options = {}) { +function timerify(fn, options = kEmptyObject) { validateFunction(fn, 'fn'); validateObject(options, 'options'); @@ -71,16 +68,13 @@ function timerify(fn, options = {}) { histogram); } - if (fn[kTimerified]) return fn[kTimerified]; - - const constructor = isConstructor(fn); - function timerified(...args) { + const isConstructorCall = new.target !== undefined; const start = now(); - const result = constructor ? + const result = isConstructorCall ? ReflectConstruct(fn, args, fn) : ReflectApply(fn, this, args); - if (!constructor && typeof result?.finally === 'function') { + if (!isConstructorCall && typeof result?.finally === 'function') { return result.finally( FunctionPrototypeBind( processComplete, @@ -95,31 +89,20 @@ function timerify(fn, options = {}) { } ObjectDefineProperties(timerified, { - [kTimerified]: { - configurable: false, - enumerable: false, - value: timerified, - }, length: { + __proto__: null, configurable: false, enumerable: true, value: fn.length, }, name: { + __proto__: null, configurable: false, enumerable: true, value: `timerified ${fn.name}` } }); - ObjectDefineProperties(fn, { - [kTimerified]: { - configurable: false, - enumerable: false, - value: timerified, - } - }); - return timerified; } diff --git a/lib/internal/perf/usertiming.js b/lib/internal/perf/usertiming.js index 496c75deb3b..5762d256d97 100644 --- a/lib/internal/perf/usertiming.js +++ b/lib/internal/perf/usertiming.js @@ -26,7 +26,11 @@ const { }, } = require('internal/errors'); -const { structuredClone, lazyDOMException } = require('internal/util'); +const { + kEmptyObject, + lazyDOMException, + structuredClone, +} = require('internal/util'); const markTimings = new SafeMap(); @@ -60,7 +64,7 @@ class PerformanceMark extends InternalPerformanceEntry { name = `${name}`; if (nodeTimingReadOnlyAttributes.has(name)) throw new ERR_INVALID_ARG_VALUE('name', name); - options ??= {}; + options ??= kEmptyObject; validateObject(options, 'options'); const startTime = options.startTime ?? now(); validateNumber(startTime, 'startTime'); @@ -90,7 +94,7 @@ class PerformanceMeasure extends InternalPerformanceEntry { } } -function mark(name, options = {}) { +function mark(name, options = kEmptyObject) { const mark = new PerformanceMark(name, options); enqueue(mark); return mark; diff --git a/lib/internal/policy/manifest.js b/lib/internal/policy/manifest.js index a0cd9707a2c..062e1ba219b 100644 --- a/lib/internal/policy/manifest.js +++ b/lib/internal/policy/manifest.js @@ -10,12 +10,11 @@ const { ObjectKeys, ObjectSetPrototypeOf, RegExpPrototypeExec, - RegExpPrototypeTest, SafeMap, SafeSet, + RegExpPrototypeSymbolReplace, StringPrototypeEndsWith, StringPrototypeStartsWith, - StringPrototypeReplace, Symbol, uncurryThis, } = primordials; @@ -202,7 +201,7 @@ class DependencyMapperInstance { let ret; if (parsedURLs && parsedURLs.has(to)) { ret = parsedURLs.get(to); - } else if (RegExpPrototypeTest(kRelativeURLStringPattern, to)) { + } else if (RegExpPrototypeExec(kRelativeURLStringPattern, to) !== null) { ret = resolve(to, manifest.href); } else { ret = resolve(to); @@ -301,7 +300,7 @@ function findScopeHREF(href, scopeStore, allowSame) { if (href !== '') { // default URL parser does some stuff to special urls... skip if this is // just the protocol - if (RegExpPrototypeTest(/^[^:]*[:]$/, href)) { + if (RegExpPrototypeExec(/^[^:]*[:]$/, href) !== null) { protocol = href; } else { let currentURL = new URL(href); @@ -669,7 +668,7 @@ module.exports = ObjectFreeze({ Manifest }); */ function canonicalizeSpecifier(specifier, base) { try { - if (RegExpPrototypeTest(kRelativeURLStringPattern, specifier)) { + if (RegExpPrototypeExec(kRelativeURLStringPattern, specifier) !== null) { return resolve(specifier, base).href; } return resolve(specifier).href; @@ -690,13 +689,13 @@ const emptyOrProtocolOrResolve = (resourceHREF, base) => { if (resourceHREF === '') return ''; if (StringPrototypeEndsWith(resourceHREF, ':')) { // URL parse will trim these anyway, save the compute - resourceHREF = StringPrototypeReplace( - resourceHREF, + resourceHREF = RegExpPrototypeSymbolReplace( // eslint-disable-next-line /^[\x00-\x1F\x20]|\x09\x0A\x0D|[\x00-\x1F\x20]$/g, + resourceHREF, '' ); - if (RegExpPrototypeTest(/^[a-zA-Z][a-zA-Z+\-.]*:$/, resourceHREF)) { + if (RegExpPrototypeExec(/^[a-zA-Z][a-zA-Z+\-.]*:$/, resourceHREF) !== null) { return resourceHREF; } } @@ -718,7 +717,7 @@ const resolve = (originalHREF, base) => { parsedURLs = parsedURLs ?? new SafeMap(); if (parsedURLs.has(originalHREF)) { return parsedURLs.get(originalHREF); - } else if (RegExpPrototypeTest(kRelativeURLStringPattern, originalHREF)) { + } else if (RegExpPrototypeExec(kRelativeURLStringPattern, originalHREF) !== null) { const resourceURL = new URL(originalHREF, base); parsedURLs.set(resourceURL.href, resourceURL); return resourceURL; diff --git a/lib/internal/policy/sri.js b/lib/internal/policy/sri.js index 22704704a31..72f7798ce4f 100644 --- a/lib/internal/policy/sri.js +++ b/lib/internal/policy/sri.js @@ -10,7 +10,6 @@ const { ObjectSetPrototypeOf, RegExp, RegExpPrototypeExec, - RegExpPrototypeTest, StringPrototypeSlice, } = primordials; @@ -48,6 +47,7 @@ const parse = (str) => { // Avoid setters being fired ObjectDefineProperty(entries, entries.length, { + __proto__: null, enumerable: true, configurable: true, value: ObjectFreeze({ @@ -61,7 +61,7 @@ const parse = (str) => { } if (prevIndex !== str.length) { - if (!RegExpPrototypeTest(kAllWSP, StringPrototypeSlice(str, prevIndex))) { + if (RegExpPrototypeExec(kAllWSP, StringPrototypeSlice(str, prevIndex)) === null) { throw new ERR_SRI_PARSE(str, str[prevIndex], prevIndex); } } diff --git a/lib/internal/process/esm_loader.js b/lib/internal/process/esm_loader.js index 73385a85b4e..eeb6ad77a7e 100644 --- a/lib/internal/process/esm_loader.js +++ b/lib/internal/process/esm_loader.js @@ -40,23 +40,24 @@ async function importModuleDynamicallyCallback(wrap, specifier, assertions) { }; const esmLoader = new ESMLoader(); - exports.esmLoader = esmLoader; +// Module.runMain() causes loadESM() to re-run (which it should do); however, this should NOT cause +// ESM to be re-initialised; doing so causes duplicate custom loaders to be added to the public +// esmLoader. +let isESMInitialized = false; + /** * Causes side-effects: user-defined loader hooks are added to esmLoader. * @returns {void} */ async function initializeLoader() { + if (isESMInitialized) { return; } + const { getOptionValue } = require('internal/options'); - // customLoaders CURRENTLY can be only 1 (a string) - // Once chaining is implemented, it will be string[] const customLoaders = getOptionValue('--experimental-loader'); - if (!customLoaders.length) return; - - const { emitExperimentalWarning } = require('internal/util'); - emitExperimentalWarning('--experimental-loader'); + if (customLoaders.length === 0) return; let cwd; try { @@ -71,7 +72,7 @@ async function initializeLoader() { const internalEsmLoader = new ESMLoader(); // Importation must be handled by internal loader to avoid poluting userland - const exports = await internalEsmLoader.import( + const keyedExportsList = await internalEsmLoader.import( customLoaders, pathToFileURL(cwd).href, ObjectCreate(null), @@ -79,7 +80,9 @@ async function initializeLoader() { // Hooks must then be added to external/public loader // (so they're triggered in userland) - await esmLoader.addCustomLoaders(exports); + await esmLoader.addCustomLoaders(keyedExportsList); + + isESMInitialized = true; } exports.loadESM = async function loadESM(callback) { diff --git a/lib/internal/process/execution.js b/lib/internal/process/execution.js index 4a8e51f694f..44d73164eb4 100644 --- a/lib/internal/process/execution.js +++ b/lib/internal/process/execution.js @@ -1,6 +1,7 @@ 'use strict'; const { + RegExpPrototypeExec, globalThis, } = primordials; @@ -45,6 +46,7 @@ function evalModule(source, print) { } const { loadESM } = require('internal/process/esm_loader'); const { handleMainPromise } = require('internal/modules/run_main'); + RegExpPrototypeExec(/^/, ''); // Necessary to reset RegExp statics before user code runs. return handleMainPromise(loadESM((loader) => loader.eval(source))); } @@ -72,6 +74,7 @@ function evalScript(name, body, breakFirstLine, print) { return (main) => main(); `; globalThis.__filename = name; + RegExpPrototypeExec(/^/, ''); // Necessary to reset RegExp statics before user code runs. const result = module._compile(script, `${name}-wrapper`)(() => require('vm').runInThisContext(body, { filename: name, @@ -139,27 +142,6 @@ function createOnGlobalUncaughtException() { // call that threw and was never cleared. So clear it now. clearDefaultTriggerAsyncId(); - // If diagnostic reporting is enabled, call into its handler to see - // whether it is interested in handling the situation. - // Ignore if the error is scoped inside a domain. - // use == in the checks as we want to allow for null and undefined - if (er == null || er.domain == null) { - try { - const report = internalBinding('report'); - if (report != null && report.shouldReportOnUncaughtException()) { - report.writeReport( - typeof er?.message === 'string' ? - er.message : - 'Exception', - 'Exception', - null, - er ?? {}); - } - } catch { - // Ignore the exception. Diagnostic reporting is unavailable. - } - } - const type = fromPromise ? 'unhandledRejection' : 'uncaughtException'; process.emit('uncaughtExceptionMonitor', er, type); if (exceptionHandlerState.captureFn !== null) { diff --git a/lib/internal/process/per_thread.js b/lib/internal/process/per_thread.js index 709bcb7b137..c2be274659e 100644 --- a/lib/internal/process/per_thread.js +++ b/lib/internal/process/per_thread.js @@ -15,8 +15,9 @@ const { Float64Array, NumberMAX_SAFE_INTEGER, ObjectFreeze, + ObjectDefineProperty, ReflectApply, - RegExpPrototypeTest, + RegExpPrototypeExec, SafeArrayIterator, Set, SetPrototypeEntries, @@ -339,7 +340,7 @@ function buildAllowedFlags() { // not. if (typeof key === 'string') { key = StringPrototypeReplace(key, replaceUnderscoresRegex, '-'); - if (RegExpPrototypeTest(leadingDashesRegex, key)) { + if (RegExpPrototypeExec(leadingDashesRegex, key) !== null) { key = StringPrototypeReplace(key, trailingValuesRegex, ''); return ArrayPrototypeIncludes(this[kInternal].array, key); } @@ -371,9 +372,15 @@ function buildAllowedFlags() { return SetPrototypeValues(this[kInternal].set); } } - NodeEnvironmentFlagsSet.prototype.keys = - NodeEnvironmentFlagsSet.prototype[SymbolIterator] = - NodeEnvironmentFlagsSet.prototype.values; + const flagSetValues = NodeEnvironmentFlagsSet.prototype.values; + ObjectDefineProperty(NodeEnvironmentFlagsSet.prototype, SymbolIterator, { + __proto__: null, + value: flagSetValues, + }); + ObjectDefineProperty(NodeEnvironmentFlagsSet.prototype, 'keys', { + __proto__: null, + value: flagSetValues, + }); ObjectFreeze(NodeEnvironmentFlagsSet.prototype.constructor); ObjectFreeze(NodeEnvironmentFlagsSet.prototype); diff --git a/lib/internal/process/promises.js b/lib/internal/process/promises.js index fd5cb73fbbe..00a81c014e1 100644 --- a/lib/internal/process/promises.js +++ b/lib/internal/process/promises.js @@ -311,6 +311,7 @@ function getErrorWithoutStack(name, message) { const err = new Error(message); if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = tmp; ObjectDefineProperty(err, 'name', { + __proto__: null, value: name, enumerable: false, writable: true, diff --git a/lib/internal/promise_hooks.js b/lib/internal/promise_hooks.js index be70879cbcb..0938a86d064 100644 --- a/lib/internal/promise_hooks.js +++ b/lib/internal/promise_hooks.js @@ -11,6 +11,7 @@ const { const { setPromiseHooks } = internalBinding('async_wrap'); const { triggerUncaughtException } = internalBinding('errors'); +const { kEmptyObject } = require('internal/util'); const { validatePlainFunction } = require('internal/validators'); const hooks = { @@ -101,7 +102,7 @@ const onBefore = makeUseHook('before'); const onAfter = makeUseHook('after'); const onSettled = makeUseHook('settled'); -function createHook({ init, before, after, settled } = {}) { +function createHook({ init, before, after, settled } = kEmptyObject) { const hooks = []; if (init) ArrayPrototypePush(hooks, onInit(init)); diff --git a/lib/internal/readline/interface.js b/lib/internal/readline/interface.js index e50172f5628..1431ae79282 100644 --- a/lib/internal/readline/interface.js +++ b/lib/internal/readline/interface.js @@ -19,12 +19,12 @@ const { NumberIsFinite, NumberIsNaN, ObjectSetPrototypeOf, - RegExpPrototypeTest, + RegExpPrototypeExec, + RegExpPrototypeSymbolReplace, + RegExpPrototypeSymbolSplit, StringPrototypeCodePointAt, StringPrototypeEndsWith, - StringPrototypeMatch, StringPrototypeRepeat, - StringPrototypeReplace, StringPrototypeSlice, StringPrototypeSplit, StringPrototypeStartsWith, @@ -43,6 +43,7 @@ const { validateString, validateUint32, } = require('internal/validators'); +const { kEmptyObject } = require('internal/util'); const { inspect, getStringWidth, @@ -550,12 +551,12 @@ class Interface extends InterfaceConstructor { this[kSawReturnAt] && DateNow() - this[kSawReturnAt] <= this.crlfDelay ) { - string = StringPrototypeReplace(string, /^\n/, ''); + string = RegExpPrototypeSymbolReplace(/^\n/, string, ''); this[kSawReturnAt] = 0; } // Run test() on the new string chunk, not on the entire line buffer. - const newPartContainsEnding = RegExpPrototypeTest(lineEnding, string); + const newPartContainsEnding = RegExpPrototypeExec(lineEnding, string) !== null; if (this[kLine_buffer]) { string = this[kLine_buffer] + string; @@ -693,7 +694,7 @@ class Interface extends InterfaceConstructor { ArrayPrototypeReverse(ArrayFrom(leading)), '' ); - const match = StringPrototypeMatch(reversed, /^\s*(?:[^\w\s]+|\w+)?/); + const match = RegExpPrototypeExec(/^\s*(?:[^\w\s]+|\w+)?/, reversed); this[kMoveCursor](-match[0].length); } } @@ -701,7 +702,7 @@ class Interface extends InterfaceConstructor { [kWordRight]() { if (this.cursor < this.line.length) { const trailing = StringPrototypeSlice(this.line, this.cursor); - const match = StringPrototypeMatch(trailing, /^(?:\s+|[^\w\s]+|\w+)\s*/); + const match = RegExpPrototypeExec(/^(?:\s+|[^\w\s]+|\w+)\s*/, trailing); this[kMoveCursor](match[0].length); } } @@ -743,7 +744,7 @@ class Interface extends InterfaceConstructor { ArrayPrototypeReverse(ArrayFrom(leading)), '' ); - const match = StringPrototypeMatch(reversed, /^\s*(?:[^\w\s]+|\w+)?/); + const match = RegExpPrototypeExec(/^\s*(?:[^\w\s]+|\w+)?/, reversed); leading = StringPrototypeSlice( leading, 0, @@ -760,7 +761,7 @@ class Interface extends InterfaceConstructor { [kDeleteWordRight]() { if (this.cursor < this.line.length) { const trailing = StringPrototypeSlice(this.line, this.cursor); - const match = StringPrototypeMatch(trailing, /^(?:\s+|\W+|\w+)\s*/); + const match = RegExpPrototypeExec(/^(?:\s+|\W+|\w+)\s*/, trailing); this.line = StringPrototypeSlice(this.line, 0, this.cursor) + StringPrototypeSlice(trailing, match[0].length); @@ -922,7 +923,7 @@ class Interface extends InterfaceConstructor { // Handle a write from the tty [kTtyWrite](s, key) { const previousKey = this[kPreviousKey]; - key = key || {}; + key = key || kEmptyObject; this[kPreviousKey] = key; // Activate or deactivate substring search. @@ -1163,7 +1164,7 @@ class Interface extends InterfaceConstructor { // falls through default: if (typeof s === 'string' && s) { - const lines = StringPrototypeSplit(s, /\r\n|\n|\r/); + const lines = RegExpPrototypeSymbolSplit(/\r\n|\n|\r/, s); for (let i = 0, len = lines.length; i < len; i++) { if (i > 0) { this[kLine](); diff --git a/lib/internal/readline/utils.js b/lib/internal/readline/utils.js index 55b3e07b4c1..83609b71fb5 100644 --- a/lib/internal/readline/utils.js +++ b/lib/internal/readline/utils.js @@ -3,11 +3,10 @@ const { ArrayPrototypeSlice, ArrayPrototypeSort, - RegExpPrototypeTest, + RegExpPrototypeExec, StringFromCharCode, StringPrototypeCharCodeAt, StringPrototypeCodePointAt, - StringPrototypeMatch, StringPrototypeSlice, StringPrototypeToLowerCase, Symbol, @@ -190,11 +189,11 @@ function* emitKeys(stream) { const cmd = StringPrototypeSlice(s, cmdStart); let match; - if ((match = StringPrototypeMatch(cmd, /^(\d\d?)(;(\d))?([~^$])$/))) { + if ((match = RegExpPrototypeExec(/^(\d\d?)(;(\d))?([~^$])$/, cmd))) { code += match[1] + match[4]; modifier = (match[3] || 1) - 1; } else if ( - (match = StringPrototypeMatch(cmd, /^((\d;)?(\d))?([A-Za-z])$/)) + (match = RegExpPrototypeExec(/^((\d;)?(\d))?([A-Za-z])$/, cmd)) ) { code += match[4]; modifier = (match[3] || 1) - 1; @@ -340,10 +339,10 @@ function* emitKeys(stream) { StringPrototypeCharCodeAt(ch) + StringPrototypeCharCodeAt('a') - 1 ); key.ctrl = true; - } else if (RegExpPrototypeTest(/^[0-9A-Za-z]$/, ch)) { + } else if (RegExpPrototypeExec(/^[0-9A-Za-z]$/, ch) !== null) { // Letter, number, shift+letter key.name = StringPrototypeToLowerCase(ch); - key.shift = RegExpPrototypeTest(/^[A-Z]$/, ch); + key.shift = RegExpPrototypeExec(/^[A-Z]$/, ch) !== null; key.meta = escaped; } else if (escaped) { // Escape sequence timeout @@ -366,6 +365,9 @@ function* emitKeys(stream) { // This runs in O(n log n). function commonPrefix(strings) { + if (strings.length === 0) { + return ''; + } if (strings.length === 1) { return strings[0]; } diff --git a/lib/internal/relational_require_cache/base_object.js b/lib/internal/relational_require_cache/base_object.js new file mode 100644 index 00000000000..d9dfb88710d --- /dev/null +++ b/lib/internal/relational_require_cache/base_object.js @@ -0,0 +1,25 @@ +'use strict'; + +const path = require('path'); +const { ArrayIsArray } = primordials; +const { RequireCache } = internalBinding('st_require_cache'); + +class BaseRelationalRequireCacheObject { + constructor(entries, dumpFilename) { + if (!entries) entries = [ process.cwd() ]; + + this.entries = (ArrayIsArray(entries) ? entries : [ entries ]).map((p) => { + while (p && p[p.length - 1] === path.sep) { + p = p.substr(0, p.length - 1); + } + return p; + }); + this.cache = new RequireCache(dumpFilename, this.entries); + } + + isLoaded() { + return this.cache.isLoaded(); + } +} + +module.exports = BaseRelationalRequireCacheObject; diff --git a/lib/internal/relational_require_cache/cost_watcher.js b/lib/internal/relational_require_cache/cost_watcher.js new file mode 100644 index 00000000000..2e5249236b3 --- /dev/null +++ b/lib/internal/relational_require_cache/cost_watcher.js @@ -0,0 +1,55 @@ +'use strict'; + +const { Symbol } = primordials; +const { DateNow } = primordials; +const Module = require('module'); + +const ORIG_REQUIRE = Symbol('Module#origRequire'); +const INJECT = Symbol('CostWatcher#inject'); + +class CostWatcher { + constructor() { + this.open = false; + this.time = 0; + } + + start() { + this[INJECT](); + } + + stop() { + if (!Module.prototype[ORIG_REQUIRE]) return; + + Module.prototype.require = Module.prototype[ORIG_REQUIRE]; + Module.prototype[ORIG_REQUIRE] = undefined; + } + + get cost() { + return this.time; + } + + [INJECT]() { + if (Module.prototype[ORIG_REQUIRE]) return; + + const self = this; + Module.prototype[ORIG_REQUIRE] = Module.prototype.require; + Module.prototype.require = function(id) { + let now; + if (!self.open) { + self.open = true; + now = DateNow(); + } + + const ret = this[ORIG_REQUIRE](id); + + if (now) { + self.open = false; + self.time += (DateNow() - now); + } + + return ret; + }; + } +} + +module.exports = CostWatcher; diff --git a/lib/internal/relational_require_cache/loader.js b/lib/internal/relational_require_cache/loader.js new file mode 100644 index 00000000000..4c6bbd383b1 --- /dev/null +++ b/lib/internal/relational_require_cache/loader.js @@ -0,0 +1,161 @@ +'use strict'; + +const { Symbol } = primordials; +const { Error } = primordials; +const { JSONParse } = primordials; + +const Module = require('module'); +const path = require('path'); +const vm = require('vm'); + +const debug = require('internal/util/debuglog') + .debuglog('require_cache/loader'); +const { makeRequireFunction } = require('internal/modules/cjs/helpers'); + +const BaseObject = require('internal/relational_require_cache/base_object'); + +const INJECT = Symbol('RelationalRequireCacheLoader#inject'); +const ORIG_DOT_JS = Symbol('RelationalRequireCacheLoader#origDotJS'); +const ORIG_DOT_JSON = Symbol('RelationalRequireCacheLoader#origDotJSON'); +const ORIG_RESOLVE_FILENAME = Symbol('RelationalRequireCacheLoader#origResolveFilename'); + +const { builtinModules } = Module; + +class RelationalRequireCacheLoader extends BaseObject { + constructor(filename, entries = process.cwd(), options = { + strictMode: false, + }) { + if (BaseObject.loader || BaseObject.recorder) { + // eslint-disable-next-line no-restricted-syntax + throw new Error('A alinode process only can create one require cache recorder / loader.'); + } + + super(entries, filename); + + this.strictMode = !!options.strictMode; + this.started = false; + + BaseObject.loader = this; + } + + start() { + if (this.started) return; + this[INJECT](); + } + + stop() { + if (!this.started) return; + + Module._resolveFilename = Module[ORIG_RESOLVE_FILENAME]; + Module[ORIG_RESOLVE_FILENAME] = undefined; + + Module._extensions['.js'] = Module._extensions[ORIG_DOT_JS]; + Module[ORIG_DOT_JS] = undefined; + + Module._extensions['.json'] = Module._extensions[ORIG_DOT_JSON]; + Module[ORIG_DOT_JSON] = undefined; + + this.started = false; + } + + setStrictMode(strict) { + this.strictMode = !!strict; + } + + [INJECT]() { + const self = this; + + // Module._resolveFilename + { + Module[ORIG_RESOLVE_FILENAME] = Module._resolveFilename; + // eslint-disable-next-line func-name-matching + Module._resolveFilename = function _resolveFilenameWithRRCR(request, parent, isMain, options) { + const parentFilename = parent ? self.cache.transformFilename(parent.filename) : ''; + const transformedRequest = path.isAbsolute(request) ? + self.cache.transformFilename(request) : + request; + const cachedPath = self.cache.queryRelation(parentFilename, transformedRequest); + + debug('getCachedPath', parentFilename, transformedRequest, cachedPath); + if (cachedPath) { + return self.cache.transformFilenameBack(cachedPath); + } + + if (self.strictMode && !builtinModules.includes(request)) { + // eslint-disable-next-line no-restricted-syntax + const err = new Error(`Cannot find module ${request}`); + err.code = 'MODULE_NOT_FOUND'; + throw err; + } + + return Module[ORIG_RESOLVE_FILENAME](request, parent, isMain, options); + }; + } + + // Module._extensions['.js'] + { + Module._extensions[ORIG_DOT_JS] = Module._extensions['.js']; + Module._extensions['.js'] = function dotJSWithRRCR(module, filename) { + const dummyFilename = self.cache.transformFilename(filename); + const code = self.cache.queryCode(dummyFilename); + debug('query code', dummyFilename, code && true); + if (!code) { + return Module._extensions[ORIG_DOT_JS](module, filename); + } + + // try { + debug('loadCachedJS', filename); + const script = new vm.Script(code.sourcecode, { + filename, + lineOffset: 0, + displayErrors: true, + cachedData: code.bytecode, + }); + // } catch (e) { + // throw e; + // } + + debug('cachedJSBytecode rejected:', script.cachedDataRejected); + const compiledWrapper = script.runInThisContext({ + displayErrors: true, + }); + + const dirname = path.dirname(filename); + const require = makeRequireFunction(module /** TODO(kaidi.zkd): policy */); + const exports = module.exports; + const thisValue = exports; + + // TODO(kaidi.zkd): inspectorWrapper + compiledWrapper.call(thisValue, exports, require, module, filename, dirname); + }; + } + + // Module._extensions['.json'] + { + Module._extensions[ORIG_DOT_JSON] = Module._extensions['.json']; + Module._extensions['.json'] = function dotJSONWithRRCR(module, filename) { + const dummyFilename = self.cache.transformFilename(filename); + let code = self.cache.queryCode(dummyFilename); + if (!code) { + return Module._extensions[ORIG_DOT_JSON](module, filename); + } + + try { + debug('loadCachedJSON'); + code = code.sourcecode.toString(); + if (code.charCodeAt(0) === '0xfeff') { + code = code.slice(1); + } + module.exports = JSONParse(code); + } catch (err) { + err.message = `${filename}: ${err.message}`; + throw err; + } + }; + } + + this.started = true; + } +} + +module.exports = RelationalRequireCacheLoader; diff --git a/lib/internal/relational_require_cache/recorder.js b/lib/internal/relational_require_cache/recorder.js new file mode 100644 index 00000000000..680883a2a0c --- /dev/null +++ b/lib/internal/relational_require_cache/recorder.js @@ -0,0 +1,108 @@ +'use strict'; + +const { Symbol } = primordials; +const { Error } = primordials; + +const { + findLongestRegisteredExtension, +} = require('internal/modules/cjs/loader'); + +const debug = require('internal/util/debuglog') + .debuglog('require_cache/recorder'); +const fs = require('fs'); +const Module = require('module'); +const path = require('path'); +const vm = require('vm'); + +const BaseObject = require('internal/relational_require_cache/base_object'); + +const INJECT = Symbol('RelationalRequireCacheRecorder#inject'); +const ORIG_COMPILE = Symbol('RelationalRequireCacheRecorder#origCompile'); +const ORIG_DOT_JSON = Symbol('RelationalRequireCacheRecorder#origDotJSON'); +const ORIG_RESOLVE_FILENAME = Symbol('RelationalRequireCacheRecorder#origResolveFilename'); + +class RelationalRequireCacheRecorder extends BaseObject { + constructor(entries = process.cwd()) { + if (BaseObject.loader || BaseObject.recorder) { + // eslint-disable-next-line no-restricted-syntax + throw new Error('A alinode process only can create one require cache recorder / loader.'); + } + + super(entries); + + BaseObject.recorder = this; + } + + start() { + this[INJECT](); + } + + dump(filename) { + return this.cache.dump(filename); + } + + [INJECT]() { + const self = this; + + // Module._resolveFilename + { + Module[ORIG_RESOLVE_FILENAME] = Module._resolveFilename; + // eslint-disable-next-line func-name-matching + Module._resolveFilename = function _resolveFilenameWithRRCW(request, parent, isMain, options) { + const filename = Module[ORIG_RESOLVE_FILENAME](request, parent, isMain, options); + + // inject logic below + if ( + path.isAbsolute(filename) && + [ '.js', '.json' ].includes(findLongestRegisteredExtension(filename)) + ) { + const parentFilename = parent ? + self.cache.transformFilename(parent.filename) : + ''; + + const target = self.cache.transformFilename(filename); + const transformedRequest = path.isAbsolute(request) ? + self.cache.transformFilename(request) : + request; + + debug('addRelation', parentFilename, transformedRequest, target); + self.cache.addRelation(parentFilename, transformedRequest, target); + } + + return filename; + }; + } + + // Module.prototype._compile + { + Module.prototype[ORIG_COMPILE] = Module.prototype._compile; + // eslint-disable-next-line func-name-matching + Module.prototype._compile = function _compileWithRRCW(content, filename) { + const wrapped = Module.wrap(content); + const script = new vm.Script(wrapped, { + filename, + lineOffset: 0, + displayErrors: true, + }); + + const buff = script.createCachedData(); + + self.cache.addCode(self.cache.transformFilename(filename), wrapped, buff); + + return this[ORIG_COMPILE](content, filename); + }; + } + + // Module._extensions['.json'] + { + Module._extensions[ORIG_DOT_JSON] = Module._extensions['.json']; + Module._extensions['.json'] = function dotJSONWithRRCW(module, filename) { + const content = fs.readFileSync(filename, 'utf8'); + self.cache.addCode(self.cache.transformFilename(filename), content, null); + return Module._extensions[ORIG_DOT_JSON](module, filename); + }; + } + } +} + +module.exports = RelationalRequireCacheRecorder; diff --git a/lib/internal/relational_require_cache/require_cache.js b/lib/internal/relational_require_cache/require_cache.js new file mode 100644 index 00000000000..64e6d0034f1 --- /dev/null +++ b/lib/internal/relational_require_cache/require_cache.js @@ -0,0 +1,122 @@ +'use strict'; + +const { Error } = primordials; + +const BaseObject = require('internal/relational_require_cache/base_object'); +const Module = require('module'); +const path = require('path'); +const vm = require('vm'); + +let singleton; + +class RequireCache extends BaseObject { + constructor(entries, filename) { + if (singleton) { + // eslint-disable-next-line no-restricted-syntax + throw new Error('only one RequireCacheReader or RequireCacheWriter can be created in one process.'); + } + + super(entries, filename); + singleton = this; + } + + transformFilename(filename) { + if (typeof filename !== 'string') { + // eslint-disable-next-line no-restricted-syntax + throw new Error('filename should be a string.'); + } + + return this.cache.transformFilename(filename); + } + + transformFilenameBack(filename) { + if (typeof filename !== 'string') { + // eslint-disable-next-line no-restricted-syntax + throw new Error('filename should be a string.'); + } + + return this.cache.transformFilenameBack(filename); + } +} + +class ExternalRequireCacheReader extends RequireCache { + constructor(filename, entries) { + super(entries, filename); + } + + queryRelation(parent, request) { + if (!path.isAbsolute(parent)) { + // eslint-disable-next-line no-restricted-syntax + throw new Error('parent filename should be absolute'); + } + + const transformedParent = this.transformFilename(parent); + const transformedRequest = path.isAbsolute(request) ? this.transformFilename(request) : request; + const cachedPath = this.cache.queryRelation(transformedParent, transformedRequest); + return cachedPath ? this.transformFilenameBack(cachedPath) : null; + } + + getCode(filename) { + if (!path.isAbsolute(filename)) { + // eslint-disable-next-line no-restricted-syntax + throw new Error('filename should be absolute.'); + } + + const dummyFilename = this.transformFilename(filename); + return this.cache.queryCode(dummyFilename); + } +} + +class ExternalRequireCacheWriter extends RequireCache { + constructor(entries) { + super(entries, undefined); + } + + addRelation(parent, request, target) { + if (!path.isAbsolute(parent) || !path.isAbsolute(target)) { + // eslint-disable-next-line no-restricted-syntax + throw new Error('parent and target filename should be absolute'); + } + + const transformedParent = this.cache.transformFilename(parent); + const transformedTarget = this.cache.transformFilename(target); + const transformedRequest = path.isAbsolute(request) ? this.transformFilename(request) : request; + + this.cache.addRelation(transformedParent, transformedRequest, transformedTarget); + } + + addCode(filename, code, options = {}) { + if (!path.isAbsolute(filename)) { + // eslint-disable-next-line no-restricted-syntax + throw new Error('filename should be absolute.'); + } + + let buff = null; + const dummyFilename = this.transformFilename(filename); + + if (options.shouldWrap) { + code = Module.wrap(code); + } + + if (options.bytecode) { + const script = new vm.Script(code, { + filename, + lineOffset: 0, + displayErrors: true, + }); + + buff = script.createCachedData(); + } + + this.cache.addCode(dummyFilename, code, buff); + } + + dump(filename) { + return this.cache.dump(filename); + } +} + +module.exports = { + Reader: ExternalRequireCacheReader, + Writer: ExternalRequireCacheWriter, +}; diff --git a/lib/internal/repl/await.js b/lib/internal/repl/await.js index ec1d0c8823e..c53ffce581e 100644 --- a/lib/internal/repl/await.js +++ b/lib/internal/repl/await.js @@ -237,8 +237,16 @@ function processTopLevelAwait(src) { // semicolon. Since there can only be more right parentheses between // node.expression.end and the semicolon, appending one more to // node.expression should be fine. - state.prepend(node, 'return ('); - state.append(node.expression, ')'); + // + // We also create a wrapper object around the result of the expression. + // Consider an expression of the form `(await x).y`. If we just return + // this expression from an async function, the caller will await `y`, too, + // if it evaluates to a Promise. Instead, we return + // `{ value: ((await x).y) }`, which allows the caller to retrieve the + // awaited value correctly. + state.prepend(node.expression, '{ value: ('); + state.prepend(node, 'return '); + state.append(node.expression, ') }'); } break; } diff --git a/lib/internal/repl/history.js b/lib/internal/repl/history.js index 74ef94e8107..9300283e001 100644 --- a/lib/internal/repl/history.js +++ b/lib/internal/repl/history.js @@ -4,7 +4,7 @@ const { ArrayPrototypeJoin, Boolean, FunctionPrototype, - StringPrototypeSplit, + RegExpPrototypeSymbolSplit, StringPrototypeTrim, } = primordials; @@ -90,7 +90,7 @@ function setupHistory(repl, historyPath, ready) { } if (data) { - repl.history = StringPrototypeSplit(data, /[\n\r]+/, repl.historySize); + repl.history = RegExpPrototypeSymbolSplit(/[\n\r]+/, data, repl.historySize); } else { repl.history = []; } diff --git a/lib/internal/repl/utils.js b/lib/internal/repl/utils.js index ee8c54be5bb..9e55b79fc7e 100644 --- a/lib/internal/repl/utils.js +++ b/lib/internal/repl/utils.js @@ -7,13 +7,13 @@ const { Boolean, FunctionPrototypeBind, MathMin, - RegExpPrototypeTest, + RegExpPrototypeExec, SafeSet, SafeStringIterator, StringPrototypeEndsWith, StringPrototypeIndexOf, StringPrototypeLastIndexOf, - StringPrototypeReplace, + StringPrototypeReplaceAll, StringPrototypeSlice, StringPrototypeStartsWith, StringPrototypeToLowerCase, @@ -68,7 +68,7 @@ function isRecoverableError(e, code) { // curly brace with parenthesis. Note: only the open parenthesis is added // here as the point is to test for potentially valid but incomplete // expressions. - if (RegExpPrototypeTest(/^\s*\{/, code) && + if (RegExpPrototypeExec(/^\s*\{/, code) !== null && isRecoverableError(e, `(${code}`)) return true; @@ -114,8 +114,8 @@ function isRecoverableError(e, code) { const token = StringPrototypeSlice(this.input, this.lastTokStart, this.pos); // See https://www.ecma-international.org/ecma-262/#sec-line-terminators - if (RegExpPrototypeTest(/\\(?:\r\n?|\n|\u2028|\u2029)$/, - token)) { + if (RegExpPrototypeExec(/\\(?:\r\n?|\n|\u2028|\u2029)$/, + token) !== null) { recoverable = true; } } @@ -288,9 +288,9 @@ function setupPreview(repl, contextSymbol, bufferSymbol, active) { function isInStrictMode(repl) { return repl.replMode === REPL_MODE_STRICT || ArrayPrototypeIncludes( ArrayPrototypeMap(process.execArgv, - (e) => StringPrototypeReplace( + (e) => StringPrototypeReplaceAll( StringPrototypeToLowerCase(e), - /_/g, + '_', '-' )), '--use-strict'); diff --git a/lib/internal/socketaddress.js b/lib/internal/socketaddress.js index 9697a1e7380..506f397180e 100644 --- a/lib/internal/socketaddress.js +++ b/lib/internal/socketaddress.js @@ -142,6 +142,12 @@ class InternalSocketAddress extends JSTransferable { constructor(handle) { super(); this[kHandle] = handle; + this[kDetail] = this[kHandle]?.detail({ + address: undefined, + port: undefined, + family: undefined, + flowlabel: undefined, + }); } } diff --git a/lib/internal/source_map/prepare_stack_trace.js b/lib/internal/source_map/prepare_stack_trace.js index 0635ee67541..55dc8b344f8 100644 --- a/lib/internal/source_map/prepare_stack_trace.js +++ b/lib/internal/source_map/prepare_stack_trace.js @@ -5,9 +5,9 @@ const { ArrayPrototypeJoin, ArrayPrototypeMap, ErrorPrototypeToString, + RegExpPrototypeSymbolSplit, StringPrototypeRepeat, StringPrototypeSlice, - StringPrototypeSplit, StringPrototypeStartsWith, SafeStringIterator, } = primordials; @@ -61,10 +61,15 @@ const prepareStackTrace = (globalThis, error, trace) => { try { // A stack trace will often have several call sites in a row within the // same file, cache the source map and file content accordingly: - const fileName = t.getFileName(); + let fileName = t.getFileName(); + let generated = false; + if (fileName === undefined) { + fileName = t.getEvalOrigin(); + generated = true; + } const sm = fileName === lastFileName ? lastSourceMap : - findSourceMap(fileName); + findSourceMap(fileName, generated); lastSourceMap = sm; lastFileName = fileName; if (sm) { @@ -88,8 +93,9 @@ const prepareStackTrace = (globalThis, error, trace) => { } // Construct call site name based on: v8.dev/docs/stack-trace-api: const fnName = t.getFunctionName() ?? t.getMethodName(); - const originalName = `${t.getTypeName() !== 'global' ? - `${t.getTypeName()}.` : ''}${fnName || ''}`; + const typeName = t.getTypeName(); + const namePrefix = typeName !== null && typeName !== 'global' ? `${typeName}.` : ''; + const originalName = `${namePrefix}${fnName || ''}`; // The original call site may have a different symbol name // associated with it, use it: const prefix = (name && name !== originalName) ? @@ -151,7 +157,7 @@ function getErrorSource( sourceMap.payload, originalSourcePathNoScheme ); - const lines = StringPrototypeSplit(source, /\r?\n/, originalLine + 1); + const lines = RegExpPrototypeSymbolSplit(/\r?\n/, source, originalLine + 1); const line = lines[originalLine]; if (!line) return exceptionLine; diff --git a/lib/internal/source_map/source_map_cache.js b/lib/internal/source_map/source_map_cache.js index e3721d024d9..c7770e7a6c7 100644 --- a/lib/internal/source_map/source_map_cache.js +++ b/lib/internal/source_map/source_map_cache.js @@ -7,9 +7,9 @@ const { ObjectKeys, ObjectGetOwnPropertyDescriptor, ObjectPrototypeHasOwnProperty, - RegExpPrototypeTest, + RegExpPrototypeExec, + RegExpPrototypeSymbolSplit, SafeMap, - StringPrototypeMatch, StringPrototypeSplit, } = primordials; @@ -30,12 +30,18 @@ const { normalizeReferrerURL, } = require('internal/modules/cjs/helpers'); const { validateBoolean } = require('internal/validators'); +const { setMaybeCacheGeneratedSourceMap } = internalBinding('errors'); + // Since the CJS module cache is mutable, which leads to memory leaks when // modules are deleted, we use a WeakMap so that the source map cache will // be purged automatically: const cjsSourceMapCache = new IterableWeakMap(); // The esm cache is not mutable, so we can use a Map without memory concerns: const esmSourceMapCache = new SafeMap(); +// The generated sources is not mutable, so we can use a Map without memory concerns: +const generatedSourceMapCache = new SafeMap(); +const kLeadingProtocol = /^\w+:\/\//; + const { fileURLToPath, pathToFileURL, URL } = require('internal/url'); let SourceMap; @@ -71,20 +77,19 @@ function setSourceMapsEnabled(val) { sourceMapsEnabled = val; } -function maybeCacheSourceMap(filename, content, cjsModuleInstance) { +function maybeCacheSourceMap(filename, content, cjsModuleInstance, isGeneratedSource) { const sourceMapsEnabled = getSourceMapsEnabled(); if (!(process.env.NODE_V8_COVERAGE || sourceMapsEnabled)) return; try { filename = normalizeReferrerURL(filename); } catch (err) { - // This is most likely an [eval]-wrapper, which is currently not - // supported. + // This is most likely an invalid filename in sourceURL of [eval]-wrapper. debug(err); return; } - const match = StringPrototypeMatch( + const match = RegExpPrototypeExec( + /\/[*/]#\s+sourceMappingURL=(?[^\s]+)/, content, - /\/[*/]#\s+sourceMappingURL=(?[^\s]+)/ ); if (match) { const data = dataFromUrl(filename, match.groups.sourceMappingURL); @@ -96,8 +101,14 @@ function maybeCacheSourceMap(filename, content, cjsModuleInstance) { data, url }); + } else if (isGeneratedSource) { + generatedSourceMapCache.set(filename, { + lineLengths: lineLengths(content), + data, + url + }); } else { - // If there is no cjsModuleInstance assume we are in a + // If there is no cjsModuleInstance and is not generated source assume we are in a // "modules/esm" context. esmSourceMapCache.set(filename, { lineLengths: lineLengths(content), @@ -108,6 +119,31 @@ function maybeCacheSourceMap(filename, content, cjsModuleInstance) { } } +function maybeCacheGeneratedSourceMap(content) { + const sourceMapsEnabled = getSourceMapsEnabled(); + if (!(process.env.NODE_V8_COVERAGE || sourceMapsEnabled)) return; + + const matchSourceURL = RegExpPrototypeExec( + /\/[*/]#\s+sourceURL=(?[^\s]+)/, + content + ); + if (matchSourceURL == null) { + return; + } + let sourceURL = matchSourceURL.groups.sourceURL; + if (RegExpPrototypeExec(kLeadingProtocol, sourceURL) === null) { + sourceURL = pathToFileURL(sourceURL).href; + } + try { + maybeCacheSourceMap(sourceURL, content, null, true); + } catch (err) { + // This can happen if the filename is not a valid URL. + // If we fail to cache the source map, we should not fail the whole process. + debug(err); + } +} +setMaybeCacheGeneratedSourceMap(maybeCacheGeneratedSourceMap); + function dataFromUrl(sourceURL, sourceMappingURL) { try { const url = new URL(sourceMappingURL); @@ -133,7 +169,7 @@ function lineLengths(content) { // We purposefully keep \r as part of the line-length calculation, in // cases where there is a \r\n separator, so that this can be taken into // account in coverage calculations. - return ArrayPrototypeMap(StringPrototypeSplit(content, /\n|\u2028|\u2029/), (line) => { + return ArrayPrototypeMap(RegExpPrototypeSymbolSplit(/\n|\u2028|\u2029/, content), (line) => { return line.length; }); } @@ -218,21 +254,26 @@ function appendCJSCache(obj) { } } -function findSourceMap(sourceURL) { - if (!RegExpPrototypeTest(/^\w+:\/\//, sourceURL)) { +function findSourceMap(sourceURL, isGenerated) { + if (RegExpPrototypeExec(kLeadingProtocol, sourceURL) === null) { sourceURL = pathToFileURL(sourceURL).href; } if (!SourceMap) { SourceMap = require('internal/source_map/source_map').SourceMap; } - let sourceMap = esmSourceMapCache.get(sourceURL); - if (sourceMap === undefined) { - for (const value of cjsSourceMapCache) { - const filename = ObjectGetValueSafe(value, 'filename'); - if (sourceURL === filename) { - sourceMap = { - data: ObjectGetValueSafe(value, 'data') - }; + let sourceMap; + if (isGenerated) { + sourceMap = generatedSourceMapCache.get(sourceURL); + } else { + sourceMap = esmSourceMapCache.get(sourceURL); + if (sourceMap === undefined) { + for (const value of cjsSourceMapCache) { + const filename = ObjectGetValueSafe(value, 'filename'); + if (sourceURL === filename) { + sourceMap = { + data: ObjectGetValueSafe(value, 'data') + }; + } } } } diff --git a/lib/internal/streams/add-abort-signal.js b/lib/internal/streams/add-abort-signal.js index ba0da5e8bc4..37034e7b5d1 100644 --- a/lib/internal/streams/add-abort-signal.js +++ b/lib/internal/streams/add-abort-signal.js @@ -34,7 +34,7 @@ module.exports.addAbortSignalNoValidate = function(signal, stream) { return stream; } const onAbort = () => { - stream.destroy(new AbortError()); + stream.destroy(new AbortError(undefined, { cause: signal.reason })); }; if (signal.aborted) { onAbort(); diff --git a/lib/internal/streams/destroy.js b/lib/internal/streams/destroy.js index 2f543f2d36b..20863a324f5 100644 --- a/lib/internal/streams/destroy.js +++ b/lib/internal/streams/destroy.js @@ -35,7 +35,7 @@ function destroy(err, cb) { // With duplex streams we use the writable side for state. const s = w || r; - if ((w && w.destroyed) || (r && r.destroyed)) { + if (w?.destroyed || r?.destroyed) { if (typeof cb === 'function') { cb(); } @@ -134,7 +134,7 @@ function emitCloseNT(self) { r.closeEmitted = true; } - if ((w && w.emitClose) || (r && r.emitClose)) { + if (w?.emitClose || r?.emitClose) { self.emit('close'); } } @@ -143,7 +143,7 @@ function emitErrorNT(self, err) { const r = self._readableState; const w = self._writableState; - if ((w && w.errorEmitted) || (r && r.errorEmitted)) { + if (w?.errorEmitted || r?.errorEmitted) { return; } @@ -198,11 +198,11 @@ function errorOrDestroy(stream, err, sync) { const r = stream._readableState; const w = stream._writableState; - if ((w && w.destroyed) || (r && r.destroyed)) { + if (w?.destroyed || r?.destroyed) { return this; } - if ((r && r.autoDestroy) || (w && w.autoDestroy)) + if (r?.autoDestroy || w?.autoDestroy) stream.destroy(err); else if (err) { // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364 @@ -306,7 +306,7 @@ function emitConstructNT(stream) { } function isRequest(stream) { - return stream && stream.setHeader && typeof stream.abort === 'function'; + return stream?.setHeader && typeof stream.abort === 'function'; } // Normalize destroy for legacy. diff --git a/lib/internal/streams/duplex.js b/lib/internal/streams/duplex.js index c7b3056de4a..170690f99c7 100644 --- a/lib/internal/streams/duplex.js +++ b/lib/internal/streams/duplex.js @@ -42,8 +42,10 @@ ObjectSetPrototypeOf(Duplex.prototype, Readable.prototype); ObjectSetPrototypeOf(Duplex, Readable); { + const keys = ObjectKeys(Writable.prototype); // Allow the keys array to be GC'ed. - for (const method of ObjectKeys(Writable.prototype)) { + for (let i = 0; i < keys.length; i++) { + const method = keys[i]; if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; } @@ -72,25 +74,26 @@ function Duplex(options) { ObjectDefineProperties(Duplex.prototype, { writable: - ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable'), + { __proto__: null, ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable') }, writableHighWaterMark: - ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark'), + { __proto__: null, ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark') }, writableObjectMode: - ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode'), + { __proto__: null, ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode') }, writableBuffer: - ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer'), + { __proto__: null, ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer') }, writableLength: - ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength'), + { __proto__: null, ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength') }, writableFinished: - ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished'), + { __proto__: null, ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished') }, writableCorked: - ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked'), + { __proto__: null, ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked') }, writableEnded: - ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded'), + { __proto__: null, ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded') }, writableNeedDrain: - ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain'), + { __proto__: null, ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain') }, destroyed: { + __proto__: null, get() { if (this._readableState === undefined || this._writableState === undefined) { diff --git a/lib/internal/streams/duplexify.js b/lib/internal/streams/duplexify.js index 7fd5df9f279..ec9358fc908 100644 --- a/lib/internal/streams/duplexify.js +++ b/lib/internal/streams/duplexify.js @@ -214,7 +214,8 @@ function fromAsyncGen(fn) { const { chunk, done, cb } = await _promise; process.nextTick(cb); if (done) return; - if (signal.aborted) throw new AbortError(); + if (signal.aborted) + throw new AbortError(undefined, { cause: signal.reason }); ({ promise, resolve } = createDeferredPromise()); yield chunk; } diff --git a/lib/internal/streams/end-of-stream.js b/lib/internal/streams/end-of-stream.js index 9edd6cc9def..e8659939d6e 100644 --- a/lib/internal/streams/end-of-stream.js +++ b/lib/internal/streams/end-of-stream.js @@ -10,7 +10,10 @@ const { const { ERR_STREAM_PREMATURE_CLOSE } = codes; -const { once } = require('internal/util'); +const { + kEmptyObject, + once, +} = require('internal/util'); const { validateAbortSignal, validateFunction, @@ -64,9 +67,9 @@ function isReadableEnded(stream) { function eos(stream, options, callback) { if (arguments.length === 2) { callback = options; - options = {}; + options = kEmptyObject; } else if (options == null) { - options = {}; + options = kEmptyObject; } else { validateObject(options, 'options'); } @@ -217,7 +220,9 @@ function eos(stream, options, callback) { // Keep it because cleanup removes it. const endCallback = callback; cleanup(); - endCallback.call(stream, new AbortError()); + endCallback.call( + stream, + new AbortError(undefined, { cause: options.signal.reason })); }; if (options.signal.aborted) { process.nextTick(abort); diff --git a/lib/internal/streams/lazy_transform.js b/lib/internal/streams/lazy_transform.js index 555e6430e33..fc3e9815a37 100644 --- a/lib/internal/streams/lazy_transform.js +++ b/lib/internal/streams/lazy_transform.js @@ -39,6 +39,7 @@ function makeGetter(name) { function makeSetter(name) { return function(val) { ObjectDefineProperty(this, name, { + __proto__: null, value: val, enumerable: true, configurable: true, @@ -49,12 +50,14 @@ function makeSetter(name) { ObjectDefineProperties(LazyTransform.prototype, { _readableState: { + __proto__: null, get: makeGetter('_readableState'), set: makeSetter('_readableState'), configurable: true, enumerable: true }, _writableState: { + __proto__: null, get: makeGetter('_writableState'), set: makeSetter('_writableState'), configurable: true, diff --git a/lib/internal/streams/operators.js b/lib/internal/streams/operators.js index 42807edf1c7..d45efbad7c2 100644 --- a/lib/internal/streams/operators.js +++ b/lib/internal/streams/operators.js @@ -1,7 +1,6 @@ 'use strict'; const { AbortController } = require('internal/abort_controller'); -const { Buffer } = require('buffer'); const { codes: { @@ -11,7 +10,11 @@ const { }, AbortError, } = require('internal/errors'); -const { validateInteger } = require('internal/validators'); +const { + validateAbortSignal, + validateInteger, + validateObject, +} = require('internal/validators'); const { kWeakHandler } = require('internal/event_target'); const { finished } = require('internal/streams/end-of-stream'); @@ -22,7 +25,7 @@ const { NumberIsNaN, Promise, PromiseReject, - PromisePrototypeCatch, + PromisePrototypeThen, Symbol, } = primordials; @@ -34,9 +37,11 @@ function map(fn, options) { throw new ERR_INVALID_ARG_TYPE( 'fn', ['Function', 'AsyncFunction'], fn); } - - if (options != null && typeof options !== 'object') { - throw new ERR_INVALID_ARG_TYPE('options', ['Object']); + if (options != null) { + validateObject(options, 'options'); + } + if (options?.signal != null) { + validateAbortSignal(options.signal, 'options.signal'); } let concurrency = 1; @@ -108,7 +113,7 @@ function map(fn, options) { queue.push(kEof); } catch (err) { const val = PromiseReject(err); - PromisePrototypeCatch(val, onDone); + PromisePrototypeThen(val, undefined, onDone); queue.push(val); } finally { done = true; @@ -162,40 +167,33 @@ function map(fn, options) { }.call(this); } -async function* asIndexedPairs(options) { - let index = 0; - for await (const val of this) { - if (options?.signal?.aborted) { - throw new AbortError({ cause: options.signal.reason }); - } - yield [index++, val]; +function asIndexedPairs(options = undefined) { + if (options != null) { + validateObject(options, 'options'); } -} - -async function some(fn, options) { - // https://tc39.es/proposal-iterator-helpers/#sec-iteratorprototype.some - // Note that some does short circuit but also closes the iterator if it does - const ac = new AbortController(); - if (options?.signal) { - if (options.signal.aborted) { - ac.abort(); - } - options.signal.addEventListener('abort', () => ac.abort(), { - [kWeakHandler]: this, - once: true, - }); + if (options?.signal != null) { + validateAbortSignal(options.signal, 'options.signal'); } - const mapped = this.map(fn, { ...options, signal: ac.signal }); - for await (const result of mapped) { - if (result) { - ac.abort(); - return true; + + return async function* asIndexedPairs() { + let index = 0; + for await (const val of this) { + if (options?.signal?.aborted) { + throw new AbortError({ cause: options.signal.reason }); + } + yield [index++, val]; } + }.call(this); +} + +async function some(fn, options = undefined) { + for await (const unused of filter.call(this, fn, options)) { + return true; } return false; } -async function every(fn, options) { +async function every(fn, options = undefined) { if (typeof fn !== 'function') { throw new ERR_INVALID_ARG_TYPE( 'fn', ['Function', 'AsyncFunction'], fn); @@ -206,6 +204,13 @@ async function every(fn, options) { }, options)); } +async function find(fn, options) { + for await (const result of filter.call(this, fn, options)) { + return result; + } + return undefined; +} + async function forEach(fn, options) { if (typeof fn !== 'function') { throw new ERR_INVALID_ARG_TYPE( @@ -216,7 +221,7 @@ async function forEach(fn, options) { return kEmpty; } // eslint-disable-next-line no-unused-vars - for await (const unused of this.map(forEachFn, options)); + for await (const unused of map.call(this, forEachFn, options)); } function filter(fn, options) { @@ -230,7 +235,7 @@ function filter(fn, options) { } return kEmpty; } - return this.map(filterFn, options); + return map.call(this, filterFn, options); } // Specific to provide better error to reduce since the argument is only @@ -247,6 +252,13 @@ async function reduce(reducer, initialValue, options) { throw new ERR_INVALID_ARG_TYPE( 'reducer', ['Function', 'AsyncFunction'], reducer); } + if (options != null) { + validateObject(options, 'options'); + } + if (options?.signal != null) { + validateAbortSignal(options.signal, 'options.signal'); + } + let hasInitialValue = arguments.length > 1; if (options?.signal?.aborted) { const err = new AbortError(undefined, { cause: options.signal.reason }); @@ -284,6 +296,13 @@ async function reduce(reducer, initialValue, options) { } async function toArray(options) { + if (options != null) { + validateObject(options, 'options'); + } + if (options?.signal != null) { + validateAbortSignal(options.signal, 'options.signal'); + } + const result = []; for await (const val of this) { if (options?.signal?.aborted) { @@ -291,14 +310,11 @@ async function toArray(options) { } ArrayPrototypePush(result, val); } - if (!this.readableObjectMode) { - return Buffer.concat(result); - } return result; } function flatMap(fn, options) { - const values = this.map(fn, options); + const values = map.call(this, fn, options); return async function* flatMap() { for await (const val of values) { yield* val; @@ -319,7 +335,14 @@ function toIntegerOrInfinity(number) { return number; } -function drop(number, options) { +function drop(number, options = undefined) { + if (options != null) { + validateObject(options, 'options'); + } + if (options?.signal != null) { + validateAbortSignal(options.signal, 'options.signal'); + } + number = toIntegerOrInfinity(number); return async function* drop() { if (options?.signal?.aborted) { @@ -336,8 +359,14 @@ function drop(number, options) { }.call(this); } +function take(number, options = undefined) { + if (options != null) { + validateObject(options, 'options'); + } + if (options?.signal != null) { + validateAbortSignal(options.signal, 'options.signal'); + } -function take(number, options) { number = toIntegerOrInfinity(number); return async function* take() { if (options?.signal?.aborted) { @@ -371,4 +400,5 @@ module.exports.promiseReturningOperators = { reduce, toArray, some, + find, }; diff --git a/lib/internal/streams/readable.js b/lib/internal/streams/readable.js index 146f712c4a2..c617f6584d3 100644 --- a/lib/internal/streams/readable.js +++ b/lib/internal/streams/readable.js @@ -764,7 +764,7 @@ Readable.prototype.pipe = function(dest, pipeOpts) { debug('onerror', er); unpipe(); dest.removeListener('error', onerror); - if (EE.listenerCount(dest, 'error') === 0) { + if (dest.listenerCount('error') === 0) { const s = dest._writableState || dest._readableState; if (s && !s.errorEmitted) { // User incorrectly emitted 'error' directly on the stream. @@ -829,7 +829,7 @@ function pipeOnDrain(src, dest) { } if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && - EE.listenerCount(src, 'data')) { + src.listenerCount('data')) { src.resume(); } }; @@ -1162,6 +1162,7 @@ async function* createAsyncIterator(stream, options) { // userland will fail. ObjectDefineProperties(Readable.prototype, { readable: { + __proto__: null, get() { const r = this._readableState; // r.readable === false means that this is part of a Duplex stream @@ -1180,6 +1181,7 @@ ObjectDefineProperties(Readable.prototype, { }, readableDidRead: { + __proto__: null, enumerable: false, get: function() { return this._readableState.dataEmitted; @@ -1187,6 +1189,7 @@ ObjectDefineProperties(Readable.prototype, { }, readableAborted: { + __proto__: null, enumerable: false, get: function() { return !!( @@ -1198,6 +1201,7 @@ ObjectDefineProperties(Readable.prototype, { }, readableHighWaterMark: { + __proto__: null, enumerable: false, get: function() { return this._readableState.highWaterMark; @@ -1205,6 +1209,7 @@ ObjectDefineProperties(Readable.prototype, { }, readableBuffer: { + __proto__: null, enumerable: false, get: function() { return this._readableState && this._readableState.buffer; @@ -1212,6 +1217,7 @@ ObjectDefineProperties(Readable.prototype, { }, readableFlowing: { + __proto__: null, enumerable: false, get: function() { return this._readableState.flowing; @@ -1224,6 +1230,7 @@ ObjectDefineProperties(Readable.prototype, { }, readableLength: { + __proto__: null, enumerable: false, get() { return this._readableState.length; @@ -1231,6 +1238,7 @@ ObjectDefineProperties(Readable.prototype, { }, readableObjectMode: { + __proto__: null, enumerable: false, get() { return this._readableState ? this._readableState.objectMode : false; @@ -1238,6 +1246,7 @@ ObjectDefineProperties(Readable.prototype, { }, readableEncoding: { + __proto__: null, enumerable: false, get() { return this._readableState ? this._readableState.encoding : null; @@ -1245,6 +1254,7 @@ ObjectDefineProperties(Readable.prototype, { }, destroyed: { + __proto__: null, enumerable: false, get() { if (this._readableState === undefined) { @@ -1266,6 +1276,7 @@ ObjectDefineProperties(Readable.prototype, { }, readableEnded: { + __proto__: null, enumerable: false, get() { return this._readableState ? this._readableState.endEmitted : false; @@ -1277,6 +1288,7 @@ ObjectDefineProperties(Readable.prototype, { ObjectDefineProperties(ReadableState.prototype, { // Legacy getter for `pipesCount`. pipesCount: { + __proto__: null, get() { return this.pipes.length; } @@ -1284,6 +1296,7 @@ ObjectDefineProperties(ReadableState.prototype, { // Legacy property for `paused`. paused: { + __proto__: null, get() { return this[kPaused] !== false; }, diff --git a/lib/internal/streams/transform.js b/lib/internal/streams/transform.js index cbd23185fad..4a06dcc6256 100644 --- a/lib/internal/streams/transform.js +++ b/lib/internal/streams/transform.js @@ -65,7 +65,7 @@ const { ObjectSetPrototypeOf, - Symbol + Symbol, } = primordials; module.exports = Transform; @@ -73,6 +73,7 @@ const { ERR_METHOD_NOT_IMPLEMENTED } = require('internal/errors').codes; const Duplex = require('internal/streams/duplex'); +const { getHighWaterMark } = require('internal/streams/state'); ObjectSetPrototypeOf(Transform.prototype, Duplex.prototype); ObjectSetPrototypeOf(Transform, Duplex); @@ -82,6 +83,26 @@ function Transform(options) { if (!(this instanceof Transform)) return new Transform(options); + // TODO (ronag): This should preferably always be + // applied but would be semver-major. Or even better; + // make Transform a Readable with the Writable interface. + const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null; + if (readableHighWaterMark === 0) { + // A Duplex will buffer both on the writable and readable side while + // a Transform just wants to buffer hwm number of elements. To avoid + // buffering twice we disable buffering on the writable side. + options = { + ...options, + highWaterMark: null, + readableHighWaterMark, + // TODO (ronag): 0 is not optimal since we have + // a "bug" where we check needDrain before calling _write and not after. + // Refs: https://github.com/nodejs/node/pull/32887 + // Refs: https://github.com/nodejs/node/pull/35941 + writableHighWaterMark: options.writableHighWaterMark || 0 + }; + } + Duplex.call(this, options); // We have implemented the _read method, and done the other things @@ -195,9 +216,7 @@ Transform.prototype._write = function(chunk, encoding, callback) { if ( wState.ended || // Backwards compat. length === rState.length || // Backwards compat. - rState.length < rState.highWaterMark || - rState.highWaterMark === 0 || - rState.length === 0 + rState.length < rState.highWaterMark ) { callback(); } else { diff --git a/lib/internal/streams/writable.js b/lib/internal/streams/writable.js index 5211a1ce893..f5378ce7d05 100644 --- a/lib/internal/streams/writable.js +++ b/lib/internal/streams/writable.js @@ -211,6 +211,7 @@ WritableState.prototype.getBuffer = function getBuffer() { }; ObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', { + __proto__: null, get() { return this.buffered.length - this.bufferedIndex; } @@ -267,6 +268,7 @@ function Writable(options) { } ObjectDefineProperty(Writable, SymbolHasInstance, { + __proto__: null, value: function(object) { if (FunctionPrototypeSymbolHasInstance(this, object)) return true; if (this !== Writable) return false; @@ -772,6 +774,7 @@ function finish(stream, state) { ObjectDefineProperties(Writable.prototype, { destroyed: { + __proto__: null, get() { return this._writableState ? this._writableState.destroyed : false; }, @@ -784,6 +787,7 @@ ObjectDefineProperties(Writable.prototype, { }, writable: { + __proto__: null, get() { const w = this._writableState; // w.writable === false means that this is part of a Duplex stream @@ -802,30 +806,35 @@ ObjectDefineProperties(Writable.prototype, { }, writableFinished: { + __proto__: null, get() { return this._writableState ? this._writableState.finished : false; } }, writableObjectMode: { + __proto__: null, get() { return this._writableState ? this._writableState.objectMode : false; } }, writableBuffer: { + __proto__: null, get() { return this._writableState && this._writableState.getBuffer(); } }, writableEnded: { + __proto__: null, get() { return this._writableState ? this._writableState.ending : false; } }, writableNeedDrain: { + __proto__: null, get() { const wState = this._writableState; if (!wState) return false; @@ -834,22 +843,37 @@ ObjectDefineProperties(Writable.prototype, { }, writableHighWaterMark: { + __proto__: null, get() { return this._writableState && this._writableState.highWaterMark; } }, writableCorked: { + __proto__: null, get() { return this._writableState ? this._writableState.corked : 0; } }, writableLength: { + __proto__: null, get() { return this._writableState && this._writableState.length; } - } + }, + + writableAborted: { + __proto__: null, + enumerable: false, + get: function() { + return !!( + this._writableState.writable !== false && + (this._writableState.destroyed || this._writableState.errored) && + !this._writableState.finished + ); + } + }, }); const destroy = destroyImpl.destroy; diff --git a/lib/internal/test_runner/harness.js b/lib/internal/test_runner/harness.js new file mode 100644 index 00000000000..62d26a1a1bd --- /dev/null +++ b/lib/internal/test_runner/harness.js @@ -0,0 +1,169 @@ +'use strict'; +const { + ArrayPrototypeForEach, + SafeMap, + SafeWeakSet, +} = primordials; +const { + createHook, + executionAsyncId, +} = require('async_hooks'); +const { + codes: { + ERR_TEST_FAILURE, + }, +} = require('internal/errors'); +const { kEmptyObject } = require('internal/util'); +const { getOptionValue } = require('internal/options'); +const { kCancelledByParent, Test, ItTest, Suite } = require('internal/test_runner/test'); +const { bigint: hrtime } = process.hrtime; + +const isTestRunnerCli = getOptionValue('--test'); +const testResources = new SafeMap(); +const wasRootSetup = new SafeWeakSet(); + +function createTestTree(options = kEmptyObject) { + return setup(new Test({ __proto__: null, ...options, name: '' })); +} + +function createProcessEventHandler(eventName, rootTest) { + return (err) => { + // Check if this error is coming from a test. If it is, fail the test. + const test = testResources.get(executionAsyncId()); + + if (!test) { + throw err; + } + + if (test.finished) { + // If the test is already finished, report this as a top level + // diagnostic since this is a malformed test. + const msg = `Warning: Test "${test.name}" generated asynchronous ` + + 'activity after the test ended. This activity created the error ' + + `"${err}" and would have caused the test to fail, but instead ` + + `triggered an ${eventName} event.`; + + rootTest.diagnostic(msg); + return; + } + + test.fail(new ERR_TEST_FAILURE(err, eventName)); + test.postRun(); + }; +} + +function setup(root) { + if (wasRootSetup.has(root)) { + return root; + } + const hook = createHook({ + init(asyncId, type, triggerAsyncId, resource) { + if (resource instanceof Test) { + testResources.set(asyncId, resource); + return; + } + + const parent = testResources.get(triggerAsyncId); + + if (parent !== undefined) { + testResources.set(asyncId, parent); + } + }, + destroy(asyncId) { + testResources.delete(asyncId); + } + }); + + hook.enable(); + + const exceptionHandler = + createProcessEventHandler('uncaughtException', root); + const rejectionHandler = + createProcessEventHandler('unhandledRejection', root); + + const exitHandler = () => { + root.postRun(new ERR_TEST_FAILURE( + 'Promise resolution is still pending but the event loop has already resolved', + kCancelledByParent)); + + hook.disable(); + process.removeListener('unhandledRejection', rejectionHandler); + process.removeListener('uncaughtException', exceptionHandler); + }; + + const terminationHandler = () => { + exitHandler(); + process.exit(); + }; + + process.on('uncaughtException', exceptionHandler); + process.on('unhandledRejection', rejectionHandler); + process.on('beforeExit', exitHandler); + // TODO(MoLow): Make it configurable to hook when isTestRunnerCli === false. + if (isTestRunnerCli) { + process.on('SIGINT', terminationHandler); + process.on('SIGTERM', terminationHandler); + } + + root.startTime = hrtime(); + root.reporter.version(); + + wasRootSetup.add(root); + return root; +} + +let globalRoot; +function getGlobalRoot() { + if (!globalRoot) { + globalRoot = createTestTree(); + globalRoot.reporter.pipe(process.stdout); + globalRoot.reporter.once('test:fail', () => { + process.exitCode = 1; + }); + } + return globalRoot; +} + +function test(name, options, fn) { + const subtest = getGlobalRoot().createSubtest(Test, name, options, fn); + return subtest.start(); +} + +function runInParentContext(Factory) { + function run(name, options, fn, overrides) { + const parent = testResources.get(executionAsyncId()) || getGlobalRoot(); + const subtest = parent.createSubtest(Factory, name, options, fn, overrides); + if (parent === getGlobalRoot()) { + subtest.start(); + } + } + + const cb = (name, options, fn) => { + run(name, options, fn); + }; + + ArrayPrototypeForEach(['skip', 'todo'], (keyword) => { + cb[keyword] = (name, options, fn) => { + run(name, options, fn, { [keyword]: true }); + }; + }); + return cb; +} + +function hook(hook) { + return (fn, options) => { + const parent = testResources.get(executionAsyncId()) || getGlobalRoot(); + parent.createHook(hook, fn, options); + }; +} + +module.exports = { + createTestTree, + test, + describe: runInParentContext(Suite), + it: runInParentContext(ItTest), + before: hook('before'), + after: hook('after'), + beforeEach: hook('beforeEach'), + afterEach: hook('afterEach'), +}; diff --git a/lib/internal/test_runner/runner.js b/lib/internal/test_runner/runner.js new file mode 100644 index 00000000000..9994ac12ecf --- /dev/null +++ b/lib/internal/test_runner/runner.js @@ -0,0 +1,187 @@ +'use strict'; +const { + ArrayFrom, + ArrayPrototypeFilter, + ArrayPrototypeIncludes, + ArrayPrototypeJoin, + ArrayPrototypePush, + ArrayPrototypeSlice, + ArrayPrototypeSort, + ObjectAssign, + PromisePrototypeThen, + SafePromiseAll, + SafeSet, +} = primordials; + +const { spawn } = require('child_process'); +const { readdirSync, statSync } = require('fs'); +// TODO(aduh95): switch to internal/readline/interface when backporting to Node.js 16.x is no longer a concern. +const { createInterface } = require('readline'); +const console = require('internal/console/global'); +const { + codes: { + ERR_TEST_FAILURE, + }, +} = require('internal/errors'); +const { validateArray } = require('internal/validators'); +const { getInspectPort, isUsingInspector, isInspectorMessage } = require('internal/util/inspector'); +const { kEmptyObject } = require('internal/util'); +const { createTestTree } = require('internal/test_runner/harness'); +const { kSubtestsFailed, Test } = require('internal/test_runner/test'); +const { + isSupportedFileType, + doesPathMatchFilter, +} = require('internal/test_runner/utils'); +const { basename, join, resolve } = require('path'); +const { once } = require('events'); + +const kFilterArgs = ['--test']; + +// TODO(cjihrig): Replace this with recursive readdir once it lands. +function processPath(path, testFiles, options) { + const stats = statSync(path); + + if (stats.isFile()) { + if (options.userSupplied || + (options.underTestDir && isSupportedFileType(path)) || + doesPathMatchFilter(path)) { + testFiles.add(path); + } + } else if (stats.isDirectory()) { + const name = basename(path); + + if (!options.userSupplied && name === 'node_modules') { + return; + } + + // 'test' directories get special treatment. Recursively add all .js, + // .cjs, and .mjs files in the 'test' directory. + const isTestDir = name === 'test'; + const { underTestDir } = options; + const entries = readdirSync(path); + + if (isTestDir) { + options.underTestDir = true; + } + + options.userSupplied = false; + + for (let i = 0; i < entries.length; i++) { + processPath(join(path, entries[i]), testFiles, options); + } + + options.underTestDir = underTestDir; + } +} + +function createTestFileList() { + const cwd = process.cwd(); + const hasUserSuppliedPaths = process.argv.length > 1; + const testPaths = hasUserSuppliedPaths ? + ArrayPrototypeSlice(process.argv, 1) : [cwd]; + const testFiles = new SafeSet(); + + try { + for (let i = 0; i < testPaths.length; i++) { + const absolutePath = resolve(testPaths[i]); + + processPath(absolutePath, testFiles, { userSupplied: true }); + } + } catch (err) { + if (err?.code === 'ENOENT') { + console.error(`Could not find '${err.path}'`); + process.exit(1); + } + + throw err; + } + + return ArrayPrototypeSort(ArrayFrom(testFiles)); +} + +function filterExecArgv(arg) { + return !ArrayPrototypeIncludes(kFilterArgs, arg); +} + +function getRunArgs({ path, inspectPort }) { + const argv = ArrayPrototypeFilter(process.execArgv, filterExecArgv); + if (isUsingInspector()) { + ArrayPrototypePush(argv, `--inspect-port=${getInspectPort(inspectPort)}`); + } + ArrayPrototypePush(argv, path); + return argv; +} + + +function runTestFile(path, root, inspectPort) { + const subtest = root.createSubtest(Test, path, async (t) => { + const args = getRunArgs({ path, inspectPort }); + + const child = spawn(process.execPath, args, { signal: t.signal, encoding: 'utf8' }); + // TODO(cjihrig): Implement a TAP parser to read the child's stdout + // instead of just displaying it all if the child fails. + let err; + let stderr = ''; + + child.on('error', (error) => { + err = error; + }); + + child.stderr.on('data', (data) => { + stderr += data; + }); + + if (isUsingInspector()) { + const rl = createInterface({ input: child.stderr }); + rl.on('line', (line) => { + if (isInspectorMessage(line)) { + process.stderr.write(line + '\n'); + } + }); + } + + const { 0: { 0: code, 1: signal }, 1: stdout } = await SafePromiseAll([ + once(child, 'exit', { signal: t.signal }), + child.stdout.toArray({ signal: t.signal }), + ]); + + if (code !== 0 || signal !== null) { + if (!err) { + err = ObjectAssign(new ERR_TEST_FAILURE('test failed', kSubtestsFailed), { + __proto__: null, + exitCode: code, + signal: signal, + stdout: ArrayPrototypeJoin(stdout, ''), + stderr, + // The stack will not be useful since the failures came from tests + // in a child process. + stack: undefined, + }); + } + + throw err; + } + }); + return subtest.start(); +} + +function run(options) { + if (options === null || typeof options !== 'object') { + options = kEmptyObject; + } + const { concurrency, timeout, signal, files, inspectPort } = options; + + if (files != null) { + validateArray(files, 'options.files'); + } + + const root = createTestTree({ concurrency, timeout, signal }); + const testFiles = files ?? createTestFileList(); + + PromisePrototypeThen(SafePromiseAll(testFiles, (path) => runTestFile(path, root, inspectPort)), + () => root.postRun()); + + return root.reporter; +} + +module.exports = { run }; diff --git a/lib/internal/test_runner/tap_stream.js b/lib/internal/test_runner/tap_stream.js new file mode 100644 index 00000000000..ebd825a3dc9 --- /dev/null +++ b/lib/internal/test_runner/tap_stream.js @@ -0,0 +1,232 @@ +'use strict'; +const { + ArrayPrototypeForEach, + ArrayPrototypeJoin, + ArrayPrototypeMap, + ArrayPrototypePush, + ArrayPrototypeShift, + ObjectEntries, + StringPrototypeReplaceAll, + StringPrototypeSplit, + RegExpPrototypeSymbolReplace, +} = primordials; +const { inspectWithNoCustomRetry } = require('internal/errors'); +const Readable = require('internal/streams/readable'); +const { isError, kEmptyObject } = require('internal/util'); +const kFrameStartRegExp = /^ {4}at /; +const kLineBreakRegExp = /\n|\r\n/; +const inspectOptions = { colors: false, breakLength: Infinity }; +let testModule; // Lazy loaded due to circular dependency. + +function lazyLoadTest() { + testModule ??= require('internal/test_runner/test'); + + return testModule; +} + +class TapStream extends Readable { + #buffer; + #canPush; + + constructor() { + super(); + this.#buffer = []; + this.#canPush = true; + } + + _read() { + this.#canPush = true; + + while (this.#buffer.length > 0) { + const line = ArrayPrototypeShift(this.#buffer); + + if (!this.#tryPush(line)) { + return; + } + } + } + + bail(message) { + this.#tryPush(`Bail out!${message ? ` ${tapEscape(message)}` : ''}\n`); + } + + fail(indent, testNumber, name, duration, error, directive) { + this.emit('test:fail', { __proto__: null, name, testNumber, duration, ...directive, error }); + this.#test(indent, testNumber, 'not ok', name, directive); + this.#details(indent, duration, error); + } + + ok(indent, testNumber, name, duration, directive) { + this.emit('test:pass', { __proto__: null, name, testNumber, duration, ...directive }); + this.#test(indent, testNumber, 'ok', name, directive); + this.#details(indent, duration, null); + } + + plan(indent, count, explanation) { + const exp = `${explanation ? ` # ${tapEscape(explanation)}` : ''}`; + + this.#tryPush(`${indent}1..${count}${exp}\n`); + } + + getSkip(reason) { + return { __proto__: null, skip: reason }; + } + + getTodo(reason) { + return { __proto__: null, todo: reason }; + } + + subtest(indent, name) { + this.#tryPush(`${indent}# Subtest: ${tapEscape(name)}\n`); + } + + #details(indent, duration, error) { + let details = `${indent} ---\n`; + + details += jsToYaml(indent, 'duration_ms', duration); + details += jsToYaml(indent, null, error); + details += `${indent} ...\n`; + this.#tryPush(details); + } + + diagnostic(indent, message) { + this.emit('test:diagnostic', message); + this.#tryPush(`${indent}# ${tapEscape(message)}\n`); + } + + version() { + this.#tryPush('TAP version 13\n'); + } + + #test(indent, testNumber, status, name, directive = kEmptyObject) { + let line = `${indent}${status} ${testNumber}`; + + if (name) { + line += ` ${tapEscape(`- ${name}`)}`; + } + + line += ArrayPrototypeJoin(ArrayPrototypeMap(ObjectEntries(directive), ({ 0: key, 1: value }) => ( + ` # ${key.toUpperCase()}${value ? ` ${tapEscape(value)}` : ''}` + )), ''); + + line += '\n'; + this.#tryPush(line); + } + + #tryPush(message) { + if (this.#canPush) { + this.#canPush = this.push(message); + } else { + ArrayPrototypePush(this.#buffer, message); + } + + return this.#canPush; + } +} + +// In certain places, # and \ need to be escaped as \# and \\. +function tapEscape(input) { + return StringPrototypeReplaceAll( + StringPrototypeReplaceAll(input, '\\', '\\\\'), '#', '\\#' + ); +} + +function jsToYaml(indent, name, value) { + if (value === null || value === undefined) { + return ''; + } + + if (typeof value !== 'object') { + const prefix = `${indent} ${name}: `; + + if (typeof value !== 'string') { + return `${prefix}${inspectWithNoCustomRetry(value, inspectOptions)}\n`; + } + + const lines = StringPrototypeSplit(value, kLineBreakRegExp); + + if (lines.length === 1) { + return `${prefix}${inspectWithNoCustomRetry(value, inspectOptions)}\n`; + } + + let str = `${prefix}|-\n`; + + for (let i = 0; i < lines.length; i++) { + str += `${indent} ${lines[i]}\n`; + } + + return str; + } + + const entries = ObjectEntries(value); + const isErrorObj = isError(value); + let result = ''; + + for (let i = 0; i < entries.length; i++) { + const { 0: key, 1: value } = entries[i]; + + if (isErrorObj && (key === 'cause' || key === 'code')) { + continue; + } + + result += jsToYaml(indent, key, value); + } + + if (isErrorObj) { + const { kTestCodeFailure, kUnwrapErrors } = lazyLoadTest(); + const { + cause, + code, + failureType, + message, + stack, + } = value; + let errMsg = message ?? ''; + let errStack = stack; + let errCode = code; + + // If the ERR_TEST_FAILURE came from an error provided by user code, + // then try to unwrap the original error message and stack. + if (code === 'ERR_TEST_FAILURE' && kUnwrapErrors.has(failureType)) { + errStack = cause?.stack ?? errStack; + errCode = cause?.code ?? errCode; + if (failureType === kTestCodeFailure) { + errMsg = cause?.message ?? errMsg; + } + } + + result += jsToYaml(indent, 'error', errMsg); + + if (errCode) { + result += jsToYaml(indent, 'code', errCode); + } + + if (typeof errStack === 'string') { + const frames = []; + + ArrayPrototypeForEach( + StringPrototypeSplit(errStack, kLineBreakRegExp), + (frame) => { + const processed = RegExpPrototypeSymbolReplace( + kFrameStartRegExp, frame, '' + ); + + if (processed.length > 0 && processed.length !== frame.length) { + ArrayPrototypePush(frames, processed); + } + } + ); + + if (frames.length > 0) { + const frameDelimiter = `\n${indent} `; + + result += `${indent} stack: |-${frameDelimiter}`; + result += `${ArrayPrototypeJoin(frames, `${frameDelimiter}`)}\n`; + } + } + } + + return result; +} + +module.exports = { TapStream }; diff --git a/lib/internal/test_runner/test.js b/lib/internal/test_runner/test.js new file mode 100644 index 00000000000..f02c173bff3 --- /dev/null +++ b/lib/internal/test_runner/test.js @@ -0,0 +1,738 @@ +'use strict'; +const { + ArrayPrototypePush, + ArrayPrototypeReduce, + ArrayPrototypeShift, + ArrayPrototypeSlice, + ArrayPrototypeUnshift, + FunctionPrototype, + MathMax, + Number, + ObjectSeal, + PromisePrototypeThen, + PromiseResolve, + ReflectApply, + SafeMap, + SafeSet, + SafePromiseAll, + SafePromiseRace, + Symbol, +} = primordials; +const { AsyncResource } = require('async_hooks'); +const { once } = require('events'); +const { AbortController } = require('internal/abort_controller'); +const { + codes: { + ERR_INVALID_ARG_TYPE, + ERR_TEST_FAILURE, + }, + AbortError, +} = require('internal/errors'); +const { getOptionValue } = require('internal/options'); +const { TapStream } = require('internal/test_runner/tap_stream'); +const { createDeferredCallback, isTestFailureError } = require('internal/test_runner/utils'); +const { + createDeferredPromise, + kEmptyObject, +} = require('internal/util'); +const { isPromise } = require('internal/util/types'); +const { + validateAbortSignal, + validateNumber, + validateOneOf, + validateUint32, +} = require('internal/validators'); +const { setTimeout } = require('timers/promises'); +const { TIMEOUT_MAX } = require('internal/timers'); +const { cpus } = require('os'); +const { bigint: hrtime } = process.hrtime; +const kCallbackAndPromisePresent = 'callbackAndPromisePresent'; +const kCancelledByParent = 'cancelledByParent'; +const kParentAlreadyFinished = 'parentAlreadyFinished'; +const kSubtestsFailed = 'subtestsFailed'; +const kTestCodeFailure = 'testCodeFailure'; +const kTestTimeoutFailure = 'testTimeoutFailure'; +const kHookFailure = 'hookFailed'; +const kDefaultIndent = ' '; +const kDefaultTimeout = null; +const noop = FunctionPrototype; +const isTestRunner = getOptionValue('--test'); +const testOnlyFlag = !isTestRunner && getOptionValue('--test-only'); +const kShouldAbort = Symbol('kShouldAbort'); +const kRunHook = Symbol('kRunHook'); +const kHookNames = ObjectSeal(['before', 'after', 'beforeEach', 'afterEach']); +const kUnwrapErrors = new SafeSet() + .add(kTestCodeFailure).add(kHookFailure) + .add('uncaughtException').add('unhandledRejection'); + + +function stopTest(timeout, signal) { + if (timeout === kDefaultTimeout) { + return once(signal, 'abort'); + } + return PromisePrototypeThen(setTimeout(timeout, null, { ref: false, signal }), () => { + throw new ERR_TEST_FAILURE( + `test timed out after ${timeout}ms`, + kTestTimeoutFailure + ); + }); +} + +class TestContext { + #test; + + constructor(test) { + this.#test = test; + } + + get signal() { + return this.#test.signal; + } + + get name() { + return this.#test.name; + } + + diagnostic(message) { + this.#test.diagnostic(message); + } + + runOnly(value) { + this.#test.runOnlySubtests = !!value; + } + + skip(message) { + this.#test.skip(message); + } + + todo(message) { + this.#test.todo(message); + } + + test(name, options, fn) { + // eslint-disable-next-line no-use-before-define + const subtest = this.#test.createSubtest(Test, name, options, fn); + + return subtest.start(); + } + + beforeEach(fn, options) { + this.#test.createHook('beforeEach', fn, options); + } + + afterEach(fn, options) { + this.#test.createHook('afterEach', fn, options); + } +} + +class Test extends AsyncResource { + #abortController; + #outerSignal; + + constructor(options) { + super('Test'); + + let { fn, name, parent, skip } = options; + const { concurrency, only, timeout, todo, signal } = options; + + if (typeof fn !== 'function') { + fn = noop; + } + + if (typeof name !== 'string' || name === '') { + name = fn.name || ''; + } + + if (!(parent instanceof Test)) { + parent = null; + } + + if (parent === null) { + this.concurrency = 1; + this.indent = ''; + this.indentString = kDefaultIndent; + this.only = testOnlyFlag; + this.reporter = new TapStream(); + this.runOnlySubtests = this.only; + this.testNumber = 0; + this.timeout = kDefaultTimeout; + } else { + const indent = parent.parent === null ? parent.indent : + parent.indent + parent.indentString; + + this.concurrency = parent.concurrency; + this.indent = indent; + this.indentString = parent.indentString; + this.only = only ?? !parent.runOnlySubtests; + this.reporter = parent.reporter; + this.runOnlySubtests = !this.only; + this.testNumber = parent.subtests.length + 1; + this.timeout = parent.timeout; + } + + switch (typeof concurrency) { + case 'number': + validateUint32(concurrency, 'options.concurrency', 1); + this.concurrency = concurrency; + break; + + case 'boolean': + if (concurrency) { + // TODO(cjihrig): Use uv_available_parallelism() once it lands. + this.concurrency = parent === null ? MathMax(cpus().length - 1, 1) : Infinity; + } else { + this.concurrency = 1; + } + break; + + default: + if (concurrency != null) + throw new ERR_INVALID_ARG_TYPE('options.concurrency', ['boolean', 'number'], concurrency); + } + + if (timeout != null && timeout !== Infinity) { + validateNumber(timeout, 'options.timeout', 0, TIMEOUT_MAX); + this.timeout = timeout; + } + + if (testOnlyFlag && !this.only) { + skip = '\'only\' option not set'; + } + + if (skip) { + fn = noop; + } + + this.#abortController = new AbortController(); + this.#outerSignal = signal; + this.signal = this.#abortController.signal; + + validateAbortSignal(signal, 'options.signal'); + this.#outerSignal?.addEventListener('abort', this.#abortHandler); + + + this.fn = fn; + this.name = name; + this.parent = parent; + this.cancelled = false; + this.skipped = !!skip; + this.isTodo = !!todo; + this.startTime = null; + this.endTime = null; + this.passed = false; + this.error = null; + this.diagnostics = []; + this.message = typeof skip === 'string' ? skip : + typeof todo === 'string' ? todo : null; + this.activeSubtests = 0; + this.pendingSubtests = []; + this.readySubtests = new SafeMap(); + this.subtests = []; + this.hooks = { + before: [], + after: [], + beforeEach: [], + afterEach: [], + }; + this.waitingOn = 0; + this.finished = false; + } + + hasConcurrency() { + return this.concurrency > this.activeSubtests; + } + + addPendingSubtest(deferred) { + ArrayPrototypePush(this.pendingSubtests, deferred); + } + + async processPendingSubtests() { + while (this.pendingSubtests.length > 0 && this.hasConcurrency()) { + const deferred = ArrayPrototypeShift(this.pendingSubtests); + await deferred.test.run(); + deferred.resolve(); + } + } + + addReadySubtest(subtest) { + this.readySubtests.set(subtest.testNumber, subtest); + } + + processReadySubtestRange(canSend) { + const start = this.waitingOn; + const end = start + this.readySubtests.size; + + for (let i = start; i < end; i++) { + const subtest = this.readySubtests.get(i); + + // Check if the specified subtest is in the map. If it is not, return + // early to avoid trying to process any more tests since they would be + // out of order. + if (subtest === undefined) { + return; + } + + // Call isClearToSend() in the loop so that it is: + // - Only called if there are results to report in the correct order. + // - Guaranteed to only be called a maximum of once per call to + // processReadySubtestRange(). + canSend = canSend || this.isClearToSend(); + + if (!canSend) { + return; + } + + if (i === 1 && this.parent !== null) { + this.reporter.subtest(this.indent, this.name); + } + + // Report the subtest's results and remove it from the ready map. + subtest.finalize(); + this.readySubtests.delete(i); + } + } + + createSubtest(Factory, name, options, fn, overrides) { + if (typeof name === 'function') { + fn = name; + } else if (name !== null && typeof name === 'object') { + fn = options; + options = name; + } else if (typeof options === 'function') { + fn = options; + } + + if (options === null || typeof options !== 'object') { + options = kEmptyObject; + } + + let parent = this; + + // If this test has already ended, attach this test to the root test so + // that the error can be properly reported. + const preventAddingSubtests = this.finished || this.buildPhaseFinished; + if (preventAddingSubtests) { + while (parent.parent !== null) { + parent = parent.parent; + } + } + + const test = new Factory({ __proto__: null, fn, name, parent, ...options, ...overrides }); + + if (parent.waitingOn === 0) { + parent.waitingOn = test.testNumber; + } + + if (preventAddingSubtests) { + test.startTime = test.startTime || hrtime(); + test.fail( + new ERR_TEST_FAILURE( + 'test could not be started because its parent finished', + kParentAlreadyFinished + ) + ); + } + + ArrayPrototypePush(parent.subtests, test); + return test; + } + + #abortHandler = () => { + this.cancel(this.#outerSignal?.reason || new AbortError('The test was aborted')); + }; + + cancel(error) { + if (this.endTime !== null) { + return; + } + + this.fail(error || + new ERR_TEST_FAILURE( + 'test did not finish before its parent and was cancelled', + kCancelledByParent + ) + ); + this.startTime = this.startTime || this.endTime; // If a test was canceled before it was started, e.g inside a hook + this.cancelled = true; + this.#abortController.abort(); + } + + createHook(name, fn, options) { + validateOneOf(name, 'hook name', kHookNames); + // eslint-disable-next-line no-use-before-define + const hook = new TestHook(fn, options); + ArrayPrototypePush(this.hooks[name], hook); + return hook; + } + + fail(err) { + if (this.error !== null) { + return; + } + + this.endTime = hrtime(); + this.passed = false; + this.error = err; + } + + pass() { + if (this.endTime !== null) { + return; + } + + this.endTime = hrtime(); + this.passed = true; + } + + skip(message) { + this.skipped = true; + this.message = message; + } + + todo(message) { + this.isTodo = true; + this.message = message; + } + + diagnostic(message) { + ArrayPrototypePush(this.diagnostics, message); + } + + start() { + // If there is enough available concurrency to run the test now, then do + // it. Otherwise, return a Promise to the caller and mark the test as + // pending for later execution. + if (!this.parent.hasConcurrency()) { + const deferred = createDeferredPromise(); + + deferred.test = this; + this.parent.addPendingSubtest(deferred); + return deferred.promise; + } + + return this.run(); + } + + [kShouldAbort]() { + if (this.signal.aborted) { + return true; + } + if (this.#outerSignal?.aborted) { + this.cancel(this.#outerSignal.reason || new AbortError('The test was aborted')); + return true; + } + } + + getRunArgs() { + const ctx = new TestContext(this); + return { ctx, args: [ctx] }; + } + + async [kRunHook](hook, args) { + validateOneOf(hook, 'hook name', kHookNames); + try { + await ArrayPrototypeReduce(this.hooks[hook], async (prev, hook) => { + await prev; + await hook.run(args); + if (hook.error) { + throw hook.error; + } + }, PromiseResolve()); + } catch (err) { + const error = new ERR_TEST_FAILURE(`failed running ${hook} hook`, kHookFailure); + error.cause = isTestFailureError(err) ? err.cause : err; + throw error; + } + } + + async run() { + if (this.parent !== null) { + this.parent.activeSubtests++; + } + this.startTime = hrtime(); + + if (this[kShouldAbort]()) { + this.postRun(); + return; + } + + try { + const { args, ctx } = this.getRunArgs(); + if (this.parent?.hooks.beforeEach.length > 0) { + await this.parent[kRunHook]('beforeEach', { args, ctx }); + } + const stopPromise = stopTest(this.timeout, this.signal); + const runArgs = ArrayPrototypeSlice(args); + ArrayPrototypeUnshift(runArgs, this.fn, ctx); + + if (this.fn.length === runArgs.length - 1) { + // This test is using legacy Node.js error first callbacks. + const { promise, cb } = createDeferredCallback(); + + ArrayPrototypePush(runArgs, cb); + const ret = ReflectApply(this.runInAsyncScope, this, runArgs); + + if (isPromise(ret)) { + this.fail(new ERR_TEST_FAILURE( + 'passed a callback but also returned a Promise', + kCallbackAndPromisePresent + )); + await SafePromiseRace([ret, stopPromise]); + } else { + await SafePromiseRace([PromiseResolve(promise), stopPromise]); + } + } else { + // This test is synchronous or using Promises. + const promise = ReflectApply(this.runInAsyncScope, this, runArgs); + await SafePromiseRace([PromiseResolve(promise), stopPromise]); + } + + if (this[kShouldAbort]()) { + this.postRun(); + return; + } + + if (this.parent?.hooks.afterEach.length > 0) { + await this.parent[kRunHook]('afterEach', { args, ctx }); + } + + this.pass(); + } catch (err) { + if (isTestFailureError(err)) { + if (err.failureType === kTestTimeoutFailure) { + this.cancel(err); + } else { + this.fail(err); + } + } else { + this.fail(new ERR_TEST_FAILURE(err, kTestCodeFailure)); + } + } + + // Clean up the test. Then, try to report the results and execute any + // tests that were pending due to available concurrency. + this.postRun(); + } + + postRun(pendingSubtestsError) { + const counters = { __proto__: null, failed: 0, passed: 0, cancelled: 0, skipped: 0, todo: 0, totalFailed: 0 }; + + // If the test was failed before it even started, then the end time will + // be earlier than the start time. Correct that here. + if (this.endTime < this.startTime) { + this.endTime = hrtime(); + } + this.startTime ??= this.endTime; + + // The test has run, so recursively cancel any outstanding subtests and + // mark this test as failed if any subtests failed. + this.pendingSubtests = []; + for (let i = 0; i < this.subtests.length; i++) { + const subtest = this.subtests[i]; + + if (!subtest.finished) { + subtest.cancel(pendingSubtestsError); + subtest.postRun(pendingSubtestsError); + } + + // Check SKIP and TODO tests first, as those should not be counted as + // failures. + if (subtest.skipped) { + counters.skipped++; + } else if (subtest.isTodo) { + counters.todo++; + } else if (subtest.cancelled) { + counters.cancelled++; + } else if (!subtest.passed) { + counters.failed++; + } else { + counters.passed++; + } + + if (!subtest.passed) { + counters.totalFailed++; + } + } + + if ((this.passed || this.parent === null) && counters.totalFailed > 0) { + const subtestString = `subtest${counters.totalFailed > 1 ? 's' : ''}`; + const msg = `${counters.totalFailed} ${subtestString} failed`; + + this.fail(new ERR_TEST_FAILURE(msg, kSubtestsFailed)); + } + + this.#outerSignal?.removeEventListener('abort', this.#abortHandler); + + if (this.parent !== null) { + this.parent.activeSubtests--; + this.parent.addReadySubtest(this); + this.parent.processReadySubtestRange(false); + this.parent.processPendingSubtests(); + } else if (!this.reported) { + this.reported = true; + this.reporter.plan(this.indent, this.subtests.length); + + for (let i = 0; i < this.diagnostics.length; i++) { + this.reporter.diagnostic(this.indent, this.diagnostics[i]); + } + + this.reporter.diagnostic(this.indent, `tests ${this.subtests.length}`); + this.reporter.diagnostic(this.indent, `pass ${counters.passed}`); + this.reporter.diagnostic(this.indent, `fail ${counters.failed}`); + this.reporter.diagnostic(this.indent, `cancelled ${counters.cancelled}`); + this.reporter.diagnostic(this.indent, `skipped ${counters.skipped}`); + this.reporter.diagnostic(this.indent, `todo ${counters.todo}`); + this.reporter.diagnostic(this.indent, `duration_ms ${this.#duration()}`); + this.reporter.push(null); + } + } + + isClearToSend() { + return this.parent === null || + ( + this.parent.waitingOn === this.testNumber && this.parent.isClearToSend() + ); + } + + finalize() { + // By the time this function is called, the following can be relied on: + // - The current test has completed or been cancelled. + // - All of this test's subtests have completed or been cancelled. + // - It is the current test's turn to report its results. + + // Report any subtests that have not been reported yet. Since all of the + // subtests have finished, it's safe to pass true to + // processReadySubtestRange(), which will finalize all remaining subtests. + this.processReadySubtestRange(true); + + // Output this test's results and update the parent's waiting counter. + if (this.subtests.length > 0) { + this.reporter.plan(this.subtests[0].indent, this.subtests.length); + } else { + this.reporter.subtest(this.indent, this.name); + } + + this.report(); + this.parent.waitingOn++; + this.finished = true; + } + + #duration() { + // Duration is recorded in BigInt nanoseconds. Convert to milliseconds. + return Number(this.endTime - this.startTime) / 1_000_000; + } + + report() { + let directive; + + if (this.skipped) { + directive = this.reporter.getSkip(this.message); + } else if (this.isTodo) { + directive = this.reporter.getTodo(this.message); + } + + if (this.passed) { + this.reporter.ok(this.indent, this.testNumber, this.name, this.#duration(), directive); + } else { + this.reporter.fail(this.indent, this.testNumber, this.name, this.#duration(), this.error, directive); + } + + for (let i = 0; i < this.diagnostics.length; i++) { + this.reporter.diagnostic(this.indent, this.diagnostics[i]); + } + } +} + +class TestHook extends Test { + #args; + constructor(fn, options) { + if (options === null || typeof options !== 'object') { + options = kEmptyObject; + } + const { timeout, signal } = options; + super({ __proto__: null, fn, timeout, signal }); + } + run(args) { + this.#args = args; + return super.run(); + } + getRunArgs() { + return this.#args; + } + postRun() { + } +} + +class ItTest extends Test { + constructor(opt) { super(opt); } // eslint-disable-line no-useless-constructor + getRunArgs() { + return { ctx: { signal: this.signal, name: this.name }, args: [] }; + } +} +class Suite extends Test { + constructor(options) { + super(options); + + try { + const { ctx, args } = this.getRunArgs(); + this.buildSuite = PromisePrototypeThen( + PromiseResolve(this.runInAsyncScope(this.fn, ctx, args)), + undefined, + (err) => { + this.fail(new ERR_TEST_FAILURE(err, kTestCodeFailure)); + }); + } catch (err) { + this.fail(new ERR_TEST_FAILURE(err, kTestCodeFailure)); + } + this.fn = () => {}; + this.buildPhaseFinished = true; + } + + getRunArgs() { + return { ctx: { signal: this.signal, name: this.name }, args: [] }; + } + + async run() { + try { + this.parent.activeSubtests++; + await this.buildSuite; + this.startTime = hrtime(); + + if (this[kShouldAbort]()) { + this.subtests = []; + this.postRun(); + return; + } + + + const hookArgs = this.getRunArgs(); + await this[kRunHook]('before', hookArgs); + const stopPromise = stopTest(this.timeout, this.signal); + const subtests = this.skipped || this.error ? [] : this.subtests; + const promise = SafePromiseAll(subtests, (subtests) => subtests.start()); + + await SafePromiseRace([promise, stopPromise]); + await this[kRunHook]('after', hookArgs); + this.pass(); + } catch (err) { + if (isTestFailureError(err)) { + this.fail(err); + } else { + this.fail(new ERR_TEST_FAILURE(err, kTestCodeFailure)); + } + } + + this.postRun(); + } +} + +module.exports = { + ItTest, + kCancelledByParent, + kDefaultIndent, + kSubtestsFailed, + kTestCodeFailure, + kUnwrapErrors, + Suite, + Test, +}; diff --git a/lib/internal/test_runner/utils.js b/lib/internal/test_runner/utils.js new file mode 100644 index 00000000000..f5991e13e7f --- /dev/null +++ b/lib/internal/test_runner/utils.js @@ -0,0 +1,62 @@ +'use strict'; +const { RegExpPrototypeExec } = primordials; +const { basename } = require('path'); +const { createDeferredPromise } = require('internal/util'); +const { + codes: { + ERR_TEST_FAILURE, + }, + kIsNodeError, +} = require('internal/errors'); + +const kMultipleCallbackInvocations = 'multipleCallbackInvocations'; +const kSupportedFileExtensions = /\.[cm]?js$/; +const kTestFilePattern = /((^test(-.+)?)|(.+[.\-_]test))\.[cm]?js$/; + +function doesPathMatchFilter(p) { + return RegExpPrototypeExec(kTestFilePattern, basename(p)) !== null; +} + +function isSupportedFileType(p) { + return RegExpPrototypeExec(kSupportedFileExtensions, p) !== null; +} + +function createDeferredCallback() { + let calledCount = 0; + const { promise, resolve, reject } = createDeferredPromise(); + const cb = (err) => { + calledCount++; + + // If the callback is called a second time, let the user know, but + // don't let them know more than once. + if (calledCount > 1) { + if (calledCount === 2) { + throw new ERR_TEST_FAILURE( + 'callback invoked multiple times', + kMultipleCallbackInvocations + ); + } + + return; + } + + if (err) { + return reject(err); + } + + resolve(); + }; + + return { promise, cb }; +} + +function isTestFailureError(err) { + return err?.code === 'ERR_TEST_FAILURE' && kIsNodeError in err; +} + +module.exports = { + createDeferredCallback, + doesPathMatchFilter, + isSupportedFileType, + isTestFailureError, +}; diff --git a/lib/internal/tls/secure-context.js b/lib/internal/tls/secure-context.js index 8cb3ae06d2e..3d2e4d6623e 100644 --- a/lib/internal/tls/secure-context.js +++ b/lib/internal/tls/secure-context.js @@ -17,6 +17,10 @@ const { }, } = require('internal/errors'); +const { + kEmptyObject, +} = require('internal/util'); + const { isArrayBufferView, } = require('internal/util/types'); @@ -117,7 +121,7 @@ function processCiphers(ciphers, name) { return { cipherList, cipherSuites }; } -function configSecureContext(context, options = {}, name = 'options') { +function configSecureContext(context, options = kEmptyObject, name = 'options') { validateObject(options, name); const { @@ -221,15 +225,10 @@ function configSecureContext(context, options = {}, name = 'options') { cipherSuites, } = processCiphers(ciphers, `${name}.ciphers`); - context.setCipherSuites(cipherSuites); + if (cipherSuites !== '') + context.setCipherSuites(cipherSuites); context.setCiphers(cipherList); - if (cipherSuites === '' && - context.getMaxProto() > TLS1_2_VERSION && - context.getMinProto() < TLS1_3_VERSION) { - context.setMaxProto(TLS1_2_VERSION); - } - if (cipherList === '' && context.getMinProto() < TLS1_3_VERSION && context.getMaxProto() > TLS1_2_VERSION) { @@ -266,7 +265,7 @@ function configSecureContext(context, options = {}, name = 'options') { if (pfx !== undefined && pfx !== null) { if (ArrayIsArray(pfx)) { ArrayPrototypeForEach(pfx, (val) => { - const raw = val.buf ? val.buf : val; + const raw = val.buf || val; const pass = val.passphrase || passphrase; if (pass !== undefined && pass !== null) { context.loadPKCS12(toBuf(raw), toBuf(pass)); diff --git a/lib/internal/tls/secure-pair.js b/lib/internal/tls/secure-pair.js index b3f0930a3c7..db999d90ccf 100644 --- a/lib/internal/tls/secure-pair.js +++ b/lib/internal/tls/secure-pair.js @@ -1,6 +1,7 @@ 'use strict'; const EventEmitter = require('events'); +const { kEmptyObject } = require('internal/util'); const { Duplex } = require('stream'); const _tls_wrap = require('_tls_wrap'); const _tls_common = require('_tls_common'); @@ -57,7 +58,7 @@ class SecurePair extends EventEmitter { isServer = false, requestCert = !isServer, rejectUnauthorized = false, - options = {}) { + options = kEmptyObject) { super(); const { socket1, socket2 } = new DuplexPair(); diff --git a/lib/internal/tty.js b/lib/internal/tty.js index 5abf0b908b0..4f285e92829 100644 --- a/lib/internal/tty.js +++ b/lib/internal/tty.js @@ -24,7 +24,7 @@ const { ArrayPrototypeSome, - RegExpPrototypeTest, + RegExpPrototypeExec, StringPrototypeSplit, StringPrototypeToLowerCase, } = primordials; @@ -174,14 +174,14 @@ function getColorDepth(env = process.env) { } if ('TEAMCITY_VERSION' in env) { - return RegExpPrototypeTest(/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/, env.TEAMCITY_VERSION) ? + return RegExpPrototypeExec(/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/, env.TEAMCITY_VERSION) !== null ? COLORS_16 : COLORS_2; } switch (env.TERM_PROGRAM) { case 'iTerm.app': if (!env.TERM_PROGRAM_VERSION || - RegExpPrototypeTest(/^[0-2]\./, env.TERM_PROGRAM_VERSION) + RegExpPrototypeExec(/^[0-2]\./, env.TERM_PROGRAM_VERSION) !== null ) { return COLORS_256; } @@ -198,7 +198,7 @@ function getColorDepth(env = process.env) { } if (env.TERM) { - if (RegExpPrototypeTest(/^xterm-256/, env.TERM)) { + if (RegExpPrototypeExec(/^xterm-256/, env.TERM) !== null) { return COLORS_256; } @@ -208,7 +208,7 @@ function getColorDepth(env = process.env) { return TERM_ENVS[termEnv]; } if (ArrayPrototypeSome(TERM_ENVS_REG_EXP, - (term) => RegExpPrototypeTest(term, termEnv))) { + (term) => RegExpPrototypeExec(term, termEnv) !== null)) { return COLORS_16; } } diff --git a/lib/internal/url.js b/lib/internal/url.js index 939374a4958..5715c403e6d 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -23,6 +23,7 @@ const { StringPrototypeCharCodeAt, StringPrototypeIncludes, StringPrototypeReplace, + StringPrototypeReplaceAll, StringPrototypeSlice, StringPrototypeSplit, StringPrototypeStartsWith, @@ -220,6 +221,7 @@ class URLSearchParams { } else { // Record // Need to use reflection APIs for full spec compliance. + const visited = {}; this[searchParams] = []; const keys = ReflectOwnKeys(init); for (let i = 0; i < keys.length; i++) { @@ -228,7 +230,16 @@ class URLSearchParams { if (desc !== undefined && desc.enumerable) { const typedKey = toUSVString(key); const typedValue = toUSVString(init[key]); - this[searchParams].push(typedKey, typedValue); + + // Two different key may result same after `toUSVString()`, we only + // leave the later one. Refers to WPT. + if (visited[typedKey] !== undefined) { + this[searchParams][visited[typedKey]] = typedValue; + } else { + visited[typedKey] = ArrayPrototypePush(this[searchParams], + typedKey, + typedValue) - 1; + } } } } @@ -520,10 +531,11 @@ ObjectDefineProperties(URLSearchParams.prototype, { keys: kEnumerableProperty, values: kEnumerableProperty, toString: kEnumerableProperty, - [SymbolToStringTag]: { configurable: true, value: 'URLSearchParams' }, + [SymbolToStringTag]: { __proto__: null, configurable: true, value: 'URLSearchParams' }, // https://heycam.github.io/webidl/#es-iterable-entries [SymbolIterator]: { + __proto__: null, configurable: true, writable: true, value: URLSearchParams.prototype.entries, @@ -983,8 +995,8 @@ class URL { } ObjectDefineProperties(URL.prototype, { - [kFormat]: { configurable: false, writable: false }, - [SymbolToStringTag]: { configurable: true, value: 'URL' }, + [kFormat]: { __proto__: null, configurable: false, writable: false }, + [SymbolToStringTag]: { __proto__: null, configurable: true, value: 'URL' }, toString: kEnumerableProperty, href: kEnumerableProperty, origin: kEnumerableProperty, @@ -1167,6 +1179,7 @@ function serializeParams(array) { function defineIDLClass(proto, classStr, obj) { // https://heycam.github.io/webidl/#dfn-class-string ObjectDefineProperty(proto, SymbolToStringTag, { + __proto__: null, writable: false, enumerable: false, configurable: true, @@ -1176,6 +1189,7 @@ function defineIDLClass(proto, classStr, obj) { // https://heycam.github.io/webidl/#es-operations for (const key of ObjectKeys(obj)) { ObjectDefineProperty(proto, key, { + __proto__: null, writable: true, enumerable: true, configurable: true, @@ -1184,6 +1198,7 @@ function defineIDLClass(proto, classStr, obj) { } for (const key of ObjectGetOwnPropertySymbols(obj)) { ObjectDefineProperty(proto, key, { + __proto__: null, writable: true, enumerable: false, configurable: true, @@ -1358,8 +1373,6 @@ function urlToHttpOptions(url) { return options; } -const forwardSlashRegEx = /\//g; - function getPathFromURLWin32(url) { const hostname = url.hostname; let pathname = url.pathname; @@ -1374,7 +1387,7 @@ function getPathFromURLWin32(url) { } } } - pathname = pathname.replace(forwardSlashRegEx, '\\'); + pathname = StringPrototypeReplaceAll(pathname, '/', '\\'); pathname = decodeURIComponent(pathname); if (hostname !== '') { // If hostname is set, then we have a UNC path diff --git a/lib/internal/util.js b/lib/internal/util.js index d1b82fd69e1..911383c877d 100644 --- a/lib/internal/util.js +++ b/lib/internal/util.js @@ -7,18 +7,21 @@ const { ArrayPrototypeSlice, ArrayPrototypeSort, Error, + FunctionPrototypeCall, ObjectCreate, ObjectDefineProperties, ObjectDefineProperty, ObjectGetOwnPropertyDescriptor, ObjectGetOwnPropertyDescriptors, ObjectGetPrototypeOf, + ObjectFreeze, + ObjectPrototypeHasOwnProperty, ObjectSetPrototypeOf, + ObjectValues, Promise, ReflectApply, ReflectConstruct, RegExpPrototypeExec, - RegExpPrototypeTest, SafeMap, SafeSet, StringPrototypeReplace, @@ -259,8 +262,8 @@ function createClassWrapper(type) { } // Mask the wrapper function name and length values ObjectDefineProperties(fn, { - name: { value: type.name }, - length: { value: type.length } + name: { __proto__: null, value: type.name }, + length: { __proto__: null, value: type.length }, }); ObjectSetPrototypeOf(fn, type); fn.prototype = type.prototype; @@ -334,6 +337,7 @@ function promisify(original) { validateFunction(fn, 'util.promisify.custom'); return ObjectDefineProperty(fn, kCustomPromisifiedSymbol, { + __proto__: null, value: fn, enumerable: false, writable: false, configurable: true }); } @@ -364,12 +368,18 @@ function promisify(original) { ObjectSetPrototypeOf(fn, ObjectGetPrototypeOf(original)); ObjectDefineProperty(fn, kCustomPromisifiedSymbol, { + __proto__: null, value: fn, enumerable: false, writable: false, configurable: true }); - return ObjectDefineProperties( - fn, - ObjectGetOwnPropertyDescriptors(original) - ); + + const descriptors = ObjectGetOwnPropertyDescriptors(original); + const propertiesValues = ObjectValues(descriptors); + for (let i = 0; i < propertiesValues.length; i++) { + // We want to use null-prototype objects to not rely on globally mutable + // %Object.prototype%. + ObjectSetPrototypeOf(propertiesValues[i], null); + } + return ObjectDefineProperties(fn, descriptors); } promisify.custom = kCustomPromisifiedSymbol; @@ -427,9 +437,9 @@ function isInsideNodeModules() { const filename = frame.getFileName(); // If a filename does not start with / or contain \, // it's likely from Node.js core. - if (!RegExpPrototypeTest(/^\/|\\/, filename)) + if (RegExpPrototypeExec(/^\/|\\/, filename) === null) continue; - return RegExpPrototypeTest(kNodeModulesRE, filename); + return RegExpPrototypeExec(kNodeModulesRE, filename) !== null; } } return false; @@ -469,6 +479,7 @@ function createDeferredPromise() { // https://heycam.github.io/webidl/#define-the-operations function defineOperation(target, name, method) { ObjectDefineProperty(target, name, { + __proto__: null, writable: true, enumerable: true, configurable: true, @@ -479,6 +490,7 @@ function defineOperation(target, name, method) { // https://heycam.github.io/webidl/#es-interfaces function exposeInterface(target, name, interfaceObject) { ObjectDefineProperty(target, name, { + __proto__: null, writable: true, enumerable: false, configurable: true, @@ -510,6 +522,53 @@ function structuredClone(value) { const kEnumerableProperty = ObjectCreate(null); kEnumerableProperty.enumerable = true; +ObjectFreeze(kEnumerableProperty); + +const kEmptyObject = ObjectFreeze(ObjectCreate(null)); + +function filterOwnProperties(source, keys) { + const filtered = ObjectCreate(null); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (ObjectPrototypeHasOwnProperty(source, key)) { + filtered[key] = source[key]; + } + } + + return filtered; +} + +/** + * Mimics `obj[key] = value` but ignoring potential prototype inheritance. + * @param {any} obj + * @param {string} key + * @param {any} value + * @returns {any} + */ +function setOwnProperty(obj, key, value) { + return ObjectDefineProperty(obj, key, { + __proto__: null, + configurable: true, + enumerable: true, + value, + writable: true, + }); +} + +let internalGlobal; +function getInternalGlobal() { + if (internalGlobal == null) { + // Lazy-load to avoid a circular dependency. + const { runInNewContext } = require('vm'); + internalGlobal = runInNewContext('this', undefined, { contextName: 'internal' }); + } + return internalGlobal; +} + +function SideEffectFreeRegExpPrototypeExec(regex, string) { + const { RegExp: RegExpFromAnotherRealm } = getInternalGlobal(); + return FunctionPrototypeCall(RegExpFromAnotherRealm.prototype.exec, regex, string); +} module.exports = { assertCrypto, @@ -523,7 +582,9 @@ module.exports = { emitExperimentalWarning, exposeInterface, filterDuplicateStrings, + filterOwnProperties, getConstructorOf, + getInternalGlobal, getSystemErrorMap, getSystemErrorName, isError, @@ -533,6 +594,7 @@ module.exports = { normalizeEncoding, once, promisify, + SideEffectFreeRegExpPrototypeExec, sleep, spliceOne, structuredClone, @@ -551,5 +613,7 @@ module.exports = { kIsEncodingSymbol: Symbol('kIsEncodingSymbol'), kVmBreakFirstLineSymbol: Symbol('kVmBreakFirstLineSymbol'), + kEmptyObject, kEnumerableProperty, + setOwnProperty, }; diff --git a/lib/internal/util/colors.js b/lib/internal/util/colors.js new file mode 100644 index 00000000000..5622a88467d --- /dev/null +++ b/lib/internal/util/colors.js @@ -0,0 +1,23 @@ +'use strict'; + +module.exports = { + blue: '', + green: '', + white: '', + red: '', + clear: '', + hasColors: false, + refresh() { + if (process.stderr.isTTY) { + const hasColors = process.stderr.hasColors(); + module.exports.blue = hasColors ? '\u001b[34m' : ''; + module.exports.green = hasColors ? '\u001b[32m' : ''; + module.exports.white = hasColors ? '\u001b[39m' : ''; + module.exports.red = hasColors ? '\u001b[31m' : ''; + module.exports.clear = hasColors ? '\u001bc' : ''; + module.exports.hasColors = hasColors; + } + } +}; + +module.exports.refresh(); diff --git a/lib/internal/util/debuglog.js b/lib/internal/util/debuglog.js index 4b5c7cab44a..de39457db2b 100644 --- a/lib/internal/util/debuglog.js +++ b/lib/internal/util/debuglog.js @@ -100,6 +100,7 @@ function debuglog(set, cb) { } }; ObjectDefineProperty(logger, 'enabled', { + __proto__: null, get() { return test(); }, diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index d78a4e97d21..fed5b8fd068 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -5,9 +5,15 @@ const { ArrayIsArray, ArrayPrototypeFilter, ArrayPrototypeForEach, + ArrayPrototypeIncludes, + ArrayPrototypeIndexOf, + ArrayPrototypeJoin, + ArrayPrototypeMap, ArrayPrototypePop, ArrayPrototypePush, ArrayPrototypePushApply, + ArrayPrototypeSlice, + ArrayPrototypeSplice, ArrayPrototypeSort, ArrayPrototypeUnshift, BigIntPrototypeValueOf, @@ -16,6 +22,7 @@ const { DatePrototypeToISOString, DatePrototypeToString, ErrorPrototypeToString, + FunctionPrototypeBind, FunctionPrototypeCall, FunctionPrototypeToString, JSONStringify, @@ -32,6 +39,7 @@ const { NumberIsNaN, NumberParseFloat, NumberParseInt, + NumberPrototypeToString, NumberPrototypeValueOf, Object, ObjectAssign, @@ -47,9 +55,12 @@ const { ObjectPrototypePropertyIsEnumerable, ObjectSeal, ObjectSetPrototypeOf, + ReflectApply, ReflectOwnKeys, RegExp, - RegExpPrototypeTest, + RegExpPrototypeExec, + RegExpPrototypeSymbolReplace, + RegExpPrototypeSymbolSplit, RegExpPrototypeToString, SafeStringIterator, SafeMap, @@ -60,13 +71,17 @@ const { StringPrototypeCharCodeAt, StringPrototypeCodePointAt, StringPrototypeIncludes, + StringPrototypeIndexOf, + StringPrototypeLastIndexOf, StringPrototypeNormalize, StringPrototypePadEnd, StringPrototypePadStart, StringPrototypeRepeat, - StringPrototypeReplace, + StringPrototypeReplaceAll, StringPrototypeSlice, StringPrototypeSplit, + StringPrototypeEndsWith, + StringPrototypeStartsWith, StringPrototypeToLowerCase, StringPrototypeTrim, StringPrototypeValueOf, @@ -104,9 +119,6 @@ const { } = require('internal/util'); const { - codes: { - ERR_INVALID_ARG_TYPE - }, isStackOverflowError } = require('internal/errors'); @@ -139,18 +151,24 @@ const { const assert = require('internal/assert'); -const { NativeModule } = require('internal/bootstrap/loaders'); +const { BuiltinModule } = require('internal/bootstrap/loaders'); const { validateObject, validateString, } = require('internal/validators'); let hexSlice; +let internalUrl; + +function pathToFileUrlHref(filepath) { + internalUrl ??= require('internal/url'); + return internalUrl.pathToFileURL(filepath).href; +} const builtInObjects = new SafeSet( ArrayPrototypeFilter( ObjectGetOwnPropertyNames(globalThis), - (e) => RegExpPrototypeTest(/^[A-Z][a-zA-Z0-9]+$/, e) + (e) => RegExpPrototypeExec(/^[A-Z][a-zA-Z0-9]+$/, e) !== null ) ); @@ -349,6 +367,7 @@ function inspect(value, opts) { inspect.custom = customInspectSymbol; ObjectDefineProperty(inspect, 'defaultOptions', { + __proto__: null, get() { return inspectDefaultOptions; }, @@ -363,7 +382,8 @@ ObjectDefineProperty(inspect, 'defaultOptions', { // reset code as second entry. const defaultFG = 39; const defaultBG = 49; -inspect.colors = ObjectAssign(ObjectCreate(null), { +inspect.colors = { + __proto__: null, reset: [0, 0], bold: [1, 22], dim: [2, 22], // Alias: faint @@ -409,10 +429,11 @@ inspect.colors = ObjectAssign(ObjectCreate(null), { bgMagentaBright: [105, defaultBG], bgCyanBright: [106, defaultBG], bgWhiteBright: [107, defaultBG], -}); +}; function defineColorAlias(target, alias) { ObjectDefineProperty(inspect.colors, alias, { + __proto__: null, get() { return this[target]; }, @@ -467,7 +488,7 @@ function addQuotes(str, quotes) { function escapeFn(str) { const charCode = StringPrototypeCharCodeAt(str); - return meta.length > charCode ? meta[charCode] : `\\u${charCode.toString(16)}`; + return meta.length > charCode ? meta[charCode] : `\\u${NumberPrototypeToString(charCode, 16)}`; } // Escape control characters, single quotes and the backslash. @@ -497,10 +518,10 @@ function strEscape(str) { } // Some magic numbers that worked out fine while benchmarking with v8 6.0 - if (str.length < 5000 && !RegExpPrototypeTest(escapeTest, str)) + if (str.length < 5000 && RegExpPrototypeExec(escapeTest, str) === null) return addQuotes(str, singleQuote); if (str.length > 100) { - str = StringPrototypeReplace(str, escapeReplace, escapeFn); + str = RegExpPrototypeSymbolReplace(escapeReplace, str, escapeFn); return addQuotes(str, singleQuote); } @@ -526,7 +547,7 @@ function strEscape(str) { continue; } } - result += `${StringPrototypeSlice(str, last, i)}${`\\u${point.toString(16)}`}`; + result += `${StringPrototypeSlice(str, last, i)}\\u${NumberPrototypeToString(point, 16)}`; last = i + 1; } } @@ -579,7 +600,7 @@ function getConstructorName(obj, ctx, recurseTimes, protoProps) { addPrototypeProperties( ctx, tmp, firstProto || tmp, recurseTimes, protoProps); } - return descriptor.value.name; + return String(descriptor.value.name); } obj = ObjectGetPrototypeOf(obj); @@ -759,6 +780,9 @@ function formatValue(ctx, value, recurseTimes, typedArray) { // any proxy handlers. const proxy = getProxyDetails(value, !!ctx.showProxy); if (proxy !== undefined) { + if (proxy === null || proxy[0] === null) { + return ctx.stylize('', 'special'); + } if (ctx.showProxy) { return formatProxy(ctx, proxy, recurseTimes); } @@ -792,7 +816,7 @@ function formatValue(ctx, value, recurseTimes, typedArray) { if (typeof ret !== 'string') { return formatValue(ctx, ret, recurseTimes); } - return ret.replace(/\n/g, `\n${' '.repeat(ctx.indentationLvl)}`); + return StringPrototypeReplaceAll(ret, '\n', `\n${StringPrototypeRepeat(' ', ctx.indentationLvl)}`); } } } @@ -854,7 +878,7 @@ function formatRaw(ctx, value, recurseTimes, typedArray) { // Iterators and the rest are split to reduce checks. // We have to check all values in case the constructor is set to null. // Otherwise it would not possible to identify all types properly. - if (value[SymbolIterator] || constructor === null) { + if (SymbolIterator in value || constructor === null) { noIterator = false; if (ArrayIsArray(value)) { // Only set the constructor for non ordinary ("Array [...]") arrays. @@ -872,8 +896,8 @@ function formatRaw(ctx, value, recurseTimes, typedArray) { const prefix = getPrefix(constructor, tag, 'Set', `(${size})`); keys = getKeys(value, ctx.showHidden); formatter = constructor !== null ? - formatSet.bind(null, value) : - formatSet.bind(null, SetPrototypeValues(value)); + FunctionPrototypeBind(formatSet, null, value) : + FunctionPrototypeBind(formatSet, null, SetPrototypeValues(value)); if (size === 0 && keys.length === 0 && protoProps === undefined) return `${prefix}{}`; braces = [`${prefix}{`, '}']; @@ -882,8 +906,8 @@ function formatRaw(ctx, value, recurseTimes, typedArray) { const prefix = getPrefix(constructor, tag, 'Map', `(${size})`); keys = getKeys(value, ctx.showHidden); formatter = constructor !== null ? - formatMap.bind(null, value) : - formatMap.bind(null, MapPrototypeEntries(value)); + FunctionPrototypeBind(formatMap, null, value) : + FunctionPrototypeBind(formatMap, null, MapPrototypeEntries(value)); if (size === 0 && keys.length === 0 && protoProps === undefined) return `${prefix}{}`; braces = [`${prefix}{`, '}']; @@ -903,18 +927,18 @@ function formatRaw(ctx, value, recurseTimes, typedArray) { return `${braces[0]}]`; // Special handle the value. The original value is required below. The // bound function is required to reconstruct missing information. - formatter = formatTypedArray.bind(null, bound, size); + formatter = FunctionPrototypeBind(formatTypedArray, null, bound, size); extrasType = kArrayExtrasType; } else if (isMapIterator(value)) { keys = getKeys(value, ctx.showHidden); braces = getIteratorBraces('Map', tag); // Add braces to the formatter parameters. - formatter = formatIterator.bind(null, braces); + formatter = FunctionPrototypeBind(formatIterator, null, braces); } else if (isSetIterator(value)) { keys = getKeys(value, ctx.showHidden); braces = getIteratorBraces('Set', tag); // Add braces to the formatter parameters. - formatter = formatIterator.bind(null, braces); + formatter = FunctionPrototypeBind(formatIterator, null, braces); } else { noIterator = true; } @@ -1012,7 +1036,7 @@ function formatRaw(ctx, value, recurseTimes, typedArray) { } if (recurseTimes > ctx.depth && ctx.depth !== null) { - let constructorName = getCtxStyle(value, constructor, tag).slice(0, -1); + let constructorName = StringPrototypeSlice(getCtxStyle(value, constructor, tag), 0, -1); if (constructor !== null) constructorName = `[${constructorName}]`; return ctx.stylize(constructorName, 'special'); @@ -1026,14 +1050,16 @@ function formatRaw(ctx, value, recurseTimes, typedArray) { try { output = formatter(ctx, value, recurseTimes); for (i = 0; i < keys.length; i++) { - output.push( - formatProperty(ctx, value, recurseTimes, keys[i], extrasType)); + ArrayPrototypePush( + output, + formatProperty(ctx, value, recurseTimes, keys[i], extrasType), + ); } if (protoProps !== undefined) { - output.push(...protoProps); + ArrayPrototypePushApply(output, protoProps); } } catch (err) { - const constructorName = getCtxStyle(value, constructor, tag).slice(0, -1); + const constructorName = StringPrototypeSlice(getCtxStyle(value, constructor, tag), 0, -1); return handleMaxCallStackSize(ctx, err, constructorName, indentationLvl); } if (ctx.circular !== undefined) { @@ -1053,10 +1079,11 @@ function formatRaw(ctx, value, recurseTimes, typedArray) { if (ctx.sorted) { const comparator = ctx.sorted === true ? undefined : ctx.sorted; if (extrasType === kObjectType) { - output = output.sort(comparator); + ArrayPrototypeSort(output, comparator); } else if (keys.length > 1) { - const sorted = output.slice(output.length - keys.length).sort(comparator); - output.splice(output.length - keys.length, keys.length, ...sorted); + const sorted = ArrayPrototypeSort(ArrayPrototypeSlice(output, output.length - keys.length), comparator); + ArrayPrototypeUnshift(sorted, output, output.length - keys.length, keys.length); + ReflectApply(ArrayPrototypeSplice, null, sorted); } } @@ -1150,13 +1177,14 @@ function getClassBase(value, constructor, tag) { function getFunctionBase(value, constructor, tag) { const stringified = FunctionPrototypeToString(value); - if (stringified.startsWith('class') && stringified.endsWith('}')) { - const slice = stringified.slice(5, -1); - const bracketIndex = slice.indexOf('{'); + if (StringPrototypeStartsWith(stringified, 'class') && StringPrototypeEndsWith(stringified, '}')) { + const slice = StringPrototypeSlice(stringified, 5, -1); + const bracketIndex = StringPrototypeIndexOf(slice, '{'); if (bracketIndex !== -1 && - (!slice.slice(0, bracketIndex).includes('(') || - // Slow path to guarantee that it's indeed a class. - classRegExp.test(slice.replace(stripCommentsRegExp)))) { + (!StringPrototypeIncludes(StringPrototypeSlice(slice, 0, bracketIndex), '(') || + // Slow path to guarantee that it's indeed a class. + RegExpPrototypeExec(classRegExp, RegExpPrototypeSymbolReplace(stripCommentsRegExp, slice)) !== null) + ) { return getClassBase(value, constructor, tag); } } @@ -1214,14 +1242,14 @@ function getStackString(error) { } function getStackFrames(ctx, err, stack) { - const frames = stack.split('\n'); + const frames = StringPrototypeSplit(stack, '\n'); // Remove stack frames identical to frames in cause. if (err.cause && isError(err.cause)) { const causeStack = getStackString(err.cause); - const causeStackStart = causeStack.indexOf('\n at'); + const causeStackStart = StringPrototypeIndexOf(causeStack, '\n at'); if (causeStackStart !== -1) { - const causeFrames = causeStack.slice(causeStackStart + 1).split('\n'); + const causeFrames = StringPrototypeSplit(StringPrototypeSlice(causeStack, causeStackStart + 1), '\n'); const { len, offset } = identicalSequenceRange(frames, causeFrames); if (len > 0) { const skipped = len - 2; @@ -1239,27 +1267,27 @@ function improveStack(stack, constructor, name, tag) { let len = name.length; if (constructor === null || - (name.endsWith('Error') && - stack.startsWith(name) && + (StringPrototypeEndsWith(name, 'Error') && + StringPrototypeStartsWith(stack, name) && (stack.length === len || stack[len] === ':' || stack[len] === '\n'))) { let fallback = 'Error'; if (constructor === null) { - const start = stack.match(/^([A-Z][a-z_ A-Z0-9[\]()-]+)(?::|\n {4}at)/) || - stack.match(/^([a-z_A-Z0-9-]*Error)$/); + const start = RegExpPrototypeExec(/^([A-Z][a-z_ A-Z0-9[\]()-]+)(?::|\n {4}at)/, stack) || + RegExpPrototypeExec(/^([a-z_A-Z0-9-]*Error)$/, stack); fallback = (start && start[1]) || ''; len = fallback.length; fallback = fallback || 'Error'; } - const prefix = getPrefix(constructor, tag, fallback).slice(0, -1); + const prefix = StringPrototypeSlice(getPrefix(constructor, tag, fallback), 0, -1); if (name !== prefix) { - if (prefix.includes(name)) { + if (StringPrototypeIncludes(prefix, name)) { if (len === 0) { stack = `${prefix}: ${stack}`; } else { - stack = `${prefix}${stack.slice(len)}`; + stack = `${prefix}${StringPrototypeSlice(stack, len)}`; } } else { - stack = `${prefix} [${name}]${stack.slice(len)}`; + stack = `${prefix} [${name}]${StringPrototypeSlice(stack, len)}`; } } } @@ -1269,15 +1297,67 @@ function improveStack(stack, constructor, name, tag) { function removeDuplicateErrorKeys(ctx, keys, err, stack) { if (!ctx.showHidden && keys.length !== 0) { for (const name of ['name', 'message', 'stack']) { - const index = keys.indexOf(name); + const index = ArrayPrototypeIndexOf(keys, name); // Only hide the property in case it's part of the original stack - if (index !== -1 && stack.includes(err[name])) { - keys.splice(index, 1); + if (index !== -1 && StringPrototypeIncludes(stack, err[name])) { + ArrayPrototypeSplice(keys, index, 1); } } } } +function markNodeModules(ctx, line) { + let tempLine = ''; + let nodeModule; + let pos = 0; + while ((nodeModule = nodeModulesRegExp.exec(line)) !== null) { + // '/node_modules/'.length === 14 + tempLine += StringPrototypeSlice(line, pos, nodeModule.index + 14); + tempLine += ctx.stylize(nodeModule[1], 'module'); + pos = nodeModule.index + nodeModule[0].length; + } + if (pos !== 0) { + line = tempLine + StringPrototypeSlice(line, pos); + } + return line; +} + +function markCwd(ctx, line, workingDirectory) { + let cwdStartPos = StringPrototypeIndexOf(line, workingDirectory); + let tempLine = ''; + let cwdLength = workingDirectory.length; + if (cwdStartPos !== -1) { + if (StringPrototypeSlice(line, cwdStartPos - 7, cwdStartPos) === 'file://') { + cwdLength += 7; + cwdStartPos -= 7; + } + const start = line[cwdStartPos - 1] === '(' ? cwdStartPos - 1 : cwdStartPos; + const end = start !== cwdStartPos && StringPrototypeEndsWith(line, ')') ? -1 : line.length; + const workingDirectoryEndPos = cwdStartPos + cwdLength + 1; + const cwdSlice = StringPrototypeSlice(line, start, workingDirectoryEndPos); + + tempLine += StringPrototypeSlice(line, 0, start); + tempLine += ctx.stylize(cwdSlice, 'undefined'); + tempLine += StringPrototypeSlice(line, workingDirectoryEndPos, end); + if (end === -1) { + tempLine += ctx.stylize(')', 'undefined'); + } + } else { + tempLine += line; + } + return tempLine; +} + +function safeGetCWD() { + let workingDirectory; + try { + workingDirectory = process.cwd(); + } catch { + return; + } + return workingDirectory; +} + function formatError(err, constructor, tag, ctx, keys) { const name = err.name != null ? String(err.name) : 'Error'; let stack = getStackString(err); @@ -1285,52 +1365,63 @@ function formatError(err, constructor, tag, ctx, keys) { removeDuplicateErrorKeys(ctx, keys, err, stack); if ('cause' in err && - (keys.length === 0 || !keys.includes('cause'))) { - keys.push('cause'); + (keys.length === 0 || !ArrayPrototypeIncludes(keys, 'cause'))) { + ArrayPrototypePush(keys, 'cause'); + } + + // Print errors aggregated into AggregateError + if (ArrayIsArray(err.errors) && + (keys.length === 0 || !ArrayPrototypeIncludes(keys, 'errors'))) { + ArrayPrototypePush(keys, 'errors'); } stack = improveStack(stack, constructor, name, tag); // Ignore the error message if it's contained in the stack. - let pos = (err.message && stack.indexOf(err.message)) || -1; + let pos = (err.message && StringPrototypeIndexOf(stack, err.message)) || -1; if (pos !== -1) pos += err.message.length; // Wrap the error in brackets in case it has no stack trace. - const stackStart = stack.indexOf('\n at', pos); + const stackStart = StringPrototypeIndexOf(stack, '\n at', pos); if (stackStart === -1) { stack = `[${stack}]`; } else { - let newStack = stack.slice(0, stackStart); - const lines = getStackFrames(ctx, err, stack.slice(stackStart + 1)); + let newStack = StringPrototypeSlice(stack, 0, stackStart); + const stackFramePart = StringPrototypeSlice(stack, stackStart + 1); + const lines = getStackFrames(ctx, err, stackFramePart); if (ctx.colors) { // Highlight userland code and node modules. - for (const line of lines) { - const core = line.match(coreModuleRegExp); - if (core !== null && NativeModule.exists(core[1])) { + const workingDirectory = safeGetCWD(); + let esmWorkingDirectory; + for (let line of lines) { + const core = RegExpPrototypeExec(coreModuleRegExp, line); + if (core !== null && BuiltinModule.exists(core[1])) { newStack += `\n${ctx.stylize(line, 'undefined')}`; } else { - // This adds underscores to all node_modules to quickly identify them. - let nodeModule; newStack += '\n'; - let pos = 0; - while ((nodeModule = nodeModulesRegExp.exec(line)) !== null) { - // '/node_modules/'.length === 14 - newStack += line.slice(pos, nodeModule.index + 14); - newStack += ctx.stylize(nodeModule[1], 'module'); - pos = nodeModule.index + nodeModule[0].length; + + line = markNodeModules(ctx, line); + if (workingDirectory !== undefined) { + let newLine = markCwd(ctx, line, workingDirectory); + if (newLine === line) { + esmWorkingDirectory ??= pathToFileUrlHref(workingDirectory); + newLine = markCwd(ctx, line, esmWorkingDirectory); + } + line = newLine; } - newStack += pos === 0 ? line : line.slice(pos); + + newStack += line; } } } else { - newStack += `\n${lines.join('\n')}`; + newStack += `\n${ArrayPrototypeJoin(lines, '\n')}`; } stack = newStack; } // The message and the stack have to be indented as well! if (ctx.indentationLvl !== 0) { - const indentation = ' '.repeat(ctx.indentationLvl); - stack = stack.replace(/\n/g, `\n${indentation}`); + const indentation = StringPrototypeRepeat(' ', ctx.indentationLvl); + stack = StringPrototypeReplaceAll(stack, '\n', `\n${indentation}`); } return stack; } @@ -1462,26 +1553,28 @@ function handleMaxCallStackSize(ctx, err, constructorName, indentationLvl) { function addNumericSeparator(integerString) { let result = ''; let i = integerString.length; - const start = integerString.startsWith('-') ? 1 : 0; + const start = StringPrototypeStartsWith(integerString, '-') ? 1 : 0; for (; i >= start + 4; i -= 3) { - result = `_${integerString.slice(i - 3, i)}${result}`; + result = `_${StringPrototypeSlice(integerString, i - 3, i)}${result}`; } return i === integerString.length ? integerString : - `${integerString.slice(0, i)}${result}`; + `${StringPrototypeSlice(integerString, 0, i)}${result}`; } function addNumericSeparatorEnd(integerString) { let result = ''; let i = 0; for (; i < integerString.length - 3; i += 3) { - result += `${integerString.slice(i, i + 3)}_`; + result += `${StringPrototypeSlice(integerString, i, i + 3)}_`; } return i === 0 ? integerString : - `${result}${integerString.slice(i)}`; + `${result}${StringPrototypeSlice(integerString, i)}`; } +const remainingText = (remaining) => `... ${remaining} more item${remaining > 1 ? 's' : ''}`; + function formatNumber(fn, number, numericSeparator) { if (!numericSeparator) { // Format -0 as '-0'. Checking `number === -0` won't distinguish 0 from -0. @@ -1493,7 +1586,7 @@ function formatNumber(fn, number, numericSeparator) { const integer = MathTrunc(number); const string = String(integer); if (integer === number) { - if (!NumberIsFinite(number) || string.includes('e')) { + if (!NumberIsFinite(number) || StringPrototypeIncludes(string, 'e')) { return fn(string, 'number'); } return fn(`${addNumericSeparator(string)}`, 'number'); @@ -1504,7 +1597,9 @@ function formatNumber(fn, number, numericSeparator) { return fn(`${ addNumericSeparator(string) }.${ - addNumericSeparatorEnd(String(number).slice(string.length + 1)) + addNumericSeparatorEnd( + StringPrototypeSlice(String(number), string.length + 1) + ) }`, 'number'); } @@ -1521,18 +1616,22 @@ function formatPrimitive(fn, value, ctx) { let trailer = ''; if (value.length > ctx.maxStringLength) { const remaining = value.length - ctx.maxStringLength; - value = value.slice(0, ctx.maxStringLength); + value = StringPrototypeSlice(value, 0, ctx.maxStringLength); trailer = `... ${remaining} more character${remaining > 1 ? 's' : ''}`; } if (ctx.compact !== true && - // TODO(BridgeAR): Add unicode support. Use the readline getStringWidth - // function. + // We do not support handling unicode characters width with + // the readline getStringWidth function as there are + // performance implications. value.length > kMinLineLength && value.length > ctx.breakLength - ctx.indentationLvl - 4) { - return value - .split(/(?<=\n)/) - .map((line) => fn(strEscape(line), 'string')) - .join(` +\n${' '.repeat(ctx.indentationLvl + 2)}`) + trailer; + return ArrayPrototypeJoin( + ArrayPrototypeMap( + RegExpPrototypeSymbolSplit(/(?<=\n)/, value), + (line) => fn(strEscape(line), 'string'), + ), + ` +\n${StringPrototypeRepeat(' ', ctx.indentationLvl + 2)}`, + ) + trailer; } return fn(strEscape(value), 'string') + trailer; } @@ -1561,10 +1660,10 @@ function formatNamespaceObject(keys, ctx, value, recurseTimes) { // this aligned, even though this is a hacky way of dealing with this. const tmp = { [keys[i]]: '' }; output[i] = formatProperty(ctx, tmp, recurseTimes, keys[i], kObjectType); - const pos = output[i].lastIndexOf(' '); + const pos = StringPrototypeLastIndexOf(output[i], ' '); // We have to find the last whitespace and have to replace that value as // it will be visualized as a regular string. - output[i] = output[i].slice(0, pos + 1) + + output[i] = StringPrototypeSlice(output[i], 0, pos + 1) + ctx.stylize('', 'special'); } } @@ -1585,19 +1684,19 @@ function formatSpecialArray(ctx, value, recurseTimes, maxLength, output, i) { break; } if (`${index}` !== key) { - if (!numberRegExp.test(key)) { + if (RegExpPrototypeExec(numberRegExp, key) === null) { break; } const emptyItems = tmp - index; const ending = emptyItems > 1 ? 's' : ''; const message = `<${emptyItems} empty item${ending}>`; - output.push(ctx.stylize(message, 'undefined')); + ArrayPrototypePush(output, ctx.stylize(message, 'undefined')); index = tmp; if (output.length === maxLength) { break; } } - output.push(formatProperty(ctx, value, recurseTimes, key, kArrayType)); + ArrayPrototypePush(output, formatProperty(ctx, value, recurseTimes, key, kArrayType)); index++; } const remaining = value.length - index; @@ -1605,10 +1704,10 @@ function formatSpecialArray(ctx, value, recurseTimes, maxLength, output, i) { if (remaining > 0) { const ending = remaining > 1 ? 's' : ''; const message = `<${remaining} empty item${ending}>`; - output.push(ctx.stylize(message, 'undefined')); + ArrayPrototypePush(output, ctx.stylize(message, 'undefined')); } } else if (remaining > 0) { - output.push(`... ${remaining} more item${remaining > 1 ? 's' : ''}`); + ArrayPrototypePush(output, remainingText(remaining)); } return output; } @@ -1622,9 +1721,11 @@ function formatArrayBuffer(ctx, value) { } if (hexSlice === undefined) hexSlice = uncurryThis(require('buffer').Buffer.prototype.hexSlice); - let str = StringPrototypeTrim(StringPrototypeReplace( + let str = StringPrototypeTrim(RegExpPrototypeSymbolReplace( + /(.{2})/g, hexSlice(buffer, 0, MathMin(ctx.maxArrayLength, buffer.length)), - /(.{2})/g, '$1 ')); + '$1 ', + )); const remaining = buffer.length - ctx.maxArrayLength; if (remaining > 0) str += ` ... ${remaining} more byte${remaining > 1 ? 's' : ''}`; @@ -1642,10 +1743,11 @@ function formatArray(ctx, value, recurseTimes) { if (!ObjectPrototypeHasOwnProperty(value, i)) { return formatSpecialArray(ctx, value, recurseTimes, len, output, i); } - output.push(formatProperty(ctx, value, recurseTimes, i, kArrayType)); + ArrayPrototypePush(output, formatProperty(ctx, value, recurseTimes, i, kArrayType)); + } + if (remaining > 0) { + ArrayPrototypePush(output, remainingText(remaining)); } - if (remaining > 0) - output.push(`... ${remaining} more item${remaining > 1 ? 's' : ''}`); return output; } @@ -1660,7 +1762,7 @@ function formatTypedArray(value, length, ctx, ignored, recurseTimes) { output[i] = elementFormatter(ctx.stylize, value[i], ctx.numericSeparator); } if (remaining > 0) { - output[maxLength] = `... ${remaining} more item${remaining > 1 ? 's' : ''}`; + output[maxLength] = remainingText(remaining); } if (ctx.showHidden) { // .buffer goes last, it's not a primitive like the others. @@ -1682,22 +1784,41 @@ function formatTypedArray(value, length, ctx, ignored, recurseTimes) { } function formatSet(value, ctx, ignored, recurseTimes) { + const length = value.size; + const maxLength = MathMin(MathMax(0, ctx.maxArrayLength), length); + const remaining = length - maxLength; const output = []; ctx.indentationLvl += 2; + let i = 0; for (const v of value) { + if (i >= maxLength) break; ArrayPrototypePush(output, formatValue(ctx, v, recurseTimes)); + i++; + } + if (remaining > 0) { + ArrayPrototypePush(output, remainingText(remaining)); } ctx.indentationLvl -= 2; return output; } function formatMap(value, ctx, ignored, recurseTimes) { + const length = value.size; + const maxLength = MathMin(MathMax(0, ctx.maxArrayLength), length); + const remaining = length - maxLength; const output = []; ctx.indentationLvl += 2; + let i = 0; for (const { 0: k, 1: v } of value) { - output.push( - `${formatValue(ctx, k, recurseTimes)} => ${formatValue(ctx, v, recurseTimes)}` + if (i >= maxLength) break; + ArrayPrototypePush( + output, + `${formatValue(ctx, k, recurseTimes)} => ${formatValue(ctx, v, recurseTimes)}`, ); + i++; + } + if (remaining > 0) { + ArrayPrototypePush(output, remainingText(remaining)); } ctx.indentationLvl -= 2; return output; @@ -1720,8 +1841,7 @@ function formatSetIterInner(ctx, recurseTimes, entries, state) { } const remaining = entries.length - maxLength; if (remaining > 0) { - ArrayPrototypePush(output, - `... ${remaining} more item${remaining > 1 ? 's' : ''}`); + ArrayPrototypePush(output, remainingText(remaining)); } return output; } @@ -1732,7 +1852,7 @@ function formatMapIterInner(ctx, recurseTimes, entries, state) { const len = entries.length / 2; const remaining = len - maxArrayLength; const maxLength = MathMin(maxArrayLength, len); - let output = new Array(maxLength); + const output = new Array(maxLength); let i = 0; ctx.indentationLvl += 2; if (state === kWeak) { @@ -1745,7 +1865,7 @@ function formatMapIterInner(ctx, recurseTimes, entries, state) { // retrieved ones exist, we can not reliably return the same output) if the // output is not sorted anyway. if (!ctx.sorted) - output = output.sort(); + ArrayPrototypeSort(output); } else { for (; i < maxLength; i++) { const pos = i * 2; @@ -1759,7 +1879,7 @@ function formatMapIterInner(ctx, recurseTimes, entries, state) { } ctx.indentationLvl -= 2; if (remaining > 0) { - output.push(`... ${remaining} more item${remaining > 1 ? 's' : ''}`); + ArrayPrototypePush(output, remainingText(remaining)); } return output; } @@ -1782,7 +1902,7 @@ function formatIterator(braces, ctx, value, recurseTimes) { const { 0: entries, 1: isKeyValue } = previewEntries(value, true); if (isKeyValue) { // Mark entry iterators as such. - braces[0] = braces[0].replace(/ Iterator] {$/, ' Entries] {'); + braces[0] = RegExpPrototypeSymbolReplace(/ Iterator] {$/, braces[0], ' Entries] {'); return formatMapIterInner(ctx, recurseTimes, entries, kMapEntries); } @@ -1818,7 +1938,7 @@ function formatProperty(ctx, value, recurseTimes, key, type, desc, ctx.indentationLvl += diff; str = formatValue(ctx, desc.value, recurseTimes); if (diff === 3 && ctx.breakLength < getStringWidth(str, ctx.colors)) { - extra = `\n${' '.repeat(ctx.indentationLvl)}`; + extra = `\n${StringPrototypeRepeat(' ', ctx.indentationLvl)}`; } ctx.indentationLvl -= diff; } else if (desc.get !== undefined) { @@ -1856,18 +1976,22 @@ function formatProperty(ctx, value, recurseTimes, key, type, desc, return str; } if (typeof key === 'symbol') { - const tmp = StringPrototypeReplace( + const tmp = RegExpPrototypeSymbolReplace( + strEscapeSequencesReplacer, SymbolPrototypeToString(key), - strEscapeSequencesReplacer, escapeFn + escapeFn ); name = `[${ctx.stylize(tmp, 'symbol')}]`; } else if (key === '__proto__') { name = "['__proto__']"; } else if (desc.enumerable === false) { - const tmp = StringPrototypeReplace(key, - strEscapeSequencesReplacer, escapeFn); + const tmp = RegExpPrototypeSymbolReplace( + strEscapeSequencesReplacer, + key, + escapeFn, + ); name = `[${tmp}]`; - } else if (RegExpPrototypeTest(keyStrRegExp, key)) { + } else if (RegExpPrototypeExec(keyStrRegExp, key) !== null) { name = ctx.stylize(key, 'name'); } else { name = ctx.stylize(strEscape(key), 'string'); @@ -1934,7 +2058,7 @@ function reduceToSingleString( braces[0].length + base.length + 10; if (isBelowBreakLength(ctx, output, start, base)) { const joinedOutput = join(output, ', '); - if (!joinedOutput.includes('\n')) { + if (!StringPrototypeIncludes(joinedOutput, '\n')) { return `${base ? `${base} ` : ''}${braces[0]} ${joinedOutput}` + ` ${braces[1]}`; } @@ -1967,6 +2091,9 @@ function hasBuiltInToString(value) { const getFullProxy = false; const proxyTarget = getProxyDetails(value, getFullProxy); if (proxyTarget !== undefined) { + if (proxyTarget === null) { + return true; + } value = proxyTarget; } @@ -1994,8 +2121,7 @@ function hasBuiltInToString(value) { builtInObjects.has(descriptor.value.name); } -const firstErrorLine = (error) => - StringPrototypeSplit(error.message, '\n', 1)[0]; +const firstErrorLine = (error) => StringPrototypeSplit(error.message, '\n', 1)[0]; let CIRCULAR_ERROR_MESSAGE; function tryStringify(arg) { try { @@ -2004,7 +2130,9 @@ function tryStringify(arg) { // Populate the circular error message lazily if (!CIRCULAR_ERROR_MESSAGE) { try { - const a = {}; a.a = a; JSONStringify(a); + const a = {}; + a.a = a; + JSONStringify(a); } catch (circularError) { CIRCULAR_ERROR_MESSAGE = firstErrorLine(circularError); } @@ -2022,10 +2150,7 @@ function format(...args) { } function formatWithOptions(inspectOptions, ...args) { - if (typeof inspectOptions !== 'object' || inspectOptions === null) { - throw new ERR_INVALID_ARG_TYPE( - 'inspectOptions', 'object', inspectOptions); - } + validateObject(inspectOptions, 'inspectOptions', { allowArray: true }); return formatWithOptionsInternal(inspectOptions, args); } @@ -2181,14 +2306,15 @@ if (internalBinding('config').hasIntl) { getStringWidth = function getStringWidth(str, removeControlChars = true) { let width = 0; - if (removeControlChars) + if (removeControlChars) { str = stripVTControlCharacters(str); + } for (let i = 0; i < str.length; i++) { // Try to avoid calling into C++ by first handling the ASCII portion of // the string. If it is fully ASCII, we skip the C++ part. const code = str.charCodeAt(i); if (code >= 127) { - width += icu.getStringWidth(str.slice(i).normalize('NFC')); + width += icu.getStringWidth(StringPrototypeNormalize(StringPrototypeSlice(str, i), 'NFC')); break; } width += code >= 32 ? 1 : 0; @@ -2278,14 +2404,15 @@ if (internalBinding('config').hasIntl) { function stripVTControlCharacters(str) { validateString(str, 'str'); - return str.replace(ansi, ''); + return RegExpPrototypeSymbolReplace(ansi, str, ''); } module.exports = { + identicalSequenceRange, inspect, + inspectDefaultOptions, format, formatWithOptions, getStringWidth, - inspectDefaultOptions, - stripVTControlCharacters + stripVTControlCharacters, }; diff --git a/lib/internal/util/inspector.js b/lib/internal/util/inspector.js index a94289b17d0..0514aece96d 100644 --- a/lib/internal/util/inspector.js +++ b/lib/internal/util/inspector.js @@ -2,12 +2,47 @@ const { ArrayPrototypeConcat, + ArrayPrototypeSome, FunctionPrototypeBind, ObjectDefineProperty, ObjectKeys, ObjectPrototypeHasOwnProperty, + RegExpPrototypeExec, + SafeWeakMap, } = primordials; +const { validatePort } = require('internal/validators'); + +const kMinPort = 1024; +const kMaxPort = 65535; +const kInspectArgRegex = /--inspect(?:-brk|-port)?|--debug-port/; +const kInspectMsgRegex = /Debugger listening on ws:\/\/\[?(.+?)\]?:(\d+)\/|Debugger attached|Waiting for the debugger to disconnect\.\.\./; + +const _isUsingInspector = new SafeWeakMap(); +function isUsingInspector(execArgv = process.execArgv) { + if (!_isUsingInspector.has(execArgv)) { + _isUsingInspector.set(execArgv, + ArrayPrototypeSome(execArgv, (arg) => RegExpPrototypeExec(kInspectArgRegex, arg) !== null) || + RegExpPrototypeExec(kInspectArgRegex, process.env.NODE_OPTIONS) !== null); + } + return _isUsingInspector.get(execArgv); +} + +let debugPortOffset = 1; +function getInspectPort(inspectPort) { + if (typeof inspectPort === 'function') { + inspectPort = inspectPort(); + } else if (inspectPort == null) { + inspectPort = process.debugPort + debugPortOffset; + if (inspectPort > kMaxPort) + inspectPort = inspectPort - kMaxPort + kMinPort - 1; + debugPortOffset++; + } + validatePort(inspectPort); + + return inspectPort; +} + let session; function sendInspectorCommand(cb, onError) { const { hasInspector } = internalBinding('config'); @@ -22,6 +57,10 @@ function sendInspectorCommand(cb, onError) { } } +function isInspectorMessage(string) { + return isUsingInspector() && RegExpPrototypeExec(kInspectMsgRegex, string) !== null; +} + // Create a special require function for the inspector command line API function installConsoleExtensions(commandLineApi) { if (commandLineApi.require) { return; } @@ -52,6 +91,7 @@ function wrapConsole(consoleFromNode, consoleFromVM) { consoleFromNode[key] ); ObjectDefineProperty(consoleFromNode[key], 'name', { + __proto__: null, value: key }); } else { @@ -64,7 +104,10 @@ function wrapConsole(consoleFromNode, consoleFromVM) { // Stores the console from VM, should be set during bootstrap. let consoleFromVM; module.exports = { + getInspectPort, installConsoleExtensions, + isInspectorMessage, + isUsingInspector, sendInspectorCommand, wrapConsole, get consoleFromVM() { diff --git a/lib/internal/util/parse_args/parse_args.js b/lib/internal/util/parse_args/parse_args.js new file mode 100644 index 00000000000..afe50ea0272 --- /dev/null +++ b/lib/internal/util/parse_args/parse_args.js @@ -0,0 +1,396 @@ +'use strict'; + +const { + ArrayPrototypeForEach, + ArrayPrototypeIncludes, + ArrayPrototypeMap, + ArrayPrototypePush, + ArrayPrototypePushApply, + ArrayPrototypeShift, + ArrayPrototypeSlice, + ArrayPrototypeUnshiftApply, + ObjectEntries, + ObjectPrototypeHasOwnProperty: ObjectHasOwn, + StringPrototypeCharAt, + StringPrototypeIndexOf, + StringPrototypeSlice, + StringPrototypeStartsWith, +} = primordials; + +const { + validateArray, + validateBoolean, + validateBooleanArray, + validateObject, + validateString, + validateStringArray, + validateUnion, +} = require('internal/validators'); + +const { + findLongOptionForShort, + isLoneLongOption, + isLoneShortOption, + isLongOptionAndValue, + isOptionValue, + isOptionLikeValue, + isShortOptionAndValue, + isShortOptionGroup, + useDefaultValueOption, + objectGetOwn, + optionsGetOwn, +} = require('internal/util/parse_args/utils'); + +const { + codes: { + ERR_INVALID_ARG_VALUE, + ERR_PARSE_ARGS_INVALID_OPTION_VALUE, + ERR_PARSE_ARGS_UNKNOWN_OPTION, + ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, + }, +} = require('internal/errors'); + +const { + kEmptyObject, +} = require('internal/util'); + + +function getMainArgs() { + // Work out where to slice process.argv for user supplied arguments. + + // Check node options for scenarios where user CLI args follow executable. + const execArgv = process.execArgv; + if (ArrayPrototypeIncludes(execArgv, '-e') || + ArrayPrototypeIncludes(execArgv, '--eval') || + ArrayPrototypeIncludes(execArgv, '-p') || + ArrayPrototypeIncludes(execArgv, '--print')) { + return ArrayPrototypeSlice(process.argv, 1); + } + + // Normally first two arguments are executable and script, then CLI arguments + return ArrayPrototypeSlice(process.argv, 2); +} + +/** + * In strict mode, throw for possible usage errors like --foo --bar + * + * @param {object} token - from tokens as available from parseArgs + */ +function checkOptionLikeValue(token) { + if (!token.inlineValue && isOptionLikeValue(token.value)) { + // Only show short example if user used short option. + const example = StringPrototypeStartsWith(token.rawName, '--') ? + `'${token.rawName}=-XYZ'` : + `'--${token.name}=-XYZ' or '${token.rawName}-XYZ'`; + const errorMessage = `Option '${token.rawName}' argument is ambiguous. +Did you forget to specify the option argument for '${token.rawName}'? +To specify an option argument starting with a dash use ${example}.`; + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(errorMessage); + } +} + +/** + * In strict mode, throw for usage errors. + * + * @param {object} config - from config passed to parseArgs + * @param {object} token - from tokens as available from parseArgs + */ +function checkOptionUsage(config, token) { + if (!ObjectHasOwn(config.options, token.name)) { + throw new ERR_PARSE_ARGS_UNKNOWN_OPTION( + token.rawName, config.allowPositionals); + } + + const short = optionsGetOwn(config.options, token.name, 'short'); + const shortAndLong = `${short ? `-${short}, ` : ''}--${token.name}`; + const type = optionsGetOwn(config.options, token.name, 'type'); + if (type === 'string' && typeof token.value !== 'string') { + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong} ' argument missing`); + } + // (Idiomatic test for undefined||null, expecting undefined.) + if (type === 'boolean' && token.value != null) { + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong}' does not take an argument`); + } +} + + +/** + * Store the option value in `values`. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {string|undefined} optionValue - value from user args + * @param {object} options - option configs, from parseArgs({ options }) + * @param {object} values - option values returned in `values` by parseArgs + */ +function storeOption(longOption, optionValue, options, values) { + if (longOption === '__proto__') { + return; // No. Just no. + } + + // We store based on the option value rather than option type, + // preserving the users intent for author to deal with. + const newValue = optionValue ?? true; + if (optionsGetOwn(options, longOption, 'multiple')) { + // Always store value in array, including for boolean. + // values[longOption] starts out not present, + // first value is added as new array [newValue], + // subsequent values are pushed to existing array. + // (note: values has null prototype, so simpler usage) + if (values[longOption]) { + ArrayPrototypePush(values[longOption], newValue); + } else { + values[longOption] = [newValue]; + } + } else { + values[longOption] = newValue; + } +} + +/** + * Store the default option value in `values`. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {string + * | boolean + * | string[] + * | boolean[]} optionValue - default value from option config + * @param {object} values - option values returned in `values` by parseArgs + */ +function storeDefaultOption(longOption, optionValue, values) { + if (longOption === '__proto__') { + return; // No. Just no. + } + + values[longOption] = optionValue; +} + +/** + * Process args and turn into identified tokens: + * - option (along with value, if any) + * - positional + * - option-terminator + * + * @param {string[]} args - from parseArgs({ args }) or mainArgs + * @param {object} options - option configs, from parseArgs({ options }) + */ +function argsToTokens(args, options) { + const tokens = []; + let index = -1; + let groupCount = 0; + + const remainingArgs = ArrayPrototypeSlice(args); + while (remainingArgs.length > 0) { + const arg = ArrayPrototypeShift(remainingArgs); + const nextArg = remainingArgs[0]; + if (groupCount > 0) + groupCount--; + else + index++; + + // Check if `arg` is an options terminator. + // Guideline 10 in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html + if (arg === '--') { + // Everything after a bare '--' is considered a positional argument. + ArrayPrototypePush(tokens, { kind: 'option-terminator', index }); + ArrayPrototypePushApply( + tokens, ArrayPrototypeMap(remainingArgs, (arg) => { + return { kind: 'positional', index: ++index, value: arg }; + }) + ); + break; // Finished processing args, leave while loop. + } + + if (isLoneShortOption(arg)) { + // e.g. '-f' + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + let value; + let inlineValue; + if (optionsGetOwn(options, longOption, 'type') === 'string' && + isOptionValue(nextArg)) { + // e.g. '-f', 'bar' + value = ArrayPrototypeShift(remainingArgs); + inlineValue = false; + } + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: arg, + index, value, inlineValue }); + if (value != null) ++index; + continue; + } + + if (isShortOptionGroup(arg, options)) { + // Expand -fXzy to -f -X -z -y + const expanded = []; + for (let index = 1; index < arg.length; index++) { + const shortOption = StringPrototypeCharAt(arg, index); + const longOption = findLongOptionForShort(shortOption, options); + if (optionsGetOwn(options, longOption, 'type') !== 'string' || + index === arg.length - 1) { + // Boolean option, or last short in group. Well formed. + ArrayPrototypePush(expanded, `-${shortOption}`); + } else { + // String option in middle. Yuck. + // Expand -abfFILE to -a -b -fFILE + ArrayPrototypePush(expanded, `-${StringPrototypeSlice(arg, index)}`); + break; // finished short group + } + } + ArrayPrototypeUnshiftApply(remainingArgs, expanded); + groupCount = expanded.length; + continue; + } + + if (isShortOptionAndValue(arg, options)) { + // e.g. -fFILE + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + const value = StringPrototypeSlice(arg, 2); + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: `-${shortOption}`, + index, value, inlineValue: true }); + continue; + } + + if (isLoneLongOption(arg)) { + // e.g. '--foo' + const longOption = StringPrototypeSlice(arg, 2); + let value; + let inlineValue; + if (optionsGetOwn(options, longOption, 'type') === 'string' && + isOptionValue(nextArg)) { + // e.g. '--foo', 'bar' + value = ArrayPrototypeShift(remainingArgs); + inlineValue = false; + } + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: arg, + index, value, inlineValue }); + if (value != null) ++index; + continue; + } + + if (isLongOptionAndValue(arg)) { + // e.g. --foo=bar + const equalIndex = StringPrototypeIndexOf(arg, '='); + const longOption = StringPrototypeSlice(arg, 2, equalIndex); + const value = StringPrototypeSlice(arg, equalIndex + 1); + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: `--${longOption}`, + index, value, inlineValue: true }); + continue; + } + + ArrayPrototypePush(tokens, { kind: 'positional', index, value: arg }); + } + return tokens; +} + +const parseArgs = (config = kEmptyObject) => { + const args = objectGetOwn(config, 'args') ?? getMainArgs(); + const strict = objectGetOwn(config, 'strict') ?? true; + const allowPositionals = objectGetOwn(config, 'allowPositionals') ?? !strict; + const returnTokens = objectGetOwn(config, 'tokens') ?? false; + const options = objectGetOwn(config, 'options') ?? { __proto__: null }; + // Bundle these up for passing to strict-mode checks. + const parseConfig = { args, strict, options, allowPositionals }; + + // Validate input configuration. + validateArray(args, 'args'); + validateBoolean(strict, 'strict'); + validateBoolean(allowPositionals, 'allowPositionals'); + validateBoolean(returnTokens, 'tokens'); + validateObject(options, 'options'); + ArrayPrototypeForEach( + ObjectEntries(options), + ({ 0: longOption, 1: optionConfig }) => { + validateObject(optionConfig, `options.${longOption}`); + + // type is required + const optionType = objectGetOwn(optionConfig, 'type'); + validateUnion(optionType, `options.${longOption}.type`, ['string', 'boolean']); + + if (ObjectHasOwn(optionConfig, 'short')) { + const shortOption = optionConfig.short; + validateString(shortOption, `options.${longOption}.short`); + if (shortOption.length !== 1) { + throw new ERR_INVALID_ARG_VALUE( + `options.${longOption}.short`, + shortOption, + 'must be a single character' + ); + } + } + + const multipleOption = objectGetOwn(optionConfig, 'multiple'); + if (ObjectHasOwn(optionConfig, 'multiple')) { + validateBoolean(multipleOption, `options.${longOption}.multiple`); + } + + const defaultValue = objectGetOwn(optionConfig, 'default'); + if (defaultValue !== undefined) { + let validator; + switch (optionType) { + case 'string': + validator = multipleOption ? validateStringArray : validateString; + break; + + case 'boolean': + validator = multipleOption ? validateBooleanArray : validateBoolean; + break; + } + validator(defaultValue, `options.${longOption}.default`); + } + } + ); + + // Phase 1: identify tokens + const tokens = argsToTokens(args, options); + + // Phase 2: process tokens into parsed option values and positionals + const result = { + values: { __proto__: null }, + positionals: [], + }; + if (returnTokens) { + result.tokens = tokens; + } + ArrayPrototypeForEach(tokens, (token) => { + if (token.kind === 'option') { + if (strict) { + checkOptionUsage(parseConfig, token); + checkOptionLikeValue(token); + } + storeOption(token.name, token.value, options, result.values); + } else if (token.kind === 'positional') { + if (!allowPositionals) { + throw new ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL(token.value); + } + ArrayPrototypePush(result.positionals, token.value); + } + }); + + // Phase 3: fill in default values for missing args + ArrayPrototypeForEach(ObjectEntries(options), ({ 0: longOption, + 1: optionConfig }) => { + const mustSetDefault = useDefaultValueOption(longOption, + optionConfig, + result.values); + if (mustSetDefault) { + storeDefaultOption(longOption, + objectGetOwn(optionConfig, 'default'), + result.values); + } + }); + + + return result; +}; + +module.exports = { + parseArgs, +}; diff --git a/lib/internal/util/parse_args/utils.js b/lib/internal/util/parse_args/utils.js new file mode 100644 index 00000000000..2e9863b54d6 --- /dev/null +++ b/lib/internal/util/parse_args/utils.js @@ -0,0 +1,198 @@ +'use strict'; + +const { + ArrayPrototypeFind, + ObjectEntries, + ObjectPrototypeHasOwnProperty: ObjectHasOwn, + StringPrototypeCharAt, + StringPrototypeIncludes, + StringPrototypeStartsWith, +} = primordials; + +const { + validateObject, +} = require('internal/validators'); + +// These are internal utilities to make the parsing logic easier to read, and +// add lots of detail for the curious. They are in a separate file to allow +// unit testing, although that is not essential (this could be rolled into +// main file and just tested implicitly via API). +// +// These routines are for internal use, not for export to client. + +/** + * Return the named property, but only if it is an own property. + */ +function objectGetOwn(obj, prop) { + if (ObjectHasOwn(obj, prop)) + return obj[prop]; +} + +/** + * Return the named options property, but only if it is an own property. + */ +function optionsGetOwn(options, longOption, prop) { + if (ObjectHasOwn(options, longOption)) + return objectGetOwn(options[longOption], prop); +} + +/** + * Determines if the argument may be used as an option value. + * @example + * isOptionValue('V') // returns true + * isOptionValue('-v') // returns true (greedy) + * isOptionValue('--foo') // returns true (greedy) + * isOptionValue(undefined) // returns false + */ +function isOptionValue(value) { + if (value == null) return false; + + // Open Group Utility Conventions are that an option-argument + // is the argument after the option, and may start with a dash. + return true; // greedy! +} + +/** + * Detect whether there is possible confusion and user may have omitted + * the option argument, like `--port --verbose` when `port` of type:string. + * In strict mode we throw errors if value is option-like. + */ +function isOptionLikeValue(value) { + if (value == null) return false; + + return value.length > 1 && StringPrototypeCharAt(value, 0) === '-'; +} + +/** + * Determines if `arg` is just a short option. + * @example '-f' + */ +function isLoneShortOption(arg) { + return arg.length === 2 && + StringPrototypeCharAt(arg, 0) === '-' && + StringPrototypeCharAt(arg, 1) !== '-'; +} + +/** + * Determines if `arg` is a lone long option. + * @example + * isLoneLongOption('a') // returns false + * isLoneLongOption('-a') // returns false + * isLoneLongOption('--foo') // returns true + * isLoneLongOption('--foo=bar') // returns false + */ +function isLoneLongOption(arg) { + return arg.length > 2 && + StringPrototypeStartsWith(arg, '--') && + !StringPrototypeIncludes(arg, '=', 3); +} + +/** + * Determines if `arg` is a long option and value in the same argument. + * @example + * isLongOptionAndValue('--foo') // returns false + * isLongOptionAndValue('--foo=bar') // returns true + */ +function isLongOptionAndValue(arg) { + return arg.length > 2 && + StringPrototypeStartsWith(arg, '--') && + StringPrototypeIncludes(arg, '=', 3); +} + +/** + * Determines if `arg` is a short option group. + * + * See Guideline 5 of the [Open Group Utility Conventions](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). + * One or more options without option-arguments, followed by at most one + * option that takes an option-argument, should be accepted when grouped + * behind one '-' delimiter. + * @example + * isShortOptionGroup('-a', {}) // returns false + * isShortOptionGroup('-ab', {}) // returns true + * // -fb is an option and a value, not a short option group + * isShortOptionGroup('-fb', { + * options: { f: { type: 'string' } } + * }) // returns false + * isShortOptionGroup('-bf', { + * options: { f: { type: 'string' } } + * }) // returns true + * // -bfb is an edge case, return true and caller sorts it out + * isShortOptionGroup('-bfb', { + * options: { f: { type: 'string' } } + * }) // returns true + */ +function isShortOptionGroup(arg, options) { + if (arg.length <= 2) return false; + if (StringPrototypeCharAt(arg, 0) !== '-') return false; + if (StringPrototypeCharAt(arg, 1) === '-') return false; + + const firstShort = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(firstShort, options); + return optionsGetOwn(options, longOption, 'type') !== 'string'; +} + +/** + * Determine if arg is a short string option followed by its value. + * @example + * isShortOptionAndValue('-a', {}); // returns false + * isShortOptionAndValue('-ab', {}); // returns false + * isShortOptionAndValue('-fFILE', { + * options: { foo: { short: 'f', type: 'string' }} + * }) // returns true + */ +function isShortOptionAndValue(arg, options) { + validateObject(options, 'options'); + + if (arg.length <= 2) return false; + if (StringPrototypeCharAt(arg, 0) !== '-') return false; + if (StringPrototypeCharAt(arg, 1) === '-') return false; + + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + return optionsGetOwn(options, longOption, 'type') === 'string'; +} + +/** + * Find the long option associated with a short option. Looks for a configured + * `short` and returns the short option itself if a long option is not found. + * @example + * findLongOptionForShort('a', {}) // returns 'a' + * findLongOptionForShort('b', { + * options: { bar: { short: 'b' } } + * }) // returns 'bar' + */ +function findLongOptionForShort(shortOption, options) { + validateObject(options, 'options'); + const longOptionEntry = ArrayPrototypeFind( + ObjectEntries(options), + ({ 1: optionConfig }) => objectGetOwn(optionConfig, 'short') === shortOption + ); + return longOptionEntry?.[0] ?? shortOption; +} + +/** + * Check if the given option includes a default value + * and that option has not been set by the input args. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {object} optionConfig - the option configuration properties + * @param {object} values - option values returned in `values` by parseArgs + */ +function useDefaultValueOption(longOption, optionConfig, values) { + return objectGetOwn(optionConfig, 'default') !== undefined && + values[longOption] === undefined; +} + +module.exports = { + findLongOptionForShort, + isLoneLongOption, + isLoneShortOption, + isLongOptionAndValue, + isOptionValue, + isOptionLikeValue, + isShortOptionAndValue, + isShortOptionGroup, + useDefaultValueOption, + objectGetOwn, + optionsGetOwn, +}; diff --git a/lib/internal/util/types.js b/lib/internal/util/types.js index aca7dbc4b2f..544f4c3da49 100644 --- a/lib/internal/util/types.js +++ b/lib/internal/util/types.js @@ -68,7 +68,7 @@ module.exports = { isFloat32Array, isFloat64Array, isBigInt64Array, - isBigUint64Array + isBigUint64Array, }; let isCryptoKey; @@ -76,6 +76,7 @@ let isKeyObject; ObjectDefineProperties(module.exports, { isKeyObject: { + __proto__: null, configurable: false, enumerable: true, value(obj) { @@ -91,6 +92,7 @@ ObjectDefineProperties(module.exports, { } }, isCryptoKey: { + __proto__: null, configurable: false, enumerable: true, value(obj) { diff --git a/lib/internal/v8/startup_snapshot.js b/lib/internal/v8/startup_snapshot.js new file mode 100644 index 00000000000..6a6a6c47e85 --- /dev/null +++ b/lib/internal/v8/startup_snapshot.js @@ -0,0 +1,111 @@ +'use strict'; + +const { + validateFunction, +} = require('internal/validators'); +const { + ERR_NOT_BUILDING_SNAPSHOT, + ERR_DUPLICATE_STARTUP_SNAPSHOT_MAIN_FUNCTION +} = require('internal/errors'); + +const { + setSerializeCallback, + setDeserializeCallback, + setDeserializeMainFunction: _setDeserializeMainFunction, + markBootstrapComplete +} = internalBinding('mksnapshot'); + +function isBuildingSnapshot() { + // For now this is the only way to build a snapshot. + return require('internal/options').getOptionValue('--build-snapshot'); +} + +function throwIfNotBuildingSnapshot() { + if (!isBuildingSnapshot()) { + throw new ERR_NOT_BUILDING_SNAPSHOT(); + } +} + +const deserializeCallbacks = []; +let deserializeCallbackIsSet = false; +function runDeserializeCallbacks() { + while (deserializeCallbacks.length > 0) { + const { 0: callback, 1: data } = deserializeCallbacks.shift(); + callback(data); + } +} + +function addDeserializeCallback(callback, data) { + throwIfNotBuildingSnapshot(); + validateFunction(callback, 'callback'); + if (!deserializeCallbackIsSet) { + // TODO(joyeecheung): when the main function handling is done in JS, + // the deserialize callbacks can always be invoked. For now only + // store it in C++ when it's actually used to avoid unnecessary + // C++ -> JS costs. + setDeserializeCallback(runDeserializeCallbacks); + deserializeCallbackIsSet = true; + } + deserializeCallbacks.push([callback, data]); +} + +const serializeCallbacks = []; +function runSerializeCallbacks() { + while (serializeCallbacks.length > 0) { + const { 0: callback, 1: data } = serializeCallbacks.shift(); + callback(data); + } + // Remove the hooks from the snapshot. + require('v8').startupSnapshot = undefined; +} + +function addSerializeCallback(callback, data) { + throwIfNotBuildingSnapshot(); + validateFunction(callback, 'callback'); + serializeCallbacks.push([callback, data]); +} + +function initializeCallbacks() { + // Only run the serialize callbacks in snapshot building mode, otherwise + // they throw. + if (isBuildingSnapshot()) { + setSerializeCallback(runSerializeCallbacks); + } +} + +let deserializeMainIsSet = false; +function setDeserializeMainFunction(callback, data) { + throwIfNotBuildingSnapshot(); + // TODO(joyeecheung): In lib/internal/bootstrap/node.js, create a default + // main function to run the lib/internal/main scripts and make sure that + // the main function set in the snapshot building process takes precedence. + validateFunction(callback, 'callback'); + if (deserializeMainIsSet) { + throw new ERR_DUPLICATE_STARTUP_SNAPSHOT_MAIN_FUNCTION(); + } + deserializeMainIsSet = true; + + _setDeserializeMainFunction(function deserializeMain() { + const { + prepareMainThreadExecution + } = require('internal/bootstrap/pre_execution'); + + // This should be in sync with run_main_module.js until we make that + // a built-in main function. + prepareMainThreadExecution(true); + markBootstrapComplete(); + callback(data); + }); +} + +module.exports = { + initializeCallbacks, + runDeserializeCallbacks, + // Exposed to require('v8').startupSnapshot + namespace: { + addDeserializeCallback, + addSerializeCallback, + setDeserializeMainFunction, + isBuildingSnapshot + } +}; diff --git a/lib/internal/validators.js b/lib/internal/validators.js index 9fed5b363db..0a90fd865b1 100644 --- a/lib/internal/validators.js +++ b/lib/internal/validators.js @@ -6,10 +6,12 @@ const { ArrayPrototypeJoin, ArrayPrototypeMap, NumberIsInteger, + NumberIsNaN, NumberMAX_SAFE_INTEGER, NumberMIN_SAFE_INTEGER, NumberParseInt, - RegExpPrototypeTest, + ObjectPrototypeHasOwnProperty, + RegExpPrototypeExec, String, StringPrototypeToUpperCase, StringPrototypeTrim, @@ -33,10 +35,18 @@ const { } = require('internal/util/types'); const { signals } = internalBinding('constants').os; +/** + * @param {*} value + * @returns {boolean} + */ function isInt32(value) { return value === (value | 0); } +/** + * @param {*} value + * @returns {boolean} + */ function isUint32(value) { return value === (value >>> 0); } @@ -59,16 +69,26 @@ const modeDesc = 'must be a 32-bit unsigned integer or an octal string'; function parseFileMode(value, name, def) { value ??= def; if (typeof value === 'string') { - if (!RegExpPrototypeTest(octalReg, value)) { + if (RegExpPrototypeExec(octalReg, value) === null) { throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc); } value = NumberParseInt(value, 8); } - validateInt32(value, name, 0, 2 ** 32 - 1); + validateUint32(value, name); return value; } +/** + * @callback validateInteger + * @param {*} value + * @param {string} name + * @param {number} [min] + * @param {number} [max] + * @returns {asserts value is number} + */ + +/** @type {validateInteger} */ const validateInteger = hideStackFrames( (value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => { if (typeof value !== 'number') @@ -80,17 +100,24 @@ const validateInteger = hideStackFrames( } ); +/** + * @callback validateInt32 + * @param {*} value + * @param {string} name + * @param {number} [min] + * @param {number} [max] + * @returns {asserts value is number} + */ + +/** @type {validateInt32} */ const validateInt32 = hideStackFrames( (value, name, min = -2147483648, max = 2147483647) => { // The defaults for min and max correspond to the limits of 32-bit integers. - if (!isInt32(value)) { - if (typeof value !== 'number') { - throw new ERR_INVALID_ARG_TYPE(name, 'number', value); - } - if (!NumberIsInteger(value)) { - throw new ERR_OUT_OF_RANGE(name, 'an integer', value); - } - throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); + if (typeof value !== 'number') { + throw new ERR_INVALID_ARG_TYPE(name, 'number', value); + } + if (!NumberIsInteger(value)) { + throw new ERR_OUT_OF_RANGE(name, 'an integer', value); } if (value < min || value > max) { throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); @@ -98,33 +125,75 @@ const validateInt32 = hideStackFrames( } ); -const validateUint32 = hideStackFrames((value, name, positive) => { - if (!isUint32(value)) { - if (typeof value !== 'number') { - throw new ERR_INVALID_ARG_TYPE(name, 'number', value); - } - if (!NumberIsInteger(value)) { - throw new ERR_OUT_OF_RANGE(name, 'an integer', value); - } - const min = positive ? 1 : 0; - // 2 ** 32 === 4294967296 - throw new ERR_OUT_OF_RANGE(name, `>= ${min} && < 4294967296`, value); +/** + * @callback validateUint32 + * @param {*} value + * @param {string} name + * @param {number|boolean} [positive=false] + * @returns {asserts value is number} + */ + +/** @type {validateUint32} */ +const validateUint32 = hideStackFrames((value, name, positive = false) => { + if (typeof value !== 'number') { + throw new ERR_INVALID_ARG_TYPE(name, 'number', value); + } + if (!NumberIsInteger(value)) { + throw new ERR_OUT_OF_RANGE(name, 'an integer', value); } - if (positive && value === 0) { - throw new ERR_OUT_OF_RANGE(name, '>= 1 && < 4294967296', value); + const min = positive ? 1 : 0; + // 2 ** 32 === 4294967296 + const max = 4_294_967_295; + if (value < min || value > max) { + throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); } }); +/** + * @callback validateString + * @param {*} value + * @param {string} name + * @returns {asserts value is string} + */ + +/** @type {validateString} */ function validateString(value, name) { if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value); } -function validateNumber(value, name) { +/** + * @callback validateNumber + * @param {*} value + * @param {string} name + * @param {number} [min] + * @param {number} [max] + * @returns {asserts value is number} + */ + +/** @type {validateNumber} */ +function validateNumber(value, name, min = undefined, max) { if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value); + + if ((min != null && value < min) || (max != null && value > max) || + ((min != null || max != null) && NumberIsNaN(value))) { + throw new ERR_OUT_OF_RANGE( + name, + `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`, + value); + } } +/** + * @callback validateOneOf + * @template T + * @param {T} value + * @param {string} name + * @param {T[]} oneOf + */ + +/** @type {validateOneOf} */ const validateOneOf = hideStackFrames((value, name, oneOf) => { if (!ArrayPrototypeIncludes(oneOf, value)) { const allowed = ArrayPrototypeJoin( @@ -136,13 +205,28 @@ const validateOneOf = hideStackFrames((value, name, oneOf) => { } }); +/** + * @callback validateBoolean + * @param {*} value + * @param {string} name + * @returns {asserts value is boolean} + */ + +/** @type {validateBoolean} */ function validateBoolean(value, name) { if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value); } +function getOwnPropertyValueOrDefault(options, key, defaultValue) { + return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? + defaultValue : + options[key]; +} + /** - * @param {unknown} value + * @callback validateObject + * @param {*} value * @param {string} name * @param {{ * allowArray?: boolean, @@ -150,12 +234,13 @@ function validateBoolean(value, name) { * nullable?: boolean * }} [options] */ + +/** @type {validateObject} */ const validateObject = hideStackFrames( - (value, name, options) => { - const useDefaultOptions = options == null; - const allowArray = useDefaultOptions ? false : options.allowArray; - const allowFunction = useDefaultOptions ? false : options.allowFunction; - const nullable = useDefaultOptions ? false : options.nullable; + (value, name, options = null) => { + const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false); + const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false); + const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false); if ((!nullable && value === null) || (!allowArray && ArrayIsArray(value)) || (typeof value !== 'object' && ( @@ -165,6 +250,15 @@ const validateObject = hideStackFrames( } }); +/** + * @callback validateArray + * @param {*} value + * @param {string} name + * @param {number} [minLength] + * @returns {asserts value is any[]} + */ + +/** @type {validateArray} */ const validateArray = hideStackFrames((value, name, minLength = 0) => { if (!ArrayIsArray(value)) { throw new ERR_INVALID_ARG_TYPE(name, 'Array', value); @@ -175,6 +269,42 @@ const validateArray = hideStackFrames((value, name, minLength = 0) => { } }); +/** + * @callback validateStringArray + * @param {*} value + * @param {string} name + * @returns {asserts value is string[]} + */ + +/** @type {validateStringArray} */ +function validateStringArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + validateString(value[i], `${name}[${i}]`); + } +} + +/** + * @callback validateBooleanArray + * @param {*} value + * @param {string} name + * @returns {asserts value is boolean[]} + */ + +/** @type {validateBooleanArray} */ +function validateBooleanArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + validateBoolean(value[i], `${name}[${i}]`); + } +} + +// eslint-disable-next-line jsdoc/require-returns-check +/** + * @param {*} signal + * @param {string} [name='signal'] + * @returns {asserts signal is keyof signals} + */ function validateSignalName(signal, name = 'signal') { validateString(signal, name); @@ -188,6 +318,14 @@ function validateSignalName(signal, name = 'signal') { } } +/** + * @callback validateBuffer + * @param {*} buffer + * @param {string} [name='buffer'] + * @returns {asserts buffer is ArrayBufferView} + */ + +/** @type {validateBuffer} */ const validateBuffer = hideStackFrames((buffer, name = 'buffer') => { if (!isArrayBufferView(buffer)) { throw new ERR_INVALID_ARG_TYPE(name, @@ -196,6 +334,10 @@ const validateBuffer = hideStackFrames((buffer, name = 'buffer') => { } }); +/** + * @param {string} data + * @param {string} encoding + */ function validateEncoding(data, encoding) { const normalizedEncoding = normalizeEncoding(encoding); const length = data.length; @@ -206,8 +348,14 @@ function validateEncoding(data, encoding) { } } -// Check that the port number is not NaN when coerced to a number, -// is an integer and that it falls within the legal range of port numbers. +/** + * Check that the port number is not NaN when coerced to a number, + * is an integer and that it falls within the legal range of port numbers. + * @param {*} port + * @param {string} [name='Port'] + * @param {boolean} [allowZero=true] + * @returns {number} + */ function validatePort(port, name = 'Port', allowZero = true) { if ((typeof port !== 'number' && typeof port !== 'string') || (typeof port === 'string' && StringPrototypeTrim(port).length === 0) || @@ -224,6 +372,13 @@ const validateCallback = hideStackFrames((callback) => { throw new ERR_INVALID_CALLBACK(callback); }); +/** + * @callback validateAbortSignal + * @param {*} signal + * @param {string} name + */ + +/** @type {validateAbortSignal} */ const validateAbortSignal = hideStackFrames((signal, name) => { if (signal !== undefined && (signal === null || @@ -233,28 +388,67 @@ const validateAbortSignal = hideStackFrames((signal, name) => { } }); +/** + * @callback validateFunction + * @param {*} value + * @param {string} name + * @returns {asserts value is Function} + */ + +/** @type {validateFunction} */ const validateFunction = hideStackFrames((value, name) => { if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value); }); +/** + * @callback validatePlainFunction + * @param {*} value + * @param {string} name + * @returns {asserts value is Function} + */ + +/** @type {validatePlainFunction} */ const validatePlainFunction = hideStackFrames((value, name) => { if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value); }); +/** + * @callback validateUndefined + * @param {*} value + * @param {string} name + * @returns {asserts value is undefined} + */ + +/** @type {validateUndefined} */ const validateUndefined = hideStackFrames((value, name) => { if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value); }); +/** + * @template T + * @param {T} value + * @param {string} name + * @param {T[]} union + */ +function validateUnion(value, name, union) { + if (!ArrayPrototypeIncludes(union, value)) { + throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value); + } +} + module.exports = { isInt32, isUint32, parseFileMode, validateArray, + validateStringArray, + validateBooleanArray, validateBoolean, validateBuffer, + validateCallback, validateEncoding, validateFunction, validateInt32, @@ -268,6 +462,6 @@ module.exports = { validateString, validateUint32, validateUndefined, - validateCallback, + validateUnion, validateAbortSignal, }; diff --git a/lib/internal/vm/module.js b/lib/internal/vm/module.js index 911b8f4426e..fe72c16a976 100644 --- a/lib/internal/vm/module.js +++ b/lib/internal/vm/module.js @@ -10,8 +10,8 @@ const { ObjectDefineProperty, ObjectGetPrototypeOf, ObjectSetPrototypeOf, - PromiseAll, ReflectApply, + SafePromiseAll, SafeWeakMap, Symbol, SymbolToStringTag, @@ -24,9 +24,10 @@ const { isArrayBufferView, } = require('internal/util/types'); const { - getConstructorOf, customInspectSymbol, emitExperimentalWarning, + getConstructorOf, + kEmptyObject, } = require('internal/util'); const { ERR_INVALID_ARG_TYPE, @@ -34,7 +35,7 @@ const { ERR_VM_MODULE_ALREADY_LINKED, ERR_VM_MODULE_DIFFERENT_CONTEXT, ERR_VM_MODULE_CANNOT_CREATE_CACHED_DATA, - ERR_VM_MODULE_LINKING_ERRORED, + ERR_VM_MODULE_LINK_FAILURE, ERR_VM_MODULE_NOT_MODULE, ERR_VM_MODULE_STATUS, } = require('internal/errors').codes; @@ -112,6 +113,7 @@ class Module { } else { identifier = `${defaultModuleName}(0)`; ObjectDefineProperty(context, kPerContextModuleId, { + __proto__: null, value: 1, writable: true, enumerable: false, @@ -198,7 +200,7 @@ class Module { this[kWrap].instantiate(); } - async evaluate(options = {}) { + async evaluate(options = kEmptyObject) { if (this[kWrap] === undefined) { throw new ERR_VM_MODULE_NOT_MODULE(); } @@ -239,6 +241,7 @@ class Module { ObjectSetPrototypeOf(o, ObjectGetPrototypeOf(this)); ObjectDefineProperty(o, SymbolToStringTag, { + __proto__: null, value: constructor.name, configurable: true }); @@ -256,7 +259,7 @@ class SourceTextModule extends Module { #error = kNoError; #statusOverride; - constructor(sourceText, options = {}) { + constructor(sourceText, options = kEmptyObject) { validateString(sourceText, 'sourceText'); validateObject(options, 'options'); @@ -317,9 +320,7 @@ class SourceTextModule extends Module { throw new ERR_VM_MODULE_DIFFERENT_CONTEXT(); } if (module.status === 'errored') { - // TODO(devsnek): replace with ERR_VM_MODULE_LINK_FAILURE - // and error cause proposal. - throw new ERR_VM_MODULE_LINKING_ERRORED(); + throw new ERR_VM_MODULE_LINK_FAILURE(`request for '${identifier}' resolved to an errored module`, module.error); } if (module.status === 'unlinked') { await module[kLink](linker); @@ -329,7 +330,7 @@ class SourceTextModule extends Module { try { if (promises !== undefined) { - await PromiseAll(promises); + await SafePromiseAll(promises); } } catch (e) { this.#error = e; @@ -387,7 +388,7 @@ class SourceTextModule extends Module { } class SyntheticModule extends Module { - constructor(exportNames, evaluateCallback, options = {}) { + constructor(exportNames, evaluateCallback, options = kEmptyObject) { if (!ArrayIsArray(exportNames) || ArrayPrototypeSome(exportNames, (e) => typeof e !== 'string')) { throw new ERR_INVALID_ARG_TYPE('exportNames', diff --git a/lib/internal/watch_mode/files_watcher.js b/lib/internal/watch_mode/files_watcher.js new file mode 100644 index 00000000000..6c6c0f27fd8 --- /dev/null +++ b/lib/internal/watch_mode/files_watcher.js @@ -0,0 +1,133 @@ +'use strict'; + +const { + SafeMap, + SafeSet, + StringPrototypeStartsWith, +} = primordials; + +const { validateNumber, validateOneOf } = require('internal/validators'); +const { kEmptyObject } = require('internal/util'); +const { TIMEOUT_MAX } = require('internal/timers'); + +const EventEmitter = require('events'); +const { watch } = require('fs'); +const { fileURLToPath } = require('url'); +const { resolve, dirname } = require('path'); +const { setTimeout } = require('timers'); + + +const supportsRecursiveWatching = process.platform === 'win32' || + process.platform === 'darwin'; + +class FilesWatcher extends EventEmitter { + #watchers = new SafeMap(); + #filteredFiles = new SafeSet(); + #throttling = new SafeSet(); + #throttle; + #mode; + + constructor({ throttle = 500, mode = 'filter' } = kEmptyObject) { + super(); + + validateNumber(throttle, 'options.throttle', 0, TIMEOUT_MAX); + validateOneOf(mode, 'options.mode', ['filter', 'all']); + this.#throttle = throttle; + this.#mode = mode; + } + + #isPathWatched(path) { + if (this.#watchers.has(path)) { + return true; + } + + for (const { 0: watchedPath, 1: watcher } of this.#watchers.entries()) { + if (watcher.recursive && StringPrototypeStartsWith(path, watchedPath)) { + return true; + } + } + + return false; + } + + #removeWatchedChildren(path) { + for (const { 0: watchedPath, 1: watcher } of this.#watchers.entries()) { + if (path !== watchedPath && StringPrototypeStartsWith(watchedPath, path)) { + this.#unwatch(watcher); + this.#watchers.delete(watchedPath); + } + } + } + + #unwatch(watcher) { + watcher.handle.removeAllListeners(); + watcher.handle.close(); + } + + #onChange(trigger) { + if (this.#throttling.has(trigger)) { + return; + } + if (this.#mode === 'filter' && !this.#filteredFiles.has(trigger)) { + return; + } + this.#throttling.add(trigger); + this.emit('changed'); + setTimeout(() => this.#throttling.delete(trigger), this.#throttle).unref(); + } + + get watchedPaths() { + return [...this.#watchers.keys()]; + } + + watchPath(path, recursive = true) { + if (this.#isPathWatched(path)) { + return; + } + const watcher = watch(path, { recursive }); + watcher.on('change', (eventType, fileName) => this + .#onChange(recursive ? resolve(path, fileName) : path)); + this.#watchers.set(path, { handle: watcher, recursive }); + if (recursive) { + this.#removeWatchedChildren(path); + } + } + + filterFile(file) { + if (supportsRecursiveWatching) { + this.watchPath(dirname(file)); + } else { + // Having multiple FSWatcher's seems to be slower + // than a single recursive FSWatcher + this.watchPath(file, false); + } + this.#filteredFiles.add(file); + } + watchChildProcessModules(child) { + if (this.#mode !== 'filter') { + return; + } + child.on('message', (message) => { + try { + if (message['watch:require']) { + this.filterFile(message['watch:require']); + } + if (message['watch:import']) { + this.filterFile(fileURLToPath(message['watch:import'])); + } + } catch { + // Failed watching file. ignore + } + }); + } + clearFileFilters() { + this.#filteredFiles.clear(); + } + clear() { + this.#watchers.forEach(this.#unwatch); + this.#watchers.clear(); + this.#filteredFiles.clear(); + } +} + +module.exports = { FilesWatcher }; diff --git a/lib/internal/webstreams/adapters.js b/lib/internal/webstreams/adapters.js index 1058c1c0356..a8b13b39aac 100644 --- a/lib/internal/webstreams/adapters.js +++ b/lib/internal/webstreams/adapters.js @@ -1,11 +1,10 @@ 'use strict'; const { - ArrayPrototypeMap, - PromiseAll, PromisePrototypeThen, - PromisePrototypeFinally, PromiseResolve, + SafePromiseAll, + SafePromisePrototypeFinally, Uint8Array, } = primordials; @@ -55,6 +54,7 @@ const { const { createDeferredPromise, + kEmptyObject, } = require('internal/util'); const { @@ -164,7 +164,7 @@ function newWritableStreamFromStreamWritable(streamWritable) { async write(chunk) { if (streamWritable.writableNeedDrain || !streamWritable.write(chunk)) { backpressurePromise = createDeferredPromise(); - return PromisePrototypeFinally( + return SafePromisePrototypeFinally( backpressurePromise.promise, () => { backpressurePromise = undefined; }); @@ -198,7 +198,7 @@ function newWritableStreamFromStreamWritable(streamWritable) { * }} [options] * @returns {Writable} */ -function newStreamWritableFromWritableStream(writableStream, options = {}) { +function newStreamWritableFromWritableStream(writableStream, options = kEmptyObject) { if (!isWritableStream(writableStream)) { throw new ERR_INVALID_ARG_TYPE( 'writableStream', @@ -245,10 +245,9 @@ function newStreamWritableFromWritableStream(writableStream, options = {}) { writer.ready, () => { return PromisePrototypeThen( - PromiseAll( - ArrayPrototypeMap( - chunks, - (data) => writer.write(data.chunk))), + SafePromiseAll( + chunks, + (data) => writer.write(data.chunk)), done, done); }, @@ -441,7 +440,7 @@ function newReadableStreamFromStreamReadable(streamReadable) { * }} [options] * @returns {Readable} */ -function newStreamReadableFromReadableStream(readableStream, options = {}) { +function newStreamReadableFromReadableStream(readableStream, options = kEmptyObject) { if (!isReadableStream(readableStream)) { throw new ERR_INVALID_ARG_TYPE( 'readableStream', @@ -585,7 +584,7 @@ function newReadableWritablePairFromDuplex(duplex) { * }} [options] * @returns {Duplex} */ -function newStreamDuplexFromReadableWritablePair(pair = {}, options = {}) { +function newStreamDuplexFromReadableWritablePair(pair = kEmptyObject, options = kEmptyObject) { validateObject(pair, 'pair'); const { readable: readableStream, @@ -651,10 +650,9 @@ function newStreamDuplexFromReadableWritablePair(pair = {}, options = {}) { writer.ready, () => { return PromisePrototypeThen( - PromiseAll( - ArrayPrototypeMap( - chunks, - (data) => writer.write(data.chunk))), + SafePromiseAll( + chunks, + (data) => writer.write(data.chunk)), done, done); }, @@ -750,7 +748,7 @@ function newStreamDuplexFromReadableWritablePair(pair = {}, options = {}) { if (!writableClosed || !readableClosed) { PromisePrototypeThen( - PromiseAll([ + SafePromiseAll([ closeWriter(), closeReader(), ]), @@ -876,7 +874,7 @@ function newWritableStreamFromStreamBase(streamBase, strategy) { * @param {QueuingStrategy} strategy * @returns {ReadableStream} */ -function newReadableStreamFromStreamBase(streamBase, strategy, options = {}) { +function newReadableStreamFromStreamBase(streamBase, strategy, options = kEmptyObject) { validateObject(streamBase, 'streamBase'); validateObject(options, 'options'); diff --git a/lib/internal/webstreams/encoding.js b/lib/internal/webstreams/encoding.js index 9cc76fae2ce..233a09a216d 100644 --- a/lib/internal/webstreams/encoding.js +++ b/lib/internal/webstreams/encoding.js @@ -24,6 +24,7 @@ const { const { customInspectSymbol: kInspect, + kEmptyObject, kEnumerableProperty, } = require('internal/util'); @@ -114,7 +115,7 @@ class TextDecoderStream { * ignoreBOM? : boolean, * }} [options] */ - constructor(encoding = 'utf-8', options = {}) { + constructor(encoding = 'utf-8', options = kEmptyObject) { this[kType] = 'TextDecoderStream'; this[kHandle] = new TextDecoder(encoding, options); this[kTransform] = new TransformStream({ diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index bea1084bdd7..28f71293767 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -16,12 +16,11 @@ const { ObjectDefineProperties, ObjectSetPrototypeOf, Promise, - PromisePrototypeCatch, PromisePrototypeThen, PromiseResolve, PromiseReject, - PromiseAll, ReflectConstruct, + SafePromiseAll, Symbol, SymbolAsyncIterator, SymbolToStringTag, @@ -50,6 +49,7 @@ const { const { createDeferredPromise, customInspectSymbol: kInspect, + kEmptyObject, kEnumerableProperty, } = require('internal/util'); @@ -93,6 +93,7 @@ const { ArrayBufferViewGetByteOffset, ArrayBufferGetByteLength, AsyncIterator, + cloneAsUint8Array, copyArrayBuffer, customInspect, dequeueValue, @@ -206,11 +207,12 @@ class ReadableStream { * @param {UnderlyingSource} [source] * @param {QueuingStrategy} [strategy] */ - constructor(source = {}, strategy = {}) { + constructor(source = {}, strategy = kEmptyObject) { if (source === null) throw new ERR_INVALID_ARG_VALUE('source', 'Object', source); this[kState] = { disturbed: false, + reader: undefined, state: 'readable', storedError: undefined, stream: undefined, @@ -296,7 +298,7 @@ class ReadableStream { * }} [options] * @returns {ReadableStreamReader} */ - getReader(options = {}) { + getReader(options = kEmptyObject) { if (!isReadableStream(this)) throw new ERR_INVALID_THIS('ReadableStream'); validateObject(options, 'options', { nullable: true, allowFunction: true }); @@ -315,7 +317,7 @@ class ReadableStream { * @param {StreamPipeOptions} [options] * @returns {ReadableStream} */ - pipeThrough(transform, options = {}) { + pipeThrough(transform, options = kEmptyObject) { if (!isReadableStream(this)) throw new ERR_INVALID_THIS('ReadableStream'); const readable = transform?.readable; @@ -365,7 +367,7 @@ class ReadableStream { * @param {StreamPipeOptions} [options] * @returns {Promise} */ - pipeTo(destination, options = {}) { + pipeTo(destination, options = kEmptyObject) { try { if (!isReadableStream(this)) throw new ERR_INVALID_THIS('ReadableStream'); @@ -416,7 +418,7 @@ class ReadableStream { * }} [options] * @returns {AsyncIterable} */ - values(options = {}) { + values(options = kEmptyObject) { if (!isReadableStream(this)) throw new ERR_INVALID_THIS('ReadableStream'); validateObject(options, 'options'); @@ -585,6 +587,7 @@ class ReadableStream { ObjectDefineProperties(ReadableStream.prototype, { [SymbolAsyncIterator]: { + __proto__: null, configurable: true, enumerable: false, writable: true, @@ -1102,7 +1105,6 @@ class ReadableByteStreamController { chunk); } const chunkByteLength = ArrayBufferViewGetByteLength(chunk); - const chunkByteOffset = ArrayBufferViewGetByteOffset(chunk); const chunkBuffer = ArrayBufferViewGetBuffer(chunk); const chunkBufferByteLength = ArrayBufferGetByteLength(chunkBuffer); if (chunkByteLength === 0 || chunkBufferByteLength === 0) { @@ -1113,11 +1115,7 @@ class ReadableByteStreamController { throw new ERR_INVALID_STATE.TypeError('Controller is already closed'); if (this[kState].stream[kState].state !== 'readable') throw new ERR_INVALID_STATE.TypeError('ReadableStream is already closed'); - readableByteStreamControllerEnqueue( - this, - chunkBuffer, - chunkByteLength, - chunkByteOffset); + readableByteStreamControllerEnqueue(this, chunk); } /** @@ -1179,9 +1177,9 @@ function createTeeReadableStream(start, pull, cancel) { setupReadableStreamDefaultControllerFromSource( this, ObjectCreate(null, { - start: { value: start }, - pull: { value: pull }, - cancel: { value: cancel } + start: { __proto__: null, value: start }, + pull: { __proto__: null, value: pull }, + cancel: { __proto__: null, value: cancel } }), 1, () => 1); @@ -1318,7 +1316,7 @@ function readableStreamPipeTo( } shutdownWithAnAction( - async () => PromiseAll(actions.map((action) => action())), + () => SafePromiseAll(actions, (action) => action()), true, error); } @@ -1327,7 +1325,7 @@ function readableStreamPipeTo( if (stream[kState].state === 'errored') action(stream[kState].storedError); else - PromisePrototypeCatch(promise, action); + PromisePrototypeThen(promise, undefined, action); } function watchClosed(stream, promise, action) { @@ -1415,6 +1413,13 @@ function readableStreamPipeTo( } function readableStreamTee(stream, cloneForBranch2) { + if (isReadableByteStreamController(stream[kState].controller)) { + return readableByteStreamTee(stream); + } + return readableStreamDefaultTee(stream, cloneForBranch2); +} + +function readableStreamDefaultTee(stream, cloneForBranch2) { const reader = new ReadableStreamDefaultReader(stream); let reading = false; let canceled1 = false; @@ -1496,8 +1501,9 @@ function readableStreamTee(stream, cloneForBranch2) { branch2 = createTeeReadableStream(nonOpStart, pullAlgorithm, cancel2Algorithm); - PromisePrototypeCatch( + PromisePrototypeThen( reader[kState].close.promise, + undefined, (error) => { readableStreamDefaultControllerError(branch1[kState].controller, error); readableStreamDefaultControllerError(branch2[kState].controller, error); @@ -1508,6 +1514,282 @@ function readableStreamTee(stream, cloneForBranch2) { return [branch1, branch2]; } +function readableByteStreamTee(stream) { + assert(isReadableStream(stream)); + assert(isReadableByteStreamController(stream[kState].controller)); + + let reader = new ReadableStreamDefaultReader(stream); + let reading = false; + let readAgainForBranch1 = false; + let readAgainForBranch2 = false; + let canceled1 = false; + let canceled2 = false; + let reason1; + let reason2; + let branch1; + let branch2; + const cancelDeferred = createDeferredPromise(); + + function forwardReaderError(thisReader) { + PromisePrototypeThen( + thisReader[kState].close.promise, + undefined, + (error) => { + if (thisReader !== reader) { + return; + } + readableStreamDefaultControllerError(branch1[kState].controller, error); + readableStreamDefaultControllerError(branch2[kState].controller, error); + if (!canceled1 || !canceled2) { + cancelDeferred.resolve(); + } + } + ); + } + + function pullWithDefaultReader() { + if (isReadableStreamBYOBReader(reader)) { + reader = new ReadableStreamDefaultReader(stream); + forwardReaderError(reader); + } + + const readRequest = { + [kChunk](chunk) { + queueMicrotask(() => { + readAgainForBranch1 = false; + readAgainForBranch2 = false; + const chunk1 = chunk; + let chunk2 = chunk; + + if (!canceled1 && !canceled2) { + try { + chunk2 = cloneAsUint8Array(chunk); + } catch (error) { + readableByteStreamControllerError( + branch1[kState].controller, + error + ); + readableByteStreamControllerError( + branch2[kState].controller, + error + ); + cancelDeferred.resolve(readableStreamCancel(stream, error)); + return; + } + } + if (!canceled1) { + readableByteStreamControllerEnqueue( + branch1[kState].controller, + chunk1 + ); + } + if (!canceled2) { + readableByteStreamControllerEnqueue( + branch2[kState].controller, + chunk2 + ); + } + reading = false; + + if (readAgainForBranch1) { + pull1Algorithm(); + } else if (readAgainForBranch2) { + pull2Algorithm(); + } + }); + }, + [kClose]() { + reading = false; + + if (!canceled1) { + readableByteStreamControllerClose(branch1[kState].controller); + } + if (!canceled2) { + readableByteStreamControllerClose(branch2[kState].controller); + } + if (branch1[kState].controller[kState].pendingPullIntos.length > 0) { + readableByteStreamControllerRespond(branch1[kState].controller, 0); + } + if (branch2[kState].controller[kState].pendingPullIntos.length > 0) { + readableByteStreamControllerRespond(branch2[kState].controller, 0); + } + if (!canceled1 || !canceled2) { + cancelDeferred.resolve(); + } + }, + [kError]() { + reading = false; + }, + }; + + readableStreamDefaultReaderRead(reader, readRequest); + } + + function pullWithBYOBReader(view, forBranch2) { + if (isReadableStreamDefaultReader(reader)) { + reader = new ReadableStreamBYOBReader(stream); + forwardReaderError(reader); + } + + const byobBranch = forBranch2 === true ? branch2 : branch1; + const otherBranch = forBranch2 === false ? branch2 : branch1; + const readIntoRequest = { + [kChunk](chunk) { + queueMicrotask(() => { + readAgainForBranch1 = false; + readAgainForBranch2 = false; + const byobCanceled = forBranch2 === true ? canceled2 : canceled1; + const otherCanceled = forBranch2 === false ? canceled2 : canceled1; + + if (!otherCanceled) { + let clonedChunk; + + try { + clonedChunk = cloneAsUint8Array(chunk); + } catch (error) { + readableByteStreamControllerError( + byobBranch[kState].controller, + error + ); + readableByteStreamControllerError( + otherBranch[kState].controller, + error + ); + cancelDeferred.resolve(readableStreamCancel(stream, error)); + return; + } + if (!byobCanceled) { + readableByteStreamControllerRespondWithNewView( + byobBranch[kState].controller, + chunk + ); + } + + readableByteStreamControllerEnqueue( + otherBranch[kState].controller, + clonedChunk + ); + } else if (!byobCanceled) { + readableByteStreamControllerRespondWithNewView( + byobBranch[kState].controller, + chunk + ); + } + reading = false; + + if (readAgainForBranch1) { + pull1Algorithm(); + } else if (readAgainForBranch2) { + pull2Algorithm(); + } + }); + }, + [kClose](chunk) { + reading = false; + + const byobCanceled = forBranch2 === true ? canceled2 : canceled1; + const otherCanceled = forBranch2 === false ? canceled2 : canceled1; + + if (!byobCanceled) { + readableByteStreamControllerClose(byobBranch[kState].controller); + } + if (!otherCanceled) { + readableByteStreamControllerClose(otherBranch[kState].controller); + } + if (chunk !== undefined) { + if (!byobCanceled) { + readableByteStreamControllerRespondWithNewView( + byobBranch[kState].controller, + chunk + ); + } + if ( + !otherCanceled && + otherBranch[kState].controller[kState].pendingPullIntos.length > 0 + ) { + readableByteStreamControllerRespond( + otherBranch[kState].controller, + 0 + ); + } + } + if (!byobCanceled || !otherCanceled) { + cancelDeferred.resolve(); + } + }, + [kError]() { + reading = false; + }, + }; + readableStreamBYOBReaderRead(reader, view, readIntoRequest); + } + + function pull1Algorithm() { + if (reading) { + readAgainForBranch1 = true; + return PromiseResolve(); + } + reading = true; + + const byobRequest = branch1[kState].controller.byobRequest; + if (byobRequest === null) { + pullWithDefaultReader(); + } else { + pullWithBYOBReader(byobRequest[kState].view, false); + } + return PromiseResolve(); + } + + function pull2Algorithm() { + if (reading) { + readAgainForBranch2 = true; + return PromiseResolve(); + } + reading = true; + + const byobRequest = branch2[kState].controller.byobRequest; + if (byobRequest === null) { + pullWithDefaultReader(); + } else { + pullWithBYOBReader(byobRequest[kState].view, true); + } + return PromiseResolve(); + } + + function cancel1Algorithm(reason) { + canceled1 = true; + reason1 = reason; + if (canceled2) { + cancelDeferred.resolve(readableStreamCancel(stream, [reason1, reason2])); + } + return cancelDeferred.promise; + } + + function cancel2Algorithm(reason) { + canceled2 = true; + reason2 = reason; + if (canceled1) { + cancelDeferred.resolve(readableStreamCancel(stream, [reason1, reason2])); + } + return cancelDeferred.promise; + } + + branch1 = new ReadableStream({ + type: 'bytes', + pull: pull1Algorithm, + cancel: cancel1Algorithm, + }); + branch2 = new ReadableStream({ + type: 'bytes', + pull: pull2Algorithm, + cancel: cancel2Algorithm, + }); + + forwardReaderError(reader); + + return [branch1, branch2]; +} + function readableByteStreamControllerConvertPullIntoDescriptor(desc) { const { buffer, @@ -2271,11 +2553,7 @@ function readableByteStreamControllerFillHeadPullIntoDescriptor( desc.bytesFilled += size; } -function readableByteStreamControllerEnqueue( - controller, - buffer, - byteLength, - byteOffset) { +function readableByteStreamControllerEnqueue(controller, chunk) { const { closeRequested, pendingPullIntos, @@ -2283,6 +2561,10 @@ function readableByteStreamControllerEnqueue( stream, } = controller[kState]; + const buffer = ArrayBufferViewGetBuffer(chunk); + const byteOffset = ArrayBufferViewGetByteOffset(chunk); + const byteLength = ArrayBufferViewGetByteLength(chunk); + if (closeRequested || stream[kState].state !== 'readable') return; diff --git a/lib/internal/webstreams/transfer.js b/lib/internal/webstreams/transfer.js index 985d7e86738..4467d90bb5a 100644 --- a/lib/internal/webstreams/transfer.js +++ b/lib/internal/webstreams/transfer.js @@ -73,16 +73,19 @@ class CloneableDOMException extends DOMException { [kDeserialize]({ message, name, code }) { ObjectDefineProperties(this, { message: { + __proto__: null, configurable: true, enumerable: true, get() { return message; }, }, name: { + __proto__: null, configurable: true, enumerable: true, get() { return name; }, }, code: { + __proto__: null, configurable: true, enumerable: true, get() { return code; }, diff --git a/lib/internal/webstreams/transformstream.js b/lib/internal/webstreams/transformstream.js index 457c9eb8fb3..b7366fb1ba2 100644 --- a/lib/internal/webstreams/transformstream.js +++ b/lib/internal/webstreams/transformstream.js @@ -4,7 +4,6 @@ const { FunctionPrototypeBind, FunctionPrototypeCall, ObjectDefineProperties, - PromisePrototypeCatch, PromisePrototypeThen, PromiseResolve, ReflectConstruct, @@ -496,19 +495,17 @@ function transformStreamDefaultControllerError(controller, error) { transformStreamError(controller[kState].stream, error); } -function transformStreamDefaultControllerPerformTransform(controller, chunk) { - const transformPromise = - ensureIsPromise( +async function transformStreamDefaultControllerPerformTransform(controller, chunk) { + try { + return await ensureIsPromise( controller[kState].transformAlgorithm, controller, chunk, controller); - return PromisePrototypeCatch( - transformPromise, - (error) => { - transformStreamError(controller[kState].stream, error); - throw error; - }); + } catch (error) { + transformStreamError(controller[kState].stream, error); + throw error; + } } function transformStreamDefaultControllerTerminate(controller) { diff --git a/lib/internal/webstreams/util.js b/lib/internal/webstreams/util.js index 305064ba05a..3dd50827f29 100644 --- a/lib/internal/webstreams/util.js +++ b/lib/internal/webstreams/util.js @@ -2,6 +2,7 @@ const { ArrayBufferPrototype, + ArrayBufferPrototypeSlice, ArrayPrototypePush, ArrayPrototypeShift, AsyncIteratorPrototype, @@ -14,6 +15,7 @@ const { PromiseReject, ReflectGet, Symbol, + Uint8Array, } = primordials; const { @@ -49,11 +51,13 @@ const kType = Symbol('kType'); const AsyncIterator = ObjectCreate(AsyncIteratorPrototype, { next: { + __proto__: null, configurable: true, enumerable: true, writable: true, }, return: { + __proto__: null, configurable: true, enumerable: true, writable: true, @@ -109,6 +113,15 @@ function ArrayBufferGetByteLength(view) { return ReflectGet(ArrayBufferPrototype, 'byteLength', view); } +function cloneAsUint8Array(view) { + const buffer = ArrayBufferViewGetBuffer(view); + const byteOffset = ArrayBufferViewGetByteOffset(view); + const byteLength = ArrayBufferViewGetByteLength(view); + return new Uint8Array( + ArrayBufferPrototypeSlice(buffer, byteOffset, byteOffset + byteLength) + ); +} + function isBrandCheck(brand) { return (value) => { return value != null && @@ -213,6 +226,7 @@ module.exports = { ArrayBufferViewGetByteOffset, ArrayBufferGetByteLength, AsyncIterator, + cloneAsUint8Array, copyArrayBuffer, customInspect, dequeueValue, diff --git a/lib/internal/worker.js b/lib/internal/worker.js index 1d2cd8cefd2..75287e81446 100644 --- a/lib/internal/worker.js +++ b/lib/internal/worker.js @@ -13,7 +13,7 @@ const { Promise, PromiseResolve, ReflectApply, - RegExpPrototypeTest, + RegExpPrototypeExec, SafeArrayIterator, SafeMap, String, @@ -55,6 +55,7 @@ const { } = workerIo; const { deserializeError } = require('internal/error_serdes'); const { fileURLToPath, isURLInstance, pathToFileURL } = require('internal/url'); +const { kEmptyObject } = require('internal/util'); const { validateArray } = require('internal/validators'); const { @@ -86,6 +87,9 @@ let debug = require('internal/util/debuglog').debuglog('worker', (fn) => { debug = fn; }); +const dc = require('diagnostics_channel'); +const workerThreadsChannel = dc.channel('worker_threads'); + let cwdCounter; const environmentData = new SafeMap(); @@ -118,7 +122,7 @@ function assignEnvironmentData(data) { } class Worker extends EventEmitter { - constructor(filename, options = {}) { + constructor(filename, options = kEmptyObject) { super(); debug(`[${threadId}] create new worker`, filename, options); if (options.execArgv) @@ -157,7 +161,7 @@ class Worker extends EventEmitter { filename ); } else if (path.isAbsolute(filename) || - RegExpPrototypeTest(/^\.\.?[\\/]/, filename)) { + RegExpPrototypeExec(/^\.\.?[\\/]/, filename) !== null) { filename = path.resolve(filename); url = pathToFileURL(filename); } else { @@ -259,6 +263,11 @@ class Worker extends EventEmitter { this[kHandle].startThread(); process.nextTick(() => process.emit('worker', this)); + if (workerThreadsChannel.hasSubscribers) { + workerThreadsChannel.publish({ + worker: this, + }); + } } [kOnExit](code, customErr, customErrReason) { diff --git a/lib/internal/worker/io.js b/lib/internal/worker/io.js index a2d6fe42a32..a6e1725774d 100644 --- a/lib/internal/worker/io.js +++ b/lib/internal/worker/io.js @@ -13,12 +13,16 @@ const { ObjectGetOwnPropertyDescriptors, ObjectGetPrototypeOf, ObjectSetPrototypeOf, + ObjectValues, ReflectApply, Symbol, SymbolFor, } = primordials; -const { kEnumerableProperty } = require('internal/util'); +const { + kEmptyObject, + kEnumerableProperty, +} = require('internal/util'); const { handle_onclose: handleOnCloseSymbol, @@ -91,11 +95,18 @@ const messageTypes = { // We have to mess with the MessagePort prototype a bit, so that a) we can make // it inherit from NodeEventTarget, even though it is a C++ class, and b) we do // not provide methods that are not present in the Browser and not documented -// on our side (e.g. hasRef). +// on our side (e.g. stopMessagePort). +const messagePortPrototypePropertyDescriptors = ObjectGetOwnPropertyDescriptors(MessagePort.prototype); +const propertiesValues = ObjectValues(messagePortPrototypePropertyDescriptors); +for (let i = 0; i < propertiesValues.length; i++) { + // We want to use null-prototype objects to not rely on globally mutable + // %Object.prototype%. + ObjectSetPrototypeOf(propertiesValues[i], null); +} // Save a copy of the original set of methods as a shallow clone. const MessagePortPrototype = ObjectCreate( ObjectGetPrototypeOf(MessagePort.prototype), - ObjectGetOwnPropertyDescriptors(MessagePort.prototype)); + messagePortPrototypePropertyDescriptors); // Set up the new inheritance chain. ObjectSetPrototypeOf(MessagePort, NodeEventTarget); ObjectSetPrototypeOf(MessagePort.prototype, NodeEventTarget.prototype); @@ -103,6 +114,9 @@ ObjectSetPrototypeOf(MessagePort.prototype, NodeEventTarget.prototype); // changing the prototype of MessagePort.prototype implicitly removed them. MessagePort.prototype.ref = MessagePortPrototype.ref; MessagePort.prototype.unref = MessagePortPrototype.unref; +MessagePort.prototype.hasRef = function() { + return !!FunctionPrototypeCall(MessagePortPrototype.hasRef, this); +}; function validateMessagePort(port, name) { if (!checkMessagePort(port)) @@ -120,7 +134,7 @@ class MessageEvent extends Event { lastEventId = '', source = null, ports = [], - } = {}) { + } = kEmptyObject) { super(type); this[kData] = data; this[kOrigin] = `${origin}`; @@ -137,6 +151,7 @@ class MessageEvent extends Event { ObjectDefineProperties(MessageEvent.prototype, { data: { + __proto__: null, get() { if (!isMessageEvent(this)) throw new ERR_INVALID_THIS('MessageEvent'); @@ -147,6 +162,7 @@ ObjectDefineProperties(MessageEvent.prototype, { set: undefined, }, origin: { + __proto__: null, get() { if (!isMessageEvent(this)) throw new ERR_INVALID_THIS('MessageEvent'); @@ -157,6 +173,7 @@ ObjectDefineProperties(MessageEvent.prototype, { set: undefined, }, lastEventId: { + __proto__: null, get() { if (!isMessageEvent(this)) throw new ERR_INVALID_THIS('MessageEvent'); @@ -167,6 +184,7 @@ ObjectDefineProperties(MessageEvent.prototype, { set: undefined, }, source: { + __proto__: null, get() { if (!isMessageEvent(this)) throw new ERR_INVALID_THIS('MessageEvent'); @@ -177,6 +195,7 @@ ObjectDefineProperties(MessageEvent.prototype, { set: undefined, }, ports: { + __proto__: null, get() { if (!isMessageEvent(this)) throw new ERR_INVALID_THIS('MessageEvent'); @@ -193,6 +212,7 @@ ObjectDefineProperty( MessagePort.prototype, kCreateEvent, { + __proto__: null, value: function(data, type) { if (type !== 'message' && type !== 'messageerror') { return ReflectApply(originalCreateEvent, this, arguments); @@ -217,6 +237,7 @@ defineEventHandler(MessagePort.prototype, 'message'); defineEventHandler(MessagePort.prototype, 'messageerror'); ObjectDefineProperty(MessagePort.prototype, onInitSymbol, { + __proto__: null, enumerable: true, writable: false, value: oninit @@ -234,6 +255,7 @@ function onclose() { } ObjectDefineProperty(MessagePort.prototype, handleOnCloseSymbol, { + __proto__: null, enumerable: false, writable: false, value: onclose @@ -246,6 +268,7 @@ MessagePort.prototype.close = function(cb) { }; ObjectDefineProperty(MessagePort.prototype, inspect.custom, { + __proto__: null, enumerable: false, writable: false, value: function inspect() { // eslint-disable-line func-name-matching diff --git a/lib/internal/worker/js_transferable.js b/lib/internal/worker/js_transferable.js index 7bd6c8cafc3..337413f0258 100644 --- a/lib/internal/worker/js_transferable.js +++ b/lib/internal/worker/js_transferable.js @@ -5,6 +5,7 @@ const { ObjectGetOwnPropertyDescriptors, ObjectGetPrototypeOf, ObjectSetPrototypeOf, + ObjectValues, ReflectConstruct, StringPrototypeSplit, } = primordials; @@ -40,7 +41,14 @@ function setup() { function makeTransferable(obj) { const inst = ReflectConstruct(JSTransferable, [], obj.constructor); - ObjectDefineProperties(inst, ObjectGetOwnPropertyDescriptors(obj)); + const properties = ObjectGetOwnPropertyDescriptors(obj); + const propertiesValues = ObjectValues(properties); + for (let i = 0; i < propertiesValues.length; i++) { + // We want to use null-prototype objects to not rely on globally mutable + // %Object.prototype%. + ObjectSetPrototypeOf(propertiesValues[i], null); + } + ObjectDefineProperties(inst, properties); ObjectSetPrototypeOf(inst, ObjectGetPrototypeOf(obj)); return inst; } diff --git a/lib/net.js b/lib/net.js index 53ecbd9a1f5..7ae9ede39bb 100644 --- a/lib/net.js +++ b/lib/net.js @@ -31,6 +31,7 @@ const { ObjectDefineProperty, ObjectSetPrototypeOf, Symbol, + ObjectCreate, } = primordials; const EventEmitter = require('events'); @@ -89,6 +90,7 @@ const { ERR_INVALID_ARG_VALUE, ERR_INVALID_FD_TYPE, ERR_INVALID_IP_ADDRESS, + ERR_INVALID_HANDLE_TYPE, ERR_SERVER_ALREADY_LISTEN, ERR_SERVER_NOT_RUNNING, ERR_SOCKET_CLOSED, @@ -100,6 +102,7 @@ const { uvExceptionWithHostPort, } = require('internal/errors'); const { isUint8Array } = require('internal/util/types'); +const { queueMicrotask } = require('internal/process/task_queues'); const { validateAbortSignal, validateFunction, @@ -130,6 +133,18 @@ const isWindows = process.platform === 'win32'; const noop = () => {}; +const kPerfHooksNetConnectContext = Symbol('kPerfHooksNetConnectContext'); + +const dc = require('diagnostics_channel'); +const netClientSocketChannel = dc.channel('net.client.socket'); +const netServerSocketChannel = dc.channel('net.server.socket'); + +const { + hasObserver, + startPerf, + stopPerf, +} = require('internal/perf/observe'); + function getFlags(ipv6Only) { return ipv6Only === true ? TCPConstants.UV_TCP_IPV6ONLY : 0; } @@ -195,7 +210,11 @@ function connect(...args) { const options = normalized[0]; debug('createConnection', normalized); const socket = new Socket(options); - + if (netClientSocketChannel.hasSubscribers) { + netClientSocketChannel.publish({ + socket, + }); + } if (options.timeout) { socket.setTimeout(options.timeout); } @@ -275,6 +294,19 @@ function initSocketHandle(self) { } } +function closeSocketHandle(self, isException, isCleanupPending = false) { + if (self._handle) { + self._handle.close(() => { + debug('emit close'); + self.emit('close', isException); + if (isCleanupPending) { + self._handle.onread = noop; + self._handle = null; + self._sockname = null; + } + }); + } +} const kBytesRead = Symbol('kBytesRead'); const kBytesWritten = Symbol('kBytesWritten'); @@ -323,6 +355,7 @@ function Socket(options) { this[kBuffer] = null; this[kBufferCb] = null; this[kBufferGen] = null; + this._closeAfterHandlingError = false; if (typeof options === 'number') options = { fd: options }; // Legacy interface. @@ -373,6 +406,7 @@ function Socket(options) { // we need to let it do that by turning it into a writable, own // property. ObjectDefineProperty(this._handle, 'bytesWritten', { + __proto__: null, value: 0, writable: true }); } @@ -545,7 +579,16 @@ Socket.prototype.setKeepAlive = function(enable, initialDelayMsecs) { return this; } - if (this._handle.setKeepAlive && enable !== this[kSetKeepAlive]) { + if (!this._handle.setKeepAlive) { + return this; + } + + if (enable !== this[kSetKeepAlive] || + ( + enable && + this[kSetKeepAliveInitialDelay] !== initialDelay + ) + ) { this[kSetKeepAlive] = enable; this[kSetKeepAliveInitialDelay] = initialDelay; this._handle.setKeepAlive(enable, initialDelay); @@ -561,12 +604,14 @@ Socket.prototype.address = function() { ObjectDefineProperty(Socket.prototype, '_connecting', { + __proto__: null, get: function() { return this.connecting; } }); ObjectDefineProperty(Socket.prototype, 'pending', { + __proto__: null, get() { return !this._handle || this.connecting; }, @@ -575,6 +620,7 @@ ObjectDefineProperty(Socket.prototype, 'pending', { ObjectDefineProperty(Socket.prototype, 'readyState', { + __proto__: null, get: function() { if (this.connecting) { return 'opening'; @@ -591,6 +637,7 @@ ObjectDefineProperty(Socket.prototype, 'readyState', { ObjectDefineProperty(Socket.prototype, 'bufferSize', { + __proto__: null, get: function() { if (this._handle) { return this.writableLength; @@ -599,6 +646,7 @@ ObjectDefineProperty(Socket.prototype, 'bufferSize', { }); ObjectDefineProperty(Socket.prototype, kUpdateTimer, { + __proto__: null, get: function() { return this._unrefTimer; } @@ -634,6 +682,21 @@ Socket.prototype.end = function(data, encoding, callback) { return this; }; +Socket.prototype.resetAndDestroy = function() { + if (this._handle) { + if (!(this._handle instanceof TCP)) + throw new ERR_INVALID_HANDLE_TYPE(); + if (this.connecting) { + debug('reset wait for connection'); + this.once('connect', () => this._reset()); + } else { + this._reset(); + } + } else { + this.destroy(new ERR_SOCKET_CLOSED()); + } + return this; +}; Socket.prototype.pause = function() { if (this[kBuffer] && !this.connecting && this._handle && @@ -704,13 +767,27 @@ Socket.prototype._destroy = function(exception, cb) { this[kBytesRead] = this._handle.bytesRead; this[kBytesWritten] = this._handle.bytesWritten; - this._handle.close(() => { - debug('emit close'); - this.emit('close', isException); - }); - this._handle.onread = noop; - this._handle = null; - this._sockname = null; + if (this.resetAndClosing) { + this.resetAndClosing = false; + const err = this._handle.reset(() => { + debug('emit close'); + this.emit('close', isException); + }); + if (err) + this.emit('error', errnoException(err, 'reset')); + } else if (this._closeAfterHandlingError) { + // Enqueue closing the socket as a microtask, so that the socket can be + // accessible when an `error` event is handled in the `next tick queue`. + queueMicrotask(() => closeSocketHandle(this, isException, true)); + } else { + closeSocketHandle(this, isException); + } + + if (!this._closeAfterHandlingError) { + this._handle.onread = noop; + this._handle = null; + this._sockname = null; + } cb(exception); } else { cb(exception); @@ -726,19 +803,27 @@ Socket.prototype._destroy = function(exception, cb) { } }; +Socket.prototype._reset = function() { + debug('reset connection'); + this.resetAndClosing = true; + return this.destroy(); +}; + Socket.prototype._getpeername = function() { if (!this._handle || !this._handle.getpeername) { return this._peername || {}; } else if (!this._peername) { - this._peername = {}; - // FIXME(bnoordhuis) Throw when the return value is not 0? - this._handle.getpeername(this._peername); + const out = {}; + const err = this._handle.getpeername(out); + if (err) return out; + this._peername = out; } return this._peername; }; function protoGetter(name, callback) { ObjectDefineProperty(Socket.prototype, name, { + __proto__: null, configurable: false, enumerable: true, get: callback @@ -783,6 +868,9 @@ protoGetter('localPort', function localPort() { return this._getsockname().port; }); +protoGetter('localFamily', function localFamily() { + return this._getsockname().family; +}); Socket.prototype[kAfterAsyncWrite] = function() { this[kLastWriteQueueSize] = 0; @@ -939,7 +1027,7 @@ function internalConnect( req.address = address; req.oncomplete = afterConnect; - err = self._handle.connect(req, address, afterConnect); + err = self._handle.connect(req, address); } if (err) { @@ -952,6 +1040,8 @@ function internalConnect( const ex = exceptionWithHostPort(err, 'connect', address, port, details); self.destroy(ex); + } else if ((addressType === 6 || addressType === 4) && hasObserver('net')) { + startPerf(self, kPerfHooksNetConnectContext, { type: 'net', name: 'connect', detail: { host: address, port } }); } } @@ -1177,9 +1267,10 @@ function afterConnect(status, handle, req, readable, writable) { // this doesn't actually consume any bytes, because len=0. if (readable && !self.isPaused()) self.read(0); - + if (self[kPerfHooksNetConnectContext] && hasObserver('net')) { + stopPerf(self, kPerfHooksNetConnectContext); + } } else { - self.connecting = false; let details; if (req.localAddress && req.localPort) { details = req.localAddress + ':' + req.localPort; @@ -1408,7 +1499,7 @@ function emitListeningNT(self) { function listenInCluster(server, address, port, addressType, - backlog, fd, exclusive, flags) { + backlog, fd, exclusive, flags, options) { exclusive = !!exclusive; if (cluster === undefined) cluster = require('cluster'); @@ -1428,8 +1519,8 @@ function listenInCluster(server, address, port, addressType, fd: fd, flags, backlog, + ...options, }; - // Get the primary's server handle, and listen on it cluster._getServer(server, serverQuery, listenOnPrimaryHandle); @@ -1516,8 +1607,18 @@ Server.prototype.listen = function(...args) { if (options.path && isPipeName(options.path)) { const pipeName = this._pipeName = options.path; backlog = options.backlog || backlogFromArgs; - listenInCluster(this, pipeName, -1, -1, - backlog, undefined, options.exclusive); + listenInCluster(this, + pipeName, + -1, + -1, + backlog, + undefined, + options.exclusive, + undefined, + { + readableAll: options.readableAll, + writableAll: options.writableAll, + }); if (!this._handle) { // Failed and an error shall be emitted in the next tick. @@ -1563,6 +1664,7 @@ function lookupAndListen(self, port, address, backlog, exclusive, flags) { } ObjectDefineProperty(Server.prototype, 'listening', { + __proto__: null, get: function() { return !!this._handle; }, @@ -1596,6 +1698,26 @@ function onconnection(err, clientHandle) { } if (self.maxConnections && self._connections >= self.maxConnections) { + if (clientHandle.getsockname || clientHandle.getpeername) { + const data = ObjectCreate(null); + if (clientHandle.getsockname) { + const localInfo = ObjectCreate(null); + clientHandle.getsockname(localInfo); + data.localAddress = localInfo.address; + data.localPort = localInfo.port; + data.localFamily = localInfo.family; + } + if (clientHandle.getpeername) { + const remoteInfo = ObjectCreate(null); + clientHandle.getpeername(remoteInfo); + data.remoteAddress = remoteInfo.address; + data.remotePort = remoteInfo.port; + data.remoteFamily = remoteInfo.family; + } + self.emit('drop', data); + } else { + self.emit('drop'); + } clientHandle.close(); return; } @@ -1608,12 +1730,14 @@ function onconnection(err, clientHandle) { writable: true }); - if (self.noDelay && handle.setNoDelay) { - handle.setNoDelay(true); + if (self.noDelay && clientHandle.setNoDelay) { + socket[kSetNoDelay] = true; + clientHandle.setNoDelay(true); } - - if (self.keepAlive && self.setKeepAlive) { - handle.setKeepAlive(true, handle.keepAliveInitialDelay); + if (self.keepAlive && clientHandle.setKeepAlive) { + socket[kSetKeepAlive] = true; + socket[kSetKeepAliveInitialDelay] = self.keepAliveInitialDelay; + clientHandle.setKeepAlive(true, self.keepAliveInitialDelay); } self._connections++; @@ -1622,6 +1746,11 @@ function onconnection(err, clientHandle) { DTRACE_NET_SERVER_CONNECTION(socket); self.emit('connection', socket); + if (netServerSocketChannel.hasSubscribers) { + netServerSocketChannel.publish({ + socket, + }); + } } /** @@ -1745,11 +1874,13 @@ Server.prototype[EventEmitter.captureRejectionSymbol] = function( // Legacy alias on the C++ wrapper object. This is not public API, so we may // want to runtime-deprecate it at some point. There's no hurry, though. ObjectDefineProperty(TCP.prototype, 'owner', { + __proto__: null, get() { return this[owner_symbol]; }, set(v) { return this[owner_symbol] = v; } }); ObjectDefineProperty(Socket.prototype, '_handle', { + __proto__: null, get() { return this[kHandle]; }, set(v) { return this[kHandle] = v; } }); diff --git a/lib/os.js b/lib/os.js index f0f0fdb15f6..860348a472f 100644 --- a/lib/os.js +++ b/lib/os.js @@ -55,7 +55,7 @@ const { getOSInformation: _getOSInformation, getTotalMem, getUserInfo, - getUptime, + getUptime: _getUptime, isBigEndian, setPriority: _setPriority } = internalBinding('os'); @@ -75,11 +75,14 @@ const { 0: type, 1: version, 2: release, + 3: machine, } = _getOSInformation(); const getHomeDirectory = getCheckedFunction(_getHomeDirectory); const getHostname = getCheckedFunction(_getHostname); const getInterfaceAddresses = getCheckedFunction(_getInterfaceAddresses); +const getUptime = getCheckedFunction(_getUptime); + /** * @returns {string} */ @@ -92,12 +95,17 @@ const getOSType = () => type; * @returns {string} */ const getOSVersion = () => version; +/** + * @returns {string} + */ +const getMachine = () => machine; getFreeMem[SymbolToPrimitive] = () => getFreeMem(); getHostname[SymbolToPrimitive] = () => getHostname(); getOSVersion[SymbolToPrimitive] = () => getOSVersion(); getOSType[SymbolToPrimitive] = () => getOSType(); getOSRelease[SymbolToPrimitive] = () => getOSRelease(); +getMachine[SymbolToPrimitive] = () => getMachine(); getHomeDirectory[SymbolToPrimitive] = () => getHomeDirectory(); getTotalMem[SymbolToPrimitive] = () => getTotalMem(); getUptime[SymbolToPrimitive] = () => getUptime(); @@ -119,15 +127,15 @@ function loadavg() { * logical CPU core. * * @returns {Array<{ - * model: string - * speed: number + * model: string, + * speed: number, * times: { - * user: number - * nice: number - * sys: number - * idle: number - * irq: number - * } + * user: number, + * nice: number, + * sys: number, + * idle: number, + * irq: number, + * }, * }>} */ function cpus() { @@ -171,7 +179,7 @@ platform[SymbolToPrimitive] = () => process.platform; * @returns {string} */ function tmpdir() { - var path; + let path; if (isWindows) { path = process.env.TEMP || process.env.TMP || @@ -223,7 +231,7 @@ function getCIDR(address, netmask, family) { } const parts = StringPrototypeSplit(netmask, split); - for (var i = 0; i < parts.length; i++) { + for (let i = 0; i < parts.length; i++) { if (parts[i] !== '') { const binary = NumberParseInt(parts[i], range); const tmp = countBinaryOnes(binary); @@ -246,13 +254,13 @@ function getCIDR(address, netmask, family) { /** * @returns {Record>} */ function networkInterfaces() { @@ -261,7 +269,7 @@ function networkInterfaces() { if (data === undefined) return result; - for (var i = 0; i < data.length; i += 7) { + for (let i = 0; i < data.length; i += 7) { const name = data[i]; const entry = { address: data[i + 1], @@ -329,11 +337,11 @@ function getPriority(pid) { * `'buffer'`, the `username`, `shell`, and `homedir` values will * be `Buffer` instances. * @returns {{ - * uid: number - * gid: number - * username: string - * homedir: string - * shell: string | null + * uid: number, + * gid: number, + * username: string, + * homedir: string, + * shell: string | null, * }} */ function userInfo(options) { @@ -367,17 +375,20 @@ module.exports = { type: getOSType, userInfo, uptime: getUptime, - version: getOSVersion + version: getOSVersion, + machine: getMachine, }; ObjectDefineProperties(module.exports, { constants: { + __proto__: null, configurable: false, enumerable: true, value: constants }, EOL: { + __proto__: null, configurable: true, enumerable: true, writable: false, @@ -385,6 +396,7 @@ ObjectDefineProperties(module.exports, { }, devNull: { + __proto__: null, configurable: true, enumerable: true, writable: false, diff --git a/lib/path.js b/lib/path.js index fd95361dd02..e662e50d6c6 100644 --- a/lib/path.js +++ b/lib/path.js @@ -743,12 +743,12 @@ const win32 = { /** * @param {string} path - * @param {string} [ext] + * @param {string} [suffix] * @returns {string} */ - basename(path, ext) { - if (ext !== undefined) - validateString(ext, 'ext'); + basename(path, suffix) { + if (suffix !== undefined) + validateString(suffix, 'ext'); validateString(path, 'path'); let start = 0; let end = -1; @@ -763,10 +763,10 @@ const win32 = { start = 2; } - if (ext !== undefined && ext.length > 0 && ext.length <= path.length) { - if (ext === path) + if (suffix !== undefined && suffix.length > 0 && suffix.length <= path.length) { + if (suffix === path) return ''; - let extIdx = ext.length - 1; + let extIdx = suffix.length - 1; let firstNonSlashEnd = -1; for (let i = path.length - 1; i >= start; --i) { const code = StringPrototypeCharCodeAt(path, i); @@ -786,7 +786,7 @@ const win32 = { } if (extIdx >= 0) { // Try to match the explicit extension - if (code === StringPrototypeCharCodeAt(ext, extIdx)) { + if (code === StringPrototypeCharCodeAt(suffix, extIdx)) { if (--extIdx === -1) { // We matched the extension, so mark this as the end of our path // component @@ -1300,22 +1300,22 @@ const posix = { /** * @param {string} path - * @param {string} [ext] + * @param {string} [suffix] * @returns {string} */ - basename(path, ext) { - if (ext !== undefined) - validateString(ext, 'ext'); + basename(path, suffix) { + if (suffix !== undefined) + validateString(suffix, 'ext'); validateString(path, 'path'); let start = 0; let end = -1; let matchedSlash = true; - if (ext !== undefined && ext.length > 0 && ext.length <= path.length) { - if (ext === path) + if (suffix !== undefined && suffix.length > 0 && suffix.length <= path.length) { + if (suffix === path) return ''; - let extIdx = ext.length - 1; + let extIdx = suffix.length - 1; let firstNonSlashEnd = -1; for (let i = path.length - 1; i >= 0; --i) { const code = StringPrototypeCharCodeAt(path, i); @@ -1335,7 +1335,7 @@ const posix = { } if (extIdx >= 0) { // Try to match the explicit extension - if (code === StringPrototypeCharCodeAt(ext, extIdx)) { + if (code === StringPrototypeCharCodeAt(suffix, extIdx)) { if (--extIdx === -1) { // We matched the extension, so mark this as the end of our path // component diff --git a/lib/perf_hooks.js b/lib/perf_hooks.js index 74ba890f537..e84c8948f3c 100644 --- a/lib/perf_hooks.js +++ b/lib/perf_hooks.js @@ -9,6 +9,7 @@ const { } = internalBinding('performance'); const { PerformanceEntry } = require('internal/perf/performance_entry'); +const { PerformanceResourceTiming } = require('internal/perf/resource_timing'); const { PerformanceObserver, PerformanceObserverEntryList, @@ -31,12 +32,14 @@ module.exports = { PerformanceMeasure, PerformanceObserver, PerformanceObserverEntryList, + PerformanceResourceTiming, monitorEventLoopDelay, createHistogram, performance: new InternalPerformance(), }; ObjectDefineProperty(module.exports, 'constants', { + __proto__: null, configurable: false, enumerable: true, value: constants diff --git a/lib/process.js b/lib/process.js index 43c8bf96f0b..aea7351ba4f 100644 --- a/lib/process.js +++ b/lib/process.js @@ -1,4 +1,4 @@ 'use strict'; -// Re-export process as a native module +// Re-export process as a built-in module module.exports = process; diff --git a/lib/readline.js b/lib/readline.js index a6eecc763ae..e54c2defe14 100644 --- a/lib/readline.js +++ b/lib/readline.js @@ -48,12 +48,12 @@ const { NumberIsNaN, ObjectDefineProperty, ObjectSetPrototypeOf, - RegExpPrototypeTest, + RegExpPrototypeExec, + RegExpPrototypeSymbolReplace, + RegExpPrototypeSymbolSplit, StringPrototypeCodePointAt, StringPrototypeEndsWith, - StringPrototypeMatch, StringPrototypeRepeat, - StringPrototypeReplace, StringPrototypeSlice, StringPrototypeSplit, StringPrototypeStartsWith, @@ -100,7 +100,10 @@ const { kSubstringSearch, } = require('internal/readline/utils'); -const { promisify } = require('internal/util'); +const { + kEmptyObject, + promisify, +} = require('internal/util'); const { StringDecoder } = require('string_decoder'); @@ -365,6 +368,7 @@ ObjectSetPrototypeOf(Interface.prototype, EventEmitter.prototype); ObjectSetPrototypeOf(Interface, EventEmitter); ObjectDefineProperty(Interface.prototype, 'columns', { + __proto__: null, configurable: true, enumerable: true, get: function() { @@ -450,7 +454,7 @@ Interface.prototype.question = function(query, options, cb) { } }; -Interface.prototype.question[promisify.custom] = function(query, options) { +Interface.prototype.question[promisify.custom] = function question(query, options) { options = typeof options === 'object' && options !== null ? options : {}; if (options.signal && options.signal.aborted) { @@ -638,12 +642,12 @@ Interface.prototype._normalWrite = function(b) { let string = this._decoder.write(b); if (this._sawReturnAt && DateNow() - this._sawReturnAt <= this.crlfDelay) { - string = StringPrototypeReplace(string, /^\n/, ''); + string = RegExpPrototypeSymbolReplace(/^\n/, string, ''); this._sawReturnAt = 0; } // Run test() on the new string chunk, not on the entire line buffer. - const newPartContainsEnding = RegExpPrototypeTest(lineEnding, string); + const newPartContainsEnding = RegExpPrototypeExec(lineEnding, string) !== null; if (this._line_buffer) { string = this._line_buffer + string; @@ -769,7 +773,7 @@ Interface.prototype._wordLeft = function() { const leading = StringPrototypeSlice(this.line, 0, this.cursor); const reversed = ArrayPrototypeJoin( ArrayPrototypeReverse(ArrayFrom(leading)), ''); - const match = StringPrototypeMatch(reversed, /^\s*(?:[^\w\s]+|\w+)?/); + const match = RegExpPrototypeExec(/^\s*(?:[^\w\s]+|\w+)?/, reversed); this._moveCursor(-match[0].length); } }; @@ -778,7 +782,7 @@ Interface.prototype._wordLeft = function() { Interface.prototype._wordRight = function() { if (this.cursor < this.line.length) { const trailing = StringPrototypeSlice(this.line, this.cursor); - const match = StringPrototypeMatch(trailing, /^(?:\s+|[^\w\s]+|\w+)\s*/); + const match = RegExpPrototypeExec(/^(?:\s+|[^\w\s]+|\w+)\s*/, trailing); this._moveCursor(match[0].length); } }; @@ -814,7 +818,7 @@ Interface.prototype._deleteWordLeft = function() { let leading = StringPrototypeSlice(this.line, 0, this.cursor); const reversed = ArrayPrototypeJoin( ArrayPrototypeReverse(ArrayFrom(leading)), ''); - const match = StringPrototypeMatch(reversed, /^\s*(?:[^\w\s]+|\w+)?/); + const match = RegExpPrototypeExec(/^\s*(?:[^\w\s]+|\w+)?/, reversed); leading = StringPrototypeSlice(leading, 0, leading.length - match[0].length); this.line = leading + StringPrototypeSlice(this.line, this.cursor, @@ -828,7 +832,7 @@ Interface.prototype._deleteWordLeft = function() { Interface.prototype._deleteWordRight = function() { if (this.cursor < this.line.length) { const trailing = StringPrototypeSlice(this.line, this.cursor); - const match = StringPrototypeMatch(trailing, /^(?:\s+|\W+|\w+)\s*/); + const match = RegExpPrototypeExec(/^(?:\s+|\W+|\w+)\s*/, trailing); this.line = StringPrototypeSlice(this.line, 0, this.cursor) + StringPrototypeSlice(trailing, match[0].length); this._refreshLine(); @@ -987,7 +991,7 @@ Interface.prototype._moveCursor = function(dx) { }; function _ttyWriteDumb(s, key) { - key = key || {}; + key = key || kEmptyObject; if (key.name === 'escape') return; @@ -1268,7 +1272,7 @@ Interface.prototype._ttyWrite = function(s, key) { // falls through default: if (typeof s === 'string' && s) { - const lines = StringPrototypeSplit(s, /\r\n|\n|\r/); + const lines = RegExpPrototypeSymbolSplit(/\r\n|\n|\r/, s); for (let i = 0, len = lines.length; i < len; i++) { if (i > 0) { this._line(); diff --git a/lib/repl.js b/lib/repl.js index eb9152d9ce0..8252c39a05f 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -74,32 +74,32 @@ const { ObjectKeys, ObjectSetPrototypeOf, Promise, - PromiseRace, ReflectApply, RegExp, RegExpPrototypeExec, RegExpPrototypeSymbolReplace, - RegExpPrototypeTest, + SafePromiseRace, + RegExpPrototypeSymbolSplit, SafeSet, SafeWeakSet, StringPrototypeCharAt, StringPrototypeCodePointAt, StringPrototypeEndsWith, StringPrototypeIncludes, - StringPrototypeMatch, StringPrototypeRepeat, - StringPrototypeReplace, StringPrototypeSlice, StringPrototypeSplit, StringPrototypeStartsWith, StringPrototypeTrim, StringPrototypeTrimLeft, + StringPrototypeToLocaleLowerCase, Symbol, SyntaxError, SyntaxErrorPrototype, globalThis, } = primordials; +const { BuiltinModule } = require('internal/bootstrap/loaders'); const { makeRequireFunction, addBuiltinLibsToObject @@ -129,6 +129,10 @@ let _builtinLibs = ArrayPrototypeFilter( ); const nodeSchemeBuiltinLibs = ArrayPrototypeMap( _builtinLibs, (lib) => `node:${lib}`); +ArrayPrototypeForEach( + BuiltinModule.getSchemeOnlyModuleNames(), + (lib) => ArrayPrototypePush(nodeSchemeBuiltinLibs, `node:${lib}`), +); const domain = require('domain'); let debug = require('internal/util/debuglog').debuglog('repl', (fn) => { debug = fn; @@ -280,6 +284,7 @@ function REPLServer(prompt, (options.preview !== undefined ? !!options.preview : !eval_); ObjectDefineProperty(this, 'inputStream', { + __proto__: null, get: pendingDeprecation ? deprecate(() => this.input, 'repl.inputStream and repl.outputStream are deprecated. ' + @@ -296,6 +301,7 @@ function REPLServer(prompt, configurable: true }); ObjectDefineProperty(this, 'outputStream', { + __proto__: null, get: pendingDeprecation ? deprecate(() => this.output, 'repl.inputStream and repl.outputStream are deprecated. ' + @@ -415,8 +421,8 @@ function REPLServer(prompt, // to wrap it in parentheses, so that it will be interpreted as // an expression. Note that if the above condition changes, // lib/internal/repl/utils.js needs to be changed to match. - if (RegExpPrototypeTest(/^\s*{/, code) && - !RegExpPrototypeTest(/;\s*$/, code)) { + if (RegExpPrototypeExec(/^\s*{/, code) !== null && + RegExpPrototypeExec(/;\s*$/, code) === null) { code = `(${StringPrototypeTrim(code)})\n`; wrappedCmd = true; } @@ -491,7 +497,7 @@ function REPLServer(prompt, while (true) { try { if (self.replMode === module.exports.REPL_MODE_STRICT && - !RegExpPrototypeTest(/^\s*$/, code)) { + RegExpPrototypeExec(/^\s*$/, code) === null) { // "void 0" keeps the repl from returning "use strict" as the result // value for statements and declarations that don't return a value. code = `'use strict'; void 0;\n${code}`; @@ -527,7 +533,7 @@ function REPLServer(prompt, // This will set the values from `savedRegExMatches` to corresponding // predefined RegExp properties `RegExp.$1`, `RegExp.$2` ... `RegExp.$9` - RegExpPrototypeTest(regExMatcher, + RegExpPrototypeExec(regExMatcher, ArrayPrototypeJoin(savedRegExMatches, sep)); let finished = false; @@ -605,12 +611,12 @@ function REPLServer(prompt, }; prioritizedSigintQueue.add(sigintListener); }); - promise = PromiseRace([promise, interrupt]); + promise = SafePromiseRace([promise, interrupt]); } (async () => { try { - const result = await promise; + const result = (await promise)?.value; finishExecution(null, result); } catch (err) { if (err && process.domain) { @@ -675,22 +681,24 @@ function REPLServer(prompt, if (e.stack) { if (e.name === 'SyntaxError') { // Remove stack trace. - e.stack = StringPrototypeReplace(StringPrototypeReplace(e.stack, - /^REPL\d+:\d+\r?\n/, ''), - /^\s+at\s.*\n?/gm, ''); + e.stack = RegExpPrototypeSymbolReplace( + /^\s+at\s.*\n?/gm, + RegExpPrototypeSymbolReplace(/^REPL\d+:\d+\r?\n/, e.stack, ''), + ''); const importErrorStr = 'Cannot use import statement outside a ' + 'module'; if (StringPrototypeIncludes(e.message, importErrorStr)) { e.message = 'Cannot use import statement inside the Node.js ' + 'REPL, alternatively use dynamic import'; - e.stack = StringPrototypeReplace(e.stack, - /SyntaxError:.*\n/, - `SyntaxError: ${e.message}\n`); + e.stack = RegExpPrototypeSymbolReplace( + /SyntaxError:.*\n/, + e.stack, + `SyntaxError: ${e.message}\n`); } } else if (self.replMode === module.exports.REPL_MODE_STRICT) { - e.stack = StringPrototypeReplace( - e.stack, + e.stack = RegExpPrototypeSymbolReplace( /(\s+at\s+REPL\d+:)(\d+)/, + e.stack, (_, pre, line) => pre + (line - 1) ); } @@ -720,13 +728,13 @@ function REPLServer(prompt, if (errStack === '') { errStack = self.writer(e); } - const lines = StringPrototypeSplit(errStack, /(?<=\n)/); + const lines = RegExpPrototypeSymbolSplit(/(?<=\n)/, errStack); let matched = false; errStack = ''; ArrayPrototypeForEach(lines, (line) => { if (!matched && - RegExpPrototypeTest(/^\[?([A-Z][a-z0-9_]*)*Error/, line)) { + RegExpPrototypeExec(/^\[?([A-Z][a-z0-9_]*)*Error/, line) !== null) { errStack += writer.options.breakLength >= line.length ? `Uncaught ${line}` : `Uncaught:\n${line}`; @@ -778,6 +786,7 @@ function REPLServer(prompt, if (options[kStandaloneREPL]) { ObjectDefineProperty(inspect, 'replDefaults', { + __proto__: null, get() { return writer.options; }, @@ -853,7 +862,7 @@ function REPLServer(prompt, // code alignment const matches = self._sawKeyPress ? - StringPrototypeMatch(cmd, /^\s+/) : null; + RegExpPrototypeExec(/^\s+/, cmd) : null; if (matches) { const prefix = matches[0]; self.write(prefix); @@ -873,7 +882,7 @@ function REPLServer(prompt, if (StringPrototypeCharAt(trimmedCmd, 0) === '.' && StringPrototypeCharAt(trimmedCmd, 1) !== '.' && NumberIsNaN(NumberParseFloat(trimmedCmd))) { - const matches = StringPrototypeMatch(trimmedCmd, /^\.([^\s]+)\s*(.*)$/); + const matches = RegExpPrototypeExec(/^\.([^\s]+)\s*(.*)$/, trimmedCmd); const keyword = matches && matches[1]; const rest = matches && matches[2]; if (ReflectApply(_parseREPLKeyword, self, [keyword, rest]) === true) { @@ -1078,12 +1087,16 @@ REPLServer.prototype.createContext = function() { // Only set properties that do not already exist as a global builtin. if (!globalBuiltins.has(name)) { ObjectDefineProperty(context, name, - ObjectGetOwnPropertyDescriptor(globalThis, name)); + { + __proto__: null, + ...ObjectGetOwnPropertyDescriptor(globalThis, name), + }); } }); context.global = context; const _console = new Console(this.output); ObjectDefineProperty(context, 'console', { + __proto__: null, configurable: true, writable: true, value: _console @@ -1094,11 +1107,13 @@ REPLServer.prototype.createContext = function() { replModule.paths = CJSModule._resolveLookupPaths('', parentModule); ObjectDefineProperty(context, 'module', { + __proto__: null, configurable: true, writable: true, value: replModule }); ObjectDefineProperty(context, 'require', { + __proto__: null, configurable: true, writable: true, value: makeRequireFunction(replModule) @@ -1118,6 +1133,7 @@ REPLServer.prototype.resetContext = function() { this.lines.level = []; ObjectDefineProperty(this.context, '_', { + __proto__: null, configurable: true, get: () => this.last, set: (value) => { @@ -1130,6 +1146,7 @@ REPLServer.prototype.resetContext = function() { }); ObjectDefineProperty(this.context, '_error', { + __proto__: null, configurable: true, get: () => this.lastError, set: (value) => { @@ -1245,9 +1262,9 @@ function gracefulReaddir(...args) { } } -function completeFSFunctions(line) { +function completeFSFunctions(match) { let baseName = ''; - let filePath = StringPrototypeMatch(line, fsAutoCompleteRE)[1]; + let filePath = match[1]; let fileList = gracefulReaddir(filePath, { withFileTypes: true }); if (!fileList) { @@ -1285,17 +1302,18 @@ function complete(line, callback) { // Ignore right whitespace. It could change the outcome. line = StringPrototypeTrimLeft(line); - // REPL commands (e.g. ".break"). let filter = ''; - if (RegExpPrototypeTest(/^\s*\.(\w*)$/, line)) { + + let match; + // REPL commands (e.g. ".break"). + if ((match = RegExpPrototypeExec(/^\s*\.(\w*)$/, line)) !== null) { ArrayPrototypePush(completionGroups, ObjectKeys(this.commands)); - completeOn = StringPrototypeMatch(line, /^\s*\.(\w*)$/)[1]; + completeOn = match[1]; if (completeOn.length) { filter = completeOn; } - } else if (RegExpPrototypeTest(requireRE, line)) { + } else if ((match = RegExpPrototypeExec(requireRE, line)) !== null) { // require('...') - const match = StringPrototypeMatch(line, requireRE); completeOn = match[1]; filter = completeOn; if (this.allowBlockingCompletions) { @@ -1312,7 +1330,7 @@ function complete(line, callback) { group = ['./', '../']; } else if (completeOn === '..') { group = ['../']; - } else if (RegExpPrototypeTest(/^\.\.?\//, completeOn)) { + } else if (RegExpPrototypeExec(/^\.\.?\//, completeOn) !== null) { paths = [process.cwd()]; } else { paths = ArrayPrototypeConcat(module.paths, CJSModule.globalPaths); @@ -1322,7 +1340,7 @@ function complete(line, callback) { dir = path.resolve(dir, subdir); const dirents = gracefulReaddir(dir, { withFileTypes: true }) || []; ArrayPrototypeForEach(dirents, (dirent) => { - if (RegExpPrototypeTest(versionedFileNamesRe, dirent.name) || + if (RegExpPrototypeExec(versionedFileNamesRe, dirent.name) !== null || dirent.name === '.npm') { // Exclude versioned names that 'npm' installs. return; @@ -1352,9 +1370,8 @@ function complete(line, callback) { } ArrayPrototypePush(completionGroups, _builtinLibs, nodeSchemeBuiltinLibs); - } else if (RegExpPrototypeTest(importRE, line)) { + } else if ((match = RegExpPrototypeExec(importRE, line)) !== null) { // import('...') - const match = StringPrototypeMatch(line, importRE); completeOn = match[1]; filter = completeOn; if (this.allowBlockingCompletions) { @@ -1375,7 +1392,7 @@ function complete(line, callback) { group = ['./', '../']; } else if (completeOn === '..') { group = ['../']; - } else if (RegExpPrototypeTest(/^\.\.?\//, completeOn)) { + } else if (RegExpPrototypeExec(/^\.\.?\//, completeOn) !== null) { paths = [process.cwd()]; } else { paths = ArrayPrototypeSlice(module.paths); @@ -1387,7 +1404,7 @@ function complete(line, callback) { const dirents = gracefulReaddir(dir, { withFileTypes: true }) || []; ArrayPrototypeForEach(dirents, (dirent) => { const { name } = dirent; - if (RegExpPrototypeTest(versionedFileNamesRe, name) || + if (RegExpPrototypeExec(versionedFileNamesRe, name) !== null || name === '.npm') { // Exclude versioned names that 'npm' installs. return; @@ -1420,9 +1437,9 @@ function complete(line, callback) { } ArrayPrototypePush(completionGroups, _builtinLibs, nodeSchemeBuiltinLibs); - } else if (RegExpPrototypeTest(fsAutoCompleteRE, line) && + } else if ((match = RegExpPrototypeExec(fsAutoCompleteRE, line)) !== null && this.allowBlockingCompletions) { - ({ 0: completionGroups, 1: completeOn } = completeFSFunctions(line)); + ({ 0: completionGroups, 1: completeOn } = completeFSFunctions(match)); // Handle variable member lookup. // We support simple chained expressions like the following (no function // calls, etc.). That is for simplicity and also because we *eval* that @@ -1434,7 +1451,7 @@ function complete(line, callback) { // foo<|> # all scope vars with filter 'foo' // foo.<|> # completions for 'foo' with filter '' } else if (line.length === 0 || - RegExpPrototypeTest(/\w|\.|\$/, line[line.length - 1])) { + RegExpPrototypeExec(/\w|\.|\$/, line[line.length - 1]) !== null) { const { 0: match } = RegExpPrototypeExec(simpleExpressionRE, line) || ['']; if (line.length !== 0 && !match) { completionGroupsLoaded(); @@ -1529,11 +1546,16 @@ function complete(line, callback) { // Filter, sort (within each group), uniq and merge the completion groups. if (completionGroups.length && filter) { const newCompletionGroups = []; + const lowerCaseFilter = StringPrototypeToLocaleLowerCase(filter); ArrayPrototypeForEach(completionGroups, (group) => { - const filteredGroup = ArrayPrototypeFilter( - group, - (str) => StringPrototypeStartsWith(str, filter) - ); + const filteredGroup = ArrayPrototypeFilter(group, (str) => { + // Filter is always case-insensitive following chromium autocomplete + // behavior. + return StringPrototypeStartsWith( + StringPrototypeToLocaleLowerCase(str), + lowerCaseFilter + ); + }); if (filteredGroup.length) { ArrayPrototypePush(newCompletionGroups, filteredGroup); } @@ -1618,14 +1640,17 @@ function _memory(cmd) { // I need to know "depth." // Because I can not tell the difference between a } that // closes an object literal and a } that closes a function + const countMatches = (regex, str) => { + let count = 0; + while (RegExpPrototypeExec(regex, str) !== null) count++; + return count; + }; // Going down is { and ( e.g. function() { // going up is } and ) - let dw = StringPrototypeMatch(cmd, /[{(]/g); - let up = StringPrototypeMatch(cmd, /[})]/g); - up = up ? up.length : 0; - dw = dw ? dw.length : 0; - let depth = dw - up; + const dw = countMatches(/[{(]/g, cmd); + const up = countMatches(/[})]/g, cmd); + let depth = dw.length - up.length; if (depth) { (function workIt() { @@ -1800,6 +1825,7 @@ module.exports = { }; ObjectDefineProperty(module.exports, 'builtinModules', { + __proto__: null, get: () => _builtinLibs, set: (val) => _builtinLibs = val, enumerable: true, @@ -1807,6 +1833,7 @@ ObjectDefineProperty(module.exports, 'builtinModules', { }); ObjectDefineProperty(module.exports, '_builtinLibs', { + __proto__: null, get: pendingDeprecation ? deprecate( () => _builtinLibs, 'repl._builtinLibs is deprecated. Check module.builtinModules instead', diff --git a/lib/stream.js b/lib/stream.js index 2c3261123af..e8a38120cb2 100644 --- a/lib/stream.js +++ b/lib/stream.js @@ -35,6 +35,12 @@ const { streamReturningOperators, promiseReturningOperators, } = require('internal/streams/operators'); + +const { + codes: { + ERR_ILLEGAL_CONSTRUCTOR, + }, +} = require('internal/errors'); const compose = require('internal/streams/compose'); const { pipeline } = require('internal/streams/pipeline'); const { destroyer } = require('internal/streams/destroy'); @@ -51,15 +57,39 @@ Stream.isReadable = utils.isReadable; Stream.Readable = require('internal/streams/readable'); for (const key of ObjectKeys(streamReturningOperators)) { const op = streamReturningOperators[key]; - Stream.Readable.prototype[key] = function(...args) { + function fn(...args) { + if (new.target) { + throw ERR_ILLEGAL_CONSTRUCTOR(); + } return Stream.Readable.from(ReflectApply(op, this, args)); - }; + } + ObjectDefineProperty(fn, 'name', { __proto__: null, value: op.name }); + ObjectDefineProperty(fn, 'length', { __proto__: null, value: op.length }); + ObjectDefineProperty(Stream.Readable.prototype, key, { + __proto__: null, + value: fn, + enumerable: false, + configurable: true, + writable: true, + }); } for (const key of ObjectKeys(promiseReturningOperators)) { const op = promiseReturningOperators[key]; - Stream.Readable.prototype[key] = function(...args) { + function fn(...args) { + if (new.target) { + throw ERR_ILLEGAL_CONSTRUCTOR(); + } return ReflectApply(op, this, args); - }; + } + ObjectDefineProperty(fn, 'name', { __proto__: null, value: op.name }); + ObjectDefineProperty(fn, 'length', { __proto__: null, value: op.length }); + ObjectDefineProperty(Stream.Readable.prototype, key, { + __proto__: null, + value: fn, + enumerable: false, + configurable: true, + writable: true, + }); } Stream.Writable = require('internal/streams/writable'); Stream.Duplex = require('internal/streams/duplex'); @@ -73,6 +103,7 @@ Stream.destroy = destroyer; Stream.compose = compose; ObjectDefineProperty(Stream, 'promises', { + __proto__: null, configurable: true, enumerable: true, get() { @@ -81,6 +112,7 @@ ObjectDefineProperty(Stream, 'promises', { }); ObjectDefineProperty(pipeline, customPromisify, { + __proto__: null, enumerable: true, get() { return promises.pipeline; @@ -88,6 +120,7 @@ ObjectDefineProperty(pipeline, customPromisify, { }); ObjectDefineProperty(eos, customPromisify, { + __proto__: null, enumerable: true, get() { return promises.finished; diff --git a/lib/string_decoder.js b/lib/string_decoder.js index 9eae594aaa2..a22da17f505 100644 --- a/lib/string_decoder.js +++ b/lib/string_decoder.js @@ -140,6 +140,7 @@ StringDecoder.prototype.text = function text(buf, offset) { ObjectDefineProperties(StringDecoder.prototype, { lastChar: { + __proto__: null, configurable: true, enumerable: true, get() { @@ -149,6 +150,7 @@ ObjectDefineProperties(StringDecoder.prototype, { } }, lastNeed: { + __proto__: null, configurable: true, enumerable: true, get() { @@ -156,6 +158,7 @@ ObjectDefineProperties(StringDecoder.prototype, { } }, lastTotal: { + __proto__: null, configurable: true, enumerable: true, get() { diff --git a/lib/test.js b/lib/test.js new file mode 100644 index 00000000000..c8a4bae9148 --- /dev/null +++ b/lib/test.js @@ -0,0 +1,19 @@ +'use strict'; +const { ObjectAssign } = primordials; +const { test, describe, it, before, after, beforeEach, afterEach } = require('internal/test_runner/harness'); +const { run } = require('internal/test_runner/runner'); +const { emitExperimentalWarning } = require('internal/util'); + +emitExperimentalWarning('The test runner'); + +module.exports = test; +ObjectAssign(module.exports, { + after, + afterEach, + before, + beforeEach, + describe, + it, + run, + test, +}); diff --git a/lib/timers.js b/lib/timers.js index a4543fea1df..213996eefa1 100644 --- a/lib/timers.js +++ b/lib/timers.js @@ -168,6 +168,7 @@ function setTimeout(callback, after, arg1, arg2, arg3) { } ObjectDefineProperty(setTimeout, customPromisify, { + __proto__: null, enumerable: true, get() { if (!timersPromises) @@ -302,6 +303,7 @@ function setImmediate(callback, arg1, arg2, arg3) { } ObjectDefineProperty(setImmediate, customPromisify, { + __proto__: null, enumerable: true, get() { if (!timersPromises) diff --git a/lib/timers/promises.js b/lib/timers/promises.js index 81788d0a6cb..7c8d364b1dd 100644 --- a/lib/timers/promises.js +++ b/lib/timers/promises.js @@ -35,16 +35,20 @@ const { validateObject, } = require('internal/validators'); +const { + kEmptyObject, +} = require('internal/util'); + const kScheduler = Symbol('kScheduler'); function cancelListenerHandler(clear, reject, signal) { if (!this._destroyed) { clear(this); - reject(new AbortError()); + reject(new AbortError(undefined, { cause: signal?.reason })); } } -function setTimeout(after, value, options = {}) { +function setTimeout(after, value, options = kEmptyObject) { const args = value !== undefined ? [value] : value; if (options == null || typeof options !== 'object') { return PromiseReject( @@ -70,7 +74,7 @@ function setTimeout(after, value, options = {}) { // to 12.x, then this can be converted to use optional chaining to // simplify the check. if (signal && signal.aborted) { - return PromiseReject(new AbortError()); + return PromiseReject(new AbortError(undefined, { cause: signal.reason })); } let oncancel; const ret = new Promise((resolve, reject) => { @@ -78,7 +82,7 @@ function setTimeout(after, value, options = {}) { insert(timeout, timeout._idleTimeout); if (signal) { oncancel = FunctionPrototypeBind(cancelListenerHandler, - timeout, clearTimeout, reject); + timeout, clearTimeout, reject, signal); signal.addEventListener('abort', oncancel); } }); @@ -88,7 +92,7 @@ function setTimeout(after, value, options = {}) { () => signal.removeEventListener('abort', oncancel)) : ret; } -function setImmediate(value, options = {}) { +function setImmediate(value, options = kEmptyObject) { if (options == null || typeof options !== 'object') { return PromiseReject( new ERR_INVALID_ARG_TYPE( @@ -113,7 +117,7 @@ function setImmediate(value, options = {}) { // to 12.x, then this can be converted to use optional chaining to // simplify the check. if (signal && signal.aborted) { - return PromiseReject(new AbortError()); + return PromiseReject(new AbortError(undefined, { cause: signal.reason })); } let oncancel; const ret = new Promise((resolve, reject) => { @@ -121,7 +125,8 @@ function setImmediate(value, options = {}) { if (!ref) immediate.unref(); if (signal) { oncancel = FunctionPrototypeBind(cancelListenerHandler, - immediate, clearImmediate, reject); + immediate, clearImmediate, reject, + signal); signal.addEventListener('abort', oncancel); } }); @@ -131,14 +136,14 @@ function setImmediate(value, options = {}) { () => signal.removeEventListener('abort', oncancel)) : ret; } -async function* setInterval(after, value, options = {}) { +async function* setInterval(after, value, options = kEmptyObject) { validateObject(options, 'options'); const { signal, ref = true } = options; validateAbortSignal(signal, 'options.signal'); validateBoolean(ref, 'options.ref'); if (signal?.aborted) - throw new AbortError(); + throw new AbortError(undefined, { cause: signal?.reason }); let onCancel; let interval; @@ -157,7 +162,9 @@ async function* setInterval(after, value, options = {}) { onCancel = () => { clearInterval(interval); if (callback) { - callback(PromiseReject(new AbortError())); + callback( + PromiseReject( + new AbortError(undefined, { cause: signal.reason }))); callback = undefined; } }; @@ -172,7 +179,7 @@ async function* setInterval(after, value, options = {}) { yield value; } } - throw new AbortError(); + throw new AbortError(undefined, { cause: signal?.reason }); } finally { clearInterval(interval); signal?.removeEventListener('abort', onCancel); diff --git a/lib/tls.js b/lib/tls.js index 2fd7a9e013f..1ada006635d 100644 --- a/lib/tls.js +++ b/lib/tls.js @@ -34,13 +34,12 @@ const { ObjectDefineProperty, ObjectFreeze, RegExpPrototypeExec, - RegExpPrototypeTest, + RegExpPrototypeSymbolReplace, StringFromCharCode, StringPrototypeCharCodeAt, StringPrototypeEndsWith, StringPrototypeIncludes, StringPrototypeIndexOf, - StringPrototypeReplace, StringPrototypeSlice, StringPrototypeSplit, StringPrototypeStartsWith, @@ -54,7 +53,10 @@ const { } = require('internal/errors').codes; const internalUtil = require('internal/util'); internalUtil.assertCrypto(); -const { isArrayBufferView } = require('internal/util/types'); +const { + isArrayBufferView, + isUint8Array, +} = require('internal/util/types'); const net = require('net'); const { getOptionValue } = require('internal/options'); @@ -108,6 +110,7 @@ function cacheRootCertificates() { } ObjectDefineProperty(exports, 'rootCertificates', { + __proto__: null, configurable: false, enumerable: true, get: () => { @@ -145,14 +148,19 @@ exports.convertALPNProtocols = function convertALPNProtocols(protocols, out) { // If protocols is Array - translate it into buffer if (ArrayIsArray(protocols)) { out.ALPNProtocols = convertProtocols(protocols); - } else if (isArrayBufferView(protocols)) { + } else if (isUint8Array(protocols)) { // Copy new buffer not to be modified by user. out.ALPNProtocols = Buffer.from(protocols); + } else if (isArrayBufferView(protocols)) { + out.ALPNProtocols = Buffer.from(protocols.buffer.slice( + protocols.byteOffset, + protocols.byteOffset + protocols.byteLength + )); } }; function unfqdn(host) { - return StringPrototypeReplace(host, /[.]$/, ''); + return RegExpPrototypeSymbolReplace(/[.]$/, host, ''); } // String#toLowerCase() is locale-sensitive so we use @@ -163,7 +171,7 @@ function toLowerCase(c) { function splitHost(host) { return StringPrototypeSplit( - StringPrototypeReplace(unfqdn(host), /[A-Z]/g, toLowerCase), + RegExpPrototypeSymbolReplace(/[A-Z]/g, unfqdn(host), toLowerCase), '.' ); } @@ -186,7 +194,7 @@ function check(hostParts, pattern, wildcards) { // good way to detect their encoding or normalize them so we simply // reject them. Control characters and blanks are rejected as well // because nothing good can come from accepting them. - const isBad = (s) => RegExpPrototypeTest(/[^\u0021-\u007F]/u, s); + const isBad = (s) => RegExpPrototypeExec(/[^\u0021-\u007F]/u, s) !== null; if (ArrayPrototypeSome(patternParts, isBad)) return false; diff --git a/lib/tty.js b/lib/tty.js index e61a5c3ac3f..40972e14217 100644 --- a/lib/tty.js +++ b/lib/tty.js @@ -73,7 +73,7 @@ ObjectSetPrototypeOf(ReadStream, net.Socket); ReadStream.prototype.setRawMode = function(flag) { flag = !!flag; - const err = this._handle.setRawMode(flag); + const err = this._handle?.setRawMode(flag); if (err) { this.emit('error', errors.errnoException(err, 'setRawMode')); return this; diff --git a/lib/util.js b/lib/util.js index fbd8c550318..bca74b6d5c6 100644 --- a/lib/util.js +++ b/lib/util.js @@ -40,6 +40,7 @@ const { ObjectKeys, ObjectPrototypeToString, ObjectSetPrototypeOf, + ObjectValues, ReflectApply, StringPrototypePadStart, } = primordials; @@ -61,6 +62,7 @@ const { stripVTControlCharacters, } = require('internal/util/inspect'); const { debuglog } = require('internal/util/debuglog'); +const { parseArgs } = require('internal/util/parse_args/parse_args'); const { validateFunction, validateNumber, @@ -243,6 +245,7 @@ function inherits(ctor, superCtor) { 'Object', superCtor.prototype); } ObjectDefineProperty(ctor, 'super_', { + __proto__: null, value: superCtor, writable: true, configurable: true @@ -315,6 +318,12 @@ function callbackify(original) { if (typeof descriptors.name.value === 'string') { descriptors.name.value += 'Callbackified'; } + const propertiesValues = ObjectValues(descriptors); + for (let i = 0; i < propertiesValues.length; i++) { + // We want to use null-prototype objects to not rely on globally mutable + // %Object.prototype%. + ObjectSetPrototypeOf(propertiesValues[i], null); + } ObjectDefineProperties(callbackified, descriptors); return callbackified; } @@ -369,6 +378,7 @@ module.exports = { isFunction, isPrimitive, log, + parseArgs, promisify, stripVTControlCharacters, toUSVString, diff --git a/lib/v8.js b/lib/v8.js index 75981152851..be969406da2 100644 --- a/lib/v8.js +++ b/lib/v8.js @@ -16,9 +16,8 @@ const { Array, - ArrayBuffer, - ArrayPrototypeForEach, - ArrayPrototypePush, + BigInt64Array, + BigUint64Array, DataView, Error, Float32Array, @@ -27,7 +26,6 @@ const { Int32Array, Int8Array, ObjectPrototypeToString, - SafeMap, Uint16Array, Uint32Array, Uint8Array, @@ -35,11 +33,14 @@ const { } = primordials; const { Buffer } = require('buffer'); -const { validateString } = require('internal/validators'); +const { validateString, validateUint32 } = require('internal/validators'); const { Serializer, Deserializer } = internalBinding('serdes'); +const { + namespace: startupSnapshot +} = require('internal/v8/startup_snapshot'); let profiler = {}; if (internalBinding('config').hasInspector) { @@ -58,6 +59,7 @@ const { } = internalBinding('heap_utils'); const { HeapSnapshotStream } = require('internal/heap_utils'); const promiseHooks = require('internal/promise_hooks'); +const { getOptionValue } = require('internal/options'); /** * Generates a snapshot of the current V8 heap @@ -94,6 +96,7 @@ const { updateHeapStatisticsBuffer, updateHeapSpaceStatisticsBuffer, updateHeapCodeStatisticsBuffer, + setHeapSnapshotNearHeapLimit: _setHeapSnapshotNearHeapLimit, // Properties for heap statistics buffer extraction. kTotalHeapSizeIndex, @@ -107,6 +110,9 @@ const { kPeakMallocedMemoryIndex, kNumberOfNativeContextsIndex, kNumberOfDetachedContextsIndex, + kTotalGlobalHandlesSizeIndex, + kUsedGlobalHandlesSizeIndex, + kExternalMemoryIndex, // Properties for heap spaces statistics buffer extraction. kHeapSpaces, @@ -165,7 +171,10 @@ function getHeapStatistics() { peak_malloced_memory: buffer[kPeakMallocedMemoryIndex], does_zap_garbage: buffer[kDoesZapGarbageIndex], number_of_native_contexts: buffer[kNumberOfNativeContextsIndex], - number_of_detached_contexts: buffer[kNumberOfDetachedContextsIndex] + number_of_detached_contexts: buffer[kNumberOfDetachedContextsIndex], + total_global_handles_size: buffer[kTotalGlobalHandlesSizeIndex], + used_global_handles_size: buffer[kUsedGlobalHandlesSizeIndex], + external_memory: buffer[kExternalMemoryIndex] }; } @@ -216,6 +225,18 @@ function getHeapCodeStatistics() { }; } +let heapSnapshotNearHeapLimitCallbackAdded = false; +function setHeapSnapshotNearHeapLimit(limit) { + validateUint32(limit, 'limit', 1); + if (heapSnapshotNearHeapLimitCallbackAdded || + getOptionValue('--heapsnapshot-near-heap-limit') > 0 + ) { + return; + } + heapSnapshotNearHeapLimitCallbackAdded = true; + _setHeapSnapshotNearHeapLimit(limit); +} + /* V8 serialization API */ /* JS methods for the base objects */ @@ -235,29 +256,40 @@ Deserializer.prototype.readRawBytes = function readRawBytes(length) { length); }; -/* Keep track of how to handle different ArrayBufferViews. - * The default Serializer for Node does not use the V8 methods for serializing - * those objects because Node's `Buffer` objects use pooled allocation in many - * cases, and their underlying `ArrayBuffer`s would show up in the - * serialization. Because a) those may contain sensitive data and the user - * may not be aware of that and b) they are often much larger than the `Buffer` - * itself, custom serialization is applied. */ -const arrayBufferViewTypes = [Int8Array, Uint8Array, Uint8ClampedArray, - Int16Array, Uint16Array, Int32Array, Uint32Array, - Float32Array, Float64Array, DataView]; - -const arrayBufferViewTypeToIndex = new SafeMap(); - -{ - const dummy = new ArrayBuffer(); - ArrayPrototypeForEach(arrayBufferViewTypes, (ctor, i) => { - const tag = ObjectPrototypeToString(new ctor(dummy)); - arrayBufferViewTypeToIndex.set(tag, i); - }); +function arrayBufferViewTypeToIndex(abView) { + const type = ObjectPrototypeToString(abView); + if (type === '[object Int8Array]') return 0; + if (type === '[object Uint8Array]') return 1; + if (type === '[object Uint8ClampedArray]') return 2; + if (type === '[object Int16Array]') return 3; + if (type === '[object Uint16Array]') return 4; + if (type === '[object Int32Array]') return 5; + if (type === '[object Uint32Array]') return 6; + if (type === '[object Float32Array]') return 7; + if (type === '[object Float64Array]') return 8; + if (type === '[object DataView]') return 9; + // Index 10 is FastBuffer. + if (type === '[object BigInt64Array]') return 11; + if (type === '[object BigUint64Array]') return 12; + return -1; } -const bufferConstructorIndex = - ArrayPrototypePush(arrayBufferViewTypes, FastBuffer) - 1; +function arrayBufferViewIndexToType(index) { + if (index === 0) return Int8Array; + if (index === 1) return Uint8Array; + if (index === 2) return Uint8ClampedArray; + if (index === 3) return Int16Array; + if (index === 4) return Uint16Array; + if (index === 5) return Int32Array; + if (index === 6) return Uint32Array; + if (index === 7) return Float32Array; + if (index === 8) return Float64Array; + if (index === 9) return DataView; + if (index === 10) return FastBuffer; + if (index === 11) return BigInt64Array; + if (index === 12) return BigUint64Array; + return undefined; +} class DefaultSerializer extends Serializer { constructor() { @@ -273,14 +305,17 @@ class DefaultSerializer extends Serializer { * @returns {void} */ _writeHostObject(abView) { - let i = 0; - if (abView.constructor === Buffer) { - i = bufferConstructorIndex; - } else { - const tag = ObjectPrototypeToString(abView); - i = arrayBufferViewTypeToIndex.get(tag); - - if (i === undefined) { + // Keep track of how to handle different ArrayBufferViews. The default + // Serializer for Node does not use the V8 methods for serializing those + // objects because Node's `Buffer` objects use pooled allocation in many + // cases, and their underlying `ArrayBuffer`s would show up in the + // serialization. Because a) those may contain sensitive data and the user + // may not be aware of that and b) they are often much larger than the + // `Buffer` itself, custom serialization is applied. + let i = 10; // FastBuffer + if (abView.constructor !== Buffer) { + i = arrayBufferViewTypeToIndex(abView); + if (i === -1) { throw new this._getDataCloneError( `Unserializable host object: ${inspect(abView)}`); } @@ -301,7 +336,7 @@ class DefaultDeserializer extends Deserializer { */ _readHostObject() { const typeIndex = this.readUint32(); - const ctor = arrayBufferViewTypes[typeIndex]; + const ctor = arrayBufferViewIndexToType(typeIndex); const byteLength = this.readUint32(); const byteOffset = this._readRawBytes(byteLength); const BYTES_PER_ELEMENT = ctor.BYTES_PER_ELEMENT || 1; @@ -363,4 +398,6 @@ module.exports = { serialize, writeHeapSnapshot, promiseHooks, + startupSnapshot, + setHeapSnapshotNearHeapLimit, }; diff --git a/lib/vm.js b/lib/vm.js index 92afa9f6964..1bb199363af 100644 --- a/lib/vm.js +++ b/lib/vm.js @@ -23,7 +23,6 @@ const { ArrayPrototypeForEach, - ArrayPrototypeUnshift, Symbol, PromiseReject, ReflectApply, @@ -57,13 +56,14 @@ const { validateUint32, } = require('internal/validators'); const { - kVmBreakFirstLineSymbol, emitExperimentalWarning, + kEmptyObject, + kVmBreakFirstLineSymbol, } = require('internal/util'); const kParsingContext = Symbol('script parsing context'); class Script extends ContextifyScript { - constructor(code, options = {}) { + constructor(code, options = kEmptyObject) { code = `${code}`; if (typeof options === 'string') { options = { filename: options }; @@ -122,17 +122,19 @@ class Script extends ContextifyScript { } runInThisContext(options) { - const { breakOnSigint, args } = getRunInContextArgs(options); + const { breakOnSigint, args } = getRunInContextArgs(null, options); if (breakOnSigint && process.listenerCount('SIGINT') > 0) { - return sigintHandlersWrap(super.runInThisContext, this, args); + return sigintHandlersWrap(super.runInContext, this, args); } - return ReflectApply(super.runInThisContext, this, args); + return ReflectApply(super.runInContext, this, args); } runInContext(contextifiedObject, options) { validateContext(contextifiedObject); - const { breakOnSigint, args } = getRunInContextArgs(options); - ArrayPrototypeUnshift(args, contextifiedObject); + const { breakOnSigint, args } = getRunInContextArgs( + contextifiedObject, + options, + ); if (breakOnSigint && process.listenerCount('SIGINT') > 0) { return sigintHandlersWrap(super.runInContext, this, args); } @@ -152,7 +154,7 @@ function validateContext(contextifiedObject) { } } -function getRunInContextArgs(options = {}) { +function getRunInContextArgs(contextifiedObject, options = kEmptyObject) { validateObject(options, 'options'); let timeout = options.timeout; @@ -173,7 +175,13 @@ function getRunInContextArgs(options = {}) { return { breakOnSigint, - args: [timeout, displayErrors, breakOnSigint, breakFirstLine] + args: [ + contextifiedObject, + timeout, + displayErrors, + breakOnSigint, + breakFirstLine, + ], }; } @@ -212,7 +220,7 @@ function isContext(object) { } let defaultContextNameIndex = 1; -function createContext(contextObject = {}, options = {}) { +function createContext(contextObject = {}, options = kEmptyObject) { if (isContext(contextObject)) { return contextObject; } @@ -305,7 +313,7 @@ function runInThisContext(code, options) { return createScript(code, options).runInThisContext(options); } -function compileFunction(code, params, options = {}) { +function compileFunction(code, params, options = kEmptyObject) { validateString(code, 'code'); if (params !== undefined) { validateArray(params, 'params'); @@ -395,7 +403,7 @@ const measureMemoryExecutions = { eager: constants.measureMemory.execution.EAGER, }; -function measureMemory(options = {}) { +function measureMemory(options = kEmptyObject) { emitExperimentalWarning('vm.measureMemory'); validateObject(options, 'options'); const { mode = 'summary', execution = 'default' } = options; diff --git a/lib/wasi.js b/lib/wasi.js index 43ecf94b4cb..2a0770bf6db 100644 --- a/lib/wasi.js +++ b/lib/wasi.js @@ -10,11 +10,12 @@ const { } = primordials; const { - ERR_INVALID_ARG_TYPE, ERR_WASI_ALREADY_STARTED } = require('internal/errors').codes; -const { emitExperimentalWarning } = require('internal/util'); -const { isArrayBuffer } = require('internal/util/types'); +const { + emitExperimentalWarning, + kEmptyObject, +} = require('internal/util'); const { validateArray, validateBoolean, @@ -36,26 +37,12 @@ function setupInstance(self, instance) { validateObject(instance, 'instance'); validateObject(instance.exports, 'instance.exports'); - // WASI::_SetMemory() in src/node_wasi.cc only expects that |memory| is - // an object. It will try to look up the .buffer property when needed - // and fail with UVWASI_EINVAL when the property is missing or is not - // an ArrayBuffer. Long story short, we don't need much validation here - // but we type-check anyway because it helps catch bugs in the user's - // code early. - validateObject(instance.exports.memory, 'instance.exports.memory'); - if (!isArrayBuffer(instance.exports.memory.buffer)) { - throw new ERR_INVALID_ARG_TYPE( - 'instance.exports.memory.buffer', - ['WebAssembly.Memory'], - instance.exports.memory.buffer); - } - self[kInstance] = instance; self[kSetMemory](instance.exports.memory); } class WASI { - constructor(options = {}) { + constructor(options = kEmptyObject) { validateObject(options, 'options'); if (options.args !== undefined) diff --git a/lib/zlib.js b/lib/zlib.js index 718f72af676..9bde1997d95 100644 --- a/lib/zlib.js +++ b/lib/zlib.js @@ -308,6 +308,7 @@ ObjectSetPrototypeOf(ZlibBase.prototype, Transform.prototype); ObjectSetPrototypeOf(ZlibBase, Transform); ObjectDefineProperty(ZlibBase.prototype, '_closed', { + __proto__: null, configurable: true, enumerable: true, get() { @@ -320,6 +321,7 @@ ObjectDefineProperty(ZlibBase.prototype, '_closed', { // that have this concept, where it stands for the number of bytes read // *from* the stream (that is, net.Socket/tls.Socket & file system streams). ObjectDefineProperty(ZlibBase.prototype, 'bytesRead', { + __proto__: null, configurable: true, enumerable: true, get: deprecate(function() { @@ -871,6 +873,7 @@ ObjectSetPrototypeOf(BrotliDecompress, Brotli); function createProperty(ctor) { return { + __proto__: null, configurable: true, enumerable: true, value: function(options) { @@ -882,6 +885,7 @@ function createProperty(ctor) { // Legacy alias on the C++ wrapper object. This is not public API, so we may // want to runtime-deprecate it at some point. There's no hurry, though. ObjectDefineProperty(binding.Zlib.prototype, 'jsref', { + __proto__: null, get() { return this[owner_symbol]; }, set(v) { return this[owner_symbol] = v; } }); @@ -930,11 +934,13 @@ ObjectDefineProperties(module.exports, { createBrotliCompress: createProperty(BrotliCompress), createBrotliDecompress: createProperty(BrotliDecompress), constants: { + __proto__: null, configurable: false, enumerable: true, value: constants }, codes: { + __proto__: null, enumerable: true, writable: false, value: ObjectFreeze(codes) @@ -946,6 +952,7 @@ ObjectDefineProperties(module.exports, { for (const bkey of ObjectKeys(constants)) { if (StringPrototypeStartsWith(bkey, 'BROTLI')) continue; ObjectDefineProperty(module.exports, bkey, { + __proto__: null, enumerable: false, value: constants[bkey], writable: false }); } diff --git a/node.gyp b/node.gyp index 74e9f9cc2e3..b220baf7ad9 100644 --- a/node.gyp +++ b/node.gyp @@ -7,6 +7,7 @@ 'node_use_dtrace%': 'false', 'node_use_etw%': 'false', 'node_no_browser_globals%': 'false', + 'node_snapshot_main%': '', 'node_use_node_snapshot%': 'false', 'node_use_v8_platform%': 'true', 'node_use_bundled_v8%': 'true', @@ -172,6 +173,12 @@ 'RandomizedBaseAddress': 2, # enable ASLR 'DataExecutionPrevention': 2, # enable DEP 'AllowIsolation': 'true', + # By default, the MSVC linker only reserves 1 MiB of stack memory for + # each thread, whereas other platforms typically allow much larger + # stack memory sections. We raise the limit to make it more consistent + # across platforms and to support the few use cases that require large + # amounts of stack memory, without having to modify the node binary. + 'StackReserveSize': 0x800000, }, }, @@ -195,6 +202,16 @@ 'dependencies': [ 'node_aix_shared' ], }, { 'dependencies': [ '<(node_lib_target_name)' ], + 'conditions': [ + ['OS=="win" and node_shared=="true"', { + 'dependencies': ['generate_node_def'], + 'msvs_settings': { + 'VCLinkerTool': { + 'ModuleDefinitionFile': '<(PRODUCT_DIR)/<(node_core_target_name).def', + }, + }, + }], + ], }], [ 'node_intermediate_lib_type=="static_library" and node_shared=="false"', { 'xcode_settings': { @@ -212,7 +229,7 @@ }, }, 'conditions': [ - ['OS != "aix" and OS != "mac"', { + ['OS != "aix" and OS != "mac" and OS != "ios"', { 'ldflags': [ '-Wl,--whole-archive', '<(obj_dir)/<(STATIC_LIB_PREFIX)<(node_core_target_name)<(STATIC_LIB_SUFFIX)', @@ -234,8 +251,15 @@ }], [ 'node_shared=="true"', { 'xcode_settings': { - 'OTHER_LDFLAGS': [ '-Wl,-rpath,@loader_path', ], + 'OTHER_LDFLAGS': [ '-Wl,-rpath,@loader_path', '-Wl,-rpath,@loader_path/../lib'], }, + 'conditions': [ + ['OS=="linux"', { + 'ldflags': [ + '-Wl,-rpath,\\$$ORIGIN/../lib' + ], + }], + ], }], [ 'enable_lto=="true"', { 'xcode_settings': { @@ -315,23 +339,47 @@ 'dependencies': [ 'node_mksnapshot', ], - 'actions': [ - { - 'action_name': 'node_mksnapshot', - 'process_outputs_as_sources': 1, - 'inputs': [ - '<(node_mksnapshot_exec)', - ], - 'outputs': [ - '<(SHARED_INTERMEDIATE_DIR)/node_snapshot.cc', + 'conditions': [ + ['node_snapshot_main!=""', { + 'actions': [ + { + 'action_name': 'node_mksnapshot', + 'process_outputs_as_sources': 1, + 'inputs': [ + '<(node_mksnapshot_exec)', + '<(node_snapshot_main)', + ], + 'outputs': [ + '<(SHARED_INTERMEDIATE_DIR)/node_snapshot.cc', + ], + 'action': [ + '<(node_mksnapshot_exec)', + '--build-snapshot', + '<(node_snapshot_main)', + '<@(_outputs)', + ], + }, ], - 'action': [ - '<@(_inputs)', - '<@(_outputs)', + }, { + 'actions': [ + { + 'action_name': 'node_mksnapshot', + 'process_outputs_as_sources': 1, + 'inputs': [ + '<(node_mksnapshot_exec)', + ], + 'outputs': [ + '<(SHARED_INTERMEDIATE_DIR)/node_snapshot.cc', + ], + 'action': [ + '<@(_inputs)', + '<@(_outputs)', + ], + }, ], - }, + }], ], - }, { + }, { 'sources': [ 'src/node_snapshot_stub.cc' ], @@ -354,9 +402,13 @@ 'include_dirs': [ 'src', - '<(SHARED_INTERMEDIATE_DIR)' # for node_natives.h + '<(SHARED_INTERMEDIATE_DIR)', # for node_natives.h + 'deps/strontium/include', + 'deps/metacache', + 'deps/cwalk/include' ], 'dependencies': [ + 'deps/base64/base64.gyp:base64', 'deps/googletest/googletest.gyp:gtest_prod', 'deps/histogram/histogram.gyp:histogram', 'deps/uvwasi/uvwasi.gyp:uvwasi', @@ -395,6 +447,7 @@ 'src/node_binding.cc', 'src/node_blob.cc', 'src/node_buffer.cc', + 'src/node_builtins.cc', 'src/node_config.cc', 'src/node_constants.cc', 'src/node_contextify.cc', @@ -410,8 +463,7 @@ 'src/node_main_instance.cc', 'src/node_messaging.cc', 'src/node_metadata.cc', - 'src/node_native_module.cc', - 'src/node_native_module_env.cc', + 'src/node_builtins_env.cc', 'src/node_options.cc', 'src/node_os.cc', 'src/node_perf.cc', @@ -464,8 +516,6 @@ 'src/aliased_buffer.h', 'src/aliased_struct.h', 'src/aliased_struct-inl.h', - 'src/allocated_buffer.h', - 'src/allocated_buffer-inl.h', 'src/async_wrap.h', 'src/async_wrap-inl.h', 'src/base_object.h', @@ -496,6 +546,7 @@ 'src/node_binding.h', 'src/node_blob.h', 'src/node_buffer.h', + 'src/node_builtins.h', 'src/node_constants.h', 'src/node_context_data.h', 'src/node_contextify.h', @@ -516,8 +567,7 @@ 'src/node_messaging.h', 'src/node_metadata.h', 'src/node_mutex.h', - 'src/node_native_module.h', - 'src/node_native_module_env.h', + 'src/node_builtins_env.h', 'src/node_object_wrap.h', 'src/node_options.h', 'src/node_options-inl.h', @@ -530,6 +580,7 @@ 'src/node_revert.h', 'src/node_root_certs.h', 'src/node_snapshotable.h', + 'src/node_snapshot_builder.h', 'src/node_sockaddr.h', 'src/node_sockaddr-inl.h', 'src/node_stat_watcher.h', @@ -573,6 +624,10 @@ '<@(deps_files)', # node.gyp is added by default, common.gypi is added for change detection 'common.gypi', + "deps/strontium/src/util/log.cc", + "deps/strontium/src/pgo/metacache-impl.cc", + "deps/strontium/src/pgo/require-cache.cc", + 'deps/cwalk/src/cwalk.c' ], 'variables': { @@ -580,6 +635,8 @@ 'openssl_default_cipher_list%': '', }, + 'cflags': ['-Werror=unused-result'], + 'defines': [ 'NODE_ARCH="<(target_arch)"', 'NODE_PLATFORM="<(OS)"', @@ -640,6 +697,7 @@ 'libraries': [ 'Dbghelp', 'Psapi', + 'Winmm', 'Ws2_32', ], }], @@ -739,7 +797,6 @@ 'src/crypto/crypto_bio.h', 'src/crypto/crypto_clienthello-inl.h', 'src/crypto/crypto_dh.h', - 'src/crypto/crypto_groups.h', 'src/crypto/crypto_hmac.h', 'src/crypto/crypto_rsa.h', 'src/crypto/crypto_spkac.h', @@ -1082,6 +1139,7 @@ 'dependencies': [ '<(node_lib_target_name)', + 'deps/base64/base64.gyp:base64', 'deps/googletest/googletest.gyp:gtest', 'deps/googletest/googletest.gyp:gtest_main', 'deps/histogram/histogram.gyp:histogram', @@ -1126,6 +1184,7 @@ 'test/cctest/test_node_api.cc', 'test/cctest/test_per_process.cc', 'test/cctest/test_platform.cc', + 'test/cctest/test_report.cc', 'test/cctest/test_json_utils.cc', 'test/cctest/test_sockaddr.cc', 'test/cctest/test_traced_value.cc', @@ -1139,6 +1198,7 @@ 'HAVE_OPENSSL=1', ], 'sources': [ + 'test/cctest/test_crypto_clienthello.cc', 'test/cctest/test_node_crypto.cc', ] }], @@ -1393,5 +1453,40 @@ }, ] }], # end aix section + ['OS=="win" and node_shared=="true"', { + 'targets': [ + { + 'target_name': 'gen_node_def', + 'type': 'executable', + 'sources': [ + 'tools/gen_node_def.cc' + ], + }, + { + 'target_name': 'generate_node_def', + 'dependencies': [ + 'gen_node_def', + '<(node_lib_target_name)', + ], + 'type': 'none', + 'actions': [ + { + 'action_name': 'generate_node_def_action', + 'inputs': [ + '<(PRODUCT_DIR)/<(node_lib_target_name).dll' + ], + 'outputs': [ + '<(PRODUCT_DIR)/<(node_core_target_name).def', + ], + 'action': [ + '<(PRODUCT_DIR)/gen_node_def.exe', + '<@(_inputs)', + '<@(_outputs)', + ], + }, + ], + }, + ], + }], # end win section ], # end conditions block } diff --git a/node.gypi b/node.gypi index 713ddbb74a1..2f08b8a4a15 100644 --- a/node.gypi +++ b/node.gypi @@ -29,7 +29,7 @@ [ 'clang==1', { 'cflags': [ '-Werror=undefined-inline', ] }], - [ 'node_shared=="false" and "<(_type)"=="executable"', { + [ '"<(_type)"=="executable"', { 'msvs_settings': { 'VCManifestTool': { 'EmbedManifest': 'true', @@ -41,6 +41,19 @@ 'defines': [ 'NODE_SHARED_MODE', ], + 'conditions': [ + ['"<(_type)"=="executable"', { + 'defines': [ + 'USING_UV_SHARED', + 'USING_V8_SHARED', + 'BUILDING_NODE_EXTENSION' + ], + 'defines!': [ + 'BUILDING_V8_SHARED=1', + 'BUILDING_UV_SHARED=1' + ] + }], + ], }], [ 'OS=="win"', { 'defines!': [ @@ -132,7 +145,7 @@ }, }, 'conditions': [ - ['OS!="aix" and node_shared=="false"', { + ['OS!="aix" and OS!="ios" and node_shared=="false"', { 'ldflags': [ '-Wl,--whole-archive', '<(obj_dir)/deps/zlib/<(STATIC_LIB_PREFIX)zlib<(STATIC_LIB_SUFFIX)', @@ -171,7 +184,7 @@ }, }, 'conditions': [ - ['OS!="aix" and node_shared=="false"', { + ['OS!="aix" and OS!="ios" and node_shared=="false"', { 'ldflags': [ '-Wl,--whole-archive', '<(obj_dir)/deps/uv/<(STATIC_LIB_PREFIX)uv<(STATIC_LIB_SUFFIX)', @@ -304,6 +317,12 @@ }], ], }], + [ 'coverage=="true"', { + 'defines': [ + 'ALLOW_ATTACHING_DEBUGGER_IN_WATCH_MODE', + 'ALLOW_ATTACHING_DEBUGGER_IN_TEST_RUNNER', + ], + }], [ 'OS=="sunos"', { 'ldflags': [ '-Wl,-M,/usr/lib/ld/map.noexstk' ], }], diff --git a/onboarding.md b/onboarding.md index f17b24c50f1..2bee19f7820 100644 --- a/onboarding.md +++ b/onboarding.md @@ -19,8 +19,8 @@ onboarding session. * Prior to the onboarding session, add the new Collaborator to [the collaborators team](https://github.com/orgs/nodejs/teams/collaborators). -* Ask them if they want to join any subsystem teams. See - [Who to CC in the issue tracker][who-to-cc]. +* Ask them if they want to join any [subsystem teams](https://github.com/orgs/nodejs/teams/core/teams) + and add them accordingly. See [Who to CC in the issue tracker][who-to-cc]. ## Onboarding session @@ -39,11 +39,11 @@ onboarding session. * Always create a branch in your own GitHub fork for pull requests * Branches in the `nodejs/node` repository are only for release lines * Add the canonical nodejs repository as `upstream` remote: - * `git remote add upstream git://github.com/nodejs/node.git` + * `git remote add upstream git@github.com:nodejs/node.git` * To update from `upstream`: - * `git checkout master` - * `git remote update -p` OR `git fetch --all` - * `git merge --ff-only upstream/master` (or `REMOTENAME/BRANCH`) + * `git checkout main` + * `git fetch upstream HEAD` + * `git reset --hard FETCH_HEAD` * Make a new branch for each pull request you submit. * Membership: Consider making your membership in the Node.js GitHub organization public. This makes it easier to identify collaborators. @@ -144,12 +144,12 @@ The project has a venue for real-time discussion: * Approving a change * Collaborators indicate that they have reviewed and approve of the changes in - a pull request using GitHub’s approval interface + a pull request using GitHub's approval interface * Some people like to comment `LGTM` (“Looks Good To Me”) - * You have the authority to approve any other collaborator’s work. + * You have the authority to approve any other collaborator's work. * You cannot approve your own pull requests. * When explicitly using `Changes requested`, show empathy – comments will - usually be addressed even if you don’t use it. + usually be addressed even if you don't use it. * If you do, it is nice if you are available later to check whether your comments have been addressed * If you see that the requested changes have been made, you can clear @@ -158,7 +158,7 @@ The project has a venue for real-time discussion: comments to block the pull request from landing. * What belongs in Node.js: - * Opinions vary – it’s good to have a broad collaborator base for that reason! + * Opinions vary – it's good to have a broad collaborator base for that reason! * If Node.js itself needs it (due to historical reasons), then it belongs in Node.js. * That is to say, `url` is there because of `http`, `freelist` is there @@ -203,9 +203,9 @@ needs to be pointed out separately during the onboarding. ## Exercise: Make a pull request adding yourself to the README * Example: - + * For raw commit message: - `git show --format=%B b58fe52692659c0bc25ddbe6afa7f4ae2c7f14a8` + `git show --format=%B 6669b3857f0f43ee0296eb7ac45086cd907b9e94` * Collaborators are in alphabetical order by GitHub username. * Optionally, include your personal pronouns. * Add the `Fixes: ` to the commit message @@ -241,8 +241,7 @@ needs to be pointed out separately during the onboarding. * * * - * - * + * * * The OpenJS Foundation hosts regular summits for active contributors to the Node.js project, where we have face-to-face discussions about our work on the diff --git a/src/README.md b/src/README.md index 623c3774971..314cd343418 100644 --- a/src/README.md +++ b/src/README.md @@ -1,6 +1,6 @@ # Node.js C++ codebase -Hi! 👋 You’ve found the C++ code backing Node.js. This README aims to help you +Hi! 👋 You've found the C++ code backing Node.js. This README aims to help you get started working on it and document some idioms you may encounter while doing so. @@ -20,9 +20,9 @@ V8 does not provide much public API documentation beyond what is available in its C++ header files, most importantly `v8.h`, which can be accessed online in the following locations: -* On GitHub: [`v8.h` in Node.js master][] -* On GitHub: [`v8.h` in V8 master][] -* On the Chromium project’s Code Search application: [`v8.h` in Code Search][] +* On GitHub: [`v8.h` in Node.js][] +* On GitHub: [`v8.h` in V8][] +* On the Chromium project's Code Search application: [`v8.h` in Code Search][] V8 also provides an [introduction for V8 embedders][], which can be useful for understanding some of the concepts it uses in its @@ -42,7 +42,7 @@ There is a [reference documentation for the libuv API][]. The Node.js C++ files follow this structure: -The `.h` header files contain declarations, and sometimes definitions that don’t +The `.h` header files contain declarations, and sometimes definitions that don't require including other headers (e.g. getters, setters, etc.). They should only include other `.h` header files and nothing else. @@ -272,7 +272,7 @@ Often, the `Context` is passed around for [exception handling][]. Typical ways of accessing the current `Context` in the Node.js code are: * Given an [`Isolate`][], using `isolate->GetCurrentContext()`. -* Given an [`Environment`][], using `env->context()` to get the `Environment`’s +* Given an [`Environment`][], using `env->context()` to get the `Environment`'s main context. @@ -288,7 +288,7 @@ The current event loop can be accessed using `env->event_loop()` given an [`Environment`][] instance. The restriction of using a single event loop is not inherent to the design of Node.js, and a sufficiently committed person could restructure Node.js to provide e.g. the ability to run parts of Node.js -inside an event loop separate from the active thread’s event loop. +inside an event loop separate from the active thread's event loop. @@ -351,7 +351,7 @@ The platform can be accessed through `isolate_data->platform()` given an * The current Node.js instance was not started by an embedder; or * The current Node.js instance was started by an embedder whose `v8::Platform` - implementation also implement’s the `node::MultiIsolatePlatform` interface + implementation also implement's the `node::MultiIsolatePlatform` interface and who passed this to Node.js. @@ -390,36 +390,37 @@ void Initialize(Local target, void* priv) { Environment* env = Environment::GetCurrent(context); - env->SetMethod(target, "getaddrinfo", GetAddrInfo); - env->SetMethod(target, "getnameinfo", GetNameInfo); + SetMethod(context, target, "getaddrinfo", GetAddrInfo); + SetMethod(context, target, "getnameinfo", GetNameInfo); // 'SetMethodNoSideEffect' means that debuggers can safely execute this // function for e.g. previews. - env->SetMethodNoSideEffect(target, "canonicalizeIP", CanonicalizeIP); + SetMethodNoSideEffect(context, target, "canonicalizeIP", CanonicalizeIP); // ... more code ... + Isolate* isolate = env->isolate(); // Building the `ChannelWrap` class for JS: Local channel_wrap = - env->NewFunctionTemplate(ChannelWrap::New); + NewFunctionTemplate(isolate, ChannelWrap::New); // Allow for 1 internal field, see `BaseObject` for details on this: channel_wrap->InstanceTemplate()->SetInternalFieldCount(1); channel_wrap->Inherit(AsyncWrap::GetConstructorTemplate(env)); // Set various methods on the class (i.e. on the prototype): - env->SetProtoMethod(channel_wrap, "queryAny", Query); - env->SetProtoMethod(channel_wrap, "queryA", Query); + SetProtoMethod(isolate, channel_wrap, "queryAny", Query); + SetProtoMethod(isolate, channel_wrap, "queryA", Query); // ... - env->SetProtoMethod(channel_wrap, "querySoa", Query); - env->SetProtoMethod(channel_wrap, "getHostByAddr", Query); + SetProtoMethod(isolate, channel_wrap, "querySoa", Query); + SetProtoMethod(isolate, channel_wrap, "getHostByAddr", Query); - env->SetProtoMethodNoSideEffect(channel_wrap, "getServers", GetServers); + SetProtoMethodNoSideEffect(isolate, channel_wrap, "getServers", GetServers); - env->SetConstructorFunction(target, "ChannelWrap", channel_wrap); + SetConstructorFunction(context, target, "ChannelWrap", channel_wrap); } // Run the `Initialize` function when loading this module through -// `internalBinding('cares_wrap')` in Node.js’s built-in JavaScript code: +// `internalBinding('cares_wrap')` in Node.js's built-in JavaScript code: NODE_MODULE_CONTEXT_AWARE_INTERNAL(cares_wrap, Initialize) ``` @@ -484,7 +485,7 @@ That object is always a [`BaseObject`][]. Its class needs to have a static `type_name` field based on a constant string, in order to disambiguate it from other classes of this type, -and which could e.g. match the binding’s name (in the example above, that would +and which could e.g. match the binding's name (in the example above, that would be `cares_wrap`). ```cpp @@ -556,7 +557,7 @@ the process otherwise. `maybe.FromJust()` (aka `maybe.ToChecked()`) can be used to access the value and crash the process if it is not set. This should only be performed if it is actually sure that the operation has -not failed. A lot of Node.js’s source code does **not** follow this rule, and +not failed. A lot of the Node.js source code does **not** follow this rule, and can be brought to crash through this. In particular, it is often not safe to assume that an operation does not throw @@ -619,20 +620,20 @@ v8::Maybe SumNumbers(v8::Local context, for (uint32_t i = 0; i < array_of_integers->Length(); i++) { v8::Local entry; - if (array_of_integers->Get(context, i).ToLocal(&entry)) { + if (!array_of_integers->Get(context, i).ToLocal(&entry)) { // Oops, we might have hit a getter that throws an exception! - // It’s better to not continue return an empty (“nothing”) Maybe. + // It's better to not continue return an empty (“nothing”) Maybe. return v8::Nothing(); } if (!entry->IsNumber()) { - // Let’s just skip any non-numbers. It would also be reasonable to throw + // Let's just skip any non-numbers. It would also be reasonable to throw // an exception here, e.g. using the error system in src/node_errors.h, // and then to return an empty Maybe again. continue; } - // This cast is valid, because we’ve made sure it’s really a number. + // This cast is valid, because we've made sure it's really a number. v8::Local entry_as_number = entry.As(); sum += entry_as_number->Value(); @@ -643,7 +644,7 @@ v8::Maybe SumNumbers(v8::Local context, // Function that is exposed to JS: void SumNumbers(const v8::FunctionCallbackInfo& args) { - // This will crash if the first argument is not an array. Let’s assume we + // This will crash if the first argument is not an array. Let's assume we // have performed type checking in a JavaScript wrapper function. CHECK(args[0]->IsArray()); @@ -859,7 +860,7 @@ this information is provided to async tracking tools. The `AsyncWrap` class has a set of methods called `MakeCallback()`, with the intention of the naming being that it is used to “make calls back into JavaScript” from the event loop, rather than making callbacks in some way. -(As the naming has made its way into Node.js’s public API, it’s not worth +(As the naming has made its way into the Node.js public API, it's not worth the breakage of fixing it). `MakeCallback()` generally calls a method on the JavaScript object associated @@ -936,7 +937,7 @@ classes provide the same facilities as [`MakeCallback()`][], namely: Usually, using `AsyncWrap::MakeCallback()` or using the constructor taking an `AsyncWrap*` argument (i.e. used as -`InternalCallbackScope callback_scope(this);`) suffices inside of Node.js’s +`InternalCallbackScope callback_scope(this);`) suffices inside of the Node.js C++ codebase. ## C++ utilities @@ -1047,8 +1048,8 @@ static void GetUserInfo(const FunctionCallbackInfo& args) { [`req_wrap.h`]: req_wrap.h [`util.h`]: util.h [`v8.h` in Code Search]: https://cs.chromium.org/chromium/src/v8/include/v8.h -[`v8.h` in Node.js master]: https://github.com/nodejs/node/blob/master/deps/v8/include/v8.h -[`v8.h` in V8 master]: https://github.com/v8/v8/blob/master/include/v8.h +[`v8.h` in Node.js]: https://github.com/nodejs/node/blob/HEAD/deps/v8/include/v8.h +[`v8.h` in V8]: https://github.com/v8/v8/blob/HEAD/include/v8.h [`vm` module]: https://nodejs.org/api/vm.html [binding function]: #binding-functions [cleanup hooks]: #cleanup-hooks diff --git a/src/allocated_buffer-inl.h b/src/allocated_buffer-inl.h deleted file mode 100644 index 2dee6f09a3e..00000000000 --- a/src/allocated_buffer-inl.h +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef SRC_ALLOCATED_BUFFER_INL_H_ -#define SRC_ALLOCATED_BUFFER_INL_H_ - -#include "allocated_buffer.h" -#include "base_object-inl.h" -#include "node_buffer.h" -#include "env-inl.h" -#include "uv.h" -#include "v8.h" -#include "util-inl.h" -#include "node_internals.h" - -namespace node { - -// It's a bit awkward to define this Buffer::New() overload here, but it -// avoids a circular dependency with node_internals.h. -namespace Buffer { -v8::MaybeLocal New(Environment* env, - v8::Local ab, - size_t byte_offset, - size_t length); -} - -NoArrayBufferZeroFillScope::NoArrayBufferZeroFillScope( - IsolateData* isolate_data) - : node_allocator_(isolate_data->node_allocator()) { - if (node_allocator_ != nullptr) node_allocator_->zero_fill_field()[0] = 0; -} - -NoArrayBufferZeroFillScope::~NoArrayBufferZeroFillScope() { - if (node_allocator_ != nullptr) node_allocator_->zero_fill_field()[0] = 1; -} - -AllocatedBuffer AllocatedBuffer::AllocateManaged( - Environment* env, - size_t size) { - NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); - std::unique_ptr bs = - v8::ArrayBuffer::NewBackingStore(env->isolate(), size); - return AllocatedBuffer(env, std::move(bs)); -} - -AllocatedBuffer::AllocatedBuffer( - Environment* env, std::unique_ptr bs) - : env_(env), backing_store_(std::move(bs)) {} - -AllocatedBuffer::AllocatedBuffer( - Environment* env, uv_buf_t buffer) - : env_(env) { - if (buffer.base == nullptr) return; - auto map = env->released_allocated_buffers(); - auto it = map->find(buffer.base); - CHECK_NE(it, map->end()); - backing_store_ = std::move(it->second); - map->erase(it); -} - -void AllocatedBuffer::Resize(size_t len) { - if (len == 0) { - backing_store_ = v8::ArrayBuffer::NewBackingStore(env_->isolate(), 0); - return; - } - NoArrayBufferZeroFillScope no_zero_fill_scope(env_->isolate_data()); - backing_store_ = v8::BackingStore::Reallocate( - env_->isolate(), std::move(backing_store_), len); -} - -uv_buf_t AllocatedBuffer::release() { - if (data() == nullptr) return uv_buf_init(nullptr, 0); - - CHECK_NOT_NULL(env_); - uv_buf_t ret = uv_buf_init(data(), size()); - env_->released_allocated_buffers()->emplace( - ret.base, std::move(backing_store_)); - return ret; -} - -char* AllocatedBuffer::data() { - if (!backing_store_) return nullptr; - return static_cast(backing_store_->Data()); -} - -const char* AllocatedBuffer::data() const { - if (!backing_store_) return nullptr; - return static_cast(backing_store_->Data()); -} - - -size_t AllocatedBuffer::size() const { - if (!backing_store_) return 0; - return backing_store_->ByteLength(); -} - -void AllocatedBuffer::clear() { - backing_store_.reset(); -} - -v8::MaybeLocal AllocatedBuffer::ToBuffer() { - v8::Local ab = ToArrayBuffer(); - return Buffer::New(env_, ab, 0, ab->ByteLength()) - .FromMaybe(v8::Local()); -} - -v8::Local AllocatedBuffer::ToArrayBuffer() { - return v8::ArrayBuffer::New(env_->isolate(), std::move(backing_store_)); -} - -} // namespace node - -#endif // SRC_ALLOCATED_BUFFER_INL_H_ diff --git a/src/allocated_buffer.h b/src/allocated_buffer.h deleted file mode 100644 index 9cf41bffdc1..00000000000 --- a/src/allocated_buffer.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef SRC_ALLOCATED_BUFFER_H_ -#define SRC_ALLOCATED_BUFFER_H_ - -#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS - -#include "base_object.h" -#include "uv.h" -#include "v8.h" -#include "env.h" - -namespace node { - -class Environment; - -// Disables zero-filling for ArrayBuffer allocations in this scope. This is -// similar to how we implement Buffer.allocUnsafe() in JS land. -class NoArrayBufferZeroFillScope{ - public: - inline explicit NoArrayBufferZeroFillScope(IsolateData* isolate_data); - inline ~NoArrayBufferZeroFillScope(); - - private: - NodeArrayBufferAllocator* node_allocator_; - - friend class Environment; -}; - -// A unique-pointer-ish object that is compatible with the JS engine's -// ArrayBuffer::Allocator. -// TODO(addaleax): We may want to start phasing this out as it's only a -// thin wrapper around v8::BackingStore at this point -struct AllocatedBuffer { - public: - // Utilities that allocate memory using the Isolate's ArrayBuffer::Allocator. - // In particular, using AllocateManaged() will provide a RAII-style object - // with easy conversion to `Buffer` and `ArrayBuffer` objects. - inline static AllocatedBuffer AllocateManaged(Environment* env, size_t size); - - AllocatedBuffer() = default; - inline AllocatedBuffer( - Environment* env, std::unique_ptr bs); - // For this constructor variant, `buffer` *must* come from an earlier call - // to .release - inline AllocatedBuffer(Environment* env, uv_buf_t buffer); - - inline void Resize(size_t len); - - inline uv_buf_t release(); - inline char* data(); - inline const char* data() const; - inline size_t size() const; - inline void clear(); - - inline v8::MaybeLocal ToBuffer(); - inline v8::Local ToArrayBuffer(); - - AllocatedBuffer(AllocatedBuffer&& other) = default; - AllocatedBuffer& operator=(AllocatedBuffer&& other) = default; - AllocatedBuffer(const AllocatedBuffer& other) = delete; - AllocatedBuffer& operator=(const AllocatedBuffer& other) = delete; - - private: - Environment* env_ = nullptr; - std::unique_ptr backing_store_; - - friend class Environment; -}; - -} // namespace node - -#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS - -#endif // SRC_ALLOCATED_BUFFER_H_ diff --git a/src/api/embed_helpers.cc b/src/api/embed_helpers.cc index 8e2fc67695b..bd0459f20b1 100644 --- a/src/api/embed_helpers.cc +++ b/src/api/embed_helpers.cc @@ -3,6 +3,7 @@ #include "debug_utils-inl.h" using v8::Context; +using v8::Function; using v8::Global; using v8::HandleScope; using v8::Isolate; @@ -44,6 +45,13 @@ Maybe SpinEventLoop(Environment* env) { if (EmitProcessBeforeExit(env).IsNothing()) break; + { + HandleScope handle_scope(isolate); + if (env->RunSnapshotSerializeCallback().IsEmpty()) { + break; + } + } + // Emit `beforeExit` if the loop became alive either after emitting // event, or after running some callbacks. more = uv_loop_alive(env->event_loop()); @@ -54,6 +62,11 @@ Maybe SpinEventLoop(Environment* env) { if (env->is_stopping()) return Nothing(); env->set_trace_sync_io(false); + // Clear the serialize callback even though the JS-land queue should + // be empty this point so that the deserialized instance won't + // attempt to call into JS again. + env->set_snapshot_serialize_callback(Local()); + env->PrintInfoForSnapshotIfDebug(); env->VerifyNoStrongBaseObjects(); return EmitProcessExit(env); diff --git a/src/api/encoding.cc b/src/api/encoding.cc index f64aeee15c3..3ccfd6c84b7 100644 --- a/src/api/encoding.cc +++ b/src/api/encoding.cc @@ -15,6 +15,10 @@ enum encoding ParseEncoding(const char* encoding, switch (encoding[0]) { case 'u': case 'U': + // Note: the two first conditions are needed for performance reasons + // as "utf8"/"utf-8" is a common case. + // (same for other cases below) + // utf8, utf16le if (encoding[1] == 't' && encoding[2] == 'f') { // Skip `-` @@ -150,7 +154,7 @@ ssize_t DecodeWrite(Isolate* isolate, size_t buflen, Local val, enum encoding encoding) { - return StringBytes::Write(isolate, buf, buflen, val, encoding, nullptr); + return StringBytes::Write(isolate, buf, buflen, val, encoding); } } // namespace node diff --git a/src/api/environment.cc b/src/api/environment.cc index 55b895c235f..0e0dd42aafb 100644 --- a/src/api/environment.cc +++ b/src/api/environment.cc @@ -1,8 +1,10 @@ #include "node.h" +#include "node_builtins.h" #include "node_context_data.h" #include "node_errors.h" #include "node_internals.h" -#include "node_native_module_env.h" +#include "node_builtins_env.h" +#include "node_options-inl.h" #include "node_platform.h" #include "node_v8_platform-inl.h" #include "uv.h" @@ -83,16 +85,16 @@ MaybeLocal PrepareStackTraceCallback(Local context, void* NodeArrayBufferAllocator::Allocate(size_t size) { void* ret; if (zero_fill_field_ || per_process::cli_options->zero_fill_all_buffers) - ret = UncheckedCalloc(size); + ret = allocator_->Allocate(size); else - ret = UncheckedMalloc(size); + ret = allocator_->AllocateUninitialized(size); if (LIKELY(ret != nullptr)) total_mem_usage_.fetch_add(size, std::memory_order_relaxed); return ret; } void* NodeArrayBufferAllocator::AllocateUninitialized(size_t size) { - void* ret = node::UncheckedMalloc(size); + void* ret = allocator_->AllocateUninitialized(size); if (LIKELY(ret != nullptr)) total_mem_usage_.fetch_add(size, std::memory_order_relaxed); return ret; @@ -100,7 +102,7 @@ void* NodeArrayBufferAllocator::AllocateUninitialized(size_t size) { void* NodeArrayBufferAllocator::Reallocate( void* data, size_t old_size, size_t size) { - void* ret = UncheckedRealloc(static_cast(data), size); + void* ret = allocator_->Reallocate(data, old_size, size); if (LIKELY(ret != nullptr) || UNLIKELY(size == 0)) total_mem_usage_.fetch_add(size - old_size, std::memory_order_relaxed); return ret; @@ -108,7 +110,7 @@ void* NodeArrayBufferAllocator::Reallocate( void NodeArrayBufferAllocator::Free(void* data, size_t size) { total_mem_usage_.fetch_sub(size, std::memory_order_relaxed); - free(data); + allocator_->Free(data, size); } DebuggingArrayBufferAllocator::~DebuggingArrayBufferAllocator() { @@ -141,8 +143,12 @@ void* DebuggingArrayBufferAllocator::Reallocate(void* data, Mutex::ScopedLock lock(mutex_); void* ret = NodeArrayBufferAllocator::Reallocate(data, old_size, size); if (ret == nullptr) { - if (size == 0) // i.e. equivalent to free(). + if (size == 0) { // i.e. equivalent to free(). + // suppress coverity warning as data is used as key versus as pointer + // in UnregisterPointerInternal + // coverity[pass_freed_arg] UnregisterPointerInternal(data, old_size); + } return nullptr; } @@ -233,6 +239,7 @@ void SetIsolateErrorHandlers(v8::Isolate* isolate, const IsolateSettings& s) { auto* fatal_error_cb = s.fatal_error_callback ? s.fatal_error_callback : OnFatalError; isolate->SetFatalErrorHandler(fatal_error_cb); + isolate->SetOOMErrorHandler(OOMErrorHandler); if ((s.flags & SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK) == 0) { auto* prepare_stack_trace_cb = s.prepare_stack_trace_callback ? @@ -247,6 +254,8 @@ void SetIsolateMiscHandlers(v8::Isolate* isolate, const IsolateSettings& s) { auto* allow_wasm_codegen_cb = s.allow_wasm_code_generation_callback ? s.allow_wasm_code_generation_callback : AllowWasmCodeGenerationCallback; isolate->SetAllowWasmCodeGenerationCallback(allow_wasm_codegen_cb); + isolate->SetModifyCodeGenerationFromStringsCallback( + ModifyCodeGenerationFromStrings); if ((s.flags & SHOULD_NOT_SET_PROMISE_REJECTION_CALLBACK) == 0) { auto* promise_reject_cb = s.promise_reject_callback ? @@ -427,7 +436,7 @@ MaybeLocal LoadEnvironment( // TODO(addaleax): Avoid having a global table for all scripts. std::string name = "embedder_main_" + std::to_string(env->thread_id()); - native_module::NativeModuleEnv::Add( + builtins::BuiltinEnv::Add( name.c_str(), UnionBytes(**main_utf16, main_utf16->length())); env->set_main_utf16(std::move(main_utf16)); @@ -436,7 +445,7 @@ MaybeLocal LoadEnvironment( env->require_string()}; std::vector> args = { env->process_object(), - env->native_module_require()}; + env->builtin_module_require()}; return ExecuteBootstrapper(env, name.c_str(), ¶ms, &args); }); } @@ -641,6 +650,9 @@ bool InitializeContextForSnapshot(Local context) { Isolate* isolate = context->GetIsolate(); HandleScope handle_scope(isolate); + context->AllowCodeGenerationFromStrings(false); + context->SetEmbedderData( + ContextEmbedderIndex::kAllowCodeGenerationFromStrings, True(isolate)); context->SetEmbedderData(ContextEmbedderIndex::kAllowWasmCodeGeneration, True(isolate)); return InitializePrimordials(context); @@ -675,7 +687,7 @@ bool InitializePrimordials(Local context) { global_string, exports_string, primordials_string}; Local arguments[] = {context->Global(), exports, primordials}; MaybeLocal maybe_fn = - native_module::NativeModuleEnv::LookupAndCompile( + builtins::BuiltinEnv::LookupAndCompile( context, *module, ¶meters, nullptr); Local fn; if (!maybe_fn.ToLocal(&fn)) { @@ -751,6 +763,7 @@ ThreadId AllocateEnvironmentThreadId() { void DefaultProcessExitHandler(Environment* env, int exit_code) { env->set_can_call_into_js(false); env->stop_sub_worker_contexts(); + env->isolate()->DumpAndResetStats(); DisposePlatform(); uv_library_shutdown(); exit(exit_code); diff --git a/src/api/hooks.cc b/src/api/hooks.cc index 4076a5523e0..bf4176cc788 100644 --- a/src/api/hooks.cc +++ b/src/api/hooks.cc @@ -32,8 +32,7 @@ void EmitBeforeExit(Environment* env) { } Maybe EmitProcessBeforeExit(Environment* env) { - TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment), - "BeforeExit", env); + TRACE_EVENT0(TRACING_CATEGORY_NODE1(environment), "BeforeExit"); if (!env->destroy_async_id_list()->empty()) AsyncWrap::DestroyAsyncIdsCallback(env); @@ -66,14 +65,11 @@ Maybe EmitProcessExit(Environment* env) { Context::Scope context_scope(context); Local process_object = env->process_object(); - // TODO(addaleax): It might be nice to share process._exiting and - // process.exitCode via getter/setter pairs that pass data directly to the - // native side, so that we don't manually have to read and write JS properties - // here. These getters could use e.g. a typed array for performance. - if (process_object - ->Set(context, - FIXED_ONE_BYTE_STRING(isolate, "_exiting"), - True(isolate)).IsNothing()) return Nothing(); + // TODO(addaleax): It might be nice to share process.exitCode via + // getter/setter pairs that pass data directly to the native side, so that we + // don't manually have to read and write JS properties here. These getters + // could use e.g. a typed array for performance. + env->set_exiting(true); Local exit_code = env->exit_code_string(); Local code_v; @@ -170,6 +166,16 @@ void RemoveEnvironmentCleanupHookInternal( handle->info->env->RemoveCleanupHook(RunAsyncCleanupHook, handle->info.get()); } +void RequestInterrupt(Environment* env, void (*fun)(void* arg), void* arg) { + env->RequestInterrupt([fun, arg](Environment* env) { + // Disallow JavaScript execution during interrupt. + Isolate::DisallowJavascriptExecutionScope scope( + env->isolate(), + Isolate::DisallowJavascriptExecutionScope::CRASH_ON_FAILURE); + fun(arg); + }); +} + async_id AsyncHooksGetExecutionAsyncId(Isolate* isolate) { Environment* env = Environment::GetCurrent(isolate); if (env == nullptr) return -1; diff --git a/src/async_wrap-inl.h b/src/async_wrap-inl.h index 03745081f3b..08f305da8a3 100644 --- a/src/async_wrap-inl.h +++ b/src/async_wrap-inl.h @@ -80,13 +80,6 @@ inline v8::MaybeLocal AsyncWrap::MakeCallback( return MakeCallback(cb_v.As(), argc, argv); } - -// Defined here to avoid a circular dependency with env-inl.h. -inline AsyncHooks::DefaultTriggerAsyncIdScope ::DefaultTriggerAsyncIdScope( - AsyncWrap* async_wrap) - : DefaultTriggerAsyncIdScope(async_wrap->env(), - async_wrap->get_async_id()) {} - } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS diff --git a/src/async_wrap.cc b/src/async_wrap.cc index d5a62951a7d..d65e456930b 100644 --- a/src/async_wrap.cc +++ b/src/async_wrap.cc @@ -217,12 +217,13 @@ void AsyncWrap::WeakCallback(const WeakCallbackInfo& info) { p->env->RemoveCleanupHook(DestroyParamCleanupHook, p.get()); - if (!prop_bag->Get(p->env->context(), p->env->destroyed_string()) + if (!prop_bag.IsEmpty() && + !prop_bag->Get(p->env->context(), p->env->destroyed_string()) .ToLocal(&val)) { return; } - if (val->IsFalse()) { + if (val.IsEmpty() || val->IsFalse()) { AsyncWrap::EmitDestroy(p->env, p->asyncId); } // unique_ptr goes out of scope here and pointer is deleted. @@ -232,14 +233,16 @@ void AsyncWrap::WeakCallback(const WeakCallbackInfo& info) { static void RegisterDestroyHook(const FunctionCallbackInfo& args) { CHECK(args[0]->IsObject()); CHECK(args[1]->IsNumber()); - CHECK(args[2]->IsObject()); + CHECK(args.Length() == 2 || args[2]->IsObject()); Isolate* isolate = args.GetIsolate(); DestroyParam* p = new DestroyParam(); p->asyncId = args[1].As()->Value(); p->env = Environment::GetCurrent(args); p->target.Reset(isolate, args[0].As()); - p->propBag.Reset(isolate, args[2].As()); + if (args.Length() > 2) { + p->propBag.Reset(isolate, args[2].As()); + } p->target.SetWeak(p, AsyncWrap::WeakCallback, WeakCallbackType::kParameter); p->env->AddCleanupHook(DestroyParamCleanupHook, p); } @@ -337,12 +340,14 @@ void AsyncWrap::SetCallbackTrampoline(const FunctionCallbackInfo& args) { Local AsyncWrap::GetConstructorTemplate(Environment* env) { Local tmpl = env->async_wrap_ctor_template(); if (tmpl.IsEmpty()) { - tmpl = env->NewFunctionTemplate(nullptr); + Isolate* isolate = env->isolate(); + tmpl = NewFunctionTemplate(isolate, nullptr); tmpl->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "AsyncWrap")); tmpl->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(tmpl, "getAsyncId", AsyncWrap::GetAsyncId); - env->SetProtoMethod(tmpl, "asyncReset", AsyncWrap::AsyncReset); - env->SetProtoMethod(tmpl, "getProviderType", AsyncWrap::GetProviderType); + SetProtoMethod(isolate, tmpl, "getAsyncId", AsyncWrap::GetAsyncId); + SetProtoMethod(isolate, tmpl, "asyncReset", AsyncWrap::AsyncReset); + SetProtoMethod( + isolate, tmpl, "getProviderType", AsyncWrap::GetProviderType); env->set_async_wrap_ctor_template(tmpl); } return tmpl; @@ -356,15 +361,15 @@ void AsyncWrap::Initialize(Local target, Isolate* isolate = env->isolate(); HandleScope scope(isolate); - env->SetMethod(target, "setupHooks", SetupHooks); - env->SetMethod(target, "setCallbackTrampoline", SetCallbackTrampoline); - env->SetMethod(target, "pushAsyncContext", PushAsyncContext); - env->SetMethod(target, "popAsyncContext", PopAsyncContext); - env->SetMethod(target, "executionAsyncResource", ExecutionAsyncResource); - env->SetMethod(target, "clearAsyncIdStack", ClearAsyncIdStack); - env->SetMethod(target, "queueDestroyAsyncId", QueueDestroyAsyncId); - env->SetMethod(target, "setPromiseHooks", SetPromiseHooks); - env->SetMethod(target, "registerDestroyHook", RegisterDestroyHook); + SetMethod(context, target, "setupHooks", SetupHooks); + SetMethod(context, target, "setCallbackTrampoline", SetCallbackTrampoline); + SetMethod(context, target, "pushAsyncContext", PushAsyncContext); + SetMethod(context, target, "popAsyncContext", PopAsyncContext); + SetMethod(context, target, "executionAsyncResource", ExecutionAsyncResource); + SetMethod(context, target, "clearAsyncIdStack", ClearAsyncIdStack); + SetMethod(context, target, "queueDestroyAsyncId", QueueDestroyAsyncId); + SetMethod(context, target, "setPromiseHooks", SetPromiseHooks); + SetMethod(context, target, "registerDestroyHook", RegisterDestroyHook); PropertyAttribute ReadOnlyDontDelete = static_cast(ReadOnly | DontDelete); diff --git a/src/base64-inl.h b/src/base64-inl.h index 1b6cdd93f00..6c9280d1ff1 100644 --- a/src/base64-inl.h +++ b/src/base64-inl.h @@ -4,10 +4,15 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "base64.h" +#include "libbase64.h" #include "util.h" namespace node { +static constexpr char base64_table_url[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789-_"; + extern const int8_t unbase64_table[256]; @@ -131,6 +136,11 @@ inline size_t base64_encode(const char* src, dlen = base64_encoded_size(slen, mode); + if (mode == Base64Mode::NORMAL) { + ::base64_encode(src, slen, dst, &dlen, 0); + return dlen; + } + unsigned a; unsigned b; unsigned c; @@ -138,7 +148,7 @@ inline size_t base64_encode(const char* src, unsigned k; unsigned n; - const char* table = base64_select_table(mode); + const char* table = base64_table_url; i = 0; k = 0; @@ -163,10 +173,6 @@ inline size_t base64_encode(const char* src, a = src[i + 0] & 0xff; dst[k + 0] = table[a >> 2]; dst[k + 1] = table[(a & 3) << 4]; - if (mode == Base64Mode::NORMAL) { - dst[k + 2] = '='; - dst[k + 3] = '='; - } break; case 2: a = src[i + 0] & 0xff; @@ -174,8 +180,6 @@ inline size_t base64_encode(const char* src, dst[k + 0] = table[a >> 2]; dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; dst[k + 2] = table[(b & 0x0f) << 2]; - if (mode == Base64Mode::NORMAL) - dst[k + 3] = '='; break; } diff --git a/src/base64.h b/src/base64.h index 0db096810cd..d93291f101b 100644 --- a/src/base64.h +++ b/src/base64.h @@ -17,22 +17,6 @@ enum class Base64Mode { URL }; -static constexpr char base64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789+/"; - -static constexpr char base64_table_url[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789-_"; - -static inline const char* base64_select_table(Base64Mode mode) { - switch (mode) { - case Base64Mode::NORMAL: return base64_table; - case Base64Mode::URL: return base64_table_url; - default: UNREACHABLE(); - } -} - static inline constexpr size_t base64_encoded_size( size_t size, Base64Mode mode = Base64Mode::NORMAL) { diff --git a/src/base_object-inl.h b/src/base_object-inl.h index bb1e8d4b46b..ff618f08b5d 100644 --- a/src/base_object-inl.h +++ b/src/base_object-inl.h @@ -32,40 +32,6 @@ namespace node { -BaseObject::BaseObject(Environment* env, v8::Local object) - : persistent_handle_(env->isolate(), object), env_(env) { - CHECK_EQ(false, object.IsEmpty()); - CHECK_GT(object->InternalFieldCount(), 0); - object->SetAlignedPointerInInternalField( - BaseObject::kSlot, - static_cast(this)); - env->AddCleanupHook(DeleteMe, static_cast(this)); - env->modify_base_object_count(1); -} - -BaseObject::~BaseObject() { - env()->modify_base_object_count(-1); - env()->RemoveCleanupHook(DeleteMe, static_cast(this)); - - if (UNLIKELY(has_pointer_data())) { - PointerData* metadata = pointer_data(); - CHECK_EQ(metadata->strong_ptr_count, 0); - metadata->self = nullptr; - if (metadata->weak_ptr_count == 0) - delete metadata; - } - - if (persistent_handle_.IsEmpty()) { - // This most likely happened because the weak callback below cleared it. - return; - } - - { - v8::HandleScope handle_scope(env()->isolate()); - object()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr); - } -} - void BaseObject::Detach() { CHECK_GT(pointer_data()->strong_ptr_count, 0); pointer_data()->is_detached = true; @@ -107,28 +73,6 @@ T* BaseObject::FromJSObject(v8::Local object) { return static_cast(FromJSObject(object)); } - -void BaseObject::MakeWeak() { - if (has_pointer_data()) { - pointer_data()->wants_weak_jsobj = true; - if (pointer_data()->strong_ptr_count > 0) return; - } - - persistent_handle_.SetWeak( - this, - [](const v8::WeakCallbackInfo& data) { - BaseObject* obj = data.GetParameter(); - // Clear the persistent handle so that ~BaseObject() doesn't attempt - // to mess with internal fields, since the JS object may have - // transitioned into an invalid state. - // Refs: https://github.com/nodejs/node/issues/18897 - obj->persistent_handle_.Reset(); - CHECK_IMPLIES(obj->has_pointer_data(), - obj->pointer_data()->strong_ptr_count == 0); - obj->OnGCCollect(); - }, v8::WeakCallbackType::kParameter); -} - void BaseObject::OnGCCollect() { delete this; } @@ -148,23 +92,6 @@ bool BaseObject::IsWeakOrDetached() const { return pd->wants_weak_jsobj || pd->is_detached; } -void BaseObject::LazilyInitializedJSTemplateConstructor( - const v8::FunctionCallbackInfo& args) { - DCHECK(args.IsConstructCall()); - DCHECK_GT(args.This()->InternalFieldCount(), 0); - args.This()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr); -} - -v8::Local -BaseObject::MakeLazilyInitializedJSTemplate(Environment* env) { - v8::Local t = - env->NewFunctionTemplate(LazilyInitializedJSTemplateConstructor); - t->Inherit(BaseObject::GetConstructorTemplate(env)); - t->InstanceTemplate()->SetInternalFieldCount( - BaseObject::kInternalFieldCount); - return t; -} - template void BaseObject::InternalFieldGet( v8::Local property, @@ -185,37 +112,6 @@ bool BaseObject::has_pointer_data() const { return pointer_data_ != nullptr; } -BaseObject::PointerData* BaseObject::pointer_data() { - if (!has_pointer_data()) { - PointerData* metadata = new PointerData(); - metadata->wants_weak_jsobj = persistent_handle_.IsWeak(); - metadata->self = this; - pointer_data_ = metadata; - } - CHECK(has_pointer_data()); - return pointer_data_; -} - -void BaseObject::decrease_refcount() { - CHECK(has_pointer_data()); - PointerData* metadata = pointer_data(); - CHECK_GT(metadata->strong_ptr_count, 0); - unsigned int new_refcount = --metadata->strong_ptr_count; - if (new_refcount == 0) { - if (metadata->is_detached) { - OnGCCollect(); - } else if (metadata->wants_weak_jsobj && !persistent_handle_.IsEmpty()) { - MakeWeak(); - } - } -} - -void BaseObject::increase_refcount() { - unsigned int prev_refcount = pointer_data()->strong_ptr_count++; - if (prev_refcount == 0 && !persistent_handle_.IsEmpty()) - persistent_handle_.ClearWeak(); -} - template BaseObject::PointerData* BaseObjectPtrImpl::pointer_data() const { diff --git a/src/base_object.h b/src/base_object.h index 1c63da92fd8..6f072bf5ec0 100644 --- a/src/base_object.h +++ b/src/base_object.h @@ -38,14 +38,16 @@ namespace worker { class TransferData; } +extern uint16_t kNodeEmbedderId; + class BaseObject : public MemoryRetainer { public: - enum InternalFields { kSlot, kInternalFieldCount }; + enum InternalFields { kEmbedderType, kSlot, kInternalFieldCount }; - // Associates this object with `object`. It uses the 0th internal field for + // Associates this object with `object`. It uses the 1st internal field for // that, and in particular aborts if there is no such field. - inline BaseObject(Environment* env, v8::Local object); - inline ~BaseObject() override; + BaseObject(Environment* env, v8::Local object); + ~BaseObject() override; BaseObject() = delete; @@ -65,7 +67,7 @@ class BaseObject : public MemoryRetainer { // was also passed to the `BaseObject()` constructor initially. // This may return `nullptr` if the C++ object has not been constructed yet, // e.g. when the JS object used `MakeLazilyInitializedJSTemplate`. - static inline void LazilyInitializedJSTemplateConstructor( + static void LazilyInitializedJSTemplateConstructor( const v8::FunctionCallbackInfo& args); static inline BaseObject* FromJSObject(v8::Local object); template @@ -74,7 +76,7 @@ class BaseObject : public MemoryRetainer { // Make the `v8::Global` a weak reference and, `delete` this object once // the JS object has been garbage collected and there are no (strong) // BaseObjectPtr references to it. - inline void MakeWeak(); + void MakeWeak(); // Undo `MakeWeak()`, i.e. turn this into a strong reference that is a GC // root and will not be touched by the garbage collector. @@ -88,7 +90,7 @@ class BaseObject : public MemoryRetainer { // Utility to create a FunctionTemplate with one internal field (used for // the `BaseObject*` pointer) and a constructor that initializes that field // to `nullptr`. - static inline v8::Local MakeLazilyInitializedJSTemplate( + static v8::Local MakeLazilyInitializedJSTemplate( Environment* env); // Setter/Getter pair for internal fields that can be passed to SetAccessor. @@ -202,11 +204,11 @@ class BaseObject : public MemoryRetainer { inline bool has_pointer_data() const; // This creates a PointerData struct if none was associated with this // BaseObject before. - inline PointerData* pointer_data(); + PointerData* pointer_data(); // Functions that adjust the strong pointer count. - inline void decrease_refcount(); - inline void increase_refcount(); + void decrease_refcount(); + void increase_refcount(); Environment* env_; PointerData* pointer_data_ = nullptr; diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc index 30e27ecf70a..2b4dfb1dabc 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -1428,7 +1428,8 @@ static void Query(const FunctionCallbackInfo& args) { void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) { - std::unique_ptr req_wrap { + auto cleanup = OnScopeLeave([&]() { uv_freeaddrinfo(res); }); + BaseObjectPtr req_wrap{ static_cast(req->data)}; Environment* env = req_wrap->env(); @@ -1488,8 +1489,6 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) { argv[1] = results; } - uv_freeaddrinfo(res); - TRACE_EVENT_NESTABLE_ASYNC_END2( TRACING_CATEGORY_NODE2(dns, native), "lookup", req_wrap.get(), "count", n, "verbatim", verbatim); @@ -1503,7 +1502,7 @@ void AfterGetNameInfo(uv_getnameinfo_t* req, int status, const char* hostname, const char* service) { - std::unique_ptr req_wrap { + BaseObjectPtr req_wrap{ static_cast(req->data)}; Environment* env = req_wrap->env(); @@ -1533,28 +1532,18 @@ void AfterGetNameInfo(uv_getnameinfo_t* req, req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv); } -using ParseIPResult = - decltype(static_cast(nullptr)->addr); - -int ParseIP(const char* ip, ParseIPResult* result = nullptr) { - ParseIPResult tmp; - if (result == nullptr) result = &tmp; - if (0 == uv_inet_pton(AF_INET, ip, result)) return 4; - if (0 == uv_inet_pton(AF_INET6, ip, result)) return 6; - return 0; -} - void CanonicalizeIP(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); node::Utf8Value ip(isolate, args[0]); - ParseIPResult result; - const int rc = ParseIP(*ip, &result); - if (rc == 0) return; + int af; + unsigned char result[sizeof(ares_addr_port_node::addr)]; + if (uv_inet_pton(af = AF_INET, *ip, result) != 0 && + uv_inet_pton(af = AF_INET6, *ip, result) != 0) + return; char canonical_ip[INET6_ADDRSTRLEN]; - const int af = (rc == 4 ? AF_INET : AF_INET6); - CHECK_EQ(0, uv_inet_ntop(af, &result, canonical_ip, sizeof(canonical_ip))); + CHECK_EQ(0, uv_inet_ntop(af, result, canonical_ip, sizeof(canonical_ip))); Local val = String::NewFromUtf8(isolate, canonical_ip) .ToLocalChecked(); args.GetReturnValue().Set(val); @@ -1887,12 +1876,13 @@ void Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - env->SetMethod(target, "getaddrinfo", GetAddrInfo); - env->SetMethod(target, "getnameinfo", GetNameInfo); - env->SetMethodNoSideEffect(target, "canonicalizeIP", CanonicalizeIP); + SetMethod(context, target, "getaddrinfo", GetAddrInfo); + SetMethod(context, target, "getnameinfo", GetNameInfo); + SetMethodNoSideEffect(context, target, "canonicalizeIP", CanonicalizeIP); - env->SetMethod(target, "strerror", StrError); + SetMethod(context, target, "strerror", StrError); target->Set(env->context(), FIXED_ONE_BYTE_STRING(env->isolate(), "AF_INET"), Integer::New(env->isolate(), AF_INET)).Check(); @@ -1914,44 +1904,45 @@ void Initialize(Local target, Local aiw = BaseObject::MakeLazilyInitializedJSTemplate(env); aiw->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetConstructorFunction(target, "GetAddrInfoReqWrap", aiw); + SetConstructorFunction(context, target, "GetAddrInfoReqWrap", aiw); Local niw = BaseObject::MakeLazilyInitializedJSTemplate(env); niw->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetConstructorFunction(target, "GetNameInfoReqWrap", niw); + SetConstructorFunction(context, target, "GetNameInfoReqWrap", niw); Local qrw = BaseObject::MakeLazilyInitializedJSTemplate(env); qrw->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetConstructorFunction(target, "QueryReqWrap", qrw); + SetConstructorFunction(context, target, "QueryReqWrap", qrw); Local channel_wrap = - env->NewFunctionTemplate(ChannelWrap::New); + NewFunctionTemplate(isolate, ChannelWrap::New); channel_wrap->InstanceTemplate()->SetInternalFieldCount( ChannelWrap::kInternalFieldCount); channel_wrap->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(channel_wrap, "queryAny", Query); - env->SetProtoMethod(channel_wrap, "queryA", Query); - env->SetProtoMethod(channel_wrap, "queryAaaa", Query); - env->SetProtoMethod(channel_wrap, "queryCaa", Query); - env->SetProtoMethod(channel_wrap, "queryCname", Query); - env->SetProtoMethod(channel_wrap, "queryMx", Query); - env->SetProtoMethod(channel_wrap, "queryNs", Query); - env->SetProtoMethod(channel_wrap, "queryTxt", Query); - env->SetProtoMethod(channel_wrap, "querySrv", Query); - env->SetProtoMethod(channel_wrap, "queryPtr", Query); - env->SetProtoMethod(channel_wrap, "queryNaptr", Query); - env->SetProtoMethod(channel_wrap, "querySoa", Query); - env->SetProtoMethod(channel_wrap, "getHostByAddr", Query); - - env->SetProtoMethodNoSideEffect(channel_wrap, "getServers", GetServers); - env->SetProtoMethod(channel_wrap, "setServers", SetServers); - env->SetProtoMethod(channel_wrap, "setLocalAddress", SetLocalAddress); - env->SetProtoMethod(channel_wrap, "cancel", Cancel); - - env->SetConstructorFunction(target, "ChannelWrap", channel_wrap); + SetProtoMethod(isolate, channel_wrap, "queryAny", Query); + SetProtoMethod(isolate, channel_wrap, "queryA", Query); + SetProtoMethod(isolate, channel_wrap, "queryAaaa", Query); + SetProtoMethod(isolate, channel_wrap, "queryCaa", Query); + SetProtoMethod(isolate, channel_wrap, "queryCname", Query); + SetProtoMethod(isolate, channel_wrap, "queryMx", Query); + SetProtoMethod(isolate, channel_wrap, "queryNs", Query); + SetProtoMethod(isolate, channel_wrap, "queryTxt", Query); + SetProtoMethod(isolate, channel_wrap, "querySrv", Query); + SetProtoMethod(isolate, channel_wrap, "queryPtr", Query); + SetProtoMethod(isolate, channel_wrap, "queryNaptr", Query); + SetProtoMethod(isolate, channel_wrap, "querySoa", Query); + SetProtoMethod( + isolate, channel_wrap, "getHostByAddr", Query); + + SetProtoMethodNoSideEffect(isolate, channel_wrap, "getServers", GetServers); + SetProtoMethod(isolate, channel_wrap, "setServers", SetServers); + SetProtoMethod(isolate, channel_wrap, "setLocalAddress", SetLocalAddress); + SetProtoMethod(isolate, channel_wrap, "cancel", Cancel); + + SetConstructorFunction(context, target, "ChannelWrap", channel_wrap); } } // namespace cares_wrap diff --git a/src/connection_wrap.cc b/src/connection_wrap.cc index 300f7d316b8..8cb6b8e66ce 100644 --- a/src/connection_wrap.cc +++ b/src/connection_wrap.cc @@ -77,9 +77,8 @@ void ConnectionWrap::OnConnection(uv_stream_t* handle, template void ConnectionWrap::AfterConnect(uv_connect_t* req, int status) { - std::unique_ptr req_wrap - (static_cast(req->data)); - CHECK_NOT_NULL(req_wrap); + BaseObjectPtr req_wrap{static_cast(req->data)}; + CHECK(req_wrap); WrapType* wrap = static_cast(req->handle->data); CHECK_EQ(req_wrap->env(), wrap->env()); Environment* env = wrap->env(); @@ -108,6 +107,12 @@ void ConnectionWrap::AfterConnect(uv_connect_t* req, Boolean::New(env->isolate(), writable) }; + TRACE_EVENT_NESTABLE_ASYNC_END1(TRACING_CATEGORY_NODE2(net, native), + "connect", + req_wrap.get(), + "status", + status); + req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv); } diff --git a/src/crypto/README.md b/src/crypto/README.md index 8ebc3003da3..1f5e5b20448 100644 --- a/src/crypto/README.md +++ b/src/crypto/README.md @@ -20,9 +20,8 @@ The following provide generalized utility declarations that are used throughout the various other crypto files and other parts of Node.js: * `crypto_util.h` / `crypto_util.cc` (Core crypto definitions) -* `crypto_common.h` / `crypto_common.h` (Shared TLS utility functions) -* `crypto_bio.c` / `crypto_bio.c` (Custom OpenSSL i/o implementation) -* `crypto_groups.h` (modp group definitions) +* `crypto_common.h` / `crypto_common.cc` (Shared TLS utility functions) +* `crypto_bio.h` / `crypto_bio.cc` (Custom OpenSSL i/o implementation) Of these, `crypto_util.h` and `crypto_util.cc` are the most important, as they provide the core declarations and utility functions used most extensively @@ -100,9 +99,16 @@ Examples of these being used are pervasive through the `src/crypto` code. The `ByteSource` class is a helper utility representing a _read-only_ byte array. Instances can either wrap external ("foreign") data sources, such as -an `ArrayBuffer` (`v8::BackingStore`) or allocated data. If allocated data -is used, then the allocation is freed automatically when the `ByteSource` is -destroyed. +an `ArrayBuffer` (`v8::BackingStore`), or allocated data. + +* If a pointer to external data is used to create a `ByteSource`, that pointer + must remain valid until the `ByteSource` is destroyed. +* If allocated data is used, then it must have been allocated using OpenSSL's + allocator. It will be freed automatically when the `ByteSource` is destroyed. + +The `ByteSource::Builder` class can be used to allocate writable memory that can +then be released as a `ByteSource`, making it read-only, or freed by destroying +the `ByteSource::Builder` without releasing it as a `ByteSource`. ### `ArrayBufferOrViewContents` @@ -112,17 +118,6 @@ their underlying data pointers. It is used extensively through `src/crypto` to make it easier to deal with inputs that allow any `ArrayBuffer`-backed object. -### `AllocatedBuffer` - -The `AllocatedBuffer` utility is defined in `allocated_buffer.h` and is not -specific to `src/crypto`. It is used extensively within `src/crypto` to hold -allocated data that is intended to be output in response to various -crypto functions (generated hash values, or ciphertext, for instance). - -_Currently, we are working to transition away from using `AllocatedBuffer` -to directly using the `v8::BackingStore` API. This will take some time. -New uses of `AllocatedBuffer` should be avoided if possible._ - ### Key objects Most crypto operations involve the use of keys -- cryptographic inputs @@ -312,12 +307,12 @@ crypto.randomFill(buf, (err, buf) => { For the legacy Node.js crypto API, asynchronous single-call operations use the traditional Node.js callback pattern, as illustrated in the previous `randomFill()` example. In the -Web Crypto API (accessible via `require('crypto').webcrypto`), +Web Crypto API (accessible via `require('node:crypto').webcrypto`), all asynchronous single-call operations are Promise-based. ```js // Example Web Crypto API asynchronous single-call operation -const { subtle } = require('crypto').webcrypto; +const { subtle } = require('node:crypto').webcrypto; subtle.generateKeys({ name: 'HMAC', length: 256 }, true, ['sign']) .then((key) => { diff --git a/src/crypto/crypto_aes.cc b/src/crypto/crypto_aes.cc index e6a6c77cba2..76d3e385345 100644 --- a/src/crypto/crypto_aes.cc +++ b/src/crypto/crypto_aes.cc @@ -1,10 +1,9 @@ #include "crypto/crypto_aes.h" +#include "async_wrap-inl.h" +#include "base_object-inl.h" #include "crypto/crypto_cipher.h" #include "crypto/crypto_keys.h" #include "crypto/crypto_util.h" -#include "allocated_buffer-inl.h" -#include "async_wrap-inl.h" -#include "base_object-inl.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "threadpoolwork-inl.h" @@ -30,7 +29,7 @@ namespace crypto { namespace { // Implements general AES encryption and decryption for CBC // The key_data must be a secret key. -// On success, this function sets out to a new AllocatedBuffer +// On success, this function sets out to a new ByteSource // instance containing the results and returns WebCryptoCipherStatus::OK. WebCryptoCipherStatus AES_Cipher( Environment* env, diff --git a/src/crypto/crypto_aes.h b/src/crypto/crypto_aes.h index 3ffe04766cc..9dfa5edc654 100644 --- a/src/crypto/crypto_aes.h +++ b/src/crypto/crypto_aes.h @@ -6,7 +6,6 @@ #include "crypto/crypto_cipher.h" #include "crypto/crypto_keys.h" #include "crypto/crypto_util.h" -#include "allocated_buffer.h" #include "env.h" #include "v8.h" diff --git a/src/crypto/crypto_bio.cc b/src/crypto/crypto_bio.cc index 13793aa7f2e..25ea640ad83 100644 --- a/src/crypto/crypto_bio.cc +++ b/src/crypto/crypto_bio.cc @@ -22,7 +22,6 @@ #include "crypto/crypto_bio.h" #include "base_object-inl.h" #include "memory_tracker-inl.h" -#include "allocated_buffer-inl.h" #include "util-inl.h" #include diff --git a/src/crypto/crypto_cipher.cc b/src/crypto/crypto_cipher.cc index d6c6f0c4375..f45eab1c220 100644 --- a/src/crypto/crypto_cipher.cc +++ b/src/crypto/crypto_cipher.cc @@ -1,7 +1,6 @@ #include "crypto/crypto_cipher.h" -#include "crypto/crypto_util.h" -#include "allocated_buffer-inl.h" #include "base_object-inl.h" +#include "crypto/crypto_util.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "node_buffer.h" @@ -14,31 +13,32 @@ namespace node { using v8::Array; using v8::ArrayBuffer; using v8::BackingStore; +using v8::Context; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::Int32; +using v8::Isolate; using v8::Local; using v8::Object; using v8::Uint32; using v8::Value; namespace crypto { -#ifdef OPENSSL_NO_OCB -# define IS_OCB_MODE(mode) false -#else -# define IS_OCB_MODE(mode) ((mode) == EVP_CIPH_OCB_MODE) -#endif - namespace { bool IsSupportedAuthenticatedMode(const EVP_CIPHER* cipher) { - const int mode = EVP_CIPHER_mode(cipher); - // Check `chacha20-poly1305` separately, it is also an AEAD cipher, - // but its mode is 0 which doesn't indicate - return EVP_CIPHER_nid(cipher) == NID_chacha20_poly1305 || - mode == EVP_CIPH_CCM_MODE || - mode == EVP_CIPH_GCM_MODE || - IS_OCB_MODE(mode); + switch (EVP_CIPHER_mode(cipher)) { + case EVP_CIPH_CCM_MODE: + case EVP_CIPH_GCM_MODE: +#ifndef OPENSSL_NO_OCB + case EVP_CIPH_OCB_MODE: +#endif + return true; + case EVP_CIPH_STREAM_CIPHER: + return EVP_CIPHER_nid(cipher) == NID_chacha20_poly1305; + default: + return false; + } } bool IsSupportedAuthenticatedMode(const EVP_CIPHER_CTX* ctx) { @@ -198,10 +198,14 @@ void CipherBase::GetSSLCiphers(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); SSLCtxPointer ctx(SSL_CTX_new(TLS_method())); - CHECK(ctx); + if (!ctx) { + return ThrowCryptoError(env, ERR_get_error(), "SSL_CTX_new"); + } SSLPointer ssl(SSL_new(ctx.get())); - CHECK(ssl); + if (!ssl) { + return ThrowCryptoError(env, ERR_get_error(), "SSL_new"); + } STACK_OF(SSL_CIPHER)* ciphers = SSL_get_ciphers(ssl.get()); @@ -268,43 +272,54 @@ void CipherBase::MemoryInfo(MemoryTracker* tracker) const { } void CipherBase::Initialize(Environment* env, Local target) { - Local t = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + Local context = env->context(); + + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate()->SetInternalFieldCount( CipherBase::kInternalFieldCount); t->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "init", Init); - env->SetProtoMethod(t, "initiv", InitIv); - env->SetProtoMethod(t, "update", Update); - env->SetProtoMethod(t, "final", Final); - env->SetProtoMethod(t, "setAutoPadding", SetAutoPadding); - env->SetProtoMethodNoSideEffect(t, "getAuthTag", GetAuthTag); - env->SetProtoMethod(t, "setAuthTag", SetAuthTag); - env->SetProtoMethod(t, "setAAD", SetAAD); - env->SetConstructorFunction(target, "CipherBase", t); - - env->SetMethodNoSideEffect(target, "getSSLCiphers", GetSSLCiphers); - env->SetMethodNoSideEffect(target, "getCiphers", GetCiphers); - - env->SetMethod(target, "publicEncrypt", - PublicKeyCipher::Cipher); - env->SetMethod(target, "privateDecrypt", - PublicKeyCipher::Cipher); - env->SetMethod(target, "privateEncrypt", - PublicKeyCipher::Cipher); - env->SetMethod(target, "publicDecrypt", - PublicKeyCipher::Cipher); - - env->SetMethodNoSideEffect(target, "getCipherInfo", GetCipherInfo); + SetProtoMethod(isolate, t, "init", Init); + SetProtoMethod(isolate, t, "initiv", InitIv); + SetProtoMethod(isolate, t, "update", Update); + SetProtoMethod(isolate, t, "final", Final); + SetProtoMethod(isolate, t, "setAutoPadding", SetAutoPadding); + SetProtoMethodNoSideEffect(isolate, t, "getAuthTag", GetAuthTag); + SetProtoMethod(isolate, t, "setAuthTag", SetAuthTag); + SetProtoMethod(isolate, t, "setAAD", SetAAD); + SetConstructorFunction(context, target, "CipherBase", t); + + SetMethodNoSideEffect(context, target, "getSSLCiphers", GetSSLCiphers); + SetMethodNoSideEffect(context, target, "getCiphers", GetCiphers); + + SetMethod(context, + target, + "publicEncrypt", + PublicKeyCipher::Cipher); + SetMethod(context, + target, + "privateDecrypt", + PublicKeyCipher::Cipher); + SetMethod(context, + target, + "privateEncrypt", + PublicKeyCipher::Cipher); + SetMethod(context, + target, + "publicDecrypt", + PublicKeyCipher::Cipher); + + SetMethodNoSideEffect(context, target, "getCipherInfo", GetCipherInfo); NODE_DEFINE_CONSTANT(target, kWebCryptoCipherEncrypt); NODE_DEFINE_CONSTANT(target, kWebCryptoCipherDecrypt); @@ -478,7 +493,7 @@ void CipherBase::InitIv(const char* cipher_type, // Throw if an IV was passed which does not match the cipher's fixed IV length // static_cast for the iv_buf.size() is safe because we've verified - // prior that the value is not larger than MAX_INT. + // prior that the value is not larger than INT_MAX. if (!is_authenticated_mode && has_iv && static_cast(iv_buf.size()) != expected_iv_len) { @@ -572,9 +587,17 @@ bool CipherBase::InitAuthenticated( } } else { if (auth_tag_len == kNoAuthTagLength) { - THROW_ERR_CRYPTO_INVALID_AUTH_TAG( - env(), "authTagLength required for %s", cipher_type); - return false; + // We treat ChaCha20-Poly1305 specially. Like GCM, the authentication tag + // length defaults to 16 bytes when encrypting. Unlike GCM, the + // authentication tag length also defaults to 16 bytes when decrypting, + // whereas GCM would accept any valid authentication tag length. + if (EVP_CIPHER_CTX_nid(ctx_.get()) == NID_chacha20_poly1305) { + auth_tag_len = 16; + } else { + THROW_ERR_CRYPTO_INVALID_AUTH_TAG( + env(), "authTagLength required for %s", cipher_type); + return false; + } } // TODO(tniessen) Support CCM decryption in FIPS mode @@ -1042,7 +1065,7 @@ void PublicKeyCipher::Cipher(const FunctionCallbackInfo& args) { if (!args[offset + 3]->IsUndefined()) { oaep_label = ArrayBufferOrViewContents(args[offset + 3]); if (UNLIKELY(!oaep_label.CheckSizeInt32())) - return THROW_ERR_OUT_OF_RANGE(env, "oaep_label is too big"); + return THROW_ERR_OUT_OF_RANGE(env, "oaepLabel is too big"); } std::unique_ptr out; diff --git a/src/crypto/crypto_clienthello-inl.h b/src/crypto/crypto_clienthello-inl.h index 4f133e83832..1b8a0c00c30 100644 --- a/src/crypto/crypto_clienthello-inl.h +++ b/src/crypto/crypto_clienthello-inl.h @@ -51,7 +51,7 @@ inline void ClientHelloParser::Reset() { inline void ClientHelloParser::Start(ClientHelloParser::OnHelloCb onhello_cb, ClientHelloParser::OnEndCb onend_cb, - void* onend_arg) { + void* cb_arg) { if (!IsEnded()) return; Reset(); @@ -61,7 +61,7 @@ inline void ClientHelloParser::Start(ClientHelloParser::OnHelloCb onhello_cb, state_ = kWaiting; onhello_cb_ = onhello_cb; onend_cb_ = onend_cb; - cb_arg_ = onend_arg; + cb_arg_ = cb_arg; } inline void ClientHelloParser::End() { diff --git a/src/crypto/crypto_clienthello.cc b/src/crypto/crypto_clienthello.cc index 5a0be70bc11..7da05e9b474 100644 --- a/src/crypto/crypto_clienthello.cc +++ b/src/crypto/crypto_clienthello.cc @@ -75,6 +75,11 @@ bool ClientHelloParser::ParseRecordHeader(const uint8_t* data, size_t avail) { void ClientHelloParser::ParseHeader(const uint8_t* data, size_t avail) { ClientHello hello; + // We need at least six bytes (one byte for kClientHello, three bytes for the + // length of the handshake message, and two bytes for the protocol version). + // If the client sent a frame that suggests a smaller ClientHello, give up. + if (frame_len_ < 6) return End(); + // >= 5 + frame size bytes for frame parsing if (body_offset_ + frame_len_ > avail) return; diff --git a/src/crypto/crypto_clienthello.h b/src/crypto/crypto_clienthello.h index 0d3bf60f96b..3af08bc6475 100644 --- a/src/crypto/crypto_clienthello.h +++ b/src/crypto/crypto_clienthello.h @@ -66,7 +66,7 @@ class ClientHelloParser { void Parse(const uint8_t* data, size_t avail); inline void Reset(); - inline void Start(OnHelloCb onhello_cb, OnEndCb onend_cb, void* onend_arg); + inline void Start(OnHelloCb onhello_cb, OnEndCb onend_cb, void* cb_arg); inline void End(); inline bool IsPaused() const; inline bool IsEnded() const; diff --git a/src/crypto/crypto_common.cc b/src/crypto/crypto_common.cc index a5aa39c23c1..0c794ffe2c1 100644 --- a/src/crypto/crypto_common.cc +++ b/src/crypto/crypto_common.cc @@ -1,4 +1,3 @@ -#include "allocated_buffer-inl.h" #include "base_object-inl.h" #include "env-inl.h" #include "node_buffer.h" @@ -49,13 +48,18 @@ static constexpr int kX509NameFlagsMultiline = XN_FLAG_SEP_MULTILINE | XN_FLAG_FN_SN; -bool SSL_CTX_get_issuer(SSL_CTX* ctx, X509* cert, X509** issuer) { +X509Pointer SSL_CTX_get_issuer(SSL_CTX* ctx, X509* cert) { X509_STORE* store = SSL_CTX_get_cert_store(ctx); DeleteFnPtr store_ctx( X509_STORE_CTX_new()); - return store_ctx.get() != nullptr && - X509_STORE_CTX_init(store_ctx.get(), store, nullptr, nullptr) == 1 && - X509_STORE_CTX_get1_issuer(issuer, store_ctx.get(), cert) == 1; + X509Pointer result; + X509* issuer; + if (store_ctx.get() != nullptr && + X509_STORE_CTX_init(store_ctx.get(), store, nullptr, nullptr) == 1 && + X509_STORE_CTX_get1_issuer(&issuer, store_ctx.get(), cert) == 1) { + result.reset(issuer); + } + return result; } void LogSecret( @@ -64,16 +68,19 @@ void LogSecret( const unsigned char* secret, size_t secretlen) { auto keylog_cb = SSL_CTX_get_keylog_callback(SSL_get_SSL_CTX(ssl.get())); - unsigned char crandom[32]; + // All supported versions of TLS/SSL fix the client random to the same size. + constexpr size_t kTlsClientRandomSize = SSL3_RANDOM_SIZE; + unsigned char crandom[kTlsClientRandomSize]; if (keylog_cb == nullptr || - SSL_get_client_random(ssl.get(), crandom, 32) != 32) { + SSL_get_client_random(ssl.get(), crandom, kTlsClientRandomSize) != + kTlsClientRandomSize) { return; } std::string line = name; - line += " " + StringBytes::hex_encode( - reinterpret_cast(crandom), 32); + line += " " + StringBytes::hex_encode(reinterpret_cast(crandom), + kTlsClientRandomSize); line += " " + StringBytes::hex_encode( reinterpret_cast(secret), secretlen); keylog_cb(ssl.get(), line.c_str()); @@ -146,7 +153,7 @@ long VerifyPeerCertificate( // NOLINT(runtime/int) bool UseSNIContext( const SSLPointer& ssl, BaseObjectPtr context) { - SSL_CTX* ctx = context->ctx_.get(); + SSL_CTX* ctx = context->ctx().get(); X509* x509 = SSL_CTX_get0_certificate(ctx); EVP_PKEY* pkey = SSL_CTX_get0_privatekey(ctx); STACK_OF(X509)* chain; @@ -210,7 +217,7 @@ const char* GetServerName(SSL* ssl) { } bool SetGroups(SecureContext* sc, const char* groups) { - return SSL_CTX_set1_groups_list(**sc, groups) == 1; + return SSL_CTX_set1_groups_list(sc->ctx().get(), groups) == 1; } const char* X509ErrorCode(long err) { // NOLINT(runtime/int) @@ -332,8 +339,9 @@ MaybeLocal GetCipherVersion(Environment* env, const SSL_CIPHER* cipher) { StackOfX509 CloneSSLCerts(X509Pointer&& cert, const STACK_OF(X509)* const ssl_certs) { StackOfX509 peer_certs(sk_X509_new(nullptr)); - if (cert) - sk_X509_push(peer_certs.get(), cert.release()); + if (!peer_certs) return StackOfX509(); + if (cert && !sk_X509_push(peer_certs.get(), cert.release())) + return StackOfX509(); for (int i = 0; i < sk_X509_num(ssl_certs); i++) { X509Pointer cert(X509_dup(sk_X509_value(ssl_certs, i))); if (!cert || !sk_X509_push(peer_certs.get(), cert.get())) @@ -387,12 +395,12 @@ MaybeLocal GetLastIssuedCert( Environment* const env) { Local context = env->isolate()->GetCurrentContext(); while (X509_check_issued(cert->get(), cert->get()) != X509_V_OK) { - X509* ca; - if (SSL_CTX_get_issuer(SSL_get_SSL_CTX(ssl.get()), cert->get(), &ca) <= 0) + X509Pointer ca; + if (!(ca = SSL_CTX_get_issuer(SSL_get_SSL_CTX(ssl.get()), cert->get()))) break; Local ca_info; - MaybeLocal maybe_ca_info = X509ToObject(env, ca); + MaybeLocal maybe_ca_info = X509ToObject(env, ca.get()); if (!maybe_ca_info.ToLocal(&ca_info)) return MaybeLocal(); @@ -400,16 +408,14 @@ MaybeLocal GetLastIssuedCert( return MaybeLocal(); issuer_chain = ca_info; - // Take the value of cert->get() before the call to cert->reset() - // in order to compare it to ca after and provide a way to exit this loop - // in case it gets stuck. - X509* value_before_reset = cert->get(); + // For self-signed certificates whose keyUsage field does not include + // keyCertSign, X509_check_issued() will return false. Avoid going into an + // infinite loop by checking if SSL_CTX_get_issuer() returned the same + // certificate. + if (cert->get() == ca.get()) break; // Delete previous cert and continue aggregating issuers. - cert->reset(ca); - - if (value_before_reset == ca) - break; + *cert = std::move(ca); } return MaybeLocal(issuer_chain); } diff --git a/src/crypto/crypto_common.h b/src/crypto/crypto_common.h index e0956395e91..96ca981aec9 100644 --- a/src/crypto/crypto_common.h +++ b/src/crypto/crypto_common.h @@ -25,7 +25,7 @@ struct StackOfXASN1Deleter { }; using StackOfASN1 = std::unique_ptr; -bool SSL_CTX_get_issuer(SSL_CTX* ctx, X509* cert, X509** issuer); +X509Pointer SSL_CTX_get_issuer(SSL_CTX* ctx, X509* cert); void LogSecret( const SSLPointer& ssl, diff --git a/src/crypto/crypto_context.cc b/src/crypto/crypto_context.cc index 739b559c3b7..e70ddc64f36 100644 --- a/src/crypto/crypto_context.cc +++ b/src/crypto/crypto_context.cc @@ -31,6 +31,7 @@ using v8::FunctionTemplate; using v8::HandleScope; using v8::Int32; using v8::Integer; +using v8::Isolate; using v8::Local; using v8::Object; using v8::PropertyAttribute; @@ -110,21 +111,21 @@ int SSL_CTX_use_certificate_chain(SSL_CTX* ctx, // Try getting issuer from a cert store if (ret) { if (issuer == nullptr) { - ret = SSL_CTX_get_issuer(ctx, x.get(), &issuer); - ret = ret < 0 ? 0 : 1; + // TODO(tniessen): SSL_CTX_get_issuer does not allow the caller to + // distinguish between a failed operation and an empty result. Fix that + // and then handle the potential error properly here (set ret to 0). + *issuer_ = SSL_CTX_get_issuer(ctx, x.get()); // NOTE: get_cert_store doesn't increment reference count, // no need to free `store` } else { // Increment issuer reference count - issuer = X509_dup(issuer); - if (issuer == nullptr) { + issuer_->reset(X509_dup(issuer)); + if (!*issuer_) { ret = 0; } } } - issuer_->reset(issuer); - if (ret && x != nullptr) { cert->reset(X509_dup(x.get())); if (!*cert) @@ -256,51 +257,51 @@ Local SecureContext::GetConstructorTemplate( Environment* env) { Local tmpl = env->secure_context_constructor_template(); if (tmpl.IsEmpty()) { - tmpl = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + tmpl = NewFunctionTemplate(isolate, New); tmpl->InstanceTemplate()->SetInternalFieldCount( SecureContext::kInternalFieldCount); tmpl->Inherit(BaseObject::GetConstructorTemplate(env)); tmpl->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "SecureContext")); - env->SetProtoMethod(tmpl, "init", Init); - env->SetProtoMethod(tmpl, "setKey", SetKey); - env->SetProtoMethod(tmpl, "setCert", SetCert); - env->SetProtoMethod(tmpl, "addCACert", AddCACert); - env->SetProtoMethod(tmpl, "addCRL", AddCRL); - env->SetProtoMethod(tmpl, "addRootCerts", AddRootCerts); - env->SetProtoMethod(tmpl, "setCipherSuites", SetCipherSuites); - env->SetProtoMethod(tmpl, "setCiphers", SetCiphers); - env->SetProtoMethod(tmpl, "setSigalgs", SetSigalgs); - env->SetProtoMethod(tmpl, "setECDHCurve", SetECDHCurve); - env->SetProtoMethod(tmpl, "setDHParam", SetDHParam); - env->SetProtoMethod(tmpl, "setMaxProto", SetMaxProto); - env->SetProtoMethod(tmpl, "setMinProto", SetMinProto); - env->SetProtoMethod(tmpl, "getMaxProto", GetMaxProto); - env->SetProtoMethod(tmpl, "getMinProto", GetMinProto); - env->SetProtoMethod(tmpl, "setOptions", SetOptions); - env->SetProtoMethod(tmpl, "setSessionIdContext", SetSessionIdContext); - env->SetProtoMethod(tmpl, "setSessionTimeout", SetSessionTimeout); - env->SetProtoMethod(tmpl, "close", Close); - env->SetProtoMethod(tmpl, "loadPKCS12", LoadPKCS12); - env->SetProtoMethod(tmpl, "setTicketKeys", SetTicketKeys); - env->SetProtoMethod(tmpl, "setFreeListLength", SetFreeListLength); - env->SetProtoMethod(tmpl, "enableTicketKeyCallback", - EnableTicketKeyCallback); - - env->SetProtoMethodNoSideEffect(tmpl, "getTicketKeys", GetTicketKeys); - env->SetProtoMethodNoSideEffect(tmpl, "getCertificate", - GetCertificate); - env->SetProtoMethodNoSideEffect(tmpl, "getIssuer", - GetCertificate); - - #ifndef OPENSSL_NO_ENGINE - env->SetProtoMethod(tmpl, "setEngineKey", SetEngineKey); - env->SetProtoMethod(tmpl, "setClientCertEngine", SetClientCertEngine); - #endif // !OPENSSL_NO_ENGINE - - #define SET_INTEGER_CONSTANTS(name, value) \ - tmpl->Set(FIXED_ONE_BYTE_STRING(env->isolate(), name), \ - Integer::NewFromUnsigned(env->isolate(), value)); + SetProtoMethod(isolate, tmpl, "init", Init); + SetProtoMethod(isolate, tmpl, "setKey", SetKey); + SetProtoMethod(isolate, tmpl, "setCert", SetCert); + SetProtoMethod(isolate, tmpl, "addCACert", AddCACert); + SetProtoMethod(isolate, tmpl, "addCRL", AddCRL); + SetProtoMethod(isolate, tmpl, "addRootCerts", AddRootCerts); + SetProtoMethod(isolate, tmpl, "setCipherSuites", SetCipherSuites); + SetProtoMethod(isolate, tmpl, "setCiphers", SetCiphers); + SetProtoMethod(isolate, tmpl, "setSigalgs", SetSigalgs); + SetProtoMethod(isolate, tmpl, "setECDHCurve", SetECDHCurve); + SetProtoMethod(isolate, tmpl, "setDHParam", SetDHParam); + SetProtoMethod(isolate, tmpl, "setMaxProto", SetMaxProto); + SetProtoMethod(isolate, tmpl, "setMinProto", SetMinProto); + SetProtoMethod(isolate, tmpl, "getMaxProto", GetMaxProto); + SetProtoMethod(isolate, tmpl, "getMinProto", GetMinProto); + SetProtoMethod(isolate, tmpl, "setOptions", SetOptions); + SetProtoMethod(isolate, tmpl, "setSessionIdContext", SetSessionIdContext); + SetProtoMethod(isolate, tmpl, "setSessionTimeout", SetSessionTimeout); + SetProtoMethod(isolate, tmpl, "close", Close); + SetProtoMethod(isolate, tmpl, "loadPKCS12", LoadPKCS12); + SetProtoMethod(isolate, tmpl, "setTicketKeys", SetTicketKeys); + SetProtoMethod( + isolate, tmpl, "enableTicketKeyCallback", EnableTicketKeyCallback); + + SetProtoMethodNoSideEffect(isolate, tmpl, "getTicketKeys", GetTicketKeys); + SetProtoMethodNoSideEffect( + isolate, tmpl, "getCertificate", GetCertificate); + SetProtoMethodNoSideEffect( + isolate, tmpl, "getIssuer", GetCertificate); + +#ifndef OPENSSL_NO_ENGINE + SetProtoMethod(isolate, tmpl, "setEngineKey", SetEngineKey); + SetProtoMethod(isolate, tmpl, "setClientCertEngine", SetClientCertEngine); +#endif // !OPENSSL_NO_ENGINE + +#define SET_INTEGER_CONSTANTS(name, value) \ + tmpl->Set(FIXED_ONE_BYTE_STRING(isolate, name), \ + Integer::NewFromUnsigned(isolate, value)); SET_INTEGER_CONSTANTS("kTicketKeyReturnIndex", kTicketKeyReturnIndex); SET_INTEGER_CONSTANTS("kTicketKeyHMACIndex", kTicketKeyHMACIndex); SET_INTEGER_CONSTANTS("kTicketKeyAESIndex", kTicketKeyAESIndex); @@ -308,14 +309,11 @@ Local SecureContext::GetConstructorTemplate( SET_INTEGER_CONSTANTS("kTicketKeyIVIndex", kTicketKeyIVIndex); #undef SET_INTEGER_CONSTANTS - Local ctx_getter_templ = - FunctionTemplate::New(env->isolate(), - CtxGetter, - Local(), - Signature::New(env->isolate(), tmpl)); + Local ctx_getter_templ = FunctionTemplate::New( + isolate, CtxGetter, Local(), Signature::New(isolate, tmpl)); tmpl->PrototypeTemplate()->SetAccessorProperty( - FIXED_ONE_BYTE_STRING(env->isolate(), "_external"), + FIXED_ONE_BYTE_STRING(isolate, "_external"), ctx_getter_templ, Local(), static_cast(ReadOnly | DontDelete)); @@ -326,17 +324,20 @@ Local SecureContext::GetConstructorTemplate( } void SecureContext::Initialize(Environment* env, Local target) { - env->SetConstructorFunction( - target, - "SecureContext", - GetConstructorTemplate(env), - Environment::SetConstructorFunctionFlag::NONE); - - env->SetMethodNoSideEffect(target, "getRootCertificates", - GetRootCertificates); + Local context = env->context(); + SetConstructorFunction(context, + target, + "SecureContext", + GetConstructorTemplate(env), + SetConstructorFunctionFlag::NONE); + + SetMethodNoSideEffect( + context, target, "getRootCertificates", GetRootCertificates); // Exposed for testing purposes only. - env->SetMethodNoSideEffect(target, "isExtraRootCertsFileLoaded", - IsExtraRootCertsFileLoaded); + SetMethodNoSideEffect(context, + target, + "isExtraRootCertsFileLoaded", + IsExtraRootCertsFileLoaded); } void SecureContext::RegisterExternalReferences( @@ -363,7 +364,6 @@ void SecureContext::RegisterExternalReferences( registry->Register(Close); registry->Register(LoadPKCS12); registry->Register(SetTicketKeys); - registry->Register(SetFreeListLength); registry->Register(EnableTicketKeyCallback); registry->Register(GetTicketKeys); registry->Register(GetCertificate); @@ -501,13 +501,16 @@ void SecureContext::Init(const FunctionCallbackInfo& args) { max_version = TLS1_2_VERSION; method = TLS_client_method(); } else { - const std::string msg("Unknown method: "); - THROW_ERR_TLS_INVALID_PROTOCOL_METHOD(env, (msg + * sslmethod).c_str()); + THROW_ERR_TLS_INVALID_PROTOCOL_METHOD( + env, "Unknown method: %s", *sslmethod); return; } } sc->ctx_.reset(SSL_CTX_new(method)); + if (!sc->ctx_) { + return ThrowCryptoError(env, ERR_get_error(), "SSL_CTX_new"); + } SSL_CTX_set_app_data(sc->ctx_.get(), sc); // Disable SSLv2 in the case when method == TLS_method() and the @@ -538,9 +541,9 @@ void SecureContext::Init(const FunctionCallbackInfo& args) { // OpenSSL 1.1.0 changed the ticket key size, but the OpenSSL 1.0.x size was // exposed in the public API. To retain compatibility, install a callback // which restores the old algorithm. - if (RAND_bytes(sc->ticket_key_name_, sizeof(sc->ticket_key_name_)) <= 0 || - RAND_bytes(sc->ticket_key_hmac_, sizeof(sc->ticket_key_hmac_)) <= 0 || - RAND_bytes(sc->ticket_key_aes_, sizeof(sc->ticket_key_aes_)) <= 0) { + if (CSPRNG(sc->ticket_key_name_, sizeof(sc->ticket_key_name_)).is_err() || + CSPRNG(sc->ticket_key_hmac_, sizeof(sc->ticket_key_hmac_)).is_err() || + CSPRNG(sc->ticket_key_aes_, sizeof(sc->ticket_key_aes_)).is_err()) { return THROW_ERR_CRYPTO_OPERATION_FAILED( env, "Error generating ticket keys"); } @@ -1116,9 +1119,6 @@ void SecureContext::SetTicketKeys(const FunctionCallbackInfo& args) { #endif // !def(OPENSSL_NO_TLSEXT) && def(SSL_CTX_get_tlsext_ticket_keys) } -void SecureContext::SetFreeListLength(const FunctionCallbackInfo& args) { -} - // Currently, EnableTicketKeyCallback and TicketKeyCallback are only present for // the regression test in test/parallel/test-https-resume-after-renew.js. void SecureContext::EnableTicketKeyCallback( @@ -1241,11 +1241,14 @@ int SecureContext::TicketCompatibilityCallback(SSL* ssl, if (enc) { memcpy(name, sc->ticket_key_name_, sizeof(sc->ticket_key_name_)); - if (RAND_bytes(iv, 16) <= 0 || - EVP_EncryptInit_ex(ectx, EVP_aes_128_cbc(), nullptr, - sc->ticket_key_aes_, iv) <= 0 || - HMAC_Init_ex(hctx, sc->ticket_key_hmac_, sizeof(sc->ticket_key_hmac_), - EVP_sha256(), nullptr) <= 0) { + if (CSPRNG(iv, 16).is_err() || + EVP_EncryptInit_ex( + ectx, EVP_aes_128_cbc(), nullptr, sc->ticket_key_aes_, iv) <= 0 || + HMAC_Init_ex(hctx, + sc->ticket_key_hmac_, + sizeof(sc->ticket_key_hmac_), + EVP_sha256(), + nullptr) <= 0) { return -1; } return 1; diff --git a/src/crypto/crypto_context.h b/src/crypto/crypto_context.h index d9b33a4736f..4dfd0dfa032 100644 --- a/src/crypto/crypto_context.h +++ b/src/crypto/crypto_context.h @@ -41,9 +41,7 @@ class SecureContext final : public BaseObject { static void RegisterExternalReferences(ExternalReferenceRegistry* registry); static SecureContext* Create(Environment* env); - SSL_CTX* operator*() const { return ctx_.get(); } - - SSL_CTX* ssl_ctx() const { return ctx_.get(); } + const SSLCtxPointer& ctx() const { return ctx_; } SSLPointer CreateSSL(); @@ -57,14 +55,6 @@ class SecureContext final : public BaseObject { SET_MEMORY_INFO_NAME(SecureContext) SET_SELF_SIZE(SecureContext) - SSLCtxPointer ctx_; - X509Pointer cert_; - X509Pointer issuer_; -#ifndef OPENSSL_NO_ENGINE - bool client_cert_engine_provided_ = false; - EnginePointer private_key_engine_; -#endif // !OPENSSL_NO_ENGINE - static const int kMaxSessionSize = 10 * 1024; // See TicketKeyCallback @@ -74,10 +64,6 @@ class SecureContext final : public BaseObject { static const int kTicketKeyNameIndex = 3; static const int kTicketKeyIVIndex = 4; - unsigned char ticket_key_name_[16]; - unsigned char ticket_key_aes_[16]; - unsigned char ticket_key_hmac_[16]; - protected: // OpenSSL structures are opaque. This is sizeof(SSL_CTX) for OpenSSL 1.1.1b: static const int64_t kExternalSize = 1024; @@ -114,8 +100,6 @@ class SecureContext final : public BaseObject { #endif // !OPENSSL_NO_ENGINE static void GetTicketKeys(const v8::FunctionCallbackInfo& args); static void SetTicketKeys(const v8::FunctionCallbackInfo& args); - static void SetFreeListLength( - const v8::FunctionCallbackInfo& args); static void EnableTicketKeyCallback( const v8::FunctionCallbackInfo& args); static void CtxGetter(const v8::FunctionCallbackInfo& info); @@ -139,6 +123,19 @@ class SecureContext final : public BaseObject { SecureContext(Environment* env, v8::Local wrap); void Reset(); + + private: + SSLCtxPointer ctx_; + X509Pointer cert_; + X509Pointer issuer_; +#ifndef OPENSSL_NO_ENGINE + bool client_cert_engine_provided_ = false; + EnginePointer private_key_engine_; +#endif // !OPENSSL_NO_ENGINE + + unsigned char ticket_key_name_[16]; + unsigned char ticket_key_aes_[16]; + unsigned char ticket_key_hmac_[16]; }; } // namespace crypto diff --git a/src/crypto/crypto_dh.cc b/src/crypto/crypto_dh.cc index b6ef5e5b1e0..3f0146e63be 100644 --- a/src/crypto/crypto_dh.cc +++ b/src/crypto/crypto_dh.cc @@ -1,9 +1,8 @@ #include "crypto/crypto_dh.h" -#include "crypto/crypto_keys.h" -#include "crypto/crypto_groups.h" -#include "allocated_buffer-inl.h" #include "async_wrap-inl.h" #include "base_object-inl.h" +#include "crypto/crypto_groups.h" +#include "crypto/crypto_keys.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "threadpoolwork-inl.h" @@ -11,13 +10,17 @@ namespace node { +using v8::ArrayBuffer; +using v8::BackingStore; using v8::ConstructorBehavior; +using v8::Context; using v8::DontDelete; using v8::FunctionCallback; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::Int32; +using v8::Isolate; using v8::Just; using v8::Local; using v8::Maybe; @@ -28,14 +31,13 @@ using v8::ReadOnly; using v8::SideEffectType; using v8::Signature; using v8::String; -using v8::Uint8Array; using v8::Value; namespace crypto { namespace { -static void ZeroPadDiffieHellmanSecret(size_t remainder_size, - char* data, - size_t length) { +void ZeroPadDiffieHellmanSecret(size_t remainder_size, + char* data, + size_t length) { // DH_size returns number of bytes in a prime number. // DH_compute_key returns number of bytes in a remainder of exponent, which // may have less bytes than a prime number. Therefore add 0-padding to the @@ -48,10 +50,6 @@ static void ZeroPadDiffieHellmanSecret(size_t remainder_size, memset(data, 0, padding); } } -static void ZeroPadDiffieHellmanSecret(size_t remainder_size, - AllocatedBuffer* ret) { - ZeroPadDiffieHellmanSecret(remainder_size, ret->data(), ret->size()); -} } // namespace DiffieHellman::DiffieHellman(Environment* env, Local wrap) @@ -60,8 +58,10 @@ DiffieHellman::DiffieHellman(Environment* env, Local wrap) } void DiffieHellman::Initialize(Environment* env, Local target) { - auto make = [&] (Local name, FunctionCallback callback) { - Local t = env->NewFunctionTemplate(callback); + Isolate* isolate = env->isolate(); + Local context = env->context(); + auto make = [&](Local name, FunctionCallback callback) { + Local t = NewFunctionTemplate(isolate, callback); const PropertyAttribute attributes = static_cast(ReadOnly | DontDelete); @@ -70,17 +70,17 @@ void DiffieHellman::Initialize(Environment* env, Local target) { DiffieHellman::kInternalFieldCount); t->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "generateKeys", GenerateKeys); - env->SetProtoMethod(t, "computeSecret", ComputeSecret); - env->SetProtoMethodNoSideEffect(t, "getPrime", GetPrime); - env->SetProtoMethodNoSideEffect(t, "getGenerator", GetGenerator); - env->SetProtoMethodNoSideEffect(t, "getPublicKey", GetPublicKey); - env->SetProtoMethodNoSideEffect(t, "getPrivateKey", GetPrivateKey); - env->SetProtoMethod(t, "setPublicKey", SetPublicKey); - env->SetProtoMethod(t, "setPrivateKey", SetPrivateKey); + SetProtoMethod(isolate, t, "generateKeys", GenerateKeys); + SetProtoMethod(isolate, t, "computeSecret", ComputeSecret); + SetProtoMethodNoSideEffect(isolate, t, "getPrime", GetPrime); + SetProtoMethodNoSideEffect(isolate, t, "getGenerator", GetGenerator); + SetProtoMethodNoSideEffect(isolate, t, "getPublicKey", GetPublicKey); + SetProtoMethodNoSideEffect(isolate, t, "getPrivateKey", GetPrivateKey); + SetProtoMethod(isolate, t, "setPublicKey", SetPublicKey); + SetProtoMethod(isolate, t, "setPrivateKey", SetPrivateKey); Local verify_error_getter_templ = - FunctionTemplate::New(env->isolate(), + FunctionTemplate::New(isolate, DiffieHellman::VerifyErrorGetter, Local(), Signature::New(env->isolate(), t), @@ -94,14 +94,15 @@ void DiffieHellman::Initialize(Environment* env, Local target) { Local(), attributes); - env->SetConstructorFunction(target, name, t); + SetConstructorFunction(context, target, name, t); }; make(FIXED_ONE_BYTE_STRING(env->isolate(), "DiffieHellman"), New); make(FIXED_ONE_BYTE_STRING(env->isolate(), "DiffieHellmanGroup"), DiffieHellmanGroup); - env->SetMethodNoSideEffect(target, "statelessDH", DiffieHellman::Stateless); + SetMethodNoSideEffect( + context, target, "statelessDH", DiffieHellman::Stateless); DHKeyPairGenJob::Initialize(env, target); DHKeyExportJob::Initialize(env, target); DHBitsJob::Initialize(env, target); @@ -273,13 +274,24 @@ void DiffieHellman::GenerateKeys(const FunctionCallbackInfo& args) { const BIGNUM* pub_key; DH_get0_key(diffieHellman->dh_.get(), &pub_key, nullptr); - const int size = BN_num_bytes(pub_key); - CHECK_GE(size, 0); - AllocatedBuffer data = AllocatedBuffer::AllocateManaged(env, size); - CHECK_EQ(size, - BN_bn2binpad( - pub_key, reinterpret_cast(data.data()), size)); - args.GetReturnValue().Set(data.ToBuffer().FromMaybe(Local())); + + std::unique_ptr bs; + { + const int size = BN_num_bytes(pub_key); + CHECK_GE(size, 0); + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); + bs = ArrayBuffer::NewBackingStore(env->isolate(), size); + } + + CHECK_EQ(static_cast(bs->ByteLength()), + BN_bn2binpad(pub_key, + static_cast(bs->Data()), + bs->ByteLength())); + + Local ab = ArrayBuffer::New(env->isolate(), std::move(bs)); + Local buffer; + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; + args.GetReturnValue().Set(buffer); } @@ -295,13 +307,23 @@ void DiffieHellman::GetField(const FunctionCallbackInfo& args, if (num == nullptr) return THROW_ERR_CRYPTO_INVALID_STATE(env, err_if_null); - const int size = BN_num_bytes(num); - CHECK_GE(size, 0); - AllocatedBuffer data = AllocatedBuffer::AllocateManaged(env, size); - CHECK_EQ( - size, - BN_bn2binpad(num, reinterpret_cast(data.data()), size)); - args.GetReturnValue().Set(data.ToBuffer().FromMaybe(Local())); + std::unique_ptr bs; + { + const int size = BN_num_bytes(num); + CHECK_GE(size, 0); + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); + bs = ArrayBuffer::NewBackingStore(env->isolate(), size); + } + + CHECK_EQ(static_cast(bs->ByteLength()), + BN_bn2binpad(num, + static_cast(bs->Data()), + bs->ByteLength())); + + Local ab = ArrayBuffer::New(env->isolate(), std::move(bs)); + Local buffer; + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; + args.GetReturnValue().Set(buffer); } void DiffieHellman::GetPrime(const FunctionCallbackInfo& args) { @@ -350,10 +372,14 @@ void DiffieHellman::ComputeSecret(const FunctionCallbackInfo& args) { return THROW_ERR_OUT_OF_RANGE(env, "secret is too big"); BignumPointer key(BN_bin2bn(key_buf.data(), key_buf.size(), nullptr)); - AllocatedBuffer ret = - AllocatedBuffer::AllocateManaged(env, DH_size(diffieHellman->dh_.get())); + std::unique_ptr bs; + { + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); + bs = ArrayBuffer::NewBackingStore(env->isolate(), + DH_size(diffieHellman->dh_.get())); + } - int size = DH_compute_key(reinterpret_cast(ret.data()), + int size = DH_compute_key(static_cast(bs->Data()), key.get(), diffieHellman->dh_.get()); @@ -381,9 +407,14 @@ void DiffieHellman::ComputeSecret(const FunctionCallbackInfo& args) { } CHECK_GE(size, 0); - ZeroPadDiffieHellmanSecret(static_cast(size), &ret); + ZeroPadDiffieHellmanSecret(size, + static_cast(bs->Data()), + bs->ByteLength()); - args.GetReturnValue().Set(ret.ToBuffer().FromMaybe(Local())); + Local ab = ArrayBuffer::New(env->isolate(), std::move(bs)); + Local buffer; + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; + args.GetReturnValue().Set(buffer); } void DiffieHellman::SetKey(const FunctionCallbackInfo& args, @@ -603,8 +634,10 @@ void DiffieHellman::Stateless(const FunctionCallbackInfo& args) { ManagedEVPPKey our_key = our_key_object->Data()->GetAsymmetricKey(); ManagedEVPPKey their_key = their_key_object->Data()->GetAsymmetricKey(); - Local out = StatelessDiffieHellmanThreadsafe(our_key, their_key) - .ToBuffer(env).FromMaybe(Local()); + Local out; + if (!StatelessDiffieHellmanThreadsafe(our_key, their_key) + .ToBuffer(env) + .ToLocal(&out)) return; if (Buffer::Length(out) == 0) return ThrowCryptoError(env, ERR_get_error(), "diffieHellman failed"); diff --git a/src/crypto/crypto_dsa.cc b/src/crypto/crypto_dsa.cc index c7894baf00e..862c091b05f 100644 --- a/src/crypto/crypto_dsa.cc +++ b/src/crypto/crypto_dsa.cc @@ -12,6 +12,17 @@ #include +// EVP_PKEY_CTX_set_dsa_paramgen_q_bits was added in OpenSSL 1.1.1e. +#if OPENSSL_VERSION_NUMBER < 0x1010105fL +#define EVP_PKEY_CTX_set_dsa_paramgen_q_bits(ctx, qbits) \ + EVP_PKEY_CTX_ctrl((ctx), \ + EVP_PKEY_DSA, \ + EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, \ + (qbits), \ + nullptr) +#endif + namespace node { using v8::FunctionCallbackInfo; @@ -39,13 +50,8 @@ EVPKeyCtxPointer DsaKeyGenTraits::Setup(DsaKeyPairGenConfig* params) { } if (params->params.divisor_bits != -1) { - if (EVP_PKEY_CTX_ctrl( - param_ctx.get(), - EVP_PKEY_DSA, - EVP_PKEY_OP_PARAMGEN, - EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, - params->params.divisor_bits, - nullptr) <= 0) { + if (EVP_PKEY_CTX_set_dsa_paramgen_q_bits( + param_ctx.get(), params->params.divisor_bits) <= 0) { return EVPKeyCtxPointer(); } } diff --git a/src/crypto/crypto_ec.cc b/src/crypto/crypto_ec.cc index 2d738bb9b62..cd0a4a74aa1 100644 --- a/src/crypto/crypto_ec.cc +++ b/src/crypto/crypto_ec.cc @@ -1,9 +1,8 @@ #include "crypto/crypto_ec.h" -#include "crypto/crypto_common.h" -#include "crypto/crypto_util.h" -#include "allocated_buffer-inl.h" #include "async_wrap-inl.h" #include "base_object-inl.h" +#include "crypto/crypto_common.h" +#include "crypto/crypto_util.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "node_buffer.h" @@ -20,9 +19,13 @@ namespace node { using v8::Array; +using v8::ArrayBuffer; +using v8::BackingStore; +using v8::Context; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::Int32; +using v8::Isolate; using v8::Just; using v8::JustVoid; using v8::Local; @@ -44,13 +47,13 @@ int GetCurveFromName(const char* name) { int GetOKPCurveFromName(const char* name) { int nid; - if (strcmp(name, "NODE-ED25519") == 0) { + if (strcmp(name, "Ed25519") == 0) { nid = EVP_PKEY_ED25519; - } else if (strcmp(name, "NODE-ED448") == 0) { + } else if (strcmp(name, "Ed448") == 0) { nid = EVP_PKEY_ED448; - } else if (strcmp(name, "NODE-X25519") == 0) { + } else if (strcmp(name, "X25519") == 0) { nid = EVP_PKEY_X25519; - } else if (strcmp(name, "NODE-X448") == 0) { + } else if (strcmp(name, "X448") == 0) { nid = EVP_PKEY_X448; } else { nid = NID_undef; @@ -59,22 +62,25 @@ int GetOKPCurveFromName(const char* name) { } void ECDH::Initialize(Environment* env, Local target) { - Local t = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + Local context = env->context(); + + Local t = NewFunctionTemplate(isolate, New); t->Inherit(BaseObject::GetConstructorTemplate(env)); t->InstanceTemplate()->SetInternalFieldCount(ECDH::kInternalFieldCount); - env->SetProtoMethod(t, "generateKeys", GenerateKeys); - env->SetProtoMethod(t, "computeSecret", ComputeSecret); - env->SetProtoMethodNoSideEffect(t, "getPublicKey", GetPublicKey); - env->SetProtoMethodNoSideEffect(t, "getPrivateKey", GetPrivateKey); - env->SetProtoMethod(t, "setPublicKey", SetPublicKey); - env->SetProtoMethod(t, "setPrivateKey", SetPrivateKey); + SetProtoMethod(isolate, t, "generateKeys", GenerateKeys); + SetProtoMethod(isolate, t, "computeSecret", ComputeSecret); + SetProtoMethodNoSideEffect(isolate, t, "getPublicKey", GetPublicKey); + SetProtoMethodNoSideEffect(isolate, t, "getPrivateKey", GetPrivateKey); + SetProtoMethod(isolate, t, "setPublicKey", SetPublicKey); + SetProtoMethod(isolate, t, "setPrivateKey", SetPrivateKey); - env->SetConstructorFunction(target, "ECDH", t); + SetConstructorFunction(context, target, "ECDH", t); - env->SetMethodNoSideEffect(target, "ECDHConvertKey", ECDH::ConvertKey); - env->SetMethodNoSideEffect(target, "getCurves", ECDH::GetCurves); + SetMethodNoSideEffect(context, target, "ECDHConvertKey", ECDH::ConvertKey); + SetMethodNoSideEffect(context, target, "getCurves", ECDH::GetCurves); ECDHBitsJob::Initialize(env, target); ECKeyPairGenJob::Initialize(env, target); @@ -103,23 +109,14 @@ void ECDH::RegisterExternalReferences(ExternalReferenceRegistry* registry) { void ECDH::GetCurves(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); const size_t num_curves = EC_get_builtin_curves(nullptr, 0); + std::vector curves(num_curves); + CHECK_EQ(EC_get_builtin_curves(curves.data(), num_curves), num_curves); - if (num_curves) { - std::vector curves(num_curves); - - if (EC_get_builtin_curves(curves.data(), num_curves)) { - std::vector> arr(num_curves); - - for (size_t i = 0; i < num_curves; i++) - arr[i] = OneByteString(env->isolate(), OBJ_nid2sn(curves[i].nid)); - - args.GetReturnValue().Set( - Array::New(env->isolate(), arr.data(), arr.size())); - return; - } - } - - args.GetReturnValue().Set(Array::New(env->isolate())); + std::vector> arr(num_curves); + std::transform(curves.begin(), curves.end(), arr.begin(), [env](auto& curve) { + return OneByteString(env->isolate(), OBJ_nid2sn(curve.nid)); + }); + args.GetReturnValue().Set(Array::New(env->isolate(), arr.data(), arr.size())); } ECDH::ECDH(Environment* env, Local wrap, ECKeyPointer&& key) @@ -220,17 +217,23 @@ void ECDH::ComputeSecret(const FunctionCallbackInfo& args) { return; } - // NOTE: field_size is in bits - int field_size = EC_GROUP_get_degree(ecdh->group_); - size_t out_len = (field_size + 7) / 8; - AllocatedBuffer out = AllocatedBuffer::AllocateManaged(env, out_len); + std::unique_ptr bs; + { + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); + // NOTE: field_size is in bits + int field_size = EC_GROUP_get_degree(ecdh->group_); + size_t out_len = (field_size + 7) / 8; + bs = ArrayBuffer::NewBackingStore(env->isolate(), out_len); + } - int r = ECDH_compute_key( - out.data(), out_len, pub.get(), ecdh->key_.get(), nullptr); - if (!r) + if (!ECDH_compute_key( + bs->Data(), bs->ByteLength(), pub.get(), ecdh->key_.get(), nullptr)) return THROW_ERR_CRYPTO_OPERATION_FAILED(env, "Failed to compute ECDH key"); - args.GetReturnValue().Set(out.ToBuffer().FromMaybe(Local())); + Local ab = ArrayBuffer::New(env->isolate(), std::move(bs)); + Local buffer; + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; + args.GetReturnValue().Set(buffer); } void ECDH::GetPublicKey(const FunctionCallbackInfo& args) { @@ -270,13 +273,19 @@ void ECDH::GetPrivateKey(const FunctionCallbackInfo& args) { return THROW_ERR_CRYPTO_OPERATION_FAILED(env, "Failed to get ECDH private key"); - const int size = BN_num_bytes(b); - AllocatedBuffer out = AllocatedBuffer::AllocateManaged(env, size); - CHECK_EQ(size, BN_bn2binpad(b, - reinterpret_cast(out.data()), - size)); + std::unique_ptr bs; + { + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); + bs = ArrayBuffer::NewBackingStore(env->isolate(), BN_num_bytes(b)); + } + CHECK_EQ(static_cast(bs->ByteLength()), + BN_bn2binpad( + b, static_cast(bs->Data()), bs->ByteLength())); - args.GetReturnValue().Set(out.ToBuffer().FromMaybe(Local())); + Local ab = ArrayBuffer::New(env->isolate(), std::move(bs)); + Local buffer; + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; + args.GetReturnValue().Set(buffer); } void ECDH::SetPrivateKey(const FunctionCallbackInfo& args) { diff --git a/src/crypto/crypto_ec.h b/src/crypto/crypto_ec.h index bc4160fc8be..9782ce0bf35 100644 --- a/src/crypto/crypto_ec.h +++ b/src/crypto/crypto_ec.h @@ -3,12 +3,11 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -#include "crypto/crypto_keys.h" -#include "crypto/crypto_keygen.h" -#include "crypto/crypto_util.h" -#include "allocated_buffer.h" #include "async_wrap.h" #include "base_object.h" +#include "crypto/crypto_keygen.h" +#include "crypto/crypto_keys.h" +#include "crypto/crypto_util.h" #include "env.h" #include "memory_tracker.h" #include "node_internals.h" diff --git a/src/crypto/crypto_groups.h b/src/crypto/crypto_groups.h index c49b4356d8a..c43569db5e6 100644 --- a/src/crypto/crypto_groups.h +++ b/src/crypto/crypto_groups.h @@ -390,12 +390,12 @@ static const unsigned char group_modp18[] = { 0x80, 0xdd, 0x98, 0xed, 0xd3, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; -typedef struct { +struct modp_group { const char* name; const char* prime; unsigned int prime_size; unsigned int gen; -} modp_group; +}; static const modp_group modp_groups[] = { #define V(var) reinterpret_cast(var) diff --git a/src/crypto/crypto_hash.cc b/src/crypto/crypto_hash.cc index ceea9e59570..00ec9d60530 100644 --- a/src/crypto/crypto_hash.cc +++ b/src/crypto/crypto_hash.cc @@ -1,5 +1,4 @@ #include "crypto/crypto_hash.h" -#include "allocated_buffer-inl.h" #include "async_wrap-inl.h" #include "base_object-inl.h" #include "env-inl.h" @@ -12,8 +11,10 @@ namespace node { +using v8::Context; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; +using v8::Isolate; using v8::Just; using v8::Local; using v8::Maybe; @@ -52,18 +53,20 @@ void Hash::GetHashes(const FunctionCallbackInfo& args) { } void Hash::Initialize(Environment* env, Local target) { - Local t = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + Local context = env->context(); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate()->SetInternalFieldCount( Hash::kInternalFieldCount); t->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "update", HashUpdate); - env->SetProtoMethod(t, "digest", HashDigest); + SetProtoMethod(isolate, t, "update", HashUpdate); + SetProtoMethod(isolate, t, "digest", HashDigest); - env->SetConstructorFunction(target, "Hash", t); + SetConstructorFunction(context, target, "Hash", t); - env->SetMethodNoSideEffect(target, "getHashes", GetHashes); + SetMethodNoSideEffect(context, target, "getHashes", GetHashes); HashJob::Initialize(env, target); } diff --git a/src/crypto/crypto_hash.h b/src/crypto/crypto_hash.h index cfc09334ce0..96a9804420d 100644 --- a/src/crypto/crypto_hash.h +++ b/src/crypto/crypto_hash.h @@ -3,10 +3,9 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS +#include "base_object.h" #include "crypto/crypto_keys.h" #include "crypto/crypto_util.h" -#include "allocated_buffer.h" -#include "base_object.h" #include "env.h" #include "memory_tracker.h" #include "v8.h" diff --git a/src/crypto/crypto_hkdf.cc b/src/crypto/crypto_hkdf.cc index 0aa96ada47a..f4c004b3846 100644 --- a/src/crypto/crypto_hkdf.cc +++ b/src/crypto/crypto_hkdf.cc @@ -1,8 +1,7 @@ #include "crypto/crypto_hkdf.h" -#include "crypto/crypto_keys.h" -#include "allocated_buffer-inl.h" #include "async_wrap-inl.h" #include "base_object-inl.h" +#include "crypto/crypto_keys.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "threadpoolwork-inl.h" @@ -59,7 +58,7 @@ Maybe HKDFTraits::AdditionalConfig( Utf8Value hash(env->isolate(), args[offset]); params->digest = EVP_get_digestbyname(*hash); if (params->digest == nullptr) { - THROW_ERR_CRYPTO_INVALID_DIGEST(env); + THROW_ERR_CRYPTO_INVALID_DIGEST(env, "Invalid digest: %s", *hash); return Nothing(); } @@ -103,19 +102,8 @@ bool HKDFTraits::DeriveBits( ByteSource* out) { EVPKeyCtxPointer ctx = EVPKeyCtxPointer(EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, nullptr)); - if (!ctx || - !EVP_PKEY_derive_init(ctx.get()) || - !EVP_PKEY_CTX_hkdf_mode( - ctx.get(), EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND) || + if (!ctx || !EVP_PKEY_derive_init(ctx.get()) || !EVP_PKEY_CTX_set_hkdf_md(ctx.get(), params.digest) || - !EVP_PKEY_CTX_set1_hkdf_salt( - ctx.get(), - reinterpret_cast(params.salt.get()), - params.salt.size()) || - !EVP_PKEY_CTX_set1_hkdf_key( - ctx.get(), - reinterpret_cast(params.key->GetSymmetricKey()), - params.key->GetSymmetricKeySize()) || !EVP_PKEY_CTX_add1_hkdf_info( ctx.get(), reinterpret_cast(params.info.get()), @@ -123,6 +111,52 @@ bool HKDFTraits::DeriveBits( return false; } + // TODO(panva): Once support for OpenSSL 1.1.1 is dropped the whole + // of HKDFTraits::DeriveBits can be refactored to use + // EVP_KDF which does handle zero length key. + if (params.key->GetSymmetricKeySize() != 0) { + if (!EVP_PKEY_CTX_hkdf_mode(ctx.get(), + EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND) || + !EVP_PKEY_CTX_set1_hkdf_salt( + ctx.get(), params.salt.data(), params.salt.size()) || + !EVP_PKEY_CTX_set1_hkdf_key(ctx.get(), + reinterpret_cast( + params.key->GetSymmetricKey()), + params.key->GetSymmetricKeySize())) { + return false; + } + } else { + // Workaround for EVP_PKEY_derive HKDF not handling zero length keys. + unsigned char temp_key[EVP_MAX_MD_SIZE]; + unsigned int len = sizeof(temp_key); + if (params.salt.size() != 0) { + if (HMAC(params.digest, + params.salt.data(), + params.salt.size(), + nullptr, + 0, + temp_key, + &len) == nullptr) { + return false; + } + } else { + char salt[EVP_MAX_MD_SIZE] = {0}; + if (HMAC(params.digest, + salt, + EVP_MD_size(params.digest), + nullptr, + 0, + temp_key, + &len) == nullptr) { + return false; + } + } + if (!EVP_PKEY_CTX_hkdf_mode(ctx.get(), EVP_PKEY_HKDEF_MODE_EXPAND_ONLY) || + !EVP_PKEY_CTX_set1_hkdf_key(ctx.get(), temp_key, len)) { + return false; + } + } + size_t length = params.length; char* data = MallocOpenSSL(length); ByteSource buf = ByteSource::Allocated(data, length); diff --git a/src/crypto/crypto_hkdf.h b/src/crypto/crypto_hkdf.h index 666aad65474..ef2d03c2091 100644 --- a/src/crypto/crypto_hkdf.h +++ b/src/crypto/crypto_hkdf.h @@ -3,11 +3,10 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -#include "crypto/crypto_keys.h" -#include "crypto/crypto_util.h" -#include "allocated_buffer.h" #include "async_wrap.h" #include "base_object.h" +#include "crypto/crypto_keys.h" +#include "crypto/crypto_util.h" #include "v8.h" namespace node { diff --git a/src/crypto/crypto_hmac.cc b/src/crypto/crypto_hmac.cc index d6a652ff8f5..fec9f112ca4 100644 --- a/src/crypto/crypto_hmac.cc +++ b/src/crypto/crypto_hmac.cc @@ -1,10 +1,9 @@ #include "crypto/crypto_hmac.h" +#include "async_wrap-inl.h" +#include "base_object-inl.h" #include "crypto/crypto_keys.h" #include "crypto/crypto_sig.h" #include "crypto/crypto_util.h" -#include "allocated_buffer-inl.h" -#include "async_wrap-inl.h" -#include "base_object-inl.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "node_buffer.h" @@ -17,6 +16,7 @@ namespace node { using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; +using v8::Isolate; using v8::Just; using v8::Local; using v8::Maybe; @@ -38,17 +38,18 @@ void Hmac::MemoryInfo(MemoryTracker* tracker) const { } void Hmac::Initialize(Environment* env, Local target) { - Local t = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate()->SetInternalFieldCount( Hmac::kInternalFieldCount); t->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "init", HmacInit); - env->SetProtoMethod(t, "update", HmacUpdate); - env->SetProtoMethod(t, "digest", HmacDigest); + SetProtoMethod(isolate, t, "init", HmacInit); + SetProtoMethod(isolate, t, "update", HmacUpdate); + SetProtoMethod(isolate, t, "digest", HmacDigest); - env->SetConstructorFunction(target, "Hmac", t); + SetConstructorFunction(env->context(), target, "Hmac", t); HmacJob::Initialize(env, target); } @@ -71,7 +72,8 @@ void Hmac::HmacInit(const char* hash_type, const char* key, int key_len) { const EVP_MD* md = EVP_get_digestbyname(hash_type); if (md == nullptr) - return THROW_ERR_CRYPTO_INVALID_DIGEST(env()); + return THROW_ERR_CRYPTO_INVALID_DIGEST( + env(), "Invalid digest: %s", hash_type); if (key_len == 0) { key = ""; } @@ -188,7 +190,7 @@ Maybe HmacTraits::AdditionalConfig( Utf8Value digest(env->isolate(), args[offset + 1]); params->digest = EVP_get_digestbyname(*digest); if (params->digest == nullptr) { - THROW_ERR_CRYPTO_INVALID_DIGEST(env); + THROW_ERR_CRYPTO_INVALID_DIGEST(env, "Invalid digest: %s", *digest); return Nothing(); } diff --git a/src/crypto/crypto_hmac.h b/src/crypto/crypto_hmac.h index c37fc4a82c6..c80cc36f11d 100644 --- a/src/crypto/crypto_hmac.h +++ b/src/crypto/crypto_hmac.h @@ -3,11 +3,10 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS +#include "base_object.h" #include "crypto/crypto_keys.h" #include "crypto/crypto_sig.h" #include "crypto/crypto_util.h" -#include "allocated_buffer.h" -#include "base_object.h" #include "env.h" #include "memory_tracker.h" #include "v8.h" diff --git a/src/crypto/crypto_keygen.cc b/src/crypto/crypto_keygen.cc index 24943883b7b..8def58a5f10 100644 --- a/src/crypto/crypto_keygen.cc +++ b/src/crypto/crypto_keygen.cc @@ -1,5 +1,4 @@ #include "crypto/crypto_keygen.h" -#include "allocated_buffer-inl.h" #include "async_wrap-inl.h" #include "base_object-inl.h" #include "debug_utils-inl.h" @@ -66,14 +65,11 @@ Maybe SecretKeyGenTraits::AdditionalConfig( SecretKeyGenConfig* params) { Environment* env = Environment::GetCurrent(args); CHECK(args[*offset]->IsUint32()); - params->length = static_cast( - std::trunc(args[*offset].As()->Value() / CHAR_BIT)); + params->length = args[*offset].As()->Value() / CHAR_BIT; if (params->length > INT_MAX) { - const std::string msg{ - SPrintF("length must be less than or equal to %s bits", - static_cast(INT_MAX) * CHAR_BIT) - }; - THROW_ERR_OUT_OF_RANGE(env, msg.c_str()); + THROW_ERR_OUT_OF_RANGE(env, + "length must be less than or equal to %u bits", + static_cast(INT_MAX) * CHAR_BIT); return Nothing(); } *offset += 1; @@ -85,7 +81,13 @@ KeyGenJobStatus SecretKeyGenTraits::DoKeyGen( SecretKeyGenConfig* params) { CHECK_LE(params->length, INT_MAX); params->out = MallocOpenSSL(params->length); - EntropySource(reinterpret_cast(params->out), params->length); + if (CSPRNG(reinterpret_cast(params->out), + params->length).is_err()) { + OPENSSL_clear_free(params->out, params->length); + params->out = nullptr; + params->length = 0; + return KeyGenJobStatus::FAILED; + } return KeyGenJobStatus::OK; } diff --git a/src/crypto/crypto_keygen.h b/src/crypto/crypto_keygen.h index f8d863a2d93..1a933a24780 100644 --- a/src/crypto/crypto_keygen.h +++ b/src/crypto/crypto_keygen.h @@ -3,11 +3,10 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -#include "crypto/crypto_keys.h" -#include "crypto/crypto_util.h" -#include "allocated_buffer.h" #include "async_wrap.h" #include "base_object.h" +#include "crypto/crypto_keys.h" +#include "crypto/crypto_util.h" #include "env.h" #include "memory_tracker.h" #include "v8.h" @@ -76,9 +75,6 @@ class KeyGenJob final : public CryptoJob { std::move(params)) {} void DoThreadPoolWork() override { - // Make sure the CSPRNG is properly seeded so the results are secure. - CheckEntropy(); - AdditionalParams* params = CryptoJob::params(); switch (KeyGenTraits::DoKeyGen(AsyncWrap::env(), params)) { @@ -187,16 +183,12 @@ struct KeyPairGenTraits final { AdditionalParameters* params, v8::Local* result) { v8::Local keys[2]; - if (ManagedEVPPKey::ToEncodedPublicKey( - env, - std::move(params->key), - params->public_key_encoding, - &keys[0]).IsNothing() || - ManagedEVPPKey::ToEncodedPrivateKey( - env, - std::move(params->key), - params->private_key_encoding, - &keys[1]).IsNothing()) { + if (params->key + .ToEncodedPublicKey(env, params->public_key_encoding, &keys[0]) + .IsNothing() || + params->key + .ToEncodedPrivateKey(env, params->private_key_encoding, &keys[1]) + .IsNothing()) { return v8::Nothing(); } *result = v8::Array::New(env->isolate(), keys, arraysize(keys)); @@ -205,8 +197,8 @@ struct KeyPairGenTraits final { }; struct SecretKeyGenConfig final : public MemoryRetainer { - size_t length; // Expressed a a number of bits - char* out = nullptr; // Placeholder for the generated key bytes + size_t length; // In bytes. + char* out = nullptr; // Placeholder for the generated key bytes. void MemoryInfo(MemoryTracker* tracker) const override; SET_MEMORY_INFO_NAME(SecretKeyGenConfig) diff --git a/src/crypto/crypto_keys.cc b/src/crypto/crypto_keys.cc index 5dd04edfbfa..d44005ea439 100644 --- a/src/crypto/crypto_keys.cc +++ b/src/crypto/crypto_keys.cc @@ -24,6 +24,7 @@ using v8::Function; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::Int32; +using v8::Isolate; using v8::Just; using v8::Local; using v8::Maybe; @@ -632,44 +633,42 @@ Maybe ExportJWKInner(Environment* env, Maybe ManagedEVPPKey::ToEncodedPublicKey( Environment* env, - ManagedEVPPKey key, const PublicKeyEncodingConfig& config, Local* out) { - if (!key) return Nothing(); + if (!*this) return Nothing(); if (config.output_key_object_) { // Note that this has the downside of containing sensitive data of the // private key. std::shared_ptr data = - KeyObjectData::CreateAsymmetric(kKeyTypePublic, std::move(key)); + KeyObjectData::CreateAsymmetric(kKeyTypePublic, *this); return Tristate(KeyObjectHandle::Create(env, data).ToLocal(out)); } else if (config.format_ == kKeyFormatJWK) { std::shared_ptr data = - KeyObjectData::CreateAsymmetric(kKeyTypePublic, std::move(key)); + KeyObjectData::CreateAsymmetric(kKeyTypePublic, *this); *out = Object::New(env->isolate()); return ExportJWKInner(env, data, *out, false); } - return Tristate(WritePublicKey(env, key.get(), config).ToLocal(out)); + return Tristate(WritePublicKey(env, get(), config).ToLocal(out)); } Maybe ManagedEVPPKey::ToEncodedPrivateKey( Environment* env, - ManagedEVPPKey key, const PrivateKeyEncodingConfig& config, Local* out) { - if (!key) return Nothing(); + if (!*this) return Nothing(); if (config.output_key_object_) { std::shared_ptr data = - KeyObjectData::CreateAsymmetric(kKeyTypePrivate, std::move(key)); + KeyObjectData::CreateAsymmetric(kKeyTypePrivate, *this); return Tristate(KeyObjectHandle::Create(env, data).ToLocal(out)); } else if (config.format_ == kKeyFormatJWK) { std::shared_ptr data = - KeyObjectData::CreateAsymmetric(kKeyTypePrivate, std::move(key)); + KeyObjectData::CreateAsymmetric(kKeyTypePrivate, *this); *out = Object::New(env->isolate()); return ExportJWKInner(env, data, *out, false); } - return Tristate(WritePrivateKey(env, key.get(), config).ToLocal(out)); + return Tristate(WritePrivateKey(env, get(), config).ToLocal(out)); } NonCopyableMaybe @@ -840,20 +839,13 @@ ManagedEVPPKey ManagedEVPPKey::GetParsedKey(Environment* env, return ManagedEVPPKey(std::move(pkey)); } -KeyObjectData::KeyObjectData( - ByteSource symmetric_key) +KeyObjectData::KeyObjectData(ByteSource symmetric_key) : key_type_(KeyType::kKeyTypeSecret), symmetric_key_(std::move(symmetric_key)), - symmetric_key_len_(symmetric_key_.size()), asymmetric_key_() {} -KeyObjectData::KeyObjectData( - KeyType type, - const ManagedEVPPKey& pkey) - : key_type_(type), - symmetric_key_(), - symmetric_key_len_(0), - asymmetric_key_{pkey} {} +KeyObjectData::KeyObjectData(KeyType type, const ManagedEVPPKey& pkey) + : key_type_(type), symmetric_key_(), asymmetric_key_{pkey} {} void KeyObjectData::MemoryInfo(MemoryTracker* tracker) const { switch (GetKeyType()) { @@ -871,7 +863,6 @@ void KeyObjectData::MemoryInfo(MemoryTracker* tracker) const { } std::shared_ptr KeyObjectData::CreateSecret(ByteSource key) { - CHECK(key); return std::shared_ptr(new KeyObjectData(std::move(key))); } @@ -898,7 +889,7 @@ const char* KeyObjectData::GetSymmetricKey() const { size_t KeyObjectData::GetSymmetricKeySize() const { CHECK_EQ(key_type_, kKeyTypeSecret); - return symmetric_key_len_; + return symmetric_key_.size(); } v8::Local KeyObjectHandle::Initialize(Environment* env) { @@ -906,23 +897,24 @@ v8::Local KeyObjectHandle::Initialize(Environment* env) { if (!templ.IsEmpty()) { return templ; } - Local t = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate()->SetInternalFieldCount( KeyObjectHandle::kInternalFieldCount); t->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "init", Init); - env->SetProtoMethodNoSideEffect(t, "getSymmetricKeySize", - GetSymmetricKeySize); - env->SetProtoMethodNoSideEffect(t, "getAsymmetricKeyType", - GetAsymmetricKeyType); - env->SetProtoMethod(t, "export", Export); - env->SetProtoMethod(t, "exportJwk", ExportJWK); - env->SetProtoMethod(t, "initECRaw", InitECRaw); - env->SetProtoMethod(t, "initEDRaw", InitEDRaw); - env->SetProtoMethod(t, "initJwk", InitJWK); - env->SetProtoMethod(t, "keyDetail", GetKeyDetail); - env->SetProtoMethod(t, "equals", Equals); + SetProtoMethod(isolate, t, "init", Init); + SetProtoMethodNoSideEffect( + isolate, t, "getSymmetricKeySize", GetSymmetricKeySize); + SetProtoMethodNoSideEffect( + isolate, t, "getAsymmetricKeyType", GetAsymmetricKeyType); + SetProtoMethod(isolate, t, "export", Export); + SetProtoMethod(isolate, t, "exportJwk", ExportJWK); + SetProtoMethod(isolate, t, "initECRaw", InitECRaw); + SetProtoMethod(isolate, t, "initEDRaw", InitEDRaw); + SetProtoMethod(isolate, t, "initJwk", InitJWK); + SetProtoMethod(isolate, t, "keyDetail", GetKeyDetail); + SetProtoMethod(isolate, t, "equals", Equals); auto function = t->GetFunction(env->context()).ToLocalChecked(); env->set_crypto_key_object_handle_constructor(function); @@ -1317,8 +1309,10 @@ void KeyObjectHandle::ExportJWK( } void NativeKeyObject::Initialize(Environment* env, Local target) { - env->SetMethod(target, "createNativeKeyObjectClass", - NativeKeyObject::CreateNativeKeyObjectClass); + SetMethod(env->context(), + target, + "createNativeKeyObjectClass", + NativeKeyObject::CreateNativeKeyObjectClass); } void NativeKeyObject::RegisterExternalReferences( @@ -1338,12 +1332,14 @@ void NativeKeyObject::New(const FunctionCallbackInfo& args) { void NativeKeyObject::CreateNativeKeyObjectClass( const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); + Isolate* isolate = env->isolate(); CHECK_EQ(args.Length(), 1); Local callback = args[0]; CHECK(callback->IsFunction()); - Local t = env->NewFunctionTemplate(NativeKeyObject::New); + Local t = + NewFunctionTemplate(isolate, NativeKeyObject::New); t->InstanceTemplate()->SetInternalFieldCount( KeyObjectHandle::kInternalFieldCount); t->Inherit(BaseObject::GetConstructorTemplate(env)); @@ -1384,8 +1380,9 @@ BaseObjectPtr NativeKeyObject::KeyObjectTransferData::Deserialize( Local key_ctor; Local arg = FIXED_ONE_BYTE_STRING(env->isolate(), "internal/crypto/keys"); - if (env->native_module_require()-> - Call(context, Null(env->isolate()), 1, &arg).IsEmpty()) { + if (env->builtin_module_require() + ->Call(context, Null(env->isolate()), 1, &arg) + .IsEmpty()) { return {}; } switch (data_->GetKeyType()) { diff --git a/src/crypto/crypto_keys.h b/src/crypto/crypto_keys.h index d06565d8ad7..7b9c8d7e4ff 100644 --- a/src/crypto/crypto_keys.h +++ b/src/crypto/crypto_keys.h @@ -112,17 +112,13 @@ class ManagedEVPPKey : public MemoryRetainer { unsigned int* offset, bool allow_key_object); - static v8::Maybe ToEncodedPublicKey( - Environment* env, - ManagedEVPPKey key, - const PublicKeyEncodingConfig& config, - v8::Local* out); + v8::Maybe ToEncodedPublicKey(Environment* env, + const PublicKeyEncodingConfig& config, + v8::Local* out); - static v8::Maybe ToEncodedPrivateKey( - Environment* env, - ManagedEVPPKey key, - const PrivateKeyEncodingConfig& config, - v8::Local* out); + v8::Maybe ToEncodedPrivateKey(Environment* env, + const PrivateKeyEncodingConfig& config, + v8::Local* out); private: size_t size_of_private_key() const; @@ -162,7 +158,6 @@ class KeyObjectData : public MemoryRetainer { const KeyType key_type_; const ByteSource symmetric_key_; - const unsigned int symmetric_key_len_; const ManagedEVPPKey asymmetric_key_; }; diff --git a/src/crypto/crypto_pbkdf2.cc b/src/crypto/crypto_pbkdf2.cc index 495722927ab..345c7fe5ce6 100644 --- a/src/crypto/crypto_pbkdf2.cc +++ b/src/crypto/crypto_pbkdf2.cc @@ -1,7 +1,6 @@ #include "crypto/crypto_pbkdf2.h" -#include "crypto/crypto_util.h" -#include "allocated_buffer-inl.h" #include "async_wrap-inl.h" +#include "crypto/crypto_util.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "node_buffer.h" diff --git a/src/crypto/crypto_random.cc b/src/crypto/crypto_random.cc index fc88deb4603..1459e410453 100644 --- a/src/crypto/crypto_random.cc +++ b/src/crypto/crypto_random.cc @@ -1,7 +1,6 @@ #include "crypto/crypto_random.h" -#include "crypto/crypto_util.h" -#include "allocated_buffer-inl.h" #include "async_wrap-inl.h" +#include "crypto/crypto_util.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "threadpoolwork-inl.h" @@ -67,8 +66,7 @@ bool RandomBytesTraits::DeriveBits( Environment* env, const RandomBytesConfig& params, ByteSource* unused) { - CheckEntropy(); // Ensure that OpenSSL's PRNG is properly seeded. - return RAND_bytes(params.buffer, params.size) != 0; + return CSPRNG(params.buffer, params.size).is_ok(); } void RandomPrimeConfig::MemoryInfo(MemoryTracker* tracker) const { @@ -122,11 +120,9 @@ Maybe RandomPrimeTraits::AdditionalConfig( } } + // The JS interface already ensures that the (positive) size fits into an int. int bits = static_cast(size); - if (bits < 0) { - THROW_ERR_OUT_OF_RANGE(env, "invalid size"); - return Nothing(); - } + CHECK_GT(bits, 0); if (params->add) { if (BN_num_bits(params->add.get()) > bits) { @@ -159,12 +155,12 @@ Maybe RandomPrimeTraits::AdditionalConfig( return Just(true); } -bool RandomPrimeTraits::DeriveBits( - Environment* env, - const RandomPrimeConfig& params, - ByteSource* unused) { - - CheckEntropy(); +bool RandomPrimeTraits::DeriveBits(Environment* env, + const RandomPrimeConfig& params, + ByteSource* unused) { + // BN_generate_prime_ex() calls RAND_bytes_ex() internally. + // Make sure the CSPRNG is properly seeded. + CHECK(CSPRNG(nullptr, 0).is_ok()); if (BN_generate_prime_ex( params.prime.get(), diff --git a/src/crypto/crypto_random.h b/src/crypto/crypto_random.h index 970306c30cd..a2807ed6ec8 100644 --- a/src/crypto/crypto_random.h +++ b/src/crypto/crypto_random.h @@ -3,9 +3,8 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -#include "crypto/crypto_util.h" #include "base_object.h" -#include "allocated_buffer.h" +#include "crypto/crypto_util.h" #include "env.h" #include "memory_tracker.h" #include "node_internals.h" diff --git a/src/crypto/crypto_rsa.cc b/src/crypto/crypto_rsa.cc index ae4550e9fde..c79e384feba 100644 --- a/src/crypto/crypto_rsa.cc +++ b/src/crypto/crypto_rsa.cc @@ -1,10 +1,9 @@ #include "crypto/crypto_rsa.h" +#include "async_wrap-inl.h" +#include "base_object-inl.h" #include "crypto/crypto_bio.h" #include "crypto/crypto_keys.h" #include "crypto/crypto_util.h" -#include "allocated_buffer-inl.h" -#include "async_wrap-inl.h" -#include "base_object-inl.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "threadpoolwork-inl.h" @@ -15,6 +14,8 @@ namespace node { +using v8::ArrayBuffer; +using v8::BackingStore; using v8::FunctionCallbackInfo; using v8::Int32; using v8::Just; @@ -152,7 +153,7 @@ Maybe RsaKeyGenTraits::AdditionalConfig( Utf8Value digest(env->isolate(), args[*offset]); params->params.md = EVP_get_digestbyname(*digest); if (params->params.md == nullptr) { - THROW_ERR_CRYPTO_INVALID_DIGEST(env, "md specifies an invalid digest"); + THROW_ERR_CRYPTO_INVALID_DIGEST(env, "Invalid digest: %s", *digest); return Nothing(); } } @@ -162,8 +163,8 @@ Maybe RsaKeyGenTraits::AdditionalConfig( Utf8Value digest(env->isolate(), args[*offset + 1]); params->params.mgf1_md = EVP_get_digestbyname(*digest); if (params->params.mgf1_md == nullptr) { - THROW_ERR_CRYPTO_INVALID_DIGEST(env, - "mgf1_md specifies an invalid digest"); + THROW_ERR_CRYPTO_INVALID_DIGEST( + env, "Invalid MGF1 digest: %s", *digest); return Nothing(); } } @@ -332,7 +333,7 @@ Maybe RSACipherTraits::AdditionalConfig( params->digest = EVP_get_digestbyname(*digest); if (params->digest == nullptr) { - THROW_ERR_CRYPTO_INVALID_DIGEST(env); + THROW_ERR_CRYPTO_INVALID_DIGEST(env, "Invalid digest: %s", *digest); return Nothing(); } @@ -555,17 +556,21 @@ Maybe GetRsaKeyDetail( return Nothing(); } - int len = BN_num_bytes(e); - AllocatedBuffer public_exponent = AllocatedBuffer::AllocateManaged(env, len); - unsigned char* data = - reinterpret_cast(public_exponent.data()); - CHECK_EQ(BN_bn2binpad(e, data, len), len); + std::unique_ptr public_exponent; + { + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); + public_exponent = + ArrayBuffer::NewBackingStore(env->isolate(), BN_num_bytes(e)); + } + CHECK_EQ(BN_bn2binpad(e, + static_cast(public_exponent->Data()), + public_exponent->ByteLength()), + static_cast(public_exponent->ByteLength())); if (target - ->Set( - env->context(), - env->public_exponent_string(), - public_exponent.ToArrayBuffer()) + ->Set(env->context(), + env->public_exponent_string(), + ArrayBuffer::New(env->isolate(), std::move(public_exponent))) .IsNothing()) { return Nothing(); } diff --git a/src/crypto/crypto_rsa.h b/src/crypto/crypto_rsa.h index 4f6fbad4f6e..bd00320ca8a 100644 --- a/src/crypto/crypto_rsa.h +++ b/src/crypto/crypto_rsa.h @@ -7,7 +7,6 @@ #include "crypto/crypto_keygen.h" #include "crypto/crypto_keys.h" #include "crypto/crypto_util.h" -#include "allocated_buffer.h" #include "env.h" #include "memory_tracker.h" #include "v8.h" diff --git a/src/crypto/crypto_scrypt.cc b/src/crypto/crypto_scrypt.cc index 077c26554b2..4ddf705703c 100644 --- a/src/crypto/crypto_scrypt.cc +++ b/src/crypto/crypto_scrypt.cc @@ -1,7 +1,6 @@ #include "crypto/crypto_scrypt.h" -#include "crypto/crypto_util.h" -#include "allocated_buffer-inl.h" #include "async_wrap-inl.h" +#include "crypto/crypto_util.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "node_buffer.h" diff --git a/src/crypto/crypto_sig.cc b/src/crypto/crypto_sig.cc index 90031b0ac42..19b6ce6f3d8 100644 --- a/src/crypto/crypto_sig.cc +++ b/src/crypto/crypto_sig.cc @@ -1,10 +1,9 @@ #include "crypto/crypto_sig.h" +#include "async_wrap-inl.h" +#include "base_object-inl.h" #include "crypto/crypto_ec.h" #include "crypto/crypto_keys.h" #include "crypto/crypto_util.h" -#include "allocated_buffer-inl.h" -#include "async_wrap-inl.h" -#include "base_object-inl.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "threadpoolwork-inl.h" @@ -18,6 +17,7 @@ using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::Int32; +using v8::Isolate; using v8::Just; using v8::Local; using v8::Maybe; @@ -330,17 +330,18 @@ Sign::Sign(Environment* env, Local wrap) : SignBase(env, wrap) { } void Sign::Initialize(Environment* env, Local target) { - Local t = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate()->SetInternalFieldCount( SignBase::kInternalFieldCount); t->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "init", SignInit); - env->SetProtoMethod(t, "update", SignUpdate); - env->SetProtoMethod(t, "sign", SignFinal); + SetProtoMethod(isolate, t, "init", SignInit); + SetProtoMethod(isolate, t, "update", SignUpdate); + SetProtoMethod(isolate, t, "sign", SignFinal); - env->SetConstructorFunction(target, "Sign", t); + SetConstructorFunction(env->context(), target, "Sign", t); SignJob::Initialize(env, target); @@ -459,17 +460,18 @@ Verify::Verify(Environment* env, Local wrap) } void Verify::Initialize(Environment* env, Local target) { - Local t = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate()->SetInternalFieldCount( SignBase::kInternalFieldCount); t->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "init", VerifyInit); - env->SetProtoMethod(t, "update", VerifyUpdate); - env->SetProtoMethod(t, "verify", VerifyFinal); + SetProtoMethod(isolate, t, "init", VerifyInit); + SetProtoMethod(isolate, t, "update", VerifyUpdate); + SetProtoMethod(isolate, t, "verify", VerifyFinal); - env->SetConstructorFunction(target, "Verify", t); + SetConstructorFunction(env->context(), target, "Verify", t); } void Verify::RegisterExternalReferences(ExternalReferenceRegistry* registry) { @@ -649,7 +651,7 @@ Maybe SignTraits::AdditionalConfig( Utf8Value digest(env->isolate(), args[offset + 6]); params->digest = EVP_get_digestbyname(*digest); if (params->digest == nullptr) { - THROW_ERR_CRYPTO_INVALID_DIGEST(env); + THROW_ERR_CRYPTO_INVALID_DIGEST(env, "Invalid digest: %s", *digest); return Nothing(); } } diff --git a/src/crypto/crypto_sig.h b/src/crypto/crypto_sig.h index eba18be7c7d..1a4cda42272 100644 --- a/src/crypto/crypto_sig.h +++ b/src/crypto/crypto_sig.h @@ -3,10 +3,9 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS +#include "base_object.h" #include "crypto/crypto_keys.h" #include "crypto/crypto_util.h" -#include "allocated_buffer.h" -#include "base_object.h" #include "env.h" #include "memory_tracker.h" @@ -21,7 +20,7 @@ enum DSASigEnc { class SignBase : public BaseObject { public: - typedef enum { + enum Error { kSignOk, kSignUnknownDigest, kSignInit, @@ -30,7 +29,7 @@ class SignBase : public BaseObject { kSignPrivateKey, kSignPublicKey, kSignMalformedSignature - } Error; + }; SignBase(Environment* env, v8::Local wrap); diff --git a/src/crypto/crypto_spkac.cc b/src/crypto/crypto_spkac.cc index c29d94edc0f..cc31808e7ce 100644 --- a/src/crypto/crypto_spkac.cc +++ b/src/crypto/crypto_spkac.cc @@ -8,6 +8,7 @@ namespace node { +using v8::Context; using v8::FunctionCallbackInfo; using v8::Local; using v8::Object; @@ -128,9 +129,12 @@ void ExportChallenge(const FunctionCallbackInfo& args) { } void Initialize(Environment* env, Local target) { - env->SetMethodNoSideEffect(target, "certVerifySpkac", VerifySpkac); - env->SetMethodNoSideEffect(target, "certExportPublicKey", ExportPublicKey); - env->SetMethodNoSideEffect(target, "certExportChallenge", ExportChallenge); + Local context = env->context(); + SetMethodNoSideEffect(context, target, "certVerifySpkac", VerifySpkac); + SetMethodNoSideEffect( + context, target, "certExportPublicKey", ExportPublicKey); + SetMethodNoSideEffect( + context, target, "certExportChallenge", ExportChallenge); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/crypto/crypto_timing.cc b/src/crypto/crypto_timing.cc index 3cc1a12ec00..8904f6b140d 100644 --- a/src/crypto/crypto_timing.cc +++ b/src/crypto/crypto_timing.cc @@ -47,7 +47,8 @@ void TimingSafeEqual(const FunctionCallbackInfo& args) { } void Initialize(Environment* env, Local target) { - env->SetMethodNoSideEffect(target, "timingSafeEqual", TimingSafeEqual); + SetMethodNoSideEffect( + env->context(), target, "timingSafeEqual", TimingSafeEqual); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { registry->Register(TimingSafeEqual); diff --git a/src/crypto/crypto_tls.cc b/src/crypto/crypto_tls.cc index 72b49e05f0c..7ef47a5181a 100644 --- a/src/crypto/crypto_tls.cc +++ b/src/crypto/crypto_tls.cc @@ -25,7 +25,6 @@ #include "crypto/crypto_util.h" #include "crypto/crypto_bio.h" #include "crypto/crypto_clienthello-inl.h" -#include "allocated_buffer-inl.h" #include "async_wrap-inl.h" #include "debug_utils-inl.h" #include "memory_tracker-inl.h" @@ -296,8 +295,8 @@ int TLSExtStatusCallback(SSL* s, void* arg) { void ConfigureSecureContext(SecureContext* sc) { // OCSP stapling - SSL_CTX_set_tlsext_status_cb(sc->ctx_.get(), TLSExtStatusCallback); - SSL_CTX_set_tlsext_status_arg(sc->ctx_.get(), nullptr); + SSL_CTX_set_tlsext_status_cb(sc->ctx().get(), TLSExtStatusCallback); + SSL_CTX_set_tlsext_status_arg(sc->ctx().get(), nullptr); } inline bool Set( @@ -1251,8 +1250,7 @@ void TLSWrap::GetServername(const FunctionCallbackInfo& args) { CHECK_NOT_NULL(wrap->ssl_); - const char* servername = SSL_get_servername(wrap->ssl_.get(), - TLSEXT_NAMETYPE_host_name); + const char* servername = GetServerName(wrap->ssl_.get()); if (servername != nullptr) { args.GetReturnValue().Set(OneByteString(env->isolate(), servername)); } else { @@ -1283,7 +1281,7 @@ int TLSWrap::SelectSNIContextCallback(SSL* s, int* ad, void* arg) { HandleScope handle_scope(env->isolate()); Context::Scope context_scope(env->context()); - const char* servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); + const char* servername = GetServerName(s); if (!Set(env, p->GetOwner(), env->servername_string(), servername)) return SSL_TLSEXT_ERR_NOACK; @@ -1305,20 +1303,20 @@ int TLSWrap::SelectSNIContextCallback(SSL* s, int* ad, void* arg) { p->sni_context_ = BaseObjectPtr(sc); ConfigureSecureContext(sc); - CHECK_EQ(SSL_set_SSL_CTX(p->ssl_.get(), sc->ctx_.get()), sc->ctx_.get()); + CHECK_EQ(SSL_set_SSL_CTX(p->ssl_.get(), sc->ctx().get()), sc->ctx().get()); p->SetCACerts(sc); return SSL_TLSEXT_ERR_OK; } int TLSWrap::SetCACerts(SecureContext* sc) { - int err = SSL_set1_verify_cert_store( - ssl_.get(), SSL_CTX_get_cert_store(sc->ctx_.get())); + int err = SSL_set1_verify_cert_store(ssl_.get(), + SSL_CTX_get_cert_store(sc->ctx().get())); if (err != 1) return err; STACK_OF(X509_NAME)* list = - SSL_dup_CA_list(SSL_CTX_get_client_CA_list(sc->ctx_.get())); + SSL_dup_CA_list(SSL_CTX_get_client_CA_list(sc->ctx().get())); // NOTE: `SSL_set_client_CA_list` takes the ownership of `list` SSL_set_client_CA_list(ssl_.get(), list); @@ -1611,9 +1609,19 @@ void TLSWrap::GetFinished(const FunctionCallbackInfo& args) { if (len == 0) return; - AllocatedBuffer buf = AllocatedBuffer::AllocateManaged(env, len); - CHECK_EQ(len, SSL_get_finished(w->ssl_.get(), buf.data(), len)); - args.GetReturnValue().Set(buf.ToBuffer().FromMaybe(Local())); + std::unique_ptr bs; + { + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); + bs = ArrayBuffer::NewBackingStore(env->isolate(), len); + } + + CHECK_EQ(bs->ByteLength(), + SSL_get_finished(w->ssl_.get(), bs->Data(), bs->ByteLength())); + + Local ab = ArrayBuffer::New(env->isolate(), std::move(bs)); + Local buffer; + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; + args.GetReturnValue().Set(buffer); } void TLSWrap::GetPeerFinished(const FunctionCallbackInfo& args) { @@ -1632,9 +1640,19 @@ void TLSWrap::GetPeerFinished(const FunctionCallbackInfo& args) { if (len == 0) return; - AllocatedBuffer buf = AllocatedBuffer::AllocateManaged(env, len); - CHECK_EQ(len, SSL_get_peer_finished(w->ssl_.get(), buf.data(), len)); - args.GetReturnValue().Set(buf.ToBuffer().FromMaybe(Local())); + std::unique_ptr bs; + { + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); + bs = ArrayBuffer::NewBackingStore(env->isolate(), len); + } + + CHECK_EQ(bs->ByteLength(), + SSL_get_peer_finished(w->ssl_.get(), bs->Data(), bs->ByteLength())); + + Local ab = ArrayBuffer::New(env->isolate(), std::move(bs)); + Local buffer; + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; + args.GetReturnValue().Set(buffer); } void TLSWrap::GetSession(const FunctionCallbackInfo& args) { @@ -1651,10 +1669,19 @@ void TLSWrap::GetSession(const FunctionCallbackInfo& args) { if (slen <= 0) return; // Invalid or malformed session. - AllocatedBuffer sbuf = AllocatedBuffer::AllocateManaged(env, slen); - unsigned char* p = reinterpret_cast(sbuf.data()); + std::unique_ptr bs; + { + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); + bs = ArrayBuffer::NewBackingStore(env->isolate(), slen); + } + + unsigned char* p = static_cast(bs->Data()); CHECK_LT(0, i2d_SSL_SESSION(sess, &p)); - args.GetReturnValue().Set(sbuf.ToBuffer().FromMaybe(Local())); + + Local ab = ArrayBuffer::New(env->isolate(), std::move(bs)); + Local buffer; + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; + args.GetReturnValue().Set(buffer); } void TLSWrap::SetSession(const FunctionCallbackInfo& args) { @@ -1825,7 +1852,11 @@ void TLSWrap::ExportKeyingMaterial(const FunctionCallbackInfo& args) { uint32_t olen = args[0].As()->Value(); Utf8Value label(env->isolate(), args[1]); - AllocatedBuffer out = AllocatedBuffer::AllocateManaged(env, olen); + std::unique_ptr bs; + { + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); + bs = ArrayBuffer::NewBackingStore(env->isolate(), olen); + } ByteSource context; bool use_context = !args[2]->IsUndefined(); @@ -1834,11 +1865,11 @@ void TLSWrap::ExportKeyingMaterial(const FunctionCallbackInfo& args) { if (SSL_export_keying_material( w->ssl_.get(), - reinterpret_cast(out.data()), + static_cast(bs->Data()), olen, *label, label.length(), - reinterpret_cast(context.get()), + context.data(), context.size(), use_context) != 1) { return ThrowCryptoError( @@ -1847,7 +1878,10 @@ void TLSWrap::ExportKeyingMaterial(const FunctionCallbackInfo& args) { "SSL_export_keying_material"); } - args.GetReturnValue().Set(out.ToBuffer().FromMaybe(Local())); + Local ab = ArrayBuffer::New(env->isolate(), std::move(bs)); + Local buffer; + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; + args.GetReturnValue().Set(buffer); } void TLSWrap::EndParser(const FunctionCallbackInfo& args) { @@ -1995,8 +2029,9 @@ void TLSWrap::Initialize( Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - env->SetMethod(target, "wrap", TLSWrap::Wrap); + SetMethod(context, target, "wrap", TLSWrap::Wrap); NODE_DEFINE_CONSTANT(target, HAVE_SSL_TRACE); @@ -2019,54 +2054,56 @@ void TLSWrap::Initialize( t->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "certCbDone", CertCbDone); - env->SetProtoMethod(t, "destroySSL", DestroySSL); - env->SetProtoMethod(t, "enableCertCb", EnableCertCb); - env->SetProtoMethod(t, "endParser", EndParser); - env->SetProtoMethod(t, "enableKeylogCallback", EnableKeylogCallback); - env->SetProtoMethod(t, "enableSessionCallbacks", EnableSessionCallbacks); - env->SetProtoMethod(t, "enableTrace", EnableTrace); - env->SetProtoMethod(t, "getServername", GetServername); - env->SetProtoMethod(t, "loadSession", LoadSession); - env->SetProtoMethod(t, "newSessionDone", NewSessionDone); - env->SetProtoMethod(t, "receive", Receive); - env->SetProtoMethod(t, "renegotiate", Renegotiate); - env->SetProtoMethod(t, "requestOCSP", RequestOCSP); - env->SetProtoMethod(t, "setALPNProtocols", SetALPNProtocols); - env->SetProtoMethod(t, "setOCSPResponse", SetOCSPResponse); - env->SetProtoMethod(t, "setServername", SetServername); - env->SetProtoMethod(t, "setSession", SetSession); - env->SetProtoMethod(t, "setVerifyMode", SetVerifyMode); - env->SetProtoMethod(t, "start", Start); - - env->SetProtoMethodNoSideEffect(t, "exportKeyingMaterial", - ExportKeyingMaterial); - env->SetProtoMethodNoSideEffect(t, "isSessionReused", IsSessionReused); - env->SetProtoMethodNoSideEffect(t, "getALPNNegotiatedProtocol", - GetALPNNegotiatedProto); - env->SetProtoMethodNoSideEffect(t, "getCertificate", GetCertificate); - env->SetProtoMethodNoSideEffect(t, "getX509Certificate", GetX509Certificate); - env->SetProtoMethodNoSideEffect(t, "getCipher", GetCipher); - env->SetProtoMethodNoSideEffect(t, "getEphemeralKeyInfo", - GetEphemeralKeyInfo); - env->SetProtoMethodNoSideEffect(t, "getFinished", GetFinished); - env->SetProtoMethodNoSideEffect(t, "getPeerCertificate", GetPeerCertificate); - env->SetProtoMethodNoSideEffect(t, "getPeerX509Certificate", - GetPeerX509Certificate); - env->SetProtoMethodNoSideEffect(t, "getPeerFinished", GetPeerFinished); - env->SetProtoMethodNoSideEffect(t, "getProtocol", GetProtocol); - env->SetProtoMethodNoSideEffect(t, "getSession", GetSession); - env->SetProtoMethodNoSideEffect(t, "getSharedSigalgs", GetSharedSigalgs); - env->SetProtoMethodNoSideEffect(t, "getTLSTicket", GetTLSTicket); - env->SetProtoMethodNoSideEffect(t, "verifyError", VerifyError); + SetProtoMethod(isolate, t, "certCbDone", CertCbDone); + SetProtoMethod(isolate, t, "destroySSL", DestroySSL); + SetProtoMethod(isolate, t, "enableCertCb", EnableCertCb); + SetProtoMethod(isolate, t, "endParser", EndParser); + SetProtoMethod(isolate, t, "enableKeylogCallback", EnableKeylogCallback); + SetProtoMethod(isolate, t, "enableSessionCallbacks", EnableSessionCallbacks); + SetProtoMethod(isolate, t, "enableTrace", EnableTrace); + SetProtoMethod(isolate, t, "getServername", GetServername); + SetProtoMethod(isolate, t, "loadSession", LoadSession); + SetProtoMethod(isolate, t, "newSessionDone", NewSessionDone); + SetProtoMethod(isolate, t, "receive", Receive); + SetProtoMethod(isolate, t, "renegotiate", Renegotiate); + SetProtoMethod(isolate, t, "requestOCSP", RequestOCSP); + SetProtoMethod(isolate, t, "setALPNProtocols", SetALPNProtocols); + SetProtoMethod(isolate, t, "setOCSPResponse", SetOCSPResponse); + SetProtoMethod(isolate, t, "setServername", SetServername); + SetProtoMethod(isolate, t, "setSession", SetSession); + SetProtoMethod(isolate, t, "setVerifyMode", SetVerifyMode); + SetProtoMethod(isolate, t, "start", Start); + + SetProtoMethodNoSideEffect( + isolate, t, "exportKeyingMaterial", ExportKeyingMaterial); + SetProtoMethodNoSideEffect(isolate, t, "isSessionReused", IsSessionReused); + SetProtoMethodNoSideEffect( + isolate, t, "getALPNNegotiatedProtocol", GetALPNNegotiatedProto); + SetProtoMethodNoSideEffect(isolate, t, "getCertificate", GetCertificate); + SetProtoMethodNoSideEffect( + isolate, t, "getX509Certificate", GetX509Certificate); + SetProtoMethodNoSideEffect(isolate, t, "getCipher", GetCipher); + SetProtoMethodNoSideEffect( + isolate, t, "getEphemeralKeyInfo", GetEphemeralKeyInfo); + SetProtoMethodNoSideEffect(isolate, t, "getFinished", GetFinished); + SetProtoMethodNoSideEffect( + isolate, t, "getPeerCertificate", GetPeerCertificate); + SetProtoMethodNoSideEffect( + isolate, t, "getPeerX509Certificate", GetPeerX509Certificate); + SetProtoMethodNoSideEffect(isolate, t, "getPeerFinished", GetPeerFinished); + SetProtoMethodNoSideEffect(isolate, t, "getProtocol", GetProtocol); + SetProtoMethodNoSideEffect(isolate, t, "getSession", GetSession); + SetProtoMethodNoSideEffect(isolate, t, "getSharedSigalgs", GetSharedSigalgs); + SetProtoMethodNoSideEffect(isolate, t, "getTLSTicket", GetTLSTicket); + SetProtoMethodNoSideEffect(isolate, t, "verifyError", VerifyError); #ifdef SSL_set_max_send_fragment - env->SetProtoMethod(t, "setMaxSendFragment", SetMaxSendFragment); + SetProtoMethod(isolate, t, "setMaxSendFragment", SetMaxSendFragment); #endif // SSL_set_max_send_fragment #ifndef OPENSSL_NO_PSK - env->SetProtoMethod(t, "enablePskCallback", EnablePskCallback); - env->SetProtoMethod(t, "setPskIdentityHint", SetPskIdentityHint); + SetProtoMethod(isolate, t, "enablePskCallback", EnablePskCallback); + SetProtoMethod(isolate, t, "setPskIdentityHint", SetPskIdentityHint); #endif // !OPENSSL_NO_PSK StreamBase::AddMethods(env, t); diff --git a/src/crypto/crypto_util.cc b/src/crypto/crypto_util.cc index e1ef170a9f1..33d0baa7cd8 100644 --- a/src/crypto/crypto_util.cc +++ b/src/crypto/crypto_util.cc @@ -1,8 +1,7 @@ #include "crypto/crypto_util.h" +#include "async_wrap-inl.h" #include "crypto/crypto_bio.h" #include "crypto/crypto_keys.h" -#include "allocated_buffer-inl.h" -#include "async_wrap-inl.h" #include "env-inl.h" #include "memory_tracker-inl.h" #include "node_buffer.h" @@ -61,26 +60,14 @@ int VerifyCallback(int preverify_ok, X509_STORE_CTX* ctx) { return 1; } -void CheckEntropy() { - for (;;) { - int status = RAND_status(); - CHECK_GE(status, 0); // Cannot fail. - if (status != 0) - break; +MUST_USE_RESULT CSPRNGResult CSPRNG(void* buffer, size_t length) { + do { + if (1 == RAND_status()) + if (1 == RAND_bytes(static_cast(buffer), length)) + return {true}; + } while (1 == RAND_poll()); - // Give up, RAND_poll() not supported. - if (RAND_poll() == 0) - break; - } -} - -bool EntropySource(unsigned char* buffer, size_t length) { - // Ensure that OpenSSL's PRNG is properly seeded. - CheckEntropy(); - // RAND_bytes() can return 0 to indicate that the entropy data is not truly - // random. That's okay, it's still better than V8's stock source of entropy, - // which is /dev/urandom on UNIX platforms and the current time on Windows. - return RAND_bytes(buffer, length) != -1; + return {false}; } int PasswordCallback(char* buf, int size, int rwflag, void* u) { @@ -136,7 +123,13 @@ bool InitCryptoOnce(Isolate* isolate) { return true; } +// Protect accesses to FIPS state with a mutex. This should potentially +// be part of a larger mutex for global OpenSSL state. +static Mutex fips_mutex; + void InitCryptoOnce() { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + Mutex::ScopedLock fips_lock(fips_mutex); #ifndef OPENSSL_IS_BORINGSSL OPENSSL_INIT_SETTINGS* settings = OPENSSL_INIT_new(); @@ -148,6 +141,16 @@ void InitCryptoOnce() { } #endif +#if OPENSSL_VERSION_MAJOR >= 3 + // --openssl-legacy-provider + if (per_process::cli_options->openssl_legacy_provider) { + OSSL_PROVIDER* legacy_provider = OSSL_PROVIDER_load(nullptr, "legacy"); + if (legacy_provider == nullptr) { + fprintf(stderr, "Unable to load legacy provider.\n"); + } + } +#endif + OPENSSL_init_ssl(0, settings); OPENSSL_INIT_free(settings); settings = nullptr; @@ -186,6 +189,9 @@ void InitCryptoOnce() { } void GetFipsCrypto(const FunctionCallbackInfo& args) { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + Mutex::ScopedLock fips_lock(fips_mutex); + #if OPENSSL_VERSION_MAJOR >= 3 args.GetReturnValue().Set(EVP_default_properties_is_fips_enabled(nullptr) ? 1 : 0); @@ -195,8 +201,13 @@ void GetFipsCrypto(const FunctionCallbackInfo& args) { } void SetFipsCrypto(const FunctionCallbackInfo& args) { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + Mutex::ScopedLock fips_lock(fips_mutex); + CHECK(!per_process::cli_options->force_fips_crypto); Environment* env = Environment::GetCurrent(args); + // TODO(addaleax): This should not be possible to set from worker threads. + // CHECK(env->owns_process_state()); bool enable = args[0]->BooleanValue(env->isolate()); #if OPENSSL_VERSION_MAJOR >= 3 @@ -217,6 +228,9 @@ void SetFipsCrypto(const FunctionCallbackInfo& args) { } void TestFipsCrypto(const v8::FunctionCallbackInfo& args) { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + Mutex::ScopedLock fips_lock(fips_mutex); + #ifdef OPENSSL_FIPS #if OPENSSL_VERSION_MAJOR >= 3 OSSL_PROVIDER* fips_provider = nullptr; @@ -675,22 +689,21 @@ CryptoJobMode GetCryptoJobMode(v8::Local args) { } namespace { -// SecureBuffer uses openssl to allocate a Uint8Array using -// OPENSSL_secure_malloc. Because we do not yet actually -// make use of secure heap, this has the same semantics as +// SecureBuffer uses OPENSSL_secure_malloc to allocate a Uint8Array. +// Without --secure-heap, OpenSSL's secure heap is disabled, +// in which case this has the same semantics as // using OPENSSL_malloc. However, if the secure heap is // initialized, SecureBuffer will automatically use it. void SecureBuffer(const FunctionCallbackInfo& args) { CHECK(args[0]->IsUint32()); Environment* env = Environment::GetCurrent(args); uint32_t len = args[0].As()->Value(); - char* data = static_cast(OPENSSL_secure_malloc(len)); + void* data = OPENSSL_secure_zalloc(len); if (data == nullptr) { // There's no memory available for the allocation. // Return nothing. return; } - memset(data, 0, len); std::shared_ptr store = ArrayBuffer::NewBackingStore( data, @@ -713,19 +726,20 @@ void SecureHeapUsed(const FunctionCallbackInfo& args) { namespace Util { void Initialize(Environment* env, Local target) { + Local context = env->context(); #ifndef OPENSSL_NO_ENGINE - env->SetMethod(target, "setEngine", SetEngine); + SetMethod(context, target, "setEngine", SetEngine); #endif // !OPENSSL_NO_ENGINE - env->SetMethodNoSideEffect(target, "getFipsCrypto", GetFipsCrypto); - env->SetMethod(target, "setFipsCrypto", SetFipsCrypto); - env->SetMethodNoSideEffect(target, "testFipsCrypto", TestFipsCrypto); + SetMethodNoSideEffect(context, target, "getFipsCrypto", GetFipsCrypto); + SetMethod(context, target, "setFipsCrypto", SetFipsCrypto); + SetMethodNoSideEffect(context, target, "testFipsCrypto", TestFipsCrypto); NODE_DEFINE_CONSTANT(target, kCryptoJobAsync); NODE_DEFINE_CONSTANT(target, kCryptoJobSync); - env->SetMethod(target, "secureBuffer", SecureBuffer); - env->SetMethod(target, "secureHeapUsed", SecureHeapUsed); + SetMethod(context, target, "secureBuffer", SecureBuffer); + SetMethod(context, target, "secureHeapUsed", SecureHeapUsed); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { #ifndef OPENSSL_NO_ENGINE diff --git a/src/crypto/crypto_util.h b/src/crypto/crypto_util.h index c431159e6f7..386f1209e27 100644 --- a/src/crypto/crypto_util.h +++ b/src/crypto/crypto_util.h @@ -3,15 +3,14 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -#include "env.h" #include "async_wrap.h" -#include "allocated_buffer.h" +#include "env.h" #include "node_errors.h" #include "node_external_reference.h" #include "node_internals.h" +#include "string_bytes.h" #include "util.h" #include "v8.h" -#include "string_bytes.h" #include #include @@ -111,31 +110,18 @@ struct MarkPopErrorOnReturn { ~MarkPopErrorOnReturn() { ERR_pop_to_mark(); } }; -// Ensure that OpenSSL has enough entropy (at least 256 bits) for its PRNG. -// The entropy pool starts out empty and needs to fill up before the PRNG -// can be used securely. Once the pool is filled, it never dries up again; -// its contents is stirred and reused when necessary. -// -// OpenSSL normally fills the pool automatically but not when someone starts -// generating random numbers before the pool is full: in that case OpenSSL -// keeps lowering the entropy estimate to thwart attackers trying to guess -// the initial state of the PRNG. -// -// When that happens, we will have to wait until enough entropy is available. -// That should normally never take longer than a few milliseconds. -// -// OpenSSL draws from /dev/random and /dev/urandom. While /dev/random may -// block pending "true" randomness, /dev/urandom is a CSPRNG that doesn't -// block under normal circumstances. -// -// The only time when /dev/urandom may conceivably block is right after boot, -// when the whole system is still low on entropy. That's not something we can -// do anything about. -void CheckEntropy(); - -// Generate length bytes of random data. If this returns false, the data -// may not be truly random but it's still generally good enough. -bool EntropySource(unsigned char* buffer, size_t length); +struct CSPRNGResult { + const bool ok; + MUST_USE_RESULT bool is_ok() const { return ok; } + MUST_USE_RESULT bool is_err() const { return !ok; } +}; + +// Either succeeds with exactly |length| bytes of cryptographically +// strong pseudo-random data, or fails. This function may block. +// Don't assume anything about the contents of |buffer| on error. +// As a special case, |length == 0| can be used to check if the CSPRNG +// is properly seeded without consuming entropy. +MUST_USE_RESULT CSPRNGResult CSPRNG(void* buffer, size_t length); int PasswordCallback(char* buf, int size, int rwflag, void* u); @@ -419,12 +405,15 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork { v8::FunctionCallback new_fn, Environment* env, v8::Local target) { - v8::Local job = env->NewFunctionTemplate(new_fn); + v8::Isolate* isolate = env->isolate(); + v8::HandleScope scope(isolate); + v8::Local context = env->context(); + v8::Local job = NewFunctionTemplate(isolate, new_fn); job->Inherit(AsyncWrap::GetConstructorTemplate(env)); job->InstanceTemplate()->SetInternalFieldCount( AsyncWrap::kInternalFieldCount); - env->SetProtoMethod(job, "run", Run); - env->SetConstructorFunction(target, CryptoJobTraits::JobName, job); + SetProtoMethod(isolate, job, "run", Run); + SetConstructorFunction(context, target, CryptoJobTraits::JobName, job); } static void RegisterExternalReferences(v8::FunctionCallback new_fn, @@ -753,20 +742,6 @@ class ArrayBufferOrViewContents { std::shared_ptr store_; }; -template -std::vector CopyBuffer(const ArrayBufferOrViewContents& buf) { - std::vector vec; - vec->resize(buf.size()); - if (vec->size() > 0 && buf.data() != nullptr) - memcpy(vec->data(), buf.data(), vec->size()); - return vec; -} - -template -std::vector CopyBuffer(v8::Local buf) { - return CopyBuffer(ArrayBufferOrViewContents(buf)); -} - v8::MaybeLocal EncodeBignum( Environment* env, const BIGNUM* bn, diff --git a/src/crypto/crypto_x509.cc b/src/crypto/crypto_x509.cc index 398b1a85795..a8c4255d52d 100644 --- a/src/crypto/crypto_x509.cc +++ b/src/crypto/crypto_x509.cc @@ -21,6 +21,7 @@ using v8::EscapableHandleScope; using v8::Function; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; +using v8::Isolate; using v8::Local; using v8::MaybeLocal; using v8::Object; @@ -54,35 +55,36 @@ Local X509Certificate::GetConstructorTemplate( Environment* env) { Local tmpl = env->x509_constructor_template(); if (tmpl.IsEmpty()) { - tmpl = FunctionTemplate::New(env->isolate()); + Isolate* isolate = env->isolate(); + tmpl = NewFunctionTemplate(isolate, nullptr); tmpl->InstanceTemplate()->SetInternalFieldCount( BaseObject::kInternalFieldCount); tmpl->Inherit(BaseObject::GetConstructorTemplate(env)); tmpl->SetClassName( FIXED_ONE_BYTE_STRING(env->isolate(), "X509Certificate")); - env->SetProtoMethod(tmpl, "subject", Subject); - env->SetProtoMethod(tmpl, "subjectAltName", SubjectAltName); - env->SetProtoMethod(tmpl, "infoAccess", InfoAccess); - env->SetProtoMethod(tmpl, "issuer", Issuer); - env->SetProtoMethod(tmpl, "validTo", ValidTo); - env->SetProtoMethod(tmpl, "validFrom", ValidFrom); - env->SetProtoMethod(tmpl, "fingerprint", Fingerprint); - env->SetProtoMethod(tmpl, "fingerprint256", Fingerprint256); - env->SetProtoMethod(tmpl, "fingerprint512", Fingerprint512); - env->SetProtoMethod(tmpl, "keyUsage", KeyUsage); - env->SetProtoMethod(tmpl, "serialNumber", SerialNumber); - env->SetProtoMethod(tmpl, "pem", Pem); - env->SetProtoMethod(tmpl, "raw", Raw); - env->SetProtoMethod(tmpl, "publicKey", PublicKey); - env->SetProtoMethod(tmpl, "checkCA", CheckCA); - env->SetProtoMethod(tmpl, "checkHost", CheckHost); - env->SetProtoMethod(tmpl, "checkEmail", CheckEmail); - env->SetProtoMethod(tmpl, "checkIP", CheckIP); - env->SetProtoMethod(tmpl, "checkIssued", CheckIssued); - env->SetProtoMethod(tmpl, "checkPrivateKey", CheckPrivateKey); - env->SetProtoMethod(tmpl, "verify", Verify); - env->SetProtoMethod(tmpl, "toLegacy", ToLegacy); - env->SetProtoMethod(tmpl, "getIssuerCert", GetIssuerCert); + SetProtoMethod(isolate, tmpl, "subject", Subject); + SetProtoMethod(isolate, tmpl, "subjectAltName", SubjectAltName); + SetProtoMethod(isolate, tmpl, "infoAccess", InfoAccess); + SetProtoMethod(isolate, tmpl, "issuer", Issuer); + SetProtoMethod(isolate, tmpl, "validTo", ValidTo); + SetProtoMethod(isolate, tmpl, "validFrom", ValidFrom); + SetProtoMethod(isolate, tmpl, "fingerprint", Fingerprint); + SetProtoMethod(isolate, tmpl, "fingerprint256", Fingerprint256); + SetProtoMethod(isolate, tmpl, "fingerprint512", Fingerprint512); + SetProtoMethod(isolate, tmpl, "keyUsage", KeyUsage); + SetProtoMethod(isolate, tmpl, "serialNumber", SerialNumber); + SetProtoMethod(isolate, tmpl, "pem", Pem); + SetProtoMethod(isolate, tmpl, "raw", Raw); + SetProtoMethod(isolate, tmpl, "publicKey", PublicKey); + SetProtoMethod(isolate, tmpl, "checkCA", CheckCA); + SetProtoMethod(isolate, tmpl, "checkHost", CheckHost); + SetProtoMethod(isolate, tmpl, "checkEmail", CheckEmail); + SetProtoMethod(isolate, tmpl, "checkIP", CheckIP); + SetProtoMethod(isolate, tmpl, "checkIssued", CheckIssued); + SetProtoMethod(isolate, tmpl, "checkPrivateKey", CheckPrivateKey); + SetProtoMethod(isolate, tmpl, "verify", Verify); + SetProtoMethod(isolate, tmpl, "toLegacy", ToLegacy); + SetProtoMethod(isolate, tmpl, "getIssuerCert", GetIssuerCert); env->set_x509_constructor_template(tmpl); } return tmpl; @@ -543,7 +545,7 @@ std::unique_ptr X509Certificate::CloneForMessaging() void X509Certificate::Initialize(Environment* env, Local target) { - env->SetMethod(target, "parseX509", X509Certificate::Parse); + SetMethod(env->context(), target, "parseX509", X509Certificate::Parse); NODE_DEFINE_CONSTANT(target, X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT); NODE_DEFINE_CONSTANT(target, X509_CHECK_FLAG_NEVER_CHECK_SUBJECT); diff --git a/src/debug_utils.cc b/src/debug_utils.cc index c4c476942ee..f721a672f10 100644 --- a/src/debug_utils.cc +++ b/src/debug_utils.cc @@ -1,6 +1,7 @@ #include "debug_utils-inl.h" // NOLINT(build/include) #include "env-inl.h" #include "node_internals.h" +#include "util.h" #ifdef __POSIX__ #if defined(__linux__) @@ -58,9 +59,10 @@ namespace per_process { EnabledDebugList enabled_debug_list; } -void EnabledDebugList::Parse(Environment* env) { +void EnabledDebugList::Parse(std::shared_ptr env_vars, + v8::Isolate* isolate) { std::string cats; - credentials::SafeGetenv("NODE_DEBUG_NATIVE", &cats, env); + credentials::SafeGetenv("NODE_DEBUG_NATIVE", &cats, env_vars, isolate); Parse(cats, true); } diff --git a/src/debug_utils.h b/src/debug_utils.h index 377493359e9..19847e46549 100644 --- a/src/debug_utils.h +++ b/src/debug_utils.h @@ -4,6 +4,7 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "async_wrap.h" +#include "util.h" #include #include @@ -35,7 +36,7 @@ template inline std::string SPrintF(const char* format, Args&&... args); template inline void FPrintF(FILE* file, const char* format, Args&&... args); -void FWrite(FILE* file, const std::string& str); +void NODE_EXTERN_PRIVATE FWrite(FILE* file, const std::string& str); // Listing the AsyncWrap provider types first enables us to cast directly // from a provider type to a debug category. @@ -57,7 +58,7 @@ enum class DebugCategory { CATEGORY_COUNT }; -class EnabledDebugList { +class NODE_EXTERN_PRIVATE EnabledDebugList { public: bool enabled(DebugCategory category) const { DCHECK_GE(static_cast(category), 0); @@ -66,10 +67,11 @@ class EnabledDebugList { return enabled_[static_cast(category)]; } - // Uses NODE_DEBUG_NATIVE to initialize the categories. When env is not a - // nullptr, the environment variables set in the Environment are used. - // Otherwise the system environment variables are used. - void Parse(Environment* env); + // Uses NODE_DEBUG_NATIVE to initialize the categories. The env_vars variable + // is parsed if it is not a nullptr, otherwise the system environment + // variables are parsed. + void Parse(std::shared_ptr env_vars = nullptr, + v8::Isolate* isolate = nullptr); private: // Set all categories matching cats to the value of enabled. @@ -168,7 +170,7 @@ void CheckedUvLoopClose(uv_loop_t* loop); void PrintLibuvHandleInformation(uv_loop_t* loop, FILE* stream); namespace per_process { -extern EnabledDebugList enabled_debug_list; +extern NODE_EXTERN_PRIVATE EnabledDebugList enabled_debug_list; template inline void FORCE_INLINE Debug(DebugCategory cat, diff --git a/src/env-inl.h b/src/env-inl.h index 4a34393cad7..40f5f283210 100644 --- a/src/env-inl.h +++ b/src/env-inl.h @@ -25,15 +25,14 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "aliased_buffer.h" -#include "allocated_buffer-inl.h" #include "callback_queue-inl.h" #include "env.h" #include "node.h" #include "node_context_data.h" +#include "node_internals.h" #include "node_perf_common.h" #include "util-inl.h" #include "uv.h" -#include "v8-fast-api-calls.h" #include "v8.h" #include @@ -43,6 +42,16 @@ namespace node { +NoArrayBufferZeroFillScope::NoArrayBufferZeroFillScope( + IsolateData* isolate_data) + : node_allocator_(isolate_data->node_allocator()) { + if (node_allocator_ != nullptr) node_allocator_->zero_fill_field()[0] = 0; +} + +NoArrayBufferZeroFillScope::~NoArrayBufferZeroFillScope() { + if (node_allocator_ != nullptr) node_allocator_->zero_fill_field()[0] = 1; +} + inline v8::Isolate* IsolateData::isolate() const { return isolate_; } @@ -97,25 +106,6 @@ v8::Local AsyncHooks::native_execution_async_resource(size_t i) { return native_execution_async_resources_[i]; } -inline void AsyncHooks::SetJSPromiseHooks(v8::Local init, - v8::Local before, - v8::Local after, - v8::Local resolve) { - js_promise_hooks_[0].Reset(env()->isolate(), init); - js_promise_hooks_[1].Reset(env()->isolate(), before); - js_promise_hooks_[2].Reset(env()->isolate(), after); - js_promise_hooks_[3].Reset(env()->isolate(), resolve); - for (auto it = contexts_.begin(); it != contexts_.end(); it++) { - if (it->IsEmpty()) { - it = contexts_.erase(it); - it--; - continue; - } - PersistentToLocal::Weak(env()->isolate(), *it) - ->SetPromiseHooks(init, before, after, resolve); - } -} - inline v8::Local AsyncHooks::provider_string(int idx) { return env()->isolate_data()->async_wrap_provider(idx); } @@ -128,166 +118,6 @@ inline Environment* AsyncHooks::env() { return Environment::ForAsyncHooks(this); } -// Remember to keep this code aligned with pushAsyncContext() in JS. -inline void AsyncHooks::push_async_context(double async_id, - double trigger_async_id, - v8::Local resource) { - // Since async_hooks is experimental, do only perform the check - // when async_hooks is enabled. - if (fields_[kCheck] > 0) { - CHECK_GE(async_id, -1); - CHECK_GE(trigger_async_id, -1); - } - - uint32_t offset = fields_[kStackLength]; - if (offset * 2 >= async_ids_stack_.Length()) - grow_async_ids_stack(); - async_ids_stack_[2 * offset] = async_id_fields_[kExecutionAsyncId]; - async_ids_stack_[2 * offset + 1] = async_id_fields_[kTriggerAsyncId]; - fields_[kStackLength] += 1; - async_id_fields_[kExecutionAsyncId] = async_id; - async_id_fields_[kTriggerAsyncId] = trigger_async_id; - -#ifdef DEBUG - for (uint32_t i = offset; i < native_execution_async_resources_.size(); i++) - CHECK(native_execution_async_resources_[i].IsEmpty()); -#endif - - // When this call comes from JS (as a way of increasing the stack size), - // `resource` will be empty, because JS caches these values anyway. - if (!resource.IsEmpty()) { - native_execution_async_resources_.resize(offset + 1); - // Caveat: This is a v8::Local<> assignment, we do not keep a v8::Global<>! - native_execution_async_resources_[offset] = resource; - } -} - -// Remember to keep this code aligned with popAsyncContext() in JS. -inline bool AsyncHooks::pop_async_context(double async_id) { - // In case of an exception then this may have already been reset, if the - // stack was multiple MakeCallback()'s deep. - if (UNLIKELY(fields_[kStackLength] == 0)) return false; - - // Ask for the async_id to be restored as a check that the stack - // hasn't been corrupted. - // Since async_hooks is experimental, do only perform the check - // when async_hooks is enabled. - if (UNLIKELY(fields_[kCheck] > 0 && - async_id_fields_[kExecutionAsyncId] != async_id)) { - FailWithCorruptedAsyncStack(async_id); - } - - uint32_t offset = fields_[kStackLength] - 1; - async_id_fields_[kExecutionAsyncId] = async_ids_stack_[2 * offset]; - async_id_fields_[kTriggerAsyncId] = async_ids_stack_[2 * offset + 1]; - fields_[kStackLength] = offset; - - if (LIKELY(offset < native_execution_async_resources_.size() && - !native_execution_async_resources_[offset].IsEmpty())) { -#ifdef DEBUG - for (uint32_t i = offset + 1; - i < native_execution_async_resources_.size(); - i++) { - CHECK(native_execution_async_resources_[i].IsEmpty()); - } -#endif - native_execution_async_resources_.resize(offset); - if (native_execution_async_resources_.size() < - native_execution_async_resources_.capacity() / 2 && - native_execution_async_resources_.size() > 16) { - native_execution_async_resources_.shrink_to_fit(); - } - } - - if (UNLIKELY(js_execution_async_resources()->Length() > offset)) { - v8::HandleScope handle_scope(env()->isolate()); - USE(js_execution_async_resources()->Set( - env()->context(), - env()->length_string(), - v8::Integer::NewFromUnsigned(env()->isolate(), offset))); - } - - return fields_[kStackLength] > 0; -} - -void AsyncHooks::clear_async_id_stack() { - v8::Isolate* isolate = env()->isolate(); - v8::HandleScope handle_scope(isolate); - if (!js_execution_async_resources_.IsEmpty()) { - USE(PersistentToLocal::Strong(js_execution_async_resources_)->Set( - env()->context(), - env()->length_string(), - v8::Integer::NewFromUnsigned(isolate, 0))); - } - native_execution_async_resources_.clear(); - native_execution_async_resources_.shrink_to_fit(); - - async_id_fields_[kExecutionAsyncId] = 0; - async_id_fields_[kTriggerAsyncId] = 0; - fields_[kStackLength] = 0; -} - -inline void AsyncHooks::AddContext(v8::Local ctx) { - ctx->SetPromiseHooks( - js_promise_hooks_[0].IsEmpty() ? - v8::Local() : - PersistentToLocal::Strong(js_promise_hooks_[0]), - js_promise_hooks_[1].IsEmpty() ? - v8::Local() : - PersistentToLocal::Strong(js_promise_hooks_[1]), - js_promise_hooks_[2].IsEmpty() ? - v8::Local() : - PersistentToLocal::Strong(js_promise_hooks_[2]), - js_promise_hooks_[3].IsEmpty() ? - v8::Local() : - PersistentToLocal::Strong(js_promise_hooks_[3])); - - size_t id = contexts_.size(); - contexts_.resize(id + 1); - contexts_[id].Reset(env()->isolate(), ctx); - contexts_[id].SetWeak(); -} - -inline void AsyncHooks::RemoveContext(v8::Local ctx) { - v8::Isolate* isolate = env()->isolate(); - v8::HandleScope handle_scope(isolate); - for (auto it = contexts_.begin(); it != contexts_.end(); it++) { - if (it->IsEmpty()) { - it = contexts_.erase(it); - it--; - continue; - } - v8::Local saved_context = - PersistentToLocal::Weak(isolate, *it); - if (saved_context == ctx) { - it->Reset(); - contexts_.erase(it); - break; - } - } -} - -// The DefaultTriggerAsyncIdScope(AsyncWrap*) constructor is defined in -// async_wrap-inl.h to avoid a circular dependency. - -inline AsyncHooks::DefaultTriggerAsyncIdScope ::DefaultTriggerAsyncIdScope( - Environment* env, double default_trigger_async_id) - : async_hooks_(env->async_hooks()) { - if (env->async_hooks()->fields()[AsyncHooks::kCheck] > 0) { - CHECK_GE(default_trigger_async_id, 0); - } - - old_default_trigger_async_id_ = - async_hooks_->async_id_fields()[AsyncHooks::kDefaultTriggerAsyncId]; - async_hooks_->async_id_fields()[AsyncHooks::kDefaultTriggerAsyncId] = - default_trigger_async_id; -} - -inline AsyncHooks::DefaultTriggerAsyncIdScope ::~DefaultTriggerAsyncIdScope() { - async_hooks_->async_id_fields()[AsyncHooks::kDefaultTriggerAsyncId] = - old_default_trigger_async_id_; -} - Environment* Environment::ForAsyncHooks(AsyncHooks* hooks) { return ContainerOf(&Environment::async_hooks_, hooks); } @@ -340,24 +170,6 @@ inline bool TickInfo::has_rejection_to_warn() const { return fields_[kHasRejectionToWarn] == 1; } -inline void Environment::AssignToContext(v8::Local context, - const ContextInfo& info) { - context->SetAlignedPointerInEmbedderData( - ContextEmbedderIndex::kEnvironment, this); - // Used by Environment::GetCurrent to know that we are on a node context. - context->SetAlignedPointerInEmbedderData( - ContextEmbedderIndex::kContextTag, Environment::kNodeContextTagPtr); - // Used to retrieve bindings - context->SetAlignedPointerInEmbedderData( - ContextEmbedderIndex::kBindingListIndex, &(this->bindings_)); - -#if HAVE_INSPECTOR - inspector_agent()->ContextCreated(context, info); -#endif // HAVE_INSPECTOR - - this->async_hooks()->AddContext(context); -} - inline Environment* Environment::GetCurrent(v8::Isolate* isolate) { if (UNLIKELY(!isolate->InContext())) return nullptr; v8::HandleScope handle_scope(isolate); @@ -365,16 +177,7 @@ inline Environment* Environment::GetCurrent(v8::Isolate* isolate) { } inline Environment* Environment::GetCurrent(v8::Local context) { - if (UNLIKELY(context.IsEmpty())) { - return nullptr; - } - if (UNLIKELY(context->GetNumberOfEmbedderDataFields() <= - ContextEmbedderIndex::kContextTag)) { - return nullptr; - } - if (UNLIKELY(context->GetAlignedPointerFromEmbedderData( - ContextEmbedderIndex::kContextTag) != - Environment::kNodeContextTagPtr)) { + if (UNLIKELY(!ContextEmbedderTag::IsNodeContext(context))) { return nullptr; } return static_cast( @@ -501,16 +304,6 @@ inline uv_loop_t* Environment::event_loop() const { return isolate_data()->event_loop(); } -inline void Environment::TryLoadAddon( - const char* filename, - int flags, - const std::function& was_loaded) { - loaded_addons_.emplace_back(filename, flags); - if (!was_loaded(&loaded_addons_.back())) { - loaded_addons_.pop_back(); - } -} - #if HAVE_INSPECTOR inline bool Environment::is_in_inspector_console_call() const { return is_in_inspector_console_call_; @@ -569,6 +362,14 @@ inline bool Environment::force_context_aware() const { return options_->force_context_aware; } +inline void Environment::set_exiting(bool value) { + exiting_[0] = value ? 1 : 0; +} + +inline AliasedUint32Array& Environment::exiting() { + return exiting_; +} + inline void Environment::set_abort_on_uncaught_exception(bool value) { options_->abort_on_uncaught_exception = value; } @@ -662,22 +463,6 @@ inline const std::string& Environment::exec_path() const { return exec_path_; } -inline std::string Environment::GetCwd() { - char cwd[PATH_MAX_BYTES]; - size_t size = PATH_MAX_BYTES; - const int err = uv_cwd(cwd, &size); - - if (err == 0) { - CHECK_GT(size, 0); - return cwd; - } - - // This can fail if the cwd is deleted. In that case, fall back to - // exec_path. - const std::string& exec_path = exec_path_; - return exec_path.substr(0, exec_path.find_last_of(kPathSeparator)); -} - #if HAVE_INSPECTOR inline void Environment::set_coverage_directory(const char* dir) { coverage_directory_ = std::string(dir); @@ -870,7 +655,8 @@ inline bool Environment::owns_inspector() const { } inline bool Environment::should_create_inspector() const { - return (flags_ & EnvironmentFlags::kNoCreateInspector) == 0; + return (flags_ & EnvironmentFlags::kNoCreateInspector) == 0 && + !options_->test_runner && !options_->watch_mode; } inline bool Environment::tracks_unmanaged_fds() const { @@ -923,15 +709,6 @@ inline void Environment::ForEachWorker(Fn&& iterator) { for (worker::Worker* w : sub_worker_contexts_) iterator(w); } -inline void Environment::add_refs(int64_t diff) { - task_queues_async_refs_ += diff; - CHECK_GE(task_queues_async_refs_, 0); - if (task_queues_async_refs_ == 0) - uv_unref(reinterpret_cast(&task_queues_async_)); - else - uv_ref(reinterpret_cast(&task_queues_async_)); -} - inline bool Environment::is_stopping() const { return is_stopping_.load(); } @@ -966,34 +743,6 @@ inline IsolateData* Environment::isolate_data() const { return isolate_data_; } -inline uv_buf_t Environment::allocate_managed_buffer( - const size_t suggested_size) { - NoArrayBufferZeroFillScope no_zero_fill_scope(isolate_data()); - std::unique_ptr bs = - v8::ArrayBuffer::NewBackingStore(isolate(), suggested_size); - uv_buf_t buf = uv_buf_init(static_cast(bs->Data()), bs->ByteLength()); - released_allocated_buffers()->emplace(buf.base, std::move(bs)); - return buf; -} - -inline std::unique_ptr Environment::release_managed_buffer( - const uv_buf_t& buf) { - std::unique_ptr bs; - if (buf.base != nullptr) { - auto map = released_allocated_buffers(); - auto it = map->find(buf.base); - CHECK_NE(it, map->end()); - bs = std::move(it->second); - map->erase(it); - } - return bs; -} - -std::unordered_map>* - Environment::released_allocated_buffers() { - return &released_allocated_buffers_; -} - inline void Environment::ThrowError(const char* errmsg) { ThrowError(v8::Exception::Error, errmsg); } @@ -1030,144 +779,6 @@ inline void Environment::ThrowUVException(int errorno, UVException(isolate(), errorno, syscall, message, path, dest)); } -inline v8::Local Environment::NewFunctionTemplate( - v8::FunctionCallback callback, - v8::Local signature, - v8::ConstructorBehavior behavior, - v8::SideEffectType side_effect_type, - const v8::CFunction* c_function) { - return v8::FunctionTemplate::New(isolate(), - callback, - v8::Local(), - signature, - 0, - behavior, - side_effect_type, - c_function); -} - -inline void Environment::SetMethod(v8::Local that, - const char* name, - v8::FunctionCallback callback) { - v8::Local context = isolate()->GetCurrentContext(); - v8::Local function = - NewFunctionTemplate(callback, v8::Local(), - v8::ConstructorBehavior::kThrow, - v8::SideEffectType::kHasSideEffect) - ->GetFunction(context) - .ToLocalChecked(); - // kInternalized strings are created in the old space. - const v8::NewStringType type = v8::NewStringType::kInternalized; - v8::Local name_string = - v8::String::NewFromUtf8(isolate(), name, type).ToLocalChecked(); - that->Set(context, name_string, function).Check(); - function->SetName(name_string); // NODE_SET_METHOD() compatibility. -} - -inline void Environment::SetFastMethod(v8::Local that, - const char* name, - v8::FunctionCallback slow_callback, - const v8::CFunction* c_function) { - v8::Local context = isolate()->GetCurrentContext(); - v8::Local function = - NewFunctionTemplate(slow_callback, - v8::Local(), - v8::ConstructorBehavior::kThrow, - v8::SideEffectType::kHasNoSideEffect, - c_function) - ->GetFunction(context) - .ToLocalChecked(); - const v8::NewStringType type = v8::NewStringType::kInternalized; - v8::Local name_string = - v8::String::NewFromUtf8(isolate(), name, type).ToLocalChecked(); - that->Set(context, name_string, function).Check(); -} - -inline void Environment::SetMethodNoSideEffect(v8::Local that, - const char* name, - v8::FunctionCallback callback) { - v8::Local context = isolate()->GetCurrentContext(); - v8::Local function = - NewFunctionTemplate(callback, v8::Local(), - v8::ConstructorBehavior::kThrow, - v8::SideEffectType::kHasNoSideEffect) - ->GetFunction(context) - .ToLocalChecked(); - // kInternalized strings are created in the old space. - const v8::NewStringType type = v8::NewStringType::kInternalized; - v8::Local name_string = - v8::String::NewFromUtf8(isolate(), name, type).ToLocalChecked(); - that->Set(context, name_string, function).Check(); - function->SetName(name_string); // NODE_SET_METHOD() compatibility. -} - -inline void Environment::SetProtoMethod(v8::Local that, - const char* name, - v8::FunctionCallback callback) { - v8::Local signature = v8::Signature::New(isolate(), that); - v8::Local t = - NewFunctionTemplate(callback, signature, v8::ConstructorBehavior::kThrow, - v8::SideEffectType::kHasSideEffect); - // kInternalized strings are created in the old space. - const v8::NewStringType type = v8::NewStringType::kInternalized; - v8::Local name_string = - v8::String::NewFromUtf8(isolate(), name, type).ToLocalChecked(); - that->PrototypeTemplate()->Set(name_string, t); - t->SetClassName(name_string); // NODE_SET_PROTOTYPE_METHOD() compatibility. -} - -inline void Environment::SetProtoMethodNoSideEffect( - v8::Local that, - const char* name, - v8::FunctionCallback callback) { - v8::Local signature = v8::Signature::New(isolate(), that); - v8::Local t = - NewFunctionTemplate(callback, signature, v8::ConstructorBehavior::kThrow, - v8::SideEffectType::kHasNoSideEffect); - // kInternalized strings are created in the old space. - const v8::NewStringType type = v8::NewStringType::kInternalized; - v8::Local name_string = - v8::String::NewFromUtf8(isolate(), name, type).ToLocalChecked(); - that->PrototypeTemplate()->Set(name_string, t); - t->SetClassName(name_string); // NODE_SET_PROTOTYPE_METHOD() compatibility. -} - -inline void Environment::SetInstanceMethod(v8::Local that, - const char* name, - v8::FunctionCallback callback) { - v8::Local signature = v8::Signature::New(isolate(), that); - v8::Local t = - NewFunctionTemplate(callback, signature, v8::ConstructorBehavior::kThrow, - v8::SideEffectType::kHasSideEffect); - // kInternalized strings are created in the old space. - const v8::NewStringType type = v8::NewStringType::kInternalized; - v8::Local name_string = - v8::String::NewFromUtf8(isolate(), name, type).ToLocalChecked(); - that->InstanceTemplate()->Set(name_string, t); - t->SetClassName(name_string); -} - -inline void Environment::SetConstructorFunction( - v8::Local that, - const char* name, - v8::Local tmpl, - SetConstructorFunctionFlag flag) { - SetConstructorFunction(that, OneByteString(isolate(), name), tmpl, flag); -} - -inline void Environment::SetConstructorFunction( - v8::Local that, - v8::Local name, - v8::Local tmpl, - SetConstructorFunctionFlag flag) { - if (LIKELY(flag == SetConstructorFunctionFlag::SET_CLASS_NAME)) - tmpl->SetClassName(name); - that->Set( - context(), - name, - tmpl->GetFunction(context()).ToLocalChecked()).Check(); -} - void Environment::AddCleanupHook(CleanupCallback fn, void* arg) { auto insertion_info = cleanup_hooks_.emplace(CleanupHookCallback { fn, arg, cleanup_hook_counter_++ @@ -1286,6 +897,28 @@ v8::Local Environment::context() const { return PersistentToLocal::Strong(context_); } +inline void Environment::set_heap_snapshot_near_heap_limit(uint32_t limit) { + heap_snapshot_near_heap_limit_ = limit; +} + +inline bool Environment::is_in_heapsnapshot_heap_limit_callback() const { + return is_in_heapsnapshot_heap_limit_callback_; +} + +inline void Environment::AddHeapSnapshotNearHeapLimitCallback() { + DCHECK(!heapsnapshot_near_heap_limit_callback_added_); + heapsnapshot_near_heap_limit_callback_added_ = true; + isolate_->AddNearHeapLimitCallback(Environment::NearHeapLimitCallback, this); +} + +inline void Environment::RemoveHeapSnapshotNearHeapLimitCallback( + size_t heap_limit) { + DCHECK(heapsnapshot_near_heap_limit_callback_added_); + heapsnapshot_near_heap_limit_callback_added_ = false; + isolate_->RemoveNearHeapLimitCallback(Environment::NearHeapLimitCallback, + heap_limit); +} + } // namespace node // These two files depend on each other. Including base_object-inl.h after this diff --git a/src/env.cc b/src/env.cc index 8631ac39a92..32f02408e9d 100644 --- a/src/env.cc +++ b/src/env.cc @@ -1,5 +1,4 @@ #include "env.h" -#include "allocated_buffer-inl.h" #include "async_wrap.h" #include "base_object-inl.h" #include "debug_utils-inl.h" @@ -35,7 +34,9 @@ using v8::Array; using v8::Boolean; using v8::Context; using v8::EmbedderGraph; +using v8::EscapableHandleScope; using v8::Function; +using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::HeapSpaceStatistics; @@ -56,11 +57,189 @@ using v8::TracingController; using v8::TryCatch; using v8::Undefined; using v8::Value; +using v8::WeakCallbackInfo; +using v8::WeakCallbackType; using worker::Worker; -int const Environment::kNodeContextTag = 0x6e6f64; -void* const Environment::kNodeContextTagPtr = const_cast( - static_cast(&Environment::kNodeContextTag)); +int const ContextEmbedderTag::kNodeContextTag = 0x6e6f64; +void* const ContextEmbedderTag::kNodeContextTagPtr = const_cast( + static_cast(&ContextEmbedderTag::kNodeContextTag)); + +void AsyncHooks::SetJSPromiseHooks(Local init, + Local before, + Local after, + Local resolve) { + js_promise_hooks_[0].Reset(env()->isolate(), init); + js_promise_hooks_[1].Reset(env()->isolate(), before); + js_promise_hooks_[2].Reset(env()->isolate(), after); + js_promise_hooks_[3].Reset(env()->isolate(), resolve); + for (auto it = contexts_.begin(); it != contexts_.end(); it++) { + if (it->IsEmpty()) { + contexts_.erase(it--); + continue; + } + PersistentToLocal::Weak(env()->isolate(), *it) + ->SetPromiseHooks(init, before, after, resolve); + } +} + +// Remember to keep this code aligned with pushAsyncContext() in JS. +void AsyncHooks::push_async_context(double async_id, + double trigger_async_id, + Local resource) { + // Since async_hooks is experimental, do only perform the check + // when async_hooks is enabled. + if (fields_[kCheck] > 0) { + CHECK_GE(async_id, -1); + CHECK_GE(trigger_async_id, -1); + } + + uint32_t offset = fields_[kStackLength]; + if (offset * 2 >= async_ids_stack_.Length()) grow_async_ids_stack(); + async_ids_stack_[2 * offset] = async_id_fields_[kExecutionAsyncId]; + async_ids_stack_[2 * offset + 1] = async_id_fields_[kTriggerAsyncId]; + fields_[kStackLength] += 1; + async_id_fields_[kExecutionAsyncId] = async_id; + async_id_fields_[kTriggerAsyncId] = trigger_async_id; + +#ifdef DEBUG + for (uint32_t i = offset; i < native_execution_async_resources_.size(); i++) + CHECK(native_execution_async_resources_[i].IsEmpty()); +#endif + + // When this call comes from JS (as a way of increasing the stack size), + // `resource` will be empty, because JS caches these values anyway. + if (!resource.IsEmpty()) { + native_execution_async_resources_.resize(offset + 1); + // Caveat: This is a v8::Local<> assignment, we do not keep a v8::Global<>! + native_execution_async_resources_[offset] = resource; + } +} + +// Remember to keep this code aligned with popAsyncContext() in JS. +bool AsyncHooks::pop_async_context(double async_id) { + // In case of an exception then this may have already been reset, if the + // stack was multiple MakeCallback()'s deep. + if (UNLIKELY(fields_[kStackLength] == 0)) return false; + + // Ask for the async_id to be restored as a check that the stack + // hasn't been corrupted. + if (UNLIKELY(fields_[kCheck] > 0 && + async_id_fields_[kExecutionAsyncId] != async_id)) { + FailWithCorruptedAsyncStack(async_id); + } + + uint32_t offset = fields_[kStackLength] - 1; + async_id_fields_[kExecutionAsyncId] = async_ids_stack_[2 * offset]; + async_id_fields_[kTriggerAsyncId] = async_ids_stack_[2 * offset + 1]; + fields_[kStackLength] = offset; + + if (LIKELY(offset < native_execution_async_resources_.size() && + !native_execution_async_resources_[offset].IsEmpty())) { +#ifdef DEBUG + for (uint32_t i = offset + 1; i < native_execution_async_resources_.size(); + i++) { + CHECK(native_execution_async_resources_[i].IsEmpty()); + } +#endif + native_execution_async_resources_.resize(offset); + if (native_execution_async_resources_.size() < + native_execution_async_resources_.capacity() / 2 && + native_execution_async_resources_.size() > 16) { + native_execution_async_resources_.shrink_to_fit(); + } + } + + if (UNLIKELY(js_execution_async_resources()->Length() > offset)) { + HandleScope handle_scope(env()->isolate()); + USE(js_execution_async_resources()->Set( + env()->context(), + env()->length_string(), + Integer::NewFromUnsigned(env()->isolate(), offset))); + } + + return fields_[kStackLength] > 0; +} + +void AsyncHooks::clear_async_id_stack() { + if (env()->can_call_into_js()) { + Isolate* isolate = env()->isolate(); + HandleScope handle_scope(isolate); + if (!js_execution_async_resources_.IsEmpty()) { + USE(PersistentToLocal::Strong(js_execution_async_resources_) + ->Set(env()->context(), + env()->length_string(), + Integer::NewFromUnsigned(isolate, 0))); + } + } + + native_execution_async_resources_.clear(); + native_execution_async_resources_.shrink_to_fit(); + + async_id_fields_[kExecutionAsyncId] = 0; + async_id_fields_[kTriggerAsyncId] = 0; + fields_[kStackLength] = 0; +} + +void AsyncHooks::AddContext(Local ctx) { + ctx->SetPromiseHooks(js_promise_hooks_[0].IsEmpty() + ? Local() + : PersistentToLocal::Strong(js_promise_hooks_[0]), + js_promise_hooks_[1].IsEmpty() + ? Local() + : PersistentToLocal::Strong(js_promise_hooks_[1]), + js_promise_hooks_[2].IsEmpty() + ? Local() + : PersistentToLocal::Strong(js_promise_hooks_[2]), + js_promise_hooks_[3].IsEmpty() + ? Local() + : PersistentToLocal::Strong(js_promise_hooks_[3])); + + size_t id = contexts_.size(); + contexts_.resize(id + 1); + contexts_[id].Reset(env()->isolate(), ctx); + contexts_[id].SetWeak(); +} + +void AsyncHooks::RemoveContext(Local ctx) { + Isolate* isolate = env()->isolate(); + HandleScope handle_scope(isolate); + contexts_.erase(std::remove_if(contexts_.begin(), + contexts_.end(), + [&](auto&& el) { return el.IsEmpty(); }), + contexts_.end()); + for (auto it = contexts_.begin(); it != contexts_.end(); it++) { + Local saved_context = PersistentToLocal::Weak(isolate, *it); + if (saved_context == ctx) { + it->Reset(); + contexts_.erase(it); + break; + } + } +} + +AsyncHooks::DefaultTriggerAsyncIdScope::DefaultTriggerAsyncIdScope( + Environment* env, double default_trigger_async_id) + : async_hooks_(env->async_hooks()) { + if (env->async_hooks()->fields()[AsyncHooks::kCheck] > 0) { + CHECK_GE(default_trigger_async_id, 0); + } + + old_default_trigger_async_id_ = + async_hooks_->async_id_fields()[AsyncHooks::kDefaultTriggerAsyncId]; + async_hooks_->async_id_fields()[AsyncHooks::kDefaultTriggerAsyncId] = + default_trigger_async_id; +} + +AsyncHooks::DefaultTriggerAsyncIdScope::~DefaultTriggerAsyncIdScope() { + async_hooks_->async_id_fields()[AsyncHooks::kDefaultTriggerAsyncId] = + old_default_trigger_async_id_; +} + +AsyncHooks::DefaultTriggerAsyncIdScope::DefaultTriggerAsyncIdScope( + AsyncWrap* async_wrap) + : DefaultTriggerAsyncIdScope(async_wrap->env(), + async_wrap->get_async_id()) {} std::vector IsolateData::Serialize(SnapshotCreator* creator) { Isolate* isolate = creator->GetIsolate(); @@ -253,6 +432,78 @@ void TrackingTraceStateObserver::UpdateTraceCategoryState() { USE(cb->Call(env_->context(), Undefined(isolate), arraysize(args), args)); } +void Environment::AssignToContext(Local context, + const ContextInfo& info) { + ContextEmbedderTag::TagNodeContext(context); + context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kEnvironment, + this); + // Used to retrieve bindings + context->SetAlignedPointerInEmbedderData( + ContextEmbedderIndex::kBindingListIndex, &(this->bindings_)); + +#if HAVE_INSPECTOR + inspector_agent()->ContextCreated(context, info); +#endif // HAVE_INSPECTOR + + this->async_hooks()->AddContext(context); +} + +void Environment::TryLoadAddon( + const char* filename, + int flags, + const std::function& was_loaded) { + loaded_addons_.emplace_back(filename, flags); + if (!was_loaded(&loaded_addons_.back())) { + loaded_addons_.pop_back(); + } +} + +std::string Environment::GetCwd() { + char cwd[PATH_MAX_BYTES]; + size_t size = PATH_MAX_BYTES; + const int err = uv_cwd(cwd, &size); + + if (err == 0) { + CHECK_GT(size, 0); + return cwd; + } + + // This can fail if the cwd is deleted. In that case, fall back to + // exec_path. + const std::string& exec_path = exec_path_; + return exec_path.substr(0, exec_path.find_last_of(kPathSeparator)); +} + +void Environment::add_refs(int64_t diff) { + task_queues_async_refs_ += diff; + CHECK_GE(task_queues_async_refs_, 0); + if (task_queues_async_refs_ == 0) + uv_unref(reinterpret_cast(&task_queues_async_)); + else + uv_ref(reinterpret_cast(&task_queues_async_)); +} + +uv_buf_t Environment::allocate_managed_buffer(const size_t suggested_size) { + NoArrayBufferZeroFillScope no_zero_fill_scope(isolate_data()); + std::unique_ptr bs = + v8::ArrayBuffer::NewBackingStore(isolate(), suggested_size); + uv_buf_t buf = uv_buf_init(static_cast(bs->Data()), bs->ByteLength()); + released_allocated_buffers_.emplace(buf.base, std::move(bs)); + return buf; +} + +std::unique_ptr Environment::release_managed_buffer( + const uv_buf_t& buf) { + std::unique_ptr bs; + if (buf.base != nullptr) { + auto it = released_allocated_buffers_.find(buf.base); + CHECK_NE(it, released_allocated_buffers_.end()); + bs = std::move(it->second); + released_allocated_buffers_.erase(it); + } + return bs; +} + void Environment::CreateProperties() { HandleScope handle_scope(isolate_); Local ctx = context(); @@ -345,6 +596,7 @@ Environment::Environment(IsolateData* isolate_data, exec_argv_(exec_args), argv_(args), exec_path_(GetExecPath(args)), + exiting_(isolate_, 1, MAYBE_FIELD_PTR(env_info, exiting)), should_abort_on_uncaught_toggle_( isolate_, 1, @@ -369,10 +621,7 @@ Environment::Environment(IsolateData* isolate_data, } set_env_vars(per_process::system_environment); - // TODO(joyeecheung): pass Isolate* and env_vars to it instead of the entire - // env, when the recursive dependency inclusion in "debug-utils.h" is - // resolved. - enabled_debug_list_.Parse(this); + enabled_debug_list_.Parse(env_vars(), isolate); // We create new copies of the per-Environment option sets, so that it is // easier to modify them after Environment creation. The defaults are @@ -383,6 +632,9 @@ Environment::Environment(IsolateData* isolate_data, inspector_host_port_ = std::make_shared>( options_->debug_options().host_port); + heap_snapshot_near_heap_limit_ = + static_cast(options_->heap_snapshot_near_heap_limit); + if (!(flags_ & EnvironmentFlags::kOwnsProcessState)) { set_abort_on_uncaught_exception(false); } @@ -454,6 +706,9 @@ void Environment::InitializeMainContext(Local context, // By default, always abort when --abort-on-uncaught-exception was passed. should_abort_on_uncaught_toggle_[0] = 1; + // The process is not exiting by default. + set_exiting(false); + performance_state_->Mark(performance::NODE_PERFORMANCE_MILESTONE_ENVIRONMENT, environment_start_time_); performance_state_->Mark(performance::NODE_PERFORMANCE_MILESTONE_NODE_START, @@ -494,9 +749,8 @@ Environment::~Environment() { // FreeEnvironment() should have set this. CHECK(is_stopping()); - if (options_->heap_snapshot_near_heap_limit > heap_limit_snapshot_taken_) { - isolate_->RemoveNearHeapLimitCallback(Environment::NearHeapLimitCallback, - 0); + if (heapsnapshot_near_heap_limit_callback_added_) { + RemoveHeapSnapshotNearHeapLimitCallback(0); } isolate()->GetHeapProfiler()->RemoveBuildEmbedderGraphCallback( @@ -672,10 +926,29 @@ void Environment::PrintSyncTrace() const { isolate(), stack_trace_limit(), StackTrace::kDetailed)); } +MaybeLocal Environment::RunSnapshotSerializeCallback() const { + EscapableHandleScope handle_scope(isolate()); + if (!snapshot_serialize_callback().IsEmpty()) { + Context::Scope context_scope(context()); + return handle_scope.EscapeMaybe(snapshot_serialize_callback()->Call( + context(), v8::Undefined(isolate()), 0, nullptr)); + } + return handle_scope.Escape(Undefined(isolate())); +} + +MaybeLocal Environment::RunSnapshotDeserializeMain() const { + EscapableHandleScope handle_scope(isolate()); + if (!snapshot_deserialize_main().IsEmpty()) { + Context::Scope context_scope(context()); + return handle_scope.EscapeMaybe(snapshot_deserialize_main()->Call( + context(), v8::Undefined(isolate()), 0, nullptr)); + } + return handle_scope.Escape(Undefined(isolate())); +} + void Environment::RunCleanup() { started_cleanup_ = true; - TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment), - "RunCleanup", this); + TRACE_EVENT0(TRACING_CATEGORY_NODE1(environment), "RunCleanup"); bindings_.clear(); CleanupHandles(); @@ -717,8 +990,7 @@ void Environment::RunCleanup() { } void Environment::RunAtExitCallbacks() { - TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment), - "AtExit", this); + TRACE_EVENT0(TRACING_CATEGORY_NODE1(environment), "AtExit"); for (ExitCallback at_exit : at_exit_functions_) { at_exit.cb_(at_exit.arg_); } @@ -744,10 +1016,16 @@ void Environment::RunAndClearInterrupts() { } void Environment::RunAndClearNativeImmediates(bool only_refed) { - TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment), - "RunAndClearNativeImmediates", this); + TRACE_EVENT0(TRACING_CATEGORY_NODE1(environment), + "RunAndClearNativeImmediates"); HandleScope handle_scope(isolate_); - InternalCallbackScope cb_scope(this, Object::New(isolate_), { 0, 0 }); + // In case the Isolate is no longer accessible just use an empty Local. This + // is not an issue for InternalCallbackScope as this case is already handled + // in its constructor but we avoid calls into v8 which can crash the process + // in debug builds. + Local obj = + can_call_into_js() ? Object::New(isolate_) : Local(); + InternalCallbackScope cb_scope(this, obj, {0, 0}); size_t ref_count = 0; @@ -849,8 +1127,7 @@ void Environment::ToggleTimerRef(bool ref) { void Environment::RunTimers(uv_timer_t* handle) { Environment* env = Environment::from_timer_handle(handle); - TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment), - "RunTimers", env); + TRACE_EVENT0(TRACING_CATEGORY_NODE1(environment), "RunTimers"); if (!env->can_call_into_js()) return; @@ -911,8 +1188,7 @@ void Environment::RunTimers(uv_timer_t* handle) { void Environment::CheckImmediate(uv_check_t* handle) { Environment* env = Environment::from_immediate_check_handle(handle); - TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment), - "CheckImmediate", env); + TRACE_EVENT0(TRACING_CATEGORY_NODE1(environment), "CheckImmediate"); HandleScope scope(env->isolate()); Context::Scope context_scope(env->context()); @@ -1271,12 +1547,12 @@ void Environment::PrintInfoForSnapshotIfDebug() { if (enabled_debug_list()->enabled(DebugCategory::MKSNAPSHOT)) { fprintf(stderr, "BaseObjects at the exit of the Environment:\n"); PrintAllBaseObjects(); - fprintf(stderr, "\nNative modules without cache:\n"); - for (const auto& s : native_modules_without_cache) { + fprintf(stderr, "\nBuiltins without cache:\n"); + for (const auto& s : builtins_without_cache) { fprintf(stderr, "%s\n", s.c_str()); } - fprintf(stderr, "\nNative modules with cache:\n"); - for (const auto& s : native_modules_with_cache) { + fprintf(stderr, "\nBuitins modules with cache:\n"); + for (const auto& s : builtins_with_cache) { fprintf(stderr, "%s\n", s.c_str()); } fprintf(stderr, "\nStatic bindings (need to be registered):\n"); @@ -1332,13 +1608,14 @@ EnvSerializeInfo Environment::Serialize(SnapshotCreator* creator) { SerializeBindingData(this, creator, &info); // Currently all modules are compiled without cache in builtin snapshot // builder. - info.native_modules = std::vector( - native_modules_without_cache.begin(), native_modules_without_cache.end()); + info.builtins = std::vector(builtins_without_cache.begin(), + builtins_without_cache.end()); info.async_hooks = async_hooks_.Serialize(ctx, creator); info.immediate_info = immediate_info_.Serialize(ctx, creator); info.tick_info = tick_info_.Serialize(ctx, creator); info.performance_state = performance_state_->Serialize(ctx, creator); + info.exiting = exiting_.Serialize(ctx, creator); info.stream_base_state = stream_base_state_.Serialize(ctx, creator); info.should_abort_on_uncaught_toggle = should_abort_on_uncaught_toggle_.Serialize(ctx, creator); @@ -1399,9 +1676,9 @@ std::ostream& operator<<(std::ostream& output, const EnvSerializeInfo& i) { << "// -- bindings begins --\n" << i.bindings << ",\n" << "// -- bindings ends --\n" - << "// -- native_modules begins --\n" - << i.native_modules << ",\n" - << "// -- native_modules ends --\n" + << "// -- builtins begins --\n" + << i.builtins << ",\n" + << "// -- builtins ends --\n" << "// -- async_hooks begins --\n" << i.async_hooks << ",\n" << "// -- async_hooks ends --\n" @@ -1410,6 +1687,7 @@ std::ostream& operator<<(std::ostream& output, const EnvSerializeInfo& i) { << "// -- performance_state begins --\n" << i.performance_state << ",\n" << "// -- performance_state ends --\n" + << i.exiting << ", // exiting\n" << i.stream_base_state << ", // stream_base_state\n" << i.should_abort_on_uncaught_toggle << ", // should_abort_on_uncaught_toggle\n" @@ -1428,6 +1706,7 @@ void Environment::EnqueueDeserializeRequest(DeserializeRequestCallback cb, Local holder, int index, InternalFieldInfo* info) { + DCHECK_EQ(index, BaseObject::kEmbedderType); DeserializeRequest request{cb, {isolate(), holder}, index, info}; deserialize_requests_.push_back(std::move(request)); } @@ -1451,11 +1730,12 @@ void Environment::DeserializeProperties(const EnvSerializeInfo* info) { RunDeserializeRequests(); - native_modules_in_snapshot = info->native_modules; + builtins_in_snapshot = info->builtins; async_hooks_.Deserialize(ctx); immediate_info_.Deserialize(ctx); tick_info_.Deserialize(ctx); performance_state_->Deserialize(ctx); + exiting_.Deserialize(ctx); stream_base_state_.Deserialize(ctx); should_abort_on_uncaught_toggle_.Deserialize(ctx); @@ -1550,7 +1830,7 @@ size_t Environment::NearHeapLimitCallback(void* data, "Invoked NearHeapLimitCallback, processing=%d, " "current_limit=%" PRIu64 ", " "initial_limit=%" PRIu64 "\n", - env->is_processing_heap_limit_callback_, + env->is_in_heapsnapshot_heap_limit_callback_, static_cast(current_heap_limit), static_cast(initial_heap_limit)); @@ -1602,8 +1882,8 @@ size_t Environment::NearHeapLimitCallback(void* data, // new limit, so in a heap with unbounded growth the isolate // may eventually crash with this new limit - effectively raising // the heap limit to the new one. - if (env->is_processing_heap_limit_callback_) { - size_t new_limit = current_heap_limit + max_young_gen_size; + size_t new_limit = current_heap_limit + max_young_gen_size; + if (env->is_in_heapsnapshot_heap_limit_callback_) { Debug(env, DebugCategory::DIAGNOSTICS, "Not generating snapshots in nested callback. " @@ -1619,15 +1899,14 @@ size_t Environment::NearHeapLimitCallback(void* data, Debug(env, DebugCategory::DIAGNOSTICS, "Not generating snapshots because it's too risky.\n"); - env->isolate()->RemoveNearHeapLimitCallback(NearHeapLimitCallback, - initial_heap_limit); + env->RemoveHeapSnapshotNearHeapLimitCallback(0); // The new limit must be higher than current_heap_limit or V8 might // crash. - return current_heap_limit + 1; + return new_limit; } // Take the snapshot synchronously. - env->is_processing_heap_limit_callback_ = true; + env->is_in_heapsnapshot_heap_limit_callback_ = true; std::string dir = env->options()->diagnostic_dir; if (dir.empty()) { @@ -1638,19 +1917,21 @@ size_t Environment::NearHeapLimitCallback(void* data, Debug(env, DebugCategory::DIAGNOSTICS, "Start generating %s...\n", *name); - // Remove the callback first in case it's triggered when generating - // the snapshot. - env->isolate()->RemoveNearHeapLimitCallback(NearHeapLimitCallback, - initial_heap_limit); - heap::WriteSnapshot(env->isolate(), filename.c_str()); env->heap_limit_snapshot_taken_ += 1; - // Don't take more snapshots than the number specified by - // --heapsnapshot-near-heap-limit. - if (env->heap_limit_snapshot_taken_ < - env->options_->heap_snapshot_near_heap_limit) { - env->isolate()->AddNearHeapLimitCallback(NearHeapLimitCallback, env); + Debug(env, + DebugCategory::DIAGNOSTICS, + "%" PRIu32 "/%" PRIu32 " snapshots taken.\n", + env->heap_limit_snapshot_taken_, + env->heap_snapshot_near_heap_limit_); + + // Don't take more snapshots than the limit specified. + if (env->heap_limit_snapshot_taken_ == env->heap_snapshot_near_heap_limit_) { + Debug(env, + DebugCategory::DIAGNOSTICS, + "Removing the near heap limit callback"); + env->RemoveHeapSnapshotNearHeapLimitCallback(0); } FPrintF(stderr, "Wrote snapshot to %s\n", filename.c_str()); @@ -1658,11 +1939,11 @@ size_t Environment::NearHeapLimitCallback(void* data, // 95% of the initial limit. env->isolate()->AutomaticallyRestoreInitialHeapLimit(0.95); - env->is_processing_heap_limit_callback_ = false; + env->is_in_heapsnapshot_heap_limit_callback_ = false; // The new limit must be higher than current_heap_limit or V8 might // crash. - return current_heap_limit + 1; + return new_limit; } inline size_t Environment::SelfSize() const { @@ -1681,11 +1962,11 @@ void Environment::MemoryInfo(MemoryTracker* tracker) const { // Iteratable STLs have their own sizes subtracted from the parent // by default. tracker->TrackField("isolate_data", isolate_data_); - tracker->TrackField("native_modules_with_cache", native_modules_with_cache); - tracker->TrackField("native_modules_without_cache", - native_modules_without_cache); + tracker->TrackField("builtins_with_cache", builtins_with_cache); + tracker->TrackField("builtins_without_cache", builtins_without_cache); tracker->TrackField("destroy_async_id_list", destroy_async_id_list_); tracker->TrackField("exec_argv", exec_argv_); + tracker->TrackField("exiting", exiting_); tracker->TrackField("should_abort_on_uncaught_toggle", should_abort_on_uncaught_toggle_); tracker->TrackField("stream_base_state", stream_base_state_); @@ -1716,6 +1997,118 @@ void Environment::RunWeakRefCleanup() { } // Not really any better place than env.cc at this moment. +BaseObject::BaseObject(Environment* env, Local object) + : persistent_handle_(env->isolate(), object), env_(env) { + CHECK_EQ(false, object.IsEmpty()); + CHECK_GE(object->InternalFieldCount(), BaseObject::kInternalFieldCount); + object->SetAlignedPointerInInternalField(BaseObject::kEmbedderType, + &kNodeEmbedderId); + object->SetAlignedPointerInInternalField(BaseObject::kSlot, + static_cast(this)); + env->AddCleanupHook(DeleteMe, static_cast(this)); + env->modify_base_object_count(1); +} + +BaseObject::~BaseObject() { + env()->modify_base_object_count(-1); + env()->RemoveCleanupHook(DeleteMe, static_cast(this)); + + if (UNLIKELY(has_pointer_data())) { + PointerData* metadata = pointer_data(); + CHECK_EQ(metadata->strong_ptr_count, 0); + metadata->self = nullptr; + if (metadata->weak_ptr_count == 0) delete metadata; + } + + if (persistent_handle_.IsEmpty()) { + // This most likely happened because the weak callback below cleared it. + return; + } + + { + HandleScope handle_scope(env()->isolate()); + object()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr); + } +} + +void BaseObject::MakeWeak() { + if (has_pointer_data()) { + pointer_data()->wants_weak_jsobj = true; + if (pointer_data()->strong_ptr_count > 0) return; + } + + persistent_handle_.SetWeak( + this, + [](const WeakCallbackInfo& data) { + BaseObject* obj = data.GetParameter(); + // Clear the persistent handle so that ~BaseObject() doesn't attempt + // to mess with internal fields, since the JS object may have + // transitioned into an invalid state. + // Refs: https://github.com/nodejs/node/issues/18897 + obj->persistent_handle_.Reset(); + CHECK_IMPLIES(obj->has_pointer_data(), + obj->pointer_data()->strong_ptr_count == 0); + obj->OnGCCollect(); + }, + WeakCallbackType::kParameter); +} + +// This just has to be different from the Chromium ones: +// https://source.chromium.org/chromium/chromium/src/+/main:gin/public/gin_embedders.h;l=18-23;drc=5a758a97032f0b656c3c36a3497560762495501a +// Otherwise, when Node is loaded in an isolate which uses cppgc, cppgc will +// misinterpret the data stored in the embedder fields and try to garbage +// collect them. +uint16_t kNodeEmbedderId = 0x90de; + +void BaseObject::LazilyInitializedJSTemplateConstructor( + const FunctionCallbackInfo& args) { + DCHECK(args.IsConstructCall()); + CHECK_GE(args.This()->InternalFieldCount(), BaseObject::kInternalFieldCount); + args.This()->SetAlignedPointerInInternalField(BaseObject::kEmbedderType, + &kNodeEmbedderId); + args.This()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr); +} + +Local BaseObject::MakeLazilyInitializedJSTemplate( + Environment* env) { + Local t = NewFunctionTemplate( + env->isolate(), LazilyInitializedJSTemplateConstructor); + t->Inherit(BaseObject::GetConstructorTemplate(env)); + t->InstanceTemplate()->SetInternalFieldCount(BaseObject::kInternalFieldCount); + return t; +} + +BaseObject::PointerData* BaseObject::pointer_data() { + if (!has_pointer_data()) { + PointerData* metadata = new PointerData(); + metadata->wants_weak_jsobj = persistent_handle_.IsWeak(); + metadata->self = this; + pointer_data_ = metadata; + } + CHECK(has_pointer_data()); + return pointer_data_; +} + +void BaseObject::decrease_refcount() { + CHECK(has_pointer_data()); + PointerData* metadata = pointer_data(); + CHECK_GT(metadata->strong_ptr_count, 0); + unsigned int new_refcount = --metadata->strong_ptr_count; + if (new_refcount == 0) { + if (metadata->is_detached) { + OnGCCollect(); + } else if (metadata->wants_weak_jsobj && !persistent_handle_.IsEmpty()) { + MakeWeak(); + } + } +} + +void BaseObject::increase_refcount() { + unsigned int prev_refcount = pointer_data()->strong_ptr_count++; + if (prev_refcount == 0 && !persistent_handle_.IsEmpty()) + persistent_handle_.ClearWeak(); +} + void BaseObject::DeleteMe(void* data) { BaseObject* self = static_cast(data); if (self->has_pointer_data() && @@ -1738,7 +2131,7 @@ bool BaseObject::IsRootNode() const { Local BaseObject::GetConstructorTemplate(Environment* env) { Local tmpl = env->base_object_ctor_template(); if (tmpl.IsEmpty()) { - tmpl = env->NewFunctionTemplate(nullptr); + tmpl = NewFunctionTemplate(env->isolate(), nullptr); tmpl->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "BaseObject")); env->set_base_object_ctor_template(tmpl); } diff --git a/src/env.h b/src/env.h index cda7a52fa1f..776ea1f4fa9 100644 --- a/src/env.h +++ b/src/env.h @@ -35,6 +35,7 @@ #include "node.h" #include "node_binding.h" #include "node_external_reference.h" +#include "node_builtins.h" #include "node_main_instance.h" #include "node_options.h" #include "node_perf_common.h" @@ -137,6 +138,19 @@ enum class FsStatsOffset { constexpr size_t kFsStatsBufferLength = static_cast(FsStatsOffset::kFsStatsFieldsNumber) * 2; +// Disables zero-filling for ArrayBuffer allocations in this scope. This is +// similar to how we implement Buffer.allocUnsafe() in JS land. +class NoArrayBufferZeroFillScope { + public: + inline explicit NoArrayBufferZeroFillScope(IsolateData* isolate_data); + inline ~NoArrayBufferZeroFillScope(); + + private: + NodeArrayBufferAllocator* node_allocator_; + + friend class Environment; +}; + // PER_ISOLATE_* macros: We have a lot of per-isolate properties // and adding and maintaining their getters and setters by hand would be // difficult so let's make the preprocessor generate them for us. @@ -151,15 +165,16 @@ constexpr size_t kFsStatsBufferLength = // Private symbols are per-isolate primitives but Environment proxies them // for the sake of convenience. Strings should be ASCII-only and have a // "node:" prefix to avoid name clashes with third-party code. -#define PER_ISOLATE_PRIVATE_SYMBOL_PROPERTIES(V) \ - V(alpn_buffer_private_symbol, "node:alpnBuffer") \ - V(arrow_message_private_symbol, "node:arrowMessage") \ - V(contextify_context_private_symbol, "node:contextify:context") \ - V(contextify_global_private_symbol, "node:contextify:global") \ - V(decorated_private_symbol, "node:decorated") \ - V(napi_type_tag, "node:napi:type_tag") \ - V(napi_wrapper, "node:napi:wrapper") \ - V(untransferable_object_private_symbol, "node:untransferableObject") \ +#define PER_ISOLATE_PRIVATE_SYMBOL_PROPERTIES(V) \ + V(alpn_buffer_private_symbol, "node:alpnBuffer") \ + V(arrow_message_private_symbol, "node:arrowMessage") \ + V(contextify_context_private_symbol, "node:contextify:context") \ + V(contextify_global_private_symbol, "node:contextify:global") \ + V(decorated_private_symbol, "node:decorated") \ + V(napi_type_tag, "node:napi:type_tag") \ + V(napi_wrapper, "node:napi:wrapper") \ + V(untransferable_object_private_symbol, "node:untransferableObject") \ + V(exiting_aliased_Uint32Array, "node:exiting_aliased_Uint32Array") // Symbols are per-isolate primitives but Environment proxies them // for the sake of convenience. @@ -180,6 +195,8 @@ constexpr size_t kFsStatsBufferLength = // Strings are per-isolate primitives but Environment proxies them // for the sake of convenience. Strings should be ASCII-only. #define PER_ISOLATE_STRING_PROPERTIES(V) \ + V(sourcecode_string, "sourcecode") \ + V(bytecode_string, "bytecode") \ V(ack_string, "ack") \ V(address_string, "address") \ V(aliases_string, "aliases") \ @@ -530,9 +547,10 @@ constexpr size_t kFsStatsBufferLength = V(inspector_console_extension_installer, v8::Function) \ V(inspector_disable_async_hooks, v8::Function) \ V(inspector_enable_async_hooks, v8::Function) \ + V(maybe_cache_generated_source_map, v8::Function) \ V(messaging_deserialize_create_object, v8::Function) \ V(message_port, v8::Object) \ - V(native_module_require, v8::Function) \ + V(builtin_module_require, v8::Function) \ V(performance_entry_callback, v8::Function) \ V(performance_entry_template, v8::Function) \ V(prepare_stack_trace_callback, v8::Function) \ @@ -545,6 +563,9 @@ constexpr size_t kFsStatsBufferLength = V(promise_hook_handler, v8::Function) \ V(promise_reject_callback, v8::Function) \ V(script_data_constructor_function, v8::Function) \ + V(snapshot_serialize_callback, v8::Function) \ + V(snapshot_deserialize_callback, v8::Function) \ + V(snapshot_deserialize_main, v8::Function) \ V(source_map_cache_getter, v8::Function) \ V(tick_callback_function, v8::Function) \ V(timers_callback_function, v8::Function) \ @@ -554,10 +575,9 @@ constexpr size_t kFsStatsBufferLength = V(url_constructor_function, v8::Function) class Environment; -struct AllocatedBuffer; typedef size_t SnapshotIndex; -class IsolateData : public MemoryRetainer { +class NODE_EXTERN_PRIVATE IsolateData : public MemoryRetainer { public: IsolateData(v8::Isolate* isolate, uv_loop_t* event_loop, @@ -639,34 +659,6 @@ struct ContextInfo { class EnabledDebugList; -class KVStore { - public: - KVStore() = default; - virtual ~KVStore() = default; - KVStore(const KVStore&) = delete; - KVStore& operator=(const KVStore&) = delete; - KVStore(KVStore&&) = delete; - KVStore& operator=(KVStore&&) = delete; - - virtual v8::MaybeLocal Get(v8::Isolate* isolate, - v8::Local key) const = 0; - virtual v8::Maybe Get(const char* key) const = 0; - virtual void Set(v8::Isolate* isolate, - v8::Local key, - v8::Local value) = 0; - virtual int32_t Query(v8::Isolate* isolate, - v8::Local key) const = 0; - virtual int32_t Query(const char* key) const = 0; - virtual void Delete(v8::Isolate* isolate, v8::Local key) = 0; - virtual v8::Local Enumerate(v8::Isolate* isolate) const = 0; - - virtual std::shared_ptr Clone(v8::Isolate* isolate) const; - virtual v8::Maybe AssignFromObject(v8::Local context, - v8::Local entries); - - static std::shared_ptr CreateMapKVStore(); -}; - namespace per_process { extern std::shared_ptr system_environment; } @@ -712,10 +704,10 @@ class AsyncHooks : public MemoryRetainer { // The `js_execution_async_resources` array contains the value in that case. inline v8::Local native_execution_async_resource(size_t index); - inline void SetJSPromiseHooks(v8::Local init, - v8::Local before, - v8::Local after, - v8::Local resolve); + void SetJSPromiseHooks(v8::Local init, + v8::Local before, + v8::Local after, + v8::Local resolve); inline v8::Local provider_string(int idx); @@ -725,13 +717,14 @@ class AsyncHooks : public MemoryRetainer { // NB: This call does not take (co-)ownership of `execution_async_resource`. // The lifetime of the `v8::Local<>` pointee must last until // `pop_async_context()` or `clear_async_id_stack()` are called. - inline void push_async_context(double async_id, double trigger_async_id, - v8::Local execution_async_resource); - inline bool pop_async_context(double async_id); - inline void clear_async_id_stack(); // Used in fatal exceptions. + void push_async_context(double async_id, + double trigger_async_id, + v8::Local execution_async_resource); + bool pop_async_context(double async_id); + void clear_async_id_stack(); // Used in fatal exceptions. - inline void AddContext(v8::Local ctx); - inline void RemoveContext(v8::Local ctx); + void AddContext(v8::Local ctx); + void RemoveContext(v8::Local ctx); AsyncHooks(const AsyncHooks&) = delete; AsyncHooks& operator=(const AsyncHooks&) = delete; @@ -956,11 +949,12 @@ struct DeserializeRequest { struct EnvSerializeInfo { std::vector bindings; - std::vector native_modules; + std::vector builtins; AsyncHooks::SerializeInfo async_hooks; TickInfo::SerializeInfo tick_info; ImmediateInfo::SerializeInfo immediate_info; performance::PerformanceState::SerializeInfo performance_state; + AliasedBufferIndex exiting; AliasedBufferIndex stream_base_state; AliasedBufferIndex should_abort_on_uncaught_toggle; @@ -972,7 +966,6 @@ struct EnvSerializeInfo { }; struct SnapshotData { - SnapshotData() { blob.data = nullptr; } v8::StartupData blob; std::vector isolate_data_indices; EnvSerializeInfo env_info; @@ -1099,17 +1092,15 @@ class Environment : public MemoryRetainer { template inline void CloseHandle(T* handle, OnCloseCallback callback); - inline void AssignToContext(v8::Local context, - const ContextInfo& info); + void AssignToContext(v8::Local context, const ContextInfo& info); void StartProfilerIdleNotifier(); inline v8::Isolate* isolate() const; inline uv_loop_t* event_loop() const; - inline void TryLoadAddon( - const char* filename, - int flags, - const std::function& was_loaded); + void TryLoadAddon(const char* filename, + int flags, + const std::function& was_loaded); static inline Environment* from_timer_handle(uv_timer_t* handle); inline uv_timer_t* timer_handle(); @@ -1139,6 +1130,11 @@ class Environment : public MemoryRetainer { inline void set_force_context_aware(bool value); inline bool force_context_aware() const; + // This is a pseudo-boolean that keeps track of whether the process is + // exiting. + inline void set_exiting(bool value); + inline AliasedUint32Array& exiting(); + // This stores whether the --abort-on-uncaught-exception flag was passed // to Node. inline bool abort_on_uncaught_exception() const; @@ -1160,11 +1156,11 @@ class Environment : public MemoryRetainer { inline std::vector* destroy_async_id_list(); std::set internal_bindings; - std::set native_modules_with_cache; - std::set native_modules_without_cache; + std::set builtins_with_cache; + std::set builtins_without_cache; // This is only filled during deserialization. We use a vector since // it's only used for tests. - std::vector native_modules_in_snapshot; + std::vector builtins_in_snapshot; std::unordered_multimap hash_to_module_map; std::unordered_map id_to_module_map; @@ -1199,7 +1195,7 @@ class Environment : public MemoryRetainer { // loop alive. // This is used by Workers to manage their own .ref()/.unref() implementation, // as Workers aren't directly associated with their own libuv handles. - inline void add_refs(int64_t diff); + void add_refs(int64_t diff); inline bool has_run_bootstrapping_code() const; inline void DoneBootstrapping(); @@ -1250,62 +1246,15 @@ class Environment : public MemoryRetainer { const char* path = nullptr, const char* dest = nullptr); - inline v8::Local NewFunctionTemplate( - v8::FunctionCallback callback, - v8::Local signature = v8::Local(), - v8::ConstructorBehavior behavior = v8::ConstructorBehavior::kAllow, - v8::SideEffectType side_effect = v8::SideEffectType::kHasSideEffect, - const v8::CFunction* c_function = nullptr); - - // Convenience methods for NewFunctionTemplate(). - inline void SetMethod(v8::Local that, - const char* name, - v8::FunctionCallback callback); - - inline void SetFastMethod(v8::Local that, - const char* name, - v8::FunctionCallback slow_callback, - const v8::CFunction* c_function); - - inline void SetProtoMethod(v8::Local that, - const char* name, - v8::FunctionCallback callback); - - inline void SetInstanceMethod(v8::Local that, - const char* name, - v8::FunctionCallback callback); - - - // Safe variants denote the function has no side effects. - inline void SetMethodNoSideEffect(v8::Local that, - const char* name, - v8::FunctionCallback callback); - inline void SetProtoMethodNoSideEffect(v8::Local that, - const char* name, - v8::FunctionCallback callback); - - enum class SetConstructorFunctionFlag { - NONE, - SET_CLASS_NAME, - }; - - inline void SetConstructorFunction(v8::Local that, - const char* name, - v8::Local tmpl, - SetConstructorFunctionFlag flag = - SetConstructorFunctionFlag::SET_CLASS_NAME); - - inline void SetConstructorFunction(v8::Local that, - v8::Local name, - v8::Local tmpl, - SetConstructorFunctionFlag flag = - SetConstructorFunctionFlag::SET_CLASS_NAME); - void AtExit(void (*cb)(void* arg), void* arg); void RunAtExitCallbacks(); void RunWeakRefCleanup(); + v8::MaybeLocal RunSnapshotSerializeCallback() const; + v8::MaybeLocal RunSnapshotDeserializeCallback() const; + v8::MaybeLocal RunSnapshotDeserializeMain() const; + // Strings and private symbols are shared across shared contexts // The getters simply proxy to the per-isolate primitive. #define VP(PropertyName, StringValue) V(v8::Private, PropertyName) @@ -1453,11 +1402,8 @@ class Environment : public MemoryRetainer { void RunAndClearNativeImmediates(bool only_refed = false); void RunAndClearInterrupts(); - inline uv_buf_t allocate_managed_buffer(const size_t suggested_size); - inline std::unique_ptr release_managed_buffer( - const uv_buf_t& buf); - inline std::unordered_map>* - released_allocated_buffers(); + uv_buf_t allocate_managed_buffer(const size_t suggested_size); + std::unique_ptr release_managed_buffer(const uv_buf_t& buf); void AddUnmanagedFd(int fd); void RemoveUnmanagedFd(int fd); @@ -1465,6 +1411,13 @@ class Environment : public MemoryRetainer { template void ForEachBindingData(T&& iterator); + inline void set_heap_snapshot_near_heap_limit(uint32_t limit); + inline bool is_in_heapsnapshot_heap_limit_callback() const; + + inline void AddHeapSnapshotNearHeapLimitCallback(); + + inline void RemoveHeapSnapshotNearHeapLimitCallback(size_t heap_limit); + private: inline void ThrowError(v8::Local (*fun)(v8::Local), const char* errmsg); @@ -1521,13 +1474,17 @@ class Environment : public MemoryRetainer { std::vector argv_; std::string exec_path_; - bool is_processing_heap_limit_callback_ = false; - int64_t heap_limit_snapshot_taken_ = 0; + bool is_in_heapsnapshot_heap_limit_callback_ = false; + uint32_t heap_limit_snapshot_taken_ = 0; + uint32_t heap_snapshot_near_heap_limit_ = 0; + bool heapsnapshot_near_heap_limit_callback_added_ = false; uint32_t module_id_counter_ = 0; uint32_t script_id_counter_ = 0; uint32_t function_id_counter_ = 0; + AliasedUint32Array exiting_; + AliasedUint32Array should_abort_on_uncaught_toggle_; int should_not_abort_scope_counter_ = 0; @@ -1546,9 +1503,6 @@ class Environment : public MemoryRetainer { uint64_t thread_id_; std::unordered_set sub_worker_contexts_; - static void* const kNodeContextTagPtr; - static int const kNodeContextTag; - #if HAVE_INSPECTOR std::unique_ptr inspector_agent_; bool is_in_inspector_console_call_ = false; @@ -1631,8 +1585,8 @@ class Environment : public MemoryRetainer { // the source passed to LoadEnvironment() directly instead. std::unique_ptr main_utf16_; - // Used by AllocatedBuffer::release() to keep track of the BackingStore for - // a given pointer. + // Used by allocate_managed_buffer() and release_managed_buffer() to keep + // track of the BackingStore for a given pointer. std::unordered_map> released_allocated_buffers_; }; diff --git a/src/fs_event_wrap.cc b/src/fs_event_wrap.cc index f13d22535c1..7b4a3278028 100644 --- a/src/fs_event_wrap.cc +++ b/src/fs_event_wrap.cc @@ -35,6 +35,7 @@ using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::Integer; +using v8::Isolate; using v8::Local; using v8::MaybeLocal; using v8::Object; @@ -95,13 +96,14 @@ void FSEventWrap::Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - Local t = env->NewFunctionTemplate(New); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate()->SetInternalFieldCount( FSEventWrap::kInternalFieldCount); t->Inherit(HandleWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "start", Start); + SetProtoMethod(isolate, t, "start", Start); Local get_initialized_templ = FunctionTemplate::New(env->isolate(), @@ -115,7 +117,7 @@ void FSEventWrap::Initialize(Local target, Local(), static_cast(ReadOnly | DontDelete | DontEnum)); - env->SetConstructorFunction(target, "FSEvent", t); + SetConstructorFunction(context, target, "FSEvent", t); } void FSEventWrap::RegisterExternalReferences( diff --git a/src/handle_wrap.cc b/src/handle_wrap.cc index caad0e05546..4ea6a67d57f 100644 --- a/src/handle_wrap.cc +++ b/src/handle_wrap.cc @@ -31,6 +31,7 @@ using v8::Context; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; +using v8::Isolate; using v8::Local; using v8::Object; using v8::Value; @@ -157,13 +158,14 @@ void HandleWrap::OnClose(uv_handle_t* handle) { Local HandleWrap::GetConstructorTemplate(Environment* env) { Local tmpl = env->handle_wrap_ctor_template(); if (tmpl.IsEmpty()) { - tmpl = env->NewFunctionTemplate(nullptr); + Isolate* isolate = env->isolate(); + tmpl = NewFunctionTemplate(isolate, nullptr); tmpl->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "HandleWrap")); tmpl->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(tmpl, "close", HandleWrap::Close); - env->SetProtoMethodNoSideEffect(tmpl, "hasRef", HandleWrap::HasRef); - env->SetProtoMethod(tmpl, "ref", HandleWrap::Ref); - env->SetProtoMethod(tmpl, "unref", HandleWrap::Unref); + SetProtoMethod(isolate, tmpl, "close", HandleWrap::Close); + SetProtoMethodNoSideEffect(isolate, tmpl, "hasRef", HandleWrap::HasRef); + SetProtoMethod(isolate, tmpl, "ref", HandleWrap::Ref); + SetProtoMethod(isolate, tmpl, "unref", HandleWrap::Unref); env->set_handle_wrap_ctor_template(tmpl); } return tmpl; diff --git a/src/handle_wrap.h b/src/handle_wrap.h index 2e06829b7bd..a86f8b41c44 100644 --- a/src/handle_wrap.h +++ b/src/handle_wrap.h @@ -97,6 +97,7 @@ class HandleWrap : public AsyncWrap { } static void OnClose(uv_handle_t* handle); + enum { kInitialized, kClosing, kClosed } state_; private: friend class Environment; @@ -109,7 +110,6 @@ class HandleWrap : public AsyncWrap { // refer to `doc/contributing/node-postmortem-support.md` friend int GenDebugSymbols(); ListNode handle_wrap_queue_; - enum { kInitialized, kClosing, kClosed } state_; uv_handle_t* const handle_; }; diff --git a/src/heap_utils.cc b/src/heap_utils.cc index bc779489637..a7c5dcdfb89 100644 --- a/src/heap_utils.cc +++ b/src/heap_utils.cc @@ -393,11 +393,10 @@ void Initialize(Local target, Local unused, Local context, void* priv) { - Environment* env = Environment::GetCurrent(context); - - env->SetMethod(target, "buildEmbedderGraph", BuildEmbedderGraph); - env->SetMethod(target, "triggerHeapSnapshot", TriggerHeapSnapshot); - env->SetMethod(target, "createHeapSnapshotStream", CreateHeapSnapshotStream); + SetMethod(context, target, "buildEmbedderGraph", BuildEmbedderGraph); + SetMethod(context, target, "triggerHeapSnapshot", TriggerHeapSnapshot); + SetMethod( + context, target, "createHeapSnapshotStream", CreateHeapSnapshotStream); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/histogram.cc b/src/histogram.cc index 63fa52a57df..3a3228ddc9e 100644 --- a/src/histogram.cc +++ b/src/histogram.cc @@ -11,6 +11,7 @@ using v8::BigInt; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::Integer; +using v8::Isolate; using v8::Local; using v8::Map; using v8::Number; @@ -280,7 +281,8 @@ Local HistogramBase::GetConstructorTemplate( Environment* env) { Local tmpl = env->histogram_ctor_template(); if (tmpl.IsEmpty()) { - tmpl = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + tmpl = NewFunctionTemplate(isolate, New); Local classname = FIXED_ONE_BYTE_STRING(env->isolate(), "Histogram"); tmpl->SetClassName(classname); @@ -288,26 +290,27 @@ Local HistogramBase::GetConstructorTemplate( tmpl->InstanceTemplate()->SetInternalFieldCount( HistogramBase::kInternalFieldCount); - env->SetProtoMethodNoSideEffect(tmpl, "count", GetCount); - env->SetProtoMethodNoSideEffect(tmpl, "countBigInt", GetCountBigInt); - env->SetProtoMethodNoSideEffect(tmpl, "exceeds", GetExceeds); - env->SetProtoMethodNoSideEffect(tmpl, "exceedsBigInt", GetExceedsBigInt); - env->SetProtoMethodNoSideEffect(tmpl, "min", GetMin); - env->SetProtoMethodNoSideEffect(tmpl, "minBigInt", GetMinBigInt); - env->SetProtoMethodNoSideEffect(tmpl, "max", GetMax); - env->SetProtoMethodNoSideEffect(tmpl, "maxBigInt", GetMaxBigInt); - env->SetProtoMethodNoSideEffect(tmpl, "mean", GetMean); - env->SetProtoMethodNoSideEffect(tmpl, "stddev", GetStddev); - env->SetProtoMethodNoSideEffect(tmpl, "percentile", GetPercentile); - env->SetProtoMethodNoSideEffect(tmpl, "percentileBigInt", - GetPercentileBigInt); - env->SetProtoMethodNoSideEffect(tmpl, "percentiles", GetPercentiles); - env->SetProtoMethodNoSideEffect(tmpl, "percentilesBigInt", - GetPercentilesBigInt); - env->SetProtoMethod(tmpl, "reset", DoReset); - env->SetProtoMethod(tmpl, "record", Record); - env->SetProtoMethod(tmpl, "recordDelta", RecordDelta); - env->SetProtoMethod(tmpl, "add", Add); + SetProtoMethodNoSideEffect(isolate, tmpl, "count", GetCount); + SetProtoMethodNoSideEffect(isolate, tmpl, "countBigInt", GetCountBigInt); + SetProtoMethodNoSideEffect(isolate, tmpl, "exceeds", GetExceeds); + SetProtoMethodNoSideEffect( + isolate, tmpl, "exceedsBigInt", GetExceedsBigInt); + SetProtoMethodNoSideEffect(isolate, tmpl, "min", GetMin); + SetProtoMethodNoSideEffect(isolate, tmpl, "minBigInt", GetMinBigInt); + SetProtoMethodNoSideEffect(isolate, tmpl, "max", GetMax); + SetProtoMethodNoSideEffect(isolate, tmpl, "maxBigInt", GetMaxBigInt); + SetProtoMethodNoSideEffect(isolate, tmpl, "mean", GetMean); + SetProtoMethodNoSideEffect(isolate, tmpl, "stddev", GetStddev); + SetProtoMethodNoSideEffect(isolate, tmpl, "percentile", GetPercentile); + SetProtoMethodNoSideEffect( + isolate, tmpl, "percentileBigInt", GetPercentileBigInt); + SetProtoMethodNoSideEffect(isolate, tmpl, "percentiles", GetPercentiles); + SetProtoMethodNoSideEffect( + isolate, tmpl, "percentilesBigInt", GetPercentilesBigInt); + SetProtoMethod(isolate, tmpl, "reset", DoReset); + SetProtoMethod(isolate, tmpl, "record", Record); + SetProtoMethod(isolate, tmpl, "recordDelta", RecordDelta); + SetProtoMethod(isolate, tmpl, "add", Add); env->set_histogram_ctor_template(tmpl); } return tmpl; @@ -337,7 +340,8 @@ void HistogramBase::RegisterExternalReferences( } void HistogramBase::Initialize(Environment* env, Local target) { - env->SetConstructorFunction(target, "Histogram", GetConstructorTemplate(env)); + SetConstructorFunction( + env->context(), target, "Histogram", GetConstructorTemplate(env)); } BaseObjectPtr HistogramBase::HistogramTransferData::Deserialize( @@ -360,29 +364,31 @@ Local IntervalHistogram::GetConstructorTemplate( Environment* env) { Local tmpl = env->intervalhistogram_constructor_template(); if (tmpl.IsEmpty()) { - tmpl = FunctionTemplate::New(env->isolate()); + Isolate* isolate = env->isolate(); + tmpl = NewFunctionTemplate(isolate, nullptr); tmpl->Inherit(HandleWrap::GetConstructorTemplate(env)); tmpl->InstanceTemplate()->SetInternalFieldCount( HistogramBase::kInternalFieldCount); - env->SetProtoMethodNoSideEffect(tmpl, "count", GetCount); - env->SetProtoMethodNoSideEffect(tmpl, "countBigInt", GetCountBigInt); - env->SetProtoMethodNoSideEffect(tmpl, "exceeds", GetExceeds); - env->SetProtoMethodNoSideEffect(tmpl, "exceedsBigInt", GetExceedsBigInt); - env->SetProtoMethodNoSideEffect(tmpl, "min", GetMin); - env->SetProtoMethodNoSideEffect(tmpl, "minBigInt", GetMinBigInt); - env->SetProtoMethodNoSideEffect(tmpl, "max", GetMax); - env->SetProtoMethodNoSideEffect(tmpl, "maxBigInt", GetMaxBigInt); - env->SetProtoMethodNoSideEffect(tmpl, "mean", GetMean); - env->SetProtoMethodNoSideEffect(tmpl, "stddev", GetStddev); - env->SetProtoMethodNoSideEffect(tmpl, "percentile", GetPercentile); - env->SetProtoMethodNoSideEffect(tmpl, "percentileBigInt", - GetPercentileBigInt); - env->SetProtoMethodNoSideEffect(tmpl, "percentiles", GetPercentiles); - env->SetProtoMethodNoSideEffect(tmpl, "percentilesBigInt", - GetPercentilesBigInt); - env->SetProtoMethod(tmpl, "reset", DoReset); - env->SetProtoMethod(tmpl, "start", Start); - env->SetProtoMethod(tmpl, "stop", Stop); + SetProtoMethodNoSideEffect(isolate, tmpl, "count", GetCount); + SetProtoMethodNoSideEffect(isolate, tmpl, "countBigInt", GetCountBigInt); + SetProtoMethodNoSideEffect(isolate, tmpl, "exceeds", GetExceeds); + SetProtoMethodNoSideEffect( + isolate, tmpl, "exceedsBigInt", GetExceedsBigInt); + SetProtoMethodNoSideEffect(isolate, tmpl, "min", GetMin); + SetProtoMethodNoSideEffect(isolate, tmpl, "minBigInt", GetMinBigInt); + SetProtoMethodNoSideEffect(isolate, tmpl, "max", GetMax); + SetProtoMethodNoSideEffect(isolate, tmpl, "maxBigInt", GetMaxBigInt); + SetProtoMethodNoSideEffect(isolate, tmpl, "mean", GetMean); + SetProtoMethodNoSideEffect(isolate, tmpl, "stddev", GetStddev); + SetProtoMethodNoSideEffect(isolate, tmpl, "percentile", GetPercentile); + SetProtoMethodNoSideEffect( + isolate, tmpl, "percentileBigInt", GetPercentileBigInt); + SetProtoMethodNoSideEffect(isolate, tmpl, "percentiles", GetPercentiles); + SetProtoMethodNoSideEffect( + isolate, tmpl, "percentilesBigInt", GetPercentilesBigInt); + SetProtoMethod(isolate, tmpl, "reset", DoReset); + SetProtoMethod(isolate, tmpl, "start", Start); + SetProtoMethod(isolate, tmpl, "stop", Stop); env->set_intervalhistogram_constructor_template(tmpl); } return tmpl; diff --git a/src/inspector/tracing_agent.h b/src/inspector/tracing_agent.h index e23d2fadae9..b8274de2be9 100644 --- a/src/inspector/tracing_agent.h +++ b/src/inspector/tracing_agent.h @@ -31,7 +31,7 @@ class TracingAgent : public NodeTracing::Backend { Environment* env_; std::shared_ptr main_thread_; tracing::AgentWriterHandle trace_writer_; - int frontend_object_id_; + int frontend_object_id_ = 0; std::shared_ptr frontend_; }; diff --git a/src/inspector_agent.cc b/src/inspector_agent.cc index 5fc533741d7..9ee779fb597 100644 --- a/src/inspector_agent.cc +++ b/src/inspector_agent.cc @@ -97,11 +97,11 @@ static int StartDebugSignalHandler() { pthread_attr_t attr; CHECK_EQ(0, pthread_attr_init(&attr)); #if defined(PTHREAD_STACK_MIN) && !defined(__FreeBSD__) - // PTHREAD_STACK_MIN is 2 KB with musl libc, which is too small to safely - // receive signals. PTHREAD_STACK_MIN + MINSIGSTKSZ is 8 KB on arm64, which + // PTHREAD_STACK_MIN is 2 KiB with musl libc, which is too small to safely + // receive signals. PTHREAD_STACK_MIN + MINSIGSTKSZ is 8 KiB on arm64, which // is the musl architecture with the biggest MINSIGSTKSZ so let's use that // as a lower bound and let's quadruple it just in case. The goal is to avoid - // creating a big 2 or 4 MB address space gap (problematic on 32 bits + // creating a big 2 or 4 MiB address space gap (problematic on 32 bits // because of fragmentation), not squeeze out every last byte. // Omitted on FreeBSD because it doesn't seem to like small stacks. const size_t stack_size = std::max(static_cast(4 * 8192), @@ -676,6 +676,9 @@ bool Agent::Start(const std::string& path, const DebugOptions& options, std::shared_ptr> host_port, bool is_main) { + if (!options.allow_attaching_debugger) { + return false; + } path_ = path; debug_options_ = options; CHECK_NOT_NULL(host_port); diff --git a/src/inspector_io.cc b/src/inspector_io.cc index 5868289ae67..7e0b3ea63cf 100644 --- a/src/inspector_io.cc +++ b/src/inspector_io.cc @@ -46,8 +46,7 @@ std::string ScriptPath(uv_loop_t* loop, const std::string& script_name) { // Used ver 4 - with numbers std::string GenerateID() { uint16_t buffer[8]; - CHECK(crypto::EntropySource(reinterpret_cast(buffer), - sizeof(buffer))); + CHECK(crypto::CSPRNG(buffer, sizeof(buffer)).is_ok()); char uuid[256]; snprintf(uuid, sizeof(uuid), "%04x%04x-%04x-%04x-%04x-%04x%04x%04x", @@ -209,7 +208,7 @@ class IoSessionDelegate : public InspectorSessionDelegate { class InspectorIoDelegate: public node::inspector::SocketServerDelegate { public: InspectorIoDelegate(std::shared_ptr queue, - std::shared_ptr main_threade, + std::shared_ptr main_thread, const std::string& target_id, const std::string& script_path, const std::string& script_name); diff --git a/src/inspector_js_api.cc b/src/inspector_js_api.cc index 30a2e31361f..5278a46bbc6 100644 --- a/src/inspector_js_api.cc +++ b/src/inspector_js_api.cc @@ -102,17 +102,17 @@ class JSBindingsConnection : public AsyncWrap { } static void Bind(Environment* env, Local target) { + Isolate* isolate = env->isolate(); Local tmpl = - env->NewFunctionTemplate(JSBindingsConnection::New); + NewFunctionTemplate(isolate, JSBindingsConnection::New); tmpl->InstanceTemplate()->SetInternalFieldCount( JSBindingsConnection::kInternalFieldCount); tmpl->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(tmpl, "dispatch", JSBindingsConnection::Dispatch); - env->SetProtoMethod(tmpl, "disconnect", JSBindingsConnection::Disconnect); - env->SetConstructorFunction( - target, - ConnectionType::GetClassName(env), - tmpl); + SetProtoMethod(isolate, tmpl, "dispatch", JSBindingsConnection::Dispatch); + SetProtoMethod( + isolate, tmpl, "disconnect", JSBindingsConnection::Disconnect); + SetConstructorFunction( + env->context(), target, ConnectionType::GetClassName(env), tmpl); } static void New(const FunctionCallbackInfo& info) { @@ -215,10 +215,10 @@ void InspectorConsoleCall(const FunctionCallbackInfo& info) { Local node_method = info[1]; CHECK(node_method->IsFunction()); - node_method.As()->Call(context, + USE(node_method.As()->Call(context, info.Holder(), call_args.length(), - call_args.out()).FromMaybe(Local()); + call_args.out())); } static void* GetAsyncTask(int64_t asyncId) { @@ -281,6 +281,7 @@ void Open(const FunctionCallbackInfo& args) { if (args.Length() > 0 && args[0]->IsUint32()) { uint32_t port = args[0].As()->Value(); + CHECK_LE(port, std::numeric_limits::max()); ExclusiveAccess::Scoped host_port(agent->host_port()); host_port->set_port(static_cast(port)); } @@ -314,34 +315,45 @@ void Url(const FunctionCallbackInfo& args) { void Initialize(Local target, Local unused, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); v8::Local consoleCallFunc = - env->NewFunctionTemplate(InspectorConsoleCall, v8::Local(), - v8::ConstructorBehavior::kThrow, - v8::SideEffectType::kHasSideEffect) + NewFunctionTemplate(isolate, + InspectorConsoleCall, + v8::Local(), + v8::ConstructorBehavior::kThrow, + v8::SideEffectType::kHasSideEffect) ->GetFunction(context) .ToLocalChecked(); - auto name_string = FIXED_ONE_BYTE_STRING(env->isolate(), "consoleCall"); + auto name_string = FIXED_ONE_BYTE_STRING(isolate, "consoleCall"); target->Set(context, name_string, consoleCallFunc).Check(); consoleCallFunc->SetName(name_string); - env->SetMethod( - target, "setConsoleExtensionInstaller", SetConsoleExtensionInstaller); - env->SetMethod(target, "callAndPauseOnStart", CallAndPauseOnStart); - env->SetMethod(target, "open", Open); - env->SetMethodNoSideEffect(target, "url", Url); - env->SetMethod(target, "waitForDebugger", WaitForDebugger); - - env->SetMethod(target, "asyncTaskScheduled", AsyncTaskScheduledWrapper); - env->SetMethod(target, "asyncTaskCanceled", - InvokeAsyncTaskFnWithId<&Agent::AsyncTaskCanceled>); - env->SetMethod(target, "asyncTaskStarted", - InvokeAsyncTaskFnWithId<&Agent::AsyncTaskStarted>); - env->SetMethod(target, "asyncTaskFinished", - InvokeAsyncTaskFnWithId<&Agent::AsyncTaskFinished>); - - env->SetMethod(target, "registerAsyncHook", RegisterAsyncHookWrapper); - env->SetMethodNoSideEffect(target, "isEnabled", IsEnabled); + SetMethod(context, + target, + "setConsoleExtensionInstaller", + SetConsoleExtensionInstaller); + SetMethod(context, target, "callAndPauseOnStart", CallAndPauseOnStart); + SetMethod(context, target, "open", Open); + SetMethodNoSideEffect(context, target, "url", Url); + SetMethod(context, target, "waitForDebugger", WaitForDebugger); + + SetMethod(context, target, "asyncTaskScheduled", AsyncTaskScheduledWrapper); + SetMethod(context, + target, + "asyncTaskCanceled", + InvokeAsyncTaskFnWithId<&Agent::AsyncTaskCanceled>); + SetMethod(context, + target, + "asyncTaskStarted", + InvokeAsyncTaskFnWithId<&Agent::AsyncTaskStarted>); + SetMethod(context, + target, + "asyncTaskFinished", + InvokeAsyncTaskFnWithId<&Agent::AsyncTaskFinished>); + + SetMethod(context, target, "registerAsyncHook", RegisterAsyncHookWrapper); + SetMethodNoSideEffect(context, target, "isEnabled", IsEnabled); JSBindingsConnection::Bind(env, target); JSBindingsConnection::Bind(env, target); diff --git a/src/inspector_profiler.cc b/src/inspector_profiler.cc index db8bda8524d..538125f091a 100644 --- a/src/inspector_profiler.cc +++ b/src/inspector_profiler.cc @@ -331,11 +331,11 @@ MaybeLocal V8CpuProfilerConnection::GetProfile(Local result) { void V8CpuProfilerConnection::Start() { DispatchMessage("Profiler.enable"); - DispatchMessage("Profiler.start"); std::string params = R"({ "interval": )"; params += std::to_string(env()->cpu_prof_interval()); params += " }"; DispatchMessage("Profiler.setSamplingInterval", params.c_str()); + DispatchMessage("Profiler.start"); } void V8CpuProfilerConnection::End() { @@ -507,11 +507,11 @@ static void Initialize(Local target, Local unused, Local context, void* priv) { - Environment* env = Environment::GetCurrent(context); - env->SetMethod(target, "setCoverageDirectory", SetCoverageDirectory); - env->SetMethod(target, "setSourceMapCacheGetter", SetSourceMapCacheGetter); - env->SetMethod(target, "takeCoverage", TakeCoverage); - env->SetMethod(target, "stopCoverage", StopCoverage); + SetMethod(context, target, "setCoverageDirectory", SetCoverageDirectory); + SetMethod( + context, target, "setSourceMapCacheGetter", SetSourceMapCacheGetter); + SetMethod(context, target, "takeCoverage", TakeCoverage); + SetMethod(context, target, "stopCoverage", StopCoverage); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/inspector_socket.cc b/src/inspector_socket.cc index cacff747d08..a28bd557c8a 100644 --- a/src/inspector_socket.cc +++ b/src/inspector_socket.cc @@ -6,6 +6,7 @@ #include "openssl/sha.h" // Sha-1 hash +#include #include #include @@ -162,16 +163,70 @@ static std::string TrimPort(const std::string& host) { } static bool IsIPAddress(const std::string& host) { - if (host.length() >= 4 && host.front() == '[' && host.back() == ']') - return true; - int quads = 0; - for (char c : host) { - if (c == '.') - quads++; - else if (!isdigit(c)) + // TODO(tniessen): add CVEs to the following bullet points + // To avoid DNS rebinding attacks, we are aware of the following requirements: + // * the host name must be an IP address, + // * the IP address must be routable, and + // * the IP address must be formatted unambiguously. + + // The logic below assumes that the string is null-terminated, so ensure that + // we did not somehow end up with null characters within the string. + if (host.find('\0') != std::string::npos) return false; + + // All IPv6 addresses must be enclosed in square brackets, and anything + // enclosed in square brackets must be an IPv6 address. + if (host.length() >= 4 && host.front() == '[' && host.back() == ']') { + // INET6_ADDRSTRLEN is the maximum length of the dual format (including the + // terminating null character), which is the longest possible representation + // of an IPv6 address: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:ddd.ddd.ddd.ddd + if (host.length() - 2 >= INET6_ADDRSTRLEN) return false; + + // Annoyingly, libuv's implementation of inet_pton() deviates from other + // implementations of the function in that it allows '%' in IPv6 addresses. + if (host.find('%') != std::string::npos) return false; + + // Parse the IPv6 address to ensure it is syntactically valid. + char ipv6_str[INET6_ADDRSTRLEN]; + std::copy(host.begin() + 1, host.end() - 1, ipv6_str); + ipv6_str[host.length()] = '\0'; + unsigned char ipv6[sizeof(struct in6_addr)]; + if (uv_inet_pton(AF_INET6, ipv6_str, ipv6) != 0) return false; + + // The only non-routable IPv6 address is ::/128. It should not be necessary + // to explicitly reject it because it will still be enclosed in square + // brackets and not even macOS should make DNS requests in that case, but + // history has taught us that we cannot be careful enough. + // Note that RFC 4291 defines both "IPv4-Compatible IPv6 Addresses" and + // "IPv4-Mapped IPv6 Addresses", which means that there are IPv6 addresses + // (other than ::/128) that represent non-routable IPv4 addresses. However, + // this translation assumes that the host is interpreted as an IPv6 address + // in the first place, at which point DNS rebinding should not be an issue. + if (std::all_of(ipv6, ipv6 + sizeof(ipv6), [](auto b) { return b == 0; })) { return false; + } + + // It is a syntactically valid and routable IPv6 address enclosed in square + // brackets. No client should be able to misinterpret this. + return true; } - return quads == 3; + + // Anything not enclosed in square brackets must be an IPv4 address. It is + // important here that inet_pton() accepts only the so-called dotted-decimal + // notation, which is a strict subset of the so-called numbers-and-dots + // notation that is allowed by inet_aton() and inet_addr(). This subset does + // not allow hexadecimal or octal number formats. + unsigned char ipv4[sizeof(struct in_addr)]; + if (uv_inet_pton(AF_INET, host.c_str(), ipv4) != 0) return false; + + // The only strictly non-routable IPv4 address is 0.0.0.0, and macOS will make + // DNS requests for this IP address, so we need to explicitly reject it. In + // fact, we can safely reject all of 0.0.0.0/8 (see Section 3.2 of RFC 791 and + // Section 3.2.1.3 of RFC 1122). + // Note that inet_pton() stores the IPv4 address in network byte order. + if (ipv4[0] == 0) return false; + + // It is a routable IPv4 address in dotted-decimal notation. + return true; } // Constants for hybi-10 frame format. diff --git a/src/js_native_api.h b/src/js_native_api.h index 50ccf11e240..d11a2c5a18c 100644 --- a/src/js_native_api.h +++ b/src/js_native_api.h @@ -2,8 +2,8 @@ #define SRC_JS_NATIVE_API_H_ // This file needs to be compatible with C compilers. -#include // NOLINT(modernize-deprecated-headers) #include // NOLINT(modernize-deprecated-headers) +#include // NOLINT(modernize-deprecated-headers) // Use INT_MAX, this should only be consumed by the pre-processor anyway. #define NAPI_VERSION_EXPERIMENTAL 2147483647 @@ -26,14 +26,15 @@ // If you need __declspec(dllimport), either include instead, or // define NAPI_EXTERN as __declspec(dllimport) on the compiler's command line. #ifndef NAPI_EXTERN - #ifdef _WIN32 - #define NAPI_EXTERN __declspec(dllexport) - #elif defined(__wasm32__) - #define NAPI_EXTERN __attribute__((visibility("default"))) \ - __attribute__((__import_module__("napi"))) - #else - #define NAPI_EXTERN __attribute__((visibility("default"))) - #endif +#ifdef _WIN32 +#define NAPI_EXTERN __declspec(dllexport) +#elif defined(__wasm32__) +#define NAPI_EXTERN \ + __attribute__((visibility("default"))) \ + __attribute__((__import_module__("napi"))) +#else +#define NAPI_EXTERN __attribute__((visibility("default"))) +#endif #endif #define NAPI_AUTO_LENGTH SIZE_MAX @@ -48,234 +49,228 @@ EXTERN_C_START -NAPI_EXTERN napi_status -napi_get_last_error_info(napi_env env, - const napi_extended_error_info** result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_get_last_error_info(napi_env env, const napi_extended_error_info** result); // Getters for defined singletons -NAPI_EXTERN napi_status napi_get_undefined(napi_env env, napi_value* result); -NAPI_EXTERN napi_status napi_get_null(napi_env env, napi_value* result); -NAPI_EXTERN napi_status napi_get_global(napi_env env, napi_value* result); -NAPI_EXTERN napi_status napi_get_boolean(napi_env env, - bool value, - napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_undefined(napi_env env, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_null(napi_env env, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_global(napi_env env, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_boolean(napi_env env, + bool value, + napi_value* result); // Methods to create Primitive types/Objects -NAPI_EXTERN napi_status napi_create_object(napi_env env, napi_value* result); -NAPI_EXTERN napi_status napi_create_array(napi_env env, napi_value* result); -NAPI_EXTERN napi_status napi_create_array_with_length(napi_env env, - size_t length, +NAPI_EXTERN napi_status NAPI_CDECL napi_create_object(napi_env env, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_array(napi_env env, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_create_array_with_length(napi_env env, size_t length, napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_double(napi_env env, + double value, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_int32(napi_env env, + int32_t value, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_uint32(napi_env env, + uint32_t value, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_int64(napi_env env, + int64_t value, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_latin1( + napi_env env, const char* str, size_t length, napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_utf8(napi_env env, + const char* str, + size_t length, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_utf16(napi_env env, + const char16_t* str, + size_t length, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_symbol(napi_env env, + napi_value description, napi_value* result); -NAPI_EXTERN napi_status napi_create_double(napi_env env, - double value, - napi_value* result); -NAPI_EXTERN napi_status napi_create_int32(napi_env env, - int32_t value, - napi_value* result); -NAPI_EXTERN napi_status napi_create_uint32(napi_env env, - uint32_t value, - napi_value* result); -NAPI_EXTERN napi_status napi_create_int64(napi_env env, - int64_t value, - napi_value* result); -NAPI_EXTERN napi_status napi_create_string_latin1(napi_env env, - const char* str, - size_t length, - napi_value* result); -NAPI_EXTERN napi_status napi_create_string_utf8(napi_env env, - const char* str, - size_t length, - napi_value* result); -NAPI_EXTERN napi_status napi_create_string_utf16(napi_env env, - const char16_t* str, - size_t length, - napi_value* result); -NAPI_EXTERN napi_status napi_create_symbol(napi_env env, - napi_value description, - napi_value* result); #ifdef NAPI_EXPERIMENTAL -NAPI_EXTERN napi_status node_api_symbol_for(napi_env env, - const char* utf8description, - size_t length, - napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL +node_api_symbol_for(napi_env env, + const char* utf8description, + size_t length, + napi_value* result); #endif // NAPI_EXPERIMENTAL -NAPI_EXTERN napi_status napi_create_function(napi_env env, - const char* utf8name, - size_t length, - napi_callback cb, - void* data, - napi_value* result); -NAPI_EXTERN napi_status napi_create_error(napi_env env, - napi_value code, - napi_value msg, - napi_value* result); -NAPI_EXTERN napi_status napi_create_type_error(napi_env env, - napi_value code, - napi_value msg, - napi_value* result); -NAPI_EXTERN napi_status napi_create_range_error(napi_env env, - napi_value code, - napi_value msg, - napi_value* result); -#ifdef NAPI_EXPERIMENTAL -NAPI_EXTERN napi_status node_api_create_syntax_error(napi_env env, +NAPI_EXTERN napi_status NAPI_CDECL napi_create_function(napi_env env, + const char* utf8name, + size_t length, + napi_callback cb, + void* data, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_error(napi_env env, napi_value code, napi_value msg, napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_type_error(napi_env env, + napi_value code, + napi_value msg, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_range_error(napi_env env, + napi_value code, + napi_value msg, + napi_value* result); +#ifdef NAPI_EXPERIMENTAL +NAPI_EXTERN napi_status NAPI_CDECL node_api_create_syntax_error( + napi_env env, napi_value code, napi_value msg, napi_value* result); #endif // NAPI_EXPERIMENTAL // Methods to get the native napi_value from Primitive type -NAPI_EXTERN napi_status napi_typeof(napi_env env, - napi_value value, - napi_valuetype* result); -NAPI_EXTERN napi_status napi_get_value_double(napi_env env, - napi_value value, - double* result); -NAPI_EXTERN napi_status napi_get_value_int32(napi_env env, - napi_value value, - int32_t* result); -NAPI_EXTERN napi_status napi_get_value_uint32(napi_env env, - napi_value value, - uint32_t* result); -NAPI_EXTERN napi_status napi_get_value_int64(napi_env env, - napi_value value, - int64_t* result); -NAPI_EXTERN napi_status napi_get_value_bool(napi_env env, - napi_value value, - bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_typeof(napi_env env, + napi_value value, + napi_valuetype* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_double(napi_env env, + napi_value value, + double* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_int32(napi_env env, + napi_value value, + int32_t* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_uint32(napi_env env, + napi_value value, + uint32_t* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_int64(napi_env env, + napi_value value, + int64_t* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bool(napi_env env, + napi_value value, + bool* result); // Copies LATIN-1 encoded bytes from a string into a buffer. -NAPI_EXTERN napi_status napi_get_value_string_latin1(napi_env env, - napi_value value, - char* buf, - size_t bufsize, - size_t* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_latin1( + napi_env env, napi_value value, char* buf, size_t bufsize, size_t* result); // Copies UTF-8 encoded bytes from a string into a buffer. -NAPI_EXTERN napi_status napi_get_value_string_utf8(napi_env env, - napi_value value, - char* buf, - size_t bufsize, - size_t* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_utf8( + napi_env env, napi_value value, char* buf, size_t bufsize, size_t* result); // Copies UTF-16 encoded bytes from a string into a buffer. -NAPI_EXTERN napi_status napi_get_value_string_utf16(napi_env env, - napi_value value, - char16_t* buf, - size_t bufsize, - size_t* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_utf16(napi_env env, + napi_value value, + char16_t* buf, + size_t bufsize, + size_t* result); // Methods to coerce values // These APIs may execute user scripts -NAPI_EXTERN napi_status napi_coerce_to_bool(napi_env env, - napi_value value, - napi_value* result); -NAPI_EXTERN napi_status napi_coerce_to_number(napi_env env, - napi_value value, - napi_value* result); -NAPI_EXTERN napi_status napi_coerce_to_object(napi_env env, - napi_value value, - napi_value* result); -NAPI_EXTERN napi_status napi_coerce_to_string(napi_env env, - napi_value value, - napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_bool(napi_env env, + napi_value value, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_number(napi_env env, + napi_value value, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_object(napi_env env, + napi_value value, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_string(napi_env env, + napi_value value, + napi_value* result); // Methods to work with Objects -NAPI_EXTERN napi_status napi_get_prototype(napi_env env, - napi_value object, - napi_value* result); -NAPI_EXTERN napi_status napi_get_property_names(napi_env env, - napi_value object, - napi_value* result); -NAPI_EXTERN napi_status napi_set_property(napi_env env, - napi_value object, - napi_value key, - napi_value value); -NAPI_EXTERN napi_status napi_has_property(napi_env env, - napi_value object, - napi_value key, - bool* result); -NAPI_EXTERN napi_status napi_get_property(napi_env env, - napi_value object, - napi_value key, - napi_value* result); -NAPI_EXTERN napi_status napi_delete_property(napi_env env, - napi_value object, - napi_value key, - bool* result); -NAPI_EXTERN napi_status napi_has_own_property(napi_env env, - napi_value object, - napi_value key, - bool* result); -NAPI_EXTERN napi_status napi_set_named_property(napi_env env, - napi_value object, - const char* utf8name, - napi_value value); -NAPI_EXTERN napi_status napi_has_named_property(napi_env env, - napi_value object, - const char* utf8name, - bool* result); -NAPI_EXTERN napi_status napi_get_named_property(napi_env env, - napi_value object, - const char* utf8name, - napi_value* result); -NAPI_EXTERN napi_status napi_set_element(napi_env env, - napi_value object, - uint32_t index, - napi_value value); -NAPI_EXTERN napi_status napi_has_element(napi_env env, - napi_value object, - uint32_t index, - bool* result); -NAPI_EXTERN napi_status napi_get_element(napi_env env, - napi_value object, - uint32_t index, - napi_value* result); -NAPI_EXTERN napi_status napi_delete_element(napi_env env, - napi_value object, - uint32_t index, - bool* result); -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL napi_get_prototype(napi_env env, + napi_value object, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_property_names(napi_env env, + napi_value object, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_set_property(napi_env env, + napi_value object, + napi_value key, + napi_value value); +NAPI_EXTERN napi_status NAPI_CDECL napi_has_property(napi_env env, + napi_value object, + napi_value key, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_property(napi_env env, + napi_value object, + napi_value key, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_delete_property(napi_env env, + napi_value object, + napi_value key, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_has_own_property(napi_env env, + napi_value object, + napi_value key, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_set_named_property(napi_env env, + napi_value object, + const char* utf8name, + napi_value value); +NAPI_EXTERN napi_status NAPI_CDECL napi_has_named_property(napi_env env, + napi_value object, + const char* utf8name, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_named_property(napi_env env, + napi_value object, + const char* utf8name, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_set_element(napi_env env, + napi_value object, + uint32_t index, + napi_value value); +NAPI_EXTERN napi_status NAPI_CDECL napi_has_element(napi_env env, + napi_value object, + uint32_t index, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_element(napi_env env, + napi_value object, + uint32_t index, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_delete_element(napi_env env, + napi_value object, + uint32_t index, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_define_properties(napi_env env, napi_value object, size_t property_count, const napi_property_descriptor* properties); // Methods to work with Arrays -NAPI_EXTERN napi_status napi_is_array(napi_env env, - napi_value value, - bool* result); -NAPI_EXTERN napi_status napi_get_array_length(napi_env env, - napi_value value, - uint32_t* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_is_array(napi_env env, + napi_value value, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_array_length(napi_env env, + napi_value value, + uint32_t* result); // Methods to compare values -NAPI_EXTERN napi_status napi_strict_equals(napi_env env, - napi_value lhs, - napi_value rhs, - bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_strict_equals(napi_env env, + napi_value lhs, + napi_value rhs, + bool* result); // Methods to work with Functions -NAPI_EXTERN napi_status napi_call_function(napi_env env, - napi_value recv, - napi_value func, - size_t argc, - const napi_value* argv, - napi_value* result); -NAPI_EXTERN napi_status napi_new_instance(napi_env env, - napi_value constructor, - size_t argc, - const napi_value* argv, - napi_value* result); -NAPI_EXTERN napi_status napi_instanceof(napi_env env, - napi_value object, - napi_value constructor, - bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_call_function(napi_env env, + napi_value recv, + napi_value func, + size_t argc, + const napi_value* argv, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_new_instance(napi_env env, + napi_value constructor, + size_t argc, + const napi_value* argv, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_instanceof(napi_env env, + napi_value object, + napi_value constructor, + bool* result); // Methods to work with napi_callbacks // Gets all callback info in a single call. (Ugly, but faster.) -NAPI_EXTERN napi_status napi_get_cb_info( +NAPI_EXTERN napi_status NAPI_CDECL napi_get_cb_info( napi_env env, // [in] NAPI environment handle napi_callback_info cbinfo, // [in] Opaque callback-info handle size_t* argc, // [in-out] Specifies the size of the provided argv array @@ -284,10 +279,9 @@ NAPI_EXTERN napi_status napi_get_cb_info( napi_value* this_arg, // [out] Receives the JS 'this' arg for the call void** data); // [out] Receives the data pointer for the callback. -NAPI_EXTERN napi_status napi_get_new_target(napi_env env, - napi_callback_info cbinfo, - napi_value* result); -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL napi_get_new_target( + napi_env env, napi_callback_info cbinfo, napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_define_class(napi_env env, const char* utf8name, size_t length, @@ -298,237 +292,242 @@ napi_define_class(napi_env env, napi_value* result); // Methods to work with external data objects -NAPI_EXTERN napi_status napi_wrap(napi_env env, - napi_value js_object, - void* native_object, - napi_finalize finalize_cb, - void* finalize_hint, - napi_ref* result); -NAPI_EXTERN napi_status napi_unwrap(napi_env env, - napi_value js_object, - void** result); -NAPI_EXTERN napi_status napi_remove_wrap(napi_env env, - napi_value js_object, - void** result); -NAPI_EXTERN napi_status napi_create_external(napi_env env, - void* data, +NAPI_EXTERN napi_status NAPI_CDECL napi_wrap(napi_env env, + napi_value js_object, + void* native_object, napi_finalize finalize_cb, void* finalize_hint, - napi_value* result); -NAPI_EXTERN napi_status napi_get_value_external(napi_env env, - napi_value value, - void** result); + napi_ref* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_unwrap(napi_env env, + napi_value js_object, + void** result); +NAPI_EXTERN napi_status NAPI_CDECL napi_remove_wrap(napi_env env, + napi_value js_object, + void** result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_create_external(napi_env env, + void* data, + napi_finalize finalize_cb, + void* finalize_hint, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_external(napi_env env, + napi_value value, + void** result); // Methods to control object lifespan // Set initial_refcount to 0 for a weak reference, >0 for a strong reference. -NAPI_EXTERN napi_status napi_create_reference(napi_env env, - napi_value value, - uint32_t initial_refcount, - napi_ref* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_create_reference(napi_env env, + napi_value value, + uint32_t initial_refcount, + napi_ref* result); // Deletes a reference. The referenced value is released, and may // be GC'd unless there are other references to it. -NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref); +NAPI_EXTERN napi_status NAPI_CDECL napi_delete_reference(napi_env env, + napi_ref ref); // Increments the reference count, optionally returning the resulting count. // After this call the reference will be a strong reference because its // refcount is >0, and the referenced object is effectively "pinned". // Calling this when the refcount is 0 and the object is unavailable // results in an error. -NAPI_EXTERN napi_status napi_reference_ref(napi_env env, - napi_ref ref, - uint32_t* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_reference_ref(napi_env env, + napi_ref ref, + uint32_t* result); // Decrements the reference count, optionally returning the resulting count. // If the result is 0 the reference is now weak and the object may be GC'd // at any time if there are no other references. Calling this when the // refcount is already 0 results in an error. -NAPI_EXTERN napi_status napi_reference_unref(napi_env env, - napi_ref ref, - uint32_t* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_reference_unref(napi_env env, + napi_ref ref, + uint32_t* result); // Attempts to get a referenced value. If the reference is weak, // the value might no longer be available, in that case the call // is still successful but the result is NULL. -NAPI_EXTERN napi_status napi_get_reference_value(napi_env env, - napi_ref ref, - napi_value* result); - -NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env, - napi_handle_scope* result); -NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env, - napi_handle_scope scope); -NAPI_EXTERN napi_status -napi_open_escapable_handle_scope(napi_env env, - napi_escapable_handle_scope* result); -NAPI_EXTERN napi_status -napi_close_escapable_handle_scope(napi_env env, - napi_escapable_handle_scope scope); - -NAPI_EXTERN napi_status napi_escape_handle(napi_env env, - napi_escapable_handle_scope scope, - napi_value escapee, - napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_reference_value(napi_env env, + napi_ref ref, + napi_value* result); + +NAPI_EXTERN napi_status NAPI_CDECL +napi_open_handle_scope(napi_env env, napi_handle_scope* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_close_handle_scope(napi_env env, napi_handle_scope scope); +NAPI_EXTERN napi_status NAPI_CDECL napi_open_escapable_handle_scope( + napi_env env, napi_escapable_handle_scope* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_close_escapable_handle_scope( + napi_env env, napi_escapable_handle_scope scope); + +NAPI_EXTERN napi_status NAPI_CDECL +napi_escape_handle(napi_env env, + napi_escapable_handle_scope scope, + napi_value escapee, + napi_value* result); // Methods to support error handling -NAPI_EXTERN napi_status napi_throw(napi_env env, napi_value error); -NAPI_EXTERN napi_status napi_throw_error(napi_env env, - const char* code, - const char* msg); -NAPI_EXTERN napi_status napi_throw_type_error(napi_env env, - const char* code, - const char* msg); -NAPI_EXTERN napi_status napi_throw_range_error(napi_env env, - const char* code, - const char* msg); -#ifdef NAPI_EXPERIMENTAL -NAPI_EXTERN napi_status node_api_throw_syntax_error(napi_env env, +NAPI_EXTERN napi_status NAPI_CDECL napi_throw(napi_env env, napi_value error); +NAPI_EXTERN napi_status NAPI_CDECL napi_throw_error(napi_env env, const char* code, const char* msg); +NAPI_EXTERN napi_status NAPI_CDECL napi_throw_type_error(napi_env env, + const char* code, + const char* msg); +NAPI_EXTERN napi_status NAPI_CDECL napi_throw_range_error(napi_env env, + const char* code, + const char* msg); +#ifdef NAPI_EXPERIMENTAL +NAPI_EXTERN napi_status NAPI_CDECL node_api_throw_syntax_error(napi_env env, + const char* code, + const char* msg); #endif // NAPI_EXPERIMENTAL -NAPI_EXTERN napi_status napi_is_error(napi_env env, - napi_value value, - bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_is_error(napi_env env, + napi_value value, + bool* result); // Methods to support catching exceptions -NAPI_EXTERN napi_status napi_is_exception_pending(napi_env env, bool* result); -NAPI_EXTERN napi_status napi_get_and_clear_last_exception(napi_env env, - napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_is_exception_pending(napi_env env, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_get_and_clear_last_exception(napi_env env, napi_value* result); // Methods to work with array buffers and typed arrays -NAPI_EXTERN napi_status napi_is_arraybuffer(napi_env env, - napi_value value, - bool* result); -NAPI_EXTERN napi_status napi_create_arraybuffer(napi_env env, - size_t byte_length, - void** data, - napi_value* result); -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL napi_is_arraybuffer(napi_env env, + napi_value value, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_arraybuffer(napi_env env, + size_t byte_length, + void** data, + napi_value* result); +#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED +NAPI_EXTERN napi_status NAPI_CDECL napi_create_external_arraybuffer(napi_env env, void* external_data, size_t byte_length, napi_finalize finalize_cb, void* finalize_hint, napi_value* result); -NAPI_EXTERN napi_status napi_get_arraybuffer_info(napi_env env, - napi_value arraybuffer, - void** data, - size_t* byte_length); -NAPI_EXTERN napi_status napi_is_typedarray(napi_env env, - napi_value value, - bool* result); -NAPI_EXTERN napi_status napi_create_typedarray(napi_env env, - napi_typedarray_type type, - size_t length, - napi_value arraybuffer, - size_t byte_offset, - napi_value* result); -NAPI_EXTERN napi_status napi_get_typedarray_info(napi_env env, - napi_value typedarray, - napi_typedarray_type* type, - size_t* length, - void** data, - napi_value* arraybuffer, - size_t* byte_offset); - -NAPI_EXTERN napi_status napi_create_dataview(napi_env env, - size_t length, - napi_value arraybuffer, - size_t byte_offset, - napi_value* result); -NAPI_EXTERN napi_status napi_is_dataview(napi_env env, - napi_value value, - bool* result); -NAPI_EXTERN napi_status napi_get_dataview_info(napi_env env, - napi_value dataview, - size_t* bytelength, - void** data, - napi_value* arraybuffer, - size_t* byte_offset); +#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED +NAPI_EXTERN napi_status NAPI_CDECL napi_get_arraybuffer_info( + napi_env env, napi_value arraybuffer, void** data, size_t* byte_length); +NAPI_EXTERN napi_status NAPI_CDECL napi_is_typedarray(napi_env env, + napi_value value, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_create_typedarray(napi_env env, + napi_typedarray_type type, + size_t length, + napi_value arraybuffer, + size_t byte_offset, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_get_typedarray_info(napi_env env, + napi_value typedarray, + napi_typedarray_type* type, + size_t* length, + void** data, + napi_value* arraybuffer, + size_t* byte_offset); + +NAPI_EXTERN napi_status NAPI_CDECL napi_create_dataview(napi_env env, + size_t length, + napi_value arraybuffer, + size_t byte_offset, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_is_dataview(napi_env env, + napi_value value, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_get_dataview_info(napi_env env, + napi_value dataview, + size_t* bytelength, + void** data, + napi_value* arraybuffer, + size_t* byte_offset); // version management -NAPI_EXTERN napi_status napi_get_version(napi_env env, uint32_t* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_version(napi_env env, + uint32_t* result); // Promises -NAPI_EXTERN napi_status napi_create_promise(napi_env env, - napi_deferred* deferred, - napi_value* promise); -NAPI_EXTERN napi_status napi_resolve_deferred(napi_env env, - napi_deferred deferred, - napi_value resolution); -NAPI_EXTERN napi_status napi_reject_deferred(napi_env env, - napi_deferred deferred, - napi_value rejection); -NAPI_EXTERN napi_status napi_is_promise(napi_env env, - napi_value value, - bool* is_promise); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_promise(napi_env env, + napi_deferred* deferred, + napi_value* promise); +NAPI_EXTERN napi_status NAPI_CDECL napi_resolve_deferred(napi_env env, + napi_deferred deferred, + napi_value resolution); +NAPI_EXTERN napi_status NAPI_CDECL napi_reject_deferred(napi_env env, + napi_deferred deferred, + napi_value rejection); +NAPI_EXTERN napi_status NAPI_CDECL napi_is_promise(napi_env env, + napi_value value, + bool* is_promise); // Running a script -NAPI_EXTERN napi_status napi_run_script(napi_env env, - napi_value script, - napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_run_script(napi_env env, + napi_value script, + napi_value* result); // Memory management -NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env, - int64_t change_in_bytes, - int64_t* adjusted_value); +NAPI_EXTERN napi_status NAPI_CDECL napi_adjust_external_memory( + napi_env env, int64_t change_in_bytes, int64_t* adjusted_value); #if NAPI_VERSION >= 5 // Dates -NAPI_EXTERN napi_status napi_create_date(napi_env env, - double time, - napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_date(napi_env env, + double time, + napi_value* result); -NAPI_EXTERN napi_status napi_is_date(napi_env env, - napi_value value, - bool* is_date); +NAPI_EXTERN napi_status NAPI_CDECL napi_is_date(napi_env env, + napi_value value, + bool* is_date); -NAPI_EXTERN napi_status napi_get_date_value(napi_env env, - napi_value value, - double* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_date_value(napi_env env, + napi_value value, + double* result); // Add finalizer for pointer -NAPI_EXTERN napi_status napi_add_finalizer(napi_env env, - napi_value js_object, - void* native_object, - napi_finalize finalize_cb, - void* finalize_hint, - napi_ref* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_add_finalizer(napi_env env, + napi_value js_object, + void* native_object, + napi_finalize finalize_cb, + void* finalize_hint, + napi_ref* result); #endif // NAPI_VERSION >= 5 #if NAPI_VERSION >= 6 // BigInt -NAPI_EXTERN napi_status napi_create_bigint_int64(napi_env env, - int64_t value, - napi_value* result); -NAPI_EXTERN napi_status napi_create_bigint_uint64(napi_env env, - uint64_t value, - napi_value* result); -NAPI_EXTERN napi_status napi_create_bigint_words(napi_env env, - int sign_bit, - size_t word_count, - const uint64_t* words, - napi_value* result); -NAPI_EXTERN napi_status napi_get_value_bigint_int64(napi_env env, - napi_value value, - int64_t* result, - bool* lossless); -NAPI_EXTERN napi_status napi_get_value_bigint_uint64(napi_env env, - napi_value value, - uint64_t* result, - bool* lossless); -NAPI_EXTERN napi_status napi_get_value_bigint_words(napi_env env, - napi_value value, - int* sign_bit, - size_t* word_count, - uint64_t* words); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_bigint_int64(napi_env env, + int64_t value, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_create_bigint_uint64(napi_env env, uint64_t value, napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_create_bigint_words(napi_env env, + int sign_bit, + size_t word_count, + const uint64_t* words, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bigint_int64(napi_env env, + napi_value value, + int64_t* result, + bool* lossless); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bigint_uint64( + napi_env env, napi_value value, uint64_t* result, bool* lossless); +NAPI_EXTERN napi_status NAPI_CDECL +napi_get_value_bigint_words(napi_env env, + napi_value value, + int* sign_bit, + size_t* word_count, + uint64_t* words); // Object -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL napi_get_all_property_names(napi_env env, napi_value object, napi_key_collection_mode key_mode, @@ -537,40 +536,36 @@ napi_get_all_property_names(napi_env env, napi_value* result); // Instance data -NAPI_EXTERN napi_status napi_set_instance_data(napi_env env, - void* data, - napi_finalize finalize_cb, - void* finalize_hint); +NAPI_EXTERN napi_status NAPI_CDECL napi_set_instance_data( + napi_env env, void* data, napi_finalize finalize_cb, void* finalize_hint); -NAPI_EXTERN napi_status napi_get_instance_data(napi_env env, - void** data); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_instance_data(napi_env env, + void** data); #endif // NAPI_VERSION >= 6 #if NAPI_VERSION >= 7 // ArrayBuffer detaching -NAPI_EXTERN napi_status napi_detach_arraybuffer(napi_env env, - napi_value arraybuffer); +NAPI_EXTERN napi_status NAPI_CDECL +napi_detach_arraybuffer(napi_env env, napi_value arraybuffer); -NAPI_EXTERN napi_status napi_is_detached_arraybuffer(napi_env env, - napi_value value, - bool* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_is_detached_arraybuffer(napi_env env, napi_value value, bool* result); #endif // NAPI_VERSION >= 7 #if NAPI_VERSION >= 8 // Type tagging -NAPI_EXTERN napi_status napi_type_tag_object(napi_env env, - napi_value value, - const napi_type_tag* type_tag); +NAPI_EXTERN napi_status NAPI_CDECL napi_type_tag_object( + napi_env env, napi_value value, const napi_type_tag* type_tag); -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL napi_check_object_type_tag(napi_env env, napi_value value, const napi_type_tag* type_tag, bool* result); -NAPI_EXTERN napi_status napi_object_freeze(napi_env env, - napi_value object); -NAPI_EXTERN napi_status napi_object_seal(napi_env env, - napi_value object); +NAPI_EXTERN napi_status NAPI_CDECL napi_object_freeze(napi_env env, + napi_value object); +NAPI_EXTERN napi_status NAPI_CDECL napi_object_seal(napi_env env, + napi_value object); #endif // NAPI_VERSION >= 8 EXTERN_C_END diff --git a/src/js_native_api_types.h b/src/js_native_api_types.h index 6aba06629b3..517614950a9 100644 --- a/src/js_native_api_types.h +++ b/src/js_native_api_types.h @@ -8,7 +8,15 @@ #include // NOLINT(modernize-deprecated-headers) #if !defined __cplusplus || (defined(_MSC_VER) && _MSC_VER < 1900) - typedef uint16_t char16_t; +typedef uint16_t char16_t; +#endif + +#ifndef NAPI_CDECL +#ifdef _WIN32 +#define NAPI_CDECL __cdecl +#else +#define NAPI_CDECL +#endif #endif // JSVM API types are all opaque pointers for ABI stability @@ -36,9 +44,7 @@ typedef enum { napi_default_method = napi_writable | napi_configurable, // Default for object properties, like in JS obj[prop]. - napi_default_jsproperty = napi_writable | - napi_enumerable | - napi_configurable, + napi_default_jsproperty = napi_writable | napi_enumerable | napi_configurable, #endif // NAPI_VERSION >= 8 } napi_property_attributes; @@ -92,7 +98,8 @@ typedef enum { napi_date_expected, napi_arraybuffer_expected, napi_detachable_arraybuffer_expected, - napi_would_deadlock // unused + napi_would_deadlock, // unused + napi_no_external_buffers_allowed } napi_status; // Note: when adding a new enum value to `napi_status`, please also update // * `const int last_status` in the definition of `napi_get_last_error_info()' @@ -102,11 +109,11 @@ typedef enum { // * the definition of `napi_status` in doc/api/n-api.md to reflect the newly // added value(s). -typedef napi_value (*napi_callback)(napi_env env, - napi_callback_info info); -typedef void (*napi_finalize)(napi_env env, - void* finalize_data, - void* finalize_hint); +typedef napi_value(NAPI_CDECL* napi_callback)(napi_env env, + napi_callback_info info); +typedef void(NAPI_CDECL* napi_finalize)(napi_env env, + void* finalize_data, + void* finalize_hint); typedef struct { // One of utf8name or name should be NULL. diff --git a/src/js_native_api_v8.cc b/src/js_native_api_v8.cc index 1c29c43836a..4beed55561a 100644 --- a/src/js_native_api_v8.cc +++ b/src/js_native_api_v8.cc @@ -1,43 +1,41 @@ +#include #include // INT_MAX #include -#include #define NAPI_EXPERIMENTAL #include "env-inl.h" -#include "js_native_api_v8.h" #include "js_native_api.h" +#include "js_native_api_v8.h" #include "util-inl.h" -#define CHECK_MAYBE_NOTHING(env, maybe, status) \ +#define CHECK_MAYBE_NOTHING(env, maybe, status) \ RETURN_STATUS_IF_FALSE((env), !((maybe).IsNothing()), (status)) -#define CHECK_MAYBE_NOTHING_WITH_PREAMBLE(env, maybe, status) \ +#define CHECK_MAYBE_NOTHING_WITH_PREAMBLE(env, maybe, status) \ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE((env), !((maybe).IsNothing()), (status)) -#define CHECK_TO_NUMBER(env, context, result, src) \ +#define CHECK_TO_NUMBER(env, context, result, src) \ CHECK_TO_TYPE((env), Number, (context), (result), (src), napi_number_expected) // n-api defines NAPI_AUTO_LENGTH as the indicator that a string // is null terminated. For V8 the equivalent is -1. The assert // validates that our cast of NAPI_AUTO_LENGTH results in -1 as // needed by V8. -#define CHECK_NEW_FROM_UTF8_LEN(env, result, str, len) \ - do { \ - static_assert(static_cast(NAPI_AUTO_LENGTH) == -1, \ - "Casting NAPI_AUTO_LENGTH to int must result in -1"); \ - RETURN_STATUS_IF_FALSE((env), \ - (len == NAPI_AUTO_LENGTH) || len <= INT_MAX, \ - napi_invalid_arg); \ - RETURN_STATUS_IF_FALSE((env), \ - (str) != nullptr, \ - napi_invalid_arg); \ - auto str_maybe = v8::String::NewFromUtf8( \ - (env)->isolate, (str), v8::NewStringType::kInternalized, \ - static_cast(len)); \ - CHECK_MAYBE_EMPTY((env), str_maybe, napi_generic_failure); \ - (result) = str_maybe.ToLocalChecked(); \ +#define CHECK_NEW_FROM_UTF8_LEN(env, result, str, len) \ + do { \ + static_assert(static_cast(NAPI_AUTO_LENGTH) == -1, \ + "Casting NAPI_AUTO_LENGTH to int must result in -1"); \ + RETURN_STATUS_IF_FALSE( \ + (env), (len == NAPI_AUTO_LENGTH) || len <= INT_MAX, napi_invalid_arg); \ + RETURN_STATUS_IF_FALSE((env), (str) != nullptr, napi_invalid_arg); \ + auto str_maybe = v8::String::NewFromUtf8((env)->isolate, \ + (str), \ + v8::NewStringType::kInternalized, \ + static_cast(len)); \ + CHECK_MAYBE_EMPTY((env), str_maybe, napi_generic_failure); \ + (result) = str_maybe.ToLocalChecked(); \ } while (0) -#define CHECK_NEW_FROM_UTF8(env, result, str) \ +#define CHECK_NEW_FROM_UTF8(env, result, str) \ CHECK_NEW_FROM_UTF8_LEN((env), (result), (str), NAPI_AUTO_LENGTH) #define CREATE_TYPED_ARRAY( \ @@ -45,12 +43,15 @@ do { \ if ((size_of_element) > 1) { \ THROW_RANGE_ERROR_IF_FALSE( \ - (env), (byte_offset) % (size_of_element) == 0, \ + (env), \ + (byte_offset) % (size_of_element) == 0, \ "ERR_NAPI_INVALID_TYPEDARRAY_ALIGNMENT", \ - "start offset of "#type" should be a multiple of "#size_of_element); \ + "start offset of " #type \ + " should be a multiple of " #size_of_element); \ } \ - THROW_RANGE_ERROR_IF_FALSE((env), (length) * (size_of_element) + \ - (byte_offset) <= buffer->ByteLength(), \ + THROW_RANGE_ERROR_IF_FALSE( \ + (env), \ + (length) * (size_of_element) + (byte_offset) <= buffer->ByteLength(), \ "ERR_NAPI_INVALID_TYPEDARRAY_LENGTH", \ "Invalid typed array length"); \ (out) = v8::type::New((buffer), (byte_offset), (length)); \ @@ -60,15 +61,15 @@ namespace v8impl { namespace { -inline static napi_status -V8NameFromPropertyDescriptor(napi_env env, - const napi_property_descriptor* p, - v8::Local* result) { +inline napi_status V8NameFromPropertyDescriptor( + napi_env env, + const napi_property_descriptor* p, + v8::Local* result) { if (p->utf8name != nullptr) { CHECK_NEW_FROM_UTF8(env, *result, p->utf8name); } else { v8::Local property_value = - v8impl::V8LocalValueFromJsValue(p->name); + v8impl::V8LocalValueFromJsValue(p->name); RETURN_STATUS_IF_FALSE(env, property_value->IsName(), napi_name_expected); *result = property_value.As(); @@ -78,14 +79,14 @@ V8NameFromPropertyDescriptor(napi_env env, } // convert from n-api property attributes to v8::PropertyAttribute -inline static v8::PropertyAttribute V8PropertyAttributesFromDescriptor( +inline v8::PropertyAttribute V8PropertyAttributesFromDescriptor( const napi_property_descriptor* descriptor) { unsigned int attribute_flags = v8::PropertyAttribute::None; // The napi_writable attribute is ignored for accessor descriptors, but // V8 would throw `TypeError`s on assignment with nonexistence of a setter. if ((descriptor->getter == nullptr && descriptor->setter == nullptr) && - (descriptor->attributes & napi_writable) == 0) { + (descriptor->attributes & napi_writable) == 0) { attribute_flags |= v8::PropertyAttribute::ReadOnly; } @@ -99,13 +100,13 @@ inline static v8::PropertyAttribute V8PropertyAttributesFromDescriptor( return static_cast(attribute_flags); } -inline static napi_deferred -JsDeferredFromNodePersistent(v8impl::Persistent* local) { +inline napi_deferred JsDeferredFromNodePersistent( + v8impl::Persistent* local) { return reinterpret_cast(local); } -inline static v8impl::Persistent* -NodePersistentFromJsDeferred(napi_deferred local) { +inline v8impl::Persistent* NodePersistentFromJsDeferred( + napi_deferred local) { return reinterpret_cast*>(local); } @@ -126,9 +127,7 @@ class EscapableHandleScopeWrapper { public: explicit EscapableHandleScopeWrapper(v8::Isolate* isolate) : scope(isolate), escape_called_(false) {} - bool escape_called() const { - return escape_called_; - } + bool escape_called() const { return escape_called_; } template v8::Local Escape(v8::Local handle) { escape_called_ = true; @@ -140,32 +139,30 @@ class EscapableHandleScopeWrapper { bool escape_called_; }; -inline static napi_handle_scope -JsHandleScopeFromV8HandleScope(HandleScopeWrapper* s) { +inline napi_handle_scope JsHandleScopeFromV8HandleScope(HandleScopeWrapper* s) { return reinterpret_cast(s); } -inline static HandleScopeWrapper* -V8HandleScopeFromJsHandleScope(napi_handle_scope s) { +inline HandleScopeWrapper* V8HandleScopeFromJsHandleScope(napi_handle_scope s) { return reinterpret_cast(s); } -inline static napi_escapable_handle_scope +inline napi_escapable_handle_scope JsEscapableHandleScopeFromV8EscapableHandleScope( EscapableHandleScopeWrapper* s) { return reinterpret_cast(s); } -inline static EscapableHandleScopeWrapper* +inline EscapableHandleScopeWrapper* V8EscapableHandleScopeFromJsEscapableHandleScope( napi_escapable_handle_scope s) { return reinterpret_cast(s); } -inline static napi_status ConcludeDeferred(napi_env env, - napi_deferred deferred, - napi_value result, - bool is_resolved) { +inline napi_status ConcludeDeferred(napi_env env, + napi_deferred deferred, + napi_value result, + bool is_resolved) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -177,9 +174,11 @@ inline static napi_status ConcludeDeferred(napi_env env, auto v8_resolver = v8_deferred.As(); - v8::Maybe success = is_resolved ? - v8_resolver->Resolve(context, v8impl::V8LocalValueFromJsValue(result)) : - v8_resolver->Reject(context, v8impl::V8LocalValueFromJsValue(result)); + v8::Maybe success = + is_resolved ? v8_resolver->Resolve( + context, v8impl::V8LocalValueFromJsValue(result)) + : v8_resolver->Reject( + context, v8impl::V8LocalValueFromJsValue(result)); delete deferred_ref; @@ -188,15 +187,12 @@ inline static napi_status ConcludeDeferred(napi_env env, return GET_RETURN_STATUS(env); } -enum UnwrapAction { - KeepWrap, - RemoveWrap -}; +enum UnwrapAction { KeepWrap, RemoveWrap }; -inline static napi_status Unwrap(napi_env env, - napi_value js_object, - void** result, - UnwrapAction action) { +inline napi_status Unwrap(napi_env env, + napi_value js_object, + void** result, + UnwrapAction action) { NAPI_PREAMBLE(env); CHECK_ARG(env, js_object); if (action == KeepWrap) { @@ -210,7 +206,7 @@ inline static napi_status Unwrap(napi_env env, v8::Local obj = value.As(); auto val = obj->GetPrivate(context, NAPI_PRIVATE_KEY(context, wrapper)) - .ToLocalChecked(); + .ToLocalChecked(); RETURN_STATUS_IF_FALSE(env, val->IsExternal(), napi_invalid_arg); Reference* reference = static_cast(val.As()->Value()); @@ -221,7 +217,7 @@ inline static napi_status Unwrap(napi_env env, if (action == RemoveWrap) { CHECK(obj->DeletePrivate(context, NAPI_PRIVATE_KEY(context, wrapper)) - .FromJust()); + .FromJust()); Reference::Delete(reference); } @@ -240,8 +236,9 @@ class CallbackBundle { public: // Creates an object to be made available to the static function callback // wrapper, used to retrieve the native callback function and data pointer. - static inline v8::Local - New(napi_env env, napi_callback cb, void* data) { + static inline v8::Local New(napi_env env, + napi_callback cb, + void* data) { CallbackBundle* bundle = new CallbackBundle(); bundle->cb = cb; bundle->cb_data = data; @@ -251,9 +248,10 @@ class CallbackBundle { Reference::New(env, cbdata, 0, true, Delete, bundle, nullptr); return cbdata; } - napi_env env; // Necessary to invoke C++ NAPI callback - void* cb_data; // The user provided callback data - napi_callback cb; + napi_env env; // Necessary to invoke C++ NAPI callback + void* cb_data; // The user provided callback data + napi_callback cb; + private: static void Delete(napi_env env, void* data, void* hint) { CallbackBundle* bundle = static_cast(data); @@ -288,9 +286,8 @@ class CallbackWrapperBase : public CallbackWrapper { public: inline CallbackWrapperBase(const v8::FunctionCallbackInfo& cbinfo, const size_t args_length) - : CallbackWrapper(JsValueFromV8LocalValue(cbinfo.This()), - args_length, - nullptr), + : CallbackWrapper( + JsValueFromV8LocalValue(cbinfo.This()), args_length, nullptr), _cbinfo(cbinfo) { _bundle = reinterpret_cast( cbinfo.Data().As()->Value()); @@ -308,12 +305,11 @@ class CallbackWrapperBase : public CallbackWrapper { napi_value result = nullptr; bool exceptionOccurred = false; - env->CallIntoModule([&](napi_env env) { - result = cb(env, cbinfo_wrapper); - }, [&](napi_env env, v8::Local value) { - exceptionOccurred = true; - env->isolate->ThrowException(value); - }); + env->CallIntoModule([&](napi_env env) { result = cb(env, cbinfo_wrapper); }, + [&](napi_env env, v8::Local value) { + exceptionOccurred = true; + env->isolate->ThrowException(value); + }); if (!exceptionOccurred && (result != nullptr)) { this->SetReturnValue(result); @@ -324,8 +320,7 @@ class CallbackWrapperBase : public CallbackWrapper { CallbackBundle* _bundle; }; -class FunctionCallbackWrapper - : public CallbackWrapperBase { +class FunctionCallbackWrapper : public CallbackWrapperBase { public: static void Invoke(const v8::FunctionCallbackInfo& info) { FunctionCallbackWrapper cbwrapper(info); @@ -347,11 +342,12 @@ class FunctionCallbackWrapper return napi_clear_last_error(env); } - static inline napi_status NewTemplate(napi_env env, - napi_callback cb, - void* cb_data, - v8::Local* result, - v8::Local sig = v8::Local()) { + static inline napi_status NewTemplate( + napi_env env, + napi_callback cb, + void* cb_data, + v8::Local* result, + v8::Local sig = v8::Local()) { v8::Local cbdata = v8impl::CallbackBundle::New(env, cb, cb_data); RETURN_STATUS_IF_FALSE(env, !cbdata.IsEmpty(), napi_generic_failure); @@ -396,10 +392,7 @@ class FunctionCallbackWrapper } }; -enum WrapType { - retrievable, - anonymous -}; +enum WrapType { retrievable, anonymous }; template inline napi_status Wrap(napi_env env, @@ -419,9 +412,10 @@ inline napi_status Wrap(napi_env env, if (wrap_type == retrievable) { // If we've already wrapped this object, we error out. - RETURN_STATUS_IF_FALSE(env, + RETURN_STATUS_IF_FALSE( + env, !obj->HasPrivate(context, NAPI_PRIVATE_KEY(context, wrapper)) - .FromJust(), + .FromJust(), napi_invalid_arg); } else if (wrap_type == anonymous) { // If no finalize callback is provided, we error out. @@ -440,13 +434,21 @@ inline napi_status Wrap(napi_env env, *result = reinterpret_cast(reference); } else { // Create a self-deleting reference. - reference = v8impl::Reference::New(env, obj, 0, true, finalize_cb, - native_object, finalize_cb == nullptr ? nullptr : finalize_hint); + reference = v8impl::Reference::New( + env, + obj, + 0, + true, + finalize_cb, + native_object, + finalize_cb == nullptr ? nullptr : finalize_hint); } if (wrap_type == retrievable) { - CHECK(obj->SetPrivate(context, NAPI_PRIVATE_KEY(context, wrapper), - v8::External::New(env->isolate, reference)).FromJust()); + CHECK(obj->SetPrivate(context, + NAPI_PRIVATE_KEY(context, wrapper), + v8::External::New(env->isolate, reference)) + .FromJust()); } return GET_RETURN_STATUS(env); @@ -721,33 +723,34 @@ void Reference::SecondPassCallback( } // end of namespace v8impl // Warning: Keep in-sync with napi_status enum -static -const char* error_messages[] = {nullptr, - "Invalid argument", - "An object was expected", - "A string was expected", - "A string or symbol was expected", - "A function was expected", - "A number was expected", - "A boolean was expected", - "An array was expected", - "Unknown failure", - "An exception is pending", - "The async work item was cancelled", - "napi_escape_handle already called on scope", - "Invalid handle scope usage", - "Invalid callback scope usage", - "Thread-safe function queue is full", - "Thread-safe function handle is closing", - "A bigint was expected", - "A date was expected", - "An arraybuffer was expected", - "A detachable arraybuffer was expected", - "Main thread would deadlock", +static const char* error_messages[] = { + nullptr, + "Invalid argument", + "An object was expected", + "A string was expected", + "A string or symbol was expected", + "A function was expected", + "A number was expected", + "A boolean was expected", + "An array was expected", + "Unknown failure", + "An exception is pending", + "The async work item was cancelled", + "napi_escape_handle already called on scope", + "Invalid handle scope usage", + "Invalid callback scope usage", + "Thread-safe function queue is full", + "Thread-safe function handle is closing", + "A bigint was expected", + "A date was expected", + "An arraybuffer was expected", + "A detachable arraybuffer was expected", + "Main thread would deadlock", + "External buffers are not allowed", }; -napi_status napi_get_last_error_info(napi_env env, - const napi_extended_error_info** result) { +napi_status NAPI_CDECL napi_get_last_error_info( + napi_env env, const napi_extended_error_info** result) { CHECK_ENV(env); CHECK_ARG(env, result); @@ -755,30 +758,28 @@ napi_status napi_get_last_error_info(napi_env env, // message in the `napi_status` enum each time a new error message is added. // We don't have a napi_status_last as this would result in an ABI // change each time a message was added. - const int last_status = napi_would_deadlock; + const int last_status = napi_no_external_buffers_allowed; - static_assert( - NAPI_ARRAYSIZE(error_messages) == last_status + 1, - "Count of error messages must match count of error values"); + static_assert(NAPI_ARRAYSIZE(error_messages) == last_status + 1, + "Count of error messages must match count of error values"); CHECK_LE(env->last_error.error_code, last_status); // Wait until someone requests the last error information to fetch the error // message string - env->last_error.error_message = - error_messages[env->last_error.error_code]; + env->last_error.error_message = error_messages[env->last_error.error_code]; if (env->last_error.error_code == napi_ok) { - napi_clear_last_error(env); + napi_clear_last_error(env); } *result = &(env->last_error); return napi_ok; } -napi_status napi_create_function(napi_env env, - const char* utf8name, - size_t length, - napi_callback cb, - void* callback_data, - napi_value* result) { +napi_status NAPI_CDECL napi_create_function(napi_env env, + const char* utf8name, + size_t length, + napi_callback cb, + void* callback_data, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); CHECK_ARG(env, cb); @@ -801,14 +802,15 @@ napi_status napi_create_function(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_define_class(napi_env env, - const char* utf8name, - size_t length, - napi_callback constructor, - void* callback_data, - size_t property_count, - const napi_property_descriptor* properties, - napi_value* result) { +napi_status NAPI_CDECL +napi_define_class(napi_env env, + const char* utf8name, + size_t length, + napi_callback constructor, + void* callback_data, + size_t property_count, + const napi_property_descriptor* properties, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); CHECK_ARG(env, constructor); @@ -860,12 +862,11 @@ napi_status napi_define_class(napi_env env, env, p->setter, p->data, &setter_tpl)); } - tpl->PrototypeTemplate()->SetAccessorProperty( - property_name, - getter_tpl, - setter_tpl, - attributes, - v8::AccessControl::DEFAULT); + tpl->PrototypeTemplate()->SetAccessorProperty(property_name, + getter_tpl, + setter_tpl, + attributes, + v8::AccessControl::DEFAULT); } else if (p->method != nullptr) { v8::Local t; STATUS_CALL(v8impl::FunctionCallbackWrapper::NewTemplate( @@ -893,34 +894,32 @@ napi_status napi_define_class(napi_env env, } } - STATUS_CALL(napi_define_properties(env, - *result, - static_descriptors.size(), - static_descriptors.data())); + STATUS_CALL(napi_define_properties( + env, *result, static_descriptors.size(), static_descriptors.data())); } return GET_RETURN_STATUS(env); } -napi_status napi_get_property_names(napi_env env, - napi_value object, - napi_value* result) { +napi_status NAPI_CDECL napi_get_property_names(napi_env env, + napi_value object, + napi_value* result) { return napi_get_all_property_names( env, object, napi_key_include_prototypes, - static_cast(napi_key_enumerable | - napi_key_skip_symbols), + static_cast(napi_key_enumerable | napi_key_skip_symbols), napi_key_numbers_to_strings, result); } -napi_status napi_get_all_property_names(napi_env env, - napi_value object, - napi_key_collection_mode key_mode, - napi_key_filter key_filter, - napi_key_conversion key_conversion, - napi_value* result) { +napi_status NAPI_CDECL +napi_get_all_property_names(napi_env env, + napi_value object, + napi_key_collection_mode key_mode, + napi_key_filter key_filter, + napi_key_conversion key_conversion, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -930,29 +929,24 @@ napi_status napi_get_all_property_names(napi_env env, v8::PropertyFilter filter = v8::PropertyFilter::ALL_PROPERTIES; if (key_filter & napi_key_writable) { - filter = - static_cast(filter | - v8::PropertyFilter::ONLY_WRITABLE); + filter = static_cast(filter | + v8::PropertyFilter::ONLY_WRITABLE); } if (key_filter & napi_key_enumerable) { - filter = - static_cast(filter | - v8::PropertyFilter::ONLY_ENUMERABLE); + filter = static_cast( + filter | v8::PropertyFilter::ONLY_ENUMERABLE); } if (key_filter & napi_key_configurable) { - filter = - static_cast(filter | - v8::PropertyFilter::ONLY_WRITABLE); + filter = static_cast( + filter | v8::PropertyFilter::ONLY_CONFIGURABLE); } if (key_filter & napi_key_skip_strings) { - filter = - static_cast(filter | - v8::PropertyFilter::SKIP_STRINGS); + filter = static_cast(filter | + v8::PropertyFilter::SKIP_STRINGS); } if (key_filter & napi_key_skip_symbols) { - filter = - static_cast(filter | - v8::PropertyFilter::SKIP_SYMBOLS); + filter = static_cast(filter | + v8::PropertyFilter::SKIP_SYMBOLS); } v8::KeyCollectionMode collection_mode; v8::KeyConversionMode conversion_mode; @@ -994,10 +988,10 @@ napi_status napi_get_all_property_names(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_set_property(napi_env env, - napi_value object, - napi_value key, - napi_value value) { +napi_status NAPI_CDECL napi_set_property(napi_env env, + napi_value object, + napi_value key, + napi_value value) { NAPI_PREAMBLE(env); CHECK_ARG(env, key); CHECK_ARG(env, value); @@ -1016,10 +1010,10 @@ napi_status napi_set_property(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_has_property(napi_env env, - napi_value object, - napi_value key, - bool* result) { +napi_status NAPI_CDECL napi_has_property(napi_env env, + napi_value object, + napi_value key, + bool* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); CHECK_ARG(env, key); @@ -1038,10 +1032,10 @@ napi_status napi_has_property(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_get_property(napi_env env, - napi_value object, - napi_value key, - napi_value* result) { +napi_status NAPI_CDECL napi_get_property(napi_env env, + napi_value object, + napi_value key, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, key); CHECK_ARG(env, result); @@ -1061,10 +1055,10 @@ napi_status napi_get_property(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_delete_property(napi_env env, - napi_value object, - napi_value key, - bool* result) { +napi_status NAPI_CDECL napi_delete_property(napi_env env, + napi_value object, + napi_value key, + bool* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, key); @@ -1076,16 +1070,15 @@ napi_status napi_delete_property(napi_env env, v8::Maybe delete_maybe = obj->Delete(context, k); CHECK_MAYBE_NOTHING(env, delete_maybe, napi_generic_failure); - if (result != nullptr) - *result = delete_maybe.FromMaybe(false); + if (result != nullptr) *result = delete_maybe.FromMaybe(false); return GET_RETURN_STATUS(env); } -napi_status napi_has_own_property(napi_env env, - napi_value object, - napi_value key, - bool* result) { +napi_status NAPI_CDECL napi_has_own_property(napi_env env, + napi_value object, + napi_value key, + bool* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, key); CHECK_ARG(env, result); @@ -1103,10 +1096,10 @@ napi_status napi_has_own_property(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_set_named_property(napi_env env, - napi_value object, - const char* utf8name, - napi_value value) { +napi_status NAPI_CDECL napi_set_named_property(napi_env env, + napi_value object, + const char* utf8name, + napi_value value) { NAPI_PREAMBLE(env); CHECK_ARG(env, value); @@ -1126,10 +1119,10 @@ napi_status napi_set_named_property(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_has_named_property(napi_env env, - napi_value object, - const char* utf8name, - bool* result) { +napi_status NAPI_CDECL napi_has_named_property(napi_env env, + napi_value object, + const char* utf8name, + bool* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -1149,10 +1142,10 @@ napi_status napi_has_named_property(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_get_named_property(napi_env env, - napi_value object, - const char* utf8name, - napi_value* result) { +napi_status NAPI_CDECL napi_get_named_property(napi_env env, + napi_value object, + const char* utf8name, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -1174,10 +1167,10 @@ napi_status napi_get_named_property(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_set_element(napi_env env, - napi_value object, - uint32_t index, - napi_value value) { +napi_status NAPI_CDECL napi_set_element(napi_env env, + napi_value object, + uint32_t index, + napi_value value) { NAPI_PREAMBLE(env); CHECK_ARG(env, value); @@ -1194,10 +1187,10 @@ napi_status napi_set_element(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_has_element(napi_env env, - napi_value object, - uint32_t index, - bool* result) { +napi_status NAPI_CDECL napi_has_element(napi_env env, + napi_value object, + uint32_t index, + bool* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -1214,10 +1207,10 @@ napi_status napi_has_element(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_get_element(napi_env env, - napi_value object, - uint32_t index, - napi_value* result) { +napi_status NAPI_CDECL napi_get_element(napi_env env, + napi_value object, + uint32_t index, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -1234,10 +1227,10 @@ napi_status napi_get_element(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_delete_element(napi_env env, - napi_value object, - uint32_t index, - bool* result) { +napi_status NAPI_CDECL napi_delete_element(napi_env env, + napi_value object, + uint32_t index, + bool* result) { NAPI_PREAMBLE(env); v8::Local context = env->context(); @@ -1247,16 +1240,16 @@ napi_status napi_delete_element(napi_env env, v8::Maybe delete_maybe = obj->Delete(context, index); CHECK_MAYBE_NOTHING(env, delete_maybe, napi_generic_failure); - if (result != nullptr) - *result = delete_maybe.FromMaybe(false); + if (result != nullptr) *result = delete_maybe.FromMaybe(false); return GET_RETURN_STATUS(env); } -napi_status napi_define_properties(napi_env env, - napi_value object, - size_t property_count, - const napi_property_descriptor* properties) { +napi_status NAPI_CDECL +napi_define_properties(napi_env env, + napi_value object, + size_t property_count, + const napi_property_descriptor* properties) { NAPI_PREAMBLE(env); if (property_count > 0) { CHECK_ARG(env, properties); @@ -1290,9 +1283,8 @@ napi_status napi_define_properties(napi_env env, descriptor.set_enumerable((p->attributes & napi_enumerable) != 0); descriptor.set_configurable((p->attributes & napi_configurable) != 0); - auto define_maybe = obj->DefineProperty(context, - property_name, - descriptor); + auto define_maybe = + obj->DefineProperty(context, property_name, descriptor); if (!define_maybe.FromMaybe(false)) { return napi_set_last_error(env, napi_invalid_arg); @@ -1306,9 +1298,8 @@ napi_status napi_define_properties(napi_env env, descriptor.set_enumerable((p->attributes & napi_enumerable) != 0); descriptor.set_configurable((p->attributes & napi_configurable) != 0); - auto define_maybe = obj->DefineProperty(context, - property_name, - descriptor); + auto define_maybe = + obj->DefineProperty(context, property_name, descriptor); if (!define_maybe.FromMaybe(false)) { return napi_set_last_error(env, napi_generic_failure); @@ -1333,8 +1324,7 @@ napi_status napi_define_properties(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_object_freeze(napi_env env, - napi_value object) { +napi_status NAPI_CDECL napi_object_freeze(napi_env env, napi_value object) { NAPI_PREAMBLE(env); v8::Local context = env->context(); @@ -1343,16 +1333,15 @@ napi_status napi_object_freeze(napi_env env, CHECK_TO_OBJECT(env, context, obj, object); v8::Maybe set_frozen = - obj->SetIntegrityLevel(context, v8::IntegrityLevel::kFrozen); + obj->SetIntegrityLevel(context, v8::IntegrityLevel::kFrozen); - RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, - set_frozen.FromMaybe(false), napi_generic_failure); + RETURN_STATUS_IF_FALSE_WITH_PREAMBLE( + env, set_frozen.FromMaybe(false), napi_generic_failure); return GET_RETURN_STATUS(env); } -napi_status napi_object_seal(napi_env env, - napi_value object) { +napi_status NAPI_CDECL napi_object_seal(napi_env env, napi_value object) { NAPI_PREAMBLE(env); v8::Local context = env->context(); @@ -1361,15 +1350,17 @@ napi_status napi_object_seal(napi_env env, CHECK_TO_OBJECT(env, context, obj, object); v8::Maybe set_sealed = - obj->SetIntegrityLevel(context, v8::IntegrityLevel::kSealed); + obj->SetIntegrityLevel(context, v8::IntegrityLevel::kSealed); - RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, - set_sealed.FromMaybe(false), napi_generic_failure); + RETURN_STATUS_IF_FALSE_WITH_PREAMBLE( + env, set_sealed.FromMaybe(false), napi_generic_failure); return GET_RETURN_STATUS(env); } -napi_status napi_is_array(napi_env env, napi_value value, bool* result) { +napi_status NAPI_CDECL napi_is_array(napi_env env, + napi_value value, + bool* result) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, result); @@ -1380,9 +1371,9 @@ napi_status napi_is_array(napi_env env, napi_value value, bool* result) { return napi_clear_last_error(env); } -napi_status napi_get_array_length(napi_env env, - napi_value value, - uint32_t* result) { +napi_status NAPI_CDECL napi_get_array_length(napi_env env, + napi_value value, + uint32_t* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, value); CHECK_ARG(env, result); @@ -1396,10 +1387,10 @@ napi_status napi_get_array_length(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_strict_equals(napi_env env, - napi_value lhs, - napi_value rhs, - bool* result) { +napi_status NAPI_CDECL napi_strict_equals(napi_env env, + napi_value lhs, + napi_value rhs, + bool* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, lhs); CHECK_ARG(env, rhs); @@ -1412,9 +1403,9 @@ napi_status napi_strict_equals(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_get_prototype(napi_env env, - napi_value object, - napi_value* result) { +napi_status NAPI_CDECL napi_get_prototype(napi_env env, + napi_value object, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -1428,49 +1419,45 @@ napi_status napi_get_prototype(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_create_object(napi_env env, napi_value* result) { +napi_status NAPI_CDECL napi_create_object(napi_env env, napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); - *result = v8impl::JsValueFromV8LocalValue( - v8::Object::New(env->isolate)); + *result = v8impl::JsValueFromV8LocalValue(v8::Object::New(env->isolate)); return napi_clear_last_error(env); } -napi_status napi_create_array(napi_env env, napi_value* result) { +napi_status NAPI_CDECL napi_create_array(napi_env env, napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); - *result = v8impl::JsValueFromV8LocalValue( - v8::Array::New(env->isolate)); + *result = v8impl::JsValueFromV8LocalValue(v8::Array::New(env->isolate)); return napi_clear_last_error(env); } -napi_status napi_create_array_with_length(napi_env env, - size_t length, - napi_value* result) { +napi_status NAPI_CDECL napi_create_array_with_length(napi_env env, + size_t length, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); - *result = v8impl::JsValueFromV8LocalValue( - v8::Array::New(env->isolate, length)); + *result = + v8impl::JsValueFromV8LocalValue(v8::Array::New(env->isolate, length)); return napi_clear_last_error(env); } -napi_status napi_create_string_latin1(napi_env env, - const char* str, - size_t length, - napi_value* result) { +napi_status NAPI_CDECL napi_create_string_latin1(napi_env env, + const char* str, + size_t length, + napi_value* result) { CHECK_ENV(env); - if (length > 0) - CHECK_ARG(env, str); + if (length > 0) CHECK_ARG(env, str); CHECK_ARG(env, result); - RETURN_STATUS_IF_FALSE(env, - (length == NAPI_AUTO_LENGTH) || length <= INT_MAX, - napi_invalid_arg); + RETURN_STATUS_IF_FALSE( + env, (length == NAPI_AUTO_LENGTH) || length <= INT_MAX, napi_invalid_arg); auto isolate = env->isolate; auto str_maybe = @@ -1484,40 +1471,33 @@ napi_status napi_create_string_latin1(napi_env env, return napi_clear_last_error(env); } -napi_status napi_create_string_utf8(napi_env env, - const char* str, - size_t length, - napi_value* result) { +napi_status NAPI_CDECL napi_create_string_utf8(napi_env env, + const char* str, + size_t length, + napi_value* result) { CHECK_ENV(env); - if (length > 0) - CHECK_ARG(env, str); + if (length > 0) CHECK_ARG(env, str); CHECK_ARG(env, result); - RETURN_STATUS_IF_FALSE(env, - (length == NAPI_AUTO_LENGTH) || length <= INT_MAX, - napi_invalid_arg); + RETURN_STATUS_IF_FALSE( + env, (length == NAPI_AUTO_LENGTH) || length <= INT_MAX, napi_invalid_arg); auto isolate = env->isolate; - auto str_maybe = - v8::String::NewFromUtf8(isolate, - str, - v8::NewStringType::kNormal, - static_cast(length)); + auto str_maybe = v8::String::NewFromUtf8( + isolate, str, v8::NewStringType::kNormal, static_cast(length)); CHECK_MAYBE_EMPTY(env, str_maybe, napi_generic_failure); *result = v8impl::JsValueFromV8LocalValue(str_maybe.ToLocalChecked()); return napi_clear_last_error(env); } -napi_status napi_create_string_utf16(napi_env env, - const char16_t* str, - size_t length, - napi_value* result) { +napi_status NAPI_CDECL napi_create_string_utf16(napi_env env, + const char16_t* str, + size_t length, + napi_value* result) { CHECK_ENV(env); - if (length > 0) - CHECK_ARG(env, str); + if (length > 0) CHECK_ARG(env, str); CHECK_ARG(env, result); - RETURN_STATUS_IF_FALSE(env, - (length == NAPI_AUTO_LENGTH) || length <= INT_MAX, - napi_invalid_arg); + RETURN_STATUS_IF_FALSE( + env, (length == NAPI_AUTO_LENGTH) || length <= INT_MAX, napi_invalid_arg); auto isolate = env->isolate; auto str_maybe = @@ -1531,33 +1511,33 @@ napi_status napi_create_string_utf16(napi_env env, return napi_clear_last_error(env); } -napi_status napi_create_double(napi_env env, - double value, - napi_value* result) { +napi_status NAPI_CDECL napi_create_double(napi_env env, + double value, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); - *result = v8impl::JsValueFromV8LocalValue( - v8::Number::New(env->isolate, value)); + *result = + v8impl::JsValueFromV8LocalValue(v8::Number::New(env->isolate, value)); return napi_clear_last_error(env); } -napi_status napi_create_int32(napi_env env, - int32_t value, - napi_value* result) { +napi_status NAPI_CDECL napi_create_int32(napi_env env, + int32_t value, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); - *result = v8impl::JsValueFromV8LocalValue( - v8::Integer::New(env->isolate, value)); + *result = + v8impl::JsValueFromV8LocalValue(v8::Integer::New(env->isolate, value)); return napi_clear_last_error(env); } -napi_status napi_create_uint32(napi_env env, - uint32_t value, - napi_value* result) { +napi_status NAPI_CDECL napi_create_uint32(napi_env env, + uint32_t value, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); @@ -1567,9 +1547,9 @@ napi_status napi_create_uint32(napi_env env, return napi_clear_last_error(env); } -napi_status napi_create_int64(napi_env env, - int64_t value, - napi_value* result) { +napi_status NAPI_CDECL napi_create_int64(napi_env env, + int64_t value, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); @@ -1579,21 +1559,21 @@ napi_status napi_create_int64(napi_env env, return napi_clear_last_error(env); } -napi_status napi_create_bigint_int64(napi_env env, - int64_t value, - napi_value* result) { +napi_status NAPI_CDECL napi_create_bigint_int64(napi_env env, + int64_t value, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); - *result = v8impl::JsValueFromV8LocalValue( - v8::BigInt::New(env->isolate, value)); + *result = + v8impl::JsValueFromV8LocalValue(v8::BigInt::New(env->isolate, value)); return napi_clear_last_error(env); } -napi_status napi_create_bigint_uint64(napi_env env, - uint64_t value, - napi_value* result) { +napi_status NAPI_CDECL napi_create_bigint_uint64(napi_env env, + uint64_t value, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); @@ -1603,22 +1583,21 @@ napi_status napi_create_bigint_uint64(napi_env env, return napi_clear_last_error(env); } -napi_status napi_create_bigint_words(napi_env env, - int sign_bit, - size_t word_count, - const uint64_t* words, - napi_value* result) { +napi_status NAPI_CDECL napi_create_bigint_words(napi_env env, + int sign_bit, + size_t word_count, + const uint64_t* words, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, words); CHECK_ARG(env, result); v8::Local context = env->context(); - RETURN_STATUS_IF_FALSE( - env, word_count <= INT_MAX, napi_invalid_arg); + RETURN_STATUS_IF_FALSE(env, word_count <= INT_MAX, napi_invalid_arg); - v8::MaybeLocal b = v8::BigInt::NewFromWords( - context, sign_bit, word_count, words); + v8::MaybeLocal b = + v8::BigInt::NewFromWords(context, sign_bit, word_count, words); CHECK_MAYBE_EMPTY_WITH_PREAMBLE(env, b, napi_generic_failure); @@ -1626,7 +1605,9 @@ napi_status napi_create_bigint_words(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_get_boolean(napi_env env, bool value, napi_value* result) { +napi_status NAPI_CDECL napi_get_boolean(napi_env env, + bool value, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); @@ -1641,9 +1622,9 @@ napi_status napi_get_boolean(napi_env env, bool value, napi_value* result) { return napi_clear_last_error(env); } -napi_status napi_create_symbol(napi_env env, - napi_value description, - napi_value* result) { +napi_status NAPI_CDECL napi_create_symbol(napi_env env, + napi_value description, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); @@ -1656,29 +1637,27 @@ napi_status napi_create_symbol(napi_env env, RETURN_STATUS_IF_FALSE(env, desc->IsString(), napi_string_expected); *result = v8impl::JsValueFromV8LocalValue( - v8::Symbol::New(isolate, desc.As())); + v8::Symbol::New(isolate, desc.As())); } return napi_clear_last_error(env); } -napi_status node_api_symbol_for(napi_env env, - const char* utf8description, - size_t length, - napi_value* result) { +napi_status NAPI_CDECL node_api_symbol_for(napi_env env, + const char* utf8description, + size_t length, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); napi_value js_description_string; - STATUS_CALL(napi_create_string_utf8(env, - utf8description, - length, - &js_description_string)); + STATUS_CALL(napi_create_string_utf8( + env, utf8description, length, &js_description_string)); v8::Local description_string = - v8impl::V8LocalValueFromJsValue(js_description_string).As(); + v8impl::V8LocalValueFromJsValue(js_description_string).As(); *result = v8impl::JsValueFromV8LocalValue( - v8::Symbol::For(env->isolate, description_string)); + v8::Symbol::For(env->isolate, description_string)); return napi_clear_last_error(env); } @@ -1703,17 +1682,16 @@ static inline napi_status set_error_code(napi_env env, CHECK_NEW_FROM_UTF8(env, code_key, "code"); v8::Maybe set_maybe = err_object->Set(context, code_key, code_value); - RETURN_STATUS_IF_FALSE(env, - set_maybe.FromMaybe(false), - napi_generic_failure); + RETURN_STATUS_IF_FALSE( + env, set_maybe.FromMaybe(false), napi_generic_failure); } return napi_ok; } -napi_status napi_create_error(napi_env env, - napi_value code, - napi_value msg, - napi_value* result) { +napi_status NAPI_CDECL napi_create_error(napi_env env, + napi_value code, + napi_value msg, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, msg); CHECK_ARG(env, result); @@ -1730,10 +1708,10 @@ napi_status napi_create_error(napi_env env, return napi_clear_last_error(env); } -napi_status napi_create_type_error(napi_env env, - napi_value code, - napi_value msg, - napi_value* result) { +napi_status NAPI_CDECL napi_create_type_error(napi_env env, + napi_value code, + napi_value msg, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, msg); CHECK_ARG(env, result); @@ -1750,10 +1728,10 @@ napi_status napi_create_type_error(napi_env env, return napi_clear_last_error(env); } -napi_status napi_create_range_error(napi_env env, - napi_value code, - napi_value msg, - napi_value* result) { +napi_status NAPI_CDECL napi_create_range_error(napi_env env, + napi_value code, + napi_value msg, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, msg); CHECK_ARG(env, result); @@ -1770,10 +1748,10 @@ napi_status napi_create_range_error(napi_env env, return napi_clear_last_error(env); } -napi_status node_api_create_syntax_error(napi_env env, - napi_value code, - napi_value msg, - napi_value* result) { +napi_status NAPI_CDECL node_api_create_syntax_error(napi_env env, + napi_value code, + napi_value msg, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, msg); CHECK_ARG(env, result); @@ -1790,9 +1768,9 @@ napi_status node_api_create_syntax_error(napi_env env, return napi_clear_last_error(env); } -napi_status napi_typeof(napi_env env, - napi_value value, - napi_valuetype* result) { +napi_status NAPI_CDECL napi_typeof(napi_env env, + napi_value value, + napi_valuetype* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -1833,28 +1811,26 @@ napi_status napi_typeof(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_undefined(napi_env env, napi_value* result) { +napi_status NAPI_CDECL napi_get_undefined(napi_env env, napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); - *result = v8impl::JsValueFromV8LocalValue( - v8::Undefined(env->isolate)); + *result = v8impl::JsValueFromV8LocalValue(v8::Undefined(env->isolate)); return napi_clear_last_error(env); } -napi_status napi_get_null(napi_env env, napi_value* result) { +napi_status NAPI_CDECL napi_get_null(napi_env env, napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); - *result = v8impl::JsValueFromV8LocalValue( - v8::Null(env->isolate)); + *result = v8impl::JsValueFromV8LocalValue(v8::Null(env->isolate)); return napi_clear_last_error(env); } // Gets all callback info in a single call. (Ugly, but faster.) -napi_status napi_get_cb_info( +napi_status NAPI_CDECL napi_get_cb_info( napi_env env, // [in] NAPI environment handle napi_callback_info cbinfo, // [in] Opaque callback-info handle size_t* argc, // [in-out] Specifies the size of the provided argv array @@ -1885,9 +1861,9 @@ napi_status napi_get_cb_info( return napi_clear_last_error(env); } -napi_status napi_get_new_target(napi_env env, - napi_callback_info cbinfo, - napi_value* result) { +napi_status NAPI_CDECL napi_get_new_target(napi_env env, + napi_callback_info cbinfo, + napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, cbinfo); CHECK_ARG(env, result); @@ -1899,12 +1875,12 @@ napi_status napi_get_new_target(napi_env env, return napi_clear_last_error(env); } -napi_status napi_call_function(napi_env env, - napi_value recv, - napi_value func, - size_t argc, - const napi_value* argv, - napi_value* result) { +napi_status NAPI_CDECL napi_call_function(napi_env env, + napi_value recv, + napi_value func, + size_t argc, + const napi_value* argv, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, recv); if (argc > 0) { @@ -1918,8 +1894,11 @@ napi_status napi_call_function(napi_env env, v8::Local v8func; CHECK_TO_FUNCTION(env, v8func, func); - auto maybe = v8func->Call(context, v8recv, argc, - reinterpret_cast*>(const_cast(argv))); + auto maybe = v8func->Call( + context, + v8recv, + argc, + reinterpret_cast*>(const_cast(argv))); if (try_catch.HasCaught()) { return napi_set_last_error(env, napi_pending_exception); @@ -1932,7 +1911,7 @@ napi_status napi_call_function(napi_env env, } } -napi_status napi_get_global(napi_env env, napi_value* result) { +napi_status NAPI_CDECL napi_get_global(napi_env env, napi_value* result) { CHECK_ENV(env); CHECK_ARG(env, result); @@ -1941,7 +1920,7 @@ napi_status napi_get_global(napi_env env, napi_value* result) { return napi_clear_last_error(env); } -napi_status napi_throw(napi_env env, napi_value error) { +napi_status NAPI_CDECL napi_throw(napi_env env, napi_value error) { NAPI_PREAMBLE(env); CHECK_ARG(env, error); @@ -1953,9 +1932,9 @@ napi_status napi_throw(napi_env env, napi_value error) { return napi_clear_last_error(env); } -napi_status napi_throw_error(napi_env env, - const char* code, - const char* msg) { +napi_status NAPI_CDECL napi_throw_error(napi_env env, + const char* code, + const char* msg) { NAPI_PREAMBLE(env); v8::Isolate* isolate = env->isolate; @@ -1971,9 +1950,9 @@ napi_status napi_throw_error(napi_env env, return napi_clear_last_error(env); } -napi_status napi_throw_type_error(napi_env env, - const char* code, - const char* msg) { +napi_status NAPI_CDECL napi_throw_type_error(napi_env env, + const char* code, + const char* msg) { NAPI_PREAMBLE(env); v8::Isolate* isolate = env->isolate; @@ -1989,9 +1968,9 @@ napi_status napi_throw_type_error(napi_env env, return napi_clear_last_error(env); } -napi_status napi_throw_range_error(napi_env env, - const char* code, - const char* msg) { +napi_status NAPI_CDECL napi_throw_range_error(napi_env env, + const char* code, + const char* msg) { NAPI_PREAMBLE(env); v8::Isolate* isolate = env->isolate; @@ -2007,9 +1986,9 @@ napi_status napi_throw_range_error(napi_env env, return napi_clear_last_error(env); } -napi_status node_api_throw_syntax_error(napi_env env, - const char* code, - const char* msg) { +napi_status NAPI_CDECL node_api_throw_syntax_error(napi_env env, + const char* code, + const char* msg) { NAPI_PREAMBLE(env); v8::Isolate* isolate = env->isolate; @@ -2025,7 +2004,9 @@ napi_status node_api_throw_syntax_error(napi_env env, return napi_clear_last_error(env); } -napi_status napi_is_error(napi_env env, napi_value value, bool* result) { +napi_status NAPI_CDECL napi_is_error(napi_env env, + napi_value value, + bool* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot // throw JS exceptions. CHECK_ENV(env); @@ -2038,9 +2019,9 @@ napi_status napi_is_error(napi_env env, napi_value value, bool* result) { return napi_clear_last_error(env); } -napi_status napi_get_value_double(napi_env env, - napi_value value, - double* result) { +napi_status NAPI_CDECL napi_get_value_double(napi_env env, + napi_value value, + double* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2055,9 +2036,9 @@ napi_status napi_get_value_double(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_value_int32(napi_env env, - napi_value value, - int32_t* result) { +napi_status NAPI_CDECL napi_get_value_int32(napi_env env, + napi_value value, + int32_t* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2079,9 +2060,9 @@ napi_status napi_get_value_int32(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_value_uint32(napi_env env, - napi_value value, - uint32_t* result) { +napi_status NAPI_CDECL napi_get_value_uint32(napi_env env, + napi_value value, + uint32_t* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2103,9 +2084,9 @@ napi_status napi_get_value_uint32(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_value_int64(napi_env env, - napi_value value, - int64_t* result) { +napi_status NAPI_CDECL napi_get_value_int64(napi_env env, + napi_value value, + int64_t* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2137,10 +2118,10 @@ napi_status napi_get_value_int64(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_value_bigint_int64(napi_env env, - napi_value value, - int64_t* result, - bool* lossless) { +napi_status NAPI_CDECL napi_get_value_bigint_int64(napi_env env, + napi_value value, + int64_t* result, + bool* lossless) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, result); @@ -2155,10 +2136,10 @@ napi_status napi_get_value_bigint_int64(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_value_bigint_uint64(napi_env env, - napi_value value, - uint64_t* result, - bool* lossless) { +napi_status NAPI_CDECL napi_get_value_bigint_uint64(napi_env env, + napi_value value, + uint64_t* result, + bool* lossless) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, result); @@ -2173,11 +2154,11 @@ napi_status napi_get_value_bigint_uint64(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_value_bigint_words(napi_env env, - napi_value value, - int* sign_bit, - size_t* word_count, - uint64_t* words) { +napi_status NAPI_CDECL napi_get_value_bigint_words(napi_env env, + napi_value value, + int* sign_bit, + size_t* word_count, + uint64_t* words) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, word_count); @@ -2203,7 +2184,9 @@ napi_status napi_get_value_bigint_words(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result) { +napi_status NAPI_CDECL napi_get_value_bool(napi_env env, + napi_value value, + bool* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2226,11 +2209,8 @@ napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result) { // If buf is NULL, this method returns the length of the string (in bytes) // via the result parameter. // The result argument is optional unless buf is NULL. -napi_status napi_get_value_string_latin1(napi_env env, - napi_value value, - char* buf, - size_t bufsize, - size_t* result) { +napi_status NAPI_CDECL napi_get_value_string_latin1( + napi_env env, napi_value value, char* buf, size_t bufsize, size_t* result) { CHECK_ENV(env); CHECK_ARG(env, value); @@ -2267,11 +2247,8 @@ napi_status napi_get_value_string_latin1(napi_env env, // If buf is NULL, this method returns the length of the string (in bytes) // via the result parameter. // The result argument is optional unless buf is NULL. -napi_status napi_get_value_string_utf8(napi_env env, - napi_value value, - char* buf, - size_t bufsize, - size_t* result) { +napi_status NAPI_CDECL napi_get_value_string_utf8( + napi_env env, napi_value value, char* buf, size_t bufsize, size_t* result) { CHECK_ENV(env); CHECK_ARG(env, value); @@ -2308,11 +2285,11 @@ napi_status napi_get_value_string_utf8(napi_env env, // If buf is NULL, this method returns the length of the string (in 2-byte // code units) via the result parameter. // The result argument is optional unless buf is NULL. -napi_status napi_get_value_string_utf16(napi_env env, - napi_value value, - char16_t* buf, - size_t bufsize, - size_t* result) { +napi_status NAPI_CDECL napi_get_value_string_utf16(napi_env env, + napi_value value, + char16_t* buf, + size_t bufsize, + size_t* result) { CHECK_ENV(env); CHECK_ARG(env, value); @@ -2341,35 +2318,34 @@ napi_status napi_get_value_string_utf16(napi_env env, return napi_clear_last_error(env); } -napi_status napi_coerce_to_bool(napi_env env, - napi_value value, - napi_value* result) { +napi_status NAPI_CDECL napi_coerce_to_bool(napi_env env, + napi_value value, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, value); CHECK_ARG(env, result); v8::Isolate* isolate = env->isolate; v8::Local b = - v8impl::V8LocalValueFromJsValue(value)->ToBoolean(isolate); + v8impl::V8LocalValueFromJsValue(value)->ToBoolean(isolate); *result = v8impl::JsValueFromV8LocalValue(b); return GET_RETURN_STATUS(env); } -#define GEN_COERCE_FUNCTION(UpperCaseName, MixedCaseName, LowerCaseName) \ - napi_status napi_coerce_to_##LowerCaseName(napi_env env, \ - napi_value value, \ - napi_value* result) { \ - NAPI_PREAMBLE(env); \ - CHECK_ARG(env, value); \ - CHECK_ARG(env, result); \ - \ - v8::Local context = env->context(); \ - v8::Local str; \ - \ - CHECK_TO_##UpperCaseName(env, context, str, value); \ - \ - *result = v8impl::JsValueFromV8LocalValue(str); \ - return GET_RETURN_STATUS(env); \ +#define GEN_COERCE_FUNCTION(UpperCaseName, MixedCaseName, LowerCaseName) \ + napi_status NAPI_CDECL napi_coerce_to_##LowerCaseName( \ + napi_env env, napi_value value, napi_value* result) { \ + NAPI_PREAMBLE(env); \ + CHECK_ARG(env, value); \ + CHECK_ARG(env, result); \ + \ + v8::Local context = env->context(); \ + v8::Local str; \ + \ + CHECK_TO_##UpperCaseName(env, context, str, value); \ + \ + *result = v8impl::JsValueFromV8LocalValue(str); \ + return GET_RETURN_STATUS(env); \ } GEN_COERCE_FUNCTION(NUMBER, Number, number) @@ -2378,33 +2354,33 @@ GEN_COERCE_FUNCTION(STRING, String, string) #undef GEN_COERCE_FUNCTION -napi_status napi_wrap(napi_env env, - napi_value js_object, - void* native_object, - napi_finalize finalize_cb, - void* finalize_hint, - napi_ref* result) { - return v8impl::Wrap(env, - js_object, - native_object, - finalize_cb, - finalize_hint, - result); -} - -napi_status napi_unwrap(napi_env env, napi_value obj, void** result) { +napi_status NAPI_CDECL napi_wrap(napi_env env, + napi_value js_object, + void* native_object, + napi_finalize finalize_cb, + void* finalize_hint, + napi_ref* result) { + return v8impl::Wrap( + env, js_object, native_object, finalize_cb, finalize_hint, result); +} + +napi_status NAPI_CDECL napi_unwrap(napi_env env, + napi_value obj, + void** result) { return v8impl::Unwrap(env, obj, result, v8impl::KeepWrap); } -napi_status napi_remove_wrap(napi_env env, napi_value obj, void** result) { +napi_status NAPI_CDECL napi_remove_wrap(napi_env env, + napi_value obj, + void** result) { return v8impl::Unwrap(env, obj, result, v8impl::RemoveWrap); } -napi_status napi_create_external(napi_env env, - void* data, - napi_finalize finalize_cb, - void* finalize_hint, - napi_value* result) { +napi_status NAPI_CDECL napi_create_external(napi_env env, + void* data, + napi_finalize finalize_cb, + void* finalize_hint, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -2414,22 +2390,17 @@ napi_status napi_create_external(napi_env env, // The Reference object will delete itself after invoking the finalizer // callback. - v8impl::Reference::New(env, - external_value, - 0, - true, - finalize_cb, - data, - finalize_hint); + v8impl::Reference::New( + env, external_value, 0, true, finalize_cb, data, finalize_hint); *result = v8impl::JsValueFromV8LocalValue(external_value); return napi_clear_last_error(env); } -NAPI_EXTERN napi_status napi_type_tag_object(napi_env env, - napi_value object, - const napi_type_tag* type_tag) { +napi_status NAPI_CDECL napi_type_tag_object(napi_env env, + napi_value object, + const napi_type_tag* type_tag) { NAPI_PREAMBLE(env); v8::Local context = env->context(); v8::Local obj; @@ -2439,30 +2410,25 @@ NAPI_EXTERN napi_status napi_type_tag_object(napi_env env, auto key = NAPI_PRIVATE_KEY(context, type_tag); auto maybe_has = obj->HasPrivate(context, key); CHECK_MAYBE_NOTHING_WITH_PREAMBLE(env, maybe_has, napi_generic_failure); - RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, - !maybe_has.FromJust(), - napi_invalid_arg); - - auto tag = v8::BigInt::NewFromWords(context, - 0, - 2, - reinterpret_cast(type_tag)); + RETURN_STATUS_IF_FALSE_WITH_PREAMBLE( + env, !maybe_has.FromJust(), napi_invalid_arg); + + auto tag = v8::BigInt::NewFromWords( + context, 0, 2, reinterpret_cast(type_tag)); CHECK_MAYBE_EMPTY_WITH_PREAMBLE(env, tag, napi_generic_failure); auto maybe_set = obj->SetPrivate(context, key, tag.ToLocalChecked()); CHECK_MAYBE_NOTHING_WITH_PREAMBLE(env, maybe_set, napi_generic_failure); - RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, - maybe_set.FromJust(), - napi_generic_failure); + RETURN_STATUS_IF_FALSE_WITH_PREAMBLE( + env, maybe_set.FromJust(), napi_generic_failure); return GET_RETURN_STATUS(env); } -NAPI_EXTERN napi_status -napi_check_object_type_tag(napi_env env, - napi_value object, - const napi_type_tag* type_tag, - bool* result) { +napi_status NAPI_CDECL napi_check_object_type_tag(napi_env env, + napi_value object, + const napi_type_tag* type_tag, + bool* result) { NAPI_PREAMBLE(env); v8::Local context = env->context(); v8::Local obj; @@ -2470,8 +2436,8 @@ napi_check_object_type_tag(napi_env env, CHECK_ARG_WITH_PREAMBLE(env, type_tag); CHECK_ARG_WITH_PREAMBLE(env, result); - auto maybe_value = obj->GetPrivate(context, - NAPI_PRIVATE_KEY(context, type_tag)); + auto maybe_value = + obj->GetPrivate(context, NAPI_PRIVATE_KEY(context, type_tag)); CHECK_MAYBE_EMPTY_WITH_PREAMBLE(env, maybe_value, napi_generic_failure); v8::Local val = maybe_value.ToLocalChecked(); @@ -2483,19 +2449,26 @@ napi_check_object_type_tag(napi_env env, int sign; int size = 2; napi_type_tag tag; - val.As()->ToWordsArray(&sign, - &size, - reinterpret_cast(&tag)); - if (size == 2 && sign == 0) - *result = (tag.lower == type_tag->lower && tag.upper == type_tag->upper); + val.As()->ToWordsArray( + &sign, &size, reinterpret_cast(&tag)); + if (sign == 0) { + if (size == 2) { + *result = + (tag.lower == type_tag->lower && tag.upper == type_tag->upper); + } else if (size == 1) { + *result = (tag.lower == type_tag->lower && 0 == type_tag->upper); + } else if (size == 0) { + *result = (0 == type_tag->lower && 0 == type_tag->upper); + } + } } return GET_RETURN_STATUS(env); } -napi_status napi_get_value_external(napi_env env, - napi_value value, - void** result) { +napi_status NAPI_CDECL napi_get_value_external(napi_env env, + napi_value value, + void** result) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, result); @@ -2510,10 +2483,10 @@ napi_status napi_get_value_external(napi_env env, } // Set initial_refcount to 0 for a weak reference, >0 for a strong reference. -napi_status napi_create_reference(napi_env env, - napi_value value, - uint32_t initial_refcount, - napi_ref* result) { +napi_status NAPI_CDECL napi_create_reference(napi_env env, + napi_value value, + uint32_t initial_refcount, + napi_ref* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2535,7 +2508,7 @@ napi_status napi_create_reference(napi_env env, // Deletes a reference. The referenced value is released, and may be GC'd unless // there are other references to it. -napi_status napi_delete_reference(napi_env env, napi_ref ref) { +napi_status NAPI_CDECL napi_delete_reference(napi_env env, napi_ref ref) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2551,7 +2524,9 @@ napi_status napi_delete_reference(napi_env env, napi_ref ref) { // refcount is >0, and the referenced object is effectively "pinned". // Calling this when the refcount is 0 and the object is unavailable // results in an error. -napi_status napi_reference_ref(napi_env env, napi_ref ref, uint32_t* result) { +napi_status NAPI_CDECL napi_reference_ref(napi_env env, + napi_ref ref, + uint32_t* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2571,7 +2546,9 @@ napi_status napi_reference_ref(napi_env env, napi_ref ref, uint32_t* result) { // the result is 0 the reference is now weak and the object may be GC'd at any // time if there are no other references. Calling this when the refcount is // already 0 results in an error. -napi_status napi_reference_unref(napi_env env, napi_ref ref, uint32_t* result) { +napi_status NAPI_CDECL napi_reference_unref(napi_env env, + napi_ref ref, + uint32_t* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2595,9 +2572,9 @@ napi_status napi_reference_unref(napi_env env, napi_ref ref, uint32_t* result) { // Attempts to get a referenced value. If the reference is weak, the value might // no longer be available, in that case the call is still successful but the // result is NULL. -napi_status napi_get_reference_value(napi_env env, - napi_ref ref, - napi_value* result) { +napi_status NAPI_CDECL napi_get_reference_value(napi_env env, + napi_ref ref, + napi_value* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2610,7 +2587,8 @@ napi_status napi_get_reference_value(napi_env env, return napi_clear_last_error(env); } -napi_status napi_open_handle_scope(napi_env env, napi_handle_scope* result) { +napi_status NAPI_CDECL napi_open_handle_scope(napi_env env, + napi_handle_scope* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2622,7 +2600,8 @@ napi_status napi_open_handle_scope(napi_env env, napi_handle_scope* result) { return napi_clear_last_error(env); } -napi_status napi_close_handle_scope(napi_env env, napi_handle_scope scope) { +napi_status NAPI_CDECL napi_close_handle_scope(napi_env env, + napi_handle_scope scope) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2636,9 +2615,8 @@ napi_status napi_close_handle_scope(napi_env env, napi_handle_scope scope) { return napi_clear_last_error(env); } -napi_status napi_open_escapable_handle_scope( - napi_env env, - napi_escapable_handle_scope* result) { +napi_status NAPI_CDECL napi_open_escapable_handle_scope( + napi_env env, napi_escapable_handle_scope* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2650,9 +2628,8 @@ napi_status napi_open_escapable_handle_scope( return napi_clear_last_error(env); } -napi_status napi_close_escapable_handle_scope( - napi_env env, - napi_escapable_handle_scope scope) { +napi_status NAPI_CDECL napi_close_escapable_handle_scope( + napi_env env, napi_escapable_handle_scope scope) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2666,10 +2643,10 @@ napi_status napi_close_escapable_handle_scope( return napi_clear_last_error(env); } -napi_status napi_escape_handle(napi_env env, - napi_escapable_handle_scope scope, - napi_value escapee, - napi_value* result) { +napi_status NAPI_CDECL napi_escape_handle(napi_env env, + napi_escapable_handle_scope scope, + napi_value escapee, + napi_value* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -2687,11 +2664,11 @@ napi_status napi_escape_handle(napi_env env, return napi_set_last_error(env, napi_escape_called_twice); } -napi_status napi_new_instance(napi_env env, - napi_value constructor, - size_t argc, - const napi_value* argv, - napi_value* result) { +napi_status NAPI_CDECL napi_new_instance(napi_env env, + napi_value constructor, + size_t argc, + const napi_value* argv, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, constructor); if (argc > 0) { @@ -2704,8 +2681,10 @@ napi_status napi_new_instance(napi_env env, v8::Local ctor; CHECK_TO_FUNCTION(env, ctor, constructor); - auto maybe = ctor->NewInstance(context, argc, - reinterpret_cast*>(const_cast(argv))); + auto maybe = ctor->NewInstance( + context, + argc, + reinterpret_cast*>(const_cast(argv))); CHECK_MAYBE_EMPTY(env, maybe, napi_pending_exception); @@ -2713,10 +2692,10 @@ napi_status napi_new_instance(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_instanceof(napi_env env, - napi_value object, - napi_value constructor, - bool* result) { +napi_status NAPI_CDECL napi_instanceof(napi_env env, + napi_value object, + napi_value constructor, + bool* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, object); CHECK_ARG(env, result); @@ -2729,9 +2708,8 @@ napi_status napi_instanceof(napi_env env, CHECK_TO_OBJECT(env, context, ctor, constructor); if (!ctor->IsFunction()) { - napi_throw_type_error(env, - "ERR_NAPI_CONS_FUNCTION", - "Constructor must be a function"); + napi_throw_type_error( + env, "ERR_NAPI_CONS_FUNCTION", "Constructor must be a function"); return napi_set_last_error(env, napi_function_expected); } @@ -2746,7 +2724,7 @@ napi_status napi_instanceof(napi_env env, } // Methods to support catching exceptions -napi_status napi_is_exception_pending(napi_env env, bool* result) { +napi_status NAPI_CDECL napi_is_exception_pending(napi_env env, bool* result) { // NAPI_PREAMBLE is not used here: this function must execute when there is a // pending exception. CHECK_ENV(env); @@ -2756,8 +2734,8 @@ napi_status napi_is_exception_pending(napi_env env, bool* result) { return napi_clear_last_error(env); } -napi_status napi_get_and_clear_last_exception(napi_env env, - napi_value* result) { +napi_status NAPI_CDECL napi_get_and_clear_last_exception(napi_env env, + napi_value* result) { // NAPI_PREAMBLE is not used here: this function must execute when there is a // pending exception. CHECK_ENV(env); @@ -2767,14 +2745,16 @@ napi_status napi_get_and_clear_last_exception(napi_env env, return napi_get_undefined(env, result); } else { *result = v8impl::JsValueFromV8LocalValue( - v8::Local::New(env->isolate, env->last_exception)); + v8::Local::New(env->isolate, env->last_exception)); env->last_exception.Reset(); } return napi_clear_last_error(env); } -napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result) { +napi_status NAPI_CDECL napi_is_arraybuffer(napi_env env, + napi_value value, + bool* result) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, result); @@ -2785,10 +2765,10 @@ napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result) { return napi_clear_last_error(env); } -napi_status napi_create_arraybuffer(napi_env env, - size_t byte_length, - void** data, - napi_value* result) { +napi_status NAPI_CDECL napi_create_arraybuffer(napi_env env, + size_t byte_length, + void** data, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -2806,37 +2786,27 @@ napi_status napi_create_arraybuffer(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_create_external_arraybuffer(napi_env env, - void* external_data, - size_t byte_length, - napi_finalize finalize_cb, - void* finalize_hint, - napi_value* result) { +napi_status NAPI_CDECL +napi_create_external_arraybuffer(napi_env env, + void* external_data, + size_t byte_length, + napi_finalize finalize_cb, + void* finalize_hint, + napi_value* result) { // The API contract here is that the cleanup function runs on the JS thread, // and is able to use napi_env. Implementing that properly is hard, so use the // `Buffer` variant for easier implementation. napi_value buffer; STATUS_CALL(napi_create_external_buffer( - env, - byte_length, - external_data, - finalize_cb, - finalize_hint, - &buffer)); + env, byte_length, external_data, finalize_cb, finalize_hint, &buffer)); return napi_get_typedarray_info( - env, - buffer, - nullptr, - nullptr, - nullptr, - result, - nullptr); + env, buffer, nullptr, nullptr, nullptr, result, nullptr); } -napi_status napi_get_arraybuffer_info(napi_env env, - napi_value arraybuffer, - void** data, - size_t* byte_length) { +napi_status NAPI_CDECL napi_get_arraybuffer_info(napi_env env, + napi_value arraybuffer, + void** data, + size_t* byte_length) { CHECK_ENV(env); CHECK_ARG(env, arraybuffer); @@ -2857,7 +2827,9 @@ napi_status napi_get_arraybuffer_info(napi_env env, return napi_clear_last_error(env); } -napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result) { +napi_status NAPI_CDECL napi_is_typedarray(napi_env env, + napi_value value, + bool* result) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, result); @@ -2868,12 +2840,12 @@ napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result) { return napi_clear_last_error(env); } -napi_status napi_create_typedarray(napi_env env, - napi_typedarray_type type, - size_t length, - napi_value arraybuffer, - size_t byte_offset, - napi_value* result) { +napi_status NAPI_CDECL napi_create_typedarray(napi_env env, + napi_typedarray_type type, + size_t length, + napi_value arraybuffer, + size_t byte_offset, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, arraybuffer); CHECK_ARG(env, result); @@ -2937,13 +2909,13 @@ napi_status napi_create_typedarray(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_get_typedarray_info(napi_env env, - napi_value typedarray, - napi_typedarray_type* type, - size_t* length, - void** data, - napi_value* arraybuffer, - size_t* byte_offset) { +napi_status NAPI_CDECL napi_get_typedarray_info(napi_env env, + napi_value typedarray, + napi_typedarray_type* type, + size_t* length, + void** data, + napi_value* arraybuffer, + size_t* byte_offset) { CHECK_ENV(env); CHECK_ARG(env, typedarray); @@ -3005,11 +2977,11 @@ napi_status napi_get_typedarray_info(napi_env env, return napi_clear_last_error(env); } -napi_status napi_create_dataview(napi_env env, - size_t byte_length, - napi_value arraybuffer, - size_t byte_offset, - napi_value* result) { +napi_status NAPI_CDECL napi_create_dataview(napi_env env, + size_t byte_length, + napi_value arraybuffer, + size_t byte_offset, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, arraybuffer); CHECK_ARG(env, result); @@ -3019,21 +2991,22 @@ napi_status napi_create_dataview(napi_env env, v8::Local buffer = value.As(); if (byte_length + byte_offset > buffer->ByteLength()) { - napi_throw_range_error( - env, - "ERR_NAPI_INVALID_DATAVIEW_ARGS", - "byte_offset + byte_length should be less than or " - "equal to the size in bytes of the array passed in"); + napi_throw_range_error(env, + "ERR_NAPI_INVALID_DATAVIEW_ARGS", + "byte_offset + byte_length should be less than or " + "equal to the size in bytes of the array passed in"); return napi_set_last_error(env, napi_pending_exception); } - v8::Local DataView = v8::DataView::New(buffer, byte_offset, - byte_length); + v8::Local DataView = + v8::DataView::New(buffer, byte_offset, byte_length); *result = v8impl::JsValueFromV8LocalValue(DataView); return GET_RETURN_STATUS(env); } -napi_status napi_is_dataview(napi_env env, napi_value value, bool* result) { +napi_status NAPI_CDECL napi_is_dataview(napi_env env, + napi_value value, + bool* result) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, result); @@ -3044,12 +3017,12 @@ napi_status napi_is_dataview(napi_env env, napi_value value, bool* result) { return napi_clear_last_error(env); } -napi_status napi_get_dataview_info(napi_env env, - napi_value dataview, - size_t* byte_length, - void** data, - napi_value* arraybuffer, - size_t* byte_offset) { +napi_status NAPI_CDECL napi_get_dataview_info(napi_env env, + napi_value dataview, + size_t* byte_length, + void** data, + napi_value* arraybuffer, + size_t* byte_offset) { CHECK_ENV(env); CHECK_ARG(env, dataview); @@ -3085,16 +3058,16 @@ napi_status napi_get_dataview_info(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_version(napi_env env, uint32_t* result) { +napi_status NAPI_CDECL napi_get_version(napi_env env, uint32_t* result) { CHECK_ENV(env); CHECK_ARG(env, result); *result = NAPI_VERSION; return napi_clear_last_error(env); } -napi_status napi_create_promise(napi_env env, - napi_deferred* deferred, - napi_value* promise) { +napi_status NAPI_CDECL napi_create_promise(napi_env env, + napi_deferred* deferred, + napi_value* promise) { NAPI_PREAMBLE(env); CHECK_ARG(env, deferred); CHECK_ARG(env, promise); @@ -3111,21 +3084,21 @@ napi_status napi_create_promise(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_resolve_deferred(napi_env env, - napi_deferred deferred, - napi_value resolution) { +napi_status NAPI_CDECL napi_resolve_deferred(napi_env env, + napi_deferred deferred, + napi_value resolution) { return v8impl::ConcludeDeferred(env, deferred, resolution, true); } -napi_status napi_reject_deferred(napi_env env, - napi_deferred deferred, - napi_value resolution) { +napi_status NAPI_CDECL napi_reject_deferred(napi_env env, + napi_deferred deferred, + napi_value resolution) { return v8impl::ConcludeDeferred(env, deferred, resolution, false); } -napi_status napi_is_promise(napi_env env, - napi_value value, - bool* is_promise) { +napi_status NAPI_CDECL napi_is_promise(napi_env env, + napi_value value, + bool* is_promise) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, is_promise); @@ -3135,9 +3108,9 @@ napi_status napi_is_promise(napi_env env, return napi_clear_last_error(env); } -napi_status napi_create_date(napi_env env, - double time, - napi_value* result) { +napi_status NAPI_CDECL napi_create_date(napi_env env, + double time, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -3149,9 +3122,9 @@ napi_status napi_create_date(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_is_date(napi_env env, - napi_value value, - bool* is_date) { +napi_status NAPI_CDECL napi_is_date(napi_env env, + napi_value value, + bool* is_date) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, is_date); @@ -3161,9 +3134,9 @@ napi_status napi_is_date(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_date_value(napi_env env, - napi_value value, - double* result) { +napi_status NAPI_CDECL napi_get_date_value(napi_env env, + napi_value value, + double* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, value); CHECK_ARG(env, result); @@ -3177,9 +3150,9 @@ napi_status napi_get_date_value(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_run_script(napi_env env, - napi_value script, - napi_value* result) { +napi_status NAPI_CDECL napi_run_script(napi_env env, + napi_value script, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, script); CHECK_ARG(env, result); @@ -3195,44 +3168,39 @@ napi_status napi_run_script(napi_env env, auto maybe_script = v8::Script::Compile(context, v8_script.As()); CHECK_MAYBE_EMPTY(env, maybe_script, napi_generic_failure); - auto script_result = - maybe_script.ToLocalChecked()->Run(context); + auto script_result = maybe_script.ToLocalChecked()->Run(context); CHECK_MAYBE_EMPTY(env, script_result, napi_generic_failure); *result = v8impl::JsValueFromV8LocalValue(script_result.ToLocalChecked()); return GET_RETURN_STATUS(env); } -napi_status napi_add_finalizer(napi_env env, - napi_value js_object, - void* native_object, - napi_finalize finalize_cb, - void* finalize_hint, - napi_ref* result) { - return v8impl::Wrap(env, - js_object, - native_object, - finalize_cb, - finalize_hint, - result); +napi_status NAPI_CDECL napi_add_finalizer(napi_env env, + napi_value js_object, + void* native_object, + napi_finalize finalize_cb, + void* finalize_hint, + napi_ref* result) { + return v8impl::Wrap( + env, js_object, native_object, finalize_cb, finalize_hint, result); } -napi_status napi_adjust_external_memory(napi_env env, - int64_t change_in_bytes, - int64_t* adjusted_value) { +napi_status NAPI_CDECL napi_adjust_external_memory(napi_env env, + int64_t change_in_bytes, + int64_t* adjusted_value) { CHECK_ENV(env); CHECK_ARG(env, adjusted_value); - *adjusted_value = env->isolate->AdjustAmountOfExternalAllocatedMemory( - change_in_bytes); + *adjusted_value = + env->isolate->AdjustAmountOfExternalAllocatedMemory(change_in_bytes); return napi_clear_last_error(env); } -napi_status napi_set_instance_data(napi_env env, - void* data, - napi_finalize finalize_cb, - void* finalize_hint) { +napi_status NAPI_CDECL napi_set_instance_data(napi_env env, + void* data, + napi_finalize finalize_cb, + void* finalize_hint) { CHECK_ENV(env); v8impl::RefBase* old_data = static_cast(env->instance_data); @@ -3242,18 +3210,13 @@ napi_status napi_set_instance_data(napi_env env, v8impl::RefBase::Delete(old_data); } - env->instance_data = v8impl::RefBase::New(env, - 0, - true, - finalize_cb, - data, - finalize_hint); + env->instance_data = + v8impl::RefBase::New(env, 0, true, finalize_cb, data, finalize_hint); return napi_clear_last_error(env); } -napi_status napi_get_instance_data(napi_env env, - void** data) { +napi_status NAPI_CDECL napi_get_instance_data(napi_env env, void** data) { CHECK_ENV(env); CHECK_ARG(env, data); @@ -3264,7 +3227,8 @@ napi_status napi_get_instance_data(napi_env env, return napi_clear_last_error(env); } -napi_status napi_detach_arraybuffer(napi_env env, napi_value arraybuffer) { +napi_status NAPI_CDECL napi_detach_arraybuffer(napi_env env, + napi_value arraybuffer) { CHECK_ENV(env); CHECK_ARG(env, arraybuffer); @@ -3281,9 +3245,9 @@ napi_status napi_detach_arraybuffer(napi_env env, napi_value arraybuffer) { return napi_clear_last_error(env); } -napi_status napi_is_detached_arraybuffer(napi_env env, - napi_value arraybuffer, - bool* result) { +napi_status NAPI_CDECL napi_is_detached_arraybuffer(napi_env env, + napi_value arraybuffer, + bool* result) { CHECK_ENV(env); CHECK_ARG(env, arraybuffer); CHECK_ARG(env, result); diff --git a/src/js_native_api_v8.h b/src/js_native_api_v8.h index bdf68505a7d..766398744c5 100644 --- a/src/js_native_api_v8.h +++ b/src/js_native_api_v8.h @@ -1,8 +1,6 @@ #ifndef SRC_JS_NATIVE_API_V8_H_ #define SRC_JS_NATIVE_API_V8_H_ -// This file needs to be compatible with C compilers. -#include // NOLINT(modernize-deprecated-headers) #include "js_native_api_types.h" #include "js_native_api_v8_internals.h" @@ -53,29 +51,19 @@ class RefTracker { struct napi_env__ { explicit napi_env__(v8::Local context) - : isolate(context->GetIsolate()), - context_persistent(isolate, context) { + : isolate(context->GetIsolate()), context_persistent(isolate, context) { CHECK_EQ(isolate, context->GetIsolate()); napi_clear_last_error(this); } - virtual ~napi_env__() { - // First we must finalize those references that have `napi_finalizer` - // callbacks. The reason is that addons might store other references which - // they delete during their `napi_finalizer` callbacks. If we deleted such - // references here first, they would be doubly deleted when the - // `napi_finalizer` deleted them subsequently. - v8impl::RefTracker::FinalizeAll(&finalizing_reflist); - v8impl::RefTracker::FinalizeAll(&reflist); - } - v8::Isolate* const isolate; // Shortcut for context()->GetIsolate() - v8impl::Persistent context_persistent; inline v8::Local context() const { return v8impl::PersistentToLocal::Strong(context_persistent); } inline void Ref() { refs++; } - inline void Unref() { if ( --refs == 0) delete this; } + inline void Unref() { + if (--refs == 0) DeleteMe(); + } virtual bool can_call_into_js() const { return true; } virtual v8::Maybe mark_arraybuffer_as_untransferable( @@ -83,8 +71,7 @@ struct napi_env__ { return v8::Just(true); } - static inline void - HandleThrow(napi_env env, v8::Local value) { + static inline void HandleThrow(napi_env env, v8::Local value) { env->isolate->ThrowException(value); } @@ -102,13 +89,27 @@ struct napi_env__ { } } + // This should be overridden to schedule the finalization to a properiate + // timing, like next tick of the event loop. virtual void CallFinalizer(napi_finalize cb, void* data, void* hint) { v8::HandleScope handle_scope(isolate); - CallIntoModule([&](napi_env env) { - cb(env, data, hint); - }); + CallIntoModule([&](napi_env env) { cb(env, data, hint); }); } + virtual void DeleteMe() { + // First we must finalize those references that have `napi_finalizer` + // callbacks. The reason is that addons might store other references which + // they delete during their `napi_finalizer` callbacks. If we deleted such + // references here first, they would be doubly deleted when the + // `napi_finalizer` deleted them subsequently. + v8impl::RefTracker::FinalizeAll(&finalizing_reflist); + v8impl::RefTracker::FinalizeAll(&reflist); + delete this; + } + + v8::Isolate* const isolate; // Shortcut for context()->GetIsolate() + v8impl::Persistent context_persistent; + v8impl::Persistent last_exception; // We store references in two different lists, depending on whether they have @@ -121,17 +122,20 @@ struct napi_env__ { int open_callback_scopes = 0; int refs = 1; void* instance_data = nullptr; + + protected: + // Should not be deleted directly. Delete with `napi_env__::DeleteMe()` + // instead. + virtual ~napi_env__() = default; }; // This class is used to keep a napi_env live in a way that // is exception safe versus calling Ref/Unref directly class EnvRefHolder { public: - explicit EnvRefHolder(napi_env env) : _env(env) { - _env->Ref(); - } + explicit EnvRefHolder(napi_env env) : _env(env) { _env->Ref(); } - explicit EnvRefHolder(const EnvRefHolder& other): _env(other.env()) { + explicit EnvRefHolder(const EnvRefHolder& other) : _env(other.env()) { _env->Ref(); } @@ -146,15 +150,13 @@ class EnvRefHolder { } } - napi_env env(void) const { - return _env; - } + napi_env env(void) const { return _env; } private: napi_env _env; }; -static inline napi_status napi_clear_last_error(napi_env env) { +inline napi_status napi_clear_last_error(napi_env env) { env->last_error.error_code = napi_ok; // TODO(boingoing): Should this be a callback? @@ -164,21 +166,21 @@ static inline napi_status napi_clear_last_error(napi_env env) { return napi_ok; } -static inline -napi_status napi_set_last_error(napi_env env, napi_status error_code, - uint32_t engine_error_code = 0, - void* engine_reserved = nullptr) { +inline napi_status napi_set_last_error(napi_env env, + napi_status error_code, + uint32_t engine_error_code = 0, + void* engine_reserved = nullptr) { env->last_error.error_code = error_code; env->last_error.engine_error_code = engine_error_code; env->last_error.engine_reserved = engine_reserved; return error_code; } -#define RETURN_STATUS_IF_FALSE(env, condition, status) \ - do { \ - if (!(condition)) { \ - return napi_set_last_error((env), (status)); \ - } \ +#define RETURN_STATUS_IF_FALSE(env, condition, status) \ + do { \ + if (!(condition)) { \ + return napi_set_last_error((env), (status)); \ + } \ } while (0) #define RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, condition, status) \ @@ -189,84 +191,81 @@ napi_status napi_set_last_error(napi_env env, napi_status error_code, } \ } while (0) -#define CHECK_ENV(env) \ - do { \ - if ((env) == nullptr) { \ - return napi_invalid_arg; \ - } \ +#define CHECK_ENV(env) \ + do { \ + if ((env) == nullptr) { \ + return napi_invalid_arg; \ + } \ } while (0) -#define CHECK_ARG(env, arg) \ +#define CHECK_ARG(env, arg) \ RETURN_STATUS_IF_FALSE((env), ((arg) != nullptr), napi_invalid_arg) -#define CHECK_ARG_WITH_PREAMBLE(env, arg) \ - RETURN_STATUS_IF_FALSE_WITH_PREAMBLE((env), \ - ((arg) != nullptr), \ - napi_invalid_arg) +#define CHECK_ARG_WITH_PREAMBLE(env, arg) \ + RETURN_STATUS_IF_FALSE_WITH_PREAMBLE( \ + (env), ((arg) != nullptr), napi_invalid_arg) -#define CHECK_MAYBE_EMPTY(env, maybe, status) \ +#define CHECK_MAYBE_EMPTY(env, maybe, status) \ RETURN_STATUS_IF_FALSE((env), !((maybe).IsEmpty()), (status)) #define CHECK_MAYBE_EMPTY_WITH_PREAMBLE(env, maybe, status) \ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE((env), !((maybe).IsEmpty()), (status)) // NAPI_PREAMBLE is not wrapped in do..while: try_catch must have function scope -#define NAPI_PREAMBLE(env) \ - CHECK_ENV((env)); \ - RETURN_STATUS_IF_FALSE((env), \ - (env)->last_exception.IsEmpty() && (env)->can_call_into_js(), \ - napi_pending_exception); \ - napi_clear_last_error((env)); \ +#define NAPI_PREAMBLE(env) \ + CHECK_ENV((env)); \ + RETURN_STATUS_IF_FALSE( \ + (env), \ + (env)->last_exception.IsEmpty() && (env)->can_call_into_js(), \ + napi_pending_exception); \ + napi_clear_last_error((env)); \ v8impl::TryCatch try_catch((env)) -#define CHECK_TO_TYPE(env, type, context, result, src, status) \ - do { \ - CHECK_ARG((env), (src)); \ - auto maybe = v8impl::V8LocalValueFromJsValue((src))->To##type((context)); \ - CHECK_MAYBE_EMPTY((env), maybe, (status)); \ - (result) = maybe.ToLocalChecked(); \ +#define CHECK_TO_TYPE(env, type, context, result, src, status) \ + do { \ + CHECK_ARG((env), (src)); \ + auto maybe = v8impl::V8LocalValueFromJsValue((src))->To##type((context)); \ + CHECK_MAYBE_EMPTY((env), maybe, (status)); \ + (result) = maybe.ToLocalChecked(); \ } while (0) -#define CHECK_TO_TYPE_WITH_PREAMBLE(env, type, context, result, src, status) \ - do { \ - CHECK_ARG_WITH_PREAMBLE((env), (src)); \ - auto maybe = v8impl::V8LocalValueFromJsValue((src))->To##type((context)); \ - CHECK_MAYBE_EMPTY_WITH_PREAMBLE((env), maybe, (status)); \ - (result) = maybe.ToLocalChecked(); \ +#define CHECK_TO_TYPE_WITH_PREAMBLE(env, type, context, result, src, status) \ + do { \ + CHECK_ARG_WITH_PREAMBLE((env), (src)); \ + auto maybe = v8impl::V8LocalValueFromJsValue((src))->To##type((context)); \ + CHECK_MAYBE_EMPTY_WITH_PREAMBLE((env), maybe, (status)); \ + (result) = maybe.ToLocalChecked(); \ } while (0) -#define CHECK_TO_FUNCTION(env, result, src) \ - do { \ - CHECK_ARG((env), (src)); \ - v8::Local v8value = v8impl::V8LocalValueFromJsValue((src)); \ - RETURN_STATUS_IF_FALSE((env), v8value->IsFunction(), napi_invalid_arg); \ - (result) = v8value.As(); \ +#define CHECK_TO_FUNCTION(env, result, src) \ + do { \ + CHECK_ARG((env), (src)); \ + v8::Local v8value = v8impl::V8LocalValueFromJsValue((src)); \ + RETURN_STATUS_IF_FALSE((env), v8value->IsFunction(), napi_invalid_arg); \ + (result) = v8value.As(); \ } while (0) -#define CHECK_TO_OBJECT(env, context, result, src) \ +#define CHECK_TO_OBJECT(env, context, result, src) \ CHECK_TO_TYPE((env), Object, (context), (result), (src), napi_object_expected) -#define CHECK_TO_OBJECT_WITH_PREAMBLE(env, context, result, src) \ - CHECK_TO_TYPE_WITH_PREAMBLE((env), \ - Object, \ - (context), \ - (result), \ - (src), \ - napi_object_expected) +#define CHECK_TO_OBJECT_WITH_PREAMBLE(env, context, result, src) \ + CHECK_TO_TYPE_WITH_PREAMBLE( \ + (env), Object, (context), (result), (src), napi_object_expected) -#define CHECK_TO_STRING(env, context, result, src) \ +#define CHECK_TO_STRING(env, context, result, src) \ CHECK_TO_TYPE((env), String, (context), (result), (src), napi_string_expected) -#define GET_RETURN_STATUS(env) \ - (!try_catch.HasCaught() ? napi_ok \ - : napi_set_last_error((env), napi_pending_exception)) +#define GET_RETURN_STATUS(env) \ + (!try_catch.HasCaught() \ + ? napi_ok \ + : napi_set_last_error((env), napi_pending_exception)) -#define THROW_RANGE_ERROR_IF_FALSE(env, condition, error, message) \ - do { \ - if (!(condition)) { \ - napi_throw_range_error((env), (error), (message)); \ - return napi_set_last_error((env), napi_generic_failure); \ - } \ +#define THROW_RANGE_ERROR_IF_FALSE(env, condition, error, message) \ + do { \ + if (!(condition)) { \ + napi_throw_range_error((env), (error), (message)); \ + return napi_set_last_error((env), napi_generic_failure); \ + } \ } while (0) #define RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, condition, status) \ @@ -280,6 +279,12 @@ napi_status napi_set_last_error(napi_env env, napi_status error_code, #define CHECK_MAYBE_EMPTY_WITH_PREAMBLE(env, maybe, status) \ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE((env), !((maybe).IsEmpty()), (status)) +#define STATUS_CALL(call) \ + do { \ + napi_status status = (call); \ + if (status != napi_ok) return status; \ + } while (0) + namespace v8impl { //=== Conversion between V8 Handles and napi_value ======================== @@ -287,7 +292,7 @@ namespace v8impl { // This asserts v8::Local<> will always be implemented with a single // pointer field so that we can pass it around as a void*. static_assert(sizeof(v8::Local) == sizeof(napi_value), - "Cannot convert between v8::Local and napi_value"); + "Cannot convert between v8::Local and napi_value"); inline napi_value JsValueFromV8LocalValue(v8::Local local) { return reinterpret_cast(*local); @@ -305,10 +310,7 @@ class Finalizer { // Some Finalizers are run during shutdown when the napi_env is destroyed, // and some need to keep an explicit reference to the napi_env because they // are run independently. - enum EnvReferenceMode { - kNoEnvReference, - kKeepEnvReference - }; + enum EnvReferenceMode { kNoEnvReference, kKeepEnvReference }; protected: Finalizer(napi_env env, @@ -316,18 +318,16 @@ class Finalizer { void* finalize_data, void* finalize_hint, EnvReferenceMode refmode = kNoEnvReference) - : _env(env), - _finalize_callback(finalize_callback), - _finalize_data(finalize_data), - _finalize_hint(finalize_hint), - _has_env_reference(refmode == kKeepEnvReference) { - if (_has_env_reference) - _env->Ref(); + : _env(env), + _finalize_callback(finalize_callback), + _finalize_data(finalize_data), + _finalize_hint(finalize_hint), + _has_env_reference(refmode == kKeepEnvReference) { + if (_has_env_reference) _env->Ref(); } ~Finalizer() { - if (_has_env_reference) - _env->Unref(); + if (_has_env_reference) _env->Unref(); } public: @@ -340,9 +340,7 @@ class Finalizer { env, finalize_callback, finalize_data, finalize_hint, refmode); } - static void Delete(Finalizer* finalizer) { - delete finalizer; - } + static void Delete(Finalizer* finalizer) { delete finalizer; } protected: napi_env _env; @@ -355,8 +353,7 @@ class Finalizer { class TryCatch : public v8::TryCatch { public: - explicit TryCatch(napi_env env) - : v8::TryCatch(env->isolate), _env(env) {} + explicit TryCatch(napi_env env) : v8::TryCatch(env->isolate), _env(env) {} ~TryCatch() { if (HasCaught()) { @@ -444,10 +441,4 @@ class Reference : public RefBase { } // end of namespace v8impl -#define STATUS_CALL(call) \ - do { \ - napi_status status = (call); \ - if (status != napi_ok) return status; \ - } while (0) - #endif // SRC_JS_NATIVE_API_V8_H_ diff --git a/src/js_native_api_v8_internals.h b/src/js_native_api_v8_internals.h index 8428390ef1e..4f1b94d3d0c 100644 --- a/src/js_native_api_v8_internals.h +++ b/src/js_native_api_v8_internals.h @@ -14,18 +14,18 @@ // included below, defines `NAPI_VERSION`. #include "node_version.h" + #include "env.h" -#include "node_internals.h" #include "gtest/gtest_prod.h" +#include "node_internals.h" -#define NAPI_ARRAYSIZE(array) \ - node::arraysize((array)) +#define NAPI_ARRAYSIZE(array) node::arraysize((array)) -#define NAPI_FIXED_ONE_BYTE_STRING(isolate, string) \ +#define NAPI_FIXED_ONE_BYTE_STRING(isolate, string) \ node::FIXED_ONE_BYTE_STRING((isolate), (string)) -#define NAPI_PRIVATE_KEY(context, suffix) \ - (node::Environment::GetCurrent((context))->napi_ ## suffix()) +#define NAPI_PRIVATE_KEY(context, suffix) \ + (node::Environment::GetCurrent((context))->napi_##suffix()) namespace v8impl { diff --git a/src/js_stream.cc b/src/js_stream.cc index 720008ecefc..5bf64a9e0a9 100644 --- a/src/js_stream.cc +++ b/src/js_stream.cc @@ -17,6 +17,7 @@ using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::Int32; +using v8::Isolate; using v8::Local; using v8::Object; using v8::Value; @@ -197,19 +198,20 @@ void JSStream::Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - Local t = env->NewFunctionTemplate(New); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate() ->SetInternalFieldCount(StreamBase::kInternalFieldCount); t->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "finishWrite", Finish); - env->SetProtoMethod(t, "finishShutdown", Finish); - env->SetProtoMethod(t, "readBuffer", ReadBuffer); - env->SetProtoMethod(t, "emitEOF", EmitEOF); + SetProtoMethod(isolate, t, "finishWrite", Finish); + SetProtoMethod(isolate, t, "finishShutdown", Finish); + SetProtoMethod(isolate, t, "readBuffer", ReadBuffer); + SetProtoMethod(isolate, t, "emitEOF", EmitEOF); StreamBase::AddMethods(env, t); - env->SetConstructorFunction(target, "JSStream", t); + SetConstructorFunction(context, target, "JSStream", t); } } // namespace node diff --git a/src/js_udp_wrap.cc b/src/js_udp_wrap.cc index c01289033e6..99362ccc609 100644 --- a/src/js_udp_wrap.cc +++ b/src/js_udp_wrap.cc @@ -5,6 +5,9 @@ #include +// TODO(RaisinTen): Replace all uses with empty `v8::Maybe`s. +#define JS_EXCEPTION_PENDING UV_EPROTO + namespace node { using errors::TryCatchScope; @@ -14,6 +17,7 @@ using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::Int32; +using v8::Isolate; using v8::Local; using v8::Object; using v8::Value; @@ -60,7 +64,7 @@ int JSUDPWrap::RecvStart() { Context::Scope context_scope(env()->context()); TryCatchScope try_catch(env()); Local value; - int32_t value_int = UV_EPROTO; + int32_t value_int = JS_EXCEPTION_PENDING; if (!MakeCallback(env()->onreadstart_string(), 0, nullptr).ToLocal(&value) || !value->Int32Value(env()->context()).To(&value_int)) { if (try_catch.HasCaught() && !try_catch.HasTerminated()) @@ -74,7 +78,7 @@ int JSUDPWrap::RecvStop() { Context::Scope context_scope(env()->context()); TryCatchScope try_catch(env()); Local value; - int32_t value_int = UV_EPROTO; + int32_t value_int = JS_EXCEPTION_PENDING; if (!MakeCallback(env()->onreadstop_string(), 0, nullptr).ToLocal(&value) || !value->Int32Value(env()->context()).To(&value_int)) { if (try_catch.HasCaught() && !try_catch.HasTerminated()) @@ -90,7 +94,7 @@ ssize_t JSUDPWrap::Send(uv_buf_t* bufs, Context::Scope context_scope(env()->context()); TryCatchScope try_catch(env()); Local value; - int64_t value_int = UV_EPROTO; + int64_t value_int = JS_EXCEPTION_PENDING; size_t total_len = 0; MaybeStackBuffer, 16> buffers(nbufs); @@ -100,10 +104,13 @@ ssize_t JSUDPWrap::Send(uv_buf_t* bufs, total_len += bufs[i].len; } + Local address; + if (!AddressToJS(env(), addr).ToLocal(&address)) return value_int; + Local args[] = { listener()->CreateSendWrap(total_len)->object(), Array::New(env()->isolate(), buffers.out(), nbufs), - AddressToJS(env(), addr) + address, }; if (!MakeCallback(env()->onwrite_string(), arraysize(args), args) @@ -192,18 +199,19 @@ void JSUDPWrap::Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - Local t = env->NewFunctionTemplate(New); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate() ->SetInternalFieldCount(UDPWrapBase::kUDPWrapBaseField + 1); t->Inherit(AsyncWrap::GetConstructorTemplate(env)); UDPWrapBase::AddMethods(env, t); - env->SetProtoMethod(t, "emitReceived", EmitReceived); - env->SetProtoMethod(t, "onSendDone", OnSendDone); - env->SetProtoMethod(t, "onAfterBind", OnAfterBind); + SetProtoMethod(isolate, t, "emitReceived", EmitReceived); + SetProtoMethod(isolate, t, "onSendDone", OnSendDone); + SetProtoMethod(isolate, t, "onAfterBind", OnAfterBind); - env->SetConstructorFunction(target, "JSUDPWrap", t); + SetConstructorFunction(context, target, "JSUDPWrap", t); } diff --git a/src/json_utils.cc b/src/json_utils.cc index 96f178cf351..aa667ccc904 100644 --- a/src/json_utils.cc +++ b/src/json_utils.cc @@ -5,11 +5,11 @@ namespace node { std::string EscapeJsonChars(const std::string& str) { const std::string control_symbols[0x20] = { "\\u0000", "\\u0001", "\\u0002", "\\u0003", "\\u0004", "\\u0005", - "\\u0006", "\\u0007", "\\b", "\\t", "\\n", "\\v", "\\f", "\\r", - "\\u000e", "\\u000f", "\\u0010", "\\u0011", "\\u0012", "\\u0013", - "\\u0014", "\\u0015", "\\u0016", "\\u0017", "\\u0018", "\\u0019", - "\\u001a", "\\u001b", "\\u001c", "\\u001d", "\\u001e", "\\u001f" - }; + "\\u0006", "\\u0007", "\\b", "\\t", "\\n", "\\u000b", + "\\f", "\\r", "\\u000e", "\\u000f", "\\u0010", "\\u0011", + "\\u0012", "\\u0013", "\\u0014", "\\u0015", "\\u0016", "\\u0017", + "\\u0018", "\\u0019", "\\u001a", "\\u001b", "\\u001c", "\\u001d", + "\\u001e", "\\u001f"}; std::string ret; size_t last_pos = 0; diff --git a/src/large_pages/node_large_page.cc b/src/large_pages/node_large_page.cc index eb546c581a1..1dddcb9f6c3 100644 --- a/src/large_pages/node_large_page.cc +++ b/src/large_pages/node_large_page.cc @@ -68,6 +68,11 @@ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif // ifndef _GNU_SOURCE +#include +#if !defined(PR_SET_VMA) +#define PR_SET_VMA 0x53564d41 +#define PR_SET_VMA_ANON_NAME 0 +#endif #elif defined(__FreeBSD__) #include "uv.h" // uv_exepath #endif // defined(__linux__) @@ -312,6 +317,21 @@ class MemoryMapPointer { mem_ = nullptr; size_ = 0; } + static void SetName(void* mem, size_t size, const char* name) { +#if defined(__linux__) + // Available since the 5.17 kernel release and if the + // CONFIG_ANON_VMA_NAME option, we can set an identifier + // to an anonymous mapped region. However if the kernel + // option is not present or it s an older kernel, it is a no-op. + if (mem != MAP_FAILED && mem != nullptr) + prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, + reinterpret_cast(mem), + size, + reinterpret_cast(name)); +#else + (void)name; +#endif + } FORCE_INLINE ~MemoryMapPointer() { if (mem_ == nullptr) return; if (mem_ == MAP_FAILED) return; @@ -382,6 +402,7 @@ MoveTextRegionToLargePages(const text_region& r) { #endif if (mprotect(start, size, PROT_READ | PROT_EXEC) == -1) goto fail; + MemoryMapPointer::SetName(start, size, "nodejs Large Page"); // We need not `munmap(tmem, size)` on success. tmem.Reset(); diff --git a/src/module_wrap.cc b/src/module_wrap.cc index aeb0d2cb373..bd13d1e2825 100644 --- a/src/module_wrap.cc +++ b/src/module_wrap.cc @@ -429,13 +429,7 @@ void ModuleWrap::Evaluate(const FunctionCallbackInfo& args) { return; } - // If TLA is enabled, `result` is the evaluation's promise. - // Otherwise, `result` is the last evaluated value of the module, - // which could be a promise, which would result in it being incorrectly - // unwrapped when the higher level code awaits the evaluation. - if (env->isolate_data()->options()->experimental_top_level_await) { - args.GetReturnValue().Set(result.ToLocalChecked()); - } + args.GetReturnValue().Set(result.ToLocalChecked()); } void ModuleWrap::GetNamespace(const FunctionCallbackInfo& args) { @@ -771,31 +765,37 @@ void ModuleWrap::Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - Local tpl = env->NewFunctionTemplate(New); + Local tpl = NewFunctionTemplate(isolate, New); tpl->InstanceTemplate()->SetInternalFieldCount( ModuleWrap::kInternalFieldCount); tpl->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(tpl, "link", Link); - env->SetProtoMethod(tpl, "instantiate", Instantiate); - env->SetProtoMethod(tpl, "evaluate", Evaluate); - env->SetProtoMethod(tpl, "setExport", SetSyntheticExport); - env->SetProtoMethodNoSideEffect(tpl, "createCachedData", CreateCachedData); - env->SetProtoMethodNoSideEffect(tpl, "getNamespace", GetNamespace); - env->SetProtoMethodNoSideEffect(tpl, "getStatus", GetStatus); - env->SetProtoMethodNoSideEffect(tpl, "getError", GetError); - env->SetProtoMethodNoSideEffect(tpl, "getStaticDependencySpecifiers", - GetStaticDependencySpecifiers); - - env->SetConstructorFunction(target, "ModuleWrap", tpl); - - env->SetMethod(target, - "setImportModuleDynamicallyCallback", - SetImportModuleDynamicallyCallback); - env->SetMethod(target, - "setInitializeImportMetaObjectCallback", - SetInitializeImportMetaObjectCallback); + SetProtoMethod(isolate, tpl, "link", Link); + SetProtoMethod(isolate, tpl, "instantiate", Instantiate); + SetProtoMethod(isolate, tpl, "evaluate", Evaluate); + SetProtoMethod(isolate, tpl, "setExport", SetSyntheticExport); + SetProtoMethodNoSideEffect( + isolate, tpl, "createCachedData", CreateCachedData); + SetProtoMethodNoSideEffect(isolate, tpl, "getNamespace", GetNamespace); + SetProtoMethodNoSideEffect(isolate, tpl, "getStatus", GetStatus); + SetProtoMethodNoSideEffect(isolate, tpl, "getError", GetError); + SetProtoMethodNoSideEffect(isolate, + tpl, + "getStaticDependencySpecifiers", + GetStaticDependencySpecifiers); + + SetConstructorFunction(context, target, "ModuleWrap", tpl); + + SetMethod(context, + target, + "setImportModuleDynamicallyCallback", + SetImportModuleDynamicallyCallback); + SetMethod(context, + target, + "setInitializeImportMetaObjectCallback", + SetInitializeImportMetaObjectCallback); #define V(name) \ target->Set(context, \ diff --git a/src/node.cc b/src/node.cc index 64a910e3a28..b258804f0ef 100644 --- a/src/node.cc +++ b/src/node.cc @@ -25,25 +25,27 @@ #include "debug_utils-inl.h" #include "env-inl.h" -#include "memory_tracker-inl.h" #include "histogram-inl.h" +#include "memory_tracker-inl.h" #include "node_binding.h" +#include "node_builtins.h" #include "node_errors.h" #include "node_internals.h" #include "node_main_instance.h" #include "node_metadata.h" -#include "node_native_module_env.h" +#include "node_builtins_env.h" #include "node_options-inl.h" #include "node_perf.h" #include "node_process-inl.h" #include "node_report.h" #include "node_revert.h" +#include "node_snapshot_builder.h" #include "node_v8_platform-inl.h" #include "node_version.h" #if HAVE_OPENSSL -#include "allocated_buffer-inl.h" // Inlined functions needed by node_crypto.h #include "node_crypto.h" +#include #endif #if defined(NODE_HAVE_I18N_SUPPORT) @@ -125,8 +127,6 @@ namespace node { -using native_module::NativeModuleEnv; - using v8::EscapableHandleScope; using v8::Function; using v8::FunctionCallbackInfo; @@ -162,6 +162,11 @@ PVOID old_vectored_exception_handler; struct V8Platform v8_platform; } // namespace per_process +// The section in the OpenSSL configuration file to be loaded. +const char* conf_section_name = STRINGIFY(NODE_OPENSSL_CONF_NAME); + +const char* fips_error_msg = "OpenSSL error when trying to enable FIPS:\n"; + #ifdef __POSIX__ void SignalExit(int signo, siginfo_t* info, void* ucontext) { ResetStdio(); @@ -175,7 +180,8 @@ MaybeLocal ExecuteBootstrapper(Environment* env, std::vector>* arguments) { EscapableHandleScope scope(env->isolate()); MaybeLocal maybe_fn = - NativeModuleEnv::LookupAndCompile(env->context(), id, parameters, env); + builtins::BuiltinEnv::LookupAndCompile(env->context(), + id, parameters, env); Local fn; if (!maybe_fn.ToLocal(&fn)) { @@ -276,9 +282,8 @@ static void AtomicsWaitCallback(Isolate::AtomicsWaitEvent event, void Environment::InitializeDiagnostics() { isolate_->GetHeapProfiler()->AddBuildEmbedderGraphCallback( Environment::BuildEmbedderGraph, this); - if (options_->heap_snapshot_near_heap_limit > 0) { - isolate_->AddNearHeapLimitCallback(Environment::NearHeapLimitCallback, - this); + if (heap_snapshot_near_heap_limit_ > 0) { + AddHeapSnapshotNearHeapLimitCallback(); } if (options_->trace_uncaught) isolate_->SetCaptureStackTraceForUncaughtExceptions(true); @@ -306,10 +311,10 @@ MaybeLocal Environment::BootstrapInternalLoaders() { primordials_string()}; std::vector> loaders_args = { process_object(), - NewFunctionTemplate(binding::GetLinkedBinding) + NewFunctionTemplate(isolate_, binding::GetLinkedBinding) ->GetFunction(context()) .ToLocalChecked(), - NewFunctionTemplate(binding::GetInternalBinding) + NewFunctionTemplate(isolate_, binding::GetInternalBinding) ->GetFunction(context()) .ToLocalChecked(), primordials()}; @@ -331,7 +336,7 @@ MaybeLocal Environment::BootstrapInternalLoaders() { Local require = loader_exports_obj->Get(context(), require_string()).ToLocalChecked(); CHECK(require->IsFunction()); - set_native_module_require(require.As()); + set_builtin_module_require(require.As()); return scope.Escape(loader_exports); } @@ -339,11 +344,6 @@ MaybeLocal Environment::BootstrapInternalLoaders() { MaybeLocal Environment::BootstrapNode() { EscapableHandleScope scope(isolate_); - Local global = context()->Global(); - // TODO(joyeecheung): this can be done in JS land now. - global->Set(context(), FIXED_ONE_BYTE_STRING(isolate_, "global"), global) - .Check(); - // process, require, internalBinding, primordials std::vector> node_params = { process_string(), @@ -352,7 +352,7 @@ MaybeLocal Environment::BootstrapNode() { primordials_string()}; std::vector> node_args = { process_object(), - native_module_require(), + builtin_module_require(), internal_binding_loader(), primordials()}; @@ -441,10 +441,10 @@ MaybeLocal StartExecution(Environment* env, const char* main_script_id) { std::vector> arguments = { env->process_object(), - env->native_module_require(), + env->builtin_module_require(), env->internal_binding_loader(), env->primordials(), - env->NewFunctionTemplate(MarkBootstrapComplete) + NewFunctionTemplate(env->isolate(), MarkBootstrapComplete) ->GetFunction(env->context()) .ToLocalChecked()}; @@ -466,13 +466,21 @@ MaybeLocal StartExecution(Environment* env, StartExecutionCallback cb) { return {}; StartExecutionCallbackInfo info = { - env->process_object(), - env->native_module_require(), + env->process_object(), + env->builtin_module_require(), }; return scope.EscapeMaybe(cb(info)); } + // TODO(joyeecheung): move these conditions into JS land and let the + // deserialize main function take precedence. For workers, we need to + // move the pre-execution part into a different file that can be + // reused when dealing with user-defined main functions. + if (!env->snapshot_deserialize_main().IsEmpty()) { + return env->RunSnapshotDeserializeMain(); + } + if (env->worker_context() != nullptr) { return StartExecution(env, "internal/main/worker_thread"); } @@ -486,6 +494,10 @@ MaybeLocal StartExecution(Environment* env, StartExecutionCallback cb) { return StartExecution(env, "internal/main/inspect"); } + if (per_process::cli_options->build_snapshot) { + return StartExecution(env, "internal/main/mksnapshot"); + } + if (per_process::cli_options->print_help) { return StartExecution(env, "internal/main/print_help"); } @@ -504,6 +516,14 @@ MaybeLocal StartExecution(Environment* env, StartExecutionCallback cb) { return StartExecution(env, "internal/main/check_syntax"); } + if (env->options()->test_runner) { + return StartExecution(env, "internal/main/test_runner"); + } + + if (env->options()->watch_mode && !first_argv.empty()) { + return StartExecution(env, "internal/main/watch_mode"); + } + if (!first_argv.empty() && first_argv != "-") { return StartExecution(env, "internal/main/run_main_module"); } @@ -962,11 +982,11 @@ int InitializeNodeWithArgs(std::vector* argv, #endif // defined(NODE_HAVE_I18N_SUPPORT) - NativeModuleEnv::InitializeCodeCache(); + builtins::BuiltinEnv::InitializeCodeCache(); // We should set node_is_initialized here instead of in node::Start, // otherwise embedders using node::Init to initialize everything will not be - // able to set it and native modules will not load for them. + // able to set it and native addons will not load for them. node_is_initialized = true; return 0; } @@ -975,6 +995,18 @@ InitializationResult InitializeOncePerProcess(int argc, char** argv) { return InitializeOncePerProcess(argc, argv, kDefaultInitialization); } +#if HAVE_OPENSSL +InitializationResult handle_openssl_error(int exit_code, + const char* msg, + InitializationResult* result) { + result->exit_code = exit_code; + result->early_return = true; + fprintf(stderr, "%s", msg); + ERR_print_errors_fp(stderr); + return *result; +} +#endif + InitializationResult InitializeOncePerProcess( int argc, char** argv, @@ -987,7 +1019,7 @@ InitializationResult InitializeOncePerProcess( // Initialized the enabled list for Debug() calls with system // environment variables. - per_process::enabled_debug_list.Parse(nullptr); + per_process::enabled_debug_list.Parse(); atexit(ResetStdio); @@ -1030,6 +1062,13 @@ InitializationResult InitializeOncePerProcess( return result; } + if (per_process::cli_options->print_anode_version) { + printf("%s\n", ANODE_VERSION); + result.exit_code = 0; + result.early_return = true; + return result; + } + if (per_process::cli_options->print_bash_completion) { std::string completion = options_parser::GetBashCompletion(); printf("%s\n", completion.c_str()); @@ -1054,7 +1093,6 @@ InitializationResult InitializeOncePerProcess( } // In the case of FIPS builds we should make sure // the random source is properly initialized first. -#if OPENSSL_VERSION_MAJOR >= 3 // Call OPENSSL_init_crypto to initialize OPENSSL_INIT_LOAD_CONFIG to // avoid the default behavior where errors raised during the parsing of the // OpenSSL configuration file are not propagated and cannot be detected. @@ -1064,51 +1102,88 @@ InitializationResult InitializeOncePerProcess( // fipsinstall command. If the path to this file is incorrect no error // will be reported. // - // For Node.js this will mean that EntropySource will be called by V8 as - // part of its initialization process, and EntropySource will in turn call - // CheckEntropy. CheckEntropy will call RAND_status which will now always - // return 0, leading to an endless loop and the node process will appear to - // hang/freeze. + // For Node.js this will mean that CSPRNG() will be called by V8 as + // part of its initialization process, and CSPRNG() will in turn call + // call RAND_status which will now always return 0, leading to an endless + // loop and the node process will appear to hang/freeze. + + // Passing NULL as the config file will allow the default openssl.cnf file + // to be loaded, but the default section in that file will not be used, + // instead only the section that matches the value of conf_section_name + // will be read from the default configuration file. + const char* conf_file = nullptr; + // To allow for using the previous default where the 'openssl_conf' appname + // was used, the command line option 'openssl-shared-config' can be used to + // force the old behavior. + if (per_process::cli_options->openssl_shared_config) { + conf_section_name = "openssl_conf"; + } + // Use OPENSSL_CONF environment variable is set. std::string env_openssl_conf; credentials::SafeGetenv("OPENSSL_CONF", &env_openssl_conf); + if (!env_openssl_conf.empty()) { + conf_file = env_openssl_conf.c_str(); + } + // Use --openssl-conf command line option if specified. + if (!per_process::cli_options->openssl_config.empty()) { + conf_file = per_process::cli_options->openssl_config.c_str(); + } - bool has_cli_conf = !per_process::cli_options->openssl_config.empty(); - if (has_cli_conf || !env_openssl_conf.empty()) { - OPENSSL_INIT_SETTINGS* settings = OPENSSL_INIT_new(); - OPENSSL_INIT_set_config_file_flags(settings, CONF_MFLAGS_DEFAULT_SECTION); - if (has_cli_conf) { - const char* conf = per_process::cli_options->openssl_config.c_str(); - OPENSSL_INIT_set_config_filename(settings, conf); - } - OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, settings); - OPENSSL_INIT_free(settings); - - if (ERR_peek_error() != 0) { - result.exit_code = ERR_GET_REASON(ERR_peek_error()); - result.early_return = true; - fprintf(stderr, "OpenSSL configuration error:\n"); - ERR_print_errors_fp(stderr); - return result; + OPENSSL_INIT_SETTINGS* settings = OPENSSL_INIT_new(); + OPENSSL_INIT_set_config_filename(settings, conf_file); + OPENSSL_INIT_set_config_appname(settings, conf_section_name); + OPENSSL_INIT_set_config_file_flags(settings, + CONF_MFLAGS_IGNORE_MISSING_FILE); + + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, settings); + OPENSSL_INIT_free(settings); + +#if OPENSSL_VERSION_MAJOR < 3 + if (ERR_peek_error() != 0) { + int ossl_error_code = ERR_GET_REASON(ERR_peek_error()); + if (ossl_error_code == EVP_R_FIPS_MODE_NOT_SUPPORTED) { + if (!crypto::ProcessFipsOptions()) { + return handle_openssl_error(ossl_error_code, fips_error_msg, &result); + } + } else { + return handle_openssl_error(ossl_error_code, + "OpenSSL configuration error:\n", + &result); } } -#else // OPENSSL_VERSION_MAJOR < 3 +#else + if (ERR_peek_error() != 0) { + return handle_openssl_error(ERR_GET_REASON(ERR_peek_error()), + "OpenSSL configuration error:\n", + &result); + } +#endif + +#if OPENSSL_VERSION_MAJOR < 3 if (FIPS_mode()) { OPENSSL_init(); } #endif - if (!crypto::ProcessFipsOptions()) { - result.exit_code = ERR_GET_REASON(ERR_peek_error()); - result.early_return = true; - fprintf(stderr, "OpenSSL error when trying to enable FIPS:\n"); - ERR_print_errors_fp(stderr); - return result; - } - // V8 on Windows doesn't have a good source of entropy. Seed it from - // OpenSSL's pool. - V8::SetEntropySource(crypto::EntropySource); + if (!crypto::ProcessFipsOptions()) { + return handle_openssl_error(ERR_GET_REASON(ERR_peek_error()), + fips_error_msg, + &result); + } + + // Ensure CSPRNG is properly seeded. + CHECK(crypto::CSPRNG(nullptr, 0).is_ok()); + + V8::SetEntropySource([](unsigned char* buffer, size_t length) { + // V8 falls back to very weak entropy when this function fails + // and /dev/urandom isn't available. That wouldn't be so bad if + // the entropy was only used for Math.random() but it's also used for + // hash table and address space layout randomization. Better to abort. + CHECK(crypto::CSPRNG(buffer, length).is_ok()); + return true; + }); #endif // HAVE_OPENSSL && !defined(OPENSSL_IS_BORINGSSL) -} + } per_process::v8_platform.Initialize( static_cast(per_process::cli_options->v8_thread_pool_size)); if (init_flags & kInitializeV8) { @@ -1144,29 +1219,26 @@ int Start(int argc, char** argv) { return result.exit_code; } + if (per_process::cli_options->build_snapshot) { + fprintf(stderr, + "--build-snapshot is not yet supported in the node binary\n"); + return 1; + } + { - Isolate::CreateParams params; - const std::vector* indices = nullptr; - const EnvSerializeInfo* env_info = nullptr; bool use_node_snapshot = per_process::cli_options->per_isolate->node_snapshot; - if (use_node_snapshot) { - v8::StartupData* blob = NodeMainInstance::GetEmbeddedSnapshotBlob(); - if (blob != nullptr) { - params.snapshot_blob = blob; - indices = NodeMainInstance::GetIsolateDataIndices(); - env_info = NodeMainInstance::GetEnvSerializeInfo(); - } - } + const SnapshotData* snapshot_data = + use_node_snapshot ? SnapshotBuilder::GetEmbeddedSnapshotData() + : nullptr; uv_loop_configure(uv_default_loop(), UV_METRICS_IDLE_TIME); - NodeMainInstance main_instance(¶ms, + NodeMainInstance main_instance(snapshot_data, uv_default_loop(), per_process::v8_platform.Platform(), result.args, - result.exec_args, - indices); - result.exit_code = main_instance.Run(env_info); + result.exec_args); + result.exit_code = main_instance.Run(); } TearDownOncePerProcess(); diff --git a/src/node.h b/src/node.h index 966edcd041b..7cf714d93a2 100644 --- a/src/node.h +++ b/src/node.h @@ -32,6 +32,16 @@ # define NODE_EXTERN __attribute__((visibility("default"))) #endif +// Declarations annotated with NODE_EXTERN_PRIVATE do not form part of +// the public API. They are implementation details that can and will +// change between releases, even in semver patch releases. Do not use +// any such symbol in external code. +#ifdef NODE_SHARED_MODE +#define NODE_EXTERN_PRIVATE NODE_EXTERN +#else +#define NODE_EXTERN_PRIVATE +#endif + #ifdef BUILDING_NODE_EXTENSION # undef BUILDING_V8_SHARED # undef BUILDING_UV_SHARED @@ -65,8 +75,9 @@ #include "v8-platform.h" // NOLINT(build/include_order) #include "node_version.h" // NODE_MODULE_VERSION -#include #include +#include +#include // We cannot use __POSIX__ in this header because that's only defined when // building Node.js. @@ -518,6 +529,33 @@ NODE_EXTERN v8::MaybeLocal PrepareStackTraceCallback( v8::Local exception, v8::Local trace); +// Writes a diagnostic report to a file. If filename is not provided, the +// default filename includes the date, time, PID, and a sequence number. +// The report's JavaScript stack trace is taken from err, if present. +// If isolate is nullptr, no information about the JavaScript environment +// is included in the report. +// Returns the filename of the written report. +NODE_EXTERN std::string TriggerNodeReport(v8::Isolate* isolate, + const char* message, + const char* trigger, + const std::string& filename, + v8::Local error); +NODE_EXTERN std::string TriggerNodeReport(Environment* env, + const char* message, + const char* trigger, + const std::string& filename, + v8::Local error); +NODE_EXTERN void GetNodeReport(v8::Isolate* isolate, + const char* message, + const char* trigger, + v8::Local error, + std::ostream& out); +NODE_EXTERN void GetNodeReport(Environment* env, + const char* message, + const char* trigger, + v8::Local error, + std::ostream& out); + // This returns the MultiIsolatePlatform used for an Environment or IsolateData // instance, if one exists. NODE_EXTERN MultiIsolatePlatform* GetMultiIsolatePlatform(Environment* env); @@ -824,11 +862,13 @@ extern "C" NODE_EXTERN void node_module_register(void* mod); #endif #if defined(_MSC_VER) -#pragma section(".CRT$XCU", read) #define NODE_C_CTOR(fn) \ NODE_CTOR_PREFIX void __cdecl fn(void); \ - __declspec(dllexport, allocate(".CRT$XCU")) \ - void (__cdecl*fn ## _)(void) = fn; \ + namespace { \ + struct fn##_ { \ + fn##_() { fn(); }; \ + } fn##_v_; \ + } \ NODE_CTOR_PREFIX void __cdecl fn(void) #else #define NODE_C_CTOR(fn) \ @@ -987,6 +1027,15 @@ inline void RemoveEnvironmentCleanupHook(AsyncCleanupHookHandle holder) { RemoveEnvironmentCleanupHookInternal(holder.get()); } +// This behaves like V8's Isolate::RequestInterrupt(), but also wakes up +// the event loop if it is currently idle. Interrupt requests are drained +// in `FreeEnvironment()`. The passed callback can not call back into +// JavaScript. +// This function can be called from any thread. +NODE_EXTERN void RequestInterrupt(Environment* env, + void (*fun)(void* arg), + void* arg); + /* Returns the id of the current execution context. If the return value is * zero then no execution has been set. This will happen if the user handles * I/O from native code. */ diff --git a/src/node_api.cc b/src/node_api.cc index 60fbe96b8ef..15c224dc927 100644 --- a/src/node_api.cc +++ b/src/node_api.cc @@ -9,12 +9,14 @@ #include "node_buffer.h" #include "node_errors.h" #include "node_internals.h" +#include "node_process.h" #include "node_url.h" #include "threadpoolwork-inl.h" #include "tracing/traced_value.h" #include "util-inl.h" #include +#include #include node_napi_env__::node_napi_env__(v8::Local context, @@ -23,6 +25,11 @@ node_napi_env__::node_napi_env__(v8::Local context, CHECK_NOT_NULL(node_env()); } +void node_napi_env__::DeleteMe() { + destructing = true; + napi_env__::DeleteMe(); +} + bool node_napi_env__::can_call_into_js() const { return node_env()->can_call_into_js(); } @@ -35,19 +42,64 @@ v8::Maybe node_napi_env__::mark_arraybuffer_as_untransferable( } void node_napi_env__::CallFinalizer(napi_finalize cb, void* data, void* hint) { + CallFinalizer(cb, data, hint); +} + +template +void node_napi_env__::CallFinalizer(napi_finalize cb, void* data, void* hint) { + if (destructing) { + // we can not defer finalizers when the environment is being destructed. + v8::HandleScope handle_scope(isolate); + v8::Context::Scope context_scope(context()); + CallbackIntoModule( + [&](napi_env env) { cb(env, data, hint); }); + return; + } // we need to keep the env live until the finalizer has been run // EnvRefHolder provides an exception safe wrapper to Ref and then // Unref once the lambda is freed EnvRefHolder liveEnv(static_cast(this)); node_env()->SetImmediate( [=, liveEnv = std::move(liveEnv)](node::Environment* node_env) { - napi_env env = liveEnv.env(); + node_napi_env__* env = static_cast(liveEnv.env()); v8::HandleScope handle_scope(env->isolate); v8::Context::Scope context_scope(env->context()); - env->CallIntoModule([&](napi_env env) { cb(env, data, hint); }); + env->CallbackIntoModule( + [&](napi_env env) { cb(env, data, hint); }); }); } +void node_napi_env__::trigger_fatal_exception(v8::Local local_err) { + v8::Local local_msg = + v8::Exception::CreateMessage(isolate, local_err); + node::errors::TriggerUncaughtException(isolate, local_err, local_msg); +} + +// option enforceUncaughtExceptionPolicy is added for not breaking existing +// running n-api add-ons, and should be deprecated in the next major Node.js +// release. +template +void node_napi_env__::CallbackIntoModule(T&& call) { + CallIntoModule(call, [](napi_env env_, v8::Local local_err) { + node_napi_env__* env = static_cast(env_); + node::Environment* node_env = env->node_env(); + if (!node_env->options()->force_node_api_uncaught_exceptions_policy && + !enforceUncaughtExceptionPolicy) { + ProcessEmitDeprecationWarning( + node_env, + "Uncaught N-API callback exception detected, please run node " + "with option --force-node-api-uncaught-exceptions-policy=true" + "to handle those exceptions properly.", + "DEP0168"); + return; + } + // If there was an unhandled exception in the complete callback, + // report it as a fatal exception. (There is no JavaScript on the + // callstack that can possibly handle it.) + env->trigger_fatal_exception(local_err); + }); +} + namespace v8impl { namespace { @@ -60,22 +112,10 @@ class BufferFinalizer : private Finalizer { static_cast(hint)}; finalizer->_finalize_data = data; - node::Environment* node_env = - static_cast(finalizer->_env)->node_env(); - node_env->SetImmediate( - [finalizer = std::move(finalizer)](node::Environment* env) { - if (finalizer->_finalize_callback == nullptr) return; - - v8::HandleScope handle_scope(finalizer->_env->isolate); - v8::Context::Scope context_scope(finalizer->_env->context()); - - finalizer->_env->CallIntoModule([&](napi_env env) { - finalizer->_finalize_callback( - env, - finalizer->_finalize_data, - finalizer->_finalize_hint); - }); - }); + if (finalizer->_finalize_callback == nullptr) return; + finalizer->_env->CallFinalizer(finalizer->_finalize_callback, + finalizer->_finalize_data, + finalizer->_finalize_hint); } struct Deleter { @@ -85,8 +125,8 @@ class BufferFinalizer : private Finalizer { }; }; -static inline napi_env -NewEnv(v8::Local context, const std::string& module_filename) { +inline napi_env NewEnv(v8::Local context, + const std::string& module_filename) { node_napi_env result; result = new node_napi_env__(context, module_filename); @@ -98,21 +138,12 @@ NewEnv(v8::Local context, const std::string& module_filename) { // once all N-API addons using this napi_env are unloaded. // For now, a per-Environment cleanup hook is the best we can do. result->node_env()->AddCleanupHook( - [](void* arg) { - static_cast(arg)->Unref(); - }, + [](void* arg) { static_cast(arg)->Unref(); }, static_cast(result)); return result; } -static inline void trigger_fatal_exception( - napi_env env, v8::Local local_err) { - v8::Local local_msg = - v8::Exception::CreateMessage(env->isolate, local_err); - node::errors::TriggerUncaughtException(env->isolate, local_err, local_msg); -} - class ThreadSafeFunction : public node::AsyncResource { public: ThreadSafeFunction(v8::Local func, @@ -124,20 +155,20 @@ class ThreadSafeFunction : public node::AsyncResource { node_napi_env env_, void* finalize_data_, napi_finalize finalize_cb_, - napi_threadsafe_function_call_js call_js_cb_): - AsyncResource(env_->isolate, - resource, - *v8::String::Utf8Value(env_->isolate, name)), - thread_count(thread_count_), - is_closing(false), - dispatch_state(kDispatchIdle), - context(context_), - max_queue_size(max_queue_size_), - env(env_), - finalize_data(finalize_data_), - finalize_cb(finalize_cb_), - call_js_cb(call_js_cb_ == nullptr ? CallJs : call_js_cb_), - handles_closing(false) { + napi_threadsafe_function_call_js call_js_cb_) + : AsyncResource(env_->isolate, + resource, + *v8::String::Utf8Value(env_->isolate, name)), + thread_count(thread_count_), + is_closing(false), + dispatch_state(kDispatchIdle), + context(context_), + max_queue_size(max_queue_size_), + env(env_), + finalize_data(finalize_data_), + finalize_cb(finalize_cb_), + call_js_cb(call_js_cb_ == nullptr ? CallJs : call_js_cb_), + handles_closing(false) { ref.Reset(env->isolate, func); node::AddEnvironmentCleanupHook(env->isolate, Cleanup, this); env->Ref(); @@ -153,9 +184,8 @@ class ThreadSafeFunction : public node::AsyncResource { napi_status Push(void* data, napi_threadsafe_function_call_mode mode) { node::Mutex::ScopedLock lock(this->mutex); - while (queue.size() >= max_queue_size && - max_queue_size > 0 && - !is_closing) { + while (queue.size() >= max_queue_size && max_queue_size > 0 && + !is_closing) { if (mode == napi_tsfn_nonblocking) { return napi_queue_full; } @@ -211,7 +241,7 @@ class ThreadSafeFunction : public node::AsyncResource { } void EmptyQueueAndDelete() { - for (; !queue.empty() ; queue.pop()) { + for (; !queue.empty(); queue.pop()) { call_js_cb(nullptr, nullptr, context, queue.front()); } delete this; @@ -262,9 +292,7 @@ class ThreadSafeFunction : public node::AsyncResource { return napi_ok; } - inline void* Context() { - return context; - } + inline void* Context() { return context; } protected: void Dispatch() { @@ -329,12 +357,11 @@ class ThreadSafeFunction : public node::AsyncResource { napi_value js_callback = nullptr; if (!ref.IsEmpty()) { v8::Local js_cb = - v8::Local::New(env->isolate, ref); + v8::Local::New(env->isolate, ref); js_callback = v8impl::JsValueFromV8LocalValue(js_cb); } - env->CallIntoModule([&](napi_env env) { - call_js_cb(env, js_callback, context, data); - }); + env->CallbackIntoModule( + [&](napi_env env) { call_js_cb(env, js_callback, context, data); }); } return has_more; @@ -344,9 +371,10 @@ class ThreadSafeFunction : public node::AsyncResource { v8::HandleScope scope(env->isolate); if (finalize_cb) { CallbackScope cb_scope(this); - env->CallIntoModule([&](napi_env env) { - finalize_cb(env, finalize_data, context); - }); + // Do not use CallFinalizer since it will defer the invocation, which + // would lead to accessing a deleted ThreadSafeFunction. + env->CallbackIntoModule( + [&](napi_env env) { finalize_cb(env, finalize_data, context); }); } EmptyQueueAndDelete(); } @@ -393,15 +421,16 @@ class ThreadSafeFunction : public node::AsyncResource { status = napi_get_undefined(env, &recv); if (status != napi_ok) { - napi_throw_error(env, "ERR_NAPI_TSFN_GET_UNDEFINED", - "Failed to retrieve undefined value"); + napi_throw_error(env, + "ERR_NAPI_TSFN_GET_UNDEFINED", + "Failed to retrieve undefined value"); return; } status = napi_call_function(env, recv, cb, 0, nullptr, nullptr); if (status != napi_ok && status != napi_pending_exception) { - napi_throw_error(env, "ERR_NAPI_TSFN_CALL_JS", - "Failed to call JS callback"); + napi_throw_error( + env, "ERR_NAPI_TSFN_CALL_JS", "Failed to call JS callback"); return; } } @@ -414,8 +443,8 @@ class ThreadSafeFunction : public node::AsyncResource { } static void Cleanup(void* data) { - reinterpret_cast(data) - ->CloseHandlesAndMaybeDelete(true); + reinterpret_cast(data)->CloseHandlesAndMaybeDelete( + true); } private: @@ -564,7 +593,10 @@ static void napi_module_register_cb(v8::Local exports, v8::Local module, v8::Local context, void* priv) { - napi_module_register_by_symbol(exports, module, context, + napi_module_register_by_symbol( + exports, + module, + context, static_cast(priv)->nm_register_func); } @@ -576,8 +608,7 @@ void napi_module_register_by_symbol(v8::Local exports, std::string module_filename = ""; if (init == nullptr) { CHECK_NOT_NULL(node_env); - node_env->ThrowError( - "Module has no declared entry point."); + node_env->ThrowError("Module has no declared entry point."); return; } @@ -620,29 +651,28 @@ void napi_module_register_by_symbol(v8::Local exports, namespace node { node_module napi_module_to_node_module(const napi_module* mod) { return { - -1, - mod->nm_flags | NM_F_DELETEME, - nullptr, - mod->nm_filename, - nullptr, - napi_module_register_cb, - mod->nm_modname, - const_cast(mod), // priv - nullptr, + -1, + mod->nm_flags | NM_F_DELETEME, + nullptr, + mod->nm_filename, + nullptr, + napi_module_register_cb, + mod->nm_modname, + const_cast(mod), // priv + nullptr, }; } } // namespace node // Registers a NAPI module. -void napi_module_register(napi_module* mod) { - node::node_module* nm = new node::node_module( - node::napi_module_to_node_module(mod)); +void NAPI_CDECL napi_module_register(napi_module* mod) { + node::node_module* nm = + new node::node_module(node::napi_module_to_node_module(mod)); node::node_module_register(nm); } -napi_status napi_add_env_cleanup_hook(napi_env env, - void (*fun)(void* arg), - void* arg) { +napi_status NAPI_CDECL napi_add_env_cleanup_hook( + napi_env env, void(NAPI_CDECL* fun)(void* arg), void* arg) { CHECK_ENV(env); CHECK_ARG(env, fun); @@ -651,9 +681,8 @@ napi_status napi_add_env_cleanup_hook(napi_env env, return napi_ok; } -napi_status napi_remove_env_cleanup_hook(napi_env env, - void (*fun)(void* arg), - void* arg) { +napi_status NAPI_CDECL napi_remove_env_cleanup_hook( + napi_env env, void(NAPI_CDECL* fun)(void* arg), void* arg) { CHECK_ENV(env); CHECK_ARG(env, fun); @@ -665,23 +694,20 @@ napi_status napi_remove_env_cleanup_hook(napi_env env, struct napi_async_cleanup_hook_handle__ { napi_async_cleanup_hook_handle__(napi_env env, napi_async_cleanup_hook user_hook, - void* user_data): - env_(env), - user_hook_(user_hook), - user_data_(user_data) { + void* user_data) + : env_(env), user_hook_(user_hook), user_data_(user_data) { handle_ = node::AddEnvironmentCleanupHook(env->isolate, Hook, this); env->Ref(); } ~napi_async_cleanup_hook_handle__() { node::RemoveEnvironmentCleanupHook(std::move(handle_)); - if (done_cb_ != nullptr) - done_cb_(done_data_); + if (done_cb_ != nullptr) done_cb_(done_data_); // Release the `env` handle asynchronously since it would be surprising if // a call to a N-API function would destroy `env` synchronously. - static_cast(env_)->node_env() - ->SetImmediate([env = env_](node::Environment*) { env->Unref(); }); + static_cast(env_)->node_env()->SetImmediate( + [env = env_](node::Environment*) { env->Unref(); }); } static void Hook(void* data, void (*done_cb)(void*), void* done_data) { @@ -700,74 +726,68 @@ struct napi_async_cleanup_hook_handle__ { void* done_data_ = nullptr; }; -napi_status napi_add_async_cleanup_hook( - napi_env env, - napi_async_cleanup_hook hook, - void* arg, - napi_async_cleanup_hook_handle* remove_handle) { +napi_status NAPI_CDECL +napi_add_async_cleanup_hook(napi_env env, + napi_async_cleanup_hook hook, + void* arg, + napi_async_cleanup_hook_handle* remove_handle) { CHECK_ENV(env); CHECK_ARG(env, hook); napi_async_cleanup_hook_handle__* handle = - new napi_async_cleanup_hook_handle__(env, hook, arg); + new napi_async_cleanup_hook_handle__(env, hook, arg); - if (remove_handle != nullptr) - *remove_handle = handle; + if (remove_handle != nullptr) *remove_handle = handle; return napi_clear_last_error(env); } -napi_status napi_remove_async_cleanup_hook( - napi_async_cleanup_hook_handle remove_handle) { - - if (remove_handle == nullptr) - return napi_invalid_arg; +napi_status NAPI_CDECL +napi_remove_async_cleanup_hook(napi_async_cleanup_hook_handle remove_handle) { + if (remove_handle == nullptr) return napi_invalid_arg; delete remove_handle; return napi_ok; } -napi_status napi_fatal_exception(napi_env env, napi_value err) { +napi_status NAPI_CDECL napi_fatal_exception(napi_env env, napi_value err) { NAPI_PREAMBLE(env); CHECK_ARG(env, err); v8::Local local_err = v8impl::V8LocalValueFromJsValue(err); - v8impl::trigger_fatal_exception(env, local_err); + static_cast(env)->trigger_fatal_exception(local_err); return napi_clear_last_error(env); } -NAPI_NO_RETURN void napi_fatal_error(const char* location, - size_t location_len, - const char* message, - size_t message_len) { +NAPI_NO_RETURN void NAPI_CDECL napi_fatal_error(const char* location, + size_t location_len, + const char* message, + size_t message_len) { std::string location_string; std::string message_string; if (location_len != NAPI_AUTO_LENGTH) { - location_string.assign( - const_cast(location), location_len); + location_string.assign(const_cast(location), location_len); } else { - location_string.assign( - const_cast(location), strlen(location)); + location_string.assign(const_cast(location), strlen(location)); } if (message_len != NAPI_AUTO_LENGTH) { - message_string.assign( - const_cast(message), message_len); + message_string.assign(const_cast(message), message_len); } else { - message_string.assign( - const_cast(message), strlen(message)); + message_string.assign(const_cast(message), strlen(message)); } node::FatalError(location_string.c_str(), message_string.c_str()); } -napi_status napi_open_callback_scope(napi_env env, - napi_value /** ignored */, - napi_async_context async_context_handle, - napi_callback_scope* result) { +napi_status NAPI_CDECL +napi_open_callback_scope(napi_env env, + napi_value /** ignored */, + napi_async_context async_context_handle, + napi_callback_scope* result) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -781,7 +801,8 @@ napi_status napi_open_callback_scope(napi_env env, return napi_clear_last_error(env); } -napi_status napi_close_callback_scope(napi_env env, napi_callback_scope scope) { +napi_status NAPI_CDECL napi_close_callback_scope(napi_env env, + napi_callback_scope scope) { // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw // JS exceptions. CHECK_ENV(env); @@ -796,10 +817,10 @@ napi_status napi_close_callback_scope(napi_env env, napi_callback_scope scope) { return napi_clear_last_error(env); } -napi_status napi_async_init(napi_env env, - napi_value async_resource, - napi_value async_resource_name, - napi_async_context* result) { +napi_status NAPI_CDECL napi_async_init(napi_env env, + napi_value async_resource, + napi_value async_resource_name, + napi_async_context* result) { CHECK_ENV(env); CHECK_ARG(env, async_resource_name); CHECK_ARG(env, result); @@ -831,8 +852,8 @@ napi_status napi_async_init(napi_env env, return napi_clear_last_error(env); } -napi_status napi_async_destroy(napi_env env, - napi_async_context async_context) { +napi_status NAPI_CDECL napi_async_destroy(napi_env env, + napi_async_context async_context) { CHECK_ENV(env); CHECK_ARG(env, async_context); @@ -844,13 +865,13 @@ napi_status napi_async_destroy(napi_env env, return napi_clear_last_error(env); } -napi_status napi_make_callback(napi_env env, - napi_async_context async_context, - napi_value recv, - napi_value func, - size_t argc, - const napi_value* argv, - napi_value* result) { +napi_status NAPI_CDECL napi_make_callback(napi_env env, + napi_async_context async_context, + napi_value recv, + napi_value func, + size_t argc, + const napi_value* argv, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, recv); if (argc > 0) { @@ -890,18 +911,18 @@ napi_status napi_make_callback(napi_env env, } else { CHECK_MAYBE_EMPTY(env, callback_result, napi_generic_failure); if (result != nullptr) { - *result = v8impl::JsValueFromV8LocalValue( - callback_result.ToLocalChecked()); + *result = + v8impl::JsValueFromV8LocalValue(callback_result.ToLocalChecked()); } } return GET_RETURN_STATUS(env); } -napi_status napi_create_buffer(napi_env env, - size_t length, - void** data, - napi_value* result) { +napi_status NAPI_CDECL napi_create_buffer(napi_env env, + size_t length, + void** data, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); @@ -920,28 +941,35 @@ napi_status napi_create_buffer(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_create_external_buffer(napi_env env, - size_t length, - void* data, - napi_finalize finalize_cb, - void* finalize_hint, - napi_value* result) { +napi_status NAPI_CDECL napi_create_external_buffer(napi_env env, + size_t length, + void* data, + napi_finalize finalize_cb, + void* finalize_hint, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); +#if defined(V8_ENABLE_SANDBOX) + return napi_set_last_error(env, napi_no_external_buffers_allowed); +#endif + v8::Isolate* isolate = env->isolate; // The finalizer object will delete itself after invoking the callback. - v8impl::Finalizer* finalizer = v8impl::Finalizer::New( - env, finalize_cb, nullptr, finalize_hint, - v8impl::Finalizer::kKeepEnvReference); - - v8::MaybeLocal maybe = node::Buffer::New( - isolate, - static_cast(data), - length, - v8impl::BufferFinalizer::FinalizeBufferCallback, - finalizer); + v8impl::Finalizer* finalizer = + v8impl::Finalizer::New(env, + finalize_cb, + nullptr, + finalize_hint, + v8impl::Finalizer::kKeepEnvReference); + + v8::MaybeLocal maybe = + node::Buffer::New(isolate, + static_cast(data), + length, + v8impl::BufferFinalizer::FinalizeBufferCallback, + finalizer); CHECK_MAYBE_EMPTY(env, maybe, napi_generic_failure); @@ -953,17 +981,16 @@ napi_status napi_create_external_buffer(napi_env env, // coverity[leaked_storage] } -napi_status napi_create_buffer_copy(napi_env env, - size_t length, - const void* data, - void** result_data, - napi_value* result) { +napi_status NAPI_CDECL napi_create_buffer_copy(napi_env env, + size_t length, + const void* data, + void** result_data, + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); - v8::MaybeLocal maybe = node::Buffer::Copy( - env->isolate, - static_cast(data), length); + v8::MaybeLocal maybe = + node::Buffer::Copy(env->isolate, static_cast(data), length); CHECK_MAYBE_EMPTY(env, maybe, napi_generic_failure); @@ -977,7 +1004,9 @@ napi_status napi_create_buffer_copy(napi_env env, return GET_RETURN_STATUS(env); } -napi_status napi_is_buffer(napi_env env, napi_value value, bool* result) { +napi_status NAPI_CDECL napi_is_buffer(napi_env env, + napi_value value, + bool* result) { CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, result); @@ -986,10 +1015,10 @@ napi_status napi_is_buffer(napi_env env, napi_value value, bool* result) { return napi_clear_last_error(env); } -napi_status napi_get_buffer_info(napi_env env, - napi_value value, - void** data, - size_t* length) { +napi_status NAPI_CDECL napi_get_buffer_info(napi_env env, + napi_value value, + void** data, + size_t* length) { CHECK_ENV(env); CHECK_ARG(env, value); @@ -1005,16 +1034,12 @@ napi_status napi_get_buffer_info(napi_env env, return napi_clear_last_error(env); } -napi_status napi_get_node_version(napi_env env, - const napi_node_version** result) { +napi_status NAPI_CDECL napi_get_node_version(napi_env env, + const napi_node_version** result) { CHECK_ENV(env); CHECK_ARG(env, result); static const napi_node_version version = { - NODE_MAJOR_VERSION, - NODE_MINOR_VERSION, - NODE_PATCH_VERSION, - NODE_RELEASE - }; + NODE_MAJOR_VERSION, NODE_MINOR_VERSION, NODE_PATCH_VERSION, NODE_RELEASE}; *result = &version; return napi_clear_last_error(env); } @@ -1044,15 +1069,15 @@ class Work : public node::AsyncResource, public node::ThreadPoolWork { napi_async_execute_callback execute, napi_async_complete_callback complete = nullptr, void* data = nullptr) - : AsyncResource(env->isolate, - async_resource, - *v8::String::Utf8Value(env->isolate, async_resource_name)), - ThreadPoolWork(env->node_env()), - _env(env), - _data(data), - _execute(execute), - _complete(complete) { - } + : AsyncResource( + env->isolate, + async_resource, + *v8::String::Utf8Value(env->isolate, async_resource_name)), + ThreadPoolWork(env->node_env()), + _env(env), + _data(data), + _execute(execute), + _complete(complete) {} ~Work() override = default; @@ -1063,21 +1088,16 @@ class Work : public node::AsyncResource, public node::ThreadPoolWork { napi_async_execute_callback execute, napi_async_complete_callback complete, void* data) { - return new Work(env, async_resource, async_resource_name, - execute, complete, data); + return new Work( + env, async_resource, async_resource_name, execute, complete, data); } - static void Delete(Work* work) { - delete work; - } + static void Delete(Work* work) { delete work; } - void DoThreadPoolWork() override { - _execute(_env, _data); - } + void DoThreadPoolWork() override { _execute(_env, _data); } void AfterThreadPoolWork(int status) override { - if (_complete == nullptr) - return; + if (_complete == nullptr) return; // Establish a handle scope here so that every callback doesn't have to. // Also it is needed for the exception-handling below. @@ -1085,13 +1105,8 @@ class Work : public node::AsyncResource, public node::ThreadPoolWork { CallbackScope callback_scope(this); - _env->CallIntoModule([&](napi_env env) { + _env->CallbackIntoModule([&](napi_env env) { _complete(env, ConvertUVErrorCode(status), _data); - }, [](napi_env env, v8::Local local_err) { - // If there was an unhandled exception in the complete callback, - // report it as a fatal exception. (There is no JavaScript on the - // callstack that can possibly handle it.) - v8impl::trigger_fatal_exception(env, local_err); }); // Note: Don't access `work` after this point because it was @@ -1108,22 +1123,23 @@ class Work : public node::AsyncResource, public node::ThreadPoolWork { } // end of namespace uvimpl } // end of anonymous namespace -#define CALL_UV(env, condition) \ - do { \ - int result = (condition); \ - napi_status status = uvimpl::ConvertUVErrorCode(result); \ - if (status != napi_ok) { \ - return napi_set_last_error(env, status, result); \ - } \ +#define CALL_UV(env, condition) \ + do { \ + int result = (condition); \ + napi_status status = uvimpl::ConvertUVErrorCode(result); \ + if (status != napi_ok) { \ + return napi_set_last_error(env, status, result); \ + } \ } while (0) -napi_status napi_create_async_work(napi_env env, - napi_value async_resource, - napi_value async_resource_name, - napi_async_execute_callback execute, - napi_async_complete_callback complete, - void* data, - napi_async_work* result) { +napi_status NAPI_CDECL +napi_create_async_work(napi_env env, + napi_value async_resource, + napi_value async_resource_name, + napi_async_execute_callback execute, + napi_async_complete_callback complete, + void* data, + napi_async_work* result) { CHECK_ENV(env); CHECK_ARG(env, execute); CHECK_ARG(env, result); @@ -1152,7 +1168,8 @@ napi_status napi_create_async_work(napi_env env, return napi_clear_last_error(env); } -napi_status napi_delete_async_work(napi_env env, napi_async_work work) { +napi_status NAPI_CDECL napi_delete_async_work(napi_env env, + napi_async_work work) { CHECK_ENV(env); CHECK_ARG(env, work); @@ -1161,14 +1178,15 @@ napi_status napi_delete_async_work(napi_env env, napi_async_work work) { return napi_clear_last_error(env); } -napi_status napi_get_uv_event_loop(napi_env env, uv_loop_t** loop) { +napi_status NAPI_CDECL napi_get_uv_event_loop(napi_env env, uv_loop_t** loop) { CHECK_ENV(env); CHECK_ARG(env, loop); *loop = reinterpret_cast(env)->node_env()->event_loop(); return napi_clear_last_error(env); } -napi_status napi_queue_async_work(napi_env env, napi_async_work work) { +napi_status NAPI_CDECL napi_queue_async_work(napi_env env, + napi_async_work work) { CHECK_ENV(env); CHECK_ARG(env, work); @@ -1182,7 +1200,8 @@ napi_status napi_queue_async_work(napi_env env, napi_async_work work) { return napi_clear_last_error(env); } -napi_status napi_cancel_async_work(napi_env env, napi_async_work work) { +napi_status NAPI_CDECL napi_cancel_async_work(napi_env env, + napi_async_work work) { CHECK_ENV(env); CHECK_ARG(env, work); @@ -1193,7 +1212,7 @@ napi_status napi_cancel_async_work(napi_env env, napi_async_work work) { return napi_clear_last_error(env); } -napi_status +napi_status NAPI_CDECL napi_create_threadsafe_function(napi_env env, napi_value func, napi_value async_resource, @@ -1256,9 +1275,8 @@ napi_create_threadsafe_function(napi_env env, return napi_set_last_error(env, status); } -napi_status -napi_get_threadsafe_function_context(napi_threadsafe_function func, - void** result) { +napi_status NAPI_CDECL napi_get_threadsafe_function_context( + napi_threadsafe_function func, void** result) { CHECK_NOT_NULL(func); CHECK_NOT_NULL(result); @@ -1266,7 +1284,7 @@ napi_get_threadsafe_function_context(napi_threadsafe_function func, return napi_ok; } -napi_status +napi_status NAPI_CDECL napi_call_threadsafe_function(napi_threadsafe_function func, void* data, napi_threadsafe_function_call_mode is_blocking) { @@ -1275,32 +1293,32 @@ napi_call_threadsafe_function(napi_threadsafe_function func, is_blocking); } -napi_status +napi_status NAPI_CDECL napi_acquire_threadsafe_function(napi_threadsafe_function func) { CHECK_NOT_NULL(func); return reinterpret_cast(func)->Acquire(); } -napi_status -napi_release_threadsafe_function(napi_threadsafe_function func, - napi_threadsafe_function_release_mode mode) { +napi_status NAPI_CDECL napi_release_threadsafe_function( + napi_threadsafe_function func, napi_threadsafe_function_release_mode mode) { CHECK_NOT_NULL(func); return reinterpret_cast(func)->Release(mode); } -napi_status +napi_status NAPI_CDECL napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func) { CHECK_NOT_NULL(func); return reinterpret_cast(func)->Unref(); } -napi_status +napi_status NAPI_CDECL napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func) { CHECK_NOT_NULL(func); return reinterpret_cast(func)->Ref(); } -napi_status node_api_get_module_file_name(napi_env env, const char** result) { +napi_status NAPI_CDECL node_api_get_module_file_name(napi_env env, + const char** result) { CHECK_ENV(env); CHECK_ARG(env, result); diff --git a/src/node_api.h b/src/node_api.h index 1772c67c15a..8e6af2cf284 100644 --- a/src/node_api.h +++ b/src/node_api.h @@ -2,12 +2,12 @@ #define SRC_NODE_API_H_ #ifdef BUILDING_NODE_EXTENSION - #ifdef _WIN32 - // Building native module against node - #define NAPI_EXTERN __declspec(dllimport) - #elif defined(__wasm32__) - #define NAPI_EXTERN __attribute__((__import_module__("napi"))) - #endif +#ifdef _WIN32 +// Building native addon against node +#define NAPI_EXTERN __declspec(dllimport) +#elif defined(__wasm32__) +#define NAPI_EXTERN __attribute__((__import_module__("napi"))) +#endif #endif #include "js_native_api.h" #include "node_api_types.h" @@ -15,21 +15,21 @@ struct uv_loop_s; // Forward declaration. #ifdef _WIN32 -# define NAPI_MODULE_EXPORT __declspec(dllexport) +#define NAPI_MODULE_EXPORT __declspec(dllexport) #else -# define NAPI_MODULE_EXPORT __attribute__((visibility("default"))) +#define NAPI_MODULE_EXPORT __attribute__((visibility("default"))) #endif #if defined(__GNUC__) -# define NAPI_NO_RETURN __attribute__((noreturn)) +#define NAPI_NO_RETURN __attribute__((noreturn)) #elif defined(_WIN32) -# define NAPI_NO_RETURN __declspec(noreturn) +#define NAPI_NO_RETURN __declspec(noreturn) #else -# define NAPI_NO_RETURN +#define NAPI_NO_RETURN #endif -typedef napi_value (*napi_addon_register_func)(napi_env env, - napi_value exports); +typedef napi_value(NAPI_CDECL* napi_addon_register_func)(napi_env env, + napi_value exports); typedef struct napi_module { int nm_version; @@ -41,36 +41,50 @@ typedef struct napi_module { void* reserved[4]; } napi_module; -#define NAPI_MODULE_VERSION 1 +#define NAPI_MODULE_VERSION 1 #if defined(_MSC_VER) +#if defined(__cplusplus) +#define NAPI_C_CTOR(fn) \ + static void NAPI_CDECL fn(void); \ + namespace { \ + struct fn##_ { \ + fn##_() { fn(); } \ + } fn##_v_; \ + } \ + static void NAPI_CDECL fn(void) +#else // !defined(__cplusplus) #pragma section(".CRT$XCU", read) -#define NAPI_C_CTOR(fn) \ - static void __cdecl fn(void); \ - __declspec(dllexport, allocate(".CRT$XCU")) void(__cdecl * fn##_)(void) = \ - fn; \ - static void __cdecl fn(void) +// The NAPI_C_CTOR macro defines a function fn that is called during CRT +// initialization. +// C does not support dynamic initialization of static variables and this code +// simulates C++ behavior. Exporting the function pointer prevents it from being +// optimized. See for details: +// https://docs.microsoft.com/en-us/cpp/c-runtime-library/crt-initialization?view=msvc-170 +#define NAPI_C_CTOR(fn) \ + static void NAPI_CDECL fn(void); \ + __declspec(dllexport, allocate(".CRT$XCU")) void(NAPI_CDECL * fn##_)(void) = \ + fn; \ + static void NAPI_CDECL fn(void) +#endif // defined(__cplusplus) #else -#define NAPI_C_CTOR(fn) \ - static void fn(void) __attribute__((constructor)); \ +#define NAPI_C_CTOR(fn) \ + static void fn(void) __attribute__((constructor)); \ static void fn(void) #endif -#define NAPI_MODULE_X(modname, regfunc, priv, flags) \ - EXTERN_C_START \ - static napi_module _module = \ - { \ - NAPI_MODULE_VERSION, \ - flags, \ - __FILE__, \ - regfunc, \ - #modname, \ - priv, \ - {0}, \ - }; \ - NAPI_C_CTOR(_register_ ## modname) { \ - napi_module_register(&_module); \ - } \ +#define NAPI_MODULE_X(modname, regfunc, priv, flags) \ + EXTERN_C_START \ + static napi_module _module = { \ + NAPI_MODULE_VERSION, \ + flags, \ + __FILE__, \ + regfunc, \ + #modname, \ + priv, \ + {0}, \ + }; \ + NAPI_C_CTOR(_register_##modname) { napi_module_register(&_module); } \ EXTERN_C_END #define NAPI_MODULE_INITIALIZER_X(base, version) \ @@ -88,123 +102,126 @@ typedef struct napi_module { } \ EXTERN_C_END #else -#define NAPI_MODULE(modname, regfunc) \ +#define NAPI_MODULE(modname, regfunc) \ NAPI_MODULE_X(modname, regfunc, NULL, 0) // NOLINT (readability/null_usage) #endif #define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v -#define NAPI_MODULE_INITIALIZER \ - NAPI_MODULE_INITIALIZER_X(NAPI_MODULE_INITIALIZER_BASE, \ - NAPI_MODULE_VERSION) +#define NAPI_MODULE_INITIALIZER \ + NAPI_MODULE_INITIALIZER_X(NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION) -#define NAPI_MODULE_INIT() \ - EXTERN_C_START \ - NAPI_MODULE_EXPORT napi_value \ - NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports); \ - EXTERN_C_END \ - NAPI_MODULE(NODE_GYP_MODULE_NAME, NAPI_MODULE_INITIALIZER) \ - napi_value NAPI_MODULE_INITIALIZER(napi_env env, \ - napi_value exports) +#define NAPI_MODULE_INIT() \ + EXTERN_C_START \ + NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER(napi_env env, \ + napi_value exports); \ + EXTERN_C_END \ + NAPI_MODULE(NODE_GYP_MODULE_NAME, NAPI_MODULE_INITIALIZER) \ + napi_value NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports) EXTERN_C_START -NAPI_EXTERN void napi_module_register(napi_module* mod); +NAPI_EXTERN void NAPI_CDECL napi_module_register(napi_module* mod); -NAPI_EXTERN NAPI_NO_RETURN void napi_fatal_error(const char* location, - size_t location_len, - const char* message, - size_t message_len); +NAPI_EXTERN NAPI_NO_RETURN void NAPI_CDECL +napi_fatal_error(const char* location, + size_t location_len, + const char* message, + size_t message_len); // Methods for custom handling of async operations -NAPI_EXTERN napi_status napi_async_init(napi_env env, - napi_value async_resource, - napi_value async_resource_name, - napi_async_context* result); - -NAPI_EXTERN napi_status napi_async_destroy(napi_env env, - napi_async_context async_context); - -NAPI_EXTERN napi_status napi_make_callback(napi_env env, - napi_async_context async_context, - napi_value recv, - napi_value func, - size_t argc, - const napi_value* argv, - napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_async_init(napi_env env, + napi_value async_resource, + napi_value async_resource_name, + napi_async_context* result); + +NAPI_EXTERN napi_status NAPI_CDECL +napi_async_destroy(napi_env env, napi_async_context async_context); + +NAPI_EXTERN napi_status NAPI_CDECL +napi_make_callback(napi_env env, + napi_async_context async_context, + napi_value recv, + napi_value func, + size_t argc, + const napi_value* argv, + napi_value* result); // Methods to provide node::Buffer functionality with napi types -NAPI_EXTERN napi_status napi_create_buffer(napi_env env, - size_t length, - void** data, - napi_value* result); -NAPI_EXTERN napi_status napi_create_external_buffer(napi_env env, - size_t length, - void* data, - napi_finalize finalize_cb, - void* finalize_hint, - napi_value* result); -NAPI_EXTERN napi_status napi_create_buffer_copy(napi_env env, - size_t length, - const void* data, - void** result_data, - napi_value* result); -NAPI_EXTERN napi_status napi_is_buffer(napi_env env, - napi_value value, - bool* result); -NAPI_EXTERN napi_status napi_get_buffer_info(napi_env env, - napi_value value, - void** data, - size_t* length); +NAPI_EXTERN napi_status NAPI_CDECL napi_create_buffer(napi_env env, + size_t length, + void** data, + napi_value* result); +#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED +NAPI_EXTERN napi_status NAPI_CDECL +napi_create_external_buffer(napi_env env, + size_t length, + void* data, + napi_finalize finalize_cb, + void* finalize_hint, + napi_value* result); +#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED +NAPI_EXTERN napi_status NAPI_CDECL napi_create_buffer_copy(napi_env env, + size_t length, + const void* data, + void** result_data, + napi_value* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_is_buffer(napi_env env, + napi_value value, + bool* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_buffer_info(napi_env env, + napi_value value, + void** data, + size_t* length); // Methods to manage simple async operations -NAPI_EXTERN -napi_status napi_create_async_work(napi_env env, - napi_value async_resource, - napi_value async_resource_name, - napi_async_execute_callback execute, - napi_async_complete_callback complete, - void* data, - napi_async_work* result); -NAPI_EXTERN napi_status napi_delete_async_work(napi_env env, - napi_async_work work); -NAPI_EXTERN napi_status napi_queue_async_work(napi_env env, - napi_async_work work); -NAPI_EXTERN napi_status napi_cancel_async_work(napi_env env, - napi_async_work work); +NAPI_EXTERN napi_status NAPI_CDECL +napi_create_async_work(napi_env env, + napi_value async_resource, + napi_value async_resource_name, + napi_async_execute_callback execute, + napi_async_complete_callback complete, + void* data, + napi_async_work* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_delete_async_work(napi_env env, + napi_async_work work); +NAPI_EXTERN napi_status NAPI_CDECL napi_queue_async_work(napi_env env, + napi_async_work work); +NAPI_EXTERN napi_status NAPI_CDECL napi_cancel_async_work(napi_env env, + napi_async_work work); // version management -NAPI_EXTERN -napi_status napi_get_node_version(napi_env env, - const napi_node_version** version); +NAPI_EXTERN napi_status NAPI_CDECL +napi_get_node_version(napi_env env, const napi_node_version** version); #if NAPI_VERSION >= 2 // Return the current libuv event loop for a given environment -NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env, - struct uv_loop_s** loop); +NAPI_EXTERN napi_status NAPI_CDECL +napi_get_uv_event_loop(napi_env env, struct uv_loop_s** loop); #endif // NAPI_VERSION >= 2 #if NAPI_VERSION >= 3 -NAPI_EXTERN napi_status napi_fatal_exception(napi_env env, napi_value err); +NAPI_EXTERN napi_status NAPI_CDECL napi_fatal_exception(napi_env env, + napi_value err); -NAPI_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env, - void (*fun)(void* arg), - void* arg); +NAPI_EXTERN napi_status NAPI_CDECL napi_add_env_cleanup_hook( + napi_env env, void(NAPI_CDECL* fun)(void* arg), void* arg); -NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env, - void (*fun)(void* arg), - void* arg); +NAPI_EXTERN napi_status NAPI_CDECL napi_remove_env_cleanup_hook( + napi_env env, void(NAPI_CDECL* fun)(void* arg), void* arg); -NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env, - napi_value resource_object, - napi_async_context context, - napi_callback_scope* result); +NAPI_EXTERN napi_status NAPI_CDECL +napi_open_callback_scope(napi_env env, + napi_value resource_object, + napi_async_context context, + napi_callback_scope* result); -NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env, - napi_callback_scope scope); +NAPI_EXTERN napi_status NAPI_CDECL +napi_close_callback_scope(napi_env env, napi_callback_scope scope); #endif // NAPI_VERSION >= 3 @@ -212,7 +229,7 @@ NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env, #ifndef __wasm32__ // Calling into JS from other threads -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL napi_create_threadsafe_function(napi_env env, napi_value func, napi_value async_resource, @@ -225,26 +242,24 @@ napi_create_threadsafe_function(napi_env env, napi_threadsafe_function_call_js call_js_cb, napi_threadsafe_function* result); -NAPI_EXTERN napi_status -napi_get_threadsafe_function_context(napi_threadsafe_function func, - void** result); +NAPI_EXTERN napi_status NAPI_CDECL napi_get_threadsafe_function_context( + napi_threadsafe_function func, void** result); -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL napi_call_threadsafe_function(napi_threadsafe_function func, void* data, napi_threadsafe_function_call_mode is_blocking); -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL napi_acquire_threadsafe_function(napi_threadsafe_function func); -NAPI_EXTERN napi_status -napi_release_threadsafe_function(napi_threadsafe_function func, - napi_threadsafe_function_release_mode mode); +NAPI_EXTERN napi_status NAPI_CDECL napi_release_threadsafe_function( + napi_threadsafe_function func, napi_threadsafe_function_release_mode mode); -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func); -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func); #endif // __wasm32__ @@ -252,20 +267,20 @@ napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func); #if NAPI_VERSION >= 8 -NAPI_EXTERN napi_status napi_add_async_cleanup_hook( - napi_env env, - napi_async_cleanup_hook hook, - void* arg, - napi_async_cleanup_hook_handle* remove_handle); +NAPI_EXTERN napi_status NAPI_CDECL +napi_add_async_cleanup_hook(napi_env env, + napi_async_cleanup_hook hook, + void* arg, + napi_async_cleanup_hook_handle* remove_handle); -NAPI_EXTERN napi_status napi_remove_async_cleanup_hook( - napi_async_cleanup_hook_handle remove_handle); +NAPI_EXTERN napi_status NAPI_CDECL +napi_remove_async_cleanup_hook(napi_async_cleanup_hook_handle remove_handle); #endif // NAPI_VERSION >= 8 #ifdef NAPI_EXPERIMENTAL -NAPI_EXTERN napi_status +NAPI_EXTERN napi_status NAPI_CDECL node_api_get_module_file_name(napi_env env, const char** result); #endif // NAPI_EXPERIMENTAL diff --git a/src/node_api_internals.h b/src/node_api_internals.h index 318ada38083..de5d9dc0804 100644 --- a/src/node_api_internals.h +++ b/src/node_api_internals.h @@ -16,6 +16,14 @@ struct node_napi_env__ : public napi_env__ { v8::Maybe mark_arraybuffer_as_untransferable( v8::Local ab) const override; void CallFinalizer(napi_finalize cb, void* data, void* hint) override; + template + void CallFinalizer(napi_finalize cb, void* data, void* hint); + + void trigger_fatal_exception(v8::Local local_err); + template + void CallbackIntoModule(T&& call); + + void DeleteMe() override; inline node::Environment* node_env() const { return node::Environment::GetCurrent(context()); @@ -23,6 +31,7 @@ struct node_napi_env__ : public napi_env__ { inline const char* GetFilename() const { return filename.c_str(); } std::string filename; + bool destructing = false; }; using node_napi_env = node_napi_env__*; diff --git a/src/node_api_types.h b/src/node_api_types.h index 58ffc61b3a5..4231994748a 100644 --- a/src/node_api_types.h +++ b/src/node_api_types.h @@ -22,16 +22,13 @@ typedef enum { } napi_threadsafe_function_call_mode; #endif // NAPI_VERSION >= 4 -typedef void (*napi_async_execute_callback)(napi_env env, - void* data); -typedef void (*napi_async_complete_callback)(napi_env env, - napi_status status, - void* data); +typedef void(NAPI_CDECL* napi_async_execute_callback)(napi_env env, void* data); +typedef void(NAPI_CDECL* napi_async_complete_callback)(napi_env env, + napi_status status, + void* data); #if NAPI_VERSION >= 4 -typedef void (*napi_threadsafe_function_call_js)(napi_env env, - napi_value js_callback, - void* context, - void* data); +typedef void(NAPI_CDECL* napi_threadsafe_function_call_js)( + napi_env env, napi_value js_callback, void* context, void* data); #endif // NAPI_VERSION >= 4 typedef struct { @@ -43,8 +40,8 @@ typedef struct { #if NAPI_VERSION >= 8 typedef struct napi_async_cleanup_hook_handle__* napi_async_cleanup_hook_handle; -typedef void (*napi_async_cleanup_hook)(napi_async_cleanup_hook_handle handle, - void* data); +typedef void(NAPI_CDECL* napi_async_cleanup_hook)( + napi_async_cleanup_hook_handle handle, void* data); #endif // NAPI_VERSION >= 8 #endif // SRC_NODE_API_TYPES_H_ diff --git a/src/node_binding.cc b/src/node_binding.cc index 050c5dff0ad..908f8fd4eb1 100644 --- a/src/node_binding.cc +++ b/src/node_binding.cc @@ -1,9 +1,10 @@ #include "node_binding.h" #include #include "env-inl.h" +#include "node_builtins.h" #include "node_errors.h" #include "node_external_reference.h" -#include "node_native_module_env.h" +#include "node_builtins_env.h" #include "util.h" #include @@ -39,10 +40,12 @@ // node is built as static library. No need to depend on the // __attribute__((constructor)) like mechanism in GCC. #define NODE_BUILTIN_STANDARD_MODULES(V) \ + V(st_require_cache) \ V(async_wrap) \ V(blob) \ V(block_list) \ V(buffer) \ + V(builtins) \ V(cares_wrap) \ V(config) \ V(contextify) \ @@ -59,7 +62,7 @@ V(js_udp_wrap) \ V(messaging) \ V(module_wrap) \ - V(native_module) \ + V(mksnapshot) \ V(options) \ V(os) \ V(performance) \ @@ -86,8 +89,8 @@ V(uv) \ V(v8) \ V(wasi) \ - V(worker) \ V(watchdog) \ + V(worker) \ V(zlib) #define NODE_BUILTIN_MODULES(V) \ @@ -464,7 +467,7 @@ void DLOpen(const FunctionCallbackInfo& args) { // Windows needs to add the filename into the error message errmsg += *filename; #endif // _WIN32 - THROW_ERR_DLOPEN_FAILED(env, errmsg.c_str()); + THROW_ERR_DLOPEN_FAILED(env, "%s", errmsg.c_str()); return false; } @@ -489,12 +492,8 @@ void DLOpen(const FunctionCallbackInfo& args) { mp = dlib->GetSavedModuleFromGlobalHandleMap(); if (mp == nullptr || mp->nm_context_register_func == nullptr) { dlib->Close(); - char errmsg[1024]; - snprintf(errmsg, - sizeof(errmsg), - "Module did not self-register: '%s'.", - *filename); - THROW_ERR_DLOPEN_FAILED(env, errmsg); + THROW_ERR_DLOPEN_FAILED( + env, "Module did not self-register: '%s'.", *filename); return false; } } @@ -509,23 +508,22 @@ void DLOpen(const FunctionCallbackInfo& args) { callback(exports, module, context); return true; } - char errmsg[1024]; - snprintf(errmsg, - sizeof(errmsg), - "The module '%s'" - "\nwas compiled against a different Node.js version using" - "\nNODE_MODULE_VERSION %d. This version of Node.js requires" - "\nNODE_MODULE_VERSION %d. Please try re-compiling or " - "re-installing\nthe module (for instance, using `npm rebuild` " - "or `npm install`).", - *filename, - mp->nm_version, - NODE_MODULE_VERSION); + const int actual_nm_version = mp->nm_version; // NOTE: `mp` is allocated inside of the shared library's memory, calling // `dlclose` will deallocate it dlib->Close(); - THROW_ERR_DLOPEN_FAILED(env, errmsg); + THROW_ERR_DLOPEN_FAILED( + env, + "The module '%s'" + "\nwas compiled against a different Node.js version using" + "\nNODE_MODULE_VERSION %d. This version of Node.js requires" + "\nNODE_MODULE_VERSION %d. Please try re-compiling or " + "re-installing\nthe module (for instance, using `npm rebuild` " + "or `npm install`).", + *filename, + actual_nm_version, + NODE_MODULE_VERSION); return false; } CHECK_EQ(mp->nm_flags & NM_F_BUILTIN, 0); @@ -596,19 +594,16 @@ void GetInternalBinding(const FunctionCallbackInfo& args) { exports->SetPrototype(env->context(), Null(env->isolate())).FromJust()); DefineConstants(env->isolate(), exports); } else if (!strcmp(*module_v, "natives")) { - exports = native_module::NativeModuleEnv::GetSourceObject(env->context()); + exports = builtins::BuiltinEnv::GetSourceObject(env->context()); // Legacy feature: process.binding('natives').config contains stringified // config.gypi CHECK(exports ->Set(env->context(), env->config_string(), - native_module::NativeModuleEnv::GetConfigString( - env->isolate())) + builtins::BuiltinEnv::GetConfigString(env->isolate())) .FromJust()); } else { - char errmsg[1024]; - snprintf(errmsg, sizeof(errmsg), "No such module: %s", *module_v); - return THROW_ERR_INVALID_MODULE(env, errmsg); + return THROW_ERR_INVALID_MODULE(env, "No such module: %s", *module_v); } args.GetReturnValue().Set(exports); @@ -638,12 +633,8 @@ void GetLinkedBinding(const FunctionCallbackInfo& args) { mod = FindModule(modlist_linked, name, NM_F_LINKED); if (mod == nullptr) { - char errmsg[1024]; - snprintf(errmsg, - sizeof(errmsg), - "No such module was linked: %s", - *module_name_v); - return THROW_ERR_INVALID_MODULE(env, errmsg); + return THROW_ERR_INVALID_MODULE( + env, "No such module was linked: %s", *module_name_v); } Local module = Object::New(env->isolate()); diff --git a/src/node_blob.cc b/src/node_blob.cc index ee61437f402..25a3dd7639e 100644 --- a/src/node_blob.cc +++ b/src/node_blob.cc @@ -22,6 +22,7 @@ using v8::Function; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; +using v8::Isolate; using v8::Local; using v8::MaybeLocal; using v8::Number; @@ -42,24 +43,25 @@ void Blob::Initialize( env->AddBindingData(context, target); if (binding_data == nullptr) return; - env->SetMethod(target, "createBlob", New); - env->SetMethod(target, "storeDataObject", StoreDataObject); - env->SetMethod(target, "getDataObject", GetDataObject); - env->SetMethod(target, "revokeDataObject", RevokeDataObject); + SetMethod(context, target, "createBlob", New); + SetMethod(context, target, "storeDataObject", StoreDataObject); + SetMethod(context, target, "getDataObject", GetDataObject); + SetMethod(context, target, "revokeDataObject", RevokeDataObject); FixedSizeBlobCopyJob::Initialize(env, target); } Local Blob::GetConstructorTemplate(Environment* env) { Local tmpl = env->blob_constructor_template(); if (tmpl.IsEmpty()) { - tmpl = FunctionTemplate::New(env->isolate()); + Isolate* isolate = env->isolate(); + tmpl = NewFunctionTemplate(isolate, nullptr); tmpl->InstanceTemplate()->SetInternalFieldCount( BaseObject::kInternalFieldCount); tmpl->Inherit(BaseObject::GetConstructorTemplate(env)); tmpl->SetClassName( FIXED_ONE_BYTE_STRING(env->isolate(), "Blob")); - env->SetProtoMethod(tmpl, "toArrayBuffer", ToArrayBuffer); - env->SetProtoMethod(tmpl, "slice", ToSlice); + SetProtoMethod(isolate, tmpl, "toArrayBuffer", ToArrayBuffer); + SetProtoMethod(isolate, tmpl, "slice", ToSlice); env->set_blob_constructor_template(tmpl); } return tmpl; @@ -69,11 +71,9 @@ bool Blob::HasInstance(Environment* env, v8::Local object) { return GetConstructorTemplate(env)->HasInstance(object); } -BaseObjectPtr Blob::Create( - Environment* env, - const std::vector store, - size_t length) { - +BaseObjectPtr Blob::Create(Environment* env, + const std::vector& store, + size_t length) { HandleScope scope(env->isolate()); Local ctor; @@ -362,12 +362,13 @@ void FixedSizeBlobCopyJob::MemoryInfo(MemoryTracker* tracker) const { } void FixedSizeBlobCopyJob::Initialize(Environment* env, Local target) { - v8::Local job = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + v8::Local job = NewFunctionTemplate(isolate, New); job->Inherit(AsyncWrap::GetConstructorTemplate(env)); job->InstanceTemplate()->SetInternalFieldCount( AsyncWrap::kInternalFieldCount); - env->SetProtoMethod(job, "run", Run); - env->SetConstructorFunction(target, "FixedSizeBlobCopyJob", job); + SetProtoMethod(isolate, job, "run", Run); + SetConstructorFunction(env->context(), target, "FixedSizeBlobCopyJob", job); } void FixedSizeBlobCopyJob::New(const FunctionCallbackInfo& args) { @@ -464,7 +465,7 @@ void BlobBindingData::Deserialize( Local holder, int index, InternalFieldInfo* info) { - DCHECK_EQ(index, BaseObject::kSlot); + DCHECK_EQ(index, BaseObject::kEmbedderType); HandleScope scope(context->GetIsolate()); Environment* env = Environment::GetCurrent(context); BlobBindingData* binding = @@ -479,7 +480,7 @@ void BlobBindingData::PrepareForSerialization( } InternalFieldInfo* BlobBindingData::Serialize(int index) { - DCHECK_EQ(index, BaseObject::kSlot); + DCHECK_EQ(index, BaseObject::kEmbedderType); InternalFieldInfo* info = InternalFieldInfo::New(type()); return info; } diff --git a/src/node_blob.h b/src/node_blob.h index 61f4da655c9..a1f7293bfff 100644 --- a/src/node_blob.h +++ b/src/node_blob.h @@ -45,16 +45,13 @@ class Blob : public BaseObject { static v8::Local GetConstructorTemplate( Environment* env); - static BaseObjectPtr Create( - Environment* env, - const std::vector store, - size_t length); + static BaseObjectPtr Create(Environment* env, + const std::vector& store, + size_t length); static bool HasInstance(Environment* env, v8::Local object); - const std::vector entries() const { - return store_; - } + const std::vector& entries() const { return store_; } void MemoryInfo(MemoryTracker* tracker) const override; SET_MEMORY_INFO_NAME(Blob) diff --git a/src/node_buffer.cc b/src/node_buffer.cc index 215bd8003aa..9094fd121e5 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -20,7 +20,6 @@ // USE OR OTHER DEALINGS IN THE SOFTWARE. #include "node_buffer.h" -#include "allocated_buffer-inl.h" #include "node.h" #include "node_blob.h" #include "node_errors.h" @@ -498,12 +497,25 @@ MaybeLocal New(Environment* env, if (length > kMaxLength) { Isolate* isolate(env->isolate()); isolate->ThrowException(ERR_BUFFER_TOO_LARGE(isolate)); + free(data); return Local(); } } - auto free_callback = [](char* data, void* hint) { free(data); }; - return New(env, data, length, free_callback, nullptr); + EscapableHandleScope handle_scope(env->isolate()); + + auto free_callback = [](void* data, size_t length, void* deleter_data) { + free(data); + }; + std::unique_ptr bs = + v8::ArrayBuffer::NewBackingStore(data, length, free_callback, nullptr); + + Local ab = v8::ArrayBuffer::New(env->isolate(), std::move(bs)); + + Local obj; + if (Buffer::New(env, ab, 0, length).ToLocal(&obj)) + return handle_scope.Escape(obj); + return Local(); } namespace { @@ -655,12 +667,8 @@ void Fill(const FunctionCallbackInfo& args) { // Write initial String to Buffer, then use that memory to copy remainder // of string. Correct the string length for cases like HEX where less than // the total string length is written. - str_length = StringBytes::Write(env->isolate(), - ts_obj_data + start, - fill_length, - str_obj, - enc, - nullptr); + str_length = StringBytes::Write( + env->isolate(), ts_obj_data + start, fill_length, str_obj, enc); } start_fill: @@ -719,12 +727,8 @@ void StringWrite(const FunctionCallbackInfo& args) { if (max_length == 0) return args.GetReturnValue().Set(0); - uint32_t written = StringBytes::Write(env->isolate(), - ts_obj_data + offset, - max_length, - str, - encoding, - nullptr); + uint32_t written = StringBytes::Write( + env->isolate(), ts_obj_data + offset, max_length, str, encoding); args.GetReturnValue().Set(written); } @@ -1263,54 +1267,60 @@ void Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - env->SetMethod(target, "setBufferPrototype", SetBufferPrototype); - env->SetMethodNoSideEffect(target, "createFromString", CreateFromString); - - env->SetMethodNoSideEffect(target, "byteLengthUtf8", ByteLengthUtf8); - env->SetMethod(target, "copy", Copy); - env->SetMethodNoSideEffect(target, "compare", Compare); - env->SetMethodNoSideEffect(target, "compareOffset", CompareOffset); - env->SetMethod(target, "fill", Fill); - env->SetMethodNoSideEffect(target, "indexOfBuffer", IndexOfBuffer); - env->SetMethodNoSideEffect(target, "indexOfNumber", IndexOfNumber); - env->SetMethodNoSideEffect(target, "indexOfString", IndexOfString); - - env->SetMethod(target, "detachArrayBuffer", DetachArrayBuffer); - env->SetMethod(target, "copyArrayBuffer", CopyArrayBuffer); - - env->SetMethod(target, "swap16", Swap16); - env->SetMethod(target, "swap32", Swap32); - env->SetMethod(target, "swap64", Swap64); - - env->SetMethod(target, "encodeInto", EncodeInto); - env->SetMethodNoSideEffect(target, "encodeUtf8String", EncodeUtf8String); - - target->Set(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "kMaxLength"), - Number::New(env->isolate(), kMaxLength)).Check(); - - target->Set(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "kStringMaxLength"), - Integer::New(env->isolate(), String::kMaxLength)).Check(); - - env->SetMethodNoSideEffect(target, "asciiSlice", StringSlice); - env->SetMethodNoSideEffect(target, "base64Slice", StringSlice); - env->SetMethodNoSideEffect(target, "base64urlSlice", StringSlice); - env->SetMethodNoSideEffect(target, "latin1Slice", StringSlice); - env->SetMethodNoSideEffect(target, "hexSlice", StringSlice); - env->SetMethodNoSideEffect(target, "ucs2Slice", StringSlice); - env->SetMethodNoSideEffect(target, "utf8Slice", StringSlice); - - env->SetMethod(target, "asciiWrite", StringWrite); - env->SetMethod(target, "base64Write", StringWrite); - env->SetMethod(target, "base64urlWrite", StringWrite); - env->SetMethod(target, "latin1Write", StringWrite); - env->SetMethod(target, "hexWrite", StringWrite); - env->SetMethod(target, "ucs2Write", StringWrite); - env->SetMethod(target, "utf8Write", StringWrite); - - env->SetMethod(target, "getZeroFillToggle", GetZeroFillToggle); + SetMethod(context, target, "setBufferPrototype", SetBufferPrototype); + SetMethodNoSideEffect(context, target, "createFromString", CreateFromString); + + SetMethodNoSideEffect(context, target, "byteLengthUtf8", ByteLengthUtf8); + SetMethod(context, target, "copy", Copy); + SetMethodNoSideEffect(context, target, "compare", Compare); + SetMethodNoSideEffect(context, target, "compareOffset", CompareOffset); + SetMethod(context, target, "fill", Fill); + SetMethodNoSideEffect(context, target, "indexOfBuffer", IndexOfBuffer); + SetMethodNoSideEffect(context, target, "indexOfNumber", IndexOfNumber); + SetMethodNoSideEffect(context, target, "indexOfString", IndexOfString); + + SetMethod(context, target, "detachArrayBuffer", DetachArrayBuffer); + SetMethod(context, target, "copyArrayBuffer", CopyArrayBuffer); + + SetMethod(context, target, "swap16", Swap16); + SetMethod(context, target, "swap32", Swap32); + SetMethod(context, target, "swap64", Swap64); + + SetMethod(context, target, "encodeInto", EncodeInto); + SetMethodNoSideEffect(context, target, "encodeUtf8String", EncodeUtf8String); + + target + ->Set(context, + FIXED_ONE_BYTE_STRING(isolate, "kMaxLength"), + Number::New(isolate, kMaxLength)) + .Check(); + + target + ->Set(context, + FIXED_ONE_BYTE_STRING(isolate, "kStringMaxLength"), + Integer::New(isolate, String::kMaxLength)) + .Check(); + + SetMethodNoSideEffect(context, target, "asciiSlice", StringSlice); + SetMethodNoSideEffect(context, target, "base64Slice", StringSlice); + SetMethodNoSideEffect( + context, target, "base64urlSlice", StringSlice); + SetMethodNoSideEffect(context, target, "latin1Slice", StringSlice); + SetMethodNoSideEffect(context, target, "hexSlice", StringSlice); + SetMethodNoSideEffect(context, target, "ucs2Slice", StringSlice); + SetMethodNoSideEffect(context, target, "utf8Slice", StringSlice); + + SetMethod(context, target, "asciiWrite", StringWrite); + SetMethod(context, target, "base64Write", StringWrite); + SetMethod(context, target, "base64urlWrite", StringWrite); + SetMethod(context, target, "latin1Write", StringWrite); + SetMethod(context, target, "hexWrite", StringWrite); + SetMethod(context, target, "ucs2Write", StringWrite); + SetMethod(context, target, "utf8Write", StringWrite); + + SetMethod(context, target, "getZeroFillToggle", GetZeroFillToggle); } } // anonymous namespace diff --git a/src/node_builtins.cc b/src/node_builtins.cc new file mode 100644 index 00000000000..9343382e025 --- /dev/null +++ b/src/node_builtins.cc @@ -0,0 +1,325 @@ +#include "node_builtins.h" +#include "debug_utils-inl.h" +#include "env-inl.h" +#include "node_external_reference.h" +#include "node_internals.h" +#include "util-inl.h" + +namespace node { +namespace builtins { + +using v8::Context; +using v8::EscapableHandleScope; +using v8::Function; +using v8::Isolate; +using v8::Local; +using v8::MaybeLocal; +using v8::Object; +using v8::ScriptCompiler; +using v8::ScriptOrigin; +using v8::String; + +BuiltinLoader BuiltinLoader::instance_; + +BuiltinLoader::BuiltinLoader() : config_(GetConfig()) { + LoadJavaScriptSource(); +} + +BuiltinLoader* BuiltinLoader::GetInstance() { + return &instance_; +} + +bool BuiltinLoader::Exists(const char* id) { + return source_.find(id) != source_.end(); +} + +bool BuiltinLoader::Add(const char* id, const UnionBytes& source) { + if (Exists(id)) { + return false; + } + source_.emplace(id, source); + return true; +} + +Local BuiltinLoader::GetSourceObject(Local context) { + Isolate* isolate = context->GetIsolate(); + Local out = Object::New(isolate); + for (auto const& x : source_) { + Local key = OneByteString(isolate, x.first.c_str(), x.first.size()); + out->Set(context, key, x.second.ToStringChecked(isolate)).FromJust(); + } + return out; +} + +Local BuiltinLoader::GetConfigString(Isolate* isolate) { + return config_.ToStringChecked(isolate); +} + +std::vector BuiltinLoader::GetBuiltinIds() { + std::vector ids; + ids.reserve(source_.size()); + for (auto const& x : source_) { + ids.emplace_back(x.first); + } + return ids; +} + +void BuiltinLoader::InitializeBuiltinCategories() { + if (builtin_categories_.is_initialized) { + DCHECK(!builtin_categories_.can_be_required.empty()); + return; + } + + std::vector prefixes = { +#if !HAVE_OPENSSL + "internal/crypto/", + "internal/debugger/", +#endif // !HAVE_OPENSSL + + "internal/bootstrap/", + "internal/per_context/", + "internal/deps/", + "internal/main/" + }; + + builtin_categories_.can_be_required.emplace( + "internal/deps/cjs-module-lexer/lexer"); + + builtin_categories_.cannot_be_required = std::set { +#if !HAVE_INSPECTOR + "inspector", "internal/util/inspector", +#endif // !HAVE_INSPECTOR + +#if !NODE_USE_V8_PLATFORM || !defined(NODE_HAVE_I18N_SUPPORT) + "trace_events", +#endif // !NODE_USE_V8_PLATFORM || !defined(NODE_HAVE_I18N_SUPPORT) + +#if !HAVE_OPENSSL + "crypto", + "crypto/promises", + "https", + "http2", + "tls", + "_tls_common", + "_tls_wrap", + "internal/tls/secure-pair", + "internal/tls/parse-cert-string", + "internal/tls/secure-context", + "internal/http2/core", + "internal/http2/compat", + "internal/policy/manifest", + "internal/process/policy", + "internal/streams/lazy_transform", +#endif // !HAVE_OPENSSL + "sys", // Deprecated. + "wasi", // Experimental. + "internal/test/binding", + "internal/v8_prof_polyfill", + "internal/v8_prof_processor", + }; + + for (auto const& x : source_) { + const std::string& id = x.first; + for (auto const& prefix : prefixes) { + if (prefix.length() > id.length()) { + continue; + } + if (id.find(prefix) == 0 && + builtin_categories_.can_be_required.count(id) == 0) { + builtin_categories_.cannot_be_required.emplace(id); + } + } + } + + for (auto const& x : source_) { + const std::string& id = x.first; + if (0 == builtin_categories_.cannot_be_required.count(id)) { + builtin_categories_.can_be_required.emplace(id); + } + } + + builtin_categories_.is_initialized = true; +} + +const std::set& BuiltinLoader::GetCannotBeRequired() { + InitializeBuiltinCategories(); + return builtin_categories_.cannot_be_required; +} + +const std::set& BuiltinLoader::GetCanBeRequired() { + InitializeBuiltinCategories(); + return builtin_categories_.can_be_required; +} + +bool BuiltinLoader::CanBeRequired(const char* id) { + return GetCanBeRequired().count(id) == 1; +} + +bool BuiltinLoader::CannotBeRequired(const char* id) { + return GetCannotBeRequired().count(id) == 1; +} + +BuiltinCodeCacheMap* BuiltinLoader::code_cache() { + return &code_cache_; +} + +ScriptCompiler::CachedData* BuiltinLoader::GetCodeCache(const char* id) const { + Mutex::ScopedLock lock(code_cache_mutex_); + const auto it = code_cache_.find(id); + if (it == code_cache_.end()) { + // The module has not been compiled before. + return nullptr; + } + return it->second.get(); +} + +MaybeLocal BuiltinLoader::CompileAsModule( + Local context, + const char* id, + BuiltinLoader::Result* result) { + Isolate* isolate = context->GetIsolate(); + std::vector> parameters = { + FIXED_ONE_BYTE_STRING(isolate, "exports"), + FIXED_ONE_BYTE_STRING(isolate, "require"), + FIXED_ONE_BYTE_STRING(isolate, "module"), + FIXED_ONE_BYTE_STRING(isolate, "process"), + FIXED_ONE_BYTE_STRING(isolate, "internalBinding"), + FIXED_ONE_BYTE_STRING(isolate, "primordials")}; + return LookupAndCompile(context, id, ¶meters, result); +} + +#ifdef NODE_BUILTIN_MODULES_PATH +static std::string OnDiskFileName(const char* id) { + std::string filename = NODE_BUILTIN_MODULES_PATH; + filename += "/"; + + if (strncmp(id, "internal/deps", strlen("internal/deps")) == 0) { + id += strlen("internal/"); + } else { + filename += "lib/"; + } + filename += id; + filename += ".js"; + + return filename; +} +#endif // NODE_BUILTIN_MODULES_PATH + +MaybeLocal BuiltinLoader::LoadBuiltinSource(Isolate* isolate, + const char* id) { +#ifdef NODE_BUILTIN_MODULES_PATH + if (strncmp(id, "embedder_main_", strlen("embedder_main_")) == 0) { +#endif // NODE_BUILTIN_MODULES_PATH + const auto source_it = source_.find(id); + if (UNLIKELY(source_it == source_.end())) { + fprintf(stderr, "Cannot find native builtin: \"%s\".\n", id); + ABORT(); + } + return source_it->second.ToStringChecked(isolate); +#ifdef NODE_BUILTIN_MODULES_PATH + } + std::string filename = OnDiskFileName(id); + + std::string contents; + int r = ReadFileSync(&contents, filename.c_str()); + if (r != 0) { + const std::string buf = SPrintF("Cannot read local builtin. %s: %s \"%s\"", + uv_err_name(r), + uv_strerror(r), + filename); + Local message = OneByteString(isolate, buf.c_str()); + isolate->ThrowException(v8::Exception::Error(message)); + return MaybeLocal(); + } + return String::NewFromUtf8( + isolate, contents.c_str(), v8::NewStringType::kNormal, contents.length()); +#endif // NODE_BUILTIN_MODULES_PATH +} + +// Returns Local of the compiled module if return_code_cache +// is false (we are only compiling the function). +// Otherwise return a Local containing the cache. +MaybeLocal BuiltinLoader::LookupAndCompile( + Local context, + const char* id, + std::vector>* parameters, + BuiltinLoader::Result* result) { + Isolate* isolate = context->GetIsolate(); + EscapableHandleScope scope(isolate); + + Local source; + if (!LoadBuiltinSource(isolate, id).ToLocal(&source)) { + return {}; + } + + std::string filename_s = std::string("node:") + id; + Local filename = + OneByteString(isolate, filename_s.c_str(), filename_s.size()); + ScriptOrigin origin(isolate, filename, 0, 0, true); + + ScriptCompiler::CachedData* cached_data = nullptr; + { + // Note: The lock here should not extend into the + // `CompileFunctionInContext()` call below, because this function may + // recurse if there is a syntax error during bootstrap (because the fatal + // exception handler is invoked, which may load built-in modules). + Mutex::ScopedLock lock(code_cache_mutex_); + auto cache_it = code_cache_.find(id); + if (cache_it != code_cache_.end()) { + // Transfer ownership to ScriptCompiler::Source later. + cached_data = cache_it->second.release(); + code_cache_.erase(cache_it); + } + } + + const bool has_cache = cached_data != nullptr; + ScriptCompiler::CompileOptions options = + has_cache ? ScriptCompiler::kConsumeCodeCache + : ScriptCompiler::kEagerCompile; + ScriptCompiler::Source script_source(source, origin, cached_data); + + MaybeLocal maybe_fun = + ScriptCompiler::CompileFunctionInContext(context, + &script_source, + parameters->size(), + parameters->data(), + 0, + nullptr, + options); + + // This could fail when there are early errors in the built-in modules, + // e.g. the syntax errors + Local fun; + if (!maybe_fun.ToLocal(&fun)) { + // In the case of early errors, v8 is already capable of + // decorating the stack for us - note that we use CompileFunctionInContext + // so there is no need to worry about wrappers. + return MaybeLocal(); + } + + // XXX(joyeecheung): this bookkeeping is not exactly accurate because + // it only starts after the Environment is created, so the per_context.js + // will never be in any of these two sets, but the two sets are only for + // testing anyway. + + *result = (has_cache && !script_source.GetCachedData()->rejected) + ? Result::kWithCache + : Result::kWithoutCache; + // Generate new cache for next compilation + std::unique_ptr new_cached_data( + ScriptCompiler::CreateCodeCacheForFunction(fun)); + CHECK_NOT_NULL(new_cached_data); + + { + Mutex::ScopedLock lock(code_cache_mutex_); + // The old entry should've been erased by now so we can just emplace. + // If another thread did the same thing in the meantime, that should not + // be an issue. + code_cache_.emplace(id, std::move(new_cached_data)); + } + + return scope.Escape(fun); +} + +} // namespace builtins +} // namespace node diff --git a/src/node_builtins.h b/src/node_builtins.h new file mode 100644 index 00000000000..21bcfe03276 --- /dev/null +++ b/src/node_builtins.h @@ -0,0 +1,96 @@ +#ifndef SRC_NODE_BUILTINS_H_ +#define SRC_NODE_BUILTINS_H_ + +#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS + +#include +#include +#include +#include +#include "node_mutex.h" +#include "node_union_bytes.h" +#include "v8.h" + +// Forward declare test fixture for `friend` declaration. +class PerProcessTest; + +namespace node { +namespace builtins { + +using BuiltinSourceMap = std::map; +using BuiltinCodeCacheMap = + std::unordered_map>; + +// Handles compilation and caching of built-in JavaScript modules and +// bootstrap scripts, whose source are bundled into the binary as static data. +class NODE_EXTERN_PRIVATE BuiltinLoader { + public: + BuiltinLoader(const BuiltinLoader&) = delete; + BuiltinLoader& operator=(const BuiltinLoader&) = delete; + + private: + // Only allow access from friends. + friend class BuiltinEnv; + friend class CodeCacheBuilder; + + BuiltinLoader(); + static BuiltinLoader* GetInstance(); + + // Generated by tools/js2c.py as node_javascript.cc + void LoadJavaScriptSource(); // Loads data into source_ + UnionBytes GetConfig(); // Return data for config.gypi + + bool Exists(const char* id); + bool Add(const char* id, const UnionBytes& source); + + v8::Local GetSourceObject(v8::Local context); + v8::Local GetConfigString(v8::Isolate* isolate); + std::vector GetBuiltinIds(); + + struct BuiltinCategories { + bool is_initialized = false; + std::set can_be_required; + std::set cannot_be_required; + }; + void InitializeBuiltinCategories(); + const std::set& GetCannotBeRequired(); + const std::set& GetCanBeRequired(); + + bool CanBeRequired(const char* id); + bool CannotBeRequired(const char* id); + + BuiltinCodeCacheMap* code_cache(); + v8::ScriptCompiler::CachedData* GetCodeCache(const char* id) const; + enum class Result { kWithCache, kWithoutCache }; + v8::MaybeLocal LoadBuiltinSource(v8::Isolate* isolate, + const char* id); + // If an exception is encountered (e.g. source code contains + // syntax error), the returned value is empty. + v8::MaybeLocal LookupAndCompile( + v8::Local context, + const char* id, + std::vector>* parameters, + Result* result); + v8::MaybeLocal CompileAsModule(v8::Local context, + const char* id, + Result* result); + + static BuiltinLoader instance_; + BuiltinCategories builtin_categories_; + BuiltinSourceMap source_; + BuiltinCodeCacheMap code_cache_; + UnionBytes config_; + + // Used to synchronize access to the code cache map + Mutex code_cache_mutex_; + + friend class ::PerProcessTest; +}; +} // namespace builtins + +} // namespace node + +#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS + +#endif // SRC_NODE_BUILTINS_H_ diff --git a/src/node_builtins_env.cc b/src/node_builtins_env.cc new file mode 100644 index 00000000000..a115591ca2d --- /dev/null +++ b/src/node_builtins_env.cc @@ -0,0 +1,238 @@ +#include "node_builtins_env.h" +#include "env-inl.h" +#include "node_external_reference.h" + +namespace node { +namespace builtins { + +using v8::Context; +using v8::DEFAULT; +using v8::Function; +using v8::FunctionCallbackInfo; +using v8::IntegrityLevel; +using v8::Isolate; +using v8::Local; +using v8::MaybeLocal; +using v8::Name; +using v8::None; +using v8::Object; +using v8::PropertyCallbackInfo; +using v8::Set; +using v8::SideEffectType; +using v8::String; +using v8::Value; + +// TODO(joyeecheung): make these more general and put them into util.h +Local ToJsSet(Local context, const std::set& in) { + Isolate* isolate = context->GetIsolate(); + Local out = Set::New(isolate); + for (auto const& x : in) { + out->Add(context, OneByteString(isolate, x.c_str(), x.size())) + .ToLocalChecked(); + } + return out; +} + +bool BuiltinEnv::Add(const char* id, const UnionBytes& source) { + return BuiltinLoader::GetInstance()->Add(id, source); +} + +bool BuiltinEnv::Exists(const char* id) { + return BuiltinLoader::GetInstance()->Exists(id); +} + +Local BuiltinEnv::GetSourceObject(Local context) { + return BuiltinLoader::GetInstance()->GetSourceObject(context); +} + +Local BuiltinEnv::GetConfigString(Isolate* isolate) { + return BuiltinLoader::GetInstance()->GetConfigString(isolate); +} + +void BuiltinEnv::GetModuleCategories( + Local property, const PropertyCallbackInfo& info) { + Environment* env = Environment::GetCurrent(info); + Isolate* isolate = env->isolate(); + Local context = env->context(); + Local result = Object::New(isolate); + + // Copy from the per-process categories + std::set cannot_be_required = + BuiltinLoader::GetInstance()->GetCannotBeRequired(); + std::set can_be_required = + BuiltinLoader::GetInstance()->GetCanBeRequired(); + + if (!env->owns_process_state()) { + can_be_required.erase("trace_events"); + cannot_be_required.insert("trace_events"); + } + + result + ->Set(context, + OneByteString(isolate, "cannotBeRequired"), + ToJsSet(context, cannot_be_required)) + .FromJust(); + result + ->Set(context, + OneByteString(isolate, "canBeRequired"), + ToJsSet(context, can_be_required)) + .FromJust(); + info.GetReturnValue().Set(result); +} + +void BuiltinEnv::GetCacheUsage(const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + Isolate* isolate = env->isolate(); + Local context = env->context(); + Local result = Object::New(isolate); + result + ->Set(env->context(), + OneByteString(isolate, "compiledWithCache"), + ToJsSet(context, env->builtins_with_cache)) + .FromJust(); + result + ->Set(env->context(), + OneByteString(isolate, "compiledWithoutCache"), + ToJsSet(context, env->builtins_without_cache)) + .FromJust(); + + result + ->Set(env->context(), + OneByteString(isolate, "compiledInSnapshot"), + ToV8Value(env->context(), env->builtins_in_snapshot) + .ToLocalChecked()) + .FromJust(); + + args.GetReturnValue().Set(result); +} + +void BuiltinEnv::ModuleIdsGetter(Local property, + const PropertyCallbackInfo& info) { + Isolate* isolate = info.GetIsolate(); + + std::vector ids = + BuiltinLoader::GetInstance()->GetBuiltinIds(); + info.GetReturnValue().Set( + ToV8Value(isolate->GetCurrentContext(), ids).ToLocalChecked()); +} + +void BuiltinEnv::ConfigStringGetter( + Local property, const PropertyCallbackInfo& info) { + info.GetReturnValue().Set(GetConfigString(info.GetIsolate())); +} + +void BuiltinEnv::RecordResult(const char* id, + BuiltinLoader::Result result, + Environment* env) { + if (result == BuiltinLoader::Result::kWithCache) { + env->builtins_with_cache.insert(id); + } else { + env->builtins_without_cache.insert(id); + } +} +void BuiltinEnv::CompileFunction(const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + CHECK(args[0]->IsString()); + node::Utf8Value id_v(env->isolate(), args[0].As()); + const char* id = *id_v; + BuiltinLoader::Result result; + MaybeLocal maybe = + BuiltinLoader::GetInstance()->CompileAsModule( + env->context(), id, &result); + RecordResult(id, result, env); + Local fn; + if (maybe.ToLocal(&fn)) { + args.GetReturnValue().Set(fn); + } +} + +// Returns Local of the compiled module if return_code_cache +// is false (we are only compiling the function). +// Otherwise return a Local containing the cache. +MaybeLocal BuiltinEnv::LookupAndCompile( + Local context, + const char* id, + std::vector>* parameters, + Environment* optional_env) { + BuiltinLoader::Result result; + MaybeLocal maybe = + BuiltinLoader::GetInstance()->LookupAndCompile( + context, id, parameters, &result); + if (optional_env != nullptr) { + RecordResult(id, result, optional_env); + } + return maybe; +} + +void HasCachedBuiltins(const FunctionCallbackInfo& args) { + args.GetReturnValue().Set( + v8::Boolean::New(args.GetIsolate(), has_code_cache)); +} + +// TODO(joyeecheung): It is somewhat confusing that Class::Initialize +// is used to initialize to the binding, but it is the current convention. +// Rename this across the code base to something that makes more sense. +void BuiltinEnv::Initialize(Local target, + Local unused, + Local context, + void* priv) { + Environment* env = Environment::GetCurrent(context); + + target + ->SetAccessor(context, + env->config_string(), + ConfigStringGetter, + nullptr, + MaybeLocal(), + DEFAULT, + None, + SideEffectType::kHasNoSideEffect) + .Check(); + target + ->SetAccessor(context, + FIXED_ONE_BYTE_STRING(env->isolate(), "builtinIds"), + ModuleIdsGetter, + nullptr, + MaybeLocal(), + DEFAULT, + None, + SideEffectType::kHasNoSideEffect) + .Check(); + + target + ->SetAccessor(context, + FIXED_ONE_BYTE_STRING(env->isolate(), "moduleCategories"), + GetModuleCategories, + nullptr, + Local(), + DEFAULT, + None, + SideEffectType::kHasNoSideEffect) + .Check(); + + SetMethod(context, target, "getCacheUsage", BuiltinEnv::GetCacheUsage); + SetMethod( + context, target, "compileFunction", BuiltinEnv::CompileFunction); + SetMethod(context, target, "hasCachedBuiltins", HasCachedBuiltins); + // internalBinding('builtins') should be frozen + target->SetIntegrityLevel(context, IntegrityLevel::kFrozen).FromJust(); +} + +void BuiltinEnv::RegisterExternalReferences( + ExternalReferenceRegistry* registry) { + registry->Register(ConfigStringGetter); + registry->Register(ModuleIdsGetter); + registry->Register(GetModuleCategories); + registry->Register(GetCacheUsage); + registry->Register(CompileFunction); + registry->Register(HasCachedBuiltins); +} + +} // namespace builtins +} // namespace node + +NODE_MODULE_CONTEXT_AWARE_INTERNAL( + builtins, node::builtins::BuiltinEnv::Initialize) +NODE_MODULE_EXTERNAL_REFERENCE( + builtins, + node::builtins::BuiltinEnv::RegisterExternalReferences) diff --git a/src/node_builtins_env.h b/src/node_builtins_env.h new file mode 100644 index 00000000000..77634efad19 --- /dev/null +++ b/src/node_builtins_env.h @@ -0,0 +1,68 @@ +#ifndef SRC_NODE_BUILTINS_ENV_H_ +#define SRC_NODE_BUILTINS_ENV_H_ + +#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS + +#include "node_builtins.h" + +namespace node { +class Environment; +class ExternalReferenceRegistry; + +namespace builtins { + +extern const bool has_code_cache; + +class BuiltinEnv { + public: + static void RegisterExternalReferences(ExternalReferenceRegistry* registry); + static void Initialize(v8::Local target, + v8::Local unused, + v8::Local context, + void* priv); + + static v8::MaybeLocal LookupAndCompile( + v8::Local context, + const char* id, + std::vector>* parameters, + Environment* optional_env); + + static v8::Local GetSourceObject(v8::Local context); + // Returns config.gypi as a JSON string + static v8::Local GetConfigString(v8::Isolate* isolate); + static bool Exists(const char* id); + static bool Add(const char* id, const UnionBytes& source); + + // Loads data into BuiltinLoader::.instance.code_cache_ + // Generated by mkcodecache as node_code_cache.cc when + // the build is configured with --code-cache-path=.... They are noops + // in node_code_cache_stub.cc + static void InitializeCodeCache(); + + private: + static void RecordResult(const char* id, + BuiltinLoader::Result result, + Environment* env); + static void GetModuleCategories( + v8::Local property, + const v8::PropertyCallbackInfo& info); + static void GetCacheUsage(const v8::FunctionCallbackInfo& args); + // Passing ids of builtin module source code into JS land as + // internalBinding('builtins').builtinIds + static void ModuleIdsGetter(v8::Local property, + const v8::PropertyCallbackInfo& info); + // Passing config.gypi into JS land as internalBinding('builtins').config + static void ConfigStringGetter( + v8::Local property, + const v8::PropertyCallbackInfo& info); + // Compile a specific native module as a function + static void CompileFunction(const v8::FunctionCallbackInfo& args); +}; + +} // namespace builtins + +} // namespace node + +#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS + +#endif // SRC_NODE_BUILTINS_ENV_H_ diff --git a/src/node_code_cache_stub.cc b/src/node_code_cache_stub.cc index 9d9901738f6..b668380f9d9 100644 --- a/src/node_code_cache_stub.cc +++ b/src/node_code_cache_stub.cc @@ -2,7 +2,7 @@ // NODE_WANT_INTERNALS, so we define it here manually. #define NODE_WANT_INTERNALS 1 -#include "node_native_module_env.h" +#include "node_builtins_env.h" // The stub here is used when configure is run without `--code-cache-path`. // When --code-cache-path is set this stub will not be used and instead @@ -10,13 +10,13 @@ // more information. namespace node { -namespace native_module { +namespace builtins { const bool has_code_cache = false; // The generated source code would insert pairs // into NativeModuleLoader::instance.code_cache_. -void NativeModuleEnv::InitializeCodeCache() {} +void BuiltinEnv::InitializeCodeCache() {} -} // namespace native_module +} // namespace builtins } // namespace node diff --git a/src/node_config.cc b/src/node_config.cc index 176daa88b0f..49e5de25581 100644 --- a/src/node_config.cc +++ b/src/node_config.cc @@ -1,8 +1,9 @@ #include "env-inl.h" #include "memory_tracker.h" #include "node.h" +#include "node_builtins.h" #include "node_i18n.h" -#include "node_native_module_env.h" +#include "node_builtins_env.h" #include "node_options.h" #include "util-inl.h" diff --git a/src/node_constants.cc b/src/node_constants.cc index 38c8f2738b4..3269e3003ac 100644 --- a/src/node_constants.cc +++ b/src/node_constants.cc @@ -47,6 +47,16 @@ #include #endif +#if defined(_WIN32) +#include // _S_IREAD _S_IWRITE +#ifndef S_IRUSR +#define S_IRUSR _S_IREAD +#endif // S_IRUSR +#ifndef S_IWUSR +#define S_IWUSR _S_IWRITE +#endif // S_IWUSR +#endif + #include #include #include diff --git a/src/node_context_data.h b/src/node_context_data.h index 912e65b4270..632b648a0a1 100644 --- a/src/node_context_data.h +++ b/src/node_context_data.h @@ -3,6 +3,9 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS +#include "util.h" +#include "v8.h" + namespace node { // Pick an index that's hopefully out of the way when we're embedded inside @@ -21,20 +24,62 @@ namespace node { #define NODE_CONTEXT_ALLOW_WASM_CODE_GENERATION_INDEX 34 #endif -#ifndef NODE_CONTEXT_TAG -#define NODE_CONTEXT_TAG 35 +#ifndef NODE_BINDING_LIST +#define NODE_BINDING_LIST_INDEX 35 #endif -#ifndef NODE_BINDING_LIST -#define NODE_BINDING_LIST_INDEX 36 +#ifndef NODE_CONTEXT_ALLOW_CODE_GENERATION_FROM_STRINGS_INDEX +#define NODE_CONTEXT_ALLOW_CODE_GENERATION_FROM_STRINGS_INDEX 36 +#endif + +// NODE_CONTEXT_TAG must be greater than any embedder indexes so that a single +// check on the number of embedder data fields can assure the presence of all +// embedder indexes. +#ifndef NODE_CONTEXT_TAG +#define NODE_CONTEXT_TAG 37 #endif enum ContextEmbedderIndex { kEnvironment = NODE_CONTEXT_EMBEDDER_DATA_INDEX, kSandboxObject = NODE_CONTEXT_SANDBOX_OBJECT_INDEX, kAllowWasmCodeGeneration = NODE_CONTEXT_ALLOW_WASM_CODE_GENERATION_INDEX, + kBindingListIndex = NODE_BINDING_LIST_INDEX, + kAllowCodeGenerationFromStrings = + NODE_CONTEXT_ALLOW_CODE_GENERATION_FROM_STRINGS_INDEX, kContextTag = NODE_CONTEXT_TAG, - kBindingListIndex = NODE_BINDING_LIST_INDEX +}; + +class ContextEmbedderTag { + public: + static inline void TagNodeContext(v8::Local context) { + // Used by ContextEmbedderTag::IsNodeContext to know that we are on a node + // context. + context->SetAlignedPointerInEmbedderData( + ContextEmbedderIndex::kContextTag, + ContextEmbedderTag::kNodeContextTagPtr); + } + + static inline bool IsNodeContext(v8::Local context) { + if (UNLIKELY(context.IsEmpty())) { + return false; + } + if (UNLIKELY(context->GetNumberOfEmbedderDataFields() <= + ContextEmbedderIndex::kContextTag)) { + return false; + } + if (UNLIKELY(context->GetAlignedPointerFromEmbedderData( + ContextEmbedderIndex::kContextTag) != + ContextEmbedderTag::kNodeContextTagPtr)) { + return false; + } + return true; + } + + private: + static void* const kNodeContextTagPtr; + static int const kNodeContextTag; + + ContextEmbedderTag() = delete; }; } // namespace node diff --git a/src/node_contextify.cc b/src/node_contextify.cc index 482c9a7b51d..a02c211db8d 100644 --- a/src/node_contextify.cc +++ b/src/node_contextify.cc @@ -233,7 +233,11 @@ MaybeLocal ContextifyContext::CreateV8Context( ctx->Global()); Utf8Value name_val(env->isolate(), options.name); - ctx->AllowCodeGenerationFromStrings(options.allow_code_gen_strings->IsTrue()); + // Delegate the code generation validation to + // node::ModifyCodeGenerationFromStrings. + ctx->AllowCodeGenerationFromStrings(false); + ctx->SetEmbedderData(ContextEmbedderIndex::kAllowCodeGenerationFromStrings, + options.allow_code_gen_strings); ctx->SetEmbedderData(ContextEmbedderIndex::kAllowWasmCodeGeneration, options.allow_code_gen_wasm); @@ -251,16 +255,19 @@ MaybeLocal ContextifyContext::CreateV8Context( void ContextifyContext::Init(Environment* env, Local target) { + Isolate* isolate = env->isolate(); + Local context = env->context(); + Local function_template = - FunctionTemplate::New(env->isolate()); + NewFunctionTemplate(isolate, nullptr); function_template->InstanceTemplate()->SetInternalFieldCount( ContextifyContext::kInternalFieldCount); env->set_script_data_constructor_function( function_template->GetFunction(env->context()).ToLocalChecked()); - env->SetMethod(target, "makeContext", MakeContext); - env->SetMethod(target, "isContext", IsContext); - env->SetMethod(target, "compileFunction", CompileFunction); + SetMethod(context, target, "makeContext", MakeContext); + SetMethod(context, target, "isContext", IsContext); + SetMethod(context, target, "compileFunction", CompileFunction); } void ContextifyContext::RegisterExternalReferences( @@ -661,17 +668,17 @@ void ContextifyContext::IndexedPropertyDeleterCallback( } void ContextifyScript::Init(Environment* env, Local target) { + Isolate* isolate = env->isolate(); HandleScope scope(env->isolate()); Local class_name = FIXED_ONE_BYTE_STRING(env->isolate(), "ContextifyScript"); - Local script_tmpl = env->NewFunctionTemplate(New); + Local script_tmpl = NewFunctionTemplate(isolate, New); script_tmpl->InstanceTemplate()->SetInternalFieldCount( ContextifyScript::kInternalFieldCount); script_tmpl->SetClassName(class_name); - env->SetProtoMethod(script_tmpl, "createCachedData", CreateCachedData); - env->SetProtoMethod(script_tmpl, "runInContext", RunInContext); - env->SetProtoMethod(script_tmpl, "runInThisContext", RunInThisContext); + SetProtoMethod(isolate, script_tmpl, "createCachedData", CreateCachedData); + SetProtoMethod(isolate, script_tmpl, "runInContext", RunInContext); Local context = env->context(); @@ -685,7 +692,6 @@ void ContextifyScript::RegisterExternalReferences( registry->Register(New); registry->Register(CreateCachedData); registry->Register(RunInContext); - registry->Register(RunInThisContext); } void ContextifyScript::New(const FunctionCallbackInfo& args) { @@ -740,11 +746,10 @@ void ContextifyScript::New(const FunctionCallbackInfo& args) { if (*TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( TRACING_CATEGORY_NODE2(vm, script)) != 0) { Utf8Value fn(isolate, filename); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - TRACING_CATEGORY_NODE2(vm, script), - "ContextifyScript::New", - contextify_script, - "filename", TRACE_STR_COPY(*fn)); + TRACE_EVENT_BEGIN1(TRACING_CATEGORY_NODE2(vm, script), + "ContextifyScript::New", + "filename", + TRACE_STR_COPY(*fn)); } ScriptCompiler::CachedData* cached_data = nullptr; @@ -794,10 +799,8 @@ void ContextifyScript::New(const FunctionCallbackInfo& args) { no_abort_scope.Close(); if (!try_catch.HasTerminated()) try_catch.ReThrow(); - TRACE_EVENT_NESTABLE_ASYNC_END0( - TRACING_CATEGORY_NODE2(vm, script), - "ContextifyScript::New", - contextify_script); + TRACE_EVENT_END0(TRACING_CATEGORY_NODE2(vm, script), + "ContextifyScript::New"); return; } contextify_script->script_.Reset(isolate, v8_script.ToLocalChecked()); @@ -826,10 +829,7 @@ void ContextifyScript::New(const FunctionCallbackInfo& args) { env->cached_data_produced_string(), Boolean::New(isolate, cached_data_produced)).Check(); } - TRACE_EVENT_NESTABLE_ASYNC_END0( - TRACING_CATEGORY_NODE2(vm, script), - "ContextifyScript::New", - contextify_script); + TRACE_EVENT_END0(TRACING_CATEGORY_NODE2(vm, script), "ContextifyScript::New"); } bool ContextifyScript::InstanceOf(Environment* env, @@ -858,45 +858,6 @@ void ContextifyScript::CreateCachedData( } } -void ContextifyScript::RunInThisContext( - const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args); - - ContextifyScript* wrapped_script; - ASSIGN_OR_RETURN_UNWRAP(&wrapped_script, args.Holder()); - - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0( - TRACING_CATEGORY_NODE2(vm, script), "RunInThisContext", wrapped_script); - - // TODO(addaleax): Use an options object or otherwise merge this with - // RunInContext(). - CHECK_EQ(args.Length(), 4); - - CHECK(args[0]->IsNumber()); - int64_t timeout = args[0]->IntegerValue(env->context()).FromJust(); - - CHECK(args[1]->IsBoolean()); - bool display_errors = args[1]->IsTrue(); - - CHECK(args[2]->IsBoolean()); - bool break_on_sigint = args[2]->IsTrue(); - - CHECK(args[3]->IsBoolean()); - bool break_on_first_line = args[3]->IsTrue(); - - // Do the eval within this context - EvalMachine(env, - timeout, - display_errors, - break_on_sigint, - break_on_first_line, - nullptr, // microtask_queue - args); - - TRACE_EVENT_NESTABLE_ASYNC_END0( - TRACING_CATEGORY_NODE2(vm, script), "RunInThisContext", wrapped_script); -} - void ContextifyScript::RunInContext(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); @@ -904,20 +865,28 @@ void ContextifyScript::RunInContext(const FunctionCallbackInfo& args) { ASSIGN_OR_RETURN_UNWRAP(&wrapped_script, args.Holder()); CHECK_EQ(args.Length(), 5); + CHECK(args[0]->IsObject() || args[0]->IsNull()); - CHECK(args[0]->IsObject()); - Local sandbox = args[0].As(); - // Get the context from the sandbox - ContextifyContext* contextify_context = - ContextifyContext::ContextFromContextifiedSandbox(env, sandbox); - CHECK_NOT_NULL(contextify_context); + Local context; + std::shared_ptr microtask_queue; - Local context = contextify_context->context(); - if (context.IsEmpty()) - return; + if (args[0]->IsObject()) { + Local sandbox = args[0].As(); + // Get the context from the sandbox + ContextifyContext* contextify_context = + ContextifyContext::ContextFromContextifiedSandbox(env, sandbox); + CHECK_NOT_NULL(contextify_context); + CHECK_EQ(contextify_context->env(), env); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0( - TRACING_CATEGORY_NODE2(vm, script), "RunInContext", wrapped_script); + context = contextify_context->context(); + if (context.IsEmpty()) return; + + microtask_queue = contextify_context->microtask_queue(); + } else { + context = env->context(); + } + + TRACE_EVENT0(TRACING_CATEGORY_NODE2(vm, script), "RunInContext"); CHECK(args[1]->IsNumber()); int64_t timeout = args[1]->IntegerValue(env->context()).FromJust(); @@ -933,16 +902,13 @@ void ContextifyScript::RunInContext(const FunctionCallbackInfo& args) { // Do the eval within the context Context::Scope context_scope(context); - EvalMachine(contextify_context->env(), + EvalMachine(env, timeout, display_errors, break_on_sigint, break_on_first_line, - contextify_context->microtask_queue(), + microtask_queue, args); - - TRACE_EVENT_NESTABLE_ASYNC_END0( - TRACING_CATEGORY_NODE2(vm, script), "RunInContext", wrapped_script); } bool ContextifyScript::EvalMachine(Environment* env, @@ -1285,7 +1251,7 @@ static void MeasureMemory(const FunctionCallbackInfo& args) { static_cast(mode)); isolate->MeasureMemory(std::move(delegate), static_cast(execution)); - v8::Local promise = resolver->GetPromise(); + Local promise = resolver->GetPromise(); args.GetReturnValue().Set(promise); } @@ -1308,12 +1274,14 @@ void MicrotaskQueueWrap::New(const FunctionCallbackInfo& args) { } void MicrotaskQueueWrap::Init(Environment* env, Local target) { - HandleScope scope(env->isolate()); - Local tmpl = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + HandleScope scope(isolate); + Local context = env->context(); + Local tmpl = NewFunctionTemplate(isolate, New); tmpl->InstanceTemplate()->SetInternalFieldCount( ContextifyScript::kInternalFieldCount); env->set_microtask_queue_ctor_template(tmpl); - env->SetConstructorFunction(target, "MicrotaskQueue", tmpl); + SetConstructorFunction(context, target, "MicrotaskQueue", tmpl); } void MicrotaskQueueWrap::RegisterExternalReferences( @@ -1331,11 +1299,11 @@ void Initialize(Local target, ContextifyScript::Init(env, target); MicrotaskQueueWrap::Init(env, target); - env->SetMethod(target, "startSigintWatchdog", StartSigintWatchdog); - env->SetMethod(target, "stopSigintWatchdog", StopSigintWatchdog); + SetMethod(context, target, "startSigintWatchdog", StartSigintWatchdog); + SetMethod(context, target, "stopSigintWatchdog", StopSigintWatchdog); // Used in tests. - env->SetMethodNoSideEffect( - target, "watchdogHasPendingSigint", WatchdogHasPendingSigint); + SetMethodNoSideEffect( + context, target, "watchdogHasPendingSigint", WatchdogHasPendingSigint); { Local tpl = FunctionTemplate::New(env->isolate()); @@ -1371,7 +1339,7 @@ void Initialize(Local target, target->Set(context, env->constants_string(), constants).Check(); - env->SetMethod(target, "measureMemory", MeasureMemory); + SetMethod(context, target, "measureMemory", MeasureMemory); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/node_contextify.h b/src/node_contextify.h index c9ba78b8a5e..d45b73b36e2 100644 --- a/src/node_contextify.h +++ b/src/node_contextify.h @@ -148,9 +148,7 @@ class ContextifyScript : public BaseObject { static void RegisterExternalReferences(ExternalReferenceRegistry* registry); static void New(const v8::FunctionCallbackInfo& args); static bool InstanceOf(Environment* env, const v8::Local& args); - static void CreateCachedData( - const v8::FunctionCallbackInfo& args); - static void RunInThisContext(const v8::FunctionCallbackInfo& args); + static void CreateCachedData(const v8::FunctionCallbackInfo& args); static void RunInContext(const v8::FunctionCallbackInfo& args); static bool EvalMachine(Environment* env, const int64_t timeout, diff --git a/src/node_credentials.cc b/src/node_credentials.cc index fa3dfa48a3c..4c098c9870a 100644 --- a/src/node_credentials.cc +++ b/src/node_credentials.cc @@ -34,22 +34,25 @@ bool linux_at_secure = false; namespace credentials { // Look up environment variable unless running as setuid root. -bool SafeGetenv(const char* key, std::string* text, Environment* env) { +bool SafeGetenv(const char* key, + std::string* text, + std::shared_ptr env_vars, + v8::Isolate* isolate) { #if !defined(__CloudABI__) && !defined(_WIN32) if (per_process::linux_at_secure || getuid() != geteuid() || getgid() != getegid()) goto fail; #endif - if (env != nullptr) { - HandleScope handle_scope(env->isolate()); - TryCatch ignore_errors(env->isolate()); - MaybeLocal maybe_value = env->env_vars()->Get( - env->isolate(), - String::NewFromUtf8(env->isolate(), key).ToLocalChecked()); + if (env_vars != nullptr) { + DCHECK_NOT_NULL(isolate); + HandleScope handle_scope(isolate); + TryCatch ignore_errors(isolate); + MaybeLocal maybe_value = env_vars->Get( + isolate, String::NewFromUtf8(isolate, key).ToLocalChecked()); Local value; if (!maybe_value.ToLocal(&value)) goto fail; - String::Utf8Value utf8_value(env->isolate(), value); + String::Utf8Value utf8_value(isolate, value); if (*utf8_value == nullptr) goto fail; *text = std::string(*utf8_value, utf8_value.length()); return true; @@ -86,7 +89,7 @@ static void SafeGetenv(const FunctionCallbackInfo& args) { Isolate* isolate = env->isolate(); Utf8Value strenvtag(isolate, args[0]); std::string text; - if (!SafeGetenv(*strenvtag, &text, env)) return; + if (!SafeGetenv(*strenvtag, &text, env->env_vars(), isolate)) return; Local result = ToV8Value(isolate->GetCurrentContext(), text).ToLocalChecked(); args.GetReturnValue().Set(result); @@ -410,23 +413,23 @@ static void Initialize(Local target, Environment* env = Environment::GetCurrent(context); Isolate* isolate = env->isolate(); - env->SetMethod(target, "safeGetenv", SafeGetenv); + SetMethod(context, target, "safeGetenv", SafeGetenv); #ifdef NODE_IMPLEMENTS_POSIX_CREDENTIALS READONLY_TRUE_PROPERTY(target, "implementsPosixCredentials"); - env->SetMethodNoSideEffect(target, "getuid", GetUid); - env->SetMethodNoSideEffect(target, "geteuid", GetEUid); - env->SetMethodNoSideEffect(target, "getgid", GetGid); - env->SetMethodNoSideEffect(target, "getegid", GetEGid); - env->SetMethodNoSideEffect(target, "getgroups", GetGroups); + SetMethodNoSideEffect(context, target, "getuid", GetUid); + SetMethodNoSideEffect(context, target, "geteuid", GetEUid); + SetMethodNoSideEffect(context, target, "getgid", GetGid); + SetMethodNoSideEffect(context, target, "getegid", GetEGid); + SetMethodNoSideEffect(context, target, "getgroups", GetGroups); if (env->owns_process_state()) { - env->SetMethod(target, "initgroups", InitGroups); - env->SetMethod(target, "setegid", SetEGid); - env->SetMethod(target, "seteuid", SetEUid); - env->SetMethod(target, "setgid", SetGid); - env->SetMethod(target, "setuid", SetUid); - env->SetMethod(target, "setgroups", SetGroups); + SetMethod(context, target, "initgroups", InitGroups); + SetMethod(context, target, "setegid", SetEGid); + SetMethod(context, target, "seteuid", SetEUid); + SetMethod(context, target, "setgid", SetGid); + SetMethod(context, target, "setuid", SetUid); + SetMethod(context, target, "setgroups", SetGroups); } #endif // NODE_IMPLEMENTS_POSIX_CREDENTIALS } diff --git a/src/node_dir.cc b/src/node_dir.cc index c530da0cc3b..bc86f828b18 100644 --- a/src/node_dir.cc +++ b/src/node_dir.cc @@ -42,18 +42,57 @@ using v8::Object; using v8::ObjectTemplate; using v8::Value; +static const char* get_dir_func_name_by_type(uv_fs_type req_type) { + switch (req_type) { +#define FS_TYPE_TO_NAME(type, name) \ + case UV_FS_##type: \ + return name; + FS_TYPE_TO_NAME(OPENDIR, "opendir") + FS_TYPE_TO_NAME(READDIR, "readdir") + FS_TYPE_TO_NAME(CLOSEDIR, "closedir") +#undef FS_TYPE_TO_NAME + default: + return "unknow"; + } +} + #define TRACE_NAME(name) "fs_dir.sync." #name #define GET_TRACE_ENABLED \ - (*TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED \ - (TRACING_CATEGORY_NODE2(fs_dir, sync)) != 0) + (*TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( \ + TRACING_CATEGORY_NODE2(fs_dir, sync)) != 0) #define FS_DIR_SYNC_TRACE_BEGIN(syscall, ...) \ if (GET_TRACE_ENABLED) \ - TRACE_EVENT_BEGIN(TRACING_CATEGORY_NODE2(fs_dir, sync), TRACE_NAME(syscall), \ - ##__VA_ARGS__); + TRACE_EVENT_BEGIN(TRACING_CATEGORY_NODE2(fs_dir, sync), \ + TRACE_NAME(syscall), \ + ##__VA_ARGS__); #define FS_DIR_SYNC_TRACE_END(syscall, ...) \ if (GET_TRACE_ENABLED) \ - TRACE_EVENT_END(TRACING_CATEGORY_NODE2(fs_dir, sync), TRACE_NAME(syscall), \ - ##__VA_ARGS__); + TRACE_EVENT_END(TRACING_CATEGORY_NODE2(fs_dir, sync), \ + TRACE_NAME(syscall), \ + ##__VA_ARGS__); + +#define FS_DIR_ASYNC_TRACE_BEGIN0(fs_type, id) \ + TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(TRACING_CATEGORY_NODE2(fs_dir, async), \ + get_dir_func_name_by_type(fs_type), \ + id); +#define FS_DIR_ASYNC_TRACE_END0(fs_type, id) \ + TRACE_EVENT_NESTABLE_ASYNC_END0(TRACING_CATEGORY_NODE2(fs_dir, async), \ + get_dir_func_name_by_type(fs_type), \ + id); + +#define FS_DIR_ASYNC_TRACE_BEGIN1(fs_type, id, name, value) \ + TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(TRACING_CATEGORY_NODE2(fs_dir, async), \ + get_dir_func_name_by_type(fs_type), \ + id, \ + name, \ + value); + +#define FS_DIR_ASYNC_TRACE_END1(fs_type, id, name, value) \ + TRACE_EVENT_NESTABLE_ASYNC_END1(TRACING_CATEGORY_NODE2(fs_dir, async), \ + get_dir_func_name_by_type(fs_type), \ + id, \ + name, \ + value); DirHandle::DirHandle(Environment* env, Local obj, uv_dir_t* dir) : AsyncWrap(env, obj, AsyncWrap::PROVIDER_DIRHANDLE), @@ -132,7 +171,8 @@ inline void DirHandle::GCClose() { void AfterClose(uv_fs_t* req) { FSReqBase* req_wrap = FSReqBase::from_req(req); FSReqAfterScope after(req_wrap, req); - + FS_DIR_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) if (after.Proceed()) req_wrap->Resolve(Undefined(req_wrap->env()->isolate())); } @@ -151,6 +191,7 @@ void DirHandle::Close(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 0); if (req_wrap_async != nullptr) { // close(req) + FS_DIR_ASYNC_TRACE_BEGIN0(UV_FS_CLOSEDIR, req_wrap_async) AsyncCall(env, req_wrap_async, args, "closedir", UTF8, AfterClose, uv_fs_closedir, dir->dir()); } else { // close(undefined, ctx) @@ -196,7 +237,8 @@ static MaybeLocal DirentListToArray( static void AfterDirRead(uv_fs_t* req) { BaseObjectPtr req_wrap { FSReqBase::from_req(req) }; FSReqAfterScope after(req_wrap.get(), req); - + FS_DIR_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) if (!after.Proceed()) { return; } @@ -256,6 +298,7 @@ void DirHandle::Read(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { // dir.read(encoding, bufferSize, req) + FS_DIR_ASYNC_TRACE_BEGIN0(UV_FS_READDIR, req_wrap_async) AsyncCall(env, req_wrap_async, args, "readdir", encoding, AfterDirRead, uv_fs_readdir, dir->dir()); } else { // dir.read(encoding, bufferSize, undefined, ctx) @@ -298,7 +341,8 @@ void DirHandle::Read(const FunctionCallbackInfo& args) { void AfterOpenDir(uv_fs_t* req) { FSReqBase* req_wrap = FSReqBase::from_req(req); FSReqAfterScope after(req_wrap, req); - + FS_DIR_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) if (!after.Proceed()) { return; } @@ -325,6 +369,8 @@ static void OpenDir(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { // openDir(path, encoding, req) + FS_DIR_ASYNC_TRACE_BEGIN1( + UV_FS_OPENDIR, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "opendir", encoding, AfterOpenDir, uv_fs_opendir, *path); } else { // openDir(path, encoding, undefined, ctx) @@ -351,17 +397,18 @@ void Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - env->SetMethod(target, "opendir", OpenDir); + SetMethod(context, target, "opendir", OpenDir); // Create FunctionTemplate for DirHandle - Local dir = env->NewFunctionTemplate(DirHandle::New); + Local dir = NewFunctionTemplate(isolate, DirHandle::New); dir->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(dir, "read", DirHandle::Read); - env->SetProtoMethod(dir, "close", DirHandle::Close); + SetProtoMethod(isolate, dir, "read", DirHandle::Read); + SetProtoMethod(isolate, dir, "close", DirHandle::Close); Local dirt = dir->InstanceTemplate(); dirt->SetInternalFieldCount(DirHandle::kInternalFieldCount); - env->SetConstructorFunction(target, "DirHandle", dir); + SetConstructorFunction(context, target, "DirHandle", dir); env->set_dir_instance_template(dirt); } diff --git a/src/node_dtrace.cc b/src/node_dtrace.cc index 52e63992833..9768880ac78 100644 --- a/src/node_dtrace.cc +++ b/src/node_dtrace.cc @@ -301,10 +301,8 @@ void InitializeDTrace(Local target, Local unused, Local context, void* priv) { - Environment* env = Environment::GetCurrent(context); - #if defined HAVE_DTRACE || defined HAVE_ETW -#define V(name) env->SetMethod(target, #name, name); +#define V(name) SetMethod(context, target, #name, name); NODE_PROBES(V) #undef V #endif // defined HAVE_DTRACE || defined HAVE_ETW diff --git a/src/node_errors.cc b/src/node_errors.cc index 3028892b080..3a8e58bf729 100644 --- a/src/node_errors.cc +++ b/src/node_errors.cc @@ -62,7 +62,8 @@ static std::string GetErrorSource(Isolate* isolate, // added in the JavaScript context: Environment* env = Environment::GetCurrent(isolate); const bool has_source_map_url = - !message->GetScriptOrigin().SourceMapUrl().IsEmpty(); + !message->GetScriptOrigin().SourceMapUrl().IsEmpty() && + !message->GetScriptOrigin().SourceMapUrl()->IsUndefined(); if (has_source_map_url && env != nullptr && env->source_maps_enabled()) { return sourceline; } @@ -353,6 +354,7 @@ static void ReportFatalException(Environment* env, } node::Utf8Value trace(env->isolate(), stack_trace); + std::string report_message = "Exception"; // range errors have a trace member set to undefined if (trace.length() > 0 && !stack_trace->IsUndefined()) { @@ -385,6 +387,8 @@ static void ReportFatalException(Environment* env, } else { node::Utf8Value name_string(env->isolate(), name.ToLocalChecked()); node::Utf8Value message_string(env->isolate(), message.ToLocalChecked()); + // Update the report message if it is an object has message property. + report_message = message_string.ToString(); if (arrow.IsEmpty() || !arrow->IsString() || decorated) { FPrintF(stderr, "%s: %s\n", name_string, message_string); @@ -406,6 +410,10 @@ static void ReportFatalException(Environment* env, } } + if (env->isolate_data()->options()->report_uncaught_exception) { + TriggerNodeReport(env, report_message.c_str(), "Exception", "", error); + } + if (env->options()->trace_uncaught) { Local trace = message->GetStackTrace(); if (!trace.IsEmpty()) { @@ -431,10 +439,31 @@ void OnFatalError(const char* location, const char* message) { } Isolate* isolate = Isolate::TryGetCurrent(); - Environment* env = nullptr; - if (isolate != nullptr) { - env = Environment::GetCurrent(isolate); + bool report_on_fatalerror; + { + Mutex::ScopedLock lock(node::per_process::cli_options_mutex); + report_on_fatalerror = per_process::cli_options->report_on_fatalerror; + } + + if (report_on_fatalerror) { + TriggerNodeReport(isolate, message, "FatalError", "", Local()); } + + fflush(stderr); + ABORT(); +} + +void OOMErrorHandler(const char* location, bool is_heap_oom) { + const char* message = + is_heap_oom ? "Allocation failed - JavaScript heap out of memory" + : "Allocation failed - process out of memory"; + if (location) { + FPrintF(stderr, "FATAL ERROR: %s %s\n", location, message); + } else { + FPrintF(stderr, "FATAL ERROR: %s\n", message); + } + + Isolate* isolate = Isolate::TryGetCurrent(); bool report_on_fatalerror; { Mutex::ScopedLock lock(node::per_process::cli_options_mutex); @@ -442,14 +471,50 @@ void OnFatalError(const char* location, const char* message) { } if (report_on_fatalerror) { - report::TriggerNodeReport( - isolate, env, message, "FatalError", "", Local()); + // Trigger report with the isolate. Environment::GetCurrent may return + // nullptr here: + // - If the OOM is reported by a young generation space allocation, + // Isolate::GetCurrentContext returns an empty handle. + // - Otherwise, Isolate::GetCurrentContext returns a non-empty handle. + TriggerNodeReport(isolate, message, "OOMError", "", Local()); } fflush(stderr); ABORT(); } +v8::ModifyCodeGenerationFromStringsResult ModifyCodeGenerationFromStrings( + v8::Local context, + v8::Local source, + bool is_code_like) { + HandleScope scope(context->GetIsolate()); + + Environment* env = Environment::GetCurrent(context); + if (env->source_maps_enabled()) { + // We do not expect the maybe_cache_generated_source_map to throw any more + // exceptions. If it does, just ignore it. + errors::TryCatchScope try_catch(env); + Local maybe_cache_source_map = + env->maybe_cache_generated_source_map(); + Local argv[1] = {source}; + + MaybeLocal maybe_cached = maybe_cache_source_map->Call( + context, context->Global(), arraysize(argv), argv); + if (maybe_cached.IsEmpty()) { + DCHECK(try_catch.HasCaught()); + } + } + + Local allow_code_gen = context->GetEmbedderData( + ContextEmbedderIndex::kAllowCodeGenerationFromStrings); + bool codegen_allowed = + allow_code_gen->IsUndefined() || allow_code_gen->IsTrue(); + return { + codegen_allowed, + {}, + }; +} + namespace errors { TryCatchScope::~TryCatchScope() { @@ -832,6 +897,13 @@ static void SetSourceMapsEnabled(const FunctionCallbackInfo& args) { env->set_source_maps_enabled(args[0].As()->Value()); } +static void SetMaybeCacheGeneratedSourceMap( + const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + CHECK(args[0]->IsFunction()); + env->set_maybe_cache_generated_source_map(args[0].As()); +} + static void SetEnhanceStackForFatalException( const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); @@ -866,6 +938,7 @@ static void TriggerUncaughtException(const FunctionCallbackInfo& args) { void RegisterExternalReferences(ExternalReferenceRegistry* registry) { registry->Register(SetPrepareStackTraceCallback); registry->Register(SetSourceMapsEnabled); + registry->Register(SetMaybeCacheGeneratedSourceMap); registry->Register(SetEnhanceStackForFatalException); registry->Register(NoSideEffectsToString); registry->Register(TriggerUncaughtException); @@ -875,16 +948,23 @@ void Initialize(Local target, Local unused, Local context, void* priv) { - Environment* env = Environment::GetCurrent(context); - env->SetMethod( - target, "setPrepareStackTraceCallback", SetPrepareStackTraceCallback); - env->SetMethod(target, "setSourceMapsEnabled", SetSourceMapsEnabled); - env->SetMethod(target, - "setEnhanceStackForFatalException", - SetEnhanceStackForFatalException); - env->SetMethodNoSideEffect( - target, "noSideEffectsToString", NoSideEffectsToString); - env->SetMethod(target, "triggerUncaughtException", TriggerUncaughtException); + SetMethod(context, + target, + "setPrepareStackTraceCallback", + SetPrepareStackTraceCallback); + SetMethod(context, target, "setSourceMapsEnabled", SetSourceMapsEnabled); + SetMethod(context, + target, + "setMaybeCacheGeneratedSourceMap", + SetMaybeCacheGeneratedSourceMap); + SetMethod(context, + target, + "setEnhanceStackForFatalException", + SetEnhanceStackForFatalException); + SetMethodNoSideEffect( + context, target, "noSideEffectsToString", NoSideEffectsToString); + SetMethod( + context, target, "triggerUncaughtException", TriggerUncaughtException); } void DecorateErrorStack(Environment* env, diff --git a/src/node_errors.h b/src/node_errors.h index f540b3e2a37..f9332d04fb9 100644 --- a/src/node_errors.h +++ b/src/node_errors.h @@ -21,6 +21,7 @@ void AppendExceptionLine(Environment* env, [[noreturn]] void FatalError(const char* location, const char* message); void OnFatalError(const char* location, const char* message); +void OOMErrorHandler(const char* location, bool is_heap_oom); // Helpers to construct errors similar to the ones provided by // lib/internal/errors.js. @@ -166,7 +167,7 @@ ERRORS_WITH_CODE(V) "The V8 platform used by this instance of Node does not support " \ "creating Workers") \ V(ERR_NON_CONTEXT_AWARE_DISABLED, \ - "Loading non context-aware native modules has been disabled") \ + "Loading non context-aware native addons has been disabled") \ V(ERR_SCRIPT_EXECUTION_INTERRUPTED, \ "Script execution was interrupted by `SIGINT`") \ V(ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED, "Failed to set PSK identity hint") \ @@ -270,6 +271,11 @@ void DecorateErrorStack(Environment* env, const errors::TryCatchScope& try_catch); } // namespace errors +v8::ModifyCodeGenerationFromStringsResult ModifyCodeGenerationFromStrings( + v8::Local context, + v8::Local source, + bool is_code_like); + } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS diff --git a/src/node_external_reference.cc b/src/node_external_reference.cc index 94198719b6a..9a89977094b 100644 --- a/src/node_external_reference.cc +++ b/src/node_external_reference.cc @@ -7,9 +7,11 @@ namespace node { const std::vector& ExternalReferenceRegistry::external_references() { - CHECK(!is_finalized_); - external_references_.push_back(reinterpret_cast(nullptr)); - is_finalized_ = true; + if (!is_finalized_) { + external_references_.push_back(reinterpret_cast(nullptr)); + is_finalized_ = true; + } + return external_references_; } diff --git a/src/node_external_reference.h b/src/node_external_reference.h index c57a01ff39c..9f50f623510 100644 --- a/src/node_external_reference.h +++ b/src/node_external_reference.h @@ -56,6 +56,7 @@ class ExternalReferenceRegistry { V(binding) \ V(blob) \ V(buffer) \ + V(builtins) \ V(contextify) \ V(credentials) \ V(env_var) \ @@ -66,7 +67,7 @@ class ExternalReferenceRegistry { V(handle_wrap) \ V(heap_utils) \ V(messaging) \ - V(native_module) \ + V(mksnapshot) \ V(options) \ V(os) \ V(performance) \ diff --git a/src/node_file-inl.h b/src/node_file-inl.h index 0188261b7dc..351f3df809d 100644 --- a/src/node_file-inl.h +++ b/src/node_file-inl.h @@ -156,8 +156,10 @@ FSReqPromise::New(BindingData* binding_data, template FSReqPromise::~FSReqPromise() { - // Validate that the promise was explicitly resolved or rejected. - CHECK(finished_); + // Validate that the promise was explicitly resolved or rejected but only if + // the Isolate is not terminating because in this case the promise might have + // not finished. + CHECK_IMPLIES(!finished_, !env()->can_call_into_js()); } template diff --git a/src/node_file.cc b/src/node_file.cc index 43a57d77517..6a8424df03a 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -111,18 +111,104 @@ inline int64_t GetOffset(Local value) { return IsSafeJsInt(value) ? value.As()->Value() : -1; } +static const char* get_fs_func_name_by_type(uv_fs_type req_type) { + switch (req_type) { +#define FS_TYPE_TO_NAME(type, name) \ + case UV_FS_##type: \ + return name; + FS_TYPE_TO_NAME(OPEN, "open") + FS_TYPE_TO_NAME(CLOSE, "close") + FS_TYPE_TO_NAME(READ, "read") + FS_TYPE_TO_NAME(WRITE, "write") + FS_TYPE_TO_NAME(SENDFILE, "sendfile") + FS_TYPE_TO_NAME(STAT, "stat") + FS_TYPE_TO_NAME(LSTAT, "lstat") + FS_TYPE_TO_NAME(FSTAT, "fstat") + FS_TYPE_TO_NAME(FTRUNCATE, "ftruncate") + FS_TYPE_TO_NAME(UTIME, "utime") + FS_TYPE_TO_NAME(FUTIME, "futime") + FS_TYPE_TO_NAME(ACCESS, "access") + FS_TYPE_TO_NAME(CHMOD, "chmod") + FS_TYPE_TO_NAME(FCHMOD, "fchmod") + FS_TYPE_TO_NAME(FSYNC, "fsync") + FS_TYPE_TO_NAME(FDATASYNC, "fdatasync") + FS_TYPE_TO_NAME(UNLINK, "unlink") + FS_TYPE_TO_NAME(RMDIR, "rmdir") + FS_TYPE_TO_NAME(MKDIR, "mkdir") + FS_TYPE_TO_NAME(MKDTEMP, "mkdtemp") + FS_TYPE_TO_NAME(RENAME, "rename") + FS_TYPE_TO_NAME(SCANDIR, "scandir") + FS_TYPE_TO_NAME(LINK, "link") + FS_TYPE_TO_NAME(SYMLINK, "symlink") + FS_TYPE_TO_NAME(READLINK, "readlink") + FS_TYPE_TO_NAME(CHOWN, "chown") + FS_TYPE_TO_NAME(FCHOWN, "fchown") + FS_TYPE_TO_NAME(REALPATH, "realpath") + FS_TYPE_TO_NAME(COPYFILE, "copyfile") + FS_TYPE_TO_NAME(LCHOWN, "lchown") + FS_TYPE_TO_NAME(STATFS, "statfs") + FS_TYPE_TO_NAME(MKSTEMP, "mkstemp") + FS_TYPE_TO_NAME(LUTIME, "lutime") +#undef FS_TYPE_TO_NAME + default: + return "unknow"; + } +} + #define TRACE_NAME(name) "fs.sync." #name -#define GET_TRACE_ENABLED \ - (*TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED \ - (TRACING_CATEGORY_NODE2(fs, sync)) != 0) -#define FS_SYNC_TRACE_BEGIN(syscall, ...) \ - if (GET_TRACE_ENABLED) \ - TRACE_EVENT_BEGIN(TRACING_CATEGORY_NODE2(fs, sync), TRACE_NAME(syscall), \ - ##__VA_ARGS__); -#define FS_SYNC_TRACE_END(syscall, ...) \ - if (GET_TRACE_ENABLED) \ - TRACE_EVENT_END(TRACING_CATEGORY_NODE2(fs, sync), TRACE_NAME(syscall), \ - ##__VA_ARGS__); +#define GET_TRACE_ENABLED \ + (*TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( \ + TRACING_CATEGORY_NODE2(fs, sync)) != 0) +#define FS_SYNC_TRACE_BEGIN(syscall, ...) \ + if (GET_TRACE_ENABLED) \ + TRACE_EVENT_BEGIN( \ + TRACING_CATEGORY_NODE2(fs, sync), TRACE_NAME(syscall), ##__VA_ARGS__); +#define FS_SYNC_TRACE_END(syscall, ...) \ + if (GET_TRACE_ENABLED) \ + TRACE_EVENT_END( \ + TRACING_CATEGORY_NODE2(fs, sync), TRACE_NAME(syscall), ##__VA_ARGS__); + +#define FS_ASYNC_TRACE_BEGIN0(fs_type, id) \ + TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(TRACING_CATEGORY_NODE2(fs, async), \ + get_fs_func_name_by_type(fs_type), \ + id); + +#define FS_ASYNC_TRACE_END0(fs_type, id) \ + TRACE_EVENT_NESTABLE_ASYNC_END0(TRACING_CATEGORY_NODE2(fs, async), \ + get_fs_func_name_by_type(fs_type), \ + id); + +#define FS_ASYNC_TRACE_BEGIN1(fs_type, id, name, value) \ + TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(TRACING_CATEGORY_NODE2(fs, async), \ + get_fs_func_name_by_type(fs_type), \ + id, \ + name, \ + value); + +#define FS_ASYNC_TRACE_END1(fs_type, id, name, value) \ + TRACE_EVENT_NESTABLE_ASYNC_END1(TRACING_CATEGORY_NODE2(fs, async), \ + get_fs_func_name_by_type(fs_type), \ + id, \ + name, \ + value); + +#define FS_ASYNC_TRACE_BEGIN2(fs_type, id, name1, value1, name2, value2) \ + TRACE_EVENT_NESTABLE_ASYNC_BEGIN2(TRACING_CATEGORY_NODE2(fs, async), \ + get_fs_func_name_by_type(fs_type), \ + id, \ + name1, \ + value1, \ + name2, \ + value2); + +#define FS_ASYNC_TRACE_END2(fs_type, id, name1, value1, name2, value2) \ + TRACE_EVENT_NESTABLE_ASYNC_END2(TRACING_CATEGORY_NODE2(fs, async), \ + get_fs_func_name_by_type(fs_type), \ + id, \ + name1, \ + value1, \ + name2, \ + value2); // We sometimes need to convert a C++ lambda function to a raw C-style function. // This is helpful, because ReqWrap::Dispatch() does not recognize lambda @@ -374,9 +460,10 @@ MaybeLocal FileHandle::ClosePromise() { CloseReq* req = new CloseReq(env(), close_req_obj, promise, object()); auto AfterClose = uv_fs_callback_t{[](uv_fs_t* req) { - std::unique_ptr close(CloseReq::from_req(req)); - CHECK_NOT_NULL(close); + BaseObjectPtr close(CloseReq::from_req(req)); + CHECK(close); close->file_handle()->AfterClose(); + if (!close->env()->can_call_into_js()) return; Isolate* isolate = close->env()->isolate(); if (req->result < 0) { HandleScope handle_scope(isolate); @@ -650,6 +737,10 @@ void FSReqAfterScope::Reject(uv_fs_t* req) { } bool FSReqAfterScope::Proceed() { + if (!wrap_->env()->can_call_into_js()) { + return false; + } + if (req_->result < 0) { Reject(req_); return false; @@ -660,7 +751,8 @@ bool FSReqAfterScope::Proceed() { void AfterNoArgs(uv_fs_t* req) { FSReqBase* req_wrap = FSReqBase::from_req(req); FSReqAfterScope after(req_wrap, req); - + FS_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) if (after.Proceed()) req_wrap->Resolve(Undefined(req_wrap->env()->isolate())); } @@ -668,7 +760,8 @@ void AfterNoArgs(uv_fs_t* req) { void AfterStat(uv_fs_t* req) { FSReqBase* req_wrap = FSReqBase::from_req(req); FSReqAfterScope after(req_wrap, req); - + FS_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) if (after.Proceed()) { req_wrap->ResolveStat(&req->statbuf); } @@ -677,7 +770,8 @@ void AfterStat(uv_fs_t* req) { void AfterInteger(uv_fs_t* req) { FSReqBase* req_wrap = FSReqBase::from_req(req); FSReqAfterScope after(req_wrap, req); - + FS_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) int result = static_cast(req->result); if (result >= 0 && req_wrap->is_plain_open()) req_wrap->env()->AddUnmanagedFd(result); @@ -689,7 +783,8 @@ void AfterInteger(uv_fs_t* req) { void AfterOpenFileHandle(uv_fs_t* req) { FSReqBase* req_wrap = FSReqBase::from_req(req); FSReqAfterScope after(req_wrap, req); - + FS_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) if (after.Proceed()) { FileHandle* fd = FileHandle::New(req_wrap->binding_data(), static_cast(req->result)); @@ -714,6 +809,8 @@ void FromNamespacedPath(std::string* path) { void AfterMkdirp(uv_fs_t* req) { FSReqBase* req_wrap = FSReqBase::from_req(req); FSReqAfterScope after(req_wrap, req); + FS_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) if (after.Proceed()) { std::string first_path(req_wrap->continuation_data()->first_path()); if (first_path.empty()) @@ -733,7 +830,8 @@ void AfterMkdirp(uv_fs_t* req) { void AfterStringPath(uv_fs_t* req) { FSReqBase* req_wrap = FSReqBase::from_req(req); FSReqAfterScope after(req_wrap, req); - + FS_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) MaybeLocal link; Local error; @@ -752,7 +850,8 @@ void AfterStringPath(uv_fs_t* req) { void AfterStringPtr(uv_fs_t* req) { FSReqBase* req_wrap = FSReqBase::from_req(req); FSReqAfterScope after(req_wrap, req); - + FS_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) MaybeLocal link; Local error; @@ -771,44 +870,8 @@ void AfterStringPtr(uv_fs_t* req) { void AfterScanDir(uv_fs_t* req) { FSReqBase* req_wrap = FSReqBase::from_req(req); FSReqAfterScope after(req_wrap, req); - - if (!after.Proceed()) { - return; - } - Environment* env = req_wrap->env(); - Local error; - int r; - std::vector> name_v; - - for (;;) { - uv_dirent_t ent; - - r = uv_fs_scandir_next(req, &ent); - if (r == UV_EOF) - break; - if (r != 0) { - return req_wrap->Reject(UVException( - env->isolate(), r, nullptr, req_wrap->syscall(), req->path)); - } - - MaybeLocal filename = - StringBytes::Encode(env->isolate(), - ent.name, - req_wrap->encoding(), - &error); - if (filename.IsEmpty()) - return req_wrap->Reject(error); - - name_v.push_back(filename.ToLocalChecked()); - } - - req_wrap->Resolve(Array::New(env->isolate(), name_v.data(), name_v.size())); -} - -void AfterScanDirWithTypes(uv_fs_t* req) { - FSReqBase* req_wrap = FSReqBase::from_req(req); - FSReqAfterScope after(req_wrap, req); - + FS_ASYNC_TRACE_END1( + req->fs_type, req_wrap, "result", static_cast(req->result)) if (!after.Proceed()) { return; } @@ -821,6 +884,8 @@ void AfterScanDirWithTypes(uv_fs_t* req) { std::vector> name_v; std::vector> type_v; + const bool with_file_types = req_wrap->with_file_types(); + for (;;) { uv_dirent_t ent; @@ -832,23 +897,23 @@ void AfterScanDirWithTypes(uv_fs_t* req) { UVException(isolate, r, nullptr, req_wrap->syscall(), req->path)); } - MaybeLocal filename = - StringBytes::Encode(isolate, - ent.name, - req_wrap->encoding(), - &error); - if (filename.IsEmpty()) + Local filename; + if (!StringBytes::Encode(isolate, ent.name, req_wrap->encoding(), &error) + .ToLocal(&filename)) { return req_wrap->Reject(error); + } + name_v.push_back(filename); - name_v.push_back(filename.ToLocalChecked()); - type_v.emplace_back(Integer::New(isolate, ent.type)); + if (with_file_types) type_v.emplace_back(Integer::New(isolate, ent.type)); } - Local result[] = { - Array::New(isolate, name_v.data(), name_v.size()), - Array::New(isolate, type_v.data(), type_v.size()) - }; - req_wrap->Resolve(Array::New(isolate, result, arraysize(result))); + if (with_file_types) { + Local result[] = {Array::New(isolate, name_v.data(), name_v.size()), + Array::New(isolate, type_v.data(), type_v.size())}; + req_wrap->Resolve(Array::New(isolate, result, arraysize(result))); + } else { + req_wrap->Resolve(Array::New(isolate, name_v.data(), name_v.size())); + } } void Access(const FunctionCallbackInfo& args) { @@ -867,6 +932,8 @@ void Access(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { // access(path, mode, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_ACCESS, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "access", UTF8, AfterNoArgs, uv_fs_access, *path, mode); } else { // access(path, mode, undefined, ctx) @@ -891,6 +958,7 @@ void Close(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 1); if (req_wrap_async != nullptr) { // close(fd, req) + FS_ASYNC_TRACE_BEGIN0(UV_FS_CLOSE, req_wrap_async) AsyncCall(env, req_wrap_async, args, "close", UTF8, AfterNoArgs, uv_fs_close, fd); } else { // close(fd, undefined, ctx) @@ -1032,6 +1100,8 @@ static void Stat(const FunctionCallbackInfo& args) { bool use_bigint = args[1]->IsTrue(); FSReqBase* req_wrap_async = GetReqWrap(args, 2, use_bigint); if (req_wrap_async != nullptr) { // stat(path, use_bigint, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_STAT, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "stat", UTF8, AfterStat, uv_fs_stat, *path); } else { // stat(path, use_bigint, undefined, ctx) @@ -1063,6 +1133,8 @@ static void LStat(const FunctionCallbackInfo& args) { bool use_bigint = args[1]->IsTrue(); FSReqBase* req_wrap_async = GetReqWrap(args, 2, use_bigint); if (req_wrap_async != nullptr) { // lstat(path, use_bigint, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_LSTAT, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "lstat", UTF8, AfterStat, uv_fs_lstat, *path); } else { // lstat(path, use_bigint, undefined, ctx) @@ -1095,6 +1167,7 @@ static void FStat(const FunctionCallbackInfo& args) { bool use_bigint = args[1]->IsTrue(); FSReqBase* req_wrap_async = GetReqWrap(args, 2, use_bigint); if (req_wrap_async != nullptr) { // fstat(fd, use_bigint, req) + FS_ASYNC_TRACE_BEGIN0(UV_FS_FSTAT, req_wrap_async) AsyncCall(env, req_wrap_async, args, "fstat", UTF8, AfterStat, uv_fs_fstat, fd); } else { // fstat(fd, use_bigint, undefined, ctx) @@ -1130,6 +1203,12 @@ static void Symlink(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // symlink(target, path, flags, req) + FS_ASYNC_TRACE_BEGIN2(UV_FS_SYMLINK, + req_wrap_async, + "target", + TRACE_STR_COPY(*target), + "path", + TRACE_STR_COPY(*path)) AsyncDestCall(env, req_wrap_async, args, "symlink", *path, path.length(), UTF8, AfterNoArgs, uv_fs_symlink, *target, *path, flags); } else { // symlink(target, path, flags, undefinec, ctx) @@ -1157,6 +1236,12 @@ static void Link(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { // link(src, dest, req) + FS_ASYNC_TRACE_BEGIN2(UV_FS_LINK, + req_wrap_async, + "src", + TRACE_STR_COPY(*src), + "dest", + TRACE_STR_COPY(*dest)) AsyncDestCall(env, req_wrap_async, args, "link", *dest, dest.length(), UTF8, AfterNoArgs, uv_fs_link, *src, *dest); } else { // link(src, dest) @@ -1183,6 +1268,8 @@ static void ReadLink(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { // readlink(path, encoding, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_READLINK, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "readlink", encoding, AfterStringPtr, uv_fs_readlink, *path); } else { @@ -1226,6 +1313,12 @@ static void Rename(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { + FS_ASYNC_TRACE_BEGIN2(UV_FS_RENAME, + req_wrap_async, + "old_path", + TRACE_STR_COPY(*old_path), + "new_path", + TRACE_STR_COPY(*new_path)) AsyncDestCall(env, req_wrap_async, args, "rename", *new_path, new_path.length(), UTF8, AfterNoArgs, uv_fs_rename, *old_path, *new_path); @@ -1253,6 +1346,7 @@ static void FTruncate(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { + FS_ASYNC_TRACE_BEGIN0(UV_FS_FTRUNCATE, req_wrap_async) AsyncCall(env, req_wrap_async, args, "ftruncate", UTF8, AfterNoArgs, uv_fs_ftruncate, fd, len); } else { @@ -1276,6 +1370,7 @@ static void Fdatasync(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 1); if (req_wrap_async != nullptr) { + FS_ASYNC_TRACE_BEGIN0(UV_FS_FDATASYNC, req_wrap_async) AsyncCall(env, req_wrap_async, args, "fdatasync", UTF8, AfterNoArgs, uv_fs_fdatasync, fd); } else { @@ -1298,6 +1393,7 @@ static void Fsync(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 1); if (req_wrap_async != nullptr) { + FS_ASYNC_TRACE_BEGIN0(UV_FS_FSYNC, req_wrap_async) AsyncCall(env, req_wrap_async, args, "fsync", UTF8, AfterNoArgs, uv_fs_fsync, fd); } else { @@ -1320,6 +1416,8 @@ static void Unlink(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 1); if (req_wrap_async != nullptr) { + FS_ASYNC_TRACE_BEGIN1( + UV_FS_UNLINK, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "unlink", UTF8, AfterNoArgs, uv_fs_unlink, *path); } else { @@ -1342,6 +1440,8 @@ static void RMDir(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 1); // rmdir(path, req) if (req_wrap_async != nullptr) { + FS_ASYNC_TRACE_BEGIN1( + UV_FS_RMDIR, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "rmdir", UTF8, AfterNoArgs, uv_fs_rmdir, *path); } else { // rmdir(path, undefined, ctx) @@ -1382,6 +1482,7 @@ int MKDirpSync(uv_loop_t* loop, } break; case UV_EACCES: + case UV_ENOSPC: case UV_ENOTDIR: case UV_EPERM: { return err; @@ -1552,6 +1653,8 @@ static void MKDir(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // mkdir(path, mode, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_UNLINK, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "mkdir", UTF8, mkdirp ? AfterMkdirp : AfterNoArgs, mkdirp ? MKDirpAsync : uv_fs_mkdir, *path, mode); @@ -1598,6 +1701,8 @@ static void RealPath(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { // realpath(path, encoding, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_REALPATH, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "realpath", encoding, AfterStringPtr, uv_fs_realpath, *path); } else { // realpath(path, encoding, undefined, ctx) @@ -1644,13 +1749,18 @@ static void ReadDir(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // readdir(path, encoding, withTypes, req) - if (with_types) { - AsyncCall(env, req_wrap_async, args, "scandir", encoding, - AfterScanDirWithTypes, uv_fs_scandir, *path, 0 /*flags*/); - } else { - AsyncCall(env, req_wrap_async, args, "scandir", encoding, - AfterScanDir, uv_fs_scandir, *path, 0 /*flags*/); - } + req_wrap_async->set_with_file_types(with_types); + FS_ASYNC_TRACE_BEGIN1( + UV_FS_SCANDIR, req_wrap_async, "path", TRACE_STR_COPY(*path)) + AsyncCall(env, + req_wrap_async, + args, + "scandir", + encoding, + AfterScanDir, + uv_fs_scandir, + *path, + 0 /*flags*/); } else { // readdir(path, encoding, withTypes, undefined, ctx) CHECK_EQ(argc, 5); FSReqWrapSync req_wrap_sync; @@ -1733,6 +1843,8 @@ static void Open(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // open(path, flags, mode, req) req_wrap_async->set_is_plain_open(true); + FS_ASYNC_TRACE_BEGIN1( + UV_FS_OPEN, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "open", UTF8, AfterInteger, uv_fs_open, *path, flags, mode); } else { // open(path, flags, mode, undefined, ctx) @@ -1766,6 +1878,8 @@ static void OpenFileHandle(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // openFileHandle(path, flags, mode, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_OPEN, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "open", UTF8, AfterOpenFileHandle, uv_fs_open, *path, flags, mode); } else { // openFileHandle(path, flags, mode, undefined, ctx) @@ -1802,6 +1916,12 @@ static void CopyFile(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // copyFile(src, dest, flags, req) + FS_ASYNC_TRACE_BEGIN2(UV_FS_COPYFILE, + req_wrap_async, + "src", + TRACE_STR_COPY(*src), + "dest", + TRACE_STR_COPY(*dest)) AsyncDestCall(env, req_wrap_async, args, "copyfile", *dest, dest.length(), UTF8, AfterNoArgs, uv_fs_copyfile, *src, *dest, flags); @@ -1858,6 +1978,7 @@ static void WriteBuffer(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 5); if (req_wrap_async != nullptr) { // write(fd, buffer, off, len, pos, req) + FS_ASYNC_TRACE_BEGIN0(UV_FS_WRITE, req_wrap_async) AsyncCall(env, req_wrap_async, args, "write", UTF8, AfterInteger, uv_fs_write, fd, &uvbuf, 1, pos); } else { // write(fd, buffer, off, len, pos, undefined, ctx) @@ -1903,6 +2024,7 @@ static void WriteBuffers(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // writeBuffers(fd, chunks, pos, req) + FS_ASYNC_TRACE_BEGIN0(UV_FS_WRITE, req_wrap_async) AsyncCall(env, req_wrap_async, args, "write", UTF8, AfterInteger, uv_fs_write, fd, *iovs, iovs.length(), pos); } else { // writeBuffers(fd, chunks, pos, undefined, ctx) @@ -1976,6 +2098,7 @@ static void WriteString(const FunctionCallbackInfo& args) { len = StringBytes::Write(isolate, *stack_buffer, len, args[1], enc); stack_buffer.SetLengthAndZeroTerminate(len); uv_buf_t uvbuf = uv_buf_init(*stack_buffer, len); + FS_ASYNC_TRACE_BEGIN0(UV_FS_WRITE, req_wrap_async) int err = req_wrap_async->Dispatch(uv_fs_write, fd, &uvbuf, @@ -2061,6 +2184,7 @@ static void Read(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 5); if (req_wrap_async != nullptr) { // read(fd, buffer, offset, len, pos, req) + FS_ASYNC_TRACE_BEGIN0(UV_FS_READ, req_wrap_async) AsyncCall(env, req_wrap_async, args, "read", UTF8, AfterInteger, uv_fs_read, fd, &uvbuf, 1, pos); } else { // read(fd, buffer, offset, len, pos, undefined, ctx) @@ -2107,6 +2231,7 @@ static void ReadBuffers(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // readBuffers(fd, buffers, pos, req) + FS_ASYNC_TRACE_BEGIN0(UV_FS_READ, req_wrap_async) AsyncCall(env, req_wrap_async, args, "read", UTF8, AfterInteger, uv_fs_read, fd, *iovs, iovs.length(), pos); } else { // readBuffers(fd, buffers, undefined, ctx) @@ -2138,6 +2263,8 @@ static void Chmod(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { // chmod(path, mode, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_CHMOD, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "chmod", UTF8, AfterNoArgs, uv_fs_chmod, *path, mode); } else { // chmod(path, mode, undefined, ctx) @@ -2168,6 +2295,7 @@ static void FChmod(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { // fchmod(fd, mode, req) + FS_ASYNC_TRACE_BEGIN0(UV_FS_FCHMOD, req_wrap_async) AsyncCall(env, req_wrap_async, args, "fchmod", UTF8, AfterNoArgs, uv_fs_fchmod, fd, mode); } else { // fchmod(fd, mode, undefined, ctx) @@ -2201,6 +2329,8 @@ static void Chown(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // chown(path, uid, gid, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_CHOWN, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "chown", UTF8, AfterNoArgs, uv_fs_chown, *path, uid, gid); } else { // chown(path, uid, gid, undefined, ctx) @@ -2234,6 +2364,7 @@ static void FChown(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // fchown(fd, uid, gid, req) + FS_ASYNC_TRACE_BEGIN0(UV_FS_FCHOWN, req_wrap_async) AsyncCall(env, req_wrap_async, args, "fchown", UTF8, AfterNoArgs, uv_fs_fchown, fd, uid, gid); } else { // fchown(fd, uid, gid, undefined, ctx) @@ -2264,6 +2395,8 @@ static void LChown(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // lchown(path, uid, gid, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_LCHOWN, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "lchown", UTF8, AfterNoArgs, uv_fs_lchown, *path, uid, gid); } else { // lchown(path, uid, gid, undefined, ctx) @@ -2294,6 +2427,8 @@ static void UTimes(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // utimes(path, atime, mtime, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_UTIME, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "utime", UTF8, AfterNoArgs, uv_fs_utime, *path, atime, mtime); } else { // utimes(path, atime, mtime, undefined, ctx) @@ -2323,6 +2458,7 @@ static void FUTimes(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // futimes(fd, atime, mtime, req) + FS_ASYNC_TRACE_BEGIN0(UV_FS_FUTIME, req_wrap_async) AsyncCall(env, req_wrap_async, args, "futime", UTF8, AfterNoArgs, uv_fs_futime, fd, atime, mtime); } else { // futimes(fd, atime, mtime, undefined, ctx) @@ -2352,6 +2488,8 @@ static void LUTimes(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 3); if (req_wrap_async != nullptr) { // lutimes(path, atime, mtime, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_LUTIME, req_wrap_async, "path", TRACE_STR_COPY(*path)) AsyncCall(env, req_wrap_async, args, "lutime", UTF8, AfterNoArgs, uv_fs_lutime, *path, atime, mtime); } else { // lutimes(path, atime, mtime, undefined, ctx) @@ -2378,6 +2516,8 @@ static void Mkdtemp(const FunctionCallbackInfo& args) { FSReqBase* req_wrap_async = GetReqWrap(args, 2); if (req_wrap_async != nullptr) { // mkdtemp(tmpl, encoding, req) + FS_ASYNC_TRACE_BEGIN1( + UV_FS_MKDTEMP, req_wrap_async, "path", TRACE_STR_COPY(*tmpl)) AsyncCall(env, req_wrap_async, args, "mkdtemp", encoding, AfterStringPath, uv_fs_mkdtemp, *tmpl); } else { // mkdtemp(tmpl, encoding, undefined, ctx) @@ -2427,7 +2567,7 @@ void BindingData::Deserialize(Local context, Local holder, int index, InternalFieldInfo* info) { - DCHECK_EQ(index, BaseObject::kSlot); + DCHECK_EQ(index, BaseObject::kEmbedderType); HandleScope scope(context->GetIsolate()); Environment* env = Environment::GetCurrent(context); BindingData* binding = env->AddBindingData(context, holder); @@ -2444,7 +2584,7 @@ void BindingData::PrepareForSerialization(Local context, } InternalFieldInfo* BindingData::Serialize(int index) { - DCHECK_EQ(index, BaseObject::kSlot); + DCHECK_EQ(index, BaseObject::kEmbedderType); InternalFieldInfo* info = InternalFieldInfo::New(type()); return info; } @@ -2462,46 +2602,46 @@ void Initialize(Local target, env->AddBindingData(context, target); if (binding_data == nullptr) return; - env->SetMethod(target, "access", Access); - env->SetMethod(target, "close", Close); - env->SetMethod(target, "open", Open); - env->SetMethod(target, "openFileHandle", OpenFileHandle); - env->SetMethod(target, "read", Read); - env->SetMethod(target, "readBuffers", ReadBuffers); - env->SetMethod(target, "fdatasync", Fdatasync); - env->SetMethod(target, "fsync", Fsync); - env->SetMethod(target, "rename", Rename); - env->SetMethod(target, "ftruncate", FTruncate); - env->SetMethod(target, "rmdir", RMDir); - env->SetMethod(target, "mkdir", MKDir); - env->SetMethod(target, "readdir", ReadDir); - env->SetMethod(target, "internalModuleReadJSON", InternalModuleReadJSON); - env->SetMethod(target, "internalModuleStat", InternalModuleStat); - env->SetMethod(target, "stat", Stat); - env->SetMethod(target, "lstat", LStat); - env->SetMethod(target, "fstat", FStat); - env->SetMethod(target, "link", Link); - env->SetMethod(target, "symlink", Symlink); - env->SetMethod(target, "readlink", ReadLink); - env->SetMethod(target, "unlink", Unlink); - env->SetMethod(target, "writeBuffer", WriteBuffer); - env->SetMethod(target, "writeBuffers", WriteBuffers); - env->SetMethod(target, "writeString", WriteString); - env->SetMethod(target, "realpath", RealPath); - env->SetMethod(target, "copyFile", CopyFile); - - env->SetMethod(target, "chmod", Chmod); - env->SetMethod(target, "fchmod", FChmod); - - env->SetMethod(target, "chown", Chown); - env->SetMethod(target, "fchown", FChown); - env->SetMethod(target, "lchown", LChown); - - env->SetMethod(target, "utimes", UTimes); - env->SetMethod(target, "futimes", FUTimes); - env->SetMethod(target, "lutimes", LUTimes); - - env->SetMethod(target, "mkdtemp", Mkdtemp); + SetMethod(context, target, "access", Access); + SetMethod(context, target, "close", Close); + SetMethod(context, target, "open", Open); + SetMethod(context, target, "openFileHandle", OpenFileHandle); + SetMethod(context, target, "read", Read); + SetMethod(context, target, "readBuffers", ReadBuffers); + SetMethod(context, target, "fdatasync", Fdatasync); + SetMethod(context, target, "fsync", Fsync); + SetMethod(context, target, "rename", Rename); + SetMethod(context, target, "ftruncate", FTruncate); + SetMethod(context, target, "rmdir", RMDir); + SetMethod(context, target, "mkdir", MKDir); + SetMethod(context, target, "readdir", ReadDir); + SetMethod(context, target, "internalModuleReadJSON", InternalModuleReadJSON); + SetMethod(context, target, "internalModuleStat", InternalModuleStat); + SetMethod(context, target, "stat", Stat); + SetMethod(context, target, "lstat", LStat); + SetMethod(context, target, "fstat", FStat); + SetMethod(context, target, "link", Link); + SetMethod(context, target, "symlink", Symlink); + SetMethod(context, target, "readlink", ReadLink); + SetMethod(context, target, "unlink", Unlink); + SetMethod(context, target, "writeBuffer", WriteBuffer); + SetMethod(context, target, "writeBuffers", WriteBuffers); + SetMethod(context, target, "writeString", WriteString); + SetMethod(context, target, "realpath", RealPath); + SetMethod(context, target, "copyFile", CopyFile); + + SetMethod(context, target, "chmod", Chmod); + SetMethod(context, target, "fchmod", FChmod); + + SetMethod(context, target, "chown", Chown); + SetMethod(context, target, "fchown", FChown); + SetMethod(context, target, "lchown", LChown); + + SetMethod(context, target, "utimes", UTimes); + SetMethod(context, target, "futimes", FUTimes); + SetMethod(context, target, "lutimes", LUTimes); + + SetMethod(context, target, "mkdtemp", Mkdtemp); target ->Set(context, @@ -2514,11 +2654,11 @@ void Initialize(Local target, StatWatcher::Initialize(env, target); // Create FunctionTemplate for FSReqCallback - Local fst = env->NewFunctionTemplate(NewFSReqCallback); + Local fst = NewFunctionTemplate(isolate, NewFSReqCallback); fst->InstanceTemplate()->SetInternalFieldCount( FSReqBase::kInternalFieldCount); fst->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetConstructorFunction(target, "FSReqCallback", fst); + SetConstructorFunction(context, target, "FSReqCallback", fst); // Create FunctionTemplate for FileHandleReadWrap. There’s no need // to do anything in the constructor, so we only store the instance template. @@ -2543,14 +2683,14 @@ void Initialize(Local target, env->set_fsreqpromise_constructor_template(fpo); // Create FunctionTemplate for FileHandle - Local fd = env->NewFunctionTemplate(FileHandle::New); + Local fd = NewFunctionTemplate(isolate, FileHandle::New); fd->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(fd, "close", FileHandle::Close); - env->SetProtoMethod(fd, "releaseFD", FileHandle::ReleaseFD); + SetProtoMethod(isolate, fd, "close", FileHandle::Close); + SetProtoMethod(isolate, fd, "releaseFD", FileHandle::ReleaseFD); Local fdt = fd->InstanceTemplate(); fdt->SetInternalFieldCount(FileHandle::kInternalFieldCount); StreamBase::AddMethods(env, fd); - env->SetConstructorFunction(target, "FileHandle", fd); + SetConstructorFunction(context, target, "FileHandle", fd); env->set_fd_constructor_template(fdt); // Create FunctionTemplate for FileHandle::CloseReq diff --git a/src/node_file.h b/src/node_file.h index cf98c5c933b..482446eb624 100644 --- a/src/node_file.h +++ b/src/node_file.h @@ -89,8 +89,10 @@ class FSReqBase : public ReqWrap { enum encoding encoding() const { return encoding_; } bool use_bigint() const { return use_bigint_; } bool is_plain_open() const { return is_plain_open_; } + bool with_file_types() const { return with_file_types_; } void set_is_plain_open(bool value) { is_plain_open_ = value; } + void set_with_file_types(bool value) { with_file_types_ = value; } FSContinuationData* continuation_data() const { return continuation_data_.get(); @@ -116,6 +118,7 @@ class FSReqBase : public ReqWrap { bool has_data_ = false; bool use_bigint_ = false; bool is_plain_open_ = false; + bool with_file_types_ = false; const char* syscall_ = nullptr; BaseObjectPtr binding_data_; diff --git a/src/node_http2.cc b/src/node_http2.cc index ca82da47b4b..42694cccdbe 100644 --- a/src/node_http2.cc +++ b/src/node_http2.cc @@ -1,12 +1,11 @@ +#include "node_http2.h" #include "aliased_buffer.h" -#include "allocated_buffer-inl.h" #include "aliased_struct-inl.h" #include "debug_utils-inl.h" #include "histogram-inl.h" #include "memory_tracker-inl.h" #include "node.h" #include "node_buffer.h" -#include "node_http2.h" #include "node_http_common-inl.h" #include "node_mem-inl.h" #include "node_perf.h" @@ -641,7 +640,7 @@ void Http2Stream::EmitStatistics() { std::unique_ptr entry = std::make_unique( "Http2Stream", - start, + start - (node::performance::timeOrigin / 1e6), duration, statistics_); @@ -661,7 +660,7 @@ void Http2Session::EmitStatistics() { std::unique_ptr entry = std::make_unique( "Http2Session", - start, + start - (node::performance::timeOrigin / 1e6), duration, statistics_); @@ -1116,18 +1115,30 @@ int Http2Session::OnStreamClose(nghttp2_session* handle, if (!stream || stream->is_destroyed()) return 0; + // Don't close synchronously in case there's pending data to be written. This + // may happen when writing trailing headers. + if (code == NGHTTP2_NO_ERROR && nghttp2_session_want_write(handle) && + !env->is_stopping()) { + env->SetImmediate([handle, id, code, user_data](Environment* env) { + OnStreamClose(handle, id, code, user_data); + }); + + return 0; + } + stream->Close(code); // It is possible for the stream close to occur before the stream is // ever passed on to the javascript side. If that happens, the callback // will return false. - Local arg = Integer::NewFromUnsigned(isolate, code); - MaybeLocal answer = - stream->MakeCallback(env->http2session_on_stream_close_function(), - 1, &arg); - if (answer.IsEmpty() || answer.ToLocalChecked()->IsFalse()) { - // Skip to destroy - stream->Destroy(); + if (env->can_call_into_js()) { + Local arg = Integer::NewFromUnsigned(isolate, code); + MaybeLocal answer = stream->MakeCallback( + env->http2session_on_stream_close_function(), 1, &arg); + if (answer.IsEmpty() || answer.ToLocalChecked()->IsFalse()) { + // Skip to destroy + stream->Destroy(); + } } return 0; } @@ -1630,9 +1641,11 @@ void Http2Session::MaybeScheduleWrite() { // Sending data may call arbitrary JS code, so keep track of // async context. - HandleScope handle_scope(env->isolate()); - InternalCallbackScope callback_scope(this); - SendPendingData(); + if (env->can_call_into_js()) { + HandleScope handle_scope(env->isolate()); + InternalCallbackScope callback_scope(this); + SendPendingData(); + } }); } } @@ -2646,7 +2659,6 @@ void Http2Session::New(const FunctionCallbackInfo& args) { static_cast( args[0]->Int32Value(env->context()).ToChecked()); Http2Session* session = new Http2Session(state, args.This(), type); - session->get_async_id(); // avoid compiler warning Debug(session, "session created"); } @@ -3206,10 +3218,10 @@ void Initialize(Local target, NODE_DEFINE_CONSTANT(target, kSessionHasAltsvcListeners); // Method to fetch the nghttp2 string description of an nghttp2 error code - env->SetMethod(target, "nghttp2ErrorString", HttpErrorString); - env->SetMethod(target, "refreshDefaultSettings", RefreshDefaultSettings); - env->SetMethod(target, "packSettings", PackSettings); - env->SetMethod(target, "setCallbackFunctions", SetCallbackFunctions); + SetMethod(context, target, "nghttp2ErrorString", HttpErrorString); + SetMethod(context, target, "refreshDefaultSettings", RefreshDefaultSettings); + SetMethod(context, target, "packSettings", PackSettings); + SetMethod(context, target, "setCallbackFunctions", SetCallbackFunctions); Local ping = FunctionTemplate::New(env->isolate()); ping->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "Http2Ping")); @@ -3225,50 +3237,54 @@ void Initialize(Local target, env->set_http2settings_constructor_template(settingt); Local stream = FunctionTemplate::New(env->isolate()); - env->SetProtoMethod(stream, "id", Http2Stream::GetID); - env->SetProtoMethod(stream, "destroy", Http2Stream::Destroy); - env->SetProtoMethod(stream, "priority", Http2Stream::Priority); - env->SetProtoMethod(stream, "pushPromise", Http2Stream::PushPromise); - env->SetProtoMethod(stream, "info", Http2Stream::Info); - env->SetProtoMethod(stream, "trailers", Http2Stream::Trailers); - env->SetProtoMethod(stream, "respond", Http2Stream::Respond); - env->SetProtoMethod(stream, "rstStream", Http2Stream::RstStream); - env->SetProtoMethod(stream, "refreshState", Http2Stream::RefreshState); + SetProtoMethod(isolate, stream, "id", Http2Stream::GetID); + SetProtoMethod(isolate, stream, "destroy", Http2Stream::Destroy); + SetProtoMethod(isolate, stream, "priority", Http2Stream::Priority); + SetProtoMethod(isolate, stream, "pushPromise", Http2Stream::PushPromise); + SetProtoMethod(isolate, stream, "info", Http2Stream::Info); + SetProtoMethod(isolate, stream, "trailers", Http2Stream::Trailers); + SetProtoMethod(isolate, stream, "respond", Http2Stream::Respond); + SetProtoMethod(isolate, stream, "rstStream", Http2Stream::RstStream); + SetProtoMethod(isolate, stream, "refreshState", Http2Stream::RefreshState); stream->Inherit(AsyncWrap::GetConstructorTemplate(env)); StreamBase::AddMethods(env, stream); Local streamt = stream->InstanceTemplate(); streamt->SetInternalFieldCount(StreamBase::kInternalFieldCount); env->set_http2stream_constructor_template(streamt); - env->SetConstructorFunction(target, "Http2Stream", stream); + SetConstructorFunction(context, target, "Http2Stream", stream); Local session = - env->NewFunctionTemplate(Http2Session::New); + NewFunctionTemplate(isolate, Http2Session::New); session->InstanceTemplate()->SetInternalFieldCount( Http2Session::kInternalFieldCount); session->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(session, "origin", Http2Session::Origin); - env->SetProtoMethod(session, "altsvc", Http2Session::AltSvc); - env->SetProtoMethod(session, "ping", Http2Session::Ping); - env->SetProtoMethod(session, "consume", Http2Session::Consume); - env->SetProtoMethod(session, "receive", Http2Session::Receive); - env->SetProtoMethod(session, "destroy", Http2Session::Destroy); - env->SetProtoMethod(session, "goaway", Http2Session::Goaway); - env->SetProtoMethod(session, "settings", Http2Session::Settings); - env->SetProtoMethod(session, "request", Http2Session::Request); - env->SetProtoMethod(session, "setNextStreamID", - Http2Session::SetNextStreamID); - env->SetProtoMethod(session, "setLocalWindowSize", - Http2Session::SetLocalWindowSize); - env->SetProtoMethod(session, "updateChunksSent", - Http2Session::UpdateChunksSent); - env->SetProtoMethod(session, "refreshState", Http2Session::RefreshState); - env->SetProtoMethod( - session, "localSettings", + SetProtoMethod(isolate, session, "origin", Http2Session::Origin); + SetProtoMethod(isolate, session, "altsvc", Http2Session::AltSvc); + SetProtoMethod(isolate, session, "ping", Http2Session::Ping); + SetProtoMethod(isolate, session, "consume", Http2Session::Consume); + SetProtoMethod(isolate, session, "receive", Http2Session::Receive); + SetProtoMethod(isolate, session, "destroy", Http2Session::Destroy); + SetProtoMethod(isolate, session, "goaway", Http2Session::Goaway); + SetProtoMethod(isolate, session, "settings", Http2Session::Settings); + SetProtoMethod(isolate, session, "request", Http2Session::Request); + SetProtoMethod( + isolate, session, "setNextStreamID", Http2Session::SetNextStreamID); + SetProtoMethod( + isolate, session, "setLocalWindowSize", Http2Session::SetLocalWindowSize); + SetProtoMethod( + isolate, session, "updateChunksSent", Http2Session::UpdateChunksSent); + SetProtoMethod(isolate, session, "refreshState", Http2Session::RefreshState); + SetProtoMethod( + isolate, + session, + "localSettings", Http2Session::RefreshSettings); - env->SetProtoMethod( - session, "remoteSettings", + SetProtoMethod( + isolate, + session, + "remoteSettings", Http2Session::RefreshSettings); - env->SetConstructorFunction(target, "Http2Session", session); + SetConstructorFunction(context, target, "Http2Session", session); Local constants = Object::New(isolate); diff --git a/src/node_http2.h b/src/node_http2.h index 5bd715da8a2..fea51d2d7f3 100644 --- a/src/node_http2.h +++ b/src/node_http2.h @@ -3,8 +3,9 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -// FIXME(joyeecheung): nghttp2.h needs stdint.h to compile on Windows -#include +// clang-format off +#include "node.h" // nghttp2.h needs ssize_t +// clang-format on #include "nghttp2/nghttp2.h" #include "env.h" diff --git a/src/node_http_common.h b/src/node_http_common.h index ad9f2a864e0..4440b5c58d9 100644 --- a/src/node_http_common.h +++ b/src/node_http_common.h @@ -196,7 +196,7 @@ enum http_status_codes { // Unlike the HTTP/1 implementation, the HTTP/2 implementation is not limited // to a fixed number of known supported HTTP methods. These constants, therefore // are provided strictly as a convenience to users and are exposed via the -// require('http2').constants object. +// require('node:http2').constants object. #define HTTP_KNOWN_METHODS(V) \ V(ACL, "ACL") \ V(BASELINE_CONTROL, "BASELINE-CONTROL") \ diff --git a/src/node_http_parser.cc b/src/node_http_parser.cc index b2160512c72..74f32480b95 100644 --- a/src/node_http_parser.cc +++ b/src/node_http_parser.cc @@ -60,6 +60,7 @@ using v8::FunctionTemplate; using v8::HandleScope; using v8::Int32; using v8::Integer; +using v8::Isolate; using v8::Local; using v8::MaybeLocal; using v8::Number; @@ -199,11 +200,7 @@ class Parser : public AsyncWrap, public StreamListener { binding_data_(binding_data) { } - - void MemoryInfo(MemoryTracker* tracker) const override { - tracker->TrackField("current_buffer", current_buffer_); - } - + SET_NO_MEMORY_INFO() SET_MEMORY_INFO_NAME(Parser) SET_SELF_SIZE(Parser) @@ -392,32 +389,20 @@ class Parser : public AsyncWrap, public StreamListener { int on_body(const char* at, size_t length) { - EscapableHandleScope scope(env()->isolate()); + if (length == 0) + return 0; - Local obj = object(); - Local cb = obj->Get(env()->context(), kOnBody).ToLocalChecked(); + Environment* env = this->env(); + HandleScope handle_scope(env->isolate()); + + Local cb = object()->Get(env->context(), kOnBody).ToLocalChecked(); if (!cb->IsFunction()) return 0; - // We came from consumed stream - if (current_buffer_.IsEmpty()) { - // Make sure Buffer will be in parent HandleScope - current_buffer_ = scope.Escape(Buffer::Copy( - env()->isolate(), - current_buffer_data_, - current_buffer_len_).ToLocalChecked()); - } + Local buffer = Buffer::Copy(env, at, length).ToLocalChecked(); - Local argv[3] = { - current_buffer_, - Integer::NewFromUnsigned( - env()->isolate(), static_cast(at - current_buffer_data_)), - Integer::NewFromUnsigned(env()->isolate(), length)}; - - MaybeLocal r = MakeCallback(cb.As(), - arraysize(argv), - argv); + MaybeLocal r = MakeCallback(cb.As(), 1, &buffer); if (r.IsEmpty()) { got_exception_ = true; @@ -514,17 +499,9 @@ class Parser : public AsyncWrap, public StreamListener { static void Execute(const FunctionCallbackInfo& args) { Parser* parser; ASSIGN_OR_RETURN_UNWRAP(&parser, args.Holder()); - CHECK(parser->current_buffer_.IsEmpty()); - CHECK_EQ(parser->current_buffer_len_, 0); - CHECK_NULL(parser->current_buffer_data_); ArrayBufferViewContents buffer(args[0]); - // This is a hack to get the current_buffer to the callbacks with the least - // amount of overhead. Nothing else will run while http_parser_execute() - // runs, therefore this pointer can be set and used for the execution. - parser->current_buffer_ = args[0].As(); - Local ret = parser->Execute(buffer.data(), buffer.length()); if (!ret.IsEmpty()) @@ -536,7 +513,6 @@ class Parser : public AsyncWrap, public StreamListener { Parser* parser; ASSIGN_OR_RETURN_UNWRAP(&parser, args.Holder()); - CHECK(parser->current_buffer_.IsEmpty()); Local ret = parser->Execute(nullptr, 0); if (!ret.IsEmpty()) @@ -600,11 +576,6 @@ class Parser : public AsyncWrap, public StreamListener { // Should always be called from the same context. CHECK_EQ(env, parser->env()); - if (parser->execute_depth_) { - parser->pending_pause_ = should_pause; - return; - } - if (should_pause) { llhttp_pause(&parser->parser_); } else { @@ -686,7 +657,6 @@ class Parser : public AsyncWrap, public StreamListener { if (nread == 0) return; - current_buffer_.Clear(); Local ret = Execute(buf.base, nread); // Exception @@ -737,17 +707,12 @@ class Parser : public AsyncWrap, public StreamListener { llhttp_errno_t err; - // Do not allow re-entering `http_parser_execute()` - CHECK_EQ(execute_depth_, 0); - - execute_depth_++; if (data == nullptr) { err = llhttp_finish(&parser_); } else { err = llhttp_execute(&parser_, data, len); Save(); } - execute_depth_--; // Calculate bytes read and resume after Upgrade/CONNECT pause size_t nread = len; @@ -767,8 +732,6 @@ class Parser : public AsyncWrap, public StreamListener { llhttp_pause(&parser_); } - // Unassign the 'buffer_' variable - current_buffer_.Clear(); current_buffer_len_ = 0; current_buffer_data_ = nullptr; @@ -893,8 +856,6 @@ class Parser : public AsyncWrap, public StreamListener { int MaybePause() { - CHECK_NE(execute_depth_, 0); - if (!pending_pause_) { return 0; } @@ -922,10 +883,8 @@ class Parser : public AsyncWrap, public StreamListener { size_t num_values_; bool have_flushed_; bool got_exception_; - Local current_buffer_; size_t current_buffer_len_; const char* current_buffer_data_; - unsigned int execute_depth_ = 0; bool pending_pause_ = false; uint64_t header_nread_ = 0; uint64_t max_http_header_size_; @@ -983,11 +942,12 @@ void InitializeHttpParser(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); BindingData* const binding_data = env->AddBindingData(context, target); if (binding_data == nullptr) return; - Local t = env->NewFunctionTemplate(Parser::New); + Local t = NewFunctionTemplate(isolate, Parser::New); t->InstanceTemplate()->SetInternalFieldCount(Parser::kInternalFieldCount); t->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "REQUEST"), @@ -1031,18 +991,18 @@ void InitializeHttpParser(Local target, methods).Check(); t->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "close", Parser::Close); - env->SetProtoMethod(t, "free", Parser::Free); - env->SetProtoMethod(t, "execute", Parser::Execute); - env->SetProtoMethod(t, "finish", Parser::Finish); - env->SetProtoMethod(t, "initialize", Parser::Initialize); - env->SetProtoMethod(t, "pause", Parser::Pause); - env->SetProtoMethod(t, "resume", Parser::Pause); - env->SetProtoMethod(t, "consume", Parser::Consume); - env->SetProtoMethod(t, "unconsume", Parser::Unconsume); - env->SetProtoMethod(t, "getCurrentBuffer", Parser::GetCurrentBuffer); - - env->SetConstructorFunction(target, "HTTPParser", t); + SetProtoMethod(isolate, t, "close", Parser::Close); + SetProtoMethod(isolate, t, "free", Parser::Free); + SetProtoMethod(isolate, t, "execute", Parser::Execute); + SetProtoMethod(isolate, t, "finish", Parser::Finish); + SetProtoMethod(isolate, t, "initialize", Parser::Initialize); + SetProtoMethod(isolate, t, "pause", Parser::Pause); + SetProtoMethod(isolate, t, "resume", Parser::Pause); + SetProtoMethod(isolate, t, "consume", Parser::Consume); + SetProtoMethod(isolate, t, "unconsume", Parser::Unconsume); + SetProtoMethod(isolate, t, "getCurrentBuffer", Parser::GetCurrentBuffer); + + SetConstructorFunction(context, target, "HTTPParser", t); } } // anonymous namespace diff --git a/src/node_i18n.cc b/src/node_i18n.cc index c537a247f55..581d52a7d05 100644 --- a/src/node_i18n.cc +++ b/src/node_i18n.cc @@ -425,7 +425,11 @@ void ConverterObject::Create(const FunctionCallbackInfo& args) { nullptr, nullptr, nullptr, &status); } - new ConverterObject(env, obj, conv, flags); + auto converter = new ConverterObject(env, obj, conv, flags); + size_t sublen = ucnv_getMinCharSize(conv); + std::string sub(sublen, '?'); + converter->set_subst_chars(sub.c_str()); + args.GetReturnValue().Set(obj); } @@ -834,17 +838,17 @@ void Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); - env->SetMethod(target, "toUnicode", ToUnicode); - env->SetMethod(target, "toASCII", ToASCII); - env->SetMethod(target, "getStringWidth", GetStringWidth); + SetMethod(context, target, "toUnicode", ToUnicode); + SetMethod(context, target, "toASCII", ToASCII); + SetMethod(context, target, "getStringWidth", GetStringWidth); // One-shot converters - env->SetMethod(target, "icuErrName", ICUErrorName); - env->SetMethod(target, "transcode", Transcode); + SetMethod(context, target, "icuErrName", ICUErrorName); + SetMethod(context, target, "transcode", Transcode); // ConverterObject { - Local t = FunctionTemplate::New(env->isolate()); + Local t = NewFunctionTemplate(env->isolate(), nullptr); t->Inherit(BaseObject::GetConstructorTemplate(env)); t->InstanceTemplate()->SetInternalFieldCount( ConverterObject::kInternalFieldCount); @@ -854,9 +858,9 @@ void Initialize(Local target, env->set_i18n_converter_template(t->InstanceTemplate()); } - env->SetMethod(target, "getConverter", ConverterObject::Create); - env->SetMethod(target, "decode", ConverterObject::Decode); - env->SetMethod(target, "hasConverter", ConverterObject::Has); + SetMethod(context, target, "getConverter", ConverterObject::Create); + SetMethod(context, target, "decode", ConverterObject::Decode); + SetMethod(context, target, "hasConverter", ConverterObject::Has); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/node_internals.h b/src/node_internals.h index d37be23cd63..de4ae22fe3d 100644 --- a/src/node_internals.h +++ b/src/node_internals.h @@ -43,8 +43,8 @@ struct sockaddr; namespace node { -namespace native_module { -class NativeModuleLoader; +namespace builtins { +class BuiltinLoader; } namespace per_process { @@ -58,7 +58,7 @@ class Environment; // Convert a struct sockaddr to a { address: '1.2.3.4', port: 1234 } JS object. // Sets address and port properties on the info object and returns it. // If |info| is omitted, a new object is returned. -v8::Local AddressToJS( +v8::MaybeLocal AddressToJS( Environment* env, const sockaddr* addr, v8::Local info = v8::Local()); @@ -118,6 +118,10 @@ class NodeArrayBufferAllocator : public ArrayBufferAllocator { private: uint32_t zero_fill_field_ = 1; // Boolean but exposed as uint32 to JS land. std::atomic total_mem_usage_ {0}; + + // Delegate to V8's allocator for compatibility with the V8 memory cage. + std::unique_ptr allocator_{ + v8::ArrayBuffer::Allocator::NewDefaultAllocator()}; }; class DebuggingArrayBufferAllocator final : public NodeArrayBufferAllocator { @@ -286,7 +290,10 @@ class ThreadPoolWork { #endif // defined(__POSIX__) && !defined(__ANDROID__) && !defined(__CloudABI__) namespace credentials { -bool SafeGetenv(const char* key, std::string* text, Environment* env = nullptr); +bool SafeGetenv(const char* key, + std::string* text, + std::shared_ptr env_vars = nullptr, + v8::Isolate* isolate = nullptr); } // namespace credentials void DefineZlibConstants(v8::Local target); @@ -320,13 +327,14 @@ enum InitializationSettingsFlags : uint64_t { }; // TODO(codebytere): eventually document and expose to embedders. -InitializationResult InitializeOncePerProcess(int argc, char** argv); -InitializationResult InitializeOncePerProcess( - int argc, - char** argv, - InitializationSettingsFlags flags, - ProcessFlags::Flags process_flags = ProcessFlags::kNoFlags); -void TearDownOncePerProcess(); +InitializationResult NODE_EXTERN_PRIVATE InitializeOncePerProcess(int argc, + char** argv); +InitializationResult NODE_EXTERN_PRIVATE InitializeOncePerProcess( + int argc, + char** argv, + InitializationSettingsFlags flags, + ProcessFlags::Flags process_flags = ProcessFlags::kNoFlags); +void NODE_EXTERN_PRIVATE TearDownOncePerProcess(); void SetIsolateErrorHandlers(v8::Isolate* isolate, const IsolateSettings& s); void SetIsolateMiscHandlers(v8::Isolate* isolate, const IsolateSettings& s); void SetIsolateCreateParamsForNode(v8::Isolate::CreateParams* params); @@ -382,23 +390,6 @@ namespace heap { bool WriteSnapshot(v8::Isolate* isolate, const char* filename); } -class TraceEventScope { - public: - TraceEventScope(const char* category, - const char* name, - void* id) : category_(category), name_(name), id_(id) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(category_, name_, id_); - } - ~TraceEventScope() { - TRACE_EVENT_NESTABLE_ASYNC_END0(category_, name_, id_); - } - - private: - const char* category_; - const char* name_; - void* id_; -}; - namespace heap { void DeleteHeapSnapshot(const v8::HeapSnapshot* snapshot); diff --git a/src/node_main_instance.cc b/src/node_main_instance.cc index ce319cca3ed..e4101bbcff2 100644 --- a/src/node_main_instance.cc +++ b/src/node_main_instance.cc @@ -1,9 +1,11 @@ #include "node_main_instance.h" #include #include "debug_utils-inl.h" +#include "node_builtins.h" #include "node_external_reference.h" #include "node_internals.h" #include "node_options-inl.h" +#include "node_snapshot_builder.h" #include "node_snapshotable.h" #include "node_v8_platform-inl.h" #include "util-inl.h" @@ -23,8 +25,6 @@ using v8::Isolate; using v8::Local; using v8::Locker; -std::unique_ptr NodeMainInstance::registry_ = - nullptr; NodeMainInstance::NodeMainInstance(Isolate* isolate, uv_loop_t* event_loop, MultiIsolatePlatform* platform, @@ -36,21 +36,13 @@ NodeMainInstance::NodeMainInstance(Isolate* isolate, isolate_(isolate), platform_(platform), isolate_data_(nullptr), - owns_isolate_(false), - deserialize_mode_(false) { + snapshot_data_(nullptr) { isolate_data_ = std::make_unique(isolate_, event_loop, platform, nullptr); SetIsolateMiscHandlers(isolate_, {}); } -const std::vector& NodeMainInstance::CollectExternalReferences() { - // Cannot be called more than once. - CHECK_NULL(registry_); - registry_.reset(new ExternalReferenceRegistry()); - return registry_->external_references(); -} - std::unique_ptr NodeMainInstance::Create( Isolate* isolate, uv_loop_t* event_loop, @@ -61,28 +53,23 @@ std::unique_ptr NodeMainInstance::Create( new NodeMainInstance(isolate, event_loop, platform, args, exec_args)); } -NodeMainInstance::NodeMainInstance( - Isolate::CreateParams* params, - uv_loop_t* event_loop, - MultiIsolatePlatform* platform, - const std::vector& args, - const std::vector& exec_args, - const std::vector* per_isolate_data_indexes) +NodeMainInstance::NodeMainInstance(const SnapshotData* snapshot_data, + uv_loop_t* event_loop, + MultiIsolatePlatform* platform, + const std::vector& args, + const std::vector& exec_args) : args_(args), exec_args_(exec_args), array_buffer_allocator_(ArrayBufferAllocator::Create()), isolate_(nullptr), platform_(platform), - isolate_data_(nullptr), - owns_isolate_(true) { - params->array_buffer_allocator = array_buffer_allocator_.get(); - deserialize_mode_ = per_isolate_data_indexes != nullptr; - if (deserialize_mode_) { - // TODO(joyeecheung): collect external references and set it in - // params.external_references. - const std::vector& external_references = - CollectExternalReferences(); - params->external_references = external_references.data(); + isolate_data_(), + isolate_params_(std::make_unique()), + snapshot_data_(snapshot_data) { + isolate_params_->array_buffer_allocator = array_buffer_allocator_.get(); + if (snapshot_data != nullptr) { + SnapshotBuilder::InitializeIsolateParams(snapshot_data, + isolate_params_.get()); } isolate_ = Isolate::Allocate(); @@ -90,48 +77,52 @@ NodeMainInstance::NodeMainInstance( // Register the isolate on the platform before the isolate gets initialized, // so that the isolate can access the platform during initialization. platform->RegisterIsolate(isolate_, event_loop); - SetIsolateCreateParamsForNode(params); - Isolate::Initialize(isolate_, *params); + SetIsolateCreateParamsForNode(isolate_params_.get()); + Isolate::Initialize(isolate_, *isolate_params_); // If the indexes are not nullptr, we are not deserializing - CHECK_IMPLIES(deserialize_mode_, params->external_references != nullptr); - isolate_data_ = std::make_unique(isolate_, - event_loop, - platform, - array_buffer_allocator_.get(), - per_isolate_data_indexes); + isolate_data_ = std::make_unique( + isolate_, + event_loop, + platform, + array_buffer_allocator_.get(), + snapshot_data == nullptr ? nullptr + : &(snapshot_data->isolate_data_indices)); IsolateSettings s; SetIsolateMiscHandlers(isolate_, s); - if (!deserialize_mode_) { + if (snapshot_data == nullptr) { // If in deserialize mode, delay until after the deserialization is // complete. SetIsolateErrorHandlers(isolate_, s); } isolate_data_->max_young_gen_size = - params->constraints.max_young_generation_size_in_bytes(); + isolate_params_->constraints.max_young_generation_size_in_bytes(); } void NodeMainInstance::Dispose() { - CHECK(!owns_isolate_); + // This should only be called on a main instance that does not own its + // isolate. + CHECK_NULL(isolate_params_); platform_->DrainTasks(isolate_); } NodeMainInstance::~NodeMainInstance() { - if (!owns_isolate_) { + if (isolate_params_ == nullptr) { return; } + // This should only be done on a main instance that owns its isolate. platform_->UnregisterIsolate(isolate_); isolate_->Dispose(); } -int NodeMainInstance::Run(const EnvSerializeInfo* env_info) { +int NodeMainInstance::Run() { Locker locker(isolate_); Isolate::Scope isolate_scope(isolate_); HandleScope handle_scope(isolate_); int exit_code = 0; DeleteFnPtr env = - CreateMainEnvironment(&exit_code, env_info); + CreateMainEnvironment(&exit_code); CHECK_NOT_NULL(env); Context::Scope context_scope(env->context()); @@ -167,8 +158,7 @@ void NodeMainInstance::Run(int* exit_code, Environment* env) { } DeleteFnPtr -NodeMainInstance::CreateMainEnvironment(int* exit_code, - const EnvSerializeInfo* env_info) { +NodeMainInstance::CreateMainEnvironment(int* exit_code) { *exit_code = 0; // Reset the exit code to 0 HandleScope handle_scope(isolate_); @@ -179,16 +169,15 @@ NodeMainInstance::CreateMainEnvironment(int* exit_code, isolate_->GetHeapProfiler()->StartTrackingHeapObjects(true); } - CHECK_IMPLIES(deserialize_mode_, env_info != nullptr); Local context; DeleteFnPtr env; - if (deserialize_mode_) { + if (snapshot_data_ != nullptr) { env.reset(new Environment(isolate_data_.get(), isolate_, args_, exec_args_, - env_info, + &(snapshot_data_->env_info), EnvironmentFlags::kDefaultFlags, {})); context = Context::FromSnapshot(isolate_, @@ -200,7 +189,7 @@ NodeMainInstance::CreateMainEnvironment(int* exit_code, Context::Scope context_scope(context); CHECK(InitializeContextRuntime(context).IsJust()); SetIsolateErrorHandlers(isolate_, {}); - env->InitializeMainContext(context, env_info); + env->InitializeMainContext(context, &(snapshot_data_->env_info)); #if HAVE_INSPECTOR env->InitializeInspector({}); #endif diff --git a/src/node_main_instance.h b/src/node_main_instance.h index 047bdca873e..9f24c4e2ab1 100644 --- a/src/node_main_instance.h +++ b/src/node_main_instance.h @@ -15,6 +15,7 @@ namespace node { class ExternalReferenceRegistry; struct EnvSerializeInfo; +struct SnapshotData; // TODO(joyeecheung): align this with the Worker/WorkerThreadData class. // We may be able to create an abstract class to reuse some of the routines. @@ -48,30 +49,21 @@ class NodeMainInstance { void Dispose(); // Create a main instance that owns the isolate - NodeMainInstance( - v8::Isolate::CreateParams* params, - uv_loop_t* event_loop, - MultiIsolatePlatform* platform, - const std::vector& args, - const std::vector& exec_args, - const std::vector* per_isolate_data_indexes = nullptr); + NodeMainInstance(const SnapshotData* snapshot_data, + uv_loop_t* event_loop, + MultiIsolatePlatform* platform, + const std::vector& args, + const std::vector& exec_args); ~NodeMainInstance(); // Start running the Node.js instances, return the exit code when finished. - int Run(const EnvSerializeInfo* env_info); + int Run(); void Run(int* exit_code, Environment* env); IsolateData* isolate_data() { return isolate_data_.get(); } DeleteFnPtr CreateMainEnvironment( - int* exit_code, const EnvSerializeInfo* env_info); - - // If nullptr is returned, the binary is not built with embedded - // snapshot. - static const std::vector* GetIsolateDataIndices(); - static v8::StartupData* GetEmbeddedSnapshotBlob(); - static const EnvSerializeInfo* GetEnvSerializeInfo(); - static const std::vector& CollectExternalReferences(); + int* exit_code); static const size_t kNodeContextIndex = 0; NodeMainInstance(const NodeMainInstance&) = delete; @@ -86,15 +78,14 @@ class NodeMainInstance { const std::vector& args, const std::vector& exec_args); - static std::unique_ptr registry_; std::vector args_; std::vector exec_args_; std::unique_ptr array_buffer_allocator_; v8::Isolate* isolate_; MultiIsolatePlatform* platform_; std::unique_ptr isolate_data_; - bool owns_isolate_ = false; - bool deserialize_mode_ = false; + std::unique_ptr isolate_params_; + const SnapshotData* snapshot_data_ = nullptr; }; } // namespace node diff --git a/src/node_messaging.cc b/src/node_messaging.cc index 6403950e9c8..f88270fc75d 100644 --- a/src/node_messaging.cc +++ b/src/node_messaging.cc @@ -349,7 +349,7 @@ class SerializerDelegate : public ValueSerializer::Delegate { std::vector> nested_transferables; if (!host_objects_[i]->NestedTransferables().To(&nested_transferables)) return Nothing(); - for (auto nested_transferable : nested_transferables) { + for (auto& nested_transferable : nested_transferables) { if (std::find(host_objects_.begin(), host_objects_.end(), nested_transferable) == host_objects_.end()) { @@ -1111,14 +1111,15 @@ Local GetMessagePortConstructorTemplate(Environment* env) { return templ; { - Local m = env->NewFunctionTemplate(MessagePort::New); + Isolate* isolate = env->isolate(); + Local m = NewFunctionTemplate(isolate, MessagePort::New); m->SetClassName(env->message_port_constructor_string()); m->InstanceTemplate()->SetInternalFieldCount( MessagePort::kInternalFieldCount); m->Inherit(HandleWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(m, "postMessage", MessagePort::PostMessage); - env->SetProtoMethod(m, "start", MessagePort::Start); + SetProtoMethod(isolate, m, "postMessage", MessagePort::PostMessage); + SetProtoMethod(isolate, m, "start", MessagePort::Start); env->set_message_port_constructor_template(m); } @@ -1451,38 +1452,43 @@ static void InitMessaging(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); { - env->SetConstructorFunction( - target, - "MessageChannel", - env->NewFunctionTemplate(MessageChannel)); + SetConstructorFunction(context, + target, + "MessageChannel", + NewFunctionTemplate(isolate, MessageChannel)); } { - Local t = env->NewFunctionTemplate(JSTransferable::New); + Local t = + NewFunctionTemplate(isolate, JSTransferable::New); t->Inherit(BaseObject::GetConstructorTemplate(env)); t->InstanceTemplate()->SetInternalFieldCount( JSTransferable::kInternalFieldCount); - env->SetConstructorFunction(target, "JSTransferable", t); + SetConstructorFunction(context, target, "JSTransferable", t); } - env->SetConstructorFunction( - target, - env->message_port_constructor_string(), - GetMessagePortConstructorTemplate(env)); + SetConstructorFunction(context, + target, + env->message_port_constructor_string(), + GetMessagePortConstructorTemplate(env)); // These are not methods on the MessagePort prototype, because // the browser equivalents do not provide them. - env->SetMethod(target, "stopMessagePort", MessagePort::Stop); - env->SetMethod(target, "checkMessagePort", MessagePort::CheckType); - env->SetMethod(target, "drainMessagePort", MessagePort::Drain); - env->SetMethod(target, "receiveMessageOnPort", MessagePort::ReceiveMessage); - env->SetMethod(target, "moveMessagePortToContext", - MessagePort::MoveToContext); - env->SetMethod(target, "setDeserializerCreateObjectFunction", - SetDeserializerCreateObjectFunction); - env->SetMethod(target, "broadcastChannel", BroadcastChannel); + SetMethod(context, target, "stopMessagePort", MessagePort::Stop); + SetMethod(context, target, "checkMessagePort", MessagePort::CheckType); + SetMethod(context, target, "drainMessagePort", MessagePort::Drain); + SetMethod( + context, target, "receiveMessageOnPort", MessagePort::ReceiveMessage); + SetMethod( + context, target, "moveMessagePortToContext", MessagePort::MoveToContext); + SetMethod(context, + target, + "setDeserializerCreateObjectFunction", + SetDeserializerCreateObjectFunction); + SetMethod(context, target, "broadcastChannel", BroadcastChannel); { Local domexception = GetDOMException(context).ToLocalChecked(); diff --git a/src/node_messaging.h b/src/node_messaging.h index 643604e4a99..6b65d4523e6 100644 --- a/src/node_messaging.h +++ b/src/node_messaging.h @@ -316,7 +316,7 @@ class MessagePort : public HandleWrap { }; // Provide a base class from which JS classes that should be transferable or -// cloneable by postMesssage() can inherit. +// cloneable by postMessage() can inherit. // See e.g. FileHandle in internal/fs/promises.js for an example. class JSTransferable : public BaseObject { public: diff --git a/src/node_metadata.cc b/src/node_metadata.cc index 46d9be0dfcf..f2f9253dbbd 100644 --- a/src/node_metadata.cc +++ b/src/node_metadata.cc @@ -32,21 +32,16 @@ Metadata metadata; } #if HAVE_OPENSSL -constexpr int search(const char* s, int n, int c) { - return *s == c ? n : search(s + 1, n + 1, c); +static constexpr size_t search(const char* s, char c, size_t n = 0) { + return *s == c ? n : search(s + 1, c, n + 1); } -std::string GetOpenSSLVersion() { +static inline std::string GetOpenSSLVersion() { // sample openssl version string format // for reference: "OpenSSL 1.1.0i 14 Aug 2018" - char buf[128]; - const char* etext = OPENSSL_VERSION_TEXT; - const int start = search(etext, 0, ' ') + 1; - etext += start; - const int end = search(etext, start, ' '); - const int len = end - start; - snprintf(buf, sizeof(buf), "%.*s", len, &OPENSSL_VERSION_TEXT[start]); - return std::string(buf); + constexpr size_t start = search(OPENSSL_VERSION_TEXT, ' ') + 1; + constexpr size_t len = search(&OPENSSL_VERSION_TEXT[start], ' '); + return std::string(OPENSSL_VERSION_TEXT, start, len); } #endif // HAVE_OPENSSL @@ -71,6 +66,7 @@ void Metadata::Versions::InitializeIntlVersions() { Metadata::Versions::Versions() { node = NODE_VERSION_STRING; + anode = ANODE_VERSION_STRING; v8 = v8::V8::GetVersion(); uv = uv_version_string(); zlib = ZLIB_VERSION; diff --git a/src/node_metadata.h b/src/node_metadata.h index 4486d5af2c1..9c25bd8ec00 100644 --- a/src/node_metadata.h +++ b/src/node_metadata.h @@ -35,6 +35,7 @@ namespace node { V(nghttp2) \ V(napi) \ V(llhttp) \ + V(anode) \ #if HAVE_OPENSSL #define NODE_VERSIONS_KEY_CRYPTO(V) V(openssl) diff --git a/src/node_native_module.cc b/src/node_native_module.cc deleted file mode 100644 index 5d20e1d6a86..00000000000 --- a/src/node_native_module.cc +++ /dev/null @@ -1,324 +0,0 @@ -#include "node_native_module.h" -#include "util-inl.h" -#include "debug_utils-inl.h" - -namespace node { -namespace native_module { - -using v8::Context; -using v8::EscapableHandleScope; -using v8::Function; -using v8::Isolate; -using v8::Local; -using v8::MaybeLocal; -using v8::Object; -using v8::ScriptCompiler; -using v8::ScriptOrigin; -using v8::String; - -NativeModuleLoader NativeModuleLoader::instance_; - -NativeModuleLoader::NativeModuleLoader() : config_(GetConfig()) { - LoadJavaScriptSource(); -} - -NativeModuleLoader* NativeModuleLoader::GetInstance() { - return &instance_; -} - -bool NativeModuleLoader::Exists(const char* id) { - return source_.find(id) != source_.end(); -} - -bool NativeModuleLoader::Add(const char* id, const UnionBytes& source) { - if (Exists(id)) { - return false; - } - source_.emplace(id, source); - return true; -} - -Local NativeModuleLoader::GetSourceObject(Local context) { - Isolate* isolate = context->GetIsolate(); - Local out = Object::New(isolate); - for (auto const& x : source_) { - Local key = OneByteString(isolate, x.first.c_str(), x.first.size()); - out->Set(context, key, x.second.ToStringChecked(isolate)).FromJust(); - } - return out; -} - -Local NativeModuleLoader::GetConfigString(Isolate* isolate) { - return config_.ToStringChecked(isolate); -} - -std::vector NativeModuleLoader::GetModuleIds() { - std::vector ids; - ids.reserve(source_.size()); - for (auto const& x : source_) { - ids.emplace_back(x.first); - } - return ids; -} - -void NativeModuleLoader::InitializeModuleCategories() { - if (module_categories_.is_initialized) { - DCHECK(!module_categories_.can_be_required.empty()); - return; - } - - std::vector prefixes = { -#if !HAVE_OPENSSL - "internal/crypto/", - "internal/debugger/", -#endif // !HAVE_OPENSSL - - "internal/bootstrap/", - "internal/per_context/", - "internal/deps/", - "internal/main/" - }; - - module_categories_.can_be_required.emplace( - "internal/deps/cjs-module-lexer/lexer"); - - module_categories_.cannot_be_required = std::set { -#if !HAVE_INSPECTOR - "inspector", - "internal/util/inspector", -#endif // !HAVE_INSPECTOR - -#if !NODE_USE_V8_PLATFORM || !defined(NODE_HAVE_I18N_SUPPORT) - "trace_events", -#endif // !NODE_USE_V8_PLATFORM || !defined(NODE_HAVE_I18N_SUPPORT) - -#if !HAVE_OPENSSL - "crypto", - "crypto/promises", - "https", - "http2", - "tls", - "_tls_common", - "_tls_wrap", - "internal/tls/secure-pair", - "internal/tls/parse-cert-string", - "internal/tls/secure-context", - "internal/http2/core", - "internal/http2/compat", - "internal/policy/manifest", - "internal/process/policy", - "internal/streams/lazy_transform", -#endif // !HAVE_OPENSSL - "sys", // Deprecated. - "wasi", // Experimental. - "internal/test/binding", - "internal/v8_prof_polyfill", - "internal/v8_prof_processor", - }; - - for (auto const& x : source_) { - const std::string& id = x.first; - for (auto const& prefix : prefixes) { - if (prefix.length() > id.length()) { - continue; - } - if (id.find(prefix) == 0 && - module_categories_.can_be_required.count(id) == 0) { - module_categories_.cannot_be_required.emplace(id); - } - } - } - - for (auto const& x : source_) { - const std::string& id = x.first; - if (0 == module_categories_.cannot_be_required.count(id)) { - module_categories_.can_be_required.emplace(id); - } - } - - module_categories_.is_initialized = true; -} - -const std::set& NativeModuleLoader::GetCannotBeRequired() { - InitializeModuleCategories(); - return module_categories_.cannot_be_required; -} - -const std::set& NativeModuleLoader::GetCanBeRequired() { - InitializeModuleCategories(); - return module_categories_.can_be_required; -} - -bool NativeModuleLoader::CanBeRequired(const char* id) { - return GetCanBeRequired().count(id) == 1; -} - -bool NativeModuleLoader::CannotBeRequired(const char* id) { - return GetCannotBeRequired().count(id) == 1; -} - -NativeModuleCacheMap* NativeModuleLoader::code_cache() { - return &code_cache_; -} - -ScriptCompiler::CachedData* NativeModuleLoader::GetCodeCache( - const char* id) const { - Mutex::ScopedLock lock(code_cache_mutex_); - const auto it = code_cache_.find(id); - if (it == code_cache_.end()) { - // The module has not been compiled before. - return nullptr; - } - return it->second.get(); -} - -MaybeLocal NativeModuleLoader::CompileAsModule( - Local context, - const char* id, - NativeModuleLoader::Result* result) { - Isolate* isolate = context->GetIsolate(); - std::vector> parameters = { - FIXED_ONE_BYTE_STRING(isolate, "exports"), - FIXED_ONE_BYTE_STRING(isolate, "require"), - FIXED_ONE_BYTE_STRING(isolate, "module"), - FIXED_ONE_BYTE_STRING(isolate, "process"), - FIXED_ONE_BYTE_STRING(isolate, "internalBinding"), - FIXED_ONE_BYTE_STRING(isolate, "primordials")}; - return LookupAndCompile(context, id, ¶meters, result); -} - -#ifdef NODE_BUILTIN_MODULES_PATH -static std::string OnDiskFileName(const char* id) { - std::string filename = NODE_BUILTIN_MODULES_PATH; - filename += "/"; - - if (strncmp(id, "internal/deps", strlen("internal/deps")) == 0) { - id += strlen("internal/"); - } else { - filename += "lib/"; - } - filename += id; - filename += ".js"; - - return filename; -} -#endif // NODE_BUILTIN_MODULES_PATH - -MaybeLocal NativeModuleLoader::LoadBuiltinModuleSource(Isolate* isolate, - const char* id) { -#ifdef NODE_BUILTIN_MODULES_PATH - if (strncmp(id, "embedder_main_", strlen("embedder_main_")) == 0) { -#endif // NODE_BUILTIN_MODULES_PATH - const auto source_it = source_.find(id); - if (UNLIKELY(source_it == source_.end())) { - fprintf(stderr, "Cannot find native builtin: \"%s\".\n", id); - ABORT(); - } - return source_it->second.ToStringChecked(isolate); -#ifdef NODE_BUILTIN_MODULES_PATH - } - std::string filename = OnDiskFileName(id); - - std::string contents; - int r = ReadFileSync(&contents, filename.c_str()); - if (r != 0) { - const std::string buf = SPrintF("Cannot read local builtin. %s: %s \"%s\"", - uv_err_name(r), - uv_strerror(r), - filename); - Local message = OneByteString(isolate, buf.c_str()); - isolate->ThrowException(v8::Exception::Error(message)); - return MaybeLocal(); - } - return String::NewFromUtf8( - isolate, contents.c_str(), v8::NewStringType::kNormal, contents.length()); -#endif // NODE_BUILTIN_MODULES_PATH -} - -// Returns Local of the compiled module if return_code_cache -// is false (we are only compiling the function). -// Otherwise return a Local containing the cache. -MaybeLocal NativeModuleLoader::LookupAndCompile( - Local context, - const char* id, - std::vector>* parameters, - NativeModuleLoader::Result* result) { - Isolate* isolate = context->GetIsolate(); - EscapableHandleScope scope(isolate); - - Local source; - if (!LoadBuiltinModuleSource(isolate, id).ToLocal(&source)) { - return {}; - } - - std::string filename_s = std::string("node:") + id; - Local filename = - OneByteString(isolate, filename_s.c_str(), filename_s.size()); - ScriptOrigin origin(isolate, filename, 0, 0, true); - - ScriptCompiler::CachedData* cached_data = nullptr; - { - // Note: The lock here should not extend into the - // `CompileFunctionInContext()` call below, because this function may - // recurse if there is a syntax error during bootstrap (because the fatal - // exception handler is invoked, which may load built-in modules). - Mutex::ScopedLock lock(code_cache_mutex_); - auto cache_it = code_cache_.find(id); - if (cache_it != code_cache_.end()) { - // Transfer ownership to ScriptCompiler::Source later. - cached_data = cache_it->second.release(); - code_cache_.erase(cache_it); - } - } - - const bool has_cache = cached_data != nullptr; - ScriptCompiler::CompileOptions options = - has_cache ? ScriptCompiler::kConsumeCodeCache - : ScriptCompiler::kEagerCompile; - ScriptCompiler::Source script_source(source, origin, cached_data); - - MaybeLocal maybe_fun = - ScriptCompiler::CompileFunctionInContext(context, - &script_source, - parameters->size(), - parameters->data(), - 0, - nullptr, - options); - - // This could fail when there are early errors in the native modules, - // e.g. the syntax errors - Local fun; - if (!maybe_fun.ToLocal(&fun)) { - // In the case of early errors, v8 is already capable of - // decorating the stack for us - note that we use CompileFunctionInContext - // so there is no need to worry about wrappers. - return MaybeLocal(); - } - - // XXX(joyeecheung): this bookkeeping is not exactly accurate because - // it only starts after the Environment is created, so the per_context.js - // will never be in any of these two sets, but the two sets are only for - // testing anyway. - - *result = (has_cache && !script_source.GetCachedData()->rejected) - ? Result::kWithCache - : Result::kWithoutCache; - // Generate new cache for next compilation - std::unique_ptr new_cached_data( - ScriptCompiler::CreateCodeCacheForFunction(fun)); - CHECK_NOT_NULL(new_cached_data); - - { - Mutex::ScopedLock lock(code_cache_mutex_); - // The old entry should've been erased by now so we can just emplace. - // If another thread did the same thing in the meantime, that should not - // be an issue. - code_cache_.emplace(id, std::move(new_cached_data)); - } - - return scope.Escape(fun); -} - -} // namespace native_module -} // namespace node diff --git a/src/node_native_module.h b/src/node_native_module.h deleted file mode 100644 index 3be3f2364dd..00000000000 --- a/src/node_native_module.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef SRC_NODE_NATIVE_MODULE_H_ -#define SRC_NODE_NATIVE_MODULE_H_ - -#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS - -#include -#include -#include -#include -#include "node_mutex.h" -#include "node_union_bytes.h" -#include "v8.h" - -// Forward declare test fixture for `friend` declaration. -class PerProcessTest; - -namespace node { -namespace native_module { - -using NativeModuleRecordMap = std::map; -using NativeModuleCacheMap = - std::unordered_map>; - -// The native (C++) side of the NativeModule in JS land, which -// handles compilation and caching of builtin modules (NativeModule) -// and bootstrappers, whose source are bundled into the binary -// as static data. -// This class should not depend on any Environment, or depend on access to -// the its own singleton - that should be encapsulated in NativeModuleEnv -// instead. -class NativeModuleLoader { - public: - NativeModuleLoader(const NativeModuleLoader&) = delete; - NativeModuleLoader& operator=(const NativeModuleLoader&) = delete; - - private: - // Only allow access from friends. - friend class NativeModuleEnv; - friend class CodeCacheBuilder; - - NativeModuleLoader(); - static NativeModuleLoader* GetInstance(); - - // Generated by tools/js2c.py as node_javascript.cc - void LoadJavaScriptSource(); // Loads data into source_ - UnionBytes GetConfig(); // Return data for config.gypi - - bool Exists(const char* id); - bool Add(const char* id, const UnionBytes& source); - - v8::Local GetSourceObject(v8::Local context); - v8::Local GetConfigString(v8::Isolate* isolate); - std::vector GetModuleIds(); - - struct ModuleCategories { - bool is_initialized = false; - std::set can_be_required; - std::set cannot_be_required; - }; - void InitializeModuleCategories(); - const std::set& GetCannotBeRequired(); - const std::set& GetCanBeRequired(); - - bool CanBeRequired(const char* id); - bool CannotBeRequired(const char* id); - - NativeModuleCacheMap* code_cache(); - v8::ScriptCompiler::CachedData* GetCodeCache(const char* id) const; - enum class Result { kWithCache, kWithoutCache }; - v8::MaybeLocal LoadBuiltinModuleSource(v8::Isolate* isolate, - const char* id); - // If an exception is encountered (e.g. source code contains - // syntax error), the returned value is empty. - v8::MaybeLocal LookupAndCompile( - v8::Local context, - const char* id, - std::vector>* parameters, - Result* result); - v8::MaybeLocal CompileAsModule(v8::Local context, - const char* id, - Result* result); - - static NativeModuleLoader instance_; - ModuleCategories module_categories_; - NativeModuleRecordMap source_; - NativeModuleCacheMap code_cache_; - UnionBytes config_; - - // Used to synchronize access to the code cache map - Mutex code_cache_mutex_; - - friend class ::PerProcessTest; -}; -} // namespace native_module - -} // namespace node - -#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS - -#endif // SRC_NODE_NATIVE_MODULE_H_ diff --git a/src/node_native_module_env.cc b/src/node_native_module_env.cc deleted file mode 100644 index b59ed7cb75c..00000000000 --- a/src/node_native_module_env.cc +++ /dev/null @@ -1,237 +0,0 @@ -#include "node_native_module_env.h" -#include "env-inl.h" -#include "node_external_reference.h" - -namespace node { -namespace native_module { - -using v8::Context; -using v8::DEFAULT; -using v8::Function; -using v8::FunctionCallbackInfo; -using v8::IntegrityLevel; -using v8::Isolate; -using v8::Local; -using v8::MaybeLocal; -using v8::Name; -using v8::None; -using v8::Object; -using v8::PropertyCallbackInfo; -using v8::Set; -using v8::SideEffectType; -using v8::String; -using v8::Value; - -// TODO(joyeecheung): make these more general and put them into util.h -Local ToJsSet(Local context, const std::set& in) { - Isolate* isolate = context->GetIsolate(); - Local out = Set::New(isolate); - for (auto const& x : in) { - out->Add(context, OneByteString(isolate, x.c_str(), x.size())) - .ToLocalChecked(); - } - return out; -} - -bool NativeModuleEnv::Add(const char* id, const UnionBytes& source) { - return NativeModuleLoader::GetInstance()->Add(id, source); -} - -bool NativeModuleEnv::Exists(const char* id) { - return NativeModuleLoader::GetInstance()->Exists(id); -} - -Local NativeModuleEnv::GetSourceObject(Local context) { - return NativeModuleLoader::GetInstance()->GetSourceObject(context); -} - -Local NativeModuleEnv::GetConfigString(Isolate* isolate) { - return NativeModuleLoader::GetInstance()->GetConfigString(isolate); -} - -void NativeModuleEnv::GetModuleCategories( - Local property, const PropertyCallbackInfo& info) { - Environment* env = Environment::GetCurrent(info); - Isolate* isolate = env->isolate(); - Local context = env->context(); - Local result = Object::New(isolate); - - // Copy from the per-process categories - std::set cannot_be_required = - NativeModuleLoader::GetInstance()->GetCannotBeRequired(); - std::set can_be_required = - NativeModuleLoader::GetInstance()->GetCanBeRequired(); - - if (!env->owns_process_state()) { - can_be_required.erase("trace_events"); - cannot_be_required.insert("trace_events"); - } - - result - ->Set(context, - OneByteString(isolate, "cannotBeRequired"), - ToJsSet(context, cannot_be_required)) - .FromJust(); - result - ->Set(context, - OneByteString(isolate, "canBeRequired"), - ToJsSet(context, can_be_required)) - .FromJust(); - info.GetReturnValue().Set(result); -} - -void NativeModuleEnv::GetCacheUsage(const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args); - Isolate* isolate = env->isolate(); - Local context = env->context(); - Local result = Object::New(isolate); - result - ->Set(env->context(), - OneByteString(isolate, "compiledWithCache"), - ToJsSet(context, env->native_modules_with_cache)) - .FromJust(); - result - ->Set(env->context(), - OneByteString(isolate, "compiledWithoutCache"), - ToJsSet(context, env->native_modules_without_cache)) - .FromJust(); - - result - ->Set(env->context(), - OneByteString(isolate, "compiledInSnapshot"), - ToV8Value(env->context(), env->native_modules_in_snapshot) - .ToLocalChecked()) - .FromJust(); - - args.GetReturnValue().Set(result); -} - -void NativeModuleEnv::ModuleIdsGetter(Local property, - const PropertyCallbackInfo& info) { - Isolate* isolate = info.GetIsolate(); - - std::vector ids = - NativeModuleLoader::GetInstance()->GetModuleIds(); - info.GetReturnValue().Set( - ToV8Value(isolate->GetCurrentContext(), ids).ToLocalChecked()); -} - -void NativeModuleEnv::ConfigStringGetter( - Local property, const PropertyCallbackInfo& info) { - info.GetReturnValue().Set(GetConfigString(info.GetIsolate())); -} - -void NativeModuleEnv::RecordResult(const char* id, - NativeModuleLoader::Result result, - Environment* env) { - if (result == NativeModuleLoader::Result::kWithCache) { - env->native_modules_with_cache.insert(id); - } else { - env->native_modules_without_cache.insert(id); - } -} -void NativeModuleEnv::CompileFunction(const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args); - CHECK(args[0]->IsString()); - node::Utf8Value id_v(env->isolate(), args[0].As()); - const char* id = *id_v; - NativeModuleLoader::Result result; - MaybeLocal maybe = - NativeModuleLoader::GetInstance()->CompileAsModule( - env->context(), id, &result); - RecordResult(id, result, env); - Local fn; - if (maybe.ToLocal(&fn)) { - args.GetReturnValue().Set(fn); - } -} - -// Returns Local of the compiled module if return_code_cache -// is false (we are only compiling the function). -// Otherwise return a Local containing the cache. -MaybeLocal NativeModuleEnv::LookupAndCompile( - Local context, - const char* id, - std::vector>* parameters, - Environment* optional_env) { - NativeModuleLoader::Result result; - MaybeLocal maybe = - NativeModuleLoader::GetInstance()->LookupAndCompile( - context, id, parameters, &result); - if (optional_env != nullptr) { - RecordResult(id, result, optional_env); - } - return maybe; -} - -void HasCachedBuiltins(const FunctionCallbackInfo& args) { - args.GetReturnValue().Set( - v8::Boolean::New(args.GetIsolate(), has_code_cache)); -} - -// TODO(joyeecheung): It is somewhat confusing that Class::Initialize -// is used to initialize to the binding, but it is the current convention. -// Rename this across the code base to something that makes more sense. -void NativeModuleEnv::Initialize(Local target, - Local unused, - Local context, - void* priv) { - Environment* env = Environment::GetCurrent(context); - - target - ->SetAccessor(env->context(), - env->config_string(), - ConfigStringGetter, - nullptr, - MaybeLocal(), - DEFAULT, - None, - SideEffectType::kHasNoSideEffect) - .Check(); - target - ->SetAccessor(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "moduleIds"), - ModuleIdsGetter, - nullptr, - MaybeLocal(), - DEFAULT, - None, - SideEffectType::kHasNoSideEffect) - .Check(); - - target - ->SetAccessor(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "moduleCategories"), - GetModuleCategories, - nullptr, - Local(), - DEFAULT, - None, - SideEffectType::kHasNoSideEffect) - .Check(); - - env->SetMethod(target, "getCacheUsage", NativeModuleEnv::GetCacheUsage); - env->SetMethod(target, "compileFunction", NativeModuleEnv::CompileFunction); - env->SetMethod(target, "hasCachedBuiltins", HasCachedBuiltins); - // internalBinding('native_module') should be frozen - target->SetIntegrityLevel(context, IntegrityLevel::kFrozen).FromJust(); -} - -void NativeModuleEnv::RegisterExternalReferences( - ExternalReferenceRegistry* registry) { - registry->Register(ConfigStringGetter); - registry->Register(ModuleIdsGetter); - registry->Register(GetModuleCategories); - registry->Register(GetCacheUsage); - registry->Register(CompileFunction); - registry->Register(HasCachedBuiltins); -} - -} // namespace native_module -} // namespace node - -NODE_MODULE_CONTEXT_AWARE_INTERNAL( - native_module, node::native_module::NativeModuleEnv::Initialize) -NODE_MODULE_EXTERNAL_REFERENCE( - native_module, - node::native_module::NativeModuleEnv::RegisterExternalReferences) diff --git a/src/node_native_module_env.h b/src/node_native_module_env.h deleted file mode 100644 index 0a53771ff5d..00000000000 --- a/src/node_native_module_env.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef SRC_NODE_NATIVE_MODULE_ENV_H_ -#define SRC_NODE_NATIVE_MODULE_ENV_H_ - -#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS - -#include "node_native_module.h" - -namespace node { -class Environment; -class ExternalReferenceRegistry; - -namespace native_module { - -extern const bool has_code_cache; - -class NativeModuleEnv { - public: - static void RegisterExternalReferences(ExternalReferenceRegistry* registry); - static void Initialize(v8::Local target, - v8::Local unused, - v8::Local context, - void* priv); - - static v8::MaybeLocal LookupAndCompile( - v8::Local context, - const char* id, - std::vector>* parameters, - Environment* optional_env); - - static v8::Local GetSourceObject(v8::Local context); - // Returns config.gypi as a JSON string - static v8::Local GetConfigString(v8::Isolate* isolate); - static bool Exists(const char* id); - static bool Add(const char* id, const UnionBytes& source); - - // Loads data into NativeModuleLoader::.instance.code_cache_ - // Generated by mkcodecache as node_code_cache.cc when - // the build is configured with --code-cache-path=.... They are noops - // in node_code_cache_stub.cc - static void InitializeCodeCache(); - - private: - static void RecordResult(const char* id, - NativeModuleLoader::Result result, - Environment* env); - static void GetModuleCategories( - v8::Local property, - const v8::PropertyCallbackInfo& info); - static void GetCacheUsage(const v8::FunctionCallbackInfo& args); - // Passing ids of builtin module source code into JS land as - // internalBinding('native_module').moduleIds - static void ModuleIdsGetter(v8::Local property, - const v8::PropertyCallbackInfo& info); - // Passing config.gypi into JS land as internalBinding('native_module').config - static void ConfigStringGetter( - v8::Local property, - const v8::PropertyCallbackInfo& info); - // Compile a specific native module as a function - static void CompileFunction(const v8::FunctionCallbackInfo& args); -}; - -} // namespace native_module - -} // namespace node - -#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS - -#endif // SRC_NODE_NATIVE_MODULE_ENV_H_ diff --git a/src/node_options.cc b/src/node_options.cc index 3192faaddaf..3cb77c537bc 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -5,6 +5,9 @@ #include "node_binding.h" #include "node_external_reference.h" #include "node_internals.h" +#if HAVE_OPENSSL +#include "openssl/opensslv.h" +#endif #include #include @@ -137,7 +140,49 @@ void EnvironmentOptions::CheckOptions(std::vector* errors) { } if (heap_snapshot_near_heap_limit < 0) { - errors->push_back("--heap-snapshot-near-heap-limit must not be negative"); + errors->push_back("--heapsnapshot-near-heap-limit must not be negative"); + } + + if (test_runner) { + if (syntax_check_only) { + errors->push_back("either --test or --check can be used, not both"); + } + + if (has_eval_string) { + errors->push_back("either --test or --eval can be used, not both"); + } + + if (force_repl) { + errors->push_back("either --test or --interactive can be used, not both"); + } + + if (watch_mode) { + // TODO(MoLow): Support (incremental?) watch mode within test runner + errors->push_back("either --test or --watch can be used, not both"); + } + +#ifndef ALLOW_ATTACHING_DEBUGGER_IN_TEST_RUNNER + debug_options_.allow_attaching_debugger = false; +#endif + } + + if (watch_mode) { + if (syntax_check_only) { + errors->push_back("either --watch or --check can be used, not both"); + } + + if (has_eval_string) { + errors->push_back("either --watch or --eval can be used, not both"); + } + + if (force_repl) { + errors->push_back("either --watch or --interactive " + "can be used, not both"); + } + +#ifndef ALLOW_ATTACHING_DEBUGGER_IN_WATCH_MODE + debug_options_.allow_attaching_debugger = false; +#endif } #if HAVE_INSPECTOR @@ -318,13 +363,17 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { &EnvironmentOptions::experimental_fetch, kAllowedInEnvironment); AddOption("--experimental-json-modules", "", NoOp{}, kAllowedInEnvironment); + AddOption("--experimental-global-customevent", + "expose experimental CustomEvent on the global scope", + &EnvironmentOptions::experimental_global_customevent, + kAllowedInEnvironment); AddOption("--experimental-global-webcrypto", "expose experimental Web Crypto API on the global scope", &EnvironmentOptions::experimental_global_web_crypto, kAllowedInEnvironment); AddOption("--experimental-loader", "use the specified module as a custom loader", - &EnvironmentOptions::userland_loader, + &EnvironmentOptions::userland_loaders, kAllowedInEnvironment); AddAlias("--loader", "--experimental-loader"); AddOption("--experimental-modules", "", NoOp{}, kAllowedInEnvironment); @@ -410,6 +459,12 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { &EnvironmentOptions::force_async_hooks_checks, kAllowedInEnvironment, true); + AddOption( + "--force-node-api-uncaught-exceptions-policy", + "enforces 'uncaughtException' event on Node API asynchronous callbacks", + &EnvironmentOptions::force_node_api_uncaught_exceptions_policy, + kAllowedInEnvironment, + false); AddOption("--addons", "disable loading native addons", &EnvironmentOptions::allow_native_addons, @@ -494,6 +549,13 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { "write warnings to file instead of stderr", &EnvironmentOptions::redirect_warnings, kAllowedInEnvironment); + AddOption("--test", + "launch test runner on startup", + &EnvironmentOptions::test_runner); + AddOption("--test-only", + "run tests with 'only' option set", + &EnvironmentOptions::test_only, + kAllowedInEnvironment); AddOption("--test-udp-no-try-send", "", // For testing only. &EnvironmentOptions::test_udp_no_try_send); AddOption("--throw-deprecation", @@ -501,7 +563,7 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { &EnvironmentOptions::throw_deprecation, kAllowedInEnvironment); AddOption("--trace-atomics-wait", - "trace Atomics.wait() operations", + "(deprecated) trace Atomics.wait() operations", &EnvironmentOptions::trace_atomics_wait, kAllowedInEnvironment); AddOption("--trace-deprecation", @@ -542,7 +604,15 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { "", /* undocumented, only for debugging */ &EnvironmentOptions::verify_base_objects, kAllowedInEnvironment); - + AddOption("--watch", + "run in watch mode", + &EnvironmentOptions::watch_mode, + kAllowedInEnvironment); + AddOption("--watch-path", + "path to watch", + &EnvironmentOptions::watch_mode_paths, + kAllowedInEnvironment); + Implies("--watch-path", "--watch"); AddOption("--check", "syntax check script without executing", &EnvironmentOptions::syntax_check_only); @@ -670,14 +740,8 @@ PerIsolateOptionsParser::PerIsolateOptionsParser( kAllowedInEnvironment); Implies("--report-signal", "--report-on-signal"); - AddOption("--experimental-top-level-await", - "", - &PerIsolateOptions::experimental_top_level_await, - kAllowedInEnvironment); - AddOption("--harmony-top-level-await", "", V8Option{}); - Implies("--experimental-top-level-await", "--harmony-top-level-await"); - Implies("--harmony-top-level-await", "--experimental-top-level-await"); - ImpliesNot("--no-harmony-top-level-await", "--experimental-top-level-await"); + AddOption( + "--experimental-top-level-await", "", NoOp{}, kAllowedInEnvironment); Insert(eop, &PerIsolateOptions::get_per_env_options); } @@ -716,6 +780,11 @@ PerProcessOptionsParser::PerProcessOptionsParser( "disable Object.prototype.__proto__", &PerProcessOptions::disable_proto, kAllowedInEnvironment); + AddOption("--build-snapshot", + "Generate a snapshot blob when the process exits." + " Currently only supported in the node_mksnapshot binary.", + &PerProcessOptions::build_snapshot, + kDisallowedInEnvironment); // 12.x renamed this inadvertently, so alias it for consistency within the // release line, while using the original name for consistency with older @@ -732,6 +801,9 @@ PerProcessOptionsParser::PerProcessOptionsParser( AddOption( "--version", "print Node.js version", &PerProcessOptions::print_version); AddAlias("-v", "--version"); + AddOption( + "--anode-version", "print Anode version", + &PerProcessOptions::print_anode_version); AddOption("--v8-options", "print V8 command line options", &PerProcessOptions::print_v8_help); @@ -816,13 +888,16 @@ PerProcessOptionsParser::PerProcessOptionsParser( "minimum allocation size from the OpenSSL secure heap", &PerProcessOptions::secure_heap_min, kAllowedInEnvironment); + AddOption("--openssl-shared-config", + "enable OpenSSL shared configuration", + &PerProcessOptions::openssl_shared_config, + kAllowedInEnvironment); #endif // HAVE_OPENSSL #if OPENSSL_VERSION_MAJOR >= 3 AddOption("--openssl-legacy-provider", "enable OpenSSL 3.0 legacy provider", &PerProcessOptions::openssl_legacy_provider, kAllowedInEnvironment); - #endif // OPENSSL_VERSION_MAJOR AddOption("--use-largepages", "Map the Node.js static code to large pages. Options are " @@ -1101,8 +1176,9 @@ void Initialize(Local target, void* priv) { Environment* env = Environment::GetCurrent(context); Isolate* isolate = env->isolate(); - env->SetMethodNoSideEffect(target, "getCLIOptions", GetCLIOptions); - env->SetMethodNoSideEffect(target, "getEmbedderOptions", GetEmbedderOptions); + SetMethodNoSideEffect(context, target, "getCLIOptions", GetCLIOptions); + SetMethodNoSideEffect( + context, target, "getEmbedderOptions", GetEmbedderOptions); Local env_settings = Object::New(isolate); NODE_DEFINE_CONSTANT(env_settings, kAllowedInEnvironment); diff --git a/src/node_options.h b/src/node_options.h index 40d1c026058..c9b2a751e9f 100644 --- a/src/node_options.h +++ b/src/node_options.h @@ -11,6 +11,10 @@ #include "node_mutex.h" #include "util.h" +#if HAVE_OPENSSL +#include "openssl/opensslv.h" +#endif + namespace node { class HostPort { @@ -67,6 +71,7 @@ class DebugOptions : public Options { DebugOptions(DebugOptions&&) = default; DebugOptions& operator=(DebugOptions&&) = default; + bool allow_attaching_debugger = true; // --inspect bool inspector_enabled = false; // --debug @@ -105,6 +110,7 @@ class EnvironmentOptions : public Options { bool enable_source_maps = false; bool experimental_https_modules = false; bool experimental_fetch = false; + bool experimental_global_customevent = false; bool experimental_global_web_crypto = false; std::string experimental_specifier_resolution; bool experimental_wasm_modules = false; @@ -116,6 +122,7 @@ class EnvironmentOptions : public Options { bool experimental_repl_await = true; bool experimental_vm_modules = false; bool expose_internals = false; + bool force_node_api_uncaught_exceptions_policy = false; bool frozen_intrinsics = false; int64_t heap_snapshot_near_heap_limit = 0; std::string heap_snapshot_signal; @@ -144,6 +151,8 @@ class EnvironmentOptions : public Options { #endif // HAVE_INSPECTOR std::string redirect_warnings; std::string diagnostic_dir; + bool test_runner = false; + bool test_only = false; bool test_udp_no_try_send = false; bool throw_deprecation = false; bool trace_atomics_wait = false; @@ -154,7 +163,7 @@ class EnvironmentOptions : public Options { bool trace_uncaught = false; bool trace_warnings = false; std::string unhandled_rejections; - std::string userland_loader; + std::vector userland_loaders; bool verify_base_objects = #ifdef DEBUG true; @@ -162,6 +171,10 @@ class EnvironmentOptions : public Options { false; #endif // DEBUG + bool watch_mode = false; + bool watch_mode_report_to_parent = false; + std::vector watch_mode_paths; + bool syntax_check_only = false; bool has_eval_string = false; bool experimental_wasi = false; @@ -199,7 +212,6 @@ class PerIsolateOptions : public Options { bool node_snapshot = true; bool report_uncaught_exception = false; bool report_on_signal = false; - bool experimental_top_level_await = true; std::string report_signal = "SIGUSR2"; inline EnvironmentOptions* get_per_env_options(); void CheckOptions(std::vector* errors) override; @@ -224,12 +236,14 @@ class PerProcessOptions : public Options { bool zero_fill_all_buffers = false; bool debug_arraybuffer_allocations = false; std::string disable_proto; + bool build_snapshot; std::vector security_reverts; bool print_bash_completion = false; bool print_help = false; bool print_v8_help = false; bool print_version = false; + bool print_anode_version = false; #ifdef NODE_HAVE_I18N_SUPPORT std::string icu_data_dir; @@ -242,6 +256,7 @@ class PerProcessOptions : public Options { std::string tls_cipher_list = DEFAULT_CIPHER_LIST_CORE; int64_t secure_heap = 0; int64_t secure_heap_min = 2; + bool openssl_shared_config = false; #ifdef NODE_OPENSSL_CERT_STORE bool ssl_openssl_cert_store = true; #else @@ -252,6 +267,9 @@ class PerProcessOptions : public Options { bool enable_fips_crypto = false; bool force_fips_crypto = false; #endif +#if OPENSSL_VERSION_MAJOR >= 3 + bool openssl_legacy_provider = false; +#endif // Per-process because reports can be triggered outside a known V8 context. bool report_on_fatalerror = false; @@ -478,7 +496,7 @@ void Parse( namespace per_process { extern Mutex cli_options_mutex; -extern std::shared_ptr cli_options; +extern NODE_EXTERN_PRIVATE std::shared_ptr cli_options; } // namespace per_process diff --git a/src/node_os.cc b/src/node_os.cc index 046a6106ccd..e5c491c200f 100644 --- a/src/node_os.cc +++ b/src/node_os.cc @@ -28,7 +28,6 @@ #endif // __MINGW32__ #ifdef __POSIX__ -# include // gethostname, sysconf # include // PATH_MAX on Solaris. #endif // __POSIX__ @@ -86,12 +85,12 @@ static void GetOSInformation(const FunctionCallbackInfo& args) { return args.GetReturnValue().SetUndefined(); } - // [sysname, version, release] + // [sysname, version, release, machine] Local osInformation[] = { - String::NewFromUtf8(env->isolate(), info.sysname).ToLocalChecked(), - String::NewFromUtf8(env->isolate(), info.version).ToLocalChecked(), - String::NewFromUtf8(env->isolate(), info.release).ToLocalChecked() - }; + String::NewFromUtf8(env->isolate(), info.sysname).ToLocalChecked(), + String::NewFromUtf8(env->isolate(), info.version).ToLocalChecked(), + String::NewFromUtf8(env->isolate(), info.release).ToLocalChecked(), + String::NewFromUtf8(env->isolate(), info.machine).ToLocalChecked()}; args.GetReturnValue().Set(Array::New(env->isolate(), osInformation, @@ -149,10 +148,15 @@ static void GetTotalMemory(const FunctionCallbackInfo& args) { static void GetUptime(const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); double uptime; int err = uv_uptime(&uptime); - if (err == 0) - args.GetReturnValue().Set(uptime); + if (err != 0) { + env->CollectUVExceptionInfo(args[args.Length() - 1], err, "uv_uptime"); + return args.GetReturnValue().SetUndefined(); + } + + args.GetReturnValue().Set(uptime); } @@ -382,21 +386,23 @@ void Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); - env->SetMethod(target, "getHostname", GetHostname); - env->SetMethod(target, "getLoadAvg", GetLoadAvg); - env->SetMethod(target, "getUptime", GetUptime); - env->SetMethod(target, "getTotalMem", GetTotalMemory); - env->SetMethod(target, "getFreeMem", GetFreeMemory); - env->SetMethod(target, "getCPUs", GetCPUInfo); - env->SetMethod(target, "getInterfaceAddresses", GetInterfaceAddresses); - env->SetMethod(target, "getHomeDirectory", GetHomeDirectory); - env->SetMethod(target, "getUserInfo", GetUserInfo); - env->SetMethod(target, "setPriority", SetPriority); - env->SetMethod(target, "getPriority", GetPriority); - env->SetMethod(target, "getOSInformation", GetOSInformation); - target->Set(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "isBigEndian"), - Boolean::New(env->isolate(), IsBigEndian())).Check(); + SetMethod(context, target, "getHostname", GetHostname); + SetMethod(context, target, "getLoadAvg", GetLoadAvg); + SetMethod(context, target, "getUptime", GetUptime); + SetMethod(context, target, "getTotalMem", GetTotalMemory); + SetMethod(context, target, "getFreeMem", GetFreeMemory); + SetMethod(context, target, "getCPUs", GetCPUInfo); + SetMethod(context, target, "getInterfaceAddresses", GetInterfaceAddresses); + SetMethod(context, target, "getHomeDirectory", GetHomeDirectory); + SetMethod(context, target, "getUserInfo", GetUserInfo); + SetMethod(context, target, "setPriority", SetPriority); + SetMethod(context, target, "getPriority", GetPriority); + SetMethod(context, target, "getOSInformation", GetOSInformation); + target + ->Set(context, + FIXED_ONE_BYTE_STRING(env->isolate(), "isBigEndian"), + Boolean::New(env->isolate(), IsBigEndian())) + .Check(); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/node_perf.cc b/src/node_perf.cc index 8bda1791fce..76f77be6943 100644 --- a/src/node_perf.cc +++ b/src/node_perf.cc @@ -118,7 +118,13 @@ void MarkGarbageCollectionStart( GCCallbackFlags flags, void* data) { Environment* env = static_cast(data); + // Prevent gc callback from reentering with different type + // See https://github.com/nodejs/node/issues/44046 + if (env->performance_state()->current_gc_type != 0) { + return; + } env->performance_state()->performance_last_gc_start_mark = PERFORMANCE_NOW(); + env->performance_state()->current_gc_type = type; } MaybeLocal GCPerformanceEntryTraits::GetDetails( @@ -155,21 +161,26 @@ void MarkGarbageCollectionEnd( void* data) { Environment* env = static_cast(data); PerformanceState* state = env->performance_state(); + if (type != state->current_gc_type) { + return; + } + env->performance_state()->current_gc_type = 0; // If no one is listening to gc performance entries, do not create them. if (LIKELY(!state->observers[NODE_PERFORMANCE_ENTRY_TYPE_GC])) return; - double start_time = state->performance_last_gc_start_mark / 1e6; - double duration = (PERFORMANCE_NOW() / 1e6) - start_time; + double start_time = + (state->performance_last_gc_start_mark - timeOrigin) / 1e6; + double duration = + (PERFORMANCE_NOW() / 1e6) - (state->performance_last_gc_start_mark / 1e6); std::unique_ptr entry = std::make_unique( "gc", start_time, duration, - GCPerformanceEntry::Details( - static_cast(type), - static_cast(flags))); + GCPerformanceEntry::Details(static_cast(type), + static_cast(flags))); env->SetImmediate([entry = std::move(entry)](Environment* env) { entry->Notify(env); @@ -178,6 +189,8 @@ void MarkGarbageCollectionEnd( void GarbageCollectionCleanupHook(void* data) { Environment* env = static_cast(data); + // Reset current_gc_type to 0 + env->performance_state()->current_gc_type = 0; env->isolate()->RemoveGCPrologueCallback(MarkGarbageCollectionStart, data); env->isolate()->RemoveGCEpilogueCallback(MarkGarbageCollectionEnd, data); } @@ -185,7 +198,8 @@ void GarbageCollectionCleanupHook(void* data) { static void InstallGarbageCollectionTracking( const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); - + // Reset current_gc_type to 0 + env->performance_state()->current_gc_type = 0; env->isolate()->AddGCPrologueCallback(MarkGarbageCollectionStart, static_cast(env)); env->isolate()->AddGCEpilogueCallback(MarkGarbageCollectionEnd, @@ -288,19 +302,21 @@ void Initialize(Local target, target->Set(context, performanceEntryString, fn).Check(); env->set_performance_entry_template(fn); - env->SetMethod(target, "markMilestone", MarkMilestone); - env->SetMethod(target, "setupObservers", SetupPerformanceObservers); - env->SetMethod(target, - "installGarbageCollectionTracking", - InstallGarbageCollectionTracking); - env->SetMethod(target, - "removeGarbageCollectionTracking", - RemoveGarbageCollectionTracking); - env->SetMethod(target, "notify", Notify); - env->SetMethod(target, "loopIdleTime", LoopIdleTime); - env->SetMethod(target, "getTimeOrigin", GetTimeOrigin); - env->SetMethod(target, "getTimeOriginTimestamp", GetTimeOriginTimeStamp); - env->SetMethod(target, "createELDHistogram", CreateELDHistogram); + SetMethod(context, target, "markMilestone", MarkMilestone); + SetMethod(context, target, "setupObservers", SetupPerformanceObservers); + SetMethod(context, + target, + "installGarbageCollectionTracking", + InstallGarbageCollectionTracking); + SetMethod(context, + target, + "removeGarbageCollectionTracking", + RemoveGarbageCollectionTracking); + SetMethod(context, target, "notify", Notify); + SetMethod(context, target, "loopIdleTime", LoopIdleTime); + SetMethod(context, target, "getTimeOrigin", GetTimeOrigin); + SetMethod(context, target, "getTimeOriginTimestamp", GetTimeOriginTimeStamp); + SetMethod(context, target, "createELDHistogram", CreateELDHistogram); Local constants = Object::New(isolate); diff --git a/src/node_perf_common.h b/src/node_perf_common.h index 1fea2e4fc95..f457d73c579 100644 --- a/src/node_perf_common.h +++ b/src/node_perf_common.h @@ -34,7 +34,9 @@ extern uint64_t performance_v8_start; #define NODE_PERFORMANCE_ENTRY_TYPES(V) \ V(GC, "gc") \ V(HTTP, "http") \ - V(HTTP2, "http2") + V(HTTP2, "http2") \ + V(NET, "net") \ + V(DNS, "dns") enum PerformanceMilestone { #define V(name, _) NODE_PERFORMANCE_MILESTONE_##name, @@ -69,6 +71,7 @@ class PerformanceState { AliasedUint32Array observers; uint64_t performance_last_gc_start_mark = 0; + uint16_t current_gc_type = 0; void Mark(enum PerformanceMilestone milestone, uint64_t ts = PERFORMANCE_NOW()); diff --git a/src/node_platform.cc b/src/node_platform.cc index eb918bdd559..c63c53943db 100644 --- a/src/node_platform.cc +++ b/src/node_platform.cc @@ -401,6 +401,7 @@ int NodePlatform::NumberOfWorkerThreads() { } void PerIsolatePlatformData::RunForegroundTask(std::unique_ptr task) { + if (isolate_->IsExecutionTerminating()) return task->Run(); DebugSealHandleScope scope(isolate_); Environment* env = Environment::GetCurrent(isolate_); if (env != nullptr) { diff --git a/src/node_process_events.cc b/src/node_process_events.cc index 34f0251cabc..944b0605b14 100644 --- a/src/node_process_events.cc +++ b/src/node_process_events.cc @@ -21,7 +21,6 @@ using v8::Value; MaybeLocal ProcessEmit(Environment* env, const char* event, Local message) { - // Send message to enable debug in cluster workers Isolate* isolate = env->isolate(); Local event_string; diff --git a/src/node_process_methods.cc b/src/node_process_methods.cc index bc5d41382f2..ddd73c94920 100644 --- a/src/node_process_methods.cc +++ b/src/node_process_methods.cc @@ -466,8 +466,9 @@ v8::CFunction BindingData::fast_number_(v8::CFunction::Make(FastNumber)); v8::CFunction BindingData::fast_bigint_(v8::CFunction::Make(FastBigInt)); void BindingData::AddMethods() { - env()->SetFastMethod(object(), "hrtime", SlowNumber, &fast_number_); - env()->SetFastMethod(object(), "hrtimeBigInt", SlowBigInt, &fast_bigint_); + Local ctx = env()->context(); + SetFastMethod(ctx, object(), "hrtime", SlowNumber, &fast_number_); + SetFastMethod(ctx, object(), "hrtimeBigInt", SlowBigInt, &fast_bigint_); } void BindingData::RegisterExternalReferences( @@ -533,7 +534,7 @@ void BindingData::PrepareForSerialization(Local context, } InternalFieldInfo* BindingData::Serialize(int index) { - DCHECK_EQ(index, BaseObject::kSlot); + DCHECK_EQ(index, BaseObject::kEmbedderType); InternalFieldInfo* info = InternalFieldInfo::New(type()); return info; } @@ -542,7 +543,7 @@ void BindingData::Deserialize(Local context, Local holder, int index, InternalFieldInfo* info) { - DCHECK_EQ(index, BaseObject::kSlot); + DCHECK_EQ(index, BaseObject::kEmbedderType); v8::HandleScope scope(context->GetIsolate()); Environment* env = Environment::GetCurrent(context); // Recreate the buffer in the constructor. @@ -562,31 +563,31 @@ static void Initialize(Local target, // define various internal methods if (env->owns_process_state()) { - env->SetMethod(target, "_debugProcess", DebugProcess); - env->SetMethod(target, "_debugEnd", DebugEnd); - env->SetMethod(target, "abort", Abort); - env->SetMethod(target, "causeSegfault", CauseSegfault); - env->SetMethod(target, "chdir", Chdir); + SetMethod(context, target, "_debugProcess", DebugProcess); + SetMethod(context, target, "abort", Abort); + SetMethod(context, target, "causeSegfault", CauseSegfault); + SetMethod(context, target, "chdir", Chdir); } - env->SetMethod(target, "umask", Umask); - env->SetMethod(target, "_rawDebug", RawDebug); - env->SetMethod(target, "memoryUsage", MemoryUsage); - env->SetMethod(target, "rss", Rss); - env->SetMethod(target, "cpuUsage", CPUUsage); - env->SetMethod(target, "resourceUsage", ResourceUsage); - - env->SetMethod(target, "_getActiveRequests", GetActiveRequests); - env->SetMethod(target, "_getActiveRequestsInfo", GetActiveRequestsInfo); - env->SetMethod(target, "_getActiveHandles", GetActiveHandles); - env->SetMethod(target, "_getActiveHandlesInfo", GetActiveHandlesInfo); - env->SetMethod(target, "_kill", Kill); - - env->SetMethodNoSideEffect(target, "cwd", Cwd); - env->SetMethod(target, "dlopen", binding::DLOpen); - env->SetMethod(target, "reallyExit", ReallyExit); - env->SetMethodNoSideEffect(target, "uptime", Uptime); - env->SetMethod(target, "patchProcessObject", PatchProcessObject); + SetMethod(context, target, "umask", Umask); + SetMethod(context, target, "_rawDebug", RawDebug); + SetMethod(context, target, "memoryUsage", MemoryUsage); + SetMethod(context, target, "rss", Rss); + SetMethod(context, target, "cpuUsage", CPUUsage); + SetMethod(context, target, "resourceUsage", ResourceUsage); + + SetMethod(context, target, "_debugEnd", DebugEnd); + SetMethod(context, target, "_getActiveRequests", GetActiveRequests); + SetMethod(context, target, "_getActiveRequestsInfo", GetActiveRequestsInfo); + SetMethod(context, target, "_getActiveHandles", GetActiveHandles); + SetMethod(context, target, "_getActiveHandlesInfo", GetActiveHandlesInfo); + SetMethod(context, target, "_kill", Kill); + + SetMethodNoSideEffect(context, target, "cwd", Cwd); + SetMethod(context, target, "dlopen", binding::DLOpen); + SetMethod(context, target, "reallyExit", ReallyExit); + SetMethodNoSideEffect(context, target, "uptime", Uptime); + SetMethod(context, target, "patchProcessObject", PatchProcessObject); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/node_process_object.cc b/src/node_process_object.cc index 29f6569a45e..569c93ccb31 100644 --- a/src/node_process_object.cc +++ b/src/node_process_object.cc @@ -91,6 +91,15 @@ MaybeLocal CreateProcessObject(Environment* env) { return MaybeLocal(); } + // process[exiting_aliased_Uint32Array] + if (process + ->SetPrivate(context, + env->exiting_aliased_Uint32Array(), + env->exiting().GetJSArray()) + .IsNothing()) { + return {}; + } + // process.version READONLY_PROPERTY(process, "version", @@ -135,7 +144,7 @@ MaybeLocal CreateProcessObject(Environment* env) { // process._rawDebug: may be overwritten later in JS land, but should be // available from the beginning for debugging purposes - env->SetMethod(process, "_rawDebug", RawDebug); + SetMethod(context, process, "_rawDebug", RawDebug); return scope.Escape(process); } diff --git a/src/node_report.cc b/src/node_report.cc index 4bf6993ac5b..bf37e24d09c 100644 --- a/src/node_report.cc +++ b/src/node_report.cc @@ -1,8 +1,8 @@ -#include "env-inl.h" -#include "json_utils.h" #include "node_report.h" #include "debug_utils-inl.h" #include "diagnosticfilename-inl.h" +#include "env-inl.h" +#include "json_utils.h" #include "node_internals.h" #include "node_metadata.h" #include "node_mutex.h" @@ -26,16 +26,9 @@ constexpr int NODE_REPORT_VERSION = 2; constexpr int NANOS_PER_SEC = 1000 * 1000 * 1000; constexpr double SEC_PER_MICROS = 1e-6; +constexpr int MAX_FRAME_COUNT = 10; -namespace report { -using node::arraysize; -using node::ConditionVariable; -using node::DiagnosticFilename; -using node::Environment; -using node::JSONWriter; -using node::Mutex; -using node::NativeSymbolDebuggingContext; -using node::TIME_TYPE; +namespace node { using node::worker::Worker; using v8::Array; using v8::Context; @@ -49,13 +42,16 @@ using v8::Maybe; using v8::MaybeLocal; using v8::Nothing; using v8::Object; +using v8::RegisterState; +using v8::SampleInfo; +using v8::StackFrame; +using v8::StackTrace; using v8::String; using v8::TryCatch; using v8::V8; using v8::Value; -namespace per_process = node::per_process; - +namespace report { // Internal/static function declarations static void WriteNodeReport(Isolate* isolate, Environment* env, @@ -70,6 +66,9 @@ static void PrintJavaScriptErrorStack(JSONWriter* writer, Isolate* isolate, Local error, const char* trigger); +static void PrintJavaScriptStack(JSONWriter* writer, + Isolate* isolate, + const char* trigger); static void PrintJavaScriptErrorProperties(JSONWriter* writer, Isolate* isolate, Local error); @@ -83,102 +82,6 @@ static void PrintRelease(JSONWriter* writer); static void PrintCpuInfo(JSONWriter* writer); static void PrintNetworkInterfaceInfo(JSONWriter* writer); -// External function to trigger a report, writing to file. -std::string TriggerNodeReport(Isolate* isolate, - Environment* env, - const char* message, - const char* trigger, - const std::string& name, - Local error) { - std::string filename; - - // Determine the required report filename. In order of priority: - // 1) supplied on API 2) configured on startup 3) default generated - if (!name.empty()) { - // Filename was specified as API parameter. - filename = name; - } else { - std::string report_filename; - { - Mutex::ScopedLock lock(per_process::cli_options_mutex); - report_filename = per_process::cli_options->report_filename; - } - if (report_filename.length() > 0) { - // File name was supplied via start-up option. - filename = report_filename; - } else { - filename = *DiagnosticFilename(env != nullptr ? env->thread_id() : 0, - "report", "json"); - } - } - - // Open the report file stream for writing. Supports stdout/err, - // user-specified or (default) generated name - std::ofstream outfile; - std::ostream* outstream; - if (filename == "stdout") { - outstream = &std::cout; - } else if (filename == "stderr") { - outstream = &std::cerr; - } else { - std::string report_directory; - { - Mutex::ScopedLock lock(per_process::cli_options_mutex); - report_directory = per_process::cli_options->report_directory; - } - // Regular file. Append filename to directory path if one was specified - if (report_directory.length() > 0) { - std::string pathname = report_directory; - pathname += node::kPathSeparator; - pathname += filename; - outfile.open(pathname, std::ios::out | std::ios::binary); - } else { - outfile.open(filename, std::ios::out | std::ios::binary); - } - // Check for errors on the file open - if (!outfile.is_open()) { - std::cerr << "\nFailed to open Node.js report file: " << filename; - - if (report_directory.length() > 0) - std::cerr << " directory: " << report_directory; - - std::cerr << " (errno: " << errno << ")" << std::endl; - return ""; - } - outstream = &outfile; - std::cerr << "\nWriting Node.js report to file: " << filename; - } - - bool compact; - { - Mutex::ScopedLock lock(per_process::cli_options_mutex); - compact = per_process::cli_options->report_compact; - } - WriteNodeReport(isolate, env, message, trigger, filename, *outstream, - error, compact); - - // Do not close stdout/stderr, only close files we opened. - if (outfile.is_open()) { - outfile.close(); - } - - // Do not mix JSON and free-form text on stderr. - if (filename != "stderr") { - std::cerr << "\nNode.js report completed" << std::endl; - } - return filename; -} - -// External function to trigger a report, writing to a supplied stream. -void GetNodeReport(Isolate* isolate, - Environment* env, - const char* message, - const char* trigger, - Local error, - std::ostream& out) { - WriteNodeReport(isolate, env, message, trigger, "", out, error, false); -} - // Internal function to coordinate and write the various // sections of the report to the supplied stream static void WriteNodeReport(Isolate* isolate, @@ -260,9 +163,9 @@ static void WriteNodeReport(Isolate* isolate, } // Report out the command line. - if (!node::per_process::cli_options->cmdline.empty()) { + if (!per_process::cli_options->cmdline.empty()) { writer.json_arraystart("commandLine"); - for (const std::string& arg : node::per_process::cli_options->cmdline) { + for (const std::string& arg : per_process::cli_options->cmdline) { writer.json_element(arg); } writer.json_arrayend(); @@ -277,8 +180,6 @@ static void WriteNodeReport(Isolate* isolate, // Report summary JavaScript error stack backtrace PrintJavaScriptErrorStack(&writer, isolate, error, trigger); - // Report summary JavaScript error properties backtrace - PrintJavaScriptErrorProperties(&writer, isolate, error); writer.json_objectend(); // the end of 'javascriptStack' // Report V8 Heap and Garbage Collector information @@ -321,12 +222,8 @@ static void WriteNodeReport(Isolate* isolate, expected_results += w->RequestInterrupt([&](Environment* env) { std::ostringstream os; - GetNodeReport(env->isolate(), - env, - "Worker thread subreport", - trigger, - Local(), - os); + GetNodeReport( + env, "Worker thread subreport", trigger, Local(), os); Mutex::ScopedLock lock(workers_mutex); worker_infos.emplace_back(os.str()); @@ -377,8 +274,8 @@ static void PrintVersionInformation(JSONWriter* writer) { // Report Process word size writer->json_keyvalue("wordSize", sizeof(void*) * 8); - writer->json_keyvalue("arch", node::per_process::metadata.arch); - writer->json_keyvalue("platform", node::per_process::metadata.platform); + writer->json_keyvalue("arch", per_process::metadata.arch); + writer->json_keyvalue("platform", per_process::metadata.platform); // Report deps component versions PrintComponentVersions(writer); @@ -528,7 +425,7 @@ static Maybe ErrorToString(Isolate* isolate, maybe_str = error->ToString(context); } else if (error->IsObject()) { MaybeLocal stack = error.As()->Get( - context, node::FIXED_ONE_BYTE_STRING(isolate, "stack")); + context, FIXED_ONE_BYTE_STRING(isolate, "stack")); if (!stack.IsEmpty() && stack.ToLocalChecked()->IsString()) { maybe_str = stack.ToLocalChecked().As(); } @@ -542,19 +439,84 @@ static Maybe ErrorToString(Isolate* isolate, return Just<>(std::string(*sv, sv.length())); } +static void PrintEmptyJavaScriptStack(JSONWriter* writer) { + writer->json_keyvalue("message", "No stack."); + writer->json_arraystart("stack"); + writer->json_element("Unavailable."); + writer->json_arrayend(); + + writer->json_objectstart("errorProperties"); + writer->json_objectend(); +} + +// Do our best to report the JavaScript stack without calling into JavaScript. +static void PrintJavaScriptStack(JSONWriter* writer, + Isolate* isolate, + const char* trigger) { + // Can not capture the stacktrace when the isolate is in a OOM state. + if (!strcmp(trigger, "OOMError")) { + PrintEmptyJavaScriptStack(writer); + return; + } + + HandleScope scope(isolate); + RegisterState state; + state.pc = nullptr; + state.fp = &state; + state.sp = &state; + + // in-out params + SampleInfo info; + void* samples[MAX_FRAME_COUNT]; + isolate->GetStackSample(state, samples, MAX_FRAME_COUNT, &info); + + constexpr StackTrace::StackTraceOptions stack_trace_options = + static_cast( + StackTrace::kDetailed | + StackTrace::kExposeFramesAcrossSecurityOrigins); + Local stack = StackTrace::CurrentStackTrace( + isolate, MAX_FRAME_COUNT, stack_trace_options); + + if (stack->GetFrameCount() == 0) { + PrintEmptyJavaScriptStack(writer); + return; + } + + writer->json_keyvalue("message", trigger); + writer->json_arraystart("stack"); + for (int i = 0; i < stack->GetFrameCount(); i++) { + Local frame = stack->GetFrame(isolate, i); + + Utf8Value function_name(isolate, frame->GetFunctionName()); + Utf8Value script_name(isolate, frame->GetScriptName()); + const int line_number = frame->GetLineNumber(); + const int column = frame->GetColumn(); + + std::string stack_line = SPrintF( + "at %s (%s:%d:%d)", *function_name, *script_name, line_number, column); + writer->json_element(stack_line); + } + writer->json_arrayend(); + writer->json_objectstart("errorProperties"); + writer->json_objectend(); +} + // Report the JavaScript stack. static void PrintJavaScriptErrorStack(JSONWriter* writer, Isolate* isolate, Local error, const char* trigger) { + if (error.IsEmpty()) { + return PrintJavaScriptStack(writer, isolate, trigger); + } + TryCatch try_catch(isolate); HandleScope scope(isolate); Local context = isolate->GetCurrentContext(); std::string ss = ""; - if ((!strcmp(trigger, "FatalError")) || - (!strcmp(trigger, "Signal")) || - (!ErrorToString(isolate, context, error).To(&ss))) { - ss = "No stack.\nUnavailable.\n"; + if (!ErrorToString(isolate, context, error).To(&ss)) { + PrintEmptyJavaScriptStack(writer); + return; } int line = ss.find('\n'); @@ -577,6 +539,9 @@ static void PrintJavaScriptErrorStack(JSONWriter* writer, } writer->json_arrayend(); } + + // Report summary JavaScript error properties backtrace + PrintJavaScriptErrorProperties(writer, isolate, error); } // Report a native stack backtrace @@ -608,12 +573,27 @@ static void PrintGCStatistics(JSONWriter* writer, Isolate* isolate) { writer->json_objectstart("javascriptHeap"); writer->json_keyvalue("totalMemory", v8_heap_stats.total_heap_size()); + writer->json_keyvalue("executableMemory", + v8_heap_stats.total_heap_size_executable()); writer->json_keyvalue("totalCommittedMemory", v8_heap_stats.total_physical_size()); - writer->json_keyvalue("usedMemory", v8_heap_stats.used_heap_size()); writer->json_keyvalue("availableMemory", v8_heap_stats.total_available_size()); + writer->json_keyvalue("totalGlobalHandlesMemory", + v8_heap_stats.total_global_handles_size()); + writer->json_keyvalue("usedGlobalHandlesMemory", + v8_heap_stats.used_global_handles_size()); + writer->json_keyvalue("usedMemory", v8_heap_stats.used_heap_size()); writer->json_keyvalue("memoryLimit", v8_heap_stats.heap_size_limit()); + writer->json_keyvalue("mallocedMemory", v8_heap_stats.malloced_memory()); + writer->json_keyvalue("externalMemory", v8_heap_stats.external_memory()); + writer->json_keyvalue("peakMallocedMemory", + v8_heap_stats.peak_malloced_memory()); + writer->json_keyvalue("nativeContextCount", + v8_heap_stats.number_of_native_contexts()); + writer->json_keyvalue("detachedContextCount", + v8_heap_stats.number_of_detached_contexts()); + writer->json_keyvalue("doesZapGarbage", v8_heap_stats.does_zap_garbage()); writer->json_objectstart("heapSpaces"); // Loop through heap spaces @@ -641,7 +621,7 @@ static void PrintGCStatistics(JSONWriter* writer, Isolate* isolate) { static void PrintResourceUsage(JSONWriter* writer) { // Get process uptime in seconds uint64_t uptime = - (uv_hrtime() - node::per_process::node_start_time) / (NANOS_PER_SEC); + (uv_hrtime() - per_process::node_start_time) / (NANOS_PER_SEC); if (uptime == 0) uptime = 1; // avoid division by zero. // Process and current thread usage statistics @@ -699,7 +679,7 @@ static void PrintSystemInformation(JSONWriter* writer) { writer->json_objectstart("environmentVariables"); { - Mutex::ScopedLock lock(node::per_process::env_var_mutex); + Mutex::ScopedLock lock(per_process::env_var_mutex); r = uv_os_environ(&envitems, &envcount); } @@ -779,8 +759,7 @@ static void PrintComponentVersions(JSONWriter* writer) { writer->json_objectstart("componentVersions"); -#define V(key) \ - writer->json_keyvalue(#key, node::per_process::metadata.versions.key); +#define V(key) writer->json_keyvalue(#key, per_process::metadata.versions.key); NODE_VERSIONS_KEYS(V) #undef V @@ -790,18 +769,17 @@ static void PrintComponentVersions(JSONWriter* writer) { // Report runtime release information. static void PrintRelease(JSONWriter* writer) { writer->json_objectstart("release"); - writer->json_keyvalue("name", node::per_process::metadata.release.name); + writer->json_keyvalue("name", per_process::metadata.release.name); #if NODE_VERSION_IS_LTS - writer->json_keyvalue("lts", node::per_process::metadata.release.lts); + writer->json_keyvalue("lts", per_process::metadata.release.lts); #endif #ifdef NODE_HAS_RELEASE_URLS writer->json_keyvalue("headersUrl", - node::per_process::metadata.release.headers_url); - writer->json_keyvalue("sourceUrl", - node::per_process::metadata.release.source_url); + per_process::metadata.release.headers_url); + writer->json_keyvalue("sourceUrl", per_process::metadata.release.source_url); #ifdef _WIN32 - writer->json_keyvalue("libUrl", node::per_process::metadata.release.lib_url); + writer->json_keyvalue("libUrl", per_process::metadata.release.lib_url); #endif // _WIN32 #endif // NODE_HAS_RELEASE_URLS @@ -809,3 +787,146 @@ static void PrintRelease(JSONWriter* writer) { } } // namespace report + +std::string TriggerNodeReport(Isolate* isolate, + Environment* env, + const char* message, + const char* trigger, + const std::string& name, + Local error) { + std::string filename; + + // Determine the required report filename. In order of priority: + // 1) supplied on API 2) configured on startup 3) default generated + if (!name.empty()) { + // Filename was specified as API parameter. + filename = name; + } else { + std::string report_filename; + { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + report_filename = per_process::cli_options->report_filename; + } + if (report_filename.length() > 0) { + // File name was supplied via start-up option. + filename = report_filename; + } else { + filename = *DiagnosticFilename( + env != nullptr ? env->thread_id() : 0, "report", "json"); + } + } + + // Open the report file stream for writing. Supports stdout/err, + // user-specified or (default) generated name + std::ofstream outfile; + std::ostream* outstream; + if (filename == "stdout") { + outstream = &std::cout; + } else if (filename == "stderr") { + outstream = &std::cerr; + } else { + std::string report_directory; + { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + report_directory = per_process::cli_options->report_directory; + } + // Regular file. Append filename to directory path if one was specified + if (report_directory.length() > 0) { + std::string pathname = report_directory; + pathname += kPathSeparator; + pathname += filename; + outfile.open(pathname, std::ios::out | std::ios::binary); + } else { + outfile.open(filename, std::ios::out | std::ios::binary); + } + // Check for errors on the file open + if (!outfile.is_open()) { + std::cerr << "\nFailed to open Node.js report file: " << filename; + + if (report_directory.length() > 0) + std::cerr << " directory: " << report_directory; + + std::cerr << " (errno: " << errno << ")" << std::endl; + return ""; + } + outstream = &outfile; + std::cerr << "\nWriting Node.js report to file: " << filename; + } + + bool compact; + { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + compact = per_process::cli_options->report_compact; + } + + report::WriteNodeReport( + isolate, env, message, trigger, filename, *outstream, error, compact); + + // Do not close stdout/stderr, only close files we opened. + if (outfile.is_open()) { + outfile.close(); + } + + // Do not mix JSON and free-form text on stderr. + if (filename != "stderr") { + std::cerr << "\nNode.js report completed" << std::endl; + } + return filename; +} + +// External function to trigger a report, writing to file. +std::string TriggerNodeReport(Isolate* isolate, + const char* message, + const char* trigger, + const std::string& name, + Local error) { + Environment* env = nullptr; + if (isolate != nullptr) { + env = Environment::GetCurrent(isolate); + } + return TriggerNodeReport(isolate, env, message, trigger, name, error); +} + +// External function to trigger a report, writing to file. +std::string TriggerNodeReport(Environment* env, + const char* message, + const char* trigger, + const std::string& name, + Local error) { + return TriggerNodeReport(env != nullptr ? env->isolate() : nullptr, + env, + message, + trigger, + name, + error); +} + +// External function to trigger a report, writing to a supplied stream. +void GetNodeReport(Isolate* isolate, + const char* message, + const char* trigger, + Local error, + std::ostream& out) { + Environment* env = nullptr; + if (isolate != nullptr) { + env = Environment::GetCurrent(isolate); + } + report::WriteNodeReport( + isolate, env, message, trigger, "", out, error, false); +} + +// External function to trigger a report, writing to a supplied stream. +void GetNodeReport(Environment* env, + const char* message, + const char* trigger, + Local error, + std::ostream& out) { + Isolate* isolate = nullptr; + if (env != nullptr) { + isolate = env->isolate(); + } + report::WriteNodeReport( + isolate, env, message, trigger, "", out, error, false); +} + +} // namespace node diff --git a/src/node_report.h b/src/node_report.h index a8292eb2dd4..7a2e817ac82 100644 --- a/src/node_report.h +++ b/src/node_report.h @@ -1,4 +1,7 @@ -#pragma once +#ifndef SRC_NODE_REPORT_H_ +#define SRC_NODE_REPORT_H_ + +#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "node.h" #include "node_buffer.h" @@ -11,23 +14,10 @@ #endif #include +#include +namespace node { namespace report { - -// Function declarations - functions in src/node_report.cc -std::string TriggerNodeReport(v8::Isolate* isolate, - node::Environment* env, - const char* message, - const char* trigger, - const std::string& name, - v8::Local error); -void GetNodeReport(v8::Isolate* isolate, - node::Environment* env, - const char* message, - const char* trigger, - v8::Local error, - std::ostream& out); - // Function declarations - utility functions in src/node_report_utils.cc void WalkHandle(uv_handle_t* h, void* arg); @@ -45,3 +35,8 @@ void WriteReport(const v8::FunctionCallbackInfo& info); void GetReport(const v8::FunctionCallbackInfo& info); } // namespace report +} // namespace node + +#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS + +#endif // SRC_NODE_REPORT_H_ diff --git a/src/node_report_module.cc b/src/node_report_module.cc index 160498c6276..dcbb81fae76 100644 --- a/src/node_report_module.cc +++ b/src/node_report_module.cc @@ -15,9 +15,11 @@ #include #include +namespace node { namespace report { using node::Environment; using node::Mutex; +using node::SetMethod; using node::Utf8Value; using v8::Context; using v8::FunctionCallbackInfo; @@ -46,8 +48,7 @@ void WriteReport(const FunctionCallbackInfo& info) { else error = Local(); - filename = TriggerNodeReport( - isolate, env, *message, *trigger, filename, error); + filename = TriggerNodeReport(env, *message, *trigger, filename, error); // Return value is the report filename info.GetReturnValue().Set( String::NewFromUtf8(isolate, filename.c_str()).ToLocalChecked()); @@ -67,8 +68,7 @@ void GetReport(const FunctionCallbackInfo& info) { else error = Local(); - GetNodeReport( - isolate, env, "JavaScript API", __func__, error, out); + GetNodeReport(env, "JavaScript API", __func__, error, out); // Return value is the contents of a report as a string. info.GetReturnValue().Set( @@ -76,48 +76,48 @@ void GetReport(const FunctionCallbackInfo& info) { } static void GetCompact(const FunctionCallbackInfo& info) { - node::Mutex::ScopedLock lock(node::per_process::cli_options_mutex); - info.GetReturnValue().Set(node::per_process::cli_options->report_compact); + Mutex::ScopedLock lock(per_process::cli_options_mutex); + info.GetReturnValue().Set(per_process::cli_options->report_compact); } static void SetCompact(const FunctionCallbackInfo& info) { - node::Mutex::ScopedLock lock(node::per_process::cli_options_mutex); + Mutex::ScopedLock lock(per_process::cli_options_mutex); Environment* env = Environment::GetCurrent(info); Isolate* isolate = env->isolate(); bool compact = info[0]->ToBoolean(isolate)->Value(); - node::per_process::cli_options->report_compact = compact; + per_process::cli_options->report_compact = compact; } static void GetDirectory(const FunctionCallbackInfo& info) { - node::Mutex::ScopedLock lock(node::per_process::cli_options_mutex); + Mutex::ScopedLock lock(per_process::cli_options_mutex); Environment* env = Environment::GetCurrent(info); - std::string directory = node::per_process::cli_options->report_directory; + std::string directory = per_process::cli_options->report_directory; auto result = String::NewFromUtf8(env->isolate(), directory.c_str()); info.GetReturnValue().Set(result.ToLocalChecked()); } static void SetDirectory(const FunctionCallbackInfo& info) { - node::Mutex::ScopedLock lock(node::per_process::cli_options_mutex); + Mutex::ScopedLock lock(per_process::cli_options_mutex); Environment* env = Environment::GetCurrent(info); CHECK(info[0]->IsString()); Utf8Value dir(env->isolate(), info[0].As()); - node::per_process::cli_options->report_directory = *dir; + per_process::cli_options->report_directory = *dir; } static void GetFilename(const FunctionCallbackInfo& info) { - node::Mutex::ScopedLock lock(node::per_process::cli_options_mutex); + Mutex::ScopedLock lock(per_process::cli_options_mutex); Environment* env = Environment::GetCurrent(info); - std::string filename = node::per_process::cli_options->report_filename; + std::string filename = per_process::cli_options->report_filename; auto result = String::NewFromUtf8(env->isolate(), filename.c_str()); info.GetReturnValue().Set(result.ToLocalChecked()); } static void SetFilename(const FunctionCallbackInfo& info) { - node::Mutex::ScopedLock lock(node::per_process::cli_options_mutex); + Mutex::ScopedLock lock(per_process::cli_options_mutex); Environment* env = Environment::GetCurrent(info); CHECK(info[0]->IsString()); Utf8Value name(env->isolate(), info[0].As()); - node::per_process::cli_options->report_filename = *name; + per_process::cli_options->report_filename = *name; } static void GetSignal(const FunctionCallbackInfo& info) { @@ -135,15 +135,14 @@ static void SetSignal(const FunctionCallbackInfo& info) { } static void ShouldReportOnFatalError(const FunctionCallbackInfo& info) { - Mutex::ScopedLock lock(node::per_process::cli_options_mutex); - info.GetReturnValue().Set( - node::per_process::cli_options->report_on_fatalerror); + Mutex::ScopedLock lock(per_process::cli_options_mutex); + info.GetReturnValue().Set(per_process::cli_options->report_on_fatalerror); } static void SetReportOnFatalError(const FunctionCallbackInfo& info) { CHECK(info[0]->IsBoolean()); - Mutex::ScopedLock lock(node::per_process::cli_options_mutex); - node::per_process::cli_options->report_on_fatalerror = info[0]->IsTrue(); + Mutex::ScopedLock lock(per_process::cli_options_mutex); + per_process::cli_options->report_on_fatalerror = info[0]->IsTrue(); } static void ShouldReportOnSignal(const FunctionCallbackInfo& info) { @@ -175,29 +174,32 @@ static void Initialize(Local exports, Local unused, Local context, void* priv) { - Environment* env = Environment::GetCurrent(context); - - env->SetMethod(exports, "writeReport", WriteReport); - env->SetMethod(exports, "getReport", GetReport); - env->SetMethod(exports, "getCompact", GetCompact); - env->SetMethod(exports, "setCompact", SetCompact); - env->SetMethod(exports, "getDirectory", GetDirectory); - env->SetMethod(exports, "setDirectory", SetDirectory); - env->SetMethod(exports, "getFilename", GetFilename); - env->SetMethod(exports, "setFilename", SetFilename); - env->SetMethod(exports, "getSignal", GetSignal); - env->SetMethod(exports, "setSignal", SetSignal); - env->SetMethod(exports, "shouldReportOnFatalError", ShouldReportOnFatalError); - env->SetMethod(exports, "setReportOnFatalError", SetReportOnFatalError); - env->SetMethod(exports, "shouldReportOnSignal", ShouldReportOnSignal); - env->SetMethod(exports, "setReportOnSignal", SetReportOnSignal); - env->SetMethod(exports, "shouldReportOnUncaughtException", - ShouldReportOnUncaughtException); - env->SetMethod(exports, "setReportOnUncaughtException", - SetReportOnUncaughtException); -} - -void RegisterExternalReferences(node::ExternalReferenceRegistry* registry) { + SetMethod(context, exports, "writeReport", WriteReport); + SetMethod(context, exports, "getReport", GetReport); + SetMethod(context, exports, "getCompact", GetCompact); + SetMethod(context, exports, "setCompact", SetCompact); + SetMethod(context, exports, "getDirectory", GetDirectory); + SetMethod(context, exports, "setDirectory", SetDirectory); + SetMethod(context, exports, "getFilename", GetFilename); + SetMethod(context, exports, "setFilename", SetFilename); + SetMethod(context, exports, "getSignal", GetSignal); + SetMethod(context, exports, "setSignal", SetSignal); + SetMethod( + context, exports, "shouldReportOnFatalError", ShouldReportOnFatalError); + SetMethod(context, exports, "setReportOnFatalError", SetReportOnFatalError); + SetMethod(context, exports, "shouldReportOnSignal", ShouldReportOnSignal); + SetMethod(context, exports, "setReportOnSignal", SetReportOnSignal); + SetMethod(context, + exports, + "shouldReportOnUncaughtException", + ShouldReportOnUncaughtException); + SetMethod(context, + exports, + "setReportOnUncaughtException", + SetReportOnUncaughtException); +} + +void RegisterExternalReferences(ExternalReferenceRegistry* registry) { registry->Register(WriteReport); registry->Register(GetReport); registry->Register(GetCompact); @@ -217,6 +219,7 @@ void RegisterExternalReferences(node::ExternalReferenceRegistry* registry) { } } // namespace report +} // namespace node -NODE_MODULE_CONTEXT_AWARE_INTERNAL(report, report::Initialize) -NODE_MODULE_EXTERNAL_REFERENCE(report, report::RegisterExternalReferences) +NODE_MODULE_CONTEXT_AWARE_INTERNAL(report, node::report::Initialize) +NODE_MODULE_EXTERNAL_REFERENCE(report, node::report::RegisterExternalReferences) diff --git a/src/node_report_utils.cc b/src/node_report_utils.cc index 82ed385ad17..b8f32beb203 100644 --- a/src/node_report_utils.cc +++ b/src/node_report_utils.cc @@ -3,11 +3,9 @@ #include "node_report.h" #include "util-inl.h" +namespace node { namespace report { -using node::JSONWriter; -using node::MallocedBuffer; - static constexpr auto null = JSONWriter::Null{}; // Utility function to format socket information. @@ -95,6 +93,8 @@ static void ReportPipeEndpoints(uv_handle_t* h, JSONWriter* writer) { buffer = MallocedBuffer(buffer_size); if (buffer.data != nullptr) { rc = uv_pipe_getsockname(&handle->pipe, buffer.data, &buffer_size); + } else { + buffer_size = 0; } } if (rc == 0 && buffer_size != 0 && buffer.data != nullptr) { @@ -208,8 +208,7 @@ void WalkHandle(uv_handle_t* h, void* arg) { // SIGWINCH is used by libuv so always appears. // See http://docs.libuv.org/en/v1.x/signal.html writer->json_keyvalue("signum", handle->signal.signum); - writer->json_keyvalue("signal", - node::signo_string(handle->signal.signum)); + writer->json_keyvalue("signal", signo_string(handle->signal.signum)); break; default: break; @@ -262,8 +261,16 @@ void WalkHandle(uv_handle_t* h, void* arg) { writer->json_keyvalue("writable", static_cast(uv_is_writable(&handle->stream))); } - + if (h->type == UV_UDP) { + writer->json_keyvalue( + "writeQueueSize", + uv_udp_get_send_queue_size(reinterpret_cast(h))); + writer->json_keyvalue( + "writeQueueCount", + uv_udp_get_send_queue_count(reinterpret_cast(h))); + } writer->json_end(); } } // namespace report +} // namespace node diff --git a/src/node_root_certs.h b/src/node_root_certs.h index 1fbec584b6a..2eb13a1dcf9 100644 --- a/src/node_root_certs.h +++ b/src/node_root_certs.h @@ -21,28 +21,6 @@ "HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==\n" "-----END CERTIFICATE-----", -/* GlobalSign Root CA - R2 */ -"-----BEGIN CERTIFICATE-----\n" -"MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMX\n" -"R2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMT\n" -"Ckdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQL\n" -"ExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UE\n" -"AxMKR2xvYmFsU2lnbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8o\n" -"mUVCxKs+IVSbC9N/hHD6ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7\n" -"SqbKSaZeqKeMWhG8eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQ\n" -"BoZfXklqtTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd\n" -"C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feq\n" -"CapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8E\n" -"BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IHV2ccHsBqBt5ZtJot39wZhi4w\n" -"NgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9yb290LXIyLmNy\n" -"bDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEA\n" -"mYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkI\n" -"k7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRD\n" -"LenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd\n" -"AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7TBj0/VLZ\n" -"jmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n" -"-----END CERTIFICATE-----", - /* Entrust.net Premium 2048 Secure Server CA */ "-----BEGIN CERTIFICATE-----\n" "MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVz\n" @@ -364,26 +342,6 @@ "yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K\n" "-----END CERTIFICATE-----", -/* DST Root CA X3 */ -"-----BEGIN CERTIFICATE-----\n" -"MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYD\n" -"VQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENB\n" -"IFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRh\n" -"bCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJ\n" -"KoZIhvcNAQEBBQADggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdA\n" -"wRgUi+DoM3ZJKuM/IUmTrE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwG\n" -"MoOifooUMM0RoOEqOLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4X\n" -"Lh7dIN9bxiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw\n" -"7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkq\n" -"tilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw\n" -"HQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqGSIb3DQEBBQUAA4IBAQCjGiyb\n" -"FwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikugdB/OEIKcdBodfpga3csTS7MgROSR\n" -"6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaL\n" -"bumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir\n" -"/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06Xyx\n" -"V3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ\n" -"-----END CERTIFICATE-----", - /* SwissSign Gold CA - G2 */ "-----BEGIN CERTIFICATE-----\n" "MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNI\n" @@ -578,28 +536,6 @@ "vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==\n" "-----END CERTIFICATE-----", -/* Cybertrust Global Root */ -"-----BEGIN CERTIFICATE-----\n" -"MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMP\n" -"Q3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2\n" -"MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5j\n" -"MR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC\n" -"AQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO2\n" -"1O1fWLE3TdVJDm71aofW0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2O\n" -"lTEQXO2iLb3VOm2yHLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeW\n" -"P032a7iPt3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz\n" -"FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQID\n" -"AQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2\n" -"CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJs\n" -"aWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8GA1UdIwQYMBaAFLYIew16zKwgTIZW\n" -"Ml7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ej\n" -"hVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24C\n" -"JJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+z\n" -"v+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc\n" -"A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jWWL1WMRJO\n" -"Ecgh4LMRkWXbtKaIOM5V\n" -"-----END CERTIFICATE-----", - /* ePKI Root Certification Authority */ "-----BEGIN CERTIFICATE-----\n" "MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYD\n" @@ -1074,30 +1010,6 @@ "Un/10asIbvPuW/mIPX64b24D5EI=\n" "-----END CERTIFICATE-----", -/* Hellenic Academic and Research Institutions RootCA 2011 */ -"-----BEGIN CERTIFICATE-----\n" -"MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNV\n" -"BAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4g\n" -"QXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5z\n" -"dGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1Mlow\n" -"gZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFy\n" -"Y2ggSW5zdGl0dXRpb25zIENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNh\n" -"ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZI\n" -"hvcNAQEBBQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz\n" -"dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0a\n" -"e50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsm\n" -"LIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD75O6aRXxYp2fmTmCobd0LovU\n" -"xQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH3N6sQWRstBmbAmNtJGSPRLIl6s5d\n" -"dAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNV\n" -"HQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUw\n" -"BoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3\n" -"DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p\n" -"6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8TqBTnbI6\n" -"nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD/md9\n" -"zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N\n" -"7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4\n" -"-----END CERTIFICATE-----", - /* Actalis Authentication Root CA */ "-----BEGIN CERTIFICATE-----\n" "MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQx\n" @@ -1743,19 +1655,6 @@ "qZtNyWHa0V1Xahg=\n" "-----END CERTIFICATE-----", -/* GlobalSign ECC Root CA - R4 */ -"-----BEGIN CERTIFICATE-----\n" -"MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UE\n" -"CxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMw\n" -"EQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEk\n" -"MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxT\n" -"aWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5\n" -"049sJQ6fLjkZHAOkrprlOQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5Rikqtlx\n" -"P6jUuc6MHaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n" -"FFSwe61FuOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX\n" -"kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=\n" -"-----END CERTIFICATE-----", - /* GlobalSign ECC Root CA - R5 */ "-----BEGIN CERTIFICATE-----\n" "MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UE\n" @@ -2483,94 +2382,6 @@ "i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9\n" "-----END CERTIFICATE-----", -/* GTS Root R1 */ -"-----BEGIN CERTIFICATE-----\n" -"MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYD\n" -"VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxML\n" -"R1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQG\n" -"EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RT\n" -"IFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+U\n" -"PreVp0A8of2C+X0yBoJx9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeq\n" -"Uqv4IyfLpLGcY9vXmX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g\n" -"4M/SCYe7zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P\n" -"fyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVs\n" -"rBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3\n" -"+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmkMiVOKvFlRNACzqrOSbTq\n" -"n3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1AK/1TD7Cn1TsNsYqiA94xrcx3\n" -"6m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqgh\n" -"tqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB\n" -"2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB\n" -"/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW\n" -"Cu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1d5iyfNm9\n" -"dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73svfuo2\n" -"1pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xm\n" -"ld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL0\n" -"7q9bgsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdlj\n" -"UEn2NIVq4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0d\n" -"zpqPJeaAcWErtXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwl\n" -"fnuzCdyyF62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9\n" -"SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQ\n" -"cu51OyLemGhmW/HGY0dVHLqlCFF1pkgl\n" -"-----END CERTIFICATE-----", - -/* GTS Root R2 */ -"-----BEGIN CERTIFICATE-----\n" -"MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYD\n" -"VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxML\n" -"R1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQG\n" -"EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RT\n" -"IFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZa\n" -"bFn3GTXd98GdVarTzTukk3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+\n" -"cnfgLFuv5AS/T3KgGjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJ\n" -"k9/BW9BuXvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd\n" -"re7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9Rh\n" -"D1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1\n" -"E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8YzodDqs5xoic4DSMPclQsci\n" -"OzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9qS34BIbIjMt/kmkRtWVtd9QCg\n" -"HJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W\n" -"+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/U\n" -"VKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB\n" -"/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp\n" -"8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JTvhaI8dI4\n" -"XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ+YF5\n" -"9exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw\n" -"c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SL\n" -"A3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvp\n" -"x0QnRY5rn/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Y\n" -"u5UC56GtmwfuNmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOb\n" -"oB6BAFDC5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF\n" -"izoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxg\n" -"XS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC\n" -"-----END CERTIFICATE-----", - -/* GTS Root R3 */ -"-----BEGIN CERTIFICATE-----\n" -"MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQG\n" -"EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RT\n" -"IFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJV\n" -"UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv\n" -"b3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1M\n" -"J7x/JlFyb+Kf1qPKzEUURout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx\n" -"1WyRRK2EE46ajA2ADDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/\n" -"MB0GA1UdDgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk\n" -"fCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUl\n" -"UfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd\n" -"-----END CERTIFICATE-----", - -/* GTS Root R4 */ -"-----BEGIN CERTIFICATE-----\n" -"MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQG\n" -"EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RT\n" -"IFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJV\n" -"UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv\n" -"b3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5G\n" -"vWvVYRg1rkDdc/eJkTBa6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRl\n" -"BtHci8nHc8iMai/lxKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/\n" -"MB0GA1UdDgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0\n" -"CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG\n" -"7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w==\n" -"-----END CERTIFICATE-----", - /* UCA Global G2 Root */ "-----BEGIN CERTIFICATE-----\n" "MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYD\n" @@ -3243,4 +3054,478 @@ "qsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygNnxS2PFOiTAZpffpskcYqSUXm\n" "7LcT4Tps\n" "-----END CERTIFICATE-----", + +/* Autoridad de Certificacion Firmaprofesional CIF A62634068 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCRVMx\n" +"QjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwg\n" +"Q0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1MDUxNTIyMDdaMFExCzAJBgNV\n" +"BAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zl\n" +"c2lvbmFsIENJRiBBNjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDK\n" +"lmuO6vj78aI14H9M2uDDUtd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOS\n" +"L/UR5GLXMnE42QQMcas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9\n" +"qFD0sefGL9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i\n" +"NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2\n" +"f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44\n" +"I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCyZ/QYFpM6/EfY0XiWMR+6Kwxf\n" +"XZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy\n" +"9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF\n" +"8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mV\n" +"BngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4A\n" +"Pn7VdMActHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd\n" +"IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5jb20vY3Bz\n" +"MFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABCAG8AbgBhAG4AbwB2\n" +"AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAwADEANzAOBgNVHQ8BAf8EBAMC\n" +"AQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9miWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fg\n" +"PiDL4QjbEwj4KKE1soCzC1HA01aajTNFSa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6\n" +"kN/oGbDbLIpgD7dvlAceHabJhfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg\n" +"4MSPi3i1O1ilI45PVf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX\n" +"2lSX3xZEEAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV\n" +"1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2tCsvMo2eb\n" +"KHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR5xbHV/g4+afNmyJU\n" +"72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqwf9DEMnDAGf/JOC0ULGb0QkTm\n" +"VXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RB\n" +"VuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNKGbqEZycPvEJdvSRUDewdcAZfpLz6IHxV\n" +"-----END CERTIFICATE-----", + +/* vTrus ECC Root CA */ +"-----BEGIN CERTIFICATE-----\n" +"MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMwRzELMAkG\n" +"A1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVz\n" +"IEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDczMTA3MjY0NFowRzELMAkGA1UE\n" +"BhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVD\n" +"QyBSb290IENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9\n" +"JpRCux3NCNtzslt188+cToL0v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A\n" +"2MMrMudwpremIFUde4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHb\n" +"H88wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw\n" +"V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sAAjEA6dPG\n" +"nlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEGGJTO\n" +"-----END CERTIFICATE-----", + +/* vTrus Root CA */ +"-----BEGIN CERTIFICATE-----\n" +"MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQELBQAwQzEL\n" +"MAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xFjAUBgNVBAMTDXZU\n" +"cnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMxMDcyNDA1WjBDMQswCQYDVQQG\n" +"EwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4sTHRkLjEWMBQGA1UEAxMNdlRydXMgUm9v\n" +"dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB\n" +"6ksDXhA/kFocizuwZotsSKYcIrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoR\n" +"uBLpDLvPbmyAhykUAyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6W\n" +"TEN+VRS+GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9\n" +"8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdHflqUhSZN\n" +"O7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajtJ8nU57O5q4IikCc9\n" +"Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim0zvc+gRGE1WKyURHuFE5Gi7o\n" +"NOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZNpGvu/9ROutW04o5IWgAZCfEF2c6Rsffr\n" +"6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQUqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwX\n" +"C1pDxaWG6iSe4gUH3DRCEpHWOXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1Bk\n" +"LFTltvA8Kc9XAgMBAAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNV\n" +"HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet\n" +"8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWdnxEt/Hlk\n" +"3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1jbhd47F18iMjrjld2\n" +"2VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvMKar5CKXiNxTKsbhm7xqC5PD4\n" +"8acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIivTDUHKgLKeBRtRytAVunLKmChZwOgzoy8\n" +"sHJnxDHO2zTlJQNgJXtxmOTAGytfdELSS8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVT\n" +"sMo554WgicEFOwE30z9J4nfrI8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7I\n" +"dMakLXogqzu4sEb9b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9\n" +"mK5S4fNBUvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P\n" +"Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929vensBxXVsFy\n" +"6K2ir40zSbofitzmdHxghm+Hl3s=\n" +"-----END CERTIFICATE-----", + +/* ISRG Root X2 */ +"-----BEGIN CERTIFICATE-----\n" +"MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQswCQYDVQQG\n" +"EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNV\n" +"BAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00MDA5MTcxNjAwMDBaME8xCzAJ\n" +"BgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEV\n" +"MBMGA1UEAxMMSVNSRyBSb290IFgyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJ\n" +"SvMWSj5cz3es3mcFDR0HttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvX\n" +"RdgKam7mAHf7AlF9ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYw\n" +"DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI\n" +"zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdWtL4ndQav\n" +"Ei51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1/q4AaOeMSQ+2b1tb\n" +"FfLn\n" +"-----END CERTIFICATE-----", + +/* HiPKI Root CA - G1 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBPMQswCQYD\n" +"VQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xGzAZBgNVBAMM\n" +"EkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRaFw0zNzEyMzExNTU5NTlaME8x\n" +"CzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEbMBkG\n" +"A1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC\n" +"AgEA9B5/UnMyDHPkvRN0o9QwqNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6\n" +"zCFovkRTv4354twvVcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY2\n" +"9yTw1S+6lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz\n" +"Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZKILSQjqj\n" +"2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CKFgeW0iEPU8DtqX7U\n" +"TuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFjHluP2cFeRXF3D4FdXyGarYPM\n" +"+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDry+K49a6SsvfhhEvyovKTmiKe0xRvNlS9\n" +"H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09b\n" +"A8PgcSojt/ewsTu8mL3WmKgMa/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaX\n" +"xA/VLGGEqnKG/uY6fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB\n" +"/zAdBgNVHQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG\n" +"SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi7zNKpiMd\n" +"Dg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqcSE5XCV0vrPSltJcz\n" +"WNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6FzaZsT0pPBWGTMpWmWSBUdGSquE\n" +"wx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9TcXzZoZjmDlicmisjEOf6aIW/Vcobpf2Ll\n" +"l07QJNBAsNB1CI69aO4I1258EHBGG3zgiLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+Em\n" +"BYTksMCv5wiZqAxeJoBF1PhoL5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFef\n" +"Q05rLisY+GpzjLrFNe85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1\n" +"/k6fi8wrkkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+\n" +"vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQUYDksswBV\n" +"LuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ==\n" +"-----END CERTIFICATE-----", + +/* GlobalSign ECC Root CA - R4 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYDVQQLExtH\n" +"bG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNV\n" +"BAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgwMTE5MDMxNDA3WjBQMSQwIgYD\n" +"VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24x\n" +"EzARBgNVBAMTCkdsb2JhbFNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wl\n" +"Dp8uORkcA6SumuU5BwkWymOxuYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5\n" +"zowdo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7\n" +"rUW44kB/+wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147\n" +"bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm\n" +"-----END CERTIFICATE-----", + +/* GTS Root R1 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG\n" +"EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RT\n" +"IFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJV\n" +"UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv\n" +"b3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreV\n" +"p0A8of2C+X0yBoJx9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4\n" +"IyfLpLGcY9vXmX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/S\n" +"CYe7zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl\n" +"qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQ\n" +"f4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH\n" +"+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yD\n" +"sEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97\n" +"PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmx\n" +"lbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACY\n" +"PTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAd\n" +"BgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb\n" +"C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEeQkEzCzc9\n" +"zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuyh6f88/qBVRRiClmp\n" +"IgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM47HLwEXWdyzRSjeZ2axfG34ar\n" +"J45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8JZgfIPxz88NtFMN9iiMG1D53Dn0reWVlH\n" +"xYciNuaCp+0KueIHoI17eko8cdLiA6EfMgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/b\n" +"al8xa5meLMFrUKTX5hgUvYU/Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAb\n" +"d03OIozUhfJFfbdT6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLs\n" +"QBqvFAnZ0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm\n" +"2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bbbP6MvPJw\n" +"NQzcmRk13NfIRmPVNnGuV/u3gm3c\n" +"-----END CERTIFICATE-----", + +/* GTS Root R2 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG\n" +"EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RT\n" +"IFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJV\n" +"UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv\n" +"b3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3\n" +"GTXd98GdVarTzTukk3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfg\n" +"LFuv5AS/T3KgGjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/B\n" +"W9BuXvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k\n" +"RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FL\n" +"PD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66H\n" +"jucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8YzodDqs5xoic4DSMPclQsciOzsS\n" +"rZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvG\n" +"eJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9Om\n" +"TN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGF\n" +"PP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAd\n" +"BgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H\n" +"vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM80mJhwQTt\n" +"zuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyCB19m3H0Q/gxhswWV\n" +"7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2uNmSRXbBoGOqKYcl3qJfEycel\n" +"/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMgyALOWr7Z6v2yTcQvG99fevX4i8buMTol\n" +"UVVnjWQye+mew4K6Ki3pHrTgSAai/GevHyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFe\n" +"nTgCR2y59PYjJbigapordwj6xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGo\n" +"o7z7GJa7Um8M7YNRTOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCM\n" +"Elv924SgJPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV\n" +"7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl6WLAYv7Y\n" +"TVWW4tAR+kg0Eeye7QUd5MjWHYbL\n" +"-----END CERTIFICATE-----", + +/* GTS Root R3 */ +"-----BEGIN CERTIFICATE-----\n" +"MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV\n" +"UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv\n" +"b3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEi\n" +"MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg\n" +"UjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/\n" +"JlFyb+Kf1qPKzEUURout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyR\n" +"RK2EE46ajA2ADDL24CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0G\n" +"A1UdDgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7\n" +"VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/JdmZuVDFhOD\n" +"3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X\n" +"-----END CERTIFICATE-----", + +/* GTS Root R4 */ +"-----BEGIN CERTIFICATE-----\n" +"MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV\n" +"UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv\n" +"b3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEi\n" +"MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg\n" +"UjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvV\n" +"YRg1rkDdc/eJkTBa6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHc\n" +"i8nHc8iMai/lxKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0G\n" +"A1UdDgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D\n" +"9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8p/SgguMh\n" +"1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD\n" +"-----END CERTIFICATE-----", + +/* Telia Root CA v2 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQxCzAJBgNV\n" +"BAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9v\n" +"dCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1NTRaMEQxCzAJBgNVBAYTAkZJ\n" +"MRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2\n" +"MjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8\n" +"gm2h/oFlH0wnrI4AuhZ76zBqAMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfi\n" +"KDOlyzG4OiIjNLh9vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW\n" +"/q/5iaq9lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD\n" +"n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT7GPzmX3M\n" +"aRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o6GwLI1GpJQXrSPjd\n" +"scr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPCTEPlcDaMtjNXepUugqD0XBCz\n" +"YYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG\n" +"6RJOHSpXqhC8fF6CfaamyfItufUXJ63RDolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4c\n" +"J7faGND/isgFuvGqHKI3t+ZIpEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1\n" +"K9vBykLVAgMBAAGjYzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1Ud\n" +"DgQWBBRyrOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw\n" +"AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ8rKJhGdE\n" +"r7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi0f6X+J8wfBj5tFJ3\n" +"gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMMA8iZGok1GTzTyVR8qPAs5m4H\n" +"eW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBSSRE/yQQSwxN8PzuKlts8oB4KtItUsiRn\n" +"De+Cy748fdHif64W1lZYudogsYMVoe+KTTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8\n" +"YVMJAygCQMez2P2ccGrGKMOF6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitE\n" +"ZU61/Qrowc15h2Er3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBq\n" +"nUsvWHMtTy3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT\n" +"VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAWysUsWNc8\n" +"e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKArBPuUBQemMc=\n" +"-----END CERTIFICATE-----", + +/* D-TRUST BR Root CA 1 2020 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQswCQYDVQQG\n" +"EwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEJSIFJvb3Qg\n" +"Q0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5NDQ1OVowSDELMAkGA1UEBhMC\n" +"REUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENB\n" +"IDEgMjAyMDB2MBAGByqGSM49AgEGBSuBBAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE\n" +"1HaTJddZO0Flax7mNCq7dPYSzuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJ\n" +"GT11NIXe7WB9xwy0QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n" +"FHOREKv/VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g\n" +"PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3RfY2FfMV8y\n" +"MDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNU\n" +"JTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1c3QlMjBHbWJILEM9REU/Y2Vy\n" +"dGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQDAwNpADBmAjEAlJAtE/rhY/hhY+it\n" +"hXhUkZy4kzg+GkHaQBZTQgjKL47xPoFWwKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SU\n" +"eho/5jbiA1czijDLgsfWFBHVdWNbFJWcHwHP2NVypw87\n" +"-----END CERTIFICATE-----", + +/* D-TRUST EV Root CA 1 2020 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQswCQYDVQQG\n" +"EwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEVWIFJvb3Qg\n" +"Q0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5NTk1OVowSDELMAkGA1UEBhMC\n" +"REUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENB\n" +"IDEgMjAyMDB2MBAGByqGSM49AgEGBSuBBAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL\n" +"46bSj8WeeHsxiamJrSc8ZRCC/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3Vl\n" +"SSowZ/Rk99Yad9rDwpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n" +"FH8QARY3OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g\n" +"PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3RfY2FfMV8y\n" +"MDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNU\n" +"JTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1c3QlMjBHbWJILEM9REU/Y2Vy\n" +"dGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQDAwNpADBmAjEAyjzGKnXCXnViOTYA\n" +"YFqLwZOZzNnbQTs7h5kXO9XMT8oi96CAy/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvA\n" +"KQIFskF3UfN5Wp6OFKBOQtJbgfM0agPnIjhQW+0ZT0MW\n" +"-----END CERTIFICATE-----", + +/* DigiCert TLS ECC P384 Root G5 */ +"-----BEGIN CERTIFICATE-----\n" +"MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQswCQYDVQQG\n" +"EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURpZ2lDZXJ0IFRMUyBF\n" +"Q0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2MDExNDIzNTk1OVowTjELMAkG\n" +"A1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBU\n" +"TFMgRUNDIFAzODQgUm9vdCBHNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOC\n" +"NQfN0MsYndLxf3c1TzvdlHJS7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cK\n" +"PGEQQil8pQgO4CLp0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7n\n" +"LFr6ICISB4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49\n" +"BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQLgGheQaR\n" +"nUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4DXZDjC5Ty3zfDBeW\n" +"UA==\n" +"-----END CERTIFICATE-----", + +/* DigiCert TLS RSA4096 Root G5 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBNMQswCQYD\n" +"VQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRM\n" +"UyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcNNDYwMTE0MjM1OTU5WjBNMQsw\n" +"CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0\n" +"IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz\n" +"0PTJeRGd/fxmgefM1eS87IE+ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLl\n" +"vevxGs3npAOpPxG02C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUT\n" +"mDKdFqgpwgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM\n" +"pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RDnU1/cHAN\n" +"1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6PosMH976pXTayGpxi0\n" +"KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDxZre3zu/O7Oyldcqs4+Fj97ih\n" +"BMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cdLvvyz6b84xQslpghjLSR6Rlgg/IwKwZz\n" +"UNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvXKyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGP\n" +"hvnxd3lLG7SjXi/7RgLQZhNeXoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUM\n" +"CUbW8tDRSHZWOkPLtgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfT\n" +"Jc1paPKvTiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN\n" +"AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxwGXIeo8mH\n" +"/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7HPNtQOa27PShNlnx2\n" +"xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLFO4uJ+DQtpBflF+aZfTCIITfN\n" +"MBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQREtGBzRj7TG5BO6jm5qu5jF49OokYTur\n" +"WGT/u4cnYiWB39yhL/btp/96j1EuMPikAdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vS\n" +"dPD3Rh9GOUrYU9DzLjtxpdRv/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V\n" +"77PnSIMx8IIh47a+p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP\n" +"//fx4ilwMUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF\n" +"qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCKovfepEWF\n" +"JqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+\n" +"-----END CERTIFICATE-----", + +/* Certainly Root R1 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAwPTELMAkG\n" +"A1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2VydGFpbmx5IFJvb3Qg\n" +"UjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9MQswCQYDVQQGEwJVUzESMBAG\n" +"A1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZI\n" +"hvcNAQEBBQADggIPADCCAgoCggIBANA21B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WN\n" +"pIGD2ngwEc/csiu+kr+O5MQTvqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S\n" +"98zTm/mLvg7fMbedaFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM61\n" +"0rCrm/b01C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5\n" +"r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5cBxGX1Hp\n" +"yTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQwHtETrtJ4A5KVpK8\n" +"y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ6uBUcqQRBi8LjMFbvrWhsFNu\n" +"nLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OW\n" +"zaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyHWyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31\n" +"C4SnT8H2TsIonPru4K8H+zMReiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGj\n" +"QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9E\n" +"XME66C6ud0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr\n" +"PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d8VkswTOl\n" +"MIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi1wrykXprOQ4vMMM2\n" +"SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrdrRT90+7iIgXr0PK3aBLXWopB\n" +"GsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9ditaY1BMJH/5n9hN9czulegChB8n3nHpDY\n" +"T3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7\n" +"pw0WwfgHJBu6haEaBQmAupVjyTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9\n" +"Hb4DJqPb1OG7fpYnKx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUz\n" +"VounmdLyyCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n\n" +"wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6OV+KmalB\n" +"WQewLK8=\n" +"-----END CERTIFICATE-----", + +/* Certainly Root E1 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQswCQYDVQQG\n" +"EwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlubHkgUm9vdCBFMTAe\n" +"Fw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJBgNVBAYTAlVTMRIwEAYDVQQK\n" +"EwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5seSBSb290IEUxMHYwEAYHKoZIzj0CAQYF\n" +"K4EEACIDYgAE3m/4fxzf7flHh4axpMCK+IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQY\n" +"UBsQ3tA3SybHGWCA6TS9YBk2QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0Iw\n" +"QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq\n" +"6+2uI1g4hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm\n" +"ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOGBtjOiQRI\n" +"Nzf43TNRnXCve1XYAS59BWQOhriR\n" +"-----END CERTIFICATE-----", + +/* E-Tugra Global Root CA RSA v3 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIF8zCCA9ugAwIBAgIUDU3FzRYilZYIfrgLfxUGNPt5EDQwDQYJKoZIhvcNAQELBQAwgYAx\n" +"CzAJBgNVBAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUtVHVncmEgRUJHIEEu\n" +"Uy4xHTAbBgNVBAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYwJAYDVQQDEx1FLVR1Z3JhIEds\n" +"b2JhbCBSb290IENBIFJTQSB2MzAeFw0yMDAzMTgwOTA3MTdaFw00NTAzMTIwOTA3MTdaMIGA\n" +"MQswCQYDVQQGEwJUUjEPMA0GA1UEBxMGQW5rYXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBB\n" +"LlMuMR0wGwYDVQQLExRFLVR1Z3JhIFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBH\n" +"bG9iYWwgUm9vdCBDQSBSU0EgdjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCi\n" +"ZvCJt3J77gnJY9LTQ91ew6aEOErxjYG7FL1H6EAX8z3DeEVypi6Q3po61CBxyryfHUuXCscx\n" +"uj7X/iWpKo429NEvx7epXTPcMHD4QGxLsqYxYdE0PD0xesevxKenhOGXpOhL9hd87jwH7eKK\n" +"V9y2+/hDJVDqJ4GohryPUkqWOmAalrv9c/SF/YP9f4RtNGx/ardLAQO/rWm31zLZ9Vdq6YaC\n" +"PqVmMbMWPcLzJmAy01IesGykNz709a/r4d+ABs8qQedmCeFLl+d3vSFtKbZnwy1+7dZ5ZdHP\n" +"OrbRsV5WYVB6Ws5OUDGAA5hH5+QYfERaxqSzO8bGwzrwbMOLyKSRBfP12baqBqG3q+Sx6iEU\n" +"XIOk/P+2UNOMEiaZdnDpwA+mdPy70Bt4znKS4iicvObpCdg604nmvi533wEKb5b25Y08TVJ2\n" +"Glbhc34XrD2tbKNSEhhw5oBOM/J+JjKsBY04pOZ2PJ8QaQ5tndLBeSBrW88zjdGUdjXnXVXH\n" +"t6woq0bM5zshtQoK5EpZ3IE1S0SVEgpnpaH/WwAH0sDM+T/8nzPyAPiMbIedBi3x7+PmBvrF\n" +"ZhNb/FAHnnGGstpvdDDPk1Po3CLW3iAfYY2jLqN4MpBs3KwytQXk9TwzDdbgh3cXTJ2w2Amo\n" +"DVf3RIXwyAS+XF1a4xeOVGNpf0l0ZAWMowIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB8G\n" +"A1UdIwQYMBaAFLK0ruYt9ybVqnUtdkvAG1Mh0EjvMB0GA1UdDgQWBBSytK7mLfcm1ap1LXZL\n" +"wBtTIdBI7zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAImocn+M684uGMQQ\n" +"gC0QDP/7FM0E4BQ8Tpr7nym/Ip5XuYJzEmMmtcyQ6dIqKe6cLcwsmb5FJ+Sxce3kOJUxQfJ9\n" +"emN438o2Fi+CiJ+8EUdPdk3ILY7r3y18Tjvarvbj2l0Upq7ohUSdBm6O++96SmotKygY/r+Q\n" +"LHUWnw/qln0F7psTpURs+APQ3SPh/QMSEgj0GDSz4DcLdxEBSL9htLX4GdnLTeqjjO/98Aa1\n" +"bZL0SmFQhO3sSdPkvmjmLuMxC1QLGpLWgti2omU8ZgT5Vdps+9u1FGZNlIM7zR6mK7L+d0CG\n" +"q+ffCsn99t2HVhjYsCxVYJb6CH5SkPVLpi6HfMsg2wY+oF0Dd32iPBMbKaITVaA9FCKvb7jQ\n" +"mhty3QUBjYZgv6Rn7rWlDdF/5horYmbDB7rnoEgcOMPpRfunf/ztAmgayncSd6YAVSgU7NbH\n" +"EqIbZULpkejLPoeJVF3Zr52XnGnnCv8PWniLYypMfUeUP95L6VPQMPHF9p5J3zugkaOj/s1Y\n" +"zOrfr28oO6Bpm4/srK4rVJ2bBLFHIK+WEj5jlB0E5y67hscMmoi/dkfv97ALl2bSRM9gUgfh\n" +"1SxKOidhd8rXj+eHDjD/DLsE4mHDosiXYY60MGo8bcIHX0pzLz/5FooBZu+6kcpSV3uu1OYP\n" +"3Qt6f4ueJiDPO++BcYNZ\n" +"-----END CERTIFICATE-----", + +/* E-Tugra Global Root CA ECC v3 */ +"-----BEGIN CERTIFICATE-----\n" +"MIICpTCCAiqgAwIBAgIUJkYZdzHhT28oNt45UYbm1JeIIsEwCgYIKoZIzj0EAwMwgYAxCzAJ\n" +"BgNVBAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUtVHVncmEgRUJHIEEuUy4x\n" +"HTAbBgNVBAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYwJAYDVQQDEx1FLVR1Z3JhIEdsb2Jh\n" +"bCBSb290IENBIEVDQyB2MzAeFw0yMDAzMTgwOTQ2NThaFw00NTAzMTIwOTQ2NThaMIGAMQsw\n" +"CQYDVQQGEwJUUjEPMA0GA1UEBxMGQW5rYXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMu\n" +"MR0wGwYDVQQLExRFLVR1Z3JhIFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9i\n" +"YWwgUm9vdCBDQSBFQ0MgdjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASOmCm/xxAeJ9urA8wo\n" +"LNheSBkQKczLWYHMjLiSF4mDKpL2w6QdTGLVn9agRtwcvHbB40fQWxPa56WzZkjnIZpKT4YK\n" +"fWzqTTKACrJ6CZtpS5iB4i7sAnCWH/31Rs7K3IKjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYD\n" +"VR0jBBgwFoAU/4Ixcj75xGZsrTie0bBRiKWQzPUwHQYDVR0OBBYEFP+CMXI++cRmbK04ntGw\n" +"UYilkMz1MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNpADBmAjEA5gVYaWHlLcoNy/EZ\n" +"CL3W/VGSGn5jVASQkZo1kTmZ+gepZpO6yGjUij/67W4WAie3AjEA3VoXK3YdZUKWpqxdinlW\n" +"2Iob35reX8dQj7FbcQwm32pAAOwzkSFxvmjkI6TZraE3\n" +"-----END CERTIFICATE-----", + +/* Security Communication RootCA3 */ +"-----BEGIN CERTIFICATE-----\n" +"MIIFfzCCA2egAwIBAgIJAOF8N0D9G/5nMA0GCSqGSIb3DQEBDAUAMF0xCzAJBgNVBAYTAkpQ\n" +"MSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMScwJQYDVQQDEx5TZWN1\n" +"cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTMwHhcNMTYwNjE2MDYxNzE2WhcNMzgwMTE4MDYx\n" +"NzE2WjBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4s\n" +"TFRELjEnMCUGA1UEAxMeU2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EzMIICIjANBgkq\n" +"hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48lySfcw3gl8qUCBWNO0Ot26YQ+TUG5pPDXC7ltz\n" +"kBtnTCHsXzW7OT4rCmDvu20rhvtxosis5FaU+cmvsXLUIKx00rgVrVH+hXShuRD+BYD5UpOz\n" +"QD11EKzAlrenfna84xtSGc4RHwsENPXY9Wk8d/Nk9A2qhd7gCVAEF5aEt8iKvE1y/By7z/MG\n" +"TfmfZPd+pmaGNXHIEYBMwXFAWB6+oHP2/D5Q4eAvJj1+XCO1eXDe+uDRpdYMQXF79+qMHIjH\n" +"7Iv10S9VlkZ8WjtYO/u62C21Jdp6Ts9EriGmnpjKIG58u4iFW/vAEGK78vknR+/RiTlDxN/e\n" +"4UG/VHMgly1s2vPUB6PmudhvrvyMGS7TZ2crldtYXLVqAvO4g160a75BflcJdURQVc1aEWEh\n" +"CmHCqYj9E7wtiS/NYeCVvsq1e+F7NGcLH7YMx3weGVPKp7FKFSBWFHA9K4IsD50VHUeAR/94\n" +"mQ4xr28+j+2GaR57GIgUssL8gjMunEst+3A7caoreyYn8xrC3PsXuKHqy6C0rtOUfnrQq8Ps\n" +"OC0RLoi/1D+tEjtCrI8Cbn3M0V9hvqG8OmpI6iZVIhZdXw3/JzOfGAN0iltSIEdrRU0id4xV\n" +"J/CvHozJgyJUt5rQT9nO/NkuHJYosQLTA70lUhw0Zk8jq/R3gpYd0VcwCBEF/VfR2ccCAwEA\n" +"AaNCMEAwHQYDVR0OBBYEFGQUfPxYchamCik0FW8qy7z8r6irMA4GA1UdDwEB/wQEAwIBBjAP\n" +"BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBDAUAA4ICAQDcAiMI4u8hOscNtybSYpOnpSNy\n" +"ByCCYN8Y11StaSWSntkUz5m5UoHPrmyKO1o5yGwBQ8IibQLwYs1OY0PAFNr0Y/Dq9HHuTofj\n" +"can0yVflLl8cebsjqodEV+m9NU1Bu0soo5iyG9kLFwfl9+qd9XbXv8S2gVj/yP9kaWJ5rW4O\n" +"H3/uHWnlt3Jxs/6lATWUVCvAUm2PVcTJ0rjLyjQIUYWg9by0F1jqClx6vWPGOi//lkkZhOpn\n" +"2ASxYfQAW0q3nHE3GYV5v4GwxxMOdnE+OoAGrgYWp421wsTL/0ClXI2lyTrtcoHKXJg80jQD\n" +"dwj98ClZXSEIx2C/pHF7uNkegr4Jr2VvKKu/S7XuPghHJ6APbw+LP6yVGPO5DtxnVW5inkYO\n" +"0QR4ynKudtml+LLfiAlhi+8kTtFZP1rUPcmTPCtk9YENFpb3ksP+MW/oKjJ0DvRMmEoYDjBU\n" +"1cXrvMUVnuiZIesnKwkK2/HmcBhWuwzkvvnoEKQTkrgc4NtnHVMDpCKn3F2SEDzq//wbEBrD\n" +"2NCcnWXL0CsnMQMeNuE9dnUM/0Umud1RvCPHX9jYhxBAEg09ODfnRDwYwFMJZI//1ZqmfHAu\n" +"c1Uh6N//g7kdPjIe1qZ9LPFm6Vwdp6POXiUyK+OVrCoHzrQoeIY8LaadTdJ0MN1kURXbg4NR\n" +"16/9M51NZg==\n" +"-----END CERTIFICATE-----", + +/* Security Communication ECC RootCA1 */ +"-----BEGIN CERTIFICATE-----\n" +"MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYTAkpQMSUw\n" +"IwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYDVQQDEyJTZWN1cml0\n" +"eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYxNjA1MTUyOFoXDTM4MDExODA1\n" +"MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08u\n" +"LExURC4xKzApBgNVBAMTIlNlY3VyaXR5IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQ\n" +"BgcqhkjOPQIBBgUrgQQAIgNiAASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPp\n" +"R27KkBLIE+CnnfdldB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8Ekdt\n" +"XP9JTxpKULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E\n" +"BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu9zuxNuie\n" +"9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0Obe0YottT6SXbVQjg\n" +"UMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k=\n" +"-----END CERTIFICATE-----", #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS diff --git a/src/node_serdes.cc b/src/node_serdes.cc index f6f0034bc24..45a16d9de43 100644 --- a/src/node_serdes.cc +++ b/src/node_serdes.cc @@ -455,53 +455,62 @@ void Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); + Local ser = - env->NewFunctionTemplate(SerializerContext::New); + NewFunctionTemplate(isolate, SerializerContext::New); ser->InstanceTemplate()->SetInternalFieldCount( SerializerContext::kInternalFieldCount); ser->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(ser, "writeHeader", SerializerContext::WriteHeader); - env->SetProtoMethod(ser, "writeValue", SerializerContext::WriteValue); - env->SetProtoMethod(ser, "releaseBuffer", SerializerContext::ReleaseBuffer); - env->SetProtoMethod(ser, - "transferArrayBuffer", - SerializerContext::TransferArrayBuffer); - env->SetProtoMethod(ser, "writeUint32", SerializerContext::WriteUint32); - env->SetProtoMethod(ser, "writeUint64", SerializerContext::WriteUint64); - env->SetProtoMethod(ser, "writeDouble", SerializerContext::WriteDouble); - env->SetProtoMethod(ser, "writeRawBytes", SerializerContext::WriteRawBytes); - env->SetProtoMethod(ser, - "_setTreatArrayBufferViewsAsHostObjects", - SerializerContext::SetTreatArrayBufferViewsAsHostObjects); + SetProtoMethod(isolate, ser, "writeHeader", SerializerContext::WriteHeader); + SetProtoMethod(isolate, ser, "writeValue", SerializerContext::WriteValue); + SetProtoMethod( + isolate, ser, "releaseBuffer", SerializerContext::ReleaseBuffer); + SetProtoMethod(isolate, + ser, + "transferArrayBuffer", + SerializerContext::TransferArrayBuffer); + SetProtoMethod(isolate, ser, "writeUint32", SerializerContext::WriteUint32); + SetProtoMethod(isolate, ser, "writeUint64", SerializerContext::WriteUint64); + SetProtoMethod(isolate, ser, "writeDouble", SerializerContext::WriteDouble); + SetProtoMethod( + isolate, ser, "writeRawBytes", SerializerContext::WriteRawBytes); + SetProtoMethod(isolate, + ser, + "_setTreatArrayBufferViewsAsHostObjects", + SerializerContext::SetTreatArrayBufferViewsAsHostObjects); ser->ReadOnlyPrototype(); - env->SetConstructorFunction(target, "Serializer", ser); + SetConstructorFunction(context, target, "Serializer", ser); Local des = - env->NewFunctionTemplate(DeserializerContext::New); + NewFunctionTemplate(isolate, DeserializerContext::New); des->InstanceTemplate()->SetInternalFieldCount( DeserializerContext::kInternalFieldCount); des->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(des, "readHeader", DeserializerContext::ReadHeader); - env->SetProtoMethod(des, "readValue", DeserializerContext::ReadValue); - env->SetProtoMethod(des, - "getWireFormatVersion", - DeserializerContext::GetWireFormatVersion); - env->SetProtoMethod(des, - "transferArrayBuffer", - DeserializerContext::TransferArrayBuffer); - env->SetProtoMethod(des, "readUint32", DeserializerContext::ReadUint32); - env->SetProtoMethod(des, "readUint64", DeserializerContext::ReadUint64); - env->SetProtoMethod(des, "readDouble", DeserializerContext::ReadDouble); - env->SetProtoMethod(des, "_readRawBytes", DeserializerContext::ReadRawBytes); + SetProtoMethod(isolate, des, "readHeader", DeserializerContext::ReadHeader); + SetProtoMethod(isolate, des, "readValue", DeserializerContext::ReadValue); + SetProtoMethod(isolate, + des, + "getWireFormatVersion", + DeserializerContext::GetWireFormatVersion); + SetProtoMethod(isolate, + des, + "transferArrayBuffer", + DeserializerContext::TransferArrayBuffer); + SetProtoMethod(isolate, des, "readUint32", DeserializerContext::ReadUint32); + SetProtoMethod(isolate, des, "readUint64", DeserializerContext::ReadUint64); + SetProtoMethod(isolate, des, "readDouble", DeserializerContext::ReadDouble); + SetProtoMethod( + isolate, des, "_readRawBytes", DeserializerContext::ReadRawBytes); des->SetLength(1); des->ReadOnlyPrototype(); - env->SetConstructorFunction(target, "Deserializer", des); + SetConstructorFunction(context, target, "Deserializer", des); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/node_snapshot_builder.h b/src/node_snapshot_builder.h new file mode 100644 index 00000000000..c5d2ee2a4bc --- /dev/null +++ b/src/node_snapshot_builder.h @@ -0,0 +1,43 @@ + +#ifndef SRC_NODE_SNAPSHOT_BUILDER_H_ +#define SRC_NODE_SNAPSHOT_BUILDER_H_ + +#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS + +#include +#include "node_mutex.h" +#include "v8.h" + +namespace node { + +class ExternalReferenceRegistry; +struct SnapshotData; + +class NODE_EXTERN_PRIVATE SnapshotBuilder { + public: + static std::string Generate(const std::vector args, + const std::vector exec_args); + + // Generate the snapshot into out. + static void Generate(SnapshotData* out, + const std::vector args, + const std::vector exec_args); + + // If nullptr is returned, the binary is not built with embedded + // snapshot. + static const SnapshotData* GetEmbeddedSnapshotData(); + static void InitializeIsolateParams(const SnapshotData* data, + v8::Isolate::CreateParams* params); + + private: + // Used to synchronize access to the snapshot data + static Mutex snapshot_data_mutex_; + static const std::vector& CollectExternalReferences(); + + static std::unique_ptr registry_; +}; +} // namespace node + +#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS + +#endif // SRC_NODE_SNAPSHOT_BUILDER_H_ diff --git a/src/node_snapshot_stub.cc b/src/node_snapshot_stub.cc index 7c13d4e8c60..664f878c067 100644 --- a/src/node_snapshot_stub.cc +++ b/src/node_snapshot_stub.cc @@ -2,19 +2,11 @@ // NODE_WANT_INTERNALS, so we define it here manually. #define NODE_WANT_INTERNALS 1 -#include "node_main_instance.h" +#include "node_snapshot_builder.h" namespace node { -v8::StartupData* NodeMainInstance::GetEmbeddedSnapshotBlob() { - return nullptr; -} - -const std::vector* NodeMainInstance::GetIsolateDataIndices() { - return nullptr; -} - -const EnvSerializeInfo* NodeMainInstance::GetEnvSerializeInfo() { +const SnapshotData* SnapshotBuilder::GetEmbeddedSnapshotData() { return nullptr; } diff --git a/src/node_snapshotable.cc b/src/node_snapshotable.cc index 6f45ce53790..44f359d849d 100644 --- a/src/node_snapshotable.cc +++ b/src/node_snapshotable.cc @@ -12,18 +12,29 @@ #include "node_internals.h" #include "node_main_instance.h" #include "node_process.h" +#include "node_snapshot_builder.h" #include "node_v8.h" #include "node_v8_platform-inl.h" +#if HAVE_INSPECTOR +#include "inspector/worker_inspector.h" // ParentInspectorHandle +#endif + namespace node { using v8::Context; +using v8::Function; +using v8::FunctionCallbackInfo; using v8::HandleScope; using v8::Isolate; using v8::Local; +using v8::MaybeLocal; using v8::Object; +using v8::ScriptCompiler; +using v8::ScriptOrigin; using v8::SnapshotCreator; using v8::StartupData; +using v8::String; using v8::TryCatch; using v8::Value; @@ -39,7 +50,7 @@ std::string FormatBlob(SnapshotData* data) { ss << R"(#include #include "env.h" -#include "node_main_instance.h" +#include "node_snapshot_builder.h" #include "v8.h" // This file is generated by tools/snapshot. Do not edit. @@ -53,35 +64,46 @@ static const char blob_data[] = { static const int blob_size = )" << data->blob.raw_size << R"(; -static v8::StartupData blob = { blob_data, blob_size }; -)"; - ss << R"(v8::StartupData* NodeMainInstance::GetEmbeddedSnapshotBlob() { - return &blob; -} - -static const std::vector isolate_data_indices { +SnapshotData snapshot_data { + // -- blob begins -- + { blob_data, blob_size }, + // -- blob ends -- + // -- isolate_data_indices begins -- + { )"; WriteVector(&ss, data->isolate_data_indices.data(), data->isolate_data_indices.size()); - ss << R"(}; + ss << R"(}, + // -- isolate_data_indices ends -- + // -- env_info begins -- +)" << data->env_info + << R"( + // -- env_info ends -- +}; + +const SnapshotData* SnapshotBuilder::GetEmbeddedSnapshotData() { + Mutex::ScopedLock lock(snapshot_data_mutex_); + return &snapshot_data; +} +} // namespace node +)"; -const std::vector* NodeMainInstance::GetIsolateDataIndices() { - return &isolate_data_indices; + return ss.str(); } -static const EnvSerializeInfo env_info )" - << data->env_info << R"(; +Mutex SnapshotBuilder::snapshot_data_mutex_; -const EnvSerializeInfo* NodeMainInstance::GetEnvSerializeInfo() { - return &env_info; +const std::vector& SnapshotBuilder::CollectExternalReferences() { + static auto registry = std::make_unique(); + return registry->external_references(); } -} // namespace node -)"; - - return ss.str(); +void SnapshotBuilder::InitializeIsolateParams(const SnapshotData* data, + Isolate::CreateParams* params) { + params->external_references = CollectExternalReferences().data(); + params->snapshot_blob = const_cast(&(data->blob)); } void SnapshotBuilder::Generate(SnapshotData* out, @@ -97,7 +119,7 @@ void SnapshotBuilder::Generate(SnapshotData* out, { const std::vector& external_references = - NodeMainInstance::CollectExternalReferences(); + CollectExternalReferences(); SnapshotCreator creator(isolate, external_references.data()); Environment* env; { @@ -133,14 +155,45 @@ void SnapshotBuilder::Generate(SnapshotData* out, nullptr, node::EnvironmentFlags::kDefaultFlags, {}); + // Run scripts in lib/internal/bootstrap/ { TryCatch bootstrapCatch(isolate); - v8::MaybeLocal result = env->RunBootstrapping(); + MaybeLocal result = env->RunBootstrapping(); + if (bootstrapCatch.HasCaught()) { + PrintCaughtException(isolate, context, bootstrapCatch); + } + result.ToLocalChecked(); + } + + // If --build-snapshot is true, lib/internal/main/mksnapshot.js would be + // loaded via LoadEnvironment() to execute process.argv[1] as the entry + // point (we currently only support this kind of entry point, but we + // could also explore snapshotting other kinds of execution modes + // in the future). + if (per_process::cli_options->build_snapshot) { +#if HAVE_INSPECTOR + env->InitializeInspector({}); +#endif + TryCatch bootstrapCatch(isolate); + // TODO(joyeecheung): we could use the result for something special, + // like setting up initializers that should be invoked at snapshot + // dehydration. + MaybeLocal result = + LoadEnvironment(env, StartExecutionCallback{}); if (bootstrapCatch.HasCaught()) { PrintCaughtException(isolate, context, bootstrapCatch); } result.ToLocalChecked(); + // FIXME(joyeecheung): right now running the loop in the snapshot + // builder seems to introduces inconsistencies in JS land that need to + // be synchronized again after snapshot restoration. + int exit_code = SpinEventLoop(env).FromMaybe(1); + CHECK_EQ(exit_code, 0); + if (bootstrapCatch.HasCaught()) { + PrintCaughtException(isolate, context, bootstrapCatch); + abort(); + } } if (per_process::enabled_debug_list.enabled(DebugCategory::MKSNAPSHOT)) { @@ -237,10 +290,14 @@ void DeserializeNodeInternalFields(Local holder, return; } + DCHECK_EQ(index, BaseObject::kEmbedderType); + Environment* env_ptr = static_cast(env); const InternalFieldInfo* info = reinterpret_cast(payload.data); - + // TODO(joyeecheung): we can add a constant kNodeEmbedderId to the + // beginning of every InternalFieldInfo to ensure that we don't + // step on payloads that were not serialized by Node.js. switch (info->type) { #define V(PropertyName, NativeTypeName) \ case EmbedderObjectType::k_##PropertyName: { \ @@ -261,22 +318,44 @@ void DeserializeNodeInternalFields(Local holder, StartupData SerializeNodeContextInternalFields(Local holder, int index, void* env) { + // We only do one serialization for the kEmbedderType slot, the result + // contains everything necessary for deserializing the entire object, + // including the fields whose index is bigger than kEmbedderType + // (most importantly, BaseObject::kSlot). + // For Node.js this design is enough for all the native binding that are + // serializable. + if (index != BaseObject::kEmbedderType) { + return StartupData{nullptr, 0}; + } + + void* type_ptr = holder->GetAlignedPointerFromInternalField(index); + if (type_ptr == nullptr) { + return StartupData{nullptr, 0}; + } + + uint16_t type = *(static_cast(type_ptr)); + per_process::Debug(DebugCategory::MKSNAPSHOT, "type = 0x%x\n", type); + if (type != kNodeEmbedderId) { + return StartupData{nullptr, 0}; + } + per_process::Debug(DebugCategory::MKSNAPSHOT, "Serialize internal field, index=%d, holder=%p\n", static_cast(index), *holder); - void* ptr = holder->GetAlignedPointerFromInternalField(BaseObject::kSlot); - if (ptr == nullptr) { - return StartupData{nullptr, 0}; - } - DCHECK(static_cast(ptr)->is_snapshotable()); - SnapshotableObject* obj = static_cast(ptr); + void* binding_ptr = + holder->GetAlignedPointerFromInternalField(BaseObject::kSlot); + per_process::Debug(DebugCategory::MKSNAPSHOT, "binding = %p\n", binding_ptr); + DCHECK(static_cast(binding_ptr)->is_snapshotable()); + SnapshotableObject* obj = static_cast(binding_ptr); + per_process::Debug(DebugCategory::MKSNAPSHOT, "Object %p is %s, ", *holder, obj->GetTypeNameChars()); InternalFieldInfo* info = obj->Serialize(index); + per_process::Debug(DebugCategory::MKSNAPSHOT, "payload size=%d\n", static_cast(info->length)); @@ -291,8 +370,9 @@ void SerializeBindingData(Environment* env, env->ForEachBindingData([&](FastStringKey key, BaseObjectPtr binding) { per_process::Debug(DebugCategory::MKSNAPSHOT, - "Serialize binding %i, %p, type=%s\n", + "Serialize binding %i (%p), object=%p, type=%s\n", static_cast(i), + binding.get(), *(binding->object()), key.c_str()); @@ -312,4 +392,81 @@ void SerializeBindingData(Environment* env, }); } +namespace mksnapshot { + +void CompileSerializeMain(const FunctionCallbackInfo& args) { + CHECK(args[0]->IsString()); + Local filename = args[0].As(); + Local source = args[1].As(); + Isolate* isolate = args.GetIsolate(); + Local context = isolate->GetCurrentContext(); + ScriptOrigin origin(isolate, filename, 0, 0, true); + // TODO(joyeecheung): do we need all of these? Maybe we would want a less + // internal version of them. + std::vector> parameters = { + FIXED_ONE_BYTE_STRING(isolate, "require"), + FIXED_ONE_BYTE_STRING(isolate, "__filename"), + FIXED_ONE_BYTE_STRING(isolate, "__dirname"), + }; + ScriptCompiler::Source script_source(source, origin); + Local fn; + if (ScriptCompiler::CompileFunctionInContext(context, + &script_source, + parameters.size(), + parameters.data(), + 0, + nullptr, + ScriptCompiler::kEagerCompile) + .ToLocal(&fn)) { + args.GetReturnValue().Set(fn); + } +} + +void SetSerializeCallback(const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + CHECK(env->snapshot_serialize_callback().IsEmpty()); + CHECK(args[0]->IsFunction()); + env->set_snapshot_serialize_callback(args[0].As()); +} + +void SetDeserializeCallback(const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + CHECK(env->snapshot_deserialize_callback().IsEmpty()); + CHECK(args[0]->IsFunction()); + env->set_snapshot_deserialize_callback(args[0].As()); +} + +void SetDeserializeMainFunction(const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + CHECK(env->snapshot_deserialize_main().IsEmpty()); + CHECK(args[0]->IsFunction()); + env->set_snapshot_deserialize_main(args[0].As()); +} + +void Initialize(Local target, + Local unused, + Local context, + void* priv) { + SetMethod(context, target, "compileSerializeMain", CompileSerializeMain); + SetMethod(context, target, "markBootstrapComplete", MarkBootstrapComplete); + SetMethod(context, target, "setSerializeCallback", SetSerializeCallback); + SetMethod(context, target, "setDeserializeCallback", SetDeserializeCallback); + SetMethod(context, + target, + "setDeserializeMainFunction", + SetDeserializeMainFunction); +} + +void RegisterExternalReferences(ExternalReferenceRegistry* registry) { + registry->Register(CompileSerializeMain); + registry->Register(MarkBootstrapComplete); + registry->Register(SetSerializeCallback); + registry->Register(SetDeserializeCallback); + registry->Register(SetDeserializeMainFunction); +} +} // namespace mksnapshot } // namespace node + +NODE_MODULE_CONTEXT_AWARE_INTERNAL(mksnapshot, node::mksnapshot::Initialize) +NODE_MODULE_EXTERNAL_REFERENCE(mksnapshot, + node::mksnapshot::RegisterExternalReferences) diff --git a/src/node_snapshotable.h b/src/node_snapshotable.h index 1ccd9a93226..ec560b6d4fc 100644 --- a/src/node_snapshotable.h +++ b/src/node_snapshotable.h @@ -12,6 +12,7 @@ namespace node { class Environment; struct EnvSerializeInfo; struct SnapshotData; +class ExternalReferenceRegistry; #define SERIALIZABLE_OBJECT_TYPES(V) \ V(fs_binding_data, fs::BindingData) \ @@ -29,11 +30,6 @@ enum class EmbedderObjectType : uint8_t { // When serializing an embedder object, we'll serialize the native states // into a chunk that can be mapped into a subclass of InternalFieldInfo, // and pass it into the V8 callback as the payload of StartupData. -// TODO(joyeecheung): the classification of types seem to be wrong. -// We'd need a type for each field of each class of native object. -// Maybe it's fine - we'll just use the type to invoke BaseObject constructors -// and specify that the BaseObject has only one field for us to serialize. -// And for non-BaseObject embedder objects, we'll use field-wise types. // The memory chunk looks like this: // // [ type ] - EmbedderObjectType (a uint8_t) @@ -122,15 +118,6 @@ void SerializeBindingData(Environment* env, EnvSerializeInfo* info); bool IsSnapshotableType(FastStringKey key); - -class SnapshotBuilder { - public: - static std::string Generate(const std::vector args, - const std::vector exec_args); - static void Generate(SnapshotData* out, - const std::vector args, - const std::vector exec_args); -}; } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS diff --git a/src/node_sockaddr-inl.h b/src/node_sockaddr-inl.h index 0b2361595f3..e16a09b04c7 100644 --- a/src/node_sockaddr-inl.h +++ b/src/node_sockaddr-inl.h @@ -157,7 +157,7 @@ void SocketAddress::Update(const sockaddr* data, size_t len) { memcpy(&address_, data, len); } -v8::Local SocketAddress::ToJS( +v8::MaybeLocal SocketAddress::ToJS( Environment* env, v8::Local info) const { return AddressToJS(env, data(), info); diff --git a/src/node_sockaddr.cc b/src/node_sockaddr.cc index 09a74f30292..331af1d9dba 100644 --- a/src/node_sockaddr.cc +++ b/src/node_sockaddr.cc @@ -17,6 +17,7 @@ using v8::Context; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::Int32; +using v8::Isolate; using v8::Local; using v8::MaybeLocal; using v8::Object; @@ -215,7 +216,7 @@ bool in_network_ipv4( const SocketAddress& ip, const SocketAddress& net, int prefix) { - uint32_t mask = ((1 << prefix) - 1) << (32 - prefix); + uint32_t mask = ((1ull << prefix) - 1) << (32 - prefix); const sockaddr_in* ip_in = reinterpret_cast(ip.data()); @@ -293,7 +294,7 @@ bool in_network_ipv6_ipv4( if (prefix == 32) return compare_ipv4_ipv6(net, ip) == SocketAddress::CompareResult::SAME; - uint32_t m = ((1 << prefix) - 1) << (32 - prefix); + uint32_t m = ((1ull << prefix) - 1) << (32 - prefix); const sockaddr_in6* ip_in = reinterpret_cast(ip.data()); @@ -697,15 +698,16 @@ Local SocketAddressBlockListWrap::GetConstructorTemplate( Environment* env) { Local tmpl = env->blocklist_constructor_template(); if (tmpl.IsEmpty()) { - tmpl = env->NewFunctionTemplate(SocketAddressBlockListWrap::New); + Isolate* isolate = env->isolate(); + tmpl = NewFunctionTemplate(isolate, SocketAddressBlockListWrap::New); tmpl->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "BlockList")); tmpl->Inherit(BaseObject::GetConstructorTemplate(env)); tmpl->InstanceTemplate()->SetInternalFieldCount(kInternalFieldCount); - env->SetProtoMethod(tmpl, "addAddress", AddAddress); - env->SetProtoMethod(tmpl, "addRange", AddRange); - env->SetProtoMethod(tmpl, "addSubnet", AddSubnet); - env->SetProtoMethod(tmpl, "check", Check); - env->SetProtoMethod(tmpl, "getRules", GetRules); + SetProtoMethod(isolate, tmpl, "addAddress", AddAddress); + SetProtoMethod(isolate, tmpl, "addRange", AddRange); + SetProtoMethod(isolate, tmpl, "addSubnet", AddSubnet); + SetProtoMethod(isolate, tmpl, "check", Check); + SetProtoMethod(isolate, tmpl, "getRules", GetRules); env->set_blocklist_constructor_template(tmpl); } return tmpl; @@ -718,11 +720,11 @@ void SocketAddressBlockListWrap::Initialize( void* priv) { Environment* env = Environment::GetCurrent(context); - env->SetConstructorFunction( - target, - "BlockList", - GetConstructorTemplate(env), - Environment::SetConstructorFunctionFlag::NONE); + SetConstructorFunction(context, + target, + "BlockList", + GetConstructorTemplate(env), + SetConstructorFunctionFlag::NONE); SocketAddressBase::Initialize(env, target); @@ -750,25 +752,26 @@ Local SocketAddressBase::GetConstructorTemplate( Environment* env) { Local tmpl = env->socketaddress_constructor_template(); if (tmpl.IsEmpty()) { - tmpl = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + tmpl = NewFunctionTemplate(isolate, New); tmpl->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "SocketAddress")); tmpl->InstanceTemplate()->SetInternalFieldCount( SocketAddressBase::kInternalFieldCount); tmpl->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(tmpl, "detail", Detail); - env->SetProtoMethod(tmpl, "legacyDetail", LegacyDetail); - env->SetProtoMethodNoSideEffect(tmpl, "flowlabel", GetFlowLabel); + SetProtoMethod(isolate, tmpl, "detail", Detail); + SetProtoMethod(isolate, tmpl, "legacyDetail", LegacyDetail); + SetProtoMethodNoSideEffect(isolate, tmpl, "flowlabel", GetFlowLabel); env->set_socketaddress_constructor_template(tmpl); } return tmpl; } void SocketAddressBase::Initialize(Environment* env, Local target) { - env->SetConstructorFunction( - target, - "SocketAddress", - GetConstructorTemplate(env), - Environment::SetConstructorFunctionFlag::NONE); + SetConstructorFunction(env->context(), + target, + "SocketAddress", + GetConstructorTemplate(env), + SetConstructorFunctionFlag::NONE); } BaseObjectPtr SocketAddressBase::Create( @@ -847,7 +850,9 @@ void SocketAddressBase::LegacyDetail(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); SocketAddressBase* base; ASSIGN_OR_RETURN_UNWRAP(&base, args.Holder()); - args.GetReturnValue().Set(base->address_->ToJS(env)); + Local address; + if (!base->address_->ToJS(env).ToLocal(&address)) return; + args.GetReturnValue().Set(address); } SocketAddressBase::SocketAddressBase( diff --git a/src/node_sockaddr.h b/src/node_sockaddr.h index 4cc5291ceef..0a4633b9a33 100644 --- a/src/node_sockaddr.h +++ b/src/node_sockaddr.h @@ -131,7 +131,7 @@ class SocketAddress : public MemoryRetainer { static SocketAddress FromPeerName(const uv_udp_t& handle); static SocketAddress FromPeerName(const uv_tcp_t& handle); - inline v8::Local ToJS( + inline v8::MaybeLocal ToJS( Environment* env, v8::Local obj = v8::Local()) const; diff --git a/src/node_stat_watcher.cc b/src/node_stat_watcher.cc index b9f7903a2fd..de8c099ca58 100644 --- a/src/node_stat_watcher.cc +++ b/src/node_stat_watcher.cc @@ -37,23 +37,24 @@ using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::Integer; +using v8::Isolate; using v8::Local; using v8::Object; using v8::Uint32; using v8::Value; - void StatWatcher::Initialize(Environment* env, Local target) { + Isolate* isolate = env->isolate(); HandleScope scope(env->isolate()); - Local t = env->NewFunctionTemplate(StatWatcher::New); + Local t = NewFunctionTemplate(isolate, StatWatcher::New); t->InstanceTemplate()->SetInternalFieldCount( StatWatcher::kInternalFieldCount); t->Inherit(HandleWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "start", StatWatcher::Start); + SetProtoMethod(isolate, t, "start", StatWatcher::Start); - env->SetConstructorFunction(target, "StatWatcher", t); + SetConstructorFunction(env->context(), target, "StatWatcher", t); } void StatWatcher::RegisterExternalReferences( diff --git a/src/node_task_queue.cc b/src/node_task_queue.cc index 9bbdb318021..2e62a072ee4 100644 --- a/src/node_task_queue.cc +++ b/src/node_task_queue.cc @@ -196,9 +196,9 @@ static void Initialize(Local target, Environment* env = Environment::GetCurrent(context); Isolate* isolate = env->isolate(); - env->SetMethod(target, "enqueueMicrotask", EnqueueMicrotask); - env->SetMethod(target, "setTickCallback", SetTickCallback); - env->SetMethod(target, "runMicrotasks", RunMicrotasks); + SetMethod(context, target, "enqueueMicrotask", EnqueueMicrotask); + SetMethod(context, target, "setTickCallback", SetTickCallback); + SetMethod(context, target, "runMicrotasks", RunMicrotasks); target->Set(env->context(), FIXED_ONE_BYTE_STRING(isolate, "tickInfo"), env->tick_info()->fields().GetJSArray()).Check(); @@ -212,9 +212,8 @@ static void Initialize(Local target, target->Set(env->context(), FIXED_ONE_BYTE_STRING(isolate, "promiseRejectEvents"), events).Check(); - env->SetMethod(target, - "setPromiseRejectCallback", - SetPromiseRejectCallback); + SetMethod( + context, target, "setPromiseRejectCallback", SetPromiseRejectCallback); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/node_trace_events.cc b/src/node_trace_events.cc index af60aff4ab7..fd277b997de 100644 --- a/src/node_trace_events.cc +++ b/src/node_trace_events.cc @@ -20,6 +20,7 @@ using v8::Context; using v8::Function; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; +using v8::Isolate; using v8::Local; using v8::NewStringType; using v8::Object; @@ -124,21 +125,23 @@ void NodeCategorySet::Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - env->SetMethod(target, "getEnabledCategories", GetEnabledCategories); - env->SetMethod( - target, "setTraceCategoryStateUpdateHandler", - SetTraceCategoryStateUpdateHandler); + SetMethod(context, target, "getEnabledCategories", GetEnabledCategories); + SetMethod(context, + target, + "setTraceCategoryStateUpdateHandler", + SetTraceCategoryStateUpdateHandler); Local category_set = - env->NewFunctionTemplate(NodeCategorySet::New); + NewFunctionTemplate(isolate, NodeCategorySet::New); category_set->InstanceTemplate()->SetInternalFieldCount( NodeCategorySet::kInternalFieldCount); category_set->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(category_set, "enable", NodeCategorySet::Enable); - env->SetProtoMethod(category_set, "disable", NodeCategorySet::Disable); + SetProtoMethod(isolate, category_set, "enable", NodeCategorySet::Enable); + SetProtoMethod(isolate, category_set, "disable", NodeCategorySet::Disable); - env->SetConstructorFunction(target, "CategorySet", category_set); + SetConstructorFunction(context, target, "CategorySet", category_set); Local isTraceCategoryEnabled = FIXED_ONE_BYTE_STRING(env->isolate(), "isTraceCategoryEnabled"); diff --git a/src/node_types.cc b/src/node_types.cc index 1889d8c3041..87550a1428b 100644 --- a/src/node_types.cc +++ b/src/node_types.cc @@ -65,16 +65,12 @@ void InitializeTypes(Local target, Local unused, Local context, void* priv) { - Environment* env = Environment::GetCurrent(context); - -#define V(type) env->SetMethodNoSideEffect(target, \ - "is" #type, \ - Is##type); +#define V(type) SetMethodNoSideEffect(context, target, "is" #type, Is##type); VALUE_METHOD_MAP(V) #undef V - env->SetMethodNoSideEffect(target, "isAnyArrayBuffer", IsAnyArrayBuffer); - env->SetMethodNoSideEffect(target, "isBoxedPrimitive", IsBoxedPrimitive); + SetMethodNoSideEffect(context, target, "isAnyArrayBuffer", IsAnyArrayBuffer); + SetMethodNoSideEffect(context, target, "isBoxedPrimitive", IsBoxedPrimitive); } } // anonymous namespace diff --git a/src/node_url.cc b/src/node_url.cc index 9f22fa06980..ecc7cee6a39 100644 --- a/src/node_url.cc +++ b/src/node_url.cc @@ -5,6 +5,7 @@ #include "node_i18n.h" #include "util-inl.h" +#include #include #include #include @@ -58,7 +59,7 @@ class URLHost { public: ~URLHost(); - void ParseIPv4Host(const char* input, size_t length, bool* is_ipv4); + void ParseIPv4Host(const char* input, size_t length); void ParseIPv6Host(const char* input, size_t length); void ParseOpaqueHost(const char* input, size_t length); void ParseHost(const char* input, @@ -165,6 +166,9 @@ enum url_cb_args { // https://infra.spec.whatwg.org/#ascii-tab-or-newline CHAR_TEST(8, IsASCIITabOrNewline, (ch == '\t' || ch == '\n' || ch == '\r')) +// https://infra.spec.whatwg.org/#c0-control +CHAR_TEST(8, IsC0Control, (ch >= '\0' && ch <= '\x1f')) + // https://infra.spec.whatwg.org/#c0-control-or-space CHAR_TEST(8, IsC0ControlOrSpace, (ch >= '\0' && ch <= ' ')) @@ -190,12 +194,18 @@ T ASCIILowercase(T ch) { } // https://url.spec.whatwg.org/#forbidden-host-code-point -CHAR_TEST(8, IsForbiddenHostCodePoint, - ch == '\0' || ch == '\t' || ch == '\n' || ch == '\r' || - ch == ' ' || ch == '#' || ch == '%' || ch == '/' || - ch == ':' || ch == '?' || ch == '@' || ch == '[' || - ch == '<' || ch == '>' || ch == '\\' || ch == ']' || - ch == '^' || ch == '|') +CHAR_TEST(8, + IsForbiddenHostCodePoint, + ch == '\0' || ch == '\t' || ch == '\n' || ch == '\r' || ch == ' ' || + ch == '#' || ch == '/' || ch == ':' || ch == '?' || ch == '@' || + ch == '[' || ch == '<' || ch == '>' || ch == '\\' || ch == ']' || + ch == '^' || ch == '|') + +// https://url.spec.whatwg.org/#forbidden-domain-code-point +CHAR_TEST(8, + IsForbiddenDomainCodePoint, + IsForbiddenHostCodePoint(ch) || IsC0Control(ch) || ch == '%' || + ch == '\x7f') // https://url.spec.whatwg.org/#windows-drive-letter TWO_CHAR_STRING_TEST(8, IsWindowsDriveLetter, @@ -359,18 +369,21 @@ void URLHost::ParseIPv6Host(const char* input, size_t length) { type_ = HostType::H_IPV6; } -int64_t ParseNumber(const char* start, const char* end) { +// https://url.spec.whatwg.org/#ipv4-number-parser +int64_t ParseIPv4Number(const char* start, const char* end) { + if (end - start == 0) return -1; + unsigned R = 10; if (end - start >= 2 && start[0] == '0' && (start[1] | 0x20) == 'x') { start += 2; R = 16; - } - if (end - start == 0) { - return 0; - } else if (R == 10 && end - start > 1 && start[0] == '0') { + } else if (end - start >= 2 && start[0] == '0') { start++; R = 8; } + + if (end - start == 0) return 0; + const char* p = start; while (p < end) { @@ -394,9 +407,33 @@ int64_t ParseNumber(const char* start, const char* end) { return strtoll(start, nullptr, R); } -void URLHost::ParseIPv4Host(const char* input, size_t length, bool* is_ipv4) { +// https://url.spec.whatwg.org/#ends-in-a-number-checker +bool EndsInANumber(const std::string& input) { + std::vector parts = SplitString(input, '.', false); + + if (parts.empty()) return false; + + if (parts.back().empty()) { + if (parts.size() == 1) return false; + parts.pop_back(); + } + + const std::string& last = parts.back(); + + // If last is non-empty and contains only ASCII digits, then return true + if (!last.empty() && std::all_of(last.begin(), last.end(), ::isdigit)) { + return true; + } + + const char* last_str = last.c_str(); + int64_t num = ParseIPv4Number(last_str, last_str + last.size()); + if (num >= 0) return true; + + return false; +} + +void URLHost::ParseIPv4Host(const char* input, size_t length) { CHECK_EQ(type_, HostType::H_FAILED); - *is_ipv4 = false; const char* pointer = input; const char* mark = input; const char* end = pointer + length; @@ -415,7 +452,7 @@ void URLHost::ParseIPv4Host(const char* input, size_t length, bool* is_ipv4) { return; if (pointer == mark) return; - int64_t n = ParseNumber(mark, pointer); + int64_t n = ParseIPv4Number(mark, pointer); if (n < 0) return; @@ -430,7 +467,6 @@ void URLHost::ParseIPv4Host(const char* input, size_t length, bool* is_ipv4) { pointer++; } CHECK_GT(parts, 0); - *is_ipv4 = true; // If any but the last item in numbers is greater than 255, return failure. // If the last item in numbers is greater than or equal to @@ -458,7 +494,7 @@ void URLHost::ParseOpaqueHost(const char* input, size_t length) { output.reserve(length); for (size_t i = 0; i < length; i++) { const char ch = input[i]; - if (ch != '%' && IsForbiddenHostCodePoint(ch)) { + if (IsForbiddenHostCodePoint(ch)) { return; } else { AppendOrEscape(&output, ch, C0_CONTROL_ENCODE_SET); @@ -497,16 +533,15 @@ void URLHost::ParseHost(const char* input, // If any of the following characters are still present, we have to fail for (size_t n = 0; n < decoded.size(); n++) { const char ch = decoded[n]; - if (IsForbiddenHostCodePoint(ch)) { + if (IsForbiddenDomainCodePoint(ch)) { return; } } - // Check to see if it's an IPv4 IP address - bool is_ipv4; - ParseIPv4Host(decoded.c_str(), decoded.length(), &is_ipv4); - if (is_ipv4) - return; + // If domain ends in a number, then return the result of IPv4 parsing domain + if (EndsInANumber(decoded)) { + return ParseIPv4Host(decoded.c_str(), decoded.length()); + } // If the unicode flag is set, run the result through punycode ToUnicode if (unicode && !ToUnicode(decoded, &decoded)) @@ -1666,7 +1701,7 @@ void Parse(Environment* env, null, // fragment defaults to null }; SetArgs(env, argv, url); - cb->Call(context, recv, arraysize(argv), argv).FromMaybe(Local()); + USE(cb->Call(context, recv, arraysize(argv), argv)); } else if (error_cb->IsFunction()) { Local flags = Integer::NewFromUnsigned(isolate, url.flags); USE(error_cb.As()->Call(context, recv, 1, &flags)); @@ -1765,12 +1800,11 @@ void Initialize(Local target, Local unused, Local context, void* priv) { - Environment* env = Environment::GetCurrent(context); - env->SetMethod(target, "parse", Parse); - env->SetMethodNoSideEffect(target, "encodeAuth", EncodeAuthSet); - env->SetMethodNoSideEffect(target, "domainToASCII", DomainToASCII); - env->SetMethodNoSideEffect(target, "domainToUnicode", DomainToUnicode); - env->SetMethod(target, "setURLConstructor", SetURLConstructor); + SetMethod(context, target, "parse", Parse); + SetMethodNoSideEffect(context, target, "encodeAuth", EncodeAuthSet); + SetMethodNoSideEffect(context, target, "domainToASCII", DomainToASCII); + SetMethodNoSideEffect(context, target, "domainToUnicode", DomainToUnicode); + SetMethod(context, target, "setURLConstructor", SetURLConstructor); #define XX(name, _) NODE_DEFINE_CONSTANT(target, name); FLAGS(XX) diff --git a/src/node_util.cc b/src/node_util.cc index 2db45bd1fb4..1613a276c58 100644 --- a/src/node_util.cc +++ b/src/node_util.cc @@ -289,11 +289,6 @@ static void GuessHandleType(const FunctionCallbackInfo& args) { args.GetReturnValue().Set(OneByteString(env->isolate(), type)); } -static void IsConstructor(const FunctionCallbackInfo& args) { - CHECK(args[0]->IsFunction()); - args.GetReturnValue().Set(args[0].As()->IsConstructor()); -} - static void ToUSVString(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); CHECK_GE(args.Length(), 2); @@ -344,7 +339,6 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) { registry->Register(WeakReference::IncRef); registry->Register(WeakReference::DecRef); registry->Register(GuessHandleType); - registry->Register(IsConstructor); registry->Register(ToUSVString); } @@ -353,6 +347,7 @@ void Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); #define V(name, _) \ target->Set(context, \ @@ -374,19 +369,21 @@ void Initialize(Local target, V(kRejected); #undef V - env->SetMethodNoSideEffect(target, "getHiddenValue", GetHiddenValue); - env->SetMethod(target, "setHiddenValue", SetHiddenValue); - env->SetMethodNoSideEffect(target, "getPromiseDetails", GetPromiseDetails); - env->SetMethodNoSideEffect(target, "getProxyDetails", GetProxyDetails); - env->SetMethodNoSideEffect(target, "previewEntries", PreviewEntries); - env->SetMethodNoSideEffect(target, "getOwnNonIndexProperties", - GetOwnNonIndexProperties); - env->SetMethodNoSideEffect(target, "getConstructorName", GetConstructorName); - env->SetMethodNoSideEffect(target, "getExternalValue", GetExternalValue); - env->SetMethod(target, "sleep", Sleep); - env->SetMethodNoSideEffect(target, "isConstructor", IsConstructor); - - env->SetMethod(target, "arrayBufferViewHasBuffer", ArrayBufferViewHasBuffer); + SetMethodNoSideEffect(context, target, "getHiddenValue", GetHiddenValue); + SetMethod(context, target, "setHiddenValue", SetHiddenValue); + SetMethodNoSideEffect( + context, target, "getPromiseDetails", GetPromiseDetails); + SetMethodNoSideEffect(context, target, "getProxyDetails", GetProxyDetails); + SetMethodNoSideEffect(context, target, "previewEntries", PreviewEntries); + SetMethodNoSideEffect( + context, target, "getOwnNonIndexProperties", GetOwnNonIndexProperties); + SetMethodNoSideEffect( + context, target, "getConstructorName", GetConstructorName); + SetMethodNoSideEffect(context, target, "getExternalValue", GetExternalValue); + SetMethod(context, target, "sleep", Sleep); + + SetMethod( + context, target, "arrayBufferViewHasBuffer", ArrayBufferViewHasBuffer); Local constants = Object::New(env->isolate()); NODE_DEFINE_CONSTANT(constants, ALL_PROPERTIES); NODE_DEFINE_CONSTANT(constants, ONLY_WRITABLE); @@ -401,24 +398,24 @@ void Initialize(Local target, Local should_abort_on_uncaught_toggle = FIXED_ONE_BYTE_STRING(env->isolate(), "shouldAbortOnUncaughtToggle"); CHECK(target - ->Set(env->context(), + ->Set(context, should_abort_on_uncaught_toggle, env->should_abort_on_uncaught_toggle().GetJSArray()) .FromJust()); Local weak_ref = - env->NewFunctionTemplate(WeakReference::New); + NewFunctionTemplate(isolate, WeakReference::New); weak_ref->InstanceTemplate()->SetInternalFieldCount( WeakReference::kInternalFieldCount); weak_ref->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(weak_ref, "get", WeakReference::Get); - env->SetProtoMethod(weak_ref, "incRef", WeakReference::IncRef); - env->SetProtoMethod(weak_ref, "decRef", WeakReference::DecRef); - env->SetConstructorFunction(target, "WeakReference", weak_ref); + SetProtoMethod(isolate, weak_ref, "get", WeakReference::Get); + SetProtoMethod(isolate, weak_ref, "incRef", WeakReference::IncRef); + SetProtoMethod(isolate, weak_ref, "decRef", WeakReference::DecRef); + SetConstructorFunction(context, target, "WeakReference", weak_ref); - env->SetMethod(target, "guessHandleType", GuessHandleType); + SetMethod(context, target, "guessHandleType", GuessHandleType); - env->SetMethodNoSideEffect(target, "toUSVString", ToUSVString); + SetMethodNoSideEffect(context, target, "toUSVString", ToUSVString); } } // namespace util diff --git a/src/node_v8.cc b/src/node_v8.cc index c1098e2d339..1f68c9799d3 100644 --- a/src/node_v8.cc +++ b/src/node_v8.cc @@ -47,19 +47,21 @@ using v8::Uint32; using v8::V8; using v8::Value; - -#define HEAP_STATISTICS_PROPERTIES(V) \ - V(0, total_heap_size, kTotalHeapSizeIndex) \ - V(1, total_heap_size_executable, kTotalHeapSizeExecutableIndex) \ - V(2, total_physical_size, kTotalPhysicalSizeIndex) \ - V(3, total_available_size, kTotalAvailableSize) \ - V(4, used_heap_size, kUsedHeapSizeIndex) \ - V(5, heap_size_limit, kHeapSizeLimitIndex) \ - V(6, malloced_memory, kMallocedMemoryIndex) \ - V(7, peak_malloced_memory, kPeakMallocedMemoryIndex) \ - V(8, does_zap_garbage, kDoesZapGarbageIndex) \ - V(9, number_of_native_contexts, kNumberOfNativeContextsIndex) \ - V(10, number_of_detached_contexts, kNumberOfDetachedContextsIndex) +#define HEAP_STATISTICS_PROPERTIES(V) \ + V(0, total_heap_size, kTotalHeapSizeIndex) \ + V(1, total_heap_size_executable, kTotalHeapSizeExecutableIndex) \ + V(2, total_physical_size, kTotalPhysicalSizeIndex) \ + V(3, total_available_size, kTotalAvailableSize) \ + V(4, used_heap_size, kUsedHeapSizeIndex) \ + V(5, heap_size_limit, kHeapSizeLimitIndex) \ + V(6, malloced_memory, kMallocedMemoryIndex) \ + V(7, peak_malloced_memory, kPeakMallocedMemoryIndex) \ + V(8, does_zap_garbage, kDoesZapGarbageIndex) \ + V(9, number_of_native_contexts, kNumberOfNativeContextsIndex) \ + V(10, number_of_detached_contexts, kNumberOfDetachedContextsIndex) \ + V(11, total_global_handles_size, kTotalGlobalHandlesSizeIndex) \ + V(12, used_global_handles_size, kUsedGlobalHandlesSizeIndex) \ + V(13, external_memory, kExternalMemoryIndex) #define V(a, b, c) +1 static constexpr size_t kHeapStatisticsPropertiesCount = @@ -121,7 +123,7 @@ void BindingData::Deserialize(Local context, Local holder, int index, InternalFieldInfo* info) { - DCHECK_EQ(index, BaseObject::kSlot); + DCHECK_EQ(index, BaseObject::kEmbedderType); HandleScope scope(context->GetIsolate()); Environment* env = Environment::GetCurrent(context); BindingData* binding = env->AddBindingData(context, holder); @@ -129,7 +131,7 @@ void BindingData::Deserialize(Local context, } InternalFieldInfo* BindingData::Serialize(int index) { - DCHECK_EQ(index, BaseObject::kSlot); + DCHECK_EQ(index, BaseObject::kEmbedderType); InternalFieldInfo* info = InternalFieldInfo::New(type()); return info; } @@ -153,6 +155,15 @@ void CachedDataVersionTag(const FunctionCallbackInfo& args) { args.GetReturnValue().Set(result); } +void SetHeapSnapshotNearHeapLimit(const FunctionCallbackInfo& args) { + CHECK(args[0]->IsUint32()); + Environment* env = Environment::GetCurrent(args); + uint32_t limit = args[0].As()->Value(); + CHECK_GT(limit, 0); + env->AddHeapSnapshotNearHeapLimitCallback(); + env->set_heap_snapshot_near_heap_limit(limit); +} + void UpdateHeapStatisticsBuffer(const FunctionCallbackInfo& args) { BindingData* data = Environment::GetBindingData(args); HeapStatistics s; @@ -206,13 +217,21 @@ void Initialize(Local target, env->AddBindingData(context, target); if (binding_data == nullptr) return; - env->SetMethodNoSideEffect(target, "cachedDataVersionTag", - CachedDataVersionTag); - env->SetMethod( - target, "updateHeapStatisticsBuffer", UpdateHeapStatisticsBuffer); - - env->SetMethod( - target, "updateHeapCodeStatisticsBuffer", UpdateHeapCodeStatisticsBuffer); + SetMethodNoSideEffect( + context, target, "cachedDataVersionTag", CachedDataVersionTag); + SetMethod(context, + target, + "updateHeapStatisticsBuffer", + UpdateHeapStatisticsBuffer); + SetMethodNoSideEffect(context, + target, + "setHeapSnapshotNearHeapLimit", + SetHeapSnapshotNearHeapLimit); + + SetMethod(context, + target, + "updateHeapCodeStatisticsBuffer", + UpdateHeapCodeStatisticsBuffer); size_t number_of_heap_spaces = env->isolate()->NumberOfHeapSpaces(); @@ -225,19 +244,21 @@ void Initialize(Local target, heap_spaces[i] = String::NewFromUtf8(env->isolate(), s.space_name()) .ToLocalChecked(); } - target->Set(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "kHeapSpaces"), - Array::New(env->isolate(), - heap_spaces.out(), - number_of_heap_spaces)).Check(); + target + ->Set( + context, + FIXED_ONE_BYTE_STRING(env->isolate(), "kHeapSpaces"), + Array::New(env->isolate(), heap_spaces.out(), number_of_heap_spaces)) + .Check(); - env->SetMethod(target, - "updateHeapSpaceStatisticsBuffer", - UpdateHeapSpaceStatisticsBuffer); + SetMethod(context, + target, + "updateHeapSpaceStatisticsBuffer", + UpdateHeapSpaceStatisticsBuffer); #define V(i, _, name) \ target \ - ->Set(env->context(), \ + ->Set(context, \ FIXED_ONE_BYTE_STRING(env->isolate(), #name), \ Uint32::NewFromUnsigned(env->isolate(), i)) \ .Check(); @@ -248,7 +269,7 @@ void Initialize(Local target, #undef V // Export symbols used by v8.setFlagsFromString() - env->SetMethod(target, "setFlagsFromString", SetFlagsFromString); + SetMethod(context, target, "setFlagsFromString", SetFlagsFromString); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { @@ -257,6 +278,7 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) { registry->Register(UpdateHeapCodeStatisticsBuffer); registry->Register(UpdateHeapSpaceStatisticsBuffer); registry->Register(SetFlagsFromString); + registry->Register(SetHeapSnapshotNearHeapLimit); } } // namespace v8_utils diff --git a/src/node_version.h b/src/node_version.h index 39f6406dd2b..abe57fc0bf7 100644 --- a/src/node_version.h +++ b/src/node_version.h @@ -23,8 +23,10 @@ #define SRC_NODE_VERSION_H_ #define NODE_MAJOR_VERSION 16 -#define NODE_MINOR_VERSION 15 -#define NODE_PATCH_VERSION 1 +#define NODE_MINOR_VERSION 19 +#define NODE_PATCH_VERSION 0 + +#define ANODE_REVISE 1 #define NODE_VERSION_IS_LTS 1 #define NODE_VERSION_LTS_CODENAME "Gallium" @@ -58,11 +60,16 @@ NODE_STRINGIFY(NODE_MINOR_VERSION) "." \ NODE_STRINGIFY(NODE_PATCH_VERSION) \ NODE_TAG + +# define ANODE_VERSION_STRING NODE_VERSION_STRING "-anode." \ + NODE_STRINGIFY(ANODE_REVISE) + #ifndef NODE_EXE_VERSION # define NODE_EXE_VERSION NODE_VERSION_STRING #endif #define NODE_VERSION "v" NODE_VERSION_STRING +#define ANODE_VERSION "v" ANODE_VERSION_STRING #define NODE_VERSION_AT_LEAST(major, minor, patch) \ diff --git a/src/node_wasi.cc b/src/node_wasi.cc index ffcc37c5274..a1b244018a6 100644 --- a/src/node_wasi.cc +++ b/src/node_wasi.cc @@ -72,9 +72,7 @@ inline void Debug(WASI* wasi, Args&&... args) { } \ } while (0) - using v8::Array; -using v8::ArrayBuffer; using v8::BackingStore; using v8::BigInt; using v8::Context; @@ -89,7 +87,7 @@ using v8::Object; using v8::String; using v8::Uint32; using v8::Value; - +using v8::WasmMemoryObject; static MaybeLocal WASIException(Local context, int errorno, @@ -236,11 +234,9 @@ void WASI::New(const FunctionCallbackInfo& args) { delete[] options.argv; } - if (options.envp != nullptr) { - for (uint32_t i = 0; options.envp[i]; i++) - free(const_cast(options.envp[i])); - delete[] options.envp; - } + for (uint32_t i = 0; options.envp[i]; i++) + free(const_cast(options.envp[i])); + delete[] options.envp; if (options.preopens != nullptr) { for (uint32_t i = 0; i < options.preopenc; i++) { @@ -1644,26 +1640,22 @@ void WASI::SockShutdown(const FunctionCallbackInfo& args) { void WASI::_SetMemory(const FunctionCallbackInfo& args) { WASI* wasi; - CHECK_EQ(args.Length(), 1); - CHECK(args[0]->IsObject()); ASSIGN_OR_RETURN_UNWRAP(&wasi, args.This()); - wasi->memory_.Reset(wasi->env()->isolate(), args[0].As()); + CHECK_EQ(args.Length(), 1); + if (!args[0]->IsWasmMemoryObject()) { + return node::THROW_ERR_INVALID_ARG_TYPE( + wasi->env(), + "\"instance.exports.memory\" property must be a WebAssembly.Memory " + "object"); + } + wasi->memory_.Reset(wasi->env()->isolate(), args[0].As()); } uvwasi_errno_t WASI::backingStore(char** store, size_t* byte_length) { - Environment* env = this->env(); - Local memory = PersistentToLocal::Strong(this->memory_); - Local prop; - - if (!memory->Get(env->context(), env->buffer_string()).ToLocal(&prop)) - return UVWASI_EINVAL; - - if (!prop->IsArrayBuffer()) - return UVWASI_EINVAL; - - Local ab = prop.As(); - std::shared_ptr backing_store = ab->GetBackingStore(); + Local memory = PersistentToLocal::Strong(this->memory_); + std::shared_ptr backing_store = + memory->Buffer()->GetBackingStore(); *byte_length = backing_store->ByteLength(); *store = static_cast(backing_store->Data()); CHECK_NOT_NULL(*store); @@ -1676,62 +1668,67 @@ static void Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - Local tmpl = env->NewFunctionTemplate(WASI::New); + Local tmpl = NewFunctionTemplate(isolate, WASI::New); tmpl->InstanceTemplate()->SetInternalFieldCount(WASI::kInternalFieldCount); tmpl->Inherit(BaseObject::GetConstructorTemplate(env)); - env->SetProtoMethod(tmpl, "args_get", WASI::ArgsGet); - env->SetProtoMethod(tmpl, "args_sizes_get", WASI::ArgsSizesGet); - env->SetProtoMethod(tmpl, "clock_res_get", WASI::ClockResGet); - env->SetProtoMethod(tmpl, "clock_time_get", WASI::ClockTimeGet); - env->SetProtoMethod(tmpl, "environ_get", WASI::EnvironGet); - env->SetProtoMethod(tmpl, "environ_sizes_get", WASI::EnvironSizesGet); - env->SetProtoMethod(tmpl, "fd_advise", WASI::FdAdvise); - env->SetProtoMethod(tmpl, "fd_allocate", WASI::FdAllocate); - env->SetProtoMethod(tmpl, "fd_close", WASI::FdClose); - env->SetProtoMethod(tmpl, "fd_datasync", WASI::FdDatasync); - env->SetProtoMethod(tmpl, "fd_fdstat_get", WASI::FdFdstatGet); - env->SetProtoMethod(tmpl, "fd_fdstat_set_flags", WASI::FdFdstatSetFlags); - env->SetProtoMethod(tmpl, "fd_fdstat_set_rights", WASI::FdFdstatSetRights); - env->SetProtoMethod(tmpl, "fd_filestat_get", WASI::FdFilestatGet); - env->SetProtoMethod(tmpl, "fd_filestat_set_size", WASI::FdFilestatSetSize); - env->SetProtoMethod(tmpl, "fd_filestat_set_times", WASI::FdFilestatSetTimes); - env->SetProtoMethod(tmpl, "fd_pread", WASI::FdPread); - env->SetProtoMethod(tmpl, "fd_prestat_get", WASI::FdPrestatGet); - env->SetProtoMethod(tmpl, "fd_prestat_dir_name", WASI::FdPrestatDirName); - env->SetProtoMethod(tmpl, "fd_pwrite", WASI::FdPwrite); - env->SetProtoMethod(tmpl, "fd_read", WASI::FdRead); - env->SetProtoMethod(tmpl, "fd_readdir", WASI::FdReaddir); - env->SetProtoMethod(tmpl, "fd_renumber", WASI::FdRenumber); - env->SetProtoMethod(tmpl, "fd_seek", WASI::FdSeek); - env->SetProtoMethod(tmpl, "fd_sync", WASI::FdSync); - env->SetProtoMethod(tmpl, "fd_tell", WASI::FdTell); - env->SetProtoMethod(tmpl, "fd_write", WASI::FdWrite); - env->SetProtoMethod(tmpl, "path_create_directory", WASI::PathCreateDirectory); - env->SetProtoMethod(tmpl, "path_filestat_get", WASI::PathFilestatGet); - env->SetProtoMethod(tmpl, - "path_filestat_set_times", - WASI::PathFilestatSetTimes); - env->SetProtoMethod(tmpl, "path_link", WASI::PathLink); - env->SetProtoMethod(tmpl, "path_open", WASI::PathOpen); - env->SetProtoMethod(tmpl, "path_readlink", WASI::PathReadlink); - env->SetProtoMethod(tmpl, "path_remove_directory", WASI::PathRemoveDirectory); - env->SetProtoMethod(tmpl, "path_rename", WASI::PathRename); - env->SetProtoMethod(tmpl, "path_symlink", WASI::PathSymlink); - env->SetProtoMethod(tmpl, "path_unlink_file", WASI::PathUnlinkFile); - env->SetProtoMethod(tmpl, "poll_oneoff", WASI::PollOneoff); - env->SetProtoMethod(tmpl, "proc_exit", WASI::ProcExit); - env->SetProtoMethod(tmpl, "proc_raise", WASI::ProcRaise); - env->SetProtoMethod(tmpl, "random_get", WASI::RandomGet); - env->SetProtoMethod(tmpl, "sched_yield", WASI::SchedYield); - env->SetProtoMethod(tmpl, "sock_recv", WASI::SockRecv); - env->SetProtoMethod(tmpl, "sock_send", WASI::SockSend); - env->SetProtoMethod(tmpl, "sock_shutdown", WASI::SockShutdown); - - env->SetInstanceMethod(tmpl, "_setMemory", WASI::_SetMemory); - - env->SetConstructorFunction(target, "WASI", tmpl); + SetProtoMethod(isolate, tmpl, "args_get", WASI::ArgsGet); + SetProtoMethod(isolate, tmpl, "args_sizes_get", WASI::ArgsSizesGet); + SetProtoMethod(isolate, tmpl, "clock_res_get", WASI::ClockResGet); + SetProtoMethod(isolate, tmpl, "clock_time_get", WASI::ClockTimeGet); + SetProtoMethod(isolate, tmpl, "environ_get", WASI::EnvironGet); + SetProtoMethod(isolate, tmpl, "environ_sizes_get", WASI::EnvironSizesGet); + SetProtoMethod(isolate, tmpl, "fd_advise", WASI::FdAdvise); + SetProtoMethod(isolate, tmpl, "fd_allocate", WASI::FdAllocate); + SetProtoMethod(isolate, tmpl, "fd_close", WASI::FdClose); + SetProtoMethod(isolate, tmpl, "fd_datasync", WASI::FdDatasync); + SetProtoMethod(isolate, tmpl, "fd_fdstat_get", WASI::FdFdstatGet); + SetProtoMethod(isolate, tmpl, "fd_fdstat_set_flags", WASI::FdFdstatSetFlags); + SetProtoMethod( + isolate, tmpl, "fd_fdstat_set_rights", WASI::FdFdstatSetRights); + SetProtoMethod(isolate, tmpl, "fd_filestat_get", WASI::FdFilestatGet); + SetProtoMethod( + isolate, tmpl, "fd_filestat_set_size", WASI::FdFilestatSetSize); + SetProtoMethod( + isolate, tmpl, "fd_filestat_set_times", WASI::FdFilestatSetTimes); + SetProtoMethod(isolate, tmpl, "fd_pread", WASI::FdPread); + SetProtoMethod(isolate, tmpl, "fd_prestat_get", WASI::FdPrestatGet); + SetProtoMethod(isolate, tmpl, "fd_prestat_dir_name", WASI::FdPrestatDirName); + SetProtoMethod(isolate, tmpl, "fd_pwrite", WASI::FdPwrite); + SetProtoMethod(isolate, tmpl, "fd_read", WASI::FdRead); + SetProtoMethod(isolate, tmpl, "fd_readdir", WASI::FdReaddir); + SetProtoMethod(isolate, tmpl, "fd_renumber", WASI::FdRenumber); + SetProtoMethod(isolate, tmpl, "fd_seek", WASI::FdSeek); + SetProtoMethod(isolate, tmpl, "fd_sync", WASI::FdSync); + SetProtoMethod(isolate, tmpl, "fd_tell", WASI::FdTell); + SetProtoMethod(isolate, tmpl, "fd_write", WASI::FdWrite); + SetProtoMethod( + isolate, tmpl, "path_create_directory", WASI::PathCreateDirectory); + SetProtoMethod(isolate, tmpl, "path_filestat_get", WASI::PathFilestatGet); + SetProtoMethod( + isolate, tmpl, "path_filestat_set_times", WASI::PathFilestatSetTimes); + SetProtoMethod(isolate, tmpl, "path_link", WASI::PathLink); + SetProtoMethod(isolate, tmpl, "path_open", WASI::PathOpen); + SetProtoMethod(isolate, tmpl, "path_readlink", WASI::PathReadlink); + SetProtoMethod( + isolate, tmpl, "path_remove_directory", WASI::PathRemoveDirectory); + SetProtoMethod(isolate, tmpl, "path_rename", WASI::PathRename); + SetProtoMethod(isolate, tmpl, "path_symlink", WASI::PathSymlink); + SetProtoMethod(isolate, tmpl, "path_unlink_file", WASI::PathUnlinkFile); + SetProtoMethod(isolate, tmpl, "poll_oneoff", WASI::PollOneoff); + SetProtoMethod(isolate, tmpl, "proc_exit", WASI::ProcExit); + SetProtoMethod(isolate, tmpl, "proc_raise", WASI::ProcRaise); + SetProtoMethod(isolate, tmpl, "random_get", WASI::RandomGet); + SetProtoMethod(isolate, tmpl, "sched_yield", WASI::SchedYield); + SetProtoMethod(isolate, tmpl, "sock_recv", WASI::SockRecv); + SetProtoMethod(isolate, tmpl, "sock_send", WASI::SockSend); + SetProtoMethod(isolate, tmpl, "sock_shutdown", WASI::SockShutdown); + + SetInstanceMethod(isolate, tmpl, "_setMemory", WASI::_SetMemory); + + SetConstructorFunction(context, target, "WASI", tmpl); } diff --git a/src/node_wasi.h b/src/node_wasi.h index 7a0be60aa64..b3814ddc310 100644 --- a/src/node_wasi.h +++ b/src/node_wasi.h @@ -94,7 +94,7 @@ class WASI : public BaseObject, inline void writeUInt64(char* memory, uint64_t value, uint32_t offset); uvwasi_errno_t backingStore(char** store, size_t* byte_length); uvwasi_t uvw_; - v8::Global memory_; + v8::Global memory_; uvwasi_mem_t alloc_info_; size_t current_uvwasi_memory_ = 0; }; diff --git a/src/node_watchdog.cc b/src/node_watchdog.cc index ff2a0229087..7062d4aa661 100644 --- a/src/node_watchdog.cc +++ b/src/node_watchdog.cc @@ -34,6 +34,7 @@ namespace node { using v8::Context; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; +using v8::Isolate; using v8::Local; using v8::Object; using v8::Value; @@ -102,6 +103,7 @@ void Watchdog::Timer(uv_timer_t* timer) { SigintWatchdog::SigintWatchdog( v8::Isolate* isolate, bool* received_signal) : isolate_(isolate), received_signal_(received_signal) { + Mutex::ScopedLock lock(SigintWatchdogHelper::GetInstanceActionMutex()); // Register this watchdog with the global SIGINT/Ctrl+C listener. SigintWatchdogHelper::GetInstance()->Register(this); // Start the helper thread, if that has not already happened. @@ -110,6 +112,7 @@ SigintWatchdog::SigintWatchdog( SigintWatchdog::~SigintWatchdog() { + Mutex::ScopedLock lock(SigintWatchdogHelper::GetInstanceActionMutex()); SigintWatchdogHelper::GetInstance()->Unregister(this); SigintWatchdogHelper::GetInstance()->Stop(); } @@ -121,15 +124,17 @@ SignalPropagation SigintWatchdog::HandleSigint() { } void TraceSigintWatchdog::Init(Environment* env, Local target) { - Local constructor = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + Local constructor = NewFunctionTemplate(isolate, New); constructor->InstanceTemplate()->SetInternalFieldCount( TraceSigintWatchdog::kInternalFieldCount); constructor->Inherit(HandleWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(constructor, "start", Start); - env->SetProtoMethod(constructor, "stop", Stop); + SetProtoMethod(isolate, constructor, "start", Start); + SetProtoMethod(isolate, constructor, "stop", Stop); - env->SetConstructorFunction(target, "TraceSigintWatchdog", constructor); + SetConstructorFunction( + env->context(), target, "TraceSigintWatchdog", constructor); } void TraceSigintWatchdog::New(const FunctionCallbackInfo& args) { @@ -144,6 +149,7 @@ void TraceSigintWatchdog::New(const FunctionCallbackInfo& args) { void TraceSigintWatchdog::Start(const FunctionCallbackInfo& args) { TraceSigintWatchdog* watchdog; ASSIGN_OR_RETURN_UNWRAP(&watchdog, args.Holder()); + Mutex::ScopedLock lock(SigintWatchdogHelper::GetInstanceActionMutex()); // Register this watchdog with the global SIGINT/Ctrl+C listener. SigintWatchdogHelper::GetInstance()->Register(watchdog); // Start the helper thread, if that has not already happened. @@ -154,6 +160,7 @@ void TraceSigintWatchdog::Start(const FunctionCallbackInfo& args) { void TraceSigintWatchdog::Stop(const FunctionCallbackInfo& args) { TraceSigintWatchdog* watchdog; ASSIGN_OR_RETURN_UNWRAP(&watchdog, args.Holder()); + Mutex::ScopedLock lock(SigintWatchdogHelper::GetInstanceActionMutex()); SigintWatchdogHelper::GetInstance()->Unregister(watchdog); SigintWatchdogHelper::GetInstance()->Stop(); } @@ -215,6 +222,7 @@ void TraceSigintWatchdog::HandleInterrupt() { signal_flag_ = SignalFlags::None; interrupting = false; + Mutex::ScopedLock lock(SigintWatchdogHelper::GetInstanceActionMutex()); SigintWatchdogHelper::GetInstance()->Unregister(this); SigintWatchdogHelper::GetInstance()->Stop(); raise(SIGINT); @@ -413,6 +421,7 @@ SigintWatchdogHelper::~SigintWatchdogHelper() { } SigintWatchdogHelper SigintWatchdogHelper::instance; +Mutex SigintWatchdogHelper::instance_action_mutex_; namespace watchdog { static void Initialize(Local target, diff --git a/src/node_watchdog.h b/src/node_watchdog.h index 8bccfceef3c..ae70157224b 100644 --- a/src/node_watchdog.h +++ b/src/node_watchdog.h @@ -110,6 +110,7 @@ class TraceSigintWatchdog : public HandleWrap, public SigintWatchdogBase { class SigintWatchdogHelper { public: static SigintWatchdogHelper* GetInstance() { return &instance; } + static Mutex& GetInstanceActionMutex() { return instance_action_mutex_; } void Register(SigintWatchdogBase* watchdog); void Unregister(SigintWatchdogBase* watchdog); bool HasPendingSignal(); @@ -123,6 +124,7 @@ class SigintWatchdogHelper { static bool InformWatchdogsAboutSignal(); static SigintWatchdogHelper instance; + static Mutex instance_action_mutex_; int start_stop_count_; diff --git a/src/node_worker.cc b/src/node_worker.cc index a734d65965a..2b928e14185 100644 --- a/src/node_worker.cc +++ b/src/node_worker.cc @@ -7,6 +7,7 @@ #include "node_buffer.h" #include "node_options-inl.h" #include "node_perf.h" +#include "node_snapshot_builder.h" #include "util-inl.h" #include "async_wrap-inl.h" @@ -60,18 +61,18 @@ Worker::Worker(Environment* env, thread_id_.id); // Set up everything that needs to be set up in the parent environment. - parent_port_ = MessagePort::New(env, env->context()); - if (parent_port_ == nullptr) { + MessagePort* parent_port = MessagePort::New(env, env->context()); + if (parent_port == nullptr) { // This can happen e.g. because execution is terminating. return; } child_port_data_ = std::make_unique(nullptr); - MessagePort::Entangle(parent_port_, child_port_data_.get()); + MessagePort::Entangle(parent_port, child_port_data_.get()); - object()->Set(env->context(), - env->message_port_string(), - parent_port_->object()).Check(); + object() + ->Set(env->context(), env->message_port_string(), parent_port->object()) + .Check(); object()->Set(env->context(), env->thread_id_string(), @@ -146,6 +147,20 @@ class WorkerThreadData { SetIsolateCreateParamsForNode(¶ms); params.array_buffer_allocator_shared = allocator; + bool use_node_snapshot = true; + if (w_->per_isolate_opts_) { + use_node_snapshot = w_->per_isolate_opts_->node_snapshot; + } else { + // IsolateData is created after the Isolate is created so we'll + // inherit the option from the parent here. + use_node_snapshot = per_process::cli_options->per_isolate->node_snapshot; + } + const SnapshotData* snapshot_data = + use_node_snapshot ? SnapshotBuilder::GetEmbeddedSnapshotData() + : nullptr; + if (snapshot_data != nullptr) { + SnapshotBuilder::InitializeIsolateParams(snapshot_data, ¶ms); + } w->UpdateResourceConstraints(¶ms.constraints); Isolate* isolate = Isolate::Allocate(); @@ -238,11 +253,21 @@ class WorkerThreadData { size_t Worker::NearHeapLimit(void* data, size_t current_heap_limit, size_t initial_heap_limit) { Worker* worker = static_cast(data); - worker->Exit(1, "ERR_WORKER_OUT_OF_MEMORY", "JS heap out of memory"); // Give the current GC some extra leeway to let it finish rather than // crash hard. We are not going to perform further allocations anyway. constexpr size_t kExtraHeapAllowance = 16 * 1024 * 1024; - return current_heap_limit + kExtraHeapAllowance; + size_t new_limit = current_heap_limit + kExtraHeapAllowance; + Environment* env = worker->env(); + if (env != nullptr) { + DCHECK(!env->is_in_heapsnapshot_heap_limit_callback()); + Debug(env, + DebugCategory::DIAGNOSTICS, + "Throwing ERR_WORKER_OUT_OF_MEMORY, " + "new_limit=%" PRIu64 "\n", + static_cast(new_limit)); + } + worker->Exit(1, "ERR_WORKER_OUT_OF_MEMORY", "JS heap out of memory"); + return new_limit; } void Worker::Run() { @@ -661,6 +686,12 @@ void Worker::Ref(const FunctionCallbackInfo& args) { } } +void Worker::HasRef(const FunctionCallbackInfo& args) { + Worker* w; + ASSIGN_OR_RETURN_UNWRAP(&w, args.This()); + args.GetReturnValue().Set(w->has_ref_); +} + void Worker::Unref(const FunctionCallbackInfo& args) { Worker* w; ASSIGN_OR_RETURN_UNWRAP(&w, args.This()); @@ -703,10 +734,6 @@ void Worker::Exit(int code, const char* error_code, const char* error_message) { } } -void Worker::MemoryInfo(MemoryTracker* tracker) const { - tracker->TrackField("parent_port", parent_port_); -} - bool Worker::IsNotIndicativeOfMemoryLeakAtExit() const { // Worker objects always stay alive as long as the child thread, regardless // of whether they are being referenced in the parent thread. @@ -813,64 +840,66 @@ void InitWorker(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); { - Local w = env->NewFunctionTemplate(Worker::New); + Local w = NewFunctionTemplate(isolate, Worker::New); w->InstanceTemplate()->SetInternalFieldCount( Worker::kInternalFieldCount); w->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(w, "startThread", Worker::StartThread); - env->SetProtoMethod(w, "stopThread", Worker::StopThread); - env->SetProtoMethod(w, "ref", Worker::Ref); - env->SetProtoMethod(w, "unref", Worker::Unref); - env->SetProtoMethod(w, "getResourceLimits", Worker::GetResourceLimits); - env->SetProtoMethod(w, "takeHeapSnapshot", Worker::TakeHeapSnapshot); - env->SetProtoMethod(w, "loopIdleTime", Worker::LoopIdleTime); - env->SetProtoMethod(w, "loopStartTime", Worker::LoopStartTime); - - env->SetConstructorFunction(target, "Worker", w); + SetProtoMethod(isolate, w, "startThread", Worker::StartThread); + SetProtoMethod(isolate, w, "stopThread", Worker::StopThread); + SetProtoMethod(isolate, w, "hasRef", Worker::HasRef); + SetProtoMethod(isolate, w, "ref", Worker::Ref); + SetProtoMethod(isolate, w, "unref", Worker::Unref); + SetProtoMethod(isolate, w, "getResourceLimits", Worker::GetResourceLimits); + SetProtoMethod(isolate, w, "takeHeapSnapshot", Worker::TakeHeapSnapshot); + SetProtoMethod(isolate, w, "loopIdleTime", Worker::LoopIdleTime); + SetProtoMethod(isolate, w, "loopStartTime", Worker::LoopStartTime); + + SetConstructorFunction(context, target, "Worker", w); } { - Local wst = FunctionTemplate::New(env->isolate()); + Local wst = NewFunctionTemplate(isolate, nullptr); wst->InstanceTemplate()->SetInternalFieldCount( WorkerHeapSnapshotTaker::kInternalFieldCount); wst->Inherit(AsyncWrap::GetConstructorTemplate(env)); Local wst_string = - FIXED_ONE_BYTE_STRING(env->isolate(), "WorkerHeapSnapshotTaker"); + FIXED_ONE_BYTE_STRING(isolate, "WorkerHeapSnapshotTaker"); wst->SetClassName(wst_string); env->set_worker_heap_snapshot_taker_template(wst->InstanceTemplate()); } - env->SetMethod(target, "getEnvMessagePort", GetEnvMessagePort); + SetMethod(context, target, "getEnvMessagePort", GetEnvMessagePort); target ->Set(env->context(), env->thread_id_string(), - Number::New(env->isolate(), static_cast(env->thread_id()))) + Number::New(isolate, static_cast(env->thread_id()))) .Check(); target ->Set(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "isMainThread"), - Boolean::New(env->isolate(), env->is_main_thread())) + FIXED_ONE_BYTE_STRING(isolate, "isMainThread"), + Boolean::New(isolate, env->is_main_thread())) .Check(); target ->Set(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "ownsProcessState"), - Boolean::New(env->isolate(), env->owns_process_state())) + FIXED_ONE_BYTE_STRING(isolate, "ownsProcessState"), + Boolean::New(isolate, env->owns_process_state())) .Check(); if (!env->is_main_thread()) { target ->Set(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "resourceLimits"), - env->worker_context()->GetResourceLimits(env->isolate())) + FIXED_ONE_BYTE_STRING(isolate, "resourceLimits"), + env->worker_context()->GetResourceLimits(isolate)) .Check(); } @@ -886,6 +915,7 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) { registry->Register(Worker::New); registry->Register(Worker::StartThread); registry->Register(Worker::StopThread); + registry->Register(Worker::HasRef); registry->Register(Worker::Ref); registry->Register(Worker::Unref); registry->Register(Worker::GetResourceLimits); diff --git a/src/node_worker.h b/src/node_worker.h index 077d2b8390e..119b75d137a 100644 --- a/src/node_worker.h +++ b/src/node_worker.h @@ -47,7 +47,7 @@ class Worker : public AsyncWrap { template inline bool RequestInterrupt(Fn&& cb); - void MemoryInfo(MemoryTracker* tracker) const override; + SET_NO_MEMORY_INFO() SET_MEMORY_INFO_NAME(Worker) SET_SELF_SIZE(Worker) bool IsNotIndicativeOfMemoryLeakAtExit() const override; @@ -60,6 +60,7 @@ class Worker : public AsyncWrap { static void SetEnvVars(const v8::FunctionCallbackInfo& args); static void StartThread(const v8::FunctionCallbackInfo& args); static void StopThread(const v8::FunctionCallbackInfo& args); + static void HasRef(const v8::FunctionCallbackInfo& args); static void Ref(const v8::FunctionCallbackInfo& args); static void Unref(const v8::FunctionCallbackInfo& args); static void GetResourceLimits( @@ -106,10 +107,6 @@ class Worker : public AsyncWrap { std::unique_ptr child_port_data_; std::shared_ptr env_vars_; - // This is always kept alive because the JS object associated with the Worker - // instance refers to it via its [kPort] property. - MessagePort* parent_port_ = nullptr; - // A raw flag that is used by creator and worker threads to // sync up on pre-mature termination of worker - while in the // warmup phase. Once the worker is fully warmed up, use the diff --git a/src/node_zlib.cc b/src/node_zlib.cc index 5930ffd7a8a..e2433d887b4 100644 --- a/src/node_zlib.cc +++ b/src/node_zlib.cc @@ -52,6 +52,7 @@ using v8::FunctionTemplate; using v8::HandleScope; using v8::Int32; using v8::Integer; +using v8::Isolate; using v8::Local; using v8::Object; using v8::Uint32Array; @@ -1256,21 +1257,22 @@ CompressionError BrotliDecoderContext::GetErrorInfo() const { template struct MakeClass { static void Make(Environment* env, Local target, const char* name) { - Local z = env->NewFunctionTemplate(Stream::New); + Isolate* isolate = env->isolate(); + Local z = NewFunctionTemplate(isolate, Stream::New); z->InstanceTemplate()->SetInternalFieldCount( Stream::kInternalFieldCount); z->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(z, "write", Stream::template Write); - env->SetProtoMethod(z, "writeSync", Stream::template Write); - env->SetProtoMethod(z, "close", Stream::Close); + SetProtoMethod(isolate, z, "write", Stream::template Write); + SetProtoMethod(isolate, z, "writeSync", Stream::template Write); + SetProtoMethod(isolate, z, "close", Stream::Close); - env->SetProtoMethod(z, "init", Stream::Init); - env->SetProtoMethod(z, "params", Stream::Params); - env->SetProtoMethod(z, "reset", Stream::Reset); + SetProtoMethod(isolate, z, "init", Stream::Init); + SetProtoMethod(isolate, z, "params", Stream::Params); + SetProtoMethod(isolate, z, "reset", Stream::Reset); - env->SetConstructorFunction(target, name, z); + SetConstructorFunction(env->context(), target, name, z); } static void Make(ExternalReferenceRegistry* registry) { diff --git a/src/pipe_wrap.cc b/src/pipe_wrap.cc index da52f5cee01..4f1bfda569f 100644 --- a/src/pipe_wrap.cc +++ b/src/pipe_wrap.cc @@ -41,6 +41,7 @@ using v8::Function; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::Int32; +using v8::Isolate; using v8::Local; using v8::MaybeLocal; using v8::Object; @@ -67,31 +68,32 @@ void PipeWrap::Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - Local t = env->NewFunctionTemplate(New); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate() ->SetInternalFieldCount(StreamBase::kInternalFieldCount); t->Inherit(LibuvStreamWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "bind", Bind); - env->SetProtoMethod(t, "listen", Listen); - env->SetProtoMethod(t, "connect", Connect); - env->SetProtoMethod(t, "open", Open); + SetProtoMethod(isolate, t, "bind", Bind); + SetProtoMethod(isolate, t, "listen", Listen); + SetProtoMethod(isolate, t, "connect", Connect); + SetProtoMethod(isolate, t, "open", Open); #ifdef _WIN32 - env->SetProtoMethod(t, "setPendingInstances", SetPendingInstances); + SetProtoMethod(isolate, t, "setPendingInstances", SetPendingInstances); #endif - env->SetProtoMethod(t, "fchmod", Fchmod); + SetProtoMethod(isolate, t, "fchmod", Fchmod); - env->SetConstructorFunction(target, "Pipe", t); + SetConstructorFunction(context, target, "Pipe", t); env->set_pipe_constructor_template(t); // Create FunctionTemplate for PipeConnectWrap. auto cwt = BaseObject::MakeLazilyInitializedJSTemplate(env); cwt->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetConstructorFunction(target, "PipeConnectWrap", cwt); + SetConstructorFunction(context, target, "PipeConnectWrap", cwt); // Define constants Local constants = Object::New(env->isolate()); @@ -241,6 +243,12 @@ void PipeWrap::Connect(const FunctionCallbackInfo& args) { *name, AfterConnect); + TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(TRACING_CATEGORY_NODE2(net, native), + "connect", + req_wrap, + "pipe_path", + TRACE_STR_COPY(*name)); + args.GetReturnValue().Set(0); // uv_pipe_connect() doesn't return errors. } diff --git a/src/process_wrap.cc b/src/process_wrap.cc index 6905cacb1c8..3a55048ef79 100644 --- a/src/process_wrap.cc +++ b/src/process_wrap.cc @@ -36,6 +36,7 @@ using v8::FunctionTemplate; using v8::HandleScope; using v8::Int32; using v8::Integer; +using v8::Isolate; using v8::Local; using v8::Number; using v8::Object; @@ -51,16 +52,17 @@ class ProcessWrap : public HandleWrap { Local context, void* priv) { Environment* env = Environment::GetCurrent(context); - Local constructor = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + Local constructor = NewFunctionTemplate(isolate, New); constructor->InstanceTemplate()->SetInternalFieldCount( ProcessWrap::kInternalFieldCount); constructor->Inherit(HandleWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(constructor, "spawn", Spawn); - env->SetProtoMethod(constructor, "kill", Kill); + SetProtoMethod(isolate, constructor, "spawn", Spawn); + SetProtoMethod(isolate, constructor, "kill", Kill); - env->SetConstructorFunction(target, "Process", constructor); + SetConstructorFunction(context, target, "Process", constructor); } SET_NO_MEMORY_INFO() diff --git a/src/req_wrap-inl.h b/src/req_wrap-inl.h index c905b605cbd..6bb5a58cb85 100644 --- a/src/req_wrap-inl.h +++ b/src/req_wrap-inl.h @@ -20,13 +20,12 @@ ReqWrap::ReqWrap(Environment* env, AsyncWrap::ProviderType provider) : AsyncWrap(env, object, provider), ReqWrapBase(env) { + MakeWeak(); Reset(); } template -ReqWrap::~ReqWrap() { - CHECK_EQ(false, persistent().IsEmpty()); -} +ReqWrap::~ReqWrap() {} template void ReqWrap::Dispatched() { @@ -120,7 +119,8 @@ struct MakeLibuvRequestCallback { using F = void(*)(ReqT* req, Args... args); static void Wrapper(ReqT* req, Args... args) { - ReqWrap* req_wrap = ReqWrap::from_req(req); + BaseObjectPtr> req_wrap{ReqWrap::from_req(req)}; + req_wrap->Detach(); req_wrap->env()->DecreaseWaitingRequestCounter(); F original_callback = reinterpret_cast(req_wrap->original_callback_); original_callback(req, args...); @@ -138,7 +138,6 @@ template template int ReqWrap::Dispatch(LibuvFunction fn, Args... args) { Dispatched(); - // This expands as: // // int err = fn(env()->event_loop(), req(), arg1, arg2, Wrapper, arg3, ...) @@ -158,8 +157,10 @@ int ReqWrap::Dispatch(LibuvFunction fn, Args... args) { env()->event_loop(), req(), MakeLibuvRequestCallback::For(this, args)...); - if (err >= 0) + if (err >= 0) { + ClearWeak(); env()->IncreaseWaitingRequestCounter(); + } return err; } diff --git a/src/signal_wrap.cc b/src/signal_wrap.cc index df7f94eeec8..d5dfdd51da6 100644 --- a/src/signal_wrap.cc +++ b/src/signal_wrap.cc @@ -34,6 +34,7 @@ using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::Integer; +using v8::Isolate; using v8::Local; using v8::Object; using v8::Value; @@ -52,15 +53,16 @@ class SignalWrap : public HandleWrap { Local context, void* priv) { Environment* env = Environment::GetCurrent(context); - Local constructor = env->NewFunctionTemplate(New); + Isolate* isolate = env->isolate(); + Local constructor = NewFunctionTemplate(isolate, New); constructor->InstanceTemplate()->SetInternalFieldCount( SignalWrap::kInternalFieldCount); constructor->Inherit(HandleWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(constructor, "start", Start); - env->SetProtoMethod(constructor, "stop", Stop); + SetProtoMethod(isolate, constructor, "start", Start); + SetProtoMethod(isolate, constructor, "stop", Stop); - env->SetConstructorFunction(target, "Signal", constructor); + SetConstructorFunction(context, target, "Signal", constructor); } static void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/spawn_sync.cc b/src/spawn_sync.cc index afd08519d7f..2db7d82d32f 100644 --- a/src/spawn_sync.cc +++ b/src/spawn_sync.cc @@ -363,8 +363,7 @@ void SyncProcessRunner::Initialize(Local target, Local unused, Local context, void* priv) { - Environment* env = Environment::GetCurrent(context); - env->SetMethod(target, "spawn", Spawn); + SetMethod(context, target, "spawn", Spawn); } diff --git a/src/stream_base.cc b/src/stream_base.cc index a47fad97035..8701434c24f 100644 --- a/src/stream_base.cc +++ b/src/stream_base.cc @@ -1,7 +1,6 @@ #include "stream_base.h" // NOLINT(build/include_inline) #include "stream_base-inl.h" #include "stream_wrap.h" -#include "allocated_buffer-inl.h" #include "env-inl.h" #include "js_stream.h" @@ -401,21 +400,24 @@ void StreamBase::AddMethod(Environment* env, Local t, JSMethodFunction* stream_method, Local string) { + Isolate* isolate = env->isolate(); Local templ = - env->NewFunctionTemplate(stream_method, - signature, - ConstructorBehavior::kThrow, - SideEffectType::kHasNoSideEffect); + NewFunctionTemplate(isolate, + stream_method, + signature, + ConstructorBehavior::kThrow, + SideEffectType::kHasNoSideEffect); t->PrototypeTemplate()->SetAccessorProperty( string, templ, Local(), attributes); } void StreamBase::AddMethods(Environment* env, Local t) { - HandleScope scope(env->isolate()); + Isolate* isolate = env->isolate(); + HandleScope scope(isolate); enum PropertyAttribute attributes = static_cast(ReadOnly | DontDelete | DontEnum); - Local sig = Signature::New(env->isolate(), t); + Local sig = Signature::New(isolate, t); AddMethod(env, sig, attributes, t, GetFD, env->fd_string()); AddMethod( @@ -423,36 +425,40 @@ void StreamBase::AddMethods(Environment* env, Local t) { AddMethod(env, sig, attributes, t, GetBytesRead, env->bytes_read_string()); AddMethod( env, sig, attributes, t, GetBytesWritten, env->bytes_written_string()); - env->SetProtoMethod(t, "readStart", JSMethod<&StreamBase::ReadStartJS>); - env->SetProtoMethod(t, "readStop", JSMethod<&StreamBase::ReadStopJS>); - env->SetProtoMethod(t, "shutdown", JSMethod<&StreamBase::Shutdown>); - env->SetProtoMethod(t, - "useUserBuffer", - JSMethod<&StreamBase::UseUserBuffer>); - env->SetProtoMethod(t, "writev", JSMethod<&StreamBase::Writev>); - env->SetProtoMethod(t, "writeBuffer", JSMethod<&StreamBase::WriteBuffer>); - env->SetProtoMethod( - t, "writeAsciiString", JSMethod<&StreamBase::WriteString>); - env->SetProtoMethod( - t, "writeUtf8String", JSMethod<&StreamBase::WriteString>); - env->SetProtoMethod( - t, "writeUcs2String", JSMethod<&StreamBase::WriteString>); - env->SetProtoMethod( - t, "writeLatin1String", JSMethod<&StreamBase::WriteString>); - t->PrototypeTemplate()->Set(FIXED_ONE_BYTE_STRING(env->isolate(), - "isStreamBase"), - True(env->isolate())); + SetProtoMethod(isolate, t, "readStart", JSMethod<&StreamBase::ReadStartJS>); + SetProtoMethod(isolate, t, "readStop", JSMethod<&StreamBase::ReadStopJS>); + SetProtoMethod(isolate, t, "shutdown", JSMethod<&StreamBase::Shutdown>); + SetProtoMethod( + isolate, t, "useUserBuffer", JSMethod<&StreamBase::UseUserBuffer>); + SetProtoMethod(isolate, t, "writev", JSMethod<&StreamBase::Writev>); + SetProtoMethod(isolate, t, "writeBuffer", JSMethod<&StreamBase::WriteBuffer>); + SetProtoMethod(isolate, + t, + "writeAsciiString", + JSMethod<&StreamBase::WriteString>); + SetProtoMethod( + isolate, t, "writeUtf8String", JSMethod<&StreamBase::WriteString>); + SetProtoMethod( + isolate, t, "writeUcs2String", JSMethod<&StreamBase::WriteString>); + SetProtoMethod(isolate, + t, + "writeLatin1String", + JSMethod<&StreamBase::WriteString>); + t->PrototypeTemplate()->Set(FIXED_ONE_BYTE_STRING(isolate, "isStreamBase"), + True(isolate)); t->PrototypeTemplate()->SetAccessor( - FIXED_ONE_BYTE_STRING(env->isolate(), "onread"), - BaseObject::InternalFieldGet< - StreamBase::kOnReadFunctionField>, - BaseObject::InternalFieldSet< - StreamBase::kOnReadFunctionField, - &Value::IsFunction>); + FIXED_ONE_BYTE_STRING(isolate, "onread"), + BaseObject::InternalFieldGet, + BaseObject::InternalFieldSet); } void StreamBase::RegisterExternalReferences( ExternalReferenceRegistry* registry) { + // This function is called by a single thread during start up, so it is safe + // to use a local static variable here. + static bool is_registered = false; + if (is_registered) return; registry->Register(GetFD); registry->Register(GetExternal); registry->Register(GetBytesRead); @@ -472,6 +478,7 @@ void StreamBase::RegisterExternalReferences( registry->Register( BaseObject::InternalFieldSet); + is_registered = true; } void StreamBase::GetFD(const FunctionCallbackInfo& args) { @@ -601,6 +608,7 @@ void ReportWritesToJSStreamListener::OnStreamAfterReqFinished( StreamReq* req_wrap, int status) { StreamBase* stream = static_cast(stream_); Environment* env = stream->stream_env(); + if (env->is_stopping()) return; AsyncWrap* async_wrap = req_wrap->GetAsyncWrap(); HandleScope handle_scope(env->isolate()); Context::Scope context_scope(env->context()); diff --git a/src/stream_pipe.cc b/src/stream_pipe.cc index 94ba8604bd7..7d4be978a11 100644 --- a/src/stream_pipe.cc +++ b/src/stream_pipe.cc @@ -11,7 +11,11 @@ using v8::Function; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; +using v8::Isolate; +using v8::Just; using v8::Local; +using v8::Maybe; +using v8::Nothing; using v8::Object; using v8::Value; @@ -28,31 +32,6 @@ StreamPipe::StreamPipe(StreamBase* source, sink->PushStreamListener(&writable_listener_); uses_wants_write_ = sink->HasWantsWrite(); - - // Set up links between this object and the source/sink objects. - // In particular, this makes sure that they are garbage collected as a group, - // if that applies to the given streams (for example, Http2Streams use - // weak references). - if (obj->Set(env()->context(), - env()->source_string(), - source->GetObject()).IsNothing()) { - return; - } - if (source->GetObject()->Set(env()->context(), - env()->pipe_target_string(), - obj).IsNothing()) { - return; - } - if (obj->Set(env()->context(), - env()->sink_string(), - sink->GetObject()).IsNothing()) { - return; - } - if (sink->GetObject()->Set(env()->context(), - env()->pipe_source_string(), - obj).IsNothing()) { - return; - } } StreamPipe::~StreamPipe() { @@ -261,6 +240,38 @@ void StreamPipe::WritableListener::OnStreamRead(ssize_t nread, return previous_listener_->OnStreamRead(nread, buf); } +Maybe StreamPipe::New(StreamBase* source, + StreamBase* sink, + Local obj) { + std::unique_ptr stream_pipe(new StreamPipe(source, sink, obj)); + + // Set up links between this object and the source/sink objects. + // In particular, this makes sure that they are garbage collected as a group, + // if that applies to the given streams (for example, Http2Streams use + // weak references). + Environment* env = source->stream_env(); + if (obj->Set(env->context(), env->source_string(), source->GetObject()) + .IsNothing()) { + return Nothing(); + } + if (source->GetObject() + ->Set(env->context(), env->pipe_target_string(), obj) + .IsNothing()) { + return Nothing(); + } + if (obj->Set(env->context(), env->sink_string(), sink->GetObject()) + .IsNothing()) { + return Nothing(); + } + if (sink->GetObject() + ->Set(env->context(), env->pipe_source_string(), obj) + .IsNothing()) { + return Nothing(); + } + + return Just(stream_pipe.release()); +} + void StreamPipe::New(const FunctionCallbackInfo& args) { CHECK(args.IsConstructCall()); CHECK(args[0]->IsObject()); @@ -268,7 +279,7 @@ void StreamPipe::New(const FunctionCallbackInfo& args) { StreamBase* source = StreamBase::FromObject(args[0].As()); StreamBase* sink = StreamBase::FromObject(args[1].As()); - new StreamPipe(source, sink, args.This()); + if (StreamPipe::New(source, sink, args.This()).IsNothing()) return; } void StreamPipe::Start(const FunctionCallbackInfo& args) { @@ -303,17 +314,18 @@ void InitializeStreamPipe(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); // Create FunctionTemplate for FileHandle::CloseReq - Local pipe = env->NewFunctionTemplate(StreamPipe::New); - env->SetProtoMethod(pipe, "unpipe", StreamPipe::Unpipe); - env->SetProtoMethod(pipe, "start", StreamPipe::Start); - env->SetProtoMethod(pipe, "isClosed", StreamPipe::IsClosed); - env->SetProtoMethod(pipe, "pendingWrites", StreamPipe::PendingWrites); + Local pipe = NewFunctionTemplate(isolate, StreamPipe::New); + SetProtoMethod(isolate, pipe, "unpipe", StreamPipe::Unpipe); + SetProtoMethod(isolate, pipe, "start", StreamPipe::Start); + SetProtoMethod(isolate, pipe, "isClosed", StreamPipe::IsClosed); + SetProtoMethod(isolate, pipe, "pendingWrites", StreamPipe::PendingWrites); pipe->Inherit(AsyncWrap::GetConstructorTemplate(env)); pipe->InstanceTemplate()->SetInternalFieldCount( StreamPipe::kInternalFieldCount); - env->SetConstructorFunction(target, "StreamPipe", pipe); + SetConstructorFunction(context, target, "StreamPipe", pipe); } } // anonymous namespace diff --git a/src/stream_pipe.h b/src/stream_pipe.h index f411468294d..54ca5bfdd04 100644 --- a/src/stream_pipe.h +++ b/src/stream_pipe.h @@ -13,10 +13,9 @@ class StreamPipe : public AsyncWrap { void Unpipe(bool is_in_deletion = false); - // TODO(RaisinTen): Just like MessagePort, add the following overload: - // static StreamPipe* New(StreamBase* source, StreamBase* sink, - // v8::Local obj); - // so that we can indicate if there is a pending exception/termination. + static v8::Maybe New(StreamBase* source, + StreamBase* sink, + v8::Local obj); static void New(const v8::FunctionCallbackInfo& args); static void Start(const v8::FunctionCallbackInfo& args); static void Unpipe(const v8::FunctionCallbackInfo& args); diff --git a/src/stream_wrap.cc b/src/stream_wrap.cc index ff3df6bc5db..88f0bce66ad 100644 --- a/src/stream_wrap.cc +++ b/src/stream_wrap.cc @@ -25,6 +25,7 @@ #include "env-inl.h" #include "handle_wrap.h" #include "node_buffer.h" +#include "node_errors.h" #include "node_external_reference.h" #include "pipe_wrap.h" #include "req_wrap-inl.h" @@ -38,14 +39,19 @@ namespace node { +using errors::TryCatchScope; using v8::Context; using v8::DontDelete; using v8::EscapableHandleScope; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; +using v8::Isolate; +using v8::JustVoid; using v8::Local; +using v8::Maybe; using v8::MaybeLocal; +using v8::Nothing; using v8::Object; using v8::PropertyAttribute; using v8::ReadOnly; @@ -62,9 +68,10 @@ void LibuvStreamWrap::Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); Local sw = - FunctionTemplate::New(env->isolate(), IsConstructCallCallback); + NewFunctionTemplate(isolate, IsConstructCallCallback); sw->InstanceTemplate()->SetInternalFieldCount(StreamReq::kInternalFieldCount); // we need to set handle and callback to null, @@ -74,33 +81,34 @@ void LibuvStreamWrap::Initialize(Local target, // - oncomplete // - callback // - handle - sw->InstanceTemplate()->Set( - env->oncomplete_string(), - v8::Null(env->isolate())); - sw->InstanceTemplate()->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "callback"), - v8::Null(env->isolate())); - sw->InstanceTemplate()->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "handle"), - v8::Null(env->isolate())); + sw->InstanceTemplate()->Set(env->oncomplete_string(), v8::Null(isolate)); + sw->InstanceTemplate()->Set(FIXED_ONE_BYTE_STRING(isolate, "callback"), + v8::Null(isolate)); + sw->InstanceTemplate()->Set(FIXED_ONE_BYTE_STRING(isolate, "handle"), + v8::Null(isolate)); sw->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetConstructorFunction(target, "ShutdownWrap", sw); + SetConstructorFunction(context, target, "ShutdownWrap", sw); env->set_shutdown_wrap_template(sw->InstanceTemplate()); Local ww = - FunctionTemplate::New(env->isolate(), IsConstructCallCallback); + FunctionTemplate::New(isolate, IsConstructCallCallback); ww->InstanceTemplate()->SetInternalFieldCount( StreamReq::kInternalFieldCount); ww->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetConstructorFunction(target, "WriteWrap", ww); + SetConstructorFunction(context, target, "WriteWrap", ww); env->set_write_wrap_template(ww->InstanceTemplate()); NODE_DEFINE_CONSTANT(target, kReadBytesOrError); NODE_DEFINE_CONSTANT(target, kArrayBufferOffset); NODE_DEFINE_CONSTANT(target, kBytesWritten); NODE_DEFINE_CONSTANT(target, kLastWriteWasAsync); - target->Set(context, FIXED_ONE_BYTE_STRING(env->isolate(), "streamBaseState"), - env->stream_base_state().GetJSArray()).Check(); + target + ->Set(context, + FIXED_ONE_BYTE_STRING(isolate, "streamBaseState"), + env->stream_base_state().GetJSArray()) + .Check(); } void LibuvStreamWrap::RegisterExternalReferences( @@ -108,8 +116,7 @@ void LibuvStreamWrap::RegisterExternalReferences( registry->Register(IsConstructCallCallback); registry->Register(GetWriteQueueSize); registry->Register(SetBlocking); - // TODO(joyee): StreamBase::RegisterExternalReferences() is called somewhere - // else but we may want to do it here too and guard it with a static flag. + StreamBase::RegisterExternalReferences(registry); } LibuvStreamWrap::LibuvStreamWrap(Environment* env, @@ -130,23 +137,23 @@ Local LibuvStreamWrap::GetConstructorTemplate( Environment* env) { Local tmpl = env->libuv_stream_wrap_ctor_template(); if (tmpl.IsEmpty()) { - tmpl = env->NewFunctionTemplate(nullptr); - tmpl->SetClassName( - FIXED_ONE_BYTE_STRING(env->isolate(), "LibuvStreamWrap")); + Isolate* isolate = env->isolate(); + tmpl = NewFunctionTemplate(isolate, nullptr); + tmpl->SetClassName(FIXED_ONE_BYTE_STRING(isolate, "LibuvStreamWrap")); tmpl->Inherit(HandleWrap::GetConstructorTemplate(env)); tmpl->InstanceTemplate()->SetInternalFieldCount( StreamBase::kInternalFieldCount); Local get_write_queue_size = - FunctionTemplate::New(env->isolate(), + FunctionTemplate::New(isolate, GetWriteQueueSize, Local(), - Signature::New(env->isolate(), tmpl)); + Signature::New(isolate, tmpl)); tmpl->PrototypeTemplate()->SetAccessorProperty( env->write_queue_size_string(), get_write_queue_size, Local(), static_cast(ReadOnly | DontDelete)); - env->SetProtoMethod(tmpl, "setBlocking", SetBlocking); + SetProtoMethod(isolate, tmpl, "setBlocking", SetBlocking); StreamBase::AddMethods(env, tmpl); env->set_libuv_stream_wrap_ctor_template(tmpl); } @@ -192,15 +199,19 @@ bool LibuvStreamWrap::IsIPCPipe() { return is_named_pipe_ipc(); } - int LibuvStreamWrap::ReadStart() { - return uv_read_start(stream(), [](uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static_cast(handle->data)->OnUvAlloc(suggested_size, buf); - }, [](uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { - static_cast(stream->data)->OnUvRead(nread, buf); - }); + return uv_read_start( + stream(), + [](uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) { + static_cast(handle->data) + ->OnUvAlloc(suggested_size, buf); + }, + [](uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { + LibuvStreamWrap* wrap = static_cast(stream->data); + TryCatchScope try_catch(wrap->env()); + try_catch.SetVerbose(true); + wrap->OnUvRead(nread, buf); + }); } @@ -240,8 +251,7 @@ static MaybeLocal AcceptHandle(Environment* env, return scope.Escape(wrap_obj); } - -void LibuvStreamWrap::OnUvRead(ssize_t nread, const uv_buf_t* buf) { +Maybe LibuvStreamWrap::OnUvRead(ssize_t nread, const uv_buf_t* buf) { HandleScope scope(env()->isolate()); Context::Scope context_scope(env()->context()); uv_handle_type type = UV_UNKNOWN_HANDLE; @@ -269,18 +279,21 @@ void LibuvStreamWrap::OnUvRead(ssize_t nread, const uv_buf_t* buf) { } Local local_pending_obj; - if (pending_obj.ToLocal(&local_pending_obj) && - object()->Set(env()->context(), - env()->pending_handle_string(), - local_pending_obj).IsNothing()) { - return; + if (type != UV_UNKNOWN_HANDLE && + (!pending_obj.ToLocal(&local_pending_obj) || + object() + ->Set(env()->context(), + env()->pending_handle_string(), + local_pending_obj) + .IsNothing())) { + return Nothing(); } } EmitRead(nread, *buf); + return JustVoid(); } - void LibuvStreamWrap::GetWriteQueueSize( const FunctionCallbackInfo& info) { LibuvStreamWrap* wrap; diff --git a/src/stream_wrap.h b/src/stream_wrap.h index 8cbce923bfe..197303990c9 100644 --- a/src/stream_wrap.h +++ b/src/stream_wrap.h @@ -105,9 +105,7 @@ class LibuvStreamWrap : public HandleWrap, public StreamBase { // Callbacks for libuv void OnUvAlloc(size_t suggested_size, uv_buf_t* buf); - // TODO(RaisinTen): Update the return type to a Maybe, so that we can indicate - // if there is a pending exception/termination. - void OnUvRead(ssize_t nread, const uv_buf_t* buf); + v8::Maybe OnUvRead(ssize_t nread, const uv_buf_t* buf); static void AfterUvWrite(uv_write_t* req, int status); static void AfterUvShutdown(uv_shutdown_t* req, int status); diff --git a/src/string_bytes.cc b/src/string_bytes.cc index 5b530c85477..2f512a844f1 100644 --- a/src/string_bytes.cc +++ b/src/string_bytes.cc @@ -260,12 +260,8 @@ static size_t hex_decode(char* buf, return i; } -size_t StringBytes::WriteUCS2(Isolate* isolate, - char* buf, - size_t buflen, - Local str, - int flags, - size_t* chars_written) { +size_t StringBytes::WriteUCS2( + Isolate* isolate, char* buf, size_t buflen, Local str, int flags) { uint16_t* const dst = reinterpret_cast(buf); size_t max_chars = buflen / sizeof(*dst); @@ -277,7 +273,6 @@ size_t StringBytes::WriteUCS2(Isolate* isolate, size_t nchars; if (aligned_dst == dst) { nchars = str->Write(isolate, dst, 0, max_chars, flags); - *chars_written = nchars; return nchars * sizeof(*dst); } @@ -285,7 +280,9 @@ size_t StringBytes::WriteUCS2(Isolate* isolate, // Write all but the last char max_chars = std::min(max_chars, static_cast(str->Length())); - if (max_chars == 0) return 0; + if (max_chars == 0) { + return 0; + } nchars = str->Write(isolate, aligned_dst, 0, max_chars - 1, flags); CHECK_EQ(nchars, max_chars - 1); @@ -298,23 +295,16 @@ size_t StringBytes::WriteUCS2(Isolate* isolate, memcpy(buf + nchars * sizeof(*dst), &last, sizeof(last)); nchars++; - *chars_written = nchars; return nchars * sizeof(*dst); } - size_t StringBytes::Write(Isolate* isolate, char* buf, size_t buflen, Local val, - enum encoding encoding, - int* chars_written) { + enum encoding encoding) { HandleScope scope(isolate); size_t nbytes; - int nchars; - - if (chars_written == nullptr) - chars_written = &nchars; CHECK(val->IsString() == true); Local str = val.As(); @@ -334,19 +324,15 @@ size_t StringBytes::Write(Isolate* isolate, uint8_t* const dst = reinterpret_cast(buf); nbytes = str->WriteOneByte(isolate, dst, 0, buflen, flags); } - *chars_written = nbytes; break; case BUFFER: case UTF8: - nbytes = str->WriteUtf8(isolate, buf, buflen, chars_written, flags); + nbytes = str->WriteUtf8(isolate, buf, buflen, nullptr, flags); break; case UCS2: { - size_t nchars; - - nbytes = WriteUCS2(isolate, buf, buflen, str, flags, &nchars); - *chars_written = static_cast(nchars); + nbytes = WriteUCS2(isolate, buf, buflen, str, flags); // Node's "ucs2" encoding wants LE character data stored in // the Buffer, so we need to reorder on BE platforms. See @@ -368,7 +354,6 @@ size_t StringBytes::Write(Isolate* isolate, String::Value value(isolate, str); nbytes = base64_decode(buf, buflen, *value, value.length()); } - *chars_written = nbytes; break; case HEX: @@ -379,7 +364,6 @@ size_t StringBytes::Write(Isolate* isolate, String::Value value(isolate, str); nbytes = hex_decode(buf, buflen, *value, value.length()); } - *chars_written = nbytes; break; default: @@ -390,7 +374,6 @@ size_t StringBytes::Write(Isolate* isolate, return nbytes; } - // Quick and dirty size calculation // Will always be at least big enough, but may have some extra // UTF8 can be as much as 3x the size, Base64 can have 1-2 extra bytes diff --git a/src/string_bytes.h b/src/string_bytes.h index 69bb828e018..ad1f15b0570 100644 --- a/src/string_bytes.h +++ b/src/string_bytes.h @@ -75,8 +75,7 @@ class StringBytes { char* buf, size_t buflen, v8::Local val, - enum encoding enc, - int* chars_written = nullptr); + enum encoding enc); // Take the bytes in the src, and turn it into a Buffer or String. static v8::MaybeLocal Encode(v8::Isolate* isolate, @@ -111,8 +110,7 @@ class StringBytes { char* buf, size_t buflen, v8::Local str, - int flags, - size_t* chars_written); + int flags); }; } // namespace node diff --git a/src/string_decoder.cc b/src/string_decoder.cc index a915f5744f3..b447474c09f 100644 --- a/src/string_decoder.cc +++ b/src/string_decoder.cc @@ -328,8 +328,8 @@ void InitializeStringDecoder(Local target, FIXED_ONE_BYTE_STRING(isolate, "kSize"), Integer::New(isolate, sizeof(StringDecoder))).Check(); - env->SetMethod(target, "decode", DecodeData); - env->SetMethod(target, "flush", FlushData); + SetMethod(context, target, "decode", DecodeData); + SetMethod(context, target, "flush", FlushData); } } // anonymous namespace diff --git a/src/tcp_wrap.cc b/src/tcp_wrap.cc index 669206fc6bf..cd9fbb743b0 100644 --- a/src/tcp_wrap.cc +++ b/src/tcp_wrap.cc @@ -45,6 +45,7 @@ using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::Int32; using v8::Integer; +using v8::Isolate; using v8::Local; using v8::MaybeLocal; using v8::Object; @@ -73,8 +74,9 @@ void TCPWrap::Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - Local t = env->NewFunctionTemplate(New); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate()->SetInternalFieldCount(StreamBase::kInternalFieldCount); // Init properties @@ -85,31 +87,36 @@ void TCPWrap::Initialize(Local target, t->Inherit(LibuvStreamWrap::GetConstructorTemplate(env)); - env->SetProtoMethod(t, "open", Open); - env->SetProtoMethod(t, "bind", Bind); - env->SetProtoMethod(t, "listen", Listen); - env->SetProtoMethod(t, "connect", Connect); - env->SetProtoMethod(t, "bind6", Bind6); - env->SetProtoMethod(t, "connect6", Connect6); - env->SetProtoMethod(t, "getsockname", - GetSockOrPeerName); - env->SetProtoMethod(t, "getpeername", - GetSockOrPeerName); - env->SetProtoMethod(t, "setNoDelay", SetNoDelay); - env->SetProtoMethod(t, "setKeepAlive", SetKeepAlive); + SetProtoMethod(isolate, t, "open", Open); + SetProtoMethod(isolate, t, "bind", Bind); + SetProtoMethod(isolate, t, "listen", Listen); + SetProtoMethod(isolate, t, "connect", Connect); + SetProtoMethod(isolate, t, "bind6", Bind6); + SetProtoMethod(isolate, t, "connect6", Connect6); + SetProtoMethod(isolate, + t, + "getsockname", + GetSockOrPeerName); + SetProtoMethod(isolate, + t, + "getpeername", + GetSockOrPeerName); + SetProtoMethod(isolate, t, "setNoDelay", SetNoDelay); + SetProtoMethod(isolate, t, "setKeepAlive", SetKeepAlive); + SetProtoMethod(isolate, t, "reset", Reset); #ifdef _WIN32 - env->SetProtoMethod(t, "setSimultaneousAccepts", SetSimultaneousAccepts); + SetProtoMethod(isolate, t, "setSimultaneousAccepts", SetSimultaneousAccepts); #endif - env->SetConstructorFunction(target, "TCP", t); + SetConstructorFunction(context, target, "TCP", t); env->set_tcp_constructor_template(t); // Create FunctionTemplate for TCPConnectWrap. Local cwt = BaseObject::MakeLazilyInitializedJSTemplate(env); cwt->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetConstructorFunction(target, "TCPConnectWrap", cwt); + SetConstructorFunction(context, target, "TCPConnectWrap", cwt); // Define constants Local constants = Object::New(env->isolate()); @@ -134,6 +141,7 @@ void TCPWrap::RegisterExternalReferences(ExternalReferenceRegistry* registry) { registry->Register(GetSockOrPeerName); registry->Register(SetNoDelay); registry->Register(SetKeepAlive); + registry->Register(Reset); #ifdef _WIN32 registry->Register(SetSimultaneousAccepts); #endif @@ -333,18 +341,51 @@ void TCPWrap::Connect(const FunctionCallbackInfo& args, &wrap->handle_, reinterpret_cast(&addr), AfterConnect); - if (err) + if (err) { delete req_wrap; + } else { + CHECK(args[2]->Uint32Value(env->context()).IsJust()); + int port = args[2]->Uint32Value(env->context()).FromJust(); + TRACE_EVENT_NESTABLE_ASYNC_BEGIN2(TRACING_CATEGORY_NODE2(net, native), + "connect", + req_wrap, + "ip", + TRACE_STR_COPY(*ip_address), + "port", + port); + } } args.GetReturnValue().Set(err); } +void TCPWrap::Reset(const FunctionCallbackInfo& args) { + TCPWrap* wrap; + ASSIGN_OR_RETURN_UNWRAP( + &wrap, args.Holder(), args.GetReturnValue().Set(UV_EBADF)); + + int err = wrap->Reset(args[0]); + args.GetReturnValue().Set(err); +} + +int TCPWrap::Reset(Local close_callback) { + if (state_ != kInitialized) return 0; + + int err = uv_tcp_close_reset(&handle_, OnClose); + state_ = kClosing; + if (!err & !close_callback.IsEmpty() && close_callback->IsFunction() && + !persistent().IsEmpty()) { + object() + ->Set(env()->context(), env()->handle_onclose_symbol(), close_callback) + .Check(); + } + return err; +} // also used by udp_wrap.cc -Local AddressToJS(Environment* env, - const sockaddr* addr, - Local info) { +MaybeLocal AddressToJS(Environment* env, + const sockaddr* addr, + Local info) { EscapableHandleScope scope(env->isolate()); char ip[INET6_ADDRSTRLEN + UV_IF_NAMESIZE]; const sockaddr_in* a4; @@ -371,8 +412,7 @@ Local AddressToJS(Environment* env, &scopeidlen); if (r) { env->ThrowUVException(r, "uv_if_indextoiid"); - // TODO(addaleax): Do proper MaybeLocal handling here - return scope.Escape(info); + return {}; } } port = ntohs(a6->sin6_port); diff --git a/src/tcp_wrap.h b/src/tcp_wrap.h index 3abf4ded19f..b561fef0d31 100644 --- a/src/tcp_wrap.h +++ b/src/tcp_wrap.h @@ -88,6 +88,8 @@ class TCPWrap : public ConnectionWrap { const v8::FunctionCallbackInfo& args, int family, std::function uv_ip_addr); + static void Reset(const v8::FunctionCallbackInfo& args); + int Reset(v8::Local close_callback = v8::Local()); #ifdef _WIN32 static void SetSimultaneousAccepts( diff --git a/src/timers.cc b/src/timers.cc index 5014f2c66a5..2ecfd25f7ee 100644 --- a/src/timers.cc +++ b/src/timers.cc @@ -48,15 +48,17 @@ void Initialize(Local target, void* priv) { Environment* env = Environment::GetCurrent(context); - env->SetMethod(target, "getLibuvNow", GetLibuvNow); - env->SetMethod(target, "setupTimers", SetupTimers); - env->SetMethod(target, "scheduleTimer", ScheduleTimer); - env->SetMethod(target, "toggleTimerRef", ToggleTimerRef); - env->SetMethod(target, "toggleImmediateRef", ToggleImmediateRef); + SetMethod(context, target, "getLibuvNow", GetLibuvNow); + SetMethod(context, target, "setupTimers", SetupTimers); + SetMethod(context, target, "scheduleTimer", ScheduleTimer); + SetMethod(context, target, "toggleTimerRef", ToggleTimerRef); + SetMethod(context, target, "toggleImmediateRef", ToggleImmediateRef); - target->Set(env->context(), - FIXED_ONE_BYTE_STRING(env->isolate(), "immediateInfo"), - env->immediate_info()->fields().GetJSArray()).Check(); + target + ->Set(context, + FIXED_ONE_BYTE_STRING(env->isolate(), "immediateInfo"), + env->immediate_info()->fields().GetJSArray()) + .Check(); } } // anonymous namespace void RegisterTimerExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/tty_wrap.cc b/src/tty_wrap.cc index 1c749a9741c..0a7c1467d24 100644 --- a/src/tty_wrap.cc +++ b/src/tty_wrap.cc @@ -36,6 +36,7 @@ using v8::Context; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::Integer; +using v8::Isolate; using v8::Local; using v8::Object; using v8::String; @@ -53,22 +54,24 @@ void TTYWrap::Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); Local ttyString = FIXED_ONE_BYTE_STRING(env->isolate(), "TTY"); - Local t = env->NewFunctionTemplate(New); + Local t = NewFunctionTemplate(isolate, New); t->SetClassName(ttyString); t->InstanceTemplate()->SetInternalFieldCount(StreamBase::kInternalFieldCount); t->Inherit(LibuvStreamWrap::GetConstructorTemplate(env)); - env->SetProtoMethodNoSideEffect(t, "getWindowSize", TTYWrap::GetWindowSize); - env->SetProtoMethod(t, "setRawMode", SetRawMode); + SetProtoMethodNoSideEffect( + isolate, t, "getWindowSize", TTYWrap::GetWindowSize); + SetProtoMethod(isolate, t, "setRawMode", SetRawMode); - env->SetMethodNoSideEffect(target, "isTTY", IsTTY); + SetMethodNoSideEffect(context, target, "isTTY", IsTTY); Local func; - if (t->GetFunction(env->context()).ToLocal(&func) && - target->Set(env->context(), ttyString, func).IsJust()) { + if (t->GetFunction(context).ToLocal(&func) && + target->Set(context, ttyString, func).IsJust()) { env->set_tty_constructor_template(t); } } diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index 4a0c6aeaa94..5ea38f6732d 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -22,6 +22,7 @@ #include "udp_wrap.h" #include "env-inl.h" #include "node_buffer.h" +#include "node_errors.h" #include "node_sockaddr-inl.h" #include "handle_wrap.h" #include "req_wrap-inl.h" @@ -29,6 +30,7 @@ namespace node { +using errors::TryCatchScope; using v8::Array; using v8::ArrayBuffer; using v8::BackingStore; @@ -108,8 +110,8 @@ UDPWrapBase* UDPWrapBase::FromObject(Local obj) { } void UDPWrapBase::AddMethods(Environment* env, Local t) { - env->SetProtoMethod(t, "recvStart", RecvStart); - env->SetProtoMethod(t, "recvStop", RecvStop); + SetProtoMethod(env->isolate(), t, "recvStart", RecvStart); + SetProtoMethod(env->isolate(), t, "recvStop", RecvStop); } UDPWrap::UDPWrap(Environment* env, Local object) @@ -132,21 +134,19 @@ void UDPWrap::Initialize(Local target, Local context, void* priv) { Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); - Local t = env->NewFunctionTemplate(New); + Local t = NewFunctionTemplate(isolate, New); t->InstanceTemplate()->SetInternalFieldCount( UDPWrapBase::kInternalFieldCount); enum PropertyAttribute attributes = static_cast(ReadOnly | DontDelete); - Local signature = Signature::New(env->isolate(), t); + Local signature = Signature::New(isolate, t); Local get_fd_templ = - FunctionTemplate::New(env->isolate(), - UDPWrap::GetFD, - Local(), - signature); + FunctionTemplate::New(isolate, UDPWrap::GetFD, Local(), signature); t->PrototypeTemplate()->SetAccessorProperty(env->fd_string(), get_fd_templ, @@ -154,44 +154,50 @@ void UDPWrap::Initialize(Local target, attributes); UDPWrapBase::AddMethods(env, t); - env->SetProtoMethod(t, "open", Open); - env->SetProtoMethod(t, "bind", Bind); - env->SetProtoMethod(t, "connect", Connect); - env->SetProtoMethod(t, "send", Send); - env->SetProtoMethod(t, "bind6", Bind6); - env->SetProtoMethod(t, "connect6", Connect6); - env->SetProtoMethod(t, "send6", Send6); - env->SetProtoMethod(t, "disconnect", Disconnect); - env->SetProtoMethod(t, "getpeername", - GetSockOrPeerName); - env->SetProtoMethod(t, "getsockname", - GetSockOrPeerName); - env->SetProtoMethod(t, "addMembership", AddMembership); - env->SetProtoMethod(t, "dropMembership", DropMembership); - env->SetProtoMethod(t, "addSourceSpecificMembership", - AddSourceSpecificMembership); - env->SetProtoMethod(t, "dropSourceSpecificMembership", - DropSourceSpecificMembership); - env->SetProtoMethod(t, "setMulticastInterface", SetMulticastInterface); - env->SetProtoMethod(t, "setMulticastTTL", SetMulticastTTL); - env->SetProtoMethod(t, "setMulticastLoopback", SetMulticastLoopback); - env->SetProtoMethod(t, "setBroadcast", SetBroadcast); - env->SetProtoMethod(t, "setTTL", SetTTL); - env->SetProtoMethod(t, "bufferSize", BufferSize); + SetProtoMethod(isolate, t, "open", Open); + SetProtoMethod(isolate, t, "bind", Bind); + SetProtoMethod(isolate, t, "connect", Connect); + SetProtoMethod(isolate, t, "send", Send); + SetProtoMethod(isolate, t, "bind6", Bind6); + SetProtoMethod(isolate, t, "connect6", Connect6); + SetProtoMethod(isolate, t, "send6", Send6); + SetProtoMethod(isolate, t, "disconnect", Disconnect); + SetProtoMethod(isolate, + t, + "getpeername", + GetSockOrPeerName); + SetProtoMethod(isolate, + t, + "getsockname", + GetSockOrPeerName); + SetProtoMethod(isolate, t, "addMembership", AddMembership); + SetProtoMethod(isolate, t, "dropMembership", DropMembership); + SetProtoMethod( + isolate, t, "addSourceSpecificMembership", AddSourceSpecificMembership); + SetProtoMethod( + isolate, t, "dropSourceSpecificMembership", DropSourceSpecificMembership); + SetProtoMethod(isolate, t, "setMulticastInterface", SetMulticastInterface); + SetProtoMethod(isolate, t, "setMulticastTTL", SetMulticastTTL); + SetProtoMethod(isolate, t, "setMulticastLoopback", SetMulticastLoopback); + SetProtoMethod(isolate, t, "setBroadcast", SetBroadcast); + SetProtoMethod(isolate, t, "setTTL", SetTTL); + SetProtoMethod(isolate, t, "bufferSize", BufferSize); + SetProtoMethodNoSideEffect(isolate, t, "getSendQueueSize", GetSendQueueSize); + SetProtoMethodNoSideEffect( + isolate, t, "getSendQueueCount", GetSendQueueCount); t->Inherit(HandleWrap::GetConstructorTemplate(env)); - env->SetConstructorFunction(target, "UDP", t); - env->set_udp_constructor_function( - t->GetFunction(env->context()).ToLocalChecked()); + SetConstructorFunction(context, target, "UDP", t); + env->set_udp_constructor_function(t->GetFunction(context).ToLocalChecked()); // Create FunctionTemplate for SendWrap Local swt = BaseObject::MakeLazilyInitializedJSTemplate(env); swt->Inherit(AsyncWrap::GetConstructorTemplate(env)); - env->SetConstructorFunction(target, "SendWrap", swt); + SetConstructorFunction(context, target, "SendWrap", swt); - Local constants = Object::New(env->isolate()); + Local constants = Object::New(isolate); NODE_DEFINE_CONSTANT(constants, UV_UDP_IPV6ONLY); NODE_DEFINE_CONSTANT(constants, UV_UDP_REUSEADDR); target->Set(context, @@ -663,7 +669,7 @@ int UDPWrap::RecvStop() { void UDPWrap::OnSendDone(ReqWrap* req, int status) { - std::unique_ptr req_wrap{static_cast(req)}; + BaseObjectPtr req_wrap{static_cast(req)}; if (req_wrap->have_callback()) { Environment* env = req_wrap->env(); HandleScope handle_scope(env->isolate()); @@ -728,9 +734,45 @@ void UDPWrap::OnRecv(ssize_t nread, bs = BackingStore::Reallocate(isolate, std::move(bs), nread); } + Local address; + { + bool has_caught = false; + { + TryCatchScope try_catch(env); + if (!AddressToJS(env, addr).ToLocal(&address)) { + DCHECK(try_catch.HasCaught() && !try_catch.HasTerminated()); + argv[2] = try_catch.Exception(); + DCHECK(!argv[2].IsEmpty()); + has_caught = true; + } + } + if (has_caught) { + DCHECK(!argv[2].IsEmpty()); + MakeCallback(env->onerror_string(), arraysize(argv), argv); + return; + } + } + Local ab = ArrayBuffer::New(isolate, std::move(bs)); - argv[2] = Buffer::New(env, ab, 0, ab->ByteLength()).ToLocalChecked(); - argv[3] = AddressToJS(env, addr); + { + bool has_caught = false; + { + TryCatchScope try_catch(env); + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&argv[2])) { + DCHECK(try_catch.HasCaught() && !try_catch.HasTerminated()); + argv[2] = try_catch.Exception(); + DCHECK(!argv[2].IsEmpty()); + has_caught = true; + } + } + if (has_caught) { + DCHECK(!argv[2].IsEmpty()); + MakeCallback(env->onerror_string(), arraysize(argv), argv); + return; + } + } + + argv[3] = address; MakeCallback(env->onmessage_string(), arraysize(argv), argv); } @@ -744,6 +786,23 @@ MaybeLocal UDPWrap::Instantiate(Environment* env, return env->udp_constructor_function()->NewInstance(env->context()); } +void UDPWrap::GetSendQueueSize(const FunctionCallbackInfo& args) { + UDPWrap* wrap; + ASSIGN_OR_RETURN_UNWRAP( + &wrap, args.Holder(), args.GetReturnValue().Set(UV_EBADF)); + + size_t size = uv_udp_get_send_queue_size(&wrap->handle_); + args.GetReturnValue().Set(static_cast(size)); +} + +void UDPWrap::GetSendQueueCount(const FunctionCallbackInfo& args) { + UDPWrap* wrap; + ASSIGN_OR_RETURN_UNWRAP( + &wrap, args.Holder(), args.GetReturnValue().Set(UV_EBADF)); + + size_t count = uv_udp_get_send_queue_count(&wrap->handle_); + args.GetReturnValue().Set(static_cast(count)); +} } // namespace node diff --git a/src/udp_wrap.h b/src/udp_wrap.h index 75a123d8fa7..83aeb1ec084 100644 --- a/src/udp_wrap.h +++ b/src/udp_wrap.h @@ -150,6 +150,9 @@ class UDPWrap final : public HandleWrap, static void SetBroadcast(const v8::FunctionCallbackInfo& args); static void SetTTL(const v8::FunctionCallbackInfo& args); static void BufferSize(const v8::FunctionCallbackInfo& args); + static void GetSendQueueSize(const v8::FunctionCallbackInfo& args); + static void GetSendQueueCount( + const v8::FunctionCallbackInfo& args); // UDPListener implementation uv_buf_t OnAlloc(size_t suggested_size) override; diff --git a/src/util-inl.h b/src/util-inl.h index b860c7008a3..1230c5ab90b 100644 --- a/src/util-inl.h +++ b/src/util-inl.h @@ -213,14 +213,268 @@ inline v8::Local OneByteString(v8::Isolate* isolate, .ToLocalChecked(); } -void SwapBytes16(char* data, size_t nbytes) { +// simd swapping only works for X86 +#if (__x86_64__ || __i386__ || _M_X86 || _M_X64) +#include +// devtoolset-8 issue: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71659 +#include +#ifdef _MSC_VER +#include +#define __cpuid_count(__level, __count, __eax, __ebx, __ecx, __edx) \ + { \ + int info[4]; \ + __cpuidex(info, __level, __count); \ + __eax = info[0]; \ + __ebx = info[1]; \ + __ecx = info[2]; \ + __edx = info[3]; \ + } +#define __cpuid(__level, __eax, __ebx, __ecx, __edx) \ + __cpuid_count(__level, 0, __eax, __ebx, __ecx, __edx) +#else +#include +#endif + +#define XSAVE_XRSTORE_bit (1 << 27) +#define AVX512VBMI_bit (1 << 1) +#define SSSE3_bit (1 << 9) +#define SSE41_bit (1 << 19) +#define SSE42_bit (1 << 20) + +#ifndef __GNUC__ +#define __attribute__() +#endif + +// This static variable is initialized once when the library is first +// used, and not changed in the remaining lifetime of the program. +inline static int simd_level = 0; + +__attribute__((target("avx512vbmi"))) inline static void set_simd_level() { + // fast return if simd_level already judged + if (simd_level != 0) { + return; + } else { + unsigned int eax, ebx = 0, ecx = 0, edx; + unsigned int max_level; + +#ifdef _MSC_VER + int info[4]; + __cpuidex(info, 0, 0); + max_level = info[0]; +#else + max_level = __get_cpuid_max(0, nullptr); +#endif + + // Try to find AVX512vbmi as the fasted path: + // 1) CPUID indicates that the OS uses XSAVE and XRSTORE instructions + // (allowing saving YMM registers on context switch) + // 2) CPUID indicates support for AVX512VBMI + // 3) XGETBV indicates the AVX registers will be saved and restored on + // context switch + if (max_level >= 1) { + __cpuid_count(1, 0, eax, ebx, ecx, edx); + if (ecx & XSAVE_XRSTORE_bit) { + uint64_t xcr_mask; + xcr_mask = _xgetbv(0); + if (xcr_mask & 0x6) { + if (max_level >= 7) { + __cpuid_count(7, 0, eax, ebx, ecx, edx); + if (ecx & AVX512VBMI_bit) { + simd_level = 1; + return; + } + } + } + } + } + + // Fall into SSE path, expected supported by almost all systems + if (max_level >= 1) { + __cpuid(1, eax, ebx, ecx, edx); + if ((ecx & SSSE3_bit) | (ecx & SSE41_bit) | (ecx & SSE42_bit)) { + simd_level = 2; + return; + } + } + + // Fall into legacy bit operations which is slowest + simd_level = 3; + return; + } +} + +__attribute__((target("avx512vbmi"))) inline static size_t swap16_avx( + char* data, size_t nbytes) { + size_t processed = 0; + __m512i shuffle_input = _mm512_set_epi64(0x3e3f3c3d3a3b3839, + 0x3637343532333031, + 0x2e2f2c2d2a2b2829, + 0x2627242522232021, + 0x1e1f1c1d1a1b1819, + 0x1617141512131011, + 0x0e0f0c0d0a0b0809, + 0x0607040502030001); + while (nbytes >= 64) { + __m512i v = _mm512_loadu_si512(data); + __m512i in = _mm512_permutexvar_epi8(shuffle_input, v); + _mm512_storeu_si512(data, in); + data += 64; + nbytes -= 64; + processed += 64; + } + return processed; +} + +__attribute__((target("avx512vbmi"))) inline static size_t swap32_avx( + char* data, size_t nbytes) { + size_t processed = 0; + __m512i shuffle_input = _mm512_set_epi64(0x3c3d3e3f38393a3b, + 0x3435363730313233, + 0x2c2d2e2f28292a2b, + 0x2425262720212223, + 0x1c1d1e1f18191a1b, + 0x1415161710111213, + 0x0c0d0e0f08090a0b, + 0x0405060700010203); + while (nbytes >= 64) { + __m512i v = _mm512_loadu_si512(data); + __m512i in = _mm512_permutexvar_epi8(shuffle_input, v); + _mm512_storeu_si512(data, in); + + data += 64; + nbytes -= 64; + processed += 64; + } + return processed; +} + +__attribute__((target("avx512vbmi"))) inline static size_t swap64_avx( + char* data, size_t nbytes) { + size_t processed = 0; + __m512i shuffle_input = _mm512_set_epi64(0x38393a3b3c3d3e3f, + 0x3031323334353637, + 0x28292a2b2c2d2e2f, + 0x2021222324252627, + 0x18191a1b1c1d1e1f, + 0x1011121314151617, + 0x08090a0b0c0d0e0f, + 0x0001020304050607); + while (nbytes >= 64) { + __m512i v = _mm512_loadu_si512(data); + __m512i in = _mm512_permutexvar_epi8(shuffle_input, v); + _mm512_storeu_si512(data, in); + data += 64; + nbytes -= 64; + processed += 64; + } + return processed; +} + +__attribute__((target("ssse3"))) inline static size_t swap16_sse( + char* data, size_t nbytes) { + size_t processed = 0; + __m128i shuffle_input = + _mm_set_epi64x(0x0e0f0c0d0a0b0809, 0x0607040502030001); + while (nbytes >= 16) { + __m128i v = _mm_loadu_si128(reinterpret_cast<__m128i*>(data)); + __m128i in = _mm_shuffle_epi8(v, shuffle_input); + _mm_storeu_si128(reinterpret_cast<__m128i*>(data), in); + data += 16; + nbytes -= 16; + processed += 16; + } + return processed; +} + +__attribute__((target("ssse3"))) inline static size_t swap32_sse( + char* data, size_t nbytes) { + size_t processed = 0; + __m128i shuffle_input = + _mm_set_epi64x(0x0c0d0e0f08090a0b, 0x0405060700010203); + while (nbytes >= 16) { + __m128i v = _mm_loadu_si128(reinterpret_cast<__m128i*>(data)); + __m128i in = _mm_shuffle_epi8(v, shuffle_input); + _mm_storeu_si128(reinterpret_cast<__m128i*>(data), in); + data += 16; + nbytes -= 16; + processed += 16; + } + return processed; +} + +__attribute__((target("ssse3"))) inline static size_t swap64_sse( + char* data, size_t nbytes) { + size_t processed = 0; + __m128i shuffle_input = + _mm_set_epi64x(0x08090a0b0c0d0e0f, 0x0001020304050607); + while (nbytes >= 16) { + __m128i v = _mm_loadu_si128(reinterpret_cast<__m128i*>(data)); + __m128i in = _mm_shuffle_epi8(v, shuffle_input); + _mm_storeu_si128(reinterpret_cast<__m128i*>(data), in); + data += 16; + nbytes -= 16; + processed += 16; + } + return processed; +} + +#if (__x86_64__ || __i386__ || _M_X86 || _M_X64) +__attribute__((target("avx512vbmi"))) inline static size_t swap_simd( +#else +inline static size_t swap_simd( +#endif + char* data, size_t nbytes, size_t size) { + size_t processed = 0; + // early return if level equals to 3 means no simd support + set_simd_level(); + if (simd_level == 1) { + switch (size) { + case 16: + processed = swap16_avx(data, nbytes); + break; + case 32: + processed = swap32_avx(data, nbytes); + break; + case 64: + processed = swap64_avx(data, nbytes); + break; + } + } else if (simd_level == 2) { + switch (size) { + case 16: + processed = swap16_sse(data, nbytes); + break; + case 32: + processed = swap32_sse(data, nbytes); + break; + case 64: + processed = swap64_sse(data, nbytes); + break; + } + } + return processed; +} + +#else +inline static size_t swap_simd(char* data, size_t nbytes, size_t size) { + return 0; +} +#endif +#if (__x86_64__ || __i386__ || _M_X86 || _M_X64) +__attribute__((target("avx512vbmi"))) void SwapBytes16(char* data, +#else +void SwapBytes16(char* data, +#endif + size_t nbytes) { CHECK_EQ(nbytes % 2, 0); + size_t processed = swap_simd(data, nbytes, 16); + data += processed; #if defined(_MSC_VER) if (AlignUp(data, sizeof(uint16_t)) == data) { // MSVC has no strict aliasing, and is able to highly optimize this case. uint16_t* data16 = reinterpret_cast(data); - size_t len16 = nbytes / sizeof(*data16); + size_t len16 = (nbytes - processed) / sizeof(*data16); for (size_t i = 0; i < len16; i++) { data16[i] = BSWAP_2(data16[i]); } @@ -229,21 +483,28 @@ void SwapBytes16(char* data, size_t nbytes) { #endif uint16_t temp; - for (size_t i = 0; i < nbytes; i += sizeof(temp)) { + for (size_t i = 0; i < nbytes - processed; i += sizeof(temp)) { memcpy(&temp, &data[i], sizeof(temp)); temp = BSWAP_2(temp); memcpy(&data[i], &temp, sizeof(temp)); } } -void SwapBytes32(char* data, size_t nbytes) { +#if (__x86_64__ || __i386__ || _M_X86 || _M_X64) +__attribute__((target("avx512vbmi"))) void SwapBytes32(char* data, +#else +void SwapBytes32(char* data, +#endif + size_t nbytes) { CHECK_EQ(nbytes % 4, 0); + size_t processed = swap_simd(data, nbytes, 32); + data += processed; #if defined(_MSC_VER) // MSVC has no strict aliasing, and is able to highly optimize this case. if (AlignUp(data, sizeof(uint32_t)) == data) { uint32_t* data32 = reinterpret_cast(data); - size_t len32 = nbytes / sizeof(*data32); + size_t len32 = (nbytes - processed) / sizeof(*data32); for (size_t i = 0; i < len32; i++) { data32[i] = BSWAP_4(data32[i]); } @@ -252,21 +513,28 @@ void SwapBytes32(char* data, size_t nbytes) { #endif uint32_t temp; - for (size_t i = 0; i < nbytes; i += sizeof(temp)) { + for (size_t i = 0; i < nbytes - processed; i += sizeof(temp)) { memcpy(&temp, &data[i], sizeof(temp)); temp = BSWAP_4(temp); memcpy(&data[i], &temp, sizeof(temp)); } } - -void SwapBytes64(char* data, size_t nbytes) { +#if (__x86_64__ || __i386__ || _M_X86 || _M_X64) +__attribute__((target("avx512vbmi"))) void SwapBytes64(char* data, +#else +void SwapBytes64(char* data, +#endif + size_t nbytes) { CHECK_EQ(nbytes % 8, 0); + // process n*64 bits data in batch using simd swap + size_t processed = swap_simd(data, nbytes, 64); + data += processed; #if defined(_MSC_VER) if (AlignUp(data, sizeof(uint64_t)) == data) { // MSVC has no strict aliasing, and is able to highly optimize this case. uint64_t* data64 = reinterpret_cast(data); - size_t len64 = nbytes / sizeof(*data64); + size_t len64 = (nbytes - processed) / sizeof(*data64); for (size_t i = 0; i < len64; i++) { data64[i] = BSWAP_8(data64[i]); } @@ -275,7 +543,7 @@ void SwapBytes64(char* data, size_t nbytes) { #endif uint64_t temp; - for (size_t i = 0; i < nbytes; i += sizeof(temp)) { + for (size_t i = 0; i < nbytes - processed; i += sizeof(temp)) { memcpy(&temp, &data[i], sizeof(temp)); temp = BSWAP_8(temp); memcpy(&data[i], &temp, sizeof(temp)); diff --git a/src/util.cc b/src/util.cc index bae5a47a06d..6bbd9fd926f 100644 --- a/src/util.cc +++ b/src/util.cc @@ -164,7 +164,9 @@ std::string GetHumanReadableProcessName() { return SPrintF("%s[%d]", GetProcessTitle("Node.js"), uv_os_getpid()); } -std::vector SplitString(const std::string& in, char delim) { +std::vector SplitString(const std::string& in, + char delim, + bool skipEmpty) { std::vector out; if (in.empty()) return out; @@ -172,7 +174,7 @@ std::vector SplitString(const std::string& in, char delim) { while (in_stream.good()) { std::string item; std::getline(in_stream, item, delim); - if (item.empty()) continue; + if (item.empty() && skipEmpty) continue; out.emplace_back(std::move(item)); } return out; @@ -315,4 +317,161 @@ std::string DiagnosticFilename::MakeFilename( return oss.str(); } +Local NewFunctionTemplate( + v8::Isolate* isolate, + v8::FunctionCallback callback, + Local signature, + v8::ConstructorBehavior behavior, + v8::SideEffectType side_effect_type, + const v8::CFunction* c_function) { + return v8::FunctionTemplate::New(isolate, + callback, + Local(), + signature, + 0, + behavior, + side_effect_type, + c_function); +} + +void SetMethod(Local context, + Local that, + const char* name, + v8::FunctionCallback callback) { + Isolate* isolate = context->GetIsolate(); + Local function = + NewFunctionTemplate(isolate, + callback, + Local(), + v8::ConstructorBehavior::kThrow, + v8::SideEffectType::kHasSideEffect) + ->GetFunction(context) + .ToLocalChecked(); + // kInternalized strings are created in the old space. + const v8::NewStringType type = v8::NewStringType::kInternalized; + Local name_string = + v8::String::NewFromUtf8(isolate, name, type).ToLocalChecked(); + that->Set(context, name_string, function).Check(); + function->SetName(name_string); // NODE_SET_METHOD() compatibility. +} + +void SetFastMethod(Local context, + Local that, + const char* name, + v8::FunctionCallback slow_callback, + const v8::CFunction* c_function) { + Isolate* isolate = context->GetIsolate(); + Local function = + NewFunctionTemplate(isolate, + slow_callback, + Local(), + v8::ConstructorBehavior::kThrow, + v8::SideEffectType::kHasNoSideEffect, + c_function) + ->GetFunction(context) + .ToLocalChecked(); + const v8::NewStringType type = v8::NewStringType::kInternalized; + Local name_string = + v8::String::NewFromUtf8(isolate, name, type).ToLocalChecked(); + that->Set(context, name_string, function).Check(); +} + +void SetMethodNoSideEffect(Local context, + Local that, + const char* name, + v8::FunctionCallback callback) { + Isolate* isolate = context->GetIsolate(); + Local function = + NewFunctionTemplate(isolate, + callback, + Local(), + v8::ConstructorBehavior::kThrow, + v8::SideEffectType::kHasNoSideEffect) + ->GetFunction(context) + .ToLocalChecked(); + // kInternalized strings are created in the old space. + const v8::NewStringType type = v8::NewStringType::kInternalized; + Local name_string = + v8::String::NewFromUtf8(isolate, name, type).ToLocalChecked(); + that->Set(context, name_string, function).Check(); + function->SetName(name_string); // NODE_SET_METHOD() compatibility. +} + +void SetProtoMethod(v8::Isolate* isolate, + Local that, + const char* name, + v8::FunctionCallback callback) { + Local signature = v8::Signature::New(isolate, that); + Local t = + NewFunctionTemplate(isolate, + callback, + signature, + v8::ConstructorBehavior::kThrow, + v8::SideEffectType::kHasSideEffect); + // kInternalized strings are created in the old space. + const v8::NewStringType type = v8::NewStringType::kInternalized; + Local name_string = + v8::String::NewFromUtf8(isolate, name, type).ToLocalChecked(); + that->PrototypeTemplate()->Set(name_string, t); + t->SetClassName(name_string); // NODE_SET_PROTOTYPE_METHOD() compatibility. +} + +void SetProtoMethodNoSideEffect(v8::Isolate* isolate, + Local that, + const char* name, + v8::FunctionCallback callback) { + Local signature = v8::Signature::New(isolate, that); + Local t = + NewFunctionTemplate(isolate, + callback, + signature, + v8::ConstructorBehavior::kThrow, + v8::SideEffectType::kHasNoSideEffect); + // kInternalized strings are created in the old space. + const v8::NewStringType type = v8::NewStringType::kInternalized; + Local name_string = + v8::String::NewFromUtf8(isolate, name, type).ToLocalChecked(); + that->PrototypeTemplate()->Set(name_string, t); + t->SetClassName(name_string); // NODE_SET_PROTOTYPE_METHOD() compatibility. +} + +void SetInstanceMethod(v8::Isolate* isolate, + Local that, + const char* name, + v8::FunctionCallback callback) { + Local signature = v8::Signature::New(isolate, that); + Local t = + NewFunctionTemplate(isolate, + callback, + signature, + v8::ConstructorBehavior::kThrow, + v8::SideEffectType::kHasSideEffect); + // kInternalized strings are created in the old space. + const v8::NewStringType type = v8::NewStringType::kInternalized; + Local name_string = + v8::String::NewFromUtf8(isolate, name, type).ToLocalChecked(); + that->InstanceTemplate()->Set(name_string, t); + t->SetClassName(name_string); +} + +void SetConstructorFunction(Local context, + Local that, + const char* name, + Local tmpl, + SetConstructorFunctionFlag flag) { + Isolate* isolate = context->GetIsolate(); + SetConstructorFunction( + context, that, OneByteString(isolate, name), tmpl, flag); +} + +void SetConstructorFunction(Local context, + Local that, + Local name, + Local tmpl, + SetConstructorFunctionFlag flag) { + if (LIKELY(flag == SetConstructorFunctionFlag::SET_CLASS_NAME)) + tmpl->SetClassName(name); + that->Set(context, name, tmpl->GetFunction(context).ToLocalChecked()).Check(); +} + } // namespace node diff --git a/src/util.h b/src/util.h index 06c67d273ba..63d6962f47b 100644 --- a/src/util.h +++ b/src/util.h @@ -26,6 +26,8 @@ #include "v8.h" +#include "node.h" + #include #include #include @@ -108,8 +110,8 @@ struct AssertionInfo { const char* message; const char* function; }; -[[noreturn]] void Assert(const AssertionInfo& info); -[[noreturn]] void Abort(); +[[noreturn]] void NODE_EXTERN_PRIVATE Assert(const AssertionInfo& info); +[[noreturn]] void NODE_EXTERN_PRIVATE Abort(); void DumpBacktrace(FILE* fp); // Windows 8+ does not like abort() in Release mode @@ -269,6 +271,34 @@ template constexpr ContainerOfHelper ContainerOf(Inner Outer::*field, Inner* pointer); +class KVStore { + public: + KVStore() = default; + virtual ~KVStore() = default; + KVStore(const KVStore&) = delete; + KVStore& operator=(const KVStore&) = delete; + KVStore(KVStore&&) = delete; + KVStore& operator=(KVStore&&) = delete; + + virtual v8::MaybeLocal Get(v8::Isolate* isolate, + v8::Local key) const = 0; + virtual v8::Maybe Get(const char* key) const = 0; + virtual void Set(v8::Isolate* isolate, + v8::Local key, + v8::Local value) = 0; + virtual int32_t Query(v8::Isolate* isolate, + v8::Local key) const = 0; + virtual int32_t Query(const char* key) const = 0; + virtual void Delete(v8::Isolate* isolate, v8::Local key) = 0; + virtual v8::Local Enumerate(v8::Isolate* isolate) const = 0; + + virtual std::shared_ptr Clone(v8::Isolate* isolate) const; + virtual v8::Maybe AssignFromObject(v8::Local context, + v8::Local entries); + + static std::shared_ptr CreateMapKVStore(); +}; + // Convenience wrapper around v8::String::NewFromOneByte(). inline v8::Local OneByteString(v8::Isolate* isolate, const char* data, @@ -466,6 +496,9 @@ class ArrayBufferViewContents { public: ArrayBufferViewContents() = default; + ArrayBufferViewContents(const ArrayBufferViewContents&) = delete; + void operator=(const ArrayBufferViewContents&) = delete; + explicit inline ArrayBufferViewContents(v8::Local value); explicit inline ArrayBufferViewContents(v8::Local value); explicit inline ArrayBufferViewContents(v8::Local abv); @@ -475,6 +508,13 @@ class ArrayBufferViewContents { inline size_t length() const { return length_; } private: + // Declaring operator new and delete as deleted is not spec compliant. + // Therefore, declare them private instead to disable dynamic alloc. + void* operator new(size_t size); + void* operator new[](size_t size); + void operator delete(void*, size_t); + void operator delete[](void*, size_t); + T stack_storage_[kStackStorageSize]; T* data_ = nullptr; size_t length_ = 0; @@ -641,7 +681,9 @@ struct FunctionDeleter { template using DeleteFnPtr = typename FunctionDeleter::Pointer; -std::vector SplitString(const std::string& in, char delim); +std::vector SplitString(const std::string& in, + char delim, + bool skipEmpty = true); inline v8::MaybeLocal ToV8Value(v8::Local context, const std::string& str, @@ -706,26 +748,23 @@ inline v8::MaybeLocal ToV8Value(v8::Local context, .Check(); \ } while (0) -enum Endianness { - kLittleEndian, // _Not_ LITTLE_ENDIAN, clashes with endian.h. - kBigEndian -}; +enum class Endianness { LITTLE, BIG }; -inline enum Endianness GetEndianness() { +inline Endianness GetEndianness() { // Constant-folded by the compiler. const union { uint8_t u8[2]; uint16_t u16; } u = {{1, 0}}; - return u.u16 == 1 ? kLittleEndian : kBigEndian; + return u.u16 == 1 ? Endianness::LITTLE : Endianness::BIG; } inline bool IsLittleEndian() { - return GetEndianness() == kLittleEndian; + return GetEndianness() == Endianness::LITTLE; } inline bool IsBigEndian() { - return GetEndianness() == kBigEndian; + return GetEndianness() == Endianness::BIG; } // Round up a to the next highest multiple of b. @@ -818,6 +857,66 @@ std::unique_ptr static_unique_pointer_cast(std::unique_ptr&& ptr) { // Returns a non-zero code if it fails to open or read the file, // aborts if it fails to close the file. int ReadFileSync(std::string* result, const char* path); + +v8::Local NewFunctionTemplate( + v8::Isolate* isolate, + v8::FunctionCallback callback, + v8::Local signature = v8::Local(), + v8::ConstructorBehavior behavior = v8::ConstructorBehavior::kAllow, + v8::SideEffectType side_effect = v8::SideEffectType::kHasSideEffect, + const v8::CFunction* c_function = nullptr); + +// Convenience methods for NewFunctionTemplate(). +void SetMethod(v8::Local context, + v8::Local that, + const char* name, + v8::FunctionCallback callback); + +void SetFastMethod(v8::Local context, + v8::Local that, + const char* name, + v8::FunctionCallback slow_callback, + const v8::CFunction* c_function); + +void SetProtoMethod(v8::Isolate* isolate, + v8::Local that, + const char* name, + v8::FunctionCallback callback); + +void SetInstanceMethod(v8::Isolate* isolate, + v8::Local that, + const char* name, + v8::FunctionCallback callback); + +// Safe variants denote the function has no side effects. +void SetMethodNoSideEffect(v8::Local context, + v8::Local that, + const char* name, + v8::FunctionCallback callback); +void SetProtoMethodNoSideEffect(v8::Isolate* isolate, + v8::Local that, + const char* name, + v8::FunctionCallback callback); + +enum class SetConstructorFunctionFlag { + NONE, + SET_CLASS_NAME, +}; + +void SetConstructorFunction(v8::Local context, + v8::Local that, + const char* name, + v8::Local tmpl, + SetConstructorFunctionFlag flag = + SetConstructorFunctionFlag::SET_CLASS_NAME); + +void SetConstructorFunction(v8::Local context, + v8::Local that, + v8::Local name, + v8::Local tmpl, + SetConstructorFunctionFlag flag = + SetConstructorFunctionFlag::SET_CLASS_NAME); + } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS diff --git a/src/uv.cc b/src/uv.cc index 2b0c424587e..a98b054a4d3 100644 --- a/src/uv.cc +++ b/src/uv.cc @@ -73,7 +73,8 @@ void ErrName(const FunctionCallbackInfo& args) { int err; if (!args[0]->Int32Value(env->context()).To(&err)) return; CHECK_LT(err, 0); - const char* name = uv_err_name(err); + char name[50]; + uv_err_name_r(err, name, sizeof(name)); args.GetReturnValue().Set(OneByteString(env->isolate(), name)); } @@ -109,10 +110,8 @@ void Initialize(Local target, void* priv) { Environment* env = Environment::GetCurrent(context); Isolate* isolate = env->isolate(); - env->SetConstructorFunction( - target, - "errname", - env->NewFunctionTemplate(ErrName)); + SetConstructorFunction( + context, target, "errname", NewFunctionTemplate(isolate, ErrName)); // TODO(joyeecheung): This should be deprecated in user land in favor of // `util.getSystemErrorName(err)`. @@ -128,7 +127,7 @@ void Initialize(Local target, target->DefineOwnProperty(context, name, value, attributes).Check(); } - env->SetMethod(target, "getErrorMap", GetErrMap); + SetMethod(context, target, "getErrorMap", GetErrMap); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/test/.eslintrc.yaml b/test/.eslintrc.yaml index 878ea7b975d..e8295cd3e23 100644 --- a/test/.eslintrc.yaml +++ b/test/.eslintrc.yaml @@ -6,7 +6,6 @@ env: rules: multiline-comment-style: [error, separate-lines] - no-var: error prefer-const: error symbol-description: off diff --git a/test/README.md b/test/README.md index 121ecc89b54..8a006facc0b 100644 --- a/test/README.md +++ b/test/README.md @@ -26,10 +26,10 @@ For the tests to run on Windows, be sure to clone Node.js source code with the | `es-module` | Yes | Test ESM module loading. | | `fixtures` | | Test fixtures used in various tests throughout the test suite. | | `internet` | No | Tests that make real outbound network connections. Tests for networking related modules may also be present in other directories, but those tests do not make outbound connections. | -| `js-native-api` | Yes | Tests for Node.js-agnostic [n-api](https://nodejs.org/api/n-api.html) functionality. | +| `js-native-api` | Yes | Tests for Node.js-agnostic [Node-API](https://nodejs.org/api/n-api.html) functionality. | | `known_issues` | Yes | Tests reproducing known issues within the system. All tests inside of this directory are expected to fail. If a test doesn't fail on certain platforms, those should be skipped via `known_issues.status`. | | `message` | Yes | Tests for messages that are output for various conditions (`console.log`, error messages etc.) | -| `node-api` | Yes | Tests for Node.js-specific [n-api](https://nodejs.org/api/n-api.html) functionality. | +| `node-api` | Yes | Tests for Node.js-specific [Node-API](https://nodejs.org/api/n-api.html) functionality. | | `parallel` | Yes | Various tests that are able to be run in parallel. | | `pseudo-tty` | Yes | Tests that require stdin/stdout/stderr to be a TTY. | | `pummel` | No | Various tests for various modules / system functionality operating under load. | diff --git a/test/abort/abort.status b/test/abort/abort.status index e56c24ff433..24e6cbb7319 100644 --- a/test/abort/abort.status +++ b/test/abort/abort.status @@ -9,3 +9,13 @@ prefix abort [$system==ibmi] # https://github.com/nodejs/node/issues/34410 test-addon-register-signal-handler: PASS,FLAKY + +[$system==solaris] # Also applies to SmartOS +# https://github.com/nodejs/node/issues/43457 +test-abort-fatal-error: PASS, FLAKY +test-abort-uncaught-exception: PASS, FLAKY +test-addon-register-signal-handler: PASS, FLAKY +test-process-abort-exitcode: PASS, FLAKY +test-signal-handler: PASS, FLAKY +test-worker-abort-uncaught-exception: PASS, FLAKY +test-zlib-invalid-internals-usage: PASS, FLAKY diff --git a/test/addons/force-context-aware/test.js b/test/addons/force-context-aware/test.js index cc2ed940d92..d4a0ab3e614 100644 --- a/test/addons/force-context-aware/test.js +++ b/test/addons/force-context-aware/test.js @@ -5,4 +5,4 @@ const assert = require('assert'); assert.throws(() => { require(`./build/${common.buildType}/binding`); -}, /^Error: Loading non context-aware native modules has been disabled$/); +}, /^Error: Loading non context-aware native addons has been disabled$/); diff --git a/test/addons/parse-encoding/test.js b/test/addons/parse-encoding/test.js index da52f2dc424..f30e925c367 100644 --- a/test/addons/parse-encoding/test.js +++ b/test/addons/parse-encoding/test.js @@ -4,20 +4,45 @@ const common = require('../../common'); const assert = require('assert'); const { parseEncoding } = require(`./build/${common.buildType}/binding`); -assert.strictEqual(parseEncoding(''), 'UNKNOWN'); assert.strictEqual(parseEncoding('ascii'), 'ASCII'); +assert.strictEqual(parseEncoding('ASCII'), 'ASCII'); assert.strictEqual(parseEncoding('base64'), 'BASE64'); +assert.strictEqual(parseEncoding('BASE64'), 'BASE64'); assert.strictEqual(parseEncoding('base64url'), 'BASE64URL'); +assert.strictEqual(parseEncoding('BASE64URL'), 'BASE64URL'); assert.strictEqual(parseEncoding('binary'), 'LATIN1'); +assert.strictEqual(parseEncoding('BINARY'), 'LATIN1'); assert.strictEqual(parseEncoding('buffer'), 'BUFFER'); +assert.strictEqual(parseEncoding('BUFFER'), 'BUFFER'); assert.strictEqual(parseEncoding('hex'), 'HEX'); +assert.strictEqual(parseEncoding('HEX'), 'HEX'); assert.strictEqual(parseEncoding('latin1'), 'LATIN1'); +assert.strictEqual(parseEncoding('LATIN1'), 'LATIN1'); + +// ucs2 variations assert.strictEqual(parseEncoding('ucs2'), 'UCS2'); +assert.strictEqual(parseEncoding('ucs-2'), 'UCS2'); +assert.strictEqual(parseEncoding('UCS2'), 'UCS2'); +assert.strictEqual(parseEncoding('UCS-2'), 'UCS2'); + +// utf8 variations assert.strictEqual(parseEncoding('utf8'), 'UTF8'); -assert.strictEqual(parseEncoding('utf-16LE'), 'UCS2'); +assert.strictEqual(parseEncoding('utf-8'), 'UTF8'); +assert.strictEqual(parseEncoding('UTF8'), 'UTF8'); +assert.strictEqual(parseEncoding('UTF-8'), 'UTF8'); + +// utf16le variations +assert.strictEqual(parseEncoding('utf16le'), 'UCS2'); +assert.strictEqual(parseEncoding('utf-16le'), 'UCS2'); +assert.strictEqual(parseEncoding('UTF16LE'), 'UCS2'); +assert.strictEqual(parseEncoding('UTF-16LE'), 'UCS2'); + +// unknown cases +assert.strictEqual(parseEncoding(''), 'UNKNOWN'); +assert.strictEqual(parseEncoding('asCOO'), 'UNKNOWN'); +assert.strictEqual(parseEncoding('hux'), 'UNKNOWN'); assert.strictEqual(parseEncoding('utf-buffer'), 'UNKNOWN'); assert.strictEqual(parseEncoding('utf-16leNOT'), 'UNKNOWN'); - assert.strictEqual(parseEncoding('linary'), 'UNKNOWN'); assert.strictEqual(parseEncoding('luffer'), 'UNKNOWN'); diff --git a/test/addons/report-api/binding.cc b/test/addons/report-api/binding.cc new file mode 100644 index 00000000000..4c6a39c7797 --- /dev/null +++ b/test/addons/report-api/binding.cc @@ -0,0 +1,80 @@ +#include +#include + +using v8::Context; +using v8::FunctionCallbackInfo; +using v8::Isolate; +using v8::Local; +using v8::Object; +using v8::Value; + +void TriggerReport(const FunctionCallbackInfo& args) { + Isolate* isolate = args.GetIsolate(); + + node::TriggerNodeReport( + isolate, "FooMessage", "BarTrigger", std::string(), Local()); +} + +void TriggerReportNoIsolate(const FunctionCallbackInfo& args) { + node::TriggerNodeReport(static_cast(nullptr), + "FooMessage", + "BarTrigger", + std::string(), + Local()); +} + +void TriggerReportEnv(const FunctionCallbackInfo& args) { + Isolate* isolate = args.GetIsolate(); + + node::TriggerNodeReport( + node::GetCurrentEnvironment(isolate->GetCurrentContext()), + "FooMessage", + "BarTrigger", + std::string(), + Local()); +} + +void TriggerReportNoEnv(const FunctionCallbackInfo& args) { + Isolate* isolate = args.GetIsolate(); + + node::TriggerNodeReport(static_cast(nullptr), + "FooMessage", + "BarTrigger", + std::string(), + Local()); +} + +void TriggerReportNoContext(const FunctionCallbackInfo& args) { + Isolate* isolate = args.GetIsolate(); + Local context = isolate->GetCurrentContext(); + context->Exit(); + + if (isolate->GetCurrentContext().IsEmpty()) { + node::TriggerNodeReport( + isolate, "FooMessage", "BarTrigger", std::string(), Local()); + } + + // Restore current context to avoid crashing in Context::Scope in + // SpinEventLoop. + context->Enter(); +} + +void TriggerReportNewContext(const FunctionCallbackInfo& args) { + Isolate* isolate = args.GetIsolate(); + Local context = Context::New(isolate); + Context::Scope context_scope(context); + + node::TriggerNodeReport( + isolate, "FooMessage", "BarTrigger", std::string(), Local()); +} + +void init(Local exports) { + NODE_SET_METHOD(exports, "triggerReport", TriggerReport); + NODE_SET_METHOD(exports, "triggerReportNoIsolate", TriggerReportNoIsolate); + NODE_SET_METHOD(exports, "triggerReportEnv", TriggerReportEnv); + NODE_SET_METHOD(exports, "triggerReportNoEnv", TriggerReportNoEnv); + NODE_SET_METHOD(exports, "triggerReportNoContext", TriggerReportNoContext); + NODE_SET_METHOD(exports, "triggerReportNewContext", TriggerReportNewContext); +} + +NODE_MODULE(NODE_GYP_MODULE_NAME, init) diff --git a/test/addons/report-api/binding.gyp b/test/addons/report-api/binding.gyp new file mode 100644 index 00000000000..55fbe7050f1 --- /dev/null +++ b/test/addons/report-api/binding.gyp @@ -0,0 +1,9 @@ +{ + 'targets': [ + { + 'target_name': 'binding', + 'sources': [ 'binding.cc' ], + 'includes': ['../common.gypi'], + } + ] +} diff --git a/test/addons/report-api/test.js b/test/addons/report-api/test.js new file mode 100644 index 00000000000..67c53404688 --- /dev/null +++ b/test/addons/report-api/test.js @@ -0,0 +1,53 @@ +'use strict'; + +const common = require('../../common'); +const assert = require('assert'); +const path = require('path'); +const helper = require('../../common/report.js'); +const tmpdir = require('../../common/tmpdir'); + +const binding = path.resolve(__dirname, `./build/${common.buildType}/binding`); +const addon = require(binding); + +function myAddonMain(method, { hasIsolate, hasEnv }) { + tmpdir.refresh(); + process.report.directory = tmpdir.path; + + addon[method](); + + const reports = helper.findReports(process.pid, tmpdir.path); + assert.strictEqual(reports.length, 1); + + const report = reports[0]; + helper.validate(report, [ + ['header.event', 'FooMessage'], + ['header.trigger', 'BarTrigger'], + ]); + + const content = require(report); + + // Check that the javascript stack is present. + if (hasIsolate) { + assert.strictEqual(content.javascriptStack.stack.findIndex((frame) => frame.match('myAddonMain')), 0); + } else { + assert.strictEqual(content.javascriptStack, undefined); + } + + if (hasEnv) { + assert.strictEqual(content.header.threadId, 0); + } else { + assert.strictEqual(content.header.threadId, null); + } +} + +const methods = [ + ['triggerReport', true, true], + ['triggerReportNoIsolate', false, false], + ['triggerReportEnv', true, true], + ['triggerReportNoEnv', false, false], + ['triggerReportNoContext', true, false], + ['triggerReportNewContext', true, false], +]; +for (const [method, hasIsolate, hasEnv] of methods) { + myAddonMain(method, { hasIsolate, hasEnv }); +} diff --git a/test/addons/report-fatalerror/binding.cc b/test/addons/report-fatalerror/binding.cc new file mode 100644 index 00000000000..9f01230bb43 --- /dev/null +++ b/test/addons/report-fatalerror/binding.cc @@ -0,0 +1,23 @@ +#include +#include + +using v8::FunctionCallbackInfo; +using v8::Isolate; +using v8::Local; +using v8::MaybeLocal; +using v8::Object; +using v8::Value; + +void TriggerFatalError(const FunctionCallbackInfo& args) { + Isolate* isolate = args.GetIsolate(); + + // Trigger a v8 ApiCheck failure. + MaybeLocal value; + value.ToLocalChecked(); +} + +void init(Local exports) { + NODE_SET_METHOD(exports, "triggerFatalError", TriggerFatalError); +} + +NODE_MODULE(NODE_GYP_MODULE_NAME, init) diff --git a/test/addons/report-fatalerror/binding.gyp b/test/addons/report-fatalerror/binding.gyp new file mode 100644 index 00000000000..55fbe7050f1 --- /dev/null +++ b/test/addons/report-fatalerror/binding.gyp @@ -0,0 +1,9 @@ +{ + 'targets': [ + { + 'target_name': 'binding', + 'sources': [ 'binding.cc' ], + 'includes': ['../common.gypi'], + } + ] +} diff --git a/test/addons/report-fatalerror/test.js b/test/addons/report-fatalerror/test.js new file mode 100644 index 00000000000..96ee7223c0f --- /dev/null +++ b/test/addons/report-fatalerror/test.js @@ -0,0 +1,52 @@ +'use strict'; + +const common = require('../../common'); +const assert = require('assert'); +const path = require('path'); +const spawnSync = require('child_process').spawnSync; +const helper = require('../../common/report.js'); +const tmpdir = require('../../common/tmpdir'); + +const binding = path.resolve(__dirname, `./build/${common.buildType}/binding`); + +if (process.argv[2] === 'child') { + (function childMain() { + const addon = require(binding); + addon.triggerFatalError(); + })(); + return; +} + +const ARGS = [ + __filename, + 'child', +]; + +{ + // Verify that --report-on-fatalerror is respected when set. + tmpdir.refresh(); + const args = ['--report-on-fatalerror', ...ARGS]; + const child = spawnSync(process.execPath, args, { cwd: tmpdir.path }); + assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); + + const reports = helper.findReports(child.pid, tmpdir.path); + assert.strictEqual(reports.length, 1); + + const report = reports[0]; + helper.validate(report); + + const content = require(report); + assert.strictEqual(content.header.trigger, 'FatalError'); + + // Check that the javascript stack is present. + assert.strictEqual(content.javascriptStack.stack.findIndex((frame) => frame.match('childMain')), 0); +} + +{ + // Verify that --report-on-fatalerror is respected when not set. + const args = ARGS; + const child = spawnSync(process.execPath, args, { cwd: tmpdir.path }); + assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly'); + const reports = helper.findReports(child.pid, tmpdir.path); + assert.strictEqual(reports.length, 0); +} diff --git a/test/addons/request-interrupt/binding.cc b/test/addons/request-interrupt/binding.cc new file mode 100644 index 00000000000..ab4e0681608 --- /dev/null +++ b/test/addons/request-interrupt/binding.cc @@ -0,0 +1,72 @@ +#include +#include +#include // NOLINT(build/c++11) + +using node::Environment; +using v8::Context; +using v8::FunctionCallbackInfo; +using v8::HandleScope; +using v8::Isolate; +using v8::Local; +using v8::Maybe; +using v8::Object; +using v8::String; +using v8::Value; + +static std::thread interrupt_thread; + +void ScheduleInterrupt(const FunctionCallbackInfo& args) { + Isolate* isolate = args.GetIsolate(); + HandleScope handle_scope(isolate); + Environment* env = node::GetCurrentEnvironment(isolate->GetCurrentContext()); + + interrupt_thread = std::thread([=]() { + std::this_thread::sleep_for(std::chrono::seconds(1)); + node::RequestInterrupt( + env, + [](void* data) { + // Interrupt is called from JS thread. + interrupt_thread.join(); + exit(0); + }, + nullptr); + }); +} + +void ScheduleInterruptWithJS(const FunctionCallbackInfo& args) { + Isolate* isolate = args.GetIsolate(); + HandleScope handle_scope(isolate); + Environment* env = node::GetCurrentEnvironment(isolate->GetCurrentContext()); + + interrupt_thread = std::thread([=]() { + std::this_thread::sleep_for(std::chrono::seconds(1)); + node::RequestInterrupt( + env, + [](void* data) { + // Interrupt is called from JS thread. + interrupt_thread.join(); + Isolate* isolate = static_cast(data); + HandleScope handle_scope(isolate); + Local ctx = isolate->GetCurrentContext(); + Local str = + String::NewFromUtf8(isolate, "interrupt").ToLocalChecked(); + // Calling into JS should abort immediately. + Maybe result = ctx->Global()->Set(ctx, str, str); + // Should not reach here. + if (!result.IsNothing()) { + // Called into JavaScript. + exit(2); + } + // Maybe exception thrown. + exit(1); + }, + isolate); + }); +} + +void init(Local exports) { + NODE_SET_METHOD(exports, "scheduleInterrupt", ScheduleInterrupt); + NODE_SET_METHOD(exports, "ScheduleInterruptWithJS", ScheduleInterruptWithJS); +} + +NODE_MODULE(NODE_GYP_MODULE_NAME, init) diff --git a/test/addons/request-interrupt/binding.gyp b/test/addons/request-interrupt/binding.gyp new file mode 100644 index 00000000000..55fbe7050f1 --- /dev/null +++ b/test/addons/request-interrupt/binding.gyp @@ -0,0 +1,9 @@ +{ + 'targets': [ + { + 'target_name': 'binding', + 'sources': [ 'binding.cc' ], + 'includes': ['../common.gypi'], + } + ] +} diff --git a/test/addons/request-interrupt/test.js b/test/addons/request-interrupt/test.js new file mode 100644 index 00000000000..d307895e7f5 --- /dev/null +++ b/test/addons/request-interrupt/test.js @@ -0,0 +1,50 @@ +'use strict'; + +const common = require('../../common'); +const assert = require('assert'); +const path = require('path'); +const spawnSync = require('child_process').spawnSync; + +const binding = path.resolve(__dirname, `./build/${common.buildType}/binding`); + +Object.defineProperty(globalThis, 'interrupt', { + get: () => { + return null; + }, + set: () => { + throw new Error('should not calling into js'); + }, +}); + +if (process.argv[2] === 'child-busyloop') { + (function childMain() { + const addon = require(binding); + addon[process.argv[3]](); + while (true) { + /** wait for interrupt */ + } + })(); + return; +} + +if (process.argv[2] === 'child-idle') { + (function childMain() { + const addon = require(binding); + addon[process.argv[3]](); + // wait for interrupt + setTimeout(() => {}, 10_000_000); + })(); + return; +} + +for (const type of ['busyloop', 'idle']) { + { + const child = spawnSync(process.execPath, [ __filename, `child-${type}`, 'scheduleInterrupt' ]); + assert.strictEqual(child.status, 0, `${type} should exit with code 0`); + } + + { + const child = spawnSync(process.execPath, [ __filename, `child-${type}`, 'ScheduleInterruptWithJS' ]); + assert(common.nodeProcessAborted(child.status, child.signal)); + } +} diff --git a/test/addons/symlinked-module/test.js b/test/addons/symlinked-module/test.js index cbd01e938fe..d47a84b98d1 100644 --- a/test/addons/symlinked-module/test.js +++ b/test/addons/symlinked-module/test.js @@ -4,7 +4,7 @@ const fs = require('fs'); const path = require('path'); const assert = require('assert'); -// This test verifies that symlinked native modules can be required multiple +// This test verifies that symlinked native addons can be required multiple // times without error. The symlinked module and the non-symlinked module // should be the same instance. This expectation was not previously being // tested and ended up being broken by https://github.com/nodejs/node/pull/5950. diff --git a/test/async-hooks/async-hooks.status b/test/async-hooks/async-hooks.status index 7f36d5a78a6..673883e4fe3 100644 --- a/test/async-hooks/async-hooks.status +++ b/test/async-hooks/async-hooks.status @@ -15,6 +15,8 @@ prefix async-hooks [$arch==arm || $arch==arm64] [$system==solaris] # Also applies to SmartOS +# https://github.com/nodejs/node/issues/43457 +test-callback-error: PASS, FLAKY [$system==freebsd] diff --git a/test/cctest/test_crypto_clienthello.cc b/test/cctest/test_crypto_clienthello.cc new file mode 100644 index 00000000000..60a8e294c89 --- /dev/null +++ b/test/cctest/test_crypto_clienthello.cc @@ -0,0 +1,133 @@ +#include "crypto/crypto_clienthello-inl.h" +#include "gtest/gtest.h" + +// If the test is being compiled with an address sanitizer enabled, it should +// catch the memory violation, so do not use a guard page. +#ifdef __SANITIZE_ADDRESS__ +#define NO_GUARD_PAGE +#elif defined(__has_feature) +#if __has_feature(address_sanitizer) +#define NO_GUARD_PAGE +#endif +#endif + +// If the test is running without an address sanitizer, see if we can use +// mprotect() or VirtualProtect() to cause a segmentation fault when spatial +// safety is violated. +#if !defined(NO_GUARD_PAGE) +#ifdef __linux__ +#include +#include +#if defined(_SC_PAGE_SIZE) && defined(PROT_NONE) && defined(PROT_READ) && \ + defined(PROT_WRITE) +#define USE_MPROTECT +#endif +#elif defined(_WIN32) && defined(_MSC_VER) +#include +#include +#define USE_VIRTUALPROTECT +#endif +#endif + +#if defined(USE_MPROTECT) +size_t GetPageSize() { + int page_size = sysconf(_SC_PAGE_SIZE); + EXPECT_GE(page_size, 1); + return page_size; +} +#elif defined(USE_VIRTUALPROTECT) +size_t GetPageSize() { + SYSTEM_INFO system_info; + GetSystemInfo(&system_info); + return system_info.dwPageSize; +} +#endif + +template +class OverrunGuardedBuffer { + public: + OverrunGuardedBuffer() { +#if defined(USE_MPROTECT) || defined(USE_VIRTUALPROTECT) + size_t page = GetPageSize(); + EXPECT_GE(page, N); +#endif +#ifdef USE_MPROTECT + // Place the packet right before a guard page, which, when accessed, causes + // a segmentation fault. + alloc_base = static_cast(aligned_alloc(page, 2 * page)); + EXPECT_NE(alloc_base, nullptr); + uint8_t* second_page = alloc_base + page; + EXPECT_EQ(mprotect(second_page, page, PROT_NONE), 0); + data_base = second_page - N; +#elif defined(USE_VIRTUALPROTECT) + // On Windows, it works almost the same way. + alloc_base = static_cast( + VirtualAlloc(nullptr, 2 * page, MEM_COMMIT, PAGE_READWRITE)); + EXPECT_NE(alloc_base, nullptr); + uint8_t* second_page = alloc_base + page; + DWORD old_prot; + EXPECT_NE(VirtualProtect(second_page, page, PAGE_NOACCESS, &old_prot), 0); + EXPECT_EQ(old_prot, PAGE_READWRITE); + data_base = second_page - N; +#else + // Place the packet in a regular allocated buffer. The bug causes undefined + // behavior, which might crash the process, and when it does not, address + // sanitizers and valgrind will catch it. + alloc_base = static_cast(malloc(N)); + EXPECT_NE(alloc_base, nullptr); + data_base = alloc_base; +#endif + } + + OverrunGuardedBuffer(const OverrunGuardedBuffer& other) = delete; + OverrunGuardedBuffer& operator=(const OverrunGuardedBuffer& other) = delete; + + ~OverrunGuardedBuffer() { +#if defined(USE_MPROTECT) || defined(USE_VIRTUALPROTECT) + size_t page = GetPageSize(); +#endif +#ifdef USE_VIRTUALPROTECT + VirtualFree(alloc_base, 2 * page, MEM_RELEASE); +#else +#ifdef USE_MPROTECT + // Revert page protection such that the memory can be free()'d. + uint8_t* second_page = alloc_base + page; + EXPECT_EQ(mprotect(second_page, page, PROT_READ | PROT_WRITE), 0); +#endif + free(alloc_base); +#endif + } + + uint8_t* data() { + return data_base; + } + + private: + uint8_t* alloc_base; + uint8_t* data_base; +}; + +// Test that ClientHelloParser::ParseHeader() does not blindly trust the client +// to send a valid frame length and subsequently does not read out-of-bounds. +TEST(NodeCrypto, ClientHelloParserParseHeaderOutOfBoundsRead) { + using node::crypto::ClientHelloParser; + + // This is the simplest packet triggering the bug. + const uint8_t packet[] = {0x16, 0x03, 0x01, 0x00, 0x00}; + OverrunGuardedBuffer buffer; + memcpy(buffer.data(), packet, sizeof(packet)); + + // Let the ClientHelloParser parse the packet. This should not lead to a + // segmentation fault or to undefined behavior. + node::crypto::ClientHelloParser parser; + bool end_cb_called = false; + parser.Start([](void* arg, auto hello) { GTEST_FAIL(); }, + [](void* arg) { + bool* end_cb_called = static_cast(arg); + EXPECT_FALSE(*end_cb_called); + *end_cb_called = true; + }, + &end_cb_called); + parser.Parse(buffer.data(), sizeof(packet)); + EXPECT_TRUE(end_cb_called); +} diff --git a/test/cctest/test_environment.cc b/test/cctest/test_environment.cc index f98b22db42c..812962cd5c1 100644 --- a/test/cctest/test_environment.cc +++ b/test/cctest/test_environment.cc @@ -12,6 +12,8 @@ using node::AtExit; using node::RunAtExit; using node::USE; +using v8::Context; +using v8::Local; static bool called_cb_1 = false; static bool called_cb_2 = false; @@ -716,3 +718,32 @@ TEST_F(EnvironmentTest, NestedMicrotaskQueue) { node::FreeEnvironment(env); node::FreeIsolateData(isolate_data); } + +static bool interrupted = false; +static void OnInterrupt(void* arg) { + interrupted = true; +} +TEST_F(EnvironmentTest, RequestInterruptAtExit) { + const v8::HandleScope handle_scope(isolate_); + const Argv argv; + + Local context = node::NewContext(isolate_); + CHECK(!context.IsEmpty()); + context->Enter(); + + node::IsolateData* isolate_data = node::CreateIsolateData( + isolate_, &NodeTestFixture::current_loop, platform.get()); + CHECK_NE(nullptr, isolate_data); + std::vector args(*argv, *argv + 1); + std::vector exec_args(*argv, *argv + 1); + node::Environment* environment = + node::CreateEnvironment(isolate_data, context, args, exec_args); + CHECK_NE(nullptr, environment); + + node::RequestInterrupt(environment, OnInterrupt, nullptr); + node::FreeEnvironment(environment); + EXPECT_TRUE(interrupted); + + node::FreeIsolateData(isolate_data); + context->Exit(); +} diff --git a/test/cctest/test_inspector_socket.cc b/test/cctest/test_inspector_socket.cc index dc8cd962141..b351a23002c 100644 --- a/test/cctest/test_inspector_socket.cc +++ b/test/cctest/test_inspector_socket.cc @@ -851,4 +851,166 @@ TEST_F(InspectorSocketTest, HostCheckedForUPGRADE) { expect_failure_no_delegate(UPGRADE_REQUEST); } +TEST_F(InspectorSocketTest, HostIPChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 10.0.2.555:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostNegativeIPChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 10.0.-23.255:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpOctetOutOfIntRangeChecked) { + const std::string INVALID_HOST_IP_REQUEST = + "GET /json HTTP/1.1\r\n" + "Host: 127.0.0.4294967296:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpOctetFarOutOfIntRangeChecked) { + const std::string INVALID_HOST_IP_REQUEST = + "GET /json HTTP/1.1\r\n" + "Host: 127.0.0.18446744073709552000:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpEmptyOctetStartChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: .0.0.1:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpEmptyOctetMidChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 127..0.1:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpEmptyOctetEndChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 127.0.0.:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpTooFewOctetsChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 127.0.1:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpTooManyOctetsChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 127.0.0.0.1:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpInvalidOctalOctetStartChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 08.1.1.1:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpInvalidOctalOctetMidChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 1.09.1.1:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpInvalidOctalOctetEndChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 1.1.1.009:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpLeadingZeroStartChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 01.1.1.1:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpLeadingZeroMidChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 1.1.001.1:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIpLeadingZeroEndChecked) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 1.1.1.01:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIPNonRoutable) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: 0.0.0.0:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIPv6NonRoutable) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: [::]:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIPv6NonRoutableDual) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: [::0.0.0.0]:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIPv4InSquareBrackets) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: [127.0.0.1]:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + +TEST_F(InspectorSocketTest, HostIPv6InvalidAbbreviation) { + const std::string INVALID_HOST_IP_REQUEST = "GET /json HTTP/1.1\r\n" + "Host: [:::1]:9229\r\n\r\n"; + send_in_chunks(INVALID_HOST_IP_REQUEST.c_str(), + INVALID_HOST_IP_REQUEST.length()); + expect_handshake_failure(); +} + } // anonymous namespace diff --git a/test/cctest/test_inspector_socket_server.cc b/test/cctest/test_inspector_socket_server.cc index 7d5d0929def..451fbbd6acf 100644 --- a/test/cctest/test_inspector_socket_server.cc +++ b/test/cctest/test_inspector_socket_server.cc @@ -301,11 +301,11 @@ class ServerHolder { class TestSocketServerDelegate : public SocketServerDelegate { public: - explicit TestSocketServerDelegate( - ServerHolder* server, - const std::vector& target_ids) + explicit TestSocketServerDelegate(ServerHolder* server, + const std::vector& target_ids) : harness_(server), targets_(target_ids), + server_(nullptr), session_id_(0) {} ~TestSocketServerDelegate() override { diff --git a/test/cctest/test_json_utils.cc b/test/cctest/test_json_utils.cc index 06a9074a61b..3d5a7892117 100644 --- a/test/cctest/test_json_utils.cc +++ b/test/cctest/test_json_utils.cc @@ -12,11 +12,11 @@ TEST(JSONUtilsTest, EscapeJsonChars) { const std::string expected[0x20] = { "\\u0000", "\\u0001", "\\u0002", "\\u0003", "\\u0004", "\\u0005", - "\\u0006", "\\u0007", "\\b", "\\t", "\\n", "\\v", "\\f", "\\r", - "\\u000e", "\\u000f", "\\u0010", "\\u0011", "\\u0012", "\\u0013", - "\\u0014", "\\u0015", "\\u0016", "\\u0017", "\\u0018", "\\u0019", - "\\u001a", "\\u001b", "\\u001c", "\\u001d", "\\u001e", "\\u001f" - }; + "\\u0006", "\\u0007", "\\b", "\\t", "\\n", "\\u000b", + "\\f", "\\r", "\\u000e", "\\u000f", "\\u0010", "\\u0011", + "\\u0012", "\\u0013", "\\u0014", "\\u0015", "\\u0016", "\\u0017", + "\\u0018", "\\u0019", "\\u001a", "\\u001b", "\\u001c", "\\u001d", + "\\u001e", "\\u001f"}; for (int i = 0; i < 0x20; ++i) { char symbols[1] = { static_cast(i) }; std::string input(symbols, 1); diff --git a/test/cctest/test_node_postmortem_metadata.cc b/test/cctest/test_node_postmortem_metadata.cc index 4cee7db4c8e..d7591f03b07 100644 --- a/test/cctest/test_node_postmortem_metadata.cc +++ b/test/cctest/test_node_postmortem_metadata.cc @@ -194,7 +194,8 @@ TEST_F(DebugSymbolsTest, ReqWrapList) { // ARM64 CI machinies. for (auto it : *(*env)->req_wrap_queue()) (void) ⁢ - auto last = tail + nodedbg_offset_ListNode_ReqWrap__next___uintptr_t; + volatile uintptr_t last = + tail + nodedbg_offset_ListNode_ReqWrap__next___uintptr_t; last = *reinterpret_cast(last); auto expected = reinterpret_cast(&obj); diff --git a/test/cctest/test_per_process.cc b/test/cctest/test_per_process.cc index 43af8dd65a7..1e3dff7114e 100644 --- a/test/cctest/test_per_process.cc +++ b/test/cctest/test_per_process.cc @@ -1,18 +1,17 @@ -#include "node_native_module.h" +#include "node_builtins.h" #include "gtest/gtest.h" #include "node_test_fixture.h" #include - -using node::native_module::NativeModuleLoader; -using node::native_module::NativeModuleRecordMap; +using node::builtins::BuiltinLoader; +using node::builtins::BuiltinSourceMap; class PerProcessTest : public ::testing::Test { protected: - static const NativeModuleRecordMap get_sources_for_test() { - return NativeModuleLoader::instance_.source_; + static const BuiltinSourceMap get_sources_for_test() { + return BuiltinLoader::instance_.source_; } }; @@ -20,15 +19,13 @@ namespace { TEST_F(PerProcessTest, EmbeddedSources) { const auto& sources = PerProcessTest::get_sources_for_test(); - ASSERT_TRUE( - std::any_of(sources.cbegin(), sources.cend(), - [](auto p){ return p.second.is_one_byte(); })) - << "NativeModuleLoader::source_ should have some 8bit items"; - - ASSERT_TRUE( - std::any_of(sources.cbegin(), sources.cend(), - [](auto p){ return !p.second.is_one_byte(); })) - << "NativeModuleLoader::source_ should have some 16bit items"; + ASSERT_TRUE(std::any_of(sources.cbegin(), sources.cend(), [](auto p) { + return p.second.is_one_byte(); + })) << "BuiltinLoader::source_ should have some 8bit items"; + + ASSERT_TRUE(std::any_of(sources.cbegin(), sources.cend(), [](auto p) { + return !p.second.is_one_byte(); + })) << "BuiltinLoader::source_ should have some 16bit items"; } } // end namespace diff --git a/test/cctest/test_report.cc b/test/cctest/test_report.cc new file mode 100644 index 00000000000..861fa40385e --- /dev/null +++ b/test/cctest/test_report.cc @@ -0,0 +1,125 @@ +#include "node.h" + +#include +#include "gtest/gtest.h" +#include "node_test_fixture.h" + +using node::Environment; +using v8::Context; +using v8::Function; +using v8::FunctionCallbackInfo; +using v8::HandleScope; +using v8::Isolate; +using v8::Local; +using v8::SealHandleScope; +using v8::String; +using v8::Value; + +bool report_callback_called = false; + +class ReportTest : public EnvironmentTestFixture { + private: + void TearDown() override { + NodeTestFixture::TearDown(); + report_callback_called = false; + } +}; + +TEST_F(ReportTest, ReportWithNoIsolate) { + SealHandleScope handle_scope(isolate_); + + std::ostringstream oss; + node::GetNodeReport(static_cast(nullptr), + "FooMessage", + "BarTrigger", + Local(), + oss); + + // Simple checks on the output string contains the message and trigger. + std::string actual = oss.str(); + EXPECT_NE(actual.find("FooMessage"), std::string::npos); + EXPECT_NE(actual.find("BarTrigger"), std::string::npos); +} + +TEST_F(ReportTest, ReportWithNoEnv) { + SealHandleScope handle_scope(isolate_); + + std::ostringstream oss; + node::GetNodeReport(static_cast(nullptr), + "FooMessage", + "BarTrigger", + Local(), + oss); + + // Simple checks on the output string contains the message and trigger. + std::string actual = oss.str(); + EXPECT_NE(actual.find("FooMessage"), std::string::npos); + EXPECT_NE(actual.find("BarTrigger"), std::string::npos); +} + +TEST_F(ReportTest, ReportWithIsolate) { + const HandleScope handle_scope(isolate_); + const Argv argv; + Env env{handle_scope, argv}; + + Local context = isolate_->GetCurrentContext(); + Local fn = + Function::New(context, [](const FunctionCallbackInfo& args) { + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + std::ostringstream oss; + node::GetNodeReport(isolate, "FooMessage", "BarTrigger", args[0], oss); + + // Simple checks on the output string contains the message and trigger. + std::string actual = oss.str(); + EXPECT_NE(actual.find("FooMessage"), std::string::npos); + EXPECT_NE(actual.find("BarTrigger"), std::string::npos); + + report_callback_called = true; + }).ToLocalChecked(); + + context->Global() + ->Set(context, String::NewFromUtf8(isolate_, "foo").ToLocalChecked(), fn) + .FromJust(); + + node::LoadEnvironment(*env, "foo()").ToLocalChecked(); + + EXPECT_TRUE(report_callback_called); +} + +TEST_F(ReportTest, ReportWithEnv) { + const HandleScope handle_scope(isolate_); + const Argv argv; + Env env{handle_scope, argv}; + + Local context = isolate_->GetCurrentContext(); + Local fn = + Function::New(context, [](const FunctionCallbackInfo& args) { + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + std::ostringstream oss; + node::GetNodeReport( + node::GetCurrentEnvironment(isolate->GetCurrentContext()), + "FooMessage", + "BarTrigger", + args[0], + oss); + + // Simple checks on the output string contains the message and trigger. + std::string actual = oss.str(); + EXPECT_NE(actual.find("FooMessage"), std::string::npos); + EXPECT_NE(actual.find("BarTrigger"), std::string::npos); + + report_callback_called = true; + }).ToLocalChecked(); + + context->Global() + ->Set(context, String::NewFromUtf8(isolate_, "foo").ToLocalChecked(), fn) + .FromJust(); + + node::LoadEnvironment(*env, "foo()").ToLocalChecked(); + + EXPECT_TRUE(report_callback_called); +} diff --git a/test/common/README.md b/test/common/README.md index f1789c1577d..517fce47cd2 100644 --- a/test/common/README.md +++ b/test/common/README.md @@ -59,7 +59,7 @@ On non-Windows platforms, this always returns `true`. ### `createZeroFilledFile(filename)` -Creates a 10 MB file of all null characters. +Creates a 10 MiB file of all null characters. ### `enoughTestMem` @@ -299,6 +299,40 @@ If `fn` is not provided, an empty function will be used. Returns a function that triggers an `AssertionError` if it is invoked. `msg` is used as the error message for the `AssertionError`. +### `mustNotMutateObjectDeep([target])` + +* `target` [\][] default = `undefined` +* return [\][] + +If `target` is an Object, returns a proxy object that triggers +an `AssertionError` on mutation attempt, including mutation of deeply nested +Objects. Otherwise, it returns `target` directly. + +Use of this function is encouraged for relevant regression tests. + +```mjs +import { open } from 'node:fs/promises'; +import { mustNotMutateObjectDeep } from '../common/index.mjs'; + +const _mutableOptions = { length: 4, position: 8 }; +const options = mustNotMutateObjectDeep(_mutableOptions); + +// In filehandle.read or filehandle.write, attempt to mutate options will throw +// In the test code, options can still be mutated via _mutableOptions +const fh = await open('/path/to/file', 'r+'); +const { buffer } = await fh.read(options); +_mutableOptions.position = 4; +await fh.write(buffer, options); + +// Inline usage +const stats = await fh.stat(mustNotMutateObjectDeep({ bigint: true })); +console.log(stats.size); +``` + +Caveats: built-in objects that make use of their internal slots (for example, +`Map`s and `Set`s) might not work with this function. It returns Functions +directly, not preventing their mutation. + ### `mustSucceed([fn])` * `fn` [\][] default = () => {} @@ -359,7 +393,7 @@ Platform normalized `pwd` command options. Usage example: ```js const common = require('../common'); -const { spawn } = require('child_process'); +const { spawn } = require('node:child_process'); spawn(...common.pwdCommand, { stdio: ['pipe'] }); ``` @@ -1024,6 +1058,7 @@ See [the WPT tests README][] for details. []: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function []: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object []: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp +[]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Data_types []: https://github.com/tc39/proposal-bigint []: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type []: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type diff --git a/test/common/child_process.js b/test/common/child_process.js new file mode 100644 index 00000000000..6d52e33fcef --- /dev/null +++ b/test/common/child_process.js @@ -0,0 +1,49 @@ +'use strict'; + +const assert = require('assert'); +const common = require('./'); + +// Workaround for Windows Server 2008R2 +// When CMD is used to launch a process and CMD is killed too quickly, the +// process can stay behind running in suspended state, never completing. +function cleanupStaleProcess(filename) { + if (!common.isWindows) { + return; + } + process.once('beforeExit', () => { + const basename = filename.replace(/.*[/\\]/g, ''); + try { + require('child_process') + .execFileSync(`${process.env.SystemRoot}\\System32\\wbem\\WMIC.exe`, [ + 'process', + 'where', + `commandline like '%${basename}%child'`, + 'delete', + '/nointeractive', + ]); + } catch { + // Ignore failures, there might not be any stale process to clean up. + } + }); +} + +// This should keep the child process running long enough to expire +// the timeout. +const kExpiringChildRunTime = common.platformTimeout(20 * 1000); +const kExpiringParentTimer = 1; +assert(kExpiringChildRunTime > kExpiringParentTimer); + +function logAfterTime(time) { + setTimeout(() => { + // The following console statements are part of the test. + console.log('child stdout'); + console.error('child stderr'); + }, time); +} + +module.exports = { + cleanupStaleProcess, + logAfterTime, + kExpiringChildRunTime, + kExpiringParentTimer +}; diff --git a/test/common/debugger.js b/test/common/debugger.js index d2ac4f3b6c5..4aff5b9a0f7 100644 --- a/test/common/debugger.js +++ b/test/common/debugger.js @@ -7,7 +7,13 @@ const BREAK_MESSAGE = new RegExp('(?:' + [ 'exception', 'other', 'promiseRejection', ].join('|') + ') in', 'i'); -const TIMEOUT = common.platformTimeout(5000); +let TIMEOUT = common.platformTimeout(5000); +if (common.isWindows) { + // Some of the windows machines in the CI need more time to receive + // the outputs from the client. + // https://github.com/nodejs/build/issues/3014 + TIMEOUT = common.platformTimeout(15000); +} function isPreBreak(output) { return /Break on start/.test(output) && /1 \(function \(exports/.test(output); diff --git a/test/common/index.js b/test/common/index.js index c852dced52e..66ffe3cf9b1 100644 --- a/test/common/index.js +++ b/test/common/index.js @@ -24,12 +24,12 @@ const process = global.process; // Some tests tamper with the process global. const assert = require('assert'); -const { exec, execSync, spawnSync } = require('child_process'); +const { exec, execSync, spawn, spawnSync } = require('child_process'); const fs = require('fs'); // Do not require 'os' until needed so that test-os-checked-function can // monkey patch it. If 'os' is required here, that test will fail. const path = require('path'); -const util = require('util'); +const { inspect } = require('util'); const { isMainThread } = require('worker_threads'); const tmpdir = require('./tmpdir'); @@ -97,7 +97,7 @@ if (process.argv.length === 2 && (process.features.inspector || !flag.startsWith('--inspect'))) { console.log( 'NOTE: The test started as a child_process using these flags:', - util.inspect(flags), + inspect(flags), 'Use NODE_SKIP_FLAG_CHECK to run the test with the original flags.' ); const args = [...flags, ...process.execArgv, ...process.argv.slice(1)]; @@ -120,6 +120,19 @@ const isFreeBSD = process.platform === 'freebsd'; const isOpenBSD = process.platform === 'openbsd'; const isLinux = process.platform === 'linux'; const isOSX = process.platform === 'darwin'; +const isPi = (() => { + try { + // Normal Raspberry Pi detection is to find the `Raspberry Pi` string in + // the contents of `/sys/firmware/devicetree/base/model` but that doesn't + // work inside a container. Match the chipset model number instead. + const cpuinfo = fs.readFileSync('/proc/cpuinfo', { encoding: 'utf8' }); + const ok = /^Hardware\s*:\s*(.*)$/im.exec(cpuinfo)?.[1] === 'BCM2835'; + /^/.test(''); // Clear RegExp.$_, some tests expect it to be empty. + return ok; + } catch { + return false; + } +})(); const isDumbTerminal = process.env.TERM === 'dumb'; @@ -138,7 +151,7 @@ if (process.env.NODE_TEST_WITH_ASYNC_HOOKS) { process.on('exit', () => { // Iterate through handles to make sure nothing crashes for (const k in initHandles) - util.inspect(initHandles[k]); + inspect(initHandles[k]); }); const _queueDestroyAsyncId = async_wrap.queueDestroyAsyncId; @@ -148,7 +161,7 @@ if (process.env.NODE_TEST_WITH_ASYNC_HOOKS) { process._rawDebug(); throw new Error(`same id added to destroy list twice (${id})`); } - destroyListList[id] = util.inspect(new Error()); + destroyListList[id] = inspect(new Error()); _queueDestroyAsyncId(id); }; @@ -162,7 +175,7 @@ if (process.env.NODE_TEST_WITH_ASYNC_HOOKS) { } initHandles[id] = { resource, - stack: util.inspect(new Error()).substr(6) + stack: inspect(new Error()).substr(6) }; }, before() { }, @@ -173,7 +186,7 @@ if (process.env.NODE_TEST_WITH_ASYNC_HOOKS) { process._rawDebug(); throw new Error(`destroy called for same id (${id})`); } - destroydIdsList[id] = util.inspect(new Error()); + destroydIdsList[id] = inspect(new Error()); }, }).enable(); } @@ -246,15 +259,10 @@ function platformTimeout(ms) { if (isAIX) return multipliers.two * ms; // Default localhost speed is slower on AIX - if (process.arch !== 'arm') - return ms; - - const armv = process.config.variables.arm_version; + if (isPi) + return multipliers.two * ms; // Raspberry Pi devices - if (armv === '7') - return multipliers.two * ms; // ARMv7 - - return ms; // ARMv8+ + return ms; } let knownGlobals = [ @@ -283,6 +291,9 @@ if (global.gc) { knownGlobals.push(global.gc); } +if (global.Performance) { + knownGlobals.push(global.Performance); +} if (global.performance) { knownGlobals.push(global.performance); } @@ -293,22 +304,46 @@ if (global.PerformanceMeasure) { knownGlobals.push(global.PerformanceMeasure); } -if (global.fetch) { - knownGlobals.push( - global.fetch, - global.FormData, - global.Request, - global.Response, - global.Headers, - ); +// TODO(@ethan-arrowood): Similar to previous checks, this can be temporary +// until v16.x is EOL. Once all supported versions have structuredClone we +// can add this to the list above instead. +if (global.structuredClone) { + knownGlobals.push(global.structuredClone); } +if (global.fetch) { + knownGlobals.push(fetch); +} if (hasCrypto && global.crypto) { knownGlobals.push(global.crypto); knownGlobals.push(global.Crypto); knownGlobals.push(global.CryptoKey); knownGlobals.push(global.SubtleCrypto); } +if (global.CustomEvent) { + knownGlobals.push(global.CustomEvent); +} +if (global.ReadableStream) { + knownGlobals.push( + global.ReadableStream, + global.ReadableStreamDefaultReader, + global.ReadableStreamBYOBReader, + global.ReadableStreamBYOBRequest, + global.ReadableByteStreamController, + global.ReadableStreamDefaultController, + global.TransformStream, + global.TransformStreamDefaultController, + global.WritableStream, + global.WritableStreamDefaultWriter, + global.WritableStreamDefaultController, + global.ByteLengthQueuingStrategy, + global.CountQueuingStrategy, + global.TextEncoderStream, + global.TextDecoderStream, + global.CompressionStream, + global.DecompressionStream, + ); +} function allowGlobals(...allowlist) { knownGlobals = knownGlobals.concat(allowlist); @@ -397,7 +432,7 @@ function _mustCallInner(fn, criteria = 1, field) { const context = { [field]: criteria, actual: 0, - stack: util.inspect(new Error()), + stack: inspect(new Error()), name: fn.name || '' }; @@ -485,13 +520,59 @@ function mustNotCall(msg) { const callSite = getCallSite(mustNotCall); return function mustNotCall(...args) { const argsInfo = args.length > 0 ? - `\ncalled with arguments: ${args.map(util.inspect).join(', ')}` : ''; + `\ncalled with arguments: ${args.map((arg) => inspect(arg)).join(', ')}` : ''; assert.fail( `${msg || 'function should not have been called'} at ${callSite}` + argsInfo); }; } +const _mustNotMutateObjectDeepProxies = new WeakMap(); + +function mustNotMutateObjectDeep(original) { + // Return primitives and functions directly. Primitives are immutable, and + // proxied functions are impossible to compare against originals, e.g. with + // `assert.deepEqual()`. + if (original === null || typeof original !== 'object') { + return original; + } + + const cachedProxy = _mustNotMutateObjectDeepProxies.get(original); + if (cachedProxy) { + return cachedProxy; + } + + const _mustNotMutateObjectDeepHandler = { + __proto__: null, + defineProperty(target, property, descriptor) { + assert.fail(`Expected no side effects, got ${inspect(property)} ` + + 'defined'); + }, + deleteProperty(target, property) { + assert.fail(`Expected no side effects, got ${inspect(property)} ` + + 'deleted'); + }, + get(target, prop, receiver) { + return mustNotMutateObjectDeep(Reflect.get(target, prop, receiver)); + }, + preventExtensions(target) { + assert.fail('Expected no side effects, got extensions prevented on ' + + inspect(target)); + }, + set(target, property, value, receiver) { + assert.fail(`Expected no side effects, got ${inspect(value)} ` + + `assigned to ${inspect(property)}`); + }, + setPrototypeOf(target, prototype) { + assert.fail(`Expected no side effects, got set prototype to ${prototype}`); + } + }; + + const proxy = new Proxy(original, _mustNotMutateObjectDeepHandler); + _mustNotMutateObjectDeepProxies.set(original, proxy); + return proxy; +} + function printSkipMessage(msg) { console.log(`1..0 # Skipped: ${msg}`); } @@ -587,7 +668,7 @@ function expectWarning(nameOrMap, expected, code) { if (!catchWarning[warning.name]) { throw new TypeError( `"${warning.name}" was triggered without being expected.\n` + - util.inspect(warning) + inspect(warning) ); } catchWarning[warning.name](warning); @@ -608,7 +689,7 @@ function expectsError(validator, exact) { if (args.length !== 1) { // Do not use `assert.strictEqual()` to prevent `inspect` from // always being called. - assert.fail(`Expected one argument, got ${util.inspect(args)}`); + assert.fail(`Expected one argument, got ${inspect(args)}`); } const error = args.pop(); const descriptor = Object.getOwnPropertyDescriptor(error, 'message'); @@ -653,6 +734,8 @@ function getArrayBufferViews(buf) { Uint32Array, Float32Array, Float64Array, + BigInt64Array, + BigUint64Array, DataView, ]; @@ -708,14 +791,15 @@ function invalidArgTypeHelper(input) { return ` Received function ${input.name}`; } if (typeof input === 'object') { - if (input.constructor && input.constructor.name) { + if (input.constructor?.name) { return ` Received an instance of ${input.constructor.name}`; } - return ` Received ${util.inspect(input, { depth: -1 })}`; + return ` Received ${inspect(input, { depth: -1 })}`; } - let inspected = util.inspect(input, { colors: false }); - if (inspected.length > 25) - inspected = `${inspected.slice(0, 25)}...`; + + let inspected = inspect(input, { colors: false }); + if (inspected.length > 28) { inspected = `${inspected.slice(inspected, 0, 25)}...`; } + return ` Received type ${typeof input} (${inspected})`; } @@ -763,6 +847,36 @@ function requireNoPackageJSONAbove(dir = __dirname) { } } +function spawnPromisified(...args) { + let stderr = ''; + let stdout = ''; + + const child = spawn(...args); + child.stderr.setEncoding('utf8'); + child.stderr.on('data', (data) => { stderr += data; }); + child.stdout.setEncoding('utf8'); + child.stdout.on('data', (data) => { stdout += data; }); + + return new Promise((resolve, reject) => { + child.on('close', (code, signal) => { + resolve({ + code, + signal, + stderr, + stdout, + }); + }); + child.on('error', (code, signal) => { + reject({ + code, + signal, + stderr, + stdout, + }); + }); + }); +} + const common = { allowGlobals, buildType, @@ -790,12 +904,14 @@ const common = { isMainThread, isOpenBSD, isOSX, + isPi, isSunOS, isWindows, localIPv6Hosts, mustCall, mustCallAtLeast, mustNotCall, + mustNotMutateObjectDeep, mustSucceed, nodeProcessAborted, PIPE, @@ -810,6 +926,7 @@ const common = { skipIfEslintMissing, skipIfInspectorDisabled, skipIfWorker, + spawnPromisified, get enoughTestMem() { return require('os').totalmem() > 0x70000000; /* 1.75 Gb */ diff --git a/test/common/index.mjs b/test/common/index.mjs index ec181dcacb4..e77b1b298cb 100644 --- a/test/common/index.mjs +++ b/test/common/index.mjs @@ -23,6 +23,7 @@ const { hasCrypto, hasIPv6, childShouldThrowAndAbort, + checkoutEOL, createZeroFilledFile, platformTimeout, allowGlobals, @@ -35,6 +36,7 @@ const { canCreateSymLink, getCallSite, mustNotCall, + mustNotMutateObjectDeep, printSkipMessage, skip, nodeProcessAborted, @@ -46,9 +48,12 @@ const { getArrayBufferViews, getBufferSources, getTTYfd, - runWithInvalidFD + runWithInvalidFD, + spawnPromisified, } = common; +const getPort = () => common.PORT; + export { isMainThread, isWindows, @@ -69,6 +74,7 @@ export { hasCrypto, hasIPv6, childShouldThrowAndAbort, + checkoutEOL, createZeroFilledFile, platformTimeout, allowGlobals, @@ -81,6 +87,7 @@ export { canCreateSymLink, getCallSite, mustNotCall, + mustNotMutateObjectDeep, printSkipMessage, skip, nodeProcessAborted, @@ -93,5 +100,7 @@ export { getBufferSources, getTTYfd, runWithInvalidFD, - createRequire + createRequire, + spawnPromisified, + getPort, }; diff --git a/test/common/inspector-helper.js b/test/common/inspector-helper.js index 0a47cb1d589..bddf3136298 100644 --- a/test/common/inspector-helper.js +++ b/test/common/inspector-helper.js @@ -5,8 +5,7 @@ const fs = require('fs'); const http = require('http'); const fixtures = require('../common/fixtures'); const { spawn } = require('child_process'); -const { parse: parseURL } = require('url'); -const { pathToFileURL } = require('url'); +const { URL, pathToFileURL } = require('url'); const { EventEmitter } = require('events'); const _MAINSCRIPT = fixtures.path('loop.js'); @@ -152,6 +151,7 @@ class InspectorSession { }); } + waitForServerDisconnect() { return this._terminationPromise; } @@ -327,13 +327,15 @@ class InspectorSession { class NodeInstance extends EventEmitter { constructor(inspectorFlags = ['--inspect-brk=0', '--expose-internals'], scriptContents = '', - scriptFile = _MAINSCRIPT) { + scriptFile = _MAINSCRIPT, + logger = console) { super(); + this._logger = logger; this._scriptPath = scriptFile; this._script = scriptFile ? null : scriptContents; this._portCallback = null; - this.portPromise = new Promise((resolve) => this._portCallback = resolve); + this.resetPort(); this._process = spawnChildProcess(inspectorFlags, scriptContents, scriptFile); this._running = true; @@ -343,7 +345,7 @@ class NodeInstance extends EventEmitter { this._process.stdout.on('data', makeBufferingDataCallback( (line) => { this.emit('stdout', line); - console.log('[out]', line); + this._logger.log('[out]', line); })); this._process.stderr.on('data', makeBufferingDataCallback( @@ -352,7 +354,7 @@ class NodeInstance extends EventEmitter { this._shutdownPromise = new Promise((resolve) => { this._process.once('exit', (exitCode, signal) => { if (signal) { - console.error(`[err] child process crashed, signal ${signal}`); + this._logger.error(`[err] child process crashed, signal ${signal}`); } resolve({ exitCode, signal }); this._running = false; @@ -360,6 +362,14 @@ class NodeInstance extends EventEmitter { }); } + get pid() { + return this._process.pid; + } + + resetPort() { + this.portPromise = new Promise((resolve) => this._portCallback = resolve); + } + static async startViaSignal(scriptContents) { const instance = new NodeInstance( ['--expose-internals'], @@ -371,7 +381,8 @@ class NodeInstance extends EventEmitter { } onStderrLine(line) { - console.log('[err]', line); + this.emit('stderr', line); + this._logger.log('[err]', line); if (this._portCallback) { const matches = line.match(/Debugger listening on ws:\/\/.+:(\d+)\/.+/); if (matches) { @@ -388,7 +399,7 @@ class NodeInstance extends EventEmitter { } httpGet(host, path, hostHeaderValue) { - console.log('[test]', `Testing ${path}`); + this._logger.log('[test]', `Testing ${path}`); const headers = hostHeaderValue ? { 'Host': hostHeaderValue } : null; return this.portPromise.then((port) => new Promise((resolve, reject) => { const req = http.get({ host, port, path, headers }, (res) => { @@ -417,7 +428,7 @@ class NodeInstance extends EventEmitter { const port = await this.portPromise; return http.get({ port, - path: parseURL(devtoolsUrl).path, + path: new URL(devtoolsUrl).pathname, headers: { 'Connection': 'Upgrade', 'Upgrade': 'websocket', @@ -428,7 +439,7 @@ class NodeInstance extends EventEmitter { } async connectInspectorSession() { - console.log('[test]', 'Connecting to a child Node process'); + this._logger.log('[test]', 'Connecting to a child Node process'); const upgradeRequest = await this.sendUpgradeRequest(); return new Promise((resolve) => { upgradeRequest @@ -439,7 +450,7 @@ class NodeInstance extends EventEmitter { } async expectConnectionDeclined() { - console.log('[test]', 'Checking upgrade is not possible'); + this._logger.log('[test]', 'Checking upgrade is not possible'); const upgradeRequest = await this.sendUpgradeRequest(); return new Promise((resolve) => { upgradeRequest diff --git a/test/common/prof.js b/test/common/prof.js new file mode 100644 index 00000000000..3eb288be1b9 --- /dev/null +++ b/test/common/prof.js @@ -0,0 +1,67 @@ +'use strict'; + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); + +function getHeapProfiles(dir) { + const list = fs.readdirSync(dir); + return list + .filter((file) => file.endsWith('.heapprofile')) + .map((file) => path.join(dir, file)); +} + +function findFirstFrameInNode(root, func) { + const first = root.children.find( + (child) => child.callFrame.functionName === func + ); + if (first) { + return first; + } + for (const child of root.children) { + const first = findFirstFrameInNode(child, func); + if (first) { + return first; + } + } + return undefined; +} + +function findFirstFrame(file, func) { + const data = fs.readFileSync(file, 'utf8'); + const profile = JSON.parse(data); + const first = findFirstFrameInNode(profile.head, func); + return { frame: first, roots: profile.head.children }; +} + +function verifyFrames(output, file, func) { + const { frame, roots } = findFirstFrame(file, func); + if (!frame) { + // Show native debug output and the profile for debugging. + console.log(output.stderr.toString()); + console.log(roots); + } + assert.notStrictEqual(frame, undefined); +} + +// We need to set --heap-prof-interval to a small enough value to make +// sure we can find our workload in the samples, so we need to set +// TEST_ALLOCATION > kHeapProfInterval. +const kHeapProfInterval = 128; +const TEST_ALLOCATION = kHeapProfInterval * 2; + +const env = { + ...process.env, + TEST_ALLOCATION, + NODE_DEBUG_NATIVE: 'INSPECTOR_PROFILER' +}; + +// TODO(joyeecheung): share the fixutres with v8 coverage tests +module.exports = { + getHeapProfiles, + verifyFrames, + findFirstFrame, + kHeapProfInterval, + TEST_ALLOCATION, + env +}; diff --git a/test/common/report.js b/test/common/report.js index f1c0d05e490..e9f252b079e 100644 --- a/test/common/report.js +++ b/test/common/report.js @@ -193,14 +193,32 @@ function _validateContent(report, fields = []) { // Verify the format of the javascriptHeap section. const heap = report.javascriptHeap; - const jsHeapFields = ['totalMemory', 'totalCommittedMemory', 'usedMemory', - 'availableMemory', 'memoryLimit', 'heapSpaces']; + // See `PrintGCStatistics` in node_report.cc + const jsHeapFields = [ + 'totalMemory', + 'executableMemory', + 'totalCommittedMemory', + 'availableMemory', + 'totalGlobalHandlesMemory', + 'usedGlobalHandlesMemory', + 'usedMemory', + 'memoryLimit', + 'mallocedMemory', + 'externalMemory', + 'peakMallocedMemory', + 'nativeContextCount', + 'detachedContextCount', + 'doesZapGarbage', + 'heapSpaces', + ]; checkForUnknownFields(heap, jsHeapFields); - assert(Number.isSafeInteger(heap.totalMemory)); - assert(Number.isSafeInteger(heap.totalCommittedMemory)); - assert(Number.isSafeInteger(heap.usedMemory)); - assert(Number.isSafeInteger(heap.availableMemory)); - assert(Number.isSafeInteger(heap.memoryLimit)); + // Do not check `heapSpaces` here + for (let i = 0; i < jsHeapFields.length - 1; i++) { + assert( + Number.isSafeInteger(heap[jsHeapFields[i]]), + `heap.${jsHeapFields[i]} is not a safe integer` + ); + } assert(typeof heap.heapSpaces === 'object' && heap.heapSpaces !== null); const heapSpaceFields = ['memorySize', 'committedMemory', 'capacity', 'used', 'available']; diff --git a/test/common/tmpdir.js b/test/common/tmpdir.js index 0bafea1582b..8dbb6fda43c 100644 --- a/test/common/tmpdir.js +++ b/test/common/tmpdir.js @@ -19,8 +19,8 @@ const tmpPath = path.join(testRoot, tmpdirName); let firstRefresh = true; function refresh() { - rmSync(this.path); - fs.mkdirSync(this.path); + rmSync(tmpPath); + fs.mkdirSync(tmpPath); if (firstRefresh) { firstRefresh = false; diff --git a/test/common/wpt.js b/test/common/wpt.js index 2a772f6f0fa..4d555e28a34 100644 --- a/test/common/wpt.js +++ b/test/common/wpt.js @@ -5,6 +5,7 @@ const fixtures = require('../common/fixtures'); const fs = require('fs'); const fsPromises = fs.promises; const path = require('path'); +const events = require('events'); const { inspect } = require('util'); const { Worker } = require('worker_threads'); @@ -56,7 +57,7 @@ class ResourceLoader { /** * Load a resource in test/fixtures/wpt specified with a URL * @param {string} from the path of the file loading this resource, - * relative to thw WPT folder. + * relative to the WPT folder. * @param {string} url the url of the resource being loaded. * @param {boolean} asFetch if true, return the resource in a * pseudo-Response object. @@ -78,7 +79,7 @@ class ResourceLoader { } class StatusRule { - constructor(key, value, pattern = undefined) { + constructor(key, value, pattern) { this.key = key; this.requires = value.requires || []; this.fail = value.fail; @@ -152,7 +153,8 @@ class WPTTestSpec { this.filename = filename; this.requires = new Set(); - this.failReasons = []; + this.failedTests = []; + this.flakyTests = []; this.skipReasons = []; for (const item of rules) { if (item.requires.length) { @@ -160,13 +162,21 @@ class WPTTestSpec { this.requires.add(req); } } - if (item.fail) { - this.failReasons.push(item.fail); + if (Array.isArray(item.fail?.expected)) { + this.failedTests.push(...item.fail.expected); + } + if (Array.isArray(item.fail?.flaky)) { + this.failedTests.push(...item.fail.flaky); + this.flakyTests.push(...item.fail.flaky); } if (item.skip) { this.skipReasons.push(item.skip); } } + + this.failedTests = [...new Set(this.failedTests)]; + this.flakyTests = [...new Set(this.flakyTests)]; + this.skipReasons = [...new Set(this.skipReasons)]; } getRelativePath() { @@ -368,7 +378,7 @@ class WPTRunner { // TODO(joyeecheung): work with the upstream to port more tests in .html // to .js. - runJsTests() { + async runJsTests() { let queue = []; // If the tests are run as `node test/wpt/test-something.js subset.any.js`, @@ -459,6 +469,8 @@ class WPTRunner { ); this.inProgress.delete(testFileName); }); + + await events.once(worker, 'exit').catch(() => {}); } process.on('exit', () => { @@ -469,34 +481,72 @@ class WPTRunner { } } inspect.defaultOptions.depth = Infinity; - console.log(this.results); + // Sorts the rules to have consistent output + console.log(JSON.stringify(Object.keys(this.results).sort().reduce( + (obj, key) => { + obj[key] = this.results[key]; + return obj; + }, + {} + ), null, 2)); const failures = []; let expectedFailures = 0; let skipped = 0; - for (const key of Object.keys(this.results)) { - const item = this.results[key]; - if (item.fail && item.fail.unexpected) { + for (const [key, item] of Object.entries(this.results)) { + if (item.fail?.unexpected) { failures.push(key); } - if (item.fail && item.fail.expected) { + if (item.fail?.expected) { expectedFailures++; } if (item.skip) { skipped++; } } + + const unexpectedPasses = []; + for (const [key, specMap] of this.specMap) { + // File has no expected failures + if (!specMap.failedTests.length) { + continue; + } + + // File was (maybe even conditionally) skipped + if (this.results[key]?.skip) { + continue; + } + + // Full check: every expected to fail test is present + if (specMap.failedTests.some((expectedToFail) => { + if (specMap.flakyTests.includes(expectedToFail)) { + return false; + } + return this.results[key]?.fail?.expected?.includes(expectedToFail) !== true; + })) { + unexpectedPasses.push(key); + continue; + } + } + const ran = total - skipped; const passed = ran - expectedFailures - failures.length; console.log(`Ran ${ran}/${total} tests, ${skipped} skipped,`, `${passed} passed, ${expectedFailures} expected failures,`, - `${failures.length} unexpected failures`); + `${failures.length} unexpected failures,`, + `${unexpectedPasses.length} unexpected passes`); if (failures.length > 0) { const file = path.join('test', 'wpt', 'status', `${this.path}.json`); throw new Error( `Found ${failures.length} unexpected failures. ` + `Consider updating ${file} for these files:\n${failures.join('\n')}`); } + if (unexpectedPasses.length > 0) { + const file = path.join('test', 'wpt', 'status', `${this.path}.json`); + throw new Error( + `Found ${unexpectedPasses.length} unexpected passes. ` + + `Consider updating ${file} for these files:\n${unexpectedPasses.join('\n')}`); + } }); } @@ -577,8 +627,9 @@ class WPTRunner { if (!result[item.status][key]) { result[item.status][key] = []; } - if (result[item.status][key].indexOf(item.reason) === -1) { - result[item.status][key].push(item.reason); + const hasName = result[item.status][key].includes(item.name); + if (!hasName) { + result[item.status][key].push(item.name); } } } @@ -589,10 +640,10 @@ class WPTRunner { fail(filename, test, status) { const spec = this.specMap.get(filename); - const expected = !!(spec.failReasons.length); + const expected = spec.failedTests.includes(test.name); if (expected) { console.log(`[EXPECTED_FAILURE][${status.toUpperCase()}] ${test.name}`); - console.log(spec.failReasons.join('; ')); + console.log(test.message || status); } else { console.log(`[UNEXPECTED_FAILURE][${status.toUpperCase()}] ${test.name}`); } @@ -604,6 +655,7 @@ class WPTRunner { ` ${require.main.filename} ${filename}`; console.log(`Command: ${command}\n`); this.addTestResult(filename, { + name: test.name, expected, status: kFail, reason: test.message || status diff --git a/test/common/wpt/worker.js b/test/common/wpt/worker.js index 468e950ac10..47e119c22dc 100644 --- a/test/common/wpt/worker.js +++ b/test/common/wpt/worker.js @@ -8,7 +8,8 @@ const resource = new ResourceLoader(workerData.wptPath); global.self = global; global.GLOBAL = { - isWindow() { return false; } + isWindow() { return false; }, + isShadowRealm() { return false; } }; global.require = require; diff --git a/test/doctool/test-doctool-versions.mjs b/test/doctool/test-doctool-versions.mjs index 87e17ba0727..10eb8467bb1 100644 --- a/test/doctool/test-doctool-versions.mjs +++ b/test/doctool/test-doctool-versions.mjs @@ -62,8 +62,8 @@ for (const version of versions) { // Check that the minimum number of versions were returned. // Later versions are allowed, but not checked for here (they were checked // above). -// Also check for the previous semver major -- From master this will be the -// most recent major release. +// Also check for the previous semver major -- From the main branch this will be +// the most recent major release. const thisMajor = Number.parseInt(process.versions.node.split('.')[0]); const prevMajorString = `${thisMajor - 1}.x`; if (!expected.includes(prevMajorString)) { diff --git a/test/doctool/test-make-doc.mjs b/test/doctool/test-make-doc.mjs index 54483c7d689..5771f4e1ce7 100644 --- a/test/doctool/test-make-doc.mjs +++ b/test/doctool/test-make-doc.mjs @@ -45,6 +45,7 @@ const linkedHtmls = [...new Set(links)].map((link) => link.match(re)[1]) const expectedJsons = linkedHtmls .map((name) => name.replace('.html', '.json')); const expectedDocs = linkedHtmls.concat(expectedJsons); +const renamedDocs = ['policy.json', 'policy.html']; // Test that all the relative links in the TOC match to the actual documents. for (const expectedDoc of expectedDocs) { @@ -54,6 +55,11 @@ for (const expectedDoc of expectedDocs) { // Test that all the actual documents match to the relative links in the TOC // and that they are not empty files. for (const actualDoc of actualDocs) { + // When renaming the documentation, the old url is lost + // Unless the old file is still available pointing to the correct location + // 301 redirects are not yet automated. So keeping the old URL is a + // reasonable workaround. + if (renamedDocs.includes(actualDoc)) continue; assert.ok( expectedDocs.includes(actualDoc), `${actualDoc} does not match TOC`); diff --git a/test/es-module/test-cjs-esm-warn.js b/test/es-module/test-cjs-esm-warn.js index d7eeb65b152..c1d60a20950 100644 --- a/test/es-module/test-cjs-esm-warn.js +++ b/test/es-module/test-cjs-esm-warn.js @@ -1,10 +1,12 @@ 'use strict'; -const common = require('../common'); -const fixtures = require('../common/fixtures'); -const { spawn } = require('child_process'); -const assert = require('assert'); -const path = require('path'); +const { spawnPromisified } = require('../common'); +const fixtures = require('../common/fixtures.js'); +const assert = require('node:assert'); +const path = require('node:path'); +const { execPath } = require('node:process'); +const { describe, it } = require('node:test'); + const requiringCjsAsEsm = path.resolve(fixtures.path('/es-modules/cjs-esm.js')); const requiringEsm = path.resolve(fixtures.path('/es-modules/cjs-esm-esm.js')); @@ -12,53 +14,55 @@ const pjson = path.resolve( fixtures.path('/es-modules/package-type-module/package.json') ); -{ - const required = path.resolve( - fixtures.path('/es-modules/package-type-module/cjs.js') - ); - const basename = 'cjs.js'; - const child = spawn(process.execPath, [requiringCjsAsEsm]); - let stderr = ''; - child.stderr.setEncoding('utf8'); - child.stderr.on('data', (data) => { - stderr += data; - }); - child.on('close', common.mustCall((code, signal) => { + +describe('CJS ↔︎ ESM interop warnings', { concurrency: true }, () => { + + it(async () => { + const required = path.resolve( + fixtures.path('/es-modules/package-type-module/cjs.js') + ); + const basename = 'cjs.js'; + const { code, signal, stderr } = await spawnPromisified(execPath, [requiringCjsAsEsm]); + + assert.ok( + stderr.replaceAll('\r', '').includes( + `Error [ERR_REQUIRE_ESM]: require() of ES Module ${required} from ${requiringCjsAsEsm} not supported.\n` + ) + ); + assert.ok( + stderr.replaceAll('\r', '').includes( + `Instead rename ${basename} to end in .cjs, change the requiring ` + + 'code to use dynamic import() which is available in all CommonJS ' + + `modules, or change "type": "module" to "type": "commonjs" in ${pjson} to ` + + 'treat all .js files as CommonJS (using .mjs for all ES modules ' + + 'instead).\n' + ) + ); + assert.strictEqual(code, 1); assert.strictEqual(signal, null); + }); - assert.ok(stderr.replaceAll('\r', '').includes( - `Error [ERR_REQUIRE_ESM]: require() of ES Module ${required} from ${ - requiringCjsAsEsm} not supported.\n`)); - assert.ok(stderr.replaceAll('\r', '').includes( - `Instead rename ${basename} to end in .cjs, change the requiring ` + - 'code to use dynamic import() which is available in all CommonJS ' + - `modules, or change "type": "module" to "type": "commonjs" in ${pjson} to ` + - 'treat all .js files as CommonJS (using .mjs for all ES modules ' + - 'instead).\n')); - })); -} + it(async () => { + const required = path.resolve( + fixtures.path('/es-modules/package-type-module/esm.js') + ); + const basename = 'esm.js'; + const { code, signal, stderr } = await spawnPromisified(execPath, [requiringEsm]); + + assert.ok( + stderr.replace(/\r/g, '').includes( + `Error [ERR_REQUIRE_ESM]: require() of ES Module ${required} from ${requiringEsm} not supported.\n` + ) + ); + assert.ok( + stderr.replace(/\r/g, '').includes( + `Instead change the require of ${basename} in ${requiringEsm} to` + + ' a dynamic import() which is available in all CommonJS modules.\n' + ) + ); -{ - const required = path.resolve( - fixtures.path('/es-modules/package-type-module/esm.js') - ); - const basename = 'esm.js'; - const child = spawn(process.execPath, [requiringEsm]); - let stderr = ''; - child.stderr.setEncoding('utf8'); - child.stderr.on('data', (data) => { - stderr += data; - }); - child.on('close', common.mustCall((code, signal) => { assert.strictEqual(code, 1); assert.strictEqual(signal, null); - - assert.ok(stderr.replace(/\r/g, '').includes( - `Error [ERR_REQUIRE_ESM]: require() of ES Module ${required} from ${ - requiringEsm} not supported.\n`)); - assert.ok(stderr.replace(/\r/g, '').includes( - `Instead change the require of ${basename} in ${requiringEsm} to` + - ' a dynamic import() which is available in all CommonJS modules.\n')); - })); -} + }); +}); diff --git a/test/es-module/test-esm-cjs-builtins.js b/test/es-module/test-esm-cjs-builtins.js index 63aae732904..c49abfd8c93 100644 --- a/test/es-module/test-esm-cjs-builtins.js +++ b/test/es-module/test-esm-cjs-builtins.js @@ -1,21 +1,20 @@ 'use strict'; -const common = require('../common'); -const fixtures = require('../common/fixtures'); -const { spawn } = require('child_process'); -const assert = require('assert'); +const { spawnPromisified } = require('../common'); +const fixtures = require('../common/fixtures.js'); +const assert = require('node:assert'); +const { execPath } = require('node:process'); +const { describe, it } = require('node:test'); + const entry = fixtures.path('/es-modules/builtin-imports-case.mjs'); -const child = spawn(process.execPath, [entry]); -child.stderr.setEncoding('utf8'); -let stdout = ''; -child.stdout.setEncoding('utf8'); -child.stdout.on('data', (data) => { - stdout += data; +describe('ESM: importing builtins & CJS', () => { + it('should work', async () => { + const { code, signal, stdout } = await spawnPromisified(execPath, [entry]); + + assert.strictEqual(code, 0); + assert.strictEqual(signal, null); + assert.strictEqual(stdout, 'ok\n'); + }); }); -child.on('close', common.mustCall((code, signal) => { - assert.strictEqual(code, 0); - assert.strictEqual(signal, null); - assert.strictEqual(stdout, 'ok\n'); -})); diff --git a/test/es-module/test-esm-cjs-exports.js b/test/es-module/test-esm-cjs-exports.js index 7db2c6fdb59..4f79d2ce4bc 100644 --- a/test/es-module/test-esm-cjs-exports.js +++ b/test/es-module/test-esm-cjs-exports.js @@ -1,35 +1,29 @@ 'use strict'; -const common = require('../common'); -const fixtures = require('../common/fixtures'); -const { spawn } = require('child_process'); -const assert = require('assert'); +const { spawnPromisified } = require('../common'); +const fixtures = require('../common/fixtures.js'); +const assert = require('node:assert'); +const { execPath } = require('node:process'); +const { describe, it } = require('node:test'); -const entry = fixtures.path('/es-modules/cjs-exports.mjs'); -let child = spawn(process.execPath, [entry]); -child.stderr.setEncoding('utf8'); -let stdout = ''; -child.stdout.setEncoding('utf8'); -child.stdout.on('data', (data) => { - stdout += data; -}); -child.on('close', common.mustCall((code, signal) => { - assert.strictEqual(code, 0); - assert.strictEqual(signal, null); - assert.strictEqual(stdout, 'ok\n'); -})); +describe('ESM: importing CJS', { concurrency: true }, () => { + it('should support valid CJS exports', async () => { + const validEntry = fixtures.path('/es-modules/cjs-exports.mjs'); + const { code, signal, stdout } = await spawnPromisified(execPath, [validEntry]); + + assert.strictEqual(code, 0); + assert.strictEqual(signal, null); + assert.strictEqual(stdout, 'ok\n'); + }); + + it('should error on invalid CJS exports', async () => { + const invalidEntry = fixtures.path('/es-modules/cjs-exports-invalid.mjs'); + const { code, signal, stderr } = await spawnPromisified(execPath, [invalidEntry]); -const entryInvalid = fixtures.path('/es-modules/cjs-exports-invalid.mjs'); -child = spawn(process.execPath, [entryInvalid]); -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; + assert.strictEqual(code, 1); + assert.strictEqual(signal, null); + assert.ok(stderr.includes('Warning: To load an ES module')); + assert.ok(stderr.includes('Unexpected token \'export\'')); + }); }); -child.on('close', common.mustCall((code, signal) => { - assert.strictEqual(code, 1); - assert.strictEqual(signal, null); - assert.ok(stderr.includes('Warning: To load an ES module')); - assert.ok(stderr.includes('Unexpected token \'export\'')); -})); diff --git a/test/es-module/test-esm-cjs-load-error-note.mjs b/test/es-module/test-esm-cjs-load-error-note.mjs index 02984324413..4df9e903eb6 100644 --- a/test/es-module/test-esm-cjs-load-error-note.mjs +++ b/test/es-module/test-esm-cjs-load-error-note.mjs @@ -1,163 +1,96 @@ -import { mustCall } from '../common/index.mjs'; -import assert from 'assert'; -import fixtures from '../common/fixtures.js'; -import { spawn } from 'child_process'; +import { spawnPromisified } from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -const Export1 = fixtures.path('/es-modules/es-note-unexpected-export-1.cjs'); -const Export2 = fixtures.path('/es-modules/es-note-unexpected-export-2.cjs'); -const Import1 = fixtures.path('/es-modules/es-note-unexpected-import-1.cjs'); -const Import2 = fixtures.path('/es-modules/es-note-promiserej-import-2.cjs'); -const Import3 = fixtures.path('/es-modules/es-note-unexpected-import-3.cjs'); -const Import4 = fixtures.path('/es-modules/es-note-unexpected-import-4.cjs'); -const Import5 = fixtures.path('/es-modules/es-note-unexpected-import-5.cjs'); -const Error1 = fixtures.path('/es-modules/es-note-error-1.mjs'); -const Error2 = fixtures.path('/es-modules/es-note-error-2.mjs'); -const Error3 = fixtures.path('/es-modules/es-note-error-3.mjs'); -const Error4 = fixtures.path('/es-modules/es-note-error-4.mjs'); // Expect note to be included in the error output const expectedNote = 'To load an ES module, ' + 'set "type": "module" in the package.json ' + 'or use the .mjs extension.'; -const expectedCode = 1; - -const pExport1 = spawn(process.execPath, [Export1]); -let pExport1Stderr = ''; -pExport1.stderr.setEncoding('utf8'); -pExport1.stderr.on('data', (data) => { - pExport1Stderr += data; -}); -pExport1.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(pExport1Stderr.includes(expectedNote), - `${expectedNote} not found in ${pExport1Stderr}`); -})); - - -const pExport2 = spawn(process.execPath, [Export2]); -let pExport2Stderr = ''; -pExport2.stderr.setEncoding('utf8'); -pExport2.stderr.on('data', (data) => { - pExport2Stderr += data; -}); -pExport2.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(pExport2Stderr.includes(expectedNote), - `${expectedNote} not found in ${pExport2Stderr}`); -})); - -const pImport1 = spawn(process.execPath, [Import1]); -let pImport1Stderr = ''; -pImport1.stderr.setEncoding('utf8'); -pImport1.stderr.on('data', (data) => { - pImport1Stderr += data; -}); -pImport1.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(pImport1Stderr.includes(expectedNote), - `${expectedNote} not found in ${pExport1Stderr}`); -})); - -// Note this test shouldn't include the note -const pImport2 = spawn(process.execPath, [Import2]); -let pImport2Stderr = ''; -pImport2.stderr.setEncoding('utf8'); -pImport2.stderr.on('data', (data) => { - pImport2Stderr += data; -}); -pImport2.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(!pImport2Stderr.includes(expectedNote), - `${expectedNote} must not be included in ${pImport2Stderr}`); -})); - -const pImport3 = spawn(process.execPath, [Import3]); -let pImport3Stderr = ''; -pImport3.stderr.setEncoding('utf8'); -pImport3.stderr.on('data', (data) => { - pImport3Stderr += data; -}); -pImport3.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(pImport3Stderr.includes(expectedNote), - `${expectedNote} not found in ${pImport3Stderr}`); -})); - - -const pImport4 = spawn(process.execPath, [Import4]); -let pImport4Stderr = ''; -pImport4.stderr.setEncoding('utf8'); -pImport4.stderr.on('data', (data) => { - pImport4Stderr += data; -}); -pImport4.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(pImport4Stderr.includes(expectedNote), - `${expectedNote} not found in ${pImport4Stderr}`); -})); - -// Must exit non-zero and show note -const pImport5 = spawn(process.execPath, [Import5]); -let pImport5Stderr = ''; -pImport5.stderr.setEncoding('utf8'); -pImport5.stderr.on('data', (data) => { - pImport5Stderr += data; -}); -pImport5.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(!pImport5Stderr.includes(expectedNote), - `${expectedNote} must not be included in ${pImport5Stderr}`); -})); - -const pError1 = spawn(process.execPath, [Error1]); -let pError1Stderr = ''; -pError1.stderr.setEncoding('utf8'); -pError1.stderr.on('data', (data) => { - pError1Stderr += data; -}); -pError1.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(pError1Stderr.includes('Error: some error')); - assert.ok(!pError1Stderr.includes(expectedNote), - `${expectedNote} must not be included in ${pError1Stderr}`); -})); - -const pError2 = spawn(process.execPath, [Error2]); -let pError2Stderr = ''; -pError2.stderr.setEncoding('utf8'); -pError2.stderr.on('data', (data) => { - pError2Stderr += data; -}); -pError2.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(pError2Stderr.includes('string')); - assert.ok(!pError2Stderr.includes(expectedNote), - `${expectedNote} must not be included in ${pError2Stderr}`); -})); - -const pError3 = spawn(process.execPath, [Error3]); -let pError3Stderr = ''; -pError3.stderr.setEncoding('utf8'); -pError3.stderr.on('data', (data) => { - pError3Stderr += data; -}); -pError3.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(pError3Stderr.includes('null')); - assert.ok(!pError3Stderr.includes(expectedNote), - `${expectedNote} must not be included in ${pError3Stderr}`); -})); - -const pError4 = spawn(process.execPath, [Error4]); -let pError4Stderr = ''; -pError4.stderr.setEncoding('utf8'); -pError4.stderr.on('data', (data) => { - pError4Stderr += data; +const mustIncludeMessage = { + getMessage: () => (stderr) => `${expectedNote} not found in ${stderr}`, + includeNote: true, +}; +const mustNotIncludeMessage = { + getMessage: () => (stderr) => `${expectedNote} must not be included in ${stderr}`, + includeNote: false, +}; + +describe('ESM: Errors for unexpected exports', { concurrency: true }, () => { + for ( + const { errorNeedle, filePath, getMessage, includeNote } + of [ + { + // name: '', + filePath: fixtures.path('/es-modules/es-note-unexpected-export-1.cjs'), + ...mustIncludeMessage, + }, + { + // name: '', + filePath: fixtures.path('/es-modules/es-note-unexpected-import-1.cjs'), + ...mustIncludeMessage, + }, + { + // name: '', + filePath: fixtures.path('/es-modules/es-note-promiserej-import-2.cjs'), + ...mustNotIncludeMessage, + }, + { + // name: '', + filePath: fixtures.path('/es-modules/es-note-unexpected-import-3.cjs'), + ...mustIncludeMessage, + }, + { + // name: '', + filePath: fixtures.path('/es-modules/es-note-unexpected-import-4.cjs'), + ...mustIncludeMessage, + }, + { + // name: '', + filePath: fixtures.path('/es-modules/es-note-unexpected-import-5.cjs'), + ...mustNotIncludeMessage, + }, + { + // name: '', + filePath: fixtures.path('/es-modules/es-note-error-1.mjs'), + ...mustNotIncludeMessage, + errorNeedle: /Error: some error/, + }, + { + // name: '', + filePath: fixtures.path('/es-modules/es-note-error-2.mjs'), + ...mustNotIncludeMessage, + errorNeedle: /string/, + }, + { + // name: '', + filePath: fixtures.path('/es-modules/es-note-error-3.mjs'), + ...mustNotIncludeMessage, + errorNeedle: /null/, + }, + { + // name: '', + filePath: fixtures.path('/es-modules/es-note-error-4.mjs'), + ...mustNotIncludeMessage, + errorNeedle: /undefined/, + }, + ] + ) { + it(`should ${includeNote ? '' : 'NOT'} include note`, async () => { + const { code, stderr } = await spawnPromisified(execPath, [filePath]); + + assert.strictEqual(code, 1); + + if (errorNeedle != null) assert.match(stderr, errorNeedle); + + const shouldIncludeNote = stderr.includes(expectedNote); + assert.ok( + includeNote ? shouldIncludeNote : !shouldIncludeNote, + `${filePath} ${getMessage(stderr)}`, + ); + }); + } }); -pError4.on('close', mustCall((code) => { - assert.strictEqual(code, expectedCode); - assert.ok(pError4Stderr.includes('undefined')); - assert.ok(!pError4Stderr.includes(expectedNote), - `${expectedNote} must not be included in ${pError4Stderr}`); -})); diff --git a/test/es-module/test-esm-cjs-main.js b/test/es-module/test-esm-cjs-main.js index 92f4124ccaa..bb209648356 100644 --- a/test/es-module/test-esm-cjs-main.js +++ b/test/es-module/test-esm-cjs-main.js @@ -1,21 +1,20 @@ 'use strict'; -const common = require('../common'); -const fixtures = require('../common/fixtures'); -const { spawn } = require('child_process'); -const assert = require('assert'); +const { spawnPromisified } = require('../common'); +const fixtures = require('../common/fixtures.js'); +const assert = require('node:assert'); +const { execPath } = require('node:process'); +const { describe, it } = require('node:test'); -const entry = fixtures.path('/es-modules/cjs.js'); -const child = spawn(process.execPath, [entry]); -child.stderr.setEncoding('utf8'); -let stdout = ''; -child.stdout.setEncoding('utf8'); -child.stdout.on('data', (data) => { - stdout += data; +describe('ESM: importing CJS', () => { + it('should work', async () => { + const { code, signal, stdout } = await spawnPromisified(execPath, [ + fixtures.path('/es-modules/cjs.js'), + ]); + + assert.strictEqual(code, 0); + assert.strictEqual(signal, null); + assert.strictEqual(stdout, 'executed\n'); + }); }); -child.on('close', common.mustCall((code, signal) => { - assert.strictEqual(code, 0); - assert.strictEqual(signal, null); - assert.strictEqual(stdout, 'executed\n'); -})); diff --git a/test/es-module/test-esm-data-urls.js b/test/es-module/test-esm-data-urls.js index 9d0deb70a15..5be45d0f7af 100644 --- a/test/es-module/test-esm-data-urls.js +++ b/test/es-module/test-esm-data-urls.js @@ -1,5 +1,6 @@ 'use strict'; const common = require('../common'); +const fixtures = require('../common/fixtures'); const assert = require('assert'); function createURL(mime, body) { return `data:${mime},${body}`; @@ -107,4 +108,8 @@ function createBase64URL(mime, body) { const module = await import(plainESMURL); assert.strictEqual(module.default, 2); } + { + const plainESMURL = `data:text/javascript,${encodeURIComponent(`import ${JSON.stringify(fixtures.fileURL('es-module-url', 'empty.js'))}`)}`; + await import(plainESMURL); + } })().then(common.mustCall()); diff --git a/test/es-module/test-esm-encoded-path-native.js b/test/es-module/test-esm-encoded-path-native.js index b8f5719b608..7574e55278b 100644 --- a/test/es-module/test-esm-encoded-path-native.js +++ b/test/es-module/test-esm-encoded-path-native.js @@ -1,11 +1,18 @@ 'use strict'; -require('../common'); -const fixtures = require('../common/fixtures'); -const assert = require('assert'); -const { spawn } = require('child_process'); - -const native = fixtures.path('es-module-url/native.mjs'); -const child = spawn(process.execPath, [native]); -child.on('exit', (code) => { - assert.strictEqual(code, 1); + +const { spawnPromisified } = require('../common'); +const fixtures = require('../common/fixtures.js'); +const assert = require('node:assert'); +const { execPath } = require('node:process'); +const { describe, it } = require('node:test'); + + +describe('ESM: importing an encoded path', () => { + it('should throw', async () => { + const { code } = await spawnPromisified(execPath, [ + fixtures.path('es-module-url/native.mjs'), + ]); + + assert.strictEqual(code, 1); + }); }); diff --git a/test/es-module/test-esm-experimental-warnings.mjs b/test/es-module/test-esm-experimental-warnings.mjs new file mode 100644 index 00000000000..fc167c63584 --- /dev/null +++ b/test/es-module/test-esm-experimental-warnings.mjs @@ -0,0 +1,48 @@ +import { spawnPromisified } from '../common/index.mjs'; +import { fileURL } from '../common/fixtures.mjs'; +import { doesNotMatch, match, strictEqual } from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; + + +describe('ESM: warn for obsolete hooks provided', { concurrency: true }, () => { + it('should not print warnings when no experimental features are enabled or used', async () => { + const { code, signal, stderr } = await spawnPromisified(execPath, [ + '--input-type=module', + '--eval', + `import ${JSON.stringify(fileURL('es-module-loaders', 'module-named-exports.mjs'))}`, + ]); + + doesNotMatch( + stderr, + /ExperimentalWarning/, + new Error('No experimental warning(s) should be emitted when no experimental feature is enabled') + ); + strictEqual(code, 0); + strictEqual(signal, null); + }); + + describe('experimental warnings for enabled experimental feature', () => { + for ( + const [experiment, arg] of [ + [/Custom ESM Loaders/, `--experimental-loader=${fileURL('es-module-loaders', 'hooks-custom.mjs')}`], + [/Network Imports/, '--experimental-network-imports'], + [/specifier resolution/, '--experimental-specifier-resolution=node'], + ] + ) { + it(`should print for ${experiment.toString().replaceAll('/', '')}`, async () => { + const { code, signal, stderr } = await spawnPromisified(execPath, [ + arg, + '--input-type=module', + '--eval', + `import ${JSON.stringify(fileURL('es-module-loaders', 'module-named-exports.mjs'))}`, + ]); + + match(stderr, /ExperimentalWarning/); + match(stderr, experiment); + strictEqual(code, 0); + strictEqual(signal, null); + }); + } + }); +}); diff --git a/test/es-module/test-esm-export-not-found.mjs b/test/es-module/test-esm-export-not-found.mjs index cdfe6df0fcd..48ccd0f9102 100644 --- a/test/es-module/test-esm-export-not-found.mjs +++ b/test/es-module/test-esm-export-not-found.mjs @@ -1,39 +1,48 @@ -import { mustCall } from '../common/index.mjs'; -import { path } from '../common/fixtures.mjs'; -import { match, notStrictEqual } from 'assert'; -import { spawn } from 'child_process'; -import { execPath } from 'process'; +import { spawnPromisified } from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -const importStatement = - 'import { foo, notfound } from \'./module-named-exports.mjs\';'; + +const importStatement = 'import { foo, notfound } from \'./module-named-exports.mjs\';'; const importStatementMultiline = `import { foo, notfound } from './module-named-exports.mjs'; `; -[importStatement, importStatementMultiline].forEach((input) => { - const child = spawn(execPath, [ - '--input-type=module', - '--eval', - input, - ], { - cwd: path('es-module-loaders'), - }); +describe('ESM: nonexistent exports', { concurrency: true }, () => { + for ( + const { name, input } + of [ + { + input: importStatement, + name: 'single-line import', + }, + { + input: importStatementMultiline, + name: 'multi-line import', + }, + ] + ) { + it(`should throw for nonexistent exports via ${name}`, async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + '--input-type=module', + '--eval', + input, + ], { + cwd: fixtures.path('es-module-loaders'), + }); - let stderr = ''; - child.stderr.setEncoding('utf8'); - child.stderr.on('data', (data) => { - stderr += data; - }); - child.on('close', mustCall((code, _signal) => { - notStrictEqual(code, 0); + assert.notStrictEqual(code, 0); - // SyntaxError: The requested module './module-named-exports.mjs' - // does not provide an export named 'notfound' - match(stderr, /SyntaxError:/); - // The quotes ensure that the path starts with ./ and not ../ - match(stderr, /'\.\/module-named-exports\.mjs'/); - match(stderr, /notfound/); - })); + // SyntaxError: The requested module './module-named-exports.mjs' + // does not provide an export named 'notfound' + assert.match(stderr, /SyntaxError:/); + // The quotes ensure that the path starts with ./ and not ../ + assert.match(stderr, /'\.\/module-named-exports\.mjs'/); + assert.match(stderr, /notfound/); + }); + } }); diff --git a/test/es-module/test-esm-import-json-named-export.mjs b/test/es-module/test-esm-import-json-named-export.mjs index 3c0f3af662c..c8a4ad8dce3 100644 --- a/test/es-module/test-esm-import-json-named-export.mjs +++ b/test/es-module/test-esm-import-json-named-export.mjs @@ -1,24 +1,22 @@ -import { mustCall } from '../common/index.mjs'; -import { path } from '../common/fixtures.mjs'; -import { match, notStrictEqual } from 'assert'; -import { spawn } from 'child_process'; -import { execPath } from 'process'; +import { spawnPromisified } from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -const child = spawn(execPath, [ - path('es-modules', 'import-json-named-export.mjs'), -]); -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; -}); -child.on('close', mustCall((code, _signal) => { - notStrictEqual(code, 0); +describe('ESM: named JSON exports', { concurrency: true }, () => { + it('should throw, citing named import', async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + fixtures.path('es-modules', 'import-json-named-export.mjs'), + ]); + + // SyntaxError: The requested module '../experimental.json' + // does not provide an export named 'ofLife' + assert.match(stderr, /SyntaxError:/); + assert.match(stderr, /'\.\.\/experimental\.json'/); + assert.match(stderr, /'ofLife'/); - // SyntaxError: The requested module '../experimental.json' - // does not provide an export named 'ofLife' - match(stderr, /SyntaxError:/); - match(stderr, /'\.\.\/experimental\.json'/); - match(stderr, /'ofLife'/); -})); + assert.notStrictEqual(code, 0); + }); +}); diff --git a/test/es-module/test-esm-initialization.mjs b/test/es-module/test-esm-initialization.mjs new file mode 100644 index 00000000000..2bfd16135a0 --- /dev/null +++ b/test/es-module/test-esm-initialization.mjs @@ -0,0 +1,29 @@ +import { spawnPromisified } from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; + + +describe('ESM: ensure initialisation happens only once', { concurrency: true }, () => { + it(async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs'), + '--no-warnings', + fixtures.path('es-modules', 'runmain.mjs'), + ]); + + // Length minus 1 because the first match is the needle. + const resolveHookRunCount = (stdout.match(/resolve passthru/g)?.length ?? 0) - 1; + + assert.strictEqual(stderr, ''); + /** + * resolveHookRunCount = 2: + * 1. fixtures/…/runmain.mjs + * 2. node:module (imported by fixtures/…/runmain.mjs) + */ + assert.strictEqual(resolveHookRunCount, 2); + assert.strictEqual(code, 0); + }); +}); diff --git a/test/es-module/test-esm-invalid-extension.js b/test/es-module/test-esm-invalid-extension.js deleted file mode 100644 index cca7704f799..00000000000 --- a/test/es-module/test-esm-invalid-extension.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; -require('../common'); -const fixtures = require('../common/fixtures'); -const assert = require('assert'); -const { spawnSync } = require('child_process'); -const fixture = fixtures.path('/es-modules/import-invalid-ext.mjs'); -const child = spawnSync(process.execPath, [fixture]); -const errMsg = 'TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension'; - -assert.strictEqual(child.status, 1); -assert.strictEqual(child.signal, null); -assert.strictEqual(child.stdout.toString().trim(), ''); -assert.ok(child.stderr.toString().includes(errMsg)); diff --git a/test/es-module/test-esm-invalid-pjson.js b/test/es-module/test-esm-invalid-pjson.js index cdbebb17b4b..f3a38018637 100644 --- a/test/es-module/test-esm-invalid-pjson.js +++ b/test/es-module/test-esm-invalid-pjson.js @@ -1,27 +1,28 @@ 'use strict'; -const { mustCall, checkoutEOL } = require('../common'); -const fixtures = require('../common/fixtures'); -const { spawn } = require('child_process'); -const { strictEqual, ok } = require('assert'); +const { checkoutEOL, spawnPromisified } = require('../common'); +const fixtures = require('../common/fixtures.js'); +const assert = require('node:assert'); +const { execPath } = require('node:process'); +const { describe, it } = require('node:test'); -const entry = fixtures.path('/es-modules/import-invalid-pjson.mjs'); -const invalidJson = fixtures.path('/node_modules/invalid-pjson/package.json'); -const child = spawn(process.execPath, [entry]); -child.stderr.setEncoding('utf8'); -let stderr = ''; -child.stderr.on('data', (data) => { - stderr += data; +describe('ESM: Package.json', { concurrency: true }, () => { + it('should throw on invalid pson', async () => { + const entry = fixtures.path('/es-modules/import-invalid-pjson.mjs'); + const invalidJson = fixtures.path('/node_modules/invalid-pjson/package.json'); + + const { code, signal, stderr } = await spawnPromisified(execPath, [entry]); + + assert.ok( + stderr.includes( + `[ERR_INVALID_PACKAGE_CONFIG]: Invalid package config ${invalidJson} ` + + `while importing "invalid-pjson" from ${entry}. ` + + `Unexpected token } in JSON at position ${12 + checkoutEOL.length * 2}` + ), + stderr + ); + assert.strictEqual(code, 1); + assert.strictEqual(signal, null); + }); }); -child.on('close', mustCall((code, signal) => { - strictEqual(code, 1); - strictEqual(signal, null); - ok( - stderr.includes( - `[ERR_INVALID_PACKAGE_CONFIG]: Invalid package config ${invalidJson} ` + - `while importing "invalid-pjson" from ${entry}. ` + - `Unexpected token } in JSON at position ${12 + checkoutEOL.length * 2}` - ), - stderr); -})); diff --git a/test/es-module/test-esm-json.mjs b/test/es-module/test-esm-json.mjs index 6d55419eedc..14c86bac80a 100644 --- a/test/es-module/test-esm-json.mjs +++ b/test/es-module/test-esm-json.mjs @@ -1,27 +1,25 @@ -import '../common/index.mjs'; -import { path } from '../common/fixtures.mjs'; -import { strictEqual, ok } from 'assert'; -import { spawn } from 'child_process'; +import { spawnPromisified } from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; import secret from '../fixtures/experimental.json' assert { type: 'json' }; -strictEqual(secret.ofLife, 42); -// Test warning message -const child = spawn(process.execPath, [ - path('/es-modules/json-modules.mjs'), -]); +describe('ESM: importing JSON', () => { + it('should load JSON', () => { + assert.strictEqual(secret.ofLife, 42); + }); -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; -}); -child.on('close', (code, signal) => { - strictEqual(code, 0); - strictEqual(signal, null); - ok(stderr.toString().includes( - 'ExperimentalWarning: Importing JSON modules is an experimental feature. ' + - 'This feature could change at any time' - )); + it('should print an experimental warning', async () => { + const { code, signal, stderr } = await spawnPromisified(execPath, [ + fixtures.path('/es-modules/json-modules.mjs'), + ]); + + assert.match(stderr, /ExperimentalWarning/); + assert.match(stderr, /JSON modules/); + assert.strictEqual(code, 0); + assert.strictEqual(signal, null); + }); }); diff --git a/test/es-module/test-esm-loader-chaining.mjs b/test/es-module/test-esm-loader-chaining.mjs new file mode 100644 index 00000000000..b04dbe4ddd6 --- /dev/null +++ b/test/es-module/test-esm-loader-chaining.mjs @@ -0,0 +1,457 @@ +import { spawnPromisified } from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; + + +const setupArgs = [ + '--no-warnings', + '--input-type=module', + '--eval', +]; +const commonInput = 'import fs from "node:fs"; console.log(fs)'; +const commonArgs = [ + ...setupArgs, + commonInput, +]; + +describe('ESM: loader chaining', { concurrency: true }, () => { + it('should load unadulterated source when there are no loaders', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + ...setupArgs, + 'import fs from "node:fs"; console.log(typeof fs?.constants?.F_OK )', + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(stderr, ''); + assert.match(stdout, /number/); // node:fs is an object + assert.strictEqual(code, 0); + }); + + it('should load properly different source when only load changes something', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-foo-or-42.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-passthru.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(stderr, ''); + assert.match(stdout, /load passthru/); + assert.match(stdout, /resolve passthru/); + assert.match(stdout, /foo/); + assert.strictEqual(code, 0); + }); + + it('should result in proper output from multiple changes in resolve hooks', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-shortcircuit.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-foo.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-42.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-foo-or-42.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(stderr, ''); + assert.match(stdout, /resolve 42/); // It did go thru resolve-42 + assert.match(stdout, /foo/); // LIFO, so resolve-foo won + assert.strictEqual(code, 0); + }); + + it('should respect modified context within resolve chain', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-shortcircuit.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-42.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-foo-or-42.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-receiving-modified-context.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-passing-modified-context.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(stderr, ''); + assert.match(stdout, /bar/); + assert.strictEqual(code, 0); + }); + + it('should accept only the correct arguments', async () => { + const { stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-log-args.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-with-too-many-args.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.match(stdout, /^resolve arg count: 3$/m); + assert.match(stdout, /specifier: 'node:fs'/); + assert.match(stdout, /next: \[AsyncFunction: nextResolve\]/); + + assert.match(stdout, /^load arg count: 3$/m); + assert.match(stdout, /url: 'node:fs'/); + assert.match(stdout, /next: \[AsyncFunction: nextLoad\]/); + }); + + it('should result in proper output from multiple changes in resolve hooks', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-shortcircuit.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-42.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-foo.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-foo-or-42.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(stderr, ''); + assert.match(stdout, /resolve foo/); // It did go thru resolve-foo + assert.match(stdout, /42/); // LIFO, so resolve-42 won + assert.strictEqual(code, 0); + }); + + it('should provide the correct "next" fn when multiple calls to next within same loader', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-shortcircuit.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-foo.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-multiple-next-calls.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-foo-or-42.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + const countFoos = stdout.match(/resolve foo/g)?.length; + + assert.strictEqual(stderr, ''); + assert.strictEqual(countFoos, 2); + assert.strictEqual(code, 0); + }); + + it('should use the correct `name` for next\'s function', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-shortcircuit.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-42.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-foo-or-42.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(stderr, ''); + assert.match(stdout, /next: nextResolve/); + assert.strictEqual(code, 0); + }); + + it('should throw for incomplete resolve chain, citing errant loader & hook', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-incomplete.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-foo-or-42.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + assert.match(stdout, /resolve passthru/); + assert.match(stderr, /ERR_LOADER_CHAIN_INCOMPLETE/); + assert.match(stderr, /loader-resolve-incomplete\.mjs/); + assert.match(stderr, /'resolve'/); + assert.strictEqual(code, 1); + }); + + it('should NOT throw when nested resolve hook signaled a short circuit', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-shortcircuit.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-next-modified.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-foo-or-42.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(stderr, ''); + assert.strictEqual(stdout.trim(), 'foo'); + assert.strictEqual(code, 0); + }); + + it('should NOT throw when nested load hook signaled a short circuit', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-shortcircuit.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-42.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-foo-or-42.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-next-modified.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(stderr, ''); + assert.match(stdout, /421/); + assert.strictEqual(code, 0); + }); + + it('should throw when the resolve chain is broken', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-incomplete.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-foo-or-42.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.doesNotMatch(stdout, /resolve passthru/); + assert.match(stderr, /ERR_LOADER_CHAIN_INCOMPLETE/); + assert.match(stderr, /loader-resolve-incomplete\.mjs/); + assert.match(stderr, /'resolve'/); + assert.strictEqual(code, 1); + }); + + it('should throw for incomplete load chain, citing errant loader & hook', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-incomplete.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-passthru.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.match(stdout, /load passthru/); + assert.match(stderr, /ERR_LOADER_CHAIN_INCOMPLETE/); + assert.match(stderr, /loader-load-incomplete\.mjs/); + assert.match(stderr, /'load'/); + assert.strictEqual(code, 1); + }); + + it('should throw when the load chain is broken', async () => { + const { code, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-incomplete.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.doesNotMatch(stdout, /load passthru/); + assert.match(stderr, /ERR_LOADER_CHAIN_INCOMPLETE/); + assert.match(stderr, /loader-load-incomplete\.mjs/); + assert.match(stderr, /'load'/); + assert.strictEqual(code, 1); + }); + + it('should throw when invalid `specifier` argument passed to `nextResolve`', async () => { + const { code, stderr } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-bad-next-specifier.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(code, 1); + assert.match(stderr, /ERR_INVALID_ARG_TYPE/); + assert.match(stderr, /loader-resolve-bad-next-specifier\.mjs/); + assert.match(stderr, /'resolve' hook's nextResolve\(\) specifier/); + }); + + it('should throw when resolve hook is invalid', async () => { + const { code, stderr } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-null-return.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(code, 1); + assert.match(stderr, /ERR_INVALID_RETURN_VALUE/); + assert.match(stderr, /loader-resolve-null-return\.mjs/); + assert.match(stderr, /'resolve' hook's nextResolve\(\)/); + assert.match(stderr, /an object/); + assert.match(stderr, /got null/); + }); + + it('should throw when invalid `context` argument passed to `nextResolve`', async () => { + const { code, stderr } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-resolve-bad-next-context.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.match(stderr, /ERR_INVALID_ARG_TYPE/); + assert.match(stderr, /loader-resolve-bad-next-context\.mjs/); + assert.match(stderr, /'resolve' hook's nextResolve\(\) context/); + assert.strictEqual(code, 1); + }); + + it('should throw when load hook is invalid', async () => { + const { code, stderr } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-null-return.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.strictEqual(code, 1); + assert.match(stderr, /ERR_INVALID_RETURN_VALUE/); + assert.match(stderr, /loader-load-null-return\.mjs/); + assert.match(stderr, /'load' hook's nextLoad\(\)/); + assert.match(stderr, /an object/); + assert.match(stderr, /got null/); + }); + + it('should throw when invalid `url` argument passed to `nextLoad`', async () => { + const { code, stderr } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-bad-next-url.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.match(stderr, /ERR_INVALID_ARG_TYPE/); + assert.match(stderr, /loader-load-bad-next-url\.mjs/); + assert.match(stderr, /'load' hook's nextLoad\(\) url/); + assert.strictEqual(code, 1); + }); + + it('should throw when invalid `url` argument passed to `nextLoad`', async () => { + const { code, stderr } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-impersonating-next-url.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + + assert.match(stderr, /ERR_INVALID_ARG_VALUE/); + assert.match(stderr, /loader-load-impersonating-next-url\.mjs/); + assert.match(stderr, /'load' hook's nextLoad\(\) url/); + assert.strictEqual(code, 1); + }); + + it('should throw when invalid `context` argument passed to `nextLoad`', async () => { + const { code, stderr } = await spawnPromisified( + execPath, + [ + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-passthru.mjs'), + '--loader', + fixtures.fileURL('es-module-loaders', 'loader-load-bad-next-context.mjs'), + ...commonArgs, + ], + { encoding: 'utf8' }, + ); + assert.match(stderr, /ERR_INVALID_ARG_TYPE/); + assert.match(stderr, /loader-load-bad-next-context\.mjs/); + assert.match(stderr, /'load' hook's nextLoad\(\) context/); + assert.strictEqual(code, 1); + }); +}); diff --git a/test/es-module/test-esm-loader-hooks.mjs b/test/es-module/test-esm-loader-hooks.mjs index 57a203342ac..2704fe1a52c 100644 --- a/test/es-module/test-esm-loader-hooks.mjs +++ b/test/es-module/test-esm-loader-hooks.mjs @@ -12,10 +12,10 @@ const { ESMLoader } = esmLoaderModule; const esmLoader = new ESMLoader(); const originalSpecifier = 'foo/bar'; - const importAssertions = Object.assign( - Object.create(null), - { type: 'json' }, - ); + const importAssertions = { + __proto__: null, + type: 'json', + }; const parentURL = 'file:///entrypoint.js'; const resolvedURL = 'file:///foo/bar.js'; const suggestedFormat = 'test'; @@ -35,6 +35,7 @@ const { ESMLoader } = esmLoaderModule; return { format: suggestedFormat, + shortCircuit: true, url: resolvedURL, }; } @@ -54,15 +55,21 @@ const { ESMLoader } = esmLoaderModule; // This doesn't matter (just to avoid errors) return { format: 'module', + shortCircuit: true, source: '', }; } - const customLoader = { - // Ensure ESMLoader actually calls the custom hooks - resolve: mustCall(resolve), - load: mustCall(load), - }; + const customLoader = [ + { + exports: { + // Ensure ESMLoader actually calls the custom hooks + resolve: mustCall(resolve), + load: mustCall(load), + }, + url: import.meta.url, + }, + ]; esmLoader.addCustomLoaders(customLoader); diff --git a/test/es-module/test-esm-loader-http-imports.mjs b/test/es-module/test-esm-loader-http-imports.mjs new file mode 100644 index 00000000000..ad42829f5d1 --- /dev/null +++ b/test/es-module/test-esm-loader-http-imports.mjs @@ -0,0 +1,71 @@ +import { spawnPromisified } from '../common/index.mjs'; +import fixtures from '../common/fixtures.js'; +import assert from 'node:assert'; +import http from 'node:http'; +import path from 'node:path'; +import { execPath } from 'node:process'; +import { promisify } from 'node:util'; +import { describe, it } from 'node:test'; + + +const files = { + 'main.mjs': 'export * from "./lib.mjs";', + 'lib.mjs': 'export { sum } from "./sum.mjs";', + 'sum.mjs': 'export function sum(a, b) { return a + b }', +}; + +const requestListener = ({ url }, rsp) => { + const filename = path.basename(url); + const content = files[filename]; + + if (content) { + return rsp + .writeHead(200, { 'Content-Type': 'application/javascript' }) + .end(content); + } + + return rsp + .writeHead(404) + .end(); +}; + +const server = http.createServer(requestListener); + +await promisify(server.listen.bind(server))({ + host: '127.0.0.1', + port: 0, +}); + +const { + address: host, + port, +} = server.address(); + +/** + * ! If more cases are added to this test, they cannot (yet) be concurrent because there is no + * ! `afterAll` teardown in which to close the server. + */ + +describe('ESM: http import via loader', { concurrency: false }, () => { + it('should work', async () => { + // ! MUST NOT use spawnSync to avoid blocking the event loop + const { code, signal, stderr, stdout } = await spawnPromisified( + execPath, + [ + '--no-warnings', + '--loader', + fixtures.fileURL('es-module-loaders', 'http-loader.mjs'), + '--input-type=module', + '--eval', + `import * as main from 'http://${host}:${port}/main.mjs'; console.log(main)`, + ] + ); + + assert.strictEqual(stderr, ''); + assert.strictEqual(stdout, '[Module: null prototype] { sum: [Function: sum] }\n'); + assert.strictEqual(code, 0); + assert.strictEqual(signal, null); + + server.close(); // ! This MUST come after the final test, but inside the async `it` function + }); +}); diff --git a/test/es-module/test-esm-loader-invalid-url.mjs b/test/es-module/test-esm-loader-invalid-url.mjs index 6294e57404c..1ba7c621f7e 100644 --- a/test/es-module/test-esm-loader-invalid-url.mjs +++ b/test/es-module/test-esm-loader-invalid-url.mjs @@ -4,7 +4,7 @@ import assert from 'assert'; import('../fixtures/es-modules/test-esm-ok.mjs') .then(assert.fail, (error) => { - expectsError({ code: 'ERR_INVALID_URL' })(error); - assert.strictEqual(error.input, '../fixtures/es-modules/test-esm-ok.mjs'); + expectsError({ code: 'ERR_INVALID_RETURN_PROPERTY_VALUE' })(error); + assert.match(error.message, /loader-invalid-url\.mjs/); }) .then(mustCall()); diff --git a/test/es-module/test-esm-loader-not-found.mjs b/test/es-module/test-esm-loader-not-found.mjs index 275f0b0f1e8..2abaf3078d1 100644 --- a/test/es-module/test-esm-loader-not-found.mjs +++ b/test/es-module/test-esm-loader-not-found.mjs @@ -1,27 +1,24 @@ -import { mustCall } from '../common/index.mjs'; -import { path } from '../common/fixtures.mjs'; -import { match, ok, notStrictEqual } from 'assert'; -import { spawn } from 'child_process'; -import { execPath } from 'process'; +import { spawnPromisified } from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -const child = spawn(execPath, [ - '--experimental-loader', - 'i-dont-exist', - path('print-error-message.js'), -]); -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; -}); -child.on('close', mustCall((code, _signal) => { - notStrictEqual(code, 0); +describe('ESM: nonexistent loader', () => { + it('should throw', async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + '--experimental-loader', + 'i-dont-exist', + fixtures.path('print-error-message.js'), + ]); + + assert.notStrictEqual(code, 0); - // Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'i-dont-exist' - // imported from - match(stderr, /ERR_MODULE_NOT_FOUND/); - match(stderr, /'i-dont-exist'/); + // Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'i-dont-exist' imported from + assert.match(stderr, /ERR_MODULE_NOT_FOUND/); + assert.match(stderr, /'i-dont-exist'/); - ok(!stderr.includes('Bad command or file name')); -})); + assert.ok(!stderr.includes('Bad command or file name')); + }); +}); diff --git a/test/es-module/test-esm-loader-obsolete-hooks.mjs b/test/es-module/test-esm-loader-obsolete-hooks.mjs index eff4104fc26..fa0baef8a21 100644 --- a/test/es-module/test-esm-loader-obsolete-hooks.mjs +++ b/test/es-module/test-esm-loader-obsolete-hooks.mjs @@ -1,30 +1,28 @@ -import { mustCall } from '../common/index.mjs'; +import { spawnPromisified } from '../common/index.mjs'; import { fileURL, path } from '../common/fixtures.mjs'; -import { match, notStrictEqual } from 'assert'; -import { spawn } from 'child_process'; -import { execPath } from 'process'; +import { match, notStrictEqual } from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -const child = spawn(execPath, [ - '--no-warnings', - '--throw-deprecation', - '--experimental-loader', - fileURL('es-module-loaders', 'hooks-obsolete.mjs').href, - path('print-error-message.js'), -]); -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; -}); -child.on('close', mustCall((code, _signal) => { - notStrictEqual(code, 0); +describe('ESM: deprecation warnings for obsolete hooks', { concurrency: true }, () => { + it(async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + '--no-warnings', + '--throw-deprecation', + '--experimental-loader', + fileURL('es-module-loaders', 'hooks-obsolete.mjs').href, + path('print-error-message.js'), + ]); + + // DeprecationWarning: Obsolete loader hook(s) supplied and will be ignored: + // dynamicInstantiate, getFormat, getSource, transformSource + match(stderr, /DeprecationWarning:/); + match(stderr, /dynamicInstantiate/); + match(stderr, /getFormat/); + match(stderr, /getSource/); + match(stderr, /transformSource/); - // DeprecationWarning: Obsolete loader hook(s) supplied and will be ignored: - // dynamicInstantiate, getFormat, getSource, transformSource - match(stderr, /DeprecationWarning:/); - match(stderr, /dynamicInstantiate/); - match(stderr, /getFormat/); - match(stderr, /getSource/); - match(stderr, /transformSource/); -})); + notStrictEqual(code, 0); + }); +}); diff --git a/test/es-module/test-esm-loader-thenable.mjs b/test/es-module/test-esm-loader-thenable.mjs new file mode 100644 index 00000000000..5e802b8393b --- /dev/null +++ b/test/es-module/test-esm-loader-thenable.mjs @@ -0,0 +1,43 @@ +import { spawnPromisified } from '../common/index.mjs'; +import { fileURL, path } from '../common/fixtures.mjs'; +import { match, ok, notStrictEqual, strictEqual } from 'assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; + + +describe('ESM: thenable loader hooks', { concurrency: true }, () => { + it('should behave as a normal promise resolution', async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + '--experimental-loader', + fileURL('es-module-loaders', 'thenable-load-hook.mjs').href, + path('es-modules', 'test-esm-ok.mjs'), + ]); + + strictEqual(code, 0); + ok(!stderr.includes('must not call')); + }); + + it('should crash the node process rejection with an error', async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + '--experimental-loader', + fileURL('es-module-loaders', 'thenable-load-hook-rejected.mjs').href, + path('es-modules', 'test-esm-ok.mjs'), + ]); + + notStrictEqual(code, 0); + match(stderr, /\sError: must crash the process\r?\n/); + ok(!stderr.includes('must not call')); + }); + + it('should just reject without an error (but NOT crash the node process)', async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + '--experimental-loader', + fileURL('es-module-loaders', 'thenable-load-hook-rejected-no-arguments.mjs').href, + path('es-modules', 'test-esm-ok.mjs'), + ]); + + notStrictEqual(code, 0); + match(stderr, /\sundefined\r?\n/); + ok(!stderr.includes('must not call')); + }); +}); diff --git a/test/es-module/test-esm-loader-with-syntax-error.mjs b/test/es-module/test-esm-loader-with-syntax-error.mjs index d973e72975e..0ed995ad510 100644 --- a/test/es-module/test-esm-loader-with-syntax-error.mjs +++ b/test/es-module/test-esm-loader-with-syntax-error.mjs @@ -1,24 +1,20 @@ -import { mustCall } from '../common/index.mjs'; +import { spawnPromisified } from '../common/index.mjs'; import { fileURL, path } from '../common/fixtures.mjs'; -import { match, ok, notStrictEqual } from 'assert'; -import { spawn } from 'child_process'; -import { execPath } from 'process'; +import { match, ok, notStrictEqual } from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -const child = spawn(execPath, [ - '--experimental-loader', - fileURL('es-module-loaders', 'syntax-error.mjs').href, - path('print-error-message.js'), -]); -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; -}); -child.on('close', mustCall((code, _signal) => { - notStrictEqual(code, 0); - - match(stderr, /SyntaxError:/); +describe('ESM: loader with syntax error', { concurrency: true }, () => { + it('should crash the node process', async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + '--experimental-loader', + fileURL('es-module-loaders', 'syntax-error.mjs').href, + path('print-error-message.js'), + ]); - ok(!stderr.includes('Bad command or file name')); -})); + match(stderr, /SyntaxError:/); + ok(!stderr.includes('Bad command or file name')); + notStrictEqual(code, 0); + }); +}); diff --git a/test/es-module/test-esm-module-not-found-commonjs-hint.mjs b/test/es-module/test-esm-module-not-found-commonjs-hint.mjs index 58f70d0b685..51633564f81 100644 --- a/test/es-module/test-esm-module-not-found-commonjs-hint.mjs +++ b/test/es-module/test-esm-module-not-found-commonjs-hint.mjs @@ -1,35 +1,34 @@ -import { mustCall } from '../common/index.mjs'; +import { spawnPromisified } from '../common/index.mjs'; import { fixturesDir } from '../common/fixtures.mjs'; -import { match, notStrictEqual } from 'assert'; -import { spawn } from 'child_process'; -import { execPath } from 'process'; +import { match, notStrictEqual } from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -[ - { - input: 'import "./print-error-message"', - // Did you mean to import ../print-error-message.js? - expected: / \.\.\/print-error-message\.js\?/, - }, - { - input: 'import obj from "some_module/obj"', - expected: / some_module\/obj\.js\?/, - }, -].forEach(({ input, expected }) => { - const child = spawn(execPath, [ - '--input-type=module', - '--eval', - input, - ], { - cwd: fixturesDir, - }); - let stderr = ''; - child.stderr.setEncoding('utf8'); - child.stderr.on('data', (data) => { - stderr += data; - }); - child.on('close', mustCall((code, _signal) => { - notStrictEqual(code, 0); +describe('ESM: module not found hint', { concurrency: true }, () => { + for ( + const { input, expected } + of [ + { + input: 'import "./print-error-message"', + // Did you mean to import ../print-error-message.js? + expected: / \.\.\/print-error-message\.js\?/, + }, + { + input: 'import obj from "some_module/obj"', + expected: / some_module\/obj\.js\?/, + }, + ] + ) it('should cite a variant form', async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + '--input-type=module', + '--eval', + input, + ], { + cwd: fixturesDir, + }); + match(stderr, expected); - })); + notStrictEqual(code, 0); + }); }); diff --git a/test/es-module/test-esm-non-js.mjs b/test/es-module/test-esm-non-js.mjs index 749cd0b6132..2630d3136a4 100644 --- a/test/es-module/test-esm-non-js.mjs +++ b/test/es-module/test-esm-non-js.mjs @@ -1,23 +1,20 @@ -import { mustCall } from '../common/index.mjs'; +import { spawnPromisified } from '../common/index.mjs'; import { fileURL } from '../common/fixtures.mjs'; -import { match, strictEqual } from 'assert'; -import { spawn } from 'child_process'; -import { execPath } from 'process'; +import { match, strictEqual } from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -// Verify non-js extensions fail for ESM -const child = spawn(execPath, [ - '--input-type=module', - '--eval', - `import ${JSON.stringify(fileURL('es-modules', 'file.unknown'))}`, -]); -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; +describe('ESM: non-js extensions fail', { concurrency: true }, () => { + it(async () => { + const { code, stderr, signal } = await spawnPromisified(execPath, [ + '--input-type=module', + '--eval', + `import ${JSON.stringify(fileURL('es-modules', 'file.unknown'))}`, + ]); + + match(stderr, /ERR_UNKNOWN_FILE_EXTENSION/); + strictEqual(code, 1); + strictEqual(signal, null); + }); }); -child.on('close', mustCall((code, signal) => { - strictEqual(code, 1); - strictEqual(signal, null); - match(stderr, /ERR_UNKNOWN_FILE_EXTENSION/); -})); diff --git a/test/es-module/test-esm-nowarn-exports.mjs b/test/es-module/test-esm-nowarn-exports.mjs index 57d5bc58c72..695e924e03c 100644 --- a/test/es-module/test-esm-nowarn-exports.mjs +++ b/test/es-module/test-esm-nowarn-exports.mjs @@ -1,25 +1,19 @@ -import '../common/index.mjs'; +import { spawnPromisified } from '../common/index.mjs'; import { path } from '../common/fixtures.mjs'; -import { strictEqual, ok } from 'assert'; -import { spawn } from 'child_process'; +import { strictEqual } from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -const child = spawn(process.execPath, [ - '--experimental-import-meta-resolve', - path('/es-modules/import-resolve-exports.mjs'), -]); -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; -}); -child.on('close', (code, signal) => { - strictEqual(code, 0); - strictEqual(signal, null); - ok(!stderr.toString().includes( - 'ExperimentalWarning: The ESM module loader is experimental' - )); - ok(!stderr.toString().includes( - 'ExperimentalWarning: Conditional exports' - )); +describe('ESM: experiemental warning for import.meta.resolve', { concurrency: true }, () => { + it('should not warn when caught', async () => { + const { code, signal, stderr } = await spawnPromisified(execPath, [ + '--experimental-import-meta-resolve', + path('es-modules/import-resolve-exports.mjs'), + ]); + + strictEqual(stderr, ''); + strictEqual(code, 0); + strictEqual(signal, null); + }); }); diff --git a/test/es-module/test-esm-preserve-symlinks-main.js b/test/es-module/test-esm-preserve-symlinks-main.js index b8fb301e02d..6f921f656fe 100644 --- a/test/es-module/test-esm-preserve-symlinks-main.js +++ b/test/es-module/test-esm-preserve-symlinks-main.js @@ -39,15 +39,15 @@ function doTest(flags, done) { // dictates that it'll resolve relative imports in the main file relative to // the symlink, and not relative to the symlink target; the file structure set // up above requires this to not crash when loading ./submodule_link.js - spawn(process.execPath, - flags.concat([ - '--preserve-symlinks', - '--preserve-symlinks-main', entry_link_absolute_path, - ]), - { stdio: 'inherit' }).on('exit', (code) => { - assert.strictEqual(code, 0); - done(); - }); + spawn(process.execPath, [ + '--preserve-symlinks', + '--preserve-symlinks-main', + entry_link_absolute_path, + ], { stdio: 'inherit' }) + .on('exit', (code) => { + assert.strictEqual(code, 0); + done(); + }); } // First test the commonjs module loader diff --git a/test/es-module/test-esm-repl-imports.js b/test/es-module/test-esm-repl-imports.js new file mode 100644 index 00000000000..9547824756f --- /dev/null +++ b/test/es-module/test-esm-repl-imports.js @@ -0,0 +1,28 @@ +'use strict'; + +const { mustCall } = require('../common'); +const fixtures = require('../common/fixtures'); +const assert = require('node:assert'); +const { spawn } = require('node:child_process'); +const { execPath } = require('node:process'); +const { describe, it } = require('node:test'); + + +describe('ESM: REPL runs', { concurrency: true }, () => { + it((context, done) => { + const child = spawn(execPath, [ + '--interactive', + ], { + cwd: fixtures.path('es-modules', 'pkgimports'), + }); + + child.stdin.end( + 'try{require("#test");await import("#test")}catch{process.exit(-1)}' + ); + + child.on('exit', mustCall((code) => { + assert.strictEqual(code, 0); + done(); + })); + }); +}); diff --git a/test/es-module/test-esm-specifiers-legacy-flag-warning.mjs b/test/es-module/test-esm-specifiers-legacy-flag-warning.mjs deleted file mode 100644 index 244499a3e02..00000000000 --- a/test/es-module/test-esm-specifiers-legacy-flag-warning.mjs +++ /dev/null @@ -1,24 +0,0 @@ -import { mustCall } from '../common/index.mjs'; -import { fileURL } from '../common/fixtures.mjs'; -import { match, strictEqual } from 'assert'; -import { spawn } from 'child_process'; -import { execPath } from 'process'; - -// Verify experimental warning is printed -const child = spawn(execPath, [ - '--experimental-specifier-resolution=node', - '--input-type=module', - '--eval', - `import ${JSON.stringify(fileURL('es-module-specifiers', 'package-type-module'))}`, -]); - -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; -}); -child.on('close', mustCall((code, signal) => { - strictEqual(code, 0); - strictEqual(signal, null); - match(stderr, /ExperimentalWarning: The Node\.js specifier resolution flag is experimental/); -})); diff --git a/test/es-module/test-esm-specifiers-legacy-flag.mjs b/test/es-module/test-esm-specifiers-legacy-flag.mjs deleted file mode 100644 index 5351846c6a8..00000000000 --- a/test/es-module/test-esm-specifiers-legacy-flag.mjs +++ /dev/null @@ -1,21 +0,0 @@ -// Flags: --es-module-specifier-resolution=node -import '../common/index.mjs'; -import assert from 'assert'; - -// commonJS index.js -import commonjs from '../fixtures/es-module-specifiers/package-type-commonjs'; -// esm index.js -import module from '../fixtures/es-module-specifiers/package-type-module'; -// Directory entry with main.js -import main from '../fixtures/es-module-specifiers/dir-with-main'; -// Notice the trailing slash -import success, { explicit, implicit, implicitModule } - from '../fixtures/es-module-specifiers/'; - -assert.strictEqual(commonjs, 'commonjs'); -assert.strictEqual(module, 'module'); -assert.strictEqual(main, 'main'); -assert.strictEqual(success, 'success'); -assert.strictEqual(explicit, 'esm'); -assert.strictEqual(implicit, 'cjs'); -assert.strictEqual(implicitModule, 'cjs'); diff --git a/test/es-module/test-esm-specifiers.mjs b/test/es-module/test-esm-specifiers.mjs index bc6125f5f94..692db968141 100644 --- a/test/es-module/test-esm-specifiers.mjs +++ b/test/es-module/test-esm-specifiers.mjs @@ -1,62 +1,82 @@ -// Flags: --experimental-specifier-resolution=node -import { mustNotCall } from '../common/index.mjs'; -import assert from 'assert'; -import path from 'path'; -import { spawn } from 'child_process'; -import { fileURLToPath } from 'url'; - -// commonJS index.js -import commonjs from '../fixtures/es-module-specifiers/package-type-commonjs'; -// esm index.js -import module from '../fixtures/es-module-specifiers/package-type-module'; -// Notice the trailing slash -import success, { explicit, implicit, implicitModule, getImplicitCommonjs } - from '../fixtures/es-module-specifiers/'; - -assert.strictEqual(commonjs, 'commonjs'); -assert.strictEqual(module, 'module'); -assert.strictEqual(success, 'success'); -assert.strictEqual(explicit, 'esm'); -assert.strictEqual(implicit, 'cjs'); -assert.strictEqual(implicitModule, 'cjs'); - -async function main() { - try { - await import('../fixtures/es-module-specifiers/do-not-exist.js'); - } catch (e) { - // Files that do not exist should throw - assert.strictEqual(e.name, 'Error'); - } - try { - await getImplicitCommonjs(); - } catch (e) { - // Legacy loader cannot resolve .mjs automatically from main - assert.strictEqual(e.name, 'Error'); - } -} - -main().catch(mustNotCall); - -// Test path from command line arguments -[ - 'package-type-commonjs', - 'package-type-module', - '/', - '/index', -].forEach((item) => { - const modulePath = path.join( - fileURLToPath(import.meta.url), - '../../fixtures/es-module-specifiers', - item, - ); - [ - '--experimental-specifier-resolution', - '--es-module-specifier-resolution', - ].forEach((option) => { - spawn(process.execPath, - [`${option}=node`, modulePath], - { stdio: 'inherit' }).on('exit', (code) => { - assert.strictEqual(code, 0); - }); +import { spawnPromisified } from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import { match, strictEqual } from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; + + +describe('ESM: specifier-resolution=node', { concurrency: true }, () => { + it(async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--no-warnings', + '--experimental-specifier-resolution=node', + '--input-type=module', + '--eval', + [ + 'import { strictEqual } from "node:assert";', + // CommonJS index.js + `import commonjs from ${JSON.stringify(fixtures.fileURL('es-module-specifiers/package-type-commonjs'))};`, + // ESM index.js + `import module from ${JSON.stringify(fixtures.fileURL('es-module-specifiers/package-type-module'))};`, + // Directory entry with main.js + `import main from ${JSON.stringify(fixtures.fileURL('es-module-specifiers/dir-with-main'))};`, + // Notice the trailing slash + `import success, { explicit, implicit, implicitModule } from ${JSON.stringify(fixtures.fileURL('es-module-specifiers/'))};`, + 'strictEqual(commonjs, "commonjs");', + 'strictEqual(module, "module");', + 'strictEqual(main, "main");', + 'strictEqual(success, "success");', + 'strictEqual(explicit, "esm");', + 'strictEqual(implicit, "cjs");', + 'strictEqual(implicitModule, "cjs");', + ].join('\n'), + ]); + + strictEqual(stderr, ''); + strictEqual(stdout, ''); + strictEqual(code, 0); + }); + + it('should throw when the file doesn\'t exist', async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--no-warnings', + fixtures.path('es-module-specifiers/do-not-exist.js'), + ]); + + match(stderr, /Cannot find module/); + strictEqual(stdout, ''); + strictEqual(code, 1); + }); + + it('should throw when the omitted file extension is .mjs (legacy loader doesn\'t support it)', async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--no-warnings', + '--experimental-specifier-resolution=node', + '--input-type=module', + '--eval', + `import whatever from ${JSON.stringify(fixtures.fileURL('es-module-specifiers/implicit-main-type-commonjs'))};`, + ]); + + match(stderr, /ERR_MODULE_NOT_FOUND/); + strictEqual(stdout, ''); + strictEqual(code, 1); + }); + + for ( + const item of [ + 'package-type-commonjs', + 'package-type-module', + '/', + '/index', + ] + ) it('should ', async () => { + const { code } = await spawnPromisified(execPath, [ + '--no-warnings', + '--experimental-specifier-resolution=node', + '--es-module-specifier-resolution=node', + fixtures.path('es-module-specifiers', item), + ]); + + strictEqual(code, 0); }); }); diff --git a/test/es-module/test-esm-syntax-error.mjs b/test/es-module/test-esm-syntax-error.mjs index a8c01917171..de87187b069 100644 --- a/test/es-module/test-esm-syntax-error.mjs +++ b/test/es-module/test-esm-syntax-error.mjs @@ -1,19 +1,16 @@ -import { mustCall } from '../common/index.mjs'; +import { spawnPromisified } from '../common/index.mjs'; import { path } from '../common/fixtures.mjs'; -import { match, notStrictEqual } from 'assert'; -import { spawn } from 'child_process'; -import { execPath } from 'process'; +import { match, notStrictEqual } from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -const child = spawn(execPath, [ - path('es-module-loaders', 'syntax-error.mjs'), -]); -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; +describe('ESM: importing a module with syntax error(s)', { concurrency: true }, () => { + it('should throw', async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + path('es-module-loaders', 'syntax-error.mjs'), + ]); + match(stderr, /SyntaxError:/); + notStrictEqual(code, 0); + }); }); -child.on('close', mustCall((code, _signal) => { - notStrictEqual(code, 0); - match(stderr, /SyntaxError:/); -})); diff --git a/test/es-module/test-esm-tla-unfinished.mjs b/test/es-module/test-esm-tla-unfinished.mjs index d7658c19e98..48bc4d77f42 100644 --- a/test/es-module/test-esm-tla-unfinished.mjs +++ b/test/es-module/test-esm-tla-unfinished.mjs @@ -1,100 +1,127 @@ -import '../common/index.mjs'; -import assert from 'assert'; -import child_process from 'child_process'; +import { spawnPromisified } from '../common/index.mjs'; import fixtures from '../common/fixtures.js'; +import assert from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -{ - // Unresolved TLA promise, --eval - const { status, stdout, stderr } = child_process.spawnSync( - process.execPath, - ['--input-type=module', '--eval', 'await new Promise(() => {})'], - { encoding: 'utf8' }); - assert.deepStrictEqual([status, stdout, stderr], [13, '', '']); -} - -{ - // Rejected TLA promise, --eval - const { status, stdout, stderr } = child_process.spawnSync( - process.execPath, - ['--input-type=module', '-e', 'await Promise.reject(new Error("Xyz"))'], - { encoding: 'utf8' }); - assert.deepStrictEqual([status, stdout], [1, '']); - assert.match(stderr, /Error: Xyz/); -} - -{ - // Unresolved TLA promise with explicit exit code, --eval - const { status, stdout, stderr } = child_process.spawnSync( - process.execPath, - ['--input-type=module', '--eval', - 'process.exitCode = 42;await new Promise(() => {})'], - { encoding: 'utf8' }); - assert.deepStrictEqual([status, stdout, stderr], [42, '', '']); -} - -{ - // Rejected TLA promise with explicit exit code, --eval - const { status, stdout, stderr } = child_process.spawnSync( - process.execPath, - ['--input-type=module', '-e', - 'process.exitCode = 42;await Promise.reject(new Error("Xyz"))'], - { encoding: 'utf8' }); - assert.deepStrictEqual([status, stdout], [1, '']); - assert.match(stderr, /Error: Xyz/); -} - -{ - // Unresolved TLA promise, module file - const { status, stdout, stderr } = child_process.spawnSync( - process.execPath, - [fixtures.path('es-modules/tla/unresolved.mjs')], - { encoding: 'utf8' }); - assert.deepStrictEqual([status, stdout, stderr], [13, '', '']); -} - -{ - // Rejected TLA promise, module file - const { status, stdout, stderr } = child_process.spawnSync( - process.execPath, - [fixtures.path('es-modules/tla/rejected.mjs')], - { encoding: 'utf8' }); - assert.deepStrictEqual([status, stdout], [1, '']); - assert.match(stderr, /Error: Xyz/); -} - -{ - // Unresolved TLA promise, module file - const { status, stdout, stderr } = child_process.spawnSync( - process.execPath, - [fixtures.path('es-modules/tla/unresolved-withexitcode.mjs')], - { encoding: 'utf8' }); - assert.deepStrictEqual([status, stdout, stderr], [42, '', '']); -} - -{ - // Rejected TLA promise, module file - const { status, stdout, stderr } = child_process.spawnSync( - process.execPath, - [fixtures.path('es-modules/tla/rejected-withexitcode.mjs')], - { encoding: 'utf8' }); - assert.deepStrictEqual([status, stdout], [1, '']); - assert.match(stderr, /Error: Xyz/); -} - -{ - // Calling process.exit() in .mjs should return status 0 - const { status, stdout, stderr } = child_process.spawnSync( - process.execPath, - [fixtures.path('es-modules/tla/process-exit.mjs')], - { encoding: 'utf8' }); - assert.deepStrictEqual([status, stdout, stderr], [0, '', '']); -} - -{ - // Calling process.exit() in worker thread shouldn't influence main thread - const { status, stdout, stderr } = child_process.spawnSync( - process.execPath, - [fixtures.path('es-modules/tla/unresolved-with-worker-process-exit.mjs')], - { encoding: 'utf8' }); - assert.deepStrictEqual([status, stdout, stderr], [13, '', '']); -} + +const commonArgs = [ + '--no-warnings', + '--input-type=module', + '--eval', +]; + +describe('ESM: unsettled and rejected promises', { concurrency: true }, () => { + it('should exit for an unsettled TLA promise via --eval', async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + ...commonArgs, + 'await new Promise(() => {})', + ]); + + assert.strictEqual(stderr, ''); + assert.strictEqual(stdout, ''); + assert.strictEqual(code, 13); + }); + + it('should throw for a rejected TLA promise via --eval', async () => { + // Rejected TLA promise, --eval + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + ...commonArgs, + 'await Promise.reject(new Error("Xyz"))', + ]); + + assert.match(stderr, /Error: Xyz/); + assert.strictEqual(stdout, ''); + assert.strictEqual(code, 1); + }); + + it('should exit for an unsettled TLA promise and respect explicit exit code via --eval', async () => { + // Rejected TLA promise, --eval + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + ...commonArgs, + 'process.exitCode = 42;await new Promise(() => {})', + ]); + + assert.strictEqual(stderr, ''); + assert.strictEqual(stdout, ''); + assert.strictEqual(code, 42); + }); + + it('should throw for a rejected TLA promise and ignore explicit exit code via --eval', async () => { + // Rejected TLA promise, --eval + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + ...commonArgs, + 'process.exitCode = 42;await Promise.reject(new Error("Xyz"))', + ]); + + assert.match(stderr, /Error: Xyz/); + assert.strictEqual(stdout, ''); + assert.strictEqual(code, 1); + }); + + it('should exit for an unsettled TLA promise via stdin', async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--no-warnings', + fixtures.path('es-modules/tla/unresolved.mjs'), + ]); + + assert.strictEqual(stderr, ''); + assert.strictEqual(stdout, ''); + assert.strictEqual(code, 13); + }); + + it('should throw for a rejected TLA promise via stdin', async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--no-warnings', + fixtures.path('es-modules/tla/rejected.mjs'), + ]); + + assert.match(stderr, /Error: Xyz/); + assert.strictEqual(stdout, ''); + assert.strictEqual(code, 1); + }); + + it('should exit for an unsettled TLA promise and respect explicit exit code via stdin', async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--no-warnings', + fixtures.path('es-modules/tla/unresolved-withexitcode.mjs'), + ]); + + assert.strictEqual(stderr, ''); + assert.strictEqual(stdout, ''); + assert.strictEqual(code, 42); + }); + + it('should throw for a rejected TLA promise and ignore explicit exit code via stdin', async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--no-warnings', + fixtures.path('es-modules/tla/rejected-withexitcode.mjs'), + ]); + + assert.match(stderr, /Error: Xyz/); + assert.strictEqual(stdout, ''); + assert.strictEqual(code, 1); + }); + + it('should exit successfully when calling `process.exit()` in `.mjs` file', async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--no-warnings', + fixtures.path('es-modules/tla/process-exit.mjs'), + ]); + + assert.strictEqual(stderr, ''); + assert.strictEqual(stdout, ''); + assert.strictEqual(code, 0); + }); + + it('should be unaffected by `process.exit()` in worker thread', async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--no-warnings', + fixtures.path('es-modules/tla/unresolved-with-worker-process-exit.mjs'), + ]); + + assert.strictEqual(stderr, ''); + assert.strictEqual(stdout, ''); + assert.strictEqual(code, 13); + }); +}); diff --git a/test/es-module/test-esm-unknown-or-no-extension.js b/test/es-module/test-esm-unknown-or-no-extension.js index 40f840ad670..3f0660e5aa9 100644 --- a/test/es-module/test-esm-unknown-or-no-extension.js +++ b/test/es-module/test-esm-unknown-or-no-extension.js @@ -1,40 +1,36 @@ 'use strict'; -const common = require('../common'); -const fixtures = require('../common/fixtures'); -const { spawn } = require('child_process'); -const assert = require('assert'); +const { spawnPromisified } = require('../common'); +const fixtures = require('../common/fixtures.js'); +const assert = require('node:assert'); +const { execPath } = require('node:process'); +const { describe, it } = require('node:test'); + // In a "type": "module" package scope, files with unknown extensions or no // extensions should throw; both when used as a main entry point and also when // referenced via `import`. +describe('ESM: extensionless and unknown specifiers', { concurrency: true }, () => { + for ( + const fixturePath of [ + '/es-modules/package-type-module/noext-esm', + '/es-modules/package-type-module/imports-noext.mjs', + '/es-modules/package-type-module/extension.unknown', + '/es-modules/package-type-module/imports-unknownext.mjs', + ] + ) { + it('should throw', async () => { + const entry = fixtures.path(fixturePath); + const { code, signal, stderr, stdout } = await spawnPromisified(execPath, [entry]); -[ - '/es-modules/package-type-module/noext-esm', - '/es-modules/package-type-module/imports-noext.mjs', - '/es-modules/package-type-module/extension.unknown', - '/es-modules/package-type-module/imports-unknownext.mjs', -].forEach((fixturePath) => { - const entry = fixtures.path(fixturePath); - const child = spawn(process.execPath, [entry]); - let stdout = ''; - let stderr = ''; - child.stderr.setEncoding('utf8'); - child.stdout.setEncoding('utf8'); - child.stdout.on('data', (data) => { - stdout += data; - }); - child.stderr.on('data', (data) => { - stderr += data; - }); - child.on('close', common.mustCall((code, signal) => { - assert.strictEqual(code, 1); - assert.strictEqual(signal, null); - assert.strictEqual(stdout, ''); - assert.ok(stderr.includes('ERR_UNKNOWN_FILE_EXTENSION')); - if (fixturePath.includes('noext')) { - // Check for explanation to users - assert.ok(stderr.includes('extensionless')); - } - })); + assert.strictEqual(code, 1); + assert.strictEqual(signal, null); + assert.strictEqual(stdout, ''); + assert.ok(stderr.includes('ERR_UNKNOWN_FILE_EXTENSION')); + if (fixturePath.includes('noext')) { + // Check for explanation to users + assert.ok(stderr.includes('extensionless')); + } + }); + } }); diff --git a/test/es-module/test-esm-wasm.mjs b/test/es-module/test-esm-wasm.mjs index 01717c47714..fac1d4b2837 100644 --- a/test/es-module/test-esm-wasm.mjs +++ b/test/es-module/test-esm-wasm.mjs @@ -1,37 +1,43 @@ -// Flags: --experimental-wasm-modules -import '../common/index.mjs'; -import { path } from '../common/fixtures.mjs'; -import { add, addImported } from '../fixtures/es-modules/simple.wasm'; -import { state } from '../fixtures/es-modules/wasm-dep.mjs'; -import { strictEqual, ok } from 'assert'; -import { spawn } from 'child_process'; +import { spawnPromisified } from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import { strictEqual, match } from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; -strictEqual(state, 'WASM Start Executed'); -strictEqual(add(10, 20), 30); +describe('ESM: WASM modules', { concurrency: true }, () => { + it('should load exports', async () => { + const { code, stderr, stdout } = await spawnPromisified(execPath, [ + '--no-warnings', + '--experimental-wasm-modules', + '--input-type=module', + '--eval', + [ + 'import { strictEqual, match } from "node:assert";', + `import { add, addImported } from ${JSON.stringify(fixtures.fileURL('es-modules/simple.wasm'))};`, + `import { state } from ${JSON.stringify(fixtures.fileURL('es-modules/wasm-dep.mjs'))};`, + 'strictEqual(state, "WASM Start Executed");', + 'strictEqual(add(10, 20), 30);', + 'strictEqual(addImported(0), 42);', + 'strictEqual(state, "WASM JS Function Executed");', + 'strictEqual(addImported(1), 43);', + ].join('\n'), + ]); -strictEqual(addImported(0), 42); + strictEqual(stderr, ''); + strictEqual(stdout, ''); + strictEqual(code, 0); + }); -strictEqual(state, 'WASM JS Function Executed'); + it('should emit experimental warning', async () => { + const { code, signal, stderr } = await spawnPromisified(execPath, [ + '--experimental-wasm-modules', + fixtures.path('es-modules/wasm-modules.mjs'), + ]); -strictEqual(addImported(1), 43); - -// Test warning message -const child = spawn(process.execPath, [ - '--experimental-wasm-modules', - path('/es-modules/wasm-modules.mjs'), -]); - -let stderr = ''; -child.stderr.setEncoding('utf8'); -child.stderr.on('data', (data) => { - stderr += data; -}); -child.on('close', (code, signal) => { - strictEqual(code, 0); - strictEqual(signal, null); - ok(stderr.toString().includes( - 'ExperimentalWarning: Importing WebAssembly modules is ' + - 'an experimental feature. This feature could change at any time' - )); + strictEqual(code, 0); + strictEqual(signal, null); + match(stderr, /ExperimentalWarning/); + match(stderr, /WebAssembly/); + }); }); diff --git a/test/es-module/test-http-imports-cli.mjs b/test/es-module/test-http-imports-cli.mjs index 67cefd69ddd..7deb31a288c 100644 --- a/test/es-module/test-http-imports-cli.mjs +++ b/test/es-module/test-http-imports-cli.mjs @@ -1,48 +1,48 @@ -import { mustCall } from '../common/index.mjs'; -import { match, notStrictEqual } from 'assert'; -import { spawn } from 'child_process'; -import { execPath } from 'process'; - -{ - const child = spawn(execPath, [ - '--experimental-network-imports', - '--input-type=module', - '-e', - 'import "http://example.com"', - ]); - - let stderr = ''; - child.stderr.setEncoding('utf8'); - child.stderr.on('data', (data) => { - stderr += data; - }); - child.on('close', mustCall((code, _signal) => { +import { mustCall, spawnPromisified } from '../common/index.mjs'; +import { ok, match, notStrictEqual } from 'node:assert'; +import { spawn as spawnAsync } from 'node:child_process'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; + + +describe('ESM: http import via CLI', { concurrency: true }, () => { + const disallowedSpecifier = 'http://example.com'; + + it('should throw disallowed error for insecure protocol', async () => { + const { code, stderr } = await spawnPromisified(execPath, [ + '--experimental-network-imports', + '--input-type=module', + '--eval', + `import ${JSON.stringify(disallowedSpecifier)}`, + ]); + notStrictEqual(code, 0); // [ERR_NETWORK_IMPORT_DISALLOWED]: import of 'http://example.com/' by // …/[eval1] is not supported: http can only be used to load local // resources (use https instead). - match(stderr, /[ERR_NETWORK_IMPORT_DISALLOWED]/); - })); -} -{ - const child = spawn(execPath, [ - '--experimental-network-imports', - '--input-type=module', - ]); - child.stdin.end('import "http://example.com"'); - - let stderr = ''; - child.stderr.setEncoding('utf8'); - child.stderr.on('data', (data) => { - stderr += data; + match(stderr, /ERR_NETWORK_IMPORT_DISALLOWED/); + ok(stderr.includes(disallowedSpecifier)); }); - child.on('close', mustCall((code, _signal) => { - notStrictEqual(code, 0); - // [ERR_NETWORK_IMPORT_DISALLOWED]: import of 'http://example.com/' by - // …/[stdin] is not supported: http can only be used to load local - // resources (use https instead). - match(stderr, /[ERR_NETWORK_IMPORT_DISALLOWED]/); - })); -} + it('should throw disallowed error for insecure protocol in REPL', () => { + const child = spawnAsync(execPath, [ + '--experimental-network-imports', + '--input-type=module', + ]); + child.stdin.end(`import ${JSON.stringify(disallowedSpecifier)}`); + + let stderr = ''; + child.stderr.setEncoding('utf8'); + child.stderr.on('data', (data) => stderr += data); + child.on('close', mustCall((code, _signal) => { + notStrictEqual(code, 0); + + // [ERR_NETWORK_IMPORT_DISALLOWED]: import of 'http://example.com/' by + // …/[stdin] is not supported: http can only be used to load local + // resources (use https instead). + match(stderr, /\[ERR_NETWORK_IMPORT_DISALLOWED\]/); + ok(stderr.includes(disallowedSpecifier)); + })); + }); +}); diff --git a/test/es-module/test-http-imports.mjs b/test/es-module/test-http-imports.mjs index a1a208689f0..235d142d355 100644 --- a/test/es-module/test-http-imports.mjs +++ b/test/es-module/test-http-imports.mjs @@ -68,6 +68,11 @@ for (const { protocol, createServer } of [ const server = createServer(function(_req, res) { const url = new URL(_req.url, host); const redirect = url.searchParams.get('redirect'); + if (url.pathname === '/not-found') { + res.writeHead(404); + res.end(); + return; + } if (redirect) { const { status, location } = JSON.parse(redirect); res.writeHead(status, { @@ -162,7 +167,7 @@ for (const { protocol, createServer } of [ export default 1;`); await assert.rejects( import(fileDep.href), - { code: 'ERR_INVALID_URL_SCHEME' } + { code: 'ERR_NETWORK_IMPORT_DISALLOWED' } ); const builtinDep = new URL(url.href); @@ -172,7 +177,7 @@ for (const { protocol, createServer } of [ `); await assert.rejects( import(builtinDep.href), - { code: 'ERR_INVALID_URL_SCHEME' } + { code: 'ERR_NETWORK_IMPORT_DISALLOWED' } ); const unprefixedBuiltinDep = new URL(url.href); @@ -182,7 +187,7 @@ for (const { protocol, createServer } of [ `); await assert.rejects( import(unprefixedBuiltinDep.href), - { code: 'ERR_INVALID_URL_SCHEME' } + { code: 'ERR_NETWORK_IMPORT_DISALLOWED' } ); const unsupportedMIME = new URL(url.href); @@ -192,6 +197,12 @@ for (const { protocol, createServer } of [ import(unsupportedMIME.href), { code: 'ERR_UNKNOWN_MODULE_FORMAT' } ); + const notFound = new URL(url.href); + notFound.pathname = '/not-found'; + await assert.rejects( + import(notFound.href), + { code: 'ERR_MODULE_NOT_FOUND' }, + ); server.close(); } diff --git a/test/fixtures/crypto/dsa.js b/test/fixtures/crypto/dsa.js deleted file mode 100644 index c88720220c5..00000000000 --- a/test/fixtures/crypto/dsa.js +++ /dev/null @@ -1,93 +0,0 @@ -'use strict'; - -module.exports = function() { - const pkcs8 = Buffer.from( - '3082015b0201003082013406072a8648ce3804013082012702818100d5f35aa5730e2' + - '6166fd3ea81f8f0eeb05bd1250e164b7c76b180b6dae95096d13dee6956e15a9aea7c' + - 'f18a0df7c5dc326ccef1cbf97636d22f870b76f2607f9a867db2756aecf65505aa48f' + - 'dea5f5ee54f508a05d9dae76bf262b4ca3662cc176b7c628c7bee2076df07f9a64e04' + - '02630dfee63eaf0ed64d48b469fe1c9ac4a1021d00b14213226cfcfb59e3a0379e559' + - 'c74ff8a7383eb4c41cecb6f3732b702818100a0865b7f8954e7ae587c8e6a89e391e8' + - '2657c58f05ccd94de61748e89e217efab3d9b5fa842ebc62525966916ad2b7af422a9' + - 'b2407817a5b382b6581434fd1a169c75ad4d0e3862a3f484e9f9f2a816f943a8e6060' + - 'f26fe27c533587b765e57948439084e76fd6a4fd004f5c78d972cf7f100ec9494a902' + - '645baca4b4c6f3993041e021c600daa0a9c4cc674c98bb07956374c84ac1c33af8816' + - '3ea7e2587876', 'hex'); - - const spki = Buffer.from( - '308201c03082013406072a8648ce3804013082012702818100d5f35aa5730e26166fd' + - '3ea81f8f0eeb05bd1250e164b7c76b180b6dae95096d13dee6956e15a9aea7cf18a0d' + - 'f7c5dc326ccef1cbf97636d22f870b76f2607f9a867db2756aecf65505aa48fdea5f5' + - 'ee54f508a05d9dae76bf262b4ca3662cc176b7c628c7bee2076df07f9a64e0402630d' + - 'fee63eaf0ed64d48b469fe1c9ac4a1021d00b14213226cfcfb59e3a0379e559c74ff8' + - 'a7383eb4c41cecb6f3732b702818100a0865b7f8954e7ae587c8e6a89e391e82657c5' + - '8f05ccd94de61748e89e217efab3d9b5fa842ebc62525966916ad2b7af422a9b24078' + - '17a5b382b6581434fd1a169c75ad4d0e3862a3f484e9f9f2a816f943a8e6060f26fe2' + - '7c533587b765e57948439084e76fd6a4fd004f5c78d972cf7f100ec9494a902645bac' + - 'a4b4c6f399303818500028181009a8df69f2fe321869e2094e387bc1dc2b5f3bff2a2' + - 'e23cfba51d3c119fba6b4c15a49485fa811b6955d91d28c9e2e0445a79ddc5426b2fe' + - '44e00a6c9254c776f13fd10dbc934262077b1df72c16bc848817c61fb6a607abe60c7' + - 'd11528ab9bdf55de45495733a047bd75a48b8166f1aa3deab681a2574a4f35106f0d7' + - '8b641d7', 'hex'); - - const plaintext = Buffer.from( - '5f4dba4f320c0ce876725afce5fbd25bf83e5a7125a08cafe73c3ebac421779df9d55' + - 'd180c3ae9942645e1d82fee8c9d294b3cb1a08a9931201b3c0e81fc47cacf8315a2af' + - '66324113c3b66230c34608c4f4593634ce02b267362277f0a840ca74bc3d1a6236952' + - 'c5ed7aaf8a8fecbddfa7584e6978cea5d2a5b9fb7f1b48c8b0be58a305202754d8376' + - '107374793cf026aaee5300727d836cd71e71b345ddb2e44446ffc5b901635413890d9' + - '10ea380984a90191031323f16dbcc9d6be168b84885384ca03e12600ac1c248028af3' + - '726cc93463882ea8c02aab', 'hex'); - - const signatures = { - 'sha-1': Buffer.from( - '303d021c685192dc48fbd8c6dd80536eaf92050ca07aa85af5a25a41a93bc8ea021' + - 'd009a032a19182ceca7b202d7e0ce327fe5830a9937a37714d4c6801ae9', 'hex'), - 'sha-256': Buffer.from( - '303d021c7b660d1b2b40237d0f615877efbf2a3f51577bc42a3cb4e280c0a6a9021' + - 'd008393a01a9bcabce267dfcc6bc867d348911f6eda3db96d3078a380c1', 'hex'), - 'sha-384': Buffer.from( - '303e021d00ab84d3c306aea1c5e69e126d21dafc03ee9c7aa8fa38884de5015d510' + - '21d0099030adacdc6787dcb1dc3b05fa122ad72d4ddc281cc619565dba947', 'hex'), - 'sha-512': Buffer.from( - '303c021c069c40654607388a56d3cb827c11121d07850b3b62ed203c1d92ce7f021' + - 'c0e69f41933d0ee3b1c1b184d742f3813ee3b32d053f13fbb93ab8229', 'hex'), - } - - const vectors = [ - { - publicKeyBuffer: spki, - privateKeyBuffer: pkcs8, - algorithm: { name: 'NODE-DSA' }, - hash: 'SHA-1', - plaintext, - signature: signatures['sha-1'] - }, - { - publicKeyBuffer: spki, - privateKeyBuffer: pkcs8, - algorithm: { name: 'NODE-DSA' }, - hash: 'SHA-256', - plaintext, - signature: signatures['sha-256'] - }, - { - publicKeyBuffer: spki, - privateKeyBuffer: pkcs8, - algorithm: { name: 'NODE-DSA'}, - hash: 'SHA-384', - plaintext, - signature: signatures['sha-384'] - }, - { - publicKeyBuffer: spki, - privateKeyBuffer: pkcs8, - algorithm: { name: 'NODE-DSA' }, - hash: 'SHA-512', - plaintext, - signature: signatures['sha-512'] - } - ]; - - return vectors; -}; diff --git a/test/fixtures/crypto/eddsa.js b/test/fixtures/crypto/eddsa.js new file mode 100644 index 00000000000..8b1a5ce1c5a --- /dev/null +++ b/test/fixtures/crypto/eddsa.js @@ -0,0 +1,51 @@ +'use strict'; + +module.exports = function() { + const pkcs8 = { + 'Ed25519': Buffer.from( + '302e020100300506032b657004220420f3c8f4c48df878146e8cd3bf6df4e50e389b' + + 'a7074e15c2352dcd5d308d4ca81f', 'hex'), + 'Ed448': Buffer.from( + '3047020100300506032b6571043b04390eff03458c28e0179c521de312c969b78343' + + '48ecab991a60e3b2e9a79e4cd9e480ef291712d2c83d047272d5c9f428664f696d26' + + '70458f1d2e', 'hex') + } + + const spki = { + 'Ed25519': Buffer.from( + '302a300506032b6570032100d8e18963d809d487d9549accaec6742e7eeba24d8a0d' + + '3b14b7e3caea06893dcc', 'hex'), + 'Ed448': Buffer.from( + '3043300506032b6571033a00ab4bb885fd7d2c5af24e83710cffa0c74a57e274801d' + + 'b2057b0bdc5ea032b6fe6bc78b8045365aeb26e86e1f14fd349d07c48495f5a46a5a' + + '80', 'hex') + } + + const data = Buffer.from( + '2b7ed0bc7795694ab4acd35903fe8cd7d80f6a1c8688a6c3414409457514a1457855bb' + + 'b219e30a1beea8fe869082d99fc8282f9050d024e59eaf0730ba9db70a', 'hex'); + + // For verification tests. + const signatures = { + 'Ed25519': Buffer.from( + '3d90de5e5743dfc28225bfadb341b116cbf8a3f1ceedbf4adc350ef5d3471843a418' + + '614dcb6e614862614cf7af1496f9340b3c844ea4dceab1d3d155eb7ecc00', 'hex'), + 'Ed448': Buffer.from( + '76897e8c50ac6b1132735c09c55f506c0149d2677c75664f8bc10b826fbd9df0a03c' + + 'd986bce8339e64c7d1720ea9361784dc73837765ac2980c0dac0814a8bc187d1c9c9' + + '07c5dcc07956f85b70930fe42de764177217cb2d52bab7c1debe0ca89ccecbcd63f7' + + '025a2a5a572b9d23b0642f00', 'hex') + } + + const algorithms = ['Ed25519', 'Ed448']; + + const vectors = algorithms.map((algorithm) => ({ + publicKeyBuffer: spki[algorithm], + privateKeyBuffer: pkcs8[algorithm], + name: algorithm, + data, + signature: signatures[algorithm], + })); + + return vectors; +} diff --git a/test/fixtures/es-module-loaders/assertionless-json-import.mjs b/test/fixtures/es-module-loaders/assertionless-json-import.mjs index c5c2fadf28f..07656d4ec40 100644 --- a/test/fixtures/es-module-loaders/assertionless-json-import.mjs +++ b/test/fixtures/es-module-loaders/assertionless-json-import.mjs @@ -4,14 +4,14 @@ const JSON_URL_PATTERN = /\.json(\?[^#]*)?(#.*)?$/; export function resolve(url, context, next) { // Mutation from resolve hook should be discarded. context.importAssertions.type = 'whatever'; - return next(url, context); + return next(url); } export function load(url, context, next) { - if (context.importAssertions.type == null && + if (context.importAssertions.type == null && (DATA_URL_PATTERN.test(url) || JSON_URL_PATTERN.test(url))) { const { importAssertions } = context; importAssertions.type = 'json'; } - return next(url, context); + return next(url); } diff --git a/test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs b/test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs index 8790811c7e7..8c317c1b7ce 100644 --- a/test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs +++ b/test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs @@ -18,6 +18,7 @@ export async function resolve(specifier, context, next) { if (def.url.startsWith('node:')) { return { + shortCircuit: true, url: `custom-${def.url}`, importAssertions: context.importAssertions, }; @@ -29,11 +30,12 @@ export function load(url, context, next) { if (url.startsWith('custom-node:')) { const urlObj = new URL(url); return { + shortCircuit: true, source: generateBuiltinModule(urlObj.pathname), format: 'module', }; } - return next(url, context); + return next(url); } function generateBuiltinModule(builtinName) { diff --git a/test/fixtures/es-module-loaders/example-loader.mjs b/test/fixtures/es-module-loaders/example-loader.mjs index be480873803..77d44d55f91 100644 --- a/test/fixtures/es-module-loaders/example-loader.mjs +++ b/test/fixtures/es-module-loaders/example-loader.mjs @@ -8,20 +8,22 @@ const JS_EXTENSIONS = new Set(['.js', '.mjs']); const baseURL = new URL('file://'); baseURL.pathname = process.cwd() + '/'; -export function resolve(specifier, { parentURL = baseURL }, defaultResolve) { +export function resolve(specifier, { parentURL = baseURL }, next) { if (builtinModules.includes(specifier)) { return { + shortCircuit: true, url: 'node:' + specifier }; } if (/^\.{1,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) { // For node_modules support: - // return defaultResolve(specifier, {parentURL}, defaultResolve); + // return next(specifier); throw new Error( `imports must be URLs or begin with './', or '../'; '${specifier}' does not`); } const resolved = new URL(specifier, parentURL); return { + shortCircuit: true, url: resolved.href }; } diff --git a/test/fixtures/es-module-loaders/hook-resolve-type.mjs b/test/fixtures/es-module-loaders/hook-resolve-type.mjs index 5068d6265c5..b1f5606c0e4 100644 --- a/test/fixtures/es-module-loaders/hook-resolve-type.mjs +++ b/test/fixtures/es-module-loaders/hook-resolve-type.mjs @@ -3,7 +3,7 @@ let importedCJS = 0; global.getModuleTypeStats = () => { return {importedESM, importedCJS} }; export async function load(url, context, next) { - return next(url, context, next); + return next(url); } export async function resolve(specifier, context, next) { diff --git a/test/fixtures/es-module-loaders/hooks-custom.mjs b/test/fixtures/es-module-loaders/hooks-custom.mjs index 5173b973879..65dba3535c2 100644 --- a/test/fixtures/es-module-loaders/hooks-custom.mjs +++ b/test/fixtures/es-module-loaders/hooks-custom.mjs @@ -29,32 +29,37 @@ export function load(url, context, next) { if (url.endsWith('esmHook/badReturnFormatVal.mjs')) return { format: Array(0), + shortCircuit: true, source: '', } if (url.endsWith('esmHook/unsupportedReturnFormatVal.mjs')) return { format: 'foo', // Not one of the allowable inputs: no translator named 'foo' + shortCircuit: true, source: '', } if (url.endsWith('esmHook/badReturnSourceVal.mjs')) return { format: 'module', + shortCircuit: true, source: Array(0), } if (url.endsWith('esmHook/preknownFormat.pre')) return { format: context.format, + shortCircuit: true, source: `const msg = 'hello world'; export default msg;` }; if (url.endsWith('esmHook/virtual.mjs')) return { format: 'module', + shortCircuit: true, source: `export const message = 'Woohoo!'.toUpperCase();`, }; - return next(url, context, next); + return next(url); } -export function resolve(specifier, context, next) { +export function resolve(specifier, { importAssertions }, next) { let format = ''; if (specifier === 'esmHook/format.false') format = false; @@ -63,9 +68,10 @@ export function resolve(specifier, context, next) { if (specifier.startsWith('esmHook')) return { format, + shortCircuit: true, url: pathToFileURL(specifier).href, - importAssertions: context.importAssertions, + importAssertions, }; - return next(specifier, context, next); + return next(specifier); } diff --git a/test/fixtures/es-module-loaders/hooks-obsolete.mjs b/test/fixtures/es-module-loaders/hooks-obsolete.mjs index 9d12251923d..bb10ef8ef4b 100644 --- a/test/fixtures/es-module-loaders/hooks-obsolete.mjs +++ b/test/fixtures/es-module-loaders/hooks-obsolete.mjs @@ -4,19 +4,19 @@ export function getSource() {} export function transformSource() {} -export function load(url, context, next) { - if (url === 'whatever') return { - format: 'module', - source: '', +export function resolve(specifier, context, next) { + if (specifier === 'whatever') return { + url: specifier, }; - return next(url, context, next); + return next(specifier); } -export function resolve(specifier, context, next) { - if (specifier === 'whatever') return { - url: specifier, +export function load(url, context, next) { + if (url === 'whatever') return { + format: 'module', + source: '', }; - return next(specifier, context, next); + return next(url); } diff --git a/test/fixtures/es-module-loaders/http-loader.mjs b/test/fixtures/es-module-loaders/http-loader.mjs new file mode 100644 index 00000000000..8096dd9bb73 --- /dev/null +++ b/test/fixtures/es-module-loaders/http-loader.mjs @@ -0,0 +1,40 @@ +import { get } from 'http'; + +export function resolve(specifier, context, nextResolve) { + const { parentURL = null } = context; + + if (specifier.startsWith('http://')) { + return { + shortCircuit: true, + url: specifier, + }; + } else if (parentURL?.startsWith('http://')) { + return { + shortCircuit: true, + url: new URL(specifier, parentURL).href, + }; + } + + return nextResolve(specifier); +} + +export function load(url, context, nextLoad) { + if (url.startsWith('http://')) { + return new Promise((resolve, reject) => { + get(url, (rsp) => { + let data = ''; + rsp.on('data', (chunk) => data += chunk); + rsp.on('end', () => { + resolve({ + format: 'module', + shortCircuit: true, + source: data, + }); + }); + }) + .on('error', reject); + }); + } + + return nextLoad(url); +} diff --git a/test/fixtures/es-module-loaders/loader-get-format.mjs b/test/fixtures/es-module-loaders/loader-get-format.mjs deleted file mode 100644 index 7ade70fca0e..00000000000 --- a/test/fixtures/es-module-loaders/loader-get-format.mjs +++ /dev/null @@ -1,10 +0,0 @@ -export async function getFormat(url, context, defaultGetFormat) { - try { - if (new URL(url).pathname.endsWith('.unknown')) { - return { - format: 'module' - }; - } - } catch {} - return defaultGetFormat(url, context, defaultGetFormat); -} diff --git a/test/fixtures/es-module-loaders/loader-invalid-format.mjs b/test/fixtures/es-module-loaders/loader-invalid-format.mjs index 0210f73b554..e7dd06c108b 100644 --- a/test/fixtures/es-module-loaders/loader-invalid-format.mjs +++ b/test/fixtures/es-module-loaders/loader-invalid-format.mjs @@ -1,18 +1,20 @@ -export async function resolve(specifier, { parentURL, importAssertions }, defaultResolve) { +export async function resolve(specifier, { parentURL, importAssertions }, next) { if (parentURL && specifier === '../fixtures/es-modules/test-esm-ok.mjs') { return { - url: 'file:///asdf' + shortCircuit: true, + url: 'file:///asdf', }; } - return defaultResolve(specifier, {parentURL, importAssertions}, defaultResolve); + return next(specifier); } export async function load(url, context, next) { if (url === 'file:///asdf') { return { format: 'esm', + shortCircuit: true, source: '', } } - return next(url, context, next); + return next(url); } diff --git a/test/fixtures/es-module-loaders/loader-invalid-url.mjs b/test/fixtures/es-module-loaders/loader-invalid-url.mjs index a7cefeca3da..a54f39521f2 100644 --- a/test/fixtures/es-module-loaders/loader-invalid-url.mjs +++ b/test/fixtures/es-module-loaders/loader-invalid-url.mjs @@ -1,9 +1,10 @@ -export async function resolve(specifier, { parentURL, importAssertions }, defaultResolve) { +export async function resolve(specifier, { parentURL, importAssertions }, next) { if (parentURL && specifier === '../fixtures/es-modules/test-esm-ok.mjs') { return { + shortCircuit: true, url: specifier, importAssertions, }; } - return defaultResolve(specifier, {parentURL, importAssertions}, defaultResolve); + return next(specifier); } diff --git a/test/fixtures/es-module-loaders/loader-load-bad-next-context.mjs b/test/fixtures/es-module-loaders/loader-load-bad-next-context.mjs new file mode 100644 index 00000000000..fe38da04f9f --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-load-bad-next-context.mjs @@ -0,0 +1,3 @@ +export async function load(url, context, next) { + return next(url, []); +} diff --git a/test/fixtures/es-module-loaders/loader-load-bad-next-url.mjs b/test/fixtures/es-module-loaders/loader-load-bad-next-url.mjs new file mode 100644 index 00000000000..c6a4c7504d4 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-load-bad-next-url.mjs @@ -0,0 +1,3 @@ +export async function load(url, context, next) { + return next([]); +} diff --git a/test/fixtures/es-module-loaders/loader-load-foo-or-42.mjs b/test/fixtures/es-module-loaders/loader-load-foo-or-42.mjs new file mode 100644 index 00000000000..8d408223e66 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-load-foo-or-42.mjs @@ -0,0 +1,11 @@ +export async function load(url) { + const val = url.includes('42') + ? '42' + : '"foo"'; + + return { + format: 'module', + shortCircuit: true, + source: `export default ${val}`, + }; +} diff --git a/test/fixtures/es-module-loaders/loader-load-impersonating-next-url.mjs b/test/fixtures/es-module-loaders/loader-load-impersonating-next-url.mjs new file mode 100644 index 00000000000..1028e093e46 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-load-impersonating-next-url.mjs @@ -0,0 +1,3 @@ +export async function load(url, context, next) { + return next('not/a/url'); +} diff --git a/test/fixtures/es-module-loaders/loader-load-incomplete.mjs b/test/fixtures/es-module-loaders/loader-load-incomplete.mjs new file mode 100644 index 00000000000..d6242488e57 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-load-incomplete.mjs @@ -0,0 +1,6 @@ +export async function load() { + return { + format: 'module', + source: 'export default 42', + }; +} diff --git a/test/fixtures/es-module-loaders/loader-load-next-modified.mjs b/test/fixtures/es-module-loaders/loader-load-next-modified.mjs new file mode 100644 index 00000000000..401b5297131 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-load-next-modified.mjs @@ -0,0 +1,11 @@ +export async function load(url, context, next) { + const { + format, + source, + } = await next(url); + + return { + format, + source: source + 1, + }; +} diff --git a/test/fixtures/es-module-loaders/loader-load-null-return.mjs b/test/fixtures/es-module-loaders/loader-load-null-return.mjs new file mode 100644 index 00000000000..252eec4ebc2 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-load-null-return.mjs @@ -0,0 +1,3 @@ +export async function load(specifier, context, next) { + return null; +} diff --git a/test/fixtures/es-module-loaders/loader-load-passing-modified-context.mjs b/test/fixtures/es-module-loaders/loader-load-passing-modified-context.mjs new file mode 100644 index 00000000000..7676be766af --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-load-passing-modified-context.mjs @@ -0,0 +1,6 @@ +export async function load(url, context, next) { + return next(url, { + ...context, + foo: 'bar', + }); +} diff --git a/test/fixtures/es-module-loaders/loader-load-passthru.mjs b/test/fixtures/es-module-loaders/loader-load-passthru.mjs new file mode 100644 index 00000000000..0de06142007 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-load-passthru.mjs @@ -0,0 +1,4 @@ +export async function load(url, context, next) { + console.log('load passthru'); // This log is deliberate + return next(url); +} diff --git a/test/fixtures/es-module-loaders/loader-load-receiving-modified-context.mjs b/test/fixtures/es-module-loaders/loader-load-receiving-modified-context.mjs new file mode 100644 index 00000000000..2d7bc350bd8 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-load-receiving-modified-context.mjs @@ -0,0 +1,4 @@ +export async function load(url, context, next) { + console.log(context.foo); // This log is deliberate + return next(url, context); +} diff --git a/test/fixtures/es-module-loaders/loader-log-args.mjs b/test/fixtures/es-module-loaders/loader-log-args.mjs new file mode 100644 index 00000000000..84ed373d6b4 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-log-args.mjs @@ -0,0 +1,28 @@ +export async function resolve(...args) { + console.log(`resolve arg count: ${args.length}`); + console.log({ + specifier: args[0], + context: args[1], + next: args[2], + }); + + return { + shortCircuit: true, + url: args[0], + }; +} + +export async function load(...args) { + console.log(`load arg count: ${args.length}`); + console.log({ + url: args[0], + context: args[1], + next: args[2], + }); + + return { + format: 'module', + source: '', + shortCircuit: true, + }; +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-42.mjs b/test/fixtures/es-module-loaders/loader-resolve-42.mjs new file mode 100644 index 00000000000..eaca111998a --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-42.mjs @@ -0,0 +1,6 @@ +export async function resolve(specifier, context, next) { + console.log('resolve 42'); // This log is deliberate + console.log('next:', next.name); // This log is deliberate + + return next('file:///42.mjs'); +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-bad-next-context.mjs b/test/fixtures/es-module-loaders/loader-resolve-bad-next-context.mjs new file mode 100644 index 00000000000..881f5875dd0 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-bad-next-context.mjs @@ -0,0 +1,3 @@ +export async function resolve(specifier, context, next) { + return next(specifier, []); +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-bad-next-specifier.mjs b/test/fixtures/es-module-loaders/loader-resolve-bad-next-specifier.mjs new file mode 100644 index 00000000000..66c941754f9 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-bad-next-specifier.mjs @@ -0,0 +1,3 @@ +export async function resolve(specifier, context, next) { + return next([]); +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-foo.mjs b/test/fixtures/es-module-loaders/loader-resolve-foo.mjs new file mode 100644 index 00000000000..7d23d6c4908 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-foo.mjs @@ -0,0 +1,4 @@ +export async function resolve(specifier, context, next) { + console.log('resolve foo'); // This log is deliberate + return next('file:///foo.mjs'); +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-incomplete.mjs b/test/fixtures/es-module-loaders/loader-resolve-incomplete.mjs new file mode 100644 index 00000000000..9eb1617f301 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-incomplete.mjs @@ -0,0 +1,5 @@ +export async function resolve() { + return { + url: 'file:///incomplete-resolve-chain.js', + }; +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-multiple-next-calls.mjs b/test/fixtures/es-module-loaders/loader-resolve-multiple-next-calls.mjs new file mode 100644 index 00000000000..91dbec251ed --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-multiple-next-calls.mjs @@ -0,0 +1,9 @@ +export async function resolve(specifier, context, next) { + const { url: first } = await next(specifier); + const { url: second } = await next(specifier); + + return { + format: 'module', + url: first, + }; +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-next-modified.mjs b/test/fixtures/es-module-loaders/loader-resolve-next-modified.mjs new file mode 100644 index 00000000000..a973345a82f --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-next-modified.mjs @@ -0,0 +1,11 @@ +export async function resolve(url, context, next) { + const { + format, + url: nextUrl, + } = await next(url, context); + + return { + format, + url: `${nextUrl}?foo`, + }; +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-null-return.mjs b/test/fixtures/es-module-loaders/loader-resolve-null-return.mjs new file mode 100644 index 00000000000..16c9826a8ba --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-null-return.mjs @@ -0,0 +1,3 @@ +export async function resolve(specifier, context, next) { + return null; +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-passing-modified-context.mjs b/test/fixtures/es-module-loaders/loader-resolve-passing-modified-context.mjs new file mode 100644 index 00000000000..6a92a6cd8f6 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-passing-modified-context.mjs @@ -0,0 +1,6 @@ +export async function resolve(specifier, context, next) { + return next(specifier, { + ...context, + foo: 'bar', + }); +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-passthru.mjs b/test/fixtures/es-module-loaders/loader-resolve-passthru.mjs new file mode 100644 index 00000000000..3db5b21bb98 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-passthru.mjs @@ -0,0 +1,4 @@ +export async function resolve(specifier, context, next) { + console.log('resolve passthru'); // This log is deliberate + return next(specifier); +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-receiving-modified-context.mjs b/test/fixtures/es-module-loaders/loader-resolve-receiving-modified-context.mjs new file mode 100644 index 00000000000..83aa83104e9 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-receiving-modified-context.mjs @@ -0,0 +1,4 @@ +export async function resolve(specifier, context, next) { + console.log(context.foo); // This log is deliberate + return next(specifier, context); +} diff --git a/test/fixtures/es-module-loaders/loader-resolve-shortcircuit.mjs b/test/fixtures/es-module-loaders/loader-resolve-shortcircuit.mjs new file mode 100644 index 00000000000..d886b3dfcbf --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-resolve-shortcircuit.mjs @@ -0,0 +1,6 @@ +export async function resolve(specifier) { + return { + shortCircuit: true, + url: specifier, + } +} diff --git a/test/fixtures/es-module-loaders/loader-shared-dep.mjs b/test/fixtures/es-module-loaders/loader-shared-dep.mjs index 387575794c0..d41c1ae4033 100644 --- a/test/fixtures/es-module-loaders/loader-shared-dep.mjs +++ b/test/fixtures/es-module-loaders/loader-shared-dep.mjs @@ -5,7 +5,7 @@ import { createRequire } from '../../common/index.mjs'; const require = createRequire(import.meta.url); const dep = require('./loader-dep.js'); -export function resolve(specifier, { parentURL, importAssertions }, defaultResolve) { +export function resolve(specifier, context, next) { assert.strictEqual(dep.format, 'module'); - return defaultResolve(specifier, { parentURL, importAssertions }, defaultResolve); + return next(specifier); } diff --git a/test/fixtures/es-module-loaders/loader-this-value-inside-hook-functions.mjs b/test/fixtures/es-module-loaders/loader-this-value-inside-hook-functions.mjs new file mode 100644 index 00000000000..c1c80622fee --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-this-value-inside-hook-functions.mjs @@ -0,0 +1,14 @@ +export function resolve(url, _, next) { + if (this != null) throw new Error('hook function must not be bound to ESMLoader instance'); + return next(url); +} + +export function load(url, _, next) { + if (this != null) throw new Error('hook function must not be bound to ESMLoader instance'); + return next(url); +} + +export function globalPreload() { + if (this != null) throw new Error('hook function must not be bound to ESMLoader instance'); + return ""; +} diff --git a/test/fixtures/es-module-loaders/loader-unknown-builtin-module.mjs b/test/fixtures/es-module-loaders/loader-unknown-builtin-module.mjs index 1063f8dfd65..65e1adf909d 100644 --- a/test/fixtures/es-module-loaders/loader-unknown-builtin-module.mjs +++ b/test/fixtures/es-module-loaders/loader-unknown-builtin-module.mjs @@ -3,5 +3,5 @@ export function resolve(specifier, context, next) { url: 'node:unknown-builtin-module' }; - return next(specifier, context, next); + return next(specifier); } diff --git a/test/fixtures/es-module-loaders/loader-with-too-many-args.mjs b/test/fixtures/es-module-loaders/loader-with-too-many-args.mjs new file mode 100644 index 00000000000..95f40ec15d2 --- /dev/null +++ b/test/fixtures/es-module-loaders/loader-with-too-many-args.mjs @@ -0,0 +1,7 @@ +export async function resolve(specifier, context, next) { + return next(specifier, context, 'resolve-extra-arg'); +} + +export async function load(url, context, next) { + return next(url, context, 'load-extra-arg'); +} diff --git a/test/fixtures/es-module-loaders/missing-dynamic-instantiate-hook.mjs b/test/fixtures/es-module-loaders/missing-dynamic-instantiate-hook.mjs index ec15eb0bb8f..5d61d81bc31 100644 --- a/test/fixtures/es-module-loaders/missing-dynamic-instantiate-hook.mjs +++ b/test/fixtures/es-module-loaders/missing-dynamic-instantiate-hook.mjs @@ -1,10 +1,10 @@ -export function resolve(specifier, { parentURL }, defaultResolve) { +export function resolve(specifier, context, next) { if (specifier === 'test') { return { url: 'file://' }; } - return defaultResolve(specifier, {parentURL}, defaultResolve); + return next(specifier); } export function getFormat(url, context, defaultGetFormat) { diff --git a/test/fixtures/es-module-loaders/mock-loader.mjs b/test/fixtures/es-module-loaders/mock-loader.mjs index 7c4592aca96..062be39603e 100644 --- a/test/fixtures/es-module-loaders/mock-loader.mjs +++ b/test/fixtures/es-module-loaders/mock-loader.mjs @@ -171,6 +171,7 @@ export function globalPreload({port}) { export async function resolve(specifier, context, defaultResolve) { if (specifier === 'node:mock') { return { + shortCircuit: true, url: specifier }; } @@ -180,10 +181,12 @@ export async function resolve(specifier, context, defaultResolve) { // Do nothing, let it get the "real" module } else if (mockedModuleExports.has(def.url)) { return { + shortCircuit: true, url: `mock-facade:${currentMockVersion}:${encodeURIComponent(def.url)}` }; }; return { + shortCircuit: true, url: def.url, }; } @@ -196,6 +199,7 @@ export async function load(url, context, defaultLoad) { * channel with preloadCode */ return { + shortCircuit: true, source: 'export default import.meta.doMock', format: 'module' }; @@ -210,6 +214,7 @@ export async function load(url, context, defaultLoad) { decodeURIComponent(encodedTargetURL) )); return { + shortCircuit: true, source: ret, format: 'module' }; diff --git a/test/fixtures/es-module-loaders/not-found-assert-loader.mjs b/test/fixtures/es-module-loaders/not-found-assert-loader.mjs index 5213ddedb34..ea4c7372429 100644 --- a/test/fixtures/es-module-loaders/not-found-assert-loader.mjs +++ b/test/fixtures/es-module-loaders/not-found-assert-loader.mjs @@ -1,15 +1,15 @@ -import assert from 'assert'; +import assert from 'node:assert'; // a loader that asserts that the defaultResolve will throw "not found" // (skipping the top-level main of course) let mainLoad = true; -export async function resolve(specifier, { parentURL, importAssertions }, defaultResolve) { +export async function resolve(specifier, { importAssertions }, next) { if (mainLoad) { mainLoad = false; - return defaultResolve(specifier, {parentURL, importAssertions}, defaultResolve); + return next(specifier); } try { - await defaultResolve(specifier, {parentURL, importAssertions}, defaultResolve); + await next(specifier); } catch (e) { assert.strictEqual(e.code, 'ERR_MODULE_NOT_FOUND'); diff --git a/test/fixtures/es-module-loaders/string-sources.mjs b/test/fixtures/es-module-loaders/string-sources.mjs index 384098d6d9e..396d17cb17a 100644 --- a/test/fixtures/es-module-loaders/string-sources.mjs +++ b/test/fixtures/es-module-loaders/string-sources.mjs @@ -22,17 +22,22 @@ const SOURCES = { } export function resolve(specifier, context, next) { if (specifier.startsWith('test:')) { - return { url: specifier, importAssertions: context.importAssertions }; + return { + importAssertions: context.importAssertions, + shortCircuit: true, + url: specifier, + }; } - return next(specifier, context); + return next(specifier); } export function load(href, context, next) { if (href.startsWith('test:')) { return { format: 'module', + shortCircuit: true, source: SOURCES[href], }; } - return next(href, context); + return next(href); } diff --git a/test/fixtures/es-module-loaders/thenable-load-hook-rejected-no-arguments.mjs b/test/fixtures/es-module-loaders/thenable-load-hook-rejected-no-arguments.mjs new file mode 100644 index 00000000000..5e008edecf7 --- /dev/null +++ b/test/fixtures/es-module-loaders/thenable-load-hook-rejected-no-arguments.mjs @@ -0,0 +1,10 @@ +export function load () { + let thenAlreadyAccessed = false; + return { + get then() { + if (thenAlreadyAccessed) throw new Error('must not call'); + thenAlreadyAccessed = true; + return (_, reject) => reject(); + } + }; +} diff --git a/test/fixtures/es-module-loaders/thenable-load-hook-rejected.mjs b/test/fixtures/es-module-loaders/thenable-load-hook-rejected.mjs new file mode 100644 index 00000000000..926f6d0bebd --- /dev/null +++ b/test/fixtures/es-module-loaders/thenable-load-hook-rejected.mjs @@ -0,0 +1,10 @@ +export function load () { + let thenAlreadyAccessed = false; + return { + get then() { + if (thenAlreadyAccessed) throw new Error('must not call'); + thenAlreadyAccessed = true; + return (_, reject) => reject(new Error('must crash the process')); + } + }; +} diff --git a/test/fixtures/es-module-loaders/thenable-load-hook.mjs b/test/fixtures/es-module-loaders/thenable-load-hook.mjs new file mode 100644 index 00000000000..661f6e21ac6 --- /dev/null +++ b/test/fixtures/es-module-loaders/thenable-load-hook.mjs @@ -0,0 +1,10 @@ +export function load(url, context, next) { + let thenAlreadyAccessed = false; + return { + get then() { + if (thenAlreadyAccessed) throw new Error('must not call'); + thenAlreadyAccessed = true; + return (resolve) => resolve(next(url, context)); + } + }; +} diff --git a/test/fixtures/es-module-specifiers/index.mjs b/test/fixtures/es-module-specifiers/index.mjs index 2be7048513f..8c361af157b 100644 --- a/test/fixtures/es-module-specifiers/index.mjs +++ b/test/fixtures/es-module-specifiers/index.mjs @@ -1,10 +1,11 @@ import explicit from 'explicit-main'; import implicit from 'implicit-main'; import implicitModule from 'implicit-main-type-module'; +import noMain from 'no-main-field'; function getImplicitCommonjs () { return import('implicit-main-type-commonjs'); } -export {explicit, implicit, implicitModule, getImplicitCommonjs}; +export {explicit, implicit, implicitModule, getImplicitCommonjs, noMain}; export default 'success'; diff --git a/test/fixtures/es-module-specifiers/node_modules/no-main-field/index.js b/test/fixtures/es-module-specifiers/node_modules/no-main-field/index.js new file mode 100644 index 00000000000..528a6ff2acb --- /dev/null +++ b/test/fixtures/es-module-specifiers/node_modules/no-main-field/index.js @@ -0,0 +1,2 @@ +'use strict'; +module.exports = 'no main field'; diff --git a/test/fixtures/es-module-specifiers/node_modules/no-main-field/package.json b/test/fixtures/es-module-specifiers/node_modules/no-main-field/package.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/test/fixtures/es-module-specifiers/node_modules/no-main-field/package.json @@ -0,0 +1 @@ +{} diff --git a/test/fixtures/es-modules/runmain.mjs b/test/fixtures/es-modules/runmain.mjs new file mode 100644 index 00000000000..5ceb86b66c7 --- /dev/null +++ b/test/fixtures/es-modules/runmain.mjs @@ -0,0 +1,7 @@ +import { runMain } from 'node:module'; + +try { await import.meta.resolve('doesnt-matter.mjs') } catch {} + +runMain(); + +try { await import.meta.resolve('doesnt-matter.mjs') } catch {} diff --git a/test/fixtures/gc.js b/test/fixtures/gc.js new file mode 100644 index 00000000000..1e965f336e4 --- /dev/null +++ b/test/fixtures/gc.js @@ -0,0 +1,9 @@ +let arr = new Array(300_000).fill('a'); + +for (let index = 0; index < arr.length; index++) { + arr[index] = Math.random(); +} + +arr = []; +// .gc() is called to generate a Mark-sweep event +global.gc(); diff --git a/test/fixtures/openssl_fips_disabled.cnf b/test/fixtures/openssl_fips_disabled.cnf index 8668370fac5..253c6906e3f 100644 --- a/test/fixtures/openssl_fips_disabled.cnf +++ b/test/fixtures/openssl_fips_disabled.cnf @@ -1,6 +1,6 @@ # Skeleton openssl.cnf for testing with FIPS -openssl_conf = openssl_conf_section +nodejs_conf = openssl_conf_section authorityKeyIdentifier=keyid:always,issuer:always [openssl_conf_section] diff --git a/test/fixtures/openssl_fips_enabled.cnf b/test/fixtures/openssl_fips_enabled.cnf index 9c1a90f5087..79733c657a9 100644 --- a/test/fixtures/openssl_fips_enabled.cnf +++ b/test/fixtures/openssl_fips_enabled.cnf @@ -1,6 +1,6 @@ # Skeleton openssl.cnf for testing with FIPS -openssl_conf = openssl_conf_section +nodejs_conf = openssl_conf_section authorityKeyIdentifier=keyid:always,issuer:always [openssl_conf_section] diff --git a/test/fixtures/package-main-enoent/test.js b/test/fixtures/package-main-enoent/test.js index d698085e5dd..5d75076b6af 100644 --- a/test/fixtures/package-main-enoent/test.js +++ b/test/fixtures/package-main-enoent/test.js @@ -3,6 +3,6 @@ // The path in "main" in "package.json" does not exist here, but it does in // the copy in node_modules. This is being tested because bluebird tests depend // on this behavior and it was accidentally broken by a seemingly unrelated -// commit on master. +// commit on the main branch. require('package-main-enoent'); diff --git a/test/fixtures/report-oom.js b/test/fixtures/report-oom.js new file mode 100644 index 00000000000..1677dc239eb --- /dev/null +++ b/test/fixtures/report-oom.js @@ -0,0 +1,13 @@ +'use strict'; + +const list = []; +while (true) { + const record = new MyRecord(); + list.push(record); +} + +function MyRecord() { + this.name = 'foo'; + this.id = 128; + this.account = 98454324; +} diff --git a/test/fixtures/snapshot/v8-startup-snapshot-api.js b/test/fixtures/snapshot/v8-startup-snapshot-api.js new file mode 100644 index 00000000000..f41f519755f --- /dev/null +++ b/test/fixtures/snapshot/v8-startup-snapshot-api.js @@ -0,0 +1,32 @@ +'use strict'; + +const fs = require('fs'); +const zlib = require('zlib'); +const path = require('path'); +const assert = require('assert'); + +const { + isBuildingSnapshot, + addSerializeCallback, + addDeserializeCallback, + setDeserializeMainFunction +} = require('v8').startupSnapshot; + +const filePath = path.resolve(__dirname, '../x1024.txt'); +const storage = {}; + +assert(isBuildingSnapshot()); + +addSerializeCallback(({ filePath }) => { + console.error('serializing', filePath); + storage[filePath] = zlib.gzipSync(fs.readFileSync(filePath)); +}, { filePath }); + +addDeserializeCallback(({ filePath }) => { + console.error('deserializing', filePath); + storage[filePath] = zlib.gunzipSync(storage[filePath]); +}, { filePath }); + +setDeserializeMainFunction(({ filePath }) => { + console.log(storage[filePath].toString()); +}, { filePath }); diff --git a/test/fixtures/source-map/throw-async.mjs b/test/fixtures/source-map/throw-async.mjs new file mode 100644 index 00000000000..a44412ef3ec --- /dev/null +++ b/test/fixtures/source-map/throw-async.mjs @@ -0,0 +1,11 @@ +const message = 'Message ' + Math.random(); +export async function Throw() { + throw new Error(message); +} +await Throw(); +// To recreate: +// +// npx tsc --module esnext --target es2017 --outDir test/fixtures/source-map --sourceMap test/fixtures/source-map/throw-async.ts +// + rename js to mjs +// + rename js to mjs in source map comment in mjs file +//# sourceMappingURL=throw-async.mjs.map \ No newline at end of file diff --git a/test/fixtures/source-map/throw-async.mjs.map b/test/fixtures/source-map/throw-async.mjs.map new file mode 100644 index 00000000000..33d1eaed6dd --- /dev/null +++ b/test/fixtures/source-map/throw-async.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"throw-async.mjs","sourceRoot":"","sources":["throw-async.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,KAAK,EAAE,CAAC;AAEd,eAAe;AACf,EAAE;AACF,gIAAgI;AAChI,qBAAqB;AACrB,uDAAuD"} \ No newline at end of file diff --git a/test/fixtures/source-map/throw-async.ts b/test/fixtures/source-map/throw-async.ts new file mode 100644 index 00000000000..080b07afa58 --- /dev/null +++ b/test/fixtures/source-map/throw-async.ts @@ -0,0 +1,13 @@ +const message = 'Message ' + Math.random(); + +export async function Throw() { + throw new Error(message) +} + +await Throw(); + +// To recreate: +// +// npx tsc --module esnext --target es2017 --outDir test/fixtures/source-map --sourceMap test/fixtures/source-map/throw-async.ts +// + rename js to mjs +// + rename js to mjs in source map comment in mjs file \ No newline at end of file diff --git a/test/fixtures/test-runner/index.js b/test/fixtures/test-runner/index.js new file mode 100644 index 00000000000..fcf4b4d8eaa --- /dev/null +++ b/test/fixtures/test-runner/index.js @@ -0,0 +1,2 @@ +'use strict'; +throw new Error('thrown from index.js'); diff --git a/test/fixtures/test-runner/index.test.js b/test/fixtures/test-runner/index.test.js new file mode 100644 index 00000000000..2a722c504b9 --- /dev/null +++ b/test/fixtures/test-runner/index.test.js @@ -0,0 +1,4 @@ +'use strict'; +const test = require('node:test'); + +test('this should pass'); diff --git a/test/fixtures/test-runner/never_ending_async.js b/test/fixtures/test-runner/never_ending_async.js new file mode 100644 index 00000000000..0f26ea9291f --- /dev/null +++ b/test/fixtures/test-runner/never_ending_async.js @@ -0,0 +1,6 @@ +const test = require('node:test'); +const { setTimeout } = require('timers/promises'); + +// We are using a very large timeout value to ensure that the parent process +// will have time to send a SIGINT signal to cancel the test. +test('never ending test', () => setTimeout(100_000_000)); diff --git a/test/fixtures/test-runner/never_ending_sync.js b/test/fixtures/test-runner/never_ending_sync.js new file mode 100644 index 00000000000..efc78757b18 --- /dev/null +++ b/test/fixtures/test-runner/never_ending_sync.js @@ -0,0 +1,5 @@ +const test = require('node:test'); + +test('never ending test', () => { + while (true); +}); diff --git a/test/fixtures/test-runner/node_modules/test-nm.js b/test/fixtures/test-runner/node_modules/test-nm.js new file mode 100644 index 00000000000..30024eab1f1 --- /dev/null +++ b/test/fixtures/test-runner/node_modules/test-nm.js @@ -0,0 +1,2 @@ +'use strict'; +throw new Error('thrown from node_modules'); diff --git a/test/fixtures/test-runner/protoMutation.js b/test/fixtures/test-runner/protoMutation.js new file mode 100644 index 00000000000..20071b9ecf7 --- /dev/null +++ b/test/fixtures/test-runner/protoMutation.js @@ -0,0 +1,3 @@ +'use strict'; + +Object.prototype.skip = true; diff --git a/test/fixtures/test-runner/random.test.mjs b/test/fixtures/test-runner/random.test.mjs new file mode 100644 index 00000000000..a87a671d006 --- /dev/null +++ b/test/fixtures/test-runner/random.test.mjs @@ -0,0 +1,5 @@ +import test from 'node:test'; + +test('this should fail', () => { + throw new Error('this is a failing test'); +}); diff --git a/test/fixtures/test-runner/run_inspect.js b/test/fixtures/test-runner/run_inspect.js new file mode 100644 index 00000000000..1586b6aaccf --- /dev/null +++ b/test/fixtures/test-runner/run_inspect.js @@ -0,0 +1,40 @@ +'use strict'; + +const common = require('../../common'); +const fixtures = require('../../common/fixtures'); +const { run } = require('node:test'); +const assert = require('node:assert'); + +const badPortError = { name: 'RangeError', code: 'ERR_SOCKET_BAD_PORT' }; +let inspectPort = 'inspectPort' in process.env ? Number(process.env.inspectPort) : undefined; +let expectedError; + +if (process.env.inspectPort === 'addTwo') { + inspectPort = common.mustCall(() => { return process.debugPort += 2; }); +} else if (process.env.inspectPort === 'string') { + inspectPort = 'string'; + expectedError = badPortError; +} else if (process.env.inspectPort === 'null') { + inspectPort = null; +} else if (process.env.inspectPort === 'bignumber') { + inspectPort = 1293812; + expectedError = badPortError; +} else if (process.env.inspectPort === 'negativenumber') { + inspectPort = -9776; + expectedError = badPortError; +} else if (process.env.inspectPort === 'bignumberfunc') { + inspectPort = common.mustCall(() => 123121); + expectedError = badPortError; +} else if (process.env.inspectPort === 'strfunc') { + inspectPort = common.mustCall(() => 'invalidPort'); + expectedError = badPortError; +} + +const stream = run({ files: [fixtures.path('test-runner/run_inspect_assert.js')], inspectPort }); +if (expectedError) { + stream.on('test:fail', common.mustCall(({ error }) => { + assert.deepStrictEqual({ name: error.cause.name, code: error.cause.code }, expectedError); + })); +} else { + stream.on('test:fail', common.mustNotCall()); +} diff --git a/test/fixtures/test-runner/run_inspect_assert.js b/test/fixtures/test-runner/run_inspect_assert.js new file mode 100644 index 00000000000..daea9b3b665 --- /dev/null +++ b/test/fixtures/test-runner/run_inspect_assert.js @@ -0,0 +1,19 @@ +'use strict'; + +const assert = require('node:assert'); + +const { expectedPort, expectedInitialPort, expectedHost } = process.env; +const debugOptions = + require('internal/options').getOptionValue('--inspect-port'); + +if ('expectedPort' in process.env) { + assert.strictEqual(process.debugPort, +expectedPort); +} + +if ('expectedInitialPort' in process.env) { + assert.strictEqual(debugOptions.port, +expectedInitialPort); +} + +if ('expectedHost' in process.env) { + assert.strictEqual(debugOptions.host, expectedHost); +} diff --git a/deps/openssl/openssl/test/ssl-tests/16-certstatus.conf b/test/fixtures/test-runner/subdir/subdir_test.js similarity index 100% rename from deps/openssl/openssl/test/ssl-tests/16-certstatus.conf rename to test/fixtures/test-runner/subdir/subdir_test.js diff --git a/test/fixtures/test-runner/test/random.cjs b/test/fixtures/test-runner/test/random.cjs new file mode 100644 index 00000000000..2a722c504b9 --- /dev/null +++ b/test/fixtures/test-runner/test/random.cjs @@ -0,0 +1,4 @@ +'use strict'; +const test = require('node:test'); + +test('this should pass'); diff --git a/test/fixtures/tz-version.txt b/test/fixtures/tz-version.txt new file mode 100644 index 00000000000..5c8fbb478a2 --- /dev/null +++ b/test/fixtures/tz-version.txt @@ -0,0 +1 @@ +2022f diff --git a/test/fixtures/watch-mode/dependant.js b/test/fixtures/watch-mode/dependant.js new file mode 100644 index 00000000000..25a0ec095d7 --- /dev/null +++ b/test/fixtures/watch-mode/dependant.js @@ -0,0 +1,2 @@ +const dependency = require('./dependency'); +console.log(dependency); diff --git a/test/fixtures/watch-mode/dependant.mjs b/test/fixtures/watch-mode/dependant.mjs new file mode 100644 index 00000000000..dff99bb2714 --- /dev/null +++ b/test/fixtures/watch-mode/dependant.mjs @@ -0,0 +1,2 @@ +import dependency from './dependency.mjs'; +console.log(dependency); diff --git a/test/fixtures/watch-mode/dependency.js b/test/fixtures/watch-mode/dependency.js new file mode 100644 index 00000000000..f053ebf7976 --- /dev/null +++ b/test/fixtures/watch-mode/dependency.js @@ -0,0 +1 @@ +module.exports = {}; diff --git a/test/fixtures/watch-mode/dependency.mjs b/test/fixtures/watch-mode/dependency.mjs new file mode 100644 index 00000000000..ff8b4c56321 --- /dev/null +++ b/test/fixtures/watch-mode/dependency.mjs @@ -0,0 +1 @@ +export default {}; diff --git a/test/fixtures/watch-mode/event_loop_blocked.js b/test/fixtures/watch-mode/event_loop_blocked.js new file mode 100644 index 00000000000..e74b7fd3893 --- /dev/null +++ b/test/fixtures/watch-mode/event_loop_blocked.js @@ -0,0 +1,4 @@ +console.log('running'); +Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0); +console.log('don\'t show me'); + diff --git a/test/fixtures/watch-mode/failing.js b/test/fixtures/watch-mode/failing.js new file mode 100644 index 00000000000..d1e87944d9f --- /dev/null +++ b/test/fixtures/watch-mode/failing.js @@ -0,0 +1 @@ +throw new Error('fails'); diff --git a/test/fixtures/watch-mode/inspect.js b/test/fixtures/watch-mode/inspect.js new file mode 100644 index 00000000000..f836b77e8a8 --- /dev/null +++ b/test/fixtures/watch-mode/inspect.js @@ -0,0 +1,2 @@ +console.log('safe to debug now'); +setInterval(() => {}, 1000); diff --git a/test/fixtures/watch-mode/inspect_with_signal.js b/test/fixtures/watch-mode/inspect_with_signal.js new file mode 100644 index 00000000000..6abf3ab2b58 --- /dev/null +++ b/test/fixtures/watch-mode/inspect_with_signal.js @@ -0,0 +1,2 @@ +console.log('pid is', process.pid); +setInterval(() => {}, 1000); diff --git a/test/fixtures/watch-mode/ipc.js b/test/fixtures/watch-mode/ipc.js new file mode 100644 index 00000000000..31e1bd0e5c5 --- /dev/null +++ b/test/fixtures/watch-mode/ipc.js @@ -0,0 +1,12 @@ +const path = require('node:path'); +const url = require('node:url'); +const os = require('node:os'); +const fs = require('node:fs'); + +const tmpfile = path.join(os.tmpdir(), 'file'); +fs.writeFileSync(tmpfile, ''); + +process.send({ 'watch:require': path.resolve(__filename) }); +process.send({ 'watch:import': url.pathToFileURL(path.resolve(__filename)).toString() }); +process.send({ 'watch:import': url.pathToFileURL(tmpfile).toString() }); +process.send({ 'watch:import': new URL('http://invalid.com').toString() }); diff --git a/test/fixtures/watch-mode/parse_args.js b/test/fixtures/watch-mode/parse_args.js new file mode 100644 index 00000000000..06c7227cee5 --- /dev/null +++ b/test/fixtures/watch-mode/parse_args.js @@ -0,0 +1,4 @@ +const { parseArgs } = require('node:util'); + +const { values } = parseArgs({ options: { random: { type: 'string' } } }); +console.log(values.random); diff --git a/test/fixtures/watch-mode/process_exit.js b/test/fixtures/watch-mode/process_exit.js new file mode 100644 index 00000000000..cbe6cdd84cc --- /dev/null +++ b/test/fixtures/watch-mode/process_exit.js @@ -0,0 +1 @@ +setImmediate(() => process.exit(0)); diff --git a/test/fixtures/watch-mode/subdir/file.js b/test/fixtures/watch-mode/subdir/file.js new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/test/fixtures/watch-mode/subdir/file.js @@ -0,0 +1 @@ + diff --git a/test/fixtures/workload/grow-and-set-near-heap-limit.js b/test/fixtures/workload/grow-and-set-near-heap-limit.js new file mode 100644 index 00000000000..62d2c1ffdc5 --- /dev/null +++ b/test/fixtures/workload/grow-and-set-near-heap-limit.js @@ -0,0 +1,9 @@ +'use strict'; +const path = require('path'); +const v8 = require('v8'); + +v8.setHeapSnapshotNearHeapLimit(+process.env.limit); +if (process.env.limit2) { + v8.setHeapSnapshotNearHeapLimit(+process.env.limit2); +} +require(path.resolve(__dirname, 'grow.js')); diff --git a/test/fixtures/workload/grow-worker-and-set-near-heap-limit.js b/test/fixtures/workload/grow-worker-and-set-near-heap-limit.js new file mode 100644 index 00000000000..598088bcf90 --- /dev/null +++ b/test/fixtures/workload/grow-worker-and-set-near-heap-limit.js @@ -0,0 +1,15 @@ +'use strict'; +const path = require('path'); +const { Worker } = require('worker_threads'); +const max_snapshots = parseInt(process.env.TEST_SNAPSHOTS) || 1; +new Worker(path.join(__dirname, 'grow-and-set-near-heap-limit.js'), { + env: { + ...process.env, + limit: max_snapshots, + }, + resourceLimits: { + maxOldGenerationSizeMb: + parseInt(process.env.TEST_OLD_SPACE_SIZE) || 20 + } +}); + diff --git a/test/fixtures/wpt/README.md b/test/fixtures/wpt/README.md index 7c795981d79..aeda102bd37 100644 --- a/test/fixtures/wpt/README.md +++ b/test/fixtures/wpt/README.md @@ -11,21 +11,23 @@ See [test/wpt](../../wpt/README.md) for information on how these tests are run. Last update: - common: https://github.com/web-platform-tests/wpt/tree/03c5072aff/common -- console: https://github.com/web-platform-tests/wpt/tree/3b1f72e99a/console +- console: https://github.com/web-platform-tests/wpt/tree/767ae35464/console - dom/abort: https://github.com/web-platform-tests/wpt/tree/c49cafb491/dom/abort -- encoding: https://github.com/web-platform-tests/wpt/tree/35f70910d3/encoding +- dom/events: https://github.com/web-platform-tests/wpt/tree/f8821adb28/dom/events +- encoding: https://github.com/web-platform-tests/wpt/tree/c1b24fce6e/encoding - FileAPI: https://github.com/web-platform-tests/wpt/tree/3b279420d4/FileAPI -- hr-time: https://github.com/web-platform-tests/wpt/tree/9910784394/hr-time +- hr-time: https://github.com/web-platform-tests/wpt/tree/34cafd797e/hr-time - html/webappapis/atob: https://github.com/web-platform-tests/wpt/tree/f267e1dca6/html/webappapis/atob - html/webappapis/microtask-queuing: https://github.com/web-platform-tests/wpt/tree/2c5c3c4c27/html/webappapis/microtask-queuing - html/webappapis/timers: https://github.com/web-platform-tests/wpt/tree/5873f2d8f1/html/webappapis/timers - interfaces: https://github.com/web-platform-tests/wpt/tree/fc086c82d5/interfaces - performance-timeline: https://github.com/web-platform-tests/wpt/tree/17ebc3aea0/performance-timeline -- resources: https://github.com/web-platform-tests/wpt/tree/fbee645164/resources +- resources: https://github.com/web-platform-tests/wpt/tree/c5b428f15a/resources - streams: https://github.com/web-platform-tests/wpt/tree/8f60d94439/streams -- url: https://github.com/web-platform-tests/wpt/tree/77d54aa9e0/url +- url: https://github.com/web-platform-tests/wpt/tree/0e5b126cd0/url - user-timing: https://github.com/web-platform-tests/wpt/tree/df24fb604e/user-timing -- WebCryptoAPI: https://github.com/web-platform-tests/wpt/tree/cdd0f03df4/WebCryptoAPI +- WebCryptoAPI: https://github.com/web-platform-tests/wpt/tree/edca84af42/WebCryptoAPI +- webidl/ecmascript-binding/es-exceptions: https://github.com/web-platform-tests/wpt/tree/a370aad338/webidl/ecmascript-binding/es-exceptions [Web Platform Tests]: https://github.com/web-platform-tests/wpt [`git node wpt`]: https://github.com/nodejs/node-core-utils/blob/main/docs/git-node.md#git-node-wpt diff --git a/test/fixtures/wpt/WebCryptoAPI/algorithm-discards-context.https.window.js b/test/fixtures/wpt/WebCryptoAPI/algorithm-discards-context.https.window.js new file mode 100644 index 00000000000..e648bc2f230 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/algorithm-discards-context.https.window.js @@ -0,0 +1,213 @@ +// META: title=WebCryptoAPI: Properties discard the context in algorithm normalization + +let nextTest = 0; +let tests = {}; +function closeChild(testId) { + if (tests[testId]) { + let {child, t} = tests[testId]; + delete tests[testId]; + document.body.removeChild(child); + t.done(); + } +} + +function runInChild(t, childScript) { + let testId = nextTest++; + const preamble = ` +let testId = ${testId}; +function closeChildOnAccess(obj, key) { + const oldValue = obj[key]; + Object.defineProperty(obj, key, {get: () => { + top.closeChild(testId); + return oldValue; + }}); +} +`; + childScript = preamble + childScript; + + let child = document.createElement("iframe"); + tests[testId] = {t, child}; + document.body.appendChild(child); + let script = document.createElement("script"); + script.textContent = childScript; + child.contentDocument.body.appendChild(script); +} + +async_test((t) => { + const childScript = ` +let algorithm = {name: "AES-GCM", length: 128}; +closeChildOnAccess(algorithm, "name"); +crypto.subtle.generateKey(algorithm, true, ["encrypt", "decrypt"]);`; + runInChild(t, childScript); +}, "Context is discarded in generateKey"); + +async_test((t) => { + const childScript = ` +let algorithm = {name: "AES-GCM"}; +closeChildOnAccess(algorithm, "name"); +crypto.subtle.importKey("raw", new Uint8Array(16), algorithm, true, + ["encrypt", "decrypt"]);`; + runInChild(t, childScript); +}, "Context is discarded in importKey"); + +async_test((t) => { + const childScript = ` +(async () => { + let key = await crypto.subtle.generateKey( + {name: "AES-GCM", length: 128}, true, ["encrypt", "decrypt"]); + let algorithm = {name: "AES-GCM", iv: new Uint8Array(12)}; + closeChildOnAccess(algorithm, "name"); + crypto.subtle.encrypt(algorithm, key, new Uint8Array()); +})();`; + runInChild(t, childScript); +}, "Context is discarded in encrypt"); + +async_test((t) => { + const childScript = ` +(async () => { + let key = await crypto.subtle.generateKey( + {name: "AES-GCM", length: 128}, true, ["encrypt", "decrypt"]); + let algorithm = {name: "AES-GCM", iv: new Uint8Array(12)}; + let encrypted = await crypto.subtle.encrypt(algorithm, key, new Uint8Array()); + closeChildOnAccess(algorithm, "name"); + crypto.subtle.decrypt(algorithm, key, encrypted); +})();`; + runInChild(t, childScript); +}, "Context is discarded in decrypt"); + +async_test((t) => { + const childScript = ` +let algorithm = {name: "SHA-256"}; +closeChildOnAccess(algorithm, "name"); +crypto.subtle.digest(algorithm, new Uint8Array());`; + runInChild(t, childScript); +}, "Context is discarded in digest"); + +async_test((t) => { + const childScript = ` +(async () => { + let key = await crypto.subtle.generateKey( + {name: "ECDSA", namedCurve: "P-256"}, true, ["sign", "verify"]); + let algorithm = {name: "ECDSA", hash: "SHA-256"}; + closeChildOnAccess(algorithm, "name"); + crypto.subtle.sign(algorithm, key.privateKey, new Uint8Array()); +})();`; + runInChild(t, childScript); +}, "Context is discarded in sign"); + +async_test((t) => { + const childScript = ` +(async () => { + let key = await crypto.subtle.generateKey( + {name: "ECDSA", namedCurve: "P-256"}, true, ["sign", "verify"]); + let algorithm = {name: "ECDSA", hash: "SHA-256"}; + let data = new Uint8Array(); + let signature = await crypto.subtle.sign(algorithm, key.privateKey, data); + closeChildOnAccess(algorithm, "name"); + crypto.subtle.verify(algorithm, key.publicKey, signature, data); +})();`; + runInChild(t, childScript); +}, "Context is discarded in verify"); + +async_test((t) => { + const childScript = ` +(async () => { + let key = await crypto.subtle.importKey( + "raw", new Uint8Array(16), "HKDF", false, ["deriveBits"]); + let algorithm = { + name: "HKDF", + hash: "SHA-256", + salt: new Uint8Array(), + info: new Uint8Array(), + }; + closeChildOnAccess(algorithm, "name"); + crypto.subtle.deriveBits(algorithm, key, 16); +})();`; + runInChild(t, childScript); +}, "Context is discarded in deriveBits"); + +async_test((t) => { + const childScript = ` +(async () => { + let key = await crypto.subtle.importKey( + "raw", new Uint8Array(16), "HKDF", false, ["deriveKey"]); + let algorithm = { + name: "HKDF", + hash: "SHA-256", + salt: new Uint8Array(), + info: new Uint8Array(), + }; + let derivedAlgorithm = {name: "AES-GCM", length: 128}; + closeChildOnAccess(algorithm, "name"); + crypto.subtle.deriveKey(algorithm, key, derivedAlgorithm, true, + ["encrypt", "decrypt"]); +})();`; + runInChild(t, childScript); +}, "Context is discarded in deriveKey"); + +async_test((t) => { + const childScript = ` +(async () => { + let key = await crypto.subtle.importKey( + "raw", new Uint8Array(16), "HKDF", false, ["deriveKey"]); + let algorithm = { + name: "HKDF", + hash: "SHA-256", + salt: new Uint8Array(), + info: new Uint8Array(), + }; + let derivedAlgorithm = {name: "AES-GCM", length: 128}; + closeChildOnAccess(derivedAlgorithm, "name"); + crypto.subtle.deriveKey(algorithm, key, derivedAlgorithm, true, + ["encrypt", "decrypt"]); +})();`; + runInChild(t, childScript); +}, "Context is discarded in deriveKey (2)"); + +async_test((t) => { + const childScript = ` +(async () => { + let wrapKey = await crypto.subtle.generateKey( + {name: "AES-GCM", length: 128}, true, ["wrapKey", "unwrapKey"]); + let key = await crypto.subtle.generateKey( + {name: "AES-GCM", length: 128}, true, ["encrypt", "decrypt"]); + let wrapAlgorithm = {name: "AES-GCM", iv: new Uint8Array(12)}; + closeChildOnAccess(wrapAlgorithm, "name"); + crypto.subtle.wrapKey("raw", key, wrapKey, wrapAlgorithm); +})();`; + runInChild(t, childScript); +}, "Context is discarded in wrapKey"); + +async_test((t) => { + const childScript = ` +(async () => { + let wrapKey = await crypto.subtle.generateKey( + {name: "AES-GCM", length: 128}, true, ["wrapKey", "unwrapKey"]); + let keyAlgorithm = {name: "AES-GCM", length: 128}; + let keyUsages = ["encrypt", "decrypt"]; + let key = await crypto.subtle.generateKey(keyAlgorithm, true, keyUsages); + let wrapAlgorithm = {name: "AES-GCM", iv: new Uint8Array(12)}; + let wrapped = await crypto.subtle.wrapKey("raw", key, wrapKey, wrapAlgorithm); + closeChildOnAccess(wrapAlgorithm, "name"); + crypto.subtle.unwrapKey( + "raw", wrapped, wrapKey, wrapAlgorithm, keyAlgorithm, true, keyUsages); +})();`; + runInChild(t, childScript); +}, "Context is discarded in unwrapKey"); + +async_test((t) => { + const childScript = ` +(async () => { + let wrapKey = await crypto.subtle.generateKey( + {name: "AES-GCM", length: 128}, true, ["wrapKey", "unwrapKey"]); + let keyAlgorithm = {name: "AES-GCM", length: 128}; + let keyUsages = ["encrypt", "decrypt"]; + let key = await crypto.subtle.generateKey(keyAlgorithm, true, keyUsages); + let wrapAlgorithm = {name: "AES-GCM", iv: new Uint8Array(12)}; + let wrapped = await crypto.subtle.wrapKey("raw", key, wrapKey, wrapAlgorithm); + closeChildOnAccess(keyAlgorithm, "name"); + crypto.subtle.unwrapKey( + "raw", wrapped, wrapKey, wrapAlgorithm, keyAlgorithm, true, keyUsages); +})();`; + runInChild(t, childScript); +}, "Context is discarded in unwrapKey (2)"); diff --git a/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.https.any.js b/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.https.any.js new file mode 100644 index 00000000000..afa7db845fa --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.https.any.js @@ -0,0 +1,9 @@ +// META: title=WebCryptoAPI: deriveBits() Using ECDH with CFRG Elliptic Curves +// META: script=cfrg_curves_bits.js + +// Define subtests from a `promise_test` to ensure the harness does not +// complete before the subtests are available. `explicit_done` cannot be used +// for this purpose because the global `done` function is automatically invoked +// by the WPT infrastructure in dedicated worker tests defined using the +// "multi-global" pattern. +promise_test(define_tests, 'setup - define tests'); diff --git a/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.js b/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.js new file mode 100644 index 00000000000..f467bc858cb --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.js @@ -0,0 +1,245 @@ + +function define_tests() { + // May want to test prefixed implementations. + var subtle = self.crypto.subtle; + + var pkcs8 = { + "X25519": new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255, 97]), + "X448": new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146, 158]) + }; + + var spki = { + "X25519": new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151, 6]), + "X448": new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206, 111]) + }; + + var sizes = { + "X25519": 32, + "X448": 56 + }; + + var derivations = { + "X25519": new Uint8Array([39, 104, 64, 157, 250, 185, 158, 194, 59, 140, 137, 185, 63, 245, 136, 2, 149, 247, 97, 118, 8, 143, 137, 228, 61, 254, 190, 126, 161, 149, 0, 8]), + "X448": new Uint8Array([240, 246, 197, 241, 127, 148, 244, 41, 30, 171, 113, 120, 134, 109, 55, 236, 137, 6, 221, 108, 81, 65, 67, 220, 133, 190, 124, 242, 141, 239, 243, 155, 114, 110, 15, 109, 207, 129, 14, 181, 148, 220, 169, 123, 72, 130, 189, 68, 196, 62, 167, 220, 103, 244, 154, 78]) + }; + + return importKeys(pkcs8, spki, sizes) + .then(function(results) { + publicKeys = results.publicKeys; + privateKeys = results.privateKeys; + noDeriveBitsKeys = results.noDeriveBitsKeys; + + Object.keys(sizes).forEach(function(algorithmName) { + // Basic success case + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName]) + .then(function(derivation) { + assert_true(equalBuffers(derivation, derivations[algorithmName]), "Derived correct bits"); + }, function(err) { + assert_unreached("deriveBits failed with error " + err.name + ": " + err.message); + }); + }, algorithmName + " good parameters"); + + // Case insensitivity check + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName.toLowerCase(), public: publicKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName]) + .then(function(derivation) { + assert_true(equalBuffers(derivation, derivations[algorithmName]), "Derived correct bits"); + }, function(err) { + assert_unreached("deriveBits failed with error " + err.name + ": " + err.message); + }); + }, algorithmName + " mixed case parameters"); + + // Null length + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, privateKeys[algorithmName], null) + .then(function(derivation) { + assert_true(equalBuffers(derivation, derivations[algorithmName]), "Derived correct bits"); + }, function(err) { + assert_unreached("deriveBits failed with error " + err.name + ": " + err.message); + }); + }, algorithmName + " with null length"); + + // Shorter than entire derivation per algorithm + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName] - 32) + .then(function(derivation) { + assert_true(equalBuffers(derivation, derivations[algorithmName], 8 * sizes[algorithmName] - 32), "Derived correct bits"); + }, function(err) { + assert_unreached("deriveBits failed with error " + err.name + ": " + err.message); + }); + }, algorithmName + " short result"); + + // Non-multiple of 8 + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName] - 11) + .then(function(derivation) { + assert_true(equalBuffers(derivation, derivations[algorithmName], 8 * sizes[algorithmName] - 11), "Derived correct bits"); + }, function(err) { + assert_unreached("deriveBits failed with error " + err.name + ": " + err.message); + }); + }, algorithmName + " non-multiple of 8 bits"); + + // Errors to test: + + // - missing public property TypeError + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName}, privateKeys[algorithmName], 8 * sizes[algorithmName]) + .then(function(derivation) { + assert_unreached("deriveBits succeeded but should have failed with TypeError"); + }, function(err) { + assert_equals(err.name, "TypeError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " missing public property"); + + // - Non CryptoKey public property TypeError + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName, public: {message: "Not a CryptoKey"}}, privateKeys[algorithmName], 8 * sizes[algorithmName]) + .then(function(derivation) { + assert_unreached("deriveBits succeeded but should have failed with TypeError"); + }, function(err) { + assert_equals(err.name, "TypeError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " public property of algorithm is not a CryptoKey"); + + // - wrong algorithm + promise_test(function(test) { + publicKey = publicKeys["X25519"]; + if (algorithmName === "X25519") { + publicKey = publicKeys["X448"]; + } + return subtle.deriveBits({name: algorithmName, public: publicKey}, privateKeys[algorithmName], 8 * sizes[algorithmName]) + .then(function(derivation) { + assert_unreached("deriveBits succeeded but should have failed with InvalidAccessError"); + }, function(err) { + assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " mismatched algorithms"); + + // - No deriveBits usage in baseKey InvalidAccessError + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, noDeriveBitsKeys[algorithmName], 8 * sizes[algorithmName]) + .then(function(derivation) { + assert_unreached("deriveBits succeeded but should have failed with InvalidAccessError"); + }, function(err) { + assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " no deriveBits usage for base key"); + + // - Use public key for baseKey InvalidAccessError + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, publicKeys[algorithmName], 8 * sizes[algorithmName]) + .then(function(derivation) { + assert_unreached("deriveBits succeeded but should have failed with InvalidAccessError"); + }, function(err) { + assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " base key is not a private key"); + + // - Use private key for public property InvalidAccessError + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName, public: privateKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName]) + .then(function(derivation) { + assert_unreached("deriveBits succeeded but should have failed with InvalidAccessError"); + }, function(err) { + assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " public property value is a private key"); + + // - Use secret key for public property InvalidAccessError + promise_test(function(test) { + return subtle.generateKey({name: "AES-CBC", length: 128}, true, ["encrypt", "decrypt"]) + .then(function(secretKey) { + subtle.deriveBits({name: algorithmName, public: secretKey}, privateKeys[algorithmName], 8 * sizes[algorithmName]) + .then(function(derivation) { + assert_unreached("deriveBits succeeded but should have failed with InvalidAccessError"); + }, function(err) { + assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }); + }, algorithmName + " public property value is a secret key"); + + // - Length greater than possible for particular curves OperationError + promise_test(function(test) { + return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName] + 8) + .then(function(derivation) { + assert_unreached("deriveBits succeeded but should have failed with OperationError"); + }, function(err) { + assert_equals(err.name, "OperationError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " asking for too many bits"); + }); + }); + + function importKeys(pkcs8, spki, sizes) { + var privateKeys = {}; + var publicKeys = {}; + var noDeriveBitsKeys = {}; + + var promises = []; + Object.keys(pkcs8).forEach(function(algorithmName) { + var operation = subtle.importKey("pkcs8", pkcs8[algorithmName], + {name: algorithmName}, + false, ["deriveBits", "deriveKey"]) + .then(function(key) { + privateKeys[algorithmName] = key; + }); + promises.push(operation); + }); + Object.keys(pkcs8).forEach(function(algorithmName) { + var operation = subtle.importKey("pkcs8", pkcs8[algorithmName], + {name: algorithmName}, + false, ["deriveKey"]) + .then(function(key) { + noDeriveBitsKeys[algorithmName] = key; + }); + promises.push(operation); + }); + Object.keys(spki).forEach(function(algorithmName) { + var operation = subtle.importKey("spki", spki[algorithmName], + {name: algorithmName}, + false, []) + .then(function(key) { + publicKeys[algorithmName] = key; + }); + promises.push(operation); + }); + + return Promise.all(promises) + .then(function(results) {return {privateKeys: privateKeys, publicKeys: publicKeys, noDeriveBitsKeys: noDeriveBitsKeys}}); + } + + // Compares two ArrayBuffer or ArrayBufferView objects. If bitCount is + // omitted, the two values must be the same length and have the same contents + // in every byte. If bitCount is included, only that leading number of bits + // have to match. + function equalBuffers(a, b, bitCount) { + var remainder; + + if (typeof bitCount === "undefined" && a.byteLength !== b.byteLength) { + return false; + } + + var aBytes = new Uint8Array(a); + var bBytes = new Uint8Array(b); + + var length = a.byteLength; + if (typeof bitCount !== "undefined") { + length = Math.floor(bitCount / 8); + } + + for (var i=0; i> (8 - remainder) === bBytes[length] >> (8 - remainder); + } + + return true; + } + +} diff --git a/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_keys.https.any.js b/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_keys.https.any.js new file mode 100644 index 00000000000..71fe87d9a87 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_keys.https.any.js @@ -0,0 +1,9 @@ +// META: title=WebCryptoAPI: deriveKey() Using ECDH with CFRG Elliptic Curves +// META: script=cfrg_curves_keys.js + +// Define subtests from a `promise_test` to ensure the harness does not +// complete before the subtests are available. `explicit_done` cannot be used +// for this purpose because the global `done` function is automatically invoked +// by the WPT infrastructure in dedicated worker tests defined using the +// "multi-global" pattern. +promise_test(define_tests, 'setup - define tests'); diff --git a/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_keys.js b/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_keys.js new file mode 100644 index 00000000000..7819ae0bf83 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_keys.js @@ -0,0 +1,213 @@ + +function define_tests() { + // May want to test prefixed implementations. + var subtle = self.crypto.subtle; + + var pkcs8 = { + "X25519": new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255, 97]), + "X448": new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146, 158]) + }; + + var spki = { + "X25519": new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151, 6]), + "X448": new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206, 111]) + }; + + var sizes = { + "X25519": 32, + "X448": 56 + }; + + var derivations = { + "X25519": new Uint8Array([39, 104, 64, 157, 250, 185, 158, 194, 59, 140, 137, 185, 63, 245, 136, 2, 149, 247, 97, 118, 8, 143, 137, 228, 61, 254, 190, 126, 161, 149, 0, 8]), + "X448": new Uint8Array([240, 246, 197, 241, 127, 148, 244, 41, 30, 171, 113, 120, 134, 109, 55, 236, 137, 6, 221, 108, 81, 65, 67, 220, 133, 190, 124, 242, 141, 239, 243, 155, 114, 110, 15, 109, 207, 129, 14, 181, 148, 220, 169, 123, 72, 130, 189, 68, 196, 62, 167, 220, 103, 244, 154, 78]) + }; + + return importKeys(pkcs8, spki, sizes) + .then(function(results) { + publicKeys = results.publicKeys; + privateKeys = results.privateKeys; + noDeriveKeyKeys = results.noDeriveKeyKeys; + + Object.keys(sizes).forEach(function(algorithmName) { + // Basic success case + promise_test(function(test) { + return subtle.deriveKey({name: algorithmName, public: publicKeys[algorithmName]}, privateKeys[algorithmName], {name: "HMAC", hash: "SHA-256", length: 256}, true, ["sign", "verify"]) + .then(function(key) {return crypto.subtle.exportKey("raw", key);}) + .then(function(exportedKey) { + assert_true(equalBuffers(exportedKey, derivations[algorithmName], 8 * exportedKey.length), "Derived correct key"); + }, function(err) { + assert_unreached("deriveKey failed with error " + err.name + ": " + err.message); + }); + }, algorithmName + " good parameters"); + + // Case insensitivity check + promise_test(function(test) { + return subtle.deriveKey({name: algorithmName.toLowerCase(), public: publicKeys[algorithmName]}, privateKeys[algorithmName], {name: "HMAC", hash: "SHA-256", length: 256}, true, ["sign", "verify"]) + .then(function(key) {return crypto.subtle.exportKey("raw", key);}) + .then(function(exportedKey) { + assert_true(equalBuffers(exportedKey, derivations[algorithmName], 8 * exportedKey.length), "Derived correct key"); + }, function(err) { + assert_unreached("deriveKey failed with error " + err.name + ": " + err.message); + }); + }, algorithmName + " mixed case parameters"); + // Errors to test: + + // - missing public property TypeError + promise_test(function(test) { + return subtle.deriveKey({name: algorithmName}, privateKeys[algorithmName], {name: "HMAC", hash: "SHA-256", length: 256}, true, ["sign", "verify"]) + .then(function(key) {return crypto.subtle.exportKey("raw", key);}) + .then(function(exportedKey) { + assert_unreached("deriveKey succeeded but should have failed with TypeError"); + }, function(err) { + assert_equals(err.name, "TypeError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " missing public property"); + + // - Non CryptoKey public property TypeError + promise_test(function(test) { + return subtle.deriveKey({name: algorithmName, public: {message: "Not a CryptoKey"}}, privateKeys[algorithmName], {name: "HMAC", hash: "SHA-256", length: 256}, true, ["sign", "verify"]) + .then(function(key) {return crypto.subtle.exportKey("raw", key);}) + .then(function(exportedKey) { + assert_unreached("deriveKey succeeded but should have failed with TypeError"); + }, function(err) { + assert_equals(err.name, "TypeError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " public property of algorithm is not a CryptoKey"); + + // - wrong algorithm + promise_test(function(test) { + publicKey = publicKeys["X25519"]; + if (algorithmName === "X25519") { + publicKey = publicKeys["X448"]; + } + return subtle.deriveKey({name: algorithmName, public: publicKey}, privateKeys[algorithmName], {name: "HMAC", hash: "SHA-256", length: 256}, true, ["sign", "verify"]) + .then(function(key) {return crypto.subtle.exportKey("raw", key);}) + .then(function(exportedKey) { + assert_unreached("deriveKey succeeded but should have failed with InvalidAccessError"); + }, function(err) { + assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " mismatched algorithms"); + + // - No deriveKey usage in baseKey InvalidAccessError + promise_test(function(test) { + return subtle.deriveKey({name: algorithmName, public: publicKeys[algorithmName]}, noDeriveKeyKeys[algorithmName], {name: "HMAC", hash: "SHA-256", length: 256}, true, ["sign", "verify"]) + .then(function(key) {return crypto.subtle.exportKey("raw", key);}) + .then(function(exportedKey) { + assert_unreached("deriveKey succeeded but should have failed with InvalidAccessError"); + }, function(err) { + assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " no deriveKey usage for base key"); + + // - Use public key for baseKey InvalidAccessError + promise_test(function(test) { + return subtle.deriveKey({name: algorithmName, public: publicKeys[algorithmName]}, publicKeys[algorithmName], {name: "HMAC", hash: "SHA-256", length: 256}, true, ["sign", "verify"]) + .then(function(key) {return crypto.subtle.exportKey("raw", key);}) + .then(function(exportedKey) { + assert_unreached("deriveKey succeeded but should have failed with InvalidAccessError"); + }, function(err) { + assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " base key is not a private key"); + + // - Use private key for public property InvalidAccessError + promise_test(function(test) { + return subtle.deriveKey({name: algorithmName, public: privateKeys[algorithmName]}, privateKeys[algorithmName], {name: "HMAC", hash: "SHA-256", length: 256}, true, ["sign", "verify"]) + .then(function(key) {return crypto.subtle.exportKey("raw", key);}) + .then(function(exportedKey) { + assert_unreached("deriveKey succeeded but should have failed with InvalidAccessError"); + }, function(err) { + assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, algorithmName + " public property value is a private key"); + + // - Use secret key for public property InvalidAccessError + promise_test(function(test) { + return subtle.generateKey({name: "HMAC", hash: "SHA-256", length: 256}, true, ["sign", "verify"]) + .then(function(secretKey) { + subtle.deriveKey({name: algorithmName, public: secretKey}, privateKeys[algorithmName], {name: "AES-CBC", length: 256}, true, ["sign", "verify"]) + .then(function(key) {return crypto.subtle.exportKey("raw", key);}) + .then(function(exportedKey) { + assert_unreached("deriveKey succeeded but should have failed with InvalidAccessError"); + }, function(err) { + assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }); + }, algorithmName + " public property value is a secret key"); + }); + }); + + function importKeys(pkcs8, spki, sizes) { + var privateKeys = {}; + var publicKeys = {}; + var noDeriveKeyKeys = {}; + + var promises = []; + Object.keys(pkcs8).forEach(function(algorithmName) { + var operation = subtle.importKey("pkcs8", pkcs8[algorithmName], + {name: algorithmName}, + false, ["deriveBits", "deriveKey"]) + .then(function(key) { + privateKeys[algorithmName] = key; + }); + promises.push(operation); + }); + Object.keys(pkcs8).forEach(function(algorithmName) { + var operation = subtle.importKey("pkcs8", pkcs8[algorithmName], + {name: algorithmName}, + false, ["deriveBits"]) + .then(function(key) { + noDeriveKeyKeys[algorithmName] = key; + }); + promises.push(operation); + }); + Object.keys(spki).forEach(function(algorithmName) { + var operation = subtle.importKey("spki", spki[algorithmName], + {name: algorithmName}, + false, []) + .then(function(key) { + publicKeys[algorithmName] = key; + }); + promises.push(operation); + }); + + return Promise.all(promises) + .then(function(results) {return {privateKeys: privateKeys, publicKeys: publicKeys, noDeriveKeyKeys: noDeriveKeyKeys}}); + } + + // Compares two ArrayBuffer or ArrayBufferView objects. If bitCount is + // omitted, the two values must be the same length and have the same contents + // in every byte. If bitCount is included, only that leading number of bits + // have to match. + function equalBuffers(a, b, bitCount) { + var remainder; + + if (typeof bitCount === "undefined" && a.byteLength !== b.byteLength) { + return false; + } + + var aBytes = new Uint8Array(a); + var bBytes = new Uint8Array(b); + + var length = a.byteLength; + if (typeof bitCount !== "undefined") { + length = Math.floor(bitCount / 8); + } + + for (var i=0; i> (8 - remainder) === bBytes[length] >> (8 - remainder); + } + + return true; + } + +} diff --git a/test/fixtures/wpt/WebCryptoAPI/generateKey/failures.js b/test/fixtures/wpt/WebCryptoAPI/generateKey/failures.js index 23fb280182a..c39e4d211cb 100644 --- a/test/fixtures/wpt/WebCryptoAPI/generateKey/failures.js +++ b/test/fixtures/wpt/WebCryptoAPI/generateKey/failures.js @@ -31,7 +31,11 @@ function run_test(algorithmNames) { {name: "RSA-PSS", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, {name: "RSA-OAEP", resultType: "CryptoKeyPair", usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: ["decrypt", "unwrapKey"]}, {name: "ECDSA", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, - {name: "ECDH", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]} + {name: "ECDH", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]}, + {name: "Ed25519", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, + {name: "Ed448", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, + {name: "X25519", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]}, + {name: "X448", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]}, ]; var testVectors = []; diff --git a/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_Ed25519.https.any.js b/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_Ed25519.https.any.js new file mode 100644 index 00000000000..8f18fb1efe0 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_Ed25519.https.any.js @@ -0,0 +1,5 @@ +// META: title=WebCryptoAPI: generateKey() for Failures +// META: timeout=long +// META: script=../util/helpers.js +// META: script=failures.js +run_test(["Ed25519"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_Ed448.https.any.js b/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_Ed448.https.any.js new file mode 100644 index 00000000000..b25dcd14909 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_Ed448.https.any.js @@ -0,0 +1,5 @@ +// META: title=WebCryptoAPI: generateKey() for Failures +// META: timeout=long +// META: script=../util/helpers.js +// META: script=failures.js +run_test(["Ed448"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_X25519.https.any.js b/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_X25519.https.any.js new file mode 100644 index 00000000000..2662d8697a9 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_X25519.https.any.js @@ -0,0 +1,5 @@ +// META: title=WebCryptoAPI: generateKey() for Failures +// META: timeout=long +// META: script=../util/helpers.js +// META: script=failures.js +run_test(["X25519"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_X448.https.any.js b/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_X448.https.any.js new file mode 100644 index 00000000000..455e260d1fe --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/generateKey/failures_X448.https.any.js @@ -0,0 +1,5 @@ +// META: title=WebCryptoAPI: generateKey() for Failures +// META: timeout=long +// META: script=../util/helpers.js +// META: script=failures.js +run_test(["X448"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/generateKey/successes.js b/test/fixtures/wpt/WebCryptoAPI/generateKey/successes.js index b99e44d66d4..4a047aa0609 100644 --- a/test/fixtures/wpt/WebCryptoAPI/generateKey/successes.js +++ b/test/fixtures/wpt/WebCryptoAPI/generateKey/successes.js @@ -26,7 +26,11 @@ function run_test(algorithmNames, slowTest) { {name: "RSA-PSS", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, {name: "RSA-OAEP", resultType: "CryptoKeyPair", usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: ["decrypt", "unwrapKey"]}, {name: "ECDSA", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, - {name: "ECDH", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]} + {name: "ECDH", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]}, + {name: "Ed25519", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, + {name: "Ed448", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, + {name: "X25519", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]}, + {name: "X448", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]}, ]; var testVectors = []; diff --git a/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_Ed25519.https.any.js b/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_Ed25519.https.any.js new file mode 100644 index 00000000000..6b3bc460f60 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_Ed25519.https.any.js @@ -0,0 +1,6 @@ +// META: title=WebCryptoAPI: generateKey() Successful Calls +// META: timeout=long +// META: script=../util/helpers.js +// META: script=/common/subset-tests.js +// META: script=successes.js +run_test(["Ed25519"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_Ed448.https.any.js b/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_Ed448.https.any.js new file mode 100644 index 00000000000..8e37f57b244 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_Ed448.https.any.js @@ -0,0 +1,6 @@ +// META: title=WebCryptoAPI: generateKey() Successful Calls +// META: timeout=long +// META: script=../util/helpers.js +// META: script=/common/subset-tests.js +// META: script=successes.js +run_test(["Ed448"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_X25519.https.any.js b/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_X25519.https.any.js new file mode 100644 index 00000000000..0e87cf50108 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_X25519.https.any.js @@ -0,0 +1,6 @@ +// META: title=WebCryptoAPI: generateKey() Successful Calls +// META: timeout=long +// META: script=../util/helpers.js +// META: script=/common/subset-tests.js +// META: script=successes.js +run_test(["X25519"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_X448.https.any.js b/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_X448.https.any.js new file mode 100644 index 00000000000..e7dbe32696d --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_X448.https.any.js @@ -0,0 +1,6 @@ +// META: title=WebCryptoAPI: generateKey() Successful Calls +// META: timeout=long +// META: script=../util/helpers.js +// META: script=/common/subset-tests.js +// META: script=successes.js +run_test(["X448"]); diff --git a/test/fixtures/wpt/WebCryptoAPI/getRandomValues.any.js b/test/fixtures/wpt/WebCryptoAPI/getRandomValues.any.js index a6762353798..1a3370ea13d 100644 --- a/test/fixtures/wpt/WebCryptoAPI/getRandomValues.any.js +++ b/test/fixtures/wpt/WebCryptoAPI/getRandomValues.any.js @@ -8,12 +8,24 @@ test(function() { }, "Float64Array") assert_throws_dom("TypeMismatchError", function() { - self.crypto.getRandomValues(new Float32Array(65537)) + const len = 65536 / Float32Array.BYTES_PER_ELEMENT + 1; + self.crypto.getRandomValues(new Float32Array(len)); }, "Float32Array (too long)") assert_throws_dom("TypeMismatchError", function() { - self.crypto.getRandomValues(new Float64Array(65537)) + const len = 65536 / Float64Array.BYTES_PER_ELEMENT + 1; + self.crypto.getRandomValues(new Float64Array(len)) }, "Float64Array (too long)") -}, "Float arrays") +}, "Float arrays"); + +test(function() { + assert_throws_dom("TypeMismatchError", function() { + self.crypto.getRandomValues(new DataView(new ArrayBuffer(6))) + }, "DataView") + + assert_throws_dom("TypeMismatchError", function() { + self.crypto.getRandomValues(new DataView(new ArrayBuffer(65536 + 1))) + }, "DataView (too long)") +}, "DataView"); const arrays = [ 'Int8Array', diff --git a/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey.https.any.js b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey.https.any.js new file mode 100644 index 00000000000..836d6eaa305 --- /dev/null +++ b/test/fixtures/wpt/WebCryptoAPI/import_export/okp_importKey.https.any.js @@ -0,0 +1,282 @@ +// META: title=WebCryptoAPI: importKey() for OKP keys +// META: timeout=long + +// Test importKey and exportKey for OKP algorithms. Only "happy paths" are +// currently tested - those where the operation should succeed. + + var subtle = crypto.subtle; + + var keyData = { + "Ed25519": { + spki: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 112, 3, 33, 0, 216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61, 204]), + pkcs8: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32, 243, 200, 244, 196, 141, 248, 120, 20, 110, 140, 211, 191, 109, 244, 229, 14, 56, 155, 167, 7, 78, 21, 194, 53, 45, 205, 93, 48, 141, 76, 168, 31]), + jwk: { + crv: "Ed25519", + d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8", + x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw", + kty: "OKP" + } + }, + + "Ed448": { + spki: new Uint8Array([48, 67, 48, 5, 6, 3, 43, 101, 113, 3, 58, 0, 171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90, 128]), + pkcs8: new Uint8Array([48, 71, 2, 1, 0, 48, 5, 6, 3, 43, 101, 113, 4, 59, 4, 57, 14, 255, 3, 69, 140, 40, 224, 23, 156, 82, 29, 227, 18, 201, 105, 183, 131, 67, 72, 236, 171, 153, 26, 96, 227, 178, 233, 167, 158, 76, 217, 228, 128, 239, 41, 23, 18, 210, 200, 61, 4, 114, 114, 213, 201, 244, 40, 102, 79, 105, 109, 38, 112, 69, 143, 29, 46]), + jwk: { + crv: "Ed448", + d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", + x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", + kty: "OKP" + } + }, + + "X25519": { + spki: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151, 6]), + pkcs8: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255, 97]), + jwk: { + crv: "X25519", + d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E", + x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", + kty: "OKP" + } + }, + + "X448": { + spki: new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206, 111]), + pkcs8: new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146, 158]), + jwk: { + crv: "X448", + d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4", + x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", + kty: "OKP" + } + }, + + }; + + // combinations to test + var testVectors = [ + {name: "Ed25519", privateUsages: ["sign"], publicUsages: ["verify"]}, + {name: "Ed448", privateUsages: ["sign"], publicUsages: ["verify"]}, + {name: "X25519", privateUsages: ["deriveKey", "deriveBits"], publicUsages: []}, + {name: "X448", privateUsages: ["deriveKey", "deriveBits"], publicUsages: []}, + ]; + + // TESTS ARE HERE: + // Test every test vector, along with all available key data + testVectors.forEach(function(vector) { + [true, false].forEach(function(extractable) { + + // Test public keys first + [[]].forEach(function(usages) { // Only valid usages argument is empty array + ['spki', 'jwk'].forEach(function(format) { + var algorithm = {name: vector.name}; + var data = keyData[vector.name]; + if (format === "jwk") { // Not all fields used for public keys + data = {jwk: {kty: keyData[vector.name].jwk.kty, crv: keyData[vector.name].jwk.crv, x: keyData[vector.name].jwk.x}}; + } + + testFormat(format, algorithm, data, vector.name, usages, extractable); + }); + + }); + + // Next, test private keys + allValidUsages(vector.privateUsages, []).forEach(function(usages) { + ['pkcs8', 'jwk'].forEach(function(format) { + var algorithm = {name: vector.name}; + var data = keyData[vector.name]; + + testFormat(format, algorithm, data, vector.name, usages, extractable); + }); + }); + }); + }); + + + // Test importKey with a given key format and other parameters. If + // extrable is true, export the key and verify that it matches the input. + function testFormat(format, algorithm, keyData, keySize, usages, extractable) { + promise_test(function(test) { + return subtle.importKey(format, keyData[format], algorithm, extractable, usages). + then(function(key) { + assert_equals(key.constructor, CryptoKey, "Imported a CryptoKey object"); + if (!extractable) { + return; + } + + return subtle.exportKey(format, key). + then(function(result) { + if (format !== "jwk") { + assert_true(equalBuffers(keyData[format], result), "Round trip works"); + } else { + assert_true(equalJwk(keyData[format], result), "Round trip works"); + } + }, function(err) { + assert_unreached("Threw an unexpected error: " + err.toString()); + }); + }, function(err) { + assert_unreached("Threw an unexpected error: " + err.toString()); + }); + }, "Good parameters: " + keySize.toString() + " bits " + parameterString(format, keyData[format], algorithm, extractable, usages)); + } + + + + // Helper methods follow: + + // Are two array buffers the same? + function equalBuffers(a, b) { + if (a.byteLength !== b.byteLength) { + return false; + } + + var aBytes = new Uint8Array(a); + var bBytes = new Uint8Array(b); + + for (var i=0; i 0) { + allNonemptySubsetsOf(remainingElements).forEach(function(combination) { + combination.push(firstElement); + results.push(combination); + }); + } + } + + return results; + } + + // Return a list of all valid usage combinations, given the possible ones + // and the ones that are required for a particular operation. + function allValidUsages(possibleUsages, requiredUsages) { + var allUsages = []; + + allNonemptySubsetsOf(possibleUsages).forEach(function(usage) { + for (var i=0; i { diff --git a/test/fixtures/wpt/console/console-log-shadowrealm-manual.html b/test/fixtures/wpt/console/console-log-shadowrealm-manual.html new file mode 100644 index 00000000000..b091a850c0c --- /dev/null +++ b/test/fixtures/wpt/console/console-log-shadowrealm-manual.html @@ -0,0 +1,10 @@ + + +Console Logging Manual Test +

    Open the console inside the developer tools. It should contain one entry saying "test passed".

    + diff --git a/test/fixtures/wpt/console/console-namespace-object-class-string.any.js b/test/fixtures/wpt/console/console-namespace-object-class-string.any.js index 7b27e72d819..d3ff7f7d076 100644 --- a/test/fixtures/wpt/console/console-namespace-object-class-string.any.js +++ b/test/fixtures/wpt/console/console-namespace-object-class-string.any.js @@ -1,5 +1,5 @@ "use strict"; -// https://heycam.github.io/webidl/#es-namespaces +// https://webidl.spec.whatwg.org/#es-namespaces // https://console.spec.whatwg.org/#console-namespace test(() => { diff --git a/test/fixtures/wpt/console/console-tests-historical.any.js b/test/fixtures/wpt/console/console-tests-historical.any.js index 4c4d4c276d0..1b18a9879fb 100644 --- a/test/fixtures/wpt/console/console-tests-historical.any.js +++ b/test/fixtures/wpt/console/console-tests-historical.any.js @@ -1,3 +1,4 @@ +// META: global=window,dedicatedworker,shadowrealm /** * These tests assert the non-existence of certain * legacy Console methods that are not included in diff --git a/test/fixtures/wpt/console/idlharness-shadowrealm.window.js b/test/fixtures/wpt/console/idlharness-shadowrealm.window.js new file mode 100644 index 00000000000..8f68252dcd2 --- /dev/null +++ b/test/fixtures/wpt/console/idlharness-shadowrealm.window.js @@ -0,0 +1,5 @@ +// META: script=/resources/idlharness-shadowrealm.js + +// https://console.spec.whatwg.org/ + +idl_test_shadowrealm(["console"], []); diff --git a/test/fixtures/wpt/dom/events/AddEventListenerOptions-once.any.js b/test/fixtures/wpt/dom/events/AddEventListenerOptions-once.any.js new file mode 100644 index 00000000000..b4edd4345c5 --- /dev/null +++ b/test/fixtures/wpt/dom/events/AddEventListenerOptions-once.any.js @@ -0,0 +1,96 @@ +// META: title=AddEventListenerOptions.once + +"use strict"; + +test(function() { + var invoked_once = false; + var invoked_normal = false; + function handler_once() { + invoked_once = true; + } + function handler_normal() { + invoked_normal = true; + } + + const et = new EventTarget(); + et.addEventListener('test', handler_once, {once: true}); + et.addEventListener('test', handler_normal); + et.dispatchEvent(new Event('test')); + assert_equals(invoked_once, true, "Once handler should be invoked"); + assert_equals(invoked_normal, true, "Normal handler should be invoked"); + + invoked_once = false; + invoked_normal = false; + et.dispatchEvent(new Event('test')); + assert_equals(invoked_once, false, "Once handler shouldn't be invoked again"); + assert_equals(invoked_normal, true, "Normal handler should be invoked again"); + et.removeEventListener('test', handler_normal); +}, "Once listener should be invoked only once"); + +test(function() { + const et = new EventTarget(); + var invoked_count = 0; + function handler() { + invoked_count++; + if (invoked_count == 1) + et.dispatchEvent(new Event('test')); + } + et.addEventListener('test', handler, {once: true}); + et.dispatchEvent(new Event('test')); + assert_equals(invoked_count, 1, "Once handler should only be invoked once"); + + invoked_count = 0; + function handler2() { + invoked_count++; + if (invoked_count == 1) + et.addEventListener('test', handler2, {once: true}); + if (invoked_count <= 2) + et.dispatchEvent(new Event('test')); + } + et.addEventListener('test', handler2, {once: true}); + et.dispatchEvent(new Event('test')); + assert_equals(invoked_count, 2, "Once handler should only be invoked once after each adding"); +}, "Once listener should be invoked only once even if the event is nested"); + +test(function() { + var invoked_count = 0; + function handler() { + invoked_count++; + } + + const et = new EventTarget(); + + et.addEventListener('test', handler, {once: true}); + et.addEventListener('test', handler); + et.dispatchEvent(new Event('test')); + assert_equals(invoked_count, 1, "The handler should only be added once"); + + invoked_count = 0; + et.dispatchEvent(new Event('test')); + assert_equals(invoked_count, 0, "The handler was added as a once listener"); + + invoked_count = 0; + et.addEventListener('test', handler, {once: true}); + et.removeEventListener('test', handler); + et.dispatchEvent(new Event('test')); + assert_equals(invoked_count, 0, "The handler should have been removed"); +}, "Once listener should be added / removed like normal listeners"); + +test(function() { + const et = new EventTarget(); + + var invoked_count = 0; + + for (let n = 4; n > 0; n--) { + et.addEventListener('test', (e) => { + invoked_count++; + e.stopImmediatePropagation(); + }, {once: true}); + } + + for (let n = 4; n > 0; n--) { + et.dispatchEvent(new Event('test')); + } + + assert_equals(invoked_count, 4, "The listeners should be invoked"); +}, "Multiple once listeners should be invoked even if the stopImmediatePropagation is set"); diff --git a/test/fixtures/wpt/dom/events/AddEventListenerOptions-passive.any.js b/test/fixtures/wpt/dom/events/AddEventListenerOptions-passive.any.js new file mode 100644 index 00000000000..8e59cf5b379 --- /dev/null +++ b/test/fixtures/wpt/dom/events/AddEventListenerOptions-passive.any.js @@ -0,0 +1,134 @@ +// META: title=AddEventListenerOptions.passive + +test(function() { + var supportsPassive = false; + var query_options = { + get passive() { + supportsPassive = true; + return false; + }, + get dummy() { + assert_unreached("dummy value getter invoked"); + return false; + } + }; + + const et = new EventTarget(); + et.addEventListener('test_event', null, query_options); + assert_true(supportsPassive, "addEventListener doesn't support the passive option"); + + supportsPassive = false; + et.removeEventListener('test_event', null, query_options); + assert_false(supportsPassive, "removeEventListener supports the passive option when it should not"); +}, "Supports passive option on addEventListener only"); + +function testPassiveValue(optionsValue, expectedDefaultPrevented, existingEventTarget) { + var defaultPrevented = undefined; + var handler = function handler(e) { + assert_false(e.defaultPrevented, "Event prematurely marked defaultPrevented"); + e.preventDefault(); + defaultPrevented = e.defaultPrevented; + } + const et = existingEventTarget || new EventTarget(); + et.addEventListener('test', handler, optionsValue); + var uncanceled = et.dispatchEvent(new Event('test', {bubbles: true, cancelable: true})); + + assert_equals(defaultPrevented, expectedDefaultPrevented, "Incorrect defaultPrevented for options: " + JSON.stringify(optionsValue)); + assert_equals(uncanceled, !expectedDefaultPrevented, "Incorrect return value from dispatchEvent"); + + et.removeEventListener('test', handler, optionsValue); +} + +test(function() { + testPassiveValue(undefined, true); + testPassiveValue({}, true); + testPassiveValue({passive: false}, true); + testPassiveValue({passive: true}, false); + testPassiveValue({passive: 0}, true); + testPassiveValue({passive: 1}, false); +}, "preventDefault should be ignored if-and-only-if the passive option is true"); + +function testPassiveValueOnReturnValue(test, optionsValue, expectedDefaultPrevented) { + var defaultPrevented = undefined; + var handler = test.step_func(e => { + assert_false(e.defaultPrevented, "Event prematurely marked defaultPrevented"); + e.returnValue = false; + defaultPrevented = e.defaultPrevented; + }); + const et = new EventTarget(); + et.addEventListener('test', handler, optionsValue); + var uncanceled = et.dispatchEvent(new Event('test', {bubbles: true, cancelable: true})); + + assert_equals(defaultPrevented, expectedDefaultPrevented, "Incorrect defaultPrevented for options: " + JSON.stringify(optionsValue)); + assert_equals(uncanceled, !expectedDefaultPrevented, "Incorrect return value from dispatchEvent"); + + et.removeEventListener('test', handler, optionsValue); +} + +async_test(t => { + testPassiveValueOnReturnValue(t, undefined, true); + testPassiveValueOnReturnValue(t, {}, true); + testPassiveValueOnReturnValue(t, {passive: false}, true); + testPassiveValueOnReturnValue(t, {passive: true}, false); + testPassiveValueOnReturnValue(t, {passive: 0}, true); + testPassiveValueOnReturnValue(t, {passive: 1}, false); + t.done(); +}, "returnValue should be ignored if-and-only-if the passive option is true"); + +function testPassiveWithOtherHandlers(optionsValue, expectedDefaultPrevented) { + var handlerInvoked1 = false; + var dummyHandler1 = function() { + handlerInvoked1 = true; + }; + var handlerInvoked2 = false; + var dummyHandler2 = function() { + handlerInvoked2 = true; + }; + + const et = new EventTarget(); + et.addEventListener('test', dummyHandler1, {passive:true}); + et.addEventListener('test', dummyHandler2); + + testPassiveValue(optionsValue, expectedDefaultPrevented, et); + + assert_true(handlerInvoked1, "Extra passive handler not invoked"); + assert_true(handlerInvoked2, "Extra non-passive handler not invoked"); + + et.removeEventListener('test', dummyHandler1); + et.removeEventListener('test', dummyHandler2); +} + +test(function() { + testPassiveWithOtherHandlers({}, true); + testPassiveWithOtherHandlers({passive: false}, true); + testPassiveWithOtherHandlers({passive: true}, false); +}, "passive behavior of one listener should be unaffected by the presence of other listeners"); + +function testOptionEquivalence(optionValue1, optionValue2, expectedEquality) { + var invocationCount = 0; + var handler = function handler(e) { + invocationCount++; + } + const et = new EventTarget(); + et.addEventListener('test', handler, optionValue1); + et.addEventListener('test', handler, optionValue2); + et.dispatchEvent(new Event('test', {bubbles: true})); + assert_equals(invocationCount, expectedEquality ? 1 : 2, "equivalence of options " + + JSON.stringify(optionValue1) + " and " + JSON.stringify(optionValue2)); + et.removeEventListener('test', handler, optionValue1); + et.removeEventListener('test', handler, optionValue2); +} + +test(function() { + // Sanity check options that should be treated as distinct handlers + testOptionEquivalence({capture:true}, {capture:false, passive:false}, false); + testOptionEquivalence({capture:true}, {passive:true}, false); + + // Option values that should be treated as equivalent + testOptionEquivalence({}, {passive:false}, true); + testOptionEquivalence({passive:true}, {passive:false}, true); + testOptionEquivalence(undefined, {passive:true}, true); + testOptionEquivalence({capture: true, passive: false}, {capture: true, passive: true}, true); + +}, "Equivalence of option values"); + diff --git a/test/fixtures/wpt/dom/events/AddEventListenerOptions-signal.any.js b/test/fixtures/wpt/dom/events/AddEventListenerOptions-signal.any.js new file mode 100644 index 00000000000..e6a34261594 --- /dev/null +++ b/test/fixtures/wpt/dom/events/AddEventListenerOptions-signal.any.js @@ -0,0 +1,143 @@ +'use strict'; + +test(function() { + let count = 0; + function handler() { + count++; + } + const et = new EventTarget(); + const controller = new AbortController(); + et.addEventListener('test', handler, { signal: controller.signal }); + et.dispatchEvent(new Event('test')); + assert_equals(count, 1, "Adding a signal still adds a listener"); + et.dispatchEvent(new Event('test')); + assert_equals(count, 2, "The listener was not added with the once flag"); + controller.abort(); + et.dispatchEvent(new Event('test')); + assert_equals(count, 2, "Aborting on the controller removes the listener"); + et.addEventListener('test', handler, { signal: controller.signal }); + et.dispatchEvent(new Event('test')); + assert_equals(count, 2, "Passing an aborted signal never adds the handler"); +}, "Passing an AbortSignal to addEventListener options should allow removing a listener"); + +test(function() { + let count = 0; + function handler() { + count++; + } + const et = new EventTarget(); + const controller = new AbortController(); + et.addEventListener('test', handler, { signal: controller.signal }); + et.removeEventListener('test', handler); + et.dispatchEvent(new Event('test')); + assert_equals(count, 0, "The listener was still removed"); +}, "Passing an AbortSignal to addEventListener does not prevent removeEventListener"); + +test(function() { + let count = 0; + function handler() { + count++; + } + const et = new EventTarget(); + const controller = new AbortController(); + et.addEventListener('test', handler, { signal: controller.signal, once: true }); + controller.abort(); + et.dispatchEvent(new Event('test')); + assert_equals(count, 0, "The listener was still removed"); +}, "Passing an AbortSignal to addEventListener works with the once flag"); + +test(function() { + let count = 0; + function handler() { + count++; + } + const et = new EventTarget(); + const controller = new AbortController(); + et.addEventListener('test', handler, { signal: controller.signal, once: true }); + et.removeEventListener('test', handler); + et.dispatchEvent(new Event('test')); + assert_equals(count, 0, "The listener was still removed"); +}, "Removing a once listener works with a passed signal"); + +test(function() { + let count = 0; + function handler() { + count++; + } + const et = new EventTarget(); + const controller = new AbortController(); + et.addEventListener('first', handler, { signal: controller.signal, once: true }); + et.addEventListener('second', handler, { signal: controller.signal, once: true }); + controller.abort(); + et.dispatchEvent(new Event('first')); + et.dispatchEvent(new Event('second')); + assert_equals(count, 0, "The listener was still removed"); +}, "Passing an AbortSignal to multiple listeners"); + +test(function() { + let count = 0; + function handler() { + count++; + } + const et = new EventTarget(); + const controller = new AbortController(); + et.addEventListener('test', handler, { signal: controller.signal, capture: true }); + controller.abort(); + et.dispatchEvent(new Event('test')); + assert_equals(count, 0, "The listener was still removed"); +}, "Passing an AbortSignal to addEventListener works with the capture flag"); + +test(function() { + let count = 0; + function handler() { + count++; + } + const et = new EventTarget(); + const controller = new AbortController(); + et.addEventListener('test', () => { + controller.abort(); + }, { signal: controller.signal }); + et.addEventListener('test', handler, { signal: controller.signal }); + et.dispatchEvent(new Event('test')); + assert_equals(count, 0, "The listener was still removed"); +}, "Aborting from a listener does not call future listeners"); + +test(function() { + let count = 0; + function handler() { + count++; + } + const et = new EventTarget(); + const controller = new AbortController(); + et.addEventListener('test', () => { + et.addEventListener('test', handler, { signal: controller.signal }); + controller.abort(); + }, { signal: controller.signal }); + et.dispatchEvent(new Event('test')); + assert_equals(count, 0, "The listener was still removed"); +}, "Adding then aborting a listener in another listener does not call it"); + +test(function() { + const et = new EventTarget(); + const ac = new AbortController(); + let count = 0; + et.addEventListener('foo', () => { + et.addEventListener('foo', () => { + count++; + if (count > 5) ac.abort(); + et.dispatchEvent(new Event('foo')); + }, { signal: ac.signal }); + et.dispatchEvent(new Event('foo')); + }, { once: true }); + et.dispatchEvent(new Event('foo')); +}, "Aborting from a nested listener should remove it"); + +test(function() { + const et = new EventTarget(); + assert_throws_js(TypeError, () => { et.addEventListener("foo", () => {}, { signal: null }); }); +}, "Passing null as the signal should throw"); + +test(function() { + const et = new EventTarget(); + assert_throws_js(TypeError, () => { et.addEventListener("foo", null, { signal: null }); }); +}, "Passing null as the signal should throw (listener is also null)"); diff --git a/test/fixtures/wpt/dom/events/CustomEvent.html b/test/fixtures/wpt/dom/events/CustomEvent.html new file mode 100644 index 00000000000..87050943f9b --- /dev/null +++ b/test/fixtures/wpt/dom/events/CustomEvent.html @@ -0,0 +1,35 @@ + +CustomEvent + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-cancelBubble.html b/test/fixtures/wpt/dom/events/Event-cancelBubble.html new file mode 100644 index 00000000000..d8d2d7239d0 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-cancelBubble.html @@ -0,0 +1,132 @@ + + + + + Event.cancelBubble + + + + + + + +
    +
    +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/Event-constants.html b/test/fixtures/wpt/dom/events/Event-constants.html new file mode 100644 index 00000000000..635e9894d9a --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-constants.html @@ -0,0 +1,23 @@ + +Event constants + + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-constructors.any.js b/test/fixtures/wpt/dom/events/Event-constructors.any.js new file mode 100644 index 00000000000..aced2f3c2cd --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-constructors.any.js @@ -0,0 +1,114 @@ +// META: title=Event constructors + +test(function() { + assert_throws_js(TypeError, function() { + new Event() + }) +}) +test(function() { + var test_error = { name: "test" } + assert_throws_exactly(test_error, function() { + new Event({ toString: function() { throw test_error; } }) + }) +}) +test(function() { + var ev = new Event("") + assert_equals(ev.type, "") + assert_equals(ev.target, null) + assert_equals(ev.srcElement, null) + assert_equals(ev.currentTarget, null) + assert_equals(ev.eventPhase, Event.NONE) + assert_equals(ev.bubbles, false) + assert_equals(ev.cancelable, false) + assert_equals(ev.defaultPrevented, false) + assert_equals(ev.returnValue, true) + assert_equals(ev.isTrusted, false) + assert_true(ev.timeStamp > 0) + assert_true("initEvent" in ev) +}) +test(function() { + var ev = new Event("test") + assert_equals(ev.type, "test") + assert_equals(ev.target, null) + assert_equals(ev.srcElement, null) + assert_equals(ev.currentTarget, null) + assert_equals(ev.eventPhase, Event.NONE) + assert_equals(ev.bubbles, false) + assert_equals(ev.cancelable, false) + assert_equals(ev.defaultPrevented, false) + assert_equals(ev.returnValue, true) + assert_equals(ev.isTrusted, false) + assert_true(ev.timeStamp > 0) + assert_true("initEvent" in ev) +}) +test(function() { + assert_throws_js(TypeError, function() { Event("test") }, + 'Calling Event constructor without "new" must throw'); +}) +test(function() { + var ev = new Event("I am an event", { bubbles: true, cancelable: false}) + assert_equals(ev.type, "I am an event") + assert_equals(ev.bubbles, true) + assert_equals(ev.cancelable, false) +}) +test(function() { + var ev = new Event("@", { bubblesIGNORED: true, cancelable: true}) + assert_equals(ev.type, "@") + assert_equals(ev.bubbles, false) + assert_equals(ev.cancelable, true) +}) +test(function() { + var ev = new Event("@", { "bubbles\0IGNORED": true, cancelable: true}) + assert_equals(ev.type, "@") + assert_equals(ev.bubbles, false) + assert_equals(ev.cancelable, true) +}) +test(function() { + var ev = new Event("Xx", { cancelable: true}) + assert_equals(ev.type, "Xx") + assert_equals(ev.bubbles, false) + assert_equals(ev.cancelable, true) +}) +test(function() { + var ev = new Event("Xx", {}) + assert_equals(ev.type, "Xx") + assert_equals(ev.bubbles, false) + assert_equals(ev.cancelable, false) +}) +test(function() { + var ev = new Event("Xx", {bubbles: true, cancelable: false, sweet: "x"}) + assert_equals(ev.type, "Xx") + assert_equals(ev.bubbles, true) + assert_equals(ev.cancelable, false) + assert_equals(ev.sweet, undefined) +}) +test(function() { + var called = [] + var ev = new Event("Xx", { + get cancelable() { + called.push("cancelable") + return false + }, + get bubbles() { + called.push("bubbles") + return true; + }, + get sweet() { + called.push("sweet") + return "x" + } + }) + assert_array_equals(called, ["bubbles", "cancelable"]) + assert_equals(ev.type, "Xx") + assert_equals(ev.bubbles, true) + assert_equals(ev.cancelable, false) + assert_equals(ev.sweet, undefined) +}) +test(function() { + var ev = new CustomEvent("$", {detail: 54, sweet: "x", sweet2: "x", cancelable:true}) + assert_equals(ev.type, "$") + assert_equals(ev.bubbles, false) + assert_equals(ev.cancelable, true) + assert_equals(ev.sweet, undefined) + assert_equals(ev.detail, 54) +}) diff --git a/test/fixtures/wpt/dom/events/Event-defaultPrevented-after-dispatch.html b/test/fixtures/wpt/dom/events/Event-defaultPrevented-after-dispatch.html new file mode 100644 index 00000000000..8fef005eb57 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-defaultPrevented-after-dispatch.html @@ -0,0 +1,44 @@ + + +Event.defaultPrevented is not reset after dispatchEvent() + + + + +
    + + diff --git a/test/fixtures/wpt/dom/events/Event-defaultPrevented.html b/test/fixtures/wpt/dom/events/Event-defaultPrevented.html new file mode 100644 index 00000000000..2548fa3e064 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-defaultPrevented.html @@ -0,0 +1,55 @@ + +Event.defaultPrevented + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-bubble-canceled.html b/test/fixtures/wpt/dom/events/Event-dispatch-bubble-canceled.html new file mode 100644 index 00000000000..20f398f66f9 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-bubble-canceled.html @@ -0,0 +1,59 @@ + + + +Setting cancelBubble=true prior to dispatchEvent() + + + + +
    + + + + + + + + + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-bubbles-false.html b/test/fixtures/wpt/dom/events/Event-dispatch-bubbles-false.html new file mode 100644 index 00000000000..0f43cb02756 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-bubbles-false.html @@ -0,0 +1,98 @@ + + + Event.bubbles attribute is set to false + + + + +
    + + + + + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-bubbles-true.html b/test/fixtures/wpt/dom/events/Event-dispatch-bubbles-true.html new file mode 100644 index 00000000000..b23605a1ebc --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-bubbles-true.html @@ -0,0 +1,108 @@ + + + Event.bubbles attribute is set to false + + + + +
    + + + + + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-click.html b/test/fixtures/wpt/dom/events/Event-dispatch-click.html new file mode 100644 index 00000000000..010305775df --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-click.html @@ -0,0 +1,369 @@ + +Synthetic click event "magic" + + +
    + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-click.tentative.html b/test/fixtures/wpt/dom/events/Event-dispatch-click.tentative.html new file mode 100644 index 00000000000..cfdae55ef2a --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-click.tentative.html @@ -0,0 +1,78 @@ + +Clicks on input element + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-detached-click.html b/test/fixtures/wpt/dom/events/Event-dispatch-detached-click.html new file mode 100644 index 00000000000..76ea3d78ba7 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-detached-click.html @@ -0,0 +1,20 @@ + +Click event on an element not in the document + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-detached-input-and-change.html b/test/fixtures/wpt/dom/events/Event-dispatch-detached-input-and-change.html new file mode 100644 index 00000000000..a53ae71ac2a --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-detached-input-and-change.html @@ -0,0 +1,190 @@ + + + +input and change events for detached checkbox and radio elements + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-handlers-changed.html b/test/fixtures/wpt/dom/events/Event-dispatch-handlers-changed.html new file mode 100644 index 00000000000..24e6fd70cb4 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-handlers-changed.html @@ -0,0 +1,91 @@ + + + Dispatch additional events inside an event listener + + + +
    + + + + + + + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-listener-order.window.js b/test/fixtures/wpt/dom/events/Event-dispatch-listener-order.window.js new file mode 100644 index 00000000000..a01a472872b --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-listener-order.window.js @@ -0,0 +1,20 @@ +test(t => { + const hostParent = document.createElement("section"), + host = hostParent.appendChild(document.createElement("div")), + shadowRoot = host.attachShadow({ mode: "closed" }), + targetParent = shadowRoot.appendChild(document.createElement("p")), + target = targetParent.appendChild(document.createElement("span")), + path = [hostParent, host, shadowRoot, targetParent, target], + expected = [], + result = []; + path.forEach((node, index) => { + expected.splice(index, 0, "capturing " + node.nodeName); + expected.splice(index + 1, 0, "bubbling " + node.nodeName); + }); + path.forEach(node => { + node.addEventListener("test", () => { result.push("bubbling " + node.nodeName) }); + node.addEventListener("test", () => { result.push("capturing " + node.nodeName) }, true); + }); + target.dispatchEvent(new CustomEvent('test', { detail: {}, bubbles: true, composed: true })); + assert_array_equals(result, expected); +}); diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-multiple-cancelBubble.html b/test/fixtures/wpt/dom/events/Event-dispatch-multiple-cancelBubble.html new file mode 100644 index 00000000000..2873fd7794b --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-multiple-cancelBubble.html @@ -0,0 +1,51 @@ + + + +Multiple dispatchEvent() and cancelBubble + + + + +
    + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-multiple-stopPropagation.html b/test/fixtures/wpt/dom/events/Event-dispatch-multiple-stopPropagation.html new file mode 100644 index 00000000000..72644bd861e --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-multiple-stopPropagation.html @@ -0,0 +1,51 @@ + + + + Multiple dispatchEvent() and stopPropagation() + + + + +
    + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-omitted-capture.html b/test/fixtures/wpt/dom/events/Event-dispatch-omitted-capture.html new file mode 100644 index 00000000000..77074d9a3ec --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-omitted-capture.html @@ -0,0 +1,70 @@ + + +EventTarget.addEventListener: capture argument omitted + + + + +
    + + + + + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-on-disabled-elements.html b/test/fixtures/wpt/dom/events/Event-dispatch-on-disabled-elements.html new file mode 100644 index 00000000000..361006a7240 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-on-disabled-elements.html @@ -0,0 +1,251 @@ + + + +Events must dispatch on disabled elements + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-order-at-target.html b/test/fixtures/wpt/dom/events/Event-dispatch-order-at-target.html new file mode 100644 index 00000000000..79673c32564 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-order-at-target.html @@ -0,0 +1,31 @@ + + +Listeners are invoked in correct order (AT_TARGET phase) + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-order.html b/test/fixtures/wpt/dom/events/Event-dispatch-order.html new file mode 100644 index 00000000000..ca94434595c --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-order.html @@ -0,0 +1,26 @@ + +Event phases order + + +
    + +
    +
    +
    diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-other-document.html b/test/fixtures/wpt/dom/events/Event-dispatch-other-document.html new file mode 100644 index 00000000000..689b48087a0 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-other-document.html @@ -0,0 +1,23 @@ + +Custom event on an element in another document + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-propagation-stopped.html b/test/fixtures/wpt/dom/events/Event-dispatch-propagation-stopped.html new file mode 100644 index 00000000000..889f8cfe114 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-propagation-stopped.html @@ -0,0 +1,59 @@ + + + + Calling stopPropagation() prior to dispatchEvent() + + + + +
    + + + + + + + + + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-redispatch.html b/test/fixtures/wpt/dom/events/Event-dispatch-redispatch.html new file mode 100644 index 00000000000..cf861ca1774 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-redispatch.html @@ -0,0 +1,124 @@ + + +EventTarget#dispatchEvent(): redispatching a native event + + + + + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-reenter.html b/test/fixtures/wpt/dom/events/Event-dispatch-reenter.html new file mode 100644 index 00000000000..71f8517bdd9 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-reenter.html @@ -0,0 +1,66 @@ + + + Dispatch additional events inside an event listener + + +
    + + + + + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-target-moved.html b/test/fixtures/wpt/dom/events/Event-dispatch-target-moved.html new file mode 100644 index 00000000000..facb2c7b956 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-target-moved.html @@ -0,0 +1,73 @@ + + + Determined event propagation path - target moved + + + +
    + + + + + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-target-removed.html b/test/fixtures/wpt/dom/events/Event-dispatch-target-removed.html new file mode 100644 index 00000000000..531799c3ade --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-target-removed.html @@ -0,0 +1,72 @@ + + +Determined event propagation path - target removed + + + +
    + + + + + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-dispatch-throwing.html b/test/fixtures/wpt/dom/events/Event-dispatch-throwing.html new file mode 100644 index 00000000000..7d1c0d94a08 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-dispatch-throwing.html @@ -0,0 +1,51 @@ + + +Throwing in event listeners + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-init-while-dispatching.html b/test/fixtures/wpt/dom/events/Event-init-while-dispatching.html new file mode 100644 index 00000000000..2aa1f6701c4 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-init-while-dispatching.html @@ -0,0 +1,83 @@ + + +Re-initializing events while dispatching them + + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-initEvent.html b/test/fixtures/wpt/dom/events/Event-initEvent.html new file mode 100644 index 00000000000..ad1018d4daf --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-initEvent.html @@ -0,0 +1,136 @@ + +Event.initEvent + + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-isTrusted.any.js b/test/fixtures/wpt/dom/events/Event-isTrusted.any.js new file mode 100644 index 00000000000..00bcecd0ed6 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-isTrusted.any.js @@ -0,0 +1,11 @@ +test(function() { + var desc1 = Object.getOwnPropertyDescriptor(new Event("x"), "isTrusted"); + assert_not_equals(desc1, undefined); + assert_equals(typeof desc1.get, "function"); + + var desc2 = Object.getOwnPropertyDescriptor(new Event("x"), "isTrusted"); + assert_not_equals(desc2, undefined); + assert_equals(typeof desc2.get, "function"); + + assert_equals(desc1.get, desc2.get); +}); diff --git a/test/fixtures/wpt/dom/events/Event-propagation.html b/test/fixtures/wpt/dom/events/Event-propagation.html new file mode 100644 index 00000000000..33989eb4bf9 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-propagation.html @@ -0,0 +1,48 @@ + +Event propagation tests + +
    + + + diff --git a/test/fixtures/wpt/dom/events/Event-returnValue.html b/test/fixtures/wpt/dom/events/Event-returnValue.html new file mode 100644 index 00000000000..08df2d41416 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-returnValue.html @@ -0,0 +1,64 @@ + + + + + Event.returnValue + + + + + + + +
    + + + diff --git a/test/fixtures/wpt/dom/events/Event-stopImmediatePropagation.html b/test/fixtures/wpt/dom/events/Event-stopImmediatePropagation.html new file mode 100644 index 00000000000..b75732257a8 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-stopImmediatePropagation.html @@ -0,0 +1,34 @@ + + +Event's stopImmediatePropagation + + + + + + +
    + + diff --git a/test/fixtures/wpt/dom/events/Event-stopPropagation-cancel-bubbling.html b/test/fixtures/wpt/dom/events/Event-stopPropagation-cancel-bubbling.html new file mode 100644 index 00000000000..5c2c49f3382 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-stopPropagation-cancel-bubbling.html @@ -0,0 +1,20 @@ + + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-subclasses-constructors.html b/test/fixtures/wpt/dom/events/Event-subclasses-constructors.html new file mode 100644 index 00000000000..08a5ded0116 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-subclasses-constructors.html @@ -0,0 +1,179 @@ + + +Event constructors + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-timestamp-cross-realm-getter.html b/test/fixtures/wpt/dom/events/Event-timestamp-cross-realm-getter.html new file mode 100644 index 00000000000..45823de26b2 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-timestamp-cross-realm-getter.html @@ -0,0 +1,27 @@ + + +event.timeStamp is initialized using event's relevant global object + + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-timestamp-high-resolution.html b/test/fixtures/wpt/dom/events/Event-timestamp-high-resolution.html new file mode 100644 index 00000000000..a049fef64b4 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-timestamp-high-resolution.html @@ -0,0 +1,16 @@ + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-timestamp-high-resolution.https.html b/test/fixtures/wpt/dom/events/Event-timestamp-high-resolution.https.html new file mode 100644 index 00000000000..70f97429479 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-timestamp-high-resolution.https.html @@ -0,0 +1,16 @@ + + + + + diff --git a/test/fixtures/wpt/dom/events/Event-timestamp-safe-resolution.html b/test/fixtures/wpt/dom/events/Event-timestamp-safe-resolution.html new file mode 100644 index 00000000000..24f2dec93c5 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-timestamp-safe-resolution.html @@ -0,0 +1,49 @@ + + + + \ No newline at end of file diff --git a/test/fixtures/wpt/dom/events/Event-type-empty.html b/test/fixtures/wpt/dom/events/Event-type-empty.html new file mode 100644 index 00000000000..225b85a613a --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-type-empty.html @@ -0,0 +1,35 @@ + +Event.type set to the empty string + + + + +
    + diff --git a/test/fixtures/wpt/dom/events/Event-type.html b/test/fixtures/wpt/dom/events/Event-type.html new file mode 100644 index 00000000000..22792f5c6c7 --- /dev/null +++ b/test/fixtures/wpt/dom/events/Event-type.html @@ -0,0 +1,22 @@ + +Event.type + + + + +
    + diff --git a/test/fixtures/wpt/dom/events/EventListener-addEventListener.sub.window.js b/test/fixtures/wpt/dom/events/EventListener-addEventListener.sub.window.js new file mode 100644 index 00000000000..b44bc332859 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventListener-addEventListener.sub.window.js @@ -0,0 +1,9 @@ +async_test(function(t) { + let crossOriginFrame = document.createElement('iframe'); + crossOriginFrame.src = 'https://{{hosts[alt][]}}:{{ports[https][0]}}/common/blank.html'; + document.body.appendChild(crossOriginFrame); + crossOriginFrame.addEventListener('load', t.step_func_done(function() { + let crossOriginWindow = crossOriginFrame.contentWindow; + window.addEventListener('click', crossOriginWindow); + })); +}, "EventListener.addEventListener doesn't throw when a cross origin object is passed in."); diff --git a/test/fixtures/wpt/dom/events/EventListener-handleEvent-cross-realm.html b/test/fixtures/wpt/dom/events/EventListener-handleEvent-cross-realm.html new file mode 100644 index 00000000000..663d04213f8 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventListener-handleEvent-cross-realm.html @@ -0,0 +1,75 @@ + + +Cross-realm EventListener throws TypeError of its associated Realm + + + + + + + diff --git a/test/fixtures/wpt/dom/events/EventListener-handleEvent.html b/test/fixtures/wpt/dom/events/EventListener-handleEvent.html new file mode 100644 index 00000000000..06bc1f6e2ab --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventListener-handleEvent.html @@ -0,0 +1,102 @@ + + +EventListener::handleEvent() + + + +
    + diff --git a/test/fixtures/wpt/dom/events/EventListener-incumbent-global-1.sub.html b/test/fixtures/wpt/dom/events/EventListener-incumbent-global-1.sub.html new file mode 100644 index 00000000000..9d941385cbc --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventListener-incumbent-global-1.sub.html @@ -0,0 +1,20 @@ + + + + + + + diff --git a/test/fixtures/wpt/dom/events/EventListener-incumbent-global-2.sub.html b/test/fixtures/wpt/dom/events/EventListener-incumbent-global-2.sub.html new file mode 100644 index 00000000000..4433c098d75 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventListener-incumbent-global-2.sub.html @@ -0,0 +1,20 @@ + + + + + + + diff --git a/test/fixtures/wpt/dom/events/EventListener-incumbent-global-subframe-1.sub.html b/test/fixtures/wpt/dom/events/EventListener-incumbent-global-subframe-1.sub.html new file mode 100644 index 00000000000..25487cc5e0b --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventListener-incumbent-global-subframe-1.sub.html @@ -0,0 +1,13 @@ + + + diff --git a/test/fixtures/wpt/dom/events/EventListener-incumbent-global-subframe-2.sub.html b/test/fixtures/wpt/dom/events/EventListener-incumbent-global-subframe-2.sub.html new file mode 100644 index 00000000000..9c7235e2ad4 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventListener-incumbent-global-subframe-2.sub.html @@ -0,0 +1,13 @@ + + + diff --git a/test/fixtures/wpt/dom/events/EventListener-incumbent-global-subsubframe.sub.html b/test/fixtures/wpt/dom/events/EventListener-incumbent-global-subsubframe.sub.html new file mode 100644 index 00000000000..dd683f6f65f --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventListener-incumbent-global-subsubframe.sub.html @@ -0,0 +1,20 @@ + + diff --git a/test/fixtures/wpt/dom/events/EventListener-invoke-legacy.html b/test/fixtures/wpt/dom/events/EventListener-invoke-legacy.html new file mode 100644 index 00000000000..a01afcd8d19 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventListener-invoke-legacy.html @@ -0,0 +1,66 @@ + + +Invoke legacy event listener + + + +
    + diff --git a/test/fixtures/wpt/dom/events/EventListenerOptions-capture.html b/test/fixtures/wpt/dom/events/EventListenerOptions-capture.html new file mode 100644 index 00000000000..f72cf3ca546 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventListenerOptions-capture.html @@ -0,0 +1,98 @@ + + +EventListenerOptions.capture + + + + +
    + + diff --git a/test/fixtures/wpt/dom/events/EventTarget-add-listener-platform-object.html b/test/fixtures/wpt/dom/events/EventTarget-add-listener-platform-object.html new file mode 100644 index 00000000000..d5565c22b3d --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventTarget-add-listener-platform-object.html @@ -0,0 +1,32 @@ + + +addEventListener with a platform object + + + +Click me! + diff --git a/test/fixtures/wpt/dom/events/EventTarget-add-remove-listener.any.js b/test/fixtures/wpt/dom/events/EventTarget-add-remove-listener.any.js new file mode 100644 index 00000000000..b1d7ffb3e07 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventTarget-add-remove-listener.any.js @@ -0,0 +1,21 @@ +// META: title=EventTarget's addEventListener + removeEventListener + +"use strict"; + +function listener(evt) { + evt.preventDefault(); + return false; +} + +test(() => { + const et = new EventTarget(); + et.addEventListener("x", listener, false); + let event = new Event("x", { cancelable: true }); + let ret = et.dispatchEvent(event); + assert_false(ret); + + et.removeEventListener("x", listener); + event = new Event("x", { cancelable: true }); + ret = et.dispatchEvent(event); + assert_true(ret); +}, "Removing an event listener without explicit capture arg should succeed"); diff --git a/test/fixtures/wpt/dom/events/EventTarget-addEventListener.any.js b/test/fixtures/wpt/dom/events/EventTarget-addEventListener.any.js new file mode 100644 index 00000000000..e22da4aff85 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventTarget-addEventListener.any.js @@ -0,0 +1,9 @@ +// META: title=EventTarget.addEventListener + +// Step 1. +test(function() { + const et = new EventTarget(); + assert_equals(et.addEventListener("x", null, false), undefined); + assert_equals(et.addEventListener("x", null, true), undefined); + assert_equals(et.addEventListener("x", null), undefined); +}, "Adding a null event listener should succeed"); diff --git a/test/fixtures/wpt/dom/events/EventTarget-constructible.any.js b/test/fixtures/wpt/dom/events/EventTarget-constructible.any.js new file mode 100644 index 00000000000..b0e7614e625 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventTarget-constructible.any.js @@ -0,0 +1,62 @@ +"use strict"; + +test(() => { + const target = new EventTarget(); + const event = new Event("foo", { bubbles: true, cancelable: false }); + let callCount = 0; + + function listener(e) { + assert_equals(e, event); + ++callCount; + } + + target.addEventListener("foo", listener); + + target.dispatchEvent(event); + assert_equals(callCount, 1); + + target.dispatchEvent(event); + assert_equals(callCount, 2); + + target.removeEventListener("foo", listener); + target.dispatchEvent(event); + assert_equals(callCount, 2); +}, "A constructed EventTarget can be used as expected"); + +test(() => { + class NicerEventTarget extends EventTarget { + on(...args) { + this.addEventListener(...args); + } + + off(...args) { + this.removeEventListener(...args); + } + + dispatch(type, detail) { + this.dispatchEvent(new CustomEvent(type, { detail })); + } + } + + const target = new NicerEventTarget(); + const event = new Event("foo", { bubbles: true, cancelable: false }); + const detail = "some data"; + let callCount = 0; + + function listener(e) { + assert_equals(e.detail, detail); + ++callCount; + } + + target.on("foo", listener); + + target.dispatch("foo", detail); + assert_equals(callCount, 1); + + target.dispatch("foo", detail); + assert_equals(callCount, 2); + + target.off("foo", listener); + target.dispatch("foo", detail); + assert_equals(callCount, 2); +}, "EventTarget can be subclassed"); diff --git a/test/fixtures/wpt/dom/events/EventTarget-dispatchEvent-returnvalue.html b/test/fixtures/wpt/dom/events/EventTarget-dispatchEvent-returnvalue.html new file mode 100644 index 00000000000..c4466e0d6cd --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventTarget-dispatchEvent-returnvalue.html @@ -0,0 +1,71 @@ + + +EventTarget.dispatchEvent: return value + + + + + + +
    + + + + + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/EventTarget-dispatchEvent.html b/test/fixtures/wpt/dom/events/EventTarget-dispatchEvent.html new file mode 100644 index 00000000000..783561f5fb5 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventTarget-dispatchEvent.html @@ -0,0 +1,104 @@ + + +EventTarget.dispatchEvent + + + + + + +
    + diff --git a/test/fixtures/wpt/dom/events/EventTarget-removeEventListener.any.js b/test/fixtures/wpt/dom/events/EventTarget-removeEventListener.any.js new file mode 100644 index 00000000000..289dfcfbabd --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventTarget-removeEventListener.any.js @@ -0,0 +1,8 @@ +// META: title=EventTarget.removeEventListener + +// Step 1. +test(function() { + assert_equals(globalThis.removeEventListener("x", null, false), undefined); + assert_equals(globalThis.removeEventListener("x", null, true), undefined); + assert_equals(globalThis.removeEventListener("x", null), undefined); +}, "removing a null event listener should succeed"); diff --git a/test/fixtures/wpt/dom/events/EventTarget-this-of-listener.html b/test/fixtures/wpt/dom/events/EventTarget-this-of-listener.html new file mode 100644 index 00000000000..506564c4133 --- /dev/null +++ b/test/fixtures/wpt/dom/events/EventTarget-this-of-listener.html @@ -0,0 +1,182 @@ + + +EventTarget listeners this value + + + + + + diff --git a/test/fixtures/wpt/dom/events/KeyEvent-initKeyEvent.html b/test/fixtures/wpt/dom/events/KeyEvent-initKeyEvent.html new file mode 100644 index 00000000000..3fffaba0143 --- /dev/null +++ b/test/fixtures/wpt/dom/events/KeyEvent-initKeyEvent.html @@ -0,0 +1,23 @@ + + +KeyEvent.initKeyEvent + + +
    + diff --git a/test/fixtures/wpt/dom/events/document-level-touchmove-event-listener-passive-by-default.tentative.html b/test/fixtures/wpt/dom/events/document-level-touchmove-event-listener-passive-by-default.tentative.html new file mode 100644 index 00000000000..f3f0d58209f --- /dev/null +++ b/test/fixtures/wpt/dom/events/document-level-touchmove-event-listener-passive-by-default.tentative.html @@ -0,0 +1,73 @@ + +Default passive document level touchmove event listener test + + + + + + + +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/document-level-wheel-event-listener-passive-by-default.tentative.html b/test/fixtures/wpt/dom/events/document-level-wheel-event-listener-passive-by-default.tentative.html new file mode 100644 index 00000000000..b7224835fa3 --- /dev/null +++ b/test/fixtures/wpt/dom/events/document-level-wheel-event-listener-passive-by-default.tentative.html @@ -0,0 +1,51 @@ + +Default passive document level wheel event listener manual test + + + + + + + +
    This is a manual test since there is no way to synthesize wheel events. +Scroll by wheel in the middle of the page to run the test.
    + + diff --git a/test/fixtures/wpt/dom/events/event-disabled-dynamic.html b/test/fixtures/wpt/dom/events/event-disabled-dynamic.html new file mode 100644 index 00000000000..3f995b02f1b --- /dev/null +++ b/test/fixtures/wpt/dom/events/event-disabled-dynamic.html @@ -0,0 +1,21 @@ + + +Test that disabled is honored immediately in presence of dynamic changes + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/event-global-extra.window.js b/test/fixtures/wpt/dom/events/event-global-extra.window.js new file mode 100644 index 00000000000..0f14961c40a --- /dev/null +++ b/test/fixtures/wpt/dom/events/event-global-extra.window.js @@ -0,0 +1,90 @@ +const otherWindow = document.body.appendChild(document.createElement("iframe")).contentWindow; + +["EventTarget", "XMLHttpRequest"].forEach(constructorName => { + async_test(t => { + const eventTarget = new otherWindow[constructorName](); + eventTarget.addEventListener("hi", t.step_func_done(e => { + assert_equals(otherWindow.event, undefined); + assert_equals(e, window.event); + })); + eventTarget.dispatchEvent(new Event("hi")); + }, "window.event for constructors from another global: " + constructorName); +}); + +// XXX: It would be good to test a subclass of EventTarget once we sort out +// https://github.com/heycam/webidl/issues/540 + +async_test(t => { + const element = document.body.appendChild(otherWindow.document.createElement("meh")); + element.addEventListener("yo", t.step_func_done(e => { + assert_equals(e, window.event); + })); + element.dispatchEvent(new Event("yo")); +}, "window.event and element from another document"); + +async_test(t => { + const doc = otherWindow.document, + element = doc.body.appendChild(doc.createElement("meh")), + child = element.appendChild(doc.createElement("bleh")); + element.addEventListener("yoyo", t.step_func(e => { + document.body.appendChild(element); + assert_equals(element.ownerDocument, document); + assert_equals(window.event, e); + assert_equals(otherWindow.event, undefined); + }), true); + element.addEventListener("yoyo", t.step_func(e => { + assert_equals(element.ownerDocument, document); + assert_equals(window.event, e); + assert_equals(otherWindow.event, undefined); + }), true); + child.addEventListener("yoyo", t.step_func_done(e => { + assert_equals(child.ownerDocument, document); + assert_equals(window.event, e); + assert_equals(otherWindow.event, undefined); + })); + child.dispatchEvent(new Event("yoyo")); +}, "window.event and moving an element post-dispatch"); + +test(t => { + const host = document.createElement("div"), + shadow = host.attachShadow({ mode: "open" }), + child = shadow.appendChild(document.createElement("trala")), + furtherChild = child.appendChild(document.createElement("waddup")); + let counter = 0; + host.addEventListener("hi", t.step_func(e => { + assert_equals(window.event, e); + assert_equals(counter++, 3); + })); + child.addEventListener("hi", t.step_func(e => { + assert_equals(window.event, undefined); + assert_equals(counter++, 2); + })); + furtherChild.addEventListener("hi", t.step_func(e => { + host.appendChild(child); + assert_equals(window.event, undefined); + assert_equals(counter++, 0); + })); + furtherChild.addEventListener("hi", t.step_func(e => { + assert_equals(window.event, undefined); + assert_equals(counter++, 1); + })); + furtherChild.dispatchEvent(new Event("hi", { composed: true, bubbles: true })); + assert_equals(counter, 4); +}, "window.event should not be affected by nodes moving post-dispatch"); + +async_test(t => { + const frame = document.body.appendChild(document.createElement("iframe")); + frame.src = "resources/event-global-extra-frame.html"; + frame.onload = t.step_func_done((load_event) => { + const event = new Event("hi"); + document.addEventListener("hi", frame.contentWindow.listener); // listener intentionally not wrapped in t.step_func + document.addEventListener("hi", t.step_func(e => { + assert_equals(event, e); + assert_equals(window.event, e); + })); + document.dispatchEvent(event); + assert_equals(frameState.event, event); + assert_equals(frameState.windowEvent, event); + assert_equals(frameState.parentEvent, load_event); + }); +}, "Listener from a different global"); diff --git a/test/fixtures/wpt/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html b/test/fixtures/wpt/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html new file mode 100644 index 00000000000..a64c8b6b8b6 --- /dev/null +++ b/test/fixtures/wpt/dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html @@ -0,0 +1,23 @@ + + +window.event is still set when 'beforeunload' result is coerced to string + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/event-global-set-before-handleEvent-lookup.window.js b/test/fixtures/wpt/dom/events/event-global-set-before-handleEvent-lookup.window.js new file mode 100644 index 00000000000..8f934bcea97 --- /dev/null +++ b/test/fixtures/wpt/dom/events/event-global-set-before-handleEvent-lookup.window.js @@ -0,0 +1,19 @@ +// https://dom.spec.whatwg.org/#concept-event-listener-inner-invoke (steps 8.2 - 12) +// https://webidl.spec.whatwg.org/#call-a-user-objects-operation (step 10.1) + +test(() => { + const eventTarget = new EventTarget; + + let currentEvent; + eventTarget.addEventListener("foo", { + get handleEvent() { + currentEvent = window.event; + return () => {}; + } + }); + + const event = new Event("foo"); + eventTarget.dispatchEvent(event); + + assert_equals(currentEvent, event); +}, "window.event is set before 'handleEvent' lookup"); diff --git a/test/fixtures/wpt/dom/events/event-global.html b/test/fixtures/wpt/dom/events/event-global.html new file mode 100644 index 00000000000..3e8d25ecb5d --- /dev/null +++ b/test/fixtures/wpt/dom/events/event-global.html @@ -0,0 +1,117 @@ + +window.event tests + + + +
    + diff --git a/test/fixtures/wpt/dom/events/event-global.worker.js b/test/fixtures/wpt/dom/events/event-global.worker.js new file mode 100644 index 00000000000..116cf32932b --- /dev/null +++ b/test/fixtures/wpt/dom/events/event-global.worker.js @@ -0,0 +1,14 @@ +importScripts("/resources/testharness.js"); +test(t => { + let seen = false; + const event = new Event("hi"); + assert_equals(self.event, undefined); + self.addEventListener("hi", t.step_func(e => { + seen = true; + assert_equals(self.event, undefined); + assert_equals(e, event); + })); + self.dispatchEvent(event); + assert_true(seen); +}, "There's no self.event (that's why we call it window.event) in workers"); +done(); diff --git a/test/fixtures/wpt/dom/events/focus-event-document-move.html b/test/fixtures/wpt/dom/events/focus-event-document-move.html new file mode 100644 index 00000000000..2943761ce13 --- /dev/null +++ b/test/fixtures/wpt/dom/events/focus-event-document-move.html @@ -0,0 +1,33 @@ + + + + + + + + + + + + +
    Click me
    + + diff --git a/test/fixtures/wpt/dom/events/keypress-dispatch-crash.html b/test/fixtures/wpt/dom/events/keypress-dispatch-crash.html new file mode 100644 index 00000000000..3207adbd8c8 --- /dev/null +++ b/test/fixtures/wpt/dom/events/keypress-dispatch-crash.html @@ -0,0 +1,15 @@ + + + + + + + diff --git a/test/fixtures/wpt/dom/events/legacy-pre-activation-behavior.window.js b/test/fixtures/wpt/dom/events/legacy-pre-activation-behavior.window.js new file mode 100644 index 00000000000..e9e84bfad1e --- /dev/null +++ b/test/fixtures/wpt/dom/events/legacy-pre-activation-behavior.window.js @@ -0,0 +1,10 @@ +test(t => { + const input = document.body.appendChild(document.createElement('input')); + input.type = "radio"; + t.add_cleanup(() => input.remove()); + const clickEvent = new MouseEvent('click', { button: 0, which: 1 }); + input.addEventListener('change', t.step_func(() => { + assert_equals(clickEvent.eventPhase, Event.NONE); + })); + input.dispatchEvent(clickEvent); +}, "Use NONE phase during legacy-pre-activation behavior"); diff --git a/test/fixtures/wpt/dom/events/relatedTarget.window.js b/test/fixtures/wpt/dom/events/relatedTarget.window.js new file mode 100644 index 00000000000..ebc83ceb209 --- /dev/null +++ b/test/fixtures/wpt/dom/events/relatedTarget.window.js @@ -0,0 +1,81 @@ +// https://dom.spec.whatwg.org/#concept-event-dispatch + +const host = document.createElement("div"), + child = host.appendChild(document.createElement("p")), + shadow = host.attachShadow({ mode: "closed" }), + slot = shadow.appendChild(document.createElement("slot")); + +test(() => { + for (target of [shadow, slot]) { + for (relatedTarget of [new XMLHttpRequest(), self, host]) { + const event = new FocusEvent("demo", { relatedTarget: relatedTarget }); + target.dispatchEvent(event); + assert_equals(event.target, null); + assert_equals(event.relatedTarget, null); + } + } +}, "Reset if target pointed to a shadow tree"); + +test(() => { + for (relatedTarget of [shadow, slot]) { + for (target of [new XMLHttpRequest(), self, host]) { + const event = new FocusEvent("demo", { relatedTarget: relatedTarget }); + target.dispatchEvent(event); + assert_equals(event.target, target); + assert_equals(event.relatedTarget, host); + } + } +}, "Retarget a shadow-tree relatedTarget"); + +test(t => { + const shadowChild = shadow.appendChild(document.createElement("div")); + shadowChild.addEventListener("demo", t.step_func(() => document.body.appendChild(shadowChild))); + const event = new FocusEvent("demo", { relatedTarget: new XMLHttpRequest() }); + shadowChild.dispatchEvent(event); + assert_equals(shadowChild.parentNode, document.body); + assert_equals(event.target, null); + assert_equals(event.relatedTarget, null); + shadowChild.remove(); +}, "Reset if target pointed to a shadow tree pre-dispatch"); + +test(t => { + const shadowChild = shadow.appendChild(document.createElement("div")); + document.body.addEventListener("demo", t.step_func(() => document.body.appendChild(shadowChild))); + const event = new FocusEvent("demo", { relatedTarget: shadowChild }); + document.body.dispatchEvent(event); + assert_equals(shadowChild.parentNode, document.body); + assert_equals(event.target, document.body); + assert_equals(event.relatedTarget, host); + shadowChild.remove(); +}, "Retarget a shadow-tree relatedTarget, part 2"); + +test(t => { + const event = new FocusEvent("heya", { relatedTarget: shadow, cancelable: true }), + callback = t.unreached_func(); + host.addEventListener("heya", callback); + t.add_cleanup(() => host.removeEventListener("heya", callback)); + event.preventDefault(); + assert_true(event.defaultPrevented); + assert_false(host.dispatchEvent(event)); + assert_equals(event.target, null); + assert_equals(event.relatedTarget, null); + // Check that the dispatch flag is cleared + event.initEvent("x"); + assert_equals(event.type, "x"); +}, "Reset targets on early return"); + +test(t => { + const input = document.body.appendChild(document.createElement("input")), + event = new MouseEvent("click", { relatedTarget: shadow }); + let seen = false; + t.add_cleanup(() => input.remove()); + input.type = "checkbox"; + input.oninput = t.step_func(() => { + assert_equals(event.target, null); + assert_equals(event.relatedTarget, null); + assert_equals(event.composedPath().length, 0); + seen = true; + }); + assert_true(input.dispatchEvent(event)); + assert_true(seen); +}, "Reset targets before activation behavior"); diff --git a/test/fixtures/wpt/dom/events/replace-event-listener-null-browsing-context-crash.html b/test/fixtures/wpt/dom/events/replace-event-listener-null-browsing-context-crash.html new file mode 100644 index 00000000000..f41955eedd3 --- /dev/null +++ b/test/fixtures/wpt/dom/events/replace-event-listener-null-browsing-context-crash.html @@ -0,0 +1,16 @@ + +Event listeners: replace listener after moving between documents + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/resources/empty-document.html b/test/fixtures/wpt/dom/events/resources/empty-document.html new file mode 100644 index 00000000000..b9cd130a07f --- /dev/null +++ b/test/fixtures/wpt/dom/events/resources/empty-document.html @@ -0,0 +1,3 @@ + + + diff --git a/test/fixtures/wpt/dom/events/resources/event-global-extra-frame.html b/test/fixtures/wpt/dom/events/resources/event-global-extra-frame.html new file mode 100644 index 00000000000..241dda8b66f --- /dev/null +++ b/test/fixtures/wpt/dom/events/resources/event-global-extra-frame.html @@ -0,0 +1,9 @@ + diff --git a/test/fixtures/wpt/dom/events/resources/event-global-is-still-set-when-coercing-beforeunload-result-frame.html b/test/fixtures/wpt/dom/events/resources/event-global-is-still-set-when-coercing-beforeunload-result-frame.html new file mode 100644 index 00000000000..5df4fa27936 --- /dev/null +++ b/test/fixtures/wpt/dom/events/resources/event-global-is-still-set-when-coercing-beforeunload-result-frame.html @@ -0,0 +1,6 @@ + + + + diff --git a/test/fixtures/wpt/dom/events/resources/prefixed-animation-event-tests.js b/test/fixtures/wpt/dom/events/resources/prefixed-animation-event-tests.js new file mode 100644 index 00000000000..021b6bb9dfd --- /dev/null +++ b/test/fixtures/wpt/dom/events/resources/prefixed-animation-event-tests.js @@ -0,0 +1,366 @@ +'use strict' + +// Runs a set of tests for a given prefixed/unprefixed animation event (e.g. +// animationstart/webkitAnimationStart). +// +// The eventDetails object must have the following form: +// { +// isTransition: false, <-- can be omitted, default false +// unprefixedType: 'animationstart', +// prefixedType: 'webkitAnimationStart', +// animationCssStyle: '1ms', <-- must NOT include animation name or +// transition property +// } +function runAnimationEventTests(eventDetails) { + const { + isTransition, + unprefixedType, + prefixedType, + animationCssStyle + } = eventDetails; + + // Derive the DOM event handler names, e.g. onanimationstart. + const unprefixedHandler = `on${unprefixedType}`; + const prefixedHandler = `on${prefixedType.toLowerCase()}`; + + const style = document.createElement('style'); + document.head.appendChild(style); + if (isTransition) { + style.sheet.insertRule( + `.baseStyle { width: 100px; transition: width ${animationCssStyle}; }`); + style.sheet.insertRule('.transition { width: 200px !important; }'); + } else { + style.sheet.insertRule('@keyframes anim {}'); + } + + function triggerAnimation(div) { + if (isTransition) { + div.classList.add('transition'); + } else { + div.style.animation = `anim ${animationCssStyle}`; + } + } + + test(t => { + const div = createDiv(t); + + assert_equals(div[unprefixedHandler], null, + `${unprefixedHandler} should initially be null`); + assert_equals(div[prefixedHandler], null, + `${prefixedHandler} should initially be null`); + + // Setting one should not affect the other. + div[unprefixedHandler] = () => { }; + + assert_not_equals(div[unprefixedHandler], null, + `setting ${unprefixedHandler} should make it non-null`); + assert_equals(div[prefixedHandler], null, + `setting ${unprefixedHandler} should not affect ${prefixedHandler}`); + + div[prefixedHandler] = () => { }; + + assert_not_equals(div[prefixedHandler], null, + `setting ${prefixedHandler} should make it non-null`); + assert_not_equals(div[unprefixedHandler], div[prefixedHandler], + 'the setters should be different'); + }, `${unprefixedHandler} and ${prefixedHandler} are not aliases`); + + // The below tests primarily test the interactions of prefixed animation + // events in the algorithm for invoking events: + // https://dom.spec.whatwg.org/#concept-event-listener-invoke + + promise_test(async t => { + const div = createDiv(t); + + let receivedEventCount = 0; + addTestScopedEventHandler(t, div, prefixedHandler, () => { + receivedEventCount++; + }); + addTestScopedEventListener(t, div, prefixedType, () => { + receivedEventCount++; + }); + + // The HTML spec[0] specifies that the prefixed event handlers have an + // 'Event handler event type' of the appropriate prefixed event type. E.g. + // onwebkitanimationend creates a listener for the event type + // 'webkitAnimationEnd'. + // + // [0]: https://html.spec.whatwg.org/multipage/webappapis.html#event-handlers-on-elements,-document-objects,-and-window-objects + div.dispatchEvent(new AnimationEvent(prefixedType)); + assert_equals(receivedEventCount, 2, + 'prefixed listener and handler received event'); + }, `dispatchEvent of a ${prefixedType} event does trigger a ` + + `prefixed event handler or listener`); + + promise_test(async t => { + const div = createDiv(t); + + let receivedEvent = false; + addTestScopedEventHandler(t, div, unprefixedHandler, () => { + receivedEvent = true; + }); + addTestScopedEventListener(t, div, unprefixedType, () => { + receivedEvent = true; + }); + + div.dispatchEvent(new AnimationEvent(prefixedType)); + assert_false(receivedEvent, + 'prefixed listener or handler received event'); + }, `dispatchEvent of a ${prefixedType} event does not trigger an ` + + `unprefixed event handler or listener`); + + + promise_test(async t => { + const div = createDiv(t); + + let receivedEvent = false; + addTestScopedEventHandler(t, div, prefixedHandler, () => { + receivedEvent = true; + }); + addTestScopedEventListener(t, div, prefixedType, () => { + receivedEvent = true; + }); + + // The rewrite rules from + // https://dom.spec.whatwg.org/#concept-event-listener-invoke step 8 do not + // apply because isTrusted will be false. + div.dispatchEvent(new AnimationEvent(unprefixedType)); + assert_false(receivedEvent, 'prefixed listener or handler received event'); + }, `dispatchEvent of an ${unprefixedType} event does not trigger a ` + + `prefixed event handler or listener`); + + promise_test(async t => { + const div = createDiv(t); + + let receivedEvent = false; + addTestScopedEventHandler(t, div, prefixedHandler, () => { + receivedEvent = true; + }); + + triggerAnimation(div); + await waitForEventThenAnimationFrame(t, unprefixedType); + assert_true(receivedEvent, `received ${prefixedHandler} event`); + }, `${prefixedHandler} event handler should trigger for an animation`); + + promise_test(async t => { + const div = createDiv(t); + + let receivedPrefixedEvent = false; + addTestScopedEventHandler(t, div, prefixedHandler, () => { + receivedPrefixedEvent = true; + }); + let receivedUnprefixedEvent = false; + addTestScopedEventHandler(t, div, unprefixedHandler, () => { + receivedUnprefixedEvent = true; + }); + + triggerAnimation(div); + await waitForEventThenAnimationFrame(t, unprefixedType); + assert_true(receivedUnprefixedEvent, `received ${unprefixedHandler} event`); + assert_false(receivedPrefixedEvent, `received ${prefixedHandler} event`); + }, `${prefixedHandler} event handler should not trigger if an unprefixed ` + + `event handler also exists`); + + promise_test(async t => { + const div = createDiv(t); + + let receivedPrefixedEvent = false; + addTestScopedEventHandler(t, div, prefixedHandler, () => { + receivedPrefixedEvent = true; + }); + let receivedUnprefixedEvent = false; + addTestScopedEventListener(t, div, unprefixedType, () => { + receivedUnprefixedEvent = true; + }); + + triggerAnimation(div); + await waitForEventThenAnimationFrame(t, unprefixedHandler); + assert_true(receivedUnprefixedEvent, `received ${unprefixedHandler} event`); + assert_false(receivedPrefixedEvent, `received ${prefixedHandler} event`); + }, `${prefixedHandler} event handler should not trigger if an unprefixed ` + + `listener also exists`); + + promise_test(async t => { + // We use a parent/child relationship to be able to register both prefixed + // and unprefixed event handlers without the deduplication logic kicking in. + const parent = createDiv(t); + const child = createDiv(t); + parent.appendChild(child); + // After moving the child, we have to clean style again. + getComputedStyle(child).transition; + getComputedStyle(child).width; + + let observedUnprefixedType; + addTestScopedEventHandler(t, parent, unprefixedHandler, e => { + observedUnprefixedType = e.type; + }); + let observedPrefixedType; + addTestScopedEventHandler(t, child, prefixedHandler, e => { + observedPrefixedType = e.type; + }); + + triggerAnimation(child); + await waitForEventThenAnimationFrame(t, unprefixedType); + + assert_equals(observedUnprefixedType, unprefixedType); + assert_equals(observedPrefixedType, prefixedType); + }, `event types for prefixed and unprefixed ${unprefixedType} event ` + + `handlers should be named appropriately`); + + promise_test(async t => { + const div = createDiv(t); + + let receivedEvent = false; + addTestScopedEventListener(t, div, prefixedType, () => { + receivedEvent = true; + }); + + triggerAnimation(div); + await waitForEventThenAnimationFrame(t, unprefixedHandler); + assert_true(receivedEvent, `received ${prefixedType} event`); + }, `${prefixedType} event listener should trigger for an animation`); + + promise_test(async t => { + const div = createDiv(t); + + let receivedPrefixedEvent = false; + addTestScopedEventListener(t, div, prefixedType, () => { + receivedPrefixedEvent = true; + }); + let receivedUnprefixedEvent = false; + addTestScopedEventListener(t, div, unprefixedType, () => { + receivedUnprefixedEvent = true; + }); + + triggerAnimation(div); + await waitForEventThenAnimationFrame(t, unprefixedHandler); + assert_true(receivedUnprefixedEvent, `received ${unprefixedType} event`); + assert_false(receivedPrefixedEvent, `received ${prefixedType} event`); + }, `${prefixedType} event listener should not trigger if an unprefixed ` + + `listener also exists`); + + promise_test(async t => { + const div = createDiv(t); + + let receivedPrefixedEvent = false; + addTestScopedEventListener(t, div, prefixedType, () => { + receivedPrefixedEvent = true; + }); + let receivedUnprefixedEvent = false; + addTestScopedEventHandler(t, div, unprefixedHandler, () => { + receivedUnprefixedEvent = true; + }); + + triggerAnimation(div); + await waitForEventThenAnimationFrame(t, unprefixedHandler); + assert_true(receivedUnprefixedEvent, `received ${unprefixedType} event`); + assert_false(receivedPrefixedEvent, `received ${prefixedType} event`); + }, `${prefixedType} event listener should not trigger if an unprefixed ` + + `event handler also exists`); + + promise_test(async t => { + // We use a parent/child relationship to be able to register both prefixed + // and unprefixed event listeners without the deduplication logic kicking in. + const parent = createDiv(t); + const child = createDiv(t); + parent.appendChild(child); + // After moving the child, we have to clean style again. + getComputedStyle(child).transition; + getComputedStyle(child).width; + + let observedUnprefixedType; + addTestScopedEventListener(t, parent, unprefixedType, e => { + observedUnprefixedType = e.type; + }); + let observedPrefixedType; + addTestScopedEventListener(t, child, prefixedType, e => { + observedPrefixedType = e.type; + }); + + triggerAnimation(child); + await waitForEventThenAnimationFrame(t, unprefixedHandler); + + assert_equals(observedUnprefixedType, unprefixedType); + assert_equals(observedPrefixedType, prefixedType); + }, `event types for prefixed and unprefixed ${unprefixedType} event ` + + `listeners should be named appropriately`); + + promise_test(async t => { + const div = createDiv(t); + + let receivedEvent = false; + addTestScopedEventListener(t, div, prefixedType.toLowerCase(), () => { + receivedEvent = true; + }); + addTestScopedEventListener(t, div, prefixedType.toUpperCase(), () => { + receivedEvent = true; + }); + + triggerAnimation(div); + await waitForEventThenAnimationFrame(t, unprefixedHandler); + assert_false(receivedEvent, `received ${prefixedType} event`); + }, `${prefixedType} event listener is case sensitive`); +} + +// Below are utility functions. + +// Creates a div element, appends it to the document body and removes the +// created element during test cleanup. +function createDiv(test) { + const element = document.createElement('div'); + element.classList.add('baseStyle'); + document.body.appendChild(element); + test.add_cleanup(() => { + element.remove(); + }); + + // Flush style before returning. Some browsers only do partial style re-calc, + // so ask for all important properties to make sure they are applied. + getComputedStyle(element).transition; + getComputedStyle(element).width; + + return element; +} + +// Adds an event handler for |handlerName| (calling |callback|) to the given +// |target|, that will automatically be cleaned up at the end of the test. +function addTestScopedEventHandler(test, target, handlerName, callback) { + assert_regexp_match( + handlerName, /^on/, 'Event handler names must start with "on"'); + assert_equals(target[handlerName], null, + `${handlerName} must be supported and not previously set`); + target[handlerName] = callback; + // We need this cleaned up even if the event handler doesn't run. + test.add_cleanup(() => { + if (target[handlerName]) + target[handlerName] = null; + }); +} + +// Adds an event listener for |type| (calling |callback|) to the given +// |target|, that will automatically be cleaned up at the end of the test. +function addTestScopedEventListener(test, target, type, callback) { + target.addEventListener(type, callback); + // We need this cleaned up even if the event handler doesn't run. + test.add_cleanup(() => { + target.removeEventListener(type, callback); + }); +} + +// Returns a promise that will resolve once the passed event (|eventName|) has +// triggered and one more animation frame has happened. Automatically chooses +// between an event handler or event listener based on whether |eventName| +// begins with 'on'. +// +// We always listen on window as we don't want to interfere with the test via +// triggering the prefixed event deduplication logic. +function waitForEventThenAnimationFrame(test, eventName) { + return new Promise((resolve, _) => { + const eventFunc = eventName.startsWith('on') + ? addTestScopedEventHandler : addTestScopedEventListener; + eventFunc(test, window, eventName, () => { + // rAF once to give the event under test time to come through. + requestAnimationFrame(resolve); + }); + }); +} diff --git a/test/fixtures/wpt/dom/events/scrolling/iframe-chains.html b/test/fixtures/wpt/dom/events/scrolling/iframe-chains.html new file mode 100644 index 00000000000..2d7e1827ada --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/iframe-chains.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +
    + +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/input-text-scroll-event-when-using-arrow-keys.html b/test/fixtures/wpt/dom/events/scrolling/input-text-scroll-event-when-using-arrow-keys.html new file mode 100644 index 00000000000..f84e4465275 --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/input-text-scroll-event-when-using-arrow-keys.html @@ -0,0 +1,71 @@ + + + + + + + + + + + +

    Moving the cursor using the arrow keys into an + input element fires scroll events when text has to scroll into view. + Uses arrow keys to move forward and backwards in the input + element.

    + + + + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/overscroll-deltas.html b/test/fixtures/wpt/dom/events/scrolling/overscroll-deltas.html new file mode 100644 index 00000000000..6f0b77f22ed --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/overscroll-deltas.html @@ -0,0 +1,85 @@ + + + + + + + + + + +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-document.html b/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-document.html new file mode 100644 index 00000000000..c054ffca9c4 --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-document.html @@ -0,0 +1,62 @@ + + + + + + + + + + +
    +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-element-with-overscroll-behavior.html b/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-element-with-overscroll-behavior.html new file mode 100644 index 00000000000..750080e6568 --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-element-with-overscroll-behavior.html @@ -0,0 +1,92 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-scrolled-element.html b/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-scrolled-element.html new file mode 100644 index 00000000000..cfc782a809a --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-scrolled-element.html @@ -0,0 +1,65 @@ + + + + + + + + + + +
    +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-window.html b/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-window.html new file mode 100644 index 00000000000..ef5ae3daef8 --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/overscroll-event-fired-to-window.html @@ -0,0 +1,52 @@ + + + + + + + + + + +
    +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/scroll_support.js b/test/fixtures/wpt/dom/events/scrolling/scroll_support.js new file mode 100644 index 00000000000..0a73f34fefc --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/scroll_support.js @@ -0,0 +1,97 @@ +const MAX_FRAME = 700; +const MAX_UNCHANGED_FRAMES = 20; + +// Returns a promise that resolves when the given condition is met or rejects +// after MAX_FRAME animation frames. +function waitFor(condition, error_message = 'Reaches the maximum frames.') { + return new Promise((resolve, reject) => { + function tick(frames) { + // We requestAnimationFrame either for MAX_FRAM frames or until condition + // is met. + if (frames >= MAX_FRAME) + reject(error_message); + else if (condition()) + resolve(); + else + requestAnimationFrame(tick.bind(this, frames + 1)); + } + tick(0); + }); +} + +function waitForCompositorCommit() { + return new Promise((resolve) => { + // rAF twice. + window.requestAnimationFrame(() => { + window.requestAnimationFrame(resolve); + }); + }); +} + +function waitForAnimationEnd(getValue) { + var last_changed_frame = 0; + var last_position = getValue(); + return new Promise((resolve, reject) => { + function tick(frames) { + // We requestAnimationFrame either for MAX_FRAME or until + // MAX_UNCHANGED_FRAMES with no change have been observed. + if (frames >= MAX_FRAME || frames - last_changed_frame > MAX_UNCHANGED_FRAMES) { + resolve(); + } else { + current_value = getValue(); + if (last_position != current_value) { + last_changed_frame = frames; + last_position = current_value; + } + requestAnimationFrame(tick.bind(this, frames + 1)); + } + } + tick(0); + }) +} + +function touchScrollInTarget(pixels_to_scroll, target, direction, pause_time_in_ms = 100) { + var x_delta = 0; + var y_delta = 0; + const num_movs = 5; + if (direction == "down") { + y_delta = -1 * pixels_to_scroll / num_movs; + } else if (direction == "up") { + y_delta = pixels_to_scroll / num_movs; + } else if (direction == "right") { + x_delta = -1 * pixels_to_scroll / num_movs; + } else if (direction == "left") { + x_delta = pixels_to_scroll / num_movs;; + } else { + throw("scroll direction '" + direction + "' is not expected, direction should be 'down', 'up', 'left' or 'right'"); + } + return new test_driver.Actions() + .addPointer("pointer1", "touch") + .pointerMove(0, 0, {origin: target}) + .pointerDown() + .pointerMove(x_delta, y_delta, {origin: target}) + .pointerMove(2 * x_delta, 2 * y_delta, {origin: target}) + .pointerMove(3 * x_delta, 3 * y_delta, {origin: target}) + .pointerMove(4 * x_delta, 4 * y_delta, {origin: target}) + .pointerMove(5 * x_delta, 5 * y_delta, {origin: target}) + .pause(pause_time_in_ms) + .pointerUp() + .send(); +} + +// Trigger fling by doing pointerUp right after pointerMoves. +function touchFlingInTarget(pixels_to_scroll, target, direction) { + touchScrollInTarget(pixels_to_scroll, target, direction, 0 /* pause_time */); +} + +function mouseActionsInTarget(target, origin, delta, pause_time_in_ms = 100) { + return new test_driver.Actions() + .addPointer("pointer1", "mouse") + .pointerMove(origin.x, origin.y, { origin: target }) + .pointerDown() + .pointerMove(origin.x + delta.x, origin.y + delta.y, { origin: target }) + .pointerMove(origin.x + delta.x * 2, origin.y + delta.y * 2, { origin: target }) + .pause(pause_time_in_ms) + .pointerUp() + .send(); +} diff --git a/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-after-snap.html b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-after-snap.html new file mode 100644 index 00000000000..ef1b495791c --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-after-snap.html @@ -0,0 +1,86 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html new file mode 100644 index 00000000000..79b5f5f0186 --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html @@ -0,0 +1,134 @@ + + + + + + + + + + + +
    +
    +
    +
    + + diff --git a/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html new file mode 100644 index 00000000000..63e1c3e22ea --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html @@ -0,0 +1,123 @@ + + + + + + + + + + + +
    +
    +
    +
    + + diff --git a/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-document.html b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-document.html new file mode 100644 index 00000000000..99c1c6930fa --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-document.html @@ -0,0 +1,69 @@ + + + + + + + + + + +
    +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-element-with-overscroll-behavior.html b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-element-with-overscroll-behavior.html new file mode 100644 index 00000000000..0269c66fdde --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-element-with-overscroll-behavior.html @@ -0,0 +1,93 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-scrolled-element.html b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-scrolled-element.html new file mode 100644 index 00000000000..87cad79df7c --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-scrolled-element.html @@ -0,0 +1,67 @@ + + + + + + + + + + +
    +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-window.html b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-window.html new file mode 100644 index 00000000000..f9510e6e231 --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-fired-to-window.html @@ -0,0 +1,54 @@ + + + + + + + + + + +
    +
    +
    +
    + + + diff --git a/test/fixtures/wpt/dom/events/scrolling/scrollend-event-for-user-scroll.html b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-for-user-scroll.html new file mode 100644 index 00000000000..30f16571cd8 --- /dev/null +++ b/test/fixtures/wpt/dom/events/scrolling/scrollend-event-for-user-scroll.html @@ -0,0 +1,138 @@ + + + + + + + + + + + + +
    +
    +
    +
    + + + + diff --git a/test/fixtures/wpt/dom/events/shadow-relatedTarget.html b/test/fixtures/wpt/dom/events/shadow-relatedTarget.html new file mode 100644 index 00000000000..713555b7d8a --- /dev/null +++ b/test/fixtures/wpt/dom/events/shadow-relatedTarget.html @@ -0,0 +1,30 @@ + + + + +
    + + diff --git a/test/fixtures/wpt/dom/events/webkit-animation-end-event.html b/test/fixtures/wpt/dom/events/webkit-animation-end-event.html new file mode 100644 index 00000000000..4186f6b7a9d --- /dev/null +++ b/test/fixtures/wpt/dom/events/webkit-animation-end-event.html @@ -0,0 +1,20 @@ + + +Prefixed CSS Animation end events + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/webkit-animation-iteration-event.html b/test/fixtures/wpt/dom/events/webkit-animation-iteration-event.html new file mode 100644 index 00000000000..fb251972a32 --- /dev/null +++ b/test/fixtures/wpt/dom/events/webkit-animation-iteration-event.html @@ -0,0 +1,23 @@ + + +Prefixed CSS Animation iteration events + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/webkit-animation-start-event.html b/test/fixtures/wpt/dom/events/webkit-animation-start-event.html new file mode 100644 index 00000000000..ad1036644a9 --- /dev/null +++ b/test/fixtures/wpt/dom/events/webkit-animation-start-event.html @@ -0,0 +1,20 @@ + + +Prefixed CSS Animation start events + + + + + + + + + diff --git a/test/fixtures/wpt/dom/events/webkit-transition-end-event.html b/test/fixtures/wpt/dom/events/webkit-transition-end-event.html new file mode 100644 index 00000000000..2741824e305 --- /dev/null +++ b/test/fixtures/wpt/dom/events/webkit-transition-end-event.html @@ -0,0 +1,21 @@ + + +Prefixed CSS Transition End event + + + + + + + + + diff --git a/test/fixtures/wpt/encoding/encodeInto.any.js b/test/fixtures/wpt/encoding/encodeInto.any.js index eca0e1bca15..69d7089006e 100644 --- a/test/fixtures/wpt/encoding/encodeInto.any.js +++ b/test/fixtures/wpt/encoding/encodeInto.any.js @@ -120,19 +120,22 @@ }); }); -[DataView, - Int8Array, - Int16Array, - Int32Array, - Uint16Array, - Uint32Array, - Uint8ClampedArray, - Float32Array, - Float64Array].forEach(view => { +["DataView", + "Int8Array", + "Int16Array", + "Int32Array", + "Uint16Array", + "Uint32Array", + "Uint8ClampedArray", + "BigInt64Array", + "BigUint64Array", + "Float32Array", + "Float64Array"].forEach(type => { ["ArrayBuffer", "SharedArrayBuffer"].forEach((arrayBufferOrSharedArrayBuffer) => { test(() => { - assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", new view(createBuffer(arrayBufferOrSharedArrayBuffer, 0)))); - }, "Invalid encodeInto() destination: " + view.name + ", backed by: " + arrayBufferOrSharedArrayBuffer); + const viewInstance = new self[type](createBuffer(arrayBufferOrSharedArrayBuffer, 0)); + assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", viewInstance)); + }, "Invalid encodeInto() destination: " + type + ", backed by: " + arrayBufferOrSharedArrayBuffer); }); }); diff --git a/test/fixtures/wpt/encoding/encodeInto.any.js.headers b/test/fixtures/wpt/encoding/encodeInto.any.js.headers new file mode 100644 index 00000000000..4fff9d9fba4 --- /dev/null +++ b/test/fixtures/wpt/encoding/encodeInto.any.js.headers @@ -0,0 +1,2 @@ +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: require-corp \ No newline at end of file diff --git a/test/fixtures/wpt/encoding/idlharness-shadowrealm.window.js b/test/fixtures/wpt/encoding/idlharness-shadowrealm.window.js new file mode 100644 index 00000000000..baf3efcbb02 --- /dev/null +++ b/test/fixtures/wpt/encoding/idlharness-shadowrealm.window.js @@ -0,0 +1,2 @@ +// META: script=/resources/idlharness-shadowrealm.js +idl_test_shadowrealm(["encoding"], ["streams"]); diff --git a/test/fixtures/wpt/encoding/sharedarraybuffer.https.html b/test/fixtures/wpt/encoding/sharedarraybuffer.https.html new file mode 100644 index 00000000000..2496edacb89 --- /dev/null +++ b/test/fixtures/wpt/encoding/sharedarraybuffer.https.html @@ -0,0 +1,14 @@ + + + + diff --git a/test/fixtures/wpt/encoding/sharedarraybuffer.https.html.headers b/test/fixtures/wpt/encoding/sharedarraybuffer.https.html.headers new file mode 100644 index 00000000000..4b06ac7cc63 --- /dev/null +++ b/test/fixtures/wpt/encoding/sharedarraybuffer.https.html.headers @@ -0,0 +1,2 @@ +Cross-Origin-Opener-Policy:same-origin +Cross-Origin-Embedder-Policy:require-corp diff --git a/test/fixtures/wpt/encoding/single-byte-decoder.window.js b/test/fixtures/wpt/encoding/single-byte-decoder.window.js new file mode 100644 index 00000000000..6bca8e62343 --- /dev/null +++ b/test/fixtures/wpt/encoding/single-byte-decoder.window.js @@ -0,0 +1,107 @@ +// META: timeout=long +// META: variant=?XMLHttpRequest +// META: variant=?TextDecoder +// META: variant=?document +// META: script=resources/encodings.js + +var singleByteEncodings = encodings_table.filter(function(group) { + return group.heading === "Legacy single-byte encodings"; +})[0].encodings, +// https://encoding.spec.whatwg.org/indexes.json + singleByteIndexes = { + "IBM866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], + "ISO-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "ISO-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], + "ISO-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], + "ISO-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], + "ISO-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], + "ISO-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "ISO-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "ISO-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], + "ISO-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], + "ISO-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], + "ISO-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "ISO-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], + "KOI8-R":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "KOI8-U":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], + "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], + "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], + "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], + "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], + "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], + "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], + "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] +} + +// For TextDecoder tests +var buffer = new ArrayBuffer(255), + view = new Uint8Array(buffer) +for(var i = 0, l = view.byteLength; i < l; i++) { + view[i] = i +} + +// For XMLHttpRequest and TextDecoder tests +function assert_decode(data, encoding) { + if(encoding == "ISO-8859-8-I") { + encoding = "ISO-8859-8" + } + for(var i = 0, l = data.length; i < l; i++) { + var cp = data.charCodeAt(i), + expectedCp = (i < 0x80) ? i : singleByteIndexes[encoding][i-0x80] + if(expectedCp == null) { + expectedCp = 0xFFFD + } + assert_equals(cp, expectedCp, encoding + ":" + i) + } +} + +var subsetTest = ""; +if (location.search) { + subsetTest = location.search.substr(1); +} + +// Setting up all the tests +for(var i = 0, l = singleByteEncodings.length; i < l; i++) { + var encoding = singleByteEncodings[i] + for(var ii = 0, ll = encoding.labels.length; ii < ll; ii++) { + var label = encoding.labels[ii] + + if (subsetTest == "XMLHttpRequest" || !subsetTest) { + async_test(function(t) { + var xhr = new XMLHttpRequest, + name = encoding.name // need scoped variable + xhr.open("GET", "resources/single-byte-raw.py?label=" + label) + xhr.send(null) + xhr.onload = t.step_func_done(function() { assert_decode(xhr.responseText, name) }) + }, encoding.name + ": " + label + " (XMLHttpRequest)") + } + + if (subsetTest == "TextDecoder" || !subsetTest) { + test(function() { + var d = new TextDecoder(label), + data = d.decode(view) + assert_equals(d.encoding, encoding.name.toLowerCase()) // ASCII names only, so safe + assert_decode(data, encoding.name) + }, encoding.name + ": " + label + " (TextDecoder)") + } + + if (subsetTest == "document" || !subsetTest) { + async_test(function(t) { + var frame = document.createElement("iframe"), + name = encoding.name; + frame.src = "resources/text-plain-charset.py?label=" + label + frame.onload = t.step_func_done(function() { + assert_equals(frame.contentDocument.characterSet, name) + assert_equals(frame.contentDocument.inputEncoding, name) + }) + t.add_cleanup(function() { document.body.removeChild(frame) }) + document.body.appendChild(frame) + }, encoding.name + ": " + label + " (document.characterSet and document.inputEncoding)") + } + } +} diff --git a/test/fixtures/wpt/encoding/streams/decode-utf8.any.js b/test/fixtures/wpt/encoding/streams/decode-utf8.any.js index 5abd8dcb8f9..f6fceb299bd 100644 --- a/test/fixtures/wpt/encoding/streams/decode-utf8.any.js +++ b/test/fixtures/wpt/encoding/streams/decode-utf8.any.js @@ -43,7 +43,16 @@ const array = await readableStreamToArray(output); assert_array_equals(array, [expectedOutputString], 'the output should be in one chunk'); - }, 'a trailing empty chunk should be ignored- ' + arrayBufferOrSharedArrayBuffer); + }, 'a trailing empty chunk should be ignored - ' + arrayBufferOrSharedArrayBuffer); + + promise_test(async () => { + const chunk = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, 3)); + chunk.set([0xF0, 0x9F, 0x92]); + const input = readableStreamFromArray([chunk]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, ['\uFFFD']); + }, 'UTF-8 EOF handling - ' + arrayBufferOrSharedArrayBuffer); }); promise_test(async () => { diff --git a/test/fixtures/wpt/encoding/streams/decode-utf8.any.js.headers b/test/fixtures/wpt/encoding/streams/decode-utf8.any.js.headers new file mode 100644 index 00000000000..4fff9d9fba4 --- /dev/null +++ b/test/fixtures/wpt/encoding/streams/decode-utf8.any.js.headers @@ -0,0 +1,2 @@ +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: require-corp \ No newline at end of file diff --git a/test/fixtures/wpt/encoding/textdecoder-copy.any.js.headers b/test/fixtures/wpt/encoding/textdecoder-copy.any.js.headers new file mode 100644 index 00000000000..4fff9d9fba4 --- /dev/null +++ b/test/fixtures/wpt/encoding/textdecoder-copy.any.js.headers @@ -0,0 +1,2 @@ +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: require-corp \ No newline at end of file diff --git a/test/fixtures/wpt/encoding/textdecoder-eof.any.js b/test/fixtures/wpt/encoding/textdecoder-eof.any.js new file mode 100644 index 00000000000..e41e326aace --- /dev/null +++ b/test/fixtures/wpt/encoding/textdecoder-eof.any.js @@ -0,0 +1,40 @@ +test(() => { + // Truncated sequences + assert_equals(new TextDecoder().decode(new Uint8Array([0xF0])), "\uFFFD"); + assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x9F])), "\uFFFD"); + assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x9F, 0x92])), "\uFFFD"); + + // Errors near end-of-queue + assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x9F, 0x41])), "\uFFFDA"); + assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x41, 0x42])), "\uFFFDAB"); + assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x41, 0xF0])), "\uFFFDA\uFFFD"); + assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x8F, 0x92])), "\uFFFD\uFFFD\uFFFD"); +}, "TextDecoder end-of-queue handling"); + +test(() => { + const decoder = new TextDecoder(); + decoder.decode(new Uint8Array([0xF0]), { stream: true }); + assert_equals(decoder.decode(), "\uFFFD"); + + decoder.decode(new Uint8Array([0xF0]), { stream: true }); + decoder.decode(new Uint8Array([0x9F]), { stream: true }); + assert_equals(decoder.decode(), "\uFFFD"); + + decoder.decode(new Uint8Array([0xF0, 0x9F]), { stream: true }); + assert_equals(decoder.decode(new Uint8Array([0x92])), "\uFFFD"); + + assert_equals(decoder.decode(new Uint8Array([0xF0, 0x9F]), { stream: true }), ""); + assert_equals(decoder.decode(new Uint8Array([0x41]), { stream: true }), "\uFFFDA"); + assert_equals(decoder.decode(), ""); + + assert_equals(decoder.decode(new Uint8Array([0xF0, 0x41, 0x42]), { stream: true }), "\uFFFDAB"); + assert_equals(decoder.decode(), ""); + + assert_equals(decoder.decode(new Uint8Array([0xF0, 0x41, 0xF0]), { stream: true }), "\uFFFDA"); + assert_equals(decoder.decode(), "\uFFFD"); + + assert_equals(decoder.decode(new Uint8Array([0xF0]), { stream: true }), ""); + assert_equals(decoder.decode(new Uint8Array([0x8F]), { stream: true }), "\uFFFD\uFFFD"); + assert_equals(decoder.decode(new Uint8Array([0x92]), { stream: true }), "\uFFFD"); + assert_equals(decoder.decode(), ""); +}, "TextDecoder end-of-queue handling using stream: true"); diff --git a/test/fixtures/wpt/encoding/textdecoder-streaming.any.js b/test/fixtures/wpt/encoding/textdecoder-streaming.any.js index 5717c2dbe00..e473a7056e2 100644 --- a/test/fixtures/wpt/encoding/textdecoder-streaming.any.js +++ b/test/fixtures/wpt/encoding/textdecoder-streaming.any.js @@ -28,10 +28,11 @@ var octets = { var decoder = new TextDecoder(encoding); for (var i = 0; i < encoded.length; i += len) { var sub = []; - for (var j = i; j < encoded.length && j < i + len; ++j) + for (var j = i; j < encoded.length && j < i + len; ++j) { sub.push(encoded[j]); - var uintArray = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, sub.length)); - uintArray.set(sub); + } + var uintArray = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, sub.length)); + uintArray.set(sub); out += decoder.decode(uintArray, {stream: true}); } out += decoder.decode(); @@ -39,4 +40,50 @@ var octets = { }, 'Streaming decode: ' + encoding + ', ' + len + ' byte window (' + arrayBufferOrSharedArrayBuffer + ')'); } }); + + test(() => { + function bytes(byteArray) { + const view = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, byteArray.length)); + view.set(byteArray); + return view; + } + + const decoder = new TextDecoder(); + + assert_equals(decoder.decode(bytes([0xC1]), {stream: true}), "\uFFFD"); + assert_equals(decoder.decode(), ""); + + assert_equals(decoder.decode(bytes([0xF5]), {stream: true}), "\uFFFD"); + assert_equals(decoder.decode(), ""); + + assert_equals(decoder.decode(bytes([0xE0, 0x41]), {stream: true}), "\uFFFDA"); + assert_equals(decoder.decode(bytes([0x42])), "B"); + + assert_equals(decoder.decode(bytes([0xE0, 0x80]), {stream: true}), "\uFFFD\uFFFD"); + assert_equals(decoder.decode(bytes([0x80])), "\uFFFD"); + + assert_equals(decoder.decode(bytes([0xED, 0xA0]), {stream: true}), "\uFFFD\uFFFD"); + assert_equals(decoder.decode(bytes([0x80])), "\uFFFD"); + + assert_equals(decoder.decode(bytes([0xF0, 0x41]), {stream: true}), "\uFFFDA"); + assert_equals(decoder.decode(bytes([0x42]), {stream: true}), "B"); + assert_equals(decoder.decode(bytes([0x43])), "C"); + + assert_equals(decoder.decode(bytes([0xF0, 0x80]), {stream: true}), "\uFFFD\uFFFD"); + assert_equals(decoder.decode(bytes([0x80]), {stream: true}), "\uFFFD"); + assert_equals(decoder.decode(bytes([0x80])), "\uFFFD"); + + assert_equals(decoder.decode(bytes([0xF4, 0xA0]), {stream: true}), "\uFFFD\uFFFD"); + assert_equals(decoder.decode(bytes([0x80]), {stream: true}), "\uFFFD"); + assert_equals(decoder.decode(bytes([0x80])), "\uFFFD"); + + assert_equals(decoder.decode(bytes([0xF0, 0x90, 0x41]), {stream: true}), "\uFFFDA"); + assert_equals(decoder.decode(bytes([0x42])), "B"); + + // 4-byte UTF-8 sequences always correspond to non-BMP characters. Here + // we make sure that, although the first 3 bytes are enough to emit the + // lead surrogate, it only gets emitted when the fourth byte is read. + assert_equals(decoder.decode(bytes([0xF0, 0x9F, 0x92]), {stream: true}), ""); + assert_equals(decoder.decode(bytes([0xA9])), "\u{1F4A9}"); + }, `Streaming decode: UTF-8 chunk tests (${arrayBufferOrSharedArrayBuffer})`); }) diff --git a/test/fixtures/wpt/encoding/textdecoder-streaming.any.js.headers b/test/fixtures/wpt/encoding/textdecoder-streaming.any.js.headers new file mode 100644 index 00000000000..4fff9d9fba4 --- /dev/null +++ b/test/fixtures/wpt/encoding/textdecoder-streaming.any.js.headers @@ -0,0 +1,2 @@ +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: require-corp \ No newline at end of file diff --git a/test/fixtures/wpt/hr-time/clamped-time-origin-isolated.https.html b/test/fixtures/wpt/hr-time/clamped-time-origin-isolated.https.html new file mode 100644 index 00000000000..ce30698b77a --- /dev/null +++ b/test/fixtures/wpt/hr-time/clamped-time-origin-isolated.https.html @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/test/fixtures/wpt/hr-time/clamped-time-origin-isolated.https.html.headers b/test/fixtures/wpt/hr-time/clamped-time-origin-isolated.https.html.headers new file mode 100644 index 00000000000..5f8621ef836 --- /dev/null +++ b/test/fixtures/wpt/hr-time/clamped-time-origin-isolated.https.html.headers @@ -0,0 +1,2 @@ +Cross-Origin-Embedder-Policy: require-corp +Cross-Origin-Opener-Policy: same-origin diff --git a/test/fixtures/wpt/hr-time/clamped-time-origin.html b/test/fixtures/wpt/hr-time/clamped-time-origin.html new file mode 100644 index 00000000000..1f438e9fefc --- /dev/null +++ b/test/fixtures/wpt/hr-time/clamped-time-origin.html @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/test/fixtures/wpt/hr-time/cross-origin-isolated-timing-attack.https.html b/test/fixtures/wpt/hr-time/cross-origin-isolated-timing-attack.https.html new file mode 100644 index 00000000000..88848740a90 --- /dev/null +++ b/test/fixtures/wpt/hr-time/cross-origin-isolated-timing-attack.https.html @@ -0,0 +1,22 @@ + + + + +window.performance.now should not enable timing attacks + + + + + + + + +

    Description

    +

    The recommended minimum resolution of the Performance interface should be set to 5 microseconds.

    + +
    + + + diff --git a/test/fixtures/wpt/hr-time/cross-origin-isolated-timing-attack.https.html.headers b/test/fixtures/wpt/hr-time/cross-origin-isolated-timing-attack.https.html.headers new file mode 100644 index 00000000000..5f8621ef836 --- /dev/null +++ b/test/fixtures/wpt/hr-time/cross-origin-isolated-timing-attack.https.html.headers @@ -0,0 +1,2 @@ +Cross-Origin-Embedder-Policy: require-corp +Cross-Origin-Opener-Policy: same-origin diff --git a/test/fixtures/wpt/hr-time/idlharness-shadowrealm.window.js b/test/fixtures/wpt/hr-time/idlharness-shadowrealm.window.js new file mode 100644 index 00000000000..3209db5f41b --- /dev/null +++ b/test/fixtures/wpt/hr-time/idlharness-shadowrealm.window.js @@ -0,0 +1,2 @@ +// META: script=/resources/idlharness-shadowrealm.js +idl_test_shadowrealm(["hr-time"], ["html", "dom"]); diff --git a/test/fixtures/wpt/hr-time/navigation-start-post-before-unload.html b/test/fixtures/wpt/hr-time/navigation-start-post-before-unload.html new file mode 100644 index 00000000000..88ee5db77eb --- /dev/null +++ b/test/fixtures/wpt/hr-time/navigation-start-post-before-unload.html @@ -0,0 +1,33 @@ + + + + + + + + + + diff --git a/test/fixtures/wpt/hr-time/resources/clamped-time-origin.js b/test/fixtures/wpt/hr-time/resources/clamped-time-origin.js new file mode 100644 index 00000000000..09967ed6d17 --- /dev/null +++ b/test/fixtures/wpt/hr-time/resources/clamped-time-origin.js @@ -0,0 +1,30 @@ +const run_test = isolated => { + // Multiplier to convert the clamped timestamps to microseconds. + const multiplier = 1000; + const windowOrigin = performance.timeOrigin; + // Clamp to at least 5 microseconds in isolated contexts and at least 100 in + // non-isolated ones. + const resolution = isolated ? 5 : 100; + + const create_worker = () => { + return new Promise(resolve => { + const workerScript = 'postMessage({timeOrigin: performance.timeOrigin})'; + const blob = new Blob([workerScript]); + const worker = new Worker(URL.createObjectURL(blob)); + worker.addEventListener('message', event => { + resolve(event.data.timeOrigin); + }); + }); + }; + promise_test(async t => { + assert_equals(self.crossOriginIsolated, isolated, + "crossOriginIsolated is properly set"); + let prev = windowOrigin; + let current; + for (let i = 1; i < 100; ++i) { + current = await create_worker(); + assert_true(current === prev || current - prev > resolution / 1000); + prev = current; + } + }, 'timeOrigins are clamped.'); +}; diff --git a/test/fixtures/wpt/hr-time/resources/post.html b/test/fixtures/wpt/hr-time/resources/post.html new file mode 100644 index 00000000000..b8541016dd7 --- /dev/null +++ b/test/fixtures/wpt/hr-time/resources/post.html @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/test/fixtures/wpt/hr-time/resources/timing-attack.js b/test/fixtures/wpt/hr-time/resources/timing-attack.js new file mode 100644 index 00000000000..f1fc786903a --- /dev/null +++ b/test/fixtures/wpt/hr-time/resources/timing-attack.js @@ -0,0 +1,42 @@ +function run_test(isolated) { + let resolution = 100; + if (isolated) { + resolution = 5; + } + test(function() { + function check_resolutions(times, length) { + const end = length - 2; + + // we compare each value with the following ones + for (let i = 0; i < end; i++) { + const h1 = times[i]; + for (let j = i+1; j < end; j++) { + const h2 = times[j]; + const diff = h2 - h1; + assert_true((diff === 0) || ((diff * 1000) >= resolution), + "Differences smaller than ' + resolution + ' microseconds: " + diff); + } + } + return true; + } + + const times = new Array(10); + let index = 0; + let hrt1, hrt2, hrt; + assert_equals(self.crossOriginIsolated, isolated, "Document cross-origin isolated value matches"); + + // rapid firing of performance.now + hrt1 = performance.now(); + hrt2 = performance.now(); + times[index++] = hrt1; + times[index++] = hrt2; + + // ensure that we get performance.now() to return a different value + do { + hrt = performance.now(); + times[index++] = hrt; + } while ((hrt - hrt1) === 0); + + assert_true(check_resolutions(times, index), 'Difference should be at least ' + resolution + ' microseconds.'); + }, 'The recommended minimum resolution of the Performance interface has been set to ' + resolution + ' microseconds for cross-origin isolated contexts.'); +} diff --git a/test/fixtures/wpt/hr-time/timing-attack.html b/test/fixtures/wpt/hr-time/timing-attack.html index 71ade4a8c48..6352b4dbe37 100644 --- a/test/fixtures/wpt/hr-time/timing-attack.html +++ b/test/fixtures/wpt/hr-time/timing-attack.html @@ -7,47 +7,14 @@ +

    Description

    -

    The recommended minimum resolution of the Performance interface should be set to 5 microseconds.

    +

    The recommended minimum resolution of the Performance interface should be set to 100 microseconds for non-isolated contexts.

    diff --git a/test/fixtures/wpt/resources/accesskey.js b/test/fixtures/wpt/resources/accesskey.js new file mode 100644 index 00000000000..e95c9d21e58 --- /dev/null +++ b/test/fixtures/wpt/resources/accesskey.js @@ -0,0 +1,34 @@ +/* + * Function that sends an accesskey using the proper key combination depending on the browser and OS. + * + * This needs that the test imports the following scripts: + * + * + * +*/ +function pressAccessKey(accessKey){ + let controlKey = '\uE009'; // left Control key + let altKey = '\uE00A'; // left Alt key + let optionKey = altKey; // left Option key + let shiftKey = '\uE008'; // left Shift key + // There are differences in using accesskey across browsers and OS's. + // See: // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/accesskey + let isMacOSX = navigator.userAgent.indexOf("Mac") != -1; + let osAccessKey = isMacOSX ? [controlKey, optionKey] : [shiftKey, altKey]; + let actions = new test_driver.Actions(); + // Press keys. + for (let key of osAccessKey) { + actions = actions.keyDown(key); + } + actions = actions + .keyDown(accessKey) + .addTick() + .keyUp(accessKey); + osAccessKey.reverse(); + for (let key of osAccessKey) { + actions = actions.keyUp(key); + } + return actions.send(); +} + + diff --git a/test/fixtures/wpt/resources/blank.html b/test/fixtures/wpt/resources/blank.html new file mode 100644 index 00000000000..edeaa45bb62 --- /dev/null +++ b/test/fixtures/wpt/resources/blank.html @@ -0,0 +1,16 @@ + + + + + Blank Page + + + + + diff --git a/test/fixtures/wpt/resources/channel.sub.js b/test/fixtures/wpt/resources/channel.sub.js new file mode 100644 index 00000000000..7385a65f6e4 --- /dev/null +++ b/test/fixtures/wpt/resources/channel.sub.js @@ -0,0 +1,1097 @@ +(function() { + function randInt(bits) { + if (bits < 1 || bits > 53) { + throw new TypeError(); + } else { + if (bits >= 1 && bits <= 30) { + return 0 | ((1 << bits) * Math.random()); + } else { + var high = (0 | ((1 << (bits - 30)) * Math.random())) * (1 << 30); + var low = 0 | ((1 << 30) * Math.random()); + return high + low; + } + } + } + + + function toHex(x, length) { + var rv = x.toString(16); + while (rv.length < length) { + rv = "0" + rv; + } + return rv; + } + + function createUuid() { + return [toHex(randInt(32), 8), + toHex(randInt(16), 4), + toHex(0x4000 | randInt(12), 4), + toHex(0x8000 | randInt(14), 4), + toHex(randInt(48), 12)].join("-"); + } + + + /** + * Cache of WebSocket instances per channel + * + * For reading there can only be one channel with each UUID, so we + * just have a simple map of {uuid: WebSocket}. The socket can be + * closed when the channel is closed. + * + * For writing there can be many channels for each uuid. Those can + * share a websocket (within a specific global), so we have a map + * of {uuid: [WebSocket, count]}. Count is incremented when a + * channel is opened with a given uuid, and decremented when its + * closed. When the count reaches zero we can close the underlying + * socket. + */ + class SocketCache { + constructor() { + this.readSockets = new Map(); + this.writeSockets = new Map(); + }; + + async getOrCreate(type, uuid, onmessage=null) { + function createSocket() { + let protocol = self.isSecureContext ? "wss" : "ws"; + let port = self.isSecureContext? "{{ports[wss][0]}}" : "{{ports[ws][0]}}"; + let url = `${protocol}://{{host}}:${port}/msg_channel?uuid=${uuid}&direction=${type}`; + let socket = new WebSocket(url); + if (onmessage !== null) { + socket.onmessage = onmessage; + }; + return new Promise(resolve => socket.addEventListener("open", () => resolve(socket))); + } + + let socket; + if (type === "read") { + if (this.readSockets.has(uuid)) { + throw new Error("Can't create multiple read sockets with same UUID"); + } + socket = await createSocket(); + // If the socket is closed by the server, ensure it's removed from the cache + socket.addEventListener("close", () => this.readSockets.delete(uuid)); + this.readSockets.set(uuid, socket); + } else if (type === "write") { + let count; + if (onmessage !== null) { + throw new Error("Can't set message handler for write sockets"); + } + if (this.writeSockets.has(uuid)) { + [socket, count] = this.writeSockets.get(uuid); + } else { + socket = await createSocket(); + count = 0; + } + count += 1; + // If the socket is closed by the server, ensure it's removed from the cache + socket.addEventListener("close", () => this.writeSockets.delete(uuid)); + this.writeSockets.set(uuid, [socket, count]); + } else { + throw new Error(`Unknown type ${type}`); + } + return socket; + }; + + async close(type, uuid) { + let target = type === "read" ? this.readSockets : this.writeSockets; + const data = target.get(uuid); + if (!data) { + return; + } + let count, socket; + if (type == "read") { + socket = data; + count = 0; + } else if (type === "write") { + [socket, count] = data; + count -= 1; + if (count > 0) { + target.set(uuid, [socket, count]); + } + }; + if (count <= 0 && socket) { + target.delete(uuid); + socket.close(1000); + await new Promise(resolve => socket.addEventListener("close", resolve)); + } + }; + + async closeAll() { + let sockets = []; + this.readSockets.forEach(value => sockets.push(value)); + this.writeSockets.forEach(value => sockets.push(value[0])); + let closePromises = sockets.map(socket => + new Promise(resolve => socket.addEventListener("close", resolve))); + sockets.forEach(socket => socket.close(1000)); + this.readSockets.clear(); + this.writeSockets.clear(); + await Promise.all(closePromises); + } + } + + const socketCache = new SocketCache(); + + /** + * Abstract base class for objects that allow sending / receiving + * messages over a channel. + */ + class Channel { + type = null; + + constructor(uuid) { + /** UUID for the channel */ + this.uuid = uuid; + this.socket = null; + this.eventListeners = { + connect: new Set(), + close: new Set() + }; + } + + hasConnection() { + return this.socket !== null && this.socket.readyState <= WebSocket.OPEN; + } + + /** + * Connect to the channel. + * + * @param {Function} onmessage - Event handler function for + * the underlying websocket message. + */ + async connect(onmessage) { + if (this.hasConnection()) { + return; + } + this.socket = await socketCache.getOrCreate(this.type, this.uuid, onmessage); + this._dispatch("connect"); + } + + /** + * Close the channel and underlying websocket connection + */ + async close() { + this.socket = null; + await socketCache.close(this.type, this.uuid); + this._dispatch("close"); + } + + /** + * Add an event callback function. Supported message types are + * "connect", "close", and "message" (for ``RecvChannel``). + * + * @param {string} type - Message type. + * @param {Function} fn - Callback function. This is called + * with an event-like object, with ``type`` and ``data`` + * properties. + */ + addEventListener(type, fn) { + if (typeof type !== "string") { + throw new TypeError(`Expected string, got ${typeof type}`); + } + if (typeof fn !== "function") { + throw new TypeError(`Expected function, got ${typeof fn}`); + } + if (!this.eventListeners.hasOwnProperty(type)) { + throw new Error(`Unrecognised event type ${type}`); + } + this.eventListeners[type].add(fn); + }; + + /** + * Remove an event callback function. + * + * @param {string} type - Event type. + * @param {Function} fn - Callback function to remove. + */ + removeEventListener(type, fn) { + if (!typeof type === "string") { + throw new TypeError(`Expected string, got ${typeof type}`); + } + if (typeof fn !== "function") { + throw new TypeError(`Expected function, got ${typeof fn}`); + } + let listeners = this.eventListeners[type]; + if (listeners) { + listeners.delete(fn); + } + }; + + _dispatch(type, data) { + let listeners = this.eventListeners[type]; + if (listeners) { + // If any listener throws we end up not calling the other + // listeners. This hopefully makes debugging easier, but + // is different to DOM event listeners. + listeners.forEach(fn => fn({type, data})); + } + }; + + } + + /** + * Send messages over a channel + */ + class SendChannel extends Channel { + type = "write"; + + /** + * Connect to the channel. Automatically called when sending the + * first message. + */ + async connect() { + return super.connect(null); + } + + async _send(cmd, body=null) { + if (!this.hasConnection()) { + await this.connect(); + } + this.socket.send(JSON.stringify([cmd, body])); + } + + /** + * Send a message. The message object must be JSON-serializable. + * + * @param {Object} msg - The message object to send. + */ + async send(msg) { + await this._send("message", msg); + } + + /** + * Disconnect the associated `RecvChannel <#RecvChannel>`_, if + * any, on the server side. + */ + async disconnectReader() { + await this._send("disconnectReader"); + } + + /** + * Disconnect this channel on the server side. + */ + async delete() { + await this._send("delete"); + } + }; + self.SendChannel = SendChannel; + + const recvChannelsCreated = new Set(); + + /** + * Receive messages over a channel + */ + class RecvChannel extends Channel { + type = "read"; + + constructor(uuid) { + if (recvChannelsCreated.has(uuid)) { + throw new Error(`Already created RecvChannel with id ${uuid}`); + } + super(uuid); + this.eventListeners.message = new Set(); + } + + async connect() { + if (this.hasConnection()) { + return; + } + await super.connect(event => this.readMessage(event.data)); + } + + readMessage(data) { + let msg = JSON.parse(data); + this._dispatch("message", msg); + } + + /** + * Wait for the next message and return it (after passing it to + * existing handlers) + * + * @returns {Promise} - Promise that resolves to the message data. + */ + nextMessage() { + return new Promise(resolve => { + let fn = ({data}) => { + this.removeEventListener("message", fn); + resolve(data); + }; + this.addEventListener("message", fn); + }); + } + } + + /** + * Create a new channel pair + * + * @returns {Array} - Array of [RecvChannel, SendChannel] for the same channel. + */ + self.channel = function() { + let uuid = createUuid(); + let recvChannel = new RecvChannel(uuid); + let sendChannel = new SendChannel(uuid); + return [recvChannel, sendChannel]; + }; + + /** + * Create an unconnected channel defined by a `uuid` in + * ``location.href`` for listening for `RemoteGlobal + * <#RemoteGlobal>`_ messages. + * + * @returns {RemoteGlobalCommandRecvChannel} - Disconnected channel + */ + self.global_channel = function() { + let uuid = new URLSearchParams(location.search).get("uuid"); + if (!uuid) { + throw new Error("URL must have a uuid parameter to use as a RemoteGlobal"); + } + return new RemoteGlobalCommandRecvChannel(new RecvChannel(uuid)); + }; + + /** + * Start listening for `RemoteGlobal <#RemoteGlobal>`_ messages on + * a channel defined by a `uuid` in `location.href` + * + * @returns {RemoteGlobalCommandRecvChannel} - Connected channel + */ + self.start_global_channel = async function() { + let channel = self.global_channel(); + await channel.connect(); + return channel; + }; + + /** + * Close all WebSockets used by channels in the current realm. + * + */ + self.close_all_channel_sockets = async function() { + await socketCache.closeAll(); + // Spinning the event loop after the close events is necessary to + // ensure that the channels really are closed and don't affect + // bfcache behaviour in at least some implementations. + await new Promise(resolve => setTimeout(resolve, 0)); + }; + + /** + * Handler for `RemoteGlobal <#RemoteGlobal>`_ commands. + * + * This can't be constructed directly but must be obtained from + * `global_channel() <#global_channel>`_ or + * `start_global_channel() <#start_global_channel>`_. + */ + class RemoteGlobalCommandRecvChannel { + constructor(recvChannel) { + this.channel = recvChannel; + this.uuid = recvChannel.uuid; + this.channel.addEventListener("message", ({data}) => this.handleMessage(data)); + this.messageHandlers = new Set(); + }; + + /** + * Connect to the channel and start handling messages. + */ + async connect() { + await this.channel.connect(); + } + + /** + * Close the channel and underlying websocket connection + */ + async close() { + await this.channel.close(); + } + + async handleMessage(msg) { + const {id, command, params, respChannel} = msg; + let result = {}; + let resp = {id, result}; + if (command === "call") { + const fn = deserialize(params.fn); + const args = params.args.map(deserialize); + try { + let resultValue = await fn(...args); + result.result = serialize(resultValue); + } catch(e) { + let exception = serialize(e); + const getAsInt = (obj, prop) => { + let value = prop in obj ? parseInt(obj[prop]) : 0; + return Number.isNaN(value) ? 0 : value; + }; + result.exceptionDetails = { + text: e.toString(), + lineNumber: getAsInt(e, "lineNumber"), + columnNumber: getAsInt(e, "columnNumber"), + exception + }; + } + } else if (command === "postMessage") { + this.messageHandlers.forEach(fn => fn(deserialize(params.msg))); + } + if (respChannel) { + let chan = deserialize(respChannel); + await chan.connect(); + await chan.send(resp); + } + } + + /** + * Add a handler for ``postMessage`` messages + * + * @param {Function} fn - Callback function that receives the + * message. + */ + addMessageHandler(fn) { + this.messageHandlers.add(fn); + } + + /** + * Remove a handler for ``postMessage`` messages + * + * @param {Function} fn - Callback function to remove + */ + removeMessageHandler(fn) { + this.messageHandlers.delete(fn); + } + + /** + * Wait for the next ``postMessage`` message and return it + * (after passing it to existing handlers) + * + * @returns {Promise} - Promise that resolves to the message. + */ + nextMessage() { + return new Promise(resolve => { + let fn = (msg) => { + this.removeMessageHandler(fn); + resolve(msg); + }; + this.addMessageHandler(fn); + }); + } + } + + class RemoteGlobalResponseRecvChannel { + constructor(recvChannel) { + this.channel = recvChannel; + this.channel.addEventListener("message", ({data}) => this.handleMessage(data)); + this.responseHandlers = new Map(); + } + + setResponseHandler(commandId, fn) { + this.responseHandlers.set(commandId, fn); + } + + handleMessage(msg) { + let {id, result} = msg; + let handler = this.responseHandlers.get(id); + if (handler) { + this.responseHandlers.delete(id); + handler(result); + } + } + + close() { + return this.channel.close(); + } + } + + /** + * Object representing a remote global that has a + * `RemoteGlobalCommandRecvChannel + * <#RemoteGlobalCommandRecvChannel>`_ + */ + class RemoteGlobal { + /** + * Create a new RemoteGlobal object. + * + * This doesn't actually construct the global itself; that + * must be done elsewhere, with a ``uuid`` query parameter in + * its URL set to the same as the ``uuid`` property of this + * object. + * + * @param {SendChannel|string} [dest] - Either a SendChannel + * to the destination, or the UUID of the destination. If + * ommitted, a new UUID is generated, which can be used when + * constructing the URL for the global. + * + */ + constructor(dest) { + if (dest === undefined || dest === null) { + dest = createUuid(); + } + if (typeof dest == "string") { + /** UUID for the global */ + this.uuid = dest; + this.sendChannel = new SendChannel(dest); + } else if (dest instanceof SendChannel) { + this.sendChannel = dest; + this.uuid = dest.uuid; + } else { + throw new TypeError("Unrecognised type, expected string or SendChannel"); + } + this.recvChannel = null; + this.respChannel = null; + this.connected = false; + this.commandId = 0; + } + + /** + * Connect to the channel. Automatically called when sending the + * first message + */ + async connect() { + if (this.connected) { + return; + } + let [recvChannel, respChannel] = self.channel(); + await Promise.all([this.sendChannel.connect(), recvChannel.connect()]); + this.recvChannel = new RemoteGlobalResponseRecvChannel(recvChannel); + this.respChannel = respChannel; + this.connected = true; + } + + async sendMessage(command, params, hasResp=true) { + if (!this.connected) { + await this.connect(); + } + let msg = {id: this.commandId++, command, params}; + if (hasResp) { + msg.respChannel = serialize(this.respChannel); + } + let response; + if (hasResp) { + response = new Promise(resolve => + this.recvChannel.setResponseHandler(msg.id, resolve)); + } else { + response = null; + } + this.sendChannel.send(msg); + return await response; + } + + /** + * Run the function ``fn`` in the remote global, passing arguments + * ``args``, and return the result after awaiting any returned + * promise. + * + * @param {Function} fn - Function to run in the remote global. + * @param {...Any} args - Arguments to pass to the function + * @returns {Promise} - Promise resolving to the return value + * of the function. + */ + async call(fn, ...args) { + let result = await this.sendMessage("call", {fn: serialize(fn), args: args.map(x => serialize(x))}, true); + if (result.exceptionDetails) { + throw deserialize(result.exceptionDetails.exception); + } + return deserialize(result.result); + } + + /** + * Post a message to the remote + * + * @param {Any} msg - The message to send. + */ + async postMessage(msg) { + await this.sendMessage("postMessage", {msg: serialize(msg)}, false); + } + + /** + * Disconnect the associated `RemoteGlobalCommandRecvChannel + * <#RemoteGlobalCommandRecvChannel>`_, if any, on the server + * side. + * + * @returns {Promise} - Resolved once the channel is disconnected. + */ + disconnectReader() { + // This causes any readers to disconnect until they are explictly reconnected + return this.sendChannel.disconnectReader(); + } + + /** + * Close the channel and underlying websocket connections + */ + close() { + let closers = [this.sendChannel.close()]; + if (this.recvChannel !== null) { + closers.push(this.recvChannel.close()); + } + if (this.respChannel !== null) { + closers.push(this.respChannel.close()); + } + return Promise.all(closers); + } + } + + self.RemoteGlobal = RemoteGlobal; + + function typeName(value) { + let type = typeof value; + if (type === "undefined" || + type === "string" || + type === "boolean" || + type === "number" || + type === "bigint" || + type === "symbol" || + type === "function") { + return type; + } + + if (value === null) { + return "null"; + } + // The handling of cross-global objects here is broken + if (value instanceof RemoteObject) { + return "remoteobject"; + } + if (value instanceof SendChannel) { + return "sendchannel"; + } + if (value instanceof RecvChannel) { + return "recvchannel"; + } + if (value instanceof Error) { + return "error"; + } + if (Array.isArray(value)) { + return "array"; + } + let constructor = value.constructor && value.constructor.name; + if (constructor === "RegExp" || + constructor === "Date" || + constructor === "Map" || + constructor === "Set" || + constructor == "WeakMap" || + constructor == "WeakSet") { + return constructor.toLowerCase(); + } + // The handling of cross-global objects here is broken + if (typeof window == "object" && window === self) { + if (value instanceof Element) { + return "element"; + } + if (value instanceof Document) { + return "document"; + } + if (value instanceof Node) { + return "node"; + } + if (value instanceof Window) { + return "window"; + } + } + if (Promise.resolve(value) === value) { + return "promise"; + } + return "object"; + } + + let remoteObjectsById = new Map(); + + function remoteId(obj) { + let rv; + rv = createUuid(); + remoteObjectsById.set(rv, obj); + return rv; + } + + /** + * Representation of a non-primitive type passed through a channel + */ + class RemoteObject { + constructor(type, objectId) { + this.type = type; + this.objectId = objectId; + } + + /** + * Create a RemoteObject containing a handle to reference obj + * + * @param {Any} obj - The object to reference. + */ + static from(obj) { + let type = typeName(obj); + let id = remoteId(obj); + return new RemoteObject(type, id); + } + + /** + * Return the local object referenced by the ``objectId`` of + * this ``RemoteObject``, or ``null`` if there isn't a such an + * object in this realm. + */ + toLocal() { + if (remoteObjectsById.has(this.objectId)) { + return remoteObjectsById.get(this.objectId); + } + return null; + } + + /** + * Remove the object from the local cache. This means that future + * calls to ``toLocal`` with the same objectId will always return + * ``null``. + */ + delete() { + remoteObjectsById.delete(this.objectId); + } + } + + self.RemoteObject = RemoteObject; + + /** + * Serialize an object as a JSON-compatible representation. + * + * The format used is similar (but not identical to) + * `WebDriver-BiDi + * `_. + * + * Each item to be serialized can have the following fields: + * + * type - The name of the type being represented e.g. "string", or + * "map". For primitives this matches ``typeof``, but for + * ``object`` types that have particular support in the protocol + * e.g. arrays and maps, it is a custom value. + * + * value - A serialized representation of the object value. For + * container types this is a JSON container (i.e. an object or an + * array) containing a serialized representation of the child + * values. + * + * objectId - An integer used to handle object graphs. Where + * an object is present more than once in the serialization, the + * first instance has both ``value`` and ``objectId`` fields, but + * when encountered again, only ``objectId`` is present, with the + * same value as the first instance of the object. + * + * @param {Any} inValue - The value to be serialized. + * @returns {Object} - The serialized object value. + */ + function serialize(inValue) { + const queue = [{item: inValue}]; + let outValue = null; + + // Map from container object input to output value + let objectsSeen = new Map(); + let lastObjectId = 0; + + /* Instead of making this recursive, use a queue holding the objects to be + * serialized. Each item in the queue can have the following properties: + * + * item (required) - the input item to be serialized + * + * target - For collections, the output serialized object to + * which the serialization of the current item will be added. + * + * targetName - For serializing object members, the name of + * the property. For serializing maps either "key" or "value", + * depending on whether the item represents a key or a value + * in the map. + */ + while (queue.length > 0) { + const {item, target, targetName} = queue.shift(); + let type = typeName(item); + + let serialized = {type}; + + if (objectsSeen.has(item)) { + let outputValue = objectsSeen.get(item); + if (!outputValue.hasOwnProperty("objectId")) { + outputValue.objectId = lastObjectId++; + } + serialized.objectId = outputValue.objectId; + } else { + switch (type) { + case "undefined": + case "null": + break; + case "string": + case "boolean": + serialized.value = item; + break; + case "number": + if (item !== item) { + serialized.value = "NaN"; + } else if (item === 0 && 1/item == Number.NEGATIVE_INFINITY) { + serialized.value = "-0"; + } else if (item === Number.POSITIVE_INFINITY) { + serialized.value = "+Infinity"; + } else if (item === Number.NEGATIVE_INFINITY) { + serialized.value = "-Infinity"; + } else { + serialized.value = item; + } + break; + case "bigint": + case "function": + serialized.value = item.toString(); + break; + case "remoteobject": + serialized.value = { + type: item.type, + objectId: item.objectId + }; + break; + case "sendchannel": + serialized.value = item.uuid; + break; + case "regexp": + serialized.value = { + pattern: item.source, + flags: item.flags + }; + break; + case "date": + serialized.value = Date.prototype.toJSON.call(item); + break; + case "error": + serialized.value = { + type: item.constructor.name, + name: item.name, + message: item.message, + lineNumber: item.lineNumber, + columnNumber: item.columnNumber, + fileName: item.fileName, + stack: item.stack, + }; + break; + case "array": + case "set": + serialized.value = []; + for (let child of item) { + queue.push({item: child, target: serialized}); + } + break; + case "object": + serialized.value = {}; + for (let [targetName, child] of Object.entries(item)) { + queue.push({item: child, target: serialized, targetName}); + } + break; + case "map": + serialized.value = []; + for (let [childKey, childValue] of item.entries()) { + queue.push({item: childKey, target: serialized, targetName: "key"}); + queue.push({item: childValue, target: serialized, targetName: "value"}); + } + break; + default: + throw new TypeError(`Can't serialize value of type ${type}; consider using RemoteObject.from() to wrap the object`); + }; + } + if (serialized.objectId === undefined) { + objectsSeen.set(item, serialized); + } + + if (target === undefined) { + if (outValue !== null) { + throw new Error("Tried to create multiple output values"); + } + outValue = serialized; + } else { + switch (target.type) { + case "array": + case "set": + target.value.push(serialized); + break; + case "object": + target.value[targetName] = serialized; + break; + case "map": + // We always serialize key and value as adjacent items in the queue, + // so when we get the key push a new output array and then the value will + // be added on the next iteration. + if (targetName === "key") { + target.value.push([]); + } + target.value[target.value.length - 1].push(serialized); + break; + default: + throw new Error(`Unknown collection target type ${target.type}`); + } + } + } + return outValue; + } + + /** + * Deserialize an object from a JSON-compatible representation. + * + * For details on the serialized representation see serialize(). + * + * @param {Object} obj - The value to be deserialized. + * @returns {Any} - The deserialized value. + */ + function deserialize(obj) { + let deserialized = null; + let queue = [{item: obj, target: null}]; + let objectMap = new Map(); + + /* Instead of making this recursive, use a queue holding the objects to be + * deserialized. Each item in the queue has the following properties: + * + * item - The input item to be deserialised. + * + * target - For members of a collection, a wrapper around the + * output collection. This has a ``type`` field which is the + * name of the collection type, and a ``value`` field which is + * the actual output collection. For primitives, this is null. + * + * targetName - For object members, the property name on the + * output object. For maps, "key" if the item is a key in the output map, + * or "value" if it's a value in the output map. + */ + while (queue.length > 0) { + const {item, target, targetName} = queue.shift(); + const {type, value, objectId} = item; + let result; + let newTarget; + if (objectId !== undefined && value === undefined) { + result = objectMap.get(objectId); + } else { + switch(type) { + case "undefined": + result = undefined; + break; + case "null": + result = null; + break; + case "string": + case "boolean": + result = value; + break; + case "number": + if (typeof value === "string") { + switch(value) { + case "NaN": + result = NaN; + break; + case "-0": + result = -0; + break; + case "+Infinity": + result = Number.POSITIVE_INFINITY; + break; + case "-Infinity": + result = Number.NEGATIVE_INFINITY; + break; + default: + throw new Error(`Unexpected number value "${value}"`); + } + } else { + result = value; + } + break; + case "bigint": + result = BigInt(value); + break; + case "function": + result = new Function("...args", `return (${value}).apply(null, args)`); + break; + case "remoteobject": + let remote = new RemoteObject(value.type, value.objectId); + let local = remote.toLocal(); + if (local !== null) { + result = local; + } else { + result = remote; + } + break; + case "sendchannel": + result = new SendChannel(value); + break; + case "regexp": + result = new RegExp(value.pattern, value.flags); + break; + case "date": + result = new Date(value); + break; + case "error": + // The item.value.type property is the name of the error constructor. + // If we have a constructor with the same name in the current realm, + // construct an instance of that type, otherwise use a generic Error + // type. + if (item.value.type in self && + typeof self[item.value.type] === "function") { + result = new self[item.value.type](item.value.message); + } else { + result = new Error(item.value.message); + } + result.name = item.value.name; + result.lineNumber = item.value.lineNumber; + result.columnNumber = item.value.columnNumber; + result.fileName = item.value.fileName; + result.stack = item.value.stack; + break; + case "array": + result = []; + newTarget = {type, value: result}; + for (let child of value) { + queue.push({item: child, target: newTarget}); + } + break; + case "set": + result = new Set(); + newTarget = {type, value: result}; + for (let child of value) { + queue.push({item: child, target: newTarget}); + } + break; + case "object": + result = {}; + newTarget = {type, value: result}; + for (let [targetName, child] of Object.entries(value)) { + queue.push({item: child, target: newTarget, targetName}); + } + break; + case "map": + result = new Map(); + newTarget = {type, value: result}; + for (let [key, child] of value) { + queue.push({item: key, target: newTarget, targetName: "key"}); + queue.push({item: child, target: newTarget, targetName: "value"}); + } + break; + default: + throw new TypeError(`Can't deserialize object of type ${type}`); + } + if (objectId !== undefined) { + objectMap.set(objectId, result); + } + } + + if (target === null) { + if (deserialized !== null) { + throw new Error(`Tried to deserialized a non-root output value without a target` + ` container object.`); + } + deserialized = result; + } else { + switch(target.type) { + case "array": + target.value.push(result); + break; + case "set": + target.value.add(result); + break; + case "object": + target.value[targetName] = result; + break; + case "map": + // For maps the same target wrapper is shared between key and value. + // After deserializing the key, set the `key` property on the target + // until we come to the value. + if (targetName === "key") { + target.key = result; + } else { + target.value.set(target.key, result); + } + break; + default: + throw new Error(`Unknown target type ${target.type}`); + } + } + } + return deserialized; + } +})(); diff --git a/test/fixtures/wpt/resources/check-layout-th.js b/test/fixtures/wpt/resources/check-layout-th.js index a507a8dfd7f..9cd8abc938d 100644 --- a/test/fixtures/wpt/resources/check-layout-th.js +++ b/test/fixtures/wpt/resources/check-layout-th.js @@ -20,7 +20,7 @@ function checkAttribute(output, node, attribute) function assert_tolerance(actual, expected, message) { - if (isNaN(expected) || Math.abs(actual - expected) >= 1) { + if (isNaN(expected) || isNaN(actual) || Math.abs(actual - expected) >= 1) { assert_equals(actual, Number(expected), message); } } diff --git a/test/fixtures/wpt/resources/check-layout.js b/test/fixtures/wpt/resources/check-layout.js new file mode 100644 index 00000000000..8634481497d --- /dev/null +++ b/test/fixtures/wpt/resources/check-layout.js @@ -0,0 +1,245 @@ +(function() { + +function insertAfter(nodeToAdd, referenceNode) +{ + if (referenceNode == document.body) { + document.body.appendChild(nodeToAdd); + return; + } + + if (referenceNode.nextSibling) + referenceNode.parentNode.insertBefore(nodeToAdd, referenceNode.nextSibling); + else + referenceNode.parentNode.appendChild(nodeToAdd); +} + +function positionedAncestor(node) +{ + var ancestor = node.parentNode; + while (getComputedStyle(ancestor).position == 'static') + ancestor = ancestor.parentNode; + return ancestor; +} + +function checkSubtreeExpectedValues(parent, failures) +{ + var checkedLayout = checkExpectedValues(parent, failures); + Array.prototype.forEach.call(parent.childNodes, function(node) { + checkedLayout |= checkSubtreeExpectedValues(node, failures); + }); + return checkedLayout; +} + +function checkAttribute(output, node, attribute) +{ + var result = node.getAttribute && node.getAttribute(attribute); + output.checked |= !!result; + return result; +} + +function checkExpectedValues(node, failures) +{ + var output = { checked: false }; + var expectedWidth = checkAttribute(output, node, "data-expected-width"); + if (expectedWidth) { + if (isNaN(expectedWidth) || Math.abs(node.offsetWidth - expectedWidth) >= 1) + failures.push("Expected " + expectedWidth + " for width, but got " + node.offsetWidth + ". "); + } + + var expectedHeight = checkAttribute(output, node, "data-expected-height"); + if (expectedHeight) { + if (isNaN(expectedHeight) || Math.abs(node.offsetHeight - expectedHeight) >= 1) + failures.push("Expected " + expectedHeight + " for height, but got " + node.offsetHeight + ". "); + } + + var expectedOffset = checkAttribute(output, node, "data-offset-x"); + if (expectedOffset) { + if (isNaN(expectedOffset) || Math.abs(node.offsetLeft - expectedOffset) >= 1) + failures.push("Expected " + expectedOffset + " for offsetLeft, but got " + node.offsetLeft + ". "); + } + + var expectedOffset = checkAttribute(output, node, "data-offset-y"); + if (expectedOffset) { + if (isNaN(expectedOffset) || Math.abs(node.offsetTop - expectedOffset) >= 1) + failures.push("Expected " + expectedOffset + " for offsetTop, but got " + node.offsetTop + ". "); + } + + var expectedOffset = checkAttribute(output, node, "data-positioned-offset-x"); + if (expectedOffset) { + var actualOffset = node.getBoundingClientRect().left - positionedAncestor(node).getBoundingClientRect().left; + if (isNaN(expectedOffset) || Math.abs(actualOffset - expectedOffset) >= 1) + failures.push("Expected " + expectedOffset + " for getBoundingClientRect().left offset, but got " + actualOffset + ". "); + } + + var expectedOffset = checkAttribute(output, node, "data-positioned-offset-y"); + if (expectedOffset) { + var actualOffset = node.getBoundingClientRect().top - positionedAncestor(node).getBoundingClientRect().top; + if (isNaN(expectedOffset) || Math.abs(actualOffset - expectedOffset) >= 1) + failures.push("Expected " + expectedOffset + " for getBoundingClientRect().top offset, but got " + actualOffset + ". "); + } + + var expectedWidth = checkAttribute(output, node, "data-expected-client-width"); + if (expectedWidth) { + if (isNaN(expectedWidth) || Math.abs(node.clientWidth - expectedWidth) >= 1) + failures.push("Expected " + expectedWidth + " for clientWidth, but got " + node.clientWidth + ". "); + } + + var expectedHeight = checkAttribute(output, node, "data-expected-client-height"); + if (expectedHeight) { + if (isNaN(expectedHeight) || Math.abs(node.clientHeight - expectedHeight) >= 1) + failures.push("Expected " + expectedHeight + " for clientHeight, but got " + node.clientHeight + ". "); + } + + var expectedWidth = checkAttribute(output, node, "data-expected-scroll-width"); + if (expectedWidth) { + if (isNaN(expectedWidth) || Math.abs(node.scrollWidth - expectedWidth) >= 1) + failures.push("Expected " + expectedWidth + " for scrollWidth, but got " + node.scrollWidth + ". "); + } + + var expectedHeight = checkAttribute(output, node, "data-expected-scroll-height"); + if (expectedHeight) { + if (isNaN(expectedHeight) || Math.abs(node.scrollHeight - expectedHeight) >= 1) + failures.push("Expected " + expectedHeight + " for scrollHeight, but got " + node.scrollHeight + ". "); + } + + var expectedOffset = checkAttribute(output, node, "data-total-x"); + if (expectedOffset) { + var totalLeft = node.clientLeft + node.offsetLeft; + if (isNaN(expectedOffset) || Math.abs(totalLeft - expectedOffset) >= 1) + failures.push("Expected " + expectedOffset + " for clientLeft+offsetLeft, but got " + totalLeft + ", clientLeft: " + node.clientLeft + ", offsetLeft: " + node.offsetLeft + ". "); + } + + var expectedOffset = checkAttribute(output, node, "data-total-y"); + if (expectedOffset) { + var totalTop = node.clientTop + node.offsetTop; + if (isNaN(expectedOffset) || Math.abs(totalTop - expectedOffset) >= 1) + failures.push("Expected " + expectedOffset + " for clientTop+offsetTop, but got " + totalTop + ", clientTop: " + node.clientTop + ", + offsetTop: " + node.offsetTop + ". "); + } + + var expectedDisplay = checkAttribute(output, node, "data-expected-display"); + if (expectedDisplay) { + var actualDisplay = getComputedStyle(node).display; + if (actualDisplay != expectedDisplay) + failures.push("Expected " + expectedDisplay + " for display, but got " + actualDisplay + ". "); + } + + var expectedPaddingTop = checkAttribute(output, node, "data-expected-padding-top"); + if (expectedPaddingTop) { + var actualPaddingTop = getComputedStyle(node).paddingTop; + // Trim the unit "px" from the output. + actualPaddingTop = actualPaddingTop.substring(0, actualPaddingTop.length - 2); + if (actualPaddingTop != expectedPaddingTop) + failures.push("Expected " + expectedPaddingTop + " for padding-top, but got " + actualPaddingTop + ". "); + } + + var expectedPaddingBottom = checkAttribute(output, node, "data-expected-padding-bottom"); + if (expectedPaddingBottom) { + var actualPaddingBottom = getComputedStyle(node).paddingBottom; + // Trim the unit "px" from the output. + actualPaddingBottom = actualPaddingBottom.substring(0, actualPaddingBottom.length - 2); + if (actualPaddingBottom != expectedPaddingBottom) + failures.push("Expected " + expectedPaddingBottom + " for padding-bottom, but got " + actualPaddingBottom + ". "); + } + + var expectedPaddingLeft = checkAttribute(output, node, "data-expected-padding-left"); + if (expectedPaddingLeft) { + var actualPaddingLeft = getComputedStyle(node).paddingLeft; + // Trim the unit "px" from the output. + actualPaddingLeft = actualPaddingLeft.substring(0, actualPaddingLeft.length - 2); + if (actualPaddingLeft != expectedPaddingLeft) + failures.push("Expected " + expectedPaddingLeft + " for padding-left, but got " + actualPaddingLeft + ". "); + } + + var expectedPaddingRight = checkAttribute(output, node, "data-expected-padding-right"); + if (expectedPaddingRight) { + var actualPaddingRight = getComputedStyle(node).paddingRight; + // Trim the unit "px" from the output. + actualPaddingRight = actualPaddingRight.substring(0, actualPaddingRight.length - 2); + if (actualPaddingRight != expectedPaddingRight) + failures.push("Expected " + expectedPaddingRight + " for padding-right, but got " + actualPaddingRight + ". "); + } + + var expectedMarginTop = checkAttribute(output, node, "data-expected-margin-top"); + if (expectedMarginTop) { + var actualMarginTop = getComputedStyle(node).marginTop; + // Trim the unit "px" from the output. + actualMarginTop = actualMarginTop.substring(0, actualMarginTop.length - 2); + if (actualMarginTop != expectedMarginTop) + failures.push("Expected " + expectedMarginTop + " for margin-top, but got " + actualMarginTop + ". "); + } + + var expectedMarginBottom = checkAttribute(output, node, "data-expected-margin-bottom"); + if (expectedMarginBottom) { + var actualMarginBottom = getComputedStyle(node).marginBottom; + // Trim the unit "px" from the output. + actualMarginBottom = actualMarginBottom.substring(0, actualMarginBottom.length - 2); + if (actualMarginBottom != expectedMarginBottom) + failures.push("Expected " + expectedMarginBottom + " for margin-bottom, but got " + actualMarginBottom + ". "); + } + + var expectedMarginLeft = checkAttribute(output, node, "data-expected-margin-left"); + if (expectedMarginLeft) { + var actualMarginLeft = getComputedStyle(node).marginLeft; + // Trim the unit "px" from the output. + actualMarginLeft = actualMarginLeft.substring(0, actualMarginLeft.length - 2); + if (actualMarginLeft != expectedMarginLeft) + failures.push("Expected " + expectedMarginLeft + " for margin-left, but got " + actualMarginLeft + ". "); + } + + var expectedMarginRight = checkAttribute(output, node, "data-expected-margin-right"); + if (expectedMarginRight) { + var actualMarginRight = getComputedStyle(node).marginRight; + // Trim the unit "px" from the output. + actualMarginRight = actualMarginRight.substring(0, actualMarginRight.length - 2); + if (actualMarginRight != expectedMarginRight) + failures.push("Expected " + expectedMarginRight + " for margin-right, but got " + actualMarginRight + ". "); + } + + return output.checked; +} + +window.checkLayout = function(selectorList, outputContainer) +{ + var result = true; + if (!selectorList) { + document.body.appendChild(document.createTextNode("You must provide a CSS selector of nodes to check.")); + return; + } + var nodes = document.querySelectorAll(selectorList); + nodes = Array.prototype.slice.call(nodes); + nodes.reverse(); + var checkedLayout = false; + Array.prototype.forEach.call(nodes, function(node) { + var failures = []; + checkedLayout |= checkExpectedValues(node.parentNode, failures); + checkedLayout |= checkSubtreeExpectedValues(node, failures); + + var container = node.parentNode.className == 'container' ? node.parentNode : node; + + var pre = document.createElement('pre'); + if (failures.length) { + pre.className = 'FAIL'; + result = false; + } + pre.appendChild(document.createTextNode(failures.length ? "FAIL:\n" + failures.join('\n') + '\n\n' + container.outerHTML : "PASS")); + + var referenceNode = container; + if (outputContainer) { + if (!outputContainer.lastChild) { + // Inserting a text node so we have something to insertAfter. + outputContainer.textContent = " "; + } + referenceNode = outputContainer.lastChild; + } + insertAfter(pre, referenceNode); + }); + + if (!checkedLayout) { + document.body.appendChild(document.createTextNode("FAIL: No valid data-* attributes found in selector list : " + selectorList)); + return false; + } + + return result; +} + +})(); diff --git a/test/fixtures/wpt/resources/idlharness-shadowrealm.js b/test/fixtures/wpt/resources/idlharness-shadowrealm.js new file mode 100644 index 00000000000..631278db22d --- /dev/null +++ b/test/fixtures/wpt/resources/idlharness-shadowrealm.js @@ -0,0 +1,81 @@ +// TODO: it would be nice to support `idl_array.add_objects` +function fetch_text(url) { + return fetch(url).then(function (r) { + if (!r.ok) { + throw new Error("Error fetching " + url + "."); + } + return r.text(); + }); +} + +/** + * idl_test_shadowrealm is a promise_test wrapper that handles the fetching of the IDL, and + * running the code in a `ShadowRealm`, avoiding repetitive boilerplate. + * + * @see https://github.com/tc39/proposal-shadowrealm + * @param {String[]} srcs Spec name(s) for source idl files (fetched from + * /interfaces/{name}.idl). + * @param {String[]} deps Spec name(s) for dependency idl files (fetched + * from /interfaces/{name}.idl). Order is important - dependencies from + * each source will only be included if they're already know to be a + * dependency (i.e. have already been seen). + */ +function idl_test_shadowrealm(srcs, deps) { + const script_urls = [ + "/resources/testharness.js", + "/resources/WebIDLParser.js", + "/resources/idlharness.js", + ]; + promise_setup(async t => { + const realm = new ShadowRealm(); + // https://github.com/web-platform-tests/wpt/issues/31996 + realm.evaluate("globalThis.self = globalThis; undefined;"); + + realm.evaluate(` + globalThis.self.GLOBAL = { + isWindow: function() { return false; }, + isWorker: function() { return false; }, + isShadowRealm: function() { return true; }, + }; + `); + + const ss = await Promise.all(script_urls.map(url => fetch_text(url))); + for (const s of ss) { + realm.evaluate(s); + } + const specs = await Promise.all(srcs.concat(deps).map(spec => { + return fetch_text("/interfaces/" + spec + ".idl"); + })); + const idls = JSON.stringify(specs); + + const results = JSON.parse(await new Promise( + realm.evaluate(`(resolve,reject) => { + const idls = ${idls}; + add_completion_callback(function (tests, harness_status, asserts_run) { + resolve(JSON.stringify(tests)); + }); + + // Without the wrapping test, testharness.js will think it's done after it has run + // the first idlharness test. + test(() => { + const idl_array = new IdlArray(); + for (let i = 0; i < ${srcs.length}; i++) { + idl_array.add_idls(idls[i]); + } + for (let i = ${srcs.length}; i < ${srcs.length + deps.length}; i++) { + idl_array.add_dependency_idls(idls[i]); + } + idl_array.test(); + }, "setup"); + }`) + )); + + // We ran the tests in the ShadowRealm and gathered the results. Now treat them as if + // we'd run them directly here, so we can see them. + for (const {name, status, message} of results) { + // TODO: make this an API in testharness.js - needs RFC? + promise_test(t => {t.set_status(status, message); t.phase = t.phases.HAS_RESULT; t.done()}, name); + } + }, "outer setup"); +} +// vim: set expandtab shiftwidth=4 tabstop=4 foldmarker=@{,@} foldmethod=marker: diff --git a/test/fixtures/wpt/resources/idlharness.js b/test/fixtures/wpt/resources/idlharness.js index d81693d2a22..b5eed06ce3e 100644 --- a/test/fixtures/wpt/resources/idlharness.js +++ b/test/fixtures/wpt/resources/idlharness.js @@ -508,7 +508,7 @@ IdlArray.prototype.is_json_type = function(type) { /** * Checks whether type is a JSON type as per - * https://heycam.github.io/webidl/#dfn-json-types + * https://webidl.spec.whatwg.org/#dfn-json-types */ var idlType = type.idlType; @@ -637,11 +637,17 @@ function exposure_set(object, default_set) { if (exposed && exposed.length) { const { rhs } = exposed[0]; // Could be a list or a string. - const set = rhs.type === "identifier-list" ? + const set = + rhs.type === "*" ? + [ "*" ] : + rhs.type === "identifier-list" ? rhs.value.map(id => id.value) : [ rhs.value ]; result = new Set(set); } + if (result && result.has("*")) { + return "*"; + } if (result && result.has("Worker")) { result.delete("Worker"); result.add("DedicatedWorker"); @@ -652,6 +658,9 @@ function exposure_set(object, default_set) { } function exposed_in(globals) { + if (globals === "*") { + return true; + } if ('Window' in self) { return globals.has("Window"); } @@ -667,6 +676,10 @@ function exposed_in(globals) { self instanceof ServiceWorkerGlobalScope) { return globals.has("ServiceWorker"); } + if (Object.getPrototypeOf(self) === Object.prototype) { + // ShadowRealm - only exposed with `"*"`. + return false; + } throw new IdlHarnessError("Unexpected global object"); } @@ -804,6 +817,13 @@ IdlArray.prototype.merge_partials = function() test(function () { const partialExposure = exposure_set(parsed_idl); const memberExposure = exposure_set(this.members[parsed_idl.name]); + if (memberExposure === "*") { + return; + } + if (partialExposure === "*") { + throw new IdlHarnessError( + `Partial ${parsed_idl.name} ${parsed_idl.type} is exposed everywhere, the original ${parsed_idl.type} is not.`); + } partialExposure.forEach(name => { if (!memberExposure || !memberExposure.has(name)) { throw new IdlHarnessError( @@ -942,7 +962,7 @@ IdlArray.prototype.assert_type_is = function(value, type) return; } - if (type.generic === "sequence") + if (type.generic === "sequence" || type.generic == "ObservableArray") { assert_true(Array.isArray(value), "should be an Array"); if (!value.length) @@ -1255,7 +1275,7 @@ IdlInterface.prototype.is_global = function() /** * Value of the LegacyNamespace extended attribute, if any. * - * https://heycam.github.io/webidl/#LegacyNamespace + * https://webidl.spec.whatwg.org/#LegacyNamespace */ IdlInterface.prototype.get_legacy_namespace = function() { @@ -1299,7 +1319,7 @@ IdlInterface.prototype.get_interface_object = function() { }; IdlInterface.prototype.get_qualified_name = function() { - // https://heycam.github.io/webidl/#qualified-name + // https://webidl.spec.whatwg.org/#qualified-name var legacyNamespace = this.get_legacy_namespace(); if (legacyNamespace) { return legacyNamespace + "." + this.name; @@ -1320,7 +1340,7 @@ IdlInterface.prototype.has_default_to_json_regular_operation = function() { }; /** - * Implementation of https://heycam.github.io/webidl/#create-an-inheritance-stack + * Implementation of https://webidl.spec.whatwg.org/#create-an-inheritance-stack * with the order reversed. * * The order is reversed so that the base class comes first in the list, because @@ -1358,7 +1378,7 @@ IdlInterface.prototype.get_reverse_inheritance_stack = function() { /** * Implementation of - * https://heycam.github.io/webidl/#default-tojson-operation + * https://webidl.spec.whatwg.org/#default-tojson-operation * for testing purposes. * * Collects the IDL types of the attributes that meet the criteria @@ -1524,7 +1544,7 @@ IdlInterface.prototype.test_self = function() if (this.should_have_interface_object() && !this.is_callback()) { subsetTestByKey(this.name, test, function() { // This function tests WebIDL as of 2014-10-25. - // https://heycam.github.io/webidl/#es-interface-call + // https://webidl.spec.whatwg.org/#es-interface-call this.assert_interface_object_exists(); @@ -1549,7 +1569,7 @@ IdlInterface.prototype.test_self = function() if (this.should_have_interface_object()) { subsetTestByKey(this.name, test, function() { // This function tests WebIDL as of 2015-11-17. - // https://heycam.github.io/webidl/#interface-object + // https://webidl.spec.whatwg.org/#interface-object this.assert_interface_object_exists(); @@ -1580,7 +1600,7 @@ IdlInterface.prototype.test_self = function() if (this.is_callback()) { throw new IdlHarnessError("Invalid IDL: LegacyWindowAlias extended attribute on non-interface " + this.name); } - if (!this.exposureSet.has("Window")) { + if (!(this.exposureSet === "*" || this.exposureSet.has("Window"))) { throw new IdlHarnessError("Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " which is not exposed in Window"); } // TODO: when testing of [LegacyNoInterfaceObject] interfaces is supported, @@ -1741,7 +1761,7 @@ IdlInterface.prototype.test_self = function() subsetTestByKey(this.name, test, function() { // This function tests WebIDL as of 2015-01-21. - // https://heycam.github.io/webidl/#interface-object + // https://webidl.spec.whatwg.org/#interface-object if (!this.should_have_interface_object()) { return; @@ -1860,7 +1880,7 @@ IdlInterface.prototype.test_self = function() // interfaces for any other interface that is declared with one of these // attributes, then the interface prototype object must be an immutable // prototype exotic object." - // https://heycam.github.io/webidl/#interface-prototype-object + // https://webidl.spec.whatwg.org/#interface-prototype-object if (this.is_global()) { this.test_immutable_prototype("interface prototype object", this.get_interface_object().prototype); } @@ -2237,7 +2257,7 @@ IdlInterface.prototype.test_member_operation = function(member) a_test.step(function() { // This function tests WebIDL as of 2015-12-29. - // https://heycam.github.io/webidl/#es-operations + // https://webidl.spec.whatwg.org/#es-operations if (!this.should_have_interface_object()) { a_test.done(); @@ -2666,7 +2686,7 @@ IdlInterface.prototype.test_primary_interface_of = function(desc, obj, exception // attribute must execute the same algorithm as is defined for the // [[SetPrototypeOf]] internal method of an immutable prototype exotic // object." - // https://heycam.github.io/webidl/#platform-object-setprototypeof + // https://webidl.spec.whatwg.org/#platform-object-setprototypeof if (this.is_global()) { this.test_immutable_prototype("global platform object", obj); @@ -3332,9 +3352,9 @@ IdlNamespace.prototype.test = function () * idl_test is a promise_test wrapper that handles the fetching of the IDL, * avoiding repetitive boilerplate. * - * @param {String|String[]} srcs Spec name(s) for source idl files (fetched from + * @param {String[]} srcs Spec name(s) for source idl files (fetched from * /interfaces/{name}.idl). - * @param {String|String[]} deps Spec name(s) for dependency idl files (fetched + * @param {String[]} deps Spec name(s) for dependency idl files (fetched * from /interfaces/{name}.idl). Order is important - dependencies from * each source will only be included if they're already know to be a * dependency (i.e. have already been seen). diff --git a/test/fixtures/wpt/resources/sriharness.js b/test/fixtures/wpt/resources/sriharness.js index d57a1b38465..943d677224f 100644 --- a/test/fixtures/wpt/resources/sriharness.js +++ b/test/fixtures/wpt/resources/sriharness.js @@ -1,17 +1,30 @@ -var SRIScriptTest = function(pass, name, src, integrityValue, crossoriginValue, nonce) { +// `integrityValue` indicates the 'integrity' attribute value at the time of +// #prepare-a-script. +// +// `integrityValueAfterPrepare` indicates how the 'integrity' attribute value +// is modified after #prepare-a-script: +// - `undefined` => not modified. +// - `null` => 'integrity' attribute is removed. +// - others => 'integrity' attribute value is set to that value. +// +// TODO: Make the arguments a dictionary for readability in the test files. +var SRIScriptTest = function(pass, name, src, integrityValue, crossoriginValue, nonce, integrityValueAfterPrepare) { this.pass = pass; this.name = "Script: " + name; this.src = src; this.integrityValue = integrityValue; this.crossoriginValue = crossoriginValue; this.nonce = nonce; + this.integrityValueAfterPrepare = integrityValueAfterPrepare; } SRIScriptTest.prototype.execute = function() { var test = async_test(this.name); var e = document.createElement("script"); e.src = this.src; - e.setAttribute("integrity", this.integrityValue); + if (this.integrityValue) { + e.setAttribute("integrity", this.integrityValue); + } if(this.crossoriginValue) { e.setAttribute("crossorigin", this.crossoriginValue); } @@ -30,6 +43,12 @@ SRIScriptTest.prototype.execute = function() { e.addEventListener("error", function() {test.done()}); } document.body.appendChild(e); + + if (this.integrityValueAfterPrepare === null) { + e.removeAttribute("integrity"); + } else if (this.integrityValueAfterPrepare !== undefined) { + e.setAttribute("integrity", this.integrityValueAfterPrepare); + } }; function set_extra_attributes(element, attrs) { diff --git a/test/fixtures/wpt/resources/testdriver-actions.js b/test/fixtures/wpt/resources/testdriver-actions.js index 4dafa0c018b..3e5ba74b4ca 100644 --- a/test/fixtures/wpt/resources/testdriver-actions.js +++ b/test/fixtures/wpt/resources/testdriver-actions.js @@ -2,9 +2,38 @@ let sourceNameIdx = 0; /** + * @class * Builder for creating a sequence of actions - * The default tick duration is set to 16ms, which is one frame time based on - * 60Hz display. + * + * + * The actions are dispatched once + * :js:func:`test_driver.Actions.send` is called. This returns a + * promise which resolves once the actions are complete. + * + * The other methods on :js:class:`test_driver.Actions` object are + * used to build the sequence of actions that will be sent. These + * return the `Actions` object itself, so the actions sequence can + * be constructed by chaining method calls. + * + * Internally :js:func:`test_driver.Actions.send` invokes + * :js:func:`test_driver.action_sequence`. + * + * @example + * let text_box = document.getElementById("text"); + * + * let actions = new test_driver.Actions() + * .pointerMove(0, 0, {origin: text_box}) + * .pointerDown() + * .pointerUp() + * .addTick() + * .keyDown("p") + * .keyUp("p"); + * + * await actions.send(); + * + * @param {number} [defaultTickDuration] - The default duration of a + * tick. Be default this is set ot 16ms, which is one frame time + * based on 60Hz display. */ function Actions(defaultTickDuration=16) { this.sourceTypes = new Map([["key", KeySource], diff --git a/test/fixtures/wpt/resources/testdriver.js b/test/fixtures/wpt/resources/testdriver.js index f2df26cda1c..0737e64a50b 100644 --- a/test/fixtures/wpt/resources/testdriver.js +++ b/test/fixtures/wpt/resources/testdriver.js @@ -46,7 +46,7 @@ /** - * @namespace + * @namespace {test_driver} */ window.test_driver = { /** @@ -78,9 +78,17 @@ * Trigger user interaction in order to grant additional privileges to * a provided function. * - * https://html.spec.whatwg.org/#triggered-by-user-activation + * See `triggered by user activation + * `_. * - * @param {String} intent - a description of the action which much be + * @example + * var mediaElement = document.createElement('video'); + * + * test_driver.bless('initiate media playback', function () { + * mediaElement.play(); + * }); + * + * @param {String} intent - a description of the action which must be * triggered by user interaction * @param {Function} action - code requiring escalated privileges * @param {WindowProxy} context - Browsing context in which @@ -118,9 +126,21 @@ /** * Triggers a user-initiated click * - * This matches the behaviour of the {@link - * https://w3c.github.io/webdriver/#element-click|WebDriver - * Element Click command}. + * If ``element`` isn't inside the + * viewport, it will be scrolled into view before the click + * occurs. + * + * If ``element`` is from a different browsing context, the + * command will be run in that context. + * + * Matches the behaviour of the `Element Click + * `_ + * WebDriver command. + * + * **Note:** If the element to be clicked does not have a + * unique ID, the document must not have any DOM mutations + * made between the function being called and the promise + * settling. * * @param {Element} element - element to be clicked * @returns {Promise} fulfilled after click occurs, or rejected in @@ -149,9 +169,9 @@ /** * Deletes all cookies. * - * This matches the behaviour of the {@link - * https://w3c.github.io/webdriver/#delete-all-cookies|WebDriver - * Delete All Cookies command}. + * Matches the behaviour of the `Delete All Cookies + * `_ + * WebDriver command. * * @param {WindowProxy} context - Browsing context in which * to run the call, or null for the current @@ -165,11 +185,34 @@ }, /** - * Send keys to an element + * Send keys to an element. + * + * If ``element`` isn't inside the + * viewport, it will be scrolled into view before the click + * occurs. + * + * If ``element`` is from a different browsing context, the + * command will be run in that context. + * + * To send special keys, send the respective key's codepoint, + * as defined by `WebDriver + * `_. For + * example, the "tab" key is represented as "``\uE004``". * - * This matches the behaviour of the {@link - * https://w3c.github.io/webdriver/#element-send-keys|WebDriver - * Send Keys command}. + * **Note:** these special-key codepoints are not necessarily + * what you would expect. For example, Esc is the + * invalid Unicode character ``\uE00C``, not the ``\u001B`` Escape + * character from ASCII. + * + * This matches the behaviour of the + * `Send Keys + * `_ + * WebDriver command. + * + * **Note:** If the element to be clicked does not have a + * unique ID, the document must not have any DOM mutations + * made between the function being called and the promise + * settling. * * @param {Element} element - element to send keys to * @param {String} keys - keys to send to the element @@ -196,9 +239,8 @@ * Freeze the current page * * The freeze function transitions the page from the HIDDEN state to - * the FROZEN state as described in {@link - * https://github.com/WICG/page-lifecycle/blob/master/README.md|Lifecycle API - * for Web Pages} + * the FROZEN state as described in `Lifecycle API for Web Pages + * `_. * * @param {WindowProxy} context - Browsing context in which * to run the call, or null for the current @@ -211,27 +253,76 @@ return window.test_driver_internal.freeze(); }, + /** + * Minimizes the browser window. + * + * Matches the the behaviour of the `Minimize + * `_ + * WebDriver command + * + * @param {WindowProxy} context - Browsing context in which + * to run the call, or null for the current + * browsing context. + * + * @returns {Promise} fulfilled with the previous {@link + * https://www.w3.org/TR/webdriver/#dfn-windowrect-object|WindowRect} + * value, after the window is minimized. + */ + minimize_window: function(context=null) { + return window.test_driver_internal.minimize_window(context); + }, + + /** + * Restore the window from minimized/maximized state to a given rect. + * + * Matches the behaviour of the `Set Window Rect + * `_ + * WebDriver command + * + * @param {Object} rect - A {@link + * https://www.w3.org/TR/webdriver/#dfn-windowrect-object|WindowRect} + * @param {WindowProxy} context - Browsing context in which + * to run the call, or null for the current + * browsing context. + * + * @returns {Promise} fulfilled after the window is restored to the given rect. + */ + set_window_rect: function(rect, context=null) { + return window.test_driver_internal.set_window_rect(rect, context); + }, + /** * Send a sequence of actions * - * This function sends a sequence of actions - * to perform. It is modeled after the behaviour of {@link - * https://w3c.github.io/webdriver/#actions|WebDriver Actions Command} - * - * @param {Array} actions - an array of actions. The format is the same as the actions - * property of the WebDriver command {@link - * https://w3c.github.io/webdriver/#perform-actions|Perform - * Actions} command. Each element is an object representing an - * input source and each input source itself has an actions - * property detailing the behaviour of that source at each timestep - * (or tick). Authors are not expected to construct the actions - * sequence by hand, but to use the builder api provided in - * testdriver-actions.js + * This function sends a sequence of actions to perform. + * + * Matches the behaviour of the `Actions + * `_ feature in + * WebDriver. + * + * Authors are encouraged to use the + * :js:class:`test_driver.Actions` builder rather than + * invoking this API directly. + * + * @param {Array} actions - an array of actions. The format is + * the same as the actions property + * of the `Perform Actions + * `_ + * WebDriver command. Each element is + * an object representing an input + * source and each input source + * itself has an actions property + * detailing the behaviour of that + * source at each timestep (or + * tick). Authors are not expected to + * construct the actions sequence by + * hand, but to use the builder api + * provided in testdriver-actions.js * @param {WindowProxy} context - Browsing context in which * to run the call, or null for the current * browsing context. * - * @returns {Promise} fufiled after the actions are performed, or rejected in + * @returns {Promise} fulfilled after the actions are performed, or rejected in * the cases the WebDriver command errors */ action_sequence: function(actions, context=null) { @@ -241,9 +332,12 @@ /** * Generates a test report on the current page * - * The generate_test_report function generates a report (to be observed - * by ReportingObserver) for testing purposes, as described in - * {@link https://w3c.github.io/reporting/#generate-test-report-command} + * The generate_test_report function generates a report (to be + * observed by ReportingObserver) for testing purposes. + * + * Matches the `Generate Test Report + * `_ + * WebDriver command. * * @param {WindowProxy} context - Browsing context in which * to run the call, or null for the current @@ -259,21 +353,25 @@ /** * Sets the state of a permission * - * This function simulates a user setting a permission into a particular state as described - * in {@link https://w3c.github.io/permissions/#set-permission-command} + * This function simulates a user setting a permission into a + * particular state. + * + * Matches the `Set Permission + * `_ + * WebDriver command. + * + * @example + * await test_driver.set_permission({ name: "background-fetch" }, "denied"); + * await test_driver.set_permission({ name: "push", userVisibleOnly: true }, "granted", true); * - * @param {Object} descriptor - a [PermissionDescriptor]{@link - * https://w3c.github.io/permissions/#dictdef-permissiondescriptor} + * @param {Object} descriptor - a `PermissionDescriptor + * `_ * object * @param {String} state - the state of the permission * @param {boolean} one_realm - Optional. Whether the permission applies to only one realm * @param {WindowProxy} context - Browsing context in which * to run the call, or null for the current * browsing context. - * - * The above params are used to create a [PermissionSetParameters]{@link - * https://w3c.github.io/permissions/#dictdef-permissionsetparameters} object - * * @returns {Promise} fulfilled after the permission is set, or rejected if setting the * permission fails */ @@ -289,12 +387,15 @@ /** * Creates a virtual authenticator * - * This function creates a virtual authenticator for use with the U2F - * and WebAuthn APIs as described in {@link - * https://w3c.github.io/webauthn/#sctn-automation-add-virtual-authenticator} + * This function creates a virtual authenticator for use with + * the U2F and WebAuthn APIs. * - * @param {Object} config - an [Authenticator Configuration]{@link - * https://w3c.github.io/webauthn/#authenticator-configuration} + * Matches the `Add Virtual Authenticator + * `_ + * WebDriver command. + * + * @param {Object} config - an `Authenticator Configuration + * `_ * object * @param {WindowProxy} context - Browsing context in which * to run the call, or null for the current @@ -311,9 +412,12 @@ /** * Removes a virtual authenticator * - * This function removes a virtual authenticator that has been created - * by add_virtual_authenticator - * https://w3c.github.io/webauthn/#sctn-automation-remove-virtual-authenticator + * This function removes a virtual authenticator that has been + * created by :js:func:`add_virtual_authenticator`. + * + * Matches the `Remove Virtual Authenticator + * `_ + * WebDriver command. * * @param {String} authenticator_id - the ID of the authenticator to be * removed. @@ -332,11 +436,13 @@ /** * Adds a credential to a virtual authenticator * - * https://w3c.github.io/webauthn/#sctn-automation-add-credential + * Matches the `Add Credential + * `_ + * WebDriver command. * * @param {String} authenticator_id - the ID of the authenticator - * @param {Object} credential - A [Credential Parameters]{@link - * https://w3c.github.io/webauthn/#credential-parameters} + * @param {Object} credential - A `Credential Parameters + * `_ * object * @param {WindowProxy} context - Browsing context in which * to run the call, or null for the current @@ -356,18 +462,21 @@ * This function retrieves all the credentials (added via the U2F API, * WebAuthn, or the add_credential function) stored in a virtual * authenticator - * https://w3c.github.io/webauthn/#sctn-automation-get-credentials + * + * Matches the `Get Credentials + * `_ + * WebDriver command. * * @param {String} authenticator_id - the ID of the authenticator * @param {WindowProxy} context - Browsing context in which * to run the call, or null for the current * browsing context. * - * @returns {Promise} fulfilled after the credentials are returned, or - * rejected in the cases the WebDriver command - * errors. Returns an array of [Credential - * Parameters]{@link - * https://w3c.github.io/webauthn/#credential-parameters} + * @returns {Promise} fulfilled after the credentials are + * returned, or rejected in the cases the + * WebDriver command errors. Returns an + * array of `Credential Parameters + * `_ */ get_credentials: function(authenticator_id, context=null) { return window.test_driver_internal.get_credentials(authenticator_id, context=null); @@ -376,7 +485,9 @@ /** * Remove a credential stored in an authenticator * - * https://w3c.github.io/webauthn/#sctn-automation-remove-credential + * Matches the `Remove Credential + * `_ + * WebDriver command. * * @param {String} authenticator_id - the ID of the authenticator * @param {String} credential_id - the ID of the credential @@ -395,7 +506,9 @@ /** * Removes all the credentials stored in a virtual authenticator * - * https://w3c.github.io/webauthn/#sctn-automation-remove-all-credentials + * Matches the `Remove All Credentials + * `_ + * WebDriver command. * * @param {String} authenticator_id - the ID of the authenticator * @param {WindowProxy} context - Browsing context in which @@ -415,7 +528,10 @@ * * Sets whether requests requiring user verification will succeed or * fail on a given virtual authenticator - * https://w3c.github.io/webauthn/#sctn-automation-set-user-verified + * + * Matches the `Set User Verified + * `_ + * WebDriver command. * * @param {String} authenticator_id - the ID of the authenticator * @param {boolean} uv - the User Verified flag @@ -431,7 +547,9 @@ * Sets the storage access rule for an origin when embedded * in a third-party context. * - * {@link https://privacycg.github.io/storage-access/#set-storage-access-command} + * Matches the `Set Storage Access + * `_ + * WebDriver command. * * @param {String} origin - A third-party origin to block or allow. * May be "*" to indicate all origins. @@ -455,6 +573,45 @@ const blocked = state === "blocked"; return window.test_driver_internal.set_storage_access(origin, embedding_origin, blocked, context); }, + + /** + * Sets the current transaction automation mode for Secure Payment + * Confirmation. + * + * This function places `Secure Payment + * Confirmation `_ into + * an automated 'autoaccept' or 'autoreject' mode, to allow testing + * without user interaction with the transaction UX prompt. + * + * Matches the `Set SPC Transaction Mode + * `_ + * WebDriver command. + * + * @example + * await test_driver.set_spc_transaction_mode("autoaccept"); + * test.add_cleanup(() => { + * return test_driver.set_spc_transaction_mode("none"); + * }); + * + * // Assumption: `request` is a PaymentRequest with a secure-payment-confirmation + * // payment method. + * const response = await request.show(); + * + * @param {String} mode - The `transaction mode + * `_ + * to set. Must be one of "``none``", + * "``autoaccept``", or + * "``autoreject``". + * @param {WindowProxy} context - Browsing context in which + * to run the call, or null for the current + * browsing context. + * + * @returns {Promise} Fulfilled after the transaction mode has been set, + * or rejected if setting the mode fails. + */ + set_spc_transaction_mode: function(mode, context=null) { + return window.test_driver_internal.set_spc_transaction_mode(mode, context); + }, }; window.test_driver_internal = { @@ -516,6 +673,14 @@ return Promise.reject(new Error("unimplemented")); }, + minimize_window: function(context=null) { + return Promise.reject(new Error("unimplemented")); + }, + + set_window_rect: function(rect, context=null) { + return Promise.reject(new Error("unimplemented")); + }, + action_sequence: function(actions, context=null) { return Promise.reject(new Error("unimplemented")); }, @@ -560,5 +725,10 @@ set_storage_access: function(origin, embedding_origin, blocked, context=null) { return Promise.reject(new Error("unimplemented")); }, + + set_spc_transaction_mode: function(mode, context=null) { + return Promise.reject(new Error("unimplemented")); + }, + }; })(); diff --git a/test/fixtures/wpt/resources/testharness.js b/test/fixtures/wpt/resources/testharness.js index f85b19fd9bd..bfb5cc08777 100644 --- a/test/fixtures/wpt/resources/testharness.js +++ b/test/fixtures/wpt/resources/testharness.js @@ -126,7 +126,7 @@ } catch (e) {} } } - if (supports_post_message(w) && w !== self) { + if (w !== self) { w.postMessage(message_arg, "*"); } }); @@ -424,6 +424,53 @@ } }; + /* + * Shadow realms. + * https://github.com/tc39/proposal-shadowrealm + * + * This class is used as the test_environment when testharness is running + * inside a shadow realm. + */ + function ShadowRealmTestEnvironment() { + WorkerTestEnvironment.call(this); + this.all_loaded = false; + this.on_loaded_callback = null; + } + + ShadowRealmTestEnvironment.prototype = Object.create(WorkerTestEnvironment.prototype); + + /** + * Signal to the test environment that the tests are ready and the on-loaded + * callback should be run. + * + * Shadow realms are not *really* a DOM context: they have no `onload` or similar + * event for us to use to set up the test environment; so, instead, this method + * is manually triggered from the incubating realm + * + * @param {Function} message_destination - a function that receives JSON-serializable + * data to send to the incubating realm, in the same format as used by RemoteContext + */ + ShadowRealmTestEnvironment.prototype.begin = function(message_destination) { + if (this.all_loaded) { + throw new Error("Tried to start a shadow realm test environment after it has already started"); + } + var fakeMessagePort = {}; + fakeMessagePort.postMessage = message_destination; + this._add_message_port(fakeMessagePort); + this.all_loaded = true; + if (this.on_loaded_callback) { + this.on_loaded_callback(); + } + }; + + ShadowRealmTestEnvironment.prototype.add_on_loaded_callback = function(callback) { + if (this.all_loaded) { + callback(); + } else { + this.on_loaded_callback = callback; + } + }; + /* * JavaScript shells. * @@ -488,6 +535,15 @@ global_scope instanceof WorkerGlobalScope) { return new DedicatedWorkerTestEnvironment(); } + /* Shadow realm global objects are _ordinary_ objects (i.e. their prototype is + * Object) so we don't have a nice `instanceof` test to use; instead, we + * check if the there is a GLOBAL.isShadowRealm() property + * on the global object. that was set by the test harness when it + * created the ShadowRealm. + */ + if (global_scope.GLOBAL && global_scope.GLOBAL.isShadowRealm()) { + return new ShadowRealmTestEnvironment(); + } return new ShellTestEnvironment(); } @@ -542,8 +598,23 @@ return test_environment.next_default_test_name(); } - /* - * API functions + /** + * @callback TestFunction + * @param {Test} test - The test currnetly being run. + * @param {Any[]} args - Additional args to pass to function. + * + */ + + /** + * Create a synchronous test + * + * @param {TestFunction} func - Test function. This is executed + * immediately. If it returns without error, the test status is + * set to ``PASS``. If it throws an :js:class:`AssertionError`, or + * any other exception, the test status is set to ``FAIL`` + * (typically from an `assert` function). + * @param {String} name - Test name. This must be unique in a + * given file and must be invariant between runs. */ function test(func, name, properties) { @@ -576,6 +647,17 @@ } } + /** + * Create an asynchronous test + * + * @param {TestFunction|string} funcOrName - Initial step function + * to call immediately with the test name as an argument (if any), + * or name of the test. + * @param {String} name - Test name (if a test function was + * provided). This must be unique in a given file and must be + * invariant between runs. + * @returns {Test} An object representing the ongoing test. + */ function async_test(func, name, properties) { if (tests.promise_setup_called) { @@ -619,6 +701,19 @@ return test_obj; } + /** + * Create a promise test. + * + * Promise tests are tests which are represented by a promise + * object. If the promise is fulfilled the test passes, if it's + * rejected the test fails, otherwise the test passes. + * + * @param {TestFunction} func - Test function. This must return a + * promise. The test is automatically marked as complete once the + * promise settles. + * @param {String} name - Test name. This must be unique in a + * given file and must be invariant between runs. + */ function promise_test(func, name, properties) { if (typeof func !== "function") { properties = name; @@ -678,11 +773,12 @@ * realm * @returns {Promise} * - * An arbitrary promise provided by the caller may have originated in - * another frame that have since navigated away, rendering the frame's - * document inactive. Such a promise cannot be used with `await` or - * Promise.resolve(), as microtasks associated with it may be prevented - * from being run. See https://github.com/whatwg/html/issues/5319 for a + * An arbitrary promise provided by the caller may have originated + * in another frame that have since navigated away, rendering the + * frame's document inactive. Such a promise cannot be used with + * `await` or Promise.resolve(), as microtasks associated with it + * may be prevented from being run. See `issue + * 5319`_ for a * particular case. * * In functions we define here, there is an expectation from the caller @@ -695,6 +791,16 @@ return new Promise(promise.then.bind(promise)); } + /** + * Assert that a Promise is rejected with the right ECMAScript exception. + * + * @param {Test} test - the `Test` to use for the assertion. + * @param {Function} constructor - The expected exception constructor. + * @param {Promise} promise - The promise that's expected to + * reject with the given exception. + * @param {string} [description] Error message to add to assert in case of + * failure. + */ function promise_rejects_js(test, constructor, promise, description) { return bring_promise_to_current_realm(promise) .then(test.unreached_func("Should have rejected: " + description)) @@ -707,9 +813,6 @@ /** * Assert that a Promise is rejected with the right DOMException. * - * @param test the test argument passed to promise_test - * @param {number|string} type. See documentation for assert_throws_dom. - * * For the remaining arguments, there are two ways of calling * promise_rejects_dom: * @@ -721,8 +824,22 @@ * third argument should be the DOMException constructor from that global, * the fourth argument the promise expected to reject, and the fifth, * optional, argument the assertion description. + * + * @param {Test} test - the `Test` to use for the assertion. + * @param {number|string} type - See documentation for + * `assert_throws_dom <#assert_throws_dom>`_. + * @param {Function} promiseOrConstructor - Either the constructor + * for the expected exception (if the exception comes from another + * global), or the promise that's expected to reject (if the + * exception comes from the current global). + * @param {Function|string} descriptionOrPromise - Either the + * promise that's expected to reject (if the exception comes from + * another global), or the optional description of the condition + * being tested (if the exception comes from the current global). + * @param {string} [description] - Description of the condition + * being tested (if the exception comes from another global). + * */ - function promise_rejects_dom(test, type, promiseOrConstructor, descriptionOrPromise, maybeDescription) { let constructor, promise, description; if (typeof promiseOrConstructor === "function" && @@ -745,6 +862,16 @@ }); } + /** + * Assert that a Promise is rejected with the provided value. + * + * @param {Test} test - the `Test` to use for the assertion. + * @param {Any} exception - The expected value of the rejected promise. + * @param {Promise} promise - The promise that's expected to + * reject. + * @param {string} [description] Error message to add to assert in case of + * failure. + */ function promise_rejects_exactly(test, exception, promise, description) { return bring_promise_to_current_realm(promise) .then(test.unreached_func("Should have rejected: " + description)) @@ -755,9 +882,23 @@ } /** - * This constructor helper allows DOM events to be handled using Promises, - * which can make it a lot easier to test a very specific series of events, + * Allow DOM events to be handled using Promises. + * + * This can make it a lot easier to test a very specific series of events, * including ensuring that unexpected events are not fired at any point. + * + * `EventWatcher` will assert if an event occurs while there is no `wait_for` + * created Promise waiting to be fulfilled, or if the event is of a different type + * to the type currently expected. This ensures that only the events that are + * expected occur, in the correct order, and with the correct timing. + * + * @constructor + * @param {Test} test - The `Test` to use for the assertion. + * @param {EventTarget} watchedNode - The target expected to receive the events. + * @param {string[]} eventTypes - List of events to watch for. + * @param {Promise} timeoutPromise - Promise that will cause the + * test to be set to `TIMEOUT` once fulfilled. + * */ function EventWatcher(test, watchedNode, eventTypes, timeoutPromise) { @@ -806,15 +947,13 @@ * Returns a Promise that will resolve after the specified event or * series of events has occurred. * - * @param options An optional options object. If the 'record' property - * on this object has the value 'all', when the Promise - * returned by this function is resolved, *all* Event - * objects that were waited for will be returned as an - * array. + * @param {Object} options An optional options object. If the 'record' property + * on this object has the value 'all', when the Promise + * returned by this function is resolved, *all* Event + * objects that were waited for will be returned as an + * array. * - * For example, - * - * ```js + * @example * const watcher = new EventWatcher(t, div, [ 'animationstart', * 'animationiteration', * 'animationend' ]); @@ -823,7 +962,6 @@ * assert_equals(evts[0].elapsedTime, 0.0); * assert_equals(evts[1].elapsedTime, 2.0); * }); - * ``` */ this.wait_for = function(types, options) { if (waitingFor) { @@ -865,6 +1003,9 @@ }); }; + /** + * Stop listening for events + */ function stop_watching() { for (var i = 0; i < eventTypes.length; i++) { watchedNode.removeEventListener(eventTypes[i], eventHandler, false); @@ -877,6 +1018,46 @@ } expose(EventWatcher, 'EventWatcher'); + /** + * @typedef {Object} SettingsObject + * @property {bool} single_test - Use the single-page-test + * mode. In this mode the Document represents a single + * `async_test`. Asserts may be used directly without requiring + * `Test.step` or similar wrappers, and any exceptions set the + * status of the test rather than the status of the harness. + * @property {bool} allow_uncaught_exception - don't treat an + * uncaught exception as an error; needed when e.g. testing the + * `window.onerror` handler. + * @property {boolean} explicit_done - Wait for a call to `done()` + * before declaring all tests complete (this is always true for + * single-page tests). + * @property hide_test_state - hide the test state output while + * the test is running; This is helpful when the output of the test state + * may interfere the test results. + * @property {bool} explicit_timeout - disable file timeout; only + * stop waiting for results when the `timeout()` function is + * called This should typically only be set for manual tests, or + * by a test runner that providees its own timeout mechanism. + * @property {number} timeout_multiplier - Multiplier to apply to + * per-test timeouts. This should only be set by a test runner. + * @property {Document} output_document - The document to which + * results should be logged. By default this is the current + * document but could be an ancestor document in some cases e.g. a + * SVG test loaded in an HTML wrapper + * + */ + + /** + * Configure the harness + * + * @param {Function|SettingsObject} funcOrProperties - Either a + * setup function to run, or a set of properties. If this is a + * function that function is run synchronously. Any exception in + * the function will set the overall harness status to `ERROR`. + * @param {SettingsObject} maybeProperties - An object containing + * the settings to use, if the first argument is a function. + * + */ function setup(func_or_properties, maybe_properties) { var func = null; @@ -893,7 +1074,18 @@ test_environment.on_new_harness_properties(properties); } - function promise_setup(func, maybe_properties) + /** + * Configure the harness, waiting for a promise to resolve + * before running any `promise_test` tests. + * + * @param {Function} func - Function returning a promise that's + * run synchronously. Promise tests are not run until after this + * function has resolved. + * @param {SettingsObject} [properties] - An object containing + * the harness settings to use. + * + */ + function promise_setup(func, properties={}) { if (typeof func !== "function") { tests.set_status(tests.status.ERROR, @@ -910,7 +1102,6 @@ tests.promise_tests = tests.promise_tests .then(function() { - var properties = maybe_properties || {}; var result; tests.setup(null, properties); @@ -931,6 +1122,17 @@ }); } + /** + * Mark test loading as complete. + * + * Typically this function is called implicitly on page load; it's + * only necessary for users to call this when either the + * ``explict_done`` or ``single_page`` properties have been set + * via the :js:func:`setup` function. + * + * For single page tests this marks the test as complete and sets its status. + * For other tests, this marks test loading as complete, but doesn't affect ongoing tests. + */ function done() { if (tests.tests.length === 0) { // `done` is invoked after handling uncaught exceptions, so if the @@ -952,6 +1154,20 @@ tests.end_wait(); } + /** + * @deprecated generate a list of tests from a function and list of arguments + * + * This is deprecated because it runs all the tests outside of the test functions + * and as a result any test throwing an exception will result in no tests being + * run. In almost all cases, you should simply call test within the loop you would + * use to generate the parameter list array. + * + * @param {Function} func - The function that will be called for each generated tests. + * @param {Any[][]} args - An array of arrays. Each nested array + * has the structure `[testName, ...testArgs]`. For each of these nested arrays + * array, a test is generated with name `testName` and test function equivalent to + * `func(..testArgs)`. + */ function generate_tests(func, args, properties) { forEach(args, function(x, i) { @@ -965,23 +1181,35 @@ }); } - /* - * Register a function as a DOM event listener to the given object for the - * event bubbling phase. + /** + * @deprecated + * + * Register a function as a DOM event listener to the + * given object for the event bubbling phase. * - * This function was deprecated in November of 2019. + * @param {EventTarget} object - Event target + * @param {string} event - Event name + * @param {Function} callback - Event handler. */ function on_event(object, event, callback) { object.addEventListener(event, callback, false); } - function step_timeout(f, t) { + /** + * Global version of :js:func:`Test.step_timeout` for use in single page tests. + * + * @param {Function} func - Function to run after the timeout + * @param {number} timeout - Time in ms to wait before running the + * test step. The actual wait time is ``timeout`` x + * ``timeout_multiplier``. + */ + function step_timeout(func, timeout) { var outer_this = this; var args = Array.prototype.slice.call(arguments, 2); return setTimeout(function() { - f.apply(outer_this, args); - }, t * tests.timeout_multiplier); + func.apply(outer_this, args); + }, timeout * tests.timeout_multiplier); } expose(test, 'test'); @@ -1079,8 +1307,30 @@ "0xffff": "uffff", }; - /* + /** * Convert a value to a nice, human-readable string + * + * When many JavaScript Object values are coerced to a String, the + * resulting value will be ``"[object Object]"``. This obscures + * helpful information, making the coerced value unsuitable for + * use in assertion messages, test names, and debugging + * statements. `format_value` produces more distinctive string + * representations of many kinds of objects, including arrays and + * the more important DOM Node types. It also translates String + * values containing control characters to include human-readable + * representations. + * + * @example + * // "Document node with 2 children" + * format_value(document); + * @example + * // "\"foo\\uffffbar\"" + * format_value("foo\uffffbar"); + * @example + * // "[-0, Infinity]" + * format_value([-0, Infinity]); + * @param {Any} val - The value to convert to a string. + * @returns {string} - A string representation of ``val``, optimised for human readability. */ function format_value(val, seen) { @@ -1187,12 +1437,8 @@ status = Test.statuses.PASS; return rv; } catch(e) { - if (e instanceof AssertionError) { - status = Test.statuses.FAIL; - stack = e.stack; - } else { - status = Test.statuses.ERROR; - } + status = Test.statuses.FAIL; + stack = e.stack ? e.stack : null; throw e; } finally { if (tests.output && !stack) { @@ -1206,6 +1452,12 @@ expose(assert_wrapper, name); } + /** + * Assert that ``actual`` is strictly true + * + * @param {Any} actual - Value that is asserted to be true + * @param {string} [description] - Description of the condition being tested + */ function assert_true(actual, description) { assert(actual === true, "assert_true", description, @@ -1213,6 +1465,12 @@ } expose_assert(assert_true, "assert_true"); + /** + * Assert that ``actual`` is strictly false + * + * @param {Any} actual - Value that is asserted to be false + * @param {string} [description] - Description of the condition being tested + */ function assert_false(actual, description) { assert(actual === false, "assert_false", description, @@ -1232,6 +1490,17 @@ return x === y; } + /** + * Assert that ``actual`` is the same value as ``expected``. + * + * For objects this compares by cobject identity; for primitives + * this distinguishes between 0 and -0, and has correct handling + * of NaN. + * + * @param {Any} actual - Test value. + * @param {Any} expected - Expected value. + * @param {string} [description] - Description of the condition being tested. + */ function assert_equals(actual, expected, description) { /* @@ -1250,18 +1519,32 @@ } expose_assert(assert_equals, "assert_equals"); + /** + * Assert that ``actual`` is not the same value as ``expected``. + * + * Comparison is as for :js:func:`assert_equals`. + * + * @param {Any} actual - Test value. + * @param {Any} expected - The value ``actual`` is expected to be different to. + * @param {string} [description] - Description of the condition being tested. + */ function assert_not_equals(actual, expected, description) { - /* - * Test if two primitives are unequal or two objects - * are different objects - */ assert(!same_value(actual, expected), "assert_not_equals", description, "got disallowed value ${actual}", {actual:actual}); } expose_assert(assert_not_equals, "assert_not_equals"); + /** + * Assert that ``expected`` is an array and ``actual`` is one of the members. + * This is implemented using ``indexOf``, so doesn't handle NaN or ±0 correctly. + * + * @param {Any} actual - Test value. + * @param {Array} expected - An array that ``actual`` is expected to + * be a member of. + * @param {string} [description] - Description of the condition being tested. + */ function assert_in_array(actual, expected, description) { assert(expected.indexOf(actual) != -1, "assert_in_array", description, @@ -1272,6 +1555,18 @@ // This function was deprecated in July of 2015. // See https://github.com/web-platform-tests/wpt/issues/2033 + /** + * @deprecated + * Recursively compare two objects for equality. + * + * See `Issue 2033 + * `_ for + * more information. + * + * @param {Object} actual - Test value. + * @param {Object} expected - Expected value. + * @param {string} [description] - Description of the condition being tested. + */ function assert_object_equals(actual, expected, description) { assert(typeof actual === "object" && actual !== null, "assert_object_equals", description, @@ -1308,6 +1603,14 @@ } expose_assert(assert_object_equals, "assert_object_equals"); + /** + * Assert that ``actual`` and ``expected`` are both arrays, and that the array properties of + * ``actual`` and ``expected`` are all the same value (as for :js:func:`assert_equals`). + * + * @param {Array} actual - Test array. + * @param {Array} expected - Array that is expected to contain the same values as ``actual``. + * @param {string} [description] - Description of the condition being tested. + */ function assert_array_equals(actual, expected, description) { const max_array_length = 20; @@ -1365,6 +1668,16 @@ } expose_assert(assert_array_equals, "assert_array_equals"); + /** + * Assert that each array property in ``actual`` is a number within + * ± `epsilon` of the corresponding property in `expected`. + * + * @param {Array} actual - Array of test values. + * @param {Array} expected - Array of values expected to be close to the values in ``actual``. + * @param {number} epsilon - Magnitude of allowed difference + * between each value in ``actual`` and ``expected``. + * @param {string} [description] - Description of the condition being tested. + */ function assert_array_approx_equals(actual, expected, epsilon, description) { /* @@ -1393,6 +1706,14 @@ } expose_assert(assert_array_approx_equals, "assert_array_approx_equals"); + /** + * Assert that ``actual`` is within ± ``epsilon`` of ``expected``. + * + * @param {number} actual - Test value. + * @param {number} expected - Value number is expected to be close to. + * @param {number} epsilon - Magnitude of allowed difference between ``actual`` and ``expected``. + * @param {string} [description] - Description of the condition being tested. + */ function assert_approx_equals(actual, expected, epsilon, description) { /* @@ -1416,6 +1737,13 @@ } expose_assert(assert_approx_equals, "assert_approx_equals"); + /** + * Assert that ``actual`` is a number less than ``expected``. + * + * @param {number} actual - Test value. + * @param {number} expected - Number that ``actual`` must be less than. + * @param {string} [description] - Description of the condition being tested. + */ function assert_less_than(actual, expected, description) { /* @@ -1433,6 +1761,13 @@ } expose_assert(assert_less_than, "assert_less_than"); + /** + * Assert that ``actual`` is a number greater than ``expected``. + * + * @param {number} actual - Test value. + * @param {number} expected - Number that ``actual`` must be greater than. + * @param {string} [description] - Description of the condition being tested. + */ function assert_greater_than(actual, expected, description) { /* @@ -1450,6 +1785,15 @@ } expose_assert(assert_greater_than, "assert_greater_than"); + /** + * Assert that ``actual`` is a number greater than ``lower`` and less + * than ``upper`` but not equal to either. + * + * @param {number} actual - Test value. + * @param {number} lower - Number that ``actual`` must be greater than. + * @param {number} upper - Number that ``actual`` must be less than. + * @param {string} [description] - Description of the condition being tested. + */ function assert_between_exclusive(actual, lower, upper, description) { /* @@ -1468,6 +1812,14 @@ } expose_assert(assert_between_exclusive, "assert_between_exclusive"); + /** + * Assert that ``actual`` is a number less than or equal to ``expected``. + * + * @param {number} actual - Test value. + * @param {number} expected - Number that ``actual`` must be less + * than or equal to. + * @param {string} [description] - Description of the condition being tested. + */ function assert_less_than_equal(actual, expected, description) { /* @@ -1485,6 +1837,14 @@ } expose_assert(assert_less_than_equal, "assert_less_than_equal"); + /** + * Assert that ``actual`` is a number greater than or equal to ``expected``. + * + * @param {number} actual - Test value. + * @param {number} expected - Number that ``actual`` must be greater + * than or equal to. + * @param {string} [description] - Description of the condition being tested. + */ function assert_greater_than_equal(actual, expected, description) { /* @@ -1502,6 +1862,15 @@ } expose_assert(assert_greater_than_equal, "assert_greater_than_equal"); + /** + * Assert that ``actual`` is a number greater than or equal to ``lower`` and less + * than or equal to ``upper``. + * + * @param {number} actual - Test value. + * @param {number} lower - Number that ``actual`` must be greater than or equal to. + * @param {number} upper - Number that ``actual`` must be less than or equal to. + * @param {string} [description] - Description of the condition being tested. + */ function assert_between_inclusive(actual, lower, upper, description) { /* @@ -1520,6 +1889,13 @@ } expose_assert(assert_between_inclusive, "assert_between_inclusive"); + /** + * Assert that ``actual`` matches the RegExp ``expected``. + * + * @param {String} actual - Test string. + * @param {RegExp} expected - RegExp ``actual`` must match. + * @param {string} [description] - Description of the condition being tested. + */ function assert_regexp_match(actual, expected, description) { /* * Test if a string (actual) matches a regexp (expected) @@ -1531,6 +1907,14 @@ } expose_assert(assert_regexp_match, "assert_regexp_match"); + /** + * Assert that the class string of ``object`` as returned in + * ``Object.prototype.toString`` is equal to ``class_name``. + * + * @param {Object} object - Object to stringify. + * @param {string} class_string - Expected class string for ``object``. + * @param {string} [description] - Description of the condition being tested. + */ function assert_class_string(object, class_string, description) { var actual = {}.toString.call(object); var expected = "[object " + class_string + "]"; @@ -1540,6 +1924,13 @@ } expose_assert(assert_class_string, "assert_class_string"); + /** + * Assert that ``object`` has an own property with name ``property_name``. + * + * @param {Object} object - Object that should have the given property. + * @param {string} property_name - Expected property name. + * @param {string} [description] - Description of the condition being tested. + */ function assert_own_property(object, property_name, description) { assert(object.hasOwnProperty(property_name), "assert_own_property", description, @@ -1547,6 +1938,13 @@ } expose_assert(assert_own_property, "assert_own_property"); + /** + * Assert that ``object`` does not have an own property with name ``property_name``. + * + * @param {Object} object - Object that should not have the given property. + * @param {string} property_name - Property name to test. + * @param {string} [description] - Description of the condition being tested. + */ function assert_not_own_property(object, property_name, description) { assert(!object.hasOwnProperty(property_name), "assert_not_own_property", description, @@ -1579,9 +1977,44 @@ {p:property_name}); }; } - expose_assert(_assert_inherits("assert_inherits"), "assert_inherits"); - expose_assert(_assert_inherits("assert_idl_attribute"), "assert_idl_attribute"); + /** + * Assert that ``object`` does not have an own property with name + * ``property_name``, but inherits one through the prototype chain. + * + * @param {Object} object - Object that should have the given property in its prototype chain. + * @param {string} property_name - Expected property name. + * @param {string} [description] - Description of the condition being tested. + */ + function assert_inherits(object, property_name, description) { + return _assert_inherits("assert_inherits")(object, property_name, description); + } + expose_assert(assert_inherits, "assert_inherits"); + + /** + * Alias for :js:func:`insert_inherits`. + * + * @param {Object} object - Object that should have the given property in its prototype chain. + * @param {string} property_name - Expected property name. + * @param {string} [description] - Description of the condition being tested. + */ + function assert_idl_attribute(object, property_name, description) { + return _assert_inherits("assert_idl_attribute")(object, property_name, description); + } + expose_assert(assert_idl_attribute, "assert_idl_attribute"); + + + /** + * Assert that ``object`` has a property named ``property_name`` and that the property is readonly. + * + * Note: The implementation tries to update the named property, so + * any side effects of updating will be triggered. Users are + * encouraged to instead inspect the property descriptor of ``property_name`` on ``object``. + * + * @param {Object} object - Object that should have the given property in its prototype chain. + * @param {string} property_name - Expected property name. + * @param {string} [description] - Description of the condition being tested. + */ function assert_readonly(object, property_name, description) { var initial_value = object[property_name]; @@ -1604,7 +2037,7 @@ * * @param {object} constructor The expected exception constructor. * @param {Function} func Function which should throw. - * @param {string} description Error description for the case that the error is not thrown. + * @param {string} [description] Error description for the case that the error is not thrown. */ function assert_throws_js(constructor, func, description) { @@ -1669,20 +2102,13 @@ } } + // TODO: Figure out how to document the overloads better. + // sphinx-js doesn't seem to handle @variation correctly, + // and only expects a single JSDoc entry per function. /** * Assert a DOMException with the expected type is thrown. * - * @param {number|string} type The expected exception name or code. See the - * table of names and codes at - * https://heycam.github.io/webidl/#dfn-error-names-table - * If a number is passed it should be one of the numeric code values - * in that table (e.g. 3, 4, etc). If a string is passed it can - * either be an exception name (e.g. "HierarchyRequestError", - * "WrongDocumentError") or the name of the corresponding error code - * (e.g. "HIERARCHY_REQUEST_ERR", "WRONG_DOCUMENT_ERR"). - * - * For the remaining arguments, there are two ways of calling - * promise_rejects_dom: + * There are two ways of calling assert_throws_dom: * * 1) If the DOMException is expected to come from the current global, the * second argument should be the function expected to throw and a third, @@ -1692,6 +2118,22 @@ * second argument should be the DOMException constructor from that global, * the third argument the function expected to throw, and the fourth, optional, * argument the assertion description. + * + * @param {number|string} type - The expected exception name or + * code. See the `table of names and codes + * `_. If a + * number is passed it should be one of the numeric code values in + * that table (e.g. 3, 4, etc). If a string is passed it can + * either be an exception name (e.g. "HierarchyRequestError", + * "WrongDocumentError") or the name of the corresponding error + * code (e.g. "``HIERARCHY_REQUEST_ERR``", "``WRONG_DOCUMENT_ERR``"). + * @param {Function} descriptionOrFunc - The function expected to + * throw (if the exception comes from another global), or the + * optional description of the condition being tested (if the + * exception comes from the current global). + * @param {string} [description] - Description of the condition + * being tested (if the exception comes from another global). + * */ function assert_throws_dom(type, funcOrConstructor, descriptionOrFunc, maybeDescription) { @@ -1865,7 +2307,7 @@ * * @param {value} exception The expected exception. * @param {Function} func Function which should throw. - * @param {string} description Error description for the case that the error is not thrown. + * @param {string} [description] Error description for the case that the error is not thrown. */ function assert_throws_exactly(exception, func, description) { @@ -1896,15 +2338,43 @@ } } + /** + * Asserts if called. Used to ensure that a specific codepath is + * not taken e.g. that an error event isn't fired. + * + * @param {string} [description] - Description of the condition being tested. + */ function assert_unreached(description) { assert(false, "assert_unreached", description, "Reached unreachable code"); } expose_assert(assert_unreached, "assert_unreached"); - function assert_any(assert_func, actual, expected_array) + /** + * @callback AssertFunc + * @param {Any} actual + * @param {Any} expected + * @param {Any[]} args + */ + + /** + * Asserts that ``actual`` matches at least one value of ``expected`` + * according to a comparison defined by ``assert_func``. + * + * Note that tests with multiple allowed pass conditions are bad + * practice unless the spec specifically allows multiple + * behaviours. Test authors should not use this method simply to + * hide UA bugs. + * + * @param {AssertFunc} assert_func - Function to compare actual + * and expected. It must throw when the comparison fails and + * return when the comparison passes. + * @param {Any} actual - Test value. + * @param {Array} expected_array - Array of possible expected values. + * @param {Any[]} args - Additional arguments to pass to ``assert_func``. + */ + function assert_any(assert_func, actual, expected_array, ...args) { - var args = [].slice.call(arguments, 3); var errors = []; var passed = false; forEach(expected_array, @@ -1936,7 +2406,7 @@ * assert_implements(window.Foo, 'Foo is not supported'); * * @param {object} condition The truthy value to test - * @param {string} description Error description for the case that the condition is not truthy. + * @param {string} [description] Error description for the case that the condition is not truthy. */ function assert_implements(condition, description) { assert(!!condition, "assert_implements", description); @@ -1954,25 +2424,37 @@ * "webm video playback not supported"); * * @param {object} condition The truthy value to test - * @param {string} description Error description for the case that the condition is not truthy. + * @param {string} [description] Error description for the case that the condition is not truthy. */ function assert_implements_optional(condition, description) { if (!condition) { throw new OptionalFeatureUnsupportedError(description); } } - expose_assert(assert_implements_optional, "assert_implements_optional") + expose_assert(assert_implements_optional, "assert_implements_optional"); + /** + * @class + * + * A single subtest. A Test is not constructed directly but via the + * :js:func:`test`, :js:func:`async_test` or :js:func:`promise_test` functions. + * + * @param {string} name - This must be unique in a given file and must be + * invariant between runs. + * + */ function Test(name, properties) { if (tests.file_is_test && tests.tests.length) { throw new Error("Tried to create a test with file_is_test"); } + /** The test name. */ this.name = name; this.phase = (tests.is_aborted || tests.phase === tests.phases.COMPLETE) ? this.phases.COMPLETE : this.phases.INITIAL; + /** The test status code.*/ this.status = this.NOTRUN; this.timeout_id = null; this.index = null; @@ -1983,7 +2465,9 @@ this.timeout_length *= tests.timeout_multiplier; } + /** A message indicating the reason for test failure. */ this.message = null; + /** Stack trace in case of failure. */ this.stack = null; this.steps = []; @@ -2003,6 +2487,16 @@ tests.push(this); } + /** + * Enum of possible test statuses. + * + * :values: + * - ``PASS`` + * - ``FAIL`` + * - ``TIMEOUT`` + * - ``NOTRUN`` + * - ``PRECONDITION_FAILED`` + */ Test.statuses = { PASS:0, FAIL:1, @@ -2052,6 +2546,15 @@ return this._structured_clone; }; + /** + * Run a single step of an ongoing test. + * + * @param {string} func - Callback function to run as a step. If + * this throws an :js:func:`AssertionError`, or any other + * exception, the :js:class:`Test` status is set to ``FAIL``. + * @param {Object} [this_obj] - The object to use as the this + * value when calling ``func``. Defaults to the :js:class:`Test` object. + */ Test.prototype.step = function(func, this_obj) { if (this.phase > this.phases.STARTED) { @@ -2101,6 +2604,26 @@ } }; + /** + * Wrap a function so that it runs as a step of the current test. + * + * This allows creating a callback function that will run as a + * test step. + * + * @example + * let t = async_test("Example"); + * onload = t.step_func(e => { + * assert_equals(e.name, "load"); + * // Mark the test as complete. + * t.done(); + * }) + * + * @param {string} func - Function to run as a step. If this + * throws an :js:func:`AssertionError`, or any other exception, + * the :js:class:`Test` status is set to ``FAIL``. + * @param {Object} [this_obj] - The object to use as the this + * value when calling ``func``. Defaults to the :js:class:`Test` object. + */ Test.prototype.step_func = function(func, this_obj) { var test_this = this; @@ -2116,6 +2639,18 @@ }; }; + /** + * Wrap a function so that it runs as a step of the current test, + * and automatically marks the test as complete if the function + * returns without error. + * + * @param {string} func - Function to run as a step. If this + * throws an :js:func:`AssertionError`, or any other exception, + * the :js:class:`Test` status is set to ``FAIL``. If it returns + * without error the status is set to ``PASS``. + * @param {Object} [this_obj] - The object to use as the this + * value when calling `func`. Defaults to the :js:class:`Test` object. + */ Test.prototype.step_func_done = function(func, this_obj) { var test_this = this; @@ -2134,6 +2669,14 @@ }; }; + /** + * Return a function that automatically sets the current test to + * ``FAIL`` if it's called. + * + * @param {string} [description] - Error message to add to assert + * in case of failure. + * + */ Test.prototype.unreached_func = function(description) { return this.step_func(function() { @@ -2141,37 +2684,68 @@ }); }; - Test.prototype.step_timeout = function(f, timeout) { + /** + * Run a function as a step of the test after a given timeout. + * + * This multiplies the timeout by the global timeout multiplier to + * account for the expected execution speed of the current test + * environment. For example ``test.step_timeout(f, 2000)`` with a + * timeout multiplier of 2 will wait for 4000ms before calling ``f``. + * + * In general it's encouraged to use :js:func:`Test.step_wait` or + * :js:func:`step_wait_func` in preference to this function where possible, + * as they provide better test performance. + * + * @param {Function} func - Function to run as a test + * step. + * @param {number} timeout - Time in ms to wait before running the + * test step. The actual wait time is ``timeout`` x + * ``timeout_multiplier``. + * + */ + Test.prototype.step_timeout = function(func, timeout) { var test_this = this; var args = Array.prototype.slice.call(arguments, 2); return setTimeout(this.step_func(function() { - return f.apply(test_this, args); + return func.apply(test_this, args); }), timeout * tests.timeout_multiplier); }; + /** + * Poll for a function to return true, and call a callback + * function once it does, or assert if a timeout is + * reached. This is preferred over a simple step_timeout + * whenever possible since it allows the timeout to be longer + * to reduce intermittents without compromising test execution + * speed when the condition is quickly met. + * + * @example + * async_test(t => { + * const popup = window.open("resources/coop-coep.py?coop=same-origin&coep=&navigate=about:blank"); + * t.add_cleanup(() => popup.close()); + * assert_equals(window, popup.opener); + * + * popup.onload = t.step_func(() => { + * assert_true(popup.location.href.endsWith("&navigate=about:blank")); + * // Use step_wait_func_done as about:blank cannot message back. + * t.step_wait_func_done(() => popup.location.href === "about:blank"); + * }); + * }, "Navigating a popup to about:blank"); + * + * @param {Function} cond A function taking no arguments and + * returning a boolean. The callback is called + * when this function returns true. + * @param {Function} func A function taking no arguments to call once + * the condition is met. + * @param {string} [description] Error message to add to assert in case of + * failure. + * @param {number} timeout Timeout in ms. This is multiplied by the global + * timeout_multiplier + * @param {number} interval Polling interval in ms + * + */ Test.prototype.step_wait_func = function(cond, func, description, timeout=3000, interval=100) { - /** - * Poll for a function to return true, and call a callback - * function once it does, or assert if a timeout is - * reached. This is preferred over a simple step_timeout - * whenever possible since it allows the timeout to be longer - * to reduce intermittents without compromising test execution - * speed when the condition is quickly met. - * - * @param {Function} cond A function taking no arguments and - * returning a boolean. The callback is called - * when this function returns true. - * @param {Function} func A function taking no arguments to call once - * the condition is met. - * @param {string} description Error message to add to assert in case of - * failure. - * @param {number} timeout Timeout in ms. This is multiplied by the global - * timeout_multiplier - * @param {number} interval Polling interval in ms - * - **/ - var timeout_full = timeout * tests.timeout_multiplier; var remaining = Math.ceil(timeout_full / interval); var test_this = this; @@ -2192,57 +2766,62 @@ wait_for_inner(); }; + /** + * Poll for a function to return true, and invoke a callback + * followed by this.done() once it does, or assert if a timeout + * is reached. This is preferred over a simple step_timeout + * whenever possible since it allows the timeout to be longer + * to reduce intermittents without compromising test execution speed + * when the condition is quickly met. + * + * @param {Function} cond A function taking no arguments and + * returning a boolean. The callback is called + * when this function returns true. + * @param {Function} func A function taking no arguments to call once + * the condition is met. + * @param {string} [description] Error message to add to assert in case of + * failure. + * @param {number} timeout Timeout in ms. This is multiplied by the global + * timeout_multiplier + * @param {number} interval Polling interval in ms + * + */ Test.prototype.step_wait_func_done = function(cond, func, description, timeout=3000, interval=100) { - /** - * Poll for a function to return true, and invoke a callback - * followed by this.done() once it does, or assert if a timeout - * is reached. This is preferred over a simple step_timeout - * whenever possible since it allows the timeout to be longer - * to reduce intermittents without compromising test execution speed - * when the condition is quickly met. - * - * @param {Function} cond A function taking no arguments and - * returning a boolean. The callback is called - * when this function returns true. - * @param {Function} func A function taking no arguments to call once - * the condition is met. - * @param {string} description Error message to add to assert in case of - * failure. - * @param {number} timeout Timeout in ms. This is multiplied by the global - * timeout_multiplier - * @param {number} interval Polling interval in ms - * - **/ - this.step_wait_func(cond, () => { if (func) { func(); } this.done(); }, description, timeout, interval); - } + }; + /** + * Poll for a function to return true, and resolve a promise + * once it does, or assert if a timeout is reached. This is + * preferred over a simple step_timeout whenever possible + * since it allows the timeout to be longer to reduce + * intermittents without compromising test execution speed + * when the condition is quickly met. + * + * @example + * promise_test(async t => { + * // … + * await t.step_wait(() => frame.contentDocument === null, "Frame navigated to a cross-origin document"); + * // … + * }, ""); + * + * @param {Function} cond A function taking no arguments and + * returning a boolean. + * @param {string} [description] Error message to add to assert in case of + * failure. + * @param {number} timeout Timeout in ms. This is multiplied by the global + * timeout_multiplier + * @param {number} interval Polling interval in ms + * @returns {Promise} Promise resolved once cond is met. + * + */ Test.prototype.step_wait = function(cond, description, timeout=3000, interval=100) { - /** - * Poll for a function to return true, and resolve a promise - * once it does, or assert if a timeout is reached. This is - * preferred over a simple step_timeout whenever possible - * since it allows the timeout to be longer to reduce - * intermittents without compromising test execution speed - * when the condition is quickly met. - * - * @param {Function} cond A function taking no arguments and - * returning a boolean. - * @param {string} description Error message to add to assert in case of - * failure. - * @param {number} timeout Timeout in ms. This is multiplied by the global - * timeout_multiplier - * @param {number} interval Polling interval in ms - * @returns {Promise} Promise resolved once cond is met. - * - **/ - return new Promise(resolve => { this.step_wait_func(cond, resolve, description, timeout, interval); }); @@ -2258,11 +2837,16 @@ this.cleanup_callbacks.push(callback); }; - /* + /** * Schedule a function to be run after the test result is known, regardless - * of passing or failing state. The behavior of this function will not + * of passing or failing state. + * + * The behavior of this function will not * influence the result of the test, but if an exception is thrown, the * test harness will report an error. + * + * @param {Function} callback - The cleanup function to run. This + * is called with no arguments. */ Test.prototype.add_cleanup = function(callback) { this._user_defined_cleanup_count += 1; @@ -2287,6 +2871,9 @@ this.stack = stack ? stack : null; }; + /** + * Manually set the test status to ``TIMEOUT``. + */ Test.prototype.timeout = function() { this.timeout_id = null; @@ -2295,11 +2882,24 @@ this.done(); }; - Test.prototype.force_timeout = Test.prototype.timeout; + /** + * Manually set the test status to ``TIMEOUT``. + * + * Alias for `Test.timeout <#Test.timeout>`_. + */ + Test.prototype.force_timeout = function() { + return this.timeout(); + }; /** - * Update the test status, initiate "cleanup" functions, and signal test - * completion. + * Mark the test as complete. + * + * This sets the test status to ``PASS`` if no other status was + * already recorded. Any subsequent attempts to run additional + * test steps will be ignored. + * + * After setting the test status any test cleanup functions will + * be run. */ Test.prototype.done = function() { @@ -2318,7 +2918,7 @@ if (settings.debug) { console.log("TEST DONE", this.status, - this.name,) + this.name); } this.cleanup(); @@ -2340,10 +2940,10 @@ * be cancelled. */ Test.prototype.cleanup = function() { - var error_count = 0; + var errors = []; var bad_value_count = 0; - function on_error() { - error_count += 1; + function on_error(e) { + errors.push(e); // Abort tests immediately so that tests declared within subsequent // cleanup functions are not run. tests.abort(); @@ -2360,7 +2960,7 @@ try { result = cleanup_callback(); } catch (e) { - on_error(); + on_error(e); return; } @@ -2375,7 +2975,7 @@ }); if (!this._is_promise_test) { - cleanup_done(this_obj, error_count, bad_value_count); + cleanup_done(this_obj, errors, bad_value_count); } else { all_async(results, function(result, done) { @@ -2388,12 +2988,12 @@ } }, function() { - cleanup_done(this_obj, error_count, bad_value_count); + cleanup_done(this_obj, errors, bad_value_count); }); } }; - /** + /* * Determine if the return value of a cleanup function is valid for a given * test. Any test may return the value `undefined`. Tests created with * `promise_test` may alternatively return "thenable" object values. @@ -2410,17 +3010,21 @@ return false; } - function cleanup_done(test, error_count, bad_value_count) { - if (error_count || bad_value_count) { + function cleanup_done(test, errors, bad_value_count) { + if (errors.length || bad_value_count) { var total = test._user_defined_cleanup_count; tests.status.status = tests.status.ERROR; + tests.status.stack = null; tests.status.message = "Test named '" + test.name + "' specified " + total + " 'cleanup' function" + (total > 1 ? "s" : ""); - if (error_count) { - tests.status.message += ", and " + error_count + " failed"; + if (errors.length) { + tests.status.message += ", and " + errors.length + " failed"; + tests.status.stack = ((typeof errors[0] === "object" && + errors[0].hasOwnProperty("stack")) ? + errors[0].stack : null); } if (bad_value_count) { @@ -2431,8 +3035,6 @@ } tests.status.message += "."; - - tests.status.stack = null; } test.phase = test.phases.COMPLETE; @@ -2444,7 +3046,7 @@ test._done_callbacks.length = 0; } - /* + /** * A RemoteTest object mirrors a Test object on a remote worker. The * associated RemoteWorker updates the RemoteTest object in response to * received events. In turn, the RemoteTest object replicates these events @@ -2629,7 +3231,7 @@ RemoteContext.prototype.remote_done = function(data) { if (tests.status.status === null && data.status.status !== data.status.OK) { - tests.set_status(data.status.status, data.status.message, data.status.sack); + tests.set_status(data.status.status, data.status.message, data.status.stack); } for (let assert of data.asserts) { @@ -2671,17 +3273,29 @@ complete: RemoteContext.prototype.remote_done }; - /* - * Harness + /** + * @class + * Status of the overall harness */ - function TestsStatus() { + /** The status code */ this.status = null; + /** Message in case of failure */ this.message = null; + /** Stack trace in case of an exception. */ this.stack = null; } + /** + * Enum of possible harness statuses. + * + * :values: + * - ``OK`` + * - ``ERROR`` + * - ``TIMEOUT`` + * - ``PRECONDITION_FAILED`` + */ TestsStatus.statuses = { OK:0, ERROR:1, @@ -2696,8 +3310,7 @@ 1: "Error", 2: "Timeout", 3: "Optional Feature Unsupported" - } - + }; TestsStatus.prototype.structured_clone = function() { @@ -2715,13 +3328,25 @@ TestsStatus.prototype.format_status = function() { return this.formats[this.status]; - } + }; + /** + * @class + * Record of an assert that ran. + * + * @param {Test} test - The test which ran the assert. + * @param {string} assert_name - The function name of the assert. + * @param {Any} args - The arguments passed to the assert function. + */ function AssertRecord(test, assert_name, args = []) { + /** Name of the assert that ran */ this.assert_name = assert_name; + /** Test that ran the assert */ this.test = test; // Avoid keeping complex objects alive + /** Stringification of the arguments that were passed to the assert function */ this.args = args.map(x => format_value(x).replace(/\n/g, " ")); + /** Status of the assert */ this.status = null; } @@ -2731,8 +3356,8 @@ test: this.test ? this.test.structured_clone() : null, args: this.args, status: this.status, - } - } + }; + }; function Tests() { @@ -2942,7 +3567,8 @@ }; Tests.prototype.all_done = function() { - return this.tests.length > 0 && test_environment.all_loaded && + return (this.tests.length > 0 || this.pending_remotes.length > 0) && + test_environment.all_loaded && (this.num_pending === 0 || this.is_aborted) && !this.wait_for_finish && !this.processing_callbacks && !this.pending_remotes.some(function(w) { return w.running; }); @@ -3178,6 +3804,14 @@ return remoteContext.done; }; + /** + * Get test results from a worker and include them in the current test. + * + * @param {Worker|SharedWorker|ServiceWorker|MessagePort} port - + * Either a worker object or a port connected to a worker which is + * running tests.. + * @returns {Promise} - A promise that's resolved once all the remote tests are complete. + */ function fetch_tests_from_worker(port) { return tests.fetch_tests_from_worker(port); } @@ -3191,11 +3825,68 @@ this.pending_remotes.push(this.create_remote_window(remote)); }; + /** + * Aggregate tests from separate windows or iframes + * into the current document as if they were all part of the same test file. + * + * The document of the second window (or iframe) should include + * ``testharness.js``, but not ``testharnessreport.js``, and use + * :js:func:`test`, :js:func:`async_test`, and :js:func:`promise_test` in + * the usual manner. + * + * @param {Window} window - The window to fetch tests from. + */ function fetch_tests_from_window(window) { tests.fetch_tests_from_window(window); } expose(fetch_tests_from_window, 'fetch_tests_from_window'); + /** + * Get test results from a shadow realm and include them in the current test. + * + * @param {ShadowRealm} realm - A shadow realm also running the test harness + * @returns {Promise} - A promise that's resolved once all the remote tests are complete. + */ + function fetch_tests_from_shadow_realm(realm) { + var chan = new MessageChannel(); + function receiveMessage(msg_json) { + chan.port1.postMessage(JSON.parse(msg_json)); + } + var done = tests.fetch_tests_from_worker(chan.port2); + realm.evaluate("begin_shadow_realm_tests")(receiveMessage); + chan.port2.start(); + return done; + } + expose(fetch_tests_from_shadow_realm, 'fetch_tests_from_shadow_realm'); + + /** + * Begin running tests in this shadow realm test harness. + * + * To be called after all tests have been loaded; it is an error to call + * this more than once or in a non-Shadow Realm environment + * + * @param {Function} postMessage - A function to send test updates to the + * incubating realm-- accepts JSON-encoded messages in the format used by + * RemoteContext + */ + function begin_shadow_realm_tests(postMessage) { + if (!(test_environment instanceof ShadowRealmTestEnvironment)) { + throw new Error("beign_shadow_realm_tests called in non-Shadow Realm environment"); + } + + test_environment.begin(function (msg) { + postMessage(JSON.stringify(msg)); + }); + } + expose(begin_shadow_realm_tests, 'begin_shadow_realm_tests'); + + /** + * Timeout the tests. + * + * This only has an effect when ``explict_timeout`` has been set + * in :js:func:`setup`. In other cases any call is a no-op. + * + */ function timeout() { if (tests.timeout_length === null) { tests.timeout(); @@ -3203,18 +3894,49 @@ } expose(timeout, 'timeout'); + /** + * Add a callback that's triggered when the first :js:class:`Test` is created. + * + * @param {Function} callback - Callback function. This is called + * without arguments. + */ function add_start_callback(callback) { tests.start_callbacks.push(callback); } + /** + * Add a callback that's triggered when a test state changes. + * + * @param {Function} callback - Callback function, called with the + * :js:class:`Test` as the only argument. + */ function add_test_state_callback(callback) { tests.test_state_callbacks.push(callback); } + /** + * Add a callback that's triggered when a test result is received. + * + * @param {Function} callback - Callback function, called with the + * :js:class:`Test` as the only argument. + */ function add_result_callback(callback) { tests.test_done_callbacks.push(callback); } + /** + * Add a callback that's triggered when all tests are complete. + * + * @param {Function} callback - Callback function, called with an + * array of :js:class:`Test` objects, a :js:class:`TestsStatus` + * object and an array of :js:class:`AssertRecord` objects. If the + * debug setting is ``false`` the final argument will be an empty + * array. + * + * For performance reasons asserts are only tracked when the debug + * setting is ``true``. In other cases the array of asserts will be + * empty. + */ function add_completion_callback(callback) { tests.all_done_callbacks.push(callback); } @@ -3336,7 +4058,7 @@ Output.prototype.show_status = function() { if (this.phase < this.STARTED) { - this.init(); + this.init({}); } if (!this.enabled || this.phase === this.COMPLETE) { return; @@ -3413,7 +4135,12 @@ ["span", {"class":status_class(status)}, status ], - ] + ], + ["button", + {"onclick": "let evt = new Event('__test_restart'); " + + "let canceled = !window.dispatchEvent(evt);" + + "if (!canceled) { location.reload() }"}, + "Rerun"] ]]; if (harness_status.status === harness_status.ERROR) { @@ -3764,6 +4491,12 @@ } } + /** + * @class + * Exception type that represents a failing assert. + * + * @param {string} message - Error message. + */ function AssertionError(message) { if (typeof message == "string") { @@ -3778,14 +4511,6 @@ const get_stack = function() { var stack = new Error().stack; - // IE11 does not initialize 'Error.stack' until the object is thrown. - if (!stack) { - try { - throw new Error(); - } catch (e) { - stack = e.stack; - } - } // 'Error.stack' is not supported in all browsers/versions if (!stack) { @@ -3888,21 +4613,23 @@ * invocations have signaled completion. * * If all callbacks complete synchronously (or if no callbacks are - * specified), the `done_callback` will be invoked synchronously. It is the + * specified), the ``done_callback`` will be invoked synchronously. It is the * responsibility of the caller to ensure asynchronicity in cases where * that is desired. * * @param {array} value Zero or more values to use in the invocation of - * `iter_callback` - * @param {function} iter_callback A function that will be invoked once for - * each of the provided `values`. Two - * arguments will be available in each - * invocation: the value from `values` and - * a function that must be invoked to - * signal completion + * ``iter_callback`` + * @param {function} iter_callback A function that will be invoked + * once for each of the values min + * ``value``. Two arguments will + * be available in each + * invocation: the value from + * ``value`` and a function that + * must be invoked to signal + * completion * @param {function} done_callback A function that will be invoked after * all operations initiated by the - * `iter_callback` function have signaled + * ``iter_callback`` function have signaled * completion */ function all_async(values, iter_callback, done_callback) @@ -4012,43 +4739,6 @@ return "Untitled"; } - function supports_post_message(w) - { - var supports; - var type; - // Given IE implements postMessage across nested iframes but not across - // windows or tabs, you can't infer cross-origin communication from the presence - // of postMessage on the current window object only. - // - // Touching the postMessage prop on a window can throw if the window is - // not from the same origin AND post message is not supported in that - // browser. So just doing an existence test here won't do, you also need - // to wrap it in a try..catch block. - try { - type = typeof w.postMessage; - if (type === "function") { - supports = true; - } - - // IE8 supports postMessage, but implements it as a host object which - // returns "object" as its `typeof`. - else if (type === "object") { - supports = true; - } - - // This is the case where postMessage isn't supported AND accessing a - // window property across origins does NOT throw (e.g. old Safari browser). - else { - supports = false; - } - } catch (e) { - // This is the case where postMessage isn't supported AND accessing a - // window property across origins throws (e.g. old Firefox browser). - supports = false; - } - return supports; - } - /** * Setup globals */ diff --git a/test/fixtures/wpt/resources/webidl2/build.sh b/test/fixtures/wpt/resources/webidl2/build.sh new file mode 100644 index 00000000000..a631268224f --- /dev/null +++ b/test/fixtures/wpt/resources/webidl2/build.sh @@ -0,0 +1,12 @@ +set -ex + +if [ ! -d "webidl2.js" ]; then + git clone https://github.com/w3c/webidl2.js.git +fi +cd webidl2.js +npm install +npm run build-debug +HASH=$(git rev-parse HEAD) +cd .. +cp webidl2.js/dist/webidl2.js lib/ +echo "Currently using webidl2.js@${HASH}." > lib/VERSION.md diff --git a/test/fixtures/wpt/resources/webidl2/lib/README.md b/test/fixtures/wpt/resources/webidl2/lib/README.md index af0af3a902f..1bd583269d2 100644 --- a/test/fixtures/wpt/resources/webidl2/lib/README.md +++ b/test/fixtures/wpt/resources/webidl2/lib/README.md @@ -1,6 +1,4 @@ This directory contains a built version of the [webidl2.js library](https://github.com/w3c/webidl2.js). It is built by running `npm run build-debug` at the root of that repository. -Currently using webidl2.js@24.1.1 (372ea83eaa10f60adff49bd0f4f3ce6a11d6fbec). - The `webidl2.js.headers` file is a local addition to ensure the script is interpreted as UTF-8. diff --git a/test/fixtures/wpt/resources/webidl2/lib/VERSION.md b/test/fixtures/wpt/resources/webidl2/lib/VERSION.md new file mode 100644 index 00000000000..10bdc008209 --- /dev/null +++ b/test/fixtures/wpt/resources/webidl2/lib/VERSION.md @@ -0,0 +1 @@ +Currently using webidl2.js@1fd6709ef9311f2ea0ed4ff0016ecf6f5d615104. diff --git a/test/fixtures/wpt/resources/webidl2/lib/webidl2.js b/test/fixtures/wpt/resources/webidl2/lib/webidl2.js index 322f0e11a6a..2861354e47d 100644 --- a/test/fixtures/wpt/resources/webidl2/lib/webidl2.js +++ b/test/fixtures/wpt/resources/webidl2/lib/webidl2.js @@ -31,6 +31,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _productions_namespace_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28); /* harmony import */ var _productions_callback_interface_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(29); /* harmony import */ var _productions_helpers_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(4); +/* harmony import */ var _productions_token_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(10); + @@ -91,6 +93,15 @@ function parseByTokens(tokeniser, options) { } function definition() { + if (options.productions) { + for (const production of options.productions) { + const result = production(tokeniser); + if (result) { + return result; + } + } + } + return ( callback() || interface_() || @@ -116,7 +127,7 @@ function parseByTokens(tokeniser, options) { (0,_productions_helpers_js__WEBPACK_IMPORTED_MODULE_11__.autoParenter)(def).extAttrs = ea; defs.push(def); } - const eof = tokeniser.consumeType("eof"); + const eof = _productions_token_js__WEBPACK_IMPORTED_MODULE_12__.Eof.parse(tokeniser); if (options.concrete) { defs.push(eof); } @@ -132,6 +143,8 @@ function parseByTokens(tokeniser, options) { * @param {object} [options] * @param {*} [options.sourceName] * @param {boolean} [options.concrete] + * @param {Function[]} [options.productions] + * @return {import("./productions/base").Base[]} */ function parse(str, options = {}) { const tokeniser = new _tokeniser_js__WEBPACK_IMPORTED_MODULE_0__.Tokeniser(str); @@ -170,7 +183,7 @@ const tokenRe = { identifier: /[_-]?[A-Za-z][0-9A-Z_a-z-]*/y, string: /"[^"]*"/y, whitespace: /[\t\n\r ]+/y, - comment: /\/\/.*|\/\*(.|\n)*?\*\//y, + comment: /\/\/.*|\/\*[\s\S]*?\*\//y, other: /[^\t\n\r 0-9A-Za-z]/y, }; @@ -184,6 +197,8 @@ const typeNameKeywords = [ "Uint16Array", "Uint32Array", "Uint8ClampedArray", + "BigInt64Array", + "BigUint64Array", "Float32Array", "Float64Array", "any", @@ -259,6 +274,7 @@ const punctuations = [ "=", ">", "?", + "*", "[", "]", "{", @@ -355,6 +371,8 @@ function tokenise(str) { type: "eof", value: "", trivia, + line, + index, }); return tokens; @@ -401,7 +419,7 @@ class Tokeniser { /** * @param {string} type */ - probeType(type) { + probeKind(type) { return ( this.source.length > this.position && this.source[this.position].type === type @@ -413,16 +431,16 @@ class Tokeniser { */ probe(value) { return ( - this.probeType("inline") && this.source[this.position].value === value + this.probeKind("inline") && this.source[this.position].value === value ); } /** - * @param {...string} candidates + * @param {...string} candidates */ - consumeType(...candidates) { + consumeKind(...candidates) { for (const type of candidates) { - if (!this.probeType(type)) continue; + if (!this.probeKind(type)) continue; const token = this.source[this.position]; this.position++; return token; @@ -430,10 +448,10 @@ class Tokeniser { } /** - * @param {...string} candidates + * @param {...string} candidates */ consume(...candidates) { - if (!this.probeType("inline")) return; + if (!this.probeKind("inline")) return; const token = this.source[this.position]; for (const value of candidates) { if (token.value !== value) continue; @@ -442,6 +460,19 @@ class Tokeniser { } } + /** + * @param {string} value + */ + consumeIdentifier(value) { + if (!this.probeKind("identifier")) { + return; + } + if (this.source[this.position].value !== value) { + return; + } + return this.consumeKind("identifier"); + } + /** * @param {number} position */ @@ -523,6 +554,8 @@ function contextAsText(node) { * @property {"error" | "warning"} [level] * @property {Function} [autofix] * + * @typedef {ReturnType} WebIDLErrorData + * * @param {string} message error message * @param {"Syntax" | "Validation"} kind error type * @param {WebIDL2ErrorOptions} [options] @@ -705,7 +738,7 @@ function list(tokeniser, { parser, allowDangler, listName = "list" }) { */ function const_value(tokeniser) { return ( - tokeniser.consumeType("decimal", "integer") || + tokeniser.consumeKind("decimal", "integer") || tokeniser.consume("true", "false", "Infinity", "-Infinity", "NaN") ); } @@ -1066,7 +1099,7 @@ function single_type(tokeniser, typeName) { let ret = generic_type(tokeniser, typeName) || (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.primitive_type)(tokeniser); if (!ret) { const base = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.consume(..._tokeniser_js__WEBPACK_IMPORTED_MODULE_2__.stringTypes, ..._tokeniser_js__WEBPACK_IMPORTED_MODULE_2__.typeNameKeywords); if (!base) { return; @@ -1164,7 +1197,7 @@ class Type extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { if (this.idlType === "void") { const message = `\`void\` is now replaced by \`undefined\`. Refer to the \ -[relevant GitHub issue](https://github.com/heycam/webidl/issues/60) \ +[relevant GitHub issue](https://github.com/whatwg/webidl/issues/60) \ for more information.`; yield (0,_error_js__WEBPACK_IMPORTED_MODULE_3__.validationError)(this.tokens.base, this, "replace-void", message, { autofix: replaceVoid(this), @@ -1457,8 +1490,13 @@ class ExtendedAttributeParameters extends _base_js__WEBPACK_IMPORTED_MODULE_0__. const ret = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_3__.autoParenter)( new ExtendedAttributeParameters({ source: tokeniser.source, tokens }) ); + ret.list = []; if (tokens.assign) { - tokens.secondaryName = tokeniser.consumeType(...extAttrValueSyntax); + tokens.asterisk = tokeniser.consume("*"); + if (tokens.asterisk) { + return ret.this; + } + tokens.secondaryName = tokeniser.consumeKind(...extAttrValueSyntax); } tokens.open = tokeniser.consume("("); if (tokens.open) { @@ -1470,20 +1508,25 @@ class ExtendedAttributeParameters extends _base_js__WEBPACK_IMPORTED_MODULE_0__. tokens.close = tokeniser.consume(")") || tokeniser.error("Unexpected token in extended attribute argument list"); - } else if (ret.hasRhs && !tokens.secondaryName) { + } else if (tokens.assign && !tokens.secondaryName) { tokeniser.error("No right hand side to extended attribute assignment"); } return ret.this; } get rhsIsList() { - return this.tokens.assign && !this.tokens.secondaryName; + return ( + this.tokens.assign && !this.tokens.asterisk && !this.tokens.secondaryName + ); } get rhsType() { if (this.rhsIsList) { return this.list[0].tokens.value.type + "-list"; } + if (this.tokens.asterisk) { + return "*"; + } if (this.tokens.secondaryName) { return this.tokens.secondaryName.type; } @@ -1492,26 +1535,17 @@ class ExtendedAttributeParameters extends _base_js__WEBPACK_IMPORTED_MODULE_0__. /** @param {import("../writer.js").Writer)} w */ write(w) { - function extended_attribute_listitem(item) { - return w.ts.wrap([ - w.token(item.tokens.value), - w.token(item.tokens.separator), - ]); - } const { rhsType } = this; return w.ts.wrap([ w.token(this.tokens.assign), + w.token(this.tokens.asterisk), w.reference_token(this.tokens.secondaryName, this.parent), w.token(this.tokens.open), - ...(!this.list - ? [] - : this.list.map((p) => { - return rhsType === "identifier-list" - ? w.identifier(p, this.parent) - : rhsType && rhsType.endsWith("-list") - ? extended_attribute_listitem(p) - : p.write(w); - })), + ...this.list.map((p) => { + return rhsType === "identifier-list" + ? w.identifier(p, this.parent) + : p.write(w); + }), w.token(this.tokens.close), ]); } @@ -1522,7 +1556,7 @@ class SimpleExtendedAttribute extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base * @param {import("../tokeniser").Tokeniser} tokeniser */ static parse(tokeniser) { - const name = tokeniser.consumeType("identifier"); + const name = tokeniser.consumeKind("identifier"); if (name) { return new SimpleExtendedAttribute({ source: tokeniser.source, @@ -1551,7 +1585,9 @@ class SimpleExtendedAttribute extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base } const value = this.params.rhsIsList ? list - : (0,_helpers_js__WEBPACK_IMPORTED_MODULE_3__.unescape)(tokens.secondaryName.value); + : this.params.tokens.secondaryName + ? (0,_helpers_js__WEBPACK_IMPORTED_MODULE_3__.unescape)(tokens.secondaryName.value) + : null; return { type, value }; } get arguments() { @@ -1567,7 +1603,7 @@ class SimpleExtendedAttribute extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base if (name === "LegacyNoInterfaceObject") { const message = `\`[LegacyNoInterfaceObject]\` extended attribute is an \ undesirable feature that may be removed from Web IDL in the future. Refer to the \ -[relevant upstream PR](https://github.com/heycam/webidl/pull/609) for more \ +[relevant upstream PR](https://github.com/whatwg/webidl/pull/609) for more \ information.`; yield (0,_error_js__WEBPACK_IMPORTED_MODULE_4__.validationError)( this.tokens.name, @@ -1579,7 +1615,7 @@ information.`; } else if (renamedLegacies.has(name)) { const message = `\`[${name}]\` extended attribute is a legacy feature \ that is now renamed to \`[${renamedLegacies.get(name)}]\`. Refer to the \ -[relevant upstream PR](https://github.com/heycam/webidl/pull/870) for more \ +[relevant upstream PR](https://github.com/whatwg/webidl/pull/870) for more \ information.`; yield (0,_error_js__WEBPACK_IMPORTED_MODULE_4__.validationError)(this.tokens.name, this, "renamed-legacy", message, { level: "warning", @@ -1638,9 +1674,12 @@ class ExtendedAttributes extends _array_base_js__WEBPACK_IMPORTED_MODULE_1__.Arr ); tokens.close = tokeniser.consume("]") || - tokeniser.error("Unexpected closing token of extended attribute"); + tokeniser.error( + "Expected a closing token for the extended attribute list" + ); if (!ret.length) { - tokeniser.error("Found an empty extended attribute"); + tokeniser.unconsume(tokens.close.index); + tokeniser.error("An extended attribute list must not be empty"); } if (tokeniser.probe("[")) { tokeniser.error( @@ -1696,7 +1735,8 @@ class ArrayBase extends Array { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "WrappedToken": () => (/* binding */ WrappedToken) +/* harmony export */ "WrappedToken": () => (/* binding */ WrappedToken), +/* harmony export */ "Eof": () => (/* binding */ Eof) /* harmony export */ }); /* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); /* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); @@ -1712,7 +1752,7 @@ class WrappedToken extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { */ static parser(tokeniser, type) { return () => { - const value = tokeniser.consumeType(type); + const value = tokeniser.consumeKind(type); if (value) { return new WrappedToken({ source: tokeniser.source, @@ -1725,6 +1765,30 @@ class WrappedToken extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { get value() { return (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.unescape)(this.tokens.value.value); } + + /** @param {import("../writer").Writer} w */ + write(w) { + return w.ts.wrap([ + w.token(this.tokens.value), + w.token(this.tokens.separator), + ]); + } +} + +class Eof extends WrappedToken { + /** + * @param {import("../tokeniser").Tokeniser} tokeniser + */ + static parse(tokeniser) { + const value = tokeniser.consumeKind("eof"); + if (value) { + return new Eof({ source: tokeniser.source, tokens: { value } }); + } + } + + get type() { + return "eof"; + } } @@ -1774,7 +1838,7 @@ class Argument extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { tokens.variadic = tokeniser.consume("..."); } tokens.name = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.consume(..._tokeniser_js__WEBPACK_IMPORTED_MODULE_4__.argumentNameKeywords); if (!tokens.name) { return tokeniser.unconsume(start_position); @@ -1877,9 +1941,9 @@ function autofixDictionaryArgumentOptionality(arg) { return () => { const firstToken = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_3__.getFirstToken)(arg.idlType); arg.tokens.optional = { + ...firstToken, type: "optional", value: "optional", - trivia: firstToken.trivia, }; firstToken.trivia = " "; autofixOptionalDictionaryDefaultValue(arg)(); @@ -1920,7 +1984,7 @@ class Default extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { } const def = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.const_value)(tokeniser) || - tokeniser.consumeType("string") || + tokeniser.consumeKind("string") || tokeniser.consume("null", "[", "{") || tokeniser.error("No value for default"); const expression = [def]; @@ -2010,7 +2074,7 @@ class Operation extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { ret.idlType = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.return_type)(tokeniser) || tokeniser.error("Missing return type"); tokens.name = - tokeniser.consumeType("identifier") || tokeniser.consume("includes"); + tokeniser.consumeKind("identifier") || tokeniser.consume("includes"); tokens.open = tokeniser.consume("(") || tokeniser.error("Invalid operation"); ret.arguments = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.argument_list)(tokeniser); @@ -2135,7 +2199,7 @@ class Attribute extends _base_js__WEBPACK_IMPORTED_MODULE_2__.Base { (0,_helpers_js__WEBPACK_IMPORTED_MODULE_3__.type_with_extended_attributes)(tokeniser, "attribute-type") || tokeniser.error("Attribute lacks a type"); tokens.name = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.consume("async", "required") || tokeniser.error("Attribute lacks a name"); tokens.termination = @@ -2233,7 +2297,7 @@ class EnumValue extends _token_js__WEBPACK_IMPORTED_MODULE_1__.WrappedToken { * @param {import("../tokeniser").Tokeniser} tokeniser */ static parse(tokeniser) { - const value = tokeniser.consumeType("string"); + const value = tokeniser.consumeKind("string"); if (value) { return new EnumValue({ source: tokeniser.source, tokens: { value } }); } @@ -2272,7 +2336,7 @@ class Enum extends _base_js__WEBPACK_IMPORTED_MODULE_2__.Base { return; } tokens.name = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.error("No name for enum"); const ret = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_0__.autoParenter)(new Enum({ source: tokeniser.source, tokens })); tokeniser.current = ret.this; @@ -2282,7 +2346,7 @@ class Enum extends _base_js__WEBPACK_IMPORTED_MODULE_2__.Base { allowDangler: true, listName: "enumeration", }); - if (tokeniser.probeType("string")) { + if (tokeniser.probeKind("string")) { tokeniser.error("No comma between enum values"); } tokens.close = @@ -2340,7 +2404,7 @@ class Includes extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { * @param {import("../tokeniser").Tokeniser} tokeniser */ static parse(tokeniser) { - const target = tokeniser.consumeType("identifier"); + const target = tokeniser.consumeKind("identifier"); if (!target) { return; } @@ -2351,7 +2415,7 @@ class Includes extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { return; } tokens.mixin = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.error("Incomplete includes statement"); tokens.termination = tokeniser.consume(";") || @@ -2414,7 +2478,7 @@ class Typedef extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.type_with_extended_attributes)(tokeniser, "typedef-type") || tokeniser.error("Typedef lacks a type"); tokens.name = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.error("Typedef lacks a name"); tokeniser.current = ret.this; tokens.termination = @@ -2473,7 +2537,7 @@ class CallbackFunction extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { new CallbackFunction({ source: tokeniser.source, tokens }) ); tokens.name = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.error("Callback lacks a name"); tokeniser.current = ret.this; tokens.assign = @@ -2578,7 +2642,6 @@ class Interface extends _container_js__WEBPACK_IMPORTED_MODULE_0__.Container { tokeniser, new Interface({ source: tokeniser.source, tokens }), { - type: "interface", inheritable: !partial, allowedMembers: [ [_constant_js__WEBPACK_IMPORTED_MODULE_3__.Constant.parse], @@ -2737,7 +2800,7 @@ function inheritance(tokeniser) { return {}; } const inheritance = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.error("Inheritance lacks a type"); return { colon, inheritance }; } @@ -2749,11 +2812,11 @@ class Container extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { * @param {T} instance * @param {*} args */ - static parse(tokeniser, instance, { type, inheritable, allowedMembers }) { - const { tokens } = instance; + static parse(tokeniser, instance, { inheritable, allowedMembers }) { + const { tokens, type } = instance; tokens.name = - tokeniser.consumeType("identifier") || - tokeniser.error(`Missing name in ${instance.type}`); + tokeniser.consumeKind("identifier") || + tokeniser.error(`Missing name in ${type}`); tokeniser.current = instance; instance = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_2__.autoParenter)(instance); if (inheritable) { @@ -2870,7 +2933,7 @@ class Constant extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { let idlType = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_2__.primitive_type)(tokeniser); if (!idlType) { const base = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.error("Const lacks a type"); idlType = new _type_js__WEBPACK_IMPORTED_MODULE_1__.Type({ source: tokeniser.source, tokens: { base } }); } @@ -2879,7 +2942,7 @@ class Constant extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { } idlType.type = "const-type"; tokens.name = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.error("Const lacks a name"); tokens.assign = tokeniser.consume("=") || tokeniser.error("Const lacks value assignment"); @@ -3199,7 +3262,6 @@ class Mixin extends _container_js__WEBPACK_IMPORTED_MODULE_0__.Container { tokeniser, new Mixin({ source: tokeniser.source, tokens }), { - type: "interface mixin", allowedMembers: [ [_constant_js__WEBPACK_IMPORTED_MODULE_1__.Constant.parse], [_helpers_js__WEBPACK_IMPORTED_MODULE_4__.stringifier], @@ -3247,7 +3309,6 @@ class Dictionary extends _container_js__WEBPACK_IMPORTED_MODULE_0__.Container { tokeniser, new Dictionary({ source: tokeniser.source, tokens }), { - type: "dictionary", inheritable: !partial, allowedMembers: [[_field_js__WEBPACK_IMPORTED_MODULE_1__.Field.parse]], } @@ -3291,7 +3352,7 @@ class Field extends _base_js__WEBPACK_IMPORTED_MODULE_0__.Base { (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.type_with_extended_attributes)(tokeniser, "dictionary-type") || tokeniser.error("Dictionary member lacks a type"); tokens.name = - tokeniser.consumeType("identifier") || + tokeniser.consumeKind("identifier") || tokeniser.error("Dictionary member lacks a name"); ret.default = _default_js__WEBPACK_IMPORTED_MODULE_3__.Default.parse(tokeniser); if (tokens.required && ret.default) @@ -3371,7 +3432,6 @@ class Namespace extends _container_js__WEBPACK_IMPORTED_MODULE_0__.Container { tokeniser, new Namespace({ source: tokeniser.source, tokens }), { - type: "namespace", allowedMembers: [ [_attribute_js__WEBPACK_IMPORTED_MODULE_1__.Attribute.parse, { noInherit: true, readonly: true }], [_constant_js__WEBPACK_IMPORTED_MODULE_5__.Constant.parse], @@ -3441,7 +3501,6 @@ class CallbackInterface extends _container_js__WEBPACK_IMPORTED_MODULE_0__.Conta tokeniser, new CallbackInterface({ source: tokeniser.source, tokens }), { - type: "callback interface", inheritable: !partial, allowedMembers: [ [_constant_js__WEBPACK_IMPORTED_MODULE_2__.Constant.parse], @@ -3525,13 +3584,7 @@ function write(ast, { templates: ts = templates } = {}) { const w = new Writer(ts); - function dispatch(it) { - if (it.type === "eof") { - return ts.trivia(it.trivia); - } - return it.write(w); - } - return ts.wrap(ast.map(dispatch)); + return ts.wrap(ast.map((it) => it.write(w))); } @@ -3544,6 +3597,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "validate": () => (/* binding */ validate) /* harmony export */ }); /* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3); +// @ts-check + function getMixinMap(all, unique) { @@ -3632,7 +3687,8 @@ function flatten(array) { } /** - * @param {*} ast AST or array of ASTs + * @param {import("./productions/base").Base[]} ast + * @return {import("./error").WebIDLErrorData[]} validation errors */ function validate(ast) { return [...validateIterable(flatten(ast))]; diff --git a/test/fixtures/wpt/url/idlharness-shadowrealm.window.js b/test/fixtures/wpt/url/idlharness-shadowrealm.window.js new file mode 100644 index 00000000000..2373f84e0e2 --- /dev/null +++ b/test/fixtures/wpt/url/idlharness-shadowrealm.window.js @@ -0,0 +1,2 @@ +// META: script=/resources/idlharness-shadowrealm.js +idl_test_shadowrealm(["url"], []); diff --git a/test/fixtures/wpt/url/resources/a-element-origin.js b/test/fixtures/wpt/url/resources/a-element-origin.js index 3b8cb1cbbe7..cb7d4a895c4 100644 --- a/test/fixtures/wpt/url/resources/a-element-origin.js +++ b/test/fixtures/wpt/url/resources/a-element-origin.js @@ -16,6 +16,8 @@ function runURLTests(urltests) { for(var i = 0, l = urltests.length; i < l; i++) { var expected = urltests[i] if (typeof expected === "string" || !("origin" in expected)) continue + // skip without base because you cannot unset the baseURL of a document + if (expected.base === null) continue; test(function() { var url = bURL(expected.input, expected.base) diff --git a/test/fixtures/wpt/url/resources/a-element.js b/test/fixtures/wpt/url/resources/a-element.js index f64531bc8bd..553855a870c 100644 --- a/test/fixtures/wpt/url/resources/a-element.js +++ b/test/fixtures/wpt/url/resources/a-element.js @@ -16,6 +16,8 @@ function runURLTests(urltests) { for(var i = 0, l = urltests.length; i < l; i++) { var expected = urltests[i] if (typeof expected === "string") continue // skip comments + // skip without base because you cannot unset the baseURL of a document + if (expected.base === null) continue; test(function() { var url = bURL(expected.input, expected.base) diff --git a/test/fixtures/wpt/url/resources/toascii.json b/test/fixtures/wpt/url/resources/toascii.json index 1fb57673816..b9ceea31067 100644 --- a/test/fixtures/wpt/url/resources/toascii.json +++ b/test/fixtures/wpt/url/resources/toascii.json @@ -23,30 +23,30 @@ "output": "xn----xhn" }, { - "input": "-x.xn--nxa", - "output": "-x.xn--nxa" + "input": "-x.xn--zca", + "output": "-x.xn--zca" }, { - "input": "-x.β", - "output": "-x.xn--nxa" + "input": "-x.ß", + "output": "-x.xn--zca" }, { "comment": "Label with trailing hyphen", - "input": "x-.xn--nxa", - "output": "x-.xn--nxa" + "input": "x-.xn--zca", + "output": "x-.xn--zca" }, { - "input": "x-.β", - "output": "x-.xn--nxa" + "input": "x-.ß", + "output": "x-.xn--zca" }, { "comment": "Empty labels", - "input": "x..xn--nxa", - "output": "x..xn--nxa" + "input": "x..xn--zca", + "output": "x..xn--zca" }, { - "input": "x..β", - "output": "x..xn--nxa" + "input": "x..ß", + "output": "x..xn--zca" }, { "comment": "Invalid Punycode", @@ -54,30 +54,35 @@ "output": null }, { - "input": "xn--a.xn--nxa", + "input": "xn--a.xn--zca", "output": null }, { - "input": "xn--a.β", + "input": "xn--a.ß", + "output": null + }, + { + "comment": "Invalid Punycode (contains non-ASCII character)", + "input": "xn--tešla", "output": null }, { "comment": "Valid Punycode", - "input": "xn--nxa.xn--nxa", - "output": "xn--nxa.xn--nxa" + "input": "xn--zca.xn--zca", + "output": "xn--zca.xn--zca" }, { "comment": "Mixed", - "input": "xn--nxa.β", - "output": "xn--nxa.xn--nxa" + "input": "xn--zca.ß", + "output": "xn--zca.xn--zca" }, { - "input": "ab--c.xn--nxa", - "output": "ab--c.xn--nxa" + "input": "ab--c.xn--zca", + "output": "ab--c.xn--zca" }, { - "input": "ab--c.β", - "output": "ab--c.xn--nxa" + "input": "ab--c.ß", + "output": "ab--c.xn--zca" }, { "comment": "CheckJoiners is true", @@ -126,12 +131,12 @@ "output": "xn--x01234567890123456789012345678901234567890123456789012345678901-6963b" }, { - "input": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa", - "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa" + "input": "x01234567890123456789012345678901234567890123456789012345678901x.xn--zca", + "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--zca" }, { - "input": "x01234567890123456789012345678901234567890123456789012345678901x.β", - "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa" + "input": "x01234567890123456789012345678901234567890123456789012345678901x.ß", + "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--zca" }, { "comment": "Domain excluding TLD longer than 253 code points", @@ -139,12 +144,12 @@ "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.x" }, { - "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa", - "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa" + "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--zca", + "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--zca" }, { - "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.β", - "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa" + "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.ß", + "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--zca" }, { "comment": "IDNA ignored code points", diff --git a/test/fixtures/wpt/url/resources/urltestdata.json b/test/fixtures/wpt/url/resources/urltestdata.json index a56b30caf98..3cf106965b1 100644 --- a/test/fixtures/wpt/url/resources/urltestdata.json +++ b/test/fixtures/wpt/url/resources/urltestdata.json @@ -3303,12 +3303,14 @@ { "input": "http:@:www.example.com", "base": "about:blank", - "failure": true + "failure": true, + "inputCanBeRelative": true }, { "input": "http:/@:www.example.com", "base": "about:blank", - "failure": true + "failure": true, + "inputCanBeRelative": true }, { "input": "http://@:www.example.com", @@ -3693,6 +3695,27 @@ "base": "about:blank", "failure": true }, + "IDNA labels should be matched case-insensitively", + { + "input": "http://a.b.c.XN--pokxncvks", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a.b.c.Xn--pokxncvks", + "base": "about:blank", + "failure": true + }, + { + "input": "http://10.0.0.XN--pokxncvks", + "base": "about:blank", + "failure": true + }, + { + "input": "http://10.0.0.xN--pokxncvks", + "base": "about:blank", + "failure": true + }, "Test name prepping, fullwidth input should be converted to ASCII and NOT IDN-ized. This is 'Go' in fullwidth UTF-8/UTF-16.", { "input": "http://Go.com", @@ -3894,21 +3917,6 @@ "search": "", "hash": "" }, - { - "input": "http://0..0x300/", - "base": "about:blank", - "href": "http://0..0x300/", - "origin": "http://0..0x300", - "protocol": "http:", - "username": "", - "password": "", - "host": "0..0x300", - "hostname": "0..0x300", - "port": "", - "pathname": "/", - "search": "", - "hash": "" - }, "Broken IPv6", { "input": "http://[www.google.com]/", @@ -4529,16 +4537,6 @@ "search": "", "hash": "" }, - { - "input": "sc://\u0000/", - "base": "about:blank", - "failure": true - }, - { - "input": "sc:// /", - "base": "about:blank", - "failure": true - }, { "input": "sc://%/", "base": "about:blank", @@ -4573,21 +4571,6 @@ "base": "about:blank", "failure": true }, - { - "input": "sc://[/", - "base": "about:blank", - "failure": true - }, - { - "input": "sc://\\/", - "base": "about:blank", - "failure": true - }, - { - "input": "sc://]/", - "base": "about:blank", - "failure": true - }, { "input": "x", "base": "sc://ñ", @@ -4699,42 +4682,47 @@ }, "Forbidden host code points", { - "input": "http://ab", + "input": "sc://a b/", "base": "about:blank", "failure": true }, { - "input": "http://a^b", + "input": "sc://ab", "base": "about:blank", "failure": true }, { - "input": "non-special://ab", + "input": "sc://a\\b/", "base": "about:blank", "failure": true }, { - "input": "non-special://a^b", + "input": "sc://a]b/", "base": "about:blank", "failure": true }, { - "input": "foo://ho\u0000st/", + "input": "sc://a^b", "base": "about:blank", "failure": true }, { - "input": "foo://ho|st/", + "input": "sc://a|b/", "base": "about:blank", "failure": true }, @@ -4754,51 +4742,425 @@ "username": "" }, { - "input": "foo://ho\u000Ast/", + "input": "foo://ho\u000Ast/", + "base": "about:blank", + "hash": "", + "host": "host", + "hostname": "host", + "href":"foo://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "foo:", + "search": "", + "username": "" + }, + { + "input": "foo://ho\u000Dst/", + "base": "about:blank", + "hash": "", + "host": "host", + "hostname": "host", + "href":"foo://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "foo:", + "search": "", + "username": "" + }, + "Forbidden domain code-points", + { + "input": "http://a\u0000b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0001b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0002b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0003b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0004b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0005b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0006b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0007b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0008b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u000Bb/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u000Cb/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u000Eb/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u000Fb/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0010b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0011b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0012b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0013b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0014b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0015b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0016b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0017b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0018b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u0019b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u001Ab/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u001Bb/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u001Cb/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u001Db/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u001Eb/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u001Fb/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a%b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ab", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a[b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a]b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a^b", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a|b/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a\u007Fb/", + "base": "about:blank", + "failure": true + }, + "Forbidden domain codepoints: tabs and newlines are removed during preprocessing", + { + "input": "http://ho\u0009st/", + "base": "about:blank", + "hash": "", + "host": "host", + "hostname": "host", + "href":"http://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "http:", + "search": "", + "username": "" + }, + { + "input": "http://ho\u000Ast/", + "base": "about:blank", + "hash": "", + "host": "host", + "hostname": "host", + "href":"http://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "http:", + "search": "", + "username": "" + }, + { + "input": "http://ho\u000Dst/", + "base": "about:blank", + "hash": "", + "host": "host", + "hostname": "host", + "href":"http://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "http:", + "search": "", + "username": "" + }, + "Encoded forbidden domain codepoints in special URLs", + { + "input": "http://ho%00st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%01st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%02st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%03st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%04st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%05st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%06st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%07st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%08st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%09st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%0Ast/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%0Bst/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%0Cst/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%0Dst/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%0Est/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%0Fst/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%10st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%11st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%12st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%13st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%14st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%15st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%16st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%17st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%18st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%19st/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://ho%1Ast/", "base": "about:blank", - "hash": "", - "host": "host", - "hostname": "host", - "href":"foo://host/", - "password": "", - "pathname": "/", - "port":"", - "protocol": "foo:", - "search": "", - "username": "" + "failure": true }, { - "input": "foo://ho\u000Dst/", + "input": "http://ho%1Bst/", "base": "about:blank", - "hash": "", - "host": "host", - "hostname": "host", - "href":"foo://host/", - "password": "", - "pathname": "/", - "port":"", - "protocol": "foo:", - "search": "", - "username": "" + "failure": true }, - "Encoded forbidden host codepoints in special URLs", { - "input": "http://ho%00st/", + "input": "http://ho%1Cst/", "base": "about:blank", "failure": true }, { - "input": "http://ho%09st/", + "input": "http://ho%1Dst/", "base": "about:blank", "failure": true }, { - "input": "http://ho%0Ast/", + "input": "http://ho%1Est/", "base": "about:blank", "failure": true }, { - "input": "http://ho%0Dst/", + "input": "http://ho%1Fst/", "base": "about:blank", "failure": true }, @@ -4812,6 +5174,11 @@ "base": "about:blank", "failure": true }, + { + "input": "http://ho%25st/", + "base": "about:blank", + "failure": true + }, { "input": "http://ho%2Fst/", "base": "about:blank", @@ -4862,32 +5229,37 @@ "base": "about:blank", "failure": true }, - "Allowed host code points", { - "input": "http://\u001F!\"$&'()*+,-.;=_`{}~/", + "input": "http://ho%7Fst/", + "base": "about:blank", + "failure": true + }, + "Allowed host/domain code points", + { + "input": "http://!\"$&'()*+,-.;=_`{}~/", "base": "about:blank", - "href": "http://\u001F!\"$&'()*+,-.;=_`{}~/", - "origin": "http://\u001F!\"$&'()*+,-.;=_`{}~", + "href": "http://!\"$&'()*+,-.;=_`{}~/", + "origin": "http://!\"$&'()*+,-.;=_`{}~", "protocol": "http:", "username": "", "password": "", - "host": "\u001F!\"$&'()*+,-.;=_`{}~", - "hostname": "\u001F!\"$&'()*+,-.;=_`{}~", + "host": "!\"$&'()*+,-.;=_`{}~", + "hostname": "!\"$&'()*+,-.;=_`{}~", "port": "", "pathname": "/", "search": "", "hash": "" }, { - "input": "sc://\u001F!\"$&'()*+,-.;=_`{}~/", + "input": "sc://\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000B\u000C\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u007F!\"$%&'()*+,-.;=_`{}~/", "base": "about:blank", - "href": "sc://%1F!\"$&'()*+,-.;=_`{}~/", + "href": "sc://%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~/", "origin": "null", "protocol": "sc:", "username": "", "password": "", - "host": "%1F!\"$&'()*+,-.;=_`{}~", - "hostname": "%1F!\"$&'()*+,-.;=_`{}~", + "host": "%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~", + "hostname": "%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~", "port": "", "pathname": "/", "search": "", @@ -5159,6 +5531,36 @@ "hash": "#foo%60bar" }, "# IPv4 parsing (via https://github.com/nodejs/node/pull/10317)", + { + "input": "http://1.2.3.4/", + "base": "http://other.com/", + "href": "http://1.2.3.4/", + "origin": "http://1.2.3.4", + "protocol": "http:", + "username": "", + "password": "", + "host": "1.2.3.4", + "hostname": "1.2.3.4", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://1.2.3.4./", + "base": "http://other.com/", + "href": "http://1.2.3.4/", + "origin": "http://1.2.3.4", + "protocol": "http:", + "username": "", + "password": "", + "host": "1.2.3.4", + "hostname": "1.2.3.4", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, { "input": "http://192.168.257", "base": "http://other.com/", @@ -5174,6 +5576,21 @@ "search": "", "hash": "" }, + { + "input": "http://192.168.257.", + "base": "http://other.com/", + "href": "http://192.168.1.1/", + "origin": "http://192.168.1.1", + "protocol": "http:", + "username": "", + "password": "", + "host": "192.168.1.1", + "hostname": "192.168.1.1", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, { "input": "http://192.168.257.com", "base": "http://other.com/", @@ -5234,6 +5651,21 @@ "search": "", "hash": "" }, + { + "input": "http://999999999.", + "base": "http://other.com/", + "href": "http://59.154.201.255/", + "origin": "http://59.154.201.255", + "protocol": "http:", + "username": "", + "password": "", + "host": "59.154.201.255", + "hostname": "59.154.201.255", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, { "input": "http://999999999.com", "base": "http://other.com/", @@ -5314,21 +5746,6 @@ "base": "http://other.com/", "failure": true }, - { - "input": "http://256.256.256.256.256", - "base": "http://other.com/", - "href": "http://256.256.256.256.256/", - "origin": "http://256.256.256.256.256", - "protocol": "http:", - "username": "", - "password": "", - "host": "256.256.256.256.256", - "hostname": "256.256.256.256.256", - "port": "", - "pathname": "/", - "search": "", - "hash": "" - }, { "input": "https://0x.0x.0", "base": "about:blank", @@ -6373,7 +6790,8 @@ { "input": "\\\\\\.\\Y:", "base": "about:blank", - "failure": true + "failure": true, + "inputCanBeRelative": true }, "# file: drive letter cases from https://crbug.com/1078698 but lowercased", { @@ -6435,7 +6853,8 @@ { "input": "\\\\\\.\\y:", "base": "about:blank", - "failure": true + "failure": true, + "inputCanBeRelative": true }, "# Additional file URL tests for (https://github.com/whatwg/url/issues/405)", { @@ -7269,6 +7688,7 @@ "input": "blob:https://example.com:443/", "base": "about:blank", "href": "blob:https://example.com:443/", + "origin": "https://example.com", "protocol": "blob:", "username": "", "password": "", @@ -7283,6 +7703,7 @@ "input": "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf", "base": "about:blank", "href": "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf", + "origin": "null", "protocol": "blob:", "username": "", "password": "", @@ -7293,21 +7714,22 @@ "search": "", "hash": "" }, - "Invalid IPv4 radix digits", { - "input": "http://0177.0.0.0189", + "input": "blob:", "base": "about:blank", - "href": "http://0177.0.0.0189/", - "protocol": "http:", + "href": "blob:", + "origin": "null", + "protocol": "blob:", "username": "", "password": "", - "host": "0177.0.0.0189", - "hostname": "0177.0.0.0189", + "host": "", + "hostname": "", "port": "", - "pathname": "/", + "pathname": "", "search": "", "hash": "" }, + "Invalid IPv4 radix digits", { "input": "http://0x7f.0.0.0x7g", "base": "about:blank", @@ -8016,5 +8438,176 @@ "protocol": "abc:", "search": "", "username": "" + }, + "Empty query and fragment with blank should throw an error", + { + "input": "#", + "base": null, + "failure": true + }, + { + "input": "?", + "base": null, + "failure": true + }, + "Last component looks like a number, but not valid IPv4", + { + "input": "http://1.2.3.4.5", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://1.2.3.4.5.", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://0..0x300/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://0..0x300./", + "base": "about:blank", + "failure": true + }, + { + "input": "http://256.256.256.256.256", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://256.256.256.256.256.", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://1.2.3.08", + "base": "about:blank", + "failure": true + }, + { + "input": "http://1.2.3.08.", + "base": "about:blank", + "failure": true + }, + { + "input": "http://1.2.3.09", + "base": "about:blank", + "failure": true + }, + { + "input": "http://09.2.3.4", + "base": "about:blank", + "failure": true + }, + { + "input": "http://09.2.3.4.", + "base": "about:blank", + "failure": true + }, + { + "input": "http://01.2.3.4.5", + "base": "about:blank", + "failure": true + }, + { + "input": "http://01.2.3.4.5.", + "base": "about:blank", + "failure": true + }, + { + "input": "http://0x100.2.3.4", + "base": "about:blank", + "failure": true + }, + { + "input": "http://0x100.2.3.4.", + "base": "about:blank", + "failure": true + }, + { + "input": "http://0x1.2.3.4.5", + "base": "about:blank", + "failure": true + }, + { + "input": "http://0x1.2.3.4.5.", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.1.2.3.4", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.1.2.3.4.", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.2.3.4", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.2.3.4.", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.09", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.09.", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.0x4", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.0x4.", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.09..", + "base": "about:blank", + "hash": "", + "host": "foo.09..", + "hostname": "foo.09..", + "href":"http://foo.09../", + "password": "", + "pathname": "/", + "port":"", + "protocol": "http:", + "search": "", + "username": "" + }, + { + "input": "http://0999999999999999999/", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.0x", + "base": "about:blank", + "failure": true + }, + { + "input": "http://foo.0XFfFfFfFfFfFfFfFfFfAcE123", + "base": "about:blank", + "failure": true + }, + { + "input": "http://💩.123/", + "base": "about:blank", + "failure": true } ] diff --git a/test/fixtures/wpt/url/url-constructor.any.js b/test/fixtures/wpt/url/url-constructor.any.js index 3f4af56d2a9..dfa98092fa6 100644 --- a/test/fixtures/wpt/url/url-constructor.any.js +++ b/test/fixtures/wpt/url/url-constructor.any.js @@ -1,7 +1,7 @@ // META: timeout=long function bURL(url, base) { - return new URL(url, base || "about:blank") + return base ? new URL(url, base) : new URL(url) } function runURLTests(urltests) { diff --git a/test/fixtures/wpt/url/url-origin.any.js b/test/fixtures/wpt/url/url-origin.any.js index d9ef64c73b8..9c1f97ed2e5 100644 --- a/test/fixtures/wpt/url/url-origin.any.js +++ b/test/fixtures/wpt/url/url-origin.any.js @@ -1,7 +1,7 @@ promise_test(() => fetch("resources/urltestdata.json").then(res => res.json()).then(runURLTests), "Loading data…"); function bURL(url, base) { - return new URL(url, base || "about:blank") + return base ? new URL(url, base) : new URL(url) } function runURLTests(urltests) { diff --git a/test/fixtures/wpt/url/url-setters-stripping.any.js b/test/fixtures/wpt/url/url-setters-stripping.any.js index 3413c6cd5ad..ac90cc17e0b 100644 --- a/test/fixtures/wpt/url/url-setters-stripping.any.js +++ b/test/fixtures/wpt/url/url-setters-stripping.any.js @@ -66,7 +66,7 @@ for(const scheme of ["https", "wpt++"]) { ["trailing", "test" + (scheme === "https" ? cpString : encodeURIComponent(cpString)), "test" + String.fromCodePoint(i)] ]) { test(() => { - const expected = i === 0x00 ? "host" : stripped ? "test" : expectedPart; + const expected = i === 0x00 || (scheme === "https" && i === 0x1F) ? "host" : stripped ? "test" : expectedPart; const url = urlRecord(scheme); url.host = input; assert_equals(url.host, expected + ":8000", "property"); @@ -74,7 +74,7 @@ for(const scheme of ["https", "wpt++"]) { }, `Setting host with ${type} ${cpReference} (${scheme}:)`); test(() => { - const expected = i === 0x00 ? "host" : stripped ? "test" : expectedPart; + const expected = i === 0x00 || (scheme === "https" && i === 0x1F) ? "host" : stripped ? "test" : expectedPart; const url = urlRecord(scheme); url.hostname = input; assert_equals(url.hostname, expected, "property"); diff --git a/test/fixtures/wpt/versions.json b/test/fixtures/wpt/versions.json index 2eda2919ea9..7190d11856e 100644 --- a/test/fixtures/wpt/versions.json +++ b/test/fixtures/wpt/versions.json @@ -4,15 +4,19 @@ "path": "common" }, "console": { - "commit": "3b1f72e99a91d31551edd2147dc7b564eaf25d72", + "commit": "767ae354642bee1e4d90b28df4480475b9260e14", "path": "console" }, "dom/abort": { "commit": "c49cafb491d99d6318f8f24a26936cc66501f412", "path": "dom/abort" }, + "dom/events": { + "commit": "f8821adb281696322f4bd96d412a98ae510f9125", + "path": "dom/events" + }, "encoding": { - "commit": "35f70910d3753c8b650fdfd4c716caedfefe88c9", + "commit": "c1b24fce6e625c1b79124a58f27bf9adce02d5d7", "path": "encoding" }, "FileAPI": { @@ -20,7 +24,7 @@ "path": "FileAPI" }, "hr-time": { - "commit": "9910784394858a8e34d9eb4e5d00788765abf837", + "commit": "34cafd797e58dad280d20040eee012d49ccfa91f", "path": "hr-time" }, "html/webappapis/atob": { @@ -44,7 +48,7 @@ "path": "performance-timeline" }, "resources": { - "commit": "fbee645164468c030072c46a934e2c876b143f8e", + "commit": "c5b428f15acfb17fe59b5a6f04a21c288a76ed36", "path": "resources" }, "streams": { @@ -52,7 +56,7 @@ "path": "streams" }, "url": { - "commit": "77d54aa9e0405f737987b59331f3584e3e1c26f9", + "commit": "0e5b126cd0a8da9186b738b8c9278d19b594c51f", "path": "url" }, "user-timing": { @@ -60,7 +64,11 @@ "path": "user-timing" }, "WebCryptoAPI": { - "commit": "cdd0f03df41b222aed098fbbb11c6a3cc500a86b", + "commit": "edca84af42bd7e84da94e63b322fe343191842d2", "path": "WebCryptoAPI" + }, + "webidl/ecmascript-binding/es-exceptions": { + "commit": "a370aad338d6ed743abb4d2c6ae84a7f1058558c", + "path": "webidl/ecmascript-binding/es-exceptions" } } \ No newline at end of file diff --git a/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-constants.any.js b/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-constants.any.js new file mode 100644 index 00000000000..bb846a494eb --- /dev/null +++ b/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-constants.any.js @@ -0,0 +1,51 @@ +'use strict'; + +test(function() { + // https://www.w3.org/Bugs/Public/show_bug.cgi?id=27732 + var constants = [ + "INDEX_SIZE_ERR", + "DOMSTRING_SIZE_ERR", + "HIERARCHY_REQUEST_ERR", + "WRONG_DOCUMENT_ERR", + "INVALID_CHARACTER_ERR", + "NO_DATA_ALLOWED_ERR", + "NO_MODIFICATION_ALLOWED_ERR", + "NOT_FOUND_ERR", + "NOT_SUPPORTED_ERR", + "INUSE_ATTRIBUTE_ERR", + "INVALID_STATE_ERR", + "SYNTAX_ERR", + "INVALID_MODIFICATION_ERR", + "NAMESPACE_ERR", + "INVALID_ACCESS_ERR", + "VALIDATION_ERR", + "TYPE_MISMATCH_ERR", + "SECURITY_ERR", + "NETWORK_ERR", + "ABORT_ERR", + "URL_MISMATCH_ERR", + "QUOTA_EXCEEDED_ERR", + "TIMEOUT_ERR", + "INVALID_NODE_TYPE_ERR", + "DATA_CLONE_ERR" + ] + var objects = [ + [DOMException, "DOMException constructor object"], + [DOMException.prototype, "DOMException prototype object"] + ] + constants.forEach(function(name, i) { + objects.forEach(function(o) { + var object = o[0], description = o[1]; + test(function() { + assert_equals(object[name], i + 1, name) + assert_own_property(object, name) + var pd = Object.getOwnPropertyDescriptor(object, name) + assert_false("get" in pd, "get") + assert_false("set" in pd, "set") + assert_false(pd.writable, "writable") + assert_true(pd.enumerable, "enumerable") + assert_false(pd.configurable, "configurable") + }, "Constant " + name + " on " + description) + }) + }) +}) diff --git a/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype.any.js b/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype.any.js new file mode 100644 index 00000000000..a015470cad6 --- /dev/null +++ b/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype.any.js @@ -0,0 +1,32 @@ +test(function() { + assert_own_property(self, "DOMException", "property of global"); + + var desc = Object.getOwnPropertyDescriptor(self, "DOMException"); + assert_false("get" in desc, "get"); + assert_false("set" in desc, "set"); + assert_true(desc.writable, "writable"); + assert_false(desc.enumerable, "enumerable"); + assert_true(desc.configurable, "configurable"); +}, "existence and property descriptor of DOMException"); + +test(function() { + assert_own_property(self.DOMException, "prototype", "prototype property"); + + var desc = Object.getOwnPropertyDescriptor(self.DOMException, "prototype"); + assert_false("get" in desc, "get"); + assert_false("set" in desc, "set"); + assert_false(desc.writable, "writable"); + assert_false(desc.enumerable, "enumerable"); + assert_false(desc.configurable, "configurable"); +}, "existence and property descriptor of DOMException.prototype"); + +test(function() { + assert_own_property(self.DOMException.prototype, "constructor", "property of prototype"); + var desc = Object.getOwnPropertyDescriptor(self.DOMException.prototype, "constructor"); + assert_false("get" in desc, "get"); + assert_false("set" in desc, "set"); + assert_true(desc.writable, "writable"); + assert_false(desc.enumerable, "enumerable"); + assert_true(desc.configurable, "configurable"); + assert_equals(self.DOMException.prototype.constructor, self.DOMException, "equality with actual constructor"); +}, "existence and property descriptor of DOMException.prototype.constructor"); diff --git a/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-constructor-behavior.any.js b/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-constructor-behavior.any.js new file mode 100644 index 00000000000..e9917af2287 --- /dev/null +++ b/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-constructor-behavior.any.js @@ -0,0 +1,140 @@ +'use strict'; + +test(function() { + var ex = new DOMException(); + assert_equals(ex.name, "Error", + "Not passing a name should end up with 'Error' as the name"); + assert_equals(ex.message, "", + "Not passing a message should end up with empty string as the message"); +}, 'new DOMException()'); + +test(function() { + var ex = new DOMException(); + assert_false(ex.hasOwnProperty("name"), + "The name property should be inherited"); + assert_false(ex.hasOwnProperty("message"), + "The message property should be inherited"); +}, 'new DOMException(): inherited-ness'); + +test(function() { + var ex = new DOMException(null); + assert_equals(ex.name, "Error", + "Not passing a name should end up with 'Error' as the name"); + assert_equals(ex.message, "null", + "Passing null as message should end up with stringified 'null' as the message"); +}, 'new DOMException(null)'); + +test(function() { + var ex = new DOMException(undefined); + assert_equals(ex.name, "Error", + "Not passing a name should end up with 'Error' as the name"); + assert_equals(ex.message, "", + "Not passing a message should end up with empty string as the message"); +}, 'new DOMException(undefined)'); + +test(function() { + var ex = new DOMException(undefined); + assert_false(ex.hasOwnProperty("name"), + "The name property should be inherited"); + assert_false(ex.hasOwnProperty("message"), + "The message property should be inherited"); +}, 'new DOMException(undefined): inherited-ness'); + +test(function() { + var ex = new DOMException("foo"); + assert_equals(ex.name, "Error", + "Not passing a name should still end up with 'Error' as the name"); + assert_equals(ex.message, "foo", "Should be using passed-in message"); +}, 'new DOMException("foo")'); + +test(function() { + var ex = new DOMException("foo"); + assert_false(ex.hasOwnProperty("name"), + "The name property should be inherited"); + assert_false(ex.hasOwnProperty("message"), + "The message property should be inherited"); +}, 'new DOMException("foo"): inherited-ness'); + +test(function() { + var ex = new DOMException("bar", undefined); + assert_equals(ex.name, "Error", + "Passing undefined for name should end up with 'Error' as the name"); + assert_equals(ex.message, "bar", "Should still be using passed-in message"); +}, 'new DOMException("bar", undefined)'); + +test(function() { + var ex = new DOMException("bar", "NotSupportedError"); + assert_equals(ex.name, "NotSupportedError", "Should be using the passed-in name"); + assert_equals(ex.message, "bar", "Should still be using passed-in message"); + assert_equals(ex.code, DOMException.NOT_SUPPORTED_ERR, + "Should have the right exception code"); +}, 'new DOMException("bar", "NotSupportedError")'); + +test(function() { + var ex = new DOMException("bar", "NotSupportedError"); + assert_false(ex.hasOwnProperty("name"), + "The name property should be inherited"); + assert_false(ex.hasOwnProperty("message"), + "The message property should be inherited"); +}, 'new DOMException("bar", "NotSupportedError"): inherited-ness'); + +test(function() { + var ex = new DOMException("bar", "foo"); + assert_equals(ex.name, "foo", "Should be using the passed-in name"); + assert_equals(ex.message, "bar", "Should still be using passed-in message"); + assert_equals(ex.code, 0, + "Should have 0 for code for a name not in the exception names table"); +}, 'new DOMException("bar", "foo")'); + +[ + {name: "IndexSizeError", code: 1}, + {name: "HierarchyRequestError", code: 3}, + {name: "WrongDocumentError", code: 4}, + {name: "InvalidCharacterError", code: 5}, + {name: "NoModificationAllowedError", code: 7}, + {name: "NotFoundError", code: 8}, + {name: "NotSupportedError", code: 9}, + {name: "InUseAttributeError", code: 10}, + {name: "InvalidStateError", code: 11}, + {name: "SyntaxError", code: 12}, + {name: "InvalidModificationError", code: 13}, + {name: "NamespaceError", code: 14}, + {name: "InvalidAccessError", code: 15}, + {name: "TypeMismatchError", code: 17}, + {name: "SecurityError", code: 18}, + {name: "NetworkError", code: 19}, + {name: "AbortError", code: 20}, + {name: "URLMismatchError", code: 21}, + {name: "QuotaExceededError", code: 22}, + {name: "TimeoutError", code: 23}, + {name: "InvalidNodeTypeError", code: 24}, + {name: "DataCloneError", code: 25}, + + // These were removed from the error names table. + // See https://github.com/heycam/webidl/pull/946. + {name: "DOMStringSizeError", code: 0}, + {name: "NoDataAllowedError", code: 0}, + {name: "ValidationError", code: 0}, + + // The error names which don't have legacy code values. + {name: "EncodingError", code: 0}, + {name: "NotReadableError", code: 0}, + {name: "UnknownError", code: 0}, + {name: "ConstraintError", code: 0}, + {name: "DataError", code: 0}, + {name: "TransactionInactiveError", code: 0}, + {name: "ReadOnlyError", code: 0}, + {name: "VersionError", code: 0}, + {name: "OperationError", code: 0}, + {name: "NotAllowedError", code: 0} +].forEach(function(test_case) { + test(function() { + var ex = new DOMException("msg", test_case.name); + assert_equals(ex.name, test_case.name, + "Should be using the passed-in name"); + assert_equals(ex.message, "msg", + "Should be using the passed-in message"); + assert_equals(ex.code, test_case.code, + "Should have matching legacy code from error names table"); + },'new DOMexception("msg", "' + test_case.name + '")'); +}); diff --git a/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.js b/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.js new file mode 100644 index 00000000000..cd4e5b63419 --- /dev/null +++ b/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.js @@ -0,0 +1,120 @@ +"use strict"; + +test(() => { + assert_throws_js(TypeError, () => DOMException()); +}, "Cannot construct without new"); + +test(() => { + assert_equals(Object.getPrototypeOf(DOMException.prototype), Error.prototype); +}, "inherits from Error: prototype-side"); + +test(() => { + assert_equals(Object.getPrototypeOf(DOMException), Function.prototype); +}, "does not inherit from Error: class-side"); + +test(() => { + const e = new DOMException("message", "name"); + assert_false(e.hasOwnProperty("message"), "property is not own"); + + const propDesc = Object.getOwnPropertyDescriptor(DOMException.prototype, "message"); + assert_equals(typeof propDesc.get, "function", "property descriptor is a getter"); + assert_equals(propDesc.set, undefined, "property descriptor is not a setter"); + assert_true(propDesc.enumerable, "property descriptor enumerable"); + assert_true(propDesc.configurable, "property descriptor configurable"); +}, "message property descriptor"); + +test(() => { + const getter = Object.getOwnPropertyDescriptor(DOMException.prototype, "message").get; + + assert_throws_js(TypeError, () => getter.apply({})); +}, "message getter performs brand checks (i.e. is not [LegacyLenientThis])"); + +test(() => { + const e = new DOMException("message", "name"); + assert_false(e.hasOwnProperty("name"), "property is not own"); + + const propDesc = Object.getOwnPropertyDescriptor(DOMException.prototype, "name"); + assert_equals(typeof propDesc.get, "function", "property descriptor is a getter"); + assert_equals(propDesc.set, undefined, "property descriptor is not a setter"); + assert_true(propDesc.enumerable, "property descriptor enumerable"); + assert_true(propDesc.configurable, "property descriptor configurable"); +}, "name property descriptor"); + +test(() => { + const getter = Object.getOwnPropertyDescriptor(DOMException.prototype, "name").get; + + assert_throws_js(TypeError, () => getter.apply({})); +}, "name getter performs brand checks (i.e. is not [LegacyLenientThis])"); + +test(() => { + const e = new DOMException("message", "name"); + assert_false(e.hasOwnProperty("code"), "property is not own"); + + const propDesc = Object.getOwnPropertyDescriptor(DOMException.prototype, "code"); + assert_equals(typeof propDesc.get, "function", "property descriptor is a getter"); + assert_equals(propDesc.set, undefined, "property descriptor is not a setter"); + assert_true(propDesc.enumerable, "property descriptor enumerable"); + assert_true(propDesc.configurable, "property descriptor configurable"); +}, "code property descriptor"); + +test(() => { + const getter = Object.getOwnPropertyDescriptor(DOMException.prototype, "code").get; + + assert_throws_js(TypeError, () => getter.apply({})); +}, "code getter performs brand checks (i.e. is not [LegacyLenientThis])"); + +test(() => { + const e = new DOMException("message", "InvalidCharacterError"); + assert_equals(e.code, 5, "Initially the code is set to 5"); + + Object.defineProperty(e, "name", { + value: "WrongDocumentError" + }); + + assert_equals(e.code, 5, "The code is still set to 5"); +}, "code property is not affected by shadowing the name property"); + +test(() => { + const e = new DOMException("message", "name"); + assert_equals(Object.prototype.toString.call(e), "[object DOMException]"); +}, "Object.prototype.toString behavior is like other interfaces"); + +test(() => { + const e = new DOMException("message", "name"); + assert_false(e.hasOwnProperty("toString"), "toString must not exist on the instance"); + assert_false(DOMException.prototype.hasOwnProperty("toString"), "toString must not exist on DOMException.prototype"); + assert_equals(typeof e.toString, "function", "toString must still exist (via Error.prototype)"); +}, "Inherits its toString() from Error.prototype"); + +test(() => { + const e = new DOMException("message", "name"); + assert_equals(e.toString(), "name: message", + "The default Error.prototype.toString() behavior must work on supplied name and message"); + + Object.defineProperty(e, "name", { value: "new name" }); + Object.defineProperty(e, "message", { value: "new message" }); + assert_equals(e.toString(), "new name: new message", + "The default Error.prototype.toString() behavior must work on shadowed names and messages"); +}, "toString() behavior from Error.prototype applies as expected"); + +test(() => { + assert_throws_js(TypeError, () => DOMException.prototype.toString()); +}, "DOMException.prototype.toString() applied to DOMException.prototype throws because of name/message brand checks"); + +test(() => { + let stackOnNormalErrors; + try { + throw new Error("normal error"); + } catch (e) { + stackOnNormalErrors = e.stack; + } + + let stackOnDOMException; + try { + throw new DOMException("message", "name"); + } catch (e) { + stackOnDOMException = e.stack; + } + + assert_equals(typeof stackOnDOMException, typeof stackOnNormalErrors, "The typeof values must match"); +}, "If the implementation has a stack property on normal errors, it also does on DOMExceptions"); diff --git a/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/exceptions.html b/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/exceptions.html new file mode 100644 index 00000000000..d26c6626699 --- /dev/null +++ b/test/fixtures/wpt/webidl/ecmascript-binding/es-exceptions/exceptions.html @@ -0,0 +1,78 @@ + + +DOMException-throwing tests + +
    + + + diff --git a/test/internet/test-https-issue-43963.js b/test/internet/test-https-issue-43963.js new file mode 100644 index 00000000000..0d5a6109145 --- /dev/null +++ b/test/internet/test-https-issue-43963.js @@ -0,0 +1,31 @@ +'use strict'; +const common = require('../common'); +const https = require('node:https'); +const assert = require('node:assert'); + +const server = https.createServer(); + +server.on( + 'tlsClientError', + common.mustCall((exception, tlsSocket) => { + assert.strictEqual(exception !== undefined, true); + assert.strictEqual(Object.keys(tlsSocket.address()).length !== 0, true); + assert.strictEqual(tlsSocket.localAddress !== undefined, true); + assert.strictEqual(tlsSocket.localPort !== undefined, true); + assert.strictEqual(tlsSocket.remoteAddress !== undefined, true); + assert.strictEqual(tlsSocket.remoteFamily !== undefined, true); + assert.strictEqual(tlsSocket.remotePort !== undefined, true); + }), +); + +server.listen(0, () => { + const req = https.request({ + hostname: '127.0.0.1', + port: server.address().port, + }); + req.on( + 'error', + common.mustCall(() => server.close()), + ); + req.end(); +}); diff --git a/test/internet/test-inspector-help-page.js b/test/internet/test-inspector-help-page.js index 7baff031daf..d9ae17c5a88 100644 --- a/test/internet/test-inspector-help-page.js +++ b/test/internet/test-inspector-help-page.js @@ -14,7 +14,7 @@ const stderr = child.stderr.toString(); const helpUrl = stderr.match(/For help, see: (.+)/)[1]; function check(url, cb) { - https.get(url, common.mustCall((res) => { + https.get(url, { agent: new https.Agent() }, common.mustCall((res) => { assert(res.statusCode >= 200 && res.statusCode < 400); if (res.statusCode >= 300) diff --git a/test/js-native-api/common.h b/test/js-native-api/common.h index 73f60906630..46784059a1f 100644 --- a/test/js-native-api/common.h +++ b/test/js-native-api/common.h @@ -62,6 +62,9 @@ #define DECLARE_NODE_API_GETTER(name, func) \ { (name), NULL, NULL, (func), NULL, NULL, napi_default, NULL } +#define DECLARE_NODE_API_PROPERTY_VALUE(name, value) \ + { (name), NULL, NULL, NULL, NULL, (value), napi_default, NULL } + void add_returned_status(napi_env env, const char* key, napi_value object, diff --git a/test/js-native-api/test_exception/test_exception.c b/test/js-native-api/test_exception/test_exception.c index 844f4475ac4..053f048466d 100644 --- a/test/js-native-api/test_exception/test_exception.c +++ b/test/js-native-api/test_exception/test_exception.c @@ -2,6 +2,7 @@ #include "../common.h" static bool exceptionWasPending = false; +static int num = 0x23432; static napi_value returnException(napi_env env, napi_callback_info info) { size_t argc = 1; @@ -83,7 +84,7 @@ static napi_value createExternal(napi_env env, napi_callback_info info) { napi_value external; NODE_API_CALL(env, - napi_create_external(env, NULL, finalizer, NULL, &external)); + napi_create_external(env, &num, finalizer, NULL, &external)); return external; } diff --git a/test/js-native-api/test_general/test_general.c b/test/js-native-api/test_general/test_general.c index 7b755ce9a9f..b474ab442cb 100644 --- a/test/js-native-api/test_general/test_general.c +++ b/test/js-native-api/test_general/test_general.c @@ -1,3 +1,8 @@ +// we define NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED here to +// validate that it can be used as a form of test itself. It is +// not related to any of the other tests +// defined in the file +#define NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED #include #include #include diff --git a/test/js-native-api/test_object/test.js b/test/js-native-api/test_object/test.js index 807c920bd46..d5b9ab8423b 100644 --- a/test/js-native-api/test_object/test.js +++ b/test/js-native-api/test_object/test.js @@ -19,7 +19,7 @@ const object = { assert.strictEqual(test_object.Get(object, 'hello'), 'world'); assert.strictEqual(test_object.GetNamed(object, 'hello'), 'world'); assert.deepStrictEqual(test_object.Get(object, 'array'), - [ 1, 94, 'str', 12.321, { test: 'obj in arr' } ]); + [1, 94, 'str', 12.321, { test: 'obj in arr' }]); assert.deepStrictEqual(test_object.Get(object, 'newObject'), { test: 'obj in obj' }); @@ -54,7 +54,7 @@ assert.strictEqual(newObject.test_string, 'test string'); { // Verify that napi_has_own_property() fails if property is not a name. - [true, false, null, undefined, {}, [], 0, 1, () => {}].forEach((value) => { + [true, false, null, undefined, {}, [], 0, 1, () => { }].forEach((value) => { assert.throws(() => { test_object.HasOwn({}, value); }, /^Error: A string or symbol was expected$/); @@ -163,14 +163,23 @@ assert.strictEqual(newObject.test_string, 'test string'); // Verify that objects can be type-tagged and type-tag-checked. const obj1 = test_object.TypeTaggedInstance(0); const obj2 = test_object.TypeTaggedInstance(1); + const obj3 = test_object.TypeTaggedInstance(2); + const obj4 = test_object.TypeTaggedInstance(3); // Verify that type tags are correctly accepted. assert.strictEqual(test_object.CheckTypeTag(0, obj1), true); assert.strictEqual(test_object.CheckTypeTag(1, obj2), true); + assert.strictEqual(test_object.CheckTypeTag(2, obj3), true); + assert.strictEqual(test_object.CheckTypeTag(3, obj4), true); // Verify that wrongly tagged objects are rejected. assert.strictEqual(test_object.CheckTypeTag(0, obj2), false); assert.strictEqual(test_object.CheckTypeTag(1, obj1), false); + assert.strictEqual(test_object.CheckTypeTag(0, obj3), false); + assert.strictEqual(test_object.CheckTypeTag(1, obj4), false); + assert.strictEqual(test_object.CheckTypeTag(2, obj4), false); + assert.strictEqual(test_object.CheckTypeTag(3, obj3), false); + assert.strictEqual(test_object.CheckTypeTag(4, obj3), false); // Verify that untagged objects are rejected. assert.strictEqual(test_object.CheckTypeTag(0, {}), false); @@ -240,13 +249,57 @@ assert.strictEqual(newObject.test_string, 'test string'); writable: true, configurable: true }); + Object.defineProperty(object, 'writable', { + value: 4, + enumerable: true, + writable: true, + configurable: false + }); + Object.defineProperty(object, 'configurable', { + value: 4, + enumerable: true, + writable: false, + configurable: true + }); object[5] = 5; assert.deepStrictEqual(test_object.GetPropertyNames(object), - ['5', 'normal', 'inherited']); + ['5', + 'normal', + 'writable', + 'configurable', + 'inherited']); assert.deepStrictEqual(test_object.GetSymbolNames(object), [fooSymbol]); + + assert.deepStrictEqual(test_object.GetEnumerableWritableNames(object), + ['5', + 'normal', + 'writable', + fooSymbol, + 'inherited']); + + assert.deepStrictEqual(test_object.GetOwnWritableNames(object), + ['5', + 'normal', + 'unenumerable', + 'writable', + fooSymbol]); + + assert.deepStrictEqual(test_object.GetEnumerableConfigurableNames(object), + ['5', + 'normal', + 'configurable', + fooSymbol, + 'inherited']); + + assert.deepStrictEqual(test_object.GetOwnConfigurableNames(object), + ['5', + 'normal', + 'unenumerable', + 'configurable', + fooSymbol]); } // Verify that passing NULL to napi_set_property() results in the correct diff --git a/test/js-native-api/test_object/test_object.c b/test/js-native-api/test_object/test_object.c index d897e8d0d04..3ae54a9b7cd 100644 --- a/test/js-native-api/test_object/test_object.c +++ b/test/js-native-api/test_object/test_object.c @@ -106,6 +106,119 @@ static napi_value GetSymbolNames(napi_env env, napi_callback_info info) { return output; } +static napi_value GetEnumerableWritableNames(napi_env env, + napi_callback_info info) { + size_t argc = 1; + napi_value args[1]; + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); + + NODE_API_ASSERT(env, argc >= 1, "Wrong number of arguments"); + + napi_valuetype value_type0; + NODE_API_CALL(env, napi_typeof(env, args[0], &value_type0)); + + NODE_API_ASSERT( + env, + value_type0 == napi_object, + "Wrong type of arguments. Expects an object as first argument."); + + napi_value output; + NODE_API_CALL( + env, + napi_get_all_property_names(env, + args[0], + napi_key_include_prototypes, + napi_key_enumerable | napi_key_writable, + napi_key_numbers_to_strings, + &output)); + + return output; +} + +static napi_value GetOwnWritableNames(napi_env env, napi_callback_info info) { + size_t argc = 1; + napi_value args[1]; + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); + + NODE_API_ASSERT(env, argc >= 1, "Wrong number of arguments"); + + napi_valuetype value_type0; + NODE_API_CALL(env, napi_typeof(env, args[0], &value_type0)); + + NODE_API_ASSERT( + env, + value_type0 == napi_object, + "Wrong type of arguments. Expects an object as first argument."); + + napi_value output; + NODE_API_CALL(env, + napi_get_all_property_names(env, + args[0], + napi_key_own_only, + napi_key_writable, + napi_key_numbers_to_strings, + &output)); + + return output; +} + +static napi_value GetEnumerableConfigurableNames(napi_env env, + napi_callback_info info) { + size_t argc = 1; + napi_value args[1]; + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); + + NODE_API_ASSERT(env, argc >= 1, "Wrong number of arguments"); + + napi_valuetype value_type0; + NODE_API_CALL(env, napi_typeof(env, args[0], &value_type0)); + + NODE_API_ASSERT( + env, + value_type0 == napi_object, + "Wrong type of arguments. Expects an object as first argument."); + + napi_value output; + NODE_API_CALL( + env, + napi_get_all_property_names(env, + args[0], + napi_key_include_prototypes, + napi_key_enumerable | napi_key_configurable, + napi_key_numbers_to_strings, + &output)); + + return output; +} + +static napi_value GetOwnConfigurableNames(napi_env env, + napi_callback_info info) { + size_t argc = 1; + napi_value args[1]; + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); + + NODE_API_ASSERT(env, argc >= 1, "Wrong number of arguments"); + + napi_valuetype value_type0; + NODE_API_CALL(env, napi_typeof(env, args[0], &value_type0)); + + NODE_API_ASSERT( + env, + value_type0 == napi_object, + "Wrong type of arguments. Expects an object as first argument."); + + napi_value output; + NODE_API_CALL(env, + napi_get_all_property_names(env, + args[0], + napi_key_own_only, + napi_key_configurable, + napi_key_numbers_to_strings, + &output)); + + return output; +} + static napi_value Set(napi_env env, napi_callback_info info) { size_t argc = 3; napi_value args[3]; @@ -492,9 +605,12 @@ static napi_value TestSeal(napi_env env, } // We create two type tags. They are basically 128-bit UUIDs. -static const napi_type_tag type_tags[2] = { +static const napi_type_tag type_tags[5] = { { 0xdaf987b3cc62481a, 0xb745b0497f299531 }, - { 0xbb7936c374084d9b, 0xa9548d0762eeedb9 } + { 0xbb7936c374084d9b, 0xa9548d0762eeedb9 }, + { 0xa5ed9ce2e4c00c38, 0 }, + { 0, 0 }, + { 0xa5ed9ce2e4c00c38, 0xdaf987b3cc62481a }, }; static napi_value @@ -536,6 +652,10 @@ napi_value Init(napi_env env, napi_value exports) { DECLARE_NODE_API_PROPERTY("GetNamed", GetNamed), DECLARE_NODE_API_PROPERTY("GetPropertyNames", GetPropertyNames), DECLARE_NODE_API_PROPERTY("GetSymbolNames", GetSymbolNames), + DECLARE_NODE_API_PROPERTY("GetEnumerableWritableNames", GetEnumerableWritableNames), + DECLARE_NODE_API_PROPERTY("GetOwnWritableNames", GetOwnWritableNames), + DECLARE_NODE_API_PROPERTY("GetEnumerableConfigurableNames", GetEnumerableConfigurableNames), + DECLARE_NODE_API_PROPERTY("GetOwnConfigurableNames", GetOwnConfigurableNames), DECLARE_NODE_API_PROPERTY("Set", Set), DECLARE_NODE_API_PROPERTY("SetNamed", SetNamed), DECLARE_NODE_API_PROPERTY("Has", Has), diff --git a/test/js-native-api/test_reference/test_finalizer.js b/test/js-native-api/test_reference/test_finalizer.js new file mode 100644 index 00000000000..b70582fd034 --- /dev/null +++ b/test/js-native-api/test_reference/test_finalizer.js @@ -0,0 +1,20 @@ +'use strict'; +// Flags: --expose-gc --force-node-api-uncaught-exceptions-policy + +const common = require('../../common'); +const test_reference = require(`./build/${common.buildType}/test_reference`); +const assert = require('assert'); + +process.on('uncaughtException', common.mustCall((err) => { + assert.throws(() => { throw err; }, /finalizer error/); +})); + +(async function() { + { + test_reference.createExternalWithJsFinalize( + common.mustCall(() => { + throw new Error('finalizer error'); + })); + } + global.gc(); +})().then(common.mustCall()); diff --git a/test/js-native-api/test_reference/test_reference.c b/test/js-native-api/test_reference/test_reference.c index 4a224efbd8c..e9f3ec7a919 100644 --- a/test/js-native-api/test_reference/test_reference.c +++ b/test/js-native-api/test_reference/test_reference.c @@ -21,6 +21,20 @@ static void FinalizeExternal(napi_env env, void* data, void* hint) { finalize_count++; } +static void FinalizeExternalCallJs(napi_env env, void* data, void* hint) { + int *actual_value = data; + NODE_API_ASSERT_RETURN_VOID(env, actual_value == &test_value, + "The correct pointer was passed to the finalizer"); + + napi_ref finalizer_ref = (napi_ref)hint; + napi_value js_finalizer; + napi_value recv; + NODE_API_CALL_RETURN_VOID(env, napi_get_reference_value(env, finalizer_ref, &js_finalizer)); + NODE_API_CALL_RETURN_VOID(env, napi_get_global(env, &recv)); + NODE_API_CALL_RETURN_VOID(env, napi_call_function(env, recv, js_finalizer, 0, NULL, NULL)); + NODE_API_CALL_RETURN_VOID(env, napi_delete_reference(env, finalizer_ref)); +} + static napi_value CreateExternal(napi_env env, napi_callback_info info) { int* data = &test_value; @@ -99,6 +113,31 @@ CreateExternalWithFinalize(napi_env env, napi_callback_info info) { return result; } +static napi_value +CreateExternalWithJsFinalize(napi_env env, napi_callback_info info) { + size_t argc = 1; + napi_value args[1]; + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); + NODE_API_ASSERT(env, argc == 1, "Wrong number of arguments"); + napi_value finalizer = args[0]; + napi_valuetype finalizer_valuetype; + NODE_API_CALL(env, napi_typeof(env, finalizer, &finalizer_valuetype)); + NODE_API_ASSERT(env, finalizer_valuetype == napi_function, "Wrong type of first argument"); + napi_ref finalizer_ref; + NODE_API_CALL(env, napi_create_reference(env, finalizer, 1, &finalizer_ref)); + + napi_value result; + NODE_API_CALL(env, + napi_create_external(env, + &test_value, + FinalizeExternalCallJs, + finalizer_ref, /* finalize_hint */ + &result)); + + finalize_count = 0; + return result; +} + static napi_value CheckExternal(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value arg; @@ -223,6 +262,8 @@ napi_value Init(napi_env env, napi_value exports) { DECLARE_NODE_API_PROPERTY("createExternal", CreateExternal), DECLARE_NODE_API_PROPERTY("createExternalWithFinalize", CreateExternalWithFinalize), + DECLARE_NODE_API_PROPERTY("createExternalWithJsFinalize", + CreateExternalWithJsFinalize), DECLARE_NODE_API_PROPERTY("checkExternal", CheckExternal), DECLARE_NODE_API_PROPERTY("createReference", CreateReference), DECLARE_NODE_API_PROPERTY("createSymbol", CreateSymbol), @@ -234,7 +275,7 @@ napi_value Init(napi_env env, napi_value exports) { DECLARE_NODE_API_PROPERTY("decrementRefcount", DecrementRefcount), DECLARE_NODE_API_GETTER("referenceValue", GetReferenceValue), DECLARE_NODE_API_PROPERTY("validateDeleteBeforeFinalize", - ValidateDeleteBeforeFinalize), + ValidateDeleteBeforeFinalize), }; NODE_API_CALL(env, napi_define_properties( diff --git a/test/js-native-api/test_reference_double_free/test_reference_double_free.c b/test/js-native-api/test_reference_double_free/test_reference_double_free.c index 48491ea2aae..8c738aa2f0f 100644 --- a/test/js-native-api/test_reference_double_free/test_reference_double_free.c +++ b/test/js-native-api/test_reference_double_free/test_reference_double_free.c @@ -42,6 +42,25 @@ static napi_value New(napi_env env, napi_callback_info info) { return js_this; } +static void NoopDeleter(napi_env env, void* data, void* hint) {} + +static void DeleteImmediately(napi_env env, napi_callback_info info) { + size_t argc = 1; + napi_value js_obj; + napi_ref ref; + + NODE_API_CALL_RETURN_VOID(env, + napi_get_cb_info(env, info, &argc, &js_obj, NULL, NULL)); + + napi_valuetype type; + NODE_API_CALL_RETURN_VOID(env, napi_typeof(env, js_obj, &type)); + + NODE_API_CALL_RETURN_VOID(env, + napi_wrap(env, js_obj, NULL, NoopDeleter, NULL, &ref)); + NODE_API_CALL_RETURN_VOID(env, napi_delete_reference(env, ref)); + NODE_API_CALL_RETURN_VOID(env, napi_remove_wrap(env, js_obj, NULL)); +} + EXTERN_C_START napi_value Init(napi_env env, napi_value exports) { napi_value myobj_ctor; @@ -50,6 +69,13 @@ napi_value Init(napi_env env, napi_value exports) { env, "MyObject", NAPI_AUTO_LENGTH, New, NULL, 0, NULL, &myobj_ctor)); NODE_API_CALL(env, napi_set_named_property(env, exports, "MyObject", myobj_ctor)); + + napi_property_descriptor descriptors[] = { + DECLARE_NODE_API_PROPERTY("deleteImmediately", DeleteImmediately), + }; + NODE_API_CALL(env, napi_define_properties( + env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors)); + return exports; } EXTERN_C_END diff --git a/test/js-native-api/test_reference_double_free/test_wrap.js b/test/js-native-api/test_reference_double_free/test_wrap.js new file mode 100644 index 00000000000..4f009211103 --- /dev/null +++ b/test/js-native-api/test_reference_double_free/test_wrap.js @@ -0,0 +1,10 @@ +'use strict'; + +// This test makes no assertions. It tests that calling napi_remove_wrap and +// napi_delete_reference consecutively doesn't crash the process. + +const { buildType } = require('../../common'); + +const addon = require(`./build/${buildType}/test_reference_double_free`); + +addon.deleteImmediately({}); diff --git a/test/message/error_aggregateTwoErrors.out b/test/message/error_aggregateTwoErrors.out index d1dc13eacc3..02e8738d47f 100644 --- a/test/message/error_aggregateTwoErrors.out +++ b/test/message/error_aggregateTwoErrors.out @@ -9,5 +9,27 @@ AggregateError: original at Function.Module._load (node:internal/modules/cjs/loader:*:*) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:*:*) at node:internal/main/run_main_module:*:* { - code: 'ERR0' + code: 'ERR0', + [errors]: [ + Error: original + at Object. (*test*message*error_aggregateTwoErrors.js:*:*) + at Module._compile (node:internal/modules/cjs/loader:*:*) + at Object.Module._extensions..js (node:internal/modules/cjs/loader:*:*) + at Module.load (node:internal/modules/cjs/loader:*:*) + at Function.Module._load (node:internal/modules/cjs/loader:*:*) + at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:*:*) + at node:internal/main/run_main_module:*:* { + code: 'ERR0' + }, + Error: second error + at Object. (*test*message*error_aggregateTwoErrors.js:*:*) + at Module._compile (node:internal/modules/cjs/loader:*:*) + at Object.Module._extensions..js (node:internal/modules/cjs/loader:*:*) + at Module.load (node:internal/modules/cjs/loader:*:*) + at Function.Module._load (node:internal/modules/cjs/loader:*:*) + at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:*:*) + at node:internal/main/run_main_module:*:* { + code: 'ERR1' + } + ] } diff --git a/test/message/source_map_eval.js b/test/message/source_map_eval.js new file mode 100644 index 00000000000..534d16bd34c --- /dev/null +++ b/test/message/source_map_eval.js @@ -0,0 +1,8 @@ +// Flags: --enable-source-maps + +'use strict'; +require('../common'); +const fs = require('fs'); + +const content = fs.readFileSync(require.resolve('../fixtures/source-map/tabs.js'), 'utf8'); +eval(content); diff --git a/test/message/source_map_eval.out b/test/message/source_map_eval.out new file mode 100644 index 00000000000..7cfd7c84fe6 --- /dev/null +++ b/test/message/source_map_eval.out @@ -0,0 +1,10 @@ +ReferenceError: alert is not defined + at Object.eval (*tabs.coffee:26:2) + at eval (*tabs.coffee:1:14) + at Object. (*source_map_eval.js:8:1) + at Module._compile (node:internal/modules/cjs/loader:*) + at Object.Module._extensions..js (node:internal/modules/cjs/loader:*) + at Module.load (node:internal/modules/cjs/loader:*) + at Function.Module._load (node:internal/modules/cjs/loader:*) + at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:*) + at node:internal/main/run_main_module:* diff --git a/test/message/test_runner_abort.js b/test/message/test_runner_abort.js new file mode 100644 index 00000000000..bb1e473f89c --- /dev/null +++ b/test/message/test_runner_abort.js @@ -0,0 +1,47 @@ +// Flags: --no-warnings +'use strict'; +require('../common'); +const test = require('node:test'); + +test('promise timeout signal', { signal: AbortSignal.timeout(1) }, async (t) => { + await Promise.all([ + t.test('ok 1', async () => {}), + t.test('ok 2', () => {}), + t.test('ok 3', { signal: t.signal }, async () => {}), + t.test('ok 4', { signal: t.signal }, () => {}), + t.test('not ok 1', () => new Promise(() => {})), + t.test('not ok 2', (t, done) => {}), + t.test('not ok 3', { signal: t.signal }, () => new Promise(() => {})), + t.test('not ok 4', { signal: t.signal }, (t, done) => {}), + t.test('not ok 5', { signal: t.signal }, (t, done) => { + t.signal.addEventListener('abort', done); + }), + ]); +}); + +test('promise abort signal', { signal: AbortSignal.abort() }, async (t) => { + await t.test('should not appear', () => {}); +}); + +test('callback timeout signal', { signal: AbortSignal.timeout(1) }, (t, done) => { + t.test('ok 1', async () => {}); + t.test('ok 2', () => {}); + t.test('ok 3', { signal: t.signal }, async () => {}); + t.test('ok 4', { signal: t.signal }, () => {}); + t.test('not ok 1', () => new Promise(() => {})); + t.test('not ok 2', (t, done) => {}); + t.test('not ok 3', { signal: t.signal }, () => new Promise(() => {})); + t.test('not ok 4', { signal: t.signal }, (t, done) => {}); + t.test('not ok 5', { signal: t.signal }, (t, done) => { + t.signal.addEventListener('abort', done); + }); +}); + +test('callback abort signal', { signal: AbortSignal.abort() }, (t, done) => { + t.test('should not appear', done); +}); + +// AbortSignal.timeout(1) doesn't prevent process from closing +// thus we have to keep the process open to prevent cancelation +// of the entire test tree +setTimeout(() => {}, 1000); diff --git a/test/message/test_runner_abort.out b/test/message/test_runner_abort.out new file mode 100644 index 00000000000..26f89a29dbb --- /dev/null +++ b/test/message/test_runner_abort.out @@ -0,0 +1,249 @@ +TAP version 13 +# Subtest: promise timeout signal + # Subtest: ok 1 + ok 1 - ok 1 + --- + duration_ms: * + ... + # Subtest: ok 2 + ok 2 - ok 2 + --- + duration_ms: * + ... + # Subtest: ok 3 + ok 3 - ok 3 + --- + duration_ms: * + ... + # Subtest: ok 4 + ok 4 - ok 4 + --- + duration_ms: * + ... + # Subtest: not ok 1 + not ok 5 - not ok 1 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: not ok 2 + not ok 6 - not ok 2 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: not ok 3 + not ok 7 - not ok 3 + --- + duration_ms: * + error: 'This operation was aborted' + code: 20 + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # Subtest: not ok 4 + not ok 8 - not ok 4 + --- + duration_ms: * + error: 'This operation was aborted' + code: 20 + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # Subtest: not ok 5 + not ok 9 - not ok 5 + --- + duration_ms: * + error: 'This operation was aborted' + code: 20 + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + 1..9 +not ok 1 - promise timeout signal + --- + duration_ms: * + error: 'The operation was aborted due to timeout' + code: 23 + stack: |- + * + * + * + * + ... +# Subtest: promise abort signal +not ok 2 - promise abort signal + --- + duration_ms: * + error: 'This operation was aborted' + code: 20 + stack: |- + * + * + * + * + * + * + * + * + * + ... +# Subtest: callback timeout signal + # Subtest: ok 1 + ok 1 - ok 1 + --- + duration_ms: * + ... + # Subtest: ok 2 + ok 2 - ok 2 + --- + duration_ms: * + ... + # Subtest: ok 3 + ok 3 - ok 3 + --- + duration_ms: * + ... + # Subtest: ok 4 + ok 4 - ok 4 + --- + duration_ms: * + ... + # Subtest: not ok 1 + not ok 5 - not ok 1 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: not ok 2 + not ok 6 - not ok 2 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: not ok 3 + not ok 7 - not ok 3 + --- + duration_ms: * + error: 'This operation was aborted' + code: 20 + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # Subtest: not ok 4 + not ok 8 - not ok 4 + --- + duration_ms: * + error: 'This operation was aborted' + code: 20 + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # Subtest: not ok 5 + not ok 9 - not ok 5 + --- + duration_ms: * + error: 'This operation was aborted' + code: 20 + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + 1..9 +not ok 3 - callback timeout signal + --- + duration_ms: * + error: 'The operation was aborted due to timeout' + code: 23 + stack: |- + * + * + * + * + ... +# Subtest: callback abort signal +not ok 4 - callback abort signal + --- + duration_ms: * + error: 'This operation was aborted' + code: 20 + stack: |- + * + * + * + * + * + * + * + * + * + ... +1..4 +# tests 4 +# pass 0 +# fail 0 +# cancelled 4 +# skipped 0 +# todo 0 +# duration_ms * diff --git a/test/message/test_runner_abort_suite.js b/test/message/test_runner_abort_suite.js new file mode 100644 index 00000000000..61415c5cca9 --- /dev/null +++ b/test/message/test_runner_abort_suite.js @@ -0,0 +1,27 @@ +// Flags: --no-warnings +'use strict'; +require('../common'); +const { describe, it } = require('node:test'); + +describe('describe timeout signal', { signal: AbortSignal.timeout(1) }, (t) => { + it('ok 1', async () => {}); + it('ok 2', () => {}); + it('ok 3', { signal: t.signal }, async () => {}); + it('ok 4', { signal: t.signal }, () => {}); + it('not ok 1', () => new Promise(() => {})); + it('not ok 2', (done) => {}); + it('not ok 3', { signal: t.signal }, () => new Promise(() => {})); + it('not ok 4', { signal: t.signal }, (done) => {}); + it('not ok 5', { signal: t.signal }, function(done) { + this.signal.addEventListener('abort', done); + }); +}); + +describe('describe abort signal', { signal: AbortSignal.abort() }, () => { + it('should not appear', () => {}); +}); + +// AbortSignal.timeout(1) doesn't prevent process from closing +// thus we have to keep the process open to prevent cancelation +// of the entire test tree +setTimeout(() => {}, 1000); diff --git a/test/message/test_runner_abort_suite.out b/test/message/test_runner_abort_suite.out new file mode 100644 index 00000000000..38669978406 --- /dev/null +++ b/test/message/test_runner_abort_suite.out @@ -0,0 +1,99 @@ +TAP version 13 +# Subtest: describe timeout signal + # Subtest: ok 1 + ok 1 - ok 1 + --- + duration_ms: * + ... + # Subtest: ok 2 + ok 2 - ok 2 + --- + duration_ms: * + ... + # Subtest: ok 3 + ok 3 - ok 3 + --- + duration_ms: * + ... + # Subtest: ok 4 + ok 4 - ok 4 + --- + duration_ms: * + ... + # Subtest: not ok 1 + not ok 5 - not ok 1 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: not ok 2 + not ok 6 - not ok 2 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: not ok 3 + not ok 7 - not ok 3 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: not ok 4 + not ok 8 - not ok 4 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: not ok 5 + not ok 9 - not ok 5 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + 1..9 +not ok 1 - describe timeout signal + --- + duration_ms: * + error: 'The operation was aborted due to timeout' + code: 23 + stack: |- + * + * + * + * + ... +# Subtest: describe abort signal +not ok 2 - describe abort signal + --- + duration_ms: * + error: 'This operation was aborted' + code: 20 + stack: |- + * + * + * + * + * + * + * + * + * + ... +1..2 +# tests 2 +# pass 0 +# fail 0 +# cancelled 2 +# skipped 0 +# todo 0 +# duration_ms * diff --git a/test/message/test_runner_describe_it.js b/test/message/test_runner_describe_it.js new file mode 100644 index 00000000000..e163fed3420 --- /dev/null +++ b/test/message/test_runner_describe_it.js @@ -0,0 +1,374 @@ +// Flags: --no-warnings +'use strict'; +require('../common'); +const assert = require('node:assert'); +const { describe, it } = require('node:test'); +const util = require('util'); + + +it.todo('sync pass todo', () => { + +}); + +it('sync pass todo with message', { todo: 'this is a passing todo' }, () => { +}); + +it.todo('sync fail todo', () => { + throw new Error('thrown from sync fail todo'); +}); + +it('sync fail todo with message', { todo: 'this is a failing todo' }, () => { + throw new Error('thrown from sync fail todo with message'); +}); + +it.skip('sync skip pass', () => { +}); + +it('sync skip pass with message', { skip: 'this is skipped' }, () => { +}); + +it('sync pass', () => { +}); + +it('sync throw fail', () => { + throw new Error('thrown from sync throw fail'); +}); + +it.skip('async skip pass', async () => { +}); + +it('async pass', async () => { + +}); + +it('async throw fail', async () => { + throw new Error('thrown from async throw fail'); +}); + +it('async skip fail', async (t) => { + t.skip(); + throw new Error('thrown from async throw fail'); +}); + +it('async assertion fail', async () => { + // Make sure the assert module is handled. + assert.strictEqual(true, false); +}); + +it('resolve pass', () => { + return Promise.resolve(); +}); + +it('reject fail', () => { + return Promise.reject(new Error('rejected from reject fail')); +}); + +it('unhandled rejection - passes but warns', () => { + Promise.reject(new Error('rejected from unhandled rejection fail')); +}); + +it('async unhandled rejection - passes but warns', async () => { + Promise.reject(new Error('rejected from async unhandled rejection fail')); +}); + +it('immediate throw - passes but warns', () => { + setImmediate(() => { + throw new Error('thrown from immediate throw fail'); + }); +}); + +it('immediate reject - passes but warns', () => { + setImmediate(() => { + Promise.reject(new Error('rejected from immediate reject fail')); + }); +}); + +it('immediate resolve pass', () => { + return new Promise((resolve) => { + setImmediate(() => { + resolve(); + }); + }); +}); + +describe('subtest sync throw fail', () => { + it('+sync throw fail', () => { + throw new Error('thrown from subtest sync throw fail'); + }); +}); + +it('sync throw non-error fail', async () => { + throw Symbol('thrown symbol from sync throw non-error fail'); +}); + +describe('level 0a', { concurrency: 4 }, () => { + it('level 1a', async () => { + const p1a = new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, 1000); + }); + + return p1a; + }); + + it('level 1b', async () => { + const p1b = new Promise((resolve) => { + resolve(); + }); + + return p1b; + }); + + it('level 1c', async () => { + const p1c = new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, 2000); + }); + + return p1c; + }); + + it('level 1d', async () => { + const p1c = new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, 1500); + }); + + return p1c; + }); + + const p0a = new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, 3000); + }); + + return p0a; +}); + + +describe('invalid subtest - pass but subtest fails', () => { + setImmediate(() => { + it('invalid subtest fail', () => { + throw new Error('this should not be thrown'); + }); + }); +}); + +it.skip('sync skip option', () => { + throw new Error('this should not be executed'); +}); + +it('sync skip option with message', { skip: 'this is skipped' }, () => { + throw new Error('this should not be executed'); +}); + +it('sync skip option is false fail', { skip: false }, () => { + throw new Error('this should be executed'); +}); + +// A test with no arguments provided. +it(); + +// A test with only a named function provided. +it(function functionOnly() {}); + +// A test with only an anonymous function provided. +it(() => {}); + +// A test with only a name provided. +it('test with only a name provided'); + +// A test with an empty string name. +it(''); + +// A test with only options provided. +it({ skip: true }); + +// A test with only a name and options provided. +it('test with a name and options provided', { skip: true }); + +// A test with only options and a function provided. +it({ skip: true }, function functionAndOptions() {}); + +// A test whose description needs to be escaped. +it('escaped description \\ # \\#\\'); + +// A test whose skip message needs to be escaped. +it('escaped skip message', { skip: '#skip' }); + +// A test whose todo message needs to be escaped. +it('escaped todo message', { todo: '#todo' }); + +it('callback pass', (done) => { + setImmediate(done); +}); + +it('callback fail', (done) => { + setImmediate(() => { + done(new Error('callback failure')); + }); +}); + +it('sync t is this in test', function() { + assert.deepStrictEqual(this, { signal: this.signal, name: this.name }); +}); + +it('async t is this in test', async function() { + assert.deepStrictEqual(this, { signal: this.signal, name: this.name }); +}); + +it('callback t is this in test', function(done) { + assert.deepStrictEqual(this, { signal: this.signal, name: this.name }); + done(); +}); + +it('callback also returns a Promise', async (done) => { + throw new Error('thrown from callback also returns a Promise'); +}); + +it('callback throw', (done) => { + throw new Error('thrown from callback throw'); +}); + +it('callback called twice', (done) => { + done(); + done(); +}); + +it('callback called twice in different ticks', (done) => { + setImmediate(done); + done(); +}); + +it('callback called twice in future tick', (done) => { + setImmediate(() => { + done(); + done(); + }); +}); + +it('callback async throw', (done) => { + setImmediate(() => { + throw new Error('thrown from callback async throw'); + }); +}); + +it('callback async throw after done', (done) => { + setImmediate(() => { + throw new Error('thrown from callback async throw after done'); + }); + + done(); +}); + +it('custom inspect symbol fail', () => { + const obj = { + [util.inspect.custom]() { + return 'customized'; + }, + foo: 1 + }; + + throw obj; +}); + +it('custom inspect symbol that throws fail', () => { + const obj = { + [util.inspect.custom]() { + throw new Error('bad-inspect'); + }, + foo: 1 + }; + + throw obj; +}); + +describe('subtest sync throw fails', () => { + it('sync throw fails at first', () => { + throw new Error('thrown from subtest sync throw fails at first'); + }); + it('sync throw fails at second', () => { + throw new Error('thrown from subtest sync throw fails at second'); + }); +}); + +describe('describe sync throw fails', () => { + it('should not run', () => {}); + throw new Error('thrown from describe'); +}); + +describe('describe async throw fails', async () => { + it('should not run', () => {}); + throw new Error('thrown from describe'); +}); + +describe('timeouts', () => { + it('timed out async test', { timeout: 5 }, async () => { + return new Promise((resolve) => { + setTimeout(resolve, 1000); + }); + }); + + it('timed out callback test', { timeout: 5 }, (done) => { + setTimeout(done, 1000); + }); + + + it('large timeout async test is ok', { timeout: 30_000_000 }, async () => { + return new Promise((resolve) => { + setTimeout(resolve, 10); + }); + }); + + it('large timeout callback test is ok', { timeout: 30_000_000 }, (done) => { + setTimeout(done, 10); + }); +}); + +describe('successful thenable', () => { + it('successful thenable', () => { + let thenCalled = false; + return { + get then() { + if (thenCalled) throw new Error(); + thenCalled = true; + return (successHandler) => successHandler(); + }, + }; + }); + + it('rejected thenable', () => { + let thenCalled = false; + return { + get then() { + if (thenCalled) throw new Error(); + thenCalled = true; + return (_, errorHandler) => errorHandler(new Error('custom error')); + }, + }; + }); + + let thenCalled = false; + return { + get then() { + if (thenCalled) throw new Error(); + thenCalled = true; + return (successHandler) => successHandler(); + }, + }; +}); + +describe('rejected thenable', () => { + let thenCalled = false; + return { + get then() { + if (thenCalled) throw new Error(); + thenCalled = true; + return (_, errorHandler) => errorHandler(new Error('custom error')); + }, + }; +}); diff --git a/test/message/test_runner_describe_it.out b/test/message/test_runner_describe_it.out new file mode 100644 index 00000000000..a1fa5fc1faa --- /dev/null +++ b/test/message/test_runner_describe_it.out @@ -0,0 +1,647 @@ +TAP version 13 +# Subtest: sync pass todo +ok 1 - sync pass todo # TODO + --- + duration_ms: * + ... +# Subtest: sync pass todo with message +ok 2 - sync pass todo with message # TODO this is a passing todo + --- + duration_ms: * + ... +# Subtest: sync fail todo +not ok 3 - sync fail todo # TODO + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from sync fail todo' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: sync fail todo with message +not ok 4 - sync fail todo with message # TODO this is a failing todo + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from sync fail todo with message' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... +# Subtest: sync skip pass +ok 5 - sync skip pass # SKIP + --- + duration_ms: * + ... +# Subtest: sync skip pass with message +ok 6 - sync skip pass with message # SKIP this is skipped + --- + duration_ms: * + ... +# Subtest: sync pass +ok 7 - sync pass + --- + duration_ms: * + ... +# Subtest: sync throw fail +not ok 8 - sync throw fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from sync throw fail' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: async skip pass +ok 9 - async skip pass # SKIP + --- + duration_ms: * + ... +# Subtest: async pass +ok 10 - async pass + --- + duration_ms: * + ... +# Subtest: async throw fail +not ok 11 - async throw fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from async throw fail' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: async skip fail +not ok 12 - async skip fail + --- + duration_ms: * + failureType: 'callbackAndPromisePresent' + error: 'passed a callback but also returned a Promise' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: async assertion fail +not ok 13 - async assertion fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: |- + Expected values to be strictly equal: + + true !== false + + code: 'ERR_ASSERTION' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: resolve pass +ok 14 - resolve pass + --- + duration_ms: * + ... +# Subtest: reject fail +not ok 15 - reject fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'rejected from reject fail' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: unhandled rejection - passes but warns +ok 16 - unhandled rejection - passes but warns + --- + duration_ms: * + ... +# Subtest: async unhandled rejection - passes but warns +ok 17 - async unhandled rejection - passes but warns + --- + duration_ms: * + ... +# Subtest: immediate throw - passes but warns +ok 18 - immediate throw - passes but warns + --- + duration_ms: * + ... +# Subtest: immediate reject - passes but warns +ok 19 - immediate reject - passes but warns + --- + duration_ms: * + ... +# Subtest: immediate resolve pass +ok 20 - immediate resolve pass + --- + duration_ms: * + ... +# Subtest: subtest sync throw fail + # Subtest: +sync throw fail + not ok 1 - +sync throw fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from subtest sync throw fail' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + 1..1 +not ok 21 - subtest sync throw fail + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '1 subtest failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: sync throw non-error fail +not ok 22 - sync throw non-error fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'Symbol(thrown symbol from sync throw non-error fail)' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: level 0a + # Subtest: level 1a + ok 1 - level 1a + --- + duration_ms: * + ... + # Subtest: level 1b + ok 2 - level 1b + --- + duration_ms: * + ... + # Subtest: level 1c + ok 3 - level 1c + --- + duration_ms: * + ... + # Subtest: level 1d + ok 4 - level 1d + --- + duration_ms: * + ... + 1..4 +ok 23 - level 0a + --- + duration_ms: * + ... +# Subtest: invalid subtest - pass but subtest fails +ok 24 - invalid subtest - pass but subtest fails + --- + duration_ms: * + ... +# Subtest: sync skip option +ok 25 - sync skip option # SKIP + --- + duration_ms: * + ... +# Subtest: sync skip option with message +ok 26 - sync skip option with message # SKIP this is skipped + --- + duration_ms: * + ... +# Subtest: sync skip option is false fail +not ok 27 - sync skip option is false fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'this should be executed' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + ... +# Subtest: +ok 28 - + --- + duration_ms: * + ... +# Subtest: functionOnly +ok 29 - functionOnly + --- + duration_ms: * + ... +# Subtest: +ok 30 - + --- + duration_ms: * + ... +# Subtest: test with only a name provided +ok 31 - test with only a name provided + --- + duration_ms: * + ... +# Subtest: +ok 32 - + --- + duration_ms: * + ... +# Subtest: +ok 33 - # SKIP + --- + duration_ms: * + ... +# Subtest: test with a name and options provided +ok 34 - test with a name and options provided # SKIP + --- + duration_ms: * + ... +# Subtest: functionAndOptions +ok 35 - functionAndOptions # SKIP + --- + duration_ms: * + ... +# Subtest: escaped description \\ \# \\\#\\ +ok 36 - escaped description \\ \# \\\#\\ + --- + duration_ms: * + ... +# Subtest: escaped skip message +ok 37 - escaped skip message # SKIP \#skip + --- + duration_ms: * + ... +# Subtest: escaped todo message +ok 38 - escaped todo message # TODO \#todo + --- + duration_ms: * + ... +# Subtest: callback pass +ok 39 - callback pass + --- + duration_ms: * + ... +# Subtest: callback fail +not ok 40 - callback fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'callback failure' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + ... +# Subtest: sync t is this in test +ok 41 - sync t is this in test + --- + duration_ms: * + ... +# Subtest: async t is this in test +ok 42 - async t is this in test + --- + duration_ms: * + ... +# Subtest: callback t is this in test +ok 43 - callback t is this in test + --- + duration_ms: * + ... +# Subtest: callback also returns a Promise +not ok 44 - callback also returns a Promise + --- + duration_ms: * + failureType: 'callbackAndPromisePresent' + error: 'passed a callback but also returned a Promise' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: callback throw +not ok 45 - callback throw + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from callback throw' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + ... +# Subtest: callback called twice +not ok 46 - callback called twice + --- + duration_ms: * + failureType: 'multipleCallbackInvocations' + error: 'callback invoked multiple times' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + ... +# Subtest: callback called twice in different ticks +ok 47 - callback called twice in different ticks + --- + duration_ms: * + ... +# Subtest: callback called twice in future tick +not ok 48 - callback called twice in future tick + --- + duration_ms: * + failureType: 'uncaughtException' + error: 'callback invoked multiple times' + code: 'ERR_TEST_FAILURE' + stack: |- + * + ... +# Subtest: callback async throw +not ok 49 - callback async throw + --- + duration_ms: * + failureType: 'uncaughtException' + error: 'thrown from callback async throw' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + ... +# Subtest: callback async throw after done +ok 50 - callback async throw after done + --- + duration_ms: * + ... +# Subtest: custom inspect symbol fail +not ok 51 - custom inspect symbol fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'customized' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: custom inspect symbol that throws fail +not ok 52 - custom inspect symbol that throws fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: |- + { + foo: 1, + [Symbol(nodejs.util.inspect.custom)]: [Function: [nodejs.util.inspect.custom]] + } + code: 'ERR_TEST_FAILURE' + ... +# Subtest: subtest sync throw fails + # Subtest: sync throw fails at first + not ok 1 - sync throw fails at first + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from subtest sync throw fails at first' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # Subtest: sync throw fails at second + not ok 2 - sync throw fails at second + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from subtest sync throw fails at second' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + 1..2 +not ok 53 - subtest sync throw fails + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '2 subtests failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: describe sync throw fails + # Subtest: should not run + not ok 1 - should not run + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + 1..1 +not ok 54 - describe sync throw fails + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from describe' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... +# Subtest: describe async throw fails + # Subtest: should not run + not ok 1 - should not run + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + 1..1 +not ok 55 - describe async throw fails + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from describe' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... +# Subtest: timeouts + # Subtest: timed out async test + not ok 1 - timed out async test + --- + duration_ms: * + failureType: 'testTimeoutFailure' + error: 'test timed out after 5ms' + code: 'ERR_TEST_FAILURE' + stack: |- + async Promise.all (index 0) + ... + # Subtest: timed out callback test + not ok 2 - timed out callback test + --- + duration_ms: * + failureType: 'testTimeoutFailure' + error: 'test timed out after 5ms' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: large timeout async test is ok + ok 3 - large timeout async test is ok + --- + duration_ms: * + ... + # Subtest: large timeout callback test is ok + ok 4 - large timeout callback test is ok + --- + duration_ms: * + ... + 1..4 +not ok 56 - timeouts + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '2 subtests failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: successful thenable + # Subtest: successful thenable + ok 1 - successful thenable + --- + duration_ms: * + ... + # Subtest: rejected thenable + not ok 2 - rejected thenable + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'custom error' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + ... + 1..2 +not ok 57 - successful thenable + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '1 subtest failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: rejected thenable +not ok 58 - rejected thenable + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'custom error' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + ... +# Subtest: invalid subtest fail +not ok 59 - invalid subtest fail + --- + duration_ms: * + failureType: 'parentAlreadyFinished' + error: 'test could not be started because its parent finished' + code: 'ERR_TEST_FAILURE' + stack: |- + * + ... +1..59 +# Warning: Test "unhandled rejection - passes but warns" generated asynchronous activity after the test ended. This activity created the error "Error: rejected from unhandled rejection fail" and would have caused the test to fail, but instead triggered an unhandledRejection event. +# Warning: Test "async unhandled rejection - passes but warns" generated asynchronous activity after the test ended. This activity created the error "Error: rejected from async unhandled rejection fail" and would have caused the test to fail, but instead triggered an unhandledRejection event. +# Warning: Test "immediate throw - passes but warns" generated asynchronous activity after the test ended. This activity created the error "Error: thrown from immediate throw fail" and would have caused the test to fail, but instead triggered an uncaughtException event. +# Warning: Test "immediate reject - passes but warns" generated asynchronous activity after the test ended. This activity created the error "Error: rejected from immediate reject fail" and would have caused the test to fail, but instead triggered an unhandledRejection event. +# Warning: Test "callback called twice in different ticks" generated asynchronous activity after the test ended. This activity created the error "Error [ERR_TEST_FAILURE]: callback invoked multiple times" and would have caused the test to fail, but instead triggered an uncaughtException event. +# Warning: Test "callback async throw after done" generated asynchronous activity after the test ended. This activity created the error "Error: thrown from callback async throw after done" and would have caused the test to fail, but instead triggered an uncaughtException event. +# tests 59 +# pass 22 +# fail 23 +# cancelled 0 +# skipped 9 +# todo 5 +# duration_ms * diff --git a/test/message/test_runner_hooks.js b/test/message/test_runner_hooks.js new file mode 100644 index 00000000000..2c3526ae510 --- /dev/null +++ b/test/message/test_runner_hooks.js @@ -0,0 +1,111 @@ +// Flags: --no-warnings +'use strict'; +require('../common'); +const assert = require('assert'); +const { test, describe, it, before, after, beforeEach, afterEach } = require('node:test'); + +describe('describe hooks', () => { + const testArr = []; + before(function() { + testArr.push('before ' + this.name); + }); + after(function() { + testArr.push('after ' + this.name); + assert.deepStrictEqual(testArr, [ + 'before describe hooks', + 'beforeEach 1', '1', 'afterEach 1', + 'beforeEach 2', '2', 'afterEach 2', + 'before nested', + 'beforeEach nested 1', 'nested 1', 'afterEach nested 1', + 'beforeEach nested 2', 'nested 2', 'afterEach nested 2', + 'after nested', + 'after describe hooks', + ]); + }); + beforeEach(function() { + testArr.push('beforeEach ' + this.name); + }); + afterEach(function() { + testArr.push('afterEach ' + this.name); + }); + + it('1', () => testArr.push('1')); + it('2', () => testArr.push('2')); + + describe('nested', () => { + before(function() { + testArr.push('before ' + this.name); + }); + after(function() { + testArr.push('after ' + this.name); + }); + beforeEach(function() { + testArr.push('beforeEach ' + this.name); + }); + afterEach(function() { + testArr.push('afterEach ' + this.name); + }); + it('nested 1', () => testArr.push('nested 1')); + it('nested 2', () => testArr.push('nested 2')); + }); +}); + +describe('before throws', () => { + before(() => { throw new Error('before'); }); + it('1', () => {}); + it('2', () => {}); +}); + +describe('after throws', () => { + after(() => { throw new Error('after'); }); + it('1', () => {}); + it('2', () => {}); +}); + +describe('beforeEach throws', () => { + beforeEach(() => { throw new Error('beforeEach'); }); + it('1', () => {}); + it('2', () => {}); +}); + +describe('afterEach throws', () => { + afterEach(() => { throw new Error('afterEach'); }); + it('1', () => {}); + it('2', () => {}); +}); + +test('test hooks', async (t) => { + const testArr = []; + t.beforeEach((t) => testArr.push('beforeEach ' + t.name)); + t.afterEach((t) => testArr.push('afterEach ' + t.name)); + await t.test('1', () => testArr.push('1')); + await t.test('2', () => testArr.push('2')); + + await t.test('nested', async (t) => { + t.beforeEach((t) => testArr.push('nested beforeEach ' + t.name)); + t.afterEach((t) => testArr.push('nested afterEach ' + t.name)); + await t.test('nested 1', () => testArr.push('nested1')); + await t.test('nested 2', () => testArr.push('nested 2')); + }); + + assert.deepStrictEqual(testArr, [ + 'beforeEach 1', '1', 'afterEach 1', + 'beforeEach 2', '2', 'afterEach 2', + 'beforeEach nested', + 'nested beforeEach nested 1', 'nested1', 'nested afterEach nested 1', + 'nested beforeEach nested 2', 'nested 2', 'nested afterEach nested 2', + 'afterEach nested', + ]); +}); + +test('t.beforeEach throws', async (t) => { + t.beforeEach(() => { throw new Error('beforeEach'); }); + await t.test('1', () => {}); + await t.test('2', () => {}); +}); + +test('t.afterEach throws', async (t) => { + t.afterEach(() => { throw new Error('afterEach'); }); + await t.test('1', () => {}); + await t.test('2', () => {}); +}); diff --git a/test/message/test_runner_hooks.out b/test/message/test_runner_hooks.out new file mode 100644 index 00000000000..57008a44bbb --- /dev/null +++ b/test/message/test_runner_hooks.out @@ -0,0 +1,325 @@ +TAP version 13 +# Subtest: describe hooks + # Subtest: 1 + ok 1 - 1 + --- + duration_ms: * + ... + # Subtest: 2 + ok 2 - 2 + --- + duration_ms: * + ... + # Subtest: nested + # Subtest: nested 1 + ok 1 - nested 1 + --- + duration_ms: * + ... + # Subtest: nested 2 + ok 2 - nested 2 + --- + duration_ms: * + ... + 1..2 + ok 3 - nested + --- + duration_ms: * + ... + 1..3 +ok 1 - describe hooks + --- + duration_ms: * + ... +# Subtest: before throws + # Subtest: 1 + not ok 1 - 1 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: 2 + not ok 2 - 2 + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + 1..2 +not ok 2 - before throws + --- + duration_ms: * + failureType: 'hookFailed' + error: 'failed running before hook' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + ... +# Subtest: after throws + # Subtest: 1 + ok 1 - 1 + --- + duration_ms: * + ... + # Subtest: 2 + ok 2 - 2 + --- + duration_ms: * + ... + 1..2 +not ok 3 - after throws + --- + duration_ms: * + failureType: 'hookFailed' + error: 'failed running after hook' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + ... +# Subtest: beforeEach throws + # Subtest: 1 + not ok 1 - 1 + --- + duration_ms: * + failureType: 'hookFailed' + error: 'failed running beforeEach hook' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # Subtest: 2 + not ok 2 - 2 + --- + duration_ms: * + failureType: 'hookFailed' + error: 'failed running beforeEach hook' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + 1..2 +not ok 4 - beforeEach throws + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '2 subtests failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: afterEach throws + # Subtest: 1 + not ok 1 - 1 + --- + duration_ms: * + failureType: 'hookFailed' + error: 'failed running afterEach hook' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # Subtest: 2 + not ok 2 - 2 + --- + duration_ms: * + failureType: 'hookFailed' + error: 'failed running afterEach hook' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + 1..2 +not ok 5 - afterEach throws + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '2 subtests failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: test hooks + # Subtest: 1 + ok 1 - 1 + --- + duration_ms: * + ... + # Subtest: 2 + ok 2 - 2 + --- + duration_ms: * + ... + # Subtest: nested + # Subtest: nested 1 + ok 1 - nested 1 + --- + duration_ms: * + ... + # Subtest: nested 2 + ok 2 - nested 2 + --- + duration_ms: * + ... + 1..2 + ok 3 - nested + --- + duration_ms: * + ... + 1..3 +ok 6 - test hooks + --- + duration_ms: * + ... +# Subtest: t.beforeEach throws + # Subtest: 1 + not ok 1 - 1 + --- + duration_ms: * + failureType: 'hookFailed' + error: 'failed running beforeEach hook' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # Subtest: 2 + not ok 2 - 2 + --- + duration_ms: * + failureType: 'hookFailed' + error: 'failed running beforeEach hook' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + 1..2 +not ok 7 - t.beforeEach throws + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '2 subtests failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: t.afterEach throws + # Subtest: 1 + not ok 1 - 1 + --- + duration_ms: * + failureType: 'hookFailed' + error: 'failed running afterEach hook' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # Subtest: 2 + not ok 2 - 2 + --- + duration_ms: * + failureType: 'hookFailed' + error: 'failed running afterEach hook' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + 1..2 +not ok 8 - t.afterEach throws + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '2 subtests failed' + code: 'ERR_TEST_FAILURE' + ... +1..8 +# tests 8 +# pass 2 +# fail 6 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms * diff --git a/test/message/test_runner_no_refs.js b/test/message/test_runner_no_refs.js new file mode 100644 index 00000000000..8f2815f067a --- /dev/null +++ b/test/message/test_runner_no_refs.js @@ -0,0 +1,13 @@ +// Flags: --no-warnings +'use strict'; +require('../common'); +const test = require('node:test'); + +// When run alone, the test below does not keep the event loop alive. +test('does not keep event loop alive', async (t) => { + await t.test('+does not keep event loop alive', async (t) => { + return new Promise((resolve) => { + setTimeout(resolve, 1000).unref(); + }); + }); +}); diff --git a/test/message/test_runner_no_refs.out b/test/message/test_runner_no_refs.out new file mode 100644 index 00000000000..e8560c5720b --- /dev/null +++ b/test/message/test_runner_no_refs.out @@ -0,0 +1,30 @@ +TAP version 13 +# Subtest: does not keep event loop alive + # Subtest: +does not keep event loop alive + not ok 1 - +does not keep event loop alive + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'Promise resolution is still pending but the event loop has already resolved' + code: 'ERR_TEST_FAILURE' + stack: |- + * + ... + 1..1 +not ok 1 - does not keep event loop alive + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'Promise resolution is still pending but the event loop has already resolved' + code: 'ERR_TEST_FAILURE' + stack: |- + * + ... +1..1 +# tests 1 +# pass 0 +# fail 0 +# cancelled 1 +# skipped 0 +# todo 0 +# duration_ms * diff --git a/test/message/test_runner_no_tests.js b/test/message/test_runner_no_tests.js new file mode 100644 index 00000000000..c4d226c0bd2 --- /dev/null +++ b/test/message/test_runner_no_tests.js @@ -0,0 +1,7 @@ +// Flags: --no-warnings +'use strict'; +require('../common'); +const test = require('node:test'); + +// No TAP output should be generated. +console.log(test.name); diff --git a/test/message/test_runner_no_tests.out b/test/message/test_runner_no_tests.out new file mode 100644 index 00000000000..9daeafb9864 --- /dev/null +++ b/test/message/test_runner_no_tests.out @@ -0,0 +1 @@ +test diff --git a/test/message/test_runner_only_tests.js b/test/message/test_runner_only_tests.js new file mode 100644 index 00000000000..b6aeb580af9 --- /dev/null +++ b/test/message/test_runner_only_tests.js @@ -0,0 +1,48 @@ +// Flags: --no-warnings --test-only +'use strict'; +require('../common'); +const test = require('node:test'); + +// These tests should be skipped based on the 'only' option. +test('only = undefined'); +test('only = undefined, skip = string', { skip: 'skip message' }); +test('only = undefined, skip = true', { skip: true }); +test('only = undefined, skip = false', { skip: false }); +test('only = false', { only: false }); +test('only = false, skip = string', { only: false, skip: 'skip message' }); +test('only = false, skip = true', { only: false, skip: true }); +test('only = false, skip = false', { only: false, skip: false }); + +// These tests should be skipped based on the 'skip' option. +test('only = true, skip = string', { only: true, skip: 'skip message' }); +test('only = true, skip = true', { only: true, skip: true }); + +// An 'only' test with subtests. +test('only = true, with subtests', { only: true }, async (t) => { + // These subtests should run. + await t.test('running subtest 1'); + await t.test('running subtest 2'); + + // Switch the context to only execute 'only' tests. + t.runOnly(true); + await t.test('skipped subtest 1'); + await t.test('skipped subtest 2'); + await t.test('running subtest 3', { only: true }); + + // Switch the context back to execute all tests. + t.runOnly(false); + await t.test('running subtest 4', async (t) => { + // These subtests should run. + await t.test('running sub-subtest 1'); + await t.test('running sub-subtest 2'); + + // Switch the context to only execute 'only' tests. + t.runOnly(true); + await t.test('skipped sub-subtest 1'); + await t.test('skipped sub-subtest 2'); + }); + + // Explicitly do not run these tests. + await t.test('skipped subtest 3', { only: false }); + await t.test('skipped subtest 4', { skip: true }); +}); diff --git a/test/message/test_runner_only_tests.out b/test/message/test_runner_only_tests.out new file mode 100644 index 00000000000..c471a5284e7 --- /dev/null +++ b/test/message/test_runner_only_tests.out @@ -0,0 +1,126 @@ +TAP version 13 +# Subtest: only = undefined +ok 1 - only = undefined # SKIP 'only' option not set + --- + duration_ms: * + ... +# Subtest: only = undefined, skip = string +ok 2 - only = undefined, skip = string # SKIP 'only' option not set + --- + duration_ms: * + ... +# Subtest: only = undefined, skip = true +ok 3 - only = undefined, skip = true # SKIP 'only' option not set + --- + duration_ms: * + ... +# Subtest: only = undefined, skip = false +ok 4 - only = undefined, skip = false # SKIP 'only' option not set + --- + duration_ms: * + ... +# Subtest: only = false +ok 5 - only = false # SKIP 'only' option not set + --- + duration_ms: * + ... +# Subtest: only = false, skip = string +ok 6 - only = false, skip = string # SKIP 'only' option not set + --- + duration_ms: * + ... +# Subtest: only = false, skip = true +ok 7 - only = false, skip = true # SKIP 'only' option not set + --- + duration_ms: * + ... +# Subtest: only = false, skip = false +ok 8 - only = false, skip = false # SKIP 'only' option not set + --- + duration_ms: * + ... +# Subtest: only = true, skip = string +ok 9 - only = true, skip = string # SKIP skip message + --- + duration_ms: * + ... +# Subtest: only = true, skip = true +ok 10 - only = true, skip = true # SKIP + --- + duration_ms: * + ... +# Subtest: only = true, with subtests + # Subtest: running subtest 1 + ok 1 - running subtest 1 + --- + duration_ms: * + ... + # Subtest: running subtest 2 + ok 2 - running subtest 2 + --- + duration_ms: * + ... + # Subtest: skipped subtest 1 + ok 3 - skipped subtest 1 # SKIP 'only' option not set + --- + duration_ms: * + ... + # Subtest: skipped subtest 2 + ok 4 - skipped subtest 2 # SKIP 'only' option not set + --- + duration_ms: * + ... + # Subtest: running subtest 3 + ok 5 - running subtest 3 + --- + duration_ms: * + ... + # Subtest: running subtest 4 + # Subtest: running sub-subtest 1 + ok 1 - running sub-subtest 1 + --- + duration_ms: * + ... + # Subtest: running sub-subtest 2 + ok 2 - running sub-subtest 2 + --- + duration_ms: * + ... + # Subtest: skipped sub-subtest 1 + ok 3 - skipped sub-subtest 1 # SKIP 'only' option not set + --- + duration_ms: * + ... + # Subtest: skipped sub-subtest 2 + ok 4 - skipped sub-subtest 2 # SKIP 'only' option not set + --- + duration_ms: * + ... + 1..4 + ok 6 - running subtest 4 + --- + duration_ms: * + ... + # Subtest: skipped subtest 3 + ok 7 - skipped subtest 3 # SKIP 'only' option not set + --- + duration_ms: * + ... + # Subtest: skipped subtest 4 + ok 8 - skipped subtest 4 # SKIP + --- + duration_ms: * + ... + 1..8 +ok 11 - only = true, with subtests + --- + duration_ms: * + ... +1..11 +# tests 11 +# pass 1 +# fail 0 +# cancelled 0 +# skipped 10 +# todo 0 +# duration_ms * diff --git a/test/message/test_runner_output.js b/test/message/test_runner_output.js new file mode 100644 index 00000000000..2a71cd3e16e --- /dev/null +++ b/test/message/test_runner_output.js @@ -0,0 +1,385 @@ +// Flags: --no-warnings +'use strict'; +require('../common'); +const assert = require('node:assert'); +const test = require('node:test'); +const util = require('util'); + +test('sync pass todo', (t) => { + t.todo(); +}); + +test('sync pass todo with message', (t) => { + t.todo('this is a passing todo'); +}); + +test('sync fail todo', (t) => { + t.todo(); + throw new Error('thrown from sync fail todo'); +}); + +test('sync fail todo with message', (t) => { + t.todo('this is a failing todo'); + throw new Error('thrown from sync fail todo with message'); +}); + +test('sync skip pass', (t) => { + t.skip(); +}); + +test('sync skip pass with message', (t) => { + t.skip('this is skipped'); +}); + +test('sync pass', (t) => { + t.diagnostic('this test should pass'); +}); + +test('sync throw fail', () => { + throw new Error('thrown from sync throw fail'); +}); + +test('async skip pass', async (t) => { + t.skip(); +}); + +test('async pass', async () => { + +}); + +test('async throw fail', async () => { + throw new Error('thrown from async throw fail'); +}); + +test('async skip fail', async (t) => { + t.skip(); + throw new Error('thrown from async throw fail'); +}); + +test('async assertion fail', async () => { + // Make sure the assert module is handled. + assert.strictEqual(true, false); +}); + +test('resolve pass', () => { + return Promise.resolve(); +}); + +test('reject fail', () => { + return Promise.reject(new Error('rejected from reject fail')); +}); + +test('unhandled rejection - passes but warns', () => { + Promise.reject(new Error('rejected from unhandled rejection fail')); +}); + +test('async unhandled rejection - passes but warns', async () => { + Promise.reject(new Error('rejected from async unhandled rejection fail')); +}); + +test('immediate throw - passes but warns', () => { + setImmediate(() => { + throw new Error('thrown from immediate throw fail'); + }); +}); + +test('immediate reject - passes but warns', () => { + setImmediate(() => { + Promise.reject(new Error('rejected from immediate reject fail')); + }); +}); + +test('immediate resolve pass', () => { + return new Promise((resolve) => { + setImmediate(() => { + resolve(); + }); + }); +}); + +test('subtest sync throw fail', async (t) => { + await t.test('+sync throw fail', (t) => { + t.diagnostic('this subtest should make its parent test fail'); + throw new Error('thrown from subtest sync throw fail'); + }); +}); + +test('sync throw non-error fail', async (t) => { + throw Symbol('thrown symbol from sync throw non-error fail'); +}); + +test('level 0a', { concurrency: 4 }, async (t) => { + t.test('level 1a', async (t) => { + const p1a = new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, 1000); + }); + + return p1a; + }); + + t.test('level 1b', async (t) => { + const p1b = new Promise((resolve) => { + resolve(); + }); + + return p1b; + }); + + t.test('level 1c', async (t) => { + const p1c = new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, 2000); + }); + + return p1c; + }); + + t.test('level 1d', async (t) => { + const p1c = new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, 1500); + }); + + return p1c; + }); + + const p0a = new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, 3000); + }); + + return p0a; +}); + +test('top level', { concurrency: 2 }, async (t) => { + t.test('+long running', async (t) => { + return new Promise((resolve, reject) => { + setTimeout(resolve, 3000).unref(); + }); + }); + + t.test('+short running', async (t) => { + t.test('++short running', async (t) => {}); + }); +}); + +test('invalid subtest - pass but subtest fails', (t) => { + setImmediate(() => { + t.test('invalid subtest fail', () => { + throw new Error('this should not be thrown'); + }); + }); +}); + +test('sync skip option', { skip: true }, (t) => { + throw new Error('this should not be executed'); +}); + +test('sync skip option with message', { skip: 'this is skipped' }, (t) => { + throw new Error('this should not be executed'); +}); + +test('sync skip option is false fail', { skip: false }, (t) => { + throw new Error('this should be executed'); +}); + +// A test with no arguments provided. +test(); + +// A test with only a named function provided. +test(function functionOnly() {}); + +// A test with only an anonymous function provided. +test(() => {}); + +// A test with only a name provided. +test('test with only a name provided'); + +// A test with an empty string name. +test(''); + +// A test with only options provided. +test({ skip: true }); + +// A test with only a name and options provided. +test('test with a name and options provided', { skip: true }); + +// A test with only options and a function provided. +test({ skip: true }, function functionAndOptions() {}); + +// A test whose description needs to be escaped. +test('escaped description \\ # \\#\\'); + +// A test whose skip message needs to be escaped. +test('escaped skip message', { skip: '#skip' }); + +// A test whose todo message needs to be escaped. +test('escaped todo message', { todo: '#todo' }); + +// A test with a diagnostic message that needs to be escaped. +test('escaped diagnostic', (t) => { + t.diagnostic('#diagnostic'); +}); + +test('callback pass', (t, done) => { + setImmediate(done); +}); + +test('callback fail', (t, done) => { + setImmediate(() => { + done(new Error('callback failure')); + }); +}); + +test('sync t is this in test', function(t) { + assert.strictEqual(this, t); +}); + +test('async t is this in test', async function(t) { + assert.strictEqual(this, t); +}); + +test('callback t is this in test', function(t, done) { + assert.strictEqual(this, t); + done(); +}); + +test('callback also returns a Promise', async (t, done) => { + throw new Error('thrown from callback also returns a Promise'); +}); + +test('callback throw', (t, done) => { + throw new Error('thrown from callback throw'); +}); + +test('callback called twice', (t, done) => { + done(); + done(); +}); + +test('callback called twice in different ticks', (t, done) => { + setImmediate(done); + done(); +}); + +test('callback called twice in future tick', (t, done) => { + setImmediate(() => { + done(); + done(); + }); +}); + +test('callback async throw', (t, done) => { + setImmediate(() => { + throw new Error('thrown from callback async throw'); + }); +}); + +test('callback async throw after done', (t, done) => { + setImmediate(() => { + throw new Error('thrown from callback async throw after done'); + }); + + done(); +}); + +test('only is set but not in only mode', { only: true }, async (t) => { + // All of these subtests should run. + await t.test('running subtest 1'); + t.runOnly(true); + await t.test('running subtest 2'); + await t.test('running subtest 3', { only: true }); + t.runOnly(false); + await t.test('running subtest 4'); +}); + +test('custom inspect symbol fail', () => { + const obj = { + [util.inspect.custom]() { + return 'customized'; + }, + foo: 1 + }; + + throw obj; +}); + +test('custom inspect symbol that throws fail', () => { + const obj = { + [util.inspect.custom]() { + throw new Error('bad-inspect'); + }, + foo: 1 + }; + + throw obj; +}); + +test('subtest sync throw fails', async (t) => { + await t.test('sync throw fails at first', (t) => { + throw new Error('thrown from subtest sync throw fails at first'); + }); + await t.test('sync throw fails at second', (t) => { + throw new Error('thrown from subtest sync throw fails at second'); + }); +}); + +test('timed out async test', { timeout: 5 }, async (t) => { + return new Promise((resolve) => { + setTimeout(resolve, 1000); + }); +}); + +test('timed out callback test', { timeout: 5 }, (t, done) => { + setTimeout(done, 1000); +}); + + +test('large timeout async test is ok', { timeout: 30_000_000 }, async (t) => { + return new Promise((resolve) => { + setTimeout(resolve, 10); + }); +}); + +test('large timeout callback test is ok', { timeout: 30_000_000 }, (t, done) => { + setTimeout(done, 10); +}); + +test('successful thenable', () => { + let thenCalled = false; + return { + get then() { + if (thenCalled) throw new Error(); + thenCalled = true; + return (successHandler) => successHandler(); + }, + }; +}); + +test('rejected thenable', () => { + let thenCalled = false; + return { + get then() { + if (thenCalled) throw new Error(); + thenCalled = true; + return (_, errorHandler) => errorHandler('custom error'); + }, + }; +}); + +test('unfinished test with uncaughtException', async () => { + await new Promise(() => { + setTimeout(() => { throw new Error('foo'); }); + }); +}); + +test('unfinished test with unhandledRejection', async () => { + await new Promise(() => { + setTimeout(() => Promise.reject(new Error('bar'))); + }); +}); diff --git a/test/message/test_runner_output.out b/test/message/test_runner_output.out new file mode 100644 index 00000000000..fe5698e9d03 --- /dev/null +++ b/test/message/test_runner_output.out @@ -0,0 +1,652 @@ +TAP version 13 +# Subtest: sync pass todo +ok 1 - sync pass todo # TODO + --- + duration_ms: * + ... +# Subtest: sync pass todo with message +ok 2 - sync pass todo with message # TODO this is a passing todo + --- + duration_ms: * + ... +# Subtest: sync fail todo +not ok 3 - sync fail todo # TODO + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from sync fail todo' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: sync fail todo with message +not ok 4 - sync fail todo with message # TODO this is a failing todo + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from sync fail todo with message' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... +# Subtest: sync skip pass +ok 5 - sync skip pass # SKIP + --- + duration_ms: * + ... +# Subtest: sync skip pass with message +ok 6 - sync skip pass with message # SKIP this is skipped + --- + duration_ms: * + ... +# Subtest: sync pass +ok 7 - sync pass + --- + duration_ms: * + ... +# this test should pass +# Subtest: sync throw fail +not ok 8 - sync throw fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from sync throw fail' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: async skip pass +ok 9 - async skip pass # SKIP + --- + duration_ms: * + ... +# Subtest: async pass +ok 10 - async pass + --- + duration_ms: * + ... +# Subtest: async throw fail +not ok 11 - async throw fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from async throw fail' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: async skip fail +not ok 12 - async skip fail # SKIP + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from async throw fail' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: async assertion fail +not ok 13 - async assertion fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: |- + Expected values to be strictly equal: + + true !== false + + code: 'ERR_ASSERTION' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: resolve pass +ok 14 - resolve pass + --- + duration_ms: * + ... +# Subtest: reject fail +not ok 15 - reject fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'rejected from reject fail' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + ... +# Subtest: unhandled rejection - passes but warns +ok 16 - unhandled rejection - passes but warns + --- + duration_ms: * + ... +# Subtest: async unhandled rejection - passes but warns +ok 17 - async unhandled rejection - passes but warns + --- + duration_ms: * + ... +# Subtest: immediate throw - passes but warns +ok 18 - immediate throw - passes but warns + --- + duration_ms: * + ... +# Subtest: immediate reject - passes but warns +ok 19 - immediate reject - passes but warns + --- + duration_ms: * + ... +# Subtest: immediate resolve pass +ok 20 - immediate resolve pass + --- + duration_ms: * + ... +# Subtest: subtest sync throw fail + # Subtest: +sync throw fail + not ok 1 - +sync throw fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from subtest sync throw fail' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # this subtest should make its parent test fail + 1..1 +not ok 21 - subtest sync throw fail + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '1 subtest failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: sync throw non-error fail +not ok 22 - sync throw non-error fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'Symbol(thrown symbol from sync throw non-error fail)' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: level 0a + # Subtest: level 1a + ok 1 - level 1a + --- + duration_ms: * + ... + # Subtest: level 1b + ok 2 - level 1b + --- + duration_ms: * + ... + # Subtest: level 1c + ok 3 - level 1c + --- + duration_ms: * + ... + # Subtest: level 1d + ok 4 - level 1d + --- + duration_ms: * + ... + 1..4 +ok 23 - level 0a + --- + duration_ms: * + ... +# Subtest: top level + # Subtest: +long running + not ok 1 - +long running + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'test did not finish before its parent and was cancelled' + code: 'ERR_TEST_FAILURE' + ... + # Subtest: +short running + # Subtest: ++short running + ok 1 - ++short running + --- + duration_ms: * + ... + 1..1 + ok 2 - +short running + --- + duration_ms: * + ... + 1..2 +not ok 24 - top level + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '1 subtest failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: invalid subtest - pass but subtest fails +ok 25 - invalid subtest - pass but subtest fails + --- + duration_ms: * + ... +# Subtest: sync skip option +ok 26 - sync skip option # SKIP + --- + duration_ms: * + ... +# Subtest: sync skip option with message +ok 27 - sync skip option with message # SKIP this is skipped + --- + duration_ms: * + ... +# Subtest: sync skip option is false fail +not ok 28 - sync skip option is false fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'this should be executed' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + ... +# Subtest: +ok 29 - + --- + duration_ms: * + ... +# Subtest: functionOnly +ok 30 - functionOnly + --- + duration_ms: * + ... +# Subtest: +ok 31 - + --- + duration_ms: * + ... +# Subtest: test with only a name provided +ok 32 - test with only a name provided + --- + duration_ms: * + ... +# Subtest: +ok 33 - + --- + duration_ms: * + ... +# Subtest: +ok 34 - # SKIP + --- + duration_ms: * + ... +# Subtest: test with a name and options provided +ok 35 - test with a name and options provided # SKIP + --- + duration_ms: * + ... +# Subtest: functionAndOptions +ok 36 - functionAndOptions # SKIP + --- + duration_ms: * + ... +# Subtest: escaped description \\ \# \\\#\\ +ok 37 - escaped description \\ \# \\\#\\ + --- + duration_ms: * + ... +# Subtest: escaped skip message +ok 38 - escaped skip message # SKIP \#skip + --- + duration_ms: * + ... +# Subtest: escaped todo message +ok 39 - escaped todo message # TODO \#todo + --- + duration_ms: * + ... +# Subtest: escaped diagnostic +ok 40 - escaped diagnostic + --- + duration_ms: * + ... +# \#diagnostic +# Subtest: callback pass +ok 41 - callback pass + --- + duration_ms: * + ... +# Subtest: callback fail +not ok 42 - callback fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'callback failure' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + ... +# Subtest: sync t is this in test +ok 43 - sync t is this in test + --- + duration_ms: * + ... +# Subtest: async t is this in test +ok 44 - async t is this in test + --- + duration_ms: * + ... +# Subtest: callback t is this in test +ok 45 - callback t is this in test + --- + duration_ms: * + ... +# Subtest: callback also returns a Promise +not ok 46 - callback also returns a Promise + --- + duration_ms: * + failureType: 'callbackAndPromisePresent' + error: 'passed a callback but also returned a Promise' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: callback throw +not ok 47 - callback throw + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from callback throw' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + ... +# Subtest: callback called twice +not ok 48 - callback called twice + --- + duration_ms: * + failureType: 'multipleCallbackInvocations' + error: 'callback invoked multiple times' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + ... +# Subtest: callback called twice in different ticks +ok 49 - callback called twice in different ticks + --- + duration_ms: * + ... +# Subtest: callback called twice in future tick +not ok 50 - callback called twice in future tick + --- + duration_ms: * + failureType: 'uncaughtException' + error: 'callback invoked multiple times' + code: 'ERR_TEST_FAILURE' + stack: |- + * + ... +# Subtest: callback async throw +not ok 51 - callback async throw + --- + duration_ms: * + failureType: 'uncaughtException' + error: 'thrown from callback async throw' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + ... +# Subtest: callback async throw after done +ok 52 - callback async throw after done + --- + duration_ms: * + ... +# Subtest: only is set but not in only mode + # Subtest: running subtest 1 + ok 1 - running subtest 1 + --- + duration_ms: * + ... + # Subtest: running subtest 2 + ok 2 - running subtest 2 + --- + duration_ms: * + ... + # Subtest: running subtest 3 + ok 3 - running subtest 3 + --- + duration_ms: * + ... + # Subtest: running subtest 4 + ok 4 - running subtest 4 + --- + duration_ms: * + ... + 1..4 +ok 53 - only is set but not in only mode + --- + duration_ms: * + ... +# Subtest: custom inspect symbol fail +not ok 54 - custom inspect symbol fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'customized' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: custom inspect symbol that throws fail +not ok 55 - custom inspect symbol that throws fail + --- + duration_ms: * + failureType: 'testCodeFailure' + error: |- + { + foo: 1, + [Symbol(nodejs.util.inspect.custom)]: [Function: [nodejs.util.inspect.custom]] + } + code: 'ERR_TEST_FAILURE' + ... +# Subtest: subtest sync throw fails + # Subtest: sync throw fails at first + not ok 1 - sync throw fails at first + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from subtest sync throw fails at first' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + # Subtest: sync throw fails at second + not ok 2 - sync throw fails at second + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'thrown from subtest sync throw fails at second' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + * + * + * + * + * + * + * + ... + 1..2 +not ok 56 - subtest sync throw fails + --- + duration_ms: * + failureType: 'subtestsFailed' + error: '2 subtests failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: timed out async test +not ok 57 - timed out async test + --- + duration_ms: * + failureType: 'testTimeoutFailure' + error: 'test timed out after 5ms' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: timed out callback test +not ok 58 - timed out callback test + --- + duration_ms: * + failureType: 'testTimeoutFailure' + error: 'test timed out after 5ms' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: large timeout async test is ok +ok 59 - large timeout async test is ok + --- + duration_ms: * + ... +# Subtest: large timeout callback test is ok +ok 60 - large timeout callback test is ok + --- + duration_ms: * + ... +# Subtest: successful thenable +ok 61 - successful thenable + --- + duration_ms: * + ... +# Subtest: rejected thenable +not ok 62 - rejected thenable + --- + duration_ms: * + failureType: 'testCodeFailure' + error: 'custom error' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: unfinished test with uncaughtException +not ok 63 - unfinished test with uncaughtException + --- + duration_ms: * + failureType: 'uncaughtException' + error: 'foo' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + ... +# Subtest: unfinished test with unhandledRejection +not ok 64 - unfinished test with unhandledRejection + --- + duration_ms: * + failureType: 'unhandledRejection' + error: 'bar' + code: 'ERR_TEST_FAILURE' + stack: |- + * + * + * + ... +# Subtest: invalid subtest fail +not ok 65 - invalid subtest fail + --- + duration_ms: * + failureType: 'parentAlreadyFinished' + error: 'test could not be started because its parent finished' + code: 'ERR_TEST_FAILURE' + stack: |- + * + ... +1..65 +# Warning: Test "unhandled rejection - passes but warns" generated asynchronous activity after the test ended. This activity created the error "Error: rejected from unhandled rejection fail" and would have caused the test to fail, but instead triggered an unhandledRejection event. +# Warning: Test "async unhandled rejection - passes but warns" generated asynchronous activity after the test ended. This activity created the error "Error: rejected from async unhandled rejection fail" and would have caused the test to fail, but instead triggered an unhandledRejection event. +# Warning: Test "immediate throw - passes but warns" generated asynchronous activity after the test ended. This activity created the error "Error: thrown from immediate throw fail" and would have caused the test to fail, but instead triggered an uncaughtException event. +# Warning: Test "immediate reject - passes but warns" generated asynchronous activity after the test ended. This activity created the error "Error: rejected from immediate reject fail" and would have caused the test to fail, but instead triggered an unhandledRejection event. +# Warning: Test "callback called twice in different ticks" generated asynchronous activity after the test ended. This activity created the error "Error [ERR_TEST_FAILURE]: callback invoked multiple times" and would have caused the test to fail, but instead triggered an uncaughtException event. +# Warning: Test "callback async throw after done" generated asynchronous activity after the test ended. This activity created the error "Error: thrown from callback async throw after done" and would have caused the test to fail, but instead triggered an uncaughtException event. +# tests 65 +# pass 27 +# fail 21 +# cancelled 2 +# skipped 10 +# todo 5 +# duration_ms * diff --git a/test/message/test_runner_unresolved_promise.js b/test/message/test_runner_unresolved_promise.js new file mode 100644 index 00000000000..a36652669fc --- /dev/null +++ b/test/message/test_runner_unresolved_promise.js @@ -0,0 +1,8 @@ +// Flags: --no-warnings +'use strict'; +require('../common'); +const test = require('node:test'); + +test('pass'); +test('never resolving promise', () => new Promise(() => {})); +test('fail', () => console.log('this should not appear')); diff --git a/test/message/test_runner_unresolved_promise.out b/test/message/test_runner_unresolved_promise.out new file mode 100644 index 00000000000..b4d6cba4ca1 --- /dev/null +++ b/test/message/test_runner_unresolved_promise.out @@ -0,0 +1,34 @@ +TAP version 13 +# Subtest: pass +ok 1 - pass + --- + duration_ms: * + ... +# Subtest: never resolving promise +not ok 2 - never resolving promise + --- + duration_ms: * + failureType: 'cancelledByParent' + error: 'Promise resolution is still pending but the event loop has already resolved' + code: 'ERR_TEST_FAILURE' + stack: |- + * + ... +# Subtest: fail +not ok 3 - fail + --- + duration_ms: 0 + failureType: 'cancelledByParent' + error: 'Promise resolution is still pending but the event loop has already resolved' + code: 'ERR_TEST_FAILURE' + stack: |- + * + ... +1..3 +# tests 3 +# pass 1 +# fail 0 +# cancelled 2 +# skipped 0 +# todo 0 +# duration_ms * diff --git a/test/node-api/node-api.status b/test/node-api/node-api.status index 9395bfe1f6b..b8e18f95623 100644 --- a/test/node-api/node-api.status +++ b/test/node-api/node-api.status @@ -7,3 +7,8 @@ prefix node-api [true] # This section applies to all platforms [$system==win32] + +[$system==solaris] # Also applies to SmartOS +# https://github.com/nodejs/node/issues/43457 +test_fatal/test_threads: PASS,FLAKY +test_fatal/test_threads_report: PASS,FLAKY diff --git a/test/node-api/test_buffer/test_buffer.c b/test/node-api/test_buffer/test_buffer.c index abe21626468..bc61cd7a2e9 100644 --- a/test/node-api/test_buffer/test_buffer.c +++ b/test/node-api/test_buffer/test_buffer.c @@ -22,6 +22,17 @@ static void noopDeleter(napi_env env, void* data, void* finalize_hint) { deleterCallCount++; } +static void malignDeleter(napi_env env, void* data, void* finalize_hint) { + NODE_API_ASSERT_RETURN_VOID(env, data != NULL && strcmp(data, theText) == 0, "invalid data"); + napi_ref finalizer_ref = (napi_ref)finalize_hint; + napi_value js_finalizer; + napi_value recv; + NODE_API_CALL_RETURN_VOID(env, napi_get_reference_value(env, finalizer_ref, &js_finalizer)); + NODE_API_CALL_RETURN_VOID(env, napi_get_global(env, &recv)); + NODE_API_CALL_RETURN_VOID(env, napi_call_function(env, recv, js_finalizer, 0, NULL, NULL)); + NODE_API_CALL_RETURN_VOID(env, napi_delete_reference(env, finalizer_ref)); +} + static napi_value newBuffer(napi_env env, napi_callback_info info) { napi_value theBuffer; char* theCopy; @@ -107,6 +118,30 @@ static napi_value staticBuffer(napi_env env, napi_callback_info info) { return theBuffer; } +static napi_value malignFinalizerBuffer(napi_env env, napi_callback_info info) { + size_t argc = 1; + napi_value args[1]; + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); + NODE_API_ASSERT(env, argc == 1, "Wrong number of arguments"); + napi_value finalizer = args[0]; + napi_valuetype finalizer_valuetype; + NODE_API_CALL(env, napi_typeof(env, finalizer, &finalizer_valuetype)); + NODE_API_ASSERT(env, finalizer_valuetype == napi_function, "Wrong type of first argument"); + napi_ref finalizer_ref; + NODE_API_CALL(env, napi_create_reference(env, finalizer, 1, &finalizer_ref)); + + napi_value theBuffer; + NODE_API_CALL( + env, + napi_create_external_buffer(env, + sizeof(theText), + (void*)theText, + malignDeleter, + finalizer_ref, // finalize_hint + &theBuffer)); + return theBuffer; +} + static napi_value Init(napi_env env, napi_value exports) { napi_value theValue; @@ -123,6 +158,7 @@ static napi_value Init(napi_env env, napi_value exports) { DECLARE_NODE_API_PROPERTY("bufferHasInstance", bufferHasInstance), DECLARE_NODE_API_PROPERTY("bufferInfo", bufferInfo), DECLARE_NODE_API_PROPERTY("staticBuffer", staticBuffer), + DECLARE_NODE_API_PROPERTY("malignFinalizerBuffer", malignFinalizerBuffer), }; NODE_API_CALL(env, napi_define_properties( diff --git a/test/node-api/test_buffer/test_finalizer.js b/test/node-api/test_buffer/test_finalizer.js new file mode 100644 index 00000000000..b706c68c7c3 --- /dev/null +++ b/test/node-api/test_buffer/test_finalizer.js @@ -0,0 +1,25 @@ +'use strict'; +// Flags: --expose-gc --force-node-api-uncaught-exceptions-policy + +const common = require('../../common'); +const binding = require(`./build/${common.buildType}/test_buffer`); +const assert = require('assert'); +const tick = require('util').promisify(require('../../common/tick')); + +process.on('uncaughtException', common.mustCall((err) => { + assert.throws(() => { throw err; }, /finalizer error/); +})); + +(async function() { + { + binding.malignFinalizerBuffer(common.mustCall(() => { + throw new Error('finalizer error'); + })); + } + global.gc({ type: 'minor' }); + await tick(common.platformTimeout(100)); + global.gc(); + await tick(common.platformTimeout(100)); + global.gc(); + await tick(common.platformTimeout(100)); +})().then(common.mustCall()); diff --git a/test/node-api/test_general/test.js b/test/node-api/test_general/test.js index 77550c02927..f51ef2367f5 100644 --- a/test/node-api/test_general/test.js +++ b/test/node-api/test_general/test.js @@ -23,7 +23,7 @@ tmpdir.refresh(); const urlTestFile = path.join(urlTestDir, path.basename(filename)); fs.mkdirSync(urlTestDir, { recursive: true }); fs.copyFileSync(filename, urlTestFile); - // Use a child process as indirection so that the native module is not loaded + // Use a child process as indirection so that the built-in modules is not loaded // into this process and can be removed here. const reportedFilename = child_process.spawnSync( process.execPath, diff --git a/test/node-api/test_general/test_general.c b/test/node-api/test_general/test_general.c index d430e2df4f3..b8d837d5e45 100644 --- a/test/node-api/test_general/test_general.c +++ b/test/node-api/test_general/test_general.c @@ -1,4 +1,9 @@ #define NAPI_EXPERIMENTAL +// we define NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED here to validate that it can +// be used as a form of test itself. It is +// not related to any of the other tests +// defined in the file +#define NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED #include #include #include "../../js-native-api/common.h" diff --git a/test/node-api/test_init_order/binding.gyp b/test/node-api/test_init_order/binding.gyp new file mode 100644 index 00000000000..2ffb81838d1 --- /dev/null +++ b/test/node-api/test_init_order/binding.gyp @@ -0,0 +1,8 @@ +{ + "targets": [ + { + "target_name": "test_init_order", + "sources": [ "test_init_order.cc" ] + } + ] +} diff --git a/test/node-api/test_init_order/test.js b/test/node-api/test_init_order/test.js new file mode 100644 index 00000000000..0bfeb8f94af --- /dev/null +++ b/test/node-api/test_init_order/test.js @@ -0,0 +1,10 @@ +'use strict'; + +// This test verifies that C++ static variable dynamic initialization is called +// correctly and does not interfere with the module initialization. +const common = require('../../common'); +const test_init_order = require(`./build/${common.buildType}/test_init_order`); +const assert = require('assert'); + +assert.strictEqual(test_init_order.cppIntValue, 42); +assert.strictEqual(test_init_order.cppStringValue, '123'); diff --git a/test/node-api/test_init_order/test_init_order.cc b/test/node-api/test_init_order/test_init_order.cc new file mode 100644 index 00000000000..2b6fffd834e --- /dev/null +++ b/test/node-api/test_init_order/test_init_order.cc @@ -0,0 +1,55 @@ +#include +#include +#include +#include "../../js-native-api/common.h" + +// This test verifies that use of the NAPI_MODULE in C++ code does not +// interfere with the C++ dynamic static initializers. + +namespace { + +// This class uses dynamic static initializers for the test. +// In production code developers must avoid dynamic static initializers because +// they affect the start up time. They must prefer static initialization such as +// use of constexpr functions or classes with constexpr constructors. E.g. +// instead of using std::string, it is preferrable to use const char[], or +// constexpr std::string_view starting with C++17, or even constexpr +// std::string starting with C++20. +struct MyClass { + static const std::unique_ptr valueHolder; + static const std::string testString; +}; + +const std::unique_ptr MyClass::valueHolder = + std::unique_ptr(new int(42)); +// NOLINTNEXTLINE(runtime/string) +const std::string MyClass::testString = std::string("123"); + +} // namespace + +EXTERN_C_START +napi_value Init(napi_env env, napi_value exports) { + napi_value cppIntValue, cppStringValue; + NODE_API_CALL(env, + napi_create_int32(env, *MyClass::valueHolder, &cppIntValue)); + NODE_API_CALL( + env, + napi_create_string_utf8( + env, MyClass::testString.c_str(), NAPI_AUTO_LENGTH, &cppStringValue)); + + napi_property_descriptor descriptors[] = { + DECLARE_NODE_API_PROPERTY_VALUE("cppIntValue", cppIntValue), + DECLARE_NODE_API_PROPERTY_VALUE("cppStringValue", cppStringValue)}; + + NODE_API_CALL( + env, + napi_define_properties(env, + exports, + sizeof(descriptors) / sizeof(descriptors[0]), + descriptors)); + + return exports; +} +EXTERN_C_END + +NAPI_MODULE(NODE_GYP_MODULE_NAME, Init) diff --git a/test/node-api/test_threadsafe_function/binding.c b/test/node-api/test_threadsafe_function/binding.c index d64b9058b11..53b1cb30563 100644 --- a/test/node-api/test_threadsafe_function/binding.c +++ b/test/node-api/test_threadsafe_function/binding.c @@ -269,6 +269,35 @@ static napi_value StartThreadNoJsFunc(napi_env env, napi_callback_info info) { /** block_on_full */true, /** alt_ref_js_cb */true); } +// Testing calling into JavaScript +static void ThreadSafeFunctionFinalize(napi_env env, + void* finalize_data, + void* finalize_hint) { + napi_ref js_func_ref = (napi_ref) finalize_data; + napi_value js_func; + napi_value recv; + NODE_API_CALL_RETURN_VOID(env, napi_get_reference_value(env, js_func_ref, &js_func)); + NODE_API_CALL_RETURN_VOID(env, napi_get_global(env, &recv)); + NODE_API_CALL_RETURN_VOID(env, napi_call_function(env, recv, js_func, 0, NULL, NULL)); + NODE_API_CALL_RETURN_VOID(env, napi_delete_reference(env, js_func_ref)); +} + +// Testing calling into JavaScript +static napi_value CallIntoModule(napi_env env, napi_callback_info info) { + size_t argc = 4; + napi_value argv[4]; + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); + + napi_ref finalize_func; + NODE_API_CALL(env, napi_create_reference(env, argv[3], 1, &finalize_func)); + + napi_threadsafe_function tsfn; + NODE_API_CALL(env, napi_create_threadsafe_function(env, argv[0], argv[1], argv[2], 0, 1, finalize_func, ThreadSafeFunctionFinalize, NULL, NULL, &tsfn)); + NODE_API_CALL(env, napi_call_threadsafe_function(tsfn, NULL, napi_tsfn_blocking)); + NODE_API_CALL(env, napi_release_threadsafe_function(tsfn, napi_tsfn_release)); + return NULL; +} + // Module init static napi_value Init(napi_env env, napi_value exports) { size_t index; @@ -307,6 +336,7 @@ static napi_value Init(napi_env env, napi_value exports) { DECLARE_NODE_API_PROPERTY("StopThread", StopThread), DECLARE_NODE_API_PROPERTY("Unref", Unref), DECLARE_NODE_API_PROPERTY("Release", Release), + DECLARE_NODE_API_PROPERTY("CallIntoModule", CallIntoModule), }; NODE_API_CALL(env, napi_define_properties(env, exports, diff --git a/test/node-api/test_threadsafe_function/test_force_uncaught_exception.js b/test/node-api/test_threadsafe_function/test_force_uncaught_exception.js new file mode 100644 index 00000000000..c23ad44ae88 --- /dev/null +++ b/test/node-api/test_threadsafe_function/test_force_uncaught_exception.js @@ -0,0 +1,22 @@ +'use strict'; +// Flags: --no-force-node-api-uncaught-exceptions-policy + +const common = require('../../common'); +const binding = require(`./build/${common.buildType}/binding`); + +process.on( + 'uncaughtException', + common.mustNotCall('uncaught callback errors should be suppressed ' + + 'with the option --no-force-node-api-uncaught-exceptions-policy') +); + +binding.CallIntoModule( + common.mustCall(() => { + throw new Error('callback error'); + }), + {}, + 'resource_name', + common.mustCall(function finalizer() { + throw new Error('finalizer error'); + }) +); diff --git a/test/node-api/test_threadsafe_function/test_uncaught_exception.js b/test/node-api/test_threadsafe_function/test_uncaught_exception.js new file mode 100644 index 00000000000..45e7370c33e --- /dev/null +++ b/test/node-api/test_threadsafe_function/test_uncaught_exception.js @@ -0,0 +1,27 @@ +'use strict'; +// Flags: --force-node-api-uncaught-exceptions-policy + +const common = require('../../common'); +const assert = require('assert'); +const binding = require(`./build/${common.buildType}/binding`); + +const callbackCheck = common.mustCall((err) => { + assert.throws(() => { throw err; }, /callback error/); + process.removeListener('uncaughtException', callbackCheck); + process.on('uncaughtException', finalizerCheck); +}); +const finalizerCheck = common.mustCall((err) => { + assert.throws(() => { throw err; }, /finalizer error/); +}); +process.on('uncaughtException', callbackCheck); + +binding.CallIntoModule( + common.mustCall(() => { + throw new Error('callback error'); + }), + {}, + 'resource_name', + common.mustCall(function finalizer() { + throw new Error('finalizer error'); + }) +); diff --git a/test/parallel/parallel.status b/test/parallel/parallel.status index 40375234685..0c2c10c1eed 100644 --- a/test/parallel/parallel.status +++ b/test/parallel/parallel.status @@ -7,6 +7,8 @@ prefix parallel [true] # This section applies to all platforms # https://github.com/nodejs/node/issues/41123 test-repl-sigint-nested-eval: PASS, FLAKY +# https://github.com/nodejs/node/issues/43084 +test-worker-http2-stream-terminate: PASS, FLAKY [$system==win32] # https://github.com/nodejs/node/issues/24497 @@ -21,6 +23,8 @@ test-fs-rmdir-recursive: PASS, FLAKY test-domain-error-types: PASS,FLAKY [$system==macos] +# https://github.com/nodejs/node/issues/43465 +test-http-server-request-timeouts-mixed: PASS,FLAKY [$arch==arm || $arch==arm64] # https://github.com/nodejs/node/pull/31178 @@ -28,12 +32,29 @@ test-crypto-dh-stateless: SKIP test-crypto-keygen: SKIP [$system==solaris] # Also applies to SmartOS +# https://github.com/nodejs/node/issues/43446 +test-net-connect-reset-until-connected: PASS, FLAKY +# https://github.com/nodejs/node/issues/43457 +test-domain-no-error-handler-abort-on-uncaught-0: PASS, FLAKY +test-domain-no-error-handler-abort-on-uncaught-1: PASS,FLAKY +test-domain-no-error-handler-abort-on-uncaught-2: PASS,FLAKY +test-domain-no-error-handler-abort-on-uncaught-3: PASS,FLAKY +test-domain-no-error-handler-abort-on-uncaught-4: PASS,FLAKY +test-domain-no-error-handler-abort-on-uncaught-5: PASS, FLAKY +test-domain-no-error-handler-abort-on-uncaught-6: PASS, FLAKY +test-domain-no-error-handler-abort-on-uncaught-7: PASS, FLAKY +test-domain-no-error-handler-abort-on-uncaught-8: PASS, FLAKY +test-domain-no-error-handler-abort-on-uncaught-9: PASS, FLAKY +test-domain-throw-error-then-throw-from-uncaught-exception-handler: PASS, FLAKY +test-domain-with-abort-on-uncaught-exception: PASS, FLAKY [$system==freebsd] # https://github.com/nodejs/node/issues/31727 test-fs-stat-bigint: PASS,FLAKY # https://github.com/nodejs/node/issues/31280 test-worker-message-port-message-before-close: PASS,FLAKY +# https://github.com/nodejs/node/issues/43446 +test-net-connect-reset-until-connected: PASS, FLAKY [$system==aix] @@ -63,6 +84,7 @@ test-crypto-secure-heap: SKIP test-dgram-connect: PASS, FLAKY test-http-client-parse-error: PASS, FLAKY test-http-multi-line-headers: PASS, FLAKY +test-http-pipeline-requests-connection-leak: PASS, FLAKY test-http-server-unconsume: PASS, FLAKY test-http-upgrade-advertise: PASS, FLAKY test-tls-client-mindhsize: PASS, FLAKY diff --git a/test/parallel/test-abortcontroller.js b/test/parallel/test-abortcontroller.js index 4b59ae6adff..94f153a957c 100644 --- a/test/parallel/test-abortcontroller.js +++ b/test/parallel/test-abortcontroller.js @@ -14,6 +14,8 @@ const { const { kWeakHandler, } = require('internal/event_target'); +const { internalBinding } = require('internal/test/binding'); +const { DOMException } = internalBinding('messaging'); const { setTimeout: sleep } = require('timers/promises'); @@ -230,3 +232,24 @@ const { setTimeout: sleep } = require('timers/promises'); // keep the Node.js process open (the timer is unref'd) AbortSignal.timeout(1_200_000); } + +{ + // Test AbortSignal.reason default + const signal = AbortSignal.abort(); + ok(signal.reason instanceof DOMException); + strictEqual(signal.reason.code, 20); + + const ac = new AbortController(); + ac.abort(); + ok(ac.signal.reason instanceof DOMException); + strictEqual(ac.signal.reason.code, 20); +} + +{ + // Test abortSignal.throwIfAborted() + throws(() => AbortSignal.abort().throwIfAborted(), { code: 20 }); + + // Does not throw because it's not aborted. + const ac = new AbortController(); + ac.signal.throwIfAborted(); +} diff --git a/test/parallel/test-assert-async.js b/test/parallel/test-assert-async.js index 1a192ae3f7d..bcf3d55622b 100644 --- a/test/parallel/test-assert-async.js +++ b/test/parallel/test-assert-async.js @@ -103,8 +103,9 @@ const invalidThenableFunc = () => { promises.push(assert.rejects(promise, { name: 'TypeError', code: 'ERR_INVALID_RETURN_VALUE', + // FIXME(JakobJingleheimer): This should match on key words, like /Promise/ and /undefined/. message: 'Expected instance of Promise to be returned ' + - 'from the "promiseFn" function but got type undefined.' + 'from the "promiseFn" function but got undefined.' })); promise = assert.rejects(Promise.resolve(), common.mustNotCall()); @@ -162,7 +163,7 @@ promises.push(assert.rejects( let promise = assert.doesNotReject(() => new Map(), common.mustNotCall()); promises.push(assert.rejects(promise, { message: 'Expected instance of Promise to be returned ' + - 'from the "promiseFn" function but got instance of Map.', + 'from the "promiseFn" function but got an instance of Map.', code: 'ERR_INVALID_RETURN_VALUE', name: 'TypeError' })); diff --git a/test/parallel/test-assert-calltracker-calls.js b/test/parallel/test-assert-calltracker-calls.js index 99db4ee284b..7b73f3fefaf 100644 --- a/test/parallel/test-assert-calltracker-calls.js +++ b/test/parallel/test-assert-calltracker-calls.js @@ -1,5 +1,5 @@ 'use strict'; -require('../common'); +const common = require('../common'); const assert = require('assert'); // This test ensures that assert.CallTracker.calls() works as intended. @@ -78,3 +78,51 @@ assert.throws( callsNoop(); tracker.verify(); } + +{ + function func() {} + const tracker = new assert.CallTracker(); + const callsfunc = tracker.calls(func); + assert.strictEqual(callsfunc.length, 0); +} + +{ + function func(a, b, c = 2) {} + const tracker = new assert.CallTracker(); + const callsfunc = tracker.calls(func); + assert.strictEqual(callsfunc.length, 2); +} + +{ + function func(a, b, c = 2) {} + delete func.length; + const tracker = new assert.CallTracker(); + const callsfunc = tracker.calls(func); + assert.strictEqual(Object.hasOwn(callsfunc, 'length'), false); +} + +{ + const ArrayIteratorPrototype = Reflect.getPrototypeOf( + Array.prototype.values() + ); + const { next } = ArrayIteratorPrototype; + ArrayIteratorPrototype.next = common.mustNotCall( + '%ArrayIteratorPrototype%.next' + ); + Object.prototype.get = common.mustNotCall('%Object.prototype%.get'); + + const customPropertyValue = Symbol(); + function func(a, b, c = 2) { + return a + b + c; + } + func.customProperty = customPropertyValue; + Object.defineProperty(func, 'length', { get: common.mustNotCall() }); + const tracker = new assert.CallTracker(); + const callsfunc = tracker.calls(func); + assert.strictEqual(Object.hasOwn(callsfunc, 'length'), true); + assert.strictEqual(callsfunc.customProperty, customPropertyValue); + assert.strictEqual(callsfunc(1, 2, 3), 6); + + ArrayIteratorPrototype.next = next; + delete Object.prototype.get; +} diff --git a/test/parallel/test-assert-calltracker-getCalls.js b/test/parallel/test-assert-calltracker-getCalls.js new file mode 100644 index 00000000000..243f72c90f1 --- /dev/null +++ b/test/parallel/test-assert-calltracker-getCalls.js @@ -0,0 +1,73 @@ +'use strict'; +require('../common'); +const assert = require('assert'); +const { describe, it } = require('node:test'); + + +describe('assert.CallTracker.getCalls()', { concurrency: true }, () => { + const tracker = new assert.CallTracker(); + + it('should return empty list when no calls', () => { + const fn = tracker.calls(); + assert.deepStrictEqual(tracker.getCalls(fn), []); + }); + + it('should return calls', () => { + const fn = tracker.calls(() => {}); + const arg1 = {}; + const arg2 = {}; + fn(arg1, arg2); + fn.call(arg2, arg2); + assert.deepStrictEqual(tracker.getCalls(fn), [ + { arguments: [arg1, arg2], thisArg: undefined }, + { arguments: [arg2], thisArg: arg2 }]); + }); + + it('should throw when getting calls of a non-tracked function', () => { + [() => {}, 1, true, null, undefined, {}, []].forEach((fn) => { + assert.throws(() => tracker.getCalls(fn), { code: 'ERR_INVALID_ARG_VALUE' }); + }); + }); + + it('should return a frozen object', () => { + const fn = tracker.calls(); + fn(); + const calls = tracker.getCalls(fn); + assert.throws(() => calls.push(1), /object is not extensible/); + assert.throws(() => Object.assign(calls[0], { foo: 'bar' }), /object is not extensible/); + assert.throws(() => calls[0].arguments.push(1), /object is not extensible/); + }); +}); + +describe('assert.CallTracker.reset()', () => { + const tracker = new assert.CallTracker(); + + it('should reset calls', () => { + const fn = tracker.calls(); + fn(); + fn(); + fn(); + assert.strictEqual(tracker.getCalls(fn).length, 3); + tracker.reset(fn); + assert.deepStrictEqual(tracker.getCalls(fn), []); + }); + + it('should reset all calls', () => { + const fn1 = tracker.calls(); + const fn2 = tracker.calls(); + fn1(); + fn2(); + assert.strictEqual(tracker.getCalls(fn1).length, 1); + assert.strictEqual(tracker.getCalls(fn2).length, 1); + tracker.reset(); + assert.deepStrictEqual(tracker.getCalls(fn1), []); + assert.deepStrictEqual(tracker.getCalls(fn2), []); + }); + + + it('should throw when resetting a non-tracked function', () => { + [() => {}, 1, true, null, {}, []].forEach((fn) => { + assert.throws(() => tracker.reset(fn), { code: 'ERR_INVALID_ARG_VALUE' }); + }); + }); +}); diff --git a/test/parallel/test-assert-calltracker-verify.js b/test/parallel/test-assert-calltracker-verify.js index 75d20bf9c49..118f04f7352 100644 --- a/test/parallel/test-assert-calltracker-verify.js +++ b/test/parallel/test-assert-calltracker-verify.js @@ -6,27 +6,48 @@ const assert = require('assert'); const tracker = new assert.CallTracker(); -const msg = 'Function(s) were not called the expected number of times'; +const generic_msg = 'Functions were not called the expected number of times'; function foo() {} +function bar() {} + const callsfoo = tracker.calls(foo, 1); +const callsbar = tracker.calls(bar, 1); -// Expects an error as callsfoo() was called less than one time. +// Expects an error as callsfoo() and callsbar() were called less than one time. assert.throws( () => tracker.verify(), - { message: msg } + { message: generic_msg } ); callsfoo(); -// Will throw an error if callsfoo() isn't called exactly once. +// Expects an error as callsbar() was called less than one time. +assert.throws( + () => tracker.verify(), + { message: 'Expected the bar function to be executed 1 time(s) but was executed 0 time(s).' } +); +callsbar(); + +// Will throw an error if callsfoo() and callsbar isn't called exactly once. tracker.verify(); +const callsfoobar = tracker.calls(foo, 1); + callsfoo(); -// Expects an error as callsfoo() was called more than once. +// Expects an error as callsfoo() was called more than once and callsfoobar() was called less than one time. +assert.throws( + () => tracker.verify(), + { message: generic_msg } +); + +callsfoobar(); + + +// Expects an error as callsfoo() was called more than once assert.throws( () => tracker.verify(), - { message: msg } + { message: 'Expected the foo function to be executed 1 time(s) but was executed 2 time(s).' } ); diff --git a/test/parallel/test-assert-fail.js b/test/parallel/test-assert-fail.js index e2003f2ce91..37e2087a2fd 100644 --- a/test/parallel/test-assert-fail.js +++ b/test/parallel/test-assert-fail.js @@ -1,6 +1,6 @@ 'use strict'; -require('../common'); +const common = require('../common'); const assert = require('assert'); // No args @@ -38,3 +38,7 @@ assert.throws(() => { name: 'TypeError', message: 'custom message' }); + +Object.prototype.get = common.mustNotCall(); +assert.throws(() => assert.fail(''), { code: 'ERR_ASSERTION' }); +delete Object.prototype.get; diff --git a/test/parallel/test-blob-buffer-too-large.js b/test/parallel/test-blob-buffer-too-large.js new file mode 100644 index 00000000000..2fd8b8754bd --- /dev/null +++ b/test/parallel/test-blob-buffer-too-large.js @@ -0,0 +1,24 @@ +// Flags: --no-warnings +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const { Blob } = require('buffer'); + +if (common.isFreeBSD) + common.skip('Oversized buffer make the FreeBSD CI runner crash'); + +try { + new Blob([new Uint8Array(0xffffffff), [1]]); +} catch (e) { + if ( + e.message === 'Array buffer allocation failed' || + e.message === 'Invalid typed array length: 4294967295' + ) { + common.skip( + 'Insufficient memory on this platform for oversized buffer test.' + ); + } else { + assert.strictEqual(e.code, 'ERR_BUFFER_TOO_LARGE'); + } +} diff --git a/test/parallel/test-blob.js b/test/parallel/test-blob.js index 53b9ddb0cb3..fe66ff08f94 100644 --- a/test/parallel/test-blob.js +++ b/test/parallel/test-blob.js @@ -198,6 +198,8 @@ assert.throws(() => new Blob({}), { const b = new Blob(); assert.strictEqual(inspect(b, { depth: null }), 'Blob { size: 0, type: \'\' }'); + assert.strictEqual(inspect(b, { depth: 1 }), + 'Blob { size: 0, type: \'\' }'); assert.strictEqual(inspect(b, { depth: -1 }), '[Blob]'); } @@ -230,6 +232,30 @@ assert.throws(() => new Blob({}), { }); } +{ + assert.throws(() => Reflect.get(Blob.prototype, 'type', {}), { + code: 'ERR_INVALID_THIS', + }); + assert.throws(() => Reflect.get(Blob.prototype, 'size', {}), { + code: 'ERR_INVALID_THIS', + }); + assert.throws(() => Blob.prototype.slice(Blob.prototype, 0, 1), { + code: 'ERR_INVALID_THIS', + }); + assert.throws(() => Blob.prototype.stream.call(), { + code: 'ERR_INVALID_THIS', + }); +} + +(async () => { + assert.rejects(async () => Blob.prototype.arrayBuffer.call(), { + code: 'ERR_INVALID_THIS', + }); + assert.rejects(async () => Blob.prototype.text.call(), { + code: 'ERR_INVALID_THIS', + }); +})().then(common.mustCall()); + (async () => { const blob = new Blob([ new Uint8Array([0x50, 0x41, 0x53, 0x53]), diff --git a/test/parallel/test-blocklist.js b/test/parallel/test-blocklist.js index 51f19e07bc6..ddd9a4e4957 100644 --- a/test/parallel/test-blocklist.js +++ b/test/parallel/test-blocklist.js @@ -272,3 +272,13 @@ const util = require('util'); const ret = util.inspect(blockList, { depth: null }); assert(ret.includes('rules: []')); } + +{ + // Test for https://github.com/nodejs/node/issues/43360 + const blocklist = new BlockList(); + blocklist.addSubnet('1.1.1.1', 32, 'ipv4'); + + assert(blocklist.check('1.1.1.1')); + assert(!blocklist.check('1.1.1.2')); + assert(!blocklist.check('2.3.4.5')); +} diff --git a/test/parallel/test-bootstrap-modules.js b/test/parallel/test-bootstrap-modules.js index de9414abb2d..a74d27dfaaa 100644 --- a/test/parallel/test-bootstrap-modules.js +++ b/test/parallel/test-bootstrap-modules.js @@ -12,6 +12,7 @@ const expectedModules = new Set([ 'Internal Binding async_wrap', 'Internal Binding block_list', 'Internal Binding buffer', + 'Internal Binding builtins', 'Internal Binding config', 'Internal Binding constants', 'Internal Binding contextify', @@ -21,9 +22,9 @@ const expectedModules = new Set([ 'Internal Binding fs_event_wrap', 'Internal Binding fs', 'Internal Binding heap_utils', + 'Internal Binding mksnapshot', 'Internal Binding messaging', 'Internal Binding module_wrap', - 'Internal Binding native_module', 'Internal Binding options', 'Internal Binding performance', 'Internal Binding pipe_wrap', @@ -77,13 +78,13 @@ const expectedModules = new Set([ 'NativeModule internal/modules/esm/fetch_module', 'NativeModule internal/modules/esm/formats', 'NativeModule internal/modules/esm/get_format', - 'NativeModule internal/modules/esm/get_source', 'NativeModule internal/modules/esm/handle_process_exit', 'NativeModule internal/modules/esm/initialize_import_meta', 'NativeModule internal/modules/esm/load', 'NativeModule internal/modules/esm/loader', 'NativeModule internal/modules/esm/module_job', 'NativeModule internal/modules/esm/module_map', + 'NativeModule internal/modules/esm/package_config', 'NativeModule internal/modules/esm/resolve', 'NativeModule internal/modules/esm/translators', 'NativeModule internal/modules/package_json_reader', @@ -98,6 +99,7 @@ const expectedModules = new Set([ 'NativeModule internal/perf/performance', 'NativeModule internal/perf/timerify', 'NativeModule internal/perf/usertiming', + 'NativeModule internal/perf/resource_timing', 'NativeModule internal/perf/utils', 'NativeModule internal/priority_queue', 'NativeModule internal/process/esm_loader', @@ -135,6 +137,8 @@ const expectedModules = new Set([ 'NativeModule internal/util/debuglog', 'NativeModule internal/util/inspect', 'NativeModule internal/util/iterable_weak_map', + 'NativeModule internal/util/parse_args/utils', + 'NativeModule internal/util/parse_args/parse_args', 'NativeModule internal/util/types', 'NativeModule internal/validators', 'NativeModule internal/vm/module', @@ -154,7 +158,9 @@ const expectedModules = new Set([ 'NativeModule url', 'NativeModule util', 'NativeModule v8', + 'NativeModule internal/v8/startup_snapshot', 'NativeModule vm', + 'NativeModule diagnostics_channel', ]); if (!common.isMainThread) { diff --git a/test/parallel/test-btoa-atob.js b/test/parallel/test-btoa-atob.js index 162406dd9f6..06b7175e937 100644 --- a/test/parallel/test-btoa-atob.js +++ b/test/parallel/test-btoa-atob.js @@ -1,3 +1,4 @@ +// Flags: --expose-internals 'use strict'; require('../common'); @@ -5,6 +6,9 @@ require('../common'); const { strictEqual, throws } = require('assert'); const buffer = require('buffer'); +const { internalBinding } = require('internal/test/binding'); +const { DOMException } = internalBinding('messaging'); + // Exported on the global object strictEqual(globalThis.atob, buffer.atob); strictEqual(globalThis.btoa, buffer.btoa); @@ -12,3 +16,28 @@ strictEqual(globalThis.btoa, buffer.btoa); // Throws type error on no argument passed throws(() => buffer.atob(), /TypeError/); throws(() => buffer.btoa(), /TypeError/); + +strictEqual(atob(' '), ''); +strictEqual(atob(' Y\fW\tJ\njZ A=\r= '), 'abcd'); + +strictEqual(atob(null), '\x9Eée'); +strictEqual(atob(NaN), '5£'); +strictEqual(atob(Infinity), '"wâ\x9E+r'); +strictEqual(atob(true), '¶»\x9E'); +strictEqual(atob(1234), '×mø'); +strictEqual(atob([]), ''); +strictEqual(atob({ toString: () => '' }), ''); +strictEqual(atob({ [Symbol.toPrimitive]: () => '' }), ''); + +throws(() => atob(Symbol()), /TypeError/); +[ + undefined, false, () => {}, {}, [1], + 0, 1, 0n, 1n, -Infinity, + 'a', 'a\n\n\n', '\ra\r\r', ' a ', '\t\t\ta', 'a\f\f\f', '\ta\r \n\f', +].forEach((value) => + // See #2 - https://html.spec.whatwg.org/multipage/webappapis.html#dom-atob + throws(() => atob(value), { + constructor: DOMException, + name: 'InvalidCharacterError', + code: 5, + })); diff --git a/test/parallel/test-buffer-alloc.js b/test/parallel/test-buffer-alloc.js index 1368136abe8..d2085d11802 100644 --- a/test/parallel/test-buffer-alloc.js +++ b/test/parallel/test-buffer-alloc.js @@ -41,7 +41,25 @@ assert.strictEqual(d.length, 0); assert.strictEqual(b.offset, 0); } +// Test creating a Buffer from a Uint8Array +{ + const ui8 = new Uint8Array(4).fill(42); + const e = Buffer.from(ui8); + for (const [index, value] of e.entries()) { + assert.strictEqual(value, ui8[index]); + } +} +// Test creating a Buffer from a Uint8Array (old constructor) +{ + const ui8 = new Uint8Array(4).fill(42); + const e = Buffer(ui8); + for (const [key, value] of e.entries()) { + assert.strictEqual(value, ui8[key]); + } +} + // Test creating a Buffer from a Uint32Array +// Note: it is implicitly interpreted as Array of integers modulo 256 { const ui32 = new Uint32Array(4).fill(42); const e = Buffer.from(ui32); @@ -50,11 +68,12 @@ assert.strictEqual(d.length, 0); } } // Test creating a Buffer from a Uint32Array (old constructor) +// Note: it is implicitly interpreted as Array of integers modulo 256 { const ui32 = new Uint32Array(4).fill(42); const e = Buffer(ui32); for (const [key, value] of e.entries()) { - assert.deepStrictEqual(value, ui32[key]); + assert.strictEqual(value, ui32[key]); } } diff --git a/test/parallel/test-child-process-exec-timeout-expire.js b/test/parallel/test-child-process-exec-timeout-expire.js new file mode 100644 index 00000000000..08e54544836 --- /dev/null +++ b/test/parallel/test-child-process-exec-timeout-expire.js @@ -0,0 +1,50 @@ +'use strict'; + +// Test exec() with a timeout that expires. + +const common = require('../common'); +const assert = require('assert'); +const cp = require('child_process'); + +const { + cleanupStaleProcess, + logAfterTime, + kExpiringChildRunTime, + kExpiringParentTimer +} = require('../common/child_process'); + +if (process.argv[2] === 'child') { + logAfterTime(kExpiringChildRunTime); + return; +} + +const cmd = `"${process.execPath}" "${__filename}" child`; + +cp.exec(cmd, { + timeout: kExpiringParentTimer, +}, common.mustCall((err, stdout, stderr) => { + console.log('[stdout]', stdout.trim()); + console.log('[stderr]', stderr.trim()); + + let sigterm = 'SIGTERM'; + assert.strictEqual(err.killed, true); + // TODO OpenBSD returns a null signal and 143 for code + if (common.isOpenBSD) { + assert.strictEqual(err.code, 143); + sigterm = null; + } else { + assert.strictEqual(err.code, null); + } + // At least starting with Darwin Kernel Version 16.4.0, sending a SIGTERM to a + // process that is still starting up kills it with SIGKILL instead of SIGTERM. + // See: https://github.com/libuv/libuv/issues/1226 + if (common.isOSX) + assert.ok(err.signal === 'SIGTERM' || err.signal === 'SIGKILL'); + else + assert.strictEqual(err.signal, sigterm); + assert.strictEqual(err.cmd, cmd); + assert.strictEqual(stdout.trim(), ''); + assert.strictEqual(stderr.trim(), ''); +})); + +cleanupStaleProcess(__filename); diff --git a/test/parallel/test-child-process-exec-timeout-kill.js b/test/parallel/test-child-process-exec-timeout-kill.js new file mode 100644 index 00000000000..0be04e8607f --- /dev/null +++ b/test/parallel/test-child-process-exec-timeout-kill.js @@ -0,0 +1,39 @@ +'use strict'; + +// Test exec() with both a timeout and a killSignal. + +const common = require('../common'); +const assert = require('assert'); +const cp = require('child_process'); + +const { + cleanupStaleProcess, + logInTimeout, + kExpiringChildRunTime, + kExpiringParentTimer, +} = require('../common/child_process'); + +if (process.argv[2] === 'child') { + logInTimeout(kExpiringChildRunTime); + return; +} + +const cmd = `"${process.execPath}" "${__filename}" child`; + +// Test with a different kill signal. +cp.exec(cmd, { + timeout: kExpiringParentTimer, + killSignal: 'SIGKILL' +}, common.mustCall((err, stdout, stderr) => { + console.log('[stdout]', stdout.trim()); + console.log('[stderr]', stderr.trim()); + + assert.strictEqual(err.killed, true); + assert.strictEqual(err.code, null); + assert.strictEqual(err.signal, 'SIGKILL'); + assert.strictEqual(err.cmd, cmd); + assert.strictEqual(stdout.trim(), ''); + assert.strictEqual(stderr.trim(), ''); +})); + +cleanupStaleProcess(__filename); diff --git a/test/parallel/test-child-process-exec-timeout-not-expired.js b/test/parallel/test-child-process-exec-timeout-not-expired.js new file mode 100644 index 00000000000..fb0af5fa8f5 --- /dev/null +++ b/test/parallel/test-child-process-exec-timeout-not-expired.js @@ -0,0 +1,34 @@ +'use strict'; + +// Test exec() when a timeout is set, but not expired. + +const common = require('../common'); +const assert = require('assert'); +const cp = require('child_process'); + +const { + cleanupStaleProcess, + logAfterTime +} = require('../common/child_process'); + +const kTimeoutNotSupposedToExpire = 2 ** 30; +const childRunTime = common.platformTimeout(100); + +// The time spent in the child should be smaller than the timeout below. +assert(childRunTime < kTimeoutNotSupposedToExpire); + +if (process.argv[2] === 'child') { + logAfterTime(childRunTime); + return; +} + +const cmd = `"${process.execPath}" "${__filename}" child`; + +cp.exec(cmd, { + timeout: kTimeoutNotSupposedToExpire +}, common.mustSucceed((stdout, stderr) => { + assert.strictEqual(stdout.trim(), 'child stdout'); + assert.strictEqual(stderr.trim(), 'child stderr'); +})); + +cleanupStaleProcess(__filename); diff --git a/test/parallel/test-child-process-exec-timeout.js b/test/parallel/test-child-process-exec-timeout.js deleted file mode 100644 index 64648d62bb3..00000000000 --- a/test/parallel/test-child-process-exec-timeout.js +++ /dev/null @@ -1,73 +0,0 @@ -'use strict'; -const common = require('../common'); -const assert = require('assert'); -const cp = require('child_process'); - -if (process.argv[2] === 'child') { - setTimeout(() => { - // The following console statements are part of the test. - console.log('child stdout'); - console.error('child stderr'); - }, common.platformTimeout(1000)); - return; -} - -const cmd = `"${process.execPath}" "${__filename}" child`; - -// Test the case where a timeout is set, and it expires. -cp.exec(cmd, { timeout: 1 }, common.mustCall((err, stdout, stderr) => { - let sigterm = 'SIGTERM'; - assert.strictEqual(err.killed, true); - // TODO OpenBSD returns a null signal and 143 for code - if (common.isOpenBSD) { - assert.strictEqual(err.code, 143); - sigterm = null; - } else { - assert.strictEqual(err.code, null); - } - // At least starting with Darwin Kernel Version 16.4.0, sending a SIGTERM to a - // process that is still starting up kills it with SIGKILL instead of SIGTERM. - // See: https://github.com/libuv/libuv/issues/1226 - if (common.isOSX) - assert.ok(err.signal === 'SIGTERM' || err.signal === 'SIGKILL'); - else - assert.strictEqual(err.signal, sigterm); - assert.strictEqual(err.cmd, cmd); - assert.strictEqual(stdout.trim(), ''); - assert.strictEqual(stderr.trim(), ''); -})); - -// Test with a different kill signal. -cp.exec(cmd, { - timeout: 1, - killSignal: 'SIGKILL' -}, common.mustCall((err, stdout, stderr) => { - assert.strictEqual(err.killed, true); - assert.strictEqual(err.code, null); - assert.strictEqual(err.signal, 'SIGKILL'); - assert.strictEqual(err.cmd, cmd); - assert.strictEqual(stdout.trim(), ''); - assert.strictEqual(stderr.trim(), ''); -})); - -// Test the case where a timeout is set, but not expired. -cp.exec(cmd, { timeout: 2 ** 30 }, common.mustSucceed((stdout, stderr) => { - assert.strictEqual(stdout.trim(), 'child stdout'); - assert.strictEqual(stderr.trim(), 'child stderr'); -})); - -// Workaround for Windows Server 2008R2 -// When CMD is used to launch a process and CMD is killed too quickly, the -// process can stay behind running in suspended state, never completing. -if (common.isWindows) { - process.once('beforeExit', () => { - const basename = __filename.replace(/.*[/\\]/g, ''); - cp.execFileSync(`${process.env.SystemRoot}\\System32\\wbem\\WMIC.exe`, [ - 'process', - 'where', - `commandline like '%${basename}%child'`, - 'delete', - '/nointeractive', - ]); - }); -} diff --git a/test/parallel/test-child-process-set-blocking.js b/test/parallel/test-child-process-set-blocking.js index e2620cd84c8..6dcfa931417 100644 --- a/test/parallel/test-child-process-set-blocking.js +++ b/test/parallel/test-child-process-set-blocking.js @@ -25,7 +25,7 @@ const assert = require('assert'); const ch = require('child_process'); const SIZE = 100000; -const python = process.env.PYTHON || 'python'; +const python = process.env.PYTHON || (common.isWindows ? 'python' : 'python3'); const cp = ch.spawn(python, ['-c', `print(${SIZE} * "C")`], { stdio: 'inherit' diff --git a/test/parallel/test-child-process-spawnsync-timeout.js b/test/parallel/test-child-process-spawnsync-timeout.js index aeb2be86608..426ac05a434 100644 --- a/test/parallel/test-child-process-spawnsync-timeout.js +++ b/test/parallel/test-child-process-spawnsync-timeout.js @@ -28,7 +28,14 @@ const { debuglog, getSystemErrorName } = require('util'); const debug = debuglog('test'); const TIMER = 200; -const SLEEP = common.platformTimeout(5000); +let SLEEP = common.platformTimeout(5000); + +if (common.isWindows) { + // Some of the windows machines in the CI need more time to launch + // and receive output from child processes. + // https://github.com/nodejs/build/issues/3014 + SLEEP = common.platformTimeout(15000); +} switch (process.argv[2]) { case 'child': diff --git a/test/parallel/test-cluster-accept-fail.js b/test/parallel/test-cluster-accept-fail.js new file mode 100644 index 00000000000..29d57783a9d --- /dev/null +++ b/test/parallel/test-cluster-accept-fail.js @@ -0,0 +1,30 @@ +// Flags: --expose-internals +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); +const cluster = require('cluster'); +const rr = require('internal/cluster/round_robin_handle'); + +if (cluster.isPrimary) { + const distribute = rr.prototype.distribute; + rr.prototype.distribute = function(err, handle) { + assert.strictEqual(err, 0); + handle.close(); + distribute.call(this, -1, undefined); + }; + cluster.schedulingPolicy = cluster.SCHED_RR; + cluster.fork(); +} else { + const server = net.createServer(common.mustNotCall()); + server.listen(0, common.mustCall(() => { + + const socket = net.connect(server.address().port); + + socket.on('close', common.mustCall(() => { + server.close(common.mustCall(() => { + process.disconnect(); + })); + })); + })); +} diff --git a/test/parallel/test-cluster-concurrent-disconnect.js b/test/parallel/test-cluster-concurrent-disconnect.js index d97db39a5bb..e3771a0a4fd 100644 --- a/test/parallel/test-cluster-concurrent-disconnect.js +++ b/test/parallel/test-cluster-concurrent-disconnect.js @@ -29,7 +29,7 @@ if (cluster.isPrimary) { if (common.isOSX) { assert(['EPIPE', 'ENOTCONN'].includes(err.code), err); } else { - assert.strictEqual(err.code, 'EPIPE'); + assert(['EPIPE', 'ECONNRESET'].includes(err.code), err); } }); diff --git a/test/parallel/test-cluster-listen-pipe-readable-writable.js b/test/parallel/test-cluster-listen-pipe-readable-writable.js new file mode 100644 index 00000000000..d4b758a374f --- /dev/null +++ b/test/parallel/test-cluster-listen-pipe-readable-writable.js @@ -0,0 +1,29 @@ +'use strict'; +const common = require('../common'); + +if (common.isWindows) { + common.skip('skip on Windows'); + return; +} + +const assert = require('assert'); +const cluster = require('cluster'); +const net = require('net'); +const fs = require('fs'); + +if (cluster.isPrimary) { + cluster.fork(); +} else { + const tmpdir = require('../common/tmpdir'); + tmpdir.refresh(); + const server = net.createServer().listen({ + path: common.PIPE, + readableAll: true, + writableAll: true, + }, common.mustCall(() => { + const stat = fs.statSync(common.PIPE); + assert.strictEqual(stat.mode & 0o777, 0o777); + server.close(); + process.disconnect(); + })); +} diff --git a/test/parallel/test-cluster-net-server-drop-connection.js b/test/parallel/test-cluster-net-server-drop-connection.js new file mode 100644 index 00000000000..5df62a9a630 --- /dev/null +++ b/test/parallel/test-cluster-net-server-drop-connection.js @@ -0,0 +1,64 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); +const cluster = require('cluster'); +const tmpdir = require('../common/tmpdir'); + +// The core has bug in handling pipe handle by ipc when platform is win32, +// it can be triggered on win32. I will fix it in another pr. +if (common.isWindows) + common.skip('no setSimultaneousAccepts on pipe handle'); + +let connectionCount = 0; +let listenCount = 0; +let worker1; +let worker2; + +function request(path) { + for (let i = 0; i < 10; i++) { + net.connect(path); + } +} + +function handleMessage(message) { + assert.match(message.action, /listen|connection/); + if (message.action === 'listen') { + if (++listenCount === 2) { + request(common.PIPE); + } + } else if (message.action === 'connection') { + if (++connectionCount === 10) { + worker1.send({ action: 'disconnect' }); + worker2.send({ action: 'disconnect' }); + } + } +} + +if (cluster.isPrimary) { + cluster.schedulingPolicy = cluster.SCHED_RR; + tmpdir.refresh(); + worker1 = cluster.fork({ maxConnections: 1, pipePath: common.PIPE }); + worker2 = cluster.fork({ maxConnections: 9, pipePath: common.PIPE }); + worker1.on('message', common.mustCall((message) => { + handleMessage(message); + }, 2)); + worker2.on('message', common.mustCall((message) => { + handleMessage(message); + }, 10)); +} else { + const server = net.createServer(common.mustCall((socket) => { + process.send({ action: 'connection' }); + }, +process.env.maxConnections)); + + server.listen(process.env.pipePath, common.mustCall(() => { + process.send({ action: 'listen' }); + })); + + server.maxConnections = +process.env.maxConnections; + + process.on('message', common.mustCall((message) => { + assert.strictEqual(message.action, 'disconnect'); + process.disconnect(); + })); +} diff --git a/test/parallel/test-cluster-worker-handle-close.js b/test/parallel/test-cluster-worker-handle-close.js new file mode 100644 index 00000000000..47a80ef1cd1 --- /dev/null +++ b/test/parallel/test-cluster-worker-handle-close.js @@ -0,0 +1,27 @@ +'use strict'; +const common = require('../common'); +const cluster = require('cluster'); +const net = require('net'); + +if (cluster.isPrimary) { + cluster.schedulingPolicy = cluster.SCHED_RR; + cluster.fork(); +} else { + const server = net.createServer(common.mustNotCall()); + server.listen(0, common.mustCall(() => { + net.connect(server.address().port); + })); + process.prependListener('internalMessage', common.mustCallAtLeast((message, handle) => { + if (message.act !== 'newconn') { + return; + } + // Make the worker drops the connection, see `rr` and `onconnection` in child.js + server.close(); + const close = handle.close; + handle.close = common.mustCall(() => { + close.call(handle, common.mustCall(() => { + process.exit(); + })); + }); + })); +} diff --git a/test/parallel/test-code-cache.js b/test/parallel/test-code-cache.js index 1b151e269dc..661206896d9 100644 --- a/test/parallel/test-code-cache.js +++ b/test/parallel/test-code-cache.js @@ -13,10 +13,10 @@ const { const { getCacheUsage, moduleCategories: { canBeRequired, cannotBeRequired } -} = internalBinding('native_module'); +} = internalBinding('builtins'); for (const key of canBeRequired) { - require(key); + require(`node:${key}`); } // The computation has to be delayed until we have done loading modules diff --git a/test/parallel/test-common-must-not-call.js b/test/parallel/test-common-must-not-call.js index dcea7059dac..b3c94a2390f 100644 --- a/test/parallel/test-common-must-not-call.js +++ b/test/parallel/test-common-must-not-call.js @@ -39,3 +39,18 @@ try { } catch (e) { validate2(e); } + +assert.throws( + () => new Proxy({ prop: Symbol() }, { get: common.mustNotCall() }).prop, + { code: 'ERR_ASSERTION' } +); + +{ + const { inspect } = util; + delete util.inspect; + assert.throws( + () => common.mustNotCall()(null), + { code: 'ERR_ASSERTION' } + ); + util.inspect = inspect; +} diff --git a/test/parallel/test-common-must-not-mutate-object-deep.mjs b/test/parallel/test-common-must-not-mutate-object-deep.mjs new file mode 100644 index 00000000000..76a7ad67641 --- /dev/null +++ b/test/parallel/test-common-must-not-mutate-object-deep.mjs @@ -0,0 +1,225 @@ +import { mustNotMutateObjectDeep } from '../common/index.mjs'; +import assert from 'node:assert'; +import { promisify } from 'node:util'; + +// Test common.mustNotMutateObjectDeep() + +const original = { + foo: { bar: 'baz' }, + qux: null, + quux: [ + 'quuz', + { corge: 'grault' }, + ], +}; + +// Make a copy to make sure original doesn't get altered by the function itself. +const backup = JSON.parse(JSON.stringify(original)); + +// Wrapper for convenience: +const obj = () => mustNotMutateObjectDeep(original); + +function testOriginal(root) { + assert.deepStrictEqual(root, backup); + return root.foo.bar === 'baz' && root.quux[1].corge.length === 6; +} + +function definePropertyOnRoot(root) { + Object.defineProperty(root, 'xyzzy', {}); +} + +function definePropertyOnFoo(root) { + Object.defineProperty(root.foo, 'xyzzy', {}); +} + +function deletePropertyOnRoot(root) { + delete root.foo; +} + +function deletePropertyOnFoo(root) { + delete root.foo.bar; +} + +function preventExtensionsOnRoot(root) { + Object.preventExtensions(root); +} + +function preventExtensionsOnFoo(root) { + Object.preventExtensions(root.foo); +} + +function preventExtensionsOnRootViaSeal(root) { + Object.seal(root); +} + +function preventExtensionsOnFooViaSeal(root) { + Object.seal(root.foo); +} + +function preventExtensionsOnRootViaFreeze(root) { + Object.freeze(root); +} + +function preventExtensionsOnFooViaFreeze(root) { + Object.freeze(root.foo); +} + +function setOnRoot(root) { + root.xyzzy = 'gwak'; +} + +function setOnFoo(root) { + root.foo.xyzzy = 'gwak'; +} + +function setQux(root) { + root.qux = 'gwak'; +} + +function setQuux(root) { + root.quux.push('gwak'); +} + +function setQuuxItem(root) { + root.quux[0] = 'gwak'; +} + +function setQuuxProperty(root) { + root.quux[1].corge = 'gwak'; +} + +function setPrototypeOfRoot(root) { + Object.setPrototypeOf(root, Array); +} + +function setPrototypeOfFoo(root) { + Object.setPrototypeOf(root.foo, Array); +} + +function setPrototypeOfQuux(root) { + Object.setPrototypeOf(root.quux, Array); +} + + +{ + assert.ok(testOriginal(obj())); + + assert.throws( + () => definePropertyOnRoot(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => definePropertyOnFoo(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => deletePropertyOnRoot(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => deletePropertyOnFoo(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => preventExtensionsOnRoot(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => preventExtensionsOnFoo(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => preventExtensionsOnRootViaSeal(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => preventExtensionsOnFooViaSeal(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => preventExtensionsOnRootViaFreeze(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => preventExtensionsOnFooViaFreeze(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => setOnRoot(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => setOnFoo(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => setQux(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => setQuux(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => setQuux(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => setQuuxItem(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => setQuuxProperty(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => setPrototypeOfRoot(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => setPrototypeOfFoo(obj()), + { code: 'ERR_ASSERTION' } + ); + assert.throws( + () => setPrototypeOfQuux(obj()), + { code: 'ERR_ASSERTION' } + ); + + // Test that no mutation happened: + assert.ok(testOriginal(obj())); +} + +// Test various supported types, directly and nested: +[ + undefined, null, false, true, 42, 42n, Symbol('42'), NaN, Infinity, {}, [], + () => {}, async () => {}, Promise.resolve(), Math, Object.create(null), +].forEach((target) => { + assert.deepStrictEqual(mustNotMutateObjectDeep(target), target); + assert.deepStrictEqual(mustNotMutateObjectDeep({ target }), { target }); + assert.deepStrictEqual(mustNotMutateObjectDeep([ target ]), [ target ]); +}); + +// Test that passed functions keep working correctly: +{ + const fn = () => 'blep'; + fn.foo = {}; + const fnImmutableView = mustNotMutateObjectDeep(fn); + assert.deepStrictEqual(fnImmutableView, fn); + + // Test that the function still works: + assert.strictEqual(fn(), 'blep'); + assert.strictEqual(fnImmutableView(), 'blep'); + + // Test that the original function is not deeply frozen: + fn.foo.bar = 'baz'; + assert.strictEqual(fn.foo.bar, 'baz'); + assert.strictEqual(fnImmutableView.foo.bar, 'baz'); + + // Test the original function is not frozen: + fn.qux = 'quux'; + assert.strictEqual(fn.qux, 'quux'); + assert.strictEqual(fnImmutableView.qux, 'quux'); + + // Redefining util.promisify.custom also works: + promisify(mustNotMutateObjectDeep(promisify(fn))); +} diff --git a/test/parallel/test-console-issue-43095.js b/test/parallel/test-console-issue-43095.js new file mode 100644 index 00000000000..647f4af2df4 --- /dev/null +++ b/test/parallel/test-console-issue-43095.js @@ -0,0 +1,12 @@ +'use strict'; + +require('../common'); +const { inspect } = require('node:util'); + +const r = Proxy.revocable({}, {}); +r.revoke(); + +console.dir(r); +console.dir(r.proxy); +console.log(r.proxy); +console.log(inspect(r.proxy, { showProxy: true })); diff --git a/test/parallel/test-console-log-stdio-broken-dest.js b/test/parallel/test-console-log-stdio-broken-dest.js index d29e8ee5173..bdd1b794274 100644 --- a/test/parallel/test-console-log-stdio-broken-dest.js +++ b/test/parallel/test-console-log-stdio-broken-dest.js @@ -15,7 +15,7 @@ const stream = new Writable({ }); const myConsole = new Console(stream, stream); -process.on('warning', common.mustNotCall); +process.on('warning', common.mustNotCall()); stream.cork(); for (let i = 0; i < EventEmitter.defaultMaxListeners + 1; i++) { diff --git a/test/parallel/test-crypto-authenticated.js b/test/parallel/test-crypto-authenticated.js index 3749895769f..162b451c5b4 100644 --- a/test/parallel/test-crypto-authenticated.js +++ b/test/parallel/test-crypto-authenticated.js @@ -96,10 +96,9 @@ for (const test of TEST_CASES) { const isCCM = /^aes-(128|192|256)-ccm$/.test(test.algo); const isOCB = /^aes-(128|192|256)-ocb$/.test(test.algo); - const isChacha20Poly1305 = test.algo === 'chacha20-poly1305'; let options; - if (isCCM || isOCB || isChacha20Poly1305) + if (isCCM || isOCB) options = { authTagLength: test.tag.length / 2 }; const inputEncoding = test.plainIsHex ? 'hex' : 'ascii'; @@ -659,8 +658,7 @@ for (const test of TEST_CASES) { assert.throws(() => crypto.createCipheriv( valid.algo, Buffer.from(valid.key, 'hex'), - Buffer.from(H(prefix) + valid.iv, 'hex'), - { authTagLength: valid.tag.length / 2 } + Buffer.from(H(prefix) + valid.iv, 'hex') ), errMessages.length, `iv length ${ivLength} was not rejected`); function H(length) { return '00'.repeat(length); } @@ -701,3 +699,90 @@ for (const test of TEST_CASES) { }); } } + +// ChaCha20-Poly1305 should respect the authTagLength option and should not +// require the authentication tag before calls to update() during decryption. +{ + const key = Buffer.alloc(32); + const iv = Buffer.alloc(12); + + for (let authTagLength = 1; authTagLength <= 16; authTagLength++) { + const cipher = + crypto.createCipheriv('chacha20-poly1305', key, iv, { authTagLength }); + const ciphertext = Buffer.concat([cipher.update('foo'), cipher.final()]); + const authTag = cipher.getAuthTag(); + assert.strictEqual(authTag.length, authTagLength); + + // The decipher operation should reject all authentication tags other than + // that of the expected length. + for (let other = 1; other <= 16; other++) { + const decipher = crypto.createDecipheriv('chacha20-poly1305', key, iv, { + authTagLength: other + }); + // ChaCha20 is a stream cipher so we do not need to call final() to obtain + // the full plaintext. + const plaintext = decipher.update(ciphertext); + assert.strictEqual(plaintext.toString(), 'foo'); + if (other === authTagLength) { + // The authentication tag length is as expected and the tag itself is + // correct, so this should work. + decipher.setAuthTag(authTag); + decipher.final(); + } else { + // The authentication tag that we are going to pass to setAuthTag is + // either too short or too long. If other < authTagLength, the + // authentication tag is still correct, but it should still be rejected + // because its security assurance is lower than expected. + assert.throws(() => { + decipher.setAuthTag(authTag); + }, { + code: 'ERR_CRYPTO_INVALID_AUTH_TAG', + message: `Invalid authentication tag length: ${authTagLength}` + }); + } + } + } +} + +// ChaCha20-Poly1305 should default to an authTagLength of 16. When encrypting, +// this matches the behavior of GCM ciphers. When decrypting, however, it is +// stricter than GCM in that it only allows authentication tags that are exactly +// 16 bytes long, whereas, when no authTagLength was specified, GCM would accept +// shorter tags as long as their length was valid according to NIST SP 800-38D. +// For ChaCha20-Poly1305, we intentionally deviate from that because there are +// no recommended or approved authentication tag lengths below 16 bytes. +{ + const rfcTestCases = TEST_CASES.filter(({ algo, tampered }) => { + return algo === 'chacha20-poly1305' && tampered === false; + }); + assert.strictEqual(rfcTestCases.length, 1); + + const [testCase] = rfcTestCases; + const key = Buffer.from(testCase.key, 'hex'); + const iv = Buffer.from(testCase.iv, 'hex'); + const aad = Buffer.from(testCase.aad, 'hex'); + + for (const opt of [ + undefined, + { authTagLength: undefined }, + { authTagLength: 16 }, + ]) { + const cipher = crypto.createCipheriv('chacha20-poly1305', key, iv, opt); + const ciphertext = Buffer.concat([ + cipher.setAAD(aad).update(testCase.plain, 'hex'), + cipher.final(), + ]); + const authTag = cipher.getAuthTag(); + + assert.strictEqual(ciphertext.toString('hex'), testCase.ct); + assert.strictEqual(authTag.toString('hex'), testCase.tag); + + const decipher = crypto.createDecipheriv('chacha20-poly1305', key, iv, opt); + const plaintext = Buffer.concat([ + decipher.setAAD(aad).update(ciphertext), + decipher.setAuthTag(authTag).final(), + ]); + + assert.strictEqual(plaintext.toString('hex'), testCase.plain); + } +} diff --git a/test/parallel/test-crypto-fips.js b/test/parallel/test-crypto-fips.js index ba8a1ba653e..cc3e4eed79d 100644 --- a/test/parallel/test-crypto-fips.js +++ b/test/parallel/test-crypto-fips.js @@ -83,7 +83,7 @@ testHelper( [], FIPS_DISABLED, 'require("crypto").getFips()', - { ...process.env, 'OPENSSL_CONF': '' }); + { ...process.env, 'OPENSSL_CONF': ' ' }); // This should succeed for both FIPS and non-FIPS builds in combination with // OpenSSL 1.1.1 or OpenSSL 3.0 diff --git a/test/parallel/test-crypto-hkdf.js b/test/parallel/test-crypto-hkdf.js index 16744201a93..ff3abdf291e 100644 --- a/test/parallel/test-crypto-hkdf.js +++ b/test/parallel/test-crypto-hkdf.js @@ -15,6 +15,11 @@ const { } = require('crypto'); { + assert.throws(() => hkdf(), { + code: 'ERR_INVALID_ARG_TYPE', + message: /The "digest" argument must be of type string/ + }); + [1, {}, [], false, Infinity].forEach((i) => { assert.throws(() => hkdf(i, 'a'), { code: 'ERR_INVALID_ARG_TYPE', @@ -115,6 +120,8 @@ const { const algorithms = [ ['sha256', 'secret', 'salt', 'info', 10], + ['sha256', '', '', '', 10], + ['sha256', '', 'salt', '', 10], ['sha512', 'secret', 'salt', '', 15], ]; if (!common.hasOpenSSL3) diff --git a/test/parallel/test-crypto-hmac.js b/test/parallel/test-crypto-hmac.js index de0a59423d4..0edea0dfb0f 100644 --- a/test/parallel/test-crypto-hmac.js +++ b/test/parallel/test-crypto-hmac.js @@ -450,3 +450,12 @@ assert.strictEqual( () => crypto.createHmac('sha7', 'key'), /Invalid digest/); } + +{ + const buf = Buffer.alloc(0); + const keyObject = crypto.createSecretKey(Buffer.alloc(0)); + assert.deepStrictEqual( + crypto.createHmac('sha256', buf).update('foo').digest(), + crypto.createHmac('sha256', keyObject).update('foo').digest(), + ); +} diff --git a/test/parallel/test-crypto-key-objects.js b/test/parallel/test-crypto-key-objects.js index 40a982ea7b6..93e7cca3fbb 100644 --- a/test/parallel/test-crypto-key-objects.js +++ b/test/parallel/test-crypto-key-objects.js @@ -5,7 +5,6 @@ if (!common.hasCrypto) common.skip('missing crypto'); const assert = require('assert'); -const { types: { isKeyObject } } = require('util'); const { createCipheriv, createDecipheriv, @@ -23,7 +22,6 @@ const { getCurves, generateKeySync, generateKeyPairSync, - webcrypto, } = require('crypto'); const fixtures = require('../common/fixtures'); @@ -35,18 +33,6 @@ const publicDsa = fixtures.readKey('dsa_public_1025.pem', 'ascii'); const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem', 'ascii'); -{ - // Attempting to create an empty key should throw. - assert.throws(() => { - createSecretKey(Buffer.alloc(0)); - }, { - name: 'RangeError', - code: 'ERR_OUT_OF_RANGE', - message: 'The value of "key.byteLength" is out of range. ' + - 'It must be > 0. Received 0' - }); -} - { // Attempting to create a key of a wrong type should throw const TYPE = 'wrong_type'; @@ -825,27 +811,6 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem', }); } -{ - const buffer = Buffer.from('Hello World'); - const keyObject = createSecretKey(buffer); - const keyPair = generateKeyPairSync('ec', { namedCurve: 'P-256' }); - assert(isKeyObject(keyPair.publicKey)); - assert(isKeyObject(keyPair.privateKey)); - assert(isKeyObject(keyObject)); - - assert(!isKeyObject(buffer)); - - webcrypto.subtle.importKey( - 'node.keyObject', - keyPair.publicKey, - { name: 'ECDH', namedCurve: 'P-256' }, - false, - [], - ).then((cryptoKey) => { - assert(!isKeyObject(cryptoKey)); - }); -} - { const first = Buffer.from('Hello'); const second = Buffer.from('World'); @@ -893,3 +858,25 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem', assert(!first.privateKey.equals(second.privateKey)); assert(!first.privateKey.equals(second.publicKey)); } + +{ + const first = createSecretKey(Buffer.alloc(0)); + const second = createSecretKey(new ArrayBuffer(0)); + const third = createSecretKey(Buffer.alloc(1)); + assert(first.equals(first)); + assert(first.equals(second)); + assert(!first.equals(third)); + assert(!third.equals(first)); +} + +{ + // This should not cause a crash: https://github.com/nodejs/node/issues/44471 + for (const key of ['', 'foo', null, undefined, true, Boolean]) { + assert.throws(() => { + createPublicKey({ key, format: 'jwk' }); + }, { code: 'ERR_INVALID_ARG_TYPE', message: /The "key\.key" property must be of type object/ }); + assert.throws(() => { + createPrivateKey({ key, format: 'jwk' }); + }, { code: 'ERR_INVALID_ARG_TYPE', message: /The "key\.key" property must be of type object/ }); + } +} diff --git a/test/parallel/test-crypto-keygen.js b/test/parallel/test-crypto-keygen.js index 0b18360a17d..925487376ba 100644 --- a/test/parallel/test-crypto-keygen.js +++ b/test/parallel/test-crypto-keygen.js @@ -1131,8 +1131,6 @@ const sec1EncExp = (cipher) => getRegExpForPEM('EC PRIVATE KEY', cipher); }, common.mustNotCall()), { name: 'TypeError', code: 'ERR_INVALID_ARG_VALUE', - message: "The property 'options.modulusLength' is invalid. " + - `Received ${inspect(modulusLength)}` }); } @@ -1542,6 +1540,24 @@ const sec1EncExp = (cipher) => getRegExpForPEM('EC PRIVATE KEY', cipher); } ); } + + assert.throws(() => generateKeyPair('rsa-pss', { + modulusLength: 512, + hashAlgorithm: 'sha2', + }, common.mustNotCall()), { + name: 'TypeError', + code: 'ERR_CRYPTO_INVALID_DIGEST', + message: 'Invalid digest: sha2' + }); + + assert.throws(() => generateKeyPair('rsa-pss', { + modulusLength: 512, + mgf1HashAlgorithm: 'sha2', + }, common.mustNotCall()), { + name: 'TypeError', + code: 'ERR_CRYPTO_INVALID_DIGEST', + message: 'Invalid MGF1 digest: sha2' + }); } // Passing an empty passphrase string should not cause OpenSSL's default @@ -1603,22 +1619,6 @@ generateKeyPair('rsa', { assert.strictEqual(typeof privateKey, 'string'); })); -{ - // Proprietary Web Cryptography API ECDH/ECDSA namedCurve parameters - // should not be recognized in this API. - // See https://github.com/nodejs/node/issues/37055 - const curves = ['NODE-ED25519', 'NODE-ED448', 'NODE-X25519', 'NODE-X448']; - for (const namedCurve of curves) { - assert.throws( - () => generateKeyPair('ec', { namedCurve }, common.mustNotCall()), - { - name: 'TypeError', - message: 'Invalid EC curve name' - } - ); - } -} - { // This test creates EC key pairs on curves without associated OIDs. // Specifying a key encoding should not crash. diff --git a/test/parallel/test-crypto-pbkdf2.js b/test/parallel/test-crypto-pbkdf2.js index c9ab6a9c484..08af1721258 100644 --- a/test/parallel/test-crypto-pbkdf2.js +++ b/test/parallel/test-crypto-pbkdf2.js @@ -63,14 +63,12 @@ assert.throws( } ); -for (const iterations of [-1, 0]) { +for (const iterations of [-1, 0, 2147483648]) { assert.throws( () => crypto.pbkdf2Sync('password', 'salt', iterations, 20, 'sha1'), { code: 'ERR_OUT_OF_RANGE', name: 'RangeError', - message: 'The value of "iterations" is out of range. ' + - `It must be >= 1 && < 4294967296. Received ${iterations}` } ); } @@ -100,7 +98,7 @@ for (const iterations of [-1, 0]) { }); }); -[-1, 4294967297].forEach((input) => { +[-1, 2147483648, 4294967296].forEach((input) => { assert.throws( () => { crypto.pbkdf2('password', 'salt', 1, input, 'sha256', @@ -108,8 +106,6 @@ for (const iterations of [-1, 0]) { }, { code: 'ERR_OUT_OF_RANGE', name: 'RangeError', - message: 'The value of "keylen" is out of range. It must be >= 0 && < ' + - `4294967296. Received ${input === -1 ? '-1' : '4_294_967_297'}` }); }); diff --git a/test/parallel/test-crypto-prime.js b/test/parallel/test-crypto-prime.js index 2d3f39aec15..bab98c4e969 100644 --- a/test/parallel/test-crypto-prime.js +++ b/test/parallel/test-crypto-prime.js @@ -41,12 +41,14 @@ const pCheckPrime = promisify(checkPrime); }); }); -[-1, 0, 2 ** 31, 2 ** 31 + 1, 2 ** 32 - 1, 2 ** 32].forEach((i) => { - assert.throws(() => generatePrime(i, common.mustNotCall()), { - code: 'ERR_OUT_OF_RANGE' +[-1, 0, 2 ** 31, 2 ** 31 + 1, 2 ** 32 - 1, 2 ** 32].forEach((size) => { + assert.throws(() => generatePrime(size, common.mustNotCall()), { + code: 'ERR_OUT_OF_RANGE', + message: />= 1 && <= 2147483647/ }); - assert.throws(() => generatePrimeSync(i), { - code: 'ERR_OUT_OF_RANGE' + assert.throws(() => generatePrimeSync(size), { + code: 'ERR_OUT_OF_RANGE', + message: />= 1 && <= 2147483647/ }); }); diff --git a/test/parallel/test-crypto-psychic-signatures.js b/test/parallel/test-crypto-psychic-signatures.js new file mode 100644 index 00000000000..b8e1207b5c8 --- /dev/null +++ b/test/parallel/test-crypto-psychic-signatures.js @@ -0,0 +1,100 @@ +'use strict'; +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); + +const assert = require('assert'); + +const crypto = require('crypto'); + +// Tests for CVE-2022-21449 +// https://neilmadden.blog/2022/04/19/psychic-signatures-in-java/ +// Dubbed "Psychic Signatures", these signatures bypassed the ECDSA signature +// verification implementation in Java in 15, 16, 17, and 18. OpenSSL is not +// (and was not) vulnerable so these are a precaution. + +const vectors = { + 'ieee-p1363': [ + Buffer.from('0000000000000000000000000000000000000000000000000000000000000000' + + '0000000000000000000000000000000000000000000000000000000000000000', 'hex'), + Buffer.from('ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551' + + 'ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551', 'hex'), + ], + 'der': [ + Buffer.from('3046022100' + + '0000000000000000000000000000000000000000000000000000000000000000' + + '022100' + + '0000000000000000000000000000000000000000000000000000000000000000', 'hex'), + Buffer.from('3046022100' + + 'ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551' + + '022100' + + 'ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551', 'hex'), + ], +}; + +const keyPair = crypto.generateKeyPairSync('ec', { + namedCurve: 'P-256', + publicKeyEncoding: { + format: 'der', + type: 'spki' + }, +}); + +const data = Buffer.from('Hello!'); + +for (const [encoding, signatures] of Object.entries(vectors)) { + for (const signature of signatures) { + const key = { + key: keyPair.publicKey, + format: 'der', + type: 'spki', + dsaEncoding: encoding, + }; + + // one-shot sync + assert.strictEqual( + crypto.verify( + 'sha256', + data, + key, + signature, + ), + false, + ); + + // one-shot async + crypto.verify( + 'sha256', + data, + key, + signature, + common.mustSucceed((verified) => assert.strictEqual(verified, false)), + ); + + // stream + assert.strictEqual( + crypto.createVerify('sha256') + .update(data) + .verify(key, signature), + false, + ); + + // webcrypto + crypto.webcrypto.subtle.importKey( + 'spki', + keyPair.publicKey, + { name: 'ECDSA', namedCurve: 'P-256' }, + false, + ['verify'], + ).then((publicKey) => { + return crypto.webcrypto.subtle.verify( + { name: 'ECDSA', hash: 'SHA-256' }, + publicKey, + signature, + data, + ); + }).then(common.mustCall((verified) => { + assert.strictEqual(verified, false); + })); + } +} diff --git a/test/parallel/test-crypto-scrypt.js b/test/parallel/test-crypto-scrypt.js index 7b695a36f2b..76c06b4a49e 100644 --- a/test/parallel/test-crypto-scrypt.js +++ b/test/parallel/test-crypto-scrypt.js @@ -24,7 +24,7 @@ const good = [ }, // Test vectors from https://tools.ietf.org/html/rfc7914#page-13 that // should pass. Note that the test vector with N=1048576 is omitted - // because it takes too long to complete and uses over 1 GB of memory. + // because it takes too long to complete and uses over 1 GiB of memory. { pass: '', salt: '', diff --git a/test/parallel/test-crypto-secret-keygen.js b/test/parallel/test-crypto-secret-keygen.js index ab662aeb5d1..dddb2865bcb 100644 --- a/test/parallel/test-crypto-secret-keygen.js +++ b/test/parallel/test-crypto-secret-keygen.js @@ -51,6 +51,14 @@ assert.throws(() => generateKey('hmac', { length: -1 }, common.mustNotCall()), { code: 'ERR_OUT_OF_RANGE' }); +assert.throws(() => generateKey('hmac', { length: 4 }, common.mustNotCall()), { + code: 'ERR_OUT_OF_RANGE' +}); + +assert.throws(() => generateKey('hmac', { length: 7 }, common.mustNotCall()), { + code: 'ERR_OUT_OF_RANGE' +}); + assert.throws( () => generateKey('hmac', { length: 2 ** 31 }, common.mustNotCall()), { code: 'ERR_OUT_OF_RANGE' @@ -60,6 +68,14 @@ assert.throws(() => generateKeySync('hmac', { length: -1 }), { code: 'ERR_OUT_OF_RANGE' }); +assert.throws(() => generateKeySync('hmac', { length: 4 }), { + code: 'ERR_OUT_OF_RANGE' +}); + +assert.throws(() => generateKeySync('hmac', { length: 7 }), { + code: 'ERR_OUT_OF_RANGE' +}); + assert.throws( () => generateKeySync('hmac', { length: 2 ** 31 }), { code: 'ERR_OUT_OF_RANGE' diff --git a/test/parallel/test-crypto-sign-verify.js b/test/parallel/test-crypto-sign-verify.js index b2c14b1efcd..74c0ff53eb1 100644 --- a/test/parallel/test-crypto-sign-verify.js +++ b/test/parallel/test-crypto-sign-verify.js @@ -756,3 +756,21 @@ assert.throws( message: /digest too big for rsa key/ }); } + +{ + // This should not cause a crash: https://github.com/nodejs/node/issues/44471 + for (const key of ['', 'foo', null, undefined, true, Boolean]) { + assert.throws(() => { + crypto.verify('sha256', 'foo', { key, format: 'jwk' }, Buffer.alloc(0)); + }, { code: 'ERR_INVALID_ARG_TYPE', message: /The "key\.key" property must be of type object/ }); + assert.throws(() => { + crypto.createVerify('sha256').verify({ key, format: 'jwk' }, Buffer.alloc(0)); + }, { code: 'ERR_INVALID_ARG_TYPE', message: /The "key\.key" property must be of type object/ }); + assert.throws(() => { + crypto.sign('sha256', 'foo', { key, format: 'jwk' }); + }, { code: 'ERR_INVALID_ARG_TYPE', message: /The "key\.key" property must be of type object/ }); + assert.throws(() => { + crypto.createSign('sha256').sign({ key, format: 'jwk' }); + }, { code: 'ERR_INVALID_ARG_TYPE', message: /The "key\.key" property must be of type object/ }); + } +} diff --git a/test/parallel/test-debugger-address.js b/test/parallel/test-debugger-address.js deleted file mode 100644 index bffc28ac916..00000000000 --- a/test/parallel/test-debugger-address.js +++ /dev/null @@ -1,73 +0,0 @@ -'use strict'; -const common = require('../common'); - -common.skipIfInspectorDisabled(); - -const fixtures = require('../common/fixtures'); -const startCLI = require('../common/debugger'); - -const assert = require('assert'); -const { spawn } = require('child_process'); - -// NOTE(oyyd): We might want to import this regexp from "lib/_inspect.js"? -const kDebuggerMsgReg = /Debugger listening on ws:\/\/\[?(.+?)\]?:(\d+)\//; - -function launchTarget(...args) { - const childProc = spawn(process.execPath, args); - return new Promise((resolve, reject) => { - const onExit = () => { - reject(new Error('Child process exits unexpectedly')); - }; - childProc.on('exit', onExit); - childProc.stderr.setEncoding('utf8'); - let data = ''; - childProc.stderr.on('data', (chunk) => { - data += chunk; - const ret = kDebuggerMsgReg.exec(data); - childProc.removeListener('exit', onExit); - if (ret) { - resolve({ - childProc, - host: ret[1], - port: ret[2], - }); - } - }); - }); -} - -{ - const script = fixtures.path('debugger/alive.js'); - let cli = null; - let target = null; - - function cleanup(error) { - if (cli) { - cli.quit(); - cli = null; - } - if (target) { - target.kill(); - target = null; - } - assert.ifError(error); - } - - return launchTarget('--inspect=0', script) - .then(({ childProc, host, port }) => { - target = childProc; - cli = startCLI([`${host || '127.0.0.1'}:${port}`]); - return cli.waitForPrompt(); - }) - .then(() => cli.command('sb("alive.js", 3)')) - .then(() => cli.waitFor(/break/)) - .then(() => cli.waitForPrompt()) - .then(() => { - assert.match( - cli.output, - /> 3 {3}\+\+x;/, - 'marks the 3rd line'); - }) - .then(() => cleanup()) - .then(null, cleanup); -} diff --git a/test/parallel/test-debugger-address.mjs b/test/parallel/test-debugger-address.mjs new file mode 100644 index 00000000000..eab99c9b0e2 --- /dev/null +++ b/test/parallel/test-debugger-address.mjs @@ -0,0 +1,71 @@ +import { skipIfInspectorDisabled } from '../common/index.mjs'; + +skipIfInspectorDisabled(); + +import * as fixtures from '../common/fixtures.mjs'; +import startCLI from '../common/debugger.js'; + +import assert from 'assert'; +import { spawn } from 'child_process'; + +// NOTE(oyyd): We might want to import this regexp from "lib/_inspect.js"? +const kDebuggerMsgReg = /Debugger listening on ws:\/\/\[?(.+?)\]?:(\d+)\//; + +function launchTarget(...args) { + const childProc = spawn(process.execPath, args); + return new Promise((resolve, reject) => { + const onExit = () => { + reject(new Error('Child process exits unexpectedly')); + }; + childProc.on('exit', onExit); + childProc.stderr.setEncoding('utf8'); + let data = ''; + childProc.stderr.on('data', (chunk) => { + data += chunk; + const ret = kDebuggerMsgReg.exec(data); + childProc.removeListener('exit', onExit); + if (ret) { + resolve({ + childProc, + host: ret[1], + port: ret[2], + }); + } + }); + }); +} + +{ + const script = fixtures.path('debugger/alive.js'); + let cli = null; + let target = null; + + function cleanup(error) { + if (cli) { + cli.quit(); + cli = null; + } + if (target) { + target.kill(); + target = null; + } + assert.ifError(error); + } + + try { + const { childProc, host, port } = await launchTarget('--inspect=0', script); + target = childProc; + cli = startCLI([`${host || '127.0.0.1'}:${port}`]); + await cli.waitForPrompt(); + await cli.command('sb("alive.js", 3)'); + await cli.waitFor(/break/); + await cli.waitForPrompt(); + assert.match( + cli.output, + /> 3 {3}\+\+x;/, + 'marks the 3rd line' + ); + } finally { + cleanup(); + } +} diff --git a/test/parallel/test-debugger-extract-function-name.mjs b/test/parallel/test-debugger-extract-function-name.mjs new file mode 100644 index 00000000000..e457fc7f521 --- /dev/null +++ b/test/parallel/test-debugger-extract-function-name.mjs @@ -0,0 +1,33 @@ +import { skipIfInspectorDisabled } from '../common/index.mjs'; + +skipIfInspectorDisabled(); + +import { path } from '../common/fixtures.mjs'; +import startCLI from '../common/debugger.js'; + +import assert from 'assert'; + +const cli = startCLI([path('debugger', 'three-lines.js')]); + +try { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('exec a = function func() {}; a;'); + assert.match(cli.output, /\[Function: func\]/); + await cli.command('exec a = function func () {}; a;'); + assert.match(cli.output, /\[Function\]/); + await cli.command('exec a = function() {}; a;'); + assert.match(cli.output, /\[Function: function\]/); + await cli.command('exec a = () => {}; a;'); + assert.match(cli.output, /\[Function\]/); + await cli.command('exec a = function* func() {}; a;'); + assert.match(cli.output, /\[GeneratorFunction: func\]/); + await cli.command('exec a = function *func() {}; a;'); + assert.match(cli.output, /\[GeneratorFunction: \*func\]/); + await cli.command('exec a = function*func() {}; a;'); + assert.match(cli.output, /\[GeneratorFunction: function\*func\]/); + await cli.command('exec a = function * func() {}; a;'); + assert.match(cli.output, /\[GeneratorFunction\]/); +} finally { + cli.quit(); +} diff --git a/test/parallel/test-debugger-invalid-json.js b/test/parallel/test-debugger-invalid-json.js new file mode 100644 index 00000000000..9bad8ed3694 --- /dev/null +++ b/test/parallel/test-debugger-invalid-json.js @@ -0,0 +1,42 @@ +'use strict'; +const common = require('../common'); +const startCLI = require('../common/debugger'); + +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const http = require('http'); + +const host = '127.0.0.1'; + +{ + const server = http.createServer((req, res) => { + res.statusCode = 400; + res.end('Bad Request'); + }); + server.listen(0, common.mustCall(() => { + const port = server.address().port; + const cli = startCLI([`${host}:${port}`]); + cli.quit().then(common.mustCall((code) => { + assert.strictEqual(code, 1); + })).finally(() => { + server.close(); + }); + })); +} + +{ + const server = http.createServer((req, res) => { + res.statusCode = 200; + res.end('some data that is invalid json'); + }); + server.listen(0, host, common.mustCall(() => { + const port = server.address().port; + const cli = startCLI([`${host}:${port}`]); + cli.quit().then(common.mustCall((code) => { + assert.strictEqual(code, 1); + })).finally(() => { + server.close(); + }); + })); +} diff --git a/test/parallel/test-dgram-cluster-close-in-listening.js b/test/parallel/test-dgram-cluster-close-in-listening.js new file mode 100644 index 00000000000..8cce5402716 --- /dev/null +++ b/test/parallel/test-dgram-cluster-close-in-listening.js @@ -0,0 +1,29 @@ +'use strict'; +// Ensure that closing dgram sockets in 'listening' callbacks of cluster workers +// won't throw errors. + +const common = require('../common'); +const dgram = require('dgram'); +const cluster = require('cluster'); +if (common.isWindows) + common.skip('dgram clustering is currently not supported on windows.'); + +if (cluster.isPrimary) { + for (let i = 0; i < 3; i += 1) { + cluster.fork(); + } +} else { + const socket = dgram.createSocket('udp4'); + + socket.on('error', common.mustNotCall()); + + socket.on('listening', common.mustCall(() => { + socket.close(); + })); + + socket.on('close', common.mustCall(() => { + cluster.worker.disconnect(); + })); + + socket.bind(0); +} diff --git a/test/parallel/test-dgram-send-queue-info.js b/test/parallel/test-dgram-send-queue-info.js new file mode 100644 index 00000000000..07b282b29fc --- /dev/null +++ b/test/parallel/test-dgram-send-queue-info.js @@ -0,0 +1,27 @@ +// Flags: --test-udp-no-try-send +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const dgram = require('dgram'); + +const socket = dgram.createSocket('udp4'); +assert.strictEqual(socket.getSendQueueSize(), 0); +assert.strictEqual(socket.getSendQueueCount(), 0); +socket.close(); + +const server = dgram.createSocket('udp4'); +const client = dgram.createSocket('udp4'); + +server.bind(0, common.mustCall(() => { + client.connect(server.address().port, common.mustCall(() => { + const data = 'hello'; + client.send(data); + client.send(data); + // See uv__send in win/udp.c + assert.strictEqual(client.getSendQueueSize(), + common.isWindows ? 0 : data.length * 2); + assert.strictEqual(client.getSendQueueCount(), 2); + client.close(); + server.close(); + })); +})); diff --git a/test/parallel/test-diagnostics-channel-http-server-start.js b/test/parallel/test-diagnostics-channel-http-server-start.js index 9a8136d4cc5..ad2f6ba4887 100644 --- a/test/parallel/test-diagnostics-channel-http-server-start.js +++ b/test/parallel/test-diagnostics-channel-http-server-start.js @@ -6,21 +6,18 @@ const dc = require('diagnostics_channel'); const assert = require('assert'); const http = require('http'); -const incomingStartChannel = dc.channel('http.server.request.start'); -const outgoingFinishChannel = dc.channel('http.server.response.finish'); - const als = new AsyncLocalStorage(); let context; // Bind requests to an AsyncLocalStorage context -incomingStartChannel.subscribe(common.mustCall((message) => { +dc.subscribe('http.server.request.start', common.mustCall((message) => { als.enterWith(message); context = message; })); // When the request ends, verify the context has been maintained // and that the messages contain the expected data -outgoingFinishChannel.subscribe(common.mustCall((message) => { +dc.subscribe('http.server.response.finish', common.mustCall((message) => { const data = { request, response, diff --git a/test/parallel/test-diagnostics-channel-http.js b/test/parallel/test-diagnostics-channel-http.js new file mode 100644 index 00000000000..c2e84444e28 --- /dev/null +++ b/test/parallel/test-diagnostics-channel-http.js @@ -0,0 +1,61 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); +const net = require('net'); +const dc = require('diagnostics_channel'); + +const isHTTPServer = (server) => server instanceof http.Server; +const isIncomingMessage = (object) => object instanceof http.IncomingMessage; +const isOutgoingMessage = (object) => object instanceof http.OutgoingMessage; +const isNetSocket = (socket) => socket instanceof net.Socket; + +dc.subscribe('http.client.request.start', common.mustCall(({ request }) => { + assert.strictEqual(isOutgoingMessage(request), true); +})); + +dc.subscribe('http.client.response.finish', common.mustCall(({ + request, + response +}) => { + assert.strictEqual(isOutgoingMessage(request), true); + assert.strictEqual(isIncomingMessage(response), true); +})); + +dc.subscribe('http.server.request.start', common.mustCall(({ + request, + response, + socket, + server, +}) => { + assert.strictEqual(isIncomingMessage(request), true); + assert.strictEqual(isOutgoingMessage(response), true); + assert.strictEqual(isNetSocket(socket), true); + assert.strictEqual(isHTTPServer(server), true); +})); + +dc.subscribe('http.server.response.finish', common.mustCall(({ + request, + response, + socket, + server, +}) => { + assert.strictEqual(isIncomingMessage(request), true); + assert.strictEqual(isOutgoingMessage(response), true); + assert.strictEqual(isNetSocket(socket), true); + assert.strictEqual(isHTTPServer(server), true); +})); + +const server = http.createServer(common.mustCall((req, res) => { + res.end('done'); +})); + +server.listen(() => { + const { port } = server.address(); + http.get(`http://localhost:${port}`, (res) => { + res.resume(); + res.on('end', () => { + server.close(); + }); + }); +}); diff --git a/test/parallel/test-diagnostics-channel-net.js b/test/parallel/test-diagnostics-channel-net.js new file mode 100644 index 00000000000..4004cbf8df7 --- /dev/null +++ b/test/parallel/test-diagnostics-channel-net.js @@ -0,0 +1,25 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); +const dc = require('diagnostics_channel'); + +const isNetSocket = (socket) => socket instanceof net.Socket; + +dc.subscribe('net.client.socket', common.mustCall(({ socket }) => { + assert.strictEqual(isNetSocket(socket), true); +})); + +dc.subscribe('net.server.socket', common.mustCall(({ socket }) => { + assert.strictEqual(isNetSocket(socket), true); +})); + +const server = net.createServer(common.mustCall((socket) => { + socket.destroy(); + server.close(); +})); + +server.listen(() => { + const { port } = server.address(); + net.connect(port); +}); diff --git a/test/parallel/test-diagnostics-channel-process.js b/test/parallel/test-diagnostics-channel-process.js new file mode 100644 index 00000000000..3ca6e2cd4f2 --- /dev/null +++ b/test/parallel/test-diagnostics-channel-process.js @@ -0,0 +1,21 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const cluster = require('cluster'); +const { ChildProcess } = require('child_process'); +const dc = require('diagnostics_channel'); + +if (cluster.isPrimary) { + dc.subscribe('child_process', common.mustCall(({ process }) => { + assert.strictEqual(process instanceof ChildProcess, true); + })); + const worker = cluster.fork(); + worker.on('online', common.mustCall(() => { + worker.send('disconnect'); + })); +} else { + process.on('message', common.mustCall((msg) => { + assert.strictEqual(msg, 'disconnect'); + process.disconnect(); + })); +} diff --git a/test/parallel/test-diagnostics-channel-pub-sub.js b/test/parallel/test-diagnostics-channel-pub-sub.js new file mode 100644 index 00000000000..2317d90dbbc --- /dev/null +++ b/test/parallel/test-diagnostics-channel-pub-sub.js @@ -0,0 +1,44 @@ +'use strict'; + +const common = require('../common'); +const dc = require('diagnostics_channel'); +const assert = require('assert'); +const { Channel } = dc; + +const name = 'test'; +const input = { + foo: 'bar' +}; + +// Individual channel objects can be created to avoid future lookups +const channel = dc.channel(name); +assert.ok(channel instanceof Channel); + +// No subscribers yet, should not publish +assert.ok(!channel.hasSubscribers); + +const subscriber = common.mustCall((message, name) => { + assert.strictEqual(name, channel.name); + assert.deepStrictEqual(message, input); +}); + +// Now there's a subscriber, should publish +dc.subscribe(name, subscriber); +assert.ok(channel.hasSubscribers); + +// The ActiveChannel prototype swap should not fail instanceof +assert.ok(channel instanceof Channel); + +// Should trigger the subscriber once +channel.publish(input); + +// Should not publish after subscriber is unsubscribed +assert.ok(dc.unsubscribe(name, subscriber)); +assert.ok(!channel.hasSubscribers); + +// unsubscribe() should return false when subscriber is not found +assert.ok(!dc.unsubscribe(name, subscriber)); + +assert.throws(() => { + dc.subscribe(name, null); +}, { code: 'ERR_INVALID_ARG_TYPE' }); diff --git a/test/parallel/test-diagnostics-channel-udp.js b/test/parallel/test-diagnostics-channel-udp.js new file mode 100644 index 00000000000..79869c6d807 --- /dev/null +++ b/test/parallel/test-diagnostics-channel-udp.js @@ -0,0 +1,15 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const dgram = require('dgram'); +const dc = require('diagnostics_channel'); + +const udpSocketChannel = dc.channel('udp.socket'); + +const isUDPSocket = (socket) => socket instanceof dgram.Socket; + +udpSocketChannel.subscribe(common.mustCall(({ socket }) => { + assert.strictEqual(isUDPSocket(socket), true); +})); +const socket = dgram.createSocket('udp4'); +socket.close(); diff --git a/test/parallel/test-diagnostics-channel-worker-threads.js b/test/parallel/test-diagnostics-channel-worker-threads.js new file mode 100644 index 00000000000..786b77da170 --- /dev/null +++ b/test/parallel/test-diagnostics-channel-worker-threads.js @@ -0,0 +1,11 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const { Worker } = require('worker_threads'); +const dc = require('diagnostics_channel'); + +dc.subscribe('worker_threads', common.mustCall(({ worker }) => { + assert.strictEqual(worker instanceof Worker, true); +})); + +new Worker('const a = 1;', { eval: true }); diff --git a/test/parallel/test-dns-get-server.js b/test/parallel/test-dns-get-server.js new file mode 100644 index 00000000000..24c01218fad --- /dev/null +++ b/test/parallel/test-dns-get-server.js @@ -0,0 +1,11 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); + +const { Resolver } = require('dns'); + +const resolver = new Resolver(); +assert(resolver.getServers().length > 0); +// return undefined +resolver._handle.getServers = common.mustCall(() => {}); +assert.strictEqual(resolver.getServers().length, 0); diff --git a/test/parallel/test-dns-lookupService-promises.js b/test/parallel/test-dns-lookupService-promises.js index d7e50f194da..4052139c922 100644 --- a/test/parallel/test-dns-lookupService-promises.js +++ b/test/parallel/test-dns-lookupService-promises.js @@ -6,7 +6,7 @@ const assert = require('assert'); const dnsPromises = require('dns').promises; dnsPromises.lookupService('127.0.0.1', 22).then(common.mustCall((result) => { - assert.strictEqual(result.service, 'ssh'); + assert(['ssh', '22'].includes(result.service)); assert.strictEqual(typeof result.hostname, 'string'); assert.notStrictEqual(result.hostname.length, 0); })); diff --git a/test/parallel/test-dns-perf_hooks.js b/test/parallel/test-dns-perf_hooks.js new file mode 100644 index 00000000000..7636020bf6f --- /dev/null +++ b/test/parallel/test-dns-perf_hooks.js @@ -0,0 +1,60 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const dns = require('dns'); +const { PerformanceObserver } = require('perf_hooks'); + +const entries = []; +const obs = new PerformanceObserver((items) => { + entries.push(...items.getEntries()); +}); + +obs.observe({ type: 'dns' }); + +let count = 0; + +function inc() { + count++; +} + +// If DNS resolution fails, skip it +// https://github.com/nodejs/node/issues/44003 +dns.lookup('localhost', common.mustCall((err) => { !err && inc(); })); +dns.lookupService('127.0.0.1', 80, common.mustCall((err) => { !err && inc(); })); +dns.resolveAny('localhost', common.mustCall((err) => { !err && inc(); })); + +dns.promises.lookup('localhost').then(inc).catch(() => {}); +dns.promises.lookupService('127.0.0.1', 80).then(inc).catch(() => {}); +dns.promises.resolveAny('localhost').then(inc).catch(() => {}); + +process.on('exit', () => { + assert.strictEqual(entries.length, count); + entries.forEach((entry) => { + assert.strictEqual(!!entry.name, true); + assert.strictEqual(entry.entryType, 'dns'); + assert.strictEqual(typeof entry.startTime, 'number'); + assert.strictEqual(typeof entry.duration, 'number'); + assert.strictEqual(typeof entry.detail, 'object'); + switch (entry.name) { + case 'lookup': + assert.strictEqual(typeof entry.detail.hostname, 'string'); + assert.strictEqual(typeof entry.detail.family, 'number'); + assert.strictEqual(typeof entry.detail.hints, 'number'); + assert.strictEqual(typeof entry.detail.verbatim, 'boolean'); + assert.strictEqual(Array.isArray(entry.detail.addresses), true); + break; + case 'lookupService': + assert.strictEqual(typeof entry.detail.host, 'string'); + assert.strictEqual(typeof entry.detail.port, 'number'); + assert.strictEqual(typeof entry.detail.hostname, 'string'); + assert.strictEqual(typeof entry.detail.service, 'string'); + break; + case 'queryAny': + assert.strictEqual(typeof entry.detail.host, 'string'); + assert.strictEqual(typeof entry.detail.ttl, 'boolean'); + assert.strictEqual(Array.isArray(entry.detail.result), true); + break; + } + }); +}); diff --git a/test/parallel/test-dns-promises-exists.js b/test/parallel/test-dns-promises-exists.js index 5fd20dff2c1..d88ecefaa98 100644 --- a/test/parallel/test-dns-promises-exists.js +++ b/test/parallel/test-dns-promises-exists.js @@ -2,5 +2,32 @@ require('../common'); const assert = require('assert'); +const dnsPromises = require('dns/promises'); +const dns = require('dns'); -assert.strictEqual(require('dns/promises'), require('dns').promises); +assert.strictEqual(dnsPromises, dns.promises); + +assert.strictEqual(dnsPromises.NODATA, dns.NODATA); +assert.strictEqual(dnsPromises.FORMERR, dns.FORMERR); +assert.strictEqual(dnsPromises.SERVFAIL, dns.SERVFAIL); +assert.strictEqual(dnsPromises.NOTFOUND, dns.NOTFOUND); +assert.strictEqual(dnsPromises.NOTIMP, dns.NOTIMP); +assert.strictEqual(dnsPromises.REFUSED, dns.REFUSED); +assert.strictEqual(dnsPromises.BADQUERY, dns.BADQUERY); +assert.strictEqual(dnsPromises.BADNAME, dns.BADNAME); +assert.strictEqual(dnsPromises.BADFAMILY, dns.BADFAMILY); +assert.strictEqual(dnsPromises.BADRESP, dns.BADRESP); +assert.strictEqual(dnsPromises.CONNREFUSED, dns.CONNREFUSED); +assert.strictEqual(dnsPromises.TIMEOUT, dns.TIMEOUT); +assert.strictEqual(dnsPromises.EOF, dns.EOF); +assert.strictEqual(dnsPromises.FILE, dns.FILE); +assert.strictEqual(dnsPromises.NOMEM, dns.NOMEM); +assert.strictEqual(dnsPromises.DESTRUCTION, dns.DESTRUCTION); +assert.strictEqual(dnsPromises.BADSTR, dns.BADSTR); +assert.strictEqual(dnsPromises.BADFLAGS, dns.BADFLAGS); +assert.strictEqual(dnsPromises.NONAME, dns.NONAME); +assert.strictEqual(dnsPromises.BADHINTS, dns.BADHINTS); +assert.strictEqual(dnsPromises.NOTINITIALIZED, dns.NOTINITIALIZED); +assert.strictEqual(dnsPromises.LOADIPHLPAPI, dns.LOADIPHLPAPI); +assert.strictEqual(dnsPromises.ADDRGETNETWORKPARAMS, dns.ADDRGETNETWORKPARAMS); +assert.strictEqual(dnsPromises.CANCELLED, dns.CANCELLED); diff --git a/test/parallel/test-domain-dep0097.js b/test/parallel/test-domain-dep0097.js index 05b5c74b30d..7ed823aa416 100644 --- a/test/parallel/test-domain-dep0097.js +++ b/test/parallel/test-domain-dep0097.js @@ -13,5 +13,5 @@ process.on('warning', common.mustCall((warning) => { })); domain.create().run(() => { - inspector.open(); + inspector.open(0); }); diff --git a/test/parallel/test-domain-vm-promise-isolation.js b/test/parallel/test-domain-vm-promise-isolation.js new file mode 100644 index 00000000000..41aed1ee337 --- /dev/null +++ b/test/parallel/test-domain-vm-promise-isolation.js @@ -0,0 +1,28 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const domain = require('domain'); +const vm = require('vm'); + +// A promise created in a VM should not include a domain field but +// domains should still be able to propagate through them. +// +// See; https://github.com/nodejs/node/issues/40999 + +const context = vm.createContext({}); + +function run(code) { + const d = domain.createDomain(); + d.run(common.mustCall(() => { + const p = vm.runInContext(code, context)(); + assert.strictEqual(p.domain, undefined); + p.then(common.mustCall(() => { + assert.strictEqual(process.domain, d); + })); + })); +} + +for (let i = 0; i < 1000; i++) { + run('async () => null'); +} diff --git a/test/parallel/test-env-newprotomethod-remove-unnecessary-prototypes.js b/test/parallel/test-env-newprotomethod-remove-unnecessary-prototypes.js index deb7993a145..22c0c8665d1 100644 --- a/test/parallel/test-env-newprotomethod-remove-unnecessary-prototypes.js +++ b/test/parallel/test-env-newprotomethod-remove-unnecessary-prototypes.js @@ -3,7 +3,7 @@ require('../common'); // This test ensures that unnecessary prototypes are no longer -// being generated by Environment::NewFunctionTemplate. +// being generated by node::NewFunctionTemplate. const assert = require('assert'); const { internalBinding } = require('internal/test/binding'); diff --git a/test/parallel/test-error-reporting.js b/test/parallel/test-error-reporting.js index 75574641ec7..39cb5f95589 100644 --- a/test/parallel/test-error-reporting.js +++ b/test/parallel/test-error-reporting.js @@ -25,8 +25,10 @@ const assert = require('assert'); const exec = require('child_process').exec; const fixtures = require('../common/fixtures'); -function errExec(script, callback) { - const cmd = `"${process.argv[0]}" "${fixtures.path(script)}"`; +function errExec(script, option, callback) { + callback = typeof option === 'function' ? option : callback; + option = typeof option === 'string' ? option : ''; + const cmd = `"${process.argv[0]}" ${option} "${fixtures.path(script)}"`; return exec(cmd, (err, stdout, stderr) => { // There was some error assert.ok(err); @@ -80,3 +82,8 @@ errExec('throws_error7.js', common.mustCall((err, stdout, stderr) => { assert.match(stderr, /throw {\r?\n\^\r?\n{ toString: \[Function: toString] }\r?\n$/); })); + +// Regression tests for https://github.com/nodejs/node/issues/39149 +errExec('throws_error7.js', '--enable-source-maps', common.mustCall((err, stdout, stderr) => { + assert.match(stderr, /throw {\r?\n\^\r?\n{ toString: \[Function: toString] }\r?\n$/); +})); diff --git a/test/parallel/test-error-value-type-detection.mjs b/test/parallel/test-error-value-type-detection.mjs new file mode 100644 index 00000000000..75e6493a9bb --- /dev/null +++ b/test/parallel/test-error-value-type-detection.mjs @@ -0,0 +1,150 @@ +// Flags: --expose-internals + +import '../common/index.mjs'; +import { strictEqual } from 'node:assert'; +import errorsModule from 'internal/errors'; + + +const { determineSpecificType } = errorsModule; + +strictEqual( + determineSpecificType(1n), + 'type bigint (1n)', +); + +strictEqual( + determineSpecificType(false), + 'type boolean (false)', +); + +strictEqual( + determineSpecificType(2), + 'type number (2)', +); + +strictEqual( + determineSpecificType(NaN), + 'type number (NaN)', +); + +strictEqual( + determineSpecificType(Infinity), + 'type number (Infinity)', +); + +strictEqual( + determineSpecificType(Object.create(null)), + '[Object: null prototype] {}', +); + +strictEqual( + determineSpecificType(''), + "type string ('')", +); + +strictEqual( + determineSpecificType(Symbol('foo')), + 'type symbol (Symbol(foo))', +); + +strictEqual( + determineSpecificType(function foo() {}), + 'function foo', +); + +strictEqual( + determineSpecificType(null), + 'null', +); + +strictEqual( + determineSpecificType(undefined), + 'undefined', +); + +strictEqual( + determineSpecificType([]), + 'an instance of Array', +); + +strictEqual( + determineSpecificType(new Array()), + 'an instance of Array', +); +strictEqual( + determineSpecificType(new BigInt64Array()), + 'an instance of BigInt64Array', +); +strictEqual( + determineSpecificType(new BigUint64Array()), + 'an instance of BigUint64Array', +); +strictEqual( + determineSpecificType(new Int8Array()), + 'an instance of Int8Array', +); +strictEqual( + determineSpecificType(new Int16Array()), + 'an instance of Int16Array', +); +strictEqual( + determineSpecificType(new Int32Array()), + 'an instance of Int32Array', +); +strictEqual( + determineSpecificType(new Float32Array()), + 'an instance of Float32Array', +); +strictEqual( + determineSpecificType(new Float64Array()), + 'an instance of Float64Array', +); +strictEqual( + determineSpecificType(new Uint8Array()), + 'an instance of Uint8Array', +); +strictEqual( + determineSpecificType(new Uint8ClampedArray()), + 'an instance of Uint8ClampedArray', +); +strictEqual( + determineSpecificType(new Uint16Array()), + 'an instance of Uint16Array', +); +strictEqual( + determineSpecificType(new Uint32Array()), + 'an instance of Uint32Array', +); + +strictEqual( + determineSpecificType(new Date()), + 'an instance of Date', +); + +strictEqual( + determineSpecificType(new Map()), + 'an instance of Map', +); +strictEqual( + determineSpecificType(new WeakMap()), + 'an instance of WeakMap', +); + +strictEqual( + determineSpecificType({}), + 'an instance of Object', +); + +strictEqual( + determineSpecificType(Promise.resolve('foo')), + 'an instance of Promise', +); + +strictEqual( + determineSpecificType(new Set()), + 'an instance of Set', +); +strictEqual( + determineSpecificType(new WeakSet()), + 'an instance of WeakSet', +); diff --git a/test/parallel/test-errors-aborterror.js b/test/parallel/test-errors-aborterror.js new file mode 100644 index 00000000000..15da9f06f94 --- /dev/null +++ b/test/parallel/test-errors-aborterror.js @@ -0,0 +1,31 @@ +// Flags: --expose-internals +'use strict'; + +require('../common'); +const { + strictEqual, + throws, +} = require('assert'); +const { AbortError } = require('internal/errors'); + +{ + const err = new AbortError(); + strictEqual(err.message, 'The operation was aborted'); + strictEqual(err.cause, undefined); +} + +{ + const cause = new Error('boom'); + const err = new AbortError('bang', { cause }); + strictEqual(err.message, 'bang'); + strictEqual(err.cause, cause); +} + +{ + throws(() => new AbortError('', false), { + code: 'ERR_INVALID_ARG_TYPE' + }); + throws(() => new AbortError('', ''), { + code: 'ERR_INVALID_ARG_TYPE' + }); +} diff --git a/test/parallel/test-errors-systemerror.js b/test/parallel/test-errors-systemerror.js index 2a20588e75b..38afbd4aa7d 100644 --- a/test/parallel/test-errors-systemerror.js +++ b/test/parallel/test-errors-systemerror.js @@ -9,7 +9,7 @@ assert.throws( () => { new SystemError(); }, { name: 'TypeError', - message: 'String.prototype.match called on null or undefined' + message: "Cannot read properties of undefined (reading 'syscall')", } ); diff --git a/test/parallel/test-eslint-avoid-prototype-pollution.js b/test/parallel/test-eslint-avoid-prototype-pollution.js new file mode 100644 index 00000000000..c30928f56ce --- /dev/null +++ b/test/parallel/test-eslint-avoid-prototype-pollution.js @@ -0,0 +1,250 @@ +'use strict'; + +const common = require('../common'); +if ((!common.hasCrypto) || (!common.hasIntl)) { + common.skip('ESLint tests require crypto and Intl'); +} + +common.skipIfEslintMissing(); + +const RuleTester = require('../../tools/node_modules/eslint').RuleTester; +const rule = require('../../tools/eslint-rules/avoid-prototype-pollution'); + +new RuleTester({ + parserOptions: { ecmaVersion: 2022 }, +}) + .run('property-descriptor-no-prototype-pollution', rule, { + valid: [ + 'ObjectDefineProperties({}, {})', + 'ObjectCreate(null, {})', + 'ObjectDefineProperties({}, { key })', + 'ObjectCreate(null, { key })', + 'ObjectDefineProperties({}, { ...spread })', + 'ObjectCreate(null, { ...spread })', + 'ObjectDefineProperties({}, { key: valueDescriptor })', + 'ObjectCreate(null, { key: valueDescriptor })', + 'ObjectDefineProperties({}, { key: { ...{}, __proto__: null } })', + 'ObjectCreate(null, { key: { ...{}, __proto__: null } })', + 'ObjectDefineProperties({}, { key: { __proto__: null } })', + 'ObjectCreate(null, { key: { __proto__: null } })', + 'ObjectDefineProperties({}, { key: { __proto__: null, enumerable: true } })', + 'ObjectCreate(null, { key: { __proto__: null, enumerable: true } })', + 'ObjectDefineProperties({}, { key: { "__proto__": null } })', + 'ObjectCreate(null, { key: { "__proto__": null } })', + 'ObjectDefineProperties({}, { key: { \'__proto__\': null } })', + 'ObjectCreate(null, { key: { \'__proto__\': null } })', + 'ObjectDefineProperty({}, "key", ObjectCreate(null))', + 'ReflectDefineProperty({}, "key", ObjectCreate(null))', + 'ObjectDefineProperty({}, "key", valueDescriptor)', + 'ReflectDefineProperty({}, "key", valueDescriptor)', + 'ObjectDefineProperty({}, "key", { __proto__: null })', + 'ReflectDefineProperty({}, "key", { __proto__: null })', + 'ObjectDefineProperty({}, "key", { __proto__: null, enumerable: true })', + 'ReflectDefineProperty({}, "key", { __proto__: null, enumerable: true })', + 'ObjectDefineProperty({}, "key", { "__proto__": null })', + 'ReflectDefineProperty({}, "key", { "__proto__": null })', + 'ObjectDefineProperty({}, "key", { \'__proto__\': null })', + 'ReflectDefineProperty({}, "key", { \'__proto__\': null })', + 'StringPrototypeReplace("some string", "some string", "some replacement")', + 'StringPrototypeReplaceAll("some string", "some string", "some replacement")', + 'StringPrototypeSplit("some string", "some string")', + 'new Proxy({}, otherObject)', + 'new Proxy({}, someFactory())', + 'new Proxy({}, { __proto__: null })', + 'new Proxy({}, { __proto__: null, ...{} })', + ], + invalid: [ + { + code: 'ObjectDefineProperties({}, ObjectGetOwnPropertyDescriptors({}))', + errors: [{ message: /prototype pollution/ }], + }, + { + code: 'ObjectCreate(null, ObjectGetOwnPropertyDescriptors({}))', + errors: [{ message: /prototype pollution/ }], + }, + { + code: 'ObjectDefineProperties({}, { key: {} })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectCreate(null, { key: {} })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectDefineProperties({}, { key: { [void 0]: { ...{ __proto__: null } } } })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectCreate(null, { key: { [void 0]: { ...{ __proto__: null } } } })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectDefineProperties({}, { key: { __proto__: Object.prototype } })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectCreate(null, { key: { __proto__: Object.prototype } })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectDefineProperties({}, { key: { [`__proto__`]: null } })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectCreate(null, { key: { [`__proto__`]: null } })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectDefineProperties({}, { key: { enumerable: true } })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectCreate(null, { key: { enumerable: true } })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectDefineProperty({}, "key", {})', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ReflectDefineProperty({}, "key", {})', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectDefineProperty({}, "key", ObjectGetOwnPropertyDescriptor({}, "key"))', + errors: [{ message: /prototype pollution/ }], + }, + { + code: 'ReflectDefineProperty({}, "key", ObjectGetOwnPropertyDescriptor({}, "key"))', + errors: [{ message: /prototype pollution/ }], + }, + { + code: 'ObjectDefineProperty({}, "key", ReflectGetOwnPropertyDescriptor({}, "key"))', + errors: [{ message: /prototype pollution/ }], + }, + { + code: 'ReflectDefineProperty({}, "key", ReflectGetOwnPropertyDescriptor({}, "key"))', + errors: [{ message: /prototype pollution/ }], + }, + { + code: 'ObjectDefineProperty({}, "key", { __proto__: Object.prototype })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ReflectDefineProperty({}, "key", { __proto__: Object.prototype })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectDefineProperty({}, "key", { [`__proto__`]: null })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ReflectDefineProperty({}, "key", { [`__proto__`]: null })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ObjectDefineProperty({}, "key", { enumerable: true })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'ReflectDefineProperty({}, "key", { enumerable: true })', + errors: [{ message: /null-prototype/ }], + }, + { + code: 'RegExpPrototypeTest(/some regex/, "some string")', + errors: [{ message: /looks up the "exec" property/ }], + }, + { + code: 'RegExpPrototypeSymbolMatch(/some regex/, "some string")', + errors: [{ message: /looks up the "exec" property/ }], + }, + { + code: 'RegExpPrototypeSymbolMatchAll(/some regex/, "some string")', + errors: [{ message: /looks up the "exec" property/ }], + }, + { + code: 'RegExpPrototypeSymbolSearch(/some regex/, "some string")', + errors: [{ message: /looks up the "exec" property/ }], + }, + { + code: 'StringPrototypeMatch("some string", /some regex/)', + errors: [{ message: /looks up the Symbol\.match property/ }], + }, + { + code: 'let v = StringPrototypeMatch("some string", /some regex/)', + errors: [{ message: /looks up the Symbol\.match property/ }], + }, + { + code: 'let v = StringPrototypeMatch("some string", new RegExp("some regex"))', + errors: [{ message: /looks up the Symbol\.match property/ }], + }, + { + code: 'StringPrototypeMatchAll("some string", /some regex/)', + errors: [{ message: /looks up the Symbol\.matchAll property/ }], + }, + { + code: 'let v = StringPrototypeMatchAll("some string", new RegExp("some regex"))', + errors: [{ message: /looks up the Symbol\.matchAll property/ }], + }, + { + code: 'StringPrototypeReplace("some string", /some regex/, "some replacement")', + errors: [{ message: /looks up the Symbol\.replace property/ }], + }, + { + code: 'StringPrototypeReplace("some string", new RegExp("some regex"), "some replacement")', + errors: [{ message: /looks up the Symbol\.replace property/ }], + }, + { + code: 'StringPrototypeReplaceAll("some string", /some regex/, "some replacement")', + errors: [{ message: /looks up the Symbol\.replace property/ }], + }, + { + code: 'StringPrototypeReplaceAll("some string", new RegExp("some regex"), "some replacement")', + errors: [{ message: /looks up the Symbol\.replace property/ }], + }, + { + code: 'StringPrototypeSearch("some string", /some regex/)', + errors: [{ message: /looks up the Symbol\.search property/ }], + }, + { + code: 'StringPrototypeSplit("some string", /some regex/)', + errors: [{ message: /looks up the Symbol\.split property/ }], + }, + { + code: 'new Proxy({}, {})', + errors: [{ message: /null-prototype/ }] + }, + { + code: 'new Proxy({}, { [`__proto__`]: null })', + errors: [{ message: /null-prototype/ }] + }, + { + code: 'new Proxy({}, { __proto__: Object.prototype })', + errors: [{ message: /null-prototype/ }] + }, + { + code: 'new Proxy({}, { ...{ __proto__: null } })', + errors: [{ message: /null-prototype/ }] + }, + { + code: 'PromisePrototypeCatch(promise, ()=>{})', + errors: [{ message: /\bPromisePrototypeThen\b/ }] + }, + { + code: 'PromiseAll([])', + errors: [{ message: /\bSafePromiseAll\b/ }] + }, + { + code: 'PromiseAllSettled([])', + errors: [{ message: /\bSafePromiseAllSettled\b/ }] + }, + { + code: 'PromiseAny([])', + errors: [{ message: /\bSafePromiseAny\b/ }] + }, + { + code: 'PromiseRace([])', + errors: [{ message: /\bSafePromiseRace\b/ }] + }, + ] + }); diff --git a/test/parallel/test-events-customevent.js b/test/parallel/test-events-customevent.js new file mode 100644 index 00000000000..dc4acb312c1 --- /dev/null +++ b/test/parallel/test-events-customevent.js @@ -0,0 +1,325 @@ +// Flags: --expose-internals + +'use strict'; + +const common = require('../common'); +const { ok, strictEqual, deepStrictEqual, throws } = require('node:assert'); +const { inspect } = require('node:util'); +const { Event, EventTarget, CustomEvent } = require('internal/event_target'); + +{ + ok(CustomEvent); + + // Default string + const tag = Object.prototype.toString.call(new CustomEvent('$')); + strictEqual(tag, '[object CustomEvent]'); +} + +{ + // No argument behavior - throw TypeError + throws(() => { + new CustomEvent(); + }, TypeError); + + throws(() => new CustomEvent(Symbol()), TypeError); + + // Too many arguments passed behavior - ignore additional arguments + const ev = new CustomEvent('foo', {}, {}); + strictEqual(ev.type, 'foo'); +} + +{ + const ev = new CustomEvent('$'); + strictEqual(ev.type, '$'); + strictEqual(ev.bubbles, false); + strictEqual(ev.cancelable, false); + strictEqual(ev.detail, null); +} + +{ + // Coercion to string works + strictEqual(new CustomEvent(1).type, '1'); + strictEqual(new CustomEvent(false).type, 'false'); + strictEqual(new CustomEvent({}).type, String({})); +} + +{ + const ev = new CustomEvent('$', { + detail: 56, + sweet: 'x', + cancelable: true, + }); + strictEqual(ev.type, '$'); + strictEqual(ev.bubbles, false); + strictEqual(ev.cancelable, true); + strictEqual(ev.sweet, undefined); + strictEqual(ev.detail, 56); +} + +{ + // Any types of value for `detail` are acceptable. + ['foo', 1, false, [], {}].forEach((i) => { + const ev = new CustomEvent('$', { detail: i }); + strictEqual(ev.detail, i); + }); +} + +{ + // Readonly `detail` behavior + const ev = new CustomEvent('$', { + detail: 56, + }); + strictEqual(ev.detail, 56); + try { + ev.detail = 96; + // eslint-disable-next-line no-unused-vars + } catch (error) { + common.mustCall()(); + } + strictEqual(ev.detail, 56); +} + +{ + const ev = new Event('$', { + detail: 96, + }); + strictEqual(ev.detail, undefined); +} + +// The following tests verify whether CustomEvent works the same as Event +// except carrying custom data. They're based on `parallel/test-eventtarget.js`. + +{ + const ev = new CustomEvent('$'); + strictEqual(ev.type, '$'); + strictEqual(ev.bubbles, false); + strictEqual(ev.cancelable, false); + strictEqual(ev.detail, null); + + strictEqual(ev.defaultPrevented, false); + strictEqual(typeof ev.timeStamp, 'number'); + + // Compatibility properties with the DOM + deepStrictEqual(ev.composedPath(), []); + strictEqual(ev.returnValue, true); + strictEqual(ev.composed, false); + strictEqual(ev.isTrusted, false); + strictEqual(ev.eventPhase, 0); + strictEqual(ev.cancelBubble, false); + + // Not cancelable + ev.preventDefault(); + strictEqual(ev.defaultPrevented, false); +} + +{ + // Invalid options + ['foo', 1, false].forEach((i) => + throws(() => new CustomEvent('foo', i), { + code: 'ERR_INVALID_ARG_TYPE', + name: 'TypeError', + message: + 'The "options" argument must be of type object.' + + common.invalidArgTypeHelper(i), + }), + ); +} + +{ + const ev = new CustomEvent('$'); + strictEqual(ev.constructor.name, 'CustomEvent'); + + // CustomEvent Statics + strictEqual(CustomEvent.NONE, 0); + strictEqual(CustomEvent.CAPTURING_PHASE, 1); + strictEqual(CustomEvent.AT_TARGET, 2); + strictEqual(CustomEvent.BUBBLING_PHASE, 3); + strictEqual(new CustomEvent('foo').eventPhase, CustomEvent.NONE); + + // CustomEvent is a function + strictEqual(CustomEvent.length, 1); +} + +{ + const ev = new CustomEvent('foo'); + strictEqual(ev.cancelBubble, false); + ev.cancelBubble = true; + strictEqual(ev.cancelBubble, true); +} +{ + const ev = new CustomEvent('foo'); + strictEqual(ev.cancelBubble, false); + ev.stopPropagation(); + strictEqual(ev.cancelBubble, true); +} +{ + const ev = new CustomEvent('foo'); + strictEqual(ev.cancelBubble, false); + ev.cancelBubble = 'some-truthy-value'; + strictEqual(ev.cancelBubble, true); +} +{ + const ev = new CustomEvent('foo'); + strictEqual(ev.cancelBubble, false); + ev.cancelBubble = true; + strictEqual(ev.cancelBubble, true); +} +{ + const ev = new CustomEvent('foo'); + strictEqual(ev.cancelBubble, false); + ev.stopPropagation(); + strictEqual(ev.cancelBubble, true); +} +{ + const ev = new CustomEvent('foo'); + strictEqual(ev.cancelBubble, false); + ev.cancelBubble = 'some-truthy-value'; + strictEqual(ev.cancelBubble, true); +} +{ + const ev = new CustomEvent('foo', { cancelable: true }); + strictEqual(ev.type, 'foo'); + strictEqual(ev.cancelable, true); + strictEqual(ev.defaultPrevented, false); + + ev.preventDefault(); + strictEqual(ev.defaultPrevented, true); +} +{ + const ev = new CustomEvent('foo'); + deepStrictEqual(Object.keys(ev), ['isTrusted']); +} + +// Works with EventTarget + +{ + const obj = { sweet: 'x', memory: { x: 56, y: 96 } }; + const et = new EventTarget(); + const ev = new CustomEvent('$', { detail: obj }); + const fn = common.mustCall((event) => { + strictEqual(event, ev); + deepStrictEqual(event.detail, obj); + }); + et.addEventListener('$', fn); + et.dispatchEvent(ev); +} + +{ + const eventTarget = new EventTarget(); + const event = new CustomEvent('$'); + eventTarget.dispatchEvent(event); + strictEqual(event.target, eventTarget); +} + +{ + const obj = { sweet: 'x' }; + const eventTarget = new EventTarget(); + + const ev1 = common.mustCall(function(event) { + strictEqual(event.type, 'foo'); + strictEqual(event.detail, obj); + strictEqual(this, eventTarget); + strictEqual(event.eventPhase, 2); + }, 2); + + const ev2 = { + handleEvent: common.mustCall(function(event) { + strictEqual(event.type, 'foo'); + strictEqual(event.detail, obj); + strictEqual(this, ev2); + }), + }; + + eventTarget.addEventListener('foo', ev1); + eventTarget.addEventListener('foo', ev2, { once: true }); + ok(eventTarget.dispatchEvent(new CustomEvent('foo', { detail: obj }))); + eventTarget.dispatchEvent(new CustomEvent('foo', { detail: obj })); + + eventTarget.removeEventListener('foo', ev1); + eventTarget.dispatchEvent(new CustomEvent('foo')); +} + +{ + // Same event dispatched multiple times. + const obj = { sweet: 'x' }; + const event = new CustomEvent('foo', { detail: obj }); + const eventTarget1 = new EventTarget(); + const eventTarget2 = new EventTarget(); + + eventTarget1.addEventListener( + 'foo', + common.mustCall((event) => { + strictEqual(event.eventPhase, CustomEvent.AT_TARGET); + strictEqual(event.target, eventTarget1); + strictEqual(event.detail, obj); + deepStrictEqual(event.composedPath(), [eventTarget1]); + }), + ); + + eventTarget2.addEventListener( + 'foo', + common.mustCall((event) => { + strictEqual(event.eventPhase, CustomEvent.AT_TARGET); + strictEqual(event.target, eventTarget2); + strictEqual(event.detail, obj); + deepStrictEqual(event.composedPath(), [eventTarget2]); + }), + ); + + eventTarget1.dispatchEvent(event); + strictEqual(event.eventPhase, CustomEvent.NONE); + strictEqual(event.target, eventTarget1); + deepStrictEqual(event.composedPath(), []); + + eventTarget2.dispatchEvent(event); + strictEqual(event.eventPhase, CustomEvent.NONE); + strictEqual(event.target, eventTarget2); + deepStrictEqual(event.composedPath(), []); +} + +{ + const obj = { sweet: 'x' }; + const target = new EventTarget(); + const event = new CustomEvent('foo', { detail: obj }); + + strictEqual(event.target, null); + + target.addEventListener( + 'foo', + common.mustCall((event) => { + strictEqual(event.target, target); + strictEqual(event.currentTarget, target); + strictEqual(event.srcElement, target); + strictEqual(event.detail, obj); + }), + ); + target.dispatchEvent(event); +} + +{ + // Event subclassing + const SubEvent = class extends CustomEvent {}; + const ev = new SubEvent('foo', { detail: 56 }); + const eventTarget = new EventTarget(); + const fn = common.mustCall((event) => { + strictEqual(event, ev); + strictEqual(event.detail, 56); + }); + eventTarget.addEventListener('foo', fn, { once: true }); + eventTarget.dispatchEvent(ev); +} + +// Works with inspect + +{ + const ev = new CustomEvent('test'); + const evConstructorName = inspect(ev, { + depth: -1, + }); + strictEqual(evConstructorName, 'CustomEvent'); + + const inspectResult = inspect(ev, { + depth: 1, + }); + ok(inspectResult.includes('CustomEvent')); +} diff --git a/test/parallel/test-events-once.js b/test/parallel/test-events-once.js index 56042b1ecee..6acb7956535 100644 --- a/test/parallel/test-events-once.js +++ b/test/parallel/test-events-once.js @@ -1,5 +1,5 @@ 'use strict'; -// Flags: --no-warnings +// Flags: --expose-internals --no-warnings const common = require('../common'); const { once, EventEmitter } = require('events'); @@ -9,6 +9,7 @@ const { fail, rejects, } = require('assert'); +const { kEvents } = require('internal/event_target'); async function onceAnEvent() { const ee = new EventEmitter(); @@ -65,6 +66,32 @@ async function catchesErrors() { strictEqual(ee.listenerCount('myevent'), 0); } +async function catchesErrorsWithAbortSignal() { + const ee = new EventEmitter(); + const ac = new AbortController(); + const signal = ac.signal; + + const expected = new Error('boom'); + let err; + process.nextTick(() => { + ee.emit('error', expected); + }); + + try { + const promise = once(ee, 'myevent', { signal }); + strictEqual(ee.listenerCount('error'), 1); + strictEqual(signal[kEvents].size, 1); + + await promise; + } catch (e) { + err = e; + } + strictEqual(err, expected); + strictEqual(ee.listenerCount('error'), 0); + strictEqual(ee.listenerCount('myevent'), 0); + strictEqual(signal[kEvents].size, 0); +} + async function stopListeningAfterCatchingError() { const ee = new EventEmitter(); @@ -165,7 +192,10 @@ async function abortSignalAfterEvent() { ee.emit('foo'); ac.abort(); }); - await once(ee, 'foo', { signal: ac.signal }); + const promise = once(ee, 'foo', { signal: ac.signal }); + strictEqual(ac.signal[kEvents].size, 1); + await promise; + strictEqual(ac.signal[kEvents].size, 0); } async function abortSignalRemoveListener() { @@ -221,6 +251,7 @@ Promise.all([ onceAnEventWithNullOptions(), onceAnEventWithTwoArgs(), catchesErrors(), + catchesErrorsWithAbortSignal(), stopListeningAfterCatchingError(), onceError(), onceWithEventTarget(), diff --git a/test/parallel/test-eventtarget-brandcheck.js b/test/parallel/test-eventtarget-brandcheck.js index ffb0dcdaf08..3d2fb013f68 100644 --- a/test/parallel/test-eventtarget-brandcheck.js +++ b/test/parallel/test-eventtarget-brandcheck.js @@ -6,6 +6,7 @@ const assert = require('assert'); const { Event, + CustomEvent, EventTarget, NodeEventTarget, } = require('internal/event_target'); @@ -41,10 +42,37 @@ const { }); [ - 'addEventListener', - 'removeEventListener', - 'dispatchEvent', + 'target', + 'currentTarget', + 'srcElement', + 'type', + 'cancelable', + 'defaultPrevented', + 'timeStamp', + 'returnValue', + 'bubbles', + 'composed', + 'eventPhase', + 'detail', +].forEach((i) => { + assert.throws(() => Reflect.get(CustomEvent.prototype, i, {}), { + code: 'ERR_INVALID_THIS', + }); +}); + +[ + 'stopImmediatePropagation', + 'preventDefault', + 'composedPath', + 'cancelBubble', + 'stopPropagation', ].forEach((i) => { + assert.throws(() => Reflect.apply(CustomEvent.prototype[i], [], {}), { + code: 'ERR_INVALID_THIS', + }); +}); + +['addEventListener', 'removeEventListener', 'dispatchEvent'].forEach((i) => { assert.throws(() => Reflect.apply(EventTarget.prototype[i], [], {}), { code: 'ERR_INVALID_THIS', }); diff --git a/test/parallel/test-eventtarget-whatwg-once.js b/test/parallel/test-eventtarget-whatwg-once.js deleted file mode 100644 index 9c74829d761..00000000000 --- a/test/parallel/test-eventtarget-whatwg-once.js +++ /dev/null @@ -1,132 +0,0 @@ -'use strict'; - -const common = require('../common'); - -const { - strictEqual, -} = require('assert'); - -// Manually ported from: wpt@dom/events/AddEventListenerOptions-once.html -{ - const document = new EventTarget(); - let invoked_once = false; - let invoked_normal = false; - function handler_once() { - invoked_once = true; - } - - function handler_normal() { - invoked_normal = true; - } - - document.addEventListener('test', handler_once, { once: true }); - document.addEventListener('test', handler_normal); - document.dispatchEvent(new Event('test')); - strictEqual(invoked_once, true, 'Once handler should be invoked'); - strictEqual(invoked_normal, true, 'Normal handler should be invoked'); - - invoked_once = false; - invoked_normal = false; - document.dispatchEvent(new Event('test')); - strictEqual(invoked_once, false, 'Once handler shouldn\'t be invoked again'); - strictEqual(invoked_normal, true, 'Normal handler should be invoked again'); - document.removeEventListener('test', handler_normal); -} - - -{ - // Manually ported from AddEventListenerOptions-once.html - const document = new EventTarget(); - let invoked_count = 0; - function handler() { - invoked_count++; - } - document.addEventListener('test', handler, { once: true }); - document.addEventListener('test', handler); - document.dispatchEvent(new Event('test')); - strictEqual(invoked_count, 1, 'The handler should only be added once'); - - invoked_count = 0; - document.dispatchEvent(new Event('test')); - strictEqual(invoked_count, 0, 'The handler was added as a once listener'); - - invoked_count = 0; - document.addEventListener('test', handler, { once: true }); - document.removeEventListener('test', handler); - document.dispatchEvent(new Event('test')); - strictEqual(invoked_count, 0, 'The handler should have been removed'); -} - -{ - // TODO(benjamingr) fix EventTarget recursion - common.skip('EventTarget recursion is currently broken'); - const document = new EventTarget(); - let invoked_count = 0; - function handler() { - invoked_count++; - if (invoked_count === 1) - document.dispatchEvent(new Event('test')); - } - document.addEventListener('test', handler, { once: true }); - document.dispatchEvent(new Event('test')); - strictEqual(invoked_count, 1, 'Once handler should only be invoked once'); - - invoked_count = 0; - function handler2() { - invoked_count++; - if (invoked_count === 1) - document.addEventListener('test', handler2, { once: true }); - if (invoked_count <= 2) - document.dispatchEvent(new Event('test')); - } - document.addEventListener('test', handler2, { once: true }); - document.dispatchEvent(new Event('test')); - strictEqual(invoked_count, 2, 'Once handler should only be invoked once'); -} - -// Manually converted from https://github.com/web-platform-tests/wpt/blob/master/dom/events/AddEventListenerOptions-once.html -// in order to define the `document` ourselves - -{ - const document = new EventTarget(); - - // Should only fire for first event - document.addEventListener('test', common.mustCall(1), { once: true }); - // Should fire for both events - document.addEventListener('test', common.mustCall(2)); - // Fire events - document.dispatchEvent(new Event('test')); - document.dispatchEvent(new Event('test')); -} -{ - const document = new EventTarget(); - - const handler = common.mustCall(2); - // Both should only fire on first event - document.addEventListener('test', handler.bind(), { once: true }); - document.addEventListener('test', handler.bind(), { once: true }); - // Fire events - document.dispatchEvent(new Event('test')); - document.dispatchEvent(new Event('test')); -} -{ - const document = new EventTarget(); - - const handler = common.mustCall(2); - - // Should only fire once on first event - document.addEventListener('test', common.mustCall(1), { once: true }); - // Should fire twice until removed - document.addEventListener('test', handler); - // Fire two events - document.dispatchEvent(new Event('test')); - document.dispatchEvent(new Event('test')); - - // Should only fire once on the next event - document.addEventListener('test', common.mustCall(1), { once: true }); - // The previous handler should no longer fire - document.removeEventListener('test', handler); - - // Fire final event triggering - document.dispatchEvent(new Event('test')); -} diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index 0211dc964d2..c3521d35d82 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -232,6 +232,30 @@ let asyncTest = Promise.resolve(); eventTarget.dispatchEvent(event); } +{ + const target = new EventTarget(); + const listener = {}; + // AddEventListener should not require handleEvent to be + // defined on an EventListener. + target.addEventListener('foo', listener); + listener.handleEvent = common.mustCall(function(event) { + strictEqual(event.type, 'foo'); + strictEqual(this, listener); + }); + target.dispatchEvent(new Event('foo')); +} + +{ + const target = new EventTarget(); + const listener = {}; + // do not throw + target.removeEventListener('foo', listener); + target.addEventListener('foo', listener); + target.removeEventListener('foo', listener); + listener.handleEvent = common.mustNotCall(); + target.dispatchEvent(new Event('foo')); +} + { const uncaughtException = common.mustCall((err, origin) => { strictEqual(err.message, 'boom'); @@ -308,7 +332,6 @@ let asyncTest = Promise.resolve(); [ 'foo', 1, - {}, // No handleEvent function false, ].forEach((i) => throws(() => target.addEventListener('foo', i), err(i))); } diff --git a/test/parallel/test-file-validate-mode-flag.js b/test/parallel/test-file-validate-mode-flag.js index 2ee0716de6e..bb9871ae318 100644 --- a/test/parallel/test-file-validate-mode-flag.js +++ b/test/parallel/test-file-validate-mode-flag.js @@ -13,27 +13,28 @@ const { } = require('fs'); // These should throw, not crash. +const invalid = 4_294_967_296; -assert.throws(() => open(__filename, 2176057344, common.mustNotCall()), { +assert.throws(() => open(__filename, invalid, common.mustNotCall()), { code: 'ERR_OUT_OF_RANGE' }); -assert.throws(() => open(__filename, 0, 2176057344, common.mustNotCall()), { +assert.throws(() => open(__filename, 0, invalid, common.mustNotCall()), { code: 'ERR_OUT_OF_RANGE' }); -assert.throws(() => openSync(__filename, 2176057344), { +assert.throws(() => openSync(__filename, invalid), { code: 'ERR_OUT_OF_RANGE' }); -assert.throws(() => openSync(__filename, 0, 2176057344), { +assert.throws(() => openSync(__filename, 0, invalid), { code: 'ERR_OUT_OF_RANGE' }); -assert.rejects(openPromise(__filename, 2176057344), { +assert.rejects(openPromise(__filename, invalid), { code: 'ERR_OUT_OF_RANGE' }); -assert.rejects(openPromise(__filename, 0, 2176057344), { +assert.rejects(openPromise(__filename, 0, invalid), { code: 'ERR_OUT_OF_RANGE' }); diff --git a/test/parallel/test-fs-access.js b/test/parallel/test-fs-access.js index 8cc1afe39a9..beed063c99b 100644 --- a/test/parallel/test-fs-access.js +++ b/test/parallel/test-fs-access.js @@ -145,7 +145,7 @@ assert.throws( assert.throws( () => { - fs.access(__filename, fs.F_OK, {}); + fs.access(__filename, fs.F_OK, common.mustNotMutateObjectDeep({})); }, { code: 'ERR_INVALID_CALLBACK', diff --git a/test/parallel/test-fs-append-file-sync.js b/test/parallel/test-fs-append-file-sync.js index 0070b8f6486..14f25cf2a78 100644 --- a/test/parallel/test-fs-append-file-sync.js +++ b/test/parallel/test-fs-append-file-sync.js @@ -71,17 +71,17 @@ const fileData3 = fs.readFileSync(filename3); assert.strictEqual(buf.length + currentFileData.length, fileData3.length); const filename4 = join(tmpdir.path, 'append-sync4.txt'); -fs.writeFileSync(filename4, currentFileData, { mode: m }); +fs.writeFileSync(filename4, currentFileData, common.mustNotMutateObjectDeep({ mode: m })); [ true, false, 0, 1, Infinity, () => {}, {}, [], undefined, null, ].forEach((value) => { assert.throws( - () => fs.appendFileSync(filename4, value, { mode: m }), + () => fs.appendFileSync(filename4, value, common.mustNotMutateObjectDeep({ mode: m })), { message: /data/, code: 'ERR_INVALID_ARG_TYPE' } ); }); -fs.appendFileSync(filename4, `${num}`, { mode: m }); +fs.appendFileSync(filename4, `${num}`, common.mustNotMutateObjectDeep({ mode: m })); // Windows permissions aren't Unix. if (!common.isWindows) { diff --git a/test/parallel/test-fs-constants.js b/test/parallel/test-fs-constants.js new file mode 100644 index 00000000000..49bcabd8087 --- /dev/null +++ b/test/parallel/test-fs-constants.js @@ -0,0 +1,8 @@ +'use strict'; +require('../common'); +const fs = require('fs'); +const assert = require('assert'); + +// Check if the two constants accepted by chmod() on Windows are defined. +assert.notStrictEqual(fs.constants.S_IRUSR, undefined); +assert.notStrictEqual(fs.constants.S_IWUSR, undefined); diff --git a/test/parallel/test-fs-cp.mjs b/test/parallel/test-fs-cp.mjs index dfe6254c6b6..7181bb63669 100644 --- a/test/parallel/test-fs-cp.mjs +++ b/test/parallel/test-fs-cp.mjs @@ -1,4 +1,4 @@ -import { mustCall } from '../common/index.mjs'; +import { mustCall, mustNotMutateObjectDeep } from '../common/index.mjs'; import assert from 'assert'; import fs from 'fs'; @@ -34,19 +34,19 @@ function nextdir() { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - cpSync(src, dest, { recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })); assertDirEquivalent(src, dest); } // It does not throw errors when directory is copied over and force is false. { const src = nextdir(); - mkdirSync(join(src, 'a', 'b'), { recursive: true }); + mkdirSync(join(src, 'a', 'b'), mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(src, 'README.md'), 'hello world', 'utf8'); const dest = nextdir(); - cpSync(src, dest, { recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })); const initialStat = lstatSync(join(dest, 'README.md')); - cpSync(src, dest, { force: false, recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ force: false, recursive: true })); // File should not have been copied over, so access times will be identical: assertDirEquivalent(src, dest); const finalStat = lstatSync(join(dest, 'README.md')); @@ -57,9 +57,9 @@ function nextdir() { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(dest, 'README.md'), '# Goodbye', 'utf8'); - cpSync(src, dest, { recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })); assertDirEquivalent(src, dest); const content = readFileSync(join(dest, 'README.md'), 'utf8'); assert.strictEqual(content.trim(), '# Hello'); @@ -71,8 +71,8 @@ function nextdir() { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); const destFile = join(dest, 'a/b/README2.md'); - cpSync(src, dest, { dereference: true, recursive: true }); - cpSync(src, dest, { dereference: true, recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ dereference: true, recursive: true })); + cpSync(src, dest, mustNotMutateObjectDeep({ dereference: true, recursive: true })); const stat = lstatSync(destFile); assert(stat.isFile()); } @@ -81,15 +81,15 @@ function nextdir() { // It copies file itself, rather than symlink, when dereference is true. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(src, 'foo.js'), 'foo', 'utf8'); symlinkSync(join(src, 'foo.js'), join(src, 'bar.js')); const dest = nextdir(); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); const destFile = join(dest, 'foo.js'); - cpSync(join(src, 'bar.js'), destFile, { dereference: true, recursive: true }); + cpSync(join(src, 'bar.js'), destFile, mustNotMutateObjectDeep({ dereference: true, recursive: true })); const stat = lstatSync(destFile); assert(stat.isFile()); } @@ -112,7 +112,7 @@ function nextdir() { { const src = './test/fixtures/copy/kitchen-sink'; assert.throws( - () => cpSync(src, src, { dereference: true, verbatimSymlinks: true }), + () => cpSync(src, src, mustNotMutateObjectDeep({ dereference: true, verbatimSymlinks: true })), { code: 'ERR_INCOMPATIBLE_OPTION_PAIR' } ); } @@ -121,14 +121,14 @@ function nextdir() { // It resolves relative symlinks to their absolute path by default. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(src, 'foo.js'), 'foo', 'utf8'); symlinkSync('foo.js', join(src, 'bar.js')); const dest = nextdir(); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); - cpSync(src, dest, { recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })); const link = readlinkSync(join(dest, 'bar.js')); assert.strictEqual(link, join(src, 'foo.js')); } @@ -137,14 +137,14 @@ function nextdir() { // It resolves relative symlinks when verbatimSymlinks is false. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(src, 'foo.js'), 'foo', 'utf8'); symlinkSync('foo.js', join(src, 'bar.js')); const dest = nextdir(); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); - cpSync(src, dest, { recursive: true, verbatimSymlinks: false }); + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true, verbatimSymlinks: false })); const link = readlinkSync(join(dest, 'bar.js')); assert.strictEqual(link, join(src, 'foo.js')); } @@ -153,14 +153,14 @@ function nextdir() { // It does not resolve relative symlinks when verbatimSymlinks is true. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(src, 'foo.js'), 'foo', 'utf8'); symlinkSync('foo.js', join(src, 'bar.js')); const dest = nextdir(); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); - cpSync(src, dest, { recursive: true, verbatimSymlinks: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true, verbatimSymlinks: true })); const link = readlinkSync(join(dest, 'bar.js')); assert.strictEqual(link, 'foo.js'); } @@ -178,13 +178,13 @@ function nextdir() { // It throws error if symlink in src points to location in dest. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); const dest = nextdir(); mkdirSync(dest); symlinkSync(dest, join(src, 'link')); - cpSync(src, dest, { recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })); assert.throws( - () => cpSync(src, dest, { recursive: true }), + () => cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })), { code: 'ERR_FS_CP_EINVAL' } @@ -194,14 +194,14 @@ function nextdir() { // It throws error if symlink in dest points to location in src. { const src = nextdir(); - mkdirSync(join(src, 'a', 'b'), { recursive: true }); + mkdirSync(join(src, 'a', 'b'), mustNotMutateObjectDeep({ recursive: true })); symlinkSync(join(src, 'a', 'b'), join(src, 'a', 'c')); const dest = nextdir(); - mkdirSync(join(dest, 'a'), { recursive: true }); + mkdirSync(join(dest, 'a'), mustNotMutateObjectDeep({ recursive: true })); symlinkSync(src, join(dest, 'a', 'c')); assert.throws( - () => cpSync(src, dest, { recursive: true }), + () => cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })), { code: 'ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY' } ); } @@ -209,11 +209,11 @@ function nextdir() { // It throws error if parent directory of symlink in dest points to src. { const src = nextdir(); - mkdirSync(join(src, 'a'), { recursive: true }); + mkdirSync(join(src, 'a'), mustNotMutateObjectDeep({ recursive: true })); const dest = nextdir(); // Create symlink in dest pointing to src. const destLink = join(dest, 'b'); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); symlinkSync(src, destLink); assert.throws( () => cpSync(src, join(dest, 'b', 'c')), @@ -224,7 +224,7 @@ function nextdir() { // It throws error if attempt is made to copy directory to file. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); const dest = './test/fixtures/copy/kitchen-sink/README.md'; assert.throws( () => cpSync(src, dest), @@ -236,7 +236,7 @@ function nextdir() { { const srcFile = './test/fixtures/copy/kitchen-sink/index.js'; const destFile = join(nextdir(), 'index.js'); - cpSync(srcFile, destFile, { dereference: true }); + cpSync(srcFile, destFile, mustNotMutateObjectDeep({ dereference: true })); const stat = lstatSync(destFile); assert(stat.isFile()); } @@ -256,7 +256,7 @@ function nextdir() { { const src = './test/fixtures/copy/kitchen-sink/README.md'; const dest = nextdir(); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); assert.throws( () => cpSync(src, dest), { code: 'ERR_FS_CP_NON_DIR_TO_DIR' } @@ -290,7 +290,7 @@ if (!isWindows) { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - cpSync(src, dest, { preserveTimestamps: true, recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ preserveTimestamps: true, recursive: true })); assertDirEquivalent(src, dest); const srcStat = lstatSync(join(src, 'index.js')); const destStat = lstatSync(join(dest, 'index.js')); @@ -341,7 +341,7 @@ if (!isWindows) { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - cpSync(src, dest, { recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })); assert.throws( () => cpSync(src, dest, { dereference: true, @@ -356,14 +356,14 @@ if (!isWindows) { // It throws EEXIST error if attempt is made to copy symlink over file. { const src = nextdir(); - mkdirSync(join(src, 'a', 'b'), { recursive: true }); + mkdirSync(join(src, 'a', 'b'), mustNotMutateObjectDeep({ recursive: true })); symlinkSync(join(src, 'a', 'b'), join(src, 'a', 'c')); const dest = nextdir(); - mkdirSync(join(dest, 'a'), { recursive: true }); + mkdirSync(join(dest, 'a'), mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(dest, 'a', 'c'), 'hello', 'utf8'); assert.throws( - () => cpSync(src, dest, { recursive: true }), + () => cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })), { code: 'EEXIST' } ); } @@ -371,11 +371,11 @@ if (!isWindows) { // It makes file writeable when updating timestamp, if not writeable. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); const dest = nextdir(); - mkdirSync(dest, { recursive: true }); - writeFileSync(join(src, 'foo.txt'), 'foo', { mode: 0o444 }); - cpSync(src, dest, { preserveTimestamps: true, recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); + writeFileSync(join(src, 'foo.txt'), 'foo', mustNotMutateObjectDeep({ mode: 0o444 })); + cpSync(src, dest, mustNotMutateObjectDeep({ preserveTimestamps: true, recursive: true })); assertDirEquivalent(src, dest); const srcStat = lstatSync(join(src, 'foo.txt')); const destStat = lstatSync(join(dest, 'foo.txt')); @@ -385,12 +385,12 @@ if (!isWindows) { // It copies link if it does not point to folder in src. { const src = nextdir(); - mkdirSync(join(src, 'a', 'b'), { recursive: true }); + mkdirSync(join(src, 'a', 'b'), mustNotMutateObjectDeep({ recursive: true })); symlinkSync(src, join(src, 'a', 'c')); const dest = nextdir(); - mkdirSync(join(dest, 'a'), { recursive: true }); + mkdirSync(join(dest, 'a'), mustNotMutateObjectDeep({ recursive: true })); symlinkSync(dest, join(dest, 'a', 'c')); - cpSync(src, dest, { recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })); const link = readlinkSync(join(dest, 'a', 'c')); assert.strictEqual(link, src); } @@ -399,7 +399,7 @@ if (!isWindows) { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - cpSync(pathToFileURL(src), pathToFileURL(dest), { recursive: true }); + cpSync(pathToFileURL(src), pathToFileURL(dest), mustNotMutateObjectDeep({ recursive: true })); assertDirEquivalent(src, dest); } @@ -417,7 +417,7 @@ if (!isWindows) { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - cp(src, dest, { recursive: true }, mustCall((err) => { + cp(src, dest, mustNotMutateObjectDeep({ recursive: true }), mustCall((err) => { assert.strictEqual(err, null); assertDirEquivalent(src, dest); })); @@ -426,10 +426,10 @@ if (!isWindows) { // It does not throw errors when directory is copied over and force is false. { const src = nextdir(); - mkdirSync(join(src, 'a', 'b'), { recursive: true }); + mkdirSync(join(src, 'a', 'b'), mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(src, 'README.md'), 'hello world', 'utf8'); const dest = nextdir(); - cpSync(src, dest, { dereference: true, recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ dereference: true, recursive: true })); const initialStat = lstatSync(join(dest, 'README.md')); cp(src, dest, { dereference: true, @@ -448,10 +448,10 @@ if (!isWindows) { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(dest, 'README.md'), '# Goodbye', 'utf8'); - cp(src, dest, { recursive: true }, mustCall((err) => { + cp(src, dest, mustNotMutateObjectDeep({ recursive: true }), mustCall((err) => { assert.strictEqual(err, null); assertDirEquivalent(src, dest); const content = readFileSync(join(dest, 'README.md'), 'utf8'); @@ -465,7 +465,7 @@ if (!isWindows) { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); const destFile = join(dest, 'a/b/README2.md'); - cpSync(src, dest, { dereference: true, recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ dereference: true, recursive: true })); cp(src, dest, { dereference: true, recursive: true @@ -479,15 +479,15 @@ if (!isWindows) { // It copies file itself, rather than symlink, when dereference is true. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(src, 'foo.js'), 'foo', 'utf8'); symlinkSync(join(src, 'foo.js'), join(src, 'bar.js')); const dest = nextdir(); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); const destFile = join(dest, 'foo.js'); - cp(join(src, 'bar.js'), destFile, { dereference: true }, + cp(join(src, 'bar.js'), destFile, mustNotMutateObjectDeep({ dereference: true }), mustCall((err) => { assert.strictEqual(err, null); const stat = lstatSync(destFile); @@ -507,12 +507,12 @@ if (!isWindows) { // It returns error if symlink in src points to location in dest. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); const dest = nextdir(); mkdirSync(dest); symlinkSync(dest, join(src, 'link')); - cpSync(src, dest, { recursive: true }); - cp(src, dest, { recursive: true }, mustCall((err) => { + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })); + cp(src, dest, mustNotMutateObjectDeep({ recursive: true }), mustCall((err) => { assert.strictEqual(err.code, 'ERR_FS_CP_EINVAL'); })); } @@ -520,13 +520,13 @@ if (!isWindows) { // It returns error if symlink in dest points to location in src. { const src = nextdir(); - mkdirSync(join(src, 'a', 'b'), { recursive: true }); + mkdirSync(join(src, 'a', 'b'), mustNotMutateObjectDeep({ recursive: true })); symlinkSync(join(src, 'a', 'b'), join(src, 'a', 'c')); const dest = nextdir(); - mkdirSync(join(dest, 'a'), { recursive: true }); + mkdirSync(join(dest, 'a'), mustNotMutateObjectDeep({ recursive: true })); symlinkSync(src, join(dest, 'a', 'c')); - cp(src, dest, { recursive: true }, mustCall((err) => { + cp(src, dest, mustNotMutateObjectDeep({ recursive: true }), mustCall((err) => { assert.strictEqual(err.code, 'ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY'); })); } @@ -534,11 +534,11 @@ if (!isWindows) { // It returns error if parent directory of symlink in dest points to src. { const src = nextdir(); - mkdirSync(join(src, 'a'), { recursive: true }); + mkdirSync(join(src, 'a'), mustNotMutateObjectDeep({ recursive: true })); const dest = nextdir(); // Create symlink in dest pointing to src. const destLink = join(dest, 'b'); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); symlinkSync(src, destLink); cp(src, join(dest, 'b', 'c'), mustCall((err) => { assert.strictEqual(err.code, 'ERR_FS_CP_EINVAL'); @@ -548,7 +548,7 @@ if (!isWindows) { // It returns error if attempt is made to copy directory to file. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); const dest = './test/fixtures/copy/kitchen-sink/README.md'; cp(src, dest, mustCall((err) => { assert.strictEqual(err.code, 'ERR_FS_CP_DIR_TO_NON_DIR'); @@ -559,7 +559,7 @@ if (!isWindows) { { const srcFile = './test/fixtures/copy/kitchen-sink/README.md'; const destFile = join(nextdir(), 'index.js'); - cp(srcFile, destFile, { dereference: true }, mustCall((err) => { + cp(srcFile, destFile, mustNotMutateObjectDeep({ dereference: true }), mustCall((err) => { assert.strictEqual(err, null); const stat = lstatSync(destFile); assert(stat.isFile()); @@ -579,7 +579,7 @@ if (!isWindows) { { const src = './test/fixtures/copy/kitchen-sink/README.md'; const dest = nextdir(); - mkdirSync(dest, { recursive: true }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); cp(src, dest, mustCall((err) => { assert.strictEqual(err.code, 'ERR_FS_CP_NON_DIR_TO_DIR'); })); @@ -676,7 +676,7 @@ if (!isWindows) { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - cpSync(src, dest, { recursive: true }); + cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })); cp(src, dest, { dereference: true, errorOnExist: true, @@ -690,13 +690,13 @@ if (!isWindows) { // It returns EEXIST error if attempt is made to copy symlink over file. { const src = nextdir(); - mkdirSync(join(src, 'a', 'b'), { recursive: true }); + mkdirSync(join(src, 'a', 'b'), mustNotMutateObjectDeep({ recursive: true })); symlinkSync(join(src, 'a', 'b'), join(src, 'a', 'c')); const dest = nextdir(); - mkdirSync(join(dest, 'a'), { recursive: true }); + mkdirSync(join(dest, 'a'), mustNotMutateObjectDeep({ recursive: true })); writeFileSync(join(dest, 'a', 'c'), 'hello', 'utf8'); - cp(src, dest, { recursive: true }, mustCall((err) => { + cp(src, dest, mustNotMutateObjectDeep({ recursive: true }), mustCall((err) => { assert.strictEqual(err.code, 'EEXIST'); })); } @@ -704,10 +704,10 @@ if (!isWindows) { // It makes file writeable when updating timestamp, if not writeable. { const src = nextdir(); - mkdirSync(src, { recursive: true }); + mkdirSync(src, mustNotMutateObjectDeep({ recursive: true })); const dest = nextdir(); - mkdirSync(dest, { recursive: true }); - writeFileSync(join(src, 'foo.txt'), 'foo', { mode: 0o444 }); + mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true })); + writeFileSync(join(src, 'foo.txt'), 'foo', mustNotMutateObjectDeep({ mode: 0o444 })); cp(src, dest, { preserveTimestamps: true, recursive: true, @@ -723,12 +723,12 @@ if (!isWindows) { // It copies link if it does not point to folder in src. { const src = nextdir(); - mkdirSync(join(src, 'a', 'b'), { recursive: true }); + mkdirSync(join(src, 'a', 'b'), mustNotMutateObjectDeep({ recursive: true })); symlinkSync(src, join(src, 'a', 'c')); const dest = nextdir(); - mkdirSync(join(dest, 'a'), { recursive: true }); + mkdirSync(join(dest, 'a'), mustNotMutateObjectDeep({ recursive: true })); symlinkSync(dest, join(dest, 'a', 'c')); - cp(src, dest, { recursive: true }, mustCall((err) => { + cp(src, dest, mustNotMutateObjectDeep({ recursive: true }), mustCall((err) => { assert.strictEqual(err, null); const link = readlinkSync(join(dest, 'a', 'c')); assert.strictEqual(link, src); @@ -739,7 +739,7 @@ if (!isWindows) { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - cp(pathToFileURL(src), pathToFileURL(dest), { recursive: true }, + cp(pathToFileURL(src), pathToFileURL(dest), mustNotMutateObjectDeep({ recursive: true }), mustCall((err) => { assert.strictEqual(err, null); assertDirEquivalent(src, dest); @@ -760,7 +760,7 @@ if (!isWindows) { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - const p = await fs.promises.cp(src, dest, { recursive: true }); + const p = await fs.promises.cp(src, dest, mustNotMutateObjectDeep({ recursive: true })); assert.strictEqual(p, undefined); assertDirEquivalent(src, dest); } @@ -782,7 +782,7 @@ if (!isWindows) { { const src = './test/fixtures/copy/kitchen-sink'; const dest = nextdir(); - await fs.promises.cp(src, dest, { recursive: true }); + await fs.promises.cp(src, dest, mustNotMutateObjectDeep({ recursive: true })); await assert.rejects( fs.promises.cp(src, dest, { dereference: true, @@ -824,7 +824,7 @@ function assertDirEquivalent(dir1, dir2) { } function collectEntries(dir, dirEntries) { - const newEntries = readdirSync(dir, { withFileTypes: true }); + const newEntries = readdirSync(dir, mustNotMutateObjectDeep({ withFileTypes: true })); for (const entry of newEntries) { if (entry.isDirectory()) { collectEntries(join(dir, entry.name), dirEntries); diff --git a/test/parallel/test-fs-long-path.js b/test/parallel/test-fs-long-path.js index 1cb66fa6046..3f808496ae5 100644 --- a/test/parallel/test-fs-long-path.js +++ b/test/parallel/test-fs-long-path.js @@ -43,4 +43,7 @@ console.log({ fs.writeFile(fullPath, 'ok', common.mustSucceed(() => { fs.stat(fullPath, common.mustSucceed()); + + // Tests https://github.com/nodejs/node/issues/39721 + fs.realpath.native(fullPath, common.mustSucceed()); })); diff --git a/test/parallel/test-fs-mkdir.js b/test/parallel/test-fs-mkdir.js index 4124a638a20..c0b9d146c6f 100644 --- a/test/parallel/test-fs-mkdir.js +++ b/test/parallel/test-fs-mkdir.js @@ -57,7 +57,7 @@ function nextdir() { { const pathname = path.join(tmpdir.path, nextdir()); - fs.mkdir(pathname, { mode: 0o777 }, common.mustCall(function(err) { + fs.mkdir(pathname, common.mustNotMutateObjectDeep({ mode: 0o777 }), common.mustCall(function(err) { assert.strictEqual(err, null); assert.strictEqual(fs.existsSync(pathname), true); })); @@ -67,7 +67,7 @@ function nextdir() { { const pathname = path.join(tmpdir.path, nextdir()); - fs.mkdirSync(pathname, { mode: 0o777 }); + fs.mkdirSync(pathname, common.mustNotMutateObjectDeep({ mode: 0o777 })); assert.strictEqual(fs.existsSync(pathname), true); } @@ -105,7 +105,7 @@ function nextdir() { { const pathname = path.join(tmpdir.path, nextdir(), nextdir()); - fs.mkdirSync(pathname, { recursive: true }); + fs.mkdirSync(pathname, common.mustNotMutateObjectDeep({ recursive: true })); const exists = fs.existsSync(pathname); assert.strictEqual(exists, true); @@ -142,7 +142,7 @@ function nextdir() { fs.writeFileSync(pathname, '', 'utf8'); assert.throws( - () => { fs.mkdirSync(pathname, { recursive: true }); }, + () => { fs.mkdirSync(pathname, common.mustNotMutateObjectDeep({ recursive: true })); }, { code: 'EEXIST', message: /EEXIST: .*mkdir/, @@ -176,7 +176,7 @@ function nextdir() { { const pathname = path.join(tmpdir.path, nextdir(), nextdir()); - fs.mkdir(pathname, { recursive: true }, common.mustCall(function(err) { + fs.mkdir(pathname, common.mustNotMutateObjectDeep({ recursive: true }), common.mustCall(function(err) { assert.strictEqual(err, null); assert.strictEqual(fs.existsSync(pathname), true); assert.strictEqual(fs.statSync(pathname).isDirectory(), true); @@ -189,7 +189,7 @@ function nextdir() { fs.mkdirSync(path.dirname(pathname)); fs.writeFileSync(pathname, '', 'utf8'); - fs.mkdir(pathname, { recursive: true }, common.mustCall((err) => { + fs.mkdir(pathname, common.mustNotMutateObjectDeep({ recursive: true }), common.mustCall((err) => { assert.strictEqual(err.code, 'EEXIST'); assert.strictEqual(err.syscall, 'mkdir'); assert.strictEqual(fs.statSync(pathname).isDirectory(), false); @@ -203,7 +203,7 @@ function nextdir() { fs.mkdirSync(path.dirname(filename)); fs.writeFileSync(filename, '', 'utf8'); - fs.mkdir(pathname, { recursive: true }, common.mustCall((err) => { + fs.mkdir(pathname, common.mustNotMutateObjectDeep({ recursive: true }), common.mustCall((err) => { assert.strictEqual(err.code, 'ENOTDIR'); assert.strictEqual(err.syscall, 'mkdir'); assert.strictEqual(fs.existsSync(pathname), false); @@ -223,7 +223,7 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { process.chdir(pathname); fs.rmdirSync(pathname); assert.throws( - () => { fs.mkdirSync('X', { recursive: true }); }, + () => { fs.mkdirSync('X', common.mustNotMutateObjectDeep({ recursive: true })); }, { code: 'ENOENT', message: /ENOENT: .*mkdir/, @@ -231,7 +231,7 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { syscall: 'mkdir', } ); - fs.mkdir('X', { recursive: true }, (err) => { + fs.mkdir('X', common.mustNotMutateObjectDeep({ recursive: true }), (err) => { assert.strictEqual(err.code, 'ENOENT'); assert.strictEqual(err.syscall, 'mkdir'); }); @@ -244,7 +244,7 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { ['', 1, {}, [], null, Symbol('test'), () => {}].forEach((recursive) => { const received = common.invalidArgTypeHelper(recursive); assert.throws( - () => fs.mkdir(pathname, { recursive }, common.mustNotCall()), + () => fs.mkdir(pathname, common.mustNotMutateObjectDeep({ recursive }), common.mustNotCall()), { code: 'ERR_INVALID_ARG_TYPE', name: 'TypeError', @@ -253,7 +253,7 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { } ); assert.throws( - () => fs.mkdirSync(pathname, { recursive }), + () => fs.mkdirSync(pathname, common.mustNotMutateObjectDeep({ recursive })), { code: 'ERR_INVALID_ARG_TYPE', name: 'TypeError', @@ -271,7 +271,7 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { const firstPathCreated = path.join(tmpdir.path, dir1); const pathname = path.join(tmpdir.path, dir1, dir2); - fs.mkdir(pathname, { recursive: true }, common.mustCall(function(err, path) { + fs.mkdir(pathname, common.mustNotMutateObjectDeep({ recursive: true }), common.mustCall(function(err, path) { assert.strictEqual(err, null); assert.strictEqual(fs.existsSync(pathname), true); assert.strictEqual(fs.statSync(pathname).isDirectory(), true); @@ -285,7 +285,7 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { const dir2 = nextdir(); const pathname = path.join(tmpdir.path, dir1, dir2); fs.mkdirSync(path.join(tmpdir.path, dir1)); - fs.mkdir(pathname, { recursive: true }, common.mustCall(function(err, path) { + fs.mkdir(pathname, common.mustNotMutateObjectDeep({ recursive: true }), common.mustCall(function(err, path) { assert.strictEqual(err, null); assert.strictEqual(fs.existsSync(pathname), true); assert.strictEqual(fs.statSync(pathname).isDirectory(), true); @@ -298,8 +298,8 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { const dir1 = nextdir(); const dir2 = nextdir(); const pathname = path.join(tmpdir.path, dir1, dir2); - fs.mkdirSync(path.join(tmpdir.path, dir1, dir2), { recursive: true }); - fs.mkdir(pathname, { recursive: true }, common.mustCall(function(err, path) { + fs.mkdirSync(path.join(tmpdir.path, dir1, dir2), common.mustNotMutateObjectDeep({ recursive: true })); + fs.mkdir(pathname, common.mustNotMutateObjectDeep({ recursive: true }), common.mustCall(function(err, path) { assert.strictEqual(err, null); assert.strictEqual(fs.existsSync(pathname), true); assert.strictEqual(fs.statSync(pathname).isDirectory(), true); @@ -313,7 +313,7 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { const dir2 = nextdir(); const firstPathCreated = path.join(tmpdir.path, dir1); const pathname = path.join(tmpdir.path, dir1, dir2); - const p = fs.mkdirSync(pathname, { recursive: true }); + const p = fs.mkdirSync(pathname, common.mustNotMutateObjectDeep({ recursive: true })); assert.strictEqual(fs.existsSync(pathname), true); assert.strictEqual(fs.statSync(pathname).isDirectory(), true); assert.strictEqual(p, firstPathCreated); @@ -324,8 +324,8 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { const dir1 = nextdir(); const dir2 = nextdir(); const pathname = path.join(tmpdir.path, dir1, dir2); - fs.mkdirSync(path.join(tmpdir.path, dir1), { recursive: true }); - const p = fs.mkdirSync(pathname, { recursive: true }); + fs.mkdirSync(path.join(tmpdir.path, dir1), common.mustNotMutateObjectDeep({ recursive: true })); + const p = fs.mkdirSync(pathname, common.mustNotMutateObjectDeep({ recursive: true })); assert.strictEqual(fs.existsSync(pathname), true); assert.strictEqual(fs.statSync(pathname).isDirectory(), true); assert.strictEqual(p, pathname); @@ -336,8 +336,8 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { const dir1 = nextdir(); const dir2 = nextdir(); const pathname = path.join(tmpdir.path, dir1, dir2); - fs.mkdirSync(path.join(tmpdir.path, dir1, dir2), { recursive: true }); - const p = fs.mkdirSync(pathname, { recursive: true }); + fs.mkdirSync(path.join(tmpdir.path, dir1, dir2), common.mustNotMutateObjectDeep({ recursive: true })); + const p = fs.mkdirSync(pathname, common.mustNotMutateObjectDeep({ recursive: true })); assert.strictEqual(fs.existsSync(pathname), true); assert.strictEqual(fs.statSync(pathname).isDirectory(), true); assert.strictEqual(p, undefined); @@ -350,7 +350,7 @@ if (common.isMainThread && (common.isLinux || common.isOSX)) { const firstPathCreated = path.join(tmpdir.path, dir1); const pathname = path.join(tmpdir.path, dir1, dir2); async function testCase() { - const p = await fs.promises.mkdir(pathname, { recursive: true }); + const p = await fs.promises.mkdir(pathname, common.mustNotMutateObjectDeep({ recursive: true })); assert.strictEqual(fs.existsSync(pathname), true); assert.strictEqual(fs.statSync(pathname).isDirectory(), true); assert.strictEqual(p, firstPathCreated); diff --git a/test/parallel/test-fs-opendir.js b/test/parallel/test-fs-opendir.js index 4c4681ef48e..6e53af8c175 100644 --- a/test/parallel/test-fs-opendir.js +++ b/test/parallel/test-fs-opendir.js @@ -67,18 +67,16 @@ const invalidCallbackObj = { // Check the opendir async version fs.opendir(testDir, common.mustSucceed((dir) => { let sync = true; - dir.read(common.mustCall((err, dirent) => { + dir.read(common.mustSucceed((dirent) => { assert(!sync); - assert.ifError(err); // Order is operating / file system dependent assert(files.includes(dirent.name), `'files' should include ${dirent}`); assertDirent(dirent); let syncInner = true; - dir.read(common.mustCall((err, dirent) => { + dir.read(common.mustSucceed((dirent) => { assert(!syncInner); - assert.ifError(err); dir.close(common.mustSucceed()); })); @@ -168,7 +166,7 @@ doAsyncIterBreakTest().then(common.mustCall()); async function doAsyncIterReturnTest() { const dir = await fs.promises.opendir(testDir); await (async function() { - for await (const dirent of dir) { // eslint-disable-line no-unused-vars + for await (const dirent of dir) { return; } })(); @@ -196,14 +194,14 @@ doAsyncIterThrowTest().then(common.mustCall()); // Check error thrown on invalid values of bufferSize for (const bufferSize of [-1, 0, 0.5, 1.5, Infinity, NaN]) { assert.throws( - () => fs.opendirSync(testDir, { bufferSize }), + () => fs.opendirSync(testDir, common.mustNotMutateObjectDeep({ bufferSize })), { code: 'ERR_OUT_OF_RANGE' }); } for (const bufferSize of ['', '1', null]) { assert.throws( - () => fs.opendirSync(testDir, { bufferSize }), + () => fs.opendirSync(testDir, common.mustNotMutateObjectDeep({ bufferSize })), { code: 'ERR_INVALID_ARG_TYPE' }); @@ -211,7 +209,7 @@ for (const bufferSize of ['', '1', null]) { // Check that passing a positive integer as bufferSize works { - const dir = fs.opendirSync(testDir, { bufferSize: 1024 }); + const dir = fs.opendirSync(testDir, common.mustNotMutateObjectDeep({ bufferSize: 1024 })); assertDirent(dir.readSync()); dir.close(); } diff --git a/test/parallel/test-fs-options-immutable.js b/test/parallel/test-fs-options-immutable.js index b993d776e6e..dfe05a96ef7 100644 --- a/test/parallel/test-fs-options-immutable.js +++ b/test/parallel/test-fs-options-immutable.js @@ -6,19 +6,17 @@ const common = require('../common'); // // Refer: https://github.com/nodejs/node/issues/7655 -const assert = require('assert'); const fs = require('fs'); const path = require('path'); -const errHandler = (e) => assert.ifError(e); -const options = Object.freeze({}); +const options = common.mustNotMutateObjectDeep({}); const tmpdir = require('../common/tmpdir'); tmpdir.refresh(); -fs.readFile(__filename, options, common.mustCall(errHandler)); +fs.readFile(__filename, options, common.mustSucceed()); fs.readFileSync(__filename, options); -fs.readdir(__dirname, options, common.mustCall(errHandler)); +fs.readdir(__dirname, options, common.mustSucceed()); fs.readdirSync(__dirname, options); if (common.canCreateSymLink()) { @@ -28,20 +26,20 @@ if (common.canCreateSymLink()) { fs.writeFileSync(sourceFile, ''); fs.symlinkSync(sourceFile, linkFile); - fs.readlink(linkFile, options, common.mustCall(errHandler)); + fs.readlink(linkFile, options, common.mustSucceed()); fs.readlinkSync(linkFile, options); } { const fileName = path.resolve(tmpdir.path, 'writeFile'); fs.writeFileSync(fileName, 'ABCD', options); - fs.writeFile(fileName, 'ABCD', options, common.mustCall(errHandler)); + fs.writeFile(fileName, 'ABCD', options, common.mustSucceed()); } { const fileName = path.resolve(tmpdir.path, 'appendFile'); fs.appendFileSync(fileName, 'ABCD', options); - fs.appendFile(fileName, 'ABCD', options, common.mustCall(errHandler)); + fs.appendFile(fileName, 'ABCD', options, common.mustSucceed()); } if (!common.isIBMi) { // IBMi does not support fs.watch() @@ -56,13 +54,13 @@ if (!common.isIBMi) { // IBMi does not support fs.watch() { fs.realpathSync(__filename, options); - fs.realpath(__filename, options, common.mustCall(errHandler)); + fs.realpath(__filename, options, common.mustSucceed()); } { const tempFileName = path.resolve(tmpdir.path, 'mkdtemp-'); fs.mkdtempSync(tempFileName, options); - fs.mkdtemp(tempFileName, options, common.mustCall(errHandler)); + fs.mkdtemp(tempFileName, options, common.mustSucceed()); } { diff --git a/test/parallel/test-fs-promises-exists.js b/test/parallel/test-fs-promises-exists.js index d56308257e6..b9bbeee1de9 100644 --- a/test/parallel/test-fs-promises-exists.js +++ b/test/parallel/test-fs-promises-exists.js @@ -2,5 +2,8 @@ require('../common'); const assert = require('assert'); +const fs = require('fs'); +const fsPromises = require('fs/promises'); -assert.strictEqual(require('fs/promises'), require('fs').promises); +assert.strictEqual(fsPromises, fs.promises); +assert.strictEqual(fsPromises.constants, fs.constants); diff --git a/test/parallel/test-fs-promises-file-handle-readFile.js b/test/parallel/test-fs-promises-file-handle-readFile.js index fc28dd23328..4cc2e59bb52 100644 --- a/test/parallel/test-fs-promises-file-handle-readFile.js +++ b/test/parallel/test-fs-promises-file-handle-readFile.js @@ -56,13 +56,16 @@ async function doReadAndCancel() { { const filePathForHandle = path.resolve(tmpDir, 'dogs-running.txt'); const fileHandle = await open(filePathForHandle, 'w+'); - const buffer = Buffer.from('Dogs running'.repeat(10000), 'utf8'); - fs.writeFileSync(filePathForHandle, buffer); - const signal = AbortSignal.abort(); - await assert.rejects(readFile(fileHandle, { signal }), { - name: 'AbortError' - }); - await fileHandle.close(); + try { + const buffer = Buffer.from('Dogs running'.repeat(10000), 'utf8'); + fs.writeFileSync(filePathForHandle, buffer); + const signal = AbortSignal.abort(); + await assert.rejects(readFile(fileHandle, common.mustNotMutateObjectDeep({ signal })), { + name: 'AbortError' + }); + } finally { + await fileHandle.close(); + } } // Signal aborted on first tick @@ -74,7 +77,7 @@ async function doReadAndCancel() { const controller = new AbortController(); const { signal } = controller; process.nextTick(() => controller.abort()); - await assert.rejects(readFile(fileHandle, { signal }), { + await assert.rejects(readFile(fileHandle, common.mustNotMutateObjectDeep({ signal })), { name: 'AbortError' }, 'tick-0'); await fileHandle.close(); @@ -91,7 +94,7 @@ async function doReadAndCancel() { const controller = new AbortController(); const { signal } = controller; tick(1, () => controller.abort()); - await assert.rejects(fileHandle.readFile({ signal, encoding: 'utf8' }), { + await assert.rejects(fileHandle.readFile(common.mustNotMutateObjectDeep({ signal, encoding: 'utf8' })), { name: 'AbortError' }, 'tick-1'); @@ -100,7 +103,7 @@ async function doReadAndCancel() { // Validate file size is within range for reading { - // Variable taken from https://github.com/nodejs/node/blob/master/lib/internal/fs/promises.js#L5 + // Variable taken from https://github.com/nodejs/node/blob/1377163f3351/lib/internal/fs/promises.js#L5 const kIoMaxLength = 2 ** 31 - 1; const newFile = path.resolve(tmpDir, 'dogs-running3.txt'); diff --git a/test/parallel/test-fs-promises-file-handle-write.js b/test/parallel/test-fs-promises-file-handle-write.js index 3c25842d8bf..7f3d12d4817 100644 --- a/test/parallel/test-fs-promises-file-handle-write.js +++ b/test/parallel/test-fs-promises-file-handle-write.js @@ -53,7 +53,12 @@ async function validateNonUint8ArrayWrite() { async function validateNonStringValuesWrite() { const filePathForHandle = path.resolve(tmpDir, 'tmp-non-string-write.txt'); const fileHandle = await open(filePathForHandle, 'w+'); - const nonStringValues = [123, {}, new Map()]; + const nonStringValues = [ + 123, {}, new Map(), null, undefined, 0n, () => {}, Symbol(), true, + new String('notPrimitive'), + { toString() { return 'amObject'; } }, + { [Symbol.toPrimitive]: (hint) => 'amObject' }, + ]; for (const nonStringValue of nonStringValues) { await assert.rejects( fileHandle.write(nonStringValue), diff --git a/test/parallel/test-fs-promises-write-optional-params.js b/test/parallel/test-fs-promises-write-optional-params.js new file mode 100644 index 00000000000..fb16af15e85 --- /dev/null +++ b/test/parallel/test-fs-promises-write-optional-params.js @@ -0,0 +1,104 @@ +'use strict'; + +const common = require('../common'); + +// This test ensures that filehandle.write accepts "named parameters" object +// and doesn't interpret objects as strings + +const assert = require('assert'); +const fsPromises = require('fs').promises; +const path = require('path'); +const tmpdir = require('../common/tmpdir'); + +tmpdir.refresh(); + +const dest = path.resolve(tmpdir.path, 'tmp.txt'); +const buffer = Buffer.from('zyx'); + +async function testInvalid(dest, expectedCode, ...params) { + if (params.length >= 2) { + params[1] = common.mustNotMutateObjectDeep(params[1]); + } + let fh; + try { + fh = await fsPromises.open(dest, 'w+'); + await assert.rejects( + fh.write(...params), + { code: expectedCode }); + } finally { + await fh?.close(); + } +} + +async function testValid(dest, buffer, options) { + const length = options?.length; + const offset = options?.offset; + let fh; + try { + fh = await fsPromises.open(dest, 'w+'); + const writeResult = await fh.write(buffer, options); + const writeBufCopy = Uint8Array.prototype.slice.call(writeResult.buffer); + + const readResult = await fh.read(buffer, options); + const readBufCopy = Uint8Array.prototype.slice.call(readResult.buffer); + + assert.ok(writeResult.bytesWritten >= readResult.bytesRead); + if (length !== undefined && length !== null) { + assert.strictEqual(writeResult.bytesWritten, length); + } + if (offset === undefined || offset === 0) { + assert.deepStrictEqual(writeBufCopy, readBufCopy); + } + assert.deepStrictEqual(writeResult.buffer, readResult.buffer); + } finally { + await fh?.close(); + } +} + +(async () => { + // Test if first argument is not wrongly interpreted as ArrayBufferView|string + for (const badBuffer of [ + undefined, null, true, 42, 42n, Symbol('42'), NaN, [], () => {}, + common.mustNotCall(), + common.mustNotMutateObjectDeep({}), + Promise.resolve(new Uint8Array(1)), + {}, + { buffer: 'amNotParam' }, + { string: 'amNotParam' }, + { buffer: new Uint8Array(1).buffer }, + new Date(), + new String('notPrimitive'), + { toString() { return 'amObject'; } }, + { [Symbol.toPrimitive]: (hint) => 'amObject' }, + ]) { + await testInvalid(dest, 'ERR_INVALID_ARG_TYPE', common.mustNotMutateObjectDeep(badBuffer), {}); + } + + // First argument (buffer or string) is mandatory + await testInvalid(dest, 'ERR_INVALID_ARG_TYPE'); + + // Various invalid options + await testInvalid(dest, 'ERR_OUT_OF_RANGE', buffer, { length: 5 }); + await testInvalid(dest, 'ERR_OUT_OF_RANGE', buffer, { offset: 5 }); + await testInvalid(dest, 'ERR_OUT_OF_RANGE', buffer, { length: 1, offset: 3 }); + await testInvalid(dest, 'ERR_OUT_OF_RANGE', buffer, { length: -1 }); + await testInvalid(dest, 'ERR_OUT_OF_RANGE', buffer, { offset: -1 }); + await testInvalid(dest, 'ERR_INVALID_ARG_TYPE', buffer, { offset: false }); + await testInvalid(dest, 'ERR_INVALID_ARG_TYPE', buffer, { offset: true }); + + // Test compatibility with filehandle.read counterpart + for (const options of [ + undefined, + null, + {}, + { length: 1 }, + { position: 5 }, + { length: 1, position: 5 }, + { length: 1, position: -1, offset: 2 }, + { length: null }, + { position: null }, + { offset: 1 }, + ]) { + await testValid(dest, buffer, common.mustNotMutateObjectDeep(options)); + } +})().then(common.mustCall()); diff --git a/test/parallel/test-fs-read-offset-null.js b/test/parallel/test-fs-read-offset-null.js index 27e893f781b..012c94e41e9 100644 --- a/test/parallel/test-fs-read-offset-null.js +++ b/test/parallel/test-fs-read-offset-null.js @@ -14,13 +14,22 @@ const filepath = fixtures.path('x.txt'); const buf = Buffer.alloc(1); // Reading only one character, hence buffer of one byte is enough. -// Test for callback API. +// Tests are done by making sure the first letter in buffer is +// same as first letter in file. +// 120 is the ascii code of letter x. + +// Tests for callback API. fs.open(filepath, 'r', common.mustSucceed((fd) => { fs.read(fd, { offset: null, buffer: buf }, common.mustSucceed((bytesRead, buffer) => { - // Test is done by making sure the first letter in buffer is - // same as first letter in file. - // 120 is the hex for ascii code of letter x. + assert.strictEqual(buffer[0], 120); + fs.close(fd, common.mustSucceed(() => {})); + })); +})); + +fs.open(filepath, 'r', common.mustSucceed((fd) => { + fs.read(fd, buf, { offset: null }, + common.mustSucceed((bytesRead, buffer) => { assert.strictEqual(buffer[0], 120); fs.close(fd, common.mustSucceed(() => {})); })); @@ -28,15 +37,28 @@ fs.open(filepath, 'r', common.mustSucceed((fd) => { let filehandle = null; -// Test for promise api +// Tests for promises api +(async () => { + filehandle = await fsPromises.open(filepath, 'r'); + const readObject = await filehandle.read(buf, { offset: null }); + assert.strictEqual(readObject.buffer[0], 120); +})() +.finally(() => filehandle?.close()) +.then(common.mustCall()); + +// Undocumented: omitted position works the same as position === null (async () => { filehandle = await fsPromises.open(filepath, 'r'); const readObject = await filehandle.read(buf, null, buf.length); assert.strictEqual(readObject.buffer[0], 120); })() -.then(common.mustCall()) -.finally(async () => { -// Close the file handle if it is opened - if (filehandle) - await filehandle.close(); -}); +.finally(() => filehandle?.close()) +.then(common.mustCall()); + +(async () => { + filehandle = await fsPromises.open(filepath, 'r'); + const readObject = await filehandle.read(buf, null, buf.length, 0); + assert.strictEqual(readObject.buffer[0], 120); +})() +.finally(() => filehandle?.close()) +.then(common.mustCall()); diff --git a/test/parallel/test-fs-read-optional-params.js b/test/parallel/test-fs-read-optional-params.js index aac5f51d0bb..e89f86ee5f3 100644 --- a/test/parallel/test-fs-read-optional-params.js +++ b/test/parallel/test-fs-read-optional-params.js @@ -5,32 +5,34 @@ const fixtures = require('../common/fixtures'); const fs = require('fs'); const assert = require('assert'); const filepath = fixtures.path('x.txt'); -const fd = fs.openSync(filepath, 'r'); const expected = Buffer.from('xyz\n'); const defaultBufferAsync = Buffer.alloc(16384); -const bufferAsOption = Buffer.allocUnsafe(expected.length); +const bufferAsOption = Buffer.allocUnsafe(expected.byteLength); -// Test not passing in any options object -fs.read(fd, common.mustCall((err, bytesRead, buffer) => { - assert.strictEqual(bytesRead, expected.length); - assert.deepStrictEqual(defaultBufferAsync.length, buffer.length); -})); +function testValid(message, ...options) { + const paramsMsg = `${message} (as params)`; + const paramsFilehandle = fs.openSync(filepath, 'r'); + fs.read(paramsFilehandle, ...options, common.mustSucceed((bytesRead, buffer) => { + assert.strictEqual(bytesRead, expected.byteLength, paramsMsg); + assert.deepStrictEqual(defaultBufferAsync.byteLength, buffer.byteLength, paramsMsg); + fs.closeSync(paramsFilehandle); + })); -// Test passing in an empty options object -fs.read(fd, { position: 0 }, common.mustCall((err, bytesRead, buffer) => { - assert.strictEqual(bytesRead, expected.length); - assert.deepStrictEqual(defaultBufferAsync.length, buffer.length); -})); + const optionsMsg = `${message} (as options)`; + const optionsFilehandle = fs.openSync(filepath, 'r'); + fs.read(optionsFilehandle, bufferAsOption, ...options, common.mustSucceed((bytesRead, buffer) => { + assert.strictEqual(bytesRead, expected.byteLength, optionsMsg); + assert.deepStrictEqual(bufferAsOption.byteLength, buffer.byteLength, optionsMsg); + fs.closeSync(optionsFilehandle); + })); +} -// Test passing in options -fs.read(fd, { - buffer: bufferAsOption, +testValid('Not passing in any object'); +testValid('Passing in a null', null); +testValid('Passing in an empty object', common.mustNotMutateObjectDeep({})); +testValid('Passing in an object', common.mustNotMutateObjectDeep({ offset: 0, - length: bufferAsOption.length, - position: 0 -}, - common.mustCall((err, bytesRead, buffer) => { - assert.strictEqual(bytesRead, expected.length); - assert.deepStrictEqual(bufferAsOption.length, buffer.length); - })); + length: bufferAsOption.byteLength, + position: 0, +})); diff --git a/test/parallel/test-fs-read-position-validation.mjs b/test/parallel/test-fs-read-position-validation.mjs new file mode 100644 index 00000000000..5b90a3e2c0e --- /dev/null +++ b/test/parallel/test-fs-read-position-validation.mjs @@ -0,0 +1,94 @@ +import * as common from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import fs from 'fs'; +import assert from 'assert'; + +// This test ensures that "position" argument is correctly validated + +const filepath = fixtures.path('x.txt'); + +const buffer = Buffer.from('xyz\n'); +const offset = 0; +const length = buffer.byteLength; + +// allowedErrors is an array of acceptable internal errors +// For example, on some platforms read syscall might return -EFBIG or -EOVERFLOW +async function testValid(position, allowedErrors = []) { + return new Promise((resolve, reject) => { + fs.open(filepath, 'r', common.mustSucceed((fd) => { + let callCount = 3; + const handler = common.mustCall((err) => { + callCount--; + if (err && !allowedErrors.includes(err.code)) { + fs.close(fd, common.mustSucceed()); + reject(err); + } else if (callCount === 0) { + fs.close(fd, common.mustSucceed(resolve)); + } + }, callCount); + fs.read(fd, buffer, offset, length, position, handler); + fs.read(fd, { buffer, offset, length, position }, handler); + fs.read(fd, buffer, common.mustNotMutateObjectDeep({ offset, length, position }), handler); + })); + }); +} + +async function testInvalid(code, position) { + return new Promise((resolve, reject) => { + fs.open(filepath, 'r', common.mustSucceed((fd) => { + try { + assert.throws( + () => fs.read(fd, buffer, offset, length, position, common.mustNotCall()), + { code } + ); + assert.throws( + () => fs.read(fd, { buffer, offset, length, position }, common.mustNotCall()), + { code } + ); + assert.throws( + () => fs.read(fd, buffer, common.mustNotMutateObjectDeep({ offset, length, position }), common.mustNotCall()), + { code } + ); + resolve(); + } catch (err) { + reject(err); + } finally { + fs.close(fd, common.mustSucceed()); + } + })); + }); +} + +{ + await testValid(undefined); + await testValid(null); + await testValid(-1); + await testValid(-1n); + + await testValid(0); + await testValid(0n); + await testValid(1); + await testValid(1n); + await testValid(9); + await testValid(9n); + await testValid(Number.MAX_SAFE_INTEGER, [ 'EFBIG', 'EOVERFLOW' ]); + + await testValid(2n ** 63n - 1n - BigInt(length), [ 'EFBIG', 'EOVERFLOW' ]); + await testInvalid('ERR_OUT_OF_RANGE', 2n ** 63n); + + // TODO(LiviaMedeiros): test `2n ** 63n - BigInt(length)` + + await testInvalid('ERR_OUT_OF_RANGE', NaN); + await testInvalid('ERR_OUT_OF_RANGE', -Infinity); + await testInvalid('ERR_OUT_OF_RANGE', Infinity); + await testInvalid('ERR_OUT_OF_RANGE', -0.999); + await testInvalid('ERR_OUT_OF_RANGE', -(2n ** 64n)); + await testInvalid('ERR_OUT_OF_RANGE', Number.MAX_SAFE_INTEGER + 1); + await testInvalid('ERR_OUT_OF_RANGE', Number.MAX_VALUE); + + for (const badTypeValue of [ + false, true, '1', Symbol(1), {}, [], () => {}, Promise.resolve(1), + ]) { + await testInvalid('ERR_INVALID_ARG_TYPE', badTypeValue); + } +} diff --git a/test/parallel/test-fs-read-promises-optional-params.js b/test/parallel/test-fs-read-promises-optional-params.js index 9d19eaa4115..f9007a69ba7 100644 --- a/test/parallel/test-fs-read-promises-optional-params.js +++ b/test/parallel/test-fs-read-promises-optional-params.js @@ -10,10 +10,18 @@ const fd = fs.openSync(filepath, 'r'); const expected = Buffer.from('xyz\n'); const defaultBufferAsync = Buffer.alloc(16384); +const bufferAsOption = Buffer.allocUnsafe(expected.byteLength); -read(fd, {}) +read(fd, common.mustNotMutateObjectDeep({})) .then(function({ bytesRead, buffer }) { - assert.strictEqual(bytesRead, expected.length); - assert.deepStrictEqual(defaultBufferAsync.length, buffer.length); + assert.strictEqual(bytesRead, expected.byteLength); + assert.deepStrictEqual(defaultBufferAsync.byteLength, buffer.byteLength); + }) + .then(common.mustCall()); + +read(fd, bufferAsOption, common.mustNotMutateObjectDeep({ position: 0 })) + .then(function({ bytesRead, buffer }) { + assert.strictEqual(bytesRead, expected.byteLength); + assert.deepStrictEqual(bufferAsOption.byteLength, buffer.byteLength); }) .then(common.mustCall()); diff --git a/test/parallel/test-fs-read-stream.js b/test/parallel/test-fs-read-stream.js index 243fc78afcd..bef2050378f 100644 --- a/test/parallel/test-fs-read-stream.js +++ b/test/parallel/test-fs-read-stream.js @@ -98,7 +98,7 @@ test1({ }); { - const file = fs.createReadStream(fn, { encoding: 'utf8' }); + const file = fs.createReadStream(fn, common.mustNotMutateObjectDeep({ encoding: 'utf8' })); file.length = 0; file.on('data', function(data) { assert.strictEqual(typeof data, 'string'); @@ -119,7 +119,7 @@ test1({ { const file = - fs.createReadStream(rangeFile, { bufferSize: 1, start: 1, end: 2 }); + fs.createReadStream(rangeFile, common.mustNotMutateObjectDeep({ bufferSize: 1, start: 1, end: 2 })); let contentRead = ''; file.on('data', function(data) { contentRead += data.toString('utf-8'); @@ -130,7 +130,7 @@ test1({ } { - const file = fs.createReadStream(rangeFile, { bufferSize: 1, start: 1 }); + const file = fs.createReadStream(rangeFile, common.mustNotMutateObjectDeep({ bufferSize: 1, start: 1 })); file.data = ''; file.on('data', function(data) { file.data += data.toString('utf-8'); @@ -142,7 +142,7 @@ test1({ { // Ref: https://github.com/nodejs/node-v0.x-archive/issues/2320 - const file = fs.createReadStream(rangeFile, { bufferSize: 1.23, start: 1 }); + const file = fs.createReadStream(rangeFile, common.mustNotMutateObjectDeep({ bufferSize: 1.23, start: 1 })); file.data = ''; file.on('data', function(data) { file.data += data.toString('utf-8'); @@ -154,7 +154,7 @@ test1({ assert.throws( () => { - fs.createReadStream(rangeFile, { start: 10, end: 2 }); + fs.createReadStream(rangeFile, common.mustNotMutateObjectDeep({ start: 10, end: 2 })); }, { code: 'ERR_OUT_OF_RANGE', @@ -164,7 +164,7 @@ assert.throws( }); { - const stream = fs.createReadStream(rangeFile, { start: 0, end: 0 }); + const stream = fs.createReadStream(rangeFile, common.mustNotMutateObjectDeep({ start: 0, end: 0 })); stream.data = ''; stream.on('data', function(chunk) { @@ -178,7 +178,7 @@ assert.throws( { // Verify that end works when start is not specified. - const stream = new fs.createReadStream(rangeFile, { end: 1 }); + const stream = new fs.createReadStream(rangeFile, common.mustNotMutateObjectDeep({ end: 1 })); stream.data = ''; stream.on('data', function(chunk) { @@ -199,7 +199,7 @@ if (!common.isWindows) { const mkfifoResult = child_process.spawnSync('mkfifo', [filename]); if (!mkfifoResult.error) { child_process.exec(`echo "xyz foobar" > '${filename}'`); - const stream = new fs.createReadStream(filename, { end: 1 }); + const stream = new fs.createReadStream(filename, common.mustNotMutateObjectDeep({ end: 1 })); stream.data = ''; stream.on('data', function(chunk) { @@ -223,7 +223,7 @@ if (!common.isWindows) { } { - let file = fs.createReadStream(rangeFile, { autoClose: false }); + let file = fs.createReadStream(rangeFile, common.mustNotMutateObjectDeep({ autoClose: false })); let data = ''; file.on('data', function(chunk) { data += chunk; }); file.on('end', common.mustCall(function() { @@ -237,7 +237,7 @@ if (!common.isWindows) { function fileNext() { // This will tell us if the fd is usable again or not. - file = fs.createReadStream(null, { fd: file.fd, start: 0 }); + file = fs.createReadStream(null, common.mustNotMutateObjectDeep({ fd: file.fd, start: 0 })); file.data = ''; file.on('data', function(data) { file.data += data; @@ -254,7 +254,7 @@ if (!common.isWindows) { { // Just to make sure autoClose won't close the stream because of error. - const file = fs.createReadStream(null, { fd: 13337, autoClose: false }); + const file = fs.createReadStream(null, common.mustNotMutateObjectDeep({ fd: 13337, autoClose: false })); file.on('data', common.mustNotCall()); file.on('error', common.mustCall()); process.on('exit', function() { diff --git a/test/parallel/test-fs-readSync-optional-params.js b/test/parallel/test-fs-readSync-optional-params.js index 00f1a5531cf..5388e803776 100644 --- a/test/parallel/test-fs-readSync-optional-params.js +++ b/test/parallel/test-fs-readSync-optional-params.js @@ -1,6 +1,6 @@ 'use strict'; -require('../common'); +const { mustNotMutateObjectDeep } = require('../common'); const fixtures = require('../common/fixtures'); const fs = require('fs'); const assert = require('assert'); @@ -53,5 +53,5 @@ for (const options of [ new String('4444'), [4, 4, 4, 4], ]) { - runTest(Buffer.allocUnsafe(expected.length), options); + runTest(Buffer.allocUnsafe(expected.length), mustNotMutateObjectDeep(options)); } diff --git a/test/parallel/test-fs-readSync-position-validation.mjs b/test/parallel/test-fs-readSync-position-validation.mjs new file mode 100644 index 00000000000..93fe4be1f0b --- /dev/null +++ b/test/parallel/test-fs-readSync-position-validation.mjs @@ -0,0 +1,80 @@ +import * as common from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import fs from 'fs'; +import assert from 'assert'; + +// This test ensures that "position" argument is correctly validated + +const filepath = fixtures.path('x.txt'); + +const buffer = Buffer.from('xyz\n'); +const offset = 0; +const length = buffer.byteLength; + +// allowedErrors is an array of acceptable internal errors +// For example, on some platforms read syscall might return -EFBIG or -EOVERFLOW +function testValid(position, allowedErrors = []) { + let fdSync; + try { + fdSync = fs.openSync(filepath, 'r'); + fs.readSync(fdSync, buffer, offset, length, position); + fs.readSync(fdSync, buffer, common.mustNotMutateObjectDeep({ offset, length, position })); + } catch (err) { + if (!allowedErrors.includes(err.code)) { + assert.fail(err); + } + } finally { + if (fdSync) fs.closeSync(fdSync); + } +} + +function testInvalid(code, position, internalCatch = false) { + let fdSync; + try { + fdSync = fs.openSync(filepath, 'r'); + assert.throws( + () => fs.readSync(fdSync, buffer, offset, length, position), + { code } + ); + assert.throws( + () => fs.readSync(fdSync, buffer, common.mustNotMutateObjectDeep({ offset, length, position })), + { code } + ); + } finally { + if (fdSync) fs.closeSync(fdSync); + } +} + +{ + testValid(undefined); + testValid(null); + testValid(-1); + testValid(-1n); + + testValid(0); + testValid(0n); + testValid(1); + testValid(1n); + testValid(9); + testValid(9n); + testValid(Number.MAX_SAFE_INTEGER, [ 'EFBIG', 'EOVERFLOW' ]); + + testValid(2n ** 63n - 1n - BigInt(length), [ 'EFBIG', 'EOVERFLOW' ]); + testInvalid('ERR_OUT_OF_RANGE', 2n ** 63n); + + // TODO(LiviaMedeiros): test `2n ** 63n - BigInt(length)` + + testInvalid('ERR_OUT_OF_RANGE', NaN); + testInvalid('ERR_OUT_OF_RANGE', -Infinity); + testInvalid('ERR_OUT_OF_RANGE', Infinity); + testInvalid('ERR_OUT_OF_RANGE', -0.999); + testInvalid('ERR_OUT_OF_RANGE', -(2n ** 64n)); + testInvalid('ERR_OUT_OF_RANGE', Number.MAX_SAFE_INTEGER + 1); + testInvalid('ERR_OUT_OF_RANGE', Number.MAX_VALUE); + + for (const badTypeValue of [ + false, true, '1', Symbol(1), {}, [], () => {}, Promise.resolve(1), + ]) { + testInvalid('ERR_INVALID_ARG_TYPE', badTypeValue); + } +} diff --git a/test/parallel/test-fs-readfile-flags.js b/test/parallel/test-fs-readfile-flags.js index 2aceee25506..62b97308042 100644 --- a/test/parallel/test-fs-readfile-flags.js +++ b/test/parallel/test-fs-readfile-flags.js @@ -16,14 +16,14 @@ tmpdir.refresh(); fs.readFile( emptyFile, // With `a+` the file is created if it does not exist - { encoding: 'utf8', flag: 'a+' }, + common.mustNotMutateObjectDeep({ encoding: 'utf8', flag: 'a+' }), common.mustCall((err, data) => { assert.strictEqual(data, ''); }) ); fs.readFile( emptyFile, // Like `a+` but fails if the path exists. - { encoding: 'utf8', flag: 'ax+' }, + common.mustNotMutateObjectDeep({ encoding: 'utf8', flag: 'ax+' }), common.mustCall((err, data) => { assert.strictEqual(err.code, 'EEXIST'); }) ); } @@ -34,7 +34,7 @@ tmpdir.refresh(); fs.readFile( willBeCreated, // With `a+` the file is created if it does not exist - { encoding: 'utf8', flag: 'a+' }, + common.mustNotMutateObjectDeep({ encoding: 'utf8', flag: 'a+' }), common.mustCall((err, data) => { assert.strictEqual(data, ''); }) ); } @@ -45,7 +45,7 @@ tmpdir.refresh(); fs.readFile( willNotBeCreated, // Default flag is `r`. An exception occurs if the file does not exist. - { encoding: 'utf8' }, + common.mustNotMutateObjectDeep({ encoding: 'utf8' }), common.mustCall((err, data) => { assert.strictEqual(err.code, 'ENOENT'); }) ); } diff --git a/test/parallel/test-fs-rm.js b/test/parallel/test-fs-rm.js index 14a67345fbf..e1412b952d1 100644 --- a/test/parallel/test-fs-rm.js +++ b/test/parallel/test-fs-rm.js @@ -6,6 +6,7 @@ const assert = require('assert'); const fs = require('fs'); const path = require('path'); const { pathToFileURL } = require('url'); +const { execSync } = require('child_process'); const { validateRmOptionsSync } = require('internal/fs/utils'); @@ -15,11 +16,20 @@ let count = 0; const nextDirPath = (name = 'rm') => path.join(tmpdir.path, `${name}-${count++}`); +const isGitPresent = (() => { + try { execSync('git --version'); return true; } catch { return false; } +})(); + +function gitInit(gitDirectory) { + fs.mkdirSync(gitDirectory); + execSync('git init', common.mustNotMutateObjectDeep({ cwd: gitDirectory })); +} + function makeNonEmptyDirectory(depth, files, folders, dirname, createSymLinks) { - fs.mkdirSync(dirname, { recursive: true }); + fs.mkdirSync(dirname, common.mustNotMutateObjectDeep({ recursive: true })); fs.writeFileSync(path.join(dirname, 'text.txt'), 'hello', 'utf8'); - const options = { flag: 'wx' }; + const options = common.mustNotMutateObjectDeep({ flag: 'wx' }); for (let f = files; f > 0; f--) { fs.writeFileSync(path.join(dirname, `f-${depth}-${f}`), '', options); @@ -70,11 +80,11 @@ function removeAsync(dir) { assert.strictEqual(err.syscall, 'rm'); // Removal should fail without the recursive option set to true. - fs.rm(dir, { recursive: false }, common.mustCall((err) => { + fs.rm(dir, common.mustNotMutateObjectDeep({ recursive: false }), common.mustCall((err) => { assert.strictEqual(err.syscall, 'rm'); // Recursive removal should succeed. - fs.rm(dir, { recursive: true }, common.mustSucceed(() => { + fs.rm(dir, common.mustNotMutateObjectDeep({ recursive: true }), common.mustSucceed(() => { // Attempted removal should fail now because the directory is gone. fs.rm(dir, common.mustCall((err) => { @@ -110,7 +120,7 @@ function removeAsync(dir) { // Should fail if target does not exist fs.rm( path.join(tmpdir.path, 'noexist.txt'), - { recursive: true }, + common.mustNotMutateObjectDeep({ recursive: true }), common.mustCall((err) => { assert.strictEqual(err.code, 'ENOENT'); }) @@ -119,16 +129,26 @@ function removeAsync(dir) { // Should delete a file const filePath = path.join(tmpdir.path, 'rm-async-file.txt'); fs.writeFileSync(filePath, ''); - fs.rm(filePath, { recursive: true }, common.mustCall((err) => { + fs.rm(filePath, common.mustNotMutateObjectDeep({ recursive: true }), common.mustCall((err) => { try { assert.strictEqual(err, null); assert.strictEqual(fs.existsSync(filePath), false); } finally { - fs.rmSync(filePath, { force: true }); + fs.rmSync(filePath, common.mustNotMutateObjectDeep({ force: true })); } })); } +// Removing a .git directory should not throw an EPERM. +// Refs: https://github.com/isaacs/rimraf/issues/21. +if (isGitPresent) { + const gitDirectory = nextDirPath(); + gitInit(gitDirectory); + fs.rm(gitDirectory, common.mustNotMutateObjectDeep({ recursive: true }), common.mustSucceed(() => { + assert.strictEqual(fs.existsSync(gitDirectory), false); + })); +} + // Test the synchronous version. { const dir = nextDirPath(); @@ -139,12 +159,12 @@ function removeAsync(dir) { fs.rmSync(dir); }, { syscall: 'rm' }); assert.throws(() => { - fs.rmSync(dir, { recursive: false }); + fs.rmSync(dir, common.mustNotMutateObjectDeep({ recursive: false })); }, { syscall: 'rm' }); // Should fail if target does not exist assert.throws(() => { - fs.rmSync(path.join(tmpdir.path, 'noexist.txt'), { recursive: true }); + fs.rmSync(path.join(tmpdir.path, 'noexist.txt'), common.mustNotMutateObjectDeep({ recursive: true })); }, { code: 'ENOENT', name: 'Error', @@ -156,9 +176,9 @@ function removeAsync(dir) { fs.writeFileSync(filePath, ''); try { - fs.rmSync(filePath, { recursive: true }); + fs.rmSync(filePath, common.mustNotMutateObjectDeep({ recursive: true })); } finally { - fs.rmSync(filePath, { force: true }); + fs.rmSync(filePath, common.mustNotMutateObjectDeep({ force: true })); } // Should accept URL @@ -166,9 +186,9 @@ function removeAsync(dir) { fs.writeFileSync(fileURL, ''); try { - fs.rmSync(fileURL, { recursive: true }); + fs.rmSync(fileURL, common.mustNotMutateObjectDeep({ recursive: true })); } finally { - fs.rmSync(fileURL, { force: true }); + fs.rmSync(fileURL, common.mustNotMutateObjectDeep({ force: true })); } // Recursive removal should succeed. @@ -178,6 +198,15 @@ function removeAsync(dir) { assert.throws(() => fs.rmSync(dir), { syscall: 'stat' }); } +// Removing a .git directory should not throw an EPERM. +// Refs: https://github.com/isaacs/rimraf/issues/21. +if (isGitPresent) { + const gitDirectory = nextDirPath(); + gitInit(gitDirectory); + fs.rmSync(gitDirectory, common.mustNotMutateObjectDeep({ recursive: true })); + assert.strictEqual(fs.existsSync(gitDirectory), false); +} + // Test the Promises based version. (async () => { const dir = nextDirPath(); @@ -185,12 +214,12 @@ function removeAsync(dir) { // Removal should fail without the recursive option set to true. await assert.rejects(fs.promises.rm(dir), { syscall: 'rm' }); - await assert.rejects(fs.promises.rm(dir, { recursive: false }), { + await assert.rejects(fs.promises.rm(dir, common.mustNotMutateObjectDeep({ recursive: false })), { syscall: 'rm' }); // Recursive removal should succeed. - await fs.promises.rm(dir, { recursive: true }); + await fs.promises.rm(dir, common.mustNotMutateObjectDeep({ recursive: true })); // Attempted removal should fail now because the directory is gone. await assert.rejects(fs.promises.rm(dir), { syscall: 'stat' }); @@ -206,16 +235,16 @@ function removeAsync(dir) { }); // Should not fail if target does not exist and force option is true - await fs.promises.rm(path.join(tmpdir.path, 'noexist.txt'), { force: true }); + await fs.promises.rm(path.join(tmpdir.path, 'noexist.txt'), common.mustNotMutateObjectDeep({ force: true })); // Should delete file const filePath = path.join(tmpdir.path, 'rm-promises-file.txt'); fs.writeFileSync(filePath, ''); try { - await fs.promises.rm(filePath, { recursive: true }); + await fs.promises.rm(filePath, common.mustNotMutateObjectDeep({ recursive: true })); } finally { - fs.rmSync(filePath, { force: true }); + fs.rmSync(filePath, common.mustNotMutateObjectDeep({ force: true })); } // Should accept URL @@ -223,12 +252,23 @@ function removeAsync(dir) { fs.writeFileSync(fileURL, ''); try { - await fs.promises.rm(fileURL, { recursive: true }); + await fs.promises.rm(fileURL, common.mustNotMutateObjectDeep({ recursive: true })); } finally { - fs.rmSync(fileURL, { force: true }); + fs.rmSync(fileURL, common.mustNotMutateObjectDeep({ force: true })); } })().then(common.mustCall()); +// Removing a .git directory should not throw an EPERM. +// Refs: https://github.com/isaacs/rimraf/issues/21. +if (isGitPresent) { + (async () => { + const gitDirectory = nextDirPath(); + gitInit(gitDirectory); + await fs.promises.rm(gitDirectory, common.mustNotMutateObjectDeep({ recursive: true })); + assert.strictEqual(fs.existsSync(gitDirectory), false); + })().then(common.mustCall()); +} + // Test input validation. { const dir = nextDirPath(); diff --git a/test/parallel/test-fs-stat-bigint.js b/test/parallel/test-fs-stat-bigint.js index cffec39288d..c85e7defac2 100644 --- a/test/parallel/test-fs-stat-bigint.js +++ b/test/parallel/test-fs-stat-bigint.js @@ -96,7 +96,7 @@ function verifyStats(bigintStats, numStats, allowableDelta) { const runSyncTest = (func, arg) => { const startTime = process.hrtime.bigint(); - const bigintStats = func(arg, { bigint: true }); + const bigintStats = func(arg, common.mustNotMutateObjectDeep({ bigint: true })); const numStats = func(arg); const endTime = process.hrtime.bigint(); const allowableDelta = Math.ceil(Number(endTime - startTime) / 1e6); @@ -127,7 +127,7 @@ if (!common.isWindows) { () => fs.statSync('does_not_exist'), { code: 'ENOENT' }); assert.strictEqual( - fs.statSync('does_not_exist', { throwIfNoEntry: false }), + fs.statSync('does_not_exist', common.mustNotMutateObjectDeep({ throwIfNoEntry: false })), undefined); } @@ -136,7 +136,7 @@ if (!common.isWindows) { () => fs.lstatSync('does_not_exist'), { code: 'ENOENT' }); assert.strictEqual( - fs.lstatSync('does_not_exist', { throwIfNoEntry: false }), + fs.lstatSync('does_not_exist', common.mustNotMutateObjectDeep({ throwIfNoEntry: false })), undefined); } @@ -145,13 +145,13 @@ if (!common.isWindows) { () => fs.fstatSync(9999), { code: 'EBADF' }); assert.throws( - () => fs.fstatSync(9999, { throwIfNoEntry: false }), + () => fs.fstatSync(9999, common.mustNotMutateObjectDeep({ throwIfNoEntry: false })), { code: 'EBADF' }); } const runCallbackTest = (func, arg, done) => { const startTime = process.hrtime.bigint(); - func(arg, { bigint: true }, common.mustCall((err, bigintStats) => { + func(arg, common.mustNotMutateObjectDeep({ bigint: true }), common.mustCall((err, bigintStats) => { func(arg, common.mustCall((err, numStats) => { const endTime = process.hrtime.bigint(); const allowableDelta = Math.ceil(Number(endTime - startTime) / 1e6); @@ -183,7 +183,7 @@ if (!common.isWindows) { const runPromiseTest = async (func, arg) => { const startTime = process.hrtime.bigint(); - const bigintStats = await func(arg, { bigint: true }); + const bigintStats = await func(arg, common.mustNotMutateObjectDeep({ bigint: true })); const numStats = await func(arg); const endTime = process.hrtime.bigint(); const allowableDelta = Math.ceil(Number(endTime - startTime) / 1e6); @@ -206,7 +206,7 @@ if (!common.isWindows) { const filename = getFilename(); const handle = await promiseFs.open(filename, 'r'); const startTime = process.hrtime.bigint(); - const bigintStats = await handle.stat({ bigint: true }); + const bigintStats = await handle.stat(common.mustNotMutateObjectDeep({ bigint: true })); const numStats = await handle.stat(); const endTime = process.hrtime.bigint(); const allowableDelta = Math.ceil(Number(endTime - startTime) / 1e6); diff --git a/test/parallel/test-fs-stream-options.js b/test/parallel/test-fs-stream-options.js index f1ffaddd28b..aa76cf51ada 100644 --- a/test/parallel/test-fs-stream-options.js +++ b/test/parallel/test-fs-stream-options.js @@ -1,5 +1,5 @@ 'use strict'; -require('../common'); +const { mustNotMutateObjectDeep } = require('../common'); const assert = require('assert'); const fs = require('fs'); @@ -9,7 +9,7 @@ const fs = require('fs'); assert.throws( () => { - fs.createReadStream(null, { fd }); + fs.createReadStream(null, mustNotMutateObjectDeep({ fd })); }, { code: 'ERR_INVALID_ARG_TYPE', @@ -18,7 +18,7 @@ const fs = require('fs'); assert.throws( () => { - fs.createWriteStream(null, { fd }); + fs.createWriteStream(null, mustNotMutateObjectDeep({ fd })); }, { code: 'ERR_INVALID_ARG_TYPE', diff --git a/test/parallel/test-fs-symlink-longpath.js b/test/parallel/test-fs-symlink-longpath.js index ac15b841df9..f3586317c27 100644 --- a/test/parallel/test-fs-symlink-longpath.js +++ b/test/parallel/test-fs-symlink-longpath.js @@ -12,10 +12,10 @@ const longPath = path.join(...[tmpDir].concat(Array(30).fill('1234567890'))); fs.mkdirSync(longPath, { recursive: true }); // Test if we can have symlinks to files and folders with long filenames -const targetDirtectory = path.join(longPath, 'target-directory'); -fs.mkdirSync(targetDirtectory); +const targetDirectory = path.join(longPath, 'target-directory'); +fs.mkdirSync(targetDirectory); const pathDirectory = path.join(tmpDir, 'new-directory'); -fs.symlink(targetDirtectory, pathDirectory, 'dir', common.mustSucceed(() => { +fs.symlink(targetDirectory, pathDirectory, 'dir', common.mustSucceed(() => { assert(fs.existsSync(pathDirectory)); })); diff --git a/test/parallel/test-fs-util-validateoffsetlength.js b/test/parallel/test-fs-util-validateoffsetlength.js index 28e087d33ae..bda20f86683 100644 --- a/test/parallel/test-fs-util-validateoffsetlength.js +++ b/test/parallel/test-fs-util-validateoffsetlength.js @@ -50,7 +50,7 @@ const { ); } -// Most platforms don't allow reads or writes >= 2 GB. +// Most platforms don't allow reads or writes >= 2 GiB. // See https://github.com/libuv/libuv/pull/1501. const kIoMaxLength = 2 ** 31 - 1; diff --git a/test/parallel/test-fs-write-optional-params.js b/test/parallel/test-fs-write-optional-params.js new file mode 100644 index 00000000000..9a1e1cce738 --- /dev/null +++ b/test/parallel/test-fs-write-optional-params.js @@ -0,0 +1,111 @@ +'use strict'; + +const common = require('../common'); + +// This test ensures that fs.write accepts "named parameters" object +// and doesn't interpret objects as strings + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); +const tmpdir = require('../common/tmpdir'); +const util = require('util'); + +tmpdir.refresh(); + +const destInvalid = path.resolve(tmpdir.path, 'rwopt_invalid'); +const buffer = Buffer.from('zyx'); + +function testInvalidCb(fd, expectedCode, buffer, options, callback) { + assert.throws( + () => fs.write(fd, buffer, common.mustNotMutateObjectDeep(options), common.mustNotCall()), + { code: expectedCode } + ); + callback(0); +} + +function testValidCb(buffer, options, index, callback) { + options = common.mustNotMutateObjectDeep(options); + const length = options?.length; + const offset = options?.offset; + const dest = path.resolve(tmpdir.path, `rwopt_valid_${index}`); + fs.open(dest, 'w+', common.mustSucceed((fd) => { + fs.write(fd, buffer, options, common.mustSucceed((bytesWritten, bufferWritten) => { + const writeBufCopy = Uint8Array.prototype.slice.call(bufferWritten); + + fs.read(fd, buffer, options, common.mustSucceed((bytesRead, bufferRead) => { + const readBufCopy = Uint8Array.prototype.slice.call(bufferRead); + + assert.ok(bytesWritten >= bytesRead); + if (length !== undefined && length !== null) { + assert.strictEqual(bytesWritten, length); + } + if (offset === undefined || offset === 0) { + assert.deepStrictEqual(writeBufCopy, readBufCopy); + } + assert.deepStrictEqual(bufferWritten, bufferRead); + fs.close(fd, common.mustSucceed(callback)); + })); + })); + })); +} + +// Promisify to reduce flakiness +const testInvalid = util.promisify(testInvalidCb); +const testValid = util.promisify(testValidCb); + +async function runTests(fd) { + // Test if first argument is not wrongly interpreted as ArrayBufferView|string + for (const badBuffer of [ + undefined, null, true, 42, 42n, Symbol('42'), NaN, [], () => {}, + Promise.resolve(new Uint8Array(1)), + common.mustNotCall(), + common.mustNotMutateObjectDeep({}), + {}, + { buffer: 'amNotParam' }, + { string: 'amNotParam' }, + { buffer: new Uint8Array(1).buffer }, + new Date(), + new String('notPrimitive'), + { [Symbol.toPrimitive]: (hint) => 'amObject' }, + + // TODO(LiviaMedeiros): add the following after DEP0162 EOL + // { toString() { return 'amObject'; } }, + ]) { + await testInvalid(fd, 'ERR_INVALID_ARG_TYPE', badBuffer, {}); + } + + // First argument (buffer or string) is mandatory + await testInvalid(fd, 'ERR_INVALID_ARG_TYPE', undefined, undefined); + + // Various invalid options + await testInvalid(fd, 'ERR_OUT_OF_RANGE', buffer, { length: 5 }); + await testInvalid(fd, 'ERR_OUT_OF_RANGE', buffer, { offset: 5 }); + await testInvalid(fd, 'ERR_OUT_OF_RANGE', buffer, { length: 1, offset: 3 }); + await testInvalid(fd, 'ERR_OUT_OF_RANGE', buffer, { length: -1 }); + await testInvalid(fd, 'ERR_OUT_OF_RANGE', buffer, { offset: -1 }); + await testInvalid(fd, 'ERR_INVALID_ARG_TYPE', buffer, { offset: false }); + await testInvalid(fd, 'ERR_INVALID_ARG_TYPE', buffer, { offset: true }); + await testInvalid(fd, 'ERR_INVALID_ARG_TYPE', buffer, true); + await testInvalid(fd, 'ERR_INVALID_ARG_TYPE', buffer, '42'); + await testInvalid(fd, 'ERR_INVALID_ARG_TYPE', buffer, Symbol('42')); + + // Test compatibility with fs.read counterpart + for (const [ index, options ] of [ + null, + {}, + { length: 1 }, + { position: 5 }, + { length: 1, position: 5 }, + { length: 1, position: -1, offset: 2 }, + { length: null }, + { position: null }, + { offset: 1 }, + ].entries()) { + await testValid(buffer, options, index); + } +} + +fs.open(destInvalid, 'w+', common.mustSucceed(async (fd) => { + runTests(fd).then(common.mustCall(() => fs.close(fd, common.mustSucceed()))); +})); diff --git a/test/parallel/test-fs-write-stream-file-handle-2.js b/test/parallel/test-fs-write-stream-file-handle-2.js new file mode 100644 index 00000000000..25f68b14da7 --- /dev/null +++ b/test/parallel/test-fs-write-stream-file-handle-2.js @@ -0,0 +1,33 @@ +'use strict'; +const common = require('../common'); +const fs = require('fs'); +const path = require('path'); +const assert = require('assert'); +const tmpdir = require('../common/tmpdir'); +const file = path.join(tmpdir.path, 'write_stream_filehandle_test.txt'); +const input = 'hello world'; + +tmpdir.refresh(); + +fs.promises.open(file, 'w+').then((handle) => { + let calls = 0; + const { + write: originalWriteFunction, + writev: originalWritevFunction + } = handle; + handle.write = function write() { + calls++; + return Reflect.apply(originalWriteFunction, this, arguments); + }; + handle.writev = function writev() { + calls++; + return Reflect.apply(originalWritevFunction, this, arguments); + }; + const stream = fs.createWriteStream(null, { fd: handle }); + + stream.end(input); + stream.on('close', common.mustCall(() => { + assert(calls > 0, 'expected at least one call to fileHandle.write or ' + + 'fileHandle.writev, got 0'); + })); +}).then(common.mustCall()); diff --git a/test/parallel/test-fs-write-stream-file-handle.js b/test/parallel/test-fs-write-stream-file-handle.js index 23ddf21c50f..01c490ef5d0 100644 --- a/test/parallel/test-fs-write-stream-file-handle.js +++ b/test/parallel/test-fs-write-stream-file-handle.js @@ -19,26 +19,3 @@ fs.promises.open(file, 'w+').then((handle) => { assert.strictEqual(output, input); })); }).then(common.mustCall()); - -fs.promises.open(file, 'w+').then((handle) => { - let calls = 0; - const { - write: originalWriteFunction, - writev: originalWritevFunction - } = handle; - handle.write = function write() { - calls++; - return Reflect.apply(originalWriteFunction, this, arguments); - }; - handle.writev = function writev() { - calls++; - return Reflect.apply(originalWritevFunction, this, arguments); - }; - const stream = fs.createWriteStream(null, { fd: handle }); - - stream.end(input); - stream.on('close', common.mustCall(() => { - assert(calls > 0, 'expected at least one call to fileHandle.write or ' + - 'fileHandle.writev, got 0'); - })); -}).then(common.mustCall()); diff --git a/test/parallel/test-fs-write-sync-optional-params.js b/test/parallel/test-fs-write-sync-optional-params.js new file mode 100644 index 00000000000..eeaa9c2bbd5 --- /dev/null +++ b/test/parallel/test-fs-write-sync-optional-params.js @@ -0,0 +1,97 @@ +'use strict'; + +const common = require('../common'); + +// This test ensures that fs.writeSync accepts "named parameters" object +// and doesn't interpret objects as strings + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); +const tmpdir = require('../common/tmpdir'); + +tmpdir.refresh(); + +const dest = path.resolve(tmpdir.path, 'tmp.txt'); +const buffer = Buffer.from('zyx'); + +function testInvalid(dest, expectedCode, ...bufferAndOptions) { + if (bufferAndOptions.length >= 2) { + bufferAndOptions[1] = common.mustNotMutateObjectDeep(bufferAndOptions[1]); + } + let fd; + try { + fd = fs.openSync(dest, 'w+'); + assert.throws( + () => fs.writeSync(fd, ...bufferAndOptions), + { code: expectedCode }); + } finally { + if (fd != null) fs.closeSync(fd); + } +} + +function testValid(dest, buffer, options) { + const length = options?.length; + let fd; + try { + fd = fs.openSync(dest, 'w+'); + const bytesWritten = fs.writeSync(fd, buffer, options); + const bytesRead = fs.readSync(fd, buffer, options); + + assert.ok(bytesWritten >= bytesRead); + if (length !== undefined && length !== null) { + assert.strictEqual(bytesWritten, length); + } + } finally { + if (fd != null) fs.closeSync(fd); + } +} + +{ + // Test if second argument is not wrongly interpreted as string or options + for (const badBuffer of [ + undefined, null, true, 42, 42n, Symbol('42'), NaN, [], () => {}, + common.mustNotCall(), + common.mustNotMutateObjectDeep({}), + {}, + { buffer: 'amNotParam' }, + { string: 'amNotParam' }, + { buffer: new Uint8Array(1) }, + { buffer: new Uint8Array(1).buffer }, + Promise.resolve(new Uint8Array(1)), + new Date(), + new String('notPrimitive'), + { toString() { return 'amObject'; } }, + { [Symbol.toPrimitive]: (hint) => 'amObject' }, + ]) { + testInvalid(dest, 'ERR_INVALID_ARG_TYPE', common.mustNotMutateObjectDeep(badBuffer)); + } + + // First argument (buffer or string) is mandatory + testInvalid(dest, 'ERR_INVALID_ARG_TYPE'); + + // Various invalid options + testInvalid(dest, 'ERR_OUT_OF_RANGE', buffer, { length: 5 }); + testInvalid(dest, 'ERR_OUT_OF_RANGE', buffer, { offset: 5 }); + testInvalid(dest, 'ERR_OUT_OF_RANGE', buffer, { length: 1, offset: 3 }); + testInvalid(dest, 'ERR_OUT_OF_RANGE', buffer, { length: -1 }); + testInvalid(dest, 'ERR_OUT_OF_RANGE', buffer, { offset: -1 }); + testInvalid(dest, 'ERR_INVALID_ARG_TYPE', buffer, { offset: false }); + testInvalid(dest, 'ERR_INVALID_ARG_TYPE', buffer, { offset: true }); + + // Test compatibility with fs.readSync counterpart with reused options + for (const options of [ + undefined, + null, + {}, + { length: 1 }, + { position: 5 }, + { length: 1, position: 5 }, + { length: 1, position: -1, offset: 2 }, + { length: null }, + { position: null }, + { offset: 1 }, + ]) { + testValid(dest, buffer, common.mustNotMutateObjectDeep(options)); + } +} diff --git a/test/parallel/test-fs-write.js b/test/parallel/test-fs-write.js index 30e25b15808..c30eba28bd9 100644 --- a/test/parallel/test-fs-write.js +++ b/test/parallel/test-fs-write.js @@ -155,7 +155,11 @@ fs.open(fn4, 'w', 0o644, common.mustSucceed((fd) => { ); }); -[false, 5, {}, [], null, undefined].forEach((data) => { +[ + false, 5, {}, [], null, undefined, + new String('notPrimitive'), + { [Symbol.toPrimitive]: (hint) => 'amObject' }, +].forEach((data) => { assert.throws( () => fs.write(1, data, common.mustNotCall()), { diff --git a/test/parallel/test-gc-http-client-connaborted.js b/test/parallel/test-gc-http-client-connaborted.js index fa6bf20c176..fd276d30e2b 100644 --- a/test/parallel/test-gc-http-client-connaborted.js +++ b/test/parallel/test-gc-http-client-connaborted.js @@ -5,27 +5,27 @@ const common = require('../common'); const onGC = require('../common/ongc'); - const http = require('http'); -const todo = 500; +const os = require('os'); + +const cpus = os.cpus().length; +let createClients = true; let done = 0; let count = 0; let countGC = 0; -console.log(`We should do ${todo} requests`); - function serverHandler(req, res) { res.connection.destroy(); } const server = http.createServer(serverHandler); server.listen(0, common.mustCall(() => { - for (let i = 0; i < 10; i++) - getall(); + for (let i = 0; i < cpus; i++) + getAll(); })); -function getall() { - if (count >= todo) +function getAll() { + if (!createClients) return; const req = http.get({ @@ -37,7 +37,7 @@ function getall() { count++; onGC(req, { ongc }); - setImmediate(getall); + setImmediate(getAll); } function cb(res) { @@ -48,11 +48,18 @@ function ongc() { countGC++; } -setInterval(status, 100).unref(); +setImmediate(status); function status() { - global.gc(); - console.log('Done: %d/%d', done, todo); - console.log('Collected: %d/%d', countGC, count); - if (countGC === todo) server.close(); + if (done > 0) { + createClients = false; + global.gc(); + console.log(`done/collected/total: ${done}/${countGC}/${count}`); + if (countGC === count) { + server.close(); + return; + } + } + + setImmediate(status); } diff --git a/test/parallel/test-gc-http-client-timeout.js b/test/parallel/test-gc-http-client-timeout.js index 359f890dc39..3472e79422d 100644 --- a/test/parallel/test-gc-http-client-timeout.js +++ b/test/parallel/test-gc-http-client-timeout.js @@ -5,6 +5,8 @@ const common = require('../common'); const onGC = require('../common/ongc'); +const http = require('http'); +const os = require('os'); function serverHandler(req, res) { setTimeout(function() { @@ -14,19 +16,21 @@ function serverHandler(req, res) { }, 100); } -const http = require('http'); -const todo = 300; +const cpus = os.cpus().length; +const numRequests = 36; +let createClients = true; let done = 0; let count = 0; let countGC = 0; -console.log(`We should do ${todo} requests`); - const server = http.createServer(serverHandler); -server.listen(0, common.mustCall(getall)); +server.listen(0, common.mustCall(() => getAll(numRequests))); -function getall() { - if (count >= todo) +function getAll(requestsRemaining) { + if (!createClients) + return; + + if (requestsRemaining <= 0) return; const req = http.get({ @@ -35,18 +39,16 @@ function getall() { port: server.address().port }, cb); - req.setTimeout(10, function() { - console.log('timeout (expected)'); - }); + req.setTimeout(10, common.mustCall()); count++; onGC(req, { ongc }); - setImmediate(getall); + setImmediate(getAll, requestsRemaining - 1); } -for (let i = 0; i < 10; i++) - getall(); +for (let i = 0; i < cpus; i++) + getAll(numRequests); function cb(res) { res.resume(); @@ -57,11 +59,18 @@ function ongc() { countGC++; } -setInterval(status, 100).unref(); +setImmediate(status); function status() { - global.gc(); - console.log('Done: %d/%d', done, todo); - console.log('Collected: %d/%d', countGC, count); - if (countGC === todo) server.close(); + if (done > 0) { + createClients = false; + global.gc(); + console.log(`done/collected/total: ${done}/${countGC}/${count}`); + if (countGC === count) { + server.close(); + return; + } + } + + setImmediate(status); } diff --git a/test/parallel/test-gc-net-timeout.js b/test/parallel/test-gc-net-timeout.js index 9ba6d2bc174..6b9d51c98d0 100644 --- a/test/parallel/test-gc-net-timeout.js +++ b/test/parallel/test-gc-net-timeout.js @@ -5,6 +5,9 @@ require('../common'); const onGC = require('../common/ongc'); +const assert = require('assert'); +const net = require('net'); +const os = require('os'); function serverHandler(sock) { sock.setTimeout(120000); @@ -23,20 +26,17 @@ function serverHandler(sock) { }, 100); } -const net = require('net'); -const assert = require('assert'); -const todo = 500; +const cpus = os.cpus().length; +let createClients = true; let done = 0; let count = 0; let countGC = 0; -console.log(`We should do ${todo} requests`); - const server = net.createServer(serverHandler); -server.listen(0, getall); +server.listen(0, getAll); -function getall() { - if (count >= todo) +function getAll() { + if (!createClients) return; const req = net.connect(server.address().port); @@ -49,21 +49,28 @@ function getall() { count++; onGC(req, { ongc }); - setImmediate(getall); + setImmediate(getAll); } -for (let i = 0; i < 10; i++) - getall(); +for (let i = 0; i < cpus; i++) + getAll(); function ongc() { countGC++; } -setInterval(status, 100).unref(); +setImmediate(status); function status() { - global.gc(); - console.log('Done: %d/%d', done, todo); - console.log('Collected: %d/%d', countGC, count); - if (countGC === todo) server.close(); + if (done > 0) { + createClients = false; + global.gc(); + console.log(`done/collected/total: ${done}/${countGC}/${count}`); + if (countGC === count) { + server.close(); + return; + } + } + + setImmediate(status); } diff --git a/test/parallel/test-global-customevent.js b/test/parallel/test-global-customevent.js new file mode 100644 index 00000000000..a113631a997 --- /dev/null +++ b/test/parallel/test-global-customevent.js @@ -0,0 +1,11 @@ +// Flags: --experimental-global-customevent --expose-internals +'use strict'; + +require('../common'); +const { strictEqual, ok } = require('node:assert'); +const { CustomEvent: internalCustomEvent } = require('internal/event_target'); + +// Global +ok(CustomEvent); + +strictEqual(CustomEvent, internalCustomEvent); diff --git a/test/parallel/test-handle-wrap-hasref.js b/test/parallel/test-handle-wrap-hasref.js new file mode 100644 index 00000000000..f76194d0495 --- /dev/null +++ b/test/parallel/test-handle-wrap-hasref.js @@ -0,0 +1,136 @@ +// Flags: --expose-internals +'use strict'; + +const common = require('../common'); +const strictEqual = require('assert').strictEqual; +const { internalBinding } = require('internal/test/binding'); + +// child_process +{ + const spawn = require('child_process').spawn; + const cmd = common.isWindows ? 'rundll32' : 'ls'; + const cp = spawn(cmd); + strictEqual(cp._handle.hasRef(), + true, 'process_wrap: not initially refed'); + cp.unref(); + strictEqual(cp._handle.hasRef(), + false, 'process_wrap: unref() ineffective'); + cp.ref(); + strictEqual(cp._handle.hasRef(), + true, 'process_wrap: ref() ineffective'); + cp._handle.close(common.mustCall(() => + strictEqual(cp._handle.hasRef(), + false, 'process_wrap: not unrefed on close'))); +} + + +const dgram = require('dgram'); +const { kStateSymbol } = require('internal/dgram'); + +// dgram ipv4 +{ + const sock4 = dgram.createSocket('udp4'); + const handle = sock4[kStateSymbol].handle; + + strictEqual(handle.hasRef(), + true, 'udp_wrap: ipv4: not initially refed'); + sock4.unref(); + strictEqual(handle.hasRef(), + false, 'udp_wrap: ipv4: unref() ineffective'); + sock4.ref(); + strictEqual(handle.hasRef(), + true, 'udp_wrap: ipv4: ref() ineffective'); + handle.close(common.mustCall(() => + strictEqual(handle.hasRef(), + false, 'udp_wrap: ipv4: not unrefed on close'))); +} + + +// dgram ipv6 +{ + const sock6 = dgram.createSocket('udp6'); + const handle = sock6[kStateSymbol].handle; + + strictEqual(handle.hasRef(), + true, 'udp_wrap: ipv6: not initially refed'); + sock6.unref(); + strictEqual(handle.hasRef(), + false, 'udp_wrap: ipv6: unref() ineffective'); + sock6.ref(); + strictEqual(handle.hasRef(), + true, 'udp_wrap: ipv6: ref() ineffective'); + handle.close(common.mustCall(() => + strictEqual(handle.hasRef(), + false, 'udp_wrap: ipv6: not unrefed on close'))); +} + + +// pipe +{ + const { Pipe, constants: PipeConstants } = internalBinding('pipe_wrap'); + const handle = new Pipe(PipeConstants.SOCKET); + strictEqual(handle.hasRef(), + true, 'pipe_wrap: not initially refed'); + handle.unref(); + strictEqual(handle.hasRef(), + false, 'pipe_wrap: unref() ineffective'); + handle.ref(); + strictEqual(handle.hasRef(), + true, 'pipe_wrap: ref() ineffective'); + handle.close(common.mustCall(() => + strictEqual(handle.hasRef(), + false, 'pipe_wrap: not unrefed on close'))); +} + + +// tcp +{ + const net = require('net'); + const server = net.createServer(() => {}).listen(0); + strictEqual(server._handle.hasRef(), + true, 'tcp_wrap: not initially refed'); + strictEqual(server._unref, + false, 'tcp_wrap: _unref initially incorrect'); + server.unref(); + strictEqual(server._handle.hasRef(), + false, 'tcp_wrap: unref() ineffective'); + strictEqual(server._unref, + true, 'tcp_wrap: _unref not updated on unref()'); + server.ref(); + strictEqual(server._handle.hasRef(), + true, 'tcp_wrap: ref() ineffective'); + strictEqual(server._unref, + false, 'tcp_wrap: _unref not updated on ref()'); + server._handle.close(common.mustCall(() => + strictEqual(server._handle.hasRef(), + false, 'tcp_wrap: not unrefed on close'))); +} + +// timers +{ + strictEqual(process.getActiveResourcesInfo().filter( + (type) => type === 'Timeout').length, 0); + const timeout = setTimeout(() => {}, 500); + strictEqual(process.getActiveResourcesInfo().filter( + (type) => type === 'Timeout').length, 1); + timeout.unref(); + strictEqual(process.getActiveResourcesInfo().filter( + (type) => type === 'Timeout').length, 0); + timeout.ref(); + strictEqual(process.getActiveResourcesInfo().filter( + (type) => type === 'Timeout').length, 1); + + strictEqual(process.getActiveResourcesInfo().filter( + (type) => type === 'Immediate').length, 0); + const immediate = setImmediate(() => {}); + strictEqual(process.getActiveResourcesInfo().filter( + (type) => type === 'Immediate').length, 1); + immediate.unref(); + strictEqual(process.getActiveResourcesInfo().filter( + (type) => type === 'Immediate').length, 0); + immediate.ref(); + strictEqual(process.getActiveResourcesInfo().filter( + (type) => type === 'Immediate').length, 1); +} + +// See also test/pseudo-tty/test-handle-wrap-hasref-tty.js diff --git a/test/parallel/test-handle-wrap-isrefed.js b/test/parallel/test-handle-wrap-isrefed.js deleted file mode 100644 index d4ca0070929..00000000000 --- a/test/parallel/test-handle-wrap-isrefed.js +++ /dev/null @@ -1,136 +0,0 @@ -// Flags: --expose-internals -'use strict'; - -const common = require('../common'); -const strictEqual = require('assert').strictEqual; -const { internalBinding } = require('internal/test/binding'); - -// child_process -{ - const spawn = require('child_process').spawn; - const cmd = common.isWindows ? 'rundll32' : 'ls'; - const cp = spawn(cmd); - strictEqual(cp._handle.hasRef(), - true, 'process_wrap: not initially refed'); - cp.unref(); - strictEqual(cp._handle.hasRef(), - false, 'process_wrap: unref() ineffective'); - cp.ref(); - strictEqual(cp._handle.hasRef(), - true, 'process_wrap: ref() ineffective'); - cp._handle.close(common.mustCall(() => - strictEqual(cp._handle.hasRef(), - false, 'process_wrap: not unrefed on close'))); -} - - -const dgram = require('dgram'); -const { kStateSymbol } = require('internal/dgram'); - -// dgram ipv4 -{ - const sock4 = dgram.createSocket('udp4'); - const handle = sock4[kStateSymbol].handle; - - strictEqual(handle.hasRef(), - true, 'udp_wrap: ipv4: not initially refed'); - sock4.unref(); - strictEqual(handle.hasRef(), - false, 'udp_wrap: ipv4: unref() ineffective'); - sock4.ref(); - strictEqual(handle.hasRef(), - true, 'udp_wrap: ipv4: ref() ineffective'); - handle.close(common.mustCall(() => - strictEqual(handle.hasRef(), - false, 'udp_wrap: ipv4: not unrefed on close'))); -} - - -// dgram ipv6 -{ - const sock6 = dgram.createSocket('udp6'); - const handle = sock6[kStateSymbol].handle; - - strictEqual(handle.hasRef(), - true, 'udp_wrap: ipv6: not initially refed'); - sock6.unref(); - strictEqual(handle.hasRef(), - false, 'udp_wrap: ipv6: unref() ineffective'); - sock6.ref(); - strictEqual(handle.hasRef(), - true, 'udp_wrap: ipv6: ref() ineffective'); - handle.close(common.mustCall(() => - strictEqual(handle.hasRef(), - false, 'udp_wrap: ipv6: not unrefed on close'))); -} - - -// pipe -{ - const { Pipe, constants: PipeConstants } = internalBinding('pipe_wrap'); - const handle = new Pipe(PipeConstants.SOCKET); - strictEqual(handle.hasRef(), - true, 'pipe_wrap: not initially refed'); - handle.unref(); - strictEqual(handle.hasRef(), - false, 'pipe_wrap: unref() ineffective'); - handle.ref(); - strictEqual(handle.hasRef(), - true, 'pipe_wrap: ref() ineffective'); - handle.close(common.mustCall(() => - strictEqual(handle.hasRef(), - false, 'pipe_wrap: not unrefed on close'))); -} - - -// tcp -{ - const net = require('net'); - const server = net.createServer(() => {}).listen(0); - strictEqual(server._handle.hasRef(), - true, 'tcp_wrap: not initially refed'); - strictEqual(server._unref, - false, 'tcp_wrap: _unref initially incorrect'); - server.unref(); - strictEqual(server._handle.hasRef(), - false, 'tcp_wrap: unref() ineffective'); - strictEqual(server._unref, - true, 'tcp_wrap: _unref not updated on unref()'); - server.ref(); - strictEqual(server._handle.hasRef(), - true, 'tcp_wrap: ref() ineffective'); - strictEqual(server._unref, - false, 'tcp_wrap: _unref not updated on ref()'); - server._handle.close(common.mustCall(() => - strictEqual(server._handle.hasRef(), - false, 'tcp_wrap: not unrefed on close'))); -} - -// timers -{ - strictEqual(process.getActiveResourcesInfo().filter( - (type) => type === 'Timeout').length, 0); - const timeout = setTimeout(() => {}, 500); - strictEqual(process.getActiveResourcesInfo().filter( - (type) => type === 'Timeout').length, 1); - timeout.unref(); - strictEqual(process.getActiveResourcesInfo().filter( - (type) => type === 'Timeout').length, 0); - timeout.ref(); - strictEqual(process.getActiveResourcesInfo().filter( - (type) => type === 'Timeout').length, 1); - - strictEqual(process.getActiveResourcesInfo().filter( - (type) => type === 'Immediate').length, 0); - const immediate = setImmediate(() => {}); - strictEqual(process.getActiveResourcesInfo().filter( - (type) => type === 'Immediate').length, 1); - immediate.unref(); - strictEqual(process.getActiveResourcesInfo().filter( - (type) => type === 'Immediate').length, 0); - immediate.ref(); - strictEqual(process.getActiveResourcesInfo().filter( - (type) => type === 'Immediate').length, 1); -} - -// See also test/pseudo-tty/test-handle-wrap-isrefed-tty.js diff --git a/test/parallel/test-heap-prof-basic.js b/test/parallel/test-heap-prof-basic.js new file mode 100644 index 00000000000..34d8af9a784 --- /dev/null +++ b/test/parallel/test-heap-prof-basic.js @@ -0,0 +1,37 @@ +'use strict'; + +// Tests --heap-prof without --heap-prof-interval. Here we just verify that +// we manage to generate a profile. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + getHeapProfiles, + env +} = require('../common/prof'); + +{ + tmpdir.refresh(); + const output = spawnSync(process.execPath, [ + '--heap-prof', + fixtures.path('workload', 'allocation.js'), + ], { + cwd: tmpdir.path, + env + }); + if (output.status !== 0) { + console.log(output.stderr.toString()); + console.log(output); + } + assert.strictEqual(output.status, 0); + const profiles = getHeapProfiles(tmpdir.path); + assert.strictEqual(profiles.length, 1); +} diff --git a/test/parallel/test-heap-prof-dir-absolute.js b/test/parallel/test-heap-prof-dir-absolute.js new file mode 100644 index 00000000000..5fa22470545 --- /dev/null +++ b/test/parallel/test-heap-prof-dir-absolute.js @@ -0,0 +1,47 @@ +'use strict'; + +// This tests that --heap-prof, --heap-prof-dir and --heap-prof-name works. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + getHeapProfiles, + verifyFrames, + kHeapProfInterval, + env +} = require('../common/prof'); + +// Tests absolute --heap-prof-dir +{ + tmpdir.refresh(); + const dir = path.join(tmpdir.path, 'prof'); + const output = spawnSync(process.execPath, [ + '--heap-prof', + '--heap-prof-dir', + dir, + '--heap-prof-interval', + kHeapProfInterval, + fixtures.path('workload', 'allocation.js'), + ], { + cwd: tmpdir.path, + env + }); + if (output.status !== 0) { + console.log(output.stderr.toString()); + } + assert.strictEqual(output.status, 0); + assert(fs.existsSync(dir)); + const profiles = getHeapProfiles(dir); + assert.strictEqual(profiles.length, 1); + verifyFrames(output, profiles[0], 'runAllocation'); +} diff --git a/test/parallel/test-heap-prof-dir-name.js b/test/parallel/test-heap-prof-dir-name.js new file mode 100644 index 00000000000..ebc93748596 --- /dev/null +++ b/test/parallel/test-heap-prof-dir-name.js @@ -0,0 +1,49 @@ +'use strict'; + +// Tests --heap-prof-dir and --heap-prof-name work together. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + getHeapProfiles, + verifyFrames, + kHeapProfInterval, + env +} = require('../common/prof'); + +{ + tmpdir.refresh(); + const dir = path.join(tmpdir.path, 'prof'); + const file = path.join(dir, 'test.heapprofile'); + const output = spawnSync(process.execPath, [ + '--heap-prof', + '--heap-prof-name', + 'test.heapprofile', + '--heap-prof-dir', + dir, + '--heap-prof-interval', + kHeapProfInterval, + fixtures.path('workload', 'allocation.js'), + ], { + cwd: tmpdir.path, + env + }); + if (output.status !== 0) { + console.log(output.stderr.toString()); + } + assert.strictEqual(output.status, 0); + assert(fs.existsSync(dir)); + const profiles = getHeapProfiles(dir); + assert.deepStrictEqual(profiles, [file]); + verifyFrames(output, file, 'runAllocation'); +} diff --git a/test/parallel/test-heap-prof-dir-relative.js b/test/parallel/test-heap-prof-dir-relative.js new file mode 100644 index 00000000000..8b71856cde9 --- /dev/null +++ b/test/parallel/test-heap-prof-dir-relative.js @@ -0,0 +1,46 @@ +'use strict'; + +// Tests relative --heap-prof-dir works. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + getHeapProfiles, + verifyFrames, + kHeapProfInterval, + env +} = require('../common/prof'); + +{ + tmpdir.refresh(); + const output = spawnSync(process.execPath, [ + '--heap-prof', + '--heap-prof-dir', + 'prof', + '--heap-prof-interval', + kHeapProfInterval, + fixtures.path('workload', 'allocation.js'), + ], { + cwd: tmpdir.path, + env + }); + if (output.status !== 0) { + console.log(output.stderr.toString()); + } + assert.strictEqual(output.status, 0); + const dir = path.join(tmpdir.path, 'prof'); + assert(fs.existsSync(dir)); + const profiles = getHeapProfiles(dir); + assert.strictEqual(profiles.length, 1); + verifyFrames(output, profiles[0], 'runAllocation'); +} diff --git a/test/parallel/test-heap-prof-exec-argv.js b/test/parallel/test-heap-prof-exec-argv.js new file mode 100644 index 00000000000..02ad4430dba --- /dev/null +++ b/test/parallel/test-heap-prof-exec-argv.js @@ -0,0 +1,39 @@ +'use strict'; + +// Tests --heap-prof generates a heap profile from worker +// when execArgv is set. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + getHeapProfiles, + verifyFrames, +} = require('../common/prof'); + +{ + tmpdir.refresh(); + const output = spawnSync(process.execPath, [ + fixtures.path('workload', 'allocation-worker-argv.js'), + ], { + cwd: tmpdir.path, + env: { + ...process.env, + HEAP_PROF_INTERVAL: '128' + } + }); + if (output.status !== 0) { + console.log(output.stderr.toString()); + } + assert.strictEqual(output.status, 0); + const profiles = getHeapProfiles(tmpdir.path); + assert.strictEqual(profiles.length, 1); + verifyFrames(output, profiles[0], 'runAllocation'); +} diff --git a/test/parallel/test-heap-prof-exit.js b/test/parallel/test-heap-prof-exit.js new file mode 100644 index 00000000000..ed5073c18f4 --- /dev/null +++ b/test/parallel/test-heap-prof-exit.js @@ -0,0 +1,41 @@ +'use strict'; + +// Tests --heap-prof generates a heap profile when process.exit(55) exits +// process. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + getHeapProfiles, + verifyFrames, + kHeapProfInterval, + env +} = require('../common/prof'); + +{ + tmpdir.refresh(); + const output = spawnSync(process.execPath, [ + '--heap-prof', + '--heap-prof-interval', + kHeapProfInterval, + fixtures.path('workload', 'allocation-exit.js'), + ], { + cwd: tmpdir.path, + env + }); + if (output.status !== 55) { + console.log(output.stderr.toString()); + } + assert.strictEqual(output.status, 55); + const profiles = getHeapProfiles(tmpdir.path); + assert.strictEqual(profiles.length, 1); + verifyFrames(output, profiles[0], 'runAllocation'); +} diff --git a/test/parallel/test-heap-prof-interval.js b/test/parallel/test-heap-prof-interval.js new file mode 100644 index 00000000000..18841016a71 --- /dev/null +++ b/test/parallel/test-heap-prof-interval.js @@ -0,0 +1,56 @@ +'use strict'; + +// Tests multiple profiles generated by --heap-prof-interval are valid. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + getHeapProfiles, + findFirstFrame, + kHeapProfInterval, + env +} = require('../common/prof'); + +{ + tmpdir.refresh(); + const output = spawnSync(process.execPath, [ + '--heap-prof-interval', + kHeapProfInterval, + '--heap-prof-dir', + 'prof', + '--heap-prof', + fixtures.path('workload', 'allocation-worker.js'), + ], { + cwd: tmpdir.path, + env + }); + if (output.status !== 0) { + console.log(output.stderr.toString()); + } + assert.strictEqual(output.status, 0); + const dir = path.join(tmpdir.path, 'prof'); + assert(fs.existsSync(dir)); + const profiles = getHeapProfiles(dir); + assert.strictEqual(profiles.length, 2); + const profile1 = findFirstFrame(profiles[0], 'runAllocation'); + const profile2 = findFirstFrame(profiles[1], 'runAllocation'); + if (!profile1.frame && !profile2.frame) { + // Show native debug output and the profile for debugging. + console.log(output.stderr.toString()); + console.log('heap path: ', profiles[0]); + console.log(profile1.roots); + console.log('heap path: ', profiles[1]); + console.log(profile2.roots); + } + assert(profile1.frame || profile2.frame); +} diff --git a/test/parallel/test-heap-prof-invalid-args.js b/test/parallel/test-heap-prof-invalid-args.js new file mode 100644 index 00000000000..e35376038ec --- /dev/null +++ b/test/parallel/test-heap-prof-invalid-args.js @@ -0,0 +1,82 @@ +'use strict'; + +// Tests invalid --heap-prof CLI arguments. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + kHeapProfInterval, + env +} = require('../common/prof'); + +// Tests --heap-prof-name without --heap-prof. +{ + tmpdir.refresh(); + const output = spawnSync(process.execPath, [ + '--heap-prof-name', + 'test.heapprofile', + fixtures.path('workload', 'allocation.js'), + ], { + cwd: tmpdir.path, + env + }); + const stderr = output.stderr.toString().trim(); + if (output.status !== 9) { + console.log(stderr); + } + assert.strictEqual(output.status, 9); + assert.strictEqual( + stderr, + `${process.execPath}: --heap-prof-name must be used with --heap-prof`); +} + +// Tests --heap-prof-dir without --heap-prof. +{ + tmpdir.refresh(); + const output = spawnSync(process.execPath, [ + '--heap-prof-dir', + 'prof', + fixtures.path('workload', 'allocation.js'), + ], { + cwd: tmpdir.path, + env + }); + const stderr = output.stderr.toString().trim(); + if (output.status !== 9) { + console.log(stderr); + } + assert.strictEqual(output.status, 9); + assert.strictEqual( + stderr, + `${process.execPath}: --heap-prof-dir must be used with --heap-prof`); +} + +// Tests --heap-prof-interval without --heap-prof. +{ + tmpdir.refresh(); + const output = spawnSync(process.execPath, [ + '--heap-prof-interval', + kHeapProfInterval, + fixtures.path('workload', 'allocation.js'), + ], { + cwd: tmpdir.path, + env + }); + const stderr = output.stderr.toString().trim(); + if (output.status !== 9) { + console.log(stderr); + } + assert.strictEqual(output.status, 9); + assert.strictEqual( + stderr, + `${process.execPath}: ` + + '--heap-prof-interval must be used with --heap-prof'); +} diff --git a/test/parallel/test-heap-prof-loop-drained.js b/test/parallel/test-heap-prof-loop-drained.js new file mode 100644 index 00000000000..d0fc4c98784 --- /dev/null +++ b/test/parallel/test-heap-prof-loop-drained.js @@ -0,0 +1,41 @@ +'use strict'; + +// Tests that --heap-prof outputs heap profile when event loop is drained. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + getHeapProfiles, + verifyFrames, + kHeapProfInterval, + env, +} = require('../common/prof'); + +{ + tmpdir.refresh(); + const output = spawnSync(process.execPath, [ + '--heap-prof', + '--heap-prof-interval', + kHeapProfInterval, + fixtures.path('workload', 'allocation.js'), + ], { + cwd: tmpdir.path, + env + }); + if (output.status !== 0) { + console.log(output.stderr.toString()); + console.log(output); + } + assert.strictEqual(output.status, 0); + const profiles = getHeapProfiles(tmpdir.path); + assert.strictEqual(profiles.length, 1); + verifyFrames(output, profiles[0], 'runAllocation'); +} diff --git a/test/parallel/test-heap-prof-name.js b/test/parallel/test-heap-prof-name.js new file mode 100644 index 00000000000..a2bf6aae396 --- /dev/null +++ b/test/parallel/test-heap-prof-name.js @@ -0,0 +1,44 @@ +'use strict'; + +// Tests --heap-prof-name works. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const path = require('path'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + getHeapProfiles, + verifyFrames, + kHeapProfInterval, + env +} = require('../common/prof'); + +{ + tmpdir.refresh(); + const file = path.join(tmpdir.path, 'test.heapprofile'); + const output = spawnSync(process.execPath, [ + '--heap-prof', + '--heap-prof-name', + 'test.heapprofile', + '--heap-prof-interval', + kHeapProfInterval, + fixtures.path('workload', 'allocation.js'), + ], { + cwd: tmpdir.path, + env + }); + if (output.status !== 0) { + console.log(output.stderr.toString()); + } + assert.strictEqual(output.status, 0); + const profiles = getHeapProfiles(tmpdir.path); + assert.deepStrictEqual(profiles, [file]); + verifyFrames(output, file, 'runAllocation'); +} diff --git a/test/parallel/test-heap-prof-sigint.js b/test/parallel/test-heap-prof-sigint.js new file mode 100644 index 00000000000..ec078256c2a --- /dev/null +++ b/test/parallel/test-heap-prof-sigint.js @@ -0,0 +1,43 @@ +'use strict'; + +// Tests --heap-prof generates a heap profile when +// process.kill(process.pid, "SIGINT"); exits process. + +const common = require('../common'); + +const fixtures = require('../common/fixtures'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +const tmpdir = require('../common/tmpdir'); + +const { + getHeapProfiles, + verifyFrames, + kHeapProfInterval, + env +} = require('../common/prof'); + +{ + tmpdir.refresh(); + const output = spawnSync(process.execPath, [ + '--heap-prof', + '--heap-prof-interval', + kHeapProfInterval, + fixtures.path('workload', 'allocation-sigint.js'), + ], { + cwd: tmpdir.path, + env + }); + if (!common.isWindows) { + if (output.signal !== 'SIGINT') { + console.log(output.stderr.toString()); + } + assert.strictEqual(output.signal, 'SIGINT'); + } + const profiles = getHeapProfiles(tmpdir.path); + assert.strictEqual(profiles.length, 1); + verifyFrames(output, profiles[0], 'runAllocation'); +} diff --git a/test/parallel/test-heapsnapshot-near-heap-limit-by-api-in-worker.js b/test/parallel/test-heapsnapshot-near-heap-limit-by-api-in-worker.js new file mode 100644 index 00000000000..ac55933a471 --- /dev/null +++ b/test/parallel/test-heapsnapshot-near-heap-limit-by-api-in-worker.js @@ -0,0 +1,41 @@ +// Copy from test-heapsnapshot-near-heap-limit-worker.js +'use strict'; + +require('../common'); +const tmpdir = require('../common/tmpdir'); +const assert = require('assert'); +const { spawnSync } = require('child_process'); +const fixtures = require('../common/fixtures'); +const fs = require('fs'); + +const env = { + ...process.env, + NODE_DEBUG_NATIVE: 'diagnostics' +}; + +{ + tmpdir.refresh(); + const child = spawnSync(process.execPath, [ + fixtures.path('workload', 'grow-worker-and-set-near-heap-limit.js'), + ], { + cwd: tmpdir.path, + env: { + TEST_SNAPSHOTS: 1, + TEST_OLD_SPACE_SIZE: 50, + ...env + } + }); + console.log(child.stdout.toString()); + const stderr = child.stderr.toString(); + console.log(stderr); + const risky = /Not generating snapshots because it's too risky/.test(stderr); + if (!risky) { + // There should be one snapshot taken and then after the + // snapshot heap limit callback is popped, the OOM callback + // becomes effective. + assert(stderr.includes('ERR_WORKER_OUT_OF_MEMORY')); + const list = fs.readdirSync(tmpdir.path) + .filter((file) => file.endsWith('.heapsnapshot')); + assert.strictEqual(list.length, 1); + } +} diff --git a/test/parallel/test-http-agent-keepalive-delay.js b/test/parallel/test-http-agent-keepalive-delay.js new file mode 100644 index 00000000000..b5edd78b662 --- /dev/null +++ b/test/parallel/test-http-agent-keepalive-delay.js @@ -0,0 +1,36 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); +const { Agent } = require('_http_agent'); + +const agent = new Agent({ + keepAlive: true, + keepAliveMsecs: 1000, +}); + +const server = http.createServer(common.mustCall((req, res) => { + res.end('ok'); +})); + +server.listen(0, common.mustCall(() => { + const createConnection = agent.createConnection; + agent.createConnection = (options, ...args) => { + assert.strictEqual(options.keepAlive, true); + assert.strictEqual(options.keepAliveInitialDelay, agent.keepAliveMsecs); + return createConnection.call(agent, options, ...args); + }; + http.get({ + host: 'localhost', + port: server.address().port, + agent: agent, + path: '/' + }, common.mustCall((res) => { + // for emit end event + res.on('data', () => {}); + res.on('end', () => { + server.close(); + }); + })); +})); diff --git a/test/parallel/test-http-agent-reuse-drained-socket-only.js b/test/parallel/test-http-agent-reuse-drained-socket-only.js new file mode 100644 index 00000000000..2bd53f40eda --- /dev/null +++ b/test/parallel/test-http-agent-reuse-drained-socket-only.js @@ -0,0 +1,122 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); +const net = require('net'); + +const agent = new http.Agent({ + keepAlive: true, + maxFreeSockets: Infinity, + maxSockets: Infinity, + maxTotalSockets: Infinity, +}); + +const server = net.createServer({ + pauseOnConnect: true, +}, (sock) => { + // Do not read anything from `sock` + sock.pause(); + sock.write('HTTP/1.1 200 OK\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n'); +}); + +server.listen(0, common.mustCall(() => { + sendFstReq(server.address().port); +})); + +function sendFstReq(serverPort) { + const req = http.request({ + agent, + host: '127.0.0.1', + port: serverPort, + }, (res) => { + res.on('data', noop); + res.on('end', common.mustCall(() => { + // Agent's socket reusing code is registered to process.nextTick(), + // and will be run after this function, make sure it take effect. + setImmediate(sendSecReq, serverPort, req.socket.localPort); + })); + }); + + // Make the `req.socket` non drained, i.e. has some data queued to write to + // and accept by the kernel. In Linux and Mac, we only need to call `req.end(aLargeBuffer)`. + // However, in Windows, the mechanism of acceptance is loose, the following code is a workaround + // for Windows. + + /** + * https://docs.microsoft.com/en-US/troubleshoot/windows/win32/data-segment-tcp-winsock says + * + * Winsock uses the following rules to indicate a send completion to the application + * (depending on how the send is invoked, the completion notification could be the + * function returning from a blocking call, signaling an event, or calling a notification + * function, and so forth): + * - If the socket is still within SO_SNDBUF quota, Winsock copies the data from the application + * send and indicates the send completion to the application. + * - If the socket is beyond SO_SNDBUF quota and there's only one previously buffered send still + * in the stack kernel buffer, Winsock copies the data from the application send and indicates + * the send completion to the application. + * - If the socket is beyond SO_SNDBUF quota and there's more than one previously buffered send + * in the stack kernel buffer, Winsock copies the data from the application send. Winsock doesn't + * indicate the send completion to the application until the stack completes enough sends to put + * back the socket within SO_SNDBUF quota or only one outstanding send condition. + */ + + req.on('socket', () => { + req.socket.on('connect', () => { + // Print tcp send buffer information + console.log(process.report.getReport().libuv.filter((handle) => handle.type === 'tcp')); + + const dataLargerThanTCPSendBuf = Buffer.alloc(1024 * 1024 * 64, 0); + + req.write(dataLargerThanTCPSendBuf); + req.uncork(); + if (process.platform === 'win32') { + assert.ok(req.socket.writableLength === 0); + } + + req.write(dataLargerThanTCPSendBuf); + req.uncork(); + if (process.platform === 'win32') { + assert.ok(req.socket.writableLength === 0); + } + + req.end(dataLargerThanTCPSendBuf); + assert.ok(req.socket.writableLength > 0); + }); + }); +} + +function sendSecReq(serverPort, fstReqCliPort) { + // Make the second request, which should be sent on a new socket + // because the first socket is not drained and hence can not be reused + const req = http.request({ + agent, + host: '127.0.0.1', + port: serverPort, + }, (res) => { + res.on('data', noop); + res.on('end', common.mustCall(() => { + setImmediate(sendThrReq, serverPort, req.socket.localPort); + })); + }); + + req.on('socket', common.mustCall((sock) => { + assert.notStrictEqual(sock.localPort, fstReqCliPort); + })); + req.end(); +} + +function sendThrReq(serverPort, secReqCliPort) { + // Make the third request, the agent should reuse the second socket we just made + const req = http.request({ + agent, + host: '127.0.0.1', + port: serverPort, + }, noop); + + req.on('socket', common.mustCall((sock) => { + assert.strictEqual(sock.localPort, secReqCliPort); + process.exit(0); + })); +} + +function noop() { } diff --git a/test/parallel/test-http-content-length-mismatch.js b/test/parallel/test-http-content-length-mismatch.js new file mode 100644 index 00000000000..fc294db1640 --- /dev/null +++ b/test/parallel/test-http-content-length-mismatch.js @@ -0,0 +1,80 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); + +function shouldThrowOnMoreBytes() { + const server = http.createServer(common.mustCall((req, res) => { + res.strictContentLength = true; + res.setHeader('Content-Length', 5); + res.write('hello'); + assert.throws(() => { + res.write('a'); + }, { + code: 'ERR_HTTP_CONTENT_LENGTH_MISMATCH' + }); + res.statusCode = 200; + res.end(); + })); + + server.listen(0, () => { + const req = http.get({ + port: server.address().port, + }, common.mustCall((res) => { + res.resume(); + assert.strictEqual(res.statusCode, 200); + server.close(); + })); + req.end(); + }); +} + +function shouldNotThrow() { + const server = http.createServer(common.mustCall((req, res) => { + res.strictContentLength = true; + res.write('helloaa'); + res.statusCode = 200; + res.end('ending'); + })); + + server.listen(0, () => { + http.get({ + port: server.address().port, + }, common.mustCall((res) => { + res.resume(); + assert.strictEqual(res.statusCode, 200); + server.close(); + })); + }); +} + + +function shouldThrowOnFewerBytes() { + const server = http.createServer(common.mustCall((req, res) => { + res.strictContentLength = true; + res.setHeader('Content-Length', 5); + res.write('a'); + res.statusCode = 200; + assert.throws(() => { + res.end(); + }, { + code: 'ERR_HTTP_CONTENT_LENGTH_MISMATCH' + }); + res.end('aaaa'); + })); + + server.listen(0, () => { + http.get({ + port: server.address().port, + }, common.mustCall((res) => { + res.resume(); + assert.strictEqual(res.statusCode, 200); + server.close(); + })); + }); +} + +shouldThrowOnMoreBytes(); +shouldNotThrow(); +shouldThrowOnFewerBytes(); diff --git a/test/parallel/test-http-header-overflow.js b/test/parallel/test-http-header-overflow.js index e53f5f05f81..6abbf2bafc5 100644 --- a/test/parallel/test-http-header-overflow.js +++ b/test/parallel/test-http-header-overflow.js @@ -6,13 +6,11 @@ const assert = require('assert'); const { createServer, maxHeaderSize } = require('http'); const { createConnection } = require('net'); -const { getOptionValue } = require('internal/options'); - const CRLF = '\r\n'; const DUMMY_HEADER_NAME = 'Cookie: '; const DUMMY_HEADER_VALUE = 'a'.repeat( // Plus one is to make it 1 byte too big - maxHeaderSize - DUMMY_HEADER_NAME.length - (2 * CRLF.length) + 1 + maxHeaderSize - DUMMY_HEADER_NAME.length + 2 ); const PAYLOAD_GET = 'GET /blah HTTP/1.1'; const PAYLOAD = PAYLOAD_GET + CRLF + @@ -21,14 +19,11 @@ const PAYLOAD = PAYLOAD_GET + CRLF + const server = createServer(); server.on('connection', mustCall((socket) => { - // Legacy parser gives sligthly different response. - // This discripancy is not fixed on purpose. - const legacy = getOptionValue('--http-parser') === 'legacy'; socket.on('error', expectsError({ name: 'Error', message: 'Parse Error: Header overflow', code: 'HPE_HEADER_OVERFLOW', - bytesParsed: maxHeaderSize + PAYLOAD_GET.length - (legacy ? -1 : 0), + bytesParsed: maxHeaderSize + PAYLOAD_GET.length + (CRLF.length * 2) + 1, rawPacket: Buffer.from(PAYLOAD) })); })); diff --git a/test/parallel/test-http-invalid-te.js b/test/parallel/test-http-invalid-te.js index 0f633a74551..9ae8a87d8e1 100644 --- a/test/parallel/test-http-invalid-te.js +++ b/test/parallel/test-http-invalid-te.js @@ -13,7 +13,7 @@ Content-Type: text/plain; charset=utf-8 Host: hacker.exploit.com Connection: keep-alive Content-Length: 10 -Transfer-Encoding: chunked, eee +Transfer-Encoding: eee, chunked HELLOWORLDPOST / HTTP/1.1 Content-Type: text/plain; charset=utf-8 diff --git a/test/parallel/test-http-keep-alive-drop-requests.js b/test/parallel/test-http-keep-alive-drop-requests.js new file mode 100644 index 00000000000..2a4702d631e --- /dev/null +++ b/test/parallel/test-http-keep-alive-drop-requests.js @@ -0,0 +1,34 @@ +'use strict'; + +const common = require('../common'); +const http = require('http'); +const net = require('net'); +const assert = require('assert'); + +function request(socket) { + socket.write('GET / HTTP/1.1\r\n'); + socket.write('Connection: keep-alive\r\n'); + socket.write('\r\n\r\n'); +} + +const server = http.createServer(common.mustCall((req, res) => { + res.end('ok'); +})); + +server.on('dropRequest', common.mustCall((request, socket) => { + assert.strictEqual(request instanceof http.IncomingMessage, true); + assert.strictEqual(socket instanceof net.Socket, true); + server.close(); +})); + +server.listen(0, common.mustCall(() => { + const socket = net.connect(server.address().port); + socket.on('connect', common.mustCall(() => { + request(socket); + request(socket); + })); + socket.on('data', common.mustCallAtLeast()); + socket.on('close', common.mustCall()); +})); + +server.maxRequestsPerSocket = 1; diff --git a/test/parallel/test-http-keep-alive-max-requests.js b/test/parallel/test-http-keep-alive-max-requests.js index 657b59ae6d9..89546df5ae8 100644 --- a/test/parallel/test-http-keep-alive-max-requests.js +++ b/test/parallel/test-http-keep-alive-max-requests.js @@ -14,7 +14,7 @@ function assertResponse(headers, body, expectClosed) { assert.match(body, /Hello World!/m); } else { assert.match(headers, /Connection: keep-alive\r\n/m); - assert.match(headers, /Keep-Alive: timeout=5\r\n/m); + assert.match(headers, /Keep-Alive: timeout=5, max=3\r\n/m); assert.match(body, /Hello World!/m); } } diff --git a/test/parallel/test-http-keep-alive-pipeline-max-requests.js b/test/parallel/test-http-keep-alive-pipeline-max-requests.js index 9c5d46a57ce..5549440d3dd 100644 --- a/test/parallel/test-http-keep-alive-pipeline-max-requests.js +++ b/test/parallel/test-http-keep-alive-pipeline-max-requests.js @@ -10,11 +10,11 @@ const bodySent = 'This is my request'; function assertResponse(headers, body, expectClosed) { if (expectClosed) { assert.match(headers, /Connection: close\r\n/m); - assert.strictEqual(headers.search(/Keep-Alive: timeout=5\r\n/m), -1); + assert.strictEqual(headers.search(/Keep-Alive: timeout=5, max=3\r\n/m), -1); assert.match(body, /Hello World!/m); } else { assert.match(headers, /Connection: keep-alive\r\n/m); - assert.match(headers, /Keep-Alive: timeout=5\r\n/m); + assert.match(headers, /Keep-Alive: timeout=5, max=3\r\n/m); assert.match(body, /Hello World!/m); } } diff --git a/test/parallel/test-http-missing-header-separator-cr.js b/test/parallel/test-http-missing-header-separator-cr.js new file mode 100644 index 00000000000..22cb8049512 --- /dev/null +++ b/test/parallel/test-http-missing-header-separator-cr.js @@ -0,0 +1,83 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); + +const http = require('http'); +const net = require('net'); + +function serverHandler(server, msg) { + const client = net.connect(server.address().port, 'localhost'); + + let response = ''; + + client.on('data', common.mustCall((chunk) => { + response += chunk.toString('utf-8'); + })); + + client.setEncoding('utf8'); + client.on('error', common.mustNotCall()); + client.on('end', common.mustCall(() => { + assert.strictEqual( + response, + 'HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n' + ); + server.close(); + })); + client.write(msg); + client.resume(); +} + +{ + const msg = [ + 'GET / HTTP/1.1', + 'Host: localhost', + 'Dummy: x\nContent-Length: 23', + '', + 'GET / HTTP/1.1', + 'Dummy: GET /admin HTTP/1.1', + 'Host: localhost', + '', + '', + ].join('\r\n'); + + const server = http.createServer(common.mustNotCall()); + + server.listen(0, common.mustSucceed(serverHandler.bind(null, server, msg))); +} + +{ + const msg = [ + 'POST / HTTP/1.1', + 'Host: localhost', + 'x:x\nTransfer-Encoding: chunked', + '', + '1', + 'A', + '0', + '', + '', + ].join('\r\n'); + + const server = http.createServer(common.mustNotCall()); + + server.listen(0, common.mustSucceed(serverHandler.bind(null, server, msg))); +} + +{ + const msg = [ + 'POST / HTTP/1.1', + 'Host: localhost', + 'x:\nTransfer-Encoding: chunked', + '', + '1', + 'A', + '0', + '', + '', + ].join('\r\n'); + + const server = http.createServer(common.mustNotCall()); + + server.listen(0, common.mustSucceed(serverHandler.bind(null, server, msg))); +} diff --git a/test/parallel/test-http-multiple-headers.js b/test/parallel/test-http-multiple-headers.js new file mode 100644 index 00000000000..1ebd290a614 --- /dev/null +++ b/test/parallel/test-http-multiple-headers.js @@ -0,0 +1,173 @@ +'use strict'; + +// TODO@PI: Run all tests +const common = require('../common'); +const assert = require('assert'); +const { createServer, request } = require('http'); + +const server = createServer( + { uniqueHeaders: ['x-res-b', 'x-res-d', 'x-res-y'] }, + common.mustCall((req, res) => { + const host = `127.0.0.1:${server.address().port}`; + + assert.deepStrictEqual(req.rawHeaders, [ + 'connection', 'close', + 'X-Req-a', 'eee', + 'X-Req-a', 'fff', + 'X-Req-a', 'ggg', + 'X-Req-a', 'hhh', + 'X-Req-b', 'iii; jjj; kkk; lll', + 'Host', host, + 'Transfer-Encoding', 'chunked', + ]); + assert.deepStrictEqual(req.headers, { + 'connection': 'close', + 'x-req-a': 'eee, fff, ggg, hhh', + 'x-req-b': 'iii; jjj; kkk; lll', + host, + 'transfer-encoding': 'chunked' + }); + assert.deepStrictEqual(req.headersDistinct, { + 'connection': ['close'], + 'x-req-a': ['eee', 'fff', 'ggg', 'hhh'], + 'x-req-b': ['iii; jjj; kkk; lll'], + 'host': [host], + 'transfer-encoding': ['chunked'] + }); + + req.on('end', function() { + assert.deepStrictEqual(req.rawTrailers, [ + 'x-req-x', 'xxx', + 'x-req-x', 'yyy', + 'X-req-Y', 'zzz; www', + ]); + assert.deepStrictEqual( + req.trailers, { 'x-req-x': 'xxx, yyy', 'x-req-y': 'zzz; www' } + ); + assert.deepStrictEqual( + req.trailersDistinct, + { 'x-req-x': ['xxx', 'yyy'], 'x-req-y': ['zzz; www'] } + ); + + res.setHeader('X-Res-a', 'AAA'); + res.appendHeader('x-res-a', ['BBB', 'CCC']); + res.setHeader('X-Res-b', ['DDD', 'EEE']); + res.appendHeader('x-res-b', ['FFF', 'GGG']); + res.removeHeader('date'); + res.writeHead(200, { + 'Connection': 'close', 'x-res-c': ['HHH', 'III'], + 'x-res-d': ['JJJ', 'KKK', 'LLL'] + }); + res.addTrailers({ + 'x-res-x': ['XXX', 'YYY'], + 'X-Res-Y': ['ZZZ', 'WWW'] + }); + res.write('BODY'); + res.end(); + + assert.deepStrictEqual(res.getHeader('X-Res-a'), ['AAA', 'BBB', 'CCC']); + assert.deepStrictEqual(res.getHeader('x-res-a'), ['AAA', 'BBB', 'CCC']); + assert.deepStrictEqual( + res.getHeader('x-res-b'), ['DDD', 'EEE', 'FFF', 'GGG'] + ); + assert.deepStrictEqual(res.getHeader('x-res-c'), ['HHH', 'III']); + assert.strictEqual(res.getHeader('connection'), 'close'); + assert.deepStrictEqual( + res.getHeaderNames(), + ['x-res-a', 'x-res-b', 'connection', 'x-res-c', 'x-res-d'] + ); + assert.deepStrictEqual( + res.getRawHeaderNames(), + ['X-Res-a', 'X-Res-b', 'Connection', 'x-res-c', 'x-res-d'] + ); + + const headers = Object.create(null); + Object.assign(headers, { + 'x-res-a': [ 'AAA', 'BBB', 'CCC' ], + 'x-res-b': [ 'DDD', 'EEE', 'FFF', 'GGG' ], + 'connection': 'close', + 'x-res-c': [ 'HHH', 'III' ], + 'x-res-d': [ 'JJJ', 'KKK', 'LLL' ] + }); + assert.deepStrictEqual(res.getHeaders(), headers); + }); + + req.resume(); + } + )); + +server.listen(0, common.mustCall(() => { + const req = request({ + host: '127.0.0.1', + port: server.address().port, + path: '/', + method: 'POST', + headers: { + 'connection': 'close', + 'x-req-a': 'aaa', + 'X-Req-a': 'bbb', + 'X-Req-b': ['ccc', 'ddd'] + }, + uniqueHeaders: ['x-req-b', 'x-req-y'] + }, common.mustCall((res) => { + assert.deepStrictEqual(res.rawHeaders, [ + 'X-Res-a', 'AAA', + 'X-Res-a', 'BBB', + 'X-Res-a', 'CCC', + 'X-Res-b', 'DDD; EEE; FFF; GGG', + 'Connection', 'close', + 'x-res-c', 'HHH', + 'x-res-c', 'III', + 'x-res-d', 'JJJ; KKK; LLL', + 'Transfer-Encoding', 'chunked', + ]); + assert.deepStrictEqual(res.headers, { + 'x-res-a': 'AAA, BBB, CCC', + 'x-res-b': 'DDD; EEE; FFF; GGG', + 'connection': 'close', + 'x-res-c': 'HHH, III', + 'x-res-d': 'JJJ; KKK; LLL', + 'transfer-encoding': 'chunked' + }); + assert.deepStrictEqual(res.headersDistinct, { + 'x-res-a': [ 'AAA', 'BBB', 'CCC' ], + 'x-res-b': [ 'DDD; EEE; FFF; GGG' ], + 'connection': [ 'close' ], + 'x-res-c': [ 'HHH', 'III' ], + 'x-res-d': [ 'JJJ; KKK; LLL' ], + 'transfer-encoding': [ 'chunked' ] + }); + + res.on('end', function() { + assert.deepStrictEqual(res.rawTrailers, [ + 'x-res-x', 'XXX', + 'x-res-x', 'YYY', + 'X-Res-Y', 'ZZZ; WWW', + ]); + assert.deepStrictEqual( + res.trailers, + { 'x-res-x': 'XXX, YYY', 'x-res-y': 'ZZZ; WWW' } + ); + assert.deepStrictEqual( + res.trailersDistinct, + { 'x-res-x': ['XXX', 'YYY'], 'x-res-y': ['ZZZ; WWW'] } + ); + server.close(); + }); + res.resume(); + })); + + req.setHeader('X-Req-a', ['eee', 'fff']); + req.appendHeader('X-req-a', ['ggg', 'hhh']); + req.setHeader('X-Req-b', ['iii', 'jjj']); + req.appendHeader('x-req-b', ['kkk', 'lll']); + + req.addTrailers({ + 'x-req-x': ['xxx', 'yyy'], + 'X-req-Y': ['zzz', 'www'] + }); + + req.write('BODY'); + + req.end(); +})); diff --git a/test/parallel/test-http-outgoing-properties.js b/test/parallel/test-http-outgoing-properties.js index ec25546c4b6..85c5b659a36 100644 --- a/test/parallel/test-http-outgoing-properties.js +++ b/test/parallel/test-http-outgoing-properties.js @@ -49,7 +49,7 @@ const OutgoingMessage = http.OutgoingMessage; msg._implicitHeader = function() {}; assert.strictEqual(msg.writableLength, 0); msg.write('asd'); - assert.strictEqual(msg.writableLength, 7); + assert.strictEqual(msg.writableLength, 3); } { diff --git a/test/parallel/test-http-parser-multiple-execute.js b/test/parallel/test-http-parser-multiple-execute.js new file mode 100644 index 00000000000..d05a9737523 --- /dev/null +++ b/test/parallel/test-http-parser-multiple-execute.js @@ -0,0 +1,37 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const { request } = require('http'); +const { Duplex } = require('stream'); + +let socket; + +function createConnection(...args) { + socket = new Duplex({ + read() {}, + write(chunk, encoding, callback) { + if (chunk.toString().includes('\r\n\r\n')) { + this.push('HTTP/1.1 100 Continue\r\n\r\n'); + } + + callback(); + } + }); + + return socket; +} + +const req = request('http://localhost:8080', { createConnection }); + +req.on('information', common.mustCall(({ statusCode }) => { + assert.strictEqual(statusCode, 100); + socket.push('HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n'); + socket.push(null); +})); + +req.on('response', common.mustCall(({ statusCode }) => { + assert.strictEqual(statusCode, 200); +})); + +req.end(); diff --git a/test/parallel/test-http-parser.js b/test/parallel/test-http-parser.js index 97dc57f755a..739beaa3d67 100644 --- a/test/parallel/test-http-parser.js +++ b/test/parallel/test-http-parser.js @@ -62,8 +62,8 @@ function newParser(type) { function expectBody(expected) { - return mustCall(function(buf, start, len) { - const body = String(buf.slice(start, start + len)); + return mustCall(function(buf) { + const body = String(buf); assert.strictEqual(body, expected); }); } @@ -126,8 +126,8 @@ function expectBody(expected) { assert.strictEqual(statusMessage, 'OK'); }; - const onBody = (buf, start, len) => { - const body = String(buf.slice(start, start + len)); + const onBody = (buf) => { + const body = String(buf); assert.strictEqual(body, 'pong'); }; @@ -195,8 +195,8 @@ function expectBody(expected) { parser[kOnHeaders] = mustCall(onHeaders); }; - const onBody = (buf, start, len) => { - const body = String(buf.slice(start, start + len)); + const onBody = (buf) => { + const body = String(buf); assert.strictEqual(body, 'ping'); seen_body = true; }; @@ -291,8 +291,8 @@ function expectBody(expected) { assert.strictEqual(versionMinor, 1); }; - const onBody = (buf, start, len) => { - const body = String(buf.slice(start, start + len)); + const onBody = (buf) => { + const body = String(buf); assert.strictEqual(body, 'foo=42&bar=1337'); }; @@ -332,8 +332,8 @@ function expectBody(expected) { let body_part = 0; const body_parts = ['123', '123456', '1234567890']; - const onBody = (buf, start, len) => { - const body = String(buf.slice(start, start + len)); + const onBody = (buf) => { + const body = String(buf); assert.strictEqual(body, body_parts[body_part++]); }; @@ -371,8 +371,8 @@ function expectBody(expected) { const body_parts = ['123', '123456', '123456789', '123456789ABC', '123456789ABCDEF']; - const onBody = (buf, start, len) => { - const body = String(buf.slice(start, start + len)); + const onBody = (buf) => { + const body = String(buf); assert.strictEqual(body, body_parts[body_part++]); }; @@ -428,8 +428,8 @@ function expectBody(expected) { let expected_body = '123123456123456789123456789ABC123456789ABCDEF'; - const onBody = (buf, start, len) => { - const chunk = String(buf.slice(start, start + len)); + const onBody = (buf) => { + const chunk = String(buf); assert.strictEqual(expected_body.indexOf(chunk), 0); expected_body = expected_body.slice(chunk.length); }; @@ -445,9 +445,7 @@ function expectBody(expected) { for (let i = 1; i < request.length - 1; ++i) { const a = request.slice(0, i); - console.error(`request.slice(0, ${i}) = ${JSON.stringify(a.toString())}`); const b = request.slice(i); - console.error(`request.slice(${i}) = ${JSON.stringify(b.toString())}`); test(a, b); } } @@ -488,8 +486,8 @@ function expectBody(expected) { let expected_body = '123123456123456789123456789ABC123456789ABCDEF'; - const onBody = (buf, start, len) => { - const chunk = String(buf.slice(start, start + len)); + const onBody = (buf) => { + const chunk = String(buf); assert.strictEqual(expected_body.indexOf(chunk), 0); expected_body = expected_body.slice(chunk.length); }; diff --git a/test/parallel/test-http-perf_hooks.js b/test/parallel/test-http-perf_hooks.js index 0708a1e8c06..de6ed0295a1 100644 --- a/test/parallel/test-http-perf_hooks.js +++ b/test/parallel/test-http-perf_hooks.js @@ -66,6 +66,12 @@ process.on('exit', () => { } else if (entry.name === 'HttpRequest') { numberOfHttpRequests++; } + assert.strictEqual(typeof entry.detail.req.method, 'string'); + assert.strictEqual(typeof entry.detail.req.url, 'string'); + assert.strictEqual(typeof entry.detail.req.headers, 'object'); + assert.strictEqual(typeof entry.detail.res.statusCode, 'number'); + assert.strictEqual(typeof entry.detail.res.statusMessage, 'string'); + assert.strictEqual(typeof entry.detail.res.headers, 'object'); }); assert.strictEqual(numberOfHttpClients, 2); assert.strictEqual(numberOfHttpRequests, 2); diff --git a/test/parallel/test-http-response-multi-content-length.js b/test/parallel/test-http-response-multi-content-length.js index 0ef45a027fb..3ae53ffb7ec 100644 --- a/test/parallel/test-http-response-multi-content-length.js +++ b/test/parallel/test-http-response-multi-content-length.js @@ -24,7 +24,7 @@ function test(server) { { const server = http.createServer((req, res) => { res.setHeader('content-length', [2, 1]); - res.end('ok'); + res.end('k'); }); test(server); diff --git a/test/parallel/test-http-set-max-idle-http-parser.js b/test/parallel/test-http-set-max-idle-http-parser.js new file mode 100644 index 00000000000..d935823a1ba --- /dev/null +++ b/test/parallel/test-http-set-max-idle-http-parser.js @@ -0,0 +1,19 @@ +'use strict'; +require('../common'); +const assert = require('assert'); +const httpCommon = require('_http_common'); +const http = require('http'); + +[Symbol(), {}, [], () => {}, 1n, true, '1', null, undefined].forEach((value) => { + assert.throws(() => http.setMaxIdleHTTPParsers(value), { code: 'ERR_INVALID_ARG_TYPE' }); +}); + +[-1, -Infinity, NaN, 0, 1.1].forEach((value) => { + assert.throws(() => http.setMaxIdleHTTPParsers(value), { code: 'ERR_OUT_OF_RANGE' }); +}); + +[1, Number.MAX_SAFE_INTEGER].forEach((value) => { + assert.notStrictEqual(httpCommon.parsers.max, value); + http.setMaxIdleHTTPParsers(value); + assert.strictEqual(httpCommon.parsers.max, value); +}); diff --git a/test/parallel/test-http-set-trailers.js b/test/parallel/test-http-set-trailers.js index 2197de9b0b2..17a936f528e 100644 --- a/test/parallel/test-http-set-trailers.js +++ b/test/parallel/test-http-set-trailers.js @@ -96,7 +96,7 @@ const server = http.createServer((req, res) => { }); server.listen(0, () => { Promise.all([testHttp10, testHttp11, testClientTrailers] - .map(util.promisify) + .map((f) => util.promisify(f)) .map((f) => f(server.address().port))) .then(() => server.close()); }); diff --git a/test/parallel/test-http-transfer-encoding-repeated-chunked.js b/test/parallel/test-http-transfer-encoding-repeated-chunked.js new file mode 100644 index 00000000000..f38c625646c --- /dev/null +++ b/test/parallel/test-http-transfer-encoding-repeated-chunked.js @@ -0,0 +1,51 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); + +const http = require('http'); +const net = require('net'); + +const msg = [ + 'POST / HTTP/1.1', + 'Host: 127.0.0.1', + 'Transfer-Encoding: chunkedchunked', + '', + '1', + 'A', + '0', + '', +].join('\r\n'); + +const server = http.createServer(common.mustCall((req, res) => { + // Verify that no data is received + + req.on('data', common.mustNotCall()); + + req.on('end', common.mustNotCall(() => { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.end(); + })); +}, 1)); + +server.listen(0, common.mustSucceed(() => { + const client = net.connect(server.address().port, 'localhost'); + + let response = ''; + + client.on('data', common.mustCall((chunk) => { + response += chunk.toString('utf-8'); + })); + + client.setEncoding('utf8'); + client.on('error', common.mustNotCall()); + client.on('end', common.mustCall(() => { + assert.strictEqual( + response, + 'HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n' + ); + server.close(); + })); + client.write(msg); + client.resume(); +})); diff --git a/test/parallel/test-http-transfer-encoding-smuggling.js b/test/parallel/test-http-transfer-encoding-smuggling.js index 77e719d37e1..472b717022d 100644 --- a/test/parallel/test-http-transfer-encoding-smuggling.js +++ b/test/parallel/test-http-transfer-encoding-smuggling.js @@ -1,44 +1,89 @@ 'use strict'; const common = require('../common'); +const assert = require('assert'); const http = require('http'); const net = require('net'); -const msg = [ - 'POST / HTTP/1.1', - 'Host: 127.0.0.1', - 'Transfer-Encoding: chunked', - 'Transfer-Encoding: chunked-false', - 'Connection: upgrade', - '', - '1', - 'A', - '0', - '', - 'GET /flag HTTP/1.1', - 'Host: 127.0.0.1', - '', - '', -].join('\r\n'); - -// Verify that the server is called only once even with a smuggled request. - -const server = http.createServer(common.mustCall((req, res) => { - res.end(); -}, 1)); - -function send(next) { - const client = net.connect(server.address().port, 'localhost'); - client.setEncoding('utf8'); - client.on('error', common.mustNotCall()); - client.on('end', next); - client.write(msg); - client.resume(); +{ + const msg = [ + 'POST / HTTP/1.1', + 'Host: 127.0.0.1', + 'Transfer-Encoding: chunked', + 'Transfer-Encoding: chunked-false', + 'Connection: upgrade', + '', + '1', + 'A', + '0', + '', + 'GET /flag HTTP/1.1', + 'Host: 127.0.0.1', + '', + '', + ].join('\r\n'); + + const server = http.createServer(common.mustNotCall((req, res) => { + res.end(); + }, 1)); + + server.listen(0, common.mustSucceed(() => { + const client = net.connect(server.address().port, 'localhost'); + + let response = ''; + + // Verify that the server listener is never called + + client.on('data', common.mustCall((chunk) => { + response += chunk; + })); + + client.setEncoding('utf8'); + client.on('error', common.mustNotCall()); + client.on('end', common.mustCall(() => { + assert.strictEqual( + response, + 'HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n' + ); + server.close(); + })); + client.write(msg); + client.resume(); + })); } -server.listen(0, common.mustSucceed(() => { - send(common.mustCall(() => { - server.close(); +{ + const msg = [ + 'POST / HTTP/1.1', + 'Host: 127.0.0.1', + 'Transfer-Encoding: chunked', + ' , chunked-false', + 'Connection: upgrade', + '', + '1', + 'A', + '0', + '', + 'GET /flag HTTP/1.1', + 'Host: 127.0.0.1', + '', + '', + ].join('\r\n'); + + const server = http.createServer(common.mustCall((request, response) => { + assert.notStrictEqual(request.url, '/admin'); + response.end('hello world'); + }), 1); + + server.listen(0, common.mustSucceed(() => { + const client = net.connect(server.address().port, 'localhost'); + + client.on('end', common.mustCall(function() { + server.close(); + })); + + client.write(msg); + client.resume(); })); -})); +} diff --git a/test/parallel/test-http-write-callbacks.js b/test/parallel/test-http-write-callbacks.js index 3730e57936b..390fddf1dc2 100644 --- a/test/parallel/test-http-write-callbacks.js +++ b/test/parallel/test-http-write-callbacks.js @@ -20,7 +20,7 @@ // USE OR OTHER DEALINGS IN THE SOFTWARE. 'use strict'; -require('../common'); +const common = require('../common'); const assert = require('assert'); const http = require('http'); @@ -53,15 +53,13 @@ server.on('checkContinue', (req, res) => { res.writeContinue(() => { // Continue has been written req.on('end', () => { - res.write('asdf', (er) => { - assert.ifError(er); - res.write('foo', 'ascii', (er) => { - assert.ifError(er); - res.end(Buffer.from('bar'), 'buffer', (er) => { + res.write('asdf', common.mustSucceed(() => { + res.write('foo', 'ascii', common.mustSucceed(() => { + res.end(Buffer.from('bar'), 'buffer', common.mustSucceed(() => { serverEndCb = true; - }); - }); - }); + })); + })); + })); }); }); @@ -79,16 +77,13 @@ server.listen(0, function() { }); req.on('continue', () => { // ok, good to go. - req.write('YmF6', 'base64', (er) => { - assert.ifError(er); - req.write(Buffer.from('quux'), (er) => { - assert.ifError(er); - req.end('626c657267', 'hex', (er) => { - assert.ifError(er); + req.write('YmF6', 'base64', common.mustSucceed(() => { + req.write(Buffer.from('quux'), common.mustSucceed(() => { + req.end('626c657267', 'hex', common.mustSucceed(() => { clientEndCb = true; - }); - }); - }); + })); + })); + })); }); req.on('response', (res) => { // This should not come until after the end is flushed out diff --git a/test/parallel/test-http2-compat-serverresponse-writehead-array.js b/test/parallel/test-http2-compat-serverresponse-writehead-array.js index c28f7329c1d..1d0706f5ed9 100644 --- a/test/parallel/test-http2-compat-serverresponse-writehead-array.js +++ b/test/parallel/test-http2-compat-serverresponse-writehead-array.js @@ -4,40 +4,92 @@ const common = require('../common'); if (!common.hasCrypto) common.skip('missing crypto'); const assert = require('assert'); -const h2 = require('http2'); - -// Http2ServerResponse.writeHead should support nested arrays - -const server = h2.createServer(); -server.listen(0, common.mustCall(() => { - const port = server.address().port; - server.once('request', common.mustCall((request, response) => { - const returnVal = response.writeHead(200, [ - ['foo', 'bar'], - ['ABC', 123], - ]); - assert.strictEqual(returnVal, response); - response.end(common.mustCall(() => { server.close(); })); +const http2 = require('http2'); + +// Http2ServerResponse.writeHead should support arrays and nested arrays + +{ + const server = http2.createServer(); + server.listen(0, common.mustCall(() => { + const port = server.address().port; + + server.once('request', common.mustCall((request, response) => { + const returnVal = response.writeHead(200, [ + ['foo', 'bar'], + ['ABC', 123], + ]); + assert.strictEqual(returnVal, response); + response.end(common.mustCall(() => { server.close(); })); + })); + + const client = http2.connect(`http://localhost:${port}`, common.mustCall(() => { + const request = client.request(); + + request.on('response', common.mustCall((headers) => { + assert.strictEqual(headers.foo, 'bar'); + assert.strictEqual(headers.abc, '123'); + assert.strictEqual(headers[':status'], 200); + }, 1)); + request.on('end', common.mustCall(() => { + client.close(); + })); + request.end(); + request.resume(); + })); })); +} + +{ + const server = http2.createServer(); + server.listen(0, common.mustCall(() => { + const port = server.address().port; + + server.once('request', common.mustCall((request, response) => { + const returnVal = response.writeHead(200, ['foo', 'bar', 'ABC', 123]); + assert.strictEqual(returnVal, response); + response.end(common.mustCall(() => { server.close(); })); + })); + + const client = http2.connect(`http://localhost:${port}`, common.mustCall(() => { + const request = client.request(); + + request.on('response', common.mustCall((headers) => { + assert.strictEqual(headers.foo, 'bar'); + assert.strictEqual(headers.abc, '123'); + assert.strictEqual(headers[':status'], 200); + }, 1)); + request.on('end', common.mustCall(() => { + client.close(); + })); + request.end(); + request.resume(); + })); + })); +} + +{ + const server = http2.createServer(); + server.listen(0, common.mustCall(() => { + const port = server.address().port; + + server.once('request', common.mustCall((request, response) => { + try { + response.writeHead(200, ['foo', 'bar', 'ABC', 123, 'extra']); + } catch (err) { + assert.strictEqual(err.code, 'ERR_INVALID_ARG_VALUE'); + } + + response.end(common.mustCall(() => { server.close(); })); + })); + + const client = http2.connect(`http://localhost:${port}`, common.mustCall(() => { + const request = client.request(); - const url = `http://localhost:${port}`; - const client = h2.connect(url, common.mustCall(() => { - const headers = { - ':path': '/', - ':method': 'GET', - ':scheme': 'http', - ':authority': `localhost:${port}` - }; - const request = client.request(headers); - request.on('response', common.mustCall((headers) => { - assert.strictEqual(headers.foo, 'bar'); - assert.strictEqual(headers.abc, '123'); - assert.strictEqual(headers[':status'], 200); - }, 1)); - request.on('end', common.mustCall(() => { - client.close(); + request.on('end', common.mustCall(() => { + client.close(); + })); + request.end(); + request.resume(); })); - request.end(); - request.resume(); })); -})); +} diff --git a/test/parallel/test-http2-create-client-secure-session.js b/test/parallel/test-http2-create-client-secure-session.js index 4303786b3e4..2f7678cc689 100644 --- a/test/parallel/test-http2-create-client-secure-session.js +++ b/test/parallel/test-http2-create-client-secure-session.js @@ -91,3 +91,9 @@ verifySecureSession( loadKey('agent1-cert.pem'), loadKey('ca1-cert.pem'), { servername: 'agent1' }); + +verifySecureSession( + loadKey('agent8-key.pem'), + loadKey('agent8-cert.pem'), + loadKey('fake-startcom-root-cert.pem'), + { servername: '' }); diff --git a/test/parallel/test-http2-https-fallback.js b/test/parallel/test-http2-https-fallback.js index a872d686d34..2e85b890178 100644 --- a/test/parallel/test-http2-https-fallback.js +++ b/test/parallel/test-http2-https-fallback.js @@ -12,6 +12,7 @@ const { createSecureServer, connect } = require('http2'); const { get } = require('https'); const { parse } = require('url'); const { connect: tls } = require('tls'); +const { Duplex } = require('stream'); const countdown = (count, done) => () => --count === 0 && done(); @@ -115,6 +116,7 @@ function onSession(session, next) { ); server.once('unknownProtocol', common.mustCall((socket) => { + strictEqual(socket instanceof Duplex, true); socket.destroy(); })); @@ -139,7 +141,7 @@ function onSession(session, next) { function testNoTls() { // HTTP/1.1 client - get(Object.assign(parse(origin), clientOptions), common.mustNotCall) + get(Object.assign(parse(origin), clientOptions), common.mustNotCall()) .on('error', common.mustCall(cleanup)) .on('error', common.mustCall(testWrongALPN)) .end(); diff --git a/test/parallel/test-http2-max-session-memory-leak.js b/test/parallel/test-http2-max-session-memory-leak.js index b066ca80bc5..476c605783c 100644 --- a/test/parallel/test-http2-max-session-memory-leak.js +++ b/test/parallel/test-http2-max-session-memory-leak.js @@ -9,7 +9,7 @@ const http2 = require('http2'); // mechanism. const bodyLength = 8192; -const maxSessionMemory = 1; // 1 MB +const maxSessionMemory = 1; // 1 MiB const requestCount = 1000; const server = http2.createServer({ maxSessionMemory }); diff --git a/test/parallel/test-http2-options-max-headers-exceeds-nghttp2.js b/test/parallel/test-http2-options-max-headers-exceeds-nghttp2.js index e503e226ef2..df3aefff11e 100644 --- a/test/parallel/test-http2-options-max-headers-exceeds-nghttp2.js +++ b/test/parallel/test-http2-options-max-headers-exceeds-nghttp2.js @@ -1,9 +1,11 @@ +// Flags: --expose-internals 'use strict'; const common = require('../common'); -if (!common.hasCrypto) - common.skip('missing crypto'); +if (!common.hasCrypto) common.skip('missing crypto'); const h2 = require('http2'); +const assert = require('assert'); +const { ServerHttp2Session } = require('internal/http2/core'); const server = h2.createServer(); @@ -44,3 +46,54 @@ server.listen(0, common.mustCall(() => { })); req.end(); })); + +{ + const options = { + maxSendHeaderBlockLength: 100000, + }; + + const server = h2.createServer(options); + + server.on('error', common.mustNotCall()); + server.on( + 'session', + common.mustCall((session) => { + assert.strictEqual(session instanceof ServerHttp2Session, true); + }), + ); + server.on( + 'stream', + common.mustCall((stream) => { + stream.additionalHeaders({ + // Greater than 65536 bytes + 'test-header': 'A'.repeat(90000), + }); + stream.respond(); + stream.end(); + }), + ); + + server.on( + 'sessionError', + common.mustCall((err, session) => { + assert.strictEqual(err.code, 'ERR_HTTP2_SESSION_ERROR'); + assert.strictEqual(err.name, 'Error'); + assert.strictEqual(err.message, 'Session closed with error code 9'); + assert.strictEqual(session instanceof ServerHttp2Session, true); + server.close(); + }), + ); + + server.listen( + 0, + common.mustCall(() => { + const client = h2.connect(`http://localhost:${server.address().port}`); + client.on('error', common.mustNotCall()); + + const req = client.request(); + req.on('response', common.mustNotCall()); + req.on('error', common.mustNotCall()); + req.end(); + }), + ); +} diff --git a/test/parallel/test-http2-sent-headers.js b/test/parallel/test-http2-sent-headers.js index 6ec67439433..6a492cf13c1 100644 --- a/test/parallel/test-http2-sent-headers.js +++ b/test/parallel/test-http2-sent-headers.js @@ -29,8 +29,9 @@ server.listen(0, common.mustCall(() => { const client = h2.connect(`http://localhost:${server.address().port}`); const req = client.request(); - req.on('headers', common.mustCall((headers) => { + req.on('headers', common.mustCall((headers, flags) => { assert.strictEqual(headers[':status'], 102); + assert.strictEqual(typeof flags === 'number', true); })); assert.strictEqual(req.sentHeaders[':method'], 'GET'); diff --git a/test/parallel/test-http2-server-push-stream.js b/test/parallel/test-http2-server-push-stream.js index 7c75f66aef5..54b996fa642 100644 --- a/test/parallel/test-http2-server-push-stream.js +++ b/test/parallel/test-http2-server-push-stream.js @@ -48,10 +48,11 @@ server.listen(0, common.mustCall(() => { assert.strictEqual(headers[':scheme'], 'http'); assert.strictEqual(headers[':path'], '/foobar'); assert.strictEqual(headers[':authority'], `localhost:${port}`); - stream.on('push', common.mustCall((headers) => { + stream.on('push', common.mustCall((headers, flags) => { assert.strictEqual(headers[':status'], 200); assert.strictEqual(headers['content-type'], 'text/html'); assert.strictEqual(headers['x-push-data'], 'pushed by server'); + assert.strictEqual(typeof flags === 'number', true); })); stream.on('aborted', common.mustNotCall()); // We have to read the data of the push stream to end gracefully. diff --git a/test/parallel/test-http2-server-sessionerror.js b/test/parallel/test-http2-server-sessionerror.js index bbd180937e1..e266661b0cc 100644 --- a/test/parallel/test-http2-server-sessionerror.js +++ b/test/parallel/test-http2-server-sessionerror.js @@ -6,7 +6,9 @@ const common = require('../common'); if (!common.hasCrypto) common.skip('missing crypto'); const http2 = require('http2'); +const assert = require('assert'); const { kSocket } = require('internal/http2/util'); +const { ServerHttp2Session } = require('internal/http2/core'); const server = http2.createServer(); server.on('stream', common.mustNotCall()); @@ -14,6 +16,7 @@ server.on('stream', common.mustNotCall()); let test = 0; server.on('session', common.mustCall((session) => { + assert.strictEqual(session instanceof ServerHttp2Session, true); switch (++test) { case 1: server.on('error', common.mustNotCall()); @@ -32,6 +35,12 @@ server.on('session', common.mustCall((session) => { } }, 2)); +server.on('sessionError', common.mustCall((err, session) => { + assert.strictEqual(err.name, 'Error'); + assert.strictEqual(err.message, 'test'); + assert.strictEqual(session instanceof ServerHttp2Session, true); +}, 2)); + server.listen(0, common.mustCall(() => { const url = `http://localhost:${server.address().port}`; http2.connect(url) diff --git a/test/parallel/test-http2-trailers-after-session-close.js b/test/parallel/test-http2-trailers-after-session-close.js new file mode 100644 index 00000000000..d08f8754941 --- /dev/null +++ b/test/parallel/test-http2-trailers-after-session-close.js @@ -0,0 +1,49 @@ +'use strict'; + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); +const assert = require('assert'); +const http2 = require('http2'); + +const { + HTTP2_HEADER_PATH, + HTTP2_HEADER_STATUS, + HTTP2_HEADER_METHOD, +} = http2.constants; + +const server = http2.createServer(); +server.on('stream', common.mustCall((stream) => { + server.close(); + stream.session.close(); + stream.on('wantTrailers', common.mustCall(() => { + stream.sendTrailers({ xyz: 'abc' }); + })); + + stream.respond({ [HTTP2_HEADER_STATUS]: 200 }, { waitForTrailers: true }); + stream.write('some data'); + stream.end(); +})); + +server.listen(0, common.mustCall(() => { + const port = server.address().port; + const client = http2.connect(`http://localhost:${port}`); + client.socket.on('close', common.mustCall()); + const req = client.request({ + [HTTP2_HEADER_PATH]: '/', + [HTTP2_HEADER_METHOD]: 'POST' + }); + req.end(); + req.on('response', common.mustCall()); + let data = ''; + req.on('data', (chunk) => { + data += chunk; + }); + req.on('end', common.mustCall(() => { + assert.strictEqual(data, 'some data'); + })); + req.on('trailers', common.mustCall((headers) => { + assert.strictEqual(headers.xyz, 'abc'); + })); + req.on('close', common.mustCall()); +})); diff --git a/test/parallel/test-https-agent-create-connection.js b/test/parallel/test-https-agent-create-connection.js index cea335a422e..1ac2c840b0d 100644 --- a/test/parallel/test-https-agent-create-connection.js +++ b/test/parallel/test-https-agent-create-connection.js @@ -139,19 +139,16 @@ function createServer() { server.listen(0, common.mustCall(() => { const port = server.address().port; const host = 'localhost'; - const options = { + const options = common.mustNotMutateObjectDeep({ port: 3000, - rejectUnauthorized: false - }; + rejectUnauthorized: false, + }); const socket = agent.createConnection(port, host, options); socket.on('connect', common.mustCall((data) => { socket.end(); })); socket.on('end', common.mustCall(() => { - assert.deepStrictEqual(options, { - port: 3000, rejectUnauthorized: false - }); server.close(); })); })); diff --git a/test/parallel/test-https-argument-of-creating.js b/test/parallel/test-https-argument-of-creating.js index 6f1564826ea..fe6ca9f59a6 100644 --- a/test/parallel/test-https-argument-of-creating.js +++ b/test/parallel/test-https-argument-of-creating.js @@ -12,11 +12,13 @@ const dftProtocol = {}; // Test for immutable `opts` { - const opts = { foo: 'bar', ALPNProtocols: [ 'http/1.1' ] }; + const opts = common.mustNotMutateObjectDeep({ + foo: 'bar', + ALPNProtocols: [ 'http/1.1' ], + }); const server = https.createServer(opts); tls.convertALPNProtocols([ 'http/1.1' ], dftProtocol); - assert.deepStrictEqual(opts, { foo: 'bar', ALPNProtocols: [ 'http/1.1' ] }); assert.strictEqual(server.ALPNProtocols.compare(dftProtocol.ALPNProtocols), 0); } diff --git a/test/parallel/test-https-keep-alive-drop-requests.js b/test/parallel/test-https-keep-alive-drop-requests.js new file mode 100644 index 00000000000..d2c7f78e0bf --- /dev/null +++ b/test/parallel/test-https-keep-alive-drop-requests.js @@ -0,0 +1,51 @@ +'use strict'; + +const common = require('../common'); + +if (!common.hasCrypto) + common.skip('missing crypto'); + +const https = require('https'); +const http = require('http'); +const net = require('net'); +const assert = require('assert'); +const tls = require('tls'); +const { readKey } = require('../common/fixtures'); + +function request(socket) { + socket.write('GET / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n\r\n'); +} + +// https options +const httpsOptions = { + key: readKey('agent1-key.pem'), + cert: readKey('agent1-cert.pem') +}; + +const server = https.createServer(httpsOptions, common.mustCall((req, res) => { + res.end('ok'); +})); + +server.on('dropRequest', common.mustCall((request, socket) => { + assert.strictEqual(request instanceof http.IncomingMessage, true); + assert.strictEqual(socket instanceof net.Socket, true); + server.close(); +})); + +server.listen(0, common.mustCall(() => { + const socket = tls.connect( + server.address().port, + { + rejectUnauthorized: false + }, + common.mustCall(() => { + request(socket); + request(socket); + socket.on('error', common.mustNotCall()); + socket.on('data', common.mustCallAtLeast()); + socket.on('close', common.mustCall()); + }) + ); +})); + +server.maxRequestsPerSocket = 1; diff --git a/test/parallel/test-icu-env.js b/test/parallel/test-icu-env.js new file mode 100644 index 00000000000..368f8292346 --- /dev/null +++ b/test/parallel/test-icu-env.js @@ -0,0 +1,288 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const { execFileSync } = require('child_process'); + +// system-icu should not be tested +const hasBuiltinICU = process.config.variables.icu_gyp_path === 'tools/icu/icu-generic.gyp'; +if (!hasBuiltinICU) + common.skip('system ICU'); + +// small-icu doesn't support non-English locales +const hasFullICU = (() => { + try { + const january = new Date(9e8); + const spanish = new Intl.DateTimeFormat('es', { month: 'long' }); + return spanish.format(january) === 'enero'; + } catch { + return false; + } +})(); +if (!hasFullICU) + common.skip('small ICU'); + +const icuVersionMajor = Number(process.config.variables.icu_ver_major ?? 0); +if (icuVersionMajor < 71) + common.skip('ICU too old'); + + +function runEnvOutside(addEnv, code, ...args) { + return execFileSync( + process.execPath, + ['-e', `process.stdout.write(String(${code}));`], + { env: { ...process.env, ...addEnv }, encoding: 'utf8' } + ); +} + +function runEnvInside(addEnv, func, ...args) { + Object.assign(process.env, addEnv); // side effects! + return func(...args); +} + +function isPack(array) { + const firstItem = array[0]; + return array.every((item) => item === firstItem); +} + +function isSet(array) { + const deduped = new Set(array); + return array.length === deduped.size; +} + + +const localesISO639 = [ + 'eng', 'cmn', 'hin', 'spa', + 'fra', 'arb', 'ben', 'rus', + 'por', 'urd', 'ind', 'deu', + 'jpn', 'pcm', 'mar', 'tel', +]; + +const locales = [ + 'en', 'zh', 'hi', 'es', + 'fr', 'ar', 'bn', 'ru', + 'pt', 'ur', 'id', 'de', + 'ja', 'pcm', 'mr', 'te', +]; + +// These must not overlap +const zones = [ + 'America/New_York', + 'UTC', + 'Asia/Irkutsk', + 'Australia/North', + 'Antarctica/South_Pole', +]; + + +assert.deepStrictEqual(Intl.getCanonicalLocales(localesISO639), locales); + + +// On some platforms these keep original locale (for example, 'January') +const enero = runEnvOutside( + { LANG: 'es' }, + 'new Intl.DateTimeFormat(undefined, { month: "long" } ).format(new Date(9e8))' +); +const janvier = runEnvOutside( + { LANG: 'fr' }, + 'new Intl.DateTimeFormat(undefined, { month: "long" } ).format(new Date(9e8))' +); +const isMockable = enero !== janvier; + +// Tests with mocked env +if (isMockable) { + assert.strictEqual( + isSet(zones.map((TZ) => runEnvOutside({ TZ }, 'new Date(333333333333).toString()'))), + true + ); + assert.strictEqual( + isSet(zones.map((TZ) => runEnvOutside({ TZ }, 'new Date(333333333333).toLocaleString()'))), + true + ); + assert.deepStrictEqual( + locales.map((LANG) => runEnvOutside({ LANG, TZ: 'Europe/Zurich' }, 'new Date(333333333333).toString()')), + [ + 'Fri Jul 25 1980 01:35:33 GMT+0100 (Central European Standard Time)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (中欧标准时间)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (मध्य यूरोपीय मानक समय)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (hora estándar de Europa central)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (heure normale d’Europe centrale)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (توقيت وسط أوروبا الرسمي)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (মধ্য ইউরোপীয় মানক সময়)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (Центральная Европа, стандартное время)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (Horário Padrão da Europa Central)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (وسطی یورپ کا معیاری وقت)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (Waktu Standar Eropa Tengah)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (Mitteleuropäische Normalzeit)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (中央ヨーロッパ標準時)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (Mídúl Yúrop Fíksd Taim)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (मध्‍य युरोपियन प्रमाण वेळ)', + 'Fri Jul 25 1980 01:35:33 GMT+0100 (సెంట్రల్ యూరోపియన్ ప్రామాణిక సమయం)', + ] + ); + assert.deepStrictEqual( + locales.map((LANG) => runEnvOutside({ LANG, TZ: 'Europe/Zurich' }, 'new Date(333333333333).toLocaleString()')), + [ + '7/25/1980, 1:35:33 AM', + '1980/7/25 01:35:33', + '25/7/1980, 1:35:33 am', + '25/7/1980, 1:35:33', + '25/07/1980 01:35:33', + '٢٥‏/٧‏/١٩٨٠, ١:٣٥:٣٣ ص', + '২৫/৭/১৯৮০ ১:৩৫:৩৩ AM', + '25.07.1980, 01:35:33', + '25/07/1980 01:35:33', + '25/7/1980 1:35:33 AM', + '25/7/1980 01.35.33', + '25.7.1980, 01:35:33', + '1980/7/25 1:35:33', + '25/7/1980 01:35:33', + '२५/७/१९८०, १:३५:३३ AM', + '25/7/1980 1:35:33 AM', + ] + ); + assert.strictEqual( + runEnvOutside({ LANG: 'en' }, '["z", "ä"].sort(new Intl.Collator().compare)'), + 'ä,z' + ); + assert.strictEqual( + runEnvOutside({ LANG: 'sv' }, '["z", "ä"].sort(new Intl.Collator().compare)'), + 'z,ä' + ); + assert.deepStrictEqual( + locales.map( + (LANG) => runEnvOutside({ LANG, TZ: 'Europe/Zurich' }, 'new Intl.DateTimeFormat().format(333333333333)') + ), + [ + '7/25/1980', '1980/7/25', + '25/7/1980', '25/7/1980', + '25/07/1980', '٢٥‏/٧‏/١٩٨٠', + '২৫/৭/১৯৮০', '25.07.1980', + '25/07/1980', '25/7/1980', + '25/7/1980', '25.7.1980', + '1980/7/25', '25/7/1980', + '२५/७/१९८०', '25/7/1980', + ] + ); + assert.deepStrictEqual( + locales.map((LANG) => runEnvOutside({ LANG }, 'new Intl.DisplayNames(undefined, { type: "region" }).of("CH")')), + [ + 'Switzerland', '瑞士', + 'स्विट्ज़रलैंड', 'Suiza', + 'Suisse', 'سويسرا', + 'সুইজারল্যান্ড', 'Швейцария', + 'Suíça', 'سوئٹزر لینڈ', + 'Swiss', 'Schweiz', + 'スイス', 'Swítsaland', + 'स्वित्झर्लंड', 'స్విట్జర్లాండ్', + ] + ); + assert.deepStrictEqual( + locales.map((LANG) => runEnvOutside({ LANG }, 'new Intl.NumberFormat().format(275760.913)')), + [ + '275,760.913', '275,760.913', + '2,75,760.913', '275.760,913', + '275 760,913', '٢٧٥٬٧٦٠٫٩١٣', + '২,৭৫,৭৬০.৯১৩', '275 760,913', + '275.760,913', '275,760.913', + '275.760,913', '275.760,913', + '275,760.913', '275,760.913', + '२,७५,७६०.९१३', '2,75,760.913', + ] + ); + assert.deepStrictEqual( + locales.map((LANG) => runEnvOutside({ LANG }, 'new Intl.PluralRules().select(0)')), + [ + 'other', 'other', 'one', 'other', + 'one', 'zero', 'one', 'many', + 'one', 'other', 'other', 'other', + 'other', 'one', 'other', 'other', + ] + ); + assert.deepStrictEqual( + locales.map((LANG) => runEnvOutside({ LANG }, 'new Intl.RelativeTimeFormat().format(-586920.617, "hour")')), + [ + '586,920.617 hours ago', + '586,920.617小时前', + '5,86,920.617 घंटे पहले', + 'hace 586.920,617 horas', + 'il y a 586 920,617 heures', + 'قبل ٥٨٦٬٩٢٠٫٦١٧ ساعة', + '৫,৮৬,৯২০.৬১৭ ঘন্টা আগে', + '586 920,617 часа назад', + 'há 586.920,617 horas', + '586,920.617 گھنٹے پہلے', + '586.920,617 jam yang lalu', + 'vor 586.920,617 Stunden', + '586,920.617 時間前', + '586,920.617 áwa wé dọ́n pas', + '५,८६,९२०.६१७ तासांपूर्वी', + '5,86,920.617 గంటల క్రితం', + ] + ); +} + + +// Tests with process.env mutated inside +{ + // process.env.TZ is not intercepted in Workers + if (common.isMainThread) { + assert.strictEqual( + isSet(zones.map((TZ) => runEnvInside({ TZ }, () => new Date(333333333333).toString()))), + true + ); + assert.strictEqual( + isSet(zones.map((TZ) => runEnvInside({ TZ }, () => new Date(333333333333).toLocaleString()))), + true + ); + } else { + assert.strictEqual( + isPack(zones.map((TZ) => runEnvInside({ TZ }, () => new Date(333333333333).toString()))), + true + ); + assert.strictEqual( + isPack(zones.map((TZ) => runEnvInside({ TZ }, () => new Date(333333333333).toLocaleString()))), + true + ); + } + + assert.strictEqual( + isPack(locales.map((LANG) => runEnvInside({ LANG, TZ: 'Europe/Zurich' }, () => new Date(333333333333).toString()))), + true + ); + assert.strictEqual( + isPack(locales.map( + (LANG) => runEnvInside({ LANG, TZ: 'Europe/Zurich' }, () => new Date(333333333333).toLocaleString()) + )), + true + ); + assert.deepStrictEqual( + runEnvInside({ LANG: 'en' }, () => ['z', 'ä'].sort(new Intl.Collator().compare)), + runEnvInside({ LANG: 'sv' }, () => ['z', 'ä'].sort(new Intl.Collator().compare)) + ); + assert.strictEqual( + isPack(locales.map( + (LANG) => runEnvInside({ LANG, TZ: 'Europe/Zurich' }, () => new Intl.DateTimeFormat().format(333333333333)) + )), + true + ); + assert.strictEqual( + isPack(locales.map( + (LANG) => runEnvInside({ LANG }, () => new Intl.DisplayNames(undefined, { type: 'region' }).of('CH')) + )), + true + ); + assert.strictEqual( + isPack(locales.map((LANG) => runEnvInside({ LANG }, () => new Intl.NumberFormat().format(275760.913)))), + true + ); + assert.strictEqual( + isPack(locales.map((LANG) => runEnvInside({ LANG }, () => new Intl.PluralRules().select(0)))), + true + ); + assert.strictEqual( + isPack(locales.map( + (LANG) => runEnvInside({ LANG }, () => new Intl.RelativeTimeFormat().format(-586920.617, 'hour')) + )), + true + ); +} diff --git a/test/parallel/test-inspector-close-worker.js b/test/parallel/test-inspector-close-worker.js new file mode 100644 index 00000000000..9d41468e3b2 --- /dev/null +++ b/test/parallel/test-inspector-close-worker.js @@ -0,0 +1,34 @@ +'use strict'; + +const common = require('../common'); +common.skipIfInspectorDisabled(); +const { isMainThread, Worker } = require('worker_threads'); +const assert = require('assert'); +const inspector = require('inspector'); + +if (!isMainThread) { + // Verify the inspector api on the worker thread. + assert.strictEqual(inspector.url(), undefined); + + inspector.open(0, undefined, false); + const wsUrl = inspector.url(); + assert(wsUrl.startsWith('ws://')); + inspector.close(); + assert.strictEqual(inspector.url(), undefined); + return; +} + +// Open inspector on the main thread first. +inspector.open(0, undefined, false); +const wsUrl = inspector.url(); +assert(wsUrl.startsWith('ws://')); + +const worker = new Worker(__filename); +worker.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 0); + + // Verify inspector on the main thread is still active. + assert.strictEqual(inspector.url(), wsUrl); + inspector.close(); + assert.strictEqual(inspector.url(), undefined); +})); diff --git a/test/parallel/test-inspector-connect-main-thread.js b/test/parallel/test-inspector-connect-main-thread.js index 86ff6866bc0..b724bf3cd9d 100644 --- a/test/parallel/test-inspector-connect-main-thread.js +++ b/test/parallel/test-inspector-connect-main-thread.js @@ -8,7 +8,7 @@ const { Session } = require('inspector'); const path = require('path'); const { pathToFileURL } = require('url'); const { isMainThread, parentPort, Worker, workerData } = - require('worker_threads'); + require('worker_threads'); if (!workerData) { common.skipIfWorker(); @@ -100,6 +100,17 @@ async function ensureListenerDoesNotInterrupt(session) { } async function main() { + assert.throws( + () => { + const session = new Session(); + session.connectToMainThread(); + }, + { + code: 'ERR_INSPECTOR_NOT_WORKER', + name: 'Error', + message: 'Current thread is not a worker' + } + ); const sharedBuffer = new SharedArrayBuffer(1); const arrayBuffer = new Uint8Array(sharedBuffer); arrayBuffer[0] = 1; @@ -121,6 +132,16 @@ async function childMain() { await (await startWorker(true)).onMessagesSent; const session = new Session(); session.connectToMainThread(); + assert.throws( + () => { + session.connectToMainThread(); + }, + { + code: 'ERR_INSPECTOR_ALREADY_CONNECTED', + name: 'Error', + message: 'The inspector session is already connected' + } + ); await post(session, 'Debugger.enable'); await post(session, 'Runtime.enable'); await post(session, 'Debugger.setBreakpointByUrl', { @@ -137,9 +158,9 @@ async function childMain() { await new Promise((resolve) => setTimeout(resolve, 50)); const { result: { value } } = - await post(session, - 'Debugger.evaluateOnCallFrame', - { callFrameId, expression: 'a * 100' }); + await post(session, + 'Debugger.evaluateOnCallFrame', + { callFrameId, expression: 'a * 100' }); assert.strictEqual(value, 100); await post(session, 'Debugger.resume'); await ensureListenerDoesNotInterrupt(session); diff --git a/test/parallel/test-inspector-open-port-integer-overflow.js b/test/parallel/test-inspector-open-port-integer-overflow.js new file mode 100644 index 00000000000..0f9a4799d06 --- /dev/null +++ b/test/parallel/test-inspector-open-port-integer-overflow.js @@ -0,0 +1,17 @@ +'use strict'; + +// Regression test for an integer overflow in inspector.open() when the port +// exceeds the range of an unsigned 16-bit integer. + +const common = require('../common'); +common.skipIfInspectorDisabled(); +common.skipIfWorker(); + +const assert = require('assert'); +const inspector = require('inspector'); + +assert.throws(() => inspector.open(99999), { + name: 'RangeError', + code: 'ERR_OUT_OF_RANGE', + message: 'The value of "port" is out of range. It must be >= 0 && <= 65535. Received 99999' +}); diff --git a/test/parallel/test-internal-util-objects.js b/test/parallel/test-internal-util-objects.js new file mode 100644 index 00000000000..74068e4c577 --- /dev/null +++ b/test/parallel/test-internal-util-objects.js @@ -0,0 +1,119 @@ +// Flags: --expose-internals +'use strict'; +require('../common'); + +// Test helper objects from internal/util + +const assert = require('assert'); +const { + kEnumerableProperty, + kEmptyObject, +} = require('internal/util'); + +Object.prototype.blep = 'blop'; + +{ + assert.strictEqual( + kEnumerableProperty.blep, + undefined + ); + assert.strictEqual( + kEnumerableProperty.enumerable, + true + ); + assert.strictEqual( + Object.getPrototypeOf(kEnumerableProperty), + null + ); + assert.deepStrictEqual( + Object.getOwnPropertyNames(kEnumerableProperty), + [ 'enumerable' ] + ); + + assert.throws( + () => Object.setPrototypeOf(kEnumerableProperty, { value: undefined }), + TypeError + ); + assert.throws( + () => delete kEnumerableProperty.enumerable, + TypeError + ); + assert.throws( + () => kEnumerableProperty.enumerable = false, + TypeError + ); + assert.throws( + () => Object.assign(kEnumerableProperty, { enumerable: false }), + TypeError + ); + assert.throws( + () => kEnumerableProperty.value = undefined, + TypeError + ); + assert.throws( + () => Object.assign(kEnumerableProperty, { value: undefined }), + TypeError + ); + assert.throws( + () => Object.defineProperty(kEnumerableProperty, 'value', {}), + TypeError + ); +} + +{ + assert.strictEqual( + kEmptyObject.blep, + undefined + ); + assert.strictEqual( + kEmptyObject.prototype, + undefined + ); + assert.strictEqual( + Object.getPrototypeOf(kEmptyObject), + null + ); + assert.strictEqual( + kEmptyObject instanceof Object, + false + ); + assert.deepStrictEqual( + Object.getOwnPropertyDescriptors(kEmptyObject), + {} + ); + assert.deepStrictEqual( + Object.getOwnPropertyNames(kEmptyObject), + [] + ); + assert.deepStrictEqual( + Object.getOwnPropertySymbols(kEmptyObject), + [] + ); + assert.strictEqual( + Object.isExtensible(kEmptyObject), + false + ); + assert.strictEqual( + Object.isSealed(kEmptyObject), + true + ); + assert.strictEqual( + Object.isFrozen(kEmptyObject), + true + ); + + assert.throws( + () => kEmptyObject.foo = 'bar', + TypeError + ); + assert.throws( + () => Object.assign(kEmptyObject, { foo: 'bar' }), + TypeError + ); + assert.throws( + () => Object.defineProperty(kEmptyObject, 'foo', {}), + TypeError + ); +} + +delete Object.prototype.blep; diff --git a/test/parallel/test-loaders-this-value-inside-hook-functions.mjs b/test/parallel/test-loaders-this-value-inside-hook-functions.mjs new file mode 100644 index 00000000000..b74b7d9e1e4 --- /dev/null +++ b/test/parallel/test-loaders-this-value-inside-hook-functions.mjs @@ -0,0 +1,4 @@ +// Flags: --experimental-loader ./test/fixtures/es-module-loaders/loader-this-value-inside-hook-functions.mjs +import '../common/index.mjs'; + +// Actual test is inside the loader module. diff --git a/test/parallel/test-messageport-hasref.js b/test/parallel/test-messageport-hasref.js new file mode 100644 index 00000000000..bc213f7897d --- /dev/null +++ b/test/parallel/test-messageport-hasref.js @@ -0,0 +1,57 @@ +'use strict'; +const common = require('../common'); + +const { MessageChannel } = require('worker_threads'); +const { createHook } = require('async_hooks'); +const { strictEqual } = require('assert'); + +const handles = []; + +createHook({ + init(asyncId, type, triggerAsyncId, resource) { + if (type === 'MESSAGEPORT') { + handles.push(resource); + } + } +}).enable(); + +const { port1, port2 } = new MessageChannel(); +strictEqual(handles[0], port1); +strictEqual(handles[1], port2); + +strictEqual(handles[0].hasRef(), false); +strictEqual(handles[1].hasRef(), false); + +port1.unref(); +strictEqual(handles[0].hasRef(), false); + +port1.ref(); +strictEqual(handles[0].hasRef(), true); + +port1.unref(); +strictEqual(handles[0].hasRef(), false); + +port1.on('message', () => {}); +strictEqual(handles[0].hasRef(), true); + +port2.unref(); +strictEqual(handles[1].hasRef(), false); + +port2.ref(); +strictEqual(handles[1].hasRef(), true); + +port2.unref(); +strictEqual(handles[1].hasRef(), false); + +port2.on('message', () => {}); +strictEqual(handles[0].hasRef(), true); + +port1.on('close', common.mustCall(() => { + strictEqual(handles[0].hasRef(), false); + strictEqual(handles[1].hasRef(), false); +})); + +port2.close(); + +strictEqual(handles[0].hasRef(), true); +strictEqual(handles[1].hasRef(), true); diff --git a/test/parallel/test-module-isBuiltin.js b/test/parallel/test-module-isBuiltin.js new file mode 100644 index 00000000000..a7815a8dfc1 --- /dev/null +++ b/test/parallel/test-module-isBuiltin.js @@ -0,0 +1,16 @@ +'use strict'; +require('../common'); +const assert = require('assert'); +const { isBuiltin } = require('module'); + +// Includes modules in lib/ (even deprecated ones) +assert(isBuiltin('http')); +assert(isBuiltin('sys')); +assert(isBuiltin('node:fs')); +assert(isBuiltin('node:test')); + +// Does not include internal modules +assert(!isBuiltin('internal/errors')); +assert(!isBuiltin('test')); +assert(!isBuiltin('')); +assert(!isBuiltin(undefined)); diff --git a/test/parallel/test-module-main-fail.js b/test/parallel/test-module-main-fail.js index c66b6f2f7a8..2b6f188dd4c 100644 --- a/test/parallel/test-module-main-fail.js +++ b/test/parallel/test-module-main-fail.js @@ -10,7 +10,10 @@ for (const entryPoint of entryPoints) { try { execFileSync(node, [entryPoint], { stdio: 'pipe' }); } catch (e) { - assert(e.toString().match(/Error: Cannot find module/)); + const error = e.toString(); + assert.match(error, /MODULE_NOT_FOUND/); + assert.match(error, /Cannot find module/); + assert(error.includes(entryPoint)); continue; } assert.fail('Executing node with inexistent entry point should ' + diff --git a/test/parallel/test-module-prototype-mutation.js b/test/parallel/test-module-prototype-mutation.js new file mode 100644 index 00000000000..b21dba87b6a --- /dev/null +++ b/test/parallel/test-module-prototype-mutation.js @@ -0,0 +1,43 @@ +'use strict'; +const common = require('../common'); +const fixtures = require('../common/fixtures'); +const assert = require('assert'); + +Object.defineProperty(Object.prototype, 'name', { + __proto__: null, + get: common.mustNotCall('get %Object.prototype%.name'), + set: common.mustNotCall('set %Object.prototype%.name'), + enumerable: false, +}); +Object.defineProperty(Object.prototype, 'main', { + __proto__: null, + get: common.mustNotCall('get %Object.prototype%.main'), + set: common.mustNotCall('set %Object.prototype%.main'), + enumerable: false, +}); +Object.defineProperty(Object.prototype, 'type', { + __proto__: null, + get: common.mustNotCall('get %Object.prototype%.type'), + set: common.mustNotCall('set %Object.prototype%.type'), + enumerable: false, +}); +Object.defineProperty(Object.prototype, 'exports', { + __proto__: null, + get: common.mustNotCall('get %Object.prototype%.exports'), + set: common.mustNotCall('set %Object.prototype%.exports'), + enumerable: false, +}); +Object.defineProperty(Object.prototype, 'imports', { + __proto__: null, + get: common.mustNotCall('get %Object.prototype%.imports'), + set: common.mustNotCall('set %Object.prototype%.imports'), + enumerable: false, +}); + +assert.strictEqual( + require(fixtures.path('es-module-specifiers', 'node_modules', 'no-main-field')), + 'no main field' +); + +import(fixtures.fileURL('es-module-specifiers', 'index.mjs')) + .then(common.mustCall((module) => assert.strictEqual(module.noMain, 'no main field'))); diff --git a/test/parallel/test-net-connect-reset-after-destroy.js b/test/parallel/test-net-connect-reset-after-destroy.js new file mode 100644 index 00000000000..89e459229ab --- /dev/null +++ b/test/parallel/test-net-connect-reset-after-destroy.js @@ -0,0 +1,29 @@ +'use strict'; +const common = require('../common'); +const net = require('net'); +const assert = require('assert'); + +const server = net.createServer(); +server.listen(0, common.mustCall(function() { + const port = server.address().port; + const conn = net.createConnection(port); + server.on('connection', (socket) => { + socket.on('error', common.expectsError({ + code: 'ECONNRESET', + message: 'read ECONNRESET', + name: 'Error' + })); + }); + + conn.on('connect', common.mustCall(function() { + assert.strictEqual(conn, conn.resetAndDestroy().destroy()); + conn.on('error', common.mustNotCall()); + + conn.write(Buffer.from('fzfzfzfzfz'), common.expectsError({ + code: 'ERR_STREAM_DESTROYED', + message: 'Cannot call write after a stream was destroyed', + name: 'Error' + })); + server.close(); + })); +})); diff --git a/test/parallel/test-net-connect-reset-before-connected.js b/test/parallel/test-net-connect-reset-before-connected.js new file mode 100644 index 00000000000..1dc2b98183c --- /dev/null +++ b/test/parallel/test-net-connect-reset-before-connected.js @@ -0,0 +1,13 @@ +'use strict'; +const common = require('../common'); +const net = require('net'); + +const server = net.createServer(); +server.listen(0); +const port = server.address().port; +const socket = net.connect(port, common.localhostIPv4, common.mustNotCall()); +socket.on('error', common.mustNotCall()); +server.close(); +socket.resetAndDestroy(); +// `reset` waiting socket connected to sent the RST packet +socket.destroy(); diff --git a/test/parallel/test-net-connect-reset-until-connected.js b/test/parallel/test-net-connect-reset-until-connected.js new file mode 100644 index 00000000000..e40ec05f6ce --- /dev/null +++ b/test/parallel/test-net-connect-reset-until-connected.js @@ -0,0 +1,20 @@ +'use strict'; + +const common = require('../common'); +const net = require('net'); + +const server = net.createServer(); +server.listen(0, common.mustCall(function() { + const port = server.address().port; + const conn = net.createConnection(port); + conn.on('close', common.mustCall()); + server.on('connection', (socket) => { + socket.on('error', common.expectsError({ + code: 'ECONNRESET', + message: 'read ECONNRESET', + name: 'Error' + })); + server.close(); + }); + conn.resetAndDestroy(); +})); diff --git a/test/parallel/test-net-connect-reset.js b/test/parallel/test-net-connect-reset.js new file mode 100644 index 00000000000..1f3e806aa99 --- /dev/null +++ b/test/parallel/test-net-connect-reset.js @@ -0,0 +1,13 @@ +'use strict'; +const common = require('../common'); +const net = require('net'); + +const socket = new net.Socket(); +socket.resetAndDestroy(); +// Emit error if socket is not connecting/connected +socket.on('error', common.mustCall( + common.expectsError({ + code: 'ERR_SOCKET_CLOSED', + name: 'Error' + })) +); diff --git a/test/parallel/test-net-local-address-port.js b/test/parallel/test-net-local-address-port.js index dfd7ef359b7..cfc6f61ef35 100644 --- a/test/parallel/test-net-local-address-port.js +++ b/test/parallel/test-net-local-address-port.js @@ -27,6 +27,7 @@ const net = require('net'); const server = net.createServer(common.mustCall(function(socket) { assert.strictEqual(socket.localAddress, common.localhostIPv4); assert.strictEqual(socket.localPort, this.address().port); + assert.strictEqual(socket.localFamily, this.address().family); socket.on('end', function() { server.close(); }); diff --git a/test/parallel/test-net-perf_hooks.js b/test/parallel/test-net-perf_hooks.js new file mode 100644 index 00000000000..6b0d13aab27 --- /dev/null +++ b/test/parallel/test-net-perf_hooks.js @@ -0,0 +1,60 @@ +'use strict'; + +const common = require('../common'); +const tmpdir = require('../common/tmpdir'); +const assert = require('assert'); +const net = require('net'); + +tmpdir.refresh(); + +const { PerformanceObserver } = require('perf_hooks'); + +const entries = []; + +const obs = new PerformanceObserver(common.mustCallAtLeast((items) => { + entries.push(...items.getEntries()); +})); + +obs.observe({ type: 'net' }); + +{ + const server = net.createServer(common.mustCall((socket) => { + socket.destroy(); + })); + + server.listen(0, common.mustCall(async () => { + await new Promise((resolve, reject) => { + const socket = net.connect(server.address().port); + socket.on('end', resolve); + socket.on('error', reject); + }); + server.close(); + })); +} + +{ + const server = net.createServer(common.mustCall((socket) => { + socket.destroy(); + })); + + server.listen(common.PIPE, common.mustCall(async () => { + await new Promise((resolve, reject) => { + const socket = net.connect(common.PIPE); + socket.on('end', resolve); + socket.on('error', reject); + }); + server.close(); + })); +} + +process.on('exit', () => { + assert.strictEqual(entries.length, 1); + entries.forEach((entry) => { + assert.strictEqual(entry.name, 'connect'); + assert.strictEqual(entry.entryType, 'net'); + assert.strictEqual(typeof entry.startTime, 'number'); + assert.strictEqual(typeof entry.duration, 'number'); + assert.strictEqual(!!entry.detail.host, true); + assert.strictEqual(!!entry.detail.port, true); + }); +}); diff --git a/test/parallel/test-net-remote-address.js b/test/parallel/test-net-remote-address.js new file mode 100644 index 00000000000..a116cb99d3b --- /dev/null +++ b/test/parallel/test-net-remote-address.js @@ -0,0 +1,23 @@ +'use strict'; + +const common = require('../common'); +const net = require('net'); +const { strictEqual } = require('assert'); + +const server = net.createServer(); + +server.listen(common.mustCall(function() { + const socket = net.connect({ port: server.address().port }); + + strictEqual(socket.connecting, true); + strictEqual(socket.remoteAddress, undefined); + + socket.on('connect', common.mustCall(function() { + strictEqual(socket.remoteAddress !== undefined, true); + socket.end(); + })); + + socket.on('end', common.mustCall(function() { + server.close(); + })); +})); diff --git a/test/parallel/test-net-server-drop-connections.js b/test/parallel/test-net-server-drop-connections.js new file mode 100644 index 00000000000..4c495bdfb9e --- /dev/null +++ b/test/parallel/test-net-server-drop-connections.js @@ -0,0 +1,26 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); + +let firstSocket; +const server = net.createServer(common.mustCall((socket) => { + firstSocket = socket; +})); + +server.maxConnections = 1; + +server.on('drop', common.mustCall((data) => { + assert.strictEqual(!!data.localAddress, true); + assert.strictEqual(!!data.localPort, true); + assert.strictEqual(!!data.remoteAddress, true); + assert.strictEqual(!!data.remotePort, true); + assert.strictEqual(!!data.remoteFamily, true); + firstSocket.destroy(); + server.close(); +})); + +server.listen(0, () => { + net.createConnection(server.address().port); + net.createConnection(server.address().port); +}); diff --git a/test/parallel/test-net-server-keepalive.js b/test/parallel/test-net-server-keepalive.js new file mode 100644 index 00000000000..6f3db6468f6 --- /dev/null +++ b/test/parallel/test-net-server-keepalive.js @@ -0,0 +1,35 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); + +const server = net.createServer({ + keepAlive: true, + keepAliveInitialDelay: 1000 +}, common.mustCall((socket) => { + const setKeepAlive = socket._handle.setKeepAlive; + socket._handle.setKeepAlive = common.mustCall((enable, initialDelay) => { + assert.strictEqual(enable, true); + assert.match(String(initialDelay), /^2|3$/); + return setKeepAlive.call(socket._handle, enable, initialDelay); + }, 2); + socket.setKeepAlive(true, 1000); + socket.setKeepAlive(true, 2000); + socket.setKeepAlive(true, 3000); + socket.destroy(); + server.close(); +})).listen(0, common.mustCall(() => { + net.connect(server.address().port); +})); + +const onconnection = server._handle.onconnection; +server._handle.onconnection = common.mustCall((err, clientHandle) => { + const setKeepAlive = clientHandle.setKeepAlive; + clientHandle.setKeepAlive = common.mustCall((enable, initialDelayMsecs) => { + assert.strictEqual(enable, server.keepAlive); + assert.strictEqual(initialDelayMsecs, server.keepAliveInitialDelay); + setKeepAlive.call(clientHandle, enable, initialDelayMsecs); + clientHandle.setKeepAlive = setKeepAlive; + }); + onconnection.call(server._handle, err, clientHandle); +}); diff --git a/test/parallel/test-net-server-nodelay.js b/test/parallel/test-net-server-nodelay.js new file mode 100644 index 00000000000..a7f11475abe --- /dev/null +++ b/test/parallel/test-net-server-nodelay.js @@ -0,0 +1,26 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); + +const server = net.createServer({ + noDelay: true +}, common.mustCall((socket) => { + socket._handle.setNoDelay = common.mustNotCall(); + socket.setNoDelay(true); + socket.destroy(); + server.close(); +})).listen(0, common.mustCall(() => { + net.connect(server.address().port); +})); + +const onconnection = server._handle.onconnection; +server._handle.onconnection = common.mustCall((err, clientHandle) => { + const setNoDelay = clientHandle.setNoDelay; + clientHandle.setNoDelay = common.mustCall((enable) => { + assert.strictEqual(enable, server.noDelay); + setNoDelay.call(clientHandle, enable); + clientHandle.setNoDelay = setNoDelay; + }); + onconnection.call(server._handle, err, clientHandle); +}); diff --git a/test/parallel/test-net-server-reset.js b/test/parallel/test-net-server-reset.js new file mode 100644 index 00000000000..ea78cd27432 --- /dev/null +++ b/test/parallel/test-net-server-reset.js @@ -0,0 +1,36 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); + +const sockets = []; + +const server = net.createServer(function(c) { + c.on('close', common.mustCall()); + + sockets.push(c); + + if (sockets.length === 2) { + assert.strictEqual(server.close(), server); + sockets.forEach((c) => c.resetAndDestroy()); + } +}); + +server.on('close', common.mustCall()); + +assert.strictEqual(server, server.listen(0, () => { + net.createConnection(server.address().port) + .on('error', common.mustCall( + common.expectsError({ + code: 'ECONNRESET', + name: 'Error' + })) + ); + net.createConnection(server.address().port) + .on('error', common.mustCall( + common.expectsError({ + code: 'ECONNRESET', + name: 'Error' + })) + ); +})); diff --git a/test/parallel/test-net-socket-reset-send.js b/test/parallel/test-net-socket-reset-send.js new file mode 100644 index 00000000000..b7b9f66cb93 --- /dev/null +++ b/test/parallel/test-net-socket-reset-send.js @@ -0,0 +1,30 @@ +'use strict'; + +const common = require('../common'); +const net = require('net'); +const assert = require('assert'); + +const server = net.createServer(); +server.listen(0, common.mustCall(() => { + const port = server.address().port; + const conn = net.createConnection(port); + server.on('connection', (socket) => { + socket.on('error', common.expectsError({ + code: 'ECONNRESET', + message: 'read ECONNRESET', + name: 'Error' + })); + }); + + conn.on('connect', common.mustCall(() => { + assert.strictEqual(conn, conn.resetAndDestroy().destroy()); + conn.on('error', common.mustNotCall()); + + conn.write(Buffer.from('fzfzfzfzfz'), common.expectsError({ + code: 'ERR_STREAM_DESTROYED', + message: 'Cannot call write after a stream was destroyed', + name: 'Error' + })); + server.close(); + })); +})); diff --git a/test/parallel/test-net-socket-reset-twice.js b/test/parallel/test-net-socket-reset-twice.js new file mode 100644 index 00000000000..0292c5e3ab5 --- /dev/null +++ b/test/parallel/test-net-socket-reset-twice.js @@ -0,0 +1,15 @@ +'use strict'; +const common = require('../common'); +const net = require('net'); + +const server = net.createServer(); +server.listen(0); +const port = server.address().port; +const conn = net.createConnection(port); + +conn.on('error', common.mustCall(() => { + conn.resetAndDestroy(); +})); + +conn.on('close', common.mustCall()); +server.close(); diff --git a/test/parallel/test-net-socket-timeout.js b/test/parallel/test-net-socket-timeout.js index 209359fda60..7ebef777aff 100644 --- a/test/parallel/test-net-socket-timeout.js +++ b/test/parallel/test-net-socket-timeout.js @@ -54,9 +54,9 @@ for (let i = 0; i < validDelays.length; i++) { } for (let i = 0; i < invalidCallbacks.length; i++) { - [0, 1].forEach((mesc) => + [0, 1].forEach((msec) => assert.throws( - () => s.setTimeout(mesc, invalidCallbacks[i]), + () => s.setTimeout(msec, invalidCallbacks[i]), { code: 'ERR_INVALID_CALLBACK', name: 'TypeError', diff --git a/test/parallel/test-net-write-fully-async-buffer.js b/test/parallel/test-net-write-fully-async-buffer.js index 207ae24f6a3..0dddb51bd76 100644 --- a/test/parallel/test-net-write-fully-async-buffer.js +++ b/test/parallel/test-net-write-fully-async-buffer.js @@ -23,7 +23,7 @@ const server = net.createServer(common.mustCall(function(conn) { } while (conn.write(Buffer.from(data))); - global.gc(true); + global.gc({ type: 'minor' }); // The buffer allocated above should still be alive. } diff --git a/test/parallel/test-net-write-fully-async-hex-string.js b/test/parallel/test-net-write-fully-async-hex-string.js index f3115d8d2f7..37b5cd75c13 100644 --- a/test/parallel/test-net-write-fully-async-hex-string.js +++ b/test/parallel/test-net-write-fully-async-hex-string.js @@ -21,7 +21,7 @@ const server = net.createServer(common.mustCall(function(conn) { } while (conn.write(data, 'hex')); - global.gc(true); + global.gc({ type: 'minor' }); // The buffer allocated inside the .write() call should still be alive. } diff --git a/test/parallel/test-os.js b/test/parallel/test-os.js index 80c32ea2a99..cceebe1a6f1 100644 --- a/test/parallel/test-os.js +++ b/test/parallel/test-os.js @@ -245,7 +245,7 @@ assert.strictEqual(`${os.tmpdir}`, os.tmpdir()); assert.strictEqual(`${os.arch}`, os.arch()); assert.strictEqual(`${os.platform}`, os.platform()); assert.strictEqual(`${os.version}`, os.version()); - +assert.strictEqual(`${os.machine}`, os.machine()); assert.strictEqual(+os.totalmem, os.totalmem()); // Assert that the following values are coercible to numbers. diff --git a/test/parallel/test-parse-args.mjs b/test/parallel/test-parse-args.mjs new file mode 100644 index 00000000000..ae39869cd36 --- /dev/null +++ b/test/parallel/test-parse-args.mjs @@ -0,0 +1,994 @@ +import '../common/index.mjs'; +import assert from 'node:assert'; +import { test } from 'node:test'; +import { parseArgs } from 'node:util'; + +test('when short option used as flag then stored as flag', () => { + const args = ['-f']; + const expected = { values: { __proto__: null, f: true }, positionals: [] }; + const result = parseArgs({ strict: false, args }); + assert.deepStrictEqual(result, expected); +}); + +test('when short option used as flag before positional then stored as flag and positional (and not value)', () => { + const args = ['-f', 'bar']; + const expected = { values: { __proto__: null, f: true }, positionals: [ 'bar' ] }; + const result = parseArgs({ strict: false, args }); + assert.deepStrictEqual(result, expected); +}); + +test('when short option `type: "string"` used with value then stored as value', () => { + const args = ['-f', 'bar']; + const options = { f: { type: 'string' } }; + const expected = { values: { __proto__: null, f: 'bar' }, positionals: [] }; + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('when short option listed in short used as flag then long option stored as flag', () => { + const args = ['-f']; + const options = { foo: { short: 'f', type: 'boolean' } }; + const expected = { values: { __proto__: null, foo: true }, positionals: [] }; + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('when short option listed in short and long listed in `type: "string"` and ' + + 'used with value then long option stored as value', () => { + const args = ['-f', 'bar']; + const options = { foo: { short: 'f', type: 'string' } }; + const expected = { values: { __proto__: null, foo: 'bar' }, positionals: [] }; + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('when short option `type: "string"` used without value then stored as flag', () => { + const args = ['-f']; + const options = { f: { type: 'string' } }; + const expected = { values: { __proto__: null, f: true }, positionals: [] }; + const result = parseArgs({ strict: false, args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('short option group behaves like multiple short options', () => { + const args = ['-rf']; + const options = { }; + const expected = { values: { __proto__: null, r: true, f: true }, positionals: [] }; + const result = parseArgs({ strict: false, args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('short option group does not consume subsequent positional', () => { + const args = ['-rf', 'foo']; + const options = { }; + const expected = { values: { __proto__: null, r: true, f: true }, positionals: ['foo'] }; + const result = parseArgs({ strict: false, args, options }); + assert.deepStrictEqual(result, expected); +}); + +// See: Guideline 5 https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html +test('if terminal of short-option group configured `type: "string"`, subsequent positional is stored', () => { + const args = ['-rvf', 'foo']; + const options = { f: { type: 'string' } }; + const expected = { values: { __proto__: null, r: true, v: true, f: 'foo' }, positionals: [] }; + const result = parseArgs({ strict: false, args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('handles short-option groups in conjunction with long-options', () => { + const args = ['-rf', '--foo', 'foo']; + const options = { foo: { type: 'string' } }; + const expected = { values: { __proto__: null, r: true, f: true, foo: 'foo' }, positionals: [] }; + const result = parseArgs({ strict: false, args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('handles short-option groups with "short" alias configured', () => { + const args = ['-rf']; + const options = { remove: { short: 'r', type: 'boolean' } }; + const expected = { values: { __proto__: null, remove: true, f: true }, positionals: [] }; + const result = parseArgs({ strict: false, args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('handles short-option followed by its value', () => { + const args = ['-fFILE']; + const options = { foo: { short: 'f', type: 'string' } }; + const expected = { values: { __proto__: null, foo: 'FILE' }, positionals: [] }; + const result = parseArgs({ strict: false, args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('Everything after a bare `--` is considered a positional argument', () => { + const args = ['--', 'barepositionals', 'mopositionals']; + const expected = { values: { __proto__: null }, positionals: ['barepositionals', 'mopositionals'] }; + const result = parseArgs({ allowPositionals: true, args }); + assert.deepStrictEqual(result, expected, Error('testing bare positionals')); +}); + +test('args are true', () => { + const args = ['--foo', '--bar']; + const expected = { values: { __proto__: null, foo: true, bar: true }, positionals: [] }; + const result = parseArgs({ strict: false, args }); + assert.deepStrictEqual(result, expected, Error('args are true')); +}); + +test('arg is true and positional is identified', () => { + const args = ['--foo=a', '--foo', 'b']; + const expected = { values: { __proto__: null, foo: true }, positionals: ['b'] }; + const result = parseArgs({ strict: false, args }); + assert.deepStrictEqual(result, expected, Error('arg is true and positional is identified')); +}); + +test('args equals are passed `type: "string"`', () => { + const args = ['--so=wat']; + const options = { so: { type: 'string' } }; + const expected = { values: { __proto__: null, so: 'wat' }, positionals: [] }; + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected, Error('arg value is passed')); +}); + +test('when args include single dash then result stores dash as positional', () => { + const args = ['-']; + const expected = { values: { __proto__: null }, positionals: ['-'] }; + const result = parseArgs({ allowPositionals: true, args }); + assert.deepStrictEqual(result, expected); +}); + +test('zero config args equals are parsed as if `type: "string"`', () => { + const args = ['--so=wat']; + const options = { }; + const expected = { values: { __proto__: null, so: 'wat' }, positionals: [] }; + const result = parseArgs({ strict: false, args, options }); + assert.deepStrictEqual(result, expected, Error('arg value is passed')); +}); + +test('same arg is passed twice `type: "string"` and last value is recorded', () => { + const args = ['--foo=a', '--foo', 'b']; + const options = { foo: { type: 'string' } }; + const expected = { values: { __proto__: null, foo: 'b' }, positionals: [] }; + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected, Error('last arg value is passed')); +}); + +test('args equals pass string including more equals', () => { + const args = ['--so=wat=bing']; + const options = { so: { type: 'string' } }; + const expected = { values: { __proto__: null, so: 'wat=bing' }, positionals: [] }; + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected, Error('arg value is passed')); +}); + +test('first arg passed for `type: "string"` and "multiple" is in array', () => { + const args = ['--foo=a']; + const options = { foo: { type: 'string', multiple: true } }; + const expected = { values: { __proto__: null, foo: ['a'] }, positionals: [] }; + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected, Error('first multiple in array')); +}); + +test('args are passed `type: "string"` and "multiple"', () => { + const args = ['--foo=a', '--foo', 'b']; + const options = { + foo: { + type: 'string', + multiple: true, + }, + }; + const expected = { values: { __proto__: null, foo: ['a', 'b'] }, positionals: [] }; + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected, Error('both arg values are passed')); +}); + +test('when expecting `multiple:true` boolean option and option used multiple times then result includes array of ' + + 'booleans matching usage', () => { + const args = ['--foo', '--foo']; + const options = { + foo: { + type: 'boolean', + multiple: true, + }, + }; + const expected = { values: { __proto__: null, foo: [true, true] }, positionals: [] }; + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('order of option and positional does not matter (per README)', () => { + const args1 = ['--foo=bar', 'baz']; + const args2 = ['baz', '--foo=bar']; + const options = { foo: { type: 'string' } }; + const expected = { values: { __proto__: null, foo: 'bar' }, positionals: ['baz'] }; + assert.deepStrictEqual( + parseArgs({ allowPositionals: true, args: args1, options }), + expected, + Error('option then positional') + ); + assert.deepStrictEqual( + parseArgs({ allowPositionals: true, args: args2, options }), + expected, + Error('positional then option') + ); +}); + +test('correct default args when use node -p', () => { + const holdArgv = process.argv; + process.argv = [process.argv0, '--foo']; + const holdExecArgv = process.execArgv; + process.execArgv = ['-p', '0']; + const result = parseArgs({ strict: false }); + + const expected = { values: { __proto__: null, foo: true }, + positionals: [] }; + assert.deepStrictEqual(result, expected); + process.argv = holdArgv; + process.execArgv = holdExecArgv; +}); + +test('correct default args when use node --print', () => { + const holdArgv = process.argv; + process.argv = [process.argv0, '--foo']; + const holdExecArgv = process.execArgv; + process.execArgv = ['--print', '0']; + const result = parseArgs({ strict: false }); + + const expected = { values: { __proto__: null, foo: true }, + positionals: [] }; + assert.deepStrictEqual(result, expected); + process.argv = holdArgv; + process.execArgv = holdExecArgv; +}); + +test('correct default args when use node -e', () => { + const holdArgv = process.argv; + process.argv = [process.argv0, '--foo']; + const holdExecArgv = process.execArgv; + process.execArgv = ['-e', '0']; + const result = parseArgs({ strict: false }); + + const expected = { values: { __proto__: null, foo: true }, + positionals: [] }; + assert.deepStrictEqual(result, expected); + process.argv = holdArgv; + process.execArgv = holdExecArgv; +}); + +test('correct default args when use node --eval', () => { + const holdArgv = process.argv; + process.argv = [process.argv0, '--foo']; + const holdExecArgv = process.execArgv; + process.execArgv = ['--eval', '0']; + const result = parseArgs({ strict: false }); + const expected = { values: { __proto__: null, foo: true }, + positionals: [] }; + assert.deepStrictEqual(result, expected); + process.argv = holdArgv; + process.execArgv = holdExecArgv; +}); + +test('correct default args when normal arguments', () => { + const holdArgv = process.argv; + process.argv = [process.argv0, 'script.js', '--foo']; + const holdExecArgv = process.execArgv; + process.execArgv = []; + const result = parseArgs({ strict: false }); + + const expected = { values: { __proto__: null, foo: true }, + positionals: [] }; + assert.deepStrictEqual(result, expected); + process.argv = holdArgv; + process.execArgv = holdExecArgv; +}); + +test('excess leading dashes on options are retained', () => { + // Enforce a design decision for an edge case. + const args = ['---triple']; + const options = { }; + const expected = { + values: { '__proto__': null, '-triple': true }, + positionals: [] + }; + const result = parseArgs({ strict: false, args, options }); + assert.deepStrictEqual(result, expected, Error('excess option dashes are retained')); +}); + +test('positional arguments are allowed by default in strict:false', () => { + const args = ['foo']; + const options = { }; + const expected = { + values: { __proto__: null }, + positionals: ['foo'] + }; + const result = parseArgs({ strict: false, args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('positional arguments may be explicitly disallowed in strict:false', () => { + const args = ['foo']; + const options = { }; + assert.throws(() => { parseArgs({ strict: false, allowPositionals: false, args, options }); }, { + code: 'ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL' + }); +}); + +// Test bad inputs + +test('invalid argument passed for options', () => { + const args = ['--so=wat']; + const options = 'bad value'; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_INVALID_ARG_TYPE' + }); +}); + +test('type property missing for option then throw', () => { + const knownOptions = { foo: { } }; + assert.throws(() => { parseArgs({ options: knownOptions }); }, { + code: 'ERR_INVALID_ARG_TYPE' + }); +}); + +test('boolean passed to "type" option', () => { + const args = ['--so=wat']; + const options = { foo: { type: true } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_INVALID_ARG_TYPE' + }); +}); + +test('invalid union value passed to "type" option', () => { + const args = ['--so=wat']; + const options = { foo: { type: 'str' } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_INVALID_ARG_TYPE' + }); +}); + +// Test strict mode + +test('unknown long option --bar', () => { + const args = ['--foo', '--bar']; + const options = { foo: { type: 'boolean' } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_PARSE_ARGS_UNKNOWN_OPTION' + }); +}); + +test('unknown short option -b', () => { + const args = ['--foo', '-b']; + const options = { foo: { type: 'boolean' } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_PARSE_ARGS_UNKNOWN_OPTION' + }); +}); + +test('unknown option -r in short option group -bar', () => { + const args = ['-bar']; + const options = { b: { type: 'boolean' }, a: { type: 'boolean' } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_PARSE_ARGS_UNKNOWN_OPTION' + }); +}); + +test('unknown option with explicit value', () => { + const args = ['--foo', '--bar=baz']; + const options = { foo: { type: 'boolean' } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_PARSE_ARGS_UNKNOWN_OPTION' + }); +}); + +test('unexpected positional', () => { + const args = ['foo']; + const options = { foo: { type: 'boolean' } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL' + }); +}); + +test('unexpected positional after --', () => { + const args = ['--', 'foo']; + const options = { foo: { type: 'boolean' } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL' + }); +}); + +test('-- by itself is not a positional', () => { + const args = ['--foo', '--']; + const options = { foo: { type: 'boolean' } }; + const result = parseArgs({ args, options }); + const expected = { values: { __proto__: null, foo: true }, + positionals: [] }; + assert.deepStrictEqual(result, expected); +}); + +test('string option used as boolean', () => { + const args = ['--foo']; + const options = { foo: { type: 'string' } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE' + }); +}); + +test('boolean option used with value', () => { + const args = ['--foo=bar']; + const options = { foo: { type: 'boolean' } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE' + }); +}); + +test('invalid short option length', () => { + const args = []; + const options = { foo: { short: 'fo', type: 'boolean' } }; + assert.throws(() => { parseArgs({ args, options }); }, { + code: 'ERR_INVALID_ARG_VALUE' + }); +}); + +test('null prototype: when no options then values.toString is undefined', () => { + const result = parseArgs({ args: [] }); + assert.strictEqual(result.values.toString, undefined); +}); + +test('null prototype: when --toString then values.toString is true', () => { + const args = ['--toString']; + const options = { toString: { type: 'boolean' } }; + const expectedResult = { values: { __proto__: null, toString: true }, positionals: [] }; + + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expectedResult); +}); + +const candidateGreedyOptions = [ + '', + '-', + '--', + 'abc', + '123', + '-s', + '--foo', +]; + +candidateGreedyOptions.forEach((value) => { + test(`greedy: when short option with value '${value}' then eaten`, () => { + const args = ['-w', value]; + const options = { with: { type: 'string', short: 'w' } }; + const expectedResult = { values: { __proto__: null, with: value }, positionals: [] }; + + const result = parseArgs({ args, options, strict: false }); + assert.deepStrictEqual(result, expectedResult); + }); + + test(`greedy: when long option with value '${value}' then eaten`, () => { + const args = ['--with', value]; + const options = { with: { type: 'string', short: 'w' } }; + const expectedResult = { values: { __proto__: null, with: value }, positionals: [] }; + + const result = parseArgs({ args, options, strict: false }); + assert.deepStrictEqual(result, expectedResult); + }); +}); + +test('strict: when candidate option value is plain text then does not throw', () => { + const args = ['--with', 'abc']; + const options = { with: { type: 'string' } }; + const expectedResult = { values: { __proto__: null, with: 'abc' }, positionals: [] }; + + const result = parseArgs({ args, options, strict: true }); + assert.deepStrictEqual(result, expectedResult); +}); + +test("strict: when candidate option value is '-' then does not throw", () => { + const args = ['--with', '-']; + const options = { with: { type: 'string' } }; + const expectedResult = { values: { __proto__: null, with: '-' }, positionals: [] }; + + const result = parseArgs({ args, options, strict: true }); + assert.deepStrictEqual(result, expectedResult); +}); + +test("strict: when candidate option value is '--' then throws", () => { + const args = ['--with', '--']; + const options = { with: { type: 'string' } }; + + assert.throws(() => { + parseArgs({ args, options }); + }, { + code: 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE' + }); +}); + +test('strict: when candidate option value is short option then throws', () => { + const args = ['--with', '-a']; + const options = { with: { type: 'string' } }; + + assert.throws(() => { + parseArgs({ args, options }); + }, { + code: 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE' + }); +}); + +test('strict: when candidate option value is short option digit then throws', () => { + const args = ['--with', '-1']; + const options = { with: { type: 'string' } }; + + assert.throws(() => { + parseArgs({ args, options }); + }, { + code: 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE' + }); +}); + +test('strict: when candidate option value is long option then throws', () => { + const args = ['--with', '--foo']; + const options = { with: { type: 'string' } }; + + assert.throws(() => { + parseArgs({ args, options }); + }, { + code: 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE' + }); +}); + +test('strict: when short option and suspect value then throws with short option in error message', () => { + const args = ['-w', '--foo']; + const options = { with: { type: 'string', short: 'w' } }; + + assert.throws(() => { + parseArgs({ args, options }); + }, /for '-w'/ + ); +}); + +test('strict: when long option and suspect value then throws with long option in error message', () => { + const args = ['--with', '--foo']; + const options = { with: { type: 'string' } }; + + assert.throws(() => { + parseArgs({ args, options }); + }, /for '--with'/ + ); +}); + +test('strict: when short option and suspect value then throws with whole expected message', () => { + const args = ['-w', '--foo']; + const options = { with: { type: 'string', short: 'w' } }; + + try { + parseArgs({ args, options }); + } catch (err) { + console.info(err.message); + } + + assert.throws(() => { + parseArgs({ args, options }); + }, /To specify an option argument starting with a dash use '--with=-XYZ' or '-w-XYZ'/ + ); +}); + +test('strict: when long option and suspect value then throws with whole expected message', () => { + const args = ['--with', '--foo']; + const options = { with: { type: 'string', short: 'w' } }; + + assert.throws(() => { + parseArgs({ args, options }); + }, /To specify an option argument starting with a dash use '--with=-XYZ'/ + ); +}); + +test('tokens: positional', () => { + const args = ['one']; + const expectedTokens = [ + { kind: 'positional', index: 0, value: 'one' }, + ]; + const { tokens } = parseArgs({ strict: false, args, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: -- followed by option-like', () => { + const args = ['--', '--foo']; + const expectedTokens = [ + { kind: 'option-terminator', index: 0 }, + { kind: 'positional', index: 1, value: '--foo' }, + ]; + const { tokens } = parseArgs({ strict: false, args, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:true boolean short', () => { + const args = ['-f']; + const options = { + file: { short: 'f', type: 'boolean' } + }; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '-f', + index: 0, value: undefined, inlineValue: undefined }, + ]; + const { tokens } = parseArgs({ strict: true, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:true boolean long', () => { + const args = ['--file']; + const options = { + file: { short: 'f', type: 'boolean' } + }; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '--file', + index: 0, value: undefined, inlineValue: undefined }, + ]; + const { tokens } = parseArgs({ strict: true, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:false boolean short', () => { + const args = ['-f']; + const expectedTokens = [ + { kind: 'option', name: 'f', rawName: '-f', + index: 0, value: undefined, inlineValue: undefined }, + ]; + const { tokens } = parseArgs({ strict: false, args, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:false boolean long', () => { + const args = ['--file']; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '--file', + index: 0, value: undefined, inlineValue: undefined }, + ]; + const { tokens } = parseArgs({ strict: false, args, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:false boolean option group', () => { + const args = ['-ab']; + const expectedTokens = [ + { kind: 'option', name: 'a', rawName: '-a', + index: 0, value: undefined, inlineValue: undefined }, + { kind: 'option', name: 'b', rawName: '-b', + index: 0, value: undefined, inlineValue: undefined }, + ]; + const { tokens } = parseArgs({ strict: false, args, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:false boolean option group with repeated option', () => { + // Also positional to check index correct after grouop + const args = ['-aa', 'pos']; + const expectedTokens = [ + { kind: 'option', name: 'a', rawName: '-a', + index: 0, value: undefined, inlineValue: undefined }, + { kind: 'option', name: 'a', rawName: '-a', + index: 0, value: undefined, inlineValue: undefined }, + { kind: 'positional', index: 1, value: 'pos' }, + ]; + const { tokens } = parseArgs({ strict: false, allowPositionals: true, args, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:true string short with value after space', () => { + // Also positional to check index correct after out-of-line. + const args = ['-f', 'bar', 'ppp']; + const options = { + file: { short: 'f', type: 'string' } + }; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '-f', + index: 0, value: 'bar', inlineValue: false }, + { kind: 'positional', index: 2, value: 'ppp' }, + ]; + const { tokens } = parseArgs({ strict: true, allowPositionals: true, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:true string short with value inline', () => { + const args = ['-fBAR']; + const options = { + file: { short: 'f', type: 'string' } + }; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '-f', + index: 0, value: 'BAR', inlineValue: true }, + ]; + const { tokens } = parseArgs({ strict: true, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:false string short missing value', () => { + const args = ['-f']; + const options = { + file: { short: 'f', type: 'string' } + }; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '-f', + index: 0, value: undefined, inlineValue: undefined }, + ]; + const { tokens } = parseArgs({ strict: false, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:true string long with value after space', () => { + // Also positional to check index correct after out-of-line. + const args = ['--file', 'bar', 'ppp']; + const options = { + file: { short: 'f', type: 'string' } + }; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '--file', + index: 0, value: 'bar', inlineValue: false }, + { kind: 'positional', index: 2, value: 'ppp' }, + ]; + const { tokens } = parseArgs({ strict: true, allowPositionals: true, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:true string long with value inline', () => { + // Also positional to check index correct after out-of-line. + const args = ['--file=bar', 'pos']; + const options = { + file: { short: 'f', type: 'string' } + }; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '--file', + index: 0, value: 'bar', inlineValue: true }, + { kind: 'positional', index: 1, value: 'pos' }, + ]; + const { tokens } = parseArgs({ strict: true, allowPositionals: true, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:false string long with value inline', () => { + const args = ['--file=bar']; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '--file', + index: 0, value: 'bar', inlineValue: true }, + ]; + const { tokens } = parseArgs({ strict: false, args, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:false string long missing value', () => { + const args = ['--file']; + const options = { + file: { short: 'f', type: 'string' } + }; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '--file', + index: 0, value: undefined, inlineValue: undefined }, + ]; + const { tokens } = parseArgs({ strict: false, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:true complex option group with value after space', () => { + // Also positional to check index correct afterwards. + const args = ['-ab', 'c', 'pos']; + const options = { + alpha: { short: 'a', type: 'boolean' }, + beta: { short: 'b', type: 'string' }, + }; + const expectedTokens = [ + { kind: 'option', name: 'alpha', rawName: '-a', + index: 0, value: undefined, inlineValue: undefined }, + { kind: 'option', name: 'beta', rawName: '-b', + index: 0, value: 'c', inlineValue: false }, + { kind: 'positional', index: 2, value: 'pos' }, + ]; + const { tokens } = parseArgs({ strict: true, allowPositionals: true, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:true complex option group with inline value', () => { + // Also positional to check index correct afterwards. + const args = ['-abc', 'pos']; + const options = { + alpha: { short: 'a', type: 'boolean' }, + beta: { short: 'b', type: 'string' }, + }; + const expectedTokens = [ + { kind: 'option', name: 'alpha', rawName: '-a', + index: 0, value: undefined, inlineValue: undefined }, + { kind: 'option', name: 'beta', rawName: '-b', + index: 0, value: 'c', inlineValue: true }, + { kind: 'positional', index: 1, value: 'pos' }, + ]; + const { tokens } = parseArgs({ strict: true, allowPositionals: true, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:false with single dashes', () => { + const args = ['--file', '-', '-']; + const options = { + file: { short: 'f', type: 'string' }, + }; + const expectedTokens = [ + { kind: 'option', name: 'file', rawName: '--file', + index: 0, value: '-', inlineValue: false }, + { kind: 'positional', index: 2, value: '-' }, + ]; + const { tokens } = parseArgs({ strict: false, args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens: strict:false with -- --', () => { + const args = ['--', '--']; + const expectedTokens = [ + { kind: 'option-terminator', index: 0 }, + { kind: 'positional', index: 1, value: '--' }, + ]; + const { tokens } = parseArgs({ strict: false, args, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('default must be a boolean when option type is boolean', () => { + const args = []; + const options = { alpha: { type: 'boolean', default: 'not a boolean' } }; + assert.throws(() => { + parseArgs({ args, options }); + }, /"options\.alpha\.default" property must be of type boolean/ + ); +}); + +test('default must accept undefined value', () => { + const args = []; + const options = { alpha: { type: 'boolean', default: undefined } }; + const result = parseArgs({ args, options }); + const expected = { + values: { + __proto__: null, + }, + positionals: [] + }; + assert.deepStrictEqual(result, expected); +}); + +test('default must be a boolean array when option type is boolean and multiple', () => { + const args = []; + const options = { alpha: { type: 'boolean', multiple: true, default: 'not an array' } }; + assert.throws(() => { + parseArgs({ args, options }); + }, /"options\.alpha\.default" property must be an instance of Array/ + ); +}); + +test('default must be a boolean array when option type is string and multiple is true', () => { + const args = []; + const options = { alpha: { type: 'boolean', multiple: true, default: [true, true, 42] } }; + assert.throws(() => { + parseArgs({ args, options }); + }, /"options\.alpha\.default\[2\]" property must be of type boolean/ + ); +}); + +test('default must be a string when option type is string', () => { + const args = []; + const options = { alpha: { type: 'string', default: true } }; + assert.throws(() => { + parseArgs({ args, options }); + }, /"options\.alpha\.default" property must be of type string/ + ); +}); + +test('default must be an array when option type is string and multiple is true', () => { + const args = []; + const options = { alpha: { type: 'string', multiple: true, default: 'not an array' } }; + assert.throws(() => { + parseArgs({ args, options }); + }, /"options\.alpha\.default" property must be an instance of Array/ + ); +}); + +test('default must be a string array when option type is string and multiple is true', () => { + const args = []; + const options = { alpha: { type: 'string', multiple: true, default: ['str', 42] } }; + assert.throws(() => { + parseArgs({ args, options }); + }, /"options\.alpha\.default\[1\]" property must be of type string/ + ); +}); + +test('default accepted input when multiple is true', () => { + const args = ['--inputStringArr', 'c', '--inputStringArr', 'd', '--inputBoolArr', '--inputBoolArr']; + const options = { + inputStringArr: { type: 'string', multiple: true, default: ['a', 'b'] }, + emptyStringArr: { type: 'string', multiple: true, default: [] }, + fullStringArr: { type: 'string', multiple: true, default: ['a', 'b'] }, + inputBoolArr: { type: 'boolean', multiple: true, default: [false, true, false] }, + emptyBoolArr: { type: 'boolean', multiple: true, default: [] }, + fullBoolArr: { type: 'boolean', multiple: true, default: [false, true, false] }, + }; + const expected = { values: { __proto__: null, + inputStringArr: ['c', 'd'], + inputBoolArr: [true, true], + emptyStringArr: [], + fullStringArr: ['a', 'b'], + emptyBoolArr: [], + fullBoolArr: [false, true, false] }, + positionals: [] }; + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('when default is set, the option must be added as result', () => { + const args = []; + const options = { + a: { type: 'string', default: 'HELLO' }, + b: { type: 'boolean', default: false }, + c: { type: 'boolean', default: true } + }; + const expected = { values: { __proto__: null, a: 'HELLO', b: false, c: true }, positionals: [] }; + + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('when default is set, the args value takes precedence', () => { + const args = ['--a', 'WORLD', '--b', '-c']; + const options = { + a: { type: 'string', default: 'HELLO' }, + b: { type: 'boolean', default: false }, + c: { type: 'boolean', default: true } + }; + const expected = { values: { __proto__: null, a: 'WORLD', b: true, c: true }, positionals: [] }; + + const result = parseArgs({ args, options }); + assert.deepStrictEqual(result, expected); +}); + +test('tokens should not include the default options', () => { + const args = []; + const options = { + a: { type: 'string', default: 'HELLO' }, + b: { type: 'boolean', default: false }, + c: { type: 'boolean', default: true } + }; + + const expectedTokens = []; + + const { tokens } = parseArgs({ args, options, tokens: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('tokens:true should not include the default options after the args input', () => { + const args = ['--z', 'zero', 'positional-item']; + const options = { + z: { type: 'string' }, + a: { type: 'string', default: 'HELLO' }, + b: { type: 'boolean', default: false }, + c: { type: 'boolean', default: true } + }; + + const expectedTokens = [ + { kind: 'option', name: 'z', rawName: '--z', index: 0, value: 'zero', inlineValue: false }, + { kind: 'positional', index: 2, value: 'positional-item' }, + ]; + + const { tokens } = parseArgs({ args, options, tokens: true, allowPositionals: true }); + assert.deepStrictEqual(tokens, expectedTokens); +}); + +test('proto as default value must be ignored', () => { + const args = []; + const options = Object.create(null); + + // eslint-disable-next-line no-proto + options.__proto__ = { type: 'string', default: 'HELLO' }; + + const result = parseArgs({ args, options, allowPositionals: true }); + const expected = { values: { __proto__: null }, positionals: [] }; + assert.deepStrictEqual(result, expected); +}); + + +test('multiple as false should expect a String', () => { + const args = []; + const options = { alpha: { type: 'string', multiple: false, default: ['array'] } }; + assert.throws(() => { + parseArgs({ args, options }); + }, /"options\.alpha\.default" property must be of type string/ + ); +}); diff --git a/test/parallel/test-path-basename.js b/test/parallel/test-path-basename.js index 2d064271f7c..b16f9e5d63a 100644 --- a/test/parallel/test-path-basename.js +++ b/test/parallel/test-path-basename.js @@ -6,6 +6,10 @@ const path = require('path'); assert.strictEqual(path.basename(__filename), 'test-path-basename.js'); assert.strictEqual(path.basename(__filename, '.js'), 'test-path-basename'); assert.strictEqual(path.basename('.js', '.js'), ''); +assert.strictEqual(path.basename('js', '.js'), 'js'); +assert.strictEqual(path.basename('file.js', '.ts'), 'file.js'); +assert.strictEqual(path.basename('file', '.js'), 'file'); +assert.strictEqual(path.basename('file.js.old', '.js.old'), 'file'); assert.strictEqual(path.basename(''), ''); assert.strictEqual(path.basename('/dir/basename.ext'), 'basename.ext'); assert.strictEqual(path.basename('/basename.ext'), 'basename.ext'); diff --git a/test/parallel/test-perf-hooks-histogram.js b/test/parallel/test-perf-hooks-histogram.js index 2137c1b2a3b..1bcc59653bb 100644 --- a/test/parallel/test-perf-hooks-histogram.js +++ b/test/parallel/test-perf-hooks-histogram.js @@ -89,7 +89,12 @@ const { inspect } = require('util'); strictEqual(data.enable, undefined); mc.port1.close(); }); - setTimeout(() => mc.port2.postMessage(e), 100); + const interval = setInterval(() => { + if (e.count > 0) { + clearInterval(interval); + mc.port2.postMessage(e); + } + }, 50); } { diff --git a/test/parallel/test-perf-hooks-resourcetiming.js b/test/parallel/test-perf-hooks-resourcetiming.js new file mode 100644 index 00000000000..056924c4eb8 --- /dev/null +++ b/test/parallel/test-perf-hooks-resourcetiming.js @@ -0,0 +1,316 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const util = require('util'); +const { + PerformanceObserver, + PerformanceEntry, + PerformanceResourceTiming, + performance: { + clearResourceTimings, + markResourceTiming, + }, +} = require('perf_hooks'); + +assert(PerformanceObserver); +assert(PerformanceEntry); +assert.throws(() => new PerformanceEntry(), { code: 'ERR_ILLEGAL_CONSTRUCTOR' }); +assert(PerformanceResourceTiming); +assert(clearResourceTimings); +assert(markResourceTiming); + +function createTimingInfo({ + startTime = 0, + redirectStartTime = 0, + redirectEndTime = 0, + postRedirectStartTime = 0, + finalServiceWorkerStartTime = 0, + finalNetworkRequestStartTime = 0, + finalNetworkResponseStartTime = 0, + endTime = 0, + encodedBodySize = 0, + decodedBodySize = 0, + finalConnectionTimingInfo = null +}) { + if (finalConnectionTimingInfo !== null) { + finalConnectionTimingInfo.domainLookupStartTime = + finalConnectionTimingInfo.domainLookupStartTime || 0; + finalConnectionTimingInfo.domainLookupEndTime = + finalConnectionTimingInfo.domainLookupEndTime || 0; + finalConnectionTimingInfo.connectionStartTime = + finalConnectionTimingInfo.connectionStartTime || 0; + finalConnectionTimingInfo.connectionEndTime = + finalConnectionTimingInfo.connectionEndTime || 0; + finalConnectionTimingInfo.secureConnectionStartTime = + finalConnectionTimingInfo.secureConnectionStartTime || 0; + finalConnectionTimingInfo.ALPNNegotiatedProtocol = + finalConnectionTimingInfo.ALPNNegotiatedProtocol || []; + } + return { + startTime, + redirectStartTime, + redirectEndTime, + postRedirectStartTime, + finalServiceWorkerStartTime, + finalNetworkRequestStartTime, + finalNetworkResponseStartTime, + endTime, + encodedBodySize, + decodedBodySize, + finalConnectionTimingInfo, + }; +} + +// PerformanceResourceTiming should not be initialized externally +{ + assert.throws(() => new PerformanceResourceTiming(), { + name: 'TypeError', + message: 'Illegal constructor', + code: 'ERR_ILLEGAL_CONSTRUCTOR', + }); +} + +// Using performance.getEntries*() +{ + const timingInfo = createTimingInfo({ finalConnectionTimingInfo: {} }); + const customGlobal = {}; + const requestedUrl = 'http://localhost:8080'; + const cacheMode = 'local'; + const initiatorType = 'fetch'; + const resource = markResourceTiming( + timingInfo, + requestedUrl, + initiatorType, + customGlobal, + cacheMode, + ); + + assert(resource instanceof PerformanceEntry); + assert(resource instanceof PerformanceResourceTiming); + + { + const entries = performance.getEntries(); + assert.strictEqual(entries.length, 1); + assert(entries[0] instanceof PerformanceResourceTiming); + } + + { + const entries = performance.getEntriesByType('resource'); + assert.strictEqual(entries.length, 1); + assert(entries[0] instanceof PerformanceResourceTiming); + } + + { + const entries = performance.getEntriesByName(resource.name); + assert.strictEqual(entries.length, 1); + assert(entries[0] instanceof PerformanceResourceTiming); + } + + clearResourceTimings(); + assert.strictEqual(performance.getEntries().length, 0); +} + +// Assert resource data based in timingInfo + +// default values +{ + const timingInfo = createTimingInfo({ finalConnectionTimingInfo: {} }); + const customGlobal = {}; + const requestedUrl = 'http://localhost:8080'; + const cacheMode = 'local'; + const initiatorType = 'fetch'; + const resource = markResourceTiming( + timingInfo, + requestedUrl, + initiatorType, + customGlobal, + cacheMode, + ); + + assert(resource instanceof PerformanceEntry); + assert(resource instanceof PerformanceResourceTiming); + + assert.strictEqual(resource.entryType, 'resource'); + assert.strictEqual(resource.name, requestedUrl); + assert.ok(typeof resource.cacheMode === 'undefined', 'cacheMode does not have a getter'); + assert.strictEqual(resource.startTime, timingInfo.startTime); + assert.strictEqual(resource.duration, 0); + assert.strictEqual(resource.initiatorType, initiatorType); + assert.strictEqual(resource.workerStart, 0); + assert.strictEqual(resource.redirectStart, 0); + assert.strictEqual(resource.redirectEnd, 0); + assert.strictEqual(resource.fetchStart, 0); + assert.strictEqual(resource.domainLookupStart, 0); + assert.strictEqual(resource.domainLookupEnd, 0); + assert.strictEqual(resource.connectStart, 0); + assert.strictEqual(resource.connectEnd, 0); + assert.strictEqual(resource.secureConnectionStart, 0); + assert.deepStrictEqual(resource.nextHopProtocol, []); + assert.strictEqual(resource.requestStart, 0); + assert.strictEqual(resource.responseStart, 0); + assert.strictEqual(resource.responseEnd, 0); + assert.strictEqual(resource.encodedBodySize, 0); + assert.strictEqual(resource.decodedBodySize, 0); + assert.strictEqual(resource.transferSize, 0); + assert.deepStrictEqual(resource.toJSON(), { + name: requestedUrl, + entryType: 'resource', + startTime: 0, + duration: 0, + initiatorType, + nextHopProtocol: [], + workerStart: 0, + redirectStart: 0, + redirectEnd: 0, + fetchStart: 0, + domainLookupStart: 0, + domainLookupEnd: 0, + connectStart: 0, + connectEnd: 0, + secureConnectionStart: 0, + requestStart: 0, + responseStart: 0, + responseEnd: 0, + transferSize: 0, + encodedBodySize: 0, + decodedBodySize: 0, + }); + assert.strictEqual(util.inspect(performance.getEntries()), `[ + PerformanceResourceTiming { + name: 'http://localhost:8080', + entryType: 'resource', + startTime: 0, + duration: 0, + initiatorType: 'fetch', + nextHopProtocol: [], + workerStart: 0, + redirectStart: 0, + redirectEnd: 0, + fetchStart: 0, + domainLookupStart: 0, + domainLookupEnd: 0, + connectStart: 0, + connectEnd: 0, + secureConnectionStart: 0, + requestStart: 0, + responseStart: 0, + responseEnd: 0, + transferSize: 0, + encodedBodySize: 0, + decodedBodySize: 0 + } +]`); + assert.strictEqual(util.inspect(resource), `PerformanceResourceTiming { + name: 'http://localhost:8080', + entryType: 'resource', + startTime: 0, + duration: 0, + initiatorType: 'fetch', + nextHopProtocol: [], + workerStart: 0, + redirectStart: 0, + redirectEnd: 0, + fetchStart: 0, + domainLookupStart: 0, + domainLookupEnd: 0, + connectStart: 0, + connectEnd: 0, + secureConnectionStart: 0, + requestStart: 0, + responseStart: 0, + responseEnd: 0, + transferSize: 0, + encodedBodySize: 0, + decodedBodySize: 0 +}`); + + assert(resource instanceof PerformanceEntry); + assert(resource instanceof PerformanceResourceTiming); + + clearResourceTimings(); + const entries = performance.getEntries(); + assert.strictEqual(entries.length, 0); +} + +// custom getters math +{ + const timingInfo = createTimingInfo({ + endTime: 100, + startTime: 50, + encodedBodySize: 150, + }); + const customGlobal = {}; + const requestedUrl = 'http://localhost:8080'; + const cacheMode = ''; + const initiatorType = 'fetch'; + const resource = markResourceTiming( + timingInfo, + requestedUrl, + initiatorType, + customGlobal, + cacheMode, + ); + + assert(resource instanceof PerformanceEntry); + assert(resource instanceof PerformanceResourceTiming); + + assert.strictEqual(resource.entryType, 'resource'); + assert.strictEqual(resource.name, requestedUrl); + assert.ok(typeof resource.cacheMode === 'undefined', 'cacheMode does not have a getter'); + assert.strictEqual(resource.startTime, timingInfo.startTime); + // Duration should be the timingInfo endTime - startTime + assert.strictEqual(resource.duration, 50); + // TransferSize should be encodedBodySize + 300 when cacheMode is empty + assert.strictEqual(resource.transferSize, 450); + + assert(resource instanceof PerformanceEntry); + assert(resource instanceof PerformanceResourceTiming); + + clearResourceTimings(); + const entries = performance.getEntries(); + assert.strictEqual(entries.length, 0); +} + +// Using PerformanceObserver +{ + const obs = new PerformanceObserver(common.mustCall((list) => { + { + const entries = list.getEntries(); + assert.strictEqual(entries.length, 1); + assert(entries[0] instanceof PerformanceResourceTiming); + } + { + const entries = list.getEntriesByType('resource'); + assert.strictEqual(entries.length, 1); + assert(entries[0] instanceof PerformanceResourceTiming); + } + { + const entries = list.getEntriesByName('http://localhost:8080'); + assert.strictEqual(entries.length, 1); + assert(entries[0] instanceof PerformanceResourceTiming); + } + obs.disconnect(); + })); + obs.observe({ entryTypes: ['resource'] }); + + const timingInfo = createTimingInfo({ finalConnectionTimingInfo: {} }); + const customGlobal = {}; + const requestedUrl = 'http://localhost:8080'; + const cacheMode = 'local'; + const initiatorType = 'fetch'; + const resource = markResourceTiming( + timingInfo, + requestedUrl, + initiatorType, + customGlobal, + cacheMode, + ); + + assert(resource instanceof PerformanceEntry); + assert(resource instanceof PerformanceResourceTiming); + + clearResourceTimings(); + const entries = performance.getEntries(); + assert.strictEqual(entries.length, 0); +} diff --git a/test/parallel/test-performance-function.js b/test/parallel/test-performance-function.js index ea928028208..5f774d6c2ad 100644 --- a/test/parallel/test-performance-function.js +++ b/test/parallel/test-performance-function.js @@ -75,16 +75,18 @@ const { }); } -// Function can only be wrapped once, also check length and name +// Function can be wrapped many times, also check length and name { const m = (a, b = 1) => {}; const n = performance.timerify(m); const o = performance.timerify(m); const p = performance.timerify(n); - assert.strictEqual(n, o); - assert.strictEqual(n, p); + assert.notStrictEqual(n, o); + assert.notStrictEqual(n, p); + assert.notStrictEqual(o, p); assert.strictEqual(n.length, m.length); assert.strictEqual(n.name, 'timerified m'); + assert.strictEqual(p.name, 'timerified timerified m'); } (async () => { @@ -121,3 +123,22 @@ const { }); }); })().then(common.mustCall()); + +// Regression tests for https://github.com/nodejs/node/issues/40623 +{ + assert.strictEqual(performance.timerify(function func() { + return 1; + })(), 1); + assert.strictEqual(performance.timerify(function() { + return 1; + })(), 1); + assert.strictEqual(performance.timerify(() => { + return 1; + })(), 1); + class C {} + const wrap = performance.timerify(C); + assert.ok(new wrap() instanceof C); + assert.throws(() => wrap(), { + name: 'TypeError', + }); +} diff --git a/test/parallel/test-performance-gc.js b/test/parallel/test-performance-gc.js index 1561bc5fb78..9c4a3a850a2 100644 --- a/test/parallel/test-performance-gc.js +++ b/test/parallel/test-performance-gc.js @@ -35,6 +35,7 @@ const kinds = [ assert.strictEqual(entry.flags, NODE_PERFORMANCE_GC_FLAGS_FORCED); assert.strictEqual(entry.detail.flags, NODE_PERFORMANCE_GC_FLAGS_FORCED); assert.strictEqual(typeof entry.startTime, 'number'); + assert(entry.startTime < 1e4, 'startTime should be relative to performance.timeOrigin.'); assert.strictEqual(typeof entry.duration, 'number'); obs.disconnect(); })); diff --git a/test/parallel/test-performance-measure.js b/test/parallel/test-performance-measure.js index e9aaca72bdd..949258f96e1 100644 --- a/test/parallel/test-performance-measure.js +++ b/test/parallel/test-performance-measure.js @@ -5,11 +5,12 @@ const assert = require('assert'); const { PerformanceObserver, performance } = require('perf_hooks'); const DELAY = 1000; +const ALLOWED_MARGIN = 10; const expected = ['Start to Now', 'A to Now', 'A to B']; const obs = new PerformanceObserver(common.mustCall((items) => { items.getEntries().forEach(({ name, duration }) => { - assert.ok(duration > DELAY); + assert.ok(duration > (DELAY - ALLOWED_MARGIN)); assert.strictEqual(expected.shift(), name); }); })); diff --git a/test/parallel/test-primordials-promise.js b/test/parallel/test-primordials-promise.js index 61651929384..c753b4b7e79 100644 --- a/test/parallel/test-primordials-promise.js +++ b/test/parallel/test-primordials-promise.js @@ -5,19 +5,31 @@ const common = require('../common'); const assert = require('assert'); const { - PromisePrototypeCatch, PromisePrototypeThen, + SafePromiseAll, + SafePromiseAllSettled, + SafePromiseAny, SafePromisePrototypeFinally, + SafePromiseRace, } = require('internal/test/binding').primordials; -Promise.prototype.catch = common.mustNotCall(); -Promise.prototype.finally = common.mustNotCall(); -Promise.prototype.then = common.mustNotCall(); +Array.prototype[Symbol.iterator] = common.mustNotCall('%Array.prototype%[@@iterator]'); +Promise.all = common.mustNotCall('%Promise%.all'); +Promise.allSettled = common.mustNotCall('%Promise%.allSettled'); +Promise.any = common.mustNotCall('%Promise%.any'); +Promise.race = common.mustNotCall('%Promise%.race'); +Promise.prototype.catch = common.mustNotCall('%Promise.prototype%.catch'); +Promise.prototype.finally = common.mustNotCall('%Promise.prototype%.finally'); +Promise.prototype.then = common.mustNotCall('%Promise.prototype%.then'); -assertIsPromise(PromisePrototypeCatch(Promise.reject(), common.mustCall())); assertIsPromise(PromisePrototypeThen(test(), common.mustCall())); assertIsPromise(SafePromisePrototypeFinally(test(), common.mustCall())); +assertIsPromise(SafePromiseAll([test()])); +assertIsPromise(SafePromiseAllSettled([test()])); +assertIsPromise(SafePromiseAny([test()])); +assertIsPromise(SafePromiseRace([test()])); + async function test() { const catchFn = common.mustCall(); const finallyFn = common.mustCall(); diff --git a/test/parallel/test-process-beforeexit.js b/test/parallel/test-process-beforeexit.js index 7b7ba48f7d8..e04b756cade 100644 --- a/test/parallel/test-process-beforeexit.js +++ b/test/parallel/test-process-beforeexit.js @@ -59,12 +59,21 @@ function tryRepeatedTimer() { if (++n < N) setTimeout(repeatedTimer, 1); else // n == N - process.once('beforeExit', common.mustCall(tryNextTick)); + process.once('beforeExit', common.mustCall(tryNextTickSetImmediate)); }, N); setTimeout(repeatedTimer, 1); } // Test if the callback of `process.nextTick` can be invoked. +function tryNextTickSetImmediate() { + process.nextTick(common.mustCall(function() { + setImmediate(common.mustCall(() => { + process.once('beforeExit', common.mustCall(tryNextTick)); + })); + })); +} + +// Test that `process.nextTick` won't keep the event loop running by itself. function tryNextTick() { process.nextTick(common.mustCall(function() { process.once('beforeExit', common.mustNotCall()); diff --git a/test/parallel/test-process-dlopen-error-message-crash.js b/test/parallel/test-process-dlopen-error-message-crash.js new file mode 100644 index 00000000000..d678021764e --- /dev/null +++ b/test/parallel/test-process-dlopen-error-message-crash.js @@ -0,0 +1,46 @@ +'use strict'; + +// This is a regression test for some scenarios in which node would pass +// unsanitized user input to a printf-like formatting function when dlopen +// fails, potentially crashing the process. + +const common = require('../common'); +const tmpdir = require('../common/tmpdir'); +tmpdir.refresh(); + +const assert = require('assert'); +const fs = require('fs'); + +// This error message should not be passed to a printf-like function. +assert.throws(() => { + process.dlopen({ exports: {} }, 'foo-%s.node'); +}, ({ name, code, message }) => { + assert.strictEqual(name, 'Error'); + assert.strictEqual(code, 'ERR_DLOPEN_FAILED'); + if (!common.isAIX) { + assert.match(message, /foo-%s\.node/); + } + return true; +}); + +const notBindingDir = 'test/addons/not-a-binding'; +const notBindingPath = `${notBindingDir}/build/Release/binding.node`; +const strangeBindingPath = `${tmpdir.path}/binding-%s.node`; +// Ensure that the addon directory exists, but skip the remainder of the test if +// the addon has not been compiled. +fs.accessSync(notBindingDir); +try { + fs.copyFileSync(notBindingPath, strangeBindingPath); +} catch (err) { + if (err.code !== 'ENOENT') throw err; + common.skip(`addon not found: ${notBindingPath}`); +} + +// This error message should also not be passed to a printf-like function. +assert.throws(() => { + process.dlopen({ exports: {} }, strangeBindingPath); +}, { + name: 'Error', + code: 'ERR_DLOPEN_FAILED', + message: /^Module did not self-register: '.*binding-%s\.node'\.$/ +}); diff --git a/test/parallel/test-process-env-allowed-flags-are-documented.js b/test/parallel/test-process-env-allowed-flags-are-documented.js index a2738f08e2f..a1e7eebc060 100644 --- a/test/parallel/test-process-env-allowed-flags-are-documented.js +++ b/test/parallel/test-process-env-allowed-flags-are-documented.js @@ -43,6 +43,10 @@ for (const line of [...nodeOptionsLines, ...v8OptionsLines]) { } } +if (!common.hasOpenSSL3) { + documented.delete('--openssl-legacy-provider'); +} + // Filter out options that are conditionally present. const conditionalOpts = [ { @@ -50,6 +54,8 @@ const conditionalOpts = [ filter: (opt) => { return [ '--openssl-config', + common.hasOpenSSL3 ? '--openssl-legacy-provider' : '', + '--openssl-shared-config', '--tls-cipher-list', '--use-bundled-ca', '--use-openssl-ca', diff --git a/test/parallel/test-process-env-tz.js b/test/parallel/test-process-env-tz.js index b0188ab9c26..dcc69ed4bf1 100644 --- a/test/parallel/test-process-env-tz.js +++ b/test/parallel/test-process-env-tz.js @@ -1,10 +1,4 @@ 'use strict'; - -// Set the locale to a known good value because it affects ICU's date string -// formatting. Setting LC_ALL needs to happen before the first call to -// `icu::Locale::getDefault()` because ICU caches the result. -process.env.LC_ALL = 'C'; - const common = require('../common'); const assert = require('assert'); @@ -31,6 +25,7 @@ if (date.toString().includes('(Central European Time)') || common.skip('tzdata too old'); } +// Text representation of timezone depends on locale in environment assert.match( date.toString(), /^Sat Apr 14 2018 14:34:56 GMT\+0200 \(.+\)$/); diff --git a/test/parallel/test-process-setgroups.js b/test/parallel/test-process-setgroups.js index 2e04c8a1756..9506f24a5f3 100644 --- a/test/parallel/test-process-setgroups.js +++ b/test/parallel/test-process-setgroups.js @@ -29,8 +29,6 @@ assert.throws( { code: 'ERR_OUT_OF_RANGE', name: 'RangeError', - message: 'The value of "groups[1]" is out of range. ' + - 'It must be >= 0 && < 4294967296. Received -1' } ); diff --git a/test/parallel/test-process-versions.js b/test/parallel/test-process-versions.js index e63848b1faf..fb14f2607cb 100644 --- a/test/parallel/test-process-versions.js +++ b/test/parallel/test-process-versions.js @@ -13,6 +13,7 @@ const expected_keys = [ 'nghttp2', 'napi', 'llhttp', + 'anode', ]; if (common.hasCrypto) { diff --git a/test/parallel/test-queue-microtask-uncaught-asynchooks.js b/test/parallel/test-queue-microtask-uncaught-asynchooks.js index ee64c6e68ab..35b3d9fa309 100644 --- a/test/parallel/test-queue-microtask-uncaught-asynchooks.js +++ b/test/parallel/test-queue-microtask-uncaught-asynchooks.js @@ -11,7 +11,7 @@ let µtaskId; const events = []; async_hooks.createHook({ - init(id, type, triggerId, resoure) { + init(id, type, triggerId, resource) { if (type === 'Microtask') { µtaskId = id; events.push('init'); diff --git a/test/parallel/test-readline-emit-keypress-events.js b/test/parallel/test-readline-emit-keypress-events.js index 8bb10d905ca..a9ffd3276c4 100644 --- a/test/parallel/test-readline-emit-keypress-events.js +++ b/test/parallel/test-readline-emit-keypress-events.js @@ -7,22 +7,66 @@ require('../common'); const assert = require('assert'); const readline = require('readline'); const PassThrough = require('stream').PassThrough; -const stream = new PassThrough(); -const sequence = []; -const keys = []; -readline.emitKeypressEvents(stream); - -stream.on('keypress', (s, k) => { - sequence.push(s); - keys.push(k); -}); - -stream.write('foo'); - -assert.deepStrictEqual(sequence, ['f', 'o', 'o']); -assert.deepStrictEqual(keys, [ +const expectedSequence = ['f', 'o', 'o']; +const expectedKeys = [ { sequence: 'f', name: 'f', ctrl: false, meta: false, shift: false }, { sequence: 'o', name: 'o', ctrl: false, meta: false, shift: false }, { sequence: 'o', name: 'o', ctrl: false, meta: false, shift: false }, -]); +]; + +{ + const stream = new PassThrough(); + const sequence = []; + const keys = []; + + readline.emitKeypressEvents(stream); + stream.on('keypress', (s, k) => { + sequence.push(s); + keys.push(k); + }); + stream.write('foo'); + + assert.deepStrictEqual(sequence, expectedSequence); + assert.deepStrictEqual(keys, expectedKeys); +} + +{ + const stream = new PassThrough(); + const sequence = []; + const keys = []; + + stream.on('keypress', (s, k) => { + sequence.push(s); + keys.push(k); + }); + readline.emitKeypressEvents(stream); + stream.write('foo'); + + assert.deepStrictEqual(sequence, expectedSequence); + assert.deepStrictEqual(keys, expectedKeys); +} + +{ + const stream = new PassThrough(); + const sequence = []; + const keys = []; + const keypressListener = (s, k) => { + sequence.push(s); + keys.push(k); + }; + + stream.on('keypress', keypressListener); + readline.emitKeypressEvents(stream); + stream.removeListener('keypress', keypressListener); + stream.write('foo'); + + assert.deepStrictEqual(sequence, []); + assert.deepStrictEqual(keys, []); + + stream.on('keypress', keypressListener); + stream.write('foo'); + + assert.deepStrictEqual(sequence, expectedSequence); + assert.deepStrictEqual(keys, expectedKeys); +} diff --git a/test/parallel/test-readline-interface.js b/test/parallel/test-readline-interface.js index f253a443c05..c4f97ba3759 100644 --- a/test/parallel/test-readline-interface.js +++ b/test/parallel/test-readline-interface.js @@ -71,6 +71,19 @@ function assertCursorRowsAndCols(rli, rows, cols) { assert(rl instanceof readline.Interface); } +{ + const fi = new FakeInput(); + const rli = new readline.Interface( + fi, + fi, + common.mustCall((line) => [[], line]), + true, + ); + assert(rli instanceof readline.Interface); + fi.emit('data', 'a\t'); + rli.close(); +} + [ undefined, 50, @@ -131,11 +144,7 @@ function assertCursorRowsAndCols(rli, rows, cols) { input, tabSize: 0 }), - { - message: 'The value of "tabSize" is out of range. ' + - 'It must be >= 1 && < 4294967296. Received 0', - code: 'ERR_OUT_OF_RANGE' - } + { code: 'ERR_OUT_OF_RANGE' } ); assert.throws( diff --git a/test/parallel/test-release-changelog.js b/test/parallel/test-release-changelog.js new file mode 100644 index 00000000000..99889fa1724 --- /dev/null +++ b/test/parallel/test-release-changelog.js @@ -0,0 +1,89 @@ +'use strict'; + +// This test checks that the changelogs contain an entry for releases. + +const common = require('../common'); +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); + +const getDefine = (text, name) => { + const regexp = new RegExp(`#define\\s+${name}\\s+(.*)`); + const match = regexp.exec(text); + assert.notStrictEqual(match, null); + return match[1]; +}; + +const srcRoot = path.join(__dirname, '..', '..'); +const mainChangelogFile = path.join(srcRoot, 'CHANGELOG.md'); +const versionFile = path.join(srcRoot, 'src', 'node_version.h'); +const versionText = fs.readFileSync(versionFile, { encoding: 'utf8' }); +const release = getDefine(versionText, 'NODE_VERSION_IS_RELEASE') !== '0'; + +if (!release) { + common.skip('release bit is not set'); +} + +const major = getDefine(versionText, 'NODE_MAJOR_VERSION'); +const minor = getDefine(versionText, 'NODE_MINOR_VERSION'); +const patch = getDefine(versionText, 'NODE_PATCH_VERSION'); +const versionForRegex = `${major}\\.${minor}\\.${patch}`; + +const lts = getDefine(versionText, 'NODE_VERSION_IS_LTS') !== '0'; +const codename = getDefine(versionText, 'NODE_VERSION_LTS_CODENAME').slice(1, -1); +// If the LTS bit is set there should be a codename. +if (lts) { + assert.notStrictEqual(codename, ''); +} + +const changelogPath = `doc/changelogs/CHANGELOG_V${major}.md`; +// Check CHANGELOG_V*.md +{ + const changelog = fs.readFileSync(path.join(srcRoot, changelogPath), { encoding: 'utf8' }); + // Check title matches major version. + assert.match(changelog, new RegExp(`# Node\\.js ${major} ChangeLog`)); + // Check table header + let tableHeader; + if (lts) { + tableHeader = new RegExp(`
    LTS '${codename}'Current<\/th>/; + } + assert.match(changelog, tableHeader); + // Check table contains link to this release. + assert.match(changelog, new RegExp(`${versionForRegex}`)); + // Check anchor for this release. + assert.match(changelog, new RegExp(``)); + // Check title for changelog entry. + let title; + if (lts) { + title = new RegExp(`## \\d{4}-\\d{2}-\\d{2}, Version ${versionForRegex} '${codename}' \\(LTS\\), @\\S+`); + } else { + title = new RegExp(`## \\d{4}-\\d{2}-\\d{2}, Version ${versionForRegex} \\(Current\\), @\\S+`); + } + assert.match(changelog, title); +} + +// Main CHANGELOG.md checks +{ + const mainChangelog = fs.readFileSync(mainChangelogFile, { encoding: 'utf8' }); + // Check for the link to the appropriate CHANGELOG_V*.md file. + let linkToChangelog; + if (lts) { + linkToChangelog = new RegExp(`\\[Node\\.js ${major}\\]\\(${changelogPath}\\) \\*\\*Long Term Support\\*\\*`); + } else { + linkToChangelog = new RegExp(`\\[Node\\.js ${major}\\]\\(${changelogPath}\\) \\*\\*Current\\*\\*`); + } + assert.match(mainChangelog, linkToChangelog); + // Check table header. + let tableHeader; + if (lts) { + tableHeader = new RegExp(`${major} \\(LTS\\)${major} \\(Current\\)